[0035]概して、本出願は、マルチビュービデオコーディング(たとえば、3次元ビデオコーディング)における視差ベクトルを決定するための技術を説明する。マルチビュービデオコーディングでは、様々なビューのビデオコンテンツは、様々な視点を表す場合がある。たとえば、第1のビュー中のピクチャ中のビデオブロックは、第2のビュー中のピクチャ中のビデオブロックと同様のビデオコンテンツを含み得る。この例では、第1のビュー中のピクチャ中のビデオブロックの位置および第2のビュー中のピクチャ中のビデオブロックの位置は、異なる場合がある。たとえば、異なるビュー中のビデオブロックの位置の間に何らかの変位(すなわち、視差)が存在する場合がある。マルチビュービデオコーディングでは、異なるビューから再構成されたビューコンポーネントに基づくビュー間予測が有効にされ得る。ビュー間予測は、ビデオの同じ時間インスタンスを表す各ビューのピクチャが同様のビデオコンテンツを含み得るという事実を活用することによって、コーディング利得を実現することができる。
[0036]現在ピクチャのビデオブロックがビュー間予測を使用してコーディングされるとき、そのブロックは、ビュー間参照ピクチャ中の位置を示す動きベクトルを有し得る。ビュー間参照ピクチャは、現在ピクチャと同じ時間インスタンス中にある(すなわち、関連付けられている)が、現在ピクチャとは異なるビュー中にある(すなわち、関連付けられている)参照ピクチャであり得る。ブロックの動きベクトルがビュー間参照ピクチャ中の位置を示す場合、動きベクトルは視差動きベクトルと呼ばれる場合がある。ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、現在ブロックについての予測ブロックを決定するために、現在ブロックの視差動きベクトルを使用することができる。ビデオコーダがビデオエンコーダである場合、ビデオコーダは、現在ブロックについての残差データを生成するために、現在ブロックについての予測ブロックを使用することができる。ビデオコーダがビデオデコーダである場合、ビデオコーダは、現在ビデオブロックについてのサンプル値を再構成するために、現在ブロックについての予測ブロックと現在ブロックについての残差データとを使用することができる。
[0037]さらに、特定のピクチャ中のブロックは、ビュー間参照ピクチャ中の対応するブロックの動き情報または残差データと同様である動き情報または残差データを有し得る。したがって、ビデオコーダは、ビュー間参照ピクチャ中の対応するブロックの動き情報または残差データに基づいて、現在ピクチャ中の現在ブロックの動き情報または残差データを予測することができる。ビデオコーダは、ビュー間参照ピクチャ中の対応するブロックの位置を決定するために、現在ブロックについての視差ベクトルを決定することができる。ビデオコーダは、現在ブロックが視差動きベクトルを有するかどうかにかかわらず、ビュー間参照ピクチャ中の対応するブロックの動き情報または残差データに基づいて、現在ブロックの動き情報または残差データを予測することができる。したがって、ビュー間参照ピクチャ中の対応するブロックの動き情報または残差データに基づいて、現在ブロックの動き情報または残差データが予測される場合、現在ブロックは視差ベクトルを有すると考えられる。後でコーディングされるブロックの視差ベクトル導出プロセスのために視差ベクトルが使用されるとき、視差ベクトルは、暗黙的視差ベクトル(IDV:implicit disparity vector)と呼ばれる場合がある。現在ブロックについての視差ベクトルは、以前のブロックのうちの1つのブロックについての視差ベクトルに等しい場合がある。
[0038]ビデオコーダは、現在ブロックについての視差ベクトルを導出するために、隣接ブロックベースの視差ベクトル(NBDV)導出プロセスを使用することができる。NBDV導出プロセスでは、ビデオコーダは、現在ブロックに隣接するブロックをチェックすることができる。隣接ブロックは、空間的隣接ブロックと時間的隣接ブロックとを含み得る。空間的隣接ブロックは、現在ブロックと同じピクチャ(すなわち、現在ピクチャ)中にある。時間的隣接ブロックは、現在ピクチャ以外の1つまたは複数のピクチャ中にある。ビデオコーダが隣接ブロックをチェックするとき、ビデオコーダは、隣接ブロックが視差動きベクトルを有するかどうかを決定することができる。隣接ブロックのうちの1つが視差動きベクトルを有するとビデオコーダが決定したとき、ビデオコーダは、隣接ブロックのチェックを停止することができ、隣接ブロックの視差動きベクトルを現在ブロックについての視差ベクトルに変換することができる。さらに、隣接ブロックのいずれも視差動きベクトルを有さない場合、ビデオコーダは、空間的隣接ブロックのいずれかがIDVを有するかどうかを決定することができる。空間的隣接ブロックのうちの1つがIDVを有するとビデオコーダが決定したとき、ビデオコーダは、隣接ブロックのチェックを停止することができ、隣接ブロックのIDVを現在ブロックについての視差ベクトルに変換することができる。
[0039]NBDV導出プロセスにおけるIDVの使用は、記憶要件およびメモリアクセスの回数の著しい増加を必要とし得る。この問題および他の問題に対処するために、導出された視差ベクトル(DDV)の使用が提案された。少なくともいくつかのそのような提案では、スライスについて単一のDDVが記憶される。ビデオコーダは、ブロックの時間的または空間的隣接ブロックのいずれも視差動きベクトルを有さないとき、ブロックの視差ベクトルをスライスについてのDDVに設定することができる。ブロックをコーディングした後、ビデオコーダは、スライスについてのDDVをブロックの視差ベクトルに更新することができる。このようにして、スライスについてのDDVは、コーディング(たとえば、復号)順序で更新され得る。したがって、次のブロックをコーディングするために使用されるDDVは、以前のブロックに関して決定された視差ベクトルに依存し得る。
[0040]この依存性はいくつかの問題を引き起こす可能性がある。たとえば、いくつかのビデオコーディング規格(たとえば、H.264/AVC)では、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)エントロピーコーディングが使用される場合、何らかのタイプのデコーダは、特定の遅延を伴って、複数のマクロブロック行を並列に復号することが可能であり得る。この例では、スライスについてのDDVをコーディング順序で更新することは、デコーダが複数のマクロブロック行を並列に復号することを妨げる可能性がある。別の例では、いくつかのビデオコーディング規格(たとえば、高効率ビデオコーディング)で波面並列処理(WPP)が有効にされるとき、コーディングユニット(CU)は、以前のコーディングツリーブロック(CTB)行中の最後のCUに依存すべきではない。スライスについてのDDVをコーディング順序(たとえば、ラスタ走査順序)で更新することは、以前のCTB行中のCUへの依存を生み出す可能性がある。別の例では、ブロックが現在の行の現在ブロックから水平方向に遠方にある場合、以前の行のブロック(たとえば、CU)から導出されたDDVを使用することはあまり効率的でない可能性がある。スライスに関するDDVをコーディング順序で更新することは、結果として、現在ブロックから水平方向に遠方にあるブロックから導出されたDDVの使用をもたらし得る。
[0041]本開示で説明する技法のうちの1つまたは複数は、上述の問題のうちの1つまたは複数に対処し得る。たとえば、ビデオコーダは、ビデオデータのピクチャのスライスの各それぞれのブロック(たとえば、CU、マクロブロックなど)に関して次のアクションを実行することができる。それぞれのブロックがピクチャのブロック行(たとえば、CTB行、マクロブロック行など)の第1のブロックであるか、またはそれぞれのブロックがスライスの第1のブロックであると決定することに応答して、ビデオコーダは、DDVを初期値(たとえば、ゼロ)に設定することができる。さらに、ビデオコーダは、それぞれのブロックについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。NBDVプロセスを実行することがそれぞれのブロックについて利用可能な視差ベクトルを識別しないとき、ビデオコーダは、それぞれのブロックについての視差ベクトルがDDVに等しいと決定することができる。いくつかの例では、ビデオコーダは、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックの符号化された表現を生成することができる。さらに、いくつかの例では、ビデオコーダは、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックを再構成することができる。
[0042]図1は、本開示の技法を利用できる例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用する「ビデオコーダ」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指すことがある。
[0043]図1に示すように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は符号化ビデオデータを生成する。したがって、ソースデバイス12はビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14はソースデバイス12によって生成された符号化ビデオデータを復号することができる。したがって、宛先デバイス14はビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0044]ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備え得る。
[0045]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化ビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化ビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備えることができる。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化ビデオデータを変調し得、変調されたビデオデータを宛先デバイス14に送信し得る。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などのワイヤレスおよび/または有線の通信媒体を含む場合がある。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などのパケットベースネットワークの一部を形成する場合がある。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にする、ルータ、スイッチ、基地局、または他の機器を含む場合がある。
[0046]別の例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して、記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化ビデオデータを記憶するための他の適切なデジタル記憶媒体など、種々のローカルにアクセスされるデータ記憶媒体を含み得る。
[0047]さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶するファイルサーバまたは別の中間ストレージデバイスを含み得る。この例では、宛先デバイス14は、(たとえば、ストリーミングまたはダウンロードを介して)ファイルサーバまたは他の中間ストレージデバイスに記憶された符号化ビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶することと、符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイト用の)ウェブサーバと、ハイパーテキスト転送プロトコル(HTTP)ストリーミングサーバと、ファイル転送プロトコル(FTP)サーバと、ネットワーク接続ストレージ(NAS)デバイスと、ローカルディスクドライブとを含む。
[0048]宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化ビデオデータにアクセスし得る。データ接続の例示的なタイプとしては、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに好適な、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せがあり得る。ファイルサーバからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
[0049]本開示の技法は、ワイヤレス適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
[0050]図1は一例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含むとは限らないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データ(たとえば、ビデオデータ)がローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータ(たとえば、ビデオデータ)を符号化し、メモリに記憶し得、および/またはビデオ復号デバイスはメモリからデータ(たとえば、ビデオデータ)を取り出し、復号し得る。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータ(たとえば、ビデオデータ)を符号化し、かつ/またはメモリからデータを取り出して復号するだけであるデバイスによって実行される。
[0051]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含む場合がある。ビデオソース18は、たとえばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/またはビデオデータを生成するためのコンピュータグラフィックスシステム、あるいはビデオデータのそのようなソースの組合せを含み得る。
[0052]ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化することができる。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化ビデオデータを直接送信する。他の例では、符号化ビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために記憶媒体またはファイルサーバ上に記憶され得る。
[0053]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して符号化ビデオデータを受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化され得るかまたはその外部にあり得る。概して、ディスプレイデバイス32は、復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備える場合がある。
[0054]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェアなど、様々な好適な回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。本技法が部分的にソフトウェアで実装される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェアの命令を記憶し得、1つまたは複数のプロセッサを使用してその命令をハードウェアで実行して、本開示の技法を実行し得る。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれも、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれる場合があり、両者のいずれかがそれぞれのデバイス内の複合エンコーダ/デコーダ(CODEC)の一部として組み込まれる場合がある。
[0055]本開示は、概して、ビデオエンコーダ20が、ある情報をビデオデコーダ30などの別のデバイスに「シグナリング」することに言及する場合がある。「シグナリング」という用語は、概して、圧縮ビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指し得る。そのような通信は、リアルタイムまたはほぼリアルタイムに起こり得る。代替的に、そのような通信は、符号化の時に符号化されたビットストリームの中でシンタックス要素をコンピュータ可読記憶媒体、たとえば、ファイルサーバもしくはストリーミングサーバを介して遠隔的にアクセス可能な記憶媒体、または局所的にアクセス可能な記憶デバイスなどに記憶するときに発生し得るなど、ある時間の長さにわたって発生することがあり、これらの要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
[0056]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、そのスケーラブルビデオコーディング(SVC)拡張、マルチビュービデオコーディング(MVC)拡張、およびMVCベースの3DV拡張を含む、ISO/IEC MPEG−4 Visualおよび(ISO/IEC MPEG−4 AVCとしても知られる)ITU−T H.264などのビデオ圧縮規格に従って動作する。H.264/AVCのMVC拡張の共同草案は、「Advanced video coding for generic audio visual services」、ITU−T勧告H.264、2010年3月に記載されている。さらに、H.264/AVCに対する3次元ビデオ(3DV)コーディング拡張、すなわちAVCベースの3DVを生成する作業が進行中である。他の例では、ビデオエンコーダ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、およびITU−T H.264、ISO/IEC Visualに従って動作し得る。
[0057]いくつかの例(たとえば、図1の例)では、ビデオエンコーダ20およびビデオデコーダ30は、ITU−Tビデオコーディングエキスパートグループ(VCEG:Video Coding Experts Group)とISO/IECモーションピクチャエキスパーツグループ(MPEG:Motion Picture Experts Group)とのビデオコーディング共同研究部会(JCT−VC:Joint Collaboration Team on Video Coding)によって開発された高効率ビデオコーディング(HEVC)規格に従って動作し得る。「HEVC Working Draft 10」と呼ばれるHEVC規格のドラフトは、Brossらの「High Efficiency Video Coding(HEVC)text specification draft 10」、ITU−T SG16 WP3およびISO/IEC JTC1/SC29/WG11のビデオコーディング共同研究部会(JCT−VC:Joint Collaborative Team on Video Coding)、第12回会議、ジュネーブ、スイス、2013年1月、に記載されている。少なくとも2014年5月9日時点で、HEVC作業草案10は、http://phenix.it−sudparis.eu/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC−L1003−v34.zipからダウンロード可能である。
[0058]さらに、HEVC向けのスケーラブルビデオコーディング拡張、マルチビューコーディング拡張、および3DV拡張を製作する作業が進行中である。HEVCのSVC拡張は、SHEVCと呼ばれる場合がある。HEVCの3DV拡張はHEVCベースの3DVまたは3D−HEVCと呼ばれることがある。3D−HEVCは、Schwarzら、「Description of 3D Video Coding Technology Proposal by Fraunhofer HHI(HEVC対応構成A)、ISO/IEC JTC1/SC29/WG11、文書MPEG11/M22570、ジュネーブ、スイス、2011年11月/12月、以下、「m22570」、およびSchwarzら、「Description of 3D Video Coding Technology Proposal by Fraunhofer HHI(HEVC対応構成B)、ISO/IEC JTC1/SC29/WG11、文書MPEG11/M22571、ジュネーブ、スイス、2011年11月/12月、以下、「m22571」で提案された解決策に少なくとも部分的に基づく。3D−HEVCの参照ソフトウェアの記述は、Schwarzら、「Test Model under Consideration for HEVC based 3D video coding」、ISO/IEC JTC1/SC29/WG11 MPEG2011/N12559、サンノゼ、米国、2012年2月において入手可能である。参照ソフトウェア、すなわち、HTMバージョン3.0は、少なくとも2014年5月9日現在、https://hevc.hhi.fraunhofer.de/svn/svn_3DVCSoftware/tags/HTM−3.0/から利用可能である。
[0059]H.264/AVC、HEVC、および他のビデオコーディング規格では、ビデオシーケンスは一般に一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCb、およびSCrと示される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれることもある。他の例では、ピクチャは、モノクロームであり得、ルーマサンプルのアレイのみを含み得る。
[0060]H.264/AVCでは、各ピクチャはマクロブロック(MB)のセットに区分され得る。マクロブロックは、3つのサンプルアレイを有するピクチャのルーマサンプルの16×16ブロックおよびクロマサンプルの2つの対応するブロック、またはモノクロームピクチャもしくは3つの個別のカラープレーンを使用してコーディングされるピクチャのサンプルの16×16ブロックである。
[0061]ビデオエンコーダ20は、インター予測子またはイントラ予測を使用してマクロブロックを符号化することができる。ビデオエンコーダ20がインター予測を使用してマクロブロックを符号化するとき、ビデオエンコーダ20は、現在ピクチャ以外の1つまたは複数のピクチャ(すなわち、マクロブロックを含んでいるピクチャ)のサンプルに基づいて、マクロブロックについての1つまたは複数の予測ブロックを生成する。インター予測を使用して符号化されたマクロブロックは、インターマクロブロックと呼ばれる場合がある。ビデオエンコーダ20がイントラ予測を使用してマクロブロックを符号化するとき、ビデオエンコーダ20は、現在ピクチャ中のサンプルに基づいて、マクロブロックについての1つまたは複数の予測ブロックを生成する。イントラ予測を使用して符号化されたマクロブロックは、イントラマクロブロックと呼ばれる場合がある。
[0062]H.264/AVCにおいて、各インターマクロブロックは、4つの異なる方式で区分され得る。
・1つの16×16マクロブロック区分
・2つの16×8マクロブロック区分
・2つの8×16マクロブロック区分
・4つの8×8マクロブロック区分
[0063]1つのMB中の異なるマクロブロック(MB)区分は、方向ごとに異なる参照インデックス値(すなわち、RefPicList0またはRefPicList1)を有し得る。参照インデックス値は、参照ピクチャリスト内の参照ピクチャを示す値であり得る。MBが4つの8×8MB区分に区分されないとき、MBはMB区分全体について各方向に1つの動きベクトルしか有し得ない。
[0064]MBが、4つの8×8MB区分に区分されるとき、各8×8MB区分はサブブロックにさらに区分され得る。8×8MB区分からサブブロックを得るための4つの異なる方式が存在する。
・1個の8×8サブブロック
・2個の8×4サブブロック
・2個の4×8サブブロック
・4個の4×4サブブロック
各サブブロックは、各方向に異なる動きベクトルを有し得る。8×8MB区分の区分は、サブブロック区分と呼ばれる。
[0065]上述のように、マルチビューコーディング(MVC)は、H.264/AVCの拡張である。マルチビューコーディングでは、異なる視点からの同じシーンの複数のビューがあり得る。「アクセスユニット」という用語は、同じ時間インスタンスに対応するピクチャのセットを指すために使用され得る。したがって、ビデオデータは、時間とともに生じる一連のアクセスユニットとして概念化され得る。「ビューコンポーネント」は、単一のアクセスユニット中のビューのコード化表現であり得る。本開示では、「ビュー」は、同じビュー識別子に関連付けられたビューコンポーネントのシーケンスを指すことがある。
[0066]図2は、例示的なマルチビュー復号順序を示す概念図である。マルチビュー復号順序はビットストリーム順序であり得る。図2の例では、各正方形がビューコンポーネントに対応する。正方形の列は、アクセスユニットに対応する。各アクセスユニットは、時間インスタンスのすべてのビューのコード化ピクチャを含むように定義され得る。正方形の行は、ビューに対応する。図2の例では、アクセスユニットがT0...T8とラベル付けされ、ビューがS0〜S7とラベル付けされる。アクセスユニットの各ビューコンポーネントは次のアクセスユニットのビューコンポーネントの前に復号されるので、図2の復号順序はタイムファーストコーディングと呼ばれることがある。アクセスユニットの復号順序は、ビューの出力または表示の順序と同一ではないことがある。
[0067]より具体的には、テクスチャビューコンポーネント(すなわち、テクスチャピクチャ)は、単一のアクセスユニット中のビューのテクスチャのコード化表現であり得る。テクスチャビューコンポーネントは、表示されるべき実際の画像コンテンツを含む。たとえば、テクスチャビューコンポーネントは、ルーマ(たとえば、Y)成分と、クロマ(たとえば、CbおよびCr)成分とを含み得る。テクスチャビューは、ビュー順序インデックスの同一の値に関連付けられるテクスチャビューコンポーネントのシーケンスであり得る。ビューのビュー順序インデックスは、他のビューに対するビューのカメラ位置を示すことができる。
[0068]本開示の技法のうちの1つまたは複数は、テクスチャデータと深度データとをコーディングすることによって3Dビデオデータをコーディングすることに関する。概して、「テクスチャ」という用語は、画像のルミナンス(すなわち、輝度または「ルーマ」)値と画像のクロミナンス(すなわち、色または「クロマ」)値とを表すために使用される。いくつかの例では、テクスチャ画像は、1セットのルミナンスデータと、青色相(Cb)および赤色相(Cr)のための2セットのクロミナンスデータとを含み得る。4:2:2または4:2:0などの特定のクロマサンプリングフォーマットでは、クロマデータは、ルーマデータに関してダウンサンプリングされる。すなわち、クロミナンスピクセルの空間解像度は、対応するルミナンスピクセルの空間解像度よりも低く、たとえば、ルミナンス解像度の1/2または1/4であり得る。
[0069]深度ビューコンポーネント(すなわち、深度ピクチャ)は、単一のアクセスユニット中のビューの深度のコード化表現であり得る。深度ビューは、ビュー順序インデックスの同一の値に関連付けられる深度ビューコンポーネントのシーケンスであり得る。深度ビューコンポーネントは、その対応するテクスチャビューコンポーネント中のピクセルの相対深度を示し得る。一例として、深度ビューコンポーネントは、ルーマ値のみを含むグレースケール画像である。言い換えると、深度ビューコンポーネントは、任意の画像コンテンツを伝達するのではなく、テクスチャビューコンポーネント中のピクセルの相対深度の測定値を提供し得る。
[0070]いくつかの例において、深度ビューコンポーネント中の純白のピクセルは、対応するテクスチャビューコンポーネント中のその対応する1つまたは複数のピクセルがビューアから見てより近いことを示し、深度ビューコンポーネント中の純黒のピクセルは、対応するテクスチャビューコンポーネント中のその対応する1つまたは複数のピクセルがビューアから見てより遠いことを示す。黒と白との中間にあるグレーの様々な色合いは、様々な深度レベルを示す。たとえば、深度ビューコンポーネント中の濃いグレーのピクセルは、テクスチャビューコンポーネント中の対応するピクセルが、深度ビューコンポーネント中の薄いグレーのピクセルよりもさらに遠いことを示し得る。ピクセルの深度を識別するためにグレースケールのみが必要とされるので、深度ビューコンポーネント用の色値がいかなる目的も果たし得ないことから、深度ビューコンポーネントはクロマ成分を含む必要がない。深度を識別するためにルーマ値(たとえば、強度値)のみを使用する深度ビューコンポーネントは、説明のために提供され、限定するものと見なされるべきではない。他の例では、テクスチャビューコンポーネント中のピクセルの相対深度を示すために任意の技法が利用される場合がある。
[0071]深度データは、一般に、対応するテクスチャデータについての深度値を記述する。たとえば、深度画像は、各々が対応するテクスチャデータについての深度を記述する深度ピクセルのセットを含む場合がある。深度データは、対応するテクスチャデータについての水平視差を決定するために使用され得る。したがって、テクスチャデータと深度データとを受信するデバイスは、一方のビュー(たとえば、左眼ビュー)のための第1のテクスチャ画像を表示し、深度値に基づいて決定された水平視差値だけ第1の画像のピクセル値をオフセットする(ずらす)ことによって、他方のビュー(たとえば、右眼ビュー)のための第2のテクスチャ画像を生成するように第1のテクスチャ画像を修正するために、深度データを使用することができる。一般に、水平視差(または単に「視差」)は、第1のビュー中のピクセルの第2のビュー中の対応するピクセルに対する水平空間オフセットを記述し、ここで、2つのピクセルは、2つのビュー中で表される同じオブジェクトの同じ部分に対応する。
[0072]さらに他の例では、画像プレーンに直交するz次元におけるピクセルについて深度データが定義され得、その結果、画像について定義されたゼロ視差プレーンに対して、所与のピクセルに関連付けられた深度が定義される。そのような深度は、ピクセルを表示するための水平視差を作成するために使用され得、その結果、ピクセルは、ゼロ視差プレーンに対するピクセルのz次元深度値に応じて、左眼と右眼で異なるように表示される。ゼロ視差プレーンはビデオシーケンスの異なる部分に対して変化する場合があり、ゼロ視差プレーンに対する深度の量も変化する場合がある。ゼロ視差プレーン上に位置するピクセルは、左眼および右眼に対して同様に定義され得る。ゼロ視差プレーンの前に位置するピクセルは、ピクセルが画像プレーンに直交するz方向の画像から出てくるように見える知覚を作成するように、(たとえば、水平視差を用いて)左眼と右眼に対して異なる位置で表示され得る。ゼロ視差プレーンの後に位置するピクセルは、深度のわずかな知覚を提示するために、わずかなぼかしとともに表示され得るか、または(たとえば、ゼロ視差プレーンの前に位置するピクセルの水平視差とは反対の水平視差を用いて)左眼と右眼に対して異なる位置で表示され得る。画像用の深度データを伝達または定義するために、他の多くの技法が使用される場合もある。
[0073]深度ビューコンポーネント中のピクセルごとに、テクスチャビューコンポーネント中の1つまたは複数の対応するピクセルがあり得る。たとえば、深度ビューコンポーネントの空間解像度とテクスチャビューコンポーネントの空間解像度が同じである場合、深度ビューコンポーネント中の各ピクセルは、テクスチャビューコンポーネント中の1つのピクセルに対応する。深度ビューコンポーネントの空間解像度がテクスチャビューコンポーネントの空間解像度よりも小さい場合、深度ビューコンポーネント中の各ピクセルは、テクスチャビューコンポーネント中の複数のピクセルに対応する。深度ビューコンポーネント中のピクセルの値は、テクスチャビュー中の対応する1つまたは複数のピクセルの相対深度を示すことができる。
[0074]いくつかの例では、ビデオエンコーダ20は、ビューの各々についてのテクスチャビューコンポーネントおよび対応する深度ビューコンポーネントについてのビデオデータをシグナリングする。ビデオデコーダ30は、表示のためにビューのビデオコンテンツを復号するために、テクスチャビューコンポーネントと深度ビューコンポーネントとの両方のビデオデータを利用することができる。次いで、ディスプレイは、3Dビデオを生成するためにマルチビュービデオを表示する。
[0075]図2に戻ると、ビューの各々はピクチャのセットを含む。たとえば、ビューS0は、ピクチャ0、8、16、24、32、40、48、56、および64のセットを含み、ビューS1は、ピクチャ1、9、17、25、33、41、49、57、および65のセットを含み、以下同様である。各セットは2つのピクチャを含み、一方のピクチャはテクスチャビューコンポーネントと呼ばれ、他方のピクチャは深度ビューコンポーネントと呼ばれる。ビューのピクチャのセット内のテクスチャビューコンポーネントおよび深度ビューコンポーネントは、互いに対応するものと見なされる場合がある。たとえば、ビューのピクチャのセット内のテクスチャビューコンポーネントは、そのビューのピクチャのセット内の深度ビューコンポーネントに対応すると見なされ、その逆も同様である(すなわち、深度ビューコンポーネントはセット中のそのテクスチャビューコンポーネントに対応し、その逆も同様である)。本開示で使用する、深度ビューコンポーネントに対応するテクスチャビューコンポーネントは、単一のアクセスユニットの同じビューの一部であるテクスチャビューコンポーネントおよび深度ビューコンポーネントと見なされる場合がある。
[0076]マルチビューコーディングはビュー間予測をサポートすることができる。ビュー間予測は、H.264/AVC、HEVC、または他のビデオコーディング規格において使用されるインター予測と同様であり、同じシンタックス要素を使用し得る。しかしながら、ビデオコーダが(マクロブロックのような)現在ビデオユニットに対してビュー間予測を実行するとき、ビデオコーダは、参照ピクチャとして、現在ビデオユニットと同じアクセスユニットの中にあるが、異なるビューの中にあるピクチャを使用することができる。対照的に、従来のインター予測は、参照ピクチャとして異なるアクセスユニット中のピクチャのみを使用する。
[0077]マルチビューコーディングでは、ビデオデコーダ(たとえば、ビデオデコーダ30)が、あるビュー中のピクチャを任意の他のビュー中のピクチャを参照せずに復号することができる場合、そのビューは「ベースビュー」と呼ばれることがある。非ベースビュー(すなわち、独立ビュー)のうちの1つの中のピクチャをコーディングするとき、ピクチャが、異なるビュー中にあるがビデオコーダが現在コーディング中のピクチャと同じ時間インスタンス(すなわち、アクセスユニット)内にある場合、ビデオコーダ(ビデオエンコーダ20またはビデオデコーダ30など)は、参照ピクチャリスト(たとえば、RefPicList0またはRefPicList1)にピクチャを追加し得る。他のインター予測参照ピクチャと同様に、ビデオコーダは、参照ピクチャリストの任意の位置にビュー間予測参照ピクチャを挿入し得る。
[0078]図3は、マルチビューコーディングのための例示的な予測構造を示す概念図である。図3のマルチビュー予測構造は、時間的予測とビュー間予測とを含む。図3の例では、各正方形がビューコンポーネントに対応する。「I」と標示される正方形は、イントラ予測されたビューコンポーネントである。「P」と標示される正方形は、単方向インター予測されたビューコンポーネントである。「B」および「b」と標示される正方形は、双方向インター予測されたビューコンポーネントである。「b」と標示される正方形は、「B」と標示される正方形を参照ピクチャとして使用することができる。第1の正方形から第2の正方形を指す矢印は、第1の正方形が、インター予測において、第2の正方形のための参照ピクチャとして利用可能であることを示す。図3の垂直の矢印によって示されたように、同じアクセスユニットの異なるビュー中のビューコンポーネントは、参照ピクチャとして利用可能であり得る。アクセスユニットの1つのビューコンポーネントを同じアクセスユニットの別のビューコンポーネントのための参照ピクチャとして使用することは、ビュー間予測と呼ばれる場合がある。したがって、図3にマルチビュービデオコーディング用の典型的なMVC予測(各ビュー内のピクチャ間予測とビュー間予測の両方を含む)構造が示され、ここでは矢印によって予測が示され、矢印の終点のオブジェクトは、予測参照のために矢印の始点のオブジェクトを使用する。
[0079]H.264/AVCのMVC拡張では、ビュー間予測は視差動き補償によってサポートされ得、視差動き補償は、H.264/AVC動き補償のシンタックスを使用するが、異なるビュー中のピクチャが参照ピクチャとして使用されることを可能にする。2つのビューのコーディングも、H.264/AVCのMVC拡張によってサポートされ得る。H.264/AVCのMVC拡張の利点の1つは、MVCエンコーダが3Dビデオ入力として3つ以上のビューを取り込むことができ、MVCデコーダがそのようなマルチビュー表現を復号することができることである。したがって、MVCデコーダをもつ任意のレンダラは、3つ以上のビューをもつ3Dビデオコンテンツを予想し得る。
[0080]H.264/AVCのMVC拡張では、同じアクセスユニット中の(すなわち、同じ時間インスタンスを有する)ピクチャの間でビュー間予測が可能にされる。言い換えると、MVCにおいて、ビュー間予測は、ビューの間の相関を取り除くために、同じアクセスユニットの(すなわち、同じ時間インスタンスをもつ)異なるビューからキャプチャされたピクチャの間で実行される。非ベースビューの1つの中のピクチャをコーディングするとき、ピクチャが異なるビュー中にあるが、同じ時間インスタンスを有する場合、ピクチャは参照ピクチャリストに追加され得る。言い換えると、ビュー間予測を用いてコーディングされたピクチャが、他の非ベースビューのビュー間予測についての参照ピクチャリスト中に追加され得る。ビュー間予測参照ピクチャは、任意のインター予測参照ピクチャと同様に、参照ピクチャリストの任意の位置に置かれ得る。
[0081]マルチビュービデオコーディングのコンテキストでは、2種類の動きベクトルが存在する。動きベクトルの1つの種類は、時間参照ピクチャ(すなわち、現在ピクチャとは異なる時間インスタンス中のピクチャ)を指す通常の動きベクトルである。通常の時間的動きベクトルに対応するインター予測のタイプは、「動き補償予測」または「MCP」と呼ばれる場合がある。ビュー間予測参照ピクチャが動き補償に使用されるとき、対応する動きベクトルは、「視差動きベクトル」と呼ばれる場合がある。言い換えると、視差動きベクトルは、異なるビューの中のピクチャ(すなわち、視差参照ピクチャまたはビュー間参照ピクチャ)を指す。視差動きベクトルに対応するインター予測のタイプは、「視差補償予測」または「DCP」と呼ばれる場合がある。
[0082]上述のように、MPEGのVCEGの3Dビデオコーディング共同研究部会(JCT−3V:Joint Collaborative Team on 3D Video Coding)が、H.264/AVCに基づく3Dビデオ規格、すなわち、3D−AVCを開発中である。3D−AVCでは、MVCにおけるビュー間予測の他に、新しいコーディングツールが含まれ、サポートされている。3D−AVCのための最新のソフトウェア3D−ATMは、以下のリンク、すなわち、
[3D−ATMバージョン6.2]:http://mpeg3dv.research.nokia.com/svn/mpeg3dv/tags/3DV−ATMv6.2/からダウンロード可能である。
[0083]AVCベースの3Dビデオ(3DビデオD−AVC)コーディング規格は、現在、JCT−3Vによって開発中である。3D−AVCのあるバージョンは、現在、次のように公的に入手可能である。
M.M.Hannuksela、Y.Chen、T.Suzuki、J.−R.Ohm、G.J.Sullivan、「3D−AVC draft text 5」、JCT3V−C1002、ジュネーブ、スイス、2013年1月である。少なくとも2014年5月9日現在、本文書は、次のリンク、すなわち、http://phenix.it−sudparis.eu/jct2/doc_end_user/documents/3_Geneva/wg11/JCT3V−C1002−v3.zipから入手可能である。
[0084]本開示の次のセクションは、AVCベースの3Dビデオコーディング規格(すなわち、3D−AVC)を論じる。3D−AVCにおけるビューコンポーネントのコーディング順序を以下で論じる。3D−AVCは、ベースビューのテクスチャ部分がH.264/AVCデコーダ用に完全に復号できるようにH.264/AVCに適合する。3D−AVCにおける強化されたビューコンポーネントの場合、深度はテクスチャより前にコーディングされ得、テクスチャビューコンポーネントは、深度ビューコンポーネントからの情報に基づいてコーディングされ得、これは深度ファーストコーディング(depth-first coding)として知られている。対照的に、テクスチャファーストコーディング順序では、各テクスチャビューコンポーネントは、それぞれの深度ビューコンポーネントの前にコーディングされる。たとえば、3D−AVCにおけるテクスチャビューコンポーネントと深度ビューコンポーネントのコーディング順序は、次のように例示され得る:ここにおいて、T0およびD0は、それぞれ、ベースビューのテクスチャビューコンポーネントおよび深度ビューコンポーネントを指し、TiおよびDiは、それぞれ、i番目の従属ビューのテクスチャビューコンポーネントおよび深度ビューコンポーネントを指す。以下の例では、3つのビューが存在する。
T0、D0、D1、D2、T1、T2:ベースビュー(T0およびD0)がテクスチャファーストコーディング順序でコーディングされ、従属ビューが深度ファーストコーディング順序でコーディングされる。ハイブリッドコーディング順序は、現在、3D−AVCの通常のテスト条件で使用されている。
T0、D0、T1、D1、T2、D2:すべてのビューコンポーネントがテクスチャファーストコーディング順序でコーディングされる。
[0085]ビュー間予測がTiについて有効にされる場合、参照テクスチャビューは、ビュー間参照ピクチャを含むビューとして定義され、対応する深度ビューは、参照テクスチャビューのものと同じビュー順序インデックスを有する参照深度ビューとして定義される。
[0086]ビデオコーダは、2つのビューの間の視差を推定するものとして視差ベクトル(DV)を使用することができる。隣接ブロックは、ビデオコーディングにおいてほとんど同じ動き/視差情報を共有するので、現在ブロックは、良好な予測子として、隣接ブロック中の動きベクトル情報を使用することができる。深度マップを介した3D−AVC視差ベクトル導出を次に論じる。視差ベクトルを導出するための技法は、低レベルコーディングツールごとに異なる場合があるが、通常、深度ファーストコーディング順序のおかげで、テクスチャビューコンポーネントのコーディングに従属ビューの深度データが利用される。
[0087]3D−AVCにおけるループ内ブロックベースビュー合成ビュー間予測(BVSP)および深度ベースの動きベクトル予測(D−MVP)は、主に、従属フレーム(たとえば、復号のためにBVSPまたはD−MVPに依存するピクチャ)中の深度マップの深度値から変換された視差ベクトルを使う低レベルコーディングツールである。通常、3D−AVCソフトウェアでは、実際の深度マップ値から特定のビューに対する視差への変換プロセスの結果は、カメラパラメータを有する参照テーブルに記憶される。
[0088]BVSPは、当初、Wenyi Suら、「3DV−CE1.a:Block−based View Synthesis Prediction for 3DV−ATM」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11との3Dビデオコーディング拡張開発共同研究部会、第1回会議、ストックホルム、スウェーデン、2012年7月16日〜20日、文書JCT3V−A0107(以下、「JCT3V−A0107」)で提案された。少なくとも2014年5月9日現在、JCT3V−A0107は、http://phenix.it−sudparis.eu/jct2/doc_end_user/documents/1_Stockholm/wg11/JCT3V−A0107−v1.zipからダウンロードされ得る。
[0089]図4は、後方ワーピングに基づくBVSPの例示的な概念の可視化である。図4を参照すると、以下のコーディング順序、すなわち、(T0、D0、D1、T1)が利用されると仮定する。テクスチャコンポーネントT0はベースビューであり、T1はVSPでコーディングされる従属ビューである。深度マップコンポーネントD0およびD1は、T0およびT1に関連付けられたそれぞれの深度マップである。説明を簡単にするために、深度マップコンポーネントD0は図4の例から省略される。
[0090]従属ビューT1において、現在ブロックCbのサンプル値は、ベースビューT0のサンプル値からなる参照領域R(Cb)から予測される。コーディングされたサンプルと参照サンプルとの間の変位ベクトルは、現在コーディングされているテクスチャサンプルに関連付けられた深度マップ値から、T1とT0との間の導出された視差ベクトルとして表記される。
[0091]いくつかの例では、ビデオコーダは、深度値から視差ベクトルへの変換のプロセスを実行するために、以下の式を使用することができる。
式中、jおよびiはCb内のローカル空間係数であり、d(Cb(j,i))はビュー#1の深度マップ画像中の深度マップ値であり、Zはd(Cb(j,i))の実際の深度値であり、Dは特定のビュー#0に対して導出された視差ベクトルの水平成分である。パラメータf、b、Znear、およびZfarは、カメラのセットアップを指定するパラメータ、すなわち、使用される焦点距離(f)、ビュー#1とビュー#0との間のカメラ分離(b)、および深度範囲(Znear、Zfar)であり、深度マップ変換のパラメータを表す。
[0092]いくつかの例では、導出された視差ベクトルの垂直成分は、常に0に等しく設定される。3D−AVCの現在の実装形態(すなわち、3DV−ATMの実装形態)では、式(1)および(2)は、深度マップ値(0...255)ごとにすでに事前計算され、参照テーブルとして記憶されている。したがって、ビデオコーダは、上記に提供された式(1)と(2)とを計算することなく深度値を視差ベクトルに変換するために、参照テーブルを使用することができる。
[0093]BVSPに関する1つの実装問題は、BVSPブロック(すなわち、BVSPを使用してコーディングされたブロック)の指示に関与する。BVSPブロックは、本明細書ではBVSPコード化ブロックと呼ばれることもある。いくつかの例では、BVSPブロックは次のように示される。マクロブロック(MB)レベルにある1つのフラグは、現在MBが従来のスキップ/直接モードでコーディングされているかどうか、または現在MBがスキップ/直接モードでコーディングされているが、合成参照コンポーネントから予測されているかどうかをシグナリングする。(16×16から8×8への)MB区分ごとに、参照ピクチャリストに対応する参照インデックスは、参照ピクチャリスト中の参照ピクチャをシグナリングする。ビデオエンコーダがMB区分を符号化するためにBVSPモードを使用するとき、BVSPコード化ブロックについての動きベクトルが存在しないので、ビデオエンコーダは、MB区分についての動きベクトル差分(MVD)をシグナリングしない。MB区分が合成参照コンポーネントを使用してコーディングされていることをフラグまたは参照インデックスのいずれかが示したとき、ビデオコーダは、下記で説明するように、1つの区分の予測を呼び出すことができる。
[0094]BVSPに関する別の実装問題は、予測導出プロセスに関与する。N×MはMB区分のサイズを表記することができ、ここで、NまたはMは8または16に等しい。MB区分がBVSPモードでコーディングされた場合、MB区分はさらに、K×Kに等しいサイズを有するいくつかの下位領域に区分され、ここで、Kは4×4、2×2、または1×1であり得る。MB区分の下位領域ごとに、ビデオコーダは、別個の導出された視差ベクトルを導出する。さらに、MB区分のそれぞれの下位領域ごとに、ビデオコーダは、ビュー間参照ピクチャ中の対応するブロック、すなわち図4のR(cb)を位置特定するために、導出された視差ベクトルを使用する。ビデオコーダは、それぞれの下位領域についての対応するブロックからそれぞれの下位領域を予測することができる。BVSPの一例は、4×4(Kが4に等しいことを意味する)のサイズを有するブロック用の後方ワーピングに基づく。導出された視差ベクトルは、そのようなベクトルを使用するコーディングツールが存在しないので、BVSPコード化ブロック用に記憶されない。
[0095]別の実装問題は、視差ベクトル導出プロセスに関与する。深度ファーストコーディング順序が適用されるとき、ビデオコーダは、図4に示したように、対応する非ベース深度ビュー中の対応する深度ブロックの深度値を変換することによって、導出された視差ベクトルを取得することができる。深度ブロックの中心位置の深度値、1つの深度ブロック内のすべての深度値の最大値、1つの深度ブロック内の4つのコーナーピクセルの最大値、および深度ブロック/深度MBの右下ピクセルの深度値などの、1つの深度ブロックの深度値を選択するために、いくつかの技法が適用され得る。テクスチャファーストコーディング順序が適用されるとき、非ベーステクスチャビューを復号するとき対応する非ベース深度ビューが利用不可なので、ビデオコーダは、BVSPモードを無効にすることができる。
[0096]通常のインターモード用の3D−AVCにおける深度ベースの動きベクトル予測(D−MVP)を次に論じる。D−MVPは、現在ビュー中の関連する深度マップデータを組み込む動きベクトル予測方法であり、それは、深度ファーストコーディング順序に起因して利用可能である。ビデオコーダは、従属(すなわち、非ベース)ビュー中のテクスチャビューコンポーネントでD−MVPを適用することができる。
[0097]3D−AVCでは、D−MVP方法は、H.264/AVCにおける従来のメディアン関数ベースの動きベクトル予測に組み込まれる。詳細には、隣接ブロック中の動きベクトルの参照インデックスが動き予測のタイプを知るためにチェックされるように、予測されるべき動きベクトルのタイプ(すなわち、時間的動きベクトルか視差動きベクトルか)が最初に識別される。
[0098]隣接ブロックは、順番に、現在ブロックに対して、左ブロックと、上ブロックと、右上ブロックと、左上ブロックとを含む。いくつかの例では、ビデオコーダは、他の3つの隣接ブロック(すなわち、左ブロック、上ブロック、および右上ブロック)のうちの1つが動きベクトルを含まず、したがって利用不可と見なされるとき、左上ブロック中の動きベクトルのみを使用することができる。
[0099]その後、3つの隣接ブロックが利用可能になった場合、ビデオコーダは、現在ブロックについての動きベクトルの動きベクトル予測に、3つの隣接ブロック中の動きベクトルを採用することができる。時間的予測では、3つの隣接ブロックの動きベクトルがすべて同じタイプであり、すべてが同じ参照インデックスを有する場合、ビデオコーダは、H.264/AVCに記述されたようにメディアンフィルタを直接使用することができる。そうでない場合(3つの隣接ブロックの動きベクトルが異なるタイプに属し、3つの隣接ブロックが異なる参照インデックスを有する場合)、ビデオコーダはさらに、現在ブロックについての動きベクトルを導出することができる。現在参照ピクチャがビュー間参照ピクチャであるとき、ビデオコーダは、隣接ブロックの位置における動きベクトルのタイプとそれらの参照インデックスとをチェックすることができる。動きベクトルがすべて同じタイプと同じ参照インデックスとを有する場合、ビデオコーダは、メディアンフィルタを適用することができる。どちらの場合も、利用可能な隣接ブロックが3つよりも少ない場合、ビデオコーダはさらに、3つの隣接ブロックが利用可能になるように、利用可能ではないブロックについての動きベクトルを導出することができる。
[0100]隣接ブロックについての導出された動きベクトルは、導出された動きベクトルと呼ばれる場合がある。現在ブロックの動きベクトルを導出するために、ビデオコーダは、現在動きベクトル(すなわち、隣接ブロックの動きベクトル)が視差動きベクトルであるかどうか、隣接ブロックの動きベクトルが現在動きベクトルのタイプと異なるタイプを有するかどうか、または隣接ブロックの動きベクトルが利用不可かどうかを決定することができる。これらの条件のうちのいずれかが該当する場合、ビデオコーダは、現在ブロックの導出された動きベクトルを視差動きベクトルであるように設定することができ、ビデオコーダは、対応する深度ビューコンポーネントから視差動きベクトルを変換することができる。ビデオコーダは、同じビューの深度ビューコンポーネントの対応するブロックの4つのコーナーの深度値の最大値を視差値に変換することができる。ビデオコーダは、導出された動きベクトルの水平成分に視差値を設定することができる。ビデオコーダは、導出された動きベクトルの垂直成分をゼロになるように設定することができる。
[0101]現在動きベクトルが時間的動きベクトルである場合、ビデオコーダは、参照(ベース)ビュー中の参照ブロックの時間的動きベクトルを決定するために、(上述されたのと同様に導出された)視差値を使用することができる。ビデオコーダは、導出された動きベクトルを時間的動きベクトルになるように設定することができる。時間的動きベクトルが利用不可であると見なされる(たとえば、時間的隣接ブロックがイントラブロックであるか、または時間的隣接ブロックの動きベクトルが、現在参照ピクチャと位置合わせされた参照ビュー中の参照ピクチャを指さない)場合、ビデオコーダは、導出された動きベクトルをゼロに設定することができる。
[0102]スキップモードおよび直接モード用の3D−AVCにおけるビュー間動き予測を次に論じる。H.264/AVC仕様のセクション7.3.5および7.4.5に記載されているように、マクロブロック用のmacroblock_layerシンタックス構造は、マクロブロックについてのマクロブロックタイプを指定するmb_typeシンタックス要素を含み得る。mb_typeシンタックス要素のセマンティクスは、マクロブロックを含んでいるスライスのスライスタイプに依存する。スライスがPスライスである場合、マクロブロックタイプはP_Skipタイプを含む。マクロブロックのマクロブロックタイプがP_Skipである場合、ビットストリーム中のマクロブロックについて、さらなるデータは存在しない。スライスがBスライスである場合、マクロブロックタイプは、B_Skipモードと、B_Direct_16×16モード(すなわち、B−16×16ダイレクトモード)とを含む。マクロブロックのマクロブロックタイプがB_Skipである場合、ビットストリーム中のマクロブロックについて、さらなるデータは存在しない。マクロブロックのマクロブロックタイプがB_Direct_16×16である場合、ビットストリーム中のマクロブロックについての動きベクトル差分または参照インデックスは存在しない。さらに、マクロブロックのマクロブロックタイプがB_Direct_16×16であるとき、直接モード予測についてのH.264/AVC仕様の第8.4.1項における動きベクトルおよび参照フレームインデックス用の導出プロセス内で、関数MbPartWidth(B_Direct_16×16)およびMbPartHeight(B_Direct_16×16)が使用される。
[0103]さらに、macroblock_layerシンタックス構造は、1つまたは複数のsub_mb_predシンタックス構造を含み得る。sub_mb_predシンタックス構造は、サブマクロブロックタイプを指定する4つのsub_mb_typeシンタックス要素を含み得る。サブマクロブロックタイプは、B_Direct_8×8モード(すなわち、B−8×8直接モード)を含む。サブマクロブロックのサブマクロブロックタイプがB_Direct_8×8であるとき、ビットストリーム中のサブマクロブロックについての動きベクトル差分または参照インデックスは存在しない。直接モード予測についてのH.264/AVC仕様の第8.4.1項における動きベクトルおよび参照フレームインデックス用の導出プロセス内で、関数SubMbPartWidth(B_Direct_8×8)およびSubMbPartHeight(B_Direct_8×8)が使用される。
[0104]ビデオコーダは、P_Skip、B_Skip、B−16×16直接モード、およびB−8×8直接モードで、3D−AVCにおけるビュー間動き予測を実行することができる。ビュー間動き予測を実行するために、ビデオコーダは、最初に、隣接ブロックからの現在ブロックについての視差ベクトル、ならびに同じビューの深度ビューコンポーネントの深度値から変換された視差ベクトルを導出することができる。1つの利用可能な空間的隣接ブロックが視差動きベクトルを含む場合、ビデオコーダは、この視差動きベクトルが現在ブロックについての視差ベクトルであると決定することができる。そうでない場合、隣接ブロックのうちのいずれも視差動きベクトルを有さないとき、ビデオコーダは、(D−MVPにおける変換と同様に)深度値からブロックの視差動きベクトルを変換することができる。その後、ビデオコーダは、現在ブロックについての視差ベクトルを決定するために、3つの隣接ブロックにメディアンフィルタを適用することができる。
[0105]ビデオコーダは、参照(たとえば、ベース)ビュー中の参照ブロックの時間的動きベクトルを決定するために、現在ブロックについての視差ベクトルを使用することができる。時間的動きベクトルが利用不可である場合、ビデオコーダは第1に参照インデックスを導出することができ、ビデオコーダは、動きベクトル予測子を生成するために、上記で説明したように、D−MVPを適用することができる。
[0106]本開示は、次に、HEVCについて論じる。HEVCの以下の議論は、他のビデオコーディング規格および/または仕様にも適用可能であり得る。ビデオエンコーダ20は、ピクチャの符号化表現を生成するために、コーディングツリーユニット(CTU)のセットを生成してもよい。CTUの各々は、ルーマサンプルのコーディングツリーブロックと、クロマサンプルの2つの対応するコーディングツリーブロックと、それらのコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造とを備え(たとえば、それらであり)得る。少なくともいくつかの例では、コーディングツリーブロックはサンプルのN×Nブロックであり得る。CTUは「ツリーブロック」または「最大コーディングユニット」(LCU:largest coding unit)と呼ばれることもある。HEVCのCTUは、H.264/AVCなど、他のビデオコーディング規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、走査順序(たとえば、ラスタ走査)で連続的に順序付けられた整数個のCTUを含み得る。
[0107]本開示は、サンプルの1つまたは複数のブロックのサンプルをコーディングするのに使われるサンプルの1つまたは複数のブロックおよびシンタックス構造を指すのに、「ビデオユニット」または「ビデオブロック」または単に「ブロック」という用語を使う場合がある。例示的なタイプのビデオユニットは、CTU、CU、PU、変換ユニット(TU)、マクロブロック、マクロブロック区分などを含み得る。
[0108]コード化CTUを生成するために、ビデオエンコーダ20は、CTUのコーディングツリーブロックに対して4分木区分を再帰的に実行して、コーディングツリーブロックをコーディングブロックに分割し得、したがって「コーディングツリーユニット」という名称がある。少なくともいくつかの例では、コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイとCbサンプルアレイとCrサンプルアレイとを有するピクチャのルーマサンプルのコーディングブロックと、そのピクチャのクロマサンプルの2つの対応するコーディングブロックと、それらのコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造とを備え(たとえば、それらであり)得る。3つの別個のカラープレーンを有する1つまたは複数のモノクロームピクチャでは、CUは、単一のコーディングブロックと、そのコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造とを備え得る。CUのサイズは、一般に、CUのコーディングブロックのサイズに対応し、通常、形状が方形である。いくつかの例では、CUのサイズは、8×8ピクセルから、最大で64×64ピクセル以上の最大サイズを有するCTUのサイズにまで及ぶ。
[0109]ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分してもよい。予測ブロックは、同じ予測がそれに適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ルーマサンプルの予測ブロックと、ピクチャのクロマサンプルの2つの対応する予測ブロックと、予測ブロックサンプルを予測するのに使用されるシンタックス構造とを備え得る(たとえば、これらであり得る)。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのために、予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成することができる。3つの別個のカラープレーンを有する1つまたは複数のモノクロームピクチャでは、PUは、単一の予測ブロックと、その予測ブロックを予測するために使用されるシンタックス構造とを備え得る。予測ブロックは、同じ予測が適用されるサンプルの方形(たとえば、M×N、ここでMはNに等しくても等しくなくてもよい)ブロックであり得る。したがって、PUは、形状が非正方形になるように区分され得る。
[0110]ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、PUのための予測ブロックを生成し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャ(すなわち、PUの予測ブロックを含むピクチャ)の復号されたサンプルに基づいてPUの予測ブロックを生成することができる。
[0111]ビデオエンコーダ20がインター予測を使用してPUの予測ブロックを生成する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャ以外の1つまたは複数のピクチャの復号サンプルに基づいて、PUの予測ブロックを生成し得る。インター予測は、単方向インター予測(すなわち、単予測(uni-prediction))でも双方向インター予測(すなわち、双予測(bi-prediction))でもよい。単予測または双予測を実施するために、ビデオエンコーダ20は、現在スライスに対して、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを生成し得る。参照ピクチャリストの各々は、1つまたは複数の参照ピクチャを含み得る。単予測を使うとき、ビデオエンコーダ20は、RefPicList0およびRefPicList1のいずれかまたは両方において参照ピクチャを探索して、参照ピクチャ内の参照ロケーションを決定すればよい。さらに、単予測を使うとき、ビデオエンコーダ20は、参照ロケーションに対応するサンプルに少なくとも部分的に基づいて、PUのための予測サンプルブロック(すなわち、予測ブロック)を生成すればよい。さらに、単予測を使うとき、ビデオエンコーダ20は、PUの予測ブロックと参照ロケーションとの間の空間変位を示す単一の動きベクトルを生成すればよい。PUの予測ブロックと参照ロケーションとの間の空間的変位を示すために、動きベクトルは、PUの予測ブロックと参照位置との間の水平方向の変位を規定する水平成分を含んでよく、PUの予測ブロックと参照位置との間の垂直方向の変位を規定する垂直成分を含んでよい。
[0112]PUを符号化するのに双予測を使うとき、ビデオエンコーダ20は、RefPicList0中の参照ピクチャ中の第1の参照ロケーションと、RefPicList1中の参照ピクチャ中の第2の参照ロケーションとを決定すればよい。次いで、ビデオエンコーダ20は、PUのための予測ブロックを、第1および第2の参照ロケーションに対応するサンプルに少なくとも部分的に基づいて生成し得る。さらに、PUを符号化するのに双予測を使うとき、ビデオエンコーダ20は、PUのサンプルブロックと第1の参照ロケーションとの間の空間変位を示す第1の動きベクトルと、PUの予測ブロックと第2の参照ロケーションとの間の空間変位を示す第2の動きベクトルとを生成すればよい。
[0113]ビデオエンコーダ20がCUの1つまたは複数のPUについての予測ブロック(たとえば、ルーマ、Cb、およびCr予測ブロック)を生成した後、ビデオエンコーダ20は、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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0114]さらに、ビデオエンコーダ20は、CUの残差ブロック(たとえば、ルーマ、Cb、およびCr残差ブロック)を1つまたは複数の変換ブロック(たとえば、ルーマ、Cb、およびCr変換ブロック)に分解するために、4分木区分を使用し得る。少なくともいくつかの例では、変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックである。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロックと、クロマサンプルの2個の対応する変換ブロックと、それらの変換ブロックサンプルを変換するために使用されるシンタックス構造とを備え(たとえば、それらであり)得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロックを有し(すなわち、それらに関連付けられ)得る。TUの(すなわち、それに関連付けられた)ルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであってもよい。Cb変換ブロックはCUのCb残差ブロックのサブブロックであってもよい。Cr変換ブロックはCUのCr残差ブロックのサブブロックであってもよい。3つの別個のカラープレーンを有する1つまたは複数のモノクロームピクチャでは、TUは、単一の変換ブロックと、その変換ブロックのサンプルを変換するために使用されるシンタックス構造とを備え得る。このようにして、CUに対応する残差サンプルは、「残差4分木」(RQT)として知られる4分木構造を使用して、より小さいユニットに再分割される場合がある。RQTのリーフノードはTUと呼ばれる場合がある。CUに関連付けられたシンタックスデータは、たとえば、4分木に従ってCUを1つまたは複数のTUに区分することも記述することができる。
[0115]ビデオエンコーダ20は、TUについての係数ブロックを生成するために、TUの変換ブロックに1回または複数回の変換を適用することができる。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。たとえば、ビデオエンコーダ20は、TUについてのルーマ係数ブロックを生成するために、TUのルーマ変換ブロックに1回または複数回の変換を適用することができる。ビデオエンコーダ20はTUのCb変換ブロックに1回または複数の変換を適用してTUのCb係数ブロックを生成してよい。ビデオエンコーダ20はTUのCr変換ブロックに1回または複数の変換を適用してTUのCr係数ブロックを生成してよい。
[0116]ビデオエンコーダ20は、係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後、係数ブロックを量子化してもよい。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現する処理を指す。さらに、ビデオエンコーダ20は、変換係数を逆量子化することができ、ピクチャのCUのTUの変換ブロックを再構成するために変換係数に逆変換を適用することができる。ビデオエンコーダ20は、CUのコーディングブロックを再構成するために、CUのTUの再構成された変換ブロックと、CUのPUの予測ブロックとを使用することができる。ピクチャの各CUのコーディングブロックを再構成することによって、ビデオエンコーダ20はピクチャを再構成することができる。ビデオエンコーダ20は、復号ピクチャバッファ(DPB)中に再構築されたピクチャを記憶し得る。したがって、ビデオエンコーダ20は、復号されたピクチャを記憶するバッファを備え得る。ビデオエンコーダ20は、DPB中の再構成されたピクチャを、インター予測およびイントラ予測用に使用することができる。
[0117]ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、量子化変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC:Context-Adaptive Binary Arithmetic Coding)を実行し得る。ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素をビットストリーム中で出力し得る。
[0118]ビデオエンコーダ20は、コード化ピクチャと関連付けられたデータの表現を形成するビットのシーケンスを含むビットストリームを出力し得る。ビットストリームは、一連のネットワークアブストラクションレイヤ(NAL)ユニットを備え得る。NALユニットの各々は、NALユニットヘッダを含む場合があり、生のバイトシーケンスペイロード(RBSP)をカプセル化することができる。NALユニットヘッダは、NALユニットタイプコードを含むシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含んでいるシンタックス構造であり得る。いくつかの例では、RBSPはゼロビットを含む。
[0119]異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)についてのRBSPをカプセル化することができ、第2のタイプのNALユニットはコード化スライスについてのRBSPをカプセル化することができ、第3のタイプのNALユニットは補足エンハンスメント情報(SEI)についてのRBSPをカプセル化することができ、以下同様である。PPSとは、0個以上のコード化ピクチャ全体に当てはまるシンタックス要素を含み得るシンタックス構造である。ビデオコーディングデータに対するRBSP(パラメータセットおよびSEIメッセージに対するRBSPに対立するものとして)をカプセル化するNALユニットは、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれることがある。コード化スライスをカプセル化するNALユニットは、本明細書では、コード化スライスNALユニットと呼ばれる場合がある。コード化スライスについてのRBSPは、スライスヘッダと、スライスデータとを含み得る。
[0120]HEVCおよび他のビデオコーディング規格は、様々なタイプのパラメータセットを提供する。たとえば、ビデオパラメータセット(VPS)とは、0個以上のコード化ビデオシーケンス(CVS)全体に当てはまるシンタックス要素を備えるシンタックス構造である。シーケンスパラメータセット(SPS)は、CVSのすべてのスライスに適用する情報を含み得る。SPSは、SPSがアクティブであるとき、アクティブであるVPSを識別するシンタックス要素を含み得る。したがって、VPSのシンタックス要素は、SPSのシンタックス要素よりも一般的に適用可能であり得る。PPSは、0個以上のコード化ピクチャに適用されるシンタックス要素を備えるシンタックス構造である。PPSは、PPSがアクティブであるとき、アクティブであるSPSを識別するシンタックス要素を含み得る。スライスのスライスヘッダは、スライスがコーディングされるときにアクティブであるPPSを示すシンタックス要素を含み得る。
[0121]ビデオデコーダ30は、ビットストリームを受信することができる。さらに、ビデオデコーダ30は、ビットストリームをパースして、ビットストリームからシンタックス要素を取得(たとえば、復号)し得る。ビデオデコーダ30は、ビットストリームから取得(たとえば、復号)されたシンタックス要素に少なくとも部分的に基づいてビデオデータのピクチャを再構成し得る。ビデオデータを再構成するためのプロセスは、概して、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、PUの動きベクトルを使用して現在CUのPUのための予測ブロックを決定し得る。ビデオデコーダ30は、次いで、PUについての予測ブロックを生成するために、PUの1つの動きベクトルまたは複数の動きベクトルを使用することができる。
[0122]さらに、ビデオデコーダ30は、現在CUのTUに関連付けられた係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在CUのTUの(すなわち、それに関連付けられた)変換ブロックを再構成するために係数ブロックに対して逆変換を実行し得る。ビデオデコーダ30は、現在CUのPUのための予測サンプルブロック(すなわち、予測ブロック)のサンプルを現在CUのTUの変換ブロックの対応するサンプルに加算することによって、現在CUのコーディングブロックを再構成し得る。ピクチャの各CUのためのコーディングブロックを再構成することによって、ビデオデコーダ30はピクチャを再構成し得る。ビデオデコーダ30は、出力するため、および/または他のピクチャを復号するのに使用するために、復号されたピクチャを復号ピクチャバッファ中に記憶し得る。したがって、ビデオデコーダ30は、復号されたピクチャを記憶するバッファを備え得る。
[0123]ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)がピクチャの現在スライスをコーディングし始めるとき、ビデオコーダは、第1の参照ピクチャリスト(すなわち、リスト0)を初期化することができる。さらに、現在スライスがBスライスである場合、ビデオコーダは、第2の参照ピクチャリスト(すなわち、リスト1)を初期化することができる。本開示は、リスト0を「RefPicList0」と呼ぶ場合があり、リスト1を「RefPicList1」と呼ぶ場合がある。ビデオコーダが参照ピクチャリスト(たとえば、リスト0またはリスト1)を初期化した後、ビデオコーダは、参照ピクチャリスト中の参照ピクチャの順序を修正することができる。言い換えると、ビデオコーダは、参照ピクチャリスト修正(RPLM: reference picture list modification)プロセスを実行することができる。ビデオコーダは、1つの参照ピクチャが参照ピクチャリスト中の1つを超える位置内に出ることが可能な場合を含めて、参照ピクチャの順序を任意の順序で修正することもできる。
[0124]場合によっては、ビデオエンコーダ20は、マージモードまたは高度動きベクトル予測(AMVP)モードを使用して、PUの動き情報をシグナリングすることができる。言い換えると、HEVCでは、動きパラメータの予測のために2つのモードがあり、一方はマージモードであり、他方はAMVPである。PUの動き情報は、PUの動きベクトル(1つまたは複数)と、PUの参照インデックス(1つまたは複数)とを含み得る。ビデオエンコーダ20がマージモードを使用して現在PUの動き情報をシグナリングするとき、ビデオエンコーダ20は、マージ候補リスト(すなわち、動きベクトル予測子(MVP)候補リスト)を生成し得る。言い換えると、ビデオエンコーダ20は、動きベクトル予測子リスト構築プロセスを実行することができる。マージ候補リストは、マージ候補(すなわち、MVP候補)のセットを含む。マージ候補リストは、現在PUに空間的または時間的に隣接するPUの動き情報を示すマージ候補を含み得る。すなわち、マージモードでは、動きパラメータ(たとえば、参照インデックス、動きベクトルなど)の候補リストが構築され得、候補は、空間的隣接ブロックおよび時間的隣接ブロックからであり得る。
[0125]さらに、マージモードでは、ビデオエンコーダ20は、マージ候補リストからマージ候補を選択することができ、選択されたマージ候補によって示される動き情報を、現在PUの動き情報として使うことができる。ビデオエンコーダ20は、選択されたマージ候補のマージ候補リスト中の位置をシグナリングし得る。たとえば、ビデオエンコーダ20は、インデックスを候補リスト中に送信することによって、選択された動きベクトルパラメータをシグナリングすることができる。ビデオデコーダ30は、ビットストリームから、候補リストの中へのインデックス(すなわち、候補リストインデックス)を取得することができる。さらに、ビデオデコーダ30は、同じマージ候補リストを生成することができ、選択されたマージ候補の位置の表示に基づいて、選択されたマージ候補を決定することができる。ビデオデコーダ30は、次いで、選択されたマージ候補の動き情報を、現在PUのための予測ブロックを生成するのに使い得る。つまり、ビデオデコーダ30は、候補リストインデックスに少なくとも部分的に基づいて、候補リスト中の選択された候補を決定することができ、ここで、選択された候補は、現在PUについての動きベクトルを指定する。このように、デコーダ側では、インデックスが復号されると、インデックスが指す対応するブロックのすべての動きパラメータは、現在PUによって継承されることになる。
[0126]スキップモードはマージモードと同様である。スキップモードでは、ビデオエンコーダ20およびビデオデコーダ30は、マージモードにおいてビデオエンコーダ20およびビデオデコーダ30がマージ候補リストを使うのと同じようにマージ候補リストを生成し、使うことができる。ただし、ビデオエンコーダ20がスキップモードを使って現在PUの動き情報をシグナリングするとき、ビデオエンコーダ20は、現在PUについてのどの残差データもシグナリングしない。したがって、ビデオデコーダ30は、PUのための予測ブロックとして、マージ候補リスト中の選択された候補の動き情報によって示される参照ブロックを使用することができる。
[0127]AMVPモードは、ビデオエンコーダ20が候補リストを生成し、候補リストから候補を選択するという点で、マージモードと同様である。ただし、ビデオエンコーダ20がAMVPモードを使用して現在PUの動き情報をシグナリングするとき、ビデオエンコーダ20は、選択された候補の候補リスト中の位置をシグナリングすることに加えて、現在PUについての動きベクトル差分(MVD)と参照インデックスとをシグナリングすることもできる。現在PUについてのMVDは、現在PUの動きベクトルとAMVP候補リストから選択された候補の動きベクトルとの間の差分を示し得る。単予測では、ビデオエンコーダ20は、現在PUについての1つのMVDと1つの参照インデックスとをシグナリングすることができる。双予測では、ビデオエンコーダ20は、現在PUについての2つのMVDと2つの参照インデックスとをシグナリングすることができる。このようにして、ビデオエンコーダ20は、インデックスを候補リスト中で送信することによって、選択された動きベクトルをシグナリングすることができ、参照インデックス値とMVDとをシグナリングすることができる。言い換えると、現在PUについての動きベクトルを表す、ビットストリーム中のデータは、参照インデックスと、候補リストへのインデックスと、MVDとを表すデータを含み得る。
[0128]さらに、AMVPモードを使用して現在PUの動き情報がシグナリングされるとき、ビデオデコーダ30は、ビットストリームから、現在PUについてのMVDと、候補リストインデックスとを取得することができる。ビデオデコーダ30は、同じAMVP候補リストを生成することができ、AMVP候補リスト中の選択された候補の位置の表示に基づいて、選択された候補を決定することができる。ビデオデコーダ30は、選択された候補によって示される動きベクトルにMVDを加算することによって、現在PUの動きベクトルを回復することができる。つまり、ビデオデコーダ30は、選択された候補によって示される動きベクトルおよびMVDに少なくとも部分的に基づいて、現在PUの動きベクトルを決定することができる。ビデオデコーダ30は、次いで、回復された1つの動きベクトルまたは複数の動きベクトルを、現在PU用の予測ブロックを生成するのに使い得る。
[0129]現在PUに時間的に隣接するPU(すなわち、現在PUとは異なる時間インスタンス中にあるPU)の動き情報に基づくマージ候補リストまたはAMVP候補リスト中の候補は、時間的動きベクトル予測子(TMVP)と呼ばれ得る。TMVPを決定するために、ビデオコーダは、現在PUと同じ場所にあるPUを含む参照ピクチャを最初に識別することができる。言い換えると、ビデオコーダはコロケートピクチャを識別することができる。現在ピクチャの現在スライスがBスライス(すなわち、双方向インター予測されたPUを含むことが許容されるスライス)である場合、ビデオエンコーダ20は、コロケートピクチャがRefPicList0からのものであるかRefPicList1からのものであるかを示すシンタックス要素(たとえば、collocated_from_l0_flag)を、スライスヘッダ中でシグナリングすることができる。ビデオデコーダ30がコロケートピクチャを含む参照ピクチャリストを識別した後、ビデオデコーダ30は、識別された参照ピクチャリスト中のピクチャ(すなわち、コロケートピクチャ)を識別するために、スライスヘッダ中でシグナリングされ得る別のシンタックス要素(たとえば、collocated_ref_idx)を使用することができる。
[0130]ビデオコーダは、コロケートピクチャをチェックすることによって、コロケートPUを識別し得る。TMVPは、コロケートPUを含むCUの右下PUの動き情報、またはこのPUを含むCUの中心PU内の右下PUの動き情報のいずれかを示し得る。コロケートPUを含むCUの右下PUは、PUの予測ブロックの右下サンプルのすぐ下および右のロケーションをカバーするPUであり得る。言い換えると、TMVPは、参照ピクチャの中にあり、現在PUの右下コーナーとコロケートされるロケーションをカバーするPUの動き情報を示すことができ、または、TMVPは、参照ピクチャの中にあり、現在PUの中心とコロケートされるロケーションをカバーするPUの動き情報を示すことができる。
[0131]上記のプロセスによって識別される動きベクトルが、マージモードまたはAMVPモード用の動き候補を生成するために使用されるとき、動きベクトルは、時間的位置(たとえば、ピクチャ順序カウント(POC)値によって反映される)に基づいてスケーリングされ得る。たとえば、ビデオコーダは、現在ピクチャのPOC値と参照ピクチャのPOC値との差が小さいときよりも、現在ピクチャのPOC値と参照ピクチャのPOC値との差が大きいときに、動きベクトルの大きさをより大きな量増大させることができる。
[0132]WPPは、並列性を高めるための技法である。ビデオコーダがWPPを使用してピクチャをコーディングする場合、ビデオコーダはピクチャのCTBを複数の「WPP波」に分割することができる。WPP波の各々は、ピクチャ中のCTBの異なる行に対応し得る。ビデオコーダがWPPを使用してピクチャをコーディングする場合、ビデオコーダはCTBの最上行からコーディングを開始してよい。ビデオコーダが最上行の2つ以上のCTBをコーディングした後、ビデオコーダは、CTBの最上行をコーディングすることと並列にCTBの最上行から2番目の行をコーディングし始め得る。ビデオコーダが最上行から2番目の2つ以上のCTBをコーディングした後、ビデオコーダは、CTBの最上行をコーディングすることと並列にCTBの最上行から3番目の行をコーディングし始め得る。このパターンは、ピクチャ中のCTBの行を下って続き得る。
[0133]ビデオコーダがWPPを使用している場合、ビデオコーダは、空間的に隣接するCUが現在CTBの左、左上、上、または右上にある限り、現在CTB中の特定のCUに対してピクチャ内予測を実行するために、現在CTB外の空間的に隣接するCUに関連付けられた情報を使用し得る。現在CTBが一番上の行以外の行中の最左CTBである場合、ビデオコーダは、現在CTBの1つまたは複数のシンタックス要素をCABACコーディングするためのコンテキストを選択するために、すぐ上の行の第2のCTBに関連付けられた情報を使用し得る。そうではなく、現在CTBが行中の最左CTBでない場合、ビデオコーダは、現在CTBの1つまたは複数のシンタックス要素をCABACコーディングするためのコンテキストを選択するために、現在CTBの左のCTBに関連付けられた情報を使用し得る。このようにして、ビデオコーダは、すぐ上の行の2つ以上のCTBを符号化した後に、すぐ上の行のCABAC状態に基づいて、ある行のCABAC状態を初期化し得る。
[0134]したがって、第1のCTBが単一のCTBによってピクチャの左境界から分離されると決定することに応答して、ビデオコーダは、その第1のCTBに関連付けられたコンテキスト変数を記憶し得る。ビデオコーダは、第1のCTBに関連付けられたコンテキスト変数に少なくとも部分的に基づいて、第2のCTBの1つもしくは複数のシンタックス要素をエントロピーコーディング(たとえば、エントロピー符号化またはエントロピー復号)することができ、第2のCTBは、ピクチャの左境界と、第1のCTBよりも低いCTBの1つの行に隣接する。
[0135]図5は、WPPの一例を示す概念図である。上述のように、ピクチャは、その各々が関連付けられたCTBである、ピクセルブロックに区分され得る。図5は、CTBに関連付けられたピクセルブロックを白い正方形の格子として示す。ピクチャはCTB行50A〜50E(総称して、「CTB行50」)を含む。
[0136](たとえば、複数の並列処理コアのうちの1つによって実行される)第1の並列処理スレッドは、CTB行50A中のコーディングCTBであり得る。同時に、(たとえば、他の並列処理コアによって実行される)他のスレッドは、CTB行50B、50C、および50D中のコーディングCTBであり得る。図5の例では、第1のスレッドはCTB52Aを現在コーディングしており、第2のスレッドはCTB52Bを現在コーディングしており、第3のスレッドはCTB52Cを現在コーディングしており、第4のスレッドはCTB52Dを現在コーディングしている。本開示は、CTB52A、52B、52C、および52Dを「現在CTB52」と総称することがある。ビデオコーダは、すぐ上の行の3つ以上のCTBがコーディングされた後、CTB行をコーディングし始め得るので、現在CTB52は、2つのCTBの幅だけ互いから水平方向に変位される。
[0137]図5の例では、スレッドは、現在CTB352中のCUについてのイントラ予測またはインター予測を実行するために、太いグレーの矢印によって示されるCTBからのデータを使用し得る。(スレッドは、CUについてのインター予測を実行するために、1つまたは複数の参照フレームからのデータを使用することもできる。)所与のCTBをコーディングするために、スレッドは、前にコーディングされたCTBに関連付けられた情報に基づいて、1つまたは複数のCABACコンテキストを選択することができる。スレッドは、所与のCTBの第1のCUに関連付けられたシンタックス要素に対してCABACコーディングを実行するために1つまたは複数のCABACコンテキストを使用し得る。所与のCTBが行の最左CTBでない場合、スレッドは、所与のCTBの左のCTBの最後のCUに関連付けられた情報に基づいて、1つまたは複数のCABACコンテキストを選択することができる。所与のCTBが行の最左CTBである場合、スレッドは、所与のCTBの上の、およびその右の2つのCTBの最後のCUに関連付けられた情報に基づいて、1つまたは複数のCABACコンテキストを選択することができる。スレッドは、現在CTB52の第1のCUのためのCABACコンテキストを選択するために、細い黒い矢印によって示されるCTBの最後のCUからのデータを使用し得る。
[0138]3D−HEVCは、異なる視点からの同じシーンの複数のビューを提供する。3D−HEVC用の規格化の取り組みの一部は、HEVCに基づいたマルチビュービデオコーデックの規格化を含む。HEVCベースの3DV(すなわち、3D−HEVC)では、異なるビューからの再構成されたビューコンポーネントに基づくビュー間予測が有効にされる。H.264/AVCにおけるMVCのように、3D−HEVCはビュー間予測(IMP)をサポートする。3D−HEVCにおいて、IMPは、標準HEVCにおいて使用される動き補償と同様であり、同じまたは同様のシンタックス要素を利用し得る。ただし、ビデオコーダがPUに対してIMPを実行するとき、ビデオエンコーダは、参照ピクチャとして、そのPUと同じアクセスユニット中にあるが、異なるビュー中にあるピクチャを使用し得る。対照的に、従来の動き補償は、参照ピクチャとして異なるアクセスユニット中のピクチャのみを使用する。したがって、3D−HEVCでは、従属ビュー中のブロックの動きパラメータは、同じアクセスユニットの他のビュー中のすでにコーディングされた動きパラメータに基づいて予測または推測され得る。
[0139]3D−HEVCおよび他のビデオコーディング規格では、現在PUの動き情報が、マージモードまたはAMVPモードを使用してシグナリングされるとき、ビデオコーダは候補リスト(たとえば、マージ候補リストまたはAMVP候補リスト)を生成する。さらに、3D−HEVCおよび他のビデオコーディング規格では、候補リストは、候補リスト中の他の候補と同じように使用され得るビュー間予測候補を含み得る。ビュー間予測動きベクトル候補は、参照ピクチャのPU(すなわち、参照PU)の動き情報を指定する。参照ピクチャは、現在PUと同じ時間アクセスユニット中にあるが、現在PUとは異なるビュー中にある。参照PUを決定するために、ビデオコーダは、現在PUについての視差ベクトルを決定するための視差ベクトル構築プロセスを実行し得る。現在PUについての視差ベクトルは、現在PUと、参照テクスチャピクチャ内のロケーションとの間の水平空間変位を示し得る。参照PUは、視差ベクトルによって示されたロケーションをカバーする参照テクスチャピクチャのPUであり得る。
[0140]視差動きベクトルは、ビュー間参照ピクチャ中のロケーションを指す動きベクトルである。ビュー間参照ピクチャは、現在PUと同じアクセスユニット中にあるが、異なるビュー中にあるテクスチャピクチャである。空間的視差ベクトル(SDV)は、現在PUに空間的に隣接するPUの視差動きベクトルである。言い換えると、SDVは、空間的に隣接するPUによって指定され、空間的に隣接するPUが現在PUに空間的に隣接する、ビュー間参照ピクチャ内のロケーションを示す動きベクトルである。時間的視差ベクトル(TDV)は、現在PUと同じビュー中の現在PUとは異なるアクセスユニット中の、現在PUとコロケートされるPUの視差動きベクトルである。言い換えると、TDVは、同じアクセスユニットによる任意の参照ピクチャまたはビュー間ピクチャの中のコロケートPUまたはコロケートLCUからの視差動きベクトルであり得る。代替的に、TMVPに使用されたピクチャからのコロケートPUの動きベクトルまたはTMVPによって生成された動きベクトルが視差ベクトルである場合、それはまたTDVとして扱われる。現在PUの空間的に隣接するかまたは時間的に隣接するPUが、ビュー間動き予測を使用してコーディングされる場合、空間的に隣接するかまたは時間的に隣接するPUの視差ベクトルはIDVである。
[0141]ビデオコーダは、IMPについて選択された視差ベクトルを直接使用することができる。上記のように、ビデオエンコーダは、マージ/スキップモードまたはAMVPモードを使用して、現在PUの動き情報をシグナリングするとき、現在PUについての動きベクトル予測子候補リスト(すなわち、動きベクトル候補リスト)を生成することができる。ビデオコーダは、ビュー間参照ピクチャ中の参照PUを決定するために、選択された視差ベクトル候補によって指定された視差ベクトルを使用し得る。ビデオコーダは、その場合、マージモードまたはAMVPモード用の動きベクトル予測子候補リスト中のビュー間予測動きベクトル候補として、参照PUの動き情報を含み得る。
[0142]さらに、3D−HEVCおよび他のビデオコーディング規格は、ビュー間残差予測をサポートし得る。ビュー間残差予測では、ビデオコーダは、現在ブロックとは異なるビュー中の残差データに基づいて、現在ブロック(たとえば、CU)の残差ブロックを決定することができる。ビデオコーダは、異なるビュー中の残差データを決定するために、現在ブロックの視差ベクトル(または、現在ブロック(たとえば、PU)のサブブロックの視差ベクトル)を使用し得る。
[0143]いくつかの事例では、ビデオコーダは、各CUについての導出された視差ベクトルに基づいて、CUレベルのビュー間残差予測(IVRP)を実行することができる。ビデオコーダが現在ピクチャの現在CUに対してIVRPを実行するとき、ビデオコーダは、現在CUについての動き補償ブロックを決定するために、現在CUのPUの動きベクトルを使用することができる。言い換えると、現在CUについての動き補償ブロックは、現在CUのPUの予測ブロックを備え得る。現在CUの動き補償ブロックは、Peとして表記され得る。現在CUについての残差ブロック(re)中の各サンプルは、現在CUの元のコーディングブロック中のサンプルと、Pe中の対応するサンプルとの間の差分を示し得る。さらに、ビデオコーダは、参照ピクチャ中の視差参照CUを決定するために、現在CUの視差ベクトルを使用することができる。参照ピクチャは、現在ピクチャとは異なるビュー中にあり得る。視差参照CUの残差ブロックは、rbとして表記され得る。視差参照CUの残差ブロック(rb)の各サンプルは、視差参照CUについてのコーディングブロックの元のサンプルと、視差参照CUのPUについての予測ブロック中の対応する予測サンプルとの間の差分を示し得る。
[0144]ビデオエンコーダ20は、ビットストリーム中に、最終残差ブロックを示すデータを含み得る。最終残差ブロック中の各サンプルは、r
b中のサンプルと、r
e中の対応するサンプルとの間の差分を示し得る。したがって、ビュー間残差予測が使われるとき、動き補償は、以下の式によって表現され得る。
の再構成は、逆量子化係数re+予測Peおよび量子化正規化残差係数(quantization normalized residual coefficients)rbに等しい。ビデオコーダは、rbを、残差予測子として扱うことができる。したがって、動き補償と同様に、rbが現在残差から減算されればよく、得られた差分信号のみが変換コーディングされる。
[0145]いくつかのビデオコーダは、いわゆる、高度残差予測(ARP:Advanced Residual Prediction)を実装することができる。たとえば、Zhangら、「3D−CE5.h related:Advanced residual prediction for multiview coding」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11との3Dビデオコーディング拡張開発に関する共同研究部会、第2回会議、上海、中国、2012年10月13〜19日、文書JCT3V−B0051(以下、「JCT3V−B0051」)は、ビュー間残差予測のコーディング効率をさらに改善するためのARP方法を提案した。
[0146]上記のように、ビュー間動き予測、ビュー間残差予測、および/または他のビュー間コーディング技法は視差ベクトルに依存し得る。隣接ブロックベースの視差ベクトル(NBDV)導出は、ブロックについての視差ベクトルを決定するためのプロセスである。NBDVは、すべてのビューに対してテクスチャファーストコーディング順序を使用する3D−HEVCにおける視差ベクトル導出方法に使用される。少なくともいくつかの3D−HEVC設計では、NBDVは、参照ビューの深度マップから深度データを取り出すためにも使用される。次のように、参照ソフトウェア記述、ならびに3D−HEVCの作業草案が利用可能である。Gerhard Techら、「3D−HEVC Test Model Description draft 2」、JCT3V−B1005、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11との3Dビデオコーディング拡張開発共同研究部会、第2回会合:上海、中国、2012年10月(以下、「JCT3V−B1005」)。少なくとも2014年5月9日時点で、JCTV−B1005は、http://phenix.int−evry.fr/jct2/doc_end_user/documents/2_Shanghai/wg11/JCT3V−B1005−v1.zipから利用可能である。
[0147]視差ベクトルは、2つのビューの間の視差を推定するために使用される。隣接ブロックは、ビデオコーディングにおいてほとんど同じ動き/視差情報を共有するので、現在ブロックは、良好な予測子として、隣接ブロック中の動きベクトル情報を使用することができる。この考えに従って、NBDV導出プロセス(すなわち、「NBDVプロセス」または、単に「NBDV」)は、異なるビュー中の視差ベクトルを推定するために隣接する視差情報を使用する。
[0148]いくつかの空間的隣接ブロックおよび時間的隣接ブロックは、最初に定義される。空間的および時間的隣接ブロックの各々が、次いで、現在ブロックと候補ブロックとの間の相関の優先度によって決定された、あらかじめ定義された順序でチェックされる。視差動きベクトル(すなわち、動きベクトルがビュー間参照ピクチャを指す)が候補中で発見されると、視差動きベクトルが視差ベクトルに変換される。2つのセットの隣接ブロックが利用される。一方のセットは、空間的隣接ブロックからのものであり、他方のセットは、時間的隣接ブロックからのものである。
ビデオコーダは、すべてのビューについてテクスチャファーストコーディング順序を使用する、3D−HEVCおよび他のビデオコーディング規格における視差ベクトル導出方法として、NBDV導出プロセスを使用することができる。少なくともいくつかの3D−HEVC設計では、ビデオコーダは、参照ビューの深度マップから深度データを取り出すために、NBDV導出プロセスを使用することもできる。3D−HEVCは、最初に、Zhangら、「Disparity vector generation results」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11との3Dビデオコーディング拡張開発共同研究部会、第1回会合、ストックホルム、スウェーデン、2012年7月16〜20日、文書JCT3V−A0097(以下、JCT3V−A0097)で提案されたNBDV方法を採用した。JCT3V−A0126、Sungら、「3D−CE5.h:Simplification of disparity vector derivation for HEVC−based 3D video coding」、ITU−T SG16 WP3とISO/IEC−JTC1/SC29/WG11との3Dビデオコーディング拡張開発共同研究部会、第1回会合、ストックホルム、スウェーデン、2012年7月16〜20日、文書番号JCT3V−A0126(以下、JCT3V−A0126」で簡素化されたNBDVとともに暗黙的視差ベクトルが含まれる。加えて、Kangら、「3D−CE5.h related:Improvements for disparity vector derivation」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11との3Dビデオコーディング拡張開発共同研究部会、第2回会合:上海、中国、2012年10月13〜19日、文書JCT3V−B0047(以下、JCT3V−B0047)では、NBDV導出プロセスは、ランダムアクセスピクチャ(RAP)の選択で改善されたコーディング利得を実現しながら、復号ピクチャバッファ中に記憶された暗黙視差ベクトルを除去することによって、さらに簡略化される。
[0149]いくつかのNBDV導出プロセスでは、ビデオコーダは、視差ベクトル導出のために5つの空間的隣接ブロックを使用する。5つの空間的隣接ブロックは、A0、A1、B0、B1、およびB2によって表記される、現在PUの左下ブロック、左ブロック、右上ブロック、上ブロック、および左上ブロックである。提案されたNBDV導出プロセスで使用される5つの空間的隣接ブロックは、HEVCにおけるマージモードで使用される同じ5つの空間的隣接ブロックであり得る。したがって、いくつかの例では、5つの空間的隣接ブロックにアクセスするために、さらなるメモリアクセスは必要とされない。
[0150]時間的隣接ブロックをチェックする場合、候補ピクチャリストの構築プロセスが最初に実行される。現在ビューからのすべての参照ピクチャが、候補ピクチャとして扱われ得る。コロケート参照ピクチャが最初に候補ピクチャリスト中に挿入され、参照インデックスの昇順に候補ピクチャの残りによって後続される。両参照ピクチャリスト中の同じ参照インデックスを有する参照ピクチャが利用可能であるとき、コロケートピクチャの同じ参照ピクチャリスト中の一方が、他方に先行する。候補ピクチャリスト中の候補ピクチャごとに、時間的隣接ブロックを導出するために3つの候補領域が決定される。
[0151]ビデオコーダがビュー間動き予測でブロックをコーディングするとき、ビデオコーダは、異なるビュー中の対応するブロックを選択するための視差ベクトルを導出することができる。「暗黙視差ベクトル」または「IDV」(もしくは、場合によっては「導出された視差ベクトル」)という用語は、ビュー間動き予測において導出された視差ベクトルを指すことがある。たとえば、ビデオコーダが動き予測(すなわち、時間的動き予測)でブロックをコーディングすることができる場合すら、ビデオコーダは、導出された視差ベクトルを廃棄しない。むしろ、ビデオコーダは、後続のブロックをコーディングする目的で視差ベクトルを使用することができる。詳細には、ビデオコーダは、視差ベクトルを暗黙視差ベクトルとして扱うことができ、1つまたは複数の他のブロックについての視差ベクトルを決定するために、NBDV導出プロセスにおいて暗黙視差ベクトルを使用することができる。
[0152]通常、ビデオコーダがNBDV導出プロセスを実行するとき、ビデオコーダは、順番に、時間的隣接ブロック中の視差動きベクトルと、空間的隣接ブロック中の視差動きベクトルと、次いで暗黙視差ベクトルとをチェックする。ビデオコーダが視差ベクトルを発見すると、ビデオコーダは、NBDV導出プロセスを終了することができる。
[0153]後方VSPは3D−HEVCにおいて有効にされ得る。3D−HEVCでは、ビデオコーダがテクスチャファーストコーディング順序を適用するとき、ビデオコーダは、参照深度ビュー中の深度値の考慮事項の有無にかかわらず、PUごとに、NBDV導出プロセスから視差ベクトルを導出することができる。ビデオコーダが視差ベクトルを取得した後、PUの4×4下位領域がBVSPモードでコーディングされた場合、ビデオコーダはさらに、1つのPUの4×4下位領域ごとに視差ベクトルを改良することができる。
[0154]改良プロセスは2つのステップを含む場合がある。1番目のステップでは、ビデオコーダは、参照深度ビュー中の4×4深度ブロックから1つの最大深度値を選択することができる。ビデオコーダは、4×4深度ブロックを位置特定するために導出された視差ベクトルを使用することができる。2番目のステップでは、ビデオコーダは、改良された視差ベクトルの垂直成分を0であるように保持しながら、改良された視差ベクトルの水平成分に深度値を変換することができる。視差ベクトルが1つのPUの1つの4×4下位領域用に改良された後、ビデオコーダは、動き補償のために参照テクスチャビュー中の1つのブロックを位置特定するために、改良された視差ベクトルを使用することができる。
[0155]2013年4月24日に出願された米国仮特許出願第61/815,656号で説明するように、MBレベルNBDVは、現在MBについての視差ベクトルを導出するために使用され、動きベクトル予測のためにさらに使用され得る。視差動きベクトルが識別されると、すなわち、時間的または空間的隣接ブロックのうちの1つがビュー間参照ピクチャを使用すると、それが現在MBについての視差ベクトルとして返される。米国仮特許出願第61/815,656号の1つの例示的な実装形態を下で説明する。この例示的な実装形態では、図6に示すように、AVC動き予測プロセスにおいてチェックされる空間的隣接ブロックは、提案されたNBDVプロセスにおいて、A(左)、B(上)、C(右上)、およびD(左上)の順序でチェックされる。図6は、NBDVについての時間的隣接ブロックを示す概念図である。
[0156]現在ピクチャと同じビュー中の最大で2つの参照ピクチャからのブロックがチェックされる(Bスライス用のRefPicList1[0]およびRefPicList0[0]ならびにPスライス用のRefPicList0[0])。いくつかの例では、3つの時間的ブロックはピクチャごとにチェックされ、図7に示すように、各ピクチャに関して、コロケートMBに対するコロケートブロックが、下に示すように、BR(右下)、CT3(中心3)、およびCO2(コーナー2)の順でチェックされる。図7は、NBDVについての例示的な時間的隣接ブロックを示す概念図。
[0157]上述の隣接ブロックが順番にチェックされる。3D−HEVCと同様に、時間的隣接ブロックが最初にチェックされ、空間的隣接ブロックがその後にチェックされる。利用可能な視差動きベクトルを含むブロックが識別されると、導出プロセスは終了する。マルチビューコーディング+深度(MVC+D:multi-view coding plus depth)と比較した米国仮特許出願第61/815,656号の提案方法のコーディング利得を以下の表(表1)に示す。Vetroら、「Joint Draft 8.0 on Multiview Video Coding」、ISO/IEC MPEG&ITU−T VCEG(ISO/IEC JTC1/SC29/WG11およびITU−T SG16 Q.6)の共同ビデオチーム(JVT)、第28回会合、ハノーバー、ドイツ、2008年7月20〜25日、文書番号JVT−AB204はMVC+Dの一草案である。
[0158]米国仮特許出願第61/815,656号の提案方法により、3D−AVCでは効率的にサポートされないテクスチャのみのコーディングを有効にする。同じテクスチャのみの構成を有効にするとき、現在の3D−AVCからのコーディング利得は1%にすぎない。
[0159]いくつかの例では、参照ビューの深度ビューコンポーネントにアクセスするNBDV導出プロセスが3D−AVCにおいて使用される。その内容全体が参照により本明細書に組み込まれる、2013年2月27日に出願された米国仮特許出願第61/770,268号(‘268出願)に記載されたように、NBDV導出プロセスは、ベース/参照ビューの深度ビューコンポーネントにアクセスすることによって、さらに改善され得る。‘268出願に記載されたように、ビデオコーダは、深度ビューコンポーネント中の深度ピクセルを位置特定するために、隣接ブロックから導出された視差ベクトルを使用することができ、その結果、ビデオコーダは視差ベクトルをさらに改良することができる。以下の表(表2)は、MVC+Dと比較されたときの、‘268出願の提案方法のコーディング利得を示す。
上記に示したように、‘268出願の提案方法は5%さらに多くのコーディング利得を実現するが、深度ビューコンポーネントにアクセスすることが依然として必要とされる。
[0160]3D−AVCでは、導出された視差ベクトル(DDV)は、2013年4月5日に出願された米国仮特許出願第61/809,174号(‘174出願)において、(ビュー間予測が有効にされるとき)スライス全体に関して維持され、各MBによって更新されるように提案されている。簡単のために、そのようなDDVはイントラMBに関して計算され得ない。3D−AVCでは、導出された視差ベクトルは、‘174出願において、(ビュー間予測が有効にされるとき)スライス全体に関して維持され、各CU(または、PU)によって更新されるように提案されている。NBDVが隣接ブロックから何の利用可能な視差動きベクトルも発見しないとき、DDVは現在ブロックの視差ベクトルになるように設定される。
[0161]第1のスライスのDDVは、一般に、ゼロに設定され得る。DDVは、復号順に更新され得る。したがって、以下の事例に関して、好ましくない復号依存性が発生し得る。第1に、AVCにおいてCAVLCエントロピーコーディングが使用される場合、ある種のデコーダ(たとえば、スマートデコーダ)は、ある遅延を伴って、MB行を並列に復号することができる。第2に、HEVCで波面並列処理(WPP)が有効にされるとき、現在コーディングユニットが以前のCTB行中のCUに依存するとは限らない。第3に、場合によっては、以前の行中にあるCUからのDDVを使用することの効率は低いが、水平方向の現在CUからは遠い。たとえば、現在CTB行の第1のCUは、以前のCTB行の最後のCUのグランドトゥルース視差とは非常に異なるグランドトゥルース視差を有し得ることが考えられる。一般に、グランドトゥルース視差は、グランドトゥルース深度(すなわち、ピクセルによって描かれたオブジェクトの実際の深度)から導出された視差であり得る。本開示の技法は、たとえば、‘174出願で提案された、導出された視差ベクトルの並列性に関して、さらなる柔軟性を実現し得る。
[0162]本開示の例示的な技法によれば、3D−HEVCまたは他のビデオコーディング規格では、CUの復号の間、現在CUがCTB行の第1のCUおよび/または1つのスライスの第1のCUになると、DDVはゼロに設定されるべきである。したがって、DDVの値は、CTB行にわたって保持されない。いくつかの例では、CUがイントラ予測でコーディングされているか、またはインター予測でコーディングされているかにかかわらず、CUが、新しいCTB行を開始するCTBの第1のCUである場合、ビデオコーダは、現在CTB行の第1のCTBのいずれかのCUをコーディングする前に、DDVをゼロになるように設定することによって、DDVを更新する。インターCUが従属ビュー中でコーディングされた後、インターCUがCTB行中の第1のCUであるときですら、ビデオコーダは、CUのDDVに等しくなるように、そのDDVを更新する。
[0163]さらに、3D−HEVCまたは他のビデオコーディング規格に関する本開示の1つもしくは複数の例示的な技法によれば、新しいタイルが開始するとき、または新しいタイルの新しいCTB行が開始するときですら、DDVはゼロになるように更新される。したがって、いくつかの例では、ビデオコーダは、タイルにわたってDDVの値を保持せず、タイルのCTB行にわたってDDVの値を保持しない。したがって、いくつかのそのような例では、スライスの各それぞれのCUに関して、ビデオコーダは、それぞれのCUがピクチャのタイルの第1のCUであると決定することに応答して、DDVを初期値(たとえば、ゼロ)に設定することができる。
[0164]少なくともいくつかの例では、タイルは、ピクチャ中の特定のタイル列および特定のタイル行中のCTBの矩形領域(または、他のタイプのブロック)である。タイル列は、そのピクチャの高さに等しい高さと、(たとえば、PPS中の)シンタックス要素によって指定された幅とを有するCTBの矩形領域(または、他のタイプのブロック)であり得る。タイル行は、(たとえば、PPS中の)シンタックス要素によって指定された高さと、そのピクチャの幅に等しい幅とを有するCTB(または、他のタイプのブロック)の矩形領域であり得る。
[0165]3D−HEVCまたは他のビデオコーディング規格に関する本開示の1つもしくは複数の例示的な技法によれば、ビデオコーダが各スライスまたはタイルを開始するとき、ビデオコーダは、DDVをゼロに再設定することができる。さらに、ビデオコーダは、WPPを使用して、スライスをコーディング(たとえば、符号化またはデコーダ)し得る。この例では、WWPが有効にされ、ビデオコーダがWWP(CTB行)のコーディングを開始するとき、ビデオコーダはDDVをゼロに再設定する。一般に、ビデオコーダがCTB行をコーディングし始めるとき、DDVは、以前のCTB行の最後のブロック(たとえば、CU)のDDVに等しい場合がある。したがって、ビデオコーダが以前のCTB行の最後のブロックをコーディングした後まで、ビデオコーダはCTB行の第1のブロックをコーディングし始めることができない可能性がある。これは、複数のCTB行の並列でのコーディングを実現するWPPに適合し得ない。この例では、WPPが有効にされるとき、ビデオコーダは、各CTB行に関して別個のDDVを維持することができる。本開示で説明するように、ビデオコーダがCTB行をコーディングし始めるとき、CTBに関するDDVをゼロに設定することは、WPPを容易にし得るが、これは、ビデオコーダは、以前のCTB行の最後のブロックのDDVが、CTB行の第1のブロックをコーディングし始めるのに先立って決定されるのをもはや待つ必要がないためである。このように、本開示の技法は、ビデオコーダの並列処理を高めることを有効にし得る。
[0166]さらに、3D−HEVCまたは他のビデオコーディング規格に関する本開示の1つもしくは複数の例示的な技法によれば、ビデオコーダはCTBにわたってDDVを保持しない。したがって、ビデオコーダがCTBの第1のCUもしくはPUを符号化または復号する前に、ビデオコーダは、常に、DDVをまず0に設定することができる。したがって、いくつかの例では、スライスの各それぞれのCUに関して、ビデオコーダは、それぞれのCUがCTBの第1のCUであると決定することに応答して、DDVを初期値(たとえば、ゼロ)に設定することができる。
[0167]H264/AVCおよび他のビデオコーディング規格では、ビデオコーダは、異なるプロファイル内で異なるエントロピーコーデックを使用することができる。たとえば、1つのプロファイル(たとえば、ベースラインプロファイル、拡張プロファイルなど)で動作するビデオコーダは、変換係数を表すシンタックス要素をコーディングするために、CAVLCを使用することができる。この例では、別のプロファイルで動作するビデオコーダは、変換係数を表すシンタックス要素をエントロピーコーディングするために、CABACを使用することができる。3D−AVCまたは他のコーディング規格に関する本開示の1つもしくは複数の例示的な技法によれば、ビデオコーダが1つのスライス内の新しいMB行および/または第1のMBから始めてMBを復号した後に、ビデオコーダはDDVをゼロに再設定する。いくつかの例では、エントロピーコーデックがCAVLCである場合のみ、ビデオコーダはDDVをゼロに再設定し、エントロピーコーデックがCABACである場合、ビデオコーダはDDVをゼロに再設定しない。この例では、エントロピーコーデックは、現在ブロック(たとえば、現在MB)についての変換係数を表すシンタックス要素をエントロピー符号化およびエントロピー復号するために使用されるコーデックであり得る。したがって、いくつかの例では、エントロピーコーデックがCAVLCである場合、ビデオコーダはDDVをゼロに再設定することができ、エントロピーコーディングされたがCABACである場合、DDVをゼロに再設定しない。
[0168]上で説明した本開示の技法のうちのいくつかまたはすべてによれば、スライス、タイル、CTB行、またはCTBの第1のCUについてDDVをゼロに設定する代わりに、ビデオコーダは、カメラパラメータ(たとえば、2つのビューの水平変位を変換することによって計算されたグローバル視差)にアクセスすることによって変換されるようにDDVを設定することができる。いくつかの例では、視差ベクトルは、128の深度値から変換され得る。一般に、カメラパラメータは、深度情報を視差情報に変換するために使用され得るパラメータであり得る。いくつかの例では、カメラパラメータは、SPSまたはVPS中でシグナリングされる。したがって、いくつかの例では、ビデオコーダは、1つまたは複数のカメラパラメータに少なくとも部分的に基づいて、DDVが設定される値を決定することができる。いくつかのそのような例では、1つまたは複数のカメラパラメータは、2つのビューの水平変位を含む。
[0169]3D−HEVCまたは他のビデオコーディング規格に関する提案方法の一例を次のように段階的に説明する。
1.1つのスライスまたは1つのピクチャを復号する前に、DDVがゼロに設定される。
2.(ビュー間予測が有効にされたビューコンポーネント中の)各CTBに関して復号順で、以下が適用される。
a.各CUに関して復号順で、以下が適用される。
i.CUが新しいCTB行を開始するCTBに属する場合、ビデオコーダはDDVをゼロに設定する。
ii.現在CUがイントラコーディングされない場合、ビデオコーダはNBDV導出プロセスを呼び出す。
1.ビデオコーダが、隣接ブロックをチェックすることによって、NBDVが利用不可能であると決定する場合、ビデオコーダは、現在CUの視差ベクトルをDDVに設定する。
2.さもなければ、ビデオコーダは、現在CUの視差ベクトルをNBDV導出プロセス(すなわち、NBDV)の結果に設定する。
iii.ビデオコーダは、3D−HEVCで説明するように、現在CUを復号する。
iv.現在CUがイントラコーディングされる場合、ビデオコーダは、現在CUの視差ベクトルに等しくなるようにDDVを更新する。
[0170]したがって、本開示の少なくとも一例によれば、ビデオデータのピクチャのスライスの各それぞれのCUに関して、ビデオエンコーダ20は、それぞれのCUがピクチャのCTB行の第1のCUである、またはそれぞれのCUがスライスの第1のCUであると決定することに応答して、DDVを、0、または他の値など、初期値に設定することができる。さらに、この例では、ビデオコーダ20は、それぞれのCUについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。本開示のいくつかの例では、NBDVプロセスを実行することは、視差動きベクトルについての現在ブロック(たとえば、CU、マクロブロックなど)の時間的および/または空間的隣接ブロックをチェックすることに関与する。そのような例では、NBDVプロセスが視差動きベクトルを有する時間的または隣接ブロックを識別することができる場合、NBDVプロセスは現在ブロックについての視差ベクトルを成功裏に決定することができる。
[0171]さらに、NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを識別しないとき(たとえば、隣接ブロックのいずれも視差動きベクトルを有さないとき)、ビデオコーダ20は、それぞれのCUについての視差ベクトルがDDVに等しいと決定することができる。さらに、ビデオコーダ20は、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックの符号化された表現を生成することができる。
[0172]同様の例では、ビデオデータのピクチャのスライスの各それぞれのCUに関して、ビデオデコーダ30は、それぞれのCUがピクチャのCTB行の第1のCUである、またはそれぞれのCUがスライスの第1のCUであると決定することに応答して、DDVを、0、または他の値など、初期値に設定することができる。さらに、この例では、ビデオデコーダ30は、それぞれのCUについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを識別しないとき(たとえば、隣接ブロックのいずれも視差動きベクトルを有さないとき)、ビデオデコーダ30は、それぞれのCUについての視差ベクトルがDDVに等しいと決定することができる。さらに、ビデオデコーダ30は、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックを再構成することができる。
[0173]いくつかの例では、H.264/AVCおよび他のビデオコーディング規格のコンテキストで、ビデオエンコーダ20は、ビデオデータのピクチャのスライスの各それぞれのマクロブロックについて次の動作を実行することができる。たとえば、それぞれのマクロブロックがピクチャのマクロブロック行の第1のマクロブロックである、またはそれぞれのマクロブロックがスライスの第1のマクロブロックであると決定することに応答して、ビデオエンコーダ20は、DDVを初期値(たとえば、ゼロ)に設定することができる。さらに、ビデオエンコーダ20は、それぞれのマクロブロックについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。NBDVプロセスを実行することがそれぞれのマクロブロックについて利用可能な視差ベクトルを識別しないとき、ビデオエンコーダ20は、それぞれのマクロブロックについての視差ベクトルがDDVに等しいと決定することができる。ビデオエンコーダ20は、それぞれのマクロブロックについての視差ベクトルに部分的に基づいて、それぞれのマクロブロックについてのサンプルブロック(すなわち、コーディングブロック)の符号化された表現を生成することができる。
[0174]同様に、H.264/AVCおよび他のビデオコーディング規格のコンテキストのいくつかの例では、ビデオデコーダ30は、ビデオデータのピクチャのスライスの各それぞれのマクロブロックについて次の動作を実行することができる。詳細には、それぞれのマクロブロックがピクチャのマクロブロック行の第1のマクロブロックである、またはそれぞれのマクロブロックがスライスの第1のマクロブロックであると決定することに応答して、ビデオデコーダ30は、DDVを初期値(たとえば、ゼロ)に設定することができる。さらに、ビデオデコーダ30は、それぞれのマクロブロックについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。NBDVプロセスを実行することがそれぞれのマクロブロックについて利用可能な視差ベクトルを識別しないとき、ビデオデコーダ30は、それぞれのマクロブロックについての視差ベクトルがDDVに等しいと決定することができる。ビデオデコーダ30は、それぞれのマクロブロックについての視差ベクトルに部分的に基づいて、それぞれのマクロブロックについてのサンプルブロック(すなわち、コーディングブロック)を再構成することができる。
[0175]図8は、本開示の1つまたは複数の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図8は、説明のために提供されるものであり、本開示で広く例示し説明する技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオエンコーダ20を記載する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0176]図8の例において、ビデオエンコーダ20は、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構成ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニット122と、動き補償ユニット124とを含む。他の例では、ビデオエンコーダ20は、より多いか、より少ないか、または異なる機能構成要素を含み得る。
[0177]ビデオエンコーダ20はビデオデータを受信し得る。ビデオエンコーダ20はビデオデータのピクチャのスライス中の各CTUを符号化してもよい。CTUの各々は、等しいサイズのルーマコーディングツリーブロック(CTB:coding tree block)と、ピクチャの対応するCTBとを有し(すなわち、それらに関連付けられ)得る。CTUを符号化することの一部として、予測処理ユニット100は4分木区分を実行して、CTUのCTBを徐々により小さいブロックに分割し得る。より小さいブロックはCUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUに関連付けられたCTBを4つの等しいサイズのサブブロックに区分し、サブブロックのうちの1つまたは複数を、4つの等しいサイズのサブサブブロックに区分し得、以下同様である。
[0178]ビデオエンコーダ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サイズ用の非対称区分化をサポートすることができる。
[0179]インター予測処理ユニット120は、CUの各PUに対してインター予測を実行することによってPUの予測データを生成し得る。PUの予測データは、PUの予測ブロックと、PUの動き情報とを含み得る。インター予測処理ユニット120は、PUがIスライス中にあるのか、Pスライス中にあるのか、Bスライス中にあるのかに応じて、CUのPUに対して異なる演算を実行し得る。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測処理ユニット120はPUに対してインター予測を実行しない。したがって、Iモード(登録商標)で符号化されたビデオブロックに対して、予測ブロックは、同じフレーム内の以前に符号化された隣接ブロックからの空間的予測を使用して形成される。
[0180]スライス中のPUは、イントラ予測され得るか、または単方向でインター予測され得る。たとえば、PUがPスライス中にある場合、動き推定ユニット122は、PUの参照領域について参照ピクチャリスト(たとえば、「RefPicList0」)中の参照ピクチャを探索し得る。PUの参照領域は、PUの予測ブロックに最も近接して対応するサンプルブロックを含んでいる参照ピクチャ内の領域であり得る。動き推定ユニット122は、PUの参照領域を含んでいる参照ピクチャのRefPicList0中の位置を示す参照インデックスを生成し得る。さらに、動き推定ユニット122は、PUの予測ブロックと参照領域に関連付けられた参照ロケーションとの間の空間変位を示す動きベクトルを生成し得る。たとえば、動きベクトルは、現在復号ピクチャにおける座標から参照ピクチャにおける座標までのオフセットを与える2次元ベクトルであり得る。動き推定ユニット122は、PUの動き情報として、参照インデックスと動きベクトルとを出力し得る。動き補償ユニット124は、PUの動きベクトルによって示された参照ロケーションにおける実際のまたは補間されたサンプルに基づいて、PUの予測ブロックを生成し得る。
[0181]Bスライス中のPUは、イントラ予測され得るか、単方向でインター予測され得るか、または双方向でインター予測され得る。したがって、PUがBスライス中にある場合、動き推定ユニット122は、PUについての単予測または双予測を実行し得る。PUについての単予測を実行するために、動き推定ユニット122は、PUの参照領域についてRefPicList0の参照ピクチャまたは第2の参照ピクチャリスト(「RefPicList1」)を探索し得る。動き推定ユニット122は、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUのサンプルブロックと参照領域に関連する参照ロケーションとの間の空間変位を示す動きベクトルと、参照ピクチャがRefPicList0中にあるのかRefPicList1中にあるのかを示す1つまたは複数の予測方向インジケータとを出力し得る。動き補償ユニット124は、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[0182]PUについての双方向インター予測を実行するために、動き推定ユニット122は、PUの参照領域についてRefPicList0中の参照ピクチャを探索し得、またPUの別の参照領域についてRefPicList1中の参照ピクチャを探索し得る。動き推定ユニット122は、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中の位置を示す参照インデックスを生成し得る。さらに、動き推定ユニット122は、参照領域に関連する参照ロケーションとPUのサンプルブロックとの間の空間変位を示す動きベクトルを生成し得る。PUの動き情報は、PUの参照インデックスと動きベクトルとを含み得る。動き補償ユニット124は、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[0183]イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによって、PU用の予測データを生成することができる。PUの予測データは、PUの予測ブロックと、様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス内、Pスライス内、およびBスライス内のPUに対してイントラ予測を実行することができる。
[0184]PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUについて複数セットの予測データを生成し得る。イントラ予測処理ユニット126は、隣接PUのサンプルに基づいて、PUについての予測ブロックを生成することができる。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モードを使用することができる。いくつかの例では、イントラ予測モードの数はPUの予測ブロックのサイズに依存し得る。
[0185]いくつかの例では、予測処理ユニット100は、ビュー間動き予測および/またはビュー間残差予測を実装することができる。ビュー間動き予測および/またはビュー間残差予測を実装するために、予測処理ユニット100は、スライスのブロック(たとえば、CU、PUなど)についての視差ベクトルを決定するためにNBDV導出プロセスを実行することができる。予測処理ユニット100は、ビュー間動き予測および/またはビュー間残差予測のために視差ベクトルを使用することができる。
[0186]本開示の1つまたは複数の技法によれば、スライスの各それぞれのCUに関して、予測処理ユニット100は、それぞれのCUが、ピクチャのCTB行の第1のCUである、またはそれぞれのCUがスライスの第1のCUであると決定することに応答して、DDVを初期値に設定することができる。さらに、予測処理ユニット100は、それぞれのCUについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを識別しないとき、予測処理ユニット100は、それぞれのCUについての視差ベクトルがDDVに等しいと決定することができる。このように、予測処理ユニット100は、スライスのCUについての視差ベクトルを決定することができる。
[0187]予測処理ユニット100は、PUについてインター予測処理ユニット120によって生成された予測データ、またはPUについてイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUの予測データを選択することができる。いくつかの例では、予測処理ユニット100は、これらの組の予測データのレート/歪み測定基準に基づいて、CUのPUについての予測データを選択する。選択された予測データの予測ブロックは、本明細書では、選択された予測ブロックと呼ばれることがある。
[0188]残差生成ユニット102は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)、ならびにCUのPUの選択された予測ブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)に基づいて、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を生成し得る。たとえば、残差生成ユニット102は、残差ブロック中の各サンプルが、CUのコーディングブロック中のサンプルとCUのPUの対応する選択された予測ブロック中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
[0189]変換処理ユニット104は、4分木区分を実行して、CUの(すなわち、それに関連付けられた)残差ブロックをCUのTUの(すなわち、それに関連付けられた)変換ブロックに区分し得る。したがって、TUは、ルーマ変換ブロックと、2つのクロマ変換ブロックとを有し(すなわち、それらに関連付けられ)得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも基づかないこともある。「残差4分木」(RQT)として知られる4分木構造は、領域の各々に関連付けられたノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
[0190]変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUのTUごとに係数ブロックを生成し得る。変換処理ユニット104は、TUの(すなわち、それに関連付けられた)変換ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を変換ブロックに適用し得る。いくつかの例において、変換処理ユニット104は変換ブロックに変換を適用しない。そのような例では、変換ブロックは係数ブロックとして扱われてもよい。
[0191]量子化ユニット106は、係数ブロック内の変換係数を量子化し得る。量子化プロセスは、変換係数の一部または全部に関連付けられたビット深度を低減し得る。たとえば、量子化中にnビット変換係数はmビット変換係数に切り捨てられ得、ただし、nはmよりも大きい。量子化ユニット106は、CUに関連付けられた量子化パラメータ(QP)値に基づいてCUのTUに関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連付けられたQPの値を調整することによって、CUに関連付けられた係数ブロックに適用される量子化の程度を調整することができる。量子化は情報の損失をもたらす恐れがあり、したがって、量子化変換係数は、元の係数よりも低い精度を有することがある。
[0192]逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、係数ブロックに逆量子化および1つまたは複数の逆変換を適用して、係数ブロックから残差ブロックを再構成し得る。再構成ユニット112は、再構成された残差ブロックを、予測処理ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに加算して、TUの(すなわち、それに関連付けられた)再構成された変換ブロックを生成し得る。ビデオエンコーダ20は、このようにCUの各TUのための変換ブロックを再構成することによってCUのコーディングブロックを再構成し得る。
[0193]フィルタユニット114は、1つまたは複数のデブロッキング演算を実行して、CUの(すなわち、それに関連付けられた)コーディングブロック中のブロッキングアーティファクトを低減し得る。復号ピクチャバッファ116は、フィルタユニット114が、再構成されたコーディングブロックに対して1つまたは複数のデブロッキング演算を実行した後、再構成されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、再構成されたコーディングブロックを含んでいる参照ピクチャを使用して、他のピクチャのPUに対してインター予測を実行し得る。加えて、イントラ予測処理ユニット126は、復号ピクチャバッファ116内の再構成されたコーディングブロックを使用して、CUと同じピクチャ内の他のPUに対してイントラ予測を実行することができる。
[0194]エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受信し得る。たとえば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受信し得、予測処理ユニット100からシンタックス要素を受信し得る。エントロピー符号化ユニット118は、このデータに対して1つまたは複数のエントロピー符号化演算を実行して、エントロピー符号化データを生成することができる。たとえば、エントロピー符号化ユニット118は、コンテキスト適応型可変長コーディング(CAVLC)演算、CABAC演算、変数−変数(V2V:variable-to-variable)レングスコーディング演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)演算、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算をデータに対して実行し得る。
[0195]ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。たとえば、ビットストリームはCUについてのRQTを表すデータを含み得る。ビットストリームはまた、エントロピーコーディングされないシンタックス要素を含み得る。
[0196]図9は、本開示で説明する、1つまたは複数の技法を実装することができる例示的なビデオデコーダ30を示すブロック図である。図9は、説明のために提供されるものであり、本開示において広く例示し説明する技法を限定するものではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいてビデオデコーダ30を記載する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0197]図9の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構成ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164とイントラ予測処理ユニット166とを含む。他の例では、ビデオデコーダ30は、より多いか、より少ないか、または異なる機能構成要素を含み得る。
[0198]エントロピー復号ユニット150は、NALユニットを受信し得、NALユニットをパースして、シンタックス要素を復号し得る。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて復号ビデオデータを生成することができる。
[0199]ビットストリームのNALユニットは、コード化スライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コード化スライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コード化スライスの各々は、スライスヘッダと、スライスデータとを含み得る。スライスヘッダは、スライスに関するシンタックス要素を含み得る。スライスヘッダ中のシンタックス要素は、スライスを含むピクチャに関連付けられたPPSを識別するシンタックス要素を含み得る。
[0200]ビットストリームからのシンタックス要素を復号することに加えて、ビデオデコーダ30は、CUに対して再構成演算を実行し得る。CUに対して再構成演算を実行するために、ビデオデコーダ30は、CUの各TUに対して再構成演算を実行し得る。CUの各TUに対して再構成演算を実行することによって、ビデオデコーダ30はCUの残差ブロックを再構成することができる。
[0201]CUのTUに対して再構成演算を実行することの一貫として、逆量子化ユニット154は、TUに関連付けられた係数ブロックを逆量子化する(inverse quantize)、すなわち量子化解除する(de-quantize)ことができる。逆量子化ユニット154は、TUのCUに関連付けられたQPの値を使用して、量子化の程度を決定することができ、同様に、逆量子化ユニット154が適用するための逆量子化の程度を決定することができる。
[0202]逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、係数ブロックに1つまたは複数の逆変換を適用して、TUに関連付けられた残差ブロックを生成することができる。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向性変換、または別の逆変換を、係数ブロックに適用することができる。
[0203]イントラ予測を使用してPUが符号化される場合、イントラ予測処理ユニット166は、イントラ予測を実行して、PUについての予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するPUの予測ブロックに基づいてPUの予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)を生成してもよい。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいてPUのイントラ予測モードを決定し得る。
[0204]予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を構成し得る。さらに、インター予測を使用してPUが符号化される場合、エントロピー復号ユニット150は、PUの動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUの1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUについての1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUについての予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)を生成することができる。
[0205]いくつかの例では、予測処理ユニット152は、ビュー間動き予測および/またはビュー間残差予測を実装することができる。ビュー間動き予測および/またはビュー間残差予測を実装するために、予測処理ユニット152は、スライスのブロック(たとえば、CU、PUなど)についての視差ベクトルを決定するためにNBDV導出プロセスを実行することができる。予測処理ユニット152は、ビュー間動き予測および/またはビュー間残差予測についての視差ベクトルを使用することができる。
[0206]本開示の1つまたは複数の技法によれば、スライスの各それぞれのCUに関して、予測処理ユニット152は、それぞれのCUがピクチャのCTB行の第1のCUである、またはそれぞれのCUがスライスの第1のCUであると決定することに応答して、DDVを初期値に設定することができる。さらに、予測処理ユニット152は、それぞれのCUについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる。NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを識別しないとき、予測処理ユニット152は、それぞれのCUについての視差ベクトルがDDVに等しいと決定することができる。このように、予測処理ユニット152は、スライスのCUについての視差ベクトルを決定することができる。
[0207]再構成ユニット158は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構成するために、適宜、CUのTUに関連付けられる変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)ならびにCUのPUの予測ブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)、すなわち、イントラ予測データまたはインター予測データのいずれかを使用することができる。たとえば、再構成ユニット158は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構成するために、変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)を予測ブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)の対応するサンプルに加算することができる。
[0208]フィルタユニット160は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)に関連付けられたブロッキングアーティファクトを低減するために、デブロッキング演算を実行することができる。ビデオデコーダ30は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために参照ピクチャを与え得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162中のブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)に基づいて、他のCUのPUに対してイントラ予測演算またはインター予測演算を実行し得る。このようにして、ビデオデコーダ30は、係数ブロックの変換係数レベルをビットストリームから取得し、変換係数レベルを逆量子化し、変換係数レベルに変換を適用して変換ブロックを生成し得る。さらに、ビデオデコーダ30は、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成することができる。ビデオデコーダ30は、表示のためにコーディングブロックを出力することができる。
[0209]図10は、本開示の1つまたは複数の技法による、ビデオコーダの例示的な動作を示すフローチャートである。図10は一例として提供される。本開示の技法によるビデオコーダの他の例示的な動作は、より多くのアクション、より少ないアクション、または異なるアクションを含み得る。図10の例は、CUおよびCTUを参照して説明されるが、本開示において、同様の例は、マクロブロック、マクロブロック区分など、他のタイプのブロックに関して企図される。
[0210]図10の例では、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、DDVをゼロに設定することができる(200)。たとえば、ビデオコーダは、DDVの水平成分と垂直成分の両方をゼロに設定することができる。ビデオコーダは、スライスまたはピクチャをコーディング(たとえば、符号化もしくは複合)する前に、DDVをゼロに設定することができる。
[0211]さらに、図10の例では、ビデオコーダは、現在スライスの各CTBに関してアクション(202)から(222)を実行することができる。このように、ビデオコーダは、現在スライスのCTBの各々をコーディングすることができる。したがって、図10の例では、ビデオコーダは、コーディングされるべき状態で残っている、現在スライス中のいずれかのCTB(すなわち、残りのCTB)か存在するかどうかを決定することができる(202)。現在スライス中に1つまたは複数の残りのCTBが存在する場合(202の「はい」)、ビデオコーダは、現在CTUの各CUをコーディングすることができる。したがって、現在CTUの1つまたは複数のCUがコーディングされるべき状態で残っている場合(202の「はい」)、ビデオコーダは、コーディングされるべき状態で残っている、現在CTUのいずれかのCU(すなわち、残りのCU)が存在するかどうかを決定することができる(204)。
[0212]現在CTUの1つまたは複数の残りのCUが存在する場合(204の「はい」)、ビデオコーダは、現在CTUが新しいCTB行の開始にあるかどうかを決定することができる(206)。現在CTUが新しいCTB行の開始にあると決定することに応答して(206の「はい」))、ビデオコーダはDDVをゼロに設定することができる(208)。DDVをゼロに設定するか、または現在CTUが新しいCTB行の開始にないと決定した後(206の「いいえ」)、ビデオコーダは、現在CTUの現在CUがイントラコーディングされているかどうかを決定することができる(210)。
[0213]現在CUがイントラコーディングされていないと決定することに応答して(210の「いいえ」)、ビデオコーダはNBDV導出プロセスを呼び出す(212)。したがって、図10および本開示の潜在的に他の例では、ビデオコーダは、現在CUがイントラコーディングされていない場合のみ、NBDVプロセスを実行することができる。
[0214]NBDV導出プロセスは、隣接ブロックの視差動きベクトルに基づいて、現在CUについての視差ベクトルを決定することを試みることができる。たとえば、ビデオコーダがNBDV導出プロセスを実施するとき、ビデオコーダは、時間的隣接ブロックを決定することができる。時間的隣接ブロックが視差動きベクトルを有する場合、ビデオコーダは、時間的隣接ブロックの視差動きベクトルに基づいて、現在ブロック(たとえば、CU,マクロブロックなど)の視差ベクトルを設定することができる。たとえば、ビデオコーダは、現在ブロックの視差ベクトルを時間的隣接ブロックの視差動きベクトルに等しく設定することができる。
[0215]さらに、この例では、時間的隣接ブロックが視差動きベクトルを有さない場合、ビデオコーダは、視差動きベクトルを有する空間的隣接ブロックについての空間的隣接ブロックをチェックすることができる。この例では、空間的隣接ブロックのうちの1つが視差動きベクトルを有する場合、ビデオコーダは、空間的隣接ブロックの視差動きベクトルに基づいて(たとえば、それに等しく)現在ブロックの視差ベクトルを設定することができる。この例では、チェックされた時間的または空間的隣接ブロックのうちのいずれも視差動きベクトルを有さない場合、NBDV導出プロセスは現在ブロックについての視差ベクトルを決定するのに失敗する可能性がある。言い換えると、この例および他の例では、チェックされた時間的または空間的隣接ブロックのうちのいずれも視差動きベクトルを有さない場合、NBDV導出プロセスは現在ブロックについて利用可能な視差ベクトルを識別しない。
[0216]図10の例では、ビデオコーダは、NBDV導出プロセスが、現在CUについての視差ベクトルを識別するかどうかを決定する(すなわち、NBDVが利用可能であると決定する)(214)。NBDVが利用可能でない場合(214の「いいえ」)、ビデオコーダは、現在CUの視差ベクトルをDDVに設定することができる(216)。さもなければ、NBDVが利用可能である場合(214の「はい」)、ビデオコーダは、現在CUの視差ベクトルをNBDVに設定することができる(218)。したがって、図10の例および本開示の潜在的な他の例では、NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを決定するとき、ビデオコーダは、それぞれのCUについての視差ベクトルをNBDVプロセス(すなわち、NBDV)によって識別された利用可能な視差ベクトルに等しく設定することができる。
[0217]さらに、現在CUの視差ベクトルを設定した後、ビデオコーダは、現在CUの視差ベクトルに等しくなるようにDDVを更新することができる(220)。したがって、図10の例および本開示の潜在的に他の例では、それぞれのCUがイントラコーディングされていないと決定することに応答して、ビデオコーダは、それぞれのCUの視差ベクトルに等しくなるようにDDVを更新することができる。
[0218]DDVを更新した後、または現在CUがイントラコーディングされている決定した後(210の「はい」)、ビデオコーダは、現在CUをコーディング(たとえば、符号化または復号)することができる(222)。たとえば、ビデオコーダは、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックを再構成することができる。いくつかの例では、ビデオコーダは、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックの符号化された表現を生成することができる。
[0219]図11Aは、本開示の1つまたは複数の技法による、ビデオエンコーダ20の例示的な動作を示すフローチャートである。図11Aは一例として提供される。本開示の技法によるビデオエンコーダの他の例示的な動作は、より多くのアクション、より少ないアクション、または異なるアクションを含み得る。
[0220]図11Aの例では、ビデオエンコーダ20は、ビデオデータのピクチャのスライスの各それぞれのCUに関して、アクション(300)から(306)を実行することができる。詳細には、それぞれのCUがピクチャのCTB行の第1のCUである、またはそれぞれのCUがスライスの第1のCUであると決定することに応答して、ビデオエンデコーダ20は、DDVを初期値(たとえば、ゼロ)に設定することができる(300)。さらに、ビデオエンコーダ20は、それぞれのCUについての利用可能な視差ベクトルを決定することを試みるNBDVプロセスを実行することができる(302)。NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを決定しないとき、ビデオエンコーダ20は、それぞれのCUについての視差ベクトルがDDVに等しいと決定することができる(304)。
[0221]ビデオエンコーダ20は、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックの符号化された表現を生成することができる(306)。たとえば、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックの符号化された表現を生成することの一環として、ビデオエンコーダ20は、本開示の他の場所で説明するように、それぞれのCUについてのビュー間動き予測および/またはビュー間残差予測を実行するために、それぞれのCUについての視差ベクトルを使用することができる。
[0222]図11Bは、本開示の1つまたは複数の技法による、ビデオデコーダ30の例示的な動作を示すフローチャートである。図11Bは一例として提供される。本開示の技法によるビデオデコーダの他の例示的な動作は、より多くのアクション、より少ないアクション、または異なるアクションを含み得る。
[0223]図11Bの例では、ビデオデコーダ30は、ビデオデータのピクチャのスライスの各それぞれのCUに関して、アクション(350)から(356)を実行することができる。詳細には、それぞれのCUがピクチャのCTB行の第1のCUである、またはそれぞれのCUがスライスの第1のCUであると決定することに応答して、ビデオデコーダ30は、DDVを初期値(たとえば、ゼロ)に設定することができる(350)。さらに、ビデオデコーダ30は、それぞれのCUについての利用可能な視差ベクトルを決定することを試みるNBDVプロセスを実行することができる(352)。NBDVプロセスを実行することがそれぞれのCUについての利用可能な視差ベクトルを決定しないとき、ビデオデコーダ30は、それぞれのCUについての視差ベクトルがDDVに等しいと決定することができる(354)。
[0224]ビデオデコーダ30は、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックを再構成することができる(356)。たとえば、それぞれのCUについての視差ベクトルに部分的に基づいて、それぞれのCUについてのコーディングブロックを再構成することの一環として、ビデオコーダは、本開示の他の場所で説明するように、それぞれのCUについてのビュー間動き予測および/またはビュー間残差予測を実行するために、それぞれのCUについての視差ベクトルを使用することができる。
[0225]図12Aは、本開示の1つまたは複数の技法による、ビデオエンコーダ20の例示的な動作を示すフローチャートである。図12Aは一例として提供される。本開示の技法によるビデオエンコーダの他の例示的な動作は、より多くのアクション、より少ないアクション、または異なるアクションを含み得る。
[0226]図12Aの例では、ビデオエンコーダ20は、ビデオデータのピクチャのスライスの各それぞれのマクロブロックに関して、アクション(400)から(406)を実行することができる。詳細には、それぞれのマクロブロックがピクチャのマクロブロック行の第1のマクロブロックである、またはそれぞれのマクロブロックがスライスの第1のマクロブロックであると決定することに応答して、ビデオデコーダ20は、DDVを初期値(たとえば、ゼロ)に設定することができる(400)。さらに、ビデオエンコーダ20は、それぞれのマクロブロックについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる(402)。NBDVプロセスを実行することがそれぞれのマクロブロックについて利用可能な視差ベクトルを識別しないとき、ビデオエンコーダ20は、それぞれのマクロブロックについての視差ベクトルがDDVに等しいと決定することができる(404)。
[0227]ビデオエンコーダ20は、それぞれのマクロブロックについての視差ベクトルに部分的に基づいて、それぞれのマクロブロックについてのサンプルブロック(すなわち、コーディングブロック)の符号化された表現を生成することができる(406)。たとえば、それぞれのマクロブロックについての視差ベクトルに部分的に基づいて、それぞれのマクロブロックについてのサンプルブロックの符号化された表現を生成することの一環として、ビデオエンコーダ20は、本開示の他の場所で説明するように、それぞれのマクロブロックについてのビュー間動き予測および/またはビュー間残差予測を実行するために、それぞれのマクロブロックについての視差ベクトルを使用することができる。
[0228]図12Bは、本開示の1つまたは複数の技法による、ビデオデコーダ30の例示的な動作を示すフローチャートである。図12Bは一例として提供される。本開示の技法によるビデオデコーダの他の例示的な動作は、より多くのアクション、より少ないアクション、または異なるアクションを含み得る。
[0229]図12Bの例では、ビデオデコーダ30は、ビデオデータのピクチャのスライスの各それぞれのマクロブロックに関して、アクション(450)から(456)を実行することができる。詳細には、それぞれのマクロブロックがピクチャのマクロブロック行の第1のマクロブロックである、またはそれぞれのマクロブロックがスライスの第1のマクロブロックであると決定することに応答して、ビデオデコーダ30は、DDVを初期値(たとえば、ゼロ)に設定することができる(450)。さらに、ビデオデコーダ30は、それぞれのマクロブロックについての視差ベクトルを決定することを試みるNBDVプロセスを実行することができる(452)。NBDVプロセスを実行することがそれぞれのマクロブロックについて利用可能な視差ベクトルを識別しないとき、ビデオデコーダ30は、それぞれのマクロブロックについての視差ベクトルがDDVに等しいと決定することができる(454)。
[0230]ビデオデコーダ30は、それぞれのマクロブロックについての視差ベクトルに部分的に基づいて、それぞれのマクロブロックについてのサンプルブロックを再構成することができる(456)。たとえば、それぞれのマクロブロックについての視差ベクトルに部分的に基づいて、それぞれのマクロブロックについてのサンプルブロックを再構成することの一環として、ビデオコーダは、本開示の他の場所で説明するように、それぞれのマクロブロックについてのビュー間動き予測および/またはビュー間残差予測を実行するために、それぞれのマクロブロックについての視差ベクトルを使用することができる。
[0231]1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアに実装される場合、機能は、1つもしくは複数の命令もしくはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行することができる。コンピュータ可読媒体は、たとえば、データ記憶媒体などの有形媒体、または、たとえば通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体に対応する、コンピュータ可読記憶媒体を含むことができる。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または、(2)信号もしくは搬送波などの通信媒体に対応することができる。データ記憶媒体は、本開示に記載された技法を実装するための命令、コードおよび/またはデータ構造を取り出すために、1つもしくは複数のコンピュータ、または1つもしくは複数のプロセッサによってアクセスできる任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含むことができる。
[0232]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る、任意の他の媒体を備え得る。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイ(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
[0233]命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)などの1つもしくは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書に記載された技法の実施に適した任意の他の構造のいずれかを指す場合がある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび/もしくはソフトウェアモジュール内に提供され得、または複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中で十分に実装され得る。
[0234]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上で説明されたように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとともに、上で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わされてもよく、または相互動作可能なハードウェアユニットの集合によって与えられてもよい。
[0235]様々な例について説明してきた。これらおよび他の例は、以下の特許請求の範囲内である。