[0026]高効率ビデオコーディング(HEVC)では、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)が現在ピクチャの現在スライスをコーディングし始めるとき、ビデオコーダは、現在スライスのための1つまたは複数の参照ピクチャリストを生成し得る。参照ピクチャリストの各々は参照ピクチャのリストを含む。参照ピクチャ中のデータは、現在スライス中のデータを予測するために使用され得る。本開示では、スライスのための参照ピクチャリストは、予測ユニット(PU)がスライス中にある場合、PUに関連する。PUに関連する参照ピクチャリストは、本明細書ではPUの参照ピクチャリストと呼ばれることもある。さらに、現在ピクチャの各PUは、1つまたは複数の動きベクトルと、1つまたは複数の参照インデックスと、1つまたは複数の予測方向インジケータとを有し得る。PUの動きベクトルと、参照インデックスと、予測方向インジケータとは、PUの動き情報と総称されることがある。PUの参照インデックスは、参照ピクチャリスト内の、参照ピクチャの位置を示し得る。PUの動きベクトルは、PUの予測ブロックと参照ピクチャ中のロケーションとの間の空間変位を示し得る。
[0027]いくつかの例では、PUの動き情報は、マージ/スキップモードまたは高度動きベクトル予測(AMVP:advanced motion vector prediction)モードを使用してシグナリングされ得る。ビデオエンコーダがマージモードを使用して現在PUの動き情報をシグナリングするとき、ビデオエンコーダは、1つまたは複数のマージング候補を含むマージング候補リストを生成し得る。マージング候補の各々は、空間動きベクトル予測子または時間動きベクトル予測子(すなわち、TMVP)の動き情報を指定する。空間動きベクトル予測子は、現在ピクチャ(すなわち、現在PUを含むピクチャ)中のPUであり得る。TMVPは、時間参照ピクチャ(すなわち、現在ピクチャとは異なる時間インスタンスにおいて出現するピクチャ)中のPUであり得る。TMVPの動き情報を指定するマージング候補は「時間マージング候補」と呼ばれることがある。
[0028]マージング候補リストを生成した後に、ビデオエンコーダは、マージング候補のうちの1つを選択し、ビットストリーム中に、マージング候補リスト内の、選択されたマージング候補の位置を示すシンタックス要素を含め得る。ビデオデコーダが現在PUを復号するとき、ビデオデコーダは同じマージング候補リストを生成し得る。さらに、ビデオデコーダは、ビットストリームからシンタックス要素を取得し、そのシンタックス要素を使用してマージング候補リスト中の選択されたマージング候補を決定し得る。ビデオデコーダは、次いで、選択されたマージング候補によって示される動き情報を現在PUの動き情報として使用し得る。
[0029]HEVCでは、時間マージング候補の参照インデックスは常に0に設定される。したがって、時間マージング候補の参照インデックスは、常に、現在PUに関連する参照ピクチャリスト中の第1の参照ピクチャを示す。さらに、TMVPの参照インデックスが、現在PUに関連する参照ピクチャリスト中の第1の参照ピクチャ以外のピクチャを示す場合、時間マージング候補は、TMVPの動きベクトルのスケーリングされたバージョンを指定し得る。ビデオコーダは、現在PUに関連する参照ピクチャリスト中の第1の参照ピクチャと、TMVPの参照インデックスによって示される参照ピクチャとの間の時間距離に基づいて、TMVPの動きベクトルのスケーリングされたバージョンを生成し得る。
[0030]HEVCのマルチビューおよび3次元ビデオ(3DV)コーディング拡張(すなわち、MV−HEVCおよび3D−HEVC)では、ビットストリームは複数のビューを含み得る。ビューの各々は、異なる閲覧パースペクティブからのシーンを表し得る。さらに、MV−HEVCおよび3D−HEVCはビュー間予測をサポートする。ビュー間予測では、現在ピクチャのスライスのための参照ピクチャリストは、現在ピクチャと同じ時間インスタンスに関連するが、現在ピクチャとは異なるビューに関連する、1つまたは複数の参照ピクチャを含み得る。現在ピクチャと同じ時間インスタンスに関連するが、現在ピクチャとは異なるビューに関連する参照ピクチャは、「ディスパリティ参照ピクチャ」または「ビュー間参照ピクチャ」と呼ばれることがある。対照的に、現在ピクチャと同じビューに関連するが、現在ピクチャとは異なる時間インスタンスに関連する参照ピクチャは、「時間参照ピクチャ」と呼ばれることがある。ディスパリティ参照ピクチャおよび時間参照ピクチャは、異なる「タイプ」の参照ピクチャ(すなわち、異なる「参照ピクチャタイプ」)に属すると言われる。
[0031]PUの参照インデックスは、参照ピクチャリスト中の、ディスパリティ参照ピクチャの位置を示し得る。参照ピクチャリスト中の、ディスパリティ参照ピクチャの位置を示す参照インデックスに関連する動きベクトルは「ディスパリティ動きベクトル」と呼ばれることがある。同様に、PUの参照インデックスは、参照ピクチャリスト中の、時間参照ピクチャの位置を示し得る。参照ピクチャリスト中の、時間参照ピクチャの位置を示す参照インデックスに関連する動きベクトルは「時間動きベクトル」と呼ばれることがある。
[0032]上述のように、マージング候補リストは時間マージング候補を含み得る。時間マージング候補は、TMVPの動き情報に基づいて動き情報を指定し得る。MV−HEVCおよび3D−HEVCでは、TMVP自体がディスパリティ動きベクトルおよび/または時間動きベクトルを有し得る。TMVPの動きベクトルがディスパリティ動きベクトルであり、現在PUに関連する参照ピクチャリスト中の第1の参照ピクチャが時間参照ピクチャである場合、ビデオコーダはTMVPの動きベクトルをスケーリングしない。したがって、TMVPの動きベクトルがディスパリティ動きベクトルであり、現在PUに関連する参照ピクチャリスト中の第1の参照ピクチャが時間参照ピクチャである場合、TMVPに基づく時間マージング候補は、0に等しい参照インデックスを指定し、スケーリングされていない動きベクトルを指定する。したがって、ビデオコーダは、時間動きベクトルのような時間マージング候補の動きベクトルを、この動きベクトルは最初はディスパリティ動きベクトルであるにもかかわらず、使用し得る。
[0033]同様に、TMVPの動きベクトルが時間動きベクトルであり、現在PUに関連する参照ピクチャリストの第1の参照ピクチャがディスパリティ動きベクトルである場合、ビデオコーダはTMVPの動きベクトルをスケーリングしない。そうではなく、ビデオコーダは、0に等しい参照インデックスと、TMVPのスケーリングされていない動きベクトルとを指定する時間マージング候補を生成し得る。ビデオコーダは、時間マージング候補の動きベクトルは最初は時間動きベクトルであるにもかかわらず、この動きベクトルをディスパリティ動きベクトルとして使用し得る。時間動きベクトルをディスパリティ動きベクトルとして使用し、ディスパリティ動きベクトルを時間動きベクトルとして使用すると、著しい不正確さが生じ得る。したがって、TMVPによって示される参照ピクチャと、現在PUに関連する対応する参照ピクチャリストの第1の参照ピクチャとが、異なる参照ピクチャタイプに属するシナリオでは、ビデオコーダは、得られた時間マージング候補を使用する可能性が低い。これは、コーディング効率を減少させ、ビットストリームのサイズを増加させ得る。
[0034]本開示の1つまたは複数の技法はこの問題を解決し得る。たとえば、現在ビデオユニットに関連する参照ピクチャリスト中の初期参照ピクチャがRF0と示され得る。この例では、現在ビデオユニットのための時間動きベクトル予測子(TMVP:temporal motion vector predictor)の参照インデックスはRF1と示され得る。RF0とRF1とが同じ参照ピクチャタイプに属するとき、ビデオコーダは、時間マージング候補の参照インデックスをデフォルト値(たとえば、0)に設定し得る。そうではなく、RF0とRF1とが異なる参照ピクチャタイプに属する場合、ビデオコーダは、時間マージング候補の参照インデックスをデフォルト値以外の値に設定し得る。たとえば、RF0とRF1とが異なる参照ピクチャタイプに属するとき、ビデオコーダは、現在ビデオユニット(たとえば、現在PU)のマージング候補リスト中の時間マージング候補の参照インデックスを非デフォルト値に設定し得る。時間マージング候補の参照インデックスは、現在ビデオユニットに関連する参照ピクチャリスト中の位置を示す。
[0035]ビデオコーダは時間マージング候補の参照インデックスを常にデフォルト値(たとえば、0)に設定するとは限らないので、時間マージング候補は、参照ピクチャリスト中の他の参照ピクチャを示し得る。これにより、時間マージング候補によって指定される動き情報の使用が、他のマージング候補によって指定される動き情報よりも良好なレート/ひずみ値をもたらす確率が増加し得る。したがって、本開示の技法は、コーディング効率を高め、ビットストリームサイズを減少させ得る。
[0036]図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用する「ビデオコーダ」という用語は、総称的にビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、総称的にビデオ符号化またはビデオ復号を指すことがある。
[0037]図1に示すように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は符号化ビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化ビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0038]ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備み得る。
[0039]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化ビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化ビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化ビデオデータを変調し得、変調されたビデオデータを宛先デバイス14に送信し得る。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルあるいは1つまたは複数の物理伝送線路など、ワイヤレスおよび/またはワイヤード通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)など、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を可能にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0040]別の例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して、記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化ビデオデータを記憶するための他の好適なデジタル記憶媒体など、様々なローカルにアクセスされるデータ記憶媒体を含み得る。
[0041]さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間記憶デバイスに記憶された、符号化ビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶することと、符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバとしては、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブがある。
[0042]宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化ビデオデータにアクセスし得る。データ接続の例示的なタイプとしては、ファイルサーバに記憶された符号化ビデオデータにアクセスするために好適な、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、またはその両方の組合せがあり得る。ファイルサーバからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
[0043]本開示の技法は、ワイヤレス適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の適用例など、様々なマルチメディア適用例をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの適用例をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
[0044]図1は一例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含むとは限らないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データがローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータを符号化し、メモリに記憶し得、および/またはビデオ復号デバイスはメモリからデータを取り出し、復号し得る。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって実行される。
[0045]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、たとえばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/またはビデオデータを生成するためのコンピュータグラフィックスシステム、あるいはビデオデータのそのようなソースの組合せを含み得る。
[0046]ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化ビデオデータを直接送信する。他の例では、符号化ビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために記憶媒体またはファイルサーバ上に記憶され得る。
[0047]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して符号化ビデオデータを受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化され得るかまたはその外部にあり得る。概して、ディスプレイデバイス32は、復号ビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスを備え得る。
[0048]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェアなど、様々な好適な回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。本技法が部分的にソフトウェアで実装される場合、デバイスは、好適な非一時的コンピュータ可読記憶媒体にソフトウェアの命令を記憶し得、1つまたは複数のプロセッサを使用してその命令をハードウェアで実行して、本開示の技法を実行し得る。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれも、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。
[0049]本開示では、概して、ビデオエンコーダ20が、ある情報をビデオデコーダ30などの別のデバイスに「シグナリング」することに言及することがある。「シグナリング」という用語は、概して、圧縮ビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指し得る。そのような通信は、リアルタイムまたはほぼリアルタイムで行われ得る。代替的に、そのような通信は、符号化時に符号化ビットストリーム中で、たとえば、ファイルサーバまたはストリーミングサーバを介してリモートアクセス可能な記憶媒体あるいはローカルアクセス可能な記憶デバイスなど、コンピュータ可読記憶媒体にシンタックス要素を記憶するときに行われることがあるなど、ある時間期間にわたって行われ得、次いで、これらの要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
[0050]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、そのスケーラブルビデオコーディング(SVC:Scalable Video Coding)拡張、マルチビュービデオコーディング(MVC:Multiview Video Coding)拡張、およびMVCベースの3DV拡張を含む、ISO/IEC MPEG−4 Visualおよび(ISO/IEC MPEG−4 AVCとしても知られる)ITU−T H.264などのビデオ圧縮規格に従って動作する。場合によっては、MVCベースの3DVに準拠する任意の合法的ビットストリームは、MVCプロファイル、たとえばステレオハイプロファイルに準拠するサブビットストリームを常に含んでいる。さらに、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、または別のビデオコーディング仕様に従って動作し得る。
[0051]図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 7」と呼ばれるHEVC規格のドラフトは、2013年7月8日現在、http://phenix.int-evry.fr/jct/doc_end_user/documents/9_Geneva/wg11/JCTVC-I1003-v5.zipから入手可能である、Brossら、「High Efficiency Video Coding (HEVC) text specification draft 7」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのビデオコーディング共同研究部会(JCT−VC)、第9回会合、ジュネーブ、スイス、2012年4月〜5月に記載されている。「HEVC Working Draft 8」と呼ばれるHEVC規格の別のドラフトは、2013年7月8日現在、http://phenix.int-evry.fr/jct/doc_end_user/documents/11_Shanghai/wg11/JCTVC-K1003-v13.zipから入手可能である、Brossら、「High Efficiency Video Coding (HEVC) text specification draft 8」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのビデオコーディング共同研究部会(JCT−VC)、第10回会合、上海、中国、2012年10月に記載されている。「HEVC Working Draft 9」と呼ばれるHEVC規格の別のドラフトは、2013年7月8日現在、http://phenix.int-evry.fr/jct/doc_end_user/documents/10_Stockholm/wg11/JCTVC-J1003-v8.zipから入手可能である、Brossら、「High Efficiency Video Coding (HEVC) text specification draft 9」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのビデオコーディング共同研究部会(JCT−VC)、第11回会合、ストックホルム、スウェーデン、2012年7月に記載されている。
[0052]さらに、HEVCのためのSVC拡張を生成するための取り組みが進行中である。HEVCのSVC拡張はSHEVCと呼ばれることがある。さらに、VCEGとMPEGとの3Dビデオコーディング共同研究部会(JCT−3C:Joint Collaboration Team on 3D Video Coding)がHEVCに基づく3DV規格を開発しており、その規格化の取り組みの一部は、HEVCに基づくマルチビューコーデック(「MV−HEVC」)と、HEVCに基づく3DVコーディング(「3D−HEVC」)の別の一部との規格化を含む。HEVCの3DV拡張は、HEVCベースの3DVまたは3D−HEVCと呼ばれることがある。3D−HEVCは、少なくとも部分的に、Schwarzら、「Description of 3D Video Coding Technology Proposal by Fraunhofer HHI (HEVC compatible configuration A)、ISO/IEC JTC1/SC29/WG11、ドキュメントMPEG11/M22570、ジュネーブ、スイス、2011年11/12月、およびSchwarzら、「Description of 3D Video Coding Technology Proposal by Fraunhofer HHI (HEVC compatible configuration B)、ISO/IEC JTC1/SC29/WG11、ドキュメントMPEG11/M22571、ジュネーブ、スイス、2011年11/12月において提案された解決策に基づく。本明細書で3D−HTMと呼ぶ、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は、2013年7月8日現在、https://hevc.hhi.fraunhofer.de/svn/svn_3DVCSoftware/tags/HTM-3.0/から入手可能である。代替的に、3D−HEVCのための3D−HTMのためのソフトウェアは、2013年7月8日現在、https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/trunk/から入手可能である。
[0053]HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは、一般に一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCb、およびSCrと表される3つのサンプルアレイを含み得る。SLは、ルーマサンプル(luma)の2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」(chroma)サンプルと呼ばれることもある。他の例では、ピクチャは、モノクロームであり得、ルーマサンプルのアレイのみを含み得る。サンプルはピクセル領域値であり得る。
[0054]ピクチャの符号化表現を生成するために、ビデオエンコーダ20は、コーディングツリーユニット(CTU:coding tree unit)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロックと、クロマサンプルの2つの対応するコーディングツリーブロックと、コーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造とを備え得る。コーディングツリーブロックはサンプルのN×Nブロックであり得る。CTUは「ツリーブロック」または「最大コーディングユニット」(LCU:largest coding unit)と呼ばれることもある。HEVCのCTUは、H.264/AVCなど、他のビデオコーディング規格のマクロブロックに概して類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU:coding unit)を含み得る。スライスは、ラスタ走査順序で連続的に順序付けられた整数個のCTUを含み得る。
[0055]本開示では、サンプルの1つまたは複数のブロックと、サンプルの1つまたは複数のブロックのサンプルをコーディングするために使用されるシンタックス構造とを指すために、「ビデオユニット」または「ビデオブロック」という用語を使用することがある。ビデオユニットの例示的なタイプとしては、CTU、CU、PU、変換ユニット(TU:transform unit)、マクロブロック、マクロブロックパーティションなどがあり得る。
[0056]コード化CTUを生成するために、ビデオエンコーダ20は、CTUのコーディングツリーブロックに対して再帰的に4分木分割を実行してコーディングツリーブロックをコーディングブロックに分割し得、したがって「コーディングツリーユニット」という名称がある。コーディングブロックはサンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、CbサンプルアレイおよびCrサンプルアレイを有するピクチャの、ルーマサンプルのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックと、コーディングブロックのサンプルをコーディングするために使用されるシンタックス構造とを備え得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ピクチャのルーマサンプルの予測ブロックと、クロマサンプルの2つの対応する予測ブロックと、予測ブロックサンプルを予測するために使用されるシンタックス構造とを備え得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックのための予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成得る。
[0057]ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、PUのための予測ブロックを生成し得る。ビデオエンコーダ20がイントラ予測を使用してPUの予測ブロックを生成する場合、ビデオエンコーダ20は、PUに関連するピクチャの復号サンプルに基づいて、PUの予測ブロックを生成し得る。
[0058]ビデオエンコーダ20がインター予測を使用してPUの予測ブロックを生成する場合、ビデオエンコーダ20は、PUに関連付するピクチャ以外の1つまたは複数のピクチャの復号サンプルに基づいて、PUの予測ブロックを生成し得る。インター予測は、単方向インター予測(すなわち、単予測)または双方向インター予測(すなわち、双予測)であり得る。単予測または双予測を実行するために、ビデオエンコーダ20は、現在スライスのための第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを生成し得る。参照ピクチャリストの各々は、1つまたは複数の参照ピクチャを含み得る。単予測を使用するとき、ビデオエンコーダ20は、参照ピクチャ内の参照ロケーションを決定するために、RefPicList0とRefPicList1の一方または両方の中の参照ピクチャを探索し得る。さらに、単予測を使用するとき、ビデオエンコーダ20は、参照ロケーションに対応するサンプルに少なくとも部分的に基づいて、PUのための予測ブロックを生成し得る。その上、単予測を使用するとき、ビデオエンコーダ20は、PUの予測ブロックと参照ロケーションとの間の空間変位を示す単一の動きベクトルを生成し得る。PUの予測ブロックと参照ロケーションとの間の空間変位を示すために、動きベクトルは、PUの予測ブロックと参照ロケーションとの間の水平変位を指定する水平成分を含み得、PUの予測ブロックと参照ロケーションとの間の垂直変位を指定する垂直成分を含み得る。
[0059]PUを符号化するために双予測を使用するとき、ビデオエンコーダ20は、RefPicList0中の参照ピクチャ中の第1の参照ロケーションと、RefPicList1中の参照ピクチャ中の第2の参照ロケーションとを決定し得る。ビデオエンコーダ20は、次いで、第1の参照ロケーションと第2の参照ロケーションとに対応するサンプルに少なくとも部分的に基づいて、PUのための予測ブロックを生成し得る。その上、PUを符号化するために双予測を使用するとき、ビデオエンコーダ20は、PUの予測ブロックと第1の参照ロケーションとの間の空間変位を示す第1の動きベクトル、およびPUの予測ブロックと第2の参照ロケーションとの間の空間変位を示す第2の動きベクトルを生成し得る。
[0060]ビデオエンコーダ20が、CUの1つまたは複数のPUのための予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成した後に、ビデオエンコーダ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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0061]さらに、ビデオエンコーダ20は、4分木分割を使用して、CUのルーマ残差ブロック、Cb残差ブロックおよびCr残差ブロックを1つまたは複数のルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロックに分解し得る。変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロックと、クロマサンプルの2つの対応する変換ブロックと、変換ブロックサンプルを変換するために使用されるシンタックス構造とを備え得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連し得る。TUに関連するルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックはCUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックはCUのCr残差ブロックのサブブロックであり得る。
[0062]ビデオエンコーダ20は、TUのルーマ変換ブロックに1つまたは複数の変換を適用してTUのためのルーマ係数ブロックを生成し得る。係数ブロックは変換係数の2次元ブロックであり得る。変換係数はスカラー量であり得る。ビデオエンコーダ20は、TUのCb変換ブロックに1つまたは複数の変換を適用してTUのためのCb係数ブロックを生成し得る。ビデオエンコーダ20は、TUのCr変換ブロックに1つまたは複数の変換を適用してTUのためのCr係数ブロックを生成し得る。
[0063]係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後に、ビデオエンコーダ20は係数ブロックを量子化し得る。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現する処理を指す。さらに、ビデオエンコーダ20は、ピクチャのCUのTUの変換ブロックを再構成するために、変換係数を逆量子化し、変換係数に逆変換を適用し得る。ビデオエンコーダ20は、CUのTUの再構成された変換ブロックと、CUのPUの予測ブロックとを使用して、CUのコーディングブロックを再構成し得る。ピクチャの各CUのコーディングブロックを再構成することによって、ビデオエンコーダ20はピクチャを再構成し得る。ビデオエンコーダ20は、再構成されたピクチャを復号ピクチャバッファ(DPB:decoded picture buffer)に記憶し得る。ビデオエンコーダ20は、DPB中の再構成されたピクチャをインター予測およびイントラ予測のために使用し得る。
[0064]ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、量子化変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC:Context-Adaptive Binary Arithmetic Coding)を実行し得る。ビデオエンコーダ20は、ビットストリーム中でエントロピー符号化されたシンタックス要素を出力し得る。
[0065]ビデオエンコーダ20は、コード化ピクチャと関連するデータとの表現を形成するビットのシーケンスを含むビットストリームを出力し得る。ビットストリームはネットワークアブストラクションレイヤ(NAL:network abstraction layer)ユニットのシーケンスを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP:raw byte sequence payload)をカプセル化する。NALユニットヘッダは、NALユニットタイプコードを含むシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含んでいるシンタックス構造であり得る。いくつかの事例では、RBSPは0ビットを含む。
[0066]異なるタイプのNALユニットは異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS:picture parameter set)のためのRBSPをカプセル化し得、第2のタイプのNALユニットはコード化スライスのためのRBSPをカプセル化し得、第3のタイプのNALユニットは補足エンハンスメント情報(SEI:Supplemental Enhancement Information)のためのRBSPをカプセル化し得、以下同様である。PPSは、0個以上のコード化ピクチャ全体に適用されるシンタックス要素を含んでいることがあるシンタックス構造である。(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは、ビデオコーディングレイヤ(VCL:video coding layer)NALユニットと呼ばれることがある。コード化スライスをカプセル化するNALユニットは、本明細書ではコード化スライスNALユニットと呼ばれることがある。コード化スライスのためのRBSPは、スライスヘッダおよびスライスデータを含み得る。
[0067]ビデオデコーダ30は、ビットストリームを受信し得る。さらに、ビデオデコーダ30は、ビットストリームからシンタックス要素を取得するためにビットストリームをパースし得る。ビデオデコーダ30は、ビットストリームから取得されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構成し得る。ビデオデータを再構成するためのプロセスは、一般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、PUの動きベクトルを使用して現在CUのPUのための予測ブロックを決定し得る。ビデオデコーダ30は、PUの1つまたは複数の動きベクトルを使用してPUのための予測ブロックを生成し得る。
[0068]さらに、ビデオデコーダ30は、現在CUのTUに関連する係数ブロックを逆量子化し得る。ビデオデコーダ30は、係数ブロックに対して逆変換を実行して、現在CUのTUに関連する変換ブロックを再構成し得る。ビデオデコーダ30は、現在CUのPUのための予測ブロックのサンプルを現在CUのTUの変換ブロックの対応するサンプルに加算することによって、現在CUのコーディングブロックを再構成し得る。ピクチャの各CUのためのコーディングブロックを再構成することによって、ビデオデコーダ30はピクチャを再構成し得る。ビデオデコーダ30は、出力のためにおよび/または他のピクチャを復号する際に使用するために、復号されたピクチャを復号ピクチャバッファに記憶し得る。
[0069]ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)が現在ピクチャを処理し始めるとき、ビデオコーダは、RefPicSetStCurrBefore、RefPicSetStCurrAfter、RefPicSetFollBefore、RefPicSetLtFoll、RefPicSetLtCurr、およびRefPicSetLtFollという、現在ピクチャのための5つの参照ピクチャセット(RPS:reference picture set)サブセットを決定し得る。RefPicSetStCurrBeforeは、出力順序で現在ピクチャの前に生じ、現在ピクチャによって参照のために使用される、短期参照ピクチャを含み得る。RefPicSetStFollBeforeは、出力順序で現在ピクチャの前に生じ、現在ピクチャによって参照のために使用されない、短期参照ピクチャを含み得る。RefPicStCurrAfterは、出力順序で現在ピクチャの後に生じ、現在ピクチャによって参照のために使用される、短期参照ピクチャを含み得る。RefPicSetStFollAfterは、出力順序で現在ピクチャの後に生じ、現在ピクチャによって参照のために使用されない、短期参照ピクチャを含み得る。RefPicSetLtCurrは、現在ピクチャによって参照のために使用される長期参照ピクチャを含み得る。RefPicSetLtFollは、現在ピクチャによって参照のために使用されない長期参照ピクチャを含み得る。ビデオエンコーダ20は、ビデオデコーダ30がRefPicSetStCurrBefore、RefPicSetStCurrAfter、RefPicSetFollBefore、RefPicSetLtCurr、およびRefPicSetLtFollを決定するために使用し得るシンタックス要素(たとえば、delta_poc_s0_minus1シンタックス要素、used_by_curr_pic_s0_flagシンタックス要素、delta_poc_s1_minus1シンタックス要素、used_by_curr_pic_s1_flagシンタックス要素、delta_poc_lsb_ltシンタックス要素など)をスライスヘッダ中に含み得る。
[0070]上記のように、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)がピクチャの現在スライスをコーディングし始めるとき、ビデオコーダは、「リスト0」または「RefPicList0」と呼ばれることがある、第1の参照ピクチャリストを初期化し得る。さらに、現在スライスがBスライスである場合、ビデオコーダは、「リスト1」または「RefPicList1」と呼ばれることがある、第2の参照ピクチャリストを初期化し得る。参照ピクチャリスト初期化は、参照ピクチャのピクチャ順序カウント(「POC」:picture order count)値に基づいて、参照ピクチャメモリ(すなわち、復号ピクチャバッファ)中の参照ピクチャをリスト中に入れる明示的機構であり得る。ピクチャのPOC値はピクチャの表示順序と整合され得る。
[0071]たとえば、RefPicList0を生成するために、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)はRefPicList0の初期バージョンを生成し得る。RefPicList0の初期バージョンでは、最初にRefPicSetStCurrBefore中の参照ピクチャがリストされ、利用可能な場合は、続いてRefPicSetStCurrAfter中の参照ピクチャがリストされ、続いてRefPicSetLtCurr中の参照ピクチャがリストされる。RefPicList0の初期バージョンでは、最初に、より前の出力順序をもつ短期ピクチャ(すなわち、RefPicSetStCurrBefore中の参照ピクチャ)が、現在ピクチャまでのピクチャ順序カウント(POC)距離の昇順でRefPicList0に挿入され、次いで、より後の出力順序をもつ短期ピクチャ(すなわち、RefPicSetStCurrAfter中の参照ピクチャ)が、現在ピクチャまでのPOC距離の昇順でRefPicList0に挿入され、最後に、長期ピクチャ(すなわち、RefPicSetLtCurr中の参照ピクチャ)が末尾に挿入される。POC距離は、ピクチャのPOC値の間の差分である。POCは、同じコード化ビデオシーケンス中の他のピクチャの出力順序位置に対する出力順序での関連するピクチャの位置を示す、各ピクチャに関連する変数である。
[0072]同様に、RefPicList1を生成するために、ビデオコーダはRefPicList1の初期バージョンを生成し得る。RefPicList1の初期バージョンでは、最初にRefPicSetStCurrAfter中の参照ピクチャがリストされ、続いてRefPictSetStCurrBefore中の参照ピクチャがリストされ、続いてRefPicSetLtCurr中の参照ピクチャがリストされる。RefPicList1の初期バージョンでは、最初に、より後の出力順序をもつ短期ピクチャ(すなわち、RefPicSetStCurrAfter中の参照ピクチャ)が、現在ピクチャまでのPOC距離の昇順でRefPicList1に挿入され、次いで、より前の出力順序をもつ短期ピクチャ(すなわち、RefPicSetStCurrBefore中の参照ピクチャ)が、現在ピクチャまでのPOC距離の昇順でRefPicList1に挿入され、最後に、長期ピクチャ(すなわち、RefPicSetLtCurr中の参照ピクチャ)が末尾に挿入される。このようにして、参照ピクチャリスト初期化は、RefPicSetStCurrBefore、RefPicSetStCurrAfter、およびRefPicSetLtCurrという3つのRPSサブセットに基づいて、デフォルトのリスト0および(スライスがBスライスである場合は)リスト1を作成する。
[0073]ビデオコーダが参照ピクチャリスト(たとえば、RefPicList0またはRefPicList1)を初期化した後に、ビデオコーダは、参照ピクチャリスト中の参照ピクチャの順序を変更し得る。言い換えれば、ビデオコーダは参照ピクチャリスト変更(RPLM:reference picture list modification)プロセスを実行し得る。たとえば、一般に、Bピクチャの第1または第2の参照ピクチャリストのための参照ピクチャリスト構成は、2つのステップ、すなわち、参照ピクチャリスト初期化と、参照ピクチャリスト並べ替え(変更)とを含む。
[0074]ビデオコーダは、1つの特定の参照ピクチャが参照ピクチャリスト中の2つ以上の位置に現れ得る場合を含む、任意の順序で参照ピクチャの順序を変更し得る。たとえば、参照ピクチャリスト並べ替え機構は、参照ピクチャリスト初期化中に参照ピクチャリスト中に入れられたピクチャの位置を任意の新しい位置に変更することができる。さらに、参照ピクチャリスト並べ替え機構は、参照ピクチャが参照ピクチャリストの初期バージョン中になかった場合でも、参照ピクチャメモリ中の任意の参照ピクチャを参照ピクチャリストの任意の位置に入れ得る。参照ピクチャリスト並べ替え(変更)の後に、いくつかのピクチャは、参照ピクチャリスト中のまさに最も遠い位置に入れられ得る。しかしながら、参照ピクチャの位置がリストのアクティブ参照ピクチャの数を超える場合、ビデオコーダは、その参照ピクチャを参照ピクチャリストの最終バージョンのエントリであると見なさない。ビデオエンコーダ20は、スライスヘッダ中で、各参照ピクチャリストのアクティブ参照ピクチャの数をシグナリングし得る。ビデオコーダが参照ピクチャリスト(たとえば、RefPicList0またはRefPicList1)を構成した後に、参照ピクチャリスト中に含まれる任意の参照ピクチャを識別するために、参照ピクチャリストへの参照インデックスが使用され得る。本開示では、RefPicList0中の位置を識別する参照インデックスはRefPicList0参照インデックスと呼ばれることがあり、RefPicList1中の位置を識別する参照インデックスはRefPicList1参照インデックスと呼ばれることがある。
[0075]ビデオエンコーダ20は、マージモードまたは高度動きベクトル予測(AMVP)モードを使用してPUの動き情報をシグナリングし得る。言い換えれば、HEVCでは、動きパラメータの予測のための2つのモードがあり、一方はマージモードであり、他方はAMVPである。PUの動き情報は、PUの(1つまたは複数の)動きベクトルと、PUの(1つまたは複数の)参照インデックスとを含み得る。ビデオエンコーダ20がマージモードを使用して現在PUの動き情報をシグナリングするとき、ビデオエンコーダ20はマージング候補リストを生成する。言い換えれば、ビデオエンコーダ20はマージング候補リスト構成プロセスを実行し得る。マージング候補リストはマージング候補のセットを含む。マージング候補リストは、現在PUに空間的または時間的に隣接するPUの動き情報を示すマージング候補を含み得る。すなわち、マージモードでは、動きパラメータ(たとえば、参照インデックス、動きベクトルなど)の候補リストが構成され、候補は、空間的隣接ブロックまたは時間的隣接ブロックからのものであり得る。
[0076]さらに、マージモードでは、ビデオエンコーダ20は、マージング候補リストからマージング候補を選択し得、選択されたマージング候補によって示される動き情報を現在PUの動き情報として使用し得る。ビデオエンコーダ20は、選択されたマージング候補のマージング候補リスト中の位置をシグナリングし得る。たとえば、ビデオエンコーダ20は、マージング候補リスト中へのインデックスを送信することによって、選択された動きベクトルパラメータをシグナリングし得る。ビデオデコーダ30は、ビットストリームから、マージング候補リスト中へのインデックス(すなわち、候補リストインデックス)を取得し得る。さらに、ビデオデコーダ30は、同じマージング候補リストを生成し、選択されたマージング候補の位置の指示に基づいて、選択されたマージング候補を決定し得る。ビデオデコーダ30は、次いで、選択されたマージング候補の動き情報を使用して現在PUのための予測ブロックを生成し得る。すなわち、ビデオデコーダ30は、候補リストインデックスに少なくとも部分的に基づいて、マージング候補リスト中の選択されたマージング候補を決定し得、ここにおいて、選択されたマージング候補は、現在PUのための動きベクトルを指定する。このようにして、デコーダ側において、インデックスが復号されると、インデックスが指す対応するブロックのすべての動きパラメータが現在PUによって継承されることになる。
[0077]スキップモードはマージモードと同様である。スキップモードでは、ビデオエンコーダ20およびビデオデコーダ30は、ビデオエンコーダ20およびビデオデコーダ30がマージモードにおいてマージング候補リストを使用するのと同じ方法で、マージング候補リストを生成し、使用する。しかしながら、ビデオエンコーダ20がスキップモードを使用して現在PUの動き情報をシグナリングするとき、ビデオエンコーダ20は、現在PUのための残差データをシグナリングしない。したがって、ビデオデコーダ30は、PUのための予測ブロックとして、マージング候補リスト中の選択されたマージング候補の動き情報によって示される参照ブロックを使用し得る。
[0078]AMVPモードは、ビデオエンコーダ20が候補リストを生成し、候補リストから候補を選択するという点で、マージモードと同様である。AMVP候補リスト中の候補は動きベクトル予測子(MVP:motion vector predictor)候補と呼ばれることがある。ビデオエンコーダ20がAMVPモードを使用して現在PUの動き情報をシグナリングするとき、ビデオエンコーダ20は、候補リスト中の選択されたMVP候補の位置をシグナリングすることに加えて、現在PUのための動きベクトル差分(MVD:motion vector difference)と、参照インデックスとをシグナリングし得る。現在PUのためのMVDは、現在PUの動きベクトルと、AMVP候補リストからの選択された候補の動きベクトルとの間の差分を示し得る。単予測では、ビデオエンコーダ20は、現在PUのために1つのMVDと1つの参照インデックスとをシグナリングし得る。双予測では、ビデオエンコーダ20は、現在PUのために2つのMVDと2つの参照インデックスとをシグナリングし得る。
[0079]さらに、AMVPモードを使用して現在PUの動き情報がシグナリングされるとき、ビデオエンコーダ30は、ビットストリームから、現在PUのためのMVDと候補リストインデックスとを取得し得る。ビデオデコーダ30は、同じAMVP候補リストを生成し得、AMVP候補リスト中の選択されたMVP候補の位置の指示に基づいて、選択された候補を決定し得る。ビデオデコーダ30は、選択されたMVP候補によって示される動きベクトルにMVDを加算することによって現在PUの動きベクトルを復元し得る。すなわち、ビデオデコーダ30は、選択されたMVP候補によって示される動きベクトルとMVDとに少なくとも部分的に基づいて、現在PUの動きベクトルを決定し得る。ビデオデコーダ30は、次いで、現在PUの復元された1つまたは複数の動きベクトルを使用して現在PUのための予測ブロックを生成し得る。
[0080]上記のように、マージモードまたはAMVPのための候補リストは、現在PUに空間的に隣接するPUに基づく候補を含み得る。本開示では、そのようなPUを空間的に隣接するPUまたは空間動きベクトルネイバー(vector neighbor)と呼ぶことがある。図2は、現在PU40に対する例示的な空間動きベクトルネイバーを示す概念図である。すなわち、図2には、PU40と、PU40の空間的に隣接するPUとの間の例示的な関係が示されている。図2の例では、空間的に隣接するPUは、A0、A1、B0、B1、およびB2として示されるロケーションをカバーするPUであり得る。PUの予測ブロックがあるロケーションを含むとき、PUはそのロケーションをカバーし得る。
[0081]図2の例に関して、ルーマロケーション(xP,yP)は、現在ピクチャの左上ルーマサンプルに対するPU40の左上ルーマサンプルを指定し得る。さらに、変数nPSWおよびnPSHは、それぞれ、ルーマサンプル中の、PU40の幅および高さを示し得る。現在ピクチャの左上サンプルに対するPU Nの左上ルーマサンプルは(xN,yN)であり、ここで、Nは、位置A0、A1、B0、B1、またはB2をカバーするPUを示す。位置A0、A1、B0、B1、またはB2をカバーするPUについて、(xN,yN)は、それぞれ、(xP−1,yP+nPSH)、(xP−1,yP+nPSH−1)、(xP+nPSW,yP−1)、(xP+nPSW−1,yP−1)または(xP−1,yP−1)として定義され得る。
[0082]上記のように、マージング候補リストまたはAMVP候補リストは、現在PUに時間的に隣接するPUの動き情報を指定する候補を含み得る。本開示では、現在PUに時間的に隣接するPUの動き情報を指定するマージング候補を指すために「時間マージング候補」という用語を使用することがある。同様に、本開示では、現在PUに時間的に隣接するPUの動き情報を指定するAMVP候補リスト中のMVP候補を指すために「時間MVP候補」という用語を使用することがある。本開示では、現在PUに時間的に隣接し、その動き情報が時間マージング候補または時間MVP候補によって指定される、PUを指すために、「時間動きベクトル予測子」または「TMVP」という用語を使用することがある。
[0083]TMVPを決定するために、ビデオコーダは、最初に、現在PUとコロケートされたPUを含む参照ピクチャを識別し得る。言い換えれば、ビデオコーダはコロケートピクチャを識別し得る。現在ピクチャの現在スライスがBスライス(すなわち、双方向インター予測PUを含むことを許可されたスライス)である場合、ビデオエンコーダ20は、スライスヘッダ中で、コロケートピクチャがRefPicList0からのものであるかRefPicList1からのものであるかを示すシンタックス要素(たとえば、collocated_from_l0_flag)をシグナリングし得る。言い換えれば、現在スライス(すなわち、現在PUを含んでいるスライス)がBスライス中にあり、現在スライスのスライスヘッダ中のcollocated_from_l0_flagシンタックス要素は、コロケート参照ピクチャがRefPicList1中にあることを示す場合、コロケート参照ピクチャは、スライスヘッダのcollocated_ref_idxシンタックス要素によって示されるロケーションにおけるRefPicList1中の参照ピクチャであり得る。そうではなく、現在スライスがPスライスであるかまたは現在スライスがBスライスであり、現在スライスのスライスヘッダ中のcollocated_from_l0_flagシンタックス要素は、コロケート参照ピクチャがRefPicList0中にあることを示す場合、コロケート参照ピクチャは、スライスヘッダのcollocated_ref_idxシンタックス要素によって示されるロケーションにおけるRefPicList0中の参照ピクチャであり得る。ビデオコーダが参照ピクチャリストを識別した後に、ビデオコーダは、識別された参照ピクチャリスト中のピクチャ(すなわち、コロケートピクチャ)を識別するために、スライスヘッダ中でシグナリングされ得る別のシンタックス要素(たとえば、collocated_ref_idx)を使用し得る。
[0084]ビデオコーダは、コロケートピクチャを検査することによってコロケートPUを識別し得る。このPUを含んでいるCUの右下PUの動き、またはコロケートPUを含んでいるCUの中心PU内の右下PUの動きのいずれかが使用される。コロケートPUを含んでいるCUの右下PUは、PUの予測ブロックの右下サンプルのすぐ右下のロケーションをカバーするPUであり得る。言い換えれば、TMVPは、コロケートピクチャ中にあり、現在PUの右下コーナーとコロケートされたロケーションをカバーするPUであり得、または、TMVPは、コロケートピクチャ中にあり、現在PUの中心とコロケートされたロケーションをカバーするPUであり得る。したがって、コロケートPUは、コロケートピクチャのコロケート領域の中心ブロックをカバーするPUであるか、またはコロケートピクチャのコロケート領域の右下ブロックをカバーするPUであり得、コロケート領域は現在PUとコロケートされる。
[0085]ビデオコーダは、上記のプロセスによって識別される動きベクトル(すなわち、識別されたTMVPの動きベクトル)を使用して、マージモードのためのマージング候補またはAMVPモードのためのMVP候補を生成し得る。さらに、識別されたTMVPの動きベクトルを使用してマージング候補またはMVP候補を生成するとき、ビデオコーダは、現在ピクチャの(POC値によって反映される)時間ロケーションと、コロケートピクチャの時間ロケーションとに基づいて動きベクトルをスケーリングし得る。たとえば、現在ピクチャのPOC値とコロケートピクチャのPOC値との間の差分がより小さいときよりも、現在ピクチャのPOC値とコロケートピクチャのPOC値との間の差分がより大きいとき、ビデオコーダは、動きベクトルの大きさをより大きい量だけ増加させ得る。
[0086]HEVCでは、SPSはsps_temporal_mvp_enable_flagシンタックス要素を含み得、sps_temporal_mvp_enable_flagシンタックス要素が1に等しいとき、スライスヘッダはpic_temporal_mvp_enable_flagシンタックス要素を含み得る。特定のピクチャについて、スライスヘッダをカプセル化するNALユニットのpic_temporal_mvp_enable_flagシンタックス要素とtemporal_idシンタックス要素の両方が0に等しいとき、復号順序でその特定のピクチャの前にあるピクチャからの動きベクトルは、その特定のピクチャ、または復号順序でその特定のピクチャの後にあるピクチャの復号において、TMVPとして使用されないことがある。NALユニットのtemporal_idシンタックス要素はNALユニットの時間識別子を指定し得る。
[0087]マルチビューコーディングでは、異なる視点からの同じシーンの複数のビューがあり得る。「アクセスユニット」という用語は、同じ時間インスタンスに対応するピクチャのセットを指すために使用される。したがって、ビデオデータは、時間とともに生じる一連のアクセスユニットとして概念化され得る。「ビューコンポーネント」は、単一のアクセスユニット中のビューのコード化表現であり得る。本開示では、「ビュー」は、同じビュー識別子に関連するビューコンポーネントのシーケンスを指すことがある。
[0088]図3は、例示的なマルチビュー復号順序を示す概念図である。マルチビュー復号順序はビットストリーム順序と呼ばれることもある。図3の例では、各正方形がビューコンポーネントに対応する。正方形の列はアクセスユニットに対応する。各アクセスユニットは、時間インスタンスのすべてのビューのコード化ピクチャを含んでいるように定義され得る。正方形の行は、ビューに対応する。図3の例では、アクセスユニットはT0〜T8と標示され、ビューはS0〜S7と標示される。アクセスユニットの各ビューコンポーネントは次のアクセスユニットの任意のビューコンポーネントの前に復号されるので、図3の復号順序は時間優先コーディングと呼ばれることがある。アクセスユニットの復号順序は出力順序または表示順序と同一でないことがある。
[0089]マルチビューコーディングはビュー間予測をサポートする。ビュー間予測は、H.264/AVC、HEVC、または他のビデオコーディング規格において使用されるインター予測と同様であり、同じシンタックス要素を使用し得る。ただし、ビデオコーダが(マクロブロックなどの)現在ビデオユニットに対してビュー間予測を実行するとき、ビデオコーダは、参照ピクチャとして、現在ビデオユニットと同じアクセスユニット中にあるが異なるビュー中にあるピクチャを使用し得る。対照的に、従来のインター予測は、参照ピクチャとして異なるアクセスユニット中のピクチャのみを使用する。
[0090]図4は、マルチビューコーディングのための例示的な予測構造を示す概念図である。図4のマルチビュー予測構造は時間予測およびビュー間予測を含む。図4の例では、各正方形がビューコンポーネントに対応する。「I」と標示された正方形はイントラ予測ビューコンポーネントである。「P」と標示された正方形は単方向インター予測ビューコンポーネントである。「B」および「b」と標示された正方形は双方向インター予測ビューコンポーネントである。「b」と標示された正方形は、「B」と標示された正方形を参照ピクチャとして使用し得る。第1の正方形から第2の正方形を指す矢印は、第1の正方形が、インター予測において第2の正方形のための参照ピクチャとして利用可能であることを示す。図4の垂直矢印によって示されるように、同じアクセスユニットの異なるビュー中のビューコンポーネントは参照ピクチャとして利用可能であり得る。アクセスユニットの1つのビューコンポーネントを同じアクセスユニットの別のビューコンポーネントのための参照ピクチャとして使用することは、ビュー間予測と呼ばれることがある。
[0091]H.264/AVCのMVC拡張では、ビュー間予測はディスパリティ動き補償によってサポートされ、ディスパリティ動き補償は、H.264/AVC動き補償のシンタックスを使用するが、異なるビュー中のピクチャが参照ピクチャとして使用されることが可能になる。H.264/AVCのMVC拡張によって2つのビューのコーディングもサポートされ得る。H.264/AVCのMVC拡張の利点のうちの1つは、MVCエンコーダが3Dビデオ入力として3つ以上のビューをとることができ、また、MVCデコーダがそのようなマルチビュー表現を復号し得ることである。したがって、MVCデコーダをもついかなるレンダラも、3つ以上のビューをもつ3Dビデオコンテンツを予想し得る。
[0092]H.264/AVCのMVC拡張では、同じアクセスユニット中の(すなわち、同じ時間インスタンスをもつ)ピクチャの間でビュー間予測が可能にされる。非ベースビュー中のピクチャをコーディングするとき、ピクチャが、異なるビュー中にあるがビデオコーダが現在コーディング中のピクチャと同じ時間インスタンス(すなわち、アクセスユニット)内にある場合、(ビデオエンコーダ20またはビデオデコーダ30などの)ビデオコーダは、ピクチャを参照ピクチャリスト(たとえば、RefPicList0またはRefPicList1)中に追加し得る。他のインター予測参照ピクチャのように、ビデオコーダはビュー間予測参照ピクチャを参照ピクチャリストの任意の位置に挿入し得る。ビデオデコーダ(たとえば、ビデオデコーダ30)が、あるビュー中のピクチャを他のビュー中のピクチャと無関係に復号することができる場合、そのビューは「ベースビュー」と呼ばれることがある。
[0093]3D−HEVCは、異なる視点からの同じシーンの複数のビューを提供する。3D−HEVCのための規格化の取り組みの一部は、HEVCに基づくマルチビュービデオコーデックの規格化を含む。HEVCベースの3DV(すなわち、3D−HEVC)では、異なるビューから再構成されたビューコンポーネントに基づくビュー間予測が可能にされる。コーディング効率をさらに改善するために、3D−HEVCのための参照ソフトウェアのいくつかのバージョンでは、2つの新しいコーディングツール、すなわち、ビュー間動き予測およびビュー間残差予測が採用されている。したがって、H.264/AVCにおけるMVCのように、3D−HEVCはビュー間動き予測をサポートする。
[0094]3D−HEVCでは、ビュー間動き予測は、標準のHEVCにおいて使用される動き補償と同様であり、同じまたは同様のシンタックス要素を利用し得る。マージモードおよびAMVPモードが例示的な動き予測技法である。ビデオコーダがPUに対してビュー間動き予測を実行するとき、ビデオコーダは、動き情報のソースとして、PUと同じアクセスユニット中にあるが異なるビュー中にあるピクチャを使用し得る。対照的に、従来の動き補償は、参照ピクチャとして異なるアクセスユニット中のピクチャのみを使用する。したがって、3D−HEVCでは、従属ビュー中のブロックの動きパラメータは、同じアクセスユニットの他のビュー中のすでにコーディングされた動きパラメータに基づいて予測または推論され得る。
[0095]マージモードまたはAMVPモードを使用して現在PUの動き情報がシグナリングされるとき、ビデオコーダは、候補リスト(たとえば、マージング候補リストまたはAMVP候補リスト)を生成し得る。3D−HEVCにおけるビュー間動き予測を実装するために、候補リストは、マージング候補リストとAMVP候補リストとの中にビュー間予測動きベクトル候補を含み得る。ビデオコーダは、候補リスト中の他の候補と同様の方法でビュー間予測動きベクトル候補を使用し得る。ビュー間予測動きベクトル候補は、ディスパリティ参照ピクチャのPU(すなわち参照PU)の動き情報を指定する。ディスパリティ参照ピクチャは、現在PUと同じアクセスユニット中にあるが、現在PUとは異なるビュー中にあり得る。ディスパリティ参照ピクチャ中の参照PUを決定するために、ビデオコーダは、ディスパリティベクトル構成プロセスを実行して現在PUのディスパリティベクトルを決定し得る。現在PUのディスパリティベクトルは、現在PUの予測ブロックとディスパリティ参照ピクチャ内のロケーションとの間の水平空間変位を示し得る。参照PUは、ディスパリティベクトルによって示されるロケーションをカバーするディスパリティ参照ピクチャのPUであり得る。
[0096]さらに、3D−HEVCでは、ベースHEVC仕様の場合のように、マージング候補リストは時間マージング候補を含み得る。同様に、3D−HEVCでは、ベースHEVC仕様の場合のように、AMVP候補リストは時間MVP候補を含み得る。ベースHEVC仕様の場合のように、時間マージング候補および時間MVP候補はTMVPの動きベクトルを指定し得る。3D−HEVCでは、時間マージング候補および時間MVP候補は、0に等しい参照インデックスを常に有し得る。本開示では、時間マージング候補の参照インデックスによって示される参照ピクチャを、時間マージング候補のためのターゲット参照ピクチャと呼ぶことがある。同様に、本開示では、時間MVP候補の参照インデックスによって示される参照ピクチャを、時間MVP候補のためのターゲット参照ピクチャと呼ぶことがある。
[0097]TMVPの参照インデックスによって示される参照ピクチャ、および時間マージング候補のためのターゲット参照ピクチャは、異なる参照ピクチャタイプに属し得る。したがって、コロケートピクチャ中のTMVPが指す参照ピクチャの参照ピクチャタイプ、および(その参照インデックスがHEVCでは常に0に等しい)時間マージング候補のためのターゲット参照ピクチャの参照ピクチャタイプは、異なり得る。たとえば、参照ピクチャのうちの1つはビュー間参照ピクチャ(ディスパリティに設定されるタイプ)であり得、他の参照ピクチャは時間参照ピクチャ(時間に設定されるタイプ)であり得る。本開示では、現在ピクチャと同じ時間インスタンスに関連するが、現在ピクチャとは異なるビューに関連する参照ピクチャを示すために、「ディスパリティ参照ピクチャ」という用語を使用することがある。さらに、本開示では、現在ピクチャと同じビューに関連するが、現在ピクチャとは異なる時間インスタンスに関連する参照ピクチャを示すために、「時間参照ピクチャ」という用語を使用することがある。
[0098]さらなる特定の例では、TMVPの参照インデックスが指す参照ピクチャは時間参照ピクチャであり得、時間マージング候補のためのターゲット参照ピクチャはディスパリティ参照ピクチャであり得、またはその逆も同様である。3D−HEVCのためのテストモデルソフトウェア(すなわち、3D−HTMソフトウェア)のいくつかのバージョンでは、ビデオコーダは、時間マージング候補のためのターゲット参照ピクチャを0または左側の隣接PUの参照インデックスの値に等しく設定し得る。したがって、時間マージング候補の参照インデックスは0に等しくないことがある。
[0099]上述のように、ビデオエンコーダ20は、スキップモードまたはマージモード(すなわち、スキップ/マージモード)を使用してPUの動き情報をシグナリングし得る。スキップ/マージモードでは、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、現在PUのためのMVP候補のリストを生成し得る。さらに、MV−HEVCおよび3D−HEVCでは、ビデオコーダは、本開示の他の場所において説明するように現在PUのための決定ディスパリティベクトルを含み得る。ディスパリティベクトルに基づいて、ビデオコーダはビュー間予測動きベクトルを決定し得る。そのようなビュー間予測動きベクトルが利用可能である場合、ビデオコーダは、マージング候補リストに新しい動きベクトル候補(すなわち、マージング候補)としてビュー間予測動きベクトルを追加し得る。このビュー間予測動きベクトルは、利用可能な場合、時間動きベクトルである。
[0100]スキップ/マージモードで使用するビュー間予測動きベクトルを決定するために、ビデオコーダは、現在PUのためのディスパリティベクトルを使用して、現在PUと同じアクセスユニットの参照ビュー中の現在PU/CUの対応するブロックの位置を特定し得る。さらに、対応するブロックがイントラコーディングされず、対応するブロックがビュー間予測されず、対応するブロックの参照ブロックが、現在PUの参照ピクチャリスト(すなわち、現在スライスの参照ピクチャリスト)中の参照ピクチャのPOC値に等しいPOC値を有する場合、ビデオコーダは、POC値に基づいて対応するブロックの参照インデックスを変換し得る。すなわち、ビデオコーダは、現在PUに関連する参照ピクチャリスト中の、対応するブロックの参照インデックスによって示される参照ピクチャと同じPOC値を有する参照ピクチャの位置を決定し得る。ビデオコーダは、決定された位置を示すようにビュー間予測動きベクトル候補の参照インデックスを設定し得る。
[0101]対応するブロックの参照インデックスを変換した後に、ビデオコーダは、次いで、マージング候補リスト中に、ビュー間予測動きベクトルとして対応するブロックの動き情報を含め得る。対応するブロックの動き情報は、対応するブロックの予測方向と、参照インデックスと、動きベクトルとを含み得る。
[0102]図5は、ビュー間予測動きベクトル候補の例示的な導出プロセスを示す概念図である。図5の例では、ビューV0が、ピクチャ50、52、54、および56を含む。ビューV1が、ピクチャ58、60、62、および64を含む。ビデオコーダは現在、ピクチャ62をコーディングしていることがあり、したがって、ピクチャ62は「現在ピクチャ62」と呼ばれ得る。現在ピクチャ62は現在PU66を含む。現在PU66は現在ピクチャ62の現在スライス中にあり得る。ピクチャ58は、現在ピクチャ62の現在スライスのためのRefPicList0(すなわち、List0)の位置0(すなわち、Ref0)にあり得る。ピクチャ62はRefPicList1(すなわち、List1)の位置0(すなわち、Ref0)にあり得、ピクチャ64はRefPicList1の位置1にあり得る。
[0103]さらに、図5の例では、ビデオコーダは、現在PU66のためのディスパリティベクトルを決定し得る。ビデオコーダは、次いで、現在PU66のためのディスパリティベクトルに少なくとも部分的に基づいて、ピクチャ52中の対応するブロック68を決定し得る。ピクチャ52および現在ピクチャ62は同じ時間インスタンス(すなわち、時間インスタンスT1)に関連する。図5の例では、対応するブロック68が双方向インター予測される。したがって、対応するブロック68は、RefPicList0動きベクトル70およびRefPicList1動きベクトル72という、2つの動きベクトルを有する。RefPicList0動きベクトル70はピクチャ50中のロケーションを示す。RefPicList1動きベクトル72はピクチャ56中のロケーションを示す。したがって、現在PU66のマージング候補リストまたはAMVP候補リスト中のビュー間予測動きベクトル候補は、RefPicList0動きベクトル74およびRefPicList1動きベクトル76を指定し得る。RefPicList0動きベクトル74は、RefPicList0動きベクトル70の水平成分および垂直成分に等しい水平成分および垂直成分を有し得る。RefPicList1動きベクトル76は、RefPicList1動きベクトル72の水平成分および垂直成分に等しい水平成分および垂直成分を有し得る。さらに、ピクチャ58はピクチャ50(すなわち、対応するブロック68のRefPicList0参照インデックスによって示されるピクチャ)と同じPOC値を有するので、ビュー間予測動きベクトル候補は、ピクチャ58の現在PUのためのRefPicList0中の位置を示すRefPicList0参照インデックスを指定し得る。ピクチャ64はピクチャ56(すなわち、対応するブロック68のRefPicList1参照インデックスによって示されるピクチャ)と同じPOC値を有するので、ビュー間予測動きベクトル候補は、ピクチャ64の現在PUのためのRefPicList1中の位置を示すRefPicList1参照インデックスを指定し得る。
[0104]現在PUのディスパリティベクトルによって示される対応するPUがイントラ予測されるか、対応するPUがインター予測されないか、または、対応するPUの参照インデックスが、現在PUに関連する対応する参照ピクチャリスト中のいかなる参照ピクチャのPOC値にも一致しないPOC値を有する参照ピクチャを指す場合、ビデオコーダは、ビュー間予測動きベクトル候補が利用可能でないと決定し得、ビデオコーダは、ビュー間予測動きベクトル候補が利用可能でないと決定し得る。ビュー間予測動きベクトル候補が利用可能でないとビデオコーダが決定した場合、ビデオコーダは、現在PUのためのディスパリティベクトルをビュー間ディスパリティ動きベクトルに変換し得る。ビデオコーダは、次いで、ビデオコーダがビュー間予測動きベクトルを追加したであろう位置において、マージング候補リストにビュー間ディスパリティ動きベクトルを追加し得る。
[0105]HEVC規格には、それぞれ予測ユニット(PU)のための、マージモード(スキップはマージの特殊な場合と見なされる)および高度動きベクトル予測(AMVP)モードと称する、2つのインター予測モードがある。AMVPまたはマージモードのいずれでも、複数の動きベクトル予測子のための動きベクトル(MV:motion vector)候補リストが維持される。現在PUの(1つまたは複数の)動きベクトル、ならびにマージモードにおける参照インデックスは、MV候補リストから1つの候補を取ることによって生成される。
[0106]MV候補リストは、マージモードのために最高5つの候補と、AMVPモードのためにわずか2つの候補とを含んでいる。マージ候補は、両方の参照ピクチャリスト(リスト0およびリスト1)に対応する動きベクトルと参照インデックスとを含んでいることがある。マージ候補がマージインデックスによって識別される場合、現在ブロックの予測のために使用される参照ピクチャ、ならびに関連する動きベクトルが決定される。しかしながら、リスト0またはリスト1のいずれかからの各潜在的予測方向についてのAMVPモードでは、AMVP候補は動きベクトルのみを含んでいるので、MV候補リストへのMVPインデックスとともに、参照インデックスが明示的にシグナリングされる必要がある。AMVPモードでは、予測動きベクトルはさらに改良され得る。
[0107]これらの2つのインターコーディングモードについて、現在PUのための参照インデックスは、AMVPでコーディングされる場合、明示的にシグナリングされる。しかしながら、現在PUのための参照インデックスは、マージでコーディングされる場合、マージ候補の一部として導出される。簡潔のために、AMVPモードでシグナリングされるか、あるいはマージ候補リストの一部として導出される参照インデックスを、ターゲット参照インデックスと呼ぶ。HEVCでは、TMVPマージ候補のターゲット参照インデックスは常に0に設定され得る。
[0108]AMVPモードでは、ターゲット参照インデックスが時間動きベクトルに対応する場合、ビデオコーダは、異なるビュー中の対応するブロックを決定するために現在PUのディスパリティベクトルを使用し得る。さらに、ターゲット参照インデックスが時間動きベクトルに対応する場合、ビデオコーダは、対応するブロック中の動きベクトルを検査することによってビュー間予測動きベクトルを見つけ得る。言い換えれば、ターゲット参照インデックスが時間動きベクトルに対応する場合、ディスパリティベクトルによって位置を特定される現在PUの対応するブロック中の動きベクトルを検査することによってビュー間予測動きベクトルが見つけられる。
[0109]さらに、AMVPモードでは、ターゲット参照インデックスがディスパリティ動きベクトルに対応する場合、ビデオコーダはビュー間予測動きベクトルを導出しない。そうではなく、ビデオコーダは、現在PUのためのディスパリティベクトルをビュー間ディスパリティ動きベクトルに変換し得る。ビデオコーダは、ビュー間ディスパリティ動きベクトルをAMVP候補リスト中に含め得る。したがって、ビュー間予測動きベクトルが利用可能でない場合、ディスパリティベクトルはビュー間ディスパリティ動きベクトルに変換され、その変換されたビュー間ディスパリティ動きベクトルは、利用可能であるとき、ビュー間予測動きベクトルとして、同じ位置において、AMVP候補リストまたはマージング候補リスト中に追加される。
[0110]スキップ/マージモードでは、ビデオコーダは、利用可能な場合、常に、マージング候補リスト中のすべての空間マージング候補および時間マージング候補の前にビュー間予測動きベクトルを挿入し得る。ビュー間予測動きベクトルが利用可能でない場合、ビデオコーダは、利用可能な場合、同じ位置において(すなわち、マージング候補リスト中のすべての空間マージング候補および時間マージング候補の前に)ビュー間ディスパリティ動きベクトルを挿入し得る。3D−HEVCのテストモデル(すなわち、3D−HTMソフトウェア)のいくつかのバージョンでは、ビュー間予測動きベクトルまたはビュー間ディスパリティ動きベクトルがAMVP候補リスト中のすべての空間候補とは異なる場合、ビュー間予測動きベクトルまたはビュー間ディスパリティ動きベクトルは、AMVP候補リスト中のすべての有効な空間候補の後に続く。
[0111]H.264/AVCのMVC拡張は、H.264/AVCのMVC拡張が「HLSのみ」の要件を満たすように実装され得る。HLSのみの要件は、H.264/AVCのMVC拡張に高レベルシンタックス(HLS:high-level syntax)変更のみがあることを保証する。したがって、H.264/AVCにおけるマクロブロックレベルでのモジュールは再設計されない。そうではなく、H.264/AVCにおけるマクロブロックレベルでの各モジュールは、H.264/AVCのMVC拡張において十分に再利用され得る。マルチループ復号が許容できる場合、MV−HEVC、3D−HEVCおよびSHEVCが「HLSのみ」の要件を満たし得ることが可能である。たとえば、MV−HEVCでは、HEVCにおけるCU/PUレベルでのモジュールが再設計される必要がなく、MV−HEVCのために十分に再利用され得るように、それにおいてHLS変更のみがあることが保証されるべきである。3D−HEVCでは、テクスチャビューと深度ビューの両方のためのHEVCにおけるCU/PUレベルでのコーディングツールを含む、新しいコーディングツールが含まれ、サポートされ得る。
[0112]いくつかの事例では、ビュー間予測を可能にするために、最小で必須のHLS変更は以下の目的に関する。
・ ピクチャ識別:参照ピクチャリスト構成およびマーキングは、特定のビュー中のピクチャを識別することが可能である必要がある。
HLS変更は、H.264/MVCにおける「HLSのみ」の要件を満たすのには十分ではなく、低レベルコーディングモジュールが、たとえば、ゼロ動き関係スケーリングを処理する状況に決して遭遇しないように、他の制約、仮定が作られる。そのような制約、変更および仮定は以下を含み得る。
・ コロケートピクチャがビュー間(のみ)参照ピクチャである場合、時間ダイレクトモードを無効にすること。
・ ビュー間(のみ)参照ピクチャを短期でないと見なすこと:空間ダイレクトに関係する。ビュー間(のみ)参照ピクチャは、ビュー間予測のために使用される現在ピクチャの参照ピクチャリスト中の参照ピクチャであり得る。
・ 暗黙的重み付け予測を無効にすること。
[0113]潜在的HEVC拡張において必要とされる「HLSのみ」を満たすために、潜在的HEVC拡張における変更は高レベルのみにあり得る。したがって、スライスヘッダの下でのシンタックス要素に関する変更は行われず、潜在的HEVC拡張のためのCUレベル復号プロセス変更はない。たとえば、HEVC拡張仕様の動きベクトル予測は、HEVCベース仕様における動きベクトル予測と厳密に同じであるべきである。HLS変更は、拡張仕様の規範的なデコーダ変更であり得るが、ベース仕様の観点からは、そのような変更は、必ずしも既知である必要はなく、報知的であり得る。
[0114]効率的なビュー間予測などの機能を可能にするために、HEVC拡張とベース仕様の両方における変更が必要とされ得る。ベースHEVCデコーダの典型的な復号プロセスまたはコーディング効率に影響を及ぼさないが、拡張仕様の機能を可能にすることを目的とするベース仕様の変更は、フックと呼ばれる。たいていの場合、「HLSのみ」の要件は、ベース仕様におけるフックと拡張仕様におけるHLS変更の両方で満たされる必要がある。ベース仕様におけるフックが良好に定義されない場合、ある所望の機能は、拡張仕様において有効にされないことがあり、または拡張仕様がかなりの変更を行うことを必要とし得る。HLSのみのSVCでは、ベースレイヤ表現が、場合によってはアップサンプリングおよび/またはフィルタ処理の後に、現在レイヤの現在ピクチャの参照ピクチャリスト中に入れられ得る。そのようなピクチャはレイヤ間参照ピクチャと呼ばれることがある。
[0115]いくつかの事例では、本開示では、動きベクトルについて、参照インデックスと動きベクトル自体のxおよびy値とからなるものとして説明することがある。上記のように、参照インデックスは参照ピクチャへのポインタであり得る。同等に、本開示では、参照インデックスに対応する参照ピクチャを、動きベクトルが参照している参照ピクチャとして言及することがある。動きベクトルが同じビュー中の参照ピクチャを参照する場合、その動きベクトルは時間動きベクトルと呼ばれることがある。動きベクトルが異なるビューの参照ピクチャを参照する場合、その動きベクトルはディスパリティ動きベクトルと呼ばれることがある。
[0116]時間動きベクトルは、短期時間動きベクトル(略して短期動きベクトル)または長期時間動きベクトル(略して長期動きベクトル)のいずれかであり得る。たとえば、動きベクトルが短期参照ピクチャを参照する場合、動きベクトルは短期である。同様に、動きベクトルが長期参照ピクチャを参照する場合、動きベクトルは長期である。別段に言及されていない限り、ディスパリティ動きベクトルおよび長期動きベクトルは、本開示全体にわたって、異なるカテゴリーに属する。本開示では、短期参照ピクチャおよび長期参照ピクチャを時間参照ピクチャと総称することがある。同様に、ディスパリティ動きベクトルは、SVCのコンテキストではレイヤ間動きベクトルで置き換えられ得る。本開示では、異なるレイヤの(場合によってはアップサンプリングされフィルタ処理された)レイヤ表現を指すために「レイヤ間動きベクトル」という用語を使用することがある。
[0117]Chenら、「AHG10: Motion Related Hooks for HEVC Multiview/3DV Extension Based on Long-Term Reference Pictures」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのビデオコーディング共同研究部会(JCT−VC)、第10回会合、ストックホルム、スウェーデン、2012年7月、ドキュメントJCTVC−J0121(以下では、「ドキュメントJCTVC−J0121」)は、TMVP候補が使用されるときの状況を含めて、マージまたはAMVP中に時間動きベクトルを予測するために、長期と見なされるときのビュー間(のみ)参照ピクチャに対応する動きベクトルを使用しないことを提案している。JCTVC−J0121およびHEVCベース仕様では、予測なしは、動きベクトルが利用不可能であると見なされ、マージ候補リストまたはAMVP候補リスト中に入れられるために使用され得ないことを意味する。
[0118]Chenら、「AHG10: On Video Parameter Set for HEVC Extensions」、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのビデオコーディング共同研究部会(JCT−VC)、第10回会合、ストックホルム、スウェーデン、2012年7月、ドキュメントJCTVC−J0124(以下では、「ドキュメントJCTVC−J0124」)は様々な手法を提案した。ドキュメントJCTVC−J0124に記載されている手法のうちの1つは、ビュー間動きベクトルがビューインデックスまたはレイヤインデックスによって識別され得るという形で、より高度である。その結果、動きベクトルの予測は、同じビュー内の時間動きベクトル、または同じビューを参照しているビュー間動きベクトルのいずれか内でのみ可能にされるように、動きベクトルの予測はさらに制約される。さらに、同じビュー内でさえ、予測は、長期または短期のいずれかの同じカテゴリーに属する同じビュー内でのみ可能にされるように、予測は制約される。さらに、ビュー間参照ピクチャは、異なるタイプの参照ピクチャ(非時間参照ピクチャ)としてマークされる。さらに、ドキュメントJCTVC−J0124は、高レベルの復号プロセスの一部として追加のピクチャ識別情報を戻すための関数AddPicId( )を定義している。いくつかの例では、AddPicId( )の戻り値は、マルチビューコンテキストにおけるビュー順序インデックスである。ビュー順序インデックスは、ビューに関連するカメラ位置に基づくビューの順序付けでのビューの位置を示す。他の例では、AddPicId( )の戻り値は、一般的なレイヤID(layer_id)、たとえば、reserved_one_5bitsの値−1であり、ここにおいて、reserved_one_5bitsはHEVC Working Draft 7において指定されているものである。
[0119]Chenら、「AHG12: Hooks for Temporal Motion Vector Prediction and Weighted Prediction in HEVC Multiview/3DV Extension、ITU−T SG16 WP3とISO/IEC JTC1/SC29/WG11とのビデオコーディング共同研究部会(JCT−VC)、第9回会合、ジュネーブ、スイス、2012年4月〜5月、ドキュメントJCTVC−I0353(以下では、「ドキュメントJCTVC−I0353」)は、たとえば、ビュー間(のみ)参照のための、HEVCベース仕様中に示される新しいタイプの動きベクトルを提案している。そのような場合は、ただ1つのビュー間参照がある場合、JCTVC−J0124における上述の解決策に等価である。ただし、複数のビュー間参照が可能であるとき、2つのビュー間動きベクトルが同じビューを参照するかどうかを見分けることは可能でない。
[0120]TMVPの使用についてHEVC Working Draft 7に記載されているシステムにはいくつかの問題があり得る。たとえば、マージモードを使用して現在PUの動き情報がシグナリングされるとき、ビデオコーダは、TMVPの動き情報を指定する時間マージング候補(すなわち、現在PUとは異なるアクセスユニット中の参照ピクチャのコロケートPU)を生成し得る。HEVC Working Draft 7では、時間マージング候補の参照インデックスは常に0に等しく設定される。言い換えれば、時間マージング候補の参照インデックスは、常にRefPicList0またはRefPicList1中の第1の参照ピクチャである。したがって、マージモードでは、HEVC Working Draft 7は、TMVPからのマージング候補のための参照インデックスが0になることのみを可能にする。
[0121]TMVPが、現在PUのRefPicList0またはRefPicList1中の第1の参照ピクチャ以外の動きベクトルのための参照ピクチャを示す場合、ビデオコーダは、現在PUに関連するRefPicList0またはRefPicList1中の第1の参照ピクチャと、コロケートPUによって動きベクトルについて示される参照ピクチャとの間の時間距離に基づいて、動きベクトルをスケーリングし得る。すなわち、動きベクトルが、RefPicListX中の第1の参照ピクチャと同じでない参照ピクチャに対応する場合(ただしXは0または1である)、動きベクトルは時間距離に基づいてスケーリングされる。
[0122]しかしながら、TMVPの(Xが0または1である)RefPicListX動きベクトルがディスパリティ動きベクトル(すなわち、TMVPを含んでいるピクチャと同じアクセスユニット中のピクチャ中にあるが、TMVPを含んでいるピクチャとは異なるビュー中にあるロケーションを示す動きベクトル)であり、現在PUのRefPicListXの位置0における参照ピクチャが時間参照ピクチャ(すなわち、現在アクセスユニットとは異なるアクセスユニット中のピクチャ)である場合、ビデオコーダはディスパリティ動きベクトルをスケーリングしない。そうではなく、ビデオコーダは、ディスパリティ動きベクトルが時間動きベクトルであるかのようにディスパリティ動きベクトルを使用し得る。TMVPのRefPicListX動きベクトルが時間動きベクトル(すなわち、TMVPを含んでいるピクチャとは異なるアクセスユニット中にあるピクチャ中のロケーションを示す動きベクトル)であり、現在PUのRefPicListXの位置0における参照ピクチャがディスパリティ参照ピクチャ(すなわち、異なるビュー中だが現在ピクチャと同じアクセスユニット中のピクチャ)である場合、ビデオコーダは時間動きベクトルをスケーリングしない。そうではなく、ビデオコーダは、時間動きベクトルをディスパリティ動きベクトルとして使用し得る。
[0123]ドキュメントJCTVC−J0124において提案されている解決策では、TMVPマージング候補(すなわち、TMVPからのマージング候補)のための参照インデックスは、依然として0に設定される。しかしながら、上記の2つのシナリオのいずれかが発生した(すなわち、参照ピクチャリストの位置0における参照ピクチャが時間参照ピクチャであり、TMVPの動きベクトルがディスパリティ動きベクトルであるか、または参照ピクチャリストの位置0における参照ピクチャがディスパリティ参照ピクチャであり、TMVPの動きベクトルが時間動きベクトルである)とき、ビデオコーダは、時間マージング候補が利用不可能であると見なし得る。
[0124]図6は、マージモードにおける時間動きベクトルとディスパリティ動きベクトルとの間の予測を示す概念図である。図6の例に示すように、ビュー1はピクチャ80、81、および82を含む。ビュー2はピクチャ83、84、および85を含む。ピクチャ80および83は0に等しいPOC値を有し、ピクチャ81および84は1に等しいPOC値を有し、ピクチャ82および85は2に等しいPOC値を有する。ビデオコーダは現在、ピクチャ84をコーディングしている。すなわち、ピクチャ84が現在ピクチャである。矢印86は時間動きベクトル(すなわち、現在ピクチャと同じビュー中にあるが、異なる時間インスタンス中にあるピクチャ中のロケーションを示す動きベクトル)を表す。さらに、図6の例では、ピクチャ85は、ピクチャ84の現在PUのためのコロケートピクチャであり得る。ピクチャ85中のTMVPはディスパリティ動きベクトル(すなわち、ピクチャ85とは異なるビュー中のピクチャ中のロケーションを示す動きベクトル)を有する。図6の例では、TMVPのディスパリティベクトルはピクチャ82中のロケーションを示す。
[0125]本開示の技法は、マージモードについて上記で説明した問題のうちの1つまたは複数を解決し得る。本開示の第1の例示的な技法によれば、0に等しい参照インデックスをもつRefPicListX中のピクチャの参照ピクチャタイプと、TMVPの動きベクトルによって参照されるピクチャの参照ピクチャタイプとが同じであるとき、ビデオコーダは、時間マージング候補のRefPicListXの最終参照インデックスを0に設定し得る。たとえば、TMVPのRefPicListX動きベクトルがディスパリティ参照ピクチャ中のロケーションを示し、現在PUのRefPicListX中の第1の参照ピクチャがディスパリティ参照ピクチャである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを0に設定し得る。別の例では、TMVPのRefPicListX動きベクトルが時間参照ピクチャ中のロケーションを示し、現在PUのRefPicListX中の第1の参照ピクチャが時間参照ピクチャである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを0に設定し得る。
[0126]場合によっては、本開示の第1の例示的な技法では、ビデオコーダは、時間マージング候補のRefPicListXの最終参照インデックスを以下のように変更し得る。RefPicListX[0](すなわち、現在PUのRefPicListX中の第1の参照ピクチャ)の参照ピクチャタイプが時間であり、TMVPのRefPicListX動きベクトルがディスパリティ参照ピクチャを示す場合、ビデオコーダは、RefPicListX参照インデックスを、ディスパリティの参照ピクチャタイプに属する現在PUのRefPicListX中の第1のエントリに設定し得る。言い換えれば、現在PUのRefPicListX中の第1の参照ピクチャが時間参照ピクチャである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスが現在PUのRefPicListX中の第1の時間参照ピクチャを示すように、時間マージング候補のRefPicListX参照インデックスを設定し得る。たとえば、現在PUのRefPicListX中の第1の時間参照ピクチャが現在PUのRefPicListX中の第2の参照ピクチャである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを1(すなわち、2−1)に設定し得る。
[0127]さらに、本開示の第1の例示的な技法では、RefPicListX[0]の参照ピクチャタイプがディスパリティであり、TMVPのRefPicListX動きベクトルが時間参照ピクチャを示す場合、ビデオコーダは、参照インデックスを時間の参照ピクチャタイプに属するRefPicListX中の第1のエントリに設定し得る。言い換えれば、現在PUのRefPicListX中の第1の参照ピクチャが時間参照ピクチャである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスが現在PUのRefPicListX中の第1の時間参照ピクチャを示すように、時間マージング候補のRefPicListX参照インデックスを設定し得る。たとえば、現在PUのRefPicListX中の第1の時間参照ピクチャが現在PUのRefPicListX中の第3の参照ピクチャである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを2(すなわち、3−1)に設定し得る。
[0128]このようにして、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するとき、ビデオエンコーダ20は、時間マージング候補の参照インデックスを非0値に設定し得る。第1の参照ピクチャは、現在ビデオユニット(たとえば、PU)に関連する参照ピクチャリスト中の初期参照ピクチャであり得る。第2の参照ピクチャは、現在ビデオユニットのためのTMVPの参照インデックスによって示され得る。時間マージング候補の参照インデックスは、現在ビデオユニットに関連する参照ピクチャリスト中の位置を示す。さらに、ビデオエンコーダ20は、時間マージング候補を含むマージング候補リスト中の複数のマージング候補の中から選択されたマージング候補を決定し得る。ビデオエンコーダ20は、マージング候補リスト中の選択されたマージング候補を識別するデータ(たとえば、merge_idxシンタックス要素)を含むビットストリームを生成し得る。
[0129]同様に、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するとき、ビデオデコーダ30は、時間マージング候補の参照インデックスを非0値に設定し得る。第1の参照ピクチャは、現在ビデオユニットに関連する参照ピクチャリスト中の初期参照ピクチャであり得る。第2の参照ピクチャは、現在ビデオユニットのためのTMVPの参照インデックスによって示され得る。時間マージング候補の参照インデックスは、現在ビデオユニットに関連する参照ピクチャリスト中の位置を示す。さらに、ビデオデコーダ30は、時間マージング候補を含むマージング候補リスト中の複数のマージング候補の中から選択されたマージング候補を決定し得る。ビデオデコーダ30は、選択されたマージング候補によって指定される動き情報に少なくとも部分的に基づいて、現在ビデオユニットのための予測ブロックを決定し得る。さらに、ビデオデコーダ30は、現在ビデオユニットのための予測ブロックに少なくとも部分的に基づいて、再構成されたサンプルブロック(たとえば、再構成されたコーディングブロック)を生成し得る。
[0130]一代替形態では、ディスパリティ動きベクトルは長期動きベクトルとして示され/置き換えられ得、ビュー間(のみ)参照は長期参照として示され/置き換えられ得、時間参照/動きベクトルは時間短期参照/動きベクトルによって示され/置き換えられ得る。たとえば、現在PUのRefPicListX中の第1の参照ピクチャが短期参照ピクチャであり、TMVPのRefPicListX動きベクトルが短期動きベクトルである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを0に設定し得る。同様に、現在PUのRefPicListX中の第1の参照ピクチャが長期参照ピクチャであり、TMVPのRefPicListX動きベクトルが長期動きベクトルである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを0に設定し得る。しかしながら、現在PUのRefPicListX中の第1の参照ピクチャが短期参照ピクチャであり、TMVPのRefPicListX動きベクトルが長期動きベクトルである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを非0値に設定し得る。たとえば、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを現在PUのRefPicListX中の第1の長期参照ピクチャに設定し得る。同様に、現在PUのRefPicListX中の第1の参照ピクチャが長期参照ピクチャであり、TMVPのRefPicListX動きベクトルが短期動きベクトルである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを非0値に設定し得る。たとえば、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを現在PUのRefPicListX中の第1の短期参照ピクチャに設定し得る。
[0131]別の代替形態では、時間参照ピクチャの参照インデックス(「ref_idx」)(「T_ref_idx」)と、ビュー間参照(のみ)ピクチャのref_idx(「D_ref_idx」)とは、スライスヘッダ中でシグナリングされる。RefPicListX[0]の参照ピクチャタイプが時間である場合、最終参照インデックスはD_ref_idxに設定される。そうではなく、RefPicListX[0]の参照ピクチャタイプがディスパリティである場合、最終参照インデックスはT_ref_idxに設定される。
[0132]本開示の第2の例示的な技法によれば、現在PUのRefPicListXの初期参照ピクチャと、TMVPのRefPicListX動きベクトルによって参照される参照ピクチャの両方が時間短期参照ピクチャであるとき、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスを0に設定し得る。RefPicListXの初期参照ピクチャは、0に等しい参照インデックスをもつRefPicListX中の参照ピクチャ(すなわち、RefPicListX[0])である。
[0133]場合によっては、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスを以下のように変更し得る。最初に、TMVPのRefPicListX動きベクトルによって参照される参照ピクチャのAddPicIdは、TargetAddPicIdと示されることがある。上記のように、いくつかの例では、参照ピクチャのAddPicIdは、マルチビューコンテキストでは、参照ピクチャのビュー順序インデックスであり得る。いくつかの例では、参照ピクチャのAddPicIdは、参照ピクチャの一般的なレイヤ識別子(layer_id)であり得る。たとえば、参照ピクチャのAddPicIdは、参照ピクチャに関連するNALユニットのNALユニットヘッダ中で指定されるreserved_one_5bits_minus1シンタックス要素の値であり得る。
[0134]RefPicListX[0]のタイプが時間である場合、ビデオコーダは、現在PUのRefPicListXの初期参照ピクチャ以外の現在PUのRefPicListX中の各参照ピクチャを検査し得る。ビデオコーダが現在PUのRefPicListXの位置jにおける参照ピクチャを検査したとき、ビデオコーダは、AddPicId(RefPicListX[j])がTargetAddPicIdに等しいかどうかを決定し得る。上記のように、AddPicId( )は、追加のピクチャ識別情報を戻す関数である。AddPicId(RefPicListX[j])がTargetAddPicIdに等しい場合、ビデオコーダは、時間マージング候補のRefPicListX動きベクトルの最終参照インデックスをjに設定し得る。言い換えれば、ビデオコーダは、両端値を含む1からnum_ref_idx_lX_active_minus1までの各jについて以下を実行し得る。AddPicId(RefPicListX[j])がTargetAddPicIdに等しい場合、ビデオコーダは最終参照インデックスをjに設定し、戻り得る。num_ref_idx_lX_active_minus1は、現在PUのRefPicListX中のアクティブ参照ピクチャの数を示し得る。j=1からj=num_ref_idx_lX_active_minus1までのRefPicListX[j]中の各参照ピクチャを検査した後に最終参照インデックスが戻されない場合、ビデオコーダは、時間マージング候補の動きベクトルが利用不可能であると決定し得る。
[0135]さらに、本開示の第2の例示的な技法では、RefPicListX[0]の参照ピクチャタイプが時間でなく、TMVPのRefPicListX動きベクトルが時間動きベクトルである場合、ビデオコーダは、現在PUのRefPicListXの初期参照ピクチャ以外のRefPicListX中の各参照ピクチャを検査し得る。ビデオコーダが現在PUのRefPicListXの位置jにおける参照ピクチャ(すなわち、RefPicListX[j])を検査したとき、ビデオコーダは、RefPicListX[j]が時間参照ピクチャであるかどうかを決定し得る。RefPicListX[j]が時間参照ピクチャである場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスをjに設定し、現在PUのRefPicListX中の参照ピクチャを検査するのを停止し得る。言い換えれば、両端値を含む1からnum_ref_idx_lX_active_minus1までのjについて、RefPicListX[j]が時間参照ピクチャである場合、最終参照インデックスをjに設定し、戻る。j=1からj=num_ref_idx_lX_active_minus1までのRefPicListX[j]中の各参照ピクチャを検査した後に最終参照インデックスが戻されない場合、ビデオコーダは、時間マージング候補の動きベクトルが利用不可能であると決定し得る。
[0136]代替例では、現在PUのRefPicListX中の初期参照ピクチャの参照ピクチャタイプが時間でなく、TMVPのRefPicListX動きベクトルが時間動きベクトルである場合、ビデオコーダは、現在PUのRefPicListXの初期参照ピクチャ以外の現在PUのRefPicListX中の各参照ピクチャを検査し得る。ビデオコーダが現在PUのRefPicListXの位置jにおける参照ピクチャ(すなわち、RefPicListX[j])を検査したとき、ビデオコーダは、RefPicListX[j]のPOC値が、TMVPのRefPicListX動きベクトルが参照する参照ピクチャのPOC値に等しいかどうかを決定し得る。そうである場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスをjに設定し、現在PUのRefPicListX中の参照ピクチャを検査するのを停止し得る。したがって、RefPicListX[0]の参照ピクチャタイプが時間でなく、TMVPのRefPicListX動きベクトルが時間動きベクトルである場合、両端値を含む1からnum_ref_idx_lX_active_minus1までのjについて、RefPicListX[j]のPOC値が、動きベクトルが参照しているピクチャのPOC値に等しい場合、最終参照インデックスをjに設定し、戻る。
[0137]いくつかの例では、現在PUのRefPicListXの初期参照ピクチャ以外の現在PUのRefPicListX中の各参照ピクチャを検査した後に、ビデオコーダは、現在PUのRefPicListX中の参照ピクチャが、TMVPのRefPicListX動きベクトルが参照する参照ピクチャのPOC値に等しくないと決定し、現在PUのRefPicListX中の最後の参照ピクチャが時間参照ピクチャである場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスをjに設定し得る。したがって、一代替形態では、前の段落において説明したループが正常に戻らない場合、両端値を含む1からnum_ref_idx_lX_active_minus1までのjについて、RefPicListX[j]が時間参照ピクチャである場合、最終参照インデックスをjに設定し、戻る。
[0138]さらに、本開示の第2の例示的な技法によれば、現在PUのRefPicListX中の初期参照ピクチャが時間参照ピクチャでなく、TMVPのRefPicListX動きベクトルが時間動きベクトルである場合、TMVPのRefPicListX動きベクトルによって参照される参照ピクチャのAddPicIdは、TargetAddPicIdと示され得る。さらに、ビデオコーダは、現在PUのRefPicListXの初期参照ピクチャ以外の現在PUのRefPicListX中の各参照ピクチャを検査し得る。ビデオコーダが現在PUのRefPicListXの位置jにおける参照ピクチャを検査したとき、ビデオコーダは、参照ピクチャのAddPicIdがTargetAddPicIdに等しいかどうかを決定し得る。参照ピクチャのAddPicIdがTargetAddPicIdに等しい場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスをjに設定し得、現在PUのRefPicListX中の参照ピクチャを検査するのを停止し得る。現在PUのRefPicListXの初期参照ピクチャ以外の現在PUのRefPicListX中の各参照ピクチャを検査した後に、ビデオコーダが、参照ピクチャのいずれもTargetAddPicIdに等しいAddPicIdsを有しないと決定した場合、ビデオコーダは、時間マージング候補が利用不可能であると決定し得る。
[0139]したがって、RefPicListX[0]のタイプが時間でなく、動きベクトルが時間でない場合、動きベクトルによって参照されるピクチャのAddPicIdはTargetAddPicIdと示され得る。両端値を含む0からnum_ref_idx_lX_active_minus1までのjについて、AddPicId(RefPicListX[j])がTargetAddPicIdに等しい場合、最終参照インデックスをjに設定し、戻る。まだ戻されない場合、動きベクトルは利用不可能であると見なされる。
[0140]一代替例では、現在PUのRefPicListX中の初期参照ピクチャが時間参照ピクチャでなく、TMVPのRefPicListX動きベクトルが時間動きベクトルでない場合、TMVPのRefPicListX動きベクトルによって参照される参照ピクチャのAddPicIdは、TargetAddPicIdと示され得る。さらに、この例では、現在PUのRefPicListXの初期参照ピクチャのAddPicIdがTargetAddPicIdに等しい場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスを0に設定し、戻り得る。場合によっては、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスを0に設定し、現在PUのRefPicListXの初期参照ピクチャのAddPicIdの間の差に基づいて時間マージング候補のRefPicListX動きベクトルをスケーリングし得る。
[0141]したがって、前の段落の例では、RefPicListX[0]のタイプが時間でなく、動きベクトルが時間でないとき、動きベクトルによって参照されるピクチャのAddPicIdをTargetAddPicIdと示す。AddPicId(RefPicListX[0])がTargetAddPicIdに等しい場合、最終参照インデックスを0に設定し、戻る。さもなければ、最終参照インデックスを0に設定し、AddPicIdの差に基づいて動きベクトルをスケーリングする。一例では、ビデオコーダは動きベクトル(「mv」)を以下のようにスケーリングし得る。mv=mv*(AddPicId(RefPicListX[0])−AddPicId(現在ピクチャ))/(TargetAddPicId−AddPicId(コロケートピクチャ))
[0142]本開示の別の例示的な技法では、ビデオエンコーダ20は、時間マージング候補のために使用されるべきターゲット参照インデックスをシグナリングし得る。ターゲット参照インデックスのシグナリングは様々なレベルにおけるものであり得る。たとえば、ビデオエンコーダ20は、ターゲット参照インデックスをスライスレベルでシグナリングし得る。たとえば、この例では、ビデオエンコーダ20は、ターゲット参照インデックスをスライスヘッダ中でシグナリングし得る。別の例では、ビデオエンコーダ20は、ターゲット参照インデックスをPUレベルでシグナリングし得る。たとえば、この例では、ビデオエンコーダ20は、ターゲット参照インデックスをprediction_unitシンタックス構造においてシグナリングし得る。本開示のこの例示的な技法によれば、時間マージング候補のために使用され得る参照フレームの数が個別に制限され得る。たとえば、ビデオコーダは、時間マージング候補のための参照ピクチャリスト中の最初の2つのフレームのみを使用し得る。この手法の第1の利点は、TMVP参照インデックスシグナリングのために費やされるビンの数が一般的な場合における(たとえば、2つの参照フレームをもつ前の例における)数よりも小さくなり得ることであり得、それは、参照インデックス0または参照インデックス1が使用されることを示す1ビットのみである。第2の利点は、TMVP参照インデックスが事前に知られている場合、ビデオコーダが、フレーム全体またはフレームの一部について前もってTMVP候補を事前に導出し得、この事前計算では可能性の数を制限することが有用である(前の例では、それは最高2つの異形であり得る)ことであり得る。
[0143]様々なシナリオでは、ピクチャBとピクチャAとピクチャBとからピクチャAを参照している動きベクトルが同じPOCを有する場合、動きベクトルは時間動きベクトルでないと見なされ得る。
[0144]上記のように、TMVPはコロケートPUの動きベクトルであり得、ターゲット参照インデックスは、マージ/スキップ候補リストまたはAMVP候補リスト中の時間マージング候補の参照インデックスである。ターゲット参照インデックスは常に0に等しくなり得る。本開示の技法の少なくともいくつかは、ビデオコーダがマージモードでTMVPを使用し、ターゲット参照インデックスが常に0に等しい場合をターゲットにする。したがって、TMVPが、0に等しい参照インデックスによって識別される現在PUの参照ピクチャ(すなわち、参照ピクチャリストの初期のまたは第1の参照ピクチャ)とは異なる参照ピクチャタイプ(たとえば、時間またはビュー間)を有する参照ピクチャを指すとき、ビデオコーダは、時間マージング候補のターゲット参照インデックスを変更し得る。本開示は、TMVPが、「条件に一致しない参照タイプ」として、0に等しい参照インデックスによって識別される現在PUの参照ピクチャとは異なるタイプ(たとえば、時間またはビュー間)を有する参照ピクチャを指す条件を示し得る。
[0145]上記の例では、ビデオコーダは、(たとえば、2つの異なるピクチャが両方とも長期参照ピクチャであったか両方とも短期ピクチャであったか、それらが両方ともビュー間参照ピクチャであったかどうか、またはは、それらの各々が、それを参照しているとピクチャと同じPOC値を有するかどうかによって)同じ参照ピクチャタイプを有する2つの異なるピクチャを識別し得る。ターゲット参照インデックスは、変更された後でさえ、単に、0と、全スライスにわたって固定である1つの特定の値Cとであり得る。0はタイプ0(長期またはビュー間)に対応し、Cは、タイプ1(短期または時間)に対応する参照ピクチャリスト中の第1のエントリに対応する参照インデックスであると仮定する。0はタイプ1(短期または時間)に対応し、Cは、タイプ0(長期またはビュー間)に対応する参照ピクチャリスト中の第1のエントリに対応する参照インデックスであると仮定する。条件に一致しない参照タイプが当てはまるとき、ビデオコーダは、Cになるように最終参照インデックスを変更し得る。
[0146]HEVCベースのマルチビュー(すなわち、MV−HEVC)および3D−HEVCにおける動き関連の技術のためのいくつかの設計は、いくつかのさらなる問題を有する。たとえば、3D−HTMのいくつかのバージョンでは、時間マージング候補のためのターゲット参照インデックス(TIdx)は、0に等しくないことがある、左に隣接するPUからの参照インデックスによって決定され得る。TMVPの動きベクトルがディスパリティ動きベクトルであり、TIdxが時間参照ピクチャに対応する場合、ビデオコーダはディスパリティ動きベクトルをスケーリングしない。反対に、TMVPの動きベクトルが時間動きベクトルであり、TIdxがビュー間参照ピクチャに対応する場合、ビデオコーダは時間動きベクトルをスケーリングしない。これら2つの場合では、ビデオコーダは、時間マージング候補が利用不可能でないと見なし得る。同じ問題は、TIdxが現在CU/PUのための復号された参照インデックスを表すAMVPモードにおいて観察され得る。
[0147]MV−HEVCと3D−HEVCとのための動き関連の技術のためのいくつかの設計についての別の例示的な問題では、ディスパリティ動きベクトルが識別されると、ディスパリティベクトル導出プロセスが終了される。しかしながら、第1の利用可能なディスパリティ動きベクトルは十分に正確でないことがある。別の例示的な問題では、スキップ/マージモードのためのビュー間候補導出プロセスが常にビュー間予測動きベクトルを選好する。ビュー間予測をおそらく使用することになる高動きをもつ領域では、これは好適でないことがある。別の例示的な問題では、ビュー間候補の固定位置、すなわち、AMVP候補リストまたはマージング候補リスト中のすべての空間候補の前または後の位置が、局所的な特性に適応できない。
[0148]本開示は、MV−HEVCおよび/または3DVコーディングにおける動き予測のコーディング効率をさらに改善するための様々な方法を提供する。たとえば、時間マージング候補の(空間隣接ブロックによって導出された)ターゲット参照インデックスは、TMVPが指す参照ピクチャとは異なる参照ピクチャタイプを有する参照ピクチャに対応するとき、ビデオコーダは、時間マージング候補を、TMVPの参照ピクチャの参照ピクチャタイプと同じ参照ピクチャタイプ(たとえば、時間またはビュー間)をもつピクチャに対応する参照インデックス値に変更し得る。たとえば、参照ピクチャが時間参照ピクチャであり、TMVPが指す参照ピクチャがビュー間参照ピクチャであるとき、ビデオコーダは、時間マージング候補を、TMVPの参照ピクチャの参照ピクチャタイプと同じ参照ピクチャタイプをもつピクチャに対応する参照インデックス値に変更し得る。
[0149]本開示の別の例示的な技法によれば、マージ/スキップモードでは、ビュー間予測動きベクトルが利用可能であるときでも、ビデオコーダは、ビュー間予測動きベクトルをマージング候補リストに追加しないことがある。そうではなく、ビデオコーダは、代わりに、ディスパリティベクトルをビュー間ディスパリティ動きベクトルに変換し得る。ビデオコーダは、そのビュー間ディスパリティ動きベクトルをマージング候補リスト中に追加し得る。ビデオコーダは、空間隣接ブロックの情報に基づいて、マージング候補リストにビュー間予測動きベクトルを追加すべきかビュー間ディスパリティ動きベクトルを追加すべきかを決定し得る。
[0150]さらに、本開示の別の例示的な技法によれば、ビデオコーダは、ディスパリティベクトル導出プロセス中に、隣接ブロックから複数の利用可能なディスパリティ動きベクトルを収集し得る。ビデオコーダは、導出されたディスパリティベクトルとして複数のディスパリティ動きベクトルの中間値(たとえば、中央値)または平均を使用し得る。本開示の別の例示的な技法によれば、ビデオコーダは、マージ/スキップモードでは、空間隣接ブロックの情報に基づいて、マージング候補リスト中に、第1の利用可能な空間マージング候補の前または後に、ビュー間予測動きベクトルまたはビュー間ディスパリティ動きベクトルを挿入し得る。
[0151]図7は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図7は、説明のために与えられており、本開示において広く例示され説明される技法を限定するものと見なされるべきでない。説明のために、本開示では、HEVCコーディングのコンテキストにおいてビデオエンコーダ20について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0152]図7の例では、ビデオエンコーダ20は、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構成ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニット122と、動き補償ユニット124とを含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[0153]ビデオエンコーダ20はビデオデータを受信し得る。ビデオエンコーダ20は、ビデオデータのピクチャのスライス中の各CTUを符号化し得る。CTUの各々は、等しいサイズのルーマコーディングツリーブロック(CTB:coding tree block)と、ピクチャの対応するCTBとに関連し得る。CTUの符号化の一部として、予測処理ユニット100は、4分木分割を実行して、CTUのCTBを漸進的に小さくなるブロックに分割し得る。より小さいブロックは、CUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUに関連するCTBを4つの等しいサイズのサブブロックに区分し、サブブロックのうちの1つまたは複数を4つの等しいサイズのサブサブブロックに区分し得、以下同様である。
[0154]ビデオエンコーダ20は、CTUのCUを符号化してCUの符号化表現(すなわち、コード化CU)を生成し得る。CUの符号化の一部として、予測処理ユニット100は、CUに関連するコーディングブロックをCUの1つまたは複数のPUの間で区分し得る。したがって、各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サイズに対する非対称区分もサポートし得る。
[0155]インター予測処理ユニット120は、CUの各PUに対してインター予測を実行することによってPUの予測データを生成し得る。PUの予測データは、PUの予測ブロックと、PUの動き情報とを含み得る。インター予測処理ユニット120は、PUがIスライス中にあるか、Pスライス中にあるか、Bスライス中にあるかに応じて、CUのPUに対して異なる演算を実行し得る。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測処理ユニット120は、PUに対してインター予測を実行しない。
[0156]Pスライス中のPUはイントラ予測または単方向インター予測され得る。たとえば、PUがPスライス中にある場合、動き推定ユニット122は、PUの参照領域について参照ピクチャのリスト(たとえば、「RefPicList0」)中の参照ピクチャを探索し得る。PUの参照領域は、参照ピクチャ内の、PUの予測ブロックに最も密接に対応するサンプルブロックを含んでいる領域であり得る。動き推定ユニット122は、PUの参照領域を含んでいる参照ピクチャのRefPicList0中の位置を示す参照インデックス(すなわち、RefPicList0参照インデックス)を生成し得る。さらに、動き推定ユニット122は、PUの予測ブロックと参照領域に関連する参照ロケーションとの間の空間変位を示す動きベクトル(すなわち、RefPicList0動きベクトル)を生成し得る。たとえば、動きベクトルは、現在の復号されたピクチャ中の座標から参照ピクチャ中の座標までのオフセットを与える2次元ベクトルであり得る。動き推定ユニット122は、PUの動き情報として、参照インデックスと動きベクトルとを出力し得る。動き補償ユニット124は、PUの動きベクトルによって示される参照ロケーションにおける実際のまたは補間されたサンプルに基づいて、PUの予測ブロックを生成し得る。
[0157]Bスライス中のPUは、イントラ予測されるか、単方向インター予測されるか、または双方向インター予測され得る。したがって、PUがBスライス中のある場合、動き推定ユニット122は、PUに対して単予測または双予測を実行し得る。PUに対して単予測を実行するために、動き推定ユニット122は、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索し得る。動き推定ユニット122は、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUの予測ブロックと参照領域に関連する参照ロケーションとの間の空間変位を示す動きベクトルと、参照ピクチャがRefPicList0中にあるかRefPicList1中にあるかを示す1つまたは複数の予測方向インジケータとを出力し得る。動き補償ユニット124は、PUの動きベクトルによって示される参照ロケーションにおける実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[0158]PUに対して双方向インター予測を実行するために、動き推定ユニット122は、PUの参照領域についてRefPicList0中の参照ピクチャを探索し得、また、PUの別の参照領域についてRefPicList1中の参照ピクチャを探索し得る。動き推定ユニット122は、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中の位置を示す参照インデックス(すなわち、RefPicList0参照インデックスおよびRefPicList1参照インデックス)を生成し得る。さらに、動き推定ユニット122は、参照領域に関連する参照ロケーションとPUのサンプルブロックとの間の空間変位を示す動きベクトル(すなわち、RefPicList0動きベクトルおよびRefPicList1動きベクトル)を生成し得る。PUの動き情報は、PUの参照インデックスと動きベクトルとを含み得る。動き補償ユニット124は、PUの動きベクトルによって示される参照ロケーションにおける実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[0159]イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによってPUの予測データを生成し得る。PUの予測データは、PUの予測ブロックと、様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス中、Pスライス中、およびBスライス中のPUに対してイントラ予測を実行し得る。
[0160]PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUのための予測データの複数のセットを生成し得る。イントラ予測処理ユニット126は、隣接PUのサンプルに基づいてPUの予測ブロックを生成し得る。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。異なるイントラ予測モードは、ネイバーサンプルの異なるセットに関連し得る。イントラ予測処理ユニット126は様々な数のイントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数はPUの予測ブロックのサイズに依存し得る。
[0161]予測処理ユニット100は、PUのためにインター予測処理ユニット120によって生成された予測データ、またはPUのためにイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUのための予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみメトリックに基づいて、CUのPUのための予測データを選択する。選択された予測データの予測ブロックは、本明細書では、選択された予測ブロックと呼ぶことがある。
[0162]残差生成ユニット102は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック、ならびにCUのPUの選択された予測ルーマブロック、予測Cbブロック、および予測Crブロックに基づいて、CUのルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロックを生成し得る。たとえば、残差生成ユニット102は、残差ブロック中の各サンプルがCUのコーディングブロック中のサンプルとCUのPUの対応する選択された予測ブロック中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
[0163]変換処理ユニット104は、4分木分割を実行して、CUに関連する残差ブロックを、CUのTUに関連する変換ブロックに区分し得る。したがって、TUは、ルーマ変換ブロックと、2つの対応するクロマ変換ブロックとに関連し得る。CUのTUのルーマ変換ブロックとクロマ変換ブロックとのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも基づかないこともある。
[0164]変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUのTUごとに係数ブロックを生成し得る。変換処理ユニット104は、TUに関連付する変換ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は変換ブロックに変換を適用しない。そのような例では、変換ブロックは係数ブロックとして扱われ得る。
[0165]量子化ユニット106は、係数ブロック中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部または全部に関連するビット深度を低減し得る。たとえば、量子化時にnビット変換係数はmビット変換係数に切り捨てられ得、ただし、nはmよりも大きい。量子化ユニット106は、CUに関連する量子化パラメータ(QP:quantization parameter)値に基づいて、CUのTUに関連する係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連するQP値を調整することによって、CUにする係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらし得、したがって、量子化変換係数は、元の係数よりも低い精度を有し得る。
[0166]逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、係数ブロックに逆量子化および逆変換を適用して、係数ブロックから残差ブロックを再構成し得る。再構成ユニット112は、再構成された残差ブロックのサンプルを、予測処理ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに加算して、TUに関連する再構成された変換ブロックを生成し得る。このようにCUの各TUのための変換ブロックを再構成することによって、ビデオエンコーダ20はCUのコーディングブロックを再構成し得る。
[0167]フィルタユニット114は、CUに関連するコーディングブロック中のブロッキングアーティファクトを低減するために、1つまたは複数のデブロッキング演算を実行し得る。フィルタユニット114が、再構成されたコーディングブロックに対して1つまたは複数のデブロッキング演算を実行した後に、復号ピクチャバッファ116は、再構成されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、再構成されたコーディングブロックを含んでいる参照ピクチャを使用して、他のピクチャのPUに対してインター予測を実行し得る。さらに、イントラ予測処理ユニット126は、復号ピクチャバッファ116中の再構成されたコーディングブロックを使用して、CUと同じピクチャ中の他のPUに対してイントラ予測を実行し得る。
[0168]エントロピー符号化ユニット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)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算をデータに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。たとえば、ビットストリームは、CUのRQTを表すデータを含み得る。ビットストリームはまた、エントロピー符号化されないシンタックス要素を含み得る。
[0169]図8は、本開示で説明する技法を実装し得る例示的なビデオデコーダ30を示すブロック図である。図8は、説明のために与えられており、本開示において広く例示され説明される技法を限定するものではない。説明のために、本開示では、HEVCコーディングのコンテキストにおいてビデオデコーダ30について説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0170]図8の例では、ビデオデコーダ30は、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構成ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164と、イントラ予測処理ユニット166とを含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[0171]エントロピー復号ユニット150は、NALユニットを受信し、NALユニットをパースしてビットストリームからシンタックス要素を取得し得る。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、およびフィルタユニット160は、ビットストリームから取得されたシンタックス要素に基づいて復号ビデオデータを生成し得る。
[0172]ビットストリームのNALユニットは、コード化スライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コード化スライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コード化スライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関するシンタクス要素を含んでいることがある。スライスヘッダ中のシンタックス要素は、スライスを含んでいるピクチャに関連するPPSを識別するシンタックス要素を含み得る。
[0173]ビットストリームからシンタックス要素を取得することに加えて、ビデオデコーダ30は、CUに対して再構成演算を実行し得る。CUに対して再構成演算を実行するために、ビデオデコーダ30は、CUの各TUに対して再構成演算を実行し得る。CUの各TUに対して再構成演算を実行することによって、ビデオデコーダ30はCUの残差ブロックを再構成し得る。
[0174]CUのTUに対して再構成演算を実行することの一部として、逆量子化ユニット154は、TUに関連する係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化ユニット154は、TUのCUに関連するQP値を使用して、量子化の程度を決定し得、同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定し得る。
[0175]逆量子化ユニット154が係数ブロックを逆量子化した後に、逆変換処理ユニット156は、TUに関連する残差ブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT:Karhunen-Loeve transform)、逆回転変換、逆方向性変換、または別の逆変換を係数ブロックに適用し得る。
[0176]PUがイントラ予測を使用して符号化された場合、イントラ予測処理ユニット166は、イントラ予測を実行してPUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するPUの予測ブロックに基づいてPUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定し得る。
[0177]予測処理ユニット152は、ビットストリームから取得されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を構成し得る。さらに、PUがインター予測を使用して符号化された場合、エントロピー復号ユニット150は、PUの動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUのための1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUのための1つまたは複数の参照ブロックにおけるサンプルに基づいて、PUのための予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
[0178]再構成ユニット158は、適用可能なとき、CUのTUに関連するルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロック、ならびにCUのPUの予測ルーマブロック、予測Cbブロックおよび予測Crブロック、すなわち、イントラ予測データまたはインター予測データのいずれかを使用して、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックを再構成し得る。たとえば、再構成ユニット158は、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロックのサンプルを、予測ルーマブロック、予測Cbブロックおよび予測Crブロックの対応するサンプルに加算して、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックを再構成し得る。
[0179]フィルタユニット160は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックに関連するブロッキングアーティファクトを低減するために、デブロッキング演算を実行し得る。ビデオデコーダ30は、CUのルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロックを復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを与え得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162中のルーマブロック、CbブロックおよびCrブロックに基づいて、他のCUのPUに対してイントラ予測演算またはインター予測演算を実行し得る。このようにして、ビデオデコーダ30は、ビットストリームからルーマ係数ブロックの変換係数レベルを取得し、変換係数レベルを逆量子化し、変換係数レベルに変換を適用して変換ブロックを生成し、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成し、表示のためにコーディングブロックを出力し得る。
[0180]本開示の第1の例示的な技法によれば、現在ビデオユニットに関連する参照ピクチャリスト中の初期参照ピクチャと、現在ビデオユニットのためのTMVPの参照インデックスによって示される参照ピクチャとが、異なる参照ピクチャタイプに属するとき、ビデオコーダは、時間マージング候補の参照インデックスを非0値(すなわち、参照ピクチャリストの第1の位置以外の参照ピクチャリスト中の位置を示す値)に設定し得る。時間マージング候補の参照インデックスは、現在ビデオユニットに関連する参照ピクチャリスト中の位置を示す。
[0181]さらに、本開示の第1の例示的な技法によれば、ビュー間参照ピクチャが長期であると見なされる。TMVP導出がマージモードの下で行われるとき、ビデオコーダは最終参照インデックスを変更し得る。変数mergeTMVPが、マージモードの下では1に設定され、AMVPモードの下では0に設定される。言い換えれば、1に等しいmergeTMVPはマージモードを示し、0に等しいmergeTMVPはAMVPモードを示す。たとえば、2つの参照ピクチャを考察することにし、一方はRefPicListX[0]であり、他方は、TMVPのRefPicListX動きベクトルが参照するピクチャである。2つの参照ピクチャのうちの一方が短期であり、他方が長期である場合、ビデオコーダは、RefPicListX[i]を満たすエントリiと、TMVPのRefPicListX動きベクトルが参照するピクチャが、両方とも短期になるか両方とも長期になるまで、現在PUのRefPicListX中で探索を実行し得る。
[0182]本開示の第1の例示的な技法を実装するために、HEVC Working Draft 7に様々な変更が加えられ得る。様々なHEVC Working Draftへの変更を示す本開示の部分全体にわたって、ボールドおよび下線で示されたテキストは追加されたテキストを示す。さらに、様々なHEVC Working Draftへの変更を示す本開示の部分全体にわたって、取消し線で示されたテキストは削除されたテキストを示す。本開示の第1の例示的な技法を実装するために、HEVC Working Draft 7のセクション8.5.2.1.1に以下の変更が加えられ得る。以下のテキストに示されていないHEVC Working Draft 7のセクション8.5.2.1.1の部分は、HEVC Working Draft 7への記載と同じままであり得る。
8.5.2.1.1 マージモードのためのルーマ動きベクトルの導出プロセス
このプロセスは、PredModeがMODE_SKIPに等しいかまたはPredModeがMODE_INTERに等しく、merge_flag[xP][yP]が1に等しいときにのみ呼び出され、ただし、(xP,yP)は、現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルを指定する。
このプロセスの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在コーディングユニットの左上ルーマサンプルのルーマロケーション(xC,yC)、
− 現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルのルーマロケーション(xP,yP)、
− 現在コーディングユニットのサイズを指定する変数nCS、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在コーディングユニット内の現在予測ユニットのインデックスを指定する変数PartIdx
このプロセスの出力は以下の通りである。
− ルーマ動きベクトルmvL0およびmvL1、
− 参照インデックスrefIdxL0およびrefIdxL1、
− 予測リスト利用フラグpredFlagL0およびpredFlagL1
変数singleMCLFlagは以下のように導出される。
− log2_parallel_merge_level_minus2が0よりも大きく、nCSが8に等しい場合、singleMCLFlagは1に設定される。
− そうでない場合、singleMCLFlagは0に設定される。
singleMCLFlagが1に等しいとき、xPはxCに等しく設定され、yPはyCに等しく設定され、nPSWとnPSHの両方はnCSに等しく設定される。
注釈−singleMCLFlagが1に等しいとき、現在コーディングユニットのすべての予測ユニットは、2N×2N予測ユニットのマージング候補リストと同等である、単一のマージング候補リストを共有する。
動きベクトルmvL0およびmvL1と、参照インデックスrefIdxL0およびrefIdxL1と、予測利用フラグpredFlagL0およびpredFlagL1とは、以下の順序付きステップによって指定されているように導出される。
1. サブクローズ8.5.2.1.2における隣接予測ユニットパーティションからのマージング候補の導出プロセスが、入力として、ルーマロケーション(xP,yP)と、変数singleMCLFlagと、予測ユニットの幅および高さnPSWおよびnPSHと、パーティションインデックスPartIdxとを用いて呼び出され、出力が、利用可能性フラグavailableFlagNと、参照インデックスrefIdxL0NおよびrefIdxL1Nと、予測リスト利用フラグpredFlagL0NおよびpredFlagL1Nと、動きベクトルmvL0NおよびmvL1Nとに割り当てられ、ただし、NはA0、A1、B0、B1またはB2で置き換えられる。
2. 時間マージング候補の参照インデックスが0に等しくなるように導出され、mergeTMVPが1に設定される。
3. ...
[0183]セクション8.5.2.1.1への変更に示されているように、マージモードのためのルーマ動きベクトルの導出プロセス中にmergeTMVP変数は1に設定される。したがって、mergeTMVP変数は、ビデオコーダがマージモードを使用していることを示す。
[0184]さらに、本開示の第1の例示的な技法によれば、HEVC Working Draft 7のセクション8.5.2.1.7に以下の変更が加えられ得る。
8.5.2.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上サンプルに対する現在予測ユニットの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在予測ユニットパーティションの参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
関数RefPicOrderCnt(picX,refIdx,LX)は、ピクチャpicXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャのピクチャ順序カウントPicOrderCntValを戻し、以下のように指定される。
RefPicOrderCnt(picX, refIdx, LX)=PicOrderCnt(ピクチャpicXのRefPicListX[refIdx]) (8−141)
slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
変数colPuとそれの位置(xPCol,yPCol)とは、以下の順序付きステップで導出される。
1. 変数colPuが以下のように導出される。
yPRb=yP+nPSH (8−139)
− (yP>>Log2CtbSize)が(yPRb>>Log2CtbSize)に等しい場合、現在予測ユニットの右下ルーマ位置の水平成分が以下のように定義され、
xPRb=xP+nPSW (8−140)
変数colPuが、colPic内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更された位置をカバーする予測ユニットとして設定される。
− そうでない場合((yP>>Log2CtbSize)が(yPRb>>Log2CtbSize)に等しくない)、colPuは「利用不可能である」とマークされる。
2. colPuがイントラ予測モードでコーディングされるか、またはcolPuが「利用不可能である」とマークされたとき、以下が適用される。
− 現在予測ユニットの中心ルーマ位置が以下のように定義される。
xPCtr=(xP+(nPSW>>1) (8−141)
yPCtr=(yP+(nPSH>>1) (8−142)
− 変数colPuが、colPic内の((xPCtr>>4)<<4,(yPCtr>>4)<<4)によって与えられる変更された位置をカバーする予測ユニットとして設定される。
3. (xPCol,yPCol)が、colPicの左上ルーマサンプルに対するcolPuの左上ルーマサンプルに等しく設定される。
関数LongTermRefPic(picX,refIdx,LX)は以下のように定義される。ピクチャpicXが現在ピクチャであった時間において、picXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャが「長期参照に使用される」とマークされた場合、LongTermRefPic(picX,refIdx,LX)は1を戻し、そうでない場合、LongTermRefPic(pic,refIdx,LX)は0を戻す。
mergeTMVPが(マージモードの下で)1である場合、以下が適用され、refIdxLXの値を変更し得る。
− RefPicListX[0]が長期参照ピクチャであり、LongTermRefPic(colPic,refIdxCol,listCol)が0に等しい場合、両端値を含む1からnum_ref_idx_lX_active_minus1までのiについて、以下が適用される。
− RefPicListX[i]が短期参照ピクチャである場合、refIdxLXがiに設定され、ループを終了する。
− RefPicListX[0]が短期参照ピクチャであり、LongTermRefPic(colPic,refIdxCol,listCol)が1に等しい場合、両端値を含む1からnum_ref_idx_lX_active_minus1までのiについて、以下が適用される。
− RefPicListX[i]が長期参照ピクチャである場合、refIdxLXがiに設定され、ループを終了する。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− 以下の条件のうちの1つまたは複数が真である場合、mvLXColの両方の成分は0に等しく設定され、availableFlagLXColは0に等しく設定される。
− colPuがイントラ予測モードでコーディングされる。
− colPuが「利用不可能である」とマークされている。
− pic_temporal_mvp_enable_flagが0に等しい。
− そうでない場合、動きベクトルmvCol、参照インデックスrefIdxCol、および参照リスト識別子listColは以下のように導出される。
− PredFlagL0[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvL1[xPCol][yPCol]、RefIdxL1[xPCol][yPCol]、およびL1に等しく設定される。
− そうでない場合(PredFlagL0[xPCol][yPCol]が1に等しい)、以下が適用される。
− PredFlagL1[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvL0[xPCol][yPCol]、RefIdxL0[xPCol][yPCol]、およびL0に等しく設定される。
− そうでない場合(PredFlagL1[xPCol][yPCol]が1に等しい)、以下の割当てが行われる。
− あらゆる参照ピクチャリスト中のあらゆるピクチャpicのPicOrderCnt(pic)がPicOrderCntVal以下である場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvLX[xPCol][yPCol]、RefIdxLX[xPCol][yPCol]およびLXに等しく設定され、ただし、Xは、このプロセスが呼び出されたXの値である。
− そうでない場合(少なくとも1つの参照ピクチャリスト中の少なくとも1つのピクチャpicのPicOrderCnt(pic)がPicOrderCntValよりも大きい、mvCol、refIdxColおよびlistColは、それぞれ、MvLN[xPCol][yPCol]、RefIdxLN[xPCol][yPCol]およびLNに等しく設定され、ただし、Nは、collocated_from_l0_flagの値である。
− 以下の条件のうちの1つが真である場合、変数availableFlagLXColは0に等しく設定される。
− RefPicListX[refIdxLX]が長期参照ピクチャであり、LongTermRefPic(colPic,refIdxCol,listCol)が0に等しい。
− RefPicListX]refIdxLX]が短期参照ピクチャであり、LongTermRefPic(colPic,refIdxCol,listCol)が1に等しい。
− そうでない場合、変数availableFlagLXColは1に等しく設定され、以下が適用される。
− RefPicListX[refIdxLX]が長期参照ピクチャである場合、またはLongTermRefPic(colPic,refIdxCol,listCol)が1に等しい場合、またはPicOrderCnt(colPic)−RefPicOrderCnt(colPic,refIdxCol,listCol)がPicOrderCntVal−PicOrderCnt(RefPicListX[refIdxLX])に等しい場合、
mvLXCol=mvCol (8−143)
− そうでない場合、mvLXColは、以下で指定されるように動きベクトルmvColのスケーリングされたバージョンとして導出される
tx=(16384+(Abs(td)>>1))/td (8−144)
DistScaleFactor=Clip3(−4096,4095,(tb*tx+32)>>6) (8−145)
mvLXCol=Clip3(−8192,8191.75,Sign(DistScaleFactor*mvCol)*((Abs(DistScaleFactor*mvCol)+127)>>8)) (8−146)
ただし、tdおよびtbは以下のように導出される
td=Clip3(−128,127,PicOrderCnt(colPic )−RefPicOrderCnt(colPic,refIdxCol,listCol)) (8−147)
tb=Clip3(−128,127,PicOrderCntVal−PicOrderCnt(RefPicListX[refIdxLX])) (8−148)
[0185]HEVC Working Draft 7のセクション8.5.2.1.7への上記に示した変更に示されているように、RefPicListX[0]は、現在PUのRefPicListX中の第1の参照ピクチャを示す。さらに、LongTermRefPic(colPic,refIdxCol,listCol)は、位置refIdxColにおけるコロケートピクチャ(すなわち、colPic)の参照ピクチャリスト(すなわち、listCol)中の参照ピクチャが長期参照ピクチャであるかどうかを示す。
[0186]したがって、現在PUのRefPicListX中の第1の参照ピクチャが長期参照ピクチャであり、コロケートピクチャ中のTMVPのRefPicListX参照インデックスによって示される参照ピクチャが長期参照ピクチャでない(すなわち、LongTermRefPic(colPic,refIdxCol,listCol)が0に等しい)場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックス(すなわち、refIdxLX)を現在PUのRefPicListX中の第1の短期参照ピクチャに設定し得る。現在PUのRefPicListX中の第1の参照ピクチャが短期参照ピクチャであり、コロケートピクチャ中のTMVPのRefPicListX参照インデックスによって示される参照ピクチャが長期参照ピクチャでない(すなわち、LongTermRefPic(colPic,refIdxCol,listCol)が1に等しい)場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックス(すなわち、refIdxLX)を現在PUのRefPicListX中の第1の長期参照ピクチャに設定し得る。
[0187]上記で説明したように、ビデオコーダは、本開示の第2の例示的な技法によれば、現在PUのRefPicListXの初期参照ピクチャと、TMVPのRefPicListX動きベクトルによって指される参照ピクチャの両方が、両方とも時間短期参照ピクチャであるかどうかを決定する。そうである場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを0に設定し得る。そうでない場合、ビデオコーダは、時間マージング候補のRefPicListX参照インデックスを非0値に設定し得る。
[0188]本開示の第2の例示的な技法では、ビュー間ピクチャは、異なる次元によって識別され得る。本開示の第2の例示的な技法では、各ピクチャが属するレイヤ/ビューを識別するためにAddPicIdが使用され得る。たとえば、2つの参照ピクチャを考察することにし、一方はRefPicListX[0]であり、他方は、TMVPのRefPicListX動きベクトルが参照するピクチャpicTである。この例では、PicTはターゲットピクチャであり、RefPicListX中のi番目のエントリが、RefPicListX[0]のAddPicIdとは異なるPicTと同じAddPicIdを有する場合、iは最終参照インデックスとして設定される。複数のエントリがこの要求を満たすとき、ビデオコーダは、最も小さいインデックスを、時間マージング候補の最終RefPicListX参照インデックスとして設定し得る。
[0189]本開示の第2の例示的な技法によれば、HEVC Working Draft 7のセクション8.5.2.1.1は以下のように変更され得る。
8.5.2.1.1 マージモードのためのルーマ動きベクトルの導出プロセス
このプロセスは、PredModeがMODE_SKIPに等しいかまたはPredModeがMODE_INTERに等しく、merge_flag[xP][yP]が1に等しいときにのみ呼び出され、ただし、(xP,yP)は、現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルを指定する。
このプロセスの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在コーディングユニットの左上ルーマサンプルのルーマロケーション(xC,yC)、
− 現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルのルーマロケーション(xP,yP)、
− 現在コーディングユニットのサイズを指定する変数nCS、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在コーディングユニット内の現在予測ユニットのインデックスを指定する変数PartIdx
このプロセスの出力は以下の通りである。
− ルーマ動きベクトルmvL0およびmvL1、
− 参照インデックスrefIdxL0およびrefIdxL1、
− 予測リスト利用フラグpredFlagL0およびpredFlagL1
変数singleMCLFlagは以下のように導出される。
− log2_parallel_merge_level_minus2が0よりも大きく、nCSが8に等しい場合、singleMCLFlagは1に設定される。
− そうでない場合、singleMCLFlagは0に設定される。
singleMCLFlagが1に等しいとき、xPはxCに等しく設定され、yPはyCに等しく設定され、nPSWとnPSHの両方はnCSに等しく設定される。
注釈−singleMCLFlagが1に等しいとき、現在コーディングユニットのすべての予測ユニットは、2N×2N予測ユニットのマージング候補リストと同等である、単一のマージング候補リストを共有する。
動きベクトルmvL0およびmvL1と、参照インデックスrefIdxL0およびrefIdxL1と、予測利用フラグpredFlagL0およびpredFlagL1とは、以下の順序付きステップによって指定されているように導出される。
1. サブクローズ8.5.2.1.2における隣接予測ユニットパーティションからのマージング候補の導出プロセスが、入力として、ルーマロケーション(xP,yP)と、変数singleMCLFlagと、予測ユニットの幅および高さnPSWおよびnPSHと、パーティションインデックスPartIdxとを用いて呼び出され、出力が、利用可能性フラグavailableFlagNと、参照インデックスrefIdxL0NおよびrefIdxL1Nと、予測リスト利用フラグpredFlagL0NおよびpredFlagL1Nと、動きベクトルmvL0NおよびmvL1Nとに割り当てられ、ただし、NはA0、A1、B0、B1またはB2で置き換えられる。
2. 時間マージング候補の参照インデックスが0に等しくなるように導出され、mergeTMVPが1に設定される。
3. ...
[0190]セクション8.5.2.1.1への変更に示されているように、マージモードのためのルーマ動きベクトルの導出プロセス中にmergeTMVP変数は1に設定される。したがって、mergeTMVP変数は、ビデオコーダがマージモードを使用していることを示す。
[0191]本開示の第2の例示的な技法によれば、HEVC Working Draft 7のセクション8.5.2.1.7は以下のように変更され得る。
8.5.2.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上サンプルに対する現在予測ユニットの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在予測ユニットパーティションの参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
関数RefPicOrderCnt(picX,refIdx,LX)は、ピクチャpicXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャのピクチャ順序カウントPicOrderCntValを戻し、以下のように指定される。
RefPicOrderCnt(picX,refIdx,LX)=PicOrderCnt(ピクチャpicXのRefPicListX[refIdx]) (8−141)
slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
変数colPuとそれの位置(xPCol,yPCol)とは、以下の順序付きステップで導出される。
1. 変数colPuが以下のように導出される。
yPRb=yP+nPSH (8−139)
− (yP>>Log2CtbSize)が(yPRb>>Log2CtbSize)に等しい場合、現在予測ユニットの右下ルーマ位置の水平成分が以下のように定義され、
xPRb=xP+nPSW (8−140)
変数colPuが、colPic内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更された位置をカバーする予測ユニットとして設定される。
− そうでない場合((yP>>Log2CtbSize)が(yPRb>>Log2CtbSize)に等しくない)、colPuは「利用不可能である」とマークされる。
2. colPuがイントラ予測モードでコーディングされるか、またはcolPuが「利用不可能である」とマークされたとき、以下が適用される。
− 現在予測ユニットの中心ルーマ位置が以下のように定義される。
xPCtr=(xP+(nPSW>>1) (8−141)
yPCtr=(yP+(nPSH>>1) (8−142)
− 変数colPuが、colPic内の((xPCtr>>4)<<4,(yPCtr>>4)<<4)によって与えられる変更された位置をカバーする予測ユニットとして設定される。
3. (xPCol,yPCol)が、colPicの左上ルーマサンプルに対するcolPuの左上ルーマサンプルに等しく設定される。
関数LongTermRefPic(picX,refIdx,LX)は以下のように定義される。ピクチャpicXが現在ピクチャであった時間において、picXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャが「長期参照に使用される」とマークされた場合、LongTermRefPic(picX,refIdx,LX)は1を戻し、そうでない場合、LongTermRefPic(pic,refIdx,LX)は0を戻す。
AddPicId(picX,refIdx,LX)はAddPicId(pic)を戻し、ここにおいて、picは、ピクチャpicXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャである。現在ピクチャとしてcurrpicを示す。
mergeTMVPが(マージモードの下で)1である場合、以下が適用され、refIdxLXの値を変更し得る。
− AddPicId(RefPicListX[0])がAddPicId(colPic,refIdxCol,listCol)に等しくない場合
− AddPicId(RefPicListX[0])がAddPicId(currPic)に等しい場合、両端値を含む1からnum_ref_idx_lX_active_minus1までのiについて、以下が適用される。
・ AddPicId(RefPicListX[i])がAddPicId(colPic,refIdxCol,listCol)に等しい場合、refIdxLXがiに設定され、ループを終了する。
− そうではなく、AddPicId(colPic,refIdxCol,listCol)がAddPicId(currPic)に等しい場合、両端値を含む1からnum_ref_idx_lX_active_minus1までのiについて、以下が適用される。
・ AddPicId(RefPicListX[i])がAddPicId(currPic)に等しい場合、refIdxLXがiに設定され、ループを終了する。
− そうでない場合(AddPicId(colPic,refIdxCol,listCol)がAddPicId(currPic)に等しくなく、AddPicId(RefPicListX[0]がAddPicId(currPic)に等しくない)、何も行わない。
・ AddPicId(RefPicListX[i])がAddPicId(colPic,refIdxCol,listCol)に等しい場合、refIdxLXがiに設定され、ループを終了する。
・ 代替的に、refIdxLXが依然として0であるとき、AddPicId距離に基づいて動きベクトルがスケーリングされ得る。スケーリングファクタは(AddPicId(RefPicListX[0])−AddPicId(currPic))/(AddPicId(colPic,refIdxCol,listCol)−AddPicId(colPic))である
− AddPicId(RefPicListX[0])がAddPicId(colPic,refIdxCol,listCol)に等しい場合
− AddPicId(RefPicListX[0])がAddPicId(currPic)に等しい場合、何も行わない。
− AddPicId(RefPicListX[0])がAddPicId(currPic)に等しくない場合、何も行わない。
・ 代替的に、AddPicId(colPic)がAddPicId(currPid)に等しくない場合、動きベクトルはAddPicId距離に基づいてスケーリングされ得る。スケーリングファクタは(AddPicId(RefPicListX[0])−AddPicId(currPic))/(AddPicId(colPic,refIdxCol,listCol)−AddPicId(colPic))である。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− 以下の条件のうちの1つまたは複数が真である場合、mvLXColの両方の成分は0に等しく設定され、availableFlagLXColは0に等しく設定される。
− colPuがイントラ予測モードでコーディングされる。
− colPuが「利用不可能である」とマークされている。
− pic_temporal_mvp_enable_flagが0に等しい。
− そうでない場合、動きベクトルmvCol、参照インデックスrefIdxCol、および参照リスト識別子listColは以下のように導出される。
− PredFlagL0[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvL1[xPCol][yPCol]、RefIdxL1[xPCol][yPCol]、およびL1に等しく設定される。
− そうでない場合(PredFlagL0[xPCol][yPCol]が1に等しい)、以下が適用される。
− PredFlagL1[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvL0[xPCol][yPCol]、RefIdxL0[xPCol][yPCol]、およびL0に等しく設定される。
− そうでない場合(PredFlagL1[xPCol][yPCol]が1に等しい)、以下の割当てが行われる。
− あらゆる参照ピクチャリスト中のあらゆるピクチャpicのPicOrderCnt(pic)がPicOrderCntVal以下である場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvLX[xPCol][yPCol]、RefIdxLX[xPCol][yPCol]およびLXに等しく設定され、ただし、Xは、このプロセスが呼び出されたXの値である。
− そうでない場合(少なくとも1つの参照ピクチャリスト中の少なくとも1つのピクチャpicのPicOrderCnt(pic)がPicOrderCntValよりも大きい、mvCol、refIdxColおよびlistColは、それぞれ、MvLN[xPCol][yPCol]、RefIdxLN[xPCol][yPCol]およびLNに等しく設定され、ただし、Nは、collocated_from_l0_flagの値である。
− 以下の条件のうちの1つが真である場合、変数availableFlagLXColは0に等しく設定される。
− AddPicId(RefPicListX[refIdxLX])がAddPicId(colPic,refIdxCol,listCol)に等しくない。
− RefPicListX[refIdxLX]が短期参照ピクチャであり、LongTermRefPic(colPic,refIdxCol,listCol)が1に等しい。
− RefPicListX[refIdxLX]が長期参照ピクチャであり、LongTermRefPic(colPic,refIdxCol,listCol)が0に等しい。
− そうでない場合、変数availableFlagLXColは1に等しく設定され、以下が適用される。
− RefPicListX[refIdxLX]が長期参照ピクチャである場合、またはLongTermRefPic(colPic,refIdxCol,listCol)が1に等しい場合、またはPicOrderCnt(colPic)−RefPicOrderCnt(colPic,refIdxCol,listCol)がPicOrderCntVal−PicOrderCnt(RefPicListX[refIdxLX])に等しい場合、
mvLXCol=mvCol (8−143)
− そうでない場合、mvLXColは、以下で指定されるように動きベクトルmvColのスケーリングされたバージョンとして導出される
tx=(16384+(Abs(td)>>1))/td (8−144)
DistScaleFactor=Clip3(−4096,4095,(tb*tx+32)>>6) (8−145)
mvLXCol=Clip3(−8192,8191.75,Sign(DistScaleFactor*mvCol)*((Abs(DistScaleFactor*mvCol)+127)>>8)) (8−146)
ただし、tdおよびtbは以下のように導出される
td=Clip3(−128,127,PicOrderCnt(colPic)−RefPicOrderCnt(colPic,refIdxCol,listCol)) (8−147)
tb=Clip3(−128,127,PicOrderCntVal−PicOrderCnt(RefPicListX[refIdxLX])) (8−148)
[0192]本開示の第3の例示的な技法は、上記で説明した第1および第2の例示的な技法と同様である。しかしながら、第3の例示的な技法は、短期参照ピクチャと長期参照ピクチャとの間を区別する。たとえば、2つの参照ピクチャを考察することにする。参照ピクチャの一方はRefPicListX[0]であり、他方の参照ピクチャはピクチャpicT(すなわち、TMVPのRefPicListX動きベクトルが参照するピクチャ)である。picTの追加のピクチャ識別子(すなわち、AddPicId(PicT))がRefPicListX[0]の追加のピクチャ識別子とは異なるか、あるいはRefPicListX[0]とpicTの両方が時間参照ピクチャであるが、RefPicListX[0]とpicTとのうちの1つのみが短期参照ピクチャであり、RefPicListX中のi番目のエントリがpicTと同じAddPicIdを有し、それらが両方とも短期時間参照ピクチャであるかまたは両方とも長期時間参照ピクチャであるか、あるいはその両方が非時間参照ピクチャであるとき、ビデオコーダは、最終参照インデックスをiに設定し得る。現在PUのRefPicListX中の複数のエントリがこの要求を満たすとき、ビデオコーダは、最も小さいインデックスを、時間マージング候補の最終RefPicListX参照インデックスとして設定し得る。
[0193]本開示の第4の例示的な技法では、ビデオコーダは、スライスヘッダ中で、時間参照ピクチャのref_idx(T_ref_idx_lx)と、ビュー間参照(のみ)ピクチャのref_idx(D_ref_idx_lx)とをシグナリングし得る。RefPicListX[0]の参照ピクチャタイプが時間である場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスをD_ref_idx_lxに設定し得る。RefPicListX[0]の参照ピクチャタイプがディスパリティである場合、ビデオコーダは、時間マージング候補の最終RefPicListX参照インデックスをT_ref_idx_lxに設定し得る。
[0194]代替的に、いくつかの例では、ビデオコーダは、RefPicListXが利用可能である場合、0および1に等しい両方のXについて、T_ref_idx_lXおよびD_ref_idx_lXを以下のように導出し得る。両端値を含む0からnum_ref_idx_lX_active_minus1までの各jについて、以下が適用される。RefPicListX[j]が時間参照ピクチャである場合、T_ref_idx_lXはjに設定され、戻る。両端値を含む0からnum_ref_idx_lX_active_minus1までの各jについて、以下が適用される。RefPicListX[j]が時間参照ピクチャでない場合、T_ref_idx_lXはjに設定され、戻る。一例では、ビデオコーダは、RefPicListX[j]のマーキングステータス(たとえば、長期、短期、またはいずれでもない)を検査することによって、RefPicListX[j]が時間参照ピクチャであるか否かを決定し得る。別の例では、ビデオコーダは、ピクチャの参照ピクチャタイプを識別するベース仕様におけるフックを検査することによって、RefPicListX[j]が時間参照ピクチャであるか否かを決定し得る。別の例では、ビデオコーダは、現在ピクチャとRefPicListX[j]とのPOC値を比較することによって、RefPicListX[j]が時間参照ピクチャであるか否かを決定し得る。
[0195]本開示の第4の例示的な技法では、HEVC Working Draft 7のセクション8.5.2.1.1は以下のように変更され得る。
8.5.2.1.1 マージモードのためのルーマ動きベクトルの導出プロセス
このプロセスは、PredModeがMODE_SKIPに等しいかまたはPredModeがMODE_INTERに等しく、merge_flag[xP][yP]が1に等しいときにのみ呼び出され、ただし、(xP,yP)は、現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルを指定する。
このプロセスの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在コーディングユニットの左上ルーマサンプルのルーマロケーション(xC,yC)、
− 現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルのルーマロケーション(xP,yP)、
− 現在コーディングユニットのサイズを指定する変数nCS、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在コーディングユニット内の現在予測ユニットのインデックスを指定する変数PartIdx
このプロセスの出力は以下の通りである。
− ルーマ動きベクトルmvL0およびmvL1、
− 参照インデックスrefIdxL0およびrefIdxL1、
− 予測リスト利用フラグpredFlagL0およびpredFlagL1
変数singleMCLFlagは以下のように導出される。
− log2_parallel_merge_level_minus2が0よりも大きく、nCSが8に等しい場合、singleMCLFlagは1に設定される。
− そうでない場合、singleMCLFlagは0に設定される。
singleMCLFlagが1に等しいとき、xPはxCに等しく設定され、yPはyCに等しく設定され、nPSWとnPSHの両方はnCSに等しく設定される。
注釈−singleMCLFlagが1に等しいとき、現在コーディングユニットのすべての予測ユニットは、2N×2N予測ユニットのマージング候補リストと同等である、単一のマージング候補リストを共有する。
動きベクトルmvL0およびmvL1と、参照インデックスrefIdxL0およびrefIdxL1と、予測利用フラグpredFlagL0およびpredFlagL1とは、以下の順序付きステップによって指定されているように導出される。
1. サブクローズ8.5.2.1.2における隣接予測ユニットパーティションからのマージング候補の導出プロセスが、入力として、ルーマロケーション(xP,yP)と、変数singleMCLFlagと、予測ユニットの幅および高さnPSWおよびnPSHと、パーティションインデックスPartIdxとを用いて呼び出され、出力が、利用可能性フラグavailableFlagNと、参照インデックスrefIdxL0NおよびrefIdxL1Nと、予測リスト利用フラグpredFlagL0NおよびpredFlagL1Nと、動きベクトルmvL0NおよびmvL1Nとに割り当てられ、ただし、NはA0、A1、B0、B1またはB2で置き換えられる。
2. 時間マージング候補の参照インデックスが0に等しくなるように導出され、mergeTMVPが1に設定される。
3. ...
[0196]セクション8.5.2.1.1への変更に示されているように、マージモードのためのルーマ動きベクトルの導出プロセス中にmergeTMVP変数は1に設定される。したがって、mergeTMVP変数は、ビデオコーダがマージモードを使用していることを示す。
[0197]さらに、本開示の第4の例示的な技法によれば、HEVC Working Draft 7のセクション8.5.2.1.7は以下のように変更され得る。
8.5.2.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上サンプルに対する現在予測ユニットの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在予測ユニットパーティションの参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
関数RefPicOrderCnt(picX,refIdx,LX)は、ピクチャpicXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャのピクチャ順序カウントPicOrderCntValを戻し、以下のように指定される。
RefPicOrderCnt(picX,refIdx,LX)=PicOrderCnt(ピクチャpicXのRefPicListX[refIdx]) (8−141)
slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
変数colPuとそれの位置(xPCol,yPCol)とは、以下の順序付きステップで導出される。
1. 変数colPuが以下のように導出される。
yPRb=yP+nPSH (8−139)
− (yP>>Log2CtbSize)が(yPRb>>Log2CtbSize)に等しい場合、現在予測ユニットの右下ルーマ位置の水平成分が以下のように定義され、
xPRb=xP+nPSW (8−140)
変数colPuが、colPic内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更された位置をカバーする予測ユニットとして設定される。
− そうでない場合((yP>>Log2CtbSize)が(yPRb>>Log2CtbSize)に等しくない)、colPuは「利用不可能である」とマークされる。
2. colPuがイントラ予測モードでコーディングされるか、またはcolPuが「利用不可能である」とマークされたとき、以下が適用される。
− 現在予測ユニットの中心ルーマ位置が以下のように定義される。
xPCtr=(xP+(nPSW>>1) (8−141)
yPCtr=(yP+(nPSH>>1) (8−142)
− 変数colPuが、colPic内の((xPCtr>>4)<<4,(yPCtr>>4)<<4)によって与えられる変更された位置をカバーする予測ユニットとして設定される。
3. (xPCol,yPCol)が、colPicの左上ルーマサンプルに対するcolPuの左上ルーマサンプルに等しく設定される。
関数LongTermRefPic(picX,refIdx,LX)は以下のように定義される。ピクチャpicXが現在ピクチャであった時間において、picXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャが「長期参照に使用される」とマークされた場合、LongTermRefPic(picX,refIdx,LX)は1を戻し、そうでない場合、LongTermRefPic(pic,refIdx,LX)は0を戻す。
mergeTMVPが(マージモードの下で)1である場合、以下が適用され、refIdxLXの値を変更し得る。
− LongTermRefPic(colPic,refIdxCol,listCol)が0に等しい場合、refIdxLXはT_ref_idx_lXに設定される
− そうでない場合、refIdxLXはD_ref_idx_lXに設定される。
...
[0198]上記に示したセクション8.5.2.1.7の変更されたバージョンの代替バージョンでは、最後の示されたラインは、「そうでない場合、refIdxLXはIに設定され、refIdxLXはD_ref_idx_lXに設定される。」である。
[0199]セクション8.5.2.1.7の変更されたバージョンに示されているように、時間ルーマ動きベクトル予測のための導出プロセスがマージモードのために実行されている場合(すなわち、mergeTMVPが1に等しい)、ビデオコーダは、LongTermRefPic(colPic,refIdxCol,listCol)が0に等しいかどうかを決定し得る。colPicはコロケートピクチャを示す。refIdxColはコロケートピクチャ中のTMVPの参照インデックスを示す。listColは、refIdxColが参照する参照ピクチャリストを示す。したがって、0に等しいLongTermRefPic(colPic,refIdxCol,listCol)は、colPic中のTMVPのRefPicListX参照インデックスによって示される参照ピクチャ(ただしXはlistColに等しい)が長期参照ピクチャでない(すなわち、短期参照ピクチャである)ことを示す。そうである場合、ビデオコーダは、refIdxLX(すなわち、時間マージング候補のRefPicListX参照インデックス)をT_ref_idx_lXに設定する。そうでない場合、ビデオコーダはrefIdxLXをD_ref_idx_lXに設定する。
[0200]本開示の第5の例示的な技法は、上記で説明した第3の例示的な技法と同様である。ただし、第5の例示的な技法では、ビデオエンコーダ20は、スライスヘッダ中でtmvp_merge_temporal_flagシンタックス要素をシグナリングし得る。0に等しいtmvp_merge_temporal_flagシンタックス要素は、TMVPマージ候補からのターゲット参照インデックスがT_ref_idx_lxに等しいことを示す。1に等しいtmvp_merge_temporal_flagシンタックス要素は、時間マージング候補のRefPicListX参照インデックス(すなわち、ターゲットマージTMVP参照インデックス)がD_ref_idx_lxに等しいことを示す。tmvp_merge_temporal_flagシンタックス要素が存在しないとき、ビデオデコーダ30は、tmvp_merge_temporal_flagシンタックス要素が0に等しく、時間マージング候補のRefPicListX参照インデックスが0に等しいと推論し得る。T_ref_idx_lxとD_ref_idx_lxとのうちの少なくとも1つは0に等しい。
[0201]第5の例示的な技法では、HEVC Working Draft 7のセクション8.5.2.1.1は以下のように変更され得る。
マージモードのためのルーマ動きベクトルの導出プロセス
このプロセスは、PredModeがMODE_SKIPに等しいかまたはPredModeがMODE_INTERに等しく、merge_flag[xP][yP]が1に等しいときにのみ呼び出され、ただし、(xP,yP)は、現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルを指定する。
このプロセスの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在コーディングユニットの左上ルーマサンプルのルーマロケーション(xC,yC)、
− 現在ピクチャの左上ルーマサンプルに対する現在予測ユニットの左上ルーマサンプルのルーマロケーション(xP,yP)、
− 現在コーディングユニットのサイズを指定する変数nCS、
− ルーマのための予測ユニットの幅および高さを指定する変数nPSWおよびnPSH、
− 現在コーディングユニット内の現在予測ユニットのインデックスを指定する変数PartIdx
このプロセスの出力は以下の通りである。
− ルーマ動きベクトルmvL0およびmvL1、
− 参照インデックスrefIdxL0およびrefIdxL1、
− 予測リスト利用フラグpredFlagL0およびpredFlagL1
変数singleMCLFlagは以下のように導出される。
− log2_parallel_merge_level_minus2が0よりも大きく、nCSが8に等しい場合、singleMCLFlagは1に設定される。
− そうでない場合、singleMCLFlagは0に設定される。
singleMCLFlagが1に等しいとき、xPはxCに等しく設定され、yPはyCに等しく設定され、nPSWとnPSHの両方はnCSに等しく設定される。
注釈−singleMCLFlagが1に等しいとき、現在コーディングユニットのすべての予測ユニットは、2N×2N予測ユニットのマージング候補リストと同等である、単一のマージング候補リストを共有する。
動きベクトルmvL0およびmvL1と、参照インデックスrefIdxL0およびrefIdxL1と、予測利用フラグpredFlagL0およびpredFlagL1とは、以下の順序付きステップによって指定されているように導出される。
1. サブクローズ8.5.2.1.2における隣接予測ユニットパーティションからのマージング候補の導出プロセスが、入力として、ルーマロケーション(xP,yP)と、変数singleMCLFlagと、予測ユニットの幅および高さnPSWおよびnPSHと、パーティションインデックスPartIdxとを用いて呼び出され、出力が、利用可能性フラグavailableFlagNと、参照インデックスrefIdxL0NおよびrefIdxL1Nと、予測リスト利用フラグpredFlagL0NおよびpredFlagL1Nと、動きベクトルmvL0NおよびmvL1Nとに割り当てられ、ただし、NはA0、A1、B0、B1またはB2で置き換えられる。
時間マージング候補の参照インデックスは、tmvp_merge_temporal_flagが0であるときはT_ref_idx_lxに等しくなるように導出され、tmvp_merge_temporal_flagが1であるときはT_ref_idx_lxに等しくなるように導出される。
[0202]本開示の第6の例示的な技法では、追加のターゲット参照インデックスが使用可能になる。上記の例では、すべての短期参照ピクチャは、現行のHEVC仕様に記載されているように、依然として、0に等しい参照インデックスをもつ参照ピクチャのほうへスケーリングされる。しかしながら、すべての長期参照ピクチャについて、ビデオコーダは、長期参照ピクチャを参照している動きベクトルがマージング候補を形成するために使用され得るように、新しい参照インデックス(ref_idx N、以下の説明ではrefIdxL0AおよびrefIdxL1Aと呼ばれる)を導出する。概して、現在PUのRefPicListX中の第1の参照ピクチャが短期参照ピクチャである(すなわち、0に等しい参照インデックスが短期参照ピクチャを表す)とき、新たに追加されたターゲット参照インデックスは、長期参照ピクチャを表すために使用される。しかしながら、現在PUのRefPicListX中の第1の参照ピクチャが長期参照ピクチャである(すなわち、0に等しい参照インデックスが長期参照ピクチャを表す)とき、ビデオコーダは、新たに追加されたターゲット参照インデックスを使用してビュー間参照ピクチャを表し得る。現行のHEVC仕様と同様に、ターゲット参照インデックスが長期参照ピクチャに対応する場合、コロケートブロック中の動きベクトルは、利用可能であると見なされる場合、スケーリングされない。
[0203]HEVC Working Draft 7のセクション8.3.5は、復号前の参照ピクチャのマーキングについて説明している。本開示の第6の例示的な技法によれば、HEVC Working Draftのセクション8.3.5は以下のテキストと置き換えられ得る。
8.3.5 TMVPのための追加のターゲット参照インデックスの導出プロセス
このプロセスは、現在スライスがPスライスまたはBスライスであるときに呼び出される。追加のターゲット参照インデックスrefIdxL0AおよびrefIdxL1Aが導出される。
変数refIdxL0AおよびrefIdxL1Aを両方とも−1に設定する。
以下が適用されてrefIdxL0Aが導出される。
bZeroIdxLongTermFlag=RefPicList0[0]が短期参照ピクチャ?0:1
bFound=0;
for(i=1;i<=num_ref_idx_l0_active_minus1 && !bFound;i++)
if((bZeroIdxLongTermFlag&&RefPicList0[i]が短期参照ピクチャ)||
(!bZeroIdxLongTermFlag&&RefPicList0[i]が長期参照ピクチャ)){
refIdxL0A=i
bFound=1
}
スライスがBスライスであるとき、以下が適用されてrefIdxL1Aが導出される。
bZeroIdxLongTermFlag=RefPicList1[0]が短期参照ピクチャ?0:1
bFound=0;
for(i=1;i<=num_ref_idx_l1_active_minus1 && !bFound;i++)
if((bZeroIdxLongTermFlag&&RefPicList1[i]が短期参照ピクチャ)||
(!bZeroIdxLongTermFlag&&RefPicList1[i]が長期参照ピクチャ)){
refIdxL1A=i
bFound =1
}
[0204]さらに、本開示の第6の例示的な技法では、時間動きベクトル予測中に、現在モードがマージモードであるとき、ターゲット参照インデックス0はrefIdxLXAに変更され得る(ただし、Xは0または1に等しい)。refIdxLXAは非0参照インデックス値を示し得る。AMVPモードは変更されない。
[0205]HEVC Working Draft 7のセクション8.5.2.1.1は、マージモードのためのルーマ動きベクトルの導出プロセスについて説明している。本開示の第6の例示的な技法では、HEVC Working Draft 7のセクション8.5.2.1.1は以下のように変更され得る。
8.5.2.1.1 マージモードのためのルーマ動きベクトルの導出プロセス
このプロセスは、PredMode[xC][yC]がMODE_SKIPに等しいかまたはPredMode[xC][yC]がMODE_INTERに等しく、merge_flag[xP][yP]が1に等しいときにのみ呼び出され、ただし、(xP,yP)は、現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定する。
このプロセスの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマコーディングブロックの左上サンプルのルーマロケーション(xC,yC)、
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルのルーマロケーション(xP,yP)、
− 現在ルーマコーディングブロックのサイズを指定する変数nCS、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 現在コーディングユニット内の現在予測ユニットのインデックスを指定する変数partIdx
このプロセスの出力は以下の通りである。
− ルーマ動きベクトルmvL0およびmvL1、
− 参照インデックスrefIdxL0およびrefIdxL1、
− 予測リスト利用フラグpredFlagL0およびpredFlagL1
変数singleMCLFlagは以下のように導出される。
− log2_parallel_merge_level_minus2が0よりも大きく、nCSが8に等しい場合、singleMCLFlagは1に設定される。
− そうでない場合、singleMCLFlagは0に設定される。
singleMCLFlagが1に等しいとき、xPはxCに等しく設定され、yPはyCに等しく設定され、nPbWとnPbHの両方はnCSに等しく設定される。
注釈−singleMCLFlagが1に等しいとき、現在コーディングユニットのすべての予測ユニットは、2N×2N予測ユニットのマージング候補リストと同等である、単一のマージング候補リストを共有する。
動きベクトルmvL0およびmvL1と、参照インデックスrefIdxL0およびrefIdxL1と、予測利用フラグpredFlagL0およびpredFlagL1とは、以下の順序付きステップによって指定されているように導出される。
1. サブクローズ8.5.2.1.2における隣接予測ユニットパーティションからのマージング候補の導出プロセスが、入力として、ルーマコーディングブロックロケーション(xC,yC)と、コーディングブロックサイズnCSと、ルーマ予測ブロックロケーション(xP,yP)と、変数singleMCLFlagと、ルーマ予測ブロックの幅および高さnPbWおよびnPbHと、パーティションインデックスpartIdxとを用いて呼び出され、出力が、利用可能性フラグavailableFlagNと、参照インデックスrefIdxL0NおよびrefIdxL1Nと、予測リスト利用フラグpredFlagL0NおよびpredFlagL1Nと、動きベクトルmvL0NおよびmvL1Nとに割り当てられ、ただし、NはA0、A1、B0、B1またはB2で置き換えられる。
2. 時間マージング候補の参照インデックスrefIdxLX(ただしXは0または1である)が0に等しく設定される。
3. サブクローズ8.5.3.1.7における時間ルーマ動きベクトル予測の導出プロセスが、入力として、ルーマロケーション(xP,yP)と、ルーマ予測ブロックの幅および高さnPbWおよびnPbHと、refIdxLXと、1に等しいmergeTMVPとを用いて呼び出され、出力が、利用可能性フラグavailableFlagLXColと、時間動きベクトルmvLXColとである。変数availableFlagColおよびpredFlagLXCol(ただし、Xはそれぞれ0または1である)が、以下で指定されているように導出される。
4. ...
...
[0206]したがって、上記に示したセクション8.5.2.1.1の変更されたバージョンでは、セクション8.5.3.1.7の時間ルーマ動きベクトル予測プロセスは、1に等しいmergeTMVP変数を用いて呼び出される。第6の例示的な技法に従って変更されたセクション8.5.3.1.7のバージョンについては、本開示の他の場所で説明する。
[0207]HEVC Working Draft 7のセクション8.5.3.1.5は、AMVPモードのためのルーマ動きベクトル予測のための導出プロセスについて説明している。本開示の第6の例示的な技法によれば、HEVC Working Draft 7のセクション8.5.3.1.5は以下のように変更され得る。
8.5.3.1.5 ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマコーディングブロックの左上サンプルのルーマロケーション(xC,yC)、
− 現在ルーマコーディングブロックのサイズを指定する変数nCS、
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 現在予測ユニットパーティションの参照インデックスrefIdxLX(ただし、Xは0または1である)、
− 現在コーディングユニット内の現在予測ユニットのインデックスを指定する変数partIdx
このプロセスの出力は以下の通りである。
− 動きベクトルmvLXの予測mvpLX(ただし、Xは0または1である)
動きベクトル予測子mvpLXは、以下の順序付きステップで導出される。
1. サブクローズ8.5.3.1.6における隣接予測ユニットパーティションからの動きベクトル予測子候補の導出プロセスが、入力としての、ルーマコーディングブロックロケーション(xC,yC)と、コーディングブロックサイズnCSと、ルーマ予測ブロックロケーション(xP,yP)と、ルーマ予測ブロックの幅および高さnPbWおよびnPbHと、refIdxLX(ただしXはそれぞれ0または1である)と、パーティションインデックスpartIdxと、出力としての、利用可能性フラグavailableFlagLXNと、動きベクトルmvLXNとを用いて呼び出され、ただし、NはA、Bによって置き換えられる。
2. availableFlagLXAとavailableFlagLXBの両方が1に等しく、mvLXAがmvLXBに等しくない場合、availableFlagLXColが0に等しく設定され、そうでない場合、サブクローズ8.5.3.1.7における時間ルーマ動きベクトル予測の導出プロセスが、入力として、ルーマロケーション(xP,yP)と、ルーマ予測ブロックの幅および高さnPbWおよびnPbHと、refIdxLX(ただし、Xはそれぞれ0または1である)と、0に等しいmergeTMVPとを用いて呼び出され、出力が、利用可能性フラグavailableFlagLXColと、時間動きベクトル予測子mvLXColとである。
...
[0208]したがって、上記に示したセクション8.5.2.1.5の変更されたバージョンでは、セクション8.5.3.1.7の時間ルーマ動きベクトル予測プロセスは、0に等しいmergeTMVP変数を用いて呼び出される。第6の例示的な技法に従って変更されたセクション8.5.3.1.7のバージョンについては、本開示の他の場所で説明する。
[0209]HEVC Working Draft 7のセクション8.5.3.1.7は、時間ルーマ動きベクトル予測のための導出プロセスについて説明している。本開示の第6の例示的な技法によれば、HEVC Working Draft 7のセクション8.5.3.1.7は以下のように変更され得る。
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)、
− 変数mergeTMVP
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
関数RefPicOrderCnt(picX,refIdx,LX)は、ピクチャpicXの参照ピクチャリストLXからのインデックスrefIdxをもつ参照ピクチャのピクチャ順序カウントPicOrderCntValを戻し、以下のように指定される。
RefPicOrderCnt(picX,refIdx,LX)=PicOrderCnt(ピクチャpicXのRefPicListX[refIdx]) (8−141)
slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
変数colPbとそれの位置(xPCol,yPCol)とは、以下の順序付きステップで導出される。
1. 変数colPbが以下のように導出される。
yPRb=yP+nPbH (8−151)
− (yP>>Log2CtbSizeY)が(yPRb>>Log2CtbSizeY)に等しい場合、現在ルーマ予測ブロックの右下ルーマロケーションの水平成分が以下によって定義され、
xPRb=xP+nPbW (8−152)
変数colPbが、colPic内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックとして設定される。
− そうでない場合((yP>>Log2CtbSizeY)が(yPRb>>Log2CtbSizeY)に等しくない)、colPbは「利用不可能である」とマークされる。
2. colPbがイントラ予測モードでコーディングされるか、またはcolPbが「利用不可能である」とマークされたとき、以下が適用される。
− 現在予測ブロックの中心ルーマロケーションが以下によって定義される。
xPCtr=(xP+(nPbW>>1) (8−153)
yPCtr=(yP+(nPbH>>1) (8−154)
− 変数colPbが、colPic内の((xPCtr>>4)<<4,(xPCtr>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックとして設定される。
3. (xPCol,yPCol)が、colPicの左上ルーマサンプルに対するcolPbの左上サンプルに等しく設定される。
以下の条件のすべてが真である場合、refIdxLXはrefIdxLXAになるように設定される。
− mergeTMVPが1に等しい。
− LongTermRefPic(currPic,refIdxLX,ListX)がLongTermRefPic(colPic,refIdxCol,listCol)に等しくない。
− refIdxLXAが0よりも大きい。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− 以下の条件のうちの1つまたは複数が真である場合、mvLXColの両方の成分は0に等しく設定され、availableFlagLXColは0に等しく設定される。
− colPbがイントラ予測モードでコーディングされる。
− colPbが「利用不可能である」とマークされている。
− slice_temporal_mvp_enable_flagが0に等しい。
− LongTermRefPic(currPic,refIdxLX,ListX)がLongTermRefPic(colPic,refIdxCol,listCol)に等しくない。
− そうでない場合、動きベクトルmvCol、参照インデックスrefIdxCol、および参照リスト識別子listColが以下のように導出される。
− PredFlagL0[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvL1[xPCol][yPCol]、RefIdxL1[xPCol][yPCol]、およびL1に等しく設定される。
− そうでない場合(PredFlagL0[xPCol][yPCol]が1に等しい)、以下が適用される。
− PredFlagL1[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvL0[xPCol][yPCol]、RefIdxL0[xPCol][yPCol]、およびL0に等しく設定される。
− そうでない場合(PredFlagL1[xPCol][yPCol]が1に等しい)、以下の割当てが行われる。
− あらゆる参照ピクチャリスト中のあらゆるピクチャpicのPicOrderCnt(pic)がPicOrderCntVal以下である場合、mvCol、refIdxCol、およびlistColは、それぞれ、MvLX[xPCol][yPCol]、RefIdxLX[xPCol][yPCol]およびLXに等しく設定され、ただし、Xは、このプロセスが呼び出されたXの値である。
− そうでない場合(少なくとも1つの参照ピクチャリスト中の少なくとも1つのピクチャpicのPicOrderCnt(pic)がPicOrderCntValよりも大きい、mvCol、refIdxColおよびlistColは、それぞれ、MvLN[xPCol][yPCol]、RefIdxLN[xPCol][yPCol]およびLNに等しく設定され、ただし、Nは、collocated_from_l0_flagの値である。
および、変数availableFlagLXColは1に等しく設定され、以下が適用される。
− RefPicListX[refIdxLX]が長期参照ピクチャである場合、またはPicOrderCnt(colPic)−RefPicOrderCnt(colPic,refIdxCol,listCol)がPicOrderCntVal−PicOrderCnt(RefPicListX[refIdxLX])に等しい場合、
mvLXCol=mvCol (8−155)
− そうでない場合、mvLXColは、以下で指定されるように動きベクトルmvColのスケーリングされたバージョンとして導出される
tx=(16384+(Abs(td)>>1))/td (8−156)
distScaleFactor=Clip3(−4096,4095,(tb*tx+32)>>6) (8−157)
mvLXCol=Clip3(−32768,32767,Sign2(distScaleFactor*mvCol)*
(Abs(distScaleFactor*mvCol)+127)>>8)) (8−158)
ただし、tdおよびtbは以下のように導出される
td=Clip3(−128,127,PicOrderCnt(colPic)−RefPicOrderCnt(colPic,refIdxCol,listCol)) (8−159)
tb=Clip3(−128,127,PicOrderCntVal−PicOrderCnt(RefPicListX[refIdxLX])) (8−160)
[0210]上記に示したセクション8.5.3.1.7の変更されたバージョンでは、refIdxLXは時間マージング候補のRefPicListX参照インデックスである。refIdxLXAは...を示す。
[0211]本開示の第7の例示的な技法は、上記で説明した第6の例示的な技法と同様である。ただし、第7の例示的な技法はHEVC Working Draft 9に準拠する。第7の例示的な技法では、refIdxLXA(ただしXは0または1に等しい)は、第6の例示的な技法の場合のように導出されるか、または場合によってはシグナリング/設定され得る。
[0212]HEVC Working Draft 9のセクション8.5.3.1.7は、時間ルーマ動きベクトル予測のための導出プロセスについて説明している。第7の例示的な技法では、HEVC Working Draft 9のセクション8.5.3.1.7は以下のように変更され得る。
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 変数mergeTMVP、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
変数currPbは、ルーマロケーション(xP,yP)における現在ルーマ予測ブロックを指定する。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− slice_temporal_mvp_enable_flagが0に等しい場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
− そうでない場合、以下の順序付きステップが適用される。
1. slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
2. 右下コロケート動きベクトルが以下のように導出される
xPRb=xP+nPbW (8−162)
yPRb=yP+nPbH (8−163)
− (yP>>Log2CtbSizeY)が(yPRb>>Log2CtbSizeY)に等しく、xPRbがpic_width_in_luma_samplesよりも小さい場合、以下が適用される。
− 変数colPbが、colPicによって指定されるコロケートピクチャ内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、mergeTMVPと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
− そうでない場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
3. availableFlagLXColが0に等しいとき、中心コロケート動きベクトルが以下のように導出される。
xPCtr=xP+(nPbW>>1) (8−164)
yPCtr=yP+(nPbH>>1) (8−165)
− 変数colPbが、colPic内の((xPCtr>>4)<<4,(xPCtr>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、mergeTMVPと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
[0213]セクション8.5.3.1.7の変更されたバージョンでは、時間ルーマ動きベクトル予測のための導出プロセスが、入力としてmergeTMVP変数を受信する。mergeTMVP変数は、セクション8.5.3.1.7の導出プロセスがマージモードのために呼び出された場合は1に等しくなり得、セクション8.5.3.1.7の導出プロセスがAMVPモードのために呼び出された場合は0に等しくなり得る。セクション8.5.3.1.7の変更されたバージョンでは、mergeTMVP変数は、セクション8.5.3.1.8の導出プロセスへの入力として与えられる。
[0214]HEVC Working Draft 9のセクション8.5.3.1.8は、コロケート動きベクトルの導出プロセスについて説明している。第7の例示的な技法によれば、HEVC Working Draft 9のセクション8.5.3.1.8は以下のように変更され得る。
8.5.3.1.8 コロケート動きベクトルの導出プロセス
このプロセスへの入力は以下の通りである。
− 現在予測ブロックを指定するcurrPb、
− コロケートピクチャを指定するcolPic、
− colPicによって指定されるコロケートピクチャ内のコロケート予測ブロックを指定するcolPb、
− colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xPCol,yPCol)、
− 変数mergeTMVP、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
変数currPicは現在ピクチャを指定する。
アレイpredFlagLXCol[x][y]、mvLXCol[x][y]およびrefIdxLXCol[x][y]は、colPicによって指定されるコロケートピクチャの対応するアレイ、それぞれ、PredFlagLX[x][y]、MvLX[x][y]およびRefIdxLX[x][y]に等しく設定され、ただし、Xは、このプロセスが呼び出されたXの値である。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− colPbがイントラ予測モードでコーディングされる場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
− そうでない場合、動きベクトルmvCol、参照インデックスrefIdxCol、および参照リスト識別子listColが以下のように導出される。
− predFlagL0Col[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColが、それぞれ、mvL1Col[xPCol][yPCol]、refIdxL1Col[xPCol][yPCol]、およびL1に等しく設定される。
− そうではなく、predFlagL0Col[xPCol][yPCol]が1に等しく、predFlagL1Col[xPCol][yPCol]が0に等しい場合、mvCol、refIdxCol、およびlistColが、それぞれ、mvL0Col[xPCol][yPCol]、refIdxL0Col[xPCol][yPCol]、およびL0に等しく設定される。
− そうでない場合(predFlagL0Col[xPCol][yPCol]が1に等しく、predFlagL1Col[xPCol][yPCol]が1に等しい)、以下の割当てが行われる。
− DiffPicOrderCnt(currPic,pic)が、現在スライスのあらゆる参照ピクチャリスト中のあらゆるピクチャpicについて0以下である場合、mvCol、refIdxCol、およびlistColが、それぞれ、mvLXCol[xPCol][yPCol]、refIdxLXCol[xPCol][yPCol]、およびLxに等しく設定され、ただし、Xは、このプロセスが呼び出されたXの値である。
− そうでない場合、mvCol、refIdxColおよびlistColが、それぞれ、mvLNCol[xPCol][yPCol]、refIdxLNCol[xPCol][yPCol]およびLNに等しく設定され、ただし、Nはcollocated_from_l0_flagの値である。
および、mvLXColおよびavailableFlagLXColが以下のように導出される。
− LongTermRefPic(currPic,currPb,refIdxLX,LX)がLongTermRefPic(colPic,colPb,refIdxCol,listCol)に等しくないとき、以下が適用される
− refIdxLXAが0よりも大きく、mergeTMVPが1に等しい場合、refIdxLXがrefIdxLXAに等しく設定され、availableFlagLXColが1に等しく設定される。
− そうでない場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
− 変数availableFlagLXColが1に等しく設定されたとき、refPicListCol[refIdxCol]は、ピクチャcolPic中の予測ブロックcurrPbを含んでいるスライスの参照ピクチャリストlistCol中の参照インデックスrefIdxColをもつピクチャになるように設定され、以下が適用される。
colPocDiff=DiffPicOrderCnt(colPic,refPicListCol[ refIdxCol]) (8−166)
currPocDiff=DiffPicOrderCnt(currPic,RefPicListX[refIdxLX]) (8−167)
− RefPicListX[refIdxLX]が長期参照ピクチャであるか、またはcolPocDiffがcurrPocDiffに等しい場合、mvLXColが以下のように導出される。
mvLXCol=mvCol (8−168)
− そうでない場合、mvLXColは、以下で指定されるように動きベクトルmvColのスケーリングされたバージョンとして導出される
tx=(16384+(Abs(td)>>1))/td (8−169)
distScaleFactor=Clip3(−4096,4095,(tb*tx+32)>>6) (8−170)
mvLXCol=Clip3(−32768,32767,Sign(distScaleFactor*mvCol)*
((Abs(distScaleFactor*mvCol)+127)>>8)) (8−171)
ただし、tdおよびtbは以下のように導出される
td=Clip3(−128,127,colPocDiff) (8−172)
tb=Clip3(−128,127,currPocDiff) (8−173)
[0215]上記に示したセクション8.5.3.1.8の変更されたバージョンでは、refIdxLXは、時間マージング候補またはMVP候補のRefPicListX参照インデックスを示す。さらに、セクション8.5.3.1.8の変更されたバージョンでは、ビデオコーダは、RefPicListX参照インデックスによって示される参照ピクチャと、TMVPのRefPicListX参照インデックスによって示される参照ピクチャが、両方とも長期参照ピクチャでないか、両方とも短期参照ピクチャでないかを決定し得る。すなわち、ビデオコーダは、LongTermRefPic(currPic,currPb,refIdxLX,LX)がLongTermRefPic(colPic,colPb,refIdxCol,listCol)に等しくないかどうかを決定し得る。そうである場合、ビデオコーダは、refIdxLXAが0よりも大きく、mergeTMVPが0に等しい場合、時間マージング候補またはMVP候補のRefPicListX参照インデックスをrefIdxLXAに設定し得る。そうでない場合、ビデオコーダは、時間マージング候補またはMVP候補の両方の動きベクトル成分を0に設定し得る。
[0216]第8の例示的な技法は、第7の例示的な技法に追加の可能な改善を行い得る。第8の例示的な技法は、ターゲットTMVP参照ピクチャの参照ピクチャタイプとコロケート参照ピクチャの参照ピクチャタイプとが異なる場合に適用される。動き情報を導出するための2つのコロケートサブブロックがある(すなわち、右下および中心)。TMVP導出が可能でない場合、動き情報導出のためのサブブロックは右下から中心に切り替えられ得る。ただし、上記の方法が適用されるとき、ゼロTMVP参照インデックスは別のゼロTMVP参照インデックスと交換され得る。その結果、ビデオコーダは、常にTMVPを導出することが可能になり得る。これは、利用可能な動き情報をもつ右下ブロックが常に使用され得、ビデオコーダが中心サブブロックを使用してゼロ参照インデックスのTMVPを導出することができる場合でも、中心サブブロックへの切替えが起こらなくなり得ることを意味する。
[0217]追加の可能な改善は、ゼロ参照インデックスを用いてTMVPを導出する可能性について右下ブロックと中心ブロックとが検査された後に、上記で説明した方法(TMVP参照インデックスを変更する)を適用することであり得る。ビデオコーダがTMVPを導出することができない場合、ビデオコーダは、TMVPの参照インデックスを非0値に変更し得る。非0参照インデックスのために、ビデオコーダは、右下サブブロックまたは中心サブブロックからTMVPを導出し得、あるいはビデオコーダは切替え機構を適用し得る。このバージョンは、非0参照インデックスを用いたTMVPが中心サブブロックから導出された場合、右下ブロックに戻り、TMVP導出プロセスを繰り返すことが不要であり得るので、HEVCのいくつかのバージョンに対してより少ない変更を有する。後者の解決策は、HEVC Working Draft 9のセクション8.5.3.1.7の以下の変更されたバージョンにおいて実装され得る。
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 変数mergeTMVPFlag、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 変数mergeTMVP、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
変数currPbは、ルーマロケーション(xP,yP)における現在ルーマ予測ブロックを指定する。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− slice_temporal_mvp_enable_flagが0に等しい場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
− そうでない場合、以下の順序付きステップが適用される。
1. slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
2. 右下コロケート動きベクトルが以下のように導出される
xPRb=xP+nPbW (8−162)
yPRb=yP+nPbH (8−163)
− (yP>>Log2CtbSizeY)が(yPRb>>Log2CtbSizeY)に等しく、xPRbがpic_width_in_luma_samplesよりも小さい場合、以下が適用される。
− 変数colPbが、colPicによって指定されるコロケートピクチャ内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、0に等しいmergeTMVPFlagと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
− そうでない場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
3. availableFlagLXColが0に等しいとき、中心コロケート動きベクトルが以下のように導出される。
xPCtr=xP+(nPbW>>1) (8−164)
yPCtr=yP+(nPbH>>1) (8−165)
− 変数colPbが、colPic内の((xPCtr>>4)<<4,(xPCtr>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、mergeTMVPに等しいmergeTMVPFlagと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
[0218]さらに、HEVC Working Draft 9のセクション8.5.3.1.8(コロケート動きベクトルの導出プロセス)は、第7の例示的な技法に関して示したセクション8.5.3.1.8と同じであり得るが、「mergeTMVP」は、「mergeTMVP」のあらゆる発生について「mergeTMVPFlag」と置き換えられる。
[0219]本開示の第9の例示的な技法は、上記で説明した第8の例示的な技法と同様である。しかしながら、第9の例示的な技法では、動き情報が中心ブロックについて利用可能でない場合、右下ブロックを用いた非0参照インデックスのためのTMVP導出が行われ得る。
[0220]第9の例示的な技法では、HEVC Working Draft 9のセクション8.5.3.1.7は以下のように変更され得る。
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 変数mergeTMVP、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
変数currPbは、ルーマロケーション(xP,yP)における現在ルーマ予測ブロックを指定する。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− slice_temporal_mvp_enable_flagが0に等しい場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
− そうでない場合、以下の順序付きステップが適用される。
1. slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
2. 右下コロケート動きベクトルが以下のように導出される
xPRb=xP+nPbW (8−162)
yPRb=yP+nPbH (8−163)
− (yP>>Log2CtbSizeY)が(yPRb>>Log2CtbSizeY)に等しく、xPRbがpic_width_in_luma_samplesよりも小さい場合、以下が適用される。
− 変数colPbが、colPicによって指定されるコロケートピクチャ内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− xPCtr=xP+(nPbW>>1)
yPCtr=yP+(nPbH >>1)
変数colCtrが、colPic内の((xPCtr>>4)<<4,(xPCtr>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、mergeTMVP*(!predFlagL0Col[xColCtr][yColCtr]&&!predFlagL1Col[xColCtr][yColCtr])に等しいmergeTMVPFlagと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
− そうでない場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
3. availableFlagLXColが0に等しいとき、中心コロケート動きベクトルが以下のように導出される。
xPCtr=xP+(nPbW>>1) (8−164)
yPCtr=yP+(nPbH>>1) (8−165)
− 変数colPbが、colPic内の((xPCtr>>4)<<4,(xPCtr>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、mergeTMVPに等しいmergeTMVPFlagと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
[0221]第10の例示的な技法は、上記で説明した第8の例示的な技法と同様である。ただし、第10の例示的な技法では、ビデオコーダは、第1の検査において、右下ブロックまたは中心ブロックが、参照ピクチャのタイプが異なっているために利用不可能であると決定した場合、ビデオコーダは、右下ブロックまたは中心ブロックを2回検査し得る。第10の例示的な技法では、HEVC Working Draft 9のセクション8.5.3.1.7は以下の方法のうちの1つで変更され得る。
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 変数mergeTMVPFlag、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
8.5.3.1.7 時間ルーマ動きベクトル予測のための導出プロセス
このプロセスへの入力は以下の通りである。
− 現在ピクチャの左上ルーマサンプルに対する現在ルーマ予測ブロックの左上サンプルを指定するルーマロケーション(xP,yP)、
− ルーマ予測ブロックの幅および高さを指定する変数nPbWおよびnPbH、
− 変数mergeTMVP、
− 参照インデックスrefIdxLX(ただし、Xは0または1である)
このプロセスの出力は以下の通りである。
− 動きベクトル予測mvLXCol、
− 利用可能性フラグavailableFlagLXCol
変数currPbは、ルーマロケーション(xP,yP)における現在ルーマ予測ブロックを指定する。
変数mvLXColおよびavailableFlagLXColは以下のように導出される。
− slice_temporal_mvp_enable_flagが0に等しい場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
− そうでない場合、以下の順序付きステップが適用される。
− 変数numLoopが0に設定される。
− numLoopが2よりも小さく、availableFlagLXColが1に等しい間、以下のステップが順番に反復的に適用される。
1. slice_type、collocated_from_l0_flag、およびcollocated_ref_idxの値に応じて、コロケートパーティションを含んでいるピクチャを指定する変数colPicが以下のように導出される。
− slice_typeがBに等しく、collocated_from_l0_flagが0に等しい場合、変数colPicは、RefPicList1[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
− そうでない場合(slice_typeがBに等しく、collocated_from_l0_flagが1に等しいか、またはslice_typeがPに等しい)、変数colPicは、RefPicList0[collocated_ref_idx]によって指定されるコロケートパーティションを含んでいるピクチャを指定する。
2. 右下コロケート動きベクトルが以下のように導出される
xPRb=xP+nPbW (8−162)
yPRb=yP+nPbH (8−163)
− (yP>>Log2CtbSizeY)が(yPRb>>Log2CtbSizeY)に等しく、xPRbがpic_width_in_luma_samplesよりも小さい場合、以下が適用される。
− 変数colPbが、colPicによって指定されるコロケートピクチャ内の((xPRb>>4)<<4,(yPRb>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、(numLoop&mergeTMVP)に等しいmergeTMVPFlagと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
− そうでない場合、mvLXColの両方の成分が0に等しく設定され、availableFlagLXColが0に等しく設定される。
3. availableFlagLXColが0に等しいとき、中心コロケート動きベクトルが以下のように導出される。
xPCtr=xP+(nPbW>>1) (8−164)
yPCtr=yP+(nPbH>>1) (8−165)
− 変数colPbが、colPic内の((xPCtr>>4)<<4,(xPCtr>>4)<<4)によって与えられる変更されたロケーションをカバーするルーマ予測ブロックを指定する。
− ルーマロケーション(xPCol,yPCol)が、colPicによって指定されるコロケートピクチャの左上ルーマサンプルに対する、colPbによって指定されるコロケートルーマ予測ブロックの左上サンプルに等しく設定される。
− サブクローズ8.5.3.1.8において指定されているコロケート動きベクトルの導出プロセスが、入力として、currPbと、colPicと、colPbと、(xPCol,yPCol)と、(numLoop&mergeTMVP)に等しいmergeTMVPFlagと、refIdxLXとを用いて呼び出され、出力が、mvLXColと、availableFlagLXColとに割り当てられる。
[0222]上記に示したセクション8.5.3.1.7の変更されたバージョンでは、mergeTMVPが1であり、numLoopが1である場合、(numLoop&mergeTMVP)は1を戻すが、そうでない場合、(numLoop&mergeTMVP)は0を戻す。
[0223]代替的に、変数「mergeTMVP」は「mergeTMVPFlag」と置き換えられ得る。さらに、第10の例示的な技法では、セクション8.5.3.1.8は、上記で説明した第7の例示的な技法のためのセクション8.5.3.1.8のバージョンと同じであり得る。ただし、第10の例示的な技法のためのセクション8.5.3.1.8のバージョンでは、変数「mergeTMVP」は、「mergeTMVP」のあらゆる発生について「mergeTMVPFlag」と置き換えられる。
[0224]本開示のいくつかの例示的な技法によれば、ビデオコーダは、現在PUの空間隣接ブロックから時間マージング候補のターゲット参照インデックスを導出し得る。さらに、時間マージング候補のターゲット参照インデックスは、TMVPが指す参照ピクチャとは異なる参照ピクチャタイプ(たとえば、時間またはビュー間)を有する参照ピクチャに対応するとき、ビデオコーダは、TMVPの参照ピクチャのタイプと同じタイプをもつピクチャに対応する参照インデックス値を示すように、時間マージング候補を変更し得る。
[0225]そのような技法によれば、所与の参照ピクチャリストX(ただしXは0または1に等しい)について、変更された後のターゲット参照インデックスは、全スライスについて固定である、1つの特定の値Cまたは特定の値Dであり得る。Cは、長期(またはビュー間)参照ピクチャに対応する参照ピクチャリスト中の第1のエントリに対応する参照インデックスである。Dは、短期(または時間)参照ピクチャに対応する参照ピクチャリスト中の第1のエントリに対応する参照インデックスである。CまたはDのいずれかは0に等しい。
[0226]さらに、ターゲット参照インデックスは「TarIdx_LX」と示され得、TMVPポイントが指す参照ピクチャは「coRefPic」と示され得る。以下のうちの1つが真であるとき、ビデオコーダはTarIdx_LXを変更し得る。
・ RefPicListX[TarIdx_LX]が時間参照ピクチャであり、coRefPicがコロケートピクチャのビュー間参照ピクチャであった場合。
・ RefPicListX[TarIdx_LX]がビュー間参照ピクチャであり、coRefPicがコロケートピクチャの時間参照ピクチャであった場合。
[0227]いくつかの例では、上記の条件のうちの1つが真である場合、かつcoRefPicがビュー間参照ピクチャである場合、ビデオコーダはTarIdx_LXをCに設定し得る。上記の条件のうちの1つが真である場合、かつcoRefPicが時間参照ピクチャである場合、ビデオコーダはTarIdX_LXをDに設定し得る。上記の条件のいずれも真でないとき、ビデオコーダはTarIdX_LXを変更しない。代替的に、上記のプロセスでは、「ビュー間参照」は「長期参照」によって置き換えられ、「時間参照」は「短期参照」によって置き換えられる。
[0228]1つの代替例では、RefPicPicX[TarIdx_LX]とcoRefPicが両方ともビュー間参照ピクチャ(すなわち、ディスパリティ参照ピクチャ)である場合、ビデオコーダは、各ビューのAddPicIdに基づいて動きベクトルをスケーリングし得る。AddPicId(RefPicListX[TarIdx_LX])がTargetAddPicIdに等しい場合、ビデオコーダは、TarIdx_LXを同じままに保ち、戻り得る。そうでない場合、ビデオコーダは、ターゲット参照インデックスをTarIdx_LXに設定し、AddPicIdの差に基づいて動きベクトルをスケーリングし得る。一例では、ビデオコーダは、TMVPの動きベクトル(「mv」と示される)を以下のように決定し得る。
mv=mv*(AddPicId(RefPicListX[TarIdx_LX])−AddPicId(現在ピクチャ))/(AddPicId(coRefPic)−AddPicId(コロケートピクチャ)),
ただし、AddPicIdは、ビューのビュー識別子またはレイヤ識別子であり得る。
[0229]別の代替例では、以下の条件のうちの1つが真であるとき、ビデオコーダはTarIdx_LXを変更し得る。
・ RefPicListX[TarIdx_LX]が時間参照ピクチャであり、coRefPicがコロケートピクチャのビュー間参照ピクチャであった場合。
・ RefPicListX[TarIdx_LX]がビュー間参照ピクチャであり、coRefPicがコロケートピクチャの時間参照ピクチャであった場合。
この例では、上記の条件の両方が真であるとき、ビデオコーダはTarIdx_LXを変更しない。しかしながら、coRefPicがビュー間参照ピクチャである場合、ビデオコーダはTarIdx_LXをCに設定し得る。coRefPicが時間参照ピクチャであるとき、ビデオコーダは、TarIdx_LXを、以下を満たす参照インデックスTIdxに設定し得る:RefPicListX[Tidx]のPOC値がcoRefPicのPOC値に等しいこと。そのようなTIdxが存在しない場合、ビデオコーダはTarIdX_LXをDに設定し得る。代替的に、そのようなTIdxが存在しない場合、ビデオコーダは、時間マージング候補がlistX方向について利用不可能であると見なし得る。
[0230]別の例示的な代替形態は、前の2つの代替例と同様である。ただし、この例では、ビデオコーダは、Dを1つのあらかじめ定義された時間参照インデックスに設定する。このあらかじめ定義された値は、スライスヘッダ、ピクチャパラメータセット、シーケンスパラメータセット、ビデオパラメータセット、または別のタイプのパラメータセット中でシグナリングされ得る。
[0231]さらに、上記で説明したプロシージャはAMVPモードに適用され得る。すなわち、ビデオコーダは、AMVPモードで時間MVP候補のために適応ターゲット参照インデックスを使用し得る。プロシージャがAMVPモードに適用されるとき、ビデオコーダは、TIdx_LXを復号参照インデックスに初期化し得、ビデオコーダは、RefPicListXを現在CU/PUの復号参照ピクチャリストに等しく設定し得る。
[0232]上述のように、本開示のいくつかの例示的な技法では、ビデオコーダは、ビュー間予測動きベクトルが利用可能であるときでも、ビュー間予測動きベクトルをスキップ/マージモードのためのマージング候補リストに追加しない。そうではなく、そのような技法によれば、ビデオコーダは、空間隣接ブロックの情報に基づいて、マージング候補リストにビュー間予測動きベクトルを追加すべきかビュー間ディスパリティ動きベクトルを追加すべきかを決定し得る。ビデオコーダがマージング候補リストにビュー間ディスパリティ動きベクトルを追加すべきであるとの決定を行った場合、ビデオコーダは、ディスパリティベクトルをビュー間ディスパリティ動きベクトルに変換し、マージング候補リスト中にビュー間ディスパリティ動きベクトルを追加し得る。
[0233]そのような技法によれば、ビデオコーダは、マージモードで適応ビュー間候補選択を実行し得る。たとえば、ビュー間候補は、ビュー間予測動きベクトルまたはビュー間ディスパリティ動きベクトルのいずれかであり得る。ビュー間予測動きベクトルとビュー間ディスパリティ動きベクトルの両方が利用可能であるとき、ビデオコーダは、以下のように、空間/時間マージング候補のタイプ(たとえば、HEVCベース仕様において定義されているA0、B0、A1、B1、B2、およびTMVP)の頻度に基づいて、ビュー間予測動きベクトルとビュー間ディスパリティ動きベクトルとのうちのどちらの一方をマージング候補リストに追加すべきかを決定し得る。時間参照ピクチャを参照するK個の動きベクトルがあり、Kが、あらかじめ定義されたしきい値Nよりも小さい場合、ビュー間ディスパリティ動きベクトルはマージング候補リストに追加される。そうでない場合、ビデオコーダは、ビュー間予測動きベクトルをマージング候補リストに追加し得る。Nは、たとえば、1、2、3、4などに設定され得る。代替的に、時間動きベクトルの数が空間マージング候補中のディスパリティ動きベクトルの数よりも小さい場合、ビデオコーダは、マージング候補リストにビュー間ディスパリティ動きベクトルを追加し得る。そうでない場合、ビデオコーダは、ビュー間予測動きベクトルをマージング候補リストに追加し得る。
[0234]代替例では、ビュー間予測動きベクトルとビュー間ディスパリティ動きベクトルの両方が利用可能であるとき、ビデオコーダは、空間/時間マージング候補の動きの複雑さに基づいて、ビュー間予測動きベクトルとビュー間ディスパリティ動きベクトルとのうちのどちらをマージング候補リストに追加すべきかを決定し得る。たとえば、動きの複雑さが所与のしきい値よりも大きい場合、ビデオコーダは、マージング候補リストにビュー間ディスパリティ動きベクトルを追加し得る。そうでない場合、ビデオコーダは、マージング候補リストにビュー間予測動きベクトルを追加し得る。いくつかの例では、動きの複雑さは、動きベクトルの水平値と垂直値との2乗の和によって定義され得る。他の例では、動きの複雑さは、動きベクトルの水平値と垂直値との絶対値の和によって定義され得る。別の例では、ビュー間予測動きベクトルとビュー間ディスパリティ動きベクトルの両方が利用可能であるとき、ビデオコーダは、マージング候補リストにビュー間予測動きベクトルとビュー間ディスパリティ動きベクトルの両方を追加し得る。
[0235]上記のように、ビデオコーダは、本開示のいくつかの例示的な技法によれば、ディスパリティベクトル導出プロセス中に、隣接ブロックから複数の利用可能なディスパリティ動きベクトルを収集し得る。ビデオコーダは、導出されたディスパリティベクトルとしてディスパリティ動きベクトルの中間値(たとえば、中央値)または平均を使用し得る。いくつかの例では、複数の利用可能なディスパリティ動きベクトルは、空間/時間隣接ブロックからのすべての利用可能なディスパリティ動きベクトルであり得る。代替的に、複数の利用可能なディスパリティ動きベクトルは、空間/時間隣接ブロックからの最初のN個の利用可能なディスパリティ動きベクトルであり得、ここにおいて、Nは2、3、4、5および6であり得る。
[0236]複数のディスパリティ動きベクトルの中間値(たとえば、中央値)は、その水平/垂直値がディスパリティ動きベクトルの水平/垂直値の中間値であるベクトルとして定義される。一代替形態では、中間ディスパリティベクトルの垂直値は0に設定される。別の代替形態では、ビデオコーダは、複数のディスパリティベクトルの水平値の中間値に等しい水平値を有する、複数のディスパリティ動きベクトルのうちのディスパリティベクトルに、中間ディスパリティ動きベクトルを設定し得る。中央値に等しい同じ水平値をもつ2つ以上のディスパリティ動きベクトルがあるとき、ビデオコーダは、最終ディスパリティベクトルとして第1の利用可能なディスパリティ動きベクトルを使用し得る。
[0237]一例では、ディスパリティ動きベクトルは、隣接ブロックが使用する動きベクトルであり得、ディスパリティ動きベクトルはビュー間参照ピクチャを指し得る。代替例では、ビデオコーダはまた、現在PUの空間隣接PUまたは時間隣接PUがビュー間動き予測において使用する暗黙的ディスパリティベクトルを、ディスパリティ動きベクトルと見なし得る。現在PUの空間的または時間的に隣接するPUが、ビュー間動き予測を使用してコーディングされる場合、空間的または時間的に隣接するPUのディスパリティベクトルは暗黙的ディスパリティベクトルである。
[0238]本開示の別の例示的な技法によれば、ビデオコーダは、マージモードで適応ビュー間候補位置を使用し得る。たとえば、マージ/スキップモードでは、ビデオコーダは、空間隣接ブロックの情報に基づいて、マージング候補リスト中に、第1の利用可能な空間マージング候補の後の位置においてビュー間候補を挿入すべきか、または前の位置においてビュー間候補を挿入すべきかを決定し得る。ビュー間候補は、ビュー間予測動きベクトルまたはビュー間ディスパリティ動きベクトルであり得る。すなわち、マージング候補リスト中へのビュー間候補のエントリは、空間隣接ブロックの動き情報に基づき得る。
[0239]空間隣接ブロック(たとえば、A0、B0、A1、B1、B2)のK個の動きベクトルが時間参照ピクチャを指し、動きベクトルのうちのJ個がビュー間参照ピクチャを指すと仮定する。KがJよりも小さく、また、ビュー間候補が時間参照ピクチャを指す(ビュー間予測動きベクトルが追加される)場合、または、KがJよりも大きく、ビュー間候補がビュー間参照ピクチャを指す(ビュー間ディスパリティベクトルが追加される)場合、ビデオコーダは、マージング候補リスト中のM番目の空間マージング候補の後にマージング候補を挿入し得る。様々な例では、Mは1、2、3、4などであり得る。
[0240]代替例では、以下の条件のうちの1つが真である場合、ビデオコーダは、第1の利用可能な空間マージング候補の後にビュー間候補を挿入し得る。
・ 第1の利用可能な空間マージング候補の動きベクトルが時間参照ピクチャを指し、ビュー間候補がビュー間参照ピクチャを指す。
・ 第1の利用可能な空間マージング候補の動きベクトルがビュー間参照ピクチャを指し、ビュー間候補が時間参照ピクチャを指す。
上記の条件の両方が真でないとき、ビデオコーダは、すべての空間マージング候補の前にビュー間候補を挿入し得る。
[0241]図9は、本開示の1つまたは複数の技法による、ビデオデコーダ30の例示的な動作を示すフローチャートである。図9の例では、第1の参照インデックス値が、現在ピクチャの現在PUに関連する参照ピクチャリスト内の、第1の参照ピクチャの位置を示す。いくつかの例では、第1の参照インデックス値は0に等しい。コロケートピクチャのコロケートPUの参照インデックスは、コロケートピクチャのコロケートPUに関連する参照ピクチャリスト内の、第2の参照ピクチャの位置を示す。
[0242]図9の例では、ビデオデコーダ30は、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するかどうかを決定する(200)。一例では、第1の参照ピクチャの参照ピクチャタイプは、時間参照ピクチャタイプまたはディスパリティ参照ピクチャタイプのうちの1つであり得る。この例では、第2の参照ピクチャの参照ピクチャタイプは、時間参照ピクチャタイプとディスパリティ参照ピクチャタイプとのうちの1つであり得る。別の例では、第1の参照ピクチャの参照ピクチャタイプは、短期参照ピクチャタイプまたは長期参照ピクチャタイプのうちの1つである。この例では、第2の参照ピクチャの参照ピクチャタイプは、短期参照ピクチャタイプと長期参照ピクチャタイプとのうちの1つである。参照ピクチャが現在ピクチャのためのRefPicSetStCurrBeforeまたはRefPicSetStCurrAfter参照ピクチャサブセット中に(または、いくつかの例では、RefPicSetStFollBeforeまたはRefPicSetStFollAfter参照ピクチャサブセット中に)ある場合、参照ピクチャは短期参照ピクチャタイプに属し得る。参照ピクチャが現在ピクチャのためのRefPicSetLtCurr参照ピクチャサブセット中に(または、いくつかの例では、RefPicSetLtFoll参照ピクチャサブセット中に)ある場合、参照ピクチャは長期参照ピクチャタイプに属し得る。
[0243]第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するとき(「200」のYES)、ビデオデコーダ30は、時間マージング候補の参照インデックスを第2の参照インデックス値に設定する(202)。第2の参照インデックス値は第1の参照インデックス値とは異なり得る。第2の参照インデックス値は、現在ピクチャに関連する参照ピクチャリスト内の、第3の参照ピクチャの位置を示し得る。いくつかの例では、第3の参照ピクチャと第2の参照ピクチャとは同じ参照ピクチャタイプに属する。しかしながら、第1の参照ピクチャと第2の参照ピクチャとが同じ参照ピクチャタイプに属するとき、時間マージング候補の参照インデックスは第1の参照インデックス値に等しいままであり得る。さらに、いくつかの例では、第2の参照インデックス値はスライスヘッダ中でシグナリングされる。
[0244]いくつかの例では、第1の参照ピクチャが時間参照ピクチャタイプに属し、第2の参照ピクチャがディスパリティ参照ピクチャタイプに属するとき、ビデオデコーダ30は、時間マージング候補の参照インデックスがディスパリティ参照ピクチャの参照ピクチャリスト中の最先の位置を示すように、時間マージング候補の参照インデックスを設定する。さらに、いくつかの例では、第1の参照ピクチャがディスパリティ参照ピクチャタイプに属し、第2の参照ピクチャが時間参照ピクチャタイプに属するとき、ビデオデコーダ30は、時間マージング候補の参照インデックスが時間参照ピクチャの参照ピクチャリスト中の最先の位置を示すように、時間マージング候補の参照インデックスを設定し得る。
[0245]上記のように、いくつかの例では、第1の参照ピクチャと第2の参照ピクチャの一方または両方は、短期参照ピクチャまたは長期参照ピクチャであり得る。いくつかのそのような例では、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するとき、ビデオデコーダ30は、時間マージング候補の参照インデックスが、第2の参照ピクチャと同じ参照ピクチャタイプに属する参照ピクチャを含んでいる参照ピクチャリスト中の最先の位置を示すように、時間マージング候補の参照インデックスを設定し得る。
[0246]さらに、ビデオデコーダ30は、時間マージング候補を含むマージング候補リスト中の複数のマージング候補の中から選択されたマージング候補を決定する(204)。いくつかの例では、ビデオデコーダ30は、ビットストリームから、選択されたマージング候補のマージング候補リスト中の位置を示すシンタックス要素を取得し得る。ビデオデコーダ30は、選択されたマージング候補によって指定される動き情報に少なくとも部分的に基づいて、現在ビデオユニットのための予測ブロックを決定する(206)。さらに、ビデオデコーダ30は、現在ビデオユニットのための予測ブロックに少なくとも部分的に基づいて、再構成されたサンプルブロックを生成する(208)。
[0247]図10は、本開示の1つまたは複数の技法による、ビデオエンコーダ20の例示的な動作を示すフローチャートである。図10の例では、第1の参照インデックス値が、現在ピクチャの現在PUに関連する参照ピクチャリスト内の、第1の参照ピクチャの位置を示す。いくつかの例では、第1の参照インデックス値は0に等しい。コロケートピクチャのコロケートPUの参照インデックスは、コロケートピクチャのコロケートPUに関連する参照ピクチャリスト内の、第2の参照ピクチャの位置を示す。
[0248]さらに、図10の例では、ビデオエンコーダ20は、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するかどうかを決定する(250)。一例では、第1の参照ピクチャの参照ピクチャタイプは、時間参照ピクチャタイプまたはディスパリティ参照ピクチャタイプのうちの1つであり得る。この例では、第2の参照ピクチャの参照ピクチャタイプは、時間参照ピクチャタイプとディスパリティ参照ピクチャタイプとのうちの1つであり得る。別の例では、第1の参照ピクチャの参照ピクチャタイプは、短期参照ピクチャタイプまたは長期参照ピクチャタイプのうちの1つである。この例では、第2の参照ピクチャの参照ピクチャタイプは、短期参照ピクチャタイプと長期参照ピクチャタイプとのうちの1つである。
[0249]第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するとき(「250」のYES)、ビデオエンコーダ20は、時間マージング候補の参照インデックスを第2の参照インデックス値に設定する(252)。第2の参照インデックス値は第1の参照インデックス値とは異なり得る。第2の参照インデックス値は、現在ピクチャに関連する参照ピクチャリスト内の、第3の参照ピクチャの位置を示し得る。いくつかの例では、第3の参照ピクチャと第2の参照ピクチャとは同じ参照ピクチャタイプに属する。しかしながら、第1の参照ピクチャと第2の参照ピクチャとが同じ参照ピクチャタイプに属するとき、時間マージング候補の参照インデックスは第1の参照インデックス値に等しいままであり得る。さらに、いくつかの例では、第2の参照インデックス値はスライスヘッダ中でシグナリングされる。
[0250]いくつかの例では、第1の参照ピクチャが時間参照ピクチャタイプに属し、第2の参照ピクチャがディスパリティ参照ピクチャタイプに属するとき、ビデオエンコーダ20は、時間マージング候補の参照インデックスがディスパリティ参照ピクチャの参照ピクチャリスト中の最先の位置を示すように、時間マージング候補の参照インデックスを設定する。さらに、いくつかの例では、第1の参照ピクチャがディスパリティ参照ピクチャタイプに属し、第2の参照ピクチャが時間参照ピクチャタイプに属するとき、ビデオエンコーダ20は、時間マージング候補の参照インデックスが時間参照ピクチャの参照ピクチャリスト中の最先の位置を示すように、時間マージング候補の参照インデックスを設定し得る。
[0251]上記のように、いくつかの例では、第1の参照ピクチャと第2の参照ピクチャの一方または両方は、短期参照ピクチャまたは長期参照ピクチャであり得る。いくつかのそのような例では、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属するとき、ビデオエンコーダ20は、時間マージング候補の参照インデックスが、第2の参照ピクチャと同じ参照ピクチャタイプに属する参照ピクチャを含んでいる参照ピクチャリスト中の最先の位置を示すように、時間マージング候補の参照インデックスを設定し得る。
[0252]一方、いくつかの例では、第1の参照ピクチャと第2の参照ピクチャとが異なる参照ピクチャタイプに属しないとき(「250」のNO)、または時間マージング候補の参照インデックスを第2の参照インデックス値に設定した後に、ビデオエンコーダ20は、時間マージング候補を含むマージング候補リスト中の複数のマージング候補の中から選択されたマージング候補を決定する(254)。いくつかの例では、ビデオエンコーダ20は、レート/ひずみ分析に基づいて、選択されたマージング候補を決定し得る。さらに、ビデオエンコーダ20は、マージング候補リスト中の選択されたマージング候補を識別するデータを含むビットストリームを生成する(256)。
[0253]図11は、本開示の1つまたは複数の例示的な技法による、ビデオエンコーダ20の例示的な動作を示すフローチャートである。図11の例では、ビデオエンコーダ20はビデオデータを受信する(300)。ビデオエンコーダ20は、ビデオデータの各ピクチャについてボックス302中のアクションを実行し得る。図11の例では、ビデオエンコーダ20は、現在ピクチャのための参照ピクチャサブセットを決定する(304)。ビデオエンコーダ20は、現在ピクチャの各PスライスまたはBスライスについてボックス306中のアクションを実行し得る。たとえば、ビデオエンコーダ20は、現在スライスのための1つまたは複数の参照ピクチャリストを生成する(308)。ビデオエンコーダ20は、現在スライスの各CUについてボックス310中のアクションを実行し得る。さらに、ビデオエンコーダ20は、現在CUの各PUについてボックス312中のアクションを実行し得る。図11の例では、ビデオエンコーダ20は、現在PUのマージング候補リストのための空間マージング候補を生成する(314)。さらに、ビデオエンコーダ20は、現在PUのマージング候補リストのための時間マージング候補を生成する(316)。ビデオエンコーダ20は、本開示の技法のいずれかに従って時間マージング候補を生成し得る。さらに、ビデオエンコーダ20は、現在CUの他のシンタックス構造を生成する(318)。ビデオエンコーダ20は、ビデオデータの符号化表現を含むビットストリームを生成する(320)。ビデオデータの符号化表現は、PUのマージング候補リスト中の選択されたマージング候補を示すシンタックス要素を含み得る。
[0254]図12は、本開示の1つまたは複数の例示的な技法による、ビデオデコーダ30の例示的な動作を示すフローチャートである。図12の例では、ビデオデコーダ30は、ビデオデータの符号化表現を含むビットストリームを受信する(350)。ビデオデコーダ30は、ビデオデータの各ピクチャについてボックス352中のアクションを実行し得る。図12の例では、ビデオデコーダ30は、現在ピクチャのための参照ピクチャサブセットを決定する(354)。ビデオデコーダ30は、現在ピクチャの各PスライスまたはBスライスについてボックス356中のアクションを実行し得る。たとえば、ビデオデコーダ30は、現在スライスのための1つまたは複数の参照ピクチャリストを生成する(358)。ビデオデコーダ30は、現在スライスの各CUについてボックス360中のアクションを実行し得る。さらに、ビデオデコーダ30は、現在CUの各PUについてボックス362中のアクションを実行し得る。図12の例では、ビデオデコーダ30は、現在PUのマージング候補リストのための空間マージング候補を生成する(364)。さらに、ビデオデコーダ30は、現在PUのマージング候補リストのための時間マージング候補を生成する(366)。ビデオデコーダ30は、本開示の技法のいずれかに従って時間マージング候補を生成し得る。さらに、ビデオデコーダ30は、現在CUのコーディングブロックを再構成する(368)。いくつかの事例では、ビデオデコーダ30は、現在CUのコーディングブロックを再構成するために、マージング候補リスト中の選択されたマージング候補によって指定される動き情報を使用し得る。各ピクチャの各スライスのCUのコーディングブロックを再構成することによって、ビデオデコーダ30はビデオデータを再構成し得る。ビデオデコーダ30はビデオデータを出力する(370)。
[0255]1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
[0256]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0257]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)などの1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび/またはソフトウェアモジュール内に与えられ得、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
[0258]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
[0259]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。