本開示の態様は、ビデオコーディングおよびビデオデータ圧縮のための技法を対象とする。特に、本開示は、ビデオデータのパレットベースのコーディングのための技法を説明する。従来のビデオコーディングでは、画像は、階調が連続的であり空間的に滑らかであるものと仮定される。これらの仮定に基づいて、ブロックベースの変換、フィルタリング、および他のコーディングツールのような様々なツールが開発されており、そのようなツールは、自然コンテンツのビデオに対して良好な性能を示してきた。
しかしながら、リモートデスクトップ、共同作業およびワイヤレスディスプレイのような適用例では、コンピュータにより生成されるスクリーンコンテンツが、圧縮されるべき主要なコンテンツであることがある。このタイプのコンテンツは、離散的な階調を有し、鋭い線を特徴とし、高コントラストのオブジェクト境界を示す傾向がある。階調が連続的であり滑らかであるという仮定はもはや当てはまらないことがあるので、従来のビデオコーディング技法はコンテンツを圧縮する際に非効率であることがある。
本開示は、1つまたは複数の従来のコーディングツールが非効率である、スクリーンにより生成されたコンテンツのコーディングまたは他のコンテンツに対して特に適していることがある、パレットベースのコーディングを説明する。ビデオデータのパレットベースのコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、以下でより詳細に説明されるように、エンコーダもしくはデコーダ、または組み合わされたエンコーダデコーダ(コーデック)が、インター予測コーディングおよびイントラ予測コーディング、ならびにパレットベースのコーディングを実行するように構成され得る。
いくつかの例では、パレットベースのコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。たとえば、High Efficiency Video Coding(HEVC)は、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)によって開発されている新しいビデオコーディング規格である。最近のHEVC text specification draftは、Bross他、「High Efficiency Video Coding (HEVC) Text Specification Draft 10 (for FDIS & Consent)」、JCVC-L1003_v13、ITU-T SG16 WP 3およびISO/IEC JCT 1/SC 29/WG 11のJCT-VCの第12回会議、2013年1月14日〜23日(「HEVC Draft 10」)に記載されている。
HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUモードのコンテキストにおいて説明される、以下の開示されるプロセスのすべてが、付加的または代替的に、PUに適用される。しかしながら、そのような技法は、独立に機能するように、または他の既存の、もしくはこれから開発されるシステム/規格の一部として機能するように適用され得るので、これらのHEVCベースの例は、本明細書において説明されるパレットベースのコーディング技法の制約または限定と見なされるべきでない。これらの場合、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、または非矩形の形状の領域でさえあり得る。
パレットベースのコーディングでは、ビデオデータの特定のエリアは、比較的少数の色を有するものと仮定され得る。ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆる「パレット」をコーディングし得る。各画素は、画素の色を表すパレットの中のエントリーと関連付けられ得る。たとえば、ビデオコーダは、画素値をパレット中の適切な値と関連付けるインデックスをコーディングし得る。
上の例では、ビデオエンコーダは、ブロックに対するパレットを決定することと、各画素の値を表すためのパレット中のエントリーを位置特定することと、画素値をパレットと関連付ける画素に対するインデックス値とともにパレットを符号化することとによって、ビデオデータのブロックを符号化し得る。ビデオデコーダは、ブロックに対するパレット、ならびにブロックの画素に対するインデックス値を、符号化されたビットストリームから取得し得る。ビデオデコーダは、ブロックの画素値を再構築するために、画素のインデックス値をパレットのエントリーと関連付け得る。画素(および/または画素値を示す関連するインデックス値)は一般に、サンプルと呼ばれ得る。
ブロック中のサンプルは、水平方向のラスター走査順序を使用して処理される(たとえば、走査される)と仮定される。たとえば、ビデオエンコーダは、水平方向のラスター走査順序を使用してインデックスを走査することによって、インデックスの2次元のブロックを1次元の配列へと変換することができる。同様に、ビデオデコーダは、水平方向のラスター走査順序を使用してインデックスのブロックを再構築することができる。したがって、本開示は、ブロック中で現在コーディングサンプルよりも走査順序において先行するサンプルとして、前のサンプルに言及し得る。垂直方向のラスター走査順序のような、水平方向のラスター走査以外の走査も適用可能であり得ることを理解されたい。上の例は、パレットベースのコーディングの一般的な説明を提供することが意図されている。
パレットは通常、インデックスによって番号を付けられ、少なくとも1つの色成分(たとえば、RGB、YUVなどの少なくとも1つの成分)の値または強度を表す、エントリーを含む。ビデオエンコーダとビデオデコーダの両方が、パレットエントリーの数、各パレットエントリーに対する色成分値、および現在のブロックに対するパレットエントリーの正確な順序を決定する。本開示では、各パレットエントリーがサンプルのすべての色成分に対する値を指定すると仮定される。しかしながら、本開示の概念は、各色成分に対して別々のパレットを使用することに適用可能である。
いくつかの例では、パレットは、前にコーディングされたブロックまたは前にコーディングされたパレットからの情報を使用して構成され得る。すなわち、パレットは、前のブロックをコーディングするために使用されるパレットから予測される、予測されたパレットエントリーを含み得る。たとえば、Wei Pu他、「AHG10: Suggested Software for Palette Coding based on RExt6.0」、JCTVC-Q0094、バレンシア、スペイン、2014年3月27日〜4月4日(以後JCTVC-Q0094)という規格提案文書において記述されるように、パレットは、予測子パレットから複製されたエントリーを含み得る。予測子パレットは、パレットモードを使用して前にコーディングされたブロックまたは他の再構築されたサンプルからのパレットエントリーを含み得る。予測子パレットは、前にコーディングされたパレットのすべてまたは一部を使用することができ、または、いくつかの前にコーディングされたパレットのエントリーから構成され得る。
いくつかの例では、予測子パレット中の各エントリーに対して、フラグと関連付けられるエントリーが現在のパレットに複製されるかどうかを示すために(たとえば、フラグ=1によって示される)、バイナリフラグがコーディングされ得る。バイナリフラグの列は、バイナリパレット予測ベクトルと呼ばれ得る。現在のブロックをコーディングするためのパレットはまた、いくつかの新しいパレットエントリーを含んでよく、これは明示的に(たとえば、パレット予測ベクトルとは別に)コーディングされ得る。新しいエントリーの数を示すものもコーディングされ得る。予測されたエントリーと新しいエントリーの合計が、ブロックに対する全体のパレットサイズを示し得る。
JCTVC-Q0094において提案されるように、パレットベースのコーディングモードによってコーディングされるブロック中の各サンプルは、以下で述べられるような3つのパレットモードの1つを使用してコーディングされ得る。
・Escapeモード:このモードでは、サンプル値がパレットエントリーとしてパレットへと含められず、量子化されたサンプル値がすべての色成分に対して明示的にシグナリングされる。新しいパレットエントリーのシグナリングと類似しているが、新しいパレットエントリーでは、色成分値は量子化されない。
・CopyFromTopモード(CopyAboveモードとも呼ばれる):このモードでは、現在のサンプルに対するパレットエントリーインデックスが、ブロック中のすぐ上に位置するサンプルから複製される。
・Valueモード(Indexモードとも呼ばれる):このモードでは、パレットエントリーインデックスの値が明示的にシグナリングされる。
本明細書において説明されるように、パレットエントリーインデックスは、パレットインデックスまたは単にインデックスと呼ばれ得る。これらの用語は、本開示の技法を説明するために交換可能に使用され得る。加えて、以下でより詳細に説明されるように、パレットインデックスは、1つまたは複数の関連する色または強度の値を有し得る。たとえば、パレットインデックスは、画素の単一の色成分または強度成分と関連付けられる、単一の関連する色値または強度値(たとえば、RGBデータのRed成分、YUVデータのY成分など)を有し得る。別の例では、パレットインデックスは、複数の関連する色または強度の値を有し得る。いくつかの事例では、パレットベースのコーディングは、モノクロのビデオをコーディングするために適用され得る。したがって、「色値」は一般に、画素値を生成するために使用される、任意の色成分または非色成分を指し得る。
CopyFromTopモードおよびValueモードに対して、ラン値(単にランとも呼ばれ得る)もシグナリングされ得る。ラン値は、一緒にコーディングされるパレットコーディングされたブロック中の、ある特定の走査順序にある連続サンプルの数(たとえば、サンプルのラン)を示し得る。いくつかの事例では、サンプルのランはパレットインデックスのランとも呼ばれることもあり、それは、ランの各サンプルがパレットに対する関連するインデックスを有するからである。
ラン値は、同じパレットコーディングモードを使用してコーディングされる、パレットインデックスのランを示し得る。たとえば、Valueモードに関して、ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、パレットインデックス(パレットインデックス値または単にインデックス値とも呼ばれる)と、同じパレットインデックスを有しそのパレットインデックスによってコーディングされているある走査順序にある連続サンプルの数を示すラン値とを、コーディングすることができる。CopyFromTopモードに関して、ビデオコーダは、現在のサンプル値に対するインデックスが、上側の隣接サンプル(たとえば、ブロック中の現在コーディングされているサンプルの上に配置されたサンプル)のインデックスと、上側の隣接サンプルからのパレットインデックスを同様に複製しそのパレットインデックスによってコーディングされているある走査順序にある連続サンプルの数を示すラン値とに基づいて複製されることを示すものをコーディングすることができる。したがって、上の例では、パレットインデックスのランは、同じ値を有するパレットインデックスのランまたは上側の隣接パレットのインデックスから複製されるパレットインデックスのランを指す。
したがって、ランは、所与のモードに対して、同じモードに属する後続のサンプルの数を指定し得る。いくつかの事例では、インデックスおよびラン値をシグナリングすることは、ランレングスコーディングと同様であり得る。説明を目的とする例では、ブロックの連続するインデックスの列は、0、2、2、2、2、5(たとえば、ここで各インデックスはブロック中のサンプルに対応する)であり得る。この例では、ビデオコーダは、Valueモードを使用して第2のサンプル(たとえば、2という第1のインデックス値)をコーディングし得る。2に等しいインデックスをコーディングした後で、ビデオコーダは、3つの後続のサンプルも2という同じインデックス値を有することを示す、3というランをコーディングし得る。同様の方式で、CopyFromTopモードを使用してインデックスをコーディングした後で4というランをコーディングすることは、現在コーディングされているサンプル場所の上にある行の中の対応するインデックスから全体で5つのインデックスが複製されることを示し得る。
以下でより詳細に説明されるように、ビデオコーダ(たとえば、ビデオエンコーダおよびビデオデコーダ)は、サンプルがサンプルごとにエスケープサンプルとしてコーディングされるかどうかを示すデータを符号化または復号することができる。エスケープサンプル(エスケープ画素とも呼ばれる)は、ブロックをコーディングするためのパレットにおいて表現される対応する色を有しないブロックのサンプル(または画素)であり得る。したがって、エスケープサンプルは、パレットからの色エントリー(または画素値)を使用して再構築されないことがある。代わりに、エスケープサンプルに対する色値は、パレットの色値とは別にビットストリームにおいてシグナリングされる。一般に、「Escapeモード」を使用してサンプルをコーディングすることは全般に、ブロックをコーディングするためのパレットにおいて表現される対応する色を有しないブロックのサンプルをコーディングすることを指し得る。上で述べられたように、そのようなサンプルはエスケープサンプルまたはエスケープ画素と呼ばれ得る。
いくつかの例では、ビデオコーダは、サンプルがエスケープサンプルとしてコーディングされるかどうかを示す、各サンプルに対するフラグをコーディングし得る(この技法は、図1の例に関して以下でより詳細に説明されるように、明示的エスケープシグナリングと呼ばれ得る)。別の例では、ビデオコーダは、特定のサンプルがエスケープサンプルとしてコーディングされることを示すために、パレットに対する追加のインデックス値をコーディングし得る(この技法は、図1の例に関してより詳細に説明されるように、暗黙的エスケープシグナリングと呼ばれ得る)。
本開示において説明される技法は、パレットエントリーを予測すること、パレットインデックスのランをコーディングすること、および様々な他のパレットコーディング技法の様々な組合せのための技法を含み得る。以下でより詳細に説明されるように、本開示の技法は、いくつかの事例では、パレットモードを使用してビデオデータをコーディングするとき、効率性を改善しビットレートを向上させることができる。
たとえば、本開示のいくつかの態様は、ビデオデータのブロックに対するパレットエントリーを予測するための技法を対象とする。いくつかの事例では、予測子パレットは、ピクチャの左端のブロックに対してリセットされ得る。すなわち、ピクチャの左端のブロックに対するパレットを生成するとき、予測子パレットは0にリセットされ得る(たとえば、予測子パレットはエントリーを有さず、現在のパレットは予測子パレットを使用して予測されない)。このようにして、予測子パレットは、(たとえば、左から右へのラスター走査を仮定すると)ある線を復号した後にピクチャの右側に位置するブロックのパレットに大半が属するパレットエントリーを含み得るので、予測子はリセットされ得る。したがって、次の行の最初のブロック(ピクチャの一番左端にあるブロック)をコーディングすると、予測子パレットは、現在コーディングされているブロックからは相対的に遠くに位置するブロックの色を含み得る。したがって、予測子パレットは、現在のブロックに対する現在のパレットを予測するのにあまり効率的ではないことがある(たとえば、ピクチャの左側にある画素の色は、ピクチャの右側にある画素の色とは異なることがある)。
しかしながら、いくつかの事例では、予測子パレットをリセットすることはコーディング損失につながることがある。たとえば、予測子パレットがないと、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ)は、ビットストリーム中のパレットのエントリーのすべて(たとえば、パレットインデックスおよび関連する色値のすべて)を示すデータをコーディングし得る。これは、予測されるパレットエントリーと関連付けられるデータに対して、相対的に大量のデータであり得る。したがって、予測子パレットをリセットすることは、パレットベースのコーディングによってコーディングされるビデオデータのビットレートに悪い影響を与えることがある。
本開示の態様によれば、第1の線の中のビデオデータのブロックに対するパレットを構築するための予測子パレットは、別の線の1つまたは複数のブロックに基づいて再初期化され得る。たとえば、ビデオコーダは、ブロックの第1の行に位置するビデオデータの第1のブロックに対する第1のパレットを決定することができる。ビデオコーダはまた、第1の行の中の1つまたは複数の他のブロックをコーディングするとき、予測子パレットを生成することができる。第2の行の中のブロックをコーディングするとき、ビデオコーダは、第1のパレットのエントリーに基づいて第2の行の中のブロックのパレットを決定するための予測子パレットを再初期化することができる。本開示のいくつかの態様によれば、ブロックの行は、あるサイズのブロックの行(たとえば、以下で説明されるような、コーディングツリーユニット(CTU)の行)であり得る。行の長さは、選択されたブロックユニット中のピクチャの幅を表すことができ、行の数は、選択されたブロックユニット中のピクチャの高さを表すことができる。
いくつかの例では、再初期化された予測子パレットは、現在コーディングされているブロックに相対的に近くに配置された1つまたは複数のブロックのパレットのエントリーを含む。したがって、予測子パレットは、現在コーディングされているブロックのパレットに含まれている確率が(たとえば、現在のブロックから遠く離れた位置にあるブロックに基づく予測子パレットまたはリセットされている予測子パレットと比較して)より高いエントリーを含み得る。このようにして、ビデオコーダは、ビットストリーム中のパレットのエントリーをコーディングするのではなく、予測子パレットを使用して現在のブロックに対するパレットを決定することができるので、本開示の技法はコーディング効率を向上させることができる。
本開示の他の態様は、パレットインデックスのランのランレングスを示すラン値をコーディングすること(すなわち、符号化または復号すること)を対象とする。たとえば、上で述べられたように、ランは、所与のモードによって現在コーディングされているインデックスに対して、同じモードを使用して現在のインデックスとともにコーディングされる後続のサンプルの数を指定し得る。
いくつかの事例では、ラン値を示すデータは、コンテキスト適応型バイナリ算術コーディング(CABAC)、コンテキスト適応型可変長コーディング(CAVLC)、または別のコンテキスト適応型コーディング技法のような、コンテキスト適応型コーディング技法を使用してコーディングされ得る。たとえば、ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、ビデオデータのブロックと関連付けられるシンボルをコーディングするようにコンテキストに対して作用する、確率モデルまたは「コンテキストモデル」を選択することができる。すなわち、コンテキストモデル(Ctx)は、複数の異なるコンテキストの1つを選択するために適用されるインデックスまたはオフセットであってよく、これらの各々が特定の確率モデルに対応し得る。
いくつかの事例では、ラン値を示すデータをコーディングするために、単一のコンテキストが使用され得る。たとえば、バイナリ化されたラン値は、ラン値が0よりも大きいかどうかを示す第1のビン、ラン値が1よりも大きいかどうかを示す第2のビン、ラン値が2よりも大きいかどうかを示す第3のビン、およびラン値を表すために必要とされる任意の他のビンを含み得る。この例では、バイナリ化されたラン値の最初の3つのビンをコンテキストコーディングするために、同じコンテキストが使用され得る。しかしながら、同じ確率モデルを使用して複数のビンをコーディングすると、連続するコーディング周期とコーディング周期との間に遅延が生じ得る。その上、ラン値のビンの相関関係は、確率モデルを更新することと関連付けられる時間および計算のリソースを保証するには十分ではないことがある。
本開示の態様によれば、コーディングされるラン値のインデックス値に基づいて、コンテキストが選択され得る。たとえば、ビデオコーダは、ビデオデータのブロックのパレットインデックスのランのランレングスを示すラン値を決定し得る。ビデオコーダはまた、パレットインデックス値に基づいてラン値を表すデータをコンテキスト適応コーディングするためのコンテキストを決定し得る。この技法は、コーディング効率を向上させることができる。
いくつかの例では、ランコーディングのためのコンテキストを導出するために使用されるパレットインデックスは、パレットから色値を取り出すために使用されるパレットインデックスであり得る。他の例では、ランコーディングのためのコンテキストを導出するために使用されるパレットインデックスは、構文解析されたパレットインデックス、すなわち、ビットストリームにおいてシグナリングされるパレットインデックス(これは、以下でより詳細に説明されるように、パレットの色を入手するために使用されるパレットインデックスとは異なり得る)であり得る。
いくつかの例では、ラン値をコーディングするために、3つのコンテキストが使用され得る。そのような例では、本開示の態様によれば、ビデオコーダは、インデックスが0よりも大きいことに基づいて、ラン値をコーディングするために第1のコンテキストを選択し得る。ビデオコーダは、インデックスが0よりも大きいことに基づいて、ラン値をコーディングするために第1のコンテキストを選択し得る。ビデオコーダは、インデックスが1よりも大きいことに基づいて、ラン値をコーディングするために第2のコンテキストを選択し得る。ビデオコーダは、インデックスが2よりも大きいことに基づいて、ラン値をコーディングするために第3のコンテキストを選択し得る。上で説明された3つのコンテキストコーディングされたビンの例に関して、ビデオコーダは、3つのビンのあらゆる組合せをコーディングするための3つのコンテキストを選択し得る。上の例はインデックス値の3つの特性と関連付けられる3つのコンテキストを定義することに関して説明されたが、本明細書において説明される技法は、インデックス値の他の特性に基づいて他の数のコンテキストを定義することに拡張され得ることを理解されたい。
本開示の他の態様は、2つ以上のパレットモードを使用してコーディングされるパレットインデックスのランをコーディングすることを対象とする。一般に、異なるパレットモードを使用してコーディングされるインデックスは、同じランにおいてコーディングされないことがある。説明を目的とする例では、CopyFromTopモードを使用してコーディングされるランは、エスケープサンプルとしてコーディングされるインデックスを含まないことがある。この例では、エスケープサンプルとしてコーディングされる画素はランを終わらせることがあり、このことは、所与のブロックに対するランが相対的に短くなることにより、コーディング効率に悪い影響を与えることがある。
本開示の態様によれば、ランは、2つ以上のパレットモードを使用してコーディングされるサンプルを含み得る。たとえば、ビデオコーダは、ビデオデータのブロックの第1の行のパレットインデックスを決定することができ、ここでパレットインデックスは、パレット中の色値と関連付けられる1つまたは複数のインデックスと、パレット中の色値と関連付けられないシンタックス要素(これは、シンタックス要素が必ずしもインデックス値に対応するとは限らないにもかかわらず、パレットインデックスと呼ばれ得る)とを含む。ビデオコーダはまた、第1の行のパレットインデックスに関連してビデオデータのブロックの第2の行のパレットインデックスのランをコーディングすることができ、ここでランは、パレット中の色値と関連付けられる1つまたは複数のインデックスと、パレット中の色値と関連付けられないシンタックス要素とを含む。
いくつかの例では、パレットインデックスのランは、CopyFromTopモードと、エスケープサンプル、たとえばEscapeモードとの両方を用いてコーディングされる画素を含み得る。たとえば、パレット中の色値と関連付けられるインデックスは、CopyFromTopモードによってコーディングされてよく、パレット中の色値と関連付けられないシンタックス要素は、エスケープサンプルとしてコーディングされてよい。いくつかの例では、以下でより詳細に説明されるように、シンタックス要素は、パレット中の色値と関連付けられないインデックスと関連付けられ得る。いくつかの例では、エスケープサンプルとしてコーディングされる画素の値は、インデックスのランに続いてシグナリングされてよく、エスケープサンプルとしてコーディングされる複数の画素は、同一であることを求められない。他の例では、エスケープサンプルはCopyFromTopモードによって表されてよく、エスケープサンプルはコーディングされた非エスケープサンプル(たとえば、色値がパレットにおいて表される画素)とともに画素の同じグループに含まれてよく、ここで画素のグループはラン値によって特定される。このようにして、本技法は、ランの長さを延ばすために使用されることがあり、これはコーディング効率を向上させ得る。
図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書において使用される「ビデオコーダ」という用語は、総称的に、ビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またビデオ復号を総称的に指し得る。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示において説明される様々な例によるパレットベースのビデオコーディングのための技法を実行するように構成され得るデバイスの例を表す。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、HEVCコーディングにおけるCUまたはPUのようなビデオデータの様々なブロックを、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して選択的にコーディングするように構成され得る。非パレットベースのコーディングモードとは、HEVC Draft 10によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモード、またはイントラ予測空間コーディングモードを指し得る。
図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12および宛先デバイス14を含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車載コンピュータなどを含む、広範囲のデバイスを備え得る。
宛先デバイス14は、符号化されたビデオデータをソースデバイス12からチャネル16を介して受信し得る。チャネル16は、符号化されたビデオデータをソースデバイス12から宛先デバイス14に移動させることが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12がリアルタイムで符号化されたビデオデータを直接宛先デバイス14に送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14へ送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路のような、ワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)のような、パケットベースのネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にする他の機器を含み得る。
別の例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、ブルーレイディスク、DVD、CD-ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適当なデジタル記憶媒体のような、ローカルにアクセスされる様々なデータ記憶媒体を含み得る。
さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ファイルサーバまたは他の中間記憶デバイスにおいて記憶された符号化されたビデオデータに、ストリーミングまたはダウンロードを介してアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶するとともに符号化されたビデオデータを宛先デバイス14へ送信することが可能なタイプのサーバであり得る。例示的なファイルサーバは、ウェブサーバ(たとえば、ウェブサイト用の)、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
宛先デバイス14は、インターネット接続などの標準的なデータ接続を通じて、符号化されたビデオデータにアクセスし得る。データ接続の例示的なタイプは、ファイルサーバに記憶されている符号化されたビデオデータにアクセスするのに適している、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであってよい。
本開示の技法は、ワイヤレスの適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえば、インターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話のような用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間に必ずしもデータ通信を含まないビデオコーディングの状況(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データは、ローカルメモリから取り出され、ネットワークを介してストリーミングされ、または同様の方法で取り出される。ビデオ符号化デバイスは、データを符号化してメモリに記憶することができ、かつ/または、ビデオ復号デバイスは、メモリからデータを取り出して復号することができる。多くの例では、互いに通信しないが、単にデータをメモリへ符号化し、かつ/またはメモリからデータを取り出して復号するデバイスによって、符号化および復号が実行される。
図1の例では、ソースデバイス12は、ビデオソース18、ビデオエンコーダ20、および出力インターフェース22を含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、たとえば、ビデオカメラ、前にキャプチャされたビデオデータを含むビデオアーカイブ、ビデオデータをビデオコンテンツプロバイダから受信するためのビデオフィードインターフェース、および/もしくはビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、符号化されたビデオデータを宛先デバイス14へ出力インターフェース22を介して直接送信する。他の例では、復号および/または再生のために宛先デバイス14によって後でアクセスするために、符号化されたビデオデータはまた、記憶媒体またはファイルサーバへ記憶され得る。
図1の例では、宛先デバイス14は、入力インターフェース28、ビデオデコーダ30、およびディスプレイデバイス32を含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、符号化されたビデオデータをチャネル16を通じて受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化されてよく、または宛先デバイス14の外部にあってよい。一般に、ディスプレイデバイス32は復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備え得る。
ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、個別論理、ハードウェア、またはそれらの任意の組合せなどの、様々な適当な回路のいずれかとして実装され得る。技法が部分的にソフトウェアで実装される場合、本開示の技法を実行するために、デバイスは、ソフトウェアのための命令を適当な非一時的コンピュータ可読記憶媒体に記憶することができ、1つまたは複数のプロセッサを使用するハードウェアにおいて命令を実行することができる。前述のもののいずれか(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)は、1つまたは複数のプロセッサであると見なされてよい。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、それらのいずれかが、組み合わされたエンコーダ/デコーダ(コーデック)の一部としてそれぞれのデバイスの中で一体化されてよい。
本開示は、一般に、ある種の情報をビデオデコーダ30などの別のデバイスへ「シグナリングする」または「送信する」ビデオエンコーダ20に言及することがある。「シグナリングすること」または「送信すること」という用語は、一般に、シンタックス要素、および/または圧縮されたビデオデータを復号するために使用される他のデータの通信を指し得る。そのような通信は、リアルタイムで、またはほぼリアルタイムで発生し得る。代替的に、そのような通信はある時間の範囲にわたって発生することがあり、たとえば、符号化の時点において符号化されたビットストリームの中のシンタックス要素をコンピュータ可読記憶媒体に記憶し、次いでシンタックス要素がこの媒体に記憶された後の任意の時点において復号デバイスによって取り出され得るときに発生することがある。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上述のHEVC規格のような、HEVC Draft 10に記載されているビデオ圧縮規格に従って動作する。ベースのHEVC規格に加えて、HEVC向けのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を制作するための取組みが進行中である。加えて、たとえば、本開示において説明されるようなパレットベースのコーディングモードは、HEVC規格の拡張のために提供され得る。いくつかの例では、パレットベースのコーディングのための本開示で説明される技法は、ITU-T-H.264/AVC規格のような他のビデオコーディング規格または将来の規格に従って動作するように構成されたエンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースのコーディングモードの適用例は、例として説明される。
HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは通常、一連のピクチャを含む。ピクチャは、「フレーム」と呼ばれることもある。ピクチャは、SL、SCb、およびSCrと示される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書で「クロマ」サンプルと呼ばれることもある。他の事例では、ピクチャはモノクロであってよく、ルーマサンプルのアレイだけを含むことがある。
ピクチャの符号化された表現を生成するために、ビデオエンコーダ20が、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nのブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックと大まかに類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスター走査において連続的に順序付けられた整数個のCTUを含み得る。
コーディングされたCTUを生成するために、ビデオエンコーダ20がCTUのコーディングツリーブロック上で4分木区分を再帰的に実行してコーディングツリーブロックをコーディングブロックに分割することができ、したがって、「コーディングツリーユニット」という名前である。コーディングブロックは、サンプルのN×Nのブロックである。CUは、ルーマサンプルアレイ、Cbサンプルアレイ、およびCrサンプルアレイを有するピクチャの、ルーマサンプルのコーディングブロック、およびクロマサンプルの2つの対応するコーディングブロック、ならびにコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの、長方形(すなわち、正方形または非正方形)のブロックであり得る。CUの予測ユニット(PU)は、ピクチャの、ルーマサンプルの予測ブロック、クロマサンプルの2つの対応する予測ブロック、および予測ブロックサンプルを予測するために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックに対して、予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
ビデオエンコーダ20は、PUに対する予測ブロックを生成するために、イントラ予測またはインター予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。
ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために、単予測または双予測を使用し得る。ビデオエンコーダ20がPUに対する予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUに対する予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
ビデオエンコーダ20がCUの1つまたは複数のPUに対して予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成した後、ビデオエンコーダ20は、CUに対するルーマ残差ブロックを生成し得る。CUのルーマ残差ブロックの中の各サンプルは、CUの予測ルーマブロックの1つの中のルーマサンプルとCUの元のルーマコーディングブロックの中の対応するサンプルとの間の差分を示す。加えて、ビデオエンコーダ20は、CUに対するCb残差ブロックを生成し得る。CUのCb残差ブロックの中の各サンプルは、CUの予測Cbブロックの1つの中のCbサンプルとCUの元のCbコーディングブロックの中の対応するサンプルとの間の差分を示し得る。ビデオエンコーダ20はまた、CUに対するCr残差ブロックを生成し得る。CUのCr残差ブロックの中の各サンプルは、CUの予測Crブロックの1つの中のCrサンプルとCUの元のCrコーディングブロックの中の対応するサンプルとの間の差分を示し得る。
さらに、ビデオエンコーダ20は、4分木区分を使用して、CUのルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロックを、1つまたは複数のルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに分解し得る。変換ブロックは、同じ変換が適用されるサンプルの長方形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックと関連付けられ得る。TUと関連付けられたルーマ変換ブロックは、CUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
ビデオエンコーダ20は、1つまたは複数の変換をTUのルーマ変換ブロックに適用して、TUに対するルーマ係数ブロックを生成し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数はスカラー量であり得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCb変換ブロックに適用して、TUに対するCb係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCr変換ブロックに適用して、TUに対するCr係数ブロックを生成し得る。
係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後、ビデオエンコーダ20は、係数ブロックを量子化し得る。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現するプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行し得る。
CABACに関して、ある例として、ビデオエンコーダ20およびビデオデコーダ30は、コンテキストに基づいてビデオデータのブロックと関連付けられるシンボルをコーディングするために、確率モデル(コンテキストモデルとも呼ばれる)を選択することができる。たとえば、コンテキストモデル(Ctx)は、複数の異なるコンテキストの1つを選択するために適用されるインデックスまたはオフセットであってよく、これらの各々が特定の確率モデルに対応し得る。したがって、異なる確率モデルは通常、各コンテキストに対して定義される。ビンを符号化または復号した後で、確率モデルはさらに、ビンに対する最新の確率の推定を反映するように、ビンの値に基づいて更新される。たとえば、確率モデルは、有限状態機械において状態として保持され得る。各々の特定の状態は、固有の確率値に対応し得る。確率モデルの更新に対応する次の状態は、現在のビン(たとえば、現在コーディングされているビン)の値に依存し得る。したがって、確率モデルの選択は、前にコーディングされたビンの値の影響を受けることがあり、それは、その値が、所与の値を有するビンの確率を少なくとも一部示すからである。上で説明されたコンテキストコーディングのプロセスは一般に、コンテキスト適応コーディングモードと呼ばれ得る。
したがって、ビデオエンコーダ20は、確率モデルを使用してターゲットシンボルを符号化することができる。同様に、ビデオデコーダ30は、確率モデルを使用してターゲットシンボルを構文解析することができる。いくつかの事例では、ビデオエンコーダ20は、コンテキスト適応コーディングと非コンテキスト適応コーディングの組合せを使用して、シンタックス要素をコーディングすることができる。たとえば、ビデオエンコーダ20は、ビンをコーディングするようにコンテキストに対して作用する、確率モデルまたは「コンテキストモデル」を選択することによって、ビンをコンテキストコーディングすることができる。対照的に、ビデオエンコーダ20は、ビンをコーディングするときに通常の算術コーディングプロセスを迂回または省略することによって、ビンをバイパスコーディングすることができる。そのような例では、ビデオエンコーダ20は、固定された確率モデルを使用してビンをバイパスコーディングすることができる。すなわち、バイパスコーディングされたビンは、コンテキストまたは確率の更新を含まない。
ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。ビットストリームは、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含み得る。ビットストリームは、ネットワーク抽象化レイヤ(NAL)ユニットのシーケンスを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)をカプセル化する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって規定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含むシンタックス構造であり得る。いくつかの事例では、RBSPは、0個のビットを含む。
異なるタイプのNALユニットが、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットがピクチャパラメータセット(PPS)のためのRBSPをカプセル化してよく、第2のタイプのNALユニットがコーディングされたスライスのためのRBSPをカプセル化してよく、第3のタイプのNALユニットがSEIのためのRBSPをカプセル化してよく、以下同様である。(パラメータセットおよびSEIメッセージのためのRBSPではなく)ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれることがある。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、シンタックス要素をビットストリームから復号するために、ビットストリームを構文解析し得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは、一般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、PUのMVを使用して、現在のCUのPUに対する予測ブロックを決定し得る。加えて、ビデオデコーダ30は、現在のCUのTUと関連付けられる変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、変換係数ブロックに対して逆変換を実行して、現在のCUのTUと関連付けられる変換ブロックを再構築し得る。ビデオデコーダ30は、現在のCUのPUに対する予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築し得る。ピクチャの各CUに対してコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築し得る。
HEVCは、タイルおよびwavefront parallel processing(WPP)を含めて、コーデックをより並列処理に適したものにするためのいくつかの提案を含んでいる。HEVC WD10は、タイルのコーディングツリーブロックラスター走査において連続的に並べられる、1つの列および1つの行において共存する整数個のコーディングツリーブロックとして、タイルを定義する。タイルへの各ピクチャの分割は、区分である。タイルの数およびタイルの境界の位置は、シーケンス全体に対して定義されてよく、またはピクチャごとに変更されてよい。タイルの境界は、スライスの境界と同様に、タイルが独立に処理され得るように構文解析および予測の依存関係を壊すが、ループ内フィルタ(デブロッキングおよびサンプル適応オフセット(SAO))は依然としてタイルの境界にまたがり得る。HEVC WD10はまた、スライスとタイルの関係についていくつかの制約を規定する。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。たとえば、パレットベースのコーディングでは、上で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を実行するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆるパレットをコーディングし得る。各画素は、画素の色を表すパレットの中のエントリーと関連付けられ得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、画素値をパレットの中の適切な値と関連付けるインデックスをコーディングし得る。
上の例では、ビデオエンコーダ20は、ブロックに対するパレットを決定することと、各画素の値を表すためのパレット中のエントリーを位置特定することと、画素値をパレットと関連付ける画素に対するインデックス値とともにパレットを符号化することとによって、ビデオデータのブロックを符号化し得る。ビデオデコーダ30は、ブロックに対するパレット、ならびにブロックの画素に対するインデックス値を、符号化されたビットストリームから取得し得る。ビデオデコーダ30は、ブロックの画素値を再構築するために、画素のインデックス値をパレットのエントリーと関連付け得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、1つまたは複数の前にコーディングされたブロックからのパレットエントリーを使用してパレットを構築するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、パレットモードまたは他の再構築されたサンプルを使用して前にコーディングされたブロックからのパレットエントリーを含む予測子パレットから、現在のブロックをコーディングするための1つまたは複数のパレットエントリーを複製するように構成され得る。予測子パレット中の各エントリーに対して、ビデオエンコーダ20およびビデオデコーダ30は、フラグと関連付けられるエントリーが現在のパレットに複製される(たとえば、フラグ=1によって示される)かどうかを示すためのバイナリフラグをコーディングするように構成され得る。バイナリフラグの列は、バイナリパレット予測ベクトルと呼ばれ得る。現在のブロックをコーディングするためのパレットはまた、いくつかの新しいパレットエントリーを含んでよく、これは明示的に(たとえば、パレット予測ベクトルとは別に)コーディングされ得る。
上で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、パレットのインデックスをコーディングするために、いくつかの異なるパレットコーディングモードを使用することができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、Escapeモード、CopyFromTopモード(CopyAboveモードとも呼ばれる)、またはValueモード(Indexモードとも呼ばれる)を使用して、ブロックのインデックスをコーディングすることができる。一般に、「Escapeモード」を使用してサンプルをコーディングすることは全般に、ブロックをコーディングするためのパレットにおいて表現される対応する色を有しないブロックのサンプルをコーディングすることを指し得る。上で述べられたように、そのようなサンプルはエスケープサンプルまたはエスケープ画素と呼ばれ得る。
別の例として、Yu-Wen Huang他、「Description of Screen Content Core Experiment 3 (SCCE3): Palette Mode」、JCTVC-Q1123、バレンシア、スペイン、2014年3月27日〜4月4日(以後Q1123)において記述されるような、第3のscreen content coding core experiment、subtest B.6において、別のモードが2014年5月26日にCanonによってリリースされたソフトウェアへと導入された。このモードのためのマクロは、「CANON_NEW_RUN_LAST_TRANSITION」として定義されてよく、Transition Runモードと本明細書では呼ばれ得る。Transition Runは、ビデオエンコーダ20またはビデオデコーダ30が、同じパレットインデックスを有する後続のサンプルの数を指定するランの前にインデックス値をコーディングし得るという点で、Valueモードと同様であり得る。
ValueモードとTransition Runモードの1つの違いは、transition runモードのインデックス値がビットストリームにおいてシグナリングされないということである。逆に、ビデオエンコーダ20およびビデオデコーダ30は、Transition Runモードに対するインデックス値を推測し得る。本明細書において説明されるように、値を推測することは、ビットストリームにおいてコーディングされる値を表す専用のシンタックスを参照することなく値を決定することを指し得る。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、ビットストリーム中の値に対する専用のシンタックス要素をコーディングすることなく、値を推測し得る。推測されたインデックスは、遷移インデックスと呼ばれ得る。
いくつかの例では、パレットモードをシグナリングする2つの方法があり得る。パレットモードをシグナリングするための第1の技法は、明示的エスケープシグナリングと呼ばれ得る。たとえば、JCTVC-Q0094において、マクロ「PLT_REMOVE_ESCAPE_FLAG」が0である場合、ビデオエンコーダ20は、ブロックにおいてコーディングされているサンプルがEscapeモードでコーディングされるかどうかを示すために、ブロックの各サンプルに対してエスケープフラグを明示的に符号化し得る。サンプルがEscapeモードによってコーディングされない場合、ビデオエンコーダ20は、モードがCopyFromTopであるかValueであるかを示すために追加のデータを符号化し得る。いくつかの事例では、追加のデータは、本明細書ではSPointフラグと呼ばれるフラグであり得る(たとえば、0というSPointフラグの値はCopyFromTopモードを示してよく、1というSPointフラグの値はValueモードを示してよく、またはその逆であってよい)。
したがって、明示的エスケープシグナリングによって、SPointフラグは、示されたモードと関連付けられる画素値のランに対する特定のランタイプを示すために使用され得る。たとえば、ビデオエンコーダ20は、現在コーディングされているインデックスおよびランにおいてコーディングされている後続のインデックス値のランが、CopyFromTopモードを使用してコーディングされるかValueモードを使用してコーディングされるかを示すために、SPointフラグを符号化し得る。ビデオエンコーダ20は、後続のランサンプルに対してエスケープフラグ(たとえば、「PLT_REMOVE_ESCAPE_FLAG」)およびSPointフラグ(必要なとき)を符号化しない。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、ランに含まれるサンプルに対するエスケープフラグおよびSPointフラグの値を推測し得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ランに含まれるサンプルに対するエスケープフラグおよびSPointフラグの値を、ビットストリーム中のそのような値を表す専用のシンタックスを参照することなく、決定することができる。
パレットモードをシグナリングするための第2の技法は、暗黙的エスケープシグナリングと呼ばれ得る。たとえば、JCTVC-Q0094からのマクロ「PLT_REMOVE_ESCAPE_FLAG」が1である場合、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのインデックスのいずれにも相当しない、パレットに対する特別なインデックスに対応するように、パレットのパレットエントリーの数を1だけ増やすように構成され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、所与のブロックに対する増やされたパレット中の最後のパレットインデックスとして、追加のインデックスを含み得る。追加のインデックスは、エスケープサンプルを示すものとして使用され得る。
この暗黙的エスケープシグナリングでは、ビデオエンコーダ20は、ブロックの特定のサンプル値に対して、追加のサンプルがEscapeモードを使用してコーディングされることを示すための追加のインデックスを表すデータを符号化し得る。ビデオエンコーダ20はまた、エスケープサンプルの色値を符号化し得る。したがって、暗黙的エスケープシグナリングの場合、明示的なシンタックスを使用してシグナリングされる可能性のあるモードは、2つ(たとえば、CopyFromTopモードまたはValueモード)しかない。たとえば、モードを区別するために、SPointフラグだけがシグナリングされ得る。サンプルがValueモードでコーディングされ、Valueモードに対するインデックスがエスケープインデックス(たとえば、パレットに対する上で述べられた追加のインデックス)に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、Escapeモードでコーディングされるべきサンプルを推測し得る。この場合、ランはシグナリングされない。Transition Runモードによる暗黙的エスケープシグナリングを使用するとき、SPointフラグは、0(たとえば、Valueモード)、1(たとえば、CopyFromTopモード)、または2(たとえば、Transition Runモード)という値をとり得る。
本開示において説明される技法は、パレット予測と、暗黙的エスケープシグナリングによるパレットインデックスのシグナリングとの1つまたは複数の様々な組合せのための技法を含み得る。たとえば、本開示の態様は、予測子パレットをリセットすることに関する。たとえば、予測子パレットをリセットすることは、予測子パレットのサイズを0に設定することを含み得るので、予測子パレットは、現在コーディングされているブロックに対するパレットを構築するために使用されないことがある。この場合、バイナリパレット予測ベクトルはビットストリームにおいてシグナリングされず、パレットエントリーは予測子パレットから予測されない。
JCTVC-Q0094では、予測子パレットは、ピクチャの左端にある(たとえば、ピクチャ中のCTBの行(「CTB行」)の最初にある)コーディングツリーブロック(CTB)に対してリセットされる。CTB行の最初にある予測子パレットをリセットする理由は、2つあり得る。まず、CTBの線をコーディングした後、予測子パレットは、ピクチャの右側に位置するブロックのパレットに大半が属するパレットエントリーを含み得る。したがって、予測子パレットは、ピクチャの左側に配置され得るCTB行の第1のCTBに対する現在のパレットを予測するのにあまり効率的ではないことがある(たとえば、ピクチャの左側にある画素の色は、ピクチャの右側にある画素の色とは異なることがある)。加えて、特定のピクチャをコーディングするために2つ以上の波面が使用されているとき、CABAC状態に加えて、波面と波面の間で予測子パレットについての情報を伝播することが必要である。
たとえば、波面は、コーディングのためのビデオデータの単位であることがあり、他の波面と並列にコーディングされ得る。たとえば、Wavefront Parallel Processing(WPP)およびOverlapped Wavefront(OWF)を含む、2つの並列化の手法がHEVCに含まれている。WPPは、大きなコーディング損失を引き起こすことなく並列に処理され得るピクチャの区分を作り出すことを可能にする。CTBのWPP行は、すべてのコーディングの依存関係を保ちながら並列に処理される。OWFは、波面を使用して連続するピクチャの実行を重複させることを可能にする。
しかしながら、いくつかの事例では、予測子パレットをリセットすることはコーディング損失につながることがある。たとえば、予測子パレットがないと、ビデオエンコーダ20およびビデオデコーダ30は、ビットストリーム中のパレットのエントリーのすべて(たとえば、パレットインデックスおよび関連する色値のすべて)を示すデータをコーディングし得る。このパレットデータは、予測されるパレットエントリーに対して相対的に大量のデータであることがあり、これは単一のフラグを使用してビットストリームにおいて示され得る。したがって、予測子パレットをリセットすることは、パレットベースのコーディングによってコーディングされるビデオデータのビットレートに悪い影響を与えることがある。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ピクチャをコーディングするために使用される波面の数が1または0(すなわち、波面なし)であることに基づいて、予測子パレットのリセットを無効にするように構成され得る。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、1または0個の波面がピクチャをコーディングするために使用されるとき、予測子パレットをリセットしないように構成され得る。しかしながら、ビデオエンコーダ20およびビデオデコーダ30は、2つ以上の波面がピクチャをコーディングするために使用されるとき、予測子パレットのリセットを有効にするように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、単一の波面の場合においてコーディング損失を回避しながら、波面と波面との間で予測子パレットについての情報を伝播する必要がなくなり得る。
本開示の態様によれば、複数のタイルおよび複数の波面がピクチャをコーディングするために使用される(たとえば、ビデオエンコーダ20およびビデオデコーダ30が、2つ以上のタイルおよび2つ以上の波面を使用してピクチャをコーディングする)とき、ビデオエンコーダ20およびビデオデコーダ30は、各タイルのCTB行の最初において予測子パレットをリセットするように構成され得る。タイルのCTB行は、特定のタイルに属するCTB行からのCTBを含み得る。ブロックをコーディングするために使用される特定の走査順序に応じて、「行」は垂直または水平に配向され得ることを理解されたい。行は本明細書では線とも呼ばれることもあり、これらの用語は本明細書では交換可能に使用され得る。
上で説明される技法は、パレット遷移テーブルにも適用され得る。たとえば、Yu-Chen Sun他、「CE6 Test C.2 Transition Copy Mode」、JCTVC-S0078、ストラスブール、フランス、10月17日〜24日(JCTVC-S0078)という企画提案文書が、遷移複製モードを記述している。遷移複製は、遷移複製ラン(TCラン)モードとも呼ばれ得る。TCランモードでは、デコーダは、隣接する色インデックスパターンを記録し、そのパターンを使用してコーディングされることになるインデックスを予測する。TCランモードでは、ある例として、現在の画素Cは、1に等しいパイロット色インデックスを有する。コーディングされる画素の元となるエリアから、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ30のような)は、(たとえば、左から右への走査を仮定すると)1に等しい色インデックスの右側にある色インデックスが2である可能性が高いと決定することができる。1から2へのこの遷移パターンは、色インデックスの予測の効率を高めるために、遷移複製テーブル(TCテーブル)に記録され得る。
JCTVC-S0078では、コーディングされている現在のCUがスライスの第1のCUであるとき、TCテーブルはリセットされ、または、現在のCUがスライスの第1のCUではないとき、現在のCUは前のCUのTCテーブルを継承する。この継承の特性は、「TCテーブル伝播」と呼ばれ得る。TCテーブルは保持され、CU中の画素がコーディングされるにつれて更新され得る。
いくつかの例では、遷移複製モードでは、2つの遷移テーブルが保持され、一方は偶数番目の行に対するものであり、他方は奇数番目の行に対するものである。以前の寄与は、単一の遷移テーブルを使用することを説明した。それでも、一般に、上で述べられたように、以前のパレットコーディングされたCU(またはブロック)からの遷移テーブルが、パレットモードにおいてコーディングされる現在のCU(またはブロック)に対する遷移テーブルを初期化するために使用され得る。
本開示の態様によれば、上で説明されたような、複数の波面が使用されるときにCTB行の中の第1のCTBまたはCTB行の中のタイルの中の第1のCTBの最初にあるパレットをリセットするという概念は、それらの位置にあるパレット遷移テーブル(または複数のテーブル)もリセットすることに拡張され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、複数の波面が使用されているとき、CTB行の中の第1のCTBまたはCTB行の中のタイルの中の第1のCTB(または等価的に、CTB内の第1のパレットコーディングされたCU)に対して、パレット遷移テーブル中のエントリーのすべてを0に(または任意の他の固定されたパレットインデックス、または任意の他のパターンに)設定するように構成され得る。本開示の態様によれば、予測子パレットおよびパレット遷移テーブルのリセットは、1つのパレットコーディングされたCUから別のパレットコーディングされたCUへと伝播され得る任意の他のパレット関連のデータへと一般化され得る。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、予測子パレットのリセット(および/または上で述べられたパレット遷移テーブルのような他の情報のリセット)が各CTB行の最初において実行されるかどうかを示す、ビデオパラメータセット(VPS)、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、スライスヘッダのフラグを、タイルレベルにおいて、ブロックレベルにおいて、または他のレベルにおいてコーディングするように構成され得る。フラグがタイルレベルにおいてシグナリングされる事例では、フラグは、予測子パレットのリセットが各タイルのCTB行の最初において(たとえば、タイル中のCTBの各行の最初において)実行されるかどうかを示し得る。代替的に、CTBの行の中のパレットモードを使用してコーディングされる第1のブロックに対して、予測子パレットのリセットが実行されるかどうかを示すためにフラグがシグナリングされ得る。
別の例では、フラグ(たとえば、フラグは1つまたは複数のシンタックス要素であり得る)は、予測子パレットのリセットが実行されるべきかどうかを示すために、パレットモードを使用してコーディングされる各ブロックに対してシグナリングされ得る。いくつかの例では、本技法には、ビデオエンコーダ20およびビデオデコーダ30が、すべてのパレットエントリーを明示的にシグナリングさせる技法と、予測子パレットを使用してパレットエントリーの一部を予測する技法との間で、選択を行えるようになるという利点があり得る。いくつかの例では、フラグの値は推測され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、各波面に対するフラグの値を推測するように構成され得るので、推測される値は、予測子パレットがリセットされることを示す。代替的に、または追加で、ビデオエンコーダ20およびビデオデコーダ30は、スライスまたはタイルの第1のブロックに対するフラグの値を推測するように構成され得るので、推測される値は、各スライスおよび/またはタイルの最初において予測子パレットがリセットされることを示す。
別の例では、予測子パレットのリセットを示すためのフラグをシグナリングする代わりに、ビデオエンコーダ20およびビデオデコーダ30は、ある規則または規則のセットに従って予測子パレットをリセットするように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30はともに、規則または規則のセットを適用するように構成され得る。一例では、ビデオエンコーダ20およびビデオデコーダ30は、予測子パレットをリセットするかどうかを決定するために、現在のブロック中のパレットが予測子パレットから予測されるエントリーを有しない場合にはこの現在のブロックに対して予測子パレットがリセットされる(たとえば、予測子パレットの長さが0に設定される)という規則を適用するように構成され得るので、以前のブロックからのパレットエントリーではなく、現在のパレットだけが、後続のブロックに対する予測子として使用され得る。
上の例では、ビデオエンコーダ20は、パレットのリセットを制御することができる。たとえば、パレットがリセットされるべきであるとき、ビデオエンコーダ20は単に、予測子パレットからのいずれのエントリーも使用しなくてよい。このプロセスを実施する1つの潜在的な利点は、新たなシンタックス要素が追加されず、パレットのリセットがより詳細かつより柔軟に制御され得ることである。たとえば、この柔軟性/詳細性は、予測子パレットのリセットが実行される条件を変更する能力により実現され得る。
いくつかの例では、ビデオエンコーダ20は、波面コーディングが有効にされているときの各LCU行の中の第1のLCUに対するケース、タイル中の第1のブロックに対するケース、またはスライス中の第1のブロックに対するケースの、少なくとも1つにおいて、予測子パレットを使用しなくてよい。
本開示の態様によれば、予測子パレットは再初期化され得る。たとえば、予測子パレットを再初期化することは一般に、予測子パレットのエントリーを新たなエントリーで置き換えることを指し得る。たとえば、インデックスのブロックをコーディングした後、予測子パレットは、コーディングされるべき次のブロックのパレットを予測するためのいくつかのエントリーを含み得る。予測子パレットを再初期化することは、その数のエントリーを除去し、コーディングされるべき次のブロックのパレットを予測するための予測子パレットに新たなエントリーを追加することを含み得る。
いくつかの例では、本開示の態様によれば、CTBの各線の最初において、ビデオエンコーダ20およびビデオデコーダ30は、現在のCTBの線がピクチャ/スライス/タイルの中の第1のCTBの線ではない場合、現在のCTBの上にあるCTBの線の第1のCTBからのパレットエントリーを使用して現在のCTBの現在のパレットを決定するための予測子パレットを再初期化するように構成され得る。この場合、以下で図5の例に関してより詳細に説明されるように、第1のCTBのコーディングを終了した後、かつ(第1のCTBがピクチャ/スライス/タイルの中の第1のCTBの線ではなければ)上にあるCTBの線の中の第2のCTBをコーディングする前に、ビデオエンコーダ20およびビデオデコーダ30は、現在のCTBの線の最初において予測子パレットを再初期化するために予測子パレットを使用するように構成され得る。現在のCTBの線がピクチャ/スライス/タイルにおいて第1のCTBの線である場合、ビデオエンコーダ20およびビデオデコーダ30は、(たとえば、JCTVC-Q0094において記述されるような)予測子パレットのエントリーの数を設定し、現在のCTBに対するパレットを決定するときにパレットエントリーを予測しないように構成され得る。
別の例では、予測子パレットを再初期化するという概念は一般化され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、現在コーディングされているCTBの上にあるCTBの線のN個のCTBをコーディングした後に、かつ、(CTBの線がピクチャ/スライス/タイルの中の第1のCTBの線ではなければ)現在コーディングされているCTBの上にあるCTBの線の中のN+1番目のCTBのコーディングを開始する前に、予測子パレットを生成するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、生成された予測子パレットを使用して現在コーディングされているCTBのパレットを決定するための予測子パレットを再初期化するように構成され得る。現在コーディングされているCTBは、(現在のCTBがピクチャ/スライス/タイルの中の第1のCTBの線ではなければ)現在のCTBの線の第1のCTBであり得る。ここで、Nは、1と、CTBの線の中のCTBの数との間の数であり得る。この予測子パレット再初期化技法を波面コーディングと概念的に揃えるために、Nは2以下となるように選択され得る。このようにして、ピクチャをコーディングするために使用される波面の数とは無関係に、同じ予測子パレットの再初期化プロセスが使用され得る。
上で述べられたように、CTBはLCUとも呼ばれ得る。いくつかの例では、予測子パレットの再初期化は、(たとえば、様々な予測モード(インターモードまたはイントラモード)またはパレットモードがCTBをコーディングするために使用され得る事例において)パレットモードがCTBの任意のブロックを予測するために使用される、ブロックの線の第1のCTBに対して実行され得る。上の例は説明を目的にCTBに関して説明されるが、本技法はビデオデータの任意のタイプのブロックに拡張され得ることを理解されたい。
本開示の態様によれば、上で説明されたパレット再初期化プロセスは、パレット遷移テーブルに拡張され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、N個のCTBをコーディングした後に、かつ、(現在のCTBがピクチャ/スライス/タイルの中の第1のCTBの線ではなければ)現在のCTBの上にあるCTBの線の中のN+1番目のCTBをコーディングし始める前に生成されるパレット遷移テーブルを使用して、現在のCTB行の最初においてパレット遷移テーブルを再初期化するように構成され得る。ここで、Nは、1と、CTBの線の中のCTBの数との間の数であり得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、2以下のNの値を選択するように構成され得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレット遷移テーブル自体に加えて、遷移テーブルのサイズを複製するように構成され得る。実際に、パレットコーディング情報(たとえば、予測子パレット情報、パレット遷移テーブル情報など)を再初期化するこのプロセスは、パレットコーディングされたCUから次のパレットコーディングされたCUへと伝播されるあらゆる他のパレット関連データへと一般化され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、N個のCTBをコーディングした後に、かつ、現在のCTBの上にあるCTBの線の中のN+1番目のCTBをコーディングし始める前に生成されるパレットデータに基づいて、現在のCTBに対してパレット関連データを再初期化するように構成され得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、すべての適用可能なCTB(たとえば、CTBの線の中の最初にコーディングされるCTB)に対する再初期化を使用するように構成され得る。他の例では、ビデオエンコーダ20およびビデオデコーダ30は、ピクチャまたはタイルをコーディングするために使用されている波面の数が2以上であるとき、再初期化技法だけを実行するように構成され得る。
本開示の態様によれば、タイルおよび波面が特定のピクチャをコーディングするために一緒に使用されているとき、ビデオエンコーダ20およびビデオデコーダ30は、タイルが別々のピクチャであるかのように、再初期化技法をタイルに適用するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、以下で図7に関してより詳細に説明されるように、第1のタイルCTBがタイル中の第1のCTBの線ではない場合、第1のタイルCTBに対して上で説明された再初期化プロセスを適用するように構成され得る。
本開示の他の態様は、暗黙的エスケープシグナリングが使用される例において、エスケープサンプルをシグナリングすることに関する。たとえば、JCTVC-Q0094では、上で説明された暗黙的エスケープ技法について、パレットのサイズは1だけ増やされ、拡大されたパレットの中の最後のインデックスは、サンプルがエスケープサンプルとしてコーディングされるかどうかを示すために割り当てられる。切捨てバイナリコーディングがこのインデックスをコーディングするために使用される場合、最後のインデックスはインデックス0よりも1ビット多く使用し得る。同様に、別の可変長コーディング戦略が使用される場合、長さの違いはさらに大きくなり得る。
通常、あるブロックサイズに対して、エスケープサンプルとしてコーディングされるサンプルは、他のサイズのブロックよりも多くなり得る。この関係を利用してインデックスのコーディングを改善するために、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルとしてコーディングされるより多くの画素を有する可能性が高いブロックに対するエスケープサンプルを示すために使用されるインデックスに、パレットの0インデックスを割り当てるように構成され得る。エスケープサンプルとしてコーディングされるサンプルが相対的により少ない可能性のある他のブロックに対しては、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルを示すために拡大されたパレットからの最高のインデックスを割り当てる現在の方式に従うように構成され得る。
説明を目的とする例では、ビデオエンコーダ20およびビデオデコーダ30は、32×32以下のブロックサイズに対するエスケープサンプルを示すために使用されるインデックスに0インデックスを割り当てるように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、64×64以上のブロックに対するエスケープサンプルを示すために使用されるインデックスに最高の(たとえば、パレットインデックスのうちで数値的に最大の)インデックスを割り当てるように構成され得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、各ブロックサイズに対して経験的に同じエスケープインデックス割当て規則を実施するように構成され得る。別の例では、エスケープインデックス割当て規則は、ビデオパラメータセット(VPS)において、シーケンスパラメータセット(SPS)において、ピクチャパラメータセット(PPS)において、スライスヘッダにおいて、タイルレベルにおいて、または他の箇所で明示的にシグナリングされ得る。
本開示の他の態様は、明示的エスケープシグナリングが使用される例において、エスケープサンプルをシグナリングすることに関する。明示的エスケープシグナリングの場合、Escapeモードがフラグ内でシグナリングされ得る。本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ブロックサイズに基づいてエスケープフラグをコンテキスト適応コーディングするように構成され得る。たとえば、コンテキストは、あるブロックサイズに対して、エスケープサンプルを使用してコーディングされたサンプルが他のブロックサイズよりも多くなり得るという関係を利用するために、エスケープフラグをコーディングするように設計され得る。この場合、フラグに対するコンテキストは、ブロックサイズに依存し得る。加えて、いくつかの例では、パレットサイズは、CUにおいてシグナリングされるべきエスケープサンプルの量/数との何らかの相関関係を有し得る。したがって、コンテキストは、パレットサイズに依存することがあり、または、パレットサイズが最大パレットサイズに等しい(または最大パレットサイズに等しくない)かどうかに依存することがある。
本開示の他の態様は、Valueパレットモードを使用してコーディングされるインデックスのランに対するラン値をシグナリングすることに関する。たとえば、Guillaume Laroche他、「AHG10: Run Coding for Palette Mode」、JCTVC-Q0066、バレンシア、スペイン、2014年3月27日〜4月4日(JCTVC-Q0066)という規格提案文書において、パレットを使用してコーディングされる各ブロックに対して、インデックス閾値がシグナリングされ得ることが提案されている。Valueモードでコーディングされているインデックスがインデックス閾値以上である場合、Valueモードに対してランはシグナリングされない。本開示は、この方法を「Limited Run」と呼び得る。
本開示の態様によれば、Q0066において記述されるプロセスに対して修正が行われ得る。第1の例では、シンタックス要素num_skipによって示される第1のインデックスに対して、ランが常にシグナリングされる。いくつかの例では、シンタックス要素num_skipは2に等しいので、インデックス0および1に対してランが常にシグナリングされる。シンタックス要素num_skipによって示される値は、ビデオエンコーダ20とビデオデコーダ30の両方に経験的に知られていることがあり(たとえば、ビデオコーダによって事前に決定されていることがあり)、または、ビデオパラメータセット(VPS)において、シーケンスパラメータセット(SPS)において、ピクチャパラメータセット(PPS)において、スライスヘッダにおいて、タイルレベルにおいて、または他の箇所で明示的にシグナリングされ得る。
第2の例では、パレットサイズが特定のパレットサイズの閾値未満である場合、インデックス閾値はシグナリングされず、ランは各インデックスに対してシグナリングされる。パレットサイズ閾値は、ビデオエンコーダ20とビデオデコーダ30の両方に経験的に知られていることがあり、または、ビデオパラメータセット(VPS)において、シーケンスパラメータセット(SPS)において、ピクチャパラメータセット(PPS)において、スライスヘッダにおいて、タイルレベルにおいて、または他の箇所で明示的にシグナリングされ得る。
第3の例では、パレットサイズがパレットサイズ閾値よりも大きいすべてのブロックに対して、インデックス閾値がシグナリングされるかどうかを示すために、フラグがシグナリングされ得る。このフラグは、あるブロックサイズおよび/またはパレットサイズだけに対してシグナリングされ得る。インデックス閾値がシグナリングされない場合、ランはすべてのインデックスに対してシグナリングされる。代替的な例では、明示的なフラグをシグナリングする代わりに、ランがすべてのインデックスに対してシグナリングされることを示すために、パレットサイズのインデックス閾値がシグナリングされる。
第4の例では、切捨てバイナリ化(たとえば、2014年5月22日に出願された米国仮出願第62/002,054号において説明されるような、切捨てバイナリコーディング)が、パレットのサイズがパレットサイズ閾値を超える場合のブロックに対するインデックス閾値をコーディングするために使用され得る。上の第3の例のように明示的なフラグがシグナリングされる場合、切捨てバイナリ化のための最大値は(current palette size-num_skip)であり得る。明示的なフラグが送信されていない場合、切捨てバイナリ化のための最大値は(current palette size-num_skip +1)であり得る。
第5の例では、パレットインデックスの並べ替え、再順序付け、または再マッピングの後で、ラン値がコーディングされ得る。たとえば、より長いインデックスのランを有するようにインデックスをグループ化するために、いくつかのパレットコーディング技法が使用され得る。一例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックスの適応走査を実行するように、またはBurrows Wheeler変換を適用するように構成され得る。
第6の例では、インデックス閾値は、第3の例に関して上で説明された明示的なフラグがシグナリングされる事例において、(パレットサイズ-インデックス閾値)としてシグナリングされ得る。同様に、インデックス閾値は、そのような明示的なフラグがシグナリングされない事例において、(パレットサイズ+1-インデックス閾値)としてシグナリングされ得る。いくつかの事例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロックサイズおよび/またはパレットサイズに基づいて、インデックス閾値または(パレットサイズ-インデックス閾値)をコーディングするように構成され得る。いくつかの例では、明示的なフラグがシグナリングされない事例において、同様の戦略が使用され得る。
6つの上で説明された例の技法は、ビデオエンコーダ20およびビデオデコーダ30によって、個々にまたは組み合わせて実施され得る。加えて、これらの技法は、ブロックサイズおよび/またはパレットサイズに応じて選択的に実施され得る。ブロックサイズおよび/またはパレットサイズに対するそのような依存性は、ビデオエンコーダ20とビデオデコーダ30の両方に経験的に知られていることがあり、または、ビデオパラメータセット(VPS)において、シーケンスパラメータセット(SPS)において、ピクチャパラメータセット(PPS)において、スライスヘッダにおいて、タイルレベルにおいて、または他の箇所で明示的にシグナリングされ得る。
JCTVC-Q0066とは対照的に、本開示の態様によれば、上で説明された技法は規範的であり得る。たとえば、このことは、有効なビットストリーム(たとえば、特定の規格に適合するデコーダによって復号可能なビットストリーム)が、連続する場所に存在しValueモードを使用してコーディングされる、ランがシグナリングされないインデックスを有することを許容されないことを意味する。すなわち、同じインデックス値を有する2つの連続する場所は、Valueモードを使用してコーディングされ得ない。この制約は、ビットストリームに対する規範的な制約として扱われ得る。すなわち、適合するビットストリームは、ランがシグナリングされない同一のインデックス値を有する、Valueモードによってコーディングされるあらゆる2つ以上の連続する画素を含むべきではない。このことは、2014年5月22日に出願された米国仮出願第62/002,054号において記述されるすべての冗長性の除去、ならびに、C. Gisquet他、「AHG10: Palette Index Coding」、JCTVC-Q0064、バレンシア、スペイン、2014年3月27日〜4月4日(JCTVC-Q0064)において記述されるいわゆる不可能なインデックス値の除去の適用を可能にする。
Transition Runモードも使用される場合、Limited Run技法は、Transition Runモードにも拡張され得る。この場合、モードがValueまたはTransition Runであり、パレットインデックス(Valueモードの場合)または推測されたパレットインデックス(Transition Runモードの場合)がインデックス閾値を超える場合、ランはシグナリングされず、同じ規範的なビットストリームの制約が上で説明されたように適用され得る。
本開示の他の態様は、パレットインデックスのランのランレングスを示すラン値をコーディングすることを対象とする。例において、本技法は、Valueモードを使用してコーディングされるインデックスのラン値をコーディングするために使用され得る。
たとえば、いくつかの例では、Valueモードでラン値をコーディングするために、3つのコンテキストコーディングされたフラグが使用され得る。そのような例では、3つのコンテキストコーディングされたフラグは、ラン値が0より大きいかどうかを示す1以上フラグ、ラン値が1より大きいかどうかを示す2以上フラグ、および、ランが2より大きいかどかを示す3以上フラグを含み得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、単一のコンテキストを使用して3つのフラグの各々をコーディングするように構成され得る。
しかしながら、単一のコンテキストを使用すると、ビデオエンコーダ20およびビデオデコーダ30は、フラグの各々をコーディングした後でコンテキストと関連付けられる確率モデルを更新することが必要になり得る。さらに、上の確率更新のプロセスは、コーディングプロセスに遅延をもたらし得る。説明を目的とする例では、3つのビンが、コンテキスト適応コーディングの目的で同じコンテキストモデル(たとえば、ctx(0))を使用する。この例では、第1のビンは、ctx(0)を使用して、コーディングのための確率モデルを決定することができる。第1のビンの値は、ctx(0)と関連付けられる確率モデルに影響を与える。したがって、確率更新は、ctx(0)によって第2のビンをコーディングする前に実行される。追加の確率更新はまた、ctx(0)によって第3のビンをコーディングする前に実行される。このようにして、確率更新は、コーディング周期に遅延をもたらし得る。
その上、ラン値の第1のビン、第2のビン、および第3のビンの間の相関関係は、確率モデルを更新することと関連付けられる時間および計算のリソースを保証するには不十分であり得る。すなわち、コンテキスト適応コーディングの1つの潜在的な利点は、(同じコンテキストのもとで)前にコーディングされたビンに基づいて確率モデルを適合できることである。しかしながら、第1のビンの値が後続のビンの値に対してほとんど関係がない場合、確率更新と関連付けられる効率の向上はほとんどないことがある。したがって、低い相関関係を示すビンは、相対的により高い相関関係を有するビンほどは、コンテキスト適応コーディングによる利益を受けないことがある。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ラン値のインデックスに基づいてラン値をコーディングするためのコンテキストを決定するように構成され得る。加えて、または代替的に、ビデオエンコーダ20およびビデオデコーダ30は、現在コーディングされているブロックのブロックサイズ、または現在コーディングされているブロックに対するパレットのパレットサイズに基づいて、ラン値をコーディングするためのコンテキストを決定するように構成され得る。いくつかの例では、本開示の態様は、複数のコンテキストを使用してラン値をコーディングすることを含む。
一例では、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ラン値をコーディングするために7つのコンテキストを使用するように構成され得る。たとえば、ラン値が0より大きいことを示すフラグをコーディングするために、7つのコンテキストが定義され得る。この例が、以下のTable 1(表1)に示されている。
Table 1(表1)の例は7つのコンテキストを示すが、他の例では、代替的な数のコンテキストが、コーディングされているランのインデックス値に基づいて定義され得る。Table 1(表1)は、MAX_PLT_SIZEシンタックス要素が32であると仮定し得る。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値に基づいてValueモードに対するラン値をコーディングするために、2つのコンテキストを使用するように構成され得る。たとえば、Valueモードインデックス0に対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(0)を使用するように構成され得る。この例では、すべての他のValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(1)を使用するように構成され得る。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値に基づいてValueモードにおけるラン値をコーディングするために、2つのコンテキストを使用するように構成され得る。この例では、Valueインデックス0および1に対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(0)を使用するように構成され得る。1よりも大きなValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(1)を使用するように構成され得る。
さらに別の例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値に基づいてValueモードにおけるラン値をコーディングするために、3つのコンテキストを使用するように構成され得る。たとえば、Valueインデックス0に対して、ビデオエンコーダ20およびビデオデコーダ30は、ランを示すデータをコーディングするために、ランコンテキスト(0)を使用するように構成され得る。1および2というValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ランを示すデータをコーディングするために、ランコンテキスト(1)を使用するように構成され得る。2よりも大きなValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(2)を使用するように構成され得る。
さらに別の例では、3つのコンテキストが、インデックス値に基づいてValueモードにおけるラン値をコーディングするために使用され得る。たとえば、Valueインデックス0および1に対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(0)を使用するように構成され得る。両端を含めて2から5の範囲にあるValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(1)を使用するように構成され得る。5よりも大きなValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(2)を使用するように構成され得る。
別の例では、4つのコンテキストが、インデックス値に応じて(たとえば、基づいて)Valueモードでラン値をコーディングするために使用され得る。たとえば、Valueインデックス0に対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(0)を使用するように構成され得る。Valueインデックス1および2に対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(1)を使用するように構成され得る。両端を含めて3から6の範囲にあるValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を示すデータをコーディングするために、ランコンテキスト(2)を使用するように構成され得る。6よりも大きなValueインデックスに対して、ビデオエンコーダ20およびビデオデコーダ30は、ラン値が使用され得ることを示すデータをコーディングするために、ランコンテキスト(3)を使用するように構成され得る。いくつかの事例では、上の技法の任意の組合せが、コンテキストを決定するために使用され得る。
上で説明された技法は、バイナリ化されたラン値のビンの任意の組合せをコーディングするために使用され得る。たとえば、上で述べられたように、バイナリ化されたラン値は、ラン値が0よりも大きいかどうかを示す第1のビン、ラン値が1よりも大きいかどうかを示す第2のビン、ラン値が2よりも大きいかどうかを示す第3のビン、およびラン値を表すために必要とされる任意の他のビンを含み得る。本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、バイナリ化されたラン値の第1のビン、バイナリ化されたラン値の第2のビン、バイナリ化されたラン値の第3のビン、またはこれらの任意の組合せをコーディングするための、上で定義されたコンテキストを選択するように構成され得る。本技法は、ラン値の他のバイナリ化にも適用され得る。
本開示の態様によれば、コンテキストは、実際のインデックス値または調整されたインデックス値に基づき得る。たとえば、一例では、ランコンテキストは、シンタックスpalette_indexではなくシンタックス要素adjusted_palette_indexに依存してよく、ここでシンタックス要素adjusted_palette_indexは、Wei Pu他、「SCCE3:Test B.12-Binarization of Escape Sample and Palette Index」、JCTVC-R0065、札幌、日本、2014年6月30日〜7月9日(JCTVC-R0065)において記述されるように、次の条件に基づいて調整されたインデックスを示し得る。
(adjusted_palette_index >= adjustedRefIndex)であれば、palette_index = adjusted_palette_index+1
それ以外の場合、(palette_index = adjusted_palette_index)
すなわち、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、調整されたパレットインデックスがビットストリームにおいてシグナリングされる事例において、ブロック中のサンプルをコーディングするために実際に使用されるパレットインデックスではなく、ビットストリームにおいてシグナリングされるパレットインデックス(これはadjusted_palette_indexシンタックス要素と関連付けられ得る)に基づいて、ラン値をコーディングするためのコンテキストを決定するように構成され得る。
別の例では、切捨てバイナリコードがインデックスをコーディングする際に使用される場合、ビデオエンコーダ20およびビデオデコーダ30は、(たとえば、JCTVC-R0065のセクション9.3.3.xにおいてたとえば説明されるように)インデックスシンタックスの最初の「k」個のビットに基づいて、ランコンテキストを選択するように構成され得る。たとえば、切捨てバイナリコードを使用すると、パレットインデックスを表すためのシンタックス要素は、以下で説明されるように(JCTVC-R0065のセクション9.3.3.xにおいて説明されるように)、変数uに対するパレットインデックスの相対的な値に基づいて、kビットまたはk+1ビットを使用することができる。
このプロセスへの入力は、値synVal、cMaxを有するシンタックス要素のためのTBバイナリ化に対する要求である。このプロセスの出力は、シンタックス要素のTBバイナリ化である。
n = cMax + 1とし、2k≦n < 2k+1であるようにk = floor( log2(n) )とし、u = 2k+1 - nとする。
synVal < uである場合、TBビンの列は、長さkのsynValのバイナリ表現によって規定される。
それ以外の場合、TBビンの列は、長さk+1のsynVal+uのバイナリ表現によって規定される。
この例では、ランコンテキストは、最初のk個の復号されたビットだけに依存する。したがって、たとえば、ビデオデコーダ30は、コンテキストを決定する前に、可能性のあるk+1ビットを復号するのを待つ必要がない。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値、現在コーディングされているブロックのパレットのサイズ、および/または現在コーディングされているブロックのサイズに基づいて、複数のコンテキストを使用するように構成され得る。上で説明されたLimited Runモードがブロックをコーディングするために使用される場合、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値、ブロックのサイズ、および/または、それを超えるとランがシグナリングされないインデックス閾値に基づいて、コンテキストを選択するように構成され得る。
Transition Runモードも使用される場合、この技法は、Transition Runモードにも拡張され得る。この場合、Transition Runモードについて、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値、ブロックのサイズ、および/または、それを超えるとランがシグナリングされないインデックス閾値に基づいて、ランをコーディングするためのコンテキストを決定するように構成され得る。この場合、コンテキストの別々のセットが、ValueモードおよびTransition Runモードに対応するランのために使用され得る。
本開示の他の態様は、2つ以上のパレットモードを使用してコーディングされるパレットインデックスのランをコーディングすることに関する。たとえば、JCTVC-Q0094に記述されるCopyFromTopモードでは、エスケープサンプルまたはエスケープフラグとしてコーディングされるサンプルを線から複製することは可能ではない。インデックスの2つの行の一例が以下のTable 2(表2)に示される。
ここで、数値はインデックスを表し、ESCはエスケープサンプルとしてコーディングされるサンプルを表す。この例では、JCTVC-Q0094に従って、上の例の一番左のサンプルから開始して、ビデオエンコーダ20はCopyFromTopモードをシグナリングし得る。ビデオエンコーダ20はまた、エスケープ値またはフラグを複製することが許可されないので、3というラン値をシグナリングし得る。したがって、エスケープサンプルとしてコーディングされるサンプルは、ランを終了させる。
Jianqing Zhu他、「AHG10: Modified Copy Above Mode for Palette Based Coding」、JCTVC-Q0174、バレンシア、スペイン、2014年3月27日〜4月4日(JCTVC-Q0174)という規格提案文書は、ランにおけるエスケープ値(たとえば、実際の画素値)の複製を許容することを記述する。しかしながら、本技法は、エスケープサンプルと関連付けられる値が同一であることを必要とする。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、インデックスのランにおいて2つ以上のパレットモードを示すデータをコーディングするように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、パレット中の関連する色値を有する他のインデックスを伴うエスケープフラグ(明示的エスケープシグナリングの場合)またはエスケープインデックス(暗黙的エスケープシグナリングの場合)を複製するように構成され得る。上のTable 2(表2)の例に関して、ビデオエンコーダ20は、6というラン値を示すデータの前に、CopyFromTopモードをシグナリングするように構成され得る。本技法は、ランのサイズを大きくするという利点を実現することができ、これは、データ圧縮の改善をもたらし得る。
本開示の態様によれば、別の行のインデックスに関連してコーディングされるインデックスのランの間に、ランのサンプルが、エスケープサンプルとしてコーディングされるサンプルのすぐ上に位置するサンプルを有する場合、ビデオエンコーダ20およびビデオデコーダ30は、そのサンプルがエスケープサンプルとしてコーディングされると推測するように構成され得る。この例では、サンプルの実際の値は、ランの後でシグナリングされ得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上の隣接するサンプル(たとえば、コーディングされているサンプルのすぐ上に位置するサンプル)がエスケープサンプルとしてコーディングされる場合、サンプルに対してCopyFromTopモードを使用しないように構成され得る。エスケープサンプルとしてコーディングされるサンプルが、(上で説明されたような)CopyFromTopパレットモードと関連付けられるランに含まれることが許容される事例では、Escapeモードをシグナリングすることと関連付けられる冗長性の一部がなくなり得る。第1の例では、本開示の態様によれば、インデックスのランに後続するサンプルが、エスケープサンプルとしてコーディングされる上側の隣接サンプルを有する場合、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルとして後続のサンプルをコーディングしないように構成され得る。この例では、そのような上側の隣接サンプルを有しなければ、そのサンプルはCopyFromTopランに含まれていたであろうから、そのサンプルはエスケープサンプルとしてコーディングされなくてよい。この例では、ビデオエンコーダ20およびビデオデコーダ30は、サンプルがエスケープサンプルとしてコーディングされないと推測するように構成され得るので、エスケープフラグまたはエスケープインデックスのコーディングをスキップするように構成され得る。
上で説明された例と同じ理由で、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopランの後で、CopyFromTopモードを使用してサンプルをコーディングしないように構成され得る。したがって、ビデオエンコーダ20およびビデオデコーダ30は、モードに関連付けられたシンタックス要素(たとえば、CopyFromTopモードとValueモードを区別するフラグ)のコーディングをスキップするように構成されてよく、ビデオエンコーダ20およびビデオデコーダ30は、サンプルがValueモードでコーディングされると推測するように構成されてよい。
第2の例では、CopyFromTopランに含まれる最後のサンプルがエスケープサンプルであり、後続のサンプルがValueモードによってコーディングされる場合、ビデオエンコーダ20およびビデオデコーダ30は、後続のサンプルの上側の隣接サンプルのインデックス値を確認することによって、Valueモードのインデックス(ならびに、Valueインデックスをコーディングするために切捨てバイナリ化において使用され得る最大の可能性のあるインデックス数)を調整するように構成され得る。この場合、上側の隣接画素があるインデックスを有する場合、ビデオエンコーダ20およびビデオデコーダ30は、インデックスの値が上記のインデックスよりも大きい場合、Valueインデックスを1だけ減らすように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、最大の可能性のあるインデックス数を1だけ減らし、インデックスをコーディングするように構成され得る。再構築段階において、ビデオデコーダ30は、復号されたインデックス値を確認して、インデックスが上側の隣接インデックス以上であるかどうかを決定することができ、そうである場合、復号された値を1だけ増やすことができる。
図2は、本開示の技法を実装し得る1つの例示的なビデオエンコーダ20を示すブロック図である。図2は説明のために提供され、広く例示されるとともに本開示で説明されるような技法の限定と見なされるべきでない。説明を目的に、本開示は、HEVCコーディングの状況においてビデオエンコーダ20を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
ビデオエンコーダ20は、本開示において説明される様々な例によるパレットベースのビデオコーディングのための技法を実行するように構成され得るデバイスの一例を表す。たとえば、ビデオエンコーダ20は、HEVCコーディングにおけるCUまたはPUなどのビデオデータの様々なブロックを、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して選択的にコーディングするように構成され得る。非パレットベースのコーディングモードとは、HEVC Draft 10によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモード、またはイントラ予測空間コーディングモードを指し得る。ビデオエンコーダ20は、一例では、画素値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかの画素位置の画素値を表すためにパレット中の画素値を選択し、ビデオデータのブロック中の画素位置の少なくともいくつかを、パレット中の選択された画素値にそれぞれ対応するパレット中のエントリーと関連付ける情報をシグナリングするように構成され得る。シグナリングされた情報は、ビデオデータを復号するためにビデオデコーダ30によって使用され得る。
図2の例では、ビデオエンコーダ20は、予測処理ユニット100と、ビデオデータメモリ101と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構築ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120およびイントラ予測処理ユニット126を含む。インター予測処理ユニット120は、動き推定ユニットおよび動き補償ユニット(図示せず)を含む。ビデオエンコーダ20はまた、本開示において説明されるパレットベースのコーディング技法の様々な態様を実行するように構成された、パレットベース符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
ビデオデータメモリ101は、ビデオエンコーダ20のコンポーネントによって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ101に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他のコンポーネントとともにオンチップであってよく、または、これらのコンポーネントに対してオフチップであってよい。
ビデオエンコーダ20は、ビデオデータを受信し得る。ビデオエンコーダ20は、ビデオデータのピクチャのスライスの中の各CTUを符号化し得る。CTUの各々は、ピクチャの、等しいサイズのルーマコーディングツリーブロック(CTB)、および対応するCTBと関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、4分木区分を実行して、CTUのCTBを漸次的により小さいブロックへと分割し得る。より小さいブロックは、CUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUと関連付けられるCTBを4つの等しいサイズのサブブロックに区分することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
ビデオエンコーダ20は、CTUのCUを符号化して、CUの符号化された表現(すなわち、コーディングされたCU)を生成し得る。CUを符号化することの一部として、予測処理ユニット100は、CUの1つまたは複数のPUのうちでCUと関連付けられるコーディングブロックを区分し得る。したがって、各PUは、ルーマ予測ブロックおよび対応するクロマ予測ブロックと関連付けられ得る。ビデオエンコーダ20およびビデオデコーダ30は、様々なサイズを有するPUをサポートし得る。上で示されたように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがあり、PUのサイズは、PUのルーマ予測ブロックのサイズを指すことがある。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、イントラ予測に対しては2N×2NまたはN×NのPUサイズをサポートし、およびインター予測に対しては2N×2N、2N×N、N×2N、N×N、またはそれらと同様の対称なPUサイズをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、インター予測に対しては、2N×nU、2N×nD、nL×2N、およびnR×2NのPUサイズのための非対称区分をサポートし得る。
インター予測処理ユニット120は、インター予測をCUの各PUに対して実行することによって、PUに対する予測データを生成し得る。PUに対する予測データは、PUの予測ブロックおよびPUに対する動き情報を含み得る。インター予測ユニット121は、PUがIスライスの中にあるか、Pスライスの中にあるか、またはBスライスの中にあるかに応じて、CUのPUに対して異なる動作を実行し得る。Iスライスでは、すべてのPUがイントラ予測される。したがって、PUがIスライスの中にある場合、インター予測ユニット121は、インター予測をPUに対して実行しない。したがって、Iモードで符号化されるブロックに対して、予測されるブロックは、同じフレーム内で前に符号化された隣接ブロックからの空間予測を使用して形成される。
PUがPスライスの中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUのための参照領域を求めて参照ピクチャのリスト(たとえば、「RefPicList0」)の中の参照ピクチャを検索し得る。PUのための参照領域は、PUのサンプルブロックと最も密接に対応するサンプルブロックを含む、参照ピクチャ内の領域であり得る。動き推定ユニットは、PUのための参照領域を含む参照ピクチャのRefPicList0の中での位置を示す参照インデックスを生成し得る。加えて、動き推定ユニットは、PUのコーディングブロックと、参照領域と関連付けられる参照位置との間の空間変位を示すMVを生成し得る。たとえば、MVは、現在の復号されたピクチャの中の座標から参照ピクチャの中の座標までのオフセットを提供する2次元ベクトルであってよい。動き推定ユニットは、PUの動き情報として参照インデックスおよびMVを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照位置における実際のサンプルまたは補間されたサンプルに基づいて、PUの予測ブロックを生成し得る。
PUがBスライスの中にある場合、動き推定ユニットは、PUに対して単予測または双予測を実行し得る。PUに対して単予測を実行するために、動き推定ユニットは、PUのための参照領域を求めてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを検索し得る。動き推定ユニットは、PUの動き情報として、参照領域を含む参照ピクチャのRefPicList0またはRefPicList1の中での位置を示す参照インデックス、PUの予測ブロックと、参照領域と関連付けられた参照位置との間の空間変位を示すMV、および参照ピクチャがRefPicList0の中にあるか、またはRefPicList1の中にあるかを示す1つまたは複数の予測方向インジケータを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
PUに対して双方向インター予測を実行するために、動き推定ユニットは、PUに対する参照領域を求めてRefPicList0の中の参照ピクチャを検索することができ、また、PUに対する別の参照領域を求めてRefPicList1の中の参照ピクチャを検索することができる。動き推定ユニットは、参照領域を含む参照ピクチャのRefPicList0およびRefPicList1の中での位置を示す参照ピクチャインデックスを生成し得る。加えて、動き推定ユニットは、参照領域と関連付けられた参照位置とPUのサンプルブロックとの間の空間変位を示すMVを生成し得る。PUの動き情報は、PUの参照インデックスおよびMVを含み得る。動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースのコーディングを実行するように構成され得る。HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUモードの状況において(本開示全体で)ここで説明される、開示されるプロセスのすべてが、追加でまたは代替的に、PUに適用され得る。しかしながら、そのような技法は、独立に機能するように、または他の既存の、もしくはこれから開発されるシステム/規格の一部として機能するように適用され得るので、これらのHEVCベースの例は、本明細書において説明されるパレットベースのコーディング技法の制約または限定と見なされるべきでない。これらの場合、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、または非矩形の形状の領域でさえあり得る。
たとえば、パレットベース符号化ユニット122は、パレットベースの符号化モードがたとえばCUまたはPUに対して選択されるとき、パレットベースの符号化を実行することができる。たとえば、パレットベース符号化ユニット122は、画素値を示すエントリーを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの場所の画素値を表すためにパレット中の画素値を選択し、ビデオデータのブロックの場所の少なくともいくつかを、選択された画素値にそれぞれ対応するパレット中のエントリーと関連付ける情報をシグナリングするように構成され得る。様々な機能がパレットベース符号化ユニット122によって実行されるものとして説明されるが、そのような機能の一部またはすべては、他の処理ユニット、または様々な処理ユニットの組合せによって実行され得る。
本開示の態様によれば、パレットベース符号化ユニット122は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。たとえば、以下の図4〜図7に関して説明されるように、本開示の態様によれば、パレットベース符号化ユニット122は、別の線の1つまたは複数のブロックに基づいて、ビデオデータのブロックに対するパレットを構築するための予測子パレットを再初期化するように構成され得る。たとえば、本明細書で説明されるように、パレットベース符号化ユニット122は、ブロックの第1の行に位置するビデオデータの第1のブロックに対する第1のパレットを決定することができる。パレットベース符号化ユニット122はまた、第1の行の中の1つまたは複数の他のブロックを符号化するとき、予測子パレットを生成することができる。第2の行の中のブロックをコーディングすると、パレットベース符号化ユニット122は、第1のパレットのエントリーに基づいて第2の行の中のブロックのパレットを決定するための予測子パレットを再初期化することができる。
別の例では、パレットベース符号化ユニット122は、2つ以上のパレットモードを使用してコーディングされるサンプルを含む、インデックスのランを符号化するように構成され得る。たとえば、パレットベース符号化ユニット122は、ビデオデータのブロックの第1の行のパレットインデックスを決定することができ、ここでパレットインデックスは、パレット中の色値と関連付けられる1つまたは複数のインデックスと、パレット中の色値と関連付けられないシンタックス要素とを含む。パレットベース符号化ユニット122はまた、第1の行のパレットインデックスに関連してビデオデータのブロックの第2の行のパレットインデックスのランを符号化することができ、ここでランは、パレット中の色値と関連付けられる1つまたは複数のインデックスと、パレット中の色値と関連付けられないシンタックス要素とを含む。
イントラ予測処理ユニット126は、イントラ予測をPUに対して実行することによって、PUに対する予測データを生成し得る。PUに対する予測データは、PUに対する予測ブロックおよび様々なシンタックス要素を含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対して、イントラ予測を実行し得る。
イントラ予測をPUに対して実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUに対する予測データの複数のセットを生成し得る。イントラ予測処理ユニット126は、隣接PUのサンプルブロックからのサンプルを使用して、PUに対する予測ブロックを生成し得る。PU、CU、およびCTUに対して、左から右、上から下への符号化順序を仮定すると、隣接PUは、PUの上、右上、左上、または左であり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば、33個の方向性イントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUと関連付けられる領域のサイズに依存し得る。
予測処理ユニット100は、PUに対してインター予測処理ユニット120によって生成される予測データ、またはPUに対してイントラ予測処理ユニット126によって生成される予測データの中から、CUのPUに対する予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみの尺度に基づいて、CUのPUに対する予測データを選択する。選択される予測データの予測ブロックは、選択予測ブロックと本明細書で呼ばれることがある。
残差生成ユニット102は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック、ならびに、CUのPUの選択された予測ルーマブロック、予測Cbブロック、および予測Crブロックに基づいて、CUのルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロックを生成し得る。たとえば、残差生成ユニット102は、残差ブロックの中の各サンプルがCUのコーディングブロックの中のサンプルとCUのPUの対応する選択された予測ブロックの中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
変換処理ユニット104は、4分木区分を実行して、CUと関連付けられた残差ブロックをCUのTUと関連付けられた変換ブロックに区分し得る。したがって、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックと関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび場所は、CUのPUの予測ブロックのサイズおよび場所に基づいてもよく、基づかなくてもよい。「残差4分木」(RQT)として知られている4分木構造が、領域の各々と関連付けられるノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
変換処理ユニット104は、1つまたは複数の変換をTUの変換ブロックに適用することによって、CUの各TUに対する変換係数ブロックを生成し得る。変換処理ユニット104は、TUと関連付けられたブロックを変換するために、様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に類似の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは変換係数ブロックとして扱われてよい。
量子化ユニット106は、係数ブロックの中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部またはすべてと関連付けられるビット深度を低減し得る。たとえば、nビットの変換係数が、量子化の間にmビットの変換係数へと丸められてよく、ここでnはmよりも大きい。量子化ユニット106は、CUと関連付けられる量子化パラメータ(QP)値に基づいて、CUのTUと関連付けられる係数ブロックを量子化し得る。ビデオエンコーダ20は、CUと関連付けられるQP値を調整することによって、CUと関連付けられる係数ブロックに適用される量子化の程度を調整し得る。量子化が情報の損失をもたらすことがあり、したがって、量子化された変換係数の精度は元の精度よりも低いことがある。
逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、逆量子化および逆変換を係数ブロックに適用して、係数ブロックから残差ブロックを再構築し得る。再構築ユニット112は、予測処理ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに、再構築された残差ブロックを加算して、TUと関連付けられる再構築された変換ブロックを生成し得る。このようにしてCUのTUごとに変換ブロックを再構築することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構築し得る。
フィルタユニット114は、1つまたは複数のデブロッキング動作を実行して、CUと関連付けられるコーディングブロックにおけるブロッキングアーティファクトを低減し得る。フィルタユニット114が1つまたは複数のデブロッキング動作を再構築されたコーディングブロックに対して実行した後、復号ピクチャバッファ116は、再構築されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、インター予測を他のピクチャのPUに対して実行するために、再構築されたコーディングブロックを含む参照ピクチャを使用し得る。加えて、イントラ予測処理ユニット126は、CUと同じピクチャの中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ116の中の再構築されたコーディングブロックを使用し得る。
エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能コンポーネントからデータを受信し得る。たとえば、エントロピー符号化ユニット118は、係数ブロックを量子化ユニット106から受信することができ、シンタックス要素を予測処理ユニット100から受信することができる。エントロピー符号化ユニット118は、エントロピー符号化されたデータを生成するために、1つまたは複数のエントロピー符号化動作をデータに対して実行し得る。たとえば、エントロピー符号化ユニット118は、コンテキスト適応型可変長コーディング(CAVLC)動作、CABAC動作、可変長-可変長(V2V)コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作を、データに対して実行し得る。
CABACを実行するために、エントロピー符号化ユニット118は、送信されるべきシンボルを符号化するために、あるコンテキストに適用すべきコンテキストモデルを選択し得る。本開示の態様によれば、エントロピー符号化ユニット118は、コーディングされるラン値のインデックス値に基づいて、コンテキストを使用するように構成され得る。たとえば、エントロピー符号化ユニット118は、ビデオデータのブロックのパレットインデックスのランのランレングスを示すラン値を決定するように構成され得る。エントロピー符号化ユニット118は、パレットインデックス値に基づいてラン値を表すデータをコンテキスト適応コーディングするためのコンテキストを決定するように構成され得る。
ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成された、エントロピー符号化されたデータを含むビットストリームを出力し得る。たとえば、ビットストリームは、CUに対するRQTを表すデータを含み得る。
図3は、本開示の技法を実施するように構成される例示的なビデオデコーダ30を示すブロック図である。図3は説明のために提供され、広く例示されるとともに本開示で説明されるような技法を限定するものではない。説明を目的に、本開示は、HEVCコーディングの状況においてビデオデコーダ30を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
ビデオエンコーダ30は、本開示において説明される様々な例によるパレットベースのビデオコーディングのための技法を実行するように構成され得るデバイスの一例を表す。たとえば、ビデオエンコーダ30は、HEVCコーディングにおけるCUまたはPUなどのビデオデータの様々なブロックを、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して選択的に復号するように構成され得る。非パレットベースのコーディングモードとは、HEVC Draft 10によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモード、またはイントラ予測空間コーディングモードを指し得る。ビデオデコーダ30は、一例では、画素値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかの画素位置をパレット中のエントリーと関連付ける情報を受信し、この情報に基づいてパレット中の画素値を選択し、パレット中の選択された画素値に基づいてブロックの画素値を再構築するように構成され得る。
図3の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、ビデオデータメモリ151と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構築ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164およびイントラ予測処理ユニット166を含む。ビデオデコーダ30はまた、本開示において説明されるパレットベースのコーディング技法の様々な態様を実行するように構成されたパレットベース復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能のコンポーネントを含み得る。
ビデオデータメモリ151は、ビデオデコーダ30のコンポーネントによって復号されるべき、符号化されたビデオビットストリームのようなビデオデータを記憶し得る。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線ネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他のコンポーネントとともにオンチップであってよく、または、これらのコンポーネントに対してオフチップであってよい。
コーディングピクチャバッファ(CPB)は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受信および記憶し得る。エントロピー復号ユニット150は、符号化されたビデオデータ(たとえば、NALユニット)をCPBから受信するとともにNALユニットを構文解析して、シンタックス要素を復号し得る。エントロピー復号ユニット150は、NALユニットの中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。
本開示の態様によれば、エントロピー復号ユニット150は、コーディングされるラン値のインデックス値に基づいて、コンテキストを使用するように構成され得る。たとえば、エントロピー復号ユニット150は、ビデオデータのブロックのパレットインデックスのランのランレングスを示すラン値を決定するように構成され得る。エントロピー復号ユニット150は、パレットインデックス値に基づいてラン値を表すデータをコンテキスト適応コーディングするためのコンテキストを決定するように構成され得る。
予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。
ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、シンタックス要素をコーディングされたスライスNALユニットから抽出し、エントロピー復号し得る。コーディングされたスライスの各々は、スライスヘッダおよびスライスデータを含み得る。スライスヘッダは、スライスに関係しているシンタックス要素を含み得る。スライスヘッダの中のシンタックス要素は、スライスを含むピクチャと関連付けられたPPSを識別するシンタックス要素を含み得る。
シンタックス要素をビットストリームから復号することに加えて、ビデオデコーダ30は、区分されていないCUに対して再構築動作を実行し得る。区分されていないCUに対して再構築動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実行し得る。CUの各TUに対して再構築動作を実行することによって、ビデオデコーダ30は、CUの残差ブロックを再構築し得る。
CUのTUに対して再構築動作を実行することの一部として、逆量子化ユニット154は、TUと関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化ユニット154は、逆量子化ユニット154が適用するべき量子化の程度と、同様に逆量子化の程度とを決定するために、TUのCUと関連付けられるQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスおよび圧縮されたシーケンスを表すために使用されるビット数の比が、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、採用されるエントロピーコーディングの方法に依存し得る。
逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUと関連付けられた残差ブロックを生成するために、1つまたは複数の逆変換を係数ブロックに適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
PUがイントラ予測を使用して符号化される場合、イントラ予測処理ユニット166は、イントラ予測を実行して、PUに対する予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するPUの予測ブロックに基づいて、PUに対する予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUに対するイントラ予測モードを決定し得る。
予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を構築し得る。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PUに対する動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUに対する1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUに対する1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUに対する予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
再構築ユニット158は、CUのTUと関連付けられたルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック、ならびに、CUのPUの予測ルーマブロック、予測Cbブロック、および予測Crブロック、すなわち、イントラ予測データまたはインター予測データのいずれかを適宜使用して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを再構築し得る。たとえば、再構築ユニット158は、予測ルーマブロック、予測Cbブロック、および予測Crブロックの対応するサンプルに、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックのサンプルを加算して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを再構築し得る。
フィルタユニット160は、デブロッキング動作を実行して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックと関連付けられるブロッキングアーティファクトを低減し得る。ビデオデコーダ30は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、その後の動き補償、イントラ予測、および図1のディスプレイデバイス32のようなディスプレイデバイス上での提示のために、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162の中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
上で述べられたように、ビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。パレットベース復号ユニット165は、たとえば、パレットベースの復号モードがたとえばCUまたはPUに対して選択されるとき、パレットベースの復号を実行することができる。たとえば、パレットベース復号ユニット165は、画素値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかの画素位置をパレット中のエントリーと関連付ける情報を受信し、この情報に基づいてパレット中の画素値を選択し、パレット中の選択された画素値に基づいてブロックの画素値を再構築するように構成され得る。様々な機能がパレットベース復号ユニット165によって実行されるものとして説明されるが、そのような機能の一部またはすべては、他の処理ユニット、または様々な処理ユニットの組合せによって実行され得る。
パレットベース復号ユニット165は、パレットコーディングモード情報を受信し、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上の動作を実行することができる。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または、異なるモードの使用を他のモード情報が示すとき、パレットベース復号ユニット165は、たとえば、HEVCインター予測コーディングモードまたはイントラ予測コーディングモードのような、非パレットベースのコーディングモードを使用してビデオデータのブロックを復号する。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。
本開示の態様によれば、パレットベース復号ユニット165は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。たとえば、以下の図4〜図7に関して説明されるように、本開示の態様によれば、パレットベース復号ユニット165は、別の線の1つまたは複数のブロックに基づいて、ビデオデータのブロックに対するパレットを構築するための予測子パレットを再初期化するように構成され得る。たとえば、本明細書で説明されるように、パレットベース復号ユニット165は、ブロックの第1の行に位置するビデオデータの第1のブロックに対する第1のパレットを決定することができる。パレットベース復号ユニット165はまた、第1の行の中の1つまたは複数の他のブロックを復号するとき、予測子パレットを生成することができる。第2の行の中のブロックをコーディングするとき、パレットベース復号ユニット165は、第1のパレットのエントリーに基づいて第2の行の中のブロックのパレットを決定するための予測子パレットを再初期化することができる。
別の例では、以下で図8に関して説明されるように、パレットベース復号ユニット165は、2つ以上のパレットモードを使用してコーディングされるサンプルを含む、インデックスのランを復号するように構成され得る。たとえば、パレットベース復号ユニット165は、ビデオデータのブロックの第1の行のパレットインデックスを決定することができ、ここでパレットインデックスは、パレット中の色値と関連付けられる1つまたは複数のインデックスと、パレット中の色値と関連付けられないシンタックス要素とを含む。パレットベース復号ユニット165はまた、第1の行のパレットインデックスに関連してビデオデータのブロックの第2の行のパレットインデックスのランを復号することができ、ここでランは、パレット中の色値と関連付けられる1つまたは複数のインデックスと、パレット中の色値と関連付けられないシンタックス要素とを含む。
図4は、本開示の技法に従った、ビデオデータをコーディングするためのパレットを決定することの例を示す概念図である。図4の例は、第1のパレット184と関連付けられた第1のコーディングユニット(CU)180と、第2のパレット192と関連付けられた第2のCU188とを有する、ピクチャ178を含む。以下でより詳細に説明されるように、本開示の技法によれば、第2のパレット192は第1のパレット184に基づく。ピクチャ178はまた、イントラ予測コーディングモードによってコーディングされたブロック196、およびインター予測コーディングモードによってコーディングされたブロック200を含む。
図4の技法は、説明を目的に、ビデオエンコーダ20(図1および図2)およびビデオデコーダ30(図1および図3)の状況において、HEVCビデオコーディング規格に関して説明される。しかしながら、本開示の技法はこのように限定されず、他のビデオコーディングプロセッサおよび/またはデバイスによって、他のビデオコーディングプロセスおよび/または規格において適用され得ることを理解されたい。
一般に、パレットは、現在コーディングされているCU、図4の例ではCU188にとって支配的および/または代表的ないくつかの画素値を指す。第1のパレット184および第2のパレット192は、複数のパレットを含むように示される。いくつかの例では、本開示の態様によれば、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ30のような)は、パレットをCUの各色成分に対して別々にコーディングし得る。たとえば、ビデオエンコーダ20は、CUのルーマ(Y)成分のためのパレット、CUのクロマ(U)成分のための別のパレット、およびCUのクロマ(V)成分のためのさらに別のパレットを符号化し得る。この例では、YパレットのエントリーがCUの画素のY値を表すことができ、UパレットのエントリーがCUの画素のU値を表すことができ、VパレットのエントリーがCUの画素のV値を表すことができる。
他の例では、ビデオエンコーダ20は、CUのすべての色成分に対して単一のパレットを符号化し得る。この例では、ビデオエンコーダ20は、Yi、Ui、およびViを含む3値である、i番目のエントリーを有するパレットを符号化し得る。この場合、パレットは、画素の成分の各々に対する値を含む。したがって、複数の個々のパレットを有するパレットのセットとしてのパレット184および192の表現は、一例にすぎず、限定は意図されない。
図4の例では、第1のパレット184は、それぞれ、エントリーインデックス値1、エントリーインデックス値2、およびエントリーインデックス値3を有する、3つのエントリー202〜206を含む。エントリー202〜206は、インデックス値を、それぞれ、画素値A、画素値B、および画素値Cを含む画素値と関連付ける。本明細書において説明されるように、第1のCU180の実際の画素値をコーディングするのではなく、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ30のような)は、インデックス1〜3を使用してブロックの画素をコーディングするために、パレットベースのコーディングを使用し得る。すなわち、第1のCU180の各画素位置に対して、ビデオエンコーダ20は、画素に対するインデックス値を符号化することができ、ここで、インデックス値は、第1のパレット184の1つまたは複数の中の画素値と関連付けられる。ビデオデコーダ30は、インデックス値をビットストリームから取得することができ、インデックス値および第1のパレット184の1つまたは複数を使用して、画素値を再構築することができる。したがって、パレットベースの復号の際にビデオデコーダ30によって使用するために、第1のパレット184が、ビデオエンコーダ20によって符号化されたビデオデータビットストリームの中で送信される。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、第1のパレット184に基づいて第2のパレット192を決定し得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、予測パレット、この例では、第1のパレット184が決定される際に元となる1つまたは複数のブロックの位置を特定し得る。予測の目的で使用されているエントリーの組合せは、予測子パレットと呼ばれ得る。
図4の例では、第2のパレット192は、それぞれ、エントリーインデックス値1、エントリーインデックス値2、およびエントリーインデックス値3を有する、3つのエントリー208〜212を含む。エントリー208〜212は、インデックス値を、それぞれ、画素値A、画素値B、および画素値Dを含む画素値と関連付ける。この例では、ビデオエンコーダ20は、第1のパレット184(予測子パレットを表す、ただし予測子パレットはいくつかのブロックのエントリーを含み得る)のどのエントリーが第2のパレット192の中に含まれるかを示す1つまたは複数のシンタックス要素をコーディングし得る。
図4の例では、1つまたは複数のシンタックス要素が、ベクトル216として示される。ベクトル216は、いくつかの関連付けられたビン(または、ビット)を有し、各ビンは、そのビンと関連付けられた予測子パレットが現在のパレットのエントリーを予測するために使用されるかどうかを示す。たとえば、ベクトル216は、第1のパレット184の最初の2つのエントリー(202および204)が第2のパレット192の中に含まれることを示し(ベクトル216の中の「1」の値)、第1のパレット184の第3のエントリーは、第2のパレット192の中に含まれない(ベクトル216の中の「0」の値)。図4の例では、ベクトルはブールベクトルである。ベクトルは、パレット予測ベクトルと呼ばれ得る。
いくつかの例では、上で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、パレット予測を実行するとき、予測子パレット(予測子パレットテーブルまたは予測子パレットリストと呼ばれることもある)を決定し得る。予測子パレットは、現在のブロックをコーディングするためのパレットの1つまたは複数のエントリーを予測するために使用される、1つまたは複数の隣接ブロックのパレットからのエントリーを含み得る。ビデオエンコーダ20およびビデオデコーダ30は、同じ方式でリストを構築し得る。ビデオエンコーダ20およびビデオデコーダ30は、予測子パレットのどのエントリーが現在のブロックをコーディングするためのパレットに複製されるべきであるのかを示すためのデータ(ベクトル216のような)をコーディングし得る。
本開示の態様によれば、予測子パレット(ベクトル216と関連付けられる予測子パレットのような)は、ピクチャ中のいくつかのブロックおよび/またはビデオデータのタイルと関連付けられるパレットを生成するために再初期化され得る。たとえば、以下の図5〜図7の例に関してより詳細に説明されるように、第1の線の中のビデオデータのブロックに対するパレットを構築するための予測子パレットは、別の線の1つまたは複数のブロックに基づいて再初期化され得る。一例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロックの第1の行に位置するビデオデータの第1のブロックに対する第1のパレットを決定することができる。ビデオエンコーダ20およびビデオデコーダ30はまた、第1の行の中の1つまたは複数の他のブロックをコーディングするとき、予測子パレットを生成することができる。第2の行の中のブロックをコーディングするとき、ビデオエンコーダ20およびビデオデコーダ30は、第1のパレットのエントリーに基づいて第2の行の中のブロックのパレットを決定するための予測子パレットを再初期化することができる。
図5は、High Efficiency Video Coding(HEVC)規格に従った例示的なタイルを示す概念図である。HEVCは、タイルおよびWavefront parallel processing(WPP)を含めて、コーデックをより並列処理に適したものにするためのいくつかの提案を含んでいる。HEVC WD10は、タイルのCTBラスター走査において連続的に並べられる、1つの列および1つの行において同時に発生する整数個のCTBとして、タイルを定義する。タイルへの各ピクチャの分割は、区分と呼ばれ得る。ピクチャ中のタイルは、図5に示されるように、ピクチャのラスター走査において連続的に並べられる。
たとえば、図5は、複数のタイル222A、222B、222C、222D、222E、222F、222G、222H、および222I(総称的に「タイル222」)へと区分されるピクチャ220に対する例示的なCTBコーディング順序を示し、タイルの境界は太線によって示されている。ピクチャ220中の各々の正方形のブロックは、CTBと関連付けられる画素ブロックを表す。画素ブロック中の数字は、ピクチャ220に対するタイルコーディング順序での対応するCTB(たとえば、LCU)の場所を示す。
図5の例に示されるように、タイル222Aの中のCTBが最初にコーディングされ、それに続いてタイル222Bの中のCTB、それに続いてタイル222Cの中のCTB、それに続いてタイル222Dの中のCTB、それに続いてタイル222Eの中のCTB、それに続いてタイル222Fの中のCTB、それに続いてタイル222Gの中のCTB、それに続いてタイル222Hの中のCTB、それに続いてタイル222Iの中のCTBがコーディングされる。タイル222を処理する順序は全般に、タイル222に含まれる数字によって示されている。タイル222の各々の中で、CTBはラスター走査順序に従ってコーディングされる。
タイルの数およびタイルの境界の位置は、シーケンス全体に対して定義されてよく、またはピクチャごとに変更されてよい。スライスの境界と同様に、タイルの境界は、タイルが独立に処理され得るように、構文解析と予測の依存関係を壊す。しかしながら、いくつかの事例では、ループ内フィルタ(たとえば、デブロッキングフィルタおよびサンプル適応オフセット(SAO)フィルタ)は依然としてタイルの境界にまたがり得る。
タイルを使用することで並列性を高めることができ、それは、エントロピー復号および動き補償の再構築のために、複数のプロセッサまたはプロセッサコアの間に通信が必要とされない(または比較的少量の)通信しか必要とされないからである。加えて、タイルは、スライスと比較すると相対的に良好なコーディング効率を示すことがあり、それは、タイルが、スライスよりも潜在的に高い相関関係を有するサンプルを含むピクチャ区分形状を可能にするからである。タイルは、スライスヘッダのオーバーヘッドを低減することもできる。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、あるCTBのパレットを別のCTBのパレットに基づいて決定するための予測子パレットを再初期化することができる。説明を目的とする例では、ビデオエンコーダ20およびビデオデコーダ30は、各々のCTBの線の最初において現在のCTBの現在のパレットを決定するための予測子パレットを再初期化するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、現在のCTBの上にあるCTBの線の第1のCTBからのパレットエントリーを使用して、予測子パレットを再初期化することができる。
説明を目的とする例では、パレットベースのコーディングを使用して(タイル222Aの)CTB(4)をコーディングした後で、ビデオエンコーダ20およびビデオデコーダ30は、(タイル222Aの)CTB(5)のパレットを決定するための予測子パレットを生成するように構成され得る。加えて、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングモードを使用してCTB(5)、CTB(6)、およびCTB(7)の各々をコーディングした後で、予測子パレットを更新するように構成され得る。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、CTB(5)、CTB(6)、およびCTB(7)の各々をコーディングした後で、予測子パレットの1つまたは複数のエントリーを置換または追加することができる。
本開示の態様によれば、(ラスター走査順序を仮定すると)CTB(4)を含むCTBの線の下にあるCTBの線のCTB(8)をコーディングするとき、ビデオエンコーダ20は、CTB(8)をコーディングするためのパレットを生成する前に、予測子パレットを再初期化することができる。たとえば、CTB(7)に基づいて前に更新されたような予測子パレットを使用するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、上側の隣接するCTBの行、すなわちCTB(4)の第1のCTBと関連付けられるパレットのエントリーに基づいて、予測子パレットを再初期化することができる。このようにして、CTB(8)に対するパレットを生成するための予測子パレットは、CTB(8)において使用されるものと同様の色を有する可能性がより高いことがあり、それは、CTB(4)がCTB(7)よりもCTB(8)に空間的により近く位置するからである。
上で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、上側の隣接するCTBの行、すなわちCTB(4)の第1のCTBのパレットのエントリーに基づいて、予測子パレットを再初期化することができる。いくつかの例によれば、ビデオエンコーダ20およびビデオデコーダ30は、予測子パレットのエントリーを、CTB(4)をコーディングするために使用されるパレットからのエントリーで置き換えることによって、CTB(8)に対する予測子パレット(たとえば、CTB(8)のサンプルをコーディングするためのパレットを生成するために使用される予測子パレット)を再初期化するように構成され得る。
別の例では、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、CTB(4)のパレットからのエントリーを含むCTB(4)と関連付けられる予測子パレットに基づいて、予測子パレットを再初期化するように構成され得る。たとえば、上で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、CTB(4)をコーディングした後で予測子パレットを生成する(または、前に生成された予測子パレットを更新する)ことができる。ビデオエンコーダ20およびビデオデコーダ30は、生成または更新された予測子パレットに、CTB(4)からのエントリーを含め得る。この場合、ビデオエンコーダ20およびビデオデコーダ30は、CTB(4)をコーディングした後で、かつCTB(5)をコーディングする前に、予測子パレットのエントリーに基づいて予測子パレットを再初期化することができる。この例では、ビデオエンコーダ20およびビデオデコーダ30は、CTB(4)のコーディングを終了した後で、かつCTB(5)をコーディングする前に、CTB(8)の予測子パレットを再初期化するように構成され得る。
上の例はCTB(4)およびCTB(5)に関して説明されるが、ビデオエンコーダ20およびビデオデコーダ30は、同様の方式で一般化された技法を適用するように構成され得る。たとえば、CTB(8)に対する予測子パレットを再初期化する例に関して、ビデオエンコーダ20およびビデオデコーダ30は、CTB(8)の上にあるCTBの線(たとえば、CTB(4)を含む、CTBの上側の隣接する線)のN個のCTBをコーディングした後で、予測子パレットを生成および/または更新するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、生成された(または更新された)予測子パレットに基づいて、かつ、CTB(4)の上にあるCTBの線の中のN+1番目のCTBをコーディングし始める前に、CTB(8)に対して予測子パレットを再初期化するように構成され得る。したがって、いくつかの例では、再初期化のために使用される予測子パレットは、CTB(4)に対するパレットのエントリーとは異なる(またはそれに加わる)エントリーを含み得る。
一例では、CTB(4)について上で説明されたプロセスは、代わりに、CTB(5)に対して実行され得る。たとえば、CTB(5)の後で生成される予測子パレットは、代わりに、上の例ではCTB(4)の代わりに使用され得る。この場合、パレット再初期化プロセスのために使用されるCTBは、波面に対して適用されるCABACコンテキスト初期化プロセスのために使用されるものと同じCTBであってよく、これは、パレットの再初期化をコンテキスト初期化プロセスと調和させる可能性がある。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、(上から下へのラスター走査を仮定すると)ピクチャまたはタイルの一番上の線の中に位置する初期CTBに対して予測子パレットを再初期化しないように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、(タイル222Aの)CTB(0)に対する予測子パレットを再初期化しないように構成されてよく、それは、CTB(0)の上に位置するCTBがないからである。
図5の例は説明を目的にCTBに関して説明されるが、本技法はビデオデータの任意のタイプのブロックに拡張され得ることを理解されたい。
図6は、wavefront parallel processing(WPP)のための波面を示す概念図である。HEVCはWPP技法を定義する。WPPが有効にされるとき、ピクチャの各CTUの行は、分離された区分である。しかしながら、スライスおよびタイルと比較すると、CTUの行の境界においてコーディングの依存関係が壊されない。加えて、CABAC確率が、コーディング損失をさらに減らすために、前の行の第2のCTUから伝播される。また、WPPは通常のラスター走査順序を変更しない。依存関係が壊されないので、WPPビットストリームのレートひずみ損失は、非並列ビットストリームと比較して小さい。
WPPが有効にされるとき、最大でCTUの行の数までのある数のプロセッサが、CTUの行(または線)を処理するために並列に動作し得る。しかしながら、波面の依存関係により、すべてのCTU行がピクチャの最初において復号を開始することは可能ではない。結果として、CTUの行は、ピクチャの終わりにおいて同時に復号を終了することもできない。このことは並列化の非効率性をもたらし、これは多数のプロセッサが使用されるときにより明白になる。図6は、WPPがCTBの行をどのように並列に処理するかを示し、各行は、上の行の第2のCTBを処理した後で利用可能になるCABAC確率とともに開始する。
本開示の態様によれば、以下でより詳細に説明されるように、ビデオエンコーダ20およびビデオデコーダ30は、図6に示される波面に基づいて、予測子パレットをリセットするかどうかを決定することができる。
図7は、本開示の技法に従った、複数のタイルおよび波面の存在下でリセットされる予測子パレットの例を示す概念図である。図7の例では、相対的に太い線が、タイル230のタイルの境界のようなタイルの境界を示し得る。破線はCTBの境界を示す。たとえば、CTBの行232は、タイル230の上から2つのCTBを含むCTBのタイルの行を示す。
本開示のいくつかの技法は、ピクチャ234のようなピクチャをコーディングするために使用されている波面の数および/またはタイルの数に基づいて、予測子パレットをリセットすることを含む。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、複数の波面および複数のタイル(図5および図6にそれぞれ示されるタイルおよび波面のような)がピクチャ234をコーディングするために使用されるとき、第1のタイルCTB(タイル230の一番左上のCTBのような)に対する予測子パレットをリセットすることができる。図7の例では、CTB内に含まれる実線の円は、パレットのリセットが実行されるタイルの第1のタイルCTBを示す。ビデオエンコーダ20およびビデオデコーダ30は、予測子パレットサイズを0に設定し、現在のブロックをコーディングするために使用されているパレットのいずれのパレットエントリーも予測しないことによって、パレットをリセットすることができる。
図8は、本開示の技法に従った、画素のブロックのためのパレットに対するインデックスを決定する例を示す概念図である。たとえば、図5は、インデックス値と関連付けられる画素のそれぞれの場所をパレット244のエントリーと関連付けるインデックスのマップ240を含む。たとえば、インデックス1は値Aと関連付けられ、インデックス2は値Bと関連付けられ、インデックス3は値Cと関連付けられる。加えて、暗黙的エスケープシグナリングを使用してエスケープサンプルが示されるとき、ビデオエンコーダ20およびビデオデコーダ30はまた、インデックス4と関連付けられるマップ240のサンプルがエスケープサンプルであることを示し得る、インデックス4として図5において示される追加のインデックスをパレット244に追加することができる。この場合、ビデオエンコーダ20は、画素値がパレット244に含まれない場合、マップ240における場所に対する実際の画素値(またはその量子化されたバージョン)を示すものを符号化する(かつ、ビデオデコーダ30がそれを符号化されたビットストリームから取得する)ことができる。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、どの画素の場所がインデックス値と関連付けられるかを示す追加のマップをコーディングするように構成され得る。たとえば、マップ中の(i, j)のエントリーがCUの(i, j)の場所に対応し得ると仮定する。ビデオエンコーダ20は、エントリーが関連するインデックス値を有するかどうかを示すマップの各エントリー(すなわち、各ピクセルの場所)に対する1つまたは複数のシンタックス要素を符号化することができる。たとえば、ビデオエンコーダ20は、CUの中の(i, j)の位置における画素値がパレット244の中の値の1つであることを示すために、1という値を有するフラグを符号化することができる。
ビデオエンコーダ20はまた、そのような例では、パレット中のその画素値を示すために、かつ、ビデオデコーダがその画素値を再構築することを可能にするために、パレットインデックス(値1〜3として図8の例では示される)を符号化することができる。パレット244が単一のエントリーおよび関連する画素値を含む事例では、ビデオエンコーダ20は、インデックス値のシグナリングをスキップすることができる。ビデオエンコーダ20は、CUの中の(i, j)の位置における画素値がパレット244の中の値の1つではないことを示すために、0という値を有するようにフラグを符号化することができる。この例では、ビデオエンコーダ20はまた、画素値を再構築する際にビデオデコーダ30によって使用するために、画素値を示すものを符号化することができる。いくつかの事例では、画素値は、有損失の方式でコーディングされ得る。
CUの1つの場所の中の画素の値は、CUの他の場所の中の1つまたは複数の他の画素の値の指示を与え得る。たとえば、CUの隣接する画素の場所が同じ画素値を有する確率、または、(2つ以上の画素値が単一のインデックス値にマッピングされ得る、有損失のコーディングの場合において)CUの隣接する画素の場所が同じインデックス値にマッピングされ得る確率は、比較的高いことがある。したがって、ビデオエンコーダ20は、同じインデックスを有する所与の走査順序でのいくつかの連続するインデックス値を示す1つまたは複数のシンタックス要素を符号化することができる。上で述べられたように、この方式でインデックスをコーディングすることは、Valueパレットモードと呼ばれ得る。
上で述べられたように、ランは、CopyFromTopモードまたはValueモードとともに使用され得る。説明を目的とする例では、マップ240の行264および268を考える。水平方向の左から右への走査方向を仮定すると、行264は、「1」という3つのインデックス値、「2」という2つのインデックス値、および「3」という3つのインデックス値を含む。行268は、「1」という5つのインデックス値、「3」という2つのインデックス値、および、エスケープサンプルと呼ばれ得るパレット244に含まれない1つのサンプル(インデックス4によって表されるが、サンプルレベルのエスケープフラグが明示的エスケープシグナリングのために使用され得る)を含む。
この例では、ビデオエンコーダ20は、CopyFromTopモードを使用して行268に対するデータを符号化することができる。たとえば、ビデオエンコーダ20は、行268の第1の場所(行268の一番左の場所)が行264の第1の場所と同じであることを示す、1つまたは複数のシンタックス要素を符号化することができる。ビデオエンコーダ20はまた、行268において走査方向に連続する2つのエントリーの次のランが行264の第1の場所と同じであることを示す、1つまたは複数のシンタックス要素を符号化することができる。
行264の第1の場所および2つのエントリーのラン(上で述べられた)を示す1つまたは複数のシンタックス要素を符号化した後で、ビデオエンコーダ20は、Valueモードを使用して、(左から右へ)行268の中の第4および第5の場所を符号化することができる。たとえば、ビデオエンコーダ20は、第4の場所に対して1という値を示す1つまたは複数のシンタックス要素と、1というランを示す(たとえば、Valueモード)1つまたは複数のシンタックス要素とを符号化することができる。したがって、ビデオエンコーダ20は、別の線を参照することなくこれらの2つの場所を符号化する。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、インデックスの値に基づいて、Valueモードを使用してコーディングされたインデックスに対するラン値をコンテキストコーディングすることができる。たとえば、本明細書において説明されるように、ビデオエンコーダ20およびビデオデコーダ30は、CABACコーディングプロセスのコンテキスト適応モードを使用して、ラン値を示すデータをコーディングすることができる。本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ランのインデックスに基づいてデータをコーディングするためのコンテキストを決定するように構成され得る。
図8の例では、ビデオエンコーダ20およびビデオデコーダ30は、マップ40の上で述べられた第4の場所に対して、1というインデックスをコーディングする。ビデオエンコーダ20およびビデオデコーダ30はまた、マップ240の第4の場所に対して1というラン値をバイナリ化することができる。一例では、ビデオエンコーダ20およびビデオデコーダ30は、ラン値が0よりも大きいが1よりも大きくないことを示すフラグを生成し得る(1よりも大きくないことは別個のフラグを使用して示され得る)。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、1というインデックス値に基づいて、1以上フラグをコーディングするためのコンテキストを選択することができる。たとえば、いくつかの態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ラン値をコーディングするためのコンテキストのセットを定義することができる。コンテキストのセットは、1つのコンテキスト、2つのコンテキスト、3つコンテキスト、4つのコンテキスト、またはそれよりも多くのコンテキストを含み得る。
一例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックスが0に等しいことに基づいて、ランコンテキスト(0)を選択するように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックスが0以外の任意の値であることに基づいて、ランコンテキスト(1)を選択するように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、マップ240の第4の場所に対してインデックスが1であることに基づいて、(1)というランコンテキストを選択する。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックスが0に等しいことに基づいて、ランコンテキスト(0)を選択するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、インデックスが1であることに基づいて、ランコンテキスト(1)を選択するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、インデックスが1よりも大きい任意の値であること基づいて、ランコンテキスト(2)を選択するように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、マップ240の第4の場所に対してインデックスが1であることに基づいて、(1)というランコンテキストを選択する。
別の例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックスが0に等しいことに基づいて、ランコンテキスト(0)を選択するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、インデックスが1または2であることに基づいて、ランコンテキスト(1)を選択するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、インデックスが2よりも大きいことに基づいて、ランコンテキスト(2)を選択するように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、マップ240の第4の場所に対してインデックスが1であることに基づいて、(1)というランコンテキストを選択する。
本開示の態様によれば、コンテキストは、実際のインデックス値または調整されたインデックス値に基づき得る。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、調整されたパレットインデックスがビットストリームにおいてシグナリングされる事例において、ブロック中のサンプルをコーディングするために実際に使用されるパレットインデックスではなく、ビットストリームにおいてシグナリングされるパレットインデックス(これはadjusted_palette_indexシンタックス要素と関連付けられ得る)に基づいて、ラン値をコーディングするためのコンテキストを決定するように構成され得る。
マップ240の第4の場所と関連付けられるランをコーディングした後で、ビデオエンコーダ20は次いで、行268の中の3というインデックス値を有する第1の場所を、より上の行264に関連してCopyFromTopモードを使用して符号化することができる。たとえば、ビデオエンコーダ20は、CopyFromTopモードおよび1というランをシグナリングし得る。したがって、ビデオエンコーダ20は、たとえば、ランを使用して線の画素値もしくはインデックス値を線の他の値に関連してコーディングすること、線の画素値もしくはインデックス値を別の線(または列)の値に関連してコーディングすること、またはこれらの組合せから、選択することができる。いくつかの例では、ビデオエンコーダ20は、レート/ひずみ最適化を実行して選択を行うことができる。
ビデオエンコーダ20は次いで、(左から右への)行268の最後のサンプルに対してエスケープサンプルを符号化することができ、これは第1のパレット244に含まれない。たとえば、ビデオエンコーダ20は、エスケープサンプルとして行268の最後の場所を符号化することができる。すなわち、ビデオエンコーダ20は、行268の最後の場所がエスケープサンプルであることの指示(たとえば、インデックス4)、ならびにサンプル値の指示を符号化することができる。ビデオデコーダ30は、符号化されたビットストリームから上で説明されたシンタックスを取得し、そのようなシンタックスを使用して行268を再構築することができる。
上で述べられたように、エスケープサンプルとしてコーディングされるサンプルの指示をコーディングするための、2つ以上の技法があり得る。たとえば、明示的エスケープシグナリングでは、ビデオエンコーダ20およびビデオデコーダ30は、マップ240の各サンプルの場所に対して明示的なエスケープフラグをコーディングし得る。特定のサンプル(行268の最後のサンプルのような)がエスケープサンプルとしてコーディングされる場合、ビデオエンコーダ20およびビデオデコーダ30は、特定のサンプルに対する色値を示すデータをコーディングし得る。サンプルがエスケープサンプルとしてコーディングされない場合、ビデオエンコーダ20およびビデオデコーダ30は、モードがCopyFromTopであるかValueであるかを示すために、SPointフラグのような追加のデータをコーディングし得る。
暗黙的エスケープシグナリングでは、ビデオエンコーダ20およびビデオデコーダ30は、追加のインデックスをパレット244に追加することができる(エントリーインデックス4)。ビデオエンコーダ20およびビデオデコーダ30は、サンプルがエスケープサンプルとしてコーディングされることを示すために、パレット244に対する追加のインデックスを使用し得る。しかしながら、追加のインデックスは、関連する色値を有しない。むしろ、ビデオエンコーダ20およびビデオデコーダ30はまた、追加のインデックスと関連付けられる各サンプルに対する色値をコーディングする。サンプルがエスケープサンプルとしてコーディングされない場合、ビデオエンコーダ20およびビデオデコーダ30は、モードがCopyFromTopであるかValueであるかを示すために、SPointフラグのようなデータをコーディングし得る。
本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルとしてコーディングされる1つまたは複数のサンプルを含むインデックスのランを、CopyFromTopモードを使用してコーディングするように構成され得る。いくつかの事例では、エスケープサンプルとしてコーディングされるサンプルは、パレットの色値にマッピングされるインデックスを有しないにもかかわらず(たとえば、追加のインデックスは、エスケープサンプルとしてコーディングされるサンプルを示す目的でパレットに追加されるが、対応する色値を有しない)、ランに含まれる「インデックス」と呼ばれ得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopパレットモードによって複製されているパレット中の関連する色値を有する他のインデックスのラン内のエスケープフラグ(明示的エスケープシグナリングの場合)またはエスケープインデックス(暗黙的エスケープシグナリングの場合)を複製するように構成され得る。エスケープフラグとエスケープインデックスはともに、フラグもエスケープインデックスもパレットに含まれないので、パレット中の色値と関連付けられないシンタックス要素として言及され得る。
したがって、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopパレットモードと関連付けられるランに含まれる現在のサンプル(たとえば、別の行のサンプルに関連してコーディングされているサンプル)が、現在のサンプルの上側の隣接サンプルがエスケープサンプルとしてコーディングされる場合、エスケープサンプルとしてコーディングされると推測するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30はまた、ランに後続するエスケープサンプルとしてコーディングされるすべてのサンプルに対して、関連するエスケープ値をコーディングし得る。
図8に関して、行270の第3のサンプルはエスケープサンプルとしてコーディングされ、(左から右へのラスター走査を仮定すると)行272の第3のサンプルはエスケープサンプルとしてコーディングされる。図8の例では、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードを使用して、行270の第1のサンプルをコーディングし得る。加えて、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードに対して15というランレングスを示すラン値をコーディングし得る。ランは、行270の第3のサンプルと行272の第3のサンプルの両方を含む。したがって、ビデオエンコーダ20およびビデオデコーダ30は、行270の第3のサンプルに対するエスケープ値(たとえば、色値)を示すデータをコーディングし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、行270のエスケープ値とは異なり得る、行272の第3のサンプルに対するエスケープ値(たとえば、色値)を示すデータをコーディングし得る。
図9は、本開示の技法に従った、予測子パレットを決定するための例示的なプロセスを示す流れ図である。図9のプロセスは全般に、ビデオエンコーダ20、ビデオデコーダ30、または様々な他のプロセッサを含み得るビデオコーダによって実行されるものとして説明されている。
図9の例では、ビデオコーダは、ブロックの第1の行に位置するビデオデータの第1のブロックに対する第1のパレットを決定することができる(290)。説明を目的に「行」に関して説明されているが、本技法は、ビデオコーダが列の順序でブロックを走査する事例ではブロックの列にも適用され得ることを理解されたい。いずれの場合でも、第1のブロックに対する第1のパレットは、ブロックをコーディングするための色値と関連付けられるパレットインデックスを各々有する1つまたは複数のパレットエントリーを含み得る。
ビデオコーダはまた、第1の行に位置する少なくとも1つの第2のブロックの少なくとも1つのパレットを生成または構築するための予測子パレットを生成する(292)。たとえば、ビデオコーダは、第1のブロックをコーディングした後で、第1のパレットのエントリーに基づいて予測子パレットを生成することができる。ビデオコーダはまた、パレットベースのコーディングを使用してコーディングされる第1の行の、後でコーディングされる各ブロックに対する予測子パレットを更新することができる。
本開示の態様によれば、ビデオコーダは、ブロックの第2の行に位置する第3のブロックの第3のパレットを決定するための予測子パレットを再初期化することができる(294)。第3のブロックは、ブロックの第2の行においてコーディングされる第1のブロックであり得る。第3のブロックは、第1のブロックのすぐ下に位置し得る。
ビデオコーダは、第1のブロックのパレットのエントリーに基づいて、予測子パレットを再初期化することができる。いくつかの例によれば、ビデオコーダは、予測子パレットのエントリーを第1のパレットからのエントリーで置き換えることによって、予測子パレットを再初期化するように構成され得る。いくつかの例では、ビデオコーダは、第1のブロックをコーディングした後で(たとえば、第1の行の中の第2のブロックをコーディングする前に)生成される予測子パレット、または、第1の行の1つまたは複数の他のブロックをコーディングした後で更新されるような、更新された予測子パレットを使用して、予測子パレットを再初期化するように構成され得る。
ビデオコーダは、再初期化された予測子パレットに基づいて第3のパレットを決定することができる(296)。たとえば、ビデオコーダは、予測子パレットのどのエントリーを第3のパレットに複製するかを決定し、関連するエントリーを複製することができる。いくつかの例では、本明細書において説明されるように、ビデオコーダは、予測子ベクトルに基づいて、複製すべき予測子パレットのエントリーを決定することができる。
ビデオコーダは次いで、第3のパレットを使用してブロックを符号化/復号することができる(298)。たとえば、ビデオコーダがビデオエンコーダ(ビデオエンコーダ20のような)として動作する事例では、ビデオエンコーダは、符号化されたビットストリーム中の決定されたパレットを使用して、第3のブロックのインデックスを表すデータを符号化することができる。ビデオコーダがビデオデコーダ(ビデオデコーダ30のような)として動作する事例では、ビデオデコーダは、第3のパレットを使用して、第3のブロックのインデックスに対するサンプル値を決定することができる。
図10は、本開示の技法に従った、パレットインデックスのランのラン値をコーディングするための例示的なプロセスを示す流れ図である。図10のプロセスは全般に、ビデオエンコーダ20、ビデオデコーダ30、または様々な他のプロセッサを含み得るビデオコーダによって実行されるものとして説明されている。
図10の例では、ビデオコーダは、パレットインデックスのランのランレングスを示すラン値を決定する(310)。たとえば、ビデオコーダは、たとえばValueパレットモードを使用して、パレットインデックスの指示をコーディングし得る。ビデオコーダはまた、コーディングされたインデックスと同じ値を有する、走査順序において連続するサンプルの数を決定し得る。連続するサンプルの数は、ラン値であり得る。
ビデオコーダはまた、パレットインデックスに基づいてラン値を示す、決定されたデータをコンテキスト適応コーディングするためのコンテキストを決定する(312)。たとえば、ビデオコーダは、パレットインデックスに基づいて、決定されたラン値をCABACコーディングするための1つまたは複数のコンテキストを決定し得る。いくつかの例では、ビデオコーダは、ラン値をコーディングするために定義される複数のコンテキストから選択することができる。
ビデオコーダは次いで、決定されたコンテキストを使用してラン値を示すデータを符号化/復号することができる(314)。たとえば、ビデオコーダがビデオエンコーダ(ビデオエンコーダ20のような)として動作する事例では、ビデオエンコーダは、符号化されたビットストリーム中のラン値を示すデータを符号化することができる。ビデオコーダがビデオデコーダ(ビデオデコーダ30のような)として動作する事例では、ビデオデコーダは、符号化されたビットストリームからのラン値を示すデータを構文解析(復号)することができる。
図11は、本開示の技法に従った、2つ以上のパレットコーディングモードによってコーディングされるインデックスのランをコーディングするための例示的なプロセスを示す流れ図である。図11のプロセスは全般に、ビデオエンコーダ20、ビデオデコーダ30、または様々な他のプロセッサを含み得るビデオコーダによって実行されるものとして説明されている。
ビデオコーダは、パレットの色と関連付けられるインデックスと、パレットの色と関連付けられない1つまたは複数のシンタックス要素とを含む、ブロックの第1の行のインデックスを決定する(320)。たとえば、ビデオコーダは、パレットインデックスがコーディングされるサンプルと、Escapeパレットモードにおいてコーディングされるサンプルとを決定し得る。
ビデオコーダはまた、第1の行のパレットインデックスに関して第2の行のインデックスのランを符号化/復号することができる(322)。たとえば、ビデオコーダがビデオエンコーダ(ビデオエンコーダ20のような)として動作する事例では、ビデオエンコーダは、CopyFromTopモードの指示と、ランのランレングスの指示とを符号化することができる。ビデオコーダがビデオデコーダ(ビデオデコーダ30のような)として動作する事例では、ビデオデコーダは、CopyFromTopモードの指示と、ランのランレングスの指示とを復号することができる。いずれの場合も、ランは、関連する色を有しないインデックスと、パレットの色と関連付けられない1つまたは複数のシンタックス要素、たとえばCopyFromTopモードにおいて、かつエスケープサンプルとしてコーディングされるサンプルとの両方を含む。
ビデオコーダは次いで、パレットの色と関連付けられないシンタックス要素に対する色値を示すデータを符号化/復号することができる(324)。たとえば、ビデオコーダがビデオエンコーダ(ビデオエンコーダ20のような)として動作する事例では、ビデオエンコーダは、符号化されたビットストリーム中のシンタックス要素によって表されるサンプルの色値を示すデータを符号化することができる。ビデオコーダがビデオデコーダ(ビデオデコーダ30のような)として動作する事例では、ビデオデコーダは、ビットストリームからのシンタックス要素によって表されるサンプルの色値を示すデータを復号することができる。
本明細書において説明される技法のすべてが、個々にまたは組み合わせて使用され得ることを理解されたい。本開示は、ブロックサイズ、パレットサイズ、スライスタイプなどのようないくつかの要因に応じて変化し得る、いくつかのシグナリング方法を含む。シンタックス要素をシグナリングまたは推測する際のそのような変化は、エンコーダとデコーダに経験的に知られていることがあり、または、ビデオパラメータセット(VPS)において、シーケンスパラメータセット(SPS)において、ピクチャパラメータセット(PPS)において、スライスヘッダにおいて、タイルレベルにおいて、または他の箇所で明示的にシグナリングされ得る。
例に応じて、本明細書で説明される技法のいずれかのいくつかの行為またはイベントは異なる順序で実行されてもよく、一緒に追加され、統合され、または省略されてもよい(たとえば、説明される行為またはイベントのすべてが技法の実施のために必要とは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理、またはマルチプロセッサを通じて同時に実行され得る。加えて、明快にするために、本開示のいくつかの態様は単一のモジュールまたはユニットによって実行されるものとして説明されるが、本開示の技法がビデオコーダと関連付けられるユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
説明を目的に、本開示のいくつかの態様は開発中のHEVC規格に関して説明された。しかしながら、本開示において説明される技法は、まだ開発されていない他の標準的なまたは独自のビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
上で説明された技法は、ビデオエンコーダ20(図1および図2)および/またはビデオデコーダ30(図1および図3)によって実行されてよく、それらの両方が一般にビデオコーダと呼ばれることがある。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。
本技法の様々な態様の特定の組合せが上で説明されるが、これらの組合せは、本開示において説明される技法の例を示すために与えられるものにすぎない。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示において説明される技法の様々な態様の任意の想起可能な組合せを包含し得る。
1つまたは複数の例において、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体に記憶され、またはコンピュータ可読媒体を介して送信されてよく、ハードウェアベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体に対応する、コンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示において説明される技法を実装するための命令、コードおよび/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形式の所望のプログラムコードを記憶するために使用され、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。また、任意の接続が、適切にコンピュータ可読媒体と呼ばれる。たとえば、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびブルーレイディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生するが、ディスク(disc)はレーザーを用いてデータを光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に同じく含まれるべきである。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の集積論理回路もしくは離散論理回路のような、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書において使用される「プロセッサ」という用語は、前述の構造、または本明細書において説明される技法の実装に適した任意の他の構造のいずれかを指し得る。さらに、いくつかの態様では、本明細書において説明される機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/またはソフトウェアモジュール内に与えられてよく、あるいは複合コーデックに組み込まれてよい。また、技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために、様々なコンポーネント、モジュール、またはユニットが説明されたが、それらのコンポーネント、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされてよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つもしくは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてよい。
様々な例が説明されてきた。これらの例および他の例は、以下の特許請求の範囲内に入る。