[0022]ビットストリームが通信ネットワーク内で伝送されるとき、ビットストリームは、リアルタイムプロトコル(RTP)などの通信プロトコルに準拠する一連のパケットに分割することができる。単一のパケットが含むことができるデータ量には、最大伝送単位(MTU)サイズなどの制限が存在する。通常、パケットの各々は、単一のネットワークアブストラクションレイヤ(NAL)ユニットを含む。しかしながら、NALユニットがMTUサイズよりも大きい場合、NALユニットは2つ以上のパケットの中に分割され、搬送される。一般に、パケットの伝送中にパケットのうちの1つだけでも損失または破壊された場合NALユニット全体が無駄になる可能性があるので、NALユニットを2つ以上のパケットの中に分割することは望ましくない。
[0023]ビデオエンコーダは、ピクチャパラメータセット(PPS)およびシーケンスパラメータセット(SPS)などのパラメータセットを含むNALユニットを生成することができる。パラメータセットに量子化行列が含まれると、パラメータセットを含むNALユニットは、エンドツーエンド伝送経路のMTUサイズよりも大きくなる場合がある。それに応じて、パケッタイザ(packetizer)はNALユニットを2つ以上のパケットの中に分割する場合がある。パケットのうちのいずれか1つが損失すると、NALユニット全体が無駄になる可能性があるので、NALユニットを複数のパケットの中に分割することは望ましくない場合がある。このため、ビデオデコーダ30は、NALユニットの損失した部分のデータがなければ、NALユニットの受信された部分のデータを解釈することができない場合がある。
[0024]本開示の技法によれば、ビデオエンコーダは、パラメータセットの様々な断片(fragment)を含む複数のNALユニットを生成することができる。たとえば、ビデオエンコーダは、第1のNALユニットと第2のNALユニットとを生成することができる。第1のNALユニットはパラメータセットの第1の断片を含むことができ、第2のNALユニットはパラメータセットの第2の断片を含むことができる。他のNALユニットはパラメータセットの他の断片を含むことができる。パラメータセットの様々な断片を含む各NALユニットは、通信チャネル上の別個のパケットで伝送することができる。パラメータセットの断片を含む各NALユニットをカプセル化するパケットのサイズは、MTUサイズ以下であり得る。様々なNALユニット内のパラメータセットの断片を送ると、パラメータセットの任意の受信された断片は、パラメータセットの他の断片が受信されたかどうかにかかわらず、まだ有用であり得るという意味で、誤り耐性が増大し得る。
[0025]添付の図面は例を示す。添付の図面内で参照番号によって示される要素は、以下の説明において同様な参照番号によって示される要素に対応する。本開示では、順序を示す言葉(たとえば、「第1の」、「第2の」、「第3の」など)で始まる名称を有する要素は、それらの要素が特定の順序を有することを必ずしも示唆しない。そうではなく、そのような順序を示す言葉は、同じまたは同様のタイプの様々な要素を指すために使用されるにすぎない。
[0026]図1は、本開示の技法を実装することができる例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用され記載される「ビデオコーダ」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指す場合がある。
[0027]図1に示されたように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれる場合がある。宛先デバイス14は、ソースデバイス12によって生成された、符号化されたビデオデータを復号することができる。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれる場合がある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0028]ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備えることができる。
[0029]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化されたビデオデータを受信することができる。チャネル16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な、あるタイプの媒体またはデバイスを備えることができる。一例では、チャネル16は、ソースデバイス12が符号化されたビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする、1つまたは複数の通信媒体を備えることができる。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って、符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。通信媒体は、無線周波数(RF)スペクトルおよび/または1つもしくは複数の物理伝送線路などの、1つまたは複数のワイヤレス通信媒体または有線通信媒体を備えることができる。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、または、インターネットなどのグローバルネットワークなどのパケットベースネットワークの一部を形成することができる。通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にするルータ、スイッチ、基地局、または他の機器を含むことができる。
[0030]別の例では、チャネル16は、ソースデバイス12によって生成された、符号化されたビデオデータを記憶する記憶媒体に対応することができる。この例では、宛先デバイス14は、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスすることができる。記憶媒体は、ブルーレイ(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの様々なローカルにアクセスされるデータ記憶媒体を含むことができる。
[0031]さらなる例では、チャネル16は、ソースデバイス12によって生成された、符号化されたビデオを記憶するファイルサーバまたは別の中間ストレージデバイスを含むことができる。この例では、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは別の中間ストレージデバイスに記憶された、符号化されたビデオデータにアクセスすることができる。ファイルサーバは、符号化されたビデオデータを記憶すること、および符号化されたビデオデータを宛先デバイス14に送信することが可能な、あるタイプのサーバであり得る。例示的なファイルサーバには、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブが含まれる。
[0032]宛先デバイス14は、インターネット接続などの標準的なデータ接続を介して、符号化されたビデオデータにアクセスすることができる。例示的なタイプのデータ接続には、ファイルサーバに記憶された、符号化されたビデオデータにアクセスするのに適切な、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、またはその両方の組合せが含まれ得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
[0033]本開示の技法は、ワイヤレスの用途または設定には限定されない。本技法は、オーバージエア(over-the-air)テレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の用途などの様々なマルチメディアの用途のいずれかをサポートするビデオコーディングに適用することができる。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成することができる。
[0034]本開示の技法は、符号化デバイスと復号デバイスとの間の任意のデータ通信を必ずしも含むとは限らないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用することができる。他の例では、データは、ローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどを行うことができる。符号化デバイスは、データを符号化しメモリに記憶することができ、かつ/または、復号デバイスは、メモリからデータを取り出し復号することができる。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、かつ/またはメモリからデータを取り出して復号するだけのデバイスによって実行される。
[0035]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。場合によっては、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含むことができる。ビデオソース18は、ビデオキャプチャデバイス、たとえばビデオカメラ、以前にキャプチャされたビデオデータを含むビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/もしくは、ビデオデータを生成するためのコンピュータグラフィックスシステムなどのソース、またはそのようなソースの組合せを含むことができる。
[0036]ビデオエンコーダ20は、キャプチャされた、プリキャプチャされた、またはコンピュータ生成されたビデオデータを符号化することができる。符号化されたビデオデータは、ソースデバイス12の出力インターフェース22を介して宛先デバイス14に直接送信することができる。符号化されたビデオデータは、復号および/または再生のために、宛先デバイス14によって後でアクセスするために、記憶媒体またはファイルサーバ上に記憶することもできる。
[0037]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含むことができる。宛先デバイス14の入力インターフェース28は、チャネル16を介して符号化されたビデオデータを受信することができる。
[0038]ディスプレイデバイス32は、宛先デバイス14と一体であり得るか、またはその外部にあり得る。いくつかの例では、宛先デバイス14は、一体型ディスプレイデバイスを含むことができ、外部ディスプレイデバイスとインターフェースするように構成することもできる。他の例では、宛先デバイス14はディスプレイデバイスであり得る。一般に、ディスプレイデバイス32は、復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備えることができる。
[0039]ビデオエンコーダ20およびビデオデコーダ30は、現在開発中の高効率ビデオコーディング(HEVC)規格などのビデオ圧縮規格に従って動作することができ、HEVCテストモデル(HM)に準拠することができる。「HEVC Working Draft 4」または「WD4」と呼ばれる来たるべきHEVC規格の最近のドラフトは、Brossら、「WD4:Working Draft 4 of High Efficiency Video Coding」、ITU−T SG16 WP3およびISO/IEC JTC1/SC29/WG11のJoint Collaborative Team on Video Coding(JCT−VC)、第6回会合:イタリア トリノ、2011年7月に記載され、2012年9月27日現在、http://phenix.int−evry.fr/jct/doc_end_user/documents/6_Torino/wg11/JCTVC−F803−v3.zipからダウンロードされ、その内容全体が参照により本明細書に組み込まれる。
[0040]代替として、ビデオエンコーダ20およびビデオデコーダ30は、ITU−T H.261、ISO/IEC MPEG−1 Visual、ITU−T H.262またはISO/IEC MPEG−2 Visual、ITU−T H.263、ISO/IEC MPEG−4 Visual、およびスケーラブルビデオコーディング(SVC)拡張とマルチビュービデオコーディング(MVC)拡張とを含む、(ISO/IEC MPEG−4 AVCとしても知られる)ITU−T H.264を含む、他のプロプライエタリ(proprietary)または業界の規格に従って動作することができる。しかしながら、本開示の技法は、いかなる特定のコーディング規格またはコーディング技法にも限定されない。
[0041]ビデオエンコーダ20およびビデオデコーダ30は、各々1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェア、またはそれらの任意の組合せなどの様々な適切な回路のいずれかとして実装することができる。本技法がソフトウェア内で部分的に実施される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェア用の命令を記憶し、1つまたは複数のプロセッサを使用してその命令をハードウェア内で実行して、本開示の技法を実行することができる。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれかは、1つまたは複数のプロセッサであると考えることができる。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダ内に含まれる場合があり、それらのいずれかは、それぞれのデバイス内の複合エンコーダ/デコーダ(コーデック)の一部として統合される場合がある。
[0042]本開示は、概して、ビデオエンコーダ20がビデオデコーダ30などの別のデバイスに、ある情報を「シグナリング(signaling)」することに言及する場合がある。しかしながら、ビデオエンコーダ20は、特定のシンタックス要素をビデオデータの様々な符号化された部分に関連付けることにより、情報をシグナリングできることを理解されたい。つまり、ビデオエンコーダ20は、ビデオデータの様々な符号化された部分にいくつかのシンタックス要素を記憶することによって、データを「シグナリング」することができる。場合によっては、そのようなシンタックス要素は、ビデオデコーダ30によって受信および復号される前に、符号化および(たとえば、ストレージシステムに)記憶することができる。したがって、「シグナリング」という用語は、概して、圧縮されたビデオデータを復号するために使用されるシンタックスまたは他のデータの通信を指す場合がある。そのような通信は、リアルタイムまたはほぼリアルタイムに起こる場合がある。代替として、そのような通信は、符号化時に符号化されたビットストリーム内でシンタックス要素を媒体に記憶するときに起こる場合があるなど、ある時間帯にわたって起こる場合があり、次いで、これらの要素は、この媒体に記憶された後の任意の時間に、復号デバイスによって取り出すことができる。
[0043]ビデオエンコーダ20は、ビデオソース18または別のソースからビデオデータを受信することができる。ビデオデータは一連のピクチャを表すことができる。ピクチャの各々は、ビデオの一部を形成する静止画像であり得る。場合によっては、ピクチャはビデオ「フレーム」と呼ぶ場合がある。
[0044]ビデオエンコーダ20は、コード化ピクチャと関連データとを含むビットストリームを生成することができる。コード化ピクチャは、ピクチャのコード化された表現である。関連データは、シーケンスパラメータセット(SPS)と、ピクチャパラメータセット(PPS)と、適応パラメータセット(APS)と、他のシンタックス構造とを含むことができる。SPSは、ピクチャの0個以上のシーケンスに適用可能なパラメータを含むことができる。PPSは、0個以上のピクチャに適用可能なパラメータを含むことができる。APSは、0個以上のピクチャに適用可能なパラメータを含むことができる。APS内のパラメータは、PPS内のパラメータよりも変化し得るパラメータであり得る。
[0045]コード化ピクチャを生成するために、ビデオエンコーダ20は、ピクチャを等しいサイズのビデオブロックに区分することができる。ビデオブロックはサンプルの2次元アレイであり得る。サンプルは、ピクセルのルミナンス値またはクロミナンス値を示す値であり得る。ビデオブロックの各々は、ツリーブロックと関連付けられる。場合によっては、ツリーブロックは、最大コーディングユニット(LCU)または「コーディングツリーブロック」と呼ばれる場合がある。HEVCのツリーブロックは、H.264/AVCなどの従来の規格のマクロブロックに広い意味で類似する場合がある。しかしながら、ツリーブロックは、特定のサイズに必ずしも限定されるものではなく、1つまたは複数のコーディングユニット(CU)を含む場合がある。ビデオエンコーダ20は、4分木区分を使用して、ツリーブロックのビデオブロックをCUに関連付けられたビデオブロックに区分することができるので、「ツリーブロック」という名前である。
[0046]ビデオエンコーダ20は、ビデオデータの各ピクチャを1つまたは複数のスライスに区分することができる。スライスは整数個のツリーブロックを含む場合がある。ビデオエンコーダ20は、ピクチャの各スライスに関連付けられた符号化されたデータを生成することができる。スライスに関連付けられた符号化されたデータは、「コード化スライス」と呼ばれ得る。コード化スライスを生成するために、ビデオエンコーダ20は、スライス内の各ツリーブロックに関連付けられた符号化されたデータを生成することができる。スライスに関連付けられた符号化されたデータは、コード化ツリーブロックと呼ばれ得る。
[0047]コード化ツリーブロックを生成するために、ビデオエンコーダ20は、ツリーブロックのビデオブロック上で4分木区分を再帰的に実行して、ビデオブロックを徐々により小さいビデオブロックに分割することができる。より小さいビデオブロックの各々は、異なるCUに関連付けることができる。区分されたCUは、そのビデオブロックが他のCUに関連付けられたビデオブロックに区分されたCUであり得る。区分されていないCUは、そのビデオブロックが他のCUに関連付けられたビデオブロックに区分されていないCUであり得る。
[0048]ビデオエンコーダ20は、区分されていないCUごとに1つまたは複数の予測ユニット(PU)を生成することができる。CUのPUの各々は、CUのビデオブロック内の異なるビデオブロックに関連付けることができる。ビデオエンコーダ20は、CUのPUごとに予測ビデオブロックを生成することができる。PUの予測ビデオブロックはサンプルのブロックであり得る。
[0049]ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、PU用の予測ビデオブロックを生成することができる。ビデオエンコーダ20がイントラ予測を使用してPUの予測ビデオブロックを生成する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャの復号されたサンプルに基づいて、PUの予測ビデオブロックを生成することができる。
[0050]ビデオエンコーダ20がインター予測を使用してピクチャのPUの予測ビデオブロックを生成する場合、ビデオエンコーダ20は、ピクチャに関連付けられた一組の参照ピクチャを検索して、参照ピクチャ内の1つまたは複数の参照ブロックを識別することができる。参照ブロックは、PUのビデオブロックに視覚的に対応するビデオブロックであり得る。参照ピクチャは、PUを含むピクチャ以外のピクチャである。ビデオエンコーダ20は、PU用の動き情報(たとえば、参照ピクチャインデックス、動きベクトル、予測方向インジケータなど)を生成することができる。以下に記載されるように、ビデオデコーダ30は、PU用の動き情報を使用して、1つまたは複数の参照ブロックを識別することができる。加えて、ビデオエンコーダ20は、1つまたは複数の識別された参照ブロックに基づいて、PUの予測ビデオブロックを生成することができる。
[0051]ビデオエンコーダ20は、CUのPUの予測ビデオブロックに基づいて、CU用の残差ビデオブロックを生成することができる。CU用の残差ビデオブロックは、CUのPU用の予測ビデオブロック内のサンプルと、CUの元のビデオブロック内のサンプルとの間の差分を示すことができる。
[0052]さらに、ビデオエンコーダ20は、再帰的な4分木区分を実行して、CUの残差ビデオブロックをCUのTUに関連付けられた残差ビデオブロックに区分することができる。ビデオコーダ20は、TUに関連付けられた残差ビデオブロックに1つまたは複数の変換を適用して、係数ブロック(すなわち、係数のブロック)を生成することができる。概念的に、係数ブロックは係数の2次元(2D)行列であり得る。ビデオエンコーダ20は、係数ブロックに対して量子化プロセスを実行することができる。量子化は、概して、係数を表すために使用されるデータの量をできるだけ低減するために係数を量子化するプロセスを指し、さらなる圧縮を行う。ビデオエンコーダ20は、量子化された係数ブロック内の係数を表すシンタックス要素のセットを生成することができる。ビデオエンコーダ20は、これらのシンタックス要素のうちの少なくともいくつかに、コンテキスト適応型バイナリ算術コーディング(CABAC)オペレーションなどのエントロピー符号化オペレーションを適用することができる。
[0053]ビデオエンコーダ20によって生成されたビットストリームは、一連のネットワークアブストラクションレイヤ(NAL)ユニットを含むことができる。NALユニットの各々は、NALユニット内のデータのタイプの指示と、データを含むバイトとを含むシンタックス構造であり得る。たとえば、NALユニットは、SPS、PPS、コード化スライス、補助強化情報(SEI:supplemental enhancement information)、アクセスユニットデリミタ(delimiter)、フィラーデータ(filler data)、または別のタイプのデータを表すデータを含む場合がある。コード化スライスのNALユニットは、コード化スライスを含むNALユニットである。ビデオコーディングレイヤ(VCL)のNALユニットは、コード化スライスのNALユニット用の別の用語である。非VCLのNALユニットは、VCLのNALユニットではないNALユニットである。
[0054]ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信することができる。ビットストリームは、ビデオエンコーダ20によって符号化されたビデオデータのコード化された表現を含むことができる。ビデオデコーダ30は、ビットストリームに対して解析オペレーション(parsing operation)を実行することができる。解析オペレーションを実行することの一部として、ビデオデコーダ30は、ビットストリームからシンタックス要素を抽出することができる。ビットストリームからシンタックス要素を抽出することの一部として、ビデオデコーダ30は、ビットストリーム内のデータに対してエントロピー復号(たとえば、CAVAC復号)オペレーションを実行することができる。ビデオデコーダ30は、ビットストリームから抽出されたシンタックス要素に基づいて、ビデオデータのピクチャを復元することができる。シンタックス要素に基づいてビデオデータを復元するプロセスは、一般に、シンタックス要素を生成するためにビデオエンコーダ20によって実行されるプロセスの逆であり得る。
[0055]ビデオデコーダ30は、ピクチャ内のCUに関連付けられたシンタックス要素に基づいて、CUのPU用の予測ビデオブロックを生成することができる。場合によっては、ビデオデコーダ30は、PUに関連付けられたピクチャの復号されたサンプルに基づいて、イントラ予測を使用してPU用の予測ビデオブロックを生成することができる。他の場合には、ビデオデコーダ30は、現在ピクチャに関連付けられた一組の参照ピクチャ内の参照ピクチャに基づいて、インター予測を使用してPU用の予測ビデオブロックを生成することができる。ビデオデコーダ30がインター予測を使用してPUの予測ビデオブロックを生成する場合、ビデオデコーダ30は、PU用の動き情報を使用して、一組の参照ピクチャ内の1つまたは複数の参照ブロックを識別することができる。ビデオデコーダ30は、1つまたは複数の参照ブロックに基づいて、PUの予測ビデオブロックを生成することができる。
[0056]ビデオデコーダ30は、CUのTUに関連付けられた係数ブロックを逆量子化することができる。ビデオデコーダ30は、逆量子化された係数ブロックに対して逆変換を適用して、CUのTUに関連付けられた残差ビデオブロックを復元することができる。ビデオデコーダ30は、予測ビデオブロックと残差ビデオブロックとに基づいて、CUのビデオブロックを復元することができる。このようにして、ビデオデコーダ30は、ビットストリーム内のシンタックス要素に基づいて、CUのビデオブロックを復元することができる。
[0057]上述されたように、ビデオエンコーダ20は係数ブロックを量子化することができ、ビデオデコーダ30は係数ブロックを逆量子化することができる。いくつかの例では、ビデオエンコーダ20は、量子化行列を使用して係数ブロックを量子化することができる。量子化行列は、係数ブロックと同じ次元を有する値の2次元アレイであり得る。ビデオエンコーダ20がCUのTUに関連付けられた係数ブロック内の係数を量子化するとき、ビデオエンコーダ20はCUに関連付けられた量子化パラメータ(QP)の値を、係数ブロック内の係数の位置に対応する量子化行列内の位置にある値と乗算することができる。ビデオデコーダ30は、係数ブロックを逆量子化するとき、ビデオエンコーダ20が係数ブロックを量子化するとき使用した同じQP値と量子化行列とを使用することができる。
[0058]ビデオエンコーダ20は、同じサイズの様々な係数ブロックを量子化するとき、様々な量子化行列を使用することができる。同じサイズの様々な係数ブロックを量子化するとき様々な量子化行列を使用すると、復号されたビデオデータの主観的品質が向上し得る。ビデオエンコーダ20は、同じサイズの係数ブロックを量子化するために使用される量子化行列を動的に生成することができる。ビデオエンコーダ20は量子化行列を動的に生成することができるので、ビデオデコーダ30は、ビデオエンコーダ20が使用できるすべての量子化行列で事前構成されない。
[0059]ビデオデコーダ30は、ビデオエンコーダ20が係数ブロックを量子化するために使用する同じ量子化行列を使用して、係数ブロックを逆量子化するので、かつビデオデコーダ30は、ビデオエンコーダ20が使用できるすべての量子化行列で事前構成されないので、ビデオエンコーダ20は、ビットストリームに量子化行列を含めることができる。たとえば、ビットストリームは、複数の量子化行列をシグナリングするパラメータセットを含むことができる。この例では、ビデオエンコーダ20は、PPSに関連付けられたスライス内の係数ブロックを量子化するために使用される量子化行列を、PPSに含めることができる。別の例では、ビデオエンコーダ20は、SPSに関連付けられたPPSに関連付けられたスライス内の係数ブロックを量子化するためにQP値とともに使用される量子化行列を、SPSに含めることができる。
[0060]上記に示されたように、ビデオエンコーダ20はPPSとSPSとを含むNALユニットを生成することができる。PPSとSPSとを含むNALユニットは、非VCLのNALユニットである。PPSまたはSPSに量子化行列が含まれると、PPSまたはSPSを含むNALユニットは、エンドツーエンド伝送経路のMTUサイズよりも大きくなる。MTUサイズは様々なサイズであり得る。たとえば、ネットワークレイヤにあるイーサネット(登録商標)上のエンドツーエンド伝送経路のMTUサイズは、1500バイトであり得る。別の例では、いくつかのタイプのワイヤレスネットワークを必要とするエンドツーエンド伝送経路のMTUサイズは、200または300バイトであり得る。他の例では、MTUサイズは、物理レイヤ、ネットワークレイヤ、トランスポートレイヤ、アプリケーションレイヤなどのネットワークスタックの様々なレイヤにある様々な通信プロトコル内の伝送単位の最大サイズであり得る。それに応じて、パケッタイザは、MTUサイズよりも大きいNALユニットを2つ以上のパケットの中に分割することができる。パケットのうちのいずれか1つが損失すると、NALユニット全体が無駄になり得るので、NALユニットを複数のパケットの中に分割することは望ましくない場合がある。これは、ビデオデコーダ30は、NALユニットの損失した部分のデータがなければ、NALユニットの受信された部分のデータを解釈することができないからである。
[0061]H.264/AVCの場合、イントラ予測用、インター予測用、ならびにY成分、Cb成分およびCr成分用にも、個別の量子化行列が使用される。H.264/AVCには、4×4の係数ブロック用の6個の量子化行列が存在する。H.264/AVCだけに、8×8のY成分の係数ブロック用の量子化行列が可能である。したがって、H.264/AVCには、8×8の係数ブロック用の2つの可能な量子化行列が存在する。
[0062]ドラフトのHEVC規格では、4×4、8×8、16×16、および32×32の変換サイズが可能である。さらに、ドラフトのHEVC規格では、24個の量子化行列(すなわち、4×4、8×8、16×16、および32×32の係数ブロック、イントラ/インター、およびY成分、Cb成分、Cr成分用の個別の量子化行列)が存在する可能性がある。したがって、8160個の値をシグナリングする必要があり得る。H.264/AVCに使用される方法(予測残差の指数型ゴロムコード化、1次予測、ジグザグ走査)と同じ方法を使用すると、24個の量子化行列すべてをシグナリングするためにほぼ25,000ビットが必要になり得る。したがって、効率的な圧縮方法を使用するときでも、量子化行列を含み、基礎となるトランスポートプロトコルによってフレーム化されることなく単一の伝送単位(たとえば、リアルタイムトランスポートプロトコルのパケット)にカプセル化することができる単一のNALユニットを生成することは、実現可能ではない可能性がある。
[0063]本開示の技法によれば、ビデオエンコーダ20は、同じパラメータセットの様々な断片を含む複数のNALユニットを生成することができる。パラメータセットは、SPS、PPS、およびAPS、または別のタイプのパラメータセットであり得る。これらのNALユニットの各々のサイズは、ソースデバイス12がNALユニットを送ろうとしているエンドツーエンド伝送経路の(たとえば、1500バイトであり得る)MTUサイズ以下であり得る。
[0064]たとえば、ビデオエンコーダ20は第1のNALユニットを生成することができる。第1のNALユニットは、ビデオデータに関連付けられたパラメータセットの第1の断片を含むことができる。加えて、ビデオエンコーダ20は第2のNALユニットを生成することができる。第2のNALユニットはパラメータセットの第2の断片を含むことができる。第1のNALユニットおよび第2のNALユニットは、非VCLのNALユニットであり得る。この例では、ソースデバイス12または別のコンピューティングデバイスは、第1のNALユニットを通信プロトコルの第1のパケットにカプセル化することができる。ソースデバイス12または別のコンピューティングデバイスは、第2のNALユニットを通信プロトコルの第2のパケットにカプセル化することができる。ソースデバイス12または別のコンピューティングデバイスは、チャネル16上で第1のパケットと第2のパケットとを送ることができる。宛先デバイス14は、通信プロトコル内の第1のパケットと第2のパケットとを含むビットストリームを受信することができる。
[0065]ビデオエンコーダ20は、パラメータセットの他の各断片が損失しても、断片の各々が少なくともいくぶんビデオデコーダ30に有用であるように、パラメータセットの断片を生成することができる。たとえば、ビデオエンコーダ20は、ビデオデコーダ30が断片内のデータを正確に解釈するためにパラメータセットの別の断片内のいかなるデータも必要としないように、断片を生成することができる。たとえば、この例では、ビデオエンコーダ20は、第1の断片を含む第1のNALユニットを生成することができ、第2の断片を含む第2のNALユニットを生成することができる。第1の断片は、第2の断片を参照せずに復号可能であり得、第2の断片は、第1の断片を参照せずに復号可能であり得る。このようにして、様々なNALユニット内のパラメータセットの断片を送ると、パラメータセットの任意の受信された断片は、パラメータセットの他の断片が伝送内で受信、破壊、または損失されたかどうかにかかわらず、デコーダにより依然復号可能なので、まだ有用であり得るという意味で、誤り耐性が増大し得る。
[0066]いくつかの例では、ビデオエンコーダ20は、量子化行列間の差分をシグナリングすることによって、パラメータセット内の量子化行列をシグナリングすることができる。その結果、ビデオデコーダ30は、量子化行列用のシグナリングされた差分を別の量子化行列に加算することによって、量子化行列を復元(すなわち、予測)することができる。いくつかの例では、ビデオデコーダ30は、1つもしくは複数の他の量子化行列から、または量子化行列用のシグナリングされた値のサブセットから量子化行列の値を補間することによって、量子化行列を復元することができる。
[0067]しかしながら、いくつかの例では、ビデオエンコーダ20は、パラメータセットの1つの断片内の量子化行列がパラメータセットの別の断片内の量子化行列に依存しないように、量子化行列用の予測モードを選択することができる。たとえば、第1のNALユニットは量子化行列の第1のサブセットを含むことができ、第2のNALユニットは量子化行列の第2のサブセットを含む。この例では、ビデオエンコーダ20は、量子化行列の第1のサブセット内の各量子化行列が第2のNALユニット内のデータを参照せずに決定可能であり得るし、量子化行列の第2のサブセット内の各量子化行列が第1のNALユニット内のデータを参照せずに決定可能であり得るように、量子化行列用の予測モードを選択することができる。たとえば、この例では、パラメータセットの様々な断片内に量子化行列間の差分コード化は存在し得ない。
[0068]パラメータセットが一組の量子化行列を含むいくつかの例では、パラメータセットの断片を含む各NALユニットは、許可されたタイプの量子化行列の予測を示す1つまたは複数のシンタックス要素を含むことができる。さらに、パラメータセットが一組の量子化行列を含むいくつかの例では、パラメータセットの断片を含むNALユニットは、断片がパラメータセットの量子化行列のすべてを含まないことを明示するシンタックス要素を含むことができる。
[0069]図2は、本開示の技法を実装するように構成された例示的なビデオエンコーダ20を示すブロック図である。図2は、説明の目的で提供され、本開示において広く例示され記載される技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングのコンテキスト内のビデオエンコーダ20を記載する。しかしながら、本開示の技法は、他のコーディング規格またはコーディング方法に適用可能であり得る。
[0070]図2の例では、ビデオエンコーダ20は、複数の機能構成要素を含む。ビデオエンコーダ20の機能構成要素は、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、復元ユニット112と、フィルタユニット113と、復号ピクチャバッファ114と、エントロピー符号化ユニット116とを含む。予測処理ユニット100は、インター予測処理ユニット121と、動き推定ユニット122と、動き補償ユニット124と、イントラ予測処理ユニット126とを含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含む場合がある。さらに、動き推定ユニット122と動き補償ユニット124は、高度に統合できるが、図2の例では、説明の目的で別々に表されている。加えて、図2の例には示されていないが、いくつかの例では、ビデオエンコーダ20は、ビデオエンコーダ20の他の機能構成要素によって生成されたデータに基づいて、NALユニットを生成する構成要素を含む場合がある。
[0071]ビデオエンコーダ20は、ピクチャを符号化することができる。ピクチャを符号化することの一部として、ビデオエンコーダ20は、ピクチャの各スライスを符号化することができる。スライスを符号化することの一部として、ビデオエンコーダ20は、スライス内のツリーブロックを符号化することができる。
[0072]ビデオエンコーダ20は、ラスタ走査順序に従って、スライスのツリーブロックを符号化することができる。言い換えれば、ビデオエンコーダ20は、スライス内のツリーブロックの一番上の行にわたって左から右に進み、次いでツリーブロックの次に低い行にわたって左から右に進み、以下同様の順序で、ビデオエンコーダ20がスライス内のツリーブロックの各々を符号化するまで、スライスのツリーブロックを符号化することができる。
[0073]ラスタ走査順序に従ってツリーブロックを符号化する結果として、所与のツリーブロックの上側および左側のツリーブロックは符号化することができるが、所与のツリーブロックの下側および右側のツリーブロックはまだ符号化されていない。その結果、ビデオエンコーダ20は、所与のツリーブロックを符号化するとき、所与のツリーブロックの上側および左側のツリーブロックを符号化することによって生成された情報にアクセスすることができる可能性がある。しかしながら、ビデオエンコーダ20は、所与のツリーブロックを符号化するとき、所与のツリーブロックの下側および右側のツリーブロックを符号化することによって生成された情報にアクセスすることはできない可能性がある。
[0074]ツリーブロックを符号化することの一部として、予測処理ユニット100は、ツリーブロックのビデオブロックに対して4分木区分を実行して、ビデオブロックを徐々により小さいビデオブロックに分割することができる。より小さいビデオブロックの各々は、異なるCUと関連付けることができる。たとえば、予測処理ユニット100は、ツリーブロックのビデオブロックを4つの等しいサイズのサブブロックに区分し、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
[0075]CUに関連付けられたビデオブロックのサイズは、8×8サンプルから、最大で64×64サンプル以上のツリーブロックのサイズまでわたる場合がある。本開示では、「N×N(NxN)」および「N×N(N by N)」は、垂直方向の寸法および水平方向の寸法に関するビデオブロックのサンプルの寸法、たとえば、16×16(16x16)サンプルまたは16×16(16 by 16)サンプルを指すように互換的に使用することができる。一般に、16×16のビデオブロックは、垂直方向に16個のサンプルを有し(y=16)、水平方向に16個のサンプルを有する(x=16)。同様に、N×Nのブロックは、一般に、垂直方向にN個のサンプルを有し、水平方向にN個のサンプルを有し、ここで、Nは非負整数値を表す。
[0076]さらに、ツリーブロックを符号化することの一部として、予測処理ユニット100は、ツリーブロック用の階層型4分木データ構造を生成することができる。たとえば、ツリーブロックは、4分木データ構造のルートノードに対応することができる。予測処理ユニット100が、ツリーブロックのビデオブロックを4つのサブブロックに区分する場合、ルートノードは、4分木データ構造内に4つの子ノードを有する。子ノードの各々は、サブブロックの1つに関連付けられたCUに対応する。予測処理ユニット100が、サブブロックの1つを4つのサブサブブロックに区分する場合、サブブロックに関連付けられたCUに対応するノードは、サブサブブロックの1つに関連付けられたCUに各々が対応する、4つの子ノードを有することができ、以下同様である。
[0077]4分木データ構造の各ノードは、対応するツリーブロックまたはCU用のシンタックスデータ(たとえば、シンタックス要素)を含む場合がある。たとえば、4分木の中のノードは、そのノードに対応するCUのビデオブロックが4つのサブブロックに区分される(すなわち、分割される)かどうかを示す分割フラグを含む場合がある。CUのシンタックス要素は再帰的に定義される場合があり、CUのビデオブロックがサブブロックに分割されるかどうかに依存する場合がある。ビデオブロックが区分されていないCUは、4分木データ構造におけるリーフノードに対応する場合がある。コード化ツリーブロックは、対応するツリーブロック用の4分木データ構造に基づくデータを含む場合がある。
[0078]ビデオエンコーダ20は、ツリーブロックのCUを符号化して、CUの符号化された表現(すなわち、コード化CU)を生成することができる。ビデオエンコーダ20は、Z走査順序に従って、ツリーブロックのCUを符号化することができる。言い換えれば、ビデオエンコーダ20は、上左のCUと、上右のCUと、下左のCUと、次いで下右のCUとを、その順序で符号化することができる。ビデオエンコーダ20が区分されたCUを符号化するとき、ビデオエンコーダ20は、Z走査順序に従って区分されたCUのビデオブロックのサブブロックに関連付けられたCUを符号化することができる。言い換えれば、ビデオエンコーダ20は、上左のサブブロックに関連付けられたCUと、上右のサブブロックに関連付けられたCUと、下左のサブブロックに関連付けられたCUと、次いで下右のサブブロックに関連付けられたCUとを、その順序で符号化することができる。
[0079]Z走査順序に従ったツリーブロックのCUの符号化の結果として、所与のCUの上、上左、上右、左、および下左のCUは符号化されている。所与のCUの下または右のCUはまだ符号化されていない。その結果、ビデオエンコーダ20は、所与のCUを符号化するとき、所与のCUに隣接するいくつかのCUを符号化することによって生成された情報にアクセスすることができる可能性がある。しかしながら、ビデオエンコーダ20は、所与のCUを符号化するとき、所与のCUに隣接する他のCUを符号化することによって生成された情報にアクセスすることができない可能性がある。
[0080]CUを符号化することの一部として、予測処理ユニット100は、CUの1つまたは複数のPUの中で、CUのビデオブロックを区分することができる。ビデオエンコーダ20およびビデオデコーダ30は、様々な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サイズに対する非対称区分もサポートすることができる。
[0081]インター予測処理ユニット121は、CUの各PUに対してインター予測を実行することができる。インター予測は時間圧縮を提供することができる。インター予測処理ユニット121は、PU用の予測データを生成することができる。PU用の予測データは、PUに対応する予測ビデオブロックとPU用の動き情報とを含むことができる。動き推定ユニット122は、PU用の動き情報を生成することができる。場合によっては、動き推定ユニット122は、マージモードまたは高度動きベクトル予測(AMVP)モードを使用して、PUの動き情報をシグナリングすることができる。動き補償ユニット124は、現在ピクチャとは異なる1つまたは複数のピクチャ(すなわち、参照ピクチャ)のサンプルに基づいて、PUの予測ビデオブロックを生成することができる。
[0082]スライスは、Iスライス、Pスライス、またはBスライスであり得る。動き推定ユニット122および動き補償ユニット124は、PUがIスライス内にあるか、Pスライス内にあるか、Bスライス内にあるかに応じて、CUのPUに対して異なる動作を実行することができる。Iスライスでは、すべてのPUがイントラ予測される。したがって、PUがIスライス内にある場合、動き推定ユニット122および動き補償ユニット124は、PUに対してインター予測を実行しない。
[0083]PUがPスライス内にある場合、PUを含むピクチャは、「リスト0」と呼ばれる参照ピクチャのリストに関連付けられる。いくつかの例では、リスト0に列記された各参照ピクチャは、表示順序において現在ピクチャの前に現れる。リスト0の参照ピクチャの各々は、他のピクチャのインター予測に使用され得るサンプルを含む。動き推定ユニット122は、Pスライス内のPU用の参照ブロックを求めて、リスト0の参照ピクチャを検索することができる。PUの参照ブロックは、PUのビデオブロック内のサンプルに最も密接に対応するサンプルのセット、たとえば、サンプルのブロックであり得る。動き推定ユニット122は、様々なメトリクスを使用して、参照ピクチャ内のサンプルのセットがどの程度密接にPUのビデオブロック内のサンプルに対応するかを決定することができる。たとえば、動き推定ユニット122は、絶対値差分和(SAD)、2乗差分和(SSD)、または他の差分メトリクスにより、参照ピクチャ内のサンプルのセットがどの程度密接にPUのビデオブロック内のサンプルに対応するかを決定することができる。
[0084]動き推定ユニット122は、Pスライス内のPUの参照ブロックを含む、リスト0の参照ピクチャを示す参照ピクチャインデックスと、PUと参照ブロックとの間の空間変位を示す動きベクトルとを生成することができる。動き推定ユニット122は、動きベクトルを様々な精度に生成することができる。たとえば、動き推定ユニット122は、1/4サンプル精度、1/8サンプル精度、または他の分数のサンプル精度で動きベクトルを生成することができる。分数のサンプル精度の場合、参照ブロック値は、参照ピクチャ内の整数位置のサンプル値から補間することができる。動き推定ユニット122は、PUの動き情報として、参照ピクチャインデックスと動きベクトルとを出力することができる。動き補償ユニット124は、PUの動き情報に関連付けられた参照ブロックに基づいて、PUの予測ビデオブロックを生成することができる。
[0085]PUがピクチャのBスライス内にある場合、PUを含むピクチャは、「リスト0」および「リスト1」と呼ばれる参照ピクチャの2つのリストに関連付けることができる。いくつかの例では、リスト1に列記された各参照ピクチャは、表示順序においてピクチャの後に現れる。
[0086]さらに、PUがBスライス内にある場合、動き推定ユニット122は、PUについての単方向インター予測または双方向インター予測を実行することができる。PUについての単方向インター予測を実行するために、動き推定ユニット122は、PU用の参照ブロックを求めてリスト0またはリスト1の参照ピクチャを検索することができる。動き推定ユニット122は、参照ブロックを含む、リスト0またはリスト1の参照ピクチャを示す参照ピクチャインデックスと、PUと参照ブロックとの間の空間変位を示す動きベクトルとを生成することができる。加えて、動き推定ユニット122は、参照ブロックがリスト0またはリスト1にある参照ピクチャ内にあるかどうかを示す予測方向インジケータを生成することができる。
[0087]PUについての双方向インター予測を実行するために、動き推定ユニット122は、PU用の参照ブロックを求めてリスト0の参照ピクチャを検索することができ、PU用の別の参照ブロックを求めてリスト1の参照ピクチャを検索することもできる。動き推定ユニット122は、参照ブロックを含む、リスト0およびリスト1の参照ピクチャを示す参照ピクチャインデックスと、参照ブロックとPUとの間の空間変位を示す動きベクトルとを生成することができる。PUの動き情報は、PUの参照ピクチャインデックスと動きベクトルとを含むことができる。動き補償ユニット124は、PUの動き情報によって示された参照ブロックに基づいて、PUの予測ビデオブロックを生成することができる。
[0088]イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することができる。イントラ予測は空間圧縮を提供することができる。イントラ予測処理ユニット126は、PUと同じピクチャ内の復号されたサンプルに基づいて、PU用の予測データを生成することができる。PU用の予測データは、予測ビデオブロックと様々なシンタックス要素とを含むことができる。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対してイントラ予測を実行することができる。
[0089]PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PU用の予測データの複数のセットを生成することができる。イントラ予測モードを使用してPU用の予測データのセットを生成するために、イントラ予測処理ユニット126は、イントラ予測モードに関連付けられた方向および/または勾配(gradient)で、隣接PUのビデオブロックからPUのビデオブロックにわたって、サンプルを延ばすことができる。隣接PUは、PU、CUおよびツリーブロックについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、および/または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば、33個の方向のイントラ予測モードを使用することができる。いくつかの例では、イントラ予測モードの数はPUのサイズに依存する場合がある。
[0090]予測処理ユニット100は、PUについてインター予測処理ユニット121によって生成された予測データ、またはPUについてイントラ予測処理ユニット126によって生成された予測データの中から、PU用の予測データを選択することができる。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/歪みのメトリクスに基づいて、PU用の予測データを選択する。
[0091]残差生成ユニット102は、CUのビデオブロックからCUのPUの予測ビデオブロックを減算することによって、CU用の残差データを生成することができる。CUの残差データは、CUのビデオブロック内のサンプルの様々なサンプル成分に対応する残差ビデオブロックを含むことができる。たとえば、残差データは、CUのPUの予測ビデオブロック内のサンプルの輝度成分と、CUの元のビデオブロック内のサンプルの輝度成分との間の差分に対応する、残差ビデオブロックを含むことができる。加えて、CUの残差データは、CUのPUの予測ビデオブロック内のサンプルのクロミナンス成分と、CUの元のビデオブロック内のサンプルのクロミナンス成分との間の差分に対応する、残差ビデオブロックを含むことができる。
[0092]予測処理ユニット100は、4分木区分を実行して、CUの残差ビデオブロックをサブブロックに区分することができる。各々の分割されていない残差ビデオブロックは、CUの異なるTUに関連付けることができる。CUのTUに関連付けられた残差ビデオブロックのサイズおよび位置は、CUのPUに関連付けられたビデオブロックのサイズおよび位置に基づく場合があるか、または基づかない場合がある。「残差4分木」(RQT)として知られる4分木構造は、残差ビデオブロックの各々に関連付けられたノードを含む場合がある。CUのTUはRQTのリーフノードに対応する場合がある。
[0093]変換処理ユニット104は、TUに関連付けられた残差ビデオブロックに1つまたは複数の変換を適用することによって、CUのTUごとに1つまたは複数の係数ブロックを生成することができる。係数ブロックの各々は係数の2D行列であり得る。変換処理ユニット104は、TUに関連付けられた残差ビデオブロックに様々な変換を適用することができる。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に同様の変換を、TUに関連付けられた残差ビデオブロックに適用することができる。
[0094]量子化ユニット106は、CUのTUに関連付けられた係数ブロック内の係数を量子化することができる。量子化プロセスは、係数の一部または全部に関連するビット深度を低減することができる。たとえば、nビットの係数は量子化を通じてmビットに切り捨てることができ、ここでnはmよりも大きい。量子化ユニット106は、CUに関連付けられたQP値とともに量子化行列を使用して、CUのTUに関連付けられた係数ブロックを量子化することができる。ビデオエンコーダ20は、CUに関連付けられたQP値を調整することによって、CUに関連付けられた変換係数ブロックに適用される量子化の程度を調整することができる。
[0095]逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、係数ブロックに逆量子化と逆変換とを適用して、係数ブロックから残差ビデオブロックを復元することができる。復元ユニット112は、復元された残差ビデオブロックを、予測処理ユニット100によって生成された1つまたは複数の予測ビデオブロックからの対応するサンプルに追加して、TUに関連付けられた復元されたビデオブロックを生成することができる。このようにしてCUのTUごとにビデオブロックを復元することによって、ビデオエンコーダ20は、CUのビデオブロックを復元することができる。
[0096]フィルタユニット113は、デブロッキング動作を実行して、CUに関連付けられたビデオブロック内のブロッキングアーティファクトを低減することができる。1つまたは複数のデブロッキング動作を実行した後、フィルタユニット113は、復号ピクチャバッファ114にCUの復元されたビデオブロックを記憶することができる。動き推定ユニット122および動き補償ユニット124は、復元されたビデオブロックを含む参照ピクチャを使用して、後続ピクチャのPUに対してインター予測を実行することができる。加えて、イントラ予測処理ユニット126は、復号ピクチャバッファ114内の復元されたビデオブロックを使用して、CUと同じピクチャ内の他のPUに対してイントラ予測を実行することができる。
[0097]エントロピー符号化ユニット116は、ビデオエンコーダ20の他の機能構成要素からデータを受信することができる。たとえば、エントロピー符号化ユニット116は、量子化ユニット106から係数ブロックを受信することができ、予測処理ユニット100からシンタックス要素を受信することができる。エントロピー符号化ユニット116は、データに対して1つまたは複数のエントロピー符号化オペレーションを実行して、エントロピー符号化データを生成することができる。たとえば、ビデオエンコーダ20は、コンテキスト適応型可変長コーディング(CAVLC)オペレーション、CABACオペレーション、変数−変数(V2V)レングスコーディングオペレーション、シンタックスベースのコンテキスト適応型バイナリ算術コーディング(SBAC)オペレーション、Probability Interval Partitioning Entropy(PIPE)コーディングオペレーション、または別のタイプのエントロピー符号化オペレーションをデータに対して実行することができる。エントロピー符号化ユニット116は、エントロピー符号化データを含むビットストリームを出力することができる。
[0098]データに対してエントロピー符号化オペレーションを実行することの一部として、エントロピー符号化ユニット116は、コンテキストモデルを選択することができる。エントロピー符号化ユニット116がCABACオペレーションを実行している場合、コンテキストモデルは、特定の値を有する特定のビンの確率の推定値を示すことができる。CABACのコンテキストでは、「ビン」という用語は、シンタックス要素の2値化されたバージョンのビットを指すために使用される。
[0099]上述されたように、ビデオエンコーダ20は、一連のNALユニットを含むビットストリームを生成し得る。NALユニットの各々は、NALユニットヘッダと、生のバイトシーケンスペイロード(RBSP)とを含み得る。NALユニットのNALユニットヘッダは、NALユニットのタイプを示すシンタックス要素(nal_unit_type)を含み得る。RBSPは、NALユニット内にカプセル化された整数個のバイトを含むシンタックス構造であり得る。RBSPは、空か、または、後にRBSPストップビットおよび0個以上の0に等しい後続ビットが続くシンタックス要素を含む、データのストリングの形態を有するかのいずれかであり得る。様々なタイプのNALユニットは、様々なタイプのRBSPを含む。様々なタイプのRBSPは、様々なタイプのコード化ビデオデータを含む。
[0100]たとえば、コード化スライスのNALユニットは、スライスに関連付けられたコード化シンタックス要素を含むRBSPを含む場合がある。スライスに関連付けられたコード化シンタックス要素は、ビデオデコーダ30がスライス内のビデオブロックの量子化された係数を決定するために使用できるシンタックス要素と、ビデオデコーダ30がスライスのインター予測されたPUの動き情報を決定するために使用できるシンタックス要素と、イントラ予測コーディングモードなどとを含む場合がある。さらに、パラメータセットのNALユニットは、パラメータセットのデータを含むRBSPを含む場合がある。例示的なタイプのパラメータセットのNALユニットには、PPSのNALユニット、SPSのNALユニット、APSのNALユニット、およびパラメータセットを含む他のタイプのNALユニットが含まれる。PPSのNALユニットは、PPSのデータを含むRBSPを含むNALユニットである。SPSのNALユニットは、SPSのデータを含むRBSPを含むNALユニットである。APSのNALユニットは、APSのデータを含むRBSPを含むNALユニットである。
[0101]本開示の技法によれば、ビデオエンコーダ20は、パラメータセットの断片のデータを含むRBSPを含むNALユニットを生成することができる。パラメータセットの断片のデータを含むRBSPは、様々なシンタックスに適合することができる。たとえば、APSのNALユニットのRBSPは、下記表1のシンタックスに適合することができる。下記の例はAPSのNALユニットを参照して説明されるが、本開示の技法は、PPSおよびSPSなどの他のタイプのパラメータセットに適用可能であり得る。
[0102]表1の例示的なシンタックスでは、aps_parameter_set_idパラメータは、APSの識別子として働く値を指定する。aps_parameter_set_idシンタックス要素の同じ値を有するAPSのNALユニットは、同じAPSに属する。
[0103]表1の例示的なシンタックスでは、quantization_matrix_flagシンタックス要素は、量子化行列がAPS内でシグナリングされたかどうかを指定する。quantization_matrix_flagシンタックス要素が0に等しい場合、量子化行列は現在のAPS内でシグナリングされず、現在のAPSを参照するコード化ピクチャに使用されない。quantization_matrix_flagシンタックス要素が1に等しい場合、量子化行列は現在のAPS内でシグナリングされ、現在のAPSを参照するコード化ピクチャに使用される。このようにして、パラメータセットのNALユニットは、パラメータセットのNALユニットが1つまたは複数の量子化行列を含むことを示すフラグを含むことができる。
[0104]さらに、表1の例示的なシンタックスでは、quantization_matrix_idcシンタックス要素は、許可された量子化行列予測のタイプを指定する。quantization_matrix_idcシンタックス要素が0に等しい場合、量子化行列内の量子化行列予測だけが許可される。quantization_matrix_idcシンタックス要素が1に等しい場合、同じパラメータセットのNALユニット内の量子化行列係数予測が、行列内または行列間の両方で許可される。quantization_matrix_idcシンタックス要素が2に等しい場合、同じパラメータセット内の量子化行列予測が、量子化行列とともに、量子化行列間だが1つのNALユニット内で、または、同じパラメータセットの異なるNALユニット内の量子化行列間で、許可される。quantization_matrix_idcシンタックス要素が3に等しい場合、量子化行列内から、同じパラメータセットのNALユニット内の他の量子化行列から、同じパラメータセットの異なるNALユニットからの他の量子化行列から、および異なるパラメータセット内の他の量子化行列からの量子化行列の予測がすべて許可される。quantization_matrix_idcシンタックス要素が0または1に等しい場合、APSのセグメントは別個に復号可能であり得る。すなわち、quantization_matrix_idcシンタックス要素が0または1に等しい場合、パラメータセットの各セグメントは、パラメータセットの任意の他のセグメントを参照せずに復号することができる。
[0105]表1の例示的なシンタックスでは、qm_fragment_only_aps_flagシンタックス要素が1に等しい場合、現在のAPSのNALユニットは、サンプル適応型オフセット(SAO)関連シンタックス要素および適応型ループフィルタ(ALF)関連シンタックス要素などの他のシンタックス要素ではなく、行列テーブルだけを含むことができる。qm_fragment_only_aps_flagシンタックス要素が0に等しい場合、現在のAPSのNALユニットは、量子化行列と、SAO関連シンタックス要素およびALF関連シンタックス要素などの他のシンタックス要素の両方を含むことができる。存在しないとき、qm_fragment_only_aps_flagシンタックス要素は、0に等しいと推論される。このようにして、パラメータセットのNALユニットは、パラメータセットのNALユニットがパラメータセットの量子化行列のすべてを含むことを示すフラグを含むことができる。
[0106]表1の例示的なシンタックスは、quantization_matrix_tableシンタックス構造を含む。quantization_matrix_tableシンタックス構造は、下記表2の例示的なシンタックスに適合することができる。
[0107]表2のquantization_matrix_tableシンタックス構造は、1つのAPSのNALユニット内でシグナリングされた量子化行列を含むことができる。上記に示されたように、aps_parameter_set_idシンタックス要素の同じ値を有するNALユニットの各々は、同じAPSに属することができる。同じAPSに属するNALユニットは、24個の量子化行列の1つのフルセットを互いに含むことができる。
[0108]表2の例示的なシンタックスでは、reuse_qm_table_flagシンタックス要素が1に等しい場合、ビデオデコーダ30は、現在のAPSの量子化行列が別のAPSの量子化行列と等しいことを決定することができる。reuse_aps_idシンタックス要素は、他のAPSの識別子を指定する。reuse_qm_table_flagシンタックス要素が0に等しい場合、現在のAPSの量子化行列は、量子化行列テーブルの残りの部分内でシグナリングされる。
[0109]さらに、表2の例では、fragment_flagシンタックス要素が1に等しい場合、量子化行列テーブルは、現在のAPSのすべての量子化行列を含むというわけではない。fragment_flagシンタックス要素が0に等しい場合、量子化行列テーブルは、現在のAPSのすべての量子化行列を含む。fragment_flagシンタックス要素が存在しないとき、fragment_flagシンタックス要素は、0に等しいと推論される。
[0110]表2の例示的なシンタックスでは、num_quantization_matricesシンタックス要素は、この量子化行列テーブル内でシグナリングされた量子化行列の数を指定する。num_quantization_matricesシンタックス要素が存在しないとき、この量子化行列テーブル内でシグナリングされた量子化行列の数は、24に等しいと推論することができる。num_ref_aps_for_qmシンタックス要素は、この量子化行列テーブル内で画定された量子化行列を予測するために使用される参照APSの数を指定する。ref_aps_id[i]シンタックス要素は、この量子化行列テーブル内で画定された量子化行列を予測するために使用されるi番目の参照APSの識別子を指定する。quan_matrix_id[i]シンタックス要素は、この量子化行列テーブル内でシグナリングされたi番目の量子化行列の識別子を指定する。
[0111]表2の例示的なシンタックスでは、qm_prediction_mode[i]は、i番目の量子化行列の予測モードを指定する。quantization_matrix_idcシンタックス要素が1に等しいとき、qm_prediction_mode[i]シンタックス要素の長さは1ビットであり得る。quantization_matrix_idcシンタックス要素が2または3に等しいとき、quantization_matrix_idc[i]シンタックス要素の長さは2ビットであり得る。qm_prediction_mode[i]シンタックス要素が0に等しい場合、i番目の量子化行列自体の内部の量子化行列予測が許可される。qm_prediction_mode[i]シンタックス要素が1に等しい場合、i番目の量子化行列は、同じAPSのNALユニット内の量子化行列から予測される。qm_prediction_mode[i]シンタックス要素が2に等しい場合、i番目の量子化行列は、同じAPSの量子化行列から予測される。qm_prediction_mode[i]シンタックス要素が3に等しい場合、i番目の量子化行列は、異なるAPSの量子化行列から予測される。
[0112]したがって、qm_prediction_mode[i]シンタックス要素が0よりも大きい場合、i番目の量子化行列は、qm_id[i]シンタックス要素によって示された別の量子化行列から予測することができる。ビデオエンコーダ20は、i番目の量子化行列と予測された量子化行列との間の予測誤差を形成することができる。予測誤差は、i番目の量子化行列と予測された量子化行列との間の差分を示すことができる。ビデオエンコーダ20は、後に符号付き指数ゴロムコードまたは他の可変長コードが続くジグザグ走査を使用して予測誤差を符号化することができる。他の量子化行列がいずれかの次元でi番目の量子化行列よりも小さい場合、ビデオエンコーダ20は、線形補間または別の補間方法を使用して、予測された量子化行列を形成することができる。
[0113]他の量子化行列がいずれかの次元でi番目の量子化行列(すなわち、現在の量子化行列)よりもサイズにおいて大きい場合、ビデオエンコーダ20は、予測された量子化行列を以下のように導出することができる。現在の量子化行列をQ1、サイズをN×Nとする。さらに、他の量子化行列をQ2、サイズをkN×kNとする。また、予測された量子化行列をPQ、サイズをN×Nとする。kは2の累乗である整数であり得る。この例では、ビデオエンコーダ20は、Q2(ki,kj)を中心とするサイズ(2m+1)×(2m+1)のウィンドウ内のQ2のサンプルを平均化することによって、PQ(i,j)を形成することができる。ビデオエンコーダ20は、平均値を最も近いピクセルに丸めることができる。いくつかの例では、ビデオエンコーダ20は、ウィンドウ内部のサンプルに重みを異なるように割り当てることができる。
[0114]別の例では、qm_prediction_mode[i]シンタックス要素が0であるとき、ビデオエンコーダ20は、ジグザグ走査またはラスタ走査などの特定の走査で、量子化行列係数に対して空間予測を実行することができる。ビデオエンコーダ20は、ゴロムコード化、指数ゴロムコード化、または他の可変長コードを使用して、予測誤差を符号化することができる。量子化行列パラメータの符号化は、損失の多い場合がある。量子化行列用の復号プロセスは、ビデオエンコーダ20が損失の多い符号化を使用するか、または損失のない符号化を使用するかにかかわらず、同じであり得る。
[0115]さらに、表2の例示的なシンタックスでは、ref_aps_idx[i]シンタックス要素は、両端値を含む0からnum_ref_aps_for_qm−1までの範囲のすべてのjの値についてref_aps_id[i]シンタックス要素によって識別されたAPSのリストへのインデックスを指定する。qm_id[i]シンタックス要素は、現在のAPSのi番目の量子化行列を予測するために使用された、ref_aps_idx[i]シンタックス要素によって識別されたAPS内でシグナリングされた量子化行列の識別子を指定する。qm_pred_skip_flag[i]シンタックス要素が1に等しい場合、i番目の量子化行列が予測され、係数は、予測された量子化行列を改善するためにシグナリングされない。qm_pred_skip_flag[i]シンタックス要素が0に等しい場合、i番目の量子化行列の係数は、quantization_matrix_coefsシンタックステーブル内でシグナリングされる。qm_pred_skip_flag[i]シンタックス要素は、存在しないとき0に等しいと推論される。
[0116]別の例では、APSのRBSPは、下記表3に示された例示的なシンタックスに適合することができる。
[0117]表3の例示的なシンタックスでは、aps_idシンタックス要素は、APSの識別子を指定する。1つのAPSに関連付けられた2つ以上のAPSのNALユニットが存在する場合がある。同じAPSの断片を含むAPSのNALユニットの各々は、aps_idシンタックス要素の同じ値を指定することができる。
[0118]さらに、表3の例示的なシンタックスでは、first_aps_fragment_flagシンタックス要素が1に等しい場合、APSのNALユニットは、aps_idシンタックス要素によって識別されたAPSの最初のAPSのNALユニットである。first_aps_fragment_flagシンタックス要素が0に等しい場合、APSのNALユニットは、aps_idシンタックス要素によって識別されたAPSの最初のAPSのNALユニットではない。1に等しいfirst_aps_fragment_flagシンタックス要素によって識別された最初のAPSのNALユニットは、「ヘッダ」シンタックス要素、たとえば、様々なタイプの情報、その上ALF関連情報およびSAO関連情報などのAPSに含まれる他のタイプの情報の存在を示すフラグを含む。表3の例示的なシンタックスでは、1つのAPSの他のAPSのNALユニットは、量子化行列情報のみを含む。他の例では、他のAPSのNALユニットが他のタイプの情報を含むことも可能であり得る。
[0119]表3の例示的なシンタックスでは、last_aps_fragment_flagシンタックス要素が1に等しい場合、APSのNALユニットは、aps_idシンタックス要素によって識別されたAPSの最後のAPSのNALユニットである。last_aps_fragment_flagシンタックス要素が0に等しい場合、APSのNALユニットは、aps_idシンタックス要素によって識別されたAPSの最後のAPSのNALユニットではない。first_aps_fragment_flagシンタックス要素およびlast_aps_fragment_flagシンタックス要素が両方1に等しい場合、aps_idシンタックス要素によって識別されたAPSは1つだけのAPS断片を含む。
[0120]表3の例示的なシンタックスでは、aps_quantization_matrix_flagシンタックス要素は、量子化行列が現在のAPS内でシグナリングされたかどうかを指定する。aps_quantization_matrix_flagシンタックス要素が0に等しい場合、量子化行列は現在のAPS内でシグナリングされず、現在のAPSを参照するコード化ピクチャに使用されない。aps_quantization_matrix_flagシンタックス要素が1に等しい場合、量子化行列は現在のAPS内でシグナリングされ、現在のAPSを参照するコード化ピクチャに使用される。aps_quantization_matrix_flagシンタックス要素が存在しない(すなわち、first_aps_fragment_flagシンタックス要素が0に等しい)場合、aps_quantization_matrix_flagシンタックス要素は1に等しいと推論することができる。
[0121]表3の例示的なシンタックスでは、aps_sample_adaptive_offset_flagシンタックス要素が1に等しい場合、SAOは現在のAPSを参照するスライスに適用される。aps_sample_adaptive_offset_flagシンタックス要素が0に等しい場合、SAOは現在のAPSを参照するスライスに適用されない。アクティブなAPSが存在しない場合、aps_sample_adaptive_offset_flagシンタックス要素は0に等しいと推論することができる。アクティブなAPSは、現在コード化されているスライスによって参照されるAPSであり得る。aps_adaptive_loop_filter_flagシンタックス要素が1に等しい場合、ALFは現在のAPSを参照するスライスに適用される。aps_adaptive_loop_filter_flagシンタックス要素が0に等しい場合、ALFは現在のAPSを参照するスライスに適用されない。アクティブなAPSが存在しない場合、aps_adaptive_loop_filter_flagシンタックス要素は0に等しいと推論することができる。
[0122]さらに、num_quantization_matrices_minus1シンタックス要素プラス1は、現在のAPSのNALユニット内でシグナリングされた量子化行列の数を指定する。num_quantization_matrices_minus1シンタックス要素が存在しない場合、num_quantization_matrices_minus1シンタックス要素の値は、23に等しいと推論することができる。
[0123]いくつかの例では、表3の要素「if(more_rbsp_data())」は、「if(first_aps_fragment_flag)」と置き換えられる。このようにして、最初のAPSの断片だけが量子化行列以外の情報を含むことができる。さらに、いくつかの例では、quantization_matrix_coefs(i)の一例内、または同じAPSのNALユニット内のquantization_matrix_coefs(i)の異なる例にわたる予測が許可される。しかしながら、異なるAPSのNALユニットにわたる従属関係は許可されない。これにより、現在のAPSに関連付けられたすべての他のAPSのNALユニットが損失しても、いかなる単一の受信されたAPSのNALユニットもそれだけで有用であることが保証される。
[0124]下記表4は、quantization_matrix_table用の別の例示的なシンタックスを示す。表4の例示的なシンタックスでは、第1の量子化行列の量子化行列識別子がシグナリングされる。しかしながら、量子化行列は特定の順序に従うので、第1の量子化行列以外の量子化行列の量子化行列識別子は、明示的にシグナリングされない。
[0125]表4の例示的なシンタックスでは、id_startシンタックス要素は、このテーブル内でシグナリングされた最初の量子化行列の識別子を指定する。シグナリングされた量子化行列は、id_startシンタックス要素によって指定された値からid_startシンタックス要素によって指定された値プラスnum_quantization_matricesシンタックス要素によって指定された値マイナス1までの範囲の識別子を有する。すなわち、i番目の量子化行列は、id_startシンタックス要素によって指定された値プラスiに等しい量子化行列識別子を有する。表4の他のシンタックス要素は、表2の例示的なシンタックス内の対応するシンタックス要素と同じセマンティクスを有することができる。
[0126]上記の例では、量子化行列は、あらかじめ規定された順序で、1つまたは複数のパラメータセットのNALユニット内でシグナリングすることができる。いくつかの例では、あらかじめ規定された順序は、より重要な量子化行列がより重要でない量子化行列よりも早くシグナリングされる優先順序であり得る。量子化行列のインデックスは、シグナリングされた量子化行列のリスト内の位置へのインデックスである。
[0127]たとえば、量子化行列の1つの可能な順序では、サイズ4×4のすべての量子化行列が最初にシグナリングされ、次にサイズ8×8の量子化行列がシグナリングされ、次にサイズ16×16の量子化行列がシグナリングされ、最後にサイズ32×32の量子化行列がシグナリングされる。特定のブロックサイズ以内で、順序は、Yイントラ係数ブロック用の量子化行列、Yインター係数ブロック用の量子化行列、Uイントラ係数ブロック用の量子化行列、Vイントラ係数ブロック用の量子化行列、Uインター係数ブロック用の量子化行列、およびVインター係数ブロック用の量子化行列であり得る。
[0128]Yイントラ係数ブロックは、イントラ予測を使用して生成されたY(すなわち、ルミナンス)サンプルの予測ビデオブロックに基づく係数ブロックであり得る。Yインター係数ブロックは、インター予測を使用して生成されたY(すなわち、ルミナンス)サンプルの予測ビデオブロックに基づく係数ブロックであり得る。Uイントラ係数ブロックは、イントラ予測を使用して生成されたU(すなわち、UクロミナンスまたはCbクロミナンス)サンプルの予測ビデオブロックに基づく係数ブロックであり得る。Uインター係数ブロックは、インター予測を使用して生成されたUサンプルの予測ビデオブロックに基づく係数ブロックであり得る。Vイントラ係数ブロックは、イントラ予測を使用して生成されたV(すなわち、VクロミナンスまたはCrクロミナンス)サンプルの予測ビデオブロックに基づく係数ブロックであり得る。Uインター係数ブロックは、インター予測を使用して生成されたVサンプルの予測ビデオブロックに基づく係数ブロックであり得る。
[0129]別の例では、量子化行列を異なる順序で列記することができる。最初に、ビデオエンコーダ20は、送られたすべてのブロックサイズについてルミナンス量子化行列を、以下の順序でシグナリングすることができる:Yイントラ4×4、Yインター4×4、Yイントラ8×8、Yインター8×8、Yイントラ16×16、Yインター16×16、Yイントラ32×32、およびYインター32×32。これらの量子化行列の後に、U成分用の量子化行列およびV成分用の量子化行列が続く。サイズ4×4のクロマ量子化行列が最初にシグナリングされ、8×8、16×16、および32×32が続く。特定のブロックサイズ以内で、順序は、Uイントラ、Vイントラ、Uインター、Vインターであり得る。いくつかの例では、ビデオエンコーダ20は、量子化行列のこの順序付けが保持されるような順序で量子化行列を含むNALユニットを出力することができる。
[0130]上記の表1〜表4は、APSのシンタックスまたはAPS内のシンタックスを記載した。しかしながら、他のタイプのパラメータセットは、表2もしくは表4または他のシンタックスに適合する量子化行列を含む場合がある。たとえば、SPSまたはPPSは、表2もしくは表4または他のシンタックスに適合する量子化行列を含む場合がある。その上、上述されたAPSのシンタックス要素は、SPSおよびPPSなどの他のタイプのパラメータセットに含まれる場合がある。さらに、いくつかの例では、情報をSPSまたはPPS内で繰り返しシグナリングすることができる。そのような情報は、量子化行列がシグナリングされ使用されたかどうか、許可された予測のタイプなどを示す情報を含む場合がある。
[0131]図3は、本開示の技法を実装するように構成された例示的なビデオデコーダ30を示すブロック図である。図3は、説明の目的で提供され、本開示において広く例示され記載される技法を限定するものではない。説明の目的で、本開示は、HEVCコーディングのコンテキスト内のビデオデコーダ30を記載する。しかしながら、本開示の技法は、他のコーディング規格またはコーディング方法に適用可能であり得る。
[0132]図3の例では、ビデオデコーダ30は複数の機能構成要素を含む。ビデオデコーダ30の機能構成要素は、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、復元ユニット158と、フィルタユニット159と、復号ピクチャバッファ160とを含む。予測処理ユニット152は、動き補償ユニット162とイントラ予測処理ユニット164とを含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含む場合がある。
[0133]ビデオデコーダ30は、符号化されたビデオデータを備えるビットストリームを受信することができる。ビットストリームは複数のシンタックス要素を含むことができる。エントロピー復号ユニット150はビットストリームを解析することができる。ビットストリームを解析した結果として、エントロピー復号ユニット150は、ビットストリームからシンタックス要素を抽出することができる。ビットストリームを解析することの一部として、エントロピー復号ユニット150は、ビットストリーム内のエントロピー符号化されたシンタックス要素をエントロピー復号することができる。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、復元ユニット158、およびフィルタユニット159は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成することができる。
[0134]上記で説明されたように、ビットストリームは一連のNALユニットを備えることができる。ビットストリームのNALユニットは、コード化スライスのNALユニットと、SPSのNALユニットと、PPSのNALユニットと、SEIのNALユニットなどとを含む場合がある。ビットストリームを解析することの一部として、エントロピー復号ユニット150は、SPSのNALユニットからSPSを、PPSのNALユニットからPPSを、SEIのNALユニットからSEIデータなどを抽出しエントロピー復号することができる。
[0135]ビットストリームを解析することの一部として、エントロピー復号ユニット150は、ビットストリーム内のコード化スライスのNALユニットからコード化スライスを抽出しエントロピー復号することができる。コード化スライスの各々は、スライスヘッダとスライスデータとを含むことができる。スライスヘッダは、スライスに関係するシンタックス要素を含むことができる。スライスヘッダ内のシンタックス要素は、スライスを含むピクチャに関連付けられたPPSを識別するシンタックス要素を含むことができる。エントロピー復号ユニット150は、コード化されたスライスヘッダ内のシンタックス要素に対して、CABAC復号オペレーションなどのエントロピー復号オペレーションを実行して、スライスヘッダを復元することができる。
[0136]コード化スライスのNALユニットからスライスデータを抽出することの一部として、エントロピー復号ユニット150は、スライスデータ内のコード化CUからシンタックス要素を抽出することができる。抽出されたシンタックス要素は、係数ブロックに関連するシンタックス要素を含むことができる。エントロピー復号ユニット150は、シンタックス要素のうちの少なくともいくつかに対してCABAC復号オペレーションを実行することができる。
[0137]加えて、ビデオデコーダ30は、CUのTUに関連付けられた残差ビデオブロックを復元することができる。TUの残差ビデオブロックを復元するために、逆量子化ユニット154は、TUに関連付けられた係数ブロックを逆量子化、すなわち、量子化解除することができる。いくつかの例では、逆量子化ユニット154は、CUに関連付けられた量子化行列とQP値とを使用して、CUのTUに関連付けられた係数ブロックを逆量子化することができる。いくつかの例では、量子化行列は、1つまたは複数のパラメータセット内でシグナリングすることができる。
[0138]逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TU用の残差ビデオブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用することができる。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用することができる。
[0139]いくつかの例では、逆変換処理ユニット156は、ビデオエンコーダ20からのシグナリングに基づいて、係数ブロックに適用すべき逆変換を決定することができる。そのような例では、逆変換処理ユニット156は、係数ブロックに関連付けられたツリーブロック用の4分木のルートノードでシグナリングされた変換に基づいて、逆変換を決定することができる。他の例では、逆変換処理ユニット156は、ブロックサイズ、コーディングモードなどの1つまたは複数のコーディング特性から逆変換を推論することができる。いくつかの例では、逆変換処理ユニット156はカスケード逆変換を適用することができる。
[0140]PUがスキップモードで符号化されるか、またはPUの動き情報がマージモードを使用して符号化された場合、動き補償ユニット162は、PU用のマージ候補リストを生成することができる。動き補償ユニット162は、マージ候補リスト内の選択されたマージ候補を識別することができる。動き補償ユニット162は、選択されたマージ候補によって示された動き情報に関連付けられた、1つまたは複数の参照ブロックに基づいて、PU用の予測ビデオブロックを生成することができる。
[0141]PUの動き情報がAMVPモードを使用して符号化された場合、動き補償ユニット162は、リスト0のMV予測器候補リストおよび/またはリスト1のMV予測器候補リストを生成することができる。動き補償ユニット162は、選択されたリスト0のMV予測器候補リストおよび/または選択されたリスト1のMV予測器候補リストを決定することができる。次に、動き補償ユニット162は、リスト0の動きベクトル差分(MVD)、リスト1のMVD、選択されたリスト0のMV予測器候補リストによって指定されたリスト0の動きベクトル、および/または選択されたリスト1のMV予測器候補リストによって指定されたリスト1の動きベクトルに基づいて、リスト0のPU用動きベクトルおよび/またはリスト1のPU用動きベクトルを決定することができる。動き補償ユニット162は、リスト0の動きベクトルおよびリスト0の参照ピクチャインデックス、および/またはリスト1の動きベクトルおよびリスト1の参照ピクチャインデックス、に関連付けられた参照ブロックに基づいて、PU用の予測ビデオブロックを生成することができる。
[0142]いくつかの例では、動き補償ユニット162は、補間フィルタに基づいて補間を実行することによって、PUの予測ビデオブロックを改善することができる。サブサンプル精度を有する動き補償に使用されるべき補間フィルタ用の識別子は、シンタックス要素に含まれる場合がある。動き補償ユニット162は、PUの予測ビデオブロックの生成中にビデオエンコーダ20によって使用されるのと同じ補間フィルタを使用して、参照ブロックのサブ整数サンプルについて補間された値を算出することができる。動き補償ユニット162は、受信されたシンタックス情報に従って、ビデオエンコーダ20によって使用された補間フィルタを決定し、その補間フィルタを使用して予測ビデオブロックを生成することができる。
[0143]PUがイントラ予測を使用して符号化された場合、イントラ予測処理ユニット164は、イントラ予測を実行して、PU用の予測ビデオブロックを生成することができる。たとえば、イントラ予測処理ユニット164は、ビットストリーム内のシンタックス要素に基づいて、PU用のイントラ予測モードを決定することができる。
[0144]復元ユニット158は、CUのTUに関連付けられた残差ビデオブロックと、CUのPUの予測ビデオブロックとを使用して、CUのビデオブロックを復元することができる。たとえば、復元ユニット158は、残差ビデオブロックのサンプルを予測ビデオブロック内の対応するサンプルに加算して、CUのY、Cb、およびCrのビデオブロックを復元することができる。
[0145]フィルタユニット159は、デブロッキング動作を実行して、CUに関連付けられたビデオブロック内のブロッキングアーティファクトを低減することができる。復号ピクチャバッファ160は、CUに関連付けられたビデオブロックを記憶することができる。復号ピクチャバッファ160は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示に、参照ピクチャを提供することができる。たとえば、予測処理ユニット152は、復号ピクチャバッファ160内のビデオブロックに基づいて、他のCUのPUに対して、イントラ予測動作またはインター予測動作を実行することができる。
[0146]図4は、本開示の1つまたは複数の技法によるビデオエンコーダ20の例示的な動作200を示すフローチャートである。動作200では、ビデオエンコーダ20は、パラメータセットを含むNALユニットのサイズがMTUサイズよりも大きくなるかどうかを決定し得る(202)。パラメータセットを含むNALユニットのサイズがMTUサイズよりも大きくならないとの決定(202の「いいえ」)に応答して、ビデオエンコーダ20は、パラメータセットを含む単一のNALユニットを生成することができる(204)。
[0147]一方、パラメータセットを含むNALユニットのサイズがMTUサイズよりも大きくなるとの決定(202の「はい」)に応答して、ビデオエンコーダ20は、パラメータセットの断片を含む複数(すなわち、2つ以上)のNALユニットを生成し得る(206)。下記に記載される図5および図6は、パラメータセットの断片を含むNALユニットを解析するための例示的な動作を記載するフローチャートである。ビデオエンコーダ20は、ビデオデコーダ30が図5および図6の例示的な動作に従って断片を解析できるように、断片を生成し得る。
[0148]ビデオエンコーダ20は、一連のNALユニットを含むビットストリームを出力し得る(208)。ビットストリーム内のNALユニットは、アクション204で生成されたNALユニットまたはアクション206で生成された複数のNALユニットを含み得る。このようにして、ビデオエンコーダ20は、その中で少なくともいくつかのNALユニットがパラメータセット全体ではなくパラメータセットの断片を含むビットストリームを生成する。さらに、NALユニットが任意の点でパケットに分割されるシステムとは対照的に、ビデオエンコーダ20は、断片が単独で復号可能であり得るように断片を生成し得る。
[0149]図5は、本開示の1つまたは複数の技法により、パラメータセットのNALユニットを解析するビデオデコーダ30の例示的な動作250を示すフローチャートである。動作250では、ビデオデコーダ30は、パラメータセットのNALユニットを受信し得る(252)。パラメータセットのNALユニットは、SPSのNALユニット、PPSのNALユニット、APSのNALユニット、または別のタイプのパラメータセットを含むNALユニットであり得る。パラメータセットのNALユニットは、完全なパラメータセットまたはパラメータセットの断片を含む場合がある。ビデオデコーダ30は、チャネル16(図1)から、コンピュータ可読記憶媒体から、または別のソースから、パラメータセットのNALユニットを受信し得る。
[0150]ビデオデコーダ30は、パラメータセットのNALユニットからの量子化行列フラグ(quantization_matrix_flag)を解析し得る(254)。量子化行列フラグは、量子化行列がパラメータセット内で指定されたかどうかを示すことができる。ビデオデコーダ30は、パラメータセットのNALユニットが量子化行列を含むことを量子化行列フラグが示すかどうかを決定し得る(256)。
[0151]パラメータセットのNALユニットが量子化行列を含むことを量子化行列フラグが示すとの決定(256の「はい」)に応答して、ビデオデコーダ30は、パラメータセットのNALユニットからの量子化行列インジケータ(quantization_matrix_idc)と量子化行列オンリーフラグ(qm_fragment_only_aps_flag)とを解析し得る(258)。ビデオデコーダ30は、パラメータセットのNALユニットが量子化行列を含むだけであることを量子化行列オンリーフラグが示すかどうかを決定し得る(260)。パラメータセットのNALユニットが量子化行列を含むだけではないことを量子化行列オンリーフラグが示すとの決定(260の「いいえ」)に応答して、またはパラメータセットのNALユニットが量子化行列を含むことを量子化行列フラグが示すとの決定(256の「いいえ」)に応答して、ビデオデコーダ30は、パラメータセットのNALユニットからの他のシンタックス要素を解析し得る(262)。
[0152]パラメータセットのNALユニットが量子化行列を含むだけであることを量子化行列オンリーフラグが示すとの決定(260の「はい」)に応答して、またはアクション262でビデオデコーダ30が他のシンタックス要素を解析する場合、ビデオデコーダ30は、パラメータセットのNALユニットが量子化行列を含むことを量子化行列フラグが示すかどうかを決定し得る(264)。パラメータセットのNALユニットが量子化行列を含むことを量子化行列フラグが示すとの決定(264の「はい」)に応答して、ビデオデコーダ30は、パラメータセットのNALユニットからの量子化行列テーブルを解析し得る(266)。ビデオデコーダ30は、図6の例示的な動作に従って量子化行列テーブルを解析し得る。パラメータセットのNALユニットが量子化行列を含まないことを量子化行列フラグが示すとの決定(264の「いいえ」)に応答して、または量子化行列テーブルを解析した後、ビデオデコーダ30は、パラメータセットのNALユニットを解析することを終了することができる。
[0153]図6は、本開示の1つまたは複数の技法により、パラメータセットのNALユニット内の量子化行列テーブルを解析するビデオデコーダ30の例示的な動作300を示すフローチャートである。動作300では、ビデオデコーダ30は、パラメータセットのNALユニットからの再利用フラグ(reuse_qm_tabe_flag)を解析し得る(302)。次いで、ビデオデコーダ30は、ビデオデコーダ30が参照パラメータセットの量子化行列テーブルを現在のパラメータセットの量子化行列テーブルとして再利用することを再利用フラグが示すかどうかを決定し得る(304)。ビデオデコーダ30が参照パラメータセットの量子化行列テーブルを現在のパラメータセットの量子化行列テーブルとして再利用することを再利用フラグが示すとの決定(304の「はい」)に応答して、ビデオデコーダ30は、量子化行列テーブルからの再利用パラメータセット識別子(reused_aps_id)を解析し得る(306)。ビデオデコーダ30は、現在のパラメータセットの量子化行列テーブルとして、再利用パラメータセット識別子によって指定された識別子を有するパラメータセットによって指定された量子化行列テーブルを使用し得る。
[0154]一方、ビデオデコーダ30が参照パラメータセットの量子化行列テーブルを現在のパラメータセットの量子化行列テーブルとして再利用しないことを再利用フラグが示すとの決定(304の「いいえ」)に応答して、ビデオデコーダ30は、量子化行列テーブルからの断片フラグ(fragment_flag)を解析し得る(308)。断片フラグは、量子化行列テーブルが現在のパラメータセットの量子化行列のすべてを含むかどうかを示し得る。ビデオデコーダ30は、量子化行列テーブルが現在のパラメータセットのすべての量子化行列を含むことを断片フラグが示すかどうかを決定し得る(310)。
[0155]量子化行列テーブルが現在のパラメータセットのすべての量子化行列を含まないことを断片フラグが示すとの決定(310の「いいえ」)に応答して、ビデオデコーダ30は、量子化テーブル内の量子化行列の数を示すシンタックス要素(num_ref_aps_for_qm)を量子化テーブルから解析し得る(312)。量子化行列テーブルが現在のパラメータセットのすべての量子化行列を含むわけではないことを断片フラグが示す場合、NALユニットは、完全なパラメータセットではなく、現在のパラメータセットの断片を含み得る。
[0156]量子化行列テーブルが現在のパラメータセットのすべての量子化行列を含むことを断片フラグが示すかどうかにかかわらず、ビデオデコーダ30は、量子化行列インジケータが相互依存予測タイプを示すかどうかを決定し得る(314)。相互依存予測タイプでは、ビデオデコーダ30は、量子化行列内から、同じパラメータセットのNALユニット内の他の量子化行列から、同じパラメータセットの異なるNALユニットからの他の量子化行列から、および異なるパラメータセット内の他の量子化行列から、量子化行列を決定し得る。
[0157]量子化行列インジケータが相互依存予測タイプを示すとの決定(314の「はい」)に応答して、ビデオデコーダ30は、参照パラメータセットの数を示すシンタックス要素(num_ref_aps_for_qm)を量子化テーブルから解析し得る(316)。加えて、ビデオデコーダ30は、参照パラメータセットごとの識別子(ref_aps_id[i])を量子化テーブルから解析し得る(318)。
[0158]量子化行列インジケータが相互依存予測タイプを示さないとの決定(314の「いいえ」)に応答して、またはアクション316とアクション318とを実行した後、ビデオデコーダ30は、カウンタを0に初期化し、カウンタが量子化行列テーブル内の量子化行列の数よりも小さいかどうかを決定し得る(320)。カウンタが量子化行列テーブル内の量子化行列の数よりも小さいとの決定(320の「はい」)に応答して、ビデオデコーダ30は、量子化行列テーブルからの現在の量子化行列用の量子化行列識別子(quan_matrix_id[i])を解析し得る(322)。現在の量子化行列は、カウンタの現在値に関連付けられた量子化行列テーブル内の位置にある量子化行列であり得る。加えて、ビデオデコーダ30は、行列内予測だけが許可される(すなわち、quantization_matrix_idc=0)ことを量子化行列インジケータが示すかどうかを決定し得る(324)。ビデオデコーダ30が行列内予測を実行するとき、ビデオデコーダ30は、量子化行列の値のサブセットに基づいて、量子化行列を決定し得る。
[0159]行列内予測だけが許可されることを量子化行列インジケータが示さないとの決定(324の「いいえ」)に応答して、ビデオデコーダ30は、現在の量子化行列の予測モードを示すシンタックス要素(qm_prediction_mode)を量子化行列テーブルから解析し得る(326)。行列内予測だけが許可されることを量子化行列インジケータが示すとの決定(324の「はい」)に応答して、またはアクション326でシンタックス要素を解析した後、ビデオデコーダ30は、現在の量子化行列が参照パラメータセットから予測される(たとえば、qm_prediction_mode==3)かどうかを決定し得る(328)。現在の量子化行列が参照パラメータセットから予測されるとの決定定(328の「はい」)に応答して、ビデオデコーダ30は、参照ピクチャセットの識別子(ref_aps_idx)を量子化行列テーブルから解析し得る(330)。
[0160]現在の量子化行列が参照パラメータセットから予測されないとの決定(328の「いいえ」)に応答して、またはアクション330で識別子を解析した後、ビデオデコーダ30は、行列内予測が現在の量子化行列に許可された(たとえば、qm_prediction_mode>0)かどうかを決定し得る(332)。行列内予測が現在の量子化行列に許可されないとの決定(332の「いいえ」)に応答して、ビデオデコーダ30は、現在の量子化行列の識別子(qm_id[i])を量子化行列テーブルから解析し得る(334)。加えて、ビデオデコーダ30は、スキップフラグを量子化行列テーブルから解析し得る(336)。
[0161]スキップフラグを解析した後、または行列内予測が許可されるとの決定(332の「はい」)後、ビデオデコーダ30は、係数が現在の量子化行列用の量子化行列テーブル内でシグナリングされたことをスキップフラグが示すかどうかを決定し得る(338)。スキップフラグが存在せず、したがって量子化行列テーブルから解析されない場合、ビデオデコーダ30は、スキップフラグが0に等しいと推論することができる。係数が現在の量子化行列用の量子化行列テーブル内でシグナリングされたとの決定(338の「はい」)に応答して、ビデオデコーダ30は、現在の量子化行列の係数を量子化行列テーブルから解析し得る(340)。
[0162]現在の量子化行列用の係数を解析した後、または係数が現在の量子化行列用の量子化行列テーブル内でシグナリングされないとの決定(338の「いいえ」)に応答して、ビデオデコーダ30は、カウンタを増分し、カウンタが量子化行列テーブル内の量子化行列の数よりも小さいかどうかを再び決定し得る(320)。このようにして、ビデオデコーダ30は、量子化行列テーブル内の量子化行列の各々に対して、アクション322〜340を実行し得る。どの予測タイプを量子化行列に使用するか選択することによって、ビデオエンコーダ20は、そうするように構成された場合、ビデオデコーダ30がパラメータセットの断片を別個に復号できることを保証することができる。
[0163]1つまたは複数の例では、記載された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せに実装することができる。ソフトウェアに実装される場合、機能は、1つもしくは複数の命令もしくはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行することができる。コンピュータ可読媒体は、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む、データ記憶媒体または通信媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含むことができる。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応することができる。データ記憶媒体は、本開示に記載された技法を実装するための命令、コードおよび/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスできる、任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含むことができる。
[0164]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0165]命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)などの1つもしくは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路によって実行することができる。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書に記載された技法の実装に適した他の構造のいずれかを指すことができる。さらに、いくつかの態様では、本明細書に記載された機能は、符号化および復号のために構成された専用のハードウェアおよび/もしくはソフトウェアのモジュール内に提供され、または複合コーデックに組み込むことができる。また、本技法は、1つまたは複数の回路または論理要素に完全に実装することができる。
[0166]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置に実装することができる。開示された技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示に記載されたが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上述されたように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとともに、上述された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニット内で組み合わされるか、または相互動作可能なハードウェアユニットの集合によって提供される場合がある。
[0167]様々な例が記載された。これらおよび他の例は、以下の特許請求の範囲内に入る。