[0026]概して、本開示では、ビデオデータをコーディングするための技法について説明する。より詳細には、本開示では、ビデオコーディングプロセス中にデータを変換し、変換係数を走査することに関係する技法について説明する。符号化ビデオデータは予測データと残差データとを含み得る。ビデオエンコーダは、イントラ予測モードまたはインター予測モード中に予測データを生成し得る。イントラ予測は、概して、あるピクチャのブロック中のピクセル値を、同じピクチャの隣接する、前にコーディングされたブロック中の参照サンプルに対して予測することを伴う。インター予測は、概して、ピクチャのブロックのピクセル値を、前にコーディングされたピクチャ中の参照ブロックのデータに対して予測することを伴う。
[0027]イントラ予測またはインター予測の後に、ビデオエンコーダはブロックの残差ピクセル値を計算し得る。残差値は、概して、ブロックの予測ピクセル値データと、ブロックの真のピクセル値データとの間の差分に対応する。たとえば、残差値は、コード化ピクセルと予測ピクセルとの間の差分を示すピクセル差分値を含み得る。いくつかの例では、コード化ピクセルは、コーディングされるべきピクセルのブロックに関連し得、予測ピクセルは、コード化ブロックを予測するために使用されるピクセルの1つまたは複数のブロックに関連し得る。ブロックの残差値をさらに圧縮するために、残差値は、変換領域における変換係数のセットに変換され得る。理想的には、変換係数は、できるだけ多くの(「エネルギー」とも呼ばれる)データをできるだけ少数の係数に圧縮する。この変換は、ピクセルの残差値を空間領域から変換領域に変換する。変換係数は、元のブロックと通常同じサイズである係数の2次元行列に対応する。言い換えれば、通常、元のブロック中のピクセルとちょうど同数の変換係数がある。ただし、変換により、変換係数の多くは、0に等しい値を有し得る。
[0028]ビデオエンコーダは、次いで、ビデオデータをさらに圧縮するために変換係数を量子化し得る。量子化は、概して、相対的に大きい範囲内の値を相対的に小さい範囲中の値にマッピングし、それによって、量子化された変換係数を表すために必要とされるデータの量を低減することを伴う。場合によっては、量子化はいくつかの値を0に低減し得る。量子化の後に、ビデオエンコーダは、変換係数を走査して、量子化された変換係数を含む2次元行列から1次元ベクトルを生成し得る。
[0029]ビデオエンコーダは、次いで、データをなお一層圧縮するために、得られたアレイをエントロピー符号化し得る。いくつかの例では、ビデオエンコーダは、たとえば、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable-length coding)を使用して、アレイの様々な可能な量子化変換係数を表すために可変長コード(VLC:variable length code)を使用するように構成され得る。他の例では、ビデオエンコーダは、たとえば、コンテキスト適応型バイナリ算術コーディング(CABAC:context-adaptive binary arithmetic coding)を使用して、得られた量子化係数を符号化するためにバイナリ算術コーディングを使用するように構成され得る。
[0030]本開示では、ビデオコーディングプロセス中に変換係数を走査し、エントロピー符号化することに関係するいくつかの技法について説明する。特に、本開示では、変換係数行列のサイズによって決定され得る、変換係数の数に基づいて、変換係数行列を走査するための走査順序を識別し、明示的にシグナリングすべきかどうかを判断することに関係するいくつかの技法について説明する。本技法は、ビデオ符号化および/または復号を実行するように構成されたビデオエンコーダ/デコーダ(コーデック)と処理ユニットとを含む、ビデオ符号化ユニットとビデオ復号ユニットの両方によって適用され得る。
[0031]高効率ビデオコーディング(HEVC:High Efficiency Video Coding)と現在呼ばれる、新しいビデオコーディング規格を開発するための取り組みが現在進行中である。今度の規格は、非公式にITU−T H.265と呼ばれることもあるが、そのような名称は公式になされたものでない。この規格化の取り組みは、HEVCテストモデル(HM:HEVC Test Model)と呼ばれるビデオコーディングデバイスのモデルに基づく。提案されたHEVC規格は、たとえば、ITU−T H.264/AVCに従って構成された他のデバイスに勝るビデオコーディングデバイスのいくつかの能力を前提とする。たとえば、H.264は9つのイントラ予測符号化モードを与えるが、提案されたHEVC規格は35個ものイントラ予測符号化モードを与える。
[0032]提案されたHEVC規格は、ビデオデータのブロックをコーディングユニット(CU:coding unit)と称する。ビットストリーム内のシンタックスデータは、ピクセルの数に関して最大のコーディングユニットである最大コーディングユニット(LCU:largest coding unit)を定義し得る。概して、CUは、CUがサイズ差異を有しないことを除いて、H.264に従ってコーディングされたマクロブロックと同様の目的を有する。したがって、CUはサブCUに分割され得る。概して、本開示におけるCUへの言及は、ピクチャの最大コーディングユニットまたはLCUのサブCUを指すことがある。LCUは複数のサブCUに分割され、各サブCUは複数のサブCUに分割され得る。ビットストリームのためのシンタックスデータは、CU深さと呼ばれる、LCUが分割され得る最大回数を定義し得る。それに応じて、ビットストリームは最小コーディングユニット(SCU:smallest coding unit)をも定義し得る。
[0033]LCUは4分木データ構造に関連付けられ得る。概して、4分木データ構造はCUごとに1つのノードを含み、ルートノードはLCUに対応する。CUが4つのサブCUに分割された場合、CUに対応するノードは4つのリーフノードを含み、リーフノードの各々はサブCUのうちの1つに対応する。4分木データ構造の各ノードは、対応するCUのシンタックスデータを与え得る。たとえば、4分木のノードは、そのノードに対応するCUがサブCUに分割されるかどうかを示す分割フラグを含み得る。CUのシンタックス要素は、再帰的に定義され、CUがサブCUに分割されるかどうかに依存し得る。
[0034]分割されないCUは、1つまたは複数の予測ユニット(PU:prediction unit)を含み得る。概して、PUは、対応するCUの全部または一部分を表し、そのPUの参照サンプルを取り出すためのデータを含む。たとえば、PUがイントラモード符号化されるとき、PUは、PUのイントラ予測モードを記述するデータを含み得る。別の例として、PUがインターモード符号化されるとき、PUは、PUの動きベクトルを定義するデータを含み得る。動きベクトルを定義するデータは、たとえば、動きベクトルの水平成分、動きベクトルの垂直成分、動きベクトルの解像度(たとえば、1/4ピクセル精度もしくは1/8ピクセル精度)、動きベクトルが指す参照フレーム、および/または動きベクトルの参照リスト(たとえば、リスト0もしくはリスト1)を記述し得る。(1つまたは複数の)PUを定義するCUのデータはまた、たとえば、CUを1つまたは複数のPUに区分することを記述し得る。区分モードは、CUがコーディングされないか、イントラ予測モード符号化されるか、またはインター予測モード符号化されるかの間で異なり得る。
[0035]1つまたは複数のPUを有するCUはまた、1つまたは複数の変換ユニット(TU:transform unit)を含み得る。PUを使用した予測の後に、ビデオエンコーダはPUの残差値を計算し得る。残差値は変換され、量子化され、走査され得る。TUは、必ずしもPUのサイズに制限されるとは限らない。したがって、TUは、同じCUの対応するPUよりも大きいことも小さいこともある。したがって、PUは、単一のTUまたは複数のTUを有し得る。いくつかの例では、TUの最大サイズは、対応するCUのサイズであり得る。本開示ではまた、CU、PU、またはTUのいずれかを指すために「ブロック」という用語を使用する。
[0036]概して、上述のように、本開示の技法は、ビデオデータを変換し、量子化し、走査し、エントロピー符号化することに関係する。いくつかの例では、本開示の技法は、たとえば、ビデオデータのブロックに関連する変換係数の数に基づいて、変換係数の走査順序をシグナリングすべきかどうかを決定することを含む。すなわち、一例では、本開示の態様は、TUのサイズに基づいて、TUに関連する変換係数を走査するための走査順序をシグナリングすべきかどうかを決定することに関係し、TUのサイズは、TUに関連する変換係数の数の指示(インジケーション)を与える。別の例では、本開示の態様は、TUに関連する有効変換係数の数に基づいてTUの走査順序をシグナリングすべきかどうかを決定することに関係する。さらに別の例では、本開示の態様は、TUの最後の有効変換係数の相対位置に基づいてTUの走査順序をシグナリングすべきかどうかを決定することに関係する。この例では、最後の有効係数の相対位置は、以下でより詳細に説明するように、最後の有効係数フラグに基づいて識別され得る。
[0037]本開示では、概して、「走査順序」を、量子化変換係数が、たとえば、2次元ブロックまたは行列から1次元アレイに直列化される順序のことを言う。走査順序は、変換係数が直列化されるときに、2次元行列中の変換係数の相対位置を参照することによって変換係数が直列化されるシーケンスを識別し得る。本開示ではまた、「走査パターン」を、量子化変換係数が2次元行列から1次元アレイに直列化されるパターンのことを言うことがある。すなわち、走査パターンは、2次元行列を通る追跡パターン(たとえば、ジグザグパターン)を参照することによって変換係数が直列化されるシーケンスを識別し得る。したがって、「走査順序」と「走査パターン」という用語は両方とも、どのように変換係数の2次元行列が直列化されるかを説明するために使用され得、本明細書では互換的に使用され得る。
[0038]一例では、本開示の技法は、現在符号化されているCUに関連する変換ユニット(TU)のサイズを検査することにより、変換係数の数に基づいて、変換係数の走査順序を生成し、シグナリングすべきかどうかを決定することを含む。たとえば、16×16TUは、正方行列に構成され得る256個の個々の関連する変換係数を有する。本開示のいくつかの態様によれば、ビデオエンコーダは、所定のサイズしきい値を超えるTUのみの走査順序を生成し、明示的にシグナリングし得る。TUが所定のサイズしきい値を超えない場合、ビデオエンコーダは、TUに関連する変換係数を走査するとき、所定のまたはデフォルトの走査順序を使用し得る。この例では、ビデオエンコーダは、所定の(予め定められた)走査順序をビデオデコーダにシグナリングしなくてよい。
[0039]別の例では、本開示の技法は、TU中に含まれる有効係数の数を決定することにより、変換係数の数に基づいて、走査順序を生成し、シグナリングすべきかどうかを決定することを含む。たとえば、上述のように、変換後に、係数は、一般に、ビデオデータをさらに圧縮するために量子化される。場合によっては、量子化はいくつかの値を0に低減し得る。したがって、量子化後に(および直列化の前に)、TUは、非ゼロ値を有する1つまたは複数の変換係数を含むが、1つまたは複数の他の変換係数はゼロ値を有し得る。残りの非ゼロ量子化変換係数は「有効(significant)」変換係数と呼ばれることがある。本開示の技法は、有効変換係数の数が所定のしきい値を超えるかどうかに基づいて走査順序をシグナリングすべきかどうかを決定することを含む。有効変換係数の数が所定のしきい値を超えない場合、ビデオエンコーダは、TUに関連する変換係数を走査するとき、所定のまたはデフォルトの走査順序を使用し得る。この例では、ビデオエンコーダは、所定の走査順序をビデオデコーダにシグナリングしなくてよい。
[0040]本開示の技法はまた、TU中に含まれる最後の有効係数の位置を識別することによって、変換係数の数に基づいて、走査順序を生成およびシグナリングすべきかどうかを決定することを含む。すなわち、いくつかの例によれば、ビデオコーダは、TUのための有効性マップを生成し、有効性マップは、TUの有効係数の相対位置を識別し得る。一例では、有効性マップは、TUと同じサイズであり、各変換係数に対応するフラグから構成され得る。その位置における対応する変換係数が非ゼロである場合、ビデオコーダは有効性フラグを「1」の値に設定し得る。代替的に、その位置における対応する変換係数がゼロ値である場合、ビデオコーダは有効性フラグを「0」の値に設定し得る。いくつかの例では、ビデオエンコーダは、変換係数と同じ方法で有効性マップを直列化し、エントロピー符号化し得る。別の例では、ビデオエンコーダは、変換係数に対して逆順に有効性を直列化し得る。
[0041]その上、ビデオエンコーダは、予め定義された走査順序(たとえば、ジグザグ走査順序)に従って変換係数行列を走査するように構成され得る。したがって、行列の各変換係数には、所与の変換係数が行列の他の変換係数に対していつ走査されることになるかを識別する位置が割り当てられ得る。変換係数位置が与えられれば、ビデオエンコーダは、最終の非ゼロ変換係数、たとえば、最後の「有効」係数の位置を識別し得る。概して、本開示では、特定の変換係数が他の変換係数位置よりも時間的に後で走査される場合、その特定の変換係数位置は当該他の変換係数位置「よりも大きい」と呼ぶことがある。
[0042]本開示のいくつかの態様によれば、ビデオエンコーダは、所定のしきい値位置よりも大きい最後の有効係数を有するTUのみの走査順序を生成し、シグナリングし得る。TUが、所定のしきい値位置よりも大きい位置において1つまたは複数の有効な、すなわち、非ゼロの変換係数を有しない場合、ビデオエンコーダは、TUに関連する変換係数を走査するとき、所定のまたはデフォルトの走査順序を使用し得る。この例では、ビデオエンコーダは、所定の走査順序をビデオデコーダにシグナリングしなくてよい。
[0043]ビデオエンコーダに関して説明したが、そのような技法はビデオデコーダによっても実装され得ることを理解されたい。すなわち、ビデオデコーダは、ビットストリーム中で受信された変換係数の数に基づいて、受信されたビットストリームが走査順序の指示を含むかどうかを判断し得る。たとえば、ビデオデコーダは、(たとえば、ビットストリーム中に含まれる変換係数の数に基づく)受信されたTUのサイズ、受信されたTUの有効係数の数、および/または受信されたTUの最後の有効係数の位置に基づいて、ビットストリームが走査順序の指示を含むかどうかを決定し得る。受信されたビットストリームが走査順序の指示(たとえば、走査順序を定義する1つまたは複数のシンタックス要素など)を含むとビデオデコーダが決定した場合、ビデオデコーダは、走査順序を識別し、走査順序に従って変換係数を走査(または逆走査)し得る。すなわち、ビデオデコーダは、受信されたビットストリームの直列化アレイから変換係数の2次元アレイを生成するために、シグナリングされた走査順序を適用し得る。受信されたビットストリームが走査順序の指示を含まないとビデオデコーダが決定した場合、ビデオデコーダは、デフォルトの予め定義された走査順序(たとえば、ビデオエンコーダによって適用されるのと同じデフォルト走査順序)を適用し得る。
[0044]本開示の技法は、ビデオデータのインター予測ブロックに関連する変換係数、ならびにビデオデータのイントラ予測ブロックに関連する変換係数を直列化するための走査順序を生成およびシグナリングすべきかどうかを決定することを含む。さらに、走査順序を明示的にシグナリングするとき、本開示の態様は、そのようなシグナリングを最適化することに関係する。すなわち、たとえば、本開示の技法は、走査順序シグナリングを改善するためにコンテキスト情報を使用することを含む。
[0045]本開示の態様によれば、走査される必要がある変換係数の数に基づいて、特定の走査順序を生成し、明示的にシグナリングすべきかどうかの決定を行うことにより、ビデオエンコーダは、特定の走査順序を潜在的に最も効率的なときにシグナリングし得る。すなわち、本開示の技法は、特定の走査順序を生成およびシグナリングすることに関連する計算量的コストおよびシグナリングコストと、特定の走査順序を実装することによってエントロピーコーディング中に達成される全体的なシグナリング効率の潜在的な増加との間のバランスをとる。
[0046]たとえば、ビデオデータのブロックを符号化するとき、ビデオエンコーダは、特定の走査順序を識別することによって計算リソースを費やす。さらに、ビデオエンコーダは、特定の走査順序をビデオデコーダにシグナリングすることによってシグナリングリソースを費やす。すなわち、ビデオエンコーダは、特定の走査順序をビデオデコーダにシグナリングする必要があり、それにより、ビデオデコーダに送られるビットストリーム中のビット数が増加し得る。
[0047]しかしながら、変換係数の数が比較的大きい場合、走査順序を実装し、明示的にシグナリングすることに関連する計算量的コストおよびシグナリングコストは、エントロピーコーディング段階における効率の増加によって相殺され得る。たとえば、変換係数の数が比較的大きい場合、特定の走査順序を実装すると、非ゼロ変換係数を変換係数の直列化アレイの前部のほうへパックする可能性が増加し、それによってエントロピーコーディング効率が増加し得る。その上、特定の走査順序を実装すると、ゼロ値変換係数の比較的長いランを作成する可能性が増加し、それによってエントロピーコーディング効率がさらに増加し得る。すなわち、非ゼロ変換係数を変換係数の直列化アレイの前部のほうへパックすること、ならびにゼロ値変換係数のランを増加させることにより、より少ないビットで変換係数がシグナリングされることが可能になり得る。
[0048]関連する変換係数および/または有効変換係数が比較的少数であるビデオデータの比較的小さいブロックを符号化するとき、特定の走査順序を生成し、明示的にシグナリングすることは有益でないことがある。たとえば、変換係数が比較的少数である場合、ゼロ値変換係数の比較的長いランを作成する機会が減少する。したがって、特定の走査順序を実装し、シグナリングすることによってエントロピーコーディング段階において得られる効率は、走査順序をシグナリングするために必要とされるビットによって相殺され得る。この例では、ビデオエンコーダは、予め定義されたまたは固定の走査順序を適用し、これはビデオデコーダにシグナリングされる必要がなくてよい。たとえば、単純な場合、ビデオエンコーダとビデオデコーダとは、変換係数を直列化するときに一定の走査順序を適用するように対称的にプリプログラムされる。
[0049]上述のように、本開示の技法は、直列化されている変換係数の数に基づいて、特定の走査順序を明示的にシグナリングすべきかどうかを決定することを含む。本開示のいくつかの態様によれば、ビデオエンコーダは、量子化変換係数行列のサイズに従って変換係数の数を決定する。すなわち、ビデオエンコーダは、CUに関連するTUのサイズを検査することによって変換係数の数を決定する。本開示の他の態様によれば、ビデオエンコーダは、有効係数の数、または最後の有効係数の相対位置に従って変換係数の数を決定する。
[0050]いくつかの例では、ビデオエンコーダは、TUのサイズが所定のしきい値サイズを超えたときのみ、特定の走査順序を生成およびシグナリングし得る。一例では、しきい値サイズは変換係数の8×8行列であり得るが、様々な他のしきい値サイズが使用され得る(たとえば、4×4、16×16など)。すなわち、ビデオエンコーダは、TUのサイズが変換係数の8×8行列を超えたときのみ、特定の走査順序を生成し、シグナリングし得る。TUがサイズしきい値を超えない場合、ビデオエンコーダは、デフォルトのまたは予め定義された走査順序(たとえば、ジグザグ走査順序)を使用し得る。この場合、ビデオエンコーダは、走査順序をビデオデコーダにシグナリングする必要がない。
[0051]代替または追加として、ビデオエンコーダは、有効変換係数の数が所定のしきい値を超えたときのみ、特定の走査順序を生成し、シグナリングし得る。一例では、しきい値位置は8であり得るが、様々な他のしきい値位置が使用され得る(たとえば、6、10、20など)。すなわち、ビデオエンコーダは、少なくとも8つの有効変換係数がある場合のみ、特定の走査順序を生成し、シグナリングし得る。TUが、しきい値よりも多くの有効変換係数を含まない場合、ビデオエンコーダは、TUに関連する変換係数を走査するときに、所定のまたはデフォルトの走査順序を使用し、この走査順序をビデオデコーダにシグナリングする必要がない。
[0052]代替または追加として、ビデオエンコーダは、最後の有効係数の位置が所定のしきい値位置よりも大きいときのみ、特定の走査順序を生成し、シグナリングし得る。一例では、しきい値位置は8であり得るが、様々な他のしきい値位置が使用され得る。すなわち、ビデオエンコーダは、最後の有効変換係数より前に8つの変換係数がある場合のみ、特定の走査順序を生成し、シグナリングし得る。TUが、所定のしきい値位置よりも大きい位置において1つまたは複数の有効な、すなわち、非ゼロの変換係数を有しない場合、ビデオエンコーダは、TUに関連する変換係数を走査するときに、所定のまたはデフォルトの走査順序を使用し、この走査順序をビデオデコーダにシグナリングする必要がない。
[0053]本開示の態様は、ビデオデータのインター予測ブロック、ならびにビデオデータのイントラ予測ブロックのための走査順序を生成し、シグナリングすべきかどうかを決定することに関係する。上述のように、ビデオエンコーダは、前にコーディングされたピクチャのデータに対してビデオデータのブロックをインター予測し得る。概して、予測データに特有の不整合により、変換係数行列中の非ゼロ変換係数のロケーションを予想することは難しいことがある。すなわち、非ゼロ変換係数は所与の変換係数行列全体にわたって散乱され得る。
[0054]したがって、ビデオエンコーダは、変換係数を走査するために予め定義あれたまたは固定の走査パターン(たとえば、ジグザグ走査パターン)を適用し得る。別の例では、インター予測ブロックの場合、ビデオエンコーダは、変換係数を走査するために適応走査パターンを適用し得る。すなわち、ビデオエンコーダは、初めに固定走査パターンを実施するが、ピクチャのブロックを符号化している間に走査パターンを適応させるかまたは更新し得る。ビデオエンコーダは、たとえば、ロケーションにおける係数がゼロ値化される傾向があるかどうかを示す統計値を収集し、特定のロケーションにおける係数が通常ゼロ値化される場合、ビデオエンコーダは、通常非ゼロ値を有する他の係数よりも後にその係数を走査することを選択し得る。
[0055]本開示の技法は、直列化されている変換係数の数に基づいて、インター予測ブロックのための走査順序を生成または識別し、明示的にシグナリングすべきかどうかを決定することを含む。本開示の態様によれば、ビデオエンコーダは、現在符号化されているブロックに関連するTUが一定のサイズを超えたときのみ、特定の走査順序を明示的にシグナリングし得る。すなわち、走査順序を選択する前に、ビデオエンコーダは、符号化されているブロックに関連するTUのサイズが所定のしきい値サイズを超えるかどうかを決定する。
[0056]本開示のいくつかの態様によれば、TUのサイズが所定のしきい値サイズを超えない場合、ビデオエンコーダは、予め定義された固定の走査順序(たとえば、ジグザグ走査パターン)を利用し得る。この場合、ビデオエンコーダは走査順序をシグナリングしなくてよい。しかし、TUのサイズがしきい値サイズを超えた場合、ビデオエンコーダは、エントロピーコーディング効率を増加させようと試みて、走査順序を識別または生成し、明示的にシグナリングし得る。たとえば、ビデオエンコーダは、あるロケーションにおける係数がゼロ値である傾向があるかどうかを示す統計値を使用して適応走査パターンを生じ得る。他の例では、ビデオエンコーダは、様々な予め定義された走査順序をテストし、最も効率的な走査順序を選択することによって走査順序を動的に選択し得る。そのような例では、ビデオエンコーダは、適応または選択された走査順序をビデオデコーダにシグナリングし得る。
[0057]他の例では、ビデオエンコーダは、有効変換係数の数が所定のしきい値を超えたときか、または最後の有効係数の相対位置が所定のしきい値位置よりも大きいときのみ、特定の走査順序を生成し、シグナリングし得る。すなわち、走査順序を選択する前に、ビデオエンコーダは、最後の有効係数位置が所定のしきい値位置よりも大きいかどうかを決定し得る。最後の有効係数位置がしきい値を超えない場合、ビデオエンコーダは、シグナリングされない、予め定義された、固定の走査順序を利用し得る。しかしながら、最後の有効係数位置がしきい値を超えた場合、ビデオエンコーダは、エントロピーコーディング効率を増加させようと試みて、走査順序を識別または生成し、明示的にシグナリングし得る。
[0058]ビデオデータのイントラ予測ブロックに関して、上述のように、ビデオエンコーダは、特定のイントラ予測モードを使用してブロックをイントラ予測し得る。たとえば、提案されたHEVC規格に準拠するビデオエンコーダは、最高35個のイントラ予測モードを用いて構成され得る。いくつかの例では、ビデオエンコーダは、単一の固定走査パターン(たとえば、ジグザグパターン)を使用してイントラ予測ブロックに関連する変換係数を走査し得る。他の例では、ビデオエンコーダは、別のコーディングプロセスに基づいて走査パターンを選択し得る。
[0059]たとえば、イントラ予測の後に、ビデオコーダは、予測のために使用されたイントラ予測モードに基づいて変換係数を走査し得る。すなわち、分離可能な方向性変換が残差値の2次元行列に適用された後でも、得られた2次元変換係数行列は、依然として何らかの方向性を示し得る。たとえば、垂直イントラ予測モードを使用してビデオデータのブロックを予測することを考えられたい。予測、変換、および量子化の後に、ブロックに関連する非ゼロ量子化変換係数は水平方向に沿って(たとえば、2次元行列の相対的上部に沿って)存在する傾向があり得る。したがって、ビデオコーダは、2次元行列中の非ゼロ係数が、得られる1次元ベクトルの始点のほうへさらに集中するように、水平方向に変換係数を走査し得る。
[0060]本開示の技法は、直列化されている変換係数の数に基づいて、ビデオデータのイントラ予測ブロックのための走査順序を生成または識別し、明示的にシグナリングすべきかどうかを決定することを含む。本開示の態様によれば、ビデオエンコーダは、現在符号化されているブロックに関連するTUが一定のサイズを超えたときのみ、特定の走査順序を明示的にシグナリングし得る。別の例では、ビデオエンコーダは、現在符号化されているTUの有効変換係数の数が所定のしきい値を超えたときのみ、特定の走査順序を明示的にシグナリングし得る。別の例では、ビデオエンコーダは、現在符号化されているTUの最後の有効係数の相対位置が所定のしきい値位置を超えたときのみ、特定の走査順序を明示的にシグナリングし得る。
[0061]ビデオエンコーダは、エントロピーコーディング効率を増加させようと試みて、走査順序を識別または生成し、明示的にシグナリングし得る。たとえば、ビデオエンコーダは、様々な走査順序をテストし、(たとえば、レートひずみ、または効率を示す他の特性に従って)ビデオデータのそのブロックのために最も効率的な走査順序を選択することによって走査順序を動的に選択するか、あるいはあるロケーションにおいて係数がゼロ値である傾向があるかどうかを示す統計値に基づく適応走査順序を使用し得る。
[0062]本開示のいくつかの態様によれば、ビデオエンコーダが特定の走査順序を生成しない場合、ビデオエンコーダは、予め定義された固定の走査順序(たとえば、ジグザグ走査パターン)を利用し得る。この場合、ビデオエンコーダは走査順序をシグナリングしなくてよい。
[0063]このように、直列化されている変換係数の数に基づいて特定の走査順序を生成し、シグナリングすべきかどうかを決定することは、走査順序を識別し、明示的にシグナリングすることに関連する計算量的コストおよびシグナリングコストを、エントロピーコーディング段階において実現される利得と平衡させるのを助け得る。本開示のいくつかの態様は、変換ユニット(TU)に関連する変換係数(または有効変換係数)の数に基づいて、走査順序を生成し、シグナリングすべきかどうかを決定することに関係するが、本開示の技法は、概して、走査順序を判断し、シグナリングすることに関連する計算量的コストおよびシグナリングコストを、特定の走査順序を使用することによって達成されるエントロピーコーディング効率の増加が上回り得るかどうかを決定することに関係することを理解されたい。したがって、いくつかの例では、特定の走査順序を生成し、シグナリングすることが効率的になり得るかどうかを決定するために、他のコーディングメトリックが使用される。たとえば、TUのサイズを検査するのではなく、ビデオエンコーダは、符号化されているCUに関連する変換係数の量に基づいて、走査順序を生成し、シグナリングすべきかどうかを決定する。別の例では、ビデオエンコーダは、ビデオデータをコーディングするために必要な変換係数の数の指示を間接的に与える、CUまたはPUのサイズに基づいて、走査順序を生成し、シグナリングすべきかどうかを決定する。すなわち、CUまたはPUは有効変換係数の数の指示を与えないが、相対的により大きいCUまたはPUは、より大きい数の有効変換係数を含む可能性が高くなる。
[0064]本開示の技法はまた、走査順序を明示的にシグナリングするとき、そのようなシグナリングを最適化することを含む。たとえば、上述のように、変換係数の2次元行列を走査すると1次元ベクトルが生成され、次いで、その1次元ベクトルはエントロピー符号化される。いくつかの例では、ビデオエンコーダは、可変長コード、コンテキスト適応型バイナリ算術コーディング(CABAC)、および他のエントロピーコーディング方法を使用して変換係数をエントロピー符号化する。そのような例では、ビデオエンコーダはまた、たとえば、有効係数フラグおよび最後の係数フラグなど、シンタックス要素をエントロピー符号化する。本開示の態様によれば、ビデオエンコーダはまた、変換係数の走査順序をエントロピー符号化し得る。すなわち、たとえば、本開示は、コンテキストベースの可変長コード(VLC)テーブル、および/または現在符号化されているCUのコーディング情報からのコンテキスト情報もしくは隣接CUのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に依拠する算術コーディング方法を使用して走査順序をシグナリングするための技法を提供する。
[0065]図1は、コーディングユニットのための走査順序を明示的にシグナリングすべきかどうかを決定するための技法を利用する例示的なビデオ符号化および復号システム10を示すブロック図である。図1に示すように、システム10は、通信チャネル16を介して符号化ビデオを宛先デバイス14に送信するソースデバイス12を含む。ソースデバイス12および宛先デバイス14は、広範囲にわたるデバイスのいずれかを備え得る。場合によっては、ソースデバイス12および宛先デバイス14は、ワイヤレスハンドセット、いわゆるセルラー電話または衛星無線電話などのワイヤレス通信デバイス、あるいは通信チャネル16を介してビデオ情報を通信することができる任意のワイヤレスデバイスを備え得、その場合、通信チャネル16はワイヤレスである。
[0066]ただし、コーディングユニットのための走査順序を明示的にシグナリングすべきかどうかを決定することに関係する本開示の技法は、必ずしもワイヤレスアプリケーションまたは設定に限定されるとは限らない。たとえば、これらの技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、インターネットビデオ送信、記憶媒体上に符号化される符号化デジタルビデオ、または他のシナリオに適用される。したがって、通信チャネル16は、符号化ビデオデータの送信または記憶に好適なワイヤレスまたはワイヤード媒体の任意の組合せを備え得る。
[0067]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、変調器/復調器(モデム)22と、送信機24とを含む。宛先デバイス14は、受信機26と、モデム28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。本開示によれば、ソースデバイス12のビデオエンコーダ20は、本開示の変換ユニットの符号化および復号のための技法を適用するように構成され得る。他の例では、ソースデバイスおよび宛先デバイスは他の構成要素または構成を含み得る。たとえば、ソースデバイス12は、外部カメラなどの外部ビデオソース18からビデオデータを受信し得る。同様に、宛先デバイス14は、内蔵ディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースし得る。
[0068]図1の図示のシステム10は一例にすぎない。コーディングユニットのための走査順序を明示的にシグナリングすべきかどうかを決定するための技法は、任意のデジタルビデオ符号化および/または復号デバイスによって実行され得る。概して、本開示の技法はビデオ符号化デバイスまたはビデオ復号デバイスによって実行されるが、本技法は、一般に「コーデック」と呼ばれるビデオエンコーダ/デコーダによっても実行され得る。ソースデバイス12および宛先デバイス14は、ソースデバイス12が宛先デバイス14に送信するためのコード化ビデオデータを生成するような、コーディングデバイスの例にすぎない。いくつかの例では、デバイス12、14は、デバイス12、14の各々がビデオ符号化構成要素とビデオ復号構成要素とを含むように、実質的に対称的に動作し得る。したがって、システム10は、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスト、またはビデオテレフォニーのためのビデオデバイス12とビデオデバイス14との間の一方向または双方向のビデオ送信をサポートし得る。
[0069]ソースデバイス12のビデオソース18は、ビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからのビデオフィードを含み得る。さらなる代替として、ビデオソース18は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオとアーカイブビデオとコンピュータ生成ビデオとの組合せを生成し得る。場合によっては、ビデオソース18がビデオカメラである場合、ソースデバイス12および宛先デバイス14は、いわゆるカメラフォンまたはビデオフォンを形成し得る。ただし、上述のように、本開示で説明する技法は、概してビデオコーディングに適用可能であり得、ワイヤレスおよび/またはワイヤードアプリケーションに適用され得る。各場合において、キャプチャされたビデオ、以前にキャプチャされたビデオ、またはコンピュータ生成ビデオは、ビデオエンコーダ20によって符号化され得る。符号化ビデオ情報は、次いで、通信規格に従ってモデム22によって変調され、送信機24を介して宛先デバイス14に送信され得る。モデム22は、信号変調のために設計された様々なミキサ、フィルタ、増幅器または他の構成要素を含み得る。送信機24は、増幅器、フィルタ、および1つまたは複数のアンテナを含む、データを送信するために設計された回路を含み得る。
[0070]宛先デバイス14の受信機26はチャネル16を介して情報を受信し、モデム28はその情報を復調する。この場合も、ビデオ符号化プロセスは、コーディングユニットのための走査順序を明示的にシグナリングすべきかどうかを決定するための本明細書で説明する技法のうちの1つまたは複数を実装し得る。チャネル16を介して通信される情報は、ビデオエンコーダ20によって定義され、また、ビデオデコーダ30によって使用されるシンタックス情報を含み、シンタックス情報は、コード化ビデオデータのコーディングユニットまたは他のユニット、たとえば、ピクチャのグループ(GOP:group of pictures)、スライス、フレームなどの特性および/または処理を記述するシンタックス要素を含む。4分木データ構造は、最大コーディングユニットのためのシンタックス情報の一部を形成し得る。すなわち、各LCUは、4分木の形態のシンタックス情報を含み、このシンタックス情報は、LCUがどのようにサブCUに分割されるか、ならびにLCUとサブCUとがどのように符号化されるかに関するシグナリング情報を示している。
[0071]ビデオデコーダ30は、4分木を使用して、受信されたピクチャのCUをどのように復号すべきかを判断し得る。ビデオデコーダ30は、次いで、CUを復号し、復号されたビデオデータをディスプレイデバイス32に送り得る。ディスプレイデバイス32は、復号されたビデオデータをユーザに対して表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスのいずれかを備え得る。
[0072]図1の例では、通信チャネル16は、無線周波数(RF)スペクトルあるいは1つまたは複数の物理伝送線路など、任意のワイヤレスまたはワイヤード通信媒体、あるいはワイヤレス媒体とワイヤード媒体との任意の組合せを備え得る。通信チャネル16は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。通信チャネル16は、概して、ワイヤード媒体またはワイヤレス媒体の任意の好適な組合せを含む、ビデオデータをソースデバイス12から宛先デバイス14に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。通信チャネル16は、ソースデバイス12から宛先デバイス14への通信を可能にするのに有用であり得るルータ、スイッチ、基地局、または任意の他の機器を含み得る。
[0073]ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG−4、Part10、Advanced Video Coding(AVC)と呼ばれるITU−T H.264規格など、ビデオ圧縮規格に従って動作し得る。別の例として、ビデオエンコーダ20およびビデオデコーダ30は、高効率ビデオコーディング(HEVC)規格に従って動作し得、HEVCテストモデル(HM)に準拠し得る。ただし、本開示の技法は、特定のコーディング規格に限定されず、現在利用可能であるかまたは将来出現し得るHEVCまたは他の規格または専用の(proprietary)コーディングプロセスに適用され得る。他の例にはMPEG−2およびITU−T H.263がある。図1には示されていないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ30は、それぞれオーディオエンコーダおよびデコーダと統合され得、適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含んで、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理し得る。適用可能な場合、MUX−DEMUXユニットはITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
[0074]ITU−T H.264/MPEG−4(AVC)規格は、Joint Video Team(JVT)として知られる共同パートナーシップの成果として、ISO/IEC Moving Picture Experts Group(MPEG)とともにITU−T Video Coding Experts Group(VCEG)によって策定された。いくつかの態様では、本開示で説明する技法は、H.264規格に概して準拠するデバイスに適用され得る。H.264規格は、ITU−T Study Groupによる2005年3月付けのITU−T勧告H.264「Advanced Video Coding for generic audiovisual services」に記載されており、本明細書ではH.264規格またはH.264仕様、あるいはH.264/AVC規格または仕様と呼ぶことがある。Joint Video Team(JVT)はH.264/MPEG−4 AVCへの拡張に取り組み続けている。
[0075]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダ回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。本技法がソフトウェアで実装されるとき、デバイスは、好適な非一時的コンピュータ可読媒体にソフトウェアの命令を記憶し、1つまたは複数のプロセッサを使用してその命令を実行して、本開示の技法を実行し得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも複合エンコーダ/デコーダ(コーデック)の一部としてそれぞれのカメラ、コンピュータ、モバイルデバイス、加入者デバイス、ブロードキャストデバイス、セットトップボックス、サーバなどに統合され得る。
[0076]ビデオシーケンスは、一般に一連のビデオフレームを含む。ピクチャのグループ(GOP)は、概して、一連の1つまたは複数のビデオフレームを備える。GOPは、GOP中に含まれる多数のフレームを記述するシンタックスデータを、GOPのヘッダ中、GOPの1つまたは複数のフレームのヘッダ中、または他の場所に含み得る。各フレームは、それぞれのフレームのための符号化モードを記述するフレームシンタックスデータを含み得る。ビデオエンコーダ20は、一般に、ビデオデータを符号化するために、個々のビデオフレーム内のコーディングユニットに対して動作する。コーディングユニットはLCUまたはサブCUに対応し、CUという用語はLCUまたはサブCUを指し得る。LCUのヘッダ情報は、LCUのサイズ、LCUが分割され得る回数(本開示ではCU深さと呼ぶ)、および他の情報を記述し得る。各ビデオフレームは複数のスライスを含み、各スライスは複数のLCUを含み得る。
[0077]一例として、HEVCテストモデル(HM)は、様々なCUサイズでの予測をサポートする。LCUのサイズはシンタックス情報によって定義され得る。特定のCUのサイズが2N×2Nであると仮定すると、2N×2NまたはN×Nのサイズでのイントラ予測がサポートされ、2N×2N、2N×N、N×2N、またはN×Nの対称サイズでのインター予測がサポートされる。
[0078]本開示では、「N×N」と「N by N」は、垂直次元と水平寸法とに関するブロック(たとえば、CU、PU、またはTU)のピクセル寸法、たとえば、16×16ピクセルまたは16 by 16ピクセルを指すために互換的に使用され得る。一般に、16×16ブロックは、垂直方向に16ピクセルを有し(y=16)、水平方向に16ピクセルを有する(x=16)。同様に、N×Nブロックは、一般に、垂直方向にNピクセルを有し、水平方向にNピクセルを有し、ただし、Nは非負整数値を表す。ブロック中のピクセルは行と列に構成され得る。その上、ブロックは、必ずしも、水平方向において垂直方向と同じ数のピクセルを有する必要はない。たとえば、ブロックはN×Mピクセルを備え得、Mは必ずしもNに等しいとは限らない。
[0079]CUのPUは、(ピクセル領域とも呼ばれる)空間領域におけるピクセルデータを備え得、一方、CUのTUは、たとえば、残差ビデオデータへの離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に同様の変換などの変換の適用後に変換領域における係数を備え得る。残差データは、概して、PUの値と、入力ビデオデータからのコロケート非符号化ピクセルの値との間のピクセル差分を表す。TUは、変換領域における量子化値を含み得る。TUの係数を変換するためにDCTが使用されるとき、TUの係数は周波数領域にあると言われることがある。
[0080]ビデオエンコーダ20は、コーディングユニットのための走査順序を明示的にシグナリングすべきかどうかを決定するために本開示の技法のいずれかまたはすべてを実装し得る。同様に、ビデオデコーダ30は、変換係数を走査するためにデフォルト走査順序以外の特定の走査順序が使用されたかどうかを決定するためにこれらの技法のいずれかまたはすべてを実装し得る。
[0081]ビデオエンコーダ20は、LCUを受信し、そのLCUを、各々がサブCUを備える4つの象限(quadrant)に分割すべきかどうか、またはそのLCUを分割せずに符号化すべきかどうかを決定し得る。LCUをサブCUに分割すると決定した後に、ビデオエンコーダ20は、各サブCUを、各々がサブCUを備える4つの象限に分割すべきかどうかを決定し得る。ビデオエンコーダ20は、LCU深さによって示される分割の最大数を用いて、CUを分割すべきかどうかを再帰的に決定し続ける。ビデオエンコーダ20は、LCUとそのLCUのサブCUとの分割を示す4分木データ構造を与え得る。LCUは4分木のルートノードに対応し得る。4分木の各ノードはLCUの1つのCUに対応し得る。その上、各ノードは、対応するCUが分割されるかどうかを示す分割フラグ値を含み得る。
[0082]LCUが分割される場合、たとえば、ビデオエンコーダ20は、LCUが分割されることを示すためにルートノードにおいて分割フラグの値を設定する。次いで、ビデオエンコーダ20は、もしあれば、LCUのサブCUのうちのどれが分割されるのかを示すためにルートノードの子ノードの値を設定し得る。分割されないCUは4分木データ構造のリーフノードに対応し、リーフノードは子ノードを有しない。
[0083]ビデオエンコーダ20は、4分木データ構造中のリーフノードに対応するLCUの各サブCUを符号化し得る。例として、本開示では、イントラ予測符号化に関係する技法について説明する。したがって、この仮定の下で、ビデオエンコーダ20は、4分木データ構造中のリーフノードに対応する各CUのための(複数の)予測ユニット(PU)を形成し得る。いくつかの例では、ビデオエンコーダ20は、LCUのための35個の異なるイントラ予測モードのうちの1つを選択し、4分木のルートノードにおいてその選択されたイントラ予測モードをシグナリングし得る。次いで、リーフノードに対応する各CUについて、ビデオエンコーダ20は、CUと同じサイズを有する1つのPUを形成すべきか、またはCUの象限を表す4つのPUを形成すべきかを決定し得る。各PUは、選択されたイントラ予測モードに従って前にコーディングされた隣接するCUから取り出された予測データに対応する。
[0084]イントラ予測コーディングまたはインター予測コーディングを行ってCUのためのPUを生成した後に、ビデオエンコーダ20は、残差データを計算して残差値を生成し、次いで、CUのための1つまたは複数の変換ユニット(TU)に変換を適用し得る。残差データは、符号化されていないピクチャのピクセルと、CUのPUの予測値との間のピクセル差分に対応し得る。ビデオエンコーダ20は、CUのための残差データを含む1つまたは複数のTUを形成し得る。ビデオエンコーダ20は、次いで、それらのTUを変換し得る。ビデオエンコーダ20は、CUのためのPUをイントラモード予測するために使用されるイントラ予測モードに基づいて変換を選択し得る。いくつかの例では、ビデオエンコーダ20は、2つ以上の変換、すなわち、カスケード変換をTUに適用するように構成され得る。
[0085]TUのための残差データを変換することによって、ビデオエンコーダ20は変換係数の行列を生成する。この行列は、概して、変換への入力ブロックと同じサイズを有する。概して、変換プロセスは数学的変換を使用して残差データを変換する。変換の後には、一般に、データをさらに圧縮する量子化が続く。量子化は、概して、係数を表すために使用されるデータの量ができるだけ低減されるように変換係数が量子化されるプロセスを指す。量子化プロセスは、係数の一部または全部に関連するビット深さを低減し得る。たとえば、量子化中にnビット値がmビット値に切り捨てられ、ただし、nはmよりも大きい。
[0086]いくつかの例では、ビデオエンコーダ20は、エントロピー符号化されるベクトルを生成するために、予め定義された走査順序を利用して量子化変換係数を走査し得る。すなわち、ビデオエンコーダ20は、ジグザグ走査順序などの予め定義された走査順序を使用して量子化変換係数を直列化し得る。他の例では、ビデオエンコーダ20は適応走査を実行し得る。適応走査を実行するために、ビデオエンコーダ20は、変換係数の行列中の特定の位置が有効である(たとえば、非ゼロである)可能性がより高いかより低いかを示す統計値を追跡し得る。ビデオエンコーダ20は、走査パターンがこれらの統計的可能性に対応するように、走査パターンを経時的に適応させ得る。すなわち、適応走査パターンにより、有効である(たとえば、非ゼロである)確率が相対的により高い変換係数が、有効である確率が相対的により低い変換係数の前に走査されることを保証することが試みられ得る。
[0087]本開示の態様によれば、ビデオエンコーダ20は、直列化されている変換係数の数に基づいて、特定の走査順序を生成およびシグナリングすべきかどうかを決定し、それは、符号化されているビデオデータのブロックに関連する変換ユニット(TU)のサイズに従って決定され得る。たとえば、ビデオエンコーダ20は、TUのサイズが所定のしきい値サイズを超えたときのみ、特定の走査順序をシグナリングし得る。一例では、ビデオエンコーダは、TUのサイズが変換係数の8×8行列を超えたときのみ、特定の走査順序を生成およびシグナリングするが、他のサイズも使用され得る(たとえば、4×4行列、16×16行列など)。
[0088]いくつかの例では、TUがサイズしきい値を超えた場合、ビデオエンコーダ20は、デフォルトまたは所定の走査順序以外の走査順序を適用し、シグナリングする。すなわち、一例では、ビデオエンコーダ20は、適応走査順序を適用し、その適応走査順序をビデオデコーダ30にシグナリングする。別の例では、ビデオエンコーダ20は、2つ以上のプリプログラムされた走査順序をテストし、最も効率的な走査順序、たとえば、最も多くの有効変換係数を変換係数の直列化アレイの前部のほうへパックし、および/またはゼロ値変換係数の長いランを作成する走査順序を選択し得る。走査順序を選択した後に、ビデオエンコーダ20は、選択された走査順序をビデオデコーダ30にシグナリングし得る。
[0089]TUがサイズしきい値を超えない場合、ビデオエンコーダ20は予め定義された走査順序を使用し得る。その上、この場合、ビデオエンコーダ20は走査順序をシグナリングしなくてよい。ビデオデコーダ30は、以下でより詳細に説明するように、同じ予め定義された走査順序を適用するように構成され得る。
[0090]本開示の態様によれば、ビデオエンコーダ20はまた、直列化されている有効変換係数の数に基づいて、またはTUに関連する最後の有効係数フラグの位置を決定することによって、特定の走査順序を生成およびシグナリングすべきかどうかを決定し得る。たとえば、ビデオエンコーダ20は、所定のしきい値位置よりも大きい最後の有効係数を有するTUの走査順序だけを生成し、明示的にシグナリングする。TUが、所定のしきい値位置よりも大きい位置において1つまたは複数の有効な、すなわち、非ゼロの変換係数を有しない場合、ビデオエンコーダは、TUに関連する変換係数を走査するとき、所定のまたはデフォルトの走査順序を使用し得る。この例では、ビデオエンコーダは、所定の走査順序をビデオデコーダ30にシグナリングしなくてよい。
[0091]特定の走査順序をシグナリングするとき、ビデオエンコーダ20は、走査順序を明示的にシグナリングすることによって走査順序を示し得る。すなわち、ビデオエンコーダ20は、ビットストリーム中に、走査順序を定義する1つまたは複数のシンタックス要素を含み得る。別の例では、ビデオエンコーダ20は、インデックス値を使用して特定の走査順序を示し得る。すなわち、ビデオエンコーダ20は、走査順序の予め定義されたテーブル(たとえば、走査順序のルックアップテーブル)中で特定の走査順序を識別するインデックス値をビットストリーム中で与え得る。この例では、ビデオデコーダ30は走査順序の同様のテーブルを含み、それにより、ビデオデコーダ30は、インデックスを受信したときに特定の走査順序を選択することが可能になり得る。
[0092]いくつかの例では、適応走査を使用するか所定の走査を使用するかにかかわらず、ビデオエンコーダ20は、走査の後にアレイ中の係数をゼロアウトする。すなわち、ビデオエンコーダ20は、アレイの位置Nから終端までの係数の値を0に等しく設定し得る。Nの値はCUのサイズおよび/またはTUのサイズに関係し得る。いくつかの例では、ビデオエンコーダ20は、走査するより前に、行列中のいくつかの変換係数、たとえば、行列の左上隅にある係数以外の行列中のすべての係数をゼロアウトし得る。
[0093]1次元ベクトルを形成するために変換行列を走査した後に、ビデオエンコーダ20は、たとえば、コンテンツ適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)、または別のエントロピーコーディング方法に従って、1次元ベクトルをエントロピー符号化し得る。
[0094]CAVLCを実行するために、ビデオエンコーダ20は、送信されるべきシンボルの可変長コードを選択し得る。VLCのコードワードは、相対的により短いコードがより可能性が高いシンボルに対応し、より長いコードがより可能性が低いシンボルに対応するように構築され得る。このようにして、VLCの使用は、たとえば、送信されるべき各シンボルのために等長コードワードを使用するよりも、ビット節約を達成し得る。
[0095]CABACを実行するために、ビデオエンコーダ20は、送信されるべきシンボルを符号化するために、あるコンテキストに適用すべきコンテキストモデルを選択し得る。コンテキストは、たとえば、隣接値が非ゼロか否かに関係し得る。ビデオエンコーダ20はまた、適応走査を実行するときに生成される有効係数フラグおよび最後の係数フラグなど、シンタックス要素をエントロピー符号化し得る。
[0096]本開示の技法によれば、ビデオエンコーダ20が特定の走査順序を識別したとき(たとえば、変換係数の数がしきい値を超えた場合)、ビデオエンコーダ20は走査順序をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、現在符号化されているCUのコーディング情報からのコンテキスト情報もしくは隣接CUのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に依拠するコンテキストベースの可変長コード(VLC)テーブルおよび/または算術コーディング方法を使用して走査順序をシグナリングし得る。
[0097]ビデオデコーダ30は、符号化されたPUデータとTUデータとを含む符号化されたCUを表す、エントロピー符号化されたデータを受信し得る。ビデオデコーダ30は、この受信データを逆エントロピー符号化して符号化量子化係数を形成し得る。ビデオエンコーダ20が可変長コードアルゴリズムを使用してデータをエントロピー符号化したとき、ビデオデコーダ30は、受信コードワードに対応するシンボルを決定するために1つまたは複数のVLCテーブルを使用し得る。ビデオエンコーダ20が算術コーディングアルゴリズムを使用してデータをエントロピー符号化したとき、ビデオデコーダ30は、コンテキストモデルを使用してデータを符号化し、それはビデオエンコーダ20によって使用されたのと同じコンテキストモデルに対応し得る。
[0098]ビデオデコーダ30は、次いで、ビデオエンコーダ20によって使用された走査をミラーリングする逆走査を使用して、復号された係数を逆走査し得る。係数を適応的に逆走査するために、ビデオデコーダ30は、有効係数フラグと最後の係数フラグとを含むシンタックス要素を復号し得る。このようにして、ビデオデコーダ30は、ビデオエンコーダ20によって適応走査を実行するために使用された統計値を再生成し得る。ビデオデコーダ30は、それによって、エントロピー復号プロセスから得られた1次元ベクトルから2次元行列を形成し得る。
[0099]本開示の態様によれば、ビデオデコーダ30は、(たとえば、ビデオエンコーダ20によって適用された所定の走査順序と対称の)所定のデフォルト逆走査順序を適用するか、またはビデオエンコーダ20によってシグナリングされた逆走査順序を適用するように構成され得る。すなわち、ビデオデコーダ30は、ビデオエンコーダ20によって特定の逆走査順序がシグナリングされた場合、その逆走査順序を利用し得るが、走査順序がビデオエンコーダ20によってシグナリングされない場合、予め定義されたデフォルト走査順序を使用し得る。
[0100]いくつかの例では、特定の逆走査順序を復号し、適用すべきかどうかを判断するために、ビデオデコーダ30は、ビデオエンコーダ20によって適用されたのと同じ走査順序シグナリング制限を適用し得る。すなわち、ビデオデコーダ30は、走査されている変換係数の数に基づいて、特定の逆走査順序を識別し(たとえば、特定の走査順序が適用されたという指示を識別し)、適用するかどうかを決定し得る。
[0101]たとえば、本開示の態様によれば、ビデオデコーダ30は、現在復号されているブロックに関連するTUがあるサイズを超えたときのみ、特定の走査順序を識別する。別の例では、ビデオデコーダ30は、現在符号化されているTUの有効変換係数の数が所定のしきい値を超えたときのみ、特定の走査順序を識別する。別の例では、ビデオデコーダ30は、現在符号化されているTUの最後の有効係数の相対位置が所定のしきい値位置を超えたときのみ、特定の走査順序を識別する。そのような例では、ビデオデコーダ30が特定の走査順序(たとえば、ビデオエンコーダによってシグナリングされた走査順序)を識別しない場合、ビデオデコーダ30は、変換係数を走査するために、プリプログラムされたデフォルトの走査順序を適用する。
[0102]次に、ビデオデコーダ30は、逆走査によって生成された2次元行列中の係数を逆量子化し得る。ビデオデコーダ30は、次いで、2次元行列に1つまたは複数の逆変換を適用し得る。逆変換は、ビデオエンコーダ20によって適用された変換に対応し得る。ビデオデコーダ30は、たとえば、PUを形成するために使用されるイントラ予測モードに基づいて、特定のサイズのTUのために複数の変換が利用可能である場合は、現在復号されているCUに対応する4分木のルートにおいてシグナリングされる情報に基づいて、適用すべき逆変換を決定する。
[0103]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、適用可能なとき、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダまたはデコーダ回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ、そのいずれも複合ビデオエンコーダ/デコーダ(コーデック)の一部として統合され得る。ビデオエンコーダ20および/またはビデオデコーダ30を含む装置は、集積回路、マイクロプロセッサ、および/またはセルラー電話などのワイヤレス通信デバイスを備え得る。
[0104]図2は、本開示において説明するコーディングユニットのための走査順序を明示的にシグナリングすべきかどうかを決定するための技法のいずれかまたはすべてを実装し得るビデオエンコーダ20の一例を示すブロック図である。ビデオエンコーダ20は、ビデオフレーム内のCUのイントラコーディングおよびインターコーディングを実行し得る。イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、ビデオシーケンスの現在のフレームと前にコーディングされたフレームとの間の時間的冗長性を低減または除去するために時間的予測に依拠する。イントラ(I)モードは、いくつかの空間ベースの圧縮モードのいずれかを指し、単方向予測(Pモード)または双方向予測(Bモード)などのインターモードは、いくつかの時間ベースの圧縮モードのいずれかを指し得る。
[0105]図2に示すように、ビデオエンコーダ20は、符号化されるべきビデオフレーム内の現在のビデオブロックを受信する。図2の例では、ビデオエンコーダ20は、動き補償ユニット44と、動き推定ユニット42と、イントラ予測ユニット46と、参照フレームストア64と、加算器50と、変換ユニット52と、量子化ユニット54と、係数走査ユニット55と、エントロピーコーディングユニット56とを含む。図2に示す変換ユニット52は、実際の変換を実行するユニットであり、CUのTUと混同されるべきでない。ビデオブロック再構成のために、ビデオエンコーダ20はまた、逆量子化ユニット58と、逆変換ユニット60と、加算器62とを含む。再構成されたビデオからブロッキネスアーティファクトを除去するためにブロック境界をフィルタ処理するデブロッキングフィルタ(図2に図示せず)も含まれ得る。所望される場合、デブロッキングフィルタは、一般に、加算器62の出力をフィルタ処理することになる。
[0106]符号化プロセス中に、ビデオエンコーダ20はコーディングされるべきビデオフレームまたはスライスを受信する。フレームまたはスライスは、複数のビデオブロック、たとえば、最大コーディングユニット(LCU)に分割され得る。動き推定ユニット42および動き補償ユニット44は、時間圧縮を行うために、1つまたは複数の参照フレーム中の1つまたは複数のブロックに対して受信されたビデオブロックのインター予測コーディングを実行する。イントラ予測ユニット46は、空間圧縮を行うために、コーディングされるべきブロックと同じフレームまたはスライス中の1つまたは複数の隣接ブロックに対して受信されたビデオブロックのイントラ予測コーディングを実行し得る。
[0107]モード選択ユニット40は、たとえば、誤差結果またはレートひずみ計算に基づいて、コーディングモード、すなわちイントラまたはインターのうちの1つを選択し、残差ブロックデータを生成するために、得られたイントラコード化ブロックまたはインターコード化ブロックを加算器50に供給し、参照フレーム中で使用するための符号化ブロックを再構成するために、得られたイントラコード化ブロックまたはインターコード化ブロックを加算器62に供給し得る。いくつかのビデオフレームはIフレームに指定され得、Iフレーム中のすべてのブロックはイントラ予測モードで符号化される。場合によっては、たとえば、動き推定ユニット42によって実行された動き探索がブロックの予測に不十分であったとき、イントラ予測ユニット46は、PフレームまたはBフレーム中のブロックのイントラ予測符号化を実行し得る。
[0108]動き推定ユニット42と動き補償ユニット44とは、高度に統合され得るが、概念的な目的のために別々に示してある。動き推定は、ビデオブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、参照フレームの参照サンプルに対する、現在のフレーム中の予測ユニットの変位を示し得る。参照サンプルは、絶対値差分和(SAD:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分メトリックによって決定され得るピクセル差分に関して、コーディングされているPUを含むCUの部分にぴったり一致することがわかるブロックである。動き補償ユニット44によって実行される動き補償は、動き推定によって決定された動きベクトルに基づいて予測ユニットの値をフェッチまたは生成することを伴い得る。この場合も、いくつかの例では、動き推定ユニット42と動き補償ユニット44とは機能的に統合され得る。
[0109]動き推定ユニット42は、予測ユニットを参照フレームストア64に記憶された参照フレームの参照サンプルと比較することによって、インターコード化フレームの当該予測ユニットの動きベクトルを計算する。いくつかの例では、ビデオエンコーダ20は、参照フレームストア64に記憶された参照フレームのサブ整数ピクセル位置の値を計算する。たとえば、ビデオエンコーダ20は、参照フレームの1/4ピクセル位置、1/8ピクセル位置、または他の分数ピクセル位置の値を計算し得る。したがって、動き推定ユニット42は、フルピクセル位置と分数ピクセル位置とに対する動き探索を実行し、分数ピクセル精度で動きベクトルを出力し得る。動き推定ユニット42は、計算された動きベクトルをエントロピーコーディングユニット56と動き補償ユニット44とに送る。動きベクトルによって識別される参照フレームの部分は参照サンプルと呼ばれる。動き補償ユニット44は、たとえば、PUの動きベクトルによって識別される参照サンプルを取り出すことによって、現在のCUの予測ユニットについての予測値を計算する。
[0110]イントラ予測ユニット46は、動き推定ユニット42と動き補償ユニット44とによって実行されるインター予測の代替として、受信ブロックをイントラ予測符号化し得る。イントラ予測ユニット46は、隣接する、前にコーディングされたブロック、たとえば、ブロックについての左から右、上から下への符号化順序を仮定すると、現在のブロックの上ブロック、右上ブロック、左上ブロック、または左ブロックに対して受信ブロックを符号化し得る。イントラ予測ユニット46は多種多様なイントラ予測モードで構成され得る。たとえば、イントラ予測ユニット46は、符号化されているCUのサイズに基づいて、一定数の方向性予測モード、たとえば、35個の方向性予測モードで構成され得る。
[0111]イントラ予測ユニット46は、たとえば、様々なイントラ予測モードの誤差値またはレートひずみを計算し(たとえば、所定のひずみを超えることなしに圧縮を最大にすることを試み)、最も低い誤差値を生じるモードを選択することによって、イントラ予測モードを選択し得る。方向性予測モードは、空間的に隣接するピクセルの値を合成し、その合成された値をPU中の1つまたは複数のピクセル位置に適用するための機能を含み得る。PU中のすべてのピクセル位置の値が計算されると、イントラ予測ユニット46は、PUと符号化されるべき受信ブロックとの間のピクセル差分に基づいて予測モードの誤差値を計算し得る。イントラ予測ユニット46は、許容できる誤差値を生じるイントラ予測モードが発見されるまでイントラ予測モードをテストし続け得る。イントラ予測ユニット46は、次いで、PUを加算器50に送り得る。
[0112]ビデオエンコーダ20は、コーディングされている元のビデオブロックから、動き補償ユニット44またはイントラ予測ユニット46によって計算された予測データを減算することによって残差ブロックを形成する。加算器50は、この減算演算を実行する1つまたは複数の構成要素を表す。残差ブロックは2次元行列の値に対応し、残差ブロック中の値の数は、残差ブロックに対応するPU中のピクセルの数と同じである。残差ブロック中の値は、PU中のコロケートピクセルと、コーディングされるべき元のブロック中のコロケートピクセルとの間の差分に対応し得る。
[0113]変換ユニット52は、残差ブロックから1つまたは複数の変換ユニット(TU)を形成し得る。変換ユニット52は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換などの変換をTUに適用して、変換係数を備えるビデオブロックを生成する。したがって、変換ユニット52は、イントラ予測ユニット46から受信されたイントラ予測モードの指示に基づいてTUに適用すべき変換を選択し得る。
[0114]変換ユニット52は、得られた変換係数を量子化ユニット54に送る。量子化ユニット54は、次いで、その変換係数を量子化する。上述のように、量子化は、概して、相対的に大きい範囲内の値を相対的に小さい範囲中の値にマッピングし、それによって、量子化された変換係数を表すために必要とされるデータの量を低減することを伴う。場合によっては、量子化はいくつかの値を0に低減し得る。
[0115]量子化の後に、係数走査ユニット55は、量子化変換係数を走査して量子化変換係数を2次元行列から1次元アレイに直列化する。概して、係数走査ユニット55は、(図4に関して図示および説明する)ジグザグパターンなど、量子化変換係数を走査するために固定の予め定義された走査パターンを適用し得る。他の例では、係数走査ユニット55は、イントラ予測ユニット46または変換ユニット52から選択されたイントラ予測モードの指示を受信し、イントラ予測モードに基づいて走査パターンを適用し得る。係数走査ユニット55はまた、たとえば、ブロックタイプ(インターもしくはイントラ)および/またはTUに適用される変換のタイプ(たとえば、DCTもしくはKLT)など、現在のTUの様々な特性に基づいて特定の走査を選択および適用し得る。さらに他の例では、係数走査ユニット55は、いくつかの走査順序から特定の走査順序を選択し得る。すなわち、たとえば、係数走査ユニット55は、いくつかの予め定義された走査順序から、エントロピーコーディング効率を増加させる可能性が最も高い走査順序(たとえば、変換係数をアレイの前部のほうへパックする走査順序)を選択する。
[0116]別の例では、係数走査ユニット55は適応走査を実行するように構成され得る。初めに(たとえば、現在のフレームの第1のTUについて)、係数走査ユニット55は所定の走査パターンを使用し得る。時間とともに、係数走査ユニット55は走査パターンを更新して適応走査を実行し得る。概して、適応走査の目的は、特定の変換係数が非ゼロになる確率を決定することである。その場合、走査順序は、概して、非ゼロである確率が最も高い係数から非ゼロである確率が最も低い係数に進む。係数走査ユニット55は、様々な統計値および計算を使用して経時的にこれらの確率を決定し得る。その上、係数走査ユニット55は、イントラ予測モード、変換、カスケード変換、またはそれらの任意の組合せごとに別々の統計値を追跡し得る。
[0117]本開示の態様によれば、係数走査ユニット55は、直列化されている変換係数の数に基づいて、特定の走査順序を生成および適用すべきかどうかを決定し、
それは、符号化されているビデオデータのブロックに関連する変換ユニット(TU)のサイズ、有効変換係数の数に従って、または最後の有効係数の位置に従って決定され得る。いくつかの例では、係数走査ユニット55は、特定の走査順序を生成および適用すべきかどうかを決定することを担い、エントロピーコーディングユニット56のようなビデオエンコーダ20の別のユニットが、走査順序をシグナリングすること、すなわち、ビデオデコーダなどの別のデバイスに送られるべきビットストリームを生成することを担う。
[0118]いくつかの例では、係数走査ユニット55は、量子化変換係数の数がしきい値を超えたときのみ、特定の走査順序を生成および/または適用し、それは、走査されているTUのサイズが所定のしきい値サイズを超えるかどうかに従って決定され得る。一例では、ビデオエンコーダ20は、TUのサイズが変換係数の8×8行列を超えたときのみ、特定の走査順序を生成および/または適用するが、他のサイズも使用され得る(たとえば、4×4行列、16×16行列など)。
[0119]TUがサイズしきい値を超えた場合、係数走査ユニット55は、デフォルトのまたは所定の走査順序以外の走査順序を選択し、適用し得る。一例では、係数走査ユニット55は、たとえば、ブロックタイプ(インターもしくはイントラ)、(イントラ予測ブロックの)予測モード、および/またはTUに適用される変換のタイプ(たとえば、DCTもしくはKLT)など、現在のTUの様々な特性に基づいて走査順序を選択する。他の例では、係数走査ユニット55は、いくつかの走査パターンから、エントロピーコーディング効率を増加させる可能性が最も高い走査パターンを選択する。係数走査ユニット55はまた、変換係数を走査するために適応走査順序を生じ、適用し得る。特定の走査順序を選択し、適用することに加えて、係数走査ユニット55はまた、選択された走査順序をシグナリングし、または、選択された走査順序をシグナリングするように、エントロピーコーディングユニット56など、ビデオエンコーダ20の別のユニットに促し得る。上述のように、走査順序は、明示的にシグナリングされるか、または予め定義された走査順序のルックアップテーブルと対応するインデックス値を使用して指示され得る。
[0120]代替的に、TUがサイズしきい値を超えない場合、係数走査ユニット55は、デフォルトのまたは所定の走査順序を適用し得る。この場合、係数走査ユニット33は、特定の走査順序をシグナリングしないか、または、エントロピーコーディングユニット56のようなビデオエンコーダの別のユニットに特定の走査順序をシグナリングするように促さない。
[0121]別の例では、係数走査ユニット55は、有効変換係数の数を示す最後の有効係数を有するTUが所定のしきい値位置(たとえば、しきい値位置8)よりも大きいときのみ、特定の走査順序を生成および/または適用し得る。TUが、所定のしきい値位置よりも大きい位置において1つまたは複数の有効変換係数を有しない場合、係数走査ユニット55は、シグナリングされないデフォルトのまたは所定の走査順序を適用し得る。
[0122]本開示のいくつかの態様によれば、走査順序を明示的にシグナリングすべきかどうかを決定することのような、係数走査ユニット55に起因するいくつかの技法は、ビデオエンコーダ20の別のユニットによって実行され得る。たとえば、代替構成では、エントロピーコーディングユニット56または量子化ユニット54は、走査順序を選択し、明示的にシグナリングすべきかどうかを決定するように構成される。
[0123]エントロピーコーディングユニット56は、直列化された量子化変換係数、ならびにそれらの係数のシンタックス要素をエントロピー符号化し得る。本開示のいくつかの態様によれば、エントロピーコーディングユニット56は係数走査ユニットと並行して動作し得る。すなわち、たとえば、係数走査ユニット55が走査を実行している間、エントロピーコーディングユニット56は、直列化された変換係数とシンタックス要素とをエントロピー符号化する。シンタックス要素は、特定の係数が有効である(たとえば、非ゼロである)かどうかを示す有効係数フラグと、特定の係数が適応走査中に走査される最後の係数であるかどうかを示す最後係数フラグとを含み得る。ビデオデコーダは、エントロピーコーディングユニット56によって符号化された係数を逆走査するためにこれらのシンタックス要素を使用し得る。いくつかの例では、ビデオデコーダは、ビデオデコーダがエントロピーコーディングユニット56によって符号化された係数を逆走査することができるように、これらのシンタックス要素を使用して動的更新走査テーブルを再構成し得る。
[0124]シンタックス要素をエントロピー符号化するために、エントロピーコーディングユニット56は、CABACを実行し、たとえば、前に走査されたN個の係数の中の有効係数の数に基づいてコンテキストモデルを選択し得、ただし、Nは、走査されているブロックのサイズに関係し得る整数値である。エントロピーコーディングユニット56はまた、変換係数のブロックに変換された残差データを計算するために使用される予測モードと、その残差データを変換係数のブロックに変換するために使用される変換のタイプとに基づいてコンテキストモデルを選択し得る。対応する予測データがイントラ予測モードを使用して予測されたとき、エントロピーコーディングユニット56はさらに、イントラ予測モードの方向に基づいてコンテキストモデルの選択を行い得る。
[0125]本開示の態様によれば、エントロピーコーディングユニット56は、変換係数の走査順序をコーディングするためにエントロピー符号化を実行し得る。すなわち、たとえば、エントロピーコーディングユニット56は、現在符号化されているCUのコーディング情報からのコンテキスト情報もしくは隣接CUのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に依拠するコンテキストベースの可変長コード(VLC)テーブルおよび/または算術コーディング方法を使用して走査順序をシグナリングし得る。
[0126]場合によっては、エントロピーコーディングユニット56またはビデオエンコーダ20の別のユニットは、エントロピーコーディングに加えて他のコーディング機能を実行するように構成され得る。たとえば、エントロピーコーディングユニット56はマクロブロックおよびパーティションのCBP値を決定するように構成され得る。また、場合によっては、エントロピーコーディングユニット56は、マクロブロックまたはそれのパーティション中の係数のランレングスコーディングを実行し得る。
[0127]逆量子化ユニット58および逆変換ユニット60は、それぞれ逆量子化および逆変換を適用して、たとえば、予測コーディングのための参照ブロックとして後で使用するために、ピクセル領域中で残差ブロックを再構成する。動き補償ユニット44は、残差ブロックを参照フレームストア64のフレームのうちの1つの予測ブロックに加算することによって参照ブロックを計算し得る。動き補償ユニット44はまた、再構成された残差ブロックに1つまたは複数の補間フィルタを適用して、動き推定において使用するサブ整数ピクセル値を計算し得る。加算器62は、再構成された残差ブロックを、動き補償ユニット44によって生成された動き補償予測ブロックに加算して、参照フレームストア64に記憶するための再構成されたビデオブロックを生成する。再構成されたビデオブロックは、後続のビデオフレーム中のブロックをインターコーディングするために動き推定ユニット42および動き補償ユニット44によって参照ブロックとして使用され得る。
[0128]図3は、符号化ビデオシーケンスを復号するビデオデコーダ30の一例を示すブロック図である。図3の例では、ビデオデコーダ30は、エントロピー復号ユニット70と、動き補償ユニット72と、イントラ予測ユニット74と、逆量子化ユニット76と、逆変換ユニット78と、参照フレームストア82と、加算器80とを含む。ビデオデコーダ30は、いくつかの例では、ビデオエンコーダ20(図2)に関して説明した符号化パスとは概して逆の復号パスを実行し得る。動き補償ユニット72は、エントロピー復号ユニット70から受信された動きベクトルに基づいて予測データを生成し得る。イントラ予測ユニット74は、シグナリングされたイントラ予測モードと、現在のフレームの前に復号されたブロックからのデータとに基づいて現在のフレームの現在のブロックについての予測データを生成し得る。
[0129]いくつかの例では、エントロピー復号ユニット70または逆量子化ユニット76は、ビデオエンコーダ20によって使用された走査をミラーリングする走査を使用して受信値を走査し得る。図3の例では、ビデオデコーダ30は、(たとえば、ビデオエンコーダ20によって適用された所定の走査順序と対称の)所定のデフォルトの逆走査順序を適用するか、またはビデオエンコーダ20によってシグナリングされた走査順序に基づいて逆走査順序を適用するように構成され得る。すなわち、ビデオデコーダ30は、ビデオエンコーダ20によって特定の逆走査順序がシグナリングされた場合、その逆走査順序を利用し得るが、走査順序がビデオエンコーダ20によってシグナリングされない場合、予め定義されたデフォルトn走査順序を使用し得る。
[0130]いくつかの例では、特定の逆走査順序を復号し、適用すべきかどうかを決定するために、ビデオデコーダ30は、ビデオエンコーダ20によって適用されたのと同じ走査順序シグナリング制限を適用し得る。すなわち、ビデオデコーダ30は、走査されている変換係数の数に基づいて、特定の逆走査順序を識別すべきかどうかを決定し得る。いくつかの例では、ビデオデコーダ30は、逆走査されている変換係数の数がしきい値よりも大きい場合のみ、特定の逆走査順序を識別し得る。すなわち、たとえば、ビデオデコーダ30は、逆走査されている変換係数の数がしきい値よりも大きい場合、特定の逆走査順序を識別するが、変換係数の数がしきい値以下である場合、予め定義されたデフォルトの走査順序を使用し得る。
[0131]ビデオエンコーダによってシグナリングされた走査順序を復号するとき、ビデオデコーダ30は、ビデオエンコーダ30と対称の方法で動作し得る。たとえば、係数を適応的に逆走査するために、ビデオデコーダ30は、ビデオエンコーダ20によって適応走査を実行するために使用された統計値を再生成するために、有効係数フラグおよび最後の係数フラグを含むシンタックス要素を復号し得る。ビデオデコーダ30は、それによって、エントロピー復号プロセスから得られた1次元ベクトルから2次元行列を形成し得る。別の例では、ビデオデコーダ30は、いくつかの逆走査からある逆走査を選択するために、ビデオエンコーダ20と同じ基準を使用し得る。
[0132]逆量子化ユニット76は、ビットストリーム中で供給され、エントロピー復号ユニット70によって復号された量子化変換係数を逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)する。逆量子化プロセスは、たとえば、H.264復号規格またはHEVCによって定義された従来のプロセスを含み得る。逆量子化プロセスは、量子化の程度を決定し、同様に、適用されるべき逆量子化の程度を決定するための、CUについてビデオエンコーダ20によって計算される量子化パラメータQPの使用を含み得る。
[0133]逆変換ユニット58は、逆変換、たとえば、逆DCT、逆整数変換、逆回転変換、または逆方向性変換を適用する。いくつかの例では、逆変換ユニット78は、受信されたイントラ予測符号化ブロックについてシグナリングされるイントラ予測モードに基づいて逆変換を決定し得る。イントラ予測モードに基づいて、ブロックが、2つ以上の変換が可能であるサイズである場合、逆変換ユニット78は、現在のブロックを含むLCUのための4分木のルートノードにおいてシグナリングされた変換に基づいて現在のブロックに適用すべき変換を決定し得る。いくつかの例では、逆変換ユニット78は、カスケード逆変換を適用し得、たとえば、最初に逆回転変換を適用し、続いて逆方向性変換を適用し得る。
[0134]動き補償ユニット72は動き補償ブロックを生成し、場合によっては、補間フィルタに基づいて補間を実行する。サブピクセル精度をもつ動き推定に使用されるべき補間フィルタの識別子は、シンタックス要素中に含まれ得る。動き補償ユニット72は、ビデオブロックの符号化中にビデオエンコーダ20によって使用された補間フィルタを使用して、参照ブロックのサブ整数ピクセルのための補間値を計算し得る。動き補償ユニット72は、受信されたシンタックス情報に従って、ビデオエンコーダ20によって使用された補間フィルタを決定し、その補間フィルタを使用して予測ブロックを生成し得る。
[0135]動き補償ユニット72およびイントラ予測ユニット74は、(たとえば、4分木によって与えられる)シンタックス情報の一部を使用して、符号化ビデオシーケンスの(1つまたは複数の)フレームを符号化するために使用されるLCUのサイズと、符号化ビデオシーケンスのフレームの各CUがどのように分割されるか(および、同様に、サブCUがどのように分割されるか)を記述する分割情報と、各分割がどのように符号化されるかを示すモード(たとえば、イントラ予測またはインター予測、およびイントラ予測の場合はイントラ予測符号化モード)と、各インター符号化PUについての1つまたは複数の参照フレーム(および/またはそれらの参照フレームの識別子を含んでいる参照リスト)と、符号化ビデオシーケンスを復号するための他の情報とを判断する。
[0136]加算器80は、残差ブロックを、動き補償ユニット72またはイントラ予測ユニット74によって生成される対応する予測ブロックと合成して、復号ブロックを形成する。所望される場合、ブロッキネスアーティファクトを除去するために、デブロッキングフィルタを適用して復号ブロックをフィルタ処理することもある。復号されたビデオブロックは、次いで、参照フレームストア82に記憶され、参照フレームストア82は、参照ブロックを後続の動き補償に与え、また、(図1のディスプレイデバイス32などの)ディスプレイデバイス上での提示のために復号ビデオを生成する。
[0137]図4は、ビデオデータ120A〜120P(位置120)のブロックに関連する位置の例示的なジグザグ走査を示す概念図である。いくつかの例では、各位置120は、関連する変換係数を含み得る。ビデオエンコーダ20は、たとえば、残差ブロックへのDCTの適用の後に、図4のジグザグ走査を使用して係数のブロックを走査するように構成され得る。この例では、ジグザグ走査は、位置120Aから開始し、次いで位置120Bに進み、次いで位置120Eに進み、次いで位置120Iに進み、次いで位置120Fに進み、次いで位置120Cに進み、次いで位置120Dに進み、次いで位置120Gに進み、次いで位置120Jに進み、次いで位置120Mに進み、次いで位置120Nに進み、次いで位置120Kに進み、次いで位置120Hに進み、次いで位置120Lに進み、次いで位置120Oに進み、最後に位置120Pに進む。
[0138]この走査を実行することによって、変換係数の2次元構成は、位置120の各々の値を含む1次元アレイに変換され得る。これらの値は、アレイ中に走査順に構成され得る。たとえば、位置120Aの値がアレイ中の最初にあり、その後に位置120B、120E、120I、120Fなどの値が続く。
[0139]図4のジグザグ走査は、変換係数を形成するために残差ブロックに適用されるDCTに関連付けられ得る。概して、DCTは、位置120のエネルギーを変換ブロックの左上隅に圧縮する。したがって、最低周波数係数は、概して、DCT後に左上隅の近くに生じ得、最高周波数係数は、概して、DCT後に右下隅の近くに生じ得る。したがって、ジグザグ走査は、アレイ中でより低い周波数係数がより高い周波数係数よりも早く配置されることを保証することを試みるように構成され得る。このようにして、ビデオエンコーダは、より高い周波数係数に対応するはずである、アレイ中の後のほうの係数をゼロアウトすることによって、データを圧縮し得る。
[0140]他の変換のために他の予め定義された走査パターンも定義され得る。たとえば、各方向性変換は、方向性変換から生じる低い周波数係数を、より高い周波数係数よりも早くアレイ中に配置するように設計された走査パターンに関連付けられ得る。方向性変換のうちの1つは、より低い周波数係数が変換係数のブロックの左端の列に沿って生じ得、その場合には、位置120Aから開始し、次いで位置120E、次に位置120I、次に位置120M、次に120Bなどに進むように定義された走査に対応する。別の例として、方向性変換のうちの別の1つは、より低い周波数係数が変換係数のブロックの最上行に沿って生じ得、その場合には、係数120Aから開始し、次いで位置120B、次に位置120C、次に位置120D、次に位置120Eなどに進むように定義された走査に対応する。
[0141]いくつかの例では、ビデオエンコーダ20は、予め定義された走査ではなく、適応走査を実行するように構成され得る。適応走査は、特定の係数(すなわち、位置120に対応する係数)が有効であるかどうかを示す統計値に基づいて時間とともに変化し得る。さらに、ビデオエンコーダ20は、たとえば、ブロックを予測するために選択されるイントラ予測モード、初期変換の後に適用すべき回転変換のインデックス、または他のファクタに基づいて、統計値の別個のセットを計算し得る。
[0142]本開示の態様によれば、ビデオエンコーダ20は、量子化変換係数の数がしきい値を超えたときのみ、特定の走査順序を適用し、シグナリングし得る。いくつかの例では、量子化変換係数の数は、走査されているTUのサイズに従って決定される。たとえば、走査されている量子化変換係数の数が所定のしきい値を超えない場合、ビデオエンコーダ20は、図4に示すジグザグ走査順序など、所定のデフォルトび走査順序を適用する。この場合、ビデオエンコーダ20は走査順序をシグナリングしなくてよい。代替的に、走査されている量子化変換係数の数が所定のしきい値を超えた場合、ビデオエンコーダ20は特定の走査順序を選択し、シグナリングする。
[0143]他の例では、量子化変換係数の数は、最後の有効係数の位置に従って決定される。たとえば、最後の有効係数の位置が所定のしきい値位置を超えない場合、ビデオエンコーダ20は、走査順序をシグナリングすることなしに、図4に示すジグザグ走査順序など、所定のデフォルトの走査順序を適用する。代替的に、最後の有効係数の位置が所定のしきい値位置よりも大きい場合、ビデオエンコーダは特定の走査順序を選択し、シグナリングする。
[0144]ビデオエンコーダ20が特定の走査順序を適用し、シグナリングするとき、ビデオエンコーダ20は、たとえば、ブロックタイプ(インターもしくはイントラ)、(イントラ予測ブロックの)予測モード、および/またはTUに適用される変換のタイプ(たとえば、DCTもしくはKLT)など、現在のTUの様々な特性に基づいて走査順序を選択する。他の例では、ビデオエンコーダ20は、いくつかの走査順序から、エントロピーコーディング効率を増加させる可能性が最も高い走査順序を選択する。さらに他の例では、ビデオエンコーダ20は、上記で説明したように、適応走査順序を生じ、適用し、シグナリングする。
[0145]本開示の技法は、走査されているTUのサイズに基づいて、特定の走査順序を適用し、シグナリングすべきかどうかを決定することに関係する。本開示のいくつかの態様によれば、ビデオエンコーダ20は、TUのサイズが変換係数の8×8行列を超えたときのみ、特定の走査順序を適用し、シグナリングするが、他のサイズも使用され得る(たとえば、4×4行列、16×16行列など)。走査されているTUがサイズしきい値以下である場合、ビデオエンコーダ20はデフォルトのまたは所定の走査順序を適用し得る。この例では、ビデオエンコーダ20は特定の走査順序をシグナリングせず、ビデオデコーダ30などのビデオデコーダは、同じデフォルトのまたは所定の走査順序を適用するように構成され得る。代替的に、走査されているTUがサイズしきい値を超えた場合、ビデオエンコーダ20は、上記で説明したように、デフォルトのまたは所定の走査順序以外の走査順序を適用し、シグナリングする。
[0146]本開示の技法はまた、最後の有効係数の位置に基づいて、特定の走査順序を適用し、シグナリングすべきかどうかを決定することに関係する。本開示のいくつかの態様によれば、ビデオエンコーダ20は、最後の有効係数の位置が8つの係数を超えたときのみ、特定の走査順序を適用し、シグナリングし得るが、他の係数位置も使用され得る(たとえば、16、32など)。最後の有効係数位置が位置しきい値以下である場合、ビデオエンコーダ20は、走査順序をシグナリングすることなしに、デフォルトのまたは所定の走査順序を適用する。代替的に、最後の有効係数位置が位置を超えた場合、ビデオエンコーダ20は、上記で説明したように、デフォルトのまたは所定の走査順序以外の走査順序を適用し、シグナリングする。
[0147]図5は、本開示の態様による、変換係数のための走査順序をシグナリングすべきかどうかを決定するための例示的な方法140を示すフローチャートである。図5に示す例では、本方法は、概して、符号化されているTUのサイズに基づいて、TUに関連する変換係数のための走査順序をシグナリングすべきかどうかを決定することを含む。説明のためにビデオエンコーダ20(図2)の構成要素によって実行されるものとして一般的に説明するが、プロセッサ、処理ユニット、エンコーダ/デコーダ(コーデック)などのハードウェアベースのコーディングユニットなど、他のビデオ符号化ユニットも図5の方法を実行するように構成され得ることを理解されたい。
[0148]図5に示す例示的な方法140は、変換係数を受信することから始まる(142)。たとえば、係数走査ユニット55など、ビデオエンコーダの構成要素が、現在符号化されているTUに関連する変換係数の2次元行列を受信し得る。すなわち、ビデオエンコーダ20の係数走査ユニット55は、量子化ユニット54から、2次元変換ユニット(TU)に関連する量子化変換係数行列を受信し得る。本開示の態様によれば、係数走査ユニット55は、エントロピー符号化され得る変換係数の1次元アレイを生成するために変換係数を直列化することを担当する。
[0149]係数走査ユニット55は、変換係数の数が所定のしきい値を超えるかどうかを決定する(144)。一例では、ビデオエンコーダ20は、現在符号化されているTUのサイズに基づいて、変換係数の数がしきい値を超えるかどうかを決定し得る。一例では、係数走査ユニット55は、変換係数行列のサイズが所定のしきい値の8×8変換係数を超えるかどうかを決定し得るが、他のしきい値も使用され得る(たとえば、4×4、16×16など)。変換係数行列のサイズがしきい値行列サイズ以下である場合、係数走査ユニット55はデフォルトの走査順序を使用して変換係数行列を走査する(146)。さらに、エントロピーコーディングユニット56は、走査順序をシグナリングすることなしに、走査された係数をエントロピー符号化する(148)。
[0150]しかしながら、変換係数の数のサイズがしきい値を超えた場合、係数走査ユニット55は変換係数のための走査順序を選択する(150)。本開示の態様によれば、係数走査ユニット55は、たとえば、ブロックタイプ(インターもしくはイントラ)、予測モード/方向、および/またはTUに適用される変換のタイプなど、符号化されているTUの様々な特性に基づいて特定の走査を選択する。他の例では、図7に関してより詳細に説明するように、係数走査ユニット55は適応走査を選択する。
[0151]係数走査ユニット55は、次いで、選択された走査順序を使用して変換係数を走査する(152)。さらに、エントロピーコーディングユニット56は、走査された変換係数をエントロピー符号化し、ならびに変換係数を走査するために使用される走査順序をシグナリングする(154)。本開示の態様によれば、以下の図8に関してより詳細に説明するように、エントロピーコーディングユニット56は、コンテキストモデルを使用して走査順序をシグナリングし得る。すなわち、エントロピーコーディングユニット56は、現在符号化されているCUまたは隣接CUのコーディング情報からのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に依拠するコンテキストベースの可変長コード(VLC)テーブルおよび/または算術コーディング方法を使用して走査順序をシグナリングし得る。
[0152]また、図5に関して図示および説明するステップは一例として与えたものにすぎないことを理解されたい。たとえば、図5において図示および説明するしきい値比較はTUに関連するが、特定の走査順序をシグナリングすべきかどうかを決定するためにTUサイズ以外のコーディングメトリックが使用され得る。たとえば、TUのサイズを検査するのではなく、ビデオエンコーダ20は、同じく変換係数の数の指示を間接的に与え得る、CUまたはPUのサイズに基づいて、走査順序をシグナリングすべきかどうかを決定し得る。
[0153]さらに、図5のいくつかの態様について、ビデオエンコーダ20の係数走査ユニット55によって実行されるものとして一般的に説明したが、エントロピーコーディングユニット56など、様々な他のユニットまたはモジュールがそのような態様を実行するように構成され得ることを理解されたい。その上、図5の方法のステップは必ずしも図5に示す順序で実行される必要はなく、より少ないか、追加であるか、または代替であるステップが実行され得る。
[0154]図6は、本開示の態様による、変換係数のための走査順序をシグナリングすべきかどうかを決定するための別の例示的な方法180を示すフローチャートである。図6に示す例では、本方法は、概して、TUの最後の有効係数の位置に基づいて、TUに関連する変換係数のための走査順序をシグナリングすべきかどうかを決定することを含む。説明のためにビデオエンコーダ20(図2)の構成要素によって実行されるものとして一般的に説明するが、プロセッサ、処理ユニット、エンコーダ/デコーダ(コーデック)などのハードウェアベースのコーディングユニットなど、他のビデオ符号化ユニットも図6の方法を実行するように構成され得ることを理解されたい。
[0155]図6に示す例示的な方法180は、変換係数を受信することから始まる(182)。たとえば、係数走査ユニット55など、ビデオエンコーダの構成要素が、現在符号化されているTUに関連する変換係数の2次元行列を受信し得る。すなわち、ビデオエンコーダ20の係数走査ユニット55は、量子化ユニット54から、2次元変換ユニット(TU)に関連する量子化変換係数行列を受信し得る。本開示の態様によれば、係数走査ユニット55が、エントロピー符号化され得る変換係数の1次元アレイを生成するために変換係数を直列化することを担当する。
[0156]係数走査ユニット55は、次いで、現在の変換係数行列の最後の有効係数の位置が所定のしきい値位置よりも大きいかどうかを決定する(184)。一例では、係数走査ユニット55は、最後の有効係数の位置が8よりも大きいかどうかを決定するが、TU中に含まれる有効変換係数の数の指示(indication)を与え得る他のしきい値位置が使用され得る(たとえば、16、32など)。変換係数の最後の有効係数の位置がしきい値位置以下である場合、係数走査ユニット55はデフォルトの走査順序を使用して変換係数を走査する(186)。さらに、エントロピーコーディングユニット56は、走査順序をシグナリングすることなしに、走査された係数をエントロピー符号化する(188)。
[0157]しかしながら、変換係数の最後の有効係数の位置がしきい値位置よりも大きい場合、係数走査ユニット55は変換係数のための走査順序を選択する(190)。上記の図5に関して説明したように、係数走査ユニット55は、符号化されているTUの様々な特性に基づいて特定の走査を選択するか、または適応走査を選択し得る。係数走査ユニット55は、次いで、選択された走査順序を使用して変換係数を走査する(192)。さらに、図5のステップ(154)に関して説明したように、エントロピーコーディングユニット56は、走査された変換係数をエントロピー符号化し、ならびに変換係数を走査するために使用される走査順序をシグナリングする(194)。
[0158]また、図6に関して図示および説明するステップは一例として与えたものにすぎないことを理解されたい。たとえば、図6のいくつかの態様について、概して、ビデオエンコーダ20の係数走査ユニット55によって実行されるものとして説明したが、エントロピーコーディングユニット56など、様々な他のユニットまたはモジュールがそのような態様を実行するように構成され得ることを理解されたい。その上、図6の方法のステップは必ずしも図6に示す順序で実行される必要はなく、より少ないか、追加であるか、または代替であるステップが実行され得る。
[0159]図7は、適応走査を実行するための例示的な方法210を示すフローチャートである。説明のためにビデオエンコーダ20(図2)の構成要素によって実行されるものとして一般的に説明するが、プロセッサ、処理ユニット、エンコーダ/デコーダ(コーデック)などのハードウェアベースのコーディングユニットなど、他のビデオ符号化ユニットも図7の方法を実行するように構成され得ることを理解されたい。
[0160]本開示の技法によれば、図7に示す係数を適応的に走査するための技法は、図5のステップ150〜154または図6のステップ190〜194に対応し得る。すなわち、たとえば、係数を適応的に走査するための技法は、TUサイズが所定のしきい値サイズを超えたとき、またはTUの最後の有効係数が所定のしきい値位置を超えたときに適用され得る。そのような例では、ビデオエンコーダ20は、図7に示す例示的な方法210に従って、適応走査を生成し、シグナリングし得る。ただし、図7に示す方法は一例として与えたものにすぎないことを理解されたい。たとえば、ビデオエンコーダ20はまた、たとえば、ブロックタイプ(インターもしくはイントラ)、予測モード/方向、および/またはTUに適用される変換のタイプなど、符号化されているTUの様々な特性に基づいて走査順序を選択し得る。その上、図7のステップは必ずしも図7に示す順序で実行される必要はなく、より少ないか、追加のまたは代替のステップが実行され得る。
[0161]図7に示すように、基本適応走査を実行するために、係数走査ユニット55は、現在ブロックの対応する予測モードのために定義された初期走査順序に従ってブロックの係数を走査する(212)。ビデオエンコーダ20の観点からは、走査は、変換係数の2次元ブロックを1次元係数アレイに変換する。しかしながら、ビデオデコーダ30の観点からは、この走査は、1次元係数アレイを2次元変換係数ブロックに変換することになる。一例として、対応する予測モードの初期走査順序はジグザグ走査順序であり得る。ジグザグ走査は唯一の可能な初期走査順序ではない。水平走査、垂直走査、または任意の他の初期走査順序が初期走査順序として使用され得る。
[0162]係数走査ユニット55は、1つまたは複数のブロックの統計値を収集する(214)。特に、走査されるブロックの各々について、係数走査ユニット55は、たとえば、カウンタを用いて、2次元ブロック内の係数位置の各々がそこにおいて非ゼロ係数である頻度を追跡する統計値を収集し得る。係数走査ユニット55は、走査順序を評価すべきかどうかを決定する(216)。係数走査ユニット55は、固定間隔で(たとえば、ブロック境界ごとにまたはn個のブロック境界後に)、あるいは非固定間隔で(たとえば、ブロック内の位置のカウント値のうちの1つがしきい値を超えたときに)走査順序を評価し得る。
[0163]係数走査ユニット55が走査順序を評価しないと決定した場合、係数走査ユニット55は、初期走査順序に従って後続のブロックを走査する(212)。係数走査ユニット55が走査順序を評価すると決定した場合、たとえば、n個のブロックが符号化/復号された後に、係数走査ユニットは、収集された統計値に基づいて走査順序を適応させる(218)。たとえば、係数走査ユニット55は、ブロックの係数位置をそれらのカウント値に基づいて降順に走査するように走査順序を適応させ、カウント値は、所与の位置が非ゼロ係数を有する可能性を反映する。走査順序を適応させた後に、係数走査ユニット55は、いくつかの事例では、統計値のいずれかのカウント値がしきい値を超えたかどうかを決定する(220)。係数位置のうちの1つが、しきい値を超える対応するカウント値を有する場合、係数走査ユニット55は、収集された統計値、たとえば、係数カウント値を正規化する(222)。たとえば、係数走査ユニット55は、所定の係数で、たとえば、カウント値の各々を1/2だけ低減するために係数2で、カウント値の各々を低減することによって、またはカウント値を初期カウント値のセットにリセットすることによって、係数カウント値を正規化し得る。係数カウント値を正規化することにより、ビデオエンコーダ20がより迅速にローカル係数統計値に適応することが可能になり得る。
[0164]収集された統計値を正規化した後に、または正規化が実行されないとき、係数走査ユニット55は、適応された走査順序を使用して後続のブロックを走査する(224)。係数走査ユニット55は、前に走査されたビデオブロックのコーディングユニット内に少なくとも1つの後続のブロックが存在するとき、適応された走査順序を使用してその少なくとも1つの後続のブロックを走査し得る。係数走査ユニット55は、走査順序が、たとえばコーディングユニット境界において、再び調整されるかまたは再初期化されるまで、後続のビデオブロックを走査し続け得る。このようにして、係数走査ユニット55は、非ゼロである可能性がより低いと判断されるブロックの係数位置の前に、非ゼロである可能性がより高いと判断されるブロックの係数位置を走査するように、収集された統計値に基づいて走査順序を適応させる。したがって、1次元係数アレイは、走査された1次元アレイの始端の近くに非ゼロ係数を、および走査された1次元アレイの終端の近くにゼロ値係数をグループ化することを促進するように構成される。これにより、今度は、エントロピーコーディング中に達成され得る圧縮レベルが改善され得る。
[0165]いくつかの事例では、予測モードの各々は異なる係数統計値を有し得るので、係数走査ユニット55は、予測モードの各々について別々に走査順序を適応的に調整し得る。言い換えれば、係数走査ユニット55は、予測モードの各々について別個の統計値を維持し、それぞれの統計値に基づいて別様に予測モードの各々のための走査順序を調整し得る。したがって、上記で説明した例示的なフローチャートは、係数走査ユニット55によって予測モードごとに実行され得る。
[0166]図8は、適応的に走査される係数を記述するシンタックス要素を走査し、エントロピー符号化するときに使用すべきコンテキストモデルを選択するための例示的な方法240を示すフローチャートである。説明のためにビデオエンコーダ20(図2)の構成要素によって実行されるものとして一般的に説明するが、プロセッサ、処理ユニット、エンコーダ/デコーダ(コーデック)などのハードウェアベースのコーディングユニットなど、他のビデオ符号化ユニットも図8の方法を実行するように構成され得ることを理解されたい。
[0167]また、他の例では、同様の方法は、説明する技法から逸脱することなく、図8に示すステップに対する追加または代替のステップを含むか、あるいは異なる順序で図示のステップを実行し得ることを理解されたい。図8に示すように適応的に走査される係数を記述するシンタックス要素を走査し、エントロピー符号化するときに使用すべきコンテキストモデルを選択するための技法は、図5のステップ150〜154、または図6のステップ190〜194に対応し得る。すなわち、図8に示す方法240は、走査順序が選択され、シグナリングされるときに実行され得る。図8の技法は、図7の適応走査が実行されるより前に、その間に、またはその後に実行され得る。
[0168]エントロピーコーディングユニット56は、たとえば、量子化ユニット54から、量子化変換係数の行列を受信する(242)。概して、図8の例示的な方法を使用して、エントロピーコーディングユニット56は、受信された係数を記述するシンタックス要素を符号化し得る。シンタックス要素は、係数ごとに、有効係数フラグと最後の係数フラグとを含み得る。有効係数フラグは、対応する係数が有効であるかどうか、たとえば、対応する係数の値が0よりも大きいかどうかを示し得る。最後の係数フラグは、対応する係数が適応走査の最後の係数であるかどうかを示し得る。
[0169]エントロピーコーディングユニット56は、受信された行列中の有効係数の位置を決定し得る。エントロピーコーディングユニット56は、受信された行列中の有効係数の位置を示すシンタックス要素を形成する(244)。たとえば、行列中の係数ごとに、エントロピーコーディングユニット56は、係数が0よりも大きいかどうかを決定し、係数が0よりも大きい場合は、係数とコロケートされたシンタックス要素行列中の値を1に等しく設定し、他の場合、エントロピーコーディングユニットは、係数とコロケートされた値を0に等しく設定する。
[0170]エントロピーコーディングユニット56は、次いで、シンタックス要素行列中のシンタックス要素のうちの第1のシンタックス要素を走査する(246)。エントロピーコーディングユニット56は、図4に示した走査などのジグザグ走査、あるいはブロックタイプ(インター予測ブロックまたはイントラ予測ブロック)、ブロックがイントラ予測符号化されたブロックである場合は空間的予測方向、および/または使用される変換のタイプに基づいて選択された走査を適用し得る。次に、エントロピーコーディングユニット56は、走査されたシンタックス要素を符号化するためのコンテキストモデルを選択する(248)。概して、コンテキストモデルは、前に走査されたN個の係数中の有効な(たとえば、非ゼロである)係数の数に基づいて選択され得、ただし、Nは非ゼロ整数値である。Nはブロックのサイズに基づいて選択され得る。コンテキストモデルはまた、現在符号化されているCUのコーディング情報または隣接CUのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に基づいて選択され得る。
[0171]現在のシンタックス要素を符号化するために使用すべきコンテキストモデルを選択した後に、エントロピーコーディングユニット56は、選択されたコンテキストモデルを使用して、走査されたシンタックス要素をエントロピー符号化する(250)。エントロピーコーディングユニット56は、次いで、符号化されたシンタックス要素が、符号化されるべき最後のシンタックス要素であるかどうかを決定する(252)。シンタックス要素が最後のシンタックス要素である場合(252の「YES(はい)」分岐)、エントロピーコーディングユニット56は係数を走査するのを停止し得る。一方、シンタックス要素が最後のシンタックス要素でない場合(252の「NO(いいえ)」分岐)、エントロピーコーディングユニット56は、次のシンタックス要素を走査し(254)、走査されたシンタックス要素を符号化するためのコンテキストモデルを再び選択し得る。
[0172]図8の例は、主に、特定の係数が有効であるか否かを記述するシンタックス要素に関して説明した。これらのシンタックス要素は、たとえば、有効係数フラグ、たとえば、対応する係数が有効であるか、たとえば、非ゼロであるかどうかを示す1ビットフラグを含み得る。特定の係数が適応走査における最後の係数であるかどうかを記述するシンタックス要素に関して同様の技法が適用され得ることを理解されたい。たとえば、同様の技法は最後の係数フラグに適用され得る。CABACを使用して最後の係数フラグを符号化するとき、コンテキストモデルは、ブロックタイプ、空間的予測方向、および/または選択された変換に基づく適応走査における順序インデックスに基づき得る。
[0173]図9は、本開示の態様による、受信された変換係数のための走査順序を識別すべきかどうかを決定するための例示的な方法260を示すフローチャートである。図9に示す例では、本方法は、概して、復号されているTUのサイズに基づいて、TUに関連する変換係数のためのシグナリングされた走査順序を識別すべきかどうかを決定することを含む。説明のためにビデオデコーダ30(図3)の構成要素によって実行されるものとして一般的に説明するが、プロセッサ、処理ユニット、エンコーダ/デコーダ(コーデック)などのハードウェアベースのコーディングユニットなど、他のビデオ符号化ユニットも図9の方法を実行するように構成され得ることを理解されたい。
[0174]図9に示す例示的な方法260は、変換係数を受信することから始まる(262)。たとえば、エントロピー復号ユニット70など、ビデオデコーダ30の構成要素は、符号化ビデオデータ、ならびに符号化ビデオデータを復号するのを支援する1つまたは複数のシンタックス要素を含んでいるビットストリームを受信し得る。受信されたビットストリームの少なくとも一部分は、図9に示す例によれば、変換ユニット(TU)に関連する直列化された量子化変換係数の数を含む。すなわち、エントロピー復号ユニット70は有効変換係数の数を受信し得る。その上、エントロピー復号ユニット70は、TU内の有効係数の相対ロケーションを示す有効性マップを受信し得る。エントロピー復号ユニット70は、そのような情報を利用して、受信された1次元アレイから変換係数の2次元ブロックを再構成し得る。
[0175]変換係数を受信すると、エントロピー復号ユニット70は、受信された変換係数の数が所定のしきい値を超えるかどうかを決定する(264)。図9に示す例では、エントロピー復号ユニット70は、復号されているTUのサイズに基づいて、受信された変換係数の数が所定のしきい値を超えるかどうかを決定し得る。すなわち、エントロピー復号ユニット70は、シンタックス要素など、受信されたTUのサイズを識別する指示を受信し得る。別の例では、エントロピー復号ユニット70は、受信された変換係数の数および/または上記で説明した有効性マップに基づいて、受信されたTUのサイズを決定し得る。
[0176]本開示のいくつかの態様によれば、エントロピー復号ユニット70は、受信されたTUのサイズが所定のしきい値の8×8変換係数を超えるかどうかを決定し得るが、他のしきい値も使用され得る(たとえば、4×4、16×16など)。受信されたTUのサイズがしきい値行列サイズ以下である場合、エントロピー復号ユニット70は、デフォルトの走査順序を使用して、受信された変換係数を逆走査する(266)。すなわち、エントロピー復号ユニット70は、予め定義された走査順序を使用して、ビデオエンコーダ(たとえば、ビデオエンコーダ20)によってTUを直列化するために使用されたデフォルト走査順序をミラーリングする2次元TUを再構成し得る。一例では、エントロピー復号ユニット70は、ビデオエンコーダによって適用されたジグザグ走査順序の逆を使用し得る。
[0177]しかしながら、受信されたTUのサイズが所定のしきい値を超えた場合、エントロピー復号ユニット70は、変換係数を走査するための走査順序を識別する(268)。本開示の態様によれば、エントロピー復号ユニット70は、ビットストリーム中に含まれる1つまたは複数のシンタックス要素に基づいて走査順序を識別し得る。たとえば、ビデオデコーダ30は、受信ビットストリーム中で明示的に示される走査順序を識別し得る。すなわち、ビデオデコーダ30は、ビットストリーム中で、走査順序を定義する1つまたは複数のシンタックス要素を識別し得る。
[0178]追加または代替として、ビデオデコーダ30は適応走査順序を識別し得る。すなわち、ビデオデコーダ30は、受信ビットストリームを生成したビデオエンコーダによって実装される適応走査をミラーリングする適応走査を実行するようにビデオデコーダ30に促すシンタックス要素または他の指示を受信し得る。別の例では、ビデオデコーダ30は、インデックス値に基づいて特定の走査順序を識別し得る。すなわち、ビデオデコーダ30は、ビットストリーム中で、走査順序の予め定義されたテーブル(たとえば、走査順序のルックアップテーブル)中の特定の走査順序に関連するインデックス値を識別し得る。この例では、ビデオデコーダ30は、ビデオエンコーダ20など、ビットストリームを生成したビデオエンコーダによって実装されるテーブルと同じである走査順序のテーブルを含み得る。
[0179]本開示の態様によれば、上記の図8に関してより詳細に説明したように、走査順序は、コンテキストモデルを使用してビットストリーム中でシグナリングされ得る。したがって、エントロピー復号ユニット70は、現在符号化されているCUまたは隣接CUのコーディング情報からのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に依拠するコンテキストベースの可変長コード(VLC)テーブルおよび/または算術コーディング方法を使用して走査順序を識別し得る。
[0180]エントロピー復号ユニット70は、次いで、識別された走査順序を使用して変換係数を逆走査する(270)。すなわち、エントロピー復号ユニット70は、シグナリングされた走査順序を使用して、変換係数の受信された1次元アレイから2次元TUを再構成し得る。また、図9に関して図示および説明するステップは一例として与えたものにすぎないことを理解されたい。たとえば、図9の方法のステップは必ずしも図9に示す順序で実行される必要はなく、より少ないか、追加のまたは代替のステップが実行され得る。さらに、図9のいくつかの態様について、ビデオデコーダ30のエントロピー復号ユニット70によって実行されるものとして一般的に説明したが、逆量子化ユニット76など、様々な他のユニットまたはモジュールがそのような態様を実行するように構成され得ることを理解されたい。
[0181]図10は、本開示の態様による、受信された変換係数のための走査順序を識別すべきかどうかを決定するための例示的な方法280を示すフローチャートである。図10に示す例では、本方法は、概して、復号されているTUの最後の有効係数の相対位置に基づいて、TUに関連する変換係数のためのシグナリングされた走査順序を識別すべきかどうかを決定することを含む。説明のためにビデオデコーダ30(図3)の構成要素によって実行されるものとして一般的に説明するが、プロセッサ、処理ユニット、エンコーダ/デコーダ(コーデック)などのハードウェアベースのコーディングユニットなど、他のビデオ符号化ユニットも図10の方法を実行するように構成され得ることを理解されたい。
[0182]図10に示す例示的な方法280は、変換係数を受信することから始まる(282)。たとえば、エントロピー復号ユニット70など、ビデオデコーダ30の構成要素が、符号化ビデオデータ、ならびに符号化ビデオデータを復号するのを支援する1つまたは複数のシンタックス要素を含むビットストリームを受信し得る。受信されたビットストリームの少なくとも一部分は、図10に示す例によれば、変換ユニット(TU)に関連する直列化された量子化変換係数の数を含む。すなわち、エントロピー復号ユニット70は有効変換係数の数を受信し得る。その上、エントロピー復号ユニット70は、TU内の有効係数の相対ロケーションを示す有効性マップを受信し得る。エントロピー復号ユニット70はまた、TUの最後の有効変換係数の相対位置を識別する最後の有効係数フラグを受信し得る。エントロピー復号ユニット70は、そのような情報を利用して、受信された1次元アレイから変換係数の2次元ブロックを再構成し得る。
[0183]変換係数を受信すると、エントロピー復号ユニット70は、最後の有効係数の位置が所定のしきい値位置を超えるかどうかを決定する(284)。図10に示す例では、エントロピー復号ユニット70は、最後の有効係数フラグおよび/または有効性マップなどの他の有効性情報に基づいて相対位置を識別し得る。最後の有効係数の位置がしきい値位置以下である場合、エントロピー復号ユニット70は、デフォルトの走査順序を使用して、受信された変換係数を逆走査する(286)。すなわち、エントロピー復号ユニット70は、予め定義された走査順序を使用して、ビデオエンコーダ(たとえば、ビデオエンコーダ20)によってTUを直列化するために使用されたデフォルトの走査順序をミラーリングする2次元TUを再構成し得る。一例では、エントロピー復号ユニット70は、ビデオエンコーダによって適用されたジグザグ走査順序の逆を使用し得る。
[0184]しかしながら、最後の有効変換係数の位置のサイズが所定のしきい値を超えた場合、エントロピー復号ユニット70は、変換係数を走査するための走査順序を識別する(288)。本開示の態様によれば、エントロピー復号ユニット70は、ビットストリーム中に含まれる1つまたは複数のシンタックス要素に基づいて走査順序を識別し得る。たとえば、ビデオデコーダ30は、受信ビットストリーム中で明示的に示される走査順序を識別し得る。すなわち、ビデオデコーダ30は、ビットストリーム中で、走査順序を定義する1つまたは複数のシンタックス要素を識別し得る。
[0185]追加または代替として、ビデオデコーダ30は適応走査順序を識別し得る。すなわち、ビデオデコーダ30は、受信ビットストリームを生成したビデオエンコーダによって実装される適応走査をミラーリングする適応走査を実行するようにビデオデコーダ30に促すシンタックス要素または他の指示を受信し得る。別の例では、ビデオデコーダ30は、インデックス値に基づいて特定の走査順序を識別し得る。すなわち、ビデオデコーダ30は、ビットストリーム中で、走査順序の予め定義されたテーブル(たとえば、走査順序のルックアップテーブル)中の特定の走査順序に関連するインデックス値を識別し得る。この例では、ビデオデコーダ30は、ビデオエンコーダ20など、ビットストリームを生成したビデオエンコーダによって実装されるテーブルと同じである走査順序のテーブルを含み得る。
[0186]本開示の態様によれば、上記の図8に関してより詳細に説明したように、走査順序は、コンテキストモデルを使用してビットストリーム中でシグナリングされ得る。したがって、エントロピー復号ユニット70は、現在符号化されているCUまたは隣接CUのコーディング情報からのコンテキスト情報(たとえば、予測モード/方向、予測ユニットサイズ、非ゼロ係数の数など)に依拠するコンテキストベースの可変長コード(VLC)テーブルおよび/または算術コーディング方法を使用して走査順序を識別し得る。
[0187]エントロピー復号ユニット70は、次いで、識別された走査順序を使用して変換係数を逆走査する(290)。すなわち、エントロピー復号ユニット70は、シグナリングされた走査順序を使用して、変換係数の受信された1次元アレイから2次元TUを再構成し得る。また、図10に関して図示および説明するステップは一例として与えたものにすぎないことを理解されたい。たとえば、図10の方法のステップは必ずしも図10に示す順序で実行される必要はなく、より少ないか、追加のまたは代替のステップが実行され得る。その上、図10のいくつかの態様について、ビデオデコーダ30のエントロピー復号ユニット70によって実行されるものとして一般的に説明したが、逆量子化ユニット76など、様々な他のユニットまたはモジュールがそのような態様を実行するように構成され得ることを理解されたい。
[0188]1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装した場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含むデータ記憶媒体または通信媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
[0189]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)、およびブルーレイ(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0190]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)などの1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指し得る。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用ハードウェアおよび/またはソフトウェアモジュール内に与えられ得、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
[0191]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要はない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
[0192]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。