本開示の技法は全般に、ブロックベースのビデオコーディングにおける動き補償に関する。本開示の技法は、既存のビデオコーデックまたはビデオコーディング規格(たとえば、ITU-T H.265、HEVC)に適用されることが可能であり、または、将来のビデオコーデックもしくはビデオコーディング規格に適用されることが可能である。
本明細書では、「コンテンツ」という用語の実例は「ビデオ」という用語に変更されることがあり、「ビデオ」という用語の実例は「コンテンツ」という用語に変更されることがある。これは、「コンテンツ」または「ビデオ」という用語が形容詞として使用されるか、名詞として使用されるか、または言葉の他の部分として使用されるかにかかわらずあてはまる。たとえば、「コンテンツコーダ」への言及は「ビデオコーダ」への言及も含み、「ビデオコーダ」への言及は「コンテンツコーダ」への言及も含む。同様に、「コンテンツ」への言及は「ビデオ」への言及も含み、「ビデオ」への言及は「コンテンツ」への言及も含む。
本明細書では、「コンテンツ」は任意のタイプのコンテンツを指す。たとえば、「コンテンツ」は、ビデオ、スクリーンコンテンツ、画像、任意のグラフィカルコンテンツ、任意の表示可能なコンテンツ、またはそれらに対応する任意のデータ(たとえば、ビデオデータ、スクリーンコンテンツデータ、画像データ、グラフィカルコンテンツデータ、表示可能コンテンツデータなど)を指し得る。
本明細書では、「ビデオ」という用語は、スクリーンコンテンツ、動くコンテンツ、順番に提示され得る複数の画像、またはこれらに対応する任意のデータ(たとえば、スクリーンコンテンツデータ、動くコンテンツデータ、ビデオデータ、画像データなど)を指し得る。
本明細書では、「画像」という用語は、単一の画像、1つまたは複数の画像、ビデオに対応する、複数の画像のうちの1つまたは複数の画像、ビデオに対応しない、複数の画像のうちの1つまたは複数の画像、ビデオに対応する複数の画像(たとえば、ビデオに対応する画像のすべてまたはビデオに対応する画像のすべて未満)、単一の画像の下位部分(sub-part)、単一の画像の複数の下位部分、複数の画像に対応する複数の下位部分、1つまたは複数のグラフィックスプリミティブ、画像データ、グラフィカルデータなどを指し得る。
本明細書では、「動き情報」は、動きベクトル情報を、またはより簡単には動きベクトルを指し、もしくはそうでなければそれを含むことがある。他の例では、「動き情報」は、動きベクトル情報とは異なる動き情報を指すことがあり、またはそうでなければそれを含むことがある。さらに他の例では、「動き情報」は、1つまたは複数の動きベクトルと、使用されるべき参照ピクチャリストを特定する予測方向および参照ピクチャリスト中の参照ピクチャを特定する1つまたは複数の参照インデックスなどの、任意の他の動き関連の情報とを指し得る。本明細書では、「動き情報のセット」などは「動き情報」を指し得る。同様に、「動き情報」は「動き情報のセット」などを指し得る。
本明細書では、「隣」、「隣接するブロック」、「隣接ブロック」などは、少なくとも1つの側/境界でビデオデータの別のブロックと隣接するビデオのブロックを指す。たとえば、ビデオデータの現在のブロックは、左、右、上、および下という4つの側を有し得る。ビデオデータの現在のブロックに対するビデオデータの隣接ブロックは、ビデオの現在のブロックの左、右、上、または下の境界に接するビデオデータの任意のブロックを含み得る。別の例として、第2のブロックに隣接する第1のブロックは、第2のブロックの境界(たとえば、左の境界、右の境界、上の境界、または下の境界)を共有する。
図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書では、「ビデオコーダ」という用語は、総称的に、ビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指し得る。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明される様々な例に従って、重複ブロック動き補償を使用してビデオデータのブロックを符号化または復号するための技法を実行するように構成され得るデバイスの例を表す。
ビデオエンコーダ20および/またはビデオデコーダ30は、本開示において説明される技法に従って動作するように構成され得る。ビデオデコーダ30は、本明細書において説明されるビデオエンコーダ20のプロセスとは全般に逆のプロセスを実行するように構成され得る。同様に、ビデオエンコーダ20は、本明細書において説明されるビデオデコーダ30のプロセスとは全般に逆のプロセスを実行するように構成され得る。
図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12および宛先デバイス14を含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれ得る。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれ得る。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車載コンピュータなどを含む、広範囲のデバイスを備え得る。
宛先デバイス14は、符号化されたビデオデータをソースデバイス12からチャネル16を介して受信し得る。チャネル16は、任意のタイプの媒体、および/または、符号化されたビデオデータをソースデバイス12から宛先デバイス14に移動することが可能な1つまたは複数の媒体もしくはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12がリアルタイムで符号化されたビデオデータを宛先デバイス14に直接送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14へ送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路などの、ワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などの、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にする他の機器を含み得る。
いくつかの例では、符号化されたデータは、出力インターフェース22から記憶デバイス26に出力されることがあり、記憶デバイス26は、ソースデバイス12によって生成される符号化されたビデオデータを記憶するように構成されることがある。チャネル16とは別のものとして図示されているが、他の例ではチャネル16は記憶デバイス26に通信可能に結合され得ることを理解されたい。この例では、宛先デバイス14は、記憶デバイス26に記憶される符号化されたビデオデータにアクセスし得る。たとえば、符号化されたビデオデータは、入力インターフェース28によって記憶デバイス26からアクセスされ得る。
記憶デバイス26は、ハードドライブ、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、揮発性もしくは不揮発性メモリ、または、符号化されたビデオデータを記憶するための任意の他の適切なデジタル記憶媒体などの、様々な分散されたまたは局所的にアクセスされるデータ記憶媒体のうちのいずれかを含み得る。いくつかの例では、記憶デバイス26は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスに対応し得る。そのような例では、ファイルサーバは、符号化されたビデオデータを記憶するとともに符号化されたビデオデータを宛先デバイス14に送信することが可能なタイプの任意のサーバであり得る。例示的なファイルサーバは、たとえば、(たとえば、ウェブサイトのための)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
宛先デバイス14は、たとえばインターネット接続を含む任意データ接続(たとえば、任意の標準的なデータ接続または他のもの)を通じて、符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、記憶デバイス26(たとえば、ファイルサーバ)に記憶されている符号化されたビデオデータにアクセスするのに適した、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線チャネル(たとえば、DSL、ケーブルモデムなど)、または両方の任意の組合せを含み得る。記憶デバイス26からの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
本開示の技法は、ワイヤレスの用途または設定に限定されない。本開示の技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶された符号化されたビデオデータの復号、または他の用途などの様々なマルチメディア用途のいずれかをサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含まないビデオコーディングの設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データは、ローカルメモリからの取り出し、ネットワークを介したストリーミングなどが行われる。ビデオ符号化デバイスがデータを符号化してメモリに記憶することができ、かつ/または、ビデオ復号デバイスがメモリからデータを取り出して復号することができる。多くの例では、互いに通信しないが、単にデータをメモリへと符号化し、かつ/またはメモリからデータを取り出して復号するデバイスによって、符号化および復号が実行される。
図1の例では、ソースデバイス12は、ビデオソース18、ビデオエンコーダ20、および出力インターフェース22を含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、たとえば、ビデオカメラ、以前キャプチャされたビデオデータを含むビデオアーカイブ、ビデオデータをビデオコンテンツプロバイダから受信するためのビデオフィードインターフェース、および/もしくはビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化するように構成され得る。たとえば、ビデオエンコーダ20は、キャプチャされた、事前にキャプチャされた、またはコンピュータで生成されたビデオデータ(または任意の他のデータ)を符号化するように構成され得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して、符号化されたビデオデータを宛先デバイス14に直接送信する。他の例では、復号および/または再生のために宛先デバイス14によって後でアクセスできるように、符号化されたビデオデータは、記憶媒体(たとえば、記憶デバイス26)にも記憶され得る。
図1の例では、宛先デバイス14は、入力インターフェース28、ビデオデコーダ30、およびディスプレイデバイス32を含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、符号化されたビデオデータをチャネル16を通じて受信し得る。チャネル16を通じて通信された、または記憶デバイス26によって提供された符号化されたビデオデータは、ビデオデータを復号する際にビデオデコーダ30などのビデオデコーダによって使用するための、ビデオエンコーダ20によって生成された様々なシンタックス要素を含み得る。そのようなシンタックス要素は、通信媒体上で送信された、記憶媒体上に記憶された、またはファイルサーバ上に記憶された、符号化されたビデオデータとともに含まれ得る。
ディスプレイデバイス32は、宛先デバイス14と一体であることがあり、または宛先デバイス14の外部にあることがある。いくつかの例では、宛先デバイス14は、一体化されたディスプレイデバイスを含むことがあり、外部のディスプレイデバイスとインターフェースするようにも構成されることがある。他の例では、宛先デバイス14はディスプレイデバイスであり得る。一般に、ディスプレイデバイス32は復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスのいずれかを備え得る。
本開示の技法は、説明を簡単にするために、HEVC用語または他のビデオ規格の用語を利用し得る。しかしながら、本開示の技法はHEVCまたは他のビデオ規格に限定されないことを理解されたい。本開示の技法は、HEVCの後継の規格とその拡張、ならびに、過去のものであるか、現在のものであるか、または未来のものであるかにかかわらず、他のビデオ規格において実装され得る。
図1に示されないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ30は各々、オーディオエンコーダおよびオーディオデコーダと一体化されることがあり、共通のデータストリームまたは別個のデータストリームの中のオーディオとビデオの両方の符号化を処理するために、適切なMUX-DEMUXユニット、または他のハードウェアおよびソフトウェアを含むことがある。適用可能な場合、いくつかの例では、MUX-DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
本開示は全般に、ある情報をビデオデコーダ30などの別のデバイスへ「シグナリング」または「送信」するビデオエンコーダ20に言及し得る。「シグナリングすること」または「送信すること」という用語は、全般に、シンタックス要素、および/または圧縮されたビデオデータを復号するために使用される他のデータの通信を指し得る。そのような通信は、リアルタイムで、またはほぼリアルタイムで発生し得る。代替的に、そのような通信は、ある時間の範囲にわたって、たとえば、符号化の時点において符号化されたビットストリームの中のシンタックス要素をコンピュータ可読記憶媒体に記憶するときに発生することがあり、次いで、シンタックス要素が、この媒体に記憶された後の任意の時点において復号デバイスによって取り出され得る。したがって、ビデオデコーダ30がある情報を「受信する」ものとして言及されることがあるが、情報の受信は、必ずしもリアルタイムで、またはほぼリアルタイムで発生するとは限らず、記憶後のある時点で媒体から取り出されることがある。
ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のいずれかとして実装され得る。技法が部分的にソフトウェアで実装される場合、本開示の技法を実行するために、デバイスは、ソフトウェアのための命令を適切な非一時的コンピュータ可読記憶媒体に記憶することができ、1つまたは複数のプロセッサを使用するハードウェアにおいて命令を実行することができる。前述のもののいずれも(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)が、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、それらのいずれかが、それぞれのデバイスの中で複合エンコーダ/デコーダ(コーデック)の一部として一体化されてよい。
HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは通常、一連のピクチャを含む。ピクチャは、「フレーム」と呼ばれることもある。いくつかの例では、ビデオエンコーダ20は、複数のピクチャ(たとえば、ピクチャのシーケンス)に対するピクチャの表示順序を特定するために、ピクチャ順序カウント(POC:picture order count)を使用するように構成され得る。そのような例では、ビデオエンコーダ20は、POC値をピクチャに割り当てるように構成され得る。複数のコーディングされたビデオシーケンスが1つのビットストリーム中に存在する例では、同じPOC値を有するピクチャは、復号順序に関して互いにより接近している可能性がある。ピクチャのPOC値は、参照ピクチャリストの構築、たとえばHEVCにおけるような参照ピクチャセットの導出、および動きベクトルのスケーリングのために使用され得る。
いくつかの例では、ピクチャは3つのサンプルアレイを含み得る。そのような例では、ピクチャは、SL、SCb、およびSCrと表記される3つのサンプルアレイを含み得る。そのような例では、SLはルーマサンプルの2次元アレイ(たとえば、ブロック)であり、SCbはCbクロミナンスサンプルの2次元アレイ(たとえば、ブロック)であり、SCrはCrクロミナンスサンプルの2次元アレイ(たとえば、ブロック)である。クロミナンスサンプルは、本明細書で「クロマ」サンプルと呼ばれることもある。他の事例では、ピクチャはモノクロームであることがあり、ルーマサンプルのアレイだけを含むことがある。
ピクチャの符号化された表現を生成するために、ビデオエンコーダ20は、コーディングツリーユニット(CTU:coding tree unit)のセットを生成し得る。CTUのセットは、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造を含み得る。コーディングツリーブロックは、サンプルのNxNブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックと概ね類似していることがある。しかしながら、CTUは、必ずしも特定のサイズに限定されず、1つまたは複数のコーディングユニット(CU)を含み得る。ビデオフレームまたはピクチャは、1つまたは複数のスライスに区分され得る。スライスは、ラスター走査において連続的に順序付けられた整数個のCTUを含み得る。コーディングされたスライスは、スライスヘッダおよびスライスデータを備え得る。スライスのスライスヘッダは、スライスについての情報を提供するシンタックス要素を含むシンタックス構造であり得る。スライスデータは、スライスのコーディングされたCTUを含み得る。
いくつかの例では、CUは、コーディングノードと、コーディングノードと関連付けられた1つまたは複数の予測ユニット(PU)および/または変換ユニット(TU)とを含み得る。CUのサイズは、コーディングノードのサイズに対応することがあり、形状が正方形であることがある。CUのサイズは、たとえば、8x8ピクセルから、最大で64x64ピクセル以上のツリーブロックのサイズにまでわたり得る。各CUは、1つまたは複数のPUと1つまたは複数のTUとを含み得る。CUと関連付けられたシンタックスデータは、たとえば、1つまたは複数のPUへのCUの区分を記述し得る。区分モードは、CUがスキップもしくは直接モードで符号化されているか、イントラ予測モードで符号化されているか、またはインター予測モードで符号化されているかに応じて異なり得る。PUは、形状が正方形または非正方形であるように区分され得る。CUと関連付けられるシンタックスデータはまた、たとえば、4分木に従った1つまたは複数のTUへのCUの区分も記述し得る。TUは、形状が正方形または非正方形であり得る。
一般に、PUは、予測プロセスに関連するデータを含み得る。たとえば、PUがイントラモード符号化されるとき、PUは、PUのイントラ予測モードを記述するデータを含み得る。別の例として、PUがインターモード符号化されるとき、PUは、PUの動きベクトルを定義するデータを含み得る。PUの動きベクトルを定義するデータは、たとえば、動きベクトルの水平成分、動きベクトルの垂直成分、動きベクトルの解像度(たとえば、1/4ピクセル精度または1/8ピクセル精度)、動きベクトルが指す参照ピクチャ、および/または動きベクトルのための参照ピクチャリスト(たとえば、リスト0、リスト1、またはリストC)を記述し得る。
一般に、TUは、変換および量子化プロセスのために使用され得る。1つまたは複数のPUを有する所与のCUは、1つまたは複数の変換ユニット(TU)も含み得る。予測に続いて、ビデオエンコーダ20は、PUに対応する残差値を計算することができる。残差値は、ピクセル差分値を備えることがあり、ピクセル差分値は、エントロピーコーディングのための直列化された変換係数を生成するために、変換係数へと変換され、量子化され、TUを使用して走査されることがある。
本開示は、サンプルの1つまたは複数のブロックのサンプルをコーディングするために使用される1つまたは複数のサンプルブロックおよびシンタックス構造を指すために、「ビデオユニット」、「ビデオブロック」、「コーディングブロック」、または「ブロック」という用語を使用し得る。例示的なタイプのビデオユニットまたはブロックは、コーディングツリーユニット(CTU)、コーディングユニット(CU)、予測ユニット(PU)、サブPU、変換ユニット(TU)、マクロブロック(MB)、マクロブロック区分、サブブロックなどを含み得る。いくつかの例では、サブブロックは、CTUのサブブロック、CUのサブブロック、PUのサブブロック、TUのサブブロック、マクロブロックのサブブロック、またはサブブロックのサブブロックであり得る。たとえば、サブブロックはサブPUのグループを含み得る。そのような例では、サブブロックは、CTU、CU、PU、TU、またはマクロブロックより小さいことがある。いくつかの例では、サブPUは、PUより小さなブロックを指し得る。そのような例では、PUが8x4である場合、サブPUは4x4であり得る。
いくつかの例では、動き情報のセットは、ビデオデータの各ブロックに対して利用可能であり得る。動き情報のセットは、前向きおよび後向きの予測方向に対する動き情報を含み得る。前向きおよび後向きの予測方向が、双方向予測モードの2つの予測方向であり得る。前向きおよび後向きの予測方向が、単方向予測モードの2つの予測方向のうちの1つであり得る。「前向き」および「後向き」という用語は、必ずしも幾何学的な意味を有さず、代わりに、たとえば現在のピクチャの参照ピクチャリスト0(RefPicList0)および参照ピクチャリスト1(RefPicList1)に対応する。1つだけの参照ピクチャリストが1つのピクチャまたはスライスに対して利用可能であるとき、RefPicList0だけが利用可能であることがあり、ピクチャまたはスライスの各ブロックの動き情報は前向きであることがある。
各予測方向(たとえば、前向きまたは後向き)に対して、動き情報は、予測方向、参照インデックス、および動きベクトルを含み得る。いくつかの例では、簡単のために、動きベクトルが関連する参照インデックスを有することが仮定されるような方法で、動きベクトル自体が参照され得る。参照インデックスは、現在の参照ピクチャリスト(RefPicList0またはRefPicList1)中の参照ピクチャを特定するために使用される。動きベクトルは、水平および垂直の成分を有し得る。
本明細書において説明されるビデオブロックは固定サイズまたは可変サイズを有することがあり、指定されたコーディング規格に従ってサイズが異なることがある。例として、特定のCUのサイズは2Nx2Nであり得る。そのような例では、ビデオエンコーダ20は、2Nx2NまたはNxNのサイズを有するPUに対してイントラ予測を実行するように構成されることがあり、2Nx2N、2NxN、Nx2N、またはNxNのサイズを有するPUに対してインター予測を実行するように構成されることがある。他の例では、PUの利用可能なサイズは同じであることがあり、異なることがある。
本開示では、「NxN」および「N対N」は、垂直方向および水平方向の寸法に関するビデオブロックのピクセルの寸法、たとえば、16x16ピクセル、または16対16ピクセルを指すために、交換可能に使用され得る。一般に、16x16ブロックは、垂直方向に16ピクセル(y=16)と水平方向に16ピクセル(x=16)とを有する。同様に、NxNブロックは、一般に、垂直方向にNピクセルと水平方向にNピクセルとを有し、ここでNは、正の整数値を表す。ブロック中のピクセルは、行および列に配列され得る。さらに、ブロックは、必ずしも水平方向において垂直方向と同じ数のピクセルを有する必要はない。たとえば、ブロックは、NxMピクセルを備えることがあり、ここでMはNに等しく、または等しくなく、Mは正の整数値である。
いくつかの例では、本明細書において開示されるCUの構造は、H.265/HEVCなどのビデオコーディング規格において記載されるような、CUの構造を指し得る。HEVCでは、スライスの中の最大のコーディングユニットは、コーディングツリーブロック(CTB)と呼ばれる。CTBは、そのノードがコーディングユニットである4分木を含む。CTBのサイズは、HEVCのmainプロファイルにおいては16x16~64x64の範囲であり、いくつかの例では8x8のCTBサイズもサポートされる。CUは、CTBと同じサイズであることがあり、8x8程度の小ささであることがある。各CUは、1つのモードでコーディングされる。CUがインター予測モードコーディングされるとき、CUはさらに、2つまたは4つの予測ユニット(PU)へと区分されることがあり、または、さらなる区分が適用されないときは1つだけのPU(たとえば、図2に示されるPART_2Nx2N)になることがある。2つのPUが1つのCUの中に存在するとき、2つのPUは、半分のサイズの長方形(たとえば、図2に示されるPART_2NxNまたはPART Nx2N)、または一方が4分の1のサイズであり他方が4分の3のサイズである2つの長方形(たとえば、図2に示されるPART_2NxnU、PART_2NxnD、PART_nLx2N、またはPART_nRx2N)であり得る。図2に示されるように、インター予測モードでコーディングされるCUに対して、PART_2Nx2N、PART_2NxN、PART_Nx2N、PART_NxN、PART_2NxnU、PART_2NxnD、PART_nLx2N、およびPART_nRx2Nという8つの予測モードがある。CUがインターコーディングされるとき、動き情報の1セットが各PUに対して存在する。加えて、各PUは、動き情報のセットを導出するために固有のインター予測モードでコーディングされる。
たとえばITU-T H.264/AVCまたは他の規格におけるマクロブロックを参照すると、各インターマクロブロック(MB)は、一例によれば、1つの16x16のMB区分、2つの16x8のMB区分、2つの8x16のMB区分、または4つの8x8のMB区分という、4つの異なる方法で区分され得る。1つのMBにおける様々なMB区分は、各方向に対して異なる参照インデックス値(RefPicList0またはRefPicList1)を有し得る。MBが4つの8x8のMB区分へと区分されない例では、MBは、各方向における各MB区分に対して1つの動きベクトルしか有しないことがある。MBが4つの8x8のMB区分へと区分される例では、各々の8x8のMB区分はさらにサブブロックへと区分されることがあり、このサブブロックの各々が各方向において異なる動きベクトルを有することがある。そのような例では、8x8のMB区分は、1つの8x8のサブブロック、2つの8x4のサブブロック、2つの4x8のサブブロック、または4つの4x4のサブブロックという4つの異なる方法で、1つまたは複数のサブブロックへと区分され得る。各サブブロックは、各方向に異なる動きベクトルを有し得る。そのような例では、各動きベクトルは、サブブロック以上のレベルに存在し得る。
いくつかの例では、本明細書において開示されるMBの構造は、ITU-T H.264/AVCなどのビデオコーディング規格において記載されるような、MBの構造を指し得る。そのような例では、ビデオエンコーダ20およびビデオデコーダ30は、Bスライスにおけるスキップモードまたは直接モードのためにMBレベルまたはMB区分レベルで時間的直接モードを使用して、ビデオデータをコーディングするように構成され得る。各MB区分に対して、現在のブロックのRefPicList1[0]において現在のMB区分と併置されるブロックの動きベクトルが、動きベクトルを導出するために使用され得る。併置されるブロック中の各動きベクトルは、POC距離に基づいてスケーリングされ得る。H.264/AVCは空間的直接モードも含み、これは、空間的に隣接するものから動き情報を予測するために使用され得る。
図1を参照すると、コーディングされたCTUを生成するために、ビデオエンコーダ20は、CTUのコーディングツリーブロック上で4分木区分を再帰的に実行してコーディングツリーブロックをコーディングブロックへと分割することができ、したがって、「コーディングツリーユニット」という名前である。コーディングブロックは、サンプルのNxN(またはNxM)ブロックであり得る。CUは、ルーマサンプルアレイ、Cbサンプルアレイ、およびCrサンプルアレイを有するピクチャの、ルーマサンプルのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロック、ならびにそれらのコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数のPUに区分し得る。PUは、同じ予測技法が適用されるサンプルの、正方形または非正方形のブロックであり得る。CUのPUは、ピクチャのルーマサンプルの予測ブロック、クロマサンプルの2つの対応する予測ブロック、および予測ブロックサンプルを予測するために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロックに対して、予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。
ビデオエンコーダ20は、PUの予測ブロックを生成するために、イントラ予測またはインター予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。
ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャ以外の1つまたは複数のピクチャの復号されるサンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために、単予測または双予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
ビデオエンコーダ20がCUの1つまたは複数のPUの予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成した後、ビデオエンコーダ20は、CUの残差ブロックを生成し得る。CUの残差ブロック中の各サンプルは、CUのPUの予測ブロック中のサンプルとCUのコーディングブロック中の対応するサンプルとの間の差分を示し得る。たとえば、ビデオエンコーダ20は、CUのルーマ残差ブロックを生成し得る。CUのルーマ残差ブロックの中の各サンプルは、CUの予測ルーマブロックのうちの1つの中のルーマサンプルとCUの元のルーマコーディングブロックの中の対応するサンプルとの間の差分を示す。加えて、ビデオエンコーダ20は、CUのCb残差ブロックを生成し得る。CUのCb残差ブロックの中の各サンプルは、CUの予測Cbブロックのうちの1つの中のCbサンプルと、CUの元のCbコーディングブロックの中の対応するサンプルとの間の差分を示し得る。ビデオエンコーダ20はまた、CUのCr残差ブロックを生成し得る。CUのCr残差ブロックの中の各サンプルは、CUの予測Crブロックのうちの1つの中のCrサンプルと、CUの元のCrコーディングブロックの中の対応するサンプルとの間の差分を示し得る。
ビデオエンコーダ20は、4分木区分を使用して、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を1つまたは複数の変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)に分解し得る。変換ブロックは、同じ変換が適用されるサンプルのブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックと関連付けられ得る。TUと関連付けられるルーマ変換ブロックは、CUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
ビデオエンコーダ20は、1つまたは複数の変換を変換ブロックに適用して、TUの係数ブロックを生成し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。たとえば、ビデオエンコーダ20は、1つまたは複数の変換をTUのルーマ変換ブロックに適用して、TUのルーマ係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCb変換ブロックに適用して、TUのCb係数ブロックを生成し得る。ビデオエンコーダ20は、1つまたは複数の変換をTUのCr変換ブロックに適用して、TUのCr係数ブロックを生成し得る。
いくつかの例では、CUのPUを使用するイントラ予測コーディングまたはインター予測コーディングに続いて、ビデオエンコーダ20がCUのTUの残差データを計算し得る。PUは、空間領域(ピクセル領域とも呼ばれる)におけるピクセルデータを備えることがあり、TUは、残差ビデオデータへの変換、たとえば、離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に同様の変換の適用後の、変換領域における係数を備えることがある。残差データは、符号化されていないピクチャのピクセルと、PUに対応する予測値との間のピクセル差に対応し得る。ビデオエンコーダ20は、CUの残差データを含むTUを形成し、次いで、CUの変換係数を生成するためにTUを変換し得る。
係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後、ビデオエンコーダ20は、ブロック中の係数を量子化し得る。量子化は、一般に、変換係数が量子化されて、場合によっては、変換係数を表すために使用されるデータの量を低減し、さらなる圧縮をもたらすプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化するように構成され得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対して、コンテキスト適応バイナリ算術コーディング(CABAC:Context-Adaptive Binary Arithmetic Coding)を実行し得る。
いくつかの例では、ビデオエンコーダ20は、エントロピー符号化されることが可能な直列化されたベクトルを生成するために、事前に定義された走査順序(たとえば、水平方向、垂直方向、または任意の他の走査順序)を利用して、量子化された変換係数を走査することができる。他の例では、ビデオエンコーダ20は適応走査を実行し得る。1次元ベクトルを形成するために量子化された変換係数を走査した後、ビデオエンコーダ20は、たとえば、コンテキスト適応可変長コーディング(CAVLC:context adaptive variable length coding)、コンテキスト適応バイナリ算術コーディング(CABAC)、シンタックスベースコンテキスト適応バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング、または別のエントロピー符号化方法に従って、1次元ベクトルをエントロピー符号化し得る。ビデオエンコーダ20はまた、ビデオデータを復号する際にビデオデコーダ30によって使用するための符号化されたビデオデータと関連付けられたシンタックス要素をエントロピー符号化し得る。
CABACを実行するために、ビデオエンコーダ20は、送信されるべきシンボルにコンテキストモデル内のコンテキストを割り当て得る。コンテキストは、たとえば、シンボルの隣接値が0ではないかどうかに関連することがある。CAVLCを実行するために、ビデオエンコーダ20は、送信されるべきシンボルのための可変長コードを選択し得る。VLCにおけるコードワードは、比較的より短いコードがより可能性が高いシンボルに対応し、より長いコードがより可能性が低いシンボルに対応するように構築され得る。このように、VLCの使用は、たとえば、送信されるべき各シンボルに等長コードワードを使用して、ビットの節約を達成し得る。確率の決定は、シンボルに割り当てられたコンテキストに基づき得る。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、シンタックス要素をビットストリームから復号するために、ビットストリームを構文解析し得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも一部基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは全般に、ビデオエンコーダ20によって実行されるプロセスと逆であり得る。たとえば、ビデオデコーダ30は、PUのMVを使用して、現在のCUのインター予測されたPUの予測ブロックを決定し得る。同様に、ビデオデコーダ30は、現在のCUのPUのイントラ予測されたブロックを生成し得る。加えて、ビデオデコーダ30は、現在のCUのTUと関連付けられる変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、変換係数ブロックに対して逆変換を実行して、現在のCUのTUと関連付けられる変換ブロックを再構築し得る。ビデオデコーダ30は、現在のCUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの逆量子化および逆変換から得られた対応する残差値に加えることによって、現在のCUのコーディングブロックを再構築し得る。ピクチャのCUごとにコーディングブロックを再構築することによって、ビデオデコーダ30は、ピクチャを再構築し得る。
ビデオエンコーダ20および/またはビデオデコーダ30は、本開示において説明される技法に従って動作するように構成され得る。一般に、ビデオエンコーダ20および/またはビデオデコーダ30は、本明細書において説明される1つまたは複数の技法を任意の組合せで実行するように構成され得る。
本明細書において記載される本開示の1つまたは複数の技法は、ビデオ規格(たとえば、AVCおよび/またはHEVC)、その拡張、開発中のビデオ規格、もしくは将来のビデオ規格などとともに使用されることがあり、またはそうでなければそれらを改良することがあるので、AVCおよびHEVCに関するブロック区分および動き予測についてのいくつかの設計の態様が本明細書において紹介され、または別様に説明される。
HEVCにおける動き予測の態様がここで論じられる。HEVC規格では、PUに対して、マージモード(スキップはマージの特別な場合であると見なされる)および高度動きベクトル予測(AMVP)という、利用可能な2つのインター予測モードがある。AMVPモードまたはマージモードのいずれでも、動きベクトル(MV)候補リストが、複数の動きベクトル予測子のために維持される。現在のPUの動きベクトル、ならびにマージモードにおける参照インデックスは、MV候補リストから1つの候補を選ぶことによって生成される。MV候補リストは、マージモードでは5つまでの候補を含み、AMVPモードでは2つだけの候補を含む。マージ候補は、動き情報のセット、たとえば参照ピクチャリスト(リスト0およびリスト1)と参照インデックスの両方に対応する動きベクトルを含み得る。マージ候補がマージインデックスによって特定される場合、参照ピクチャが現在のブロックの予測のために使用され、さらに、関連する動きベクトルが決定される。しかしながら、AMVP候補は動きベクトルだけを含むので、リスト0またはリスト1のいずれかからの潜在的予測方向の各々に対するAMVPモードのもとで、参照インデックスは、MV候補リストに対するMVPインデックスとともに明示的にシグナリングされる必要がある。AMVPモードでは、予測された動きベクトルがさらに改善され得る。上で説明されたように、HEVCにおけるマージ候補は動き情報の全セットに対応するが、HEVCにおけるAMVP候補は特定の予測方向および参照インデックスに対する1つの動きベクトルしか含まない。マージモードとAMVPモードの両方に対する候補は、同じ空間的隣接ブロックおよび時間的隣接ブロックから同様に導出される。
図3Aおよび図3Bはそれぞれ、マージモードおよびAMVPモードに対する空間的に隣接するMV候補を示す。空間的MV候補は、ある特定のPU(示される例ではPU0)について図3Aおよび図3Bに示される隣接ブロックから導出される。以下でより詳細に説明されるように、隣接ブロックからの候補の生成は、マージモードおよびAMVPモードに対して異なる。
マージモードでは、4つまでの空間的MV候補が、左(0)、上(1)、右上(2)、左下(3)、および左上(4)という、図3Aに示される順序で導出され得る。図3Bに示されるように、AMVPモードでは、隣接ブロックは2つのグループ、すなわちブロック0および1からなる左のグループと、ブロック2、3および4からなる上のグループに分割される。各グループに対して、シグナリングされた参照インデックスによって示される参照ピクチャと同じ参照ピクチャを参照する隣接ブロック中の潜在的候補は、グループの最終候補を形成するために選択されるための最高の優先度を有する。すべての隣接ブロックが、同じ参照ピクチャを指す動きベクトルを含まないことがあり得る。したがって、そのような候補を見出すことができない場合、第1の利用可能な候補が、最終候補を形成するようにスケーリングされるので、時間的距離の差が補償され得る。
時間的動きベクトル予測子(TMVP)候補が、有効であり利用可能である場合、空間動きベクトル候補の後でMV候補リストに追加される。TMVP候補に対する動きベクトル導出のプロセスは、マージモードとAMVPモードの両方に対して同じであるが、マージモードにおけるTMVP候補の目標参照インデックスは常に0に設定される。TMVP候補導出のための主要なブロックの位置は、空間的隣接候補を生成するために使用される上と左のブロックへのバイアスを補償するために、併置されたPUの外側の右下のブロック(図4Aにおいてブロック「T」として示される)である。しかしながら、そのブロックが現在のCTBの行の外側に位置する場合、または動き情報が利用可能ではない場合、ブロックはPUの中心ブロックと置き換えられる。
図4Bに示されるように、TMVP候補の動きベクトルは、スライスレベルにおいて示される、併置されたピクチャの併置されたPUから導出される。AVCにおける時間的直接モードと同様に、TMVP候補の動きベクトルは、距離の差を補償するために実行される動きベクトルのスケーリングを有し得る。
HEVCにおける動き予測の他の態様がここで説明される。1つのそのような態様は動きベクトルのスケーリングである。動きベクトルの値は提示の時間におけるピクチャの距離に比例すると仮定される。動きベクトルは、参照ピクチャ、および動きベクトルを含むピクチャ(すなわち格納ピクチャ)という2つのピクチャを関連付ける。動きベクトルが他の動きベクトルを予測するために利用されるとき、格納ピクチャと参照ピクチャの距離は、ピクチャ順序カウント(POC)値に基づいて計算される。
予測されるべき動きベクトルに対して、その関連する格納ピクチャと参照ピクチャの両方が異なることがある。したがって、新しい距離(POCに基づく)が計算される。そして、動きベクトルは、これらの2つのPOC距離に基づいてスケーリングされる。空間的隣接候補に対して、2つの動きベクトルの格納ピクチャは同じであるが、参照ピクチャは異なる。HEVCでは、動きベクトルのスケーリングは、空間的隣接候補および時間的隣接候補のためのTMVPとAMVPの両方に適用される。
HEVCにおける動き予測の別の態様は、人工的な動きベクトル候補の生成である。動きベクトル候補リストが完全ではない場合、人工的な動きベクトル候補が生成され、すべての候補を有するようになるまでリストの最後に挿入される。マージモードでは、Bスライスのためだけに導出された合成候補と、第1のタイプが十分な人工的な候補を提供しない場合にAMVPのためだけに使用されるゼロ候補という、2つのタイプの人工的なMV候補がある。候補リストの中にすでにあり、必要な動き情報を有する候補の各ペアに対して、リスト0中のピクチャを参照する第1の候補の動きベクトルと、リスト1中のピクチャを参照する第2の候補の動きベクトルの合成によって、双方向合成動きベクトル候補が導出される。
HEVCにおける動き予測の別の態様は、候補の挿入のための剪定プロセスである。異なるブロックからの候補が偶然同じであることがあり、これは、マージモードまたはAMVPモードの候補リストの効率を下げる。剪定プロセスは、同一の候補を挿入するのを避けるために、ある候補を現在の候補リスト中の他の候補と比較する。
重複ブロック動き補償(OBMC)の全般的な概念がここで紹介される。OBMCは、より以前のビデオ規格において予期されていた。重複ブロック動き補償(OBMC)は、H.263(Video Coding for Low Bitrate Communication、document Rec. H.263、ITU-T、1995年4月)の開発において提案された。図5に示されるように、OBMCは、現在の16x16マクロブロックの現在の8x8ブロックに対して実行されることがあり、2つのつながっている隣接する8x8ブロックの動きベクトルが、現在の8x8ブロックのために使用されることがある。たとえば、現在のマクロブロックの中の第1の8x8のブロック(たとえば、図5において数字「1」により特定されるブロック)に対して、自身の動きベクトルを使用して生成される予測ブロックの他にも、上と左の隣接動きベクトルも、2つの追加の予測ブロックを生成するために適用される。このようにして、現在の8x8ブロック中の各ピクセルが3つの予測値を有し、これらの3つの予測値の加重平均が、現在の8x8ブロック中の各ピクセルの最終的な予測値として使用される。別の例として、現在のマクロブロックの中の第2の8x8のブロック(たとえば、図5において数字「2」により特定されるブロック)に対して、自身の動きベクトルを使用して生成される予測ブロックの他にも、上と右の隣接動きベクトルも、2つの追加の予測ブロックを生成するために適用され得る。このようにして、現在の8x8ブロック中の各ピクセルが3つの予測値を有し、これらの3つの予測の加重平均が、現在の8x8ブロック中の各ピクセルの最終的な予測値として使用される。
図5は、OBMCがどのようにH.263において実装されたかの例を示す。隣接ブロックがコーディングされないとき、またはイントラとしてコーディングされる(すなわち、隣接ブロックが利用可能な動きベクトルを有しない)とき、現在の8x8ブロックの動きベクトルは、隣接動きベクトルとして使用される。ここで現在のマクロブロックの第3および第4の8x8ブロック(たとえば、図5の数字「3」および「4」によりそれぞれ特定されるブロック)を参照すると、下の隣接ブロックは常に使用されない(すなわち、利用可能ではないと見なされる)。言い換えると、現在のマクロブロックに対して、現在のマクロブロックの下のマクロブロックからの動き情報は、OBMCの間に現在のマクロブロックのピクセルを再構築するために使用されない。むしろ、ブロック3については、左隣からの動き情報がOBMCのために使用されることがあり、ブロック4については、右隣からの動き情報がOBMCのために使用されることがあるが、ブロック3および4の下のブロックは、コーディングされないものと仮定され、OBMCのために使用されない。
OBMCはHEVCのために提案された。HEVCでは、OBMCはPUの境界を滑らかにするためにも提案された。HEVCにおけるOBMCの提案された方法の例が、図6Aおよび図6Bに示される。図6Aおよび図6Bにおいて、PUベースのOBMCは、第1のPU(たとえば、PU0)を表すための白色の領域と、第2のPU(たとえば、PU1)を表すための陰付きの領域とを使用して示されている。HEVCのために提案されたように、CUが2つ以上のPUを含むとき、PUの境界の近くの行または列はOBMCによって滑らかにされる。第1のPUおよび第2のPUにおいて「A」または「B」と標識されるピクセルに対して、2つの予測値が、第1のPU(PU0)および第2のPU(PU1)の動きベクトルをそれぞれ適用することによって生成される。HEVCのために提案されたように、2つの予測値の加重平均が最終予測として使用される。
HEVCでは、各PUは、動き情報の1つだけのセットを含む。しかしながら、サブPUベースの動き予測/導出が適用されるとき、PUはサブPUへと分割されることがあり、ここで各サブPUが動き情報の1つのセットを含む。PUが複数のサブPUに分けられるとき、各サブPUは別々に動き補償され得る。たとえば、サブPUプロセスは時間的動きベクトル予測に適用可能であることがあり、それは高度時間的動きベクトル予測(ATMVP:Advanced Temporal Motion Vector Prediction)と呼ばれる。
サブブロックの態様がここで論じられる。デブロッキングなどのフィルタリング後のプロセスでは、復号プロセスは、PUの構造に完全には従わないが処理されるべき最小のブロックのサイズに従うような方法で適用され得る。そのような最小の処理ブロックはサブブロックと呼ばれる。サブブロックは、形状が正方形または非正方形であり得る。サブブロックは通常PUに属するので、サブブロックのサイズは最小のPUのサイズ以下である。
サブPUとサブブロックとの間の関係を示すために、例が図7A~図7Cに示されている。図からわかるように、サブブロックのサイズは、サブPUのサイズより小さいことがあり(図7A)、それと同じであることがあり(図7B)、またはそれより大きいことがある(図7C)。
これまでに提案された技法と現在の技法にはいくつかの制約があり得る。一例として、HEVCのための既存のOBMC方法は、PU、マクロブロック、またはサブマクロブロックの境界に対して主に実行される。別の例として、OBMCにおいて現在のPUを予測するために他のCUの動き情報をどのように使用するかが明確ではない。別の例として、現在のPUがサブPUを含むとき、PUベースのOBMC方法は効率的に機能しないことがある。上で特定された問題および制約に潜在的に対処するために、本開示はいくつかの技法を紹介する。本開示の技法は個々に適用されることがあり、または代替的に、それらの任意の組合せが適用されることがある。本明細書では、参照情報は本開示における動き情報の一部と見なされ得る。
以下で説明される技法は、重複ブロック動き補償(OBMC)のために使用される。いくつかの例では、本明細書において説明されるように、OBMCは、現在のブロックに隣接する1つまたは複数のブロックからの動き情報の使用を伴い、加重平均を実行して現在のブロックの予測ブロックを生成する、任意のプロセスを指し得る。そのような例では、OBMCは、境界、ブロックの一部分、ブロックのスライス、またはブロック全体に対して実行され得る。他の例では、本明細書において説明されるように、OBMCは、(i)現在のブロックに隣接する1つまたは複数のブロックからの動き情報に基づく予測ブロック、および(ii)現在のブロックの動き情報に基づく予測ブロックの加重平均の使用を伴う、任意のプロセスを指し得る。そのような例では、OBMCは、境界、ブロックの一部分、ブロックのスライス、またはブロック全体に対して実行され得る。他の例では、本明細書において説明されるように、OBMCは、現在のブロックおよび1つまたは複数の隣接ブロックから複数の動きベクトルを生成することと、それらを現在のブロックのために合成する(たとえば、平均する)こととを指し得る。
本開示の第1の技法は、サブブロックベースのOBMCである。この第1の技法のもとでは、ビデオエンコーダ20および/またはビデオデコーダ30は、PUまたはCU(たとえば、現在のPUまたはCU)内の各サブブロックに対してOBMCを実行するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、PUの境界を滑らかにするためにOBMCだけを実行するように構成されるのではなく、PUまたはCU内の各サブブロックに対してOBMCを実行するように構成され得る。上で説明されたように、いくつかの例では、サブブロックはPUのサブブロックを指すことがあり、そのような例では、サブブロックのサイズは最小のPUのサイズ以下であり得る。他の例では、サブブロックは、PUのサブブロックとは異なる何かを指し得る。たとえば、サブブロックは、CUのサブブロックを指し得る。サブブロックのサイズは、以下でより詳細に論じられる。第1の技法によれば、およびいくつかの例に従うと、ビデオエンコーダ20および/またはビデオデコーダ30は、符号化および/または復号されている現在のサブブロックに隣接するサブブロックの動き情報を使用することによって、OBMCを実行するように構成され得る。
この第1の技法および他の例によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに隣接する1つまたは複数のサブブロックが、復号されていないCUに属すると決定するように構成され得る。いくつかの例では、「復号されていない」CUは、現在のサブブロックがビデオエンコーダ20および/またはビデオデコーダ30によって復号されているときにビデオエンコーダ20および/またはビデオデコーダ30によってまだ復号されていないCUを指し得る。そのような例では、ビデオデコーダ30によってまだ復号されていないビデオデコーダ30によって受信されるCUは、「復号されていない」CUと呼ばれ得る。たとえば、ビデオデコーダ30は、ある走査順序に従って複数のブロックを復号するように構成されることがあり、復号されていないCUは、復号されていないCUが現在のサブブロックの後の何らかの時間に復号されるような走査順序で配置されることがある。1つまたは複数の隣接サブブロックが復号されていないCUに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないCUに属する1つまたは複数の隣接サブブロックがサブブロックベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接サブブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブブロックのためのOBMCを実行するように構成され得る。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに隣接する1つまたは複数のサブブロックが、復号されていないLCUに属すると決定するように構成され得る。いくつかの例では、「復号されていない」LCUは、現在のサブブロックがビデオエンコーダ20および/またはビデオデコーダ30によって復号されているときにビデオエンコーダ20および/またはビデオデコーダ30によってまだ復号されていないLCUを指し得る。そのような例では、ビデオデコーダ30によってまだ復号されていないビデオデコーダ30によって受信されるLCUは、「復号されていない」LCUと呼ばれ得る。たとえば、ビデオデコーダ30は、ある走査順序に従って複数のブロックを復号するように構成されることがあり、復号されていないLCUは、復号されていないLCUが現在のサブブロックの後の何らかの時間に復号されるような走査順序で配置されることがある。1つまたは複数の隣接サブブロックが復号されていないLCUに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないLCUに属する1つまたは複数の隣接サブブロックがサブブロックベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接サブブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブブロックのためのOBMCを実行するように構成され得る。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに隣接する1つまたは複数のサブブロックが、復号されていないPUに属すると決定するように構成され得る。いくつかの例では、「復号されていない」PUは、現在のサブブロックがビデオエンコーダ20および/またはビデオデコーダ30によって復号されているときにビデオエンコーダ20および/またはビデオデコーダ30によってまだ復号されていないPUを指し得る。そのような例では、ビデオデコーダ30によってまだ復号されていないビデオデコーダ30によって受信されるPUは、「復号されていない」PUと呼ばれ得る。たとえば、ビデオデコーダ30は、ある走査順序に従って複数のブロックを復号するように構成されることがあり、復号されていないPUは、復号されていないPUが現在のサブブロックの後の何らかの時間に復号されるような走査順序で配置されることがある。1つまたは複数の隣接サブブロックが復号されていないPUに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないPUに属する1つまたは複数の隣接サブブロックがサブブロックベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接サブブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブブロックのためのOBMCを実行するように構成され得る。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに隣接する1つまたは複数のサブブロックが、復号されていないサブブロックに属すると決定するように構成され得る。いくつかの例では、「復号されていない」サブブロックは、現在のサブブロックがビデオエンコーダ20および/またはビデオデコーダ30によって復号されているときにビデオエンコーダ20および/またはビデオデコーダ30によってまだ復号されていないサブブロックを指し得る。そのような例では、ビデオデコーダ30によってまだ復号されていないビデオデコーダ30によって受信されるサブブロックは、「復号されていない」サブブロックと呼ばれ得る。たとえば、ビデオデコーダ30は、ある走査順序に従って複数のブロックを復号するように構成されることがあり、復号されていないサブブロックは、復号されていないサブブロックが現在のサブブロックの後の何らかの時間に復号されるような走査順序で配置されることがある。1つまたは複数の隣接サブブロックが復号されていないサブブロックに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないサブブロックに属する1つまたは複数の隣接サブブロックがサブブロックベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接サブブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブブロックのためのOBMCを実行するように構成され得る。
この第1の技法によれば、サブブロックのサイズはCUの最小のPUサイズに等しいことがある。他の例では、サブブロックは最小のPUサイズより小さいサイズを有することがある。たとえば、NxNが最小の動きブロックのサイズを表すことがあり、サブブロックのサイズ(たとえば、サブPUのサイズ)がNxNに等しいことがあり、ここでNは正の整数である。そのような例では、最小のPUサイズが8x4と4x8のいずれかである場合、サブブロックのサイズは4x4に等しいことがある。別の例では、NxMは最小の動きブロックのサイズを表すことがあり、サブブロックのサイズ(たとえば、サブPUのサイズ)はNxMに設定されることがあり、ここでMおよびNは正の整数であり、互いに等しいことがあり、または等しくないことがある。そのような例では、最小のPUサイズが8x8である場合、サブブロックのサイズは、4x4、8x4、または4x8に等しいことがある。
別の例では、サブブロックのサイズは、任意の事前に定められた値であることもある。事前に定められたサブブロックのサイズは、たとえば、最小のPUサイズより大きいことがある。別の例では、サブブロックのサイズは、パラメータセットにおいてシグナリングされることがある。さらに別の例では、サブブロックのサイズは、現在のPUまたはCU(すなわち、現在のサブブロックが属する現在のPUまたはCU)のサイズに依存し得る。さらに別の例では、サブブロックのサイズは、ビデオエンコーダ20および/またはビデオデコーダ30がOBMCを実行するように構成されるブロックのサイズに依存し得る。さらに別の例では、サブブロックのサイズは、現在のPUまたはCU(すなわち、現在のサブブロックが属する現在のPUまたはCU)のサイズに、ならびに、1つまたは複数の隣接PUまたはCU(すなわち、現在のサブブロックが属するPUまたはCUに隣接する1つまたは複数のPUまたはCU)のサイズに依存し得る。
本開示の第2の技法は、サブPUベースのOBMCである。この第2の技法のもとでは、ビデオエンコーダ20および/またはビデオデコーダ30は、サブPUとともにコーディングされるPUまたはCU(たとえば、現在のPUまたはCU)内の各サブPUに対してOBMCを実行するように構成され得る。各サブPUは、たとえば動きベクトルおよび参照ピクチャリストインデックスを含む、動き情報の固有のセットを含み得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PUまたはCU内の1つまたは複数の隣接サブPUの動き情報を使用して、現在のPUまたはCU内の1つまたは複数のサブPUのためのOBMCを実行するように構成され得る。他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のPUまたはCU内の1つまたは複数の隣接サブPUの動き情報とともに、現在のPUまたはCUの外側の1つまたは複数の隣接ブロックの動き情報を使用して、現在のPUまたはCU内の1つまたは複数のサブPUのためのOBMCを実行するように構成され得る。
この第2の技法およびいくつかの例によれば、各サブPUに対して、その隣接ブロックは、同じPUまたはCU(たとえば、現在のPUまたはCU)内の隣接サブPUおよび現在のPUまたはCU(すなわち、現在のPUまたは現在のCU)の外側の隣接ブロックであり得る。他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接ブロックが現在のサブPUと同じサイズを有する場合、現在のPUまたはCUの外側の(すなわち、現在のPUの外側または現在のCUの外側の)隣接ブロックを使用して、現在のPUまたはCUの現在のサブPUに対してOBMCを実行するように構成され得る。そのような例では、現在のPUまたはCUに対する隣接ブロックが動き情報の2つ以上のセットを含む場合であっても、ビデオエンコーダ20および/またはビデオデコーダ30は、その隣接ブロックのための動き情報の1つだけのセットを利用するように構成され得る。また、そのような例では、現在のPUまたはCUの外側の隣接ブロックが現在のサブPUのサイズとは異なるサイズを有する場合、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブPUのサイズとは異なるサイズを有すると決定された1つまたは複数の隣接ブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブPUのためのOBMCを実行するように構成され得る。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接ブロックが現在のサブPUのサイズより小さい場合、現在のPUまたはCUの外側の隣接ブロックを使用して、現在のPUまたはCUの現在のサブPUに対してOBMCを実行するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブPUのための1つまたは複数のサブブロックを使用することによって、現在のサブPUのためのOBMCを実行するように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PUの任意の境界のサブPUをサブブロックへと分割するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、各サブブロックのためのOBMCを実行するように構成され得る。
他の例では、現在のPUまたはCUの外側のいずれのピクセルにも隣り合わないサブPUは、隣接サブPUのみを使用して予測され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブPUが現在のPUまたはCUの外側のいずれのピクセルにも隣り合わないと決定するように構成されることがあり、隣接サブPUのみを使用して現在のサブPUのためのOBMCを実行するように構成されることがある。
また、本開示の第2の技法によれば、およびいくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブPUに対する1つまたは複数の隣接サブブロックが、復号されていないCUに属すると決定するように構成され得る。1つまたは複数の隣接ブロックが復号されていないCUに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないCUに属する1つまたは複数の隣接ブロックがサブPUベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接ブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブPUのためのOBMCを実行するように構成され得る。
また、本開示の第2の技法によれば、およびいくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブPUに対する1つまたは複数の隣接サブブロックが、復号されていないLCUに属すると決定するように構成され得る。1つまたは複数の隣接ブロックが復号されていないLCUに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないLCUに属する1つまたは複数の隣接ブロックがサブPUベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接ブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブPUのためのOBMCを実行するように構成され得る。
また、本開示の第2の技法によれば、およびいくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブPUに対する1つまたは複数の隣接サブブロックが、復号されていないPU(たとえば、符号化されたPU)に属すると決定するように構成され得る。1つまたは複数の隣接ブロックが復号されていないPUに属すると決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、復号されていないPUに属する1つまたは複数の隣接ブロックがサブPUベースのOBMCのために利用不可能であると決定するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、利用不可能であると決定された1つまたは複数の隣接ブロックの動き情報を使用しない(たとえば、除外する)ことによって、現在のサブPUのためのOBMCを実行するように構成され得る。
本開示の第3の技法は、CU境界ベースのOBMCである。この第3の技法のもとでは、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数のCU境界のためのOBMCを実行するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数のPU境界のためのOBMCも実行するように構成され得る。
現在のCUの上と左の境界を参照すると、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のCUに属しないが現在のCUの上および/または左の境界(たとえば、端)と接する1つまたは複数の隣接ブロックの動き情報を使用して、第1の技法に関して本明細書において説明されたのと同様の方法で追加の予測子を生成するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のCUの左の隣接ブロック(たとえば、隣接CU)および/または現在のCUの上の隣接ブロック(たとえば、隣接CU)からのCU境界(たとえば、現在のCUの上および/または左の境界)上のブロックの動き情報のすべてまたは一部を使用することによって、CU境界(たとえば、現在のCU境界)のためのOBMCを実行するように構成され得る。
そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、次のようにCU境界のためのOBMCを実行するように構成され得る。上のCU境界に位置する現在のCUの各々の最小のブロックに対して、ビデオエンコーダ20および/またはビデオデコーダ30は、上のCU境界のOBMCのために、各々の最小のブロックの上の隣接ブロックの動き情報を使用するように構成されることがあり、追加の予測子が、CUを用いて現在のブロックの最終予測信号を形成するために使用される。左のCU境界に位置する現在のCUの各々の最小のブロックに対して、ビデオエンコーダ20および/またはビデオデコーダ30は、左のCU境界のOBMCのために、各々の最小のブロックの左の隣接ブロックの動き情報を使用するように構成されることがあり、追加の予測子が、現在のブロックの最終予測信号を形成するために使用される。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、左のCU境界および/または上のCU境界だけに対してOBMCを実行するように構成され得る。他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、左のCU境界、上のCU境界、右のCU境界、および/または下のCU境界に対してOBMCを実行するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、左と上のCU境界に関して上で説明されたのと同様の方式で、右のCU境界および/または下のCU境界に対してOBMCを実行するように構成され得る。たとえば、右のCU境界に位置する現在のCUの各々の最小のブロックに対して、ビデオエンコーダ20および/またはビデオデコーダ30は、右のCU境界のOBMCのために、各々の最小のブロックの上の隣接ブロックの動き情報を使用するように構成されることがあり、追加の予測子が、CUを用いて現在のブロックの最終予測信号を形成するために使用される。下のCU境界に位置する現在のCUの各々の最小のブロックに対して、ビデオエンコーダ20および/またはビデオデコーダ30は、下のCU境界のOBMCのために、各々の最小のブロックの下の隣接ブロックの動き情報を使用するように構成されることがあり、追加の予測子が、CUを用いて現在のブロックの最終予測信号を形成するために使用される。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接CUからの動き情報をサブサンプリングまたは圧縮するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接CUのサブサンプリングまたは圧縮された動き情報を使用して、現在のCUの1つまたは複数の追加の予測子を生成するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、最小のブロックサイズの代わりにサブブロックを基礎として隣接CUの動き情報をサブサンプリングまたは圧縮するように構成されることがあり、これは、隣接CUが個々のMVを伴う複数のサブブロック(たとえば、PU)を有する場合、ビデオエンコーダ20および/またはビデオデコーダ30がPUの1つのグループ(たとえば、セット)のために単一のMVを、およびPUの別のグループのために別の単一のMVを使用するように構成され得ることを意味する。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、本開示の第3の技法および/または本開示の別の技法に関するOBMCを無効にするように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のCUのサイズがサブブロックのサイズより小さい場合(たとえば、小さいとき)、現在のCU内のPUのためのOBMCを無効にするように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のCUのサイズを決定し、現在のCUの決定されたサイズをサブブロックのサイズと比較して、現在のCUのサイズがサブブロックのサイズより小さいかどうかを決定するように構成され得る。現在のCUのサイズがサブブロックのサイズより小さいと決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のCU内のPUのためのOBMCを無効にするように構成され得る。
別の例として、ビデオエンコーダ20および/またはビデオデコーダ30は、PU境界がサブブロック境界ではない(たとえば、いずれのサブブロックも含まない境界である)場合(たとえば、そうであるとき)、PU境界のためのOBMCを無効にするように構成され得る。この例では、サブブロックはPUより大きく、PU境界はサブブロックの内部に位置することがある。PU境界は、サブブロック境界であることも、そうではないこともある。したがって、ビデオエンコーダ20および/またはビデオデコーダ30は、符号化および/または復号の複雑さを下げるために、PU境界に沿ったOBMCを無効にする(たとえば、スキップする)ように構成され得る。他の例として、ビデオエンコーダ20および/またはビデオデコーダ30は、右のCU境界および/または下のCU境界のためのOBMCを無効にするように構成され得る。
本開示の第4の技法は、上の3つの説明された第1の、第2の、および第3のOBMC技法と共通の態様を含む。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接サブブロック、隣接サブPU、または隣接ブロックの動きベクトルを使用して、現在のサブブロック、現在のサブPU、または現在のブロックの追加の予測子をそれぞれ生成するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロック、現在のサブPU、または現在のブロックの最終予測信号をそれぞれ形成するために、追加の予測子を使用するように構成され得る。
この第4の技法および他の例によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロック、現在のサブPU、または現在のブロックから最大で事前に定められた数の範囲にある近隣をOBMCのために使用するように構成され得る。そのような例では、この事前に定められた数は、8または8とは異なる数であり得る。一例によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、4つのつながっている隣接ブロック(たとえば、上、下、左、および右の隣接サブブロック)の動き情報(たとえば、動きベクトル)をOBMCのために使用するように構成され得る。本明細書では、「OBMCのために」に言及することは、「OBMCを実行するために」に言及することであり得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接サブブロック、隣接サブPU、または隣接ブロックが動き情報の複数のセットを含む場合(たとえば、含むとき)、動き情報の1つだけのセットを選択するように構成され得る。たとえば、サブブロックのサイズが8x8であり、動き情報が4x4を基礎として記憶される場合、ビデオエンコーダ20および/またはビデオデコーダ30は、この特定の例では、8x8のサブブロックに対応する動き情報の1つのセットを選択するだけであるように構成され得る。
ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数の技法に従って動き情報の単一のセットを選択するように構成され得る。一例では、ビデオエンコーダ20および/またはビデオデコーダ30は、サブブロック、サブPU、またはブロックの中心のピクセルに基づいて、動き情報のセットを選択するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、サブブロック、サブPU、またはブロックの中心のピクセルを含む、サブブロック、サブPU、またはブロックの動き情報のセットを選択するように構成され得る。したがって、PUのために動き情報の複数のセットがある場合、中心のピクセルを含むブロックの動き情報の単一のセットが、現在のブロックのためのOBMCに使用され得る。別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロック、サブPU、またはブロックと隣り合う最小の動きブロックに動き情報のどのセットが属するかに基づいて、動き情報のセットを選択するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロック、サブPU、またはブロックと隣り合う最小の動きブロックに属する動き情報のセットを選択するように構成され得る。複数のそのような動きブロックがある場合、ビデオエンコーダ20および/またはビデオデコーダ30は、たとえばラスター走査順序において複数のブロック中の最も早い(または最初に復号される)動きブロックを選択するように構成され得る。
別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接サブブロックのすべての動き情報を、現在のPU、CU、またはブロックの動き情報と比較するように構成され得る。この比較に基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のPU、CU、またはブロックの動き情報と最も類似する動き情報を選択するように構成され得る。この比較に基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のPU、CU、またはブロックの動き情報と最も類似しない動き情報を選択するように構成され得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、任意のつながっている隣接するサブブロック、サブPU、またはブロックのサブセットの動き情報を、OBMCのために使用するように構成され得る。例では、ビデオエンコーダ20および/またはビデオデコーダ30は、OBMCを実行するために、現在のブロックの左隣と右隣のみを使用するように構成され得る。別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、OBMCを実行するために、現在のブロックの上隣と下隣のみを使用するように構成され得る。別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、OBMCを実行するために、現在のブロックの上隣または下隣の一方、および左隣または右隣の一方だけを使用するように構成され得る。別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、OBMCを実行するために、現在のブロックの4つのつながっている隣のうちの1つだけを使用するように構成され得る。さらに別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のPUまたはCU内でのサブブロックの相対的な配置に基づいて、隣接ブロックのサブセットを選択するように構成され得る。
ビデオエンコーダ20および/またはビデオデコーダ30は、本明細書において説明される1つまたは複数の技法に従って、隣接するサブブロック、サブPU、またはブロックが利用不可能であると決定するように構成され得る。たとえば、イントラブロックが利用不可能であるものとして見なされることがあり、現在のスライスまたはタイルの外側の(または部分的に外側の)ブロックが利用不可能であるものとして見なされることがあり、波面が使用されるときに利用不可能であると見なされるブロックは利用不可能であると見なされることがあり、まだ復号されていないブロック(たとえば、少なくともそのブロックの動きベクトルがまだ復号されていない)は利用不可能であると見なされることがあり、かつ/または、隣接するブロックまたはサブブロックは、現在のCTUに属していないときには利用不可能であると見なされることがある。
本開示の第5の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、各々の利用可能な隣接サブブロックの動き情報(たとえば、動きベクトル)を使用して現在のサブブロックのためのOBMCを実行して、予測ブロックを生成するように構成され得る。いくつかの例では、予測ブロックは、現在のサブブロックに隣接する隣接ブロックに対するインデックス/表記(たとえば、上、下、左、または右に等しい)を示すNとともにPNによって表記され得る。ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数の隣接ブロックの予測ブロックを使用して、PCによって表記され得る現在のサブブロックの予測ブロックを更新するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のブロックの最終予測ブロック(すなわち、現在のサブブロックの更新された予測ブロック)を生成するように構成されることがあり、この最終予測ブロックは、(i)現在のブロックに隣接する1つまたは複数のブロックからの動き情報に基づく予測ブロック、および(ii)現在のサブブロックの動き情報に基づく予測ブロックの加重平均であり得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のブロックに対する1つまたは複数の隣接サブブロックが2つ以上のサブPUを含むかどうか(たとえば、いつ含むか)を決定するように構成されることがあり、この含むことは、動き情報の複数のセットを示すものであり得る。そのような例では、現在のサブブロックに対する1つまたは複数の隣接サブブロックが2つ以上のサブPUを含むと決定したことに基づいて、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに隣接するようなサブPUの1つまたは複数の動き情報を使用して、現在のサブブロックに対してOBMCを実行するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに隣接しないサブPUからの動き情報を使用しないように、または別様に除外するように構成され得る。他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接ブロックのいずれかのサブPUが現在のサブブロックに隣接するかどうかにかかわらず、現在のサブブロックに対する隣接ブロックの任意のサブPUの動き情報を使用して、現在のサブブロックに対してOBMCを実行するように構成され得る。
本開示の第6の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、正方形または非正方形(たとえば、長方形)のサイズの任意のブロック(たとえば、PUまたはCU)に対してOBMCを実行するように構成され得る。他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、特定のタイプまたはサイズ(たとえば、事前に定められたタイプまたはサイズ、HEVCにおいてマージモードを用いてコーディングされるPU、HEVCとは異なるコーディング規格においてマージモードに類似するモードを用いてコーディングされるPU、または32x32より大きなPU)のブロック(たとえば、CUまたはPU)に対してOBMCを実行するように構成され得る。
本開示の第7の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、各々の利用可能な隣接するサブブロック、サブPU、またはブロックの動き情報(たとえば、動きベクトル)を使用して現在のサブブロック、サブPU、またはブロックのためのOBMCを実行して、予測ブロックを生成するように構成され得る。いくつかの例では、予測ブロックは、現在のサブブロック、サブPU、またはブロックに隣接する隣接ブロックに対するインデックス/表記(たとえば、上、下、左、または右に等しい)を示すNとともにPNによって表記され得る。ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数の隣接ブロックの予測ブロックを使用して、PCによって表記され得る現在のブロック(たとえば、サブブロック、サブPU、またはブロック)の予測ブロックを更新するように構成され得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、加重平均を実行してPCを更新するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、(i)隣接ブロックの動き情報(たとえば、動きベクトル)からの予測ブロックPNの1つまたは複数(K個)の行または列、および(ii)現在の予測ブロックPCの対応する行または列の加重平均を実行して、PCを更新するように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、異なる位置(たとえば、異なる行または列)に異なる重みを割り当てるように構成され得る。いくつかの例では、Kは、1、2、3、または4という値に等しく設定され得る。1つまたは複数のK個の行または列は、Nによって示されるような隣接ブロックに最も近い行または列である。たとえば、隣接ブロックが現在のブロックの左の隣接ブロックまたは右の隣接ブロックである場合、ビデオエンコーダ20および/またはビデオデコーダ30は、(i)隣接ブロックの動き情報(たとえば、動きベクトル)からの予測ブロックPNの1つまたは複数のK個の列、および(ii)現在の予測ブロックPCの対応する列の加重平均を実行して、PCを更新するように構成され得る。別の例として、隣接ブロックが現在のブロックの上の隣接ブロックまたは下の隣接ブロックである場合、ビデオエンコーダ20および/またはビデオデコーダ30は、(i)隣接ブロックの動き情報(たとえば、動きベクトル)から予測ブロックPNの1つまたは複数K個の行、および(ii)現在の予測ブロックPCの対応する行の加重平均を実行して、PCを更新するように構成され得る。
下のTable 1(表1)を参照すると、xおよびyは、現在のサブブロック、サブPU、またはブロックの左上のピクセルに対する相対的な垂直方向および水平方向の座標を表記し得る。PC(x,y)およびPN(x,y)の重みは、w1(x,y)およびw2(x,y)とそれぞれ表記される。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、更新されたPC(x,y)がw1(x,y)*PC(x,y)+w2(x,y)*PN(x,y)に等しくなるように、加重平均を実行してPCを更新するように構成され得る。現在のサブブロック、サブPU、またはブロックの幅および高さは、それぞれWおよびHによって表記され得る。たとえば、W-1は、現在のサブブロック、サブPU、またはブロックの最後の列(たとえば、一番右の列)を指し得る。別の例として、H-1は、現在のサブブロック、サブPU、またはブロックの最後の行(たとえば、一番下の行)を指し得る。別の例として、H-2は、現在のサブブロック、サブPU、またはブロックの最後から2番目の行(たとえば、最後の行の上にある最初の行として説明され得る、下から2番目の行)を指し得る。Nの値は、本明細書において説明される予測ブロックPNのNを指し得る。重みw1およびw2の一例は、下のTable 1(表1)において規定される。
いくつかの例では、Nが上に等しいとき、ビデオエンコーダ20および/またはビデオデコーダ30は、PCの上の4行がPNによって更新されるように加重平均を実行するように構成され得る。同様に、Nが下に等しいとき、ビデオエンコーダ20および/またはビデオデコーダ30は、PCの下の4行がPNによって更新されるように加重平均を実行するように構成され得る。別の例として、Nが左に等しいとき、ビデオエンコーダ20および/またはビデオデコーダ30は、PCの左の4列がPNによって更新されるように加重平均を実行するように構成され得る。同様に、Nが右に等しいとき、ビデオエンコーダ20および/またはビデオデコーダ30は、PCの右の4列がPNによって更新されるように加重平均を実行するように構成され得る。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PNによってPCの1つの行または列を更新するように構成され得る。そのような例に従った位置および重みは、上のTable 1(表1)においては[括弧付き]にされている。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PNによってPCの2つの行または列を更新するように構成され得る。そのような例による2つの行または列の位置および重みは、上のTable 1(表1)においては[括弧付き]にされており、一重下線が引かれている(たとえば、各N値に対する最初の/上の2つの行)。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PNによってPCの3つの行または列を更新するように構成され得る。そのような例による3つの行または列の位置および重みは、上のTable 1(表1)においては[括弧付き]にされており、一重下線が引かれており、二重下線が引かれている(たとえば、各N値に対する最初の/上の3つの行)。
他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロック、サブPU、またはブロックのサイズに基づいて、行の数(たとえば、1つまたは複数の行)または列の数(たとえば、1つまたは複数の列)を選択するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロック、サブPU、またはブロックが第1のサイズを有する場合により多くの行または列を選択し、現在のサブブロック、サブPU、またはブロックが第2のサイズを有する場合により少ない行または列を選択するように構成され得る。たとえば、現在のPUサイズが8x4または4x8に等しいとき、かつ/または現在のPUがサブPUモードを用いてコーディングされるとき(たとえば、現在のPUが1つまたは複数のサブPUを含むことを意味する)、ビデオエンコーダ20および/またはビデオデコーダ30は、PNによってPCの2つの行または列だけを更新するように構成され得る。別の例として、現在のPUサイズが8x4または4x8より大きいとき、ビデオエンコーダ20および/またはビデオデコーダ30は、PNによってPCの4つの行または列を更新するように構成され得る。
さらに他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PNの対応するピクセルによってPCのそれぞれのピクセルを更新するように構成され得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数の加算演算またはシフト演算を使用することによって、任意の加重平均において使用される重みを実装するように構成され得る。そのような例または他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、w1(x,y)+w2(x,y)が1に等しくなるように、重み(たとえば、Table 1(表1)に示される重みまたはTable 1(表1)に示される重みとは異なる重み)を実装するように構成され得る。
いくつかの例では、PNによって更新されるPCの行または列の数は、現在の予測ブロックのサイズに依存し得る(たとえば、基づき得る)。そのような例では、現在の予測ブロックのサイズは、サブブロック、サブPU、PU、またはCUのサイズに対応し得る。いくつかの例では、PNによって更新されるPCの行の数はWに依存し得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、Hがより大きい(たとえば、第1の値を有する)ときにはより多くの行を更新するように構成され得る。別の例として、ビデオエンコーダ20および/またはビデオデコーダ30は、Hがより小さい(たとえば、第1の値より小さい第2の値を有する)ときにはより少ない行を更新するように構成され得る。別の例として、ビデオエンコーダ20および/またはビデオデコーダ30は、Wがより大きい(たとえば、第1の値を有する)ときにはより多くの列を更新するように構成され得る。別の例として、ビデオエンコーダ20および/またはビデオデコーダ30は、Wがより小さい(たとえば、第1の値より小さい第2の値を有する)ときにはより少ない列を更新するように構成され得る。
本開示の第8の技法によれば、複数の近隣が各々PNと表記される複数の予測子を提供するとき、予測子PNと現在の予測子PCの合成が、順番に1つずつ行われ得る。ここで、予測子は、隣接ブロックの動き情報を使用してインター予測によって決定されるピクセル値のブロックからなり得る、予測ブロックを意味し得る。たとえば、各合成の後で、現在の予測子PCは、合成前の現在の予測子のビット深度と同じビット深度に更新され、維持されることがあり、このビット深度は、各色成分の内部処理ビット深度であり得る。各合成の間、各ピクセルの加重プロセスは、加重プロセスが(a1(x,y)*PC(x,y)+a2(x,y)*PN(x,y)+r)/Sへと変更されるように丸め値を含むことがあり、ここで、a1/Sおよびa2/Sはそれぞれw1およびw2に等しい。いくつかの例では、rは0またはS/2に設定され得る。この例では、a1はw1の量子化された値であり、a2はw2の量子化された値であり、Sは正規化された係数である。
いくつかの例では、4つの予測子が利用可能になる順序は、上、左、下、右であり得る。他の例では、4つの予測子が利用可能になる順序は、左、上、下、右であり得る。他の例では、4つの予測子が利用可能になる順序は、上の2つの例とは異なる任意の順序であり得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、隣接ブロックが動き情報を含まない場合(たとえば、含まないとき)、それはPNが利用不可能であることを示し得るので、合成プロセスをスキップするように構成され得る。他の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、すべての予測子(たとえば、すべてのPN)を収集して、すべての予測子を使用して共同の加重予測プロセスを実行するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数のPNが利用不可能であると決定するように構成されることがあり、利用不可能であると決定された1つまたは複数のPNをPCに等しく設定するように構成されることがある。
いくつかの例では、各合成の間(たとえば、予測ブロックPNの各合成のために加重平均プロセスを実行する間)、ビデオエンコーダ20および/またはビデオデコーダ30は、ビット深度の向上とともに現在の予測子PCを更新するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、次の合成が処理される前にスケーリング解除動作を実行することなく、現在の予測子PCを更新するように構成され得る。ビデオエンコーダ20および/またはビデオデコーダ30は、すべての合成が処理された後でスケーリング解除動作を実行するように構成され得る。スケーリング解除は、上に記載された正規化係数Sによる除算を指し、これは、加重された合成値を各入力予測と同じレベルにし得る。すべての合成が処理された後でスケーリング解除することによって、ビデオデコーダ30は、合成を順番に処理して共同の加重予測プロセスを使用することによって、同じ最終予測結果を得るように構成され得る。そのような設計は、複数の境界のOBMCが同じ予測ブロックに適用されるとき、実装において柔軟性をもたらし得る。
本開示の第9の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、CU、PU、または任意の他のブロックレベルにおけるOBMCを適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。たとえば、OBMCが特定のブロックレベルに対して有効であるとき、ビデオエンコーダ20および/またはビデオデコーダ30は、その特定のブロックレベルについて本明細書で説明される1つまたは複数の技法を使用してOBMCを実行するように構成され得る。別の例として、OBMCが特定のブロックレベルに対して無効であるとき、ビデオエンコーダ20および/またはビデオデコーダ30は、その特定のブロックレベルについて本明細書で説明される1つまたは複数の技法を使用してOBMCを実行しないように構成され得る。
いくつかの例では、ビデオエンコーダ20は、OBMCフラグをシグナリングすることによって、CU、PU、または任意の他のブロックレベルにおけるOBMCを適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。いくつかの例では、OBMCが特定のブロックに対して有効であるか無効であるかを示す値を有するOBMCフラグなどのOBMCシンタックス要素を、ビデオエンコーダ20はシグナリングするように構成されることがあり、ビデオデコーダ30は受信するように構成されることがある。たとえば、ビデオエンコーダ20は、各々のインターコーディングされたCU、PU、またはブロックのためのOBMCフラグをシグナリングするように構成され得る。いくつかの例では、OBMCフラグは、バイナリであることがあり、2つの値のうちの1つを有することがある。OBMCフラグの第1の値は、OBMCが有効であることを示すことがあり、OBMCフラグの第2の値は、OBMCが無効であることを示すことがある。たとえば、OBMCフラグが真である(たとえば、第1の値に対応する値を有する)とき、OBMCは現在のCU、PU、またはブロックに対して適用される(たとえば、有効である)。別の例として、OBMCフラグが偽である(たとえば、第2の値に対応する値を有する)とき、OBMCは現在のCU、PU、またはブロックに対して適用されない(たとえば、無効である)。
同様に、ビデオデコーダ30は、OBMCフラグを受信し、OBMCフラグの値を決定するように構成され得る。たとえば、ビデオデコーダ30は、ビデオエンコーダ20によって生成されるビットストリームにおいて、ビデオエンコーダ20からOBMCフラグを受信するように構成され得る。いくつかの例では、OBMCフラグに対応する値が、復号されているビデオデータのブロック(たとえば、CU、PU、または他のブロック)のためのOBMCが有効であるか無効であるかを示す。そのような例では、ビデオデコーダ30は、OBMCが特定のブロックに対して有効であるか無効であるかを示す値を有するOBMCフラグを受信するように構成され得る。たとえば、ビデオデコーダ30は、各々のインターコーディングされたCU、PU、またはブロックのためのOBMCフラグを受信するように構成され得る。OBMCフラグの第1の値は、OBMCが有効であることを示すことがあり、OBMCフラグの第2の値は、OBMCが無効であることを示すことがある。たとえば、OBMCフラグが真である(たとえば、第1の値に対応する値を有する)とき、ビデオデコーダ30は、OBMCが現在のCU、PU、またはブロックに対して適用される(たとえば、有効である)と決定するように構成され得る。別の例として、OBMCフラグが偽である(たとえば、第2の値に対応する値を有する)とき、ビデオデコーダ30は、OBMCが現在のCU、PU、またはブロックに対して適用されない(たとえば、無効である)と決定するように構成され得る。
いくつかの例では、ビデオエンコーダ20は、CU、PU、もしくはブロックのために使用される区分タイプ、CU、PU、もしくはブロックのために使用される予測モード(たとえば、マージモードまたはAMVPモード)、または、CU、PU、もしくはブロックのサイズに基づいて、CU、PU、またはブロックのためだけのOBMCフラグをシグナリングするように構成され得る。そのような例では、ビデオエンコーダ20は、CU、PU、またはブロックに対応する区分タイプ、予測モード、および/またはサイズを決定し、CU、PU、もしくはブロックに対応する区分タイプ、予測モード、および/またはサイズの1つまたは複数の決定に基づいて、OBMCフラグをシグナリングするように構成され得る。
一例では、ビデオエンコーダ20は、CU、PU、またはブロックが2Nx2Nのマージモードを用いてコーディングされず、CU、PU、またはブロックのサイズが16x16以下である場合にのみ、CU、PU、またはブロックのためのOBMCフラグをシグナリングするように構成され得る。そのような例では、ビデオエンコーダ20は、2Nx2NのマージモードおよびCU、PU、またはブロックのサイズを用いてCU、PU、またはブロックがコーディングされるかどうかを決定し、この決定に基づいてOBMCフラグをシグナリングするように構成され得る。
いくつかの例では、ビデオエンコーダ20は、CU、PU、またはブロックのためのOBMCフラグをシグナリングしないように構成され得る。そのような例では、ビデオデコーダ30は、他のシグナリングされた情報に基づいて(たとえば、複数の例を含む本開示の単なる一例として次の4つの段落において説明されるように)、OBMCフラグに対応する値を暗黙的に導出するように構成され得る。たとえば、ビデオデコーダ30は、CU、PU、またはブロックに対してOBMCが適用される(たとえば、有効である)ことを示すOBMCフラグの値を暗黙的に導出するように構成され得る。別の例として、ビデオデコーダ30は、CU、PU、またはブロックに対してOBMCが適用されない(たとえば、無効である)ことを示すOBMCフラグの値を暗黙的に導出するように構成され得る。
本開示の第10の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、CU、PU、サブブロックまたはブロックの境界におけるOBMCを適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、1つまたは複数の(たとえば、2つの)隣接ブロックの動き情報(たとえば、動きベクトル)の特性、および/または、1つまたは複数の(たとえば、2つの)隣接ブロックの動き情報(たとえば、動きベクトル)に基づく予測されるサンプル値の特性に基づいて、CU、PU、サブブロック、またはブロックの境界におけるOBMCを暗黙的に、適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。
いくつかの例では、ブロック境界(たとえば、CU、PU、サブブロック、またはブロックの境界)のためのOBMCを適用する(たとえば、有効にする)かどうかは、現在のブロックと境界を共有する1つまたは複数の(たとえば、2つの)隣接ブロックの動きベクトル間の動きベクトル差分に基づき得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のブロックと境界を共有する1つまたは複数の(たとえば、2つの)隣接ブロックの動きベクトル間の動きベクトル差分を決定するように構成され得る。動きベクトル差分が閾値(たとえば、16ピクセルまたは任意の他の閾値)を超えるとき、OBMCは境界に対して適用されないことがあり(たとえば、無効にされることがあり)、それ以外の場合、OBMCは境界に対して適用される(たとえば、有効にされる)ことがある。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、決定された動きベクトル差分を事前に定められた閾値と比較して、この比較に基づいて1つまたは複数の境界のためのOBMCを有効または無効にするように構成され得る。いくつかの例では、閾値は、事前に定められた値であることがあり、符号化されたビデオビットストリームにおいてシグナリングされることがあり、またはされないことがある。
ビデオエンコーダ20および/またはビデオデコーダ30が2つの隣接ブロックの動きベクトル間の動きベクトル差分を決定するように構成され得る例では、ビデオエンコーダ20および/またはビデオデコーダ30は、2つの動きベクトルが各々異なる参照フレームを指す場合(たとえば、指すとき)、または、少なくとも1つの動きベクトルが利用可能ではない場合(たとえば、利用可能ではないとき)、OBMCを適用しない(たとえば、無効にする)ように構成され得る。ビデオエンコーダ20および/またはビデオデコーダ30が2つ以上の隣接ブロックの動きベクトル間の動きベクトル差分を決定するように構成され得る別の例では、ビデオエンコーダ20および/またはビデオデコーダ30は、2つ以上の動きベクトルが各々異なる参照フレームを指す場合(たとえば、指すとき)、または、少なくとも1つの動きベクトルが利用可能ではない場合(たとえば、利用可能ではないとき)、OBMCを適用しない(たとえば、無効にする)ように構成され得る。
他の例では、ブロック境界(たとえば、CU、PU、サブブロック、またはブロックの境界)のためのOBMCを適用する(たとえば、有効にする)かどうかは、現在のブロックと境界を共有する2つの隣接ブロックの2つの動きベクトル(たとえば、2つの隣接ブロックの各々のための1つの動きベクトル)がともに整数のピクセル位置を指すかどうかに基づき得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のブロックと境界を共有する2つの隣接ブロックの2つの動きベクトル(たとえば、2つの隣接ブロックの各々のための1つの動きベクトル)がともに整数のピクセル位置を指すかどうかを決定するように構成され得る。いくつかの例では、両方の動きベクトルが整数のピクセル位置を指す場合、ビデオエンコーダ20および/またはビデオデコーダ30は、境界のためのOBMCを適用しない(たとえば、無効にする)ように構成され得る。他の例では、両方の動きベクトルが整数のピクセル位置を指さない場合、ビデオエンコーダ20および/またはビデオデコーダ30は、境界のためのOBMCを適用する(たとえば、有効にする)ように構成され得る。
他の例では、ブロック境界(たとえば、CU、PU、サブブロック、またはブロックの境界)のためのOBMCを適用する(たとえば、有効にする)かどうかは、現在のブロックと境界を共有する2つの隣接ブロックの2つの動きベクトルから導出される2つの予測されるブロックのサンプル値差分に基づき得る。たとえば、2つの予測されるブロックの平均の絶対差分がある閾値(たとえば、80など)を超えるとき、ビデオエンコーダ20および/またはビデオデコーダ30は、境界のためのOBMCを適用しない(たとえば、無効にする)ように構成され得る。別の例として、2つの予測されるブロックのサンプル間の最大の絶対差分がある閾値(たとえば、80、88、96など)を超えるとき、ビデオエンコーダ20および/またはビデオデコーダ30は、境界のためのOBMCを適用しない(たとえば、無効にする)ように構成され得る。別の例として、2つの予測されるブロックのサンプル間の最大の絶対差分がある閾値(たとえば、80、88、96など)以下であるとき、ビデオエンコーダ20および/またはビデオデコーダ30は、境界のためのOBMCを適用する(たとえば、有効にする)ように構成され得る。いくつかの例では、閾値は、事前に定められた値であることがあり、符号化されたビデオビットストリームにおいてシグナリングされることがあり、またはされないことがある。これらの例では、予測されるブロックのサイズは、(i)上の本開示の第4の技法において説明されたサブブロックサイズと同じサイズであることがあり、(ii)事前に定められていることがあり、または(iii)ビットストリームにおいてシグナリングされることがある。
本明細書では、境界のためのOBMCを無効にすること、または適用しないことは、境界に対するOBMCを実行しないことを指すことがあり、その逆も成り立つ。同様に、本明細書では、境界のためのOBMCを有効にすること、または適用することは、境界に対するOBMCを実行することを指すことがあり、その逆も成り立つ。本明細書では、「Xのための(for X)」に関するあらゆる言及は、「Xへの(to X)」または「Xに対する(on X)」を指し得る。たとえば、「ブロックのための」は「ブロックへの」または「ブロックに対する」を指し得る。「Xのための」、「Xへの」、または「Xに対する」に関するあらゆる言及は、「Xのための」、「Xへの」、および「Xに対する」のいずれをも指し得ることを理解されたい。たとえば、「サブブロックに対する」への言及は、「サブブロックのための」または「サブブロックへの」を同様に指し得る。
本開示の第11の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、CU、PU、サブブロック、任意の他のブロックレベルにおけるOBMCを適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、各々のインターコーディングされたCU、PU、サブブロックまたはブロックのためのOBMCを適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、本開示の第9の技法に関して説明された1つまたは複数の技法と本開示の第10の技法に関して説明された1つまたは複数の技法とを実施するOBMCを、適応的に有効または無効にする(たとえば、オンまたはオフに切り替える)ように構成され得る。たとえば、OBMCフラグがCUまたはPUのためにシグナリングされるとき、ビデオデコーダ30は、OBMCフラグの値に基づいて、OBMCを実行する(たとえば、有効にする、または適用する)ように、または実行しない(たとえば、無効にする、または適用しない)ように構成され得る。別の例として、OBMCフラグがCUまたはPUのためにシグナリングされないとき、ビデオデコーダ30は、本開示の第10の技法に関して上で説明された1つまたは複数の方法を使用して、OBMCを実行する(たとえば、有効にする、または適用する)ように、または実行しない(たとえば、無効にする、または適用しない)ように構成され得る。
本開示の第12の技法によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、すべての動き補償された(MC:motion compensated)ブロック境界に対してOBMCを実行するように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、ブロック(たとえば、CU)の右または下の境界を除き、すべての動き補償された(MC)ブロック境界に対してOBMCを実行するように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、ルーマ成分および/またはクロマ成分に対してOBMCを実行するように構成され得る。
HEVCでは、MCブロックはPUに相当する。PUがHEVCにおいてATMVPモードを用いてコーディングされるとき、各サブPU(4x4)はMCブロックである。CU、PU、またはサブPUの境界を一様に処理するために、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のブロックのすべてのMCブロック境界のために、サブブロックレベルにおいて本明細書で説明される1つまたは複数の技法に従ってOBMCを実行するように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、図8に示されるように、4x4に等しいサブブロックサイズを設定するように構成され得る。
いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックに対してOBMCを実行するように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のサブブロックのための1つまたは複数の予測ブロックを導出するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、利用可能であれば、4つのつながっている隣接サブブロック(たとえば、現在のサブブロックと境界を共有する4つのサブブロック)の動きベクトルを使用して、現在のサブブロックの4つの予測ブロックを導出するように構成され得る。別の例として、ビデオエンコーダ20および/またはビデオデコーダ30は、4つのつながっている隣接サブブロック(たとえば、現在のサブブロックと境界を共有する4つのサブブロック)の動きベクトルを、それらが利用可能であり現在のブロックの現在の動きベクトルと同一ではなければ使用して、現在のサブブロックの4つの予測ブロックを導出するように構成され得る。ビデオエンコーダ20および/またはビデオデコーダ30は、複数の動きベクトル(たとえば、以下で説明されるような、4つの予測ブロックの各々と関連付けられる1つの動きベクトルまたは4つの予測ブロックの各々と関連付けられる2つの動きベクトル)に基づいて、これらの複数の予測ブロック(たとえば、4つのつながっている隣接サブブロックに基づく4つの予測ブロック)に対して加重平均を実行するように構成され得る。いくつかの例では、ビデオエンコーダ20および/またはビデオデコーダ30は、加重平均を実行して現在のサブブロックの最終予測ブロックを生成するように構成され得る。たとえば、ビデオエンコーダ20および/またはビデオデコーダ30は、複数の動きベクトルを使用して複数の予測サンプルを取得し、次いで加重平均をサンプルに適用するように構成され得る。最終予測ブロックは、現在のサブブロック中のピクセルのための予測されるピクセルのブロックを指し得る。この段落の上の例は単方向予測に適用されるが、双方向予測を伴う例では、上の例における予測ブロックは、4つの隣接ブロックの各々から2つの動きベクトルを使用することによって生成され得る。
いくつかの例では、隣接サブブロックの1つまたは複数の動きベクトルに基づく予測ブロックはPNと表記されることがあり、ここでNは隣接サブブロックへのインデックスである。言い換えると、Nは、予測ブロックが上の隣接サブブロックであるか、下の隣接サブブロックであるか、左の隣接サブブロックであるか、または右の隣接サブブロックであるかを特定する。現在のサブブロックの1つまたは複数の動きベクトルに基づく予測ブロックは、PCと表記され得る。いくつかの例では、PNのそれぞれのピクセルがPC中の同じピクセルに加算される(たとえば、PNの4つの行および/または列がPCに加算される)。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PNのために{1/4、1/8、1/16、1/32}という加重係数を使用し、PCのために{3/4、7/8、15/16、31/32}という加重係数を使用するように構成され得る。小さいMCブロックに対する計算コストを低く保つために(たとえば、ここでPUサイズは8x4、4x8に等しく、またはPUはATMVPモードを用いてコーディングされる)、ビデオエンコーダ20および/またはビデオデコーダ30は、PNの2つの行および/または列をPCに加算するだけであるように構成され得る。そのような例では、ビデオエンコーダ20および/またはビデオデコーダ30は、PNのために{1/4、1/8}という加重係数を適用し、PCのために加重係数{3/4、7/8}を適用するように構成され得る。垂直方向の隣接サブブロック(たとえば、上または下)の1つまたは複数の動きベクトルに基づいて生成される各PNに対して、ビデオエンコーダ20および/またはビデオデコーダ30は、同じ加重係数を用いて、PNの同じ行の中のピクセルをPCに加算するように構成され得る。水平方向の隣接サブブロック(たとえば、左または右)の1つまたは複数の動きベクトルに基づいて生成される各PNに対して、ビデオエンコーダ20および/またはビデオデコーダ30は、同じ加重係数を用いて、PNの同じ列の中のピクセルをPCに加算するように構成され得る。
図9は、本開示において説明される技術を実装し得る例示的なビデオエンコーダ20を示すブロック図である。ビデオエンコーダ20は、ビデオスライス内のビデオブロックのイントラコーディングとインターコーディングとを実行し得る。イントラコーディングは、所与のビデオフレームまたはピクチャ内のビデオにおける空間的冗長性を低減または除去するために空間的予測に依存する。インターコーディングは、ビデオシーケンスの隣接フレームまたはピクチャ内のビデオにおける時間的冗長性を低減または除去するために時間的予測に依存する。イントラモード(Iモード)は、いくつかの空間ベースの圧縮モードのうちのいずれかを指し得る。片方向予測(Pモード)または双方向予測(Bモード)などのインターモードは、いくつかの時間ベースの圧縮モードのうちのいずれかを指し得る。
図9の例では、ビデオエンコーダ20は、ビデオデータメモリ33と、区分ユニット35と、予測処理ユニット41と、加算器50と、変換処理ユニット52と、量子化ユニット54と、エントロピー符号化ユニット56とを含む。予測処理ユニット41は、動き推定ユニット(MEU)42と、動き補償ユニット(MCU)44と、イントラ予測ユニット46とを含む。ビデオブロック再構築のために、ビデオエンコーダ20はまた、逆量子化ユニット58と、逆変換処理ユニット60と、加算器62と、フィルタユニット64と、復号ピクチャバッファ(DPB)66とを含む。図9の1つまたは複数の構成要素は、本開示において説明される1つまたは複数の技法を実行し得る。
図9に示されるように、ビデオエンコーダ20はビデオデータを受信し、受信されたビデオデータをビデオデータメモリ33に記憶する。ビデオデータメモリ33は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ33に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。DPB66は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ33およびDPB66は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ33およびDPB66は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ33は、ビデオエンコーダ20の他の構成要素とともにオンチップであることがあり、または、これらの構成要素に対してオフチップであることがある。
区分ユニット35は、ビデオデータメモリ33からビデオデータを取り出し、ビデオデータをビデオブロックに区分する。この区分はまた、スライス、タイル、または他のより大きい単位への区分、ならびに、たとえば、LCUおよびCUの4分木構造によるビデオブロック区分を含み得る。ビデオエンコーダ20は一般に、符号化されるべきビデオスライス内のビデオブロックを符号化する構成要素を示す。スライスは、複数のビデオブロックに(および、あるいは、タイルと呼ばれるビデオブロックのセットに)分割され得る。予測処理ユニット41は、エラー結果(たとえば、コーディングレートおよび歪みのレベル)に基づいて、現在のビデオブロックのための、複数のイントラコーディングモードのうちの1つまたは複数のインターコーディングモードのうちの1つなどの、複数の可能なコーディングモードのうちの1つを選択し得る。予測処理ユニット41は、残差ブロックデータを生成するために加算器50へ、および、参照ピクチャとして使用するための符号化されたブロックを再構築するために加算器62へ、得られたイントラコーディングまたはインターコーディングされたブロックを提供し得る。
予測処理ユニット41内のイントラ予測ユニット46は、空間的圧縮を提供するために、コーディングされるべき現在のブロックと同じフレームまたはスライス中の1つまたは複数の隣接ブロックに対する現在のビデオブロックのイントラ予測コーディングを実行し得る。予測処理ユニット41内の動き推定ユニット42および動き補償ユニット44は、時間的圧縮を提供するために、1つまたは複数の参照ピクチャ中の1つまたは複数の予測ブロックに対する現在のビデオブロックのインター予測コーディングを実行する。
動き推定ユニット42は、ビデオシーケンスの所定のパターンに従って、ビデオスライスのインター予測モードを決定するように構成され得る。所定のパターンは、PスライスまたはBスライスとしてシーケンス内のビデオスライスを指定し得る。動き推定ユニット42および動き補償ユニット44は、高度に統合され得るが、概念的な目的のために別々に示されている。動き推定ユニット42によって実行される動き推定は、ビデオブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、参照ピクチャ内の予測ブロックに対する現在のビデオフレームまたはピクチャ内のビデオブロックのPUの変位を示し得る。
予測ブロックは、絶対差分和(SAD:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分の尺度によって決定され得るピクセル差分の観点で、コーディングされるべきビデオブロックのPUと密接に一致することが見出されたブロックである。いくつかの例では、ビデオエンコーダ20は、DPB66に記憶された参照ピクチャのサブ整数ピクセル位置のための値を計算し得る。たとえば、ビデオエンコーダ20は、参照ピクチャの4分の1ピクセル位置の値、8分の1ピクセル位置の値、または他の分数ピクセル位置の値を補間し得る。したがって、動き推定ユニット42は、フルピクセル位置および分数ピクセル位置に対する動き探索を実行し、分数ピクセル精度で動きベクトルを出力し得る。
動き推定ユニット42は、参照ピクチャの予測ブロックの位置とPUの位置とを比較することによって、インターコーディングされたスライス内のビデオブロックのPUの動きベクトルを計算する。参照ピクチャは、その各々がDPB66に記憶された1つまたは複数の参照ピクチャを特定する第1の参照ピクチャリスト(リスト0)または第2の参照ピクチャリスト(リスト1)から選択され得る。動き推定ユニット42は、計算された動きベクトルをエントロピー符号化ユニット56および動き補償ユニット44に送信する。
動き補償ユニット44によって実行される動き補償は、場合によってはサブピクセル精度への補間を実行する動き推定によって決定された動きベクトルに基づいて、予測ブロックをフェッチまたは生成することを伴い得る。現在のビデオブロックのPUのための動きベクトルを受信すると、動き補償ユニット44は、参照ピクチャリストの1つにおいて動きベクトルが指す予測ブロックの位置を特定し得る。ビデオエンコーダ20は、コーディングされている現在のビデオブロックのピクセル値から予測ブロックのピクセル値を減算し、ピクセル差分値を形成することによって、残差ビデオブロックを形成する。ピクセル差分値は、ブロックの残差データを形成し、ルーマ差分成分とクロマ差分成分の両方を含み得る。加算器50は、この減算演算を実行する1つまたは複数の構成要素を表す。動き補償ユニット44はまた、ビデオスライスのビデオブロックを復号する際にビデオデコーダ30によって使用するための、ビデオブロックおよびビデオスライスと関連付けられたシンタックス要素を生成し得る。
予測処理ユニット41が、イントラ予測またはインター予測のいずれかを介して現在のビデオブロックの予測ブロックを生成した後、ビデオエンコーダ20は、現在のビデオブロックから予測ブロックを減算することによって、残差ビデオブロックを形成する。残差ブロックの中の残差ビデオデータは、1つまたは複数のTU内に含められることがあり、変換処理ユニット52に適用されることがある。変換処理ユニット52は、離散コサイン変換(DCT)または概念的に類似の変換などの変換を使用して、残差ビデオデータを残差変換係数に変換する。変換処理ユニット52は、ピクセル領域から周波数領域などの変換領域に、残差ビデオデータを変換し得る。
変換処理ユニット52は、得られた変換係数を量子化ユニット54に送信し得る。量子化ユニット54は、ビットレートをさらに低減するために、変換係数を量子化する。量子化プロセスは、係数の一部またはすべてと関連付けられるビット深度を低減し得る。量子化の程度は、量子化パラメータを調整することによって変更され得る。いくつかの例では、量子化ユニット54は次いで、量子化された変換係数を含む行列の走査を実行し得る。代替的に、エントロピー符号化ユニット56が走査を実行し得る。
量子化に続いて、エントロピー符号化ユニット56は、量子化された変換係数をエントロピー符号化する。たとえば、エントロピー符号化ユニット56は、コンテキスト適応可変長コーディング(CAVLC)、コンテキスト適応バイナリ算術コーディング(CABAC)、シンタックスベースコンテキスト適応バイナリ算術コーディング(SBAC)、確率間隔区分エントロピー(PIPE)コーディング、または別のエントロピー符号化方法もしくは技術を実行し得る。エントロピー符号化ユニット56によるエントロピー符号化に続いて、符号化されたビットストリームは、ビデオデコーダ30に送信されることがあり、または、ビデオデコーダ30による後の送信または検索のためにアーカイブされることがある。エントロピー符号化ユニット56はまた、コーディングされている現在のビデオスライスのための動きベクトルおよび他のシンタックス要素をエントロピー符号化し得る。
逆量子化ユニット58および逆変換処理ユニット60は、それぞれ、逆量子化および逆変換を適用して、参照ピクチャの参照ブロックとして後で使用するための、ピクセル領域における残差ブロックを再構築する。動き補償ユニット44は、参照ピクチャリストの1つの中の参照ピクチャの1つの予測ブロックに残差ブロックを加算することによって、参照ブロックを計算し得る。動き補償ユニット44はまた、動き推定において使用するためのサブ整数ピクセル値を計算するために、再構築された残差ブロックに1つまたは複数の補間フィルタを適用し得る。加算器62は、再構築されたブロックを生成するために、再構築された残差ブロックを、動き補償ユニット44によって生成された動き補償された予測ブロックに加算する。
フィルタユニット64は、再構築されたブロック(たとえば、加算器62の出力)をフィルタリングし、参照ブロックとして使用するために、フィルタリングされた再構築されたブロックをDPB66に記憶する。参照ブロックは、後続のビデオフレームまたはピクチャの中のブロックをインター予測するための参照ブロックとして、動き推定ユニット42および動き補償ユニット44によって使用され得る。フィルタユニット64は、デブロッキングフィルタリング、サンプル適応オフセット(SAO)フィルタリング、適応ループフィルタリング(ALF)、または他のタイプのループフィルタリングの1つまたは複数を適用し得る。フィルタユニット64は、ブロック境界をフィルタリングして再構築されたビデオからブロッキネスアーティファクトを除去するために、デブロッキングフィルタリングを適用することができ、全体的なコーディング品質を上げるために他のタイプのフィルタリングを適用することができる。追加のループフィルタ(ループ内またはループ後)も使用され得る。
ビデオエンコーダ20は、サブブロックベースのOBMC、サブPUベースのOBMC、CU境界ベースのOBMC、またはこれらの任意の組合せを実行するように構成されるビデオエンコーダの例を表す。
図10は、本開示において説明される技法を実装し得る例示的なビデオデコーダ30を示すブロック図である。図10の例では、ビデオデコーダ30は、ビデオデータメモリ78と、エントロピー復号ユニット80と、予測処理ユニット81と、逆量子化ユニット86と、逆変換処理ユニット88と、加算器90と、DPB94とを含む。予測処理ユニット81は、動き補償ユニット82と、イントラ予測ユニット84とを含む。ビデオデコーダ30は、いくつかの例では、図9からのビデオエンコーダ20に関連して説明された符号化パスと全般に逆の復号パスを実行し得る。図10の1つまたは複数の構成要素は、本開示において説明される1つまたは複数の技法を実行し得る。
復号プロセスの間、ビデオデコーダ30は、ビデオエンコーダ20から、符号化されたビデオスライスのビデオブロックと関連するシンタックス要素とを表す符号化されたビデオビットストリームを受信する。ビデオデコーダ30は、受信された符号化ビデオビットストリームをビデオデータメモリ78内に記憶する。ビデオデータメモリ78は、ビデオデコーダ30の構成要素によって復号されるべき、符号化されたビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ78に記憶されたビデオデータは、たとえば、記憶デバイス26から、またはカメラなどのローカルビデオソースから、または物理的データ記憶媒体にアクセスすることによって、リンク16を介して取得され得る。ビデオデータメモリ78は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB:coded picture baffer)を形成し得る。DPB94は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ78およびDPB94は、DRAM、SDRAM、MRAM、RRAM(登録商標)、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ78およびDPB94は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ78は、ビデオデコーダ30の他の構成要素とともにオンチップであることがあり、または、それらの構成要素に対してオフチップであることがある。
ビデオデコーダ30のエントロピー復号ユニット80は、量子化された係数と、動きベクトルと、他のシンタックス要素とを生成するために、ビデオデータメモリ78に記憶されたビデオデータをエントロピー復号する。エントロピー復号ユニット80は、予測処理ユニット81に動きベクトルと他のシンタックス要素とを転送する。ビデオデコーダ30は、ビデオスライスレベルおよび/またはビデオブロックレベルにおいてシンタックス要素を受信し得る。
ビデオスライスがイントラコーディングされた(I)スライスとしてコーディングされるとき、予測処理ユニット81のイントラ予測ユニット84は、シグナリングされたイントラ予測モードと、現在のフレームまたはピクチャの以前に復号されたブロックからのデータとに基づいて、現在のビデオスライスのビデオブロックの予測データを生成し得る。ビデオフレームがインターコーディングされた(すなわち、BまたはP)スライスとしてコーディングされるとき、予測処理ユニット81の動き補償ユニット82は、エントロピー復号ユニット80から受信された動きベクトルと他のシンタックス要素とに基づいて、現在のビデオスライスのビデオブロックの予測ブロックを生成する。予測ブロックは、参照ピクチャリストの1つの中の参照ピクチャの1つから生成され得る。ビデオデコーダ30は、DPB94に記憶された参照ピクチャに基づいて、デフォルトの構成技法を使用して、参照フレームリスト、リスト0およびリスト1を構築し得る。
動き補償ユニット82は、動きベクトルおよび他のシンタックス要素を構文解析することによって、現在のビデオスライスのビデオブロックのための予測情報を決定し、復号されている現在のビデオブロックの予測ブロックを生成するために予測情報を使用する。たとえば、動き補償ユニット82は、ビデオスライスのビデオブロックをコーディングするために使用される予測モード(たとえば、イントラまたはインター予測)と、インター予測スライスタイプ(たとえば、BスライスまたはPスライス)と、スライスのための1つまたは複数の参照ピクチャリストのための構築情報と、スライスの各々のインター符号化されたビデオブロックの動きベクトルと、スライスの各々のインターコーディングされたビデオブロックのインター予測ステータスと、現在のビデオスライス中のビデオブロックを復号するための他の情報とを決定するために、受信されたシンタックス要素のいくつかを使用する。
動き補償ユニット82はまた、補間フィルタに基づいて補間を実行し得る。動き補償ユニット82は、参照ブロックのサブ整数ピクセルのための補間された値を計算するために、ビデオブロックの符号化の間にビデオエンコーダ20によって使用されるように補間フィルタを使用し得る。この場合、動き補償ユニット82は、受信されたシンタックス要素からビデオエンコーダ20によって使用される補間フィルタを決定し、予測ブロックを生成するためにその補間フィルタを使用し得る。
逆量子化ユニット86は、ビットストリームにおいて提供され、エントロピー復号ユニット80によって復号された量子化された変換係数を逆量子化する(inverse quantize)、すなわち逆量子化する(de-quantize)。逆量子化プロセスは、量子化の程度を決定し、同様に、適用されるべき逆量子化の程度を決定するために、ビデオスライス中の各ビデオブロックのための、ビデオエンコーダ20によって計算された量子化パラメータの使用を含み得る。逆変換処理ユニット88は、ピクセル領域における残差ブロックを生成するために、変換係数に逆変換、たとえば、逆DCT、逆整数変換、または概念的に同様の逆変換プロセスを適用する。
予測処理ユニットが、たとえばイントラ予測またはインター予測を使用して、現在のビデオブロックの予測ブロックを生成した後、ビデオデコーダ30は、逆変換処理ユニット88からの残差ブロックを、動き補償ユニット82によって生成された対応する予測ブロックと加算することによって、再構築されたビデオブロックを形成する。加算器90は、この加算演算を実行する1つまたは複数のコンポーネントを表す。フィルタユニット92は、たとえば、デブロッキングフィルタリング、SAOフィルタリング、ALFフィルタリング、または他のタイプのフィルタリングの1つまたは複数を使用して、再構築されたビデオブロックをフィルタリングする。(コーディングループ中またはコーディングループ後のいずれかの)他のループフィルタも、ピクセル遷移を滑らかにするために、または別様にビデオ品質を改善するために、使用され得る。次いで、所与のフレームまたはピクチャ中の復号されたビデオブロックは、DPB94に記憶され、DPB94は、後続の動き補償のために使用される参照ピクチャを記憶する。DPB94は、図1のディスプレイデバイス32などのディスプレイデバイス上で後に提示するための復号されたビデオを記憶する、追加のメモリの一部であることがあり、またはそれとは別であることがある。
ビデオデコーダ30は、サブブロックベースのOBMC、サブPUベースのOBMC、CU境界ベースのOBMC、またはこれらの任意の組合せを実行するように構成されるビデオデコーダの例を表す。たとえば、ビデオデコーダ30は、この例では予測ユニットのサブブロックであるビデオデータの第1のブロックを受信するように構成され得る。ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックを受信し、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動きベクトルを決定し、重複ブロック動き補償を使用して、ビデオデータの第1のブロックに隣接する1つまたは複数のブロックのうちの少なくとも1つの少なくとも1つの動きベクトルに少なくとも一部基づいてビデオデータの第1のブロックを復号するように構成され得る。
図11は、本開示の技法に適合するビデオデータを復号するための例示的なプロセスを示すフローチャートである。図11のプロセスは、説明の目的でビデオデコーダ30によって実行されるものとして全般に説明されるが、様々な他のプロセッサも図11に示されるプロセスを実行することができる。いくつかの例では、ビデオデータメモリ78、エントロピー復号ユニット80、および/または予測処理ユニット81が、図11に示される1つまたは複数のプロセスを実行し得る。
図11の例では、ビデオデコーダ30は、ビデオデータの第1のブロックを受信するように構成され得る(200)。いくつかの例では、ビデオデータの第1のブロックは予測ユニットのサブブロックである。いくつかの例では、ビデオデータの第1のブロックは、予測ユニットの正方形のサブブロックまたは非正方形のサブブロックである。
ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックを受信するように構成され得る(202)。いくつかの例では、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックは、正方形のサブブロック、非正方形のサブブロック、または少なくとも1つの正方形のサブブロックと少なくとも1つの非正方形のサブブロックの組合せである。
ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動き情報を決定するように構成され得る(204)。いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つのブロックを復号することによって、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの少なくとも1つの動きベクトルを決定するように構成され得る。ビデオデコーダ30は、ビデオデータの第1のブロックに隣接する1つまたは複数のブロックのうちの少なくとも1つの動き情報に少なくとも一部基づいて、重複ブロック動き補償を使用して、ビデオデータの第1のブロックを復号するように構成され得る(206)。
いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つが復号されないかどうかを決定するように構成され得る。そのような例では、ビデオデコーダ30は、復号されるべきではないと決定された1つまたは複数のブロックのうちの少なくとも1つのブロックに対応する動き情報を使用せずに、ビデオデータの第1のブロックを復号するように構成され得る。
いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のブロックの第1の予測ブロックを生成するように構成され得る。第1の予測ブロックは、ビデオデータの第1のブロックのための各ピクセル位置に対する値を含み得る。ビデオデコーダ30は、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの隣接予測ブロックを生成するように構成され得る。隣接予測ブロックは、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つのための各ピクセル位置に対する値を含み得る。ビデオデコーダ30は、隣接予測ブロックの1つまたは複数の値に基づいて第1の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成するように構成され得る。ビデオデコーダ30は、修正された第1の予測ブロックを使用してビデオデータの第1のブロックを復号するように構成され得る。
いくつかの例では、ビデオデコーダ30は、第1の予測ブロックの1つまたは複数の値に第1の重み付けられた値を割り当てるように構成され得る。ビデオデコーダ30は、隣接予測ブロックの1つまたは複数の値に第2の重み付けられた値を割り当てるように構成され得る。ビデオデコーダ30は、第1の重み付けられた値および第2の重み付けられた値に基づいて第1の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成するように構成され得る。
いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のブロックの第1の予測ブロックを生成するように構成され得る。第1の予測ブロックは、ビデオデータの第1のブロックのための各ピクセル位置に対する値を含み得る。ビデオデコーダ30は、ビデオデータの第1のブロックのサイズに基づいて、1つまたは複数の重み付けられた値を第1の予測ブロックの1つまたは複数の値に割り当てるように構成され得る。ビデオデコーダ30は、第1の予測ブロックの1つまたは複数の値に割り当てられる1つまたは複数の重み付けられた値を使用して、ビデオデータの第1のブロックを復号するように構成され得る。そのような例では、ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動き情報に基づいて、第1の隣接予測ブロックを生成するように構成され得る。ビデオデコーダ30は、第1の隣接ブロックのサイズに基づいて、1つまたは複数の重み付けられた値を第1の隣接予測ブロックの1つまたは複数の値に割り当てるように構成され得る。ビデオデコーダ30は、第1の隣接予測ブロックの1つまたは複数の値に割り当てられる1つまたは複数の重み付けられた値を使用して、ビデオデータの第1のブロックを復号するように構成され得る。
いくつかの例では、ビデオデコーダ30は、第1の隣接予測ブロックの1つまたは複数の値に割り当てられた1つまたは複数の重み付けられた値に基づいて第1の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成し、修正された第1の予測ブロックを使用してビデオデータの第1のブロックを復号するように構成され得る。いくつかの例では、ビデオデコーダ30は、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動き情報に基づいて、第2の隣接予測ブロックを生成するように構成され得る。そのような例では、ビデオデコーダ30は、第2の隣接ブロックのサイズに基づいて、1つまたは複数の重み付けられた値を第2の隣接予測ブロックの1つまたは複数の値に割り当てるように構成され得る。ビデオデコーダ30は、第1および第2の隣接予測ブロックの1つまたは複数の値に割り当てられた1つまたは複数の重み付けられた値に基づいて第1および第2の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成するように構成され得る。
いくつかの例では、ビデオデコーダ30は、重複ブロック動き補償モードに従ってビデオデータの第1のブロックが符号化されるかどうかを表す値を有するシンタックス要素を受信するように構成され得る。たとえば、シンタックス要素は、ビデオエンコーダ(たとえば、ビデオエンコーダ20)によって生成されるビットストリームにおいて受信され得る。ビデオデコーダ30は、シンタックス要素の値に基づいて、ビデオデータの第1のブロックが重複ブロック動き補償モードに従って符号化されると決定するように構成され得る。
図12は、本開示の技法に適合するビデオデータを符号化するための例示的なプロセスを示すフローチャートである。図12のプロセスは、説明の目的でビデオコーダによって実行されるものとして全般に説明されるが、様々な他のプロセッサも図12に示されるプロセスを実行することができる。本明細書では、ビデオコーダは、ビデオエンコーダおよび/またはビデオデコーダ(たとえば、ビデオエンコーダ20および/またはビデオデコーダ30)を指し得る。いくつかの例では、ビデオデータメモリ33、区分ユニット35、予測処理ユニット41、および/またはエントロピー符号化ユニット56が、図12に示される1つまたは複数の処理を実行し得る。いくつかの例では、ビデオデータメモリ78、エントロピー復号ユニット80、および/または予測処理ユニット81が、図12に示される1つまたは複数のプロセスを実行し得る。
図12の例では、ビデオコーダは、ビデオデータの第1のブロックをメモリに記憶するように構成され得る(220)。いくつかの例では、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックは、正方形のサブブロック、非正方形のサブブロック、または少なくとも1つの正方形のサブブロックと少なくとも1つの非正方形のサブブロックの組合せである。
ビデオコーダは、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックをメモリに記憶するように構成され得る(222)。いくつかの例では、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックは、正方形のサブブロック、非正方形のサブブロック、または少なくとも1つの正方形のサブブロックと少なくとも1つの非正方形のサブブロックの組合せである。
ビデオコーダは、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動き情報を決定するように構成され得る(224)。いくつかの例では、ビデオコーダは、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つのブロックをコーディングすることによって、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの少なくとも1つの動きベクトルを決定するように構成され得る。いくつかの例では、ビデオコーダは、ビデオデータの第1のブロックに隣接する1つまたは複数のブロックのうちの少なくとも1つの動き情報に少なくとも一部基づいて、重複ブロック動き補償を使用して、ビデオデータの第1のブロックをコーディングするように構成され得る(226)。
いくつかの例では、ビデオコーダは、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つがコーディングされないかどうかを決定するように構成され得る。そのような例では、ビデオコーダは、コーディングされるべきではないと決定された1つまたは複数のブロックのうちの少なくとも1つのブロックに対応する動き情報を使用せずに、ビデオデータの第1のブロックをコーディングするように構成され得る。
いくつかの例では、ビデオコーダは、ビデオデータの第1のブロックの第1の予測ブロックを生成するように構成され得る。第1の予測ブロックは、ビデオデータの第1のブロックのための各ピクセル位置に対する値を含み得る。ビデオコーダは、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの隣接予測ブロックを生成するように構成され得る。隣接予測ブロックは、ビデオの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つのための各ピクセル位置に対する値を含み得る。ビデオコーダは、隣接予測ブロックの1つまたは複数の値に基づいて第1の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成するように構成され得る。ビデオコーダは、修正された第1の予測ブロックを使用してビデオデータの第1のブロックをコーディングするように構成され得る。
いくつかの例では、ビデオコーダは、第1の予測ブロックの1つまたは複数の値に第1の重み付けられた値を割り当てるように構成され得る。ビデオコーダは、隣接予測ブロックの1つまたは複数の値に第2の重み付けられた値を割り当てるように構成され得る。ビデオコーダは、第1の重み付けられた値および第2の重み付けられた値に基づいて第1の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成するように構成され得る。
いくつかの例では、ビデオコーダは、ビデオデータの第1のブロックの第1の予測ブロックを生成するように構成され得る。第1の予測ブロックは、ビデオデータの第1のブロックのための各ピクセル位置に対する値を含み得る。ビデオコーダは、ビデオデータの第1のブロックのサイズに基づいて、1つまたは複数の重み付けられた値を第1の予測ブロックの1つまたは複数の値に割り当てるように構成され得る。ビデオコーダは、第1の予測ブロックの1つまたは複数の値に割り当てられる1つまたは複数の重み付けられた値を使用して、ビデオデータの第1のブロックをコーディングするように構成され得る。そのような例では、ビデオコーダは、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動き情報に基づいて、第1の隣接予測ブロックを生成するように構成され得る。ビデオコーダは、第1の隣接ブロックのサイズに基づいて、1つまたは複数の重み付けられた値を第1の隣接予測ブロックの1つまたは複数の値に割り当てるように構成され得る。ビデオコーダは、第1の隣接予測ブロックの1つまたは複数の値に割り当てられる1つまたは複数の重み付けられた値を使用して、ビデオデータの第1のブロックをコーディングするように構成され得る。
いくつかの例では、ビデオコーダは、第1の隣接予測ブロックの1つまたは複数の値に割り当てられた1つまたは複数の重み付けられた値に基づいて第1の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成し、修正された第1の予測ブロックを使用してビデオデータの第1のブロックをコーディングするように構成され得る。いくつかの例では、ビデオコーダは、ビデオデータの第1のブロックに隣接するビデオデータの1つまたは複数のブロックのうちの少なくとも1つの動き情報に基づいて、第2の隣接予測ブロックを生成するように構成され得る。そのような例では、ビデオコーダは、第2の隣接ブロックのサイズに基づいて、1つまたは複数の重み付けられた値を第2の隣接予測ブロックの1つまたは複数の値に割り当てるように構成され得る。ビデオコーダは、第1および第2の隣接予測ブロックの1つまたは複数の値に割り当てられた1つまたは複数の重み付けられた値に基づいて第1および第2の予測ブロックの1つまたは複数の値を修正して、修正された第1の予測ブロックを生成するように構成され得る。
いくつかの例では、ビデオコーダは、重複ブロック動き補償モードに従ってビデオデータの第1のブロックが符号化されるかどうかを表す値を有するシンタックス要素を受信するように構成され得る。たとえば、シンタックス要素は、ビデオエンコーダ(たとえば、ビデオエンコーダ20)によって生成されるビットストリームにおいて受信され得る。ビデオコーダは、シンタックス要素の値に基づいて、ビデオデータの第1のブロックが重複ブロック動き補償モードに従って符号化されると決定するように構成され得る。
いくつかの例では、ビデオコーダは、重複ブロック動き補償モードに従ってビデオデータの第1のブロックが符号化されるかどうかを表す値を有するシンタックス要素を生成するように構成され得る。そのような例では、ビデオコーダは、シンタックス要素をビットストリームにおいて送信するように構成されることがあり、ビットストリームはビデオデコーダ(たとえば、ビデオデコーダ30)によって受信されることがある。
本明細書で説明される技法のすべてが、個別に、または組み合わせて使用され得ることを理解されたい。たとえば、ビデオエンコーダ20および/またはその1つまたは複数の構成要素と、ビデオデコーダ30および/またはその1つまたは複数の構成要素が、本開示において説明される技法を任意の組合せで実行し得る。別の例として、本明細書で説明された技法は、ビデオエンコーダ20(図1および図9)および/またはビデオデコーダ30(図1および図10)によって実行されることがあり、それらの両方が一般にビデオコーダと呼ばれることがある。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。
例に応じて、本明細書で説明される技法のいずれかのいくつかの行為またはイベントは異なる順序で実行されてもよく、一緒に追加され、統合され、または省略されてもよい(たとえば、説明される行為またはイベントのすべてが技法の実践のために必要とは限らない)ことを認識されたい。さらに、いくつかの例では、行為またはイベントは、順次的にではなく、たとえばマルチスレッド処理、割り込み処理またはマルチプロセッサを通じて同時に実行されることがある。加えて、明快のために本開示のいくつかの態様は単一のモジュールまたはユニットによって実行されるものとして説明されるが、本開示の技法がビデオコーダと関連付けられるユニットまたはモジュールの組合せによって実行されてもよいことを理解されたい。
本開示のいくつかの態様は、説明の目的で、発表されたものか、開発中のものか、などにかかわらず、1つまたは複数のビデオコーディング規格に関して説明された。しかしながら、本開示で説明される技法は、まだ開発されていない他の標準的なまたは独自のビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
本開示によれば、「または」という用語は、文脈が別段規定しない限り、「および/または」として解釈され得る。加えて、「1つまたは複数の」または「少なくとも1つの」などの語句が、本明細書において開示される一部の特徴のために使用されていることがあるが、他の特徴のために使用されていないことがあり、そのような表現が使用されなかった特徴は、文脈が別段規定しない限り、そのような暗示される意味を有するものとして解釈され得る。
技法の様々な態様の組合せが上で説明されたが、これらの組合せは単に本開示において説明される技法の例を示すために与えられている。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示において説明される技法の様々な態様の考えられる組合せを包含し得る。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形の媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に相当し得る。データ記憶媒体は、本開示において説明される技法の実装のための命令、コード、および/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形式の所望のプログラムコードを記憶するために使用され得るとともにコンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、いかなる接続も適切にコンピュータ可読媒体と呼ばれる。たとえば、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。ディスク(disk)およびディスク(disc)は、本明細書では、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲に含まれるべきである。
命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の等価の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または本明細書で説明された技法の実装に適した任意の他の構造のいずれかを指し得る。加えて、いくつかの態様では、本明細書において説明された機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で提供されることがあり、または組み合わされたコーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素において完全に実施され得る。
本開示の技法は、ワイヤレス送受話器、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、様々なデバイスもしくは装置において実施され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的側面を強調するために、様々なコンポーネント、モジュール、またはユニットが説明されているが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて結合されてもよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つもしくは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されてもよい。
様々な例が説明されてきた。説明されたシステム、動作、機能、または例の任意の組合せが考えられる。これらの例および他の例は以下の特許請求の範囲内に入る。