本出願は、2014年5月22日に出願された米国仮出願第62/002,054号、2014年6月10日に出願された米国仮出願第62/010,313号、2014年6月20日に出願された米国仮出願第62/015,240号、2014年7月31日に出願された米国仮出願第62/031,766号、2014年8月22日に出願された米国仮出願第62/040,978号、2015年2月10日に出願された米国仮出願第62/114,533号、および2015年2月11日に出願された米国仮出願第62/115,099号の利益を主張し、これらの各々の内容全体が本明細書に参考として組み込まれる。
[0031]本開示の態様は、ビデオコーディングおよびビデオ圧縮のための技法を対象とする。具体的には、本開示は、ビデオデータのパレットベースのコーディングのための技法を説明する。従来のビデオコーディングでは、画像は、色調が連続的であり空間的に滑らかであると仮定される。これらの仮定に基づいて、ブロックベースの変換、フィルタリングなどのような様々なツールが開発されており、そのようなツールは、自然のコンテンツのビデオに対しては良好な性能を示している。
[0032]しかしながら、リモートデスクトップ、共同作業用ディスプレイおよびワイヤレスディスプレイのような適用例では、コンピュータで生成されたスクリーンコンテンツが、圧縮されるべき支配的なコンテンツであり得る。このタイプのコンテンツは、不連続な色調を有し、鋭利な線と高コントラストのオブジェクト境界とを特徴とする傾向がある。連続的な色調および滑らかさという仮定はもはや当てはまらないことがあるので、従来のビデオコーディング技法は、そのコンテンツを圧縮するための効率的な方法ではないことがある。
[0033]本開示は、スクリーンにより生成されたコンテンツのコーディング(たとえば、スクリーンコンテンツコーディング(SCC))に特に好適であり得る、パレットベースのコーディングを説明する。ビデオデータのパレットベースのコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、下でより詳細に説明されるように、エンコーダまたはデコーダ、または組み合わされたエンコーダ−デコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディングと、さらにはパレットベースのコーディングとを実行するように構成され得る。
[0034]いくつかの例では、パレットベースのコーディング技法は、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テキスト仕様ドラフトは、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」)に記載されている。
[0035]HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUモードの状況において説明される以下の開示されるプロセスのすべてが、追加で、または代替的に、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0036]パレットベースのコーディングでは、ビデオデータの特定のエリアが、比較的少数の色を有すると仮定される。ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆる「パレット」をコーディングし得る。各ピクセルは、ピクセルの色を表すパレット中のエントリーと関連付けられ得る。たとえば、ビデオコーダは、ピクセル値をパレット中の適切な値に関連付けるインデックスをコーディングすることができる。
[0037]上の例では、ビデオエンコーダは、ブロックのためのパレットを決定し、各ピクセルの値を表すためのパレット中のエントリーを見つけ、ピクセル値をパレットに関連付けるピクセルのためのパレットインデックス(パレットインデックス値とも呼ばれる)を用いてパレットを符号化することによって、ビデオデータのブロックを符号化することができる。ビデオデコーダは、符号化されたビットストリームから、ブロックのためのパレット、ならびにブロックのピクセルのためのパレットインデックスを取得することができる。ビデオデコーダは、ブロックのピクセル値を再構築するために、ピクセルのパレットインデックスをパレットのエントリーに関連付けることができる。ピクセル(および/またはピクセル値を示す関連するパレットインデックス)は一般に、サンプルと呼ばれ得る。
[0038]ブロック中のサンプルは、水平方向のラスター走査順序を使用して処理される(たとえば、走査される)と仮定される。たとえば、ビデオエンコーダは、水平方向のラスター走査順序を使用してパレットインデックスを走査することによって、パレットインデックスの2次元ブロックを1次元アレイに変換することができる。同様に、ビデオデコーダは、水平方向のラスター走査順序を使用してパレットインデックスのブロックを再構築することができる。したがって、本開示は、ブロック中の現在コーディングされているサンプルに走査順序において先行するサンプルのことを、以前のサンプルと呼び得る。垂直方向のラスター走査順序などの水平方向のラスターサン以外の走査も適用可能であり得ることを、理解されたい。上の例は意図されるは、パレットベースのコーディングの全般的な説明を与える。
[0039]パレットは通常、インデックスによって番号を付けられた、色の成分(たとえば、RGB、YUVなど)の値または強度を表すエントリーを含む。ビデオエンコーダとビデオデコーダの両方が、パレットエントリーの数と、各パレットエントリーのための色成分値と、現在のブロックのためのパレットエントリーの正確な順序とを決定する。本開示では、各パレットエントリーがサンプルのすべての色成分の値を指定すると仮定される。しかしながら、本開示の概念は、各色成分に対して別々のパレットを使用することに適用可能である。
[0040]いくつかの例では、パレットは、以前にコーディングされたブロックからの情報を使用して合成され得る。すなわち、パレットは、以前のブロックをコーディングするために使用されたパレットから予測される、予測されたパレットエントリーを含み得る。たとえば、規格提案文書、Wei Pu他、「AHG10: Suggested Software for Palette Coding based on RExt6.0」、JCTVC−Q0094、バレンシア、スペイン、2014年3月27日〜4月4日(以後JCTVC−Q0094)に記述されるように、パレットは、予測子パレットから複製されるエントリーを含み得る。予測子パレットは、パレットモードを使用して以前にコーディングされたブロックからの、または他の再構築されたサンプルからのパレットエントリーを含み得る。予測子パレット中の各エントリーに対して、バイナリフラグが、そのフラグと関連付けられるエントリーが現在のパレットに複製されるかどうかを示す(たとえば、フラグ=1によって示される)ようにコーディングされ得る。バイナリフラグの列は、バイナリパレット予測ベクトルと呼ばれ得る。現在のブロックをコーディングするためのパレットはまた、いくつかの新たなパレットエントリーを含んでよく、これらは明示的に(たとえば、パレット予測ベクトルとは別に)コーディングされ得る。新たなエントリーの数のインジケーションもコーディングされ得る。予測されるエントリーと新たなエントリーの合計は、ブロックの全体のパレットサイズを示し得る。
[0041]提案されるJCTVC−Q0094のように、パレットベースのコーディングモードを用いてコーディングされるブロック中の各サンプルは、以下に記載されるような3つのパレットモードの1つを使用してコーディングされ得る。
・Escapeモード:このモードでは、サンプル値がパレットエントリーとしてパレットに含められず、量子化されたサンプル値がすべての色成分に対して明示的にシグナリングされる。新たなパレットエントリーのシグナリングに似ているが、新たなパレットエントリーに対しては、色成分値は量子化されない。
・CopyFromTopモード(CopyAboveモードとも呼ばれる):このモードでは、現在のサンプルのためのパレットエントリーインデックスが、ブロック中ですぐ上に位置するサンプルから複製される。
・Valueモード(Indexモードとも呼ばれる):このモードでは、パレットエントリーインデックスの値が明示的にシグナリングされる。
[0042]本明細書で説明されるように、パレットエントリーインデックスは、パレットインデックスまたは単にインデックスと呼ばれ得る。これらの用語が、本開示の技法を説明するために交換可能に使用され得る。加えて、以下でより詳細に説明されるように、パレットインデックスは、1つまたは複数の関連する色または強度の値を有し得る。たとえば、パレットインデックスは、ピクセルの単一の色または強度の成分と関連付けられる、単一の関連する色または強度の値を有し得る(たとえば、RGBデータのRed成分、YUVデータのY成分など)。別の例では、パレットインデックスは、複数の関連する色または強度の値を有し得る。いくつかの事例では、パレットベースのコーディングは、モノクロのビデオをコーディングするために適用され得る。したがって、「色値」は一般に、ピクセル値を生成するために使用される任意の色成分または非色成分を指し得る。
[0043]CopyFromTopモードおよびValueモードでは、ラン値(単にランとも呼ばれ得る)もシグナリングされ得る。ラン値は、一緒にコーディングされるパレットコーディングされるブロック中の、特定の走査順序にある連続するサンプルの数(たとえば、複数のサンプルの1つのラン)を示し得る。いくつかの事例では、該複数のサンプルの1つのランは(複数の)パレットインデックスの(1つの)ランとも呼ばれることがあり、それは、該ランの各サンプルがパレットに対する関連するインデックスを有するからである。
[0044]ラン値は、同じパレットコーディングモードを使用してコーディングされる複数のパレットインデックスの1つのランを示し得る。たとえば、Valueモードに関して、ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、パレットインデックス(パレットインデックス値または単にインデックス値とも呼ばれる)と、同じパレットインデックスを有しそのパレットインデックスを用いてコーディングされる、ある走査順序にある連続するサンプルの数を示すラン値とを、コーディングすることができる。CopyFromTopモードに関して、ビデオコーダは、上側の隣接サンプル(たとえば、ブロック中の現在コーディングされているサンプルの上に位置するサンプル)のインデックスと、上側の隣接サンプルからパレットインデックスを同様に複製しそのパレットインデックスを用いてコーディングされている、ある走査順序にある連続するサンプルの数を示すラン値とに基づいて、現在のサンプル値のためのインデックスが複製されることを示すインジケーション(indication)をコーディングすることができる。したがって、上の例では、パレットインデックスのランは、同じ値を有するパレットインデックスのラン、または上側の隣接パレットインデックスから複製されるパレットインデックスのランを指す。
[0045]したがって、ランは、所与のモードに対して、同じモードに属する後続のサンプルの数を指定し得る。いくつかの事例では、インデックスとラン値とをシグナリングすることは、ランレングスコーディングと似ていることがある。説明を目的とする例では、ブロックの連続するパレットインデックスの列は、0、2、2、2、2、5であり得る(たとえば、ここで各インデックスはブロック中のサンプルに対応する)。この例では、ビデオコーダは、Valueモードを使用して第2のサンプル(たとえば、2つのパレットインデックスのうちの最初のパレットインデックス)をコーディングすることができる。2に等しいインデックスをコーディングした後で、ビデオコーダは3というランをコーディングすることができ、これは、3つの後続のサンプルも2という同じパレットインデックスを有することを示す。同様の方式で、CopyFromTopモードを使用してインデックスをコーディングした後で4つのパレットインデックスのランをコーディングすることは、全体で5つのパレットインデックスが、現在コーディングされているサンプル位置の上の行の中の対応するパレットインデックスから複製されることを示し得る。
[0046]本開示で説明される技法は、パレットベースのコーディングモードをシグナリングすること、パレットを送信すること、パレットを導出すること、およびパレットベースのコーディングマップと他のシンタックス要素とを送信することの、1つまたは複数の様々な組合せのための技法を含み得る。いくつかの例では、本開示の技法は、JCTVC−Q0094に存在するパレットモード、パレットインデックス、ラン、およびパレットサイズのシグナリング(ならびに投稿JCTVC−Q0094とともにアップロードされたパレットモードを実装する参照ソフトウェア)と関連付けられる潜在的な冗長性を解決するために使用され得る。したがって、以下でより詳細に説明されるように、本開示の技法は、いくつかの事例では、パレットモードを使用してビデオデータをコーディングするときの効率性を向上させビットレートを向上させ得る。
[0047]本開示のいくつかの態様は、パレットベースのコーディングモードをシグナリングすること、具体的には、エスケープサンプルをシグナリングすることと関連付けられる技法を対象とする。たとえば、エスケープサンプル(エスケープピクセルとも呼ばれる)は、ブロックをコーディングするためのパレット中で表される対応する色を有しないブロックのサンプル(またはピクセル)であり得る。したがって、エスケープサンプルは、パレットから色のエントリー(またはピクセル値)を使用して再構築されないことがある。代わりに、エスケープサンプルのための色値は、パレットの色値とは別にビットストリームにおいてシグナリングされる。
[0048]以下でより詳細に説明されるように、ビデオコーダ(たとえば、ビデオエンコーダおよびビデオデコーダは、パレットコーディングされるブロックのサンプルが、そのブロックのためのパレットに含まれていないサンプルの色に基づいて、たとえば上の「Escapeモード」と呼ばれるプロセスを使用してコーディングされるかどうかを示す、サンプルごとのデータをコーディングし得る。一例では、ビデオコーダは、サンプルがたとえばEscapeモードを使用してエスケープサンプルとしてコーディングされるかどうかを示す、各サンプルのためのフラグをコーディングし得る(本明細書では暗黙的エスケープシグナリングと呼ばれる)。別の例では、ビデオコーダは、サンプルがたとえばEscapeモードを使用してエスケープサンプルとしてコーディングされることを示す、サンプルのための他のシンタックス(以下で説明されるような追加のパレットインデックスなど)をコーディングし得る(本明細書では明示的エスケープシグナリングと呼ばれる)。
[0049]本開示の態様によれば、パレットコーディングされるブロックに対して、1つまたは複数のシンタックス要素は、ブロックレベル(たとえば、CUレベルまたはLCUレベル)において、ブロックのいずれかのサンプルがパレットに含まれていないサンプルの色値に基づいてコーディングされるかどうか、たとえばエスケープサンプルとしてコーディングされるかどうかを示し得る。当該1つまたは複数のシンタックス要素は、ブロックレベルエスケープシンタックスと呼ばれ得る。たとえば、ブロックレベルシンタックスは、CUまたはLCUなどのビデオデータのブロックをコーディングする間にコーディングまたは決定されるシンタックスを指し得る。ブロックレベルシンタックスは、ヘッダに含まれることがあり、または、ブロックと関連付けられる他のデータ(たとえば、ブロックの特性を記述するブロックの前または後にコーディングされるデータ)とともに存在することがある。対照的に、ブロックレベルシンタックスではない他のシンタックスは、スライスヘッダに含まれることがあり、またはビデオデータの個々のピクセルとともに存在することがある。
[0050]一例では、ビデオコーダは、ブロックのいずれかのサンプルがパレットに含まれていない色値に基づいてコーディングされるかどうかを示す、フラグ(ブロックレベルエスケープフラグと呼ばれ得る)をコーディングおよび/または決定するように構成され得る。たとえば、0というフラグ値は、ブロックのサンプルのいずれもがEscapeモードを使用してコーディングされないことを示し得る。すなわち、ブロックのすべてのサンプルの値が、そのブロックをコーディングするためのパレットに含まれている色値に基づいて決定され得る。1というフラグ値は、ブロックの少なくとも1つのサンプルがEscapeモードを使用してコーディングされることを示し得る。すなわち、少なくとも1つのサンプルの値は、ブロックをコーディングするためのパレットに含まれておらず、別個にシグナリングされ得る。したがって、このフラグは、ビデオデータのブロックのすべてのサンプルに対して、ブロックの少なくとも1つのサンプルがブロックをコーディングするためのパレットに含まれていない色値を有するかどうかを示し得る。
[0051]以下でより詳細に説明されるように、ブロックレベルエスケープシンタックスは、いくつかの事例ではビットの節約をもたらし得る。たとえば、ブロック全体のいずれかのサンプルがエスケープサンプルとしてコーディングされるかどうかを決定することによって、ビデオコーダは、エスケープサンプルと関連付けられるいくつかのシンタックス要素のコーディングをスキップすることが可能であり得る。すなわち、サンプルがエスケープサンプルとしてコーディングされないことをシンタックスが示す事例では、ビデオコーダは、ブロックのためのエスケープサンプルと関連付けられるいずれの他のシンタックス(上で述べられたサンプルごとのシンタックスなど)もコーディングしなくてよい。以下でより詳細に説明されるように、ビデオコーダはまた、あるシンタックスのコーディングを、コーディングされているブロックのためのパレットのサイズに基づいてブロックの少なくとも1つのサンプルがエスケープサンプルとしてコーディングされることをそのシンタックスが示すとき、スキップすることができる。したがって、本開示の技法は、パレットベースのコーディングを使用してビデオデータをコーディングするとき、ビットレートとコーディング効率とを向上させることができる。
[0052]本開示の他の態様は、パレットモードのための最大パレットパラメータをコーディングすることを対象とする。たとえば、パレットの最大パレットサイズは通常、ビデオエンコーダとビデオデコーダの両方において定義される不変の値であり得る。同様に、パレット予測子(以下でより詳細に説明されるように、パレットを予測するために使用される)の最大サイズも、ビデオエンコーダとビデオデコーダの両方において定義される不変の値であり得る。したがって、コーディングされているビデオデータの具体的な特性とは無関係に、これらの最大パレットパラメータは変更されないことがある。
[0053]本開示の態様によれば、ビデオコーダは、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータをコーディングするように構成され得る。たとえば、本開示の態様によれば、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータは、シーケンスパラメータセット(SPS)などのパラメータセットに含まれ得る。したがって、ビデオコーダは、ビデオデータのブロックをコーディングするための色値のパレットの最大パレットサイズを示すデータと、色値のパレットを決定するためのパレット予測子の最大パレット予測子サイズを示すデータとの少なくとも1つをコーディングし得る。
[0054]最大パレットサイズおよび/または最大パレット予測子サイズを示すデータをコーディングすることは柔軟性をもたらすことがあり、これによりコーディング効率が向上することがある。たとえば、本技法は、ビデオコーダが、コーディングされているビデオデータの特性に基づいて(たとえば、データのビット深度、ブロックサイズ、データと関連付けられるプロファイルまたはレベルなどに基づいて)異なるサイズのパレットとパレット予測子とを使用することを可能にし得る。したがって、比較的大きい最大パレットパラメータが、そのようなパラメータによる利益を受け得るブロックに対して定義され得るように、最大パレットパラメータは、コーディングされるビデオデータに対して適合され得る。加えて、比較的大きいパラメータによる利益を受ける可能性がより低いブロックのためにパレットを構築することと関連付けられる複雑さを減らすために、比較的小さい最大パレットパラメータが定義され得る。
[0055]本開示の他の態様は、パレットベースのビデオコーディングのための様々なシンタックス要素をコーディングする技法を対象とする。たとえば、本開示の技法は、パレットインデックスのラン値(ランレングス値とも呼ばれる)、パレット予測ベクトル、または他のパレット関連のシンタックスなどの、パレットコーディングのためのシンタックスを、コーディングされるシンタックスの最大の可能な値を考慮する符号を使用してコーディングすることを含む。いくつかの事例では、本開示の態様によれば、シンタックスは、以下でより詳細に説明されるように、ある形の指数ゴロム符号を使用してコーディングされ得る。本技法は、いくつかの事例では、パレット関連のシンタックスを表すために必要とされるビットの数を減らし得る。
[0056]図1は、本開示の技法を利用できる例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指し得る。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を代表する。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなどの、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースのコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードなどの、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。
[0057]図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14はビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0058]ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備え得る。
[0059]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化されたビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化されたビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って、符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つもしくは複数の物理伝送線路などのワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などのパケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0060]別の例では、チャネル16は、ソースデバイス12によって生成された、符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して、記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの、様々なローカルにアクセスされるデータ記憶媒体を含み得る。
[0061]さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間ストレージデバイスを含み得る。この例では、送信先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間ストレージデバイスに記憶された、符号化されたビデオデータにアクセスすることができる。ファイルサーバは、符号化されたビデオデータを記憶することと、符号化されたビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイトのための)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
[0062]宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、ファイルサーバに記憶されている符号化されたビデオデータにアクセスするのに適した、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、またはその両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
[0063]本開示の技法は、ワイヤレスの用途または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
[0064]図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間の任意のデータ通信を必ずしも含まないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データが、ローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータを符号化し、メモリに記憶することができ、および/または、ビデオ復号デバイスはメモリからデータを取り出し、復号することができる。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって実行される。
[0065]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、たとえばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/もしくは、ビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
[0066]ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化されたビデオデータを直接送信する。他の例では、符号化されたビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために記憶媒体またはファイルサーバ上に記憶され得る。
[0067]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して、符号化されたビデオデータを受信することができる。ディスプレイデバイス32は、宛先デバイス14と一体化され得るか、またはその外部にあり得る。一般に、ディスプレイデバイス32は、復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスを備え得る。
[0068]ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェアなどの、様々な適切な回路のいずれか、またはそれらの任意の組合せとして実装され得る。本技法がソフトウェアで部分的に実装される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェア用の命令を記憶することができ、本開示の技法を実行するために1つまたは複数のプロセッサを使用してハードウェア内でそれらの命令を実行することができる。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれもが、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれることがあり、両者のいずれかがそれぞれのデバイス内の複合エンコーダ/デコーダ(CODEC)の一部として組み込まれることがある。
[0069]本開示は全般に、ビデオエンコーダ20が、ある情報をビデオデコーダ30のような別のデバイスに「シグナリングすること」または「送信すること」に言及することがある。「シグナリング」または「送信」という用語は、一般に、圧縮されたビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指し得る。そのような通信は、リアルタイムまたはほぼリアルタイムに起こり得る。代替的に、そのような通信は、符号化のときに符号化されたビットストリームの中でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに起こり得るなど、ある時間の長さにわたって起こることがあり、これらの要素は次いで、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
[0070]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上で言及されHEVCドラフト10に記載されるHEVC規格などの、ビデオ圧縮規格に従って動作する。基本的なHEVC規格に加えて、HEVCのためのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を作成するための作業が進行中である。加えて、たとえば本開示で説明されるような、パレットベースのコーディングモードは、HEVC規格の拡張のために提供され得る。いくつかの例では、パレットベースのコーディングのために本開示で説明される技法は、ITU−T−H.264/AVC規格または将来の規格のような、他のビデオコーディング規格に従って動作するように構成される、エンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースのコーディングモードの適用が、例として説明される。
[0071]HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは一般に、一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCbおよびSCrと表記される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれることもある。他の例では、ピクチャは、モノクロであることがあり、ルーマサンプルのアレイしか含まないことがある。
[0072]ビデオエンコーダ20は、ピクチャの符号化された表現を生成するために、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nブロックであり得る。CTUは「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスター走査順序で連続的に順序付けられた整数個のCTUを含み得る。
[0073]コーディングされたCTUを生成するために、ビデオエンコーダ20は、コーディングツリーブロックをコーディングブロックに分割するように、CTUのコーディングツリーブロックに対して4分木区分を再帰的に実行することができ、したがって「コーディングツリーユニット」という名称である。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイと、CbサンプルアレイおよびCrサンプルアレイと、コーディングブロックのサンプルをコーディングするのに使用されるシンタックス構造とを有するピクチャの、ルーマサンプルの1つのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックであり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分することができる。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ルーマサンプルの予測ブロック、ピクチャのクロマサンプルの2つの対応する予測ブロック、予測ブロックサンプルを予測するのに使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのために、予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成することができる。
[0074]ビデオエンコーダ20は、PUの予測ブロックを生成するためにイントラ予測またはインター予測を使用することができる。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられたピクチャの復号されたサンプルに基づいてPUの予測ブロックを生成することができる。
[0075]ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられたピクチャ以外の1つまたは複数のピクチャの復号サンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために単予測または双予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
[0076]ビデオエンコーダ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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0077]さらに、ビデオエンコーダ20は、CUのルーマ残差ブロックと、Cb残差ブロックと、Cr残差ブロックとを、1つまたは複数のルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに分解するために、4分木区分を使用し得る。変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックと関連付けられ得る。TUと関連付けられたルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
[0078]ビデオエンコーダ20は、TUのルーマ変換ブロックに1回または複数回の変換を適用して、TUのルーマ係数ブロックを生成することができる。係数ブロックは変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。ビデオエンコーダ20は、TUのCb係数ブロックを生成するために、TUのCb変換ブロックに1回または複数回の変換を適用し得る。ビデオエンコーダ20は、TUのCr係数ブロックを生成するために、TUのCr変換ブロックに1つまたは複数の変換を適用し得る。
[0079]係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後、ビデオエンコーダ20は、係数ブロックを量子化することができる。量子化は一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現する処理を指す。ビデオエンコーダ20が係数ブロックを量子化した後で、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行し得る。ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素をビットストリームに出力することができる。
[0080]ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。ビットストリームは、コーディングされたピクチャおよび関連するデータの表現を形成するビットのシーケンスを含み得る。ビットストリームは、一連のネットワーク抽象化レイヤ(NAL)ユニットを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)をカプセル化する。NALユニットヘッダは、NALユニットタイプ符号を示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプ符号は、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含んでいるシンタックス構造であり得る。いくつかの例では、RBSPは0ビットを含む。
[0081]異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)のためのRBSPをカプセル化することができ、第2のタイプのNALユニットはコーディングされたスライスのためのRBSPをカプセル化することができ、第3のタイプのNALユニットはSEIのためのRBSPをカプセル化することができ、以下同様である。ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれ得る。
[0082]ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームからシンタックス要素を復号するためにビットストリームを構文解析(parse)し得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは全般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、現在のCUのPUの予測ブロックを決定するために、PUのMVを使用することができる。加えて、ビデオデコーダ30は、現在のCUのTUと関連付けられた変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在のCUのTUと関連付けられる変換ブロックを再構築するために、変換係数ブロックに対して逆変換を実行することができる。ビデオデコーダ30は、現在のCUのPUの予測ブロックのサンプルを現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築することができる。ピクチャの各CUのためのコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築することができる。
[0083]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。たとえば、パレットベースのコーディングでは、上で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を実行するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆるパレットをコーディングすることができる。各ピクセルは、ピクセルの色を表すパレット中のエントリーと関連付けられ得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ピクセル値をパレット中の適切な値に関連付けるインデックスをコーディングすることができる。
[0084]上の例では、ビデオエンコーダ20は、ブロックのためのパレットを決定し、各ピクセルの値を表すためのパレット中のエントリーを見つけ(locate)、ピクセル値をパレットに関連付けるピクセルのためのパレットインデックスを用いてパレットを符号化することによって、ビデオデータのブロックを符号化することができる。ビデオデコーダ30は、符号化されたビットストリームから、ブロックのためのパレット、ならびにブロックのピクセルのためのパレットインデックスを取得することができる。ビデオデコーダ30は、ブロックのピクセル値を再構築するために、ピクセルのパレットインデックスをパレットのエントリーに関連付けることができる。
[0085]上で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、パレットのパレットインデックスをコーディングするために異なる数のパレットコーディングモードを使用することができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのパレットインデックスをコーディングするために、Escapeモード、CopyFromTopモード(CopyAboveモードとも呼ばれる)、またはValueモード(Indexモードとも呼ばれる)を使用することができる。一般に、「Escapeモード」を使用してサンプルをコーディングすることは一般に、ブロックをコーディングするためのパレット中で表される対応する色を有しないブロックのサンプルをコーディングすることを指し得る。上で述べられたように、そのようなサンプルは、エスケープサンプルまたはエスケープピクセルと呼ばれ得る。
[0086]別の例示的なパレットコーディングモードが、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モードに類似し得る。
[0087]ValueモードとTransition Runモードの違いは、transition runモードのパレットインデックスはビットストリームにおいてシグナリングされないということである。そうではなく、ビデオエンコーダ20およびビデオデコーダ30が、パレットインデックスを推測し得る。本明細書で説明されるように、値を推測することは、ビットストリームにおいてコーディングされる値を表す専用のシンタックスを参照することなく値を決定することを指し得る。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、ビットストリームにおいて値のための専用のシンタックス要素をコーディングすることなく値を推測することができる。推測されるインデックスは、遷移(transition)インデックスと呼ばれ得る。
[0088]いくつかの例では、パレットモードをシグナリングする2つの方法があり得る。パレットモードをシグナリングするための第1の技法は、明示的エスケープシグナリングと呼ばれ得る。たとえば、JCTVC−Q0094では、マクロ「PLT_REMOVE_ESCAPE_FLAG」が0である場合、ビデオエンコーダ20は、ブロック中のコーディングされているサンプルがEscapeモードでコーディングされるかどうかを示すために、ブロックの各サンプルのためのエスケープフラグを明示的に符号化することができる。サンプルがEscapeモードを用いてコーディングされない場合、ビデオエンコーダ20は、モードがCopyFromTopであるかValueであるかを示すために、追加のデータを符号化することができる。いくつかの事例では、追加のデータは、SPointフラグと本明細書で呼ばれるフラグであり得る(たとえば、0というSPointフラグの値はCopyFromTopモードを示してよく、1というSPointフラグの値はValueモードを示してよく、またはその逆であってよい)。
[0089]したがって、明示的エスケープシグナリングでは、SPointフラグは、示されるモードと関連付けられるピクセル値のランのための特定のランタイプを示すために使用され得る。たとえば、ビデオエンコーダ20は、現在コーディングされているインデックスおよびランにおいてコーディングされている後続のパレットインデックスのランが、CopyFromTopモードを使用してコーディングされるかValueモードを使用してコーディングされるかを示すように、SPointフラグを符号化することができる。ビデオエンコーダ20は、後続のランサンプルのためのエスケープフラグ(たとえば、「PLT_REMOVE_ESCAPE_FLAG」)とSPointフラグ(必要なとき)とを符号化しない。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、ランに含まれるサンプルのためのエスケープフラグとSPointフラグの値を推測することができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ランに含まれるサンプルのためのエスケープフラグとSPointフラグの値を、ビットストリーム中のそのような値を表す専用のシンタックスを参照することなく決定することができる。
[0090]パレットモードをシグナリングするための第2の技法は、暗黙的エスケープシグナリングと呼ばれ得る。たとえば、JCTVC−Q0094からのマクロ「PLT_REMOVE_ESCAPE_FLAG」が1である場合、ビデオエンコーダ20およびビデオデコーダ30は、いずれのパレットエントリーにも対応しないパレットに対する特別なインデックスを収容するために、パレットのパレットエントリーの数を1だけ増やすように構成され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、所与のブロックのための増やされたパレット中の最後のパレットインデックスとして、追加のインデックスを含め得る。追加のインデックスは、Escapeモードのインジケーションとして使用され得る。
[0091]暗黙的エスケープシグナリングを実行するとき、ビデオエンコーダ20は、ブロックの特定のサンプル値に対して、追加のサンプルがエスケープサンプル(たとえば、ブロックをコーディングするためのパレットにおいて表される色値を有しないサンプル)としてコーディングされることを示すために、追加のインデックスを表すデータを符号化することができる。ビデオエンコーダ20はまた、エスケープサンプルの色値を符号化することができる。したがって、暗黙的エスケープシグナリングの場合、明示的なシンタックスを使用してシグナリングされることになる、可能なモードは2つしかない(たとえば、CopyFromTopモードまたはValueモード(Indexモードとも呼ばれる))。たとえば、SPointフラグだけが、これらのモードを区別するためにシグナリングされ得る。サンプルがValueモードでコーディングされ、Valueモードのためのインデックスがエスケープインデックス(たとえば、パレットに対する上で述べられた追加のインデックス)に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルとしてコーディングされるべきであるものとしてサンプルを推測することができる。この場合、ランはシグナリングされない。Transition Runモードを用いた暗黙的エスケープシグナリングを使用するとき、SPointフラグは、値0(たとえば、Valueモード)、1(たとえば、CopyFromTopモード)、または2(たとえば、Transition Runモード)をとり得る。
[0092]本開示で説明される技法は、パレットベースのコーディングモードをシグナリングすること、パレットを送信すること、パレットを導出すること、およびパレットベースのコーディングマップと他のシンタックス要素とを送信することの、1つまたは複数の様々な組合せのための技法を含み得る。いくつかの例では、本開示の技法は、JCTVC−Q0094に存在するパレットモード、パレットインデックス、ラン、およびパレットサイズのシグナリング(ならびに投稿JCTVC−Q0094とともにアップロードされたパレットモードを実装する参照ソフトウェア)と関連付けられる潜在的な冗長性を解決するために使用され得る。
[0093]JCTVC−Q0094で説明される技法と関連付けられるソフトウェアでは、ある程度のシグナリングの冗長性がすでに考慮され、なくされている。たとえば、JCTVC−Q0094では、SPointフラグはブロックの最初の行のサンプルに対してはシグナリングされず、それは、パレットモードを用いてコーディングされたブロックは通常、現在のブロックを予測するために上側の隣接ブロックからの再構築されたサンプルを使用できないからである。上側の隣接ブロックは一般に、あるブロックに隣接しその上に位置するブロックを指し得る。同様に、現在コーディングされているサンプルに先行するサンプルのためのモードがCopyFromTopである場合、現在のピクセルのためのモードはCopyFromTopではあり得ない。
[0094]しかしながら、本開示は、他のシグナリングの冗長性および/または非効率性を認識しており、これらが全体的に、または選択的になくされ得る。以下でより詳細に説明されるように、本技法は、大きく歪みを引き起こすことなく、ビデオコーディングのビットレートの効率性を向上させる。一例として、現在のサンプルのすぐ上にあるサンプルがエスケープサンプルである場合、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードを使用して現在のサンプルをコーディングしないように構成され得る。この場合、ビデオエンコーダ20はサンプルのためのSPointをシグナリングしなくてよく、ビデオエンコーダ20およびビデオデコーダ30は、必要であれば、Valueモードに等しいものとしてSPointフラグを推測することができる。
[0095]別の例では、本開示の技法によれば、以前のサンプルも、ブロック中で現在のサンプルのすぐ上にあるサンプルもエスケープサンプルではなく、以前のサンプルおよび上のサンプルが同じパレットインデックスを有する場合、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードを使用して現在のサンプルをコーディングしないように構成される。これは、CopyFromTopモードでは、現在のサンプルのインデックスが以前のサンプルと同じであるからである。以前のサンプルのモードがValueモードであれば、Valueモードと関連付けられるランは、現在のサンプルを組み込むように1だけ延長されていたであろう。一方、以前のサンプルのモードがCopyFromTopであった場合、ビデオエンコーダ20およびビデオデコーダ30は、上で述べられたように、CopyFromTopモードを使用して現在のサンプルをコーディングしないように構成され得る。したがって、この場合、ビデオエンコーダ20は現在のサンプルのためのSPointフラグをシグナリングしなくてよく、ビデオエンコーダ20およびビデオデコーダ30は、必要であれば、Valueモードに等しいものとしてSPointフラグを推測することができる。
[0096]別の例では、本開示の技法によれば、以前のランが、コーディングされているブロックの幅から1を引いたもの以上である場合、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードを使用して現在のサンプルをコーディングしないように構成され得る。上で説明されたように、CopyFromTopモードはCopyFromTopモードの後に来ることができないので、ビデオエンコーダ20およびビデオデコーダ30は、以前のサンプルと関連付けられるモードがCopyFromTopモードを使用してコーディングされる場合、現在のサンプルからのモードはCopyFromTopモードを使用してコーディングされ得ないと推測し得る。以前のランがValueモードを使用してコーディングされ、以前のランがブロックの幅から1を引いたもの以上であった場合、ビデオエンコーダ20およびビデオデコーダ30は、(上で説明された例と同様の方式で)以前のサンプルのためのパレットインデックスおよび現在のサンプルのすぐ上のサンプルのためのパレットインデックスが同じであると決定するように構成され得る。この場合、現在のサンプルが同じインデックスを有し得なければ、CopyFromTopモードを不可能にする。したがって、この場合、ビデオエンコーダ20は現在のサンプルのためのSPointフラグをシグナリングしなくてよく、ビデオエンコーダ20およびビデオデコーダ30は、必要であれば、Valueモードに等しいものとしてSPointフラグを推測することができる。
[0097]別の例では、本開示の態様によれば、明示的エスケープシグナリングを使用するとき、コーディングされているブロックに対してパレットサイズが1である場合、ビデオエンコーダ20およびビデオデコーダ30は、2013年7月12日に出願された米国仮出願第61/845,824号、2013年11月1日に出願された米国仮出願第61/899,048号、または2013年12月6日に出願された米国仮出願第61/913,040号において説明されるパレットインデックスなどの、いくつかのパレットインデックスをコーディングしないように構成され得る。加えて、ビデオエンコーダ20はSPointフラグをコーディングしないように構成されてよく、それは、ビデオエンコーダ20およびビデオデコーダ30が、必要であれば、Valueモードに等しいものとしてSPointフラグを推測することができるからである。これは、現在のサンプルがエスケープサンプル(たとえば、ブロックをコーディングするためのパレットにおいて表される色値を有しないサンプル)としてコーディングされない場合、現在のサンプルのためのパレットインデックスはすでに知られており、(唯一の可能なパレットインデックスとして)0に等しく導出される。この場合、ランだけがシグナリングされる。CopyFromTopモードとValueモードを区別することは必要ではなく、それは両方のモードが同一の結果を与えるからである。同様に、暗黙的エスケープシグナリングでは、パレットサイズが2であるとき、ビデオエンコーダ20は、ValueモードとEscapeモードを区別するためにパレットインデックスをシグナリングし得るが、SPointフラグのシグナリングは上と同じ理由で必要ではない。
[0098]本開示の技法はまた、Valueモードと、CopyFromTopモードと、Transition Runモードとを使用するときの冗長性をなくすために使用され得る。したがって、本技法は、歪みを大きく引き起こすことなくビデオコーディングのビットレートの効率性を向上させ得る。説明を目的とする例では、現在のサンプルはValueモードでコーディングされ、Transition Runモードは使用が可能ではない(たとえば、CopyFromAboveモードおよびValueモードだけが利用可能である)。この例では、以前のサンプルのモードがValueであるとき、現在のサンプルのインデックスは以前のサンプルのインデックスと同じではあり得ず、それ以外のとき、現在のサンプルは以前のValueモードに含められ、Valueモードのためのランは1だけインクリメントされる。同様に、以前のサンプルのモードがCopyFromTopであるとき、コーディングされるべき現在のサンプルのインデックスは上のサンプルと同じではあり得ず、それ以外のとき、現在のサンプルはCopyFromTopモードを用いてコーディングされ、場合によってはCopyFromTopモードのためのランは1だけインクリメントされる。
[0099]上で説明された関係に留意して、ビデオエンコーダ20およびビデオデコーダ30は、現在のサンプルのインデックスが以前のサンプルのインデックスより大きいとき(たとえば、以前のサンプルがValueモードにある場合)、または一番上のサンプルのインデックスより大きいとき(たとえば、以前のサンプルがCopyFromTopモードにある場合)、現在のサンプルのインデックスを1だけ減らすことができる。このプロセスは、C.Gisquet他、「AHG10: Palette Index Coding」、JCTVC−Q0064、バレンシア、スペイン、2014年3月27日〜4月4日(以後JCTVC−Q0064)において記述されている。また、以前の条件が真である(現在のインデックスが以前の左または上のパレットインデックスよりも大きい)かどうかとは無関係に、最大の可能なパレットインデックスの数は1だけ減らされ得る。たとえば、インデックスをコーディングするために可変長符号(たとえば、トランケーテッド・バイナリ符号(truncated binary code)など)を使用するとき、パレットエントリーの数は1だけ減らされ得る。
[0100]本開示の態様によれば、上で説明されたプロセスの代わりに、またはそれに加えて、Transition Runモードを使用するとき、Valueモードにおけるインデックス調整プロセスがさらに修正され得る。たとえば、本開示の態様によれば、サンプルがブロック中の最初のサンプルではなく、以前のサンプルがエスケープサンプルとしてコーディングされない場合、ビデオエンコーダ20およびビデオデコーダ30は、以下で説明されるインデックス調整プロセスを実行することができる。
[0101]本開示の態様によれば、以前のサンプルがValueモードまたはTransition Runモードでコーディングされる場合、ビデオエンコーダ20およびビデオデコーダ30は、パレットエントリーの数を1だけ減らすように構成され得る。加えて、インデックス値が以前のサンプルのインデックス値(インデックスまたは遷移インデックス)以上である場合、ビデオエンコーダ20およびビデオデコーダ30は、現在のインデックス値を1だけ減らすように構成され得る。本開示は、このデクリメントされた値を調整されたインデックス値と呼び得る。次いで、以前のサンプルのインデックス値が遷移インデックスに等しくなく、パレットエントリーの数が1より大きい場合、ビデオエンコーダ20およびビデオデコーダ30は、変数「update」を1に設定し、それ以外の場合は「update」を0に設定するように構成され得る。updateが1に等しい場合、ビデオエンコーダ20およびビデオデコーダ30はさらに、パレットエントリーの数を1だけ減らすことができる。本開示は、パレットエントリーのデクリメントされた数を、調整されたパレットサイズと呼び得る。
[0102]加えて、遷移インデックスが以前のサンプルのインデックス値以上である場合、ビデオエンコーダ20およびビデオデコーダ30は、遷移インデックスを1だけ減らすように構成され得る。本開示は、デクリメントされた遷移インデックスを調整された遷移インデックス値と呼び得る。updateが1に等しく、調整されたインデックス値が調整された遷移インデックス値より大きい場合、ビデオエンコーダ20およびビデオデコーダ30は、調整されたインデックス値を1だけさらに減らすように構成され得る。加えて、ビデオエンコーダ20およびビデオデコーダ30は、調整されたパレットサイズが1より大きい場合にだけ、最後のインデックス調整を実行するように構成され得る。これは、調整されたパレットサイズが1より大きい場合、調整されたインデックス値がシグナリングされるだけであり得るからである。
[0103]調整されたパレットサイズが1より大きい場合、ビデオエンコーダ20は、調整されたインデックス値のインジケーションを符号化し、パレットインデックスの最大の可能な数が調整されたパレットサイズに等しい可能性があることを考慮し得る。この場合、ビデオエンコーダ20およびビデオデコーダ30は、本明細書で説明されるトランケーテッド・バイナリ・コーディング(truncated binary coding)などの、トランケーテッド・バイナライゼーション(truncated binarization)をコーディングのために使用するように構成され得る。
[0104]いくつかの例では、本開示の態様によれば、上で説明されたプロセスと同様のプロセスが、現在のサンプルのすぐ上のピクセルのために使用されるピクセル値とモードとを確認することによって、実行され得る。すなわち、現在のピクセルの左に位置するピクセルに関して上で説明されたプロセスが代わりに、上側の隣接ピクセルのために実行されてよく、ここで、上で説明された左のサンプル値およびモードは上のピクセル値およびモードと置き換えられる。
[0105]たとえば、サンプルが最初の行になく、以前のサンプルがCopyFromTopモードでコーディングされ、上のサンプルがエスケープサンプルとしてコーディングされない場合、ビデオエンコーダ20およびビデオデコーダ30は、パレットエントリーの数を1だけ減らすように構成され得る。加えて、現在のインデックス値がすぐ上のサンプルのインデックス値以上である場合、ビデオエンコーダ20およびビデオデコーダ30は、現在のインデックス値を1だけ減らすように構成され得る。やはり、このデクリメントされたインデックス値は調整されたインデックス値と呼ばれ得る。次いで、すぐ上のサンプルのインデックス値が遷移インデックスに等しくなく、パレットエントリーの数が1より大きい場合、ビデオエンコーダ20は、変数updateを1に設定し、それ以外の場合はupdateを0に設定することができる。
[0106]updateが1に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、パレットエントリーの数を1だけさらに減らすように構成されてよく、これは、調整されたパレットサイズと呼ばれ得る。加えて、遷移インデックスが上のサンプルのインデックス値以上である場合、ビデオエンコーダ20およびビデオデコーダ30は、遷移インデックスを1だけ減らすように構成されてよく、これは、調整された遷移インデックス値と呼ばれ得る。updateが0に等しく、調整されたインデックス値が調整された遷移インデックス値より大きい場合、ビデオエンコーダ20およびビデオデコーダ30は、調整されたインデックス値を1だけ減らすように構成され得る。加えて、調整されたパレットサイズが1より大きい場合にだけ、最後のインデックス調整が実行されてよく、それは、調整されたパレットサイズが1より大きい場合、調整されたインデックス値だけが通常はシグナリングされるからである。
[0107]調整されたパレットサイズが1より大きい場合、ビデオエンコーダ20は、調整されたインデックス値のインジケーションを符号化するように構成されてよく、いくつかの例では、調整されたパレットサイズに等しいパレットインデックスの最大の可能な数を考慮することができる。この場合、ビデオエンコーダ20およびビデオデコーダ30は、本明細書で説明されるトランケーテッド・バイナリ・コーディング(truncated binary coding)などの、トランケーテッド・バイナライゼーション(truncated binarization)を使用するように構成され得る。
[0108]Transition Runモードに関連するパレットインデックスのシグナリングにおける冗長性の除去が、上で説明された。しかしながら、これらの技法は、以下で、ならびに、2014年5月23日に出願された米国仮出願第62/002,717号および2014年6月9日に出願された米国仮出願第62/009,772号において説明されるような、Limited Run方法と組み合わされ得る。この場合、あるパレットインデックス値を超えると、ランは常に0に等しいので、そうしたパレットインデックスに対しては、ビデオエンコーダ20は、ラン値のインジケーションを符号化しないように構成され得る。むしろ、ビデオエンコーダ20およびビデオデコーダ30は、ラン値を0に等しいものとして導出するように構成され得る。この組合せでは、Transition Runモードに関して上で説明された技法は変更されないままである。すなわち、たとえば、上で説明された冗長性除去技法は、Limited Runモードでも使用され得る。
[0109]加えて、または代わりに、本開示の技法は、規格提案文書、Guillaume Laroche他、「AHG10: Run Coding for Palette Mode」、JCTVC−Q0066、バレンシア、スペイン、2014年3月27日〜4月4日(以後JCTVC−Q0066)において提案されるような、Limited Run技法とも組み合わされ得る。この例では、制限インデックスも指定される。しかしながら、上で説明されたlimited run技法との1つの違いは、制限インデックスよりも大きいパレットインデックスも1以上のランを有し得るということである。しかしながら、ビデオエンコーダ20はランをシグナリングしなくてよい。この第2のLimited Run技法を実施するとき、本開示の冗長性除去技法は、以前のピクセルのインデックス値が制限インデックス値以下である場合、または、上のピクセルのインデックス値が制限インデックス値以下である場合にのみ適用され得る。
[0110]上で説明された技法は全般に、ビデオエンコーダ(ビデオエンコーダ20など)に関して説明される。(たとえば、ビデオデコーダ30によって実装されるような)デコーダ側では、エンコーダ側と同じ条件を使用して、ビデオデコーダ30も、パレットエントリーの数と遷移インデックスとを調整することができる。ビデオデコーダ30は次いで、調整された数のパレットエントリーを使用してインデックスを復号することができる。復号されたインデックスは、エンコーダ側と同じ条件を使用して、(デクリメントされる代わりに)インクリメントされ得る。
[0111]説明されるいくつかの技法は、CopyFromTopモードが可能ではない事例において冗長性を減らすので、SPointフラグのシグナリングは、ビデオエンコーダ20およびビデオデコーダ30がValueモードを推測し得るように修正され得る。本開示の態様によれば、冗長性低減技法は、Transition Runモードも使用されている場合に拡張され得る。この場合、CopyFromTopモードは、以下の条件のいずれかが真であれば可能ではない。
1.サンプルが最初の行にある。
2.以前のサンプルのモードがCopyFromTopである。
3.上のピクセルがEscapeモードでコーディングされ、サンプルが最初の行になく、以前のサンプルがCopyFromTopモードでコーディングされない。
4.上のサンプルおよび以前のサンプルが同じインデックスを有し、以前のサンプルがEscapeモードでコーディングされない。
[0112]本開示の技法はまた、Escapeパレットモードのためのエスケープフラグを明示的にシグナリングするための代替形態を提供する。たとえば、明示的エスケープシグナリングを用いてSPointフラグの前にエスケープフラグをシグナリングする代わりに、本開示の態様によれば、フラグのセマンティクスを変更しながら、フラグの順序も交換され得る。この場合、ビデオエンコーダ20は、ビットストリームにおいてSPointフラグを最初にシグナリングし得る。この例では、1に等しいSPointフラグはValueモードを示し得るが、0に等しいSPointフラグは、現在のサンプルのためのパレットモードがCopyFromTopまたはEscapeのいずれかであることを示し得る。加えて、SPointフラグが1に等しいとき、ビデオエンコーダ20は、CopyFromTopモードとEscapeモードを区別するためにエスケープフラグをシグナリングし得る。
[0113]上の例では、ビデオエンコーダ20およびビデオデコーダ30は、上で説明されたフラグの少なくとも1つまたは上で説明されたフラグ(たとえば、SPointフラグまたはエスケープフラグ)の両方をコーディングするために、CABACを使用するように構成され得る。代替的に、ビデオエンコーダ20およびビデオデコーダ30は、コンテキストコーディングされるビンの数を減らすために、CABACバイパスモードを使用してそのようなフラグをコーディングするように構成され得る。
[0114]上で説明されたように、CopyFromTopモードは、ある条件のもとでは可能ではないことがある。そのような場合、代替的なシグナリング方法(たとえば、フラグを交換することなど)を使用するとき、ビデオエンコーダ20は、エスケープフラグをシグナリングすることなくSPointフラグだけをシグナリングするように構成され得る。この場合、SPointフラグは異なるセマンティクスを有し得る。たとえば、1に等しいSPointフラグはまだ、モードがValueモードであることを示し得るが、0に等しいSPointフラグは、Escapeモードを示し得る。SPointフラグがCABACを使用してコンテキストコーディングされる場合、CopyFromTopモードが不可能であるときにSPointフラグの値をコーディングするために、追加の別のコンテキストが使用され得る。パレットサイズが1でありescapeモードが使用される場合、上で説明されたように、ビデオエンコーダ20およびビデオデコーダ30は、代替的なシグナリング方法を使用するとき、SPointフラグのコーディングをスキップするように構成され得る。
[0115]本開示の技法はまた、Escapeパレットモードのためのエスケープフラグをシグナリングするための、(たとえば、JCTVC−Q0094に代わる)別の代替的なシグナリング技法を提供する。たとえば、JCTVC−Q0094では、参照ソフトウェアにおいてある程度のシグナリングの冗長性が考慮され、なくされている。一例として、現在のサンプルをコーディングするとき、以前のサンプルのパレットモードがCopyFromTopである場合、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードを使用して現在のピクセルをコーディングできない。同様に、以前のサンプルのモードがパレットインデックス「X」を伴うValueモードである場合、ビデオエンコーダ20およびビデオデコーダ30は、同じパレットインデックス「X」を伴うValueモードを使用して現在のピクセルをコーディングできない。構文解析の段階において(たとえば、ビデオデコーダ30において符号化されたビットストリームからのシンタックス要素を構文解析するとき)、ビデオデコーダ30は、ビットストリームを適切に読み取るためにどのシンタックス要素が許可されているかを決定するために、上で述べられた条件を確認する。多数のそのような条件が確認されるべきである場合、この確認プロセスは負担になり得る。
[0116]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、Escapeモードを暗黙的にシグナリングするための上で述べられた冗長性を「再使用」するように構成され得る。たとえば、ブロックの現在のサンプルをコーディングするとき、以前のサンプルがCopyFromTopモードを使用してコーディングされ、現在のピクセルのモードもCopyFromTopとしてシグナリングされる場合、ビデオデコーダ30は、現在のブロックのモードがEscapeモードであると推測し得る。すなわち、ビデオエンコーダ20は、Escapeモードをシグナリングするために、行の中の2つのサンプルがCopyFromTopモードを用いてコーディングされているという冗長性を使用し得る。同様に、以前のサンプルから現在コーディングされているサンプルまでのモードがパレットインデックス「X」を伴うValueモードであり、シグナリングされるモードが同じパレットインデックス「X」を伴うValueモードである場合、ビデオデコーダ30は、現在のブロックのモードをEscapeモードとして推測し得る。同様に、上で説明された他の冗長性もこの方法で利用され得る。
[0117]上で説明された例では、冗長性に基づいてEscapeモードをシグナリングすることは、ビデオエンコーダ20がEscapeモードをシグナリングし得る可能な状況のすべてを含むとは限らない。したがって、これらの技法は、Escapeモードをシグナリングするための補助的な方法として使用され得る。他の例では、本技法はビットストリームに対して課され得るので、Escapeモードはこれらの制約された状況だけにおいてシグナリングされ得る。
[0118]本開示の技法はまた、0に等しいパレットサイズに対してサンプルがエスケープサンプルであることをシグナリングすることに関する。たとえば、本開示の態様によれば、現在コーディングされているブロックと関連付けられるパレットのパレットサイズが、明示的エスケープシグナリングを使用するとき0に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、ブロック中のサンプルのすべてがエスケープサンプルとしてコーディングされると推測するように構成され得る。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、ビットストリームにおいてEscapeモードを表す専用のシンタックスを符号化または復号することなく、ブロック中のすべてのサンプルがエスケープサンプル(たとえば、ブロックをコーディングするためのパレットにおいて表される色値を有しないサンプル)としてコーディングされると決定するように構成され得る。同様に、現在コーディングされているブロックと関連付けられるパレットのパレットサイズが、暗黙的エスケープシグナリングを使用するときに1に等しい(たとえば、上で説明されたように、パレットの唯一のインデックスが、Escapeモードをシグナリングするために使用される追加のインデックスである)場合、ビデオエンコーダ20およびビデオデコーダ30は、ブロック中のサンプルのすべてがエスケープサンプルとしてコーディングされると推測するように構成され得る。
[0119]上で説明された例の両方において(たとえば、明示的エスケープシグナリングと暗黙的エスケープシグナリングの両方に対して)、ビデオエンコーダ20およびビデオデコーダ30は、ブロックの残りのためのいくつかのパレットベースのシンタックスのコーディングをスキップすることができる。たとえば、明示的エスケープシグナリングでは、ビデオエンコーダ20は、ブロックのサンプルのためのエスケープフラグをシグナリングしなくてよい。加えて、明示的エスケープシグナリングと暗黙的エスケープシグナリングの両方に対して、ビデオエンコーダ20は、(暗黙的エスケープシグナリングと明示的エスケープシグナリングの両方に対する)SPointフラグをシグナリングしなくてよい。すなわち、ブロックのためのすべてのサンプルがエスケープサンプルであると推測され得るので、ビデオエンコーダ20は、CopyFromTopモードとValueモードを区別するためにSPointフラグをシグナリングする必要がない。ビデオデコーダ30は同様に、そのようなシンタックスの復号をスキップすることができ、これは、ビットレートとコーディングの効率を向上させ得る。
[0120]代替的な例では、ビデオエンコーダ20およびビデオデコーダ30は、規範的な方式でパレットサイズを少なくとも1となるように制約し得る。この例では、ビデオエンコーダ20は、(パレットサイズ−1)がシグナリングされるように、パレットサイズのシグナリングを修正するように構成され得る。たとえば、(たとえば、図4の例に関してより詳細に説明されるように)パレット予測子が使用されるとき、パレット予測子の各エントリーに対して、ビデオエンコーダ20は、それぞれのパレット予測子エントリーが現在のブロックのパレットに含まれるかどうかを示すために、1ビットのフラグを符号化することができる。これらのエントリーは、予測されるパレットエントリーと呼ばれ、パレット予測バイナリベクトル(たとえば、1ビットのフラグの列)によって示される。ビデオエンコーダ20はまた、予測されるエントリーに後続する新たなパレットエントリーの数をシグナリングすることができる。他の例では、ビデオエンコーダ20は、予測されるエントリーの前の新たなパレットエントリーの数をシグナリングすることができる。いずれの場合も、予測されるパレットエントリーの数が0である場合、ビデオエンコーダ20およびビデオデコーダ30は、新たなパレットエントリーの数をコーディングする代わりに、(新たなパレットエントリーの数−1)を示すデータをコーディングするように構成され得る。
[0121]別の例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットサイズが0に等しくならないように、パレットモードを制約するように構成され得る。たとえば、この制約は、ビットストリーム制約として実現されてよく、すなわち、ビットストリームは、パレットサイズが0に等しいパレットコーディングされたブロックを含んではならない。
[0122]本開示の技法はまた、パレットサイズをシグナリングすることに関する。たとえば、現在のブロック(たとえば、ビデオエンコーダ20またはビデオデコーダ30によって現在コーディングされているCU)のパレットサイズは、(たとえば、2014年4月3日に出願された米国出願第14/244,688号および2014年4月3日に出願された米国出願第14/244,711号において開示されるように)明示的にシグナリングされ得る。そのような例では、パレットサイズは、予測されたパレットエントリー(たとえば、パレット予測子を使用して決定される)と新たなパレットエントリー(たとえば、ビットストリームにおいて明示的にシグナリングされるような)の両方を含む。
[0123]本開示の態様によれば、パレットサイズがシグナリングされる場合、新たなエントリーの数をシグナリングする必要はないことがあり、それは、ビデオエンコーダ20およびビデオデコーダ30が、予測されるエントリーの数およびパレットサイズから1つのブロックのための新たなパレットエントリーの数を導出するように構成され得るからである(たとえば、パレットサイズ−予測されたエントリーの数=新たなエントリーの数)。加えて、ビデオエンコーダ20およびビデオデコーダ30は、パレットサイズがシグナリングされ、現在のブロックのためのパレットを構築するときにそのシグナリングされた数に達したとき、以前のパレットのエントリーの予測を終了するように構成され得る。
[0124]いくつかの例では、パレットサイズは以前のパレットから予測されてよく、ビデオエンコーダ20は差分のみをシグナリングするように構成されてよい。ビデオエンコーダ20およびビデオデコーダ30は、指数ゴロム符号、トランケーテッド・ユーナリー(truncated unary)符号または固定長符号を使用して、あるブロックのパレットサイズと予測されるパレットサイズとの差をコーディングするように構成され得る。いくつかの事例では、ビデオエンコーダ20およびビデオデコーダ30は、コーディングされているブロックサイズに予測が依存するようにする(たとえば、それに基づくようにする)ように構成され得る。たとえば、8×8のブロックでは、パレットサイズは、パレットモードを使用してコーディングされた最新の8×8のブロック(たとえば、走査順序において現在のブロックよりも前にある直近にコーディングされた8×8)と関連付けられるパレットから予測され得る。同様に、ビデオエンコーダ20およびビデオデコーダ30は、以前にコーディングされた16×16のブロックからのパレットに基づいて、16×16のブロックのパレットサイズを予測するように構成されてよく、同様の関係は他のサイズのブロックに拡張されてよい。代替的に、別の例では、パレットサイズは、現在のブロックのサイズ以下のサイズを用いてコーディングされた最新のブロックから予測され得る。
[0125]本開示の技法はまた、最大パレットサイズおよび/または最大パレット予測子サイズをシグナリングすることに関する。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータをコーディングするように構成され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、SPSからそのようなデータをコーディングするように構成され得る。最大パレットサイズおよび/または最大パレット予測子サイズを示すデータをコーディングすることで柔軟性をもたらすことができ、たとえば、ビデオエンコーダ20およびビデオデコーダ30が、異なるプロファイル、レベル、ビット深度、ブロックサイズなどに対して異なるサイズのパレットとパレット予測子とを使用することが可能になる。ビデオコーディング規格の文脈では、プロファイルは、アルゴリズム、機能、またはツール、およびそれらに適用される制約のサブセットに対応し得る。たとえば、プロファイルは、ある項目によって指定されたビットストリームシンタックス全体のサブセットであり得る。レベルは、たとえば、ピクチャの解像度、ビットレート、およびブロック処理レートに関連し得る、デコーダメモリおよび計算などの、デコーダのリソース消費の制限に対応し得る。プロファイルはprofile_idc(プロファイルインジケータ)値でシグナリングされ得るが、レベルはlevel_idc(レベルインジケータ)値でシグナリングされ得る。
[0126]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、たとえば新たなパレットエントリーの数をシグナリングする際に、パレットモードと関連付けられる要素とフラグとを決定するために、最大パレットサイズに関する情報を使用するように構成され得る。ある例として、最大の可能なパレットサイズはMAX_PLT_SIZEによって示されてよく、これはビデオエンコーダ20によって符号化され、ビデオデコーダ30によって復号され得る。同様に、パレット予測子ベクトルの最大の可能なサイズはMAX_PLT_PREDICTOR_SIZEによって示されてよく、これはビデオエンコーダ20およびビデオデコーダ30によるデコーダによって符号化され得る。
[0127]別の例として、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、パレット予測バイナリベクトル(たとえば、これは、現在のブロックをコーディングするためのパレットに複製されるパレット予測子からのエントリーの数を表し得る)において「1(ones)」の数を示すデータをコーディングし得る。いくつかの事例では、ビデオエンコーダ20およびビデオデコーダ30は、予測されたパレットエントリーの数を示すためにシンタックス要素numPredPaletteをコーディングするように構成され得る。numPredPaletteの値がMAX_PLT_SIZE(すなわち、最大パレットサイズ)の値に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、新たなパレットエントリーの数のコーディング全体をスキップするように構成され得る。そうではなく、numPredPaletteの値がMAX_PLT_SIZEの値未満である場合、ビデオエンコーダ20およびビデオデコーダ30は、新たなエントリーの数を示すデータをコーディングするために、新たなパレットエントリーの数の最大の可能な値である(MAX_PLT_SIZE−numPredPalette)に基づくトランケーテッド・バイナライゼーション(truncated binarization)を使用することができる。
[0128]一般に、トランケーテッド・バイナライゼーションは、一意な復号可能性を維持しながらパラメータの二進化方法において使用される一部のコードワードの長さを減らすことによって、シグナリングされる特定のパラメータ(新たなパレットエントリーの数など)の最大の可能な値についての情報を使用する任意の技法を含み得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、所与のパラメータ(たとえば、新たなパレットエントリーの数など)の最大値を使用して、トランケーテッド・バイナリ符号を構築するように構成され得る。トランケーテッド・バイナリ・コーディングのための例示的な技法は、http://en.wikipedia.org/wiki/Truncated_binary_encodingにおいて記述されている。
[0129]同様に、ビデオエンコーダ20およびビデオデコーダ30は、新たなパレットエントリーの数の最大の可能な値に基づいて、新たなパレットエントリーの数をシグナリングして復号するために、トランケーテッド・ユーナリー符号または指数ゴロム符号またはゴロム−ライス符号を使用することができる。たとえば、(MAX_PLT_SIZE−numPredPalette)=3である場合、ビデオエンコーダ20は、トランケーテッド・ユーナリー符号を使用して、3を、(たとえば、通常のユーナリー符号を使用するときにシグナリングされるような)0001ではなく、000としてシグナリングすることができる。トランケーテッド指数ゴロム符号またはトランケーテッドゴロム−ライス符号の場合、ビデオエンコーダ20およびビデオデコーダ30は、最大値を含む間隔のためのプレフィックスの長さを1だけ減らすように構成され得る。したがって、ビデオエンコーダ20およびビデオデコーダ30は、000...001から000...000へとプレフィックスを変更するように構成され得る。同様に、ビデオエンコーダ20およびビデオデコーダ30は、最大値に応じて、その間隔のための二進化方法においてサフィックスビットの数を減らすように構成され得る。
[0130]大きいブロック(および/または大きいCU)では、パレットサイズは最大パレットサイズである傾向がある。したがって、いくつかの場合、ビデオエンコーダ20およびビデオデコーダ30は、通常の方法の逆で、すなわち、より短いコードワード長が(MAX_PLT_SIZE−numPredPalette)のより大きい値に割り当てられ、より長いコードワード長が(MAX_PLT_SIZE−numPredPalette)のより小さい値に割り当てられるようにして、(MAX_PLT_SIZE−numPredPalette)の二進化をマッピングするように構成され得る。いくつかの例では、ユーナリー/トランケーテッド・ユーナリ符号をシグナリングするために1の前に0を使用する代わりに、または、ゴロム−ライス符号もしくは指数ゴロム符号もしくは連結されたゴロム−ライス符号と指数ゴロム符号の符号のファミリのプレフィックスとして、ビデオエンコーダ20およびビデオデコーダ30は、0の前に1を使用するように構成され得る。
[0131]さらに、他の変形が可能である。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、新たなエントリーの数が0であるか0ではないかを示すためのフラグとして、そのような符号中の最初のビットを解釈するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30は、新たなパレットエントリーの数から1を引いたものとして、残りのビットを解釈するように構成され得る。説明を目的とする例では、新たなパレットエントリーの最大値は8であり、新たなパレットエントリーの数は3である。トランケーテッド・ユーナリー符号を使用して、ビデオエンコーダ20およびビデオデコーダ30は、二進化を0001であるものとして決定するように構成され得る。ビデオエンコーダ20およびビデオデコーダ30が最初のビットを1つのフラグ(たとえば、0:1つまたは複数の新たなパレットエントリー、1:0個の新たなパレットエントリー)として解釈するように構成される場合、ビットの残り(001)は2つの新たなパレットエントリーがあることを示す。トランケーテッド符号を使用するとき、ビデオエンコーダ20およびビデオデコーダ30は、最大値を下方に1だけ調整するように構成され得る。
[0132]他の例では、ビデオエンコーダ20およびビデオデコーダ30は、上で説明されたフラグを逆に解釈するように構成され得る。この場合、ビデオエンコーダ20およびビデオデコーダ30は、1というフラグ値を1つまたは複数の新たなパレットエントリーとして解釈し、0というフラグ値を0個の新たなパレットエントリーとして解釈するように構成され得る。そのような場合、最大値が8である3つの新たなパレットエントリーをシグナリングするためのビットは、1001である。
[0133]他の例では、上で説明されたフラグの概念は、指数ゴロム、ゴロム−ライスなどの他の符号に拡張され得る。たとえば、新たなパレットエントリーの最大値が0ではないとき、ビデオエンコーダ20は、0ではない新たなエントリーがあるかどうかを示すフラグをシグナリングするように構成され得る。0ではない新たなエントリーがあることをフラグが示す場合、新たなエントリーの数から1メイビーを引いたものが、指数ゴロム符号、ゴロム−ライス符号、指数ゴロム符号とゴロム−ライス符号の連結、または同様の符号もしくはそれらのトランケーテッド(truncated)・バージョンを使用してシグナリングされる。トランケーテッド・バージョンが使用されるとき、最大値は1だけ下方に調整され得る。
[0134]いくつかの例では、フラグはCABACを使用してコンテキストコーディングされ得るが、(たとえば、新たなパレットエントリー−1に対する)ビンの残りはバイパスコーディングされ得る。代替的に、フラグ、ならびに(新たなパレットエントリー−1に対する)ビンの残りはすべて、バイパスコーディングされ得る。いくつかの事例では、新たなパレットエントリー−1のための符号からの固定された数のプレフィックスビンがCABACを使用してコンテキストコーディングされてよく、ビンの残りがバイパスコーディングされてよい。
[0135]本開示の態様によれば、上で述べられたように、シンタックス要素MAX_PLT_SIZEは、SPSなどのパラメータセットにおいてシグナリングされ得る。他の例では、シンタックス要素MAX_PLT_SIZEは、VPSにおいて、ピクチャパラメータセット(PPS)において、スライスヘッダにおいて、ブロックレベル(たとえば、LCUまたはCUのためにシグナリングされるシンタックスを用いて)で、または他の箇所でシグナリングされ得る。いくつかの例では、本開示の態様によれば、異なる最大パレットサイズが異なるブロックサイズに対して指定され得る。他の例では、最大パレットサイズは、コーディングされているビデオデータのプロファイルまたはビット深度に依存し得る。たとえば、より大きい入力ビット深度(またはプロファイルビット深度)に対しては、シンタックス要素MAX_PLT_SIZEが、比較的大きい最大パレットサイズを指定するために使用され得る。さらに他の例では、最大パレットサイズは、追加で、または代替的に、コーディングされているビデオデータのクロマフォーマットに依存し得る。たとえば、シンタックス要素MAX_PLT_SIZEは、4:2:0のクロマサブサンプリングフォーマットよりもモノクロ入力に対して比較的小さい最大パレットサイズを指定するために使用されてよく、そして、4:2:0のクロマサブサンプリングフォーマットは、4:4:4のクロマサブサンプリングでフォーマットされた入力よりもサイズが小さいことがある。
[0136]本開示の態様によれば、上で説明された方式でシンタックス要素MAX_PLT_SIZEをシグナリングする代わりに、(MAX_PLT_SIZE−1)を示すデータがシグナリングされてよく、それは、パレットを完全にディセーブルにすることが原因で、0に等しいMAX_PLT_SIZEシンタックス要素が無効であり得るからである。
[0137]別の例では、パレットモードをイネーブル/ディセーブルにするために、VPS、SPS、PPS、またはスライスヘッダレベルで別のフラグをシグナリングする代わりに、ビデオエンコーダ20は、MAX_PLT_SIZEシンタックス要素だけをシグナリングするように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、0というMAX_PLT_SIZEシンタックス要素を、パレットモードをディセーブルにするものとして解釈するように構成され得る。すなわち、パレットサイズシンタックス要素(たとえば、MAX_PLT_SIZEシンタックス要素)を受信すると、ビデオデコーダ30は、パレットモードがディセーブルにされていることをそのシンタックス要素に基づいて決定することができる。MAX_PLT_SIZEシンタックス要素または(MAX_PLT_SIZE−1)は、固定長符号(MAX_PLT_SIZEに対する規範的な制限を仮定する)またはゴロム−ライス符号または指数ゴロム符号を使用してシグナリングされ得る。
[0138]上で述べられたように、本開示の技法はまた、最大パレット予測子サイズを示すデータをコーディングすることを含む。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、最大パレット予測子サイズを示すMAX_PLT_PREDICTOR_SIZEシンタックス要素を、VPS、SPS、PPS、スライスヘッダ、ブロックレベル、または他の箇所においてコーディングするように構成され得る。いくつかの例では、MAX_PLT_PREDICTOR_SIZEシンタックス要素をシグナリングする代わりに、(MAX_PLT_PREDICTOR_SIZE−1)がシグナリングされ得る。さらに他の例では、ビデオエンコーダ20およびビデオデコーダ30は、最大パレット予測子サイズを示す他のデータをコーディングするように構成され得る。
[0139]本明細書で説明される特定の例では、MAX_PLT_PREDICTOR_SIZEシンタックス要素または(MAX_PLT_PREDICTOR_SIZE−1)は、固定長符号(MAX_PLT_PREDICTOR_SIZEに対する規範的な制限を仮定する)またはゴロム−ライス符号または指数ゴロム符号を使用してシグナリングされ得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、MAX_PLT_PREDICTOR_SIZEシンタックス要素によって示されるサイズが(たとえば、MAX_PLT_SIZEシンタックス要素によって示されるような)最大パレットサイズ以上であると仮定する(たとえば、自動的に決定する)ように構成され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、固定長符号またはゴロム−ライス符号または指数ゴロム符号を使用して(MAX_PLT_PREDICTOR_SIZE−MAX_PLT_SIZE)をコーディングするように構成され得る。したがって、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、最大パレット予測子サイズと最大パレットサイズとのデルタ(たとえば、差分)を示すデータをコーディングするように構成され得る。
[0140]最大パレットサイズおよび最大パレット予測子サイズがSPSレベルにおいてシグナリングされる例では、ビデオエンコーダ20およびビデオデコーダ30は、トランケーテッド・ユーナリー符号を使用して新たなエントリーの数を示すデータをコーディングするように構成され得る。新たなエントリーの数と、パレット予測子から予測されるエントリーの数はともに、SPSにおいてシグナリングされる最大パレットサイズを超えてはならない。しかしながら、SPSにおいてシグナリングされる最大パレットサイズが比較的大きい場合、新たなエントリーの数が31を超えることがある。この事例では、トランケーテッド・ユーナリー符号が32ビットの長さを超え、これはソフトウェアおよびハードウェアの実装に望ましくないことがある。
[0141]これに対処するために、本開示の態様によれば、一例では、ビデオエンコーダ20およびビデオデコーダ30は、新たなエントリーの数をシグナリングするための符号の長さが32を超えないように新たなエントリーの数を制約するように構成され得る。たとえば、ユーナリ符号またはトランケーテッド・ユーナリー符号が新たなエントリーの数をシグナリングするために使用される場合、新たなエントリーの数は31に制約され得る。32という長さの制約は一例にすぎないことを理解されたい(たとえば、他の長さの制約が代わりに使用されてよい)。
[0142]HEVCスクリーンコンテンツコーディング拡張テキスト仕様ドラフト2、Rajan Joshi他、「High Efficiency Video Coding (HEVC) Screen Content Coding: Draft 2」、JCTVC−S1005、札幌、日本、2014年6月30日〜7月9日(以後JCTVC−S1005)では、トランケーテッド・ユーナリー符号が、SPSにおいてシグナリングされる最大パレットサイズ(palette_max_size)に最大値が等しい新たなパレットエントリーの数から、パレット予測子から予測されるパレットエントリーの数を引いたものをシグナリングするために使用される。提案される制約を使用すると、最大値は、SPSにおいてシグナリングされる最大パレットサイズ(palette_max_size)とパレット予測子から予測されるパレットエントリーの数との差分と、32のうちの小さい方となるように修正され得る。最大値に対するそのような修正が実行され、JCTVC−S1005のトランケーテッド・ユーナリ・コーディングが使用される場合、新たなパレットエントリーの最大の数は、32ビットを超える符号の長さを伴うことなく(31ではなく)32になり得る。
[0143]いくつかの例では、トランケーテッド・ユーナリー符号の代わりに、ビデオエンコーダ20およびビデオデコーダ30が指数ゴロムまたはそのトランケーテッド・バージョンなどの構成された使用別の符号である場合、最大の許容可能な新たなパレットエントリーは、長さが32を超えないように適切に修正され得る。32というコードワード長を有するいくつかの値がある場合、ビデオエンコーダ20およびビデオデコーダ30は、そのような値の最高値を、新たなパレットエントリーの数に対する最大の許容可能な値となるように選ぶように構成され得る。
[0144]最大の数の新たなパレットエントリーに対する本明細書で説明される制約は、規範的な制約にされ得る。たとえば、ビデオエンコーダ20はその制約とともにビットストリームを生成するように構成されてよく、ビデオデコーダ30は適合するビットストリームにおいてその制約を利用するように構成されてよい。
[0145]本開示の態様によれば、一例では、palette_num_signaled_entriesシンタックス要素のセマンティクスは、JCTVC−S1005から次のように変更され得る。すなわち、シンタックス要素palette_num_signaled_entriesは、明示的にシグナリングされる現在のパレット中のエントリーの数を指定する。シンタックス要素palette_num_signaled_entriesの値は、両端を含めて0から31の範囲にあるものとする。シンタックス要素palette_num_signaled_entriesが存在しないとき、それは0に等しいと推測される。
[0146]加えて、変数CurrentPaletteSizeの値は、現在のパレットのサイズを指定し、次のように導出される。
palette_share_flag[x0][y0]が1に等しい場合、
CurrentPaletteSize=PreviousPalettesize (7−71)
そうではない場合(palette_share_flag[x0][y0]が0に等しい場合)、
CurrentPaletteSize=paletteNumPredictedEntries+
palette_num_signaled_entries (7−72)
[0147]上の例では、CurrentPaletteSizeの値は、両端を含めて0からpalette_max_sizeの範囲にあるものとする。
[0148]本開示の態様によれば、最大値が上で説明された方式で修正される場合、シンタックス要素palette_num_signaled_entriesの値は、値が両端を含めて0から32の範囲にあるように修正され得る。
[0149]別の例では、最大パレットサイズは、SPSにおいてシグナリングされてよく、31に制限されてよい。サイズを制限することは、palette_max_sizeシンタックス要素のセマンティクスにおいてpalette_max_sizeシンタックス要素に対する上限を課すことによって実現され得るので、palette_max_sizeシンタックス要素は最大の許容されるパレットサイズを指定する。palette_max_sizeシンタックス要素の値は、両端を含めて0から31の範囲にあるものとする。存在しないとき、palette_max_sizeシンタックス要素の値は0であるものと推測される。いくつかの例では、値は31ではなく32に制約され得る。
[0150]いくつかの例では、palette_max_sizeシンタックス要素の最大値は、新たなパレットエントリーの数がpalette_max_sizeに等しくなるように制約されてよく、ビデオエンコーダ20およびビデオデコーダ30は、32ビットを超えない符号を使用して新たなパレットエントリーの数をコーディングするように構成され得る。さらに別の例では、新たなパレットエントリーの数の最大値は、最大値をコーディングするために使用される符号とは無関係に、常に31に制限され得る。さらに別の例では、最大値は32に制限され得る。
[0151]本開示の技法はまた、(たとえば、CUまたはLCUのための)ブロックレベルエスケープシグナリングを関連付ける。たとえば、本開示の態様によれば、1つまたは複数のシンタックス要素は、ブロックレベル(たとえば、CUレベル)において、ブロックのサンプルのいずれかがエスケープサンプル(たとえば、ブロックをコーディングするためのパレットにおいて表される色値を有しないサンプル)としてコーディングされるかどうかを示し得る。上で述べられたように、1つまたは複数のシンタックス要素は、ブロックレベルエスケープシンタックスと呼ばれ得る。やはり、ブロックレベルのシンタックスは、スライスヘッダに、またはビデオデータの個々のピクセルとともに含まれ得るシンタックスではなく、CUまたはLCUなどの、ビデオデータのブロックを用いてコーディングまたは決定されるシンタックスを指し得る。
[0152]パレットコーディングを使用してコーディングされるサンプルのブロック中の少なくとも1つのサンプルがエスケープサンプルとしてコーディングされる事例では、本開示の技法は、そのようなモードの存在をシグナリングするために使用され得る。説明を目的とする例では、ビデオエンコーダ20およびビデオデコーダ30は、コーディングされているブロックのサンプルのいずれかがエスケープサンプルとしてコーディングされるかどうかを示すフラグ(ブロックレベルのエスケープフラグと呼ばれ得る)をコーディングするように構成され得る。いくつかの事例では、0というフラグ値は、ブロックのサンプルまたはピクセルのいずれもがエスケープサンプルとしてコーディングされないことを示し得る。1というフラグ値は、ブロックの少なくとも1つのサンプルまたはピクセルがエスケープサンプルとしてコーディングされることを示し得る。したがって、ブロックレベルエスケープシンタックスは、ビデオデータのブロックのすべてのサンプルに対して、ブロックの少なくとも1つのサンプルがブロックのための色値のパレットに対するインデックスをウィズウィズアウト使用してコーディングされるかどうか、たとえばEscapeモードを使用してコーディングされるかどうかを示し得る。
[0153]本開示の態様によれば、上で説明されたシンタックスは、ブロックレベルの指示を伴わずにエスケープサンプルをシグナリングする技法よりも、ビットの節約を実現し得る。たとえば、ブロックのどのサンプルもエスケープサンプルとしてコーディングされないことをシンタックスが示す(たとえば、上で説明されたフラグが0である)事例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのためのエスケープサンプルと関連付けられるいずれの他のシンタックスもコーディングしなくてよい。たとえば、本明細書で説明される明示的エスケープシグナリングに関して、ビデオエンコーダ20およびビデオデコーダ30は、サンプルレベルのエスケープモードフラグのコーディングをスキップすることができる。暗黙的エスケープシグナリングに関して、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルを示すパレットのための追加のインデックスのコーディングをスキップすることができる。この例では、ビデオエンコーダ20およびビデオデコーダ30は、CopyFromTopモードとValueモードを区別するために、SPointフラグをコーディングするだけであり得る。
[0154]いくつかの例では、上で説明されたフラグは、現在コーディングされているブロックまたはCUのためのパレットエントリーの前にシグナリングされ得る。他の例では、上で説明されたフラグは、現在コーディングされているブロックまたはCUのためのパレットエントリーの後にシグナリングされ得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上で説明されたフラグをコンテキストコーディングするように構成され得る。そのような例では、ビデオエンコーダ20およびビデオデコーダ30は、現在のブロックまたはCUのための、ブロックまたはCUのサイズおよび/またはパレットサイズに基づいて、コンテキストを決定することができる。
[0155]いくつかの事例では、エスケープサンプルの使用量はブロックサイズごとに変動し得る。たとえば、エスケープサンプルの使用は、比較的小さいブロックではあまり行われないことがある。そのような事例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロックがエスケープサンプルを含まず上で説明されたフラグのコーディングをスキップすると決定するように構成されてよく、それによりビットの節約を実現する。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、8×8のブロックのためのブロックレベルフラグをコーディングしなくてよく、ここでエスケープサンプルは、より大きいブロックサイズの場合よりも使用される確率がはるかに低い。同様に、大きいブロックサイズ(たとえば、64×64以上のピクセルのブロック)では、ビデオエンコーダ20およびビデオデコーダ30は、エスケープサンプルとしてコーディングされるサンプルが常にあると決定するように構成され得る。そのような事例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのためのブロックレベルエスケープフラグが1に等しい(たとえば、少なくとも1つのサンプルがエスケープサンプルである)と推測し、ブロックレベルエスケープフラグのコーディングをスキップすることができる(たとえば、ブロックレベルエスケープフラグの指示がビットストリームに含まれない)。
[0156]本開示の技法はまた、ブロックのいずれかのサンプルがエスケープサンプルとしてコーディングされるかどうかに基づいて、サンプルのブロックをコーディングすることに関する。たとえば、上で述べられたように、本開示の技法は、パレットコーディングされたブロックのエスケープサンプルとしていずれかのサンプルがコーディングされるかどうかを示すために使用され得る。ブロックがエスケープサンプルを含まない事例では、およびパレットのサイズが1であるとき、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのすべてのサンプルが同じインデックス値(たとえば、パレットの唯一のエントリー)を有すると自動的に決定するように構成され得る。したがって、ビデオエンコーダ20およびビデオデコーダ30はまた、ブロックのパレットインデックスを決定するために使用される他のすべての他のデータのコーディングをスキップすることができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、SPointフラグ、インデックスシグナリング、およびパレットインデックスのランと関連付けられるデータのコーディングをスキップすることができる。
[0157]説明を目的とする例では、ビデオデコーダ30は、エスケープサンプルとしてコーディングされるサンプルが現在のブロック中にないことを示すブロックレベルエスケープフラグを復号することができる(たとえば、フラグは0に等しい)。ビデオデコーダ30はまた、ブロックのためのパレットが単一のエントリーを有することを示すデータ(たとえば、パレットサイズが1であることを示すデータ)を復号し、または、単一のエントリーを有するパレットを復号することができる。この例では、両方の条件が真であると評価された(たとえば、サンプルがエスケープサンプルではなく、パレットサイズが1である)ことに基づいて、ビデオデコーダ30は、ブロックのパレットインデックスのすべてがパレットに含まれる単一のエントリーに等しいと自動的に決定することができる。ビデオデコーダ30はまた、ブロックのパレットインデックスを決定するために使用される他のデータ(たとえば、SPointフラグ、パレットインデックス、およびラン情報など)の復号をスキップすることができる。
[0158]別の例では、本開示の態様によれば、パレットサイズが1であるとき、パレットインデックス0を用いてコーディングされるサンプルのランは、エスケープサンプルによって終了され得る。すなわち、パレットインデックスのランは、エスケープサンプルとしてコーディングされる位置によって中断され得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、SPointフラグのコーディングをスキップするように構成され得る。加えて、この例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットインデックスのためのモードがValueモードであることと、Valueモードのインデックスとを推測するように構成され得る(たとえば、パレット中に1つのエントリーしかなければ、Valueモードのインデックスをシグナリングする必要はないことがある)。この例では、ビデオエンコーダ20およびビデオデコーダ30は、ランの直後のサンプルがエスケープサンプルとしてコーディングされると推測し、エスケープ関連のシンタックスのコーディングをスキップすることができる。
[0159]本開示の技法はまた、パレットコーディングにおけるパレットインデックスのランのラン値を示すデータをコーディングすることに関する。たとえば、上で述べられたように、ラン値は、一緒にコーディングされるパレットコーディングされるブロック中の、特定の走査順序にある連続するサンプルの数(たとえば、サンプルのラン)を示し得る。いくつかの事例では、サンプルのランはパレットインデックスのランとも呼ばれることがあり、それは、ランの各サンプルがパレットに対する関連するインデックスを有するからである。
[0160]ラン値は、同じパレットコーディングモードを使用してコーディングされるパレットインデックスのランを示し得る。たとえば、Valueモードに関して、ビデオエンコーダ20およびビデオデコーダ30は、あるインデックス値と、同じインデックス値を有しそのインデックス値を用いてコーディングされている、ある走査順序にある連続するサンプルの数を示すラン値とを、コーディングすることができる。CopyFromTopモードに関して、ビデオエンコーダ20およびビデオデコーダ30は、上側の隣接サンプル(たとえば、ブロック中の現在コーディングされているサンプルの上に位置するサンプル)のインデックスと、上側の隣接サンプルからインデックス値を同様に複製しそのインデックス値を用いてコーディングされている、ある走査順序にある連続するサンプルの数を示すラン値とに基づいて、現在のサンプル値のためのインデックスが複製されることを示すものをコーディングすることができる。
[0161]たとえば、本開示の態様によれば、ビデオデータのブロック中のパレットインデックスのランを示すデータは、ブロックのための最大の可能なラン値に基づいてコーディングされ得る。すなわち、ビデオエンコーダ20およびビデオデコーダ30は、ピクセルの値をパレット中の色値に関連付けるパレットインデックスと関連付けられるピクセルに対して、ピクセルのパレットインデックスを用いてコーディングされているパレットインデックスのランのランレングスを決定することができる。ビデオエンコーダ20およびビデオデコーダ30はまた、ピクセルのパレットインデックスを用いてコーディングされることが可能である、パレットインデックスの最大のランの最大ランレングスを決定することができる。ビデオエンコーダ20およびビデオデコーダ30は次いで、決定された最大ランレングスに基づいてランレングスを示すデータをコーディングし得る。
[0162]説明を目的とする例では、ビデオデータのブロック中のサンプルの総数はNであってよく、サンプルの各々は0から(N−1)までインデックスを付けられてよい。位置jのサンプルについて、ビデオエンコーダ20およびビデオデコーダ30は、(N−j−1)として最大の可能なラン値を決定することができる。ラン値は、現在のサンプルと同じパレットコーディングモード(たとえば、ValueモードまたはCopyFromTopモード)を用いてコーディングされている後続のサンプルの数を示すことに、留意されたい。本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、トランケーテッド・バイナライゼーションを使用してラン値を示すデータをコーディングし、最大の可能なラン値を考慮するように構成され得る。一般に、トランケーテッド・バイナライゼーションは、一意な復号可能性を維持しながらパラメータの二進化方法において使用される一部のコードワードの長さを減らすことによって、シグナリングされている特定のパラメータ(新たなパレットエントリーの数など)の最大の可能な値についての情報を使用する任意の技法を含み得る。たとえば、ランの最大の可能な値に基づくトランケーテッド・バイナリ符号が使用され得る。同様に、トランケーテッド・ユーナリー符号または指数ゴロム符号またはゴロムライス符号が、ランの最大の可能な値に基づいて、ラン値をコーディングし復号するために使用され得る。いくつかの例では、トランケーテッド・バイナライゼーション、指数ゴロム符号とゴロム−ライス符号の組合せであり得る。
[0163]たとえば、k次の指数ゴロム(EGk)コードワードは、プレフィックスおよびサフィックスという2つの部分から構成される。所与の無符号の整数xについて、EGkコードワードのプレフィックス部分は、次式の値に対応するユーナリー符号からなる。
サフィックス部分は、k+l(x)ビットを使用するx−2k(2l(x)−1)というバイナリ表現として計算される。
[0164]ある例として、以下の表1は、EG0のためのいくつかのコードワードを含む。
[0165]2014年6月20日に出願された米国仮出願第62/019,223号では、ラン値は2次の指数ゴロム符号を使用してコーディングされる。
[0166]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、トランケーテッド指数ゴロム符号を使用してラン値を示すデータをコーディングするように構成され得る。たとえば、k次のトランケーテッド指数ゴロム(TEGk)コードワードはまた、プレフィックスおよびサフィックスという2つの部分から構成される。プレフィックスはユーナリー・プレフィックスであってよく、サフィックスはバイナリ・サフィックスであってよい。たとえば、所与の無符号の整数xおよびその最大の可能なラン値Xmax(たとえば、最大ランレングス)について、EGkコードワードのプレフィックス部分は、次式の値に対応するトランケーテッド・ユーナリー符号からなる。
具体的には、ユーナリー符号の「トレイリング1(trailing one)」は、
であれば回避され得る。
[0167]プレフィックスがトランケートされる(truncated)場合、すなわち、
である場合、TEGkのサフィックス部分は、k+l(x)ビットまたはk+l(x)−1ビットを使用するx−2k(2l(x)−1)というトランケーテッド・バイナリ表現として計算される。トランケーテッド・バイナリ符号の入力のための最大シンボル値は、Xmax−2k(2l(x)−1)である。
[0168]プレフィックスがトランケートされない場合、TEGkのサフィックス部分はEGkと同じ、すなわち、k+l(x)ビットを使用するx−2k(2l(x)−1)というバイナリ表現である。ある例として、以下の表1は、TEG0のためのいくつかのコードワードを含む。
上の表2の例は、トレイリング1の前にある0(たとえば、00...1)の数としてそのプレフィックスを示すが、他の例では、ビデオエンコーダ20およびビデオデコーダ30は、トレイリング0の前にある1(たとえば、11...0)の数をコーディングし得ることを理解されたい。
[0169]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、上で説明されたTEGk符号を使用してラン値をコーディングし得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロック(またはCU)中の現在のピクセル位置に対して、式(Xmax=現在のCU中のピクセルの数−走査順序での現在の位置−1)に基づいて最大ラン値Xmaxを決定することができる。
[0170]別の例では、ラン値がトランケーテッド・ユーナリー・プレフィックスを使用して最初にコーディングされる場合、ビデオエンコーダ20およびビデオデコーダ30は、たとえばトランケートされた値に基づいて、最大ラン値を相応に調整するように構成され得る。たとえば、いくつかの事例では、ビデオエンコーダ20およびビデオデコーダ30は、0より大きい、1より大きい、および2より大きいという、一連の3つのフラグとしてラン値をコーディングするように構成され得る。この例では、シグナリングされたランが2より大きい場合、ビデオエンコーダ20およびビデオデコーダ30は、場合によっては、上で説明された指数ゴロム符号およびゴロム−ライス符号またはTEGk符号の組合せなどの別の二進化方法を用いて、残りの値(たとえば、ラン値−3)をコーディングすることができる。
[0171]しかしながら、(N−j−1)が0に等しい場合、ビデオエンコーダ20およびビデオデコーダ30はランをコーディングしない。同様に、(N−j−1)が1に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、1以上フラグをコーディングするだけであり得る。同様に、(N−j−1)が2に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、1以上フラグと2以上フラグとをコーディングするだけであり得る。同様に、(N−j−1)が3に等しい場合、ビデオエンコーダ20およびビデオデコーダ30は、0より大きいフラグと、1より大きいフラグと、2より大きいフラグとをコーディングするだけであり得る。(N−j−1)が3より大きい場合、0より大きいフラグ、1より大きいフラグ、および2より大きいフラグに加えて、ビデオエンコーダ20およびビデオデコーダ30は、(N−j−4)という最大値まで、残りの値をコーディングし得る。同様の方法で、説明されるプロセスは、3以外のフラグの数字、たとえば、数Mよりも大きいシグナリングされる値を示すフラグを使用するように拡張されてよく、ここでMは0から開始する非負の値であり得る。
[0172]本開示の態様によれば、上の例では、ビデオエンコーダ20およびビデオデコーダ30は、上で説明されたTEGk符号を使用して残りのランレングスをコーディングすることができ、最大のラン値は(現在のCU中のピクセルの数−走査順序における現在の位置−4)に等しい。別の例では、ビデオエンコーダ20およびビデオデコーダ30は、ラン値が0より大きいかどうかを示すフラグをコーディングし、ランレングス−1としての残りの値をコーディングするように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、0より大きいフラグをコーディングし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、最大値が最大ランレングス−1に等しく設定されたTEGk符号を使用して、ランレングス−1を示すデータをコーディングし得る。一例では、ビデオエンコーダ20およびビデオデコーダ30は0に等しくkを設定し得るので、TEGk符号はTEG0符号である。
[0173]他の例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットコーディングのためのシンタックス要素をコーディングするために、上で説明されたTEG符号の任意の順序を使用することができる。ある例では、ビデオエンコーダ20およびビデオデコーダ30は2に等しくkを設定し得るので、TEGk符号はTEG2符号である。
[0174]上の例はパレットコーディングにおいてラン値をコーディングすることに関して説明されたが、ビデオエンコーダ20およびビデオデコーダ30は、パレットコーディングのための他のシンタックスをコーディングするために(TEGk符号などの)符号を使用するように構成され得る。たとえば、以下でより詳細に説明されるように、ビデオエンコーダ20およびビデオデコーダ30は、バイナリパレット予測ベクトル、CopyAboveランレングス、または他の値をコーディングするために、上で説明された符号を使用することができる。
[0175]Joshi他、「Non−SCCE3: Contexts for coding index runs」、ITU−T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のJoint Collaborative Team on Video Coding(JCT−VC)、第18回会合、札幌、日本、2014年6月30日〜7月9日、JCTVC−R0174(以後JCTVC−R0174)において、著者らは、CopyLeftモード(CopyFromTopモードと同様の方式で動作し得る)が使用される場合、ランレングスコードワードのコンテキストがインデックスに依存するようにすることを提案した。しかしながら、本開示の例によれば、現在のランモードがCopyFromAboveである場合、ビデオエンコーダ20およびビデオデコーダ30は、現在コーディングされているピクセルの上に位置するピクセルのインデックス値に基づいて、ランをCABACコーディングするためのコンテキストを決定することができる。この例では、上側の隣接ピクセルが現在のCUの外にあり、ビデオエンコーダ20およびビデオデコーダ30は、対応するインデックスが事前に定められた定数kに等しいと決定することができる。いくつかの例では、定数kは0に等しくてよい。
[0176]いくつかの例では、現在のピクセルをコーディングするためのパレットモードがCopyFromAboveモードである場合、ビデオエンコーダ20およびビデオデコーダ30は、上側の隣接ピクセルが0に等しいインデックスを有するかどうかに基づいて、ランレングスコードワードの最初のビンをコーディングするために、2つのCABACコンテキスト候補の1つを選択することができる。別の例として、現在のピクセルをコーディングするためのパレットモードがCopyPreviousモードである場合、ビデオエンコーダ20およびビデオデコーダ30は、インデックスが0に等しいか、1に等しいか、2に等しいか、または2より大きいかに基づいて、ランレングスコードワードの最初のビンをコーディングするために、4つのCABACコンテキスト候補の1つを選択することができる。
[0177]図2は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図2は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングの文脈において、ビデオエンコーダ20を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0178]ビデオエンコーダ20は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を代表する。たとえば、ビデオエンコーダ20は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなどの、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースのコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードなどの、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。ビデオエンコーダ20は、一例では、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセル位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロック中のピクセル位置の少なくともいくつかをパレット中の選択されたピクセル値にそれぞれ対応するパレット中のエントリーと関連付ける情報をシグナリングするように構成され得る。シグナリングされた情報は、ビデオデータを復号するためにビデオデコーダ30によって使用され得る。
[0179]図2の例では、ビデオエンコーダ20は、予測処理ユニット100と、ビデオデータメモリ101と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構築ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニットと、動き補償ユニットと(図示されず)を含む。ビデオエンコーダ20はまた、本開示で説明されるパレットベースのコーディング技法の様々な態様を実行するように構成される、パレットベースの符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
[0180]ビデオデータメモリ101は、ビデオエンコーダ20のコンポーネントによって符号化されるべきビデオデータを記憶することができる。ビデオデータメモリ101内に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、ダイナミックランダムアクセスメモリ(DRAM)(同期DRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別々のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他のコンポーネントとともにオンチップであるか、またはそれらのコンポーネントに対してオフチップであり得る。
[0181]ビデオエンコーダ20は、ビデオデータを受信することができる。ビデオエンコーダ20は、ビデオデータのピクチャのスライス内の各CTUを符号化することができる。CTUの各々は、ピクチャの等しいサイズのルーマコーディングツリーブロック(CTB)と、対応するCTBとに関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、4分木区分を実行して、CTUのCTBを徐々により小さいブロックに分割することができる。より小さいブロックはCUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUと関連付けられたCTBを4つの等しいサイズのサブブロックに区画することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区画することができ、以下同様である。
[0182]ビデオエンコーダ20は、CUの符号化された表現(すなわち、コーディングされたCU)を生成するために、CTUの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サイズのための非対称区分をサポートすることができる。
[0183]インター予測処理ユニット120は、CUの各PUに対してインター予測を実行することによって、PUのための予測データを生成することができる。PUのための予測データは、PUの予測ブロックとPUの動き情報とを含み得る。インター予測ユニット121は、PUがIスライス中にあるか、Pスライス中にあるか、またはBスライス中にあるかに応じて、CUのPUに対して異なる動作を実行することができる。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測ユニット121は、PUに対してインター予測を実行しない。したがって、Iモードで符号化されたブロックでは、予測ブロックは、同じフレーム内の前に符号化された隣接ブロックからの空間的予測を使用して形成される。
[0184]PUがPスライス中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャリスト(たとえば、「RefPicList0」)中の参照ピクチャを探索することができる。PUの参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含む参照ピクチャ内の領域であり得る。動き推定ユニットは、PUの参照領域を含んでいる参照ピクチャのRefPicList0中での位置を示す参照インデックスを生成することができる。加えて、動き推定ユニットは、PUのコーディングブロックと、参照領域と関連付けられた参照場所との間の空間変位を示すMVを生成することができる。たとえば、MVは、現在の復号されたピクチャ中の座標から参照ピクチャ中の座標までのオフセットを提供する2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として、参照インデックスとMVとを出力することができる。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照場所における実際のまたは補間されたサンプルに基づいて、PUの予測ブロックを生成することができる。
[0185]PUがBスライス中にある場合、動き推定ユニットは、PUについての単予測または双予測を実行することができる。PUについての単予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索することができる。動き推定ユニットは、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUの予測ブロックと参照領域に関連付けられた参照場所との間の空間変位を示すMVと、参照ピクチャがRefPicList0中にあるかRefPicList1中にあるかを示す1つまたは複数の予測方向インジケータとを出力することができる。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成することができる。
[0186]PUについての双方向インター予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0中の参照ピクチャを探索することができ、またPUの別の参照領域についてRefPicList1中の参照ピクチャを探索することができる。動き推定ユニットは、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中での位置を示す参照ピクチャインデックスを生成することができる。加えて、動き推定ユニットは、参照領域と関連付けられる参照場所とPUのサンプルブロックとの間の空間変位を示すMVを生成することができる。PUの動き情報は、PUの参照インデックスとMVとを含み得る。動き補償ユニットは、PUの動きベクトルによって示される参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成することができる。
[0187]本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースのコーディングを実行するように構成され得る。HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUモードの状況において(本開示全体で)本明細書で説明される開示されるプロセスのすべてが、追加で、または代替的に、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0188]パレットベースの符号化ユニット122は、たとえば、パレットベースの符号化モードがたとえばCUまたはPUのために選択されるとき、パレットベースの復号を実行することができる。たとえば、パレットベースの符号化ユニット122は、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロックの位置の少なくともいくつかを選択されたピクセル値にそれぞれ対応するパレット中のエントリーと関連付ける情報をシグナリングするように構成される。様々な機能がパレットベースの符号化ユニット122によって実行されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
[0189]本開示の態様によれば、パレットベースの符号化ユニット122は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。たとえば、本開示の態様によれば、パレットベースの符号化ユニット122は、ビデオデータのブロックのすべてのサンプルに対して、ブロックの少なくとも1つのそれぞれのサンプルが第1のパレットモードを用いてコーディングされるかどうかを示すシンタックス要素の値を決定することができ、第1のパレットモードは、ブロックのための色値のパレットに対するインデックスを使用することなく、ブロックのそれぞれのサンプルをコーディングすることを含む。たとえば、パレットベースの符号化ユニット122は、ブロックの任意のサンプルがエスケープサンプルとして(ブロックをコーディングするためのパレットにおいて表される色値を有しないサンプルとして)符号化されるかどうかを示す、ブロックレベルのシンタックス要素の値を決定することができる。いくつかの例では、パレットベースの符号化ユニット122は、ブロックの任意のサンプルがエスケープサンプルとして符号化されるかどうかを示す、ブロックのためのエスケープフラグを決定することができる。
[0190]加えて、または代替的に、パレットベースの符号化ユニット122は、ビデオデータのブロックをコーディングするための色値のパレットの最大パレットサイズを示すデータと、色値のパレットを決定するためのパレット予測子の最大パレット予測子サイズを示すデータとの少なくとも1つを決定することができる。たとえば、パレットベースの符号化ユニット122は、SPSなどのパラメータセットにそのようなデータを含め得る。
[0191]加えて、または代替的に、パレットベースの符号化ユニット122は、ピクセルをコーディングするための色のパレット中の色値にピクセルの値を関連付けるパレットインデックスと関連付けられるピクセルに対して、ピクセルのパレットインデックスを用いてコーディングされているパレットインデックスのランのランレングスを決定することができる。すなわち、パレットベースの符号化ユニット122は、特定のサンプルのためのインデックス値が、他の後続のパレットインデックスのランを用いて符号化されていると決定することができる。パレットベースの符号化ユニット122はまた、ピクセルのパレットインデックスを用いて符号化されることが可能である、パレットインデックスの最大のランの最大ランレングスを決定することができる。エントロピー符号化ユニット118に関して以下でより詳細に説明されるように、ビデオエンコーダ20は、決定された最大ランレングスに基づいてランレングスを示すデータを符号化することができる。
[0192]イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによって、PU用の予測データを生成することができる。PUのための予測データは、PUの予測ブロックと様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対してイントラ予測を実行し得る。
[0193]PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、PUの予測データの複数のセットを生成するために、複数のイントラ予測モードを使用することができる。イントラ予測処理ユニット126は、PUの予測ブロックを生成するために、隣接PUのサンプルブロックからのサンプルを使用し得る。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば33個の方向のイントラ予測モードを使用することができる。いくつかの例では、イントラ予測モードの数はPUと関連付けられた領域のサイズに依存し得る。
[0194]予測処理ユニット100は、PUのためにインター予測処理ユニット120によって生成された予測データ、またはPUのためにイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUのための予測データを選択することができる。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/歪み測定基準に基づいて、CUのPUの予測データを選択する。選択された予測データの予測ブロックは、本明細書では、選択された予測ブロックと呼ばれ得る。
[0195]残差生成ユニット102は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック、ならびにCUのPUの選択された予測ルーマブロック、予測Cbブロック、および予測Crブロックに基づいて、CUのルーマ残差ブロックと、Cb残差ブロックと、Cr残差ブロックとを生成することができる。たとえば、残差生成ユニット102は、残差ブロックの中の各サンプルが、CUのコーディングブロックの中のサンプルと、CUのPUの対応する選択された予測ブロックの中の対応するサンプルとの差分に等しい値を有するように、CUの残差ブロックを生成し得る。
[0196]変換処理ユニット104は、CUと関連付けられる残差ブロックをCUのTUと関連付けられる変換ブロックに区分するために、4分木区分を実行することができる。したがって、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックと関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも基づかないこともある。「残差4分木」(RQT)として知られる4分木構造は、領域の各々と関連付けられたノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
[0197]変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUの各TUのための変換係数ブロックを生成し得る。変換処理ユニット104は、TUと関連付けられた変換ブロックに様々な変換を適用することができる。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を変換ブロックに適用することができる。いくつかの例において、変換処理ユニット104は変換ブロックに変換を適用しない。そのような例では、変換ブロックは、変換係数ブロックとして処理され得る。
[0198]量子化ユニット106は、係数ブロック中の変換係数を量子化することができる。量子化プロセスは、変換係数の一部またはすべての関連付けられたビット深度を低減し得る。たとえば、nビットの変換係数は量子化の間にmビットの変換係数へとまるめられ(rounded)得、ただし、nはmよりも大きい。量子化ユニット106は、CUと関連付けられた量子化パラメータ(QP)値に基づいて、CUのTUと関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUと関連付けられたQP値を調整することによって、CUと関連付けられた係数ブロックに適用される量子化の程度を調整することができる。量子化は、情報の喪失をもたらすことがあり、したがって、量子化された変換係数は、元の係数よりも精度が低いことがある。
[0199]逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、係数ブロックから残差ブロックを再構築するために、係数ブロックに逆量子化および逆変換を適用することができる。再構築ユニット112は、TUと関連付けられる再構築された変換ブロックを生成するために、再構築された残差ブロックを、予測処理ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに加算することができる。このようにCUの各TUのための変換ブロックを再構築することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構築することができる。
[0200]フィルタユニット114は、CUと関連付けられたコーディングブロックの中のブロッキングアーティファクトを低減するために、1つまたは複数のデブロッキング動作を実行し得る。復号ピクチャバッファ116は、フィルタユニット114が、再構築されたコーディングブロックに対して1つまたは複数のデブロッキング動作を実行した後、再構築されたコーディングブロックを記憶することができる。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を実行するために、再構築されたコーディングブロックを含む参照ピクチャを使用することができる。加えて、イントラ予測処理ユニット126は、CUと同じピクチャ中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ116中の再構築されたコーディングブロックを使用することができる。
[0201]エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能コンポーネントからデータを受信し得る。たとえば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受け取ることができ、予測処理ユニット100からシンタックス要素を受け取ることができる。エントロピー符号化ユニット118は、このデータに対して1つまたは複数のエントロピー符号化演算を実行して、エントロピー符号化されたデータを生成することができる。たとえば、エントロピー符号化ユニット118は、コンテキスト適応型可変長コーディング(CAVLC)演算、CABAC演算、変数−変数(V2V:variable-to-variable)レングスコーディング演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)演算、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算をデータに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。たとえば、ビットストリームはCUのRQTを表すデータを含み得る。
[0202]本開示の態様によれば、エントロピー符号化ユニット118は、図1の例に関して上で説明されたように、TEGk符号を使用してパレットデータをコーディングするように構成され得る。具体的には、本開示の態様によれば、エントロピー符号化ユニット118は、決定された最大ランレングスに基づいてパレットインデックスのランのランレングスを示すデータを符号化することができる。いくつかの例では、エントロピー符号化ユニット118は、TEG2符号を使用して、ランレングスを符号化することができる。
[0203]図3は、本開示の技法を実装するように構成された例示的なビデオデコーダ30を示すブロック図である。図3は、説明の目的で与えられており、本開示において広く例示され説明される技法に対する限定ではない。説明の目的で、本開示は、HEVCコーディングの文脈において、ビデオデコーダ30を説明する。しかしながら、本開示の技法は他のコーディング規格または方法に適用可能であり得る。
[0204]ビデオエンコーダ20は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を代表する。たとえば、ビデオエンコーダ20は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなどの、ビデオデータの様々なブロックを選択的に復号するように構成され得る。非パレットベースのコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードなどの、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。ビデオデコーダ30は、一例では、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセル位置をパレット中のエントリーと関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、パレット中の選択されたピクセル値に基づいてブロックのピクセル値を再構築するように構成され得る。
[0205]図3の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、ビデオデータメモリ151と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構築ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164とイントラ予測処理ユニット166とを含む。ビデオデコーダ30はまた、本開示で説明されるパレットベースのコーディング技法の様々な態様を実行するように構成された、パレットベースの復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
[0206]ビデオデータメモリ151は、ビデオデコーダ30のコンポーネントによって復号されるべき、符号化されたビデオビットストリームなどのビデオデータを記憶することができる。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、チャネル16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、ダイナミックランダムアクセスメモリ(DRAM)(同期DRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別々のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他のコンポーネントとともにオンチップであるか、またはそれらのコンポーネントに対してオフチップであり得る。
[0207]コーディングされたピクチャのバッファ(CPB)は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受け取り、記憶することができる。エントロピー復号ユニット150は、CPBから符号化されたビデオデータ(たとえば、NALユニット)を受け取り、NALユニットを解析(パース)してシンタックス要素を復号することができる。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化されたシンタックス要素をエントロピー復号することができる。
[0208]本開示の態様によれば、エントロピー復号ユニット150は、図1の例に関して上で説明されたように、TEGk符号を使用してパレットデータを復号するように構成され得る。具体的には、本開示の態様によれば、エントロピー復号ユニット150は、決定された最大ランレングスに基づいて、パレットインデックスのラン(たとえば、同じ値を有するインデックスのランまたは上側の隣接インデックスから複製されるインデックスのラン)のランレングスを示すデータを復号することができる。いくつかの例では、エントロピー復号ユニット150は、TEG2符号を使用して、ランレングスを復号することができる。
[0209]予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コーディングされたスライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コーディングされたスライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関するシンタックス要素を含み得る。スライスヘッダ中のシンタックス要素は、スライスを含むピクチャと関連付けられたPPSを識別するシンタックス要素を含み得る。
[0210]ビデオデコーダ30は、ビットストリームからのシンタックス要素を復号することに加えて、区分されていないCUに対して再構築動作を実行し得る。区分されていないCUに対して再構築動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実行することができる。CUの各TUに対して再構築動作を実行することによって、ビデオデコーダ30はCUの残差ブロックを再構築することができる。
[0211]CUのTUに対して再構築動作を実行することの一部として、逆量子化ユニット154は、TUと関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち逆量子化(de−quantize)することができる。逆量子化ユニット154は、量子化の程度を決定するために、また同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、TUのCUと関連付けられたQP値を使用することができる。つまり、圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、利用されるエントロピーコーディングの方法に依存し得る。
[0212]逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUと関連付けられた残差ブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を、係数ブロックに適用することができる。
[0213]イントラ予測を使用してPUが符号化される場合、イントラ予測処理ユニット166は、PUの予測ブロックを生成するためにイントラ予測を実行することができる。イントラ予測処理ユニット166は、空間的に隣接するPUの予測ブロックに基づいて、PU用の予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成するために、イントラ予測モードを使用することができる。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定することができる。
[0214]予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを構築することができる。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PUの動き情報を抽出することができる。動き補償ユニット164は、PUの動き情報に基づいて、PUのための1つまたは複数の参照領域を決定することができる。動き補償ユニット164は、PUの1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUの予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成することができる。
[0215]再構築ユニット158は、CUのTUと関連付けられたルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック、ならびにCUのPUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを、すなわち、イントラ予測データまたはインター予測データのいずれかを適宜使用して、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを再構築することができる。たとえば、再構築ユニット158は、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックのサンプルを予測ルーマブロック、予測Cbブロック、および予測Crブロックの対応するサンプルに加算して、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを再構築することができる。
[0216]フィルタユニット160は、デブロッキング動作を実行して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックと関連付けられたブロッキングアーティファクトを低減することができる。ビデオデコーダ30は、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを、復号ピクチャバッファ162に記憶することができる。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために参照ピクチャを与え得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
[0217]本開示の様々な例によれば、ビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。パレットベースの復号ユニット165は、たとえば、パレットベースの復号モードがたとえばCUまたはPUのために選択されるとき、パレットベースの復号を実行することができる。たとえば、パレットベースの復号ユニット165は、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセル位置をパレット中のエントリーと関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、パレット中の選択されたピクセル値に基づいてブロックのピクセル値を再構築するように構成され得る。様々な機能がパレットベースの復号ユニット165によって実行されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
[0218]パレットベースの復号ユニット165は、パレットコーディングモード情報を受け取り、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上の動作を実行することができる。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または、他のモード情報が異なるモードの使用を示すとき、ビデオデコーダ30は、たとえば、HEVCインター予測コーディングモードまたはイントラ予測コーディングモードなどの非パレットベースのコーディングモードを使用して、ビデオデータのブロックを復号することができる。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。
[0219]本開示の態様によれば、パレットベースの復号ユニット165は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。たとえば、本開示の態様によれば、パレットベースの復号ユニット165は、ビデオデータのブロックのすべてのサンプルに対して、ブロックの少なくとも1つのそれぞれのサンプルが第1のパレットモードを用いてコーディングされるかどうかを示すシンタックス要素の値を決定することができ、第1のパレットモードは、ブロックのための色値のパレットに対するインデックスを使用することなく、ブロックのそれぞれのサンプルをコーディングすることを含む。たとえば、パレットベースの復号ユニット165は、ブロックのいずれかのサンプルがエスケープサンプル(パレットからの色エントリーを使用して再構築され得ないサンプル)として復号されるべきかどうかを示す、ブロックレベルシンタックス要素の値を決定することができる。いくつかの例では、パレットベースの復号ユニット165は、ブロックのいずれかのサンプルがエスケープサンプルとして復号されるべきかどうかを示す、ブロックのための1ビットのエスケープフラグを決定することができる。
[0220]加えて、または代替的に、パレットベースの復号ユニット165は、ビデオデータのブロックをコーディングするための色値のパレットの最大パレットサイズを示すデータ、または、色値のパレットを決定するためのパレット予測子の最大パレット予測子サイズを示すデータの少なくとも1つを決定することができる。たとえば、パレットベースの復号ユニット165は、SPSなどのパラメータセットからのそのようなデータを復号し得る。
[0221]加えて、または代替的に、パレットベースの復号ユニット165は、ピクセルをコーディングするための色のパレット中の色値にピクセルの値を関連付けるパレットインデックスと関連付けられるピクセルに対して、ピクセルのパレットインデックスを用いて一緒にコーディングされているパレットインデックスのラン(たとえば、同じ値を有するインデックスのランまたは上側の隣接インデックスから複製されるインデックスのラン)のランレングスを決定することができる。すなわち、パレットベースの復号ユニット165は、特定のサンプルのためのインデックス値が、他の後続のパレットインデックスのランを用いて復号されると決定することができる。パレットベースの復号ユニット165はまた、ピクセルのパレットインデックスを用いて復号されることが可能である、パレットインデックスの最大のランの最大ランレングスを決定することができる。エントロピー復号ユニット150に関して上で述べられたように、ビデオデコーダ30は、決定された最大ランレングスに基づいてランレングスを示すデータを復号することができる。
[0222]図4は、本開示の技法に従った、ビデオデータをコーディングするためのパレットを決定する例を示す概念図である。図4の例は、第1のパレット184と関連付けられる第1のコーディングユニット(CU)180と第2のパレット192と関連付けられる第2のCU188とを有するピクチャ178を含む。下でより詳細に説明されるように、本開示の技法によれば、第2のパレット192は第1のパレット184に基づく。ピクチャ178はまた、イントラ予測コーディングモードによりコーディングされるブロック196と、インター予測コーディングモードによりコーディングされるブロック200とを含む。
[0223]図4の技法は、ビデオエンコーダ20(図1および図2)とビデオデコーダ30(図1および図3)の状況において、説明を目的としてHEVCビデオコーディング規格に関して説明される。しかしながら、本開示の技法はこのように限定されず、他のビデオコーディングプロセスおよび/または規格において他のビデオコーディングプロセッサおよび/またはデバイスによって適用され得ることを、理解されたい。
[0224]一般に、パレットは、現在コーディングされているCU、図4の例ではCU188について支配的である、および/またはそのCUを表現する、いくつかのピクセル値を指す。第1のパレット184および第2のパレット192は、複数のパレットを含むものとして示されている。いくつかの例では、本開示の態様によれば、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ30のような)は、CUの各々の色成分に対して別々にパレットをコーディングすることができる。たとえば、ビデオエンコーダ20は、CUのルーマ(Y)成分のためのパレットと、CUのクロマ(U)成分のための別のパレットと、CUのクロマ(V)成分のためのさらに別のパレットとを符号化することができる。この例では、YパレットのエントリーはCUのピクセルのYの値を表すことができ、UパレットのエントリーはCUのピクセルのUの値を表すことができ、VパレットのエントリーはCUのピクセルのVの値を表すことができる。
[0225]他の例では、ビデオエンコーダ20は、CUのすべての色成分に対して単一のパレットを符号化することができる。この例では、ビデオエンコーダ20は、Yiと、Uiと、Viとを含む、三重の値であるi番目のエントリーを有するパレットを符号化することができる。この場合、パレットは、ピクセルの成分の各々の値を含む。したがって、複数の個々のパレットを有するパレットのセットとしての第1のパレット184および192の表現は、一例にすぎず、限定することは意図されない。
[0226]図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つまたは複数とを使用してピクセル値を再構築することができる。したがって、第1のパレット184は、パレットベースの復号におけるビデオデコーダ30による使用のために、符号化されたビデオデータビットストリーム中でビデオエンコーダ20によって送信される。
[0227]本開示の態様によれば、最大パレットサイズが第1のパレット184のためにシグナリングされ得る。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、たとえば第1のパレット184に含まれ得るエントリーの数に関して、最大パレットサイズを示すデータをコーディングするように構成され得る。いくつかの例では、最大パレットサイズを示す1つまたは複数のシンタックス要素(たとえば、MAX_PLT_SIZE)は、CU180に対して有効なSPSに含まれ得る。他の例では、最大パレットサイズを示す1つまたは複数のシンタックス要素は、VPSもしくはPPSなどの別のパラメータセットに、または、スライスヘッダデータもしくは、LCUもしくはCUと関連付けられるデータなどのヘッダデータに含まれ得る。
[0228]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、最大パレットサイズを示す1つまたは複数のシンタックス要素を使用して、変化することがあり、最大パレットサイズは、コーディングされているビデオデータの特定のプロファイル、レベル、またはビット深度に基づき得る。他の例では、ビデオエンコーダ20およびビデオデコーダ30は、最大パレットサイズを示す1つまたは複数のシンタックス要素を使用して、変化することがあり、最大パレットサイズは、CU180などのコーディングされているブロックのサイズに基づき得る。
[0229]説明を目的とする例では、ビデオエンコーダ20およびビデオデコーダ30は、CU180のための第1のパレット184を構築するとき、最大パレットサイズを示すデータを使用することができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、データによって示される最大パレットサイズに達するまで、エントリーを第1のパレット184に追加し続けることができる。ビデオエンコーダ20およびビデオデコーダ30は次いで、構築された第1のパレット184を使用してCU180をコーディングすることができる。
[0230]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、第1のパレット184に基づいて第2のパレット192を決定し得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、予測パレット、この例では第1のパレット184が決定される際に参照する、1つまたは複数のブロックを位置特定することができる。予測の目的で使用されているエントリーの組合せは、予測子パレットと呼ばれ得る。
[0231]図4の例では、第2のパレット192は、エントリーインデックス値1、エントリーインデックス値2、およびエントリーインデックス値3をそれぞれ有する、3つのエントリー208〜212を含む。エントリー208〜212は、ピクセル値A、ピクセル値B、およびピクセル値Dをそれぞれ含むピクセル値に、パレットインデックスを関連付ける。この例では、ビデオエンコーダ20は、第1のパレット184(予測子パレットを表す、ただし予測子パレットはいくつかのブロックのエントリーを含み得る)のどのエントリーが第2のパレット192に含まれるかを示す1つまたは複数のシンタックス要素をコーディングし得る。
[0232]図4の例では、1つまたは複数のシンタックス要素は、ベクトル216として示される。ベクトル216は、いくつかの関連するビン(またはビット)を有し、各ビンは、そのビンと関連付けられたパレット予測子が現在のパレットのエントリーを予測するために使用されるかどうかを示す。たとえば、ベクトル216は、第1のパレット184の最初の2つのエントリー(202および204)が、第2のパレット192中に含まれる(ベクトル216中の「1」の値)一方で、第1のパレット184の第3のエントリーが、第2のパレット192中に含まれない(ベクトル216中の「0」の値)ことを示す。図4の例では、ベクトルは、ブールベクトル(Boolean vector)である。このベクトルはパレット予測ベクトルと呼ばれることがある。
[0233]いくつかの例では、上で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、パレット予測を実行するとき、(パレット予測子テーブルまたはパレット予測子リストとも呼ばれ得る)パレット予測子を決定することができる。パレット予測子は、現在のブロックをコーディングするためのパレットの1つまたは複数のエントリーを予測するために使用される1つまたは複数の隣接ブロックのパレットからのエントリーを含み得る。ビデオエンコーダ20およびビデオデコーダ30は、同じ方式でリストを構築し得る。ビデオエンコーダ20およびビデオデコーダ30は、パレット予測子のどのエントリーが現在のブロックをコーディングするためのパレットに複製されるべきかを示すために、データ(ベクトル216など)をコーディングし得る。
[0234]したがって、いくつかの例では、以前に復号されたパレットエントリーは、パレット予測子として使用するためにリストに記憶される。このリストは、現在のパレットモードCUにおいてパレットエントリーを予測するために使用され得る。リスト中のどのエントリーが現在のパレットにおいて再使用されるかを示すために、バイナリ予測ベクトルがビットストリームにおいてシグナリングされ得る。2014年6月27日に出願された米国仮出願第62/018,461号では、バイナリパレット予測子を圧縮するために、ランレングスコーディングが使用される。ある例では、ランレングス値は、0次の指数ゴロム符号を使用してコーディングされる。
[0235]本開示の態様によれば、いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30(たとえば、エントロピー符号化ユニット118およびエントロピー復号ユニット150)は、図1の例に関して上で説明されたように、k次のトランケーテッド指数ゴロム(TEGk)符号を使用して、ブロックのパレットのためのバイナリパレット予測ベクトルをコーディング(たとえば、それぞれ符号化および復号)するように構成され得る。
[0236]いくつかの事例では、ビデオエンコーダ20およびビデオデコーダ30は、規格提案文書、Seregin他、「Non−SCCE3: Run−Length Coding for Palette Predictor」、JCTVC−R0228、札幌、日本、2014年6月30日〜7月9日(以後JCTVC−R0228)において記述される技法とともに、TEGk符号を使用して、バイナリパレット予測ベクトルをコーディングするように構成され得る。JCTVC−R0228において、ランレングスコーディングは、以下の条件およびステップを用いてバイナリベクトル中の0の要素をコーディングするために使用される。
・1に等しいランレングス値は予測の終了を示す
・予測の終了は、バイナリベクトル中の最後の1に対してはシグナリングされない
・先行する0の要素の数が、バイナリベクトル中の各々の1に対してコーディングされる
・0の要素の数が0より多い場合、1というエスケープ値のために、その数に1を足したものがシグナリングされる
・0次の指数ゴロム符号を使用してランレングス値がコーディングされる
説明を目的とする例では、バイナリパレット予測ベクトルは{1100100010000}に等しくてよく、パレット予測子の4つのエントリー(4つの1によって示される)が現在のブロックをコーディングするためのパレットに複製されることを示す。この例では、ビデオエンコーダ20およびビデオデコーダ30は、0−0−3−4−1としてベクトルをコーディングし得る。
[0237]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、バイナリパレット予測ベクトルを、そのベクトルのための最大ラン値Xを使用してコーディングすることができ、最大ラン値Xは、パレット予測子リスト中のパレットエントリーの数 マイナス 走査順序における現在の位置 マイナス 1 に等しくてよい)。一例によれば、ビデオエンコーダ20およびビデオデコーダ30は、ラン値をコーディングするためにTEG0符号を使用する。
[0238]本開示の技法はまた、最大パレット予測子サイズをシグナリングすることに関する。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、たとえばベクトル216に含まれ得るビットの数に関して、最大パレット予測子サイズを示すデータをコーディングするように構成され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、1つまたは複数の他の値に対して最大パレット予測子サイズを示すデータをコーディングし得る。たとえば、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、最大パレット予測子サイズと最大パレットサイズとのデルタ(たとえば、差分)として最大パレット予測子サイズを示すデータをコーディングするように構成され得る。いくつかの事例では、ビデオエンコーダおよびビデオデコーダ30は、固定長符号、ゴロム−ライス符号、または指数ゴロム符号の少なくとも1つを使用して、デルタをコーディングし得る。
[0239]いくつかの例では、最大パレット予測子サイズを示すシンタックス要素は、SPSに含まれ得る。他の例では、最大パレット予測子サイズを示すシンタックス要素は、VPSもしくはPPSなどの別のパラメータセットに、または、スライスヘッダデータもしくは、LCUもしくはCUと関連付けられるデータなどのヘッダデータに含まれ得る。
[0240]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、最大パレット予測子サイズを示すシンタックス要素を使用して、変化することがあり、最大パレット予測子サイズは、コーディングされているビデオデータの特定のプロファイル、レベル、またはビット深度に基づき得る。他の例では、ビデオエンコーダ20およびビデオデコーダ30は、最大パレット予測子サイズを示すシンタックス要素を使用して、変化することがあり、最大パレット予測子サイズは、コーディングされているブロックのサイズに基づき得る。
[0241]説明を目的とする例では、ビデオエンコーダ20およびビデオデコーダ30は、CU188をコーディングするための第2のパレット192を構築するとき、最大パレット予測子サイズに関するデータを使用することができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、データによって示されるような最大パレット予測子サイズに達するまで、エントリーを予測子パレットに(たとえば、およびビットをベクトル216に)追加し続けることができる。ビデオエンコーダ20およびビデオデコーダ30は次いで、CU188のための第2のパレット192を構築するために、ベクトル216を使用することができる。
[0242]図5は、本開示の技法に従った、ピクセルのブロックのためのパレットに対するパレットインデックスを決定する例を示す概念図である。たとえば、図5は、パレットインデックスと関連付けられるピクセルのそれぞれの位置をパレット244のエントリーに関連付ける、パレットインデックスのマップ240を含む。たとえば、インデックス1は値Aと関連付けられ、インデックス2は値Bと関連付けられ、インデックス3は値Cと関連付けられる。加えて、エスケープサンプルが暗黙的エスケープシグナリングを使用して示されるとき、ビデオエンコーダ20およびビデオデコーダ30はまた、インデックス4として図5に示される追加のインデックスをパレット244に追加することができ、これは、インデックス4と関連付けられるマップ240のサンプルがエスケープサンプルであることを示し得る。この場合、ビデオエンコーダ20は、ピクセル値がパレット244に含まれない場合、マップ240の中のある位置に対する実際のピクセル値(またはその量子化されたバージョン)を示すものを符号化することができる(および、ビデオデコーダ30は、符号化されたビットストリームからそれを取得することができる)。
[0243]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、どのピクセル位置がパレットインデックスと関連付けられるかを示す追加のマップをコーディングするように構成され得る。たとえば、マップ中の(i,j)のエントリーがCUの(i,j)の位置に対応すると仮定する。ビデオエンコーダ20は、エントリーが関連付けられるインデックス値を有するかどうかを示す、マップの各エントリー(すなわち、各ピクセル位置)のための1つまたは複数のシンタックス要素を符号化することができる。たとえば、ビデオエンコーダ20は、CU中の(i,j)の場所におけるピクセル値がパレット244の中の値の1つであることを示すように、1という値を有するフラグを符号化することができる。
[0244]そのような例では、ビデオエンコーダ20はまた、パレット中のそのピクセル値を示し、ビデオデコーダがピクセル値を再構築することを可能にするように、パレットインデックス(値1〜3として図5の例では示される)を符号化することができる。
[0245]パレット244が単一のエントリーと関連付けられるピクセル値とを含む例では、ビデオエンコーダ20は、インデックス値のシグナリングをスキップすることができる。ビデオエンコーダ20は、CU中の(i,j)の位置におけるピクセル値がパレット244の中の値の1つではないことを示すように、0という値を有するようにフラグを符号化することができる。この例では、ビデオエンコーダ20はまた、ピクセル値を再構築する際にビデオデコーダ30によって使用するために、ピクセル値の指示を符号化することができる。いくつかの例では、ピクセル値は不可逆方式(lossy manner)でコーディングされ得る。
[0246]CUの1つの位置におけるピクセルの値は、CUの他の位置における1つまたは複数の他のピクセルの値の指示を提供することができる。たとえば、CUの隣接するピクセル位置が同じピクセル値を有すること、または、(1つより多いピクセル値が単一のインデックス値にマッピングされ得る、不可逆コーディングの場合において)CUの隣接ピクセル位置が同じインデックス値にマッピングされ得ることの確率が比較的高いことがある。
[0247]したがって、ビデオエンコーダ20は、一緒にコーディングされる、所与の走査順序にある連続するピクセルまたはパレットインデックスの数を示す1つまたは複数のシンタックス要素を符号化することができる。上で述べられたように、パレットインデックスの列(またはパレットインデックスによって示されるピクセル値)は、本明細書ではランと呼ばれ得る。ビデオデコーダ30は、符号化されたビットストリームからランを示すシンタックス要素を取得し、そのデータを使用して、同じピクセル値またはインデックス値を有する連続する場所の数を決定することができる。
[0248]上で述べられたように、ランは、CopyFromTopモードまたはValueモードとともに使用され得る。説明を目的とする例では、マップ240の行264と268とを考える。水平方向の左から右への走査方向を仮定すると、行264は、「1」という3個のパレットインデックスと、「2」という2個のパレットインデックスと、「3」という3個のパレットインデックスとを含む。行268は、「1」という5個のパレットインデックスと、「3」という2個のパレットインデックスと、パレット244に含まれない1個のサンプル(インデックス4によって表される、ただしサンプルレベルエスケープフラグが明示的エスケープシグナリングのために使用され得る)とを含み、この1個のサンプルはエスケープサンプルと呼ばれ得る。
[0249]この例では、ビデオエンコーダ20は、行268のためのデータを符号化するために、CopyFromTopモードを使用し得る。たとえば、ビデオエンコーダ20は、行268の第1の位置(行268の一番左の位置)が行264の第1の位置と同じであることを示す、1つまたは複数のシンタックス要素を符号化することができる。ビデオエンコーダ20はまた、行268の中の走査方向の2つの連続するエントリーの次のランが行264の第1の位置と同じであることを示す、1つまたは複数のシンタックス要素を符号化することができる。
[0250]行264の第1の位置を示す1つまたは複数のシンタックス要素と、(上で述べられた)2つのエントリーのランとを符号化した後で、ビデオエンコーダ20は、Valueモードを使用して、(左から右に)行268の中の第4の位置と第5の位置とを符号化することができる。たとえば、ビデオエンコーダ20は、第4の位置に対して1という値を示す1つまたは複数のシンタックス要素と、1というランを示す1つまたは複数のシンタックス要素とを符号化することができる(たとえば、Valueモード)。したがって、ビデオエンコーダ20は、別のラインを参照することなくこれらの2つの位置を符号化する。
[0251]ビデオエンコーダ20は次いで、上の行264に対してCopyFromTopモードを使用して、行268の中の3というインデックス値を有する第1の位置を符号化することができる。たとえば、ビデオエンコーダ20は、CopyFromTopモードと、1というランとをシグナリングすることができる。したがって、ビデオエンコーダ20は、たとえばランを使用して、ラインのピクセル値またはパレットインデックスを、該ラインの他の値に対してコーディングすること、ラインのピクセル値または別のライン(または列)の値に対してコーディングすること、またはこれらの組合せの中から選択することができる。ビデオエンコーダ20は、いくつかの例では、この選択を行うために、レート/歪みの最適化を実行することができる。
[0252]ビデオエンコーダ20は次いで、(左から右に)行268の最後のサンプルのためのエスケープサンプルを符号化することができ、これは第1のパレット244に含まれない。たとえば、ビデオエンコーダ20は、行268の最後の位置をエスケープサンプルとして符号化することができる。すなわち、ビデオエンコーダ20は、行268の最後の位置がエスケープサンプル(たとえば、インデックス4)であるという指示、ならびにサンプル値の指示を符号化することができる。ビデオデコーダ30は、符号化されたビットストリームから上で説明されたシンタックスを取得し、そのようなシンタックスを使用して行268を再構築することができる。
[0253]上で述べられたように、エスケープサンプルをコーディングするための2つの技法があり得る。たとえば、明示的エスケープシグナリングでは、ビデオエンコーダ20およびビデオデコーダ30は、マップ240の各サンプル位置のための明示的なサンプルごとのEscapeモードフラグをコーディングすることができる。特定のサンプル(行268の最後のサンプルなど)がエスケープサンプルとしてコーディングされる場合、ビデオエンコーダ20およびビデオデコーダ30は、その特定のサンプルのための色値を示すデータをコーディングすることができる。サンプルがエスケープサンプルとしてコーディングされない場合、ビデオエンコーダ20およびビデオデコーダ30は、モードがCopyFromTopであるかValueであるかを示すために、SPointフラグなどの追加のデータをコーディングすることができる。
[0254]暗黙的エスケープシグナリングでは、ビデオエンコーダ20およびビデオデコーダ30は、追加のインデックスをパレット244に追加することができる(エントリーインデックス4)。ビデオエンコーダ20およびビデオデコーダ30は、サンプルがエスケープサンプルとしてコーディングされることを示すために、パレット244に対する追加のインデックス、たとえばインデックス4を使用することができる。しかしながら、追加のインデックスは、関連する色値を有しない。むしろ、ビデオエンコーダ20およびビデオデコーダ30はまた、追加のインデックスと関連付けられる各サンプルのための色値をコーディングする。サンプルがエスケープサンプルとしてコーディングされない場合、ビデオエンコーダ20およびビデオデコーダ30は、モードがCopyFromTopであるかValueであるかを示すために、SPointフラグなどのデータをコーディングすることができる。
[0255]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ビデオデータのブロックのすべてのサンプルに対して、ブロックの少なくとも1つのサンプルがそのブロックのための色のパレットに含まれていない色値に基づいてコーディングされるかどうかを示す、1つまたは複数のブロックレベルシンタックス要素をコーディングするように構成され得る。図5の例に関して、ビデオエンコーダ20およびビデオデコーダ30は、マップ240の少なくとも1つのサンプルがエスケープサンプル、すなわち行268の最後のサンプルとしてコーディングされることを示す、マップ240と関連付けられる1つまたは複数のシンタックス要素をコーディングすることができる。
[0256]ある例では、1つまたは複数のシンタックス要素は、ブロックレベルエスケープフラグ(単に「エスケープフラグ」と以下では呼ばれる)であり得る。たとえば、ビデオエンコーダ20は、マップ240がエスケープサンプルとしてコーディングされるサンプルを含むことを示すために、1という値を有するエスケープフラグを符号化することができる。同様に、ビデオデコーダ30は、マップ240がエスケープサンプルとしてコーディングされるサンプルを含むことを示す、1という値を有するエスケープフラグを復号することができる。したがって、エスケープフラグに従って、ビデオエンコーダ20はマップ240を符号化することができ、ビデオデコーダ30はマップ240を復号することができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、インデックス4を第1のパレット244に追加することができ、これは、エスケープサンプルとしてコーディングされるサンプルを表すために使用され得る。ビデオエンコーダ20およびビデオデコーダ30は、マップ240のコーディングの間、この追加のインデックスを使用することができる。
[0257]本開示の態様によれば、ビデオエンコーダ20メイビデオデコーダ30は、エスケープフラグと、特定のブロックをコーディングするために使用されるパレットのサイズとに基づいて、あるシンタックスのコーディングをスキップするように構成され得る。すなわち、図5の例は3つのエントリーを有する第1のパレット244を示すが、いくつかの事例では、ビデオデータのブロックをコーディングするためのパレットは、単一のエントリーを含み得る。そのような事例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットが単一のエントリーを有することと、ブロックのサンプルがエスケープサンプルとしてコーディングされないことを示すエスケープフラグとに基づいて、あるエスケープ関連のシンタックスのコーディングをスキップするように構成され得る。
[0258]たとえば、ブロックのサンプルがエスケープサンプルではないことをエスケープフラグが示す事例のように、およびパレットのサイズが1であるとき、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのすべてのサンプルが同じインデックス値(たとえば、パレットの唯一のエントリー)を有すると推測するように構成され得る。したがって、ビデオエンコーダ20およびビデオデコーダ30はまた、ブロックのパレットインデックスを決定するために使用される他のすべての他のデータのコーディングをスキップすることができる。
[0259]上の例では、ビデオエンコーダ20およびビデオデコーダ30は、ブロックレベルエスケープシンタックスを明示的にコーディングすることができる(たとえば、ビデオエンコーダ20はビットストリームにおいてエスケープフラグを符号化することができ、ビデオデコーダ30はビットストリームからそのようなフラグを復号することができる)。しかしながら、いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、マップ240をコーディングするために使用されるパレット244のサイズに基づいて、ブロックレベルエスケープシンタックス要素の値を推測する(たとえば、上で述べられたシンタックス要素を符号化または復号することなく決定する)ことができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ブロックレベルエスケープフラグの値を決定するために、パレットサイズに関する予備的な決定を行うことができる。ブロックレベルエスケープシンタックス要素は、パレットサイズが0より大きいときだけビットストリームにおいてコーディングされ得る。
[0260]本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、ビデオデータのブロックをコーディングするためのパレットのサイズを最初に決定することができる。パレットのサイズが0であることに基づいて、ビデオエンコーダ20およびビデオデコーダ30は、エスケープフラグが1に等しいことと、ブロックのすべてのサンプルがエスケープサンプルとしてコーディングされることとを決定することができ、それは、サンプルをコーディングするために利用可能な他のパレットエントリーがないからである。
[0261]たとえば、パレットサイズが0である事例のように、ビデオエンコーダ20およびビデオデコーダ30は、ブロックのすべてのサンプルが同じインデックス値(たとえば、エスケープサンプルを示すことと関連付けられるパレットの追加のエントリー)を有すると自動的に決定するように構成され得る。したがって、ビデオエンコーダ20およびビデオデコーダ30はまた、エスケープフラグのコーディング、ならびに、ブロックのパレットインデックスを決定するために使用されるすべての他のデータのコーディングをスキップすることができる。
[0262]図6は、本開示の技法に従った、ラスター走査順序を仮定した、CopyFromAboveモードのための最大ランレングスを決定する例を示す概念図である。上で述べられたように、本開示の技法は、コーディングされているシンタックスの最大の可能な値を考慮する符号を使用したパレットコーディングのためのシンタックスをコーディングすることを含む。
[0263]説明を目的とする例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットインデックスのラン(たとえば、同じ値を有するインデックスのランまたは上側の隣接インデックスから複製されるインデックスのラン)のランレングスをコーディングすることができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、現在のパレットコーディングされたサンプルに対して、現在のサンプルとともにコーディングされているパレットインデックスのランのランレングスを決定することができる。ビデオエンコーダ20およびビデオデコーダ30はまた、ピクセルのパレットインデックスを用いてコーディングされることが可能である、パレットインデックスの最大のランの最大ランレングスを決定することができる。ビデオエンコーダ20およびビデオデコーダ30は次いで、決定された最大ランレングスに基づいてランレングスを示すデータをコーディングし得る。
[0264]いくつかの事例では、本開示の態様によれば、シンタックスは、本明細書で説明されるTEGk符号などのある形の指数ゴロム符号を使用してコーディングされ得る。TEGk符号を使用するために、ビデオエンコーダ20およびビデオデコーダ30は、現在のCU中のピクセルの数から走査順序における現在の位置を引き、さらに1を引いたものとして、最大ランレングスを決定することができる。
[0265]いくつかのパレットコーディング技法では、CopyFromAboveモード(このモードではビデオコーダは現在のピクセルの上のピクセルのインデックスを複製する)と関連付けられるピクセルのランは、エスケープピクセルを含むことが許容されない。すなわち、ビデオコーダは、現在のピクセルの上側の隣接ピクセルがエスケープサンプルとしてコーディングされるピクセルである場合、CopyFromAboveのランを停止しなければならない。したがって、最大のCopyFromAboveのランレングスは、現在のピクセル位置と、走査順序においてエスケープされる上側の隣接ピクセルを有する位置との間の距離によって拘束される。
[0266]説明を目的とする例では、走査順序におけるCopyFromAboveのランの開始位置はAであり、位置A+L(L>0)(またはいくつかの例ではA+L(L>1))にあるピクセルに対する上側の隣接ピクセルはエスケープサンプルとしてコーディングされ、位置A+l(l<L)にあるピクセルに対する上側の隣接ピクセルはエスケープサンプルとしてコーディングされない。そのようなピクセルLが存在しない場合、ビデオエンコーダ20は、走査順序においてブロックの中で最後のピクセルの後の位置にLを割り当てることができる。本開示の技法によれば、ビデオエンコーダ20およびビデオデコーダ30は、最大のコーディングされるランレングスがL−1より長くないという制約のもとで、CopyFromAboveモードのためのランレングスをコーディングするためにTEGkを使用することができる。代替的に、0より大きい、1より大きい、および2より大きいといったユーナリー・プレフィックスがランレングスをコーディングするときに使用される場合、ビデオエンコーダ20またはビデオデコーダ30は、TEGkを使用してコーディングされるべきインデックスマップのランの最大ランレングスを、L−4に設定することができる。
[0267]ビデオデコーダ30またはビデオエンコーダ20が、ある位置のピクセルがエスケープピクセルに対応するか否かを決定できない事例では、ビデオエンコーダ20およびビデオデコーダ30は、そのピクセルを、エスケープサンプルとしてコーディングされないかのように処理することができ、すなわち、最大のコーディングされるランレングスは停止しない。図6の例では、破線280により包含されるピクセルのいずれもがエスケープサンプルとしてコーディングされない場合、最大の可能なランレングスは35(すなわち、影付きではないピクセル位置の数)である。破線280内のピクセルの1つまたは複数がエスケープサンプルとしてコーディングされる場合、エスケープサンプルとしてマークされるピクセル(「X」を伴うピクセル位置)が走査順序において破線280内で最初のエスケープピクセルであると仮定すると、最大の可能なコーディングされるcopy aboveのランレングスは5である。
[0268]いくつかの例では、ビデオデコーダ30は、破線280内のピクセルのためのランモード(たとえば、ピクセルがコーディングされるパレットモード)を決定するだけであり得る。したがって、最悪の場合、ビデオデコーダ30は、BlockWidth−1個のピクセルに対する決定を行う。いくつかの例では、ビデオデコーダ30は、ランモードが確認されるピクセルの数の最大値に関するいくつかの制約を実施するように構成され得る。たとえば、ビデオデコーダ30は、ピクセルが現在のピクセルと同じ行の中にある場合にだけ、破線280内のピクセルを確認することができる。ビデオデコーダ30は、破線280内のすべての他のピクセルがエスケープサンプルとしてコーディングされないと推測することができる。図6の例は、ラスター走査順序を仮定する。しかしながら、本技法は、垂直、水平横行、垂直横行などの他の走査順序に適用され得る。
[0269]図7は、本開示の技法に従った、ブロックのいずれかのサンプルがエスケープサンプルとして符号化されるかどうかを示す1つまたは複数のブロックレベルシンタックス要素に基づいてビデオデータのブロックを符号化するための例示的なプロセスを示すフローチャートである。図7のプロセスは全般に、説明を目的にビデオエンコーダ20によって実行されるものとして説明されるが、様々な他のプロセッサも図7に示されるプロセスを実行し得る。
[0270]図7の例では、ビデオエンコーダ20は、ビデオデータのブロックを符号化するためのパレットを決定する(300)。いくつかの例では、ビデオエンコーダ20は、たとえばパレット予測子を使用して、1つまたは複数の以前に符号化されたブロックのパレットベースのパレットを決定することができる。ビデオエンコーダ20はまた、パレットのサイズを決定することができる(302)。たとえば、ビデオエンコーダ20は、決定されたパレット中のエントリーの数を決定することができる。
[0271]ビデオエンコーダ20は、パレットサイズが0であるかどうかを決定することができる(304)。パレットサイズが0に等しいことに基づいて(ステップ304のyesの分岐)、ビデオエンコーダ20は、ブロックの少なくとも1つのサンプルがエスケープサンプルであることを示すブロックレベルエスケープシンタックスを決定することができる(306)。一例では、ビデオエンコーダ20は、ブロックレベルエスケープフラグが1に等しいと決定することができる。ビデオエンコーダ20は次いで、ブロックのための他のシンタックス要素を符号化することなく、ブロックのすべてのサンプルをエスケープサンプルとして符号化する(308)。たとえば、ビデオエンコーダ20は、ブロックレベルエスケープフラグを示すものを符号化しなくてよく、それは、ブロックレベルエスケープシンタックス要素が、パレットサイズが0より大きいときにだけビットストリームにおいて符号化され得るからである。加えて、ビデオエンコーダ20は、パレットモード(たとえば、ValueまたはCopyFromTopモード)を示すシンタックス、ランを決定することと関連付けられるシンタックス、パレットインデックスと関連付けられるシンタックス、および任意の他の関連するシンタックスなどの、ブロックのパレットインデックスのための他のデータを符号化しなくてよい。
[0272]パレットサイズが0ではない場合(ステップ304のnoの分岐)、ビデオエンコーダ20は、ブロックのいずれかのサンプルがエスケープサンプルとして符号化されるかどうかを決定することができる(310)。ブロックの少なくとも1つのサンプルがエスケープサンプルとして符号化されると決定したことに基づいて(ステップ310のyesの分岐)、ビデオエンコーダ20は、ブロックの少なくとも1つのサンプルがエスケープサンプルとして符号化されることを示すブロックレベルエスケープシンタックスを決定し、ブロックとともにビットストリームにおいてブロックレベルシンタックスを示すものを符号化することができる(312)。たとえば、ビデオエンコーダ20は、ブロックレベルエスケープフラグを1に等しく設定し、ビットストリームにおいてエスケープフラグを示すものを符号化することができる。ビデオエンコーダ20はまた、パレットコーディングモードを用いてブロックを符号化し、これはブロックの少なくとも1つのピクセルをエスケープサンプルとして符号化することを含む(314)。
[0273]サンプルがエスケープサンプルとして符号化されないことに基づいて(ステップ310のnoの分岐)、ビデオエンコーダ20は、ブロックのためのパレットのパレットサイズが1に等しいかどうかを決定することができる(316)。パレットサイズが1に等しくないと決定したことに基づいて(ステップ316のnoの分岐)、ビデオエンコーダ20は、ブロックのサンプルがエスケープサンプルとして符号化されないことを示すブロックレベルエスケープシンタックスを決定し、ビットストリームにおいてブロックレベルエスケープシンタックスを示すものを符号化することができる(318)。たとえば、ビデオエンコーダ20は、ブロックレベルエスケープフラグを0に等しく設定し、ビットストリームにおいてエスケープフラグを示すものを符号化することができる。ビデオエンコーダ20はまた、パレットコーディングモードを使用してブロックを符号化するが、エスケープサンプルを符号化することはない(320)。たとえば、ビデオエンコーダ20は、CopyFromTopモードまたはValueモードを使用してブロックのパレットインデックスを符号化し、そのようなモードの使用と関連付けられるシンタックス、たとえば、モード、パレットインデックス、ランなどを示すシンタックスを符号化することができる。
[0274]パレットサイズが1に等しいと決定したことに基づいて(ステップ316のyesの分岐)、ビデオエンコーダ20は、ブロックのサンプルがエスケープサンプルとしてコーディングされないことを示すブロックレベルエスケープシンタックスを決定し、ビットストリームにおいてブロックレベルエスケープシンタックスを示すものを符号化することができる(322)。たとえば、ビデオエンコーダ20は、ブロックレベルエスケープフラグを0に等しく設定し、ビットストリームにおいてエスケープフラグを示すものを符号化することができる。ビデオエンコーダ20はまた、他のシンタックスを符号化することなく、ブロックのすべてのサンプルが同じインデックス値を有することを示すものを符号化する(324)。たとえば、ビデオエンコーダ20は、パレットモードの使用と関連付けられるシンタックス、たとえば、モード、パレットインデックス、ランなどを示すシンタックスの符号化をスキップすることができる。
[0275]図8は、本開示の技法に従った、ブロックのいずれかのサンプルがエスケープサンプルとして復号されるかどうかを示す1つまたは複数のブロックレベルシンタックス要素に基づいてビデオデータのブロックを復号するための例示的なプロセスを示すフローチャートである。図8のプロセスは全般に、説明を目的にビデオデコーダ30によって実行されるものとして説明されるが、様々な他のプロセッサも図8に示されるプロセスを実行し得る。
[0276]図8の例では、ビデオデコーダ30は、ビデオデータのブロックを復号するためのパレットを決定する(340)。いくつかの例では、ビデオデコーダ30は、たとえば復号されているビットストリームにおいてシグナリングされるパレット予測子を使用して、1つまたは複数の以前に符号化されたブロックのパレットベースのパレットを決定することができる。ビデオデコーダ30はまた、パレットのサイズを決定することができる(342)。たとえば、ビデオデコーダ30は、決定されたパレット中のエントリーの数を決定することができる。
[0277]ビデオデコーダ30は、パレットサイズが0であるかどうかを決定することができる(344)。パレットサイズが0に等しいことに基づいて(ステップ344のyesの分岐)、ビデオデコーダ30は、ブロックの少なくとも1つのサンプルがエスケープサンプルとして符号化されることを示すブロックレベルエスケープシンタックスを決定することができる(346)。一例では、ビデオデコーダ30は、ブロックレベルエスケープフラグが1に等しいと決定することができる。たとえば、ビデオデコーダ30は、ビットストリームからフラグを復号することなくブロックレベルエスケープフラグが1に等しいと推測することができ、それは、ブロックレベルエスケープシンタックス要素が、パレットサイズが0より大きいときにだけビットストリームにおいてコーディングされ得るからである。ビデオデコーダ30は次いで、ブロックのための他のシンタックス要素(たとえば、エスケープサンプルと関連付けられる色値以外の)を復号することなく、エスケープサンプルと関連付けられる色を使用してブロックのすべてのサンプルを復号する(348)。たとえば、上で述べられたように、ビデオデコーダ30は、ブロックレベルエスケープフラグを示すものを復号しなくてよい。加えて、ビデオデコーダ30は、パレットモード(たとえば、ValueまたはCopyFromTop)を示すシンタックス、インデックス値を示すシンタックス、ランを決定することと関連付けられるシンタックス、および任意の他の関連するシンタックスなどの、ブロックのパレットインデックスのための他のデータを復号しなくてよい。
[0278]パレットサイズが0ではない場合(ステップ344のnoの分岐)、ビデオデコーダ30は、ビットストリームからブロックレベルエスケープシンタックスを復号し、ブロックレベルシンタックスの値を決定することができる(350)。たとえば、ビデオデコーダ30は、ブロックレベルエスケープフラグを復号し、値が0に等しいか1に等しいかを決定することができる。
[0279]ビデオデコーダ30は次いで、たとえば復号されるシンタックスに基づいて、ブロックのいずれかのサンプルがエスケープサンプルとしてコーディングされるかどうかを決定することができる(352)。ブロックの少なくとも1つのサンプルがエスケープサンプルとして符号化されていると決定したことに基づいて(ステップ352のyesの分岐)、ビデオデコーダ30は、パレットコーディングモードを用いてブロックを復号することができ、これは、ブロックの少なくとも1つのサンプルをエスケープサンプルとして復号することを含む(354)。ビデオデコーダ30はまた、エスケープサンプルに対応する少なくとも1つの色値を復号することができる。
[0280]サンプルがエスケープサンプルとして符号化されていないことに基づいて(ステップ352のnoの分岐)、ビデオデコーダ30は、ブロックのためのパレットのパレットサイズが1に等しいかどうかを決定することができる(356)。パレットサイズが1に等しくないと決定したことに基づいて(ステップ356のnoの分岐)、ビデオデコーダ30は、パレットコーディングモードを使用してブロックを復号することができるが、エスケープサンプルを復号することはない(358)。たとえば、ビデオデコーダ30は、CopyFromTopモードまたはValueモードを使用してブロックのパレットインデックスを復号し、そのようなモードの使用と関連付けられるシンタックス、たとえば、モード、パレットインデックス、ランなどを示すシンタックスを復号することができる。
[0281]パレットサイズが1に等しいと決定したことに基づいて(ステップ356のyesの分岐)、ビデオデコーダ30は、他のシンタックスを復号することなく、パレットのパレットエントリー(たとえば、パレット中に存在する唯一のエントリー)を使用してブロックを復号することができる(360)。たとえば、ビデオデコーダ30は、パレットモードの使用と関連付けられるシンタックス、たとえば、モード、パレットインデックス、ランなどを示すシンタックスの復号をスキップすることができる。
[0282]図9は、本開示の技法に従った、最大パレットサイズと最大パレット予測子サイズとを示す1つまたは複数のシンタックス要素に基づいてビデオデータのブロックを符号化するための例示的なプロセスを示すフローチャートである。図9のプロセスは全般に、説明を目的にビデオエンコーダ20によって実行されるものとして説明されるが、様々な他のプロセッサも図9に示されるプロセスを実行し得る。
[0283]図9の例では、ビデオエンコーダ20ツーは、パレットモードにおいてビデオデータの現在のブロックを符号化するためのパレットの最大サイズを決定することができる(380)。たとえば、ビデオエンコーダ20は、符号化されているビデオデータの特性に基づいて、最大パレットサイズを決定するように構成され得る。いくつかの例では、ビデオエンコーダ20は、データのビット深度(たとえば、入力ビット深度またはプロファイルビット深度)、ブロックのブロックサイズ、ビデオデータと関連付けられるプロファイルまたはレベルなどに基づいて、最大パレットサイズを決定することができる。
[0284]ビデオエンコーダ20はまた、現在のブロックのパレットを作成するためのパレット予測子の最大パレット予測子サイズを決定することができる(382)。たとえば、ビデオエンコーダ20は、符号化されているビデオデータの特性に基づいて、最大パレット予測子サイズを決定するように構成され得る。いくつかの例では、ビデオエンコーダ20は、データのビット深度(たとえば、入力ビット深度またはプロファイルビット深度)、ブロックのブロックサイズ、ビデオデータと関連付けられるプロファイルまたはレベルなどに基づいて、最大パレット予測子サイズを決定することができる。
[0285]ビデオエンコーダ20はまた、現在のブロックを含むビットストリームにおいて、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータを符号化する(386)。いくつかの例では、ビデオエンコーダ20は、1つまたは複数の他の値に対する相対的な最大パレットサイズおよび/または最大パレット予測子サイズを示すデータを符号化することができる。たとえば、本開示の態様によれば、ビデオエンコーダ20は、最大パレット予測子サイズと最大パレットサイズとのデルタ(たとえば、差分)として最大パレット予測子サイズを示すデータをコーディングするように構成され得る。
[0286]本開示の態様によれば、ビデオエンコーダ20は、SPSにおいて最大パレットサイズおよび/または最大パレット予測子サイズを示す1つまたは複数のシンタックス要素を符号化することができる。他の例では、ビデオエンコーダ20は、別のパラメータセット(たとえば、PPS)において、現在のブロックを含むスライスのスライスヘッダにおいて、またはビットストリーム中の他の箇所でそのようなシンタックスを符号化することができる。
[0287]ビデオエンコーダ20はまた、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータに従って現在のブロックを符号化する(388)。たとえば、ビデオエンコーダ20は、最大パレットサイズによって制限されるパレットおよび/または最大パレット予測子サイズによって制限されるパレット予測子を決定することができる。
[0288]図10は、本開示の技法に従った、最大パレットサイズと最大パレット予測子サイズとを示す1つまたは複数のシンタックス要素に基づいてビデオデータのブロックを符号化するための例示的なプロセスを示すフローチャートである。図10のプロセスは全般に、説明を目的にビデオデコーダ30によって実行されるものとして説明されるが、様々な他のプロセッサも図10に示されるプロセスを実行し得る。
[0289]図10の例では、ビデオデコーダ30は、パレットモードで復号されている現在のブロックを含むビットストリームから、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータを復号する(400)。いくつかの例では、ビデオエンコーダ20は、1つまたは複数の他の値に対する相対的な最大パレットサイズおよび/または最大パレット予測子サイズを示すデータを符号化することができる。たとえば、本開示の態様によれば、ビデオエンコーダ20は、最大パレット予測子サイズと最大パレットサイズとのデルタ(たとえば、差分)として最大パレット予測子サイズを示すデータをコーディングするように構成され得る。
[0290]本開示の態様によれば、ビデオデコーダ30は、SPSから最大パレットサイズおよび/または最大パレット予測子サイズを示す1つまたは複数のシンタックス要素を復号することができる。他の例では、ビデオデコーダ30は、別のパラメータセット(たとえば、PPS)から、現在のブロックを含むスライスのスライスヘッダから、またはビットストリーム中の他の箇所でそのようなシンタックスを復号することができる。
[0291]ビデオデコーダ30は、復号されたデータに基づいて、現在のブロックを復号するためのパレットの最大サイズを決定することができる(402)。ビデオデコーダ30はまた、データに基づいて、現在のブロックのためのパレットを作成するためのパレット予測子の最大パレット予測子サイズを決定することができる(404)。ビデオデコーダ30はまた、最大パレットサイズおよび/または最大パレット予測子サイズを示すデータに従って現在のブロックを復号する(408)。たとえば、ビデオデコーダ30は、最大パレットサイズによって制限されるパレットおよび/または最大パレット予測子サイズによって制限されるパレット予測子を決定することができる。
[0292]図11は、本開示の技法に従った、最大可能ランレングスに基づいてピクセルのランのランレングスを示すデータをコーディング(符号化または復号)するための例示的なプロセスを示すフローチャートである。図11のプロセスは全般に、説明を目的にビデオエンコーダ20またはビデオデコーダ30などのビデオコーダによって実行されるものとして説明されるが、様々な他のプロセッサも図11に示されるプロセスを実行し得る。
[0293]図11の例では、ビデオコーダは、現在のピクセルをコーディングするためのパレットモードを決定することができる(420)。たとえば、ビデオコーダは、現在のピクセルがCopyFromTopモードを使用してコーディングされるか、Valueモードを使用してコーディングされるか、または別のパレットベースのコーディングモードを使用してコーディングされるかを決定することができる。ビデオコーダはまた、現在のピクセルのためのランのランレングスを決定する(422)。たとえば、ビデオコーダは、現在のピクセルのパレットインデックスを用いてコーディングされているパレットインデックスの数を決定する。
[0294]ビデオコーダはまた、ランのための最大ランレングスを決定する(424)。たとえば、ビデオコーダは、現在のピクセルのパレットインデックスを用いてコーディングされることが可能である、パレットインデックスの最大のランの最大ランレングスを決定することができる。ある例では、ビデオコーダは、ピクセルを含むビデオデータのブロック中のピクセルの数を決定することができる。ビデオコーダはまた、パレットインデックスを走査するために使用される走査順序に基づいて、ブロック中の現在のピクセルの位置を決定することができる。ビデオコーダは次いで、ブロック中のピクセルの数から現在のピクセルのピクセル位置を引き、さらに1を引いたものとして、最大ランレングスを決定する。
[0295]ビデオコーダはまた、決定された最大ランレングスに基づいてランのランレングスを示すデータをコーディングする(426)。たとえば、本開示の態様によれば、ビデオコーダは、TEGk符号を使用してランレングスを示すデータをコーディングすることができる。
[0296]例に応じて、本明細書で説明された技法のいずれかのいくつかの行為またはイベントが、異なる順序で実行されてよく、全体的に追加され、統合され、または完全に除外され得る(たとえば、すべての説明された行為またはイベントが本技法の実施のために必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを用いて、連続的にではなく同時に実行され得る。加えて、本開示の特定の態様は、明快にするために、単一のモジュールまたはユニットによって実行されるものとして説明されているが、本開示の技術は、ビデオコーダと関連付けられるユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
[0297]本開示のいくつかの態様は、説明を目的に、開発中のHEVC規格に関して説明された。しかしながら、本開示で説明される技法は、他の規格またはまだ開発されていないプロプライエタリなビデオコーディング処理を含む、他のビデオコーディング処理にとって有用であり得る。
[0298]上で説明された技法は、ビデオエンコーダ20(図1および図2)ならびに/またはビデオデコーダ30(図1および図3)によって実行されてよく、ビデオエンコーダ20とビデオデコーダ30の両方が全般にビデオコーダと呼ばれ得る。同様に、ビデオコーディングは、適宜、ビデオ符号化またはビデオ復号を指し得る。
[0299]技法の様々な態様の特定の組合せが上で説明されたが、これらの組合せは、本開示で説明される技法の例を単に示すために与えられる。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示で説明される技法の様々な態様の任意の想起可能な組合せを包含し得る。
[0300]1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって処理され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従ってある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コード、および/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
[0301]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、ウェブサイト、サーバ、または他のリモートソースから、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0302]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または、本明細書で説明された技法の実装に好適な任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成されるか、または複合コーデックに組み込まれる、専用ハードウェアおよび/またはソフトウェアモジュール内で提供され得る。また、本技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
[0303]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために様々なコンポーネント、モジュール、またはユニットが説明されたが、それらは、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上で説明されたように、様々なユニットは、好適なソフトウェアおよび/またはファームウェアとともに、上で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わされるか、または相互動作するハードウェアユニットの集合によって提供され得る。
[0304]様々な例が、説明された。これらおよび他の例は、次の特許請求の範囲内に入る。