本開示は、ビデオコーディングの分野に関し、より詳細には、パレットベースコーディングモードにおいてビデオデータのブロックを予測し、またはコーディングすることに関する。従来のビデオコーディングでは、画像は、連続階調かつ空間的に滑らかであるものと想定される。これらの想定に基づいて、ブロックベースの変換、フィルタ処理などの様々なツールが開発されており、そのようなツールは、自然コンテンツビデオにとって良好な性能を示してきた。しかしながら、リモートデスクトップ、共同作業、およびワイヤレスディスプレイのような用途では、コンピュータ生成されたスクリーンコンテンツ(たとえば、テキストまたはコンピュータグラフィックスなどの)が、圧縮されるべき主要なコンテンツであり得る。このタイプのコンテンツは、離散階調を有するとともに鋭い線および高コントラストのオブジェクト境界を特徴とする傾向がある。連続階調および滑らかさという想定は、もはやスクリーンコンテンツにとって当てはまらない場合があり、したがって、従来のビデオコーディング技法は、スクリーンコンテンツを含むビデオデータを圧縮するのに効率的ではない場合がある。
本開示は、スクリーンコンテンツのコーディングにとって特に好適であり得るパレットベースコーディングについて説明する。たとえば、ビデオデータの特定のエリアが比較的少数の色を有し、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)が、特定のエリアのビデオデータを表すためのいわゆる「パレット」を形成し得ると仮定する。パレットは、特定のエリア(たとえば、所与のブロック)のビデオデータを表す色または画素値のテーブルとして表され得る。たとえば、パレットは、所与のブロックの中の最も支配的な画素値を含み得る。場合によっては、最も支配的な画素値は、ブロック内で最も頻繁に発生する1つまたは複数の画素値を含み得る。さらに、いくつかのケースでは、ビデオコーダが、ある画素値がブロック中の最も支配的な画素値の1つとして含まれるべきか否かを決定するために、しきい値を適用し得る。パレットベースコーディングの様々な態様によれば、ビデオコーダは、ビデオデータの現在ブロックについて実際の画素値またはそれらの残差をコーディングする代わりに、現在ブロックの画素値のうちの1つまたは複数を示すインデックス値をコーディングし得る。パレットベースコーディングのコンテキストにおいて、インデックス値は、現在ブロックの個々の画素値を表すために使用される、パレット中のそれぞれのエントリを示す。
たとえば、ビデオエンコーダは、ブロック用のパレットを決定し(たとえば、パレットを明示的にコーディングする、パレットを予測する、またはこれらの組合せ)、画素値の1つまたは複数を表すためのパレット中のエントリを見つけ、ブロックの画素値を表すために使用されるパレット中のエントリを示すインデックス値とともにブロックを符号化することによって、ビデオデータのブロックを符号化することができる。いくつかの例では、ビデオエンコーダは、符号化ビットストリーム中でパレットおよび/またはインデックス値をシグナリングすることができる。ビデオデコーダは、符号化ビットストリームから、ブロック用のパレットと、さらにはブロックの個々のピクセルのインデックス値とを取得することができる。ビデオデコーダは、ブロックの様々な画素値を再構成するために、ピクセルのインデックス値をパレットのエントリに関連付けることができる。
以下で論じる様々な例によれば、本開示は、パレットベースコーディングモードでビデオデータのブロックをコーディングするときに、コーディング効率を改善するための技法について説明する。本開示の例は、パレットベースコーディングモードを使用してビデオデータをコーディングするための技法、およびパレットベースコーディングモードに関連したシンタックス要素をコーディングするための技法を含む。いくつかの例では、本開示の技法は、ビデオデコーダによって、ビデオデータのブロック用のパレットを決定および/または再構成するために使用されるシンタックス要素をコーディングすることに関する。
いくつかの例では、本開示のパレットベースコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。いくつかの例示的なビデオコーディング規格は、そのスケーラブルビデオコーディング(SVC)拡張およびマルチビュービデオコーディング(MVC)拡張を含む、ITU-T H.261、ISO/IEC MPEG-1ビジュアル、ITU-T H.262またはISO/IEC MPEG-2ビジュアル、ITU-T H.263、ISO/IEC MPEG-4ビジュアルおよびITU-T H.264(ISO/IEC MPEG-4 AVCとも呼ばれる)を含む。別の例では、パレットベースコーディング技法は、高効率ビデオコーディング(HEVC)とともに使用するために構成され得る。HEVCは、ITU-Tビデオコーディングエキスパートグループ(VCEG)およびISO/IECモーションピクチャエキスパートグループ(MPEG)のビデオコーディング共同研究部会(JCT-VC)によって開発された新しいビデオコーディング規格である。
最近、ITU-Tビデオコーディングエキスパートグループ(VCEG)およびISO/IECモーションピクチャエキスパートグループ(MPEG)のビデオコーディング共同研究部会(JCT-VC)によって、HEVCの設計が確定された。これ以降、HEVCバージョン1またはHEVC1と呼ばれる最新のHEVC仕様は、「ITU-T H.265(V1)」に記載されており、2015年3月24日現在、http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=11885&lang=enから入手可能である。ITU-T H.265、SERIES H: AUDIOVISUAL AND MULTIMEDIA SYSTEMS, Infrastructure of Audiovisual Services-Coding of Moving Video、「High Efficiency Video Coding」、2013年4月という文書も、HEVC規格を記載している。これ以降、RExtと呼ばれる範囲拡張の最近の仕様は、「ITU-T H.265(V2)」に記載されており、2015年3月24日現在、http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=12296&lang=enから入手可能である。
スクリーン生成コンテンツのより効率的なコーディングを提供するために、JCT-VCは、HEVCスクリーンコンテンツコーディング(SCC)規格と呼ばれる、HEVC規格に対する拡張を開発中である。「HEVC SCCドラフト2」または「WD2」と呼ばれる、HEVC SCC規格の最近の作業草案が、JCTVC-S1005、R. JoshiおよびJ. Xu、「HEVC screen content coding draft text 2」、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のビデオコーディング共同研究部会(JCT-VC)、第19回会合:ストラスブール、フランス、2014年10月17〜24日という文書に記載されている。
図1は、パレットベースビデオコーディングのための本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用する「ビデオコーダ」という用語は、総称的に、ビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、総称的に、ビデオ符号化またはビデオ復号を指す場合がある。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明する様々な例によるパレットベースビデオコーディングのための技法を実行するように構成され得るデバイスの例を表す。たとえば、ビデオエンコーダ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は、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、ブルーレイディスク、DVD、CD-ROM、フラッシュメモリ、または符号化ビデオデータを記憶するための他の適当なデジタル記憶媒体などの、ローカルにアクセスされる様々なデータ記憶媒体を含み得る。
さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ファイルサーバまたは他の中間記憶デバイスにおいて記憶された符号化ビデオデータに、ストリーミングまたはダウンロードを介してアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶するとともに符号化ビデオデータを宛先デバイス14へ送信することが可能なタイプのサーバであり得る。例示的なファイルサーバは、ウェブサーバ(たとえば、ウェブサイト用の)、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
宛先デバイス14は、インターネット接続などの標準的なデータ接続を通じて符号化ビデオデータにアクセスし得る。データ接続の例示的なタイプは、ファイルサーバに記憶されている符号化ビデオデータにアクセスするために適当である、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。ファイルサーバからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであってよい。
パレットベースビデオコーディングのための本開示の技法は、ワイヤレスの用途またはセッティングに限定されない。技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえば、インターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム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向けのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を制作するための取組みが進行中である。加えて、たとえば、本開示で説明するようなパレットベースコーディングモードは、HEVC規格向けの拡張を提供し得る。いくつかの例では、パレットベースコーディングのための本開示で説明する技法は、他のビデオコーディング規格に従って動作するように構成されたエンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースコーディングモードの適用例は、例として説明される。
HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは、通常、一連のピクチャを含む。ピクチャは、「フレーム」と呼ばれることもある。ピクチャは、SL、SCb、およびSCrと示される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(たとえば、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書で「クロマ」サンプルと呼ばれることもある。他の事例では、ピクチャはモノクロであってよく、ルーマサンプルのアレイだけを含んでよい。
ピクチャの符号化表現を生成するために、HEVCでは、ビデオエンコーダ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)を実行し得る。ビデオエンコーダ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は、シンタックス要素をビットストリームから復号するために、ビットストリームを構文解析し得る。ビデオデコーダ30は、ビットストリームから取得された(たとえば、復号された)シンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構成し得る。ビデオデータを再構成するためのプロセスは、概して、ビデオエンコーダ20によって実行されるプロセスと相反であり得る。たとえば、ビデオデコーダ30は、PUのMVを使用して、現在CUのPUに関するインター予測サンプルブロック(たとえば、インター予測ブロック)を決定し得る。加えて、ビデオデコーダ30は、現在CUのTUと関連した変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、変換係数ブロックに対して逆変換を実行して、現在CUのTUと関連した変換ブロックを再構成し得る。ビデオデコーダ30は、現在CUのPUに関する予測サンプルブロックのサンプルを、現在CUのTUの変換ブロックの対応するサンプルに加算することによって、現在CUのコーディングブロックを再構成し得る。ピクチャのCUごとにコーディングブロックを再構成することによって、ビデオデコーダ30はピクチャを再構成し得る。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースコーディングを実行するように構成され得る。たとえば、パレットベースコーディングでは、上で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を実行するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色または画素値のテーブルとして、いわゆるパレットをコーディングすることができる。このようにして、ビデオデータの現在ブロックの実際の画素値またはそれらの残差をコーディングするのではなく、ビデオコーダは、現在ブロックの画素値の1つまたは複数のためのインデックス値をコーディングすることができ、インデックス値は、現在ブロックの画素値を表すために使用されるパレット中のエントリを示す(たとえば、インデックスは、Y、Cr、およびCb値のセットに、またはR、G、およびB値のセットにマップし得る)。
たとえば、ビデオエンコーダ20は、ブロック用のパレットを決定し、ブロックの1つまたは複数の個々のピクセルの値を表す値を有するパレット中のエントリを見つけ、ブロックの1つまたは複数の個々の画素値を表すために使用されるパレット中のエントリを示すインデックス値とともにブロックを符号化することによって、ビデオデータのブロックを符号化することができる。さらに、ビデオエンコーダ20は、符号化ビットストリーム中でインデックス値をシグナリングすることができる。これに対して、ビデオ復号デバイス(たとえば、ビデオデコーダ30)は、符号化ビットストリームから、ブロック用のパレット、ならびにパレットを使用してブロックの様々な個々のピクセルを決定するために使用されるインデックス値を取得することができる。ビデオデコーダ30は、ブロックの画素値を再構成するために、個々のピクセルのインデックス値をパレットのエントリと突き合わせることができる。個々のピクセルの画素値が、ブロック用の対応するパレットによって表される画素値のいずれにも十分には近接しない事例では、ビデオデコーダ30は、そのような個々のピクセルを、パレットベースコーディングの目的のために、エスケープピクセルとして識別し得る。エスケープピクセルの画素値は、パレットインデックスによってではなく、明示的に符号化され得る。
別の例では、ビデオエンコーダ20は、以下の動作に従って、ビデオデータのブロックを符号化し得る。ビデオエンコーダ20は、ブロックの個々のピクセルについての予測残差値を決定し、ブロック用のパレットを決定し、個々のピクセルの予測残差値のうちの1つまたは複数の、値を表す値を有する、パレット中のエントリ(たとえば、インデックス値)を突き止めることができる。さらに、ビデオエンコーダ20は、ブロックの各個々のピクセルについての対応する予測残差値を表すために使用される、パレット中のエントリを示すインデックス値とともにブロックを符号化することができる。ビデオデコーダ30は、ソースデバイス12によってシグナリングされた符号化ビットストリームから、ブロック用のパレット、ならびにブロックの個々のピクセルに対応する予測残差値のためのインデックス値を取得することができる。説明されるように、インデックス値は、現在ブロックに関連付けられたパレット中のエントリに対応し得る。ビデオデコーダ30は、ブロックの予測残差値を再構成するために、予測残差値のインデックス値をパレットのエントリと関連付けることができる。予測残差値は、ブロックの画素値を再構成するために、予測値(たとえば、イントラまたはインター予測を使用して取得された)に加算されてよい。
以下でより詳細に説明されるように、パレットベースコーディングの基本的な考えは、コーディングされるべきビデオデータの所与のブロックに対して、現在ブロック中の最も支配的な画素値を含むパレットを、ビデオエンコーダ20が導出し得るというものである。たとえば、パレットは、現在CUに対して支配的である、および/またはそれを表すと決定または仮定される、いくつかの画素値を指し得る。ビデオエンコーダ20はまず、パレットのサイズと要素とをビデオデコーダ30に送信することができる。さらに、ビデオエンコーダ20は、ある走査順序に従って、所与のブロック中で画素値を符号化することができる。所与のブロック中に含まれる各ピクセルについて、ビデオエンコーダ20は、画素値を、パレット中の対応するエントリにマップするインデックス値をシグナリングし得る。画素値が、パレットエントリのうちのいずれの値にも十分には近接し(たとえば、何らかの所定のしきい値と比較して、値が十分には近接し)ない場合、そのようなピクセルは、「エスケープピクセル」として定義される。パレットベースコーディングに従って、ビデオエンコーダ20は、エスケープピクセル用に予約されているインデックス値を、すなわち、エスケープピクセルであって、パレットにエントリがあるピクセルではないことを示すために、符号化し、シグナリングすることができる。いくつかの例では、ビデオエンコーダ20は、所与のブロック中に含まれるエスケープピクセルについての画素値もしくは残差値(またはその量子化バージョン)を符号化し、シグナリングすることもできる。
ビデオエンコーダ20によってシグナリングされた符号化ビデオビットストリームを受信すると、ビデオデコーダ30は最初に、ビデオエンコーダ20から受信された情報に基づいてパレットを決定し得る。ビデオデコーダ30は次いで、所与のブロックの画素値を再構成するために、所与のブロック中のピクセルロケーションに関連付けられる、受信されたインデックス値をパレットのエントリにマップすることができる。いくつかの事例では、ビデオデコーダ30は、エスケープピクセル用に予約されたインデックス値でピクセルがパレットコーディングされていると決定することなどによって、パレットコード化ブロックのピクセルがエスケープピクセルであると決定し得る。ビデオデコーダ30がパレットコード化ブロック中のエスケープピクセルを識別する事例では、ビデオデコーダ30は、所与のブロック中に含まれるエスケープピクセルについての画素値もしくは残差値(またはその量子化バージョン)を受信し得る。ビデオデコーダ30は、個々の画素値を対応するパレットエントリにマップすることによって、およびパレットコード化ブロック中に含まれるどのエスケープピクセルを再構成するのにも画素値もしくは残差値(またはその量子化バージョン)を使用することによって、パレットコード化ブロックを再構成することができる。
ビデオエンコーダ20および/またはビデオデコーダ30は、以下でより詳細に説明するように、本開示で説明する技法に従って動作するように構成され得る。概して、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数のパレットコーディングモードを使用してビデオデータを符号化し、復号するように構成されてよく、パレットコーディングモードはパレット共有モードを含まない。本開示の技法は、明示的にシグナリングされる、現在パレット中のエントリの数を示す第1のシンタックス要素の第1のビンを決定するように構成される、ビデオエンコーダ20などのビデオコーディングデバイスを含む。ビデオエンコーダ20は、ビットストリームを符号化するようにさらに構成され得る。ビットストリームは、第1のシンタックス要素を含み得る。ビットストリームはまた、パレット共有モードを示す第2のシンタックス要素を含まなくてよい。いくつかの例では、第1のシンタックス要素の第1のビンを決定することは、コンテキスト適応型バイナリ算術コーディングを使用して、第1のシンタックス要素の第1のビンを決定することを含む。他の例では、第1のシンタックス要素の第1のビンを決定することは、1つまたは複数のコンテキストを使用して、第1のシンタックス要素の第1のビンを決定することを含む。1つまたは複数のコンテキストを使用するいくつかの例では、1つまたは複数のコンテキストは、予測されるパレットコーディングエントリ数またはブロックサイズのうちの少なくとも1つに基づき得る。
さらに、本開示は、現在ピクセルが、走査順序の列にある最初のピクセルであると決定するように構成されるビデオエンコーダ20について説明する。ビデオエンコーダ20は、現在ピクセルの上に位置する隣接ピクセルが利用可能であるとさらに決定することができる。現在ピクセルが、走査順序の列にある最初のピクセルであると決定し、現在ピクセルの上に位置する隣接ピクセルが利用可能であると決定したことに応答して、ビデオエンコーダ20は、第1のシンタックス要素をビットストリーム中で符号化するのをバイパスするようにさらに構成されてよく、第1のシンタックス要素は、ランタイプを示し、ビットストリームの残りを符号化する。
さらに、本開示の技法は、最大許容パレットサイズを示すとともにゼロという最小値を有する第1のシンタックス要素を決定するように構成されるビデオエンコーダ20を含む。ビデオエンコーダ20は、第1のシンタックス要素を含むビットストリームを符号化するようにも構成され得る。いくつかの例では、ビットストリームは、最大予測子パレットサイズを示すとともにゼロという最小値を有する第2のシンタックス要素をさらに含む。いくつかの例では、第1のシンタックス要素は、4096という最大値を有し、第2のシンタックス要素は、8192という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、4095という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、8191という最大値を有する。さらに他の例では、第1のシンタックス要素は、最大コーディングユニット中のピクセルの数に等しい最大値を有し、第2のシンタックス要素は、2などの正の定数に第1のシンタックス要素の最大値を乗算したものに等しい最大値を有する。他の例では、ビットストリームは、明示的にシグナリングされる、現在パレット中のエントリの数を示す別のシンタックス要素を含む。これのいくつかの例では、このシンタックス要素は、ゴロムライスコード、指数ゴロムコード、短縮ライスコード、または単項コードのうちの1つによって表される。これの他の例では、このシンタックス要素は、短縮ゴロムライスコード、短縮指数ゴロムコード、短縮された短縮ライスコード、短縮単項コード、またはパレットインデックスが、現在ピクセルの上の行にあるパレットインデックスからコピーされるのか、それとも符号化ビットストリーム中で明示的にコーディングされるのかを示す、符号化ビットストリーム中に含まれる第3のシンタックス要素をコーディングするためにも使用されるコードのうちの1つによって表される。いくつかの例では、このシンタックス要素は、短縮ライスモードによって表される。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、ビデオデータの現在ブロック中のピクセルの数に等しい最大値を有する。
さらに、本開示は、符号化ビットストリームを受信するように構成される、ビデオデコーダ30などのビデオコーディングデバイスについて説明する。符号化ビットストリームは、パレット共有モードを示す第1のシンタックス要素を含まない。さらに、符号化ビットストリームは、明示的にシグナリングされる、現在パレット中のエントリの数を示す第2のシンタックス要素を含む。ビデオデコーダ30は、第2のシンタックス要素の第1のビンを復号するようにさらに構成されてよい。いくつかの例では、第2のシンタックス要素の第1のビンを復号することは、コンテキスト適応型バイナリ算術コーディング要素を使用して、第2のシンタックス要素の第1のビンを復号することを含む。他の例では、第2のシンタックス要素の第1のビンを復号することは、1つまたは複数のコンテキストを使用して、第2のシンタックス要素の第1のビンを復号することを含む。1つまたは複数のコンテキストを使用するいくつかの例では、1つまたは複数のコンテキストは、予測されるパレットコーディングエントリ数またはブロックサイズのうちの少なくとも1つに基づき得る。
さらに、本開示の技法は、符号化ビットストリームを受信するように構成されるビデオデコーダ30を含む。符号化ビットストリームは、ランタイプを示す第1のシンタックス要素を含み得る。ビデオデコーダ30はさらに、現在ピクセルが、走査順序の列にある最初のピクセルであると決定するように構成されてよい。ビデオデコーダ30は、現在ピクセルの上に位置する隣接ピクセルが利用可能であるとさらに決定することができる。現在ピクセルが、走査順序の列にある最初のピクセルであると決定し、現在ピクセルの上に位置する隣接ピクセルが利用可能であると決定したことに応答して、ビデオデコーダ30は、第1のシンタックス要素を復号するのをバイパスしてよい。
さらに、本開示の技法は、最大許容パレットサイズを示すとともにゼロという最小値を有する第1のシンタックス要素を含む符号化ビットストリームを受信するように構成されるビデオデコーダ30を含む。ビデオデコーダ30は、符号化ビットストリームを復号するようにさらに構成されてよい。いくつかの例では、符号化ビットストリームは、最大予測子パレットサイズを示すとともにゼロという最小値を有する第2のシンタックス要素をさらに含む。いくつかの例では、第1のシンタックス要素は、4096という最大値を有し、第2のシンタックス要素は、8192という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、4095という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、8191という最大値を有する。さらに他の例では、第1のシンタックス要素は、最大コーディングユニット中のピクセルの数に等しい最大値を有し、第2のシンタックス要素は、2などの正の定数に第1のシンタックス要素の最大値を乗算したものに等しい最大値を有する。他の例では、符号化ビットストリームは、明示的にシグナリングされる、現在パレット中のエントリの数を示す別のシンタックス要素を含む。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、ゴロムライスコード、指数ゴロムコード、短縮ライスコード、または単項コードのうちの1つによって表される。他の例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、短縮ゴロムライスコード、短縮指数ゴロムコード、短縮された短縮ライスコード、短縮単項コード、またはパレットインデックスが、現在ピクセルの上の行にあるパレットインデックスからコピーされるのか、それとも符号化ビットストリーム中で明示的にコーディングされるのかを示すシンタックス要素をコーディングするために使用される同じコードのうちの1つによって表される。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、短縮ライスモードによって表される。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、ビデオデータの現在ブロック中のピクセルの数に等しい最大値を有する。
本開示の別の例では、ビデオデコーダ30は、符号化ビデオビットストリーム中でビデオデータのブロックを受信することであって、ビデオデータのブロックが、パレットベースコーディングモードを使用して符号化されている、ことと、ビデオデータのブロックを符号化するために使用されたパレットを示す複数のシンタックス要素を受信することであって、複数のシンタックス要素が、符号化ビデオビットストリーム中で明示的にシグナリングされる、パレット用のパレット値の数を示す第1のシンタックス要素を含む、ことと、複数のシンタックス要素を復号することであって、1つまたは複数のゴロムコードを使用して第1のシンタックス要素を復号することを含む、ことと、復号された複数のシンタックス要素に基づいてパレットを再構成することと、再構成されたパレットを使用してビデオデータのブロックを復号することとを行うように構成され得る。
本開示の別の例では、ビデオエンコーダ20は、パレットベースコーディングモードおよびパレットを使用して、ビデオデータのブロックを符号化することと、ビデオデータのブロックを符号化するために使用されたパレットを示す複数のシンタックス要素を生成することであって、複数のシンタックス要素が、符号化ビデオビットストリーム中で明示的にシグナリングされる、パレット用のパレット値の数を示す第1のシンタックス要素を含む、ことと、1つまたは複数のゴロムコードを使用して、第1のシンタックス要素を符号化することと、複数のシンタックス要素を符号化ビデオビットストリーム中に含めることとを行うように構成され得る。
図2は、本開示の様々な技法を実装することができる例示的なビデオエンコーダ20を示すブロック図である。図2は説明のために提供され、広く例示されるとともに本開示で説明されるような技法の限定と見なされるべきでない。説明のために、本開示は、HEVCコーディングのコンテキストにおけるビデオエンコーダ20を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
図2の例では、ビデオエンコーダ20は、ビデオデータメモリ98と、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構成ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120およびイントラ予測処理ユニット126を含む。インター予測処理ユニット120は、動き推定ユニットおよび動き補償ユニット(図示せず)を含む。ビデオエンコーダ20はまた、本開示で説明するパレットベースコーディング技法の様々な態様を実行するように構成された、パレットベース符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる構造構成要素を含んでよい。
ビデオデータメモリ98は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶してもよい。ビデオデータメモリ98に記憶されるビデオデータは、たとえば、図1のビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ98および復号ピクチャバッファ116は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ98および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供されてもよい。様々な例では、ビデオデータメモリ98は、ビデオエンコーダ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の1つまたは複数の予測サンプルブロックと、PUの動き情報とを含み得る。インター予測処理ユニット120は、PUがIスライスの中にあるのか、Pスライスの中にあるのか、それともBスライスの中にあるのかに応じて、CUのPUのための異なる動作を実行し得る。Iスライスでは、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測処理ユニット120は、インター予測をPUに対して実行しない。したがって、Iモードで符号化されたブロックに対して、予測ブロックは、同じフレーム内の以前に符号化された隣接ブロックからの空間的予測を使用して形成される。
PUがPスライスの中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUに関する参照領域を求めて参照ピクチャのリスト(たとえば、「RefPicList0」)の中の参照ピクチャを検索し得る。PUに関する参照領域は、PUのサンプルブロックに最も密に対応するサンプルブロックを含む、参照ピクチャ内の領域であり得る。動き推定ユニットは、PUに関する参照領域を含む参照ピクチャのRefPicList0の中での位置を示す参照インデックスを生成し得る。加えて、動き推定ユニットは、PUのコーディングブロックと参照領域に関連付けられた参照ロケーションとの間の空間変位を示すMVを生成し得る。たとえば、MVは、現在の復号ピクチャの中の座標から参照ピクチャの中の座標までのオフセットを提供する2次元ベクトルであってよい。動き推定ユニットは、PUの動き情報として参照インデックスおよび動きベクトル(MV)を出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUのMVによって示された参照ロケーションにおける実際のサンプルまたは補間されたサンプルに基づいて、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モードとして使用されるように構成され得る。他の例では、パレットベースコーディング技法は、HEVCのフレームワークにおけるPUモードとして使用されるように構成され得る。したがって、CUモードの状況において本明細書で(本開示全体で)説明される、開示されるプロセスのすべてが、追加または代替として、PUモードに適用され得る。しかしながら、そのような技法は、独立に機能するように、または他の既存の、もしくはこれから開発されるべきシステム/規格の一部として機能するように適用され得るので、これらのHEVCベースの例は、本明細書で説明するパレットベースコーディング技法の制約または限定と見なされるべきでない。これらの場合には、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、または非矩形形状の領域でさえあり得る。
パレットベース符号化ユニット122は、たとえば、パレットベースコーディングを、たとえば、CUまたはPUに対してパレットベース符号化モードが選択されたときに実行し得る。たとえば、パレットベース符号化ユニット122は、画素値を示すエントリを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置の画素値を表すためにパレット中の画素値を選択し、ビデオデータのブロックの位置の少なくともいくつかを選択された画素値にそれぞれ対応するパレット中のエントリと関連付ける情報をシグナリングするように構成することができる。様々な機能がパレットベース符号化ユニット122によって実行されるものとして説明されるが、そのような機能の一部またはすべてが、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
パレットベース符号化ユニット122は、パレットベースコーディングに関連する、本明細書で説明する様々なシンタックス要素のいずれかを生成するように構成され得る。したがって、ビデオエンコーダ20は、本開示で説明するようなパレットベースコーディングモードを使用して、ビデオデータのブロックを符号化するように構成され得る。ビデオエンコーダ20は、パレットコーディングモードを使用してビデオデータのブロックを選択的に符号化し得、または異なるモード、たとえば、そのようなHEVCインター予測コーディングモードまたはイントラ予測コーディングモードを使用して、ビデオデータのブロックを符号化し得る。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されたCUまたはPUであってよい。ビデオエンコーダ20は、インター予測時間予測コーディングモードまたはイントラ予測空間コーディングモードを用いて一部のブロックを符号化し得、パレットベースコーディングモードを用いて他のブロックを復号し得る。
イントラ予測処理ユニット126は、イントラ予測をPUに対して実行することによって、PUに関する予測データを生成し得る。PUに対する予測データは、PUに対する予測サンプルブロックおよび様々なシンタックス要素を含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対して、イントラ予測を実行し得る。
イントラ予測をPUに対して実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUに関する予測データの複数のセットを生成し得る。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に関連した量子化パラメータ(QP)値に基づいて、CUのTUに関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連したQP値を調整することによって、CUに関連付けられた係数ブロックに適用される量子化の程度を調整し得る。量子化が情報の損失をもたらすことがあり、したがって、量子化変換係数の精度は元の精度よりも低い場合がある。
逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、逆量子化および逆変換を係数ブロックに適用して、係数ブロックから残差ブロックを再構成し得る。再構成ユニット112は、再構成された残差ブロックを、予測処理ユニット100によって生成された1つまたは複数の予測サンプルブロックからの対応するサンプルに加算して、TUに関連する再構成された変換ブロックを生成し得る。このようにしてCUのTUごとに変換ブロックを再構成することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構成し得る。
フィルタユニット114は、1つまたは複数のデブロッキング動作を実行して、CUに関連したコーディングブロックにおけるブロッキングアーティファクトを低減し得る。フィルタユニット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つまたは複数の技法によれば、パレットベース符号化ユニット122は、1つまたは複数のパレットコーディングモードを使用してビデオデータを符号化するための、サンプル値からインデックスへの変換を実行するために、本開示の技法を適用することができ、パレットコーディングモードは、パレット共有モードを含まない。本開示の技法は、明示的にシグナリングされる、現在パレット中のエントリの数を示す第1のシンタックス要素の第1のビンを決定するように構成される、ビデオエンコーダ20のパレットベース符号化ユニット122を含む。ビデオエンコーダ20のパレットベース符号化ユニット122は、ビットストリームを符号化するようにさらに構成されてよい。ビットストリームは、第1のシンタックス要素を含み得る。ビットストリームはまた、パレット共有モードを示す第2のシンタックス要素を含まなくてよい。いくつかの例では、第1のシンタックス要素の第1のビンを決定することは、コンテキスト適応型バイナリ算術コーディングを使用して、第1のシンタックス要素の第1のビンを決定することを含む。他の例では、第1のシンタックス要素の第1のビンを決定することは、1つまたは複数のコンテキストを使用して、第1のシンタックス要素の第1のビンを決定することを含む。1つまたは複数のコンテキストを使用するいくつかの例では、1つまたは複数のコンテキストは、予測されるパレットコーディングエントリ数またはブロックサイズのうちの少なくとも1つに基づき得る。
さらに、本開示の技法は、現在ピクセルが、走査順序の列にある最初のピクセルであると決定するように構成される、ビデオエンコーダ20のパレットベース符号化ユニット122を含む。ビデオエンコーダ20のパレットベース符号化ユニット122は、現在ピクセルの上に位置する隣接ピクセルが利用可能であるとさらに決定することができる。現在ピクセルが、走査順序の列にある最初のピクセルであると決定し、現在ピクセルの上に位置する隣接ピクセルが利用可能であると決定したことに応答して、ビデオエンコーダ20のパレットベース符号化ユニット122は、第1のシンタックス要素をビットストリーム中で符号化するのをバイパスするようにさらに構成されてよく、第1のシンタックス要素は、ランタイプを示し、ビットストリームの残りを符号化する。
さらに、本開示の技法は、最大許容パレットサイズを示すとともにゼロという最小値を有する第1のシンタックス要素を決定するように構成される、ビデオエンコーダ20のパレットベース符号化ユニット122を含む。ビデオエンコーダ20のパレットベース符号化ユニット122は、第1のシンタックス要素を含むビットストリームを符号化するようにも構成され得る。いくつかの例では、ビットストリームは、最大予測子パレットサイズを示すとともにゼロという最小値を有する第2のシンタックス要素をさらに含む。いくつかの例では、第1のシンタックス要素は、4096という最大値を有し、第2のシンタックス要素は、8192という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、4095という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、8191という最大値を有する。さらに他の例では、第1のシンタックス要素は、最大コーディングユニット中のピクセルの数に等しい最大値を有し、第2のシンタックス要素は、2などの正の定数に第1のシンタックス要素の最大値を乗算したものに等しい最大値を有する。他の例では、ビットストリームは、明示的にシグナリングされる、現在パレット中のエントリの数を示す別のシンタックス要素を含む。これのいくつかの例では、このシンタックス要素は、ゴロムライスコード、指数ゴロムコード、短縮ライスコード、または単項コードのうちの1つによって表される。これの他の例では、このシンタックス要素は、短縮ゴロムライスコード、短縮指数ゴロムコード、短縮された短縮ライスコード、短縮単項コード、またはパレットインデックスが、現在ピクセルの上の行にあるパレットインデックスからコピーされるのか、それとも符号化ビットストリーム中で明示的にコーディングされるのかを示す、符号化ビットストリーム中に含まれる第3のシンタックス要素をコーディングするためにも使用されるコードのうちの1つによって表される。いくつかの例では、このシンタックス要素は、短縮ライスモードによって表される。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、ビデオデータの現在ブロック中のピクセルの数に等しい最大値を有する。
図3は、本開示の技法を実施するように構成されている例示的なビデオデコーダ30を示すブロック図である。ビデオデコーダ30は、図2を参照して説明したビデオエンコーダ20のものとは逆のやり方で動作し得る。図3は説明のために提供され、広く例示されるとともに本開示で説明されるような技法の限定でない。説明のために、本開示は、HEVCコーディングのコンテキストにおけるビデオデコーダ30を説明する。しかしながら、本開示の技法は、パレットモードコーディングが使用される他のコーディング規格または方法に適用可能であり得る。
図3の例では、ビデオデコーダ30は、ビデオデータメモリ148と、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構成ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164およびイントラ予測処理ユニット166を含む。ビデオデコーダ30はまた、本開示で説明するパレットベースコーディング技法の様々な態様を実行するように構成されたパレットベース復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる構造構成要素を含んでよい。
ビデオデータメモリ148は、ビデオデコーダ30の構成要素によって復号されるべき、符号化ビデオビットストリームなどのビデオデータを記憶してもよい。ビデオデータメモリ148に記憶されるビデオデータは、たとえば、チャネル16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線ネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ148は、符号化ビデオビットストリームからの符号化ビデオデータを記憶するコード化ピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ148および復号ピクチャバッファ162は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ148および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ148は、ビデオデコーダ30の他の構成要素とともにオンチップであってもよく、または、それらの構成要素に対してオフチップであってもよい。
ビデオデータメモリ148、たとえば、CPBは、ビットストリームの符号化ビデオデータ(たとえば、NALユニット)を受信および記憶し得る。エントロピー復号ユニット150は、ビデオデータメモリ148から符号化ビデオデータ(たとえば、NALユニット)を受け取り、NALユニットを解析してシンタックス要素を復号することができる。エントロピー復号ユニット150は、NALユニットの中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、およびフィルタユニット160は、ビットストリームから取得(たとえば、抽出)されたシンタックス要素に基づいて、復号ビデオデータを生成し得る。
ビットストリームの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は、有意な係数ブロックの変換係数レベルをビットストリームから抽出し、変換係数レベルを逆量子化し、変換ブロックを生成するため、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成するため、およびコーディングブロックを表示のために出力するために、変換係数レベルに変換を適用することができる。
本開示の様々な例によれば、ビデオデコーダ30は、パレットベースコーディングを実行するように構成され得る。パレットベース復号ユニット165は、たとえば、パレットベース復号を、たとえば、CUまたはPUに対してパレットベース復号モードが選択されたときに実行し得る。たとえば、パレットベース復号ユニット165は、画素値を示すエントリを有するパレットを生成するように構成され得る。さらに、この例では、パレットベース復号ユニット165は、ビデオデータのブロックの少なくともいくつかの位置をパレット中のエントリに関連付ける情報を受信することができる。この例では、パレットベース復号ユニット165は、情報に基づいて、パレット中で画素値を選択すればよい。さらに、この例では、パレットベース復号ユニット165は、選択された画素値に基づいて、ブロックの画素値を再構成することができる。様々な機能がパレットベース復号ユニット165によって実行されるものとして説明されるが、そのような機能の一部またはすべてが、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
本開示の1つまたは複数の技法によれば、パレットベース復号ユニット165は、パレットコーディングモード情報を受信し、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上の動作を実行することができる。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または異なるモードの使用を他のモード情報が示すとき、パレットベース復号ユニット165は、パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、非パレットベースコーディングモード、たとえば、そのようなHEVCインター予測コーディングモードまたはHEVCイントラ予測コーディングモードを使用して、ビデオデータのブロックを復号する。ビデオデータのブロックは、たとえば、HEVCコーディングプロセスに従って生成されたCUまたはPUであってよい。ビデオデコーダ30は、インター予測時間予測コーディングモードまたはイントラ予測空間コーディングモードを用いて一部のブロックを復号し得、パレットベースコーディングモードを用いて他のブロックを復号し得る。パレットベースコーディングモードは、複数の異なるパレットベースコーディングモードのうちの1つを備え得、または単一のパレットベースコーディングモードがあり得る。
本開示の技法の1つまたは複数によれば、ビデオデコーダ30、および具体的にはパレットベース復号ユニット165は、パレットコード化ビデオブロックのパレットベースビデオ復号を実行することができる。上で説明したように、ビデオデコーダ30によって復号されたパレットは、ビデオエンコーダ20によって明示的に符号化およびシグナリングされ、受信されたパレットコード化ブロックに関してビデオデコーダ30によって再構成されてよく、以前のパレットエントリから予測されてよく、以前の画素値から予測されてよく、またはこれらの組合せであってよい。
パレットベース復号ユニット165は、1つまたは複数のパレットコーディングモードを使用してビデオデータを復号するための、サンプル値からインデックスへの変換を実行するために、本開示の技法を適用することができ、パレットコーディングモードは、パレット共有モードを含まない。さらに、本開示の技法は、符号化ビットストリームを受信するように構成される、ビデオデコーダ30のパレットベース復号ユニット165を含む。この例では、符号化ビットストリームは、パレット共有モードを示す第1のシンタックス要素を含まない。さらに、符号化ビットストリームは、明示的にシグナリングされる、現在パレット中のエントリの数を示す第2のシンタックス要素を含む。ビデオデコーダ30のパレットベース復号ユニット165は、第2のシンタックス要素の第1のビンを復号するようにさらに構成されてよい。いくつかの例では、第2のシンタックス要素の第1のビンを復号することは、コンテキスト適応型バイナリ算術コーディング(CABAC)ユニットを使用して、第2のシンタックス要素の第1のビンを復号することを含む。他の例では、第2のシンタックス要素の第1のビンを復号することは、1つまたは複数のコンテキストを使用して、第2のシンタックス要素の第1のビンを復号することを含む。1つまたは複数のコンテキストを使用するいくつかの例では、1つまたは複数のコンテキストは、予測されるパレットコーディングエントリ数またはブロックサイズのうちの少なくとも1つに基づき得る。
さらに、本開示の技法は、符号化ビットストリームを受信するように構成される、ビデオデコーダ30のパレットベース復号ユニット165を含む。符号化ビットストリームは、ランタイプを示す第1のシンタックス要素を含み得る。ビデオデコーダ30のパレットベース復号ユニット165はさらに、現在ピクセルが、走査順序の列にある最初のピクセルであると決定するようにさらに構成されてよい。ビデオデコーダ30のパレットベース復号ユニット165は、現在ピクセルの上に位置する隣接ピクセルが利用可能であるとさらに決定することができる。現在ピクセルが、走査順序の列にある最初のピクセルであると決定し、現在ピクセルの上に位置する隣接ピクセルが利用可能であると決定したことに応答して、ビデオデコーダ30のパレットベース復号ユニット165は、第1のシンタックス要素を復号するのをバイパスしてよい。
さらに、本開示の技法は、最大許容パレットサイズを示すとともにゼロという最小値を有する第1のシンタックス要素を含む符号化ビットストリームを受信するように構成される、ビデオデコーダ30のパレットベース復号ユニット165を含む。ビデオデコーダ30のパレットベース復号ユニット165は、符号化ビットストリームを復号するようにさらに構成されてよい。いくつかの例では、符号化ビットストリームは、最大予測子パレットサイズを示すとともにゼロという最小値を有する第2のシンタックス要素をさらに含む。いくつかの例では、第1のシンタックス要素は、4096という最大値を有し、第2のシンタックス要素は、8192という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、4095という最大値を有する。他の例では、第1のシンタックス要素は、4095という最大値を有し、第2のシンタックス要素は、8191という最大値を有する。さらに他の例では、第1のシンタックス要素は、最大コーディングユニット中のピクセルの数に等しい最大値を有し、第2のシンタックス要素は、2などの正の定数に第1のシンタックス要素の最大値を乗算したものに等しい最大値を有する。他の例では、符号化ビットストリームは、別のシンタックス要素、たとえば、明示的にシグナリングされる、現在パレット中のエントリの数を示す第3のシンタックス要素を含む。本開示のいくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、ゴロムライスコード、指数ゴロムコード、短縮ライスコード、または単項コードのうちの1つによって表される。本開示の他の例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、短縮ゴロムライスコード、短縮指数ゴロムコード、短縮された短縮ライスコード、短縮単項コード、またはパレットインデックスが、現在ピクセルの上の行にあるパレットインデックスからコピーされるのか、それとも符号化ビットストリーム中で明示的にコーディングされるのかを示す、符号化ビットストリーム中に含まれる第3のシンタックス要素をコーディングするためにも使用されるコードのうちの1つによって表される。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、短縮ライスモードによって表される。いくつかの例では、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素は、ビデオデータの現在ブロック中のピクセルの数に等しい最大値を有する。
例に応じて、本明細書で説明する技法のいずれかのいくつかの行為またはイベントは異なる順序で実行されてもよく、一緒に追加され、統合され、または省略されてもよい(たとえば、説明される行為またはイベントのすべてが技法の実施のために必要とは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理、または複数のプロセッサを通じて同時に実行され得る。加えて、明快のために本開示のいくつかの態様は単一のモジュールまたはユニットによって実行されるものとして説明されるが、本開示の技法がビデオコーダと関連したユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
例示のために、本開示のいくつかの態様は開発中のHEVC規格に関して説明された。しかしながら、本開示で説明する技法は、まだ開発されていない他の標準的なまたは独自のビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
上述された技法は、ビデオエンコーダ20(図1および図2)および/またはビデオデコーダ30(図1および図3)によって実行されてよく、それらの両方が概してビデオコーダと呼ばれることがある。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。
いくつかの例では、パレットベースコーディング技法は、HEVC規格またはHEVC SCC規格の1つまたは複数のコーディングモードにおいて使用するために構成され得る。他の例では、パレットベースコーディング技法は、独立して、または他の既存もしくは将来のシステムもしくは規格の一部として使用され得る。いくつかの例では、ビデオデータのパレットベースコーディングのための技法は、ビデオデータのインター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、以下でより詳細に説明されるように、エンコーダもしくはデコーダ、または組み合わされたエンコーダデコーダ(コーデック)が、インター予測コーディングおよびイントラ予測コーディング、ならびにパレットベースコーディングを実行するように構成され得る。
HEVCフレームワークに関して、一例として、パレットベースコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースコーディング技法は、HEVCのフレームワークにおいて予測ユニット(PU)モードとして使用されるように構成され得る。したがって、CUモードのコンテキストにおいて説明される、以下の開示されるプロセスのすべては、追加または代替として、PUに適用され得る。しかしながら、そのような技法は、独立に機能するように、または他の既存の、もしくはこれから開発されるべきシステム/規格の一部として機能するように適用され得るので、これらのHEVCベースの例は、本明細書で説明するパレットベースコーディング技法の制約または限定と見なされるべきでない。これらの場合には、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、または非矩形形状の領域でさえあり得る。
パレットベースコーディングの基本的な考えは、各CU用に、現在CU中の最も支配的な画素値を備える(およびそれらからなる)パレットが導出されるというものである。パレットのサイズおよび要素は最初に、ビデオエンコーダからビデオデコーダに送信される。パレットのサイズおよび/または要素は、直接コーディングされるか、または隣接CU(たとえば、上および/もしくは左のコード化CU)中のパレットのサイズおよび/もしくは要素を使用して予測符号化され得る。その後、CU中の画素値は、一定の走査順序に従って、パレットに基づいて符号化される。CU中の各ピクセルロケーションについて、フラグ、たとえば、palette_flagが、画素値がパレット中に含まれるか否かを示すために最初に送信される。いくつかの例では、そのようなフラグは、copy_above_palette_indices_flagと呼ばれる。パレットの中のエントリにマッピングする画素値の場合、CUの中の所与のピクセルロケーションに関して、そのエントリに関連付けられたパレットインデックスがシグナリングされる。パレット中に存在しない画素値について、特別なインデックスがピクセルに割り当てられてよく、実際の画素値(いくつかの場合、量子化された画素値)が、CU中の所与のピクセルロケーション向けに送信される。これらのピクセルは、「エスケープピクセル」と呼ばれる。「エスケープピクセル」は、たとえば固定長コーディング、単項コーディングなど、どの既存のエントロピーコーディング方法を使用してコーディングされてもよい。
他の例では、どのフラグも、ピクセルが「エスケープ」ピクセルであるか否かを明示的に示すために使用されない。そうではなく、フラグまたは他のシンタックス要素が、ランタイプを示すために使用され得る。ランタイプを示すシンタックス要素は、それ以降のインデックスが、現在ピクセルの上の位置からコピーされるか否か、またはシグナリングされるインデックス値のランがあるか否かを示すことができる。特定のピクセルの導出されたインデックス値が、「エスケープインデックス」(たとえば、エスケープピクセルの使用を示す、パレット中の所定のインデックス)に対応する場合、ビデオデコーダ30は、そのようなピクセルがエスケープピクセルであると決定してよい。
スクリーンコンテンツコーディング効率を改善するために、パレットモードを拡張する、いくつかの方法が提案されている。たとえば、そのような方法は、JCTVC-S0114(Kim, J.ら、「CE6-related: Enabling copy above mode prediction at the boundary of CU」、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のビデオコーディング共同研究部会(JCT-VC)、第19回会合:ストラスブール、フランス、2014年10月17〜24日)、JCTVC-S0120(Ye, J.ら、「Non-CE6: Copy previous mode」、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のビデオコーディング共同研究部会(JCT-VC)、第19回会合:ストラスブール、フランス、2014年10月17〜24日)、ならびにJCTVC-S0151(Wang, W.ら、「Non-CE6: 2-D Index Map Coding of Palette Mode in HEVC SCC」ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のビデオコーディング共同研究部会(JCT-VC)、第19回会合:ストラスブール、フランス、2014年10月17〜24日)に見ることができる。
X. GuoおよびA. Saxena、「RCE4: Summary report of HEVC Range Extension Core Experiments 4 (RCE4) on palette coding for screen content」、JCTVC-P0035、サンノゼ、米国、2014年1月9〜17日という文書がパレットベースモードの2つのテスト結果を記載し、それらは、特にスクリーンコンテンツにとって、ボンテガード(Bjontegaard)ひずみレート(BDレート)の著しい低減を達成すると報告された。2つの方法が、以下に手短に要約される。
たとえば、X. Guo、Y. Lu、およびS. Li、「RCE4: Test 1. Major-color-based screen content coding」、JCTVC-P0108、サンノゼ、米国、2014年1月9〜17日という文書において説明されるような1つの例示的な方法では、画素を分類するためにヒストグラムベースのアルゴリズムが使用される。詳細には、ヒストグラムにおいて最も重要なN個のピーク値が、コーディングのためのメジャーカラー(major color)として選択される。メジャーカラーに近接する画素値は、メジャーカラーに量子化される。いかなるメジャーカラーセットにも属さない他の画素は、同様にコーディングの前に量子化されるエスケープピクセル(escape pixel)である。可逆コーディングの場合、量子化は使用されない。
分類を使用することによって、コーディングユニット(CU)の画素が、カラーインデックスに変換され得る。その後、メジャーカラー番号および値がコーディングされる。次いで、カラーインデックスは、次のようにコーディングされる。
・画素ラインごとに、コーディングモードを示すためのフラグがシグナリングされる。3つのモード、すなわち、水平モード、垂直モード、および標準モードがある。
・モードが水平モードである場合、全ライン(すなわち、ライン全体の中のピクセルすべて)が、同じカラーインデックスを共有する。この場合、カラーインデックスが送信される。
・モードが垂直モードである場合、ライン全体が上のラインと同じである。この場合、何も送信されない。現在のラインは、上のラインのカラーインデックスをコピーする。
・モードが標準モードである場合、それが左の画素および上の画素のうちの1つと同じであるかどうかを示すために、画素位置ごとにフラグがシグナリングされる。そうでない場合、インデックス自体が送信される。
加えて、画素がエスケープピクセルである場合、画素値が送信される。
たとえば、L. Guo、W. Pu、M. Karczewicz、J. Sole、R. Joshi、およびF. Zou、「RCE4: Results of Test 2 on Palette Mode for Screen Content Coding」、JCTVC-P0198、サンノゼ、米国、2014年1月9〜17日という文書において説明されるような別の例示的な方法では、パレットベースコーディングモードがCUモードとして含まれる。第2の方法の符号化プロセスは、以下のことを含み得る。
・パレットの送信:左のCU(現在コーディングされているCUの左側に隣接するCU)のパレットに基づいて現在パレットを符号化するために、エントリ単位の予測方式が使用される。その後、パレットの予測されないエントリが送信される。
・画素値の送信:CUの中の画素が以下の3つのモードを使用してラスタ走査順序で符号化される。
・「ランモード」:パレットインデックスが最初にシグナリングされ、「palette_run」(M)が後続する。後続するM個のパレットインデックスは、最初にシグナリングされたパレットインデックスと同じである。
・「上方コピーモード」:後続するN個のパレットインデックスが、それぞれ、それらの上方に隣接するものと同じであることを示すために、値「copy_run」(N)が送信される。
・「画素モード」:予測フラグが最初に送信される。1に等しいフラグ値は、再構成された上の隣接画素を予測子として使用する予測残差が送信されることを示す。このフラグの値が0である場合、画素値は、予測なしに送信される。
パレットは、パレットコード化ブロック(たとえば、CU)にとって比較的重要なビットの部分を作り上げることができる。したがって、ビデオコーダは、前にコーディングされたパレットの1つまたは複数のエントリに基づいて、パレットの1つまたは複数のエントリを予測し得る(たとえば、「パレットの送信」に関して上述したように)。
いくつかの例では、ビデオコーダは、パレットエントリを予測するとき、パレット予測子リストを生成し得る。たとえば、C. Gisquet、G. Laroche、およびP. Onno、「AhG10: Palette predictor stuffing」、JCTVC-Q0063という文書が、パレット予測子を決定するための1つの例示的なプロセスを開示する。いくつかの例では、ビデオコーダは、現在コーディングされているブロック用のパレットの中の1つまたは複数のエントリを予測するためにパレット予測子リストの中の各アイテムが使用されるのか(それとも、使用されないのか)を示すために、ブールベクトルを使用し得る。
いくつかの例では、パレット予測子リストの中のアイテムのすべては、前にコーディングされたパレット(たとえば、前にコーディングされたブロックを用いてコーディングされたパレット)から導出される。しかしながら、そのようなパレットは、現在CUから空間的に遠く離れている場合があり、そのことがパレット相関を比較的弱くさせることがある。概して、パレット予測子テーブルを拡張することが役に立つ場合がある(たとえば、より正確な予測子を提供し得、そのことが効率の向上をもたらし得る)。しかしながら、比較的大きいパレット予測子テーブルを決定および使用することは、比較的長いブールベクトルをもたらす。
パレットコーディングの一例では、ビデオエンコーダ20は、ビデオフレームの特定の領域のためにパレットベースコーディングモードが使用されるか否かを示すフラグ「PLT_Mode_flag」などのシンタックス要素を生成し得る。たとえば、PLT_Mode_flagは、スライスレベル、CUレベル、PUレベル、またはビデオフレームの任意の他のレベルにおいて生成され得る。たとえば、ビデオエンコーダ20は、PLT_Mode_flagをCUレベルにおいて生成し得、PLT_Mode_flagを符号化ビデオビットストリームの中でシグナリングし得る。ビデオデコーダ30は、次いで、符号化ビデオビットストリームを復号すると、PLT_Mode_flagを構文解析し得る。この例では、このPLT_Mode_flagの1に等しい値は、パレットモードを使用して現在CUが符号化されていることを規定する。この場合、ビデオデコーダ30は、CUを復号するためにパレットベースコーディングモードを適用し得る。いくつかの例では、シンタックス要素が、CU用の複数の異なるパレットモードのうちの1つを示し得る。
このPLT_Mode_flagの0に等しい値は、パレットモード以外のモードを使用して現在CUが符号化されていることを規定する。たとえば、様々なインター予測モード、イントラ予測モード、または他のコーディングモードのいずれかが使用され得る。PLT_Mode_flagの値が0であるとき、それぞれのCUを符号化するためにどの特定のモードが使用されているのかをシグナリングするためにさらなる情報が送信されてよく、その場合、そのような特定のモードは、通常、HEVCコーディングモード(たとえば、イントラコーディングまたはインターコーディング)であり得る。PLT_Mode_flagの使用が例として説明される。しかしながら、他の例では、CU(または、他の例ではPU)のためにパレットベースコーディングモードが使用されるべきかどうかを示すために、または複数のモードのうちのどれが使用されるべきかを示すために、マルチビットコードなどの他のシンタックス要素が使用され得る。
PLT_Mode_flagまたは他のシンタックス要素はまた、より高位のレベルにおいて送信されてよい。たとえば、PLT_Mode_flagは、スライスレベルにおいて送信されてよい。この場合、フラグの1に等しい値は、スライスの中のCUのすべてがパレットモードを使用して符号化されることを暗示する(そのことは、たとえば、パレットモードまたは他のモードのためのモード情報がCUレベルにおいて送信される必要がないことを意味する)。同様に、このフラグは、ピクチャパラメータセット(PPS)レベル、シーケンスパラメータセット(SPS)レベル、またはビデオパラメータセット(VPS)レベルにおいてシグナリングされ得る。また、特定のピクチャ、スライスなどに対してパレットモードが有効化されているのか、それとも無効化されているのかを規定するフラグがこれらのレベルのうちの1つにおいて送信されてよく、一方、PLT_Mode_flagは、CUごとにパレットベースコーディングモードが使用されているのかどうかを示す。この場合、スライスレベル、PPSレベル、SPSレベル、またはVPSレベルにおいて送信されたフラグまたは他のシンタックス要素が、パレットコーディングモードが無効化されていることを示す場合、いくつかの例では、CUごとにPLT_Mode_flagをシグナリングする必要がない場合がある。あるいは、スライスレベル、PPSレベル、SPSレベル、またはVPSレベルにおいて送信されたフラグまたは他のシンタックス要素が、パレットコーディングモードが有効化されていることを示す場合、パレットベースコーディングモードが使用されているかどうかを示すために、CUごとにPLT_Mode_flagがさらにシグナリングされてよい。やはり、上述のように、CUのパレットベースコーディングを示すためにこれらの技法を適用することは、付加的または代替的に、PUのパレットベースコーディングを示すために使用され得る。
PLT_Mode_flagなどのフラグは、同様に、または代替的に、条件付きで送信または推定され得る。PLT_Mode_flagを送信し、またはそのフラグを推定するための条件は、例として、CUのサイズ、フレームタイプ、色空間、色成分、フレームサイズ、フレームレート、スケーラブルビデオコーディングにおけるレイヤid、またはマルチビューコーディングにおけるビューidのうちの1つまたは複数であり得る。
パレットの生成および送信のための技法が、次に説明される。ビデオエンコーダ20は、ビデオフレームの特定のレベル(たとえば、CU)を符号化するためにビデオエンコーダ20によって使用されたパレットを、構成および/または再構成するためにビデオデコーダ30によって使用され得る、1つまたは複数のシンタックス要素および値を、生成およびシグナリングするように構成され得る。いくつかの例では、ビデオエンコーダ20は、CUごとにパレットを示し得、または別のやり方でシグナリングし得る。他の例では、ビデオエンコーダ20は、いくつかのCUの間で共有され得るパレットを示し得、または別のやり方でシグナリングし得る。
たとえば、含まれる画素値の数に換算したパレットのサイズは固定値であってよく、またはビデオエンコーダ20によって符号化ビデオビットストリームの中でシグナリングされ得る。ビデオデコーダ30は、パレットサイズの表示を、符号化ビデオビットストリームから受信および復号し得る。シグナリングは異なる成分に対して別個であってよく、または単一のサイズがすべての成分に対してシグナリングされてもよい。異なる成分は、たとえば、ルーマ成分およびクロマ成分であり得る。シグナリングは、単項コードまたは(たとえば、パレットサイズの最大限度において切り取られた)短縮単項コードを使用することができる。指数ゴロムコードまたはライスゴロムコードも使用され得る。いくつかの例では、サイズのシグナリングは次の方法で行われ得、すなわち、パレットの中のエントリをシグナリングした後、「ストップ」フラグがシグナリングされる。このフラグの1に等しい値は、現在のエントリがパレットの中の最後のエントリであることを規定し、このフラグの0に等しい値は、パレットの中にさらに多くのエントリがあることを規定する。すでに構成されたパレットがパレットサイズの最大限度に達している場合、「ストップ」フラグはエンコーダによって送信されなくてよい。いくつかの例では、パレットのサイズはまた、「フラグPLT_Mode_flagの送信」について上記で説明したものと同じ方法で、副次的情報に基づいて条件付きで送信または推定され得る。
パレットは、CUの中の色成分ごとに別個に送信され得る。たとえば、このCUのY成分用のパレット、このCUのU成分用の別のパレット、およびこのCUのV成分用のさらに別のパレットがあってよい。Yパレットの場合、エントリはこのCUの中の代表的なY値で(おそらく)あり得る。同じことがU成分およびV成分に適用される。パレットがCUの中の色成分のすべてに対して送信され得ることも可能である。この例では、パレットの中のi番目のエントリは、トリプル(Yi、Ui、Vi)である。この場合、パレットは成分の各々に関する値を含む。
パレットの予測は、上述された「パレットの送信」の代替手法である。いくつかの例では、パレット予測技法は、パレットシグナリング技法と一緒に使用され得る。すなわち、ビデオエンコーダ20は、パレットエントリの総数の一部分を予測するためにビデオデコーダ30によって使用され得るシンタックス要素をシグナリングするように構成され得る。加えて、ビデオエンコーダ20は、パレットエントリの別の部分を明示的にシグナリングするように構成され得る。
パレット予測手法の一例では、CUごとに、1つのフラグ「pred_palette_flag」が送信される。このフラグの1に等しい値は、現在CU用のパレットが過去のデータから予測され、したがって、パレットが送信される必要がないことを規定する。このフラグの0に等しい値は、現在CUのパレットが送信される必要があることを意味する。フラグは、異なる色成分に対して別個であってよく(たとえば、YUVビデオにおけるCUに対して3つのフラグが送信される必要があるように)、または単一のフラグがすべての色成分に対してシグナリングされてもよい。たとえば、単一のフラグが、成分のすべてに対してパレットが送信されるかどうか、または成分のすべてに対してパレットが予測されるかどうかを示し得る。
いくつかの例では、予測は、以下の方式で実行され得る。予測フラグ値が1に等しい場合、現在CUに対して、ビデオエンコーダ20は、すでに符号化された隣接CUのうちの1つまたは複数のパレットをコピーする。すでに符号化された隣接CUのパレットは、送信または予測されていることがある。たとえば、コピーされた隣接CUは、左の隣接CUであり得る。左のCUのパレットが利用可能でない場合(左のCUがパレットモードを使用して符号化されていないか、または現在CUがピクチャの最初の列にある場合のように)、パレットのコピーは、現在CUの上のCUからであってよい。コピーされるパレットはまた、いくつかの隣接CUのパレットの組合せであり得る。たとえば、複数の隣接CUの1つまたは組合せのパレットに基づいてパレットを生成するために、1つまたは複数の公式、関数、規則などが適用されてよい。
現在CUがパレットをそこからコピーする候補CUを示すために、ビデオエンコーダ20によって候補リストが構成され得るとともにインデックスが送信されることも可能である。ビデオデコーダ30は、同じ候補リストを構成し得、次いで、インデックスを使用して、現在CUとともに使用するための対応するCUのパレットを選択し得る。たとえば、候補リストは、スライス内またはピクチャ内でコーディングされるべき現在CUに対して上の1つのCU、および左側の1つのCUを含んでよい。この例では、フラグまたは他のシンタックス要素が、候補選択肢を示すためにシグナリングされてよい。たとえば、送信される0に等しいフラグは、コピーが左のCUからであることを意味し、送信される1に等しいフラグは、コピーが上のCUからであることを意味する。ビデオデコーダ30は、対応する隣接CUからコピーされるべきパレットを選択し、現在CUを復号する際に使用するためにそれをコピーする。予測はまた、現在CUの因果的隣接物(causal neighbor)における最多のサンプル値を使用して導出され得る。
パレットの予測はまた、エントリ単位であり得る。パレットの中のエントリごとに、ビデオエンコーダ20は、フラグを生成およびシグナリングする。所与のエントリに対するフラグの1に等しい値は、予測される値(たとえば、左のCUのような選択された候補CUからの対応するエントリ)がこのエントリの値として使用されることを規定する。フラグの0に等しい値は、このエントリが予測されず、その値がビデオエンコーダ20からビデオデコーダ30へ送信されること、たとえば、後でビデオデコーダ30によって復号できるようにビデオエンコーダ20によって符号化されたビットストリームの中でシグナリングされることを規定する。
「pred_palette_flag」の値、現在CUのパレットを予測するためにそのパレットが使用される候補CU、または候補を構成するための規則はまた、「フラグPLT_Mode_flagの送信」について上記で説明したものと同じ方法で、副次的情報に基づいて条件付きで送信または推定され得る。
次に、ビデオエンコーダ20は、それぞれのどのパレットエントリがCUの中の各画素に関連付けられているのかを示すマップを、生成およびシグナリングし得る。マップの中のi番目のエントリは、CUの中のi番目の位置に対応する。i番目のエントリの1に等しい値は、CUの中のこのi番目のロケーションにおける画素値がパレットの中の値のうちの1つであり、ビデオデコーダ30が画素値を再構成できるようにパレットインデックスがさらに送信されることを規定する(パレットの中にただ1つのエントリしかない場合、パレットインデックスの送信はスキップされてよい)。i番目のエントリの0に等しい値は、CUの中のi番目の位置における画素値がパレットの中になく、したがって、画素値がビデオデコーダ30へ明示的に送信されることを規定する。
CUの中のある位置における画素値がパレットの中の値である場合、CUの中で隣接する位置が同じ画素値を有する確率が高いことが観察される。そのため、ある位置に関するパレットインデックス(jと呼び、それは画素値sに対応する)を符号化した後、ビデオエンコーダ20は、異なる画素値に走査が到達する前の、CUの中での同じ画素値sとして連続した値の数を示すためのシンタックス要素「ラン」を送信し得る。たとえば、すぐ次のものがsと異なる値を有する場合、ラン=0が送信される。次のものがsであるがその後のものがsでない場合、ラン=1である。
ランが送信されない場合(たとえば、暗黙的ラン導出)、ランの値は、たとえば、4、8、16などの定数であってよく、またはランの値も副次的情報に依存し得る。たとえば、ランの値はブロックサイズに依存し得、たとえば、ランは、現在ブロックの幅か、現在ブロックの高さか、現在ブロックの半分の幅(または、半分の高さ)か、ブロックの幅および高さの分数か、ブロックの高さ/幅の複数に等しい。ランの値はまた、QP、フレームタイプ、色成分、カラーフォーマット(たとえば、444、422、420)および/または色空間(たとえば、YUV、RGB)に依存し得る。ランの値はまた、走査方向に依存し得る。他の例では、ランの値は、他のタイプの副次的情報に依存し得る。ランの値はまた、高レベルシンタックス(たとえば、PPS、SPS)を使用してシグナリングされてよい。
いくつかの例では、マップが送信される必要がない場合がある。ランは、いくつかのロケーションにおいてのみ開始し得る。たとえば、ランは、各行の先頭またはN行ごとの先頭においてのみ開始し得る。開始ロケーションは、異なる走査方向に対して異なってよい。たとえば、垂直走査が使用される場合、ランは、列の先頭またはN列ごとの先頭においてのみ開始し得る。開始ロケーションは、副次的情報に依存し得る。たとえば、開始ロケーションは、各行もしくは各列の中間点、または各行/列の1/n、2/n、...(n-1)/n(すなわち、分数)であってよい。開始ロケーションはまた、QP、フレームタイプ、色成分、カラーフォーマット(たとえば、444、422、420)および/または色空間(たとえば、YUV、RGB)に依存し得る。他の例では、ランの開始位置は、他のタイプの副次的情報に依存し得る。開始位置はまた、高レベルシンタックス(たとえば、PPS、SPSなど)を使用してシグナリングされ得る。
暗黙的開始位置導出および暗黙的ラン導出が組み合わされることも可能である。たとえば、ランは、2つの隣接する開始位置の間の距離に等しい。開始点がすべての行の先頭(すなわち、1番目の位置)である場合、ランの長さは行である。
走査方向は垂直または水平であってよい。走査方向を示すために、CUごとにフラグが送信されることが可能である。フラグは成分ごとに別個に送信されてよく、または単一のフラグが送信されてもよく、示された走査方向がすべての色成分に適用される。45度または135度のような、他の走査方向が使用されることも可能である。走査順序は固定であってよく、または「フラグPLT_Mode_flagの送信」について上記で説明したものと同じ方法で、副次的情報に依存し得る。
上で、パレットをどのように送信するのかが説明されている。上記で説明した例の代案は、パレットをオンザフライで構成することである。この場合、CUの先頭において、パレットの中にエントリがなく、ビデオエンコーダ20がCUの中の位置に対して画素の新しい値をシグナリングするとき、これらの値がパレットの中に含められる。すなわち、CUの中の位置に対して画素値が生成および送信されるとき、ビデオエンコーダ20は画素値をパレットに追加する。次いで、ビデオエンコーダ20に画素値を送信させる代わりに、同じ値を有するCUの中の後の位置が、たとえば、インデックス値を用いてパレットの中の画素値を参照し得る。同様に、ビデオデコーダ30は、CUの中の位置に対する新しい画素値(たとえば、エンコーダによってシグナリングされる)を受信すると、ビデオデコーダ30によって構成されるパレットの中に画素値を含める。パレットに追加された画素値をCUの中の後の位置が有するとき、ビデオデコーダ30は、たとえば、CUの中の画素値の再構成のために、パレットの中の対応する画素値を識別するインデックス値などの情報を受信し得る。
最大パレットサイズに到達した場合、たとえば、パレットが動的にオンザフライで構成されるとき、エンコーダおよびデコーダは、パレットのエントリを除去するための同じメカニズムを共有する。1つの方法は、パレットの中の最も古いエントリを除去することである(FIFO待ち行列)。別の方法は、パレットの中の最も使用されないエントリを除去することである。別の方法は、両方の方法(パレットの中での時間および使用頻度)を重み付けして、置き換えられるべきエントリを決定することである。一例として、ある画素値エントリがパレットから除去され、パレットの中の後の位置においてその画素値が再び発生する場合、エンコーダは、エントリをパレットの中に含める代わりに、その画素値を送信し得る。追加または代替として、そのような画素値は、除去された後、たとえば、エンコーダおよびデコーダがCUの中の位置を走査するとき、パレットの中に再び入れられ得ることが可能である。
本開示はまた、初期パレットシグナリングをパレットのオンザフライ導出と組み合わせることを考慮する。一例では、初期パレットは、画素のコーディングとともに更新されることになる。たとえば、初期パレットを送信すると、ビデオエンコーダ20は、値を初期パレットに追加し得、またはCUの中のさらなるロケーションの画素値が走査されるとき、初期パレットの中の値を変更し得る。同様に、初期パレットを受信すると、ビデオデコーダ30は、値を初期パレットに追加し得、またはCUの中のさらなるロケーションの画素値が走査されるとき、初期パレットの中の値を変更し得る。同様に、現在CUが、パレット全体の送信を使用するのか、オンザフライのパレット生成を使用するのか、それとも初期パレットの送信とオンザフライ導出による初期パレットの更新との組合せを使用するのかを、エンコーダはシグナリングすることができる。いくつかの例では、初期パレットは最大パレットサイズの完全なパレットであり得、その場合、初期パレットの中の値は変更されてよく、または初期パレットはサイズが低減されたパレットであり得、その場合、値が初期パレットに追加され、場合によっては、初期パレットの値が変更される。
上で、画素値を識別することによってマップをどのように送信するのかが説明された。上述された方法と一緒に、ラインをコピーすることをシグナリングすることによって、マップの送信が行われ得る。一例では、エントリに対する画素値が上方の(または、走査が垂直である場合、左側の列の中の)ラインのエントリの画素値に等しくなるように、ラインをコピーすることがビデオエンコーダ20によってシグナリングされる。次いで、ラインからコピーされるエントリの「ラン」がシグナリングされ得る。同様に、コピー元のラインが示され得、この目的のために上方のいくつかのラインがバッファリングされ得る。たとえば、前の4行が記憶され、どの行がコピーされるのかが短縮単項コードまたは他のコードを用いてシグナリングされ得、次いで、その行の何個のエントリがコピーされるのか、すなわち、ランがシグナリングされ得る。したがって、いくつかの例では、エントリに対する画素値は、現在の行のすぐ上の行、または現在の行の上方の2つ以上の行の中のエントリの画素値に等しいものとして、シグナリングされ得る。
ランがシグナリングされない場合、ランの値は、定数/固定であってよく、または上述された方法を使用して、副次的情報に依存し得る(デコーダによって導出されてよい)。
マップが送信される必要がないことも可能である。たとえば、ランは、いくつかの位置においてのみ開始し得る。開始位置は、固定であってよく、または副次的情報に依存し得(デコーダによって導出されてよい)、そのため、開始位置のシグナリングはスキップされてよい。代わりに、上述された1つまたは複数の技法が適用されてもよい。暗黙的開始位置導出および暗黙的ラン導出はまた、上述されたものと同じ方法を使用して組み合わされてよい。
マップ送信の両方の方法が使用され、次いで、フラグまたは他のシンタックス要素が、画素がパレットから取得されるのか、それとも前のラインから取得されるのかを示し得、次いで、インデックスが、パレットの中のエントリまたは行を示し、最後に「ラン」を示す。
本開示は、パレットモードコーディングを簡素化するための、および/またはパレットベースコーディング効率を改善するための方法、デバイス、および技法について説明する。本開示の技法は、コーディング効率を改善し、かつ/またはコーデックの複雑さを低減するために、互いとともに、または別々に使用されてよい。概して、本開示の技法によれば、ビデオコーディングデバイスは、1つまたは複数のパレットコーディングモードを使用してビデオデータを符号化し、復号するように構成されてよく、パレットコーディングモードはパレット共有モードを含まない。
1つの例示的なパレットモードでは、palette_share_flagなどのフラグが、ビデオデータ用のパレットまたはビデオデータのより多くのブロックが、ビデオデータの別のブロックのパレットから共有またはマージされることを示すために、ビットストリームの中へシグナリングされ得る。共有されるパレットをそこから取得するべきビデオデータのブロックは、所定の規則に基づいて(たとえば、現在ブロックの左もしくは上のブロックのパレットを使用して)よく、またはそうでなければ、符号化ビデオビットストリーム中で示され得る。R. JoshiおよびJ. Xu、「High efficient video coding (HEVC) screen content coding: Draft 2」、JCTVC-S1005、セクション7.4.9.6に記載されるように、palette_share_flagのセマンティクスは、「1に等しいpalette_share_flag[x0][y0]は、現在コーディングユニット用のパレットが、予測子パレットから第1のPreviousPaletteSizeエントリをコピーすることによって導出されると規定する。変数PreviousPaletteSizeは、サブクローズ8.4.5.2.8において指定されるように導出される。0に等しいpalette_share_flag[x0][y0]は、現在コーディングユニット用のパレットが、前のコーディングユニットからのパレットエントリと、明示的にシグナリングされる新しいパレットエントリの組合せとして指定されると規定する」のように述べられている。
一例では、palette_share_flagの値が1に等しいとき、palette_share_flagは、現在ブロックが、前にコーディングされたブロックからの、最後にコーディングされたパレットを再使用してよいことを示す。この方法は、パレット共有としても知られている。ただし、新しい研究結果は、このフラグが、それが表すパレット共有方法とともに、コーディング効率の改善において効果的でないと同時に、解析および復号をさらに複雑にすることを示している。
さらに、palette_run_type_flagなど、ランタイプを示すシンタックス要素向けのシグナリングプロセスにおいて、いくつかの冗長性が識別される。具体的には、現在ピクセルが、走査順序の列における最初のピクセルであり、現在ピクセルに隣接するとともに現在ピクセルの上のピクセルが利用可能であるとき、現在ピクセルは、「上方コピー」モードにはあり得ない。「上のピクセルが利用可能」という用語は、「外からのコピー」という方法が可能にされていない場合、上方ネイバーが、水平走査のために現在ブロック内にあるか、または左ネイバーが、垂直走査順序のためのブロック内にあることを意味する。「外からのコピー」方法が可能にされているとき、「上のピクセル」は常に、ブロック内の各ピクセルにとって利用可能であり得る。例示的な「外からのコピー」方法は、Y.-C. Sun、J. Kim、T.-D. Chuang、Y.-W. Chen、S. Liu、Y.-W. Huang、およびS. Lei、「Non-CE6: Cross-CU palette colour index prediction」、JCTVC-S0079ならびにJ. Kim、Y.-C. Sun、S. Liu、T.-D. Chuang、Y.-W. Chen、Y.-W. Huang、およびS. Lei、「CE6-related: Enabling copy above mode prediction at the boundary of CU」、JCTVC-S0114に記載されている。
現在ピクセルが「上方コピー」モードに従ってコーディングされている場合、現在ピクセルのインデックスは、現在ピクセルの上方ネイバーのインデックスに等しい。反対に、「上方コピー」モードに、別の「上方コピー」モードが直ちに続くことはできないという規則により、上方ネイバーは、「コピーインデックス」ランの最後でなければならない。したがって、上方ネイバーの「コピーインデックス」ランは、現在ピクセルを、「上方コピー」ランの最初のピクセルにする代わりに、「コピーインデックス」ランの中に現在ピクセルを加えることによって、少なくとも1だけ長くすることができる。したがって、現在ピクセルが、走査順序の列における最初のピクセルである場合、「上方コピー」モードを規範的に不能にすることが可能である。結果として、そのようなピクセルについて、ランタイプは「コピーインデックス」であると推論され、そのようなインデックスをシグナリングする必要がなくなり得るので、ビットが節約される。
さらに、シンタックス要素palette_num_signalled_entries向けの現在のバイナリ化は、短縮単項コードの中である。palette_num_signalled_entriesシンタックス要素は、明示的にシグナリングされる、現在パレット(たとえば、ビデオデータの現在ブロックをコーディングするために使用されるべきパレット)中のエントリの数を示す。明示的にシグナリングされるサンプルの数は、別のビデオデータのブロックのパレットから予測される、パレット中のエントリ(エスケープサンプルの使用を示すどのパレットエントリも含む)の数を差し引いた、パレット中のエントリの数の間の差によって決定され得る。いくつかの例では、palette_num_signalled_entriesシンタックス要素は、num_signalled_palette_entriesシンタックス要素と命名され得る。
いくつかの例では、palette_num_signalled_entriesシンタックス要素の値をコーディングするために使用されるコードワードは、望ましくない程長い場合があり、結果として、32よりも大きい長さのコードワードが生じる。たとえば、HEVC1では、すべてのコードワードが、32以下の長さである。同じ状況が、palette_predictor_runシンタックス要素の値をコーディングするときにも起こり得る。palette_predictor_runシンタックス要素は、アレイpredictor_palette_entry_reuse_flag中で非ゼロのエントリに先行するゼロの数を指定する。predictor_palette_entry_reuse_flagは、1つまたは複数の前に使用されたパレットからの特定のパレットエントリが、現在パレット用に再使用されるか否かを示す。palette_predictor_runの値は、両端値を含む、0から最大パレット予測子サイズにわたり得る。
これらの欠点を鑑みて、本開示の一例では、本開示は、ビデオエンコーダ20およびビデオデコーダ30が、パレット共有技法を用いずに、パレットベースコーディングモードを実行するように構成されることを提案する。より具体的には、ビデオエンコーダ20およびビデオデコーダ30は、以下に示すように、palette_share_flag[x0][y0]シンタックス要素を使用せずに、パレットベースコーディングを実行するように構成されてよい。
パレット共有技法を使用する代わりに、ビデオエンコーダ20およびビデオデコーダ30は、上述したパレット予測技法など、他の技法を使用するもう1つのビデオデータのブロックとともに使用するためのパレットをコーディングするように構成されてよい。他の例では、ビデオエンコーダ20および/ビデオデコーダ30は、以下の技法を使用して、パレット予測を実行するように構成され得る。
図4は、ビデオエンコーダ20のパレットベース符号化ユニット122をより詳細に示すブロック図である。パレットベース符号化ユニット122は、パレットベースビデオコーディングのための本開示の例示的な技法のうちの1つまたは複数を実行するように構成され得る。
上述されたように、パレットベース符号化ユニット122は、ビデオデータのブロック(たとえば、CUまたはPU)を、パレットベース符号化モードを用いて符号化するように構成され得る。パレットベース符号化モードでは、パレットは、インデックスによって番号付けされるとともに画素値を示すために使用され得る色成分値(たとえば、RGB、YUVなど)または強度を表すエントリを含み得る。パレット生成ユニット203は、ビデオデータの現在ブロックに関する画素値212を受信し、ビデオデータの現在ブロックに関するカラー値のパレットを生成するように構成され得る。パレット生成ユニット203は、上述のヒストグラムベースの技法を含む、ビデオデータの現在ブロック用のパレットを生成するための任意の技法を使用してよい。パレット生成ユニット203は、任意のサイズのパレットを生成するように構成され得る。一例では、パレット生成ユニット203は、32個のパレットエントリを生成するように構成され得、その場合、各パレットエントリは、画素のY、Cr、およびCb成分に関する画素値を含む。前の例では、各パレットエントリがサンプル(画素)のすべての色成分に関する値を規定することが仮定される。しかしながら、本明細書で説明される概念は、色成分ごとに別個のパレットを使用することに適用可能である。
パレットがパレット生成ユニット203によって生成されると、マップユニット204は、ビデオデータの現在ブロックに関して、ビデオデータの現在ブロックの中の特定の画素が、パレット生成ユニット203によって生成されたパレットの中のエントリによって表され得るか否かを示すマップを生成し得る。マップユニット204は、各画素がパレットからのエントリをどのように使用するのか(または、使用しないこと)を示すシンタックス要素を含むマップ214を生成し得る。上述したように、いくつかの例では、エスケープピクセルは、別個のシンタックス要素を用いてシグナリングされるのではなく、パレット中の所定の予約済みインデックスを用いて示され得る。ビデオデータの現在ブロックの中の画素に関する値が、パレットの中で見つからない場合、マップユニット204は、パレット中の予約済みインデックスでエスケープピクセルの使用を示し、その特定のピクセルについての画素値を明示的に送信すればよい。いくつかの例では、マップユニット204は、明示的な画素値をパレットの中のエントリのうちの1つから予測し得る。いくつかの他の例では、マップユニット204は、画素を量子化し得、量子化された値を送信し得る。
ブロックの中の画素の各々に対して使用されるカラー値を示すシンタックス要素をシグナリングすることに加えて、パレットベース符号化ユニット122はまた、ビデオデータの現在ブロックに対して使用されるべきパレットをシグナリングするように構成され得る。本開示の技法によれば、パレットベース符号化ユニット122は、ビデオデータの特定のブロック用のパレットの値を示すためにシグナリングされるデータの量を低減するために、パレット予測技法を採用するように構成され得る。
パレット予測の一例として、2014年6月20日現在、http://phenix.int-evry.fr/jct/doc_end_user/documents/17_Valencia/wg11/JCTVC-Q0094-v1.zipから入手可能であるJCTVC-Q0094に記載されるように、パレットは、予測子パレットからコピーされるエントリを含んでよい。予測子パレットは、パレットモードを使用する、前にコーディングされたブロックからの、または他の再構成サンプルからのパレットエントリを含み得る。図4に示すように、パレットベース符号化ユニット122は、予測子パレットバッファ210を含み得る。予測子パレットバッファ210は、前に符号化されたブロックからの、前に使用されたいくつかのパレットエントリを記憶するように構成され得る。一例として、予測子パレットバッファ210は、所定のサイズの先入れ先出し(FIFO)バッファとして構成され得る。予測子パレットバッファ210は、任意のサイズであってよい。一例では、予測子パレットバッファ210は、64個までの、前に使用されたパレットエントリを含む。
いくつかの例では、パレットベース符号化ユニット122は、予測子パレットバッファ210の中のすべてのパレットエントリが一意となるように、予測子パレットバッファ210の中のエントリを取り除くように構成され得る。すなわち、予測子パレットバッファ210に追加されるべき新しいパレットエントリごとに、パレットベース符号化ユニット122は、最初に、予測子パレットバッファ210にすでに記憶されている他の同一のエントリがないことを検査するように構成され得る。同一のエントリがない場合、新しいパレットエントリが予測子パレットバッファ210に追加される。新しいエントリが既存のエントリと全く同じものである場合、新しいパレットエントリが予測子パレットバッファ210に追加され、全く同じエントリは予測子パレットバッファ210から除去される。
予測子パレットバッファ210の中のパレットエントリがビデオデータの現在ブロック用のパレットの中のエントリのうちの1つに関してコピー(または、再使用)されているかどうかを示すために(たとえば、フラグ=1によって示される)、パレットベース符号化ユニット122は、パレット生成ユニット203によって生成されたビデオデータの現在ブロック用のパレットの中のエントリごとにバイナリフラグ(たとえば、predictor_palette_entry_reuse_flag)を生成およびシグナリングするように構成された、バイナリ予測ベクトル生成ユニット206を含み得る。すなわち、バイナリ予測子ベクトルの中の1としての値を有するフラグは、予測子パレットバッファ210の中の対応するエントリが現在ブロック用のパレットに対して再使用されることを示し、バイナリ予測ベクトルの中の0としての値を有するフラグは、予測子パレットバッファ210の中の対応するエントリが現在ブロック用のパレットに対して再使用されないことを示す。さらに、パレットベース符号化ユニット122は、予測子パレットバッファ210の中のエントリからコピーされ得ない現在パレットに関するいくつかの値を明示的にシグナリングするように構成され得る。新しいエントリの数が、同様にシグナリングされ得る。この点において、ビデオエンコーダ20および/またはビデオデコーダ30は、palette_num_signalled_entriesシンタックス要素を使用して、明示的にシグナリングされるパレットエントリの数をシグナリングするように構成されてよい。
パレット予測技法を使用するパレットベースコーディングモードを使用するとき、ビデオエンコーダ20およびビデオデコーダ30は、他のシンタックス要素の中でも、ビデオデータの現在ブロックをコーディングするために使用されるべき現在パレットについて明示的にシグナリングされるパレットエントリの数を示すシンタックス要素(たとえば、palette_num_signalled_entries)をコーディングするように構成され得る。本開示は、そのようなシンタックス要素をコーディングするとき、コーディング効率を改善するか、またはコードワード長を制限するための技法を提案する。
本開示の一例では、パレットベース符号化ユニット122は、CABACコンテキストを使用して、palette_num_signalled_entriesシンタックス要素など、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素の第1のビンを符号化するように構成され得る。パレットベース符号化ユニット122は、他の符号化技法を使用して、palette_num_signalled_entriesの他のビンをコーディングし得る。本開示の別の例では、パレットベース符号化ユニット122は、palette_num_signalled_entriesシンタックス要素の第1のビンをコーディングするために、複数のコンテキストを使用するように構成され得る。一例では、パレットベース符号化ユニット122は、コーディングされる現在ビデオブロックのブロックサイズに基づいて、および/または他のシンタックス要素の値に基づいて、コンテキストを決定するように構成され得る。
本開示の一例によれば、パレットベース符号化ユニット122は、明示的にシグナリングされる、現在パレット中のエントリの数を示す第1のシンタックス要素の第1のビンを決定するように構成され得る。ビデオエンコーダ20は、第1のシンタックス要素を含むビットストリームを符号化するようにさらに構成され得る。ビットストリームはまた、パレット共有モードを示す第2のシンタックス要素を含まなくてよい。いくつかの例では、パレットベース符号化ユニット122は、コンテキスト適応型バイナリ算術コーディングを使用して、第1のシンタックス要素の第1のビンを符号化するように構成され得る。他の例では、パレットベース符号化ユニット122は、1つまたは複数のコンテキストを使用して、第1のシンタックス要素の第1のビンを符号化するように構成され得る。1つまたは複数のコンテキストを使用するいくつかの例では、1つまたは複数のコンテキストは、予測されるパレットコーディングエントリ数またはブロックサイズのうちの少なくとも1つに基づき得る。
本開示の別の例では、palette_num_signalled_entriesのコードワード長が32ビットよりも長くなるのを回避するために、現在のパレットコーディング技法(たとえば、R. JoshiおよびJ. Xu、「High efficient video coding (HEVC) screen content coding: Draft 2」、JCTVC-S1005)に対して、規範的セマンティック変更が行われることが提案される。たとえば、palette_max_sizeなど、最大許容パレットサイズを指定するシンタックス要素、およびpalette_max_predictor_sizeなど、最大予測子パレットサイズを指定するシンタックス要素の実現可能値は、しきい値によって上限を定められ得る。そのようなしきい値は、所定であり、パレットベース符号化ユニット122によってアクセス可能なメモリ(たとえば、図2のビデオデータメモリ98または図3のビデオデータメモリ148)に記憶されてよい。具体的には、palette_max_sizeについて、値は、両端値を含む0〜T1のどの値であってもよく、T1がしきい値である。存在しないとき、パレットベース符号化ユニット122は、palette_max_sizeの値が0であると推論するように構成され得る。さらに、palette_max_predictor_sizeについて、値は、両端値を含む0〜T2のどの値であってもよく、T2がしきい値である。存在しないとき、パレットベース符号化ユニット122は、palette_max_predictor_sizeの値が0であると推論するように構成され得る。
一例では、T1は4096に等しく、T2は8192に等しい。別の例では、T1は4095に等しく、T2は4095に等しい。また別の例では、T1は4095に等しく、T2は8191に等しい。
別の例として、本開示は、palette_max_sizeの値が、最大サイズコーディングユニット中のピクセルの数に等しいと提案する。そのような値は、所定であり、パレットベース符号化ユニット122によってアクセス可能なメモリに記憶され得る。いくつかの例では、palette_max_predictor_sizeの値はK*palette_max_size以下であってよく、Kは正の定数である。いくつかの例では、K=2である。
別の例では、パレットベース符号化ユニット122(たとえば、バイナリベクトル圧縮ユニット209またはエントロピー符号化ユニット118など、ビデオエンコーダ20の別の構造構成要素を使用する)は、ゴロムコードファミリー(たとえば、ゴロムライスコード、指数ゴロムコード、短縮ライスコード、単項コードなど)からのもう1つのコーディング技法を使用して、palette_num_signalled_entriesシンタックス要素の値をコーディングするように構成され得る。本開示の一例では、パレットベース符号化ユニット122は、0次の指数ゴロムコードを使用して、palette_num_signalled_entriesシンタックス要素の値を符号化するように構成される。本開示の別の例では、パレットベース符号化ユニット122は、係数コーディングにおいて、HEVC1におけるcoeff_abs_level_remainingシンタックス要素をコーディングするために使用されるものなど、短縮ライス(TR)コードと指数ゴロムコードの連結を使用して、palette_num_signalled_entriesシンタックス要素の値を符号化するように構成される。
TRコードと、0というゴロムライスパラメータ用の指数ゴロムコードの連結の例を、以下に示す。
ここで、xは、0または1の値をとり得る。同様に、以下のテーブルは、paletteRunシンタックス要素のコーディングにおいて使用される連結バイナリ化の例を示す。これは、7という最大ラン値についての0次の、短縮ライスと短縮指数ゴロムコードの連結である。
ここで、xは、0または1の値をとり得る。
palette_num_signalled_entriesシンタックス要素をコーディングするために、1つまたは複数のゴロムコード(たとえば、指数ゴロムコードまたはTRコードと指数ゴロムコードの連結)を使用すると、palette_num_signalled_entriesシンタックス要素の値をコーディングするための従来の技法と比較して、利益がもたらされる。palette_num_signalled_entriesシンタックス要素の値をコーディングするための従来の技法は、単項コードを使用していた。単項コードの使用の結果、palette_num_signalled_entriesシンタックス要素のコード化長は、いくつかの状況では32ビットよりも大きくなった。palette_num_signalled_entriesシンタックス要素をコーディングするために、1つまたは複数のゴロムコードを使用することによって、本開示の技法は、パレットベース符号化ユニット122が、コード化長をある程度の所定のビット数(たとえば、32ビット)以下に保つように、palette_num_signalled_entriesシンタックス要素の値を符号化することができるようにさせる。
別の例では、パレットベース符号化ユニット122は、ゴロムコードファミリーの短縮バージョン(たとえば、短縮ゴロムライスコード、短縮指数ゴロムコード、短縮された短縮ライスコード、短縮単項コードなど)を使用して、palette_num_signalled_entriesシンタックス要素の値をコーディングするように構成され得る。本開示の別の例では、パレットベース符号化ユニット122は、paletteRunシンタックス要素をコーディングするために使用される同じコードを使用して、palette_num_signalled_entriesシンタックス要素の値をコーディングするように構成され得る。別の例では、パレットベース符号化ユニット122は、係数コーディングにおいてcoeff_abs_level_remainingシンタックス要素をコーディングするために使用される方法(たとえば、短縮ライス(TR)と指数ゴロムコードの連結)を使用して、palette_num_signalled_entriesシンタックス要素の値をコーディングするように構成され得る。この例によれば、TRパラメータは、0であることが好ましい。これらの例の各々において、特定の短縮コードは、palette_num_signalled_entriesシンタックス要素の符号化長が32ビット以下に保たれるように選ばれる。
別の例では、palette_num_signalled_entriesがブロック中のピクセルの数に等しいという制約を、ビットストリームに課すことが提案される。つまり、パレットベース符号化ユニット122は、palette_num_signalled_entriesシンタックス要素の可能値を、現在コーディングされているブロック中のピクセルの数によって制限するように構成され得る。別の例では、パレットベース符号化ユニット122は、palette_num_signalled_entriesの可能値を、特定のピクチャの最大可能ブロック中のピクセルの数(たとえば、特定のビデオコーディング規格によって定義される大きいブロックサイズ)によって制限するように構成され得る。
別の例では、パレットベース符号化ユニット122は、現在ピクセルが、走査順序の列において最初のピクセルであり、現在ピクセルの上の、現在ピクセルに隣接するピクセルが利用可能である場合、palette_run_type_flagなど、ランタイプを示すシンタックス要素をシグナリングするのをバイパスするように構成され得る。一例では、パレットベース符号化ユニット122は、現在ピクセルが、走査順序の列にある最初のピクセルであると決定するように構成され得る。パレットベース符号化ユニット122は、現在ピクセルの上に位置する隣接ピクセルが利用可能であるとさらに決定することができる。現在ピクセルが、走査順序の列にある最初のピクセルであると決定し、現在ピクセルの上に位置する隣接ピクセルが利用可能であると決定したことに応答して、パレットベース符号化ユニット122は、第1のシンタックス要素をビットストリーム中で符号化するのをバイパスし、ここで第1のシンタックス要素はランタイプを示し、ビットストリームの残りを符号化するようにさらに構成され得る。
図4および本開示のパレット予測技法に戻ると、米国特許公開第2015/0281728号として公開された、2015年3月24日に出願された米国出願第14/667,411号において、2分木ベースシグナリング方法および端部位置ベースシグナリング方法が、パレットバイナリ予測子ベクトルのコーディングのために提案された。2014年5月23日に出願された米国仮出願第62/002,741号では、グループベースのシグナリング方法が提案された。本開示は、バイナリ予測ベクトルを生成、符号化、および復号するための追加の技法を提案する。
本明細書で説明するいくつかの例は、コーディング効率を改善するようにパレット予測ベクトルをコーディングするための方法に関する。たとえば、バイナリ予測ベクトル生成ユニット206によって生成されるバイナリ予測ベクトルが、
b=[b0、b1、...、bN-1]、N≧0、bi∈{0,1}、0≦i<N
によって示されると仮定する。
上の式において、bi∈{0,1}、0≦i<Nは、予測フラグ(バイナリフラグまたはバイナリ予測フラグとも呼ばれる)を示す。N=0の場合、b=φであり(すなわち、bは空のベクトルである)、それはシグナリングされる必要がない。したがって、以下の説明では、N>0であると仮定してよい。
図5は、予測子パレットバッファ210および現在パレット220の一例を示す。図5に見られ得るように、現在パレット220は、予測子パレットバッファ210からの、エントリインデックス1、2、5、および9に関連付けられた画素値を再使用する。したがって、図4のバイナリ予測ベクトル生成ユニット206によって生成されるバイナリ予測子ベクトルは、b=[110010001000]であることになる。この例に見られ得るように、バイナリ予測ベクトルbは、予測子パレットバッファ210の中の第1、第2、第5、および第9のインデックスに対応する1としての値を有するフラグを含む。すなわち、予測子パレットバッファ210の中の第1、第2、第5、および第9のエントリだけが、現在パレット220に対して再使用されるエントリである。現在パレット220の中のエントリインデックス5〜8に対して、パレットベース符号化ユニット122は、パレットエントリ値を符号化ビデオビットストリームの中でシグナリングするように構成され得る(たとえば、明示的なシグナリングまたは別の予測技法を使用して)。
本開示の1つまたは複数の技法によれば、ビデオエンコーダ20は、パレットを符号化ビデオビットストリームの中でシグナリングするのに必要とされるデータの量を低減するために、バイナリ予測子ベクトルbを符号化または概して符号化するように構成され得る。図4に示すように、バイナリ予測ベクトル圧縮ユニット209は、符号化バイナリ予測ベクトル215を生成およびシグナリングするように構成され得る。しかしながら、本開示のバイナリ予測ベクトル圧縮技法が、図2のエントロピー符号化ユニット118を含むビデオエンコーダ20の他の構造で実施され得ることを理解されたい。
本開示の一例では、バイナリ予測ベクトル圧縮ユニット209は、ランレングスベースの符号化技法を使用してバイナリ予測ベクトルを符号化するように構成され得る。たとえば、バイナリ予測ベクトル圧縮ユニット209は、バイナリ予測ベクトルの中の「1」の間の連続した「0」の数を指数ゴロムコードを使用してシグナリングすることによって、バイナリ予測ベクトルを符号化するように構成され得る。一例として、再びb=[110010001000]であると仮定する。この例では、図6に示すように、バイナリ予測ベクトル(すなわち、b)は、「0個の連続した0」-「1」-「0個の連続した0」-「1」-「2個の連続した0」-「1」-「3個の連続した0」-「1」-および「4個の連続した0」として表現され得る。bi∈{0,1}であることが知られているので、最後の「連続した0」グループを除いて、各「連続した0」グループに「1」が後続しなければならない。したがって、バイナリ予測ベクトル圧縮ユニット209は、ランレングスシーケンス「0-0-2-3-4」として表現され得る「0個の連続した0」-「0個の連続した0」-「2個の連続した0」-「3個の連続した0」-「4個の連続した0」としてバイナリ予測ベクトルbを表すために、0ベースのランレングスコーディング技法を使用し得る。
ランレングスベースのシグナリングに関する本開示の1つまたは複数の例によれば、ランレングスシーケンスをコーディングするために、ゴロムライスコード、任意の次数の指数ゴロムコード、短縮指数ゴロムコード、短縮ライスコード、または短縮された二値化を含む他の二値化が使用され得る。一例では、バイナリ予測ベクトル圧縮ユニット209は、ランレングスコーディング技法として0次の指数ゴロムコードを使用する。
短縮された二値化の場合、バイナリベクトルの末尾に移動させると、可能な最大ラン値はベクトル内の位置に応じてベクトルサイズから0に低減されるので、バイナリベクトルの中での「1」の位置およびバイナリベクトルサイズに応じて、最大シンボルはランの可能な最大値であり得る。たとえば、最大シンボルは、バイナリベクトル長、またはランがそこから計数される「1」の位置をバイナリベクトル長から引いたものであり得る。言い換えれば、それはバイナリベクトルの末尾から測定される残りの長さである。特定のサイズとしてのバイナリベクトルbを伴う上述の例の場合、たとえば、13、ランレングスシーケンス「0-0-2-3-4」は、短縮された二値化「0[13]-0[12]-2[11]-3[8]-4[4]」を用いてコーディングされ得、その場合、最大シンボルは大括弧の中に示される。
同様に、いくつかの例では、二値化は、要素(0または1)のバイナリベクトルの中での位置またはインデックスに依存し得る。特定の例として、位置が何らかのしきい値よりも小さい場合、あるタイプの二値化が使用され、そうでない場合、別のタイプの2値化が適用される。いくつかの例では、二値化タイプは、異なる2値化コードであってよく、または指数ゴロムコードのような同じコードファミリーであるが異なる次数を有してもよい。
一例では、しきい値は、前のブロックまたは前のパレットコード化ブロックからのパレット長であってよい。別の例では、しきい値は、何らかのデフォルト値に固定されてよく、またはブロック、スライス、ピクチャ、または他の場所ごとにシグナリングされてもよい。ラン値をコーディングするためのCABACコンテキストを規定するために、対応する技法が随意に使用され得ることを認識されたい。さらに、パレットベース符号化ユニット122(図2参照)は、シグナリングされる「1」要素の数(すなわち、現在パレット220に対して再使用されるものとして示される予測子パレットバッファ210からのパレットエントリの数)が、可能な最大数に到達したとき、ランレングスシグナリングを停止するように構成され得る。いくつかの例では、可能な最大数は、可能な最大パレットサイズである。
本開示のいくつかの例は、バイナリ予測ベクトルbを示すランレングスシーケンスの末尾位置コーディングに関する。本開示の1つまたは複数の例では、バイナリ予測ベクトル圧縮ユニット209は、バイナリ予測ベクトルの末尾位置をコーディングするために、予約済みランレングスLを使用してバイナリ予測ベクトルbを符号化するように構成され得る。一例では、予約済みランレングスとしてL=1が使用される。ビデオエンコーダ20において、ランレングスがL以上である場合、バイナリ予測ベクトル圧縮ユニット209は、ランレングスに1を加算するように構成される。実際のランレングスがLよりも短い場合、バイナリ予測ベクトル圧縮ユニット209は、そのままのランレングスをシグナリングするように構成される。バイナリ予測ベクトル圧縮ユニット209は、予約済みランレングスLを有する末尾位置ランレングスをシグナリングし得る。
同様に、ビデオデコーダ30において、ランレングスとしての復号された値がLよりも大きい場合、実際のランレングスから1が減算される。復号された値またはランレングスがLよりも小さい場合、復号された値が実際のランレングスとして使用される。復号された値がLに等しい場合、バイナリ予測ベクトルbの中の残りの位置はすべて0である。したがって、復号された値がLに等しい場合、これ以上のランシグナリングは必要でない。
上記と同じ例(すなわち、b=[110010001000])を使用し、L=1と仮定すると、バイナリ予測ベクトル圧縮ユニット209は、図6のランレングスシーケンス「0-0-2-3-4」を「0-0-3-4-1」としてシグナリングするように構成される。次いで、上の規則を適用すると、ビデオデコーダ30は、ランレングスシーケンスを「0-0-2-3-末尾」として復元するように構成され得る。すなわち、0ランレングスシーケンスの両方がL=1としての予約済みランレングス値よりも小さいので、0としての最初のランレングス値は0として復号され、0としての次のランレングスシーケンスは0として復号される。次のランレングスシーケンスは3であり、したがって、受信された3としての値がL=1としての予約済みランレングス値よりも大きいので、ビデオデコーダ30は、3としての値から1を減算して2を取得するように構成されることになる。同様に、受信された4としての値がL=1としての予約済みランレングス値よりも大きいので、ビデオデコーダ30は、次のランレングスシーケンスに関して、受信された4としての値から1を減算して3を取得するように構成されることになる。最終的に、最後に受信されたランレングス値1は、L=1としての予約済みランレングス値に等しい。したがって、ビデオデコーダ30はこれ以上「1」としての値がバイナリ予測ベクトルの中に存在しないことを決定し得る。
図7は、ビデオデコーダ30のパレットベース復号ユニット165の一例を示すブロック図である。パレットベース復号ユニット165は、図4のパレットベース符号化ユニット122と相反の方式を実行するように構成され得る。パレットベース復号ユニット165は、現在ブロックの中の画素ごとに、パレットに関するエントリが現在ブロックの中の画素のために使用されるか否かを示すマップ312を受信するように構成され得る。加えて、マップ312は、どのパレットエントリが所与の画素に対して使用されるべきであるのかをさらに示し得る。マップユニット302は、マップ312およびパレット生成ユニット304によって生成されたパレットを使用してビデオデータの現在ブロックを復号して、復号ビデオデータ314を生成し得る。
本開示の技法によれば、パレットベース復号ユニット165はまた、符号化バイナリ予測ベクトル316を受信し得る。上記で説明したように、バイナリ予測ベクトル316は、バイナリ予測ベクトルの中の0値のランを示すランレングスシーケンスを符号化する、ランレングスコーディング技法を使用して符号化され得る。バイナリ予測ベクトル解凍ユニット306は、図4〜図6を参照しながら上記で説明したランレングスコーディング技法の任意の組合せを使用して、符号化バイナリ予測ベクトル316を復号するように構成され得る。バイナリ予測ベクトルがバイナリ予測ベクトル解凍ユニット306によって復元されると、パレット生成ユニット304は、バイナリ予測ベクトルおよび予測子パレットバッファ310に記憶されている、前に使用されたパレットエントリに基づいて、ビデオデータの現在ブロック用のパレットを生成し得る。パレットベース復号ユニット165は、パレットベース符号化ユニット122(図2参照)が、前に使用されたパレットエントリを予測子パレットバッファ210に記憶したのと同じ方式で、前に使用されたパレットエントリを予測子パレットバッファ310に記憶するように構成され得る。
本開示の一例では、パレットベース復号ユニット165は、CABACコンテキストを使用して、palette_num_signalled_entriesシンタックス要素など、明示的にシグナリングされる、現在パレット中のエントリの数を示すシンタックス要素の第1のビンを復号するように構成され得る。パレットベース復号ユニット165は、他の復号技法を使用して、palette_num_signalled_entriesの他のビンを復号し得る。本開示の別の例では、パレットベース復号ユニット165は、palette_num_signalled_entriesシンタックス要素の第1のビンを復号するために、複数のコンテキストを使用するように構成され得る。一例では、パレットベース復号ユニット165は、復号される現在ビデオブロックのブロックサイズに基づいて、および/または他のシンタックス要素の値に基づいて、コンテキストを決定するように構成され得る。
本開示の一例によれば、パレットベース復号ユニット165は、明示的にシグナリングされる、現在パレット中のエントリの数を示す第1のシンタックス要素の第1のビンを決定するように構成され得る。ビデオデコーダ30は、第1のシンタックス要素を含むビットストリーム復号するようにさらに構成され得る。ビットストリームはまた、パレット共有モードを示す第2のシンタックス要素を含まなくてよい。いくつかの例では、パレットベース復号ユニット165は、コンテキスト適応型バイナリ算術コーディングを使用して、第1のシンタックス要素の第1のビンを復号するように構成され得る。他の例では、パレットベース復号ユニット165は、1つまたは複数のコンテキストを使用して、第1のシンタックス要素の第1のビンを復号するように構成され得る。1つまたは複数のコンテキストを使用するいくつかの例では、1つまたは複数のコンテキストは、予測されるパレットコーディングエントリ数またはブロックサイズのうちの少なくとも1つに基づき得る。
本開示の別の例では、palette_num_signalled_entriesのコードワード長が32ビットよりも長くなるのを回避するために、現在のパレットコーディング技法に対して、規範的セマンティック変更が行われることが提案される。たとえば、palette_max_sizeなど、最大許容パレットサイズを指定するシンタックス要素、およびpalette_max_predictor_sizeなど、最大予測子パレットサイズを指定するシンタックス要素の実現可能値は、しきい値によって上限を定められ得る。そのようなしきい値は、所定であり、パレットベース復号ユニット165によってアクセス可能なメモリ(たとえば、図3のビデオデータメモリ148)に記憶されてよい。具体的には、palette_max_sizeについて、値は、両端値を含む0〜T1のどの値であってもよく、T1がしきい値である。存在しないとき、パレットベース復号ユニット165は、palette_max_sizeの値が0であると推論するように構成され得る。さらに、palette_max_predictor_sizeについて、値は、両端値を含む0〜T2のどの値であってもよく、T2がしきい値である。存在しないとき、パレットベース復号ユニット165は、palette_max_predictor_sizeの値が0であると推論するように構成され得る。
一例では、T1は4096に等しく、T2は8192に等しい。別の例では、T1は4095に等しく、T2は4095に等しい。また別の例では、T1は4095に等しく、T2は8191に等しい。
別の例として、本開示は、palette_max_sizeの値が、最大サイズコーディングユニット中のピクセルの数に等しいと提案する。そのような値は、所定であり、パレットベース復号ユニット165によってアクセス可能なメモリに記憶され得る。いくつかの例では、palette_max_predictor_sizeの値はK*palette_max_size以下であってよく、Kは正の定数である。いくつかの例では、K=2である。
別の例では、図3のパレットベース復号ユニット165(たとえば、バイナリ予測ベクトル解凍ユニット306または図3のエントロピー復号ユニット150など、ビデオデコーダ30の別の構造構成要素を使用する)は、ゴロムコードファミリー(たとえば、ゴロムライスコード、指数ゴロムコード、短縮ライスコード、単項コードなど)からのもう1つの復号技法を使用して、palette_num_signalled_entriesシンタックス要素の値を復号するように構成され得る。本開示の一例では、パレットベース復号ユニット165は、短縮ライスと指数ゴロムコードの連結を使用して、palette_num_signalled_entriesシンタックス要素の値を復号するように構成される。
別の例では、パレットベース復号ユニット165は、ゴロムコードファミリーの短縮バージョン(たとえば、短縮ゴロムライスコード、短縮指数ゴロムコード、短縮された短縮ライスコード、短縮単項コードなど)を使用して、palette_num_signalled_entriesシンタックス要素の値を復号するように構成され得る。本開示の別の例では、パレットベース復号ユニット165は、paletteRunシンタックス要素をコーディングするために使用される同じコードを使用して、palette_num_signalled_entriesシンタックス要素の値を復号するように構成され得る。別の例では、パレットベース復号ユニット165は、係数復号においてcoeff_abs_level_remainingシンタックス要素を復号する方法(たとえば、短縮ライス(TR)と指数ゴロムコードの連結)を使用して、palette_num_signalled_entriesシンタックス要素の値を復号するように構成され得る。この例によれば、TRパラメータは、0であることが好ましい。
別の例では、palette_num_signalled_entriesがブロック中のピクセルの数に等しいという制約を、ビットストリームに課すことが提案される。つまり、パレットベース復号ユニット165は、palette_num_signalled_entriesシンタックス要素の可能値を、現在コーディングされているブロック中のピクセルの数によって制限するように構成され得る。別の例では、パレットベース復号ユニット165は、palette_num_signalled_entriesの可能値を、特定のピクチャの最大可能ブロック中のピクセルの数(たとえば、特定のビデオコーディング規格によって定義される大きいブロックサイズ)によって制限するように構成され得る。
別の例では、パレットベース復号ユニット165は、現在ピクセルが、走査順序の列において最初のピクセルであり、現在ピクセルの上の、現在ピクセルに隣接するピクセルが利用可能である場合、palette_run_type_flagなど、ランタイプを示すシンタックス要素の値を推論するように構成され得る。一例では、パレットベース復号ユニット165は、現在ピクセルが、走査順序の列にある最初のピクセルであると決定するように構成され得る。パレットベース復号ユニット165は、現在ピクセルの上に位置する隣接ピクセルが利用可能であるとさらに決定することができる。現在ピクセルが、走査順序の列にある最初のピクセルであると決定し、現在ピクセルの上に位置する隣接ピクセルが利用可能であると決定したことに応答して、パレットベース復号ユニット165は、第1のシンタックス要素の値をビットストリーム中で推論することであって、第1のシンタックス要素がランタイプを示す、ことと、ビットストリームの残りを符号化することとを行うようにさらに構成され得る。
図8は、本開示の技法による例示的なビデオ符号化方法を示すフローチャートである。図8の技法は、パレットベース符号化ユニット122および/またはエントロピー符号化ユニット118(図2参照)を含む、ビデオエンコーダ20の1つまたは複数のハードウェア構造によって実装され得る。
本開示の一例では、ビデオエンコーダ20は、パレットベースコーディングモードおよびパレットを使用して、ビデオデータのブロックを符号化すること(800)と、ビデオデータのブロックを符号化するために使用されたパレットを示す複数のシンタックス要素を生成することであって、複数のシンタックス要素が、符号化ビデオビットストリーム中で明示的にシグナリングされる、パレット用のパレット値の数を示す第1のシンタックス要素を含む、こと(802)とを行うように構成され得る。ビデオエンコーダ20は、符号化された第1のシンタックス要素の長さが所定のビット数以下となるように、1つまたは複数のゴロムコードを使用して、第1のシンタックス要素を符号化し(804)、複数のシンタックス要素を符号化ビデオビットストリーム中に含める(806)ようにさらに構成され得る。
本開示の一例では、第1のシンタックス要素は、palette_num_signalled_entriesシンタックス要素である。本開示の別の例では、複数のシンタックス要素は、第1のシンタックス要素によって明示的にシグナリングされるものとして示されるパレット値を含む。
本開示の一例では、所定の最大ビット数は32であり、1つまたは複数のゴロムコードは、0次の指数ゴロムコードである。本開示の別の例では、所定の最大ビット数は32であり、1つまたは複数のゴロムコードは、短縮ライスコードと指数ゴロムコードの連結である。
本開示の別の例では、第1のシンタックス要素の最大値は、パレットの最大サイズを示す第2のシンタックス要素、およびパレット予測子の最大サイズを示す第3のシンタックス要素に相対して定義される。この例では、ビデオエンコーダ20は、第2のシンタックス要素を、0から第1のしきい値までの値となるように定義し、第3のシンタックス要素を、0から第2のしきい値までの値となるように定義するようにさらに構成され得る。一例では、第1のしきい値は4095または4096のうちの1つであり、第2のしきい値は4095、8191、または8192のうちの1つである。
本開示の別の例では、第1のシンタックス要素の最大値は、パレットの最大サイズを示す第2のシンタックス要素、およびパレット予測子の最大サイズを示す第3のシンタックス要素に相対して定義される。この例では、ビデオエンコーダ20は、第2のシンタックス要素を、符号化ビデオビットストリーム中の最大可能ブロック中のピクセルの数以下になるように定義し、第3のシンタックス要素を、第2のシンタックス要素のK*a値以下になるように定義するようにさらに構成されてよく、Kは正の定数である。一例では、Kは2である。
本開示の別の例では、ビデオエンコーダ20は、現在ピクセルが走査順序において最初のピクセルでない場合、パレットランタイプを示すシンタックス要素をシグナリングし、現在ピクセルが走査順序において最初のピクセルであり、前のピクセル/サンプルが利用可能である場合、パレットランタイプを示すシンタックス要素をシグナリングしないようにさらに構成され得る。
図9は、本開示の技法による例示的なビデオ復号方法を示すフローチャートである。図9の技法は、パレットベース復号ユニット165および/またはエントロピー復号ユニット150(図3参照)を含む、ビデオデコーダ30の1つまたは複数のハードウェア構造によって実装され得る。
本開示の一例では、ビデオデコーダ30は、符号化ビデオビットストリーム中でビデオデータのブロックを受信することであって、ビデオデータのブロックが、パレットベースコーディングモードを使用して符号化されている、こと(900)と、ビデオデータのブロックを符号化するために使用されたパレットを示す複数のシンタックス要素を受信することであって、複数のシンタックス要素が、符号化ビデオビットストリーム中で明示的にシグナリングされ、パレット用のパレット値の数を示す第1のシンタックス要素を含み、第1のシンタックス要素が、符号化された第1のシンタックス要素の長さが所定の最大ビット数以下となるように、1つまたは複数のゴロムコードを使用して符号化される、こと(902)とを行うように構成され得る。ビデオデコーダ30は、複数のシンタックス要素を復号することであって、1つまたは複数のゴロムコードを使用して第1のシンタックス要素を復号することを含む、こと(904)と、復号された複数のシンタックス要素に基づいてパレットを再構成すること(906)と、再構成されたパレットを使用してビデオデータのブロックを復号すること(908)とを行うようにさらに構成され得る。ビデオデコーダ30は、復号されたビデオデータのブロックを表示するようにさらに構成され得る。
本開示の一例では、第1のシンタックス要素は、palette_num_signalled_entriesシンタックス要素である。本開示の別の例では、複数のシンタックス要素は、第1のシンタックス要素によって明示的にシグナリングされるものとして示されるパレット値を含む。
本開示の一例では、所定の最大ビット数は32であり、1つまたは複数のゴロムコードは、0次の指数ゴロムコードである。本開示の別の例では、所定の最大ビット数は32であり、1つまたは複数のゴロムコードは、短縮ライスコードと指数ゴロムコードの連結である。
本開示の別の例では、第1のシンタックス要素の最大値は、パレットの最大サイズを示す第2のシンタックス要素、およびパレット予測子の最大サイズを示す第3のシンタックス要素に相対して定義される。この例では、ビデオデコーダ30は、第2のシンタックス要素を、0から第1のしきい値までの値となるように定義し、第3のシンタックス要素を、0から第2のしきい値までの値となるように定義するようにさらに構成され得る。一例では、第1のしきい値は4095または4096のうちの1つであり、第2のしきい値は4095、8191、または8192のうちの1つである。
本開示の別の例では、第1のシンタックス要素の最大値は、パレットの最大サイズを示す第2のシンタックス要素、およびパレット予測子の最大サイズを示す第3のシンタックス要素に相対して定義される。この例では、ビデオデコーダ30は、第2のシンタックス要素を、符号化ビデオビットストリーム中の最大可能ブロック中のピクセルの数以下になるように定義し、第3のシンタックス要素を、第2のシンタックス要素のK*a値以下になるように定義するようにさらに構成されてよく、Kは正の定数である。一例では、Kは2である。
本開示の別の例では、ビデオデコーダ30は、現在ピクセルが走査順序において最初のピクセルでない場合、パレットランタイプを示すシンタックス要素を受信し、現在ピクセルが走査順序において最初のピクセルである場合、パレットランタイプを示すシンタックス要素を推論するようにさらに構成され得る。
技法の様々な態様の組合せが上で説明されたが、これらの組合せは単に本開示において説明される技法の例を示すために与えられている。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示において説明される技法の様々な態様の考えられる組合せを包含し得る。
1つまたは複数の例では、説明される機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装された場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体に記憶またはコンピュータ可読媒体を介して送信されてもよく、ハードウェアベースの処理ユニットによって実行されてもよい。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含んでよい。このようにして、コンピュータ可読媒体は、概して、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法を実施するための命令、コード、および/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品がコンピュータ可読媒体を含んでもよい。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または命令もしくはデータ構造の形式の所望のプログラムコードを記憶するために使用され得るとともに、コンピュータによってアクセスされ得る任意の他の媒体を含んでもよい。また、任意の接続が、適切にコンピュータ可読媒体と呼ばれる。たとえば、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。ディスク(disk)およびディスク(disc)は、本明細書で使用される場合、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびブルーレイディスクを含み、ディスク(disk)は通常、磁気的にデータを再生し、ディスク(disc)は、レーザを用いて光学的にデータを再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行されてよい。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/またはソフトウェアモジュール内で提供されてよく、あるいは組み合わされたコーデックに組み込まれてもよい。また、技法は、1つまたは複数の回路または論理要素において完全に実装されてもよい。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。様々なコンポーネント、モジュール、またはユニットが、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために本開示で説明されるが、必ずしも異なるハードウェアユニットによる実現を必要としない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされてよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上記で説明したような1つもしくは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されてよい。
本開示の様々な例が説明された。説明したシステム、動作、または機能の任意の組合せが考えられる。これらおよび他の例は、以下の特許請求の範囲内に入る。