[0028] 本開示の態様は、ビデオコーディングおよびビデオデータ圧縮のための技法を対象とする。具体的には、本開示は、ビデオデータのパレットベースのビデオコーディングのための技法を説明する。従来のビデオコーディングでは、画像は、色調が連続的であり空間的に滑らかであると仮定される。これらの仮定に基づいて、ブロックベースの変換、フィルタリング、および他のコーディングツールなどのような様々なツールが開発されており、そのようなツールは、自然のコンテンツのビデオに対しては良好な性能を示している。しかしながら、リモートデスクトップ、共同作業用ディスプレイおよびワイヤレスディスプレイのような適用例では、コンピュータで生成されたスクリーンコンテンツが、圧縮されるべき支配的なコンテンツであり得る。このタイプのスクリーンコンテンツは、不連続な色調と、鋭利な線と、高コントラストのオブジェクト境界とを有する傾向がある。連続的な色調および滑らかさという仮定はもはや当てはまらないことがあるので、従来のビデオコーディング技法は、スクリーンコンテンツを圧縮するのに効率的ではないことがある。
[0029] 本開示は、パレットベースのビデオコーディング技法を説明し、これは特に、コンピュータにより生成されたスクリーンコンテンツのコーディング(たとえば、スクリーンコンテンツコーディング(SCC:screen content coding))、または、1つまたは複数の従来のコーディングツールが非効率である他のコンテンツに適していることがある。本開示で説明されるビデオデータのパレットベースのビデオコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法などの、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、下でより詳細に説明されるように、エンコーダまたはデコーダ、または組み合わされたエンコーダ−デコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディングと、さらにはパレットベースのビデオコーディングとを実行するように構成され得る。
[0030] 最近、新しいビデオコーディング規格、すなわち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)によって確定された。SCCと称するHEVCに対するスクリーンコンテンツコーディング拡張も、JCT−VCによって開発されている。パレットモードの記述を含むSCCの最近のワーキングドラフト(WD)(SCC WD)は、JCTVC−R0348「JCTVC−R0348_18thMeetingFinalPaletteTextSpecification.doc」において入手可能である。
[0031] いくつかの例では、パレットベースのビデオコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。例示的なビデオコーディング規格は、ITU−T H.261、ISO/IEC MPEG−1 Visual、ITU−T H.262またはISO/IEC MPEG−2 Visual、ITU−T H.263、ISO/IEC MPEG−4 Visual、およびITU−T H.264(ISO/IEC MPEG−4 AVCとしても知られている)を含む。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テキスト仕様ドラフトは、http://phenix.int−evry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC−L1003−v13.zipから入手可能な、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」)に記載されている。
[0032] HEVCフレームワークに関して、例として、本開示のパレットベースのビデオコーディング技法は、コーディングユニット(CU:coding unit)レベルで使用されるように構成され得る。HEVCの他の例では、本開示のパレットベースのビデオコーディング技法は、予測ユニット(PU:prediction unit)レベルで使用されるように構成され得る。HEVCの他の例では、本開示のパレットベースのビデオコーディング技法は、サブ予測ユニット(sub−PU)レベル(たとえば、予測ユニットのサブブロック)で使用されるように構成され得る。したがって、CUレベルの状況において説明される以下の開示されるプロセスのすべてが、追加で、または代替的に、PUレベルまたはサブPUレベルに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのビデオコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0033] パレットベースのビデオコーディングでは、ビデオデータの特定のエリアが、比較的少数の色を有し得る。ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆる「パレット」をコーディング(すなわち、符号化または復号)し得る。各ピクセルは、ピクセルの色を表すパレット中のエントリーと関連付けられ得る。たとえば、ビデオコーダは、ピクセル値をパレット中の適切な値に関連付けるインデックスをコーディングすることができる。
[0034] 上の例では、ビデオエンコーダは、ブロックのためのパレットを決定し、各ピクセルの値を表すためのパレット中のエントリーを見つけ、ピクセル値をパレットに関連付けるピクセルのためのパレットインデックス(パレットインデックス値とも呼ばれる)を用いてパレットを符号化することによって、ビデオデータのブロックを符号化することができる。ビデオデコーダは、符号化されたビットストリームから、ブロックのためのパレット、ならびにブロックのピクセルのためのパレットインデックスを取得することができる。ビデオデコーダは、ブロックのピクセル値を再構築するために、ピクセルのパレットインデックスをパレットのエントリーに関連付けることができる。ピクセル(および/またはピクセル値を示す関連するパレットインデックス)は一般に、サンプルと呼ばれ得る。
[0035] ビデオデータのブロック中のサンプルは、水平方向のラスター走査順序(raster scanning order)または他の走査順序を使用して処理され(たとえば、走査され)得る。たとえば、ビデオエンコーダは、水平方向のラスター走査順序を使用してパレットインデックスを走査することによって、パレットインデックスの2次元ブロックを1次元アレイに変換することができる。同様に、ビデオデコーダは、水平方向のラスター走査順序を使用してパレットインデックスのブロックを再構築することができる。したがって、本開示は、ブロック中の現在コーディングされているサンプルに走査順序において先行するサンプルのことを、以前のサンプルと呼び得る。垂直方向のラスター走査順序などの水平方向のラスター走査以外の走査も適用可能であり得ることを、理解されたい。上の例、ならびに本開示で述べられる他の例は、パレットベースのビデオコーディングの全般的な説明を与えることが意図されている。
[0036] パレットは通常、インデックスによって番号を付けられた、色の成分(たとえば、RGB、YUV、YCbCrなど)の値または強度を表すエントリーを含む。ビデオエンコーダとビデオデコーダの両方が、パレットエントリーの数と、各パレットエントリーのための色成分値と、現在のブロックのためのパレットエントリーの正確な順序とを決定する。本開示では、各パレットエントリーがサンプルのすべての色成分の値を指定すると仮定される。しかしながら、本開示の概念は、各色成分に対して別々のパレットを使用することに適用可能である。
[0037] いくつかの例では、パレットは、以前にコーディングされたブロックからの情報を使用して合成され得る。すなわち、パレットは、以前のブロックをコーディングするために使用されたパレットから予測される、予測されたパレットエントリーを含み得る。たとえば、Wei Pu他、「AHG10: Suggested Software for Palette Coding based on RExt6.0」、JCTVC−Q0094、バレンシア、スペイン、2014年3月27日〜4月4日(以後JCTVC−Q0094)に記述されるように、パレットは、予測子パレットから複製されるエントリーを含み得る。予測子パレットは、パレットモードを使用して以前にコーディングされたブロックからの、または他の再構築されたサンプルからのパレットエントリーを含み得る。予測子パレット中の各エントリーに対して、二進フラグが、そのフラグと関連付けられるエントリーが現在のパレットに複製されるかどうかを示す(たとえば、フラグ=1によって示される)ようにコーディングされ得る。二進フラグの列は、二進パレット予測ベクトルと呼ばれ得る。現在のブロックをコーディングするためのパレットはまた、いくつかの新たなパレットエントリーを含んでよく、これらは明示的に(たとえば、パレット予測ベクトルとは別に)コーディングされ得る。新たなエントリーの数を示すものもコーディングされ得る。予測されるエントリーと新たなエントリーの合計は、ブロックの全体のパレットサイズを示し得る。
[0038] 提案されるJCTVC−Q0094のように、パレットベースのビデオコーディングモードを用いてコーディングされるブロック中の各サンプルは、以下に記載されるような3つのパレットモードの1つを使用してコーディングされ得る。
・Escapeモード:このモードでは、サンプル値がパレットエントリーとしてパレットに含められず、量子化されたサンプル値がすべての色成分に対して明示的にシグナリングされる。新たなパレットエントリーのシグナリングに似ているが、新たなパレットエントリーに対しては、色成分値は量子化されない。
・CopyFromTopモード(CopyAboveモードまたはCopyモードとも呼ばれる):このモードでは、現在のサンプルのためのパレットエントリーインデックスが、ブロック中ですぐ上に位置するサンプルから複製される。
・Valueモード(Indexモードとも呼ばれる):このモードでは、パレットエントリーインデックスの値が明示的にシグナリングされる。
[0039] いくつかの例では、escapeモードは、CopyAboveモードまたはIndexモードと別のモードではない。むしろ、そのような例では、escapeモードは、CopyモードまたはIndexモードに含まれ得る。
[0040] 本明細書で説明されるように、パレットエントリーインデックスは、パレットインデックスまたは単にインデックスと呼ばれ得る。これらの用語が、本開示の技法を説明するために交換可能に使用され得る。加えて、以下でより詳細に説明されるように、パレットインデックスは、1つまたは複数の関連する色または強度の値を有し得る。たとえば、パレットインデックスは、ピクセルの単一の色または強度の成分と関連付けられる、単一の関連する色または強度の値を有し得る(たとえば、RGBデータのRed成分、YUVデータのY成分など)。別の例では、パレットインデックスは、複数の関連する色または強度の値を有し得る。いくつかの事例では、パレットベースのビデオコーディングは、モノクロのビデオをコーディングするために適用され得る。したがって、「色値(color value)」は一般に、ピクセル値を生成するために使用される任意の色成分または非色成分を指し得る。
[0041] CopyFromTopモードおよびValueモードでは、ラン値(run value)(単にラン(run)とも呼ばれ得る)もシグナリングされ得る。ラン値は、一緒にコーディングされるパレットコーディングされるブロック中の、特定の走査順序にある連続するサンプルの数(たとえば、サンプルのラン)を示し得る。いくつかの事例では、サンプルのランはパレットインデックスのランとも呼ばれることがあり、それは、ランの各サンプルがパレットに対する関連するインデックスを有するからである。
[0042] ラン値は、同じパレットコーディングモードを使用してコーディングされるパレットインデックスのランを示し得る。たとえば、Valueモードに関して、ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、パレットインデックス(パレットインデックス値または単にインデックス値とも呼ばれる)と、同じパレットインデックスを有しそのパレットインデックスを用いてコーディングされている、ある走査順序にある連続するサンプルの数を示すラン値とを、コーディングすることができる。CopyFromTopモードに関して、ビデオコーダは、上側の隣接サンプル(たとえば、ブロック中の現在コーディングされているサンプルの上に位置するサンプル)のインデックスと、上側の隣接サンプルからパレットインデックスを同様に複製しそのパレットインデックスを用いてコーディングされている、ある走査順序にある連続するサンプルの数を示すラン値とに基づいて、現在のサンプル値のためのインデックスが複製されることを示すものをコーディングすることができる。したがって、上の例では、パレットインデックスのランは、同じ値を有するパレットインデックスのラン、または上側の隣接パレットインデックスから複製されるパレットインデックスのランを指す。
[0043] したがって、ランは、所与のモードに対して、同じモードに属する後続のサンプルの数を指定し得る。いくつかの事例では、インデックスとラン値とをシグナリングすることは、ランレングスコーディング(run length coding)と似ていることがある。説明を目的とする例では、ブロックの連続するパレットインデックスの列は、0、2、2、2、2、5であり得る(たとえば、ここで各インデックスはブロック中のサンプルに対応する)。この例では、ビデオコーダは、Valueモードを使用して第2のサンプル(たとえば、2という最初のパレットインデックス値)をコーディングすることができる。2に等しいインデックス値をコーディングした後で、ビデオコーダは3というランをコーディングすることができ、これは、3つの後続のサンプルも2という同じパレットインデックス値を有することを示す。同様の方式で、CopyFromTopモードを使用してインデックスをコーディングした後で4つのパレットインデックスのランをコーディングすることは、全体で5つのパレットインデックスが、現在コーディングされているサンプル位置の上の行の中の対応するパレットインデックスから複製されることを示し得る。
[0044] 本開示で説明される技法は、パレットベースのビデオコーディングモードをシグナリングすること、パレットを送信すること、パレットを導出すること、走査順序をシグナリングすること、走査順序を導出すること、ビデオデータのブロック中の第1の行に対してCopyモードを有効にすること、およびパレットベースのビデオコーディングマップと他のシンタックス要素とを送信することの、1つまたは複数の様々な組合せのための技法を含み得る。いくつかの例では、本開示の技法は、JCTVC−Q0094に存在するパレットモード、パレットインデックス、ラン、およびパレットサイズのシグナリング(ならびに投稿JCTVC−Q0094とともにアップロードされたパレットモードを実装する参照ソフトウェア)と関連付けられる潜在的な冗長性を解決するために使用され得る。いくつかの例では、本開示の技法は、とりわけ、走査順序のシグナリングと関連付けられる潜在的な冗長性を解決するために使用され得る。他の例では、本開示の技法は、とりわけ、走査順序の不必要なシグナリングをなくすために使用され得る。さらに他の例では、本開示の技法は、とりわけ、ビデオデータのブロック中の最初の行に対して、ビデオデータのそのブロック中のその行のすぐ上にピクセルがなくても、Copyモードを有効にすることができる。したがって、以下でより詳細に説明されるように、本開示の技法は、いくつかの事例では、パレットモードを使用してビデオデータをコーディングするときの効率性を向上させビットレートを向上させ得る。
[0045] 図1は、本開示の技法を利用できる例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ(video coder)」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング(video coding)」または「コーディング(coding)」という用語は、ビデオ符号化またはビデオ復号を総称的に指し得る。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を代表する。
[0046] 図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14はビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備え得る。
[0047] 宛先デバイス14は、チャネル16を介してソースデバイス12から符号化されたビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化されたビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って、符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つもしくは複数の物理伝送線路などのワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などのパケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0048] 別の例では、チャネル16は、ソースデバイス12によって生成された、符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して、記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの、様々なローカルにアクセスされるデータ記憶媒体を含み得る。
[0049] さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間ストレージデバイスを含み得る。この例では、送信先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間ストレージデバイスに記憶された、符号化されたビデオデータにアクセスすることができる。ファイルサーバは、符号化されたビデオデータを記憶することと、符号化されたビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイトのための)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
[0050] 宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、ファイルサーバに記憶されている符号化されたビデオデータにアクセスするのに適した、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、またはその両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
[0051] パレットベースのビデオコーディングのための本開示の技法は、ワイヤレスの用途または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
[0052] 図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間の任意のデータ通信を必ずしも含まないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データが、ローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータを符号化し、メモリに記憶することができ、および/または、ビデオ復号デバイスはメモリからデータを取り出し、復号することができる。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって実行される。
[0053] 図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、たとえばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/もしくは、ビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
[0054] ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化されたビデオデータを直接送信する。他の例では、符号化されたビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために記憶媒体またはファイルサーバ上に記憶され得る。
[0055] 図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して、符号化されたビデオデータを受信することができる。ディスプレイデバイス32は、宛先デバイス14と一体化され得るか、またはその外部にあり得る。一般に、ディスプレイデバイス32は、復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスを備え得る。
[0056] ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェアなどの、様々な適切な回路のいずれか、またはそれらの任意の組合せとして実装され得る。本技法がソフトウェアで部分的に実装される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェア用の命令を記憶することができ、本開示の技法を実行するために1つまたは複数のプロセッサを使用してハードウェア内でそれらの命令を実行することができる。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれもが、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれることがあり、両者のいずれかがそれぞれのデバイス内の複合エンコーダ/デコーダ(CODEC)の一部として組み込まれることがある。
[0057] 本開示の技法によれば、ビデオデコーダ30は、ビデオデータのパレットモード符号化されたブロックのピクセル走査順序を推測するように構成され得る。たとえば、ビデオデコーダ30は、ビデオデータの符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信することなく、ビデオデータの符号化されたブロックのピクセル走査順序を推測するように構成され得る。別の例として、ビデオデコーダ30は、ブロックレベルシンタックス要素が(i)ビデオデコーダ30に送信されなかったので、(ii)ビデオデコーダ30によって受信されないので、または(iii)ビデオデコーダ30によって受信されたが、ビデオデコーダ30が受信されたブロックレベルシンタックス要素を参照せずにピクセル走査順序を推測するように構成されるので、ビデオデータの符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素に基づかずに、ビデオデータの符号化されたブロックのピクセル走査順序を推測するように構成され得る。
[0058] たとえば、ビデオデコーダ30は、ピクチャのビデオデータの第1のパレットモード符号化されたブロックを受信するように構成され得る。ビデオデコーダ30は、第1のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信することなく、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測するように構成され得る。別の例では、ビデオデコーダ30は、第1のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素に基づかずに(それを受信されていてもいなくても)、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測するように構成され得る。ビデオデコーダ30は、推測されたピクセル走査順序を使用して、ビデオデータの第1のパレットモード符号化されたブロックを復号するように構成され得る。
[0059] いくつかの例では、ビデオデコーダ30は、ピクチャのビデオデータの第2のパレットモード符号化されたブロックを受信するように構成され得る。そのような例では、ビデオデコーダ30は、ビデオデータの第2のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信するように構成され得る。ビデオデコーダ30は、受信されたブロックレベルシンタックス要素に基づいて、ビデオデータの第2のパレットモード符号化されたブロックのピクセル走査順序を決定するように構成され得る。ビデオデコーダ30は、決定されたピクセル走査順序を使用して、ビデオデータの第2のパレットモード符号化されたブロックを復号するように構成され得る。
[0060] 本開示の技法による別の例では、ビデオエンコーダ20は、ビデオデータのブロックの走査順序をシグナリングするかどうかを決定するように構成され得る。ビデオエンコーダ20は、この決定に基づいて、ビデオデータのブロックの走査順序をシグナリングするように、またはシグナリングしないように構成され得る。たとえば、走査順序をシグナリングするかどうかを決定することは、ビデオデータのブロックのパレットサイズに基づき得る。
[0061] たとえば、ビデオエンコーダ20は、パレットモードを使用してビデオデータのブロックが符号化されるべきであると決定するように構成され得る。ビデオエンコーダ20は、ビデオデータのブロックのパレットサイズを決定するように構成され得る。ビデオエンコーダ20は、ビデオデータのブロックのピクセル走査順序を決定するように構成され得る。ビデオエンコーダ20は、パレットモードを使用してビデオデータのブロックを符号化するように構成され得る。ビデオエンコーダ20は、パレットサイズに基づいて、ビデオデータのブロックのために使用されるピクセル走査順序を表す第1のブロックレベルシンタックス要素をシグナリングするかどうかを決定するように構成され得る。
[0062] 本開示は全般に、ビデオエンコーダ20が、ある情報をビデオデコーダ30のような別のデバイスに「シグナリングすること」または「送信すること」に言及することがある。「シグナリング」または「送信」という用語は、一般に、圧縮されたビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指し得る。そのような通信は、リアルタイムまたはほぼリアルタイムに起こり得る。代替的に、そのような通信は、符号化のときに符号化されたビットストリームの中でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに起こり得るなど、ある時間の長さにわたって起こることがあり、これらの要素は次いで、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
[0063] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上で言及されHEVCドラフト10に記載されるHEVC規格などの、ビデオ圧縮規格に従って動作する。基本的なHEVC規格に加えて、HEVCのためのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を作成するための作業が進行中である。加えて、たとえば本開示で説明されるような、パレットベースのビデオコーディングモードは、HEVC規格の拡張のために提供され得る。いくつかの例では、パレットベースのビデオコーディングのための本開示で説明される技法は、ITU−T−H.264/AVC規格または将来の規格のような、他のビデオコーディング規格に従って動作するように構成される、エンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースのビデオコーディングモードの適用が、例として説明される。
[0064] HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは一般に、一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCbおよびSCrと表記される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれることもある。他の例では、ピクチャは、モノクロであることがあり、ルーマサンプルのアレイしか含まないことがある。
[0065] ビデオエンコーダ20は、ピクチャの符号化された表現を生成するために、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nブロックであり得る。CTUは「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスター走査順序で連続的に順序付けられた整数個のCTUを含み得る。
[0066] コーディングされたCTUを生成するために、ビデオエンコーダ20は、コーディングツリーブロックをコーディングブロックに分割するように、CTUのコーディングツリーブロックに対して4分木区分を再帰的に実行することができ、したがって「コーディングツリーユニット」という名称である。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイと、CbサンプルアレイおよびCrサンプルアレイと、コーディングブロックのサンプルをコーディングするのに使用されるシンタックス構造とを有するピクチャの、ルーマサンプルの1つのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックであり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分することができる。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ルーマサンプルの予測ブロック、ピクチャのクロマサンプルの2つの対応する予測ブロック、予測ブロックサンプルを予測するのに使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのために、予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成することができる。
[0067] ビデオエンコーダ20は、PUの予測ブロックを生成するためにイントラ予測またはインター予測を使用することができる。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられたピクチャの復号されたサンプルに基づいてPUの予測ブロックを生成することができる。
[0068] ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられたピクチャ以外の1つまたは複数のピクチャの復号サンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために単予測または双予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
[0069] ビデオエンコーダ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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0070] さらに、ビデオエンコーダ20は、CUのルーマ残差ブロックと、Cb残差ブロックと、Cr残差ブロックとを、1つまたは複数のルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに分解するために、4分木区分を使用し得る。変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックと関連付けられ得る。TUと関連付けられたルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
[0071] ビデオエンコーダ20は、TUのルーマ変換ブロックに1回または複数回の変換を適用して、TUのルーマ係数ブロックを生成することができる。係数ブロックは変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。ビデオエンコーダ20は、TUのCb係数ブロックを生成するために、TUのCb変換ブロックに1回または複数回の変換を適用し得る。ビデオエンコーダ20は、TUのCr係数ブロックを生成するために、TUのCr変換ブロックに1つまたは複数の変換を適用し得る。
[0072] 係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後、ビデオエンコーダ20は、係数ブロックを量子化することができる。量子化は一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現する処理を指す。ビデオエンコーダ20が係数ブロックを量子化した後で、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行し得る。ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素をビットストリームに出力することができる。
[0073] ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。ビットストリームは、コーディングされたピクチャおよび関連するデータの表現を形成するビットのシーケンスを含み得る。ビットストリームは、一連のネットワーク抽象化レイヤ(NAL)ユニットを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)をカプセル化する。NALユニットヘッダは、NALユニットタイプ符号を示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプ符号は、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含んでいるシンタックス構造であり得る。いくつかの例では、RBSPは0ビットを含む。
[0074] 異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)のためのRBSPをカプセル化することができ、第2のタイプのNALユニットはコーディングされたスライスのためのRBSPをカプセル化することができ、第3のタイプのNALユニットはSEIのためのRBSPをカプセル化することができ、以下同様である。ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれ得る。
[0075] ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームからシンタックス要素を復号するためにビットストリームを構文解析し得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは全般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、現在のCUのPUの予測ブロックを決定するために、PUのMVを使用することができる。加えて、ビデオデコーダ30は、現在のCUのTUと関連付けられた変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在のCUのTUと関連付けられる変換ブロックを再構築するために、変換係数ブロックに対して逆変換を実行することができる。ビデオデコーダ30は、現在のCUのPUの予測ブロックのサンプルを現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築することができる。ピクチャの各CUのためのコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築することができる。
[0076] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのビデオコーディングを実行するように構成され得る。たとえば、パレットベースのビデオコーディングでは、上で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を実行するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆるパレットをコーディングすることができる。各ピクセルは、ピクセルの色を表すパレット中のエントリーと関連付けられ得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ピクセル値をパレット中の適切な値に関連付けるインデックスをコーディングすることができる。
[0077] パレットベースのビデオコーディングの例では、ビデオエンコーダ20は、ブロックのためのパレットを決定し、各ピクセルの値を表すためのパレット中のエントリーを見つけ、ピクセル値をパレットに関連付けるピクセルのためのインデックス値を用いてパレットを符号化することによって、ビデオデータのブロックを符号化することができる。ビデオデコーダ30は、符号化されたビットストリームから、ブロックのためのパレット、ならびにブロックのピクセルのためのインデックス値を取得することができる。ビデオデコーダ30は、ブロックのピクセル値を再構築するために、ピクセルのインデックス値をパレットのエントリーに関連付けることができる。
[0078] 本開示のいくつかの例では、ビデオエンコーダ20は、同じピクセル値を有する所与の走査順序の中の連続するピクセルの数を示す1つまたは複数のシンタックス要素を符号化することができる。同様の値のピクセル値の列は、本明細書では「ラン」と呼ばれることがある。例示を目的とする例では、所与の走査順序の2つの連続するピクセルが異なる値を有する場合、ランは0に等しい。所与の走査順序の2つの連続するピクセルが同じ値を有するが、その走査順序の3番目のピクセルが異なる値を有する場合、ランは1に等しい。ビデオデコーダ30は、符号化されたビットストリームからランを示すシンタックス要素を取得し、そのデータを使用して、同じインデックス値を有する連続するピクセルの場所の数を決定することができる。
[0079] 本開示のいくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、マップの1つまたは複数のエントリーに対して線のコピーを実行することができる。たとえば、ビデオエンコーダ20は、マップ中の特定のエントリーに対するピクセル値が、その特定のエントリーの上の線の中のエントリーに等しいことを示し得る。ビデオエンコーダ20はまた、特定のエントリーの上の線の中のエントリーに等しい走査順序におけるインデックスの数をランとして示すことができる。この例では、ビデオエンコーダ20およびまたはビデオデコーダ30は、規定された隣接する線から、および、現在コーディングされているマップの線に対する規定された数のエントリーから、インデックス値をコピーすることができる。
[0080] タイルおよび波面並列処理(WPP)を含む、HEVCベースのコーデックをより並列に適したものにするための、いくつかの提案が行われている。HEVC WD10は、タイルのコーディングツリーブロックラスター走査において連続的に順序付けられた、1つの列および1つの行の中に同時に存在する整数個のコーディングツリーブロックとしてタイルを定義する。各ピクチャをタイルに分割することは、区分と呼ばれる。タイルの数およびそれらの境界の位置は、シーケンス全体に対して定義されるか、またはピクチャごとに変更され得る。タイル境界は、スライス境界と同様に、タイルが独立に処理され得るように構文解析および予測の依存性を破壊するが、ループ内フィルタ(デブロッキングおよびサンプル適応オフセット(SAO))はそれでもタイル境界にまたがることがある。HEVC WD10はまた、スライスとタイルの関係に対するいくつかの制約を規定する。
[0081] 本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、以下で図4〜図11などに関して本明細書で説明されるパレットモードコーディングのための技法の任意の組合せを実行することができる。
[0082] 図2は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図2は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングの文脈において、ビデオエンコーダ20を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0083] ビデオエンコーダ20は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を代表する。たとえば、ビデオエンコーダ20は、パレットベースのビデオコーディングまたは非パレットベースのビデオコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなどの、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースのビデオコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードなどの、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。ビデオエンコーダ20は、一例では、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセル位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロック中のピクセル位置の少なくともいくつかをパレット中の選択されたピクセル値にそれぞれ対応するパレット中のエントリーと関連付ける情報をシグナリングするように構成され得る。シグナリングされた情報は、ビデオデータを復号するためにビデオデコーダ30によって使用され得る。
[0084] 図2の例では、ビデオエンコーダ20は、ブロック符号化ユニット100と、ビデオデータメモリ101と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構築ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。ブロック符号化ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニットと、動き補償ユニットと(図示されず)を含む。ビデオエンコーダ20はまた、本開示で説明されるパレットベースのビデオコーディング技法の様々な態様を実行するように構成される、パレットベースの符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
[0085] ビデオデータメモリ101は、ビデオエンコーダ20のコンポーネントによって符号化されるべきビデオデータを記憶することができる。ビデオデータメモリ101内に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ(DPB)116は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、ダイナミックランダムアクセスメモリ(DRAM)(同期DRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別々のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他のコンポーネントとともにオンチップであるか、またはそれらのコンポーネントに対してオフチップであり得る。
[0086] ビデオエンコーダ20は、ビデオデータを受信することができる。ビデオエンコーダ20は、ビデオデータのピクチャのスライス内の各CTUを符号化することができる。CTUの各々は、ピクチャの等しいサイズのルーマコーディングツリーブロック(CTB)と、対応するCTBとに関連付けられ得る。CTUを符号化することの一部として、ブロック符号化ユニット100は、4分木区分を実行して、CTUのCTBを徐々により小さいブロックに分割することができる。より小さいブロックはCUのコーディングブロックであり得る。たとえば、ブロック符号化ユニット100は、CTUと関連付けられたCTBを4つの等しいサイズのサブブロックに区画することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区画することができ、以下同様である。
[0087] ビデオエンコーダ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サイズのための非対称区分をサポートすることができる。
[0088] インター予測処理ユニット120は、CUの各PUに対してインター予測を実行することによって、PUのための予測データを生成することができる。PUのための予測データは、PUの予測ブロックとPUの動き情報とを含み得る。インター予測ユニット121は、PUがIスライス中にあるか、Pスライス中にあるか、またはBスライス中にあるかに応じて、CUのPUに対して異なる動作を実行することができる。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測ユニット121は、PUに対してインター予測を実行しない。したがって、Iモードで符号化されたブロックでは、予測ブロックは、同じフレーム内の前に符号化された隣接ブロックからの空間的予測を使用して形成される。
[0089] PUがPスライス中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャリスト(たとえば、「RefPicList0」)中の参照ピクチャを探索することができる。PUの参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含む参照ピクチャ内の領域であり得る。動き推定ユニットは、PUの参照領域を含んでいる参照ピクチャのRefPicList0中での位置を示す参照インデックスを生成することができる。加えて、動き推定ユニットは、PUのコーディングブロックと、参照領域と関連付けられた参照場所との間の空間変位を示すMVを生成することができる。たとえば、MVは、現在の復号されたピクチャ中の座標から参照ピクチャ中の座標までのオフセットを提供する2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として、参照インデックスとMVとを出力することができる。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照場所における実際のまたは補間されたサンプルに基づいて、PUの予測ブロックを生成することができる。
[0090] PUがBスライス中にある場合、動き推定ユニットは、PUについての単予測または双予測を実行することができる。PUについての単予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索することができる。動き推定ユニットは、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUの予測ブロックと参照領域に関連付けられた参照場所との間の空間変位を示すMVと、参照ピクチャがRefPicList0中にあるかRefPicList1中にあるかを示す1つまたは複数の予測方向インジケータとを出力することができる。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成することができる。
[0091] PUについての双方向インター予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0中の参照ピクチャを探索することができ、またPUの別の参照領域についてRefPicList1中の参照ピクチャを探索することができる。動き推定ユニットは、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中での位置を示す参照ピクチャインデックスを生成することができる。加えて、動き推定ユニットは、参照領域と関連付けられる参照場所とPUのサンプルブロックとの間の空間変位を示すMVを生成することができる。PUの動き情報は、PUの参照インデックスとMVとを含み得る。動き補償ユニットは、PUの動きベクトルによって示される参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成することができる。
[0092] 本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースのビデオコーディングを実行するように構成され得る。HEVCフレームワークに関して、例として、パレットベースのビデオコーディング技法は、CUレベルで使用されるように構成され得る。他の例では、パレットベースのビデオコーディング技法は、PUレベルで使用されるように構成され得る。他の例では、パレットベースのビデオコーディング技法は、サブ予測ユニット(sub−PU)レベル(たとえば、予測ユニットのサブブロック)で使用されるように構成され得る。したがって、CUレベルの状況において(本開示全体で)本明細書で説明される開示されるプロセスのすべてが、追加で、または代替的に、PUレベルまたはサブPUレベルに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのビデオコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0093] パレットベースの符号化ユニット122は、たとえば、パレットベースの符号化モードがたとえばCUまたはPUのために選択されるとき、パレットベースの符号化を実行することができる。たとえば、パレットベースの符号化ユニット122は、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロックの位置の少なくともいくつかを選択されたピクセル値にそれぞれ対応するパレット中のエントリーと関連付ける情報をシグナリングするように構成され得る。様々な機能がパレットベースの符号化ユニット122によって実行されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
[0094] 本開示の態様によれば、パレットベースの符号化ユニット122は、以下で図4〜図11などに関して本明細書で説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。
[0095] たとえば、パレットベースの符号化ユニット122は、ビデオデータのブロックの走査順序をシグナリングするかどうかを決定するように構成され得る。パレットベースの符号化ユニット122は、この決定に基づいて、ビデオデータのブロックの走査順序をシグナリングするように、またはシグナリングしないように構成され得る。たとえば、走査順序をシグナリングするかどうかを決定することは、ビデオデータのブロックのパレットサイズに基づき得る。
[0096] たとえば、パレットベースの符号化ユニット122は、パレットモードを使用してビデオデータのブロックが符号化されるべきであると決定するように構成され得る。パレットベースの符号化ユニット122は、ビデオデータのブロックのパレットサイズを決定するように構成され得る。パレットベースの符号化ユニット122は、ビデオデータのブロックのピクセル走査順序を決定するように構成され得る。パレットベースの符号化ユニット122は、パレットモードを使用してビデオデータのブロックを符号化するように構成され得る。パレットベースの符号化ユニット122は、パレットサイズに基づいて、ビデオデータのブロックのために使用されるピクセル走査順序を表す第1のブロックレベルシンタックス要素をシグナリングするかどうかを決定するように構成され得る。
[0097] 別の例として、本開示の態様によれば、パレットベースの符号化ユニット122は、ビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを、ピクセルの複数の行のうちの他の行が第1の行の上にない場合に、Copyモードを使用して符号化するように構成され得る。
[0098] イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによって、PU用の予測データを生成することができる。PUのための予測データは、PUの予測ブロックと様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対してイントラ予測を実行し得る。
[0099] PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、PUの予測データの複数のセットを生成するために、複数のイントラ予測モードを使用することができる。イントラ予測処理ユニット126は、PUの予測ブロックを生成するために、隣接PUのサンプルブロックからのサンプルを使用し得る。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば33個の方向のイントラ予測モードを使用することができる。いくつかの例では、イントラ予測モードの数はPUと関連付けられた領域のサイズに依存し得る。
[0100] ブロック符号化ユニット100は、PUのためにインター予測処理ユニット120によって生成された予測データ、またはPUのためにイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUのための予測データを選択することができる。いくつかの例では、ブロック符号化ユニット100は、予測データのセットのレート/歪み測定基準に基づいて、CUのPUの予測データを選択する。選択された予測データの予測ブロックは、本明細書では、選択された予測ブロックと呼ばれ得る。
[0101] 残差生成ユニット102は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック、ならびにCUのPUの選択された予測ルーマブロック、予測Cbブロック、および予測Crブロックに基づいて、CUのルーマ残差ブロックと、Cb残差ブロックと、Cr残差ブロックとを生成することができる。たとえば、残差生成ユニット102は、残差ブロックの中の各サンプルが、CUのコーディングブロックの中のサンプルと、CUのPUの対応する選択された予測ブロックの中の対応するサンプルとの差分に等しい値を有するように、CUの残差ブロックを生成し得る。
[0102] 変換処理ユニット104は、CUと関連付けられる残差ブロックをCUのTUと関連付けられる変換ブロックに区分するために、4分木区分を実行することができる。したがって、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックと関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも基づかないこともある。「残差4分木」(RQT)として知られる4分木構造は、領域の各々と関連付けられたノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
[0103] 変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUの各TUのための変換係数ブロックを生成し得る。変換処理ユニット104は、TUと関連付けられた変換ブロックに様々な変換を適用することができる。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を変換ブロックに適用することができる。いくつかの例において、変換処理ユニット104は変換ブロックに変換を適用しない。そのような例では、変換ブロックは、変換係数ブロックとして扱われ得る。
[0104] 量子化ユニット106は、係数ブロック中の変換係数を量子化することができる。量子化プロセスは、変換係数の一部またはすべての関連付けられたビット深度を低減し得る。たとえば、nビットの変換係数は量子化の間にmビットの変換係数へと切り捨てられてよく、ただし、nはmよりも大きい。量子化ユニット106は、CUと関連付けられた量子化パラメータ(QP)値に基づいて、CUのTUと関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUと関連付けられたQP値を調整することによって、CUと関連付けられた係数ブロックに適用される量子化の程度を調整することができる。量子化は、情報の喪失をもたらすことがあり、したがって、量子化された変換係数は、元の係数よりも精度が低いことがある。
[0105] 逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、係数ブロックから残差ブロックを再構築するために、係数ブロックに逆量子化および逆変換を適用することができる。再構築ユニット112は、TUと関連付けられる再構築された変換ブロックを生成するために、再構築された残差ブロックを、ブロック符号化ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに加算することができる。このようにCUの各TUのための変換ブロックを再構築することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構築することができる。
[0106] フィルタユニット114は、CUと関連付けられたコーディングブロックの中のブロッキングアーティファクトを低減するために、1つまたは複数のデブロッキング動作を実行し得る。フィルタユニット114は、サンプル適応オフセット(SAO)フィルタリングおよび/または適応ループフィルタリング(ALF)を含む他のフィルタリング動作を実行することができる。復号ピクチャバッファ116は、フィルタユニット114が、再構築されたコーディングブロックに対して1つまたは複数のデブロッキング動作を実行した後、再構築されたコーディングブロックを記憶することができる。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を実行するために、再構築されたコーディングブロックを含む参照ピクチャを使用することができる。加えて、イントラ予測処理ユニット126は、CUと同じピクチャ中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ116中の再構築されたコーディングブロックを使用することができる。
[0107] エントロピー符号化ユニット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を表すデータを含み得る。
[0108] 本開示の態様によれば、エントロピー符号化ユニット118は、図1などの本開示の様々な図面に関して本明細書で説明されるように、k次の切捨て指数ゴロム(TEGk)符号を使用してパレットデータをコーディングするように構成され得る。具体的には、本開示の態様によれば、エントロピー符号化ユニット118は、ビデオデータの符号化されたブロックのピクセルの第1の行の中の少なくとも1つのピクセルがCopyモードを使用して符号化されたことを示すデータを符号化することができる。いくつかの例では、エントロピー符号化ユニット118は、TEGk符号を使用して、第1の行のCopyモードが有効にされたデータを符号化することができる。
[0109] 図3は、本開示の技法を実装するように構成された例示的なビデオデコーダ30を示すブロック図である。図3は、説明の目的で与えられており、本開示において広く例示され説明される技法に対する限定ではない。説明の目的で、本開示は、HEVCコーディングの文脈において、ビデオデコーダ30を説明する。しかしながら、本開示の技法は他のコーディング規格または方法に適用可能であり得る。
[0110] ビデオエンコーダ20は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を代表する。たとえば、ビデオエンコーダ20は、パレットベースのビデオコーディングまたは非パレットベースのビデオコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなどの、ビデオデータの様々なブロックを選択的に復号するように構成され得る。非パレットベースのビデオコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードなどの、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。ビデオデコーダ30は、一例では、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセル位置をパレット中のエントリーと関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、パレット中の選択されたピクセル値に基づいてブロックのピクセル値を再構築するように構成され得る。
[0111] 図3の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、ビデオデータメモリ151と、ブロック復号ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構築ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。ブロック復号ユニット152は、動き補償ユニット164とイントラ予測処理ユニット166とを含む。ビデオデコーダ30はまた、本開示で説明されるパレットベースのビデオコーディング技法の様々な態様を実行するように構成された、パレットベースの復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
[0112] ビデオデータメモリ151は、ビデオデコーダ30のコンポーネントによって復号されるべき、符号化されたビデオビットストリームなどのビデオデータを記憶することができる。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、チャネル16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、ダイナミックランダムアクセスメモリ(DRAM)(同期DRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別々のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他のコンポーネントとともにオンチップであるか、またはそれらのコンポーネントに対してオフチップであり得る。
[0113] コーディングされたピクチャのバッファ(CPB)は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受け取り、記憶することができる。エントロピー復号ユニット150は、CPBから符号化されたビデオデータ(たとえば、NALユニット)を受け取り、NALユニットを解析してシンタックス要素を復号することができる。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化されたシンタックス要素をエントロピー復号することができる。
[0114] 本開示の態様によれば、エントロピー復号ユニット150は、図1の例に関して上で説明されたように、TEGk符号を使用してパレットデータを復号するように構成され得る。具体的には、本開示の態様によれば、エントロピー復号ユニット150は、ビデオデータの符号化されたブロックのピクセルの第1の行の中の少なくとも1つのピクセルがCopyモードを使用して符号化されたことを示すデータを復号することができる。いくつかの例では、エントロピー復号ユニット150は、TEGk符号を使用して、第1の行のCopyモードが有効にされたデータを復号することができる。
[0115] ブロック復号ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。
[0116] ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コーディングされたスライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コーディングされたスライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関するシンタックス要素を含み得る。スライスヘッダ中のシンタックス要素は、スライスを含むピクチャと関連付けられたPPSを識別するシンタックス要素を含み得る。
[0117] ビデオデコーダ30は、ビットストリームからのシンタックス要素を復号することに加えて、区分されていないCUに対して再構築動作を実行し得る。区分されていないCUに対して再構築動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実行することができる。CUの各TUに対して再構築動作を実行することによって、ビデオデコーダ30はCUの残差ブロックを再構築することができる。
[0118] CUのTUに対して再構築動作を実行することの一部として、逆量子化ユニット154は、TUと関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち逆量子化(de−quantize)することができる。逆量子化ユニット154は、量子化の程度を決定するために、また同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、TUのCUと関連付けられたQP値を使用することができる。つまり、圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、利用されるエントロピーコーディングの方法に依存し得る。
[0119] 逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUと関連付けられた残差ブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を、係数ブロックに適用することができる。
[0120] イントラ予測を使用してPUが符号化される場合、イントラ予測処理ユニット166は、PUの予測ブロックを生成するためにイントラ予測を実行することができる。イントラ予測処理ユニット166は、空間的に隣接するPUの予測ブロックに基づいて、PU用の予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成するために、イントラ予測モードを使用することができる。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定することができる。
[0121] ブロック復号ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを構築することができる。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PUの動き情報を抽出することができる。動き補償ユニット164は、PUの動き情報に基づいて、PUのための1つまたは複数の参照領域を決定することができる。動き補償ユニット164は、PUの1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUの予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成することができる。
[0122] 再構築ユニット158は、CUのTUと関連付けられたルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック、ならびにCUのPUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを、すなわち、イントラ予測データまたはインター予測データのいずれかを適宜使用して、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを再構築することができる。たとえば、再構築ユニット158は、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックのサンプルを予測ルーマブロック、予測Cbブロック、および予測Crブロックの対応するサンプルに加算して、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを再構築することができる。
[0123] フィルタユニット160は、デブロッキング動作を実行して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックと関連付けられたブロッキングアーティファクトを低減することができる。フィルタユニット160は、サンプル適応オフセット(SAO)フィルタリングおよび/または適応ループフィルタリング(ALF)を含む他のフィルタリング動作を実行することができる。ビデオデコーダ30は、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを、復号ピクチャバッファ162に記憶することができる。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために参照ピクチャを与え得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
[0124] 本開示の様々な例によれば、ビデオデコーダ30は、パレットベースのビデオコーディングを実行するように構成され得る。パレットベースの復号ユニット165は、たとえば、パレットベースの復号モードがたとえばCUまたはPUのために選択されるとき、パレットベースの復号を実行することができる。たとえば、パレットベースの復号ユニット165は、ピクセル値を示すエントリーを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセル位置をパレット中のエントリーと関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、パレット中の選択されたピクセル値に基づいてブロックのピクセル値を再構築するように構成され得る。様々な機能がパレットベースの復号ユニット165によって実行されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
[0125] パレットベースの復号ユニット165は、パレットコーディングモード情報を受け取り、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上の動作を実行することができる。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または、他のモード情報が異なるモードの使用を示すとき、ビデオデコーダ30は、たとえば、HEVCインター予測コーディングモードまたはイントラ予測コーディングモードなどの非パレットベースのビデオコーディングモードを使用して、ビデオデータのブロックを復号することができる。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。
[0126] 本開示の態様によれば、パレットベースの復号ユニット165は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。
[0127] 本開示の技法によれば、パレットベースの復号ユニット165は、ビデオデータのパレットモード符号化されたブロックのピクセル走査順序を推測するように構成され得る。たとえば、パレットベースの復号ユニット165は、ビデオデータの符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信することなく、ビデオデータの符号化されたブロックのピクセル走査順序を推測するように構成され得る。別の例として、パレットベースの復号ユニット165は、ブロックレベルシンタックス要素が(i)パレットベースの復号ユニット165に送信されなかったので、(ii)パレットベースの復号ユニット165によって受信されないので、または(iii)パレットベースの復号ユニット165によって受信されたが、パレットベースの復号ユニット165が受信されたブロックレベルシンタックス要素を参照せずにピクセル走査順序を推測するように構成されるので、ビデオデータの符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素に基づかずに、ビデオデータの符号化されたブロックのピクセル走査順序を推測するように構成され得る。
[0128] たとえば、パレットベースの復号ユニット165は、ピクチャのビデオデータの第1のパレットモード符号化されたブロックを受信するように構成され得る。パレットベースの復号ユニット165は、第1のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信することなく、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測するように構成され得る。別の例では、パレットベースの復号ユニット165は、第1のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素に基づかずに(それが受信されていてもいなくても)、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測するように構成され得る。パレットベースの復号ユニット165は、推測されたピクセル走査順序を使用して、ビデオデータの第1のパレットモード符号化されたブロックを復号するように構成され得る。
[0129] いくつかの例では、パレットベースの復号ユニット165は、ピクチャのビデオデータの第2のパレットモード符号化されたブロックを受信するように構成され得る。そのような例では、パレットベースの復号ユニット165は、ビデオデータの第2のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信するように構成され得る。パレットベースの復号ユニット165は、受信されたブロックレベルシンタックス要素に基づいて、ビデオデータの第2のパレットモード符号化されたブロックのピクセル走査順序を決定するように構成され得る。パレットベースの復号ユニット165は、決定されたピクセル走査順序を使用して、ビデオデータの第2のパレットモード符号化されたブロックを復号するように構成され得る。
[0130] 別の例として、本開示の態様によれば、パレットベースの復号ユニット165は、ビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを、ピクセルの複数の行のうちの他の行が第1の行の上にない場合に、Copyモードを使用して復号するように構成され得る。
[0131] 図4は、本開示の技法に従った、ビデオデータをコーディングするためのパレットを決定する例を示す概念図である。図4の例は、第1のパレット184と関連付けられる第1のパレットコーディングされた(PAL)コーディングユニット(CU)180と第2のパレット192と関連付けられる第2のPAL CU188とを有するピクチャ178を含む。下でより詳細に説明されるように、本開示の技法によれば、第2のパレット192は第1のパレット184に基づく。ピクチャ178はまた、イントラ予測コーディングモードによりコーディングされるブロック196と、インター予測コーディングモードによりコーディングされるブロック200とを含む。
[0132] 図4の技法は、ビデオエンコーダ20(図1および図2)とビデオデコーダ30(図1および図3)の状況において、説明を目的としてHEVCビデオコーディング規格に関して説明される。しかしながら、本開示の技法はこのように限定されず、他のビデオコーディングプロセスおよび/または規格において他のビデオコーディングプロセッサおよび/またはデバイスによって適用され得ることを、理解されたい。
[0133] 一般に、パレットは、現在コーディングされている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の値を表すことができる。
[0134] 他の例では、ビデオエンコーダ20は、CUのすべての色成分に対して単一のパレットを符号化することができる。この例では、ビデオエンコーダ20は、Yiと、Uiと、Viとを含む、三重の値であるi番目のエントリーを有するパレットを符号化することができる。この場合、パレットは、ピクセルの成分の各々の値を含む。したがって、複数の個々のパレットを有するパレットのセットとしてのパレット184および192の表現は、一例にすぎず、限定することは意図されない。
[0135] 図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によって送信される。
[0136] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、第1のパレット184に基づいて第2のパレット192を決定し得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、予測パレット、この例では第1のパレット184が決定される際に参照する、1つまたは複数のブロックを位置特定することができる。予測の目的で使用されているエントリーの組合せは、予測子パレットと呼ばれ得る。
[0137] 図4の例では、第2のパレット192は、エントリーインデックス値1、エントリーインデックス値2、およびエントリーインデックス値3をそれぞれ有する、3つのエントリー208〜212を含む。エントリー208〜212は、ピクセル値A、ピクセル値B、およびピクセル値Dをそれぞれ含むピクセル値に、インデックス値を関連付ける。この例では、ビデオエンコーダ20は、第1のパレット184(予測子パレットを表す、ただし予測子パレットはいくつかのブロックのエントリーを含み得る)のどのエントリーが第2のパレット192に含まれるかを示す1つまたは複数のシンタックス要素をコーディングし得る。
[0138] 図4の例では、1つまたは複数のシンタックス要素は、ベクトル216として示される。ベクトル216は、いくつかの関連するビン(またはビット)を有し、各ビンは、そのビンと関連付けられた予測子パレットが現在のパレットのエントリーを予測するために使用されるかどうかを示す。たとえば、ベクトル216は、第1のパレット184の最初の2つのエントリー(202および204)が、第2のパレット192中に含まれる(ベクトル216中の「1」の値)一方で、第1のパレット184の第3のエントリーが、第2のパレット192中に含まれない(ベクトル216中の「0」の値)ことを示す。図4の例では、ベクトルは、ブールベクトルである。このベクトルはパレット予測ベクトルと呼ばれることがある。
[0139] いくつかの例では、本明細書で述べられたように、ビデオエンコーダ20およびビデオデコーダ30は、パレット予測を実行するとき、(予測子パレットテーブルまたは予測子パレットリストとも呼ばれ得る)予測子パレットを決定することができる。予測子パレットは、現在のブロックをコーディングするためのパレットの1つまたは複数のエントリーを予測するために使用される1つまたは複数の隣接ブロックのパレットからのエントリーを含み得る。ビデオエンコーダ20およびビデオデコーダ30は、同じ方式でリストを構築し得る。ビデオエンコーダ20およびビデオデコーダ30は、予測子パレットのどのエントリーが現在のブロックをコーディングするためのパレットに複製されるべきかを示すために、データ(ベクトル216など)をコーディングし得る。
[0140] したがって、いくつかの例では、以前に復号されたパレットエントリーは、パレット予測子として使用するためにリストに記憶される。このリストは、現在のパレットモードCUにおいてパレットエントリーを予測するために使用され得る。リスト中のどのエントリーが現在のパレットにおいて再使用されるかを示すために、二進予測ベクトルがビットストリームにおいてシグナリングされ得る。2014年6月27日に出願された米国仮出願第62/018,461号では、二進パレット予測子を圧縮するために、ランレングスコーディングが使用される。ある例では、ランレングス値は、0次の指数ゴロム符号を使用してコーディングされる。
[0141] 本開示の態様によれば、いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30(たとえば、エントロピー符号化ユニット118およびエントロピー復号ユニット150)は、図1の例に関して上で説明されたように、k次の切捨て指数ゴロム(TEGk)符号を使用して、ブロックのパレットのための二進パレット予測ベクトルをコーディング(たとえば、それぞれ符号化および復号)するように構成され得る。
[0142] いくつかの事例では、ビデオエンコーダ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次の指数ゴロム符号を使用してランレングス値がコーディングされる
[0143] 説明を目的とする例では、二進パレット予測ベクトルは{1100100010000}に等しくてよく、パレット予測子の4つのエントリー(4つの1によって示される)が現在のブロックをコーディングするためのパレットに複製されることを示す。この例では、ビデオエンコーダ20およびビデオデコーダ30は、0−0−3−4−1としてベクトルをコーディングし得る。
[0144] 本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、二進パレット予測ベクトルを、そのベクトルのための最大ラン値Xを使用してコーディングすることができ、最大ラン値Xは、パレット予測子リスト中のパレットエントリーの数から走査順序における現在の位置を引き、さらに1を引いたものに等しくてよい)。一例によれば、ビデオエンコーダ20およびビデオデコーダ30は、ラン値をコーディングするためにTEG0符号を使用する。
[0145] 図5は、本開示の技法に従った、ピクセルのブロックのためのパレットに対するインデックスを決定する例を示す概念図である。たとえば、図5は、パレットインデックスと関連付けられるピクセルのそれぞれの位置をパレット244のエントリーに関連付ける、パレットインデックスのマップ240を含む。
[0146] たとえば、インデックス1は値Aと関連付けられ、インデックス2は値Bと関連付けられ、インデックス3は値Cと関連付けられる。加えて、エスケープサンプルが暗黙的エスケープシグナリングを使用して示されるとき、ビデオエンコーダ20およびビデオデコーダ30はまた、インデックス4として図5に示される追加のインデックスをパレット244に追加することができ、これは、インデックス4と関連付けられるマップ240のサンプルがエスケープサンプルであることを示し得る。この場合、ビデオエンコーダ20は、ピクセル値がパレット244に含まれない場合、マップ240の中のある位置に対する実際のピクセル値(またはその量子化されたバージョン)を示すものを符号化することができる(および、ビデオデコーダ30は、符号化されたビットストリームからそれを取得することができる)。
[0147] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、どのピクセル位置が関連するパレットインデックスであるかを示す追加のマップをコーディングするように構成され得る。たとえば、マップ中の(i,j)のエントリーがCUの(i,j)の位置に対応すると仮定する。ビデオエンコーダ20は、エントリーが関連付けられるインデックス値を有するかどうかを示す、マップの各エントリー(すなわち、各ピクセル位置)のための1つまたは複数のシンタックス要素を符号化することができる。たとえば、ビデオエンコーダ20は、CU中の(i,j)の場所におけるピクセル値がパレット244の中の値の1つであることを示すように、1という値を有するフラグを符号化することができる。
[0148] そのような例では、ビデオエンコーダ20はまた、パレット中のそのピクセル値を示し、ビデオデコーダがピクセル値を再構築することを可能にするように、パレットインデックス(値1〜3として図5の例では示される)を符号化することができる。パレット244が単一のエントリーと関連付けられるピクセル値とを含む例では、ビデオエンコーダ20は、インデックス値のシグナリングをスキップすることができる。ビデオエンコーダ20は、CU中の(i,j)の場所におけるピクセル値がパレット244の中の値の1つではないことを示すように、0という値を有するようにフラグを符号化することができる。この例では、ビデオエンコーダ20はまた、ピクセル値を再構築する際にビデオデコーダ30によって使用するために、ピクセル値の指示を符号化することができる。いくつかの例では、ピクセル値は有損失の方式でコーディングされ得る。
[0149] CUの1つの位置におけるピクセルの値は、CUの他の位置における1つまたは複数の他のピクセルの値の指示を提供することができる。たとえば、CUの隣接ピクセル位置が同じピクセル値を有すること、または、(2つ以上のピクセル値が単一のインデックス値にマッピングされ得る、有損失コーディングの場合において)CUの隣接ピクセル位置が同じインデックス値にマッピングされ得ることの確率が比較的高いことがある。
[0150] したがって、ビデオエンコーダ20は、同じピクセル値またはインデックス値を有する、所与の走査順序の中の連続するピクセル値またはインデックス値の数を示す1つまたは複数のシンタックス要素を符号化することができる。上で述べられたように、同様の値のピクセル値またはインデックス値の列は、本明細書ではランと呼ばれ得る。例示を目的とする例では、所与の走査順序の2つの連続するピクセルまたはインデックスが異なる値を有する場合、ランは0に等しい。所与の走査順序の2つの連続するピクセルまたはインデックスが同じ値を有するが、その走査順序の3番目のピクセルまたはインデックスが異なる値を有する場合、ランは1に等しい。同じ値を伴う3つの連続するインデックスまたはピクセルでは、ランは2であり、以下同様である。ビデオデコーダ30は、符号化されたビットストリームからランを示すシンタックス要素を取得し、そのデータを使用して、同じピクセル値またはインデックス値を有する連続する場所の数を決定することができる。
[0151] 上で述べられたように、ランは、CopyFromTopモードまたはValueモードとともに使用され得る。説明を目的とする例では、マップ240の行264と268とを考える。水平方向の左から右への走査方向を仮定すると、行264は、「1」という3個のパレットインデックスと、「2」という2個のパレットインデックスと、「3」という3個のパレットインデックスとを含む。行268は、「1」という5個のパレットインデックスと、「3」という2個のパレットインデックスと、パレット244に含まれない1個のサンプル(インデックス4によって表される、ただしサンプルレベルエスケープフラグが明示的エスケープシグナリングのために使用され得る)とを含み、この1個のサンプルはエスケープサンプルと呼ばれ得る。
[0152] この例では、ビデオエンコーダ20は、行268のためのデータを符号化するために、CopyFromTopモードを使用し得る。たとえば、ビデオエンコーダ20は、行268の第1の位置(行268の一番左の位置)が行264の第1の位置と同じであることを示す、1つまたは複数のシンタックス要素を符号化することができる。ビデオエンコーダ20はまた、行268の中の走査方向の2つの連続するエントリーの次のランが行264の第1の位置と同じであることを示す、1つまたは複数のシンタックス要素を符号化することができる。
[0153] 行264の第1の位置を示す1つまたは複数のシンタックス要素と、(上で述べられた)2つのエントリーのランとを符号化した後で、ビデオエンコーダ20は、Valueモードを使用して、(左から右に)行268の中の第4の位置と第5の位置とを符号化することができる。たとえば、ビデオエンコーダ20は、第4の位置に対して1という値を示す1つまたは複数のシンタックス要素と、1というランを示す1つまたは複数のシンタックス要素とを符号化することができる(たとえば、Valueモード)。したがって、ビデオエンコーダ20は、別の線を参照することなくこれらの2つの位置を符号化する。
[0154] ビデオエンコーダ20は次いで、上の行264に対してCopyFromTopモードを使用して、行268の中の3というインデックス値を有する第1の位置を符号化することができる。たとえば、ビデオエンコーダ20は、CopyFromTopモードと、1というランとをシグナリングすることができる。したがって、ビデオエンコーダ20は、たとえばランを使用して線のピクセル値またはパレットインデックスを線の他の値に対してコーディングすること、線のピクセル値またはを別の線(または列)の値に対してコーディングすること、またはこれらの組合せの中から選択することができる。ビデオエンコーダ20は、いくつかの例では、この選択を行うために、レート/歪みの最適化を実行することができる。
[0155] ビデオエンコーダ20は次いで、走査順序に従って(たとえば、左から右に)行268の最後のサンプルのためのエスケープサンプルを符号化することができ、これは第1のパレット244に含まれない。たとえば、ビデオエンコーダ20は、行268の最後の位置をエスケープサンプルとして符号化することができる。すなわち、ビデオエンコーダ20は、行268の最後の位置がエスケープサンプル(たとえば、インデックス4)であるという指示、ならびにサンプル値の指示を符号化することができる。ビデオデコーダ30は、符号化されたビットストリームから上で説明されたシンタックスを取得し、そのようなシンタックスを使用して行268を再構築することができる。
[0156] ビデオデコーダ30は、上で説明されたシンタックス要素を受け取り、行268を再構築することができる。たとえば、ビデオデコーダ30は、現在コーディングされているマップ240の場所に対する関連するインデックス値をコピーする際に元となる、隣接する行の中の特定の位置を示すデータを取得することができる。ビデオデコーダ30はまた、同じインデックス値を有する、走査順序の中の連続する場所の数を示すデータを取得することができる。水平方向の走査順序に関して説明されるが、本開示の技法はまた、垂直方向または対角方向(たとえば、ブロックにおいて対角方向に45度または135度)の走査順序または走査方向などの、別の走査順序または走査方向に適用され得る。
[0157] 本開示の技法は、以下でより詳細に説明されるように、パレットサイズの定義を含むパレットベースのビデオコーディングの設計に関する。本開示の技法は、スクリーンコンテンツコーディングおよびHEVCに対する他の拡張、ならびに、スクリーンコンテンツコーディングを利用する他のビデオコーデックとともに使用され得る。
[0158] HEVCパレットコーディングの一例では、ブロックのピクセルは、RunモードまたはEscapeモードだけが使用されるときのブロックの最初の行を除き、Runモード、Copyモード、またはEscapeモードの1つを用いてコーディングされ得る。Runモードが使用されるかCopyモードが使用されるかを示すために、シンタックス要素palette_run_type_flagが生成され得る。runモードでは、パレットインデックス(palette_index)がラン値(palette_run)とともにシグナリングされる。ラン値は、同じパレットインデックスを有するピクセルの数を示す。Copyモードでは、現在のピクセルのすぐ上に位置するピクセルからパレットインデックスがコピーされるピクセルの数を示す、ラン値だけがシグナリングされる。Escapeモードは、特定のパレットインデックスがこのモードを示すために使用される場合、Runモード内でコーディングされる。あるパレットコーディングモードの提案では、その特定のパレットインデックスはパレットサイズに等しい。Escapeモードでは、ラン値はコーディングされず、それは、Escapeモードが単一のピクセルトリプレット(たとえば、ピクセルのY、Cr、およびCb色成分)に適用されるからであり、ここで色成分の値はシンタックス要素palette_escape_valを使用して明示的にシグナリングされる。
[0159] エスケープピクセル(escape pixel)の使用を示すために、フラグ(たとえば、palette_escape_val_present_flag)がブロックごとにシグナリングされ得る。1に等しいpalette_escape_val_present_flagは、パレットコーディングされたブロック中に少なくとも1つのエスケープピクセルがあることを示し、それ以外の場合、palette_escape_val_present_flagは0に等しい。
[0160] パレット中の値の数(すなわち、パレットサイズ)は、いくつかの値のうちの1つに設定されてよく、所定の最大サイズを有してよい。たとえば、HEVCにおけるパレットコーディングの1つの提案では、パレットサイズは0からmax_palette_size(一例では31に等しい)の範囲内にあるように制約される。
[0161] あるパレットコーディングモードを用いてコーディングされるブロックについて、パレット中の値は、以前にパレットコーディングされたブロックのために使用されるパレットのパレットエントリーから予測され得る。いくつかの例では、パレットのエントリーは新たなエントリーとして明示的にシグナリングされ得る。他の例では、以前にコーディングされたブロックのパレットからのエントリーが、後続のパレットのために再使用され得る。このケースはパレット共有と呼ばれ、修正を伴わずに以前のブロックのパレット全体が再使用されることを示すために、フラグ(たとえば、palette_share_flag)がシグナリングされ得る。
[0162] パレットコーディングモードに対するいくつかの提案では、ブロックにおけるピクセル走査は、垂直横行走査または水平横行(たとえば、蛇状)走査という、2つのタイプであり得る。水平方向の走査順序の一例が図6Aに示されており、図6Aは、ピクセルのアレイ272を用いて図示されるビデオデータ270のブロックと、水平方向の走査順序274とを示している。垂直方向の走査順序の一例が図6Bに示されており、図6Bは、ピクセルのアレイ272を用いて図示されるビデオデータ270のブロックと、垂直方向の走査順序276とを示している。特定のブロックのために使用される走査パターンは、ブロック単位ごとにシグナリングされるフラグ(たとえば、palette_transpose_flag)から導出され得る。
[0163] 現在のパレットコーディングの設計には、以下の欠点がある。1つの例示的な欠点として、パレットコーディングに対するいくつかの提案において、ブロック中の最大パレットサイズは31に等しいことがあり、これは、最大のパレットインデックスが30に等しい可能性があり、31に等しいパレットインデックスを用いてエスケープピクセルがシグナリングされることを意味する。言い換えると、シグナリングされ得る有効なパレットインデックスは31に等しいことがあり、これは32という最大パレットサイズに対応する。しかしながら、ブロック中にエスケープピクセルがないことをpalette_escape_val_present_flagが示す場合、コーディングされ得る最大パレットインデックスは依然として30であり、この場合、31に等しいパレットインデックスは使用されない。同様に、パレット共有が使用されるとき、30に等しいパレットインデックスまでは、現在のブロックにおけるエスケープピクセルの存在とは無関係に使用され得る。
[0164] 別の欠点として、パレットコーディングに対するいくつかの提案において、0に等しいパレットサイズが使用され得る。この場合、ピクセルはEscapeモードだけを用いてコーディングされ得る。結果として、palette_escape_val_present_flagが、1に等しい値を用いて常にシグナリングされなければならず、0という値を有することができない。
[0165] 別の欠点として、パレットコーディングに対するいくつかの提案において、パレットサイズが0に等しい場合、唯一の可能なピクセルモードはEscapeモードである。この場合、ピクセルが処理される走査モードは、何ら影響を与えない(すなわち、垂直横行走査および水平横行走査が同じ結果を生み出す)。しかしながら、走査モードを示すためのフラグはまだシグナリングされる。同様に、パレットサイズが1に等しく、エスケープピクセルが使用されないとき、唯一の可能なモードは、パレットインデックスが0に等しいRunモードである。使用される走査順序は、この状況においても何ら影響を与えない。
[0166] 別の欠点として、パレットコーディングに対するいくつかの提案において、ピクセルモードのシグナリングは、ブロックにおいて均一にシグナリングされない。これは、ブロックの最初の行に対しては、モードがCopyモードになり得ないからである。したがって、ブロックの第1の行に対して、モードインデックスは、Runモード(または特定のパレットインデックス値に対してはEscapeモード)に等しくなるように導出される。この導出プロセスは構文解析の間の確認をもたらし、それは、いくつかの場合には、モード値は構文解析されず、導出されるからである。
[0167] 別の欠点として、パレットコーディングのためのCopyモードに対するいくつかの提案において、Escapeモードを用いてコーディングされる上のピクセル(すなわち、現在コーディングされているピクセルのすぐ上のピクセル)は、Copyモードのラン値へと含められることがある。しかしながら、コピー処理は、エスケープコーディングされたピクセルに対して定義されず、それは、それらのピクセルが2つの情報(すなわち、パレットインデックスおよびエスケープ値)を含むからである。ビデオエンコーダ20が、Copyモードにおいて行われるように、上のピクセルからのパレットインデックス(これは、エスケープモードを表す特定のパレットインデックスである)を単にコピーするとしたら、現在のピクセルに対するエスケープ値は定義またはシグナリングされない。このことは、構文解析において問題を生むことがあり、それは、ビデオデコーダ30がエスケープピクセルを復号することを試みるときに、シグナリングされることが予想されるエスケープ色値が存在しないからである。
[0168] 別の欠点として、パレットコーディングに対するいくつかの提案において、現在のブロックのためのパレットを導出するために2つの一般的な方法がある。1つの方法は、新たなエントリーがシグナリングされ得ない場合に、以前のパレットコーディングされたブロックからのパレットを完全に再使用することを伴う(パレット共有)。2番目の方法は、パレット予測子バイナリベクトル(palette predictor binary vector)をシグナリングすることを伴う。パレット予測子バイナリベクトルは、新たなパレットエントリーとともに、以前のパレットコーディングされたブロックのパレットエントリーの指示を含む。現在の提案では、それらの2つのパレット導出方法の間にある何かをすること、すなわち、パレット予測子ベクトルをシグナリングせずに以前のパレットコーディングされたブロックのパレットを完全に再使用し、しかしそれでも新たなパレットエントリーを追加でシグナリングすることは、可能ではない。したがって、現在の提案は柔軟性を欠いている。
[0169] 前述の欠点を考慮して、本開示は、パレットサイズの定義を含む、パレットコーディングの設計の方法と技法とを提案する。
[0170] 本開示の一例では、改善されたパレットサイズの定義が提案される。この例では、パレットサイズは、パレットの最大の可能なインデックスがエスケープピクセルを表すインデックスを含むように定義される。現在のパレットコーディング技法のための上の例を参照すると、最大パレットサイズが31であるとき、エスケープピクセルに対して最大パレットインデックスは31である。本開示は、最大パレットサイズを32に等しくし、最大の可能なシグナリングされるパレットインデックス値を31とすることを提案する。またはより一般的には、最大の可能なシグナリングされるパレットインデックス値は、最大パレットサイズより1少ない。
[0171] 本開示の例では、エスケープピクセルが現在のブロックにおいて使用されないとき(たとえば、palette_escape_val_present_flagフラグによって示されるように)、この例では空である31に等しい以前のパレットインデックスが、Runモードにおいて使用され得る。palette_escape_val_present_flagシンタックス要素は、1つまたは複数のビットによって定義され得る。例では、palette_escape_val_present_flagが単一のビットである場合、1に等しい値は、現在のブロックがエスケープピクセルを含み得ること、または実際に含むことを規定し得る。0に等しい値は、現在のブロックがエスケープピクセルを含まないことがあること、または実際に含まないことを規定し得る。
[0172] Escapeモードの指示は変更されないままであることがあり、すなわち、Escapeモードの指示は、最大で31という値である(すなわち0から31という値の)最大パレットインデックスであり、Runモードにおけるパレットインデックスは、最大で30(すなわち、0から30という値)に等しくてよい。言い換えると、palette_sizeのパレット内に、エスケープコーディングされるピクセルのための余剰のパレットインデックスは確保されていないことがわかり得る。
[0173] より一般的な意味において、Runモードで使用される最大パレットインデックスは、ブロック中にエスケープコーディングされるピクセルがなければ、palette_size−1であってよく、たとえばpalette_size−1に等しいパレットインデックスによって示され得る少なくとも1つのエスケープコーディングされるピクセルがブロック中にあれば、palette_size−2であってよい。
[0174] この場合、palette_sizeは常に0より大きく、再使用されるパレットエントリーの数とシグナリングされる新たなパレットエントリーの数の合計として導出されるpalette_sizeは、palette_sizeがmax_palette_sizeに等しくない場合、1だけ増やされる。
[0175] 加えて、パレット共有が使用され、palette_sizeのパレット内のパレットインデックスがエスケープピクセルに対して利用不可能である、または別様に確保されていないとき、パレットサイズは単純に1だけ拡張されることが不可能であり、それは、パレットサイズがすでにmax_palette_sizeに等しい可能性があるからである。この例では、ビデオエンコーダ20および/またはビデオデコーダ30は、パレットサイズの確認を実行することができ、共有されるパレットのpalette_sizeがmax_palette_sizeより小さい場合、ビデオエンコーダ20および/またはビデオデコーダ30は、palette_escape_val_present_flagに基づいて現在のブロックのパレットサイズを変更する、または変えることができる。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、エスケープピクセルがブロックにおいて使用される場合(たとえば、palette_escape_val_present_flagによって示されるように)、現在のブロックのパレットサイズを1だけ増やす。しかしながら、ビデオエンコーダ20および/またはビデオデコーダ30は、palette_sizeがすでにmax_palette_sizeに等しいと決定することができ、それに応答して、現在のブロックのパレットサイズを変更する、または変えることができる。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、エスケープピクセルに対して現在のブロックのパレットサイズを1だけ増やす前に、現在のブロックのパレットサイズを1だけ減らすことができる。この例では、ビデオエンコーダ20および/またはビデオデコーダ30は、max_palette_size−1に等しいパレットインデックスに関連する最後のエントリーに対して、再使用されるパレット予測子フラグを0に設定することができる。
[0176] 別の例では、パレット共有が使用されず、パレットサイズがmax_palette_sizeに等しい場合、エスケープピクセルはブロックにおいてコーディングされなくてよく、ビデオエンコーダ20は0に等しい値を伴うpalette_escape_val_present_flagをシグナリングすることができる。ビデオエンコーダ20は、パレットサイズに依存する対応する値(たとえば、0または1)を伴うpalette_escape_val_present_flagを条件的にシグナリングすることができる。別の例では、ビデオエンコーダ20は、現在のブロックのパレットサイズがmax_palette_sizeに等しい場合、パレット共有モードに依存する対応する値(たとえば、0または1)を伴うpalette_escape_val_present_flagを条件的にシグナリングすることができる。別の例では、パレット共有が有効にされた状態でパレットサイズがmax_palette_sizeに等しいときにエスケープピクセルのシグナリングを有効にすることが望まれるとき、パレット共有が使用されない場合、ビデオエンコーダ20はpalette_escape_val_present_flagをシグナリングしなくてよく、ビデオデコーダ30はpalette_escape_val_present_flagの値を0に等しいものとして導出することができる。他の例では、ビデオデコーダ30は、palette_escape_val_present_flagがビデオエンコーダ20によってシグナリングされないとき、palette_escape_val_present_flagの値を1に等しいものとして導出することができる。
[0177] 以下のセクションは、palette_escape_val_present_flagの値を導出するための技法を論じる。0に等しいパレットサイズに基づいて、ビデオエンコーダ20は、Escapeモードでコーディングされるピクセルだけが現在のブロックにおいて使用され得ると決定することができる。この例では、ビデオエンコーダは、1に等しい値を伴うpalette_escape_val_present_flagをシグナリングすることができ、またはそれを常にシグナリングする。ビデオエンコーダ20は、palette_escape_val_present_flagをシグナリングしないことがあり、またはそれを常にシグナリングせず、それは、palette_escape_val_present_flagの値がこの例では一定であるからである。代わりに、ビデオデコーダ30は、palette_escape_val_present_flagの値を1に等しいものとして推測するように構成され得る。他の例では、ビデオデコーダ30は、palette_escape_val_present_flagの値を0に等しいものとして推測するように構成され得る。
[0178] ビデオエンコーダ20は、ビデオデータの現在のブロックのパレットサイズに基づく対応する値を伴うpalette_escape_val_present_flagを条件的にシグナリングすることができる。たとえば、ビデオエンコーダ20は、パレットサイズが0に等しいとビデオエンコーダ20が決定したことに応答して、palette_escape_val_present_flagをシグナリングしなくてよい。別の例として、ビデオエンコーダ20は、パレットインデックスをシグナリングしないように構成されてよく、それは、パレットインデックスが0に等しく導出されることもあるからである。この場合、パレットモードはイントラPCMモードと類似している。しかしながら、ビデオエンコーダ20は、この場合のエスケープ値に対するランをシグナリングし、そのランをPCMとは異なるものにし、いくらかの信号の冗長性を捉えるように構成され得る。
[0179] たとえば、この方法は、SCC WDに対して次のように実施されてよく、追加が下線付きのテキストによって表されている。
1に等しいpalette_escape_val_present_flagは、現在のブロックがエスケープピクセルを含み得ることを規定する。0に等しいescape_val_present_flagは、現在のブロック中にエスケープピクセルがないことを規定する。palette_escape_val_present_flagが存在しない場合、それは1に等しいと推測される。
[0180] 別の例では、本開示の技法は、シンタックス要素に対する規範的な制約として次のように実装されてよく、SCC WDへの追加が下線付きのテキストによって表されている。
1に等しいpalette_escape_val_present_flagは、現在のブロックがエスケープピクセルを含み得ることを規定する。0に等しいescape_val_present_flagは、現在のブロック中にエスケープピクセルがないことを規定する。palette_sizeが1に等しい場合、palette_escape_val_present_flagは1に等しいものとする。
[0181] この規則が破られる場合、そのようなビットストリームは規格に適合しないものと見なされる。
[0182] パレットサイズの定義およびpalette_escape_val_present_flagの導出について上で説明された方法は、例として与えられる次の実装形態と一緒に組み合わされてよく、SCC WDへの追加が下線付きのテキストによって表されている。
[0183] 上の表のイタリック体の条件は、パレット共有が有効にされるときにmax_palette_sizeに等しいパレットサイズを伴うパレットモードにエスケープピクセルが含まれ得ない場合、除去され得る。変数indexMaxは、最大の可能なパレットインデックスを示し、これは、SCC WDにおけるpalette_escape_val_present_flagに基づく条件的な調整と対照的に、palette_size−1として非条件的に設定され得る。
[0184] 本開示のこのセクションは、走査順序のシグナリングを説明する。本開示のいくつかの例によれば、ピクチャ(たとえば、現在のCU、PU、またはサブPU)のビデオデータの現在のブロックのための走査順序(scanning order)のシグナリング(または走査順序(scan order)のシグナリング)は、ビデオデータの現在のブロックのパレットサイズが0に等しいとき、またはパレットサイズが1に等しくエスケープピクセルがそのブロックにおいて使用されないときには必要とされず、それは、唯一の可能なピクセルモードがそれぞれ、EscapeモードまたはRunモードであるからである。
[0185] 本開示は、走査順序が影響を与え得る場合(すなわち、異なる走査順序が異なる結果を生み出すとき)にだけ、たとえば、パレットサイズが0より大きくエスケープピクセルが使用されるとき、または、エスケープピクセルが使用されない場合にパレットサイズが1より大きいとき、ビデオエンコーダ20が走査順序フラグをシグナリングすることを提案する。
[0186] 2つの例として、この方法は、SCC WDに対して次のように実施されてよく、追加が下線付きのテキストによって表されている。
または
1に等しいpalette_transpose_flagは、転置処理(transpose process)が現在のCU(たとえば、符号化または復号されているピクチャのビデオデータの現在のブロック)の関連するパレットインデックスに適用されることを規定する。0に等しいpalette_transpose_flagは、転置処理が現在のCUの関連するパレットインデックスに適用されないことを規定する。palette_transpose_flagが存在しない場合、それは0であると推測される。
[0187] 存在しない場合にpalette_transpose_flagの値が0に等しいとビデオデコーダ30が推測する代わりに、他の例では他の事前に定められた走査順序が使用され得る。この方法はまた、3つ以上の走査パターンに拡張され得る。
[0188] 走査順序をシグナリングするための本開示の技法の一例では、ビデオエンコーダ20は、palette_transpose_flagの値をシグナリングする前に、palette_escape_val_present_flagの値をシグナリングしなければならない。
[0189] 別の例では、ビデオエンコーダは、ビデオデータの現在のブロックのパレットサイズが0に等しいと決定することができ、結果として、ビデオエンコーダ20は、各ピクセルをエスケープピクセルとしてコーディングすることができる。エンコーダのレート−歪みの最適化の観点からは、この事例は選ばれる可能性はより低い。したがって、パレットモードが選択される場合にはパレットサイズが1以上でなければならないという制約を、パレットモードに対して課すことが提案される。
[0190] このビットストリームの制約に基づいて、palette_num_signalled_entriesシンタックス要素のセマンティクスは次の通りであり、SCC WDに対する追加が下線付きのテキストによって表されている。
palette_num_signalled_entriesは、numPredPreviousPaletteが0より大きい場合、現在のコーディングユニットのために明示的にシグナリングされるパレット中のエントリーの数を規定する。palette_num_signalled_entriesは、numPredPreviousPaletteが0に等しい場合、現在のコーディングユニットのために明示的にシグナリングされるパレット中のエントリーの数から1を引いたものを規定する。
[0191] 本開示の別の例では、numPredPreviousPaletteが0に等しいときにシンタックス要素palette_num_signalled_entriesのセマンティクスを変える代わりに、シンタックス要素palette_num_signalled_entriesの値の有効範囲だけが次のように変更され、SCC WDに対する変更が下線付きのテキストによって表されている。
palette_num_signalled_entriesは、現在のコーディングユニットのために明示的にシグナリングされるパレット中のエントリーの数を規定する。palette_num_signalled_entriesの値は、次のように制約される。numPredPreviousPaletteが0より大きい場合、palette_num_signalled_entriesは、両端を含めて0から(max_palette_size−numPredPreviousPalette)の範囲内にあるものとする。それ以外の場合(すなわち、numPredPreviousPaletteが0に等しい場合)、palette_num_signalled_entriesは、両端を含めて1からmax_palette_sizeの範囲内にあるものとする。
[0192] 図7は、本開示の技法による、ビデオデータを復号するための例示的なプロセスを示すフローチャートである。図7のプロセスは全般に、例示を目的として、ビデオデコーダ30によって実行されるものとして説明されるが、様々な他のプロセッサも図7に示されるプロセスを実行し得る。いくつかの例では、ブロック復号ユニット152および/またはパレットベースの復号ユニット165は、図7に示される1つまたは複数のプロセスを実行することができる。
[0193] 図7の例では、ビデオデコーダ30は、ピクチャのビデオデータの第1のパレットモード符号化されたブロックを受信することができる(280)。ビデオデコーダ30は、第1のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信することなく、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測することができる(282)。いくつかの例では、ビデオデコーダ30によって受信されないブロックレベルシンタックス要素は、palette_transpose_flagであり得る。ビデオデコーダ30は、推測されたピクセル走査順序を使用して、ビデオデータの第1のパレットモード符号化されたブロックを復号することができる(284)。
[0194] いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のパレットモード符号化されたブロックを復号するためにビデオデータの第1のパレットモード符号化されたブロックと関連付けられるパレットインデックスに転置処理が適用されることになるように、または適用されないことになるように、第1のパレットモード符号化されたブロックのための第1のブロックレベルシンタックス要素の値を推測することによって、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測することができる。転置処理がビデオデータの第1のパレットモード符号化されたブロックと関連付けられるパレットインデックスに適用されることになる例では、ブロックレベルシンタックス要素の推測される値は1であり得る。転置処理がビデオデータの第1のパレットモード符号化されたブロックと関連付けられるパレットインデックスに適用されないことになる例では、ブロックレベルシンタックス要素の推測される値は0であり得る。いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序が非水平方向(non-horizontal)または非垂直方向(non-vertical)のピクセル走査順序(pixel scan order)であると推測されるように、ブロックレベルシンタックス要素の値を推測することによって、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測することができる。
[0195] いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のパレットモード符号化されたブロックのパレットサイズが、0という値に等しい、1という値に等しい、0という値より大きい、または1という値より大きいことに基づいて、ビデオデータの第1のパレットモード符号化されたブロックのピクセル走査順序を推測することができる。
[0196] ビデオデコーダ30は、ピクチャのビデオデータの第2のパレットモード符号化されたブロックを受信することができる(286)。ビデオデコーダ30は、ビデオデータの第2のパレットモード符号化されたブロックのピクセル走査順序を表す値を有するブロックレベルシンタックス要素を受信することができる(288)。いくつかの例では、受信されたブロックレベルシンタックス要素は、palette_transpose_flagであり得る。ビデオデコーダ30は、受信されたブロックレベルシンタックス要素に基づいて、ビデオデータの第2のパレットモード符号化されたブロックのピクセル走査順序を決定することができる(290)。ビデオデコーダ30は、決定されたピクセル走査順序を使用して、ビデオデータの第2のパレットモード符号化されたブロックを復号することができる(292)。
[0197] 図8は、本開示の技法による、ビデオデータを符号化するための例示的なプロセスを示すフローチャートである。図8のプロセスは全般に、例示を目的として、ビデオエンコーダ20によって実行されるものとして説明されるが、様々な他のプロセッサも図7に示されるプロセスを実行し得る。いくつかの例では、ブロック符号化ユニット100および/またはパレットベース符号化ユニット122は、図8に示される1つまたは複数のプロセスを実行することができる。
[0198] 図8の例では、ビデオエンコーダ20は、パレットモードを使用してビデオデータのブロックが符号化されるべきであると決定することができる(300)。ビデオエンコーダ20は、ビデオデータのブロックのパレットサイズを決定することができる(302)。ビデオエンコーダ20は、ビデオデータのブロックのピクセル走査順序を決定することができる(304)。ビデオエンコーダ20は、パレットモードを使用してビデオデータのブロックを符号化することができる(306)。ビデオエンコーダ20は、パレットサイズに基づいて、ビデオデータのブロックのために使用されるピクセル走査順序を表す第1のブロックレベルシンタックス要素をシグナリングするかどうかを決定することができる(308)。いくつかの例では、第1のブロックレベルシンタックス要素は、palette_transpose_flagであり得る。
[0199] いくつかの例では、第1のブロックレベルシンタックス要素をシグナリングするかどうかを決定することは、パレットサイズが0という値に等しいこと、1という値に等しいこと、0という値より大きいこと、または1という値より大きいことに基づき得る。他の例では、第1のブロックレベルシンタックス要素をシグナリングするかどうかを決定することは、ビデオデータのパレット符号化されたブロック(palette encoded block)が少なくとも1つのエスケープピクセルを含むかどうかに基づき得る。他の例では、第1のブロックレベルシンタックス要素をシグナリングするかどうかを決定することは、ビデオデータのパレット符号化されたブロックが少なくとも1つのエスケープピクセルを含むかどうかを表す第2のブロックレベルシンタックス要素の値に基づき得る。
[0200] いくつかの例では、図8の例に示される方法は、パレットサイズが0という値に等しいとき、第1のブロックレベルシンタックス要素をシグナリングしないことを含み得る。別の例では、第1のブロックレベルシンタックス要素は、パレットサイズが1という値に等しく、ビデオデータのパレット符号化されたブロックが少なくとも1つのエスケープピクセルを含まないとき、シグナリングされなくてよい。別の例では、第1のブロックレベルシンタックス要素は、パレットサイズが1という値に等しく、ビデオデータのパレット符号化されたブロックが少なくとも1つのエスケープピクセルを含まないことを第2のブロックレベルシンタックス要素の値が表すとき、シグナリングされなくてよい。
[0201] 図9は、ビデオデータのブロックの第1の行に対してCopyモードを有効にする例を示す概念図である。パレットコーディングに対する現在の提案において、Copyモードはブロック中の最初の行のために使用されず、それは、現在のブロックの内側に位置する第1の行のすぐ上にピクセルがないからでる。したがって、Copyモードは第1の行に対してシグナリングされず、Runモードがパレットコーディングに対する現在の提案のもとでは導出される。このことは、構文解析の間の確認をもたらし、それは、ピクセルモードがシグナリングされずに導出されることがあるからである。
[0202] 本開示の例示的な技法では、ビデオエンコーダ20は、第1の行の中のCopyモードを用いてコーディングされるピクセルのためのデフォルトのパレットインデックスに等しくパレットインデックスを設定することによって、ピクチャのビデオデータの現在のブロック中のピクセルの最初の行(たとえば、ビデオデータ320の現在のブロックの中において行0として図示されている)に対してCopyモードを有効にすることができる。ビデオデータ320の現在のブロックは8×8のブロックとして示されているが、他の例では、ビデオデータ320の現在のブロックは任意の他のサイズであり得る。最初の行に関して、ピクセルの複数の行を含むビデオデータ320のブロックの他の行は、ビデオデータの現在のブロックの第1の行の上にないことを理解されたい。しかしながら、他のピクセルは、同じピクチャからのビデオデータの別のブロックに由来する、ビデオデータ320の現在のブロックの第1の行の中の任意のピクセルに隣接し得る(実装される走査順序に応じて、左、右、上、または対角方向にある)ことも理解されたい。「ビデオデータの現在のブロック」における用語「現在の」は、ビデオデータのブロックが、ビデオエンコーダ20によって符号化されるビデオデータの現在のブロック、またはビデオデコーダ30によって復号されるビデオデータの現在のブロックのいずれかであることを意味する。
[0203] いくつかの例では、デフォルトのパレットインデックスは、少なくとも各ブロック、スライスヘッダ、ビデオパラメータセット(VPS)、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)などの任意のパラメータセット、または他のもののための、固定されたインデックスまたはシグナリングされるインデックスであり得る。いくつかの例では、第1の行に対してCopyモードを有効にすることは、ビデオデータのブロック中のピクセルの第1の行の中の少なくとも1つのピクセルがCopyモードを使用して符号化されるように、パレットモードを使用してビデオデータのブロックを符号化することを可能にする。
[0204] デフォルトの(固定された)インデックスは、0からpalette_size−1の範囲にある現在のブロックの有効なパレットインデックスの1つであり得る。たとえば、デフォルトのインデックスは常に0に等しくてよいが、他の値も可能である。デフォルトのインデックスは、第1の行においてシグナリングされる他のインデックス値に依存し得る。たとえば、第1のシグナリングされるインデックスが1であり、第2のシグナリングされるインデックスが2である場合、別のインデックスがあれば、インデックス1が再び現れる可能性が高い。したがって、デフォルトのインデックスは、第1の行に対してcopyモードによって導かれるインデックス値であり得る。
[0205] いくつかの例では、デフォルトのパレットインデックスは、ビデオデータ320のブロックに対応するパレットインデックスの1つであり得る。他の例では、デフォルトのパレットインデックスは、ビデオデータのブロックに対応するパレットインデックスの中の第1のインデックスであり得る。デフォルトのパレットインデックスは、0という値(またはビデオデータの現在のブロックの別の有効なパレットインデックスに対応する任意の他の値)によって特定されてよく、ここで、パレットインデックス中の第1のインデックスは0という値によって特定される。さらに他の例では、デフォルトのパレットインデックスは、ビデオデータの現在のブロックに対応するパレットインデックスの1つではないことがある。そのような例では、デフォルトのパレットインデックスは、以前に符号化または復号されたビデオデータの別のブロックに対応するパレットインデックスからのインデックスであり得る。
[0206] 第1の行に対して有効にされたCopyモードのために、パレットインデックスおよびパレット最大インデックスは、ビデオデータ320の現在のブロック中の他の行のためのパレットインデックスに対して行われるのと同様に、シグナリングの前に調整され得る。加えて、(たとえば、以前に符号化または復号されたビデオデータの別のブロックからの)第1の行の上に位置するピクセルを含むビデオデータ320の現在のブロックの外側に位置する仮想ピクセルはエスケープコーディングされない、たとえばCopyモードを用いてコーディングされないものとして定義されてよく、パレットインデックスはデフォルトのパレットインデックスに等しくてよい。この追加の定義は、パレットインデックスのシグナリングにおける冗長性を避けるために使用され得る。たとえば、最初のピクセルのピクセルモードは、パレットインデックスがデフォルトのパレットインデックスに等しいRunモードに等しくはなり得ず、それは、このピクセルがCopyモードを用いてコーディングされるからである。
[0207] たとえば、実装形態は次の通りであり得る。
ピクセルがブロック中の最初のピクセルである場合、
〇 最大パレットインデックスは1だけ減らされる
〇 パレットインデックスは1だけ減らされる
そうではなく、走査順序において左側のコーディングされたピクセルのピクセルモードがRunモードである場合、以下が適用される:
〇 最大パレットインデックスは1だけ減らされる
〇 パレットインデックスが走査順序において左側のピクセルのパレットインデックスより大きい場合、パレットインデックスは1だけ減らされる
そうではなく、走査順序において左側のコーディングされたピクセルのピクセルモードがCopyモードであり、現在のピクセルが第1の行の中に位置する場合、または、ピクセルが第1の行の中になく、すぐ上のピクセルのピクセルモードがEscapeモードではない場合、以下が適用される:
〇 最大パレットインデックスは1だけ減らされる
〇 パレットインデックスが走査順序において上側のピクセルのパレットインデックスより大きい場合、または上側のピクセルがブロックの外側にある場合にはデフォルトのパレットインデックスに等しい場合、パレットインデックスは1だけ減らされる。
[0208] たとえば、この方法は、SCC WDに対して次のように実施されてよく、追加が下線付きのテキストによって表されており、削除が取消線付きのテキストによって表されている。
[0209] 本明細書で説明される技法では、2つ以上のデフォルトのインデックスが使用され得る。加えて、インデックスが使用される順序は異なるパターンを有し得る。使用されるパターンは、ビデオエンコーダ20とビデオデコーダ30の両方において固定され記憶されてよく、またはこのパターンは、デフォルトのインデックスに対して行われるのと同様に、ビデオエンコーダ20からビデオデコーダ30にシグナリングされてよい。
[0210] ピクセルモード(RunモードまたはCopyモード)のシグナリングは、Copyモードが第1の行において有効にされるとき、ビデオデータ320の現在のブロックの第1の行のために追加され得る。いくつかの例では、ピクセルモードのシグナリングのためのシンタックス要素が、コンテキストのモデル化を使用してCABACコーディングされ得る。第1の行の中のピクセルモードシンタックス要素のコンテキストは、ビデオデータ320の現在のブロックの他の行に対するピクセルモードシンタックス要素のためのコンテキストと共有され得る。たとえば、参照ピクセルがCopyモードを用いてコーディングされた場合、コンテキスト0が使用されてよく、参照ピクセルがRunモードを用いてコーディングされた場合、コンテキスト1が使用されてよく、またはこの逆であってよい。
[0211] 参照ピクセルは、現在のピクセルの左側のピクセルであってよく、第2の行以降では上側のピクセルであってよく、および/または、最初の行では(第1の行に上側のピクセルはないので)左側のピクセルであってよい。より一般的には、参照ピクセルは、ピクセルモード情報が利用可能である場合、すでにコーディングされているピクセルであり得る。最初のピクセルに対しては、利用可能な参照ピクセルがないことがある。この状況において、第1の行に対するシンタックス要素のためのコンテキストは、事前に定義され得る(たとえば、以前に使用されたコンテキストが選択されてよく、または別のコンテキストが使用されてよい)。
[0212] 別の例では、単一のコンテキストだけが使用されてよく、第1の行の中のピクセルモードシンタックス要素をコーディングするためのコンテキストは、コンテキスト0またはコンテキスト1だけと共有され得る。
[0213] しかしながら、コンテキストを共有することはすべての状況において最良の選択肢であるとは限らず、それは、第1の行において特定のピクセルモードを使用することの統計が他の行における統計とは異なることがあるからであり、それは、パレットインデックスの選択が第1の行ではより限られている(たとえば、デフォルトの1つのインデックス/複数のインデックスだけが使用される)からである。したがって、別の例では、1つまたは複数の別のコンテキストが、第1の行におけるピクセルモードのためのピクセルモードシンタックス要素に対して割り当てられ得る。たとえば、別のコンテキストは、コンテキスト2などの単一の追加のコンテキストにすぎないことがあり、または別のコンテキストは、参照ピクセルのピクセルモードに依存することがある。たとえば、参照ピクセルがCopyモード用いてコーディングされる場合、コンテキスト2がピクセルモードシンタックス要素をコーディングするために使用されてよく、参照ピクセルがRunモードにおいてコーディングされる場合、コンテキスト3がピクセルモードシンタックス要素をコーディングするために使用されてよい。最初のピクセルのためのシンタックス要素に対して、コンテキストは、コンテキスト2またはコンテキスト3に固定されてよく、または別の例では、別のコンテキスト4が使用されてよい。
[0214] 第1の行に対してCopyモードを有効にすることとともに使用され得る、またはそのことを伴わずに使用され得る、より一般的な手法として、ビデオエンコーダ20および/またはビデオデコーダ30は、Escapeモードを含む参照ピクセルモードに従ってコンテキストを分割することができ、Escapeモードのためのコンテキストは現在、Runモードと共有される。この場合、コンテキストの数は、Runモードに対して1つ、Copyモードに対して1つ、およびEscapeモードに対して1つの、少なくとも3つであることがあり、ここでモードは参照ピクセルのモードである。
[0215] 同様に、Escapeモードを含むコンテキストの拡張が、第1の行に対する有効にされたCopyモードを用いて行われ得る。
[0216] 図10は、本開示の技法に適合する、ビデオデータを復号するための例示的なプロセスを示すフローチャートである。図10のプロセスは全般に、例示を目的として、ビデオデコーダ30によって実行されるものとして説明されるが、様々な他のプロセッサも図10に示されるプロセスを実行し得る。いくつかの例では、ブロック復号ユニット152および/またはパレットベースの復号ユニット165は、図10に示される1つまたは複数のプロセスを実行することができる。
[0217] 図10の例では、ビデオデコーダ30は、パレットモードを使用してビデオデータのブロックが符号化されるべきであると決定することができる(330)。ビデオデコーダ30は、ピクセルの複数の行を有するビデオデータのパレットモード符号化されたブロックを受信することができる(332)。ビデオデコーダ30は、ビデオデータのパレットモード符号化されたブロックに対応するパレットインデックスを受信することができる(334)。ビデオデコーダ30は、ビデオデータのパレットモード符号化されたブロックのピクセル走査順序を決定することができる(336)。ビデオデコーダ30は、ピクセル走査順序を使用して、ビデオデータのパレットモード符号化されたブロックを復号することができる(338)。ビデオデコーダ30は、ビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを、ピクセルの複数の行のうちの他の行が第1の行の上にない場合に、copyモードを使用して復号することができる(340)。
[0218] いくつかの例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、ピクセルの第1の行の中の少なくとも1つのピクセルのためのデフォルトのパレットインデックスを使用することを含み得る。他の例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、ビデオデータの符号化されたブロックに対応するパレットインデックスの1つであるピクセルの第1の行の中の少なくとも1つのピクセルのためのデフォルトのパレットインデックスを使用することを含み得る。他の例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、パレットインデックス中の第1のインデックスであるピクセルの第1の行の中の少なくとも1つのピクセルのためのデフォルトのパレットインデックスを使用することを含み得る。
[0219] さらに他の例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、0という値によって特定されるピクセルの第1の行の中の少なくとも1つのピクセルのためのデフォルトのパレットインデックスを使用することを含んでよく、パレットインデックスの中の第1のインデックスは0という値によって特定される。さらに他の例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、ビデオデータのブロックに対応するパレットインデックスの1つではないピクセルの第1の行の中の少なくとも1つのピクセルのためのデフォルトのパレットインデックスを使用することを含み得る。さらに他の例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、ビデオデータの別のブロックに対応するパレットインデックスからのインデックスであるピクセルの第1の行の中の少なくとも1つのピクセルのためのデフォルトのパレットインデックスを使用することを含み得る。さらに他の例では、copyモードを使用してビデオデータのパレットモード符号化されたブロック中のピクセルの第1の行の中の少なくとも1つのピクセルを復号することは、少なくとも1つのピクセルより前に復号される1つまたは複数のピクセルの1つまたは複数のパレットインデックスに基づいて、ピクセルの第1の行の中の少なくとも1つのピクセルのためのパレットインデックスを使用することを含み得る。
[0220] 図11は、本開示の技法に従った、ビデオデータを符号化するための例示的なプロセスを示すフローチャートである。図11のプロセスは全般に、説明を目的にビデオエンコーダ20によって実行されるものとして説明されるが、様々な他のプロセッサも図11に示されるプロセスを実行し得る。いくつかの例では、ブロック符号化ユニット100および/またはパレットベース符号化ユニット122は、図11に示される1つまたは複数のプロセスを実行することができる。
[0221] 図11の例では、ビデオエンコーダ20は、パレットモードを使用してピクセルの複数の行を有するビデオデータのブロックが符号化されるべきであると決定することができる(350)。ビデオエンコーダ20は、ビデオデータのブロックのパレットインデックスを生成することができる(352)。ビデオエンコーダ20は、ビデオデータのブロック中のピクセルの第1の行の中の少なくとも1つのピクセルが、ピクセルの複数の行のうちの他の行が第1の行の上にない場合に、copyモードを使用して符号化されるように、パレットモードを使用してビデオデータのブロックを符号化することができる(354)。
[0222] いくつかの例では、copyモードを使用してビデオデータのブロック中のピクセルの第1の行の中の少なくとも1つのピクセルが符号化されるように、パレットモードを使用してビデオデータのブロックを符号化することは、ピクセルの第1の行の中の最小の1つのピクセルのためのデフォルトのパレットインデックスを使用することを含み得る。そのような例では、デフォルトのパレットインデックスは、ビデオデータのブロックに対応するパレットインデックスの1つであり得る。たとえば、デフォルトのパレットインデックスは、パレットインデックス中の第1のインデックス、またはパレットインデックス中の任意の他のインデックスであり得る。デフォルトのパレットインデックスは0という値によって特定されてよく、パレットインデックス中の第1のインデックスは0という値によって特定されてよい。いくつかの例では、デフォルトのパレットインデックスは、ビデオデータのブロックに対応するパレットインデックスの1つではないことがある。たとえば、デフォルトのパレットインデックスは、ビデオデータの別のブロックに対応するパレットインデックスから(たとえば、ビデオデータの以前に符号化されたブロックに由来するパレットインデックスから)のインデックスであり得る。いくつかの例では、copyモードを使用してビデオデータのブロック中のピクセルの第1の行の中の少なくとも1つのピクセルが符号化されるように、パレットモードを使用してビデオデータのブロックを符号化することは、少なくとも1つのピクセルより前に符号化された1つまたは複数のピクセルの1つまたは複数のパレットインデックスに基づいて、ピクセルの第1の行の中の少なくとも1つのピクセルのためのパレットインデックスを使用することを含み得る。
[0223] 以下のセクションは、エスケープピクセルとCopyモードとを論じる。パレットコーディングに対する現在の提案では、上側のピクセルがEscapeモードを用いてコーディングされるとき、コピー手順はエスケープコーディングされたピクセルに対して定義されない。解決法は、エスケープピクセルのためにコピー処理を定義すること、または、このケースが発生するのを規範的に禁止することとのいずれかであり得る。例として、この問題は、以下で説明される次のような方法の1つを使用して解決され得る。
[0224] 2014年7月2日に出願された米国仮出願第62/019,223号において説明されるように、特定のパレットインデックスによって表されるエスケープモードだけが、現在のピクセルのためにコピーされる。トリプレットのためのエスケープ色値が、その後でシグナリングされる。
[0225] エスケープインデックスをコピーする代わりに、上側のピクセルがエスケープピクセルである場合、別のパレットインデックスが現在のピクセルのために割り当てられ得る。たとえば、パレットインデックスは、たとえば0などの現在のブロックのための有効なパレットインデックスの1つに等しい、固定され得るデフォルトのパレットインデックスであってよく、または、デフォルトのパレットインデックスは、各ブロック、スライスヘッダ、パラメータセット(VPS、SPS、PPSなど)のために少なくともシグナリングされ、または他の箇所でシグナリングされてよい。加えて、または代替的に、エスケープピクセルは、以前の非エスケープパレットインデックスによって置換され得る。たとえば、Copyモードのためのインデックスは、走査順序において上側のピクセルの左側で最初に利用可能なようなエスケープではない最後のコピーされるインデックスであると考えられ、または、現在のピクセルの左側のインデックスであり得る。これは、固定されたインデックスと組み合わされ得る。たとえば、置換に用いるエスケープパレットインデックスがエスケープである場合、デフォルトのインデックスが使用され得る。たとえば、左側のピクセルがエスケープピクセルである場合、デフォルトのインデックス(たとえば、0)がコピーの目的でエスケープを置き換えるために使用され、それ以外の場合、左側のピクセルのインデックスが使用される。
[0226] 別の例では、ビデオエンコーダ20は、Copyモードを用いてコーディングされたピクセルがEscapeモードを用いてコーディングされた上側のピクセルを有し得るというケースを規範的に許容しないように構成され得る。これは、たとえば、以下で示されるように、palette_runシンタックス要素のセマンティクスにおいて実装され得る。この規則が破られる場合、ビットストリームは規格に適合しないものと見なされる。
[0227] シンタックス要素palette_runは、palette_run_type_flagがCOPY_ABOVE_MODEに等しいときは、上の行の中での場所と同じパレットインデックスを伴う連続する位置の数から1を引いたものを示し、または、palette_run_type_flagがINDEX_MODEに等しいときは、同じパレットインデックスを伴う連続する位置の数から1を引いたものを表す。palette_run_type_flagがCOPY_ABOVE_MODEに等しい場合、上の行の中に位置するpalette_runの値によって定義される連続するピクセルの1つは、ESCAPE_PIXELとしてコーディングされることが可能ではない。
[0228] 以下のセクションは、いくつかの例による、エスケープピクセルを定義するための技法を論じる。パレットサイズの定義のための上で説明された技法が使用される場合、palette_escape_val_present_flagの値に応じて、ある特定のインデックスがエスケープピクセルまたは非エスケープピクセルを示すことが起こり得る。たとえば、最大パレットサイズが32であるとする。palette_escape_val_present_flagが1である場合、インデックス値31はエスケープピクセルを示す。一方、palette_escape_val_present_flagが0であるとき、31というインデックス値は非エスケープピクセルに対して可能である。同様の状況が、0などの何らかの他の値がエスケープピクセルを示すために使用される場合に当てはまる。この場合、0というインデックス値は、palette_escape_val_present_flagが1であるときはエスケープピクセルを表し得るが、palette_escape_val_present_flagが0であるときは非エスケープピクセルを表し得る。
[0229] したがって、いくつかの例によれば、本開示は、エスケープピクセルの定義を次のように変えることを提案する。palette_escape_val_present_flagが1に等しく、ピクセルがRunモードでコーディングされ、ある特定のパレットインデックス値を有する場合、ピクセルはエスケープピクセルとして定義される。その特定のインデックス値は、たとえば、パレットサイズもしくはパレットサイズ−1に等しくてよく、または0などの何らかの他の固定された値に等しくてよい。
[0230] 本開示のこのセクションは、新たなパレットエントリーとのパレット共有を論じる。本開示では、新たなパレットエントリーをシグナリングするための能力を用いてパレット共有を拡張することが提案される。新たなエントリーの数および新たなエントリーの色値自体が、それらを含めるための余裕がパレットにある(たとえば、パレットサイズがmax_palette_sizeより小さい)とき、明示的にシグナリングされる。
[0231] 本開示のパレット共有の拡張は、パレット共有のための現在の提案(すなわち、新たなエントリーの数がパレット共有のためにシグナリングされる、またはパレット導出の第3の方法として追加される)を置き換え得る。後者の場合、パレット予測子がシグナリングされず以前のブロックのパレットが再使用されることを示すために、新たなフラグが、場合によってはpalette_share_flagの後で、および、パレット共有が使用されず以前のパレットサイズがmax_palette_sizeより小さい場合に条件的に、シグナリングされる。この場合、新たなエントリーの数が0であることは単なるパレット共有と同じであるので、新たなエントリーの数は0より大きく、よって、新たなエントリーの数から1を引いたものが代わりにシグナリングされ得る。
[0232] 新たなパレットエントリーがビデオエンコーダ20によってその後でシグナリングされ、パレット導出の第3の(このセクションで論じられる)方法のための、再使用されるパレットエントリーの後または再使用されるパレットエントリーの前に含められ得る。代替的に、新たなパレットエントリーは常に、すべてのパレット導出方法にわたってパレットの導出を均一にするために、再使用されるパレットエントリーの前に配置され得る。
[0233] 再使用されるエントリーの前に新たなエントリーを含めることはより効率的であることがあり、それは、再使用されるエントリーまたは予測されるエントリーの役割を果たす以前のパレットのエントリーは、ブロックにおいてすべてが使用される新たなエントリーとは対照的に、すべてが使用されるとは限らず、パレットインデックスのシグナリングにおいていくらかの非効率性をもたらすからである。新たなエントリーを再使用されるパレットエントリーの前に配置する別の利点は、パレットサイズの制約が原因で、すべての再使用されるエントリーが追加されることが可能であるとは限らないということである。この場合、新たなエントリーがまず追加され、次いで、現在のパレットサイズがmax_palette_sizeより小さい間、以前のパレットのエントリーが追加される。
[0234] 新たなパレットエントリーとのパレット共有を使用するとき、既存のシグナリングは次の方法で再使用されることが可能であり、SCC WDへの追加が下線付きのテキストによって表されている。
[0235] 例に応じて、本明細書で説明された技法のいずれかのいくつかの行為またはイベントが、異なる順序で実行されてよく、全体的に追加され、統合され、または完全に除外され得る(たとえば、すべての説明された行為またはイベントが本技法の実施のために必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを用いて、連続的にではなく同時に実行され得る。加えて、本開示の特定の態様は、明快にするために、単一のモジュールまたはユニットによって実行されるものとして説明されているが、本開示の技術は、ビデオコーダと関連付けられるユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
[0236] 本開示によれば、文脈が別段指示しない場合、用語「または」は「および/または」としてインターラプトされ得る。加えて、「1つまたは複数の」または「少なくとも1つの」などの語句が、本明細書で開示されるいくつかの特徴に対して使用されており、他の特徴に対して使用されていないことがあるが、そのような言葉が使用されなかった特徴は、文脈が別段指示しない場合、そのような暗示された意味を有するものと解釈され得る。
[0237] 本開示のいくつかの態様は、説明を目的に、開発中のHEVC規格に関して説明された。しかしながら、本開示で説明される技法は、他の規格またはまだ開発されていないプロプライエタリなビデオコーディング処理を含む、他のビデオコーディング処理にとって有用であり得る。
[0238] 上で説明された技法は、ビデオエンコーダ20(図1および図2)ならびに/またはビデオデコーダ30(図1および図3)によって実行されてよく、ビデオエンコーダ20とビデオデコーダ30の両方が全般にビデオコーダと呼ばれ得る。同様に、ビデオコーディングは、適宜、ビデオ符号化またはビデオ復号を指し得る。
[0239] 技法の様々な態様の特定の組合せが上で説明されたが、これらの組合せは、本開示で説明される技法の例を単に示すために与えられる。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示で説明される技法の様々な態様の任意の想起可能な組合せを包含し得る。本開示で説明される技法は、任意の組合せで一緒に使用され得る。
[0240] 1つまたは複数の例では、本開示で説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって処理され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従ってある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コード、および/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
[0241] 限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、ウェブサイト、サーバ、または他のリモートソースから、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0242] 命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または、本明細書で説明された技法の実装に好適な任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成されるか、または複合コーデックに組み込まれる、専用ハードウェアおよび/またはソフトウェアモジュール内で提供され得る。また、本技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
[0243] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために様々なコンポーネント、モジュール、またはユニットが説明されたが、それらは、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上で説明されたように、様々なユニットは、好適なソフトウェアおよび/またはファームウェアとともに、上で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わされるか、または相互動作するハードウェアユニットの集合によって提供され得る。
[0244] 様々な例が、説明された。これらおよび他の例は、次の特許請求の範囲内に入る。