本開示の態様は、コンテンツのコーディング(たとえば、ビデオコーディング)のための技法を対象とする。具体的には、本開示は、コンテンツデータ(たとえば、ビデオデータ)のパレットベースのコーディングのための技法と、パレットコーディング情報のコンテキストベース適応型バイナリ算術コーディング(CABAC:context-based adaptive binary arithmetic coding)のための技法とを説明する。本開示の様々な例において、本開示の技法は、以下でより詳細に説明されるように、コーディング効率を上げ、かつ/またはコーデックの複雑さを下げるための、パレットモードでブロックを予測またはコーディングするプロセスを対象とし得る。たとえば、本開示は、パレットインデックスのグループ化(進化したパレットインデックスのグループ化など)に関する技法を説明する。
CABACプロセスでは、たとえば、D. Marpe、H. Schwarz、およびT. Wiegand、「Context-based adaptive binary arithmetic coding in the H.264/AVC video compression standard」、IEEE Trans. Cir. & Sys. Video Tech、Vol. 13、No. 7、2003年7月において説明されるように、(1)バイパスモードおよび(2)コンテキストモードという2つのモードがある。バイパスモードでは、コンテキスト更新プロセスはない。したがって、バイパスモードは、ハードウェアまたはISAレベルの並列処理を利用することによって、コンテキストベースのモードよりも高いデータスループットを達成することができる。このバイパスモードの利点は、一緒に処理されることが可能なバイパスビンの数が増えるにつれて、より大きくなる。
現在のパレットモードコーディングの設計では、R. JoshiおよびJ. Xu、「High efficient video coding (HEVC) screen content coding: Draft 2」、JCTVC-S1005において説明されるように、スクリーンコンテンツのコーディングにおいて、palette_index_idcおよびpalette_escape_valのシンタックス要素は、CABACバイパスモードコーディングされ、CABACコンテキストモードコーディングされるpalette_run_msb_id_plus1などの他のシンタックス要素とインターリーブされる。本開示は、バイパスモードコーディングされるシンタックス要素を一緒にグループ化する技法を説明する。本明細書では、「バイパスモードコーディングされる」および「コンテキストモードコーディングされる」は、それぞれ「バイパスコーディングされる」および「コンテキストコーディングされる」と交換可能である。
本明細書では、「コンテンツ」という用語の事例は「ビデオ」という用語に変更されることが可能であり、「ビデオ」という用語の事例は「コンテンツ」という用語に変更されることが可能である。これは、「コンテンツ」または「ビデオ」という用語が、形容詞として使用されるか、名詞として使用されるか、または他の品詞として使用されるかにかかわらず当てはまる。たとえば、「コンテンツコーダ」への言及は「ビデオコーダ」への言及も含み、「ビデオコーダ」への言及は「コンテンツコーダ」への言及も含む。同様に、「コンテンツ」への言及は「ビデオ」への言及も含み、「ビデオ」への言及は「コンテンツ」への言及も含む。
本明細書では、「コンテンツ」は任意のタイプのコンテンツを指す。たとえば、「コンテンツ」は、ビデオ、スクリーンコンテンツ、画像、任意のグラフィカルコンテンツ、任意の表示可能コンテンツ、またはそれらに対応する任意のデータ(たとえば、ビデオデータ、スクリーンコンテンツデータ、画像データ、グラフィカルコンテンツデータ、表示可能コンテンツデータなど)を指し得る。
本明細書では、「ビデオ」という用語は、スクリーンコンテンツ、動くコンテンツ、順次的に提示され得る複数の画像、またはそれらに対応する任意のデータ(たとえば、スクリーンコンテンツデータ、動くコンテンツデータ、ビデオデータ、画像データなど)を指し得る。
本明細書では、「画像」という用語は、単一の画像、1つまたは複数の画像、ビデオに対応する複数の画像のうちの1つまたは複数の画像、ビデオに対応しない複数の画像のうちの1つまたは複数の画像、ビデオに対応する複数の画像(たとえば、ビデオに対応する画像のすべてまたはビデオに対応する画像のすべて未満)、単一の画像の下位部分(sub-part)、単一の画像の複数の下位部分、複数の画像に対応する複数の下位部分、1つまたは複数のグラフィックスプリミティブ、画像データ、グラフィカルデータなどを指し得る。
従来のビデオコーディングでは、画像は、階調が連続的であり空間的に滑らかであるものと想定される。これらの想定に基づいて、ブロックベースの変換、フィルタリング、および他のコーディングツールなどの様々なツールが開発されており、そのようなツールは、自然なコンテンツのビデオに対しては良好な性能を示してきた。しかしながら、リモートデスクトップ、共同作業用ディスプレイ、およびワイヤレスディスプレイのような適用例では、コンピュータにより生成されるスクリーンコンテンツが、圧縮されるべき主要コンテンツであることがある。このタイプのスクリーンコンテンツは、離散的な階調、鋭い線、および高コントラストのオブジェクト境界を有する傾向がある。連続的な階調および滑らかさという想定はもはや当てはまらないことがあり、したがって従来のビデオコーディング技法は、コンテンツ(たとえば、スクリーンコンテンツ)を圧縮するには非効率であることがある。
パレットベースのビデオコーディングの一例では、ビデオエンコーダは、ブロックのためのパレットを決定すること(たとえば、パレットを明示的にコーディングすること、パレットを予測すること、またはそれらの組合せ)と、1つまたは複数の画素の値を表すためのパレットの中のエントリを探し出すことと、ブロックの画素値を表すために使用されるパレットの中のエントリを示すインデックス値とともにパレットとブロックの両方を符号化することとによって、ビデオデータのブロックを符号化し得る。いくつかの例では、ビデオエンコーダは、符号化されたビットストリームの中でパレットおよび/またはインデックス値をシグナリングし得る。次いで、ビデオデコーダが、ブロックのためのパレット、ならびにブロックの個々の画素のインデックス値を、符号化されたビットストリームから取得し得る。ビデオデコーダは、ブロックの様々な画素値を再構築するために、画素のインデックス値をパレットのエントリと関連付けることができる。
たとえば、ビデオデータの特定のエリアが、相対的に少数の色を有すると想定され得る。ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、特定のエリアのビデオデータを表すために、いわゆる「パレット」をコーディング(たとえば、符号化または復号)し得る。パレットは、特定のエリア(たとえば、所与のブロック)のビデオデータを表す色または画素値のインデックス(たとえば、テーブル)として表現され得る。ビデオコーダはインデックスをコーディングすることができ、インデックスは1つまたは複数の画素値をパレットの中の適切な値に関連付ける。各画素は、画素の色を表すパレットの中のエントリと関連付けられ得る。たとえば、パレットは、所与のブロックの中の最も支配的な画素値を含み得る。場合によっては、最も支配的な画素値は、ブロック内で最も頻繁に出現する1つまたは複数の画素値を含み得る。加えて、場合によっては、ビデオコーダは、ある画素値がブロックの中で最も支配的な画素値の1つとして含まれるべきかどうかを決定するために、閾値を適用することができる。パレットベースのコーディングの様々な態様によれば、ビデオコーダは、ビデオデータの現在のブロックの実際の画素値またはそれらの残差をコーディングする代わりに、現在のブロックの画素値の1つまたは複数を示すインデックス値をコーディングすることができる。パレットベースのコーディングの文脈では、インデックス値は、現在のブロックの個々の画素値を表すために使用されるパレットの中のそれぞれのエントリを示す。上の説明は、パレットベースのビデオコーディングの全般的な説明を提供することを意図する。
パレットベースのコーディングは、1つまたは複数の従来のコーディングツールが非効率的である、スクリーンにより生成されるコンテンツのコーディングまたは他のコンテンツに特に適していることがある。ビデオデータのパレットベースのコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法などの、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、以下でより詳細に説明されるように、エンコーダもしくはデコーダ、または組み合わされたエンコーダデコーダ(コーデック)が、インター予測コーディングおよびイントラ予測コーディング、ならびにパレットベースのコーディングを実行するように構成され得る。
いくつかの例では、パレットベースのコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。たとえば、High Efficiency Video Coding(HEVC)は、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)によって開発されている新しいビデオコーディング規格である。完成したHEVC規格文書は、「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月として公開されている。
スクリーンにより生成されたコンテンツのより効率的なコーディングを行うために、JCT-VCは、HEVC Screen Content Coding(SCC)規格と呼ばれるHEVC規格に対する拡張を開発している。「HEVC SCC Draft 2」または「WD2」と呼ばれるHEVC SCC規格の最近のワーキングドラフトは、文書JCTVC-S1005、R. JoshiおよびJ. Xu、「HEVC screen content coding draft text 2」、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のJoint Collaborative Team on Video Coding(JCT-VC)、第19回会合、ストラスブール、フランス、2014年10月17〜24日に記載されている。
HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおける予測ユニット(PU)モードとして使用されるように構成され得る。したがって、CUモードの文脈において説明される、以下の開示されるプロセスのすべてが、付加的または代替的に、PUに適用され得る。しかしながら、そのような技法は、独立に機能するように、または他の既存の、もしくはこれから開発されるシステム/規格の一部として機能するように適用され得るので、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または限定と見なされるべきでない。これらの場合には、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、または非矩形形状の領域でさえあり得る。
いくつかの例では、パレットは、1つまたは複数のCU、PU、またはデータの任意の領域(たとえば、データの任意のブロック)のために導出され得る。たとえば、パレットは、現在のCUにおいて最も支配的な画素値を備えることがあり(かつそれらから構成されることがあり)、CUはこの特定の例ではデータの領域である。パレットのサイズおよび要素がまず、ビデオエンコーダからビデオデコーダに送信される。パレットのサイズおよび/または要素は、直接コーディングされることが可能であり、または、隣接CU(たとえば、上および/または左のコーディングされたCU)の中のパレットのサイズおよび/または要素を使用して予測的にコーディングされることが可能である。その後、CUの中の画素値が、ある走査順序に従ってパレットに基づいて符号化される。CUの中の各画素位置に対して、フラグ(たとえば、palette_flagまたはescape_flag)がまず、画素値がパレットに含まれるかどうかを示すために送信され得る。パレットの中のエントリにマッピングする画素値に対しては、CUの中の所与の画素位置のために、そのエントリと関連付けられるパレットインデックスがシグナリングされる。フラグ(たとえば、palette_flagまたはescape_flag)を送信する代わりに、パレットの中に存在しない画素値に対しては、特別なインデックスが画素に割り当てられることがあり、(場合によっては量子化された形態の)実際の画素値がCUの中の所与の画素位置のために送信され得る。これらの画素は、「エスケープ画素」と呼ばれる。エスケープ画素は、固定長コーディング、単項コーディングなどの任意の既存のエントロピーコーディング方法を使用してコーディングされ得る。いくつかの例では、本明細書において説明される1つまたは複数の技法は、palette_flagまたはescape_flagなどのフラグを利用することがある。他の例では、本明細書において説明される1つまたは複数の技法は、palette_flagまたはescape_flagなどのフラグを利用しないことがある。
ビデオデータのブロックの中のサンプルは、水平方向のラスター走査順序または他の走査順序を使用して処理(たとえば、走査)され得る。たとえば、ビデオエンコーダは、水平方向のラスター走査順序を使用してパレットインデックスを走査することによって、パレットインデックスの2次元ブロックを1次元のアレイに変換することができる。同様に、ビデオデコーダは、水平方向のラスター走査順序を使用してパレットインデックスのブロックを再構築することができる。したがって、本開示は、走査順序においてブロック中の現在コーディングされているサンプルよりも前にあるサンプルのことを、以前のサンプルと呼び得る。垂直方向のラスター走査順序などの、水平方向のラスター走査以外の走査も適用可能であり得ることを理解されたい。上の例、ならびに本開示に記載される他の例は、パレットベースのビデオコーディングの全般的な記述を与えることを意図している。
図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書では、「ビデオコーダ」という用語は、総称的に、ビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指すことがある。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示において説明される様々な例によるパレットベースのビデオコーディングおよびエントロピーコーディング(たとえば、CABAC)のための技法を実行するように構成され得るデバイスの例を表す。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、HEVCコーディングにおけるCUまたはPUなどのビデオデータの様々なブロックを、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して選択的にコーディングするように構成され得る。非パレットベースのコーディングモードは、HEVC規格によって規定される様々なコーディングモードなどの、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。
図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12および宛先デバイス14を含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれ得る。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれ得る。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車載コンピュータなどを含む、広範囲のデバイスを備え得る。
宛先デバイス14は、符号化されたビデオデータをソースデバイス12からチャネル16を介して受信し得る。チャネル16は、符号化されたビデオデータをソースデバイス12から宛先デバイス14に移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12がリアルタイムで符号化されたビデオデータを宛先デバイス14に直接送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14へ送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路などの、ワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などの、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にする他の機器を含み得る。
別の例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの、ローカルにアクセスされる様々なデータ記憶媒体を含み得る。
さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ファイルサーバまたは他の中間記憶デバイスにおいて記憶された符号化されたビデオデータに、ストリーミングまたはダウンロードを介してアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶するとともに符号化されたビデオデータを宛先デバイス14へ送信することが可能なタイプのサーバであり得る。例示的なファイルサーバは、ウェブサーバ(たとえば、ウェブサイト用の)、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
宛先デバイス14は、インターネット接続などの標準的なデータ接続を通じて符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、ファイルサーバに記憶されている符号化されたビデオデータにアクセスするために適切である、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであってよい。
ソースデバイス12および宛先デバイス14は、本開示によるパレットベースのコーディングおよびエントロピーコーディング(たとえば、CABAC)を実行するように構成され得る。しかしながら、パレットベースのコーディングまたはCABACのための本開示の技法は、ワイヤレスの用途または設定に限定されない。技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえば、インターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話のような用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含まないビデオコーディングの設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データは、ローカルメモリからの取り出し、ネットワークを介したストリーミングなどが行われる。ビデオ符号化デバイスはデータを符号化してメモリに記憶することができ、かつ/またはビデオ復号デバイスはメモリからデータを取り出して復号することができる。多くの例では、互いに通信しないが、単にデータをメモリへと符号化し、かつ/またはメモリからデータを取り出して復号するデバイスによって、符号化および復号が実行される。
図1の例では、ソースデバイス12は、ビデオソース18、ビデオエンコーダ20、および出力インターフェース22を含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、たとえば、ビデオカメラ、前にキャプチャされたビデオデータを含むビデオアーカイブ、ビデオデータをビデオコンテンツプロバイダから受信するためのビデオフィードインターフェース、および/もしくはビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、符号化されたビデオデータを宛先デバイス14へ出力インターフェース22を介して直接送信する。他の例では、復号および/または再生のために宛先デバイス14が後でアクセスするために、符号化されたビデオデータはまた、記憶媒体またはファイルサーバへ記憶され得る。
図1の例では、宛先デバイス14は、入力インターフェース28、ビデオデコーダ30、およびディスプレイデバイス32を含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、符号化されたビデオデータをチャネル16を介して受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化されてよく、または宛先デバイス14の外部にあってもよい。一般に、ディスプレイデバイス32は復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備え得る。
本開示は、全般に、ある情報をビデオデコーダ30などの別のデバイスへ「シグナリング」または「送信」するビデオエンコーダ20に言及し得る。「シグナリングすること」または「送信すること」という用語は、全般に、シンタックス要素、および/または圧縮されたビデオデータを復号するために使用される他のデータの通信を指し得る。そのような通信は、リアルタイムで、またはほぼリアルタイムで発生し得る。代替的に、そのような通信は、ある時間の範囲にわたって、たとえば、符号化の時点において符号化されたビットストリームの中のシンタックス要素をコンピュータ可読記憶媒体に記憶するときに発生することがあり、次いで、シンタックス要素が、この媒体に記憶された後の任意の時点において復号デバイスによって取り出され得る。したがって、ビデオデコーダ30がある情報を「受信する」と呼ばれることがあるが、情報の受信は、必ずしもリアルタイムで、またはほぼリアルタイムで発生するとは限らず、記憶後のある時点で媒体から取り出されることがある。
ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のいずれかとして実装され得る。技法が部分的にソフトウェアで実施される場合、本開示の技法を実行するために、デバイスは、ソフトウェアのための命令を適切な非一時的コンピュータ可読記憶媒体に記憶することができ、1つまたは複数のプロセッサを使用するハードウェアにおいて命令を実行することができる。前述のもの(ハードウェア、ソフトウェア、ハードウェアおよびソフトウェアの組合せなどを含む)のいずれもが、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、それらのいずれかが、組み合わされたエンコーダ/デコーダ(コーデック)の一部としてそれぞれのデバイスの中で一体化されてよい。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上述のHEVC規格などの、HEVC規格において記載されているビデオ圧縮規格に従って動作する。ベースのHEVC規格に加えて、HEVC向けのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を制作するための取り組みが進行中である。加えて、たとえば、本開示において説明されるようなパレットベースのコーディングモードは、HEVC規格の拡張のために提供され得る。いくつかの例では、パレットベースのコーディングのための本開示において説明される技法は、他のビデオコーディング規格に従って動作するように構成されたエンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングに対するパレットベースのコーディングモードの適用は、例として説明される。
HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは通常、一連のピクチャを含む。ピクチャは、「フレーム」と呼ばれることもある。ピクチャは、SL、SCb、およびSCrと表記される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書で「クロマ」サンプルと呼ばれることもある。他の事例では、ピクチャはモノクロであることがあり、ルーマサンプルのアレイだけを含むことがある。
ピクチャの符号化された表現を生成するために、ビデオエンコーダ20が、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックと概ね類似していることがある。しかしながら、CTUは、必ずしも特定のサイズに限定されず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスター走査において連続的に順序付けられた整数個のCTUを含み得る。コーディングされたスライスは、スライスヘッダおよびスライスデータを備え得る。スライスのスライスヘッダは、スライスについての情報を提供するシンタックス要素を含むシンタックス構造であり得る。スライスデータは、スライスのコーディングされたCTUを含み得る。
本開示は、サンプルの1つまたは複数のブロックのサンプルをコーディングするために使用される1つまたは複数のサンプルブロックおよびシンタックス構造を指すために、「ビデオユニット」または「ビデオブロック」または「ブロック」という用語を使用し得る。例示的なタイプのビデオユニットまたはブロックは、CTU、CU、PU、変換ユニット(TU)、マクロブロック、マクロブロック区分などを含み得る。いくつかの文脈では、PUの議論はマクロブロックまたはマクロブロック区分の議論と相互に交換され得る。
コーディングされたCTUを生成するために、ビデオエンコーダ20がCTUのコーディングツリーブロック上で4分木区分を再帰的に実行して、コーディングツリーブロックをコーディングブロックに分割することができ、したがって、「コーディングツリーユニット」という名前である。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、Cbサンプルアレイ、およびCrサンプルアレイを有するピクチャの、ルーマサンプルのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロック、ならびにそれらのコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの、長方形(すなわち、正方形または非正方形)のブロックであり得る。CUの予測ユニット(PU)は、ピクチャのルーマサンプルの予測ブロック、クロマサンプルの2つの対応する予測ブロック、および予測ブロックサンプルを予測するために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのための、予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
ビデオエンコーダ20は、PUの予測ブロックを生成するために、イントラ予測またはインター予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。
ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャ以外の1つまたは複数のピクチャの復号されるサンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために、単予測または双予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
ビデオエンコーダ20がCUの1つまたは複数のPUに対して予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成した後、ビデオエンコーダ20は、CUの残差ブロックを生成し得る。CUの残差ブロックの中の各サンプルは、CUの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コーディングブロック中の対応するサンプルとの差分を示し得る。
さらに、ビデオエンコーダ20は、4分木区分を使用して、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を1つまたは複数の変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)に区分し得る。変換ブロックは、同じ変換が適用されるサンプルの、長方形のブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックと関連付けられ得る。TUと関連付けられるルーマ変換ブロックは、CUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
ビデオエンコーダ20は、1つまたは複数の変換を変換ブロックに適用して、TUの係数ブロックを生成し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数はスカラー量であり得る。たとえば、ビデオエンコーダ20は、1つまたは複数の変換をTUのルーマ変換ブロックに適用して、TUのルーマ係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCb変換ブロックに適用して、TUのCb係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCr変換ブロックに適用して、TUのCr係数ブロックを生成し得る。
係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後、ビデオエンコーダ20は、係数ブロックを量子化し得る。量子化は一般に、変換係数が量子化されて、場合によっては、変換係数を表すために使用されるデータの量を低減し、さらなる圧縮をもたらすプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行し得る。
CABACに関して、例として、ビデオエンコーダ20およびビデオデコーダ30は、コンテキストに基づいて、ビデオデータのブロックと関連付けられるシンボルをコーディングするための確率モデル(コンテキストモデルとも呼ばれる)を選択し得る。たとえば、コンテキストモデル(Ctx)は、各々が特定の確率モデルに対応し得る複数の異なるコンテキストの1つを選択するために適用される、インデックスまたはオフセットであることがあり得る。したがって、通常は、異なる確率モデルが各コンテキストに対して定義される。ビンを符号化または復号した後で、確率モデルはさらに、ビンに対する最新の確率推定を反映するように、ビンの値に基づいて更新される。たとえば、確率モデルは、有限状態機械において状態として維持され得る。各々の特定の状態は、特定の確率値に対応し得る。確率モデルの更新に対応する次の状態は、現在のビン(たとえば、現在コーディングされているビン)の値に依存し得る。したがって、確率モデルの選択は、以前にコーディングされたビンの値の影響を受けることがあり、それは、この値が、ビンが所与の値を有する確率を少なくとも一部示すからである。上で説明されたコンテキストコーディングプロセスは、一般に、コンテキスト適応型コーディングモードと呼ばれ得る。
したがって、ビデオエンコーダ20は、確率モデルを使用してターゲットシンボルを符号化し得る。同様に、ビデオデコーダ30は、確率モデルを使用してターゲットシンボルを構文解析し得る。いくつかの事例では、ビデオエンコーダ20は、コンテキスト適応型コーディングおよび非コンテキスト適応型コーディングの組合せを使用してシンタックス要素をコーディングし得る。たとえば、ビデオエンコーダ20は、ビンの一部をコーディングするためのコンテキストにおいて動作する確率モデルまたは「コンテキストモデル」を選択することによって、ビンをコンテキストコーディングし得る。対照的に、他のビンに対しては、ビデオエンコーダ20は、ビンをコーディングするときに通常の算術コーディングプロセスを迂回または省略することによって、ビンをバイパスコーディングし得る。そのような例では、ビデオエンコーダ20は、ビンをバイパスコーディングするために、固定された確率モデルを使用し得る。すなわち、バイパスコーディングされるビンは、コンテキスト更新または確率更新を含まない。
ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。ビットストリームはまた、エントロピー符号化されないシンタックス要素を含み得る。ビットストリームは、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含み得る。ビットストリームは、ネットワーク抽象化レイヤ(NAL)ユニットのシーケンスを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP)を封入する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって規定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内に封入された整数個のバイトを含むシンタックス構造であり得る。いくつかの事例では、RBSPは、0個のビットを含む。
異なるタイプのNALユニットは、異なるタイプのRBSPを封入し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)のためのRBSPを封入することがあり、第2のタイプのNALユニットはコーディングされたスライスのためのRBSPを封入することがあり、第3のタイプのNALユニットは補足強化情報(SEI)のためのRBSPを封入することがあり、以下同様である。(パラメータセットおよびSEIメッセージのためのRBSPではなく)ビデオコーディングデータのためのRBSPを封入するNALユニットは、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれ得る。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、シンタックス要素をビットストリームから復号するために、ビットストリームを構文解析し得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも一部基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは全般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、PUのMVを使用して、現在のCUのインター予測されるPUの予測ブロックを決定し得る。同様に、ビデオデコーダ30は、現在のCUのPUのイントラ予測されるブロックを生成し得る。加えて、ビデオデコーダ30は、現在のCUのTUと関連付けられる変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、変換係数ブロックに対して逆変換を実行して、現在のCUのTUと関連付けられる変換ブロックを再構築し得る。ビデオデコーダ30は、現在のCUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの逆量子化および逆変換から得られる対応する残差値に加算することによって、現在のCUのコーディングブロックを再構築し得る。ピクチャのCUごとにコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築し得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。たとえば、パレットベースのコーディングでは、上で説明されたイントラ予測またはインター予測コーディング技法を実行するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表す色または画素値のテーブルとして、いわゆるパレットをコーディングし得る。このようにして、ビデオデータの現在のブロックの実際の画素値またはそれらの残差をコーディングするのではなく、ビデオコーダは、現在のブロックの画素値の1つまたは複数のインデックス値をコーディングすることができ、インデックス値は、現在のブロックの画素値を表すために使用されるパレットの中のエントリを示す。
たとえば、ビデオエンコーダ20は、ブロックのためのパレットを決定することと、各画素の値を表すためのパレットの中のエントリを探し出すことと、パレットおよび画素値をパレットに関連付ける画素のインデックス値を符号化することとによって、ビデオデータのブロックを符号化し得る。ビデオデコーダ30は、ブロックのためのパレット、ならびにブロックの画素のためのインデックス値を、符号化されたビットストリームから取得し得る。ビデオデコーダ30は、個々の画素のインデックス値をパレットのエントリと照合して、ブロックの画素値を再構築し得る。個々の画素と関連付けられるインデックス値がブロックのための対応するパレットのいずれのインデックス値とも一致しない事例では、ビデオデコーダ30は、パレットベースのコーディングの目的で、そのような画素をエスケープ画素として特定し得る。
以下でより詳細に説明されるように、パレットベースのコーディングの基本的な考え方は、コーディングされるべきビデオデータの所与のブロックに対して、ビデオエンコーダ20が現在のブロックの中の最も支配的な画素値を含むパレットを導出し得るということである。たとえば、パレットは、現在のCUに対して支配的および/または代表的であると決定または想定される、いくつかの画素値を指し得る。ビデオエンコーダ20はまず、パレットのサイズおよび要素をビデオデコーダ30に送信し得る。加えて、ビデオエンコーダ20は、ある走査順序に従って、所与のブロックの中の画素値を符号化し得る。所与のブロックに含まれる各画素に対して、ビデオエンコーダ20は、画素値をパレットの中の対応するエントリにマッピングするインデックス値をシグナリングし得る。画素値がパレットに含まれない(すなわち、パレットコーディングされるブロックの特定の画素値を指定するパレットエントリが存在しない)場合、そのような画素は「エスケープ画素」として定義される。パレットベースのコーディングに従って、ビデオエンコーダ20は、エスケープ画素のために確保されるインデックス値を符号化してシグナリングし得る。いくつかの例では、ビデオエンコーダ20はまた、所与のブロックに含まれるエスケープ画素の画素値(またはその量子化されたバージョン)を符号化してシグナリングし得る。たとえば、ビデオデコーダ30は、歪みの尺度(たとえば、MSE、SADなど)に基づいて、画素値がパレットエントリと一致するかどうか、またはそうでなければパレットエントリに近いかどうかを決定するように構成され得る。
ビデオエンコーダ20によってシグナリングされる符号化されたビデオビットストリームを受信すると、ビデオデコーダ30はまず、ビデオエンコーダ20から受信された情報に基づいてパレットを決定し得る。ビデオデコーダ30は次いで、所与のブロックの中の画素位置と関連付けられる受信されたインデックス値をパレットのエントリにマッピングして、所与のブロックの画素値を再構築し得る。いくつかの事例では、ビデオデコーダ30は、エスケープ画素のために確保されたインデックス値を用いて画素がパレットコーディングされると決定することなどによって、パレットコーディングされるブロックの画素がエスケープ画素であると決定し得る。ビデオデコーダ30がパレットコーディングされたブロックの中のエスケープ画素を特定する事例では、ビデオデコーダ30は、所与のブロックに含まれるエスケープ画素の画素値(またはその量子化されたバージョン)を受信し得る。ビデオデコーダ30は、個々の画素値を対応するパレットエントリにマッピングすることによって、および、画素値(またはその量子化されたバージョン)を使用してパレットコーディングされたブロックに含まれるあらゆるエスケープ画素を再構築することによって、パレットコーディングされたブロックを再構築し得る。
上で述べられたように、ある例示的なパレットコーディングモードでは、パレットはインデックスによって番号付けされたエントリを含み得る。各エントリは、(たとえば、YCbCr、RGB、YUV、CMYK、または他のフォーマットなどの色空間における)色成分の値または強度を表すことがあり、これらは、ブロックのための予測子または最終的な再構築されたブロックサンプルとして使用され得る。規格提案文書JCTVC-Q0094(Wei Pu他、「AHG10: Suggested Software for Palette Coding based on RExt6.0」、JCTVC-Q0094、バレンシア、スペイン、2014年3月27日〜4月4日)に記載されるように、パレットは予測子パレットからコピーされるエントリを含み得る。予測子パレットは、パレットモードを使用して以前にコーディングされたブロックからの、または他の再構築されたサンプルからのパレットエントリを含み得る。予測子パレットの中の各エントリに対して、エントリが現在のパレットにコピーされる(フラグ=1によって示される)かどうかを示すために、バイナリのフラグが送信される。これは、バイナリパレット予測ベクトルと呼ばれる。加えて、現在のパレットは、明示的にシグナリングされる新しいエントリを備える(たとえば、それから構成される)ことがある。新しいエントリの数もシグナリングされ得る。
別の例として、パレットモードでは、パレットは、ブロックサンプルのための予測子または最終的な再構築されたブロックサンプルとして使用され得る色成分値を表すインデックスによって番号付けされたエントリを含み得る。パレットの中の各エントリは、たとえば、1つのルーマ成分(たとえば、ルーマ値)、2つのクロマ成分(たとえば、2つのクロマ値)、または3つの色成分(たとえば、RGB、YUVなど)を含むことがある。事前に復号されたパレットエントリがリストに記憶され得る。このリストは、たとえば、現在のパレットモードCUの中のパレットエントリを予測するために使用され得る。リストの中のどのエントリが現在のパレットの中で再使用されるかを示すために、ビットストリームの中でバイナリ予測ベクトルがシグナリングされ得る。いくつかの例では、ランレングスコーディングが、バイナリパレット予測子を圧縮するために使用され得る。たとえば、ランレングス値は、0次の指数ゴロム符号を使用してコーディングされ得る。
本開示では、各パレットエントリがサンプルのすべての色成分の値を規定することが仮定される。しかしながら、本開示の概念は、各色成分に対して別個のパレットおよび/または別個のパレットエントリを使用することに適用可能である。また、ブロックの中のサンプルは、水平方向のラスター走査順序を使用して処理されると仮定される。しかしながら、垂直方向のラスター走査順序などの他の走査も適用可能である。上述のように、パレットは、たとえば以前のブロックをコーディングするために使用されるパレットから予測される、予測されるパレットエントリと、現在のブロックに対して固有であることがあり明示的にシグナリングされる新しいエントリとを含むことがある。エンコーダおよびデコーダは、予測されるパレットエントリおよび新しいパレットエントリの数を知っていることがあり、それらの合計は、ブロックの中の全体のパレットサイズを示すことがある。
上で列挙されたJCTVC-Q0094の例において提案されるように、パレットを用いてコーディングされるブロックの中の各サンプルは、以下に記載されるような3つのモードのうちの1つに属し得る。
・Escapeモード。このモードでは、サンプル値はパレットエントリとしてパレットに含まれず、量子化されたサンプル値がすべての色成分に対して明示的にシグナリングされる。Escapeモードは新たなパレットエントリのシグナリングに似ているが、新たなパレットエントリに対しては、色成分の値が量子化されない。
・CopyAboveモード(CopyFromTopモードとも呼ばれる)。このモードでは、現在のサンプルのパレットエントリインデックスは、サンプルのブロックの中の現在のサンプルのすぐ上に位置するサンプルからコピーされる。他の例では、copy aboveモードに対して、ブロックの上のサンプルが実際にはブロックの左のサンプルであるように、ビデオデータのブロックが転置され得る。
・Valueモード(インデックスモードとも呼ばれる)。このモードでは、パレットエントリインデックスの値は明示的にシグナリングされる。
本明細書において説明されるように、パレットエントリインデックスは、パレットインデックスまたは単にインデックスと呼ばれることがある。これらの用語は、本開示の技法を説明するために交換可能に使用され得る。加えて、以下でより詳細に説明されるように、パレットインデックスは、1つまたは複数の関連する色または強度の値を有し得る。たとえば、パレットインデックスは、画素の単一の色成分または強度成分(たとえば、RGBデータのRed成分、YUVデータのY成分など)と関連付けられる、単一の関連する色または強度の値を有し得る。別の例では、パレットインデックスは、複数の関連する色または強度の値を有し得る。いくつかの事例では、パレットベースのビデオコーディングは、モノクロビデオをコーディングするために適用されることがある。したがって、「色値」は全般に、画素値を生成するために使用される任意の色成分または非色成分を指し得る。
ラン値は、同じパレットコーディングモードを使用してコーディングされるパレットインデックス値のランを示し得る。たとえば、Valueモードに関して、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、インデックス値と、同じインデックス値を有しパレットインデックスを用いてコーディングされている走査順序における連続する後続のサンプルの数を示すラン値とをコーディングし得る。CopyAboveモードに関して、ビデオコーダは、現在のサンプル値のインデックス値が上の隣接サンプル(たとえば、ブロックの中の現在コーディングされているサンプルの上に位置するサンプル)のインデックス値と同じであることの指示と、上の隣接サンプルからもインデックス値をコピーする走査順序における連続する後続のサンプルの数を示すラン値とを、コーディングし得る。したがって、上の例では、パレットインデックス値のランは、同じ値を有するパレット値のラン、または上の隣接サンプルからコピーされるインデックス値のランを指す。
したがって、ランは、所与のモードに対して、同じモードに属する後続のサンプルの数を規定し得る。いくつかの事例では、インデックス値およびラン値をシグナリングすることは、ランレングスコーディングと同様であり得る。説明を目的とする例では、ビデオデータのブロックに対応するインデックスブロックの連続するパレットインデックス値の列は、0、2、2、2、2、5であり得る。各インデックス値は、ビデオデータのブロックの中のサンプルに対応する。この例では、ビデオコーダは、Valueモードを使用して第2のサンプル(たとえば、「2」という第1のパレットインデックス値)をコーディングし得る。2というインデックス値をコーディングした後で、ビデオコーダは3というランをコーディングすることがあり、これは、後続の3つのサンプルも2という同じパレットインデックス値を有することを示す。同様の方式で、CopyAboveモードを使用してインデックスをコーディングした後で4つのパレットインデックスのランをコーディングすることは、現在コーディングされているサンプル場所の上の行の中の対応するパレットインデックス値から、全体で5つのパレットがコピーされることを示し得る。
パレットを使用して、ビデオエンコーダ20および/またはビデオデコーダ30は、サンプルのブロック(たとえば、ビデオデータのブロック)をインデックスブロックへとコーディングするように構成されることがあり、ここで、インデックスブロックは、1つまたは複数のパレットエントリに、いくつかの例では1つまたは複数のエスケープ画素値にマッピングするインデックス値を含むブロックである。ビデオエンコーダ20は、インデックスブロックをエントロピー符号化してインデックスブロックを圧縮するように構成され得る。同様に、ビデオデコーダ30は、符号化されたインデックスブロックをエントロピー復号して、ビデオデコーダ30がサンプルのブロック(たとえば、エンコーダ20によって符号化されるビデオデータのブロック)を生成する際の元となり得るインデックスブロックを生成し得る。たとえば、ランレングスベースのエントロピーコーディングが、インデックスブロックを圧縮して解凍するために使用され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、CABACを使用してインデックスブロックをそれぞれエントロピー符号化および復号するように構成され得る。
CABACコーディングを情報(たとえば、シンタックス要素、インデックスブロックのインデックス値などのインデックスブロック、または他の情報)に適用するために、ビデオコーダ(たとえば、ビデオエンコーダ20およびビデオデコーダ30)は、この情報に対して二値化を実行し得る。二値化は、情報を一連の1つまたは複数のビットへと変換するプロセスを指す。各々の一連の1つまたは複数のビットは「ビン」と呼ばれ得る。二値化は、非可逆プロセスであり、固定長コーディング、単項コーディング、切捨て単項コーディング、切捨てライスコーディング、ゴロムコーディング、指数ゴロムコーディング、ゴロムライスコーディング、任意の形態のゴロムコーディング、任意の形態のライスコーディング、および任意の形態のエントロピーコーディングというコーディング技法のうちの1つまたは組合せを含み得る。たとえば、二値化は、5という整数値を、8ビットの固定長技法を使用して00000101として、または単項コーディング技法を使用して11110として表現することを含み得る。
二値化の後で、ビデオコーダは、コーディングコンテキストを特定し得る。コーディングコンテキストは、特定の値を有するビンをコーディングすることの確率を特定し得る。たとえば、コーディングコンテキストは、値0のビンをコーディングすることの0.7の確率、および値1のビンをコーディングすることの0.3の確率を示し得る。コーディングコンテキストを特定した後で、ビデオコーダは、コンテキストに基づいてそのビンを算術的にコーディングすることができ、これはコンテキストモードコーディングとして知られている。CABACコンテキストモードコーディングを使用してコーディングされたビンは、「コンテキストビン」と呼ばれることがある。
さらに、すべてのビンに対してコンテキストモードコーディングを実行するのではなく、ビデオコーダ(たとえば、ビデオエンコーダ20およびビデオデコーダ30)は、バイパスCABACコーディング(たとえば、バイパスモードコーディング)を使用して一部のビンをコーディングし得る。バイパスモードコーディングは、適応的なコンテキスト(たとえば、コーディングコンテキスト)を使用することなくビンを算術的にコーディングするプロセスを指す。すなわち、バイパスコーディングエンジンは、コンテキストを選択せず、両方のシンボル(0および1)に対して0.5の確率を想定し得る。バイパスモードコーディングはコンテキストモードコーディングほど帯域幅の効率が良くないことがあるが、ビンに対してコンテキストモードコーディングを実行するよりも、ビンに対してバイパスモードコーディングを実行することが、計算的にはより安価であることがある。さらに、バイパスモードコーディングを実行することは、より高度な並列化およびスループットを可能にし得る。バイパスモードコーディングを使用してコーディングされたビンは、「バイパスビン」と呼ばれることがある。
ビデオエンコーダ20およびビデオデコーダ30は、CABACコーダ(たとえば、それぞれCABACエンコーダおよびCABACデコーダ)を用いて構成され得る。CABACコーダは、CABACコンテキストモードコーディングを実行するためのコンテキストモードコーディングエンジンと、バイパスモードコーディングを実行するためのバイパスモードコーディングエンジンとを含み得る。ビンがコンテキストモードコーディングされる場合、コンテキストモードコーディングエンジンは、このビンをコーディングするために使用される。コンテキストモードコーディングエンジンは、単一のビンをコーディングするために2回よりも多くの処理サイクルを必要とし得る。しかしながら、適切なパイプライン設計により、コンテキストモードコーディングエンジンは、n個のビンを符号化するのにn+M回のサイクルしか必要としないことがあり、ここでMはパイプラインを開始するためのオーバーヘッドである。Mは普通は0より大きい。
CABACコーディングプロセスの最初において(すなわち、バイパスモードからコンテキストモードへの、またはコンテキストモードからバイパスモードへの切替えのたびに)、パイプラインのオーバーヘッドがもたらされる。ビンがバイパスモードコーディングされる場合、バイパスモードコーディングエンジンは、このビンをコーディングするために使用される。バイパスモードコーディングエンジンは、nビットの情報をコーディングするために1回のサイクルしか必要としないと予想されることがあり、ここでnは1より大きいことがある。したがって、バイパスビンとコンテキストビンのセットをコーディングするためのサイクルの総数は、セットの中のバイパスビンのすべてが一緒にコーディングされ、セットの中のコンテキストビンのすべてが一緒にコーディングされれば、減らすことができる。具体的には、コンテキストモードコーディングへと移行する前または後にバイパスビンを一緒にコーディングすることで、コンテキストモードコーディングエンジンを再開するために必要とされるオーバーヘッドをなくすことができる。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、パレットモードを使用してビデオデータのブロックをそれぞれ符号化または復号する間に、バイパスモードとコンテキストモードとの間で切り替えるように構成され得る。別の例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットモードを使用してビデオデータのブロックを符号化または復号するとき、符号化プロセスまたは復号プロセスがバイパスモードとコンテキストモードとの間で切り替える回数を減らすように構成され得る。
本開示において説明される技法は、パレットベースのビデオコーディングモードをシグナリングすること、パレットを送信すること、パレットを導出すること、走査順序をシグナリングすること、走査順序を導出すること、ならびにパレットベースのビデオコーディングマップおよび他のシンタックス要素を送信することの、1つまたは複数の様々な組合せのための技法を含み得る。たとえば、本開示の技法は、パレット情報をエントロピーコーディングすることを対象とし得る。いくつかの例では、本開示の技法は、とりわけ、コーディング効率を上げ、パレットベースのビデオコーディングと関連付けられるコーディングの非効率性を下げるために使用され得る。したがって、以下でより詳細に説明されるように、本開示の技法は、いくつかの事例では、パレットモードを使用してビデオデータをコーディングするときに、効率を向上させ、ビットレートを向上させることができる。
上で説明されたように、スクリーンコンテンツのコーディングにおける現在のパレットモードの設計では、palette_index_idcおよびpalette_escape_valというシンタックス要素が、CABACバイパスコーディングされ、CABACコンテキストコーディングされる他のシンタックス要素(たとえば、palette_run_msb_id_plus1)とインターリーブされる。しかしながら、バイパスコーディングされる情報(たとえば、シンタックス要素)を一緒にグループ化することが有益であることがあり、これは、コーディングの効率を向上させ、かつ/またはコーデックの複雑さを減らし得る。
palette_index_idcというシンタックス要素は、たとえばJCTVC-S1005において定義されるような、currentPaletteEntriesによって表されるアレイに対するインデックスを示すものであり得る。palette_index_idcの値は、両端を含めて0から(adjustedIndexMax-1)の範囲にあり得る。palette_escape_valというシンタックス要素は、たとえばJCTVC-S1005において定義されるように、ある成分に対する量子化されたエスケープコーディングされるサンプル値を規定し得る。palette_run_msb_id_plus1から1を引いたものは、たとえばJCTVC-S1005において定義されるように、paletteRunの二値表現における最上位ビットのインデックスを規定し得る。変数paletteRunは、たとえばJCTVC-S1005において定義されるように、palette_run_type_flagがCOPY_ABOVE_MODEに等しいときは上の行の中の場所と同じパレットインデックスを伴う連続する位置の数から1を引いたものを規定することがあり、または、palette_run_type_flagがCOPY_INDEX_MODEに等しいときは同じパレットインデックスを伴う連続する位置の数から1を引いたものを規定する。palette_index_idc、palette_escape_val、palette_run_msb_id_plus1、currentPaletteEntries、adjustedIndexMax、およびpaletteRunに関する追加の詳細が、JCTVC-S1005において見出され得る。
いくつかの例では、本開示は、CABACのスループットを向上させるための、パレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_index_idcのすべてをグループ化する方法を説明する。たとえば、ビデオエンコーダ20は、パレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_index_idcのすべてを符号化するように構成され得る。たとえば、ビデオエンコーダ20は、コンテキストモード符号化されるべきシンタックス要素を符号化する前に、シンタックス要素palette_index_idcのすべてを符号化するように構成され得る。同様に、ビデオデコーダ30は、パレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_index_idcのすべてを復号するように構成され得る。たとえば、ビデオデコーダ30は、コンテキストモード符号化されたシンタックス要素を復号する前に、シンタックス要素palette_index_idcのすべてを復号するように構成され得る。
別の例として、ビデオエンコーダ20は、シンタックス要素palette_index_idcのすべてがパレットランタイプ(たとえば、CopyAboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素を符号化する前に符号化されるように、パレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_index_idcのすべてをバイパスモード符号化するように構成され得る。同様に、ビデオデコーダ30は、シンタックス要素palette_index_idcのすべてがパレットランタイプ(たとえば、CopyAboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素を復号する前に復号されるように、ブロックのパレットインデックスブロックコーディングセクションの最前線にある、ブロックのためのシンタックス要素palette_index_idcのすべてを復号するように構成され得る。
パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素。
別の例として、ビデオエンコーダ20は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト符号化する前に、シンタックス要素palette_index_idcのすべてを符号化するように構成され得る。同様に、ビデオデコーダ30は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト復号する前に、シンタックス要素palette_index_idcのすべてを復号するように構成され得る。
別の例として、ビデオエンコーダ20は、コンテキストモード符号化されるべきシンタックス要素を符号化する前に、パレットブロックコーディングセクション内のシンタックス要素palette_index_idcのすべてを符号化するように構成され得る。同様に、ビデオデコーダ30は、コンテキストモード符号化されたシンタックス要素を復号する前に、パレットブロックコーディングセクション内のシンタックス要素palette_index_idcのすべてを復号するように構成され得る。別の例として、ビデオエンコーダ20は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト符号化する前に、パレットブロックコーディングセクション内のシンタックス要素palette_index_idcのすべてを符号化するように構成され得る。同様に、ビデオデコーダ30は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト復号する前に、パレットブロックコーディングセクション内のシンタックス要素palette_index_idcのすべてを復号するように構成され得る。
一般に、ビデオエンコーダ20およびビデオデコーダ30は、それぞれ、バイパスモードにおけるpalette_index_idcの符号化または復号を、コンテキストモードを使用して符号化または復号されるべきシンタックス要素とインターリーブしないように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、それぞれ、バイパスモードにおけるpalette_index_idcの符号化または復号を、コンテキストモードを使用して符号化または復号されるべきパレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素とインターリーブしないように構成され得る。別の例として、ビデオエンコーダ20は、コンテキストモードを必要とするシンタックス要素をコンテキスト符号化する前に、palette_index_idcシンタックス要素のすべてのインスタンスをバイパス符号化するように構成され得る。同様に、ビデオデコーダ30は、コンテキストモードを必要とするシンタックス要素をコンテキスト復号する前に、palette_index_idcシンタックス要素のすべてのインスタンスをバイパス復号するように構成され得る。別の例として、ビデオエンコーダ20は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト符号化する前に、palette_index_idcシンタックス要素のすべてのインスタンスをバイパス符号化するように構成され得る。同様に、ビデオデコーダ30は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト復号する前に、palette_index_idcシンタックス要素のすべてのインスタンスをバイパス復号するように構成され得る。
ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、palette_index_idcの出現の回数を表す値を符号化および復号することもできる。ビデオエンコーダ20およびビデオデコーダ30は、palette_index_idcの出現の回数を表す値を使用して、それぞれ、シンタックス要素palette_index_idcの各々を符号化または復号することができる。本開示において説明される技法はまた、パレットランレングス関連のシンタックス要素の冗長性をなくし、palette_run_type_flagおよびpalette_index_idcの冗長性をなくすことができる。
いくつかの例では、本開示は、CABACのスループットを向上させるための、ブロック(たとえば、PUまたはCU)のパレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_escape_valのすべてをグループ化する方法を説明する。たとえば、ビデオエンコーダ20は、ブロックのパレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_escape_valのすべてを符号化するように構成され得る。たとえば、ビデオエンコーダ20は、シンタックス要素palette_escape_valのすべてがパレットランタイプ(たとえば、CopyAboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素を符号化する前に符号化されるように、パレットインデックスブロックコーディングセクションの最前線にあるシンタックス要素palette_escape_valのすべてをバイパスモード符号化するように構成され得る。同様に、ビデオデコーダ30は、シンタックス要素palette_escape_valのすべてがパレットランタイプ(たとえば、CopyAboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素を復号する前に復号されるように、ブロックのパレットインデックスブロックコーディングセクションの最前線にある、ブロックのためのシンタックス要素palette_escape_valのすべてを復号するように構成され得る。別の例として、ビデオエンコーダ20は、コンテキストモード符号化されるべきシンタックス要素を符号化する前に、シンタックス要素palette_escape_valのすべてを符号化するように構成され得る。たとえば、ビデオエンコーダ20は、パレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素をコンテキスト符号化する前に、シンタックス要素palette_escape_valのすべてを符号化するように構成され得る。同様に、ビデオデコーダ30は、ブロックのパレットインデックスブロックコーディングセクションの最前線にあるブロックのためのシンタックス要素palette_escape_valのすべてを復号するように構成され得る。たとえば、ビデオデコーダ30は、ブロックの中のコンテキストモード符号化されたシンタックス要素を復号する前に、シンタックス要素palette_escape_valのすべてを復号するように構成され得る。
別の例として、ビデオエンコーダ20は、コンテキストモード符号化されるべきシンタックス要素を符号化する前に、ブロックのパレットブロックコーディングセクション内のシンタックス要素palette_escape_valのすべてを符号化するように構成され得る。同様に、ビデオデコーダ30は、ブロックのコンテキストモード符号化されたシンタックス要素を復号する前に、ブロックのパレットブロックコーディングセクション内のシンタックス要素palette_escape_valのすべてを復号するように構成され得る。
一般に、ビデオエンコーダ20およびビデオデコーダ30は、それぞれ、バイパスモードにおけるブロック(たとえば、PUまたはCU)のためのpalette_escape_valの符号化または復号を、ブロックのためのコンテキストモードを使用して符号化または復号されるべきシンタックス要素とインターリーブしないように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、それぞれ、バイパスモードにおけるpalette_escape_valの符号化または復号を、コンテキストモードを使用して符号化または復号されるべきパレットランタイプ(たとえば、Copy Aboveモードまたはインデックスモード)および/またはランレングス(たとえば、palette_run_msb_id_plus1)に関するシンタックス要素とインターリーブしないように構成され得る。別の例として、ビデオエンコーダ20は、コンテキストモードを必要とするシンタックス要素をコンテキスト符号化する前に、ブロックのためのpalette_escape_valシンタックス要素のすべてのインスタンスをバイパス符号化するように構成され得る。同様に、ビデオデコーダ30は、ブロック(たとえば、PUまたはCU)のコンテキストモードを必要とするシンタックス要素をコンテキスト復号する前に、ブロックのpalette_escape_valシンタックス要素のすべてのインスタンスをバイパス復号するように構成され得る。
ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、ブロックのためのpalette_escape_valの出現の回数を表す値を符号化および復号することもできる。ビデオエンコーダ20およびビデオデコーダ30は、palette_escape_valの出現の回数を表す値を使用して、それぞれ、ブロックのためのシンタックス要素palette_escape_valの各々を符号化または復号することができる。本開示において説明される技法は、ブロックのためのpalette_index_idcの動的な範囲を減らすことができ、これはコーディング効率の向上をもたらし得る。
本明細書において説明される技法、態様、および/または例は、任意の組合せで互いに一緒に、または互いに別々に利用され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、本明細書において説明される技法、態様、および/または例の1つまたは複数の任意の1つまたは任意の適切な組合せを実行するように構成され得る。
いくつかの例では、CABACのスループットを向上させるために、ビデオコーダ(たとえば、ビデオエンコーダ20)は、上で説明されたようにシンタックス要素palette_index_idcの出現のすべてをグループ化するように構成され得る。たとえば、ビデオコーダ(たとえば、ビデオエンコーダ20)は、現在のブロックのためのインデックスコーディングセクションの最前線にある現在のブロック(たとえば、PUまたはCU)におけるシンタックス要素palette_index_idcの出現のすべてをグループ化するように構成され得る。同様に、ビデオデコーダ(たとえば、ビデオデコーダ30)は、上で説明されたようにシンタックス要素palette_index_idcのすべてを復号するように構成され得る。図7は、ビデオエンコーダ20が、たとえば、R. JoshiおよびJ. Xu、「High efficient video coding (HEVC) screen content coding: Draft 2」、JCTVC-S1005、7.3.3.8項に関連するインデックスコーディングブロックの最前線にある現在のブロック(たとえば、CU)におけるシンタックス要素palette_index_idcの出現のすべてをグループ化するように構成され得る一例を示す。本開示のこの態様は、態様1と呼ばれる。具体的には、図7は、ビデオエンコーダ20が、インデックスコーディングブロックの最前線(パレットブロックコーディングセクションまたはインデックスコーディングブロックの最前線とも呼ばれ得る)にシンタックス要素palette_index_idcのインスタンスを移転する例を示す。シンタックス要素palette_index_idcの示されるインスタンスを移転することによって、ビデオエンコーダ20は、バイパスモードを使用してシンタックス要素palette_index_idcのすべてのインスタンスをコーディングし、インデックスコーディングブロックの中のシンタックス要素palette_index_idcのすべてのインスタンスがバイパスモード符号化された後で出現するパレット情報をコーディングするためにコンテキストモードへ切り替えることによって、CABACのスループットを向上させるように構成され得る。
JCTVC-S1005の公開によれば、palette_index_idcの1つのインスタンスはバイパスモードでコーディングされ、パレットランタイプに関するシンタックス要素の1つのインスタンスおよびpalette_run_msb_id_plus1の1つのインスタンスはコンテキストモードでコーディングされ、プロセスは(scanPos<nCbS*nCbS)である間繰り返し、これは、バイパスモードを使用してコーディングされるべきシンタックス要素が一緒にグループ化されないので、ビデオエンコーダがバイパスモードコーディングとコンテキストモードコーディングとの間で繰り返し切り替わることを意味する。これは、「while(scanPos<nCbS*nCbS)」のwhileループのすぐ下の楕円(すなわち、この楕円は、パレットランタイプに関するシンタックス要素がコンテキストモードを使用して符号化されることを示す情報を含まない)、「while(scanPos<nCbS*nCbS)」のwhileループの下にあるpalette_index_idcシンタックス要素の結果を伴うifステートメントを囲むボックス、および後続の疑似コードにより図7に示されている。しかしながら、上で説明されたように、図7は本開示の態様1も図示し、これは、たとえばインデックスコーディングブロック最前線へのシンタックス要素palette_index_idcの1つまたは複数のインスタンスのグループ化(これは移転とも呼ばれ得る)である。バイパスモードを使用して符号化されるべき1つまたは複数のシンタックス要素(たとえば、または他のパレット情報)を移転することによって、ビデオエンコーダ(たとえば、ビデオエンコーダ20)は、バイパスモード符号化とコンテキストモード符号化をビデオエンコーダまたはビデオデコーダが切り替えなければならない回数を減らすことによって、エントロピーコーディングのスループットを上げることができる。同様に、そのような方式で1つまたは複数のシンタックス要素を移転することによって、ビデオデコーダ(たとえば、ビデオデコーダ30)のスループットは、ビデオデコーダがバイパスモード復号とコンテキストモード復号を切り替えなければならない回数が減るので、向上し得る。本開示において説明される技法のいくつかの例では、palette_index_idcシンタックス要素のすべてのインスタンスは、palette_run_msb_id_plus1のインスタンスがコンテキストモードでコーディングされる前にバイパスモードでコーディングされる。
いくつかの例では、ビデオエンコーダ20は、たとえばnum_palette_indexという名称のシンタックス要素を使用して、シンタックス要素palette_index_idcの出現(たとえば、インスタンス)の数をシグナリングするように構成され得る。たとえば、ビデオエンコーダ20は、num_palette_indexの値をビットストリームにおいてシグナリングすることができ、この値はシンタックス要素palette_index_idcの出現の回数を表す。いくつかの例では、ビデオエンコーダ20は、インデックス値をpalette_index_idcとしてシグナリングしないように構成され得る。そのような例では、ビデオデコーダ30はインデックス値を推測するように構成され得る。たとえば、palette_index_idcの出現はnum_palette_indexにおいて加算されることがあり、これは、あるランタイプ(たとえば、COPY_INDEX_MODE)が特定のブロックにおいて出現する回数に等しいことがある。ランタイプ(たとえば、COPY_INDEX_MODE)が推測されるときであっても、またはpalette_index_idcが推測されるときであっても、それはnum_palette_indexに加算される。本明細書では、解析されるインデックス、復号されるインデックス、または復号されるべき残りのインデックスの数への言及は、いくつかの例では、モードが推測されるかまたはインデックスが推測されるかにかかわらず、COPY_INDEX_MODEの数を指し得る。ビデオデコーダ30は、たとえば、ビットストリームからnum_palette_indexシンタックス要素に対応する符号化された値を復号することによって、シンタックス要素palette_index_idcの出現(たとえば、インスタンス)の数を決定するように構成され得る。本開示のこの態様は、態様2と呼ばれる。ビデオエンコーダ20およびビデオデコーダ30は、態様2とともに、または態様2を伴わずに、態様1を実施するように構成され得る。シンタックスの面では、態様2は、いくつかの例によれば次のように定義され得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、変数indexMaxが1より大きいときにだけ、態様1および2を(たとえば、有効にすることによって)実施するように構成され得る。本開示のこの態様は、態様3と呼ばれる。変数indexMaxは、パレットインデックスが現在のコーディングユニットに対して有する別個の値の数を規定し得る。いくつかの例では、indexMaxは、(palette size+palette_escape_val_present_flag)の量を指し得る。
いくつかの例では、態様1および2は、(a)現在のブロックの中にエスケープ画素がなく(すなわち、palette_escape_val_present_flag= =0)、パレットサイズが2未満であるとき、または(b)現在のブロックの中に少なくとも1つのエスケープ画素(すなわち、palette_escape_val_present_flag= =1)がある可能性があり、パレットサイズが0に等しいとき、無効にされ得る。他の例では、ビデオエンコーダ20およびビデオデコーダ30は、変数indexMaxが2より大きいときにだけ、態様1および2を(たとえば、有効にすることによって)実施するように構成され得る。同様に、indexMaxが(palette size+palette_escape_val_present_flag)に等しい例では、態様1および2は、indexMaxが1より大きいときに有効にされ得る(たとえば、実施され得る)。たとえば、パレットサイズが0であり、palette_escape_val_present_flagが1である場合、ブロックの中のすべての画素がエスケープ画素であるので、インデックスはすでに知られている。別の例として、palette_escape_val_present_flagが0でありパレットサイズが1である場合、やはり、各画素はインデックス0を有するので、インデックスのシグナリングは必要ではないことがある。
いくつかの例では、ビデオエンコーダ20は、シンタックス要素palette_run_type_flag[xC][yC]の最後の出現(たとえば、インスタンス)がパレットインデックスブロックコーディングセクションの最前線においてビデオエンコーダ20によってシグナリングされるように、態様1および2を実施するように構成され得る。本開示のこの態様は、態様4と呼ばれる。具体的には、シンタックステーブルは、いくつかの例によれば、新しいシンタックス要素palette_last_run_type_flagを次のように追加することによって次のように更新され得る。
ビデオデコーダ30は、たとえば、ビットストリームから符号化されたpalette_last_run_type_flagシンタックス要素を復号することによって、シンタックス要素palette_run_type_flag[xC][yC]の最後の出現(たとえば、インスタンス)を決定するように構成され得る。palette_last_run_type_flagのシンタックス要素は、たとえばCABACにおいて、バイパスモードコーディングまたはコンテキストモードコーディングされ得る。palette_last_run_type_flagシンタックス要素がコンテキストモードコーディングされる例では、palette_last_run_type_flagシンタックス要素は、palette_run_type_flag[xC][yC]と同じコンテキストを共有することがあり、または、palette_run_type_flagシンタックス要素は、palette_run_type_flag[xC][yC]のコンテキストとは無関係な固有のコンテキストを有することがある。
いくつかの例では、ビデオデコーダ30は、palette_index_idcシンタックス要素の最初の出現(たとえば、インスタンス)に対して動的範囲調整プロセスが無効にされるように、シンタックス要素palette_index_idcを復号するように構成され得る。本開示のこの態様は、態様5と呼ばれる。具体的には、JCTVC-S1005 7.4.9.6項において規定されるadjustedIndexMax変数の導出手順と非常に類似したプロセスが使用される。比較の目的で、JCTVC-S1005は、変数adjustedIndexMaxが次のように導出され得ることを記述する。
adjustedIndexMax=indexMax
if(scanPos>0)
adjustedIndexMax-=1
しかしながら、本開示の態様5によれば、変数adjustIndexMaxは以下に記載されるように導出され得る。たとえば、各ブロックに対して、変数isFirstIndexが、構文解析の前に1に初期化される。いくつかの例では、変数adjustedIndexMaxは、次のように導出され得る。
adjustedIndexMax=indexMax
palette_index_idc
if(isFirstIndex){
adjustedIndexMax-=isFirstIndex
isFirstIndex=0
}
いくつかの例では、ビデオデコーダ30は、paletteRunを構文解析して復号する前に、1つまたは複数の条件を確認するように構成され得る。本開示のこの態様は、態様6と呼ばれる。変数paletteRunは、たとえばJCTVC-S1005によって公開されるように、palette_run_type_flagがCOPY_ABOVE_MODEに等しいときは上の行の中の場所と同じパレットインデックスを伴う連続する位置の数から1を引いたものを規定し、または、palette_run_type_flagがCOPY_INDEX_MODEに等しいときは同じパレットインデックスを伴う連続する位置の数から1を引いたものを規定する。
ビデオデコーダ30が確認するように構成され得る1つまたは複数の条件について参照すると、条件の1つまたは複数が満たされるとビデオデコーダ30が決定する場合、ビデオデコーダ30は、現在のpaletteRunに関するシンタックス要素(すなわち、palette_run_msb_id_plus1およびpalette_run_refinement_bits)の構文解析プロセスおよび復号プロセスを迂回するように構成され得る。そのような例では、ビデオデコーダ30は、現在のブロックの末尾に達するものとして、すなわちmaxPaletteRunに等しいものとして、現在のpaletteRunを暗黙的に導出するように構成され得る。態様6に関する1つまたは複数の条件のリストは、(i)構文解析/復号されるpalette_index_idcシンタックス要素の数がnum_palette_indexに等しいこと、または代替的に、num_palette_indexから受信されたインデックスの数を引いたものに等しい変数paletteIndicesLeftが定義され得ること、そしてそのような定義のもとでは、この条件はpaletteIndicesLeftが0に等しいこととして述べられ得る、および/または(ii)現在のパレットランタイプpalette_run_type_flag[xC][yC]が最後のパレットランタイプpalette_last_run_type_flagに等しいことを、含む。
いくつかの例では、態様6について上に記載された条件(i)および(ii)が同時に満たされない場合、ビデオエンコーダ20は、パレットランレングスをビットストリームへとコーディングするように構成され得る。本開示のこの態様は、態様7と呼ばれる。他の例では、態様6について上に記載された条件(i)および(ii)が同時に満たされない場合、ビデオエンコーダ20は、パレットランレングスをビットストリームへとコーディングするように構成され得る。現在のドラフト仕様JCTVC-S1005によれば、最大の達成可能なランレングスを規定するパラメータが入力として必要であり、そのパラメータはmaxPaletteRun=nCbS*nCbS-scanPos-1に等しい。しかしながら、本開示によれば、ビデオエンコーダ20は、最大の達成可能なランレングスを規定するパラメータをmaxPaletteRun=nCbS*nCbS-scanPos-1-paletteIndicesLeftへと減らして、コーディングの効率を向上させるように構成され得る。本明細書では、nCbSは現在のブロックのサイズを規定する。
いくつかの例では、ブロックがパレット共有モードにはない(すなわち、palette_share_flag[x0][y0]= =0)場合に、ビデオエンコーダ20が使用されていないエントリを有するパレットを決してシグナリングしないことを要求する、規範的な制約がビデオエンコーダ20に対して課されることがある。本開示のこの態様は、態様8と呼ばれる。
いくつかの例では、パレット共有を使用しないパレットモードでは、ビデオデコーダ30は、num_palette_indexがindexMaxに等しいという条件1、およびpaletteIndicesLeft= =1である条件2のうちの1つまたは複数が満たされるとき、シンタックス要素palette_index_idcの現在の出現(たとえば、インスタンス)の復号を迂回するように構成され得る。そのような例では、ビデオデコーダ30は、シンタックス要素palette_index_idcの現在の出現に対する値を、パレットの中にあるが復号プロセスの間にインデックスマップにはまだ現れていない(たとえば、復号プロセスのこの時点までにインデックスマップに現れていない)インデックスとして、暗黙的に導出するように構成され得る。本開示のこの態様は、態様9と呼ばれる。
ビデオデコーダ30は、態様9について上に記載されたようにシンタックス要素palette_index_idcの現在の出現に対する値を導出するように構成されることがあり、それは、両端を含めて0と(indexMax-1)との間の各々のインデックスが一度だけシグナリングされることを、条件1が要求するからである。したがって、第1の(indexMax-1)インデックス値がシグナリングされた後で、ビデオデコーダ30は、現在のインデックスマップのための復号プロセスの間にまだ現れていない、0と(indexMax-1)との間の数として最後のインデックス値を導出するように構成され得る。
いくつかの例では、ビデオデコーダ30は、paletteIndicesLeftが0に等しいという条件1、および現在の画素が走査順序においてブロックの最後の場所にあるという条件2のうちの一方または両方が満たされるとき、シンタックス要素palette_run_type_flag[xC][yC]の現在の出現(たとえば、インスタンス)の復号を迂回するように構成され得る。そのような例では、ビデオデコーダ30は、シンタックス要素palette_run_type_flag[xC][yC]の現在の出現に対する値を暗黙的に導出するように構成され得る。たとえば、条件1が満たされるとき、ビデオデコーダ30は、シンタックス要素palette_run_type_flag[xC][yC]の現在の出現に対する値を、COPY_ABOVE_MODEとして導出するように構成され得る。別の例として、条件1が満たされるとき、ビデオデコーダ30は、シンタックス要素palette_run_type_flag[xC][yC]の現在の出現に対する値を、paletteIndicesLeft>0である場合にはCOPY_INDEX_MODEとして、paletteIndicesLeft=0である場合にはCOPY_ABOVE_MODEとして導出するように構成され得る。本開示のこの態様は、態様10と呼ばれる。
本明細書では、ビデオエンコーダ20およびビデオデコーダ30は、いつ条件が満たされるかを決定するように構成され得る。たとえば、態様10に関して、ビデオデコーダ30は、条件1が満たされるかどうかを決定するように構成され得る。同様に、ビデオデコーダ30は、条件2が満たされるかどうかを決定するように構成され得る。条件1または条件2が満たされると決定したことに応答して、ビデオデコーダ30は、シンタックス要素palette_run_type_flag[xC][yC]の現在の出現に対する値を上に記載されたように導出するように構成され得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、任意のゴロム符号群を使用して、num_palette_indexシンタックス要素をそれぞれ符号化または復号するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、たとえば、ゴロムライス符号、指数ゴロム符号、切捨てライス符号、単項符号、またはゴロムライス符号および指数ゴロム符号の連結を使用して、num_palette_indexシンタックス要素をそれぞれ符号化または復号するように構成され得る。本開示のこの態様は、態様11と呼ばれる。
他の例では、ビデオエンコーダ20およびビデオデコーダ30は、任意のゴロム符号群の任意の切り捨てられたバージョンを使用して、num_palette_indexシンタックス要素をそれぞれ符号化または復号するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、たとえば、切捨てゴロムライス符号、切捨て指数ゴロム符号、切捨てライス符号、切捨て単項符号、または、coeff_abs_level_remainingシンタックス要素をコーディングするために使用される符号などの切捨てライス符号および指数ゴロム符号の連結を使用して、num_palette_indexシンタックス要素をそれぞれ符号化または復号するように構成され得る。本開示のこの態様は、態様12と呼ばれる。
いくつかの例では、態様11または12に関する任意のゴロムパラメータは、CUサイズ、indexMax、パレットサイズ、および/またはpalette_escape_val_present_flagに依存する。そのような依存性は、等式またはルックアップテーブルとして表現され得る。いくつかの例では、ビデオエンコーダ20は、たとえばSPS/PPS/スライスヘッダにおいてルックアップテーブルまたは等式中のパラメータがビデオデコーダ30によって受信されるように、それらをシグナリングするように構成され得る。代替的に、または追加で、パラメータはブロックごとに適応的に更新され得る。本開示のこの態様は、態様13と呼ばれる。いくつかの例では、ゴロムパラメータcRiceParamは、indexMax、パレットサイズ、および/またはpalette_escape_val_present_flagに依存し得る。ゴロムパラメータcRiceParamは、ブロックごとに変化し得る。
いくつかの例では、ビデオエンコーダ20は、たとえばnumPaletteIndexCodedという名称のシンタックス要素によって表現され得る、num_palette_indexの値とオフセット値との差分をシグナリングすることによって、num_palette_indexを予測的に符号化するように構成され得る。本開示のこの態様は、態様14と呼ばれる。たとえば、ビデオエンコーダ20は、numPaletteIndexCodedの値をシグナリングすることによってnum_palette_indexを予測的に符号化するように構成されることがあり、ここで、numPaletteIndexCoded=num_palette_index-IndexOffsetValueである。同様に、ビデオデコーダ30は、たとえば、ビットストリームからnumPaletteIndexCodedの値を決定することによって、num_palette_indexを予測的に復号するように構成され得る。numPaletteIndexCoded=num_palette_index-IndexOffsetValueであるので、ビデオデコーダ30は、numPaletteIndexCodedの決定された値およびIndexOffsetValueの値に基づいて、num_palette_indexの値を決定するように構成され得る。
いくつかの例では、変数IndexOffsetValueは一定であり得る。たとえば、IndexOffsetValueは、パレット共有モードではXという定数値に等しいことがあり、または非パレット共有モードではYという定数値に等しいことがあり、ここでXおよびYは整数である。いくつかの例では、XおよびYは同じであることがある(たとえば、XはYに等しく、たとえば1に等しい)。他の例では、XおよびYは異なることがある(たとえば、XはYと等しくない)。たとえば、パレット共有モードが使用されるときはIndexOffsetValueは9に等しいことがあり、非共有モードが使用されるときはIndexOffsetValueは33に等しいことがある。いくつかの例では、変数IndexOffsetValueは、シンタックス要素palette_share_flag[x0][y0]に依存し得る。他の例では、変数IndexOffsetValueは変数indexMaxに依存し得る。たとえば、IndexOffsetValueはindexMaxに等しいことがある。いくつかの例では、ビデオエンコーダ20は、IndexOffsetValueをSPS/PPS/スライスヘッダにおいてシグナリングするように構成され得る。代替的に、または追加で、変数IndexOffsetValueはブロックごとに適応的に更新されることがあり、これは、変数IndexOffsetValueに対応する値がブロックごとに適応的に更新され得ることを意味する。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、任意のゴロム符号群、またはゴロムライス符号および指数ゴロム符号の連結などの任意の切捨てゴロム群を使用して、numPaletteIndexCodedをそれぞれ符号化または復号するように構成され得る。たとえば、IndexOffsetValueが1に等しいとき、numPaletteIndexCodedはnum_palette_index-1に等しい。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、任意のゴロム符号群を使用して、numPaletteIndexCodedをそれぞれ符号化または復号するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、たとえば、ゴロムライス符号、指数ゴロム符号、切捨てライス符号、単項符号、またはゴロムライス符号および指数ゴロム符号の連結を使用して、numPaletteIndexCodedをそれぞれ符号化または復号するように構成され得る。
他の例では、ビデオエンコーダ20およびビデオデコーダ30は、任意のゴロム符号群の任意の切り捨てられたバージョンを使用して、numPaletteIndexCodedをそれぞれ符号化または復号するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、たとえば、切捨てゴロムライス符号、切捨て指数ゴロム符号、切捨てライス符号、切捨て単項符号、または、coeff_abs_level_remainingシンタックス要素をコーディングするために使用される符号などの切捨てライス符号および指数ゴロム符号の連結を使用して、numPaletteIndexCodedをそれぞれ符号化または復号するように構成され得る。
numPaletteIndexCodedをコーディングするために、ビデオエンコーダ20は、numPaletteIndexCodedの符号を決定するように構成され得る。ビデオエンコーダ20は、numPaletteIndexCodedの値が負であるかどうか(たとえば、決定された符号が正であるかまたは負であるか)を示すフラグをシグナリングするように構成され得る。本開示のこの態様は、態様15と呼ばれる。いくつかの例では、ビデオエンコーダ20は、フラグをシグナリングし、次いでnumPaletteIndexCodedの値をシグナリングするように構成され得る。他の例では、ビデオエンコーダ20は、numPaletteIndexCodedの値をシグナリングし、次いでフラグをシグナリングするように構成され得る。ビデオエンコーダ20は、バイパスモードまたはコンテキストモードを使用してフラグを符号化するように構成され得る。コンテキストコーディングされる場合、コンテキストは、CUサイズ、indexMax、パレットサイズ、および/またはpalette_escape_val_present_flagに依存し得る。
上で説明されたように、ビデオエンコーダ20は、いくつかの例によれば、numPaletteIndexCodedの符号を決定するように構成され得る。numPaletteIndexCodedの決定された符号が負である場合、ビデオエンコーダ20は、(1-numPaletteIndexCoded)の値をビットストリームへと符号化するように構成され得る。numPaletteIndexCodedの決定された符号が正である場合、ビデオエンコーダ20は、numPaletteIndexCodedの値をビットストリームへと符号化するように構成され得る。ビデオエンコーダ20は、たとえば、numPaletteIndexCodedの符号、CUサイズ、indexMax、パレットサイズ、および/またはpalette_escape_val_present_flagに応じた異なるゴロム符号パラメータを使用して、(1-numPaletteIndexCoded)の値またはnumPaletteIndexCodedの値を符号化するように構成され得る。
いくつかの例では、ビデオエンコーダ20は、マッピング動作を使用してnumPaletteIndexCodedの負の部分を表現するように構成されることがあり、これは、態様15に追加するものであることがあり、またはそれに代わるものであることがある。本開示のこの態様は、態様16と呼ばれる。たとえば、マッピング間隔が、変数mapIntervalとして導入され定義され得る。ビデオエンコーダ20は、変数mapIntervalを使用して、numPaletteIndexCodedの負の値を、mapInterval×(-numPaletteIndexCoded)-1に等しい等間隔の正の値へとマッピングするように構成され得る。それに従って、numPaletteIndexCodedの対応する正の値は、マッピングされた負の値がとる場所に順応するようにシフトされ得る。
たとえば、mapInterval=2であり、numPaletteIndexCodedが{-3,-2,-1,0,1,2,3}から選ばれる場合、マッピングは下のTable I(表3)のように示され得る。この例では、ビデオエンコーダ20は、Table I(表3)におけるマッピングされる値を使用して、numPaletteIndexCodeの値を符号化するように構成され得る。たとえば、ビデオエンコーダ20は、マッピングされる値を二値の形式へとエントロピー符号化するように構成され得る。
いくつかの例では、ビデオエンコーダ20は、態様16に関して説明されたようなマッピング動作を使用して、numPaletteIndexCodedの負の部分を表現するように構成され得る。ビデオエンコーダ20はまた、態様16を実施するときに存在し得る1つまたは複数の冗長性を除去するように構成され得る。本開示のこの態様は、態様17と呼ばれる。たとえば、numPaletteIndexCodedの負の値の数は、A={-1,-2,...,-IndexOffsetValue+1}にわたり得る。別の例として、numPaletteIndexCodedの負の値の数は、A={-1,-2,...,-IndexOffsetValue+1,IndexOffsetValue}にわたり得る。これらの例のいずれでも、マッピングされる値は、負のnumPaletteIndexCodedの値に対して、(IndexOffsetValue-1)個またはIndexOffsetValue個の場所を確保するだけでよい。たとえば、mapInterval=2であり、numPaletteIndexCodedが{-3,-2,-1,0,1,2,3,4,5,6,7,8}から選ばれる場合、マッピングは下のTable II(表4)のように示され得る。この例では、ビデオエンコーダ20は、Table II(表4)におけるマッピングされる値を使用して、numPaletteIndexCodeの値を符号化するように構成され得る。たとえば、ビデオエンコーダ20は、マッピングされる値を二値の形式へとエントロピー符号化するように構成され得る。
上のTable II(表4)に示されるように、ビデオエンコーダ20は、numPaletteIndexCodeの負の値および正の値がある値の後でインターリーブされないように、numPaletteIndexCodeの値に対応するマッピングされる値を符号化するように構成され得る。たとえば、上のTable II(表4)の例では、numPaletteIndexCodedの値3で開始するマッピングされる値を介した、numPaletteIndexCodedの正の値および負の値のインターリーブはない(すなわち、numPaletteIndexCodedの正の値3〜8はマッピングされる値6〜11にマッピングする)。
上で説明されたように、ビデオエンコーダ20はまた、態様16を実施するときに存在し得る1つまたは複数の冗長性を除去するように構成され得る。上で説明された冗長性の例とは異なる別の冗長性の例には、以下のものがある。num_palette_indexは現在のブロックの中の画素の総数によって上限が決まっているので、numPaletteIndexCodedにも上限がある。したがって、正の符号語の確率のすべてについて場所を移転した後で、負の値は、インターリーブを伴わずに後続の場所へとマッピングされることが可能である。たとえば、mapInterval=2であり、numPaletteIndexCodedが{-5,-4,-3,-2,-1,0,1,2,3}から選ばれる場合、マッピングは下のTable III(表5)のように示され得る。この例では、ビデオエンコーダ20は、Table III(表5)におけるマッピングされる値を使用して、numPaletteIndexCodeの値を符号化するように構成され得る。たとえば、ビデオエンコーダ20は、マッピングされる値を二値の形式へとエントロピー符号化するように構成され得る。
上のTable III(表5)に示されるように、ビデオエンコーダ20は、numPaletteIndexCodeの負の値および正の値がある値の後でインターリーブされないように、numPaletteIndexCodeの値に対応するマッピングされる値を符号化するように構成され得る。たとえば、上のTable III(表5)の例では、numPaletteIndexCodedの値4で開始するマッピングされる値を介した、numPaletteIndexCodedの正の値および負の値のインターリーブはない(すなわち、numPaletteIndexCodedの負の値-4および-5はマッピングされる値7および8にマッピングする)。
いくつかの例では、ビデオエンコーダ20は、パレットインデックスとパレットランとの間の関係をさらに切り離すように構成され得る。本開示のこの態様は、態様18と呼ばれる。たとえば、パレットランコーディングのコンテキストが解析または復号されたインデックスに依存することを許容する代わりに、ビデオエンコーダ20は、パレットランコーディングのコンテキストを以前のパレットランレングスに依存させるように、または、以前のランのpalette_run_msb_id_plus1、indexMax、および/またはCUサイズに依存させるように構成され得る。
いくつかの例では、バイパスビンをさらにグループ化するために、ビデオエンコーダ20は、次のようにパレットランタイプ(すなわち、palette_run_type_flag[xC][yC])をシグナリングする前に、パレットブロックの中のエスケープインデックスの数ならびにエスケープ値をシグナリングするように構成され得る。本開示のこの態様は、態様19と呼ばれる。イタリック体の部分はJCT-VC S1005の以前のバージョンに対する変更を示しており、太字の部分ならびに右の列における「ae(v)」はシンタックス要素のシグナリングを示している。
上の例では、escape_idc_coding()は、エスケープインデックスの数および各エスケープインデックスに対応するエスケープ値からなる。パレットブロックの中のエスケープインデックスの数は、palette_escape_val_present_flagが0である場合、またはindexMaxが0に等しい場合、シグナリングされないことがある。前者の場合、エスケープインデックスの数は0に等しいと推測されるべきであり、エスケープ値はシグナリングされない。indexMaxが0に等しい後者の場合、エスケープインデックスの数は、palette_escape_val_present_flagが1に等しくエスケープ値がシグナリングされるときはブロックサイズに等しいと推測されるべきであり、または、エスケープインデックスの数は、palette_escape_val_present_flagが0に等しいときは0であると推測されるべきである。
いくつかの例では、ビデオエンコーダ20は、ゴロム符号群を使用してエスケープインデックスの数をシグナリングするように構成され得る。本開示のこの態様は、態様20と呼ばれる。たとえば、ビデオエンコーダ20は、たとえば、ゴロムライス符号、指数ゴロム符号、切捨てライス符号、単項符号、またはゴロムライス符号および指数ゴロム符号の連結を使用して、エスケープインデックスの数をシグナリングするように構成され得る。上の符号の切り捨てられたバージョンが、ブロックサイズに等しく設定された最大値とともに使用され得る。
いくつかの例では、palette_escape_val_present_flagが0に等しいときには現在のブロックの中にエスケープ画素がないという、palette_escape_val_present_flagに対する規範的な制約を課すことが提案される。本開示のこの態様は、態様21と呼ばれる。palette_escape_val_present_flagが1に等しいとき、現在のブロックの中には少なくとも1つのエスケープ画素がある。この制約により、escape_idc_coding()において、コーディング効率を上げるために、エスケープインデックスの数から1を引いたものが、エスケープインデックスの数の代わりにコーディングされ得る。その場合、それに従って、切捨てゴロム符号群の最大値は(blockSize-1)へと調整され得る。
いくつかの例では、インデックスマップブロックをコーディングする前にエスケープインデックスの数がシグナリングされるとき、およびエスケープインデックスのすべてがすでにコーディングされているとき、indexMaxは1だけ減らされ得る。さらに、indexMaxが1になる場合、インデックス、ラン、およびモードのコーディングは、すべての残りのサンプルのためのインデックスが推測され得るので終了する。本開示のこの態様は、態様22と呼ばれる。態様22の一例として、パレットサイズが1に等しく、palette_escape_val_present_flagが1に等しいと仮定する。普通は、可能なインデックス値は0および1であり、1はエスケープサンプルのために使用される。態様22のもとでは、ビデオエンコーダ20は、エスケープ値/サンプルの数をシグナリングするように構成され得る。次いで、インデックスがシグナリングされており最後のエスケープ値/サンプルに遭遇するとき、ビデオエンコーダ20および/またはビデオデコーダ30の両方が、これ以上のエスケープ値/サンプルはないと推測(たとえば、決定)するように構成され得る。したがって、ビデオエンコーダ20および/またはビデオデコーダ30は、最後のエスケープ値/サンプルからブロックの最後までに出現し得る唯一のインデックス値が0であると決定するように構成されることがあり、これは、ビデオエンコーダ20が、最後のエスケープ値/サンプルからブロックの最後までは、モード、インデックス値、および/またはラン値をシグナリングしないように構成され得ることを意味する。
いくつかの例では、escape_idc_coding()は、indices_idc_coding()と組み合わせて使用される。本開示のこの態様は、態様23と呼ばれる。一例では、エスケープインデックスの数は、インデックスの数をシグナリングする前にシグナリングされ得る。この場合、非エスケープインデックスの数だけが、indices_idc_coding()においてシグナリングされる必要がある。一例では、エスケープインデックスの数は、インデックスの数をシグナリングした後でシグナリングされ得る。この場合、それに従って、切捨てゴロム符号群の最大値はnum_palette_indexへと調整され得る。
ビデオエンコーダ20および/またはビデオデコーダ30は、本開示において説明される技法に従って動作するように構成され得る。一般に、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のブロックがパレットモードでコーディングされると決定し、現在のブロックを再構築するための第1のシンタックス要素の複数のインスタンスをバイパスモードコーディングし、第1のシンタックス要素の複数のインスタンスをバイパスモードコーディングした後で、現在のブロックを再構築するための第2のシンタックス要素の複数のインスタンスをコンテキストモード復号するように構成され得る。
図2は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図2は説明のために提供され、本開示において広く例示され説明されるような技法の限定と見なされるべきでない。説明の目的で、本開示は、HEVCコーディングの文脈で、たとえばHEVCのSCC拡張の文脈でビデオエンコーダ20を説明する。しかしながら、本開示の技法は他のコーディング規格または方法に適用可能であり得る。
ビデオエンコーダ20は、本開示において説明される様々な例によるパレットベースのコーディングおよびエントロピーコーディング(たとえば、CABAC)のための技法を実行するように構成され得るデバイスの例を表す。
図2の例では、ビデオエンコーダ20は、ブロック符号化ユニット100、ビデオデータメモリ101、残差生成ユニット102、変換処理ユニット104、量子化ユニット106、逆量子化ユニット108、逆変換処理ユニット110、再構築ユニット112、フィルタユニット114、復号ピクチャバッファ116、およびエントロピー符号化ユニット118を含む。ブロック符号化ユニット100は、インター予測処理ユニット120およびイントラ予測処理ユニット126を含む。インター予測処理ユニット120は、動き推定ユニットおよび動き補償ユニット(図示せず)を含む。ビデオエンコーダ20はまた、本開示において説明されるパレットベースのコーディング技法の様々な態様を実行するように構成されるパレットベース符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含み得る。
ビデオデータメモリ101は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ101に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他の構成要素とともにオンチップであってもよく、または、これらの構成要素に対してオフチップであってもよい。
ビデオエンコーダ20は、ビデオデータを受信し得る。ビデオエンコーダ20は、ビデオデータのピクチャのスライスの中の各CTUを符号化し得る。CTUの各々は、ピクチャの、等しいサイズのルーマコーディングツリーブロック(CTB)、および対応するCTBと関連付けられ得る。CTUを符号化することの一部として、ブロック符号化ユニット100は、4分木区分を実行して、CTUのCTBを次第に小さくなるブロックに分割し得る。より小さいブロックは、CUのコーディングブロックであり得る。たとえば、ブロック符号化ユニット100は、CTUと関連付けられるCTBを4つの等しいサイズのサブブロックに区分することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
ビデオエンコーダ20は、CTUのCUを符号化して、CUの符号化された表現(すなわち、コーディングされたCU)を生成し得る。CUを符号化することの一部として、ブロック符号化ユニット100は、CUの1つまたは複数のPUの間でCUと関連付けられるコーディングブロックを区分し得る。したがって、各PUは、ルーマ予測ブロックおよび対応するクロマ予測ブロックと関連付けられ得る。ビデオエンコーダ20およびビデオデコーダ30は、様々なサイズを有するPUをサポートし得る。上に示されたように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがあり、PUのサイズは、PUのルーマ予測ブロックのサイズを指すことがある。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、イントラ予測に対して2N×2NまたはN×NというPUサイズ、およびインター予測に対して2N×2N、2N×N、N×2N、N×N、または類似の、対称のPUサイズをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、インター予測に対して、2N×nU、2N×nD、nL×2N、およびnR×2NというPUサイズのための非対称区分をサポートし得る。
インター予測処理ユニット120は、インター予測をCUの各PUに対して実行することによって、PUの予測データを生成し得る。PUの予測データは、PUの予測ブロックおよびPUの動き情報を含み得る。インター予測ユニット121は、PUがIスライスの中にあるか、Pスライスの中にあるか、またはBスライスの中にあるかに応じて、CUのPUに対して異なる動作を実行し得る。Iスライスでは、すべてのPUがイントラ予測される。したがって、PUがIスライスの中にある場合、インター予測ユニット121は、インター予測をPUに対して実行しない。したがって、Iモードで符号化されるブロックの場合、予測されるブロックは、同じフレーム内の以前に符号化された隣接ブロックからの空間予測を使用して形成される。
PUがPスライスの中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャのリスト(たとえば、「RefPicList0」)の中の参照ピクチャを検索し得る。PUの参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含む、参照ピクチャ内の領域であり得る。インター予測処理ユニット120の動き推定ユニットは、PUの参照領域を含む参照ピクチャのRefPicList0の中での場所を示す参照インデックスを生成し得る。加えて、動き推定ユニットは、PUのコーディングブロックと参照領域と関連付けられる参照位置との間の空間変位を示す、MVを生成し得る。たとえば、MVは、現在の復号されるピクチャの中の座標から参照ピクチャの中の座標までのオフセットを提供する2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として参照インデックスおよびMVを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照位置における実際のサンプルまたは補間されたサンプルに基づいて、PUの予測ブロックを生成し得る。
PUがBスライスの中にある場合、動き推定ユニットは、PUに対して単予測または双予測を実行し得る。PUに対して単予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを検索し得る。動き推定ユニットは、PUの動き情報として、参照領域を含む参照ピクチャのRefPicList0またはRefPicList1の中での場所を示す参照インデックス、PUの予測ブロックと参照領域と関連付けられる参照位置との間の空間変位を示すMV、および参照ピクチャがRefPicList0の中にあるか、またはRefPicList1の中にあるかを示す1つまたは複数の予測方向インジケータを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
PUに対して双方向インター予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0の中の参照ピクチャを検索することができ、また、PUの別の参照領域についてRefPicList1の中の参照ピクチャを検索することができる。動き推定ユニットは、参照領域を含む参照ピクチャのRefPicList0およびRefPicList1の中での場所を示す参照ピクチャインデックスを生成し得る。加えて、動き推定ユニットは、参照領域と関連付けられる参照位置とPUのサンプルブロックとの間の空間変位を示すMVを生成し得る。PUの動き情報は、PUの参照インデックスおよびMVを含み得る。動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のサンプルまたは補間されたサンプルに少なくとも一部基づいて、PUの予測ブロックを生成し得る。
本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースのコーディングを実行するように構成され得る。HEVCフレームワークに関して、ある例として、パレットベースのコーディング技法は、CUレベルで使用されるように構成され得る。他の例では、パレットベースのビデオコーディング技法は、PUレベルで使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、サブ予測ユニット(サブPU)レベル(たとえば、予測ユニットのサブブロック)で使用されるように構成され得る。したがって、CUレベルの文脈において(本開示全体にわたって)本明細書で説明される、開示されるプロセスのすべては、付加的または代替的に、PUレベルまたはサブPUレベルに適用され得る。しかしながら、そのような技法は、独立に機能するように、または他の既存の、もしくはこれから開発されるシステム/規格の一部として機能するように適用され得るので、これらのHEVCベースの例は、本明細書において説明されるパレットベースのビデオコーディング技法の制約または限定と見なされるべきでない。これらの場合には、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、または非矩形形状の領域でさえあり得る。
パレットベース符号化ユニット122は、たとえば、パレットベースの復号を、たとえば、CUまたはPUに対して、パレットベースの符号化モードが選択されたときに実行することができる。たとえば、パレットベース符号化ユニット122は、画素値を示すエントリを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの場所の画素値を表すためのパレットの中の画素値を選択し、ビデオデータのブロックの場所の少なくともいくつかを、選択された画素値にそれぞれ対応するパレットの中のエントリと関連付ける情報をシグナリングするように構成され得る。様々な機能がパレットベース符号化ユニット122によって実行されるものとして説明されるが、そのような機能の一部またはすべてが、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
本開示の態様によれば、パレットベース符号化ユニット122は、本明細書において説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。
イントラ予測処理ユニット126は、イントラ予測をPUに対して実行することによって、PUの予測データを生成し得る。PUの予測データは、PUの予測ブロックおよび様々なシンタックス要素を含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対して、イントラ予測を実行し得る。
イントラ予測をPUに対して実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUの予測データの複数のセットを生成し得る。イントラ予測処理ユニット126は、隣接PUのサンプルブロックからのサンプルを使用して、PUの予測ブロックを生成し得る。PU、CU、およびCTUに対して左から右、上から下への符号化順序を仮定すると、隣接PUは、PUの上、右上、左上、または左であってよい。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば、33個の方向性イントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUと関連付けられる領域のサイズに依存し得る。
ブロック符号化ユニット100は、PUのためにインター予測処理ユニット120によって生成される予測データ、またはPUのためにイントラ予測処理ユニット126によって生成される予測データの中から、CUのPUの予測データを選択し得る。いくつかの例では、ブロック符号化ユニット100は、予測データのセットのレート/歪みの尺度に基づいて、CUのPUの予測データを選択する。選択される予測データの予測ブロックは、選択予測ブロックと本明細書で呼ばれることがある。
残差生成ユニット102は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック、ならびにCUのPUの選択された予測ルーマブロック、選択された予測Cbブロック、および選択された予測Crブロックに基づいて、CUのルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロックを生成し得る。たとえば、残差生成ユニット102は、残差ブロックの中の各サンプルがCUのコーディングブロックの中のサンプルとCUのPUの対応する選択された予測ブロックの中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
変換処理ユニット104は、4分木区分を実行して、CUと関連付けられた残差ブロックをCUのTUと関連付けられた変換ブロックに区分し得る。したがって、いくつかの例では、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックと関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび場所は、CUのPUの予測ブロックのサイズおよび場所に基づくことも、または基づかないこともある。「残差4分木」(RQT)と呼ばれる4分木構造が、領域の各々と関連付けられるノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
変換処理ユニット104は、1つまたは複数の変換をTUの変換ブロックに適用することによって、CUのTUごとに変換係数ブロックを生成し得る。変換処理ユニット104は、TUと関連付けられたブロックを変換するために、様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に類似の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは変換係数ブロックとして扱われてよい。
量子化ユニット106は、係数ブロックの中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部またはすべてと関連付けられるビット深度を低減し得る。たとえば、nビットの変換係数は、量子化の間にmビットの変換係数へと切り捨てられることがあり、nはmよりも大きい。量子化ユニット106は、CUのTUと関連付けられる係数ブロックを、CUと関連付けられる量子化パラメータ(QP)値に基づいて量子化することができる。ビデオエンコーダ20は、CUと関連付けられるQP値を調整することによって、CUと関連付けられた係数ブロックに適用される量子化の程度を調整し得る。量子化が情報の損失をもたらすことがあり、したがって、量子化された変換係数の精度は元の精度よりも低いことがある。
逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、逆量子化および逆変換を係数ブロックに適用して、係数ブロックから残差ブロックを再構築し得る。再構築ユニット112は、ブロック符号化ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに、再構築された残差ブロックを加算して、TUと関連付けられる再構築された変換ブロックを生成し得る。このようにしてCUのTUごとに変換ブロックを再構築することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構築し得る。
フィルタユニット114は、1つまたは複数のデブロッキング動作を実行して、CUと関連付けられるコーディングブロックにおけるブロッキングアーティファクトを低減し得る。フィルタユニット114は、サンプル適応オフセット(SAO)フィルタリングおよび/または適応ループフィルタリング(ALF)を含む、他のフィルタリング動作を実行することができる。フィルタユニット114が1つまたは複数のデブロッキング動作を再構築されたコーディングブロックに対して実行した後、復号ピクチャバッファ116は、再構築されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、インター予測を他のピクチャのPUに対して実行するために、再構築されたコーディングブロックを含む参照ピクチャを使用し得る。加えて、イントラ予測処理ユニット126は、CUと同じピクチャの中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ116の中の再構築されたコーディングブロックを使用し得る。
エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受信し得る。たとえば、エントロピー符号化ユニット118は、係数ブロックを量子化ユニット106から受け取ることができ、シンタックス要素をブロック符号化ユニット100から受け取ることができる。エントロピー符号化ユニット118は、エントロピー符号化されたデータを生成するために、1つまたは複数のエントロピー符号化動作をデータに対して実行し得る。たとえば、エントロピー符号化ユニット118は、CABAC動作、コンテキスト適応型可変長コーディング(CAVLC)動作、可変長-可変長(V2V)コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作などのコンテキスト適応型のコーディング動作を、データに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成された、エントロピー符号化されたデータを含むビットストリームを出力し得る。たとえば、ビットストリームは、CUに対するRQTを表すデータを含み得る。
いくつかの例では、残差コーディングはパレットコーディングとともに実行されない。したがって、ビデオエンコーダ20は、パレットコーディングモードを使用してコーディングするとき、変換または量子化を実行しないことがある。加えて、ビデオエンコーダ20は、パレットコーディングモードを使用して残差データから別個に生成されたデータをエントロピー符号化し得る。
本開示の技法の1つまたは複数によれば、ビデオエンコーダ20、具体的にはパレットベース符号化ユニット122は、予測されるビデオブロックのパレットベースのビデオコーディングを実行し得る。上で説明されたように、ビデオエンコーダ20によって生成されるパレットは、符号化されてビデオデコーダ30へ送られることがあり、以前のパレットエントリから予測されることがあり、以前の画素値から予測されることがあり、またはこれらの組合せであり得る。
本開示の1つまたは複数の技法によれば、ビデオエンコーダ20は、現在のブロックがパレットモードでコーディングされると決定し、現在のブロックを再構築するための第1のシンタックス要素の複数のインスタンスをバイパスモード符号化し、第1のシンタックス要素の複数のインスタンスをバイパスモード符号化した後で、たとえばCABACコーディングプロセスを使用して現在のブロックを再構築するための第2のシンタックス要素の複数のインスタンスをコンテキストモード符号化するように構成され得る。ビデオエンコーダ20は、たとえば、CABACコーディングプロセスのバイパスモードを使用して、第2のシンタックス要素の複数のインスタンスのうちのいずれの1つのインスタンスのコンテキストモード符号化ともインターリーブすることなく、第1のシンタックス要素の複数のインスタンスのうちの任意の2つのインスタンスをバイパスモード符号化するように構成され得る。一例では、第1のシンタックス要素は、palette_index_idcシンタックス要素またはpalette_escape_valシンタックス要素の1つを備え、第2のシンタックス要素は、palette_run_msb_id_plus1シンタックス要素を備える。ビデオエンコーダ20は、現在のブロックのためのインデックスブロックコーディングセクションの最前線において、第1のシンタックス要素の複数のインスタンスをバイパス符号化するように構成され得る。
ビデオエンコーダ20は、第1のシンタックス要素のインスタンスの数を示す第3のシンタックス要素を符号化するように構成されることがあり、第1のシンタックス要素の複数のインスタンスをバイパスモード符号化することは、第3のシンタックス要素に基づいて第1のシンタックス要素の複数のインスタンスをバイパスモード符号化することを備える。ビデオエンコーダ20は、ゴロムライス符号、指数ゴロム符号、切捨てライス符号、単項符号、ゴロムライス符号および指数ゴロム符号の連結、または上記の符号のいずれかの切り捨てられたバージョンのうちの1つを使用して、第3のシンタックス要素を符号化することができる。
図3は、本開示の技法を実行するように構成される例示的なビデオデコーダ30を示すブロック図である。図3は説明のために提供され、広く例示され本開示で説明されるような技法を限定するものではない。説明のために、本開示は、HEVCコーディングの文脈においてビデオデコーダ30を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
エンコーダ20に関して上で説明されたパレットコーディングの詳細は、デコーダ30に関してはここでは繰り返されないが、デコーダ30は、エンコーダ20に関して本明細書で説明される任意の符号化プロセスに対する逆の復号プロセスを実行し得ることを理解されたい。
ビデオデコーダ30は、本開示において説明される様々な例によるパレットベースのコーディングおよびエントロピーコーディング(たとえば、CABAC)のための技法を実行するように構成され得るデバイスの例を表す。
図3の例では、ビデオデコーダ30は、エントロピー復号ユニット150、ビデオデータメモリ151、ブロック復号ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、フィルタユニット160、および復号ピクチャバッファ162を含む。ブロック復号ユニット152は、動き補償ユニット164およびイントラ予測処理ユニット166を含む。ビデオデコーダ30はまた、本開示において説明されるパレットベースのコーディング技法の様々な態様を実行するように構成されるパレットベース復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
ビデオデータメモリ151は、ビデオデコーダ30の構成要素によって復号されるべき符号化されたビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータのワイヤードネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB:coded picture buffer)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他の構成要素とともにオンチップであることがあり、または、それらの構成要素に対してオフチップであることがある。
ビデオデータメモリ151によって提供され得るコーディングピクチャバッファ(CPB)は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受信および記憶し得る。エントロピー復号ユニット150は、符号化されたビデオデータ(たとえば、NALユニット)をCPBから受信し、NALユニットを構文解析して、シンタックス要素を復号し得る。エントロピー復号ユニット150は、NALユニットの中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。ブロック復号ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。
ビデオデコーダ30は、本明細書において説明されるビデオエンコーダ20のプロセスとは全般に逆のプロセスを実行するように構成され得る。同様に、ビデオエンコーダ20は、本明細書において説明されるビデオデコーダ30のプロセスとは全般に逆のプロセスを実行するように構成され得る。たとえば、ビデオデコーダ30が同様にビットストリームの中の符号化されたシンタックス要素を復号するように構成され得るという開示は、ビデオエンコーダ20がシンタックス要素をビットストリームへと符号化するように構成され得ることを必然的に開示する。
別の例として、エントロピー復号ユニット150は、本明細書において説明されるエントロピー符号化ユニット118のプロセスとは全般に逆のプロセスを実行するように構成され得る。本開示の態様によれば、エントロピー復号ユニット150は、エントロピー符号化ユニット118によって生成される任意の符号語をエントロピー復号するように構成され得る。たとえば、エントロピー復号ユニット150は、CUのためのバイナリパレット予測ベクトルおよび/またはパレットマップなどの、均一な、および不均一なk次の切捨て指数ゴロム(TEGk)符号化された値を、エントロピー復号するように構成され得る。別の例として、エントロピー復号ユニット150は、k次の指数ゴロム(EGk)符号語、k次の切捨て指数ゴロム(TEGk)符号語、k次の不均一な切捨て指数ゴロム(TEGk)符号語、またはこれらの任意の組合せをエントロピー復号するように構成され得る。
ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、シンタックス要素をコーディングされたスライスNALユニットから抽出し、エントロピー復号し得る。コーディングされたスライスの各々は、スライスヘッダおよびスライスデータを含み得る。スライスヘッダは、スライスに関係するシンタックス要素を含み得る。スライスヘッダの中のシンタックス要素は、スライスを含むピクチャと関連付けられたPPSを特定するシンタックス要素を含み得る。
シンタックス要素をビットストリームから復号することに加えて、ビデオデコーダ30は、区分されていないCUに対して再構築動作を実行し得る。区分されていないCUに対して再構築動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実行し得る。CUのTUごとに再構築動作を実行することによって、ビデオデコーダ30は、CUの残差ブロックを再構築し得る。
CUのTUに対して再構築動作を実行することの一部として、逆量子化ユニット154は、TUと関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化ユニット154は、逆量子化ユニット154が適用するべき量子化の程度と、同様に逆量子化の程度とを決定するために、TUのCUと関連付けられるQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスを表すために使用されるビット数と圧縮されたシーケンスを表すために使用されるビット数との比が、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮率はまた、採用されるエントロピーコーディングの方法に依存し得る。
逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUと関連付けられた残差ブロックを生成するために、1つまたは複数の逆変換を係数ブロックに適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
PUがイントラ予測を使用して符号化される場合、イントラ予測処理ユニット166は、イントラ予測を実行して、PUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するPUの予測ブロックに基づいて、PUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUに対するイントラ予測モードを決定し得る。
ブロック復号ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を構築し得る。さらに、PUがインター予測を使用して符号化される場合、エントロピー復号ユニット150は、PUの動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUの1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUの1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
再構築ユニット158は、CUのTUと関連付けられるルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック、ならびにCUのPUの予測ルーマブロック、予測Cbブロック、および予測Crブロック、すなわち、イントラ予測データまたはインター予測データのいずれかを適宜使用して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを再構築し得る。たとえば、再構築ユニット158は、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックのサンプルを、予測ルーマブロック、予測Cbブロック、および予測Crブロックの対応するサンプルに加算して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを再構築し得る。
フィルタユニット160は、デブロッキング動作を実行して、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックと関連付けられるブロッキングアーティファクトを低減し得る。ビデオデコーダ30は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、その後の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162の中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
本開示の様々な例によれば、ビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。パレットベース復号ユニット165は、たとえば、パレットベースの復号を、たとえば、CUまたはPUに対してパレットベースの復号モードが選択されたときに実行し得る。たとえば、パレットベース復号ユニット165は、画素値を示すエントリを有するパレットを生成し、ビデオデータのブロックの中の少なくともいくつかの画素位置をパレットの中のエントリと関連付ける情報を受信し、情報に基づいてパレットの中の画素値を選択し、パレットの中の選択された画素値に基づいてブロックの画素値を再構築するように構成され得る。様々な機能がパレットベース復号ユニット165によって実行されるものとして説明されるが、そのような機能の一部またはすべてが、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
パレットベース復号ユニット165は、パレットコーディングモード情報を受信することができ、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上記の動作を実行することができる。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または、他のモード情報が異なるモードの使用を示すとき、パレットベース復号ユニット165は、たとえば、HEVCインター予測コーディングモードまたはHEVCイントラ予測コーディングモードなどの、非パレットベースのコーディングモードを使用して、ビデオデータのブロックを復号する。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。パレットベースのコーディングモードは、複数の異なるパレットベースのコーディングモードの1つを備えることがあり、または、単一のパレットベースのコーディングモードしか存在しないことがある。
本開示の態様によれば、パレットベース復号ユニット165は、本明細書において説明されるパレットコーディングのための技法の任意の組合せを実行するように構成され得る。エンコーダ20に関して上で説明されたパレットコーディングの詳細は、デコーダ30に関してはここでは繰り返されないが、デコーダ30は、エンコーダ20に関して本明細書において説明される任意のパレットベースの符号化プロセスに対する逆のパレットベースの復号プロセスを実行し得ることを理解されたい。
ビデオデコーダ30は、現在のブロックがパレットモードでコーディングされると決定し、たとえばCABACコーディングプロセスのバイパスモードを使用して現在のブロックを再構築するための第1のシンタックス要素の複数のインスタンスをバイパスモード復号し、第1のシンタックス要素の複数のインスタンスをバイパスモード復号した後で、たとえばCABACコーディングプロセスを使用して現在のブロックを再構築するための第2のシンタックス要素の複数のインスタンスをコンテキストモード復号するように構成され得る。ビデオデコーダ30は、第2のシンタックス要素の複数のインスタンスのうちのいずれの1つのインスタンスのコンテキストモード復号ともインターリーブすることなく、第1のシンタックス要素の複数のインスタンスのうちの任意の2つのインスタンスをバイパスモード復号し得る。いくつかの例では、第1のシンタックス要素は、palette_index_idcシンタックス要素またはpalette_escape_valシンタックス要素の1つを備え、第2のシンタックス要素は、palette_run_msb_id_plus1シンタックス要素を備える。ビデオデコーダ30は、現在のブロックのためのインデックスブロックコーディングセクションの最前線において、第1のシンタックス要素の複数のインスタンスをバイパス復号し得る。
ビデオデコーダ30は、第1のシンタックス要素のインスタンスの数を示す第3のシンタックス要素を復号することができ、第1のシンタックス要素の複数のインスタンスをバイパスモード復号することは、第3のシンタックス要素に基づいて第1のシンタックス要素の複数のインスタンスをバイパスモード復号することを備える。ビデオデコーダ30は、ゴロムライス符号、指数ゴロム符号、切捨てライス符号、単項符号、ゴロムライス符号および指数ゴロム符号の連結、または上記の符号のいずれかの切り捨てられたバージョンのうちの1つを使用して、第3のシンタックス要素を復号することができる。
図4は、本開示の技法による、ビデオデータをコーディングするためのパレットを決定することの例を示す概念図である。図4の例は、第1のパレット184と関連付けられた第1のPAL(パレット)コーディングユニット(CU)180と、第2のパレット192と関連付けられた第2のPAL CU188とを有する、ピクチャ178を含む。以下でより詳細に説明されるように、本開示の技法によれば、第2のパレット192は第1のパレット184に基づく。ピクチャ178はまた、イントラ予測コーディングモードを用いてコーディングされたブロック196、およびインター予測コーディングモードを用いてコーディングされたブロック200を含む。
図4の技法は、説明のために、ビデオエンコーダ20(図1および図2)およびビデオデコーダ30(図1および図3)の文脈において、HEVCビデオコーディング規格に関して説明される。しかしながら、本開示の技法はこのように限定されず、他のビデオコーディングプロセッサおよび/またはデバイスによって、他のビデオコーディングプロセスおよび/または規格において適用され得ることを理解されたい。
一般に、パレットは、現在コーディングされているCU、図4の例ではCU188にとって支配的および/または代表的ないくつかの画素値を指す。第1のパレット184(インデックス184とも呼ばれ得る)および第2のパレット192(インデックス192とも呼ばれ得る)は、複数のパレット(複数のインデックスとも呼ばれ得る)を含むものとして示されている。いくつかの例では、本開示の態様によれば、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ30など)は、パレット(たとえば、インデックス)をCUの色成分ごとに別個にコーディングし得る。たとえば、ビデオエンコーダ20は、CUのルーマ(Y)成分のためのパレット、CUのクロマ(U)成分のための別のパレット、およびCUのクロマ(V)成分のためのさらに別のパレットを符号化し得る。この例では、YパレットのエントリがCUの画素のY値を表すことができ、UパレットのエントリがCUの画素のU値を表すことができ、VパレットのエントリがCUの画素のV値を表すことができる。
他の例では、ビデオエンコーダ20は、CUのすべての色成分に対して単一のパレットを符号化し得る。この例では、ビデオエンコーダ20は、Yi、Ui、およびViを含む3つの値であるi番目のエントリを有するパレットを符号化し得る。この場合、パレットは、画素の成分の各々に対する値を含む。したがって、複数の個々のパレットを有するパレットのセットとしてのパレット184および192の表現は、一例にすぎず限定を意図しない。
図4の例では、第1のパレット184は、それぞれ、エントリインデックス値1、エントリインデックス値2、およびエントリインデックス値3を有する、3つのエントリ202〜206を含む。第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つまたは複数を使用して、画素値を再構築することができる。したがって、パレットベースの復号の際にビデオデコーダ30によって使用するために、第1のパレット184が、ビデオエンコーダ20によって、符号化されたビデオデータビットストリームの中で送信される。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、第1のパレット184に基づいて第2のパレット192を決定し得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、予測パレット、この例では、第1のパレット184がそこから決定される1つまたは複数のブロックを探し出し得る。図4に示される例などのいくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、第2のCU188のための予測パレットを決定するとき、左側の隣接CU(第1のCU180)などの以前にコーディングされたCUを探し出し得る。
図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の例では、ベクトルはブールベクトルである。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレット予測を実行するとき、パレット予測子リスト(パレット予測子テーブルと呼ばれることもある)を決定し得る。パレット予測子リストは、現在のブロックをコーディングするためのパレットの1つまたは複数のエントリを予測するために使用される、1つまたは複数の隣接ブロックのパレットからのエントリを含み得る。ビデオエンコーダ20およびビデオデコーダ30は、同じ方式でリストを構築し得る。ビデオエンコーダ20およびビデオデコーダ30は、パレット予測子リストのどのエントリが現在のブロックをコーディングするためのパレットの中に含まれるべきであるかを示すためのデータ(ベクトル216などの)をコーディングし得る。
図5は、本開示の技法による、画素のブロックのためのパレットに対するインデックスを決定することの例を示す概念図である。たとえば、図5は、インデックス値と関連付けられる画素のそれぞれの場所をパレット244のエントリと関連付けるインデックス値(たとえば、インデックス値1、2、および3)を含む、インデックスブロック240(マップ240またはインデックスマップ240とも呼ばれ得る)を含む。
図5の例では、インデックスブロック240は各画素場所のインデックス値を含むものとして示されるが、他の例では、画素値をパレット244のエントリと関連付けるインデックス値と、すべての画素場所が関連付けられるとは限らないことを理解されたい。すなわち、上で述べられたように、いくつかの例では、ビデオエンコーダ20は、画素値がパレット244に含まれない場合、インデックスブロック240の中のある場所に対する実際の画素値(またはその量子化されたバージョン)を示すものを、符号化する(かつビデオデコーダ30が符号化されたビットストリームからそれを取得する)ことができる。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、どの画素場所がどのインデックス値と関連付けられるかを示す追加のマップをコーディングするように構成され得る。たとえば、インデックスブロック240の中の(i,j)のエントリがCUの(i,j)の場所に対応すると仮定する。ビデオエンコーダ20は、エントリが関連するインデックス値を有するかどうかを示す、インデックスブロックの各エントリ(すなわち、各画素場所)のための1つまたは複数のシンタックス要素を符号化することができる。たとえば、ビデオエンコーダ20は、CUの中の(i,j)の位置における画素値がパレット244の中の値のうちの1つであることを示すために、1という値を有するフラグを符号化し得る。
そのような例では、ビデオエンコーダ20は、(図5の例において244として示される)パレットも符号化し得る。パレット244が単一のエントリおよび関連する画素値を含む事例では、ビデオエンコーダ20は、インデックス値のシグナリングをスキップすることができる。ビデオエンコーダ20は、CUの中の(i,j)の位置における画素値がパレット244の中の値の1つではないことを示すために、0という値を有するようにフラグを符号化することができる。この例では、ビデオエンコーダ20はまた、画素値を再構築する際、ビデオデコーダ30による使用のために画素値を示すものを符号化することができる。いくつかの事例では、画素値は不可逆方式でコーディングされ得る。
CUの1つの場所における画素の値は、CUの他の場所における1つまたは複数の他の画素の値を示すものを提供し得る。たとえば、CUの隣接する画素場所が、同じ画素値を有するか、または(2つ以上の画素値が単一のインデックス値にマッピングされ得る不可逆コーディングの場合)同じインデックス値にマッピングされ得る、比較的高い確率があり得る。
したがって、ビデオエンコーダ20は、同じ画素値またはインデックス値を有する所与の走査順序において連続する画素またはインデックス値の数を示す、1つまたは複数のシンタックス要素を符号化し得る。上述のように、同様の値の画素またはインデックス値の列は本明細書ではランと呼ばれることがある。説明のための例では、所与の走査順序において2つの連続する画素またはインデックスが異なる値を有する場合、ランは0に等しい。所与の走査順序において2つの連続する画素またはインデックスが同じ値を有するが、走査順序において3番目の画素またはインデックスが異なる値を有する場合、ランは1に等しい。同じ値を有する3つの連続するインデックスまたは画素の場合、ランは2であり、以下同様である。ビデオデコーダ30は、ランを示すシンタックス要素を符号化されたビットストリームから取得することができ、そのデータを使用して、同じ画素値またはインデックス値を有する連続する位置の数を決定することができる。
本開示の技法によるいくつかの例では、エントロピー符号化ユニット118およびエントロピー復号ユニット150は、インデックスブロック240をエントロピーコーディングするように構成され得る。たとえば、エントロピー符号化ユニット118およびエントロピー復号ユニット150は、パレットモードで、インデックスブロックに関するランレングス(たとえば、ランレングスの値または符号)および/またはバイナリパレット予測ベクトルをエントロピーコーディングするように構成され得る。
図6は、本開示の技法による、ラスター走査順序の例を仮定して、最大のcopy aboveランレングスを決定することの例を示す概念図である。図6の例では、破線280によって囲まれる画素のいずれもがエスケープサンプルとしてコーディングされない場合、最大の可能なランレングスは35(すなわち、影付きではない画素場所の数)である。破線280内の画素の1つまたは複数がエスケープサンプルとしてコーディングされる場合、エスケープ画素としてマークされる画素(「X」を伴う画素場所)は、走査順序において破線280内で最初のエスケープ画素であり、最大の可能なコーディングされるcopy aboveランレングスは5である。
いくつかの例では、ビデオデコーダ30は、破線280内の画素のためのランモード(たとえば、画素がコーディングされるパレットモード)を決定するだけであることがある。したがって、最悪の場合、ビデオデコーダ30は、BlockWidth-1個の画素に対する決定を行う。いくつかの例では、ビデオデコーダ30は、ランモードが確認される画素の最大の数に関するいくつかの制約を実施するように構成され得る。たとえば、ビデオデコーダ30は、画素が現在の画素と同じ行の中にある場合、破線280内の画素だけを確認するだけであることがある。ビデオデコーダ30は、破線280内のすべての他の画素がエスケープサンプルとしてコーディングされないと推測することがある。図6の例は、ラスター走査順序を仮定する。しかしながら、この技法は、垂直、水平横行、および垂直横行などの他の走査順序にも適用され得る。
本開示の例によれば、現在のランモードが「copy above」である場合、現在の画素のためのランレングスのコンテキストは、現在の画素に対する上の隣接画素のインデックスのインデックス値に依存し得る。この例では、現在の画素に対する上の隣接画素が現在のCUの外にある場合、ビデオデコーダは、対応するインデックスが事前に定義された定数kに等しいと仮定する。いくつかの例では、k=0である。
エントロピーコーディングの間、エントロピーエンコーダまたはデコーダは、符号化または復号されるべきシンボルのビットを1つまたは複数のビンに置くことができる。これらのビンは、シンボルの値が0に等しいかどうかを示し得る。エントロピーコーダまたはエントロピーデコーダは、エントロピーコーディングプロセスを調整するためにビンの値を使用し得る。いくつかの例では、エントロピーエンコーダまたはデコーダはまた、値が特定の値より大きいかどうか、たとえば、0より大きいかどうか、1より大きいかどうかなどを示すために、ビンを使用し得る。
いくつかの例では、現在のモードが「copy above」である場合、ランレングス符号語の第1のビンは、現在のサンプル(たとえば、画素)に対する上の隣接サンプル(たとえば、画素)が0に等しいかどうかに基づいて、2つの候補CABACコンテキストのうちの1つを選択する。
別の例として、現在のモードが「copy previous」である場合、ランレングス符号語の第1のビンは、インデックス値が0に等しいか、1に等しいか、2に等しいか、または2より大きいかに基づいて、4つの候補CABACコンテキストのうちの1つを選択する。
図8は、本開示の技法による、ビデオデータを復号するための例示的なプロセスを示すフローチャートである。図8のプロセスは、説明を目的としてビデオデコーダ30によって実行されるものとして全般に説明されるが、様々な他のプロセッサも図8に示されるプロセスを実行し得る。いくつかの例では、ブロック復号ユニット152、パレットベース復号ユニット165、および/またはエントロピー復号ユニット150は、図8に示される1つまたは複数のプロセスを実行し得る。
図8の例では、ビデオデコーダ30は、符号化されたビデオビットストリームから、ピクチャのビデオデータのパレットモード符号化されたブロックを受信するように構成され得る(800)。ビデオデコーダ30は、符号化されたビデオビットストリームから、ビデオデータのパレットモード符号化されたブロックのための符号化されたパレットモード情報を受信するように構成され得る(802)。いくつかの例では、符号化されたパレットモード情報は、第1のシンタックス要素および第1のシンタックス要素とは異なる複数のシンタックス要素の、複数のインスタンスを含み得る。たとえば、第1のシンタックス要素はpalette_index_idcまたはpalette_escape_valを含むことがあり、第1のシンタックス要素とは異なる複数のシンタックス要素はpalette_run_msb_id_plus1シンタックス要素を含むことがある。別の例として、第1のシンタックス要素はパレットエントリのアレイに対するインデックスを示すものであることがあり、または、第1のシンタックス要素はエスケープサンプルに対応する色成分の量子化されたエスケープコーディングされたサンプル値を規定することがある。第1のシンタックス要素とは異なる複数のシンタックス要素は、ランレングスを表す変数の二値表現における最上位ビットのインデックスを規定するシンタックス要素と、ランタイプモードを規定するシンタックス要素とを含み得る。
別の例として、第1のシンタックス要素とは異なる複数のシンタックス要素は、第1のシンタックス要素とは異なる任意のすべてのシンタックス要素であり得る。いくつかの例に関して本明細書において説明されるように、第1のシンタックス要素とは異なる複数のシンタックス要素は、第2の、第3の、および/または第4のシンタックス要素とも異なり得る。そのような例では、第1の、第2の、第3の、および第4のシンタックス要素とは異なる複数のシンタックス要素は、第1の、第2の、第3の、および/または第4のシンタックス要素とは異なる任意のすべてのシンタックス要素であり得る。いくつかの例では、第1のシンタックス要素とは異なる複数のシンタックス要素は、バイパスモード復号されない、かつ/またはバイパスモード復号されるべきではない、任意のすべてのシンタックス要素であり得る。
ビデオデコーダ30は、コンテキストモードを使用して第1のシンタックス要素とは異なる複数のシンタックス要素を復号する前に、バイパスモード、たとえばCABACコーディングプロセスのバイパスモードを使用して、第1のシンタックス要素の複数のインスタンスを復号するように構成され得る(804)。ビデオデコーダ30は、バイパスモードを使用して第1のシンタックス要素の複数のインスタンスを復号した後で、コンテキストモード、たとえば(バイパスモードではなく)通常のCABACモードを使用して、第1のシンタックス要素とは異なる複数のシンタックス要素を復号するように構成され得る(806)。いくつかの例では、第1のシンタックス要素の複数のインスタンスは、ビデオデータのパレットモード符号化されたブロックのための第1のシンタックス要素のすべてのインスタンスを含む。そのような例では、第1のシンタックス要素のすべてのインスタンスが、第1のシンタックス要素とは異なる複数のシンタックス要素などの、あらゆる後続のデータを復号する前に、バイパスモードを使用して復号される。言い換えると、ビデオデコーダ30は、バイパスモードを使用してビデオデータのパレットモード符号化されたブロックのための第1のシンタックス要素のすべてのインスタンスを復号した後で、コンテキストモードを使用して、第1のシンタックス要素とは異なる複数のシンタックス要素を復号するように構成され得る。
ビデオデコーダ30は、第1のシンタックス要素および第1のシンタックス要素とは異なる復号された複数のシンタックス要素の復号された複数のインスタンスを使用して、ビデオデータのパレットモード符号化されたブロックを復号するように構成され得る(808)。いくつかの例では、第1のシンタックス要素の複数のインスタンスは、ビデオデータのパレットモード符号化されたブロックを復号する間にバイパスモードとコンテキストモードを切り替えることが減るように、一緒にグループ化される。
いくつかの例では、符号化されたパレットモード情報は、第1のシンタックス要素のインスタンスの数を示す(たとえば、ビデオデータのパレットモード符号化されたブロックに対して第1のシンタックス要素のどれだけのインスタンスがあるかを示す)第2のシンタックス要素を含み得る。第1のシンタックス要素とは異なる複数のシンタックス要素は、第2のシンタックス要素とも異なることがある。そのような例では、ビデオデコーダ30は、第1のシンタックス要素および第2のシンタックス要素とは異なる複数のシンタックス要素を復号する前に、バイパスモードを使用して、第2のシンタックス要素を復号するように構成され得る。いくつかの例では、第2のシンタックス要素のいずれのインスタンスも、ビデオデータのパレットモード符号化されたブロックのための第1のシンタックス要素の任意の2つのインスタンスの間でインターリーブされない。いくつかの例では、ビデオデコーダ30は、第2のシンタックス要素によって示される数に等しい数の第1のシンタックス要素のインスタンスを復号した後で、第1のシンタックス要素のその数のインスタンスの後にある符号化されたビデオビットストリームの中の後続のデータが第1のシンタックス要素および第2のシンタックス要素とは異なる複数のシンタックス要素に対応すると、決定するように構成され得る。いくつかの例では、ビデオデコーダ30は、切捨てライス符号および指数ゴロム符号の連結を使用して、第2のシンタックス要素を復号するように構成され得る。
いくつかの例では、符号化されたパレットモード情報は、第3のシンタックス要素および第4のシンタックス要素を含み得る。そのような例では、ビデオデコーダ30は、第3のシンタックス要素を復号して、ビデオデータのパレットモード符号化されたブロックがエスケープ画素を含むかどうかを示す第3のシンタックス要素に対応する値を決定するように構成され得る。ビデオデコーダ30は、第4のシンタックス要素を復号して、パレットサイズを示す第4のシンタックス要素に対応する値を決定するように構成され得る。ビデオデコーダ30は、バイパスモードを使用して第1のシンタックス要素および第2のシンタックス要素の複数のインスタンスを復号した後で、第3および第4のシンタックス要素にそれぞれ対応する決定された値に基づいて、コンテキストモードを使用して第1のシンタックス要素および第2のシンタックス要素とは異なる複数のシンタックス要素を復号するように構成され得る。
いくつかの例では、符号化されたパレットモード情報は別のシンタックス要素を含むことがあり、ビデオデコーダ30は、この他のシンタックス要素を復号して、ビデオデータのパレットモード符号化されたブロックのためにパレットインデックスが有する別個の値の数を規定する、この他のシンタックス要素に対応する値を決定するように構成され得る。ビデオデコーダ30は、バイパスモードを使用して第1のシンタックス要素および第2のシンタックス要素の複数のインスタンスを復号した後で、この他のシンタックス要素に対応する決定された値に基づいて、コンテキストモードを使用して第1のシンタックス要素および第2のシンタックス要素とは異なる複数のシンタックス要素を復号するように構成され得る。
いくつかの例では、符号化されたパレットモード情報は別のシンタックス要素を含むことがあり、ビデオデコーダ30は、この他のシンタックス要素を復号して、ビデオデータのパレットモード符号化されたブロックのためのpalette_run_type_flag[xC][yC]のシンタックス要素の最後のインスタンスを示す、この他のシンタックス要素に対応する値を決定するように構成され得る。
いくつかの例では、ビデオデコーダ30は、ビデオデータの符号化されたブロックが1つまたは複数のエスケープサンプルを有すると決定するように構成され得る。そのような例では、ビデオデコーダ30は、1つまたは複数のエスケープサンプルのうちで、ビデオデータの符号化されたブロックの中の最後のエスケープサンプルを復号するように構成され得る。ビデオデコーダ30は、最後のエスケープサンプルに後続するビデオデータの符号化されたブロックのサンプルに適用されるインデックス値を推測するように構成され得る。ビデオデコーダ30は、最後のエスケープサンプルに後続するサンプルの各サンプルの推測されるインデックス値を使用して、最後のエスケープサンプルに後続するビデオデータの符号化されたブロックのサンプルを復号するように構成され得る。
いくつかの例では、ビデオデコーダ30は、受信されたパレットインデックスの数を決定するように構成され得る。そのような例では、ビデオデコーダ30は、受信されたパレットインデックスの数および第1のシンタックス要素のインスタンスの数に基づいて、残りのパレットインデックスの数を決定するように構成され得る。ビデオデコーダ30は、受信されたパレットインデックスの数および第1のシンタックス要素のインスタンスの数に基づいて、ビデオデータの符号化されたブロックに対する最大の可能なラン値を決定するように構成され得る。いくつかの例では、ビデオデコーダ30は、nCbS*nCbS-scanPos-1-paletteIndicesLeftに従って、ビデオデータの符号化されたブロックに対する最大の可能なラン値を決定するように構成されることがあり、ここでnCbSはビデオデータの符号化されたブロックのサイズを規定し、sanPosは走査場所を規定し、paletteIndicesLeftは残りのパレットインデックスの数を規定する。
図9は、本開示の技法による、ビデオデータを符号化するための例示的なプロセスを示すフローチャートである。図9のプロセスは、説明を目的としてビデオエンコーダ20によって実行されるものとして全般に説明されるが、様々な他のプロセッサも図9に示されるプロセスを実行し得る。いくつかの例では、ブロック符号化ユニット100、パレットベース符号化ユニット122、および/またはエントロピー符号化ユニット118は、図9に示される1つまたは複数のプロセスを実行し得る。
図9の例では、ビデオエンコーダ20は、ビデオデータのブロックがパレットモードで符号化されるべきであると決定する(900)ように構成され得る。ビデオエンコーダ20は、パレットモードを使用して、ビデオデータのブロックを符号化されたビットストリームへと符号化する(902)ように構成され得る。いくつかの例では、ビデオエンコーダ20は、ビデオデータのブロックのためのパレットモード情報を生成する(904)ように構成され得る。パレットモード情報は、第1のシンタックス要素および第1のシンタックス要素とは異なる複数のシンタックス要素の、複数のインスタンスを含み得る。たとえば、第1のシンタックス要素はpalette_index_idcまたはpalette_escape_valを含むことがあり、第1のシンタックス要素とは異なる複数のシンタックス要素はpalette_run_msb_id_plus1シンタックス要素を含むことがある。別の例として、第1のシンタックス要素はパレットエントリのアレイに対するインデックスを示すものであることがあり、または、第1のシンタックス要素はエスケープサンプルに対応する色成分の量子化されたエスケープコーディングされたサンプル値を規定することがある。第1のシンタックス要素とは異なる複数のシンタックス要素は、ランレングスを表す変数の二値表現における最上位ビットのインデックスを規定するシンタックス要素と、ランタイプモードを規定するシンタックス要素とを含み得る。
別の例として、第1のシンタックス要素とは異なる複数のシンタックス要素は、第1のシンタックス要素とは異なる任意のすべてのシンタックス要素であり得る。いくつかの例に関して本明細書において説明されるように、第1のシンタックス要素とは異なる複数のシンタックス要素は、第2の、第3の、および/または第4のシンタックス要素とも異なり得る。そのような例では、第1の、第2の、第3の、および第4のシンタックス要素とは異なる複数のシンタックス要素は、第1の、第2の、第3の、および/または第4のシンタックス要素とは異なる任意のすべてのシンタックス要素であり得る。いくつかの例では、第1のシンタックス要素とは異なる複数のシンタックス要素は、バイパスモード符号化されない、かつ/またはバイパスモード符号化されるべきではない、任意のすべてのシンタックス要素であり得る。
ビデオエンコーダ20は、コンテキストモードを使用して第1のシンタックス要素とは異なる複数のシンタックス要素を符号化されたビットストリームへと符号化する前に、バイパスモード、たとえばCABACコーディングプロセスのバイパスモードを使用して、第1のシンタックス要素の複数のインスタンスを符号化されたビットストリームへと符号化する(906)ように構成され得る。ビデオエンコーダ20は、バイパスモードを使用して第1のシンタックス要素の複数のインスタンスを符号化されたビットストリームへと符号化した後で、コンテキストモード、たとえば通常のCABACコンテキストベースモードを使用して、第1のシンタックス要素とは異なる複数のシンタックス要素を符号化されたビットストリームへと符号化する(908)ように構成され得る。いくつかの例では、第1のシンタックス要素の複数のインスタンスは、ビデオデータのパレットモード符号化されたブロックを符号化する間にバイパスモードとコンテキストモードを切り替えることが減るように、一緒にグループ化される。
いくつかの例では、第1のシンタックス要素の複数のインスタンスは、ビデオデータのブロックのための第1のシンタックス要素のすべてのインスタンスを含む。そのような例では、第1のシンタックス要素のすべてのインスタンスが、第1のシンタックス要素とは異なる複数のシンタックス要素などの、あらゆる後続のデータを符号化する前に、バイパスモードを使用して符号化される。言い換えると、ビデオエンコーダ20は、バイパスモードを使用してビデオデータのブロックのための第1のシンタックス要素のすべてのインスタンスを符号化した後で、コンテキストモードを使用して、第1のシンタックス要素とは異なる複数のシンタックス要素を符号化するように構成され得る。
いくつかの例では、パレットモード情報は、第1のシンタックス要素のインスタンスの数を示す(たとえば、ビデオデータのブロックに対して第1のシンタックス要素のどれだけのインスタンスがあるかを示す)第2のシンタックス要素を含み得る。第1のシンタックス要素とは異なる複数のシンタックス要素は、第2のシンタックス要素とも異なることがある。そのような例では、ビデオエンコーダ20は、第1のシンタックス要素および第2のシンタックス要素とは異なる複数のシンタックス要素の符号化の前に、バイパスモードを使用して、第2のシンタックス要素を符号化されたビットストリームへと符号化するように構成され得る。いくつかの例では、ビデオエンコーダ20は、第2のシンタックス要素のいずれのインスタンスも、符号化されたビットストリームの中のビデオデータのパレットモード符号化されたブロックのための第1のシンタックス要素の任意の2つのインスタンスの間でインターリーブされないように、第1のシンタックス要素の複数のインスタンスを符号化するように構成され得る。いくつかの例では、ビデオエンコーダ20は、符号化されたビットストリームの中の第1のシンタックス要素の符号化された複数のインスタンスの後で、第2のシンタックス要素を符号化されたビットストリームへと符号化するように構成され得る。たとえば、ビデオエンコーダ20は、第1のシンタックス要素のすべてのインスタンスをまず符号化し、次いで第2のシンタックス要素を符号化されたビットストリームへと符号化するように構成され得る。いくつかの例では、ビデオエンコーダ20は、切捨てライス符号および指数ゴロム符号の連結を使用して、第2のシンタックス要素を符号化するように構成され得る。
いくつかの例では、パレットモード情報は、第3のシンタックス要素および第4のシンタックス要素を含み得る。そのような例では、ビデオエンコーダ20は、ビデオデータのブロックがエスケープ画素を含むかどうかを示す第3のシンタックス要素に対応する値を符号化されたビットストリームへと符号化するように構成され得る。ビデオエンコーダ20は、パレットサイズを示す第4のシンタックス要素に対応する値を符号化されたビットストリームへと符号化するように構成され得る。いくつかの例では、パレットモード情報は別のシンタックス要素を含むことがあり、ビデオエンコーダ20は、ビデオデータのブロックのためにパレットインデックスが有する別個の値の数を規定する、この他のシンタックス要素に対応する値を、符号化されたビットストリームへと符号化するように構成され得る。
いくつかの例では、符号化されたパレットモード情報は別のシンタックス要素を含むことがあり、ビデオエンコーダ20は、ビデオデータのブロックのためのpalette_run_type_flag[xC][yC]のシンタックス要素の最後のインスタンスを示す、この他のシンタックス要素に対応する値を符号化するように構成され得る。
いくつかの例では、ビデオエンコーダ20は、1つまたは複数のエスケープサンプルのうちで、ビデオデータのブロックの中の最後のエスケープサンプルを符号化するように構成され得る。そのような例では、ビデオエンコーダ20は、最後のエスケープサンプルに後続するビデオデータのブロックのサンプルに適用されるインデックス値を推測するように構成され得る。ビデオエンコーダ20は、最後のエスケープサンプルに後続するサンプルの各サンプルの推測されるインデックス値を使用して、最後のエスケープサンプルに後続するビデオデータのブロックのサンプルを符号化するように構成され得る。
本明細書において説明される技法のすべてが、個別に、または組み合わせて使用され得ることを理解されたい。たとえば、ビデオエンコーダ20および/またはその1つまたは複数の構成要素、ならびにビデオデコーダ30および/またはその1つまたは複数の構成要素が、本開示において説明される技法を任意の組合せで実行し得る。
例に応じて、本明細書において説明される技法のいずれかのいくつかの行為またはイベントは異なる順序で実行されることがあり、一緒に追加され、統合され、または省略されることがある(たとえば、説明される行為またはイベントのすべてが技法の実施のために必要とは限らない)ことを認識されたい。さらに、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理またはマルチプロセッサを通じて同時に実行されることがある。加えて、明快のために本開示のいくつかの態様は単一のモジュールまたはユニットによって実行されるものとして説明されるが、本開示の技法がビデオコーダと関連したユニットまたはモジュールの組合せによって実行されてもよいことを理解されたい。
説明を目的に、本開示のいくつかの態様は開発中のHEVC規格に関して説明された。しかしながら、本開示において説明される技法は、まだ開発されていない他の標準的なまたは独自のビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
上で説明された技法は、ビデオエンコーダ20(図1および図2)および/またはビデオデコーダ30(図1および図3)によって実行されることがあり、それらの両方が一般にビデオコーダと呼ばれることがある。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。
本開示によれば、「または」という用語は、文脈が別段規定しない限り、「および/または」として解釈され得る。加えて、「1つまたは複数の」または「少なくとも1つの」などの語句が本明細書において開示されるいくつかの特徴に対して使用され、他の特徴に対しては使用されないことがあるが、そのような言葉が使用されなかった特徴は、文脈が別段示さない場合、そのような示唆される意味を有するものと解釈され得る。
技法の様々な態様の組合せが上で説明されたが、これらの組合せは単に本開示において説明される技法の例を示すために与えられている。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示において説明される技法の様々な態様の考えられる組合せを包含し得る。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体に対応する、コンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示において説明される技法の実装のための命令、コード、および/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形式の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、いかなる接続も厳密にはコンピュータ可読媒体と呼ばれる。たとえば、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。ディスク(disk)およびディスク(disc)は、本明細書では、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲に含まれるべきである。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または本明細書において説明された技法の実施に適した任意の他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書において説明される機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で与えられることがあり、または複合コーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素において完全に実施され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、または1組のIC(たとえば、チップセット)を含む、様々なデバイスまたは装置において実施され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的側面を強調するために、様々な構成要素、モジュール、またはユニットが説明されているが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて結合されることがあり、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つもしくは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されることがある。
様々な例が説明されてきた。説明されたシステム、動作、機能、または例の任意の組合せが考えられる。これらの例および他の例は以下の特許請求の範囲内に入る。