[0020] 本開示の態様は、コンテンツコーディング(例えば、ビデオコーディング)およびコンテンツデータ圧縮(例えば、ビデオデータ圧縮)のための技法を対象とする。特に、本開示は、コンテンツデータ(例えば、ビデオデータ)のパレットベースコーディングのための技法について説明する。本開示の様々な例では、本開示の技法は、以下でより詳細に説明されるように、コーディング効率を改善し、および/またはコーデック複雑さを低減するために、パレットモードにおいてブロックを予測またはコーディングすることのプロセスを対象とし得る。例えば、本開示は、パレットモードのためのパレットブロックサイズを制限することに関係する技法について説明する。
[0021] 本明細書で使用される「コンテンツ」という用語の事例は、「ビデオ」という用語に変更され得、「ビデオ」という用語の事例は、「コンテンツ」という用語に変更され得る。これは、「コンテンツ」または「ビデオ」という用語が形容詞として使用されているのか、名詞として使用されているのか、他の品詞として使用されているのかにかかわらず当てはまる。例えば、「コンテンツコーダ」への言及は「ビデオコーダ」への言及をも含み、「ビデオコーダ」への言及は「コンテンツコーダ」への言及をも含む。同様に、「コンテンツ」への言及は「ビデオ」への言及をも含み、「ビデオ」への言及は「コンテンツ」への言及をも含む。
[0022] 本明細書で使用される「コンテンツ」は任意のタイプのコンテンツを指す。例えば、「コンテンツ」は、ビデオ、スクリーンコンテンツ、画像、任意のグラフィカルコンテンツ、任意の表示可能コンテンツ、またはそれに対応する任意のデータ(例えば、ビデオデータ、スクリーンコンテンツデータ、画像データ、グラフィカルコンテンツデータ、表示可能コンテンツデータなど)を指し得る。
[0023] 本明細書で使用される「ビデオ」という用語は、スクリーンコンテンツ、可動コンテンツ、シーケンス中で提示され得る複数の画像、またはそれに対応する任意のデータ(例えば、スクリーンコンテンツデータ、可動コンテンツデータ、ビデオデータ、画像データなど)を指し得る。
[0024] 本明細書で使用される「画像」という用語は、単一の画像、1つまたは複数の画像、ビデオに対応する複数の画像の中の1つまたは複数の画像、ビデオに対応しない複数の画像の中の1つまたは複数の画像、ビデオに対応する複数の画像(例えば、ビデオに対応する画像の全てまたはビデオに対応する画像の全てよりも少ない画像)、単一の画像のサブ部分、単一の画像の複数のサブ部分、複数の画像に対応する複数のサブ部分、1つまたは複数のグラフィックスプリミティブ、画像データ、グラフィカルデータなどを指し得る。
[0025] 旧来のビデオコーディングでは、画像は、連続トーンであり空間的に滑らかであると仮定される。これらの仮定に基づいて、ブロックベース変換、フィルタ処理、および他のコーディングツールなどの様々なツールが開発されており、そのようなツールは、自然コンテンツビデオ対して良好な性能を示している。しかしながら、リモートデスクトップ、協調作業、およびワイヤレスディスプレイのような適用例では、コンピュータ生成スクリーンコンテンツが、圧縮されるべき主要なコンテンツであり得る。このタイプのスクリーンコンテンツは、離散トーン、鋭いライン、および高コントラストオブジェクト境界を有する傾向がある。連続トーンおよび滑らかさの仮定はもはや適用されないことがあり、従って、旧来のビデオコーディング技法は、コンテンツ(例えば、スクリーンコンテンツ)を圧縮する際に非効率的であり得る。
[0026] パレットベースビデオコーディングの一例では、ビデオエンコーダは、ブロックのためのパレットを決定すること(例えば、パレットを明示的にコーディングすること、パレットを予測すること、またはそれらの組合せ)と、1つまたは複数のピクセルの値を表すためのパレット中のエントリの位置を特定することと、ブロックのピクセル値を表すために使用されるパレット中のエントリを示すインデックス値を用いてパレットとブロックの両方を符号化することとによって、ビデオデータのブロックを符号化し得る。いくつかの例では、ビデオエンコーダは、符号化ビットストリーム中でパレットおよび/またはインデックス値をシグナリングし得る。次に、ビデオデコーダは、符号化ビットストリームから、ブロックのためのパレット、並びにブロックの個々のピクセルのためのインデックス値を取得し得る。ビデオデコーダは、ブロックの様々なピクセル値を再構成するために、ピクセルのインデックス値をパレットのエントリに関係付け得る。
[0027] 例えば、ビデオデータの特定のエリアが比較的少数の色を有すると仮定され得る。ビデオコーダ(例えば、ビデオエンコーダまたはビデオデコーダ)は、特定のエリアのビデオデータを表すために、いわゆる「パレット」をコーディング(例えば、符号化または復号)し得る。パレットは、特定のエリア(例えば、所与のブロック)のビデオデータを表す色またはピクセル値のインデックス(例えば、テーブル)として表され得る。ビデオコーダは、1つまたは複数のピクセル値をパレット中の適切な値に関係付けるインデックスをコーディングし得る。各ピクセルは、ピクセルの色を表すパレット中のエントリに関連付けられ得る。例えば、パレットは、所与のブロック中の最も支配的なピクセル値を含み得る。いくつかの場合には、最も支配的なピクセル値は、ブロック内で最も頻繁に生じる1つまたは複数のピクセル値を含み得る。さらに、いくつかの場合には、ビデオコーダは、あるピクセル値がブロック中の最も支配的なピクセル値の1つとして含まれるべきであるかどうかを決定するために、しきい値を適用し得る。パレットベースコーディングの様々な態様によれば、ビデオコーダは、ビデオデータの現在ブロックについて実際のピクセル値またはそれらの残差をコーディングするのではなく、現在ブロックのピクセル値のうちの1つまたは複数を示すインデックス値をコーディングし得る。パレットベースコーディングのコンテキストにおいて、インデックス値は、現在ブロックの個々のピクセル値を表すために使用される、パレット中のそれぞれのエントリを示す。上記の説明は、パレットベースビデオコーディングの概略的な説明を与えることを意図されている。
[0028] スクリーン生成コンテンツコーディング、または1つまたは複数の旧来のコーディングツールが非効率的である他のコンテンツに特に好適であり得る、パレットベースコーディング。ビデオデータのパレットベースコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法など、1つまたは複数の他のコーディング技法とともに使用され得る。例えば、以下でより詳細に説明されるように、エンコーダまたはデコーダ、あるいは複合エンコーダデコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディング、並びにパレットベースコーディングを行うように構成され得る。
[0029] いくつかの例では、パレットベースコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。例えば、高効率ビデオコーディング(HEVC)は、ITU−Tビデオコーディングエキスパートグループ(VCEG:Video Coding Experts Group)とISO/IECモーションピクチャエキスパートグループ(MPEG:Motion Picture Experts Group)とのジョイントコラボレーションチームオンビデオコーディング(JCT−VC:Joint Collaboration Team on Video Coding)によって開発されている新しいビデオコーディング規格である。確定されたHEVC規格文書は、「ITU-T H.265, SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services - Coding of moving video - High Efficiency Video Coding」、国際電気通信連合(ITU)の電気通信標準化部門、2013年4月として公開されている。
[0030] スクリーン生成コンテンツのより効率的なコーディングを行うために、JCT−VCは、HEVCスクリーンコンテンツコーディング(SCC)規格と呼ばれる、HEVC規格に対する拡張を展開している。「HEVC SCCドラフト2」または「WD2」と呼ばれるHEVC SCC規格の最近のワーキングドラフトが、文書JCTVC−S1005、R.JoshiおよびJ.Xu、「HEVC screen content coding draft text 2」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのジョイントコラボレーティブチームオンビデオコーディング(JCT−VC:Joint Collaborative Team on Video Coding)、第19回会議:ストラスブール、フランス、2014年10月17〜24日に記載される。
[0031] HEVCフレームワークに関して、一例として、パレットベースコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースコーディング技法は、HEVCのフレームワーク中で予測ユニット(PU)モードとして使用されるように構成され得る。従って、CUモードのコンテキストにおいて説明される以下の開示されるプロセスの全てが、追加または代替として、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースコーディング技法が、独立して、あるいは他の既存のまたはまだ開発されていないシステム/規格の一部として動作するように適用され得るので、そのような技法の制限または限定であると見なされるべきではない。これらの場合、パレットコーディングのためのユニットは、正方形ブロック、矩形ブロック、さらには非矩形形状の領域であり得る。
[0032] いくつかの例では、パレットは、1つまたは複数のCU、PU、またはデータの任意の領域(例えば、データの任意のブロック)のために導出され得る。例えば、パレットは、現在CU中の最も支配的なピクセル値を備え得(およびそれらからなり得)、ここで、CUは、この特定の例のためのデータの領域である。パレットのサイズおよび要素は、最初に、ビデオエンコーダからビデオデコーダに送信される。コーディングされている現在CUのためのパレットのサイズおよび/または要素は、現在CUに隣接するCU、すなわち、隣接CU(例えば、ここで、隣接CUのものは、現在CUの上および/または現在CUの左のCUを含み得る)中のパレットのサイズおよび/または要素を使用して、直接コーディングされるかまたは予測コーディングされ得る。その後、CU中のピクセル値は、ある走査順序に従ってパレットに基づいて符号化される。CU中の各ピクセルロケーションについて、ピクセル値がパレット中に含まれるかどうかを示すために、フラグ、例えば、palette_flagが、最初に送信される。パレット中のエントリにマッピングするピクセル値について、そのエントリに関連付けられたパレットインデックスが、CU中の所与のピクセルロケーションのためにシグナリングされる。パレット中に存在しないピクセル値について、特別なインデックスがピクセルに割り当てられ得、実際のピクセル値が、CU中の所与のピクセルロケーションのために送信され得る。これらのピクセルは「エスケープピクセル」と呼ばれる。エスケープピクセルは、固定長コーディング、単項コーディングなど、任意の既存のエントロピーコーディング方法を使用してコーディングされ得る。
[0033] ビデオデータのブロック中のサンプルが、水平ラスタ走査順序または他の走査順序を使用して処理され(例えば、走査され)得る。例えば、ビデオエンコーダは、水平ラスタ走査順序を使用してパレットインデックスを走査することによって、パレットインデックスの2次元ブロックを1次元アレイに変換し得る。同様に、ビデオデコーダは、水平ラスタ走査順序を使用してパレットインデックスのブロックを再構成し得る。従って、本開示は、走査順序でブロック中の現在コーディングされているサンプルに先行するサンプルを、前のサンプルと呼び得る。垂直ラスタ走査順序など、水平ラスタ走査以外の走査も適用可能であり得ることを諒解されたい。上記の例、並びに本開示で説明される他の例は、パレットベースビデオコーディングの概略的な説明を与えることを意図されている。
[0034] 図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指し得る。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースビデオコーディングのための技法を行うように構成され得るデバイスの例を表す。例えば、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースコーディングまたは非パレットベースコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなど、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースコーディングモードは、HEVC規格によって規定される様々なコーディングモードなど、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。
[0035] 図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は符号化ビデオデータを生成する。従って、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化ビデオデータを復号し得る。従って、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0036] ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(例えば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲にわたるデバイスを備え得る。
[0037] 宛先デバイス14は、チャネル16を介してソースデバイス12から符号化ビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化ビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化ビデオデータを変調し得、変調されたビデオデータを宛先デバイス14に送信し得る。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルまたは1つまたは複数の物理伝送線路など、ワイヤレスおよび/またはワイヤード通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(例えば、インターネット)など、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を可能にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0038] 別の例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、例えば、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化ビデオデータを記憶するための他の好適なデジタル記憶媒体など、様々なローカルにアクセスされるデータ記憶媒体を含み得る。
[0039] さらなる一例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶するファイルサーバまたは別の中間ストレージデバイスを含み得る。この例では、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間ストレージデバイスに記憶された、符号化ビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶することと、符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバとしては、(例えば、ウェブサイトのための)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブがある。
[0040] 宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化ビデオデータにアクセスし得る。例示的なタイプのデータ接続としては、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに好適である、ワイヤレスチャネル(例えば、Wi−Fi(登録商標)接続)、ワイヤード接続(例えば、DSL、ケーブルモデムなど)、またはその両方の組合せがあり得る。ファイルサーバからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
[0041] ソースデバイス12および宛先デバイス14は、本開示に従ってパレットベースコーディングを行うように構成され得る。但し、パレットベースコーディングのための本開示の技法はワイヤレス適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、例えばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の適用例など、様々なマルチメディア適用例をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオテレフォニーなどの適用例をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
[0042] 図1に示されるビデオコーディングシステム10は一例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含むとは限らないビデオコーディング設定(例えば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データがローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスがデータを符号化し、メモリに記憶し得、および/またはビデオ復号デバイスがメモリからデータを取り出し、復号し得る。多くの例では、符号化および復号は、互いに通信しないが、単にメモリにデータを符号化し、および/またはメモリからデータを取り出し、復号するデバイスによって行われる。
[0043] 図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、例えば、ビデオカメラ、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/またはビデオデータを生成するためのコンピュータグラフィクスシステム、あるいはビデオデータのそのようなソースの組合せを含み得る。
[0044] ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化ビデオデータを直接送信する。他の例では、符号化ビデオデータは、復号および/または再生のための宛先デバイス14による後のアクセスのために記憶媒体またはファイルサーバ上にも記憶され得る。
[0045] 図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して符号化ビデオデータを受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化され得るかまたはその外部にあり得る。概して、ディスプレイデバイス32は復号ビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスを備え得る。
[0046] 本開示は、概して、ビデオエンコーダ20が、ある情報をビデオデコーダ30などの別のデバイスに「シグナリングすること」または「送信すること」に言及することがある。「シグナリングすること」または「送信すること」という用語は、概して、圧縮されたビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指すことがある。そのような通信は、リアルタイムまたはほぼリアルタイムに行われ得る。代替的に、そのような通信は、符号化時に符号化ビットストリーム中でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに行われることがあるなど、ある時間期間にわたって行われ得、次いで、これらの要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。従って、ビデオデコーダ30は、ある情報を「受信する」ものと呼ばれることがあるが、情報の受信は、必ずしもリアルタイムまたはほぼリアルタイムで行われるとは限らず、記憶の後の何らかの時間に媒体から取り出されることがある。
[0047] ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェアなど、様々な好適な回路のいずれか、あるいはそれらの任意の組合せとして実施され得る。本技法が部分的にソフトウェアで実施される場合、デバイスは、好適な非一時的コンピュータ可読記憶媒体にソフトウェアの命令を記憶し得、本開示の技法を行うために1つまたは複数のプロセッサを使用してその命令をハードウェアで実行し得る。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアとの組合せなどを含む)上記のいずれも、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。
[0048] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上記で述べられ、HEVC規格に記載されるHEVC規格など、ビデオ圧縮規格に従って動作する。ベースHEVC規格に加えて、HEVCのためのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を作成するための作業が進行中である。さらに、例えば、本開示で説明されるようなパレットベースコーディングモードが、HEVC規格の拡張のために与えられ得る。いくつかの例では、パレットベースコーディングのための本開示で説明される技法が、他のビデオコーディング規格に従って動作に構成されたエンコーダおよびデコーダに適用され得る。従って、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースコーディングモードの適用が、例として説明される。
[0049] HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは一般に一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCbおよびSCrと示される3つのサンプルアレイを含み得る。SLはルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbはCbクロミナンスサンプルの2次元アレイである。SCrはCrクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれることもある。他の事例では、ピクチャはモノクロームであり得、ルーマサンプルのアレイのみを含み得る。
[0050] ピクチャの符号化表現を生成するために、ビデオエンコーダ20はコーディングツリーユニット(CTU:coding tree unit)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nブロックであり得る。CTUは「ツリーブロック」または「最大コーディングユニット」(LCU:largest coding unit)と呼ばれることもある。HEVCのCTUは、H.264/AVCなど、他の規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスタ走査において連続的に順序付けられた整数個のCTUを含み得る。コード化スライスはスライスヘッダとスライスデータとを備え得る。スライスのスライスヘッダは、スライスに関する情報を与えるシンタックス要素を含むシンタックス構造であり得る。スライスデータはスライスのコード化CTUを含み得る。
[0051] 本開示は、1つまたは複数のサンプルブロックと、サンプルの1つまたは複数のブロックのサンプルをコーディングするために使用されるシンタックス構造とを指すために、「ビデオユニット」、または「ビデオブロック」、または「ブロック」という用語を使用し得る。例示的なタイプのビデオユニットまたはブロックは、CTU、CU、PU、変換ユニット(TU)、マクロブロック、マクロブロック区分などを含み得る。HEVCの例では、コード化CTUを生成するために、ビデオエンコーダ20は、コーディングツリーブロックをコーディングブロックに分割するためにCTUのコーディングツリーブロックに対して4分木区分を再帰的に行い得、従って「コーディングツリーユニット」という名称がある。コーディングブロックはサンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、CbサンプルアレイおよびCrサンプルアレイ、並びにコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造を有するピクチャのルーマサンプルのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックであり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ピクチャのルーマサンプルの予測ブロックと、クロマサンプルの2つの対応する予測ブロックと、予測ブロックサンプルを予測するために使用されるシンタックス構造とであり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロックとCb予測ブロックとCr予測ブロックとのための予測ルーマブロックと予測Cbブロックと予測Crブロックとを生成し得る。
[0052] ビデオエンコーダ20は、PUのための予測ブロックを生成するためにイントラ予測またはインター予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャの復号サンプルに基づいてPUの予測ブロックを生成し得る。
[0053] ビデオエンコーダ20が、PUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャ以外の1つまたは複数のピクチャの復号サンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために単予測または双予測を使用し得る。ビデオエンコーダ20が、PUのための予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV:motion vector)を有し得る。ビデオエンコーダ20が、PUのための予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
[0054] ビデオエンコーダ20がCUの1つまたは複数のPUのための予測ブロック(例えば、予測ルーマブロック、予測Cbブロックおよび予測Crブロック)を生成した後、ビデオエンコーダ20は、CUのための残差ブロックを生成し得る。CUの残差ブロック中の各サンプルは、CUのPUの予測ブロック中のサンプルと、CUのコーディングブロック中の対応するサンプルとの間の差分を示し得る。例えば、ビデオエンコーダ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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0055] さらに、ビデオエンコーダ20は、CUの残差ブロック(例えば、ルーマ残差ブロック、Cb残差ブロックおよびCr残差ブロック)を1つまたは複数の変換ブロック(例えば、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロック)に分解するために4分木区分を使用し得る。変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロックと、クロマサンプルの2つの対応する変換ブロックと、変換ブロックサンプルを変換するために使用されるシンタックス構造とであり得る。従って、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連付けられ得る。TUに関連付けられたルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックはCUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックはCUのCr残差ブロックのサブブロックであり得る。
[0056] ビデオエンコーダ20は、TUのための係数ブロックを生成するために、変換ブロックに1つまたは複数の変換を適用し得る。係数ブロックは変換係数の2次元アレイであり得る。変換係数はスカラー量であり得る。例えば、ビデオエンコーダ20は、TUのためのルーマ係数ブロックを生成するために、TUのルーマ変換ブロックに1つまたは複数の変換を適用し得る。ビデオエンコーダ20は、TUのためのCb係数ブロックを生成するために、TUのCb変換ブロックに1つまたは複数の変換を適用し得る。ビデオエンコーダ20は、TUのためのCr係数ブロックを生成するために、TUのCr変換ブロックに1つまたは複数の変換を適用し得る。
[0057] 係数ブロック(例えば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後に、ビデオエンコーダ20は、係数ブロックを量子化し得る。量子化は、概して、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を行うプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、被量子化変換係数を示すシンタックス要素をエントロピー符号化し得る。例えば、ビデオエンコーダ20は、被量子化変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC:Context-Adaptive Binary Arithmetic Coding)を行い得る。
[0058] 一例としてCABACに関して、ビデオエンコーダ20およびビデオデコーダ30は、コンテキストに基づいてビデオデータのブロックに関連するシンボルをコーディングするために(コンテキストモデルとも呼ばれる)確率モデルを選択し得る。例えば、コンテキストモデル(Ctx)は、その各々が特定の確率モデルに対応し得る複数の異なるコンテキストのうちの1つを選択するために適用されるインデックスまたはオフセットであり得る。従って、異なる確率モデルは、一般に各コンテキストのために定義される。ビンを符号化または復号した後、確率モデルは、ビンのための最新の確率推定値を反映するために、ビンの値に基づいてさらに更新される。例えば、確率モデルは、有限状態機械中の状態として維持され得る。各特定の状態は特定の確率値に対応し得る。確率モデルの更新に対応する次の状態は、現在のビン(例えば、現在コーディングされているビン)の値に依存し得る。従って、確率モデルの選択は、前にコーディングされたビンの値が、少なくとも部分的に、所与の値を有するビンの確率を示すので、その値によって影響を及ぼされ得る。上記で説明されたコンテキストコーディングプロセスは、概して、コンテキスト適応型コーディングモードと呼ばれることがある。
[0059] 従って、ビデオエンコーダ20は、確率モデルを使用してターゲットシンボルを符号化し得る。同様に、ビデオデコーダ30は、確率モデルを使用してターゲットシンボルをパースし得る。いくつかの事例では、ビデオエンコーダ20は、コンテキスト適応型コーディングと非コンテキスト適応型コーディングとの組合せを使用してシンタックス要素をコーディングし得る。例えば、ビデオエンコーダ20は、ビンをコーディングするためにコンテキスト上で動作する確率モデルまたは「コンテキストモデル」を選択することによって、ビンをコンテキストコーディングし得る。対照的に、ビデオエンコーダ20は、ビンをコーディングするときに通常の算術コーディングプロセスをバイパスまたは省略することによって、ビンをバイパスコーディングし得る。そのような例では、ビデオエンコーダ20は、ビンをバイパスコーディングするために固定確率モデルを使用し得る。すなわち、バイパスコーディングされたビンは、コンテキスト更新または確率更新を含まない。
[0060] ビデオエンコーダ20は、エントロピー符号化シンタックス要素を含むビットストリームを出力し得る。ビットストリームはまた、エントロピー符号化されないシンタックス要素を含み得る。ビットストリームは、コード化ピクチャおよび関連するデータの表現を形成するビットのシーケンスを含み得る。ビットストリームは、ネットワークアブストラクションレイヤ(NAL)ユニットのシーケンスを備え得る。NALユニットの各々はNALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)をカプセル化する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含んでいるシンタックス構造であり得る。いくつかの事例では、RBSPはゼロビットを含む。
[0061] 異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。例えば、第1のタイプのNALユニットはピクチャパラメータセット(PPS:picture parameter set)のためのRBSPをカプセル化し得、第2のタイプのNALユニットは、コード化スライスのためのRBSPをカプセル化し得、第3のタイプのNALユニットは補足エンハンスメント情報(SEI:supplemental enhancement information)のためのRBSPをカプセル化し得、以下同様である。(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれることがある。
[0062] ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームからシンタックス要素を復号するために、ビットストリームをパースし得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも部分的に基づいてビデオデータのピクチャを再構成し得る。ビデオデータを再構成するための処理は、概して、ビデオエンコーダ20によって行われるプロセスの逆であり得る。例えば、ビデオデコーダ30は、現在CUのPUのための予測ブロックを決定するためにPUのMVを使用し得る。加えて、ビデオデコーダ30は、現在CUのTUに関連する変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在CUのTUに関連する変換ブロックを再構成するために、変換係数ブロックに対して逆変換を行い得る。ビデオデコーダ30は、現在CUのPUのための予測ブロックのサンプルを現在CUのTUの変換ブロックの対応するサンプルに加算することによって、現在CUのコーディングブロックを再構成し得る。ピクチャの各CUのためのコーディングブロックを再構成することによって、ビデオデコーダ30はピクチャを再構成し得る。
[0063] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースコーディングを行うように構成され得る。例えば、パレットベースコーディングでは、上記で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を行うのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(例えば、所与のブロック)のビデオデータを表す色またはピクセル値のテーブルとして、いわゆるパレットをコーディングし得る。このようにして、ビデオデータの現在ブロックのための実際のピクセル値またはそれらの残差をコーディングするのではなく、ビデオコーダは、現在ブロックのピクセル値のうちの1つまたは複数のためのインデックス値をコーディングし得、ここで、インデックス値は、現在ブロックのピクセル値を表すために使用されるパレット中のエントリを示す。
[0064] 例えば、ビデオエンコーダ20は、ブロックのためのパレットを決定することと、各ピクセルの値を表すためのパレット中のエントリの位置を特定することと、パレットとピクセル値をパレットに関係付けるピクセルのためのインデックス値とを符号化することとによって、ビデオデータのブロックを符号化し得る。ビデオデコーダ30は、符号化ビットストリームから、ブロックのためのパレット、並びにブロックのピクセルのためのインデックス値を取得し得る。ビデオデコーダ30は、ブロックのピクセル値を再構成するために、個々のピクセルのインデックス値をパレットのエントリと照合し得る。個々のピクセルに関連付けられたインデックス値が、ブロックのための対応するパレットのどのインデックス値にも一致しない事例では、ビデオデコーダ30は、そのようなピクセルを、パレットベースコーディングの目的のために、エスケープピクセルとして識別し得る。
[0065] 別の例では、ビデオエンコーダ20は、以下の動作に従ってビデオデータのブロックを符号化し得る。ビデオエンコーダ20は、ブロックの個々のピクセルについての予測残差値を決定し、ブロックのためのパレットを決定し、個々のピクセルの予測残差値のうちの1つまたは複数の値を表す値を有する、パレット中のエントリ(例えば、インデックス値)の位置を特定し得る。さらに、ビデオエンコーダ20は、ブロックの各個々のピクセルについての対応する予測残差値を表すために使用される、パレット中のエントリを示すインデックス値でブロックを符号化し得る。ビデオデコーダ30は、ソースデバイス12によってシグナリングされた符号化ビットストリームから、ブロックのためのパレット、並びにブロックの個々のピクセルに対応する予測残差値のためのインデックス値を取得し得る。説明されたように、インデックス値は、現在ブロックに関連付けられたパレット中のエントリに対応し得る。次に、ビデオデコーダ30は、ブロックの予測残差値を再構成するために、予測残差値のインデックス値をパレットのエントリに関係付け得る。予測残差値は、ブロックのピクセル値を再構成するために、(例えば、イントラ予測またはインター予測を使用して取得された)予測値に加算され得る。
[0066] 以下でより詳細に説明されるように、パレットベースコーディングの基本的な考えは、コーディングされるべきビデオデータの所与のブロックについて、ビデオエンコーダ20が、現在ブロック中の最も支配的なピクセル値を含むパレットを導出し得るというものである。例えば、パレットは、現在CUについて支配的である、および/またはそれを表すと決定または仮定される、いくつかのピクセル値を指し得る。ビデオエンコーダ20は、最初に、パレットのサイズと要素とをビデオデコーダ30に送信し得る。さらに、ビデオエンコーダ20は、ある走査順序に従って、所与のブロック中のピクセル値を符号化し得る。所与のブロック中に含まれる各ピクセルについて、ビデオエンコーダ20は、ピクセル値を、パレット中の対応するエントリにマッピングするインデックス値をシグナリングし得る。ピクセル値がパレット中に含まれない(すなわち、パレットコード化ブロックの特定のピクセル値を指定するパレットエントリが存在しない)場合、そのようなピクセルは「エスケープピクセル」として定義される。パレットベースコーディングに従って、ビデオエンコーダ20は、エスケープピクセルのために予約されたインデックス値を符号化し、シグナリングし得る。いくつかの例では、ビデオエンコーダ20はまた、所与のブロック中に含まれるエスケープピクセルについてのピクセル値または残差値(あるいはそれの被量子化バージョン)を符号化し、シグナリングし得る。
[0067] ビデオエンコーダ20によってシグナリングされた符号化ビデオビットストリームを受信すると、ビデオデコーダ30は、最初に、ビデオエンコーダ20から受信された情報に基づいてパレットを決定し得る。ビデオデコーダ30は、次いで、所与のブロックのピクセル値を再構成するために、所与のブロック中のピクセルロケーションに関連付けられる、受信されたインデックス値をパレットのエントリにマッピングし得る。いくつかの事例では、ビデオデコーダ30は、エスケープピクセルのために予約されたインデックス値を用いてピクセルがパレットコーディングされていると決定することなどによって、パレットコード化ブロックのピクセルがエスケープピクセルであると決定し得る。ビデオデコーダ30がパレットコード化ブロック中のエスケープピクセルを識別する事例では、ビデオデコーダ30は、所与のブロック中に含まれるエスケープピクセルについてのピクセル値または残差値(あるいはそれの被量子化バージョン)を受信し得る。ビデオデコーダ30は、個々のピクセル値を対応するパレットエントリにマッピングすることによって、およびパレットコード化ブロック中に含まれるエスケープピクセルを再構成するためにピクセル値または残差値(あるいはそれの被量子化バージョン)を使用することによって、パレットコード化ブロックを再構成し得る。
[0068] 上述のように、例示的なパレットコーディングモードでは、パレットは、インデックスによって番号を付けられたエントリを含み得る。各エントリは、ブロックのための予測子としてまたは最終再構成済みブロックサンプルとして使用され得る、(例えば、YCbCr、RGB、YUV、CMYK、または他のフォーマットなど、色空間中の)色成分値(color component values) または強度(intensities)を表し得る。規格提案ドキュメントJCTVC−Q0094(Wei Puら、「AHG10: Suggested Software for Palette Coding based on RExt6.0」、JCTVC−Q0094、バレンシア、スペイン、2014年3月27日〜4月4日)に記載されるように、パレットは、予測子パレットからコピーされたエントリを含み得る。予測子パレットは、パレットモードを使用して前にコーディングされたブロックまたは他の再構成済みサンプルからのパレットエントリを含み得る。予測子パレット中の各エントリについて、そのエントリが現在パレットにコピーされる(フラグ=1によって示される)かどうかを示すために、バイナリフラグが送られる。これは、バイナリパレット予測ベクトルと呼ばれる。さらに、現在パレットは、明示的にシグナリングされる新しいエントリを備え(例えば、それからなり)得る。新しいエントリの数もシグナリングされ得る。
[0069] 別の例として、パレットモードでは、パレットは、ブロックサンプルのための予測子としてまたは最終再構成済みブロックサンプルとして使用され得る色成分値を表すインデックスによって番号を付けられたエントリを含み得る。パレット中の各エントリは、例えば、1つのルーマ成分(例えば、ルーマ値)、2つのクロマ成分(例えば、2つのクロマ値)、または3つの色成分(例えば、RGB、YUVなど)を含んでいることがある。前に復号されたパレットエントリがリストに記憶され得る。このリストは、例えば、現在パレットモードCUにおいてパレットエントリを予測するために使用され得る。リスト中のどのエントリが現在パレット中で再利用されるかを示すためのバイナリ予測ベクトルがビットストリーム中でシグナリングされ得る。いくつかの例では、バイナリパレト予測子を圧縮するために、ランレングスコーディングが使用され得る。例えば、ランレングス値は、0次指数ゴロムコード(0th order Exp-Golomb code)を使用してコーディングされ得る。
[0070] 本開示では、各パレットエントリがサンプルの全ての色成分のための値を指定すると仮定される。但し、本開示の概念は、色成分ごとに別個のパレットおよび/または別個のパレットエントリを使用することに適用可能である。また、ブロック中のサンプルは、水平ラスタ走査順序を使用して処理されると仮定される。しかしながら、垂直ラスタ走査順序など、他の走査も適用可能である。上述のように、パレットは、例えば、前の(1つまたは複数の)ブロックをコーディングするために使用される(1つまたは複数の)パレットから予測される、予測されたパレットエントリと、現在ブロックのために固有であり得、明示的にシグナリングされる新しいエントリとを含んでいることがある。エンコーダおよびデコーダは、予測されたパレットエントリおよび新しいパレットエントリの数を知り得、それらの和は、ブロック中の総パレットサイズを示し得る。
[0071] 上記のJCTVC−Q0094の例において提案されたように、パレットを用いてコーディングされるブロック中の各サンプルは、以下に記載するように、3つのモードのうちの1つに属し得る。
・エスケープモード。このモードでは、サンプル値がパレットエントリとしてパレットに含まれず、被量子化サンプル値が全ての色成分について明示的にシグナリングされる。それは、新しいパレットエントリのシグナリングと同様であるが、新しいパレットエントリについて、色成分値が量子化されない。
・CopyAboveモード(CopyFromTopモードまたはコピーモードとも呼ばれる)。このモードでは、現在サンプルのためのパレットエントリインデックスが、サンプルのブロック中の現在サンプルのすぐ上に位置するサンプルからコピーされる。他の例では、コピーアバブモードの場合、ビデオデータのブロックが、そのブロックの上のサンプルが実際にブロックの左のサンプルであるように転置され得る。
・値モード(インデックスモードまたはランモードとも呼ばれる)。このモードでは、パレットエントリインデックスの値が明示的にシグナリングされる。
[0072] 本明細書で説明されるように、パレットエントリインデックスは、パレットインデックスまたは単にインデックスと呼ばれることがある。これらの用語は、本開示の技法について説明するために同義で使用され得る。さらに、以下でより詳細に説明されるように、パレットインデックスは、1つまたは複数の関連する色値または強度値を有し得る。例えば、パレットインデックスは、ピクセルの単一の色成分または強度成分(例えば、RGBデータの赤成分、YUVデータのY成分など)に関連する単一の関連する色値または強度値を有し得る。別の例では、パレットインデックスは、複数の関連する色値または強度値を有し得る。いくつかの事例では、パレットベースビデオコーディングは、モノクロームビデオをコーディングするために適用され得る。従って、「色値」は、概して、ピクセル値を生成するために使用される任意の色成分または非色成分を指し得る。
[0073] ラン値(run value)は、同じパレットコーディングモードを使用してコーディングされるパレットインデックス値のランを示し得る。例えば、値モードに関して、ビデオコーダ(例えば、ビデオエンコーダ20またはビデオデコーダ30)は、インデックス値と、同じインデックス値を有し、パレットインデックスを用いてコーディングされている、走査順序での連続するサンプルの数を示すラン値とをコーディングし得る。CopyAboveモードに関して、ビデオコーダは、現在サンプル値のためのインデックス値が上隣接サンプル(例えば、ブロック中で現在コーディングされているサンプルの上に位置するサンプル)のインデックス値と同じであるという指示と、上隣接サンプルからのインデックス値をもコピーし、パレットインデックスを用いてコーディングされている、走査順序での連続するサンプルの数を示すラン値とをコーディングし得る。従って、上記の例では、パレットインデックス値のランは、同じ値を有するパレット値のラン、または上隣接サンプルからコピーされたインデックス値のランを指す。
[0074] 従って、ランは、所与のモードについて、同じモードに属する後続のサンプルの数を指定し得る。いくつかの事例では、インデックス値とラン値とをシグナリングすることはランレングスコーディングと同様であり得る。説明の目的のための一例では、ビデオデータのブロックに対応するインデックスブロックの連続するパレットインデックス値のストリングは、0、2、2、2、2、5であり得る。いくつかの例では、インデックスブロックは、1つまたは複数のエスケープピクセル値を含み得る。インデックスブロック中の各インデックス値は、ビデオデータのブロック中のサンプルに対応し得る。この例では、ビデオコーダは、値モードを使用して第2のサンプル(例えば、「2」の第1のパレットインデックス値)をコーディングし得る。2のインデックス値をコーディングした後、ビデオコーダは、3つの後続のサンプルも2の同じパレットインデックス値を有することを示す、3のランをコーディングし得る。同様にして、CopyAboveモードを使用してインデックスをコーディングした後に4つのパレットインデックスのランをコーディングすることは、合計5つのパレットインデックスが、現在コーディングされているサンプル位置の上の行中の対応するパレットインデックスからコピーされることを示し得る。
[0075] パレットを使用して、ビデオエンコーダ20および/またはビデオデコーダ30は、サンプルのブロック(例えば、ビデオデータのブロック)をインデックスブロックにコーディングするように構成され得、ここで、インデックスブロックは、例えば、各サンプルについて、1つまたは複数のパレットエントリにサンプルをマッピングする、インデックス値を含み、いくつかの例では、1つまたは複数のエスケープピクセル値を含むブロックである。ビデオデータのブロックのあらゆるピクセルが、ランモード、コピーモードまたはエスケープモードを用いてコーディングされ得る。いくつかの例では、ビデオデータのブロックの第1の行中のピクセルは、ランモードまたはエスケープモードのみを使用してコーディングされ得る。
[0076] シンタックス要素palette_run_type_flagは、ランモードが使用されるのかコピーモードが使用されるのかを示す。例えば、ビデオエンコーダ20は、ビデオデータのブロックのサンプルについてpalette_run_type_flagシンタックス要素に対応する値を符号化ビットストリームに符号化することによって、シンタックス要素palette_run_type_flagをシグナリングするように構成され得る。ビデオデコーダ20は、palette_run_type_flagシンタックス要素に対応する符号化値を備える符号化ビットストリームを受信するように構成され得る。ビデオデコーダ20は、palette_run_type_flagシンタックス要素に対応する値を決定し、従って、ビデオデータのブロックのサンプルのためにランモードが使用されるのかコピーモードが使用されるのかを決定するために、符号化値を復号するように構成され得る。例えば、palette_run_type_flagの値が第1の値であるとき、ランモードがビデオデータのブロックのサンプルのために使用され得る。別の例として、palette_run_type_flagの値が第2の値であるとき、コピーモードがビデオデータのブロックのサンプルのために使用され得る。
[0077] いくつかの例では、ランモードまたはコピーモードが使用されるとき、palette_indexシンタックス要素がpalette_runシンタックス要素とともにシグナリングされ得る。例えば、ビデオエンコーダ20は、palette_indexに対応する値(例えば、インデックス値)と、palette_runに対応する値(例えば、ラン値)とを符号化ビットストリームに符号化することによって、palette_indexおよびpalette_runシンタックスelementrsをシグナリングするように構成され得る。ビデオデコーダ30し得るは、palette_indexシンタックス要素に対応する符号化値と、palette_runシンタックス要素に対応する符号化値とを備える符号化ビットストリームを受信するように構成され得る。ビデオデコーダ20は、palette_indexに対応する値(例えば、インデックス値)と、palette_runに対応する値(例えば、ラン値)とをそれぞれ決定するために、palette_indexに対応する符号化値と、palette_runに対応する符号化値とを復号するように構成され得る。
[0078] ランモードが使用されるとき、ラン値は、同じパレットインデックスを有するピクセルの数を示す。しかしながら、コピーモードが使用されるとき、ラン値は、パレットインデックス(例えば、インデックス値)が各ピクセルにそれぞれの別の(例えば、各それぞれのピクセルのすぐ上の)ピクセルからコピーされる、ピクセルの数を示す。
[0079] いくつかの例では、エスケープモードは、このモードを示すために特定のパレットインデックスが使用され得る、ランモード内でコーディングされる。エスケープモードを示すために使用されるパレットインデックスは、いくつかの例によれば現在ブロックのパレットサイズに等しい。エスケープモードでは、エスケープモードが単一のピクセル(例えば、ピクセルトリプレット(Y、U、およびV))に適用され、ここで、単一のピクセルのための(1つまたは複数の)色成分の(1つまたは複数の)値がpalette_escape_valとして明示的にシグナリングされるので、ラン値がコーディングされないことがある。いくつかの例では、同じブロックに属する第1の行の上のピクセルがないので、コピーモードがブロック中の第1の行のために有効化され(enabled)ないことがある。
[0080] エスケープピクセルの使用を示すために、フラグpalette_escape_val_present_flagがブロックごとにシグナリングされ得る。1に等しいこのフラグは、パレットコード化ブロック中に少なくとも1つのエスケープピクセルがあることを示し、他の場合、フラグは0に等しい。例えば、ビデオエンコーダ20は、palette_escape_val_present_flagシンタックス要素に対応する値を符号化ビットストリームに符号化することによって、シンタックス要素palette_escape_val_present_flagをシグナリングするように構成され得る。ビデオデコーダ20は、palette_escape_val_present_flagシンタックス要素に対応する符号化値を備える符号化ビットストリームを受信するように構成され得る。ビデオデコーダ20はpalette_escape_val_present_flagシンタックス要素に対応する値を決定し、従って、少なくとも1つのエスケープピクセルがパレットコード化ブロック中にあるかどうかを決定するために、符号化値を復号するように構成され得る。
[0081] いくつかの例では、パレットサイズは、0からmax_palette_sizeまでの範囲内に制限され、後者がシグナリングされる。パレットモードを用いてコーディングされたブロックについて、パレットは、いくつかの例では、1つまたは複数の前にパレットコーディングされたブロックのパレットエントリから予測され得る。パレットは、1つまたは複数の新しいエントリとして現在ブロックのために明示的にシグナリングされ得る。他の例では、前にコーディングされたブロックのパレットが現在ブロックのために完全に再利用され(例えば、コピーされ)得、これは、パレット共有モードと呼ばれる。いくつかの例では、前のブロックのパレット全体が現在ブロックのためにそのまま変更なしに再利用されることを示すために、フラグpalette_share_flagがシグナリングされ得る。
[0082] パレットモードを使用してビデオのブロックをコーディングするとき、ピクセル走査パターン(例えば、走査順序)は、例えば、垂直トラバース走査または水平トラバース(スネーク状)走査を含み得る。ブロック中で使用される走査パターンは、ブロックユニットごとにシグナリングされるフラグpalette_transpose_flagに従って導出され得る。
[0083] パレットモードコーディング中に、パレットインデックス調整プロセスが適用され得る。現在ブロック中の第2のピクセルから開始して、走査順序での前のピクセルのパレットモードが検査され(例えば、決定され)得る。いくつかの例では、最大パレットインデックスサイズが最初に1だけ低減され得る。走査順序での前のピクセルのためのパレットモードがランモードに等しい場合(すなわち、走査順序での前のピクセルが、ランモードを使用してコーディングされたかまたはコーディングされるべきである場合)、現在ピクセルのためのパレットインデックス(例えば、インデックス値)は、インデックス値が走査順序での前のピクセルのためのインデックス値よりも大きいかまたはそれに等しい場合、1だけ低減され得る。同様に、走査順序での前のピクセルのためのパレットモードがコピーモードに等しい場合(すなわち、走査順序での前のピクセルがコピーモードを使用してコーディングされたかまたはコーディングされるべきである場合)、現在ピクセルのためのパレットインデックス(例えば、インデックス値)は、インデックスが上のパレットインデックスよりも大きい場合、1だけ低減され得る。
[0084] ビデオエンコーダ20は、インデックスブロックを圧縮するために、インデックスブロックをエントロピー符号化するように構成され得る。同様に、ビデオデコーダ30は、ビデオデコーダ30がそれからサンプルのブロック(例えば、エンコーダ20によって符号化されたビデオデータのブロック)を生成し得るインデックスブロックを生成するために、符号化インデックスブロックをエントロピー復号するように構成され得る。例えば、インデックスブロックを圧縮および復元するために、ランレングスベースエントロピーコーディングが使用され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、CABACを使用してインデックスブロック中のインデックス値をそれぞれエントロピー符号化およびエントロピー復号するように構成され得る。
[0085] 情報(例えば、シンタックス要素、インデックスブロックのインデックス値など、インデックスブロック、または他の情報)にCABACコーディングを適用するために、ビデオコーダ(例えば、ビデオエンコーダ20およびビデオデコーダ30)は、情報に対して2値化を行い得る。2値化は、情報を一連の1つまたは複数のビットに変換するプロセスを指す。各一連の1つまたは複数のビットは、「ビン」と呼ばれることがある。2値化は、ロスレスプロセス(lossless process)であり、以下のコーディング技法、すなわち、固定長コーディング、単項コーディング(unary coding)、切頭単項コーディング(truncated unary coding)、切頭ライスコーディング(truncated Rice coding)、ゴロムコーディング、指数ゴロムコーディング、ゴロム−ライスコーディング、任意の形式のゴロムコーディング、任意の形式のライスコーディング、および任意の形式のエントロピーコーディングのうちの1つまたは組合せを含み得る。例えば、2値化は、5の整数値を、8ビット固定長技法を使用して00000101として表すことまたは単項コーディング技法を使用して11110として表すことを含み得る。
[0086] 2値化の後、ビデオコーダは、コーディングコンテキストを識別し得る。コーディングコンテキストは、特定の値を有するビンをコーディングする確率を識別し得る。例えば、コーディングコンテキストは、0の値のビンをコーディングする0.7の確率と、1の値のビンをコーディングする0.3の確率とを示し得る。コーディングコンテキストを識別した後、ビデオコーダは、そのビンをコンテキストに基づいて算術コーディングし得、これは、コンテキストモードコーディングとして知られる。CABACコンテキストモードコーディングを使用してコーディングされたビンは、「コンテキストビン」と呼ばれることがある。
[0087] さらに、全てのビンに対してコンテキストモードコーディングを行う代わりに、ビデオコーダ(例えば、ビデオエンコーダ20およびビデオデコーダ30)は、バイパスCABACコーディング(例えば、バイパスモードコーディング)を使用していくつかのビンをコーディングし得る。バイパスモードコーディングは、CABACコーダのバイパスモードを指し、ここで、バイパスコーディングは、適応コンテキスト(例えば、コーディングコンテキスト)を使用せずにビンを算術コーディングするプロセスである。すなわち、バイパスコーディングエンジンが、コンテキストを選択せず、両方のシンボル(0および1)について0.5の確率を仮定し得る。バイパスモードコーディングはコンテキストモードコーディングほど帯域幅効率的でないことがあるが、ビンに対してコンテキストモードコーディングを行うのではなく、ビンに対してバイパスモードコーディングを行うことは、計算コストがあまり高くないことがある。さらに、バイパスモードコーディングを行うことは、より高度の並列化およびスループットを可能にし得る。バイパスモードコーディングを使用してコーディングされたビンは、「バイパスビン」と呼ばれることがある。
[0088] ビデオエンコーダ20およびビデオデコーダ30は、CABACコーダ(例えば、それぞれ、CABACエンコーダおよびCABACデコーダ)で構成され得る。CABACコーダは、CABACコンテキストモードコーディングを行うためのコンテキストモードコーディングエンジンと、バイパスモードコーディングを行うためのバイパスモードコーディングエンジンとを含み得る。ビンがコンテキストモードコーディングされる場合、このビンをコーディングするために、コンテキストモードコーディングエンジンが使用される。コンテキストモードコーディングエンジンは、単一のビンをコーディングするために3つ以上の処理サイクルを必要とし得る。しかしながら、適切なパイプライン設計を用いると、コンテキストモードコーディングエンジンは、n個のビンを符号化するためにn+Mサイクルのみを必要とし得、ここで、Mはパイプラインを開始するためのオーバーヘッドである。Mは通常0よりも大きい。
[0089] CABACコーディングプロセスの開始時に(すなわち、バイパスモードからコンテキストモードへのおよびその逆の切替えごとに)、パイプラインオーバーヘッドが導入される。ビンがバイパスモードコーディングされる場合、このビンをコーディングするために、バイパスモードコーディングエンジンが使用される。バイパスモードコーディングエンジンは、nビット情報をコーディングするために、1つのサイクルのみを必要とすることが予想され得、ここで、nは1よりも大きいことがある。従って、セット内のバイパスビンの全てが一緒に(例えば、インターリーブされたコンテキストコード化ビンなしに順次)コーディングされる場合、およびセット内のコンテキストビンの全てが一緒に(例えば、インターリーブされたバイパスコード化ビンなしに順次)コーディングされる場合、バイパスビンとコンテキストビンのセットをコーディングするためのサイクルの総数が低減され得る。詳細には、コンテキストモードコーディングに遷移する前または遷移した後、バイパスビンを一緒にコーディングすることは、コンテキストモードコーディングエンジンを再開するために必要とされるオーバーヘッドを節約することができる。例えば、ビデオエンコーダ20およびビデオデコーダ30は、パレットモードを使用してビデオデータのブロックをそれぞれ符号化または復号する間、一連のバイパスコード化ビンおよびコンテキストコード化ビンにわたって、1回、バイパスモードからコンテキストモードに(または他の例ではコンテキストモードからバイパスモードに)切り替わるように構成され得る。別の例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットモードを使用してビデオデータのブロックを符号化または復号するとき、符号化プロセスまたは復号プロセスがバイパスモードからコンテキストモードに(およびコンテキストモードからバイパスモードに)切り替わる回数を低減するように構成され得る。
[0090] 本開示で説明される技法は、パレットベースビデオコーディングモードをシグナリングすること、パレットを送信すること、パレットを導出すること、走査順序をシグナリングすること、走査順序を導出すること、並びにパレットベースビデオコーディングマップおよび他のシンタックス要素を送信することのうちの1つまたは複数の様々な組合せのための技法を含み得る。例えば、本開示の技法は、パレット情報をエントロピーコーディングすることを対象とし得る。いくつかの例では、本開示の技法は、特に、パレットベースビデオコーディングに関連するコーディング効率を増加させ、コーディング非効率性を低減するために使用され得る。従って、以下でより詳細に説明されるように、本開示の技法は、いくつかの事例では、パレットモードを使用してビデオデータをコーディングするときの効率を改善し、ビットレートを改善し得る。
[0091] 本明細書で説明される技法、態様、および/または例は、任意の組合せで一緒にまたは互いに別々に利用され得る。例えば、ビデオエンコーダ20およびビデオデコーダ30は、本明細書で説明される技法、態様、および/または例のうちの1つまたは複数のうちのいずれか1つまたは任意の好適な組合せを行うように構成され得る。
[0092] 例示的なコーディングシステムの問題は、2015年2月10日にJCT−VCドキュメント管理システムにアップロードされたドキュメント、Tzu−Der Chuangら、「CE-1 related: Index Map scan for 64 x 64 palette coding block」、JCTVC−T0058バージョン3(以下、「JCTVC−T0058」)に記載されるもので、パレットブロックサイズが64×64ほど大きくなり得、走査パターンが64×64ほど大きくなり得るが、例えば、係数走査が適用される、最も大きい変換ブロックサイズが32×32であることである。従って、この場合、その実施形態でのパイプラインは、パレットモードがない場合は必要とされない、64×64のブロックサイズに増加され、従って、パレットモードのための特殊な場合を提示する。JCTVC−T0058は、64×64のトラバース走査を4つの32×32トラバース走査に変更することによって、パレットモードにおける64×64ブロックを4つの32×32のサブブロックとしてコーディングすることを記載した。しかしながら、そうすることは、64×64のパレットブロックの場合にのみ固有である、パレットモードコーディングの変更を必要とし、従って、例えば、パレットモードコーディングへの非一様性を導入するであろう。
[0093] 本開示の様々な例では、本開示の技法は、例えば、64×64ブロックがパレットモードを使用してコーディングされるべきであるとしても、それがどのようにコーディングされるべきであるかに対処することによって、コーディング効率を改善し、および/またはコーデック複雑さを低減するために、パレットモードにおいてブロックを予測またはコーディングすることのプロセスを対象とし得る。
[0094] 本開示のいくつかの例では、64×64またはそれ以上のサイズを有するパレットブロックのためのパレットモードコーディングが無効化され得る。他の例では、パレットモードコーディングは、64×64よりも小さいサイズを有するパレットブロックに制限され得、これは、パレットモードコーディングが64×64よりも小さいサイズを有するパレットブロックについて、有効化されるかまたはさもなければ使用され得ることを意味する。他の例では、最大パレットブロックサイズが、最大変換ユニットサイズに規範的に制限されるなど、最大変換ユニットサイズに基づいて規範的に制限され得る。パレットモードコーディングは、最大変換ユニットサイズを超えるかまたはさもなければそれよりも大きいパレットブロックサイズについて無効化され得る。そのような例では、最大パレットブロックサイズは、最大パレットブロックサイズが最大変換ユニットサイズに規範的に制限されるという点で、最大変換ユニットサイズに基づき得ることを理解されたい。例えば、ビデオエンコーダ20は、パレットモードを使用して符号化され得る最大パレットブロックサイズを最大変換ユニットサイズに規範的に制限するように構成され得る。この例では、ビデオエンコーダ20は、ビデオエンコーダ20が符号化するように構成された最大変換ユニットサイズよりも大きいサイズを有するパレットブロックについて、パレットモードを無効化するかまたはさもなければパレットモードを使用しないように構成され得る。
[0095] 例えば、ビデオエンコーダ20が符号化するように構成された最大変換ユニットサイズが32×32である場合、ビデオエンコーダ20は、最大パレットブロックサイズを32×32に規範的に制限するように構成され得る。そのような例では、ビデオエンコーダ20は、32×32よりも大きいサイズを有するパレットブロックについて、パレットモードを無効化するかまたはさもなければパレットモードを使用しないように構成され得る。また、そのような例では、ビデオエンコーダ20は、32×32よりも小さいかまたはそれに等しいサイズを有するパレットブロックについて、パレットモードを有効化する(enable)かまたはさもなければパレットモードを使用するように構成され得ることを理解されたい。32×32よりも大きいサイズを有するパレットブロックの例としては、例えば、64×64、64×16、16×64、64×32、および32×64がある。
[0096] 別の例として、ビデオエンコーダ20が符号化するように構成された最大変換ユニットサイズが16×16である場合、ビデオエンコーダ20は、最大パレットブロックサイズを16×16に規範的に制限するように構成され得る。そのような例では、ビデオエンコーダ20は、16×16よりも大きいサイズを有するパレットブロックについて、パレットモードを無効化するかまたはさもなければパレットモードを使用しないように構成され得る。また、そのような例では、ビデオエンコーダ20は、16×16よりも小さいかまたはそれに等しいサイズを有するパレットブロックについて、パレットモードを有効化するかまたはさもなければパレットモードを使用するように構成され得ることを理解されたい。
[0097] 他の例では、ビデオエンコーダ20が符号化するように構成された最大変換ユニットサイズは、M×Nのブロックサイズに規範的に制限され得、ここで、MおよびNは、正の整数であり、互いに等しいことも等しくないこともある。いくつかの例では、Mおよび/またはNは、最大変換ユニットサイズに基づき得る。例えば、最大変換ユニットサイズが32×32である場合、MおよびNは両方とも32に等しいであろう。しかしながら、最大変換ユニットサイズが32×16である一例では、Mは32に等しく、Nは16に等しいであろう。そのような例では、32×16よりも大きいサイズを有するパレットブロックの例としては、例えば、64×64、64×16、16×64、64×32、32×64、32×32、および16×32がある。
[0098] いくつかの例では、ビデオエンコーダ20は、特定のデータセットのために最大変換ユニットサイズをシグナリングするように構成され得る。そのような例では、ビデオエンコーダ20は、シグナリングされた最大変換ユニットサイズよりも大きいブロックサイズを有する特定のデータセットに関連するパレットブロックについて、パレットモードを無効化するかまたはさもなければパレットモードを使用しないように構成され得る。従って、本明細書で使用される最大変換ユニットは、ビデオエンコーダ20が符号化するように構成された最大変換ユニットを指すことがあり、または特定のデータセット(例えば、ビデオデータの1つまたは複数のブロック)についてのシグナリングされた最大変換ユニットを指すことがある。例えば、最大変換ユニットサイズが32×32であり得るが、ビデオエンコーダ20は、特定のデータセットについて、最大変換ユニットサイズが16×16であることをシグナリングし得る。従って、この例におけるこの特定のデータセットについて、最大変換ユニットサイズは16×16である。
[0099] 従って、ビデオエンコーダ20は、最大変換ユニットサイズに基づいて、パレットモードを動的に無効化するように構成され得るかまたはさもなければパレットモードを使用しないように構成され得ることを理解されたい。同様に、ビデオエンコーダ20は、最大変換ユニットよりも大きいサイズを有するパレットブロックについて、パレットモードを動的に無効化するように構成され得るかまたはさもなければパレットモードを使用しないように構成され得ることを理解されたい。従って、また、ビデオエンコーダ20は、最大変換ユニットに等しくないかまたはそれよりも小さいサイズを有するパレットブロックについて、パレットモードを動的に無効化するように構成され得るかまたはさもなければパレットモードを使用しないように構成され得ることを理解されたい。従って、さらに、ビデオエンコーダ20は、ビデオデータのブロックが、ビデオエンコーダ20が符号化するように構成され得る最大変換ユニットを超えないサイズを有するときのみ、パレットモードを使用してビデオデータのブロックを符号化するように構成され得ることを理解されたい。同様に、ビデオエンコーダ20は、ビデオデータのブロックが最大変換ユニットを超えないサイズを有するときのみ、ビデオデータのブロックのためのパレットモードコーディングを有効化するように構成され得る。
[00100] 同様に、従って、ビデオデコーダ30は、最大変換ユニットに等しくないかまたはそれよりも小さいサイズを有するパレットブロックについて、パレットモードを動的に無効化するように構成され得るかまたはさもなければパレットモードを使用しないように構成され得ることを理解されたい。従って、さらに、ビデオデコーダ30は、ビデオデータのブロックが、ビデオエンコーダ20が符号化するように構成され得るおよび/またはビデオデコーダ30が復号するように構成され得る最大変換ユニットを超えないサイズを有するときのみ、パレットモードを使用してビデオデータのブロックを復号するように構成され得ることを理解されたい。同様に、ビデオデコーダ30は、ビデオデータのブロックが最大変換ユニットを超えないサイズを有するときのみ、ビデオデータのブロックのためのパレットモードコーディングを有効化するように構成され得る。他の例では、ビデオデコーダ30は、palette_mode_flagのシンタックス要素のための値など、パレットモードフラグに対応する値に基づいて、パレットモードが有効化されるのか無効化するのかを決定するように構成され得る。
[00101] 別の例として、ビデオデコーダ30は、ビデオデータのブロックを受信するように構成され得る。ビデオデコーダ30は、最大変換ユニットサイズに対してブロックビデオデータのサイズを決定するように構成され得る。ビデオデコーダ30は、ビデオデータの受信されたブロックが最大変換ユニットサイズのサイズよりも大きいとき、ビデオの受信されたブロックがパレットモード符号化されないと決定するように構成され得る。
[00102] 本明細書に記載のように、最大パレットブロックサイズは規範的に制限され得る。例えば、最大パレットブロックサイズは、最大変換ユニットサイズに規範的に制限されるなど、最大変換ユニットサイズに基づき得る。いくつかの例では、ビデオエンコーダ20は、パレットモードがいつ無効化され、有効化され、またはさもなければ使用されるかを制御することを生じる、本明細書で説明されるパレットブロックサイズ制限を実施するために、コンフォーマンスビットストリーム制約(conformance bitstream constraint)を用いて構成され得る。例えば、コンフォーマントビットストリーム制約(conformant bitstream constraint)は、コンフォーマントビットストリームが、パレットモードを用いてコーディングされた、あるサイズを超えるブロックを有しないものとすることであり得る。別の例として、コンフォーマントビットストリーム制約は、コンフォーマントビットストリームが、パレットモードを用いてコーディングされたブロックがあるサイズに等しいかまたはそれよりも小さい場合のみ、そのブロックを有するものとすることであり得る。両方の例では、参照されるあるサイズは、32×32または他のM×Nサイズであり得、ここで、MおよびNは、正の整数であり、互いに等しいことも等しくないこともある。但し、他の例では、上記の両方の例における参照されるあるサイズは、最大変換ユニットサイズに基づき得る。そのような例では、コンフォーマントビットストリーム制約は、例えば、コンフォーマントビットストリームが、最大変換ユニットを超えるブロックを有しないものとすることであり得る。別の例として、コンフォーマントビットストリーム制約は、コンフォーマントビットストリームが、本明細書で説明される1つまたは複数の規範的制限に準拠しなければならないことであり得る。
[00103] 本明細書で説明されるコンフォーマントビットストリーム制約に関して、ビデオエンコーダ20は、パレットモードがビデオデータのブロックのために、いつ無効化され、有効化され、またはさもなければ使用されるかを制御するために、任意の組合せで(1つまたは複数の)そのような制約を用いて構成され得ることを理解されたい。
[00104] 他の例では、ビデオエンコーダ20は、ビデオデータのブロック全体がM×Nサブブロックによって表されるように、パレットモードコーディングされるべきビデオデータのブロックをM×Nサブブロックに分割するように構成されることによって、本明細書で説明されるパレットブロックサイズ制限を実施するように構成され得、ここで、MおよびNは、正の整数であり、互いに等しいことも等しくないこともある。ビデオデータのブロック全体を分割することは、ビデオデータのブロックの各ピクセル(例えば、サンプル)がM×Nサブブロックの一部であることを意味する。サブブロックのサイズは、1つまたは複数の基準に依存し得る。例えば、M×Nサブブロックのサイズは、パレットモードコーディングを変換係数コーディングと整合させるために、変換係数コーディングにおいて使用されるブロックのサイズ(例えば、TU中の変換ブロックのサイズ)に依存し得る。そのような例では、ビデオエンコーダ20が、サイズが4×4のブロックを使用して変換係数コーディングするように構成された場合、ビデオエンコーダ20は、パレットモードコーディングされるべきビデオデータのブロックを4×4のサブブロックに分割するように構成され得、ここで、MおよびNは両方とも4に等しい。例えば、パレットモードを使用して64×64ブロックをコーディングする代わりに、ビデオエンコーダ20は、64×64ブロックを複数の4×4サブブロックに分割するように構成され、この例では256個の4×4サブブロックを生じ、各サブブロックがパレットモードを使用して個々にコーディングされ得る。
[00105] 別の例では、1つまたは複数の基準に依存するのではなく、M×Nサブブロックのサイズは、64×64よりも小さいデフォルトサイズであり得る。例えば、M×Nサブブロックのデフォルトサイズは、4×4、8×8、16×16、32×32、または64×64よりも小さい他のサイズであり得る。この例では、ビデオエンコーダ20は、パレットモードコーディングされるべきビデオデータのブロックを、それぞれ、4×4、8×8、16×16、32×32、または64×64よりも小さい他のサイズなど、デフォルトサイズに分割するように構成されることによって、本明細書で説明されるパレットブロックサイズ制限を実施するように構成され得る。
[00106] いくつかの例では、M×Nサブブロックは、任意の走査順序に従って走査され得る。例えば、ビデオエンコーダ20は、ジグザグ走査順序、水平走査順序、垂直走査順序、「スネーク状」走査順序(すなわち、トラバース走査順序)、または他の走査順序を使用して、M×Nサブブロックを走査するように構成され得る。
[00107] 他の例では、ビデオエンコーダ20は、64×64のサイズを有するブロックのために(例えば、palette_mode_flagのシンタックス要素のための値をシグナリングすることによって)パレットモードをシグナリングするように構成されるだけでなく、64×64よりも小さいM×Nサブブロックサイズのために他のパレット関係情報(例えば、再利用されるパレットエントリ、新しいパレットエントリ、パレットテーブルサイズなど)をシグナリングするように構成されることによって、本明細書で説明されるパレットブロックサイズ制限を実施するように構成され得、ここで、MおよびNは、正の整数であり、互いに等しいことも等しくないこともある。例えば、M×Nサブブロックサイズは32×32であり得る。いくつかの例では、M×Nサブブロックサイズは、32×32が最大変換ユニットのサイズに対応するので、32×32であり得る。そのような例では、ビデオエンコーダ20は、64×64のサイズを有するブロックのためのパレットモードをシグナリングするように構成されるだけでなく、32×32サブブロックサイズ(または他のM×Nサブブロックサイズ)において他のパレット関係情報をシグナリングするように構成されることによって、本明細書で説明されるパレットブロックサイズ制限を実施するように構成され得る。これは、ビデオエンコーダ20がパレットモードブロックサイズを変換ユニットブロックサイズと調和させるように構成され得る、本明細書で説明される一例である。いくつかの例では、Mおよび/またはNは、最大変換ユニットサイズに基づき得る。例えば、最大変換ユニットサイズが32×32である場合、MおよびNは両方とも32に等しいであろう。64×64パレットブロックサイズのための走査順序は、M×Nブロックの各々のための走査順序と同じであり得る。
[00108] 64×64のパレットブロックサイズを伴う一例では、ビデオエンコーダは、この64×64サイズのパレットブロックのためのパレットモードをシグナリングするように構成され得る。ビデオエンコーダは、次いで、各M×Nサブブロックのための他のパレット関係情報をシグナリングするように構成され得る。例えば、ビデオエンコーダ20は、各M×Nサブブロックのためのmax_palette_sizeをシグナリングするように構成され得る。
[00109] 他の例では、ビデオエンコーダ20は、インデックス値および/またはエスケープ値の最長ランレングスをTのしきい値よりも小さくなるように制限するように構成されることによって、本明細書で説明されるパレットブロックサイズ制限を実施するように構成され得る。そのような例では、64×64パレットブロックをサブブロックにスプリットするのではなく、ビデオエンコーダ20は、最大ランレングスをTのしきい値よりも小さくなるように制限するように構成され得る。最大ランレングス値を制限することによって、ビデオエンコーダ20は、パレットブロックをサブブロックに分割することなしにパレットブロックサイズ制限を実施するように構成され得る。
[00110] いくつかの例では、Tは、最大変換ユニットサイズに等しくなり得る。例えば、最大変換ユニットサイズが32×32である場合、Tは32×32に等しくなり得る。64×64パレットブロックと32×32のT値とのための水平トラバース走査順序を伴う一例が次に説明される。この例では32×32象限におけるパレットブロック(例えば、インデックス値と、その後に続く、32×32−1など、Tよりも小さいランレングス)を処理するのではなく、ビデオエンコーダ20は、64×64パレットブロックをそのまま処理するが、32×32−1など、Tの値よりも小さい値に最大ランレングスを制限し得る。
[00111] いくつかの例では、ビデオエンコーダ20は、本明細書で説明されるパレットブロックサイズ制限を実施するために、コンフォーマンスビットストリーム制約を用いて構成され得る。例えば、コンフォーマントビットストリーム制約は、コンフォーマントビットストリームが、Tのしきい値に等しいかまたはそれよりも大きいランレングス値を含まないものとすることであり得る。
[00112] 図2は、本開示の技法を実施し得る例示的なビデオエンコーダ20を示すブロック図である。図2は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオエンコーダ20について説明する。但し、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[00113] ビデオエンコーダ20は、本開示で説明される様々な例に従ってパレットベースコーディングのための技法を行うように構成され得るデバイスの一例を表す。
[00114] 図2の例では、ビデオエンコーダ20は、ブロック符号化ユニット100と、ビデオデータメモリ101と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構成ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。ブロック符号化ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニットと、動き補償ユニットとを含む(図示せず)。ビデオエンコーダ20は、本開示で説明されるパレットベースコーディング技法の様々な態様を行うように構成された、パレットベース符号化ユニット122をも含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[00115] ビデオデータメモリ101は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ101に記憶されるビデオデータは、例えば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、例えば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなど、様々なメモリデバイスのうちのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって与えられ得る。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[00116] ビデオエンコーダ20はビデオデータを受信し得る。ビデオエンコーダ20はビデオデータのピクチャのスライス中の各CTUを符号化し得る。CTUの各々は、等しいサイズのルーマコーディングツリーブロック(CTB:coding tree block)と、ピクチャの対応するCTBとに関連付けられ得る。CTUを符号化することの一部として、ブロック符号化ユニット100は、CTUのCTBを徐々により小さいブロックに分割するために4分木区分を行い得る。より小さいブロックはCUのコーディングブロックであり得る。例えば、ブロック符号化ユニット100は、CTUに関連付けられたCTBを4つの等しいサイズのサブブロックに区分し、サブブロックのうちの1つまたは複数を4つの等しいサイズのサブサブブロックに区分し得、以下同様である。
[00117] ビデオエンコーダ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サイズに対する非対称区分をもサポートし得る。
[00118] インター予測処理ユニット120は、CUの各PUに対してインター予測を行うことによって、PUのための予測データを生成し得る。PUのための予測データは、PUの予測ブロックとPUのための動き情報とを含み得る。インター予測ユニット121は、PUがIスライス中にあるのか、Pスライス中にあるのか、Bスライス中にあるのかに応じて、CUのPUに対して異なる動作を行い得る。Iスライス中では、全てのPUがイントラ予測される。従って、PUがIスライス中にある場合、インター予測ユニット121はPUに対してインター予測を行わない。従って、Iモードで符号化されたブロックの場合、予測ブロックは、同じフレーム内の前に符号化された隣接ブロックからの空間予測を使用して形成される。
[00119] PUがPスライス中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャのリスト(例えば、「RefPicList0」)中の参照ピクチャを探索し得る。PUのための参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含んでいる、参照ピクチャ内の領域であり得る。動き推定ユニットは、PUのための参照領域を含んでいる参照ピクチャのRefPicList0中の位置を示す参照インデックスを生成し得る。さらに、動き推定ユニットは、PUのコーディングブロックと参照領域に関連付けられた参照ロケーションとの間の空間変位を示すMVを生成し得る。例えば、MVは、現在の復号ピクチャ中の座標から参照ピクチャ中の座標までのオフセットを与える2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として、参照インデックスとMVとを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照ロケーションにおける実際のまたは補間されたサンプルに基づいて、PUの予測ブロックを生成し得る。
[00120] PUがBスライス中にある場合、動き推定ユニットは、PUについての単予測または双予測を行い得る。PUについての単予測を行うために、動き推定ユニットは、PUのための参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索し得る。動き推定ユニットは、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUの予測ブロックと参照領域に関連付けられた参照ロケーションとの間の空間変位を示すMVと、参照ピクチャがRefPicList0中にあるのかRefPicList1中にあるのかを示す1つまたは複数の予測方向インジケータとを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[00121] PUについての双方向インター予測を行うために、動き推定ユニットは、PUのための参照領域についてRefPicList0中の参照ピクチャを探索し得、PUのための別の参照領域についてRefPicList1中の参照ピクチャをも探索し得る。動き推定ユニットは、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中の位置を示す参照ピクチャインデックスを生成し得る。さらに、動き推定ユニットは、参照領域に関連付けられた参照ロケーションとPUのサンプルブロックとの間の空間変位を示すMVを生成し得る。PUの動き情報は、PUの参照インデックスとMVとを含み得る。動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[00122] 本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースコーディングを行うように構成され得る。HEVCフレームワークに関して、一例として、パレットベースコーディング技法は、CUレベルにおいて使用されるように構成され得る。他の例では、パレットベースコーディング技法は、PUレベルにおいて使用されるように構成され得る。他の例では、パレットベースコーディング技法は、サブ予測ユニット(サブPU)レベル(例えば、予測ユニットのサブブロック)において使用されるように構成され得る。従って、CUレベルのコンテキストにおいて(本開示全体にわたって)本明細書で説明される開示されるプロセスの全てが、追加または代替として、PUレベルまたはサブPUレベルに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースビデオコーディング技法が、独立して、あるいは他の既存のまたはまだ開発されていないシステム/規格の一部として動作するように適用され得るので、そのような技法の制限または限定であると見なされるべきではない。これらの場合、パレットコーディングのためのユニットは、正方形ブロック、矩形ブロック、さらには非矩形形状の領域であり得る。
[00123] パレットベース符号化ユニット122は、例えば、パレットベース符号化モードが、例えば、CUまたはPUのために選択されるとき、パレットベース復号を行い得る。例えば、パレットベース符号化ユニット122は、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロックの位置のうちの少なくともいくつかを選択されたピクセル値にそれぞれ対応するパレット中のエントリに関連付ける情報をシグナリングするように構成され得る。様々な機能が、パレットベース符号化ユニット122によって行われるものとして説明されたが、そのような機能の一部または全部は、他の処理ユニット、または異なる処理ユニットの組合せによって行われ得る。
[00124] 本開示の態様によれば、パレットベース符号化ユニット122は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを行うように構成され得る。
[00125] 例えば、パレットベース符号化ユニット122は、64×64またはそれ以上のサイズを有するパレットブロックのためのパレットモードコーディングを無効化するように構成され得る。他の例では、パレットベース符号化ユニット122は、パレットモードコーディングを、64×64よりも小さいサイズを有するパレットブロックに制限するように構成され得、これは、パレットモードコーディングが64×64よりも小さいサイズを有するパレットブロックについて、有効化されるかまたはさもなければ使用され得ることを意味する。他の例では、パレットベース符号化ユニット122は、最大変換ユニットサイズに基づいて、最大パレットブロックサイズを規範的に制限するように構成され得る。別の例では、パレットベース符号化ユニット122は、最大変換ユニットサイズを超えるかまたはさもなければそれよりも大きいサイズを有するパレットブロックのためのパレットモードコーディングを無効化するように構成され得る。パレットベース符号化ユニット122は、同様に、本明細書で説明されるパレットコーディングのための他の技法を行うように構成され得る。
[00126] イントラ予測処理ユニット126は、PUに対してイントラ予測を行うことによって、PUのための予測データを生成し得る。PUのための予測データは、PUのための予測ブロックと、様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライス中のPUに対してイントラ予測を行い得る。
[00127] PUに対してイントラ予測を行うために、イントラ予測処理ユニット126は、PUのための予測データの複数のセットを生成するために複数のイントラ予測モードを使用し得る。イントラ予測処理ユニット126は、PUのための予測ブロックを生成するために隣接PUのサンプルブロックからのサンプルを使用し得る。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、例えば、33個の方向性イントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUに関連付けられた領域のサイズに依存し得る。
[00128] ブロック符号化ユニット100は、PUのためにインター予測処理ユニット120によって生成された予測データ、またはPUのためにイントラ予測処理ユニット126によって生成された予測データの中からCUのPUのための予測データを選択し得る。いくつかの例では、ブロック符号化ユニット100は、予測データのセットのレート/ひずみメトリックに基づいて、CUのPUのための予測データを選択する。選択された予測データの予測ブロックは、本明細書では、選択された予測ブロックと呼ばれることがある。
[00129] 残差生成ユニット102は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックと、CUのPUの選択された予測ルーマブロック、予測Cbブロックおよび予測Crブロックとに基づいて、CUのルーマ残差ブロック、Cb残差ブロックおよびCr残差ブロックを生成し得る。例えば、残差生成ユニット102は、残差ブロック中の各サンプルが、CUのコーディングブロック中のサンプルとCUのPUの対応する選択された予測ブロック中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
[00130] 変換処理ユニット104は、CUに関連付けられた残差ブロックをCUのTUに関連付けられた変換ブロックに区分するために、4分木区分を行い得る。従って、いくつかの例では、TUは、ルーマ変換ブロックと2つのクロマ変換ブロックとに関連付けられ得る。CUのTUのルーマ変換ブロックとクロマ変換ブロックとのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも基づかないこともある。「残差4分木」(RQT:residual quad-tree)として知られる4分木構造は、領域の各々に関連付けられたノードを含み得る。CUのTUはRQTのリーフノードに対応し得る。
[00131] 変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUの各TUのための変換係数ブロックを生成し得る。変換処理ユニット104は、TUに関連付けられた変換ブロックに様々な変換を適用し得る。例えば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に同様の変換を変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は変換ブロックに変換を適用しない。そのような例では、変換ブロックは変換係数ブロックとして扱われ得る。
[00132] 量子化ユニット106は、係数ブロック中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部または全部に関連付けられたビット深度を低減し得る。例えば、量子化中にnビットの変換係数がmビットの変換係数に切り捨てられることがあり、ここで、nはmよりも大きい。量子化ユニット106は、CUに関連付けられた量子化パラメータ(QP)値に基づいて、CUのTUに関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連付けられたQP値を調整することによって、CUに関連付けられた係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらし得、従って、被量子化変換係数は、元の係数よりも低い精度を有し得る。
[00133] 逆量子化ユニット108および逆変換処理ユニット110は、係数ブロックから残差ブロックを再構成するために、それぞれ、係数ブロックに逆量子化および逆変換を適用し得る。再構成ユニット112は、TUに関連付けられた再構成済み変換ブロックを生成するために、再構成済み残差ブロックを、ブロック符号化ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに加算し得る。このようにCUの各TUについて変換ブロックを再構成することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構成し得る。
[00134] フィルタユニット114は、CUに関連付けられたコーディングブロック内のブロッキングアーティファクトを低減するために1つまたは複数のデブロッキング演算を行い得る。フィルタユニット114は、サンプル適応オフセット(SAO:sample adaptive offset)フィルタ処理および/または適応ループフィルタ処理(ALF:adaptive loop filtering)を含む、他のフィルタ処理演算を行い得る。復号ピクチャバッファ116は、フィルタユニット114が、再構成済みコーディングブロックに対して1つまたは複数のデブロッキング演算を行った後、再構成済みコーディングブロックを記憶し得る。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を行うために、再構成済みコーディングブロックを含んでいる参照ピクチャを使用し得る。さらに、イントラ予測処理ユニット126は、CUと同じピクチャの中の他のPUに対してイントラ予測を行うために、復号ピクチャバッファ116中の再構成済みコーディングブロックを使用し得る。
[00135] エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受信し得る。例えば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受信し得、ブロック符号化ユニット100からシンタックス要素を受信し得る。エントロピー符号化ユニット118は、エントロピー符号化データを生成するために、データに対して1つまたは複数のエントロピー符号化演算を行い得る。例えば、エントロピー符号化ユニット118は、CABAC演算、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)演算、可変対可変(V2V:variable-to-variable)長コーディング演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)演算、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算など、コンテキスト適応型コーディング演算をデータに対して行い得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。例えば、ビットストリームは、CUのためのRQTを表すデータを含み得る。
[00136] いくつかの例では、残差コーディングはパレットコーディングとともに行われない。従って、ビデオエンコーダ20は、パレットコーディングモードを使用してコーディングするとき、変換または量子化を行わないことがある。さらに、ビデオエンコーダ20は、残差データとは別個に、パレットコーディングモードを使用して生成されたデータをエントロピー符号化し得る。
[00137] 本開示の技法のうちの1つまたは複数によれば、ビデオエンコーダ20、および詳細にはパレットベース符号化ユニット122は、予測されるビデオブロックのパレットベースビデオコーディングを行い得る。上記で説明されたように、ビデオエンコーダ20によって生成されたパレットは、明示的に符号化されるか、ビデオデコーダ30に送られるか、前のパレットエントリから予測されるか、前のピクセル値から予測されるか、またはそれらの組合せであり得る。
[00138] 図3は、本開示の技法を行うように構成された例示的なビデオデコーダ30を示すブロック図である。図3は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオデコーダ30について説明する。但し、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[00139] エンコーダ20に関して上記で説明されたパレットコーディングの詳細は、デコーダ30に関してここで繰り返されないが、デコーダ30は、エンコーダ20に関して本明細書で説明される符号化プロセスに対する逆の復号プロセスを行い得ることを理解されたい。
[00140] 例えば、ビデオデコーダ30は、最大変換ユニットに等しくないかまたはそれよりも小さいサイズを有するパレットブロックについて、パレットモードを動的に無効化するように構成され得るかまたはさもなければパレットモードを使用しないように構成され得ることを理解されたい。さらに、ビデオデコーダ30は、ビデオデータのブロックが、ビデオエンコーダ20が符号化するように構成され得るおよび/またはビデオデコーダ30が復号するように構成され得る最大変換ユニットを超えないサイズを有するときのみ、パレットモードを使用してビデオデータのブロックを復号するように構成され得ることを理解されたい。同様に、ビデオデコーダ30は、ビデオデータのブロックが最大変換ユニットを超えないサイズを有するときのみ、ビデオデータのブロックのためのパレットモードコーディングを有効化するように構成され得る。他の例では、ビデオデコーダ30は、palette_mode_flagのシンタックス要素のための値など、パレットモードフラグに対応する値に基づいて、パレットモードが有効化されるのか無効化するのかを決定するように構成され得る。
[00141] 別の例として、ビデオデコーダ30は、ビデオデータのブロックを受信するように構成され得る。ビデオデコーダ30は、最大変換ユニットサイズに対してブロックビデオデータのサイズを決定するように構成され得る。ビデオデコーダ30は、ビデオデータの受信されたブロックが最大変換ユニットサイズのサイズよりも大きいとき、ビデオの受信されたブロックがパレットモード符号化されないと決定するように構成され得る。
[00142] ビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースコーディングおよびエントロピーコーディング(例えば、CABAC)のための技法を行うように構成され得るデバイスの一例を表す。
[00143] 図3の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、ビデオデータメモリ151と、ブロック復号ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構成ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。ブロック復号ユニット152は、動き補償ユニット164と、イントラ予測処理ユニット166とを含む。ビデオデコーダ30は、本開示で説明されるパレットベースコーディング技法の様々な態様を行うように構成された、パレットベース復号ユニット165をも含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[00144] ビデオデータメモリ151は、ビデオデコーダ30の構成要素によって復号されるべき、符号化ビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ151に記憶されるビデオデータは、例えば、コンピュータ可読媒体16から、例えば、カメラなどのローカルビデオソースから、ビデオデータのワイヤードまたはワイヤレスネットワーク通信を介して、あるいは物理データ記憶媒体にアクセスすることによって取得され得る。ビデオデータメモリ151は、符号化ビデオビットストリームからの符号化ビデオデータを記憶するコード化ピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、例えば、イントラコーディングモードまたはインターコーディングモードでビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗性RAM(RRAM)、または他のタイプのメモリデバイスなど、様々なメモリデバイスのうちのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって与えられ得る。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[00145] コード化ピクチャバッファ(CPB)は、ビットストリームの符号化ビデオデータ(例えば、NALユニット)を受信し、記憶し得る。エントロピー復号ユニット150は、CPBから符号化ビデオデータ(例えば、NALユニット)を受信し、シンタックス要素を復号するためにNALユニットをパースし得る。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化シンタックス要素をエントロピー復号し得る。ブロック復号ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて復号ビデオデータを生成し得る。
[00146] ビデオデコーダ30は、本明細書で説明されるビデオエンコーダ20のプロセスとは概して逆のプロセスを行うように構成され得る。同様に、ビデオエンコーダ20は、本明細書で説明されるビデオデコーダ20のプロセスとは概して逆のプロセスを行うように構成され得る。例えば、ビデオデコーダ30がビットストリーム中の符号化シンタックス要素を復号するように構成され得るという開示は、同様に、ビデオエンコーダ20がそのシンタックス要素をそのビットストリーム中に符号化するように構成され得ることを必然的に開示する。
[00147] 別の例として、エントロピー復号ユニット150は、本明細書で説明されるエントロピー符号化ユニット118のプロセスとは概して逆のプロセスを行うように構成され得る。本開示の態様によれば、エントロピー復号ユニット150は、エントロピー符号化ユニット118によって生成されたコードワードをエントロピー復号するように構成され得る。
[00148] ビットストリームのNALユニットはコード化スライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コード化スライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コード化スライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関するシンタックス要素を含んでいることがある。スライスヘッダ中のシンタックス要素は、スライスを含んでいるピクチャに関連付けられたPPSを識別するシンタックス要素を含み得る。
[00149] ビットストリームからシンタックス要素を復号することに加えて、ビデオデコーダ30は、区分されていないCUに対して再構成演算を行い得る。区分されていないCUに対して再構成演算を行うために、ビデオデコーダ30はCUの各TUに対して再構成演算を行い得る。CUの各TUに対して再構成演算を行うことによって、ビデオデコーダ30はCUの残差ブロックを再構成し得る。
[00150] CUのTUに対して再構成演算を行うことの一部として、逆量子化ユニット154は、TUに関連付けられた係数ブロックを逆量子化、すなわち、量子化解除し得る。逆量子化ユニット154は、量子化の程度を決定し、同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、TUのCUに関連付けられたQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、採用されたエントロピーコーディングの方法に依存し得る。
[00151] 逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUに関連付けられた残差ブロックを生成するために係数ブロックに1つまたは複数の逆変換を適用し得る。例えば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT:Karhunen-Loeve transform)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
[00152] イントラ予測を使用してPUが符号化される場合、イントラ予測処理ユニット166は、PUのための予測ブロックを生成するためにイントラ予測を行い得る。イントラ予測処理ユニット166は、空間的に隣接するPUの予測ブロックに基づいてPUのための予測ルーマブロック、予測Cbブロックおよび予測Crブロックを生成するためにイントラ予測モードを使用し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいてPUのためのイントラ予測モードを決定し得る。
[00153] ブロック復号ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを構成し得る。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150はPUのための動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUのための1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUのための1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUのための予測ルーマブロック、予測Cbブロックおよび予測Crブロックを生成し得る。
[00154] 再構成ユニット158は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックを再構成するために、適用可能なとき、CUのTUに関連付けられたルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロック、並びにCUのPUの予測ルーマブロック、予測Cbブロックおよび予測Crブロック、すなわち、イントラ予測データまたはインター予測データのいずれかを使用し得る。例えば、再構成ユニット158は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックを再構成するために、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロックのサンプルを、予測ルーマブロック、予測Cbブロックおよび予測Crブロックの対応するサンプルに加算し得る。
[00155] フィルタユニット160は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックに関連付けられたブロッキングアーティファクトを低減するためにデブロッキング演算を行い得る。ビデオデコーダ30は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックを復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを与え得る。例えば、ビデオデコーダ30は、復号ピクチャバッファ162中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測演算またはインター予測演算を行い得る。
[00156] 本開示の様々な例によれば、ビデオデコーダ30は、パレットベースコーディングを行うように構成され得る。パレットベース復号ユニット165は、例えば、パレットベース復号モードが、例えば、CUまたはPUのために選択されるとき、パレットベース復号を行い得る。例えば、パレットベース復号ユニット165は、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセルロケーションをパレット中のエントリに関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、パレット中の選択されたピクセル値に基づいてブロックのピクセル値を再構成するように構成され得る。様々な機能が、パレットベース復号ユニット165によって行われるものとして説明されたが、そのような機能の一部または全部は、他の処理ユニット、または異なる処理ユニットの組合せによって行われ得る。
[00157] パレットベース復号ユニット165は、パレットコーディングモード情報を受信し、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上記の動作を行い得る。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または他のモード情報が異なるモードの使用を示すとき、パレットベース復号ユニット165は、例えば、HEVCインター予測またはイントラ予測コーディングモードなど、非パレットベースコーディングモードを使用してビデオデータのブロックを復号する。ビデオデータのブロックは、例えば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。パレットベースコーディングモードは、複数の異なるパレットベースコーディングモードのうちの1つを備え得るか、または単一のパレットベースコーディングモードがあり得る。
[00158] 本開示の態様によれば、パレットベース復号ユニット165は、本明細書で説明されるパレットコーディングのための技法の任意の組合せを行うように構成され得る。エンコーダ20に関して上記で説明されたパレットコーディングの詳細は、デコーダ30に関してここで繰り返されないが、デコーダ30は、エンコーダ20に関して本明細書で説明されるパレットベース符号化プロセスに対する逆のパレットベース復号プロセスを行い得ることを理解されたい。
[00159] 図4は、本開示の技法に従って、ビデオデータをコーディングするためのパレットを決定することの一例を示す概念図である。図4の例は、第1のパレット184に関連付けられる第1のPAL(パレット)コーディングユニット(CU)180と第2のパレット192に関連付けられる第2のPAL CU188とを有するピクチャ178を含む。以下でより詳細に説明されるように、および本開示の技法によれば、第2のパレット192は第1のパレット184に基づく。ピクチャ178は、イントラ予測コーディングモードを用いてコーディングされるブロック196と、インター予測コーディングモードを用いてコーディングされるブロック200とをも含む。
[00160] 図4の技法は、ビデオエンコーダ20(図1および図2)とビデオデコーダ30(図1および図3)のコンテキストにおいて、説明の目的でHEVCビデオコーディング規格に関して、説明される。しかしながら、本開示の技法はこのように限定されず、他のビデオコーディングプロセスおよび/または規格において他のビデオコーディングプロセッサおよび/またはデバイスによって適用され得ることを、理解されたい。
[00161] 概して、パレットは、現在コーディングされているCU、図4の例ではCU188について支配的である、および/またはそのCUを表現する、いくつかのピクセル値を指す。(インデックス184と呼ばれることもある)第1のパレット184および(インデックス192と呼ばれることもある)第2のパレット192は、(複数のインデックスと呼ばれることもある)複数のパレットを含むものとして示される。いくつかの例では、本開示の態様によれば、(ビデオエンコーダ20またはビデオデコーダ30などの)ビデオコーダは、CUの各色成分について別々にパレット(例えば、インデックス)をコーディングし得る。例えば、ビデオエンコーダ20は、CUのルーマ(Y)成分のためのパレットと、CUのクロマ(U)成分のための別のパレットと、CUのクロマ(V)成分のためのまた別のパレットとを符号化し得る。この例では、YパレットのエントリはCUのピクセルのY値を表し得、UパレットのエントリはCUのピクセルのU値を表し得、VパレットのエントリはCUのピクセルのV値を表し得る。
[00162] 他の例では、ビデオエンコーダ20は、CUの全ての色成分について単一のパレットを符号化し得る。この例では、ビデオエンコーダ20は、Yiと、Uiと、Viとを含む、トリプル値であるi番目のエントリを有するパレットを符号化し得る。この場合、パレットは、ピクセルの成分の各々についての値を含む。従って、複数の個々のパレットを有するパレットのセットとしてのパレット184および192の表現は、一例にすぎず、限定することは意図されない。
[00163] 図4の例では、第1のパレット184は、それぞれ、エントリインデックス値1、エントリインデックス値2、およびエントリインデックス値3を有する3つのエントリ202〜206を含む。第1のパレット184は、インデックス値(例えば、第1のパレット184の左列に示される値)をピクセル値に関係付ける。例えば、図4に示されるように、第1のパレット184のうちの1つは、それぞれ、インデックス値1、2、および3をピクセル値A、B、およびCに関係付ける。本明細書で説明されるように、第1のCU180の実際のピクセル値をコーディングするのではなく、(ビデオエンコーダ20またはビデオデコーダ30などの)ビデオコーダは、(インデックス値1〜3として表されることもある)インデックス1〜3を使用してブロックのピクセルをコーディングするためにパレットベースコーディングを使用し得る。すなわち、第1のCU180の各ピクセル位置について、ビデオエンコーダ20はピクセルについてのインデックス値を符号化し得、インデックス値は、第1のパレット184のうちの1つまたは複数の中のピクセル値に関連付けられる。ビデオデコーダ30は、ビットストリームからインデックス値を取得し、インデックス値と第1のパレット184のうちの1つまたは複数とを使用してピクセル値を再構成し得る。従って、第1のパレット184は、パレットベース復号におけるビデオデコーダ30による使用のために、符号化ビデオデータビットストリーム中でビデオエンコーダ20によって送信される。
[00164] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、第1のパレット184に基づいて第2のパレット192を決定し得る。例えば、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数のブロックの位置を特定し得、そのブロックから、予測パレット、この例では第1のパレット184が決定される。図4に示される例など、いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、第2のCU188のための予測パレットを決定するとき、左の隣接CU(第1のCU180)など、前にコーディングされたCUの位置を特定し得る。
[00165] 図4の例では、第2のパレット192は、それぞれ、エントリインデックス値1、エントリインデックス値2、およびエントリインデックス値3を有する3つのエントリ208〜212を含む。第2のパレット192は、インデックス値(例えば、第1のパレット192の左列に示される値)をピクセル値に関係付ける。例えば、図4に示されるように、第2のパレット192のうちの1つは、それぞれ、インデックス値1、2、および3をピクセル値A、B、およびDに関係付ける。この例では、ビデオエンコーダ20は、第1のパレット184のどのエントリが第2のパレット192中に含まれるかを示す1つまたは複数のシンタックス要素をコーディングし得る。図4の例では、1つまたは複数のシンタックス要素は、ベクトル216として示される。ベクトル216は、いくつかの関連するビン(またはビット)を有し、各ビンは、そのビンに関連付けられたパレット予測子が現在パレットのエントリを予測するために使用されるかどうかを示す。例えば、ベクトル216は、第1のパレット184の最初の2つのエントリ(202および204)が、第2のパレット192中に含まれる(ベクトル216中の「1」の値)が、第1のパレット184の第3のエントリが、第2のパレット192中に含まれない(ベクトル216中の「0」の値)ことを示す。図4の例では、ベクトルは、ブールベクトル(Boolean vector)である。
[00166] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレット予測を行うとき、(パレット予測子テーブルと呼ばれることもある)パレット予測子リストを決定し得る。パレット予測子リストは、現在ブロックをコーディングするためのパレットの1つまたは複数のエントリを予測するために使用される1つまたは複数の隣接ブロックのパレットからのエントリを含み得る。ビデオエンコーダ20およびビデオデコーダ30は、同様の方法でリストを構成し得る。ビデオエンコーダ20およびビデオデコーダ30は、パレット予測子リストのどのエントリが現在ブロックをコーディングするためのパレット中に含まれるべきかを示すために、(ベクトル216などの)データをコーディングし得る。
[00167] 図5は、本開示の技法に従って、ピクセルのブロックについてのパレットへのインデックスを決定することの一例を示す概念図である。例えば、図5は、パレット244のエントリへのインデックス値(例えば、値1、2、および3)に関連付けられたピクセルのそれぞれの位置に関係するインデックス値を含む、(マップ240またはインデックスマップ240と呼ばれることもある)インデックスブロック240を含む。
[00168] インデックスブロック240は、各ピクセル位置についてのインデックス値を含むものとして図5の例に示されるが、他の例では、全てのピクセル位置が、ピクセル値をパレット244のエントリに関係付けるインデックス値に関連付けられ得るとは限らないことを理解されたい。すなわち、上述のように、いくつかの例では、ビデオエンコーダ20は、ピクセル値がパレット244中に含まれない場合、インデックスブロック240中の位置についての実際のピクセル値(またはそれの被量子化バージョン)の指示を符号化し得る(および、ビデオデコーダ30は、符号化ビットストリームからその指示を取得し得る)。
[00169] いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、どのピクセル位置がどのインデックス値に関連付けられるかを示す追加のマップをコーディングするように構成され得る。例えば、インデックスブロック240中の(i,j)のエントリがCUの(i,j)の位置に対応すると仮定する。ビデオエンコーダ20は、エントリが、関連付けられたインデックス値を有するかどうかを示す、インデックスブロックの各エントリ(すなわち、各ピクセル位置)のための1つまたは複数のシンタックス要素を符号化し得る。例えば、ビデオエンコーダ20は、CU中の(i,j)のロケーションにおけるピクセル値がパレット244中の値のうちの1つであることを示すために、1の値を有するフラグを符号化し得る。
[00170] ビデオエンコーダ20は、そのような例では、(244として図5の例に示される)パレットをも符号化し得る。パレット244が単一のエントリと関連するピクセル値とを含む事例では、ビデオエンコーダ20は、インデックス値のシグナリングをスキップし得る。ビデオエンコーダ20は、CU中の(i,j)のロケーションにおけるピクセル値がパレット244中の値のうちの1つではないことを示すために、0の値を有するようにフラグを符号化し得る。この例では、ビデオエンコーダ20はまた、ピクセル値を再構成する際にビデオデコーダ30によって使用するために、ピクセル値の指示を符号化し得る。いくつかの事例では、ピクセル値は不可逆様式でコーディングされ得る。
[00171] CUの1つの位置におけるピクセルの値は、CUの他の位置における1つまたは複数の他のピクセルの値の指示を与え得る。例えば、CUの隣接ピクセル位置が、同じピクセル値を有するか、または(2つ以上のピクセル値が単一のインデックス値にマッピングされ得る、不可逆コーディングの場合)同じインデックス値にマッピングされ得る確率が比較的高くなり得る。
[00172] 従って、ビデオエンコーダ20は、同じピクセル値またはインデックス値を有する所与の走査順序での連続するピクセルまたはインデックス値の数を示す1つまたは複数のシンタックス要素を符号化し得る。上述のように、同様の値のピクセル値またはインデックス値のストリングは、本明細書では「ラン」と呼ばれることがある。説明の目的のための一例では、所与の走査順序での2つの連続するピクセルまたはインデックスが異なる値を有する場合、ランは0に等しい。所与の走査順序での2つの連続するピクセルまたはインデックスが同じ値を有するが、その走査順序での3番目のピクセルまたはインデックスが異なる値を有する場合、ランは1に等しい。同じ値をもつ3つの連続するインデックスまたはピクセルでは、ランは2であり、以下同様である。ビデオデコーダ30は、符号化ビットストリームからランを示すシンタックス要素を取得し、同じピクセル値またはインデックス値を有する連続するロケーションの数を決定するためにそのデータを使用し得る。
[00173] 本開示の技法によるいくつかの例では、エントロピー符号化ユニット118およびエントロピー復号ユニット150は、インデックスブロック240をエントロピーコーディングするように構成され得る。例えば、符号化ユニット118およびエントロピー復号ユニット150は、パレットモードにおけるインデックスブロックに関係するランレングス(例えば、ランレングス値またはランレングスコード)および/またはバイナリパレット予測ベクトルをエントロピーコーディングするように構成され得る。
[00174] 図6は、本開示の技法に従って、ラスタ走査順序の一例を仮定して最大コピーアバブランレングスを決定することの一例を示す概念図である。図6の例では、破線280によって囲まれるピクセルのいずれもエスケープサンプルとしてコーディングされない場合、最大可能ランレングスは35(すなわち影なしピクセル位置の数)である。破線280内のピクセルのうちの1つまたは複数がエスケープサンプルとしてコーディングされる場合、エスケープピクセルとしてマークされるピクセル(「X」のピクセル位置)が走査順序での破線280内の第1のエスケープピクセルであると仮定すると、最大可能コード化コピーアバブランレングスは5である。
[00175] いくつかの例では、ビデオデコーダ30は、破線280内のピクセルのためのランモード(例えば、ピクセルがコーディングされるパレットモード)のみを決定し得る。従って、最悪の場合、ビデオデコーダ30は、BlockWidth−1個のピクセルに対する決定を行う。いくつかの例では、ビデオデコーダ30は、ランモードが検査されるピクセルの数の最大値に関するいくつかの制限を実施するように構成され得る。例えば、ビデオデコーダ30は、ピクセルが現在ピクセルと同じ行中にある場合、破線280内のピクセルのみを検査し得る。ビデオデコーダ30は、破線280内の全ての他のピクセルがエスケープサンプルとしてコーディングされないと推論し得る。図6の例は、ラスタ走査順序を仮定する。但し、本技法は、垂直、水平トラバース、垂直トラバースなどの他の走査順序に適用され得る。
[00176] 図7は、本開示の技法に従ってビデオデータを符号化するための例示的なプロセスを示すフローチャートである。図7のプロセスは、概して、説明の目的でビデオエンコーダ(例えば、ビデオエンコーダ20)によって行われるものとして説明されるが、様々な他のプロセッサも、図7に示されるプロセスを行い得る。いくつかの例では、ブロック符号化ユニット100、パレットベース符号化ユニット122、および/またはエントロピー符号化ユニット118は、図7に示される1つまたは複数のプロセスを行い得る。
[00177] 図7の例では、ビデオエンコーダ(例えば、ビデオエンコーダ20)は、サイズを有するビデオデータのブロックを受信するように構成され得る(700)。ビデオエンコーダは、ビデオデータのブロックのサイズを決定するように構成され得る(702)。ビデオエンコーダは、ビデオデータのブロックの決定されたサイズに基づいて、ビデオデータのブロックのためのパレットモード符号化を無効化するように構成され得る(704)。
[00178] いくつかの例では、ビデオエンコーダは、パレットモード符号化を、第2のサイズよりも小さい第1のサイズを有するビデオデータのブロックに制限するように構成され得る。いくつかの例では、第1のサイズは32×32であり得る。いくつかの例では、第2のサイズは64×64であり得る。そのような例では、ビデオエンコーダは、パレットモードを、64×64よりも小さい第1のサイズを有するビデオデータのブロックに制限するように構成され得る。いくつかの例では、第1のサイズは32×32であり得、第2のサイズは64×64であり得る。
[00179] いくつかの例では、ビデオエンコーダは、パレットモード符号化を、ビデオデータのために指定された最大変換ユニットのサイズよりも小さいかまたはそれに等しい第1のサイズを有するビデオデータのブロックに制限するように構成され得る。最大変換ユニットのサイズは32×32であり得る。そのような例では、ビデオエンコーダは、パレットモードコーディングを、32×32よりも小さいかまたはそれに等しい第1のサイズを有するビデオデータのブロックに制限するように構成され得る。
[00180] いくつかの例では、ビデオエンコーダは、ビデオデータのブロックを複数の4×4サブブロックに分割するように構成され得る。そのような例では、ビデオエンコーダは、パレットモードを使用して、複数の4×4サブブロックを符号化するように構成され得る。
[00181] いくつかの例では、ビデオエンコーダは、パレットモード符号化におけるランレングス値が最大ランレングス値に制限されない場合のみ、パレットモード符号化が、ビデオデータのブロックの決定されたサイズに基づいて、ビデオデータのブロックのために無効化されるように、パレットモード符号化におけるランレングス値を最大ランレングス値に制限するように構成され得る。一例では、最大ランレングス値は32×32−1である。別の例では、最大ランレングスは最大変換ユニットのサイズに基づく。この例では、最大変換ユニットのサイズが32×32である場合、最大ランレングスは、32×32−1など、32×32よりも小さくなり得る。別の例では、最大ランレングスは最大変換ユニット中の係数の数に基づく。
[00182] 本明細書で説明された技法の全てが、個々にまたは組合せで使用され得ることを理解されたい。例えば、ビデオエンコーダ20および/またはそれの1つまたは複数の構成要素並びにビデオデコーダ30および/またはそれの1つまたは複数の構成要素は、本開示で説明される技法を任意の組合せで行い得る。
[00183] 上記例に応じて、本明細書で説明された技法のうちのいずれかのいくつかの行為またはイベントが、異なるシーケンスで行われ得、追加、マージ、または完全に除外され得る(例えば、全ての説明された行為またはイベントが本技法の実施のために必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、連続的にではなく、例えば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して同時に行われ得る。さらに、本開示のいくつかの態様は、明快のために単一のモジュールまたはユニットによって行われるものとして説明されたが、本開示の技法は、ビデオコーダに関連付けられたユニットまたはモジュールの組合せによって行われ得ることを理解されたい。
[00184] 本開示のいくつかの態様は、説明の目的で、開発中のHEVC規格に関して説明された。但し、本開示で説明された技法は、まだ開発されていない他の規格またはプロプライエタリビデオコーディングプロセスを含む、他のビデオコーディングプロセスのために有用であり得る。
[00185] 上記で説明された技法は、その両方が一般にビデオコーダと呼ばれることがある、ビデオエンコーダ20(図1および図2)および/またはビデオデコーダ30(図1および図3)によって行われ得る。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。
[00186] 本開示によれば、コンテキストが別段に規定しない場合、「または」という用語は「および/または」として割り込まれ得る。さらに、「1つまたは複数の」または「少なくとも1つの」などの句が、本明細書で開示されるいくつかの特徴のために使用され、他の特徴のために使用されていないことがあるが、そのような言い回しがそれのために使用されなかった特徴は、コンテキストが別段に規定しない場合、そのような暗示される意味を有するものと解釈され得る。
[00187] 技法の様々な態様の特定の組合せが上記で説明されたが、これらの組合せは、本開示で説明された技法の例を示すために与えられたにすぎない。従って、本開示の技法は、これらの例示的な組合せに限定されるべきでなく、本開示で説明された技法の様々な態様の任意の考えられる組合せを包含し得る。
[00188] 1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実施され得る。ソフトウェアで実施される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得るか、または、例えば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実施のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
[00189] 限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。例えば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。但し、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[00190] 命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。従って、本明細書で使用される「プロセッサ」という用語は、上記の構造、または本明細書で説明された技法の実施に好適な他の構造のいずれかを指し得る。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用ハードウェアおよび/またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素で十分に実施され得る。
[00191] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(例えば、チップセット)を含む、多種多様なデバイスまたは装置で実施され得る。本開示では、開示される技法を行うように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが説明されたが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明されたように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
[00192] 様々な例が本明細書で説明された。説明されたシステム、動作、機能、または例の任意の組合せが企図される。これらおよび他の例は以下の特許請求の範囲内に入る。
[00192] 様々な例が本明細書で説明された。説明されたシステム、動作、機能、または例の任意の組合せが企図される。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[C1] ビデオデータを符号化する方法であって、前記方法が、
サイズを有するビデオデータのブロックを受信することと、
ビデオデータの前記ブロックの前記サイズを決定することと、
ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化することとを備える、方法。
[C2] パレットモード符号化を、第2のサイズよりも小さい第1のサイズを有するビデオデータの任意のブロックに制限することをさらに備える、C1に記載の方法。
[C3] 前記第2のサイズが64×64である、C2に記載の方法。
[C4] 前記第1のサイズが32×32である、C2に記載の方法。
[C5] 前記第1のサイズが32×32であり、前記第2のサイズが64×64である、C2に記載の方法。
[C6] パレットモード符号化を、最大変換ユニットのサイズよりも小さいかまたはそれに等しい第1のサイズを有するビデオデータの任意のブロックに制限することをさらに備える、C1に記載の方法。
[C7] 前記最大変換ユニットの前記サイズが32×32である、C6に記載の方法。
[C8] ビデオデータの前記ブロックを複数の4×4サブブロックに分割することと、
パレットモードを使用して、前記複数の4×4サブブロックを符号化することとをさらに備える、C1に記載の方法。
[C9] パレットモード符号化における任意のランレングス値を最大ランレングス値に制限することをさらに備える、C1に記載の方法。
[C10] ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化することは、パレットモードコーディングにおける前記ランレングス値が前記最大ランレングス値に制限されない場合のみ、パレットモード符号化を無効化することを備える、C9に記載の方法。
[C11] 前記最大ランレングスが最大変換ユニットのサイズに基づく、C9に記載の方法。
[C12] 前記最大ランレングス値が前記最大変換ユニットの前記サイズよりも小さい、C9に記載の方法。
[C13] 前記最大ランレングス値が32×32−1である、C12に記載の方法。
[C14] ビデオデータを符号化するためのデバイスであって、前記デバイスが、
前記ビデオデータを記憶するように構成されたメモリと、
前記メモリと通信しているビデオエンコーダとを備え、前記ビデオエンコーダが、
前記メモリからサイズを有するビデオデータのブロックを受信することと、
ビデオデータの前記ブロックの前記サイズを決定することと、
ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化することとを行うように構成された、デバイス。
[C15] 前記ビデオエンコーダが、
パレットモード符号化を、第2のサイズよりも小さい第1のサイズを有するビデオデータの任意のブロックに制限するように構成された、C14に記載のデバイス。
[C16] 前記第2のサイズが64×64である、C15に記載のデバイス。
[C17] 前記第1のサイズが32×32である、C15に記載のデバイス。
[C18] 前記第1のサイズが32×32であり、前記第2のサイズが64×64である、C15に記載のデバイス。
[C19] 前記ビデオエンコーダが、
パレットモード符号化を、最大変換ユニットのサイズよりも小さいかまたはそれに等しい第1のサイズを有するビデオデータの任意のブロックに制限するように構成された、C14に記載のデバイス。
[C20] 前記最大変換ユニットの前記サイズが32×32である、C19に記載のデバイス。
[C21] 前記ビデオエンコーダが、
ビデオデータの前記ブロックを複数の4×4サブブロックに分割することと、
パレットモードを使用して、前記複数の4×4サブブロックを符号化することとを行うように構成された、C14に記載のデバイス。
[C22] 前記ビデオエンコーダが、
パレットモード符号化における任意のランレングス値を最大ランレングス値に制限するように構成された、C14に記載のデバイス。
[C23] 前記ビデオエンコーダは、パレットモード符号化における前記ランレングス値が前記最大ランレングス値に制限されない場合のみ、ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化するように構成された、C22に記載のデバイス。
[C24] 前記最大ランレングスが最大変換ユニットのサイズに基づく、C22に記載のデバイス。
[C25] 前記最大ランレングス値が前記最大変換ユニットの前記サイズよりも小さい、C22に記載のデバイス。
[C26] 前記最大ランレングス値が32×32−1である、C25に記載のデバイス。
[C27] ビデオデータを符号化するための装置であって、前記装置が、
サイズを有するビデオデータのブロックを受信するための手段と、
ビデオデータの前記ブロックの前記サイズを決定するための手段と、
ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化するための手段とを備える、装置。
[C28] パレットモード符号化を、第2のサイズよりも小さい第1のサイズを有するビデオデータの任意のブロックに制限するための手段をさらに備える、C27に記載の装置。
[C29] 前記第2のサイズが64×64である、C28に記載の装置。
[C30] 前記第1のサイズが32×32である、C28に記載の装置。
[C31] 前記第1のサイズが32×32であり、前記第2のサイズが64×64である、C28に記載の装置。
[C32] パレットモード符号化を、最大変換ユニットのサイズよりも小さいかまたはそれに等しい第1のサイズを有するビデオデータの任意のブロックに制限するための手段をさらに備える、C27に記載の装置。
[C33] 前記最大変換ユニットの前記サイズが32×32である、C32に記載の装置。
[C34] ビデオデータの前記ブロックを複数の4×4サブブロックに分割するための手段と、
パレットモードを使用して、前記複数の4×4サブブロックを符号化するための手段とをさらに備える、C27に記載の装置。
[C35] パレットモード符号化における任意のランレングス値を最大ランレングス値に制限するための手段をさらに備える、C27に記載の装置。
[C36] ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化するための手段は、パレットモードコーディングにおける前記ランレングス値が前記最大ランレングス値に制限されない場合のみ、パレットモード符号化を無効化するための手段を備える、C35に記載の装置。
[C37] 前記最大ランレングスが最大変換ユニットのサイズに基づく、C35に記載の装置。
[C38] 前記最大ランレングス値が前記最大変換ユニットの前記サイズよりも小さい、C35に記載の装置。
[C39] 前記最大ランレングス値が32×32−1である、C38に記載の装置。
[C40] 実行されたとき、1つまたは複数のプロセッサに、
サイズを有するビデオデータのブロックを受信することと、
ビデオデータの前記ブロックの前記サイズを決定することと、
ビデオデータの前記ブロックの前記決定されたサイズに基づいて、ビデオデータの前記ブロックのためのパレットモード符号化を無効化することとを行わせる命令を記憶した非一時的コンピュータ可読記憶媒体。