[0028]本開示は、ビデオコーディングおよび圧縮のための技法を含む。具体的には、本開示は、ビデオデータのパレットベースのコーディングのための技法を説明する。従来のビデオコーディングでは、画像は、色調が連続的であり空間的に滑らかであると仮定される。これらの仮定に基づいて、ブロックベースの変換、フィルタリングなどのような様々なツールが開発されており、そのようなツールは、自然のコンテンツのビデオに対しては良好な性能を示している。
[0029]ただし、リモートデスクトップ、協調作業、およびワイヤレスディスプレイのような用途では、コンピュータにより生成されたスクリーンコンテンツ(たとえば、テキストまたはコンピュータグラフィックスのような)は、圧縮されるべき主要なコンテンツであり得る。このタイプのコンテンツは、不連続な色調を有し、鋭利な線と高コントラストのオブジェクト境界とを特徴とする傾向がある。連続的な色調および滑らかさという仮定はもはやスクリーンコンテンツに対しては当てはまらないことがあるので、従来のビデオコーディング技法は、スクリーンコンテンツを含むビデオデータを圧縮するための効率的な方法ではないことがある。
[0030]本開示は、スクリーンにより生成されたコンテンツのコーディングに特に好適であり得る、パレットベースのコーディングを説明する。たとえば、ビデオデータの特定のエリアが比較的少数の色を有し、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)が、特定のエリアのビデオデータを表すためのいわゆる「パレット」を形成し得ると仮定する。パレットは、特定のエリア(たとえば、所与のブロック)のビデオデータを表す色またはピクセル値のテーブルとして表され得る。たとえば、パレットは、所与のブロック中の最も支配的なピクセル値を含み得る。いくつかの場合、最も支配的なピクセル値は、ブロック内で最も頻繁に現れる1つまたは複数のピクセル値を含み得る。さらに、いくつかのケースでは、ビデオコーダが、あるピクセル値がブロック中の最も支配的なピクセル値の1つとして含まれるべきかどうかを決定するために、閾値を適用し得る。パレットベースのコーディングの様々な態様によると、ビデオコーダは、ビデオデータの現在のブロックについて実際のピクセル値またはそれらの残差をコーディングするのではなく、現在のブロックのピクセル値のうちの1つまたは複数を示すインデックス値をコーディングし得る。パレットベースのコーディングのコンテキストにおいて、インデックス値は、現在のブロックの個々のピクセル値を表すのに使われる、パレット中のそれぞれのエントリを示す。
[0031]たとえば、ビデオエンコーダは、ブロックのためのパレットを決定し(たとえば、パレットを明示的にコーディングする、パレットを予測する、またはこれらの組合せ)、ピクセル値の1つまたは複数を表すためのパレット中のエントリを見つけ、ブロックのピクセル値を表すために使用されるパレット中のエントリを示すインデックス値を伴うブロックを符号化することによって、ビデオデータのブロックを符号化することができる。いくつかの例では、ビデオエンコーダは、符号化ビットストリーム中でパレットおよび/またはインデックス値をシグナリングすることができる。さらに、ビデオデコーダは、符号化ビットストリームから、ブロックのためのパレットと、さらにはブロックの個々のピクセルのインデックス値とを取得することができる。ビデオデコーダは、ブロックの様々なピクセル値を再構築するために、ピクセルのインデックス値をパレットのエントリに関連付けることができる。
[0032]ビデオデータのパレットベースのコーディングについて、上で詳細に説明した。パレットベースのコーディングの基本的な考えは、各CU用に、現在のCU中の最も支配的なピクセル値を備える(およびそれらからなる)パレットが導出されるというものである。パレットのサイズおよび要素は最初に、ビデオエンコーダからビデオデコーダに送信される。その後、CU中のピクセル値は、一定の走査順序に従って符号化される。CU中の各ピクセルロケーションについて、フラグ、たとえば、palette_flagが、ピクセル値がパレット中に含まれる(すなわち、「ランモード」)か、それとも含まれない(すなわち、「ピクセルモード」)かを示すために最初に送信される。「ランモード」では、CU中のピクセルロケーションに関連付けられたパレットインデックスがシグナリングされ、その後にピクセル値の「ラン」が続く。palette_flagもパレットインデックスも、「ラン」によって包含される後続のピクセルロケーションについて送信される必要はなく、というのは、それらがすべて同じピクセル値を有するからである。「ピクセルモード」では、ピクセル値は、CU中の所与のピクセルロケーションについて送信される。
[0033]各CU用に、現在のCU中の最も支配的なピクセル値からなる主要カラーテーブルが導出される。テーブルのサイズおよび要素は最初に送信される。主要カラーテーブルのサイズおよび/または要素は、直接コーディングされるか、または隣接CU(たとえば、上および/もしくは左のコード化CU)中の主要カラーテーブルのサイズおよび/もしくは要素を使って予測符号化され得る。
[0034]いくつかの例では、現在のCU中のピクセルの各々は、1つの主要カラーテーブルインデックスにマップされる。主要カラーインデックスが存在しないピクセルについては、特殊インデックス(「他のインデックス」と名付けられる)が割り当てられ、これらのピクセルは「エスケープトピクセル」と呼ばれる。本開示の技法は、主要カラーインデックスのコーディング方法に焦点を当てる。
[0035]「エスケープピクセル」は、たとえば固定長コーディング、単項コーディングなど、どの既存のエントロピーコーディング方法を使ってコーディングされてもよい。エスケープ値を符号化するための方法は、量子化パラメータ(QP)値に依存して、左シフト演算を使っている。つまり、QP値に依存するビットの数である最上位ビットのみを符号化する。その目的のために、最先端技術において使われる戦略は、各QPを、ピクセル値に適用されるべき右シフトである数にマップするテーブルを使うものである。
[0036]主要カラーインデックスのブロックは、一行ごとにコーディングされる。各行について、行モードが「水平」、「垂直」、および「通常」から選ばれる。「水平」行モードが選ばれた場合、現在の行中のインデックスはすべて、上の行中の最も左のインデックスの最も左のインデックスと同じである。「垂直」行モードが選ばれた場合、行全体が、1つ上の行からコピーされる。「通常」モードが選択された場合、現在の行内のインデックスが1つずつコーディングされる。このケースにおける各インデックスについて、シンタックス要素が、インデックスが、上の行中のコロケートされたインデックスから(「copy_from_top」)、それともインデックスの左隣インデックスから(「copy_from_left」)コピーされ得るか、またはどのコピーも可能でない(「no_copy」)かを示すのに使われる。どのコピーも可能でない場合、ピクセルは直接コーディングされる。
[0037]上の例は、パレットベースのコーディングの全般的な説明を与えることが意図されている。様々な例では、本開示で説明される技法は、パレットベースのコーディングモードによって形成された符号化ビデオデータをシグナリングすること、パレットを送信すること、パレットを予測すること、パレットを導出すること、またはパレットベースのコーディングマップおよび他のシンタックス要素からのビデオデータを復号することのうちの、1つまたは複数の様々な組合せのための技法を含み得る。そのような技法は、ビデオコーディングの効率を改善することができ、たとえば、スクリーンにより生成されたコンテンツを表すためにより少数のビットしか必要としない。
[0038]本開示は、パレットベースのビデオコーディングに関連した様々な技法について記載する。いくつかの態様において、本開示は、ビデオブロックに関連付けられたパレットが1つのエントリまたは色を含むだけであり、ビデオブロックがどのエスケープピクセルも含まないとき、ビデオブロックについてのインデックス値のマップをコーディングすることをバイパスすることを対象とする。いくつかの態様において、本開示は、量子化パラメータ値とパレット誤差限界との間の関係を記憶するマッピングテーブルを使って、対応するパレット内に含まれ得る固定ピクセル値からの最大偏差を示すパレット「誤差限界」を導出することを対象とする。本開示のいくつかの態様は、対応するカラーチャネルにおける従来の係数コーディング用に使われる量子化パラメータを使って、エスケープピクセル(または関連付けられた予測誤差)の量子化および量子化解除のための量子化パラメータ(QP)を導出することを対象とする。さらに、本開示は、パレットベースのコード化エリア中に含まれるピクセルがエスケープピクセルであるかどうかを示すためのフラグの使用について記載する。本開示の態様は、右シフト演算を利用する技法など、エスケープピクセル値を量子化するための技法についても記載する。
[0039]いくつかの態様において、本開示は、エスケープピクセル用の量子化パラメータ値に基づくマップ関数(たとえば、シフト関数)に従って、パレットコード化ブロックのエスケープピクセルを量子化することを対象とする。いくつかの態様において、本開示は、パレットコード化ブロックのピクセルがエスケープピクセルであるかどうかを示し、および/または決定するためのフラグを使うことを対象とする。
[0040]本開示のいくつかの例では、ビデオデータのパレットベースのコーディングのための技法は、ビデオデータのインター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、下でより詳細に説明されるように、エンコーダまたはデコーダ、または複合エンコーダ−デコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディングと、さらにはパレットベースのコーディングとを実施するように構成され得る。いくつかの例では、パレットベースのコーディング技法は、高効率ビデオコーディング(HEVC)の1つまたは複数のコーディングモードにおいて使用するために構成され得る。他の例では、パレットベースのコーディング技法は、独立して、または他の既存もしくは将来のシステムもしくは規格の一部として使用され得る。
[0041]高効率ビデオコーディング(HEVC)は、ITU−Tビデオコーディングエキスパートグループ(VCEG)およびISO/IECモーションピクチャエキスパートグループ(MPEG)のビデオコーディング共同研究部会(JCT−VC)によって開発された新しいビデオコーディング規格である。「WD10」の「HEVC Draft 10」と呼ばれるHEVC規格の最近のドラフトは、文書JCTVC−L1003v34、Brossら、「High Efficiency Video Coding (HEVC) Text Specification Draft 10(FDIS & Last Callに対して)」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11のビデオコーディング共同研究部会(JCT−VC)、第12回会合:ジュネーブ、CH、2013年1月14日〜23日に記載されており、http://phenix.int−evry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC−L1003−v34.zipから入手可能である。確定した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月として公開されている。
[0042]HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいて予測ユニット(PU)モードとして使われるように構成され得る。したがって、CUモードの状況において説明される以下の開示されるプロセスのすべてが、追加で、または代替的に、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0043]図1は、本開示の技法を利用することができる例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指し得る。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実施するように構成され得るデバイスの例を表す。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUのような、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースのコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。
[0044]図1に示すように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化ビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれ得る。宛先デバイス14は、ソースデバイス12によって生成された符号化ビデオデータを復号することができる。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれ得る。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0045]ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンのような電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備え得る。
[0046]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化ビデオデータを受信することができる。チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動させることが可能な、1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12がリアルタイムで符号化ビデオデータを直接宛先デバイス14に送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って、符号化ビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などのワイヤレスおよび/もしくはワイヤード通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などの、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0047]別の例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化ビデオデータを記憶するための他の適切なデジタル記憶媒体など、種々のローカルにアクセスされるデータ記憶媒体を含み得る。
[0048]さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶する、ファイルサーバまたは別の中間記憶デバイスを含む場合がある。この例では、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間記憶デバイスに記憶された符号化ビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶することと、符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
[0049]宛先デバイス14は、インターネット接続などの標準的なデータ接続を介して符号化ビデオデータにアクセスすることができる。例示的なタイプのデータ接続は、ファイルサーバに記憶されている符号化ビデオデータにアクセスするのに好適である、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、またはその両方の組合せを含み得る。ファイルサーバからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
[0050]本開示の技法は、ワイヤレス適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの、様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオテレフォニーなどの用途をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
[0051]図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間の任意のデータ通信を必ずしも含まないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データが、ローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータを符号化し、メモリに記憶し得、および/またはビデオ復号デバイスはメモリからデータを取り出し、復号し得る。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって実施される。
[0052]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、たとえばビデオカメラ、以前にキャプチャされたビデオデータを含むビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/もしくは、ビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
[0053]ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化することができる。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化ビデオデータを直接送信する。他の例では、符号化ビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために、記憶媒体またはファイルサーバ上に記憶され得る。
[0054]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して符号化ビデオデータを受信することができる。ディスプレイデバイス32は、宛先デバイス14に統合されることがあり、またはその外部にあることがある。一般に、ディスプレイデバイス32は復号ビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスを備え得る。
[0055]本開示は全般に、ビデオエンコーダ20が、ある情報をビデオデコーダ30のような別のデバイスに「シグナリングすること」または「送信すること」に言及することがある。「シグナリング」または「送信」という用語は、一般に、圧縮されたビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指し得る。そのような通信は、リアルタイムまたはほぼリアルタイムに起こり得る。代替的に、そのような通信は、符号化のときに符号化ビットストリームの中でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに起こり得るなど、ある時間の長さにわたって起こることがあり、これらの要素は次いで、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。したがって、ビデオデコーダ30は、ある情報を「受信する」ものとして呼ばれ得るが、情報の受信は、必ずしもリアルタイムまたはほぼリアルタイムで起こるとは限らず、記憶の後の何らかの時間に媒体から取り出されることがある。
[0056]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のいずれかとして実装され得る。本技法がソフトウェアで部分的に実装される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェア用の命令を記憶し、1つまたは複数のプロセッサを使用してその命令をハードウェア内で実行して、本開示の技法を実行することができる。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれもが、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、それらのうちのいずれかが、それぞれのデバイスの中で組み合わされたエンコーダ/デコーダ(CODEC)の一部として組み込まれてよい。
[0057]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上で言及されHEVCドラフト10に記載されるHEVC規格のような、ビデオ圧縮規格に従って動作する。基本的なHEVC規格に加えて、HEVCのためのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を作成するための作業が進行中である。加えて、たとえば本開示で説明されるような、パレットベースのコーディングモードは、HEVC規格の拡張のために提供され得る。いくつかの例では、パレットベースのコーディングのために本開示で説明される技法は、ITU−T−H.264/AVC規格または将来の規格のような、他のビデオコーディング規格に従って動作するように構成される、エンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースのコーディングモードの適用が、例として説明される。
[0058]HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは、一般に、一連のピクチャを含む。ピクチャは「フレーム」と呼ばれる場合もある。ピクチャは、SL、SCb、およびSCrと表記される3つのサンプルアレイを含む場合がある。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれる場合もある。他の事例では、ピクチャは、モノクロームであってよく、ルーマサンプルのアレイのみを含み得る。
[0059]ピクチャの符号化表現を生成するために、ビデオエンコーダ20は、コーディングツリーユニット(CTU)のセットを生成することができる。各CTUは、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするのに使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nのブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)とも呼ばれることがある。HEVCのCTUは、H.264/AVCのような、他の規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズには限定されず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスタ走査において連続的に順序付けられた整数個のCTUを含み得る。コード化スライスは、スライスヘッダとスライスデータとを備え得る。スライスのスライスヘッダは、スライスについての情報を提供するシンタックス要素を含むシンタックス構造であり得る。スライスデータは、スライスのコード化CTUを含み得る。
[0060]本開示は、サンプルの1つまたは複数のブロックのサンプルをコーディングするために使用される1つまたは複数のサンプルブロックおよびシンタックス構造を指すために、「ビデオユニット」または「ビデオブロック」または「ブロック」という用語を使用する場合がある。例示的なタイプのビデオユニットまたはブロックは、CTU、CU、PU、変換ユニット(TU)、マクロブロック、マクロブロック区分などを含み得る。いくつかのコンテキストでは、PUの説明は、マクロブロックまたはマクロブロック区分の説明と交換され得る。
[0061]コード化CTUを生成するために、ビデオエンコーダ20は、コーディングツリーブロックをコーディングブロックに分割するように、CTUのコーディングツリーブロックに対して4分木区分を再帰的に実施することができ、したがって「コーディングツリーユニット」という名称である。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、CbサンプルアレイおよびCrサンプルアレイ、ならびにコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造を有するピクチャの、ルーマサンプルの1つのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックであり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分することができる。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ルーマサンプルの予測ブロック、ピクチャのクロマサンプルの2つの対応する予測ブロック、および予測ブロックサンプルを予測するために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのために、予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成することができる。
[0062]ビデオエンコーダ20は、PUに関する予測ブロックを生成するためにイントラ予測またはインター予測を使用することができる。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。
[0063]ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために、単予測または双予測を使用し得る。ビデオエンコーダ20がPU用の予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有することができる。ビデオエンコーダ20が、PUのための予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
[0064]ビデオエンコーダ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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0065]さらに、ビデオエンコーダ20は、CUの残差ブロック(たとえば、ルーマ、Cb、およびCrの残差ブロック)を1つまたは複数の変換ブロック(たとえば、ルーマ、Cb、およびCrの変換ブロック)に分解するために、4分木区分化を使用することができる。変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連付けられ得る。TUに関連付けられたルーマ変換ブロックは、CUのルーマ残差ブロックのサブブロックであってよい。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであってよい。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであってよい。
[0066]ビデオエンコーダ20は、TUのための係数ブロックを生成するために、変換ブロックに1つまたは複数の変換を適用し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。たとえば、ビデオエンコーダ20は、TUについてのルーマ係数ブロックを生成するために、TUのルーマ変換ブロックに1回または複数回の変換を適用することができる。ビデオエンコーダ20は、TUのためのCb係数ブロックを生成するために、TUのCb変換ブロックに1つまたは複数の変換を適用し得る。ビデオエンコーダ20は、TUのためのCr係数ブロックを生成するために、TUのCr変換ブロックに1つまたは複数の変換を適用し得る。
[0067]係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後、ビデオエンコーダ20は、係数ブロックを量子化し得る。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現するプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後、ビデオエンコーダ20は、量子化された変換係数を示す符号化シンタックス要素をエントロピーすることができる。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実施することができる。ビデオエンコーダ20は、エントロピー符号化シンタックス要素をビットストリームの中に出力し得る。ビットストリームはまた、エントロピー符号化されないシンタックス要素を含み得る。
[0068]ビデオエンコーダ20は、エントロピー符号化シンタックス要素を含むビットストリームを出力することができる。ビットストリームは、コード化ピクチャおよび関連データの表現を形成するビットのシーケンスを含む場合がある。ビットストリームは、ネットワークアブストラクションレイヤ(NAL)ユニットのシーケンスを備える場合がある。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)をカプセル化する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含む場合がある。NALユニットのNALユニットヘッダによって規定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを包含するシンタックス構造であり得る。いくつかの事例では、RBSPは0ビットを含む。
[0069]異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化することができる。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)用のRBSPをカプセル化することができ、第2のタイプのNALユニットはコード化スライス用のRBSPをカプセル化することができ、第3のタイプのNALユニットは補足エンハンスメント情報(SEI)用のRBSPをカプセル化することができ、以下同様である。ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれ得る。
[0070]ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームからシンタックス要素を取得することができる。たとえば、ビデオデコーダ30は、ビットストリームを解析して、ビットストリームからシンタックス要素を復号することができる。ビデオデコーダ30は、ビットストリームから取得(たとえば、復号)されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構築することができる。ビデオデータを再構築するためのプロセスは、一般に、ビデオエンコーダ20によって実施されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、現在のCUのPUのための予測サンプルブロック(すなわち、予測ブロック)を決定するために、PUのMVを使用することができる。加えて、ビデオデコーダ30は、現在CUのTUに関連付けられた変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在のCUのTUと関連付けられる変換ブロックを再構築するために、変換係数ブロックに対して逆変換を実施することができる。ビデオデコーダ30は、現在のCUのPUのための予測サンプルブロックのサンプルを現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構築し得る。ピクチャの各CUのコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築することができる。
[0071]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングを実施するように構成され得る。たとえば、パレットベースのコーディングでは、上で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を実施するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色またはピクセル値のテーブルとして、いわゆるパレットをコーディングすることができる。このようにして、ビデオデータの現在のブロックの実際のピクセル値またはそれらの残差をコーディングするのではなく、ビデオコーダは、現在のブロックのピクセル値の1つまたは複数のためのインデックス値をコーディングすることができ、インデックス値は、現在のブロックのピクセル値を表すために使用されるパレット中のエントリを示す。
[0072]たとえば、ビデオエンコーダ20は、ブロックのためのパレットを決定し、ブロックの1つまたは複数の個々のピクセルの値を表す値を有するパレット中のエントリを見つけ、ブロックの1つまたは複数の個々のピクセル値を表すために使用されるパレット中のエントリを示すインデックス値を伴うブロックを符号化することによって、ビデオデータのブロックを符号化することができる。さらに、ビデオエンコーダ20は、符号化ビットストリーム中でインデックス値をシグナリングすることができる。さらに、ビデオ復号デバイス(たとえば、ビデオデコーダ30)は、符号化ビットストリームから、ブロックのためのパレット、ならびにパレットを使ってブロックの様々な個々のピクセルを決定するために使われるインデックス値を取得することができる。ビデオデコーダ30は、ブロックのピクセル値を再構築するために、個々のピクセルのインデックス値をパレットのエントリと突き合わせることができる。個々のピクセルに関連付けられたインデックス値が、ブロック用の対応するパレットのどのインデックス値とも一致しない事例において、ビデオデコーダ30は、そのようなピクセルを、パレットベースのコーディングの目的のために、エスケープピクセルとして識別し得る。
[0073]別の例では、ビデオエンコーダ20は、以下の動作に従って、ビデオデータのブロックを符号化し得る。ビデオエンコーダ20は、ブロックの個々のピクセルについての予測残差値を決定し、ブロックのためのパレットを決定し、個々のピクセルの予測残差値のうちの1つまたは複数のものの値を表す値を有する、パレット中のエントリ(たとえば、インデックス値)を突き止めることができる。さらに、ビデオエンコーダ20は、ブロックの各個々のピクセルについての対応する予測残差値を表すのに使われる、パレット中のエントリを示すインデックス値でブロックを符号化することができる。ビデオデコーダ30は、ソースデバイス12によってシグナリングされた符号化ビットストリームから、ブロックのためのパレット、ならびにブロックの個々のピクセルに対応する予測残差値のためのインデックス値を取得することができる。記載されるように、インデックス値は、現在のブロックに関連付けられたパレット中のエントリに対応し得る。さらに、ビデオデコーダ30は、ブロックの予測残差値を再構築するために、予測残差値のインデックス値をパレットのエントリと関連付けることができる。予測残差値は、ブロックのピクセル値を再構築するために、(たとえば、イントラ予測またはインター予測を使用して取得された)予測値に加算され得る。
[0074]以下でより詳細に説明されるように、パレットベースのコーディングの基本的な考えは、コーディングされるべきビデオデータの所与のブロックに対して、現在のブロック中の最も支配的なピクセル値を含むパレットを、ビデオエンコーダ20が導出し得るというものである。たとえば、パレットは、現在のCUに対して支配的である、および/またはそれを表すと決定または仮定される、いくつかのピクセル値を指し得る。ビデオエンコーダ20はまず、パレットのサイズと要素とをビデオデコーダ30に送信することができる。さらに、ビデオエンコーダ20は、ある走査順序に従って、所与のブロック中のピクセル値を符号化することができる。所与のブロック中に含まれる各ピクセルについて、ビデオエンコーダ20は、ピクセル値を、パレット中の対応するエントリにマップするインデックス値をシグナリングし得る。ピクセル値がパレット中に含まれない(すなわち、パレットコード化ブロックの特定のピクセル値を指定するパレットエントリが存在しない)場合、そのようなピクセルは「エスケープピクセル」と定義される。パレットベースのコーディングに従って、ビデオエンコーダ20は、エスケープピクセル用に予約されているインデックス値を符号化し、シグナリングすることができる。いくつかの例では、ビデオエンコーダ20は、所与のブロック中に含まれるエスケープピクセルについてのピクセル値もしくは残差値(またはその量子化バージョン)を符号化し、シグナリングすることもできる。
[0075]ビデオエンコーダ20によってシグナリングされた符号化ビデオビットストリームを受信すると、ビデオデコーダ30は最初に、ビデオエンコーダ20から受信された情報に基づいてパレットを決定し得る。ビデオデコーダ30は次いで、所与のブロックのピクセル値を再構築するために、所与のブロック中のピクセルロケーションに関連付けられる、受信されたインデックス値をパレットのエントリにマップすることができる。いくつかの事例では、ビデオデコーダ30は、エスケープピクセル用に予約されたインデックス値でピクセルがパレットコーディングされていると決定することなどによって、パレットコード化ブロックのピクセルがエスケープピクセルであると決定し得る。ビデオデコーダ30がパレットコード化ブロック中のエスケープピクセルを識別する事例では、ビデオデコーダ30は、所与のブロック中に含まれるエスケープピクセルについてのピクセル値もしくは残差値(またはその量子化バージョン)を受信し得る。ビデオデコーダ30は、個々のピクセル値を対応するパレットエントリにマップすることによって、およびパレットコード化ブロック中に含まれるどのエスケープピクセルを再構築するのにもピクセル値もしくは残差値(またはその量子化バージョン)を使うことによって、パレットコード化ブロックを再構築することができる。
[0076]パレットベースのコーディングは、一定量のシグナリングオーバーヘッドをもたらし得る。たとえば、パレットのサイズのようなパレットの特性、さらにはパレット自体をシグナリングするために、いくつかのビットが必要とされ得る。加えて、ブロックのピクセルのインデックス値をシグナリングするために、いくつかのビットが必要とされ得る。たとえば、既存のパレットベースのコーディング技法によると、パレットが限られたサイズであり(たとえば、ただ1つのエントリを含むパレット)、ブロックがどのエスケープピクセルも含まないケースであっても、ビデオエンコーダ20は依然として、パレット中の1つのエントリを識別する同じインデックス値にすべてがなる、ブロックのピクセル値についてのパレットインデックスを、ビデオブロックについて一行ごとにシグナリングすることができる。さらに、既存のパレットベースのコーディング技法は、エスケープピクセルを示すためのインデックス値をシグナリングし、次いで、エスケープピクセルについてのピクセル値もしくは残差値(またはその量子化バージョン)をシグナリングすることに関して、シグナリングオーバーヘッドをもたらす。
[0077]本開示の技法は、いくつかの例では、そのような情報をシグナリングするために必要とされるビットの数を減らすことができる。たとえば、本明細書に記載されるいくつかの技法は、ブロックがパレットベースのコーディングに関する条件の特定のセットを満足する場合、ブロックの1つまたは複数のピクセルについてのインデックス値のマップのコーディング(たとえば、符号化および/または復号)をバイパスすることを対象とする。他の例では、本明細書に記載されるいくつかの技法は概して、現在のブロックのためのパレットに関して所与のピクセルがエスケープピクセルであることを示すために、より少ないビットのデータ(たとえば、5ビットのインデックス値ではなく1ビットフラグ)をシグナリングすることを対象とする。本開示の様々な技法は、所与のブロックのためのパレット中に含まれ得るピクセル値の範囲を決定することも対象とする。パレットが含み得るピクセル値の範囲は、本明細書ではパレットの「誤差限界」と呼ばれ、本開示の様々な技法は、パレットに関連付けられたブロックの量子化パラメータ(QP)に基づいて、パレットの誤差限界を決定することを対象とする。
[0078]本開示の他の態様は、量子化されたエスケープ値を導出することを対象とする。たとえば、これらの態様のうちのいくつかは、エスケープピクセルを量子化するための1つまたは複数の量子化パラメータを定義するための技法を対象とする。本開示のさらに他の態様は、エスケープピクセル値を量子化する際に、特定の関数(たとえば、右シフト関数)を適用することを対象とする。このようにして、本開示の様々な態様は、ピクチャ品質と正確さとを維持しながら、ビットオーバーヘッドを削減し、リソース使用を低減するなど、潜在的な利点を与える。
[0079]上述したように、ビデオエンコーダ20は、いくつかの状況下で、ブロックの様々な個々のピクセルについてのパレットインデックスの符号化とシグナリングとをバイパスするために本開示の技法を適用することができる。本開示の態様によると、ビデオエンコーダ20が、ブロックのすべてのピクセルが同じ色であると決定した場合、ビデオエンコーダ20は、パレットコード化ブロックについてのパレットインデックスの符号化とシグナリングとをバイパスすることができる。たとえば、ビデオエンコーダ20は、ピクチャのパレットコード化CUが「単色CU」であると決定すること場合があり、単色CUについてのパレットインデックスの符号化とシグナリングとをバイパスしてよい。
[0080]より具体的には、ビデオエンコーダ20は、現在のCUが2つの条件を満足する場合、パレットコード化CUが単色CUであるかどうかを決定することができる。パレットコード化CUが単色CUであるかどうかを決定する際にビデオエンコーダ20が使い得る第1の条件は、対応するパレットのサイズが1に等しいかどうかである。パレットのサイズが1に等しい場合、ビデオエンコーダ20は、パレットコード化CUが単色CUであることに関して第1の条件が満たされると決定してよい。より具体的には、パレットサイズが1である場合、ビデオデコーダ20は、パレットコード化CUの(非エスケープ)ピクセルに対応するただ1つの色をパレットが含むと決定してよい。パレットサイズが1であるいくつかの例では、ビデオエンコーダ20は、パレットに関連付けられた唯一のインデックス値がゼロ(0)であると決定してよい。
[0081]ビデオエンコーダ20が、パレットコード化CUについてのパレットサイズが1である(すなわち、第1の条件が満たされる)と決定した場合、ビデオエンコーダ20は、パレットコード化CUが、単色CUであるための第2の条件を満たすかどうかを決定すればよい。ビデオデコーダ30が、パレットコード化CUが単色CUであるかどうかを決定する際に使い得る第2の条件は、パレットコード化CUがどのエスケープピクセルも含まないことである。パレットコード化CUが少なくとも1つのエスケープピクセルを含む場合、ビデオエンコーダ20は、対応するパレットがパレットコード化CUに関してただ1つの色を示すとしても、パレットコード化CUが、2つ以上の色のピクセルを含むと決定してよい。たとえば、パレットコード化CUは、パレット中に示される色を有する少なくとも1つのピクセルと、異なる色を有する少なくとも1つのエスケープピクセルとを含み得る。
[0082]ビデオエンコーダ20が、パレットコード化CUが上述した条件の両方を満足すると決定した場合、ビデオエンコーダ20は、パレットコード化CUが単色CUであると決定してよい。より具体的には、パレットコード化CUが(1のパレットサイズで示される)単一エントリパレットに関連付けられ、パレットコード化CUがどのエスケープピクセルも含まない場合、ビデオエンコーダ20は、パレットコード化CUのすべての個々のピクセルが同じ色(すなわち、対応するパレットの単一エントリによって示される色)であると決定してよい。様々な実装形態において、ビデオエンコーダ20は、パレットに関する単色成分ベースに、または2つ以上の色成分を示す合成インデックスに関して上述した単色CU識別技法を適用することができる。
[0083]パレットコード化CUがただ1つの色のピクセルを含む(すなわち、CUが単色CUである)と決定したことに応答して、ビデオエンコーダ20は、単色CUのピクセルについてのパレットインデックス値のマップを符号化およびシグナリングするのをバイパスするために本開示の技法を実装してよい。CUのピクセルについてのパレットインデックス値のマップの符号化とシグナリングとをバイパスすることによって、ビデオエンコーダ20は、さもなければCUについての色情報を符号化およびシグナリングするために消費されるであろう計算リソースと帯域幅とを節約することができる。単色CUの各個々のピクセルについてのインデックスを符号化し、シグナリングするのではなく、ビデオエンコーダ20は、単色CUを作り上げるピクセルのセット全体についての色情報を、(たとえば、ビデオデコーダ30に対して)より効率的に示すために、本開示の技法を実装すればよい。
[0084]本開示のいくつかの例によると、ビデオエンコーダ20は、単色CUについて一行ごとに、ビデオエンコーダ20がパレットインデックス値の符号化(およびシグナリング)をバイパスしたかどうかを示すためのフラグを符号化し、シグナリングすることができる。CUの各ピクセルについての個々のインデックス値ではなくCU全体についての1ビットフラグを符号化し、シグナリングすることによって、ビデオエンコーダ20は、既存のパレットベースのコーディング技法と比較して、計算リソースとシグナリング帯域幅とを節約することができる。さらに、ビデオエンコーダ20は、符号化された単色CUの正確さと品質とを維持することができ、それは、CUについてビデオエンコーダ20によってシグナリングされる単一エントリパレットが、CUのすべての個々のピクセルについての色情報を含むからである。様々な例において、ビデオエンコーダ20は、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、またはスライスヘッダ中でなど、様々なやり方でフラグを符号化し、シグナリングすることができる。様々な例において、ビデオエンコーダ20は、CTU単位、CU単位で、または任意のブロックサイズのブロックについても、フラグを符号化し、シグナリングすることができる。
[0085]パレットコーディングされている単色ブロックの個々のピクセルについてのパレットインデックス値の符号化とシグナリングとをビデオエンコーダ20がバイパスする例では、ビデオデコーダ30は、単色ブロックを再構築するために、本開示の様々な技法を適用することができる。いくつかの例では、ビデオデコーダ30は、パレットコード化ブロックが単色ブロックであると決定するために、ビデオエンコーダ20に関して上述したものと逆の演算を実施し得る。たとえば、ビデオデコーダ30は、現在のブロックのためのパレットが1のサイズを有すると決定してよく、そうすることによって、ブロックが、単色ブロックとして適格となるための第1の条件を満足すると決定する。様々な例において、ビデオデコーダ30は、ビデオエンコーダ20からの符号化ビデオビットストリーム中でパレットを受信することができ、またはパレットを再構築することができる。
[0086]さらに、ビデオデコーダ30は、ブロックがどのエスケープピクセルも含まないと決定することができ、そうすることによって、ブロックが、単色ブロックとして適格となるための第2の条件を満足すると決定する。ブロックのためのパレットのサイズが1であり(第1の条件)、ブロックがどのエスケープピクセルも含まない(第2の条件)と決定したことに基づいて、ビデオデコーダ30は、現在のブロックが単色ブロックであると決定するために、本開示の技法を実装することができる。このようにして、ビデオデコーダ30は、パレットコード化ブロックを正確に再構築するために本開示の技法を実装することができ、一方で、さもなければパレットインデックスをピクセル単位で復号することによってブロックを再構築するために要求されるであろう計算リソースと帯域幅とを節約する。
[0087]他の例では、ビデオデコーダ30は、符号化ビデオビットストリーム中で、ビデオエンコーダ20が、本開示の技法に従ってパレットコード化ブロックについてのパレットインデックスの符号化とシグナリングとをバイパスしたかどうかを示すフラグを受信し得る。ビデオデコーダ30が、ビデオエンコーダ20がパレットコード化ブロックについてのパレットインデックス値のマップの符号化とシグナリングとをバイパスしたことを示すフラグを受信するケースでは、ビデオデコーダ30は、現在のブロックがパレットコーディングされ、単色ブロックであると決定するために本開示の技法を実装することができる。より具体的には、フラグが有効にされている(たとえば、1の値にセットされている)場合、ビデオデコーダ30は、パレットコード化ブロックが単色ブロックであると決定してよい。さらに、ビデオデコーダ30は、ブロックのためのパレット中の単一エントリの色情報に従ってブロックの各ピクセルを再構築するために本開示の技法を実装すればよい。このようにして、ビデオデコーダ30は、ブロックの各個々のピクセルについての(変動するビット深度の)別個のインデックス値を使うよりもむしろ、ブロック全体に関する1ビットフラグを使ってパレットコード化ブロックを正確に再構築するために本開示の技法を実装すればよい。
[0088]別の例では、ビデオエンコーダ20は、パレットコード化ブロックのためのパレットについての誤差限界を導出するために本開示の技法を実装すればよい。本明細書で使用する「誤差限界」または「パレット誤差限界」という用語は、パレットのエントリが含み得る、(たとえば、色情報という点での)値の範囲を指し得る。より具体的には、パレット誤差限界は、異なるパレットエントリが担うか、または表示しなければならない色値における最小変動を定義する。上述したように、パレットベースのコーディングに従ってブロックを符号化するために、ビデオエンコーダ20は、対応するパレットを、ブロック内で(ピクセル単位で)最も頻繁に現れる色値を含むように構築すればよい。
[0089]パレットを構築する際、ビデオエンコーダ20は、パレットの様々なエントリが、互いからの最小変動を表示しなければならないと決定してよい。より具体的には、ビデオエンコーダ20は、パレットのどの2つのエントリも、2つのエントリが単一エントリとしてグループ化され得るように十分には類似しないように、パレットを構築すればよい。2つの可能パレットエントリがパレット誤差限界内にある場合、ビデオエンコーダ20は、2つのエントリのうちの1つを、パレット中の両方のエントリを表すのに使えばよい。
[0090]ただし、ビデオエンコーダ20が、(ブロック中によく現れる)2つのエントリが少なくともパレット誤差限界だけ異なると決定した場合、ビデオエンコーダ20は、両方のエントリをパレット中に含めてよい。エントリが3つの色成分によって表される例では、エントリにおいて、色成分のうちの少なくとも1つに関して少なくともパレット誤差限界だけ異なる場合、ビデオエンコーダ20は、両方のエントリをパレット中に含めてよい。たとえば、パレット誤差限界が5の値に設定されている場合、ビデオエンコーダ20は、abs(A1−B1)>5||abs(A2−B2)>5||abs(A3−B3)>5というブール表現に基づいて、両方のエントリをパレット中に含めるかどうかを決定してよく(両方のエントリがブロック中で十分よく現れると仮定する)、ここで、「abs」は、色成分パラメータの間の差分を表す。
[0091]記載されるように、ビデオエンコーダ20は、ブロックの、よく現れる(または比較的よく現れる)ピクセル値を、パレットのエントリにクラスタ化することによって、パレットを構築することができる。ビデオエンコーダ20は、ピクセル値が、色情報の点で最小変動を表示するように、よく現れるピクセル値を選択すればよい。さらに、よく現れるピクセル値の選択されたセット内のピクセル値の間の最小変動は、対応するパレットの誤差限界を形成し得る。パレット誤差限界はピクセル値の数を含み得るが、パレットは、少なくともパレット誤差限界だけ異なるピクセル値のあらゆるペアを必ずしも含まなくてよいことが諒解されよう。したがって、同じパレット誤差限界が、変動するサイズのパレットに適用され得る。ビデオエンコーダ20は、パレット誤差限界を、パレット中に含まれるべき色値に関する決定を行う際に使えばよい。
[0092]ビデオエンコーダ20は、パレットについての誤差限界を定義するために本開示の技法を実装してよい。本開示の様々な態様によると、ビデオエンコーダ20は、パレットコード化ブロックについての量子化パラメータ(QP)に基づいて、パレット誤差限界を決定することができる。様々な例において、ビデオエンコーダ20は、パレット誤差限界が、対応するブロックについてのQP値に正比例すると決定し得る。より具体的には、これらの例において、ビデオエンコーダ20は、より大きいQP値で量子化されるブロックのためのパレットにはより大きい誤差限界を、および小さい方のQP値で量子化されるブロックのためのパレットにはより小さい誤差限界を割り当て得る。
[0093]したがって、ビデオエンコーダ20は、より大きいQP値で量子化されているブロックについてのピクセル値の間のより大きい変動を要求するパレットを定義することができ、より大きいQP値で量子化されているブロックについてのピクセル値の間の小さい方の変動を要求するパレットを定義することができる。さらに、ビデオエンコーダ20は、各QP値と、対応するパレット誤差限界との間の関係を反映するように、テーブル(たとえば、マッピングテーブルやルックアップテーブル)を生成および/または記憶することができる。このようにして、ビデオエンコーダ20は、各QP値と、対応する誤差限界との間の関係を記憶するためのテーブルを使うことによって計算効率を向上させるために、本開示の様々な技法を実装することができる。より具体的には、QP値と、対応するパレット誤差限界との間の関係を記憶するためのテーブルを使うことによって、ビデオエンコーダ20は、各パレットが、対応するパレット誤差限界を導出するための関数を解く、比較的計算コストが高い技法に優る、改善された効率をもたらすために、本明細書に記載される技法を実装することができる。したがって、ビデオエンコーダ20は、対応するブロックが量子化されるためのQP値に基づいて、パレットを(パレットの誤差限界に従って)カスタマイズすることができ、そうすることによって、本開示の様々な態様に従って、ブロックのQP値に基づいてブロックのためのパレットの内容を決定する。
[0094]ビデオエンコーダ20は、いくつかの例では、量子化エスケープピクセル導出のために本開示の様々な技法を実装することができる。より具体的には、ビデオエンコーダ20は、技法を、エスケープピクセルについてのQPの量子化値を定義するために実装することができる。たとえば、パレットベースのコーディング技法によると、ビデオエンコーダ20が、パレットコード化ブロック中でエスケープピクセルを検出した場合、対応するパレットはエスケープピクセルについてのどのエントリも含まないので、ビデオエンコーダ20は、ピクセル値、またはその予測誤差を符号化し、シグナリングすればよい。さらに、シグナリング帯域幅を節約するために、ビデオエンコーダ20は、シグナリングに先立って、エスケープピクセルの符号化されたピクセル値を量子化してよい。
[0095]既存のパレットベースのコーディング技法によると、エスケープピクセルを量子化するための量子化値(QP値)は定義されていない。ビデオエンコーダ20は、エスケープピクセルを量子化するためのQP値を定義するために本開示の技法を実装することができる。より具体的には、ビデオエンコーダ20は、エスケープピクセルについてのQP値を、同じカラーチャネル(たとえば、ルーマ(Y)、クロマ(U、Cr)、またはクロマ(V、Cb))内での従来の係数符号化のためのQP値に等しいものと定義すればよい。一例では、ビデオエンコーダ20は、エスケープピクセルについてのQP値を、同じカラーチャネル内、および同じ量子化グループ内での従来の係数符号化のためのQP値に等しいものと定義し得る。したがって、ビデオエンコーダ20は、すべてのエスケープピクセルを、所与のチャネル内の単一QP値に従って量子化することができる。さらに、ビデオエンコーダ20がすべてのエスケープピクセルについてのQP値を単一チャネル内でのみ定義し得るとき、ビデオエンコーダ20は、異なるチャネルに関して、エスケープピクセルを量子化するための異なるQP値を使うことができる。
[0096]ビデオデコーダ30は、上述したものに対する逆演算を、本開示の様々な技法に従ってエスケープピクセルを量子化解除するために実施することができる。たとえば、ビデオデコーダ30は、ビデオエンコーダ20からの符号化ビデオビットストリーム中で受信された情報に基づき、同じQP値を使って、単一チャネルのすべてのエスケープピクセルを量子化解除することができる。より具体的には、本開示の態様によると、ビデオデコーダ30は、現在のチャネルを介して通信されるブロックのための従来の変換係数量子化解除のためのQP値に基づいて決定されるQP値を使って、特定のチャネルを介して通信されるどのエスケープピクセル(またはそれらの予測誤差/残差値)も量子化解除することができる。いくつかの例では、ビデオデコーダ30は、異なるチャネルの間で異なる、従来の変換係数コーディング用のQP値に基づき、異なるQP値を使って、異なるチャネルを介して通信されたエスケープピクセルを量子化解除するために本開示の技法を実装することができる。
[0097]このようにして、ビデオエンコーダ20およびビデオデコーダ30は、特定のチャネルを介して通信されるすべてのエスケープピクセル(を量子化および/または量子化解除するために)単一QP値を定義し、適用するために、本明細書に記載される技法を実装することができる。したがって、既存のパレットベースのコーディング技法はエスケープピクセルについてのQP値を明示的に定義していなかったが、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングを通して検出されたエスケープピクセルについてのQP値を定義するために、本開示の態様を適用することができる。
[0098]さらに、ビデオエンコーダ20および/またはビデオデコーダ30は、パレットコード化ブロックへのエスケープピクセルの包含を示し、および/または検出するためのフラグを使うために本開示の他の技法を実装することができる。既存のパレットベースのコーディング技法によると、エスケープピクセルは、「予約済み」パレットインデックス値を使ってシグナリングされ、検出され得る。たとえば、既存のパレットベースのコーディング技法によると、エスケープピクセルを示す予約済みパレットインデックス値は32であり得る。より具体的には、2つのエスケープピクセルが異なるピクセル値を有するかどうかにかかわらず、32というパレットインデックス値が、すべてのエスケープピクセル用に使われ得る。したがって、既存のパレットベースのコーディング技法によると、ビデオコーディングデバイスは、パレットコード化ブロックの各エスケープピクセルについて、(32という)5ビット値を使うことができる。
[0099]ビデオエンコーダ20は、パレットコード化ブロック中のエスケープピクセルの指示をシグナリングすることに関してピクチャ精度を維持したまま、計算リソース(たとえば、ストレージおよびメモリ)を節約し、帯域幅消費を削減するために本開示の技法を実装することができる。たとえば、ビデオエンコーダ20は、パレットコード化ブロック中のピクセルがエスケープピクセルであるかどうかを示すためのフラグを符号化し、シグナリングすることができる。本明細書に記載されるように、フラグは、有効にされると、関連付けられたピクセルが、「他のインデックス」と呼ばれるパレットインデックスに割り当てられることを示し得る。ビデオエンコーダ20は、パレットに関するエスケープピクセルを示すのに従来から使われる、32というパレットインデックス値を置き換えるのに、フラグの「他のインデックス」ステータスを使うことができる。したがって、ビデオエンコーダ20は、パレットコード化ブロックのピクセルがエスケープピクセルであることを示すのに、5ビットインデックス値ではなく1ビットフラグを符号化し、シグナリングすることができる。さらに、エスケープピクセルが1ビットフラグで示されるとき、ビデオエンコーダ20は、符号化ビデオビットストリーム中のエスケープピクセルのピクセル値(またはその残差データ)を符号化し、シグナリングすることができる。
[0100]ビデオデコーダ30は、パレットコード化ブロックのピクセルがエスケープピクセルであると決定するための1ビットフラグを使うために本開示の技法を実装することもできる。様々な例において、ビデオデコーダ30は、パレットコード化ブロック中のエスケープピクセルを識別するのに1ビットフラグを使うための、ビデオエンコーダ20を参照して上述した符号化およびシグナリング動作に関して、逆演算を実施することができる。たとえば、ビデオデコーダ30は、パレットコード化ブロックのピクセルに関連付けられた有効化1ビットフラグを受信し得る。1ビットフラグが有効化状態にあることに基づいて、ビデオデコーダ30は、関連付けられたピクセルについての色情報が、現在のブロックのためのパレット中に含まれないと決定することができる。言い換えると、ビデオデコーダ30は、受信された1ビットフラグが有効にされている場合、関連付けられたピクセルはエスケープピクセルであると決定することができる。このようにして、ビデオデコーダ30は、パレットコード化ブロック中のエスケープピクセルを識別するための1ビットフラグを使ってパレットコード化ブロックを再構築するために本開示の技法を実装することができる。したがって、ビデオデコーダ30は、パレットコード化ブロック中のエスケープピクセルの識別に関して、計算リソース(たとえば、ストレージおよび/またはメモリ)と帯域幅要件とを節約することができる。さらに、エスケープピクセルが1ビットフラグによって示されるとき、ビデオデコーダ30は、符号化ビデオビットストリーム中で、どの識別されたエスケープピクセルにも対応する色情報(またはその残差データ)を受信することができ、それに応じてパレットコード化ブロックを再構築することができる。
[0101]ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングに従ってエスケープピクセルのピクセル値を量子化し、量子化解除するために本開示の技法を実装することもできる。たとえば、ビデオエンコーダ20は、本開示の態様に従ってエスケープピクセルのピクセル値を量子化することによって、計算リソース(たとえば、メモリ使用、プロセッサクロック周期など)を節約することができる。いくつかの例では、ビデオエンコーダ20は、除算演算をシフト演算(たとえば、右シフト演算)で置き換えることによってエスケープピクセル値を量子化するために、本明細書に記載される技法を実装することができる。より具体的には、ビデオエンコーダ20は、対応するエスケープピクセルのQP値に基づいて、具体的な右シフト演算を決定することができる。
[0102]たとえば、ビデオエンコーダ20は、各エスケープピクセルのQP値を、ピクセル値に適用するべき右シフトの量にマップするテーブルを形成することができる。ビデオエンコーダ20は、52個のエントリを含むようにテーブルを形成することができる。たとえば、52エントリのマッピングテーブルは、所与のエスケープピクセルについての各可能QP値に対応する右シフト量を与え得る。代替として、ビデオエンコーダ20は、テーブル中の対応するQP値エントリに基づいて、各ピクセルに関する右シフト量を決定するために、マッピング演算を適用することができる。マップ関数は、パレットベースのコーディングによる、エスケープピクセルに関する既存の量子化技法に従って使われる52エントリのマッピングテーブルと比較して、より計算効率的であり得、メモリ要件を節約することができる。本明細書に記載される関数を解くことによって右シフト値(オペランド)を導出することによって、ビデオエンコーダ20は、ビデオデコーダ30が52エントリのテーブルを記憶する必要をなくすことができ、そうすることによって、ビデオデコーダ30が、エスケープピクセルを量子化解除することを可能にするとともに、量子化解除プロセスのための記憶要件を削減する。
[0103]様々な例において、ビデオエンコーダ20は、上述したマッピング演算に基づいてエスケープピクセルに関する右シフト量を決定すること、および決定された右シフト量を使って、エスケープピクセル値に線形関数を適用することによって、エスケープピクセルを量子化することができる。ビデオエンコーダ20がエスケープピクセルを量子化するために適用し得る線形関数の例は、次のようになる。
上式で、a、b、c、およびdはすべて、整数パラメータである。さらに、「>>」演算子は右シフト演算を示す。上の等式を適用した具体的な結果において、ビデオエンコーダ20は、エスケープピクセル値に関する右シフト量が3であると決定し得る。得られる右シフト演算は、Right_shift=(QP>>3)と表され得る
[0104]ビデオデコーダ30は、量子化されたエスケープピクセル値を量子化解除するために、ビデオエンコーダ20を参照して上述したものに対する逆演算を実施するために本開示の技法を実装することができる。たとえば、ビデオデコーダ30は、対応する量子化されたエスケープピクセル値を量子化解除する際のQP値に基づいて、(たとえば、対応する左シフト演算のための)シフト量を算出するために本開示の技法を実装することができる。このようにして、ビデオデコーダ30は、52エントリのマッピングテーブルを記憶するのではなく、マップ関数を活用することによって計算リソースを節約するために、本開示の態様を適用することもできる。
[0105]上述したように、ビデオエンコーダ20および/またはビデオデコーダ30は、ピクチャ品質とデータ精度とを維持したまま、パレットベースのコーディングに関して改善されたコーディング効率を提供するために、個々に、またはどの組合せおよび/もしくは順序でも、本開示の様々な技法を実装することができる。したがって、本明細書に記載される技法は、パレットベースのビデオコーディングの既存の技法に優る様々な潜在的利点を与え得る。具体例において、上述したように、本開示の技法は、ビデオコーディングデバイスが、ビデオデータの正確さを維持したまま、ビデオデータをより効率的に符号化および/または復号し、帯域幅消費を削減することを可能にし得る。
[0106]いくつかの例では、本明細書に記載されるビデオデータのパレットベースのコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、下でより詳細に説明されるように、エンコーダまたはデコーダ、または複合エンコーダ−デコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディングと、さらにはパレットベースのコーディングとを実施するように構成され得る。
[0107]様々な例において、本開示は、主要カラーインデックスコーディング技法の異なる態様について記載する。記載される方法の一部または全部を組み合わせることが可能であり得る。
[0108]インデックス予測方向のコーディングの例について、ここで記載する。上で述べたように、各インデックスについて、3つの可能予測方向、すなわち「copy_from_top」、「copy_from_left」、および「no_copy」がある。3つのコードワードが、3つの方向に割り当てられるべきである。たとえば、コードワードは、「0」、「01」、および「10」であり得る。上の行中のコロケートされたピクセルと左の隣接ピクセルが同じであるときのケースでは、2つのコードワードのみが必要であり得る。たとえば、この場合、「0」は「コピーなし」を表すことができ、「1」は上または左からのコピーを表すことができる。
[0109]上述したように、いくつかのケースでは、ビデオブロック用のカラーインデックスマップのコーディングがバイパスされる場合がある。主要な色の数が1に等しく、「エスケープピクセル」がない場合、インデックスブロックのコーディングはバイパスされてよい。この原理は、各個々の色成分に適用されてよく、または2つ以上の色成分を含むコンバインインデックスに適用されてよい。
[0110]別の例では、インデックスコーディングをバイパスするこの特徴が使われるかどうかを示すために、フラグ(または他のタイプのシンタックス要素)が、コード化ビットストリーム中でシグナリングされ得る。たとえば、ビデオエンコーダが、ビデオデータのコード化表現を備えるビットストリーム中で、インデックスコーディングのバイパスが用いられるかどうかを示すためのシンタックス要素(たとえば、フラグ)をシグナリングし得る。したがって、ビデオデコーダが、ビットストリームから、インデックスコーディングのバイパスが用いられるかどうかを示すシンタックス要素を取得し得る。フラグは、SPS、PPS、スライスヘッダ、もしくは他の構造中で、またはCTUごともしくはCUごと、あるいは他のどのブロックサイズでもシグナリングされ得る。
[0111]したがって、いくつかの例では、ビデオエンコーダは、インデックスブロックがビットストリーム中でシグナリングされるかどうかを示すシンタックス要素を、ビットストリーム中でシグナリングすることができる。いくつかの例では、ビデオエンコーダは、シンタックス要素を、SPS、PPS、またはビットストリーム中のスライスヘッダ中でシグナリングすることができる。さらに、いくつかの例では、ビデオエンコーダは、シンタックス要素を、CTU単位またはCU単位でシグナリングすることができる。いくつかのそのような例において、ビデオデコーダは、ビットストリームから、インデックスブロックがビットストリーム中でシグナリングされるかどうかを示すシンタックス要素を取得し得る。フラグは、SPS、PPS、スライスヘッダ、もしくは別のシンタックス構造中で、またはCTUごともしくはCUごと、あるいは他のどのブロックサイズでもシグナリングされ得る。したがって、いくつかの例では、ビデオデコーダは、シンタックス要素を、SPS、PPS、またはビットストリーム中のスライスヘッダから取得し得る。さらに、いくつかの例では、ビデオデコーダは、シンタックス要素をCTU単位またはCU単位で取得し得る。
[0112]インデックスのビットプレーンコーディングの例について、ここで記載する。通常行モードにおいて、インデックスが上からも左からも予測され得ないか、または水平モードにおいて、現在の行から最も左のインデックスから行がコピーされる場合、インデックス値は、直接コーディングされなければならない。この場合、インデックス値は、インデックス値の2進表現に従ってビンごとにコーディングされ得る。たとえば、行i中に配置されたインデックスを仮定すると、列jは、以下によって示される。
上式で、bkij=0または1である。次いで、bkijは、CABACコンテキストとして、bkijのコーディングされた隣接インデックス値を使ってコーディングされ得る。たとえば、bkijは、bk(i-1)j+bki(j-1)をコンテキストとして使うことができる。bkijは、単一コンテキストを使って、またはどのコンテキストもなしでコーディングされ、すなわち、コーディングをバイパスすることができる。
[0113]より高いスループットを可能にするために、インデックスのビンのうちのいくつかはバイパスコンテキストにおいて、他のビンはCABACコンテキストを使って、コーディングされる。たとえば、表現の最上位ビンのみがコンテキストを使い、他のビンは、バイパスモードでコーディングされる。
[0114]「他のインデックス」を示すためのフラグの例について、ここで記載する。この例では、1ビットフラグが、インデックスが「他のインデックス」であるかどうかを示すのに使われ得る。このフラグは、フラグの周囲のコード化ネイバーインデックスを用いるCABACをコンテキストとして使ってコーディングされ得る。
[0115]右シフトのための関数を使うエスケープ値の量子化の例について、ここで記載する。各QPから、右シフトの量にマップするためのテーブルは、52個のエントリを要求する。マップ関数は、このメモリ要件を抑え、右シフトを計算するための効率的やり方を提供することができる。たとえば、以下の線形関数が適用されてよい。
上式で、a、b、c、およびdは整数パラメータである。この関数の具体例は、次のようになる。
[0116]インデックスの二値化およびコーディングの例について、ここで記載する。この例では、最初に、インデックスがゼロであるかどうかを示すために、ネイバーコード化インデックスをコンテキストとして使って、フラグがコーディングされる。インデックスがゼロでない場合、インデックスはC>0であると仮定する。次いで、C−1が二値化され、バイパスCABACコーディングを使ってコーディングされる。二値化方法の例は、固定もしくは適応的パラメータを伴う単項、短縮単項、指数ゴロム、またはゴロムライスを含むが、それらに限定されない。
[0117]エスケープピクセルの指示フラグのバイパスのための例示的技法について、ここで記載する。一例では、ピクセルが「エスケープピクセル」である(すなわち、主要カラーテーブル中で提示されない)かどうかを示すのに、フラグが使われ得る。このフラグは、主要な色の数が主要な色の最大数未満である場合、バイパスされてよく、これは、「エスケープピクセル」が存在しないことを暗黙的に示す。主要な色のこの最大数は、あらかじめ規定されるか、または適応的に調節されてよい。フラグがバイパスされるとき、フラグを示すデータはビットストリーム中に含まれない。
[0118]たとえば、いくつかの例では、ビデオエンコーダは、ブロックについての主要な色の数が主要な色の最大許容数未満である場合、ビットストリームから、フラグを示すデータを省いてよい。したがって、ブロック中のピクセルについての固有サンプル(distinct sample)値の数が、主要な色の最大許容数未満である場合、ブロックのピクセルの固有のサンプル値の各々について、エントリが主要カラーテーブル中にあってよく、ブロックのピクセルのうちのどれもエスケープピクセルではない。逆に、ブロック中のピクセルについての固有サンプル値の数が、主要な色の最大許容数よりも大きい場合、ブロックのピクセルのうちの1つまたは複数がエスケープトピクセルである。したがって、ブロック中のピクセルについての固有サンプル値の数が、主要な色の最大許容数よりも大きい場合、ビデオエンコーダは、ブロックのピクセルのうちのどれがエスケープピクセルであるかを示すためのフラグをシグナリングしてよい。
[0119]一例では、ビデオデコーダは、ブロック中のピクセルの固有サンプル値の数が、主要カラーテーブル中の色の最大許容数よりも大きいとき、ビデオデータの符号化表現を備えるビットストリームから、ブロック中のピクセルがエスケープピクセルであるかどうかを示すシンタックス要素を取得することができる。この例では、ビデオデコーダは、ブロック中のピクセルの固有サンプル値の数が、主要カラーテーブル中の色の最大許容数未満であるとき、ビットストリームからシンタックス要素を取得しない。ピクセルがエスケープトピクセルでないとき、ビデオデコーダは、ピクセル用のインデックスに基づいて、ピクセルについてのサンプル値を指定する、主要カラーテーブル中のエントリを決定すればよい。
[0120]同様の例において、ブロック中のピクセルの固有サンプル値の数が、主要カラーテーブル中の色の最大許容数よりも大きい場合、ビデオエンコーダは、ビデオデータの符号化表現を備えるビットストリーム中に、ブロックのピクセルがエスケープトピクセルであるかどうかを示すシンタックス要素を示すデータを含め得る。ブロック中のピクセルの固有サンプル値の数が、主要カラーテーブル中の色の最大許容数未満である場合、ビデオエンコーダは、ビットストリームからシンタックス要素を省いてよい。ピクセルがエスケープトピクセルでないとき、ビデオエンコーダは、ビットストリーム中に、ピクセルについてのサンプル値を指定する、主要カラーテーブル中のエントリを指定するインデックスを示すデータを含めてよい。
[0121]別の例では、エスケープピクセルの指示フラグをバイパスするこの特徴が使われるかどうかを示すために、フラグ(または他のタイプのシンタックス要素)が、コード化ビットストリーム中でシグナリングされ得る。たとえば、ビデオエンコーダは、コード化ビットストリーム中で、エスケープピクセルの指示シンタックス要素(たとえば、指示フラグ)のバイパスが用いられるかどうかを示すためのシンタックス要素をシグナリングすることができる。したがって、ビデオデコーダは、ビットストリームから、エスケープピクセルの指示シンタックス要素のバイパスが用いられるかどうかを示すシンタックス要素を取得し得る。フラグは、SPS、PPS、スライスヘッダ、もしくは別の構造中で、またはCTUごともしくはCUごと、あるいは他のどのブロックサイズでもシグナリングされ得る。
[0122]したがって、いくつかの例では、ビデオエンコーダが、ビットストリーム中で、ビットストリームが第1のシンタックス要素(すなわち、ピクセルがエスケープピクセルであるかどうかを示すシンタックス要素)を含むかどうかを示す第2のシンタックス要素をシグナリングし得る。さらに、いくつかの例では、ビデオデコーダは、ビットストリームから、ビットストリームが第1のシンタックス要素(すなわち、ピクセルがエスケープピクセルであるかどうかを示すシンタックス要素)を含むかどうかを示す第2のシンタックス要素を取得し得る。いくつかの例では、この第2のシンタックス要素は、シーケンスパラメータセット、ピクチャパラメータセット、またはスライスヘッダ中でシグナリングされ得る。いくつかの例では、第2のシンタックス要素は、CTU単位またはCU単位でシグナリングされる。
[0123]量子化されたエスケープピクセル値または量子化されたエスケープ予測誤差の例示的エントロピーコーディング方法について、ここで記載する。いくつかの例では、量子化されたエスケープピクセル値(予測誤差)は、固定長コードワードを使って二値化される。コードワードの第1のビンに対して、CABACコーディングがコンテキストモデリングとともに適用される。コードワードの残りのビンに対しては、CABACバイパスコーディングが等しい確率で適用される。この例では、コードワードの長さは、各輝度クロミナンスチャネル(YUVまたはRGB)についてのQP値に依存する。たとえば、入力された8ビットの深度データが与えられると、ステップサイズ4の量子化の後、量子化された値は、[0,63]の範囲内であり、したがって、送信されるべきビットを削減するために、8ビットコードワードではなく、6ビットの固定長コードワードが使われ得る。
[0124]たとえば、ビデオデコーダは、ビデオデータのピクチャのピクセルがエスケープトピクセルであるかどうかを決定することができる。ピクセルがエスケープトピクセルでないと決定したことに応答して、ビデオデコーダは、ピクセル用のインデックスを決定し、ピクセル用のインデックスに基づいて、ピクセルについてのサンプル値を指定するパレットエントリを決定することができる。パレットエントリは、サンプル値を指定するパレットエントリを備えるパレット中にあり得る。ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオデコーダは、固定長コードワードの第1のビンをエントロピー復号するのに、コンテキストモデリングを伴うCABACを使ってよい。さらに、ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオデコーダは、固定長コードワードの第1のビンに続く、固定長コードワードの各ビンをエントロピー復号するのに、CABACバイパスコーディングを使ってよい。さらに、ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオデコーダは、ピクセルについてのサンプル値を決定するために、固定長コードワードを二値化解除してよい。いくつかの例では、固定長コードワードの長さは、ピクチャの各チャネル(たとえば、輝度、クロミナンスなどのチャネル)についての量子化パラメータ(QP)値に依存する。
[0125]同様の例において、ビデオエンコーダが、ビデオデータのピクチャのピクセルがエスケープトピクセルであるかどうかを決定し得る。ピクセルのサンプル値が、サンプル値を指定するパレットエントリを備えるパレット中のパレットエントリによって指定されたサンプル値に対応するとき、ピクセルはエスケープトピクセルであり得る。ピクセルがエスケープトピクセルでないと決定したことに応答して、ビデオエンコーダは、ピクセル用のインデックスを決定し、ビデオデータの符号化表現を備えるビットストリーム中に、ピクセル用のインデックスを示すデータを含めてよい。ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオエンコーダは、ピクセルのサンプル値を、固定長コードワードを生成するように二値化してよい。さらに、ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオエンコーダは、固定長コードワードの第1のビンをエントロピー符号化するのに、コンテキストモデリングを伴うCABACを使ってよい。さらに、エスケープトピクセル中のピクセルを決定したことに応答して、ビデオエンコーダは、固定長コードワードの第1のビンに続く、固定長コードワードの各ビンをエントロピー符号化するのに、CABACバイパスコーディングを使ってよい。いくつかの例では、固定長コードワードの長さは、ピクチャの各チャネル(たとえば、輝度、クロミナンスなどのチャネル)についてのQP値に依存する。
[0126]パレット誤差限界導出の例示的技法について、ここで記載する。いくつかの例では、パレットサイズはQPに関係付けられる。たとえば、より大きいパレット誤差限界が、より大きいQP、したがって、パレットインデックスのより小さいグループに割り当てられてよく、より小さいパレット誤差限界が、より小さいQP、したがってパレットインデックスのより多くのグループに割り当てられてよい。52個のエントリからなるマッピングテーブル(ルックアップテーブル)が、各QP値とパレット誤差限界との間の関係を記憶するために、メモリ中で使われ得る。
[0127]たとえば、いくつかの例では、ビデオデコーダが、ビデオデータのピクチャのピクセル用のインデックスを決定し得る。さらに、ビデオデコーダは、ピクセル用のインデックスに基づいて、パレット中のエントリを決定することができ、ここにおいて、決定されたエントリはピクセルについてのサンプル値を指定し、パレットのサイズはQPに関連する。同様に、いくつかの例では、ビデオエンコーダが、ビデオデータの符号化表現を備えるビットストリーム中に、パレット中のエントリのインデックスを示すデータを含めることができ、ここにおいて、パレットのサイズは量子化パラメータに関連する。いくつかのそのような例において、ビデオエンコーダは、量子化パラメータに基づいて、パレット誤差限界を決定することができる。そのような例において、ビデオエンコーダは、エントリによって指定されたサンプル値とピクセルのサンプル値との間の差分がパレット誤差限界未満である場合にのみ、ビットストリーム中に、パレット中のエントリのインデックスを示すデータを含めることができる。
[0128]量子化エスケープピクセル導出の例示的技法について、ここで記載する。いくつかの例では、各チャネルのエスケープピクセル(または予測誤差)のための量子化パラメータは、従来の係数コーディングのための量子化パラメータと同じである。言い換えると、エスケープピクセル(予測誤差)量子化または量子化解除は、異なるチャネルにおいては異なり得る。ビデオエンコーダにおいて、エスケープピクセルの各チャネルは、従来の係数コーディングのための量子化パラメータを使う。ビデオデコーダにおいて、エスケープピクセルの各チャネルは、従来の係数コーディングのための、受信された量子化パラメータを、エスケープピクセル値またはエスケープピクセル予測誤差を再構築するのに使う。
[0129]いくつかの例において、ビデオデコーダは、ビデオデータのピクチャのピクセルがエスケープトピクセルであるかどうかを決定することができる。ピクセルがエスケープトピクセルでないと決定したことに応答して、ビデオデコーダは、ピクセル用のインデックスに基づいて、サンプル値を指定するエントリを備えるパレット中のエントリを決定してよく、決定されたエントリは、ピクセルのサンプル値を指定する。ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオデコーダは、ビットストリーム中の1つまたは複数のシンタックス要素に基づいて、およびパレット中のエントリを決定することなく、ピクセルのサンプル値を決定することができる。さらに、ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオデコーダは、ピクセルのサンプル値を量子化解除してよい。ピクセルのサンプル値はピクセルの残差サンプル値であってよく、ビデオデコーダは、ピクセルについての復号サンプル値を決定するために、ピクセルの残差サンプル値にピクセルについての予測サンプル値を加算してよい。さらに、いくつかのそのような例において、ピクセルのサンプル値はピクセルの第1のサンプル値であり、量子化パラメータは第1の量子化パラメータであり、ピクセルの第1のサンプル値および第1の量子化パラメータは第1のチャネルに対応する。そのような例において、ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオ復号は、第2の量子化パラメータに基づいて、ピクセルの第2のサンプル値と、第2のチャネルに対応するピクセルの第2のサンプル値および第2の量子化パラメータとを量子化解除することができる。
[0130]同様の例において、ビデオエンコーダが、ビデオデータのピクチャのピクセルがエスケープトピクセルであるかどうかを決定し得る。ピクセルのサンプル値が、サンプル値を指定するエントリを備えるパレット中のエントリに対応しないとき、ピクセルはエスケープトピクセルであり得る。ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオエンコーダは、量子化パラメータに基づいて、ピクセルのサンプル値を量子化し、ビデオデータの符号化表現を備えるビットストリーム中に、ピクセルの量子化されたサンプル値を示すデータを含めてよい。ピクセルがエスケープトピクセルでないと決定したことに応答して、ビデオエンコーダは、ピクセルのサンプル値に対応する、パレット中のエントリを決定し、ビットストリーム中に、パレット中の決定されたエントリに対するインデックスを示すデータを含めてよい。いくつかの例では、ピクセルについてのサンプル値はピクセルの残差サンプル値である。さらに、いくつかの例では、ピクセルのサンプル値はピクセルの第1のサンプル値であり、量子化パラメータは第1の量子化パラメータであり、ピクセルの第1のサンプル値および第1の量子化パラメータは第1のチャネルに対応し、ピクセルがエスケープトピクセルであると決定したことに応答して、ビデオエンコーダは、第2の量子化パラメータに基づいて、ピクセルの第2のサンプル値と、第2のチャネルに対応する、ピクセルの第2のサンプル値および第2の量子化パラメータとを量子化してよい。ビデオエンコーダは、ビットストリーム中に、ピクセルの量子化された第2のサンプル値を示すデータを含めることができる。
[0131]図2は、本開示の技法を実装することができる例示的なビデオエンコーダ20を示すブロック図である。図2は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものと見なされるべきではない。説明のために、本開示は、HEVCコーディングのコンテキストにおいてビデオエンコーダ20を説明する。ただし、本開示の技法は他のコーディング規格または方法に適用可能であり得る。
[0132]図2の例では、ビデオエンコーダ20は、ビデオデータメモリ98と、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化(inverse quantization)ユニット108と、逆変換処理ユニット110と、再構築ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニットと、動き補償ユニットと(図示せず)を含む。ビデオエンコーダ20はまた、本開示で説明されるパレットベースのコーディング技法の様々な態様を実施するように構成される、パレットベースの符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能的な構成要素を含み得る。
[0133]ビデオデータメモリ98は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶することができる。ビデオデータメモリ98内に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ98および復号ピクチャバッファ116は、同期DRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、または他のタイプのメモリデバイスを含む、ダイナミックランダムアクセスメモリ(DRAM)のような様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ98および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ98は、ビデオエンコーダ20の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0134]ビデオエンコーダ20は、ビデオデータを受信することができる。ビデオエンコーダ20は、ビデオデータのピクチャのスライス内の各CTUを符号化することができる。CTUの各々は、ピクチャの等しいサイズのルーマコーディングツリーブロック(CTB)と、対応するCTBとに関連付けられる場合がある。CTUを符号化することの一部として、予測処理ユニット100は、CTUのCTBを徐々により小さいブロックに分割するために、4分木区分を実施することができる。より小さいブロックはCUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUに関連付けられたCTBを4つの等しいサイズのサブブロックに区分し得、サブブロックのうちの1つまたは複数を4つの等しいサイズのサブサブブロックに区分し得、以下同様である。
[0135]ビデオエンコーダ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サイズに対する非対称区分化をサポートすることができる。
[0136]インター予測処理ユニット120は、CUの各PUに対してインター予測を実施することによって、PUのための予測データを生成し得る。PUの予測データは、PUの1つまたは複数の予測サンプルブロックと、PUの動き情報とを含み得る。インター予測ユニット121は、PUがIスライス中にあるか、Pスライス中にあるか、またはBスライス中にあるかに応じて、CUのPUに対して異なる動作を実施することができる。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測ユニット121は、PUに対してインター予測を実施しない。したがって、Iモードで符号化されたブロックに対して、予測ブロックは、同じフレーム内の以前に符号化された隣接ブロックからの空間的予測を使用して形成される。
[0137]PUがPスライス中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャリスト(たとえば、「RefPicList0」)中の参照ピクチャを探索することができる。PUのための参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含む参照ピクチャ内の領域であり得る。動き推定ユニットは、PUの参照領域を含んでいる参照ピクチャのRefPicList0中での位置を示す参照インデックスを生成することができる。加えて、動き推定ユニットは、PUのコーディングブロックと、参照領域に関連付けられた参照ロケーションとの間の空間変位を示すMVを生成することができる。たとえば、MVは、現在の復号ピクチャ中の座標から参照ピクチャ中の座標までのオフセットを提供する2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として、参照インデックスとMVとを出力することができる。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照場所における実際のまたは補間されたサンプルに基づいて、PUの予測サンプルブロックを生成することができる。
[0138]PUがBスライス中にある場合、動き推定ユニットは、PUについての単予測または双予測を実施することができる。PUについての単予測を実施するために、動き推定ユニットは、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索することができる。動き推定ユニットは、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUのサンプルブロックと参照領域と関連付けられた参照場所との間の空間変位を示すMVと、参照ピクチャがRefPicList0中にあるかまたはRefPicList1中にあるかを示す1つまたは複数の予測方向インジケータとを出力することができる。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測サンプルブロックを生成することができる。
[0139]PUについての双方向インター予測を実施するために、動き推定ユニットは、PUの参照領域についてRefPicList0中の参照ピクチャを探索することができ、またPUの別の参照領域についてRefPicList1中の参照ピクチャを探索することができる。動き推定ユニットは、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中での位置を示す参照ピクチャインデックスを生成することができる。加えて、動き推定ユニットは、参照領域に関連付けられる参照ロケーションとPUのサンプルブロックとの間の空間変位を示すMVを生成することができる。PUの動き情報は、PUの参照インデックスとMVとを含み得る。動き補償ユニットは、PUの動きベクトルによって示される参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測サンプルブロックを生成することができる。
[0140]本開示の技法によれば、ビデオエンコーダ20は、パレットベースのコーディングを実施するように構成され得る。HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、CUモードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUの状況において(本開示全体で)本明細書で説明される開示されるプロセスのすべてが、追加で、または代替的に、PUモードに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0141]パレットベースの符号化ユニット122は、たとえば、パレットベースの符号化モードがたとえばCUまたはPUのために選択されるとき、パレットベースの復号を実施することができる。たとえば、パレットベースの符号化ユニット122は、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロックの位置の少なくともいくつかを選択されたピクセル値にそれぞれ対応するパレット中のエントリと関連付ける情報をシグナリングするように構成することができる。様々な機能がパレットベースの符号化ユニット122によって実施されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実施され得る。
[0142]パレットベースの符号化ユニット122は、本明細書で説明される様々なシンタックス要素のいずれをも生成するように構成され得る。したがって、ビデオエンコーダ20は、本開示で説明されるようなパレットベースのコードモードを使用して、ビデオデータのブロックを符号化するように構成され得る。ビデオエンコーダ20は、パレットコーディングモードを使用してビデオデータのブロックを選択的に符号化し、または、たとえばHEVCインター予測コーディングモードまたはイントラ予測コーディングモードのような異なるモードを使用してビデオデータのブロックを符号化することができる。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。ビデオエンコーダ20は、インター予測時間予測コーディングモードまたはイントラ予測空間コーディングモードによっていくつかのブロックを符号化し、パレットベースのコーディングモードによって他のブロックを復号することができる。
[0143]イントラ予測処理ユニット126は、PUに対してイントラ予測を実施することによって、PUのための予測データを生成し得る。PUの予測データは、PUの予測サンプルブロックと様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対してイントラ予測を実施し得る。
[0144]PUに対してイントラ予測を実施するために、イントラ予測処理ユニット126は、PUのための予測データの複数のセットを生成するのに複数のイントラ予測モードを使用し得る。PUのための予測データのセットを生成するためにいくつかのイントラ予測モードを使用するとき、イントラ予測処理ユニット126は、そのイントラ予測モードと関連付けられた方向へ、PUの予測ブロック全体にわたって、隣接PUのサンプルブロックからのサンプルの値を延ばすことができる。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば33個の方向性イントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUに関連付けられた領域のサイズに依存し得る。
[0145]予測処理ユニット100は、PUに対してインター予測処理ユニット120によって生成された予測データ、またはPUに対してイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUのための予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/歪みの尺度に基づいて、CUのPUのための予測データを選択する。選択された予測データの予測サンプルブロックは、本明細書では、選択された予測サンプルブロックと呼ばれ得る。
[0146]残差生成ユニット102は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)、ならびにCUのPUの選択された予測サンプルブロック(たとえば、予測ルーマブロック、Cbブロック、およびCrブロック)に基づいて、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を生成することができる。たとえば、残差生成ユニット102は、残差ブロック中の各サンプルがCUのコーディングブロック中のサンプルとCUのPUの対応する選択された予測サンプルブロック中の対応するサンプルとの間の差分に等しい値を有するようにCUの残差ブロックを生成することができる。
[0147]変換処理ユニット104は、4分木区分を実施して、CUに関連付けられた残差ブロックをCUのTUに関連付けられた変換ブロックに区分することができる。したがって、いくつかの例において、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックに関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づく場合も、または基づかない場合もある。「残差4分木」(RQT)として知られる4分木構造は、領域の各々に関連付けられたノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
[0148]変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUの各TUに関する変換係数ブロックを生成し得る。変換処理ユニット104は、TUに関連付けられた変換ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に類似の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは変換係数ブロックとして扱われる場合がある。
[0149]量子化ユニット106は、係数ブロック内の変換係数を量子化することができる。量子化プロセスは、変換係数の一部またはすべてに関連付けられたビット深度を低減し得る。たとえば、nビット変換係数は量子化の間にmビットの変換係数に切り捨てられてよく、ただし、nはmよりも大きい。量子化ユニット106は、CUに関連付けられた量子化パラメータ(QP)値に基づいてCUのTUに関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連付けられたQP値を調整することによって、CUに関連付けられた係数ブロックに適用される量子化の程度を調整することができる。量子化は情報の損失をもたらす場合があり、したがって、量子化変換係数は、元の係数よりも低い精度を有する場合がある。
[0150]逆量子化ユニット108および逆変換処理ユニット110は、係数ブロックから残差ブロックを再構築するために、それぞれ、係数ブロックに逆量子化と逆変換とを適用することができる。再構築ユニット112は、再構築された残差ブロックを、予測処理ユニット100によって生成された1つまたは複数の予測サンプルブロックからの対応するサンプルに追加して、TUに関連付けられる再構築された変換ブロックを生成することができる。ビデオエンコーダ20は、このようにCUの各TUのための変換ブロックを再構築することによって、CUのコーディングブロックを再構築することができる。
[0151]フィルタユニット114は、CUに関連付けられたコーディングブロックの中のブロッキングアーティファクトを低減するために、1つまたは複数のデブロッキング動作を実施し得る。復号ピクチャバッファ116は、フィルタユニット114が、再構築されたコーディングブロックに対して1つまたは複数のデブロッキング動作を実施した後、再構築されたコーディングブロックを記憶することができる。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を実施するために、再構築されたコーディングブロックを含んでいる参照ピクチャを使用することができる。加えて、イントラ予測処理ユニット126は、CUと同じピクチャ内の他のPUに対してイントラ予測を実施するために、復号ピクチャバッファ116内の再構築されたコーディングブロックを使用することができる。
[0152]エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能的な構成要素からデータを受信することができる。たとえば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受信することができ、予測処理ユニット100からシンタックス要素を受信することができる。エントロピー符号化ユニット118は、エントロピー符号化データを生成するために、データに対して1つまたは複数のエントロピー符号化演算を実施することができる。たとえば、エントロピー符号化ユニット118は、CABAC演算、コンテキスト適応型可変長コーディング(CAVLC)演算、可変対可変(V2V:variable-to-variable)長コーディング演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)演算、確率間隔区分エントロピー(PIPE)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算をデータに対して実施し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力することができる。たとえば、ビットストリームは、CUのためのRQTを表すデータを含み得る。
[0153]いくつかの例では、残差コーディングはパレットコーディングとともには実施されない。したがって、ビデオエンコーダ20は、パレットコーディングモードを使用してコーディングするとき、変換または量子化を実施しなくてよい。加えて、ビデオエンコーダ20は、残差データとは別に、パレットコーディングモードを使用して生成されたデータをエントロピー符号化することができる。
[0154]本開示の技法の1つまたは複数によると、ビデオエンコーダ20、および具体的にはパレットベースの符号化ユニット122は、予測されたビデオブロックのパレットベースのビデオコーディングを実施することができる。上で説明されたように、ビデオエンコーダ20によって生成されたパレットは、明示的に符号化されてビデオデコーダ30に送られてよく、以前のパレットエントリから予測されてよく、以前のピクセル値から予測されてよく、またはこれらの組合せであってよい。
[0155]パレットベースの符号化ユニット122は、いくつかの状況において、パレットコード化ブロックのピクセルについてのパレットインデックス値のマップの符号化をバイパスするために本開示の技法を適用することができる。本開示の態様によると、パレットベースの符号化ユニット122が、ブロックのすべてのピクセルが同じ色であると決定した場合、パレットベースの符号化ユニット122は、パレットコード化ブロックについてのパレットインデックス値のマップの符号化をバイパスすることができる。たとえば、パレットベースの符号化ユニット122は、ピクチャのパレットコード化CUが「単色CU」であると決定してよく、単色CUについてのパレットインデックス値のマップの符号化とシグナリングとをバイパスしてよい。
[0156]より具体的には、パレットベースの符号化ユニット122は、現在のCUが2つの条件を満足する場合、パレットコード化CUが単色CUであるかどうかを決定することができる。パレットコード化CUが単色CUであるかどうかを決定する際にパレットベースの符号化ユニット122が使い得る第1の条件は、対応するパレットのサイズが1に等しいかどうかである。パレットのサイズが1に等しい場合、パレットベースの符号化ユニット122は、パレットコード化CUが単色CUであることに関して第1の条件が満たされると決定してよい。より具体的には、パレットサイズが1である場合、パレットベースの符号化ユニット122は、パレットコード化CUの(非エスケープ)ピクセルに対応するただ1つの色をパレットが含むと決定してよい。パレットサイズが1であるいくつかの例では、パレットベースの符号化ユニット122は、パレット中に含まれる唯一のインデックス値がゼロ(0)であると決定してよい。
[0157]パレットベースの符号化ユニット122が、パレットコード化CUについてのパレットサイズが1である(すなわち、第1の条件が満たされる)と決定した場合、パレットベースの符号化ユニット122は、パレットコード化CUが、単色CUであるための第2の条件を満たすかどうかを決定すればよい。パレットベースの符号化ユニット122が、パレットコード化CUが単色CUであるかどうかを決定する際に使い得る第2の条件は、パレットコード化CUがどのエスケープピクセルも含まないことである。パレットコード化CUが少なくとも1つのエスケープピクセルを含む場合、ビデオエンコーダ20は、対応するパレットがパレットコード化CUに関してただ1つの色を示すとしても、パレットコード化CUが、2つ以上の色のピクセルを含むと決定してよい。たとえば、パレットコード化CUは、パレット中に示される色を有する少なくとも1つのピクセルと、異なる色を有する少なくとも1つのエスケープピクセルとを含み得る。
[0158]パレットベースの符号化ユニット122が、パレットコード化CUが上述した条件の両方を満足すると決定した場合、パレットベースの符号化ユニット122は、パレットコード化CUが単色CUであると決定してよい。より具体的には、パレットコード化CUが(1のパレットサイズで示される)単一エントリパレットに関連付けられ、パレットコード化CUがどのエスケープピクセルも含まない場合、パレットベースの符号化ユニット122は、パレットコード化CUのすべての個々のピクセルが同じ色(すなわち、対応するパレットの単一エントリによって示される色)であると決定してよい。様々な実装形態において、パレットベースの符号化ユニット122は、パレットに関する単色成分ベースに、または2つ以上の色成分を示す合成インデックスに関して上述した単色CU識別技法を適用することができる。
[0159]パレットコード化CUがただ1つの色のピクセルを含む(すなわち、CUが単色CUである)と決定したことに応答して、パレットベースの符号化ユニット122は、単色CUのピクセルについてのパレットインデックス値のマップを符号化するのをバイパスするために本開示の技法を実装してよい。CUについてのパレットインデックス値のマップの符号化をバイパスすることによって、パレットベースの符号化ユニット122は、さもなければCUについての色情報を符号化し、シグナリングするために消費されるであろう計算リソースと帯域幅とを節約することができる。単色CUのピクセルについてのパレットインデックス値のマップを符号化するのではなく、パレットベースの符号化ユニット122は、単色CUを作り上げるピクセルのセット全体についての色情報をより効率的に示すために本開示の技法を実装することができる。パレットベースの符号化ユニット122が、検出された単色CUのすべての個々のピクセルについてのパレットインデックスの符号化をバイパスするケースでは、ビデオエンコーダ20(またはその1つもしくは複数の構成要素)は、CUのピクセルについてのパレットインデックス値のマップをシグナリングする必要がなくてよく、そうすることによって、計算リソースを節約し、帯域幅消費を削減する。
[0160]本開示のいくつかの例によると、パレットベースの符号化ユニット122は、単色CUについて一行ごとに、ビデオエンコーダ20がパレットインデックス値のマップの符号化(およびシグナリング)をバイパスしたことを示すためのフラグを符号化することができる。CUのピクセルについてのパレットインデックス値の(任意のサイズの)マップではなくCU全体についての1ビットフラグを符号化することによって、パレットベースの符号化ユニット122は、ビデオエンコーダ20に、既存のパレットベースのコーディング技法と比較して、計算リソースとシグナリング帯域幅とを節約させることができる。さらに、CUのための、パレットベースの符号化ユニット122によって符号化され、ビデオエンコーダ20によってシグナリングされた単一エントリパレットは、CUのすべてのピクセルについての色情報を含むので、パレットベースの符号化ユニット122は、符号化された単色CUの精度と品質とを維持することができる。様々な例において、パレットベースの符号化ユニット122は、SPS、PPS、またはスライスヘッダ中でなど、様々なやり方で、フラグを符号化することができる。様々な例において、パレットベースの符号化ユニット122は、CTU単位、CU単位で、または任意のブロックサイズのブロック用にも、フラグを符号化することができる。
[0161]他の例では、パレットベースの符号化ユニット122は、パレットコード化ブロックのためのパレットについての誤差限界を導出するために本開示の技法を実装すればよい。本明細書で使用する「誤差限界」または「パレット誤差限界」という用語は、パレットのエントリが含み得る、(たとえば、色情報という点での)ピクセル値の最小変動を指し得る。より具体的には、パレット誤差限界は、任意の2つのパレットエントリが表示しなければならない色値における最小変動を定義する。説明したように、パレットベースのコーディングに従ってブロックを符号化するために、パレットベースの符号化ユニット122は、対応するパレットを、ブロック内で(ピクセル単位で)最も頻繁に現れる色値を含むように構築すればよい。
[0162]言い換えると、パレットベースの符号化ユニット122は、パレット中のブロックの出現頻度の高い(または比較的出現頻度の高い)ピクセル値をクラスタ化することによって、パレットを構築することができる。パレットベースの符号化ユニット122は、ピクセル値が、色情報の点で少なくとも特定の最小変動を表示するように、高頻度で現れるピクセル値を選択すればよい。さらに、高頻度で現れるピクセル値の選択されたセット内のピクセル値の最小変動は、対応するパレットの誤差限界を形成し得る。パレット誤差限界はピクセル値の数を含み得るが、パレットは、少なくともパレット誤差限界を表示するピクセル値のあらゆるペアを必ずしも含まなくてよいことが諒解されよう。したがって、同じパレット誤差限界が、変動するサイズのパレットに適用され得る。パレットベースの符号化ユニット122は、パレット誤差限界を、パレット中に含まれるべき色値に関する決定を行う際に使えばよい。
[0163]パレットベースの符号化ユニット122は、パレットについての誤差限界を定義するのに、本開示の技法を実装してよい。本開示の様々な態様によると、パレットベースの符号化ユニット122は、パレットコード化ブロックについての量子化パラメータ(QP)に基づいて、パレット誤差限界を決定することができる。様々な例において、パレットベースの符号化ユニット122は、パレット誤差限界が、対応するブロックについてのQP値に正比例すると決定し得る。より具体的には、これらの例において、パレットベースの符号化ユニットは、より大きいQP値で量子化されるブロックのためのパレットにはより大きい誤差限界を、および小さい方のQP値で量子化されるブロックのためのパレットにはより小さい誤差限界を割り当て得る。
[0164]さらに、パレットベースの符号化ユニット122は、パレットコード化ブロックのQP値を、対応するパレット誤差限界にマップするテーブルを記憶することによって、パレット誤差限界を導出するために、本明細書に記載される技法を実装することができる。さらに、パレットベースの符号化ユニット122は、対応するパレットを決定するために、テーブルからの特定のパレット誤差限界エントリにアクセスすることができる。パレット誤差限界をパレットコード化ブロックのQPにマップするテーブルを使うことによって、パレットベースの符号化ユニット122は、既存のパレットベースのコーディング技法と比較して、計算効率を向上させることができる。より具体的には、本明細書に記載されるマッピングテーブルベースのパレット誤差限界導出技法を実装することによって、パレットベースの符号化ユニット122は、さもなければ、各パレットについての誤差限界を導出するための関数の実行に依拠する既存の技法に従って消費されるであろうリソースを節約することができる。
[0165]したがって、パレットベースの符号化ユニット122は、より大きいQP値で量子化されるブロックについてのピクセル値の間のより大きい変動を要求するのためのより大きい数のパレットインデックスを収容することができるパレットを定義することができ、より大きいQP値で量子化されるピクセル値の間の小さい方の変動を要求するパレットを定義することができる。このようにして、パレットベースの符号化ユニット122は、対応するブロックが量子化されるためのQP値に基づいて、(パレットの誤差限界に基づく)パレットをカスタマイズするために、本開示の様々な技法を実装することができ、そうすることによって、ブロックのQP値に基づいてブロックのためのパレットの内容を決定する。さらに、パレットベースの符号化ユニット122は、各QP値と、対応するパレット誤差限界との間の関係を反映するように、テーブル(たとえば、マッピングテーブルやルックアップテーブル)を生成および/または記憶することができる。このようにして、パレットベースの符号化ユニット122は、対応するパレットについてのパレット誤差限界を、各パレットについての誤差限界を導出するための関数を解くことに依拠する既存のパレットコーディング技法よりも計算コストが高くないやり方で導出するために本開示の技法を実装することができる。
[0166]パレットベースの符号化ユニット122は、いくつかの例では、量子化エスケープピクセル導出のために、本開示の様々な技法を実装することができる。より具体的には、パレットベースの符号化ユニット122は、技法を、エスケープピクセルについてのQPの量子化値を定義するために実装することができる。たとえば、パレットベースのコーディング技法によると、パレットベースの符号化ユニット122が、パレットコード化ブロック中でエスケープピクセルを検出した場合、対応するパレットはエスケープピクセルについてのどのエントリも含まないので、パレットベースの符号化ユニット122は、ピクセル値、またはその予測誤差を符号化すればよい。さらに、シグナリング帯域幅を節約するために、量子化ユニット106は、ビデオエンコーダ20の他の構成要素によるシグナリングに先立って、エスケープピクセルの符号化されたピクセル値を量子化してよい。
[0167]既存のパレットベースのコーディング技法によると、エスケープピクセルを量子化するための量子化値(QP値)は定義されていない。パレットベースの符号化ユニット122は、エスケープピクセルを量子化するためのQP値を定義するために本開示の技法を実装することができる。より具体的には、パレットベースの符号化ユニット122は、エスケープピクセルについてのQP値を、同じカラーチャネル内での従来の係数符号化のためのQP値に等しいものと定義すればよい。したがって、パレットベースの符号化ユニット122は、すべてのエスケープピクセルを、所与のチャネル内の単一QP値に従って量子化することができる。さらに、パレットベースの符号化ユニット122がすべてのエスケープピクセルについてのQP値を単色チャネル内でのみ定義することができるとき、パレットベースの符号化ユニット122は、異なるカラーチャネルに関して、エスケープピクセルを量子化するための異なるQP値を使うことができる。
[0168]さらに、パレットベースの符号化ユニット122は、パレットコード化ブロックへのエスケープピクセルの包含を示し、および/または検出するためのフラグを使うために、本開示の他の技法を実装することができる。既存のパレットベースのコーディング技法によると、エスケープピクセルは、「予約済み」パレットインデックス値を使ってシグナリングされ、検出され得る。たとえば、既存のパレットベースのコーディング技法によると、エスケープピクセルを示す予約済みパレットインデックス値は32であり得る。より具体的には、2つのエスケープピクセルが異なるピクセル値を有するかどうかにかかわらず、32というパレットインデックス値が、すべてのエスケープピクセル用に使われ得る。したがって、既存のパレットベースのコーディング技法によると、ビデオコーディングデバイスは、パレットコード化ブロックの各エスケープピクセルについて、(32という)5ビット値を使うことができる。
[0169]パレットベースの符号化ユニット122は、パレットコード化ブロック中のエスケープピクセルの指示をシグナリングすることに関してピクチャ精度を維持したまま、計算リソース(たとえば、ストレージおよびメモリ)を節約し、帯域幅消費を削減するために本開示の技法を実装することができる。たとえば、パレットベースの符号化ユニット122は、パレットコード化ブロック中のピクセルがエスケープピクセルであるかどうかを示すためのフラグ(たとえば、1ビットデータユニット)を符号化することができる。本明細書に記載されるように、フラグは、有効にされると、関連付けられたピクセルが、「他のインデックス」と呼ばれるパレットインデックスに割り当てられることを示し得る。パレットベースの符号化ユニット122は、パレットに関するエスケープピクセルを示すのに従来から使われる、32というパレットインデックス値を置き換えるのに、フラグの「他のインデックス」ステータスを使うことができる。したがって、パレットベースの符号化ユニット122は、パレットコード化ブロックのピクセルがエスケープピクセルであることを示すのに、5ビットインデックス値ではなく1ビットフラグを符号化することができる(およびビデオエンコーダ20の他の構成要素がシグナリングすることができる)。さらに、ビデオエンコーダ20(またはその1つもしくは複数の構成要素)は、ピクセル値、またはその残差データを、符号化ビデオビットストリーム中で符号化し、シグナリングすることができる。
[0170]パレットベースの符号化ユニット122および量子化ユニット106のうちの1つまたは両方は、パレットベースのコーディングに従ってエスケープピクセルのピクセル値を量子化するために本開示の技法を実装することもできる。たとえば、パレットベースの符号化ユニット122および/または量子化ユニット106は、本開示の態様に従ってエスケープピクセルのピクセル値を量子化することによって、計算リソース(たとえば、メモリ使用、プロセッサクロック周期など)を節約することができる。いくつかの例では、量子化ユニット106は、除算演算をシフト演算(たとえば、右シフト演算)で置き換えることによってエスケープピクセル値を量子化するために、本明細書に記載される技法を実装することができる。より具体的には、量子化ユニット106は、対応するエスケープピクセルのQP値に基づいて、具体的な右シフト演算を決定することができる。たとえば、量子化ユニット106は、パラメータまたはオペランドとしてQP値を含む関数を解くことによって、右シフト値を導出することができる。
[0171]たとえば、既存の技法によると、パレットベースの符号化ユニット122各エスケープピクセルのQP値を、ピクセル値に適用するべき右シフトの量にマップするテーブルを形成することができる。パレットベースの符号化ユニット122は、52個のエントリを含むようにテーブルを形成することができる。たとえば、52エントリのマッピングテーブルは、所与のエスケープピクセルについての各可能QP値に対応する右シフト量を与え得る。さらに、量子化ユニット106は、テーブル中の対応するQP値エントリに基づいて、各ピクセルに関する右シフト量を決定するために、マッピング演算を適用することができる。
[0172]様々な例において、量子化ユニット106は、右シフト量を決定するための、エスケープピクセル値への線形関数の適用に基づいてエスケープピクセルに関する右シフト量を決定することによってエスケープピクセルを量子化するために、本開示の様々な技法を実装することができる。量子化ユニット106が、エスケープピクセルを量子化するための右シフト量を導出するために適用し得る線形関数の例は、次のようになる。
上式で、a、b、c、およびdはすべて、整数パラメータである。さらに、「>>」演算子は右シフト演算を示す。上の等式を適用した具体的な結果において、量子化ユニット106は、エスケープピクセル値に関する右シフト量が3であると決定し得る。得られる右シフト演算は、Right_shift=(QP>>3)と表され得る。関数(たとえば、上述した線形関数)を解くことによって、量子化ユニット106は、復号デバイス(たとえば、ビデオデコーダ30および/またはその様々な構成要素)がエスケープピクセルを量子化解除することを可能にし得るとともに、さもなければ52エントリのテーブルを記憶するために消費されるであろう記憶リソースを節約する。このようにして、量子化ユニット106は、ビデオデコーダ30に関する記憶要件を低減するとともに、エスケープピクセルを量子化するために本開示の技法を実装することができる。
[0173]本開示で説明される技法はまた、パレットベースのコーディングモードをシグナリングすること、パレットを送信すること、パレットを予測すること、パレットを導出すること、またはパレットベースのコーディングマップと他のシンタックス要素とを送信することの、1つまたは複数の様々な組合せのための技法を含み得る。
[0174]図3は、本開示の技法を実装するように構成された例示的なビデオデコーダ30を示すブロック図である。図3は、説明のために提供されるものであり、本開示において広く例示し説明する技法を限定するものではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオデコーダ30を記載する。ただし、本開示の技法は他のコーディング規格または方法に適用可能であり得る。
[0175]図3の例では、ビデオデコーダ30は、ビデオデータメモリ148と、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構築ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164とイントラ予測処理ユニット166とを含む。ビデオデコーダ30はまた、本開示で説明されるパレットベースのコーディング技法の様々な態様を実施するように構成された、パレットベースの復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多いか、より少ないか、または異なる機能的な構成要素を含み得る。
[0176]ビデオデータメモリ148は、ビデオデコーダ30の構成要素によって復号されるべき、符号化ビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ148に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータのワイヤードもしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって取得され得る。ビデオデータメモリ148は、符号化ビデオビットストリームからの符号化ビデオデータを記憶するコード化ピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ148および復号ピクチャバッファ162は、同期DRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスを含む、ダイナミックランダムアクセスメモリ(DRAM)のような様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ148および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ148は、ビデオデコーダ30の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0177]ビデオデータメモリ148、すなわちCPBは、ビットストリームの符号化ビデオデータ(たとえば、NALユニット)を受け取り、記憶することができる。エントロピー復号ユニット150は、ビデオデータメモリ148から符号化ビデオデータ(たとえば、NALユニット)を受け取り、NALユニットを解析してシンタックス要素を復号することができる。エントロピー復号ユニット150は、NALユニット内のエントロピー符号化シンタックス要素をエントロピー復号することができる。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから取得(たとえば、抽出)されたシンタックス要素に基づいて、復号ビデオデータを生成し得る。
[0178]ビットストリームのNALユニットは、コード化スライスNALユニットを含む場合がある。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コード化スライスNALユニットからシンタックス要素を抽出し、エントロピー復号することができる。コード化スライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関係するシンタックス要素を含み得る。スライスヘッダの中のシンタックス要素は、スライスを含むピクチャに関連付けられたPPSを識別するシンタックス要素を含み得る。
[0179]ビデオデコーダ30は、ビットストリームからのシンタックス要素を復号することに加えて、区分されていないCUに対して再構築動作を実施することができる。区分されていないCUに対して再構築動作を実施するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実施することができる。CUの各TUに対して再構築動作を実施することによって、ビデオデコーダ30はCUの残差ブロックを再構築することができる。
[0180]CUのTUに対して再構成演算を実施することの一部として、逆量子化ユニット154は、TUに関連付けられた係数ブロックを逆量子化、すなわち量子化解除することができる。逆量子化ユニット154は、量子化の程度を決定するために、また同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、TUのCUに関連付けられたQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比は、利用されるエントロピーコーディングの方法に依存し得る。
[0181]逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUに関連付けられた残差ブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を、係数ブロックに適用し得る。
[0182]PUがイントラ予測を使用して符号化される場合、イントラ予測処理ユニット166は、PUのための予測ブロックを生成するために、イントラ予測を実施し得る。イントラ予測処理ユニット166は、空間的に隣接するPUの予測ブロックに基づいて、PUのための予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成するために、イントラ予測モードを使用し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定し得る。
[0183]予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを構築することができる。さらに、PUがインター予測を使用して符号化された場合、エントロピー復号ユニット150は、PUについての動き情報を抽出することができる。動き補償ユニット164は、PUの動き情報に基づいて、PU用の1つまたは複数の参照領域を決定することができる。動き補償ユニット164は、PUのための1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUのための予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成し得る。
[0184]再構築ユニット158は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構築するために、適宜、CUのTUに関連付けられる変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)と、CUのPUの予測ブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)とを、すなわち、イントラ予測データとインター予測データのいずれかを使用することができる。たとえば、再構築ユニット158は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構築するために、変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)のサンプルを、予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)の対応するサンプルに加算し得る。
[0185]フィルタユニット160は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)に関連付けられたブロッキングアーティファクトを低減するために、デブロッキング演算を実施し得る。ビデオデコーダ30は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のための、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162の中のブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)に基づいて、他のCUのPUに対してイントラ予測演算またはインター予測演算を実施し得る。このようにして、ビデオデコーダ30は、有意な係数ブロックの変換係数レベルをビットストリームから抽出し、変換係数レベルを逆量子化し、変換ブロックを生成するため、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成するため、およびコーディングブロックを表示のために出力するために、変換係数レベルに変換を適用することができる。
[0186]本開示の様々な例によると、ビデオデコーダ30は、パレットベースのコーディングを実施するように構成され得る。パレットベースの復号ユニット165は、たとえば、パレットベースの復号モードがたとえばCUまたはPUのために選択されるとき、パレットベースの復号を実施することができる。たとえば、パレットベースの復号ユニット165は、ピクセル値を示すエントリを有するパレットを生成するように構成され得る。さらに、この例では、パレットベースの復号ユニット165は、ビデオデータのブロックの少なくともいくつかの位置をパレット中のエントリに関連付ける情報を受信することができる。この例では、パレットベースの復号ユニット165は、その情報に基づいてパレット中のピクセル値を選択することができる。加えて、この例では、パレットベースの復号ユニット165は、選択されたピクセル値に基づいてブロックのピクセル値を再構築することができる。様々な機能がパレットベースの復号ユニット165によって実施されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実施され得る。
[0187]パレットベースの復号ユニット165は、パレットコーディングモード情報を受信し、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上の動作を実施することができる。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または、他のモード情報が異なるモードの使用を示すとき、パレットベースの復号ユニット165は、パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、HEVCインター予測コーディングモードまたはイントラ予測コーディングモードのような非パレットベースのコーディングモードを使用して、ビデオデータのブロックを復号する。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。ビデオデコーダ30は、インター予測時間予測コーディングモードまたはイントラ予測空間コーディングモードによっていくつかのブロックを復号し、パレットベースのコーディングモードによって他のブロックを復号することができる。パレットベースのコーディングモードは、複数の異なるパレットベースのコーディングモードの1つを備えてよく、または単一のパレットベースのコーディングモードがあってよい。
[0188]本開示の技法の1つまたは複数によると、ビデオデコーダ30、および具体的にはパレットベースの復号ユニット165は、パレットコード化ビデオブロックのパレットベースのビデオ復号を実施することができる。上で説明されたように、ビデオデコーダ30によって復号されたパレットは、ビデオエンコーダ20によって明示的に符号化およびシグナリングされ、受信されたパレットコード化ブロックに関してビデオデコーダ30によって再構築されてよく、以前のパレットエントリから予測されてよく、以前のピクセル値から予測されてよく、またはこれらの組合せであってよい。
[0189]上述したように、パレットコード化ビデオブロックが条件の特定のセットを満足する場合、ビデオエンコーダ20(およびその様々な構成要素、たとえばパレットベースの符号化ユニット122)は、ブロックのピクセルについてのパレットインデックス値のマップの符号化とシグナリングとをバイパスしてよい。ビデオエンコーダ20が、パレットコーディングされている単色ブロックについてのパレットインデックス値のマップの符号化とシグナリングとをバイパスする例では、ビデオデコーダ30(およびその特定の構成要素、たとえばパレットベースの復号ユニット165)は、単色ブロックを再構築するために、本開示の様々な技法を適用することができる。いくつかの例では、パレットベースの復号ユニット165は、パレットコード化ブロックが単色ブロックであると決定するために、ビデオエンコーダ20のパレットベースの符号化ユニット122を参照して上述したものとは逆の演算を実施し得る。たとえば、パレットベースの復号ユニット165は、現在のブロックのためのパレットが1のサイズを有すると決定してよく、そうすることによって、ブロックが、単色ブロックとして適格となるための第1の条件を満足すると決定する。様々な例において、ビデオデコーダ30は、ビデオエンコーダ20からの符号化ビデオビットストリーム中でパレットを受信することができ、または符号化ビデオビットストリーム中に含まれる他の様々なデータを使ってパレットを導出することができる。
[0190]さらに、ビデオデコーダ30は、ブロックがどのエスケープピクセルも含まないと決定することができ、そうすることによって、ブロックが、単色ブロックとして適格となるための第2の条件を満足すると決定する。ブロックのためのパレットのサイズが1であり(したがって、第1の条件を満足する)、ブロックがどのエスケープピクセルも含まない(したがって、第2の条件を満足する)と決定したことに基づいて、パレットベースの復号ユニット165は、現在のブロックが単色ブロックであると決定するために、本開示の技法を実装することができる。パレットベースの復号ユニット165は、対応するパレットの単一エントリ中に示される色情報に従って単色ブロックのすべてのピクセルを再構築することによって、単色ブロックを再構築することができる。このようにして、パレットベースの復号ユニット165は、パレットコード化ブロックを正確に再構築するために本開示の技法を実装することができ、一方で、さもなければ、ブロックのすべてのピクセルについてのパレットインデックス値のマップに依拠することによってブロックを再構築するのに要求されるであろう計算リソースと帯域幅とを節約する。
[0191]いくつかの例では、ビデオデコーダ30は、符号化ビデオビットストリーム中で、ビデオエンコーダ20が、本開示の技法に従ってパレット符号化ブロックの1つまたは複数のピクセルについてのパレットインデックス値のマップの符号化とシグナリングとをバイパスしたかどうかを示すフラグを受信し得る。ビデオデコーダ30が、ビデオエンコーダ20がパレット符号化ブロックについてのパレットインデックス値のマップの符号化とシグナリングとを本当にバイパスしたことを示すフラグを受信するケースでは、パレットベースの復号ユニット165は、現在のブロックがパレットコーディングされ、単色ブロックであると決定するために本開示の技法を実装することができる。より具体的には、フラグが有効にされている(たとえば、1の値にセットされている)場合、パレットベースの復号ユニット165は、パレットコード化ブロックが単色ブロックであると決定してよい。パレットベースの復号ユニット165は、ブロックのためのパレット中の単一エントリの色情報に従ってブロックのすべてのピクセルを再構築するために本開示の技法を実装すればよい。したがって、パレットベースの復号ユニット165は、ブロックの、異なるピクセル、またはピクセルのグループ(たとえば、行)についての(変動するビット深度の)別個のインデックス値を使うのではなく、ブロック全体についての1ビットフラグを使ってパレット符号化ブロックを正確に再構築するために、本開示の技法を実装することができる。このようにして、パレットベースの復号ユニット165は、単色パレットコード化ブロックを再構築する際の、ビデオデコーダ30における計算リソース消費を節約することができ、単色パレットコード化ブロックを再構築するのに必要なデータを受信するためにビデオデコーダ30によって要求される帯域幅を削減することができ、一方で精度とピクチャ品質とを維持する。
[0192]記載されるように、ビデオエンコーダ20(ならびにその構成要素、たとえばパレットベースの符号化ユニット122および/または量子化ユニット106)は、強化された計算効率で、パレットコード化ブロックのエスケープピクセル値を量子化するために、本開示のいくつかの技法を実装することができる。ビデオデコーダ30(ならびにその様々な構成要素、たとえばパレットベースの復号ユニット165および/または逆量子化ユニット154)は、本開示の様々な技法に従ってエスケープピクセルを量子化解除するために、ビデオエンコーダ20を参照して上述したものと逆の演算を実施すればよい。たとえば、逆量子化ユニット154は、ビデオエンコーダ20からの符号化ビデオビットストリーム中で受信された情報に基づき、同じQP値を使って、単色チャネルのすべてのエスケープピクセルを量子化解除することができる。より具体的には、本開示の態様によると、逆量子化ユニット154は、現在のカラーチャネルを介して通信されるブロックのための従来の変換係数量子化解除のためのQP値に基づいて決定されるQP値を使って、特定のカラーチャネルを介して通信されるどのエスケープピクセル(またはそれらの予測誤差/残差値)も量子化解除することができる。いくつかの例では、逆量子化ユニット154は、異なるカラーチャネルの間で異なる、従来の変換係数コーディングに使われるQP値に基づき、異なるQP値を使って、異なるチャネルを介して通信されたエスケープピクセルを量子化解除するために本開示の技法を実装することができる。
[0193]このようにして、ビデオデコーダ30は、特定のカラーチャネルを介して通信されるすべてのエスケープピクセル(を量子化解除するために)単一QP値を定義し、適用するために、本明細書に記載される技法を実装することができる。したがって、既存のパレットベースのコーディング技法はエスケープピクセルについてのQP値を定義していなかったが、ビデオデコーダ30は、パレットベースのコーディングを通して検出されたエスケープピクセルについてのQP値を定義するために、本開示の態様を適用することができる。
[0194]いくつかの例では、逆量子化ユニット154など、ビデオデコーダ30の構成要素は、量子化されたエスケープピクセル値を量子化解除するためにビデオエンコーダ20(および/またはその構成要素、たとえば量子化ユニット106)を参照して上述したものに対する逆演算を実施するために、本開示の技法を実装することができる。たとえば、逆量子化ユニット154は、対応する量子化されたエスケープピクセル値を量子化解除する際のQP値に基づいて、(たとえば、対応する左シフト演算のための)シフト量を算出するために本開示の技法を実装することができる。このようにして、逆量子化ユニット154はまた、52エントリのマッピングテーブルを記憶するのではなく、関数を活用することによってストレージ使用などの計算リソースを節約するために、本開示の態様を適用することができる。
[0195]図4は、ビデオ復号デバイスが、条件の特定のセットに基づいて、パレットコード化ブロックのピクセルについてのインデックス値の復号をバイパスするために本開示の技法を実装し得るための例示的プロセス180を示すフローチャートである。プロセス180は本開示の態様による様々なデバイスによって実施され得るが、プロセス180は、説明を容易にするために、ここでは図1および図3のビデオデコーダ30を参照して記載される。プロセス180は、ビデオデコーダ30が、復号されるべきビデオデータのブロックのピクセル値を表すのに使われるパレット中に含まれるエントリの数を決定する(182)と、始まり得る。さらに、ビデオデコーダ30は、ビデオデータのブロックが、パレットのエントリのどれにも関連付けられていない少なくとも1つのエスケープピクセルを含むかどうかを決定することができる(184)。たとえば、ブロックのピクセルの色情報が、パレットのどのエントリにもマップしない場合、ビデオデコーダ30は、そのようなピクセルをエスケープピクセルと識別してよい。様々な例において、ビデオデコーダ30は、ビデオエンコーダ20によってシグナリングされたフラグを使って、またはビデオエンコーダ20によってシグナリングされたインデックス値(たとえば、上述した「他のインデックス」)によって、エスケープピクセルを識別することができる。
[0196]ビデオデコーダ30は、パレット中に含まれるエントリの数が1に等しいと、およびビデオデータのブロックが少なくとも1つのエスケープピクセルを含まないと決定したことに応答して、ビデオデータのブロックのピクセル値のためのパレットに関連付けられたインデックス値の復号をバイパスしてよい(186)。一例として、ビデオデコーダ30は、符号化ビデオビットストリームの一部として、ビデオデータのブロックに関連付けられた符号化ビデオデータ、たとえば、シンタックス要素および/またはフラグを受信することができ、ここにおいて、ブロックに関連付けられた符号化ビデオデータは、ブロックのピクセル値についての、パレットに関連付けられたインデックス値を含まない。さらに、ビデオデコーダ30は、ビデオデータのブロックのピクセル値が、パレット中に含まれる1つのエントリに等しいと決定することができる(188)。たとえば、ビデオデコーダ30は、パレットの単一エントリによって示される色情報をブロックのすべてのピクセルに割り当てることによって、ブロックを再構築することができる。
[0197]一例では、ビデオデコーダ30はさらに、符号化ビデオビットストリームの一部として、インデックス値がブロックビデオデータについて符号化されているかどうかを示すフラグを受信し得る。一例では、パレット中に含まれるエントリの数を決定するために、ビデオデコーダ30は、符号化ビデオビットストリームの一部として、パレット中のエントリの数が1に等しいかどうかを示すフラグを受信し得る。一例では、ビデオデータのブロックが少なくとも1つのエスケープピクセルを含むかどうかを決定するために、ビデオデコーダ30は、符号化ビデオビットストリームの一部として、ビデオデータのブロックが少なくとも1つのエスケープピクセルを含むかどうかを示すフラグを受信すればよい。一例では、ビデオデコーダ30は、符号化ビデオビットストリームの一部として、パレットに関連付けられた1つまたは複数のシンタックス要素を受信し得る。この例では、ビデオデコーダ30は、パレットに関連付けられた1つまたは複数のシンタックス要素を復号することができる。
[0198]図5は、ビデオ符号化デバイスが、条件の特定のセットに基づいて、パレットコード化ブロックのピクセルについてのインデックス値の符号化をバイパスするために本開示の技法を実装し得るための例示的プロセス200を示すフローチャートである。プロセス200は本開示の態様による様々なデバイスによって実施され得るが、プロセス200は、説明を容易にするために、ここでは図1および図2のビデオエンコーダ20を参照して記載される。プロセス200は、ビデオエンコーダ20が、符号化されるべきビデオデータのブロックのピクセル値を表すのに使われるパレット中に含まれるエントリの数を決定する(202)と、始まり得る。さらに、ビデオエンコーダ20は、ビデオデータのブロックが、パレット中のエントリのどれにも関連付けられていない少なくとも1つのエスケープピクセルを含むかどうかを決定することができる(204)。
[0199]ビデオエンコーダ20は、パレット中に含まれるエントリの数が1に等しいと、およびビデオデータのブロックが少なくとも1つのエスケープピクセルを含まないと決定したことに応答して、ブロックのピクセル値がパレットの1つのエントリに等しいと決定し、ビデオデータのブロックのピクセル値についての、パレットに関連付けられたインデックス値の符号化をバイパスしてよい(206)。たとえば、ビデオ符号化デバイス20は、ブロックのピクセル値を、ブロックに対応するパレット中のエントリにマップする符号化インデックス値なしで、ブロックについてのデータ、たとえば、シンタックス要素および/またはフラグを符号化することができる。さらに、ビデオ符号化デバイス20は、ビデオデータのブロックに関連付けられた1つまたは複数のシンタックス要素を符号化することができる(208)。
[0200]一例では、1つまたは複数のシンタックス要素を符号化するために、ビデオエンコーダ20は、符号化ビデオビットストリームの一部として、ビデオデータのブロックのピクセル値についてインデックス値が符号化されているかどうかを示すフラグを符号化すればよい。一例では、1つまたは複数のシンタックス要素を符号化するために、ビデオエンコーダ20は、符号化ビデオビットストリームの一部として、パレットのサイズが1に等しいかどうかを示すフラグを符号化すればよい。一例では、1つまたは複数のシンタックス要素を符号化するために、ビデオエンコーダ20は、符号化ビデオビットストリームの一部として、ビデオデータのブロックが少なくとも1つのエスケープピクセルを含むかどうかを示すフラグを符号化すればよい。一例では、ビデオエンコーダ20は、パレットに関連付けられた1つまたは複数のシンタックス要素を符号化してよい。この例では、ビデオエンコーダ20は、符号化ビデオビットストリームの一部として、パレットに関連付けられた1つまたは複数のシンタックス要素をシグナリングし得る。
[0201]図6は、ビデオ復号デバイスが、ビデオデータのパレットコード化ブロックの1つまたは複数のエスケープピクセルを量子化解除するために本開示の技法を実装し得るための例示的プロセス220を示すフローチャートである。プロセス220は本開示の態様による様々なデバイスによって実施され得るが、プロセス220は、説明を容易にするために、ここでは図1および図3のビデオデコーダ30を参照して記載される。プロセス220は、ビデオデコーダ30が、復号されるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定する(222)と、始まり得る。さらに、ビデオデコーダ30は、ビデオデータのブロック中で、パレット中の1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別し得る(224)。
[0202]ビデオデコーダ30は、非パレットベースのコーディングにおける変換係数コーディング用に使われるQP値に基づいて、所与のカラーチャネル用のブロックの1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別し得る(226)。たとえば、ビデオデコーダ30は、単一QP値が、ブロックに関連付けられたカラーチャネルの従来の係数復号に使われるQP値に等しいと決定してよい。さらに、ビデオデコーダ30は、識別された単一QP値を使って、1つまたは複数のエスケープピクセルの各々を量子化解除することができる(228)。ビデオデコーダ30は、量子化解除されたエスケープピクセル、およびパレット中の1つまたは複数のエントリに関連付けられた、ビデオデータのブロック中の1つまたは複数のピクセルについて受信されたインデックス値に基づいて、ビデオデータのブロックについてのピクセル値を決定することができる(230)。
[0203]一例では、パレットのどの2つのエントリも、少なくともパレット誤差限界だけ異なる。一例では、パレット誤差限界は、ブロックに関連付けられたパレットQP値に正比例する。一例では、1つまたは複数のエスケープピクセルを識別するために、ビデオデコーダ30は、符号化ビデオビットストリーム中で、1つまたは複数のエスケープピクセルの各々に関連付けられた1ビットフラグを受信し、各受信された1ビットフラグの値に基づいて、1つまたは複数のエスケープピクセルの各々が、パレットのエントリのいずれにも関連付けられていないと決定してよい。一例では、1つまたは複数のエスケープピクセルの各々がパレットのエントリのいずれにも関連付けられていないと決定するために、ビデオデコーダ30は、各受信された1ビットフラグの値に基づいて、およびエスケープピクセルに関連付けられた、あらかじめ定義された他のインデックス値を復号せずに、1つまたは複数のエスケープピクセルの各々がパレットのエントリのいずれにも関連付けられていないと決定し得る。
[0204]図7は、ビデオ符号化デバイスが、ビデオデータのパレットコード化ブロックの1つまたは複数のエスケープピクセルを量子化するために本開示の技法を実装し得るための例示的プロセス240を示すフローチャートである。プロセス240は本開示の態様による様々なデバイスによって実施され得るが、プロセス240は、説明を容易にするために、ここでは図1および図2のビデオエンコーダ20を参照して記載される。プロセス200は、ビデオエンコーダ20が、符号化されるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定する(242)と、始まり得る。さらに、ビデオエンコーダ20は、ビデオデータのブロック中で、パレット中の1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別し得る(244)。
[0205]ビデオエンコーダ20は、ブロックの1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別することができる(246)。たとえば、ビデオエンコーダ20は、単一QP値が、ブロックに関連付けられたカラーチャネルの従来の係数符号化に使われるQP値に等しいと決定してよい。さらに、ビデオエンコーダ20は、識別された単一QP値を使って、1つまたは複数のエスケープピクセルの各々を量子化することができる(228)。
[0206]一例では、単一QP値を識別するために、ビデオエンコーダ20は、単一QP値が、ブロックに関連付けられたカラーチャネルの従来の係数符号化に使われるQP値に等しいと決定してよい。一例では、ビデオエンコーダ20は、パレットのパレット誤差限界が、ブロックに関連付けられたQP値に正比例すると決定してよく、ここで、パレットのどの2つのエントリも、少なくともパレット誤差限界だけ異なる。一例では、パレット誤差限界を決定するために、ビデオエンコーダ20は、パレット誤差限界を、ブロックに関連付けられたQP値にマップするテーブルを使って、パレット誤差限界を識別すればよい。一例では、ビデオエンコーダ20は、エスケープピクセルに関連付けられた、あらかじめ定義された他のインデックス値を符号化せずに、1つまたは複数のエスケープピクセルの各々に関連付けられた1ビットフラグを符号化することができ、ここにおいて、各1ビットフラグの値は、1つまたは複数のエスケープピクセルのそれぞれの1つが、パレットのエントリのいずれにも関連付けられていないことを示す。一例では、識別された単一QP値を使って1つまたは複数のエスケープピクセルの各々を量子化するために、ビデオエンコーダ20は、識別された単一QP値に基づく関数を解けばよい。1つのそのような例では、関数を解くために、ビデオエンコーダ20は、識別された単一QP値に基づく右シフト演算を実施し得る。
[0207]いくつかの例では、ビデオデータのパレットベースのコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、下でより詳細に説明されるように、エンコーダまたはデコーダ、または複合エンコーダ−デコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディングと、さらにはパレットベースのコーディングとを実施するように構成され得る。
[0208]例によっては、本明細書で説明された技法のうちのいずれかの、いくつかの動作またはイベントは、異なる順序で実施され得、追加、統合、または完全に除外され得る(たとえば、すべての説明した動作またはイベントが、本技法の実施のために必要であるとは限らない)ことを認識されたい。さらに、いくつかの例では、作用またはイベントは、連続的にではなく、同時に、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して実施され得る。加えて、本開示の特定の態様が、明確さの目的のため、単一のモジュールまたはユニットによって実施されるものとして説明されているが、本開示の技法は、ビデオコーダに関連付けられたユニットまたはモジュールの組合せによって実施され得ることを理解されたい。
[0209]本開示のいくつかの態様が、説明のために開発中のHEVC規格に関して説明された。ただし、本開示で説明される技法は、他の規格またはまだ開発されていないプロプライエタリなビデオコーディング処理を含む、他のビデオコーディング処理にとって有用であり得る。
[0210]上で説明された技法は、ビデオエンコーダ20(図1および図2)ならびに/またはビデオデコーダ30(図1および図3)によって実施されてよく、ビデオエンコーダ20とビデオデコーダ30の両方が全般にビデオコーダと呼ばれ得る。同様に、ビデオコーディングは、適宜、ビデオ符号化またはビデオ復号を指し得る。
[0211]技法の様々な態様の特定の組合せが上で説明されたが、これらの組合せは、本開示で説明される技法の例を単に示すために与えられる。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示で説明される技法の様々な態様の任意の想起可能な組合せを包含し得る。
[0212]1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって処理され得る。コンピュータ可読媒体は、データ記憶媒体のような有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形のコンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のために命令、コード、および/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含むことができる。
[0213]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る、任意の他の媒体を備え得る。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、ウェブサイト、サーバ、または他のリモートソースから、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、一方、ディスク(disc)はデータをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0214]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の同等の集積された論理回路もしくは離散論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、「プロセッサ」という用語は、本明細書で使用するように、前述の構造のいずれか、または本明細書で説明された技法の実装に適した任意の他の構造を指し得る。加えて、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成されるか、または複合コーデックに組み込まれる、専用のハードウェアモジュールおよび/またはソフトウェアモジュール内で提供され得る。また、本技法は、1つまたは複数の回路または論理素子において完全に実装され得る。
[0215]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示される技法を実施するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットが説明されたが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。そうではなく、上で説明されたように、様々なユニットは、コーデックハードウェアユニット中で組み合わせられるか、または上で説明された1つもしくは複数のプロセッサを含む、適切なソフトウェアおよび/もしくはファームウェアとともに相互動作可能なハードウェアユニットの集合体によって提供され得る。
[0216]様々な例について説明してきた。これらおよび他の例は、以下の特許請求の範囲内である。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
ビデオデータを復号する方法であって、
復号されるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定することと、
前記ビデオデータブロック中で、前記パレット中の1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別することと、
非パレットベースのコーディングにおける変換係数コーディング用に使われるQP値に基づいて、所与のカラーチャネル用の前記ブロックの前記1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別することと、
前記識別された単一QP値を使って、前記1つまたは複数のエスケープピクセルの各々を量子化解除することと、
前記量子化解除されたエスケープピクセル、および前記パレット中の前記1つまたは複数のエントリに関連付けられた、前記ビデオデータブロック中の1つまたは複数のピクセルについて受信されたインデックス値に基づいて、前記ビデオデータブロックの前記ピクセル値を決定することとを備える方法。
[C2]
前記パレットのどの2つのエントリも、少なくともパレット誤差限界だけ異なり、
前記パレット誤差限界は、前記ブロックに関連付けられたパレットQP値に正比例する、C1に記載の方法。
[C3]
前記1つまたは複数のエスケープピクセルを識別することは、
符号化ビデオビットストリーム中で、前記1つまたは複数のエスケープピクセルの各々に関連付けられた1ビットフラグを受信することと、
各受信された1ビットフラグの値に基づいて、前記1つまたは複数のエスケープピクセルの各々が、前記パレットの前記エントリのいずれにも関連付けられていないと決定することとを備える、C1に記載の方法。
[C4]
前記1つまたは複数のエスケープピクセルの各々が、前記パレットの前記エントリのいずれにも関連付けられていないと決定することは、各受信された1ビットフラグの前記値に基づいて、およびエスケープピクセルに関連付けられた、あらかじめ定義された他のインデックス値を復号せずに、前記1つまたは複数のエスケープピクセルの各々が、前記パレットの前記エントリのいずれにも関連付けられていないと決定することを備える、C3に記載の方法。
[C5]
ビデオデータを符号化する方法であって、
符号化されるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定することと、
前記ビデオデータブロック中で、前記パレット中の前記1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別することと、
非パレットベースのコーディングにおける変換係数コーディング用に使われるQP値に基づいて、所与のカラーチャネル用の前記ブロックの前記1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別することと、
前記識別された単一QP値を使って、前記1つまたは複数のエスケープピクセルの各々を量子化することと、
前記量子化されたエスケープピクセルを含む、前記ビデオデータブロックの前記ピクセル値と、前記パレット中の前記1つまたは複数のエントリに関連付けられた、前記ビデオデータブロック中の1つまたは複数のピクセルについてのインデックス値とを符号化することとを備える方法。
[C6]
前記単一QP値を識別することは、
前記単一QP値が、前記ブロックに関連付けられたカラーチャネルの従来の係数符号化に使われるQP値に等しいと決定することを備える、C5に記載の方法。
[C7]
前記パレットのパレット誤差限界が、前記ブロックに関連付けられたQP値に正比例すると決定することをさらに備え、
前記パレットのどの2つのエントリも、少なくともパレット誤差限界だけバリーである、C5に記載の方法。
[C8]
前記パレット誤差限界を決定することは、
前記パレット誤差限界を前記ブロックに関連付けられた前記QP値にマップするテーブルを使って前記パレット誤差限界を識別することを備える、C7に記載の方法。
[C9]
エスケープピクセルに関連付けられた、あらかじめ定義された他のインデックス値を符号化せずに、前記1つまたは複数のエスケープピクセルの各々に関連付けられた1ビットフラグを符号化すること、ここにおいて、各1ビットフラグの値は、前記1つまたは複数のエスケープピクセルのそれぞれの1つが、前記パレットの前記エントリのいずれにも関連付けられていないことを示す、をさらに備える、C5に記載の方法。
[C10]
前記識別された単一QP値を使って、前記1つまたは複数のエスケープピクセルの各々を量子化することは、前記識別された単一QP値に基づく関数を解くことを備える、C5に記載の方法。
[C11]
前記関数を解くことは、前記識別された単一QP値に基づく右シフト演算を実施することを備える、C10に記載の方法。
[C12]
ビデオデータをコーディングするためのデバイスであって、
ビデオデータを記憶するように構成されたメモリと、
前記メモリと通信している1つまたは複数のプロセッサとを備え、前記1つまたは複数のプロセッサは、
コーディングされるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定し、
前記ビデオデータブロック中で、前記パレット中の1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別し、
非パレットベースのコーディングにおける変換係数コーディング用に使われるQP値に基づいて、所与のカラーチャネル用の前記ブロックの前記1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別し、
前記識別された単一QP値を、前記1つまたは複数のエスケープピクセルの各々に適用し、
前記エスケープピクセルに基づく、前記ビデオデータブロックの前記ピクセル値と、前記1つまたは複数のエントリに関連付けられた、前記ビデオデータブロック中の1つまたは複数のピクセルについて受信されたインデックス値とを決定するように構成される、デバイス。
[C13]
前記デバイスはビデオ復号デバイスを備え、
前記識別された単一QP値を、前記1つまたは複数のエスケープピクセルの各々に適用するために、前記1つまたは複数のプロセッサは、前記識別された単一QP値を使って、前記1つまたは複数のエスケープピクセルの各々を量子化解除するように構成される、C12に記載のデバイス。
[C14]
前記識別された単一QP値を、前記1つまたは複数のエスケープピクセルの各々に適用するために、前記1つまたは複数のプロセッサは、前記識別された単一QP値に基づいて、右シフト演算の実施を備える関数を解くように構成され、ここにおいて、前記関数、C12に記載のデバイス。
[C15]
前記パレットのどの2つのエントリも、少なくともパレット誤差限界だけバリーであり、
前記パレット誤差限界は、前記ブロックに関連付けられたパレットQP値に正比例する、C12に記載のデバイス。
[C16]
前記デバイスは、ビデオデータを符号化するためのデバイスを備え、
前記1つまたは複数のプロセッサは、
前記パレット誤差限界を前記ブロックに関連付けられた前記QP値にマップするテーブルを使って前記パレット誤差限界を識別するようにさらに構成される、C15に記載のデバイス。
[C17]
前記1つまたは複数のプロセッサは、それぞれの1ビットフラグを使って、前記1つまたは複数のエスケープピクセルの各々を識別するようにさらに構成される、C12に記載のデバイス。
[C18]
ビデオ復号デバイスをさらに備え、前記1つまたは複数のプロセッサは、
符号化ビデオビットストリーム中で、前記1つまたは複数のエスケープピクセルの各々に関連付けられた前記それぞれの1ビットフラグを受信し、
各受信された1ビットフラグの値に基づいて、およびエスケープピクセルに関連付けられた、あらかじめ定義された他のインデックス値を復号せずに、前記1つまたは複数のエスケープピクセルの各々が、前記パレットの前記エントリのいずれにも関連付けられていないと決定するようにさらに構成される、C12に記載のデバイス。
[C19]
命令で符号化されたコンピュータ可読記憶媒体であって、前記命令は、実行されると、コンピューティングデバイスの1つまたは複数のプロセッサに、
コーディングされるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定させ、
前記ビデオデータブロック中で、前記パレット中の1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別させ、
非パレットベースのコーディングにおける変換係数コーディング用に使われるQP値に基づいて、所与のカラーチャネル用の前記ブロックの前記1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別させ、
前記識別された単一QP値を、前記1つまたは複数のエスケープピクセルの各々に適用させ、
前記エスケープピクセルに基づく、前記ビデオデータブロックの前記ピクセル値と、前記1つまたは複数のエントリに関連付けられた、前記ビデオデータブロック中の1つまたは複数のピクセルについて受信されたインデックス値とを決定させる、コンピュータ可読記憶媒体。
[C20]
符号化されるべきビデオデータのブロックのピクセル値を表すのに使われるパレットを決定するための手段と、
前記ビデオデータブロック中で、前記パレット中の1つまたは複数のエントリのいずれにも関連付けられていない1つまたは複数のエスケープピクセルを識別するための手段と、
非パレットベースのコーディングにおける変換係数コーディング用に使われるQP値に基づいて、所与のカラーチャネル用の前記ブロックの前記1つまたは複数のエスケープピクセルすべてについての単一量子化パラメータ(QP)値を識別するための手段と、
前記識別された単一QP値を、前記1つまたは複数のエスケープピクセルの各々に適用するための手段と、
前記エスケープピクセルに基づく、前記ビデオデータブロックの前記ピクセル値と、前記1つまたは複数のエントリに関連付けられた、前記ビデオデータブロック中の1つまたは複数のピクセルについて受信されたインデックス値とを決定するための手段とを備える装置。