以下では、本出願の実施形態における添付図面を参照して本出願の実施形態について説明する。以下の説明において、本開示の一部を形成し、本発明の実施形態の特定の態様、または本発明の実施形態が使用されてもよい特定の態様を例示として示す添付図面に参照がなされる。本発明の実施形態は、他の態様において使用されてもよく、添付図面に示されていない構造的または論理的な変更を含んでもよいことが理解されるべきである。したがって、以下の詳細な説明は、限定として解釈されるべきではなく、本発明の範囲は、添付の特許請求の範囲によって定義される。例えば、説明された方法を参照して開示された内容は、方法を実行するように構成された対応するデバイスまたはシステムにも適用されてもよく、逆もまた同様であることが理解されるべきである。例えば、1つ以上の特定の方法ステップについて説明されている場合、対応するデバイスは、そのような1つ以上のユニットが明示的に説明、または添付図面に図示されていなくても、説明された1つ以上の方法ステップを実行するための機能ユニット(例えば、1つ以上のステップを実行する1つのユニット、または複数のステップのうちの1つ以上をその各々が実行する複数のユニット)などの1つ以上のユニットを含んでもよい。加えて、例えば、特定の装置について、機能ユニットなどの1つ以上のユニットに基づいて説明されている場合、対応する方法は、そのような1つ以上のステップが明示的に説明、または添付図面に図示されていなくても、1つ以上のユニットの機能を実行するための1つのステップ(例えば、1つ以上のユニットの機能を実行するための1つのステップ、またはその各々が複数のユニットのうちの1つ以上の機能を実行するために使用される複数のステップ)を含んでもよい。さらに、本明細書において説明されている様々な例示的な実施形態および/または態様の特徴は、特に断りのない限り、互いに組み合わされてもよいことが理解されるべきである。
本出願の実施形態における技術的解決策は、既存のビデオコーディング規格(例えば、H.264または高効率ビデオコーディング(high efficiency video coding、HEVC)などの規格)に適用されてもよいだけでなく、将来のビデオコーディング規格(例えば、H.266規格)にも適用されてもよい。本出願の実施形態において使用される用語は、本出願の特定の実施形態を説明するためにのみ使用され、本出願を限定することを意図していない。以下では、最初に、本出願の実施形態におけるいくつかの関連概念について簡単に説明する。
ビデオコーディングは、通常、ビデオまたはビデオシーケンスを形成するピクチャのシーケンスを処理する。ビデオコーディングの分野では、「ピクチャ(picture)」、「フレーム(frame)」、および「画像(image)」という用語は、同義語として使用されてもよい。本明細書において使用されるビデオコーディングは、ビデオ符号化またはビデオ復号を示す。ビデオ符号化は、ソース側において実行され、通常、(より効率的な記憶および/または伝送のために)ビデオピクチャを表すために必要なデータ量を低減するために、オリジナルビデオピクチャを(例えば、圧縮によって)処理することを含む。ビデオ復号は、宛先側において実行され、通常、ビデオピクチャを再構成するために、エンコーダとは逆の処理を含む。実施形態におけるビデオピクチャの「符号化」は、ビデオシーケンスに関連する「符号化」または「復号」として理解されるべきである。符号化および復号の組み合わせは、コーディング(符号化および復号)とも呼ばれる。
ビデオシーケンスは、一連のピクチャ(picture)を含み、ピクチャは、スライス(slice)にさらに分割され、スライスは、ブロック(block)にさらに分割される。ビデオコーディングは、ブロックによって実行される。いくつかの新しいビデオコーディング規格において、「ブロック」という概念が、さらに拡張される。例えば、H.264規格において、マクロブロック(macroblock、MB)が導入される。マクロブロックは、予測コーディングに使用されうる複数の予測ブロック(partition)にさらに分割されてもよい。HEVC規格において、コーディングユニット(coding unit、CU)、予測ユニット(prediction unit、PU)、および変換ユニット(transform unit、TU)などの基本概念が使用され、分割によって複数のブロックユニットが機能的に取得され、まったく新しい木ベース構造が記述のために使用される。例えば、CUは、四分木に基づいてより小さいCUに分割されてもよく、より小さいCUは、四分木構造を生成するためにさらに分割されてもよい。CUは、コーディングされたピクチャを分割およびコーディングするための基本ユニットである。PUおよびTUも、同様の木構造を有する。PUは、予測ブロックに対応してもよく、予測コーディングのための基本単位である。CUは、分割パターンに基づいて複数のPUにさらに分割される。TUは、変換ブロックに対応してもよく、予測残差を変換するための基本単位である。しかしながら、CU、PU、およびTUは、各々、本質的には、概念的にブロック(またはピクチャブロック)である。
例えば、HEVCにおいて、コーディング木ユニット(coding tree unit、CTU)は、コーディング木として示される四分木構造を使用することによって、複数のCUに分割される。ピクチャ領域がCUレベルにおいてインターピクチャ(時間)予測またはイントラピクチャ(空間)予測のどちらによってコーディングされるかが決定される。各CUは、PU分割タイプに基づいて、1つ、2つ、または4つのPUにさらに分割されてもよい。1つのPU内で、同じ予測プロセスが適用され、関連する情報が、PUに基づいてデコーダに送信される。PU分割タイプに基づいて予測プロセスを適用することによって残差ブロックを取得した後、CUは、CUに使用されるコーディング木と同様の別の四分木構造に基づいて、変換ユニット(transform unit、TU)にパーティショニングされてもよい。ビデオ圧縮技術の最新の開発において、フレームは、コーディングブロックをパーティショニングするために、四分木プラス二分木(Quad-tree and binary tree、QTBT)によってパーティショニングされる。QTBTブロック構造において、CUは、正方形または長方形であってもよい。
本明細書において、説明と理解とを容易にするために、現在のコーディングされたピクチャ内の符号化対象ピクチャブロックは、現在のブロックと呼ばれてもよい。例えば、符号化中、現在のブロックは、符号化されているブロックであり、復号中、現在のブロックは、復号されているブロックである。現在のブロックを予測するために使用される、参照ピクチャ内の復号されたピクチャブロックは、参照ブロックと呼ばれる。言い換えれば、参照ブロックは、現在のブロックに関する参照信号を提供するブロックであり、参照信号は、ピクチャブロック内のサンプル値を表す。参照ピクチャ内の現在のブロックに関する予測信号を提供するブロックは、予測ブロックと呼ばれてもよく、予測信号は、予測ブロック内のサンプル値、サンプリング値、またはサンプリング信号を表す。例えば、複数の参照ブロックを横断した後、最適な参照ブロックが発見され、最適な参照ブロックは、現在のブロックに関する予測を提供し、このブロックは、予測ブロックと呼ばれる。
ロスレスビデオコーディングの場合、オリジナルビデオピクチャが再構成されることができ、すなわち、(記憶または伝送中に伝送損失または他のデータ損失が発生しないと仮定して)再構成されたビデオピクチャは、オリジナルビデオピクチャと同じ品質を有する。ロッシービデオコーディングの場合、ビデオピクチャを表すために必要なデータ量を低減するために、量子化などによってさらなる圧縮が実行され、ビデオピクチャがデコーダ側において完全には再構成されることができず、すなわち、再構成されたビデオピクチャの品質は、オリジナルビデオピクチャの品質よりも劣る。
いくつかのH.261ビデオコーディング規格は、「ロッシーハイブリッドビデオコーディング」に関する(すなわち、サンプルドメインにおける空間的および時間的予測が、変換ドメインにおける量子化を適用するための2D変換コーディングと組み合わされる)。ビデオシーケンス内の各ピクチャは、通常、非重複ブロックのセットにパーティショニングされ、コーディングは、通常、ブロックレベルにおいて実行される。具体的には、エンコーダ側において、ビデオは、通常、ブロック(ビデオブロック)レベルにおいて処理され、すなわち符号化される。例えば、空間(イントラピクチャ)予測および時間(インターピクチャ)予測によって予測ブロックが生成され、予測ブロックは、残差ブロックを取得するために、現在のブロック(処理されている、または処理されるべきブロック)から減算され、残差ブロックは、変換ドメインにおいて変換され、送信される(圧縮される)べきデータ量を低減するために量子化される。デコーダ側において、表現するために現在のブロックを再構成するために、符号化または圧縮されたブロックに対して、エンコーダとは逆の処理が適用される。加えて、エンコーダは、エンコーダおよびデコーダが、後続のブロックを処理、すなわち符号化するために同じ予測(例えば、イントラ予測およびインター予測)および/または再構成を生成するように、デコーダの処理ループを複製する。
以下では、本出願の実施形態が適用されるシステムアーキテクチャについて説明する。図1Aは、本出願の実施形態が適用されるビデオコーディングシステム10の概略ブロック図である。図1Aに示すように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含んでもよい。ソースデバイス12は、符号化されたビデオデータを生成し、したがって、ソースデバイス12は、ビデオ符号化装置と呼ばれてもよい。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得、したがって、宛先デバイス14は、ビデオ復号装置と呼ばれてもよい。様々な実装解決策において、ソースデバイス12、宛先デバイス14、またはソースデバイス12と宛先デバイス14の両方は、1つ以上のプロセッサと、1つ以上のプロセッサに結合されたメモリとを含んでもよい。メモリは、限定はしないが、RAM、ROM、EEPROM、フラッシュメモリ、または本明細書で説明されているようにコンピュータにアクセス可能な命令もしくはデータ構造の形態において所望のプログラムコードを記憶するために使用されうる任意の他の媒体を含んでもよい。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティング装置、ノートブック(例えば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、「スマート」フォンなどの電話ハンドセット、テレビ、カメラ、ディスプレイ装置、デジタルメディアプレーヤ、ビデオゲームコンソール、車載コンピュータ、ワイヤレス通信デバイスなどを含む、様々な装置を含んでもよい。
図1Aは、ソースデバイス12および宛先デバイス14を別個のデバイスとして描いているが、デバイスの実施形態は、ソースデバイス12と宛先デバイス14の両方、またはソースデバイス12の機能と宛先デバイス14の機能の両方、すなわち、ソースデバイス12もしくは対応する機能と宛先デバイス14もしくは対応する機能の両方を含んでもよい。そのような実施形態では、ソースデバイス12または対応する機能および宛先デバイス14または対応する機能は、同じハードウェアおよび/もしくはソフトウェア、別個のハードウェアおよび/もしくはソフトウェア、またはそれらの組み合わせを使用することによって実装されてもよい。
リンク13を介してソースデバイス12と宛先デバイス14との間に通信接続が実装されてもよく、宛先デバイス14は、リンク13を介してソースデバイス12から符号化されたビデオデータを受信してもよい。リンク13は、符号化されたビデオデータをソースデバイス12から宛先デバイス14に移動することができる1つ以上の媒体または装置を含んでもよい。一例において、リンク13は、ソースデバイス12が符号化されたビデオデータを宛先デバイス14に直接リアルタイムで送信することを可能にする1つ以上の通信媒体を含んでもよい。この例では、ソースデバイス12は、通信規格(例えば、ワイヤレス通信プロトコル)に従って、符号化されたビデオデータを変調してもよく、変調されたビデオデータを宛先デバイス14に送信してもよい。1つ以上の通信媒体は、ワイヤレス通信媒体および/または有線通信媒体、例えば、無線周波数(RF)スペクトルまたは1つ以上の物理的伝送ケーブルを含んでもよい。1つ以上の通信媒体は、パケットベースのネットワークの一部であってもよく、パケットベースのネットワークは、例えば、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(例えば、インターネット)である。1つ以上の通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にする別のデバイスを含んでもよい。
ソースデバイス12は、エンコーダ20を含み、追加でまたは任意選択で、ソースデバイス12は、ピクチャソース16と、ピクチャプリプロセッサ18と、通信インターフェース22とをさらに含んでもよい。特定の実施形態において、エンコーダ20、ピクチャソース16、ピクチャプリプロセッサ18、および通信インターフェース22は、ソースデバイス12内のハードウェア構成要素であってもよく、またはソースデバイス12内のソフトウェアプログラムであってもよい。説明は、以下のように個別に提供される。
ピクチャソース16は、現実世界のピクチャなどをキャプチャするように構成された任意のタイプのピクチャキャプチャデバイス、および/またはピクチャもしくはコメント(画面コンテンツの符号化について、画面上のいくつかのテキストも、符号化対象ピクチャまたは画像の一部と見なされる)を生成するための任意のタイプのデバイス、例えば、コンピュータアニメーションピクチャを生成するように構成されたコンピュータグラフィックス処理ユニット、または現実世界のピクチャもしくはコンピュータアニメーションピクチャ(例えば、画面コンテンツまたは仮想現実(virtual reality、VR)ピクチャ)および/もしくはそれらの任意の組み合わせ(例えば、拡張現実(augmented reality、AR)ピクチャ)を取得および/もしくは提供するように構成された任意のタイプのデバイスを含んでもよいか、またはそれらであってもよい。ピクチャソース16は、ピクチャをキャプチャするように構成されたカメラ、またはピクチャを記憶するように構成されたメモリであってもよい。ピクチャソース16は、任意のタイプの(内部または外部)インターフェースをさらに含んでもよく、そのインターフェースを介して、以前にキャプチャもしくは生成されたピクチャが記憶され、および/またはピクチャが取得もしくは受信される。ピクチャソース16がカメラである場合、ピクチャソース16は、例えば、ローカルカメラ、またはソースデバイスに統合された統合カメラであってもよい。ピクチャソース16がメモリである場合、ピクチャソース16は、例えば、ローカルメモリ、またはソースデバイスに統合された統合メモリであってもよい。ピクチャソース16がインターフェースを含む場合、インターフェースは、例えば、外部ビデオソースからピクチャを受信するための外部インターフェースであってもよい。外部ビデオソースは、例えば、カメラなどの外部ピクチャキャプチャデバイス、外部メモリ、または外部ピクチャ生成デバイスである。外部ピクチャ生成デバイスは、例えば、外部コンピュータグラフィックスプロセッサ、コンピュータ、またはサーバである。インターフェースは、独自のまたは標準化されたインターフェースプロトコルに従った任意のタイプのインターフェース、例えば、有線もしくはワイヤレスインターフェース、または光インターフェースであってもよい。
ピクチャは、サンプル(picture element)のニ次元アレイまたは行列と見なされてもよい。アレイ内のサンプルは、サンプリングポイントとも呼ばれてもよい。アレイまたはピクチャの水平方向(または軸)および垂直方向(または軸)におけるサンプリングポイントの量は、ピクチャのサイズおよび/または解像度を定義する。色の表現のために、3つの色成分が通常使用され、すなわち、ピクチャは、3つのサンプルアレイとして表されるか、またはそれらを含んでもよい。RGBフォーマットまたは色空間において、ピクチャは、対応する赤色、緑色、および青色のサンプルアレイを含む。しかしながら、ビデオコーディングにおいて、各サンプルは、通常、輝度/色度フォーマットまたは色空間において表現され、例えば、YCbCrフォーマットにおけるピクチャは、Y(ときにはLによって表される)によって示される輝度成分と、CbおよびCrによって示される2つの色度成分とを含む。輝度(略してluma)成分Yは、輝度またはグレーレベル強度(例えば、これら2つは、グレースケールピクチャでは同じである)を示し、2つの色度(略してchroma)成分CbおよびCrは、色度または色情報成分を表す。したがって、YCbCrフォーマットにおけるピクチャは、輝度サンプル値(Y)の輝度サンプルアレイと、色度値(CbおよびCr)の2つの色度サンプルアレイとを含む。RGBフォーマットにおけるピクチャは、YCbCrフォーマットにおけるピクチャにコンバートまたは変換されてもよく、逆もまた同様である。このプロセスは、色変換またはコンバートとも呼ばれる。ピクチャがモノクロの場合、ピクチャは、輝度サンプルアレイのみを含んでもよい。本出願のこの実施形態において、ピクチャソース16によってピクチャプリプロセッサ18に送信されるピクチャは、オリジナルピクチャデータ17とも呼ばれてもよい。
ピクチャプリプロセッサ18は、オリジナルピクチャデータ17を受信し、前処理済みピクチャ19または前処理済みピクチャデータ19を取得するために、オリジナルピクチャデータ17に対する前処理を実行し得る。例えば、ピクチャプリプロセッサ18によって実行される前処理は、トリミング、色フォーマットコンバート(例えば、RGBからYUVへ)、色補正、またはノイズ低減を含んでもよい。
エンコーダ20(ビデオエンコーダ20とも呼ばれる)は、前処理済みピクチャデータ19を受信し、符号化ピクチャデータ21を提供するために、関連する予測モード(本明細書の各実施形態における予測モードなど)を使用することによって、前処理済みピクチャデータ19を処理するように構成される(エンコーダ20の構造的詳細について、図2、図4、または図5に基づいて以下でさらに説明する)。いくつかの実施形態において、エンコーダ20は、本出願において説明されているインター予測方法のエンコーダ側適用を実装するために、以下で説明する各実施形態を実行するように構成されてもよい。
通信インターフェース22は、符号化ピクチャデータ21を受信し、記憶または直接再構成のためにリンク13を介して宛先デバイス14または任意の他のデバイス(例えば、メモリ)に符号化ピクチャデータ21を送信するように構成されてもよい。任意の他のデバイスは、復号または記憶のために使用される任意のデバイスであってもよい。通信インターフェース22は、例えば、リンク13を介する送信のために、符号化ピクチャデータ21を適切なフォーマット、例えば、データパケットにカプセル化するように構成されてもよい。
宛先デバイス14は、デコーダ30を含み、追加でまたは任意選択で、宛先デバイス14は、通信インターフェース28と、ピクチャポストプロセッサ32と、ディスプレイデバイス34とをさらに含んでもよい。説明は、以下のように個別に提供される。
通信インターフェース28は、ソースデバイス12または任意の他のソースから符号化ピクチャデータ21を受信するように構成されてもよい。任意の他のソースは、例えば、記憶デバイスであり、記憶デバイスは、例えば、符号化ピクチャデータ記憶デバイスである。通信インターフェース28は、ソースデバイス12と宛先デバイス14との間のリンク13を介して、または任意のタイプのネットワークを介して、符号化ピクチャデータ21を送信または受信するように構成されてもよい。リンク13は、例えば、直接の有線接続またはワイヤレス接続であり、任意のタイプのネットワークは、例えば、有線ネットワークもしくはワイヤレスネットワークもしくはそれらの任意の組み合わせ、または任意のタイプのプライベートネットワークもしくはパブリックネットワークもしくはそれらの任意の組み合わせである。通信インターフェース28は、例えば、符号化ピクチャデータ21を取得するために、通信インターフェース22を介して送信されたデータパケットをデカプセル化するように構成されてもよい。
通信インターフェース22と通信インターフェース28の両方は、単方向通信インターフェースまたは双方向通信インターフェースとして構成されてもよく、例えば、通信を確立するためにメッセージを送信および受信し、通信リンクおよび/または符号化ピクチャデータ送信などのデータ送信に関連する任意の他の情報を確認および交換するように構成されてもよい。
デコーダ30(デコーダ30とも呼ばれる)は、符号化ピクチャデータ21を受信し、復号ピクチャデータ31または復号ピクチャ31を提供するように構成される(デコーダ30の構造的詳細について、図3、図4、または図5に基づいて以下でさらに詳細に説明する)。いくつかの実施形態において、デコーダ30は、本出願において説明されているインター予測方法のデコーダ側適用を実装するために、以下で説明する各実施形態を実行するように構成されてもよい。
ピクチャポストプロセッサ32は、後処理済みピクチャデータ33を取得するために、復号ピクチャデータ31(再構成ピクチャデータとも呼ばれる)を後処理するように構成される。ピクチャポストプロセッサ32によって実行される後処理は、色フォーマットコンバート(例えば、YCbCrからRGBへ)、色補正、トリミング、再サンプリング、または任意の他の処理を含んでもよい。ピクチャポストプロセッサ32は、後処理済みピクチャデータ33をディスプレイデバイス34に送信するようにさらに構成されてもよい。
ディスプレイデバイス34は、ピクチャをユーザ、観察者などに表示するために、後処理済みピクチャデータ33を受信するように構成される。ディスプレイデバイス34は、再構成されたピクチャを提示するように構成された任意のタイプのディスプレイ、例えば、統合されたまたは外部のディスプレイまたはモニタであっても、またはそれを含んでもよい。例えば、ディスプレイは、液晶ディスプレイ(liquid crystal display、LCD)、有機発光ダイオード(organic light emitting diode、OLED)ディスプレイ、プラズマディスプレイ、プロジェクタ、マイクロLEDディスプレイ、液晶オンシリコン(liquid crystal on silicon、LCoS)ディスプレイ、デジタルライトプロセッサ(digital light processor、DLP)、または任意のタイプの他のディスプレイを含んでもよい。
図1Aは、ソースデバイス12および宛先デバイス14を別個のデバイスとして描いているが、デバイスの実施形態は、ソースデバイス12と宛先デバイス14の両方、またはソースデバイス12の機能と宛先デバイス14の機能の両方、すなわち、ソースデバイス12もしくは対応する機能と宛先デバイス14もしくは対応する機能の両方を含んでもよい。そのような実施形態では、ソースデバイス12または対応する機能および宛先デバイス14または対応する機能は、同じハードウェアおよび/もしくはソフトウェア、別個のハードウェアおよび/もしくはソフトウェア、またはそれらの組み合わせを使用することによって実装されてもよい。
説明に基づいて、当業者は、異なるユニットの機能または図1Aに示すソースデバイス12および/もしくは宛先デバイス14の複数の機能/1つの機能の存在および(正確な)分割が実際のデバイスおよびアプリケーションによって異なってもよいことを容易に理解する。ソースデバイス12および宛先デバイス14は、各々、任意のタイプのハンドヘルドデバイスまたは据え置き型デバイス、例えば、ノートブックコンピュータまたはラップトップコンピュータ、携帯電話、スマートフォン、タブレットまたはタブレットコンピュータ、ビデオカメラ、デスクトップコンピュータ、セットトップボックス、テレビ、カメラ、車載デバイス、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミング送信デバイス(コンテンツサービスサーバまたはコンテンツ配信サーバなど)、放送受信機デバイス、または放送送信機デバイスを含む、様々なデバイスのうちの任意の1つを含んでもよく、任意のタイプのオペレーティングシステムを使用してもしなくてもよい。
エンコーダ20およびデコーダ30は、各々、様々な適切な回路のうちの任意の1つ、例えば、1つ以上のマイクロプロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、特定用途向け集積回路(application-specific integrated circuit、ASIC)、フィールドプログラマブルゲートアレイ(field-programmable gate array、FPGA)、ディスクリートロジック、ハードウェア、またはそれらの任意の組み合わせとして実装されてもよい。技術が部分的にソフトウェアにおいて実装されている場合、デバイスは、ソフトウェア命令を適切な非一時的コンピュータ可読記憶媒体内に記憶してもよく、本開示における技術を実行するために1つ以上のプロセッサを使用することによってハードウェアにおいて命令を実行してもよい。前述の内容(ハードウェア、ソフトウェア、ハードウェアおよびソフトウェアの組み合わせなどを含む)のいずれも、1つ以上のプロセッサとして見なされてもよい。
場合によっては、図1Aに示すビデオコーディングシステム10は、単なる例であり、本出願における技術は、符号化デバイスと復号デバイスとの間のいかなるデータ通信も含むことを必要としないビデオコーディング設定(例えば、ビデオ符号化またはビデオ復号)に適用されてもよい。他の例において、データは、ローカルメモリから取り出されたり、ネットワークを介してストリーミングされたりしてもよい。ビデオ符号化デバイスは、データを符号化し、データをメモリ内に記憶し、および/またはビデオ復号デバイスは、データをメモリから取り出し、データを復号してもよい。いくつかの例において、符号化および復号は、互いに通信せず、データをメモリに符号化すること、および/またはデータをメモリから取り出し、データを復号することのみを行うデバイスによって実行される。
図1Bは、例示的な実施形態に係る、図2におけるエンコーダ20および/または図3におけるデコーダ30を含むビデオコーディングシステム40の一例の説明図である。ビデオコーディングシステム40は、本出願の実施形態における様々な技術の組み合わせを実装することができる。図示の実装形態において、ビデオコーディングシステム40は、イメージングデバイス41、エンコーダ20、デコーダ30(および/または処理ユニット46の論理回路47によって実装されるビデオエンコーダ/デコーダ)、アンテナ42、1つ以上のプロセッサ43、1つ以上のメモリ44、および/またはディスプレイデバイス45を含んでもよい。
図1Bに示すように、イメージングシステム41、アンテナ42、処理ユニット46、論理回路47、エンコーダ20、デコーダ30、プロセッサ43、メモリ44、および/またはディスプレイデバイス45は、互いに通信することができる。説明したように、ビデオコーディングシステム40は、エンコーダ20とデコーダ30の両方を有して示されているが、ビデオコーディングシステム40は、異なる例では、エンコーダ20のみ、またはデコーダ30のみを含んでもよい。
いくつかの例において、アンテナ42は、ビデオデータの符号化ビットストリームを送信または受信するように構成されてもよい。さらに、いくつかの例では、ディスプレイデバイス45は、ビデオデータを提示するように構成されてもよい。いくつかの例では、論理回路47は、処理ユニット46によって実装されてもよい。処理ユニット46は、特定用途向け集積回路(application-specific integrated circuit、ASIC)ロジック、グラフィックス処理ユニット、汎用プロセッサなどを含んでもよい。ビデオコーディングシステム40は、オプションのプロセッサ43も含んでもよい。オプションのプロセッサ43は、同様に、特定用途向け集積回路(application-specific integrated circuit、ASIC)ロジック、グラフィックス処理ユニット、汎用プロセッサなどを含んでもよい。いくつかの例において、論理回路47は、ビデオ符号化専用ハードウェアなどのハードウェアによって実装されてもよく、プロセッサ43は、ユニバーサルソフトウェア、オペレーティングシステムなどによって実装されてもよい。加えて、メモリ44は、任意のタイプのメモリ、例えば、揮発性メモリ(例えば、スタティックランダムアクセスメモリ(Static Random Access Memory、SRAM)またはダイナミックランダムアクセスメモリ(Dynamic Random Access Memory、DRAM))または不揮発性メモリ(例えば、フラッシュメモリ)であってもよい。非限定的な例において、メモリ44は、キャッシュメモリによって実装されてもよい。いくつかの例において、論理回路47は、(例えば、ピクチャバッファを実装するために)メモリ44にアクセスしてもよい。他の例では、論理回路47および/または処理ユニット46は、ピクチャバッファなどを実装するためにメモリ(例えば、キャッシュ)を含んでもよい。
いくつかの例において、論理回路によって実装されたエンコーダ20は、(例えば、処理ユニット46またはメモリ44によって実装された)ピクチャバッファと、(例えば、処理ユニット46によって実装された)グラフィックス処理ユニットとを含んでもよい。グラフィックス処理ユニットは、ピクチャバッファに通信可能に結合されてもよい。グラフィックス処理ユニットは、図2を参照して説明した様々なモジュール、および/または本明細書において説明されている任意の他のエンコーダシステムもしくはサブシステムを実装するために、論理回路47によって実装されたエンコーダ20を含んでもよい。論理回路は、本明細書において説明されている様々な動作を実行するように構成されてもよい。
いくつかの例において、デコーダ30は、図3におけるデコーダ30を参照して説明した様々なモジュール、および/または本明細書において説明されている任意の他のデコーダシステムもしくはサブシステムを実装するために、同様に論理回路47によって実装されてもよい。いくつかの例において、論理回路によって実装されたデコーダ30は、(例えば、処理ユニット46またはメモリ44によって実装された)ピクチャバッファと、(例えば、処理ユニット46によって実装された)グラフィックス処理ユニットとを含んでもよい。グラフィックス処理ユニットは、ピクチャバッファに通信可能に結合されてもよい。グラフィックス処理ユニットは、図3を参照して説明した様々なモジュール、および/または本明細書において説明されている任意の他のデコーダシステムもしくはサブシステムを実装するために、論理回路47によって実装されたデコーダ30を含んでもよい。
いくつかの例において、アンテナ42は、ビデオデータの符号化ビットストリームを受信するように構成されてもよい。説明したように、符号化ビットストリームは、本明細書において説明されているビデオフレーム符号化に関連するデータ、インジケータ、インデックス値、モード選択データなど、例えば、符号化パーティショニングに関連するデータ(例えば、変換係数もしくは量子化変換係数、(説明したような)オプションのインジケータ、および/またはコーディングパーティショニングを定義するデータ)を含んでもよい。ビデオコーディングシステム40は、アンテナ42に結合され、符号化ビットストリームを復号するように構成されたデコーダ30をさらに含んでもよい。ディスプレイデバイス45は、ビデオフレームを提示するように構成される。
本出願のこの実施形態におけるエンコーダ20を参照して説明した例について、デコーダ30は、逆のプロセスを実行するように構成されてもよいことが理解されるべきである。シグナリングシンタックス要素について、デコーダ30は、シンタックス要素を受信および解析し、それに応じて関連するビデオデータを復号するように構成されてもよい。いくつかの例において、エンコーダ20は、シンタックス要素を符号化ビデオビットストリームにエントロピー符号化してもよい。そのような例では、デコーダ30は、シンタックス要素を解析し、それに応じて関連するビデオデータを復号してもよい。
本出願のこの実施形態において説明した方法は、主にインター予測プロセスにおいて使用されることに留意すべきである。このプロセスは、エンコーダ20とデコーダ30の両方において存在する。本出願のこの実施形態におけるエンコーダ20およびデコーダ30は、各々、例えば、H.263、H.264、HEVV、MPEG-2、MPEG-4、VP8、もしくはVP9、または次世代ビデオ標準プロトコル(H.266など)のビデオ標準プロトコルにおける対応するエンコーダ/デコーダであってもよい。
図2は、本出願の実施形態を実装するように構成されたエンコーダ20の一例の概略的/概念的ブロック図である。図2の例において、エンコーダ20は、残差計算ユニット204と、変換処理ユニット206と、量子化ユニット208と、逆量子化ユニット210と、逆変換処理ユニット212と、再構成ユニット214と、バッファ216と、ループフィルタユニット220と、復号ピクチャバッファ(decoded picture buffer、DPB)230と、予測処理ユニット260と、エントロピー符号化ユニット270とを含む。予測処理ユニット260は、インター予測ユニット244と、イントラ予測ユニット254と、モード選択ユニット262とを含んでもよい。インター予測ユニット244は、動き推定ユニットと動き補償ユニット(この図には示さず)とを含んでもよい。図2に示すエンコーダ20は、ハイブリッドビデオエンコーダまたはハイブリッドビデオコーデックベースのビデオエンコーダとも呼ばれてもよい。
例えば、残差計算ユニット204、変換処理ユニット206、量子化ユニット208、予測処理ユニット260、およびエントロピー符号化ユニット270は、エンコーダ20の順方向信号経路を形成し、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、バッファ216、ループフィルタ220、復号ピクチャバッファ(decoded picture buffer、DPB)230、予測処理ユニット260などは、エンコーダの逆方向信号経路を形成する。エンコーダの逆方向信号経路は、デコーダの信号経路に対応する(図3におけるデコーダ30を参照)。
エンコーダ20は、入力202などを使用することによって、ピクチャ201またはピクチャ201のピクチャブロック203、例えば、ビデオまたはビデオシーケンスを形成する一連のピクチャ内のピクチャを受信する。ピクチャブロック203は、現在のピクチャブロックまたは符号化対象ピクチャブロックとも呼ばれてもよく、ピクチャ201は、現在のピクチャまたは符号化対象ピクチャと呼ばれてもよい(特に、現在のピクチャがビデオコーディングにおいて別のピクチャと区別される場合、例えば、同じビデオシーケンス内の他のピクチャは、現在のピクチャのビデオシーケンス内の以前に符号化および/または復号されたピクチャも含む)。
エンコーダ20の実施形態は、ピクチャ201をブロック203などの複数の非重複ブロックにパーティショニングするように構成されたパーティショニングユニット(図2には示さず)を含んでもよい。パーティショニングユニットは、ビデオシーケンス内のすべてのピクチャに対して同じブロックサイズを使用し、ブロックサイズを定義する対応するラスタを使用するように構成されてもよく、またはピクチャ間、サブセット間、ピクチャグループ間でブロックサイズを変更し、各ピクチャを対応するブロックにパーティショニングするように構成されてもよい。
一例において、エンコーダ20の予測処理ユニット260は、上記で説明したパーティショニング技術の任意の組み合わせを実行するように構成されてもよい。
ピクチャブロック203のサイズは、ピクチャ201のサイズよりも小さいが、ピクチャ201と同様に、ピクチャブロック203も、サンプル値を有するサンプルのニ次元アレイまたは行列であるか、またはそう見なされてもよい。言い換えれば、ピクチャブロック203は、例えば、1つのサンプルアレイ(例えば、モノクロピクチャ201の場合の輝度アレイ)、3つのサンプルアレイ(例えば、カラーピクチャの場合の1つの輝度アレイおよび2つの色度アレイ)、または使用されるカラーフォーマットに基づく任意の他の量および/またはタイプのアレイを含んでもよい。ピクチャブロック203の水平方向および垂直方向(または軸)におけるサンプルの量は、ピクチャブロック203のサイズを定義する。
図2に示すエンコーダ20は、ピクチャ201をブロックごとに符号化するように構成され、例えば、各ピクチャブロック203に対して符号化および予測を行うように構成される。
残差計算ユニット204は、ピクチャブロック203と予測ブロック265(予測ブロック265に関するさらなる詳細は、以下で提供される)とに基づいて残差ブロック205を計算するように構成され、例えば、ピクチャブロック203のサンプル値から予測ブロック265のサンプル値をサンプルごとに減算することによって、サンプルドメインにおいて残差ブロック205を取得するように構成される。
変換処理ユニット206は、変換ドメインにおいて変換係数207を取得するために、離散コサイン変換(discrete cosine transform、DCT)、または離散サイン変換(discrete sine transform、DST)などの変換を残差ブロック205のサンプル値に適用するように構成される。変換係数207は、残差変換係数とも呼ばれてもよく、変換ドメインにおける残差ブロック205を示す。
変換処理ユニット206は、DCT/DSTの整数近似、例えば、HEVC/H.265において規定されている変換を適用するように構成されてもよい。この整数近似は、通常、直交DCT変換と比較して、あるファクタによって比例的にスケーリングされる。順変換および逆変換によって取得された残差ブロックのノルムを維持するために、変換プロセスの一部として追加のスケールファクタが適用される。スケールファクタは、通常、いくつかの制約条件、例えば、2の累乗、変換係数のビット深度、またはシフト演算に使用される精度と実装コストとの間のトレードオフに基づいて選択される。例えば、逆変換処理ユニット212を使用することによるデコーダ30側における逆変換(および、対応して、逆変換処理ユニット212などを使用することによるエンコーダ20側における逆変換)には、特定のスケールファクタが指定され、対応して、変換処理ユニット206を使用することによるエンコーダ20側における順変換には、対応するスケールファクタが指定されてもよい。
量子化ユニット208は、量子化変換係数209を取得するために、スカラ量子化、ベクトル量子化などを適用することによって変換係数207を量子化するように構成される。量子化変換係数209は、量子化残差係数209とも呼ばれてもよい。量子化プロセスは、いくつかまたはすべての変換係数207に関連するビット深度を低減してもよい。例えば、nビット変換係数は、量子化中にmビット変換係数に切り捨てられてもよく、ここで、nは、mよりも大きい。量子化パラメータ(quantization parameter、QP)を調製することによって、量子化度が変更されてもよい。例えば、スケール量子化について、より細かい量子化またはより粗い量子化を達成するために、異なるスケールが適用されてもよい。量子化ステップが小さいほど細かい量子化に対応し、量子化ステップが大きいほど粗い量子化に対応する。適切な量子化ステップは、量子化パラメータ(quantization parameter、QP)によって示されてもよい。例えば、量子化パラメータは、適切な量子化ステップの事前定義されたセットへのインデックスであってもよい。例えば、より小さい量子化パラメータは、より細かい量子化(より小さい量子化ステップ)に対応してもよく、より大きい量子化パラメータは、より粗い量子化(より大きい量子化ステップ)に対応してもよく、またはその逆である。量子化は、量子化ステップによる除算と、対応する量子化、もしくは逆量子化ユニット210などによって実行される逆量子化とを含んでもよく、または量子化ステップによる乗算を含んでもよい。HEVCなどのいくつかの規格による実施形態において、量子化ステップを決定するために、量子化パラメータが使用されてもよい。一般に、量子化ステップは、除算を含む方程式の固定小数点近似によって、量子化パラメータに基づいて計算されてもよい。量子化ステップおよび量子化パラメータに使用される方程式の固定小数点近似において使用されるスケールのために変更されてもよい、残差ブロックのノルムを復元するために、量子化および量子化解除のために追加のスケールファクタが導入されてもよい。例示的な実装形態において、逆変換のスケールが量子化解除のスケールと組み合わされてもよい。代替的には、カスタマイズされた量子化テーブルが使用され、例えば、ビットストリームにおいてエンコーダからデコーダにシグナリングされてもよい。量子化は、損失のある操作であり、より大きい量子化ステップは、より大きい損失を示す。
逆量子化ユニット210は、量子化解除された係数211を取得するために、量子化ユニット208によって適用される量子化の逆量子化を量子化係数に適用するように構成され、例えば、量子化ユニット208と同じ量子化ステップに基づいて、またはそれを使用することによって、量子化ユニット208によって適用される量子化方式の逆量子化方式を適用するように構成される。量子化解除された係数211は、量子化解除された残差係数211と呼ばれてもよく、変換係数207に対応してもよいが、量子化によって生じる損失は、通常、変換係数とは異なる。
逆変換処理ユニット212は、サンプルドメインにおける逆変換ブロック213を取得するために、変換処理ユニット206によって適用される変換の逆変換、例えば、逆離散コサイン変換(discrete cosine transform、DCT)または逆離散サイン変換(discrete sine transform、DST)を適用するように構成される。逆変換ブロック213は、逆変換量子化解除されたブロック213または逆変換残差ブロック213とも呼ばれてもよい。
再構成ユニット214(例えば、加算器214)は、例えば、再構成された残差ブロック213のサンプル値と予測ブロック265のサンプル値とを加算することによって、サンプルドメインにおける再構成されたブロック215を取得するために、逆変換ブロック213(すなわち、再構成された残差ブロック213)を予測ブロック265に加算するように構成される。
任意選択で、ラインバッファ216などのバッファユニット216(または略して「バッファ」216)は、イントラ予測などのために、再構成されたブロック215と対応するサンプル値とをバッファリングまたは記憶するように構成される。他の実施形態において、エンコーダは、イントラ予測などの任意のタイプの推定および/または予測のために、バッファユニット216内に記憶されたフィルタリングされていない再構成されたブロックおよび/または対応するサンプル値を使用するように構成されてもよい。
例えば、エンコーダ20の実施形態は、バッファユニット216がイントラ予測のために再構成されたブロック215を記憶するように構成されるだけでなく、ループフィルタユニット220(図2には示さず)のフィルタリングされたブロック221を記憶するようにも構成されるように、および/またはバッファユニット216および復号ピクチャバッファユニット230が1つのバッファを形成するように構成されてもよい。他の実施形態は、フィルタリングされたブロック221および/または復号ピクチャバッファ230(図2には示さず)からのブロックもしくはサンプルを、イントラ予測のための入力または基礎として使用するように使用されてもよい。
ループフィルタユニット220(または略して「ループフィルタ」220)は、サンプル変換をスムーズに実行するように、またはビデオ品質を改善するように、フィルタリングされたブロック221を取得するために、再構成されたブロック215に対してフィルタリングを実行するように構成される。ループフィルタユニット220は、1つ以上のループフィルタ、例えば、デブロッキングフィルタ、サンプル適応オフセット(sample-adaptive offset、SAO)フィルタ、またはバイラテラルフィルタ、適応ループフィルタ(adaptive loop filter、ALF)、シャープ化もしくは平滑化フィルタ、もしくは協調フィルタなどの別のフィルタを表すことを意図している。ループフィルタユニット220は、図2においてループ内フィルタとして示されているが、ループフィルタユニット220は、他の構成ではループ後フィルタとして実装されてもよい。フィルタリングされたブロック221は、フィルタリングされた再構成ブロック221とも呼ばれてもよい。復号ピクチャバッファ230は、ループフィルタユニット220が再構成されたコーディングブロックに対するフィルタリング動作を実行した後、再構成されたコーディングブロックを記憶してもよい。
エンコーダ20(対応してループフィルタユニット220)の実施形態は、デコーダ30が復号などのために同じループフィルタパラメータを受信および適用することができるように、ループフィルタパラメータ(例えば、サンプル適応オフセット情報)を出力するために、例えば、ループフィルタパラメータを直接出力するか、またはエントロピー符号化ユニット270もしくは任意の他のエントロピー符号化ユニットがエントロピー符号化を実行した後にループフィルタパラメータを出力するために使用されてもよい。
復号ピクチャバッファ(decoded picture buffer、DPB)230は、ビデオエンコーダ20がビデオデータを符号化するための参照ピクチャデータを記憶する参照ピクチャメモリであってもよい。DPB230は、複数のメモリのうちの任意の1つ、例えば、ダイナミックランダムアクセスメモリ(dynamic random access memory、DRAM)(シンクロナスDRAM(synchronous DRAM、SDRAM)、磁気抵抗RAM(magnetoresistive RAM、MRAM)、または抵抗変化型RAM(resistive RAM、RRAM)を含む)、または別のタイプのメモリであってもよい。DPB230およびバッファ216は、同じメモリまたは別個のメモリによって提供されてもよい。一例において、復号ピクチャバッファ(decoded picture buffer、DPB)230は、フィルタリングされたブロック221を記憶するように構成される。復号ピクチャバッファ230は、同じ現在のピクチャ、または以前に再構成されたピクチャなどの異なるピクチャの以前に再構成されフィルタリングされたブロック221などの他の以前にフィルタリングされたブロックを記憶するようにさらに構成されてもよく、インター予測などのために、完全に以前に再構成された、すなわち、復号されたピクチャ(ならびに対応する参照ブロックおよび対応するサンプル)および/または部分的に再構成された現在のピクチャ(ならびに対応する参照ブロックおよび対応するサンプル)を提供してもよい。一例において、再構成されたブロック215がループ内フィルタリングなしで再構成される場合、復号ピクチャバッファ(decoded picture buffer、DPB)230は、再構成されたブロック215を記憶するように構成される。
予測処理ユニット260は、ブロック予測処理ユニット260とも呼ばれ、ブロック203(現在のピクチャの現在のブロック203)および再構成されたピクチャデータ、例えば、バッファ216内の同じ(現在の)ピクチャからの参照サンプル、ならびに/または復号ピクチャバッファ230内の1つ以上の以前の復号ピクチャからの参照ピクチャデータ231を受信または取得し、予測のためにそのようなデータを処理し、すなわち、インター予測ブロック245またはイントラ予測ブロック255であってもよい予測ブロック265を提供するように構成される。
モード選択ユニット262は、残差ブロック205を計算し、再構成されたブロック215を再構成するために、予測モード(例えば、イントラまたはインター予測モード)を選択し、および/または対応する予測ブロック245もしくは255を予測ブロック265として選択するように構成されてもよい。
モード選択ユニット262の実施形態は、(例えば、予測処理ユニット260によってサポートされる予測モードから)予測モードを選択するために使用されてもよい。予測モードは、最良の一致もしくは最小の残差(最小の残差は、伝送または記憶におけるよりよい圧縮を意味する)を提供するか、または最小のシグナリングオーバヘッド(最小のシグナリングオーバヘッドは、伝送または記憶におけるよりよい圧縮を意味する)を提供するか、またはこれら2つを考慮するかもしくはバランスさせる。モード選択ユニット262は、レート歪み最適化(rate distortion optimization、RDO)に基づいて予測モードを決定し、すなわち、最小のレート歪み最適化を提供する予測モードを選択するか、または関連するレート歪みが少なくとも予測モード選択基準を満たす予測モードを選択するように構成されてもよい。
エンコーダ20の一例によって実行される(例えば、予測処理ユニット260を使用することによる)予測処理および(例えば、モード選択ユニット262を使用することによる)モード選択について、以下に詳細に説明する。
上記で説明したように、エンコーダ20は、(所定の)予測モードセットから最良のまたは最適な予測モードを決定または選択するように構成される。予測モードセットは、例えば、イントラ予測モードおよび/またはインター予測モードを含んでもよい。
イントラ予測モードセットは、35の異なるイントラ予測モード、例えば、DC(または平均)モードおよび平面モードなどの無指向性モード、もしくはH.265において定義された指向性モードを含んでもよく、または67の異なるイントラ予測モード、例えば、DC(または平均)モードおよび平面モードなどの無指向性モード、もしくはH.266において定義された開発途上の指向性モードを含んでもよい。
可能な実装形態において、インター予測モードセットは、利用可能な参照ピクチャ(例えば、DBP230内に記憶された復号ピクチャの少なくとも一部)と他のインター予測パラメータとに依存し、例えば、参照ピクチャ全体が使用されるか、もしくは参照ピクチャの一部のみが使用されるか、例えば、現在のブロックの領域を囲む検索ウィンドウ領域が最良に一致する参照ブロックについて検索されるかどうかに依存し、ならびに/または2分の1サンプル補間および/もしくは4分の1サンプル補間などのサンプル補間が適用されるかどうかに依存する。インター予測モードセットは、例えば、高度動きベクトル予測(Advanced Motion Vector Prediction、AMVP)モードおよびマージ(merge)モードを含んでもよい。特定の実装中、インター予測モードセットは、本出願のこの実施形態において改善された制御点ベースのAMVPモードおよび制御点ベースのマージモードを含んでもよい。一例において、イントラ予測ユニット254は、以下に説明するインター予測技術の任意の組み合わせを実行するように構成されてもよい。
前述の予測モードに加えて、本出願のこの実施形態において、スキップモードおよび/またはダイレクトモードも適用されてもよい。
予測処理ユニット260は、例えば、四分木(quad-tree、QT)パーティショニング、二分木(binary-tree、BT)パーティショニング、三分木(triple-tree、TT)パーティショニング、またはそれらの任意の組み合わせを反復的に使用することによって、ピクチャブロック203をより小さいブロックパーティションまたはサブブロックにパーティションし、ブロックパーティションまたはサブブロックの各々に対して予測などを実行するようにさらに構成されてもよい。モード選択は、パーティションされたピクチャブロック203の木構造を選択することと、ブロックパーティションまたはサブブロックの各々に適用される予測モードを選択することとを含む。
インター予測ユニット244は、動き推定(motion estimation、ME)ユニット(図2には示さず)と、動き補償(motion compensation、MC)ユニット(図2には示さず)とを含んでもよい。動き推定ユニットは、動き推定を実行するために、ピクチャブロック203(現在のピクチャ201の現在のピクチャブロック203)および復号ピクチャ231、または少なくとも1つ以上の以前に再構成されたブロック、例えば、以前の復号ピクチャ31とは異なる1つ以上の他の再構成されたブロックを受信または取得するように構成される。例えば、ビデオシーケンスは、現在のピクチャと、以前の復号ピクチャ31とを含んでもよい。言い換えれば、現在のピクチャおよび以前の復号ピクチャ31は、ビデオシーケンスを形成する、またはピクチャシーケンスを形成するピクチャのシーケンスの一部であってもよい。
例えば、エンコーダ20は、同じピクチャ、または複数の他のピクチャ内の異なるピクチャの複数の参照ブロックから参照ブロックを選択し、参照ピクチャ、および/または参照ブロックの位置(X-Y座標)と現在のブロックの位置との間のオフセット(空間オフセット)を、インター予測パラメータとして動き推定ユニット(図2には示さず)に提供するように構成されてもよい。このオフセットは、動きベクトル(motion vector、MV)とも呼ばれる。
動き補償ユニットは、インター予測パラメータを取得し、インター予測ブロック245を取得するために、インター予測パラメータに基づいて、またはそれを使用することによってインター予測を実行するように構成される。動き補償ユニット(図2には示さず)によって実行される動き補償は、動き推定によって決定された動き/ブロックベクトルに基づいて予測ブロックをフェッチまたは生成する(あるいは、サブサンプル精度で補間を実行する)ことを含んでもよい。補間フィルタリング中、追加のサンプルが既知のサンプルから生成されてもよく、それによって、ピクチャブロックを符号化するために使用されてもよい候補予測ブロックの量を潜在的に増加させる。現在のピクチャブロックのPUのために使用される動きベクトルが受信されると、動き補償ユニット246は、参照ピクチャリスト内で動きベクトルが指し示す予測ブロックを位置特定してもよい。動き補償ユニット246は、ビデオデコーダ30がビデオスライスのピクチャブロックを復号するときにシンタックス要素を使用するように、ブロックおよびビデオスライスに関連するシンタックス要素をさらに生成してもよい。
具体的には、インター予測ユニット244は、シンタックス要素をエントロピー符号化ユニット270に送信してもよく、シンタックス要素は、インター予測パラメータ(複数のインター予測モードがトラバースされた後に現在のブロックの予測のために使用されるインター予測モードを選択するための指示情報など)を含む。可能な応用シナリオにおいて、1つのインター予測モードのみがある場合、代替的には、インター予測パラメータは、シンタックス要素内に担持されなくてもよい。この場合、デコーダ30は、デフォルトの予測モードにおいて直接復号を実行してもよい。インター予測ユニット244は、インター予測技術の任意の組み合わせを実行するように構成されてもよいことが理解されうる。
イントラ予測ユニット254は、イントラ推定を実行するために、同じピクチャのピクチャブロック203(現在のピクチャブロック)と、再構成された隣接ブロックなどの1つ以上の以前に再構成されたブロックとを取得、例えば、受信するように構成される。例えば、エンコーダ20は、複数の(所定の)イントラ予測モードからイントラ予測モードを選択するように構成されてもよい。
エンコーダ20の実施形態は、最適化基準に基づいて、例えば、最小残差(例えば、現在のピクチャブロック203に最も類似する予測ブロック255を提供するイントラ予測モード)または最小レート歪みに基づいてイントラ予測モードを選択するように構成されてもよい。
イントラ予測ユニット254は、選択されたイントラ予測モードのイントラ予測パラメータに基づいてイントラ予測ブロック255を決定するようにさらに構成される。いずれにしても、ブロックのために使用されるイントラ予測モードを選択した後、イントラ予測ユニット254は、イントラ予測パラメータをエントロピー符号化ユニット270に提供するように、すなわち、ブロックのために使用される選択されたイントラ予測モードを示すための情報を提供するようにさらに構成される。一例において、イントラ予測ユニット254は、以下のイントラ予測技術の任意の組み合わせを実行するように構成されてもよい。
具体的には、イントラ予測ユニット254は、シンタックス要素をエントロピー符号化ユニット270に送信してもよく、シンタックス要素は、イントラ予測パラメータ(複数のイントラ予測モードがトラバースされた後、現在のブロックの予測のために使用されるイントラ予測モードを選択するための指示情報など)を含む。可能な応用シナリオにおいて、1つのイントラ予測モードのみがある場合、代替的には、イントラ予測パラメータは、シンタックス要素内に担持されなくてもよい。この場合、デコーダ30は、デフォルトの予測モードにおいて直接復号を実行してもよい。
エントロピー符号化ユニット270は、例えば、符号化ビットストリームの形態において出力272を使用することによって出力されうる符号化ピクチャデータ21を取得するために、エントロピー符号化アルゴリズムまたは方式(例えば、可変長コーディング(variable length coding、VLC)方式、コンテキスト適応VLC(context adaptive VLC、CAVLC)方式、算術コーディング方式、コンテキスト適応2値算術コーディング(context adaptive binary arithmetic coding、CABAC)方式、シンタックスベースコンテキスト適応2値算術コーディング(syntax-based context-adaptive binary arithmetic coding、SBAC)方式、確立区分パーティショニングエントロピー(probability interval partitioning entropy、PIPE)コーディング方式、または別のエントロピー符号化方法もしくは技術)を、量子化残差係数209、インター予測パラメータ、イントラ予測パラメータ、および/またはループフィルタパラメータのうちの1つ以上(またはなし)に適用するように構成される。符号化ビットストリームは、ビデオデコーダ30に送信されてもよく、またはビデオデコーダ30による後の送信または検索のためにアーカイブされてもよい。エントロピー符号化ユニット270は、符号化されている現在のビデオスライスの別のシンタックス要素に対してエントロピー符号化を実行するようにさらに構成されてもよい。
ビデオエンコーダ20の別の構造的変形例は、ビデオストリームを符号化するように構成されてもよい。例えば、非変換ベースのエンコーダ20は、いくつかのブロックまたはフレームについて、変換処理ユニット206なしで残差信号を直接量子化してもよい。別の実装形態において、エンコーダ20は、1つのユニットに結合された量子化ユニット208と逆量子化ユニット210とを有してもよい。
具体的には、本出願のこの実施形態において、エンコーダ20は、以下の実施形態において説明するインター予測方法を実装するように構成されてもよい。
ビデオエンコーダ20の別の構造的変形例は、ビデオストリームを符号化するように構成されてもよいことが理解されるべきである。例えば、いくつかのピクチャブロックまたはピクチャフレームについて、ビデオエンコーダ20は、変換処理ユニット206が処理を実行する必要なしに、および対応して、逆変換処理ユニット212が処理を実行する必要なしに、残差信号を直接量子化してもよい。代替的には、いくつかのピクチャブロックまたはピクチャフレームについて、ビデオエンコーダ20は、残差データを生成せず、対応して、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、および逆変換処理ユニット212が処理を実行する必要はない。代替的には、ビデオエンコーダ20は、フィルタ220が処理を実行する必要なしに、再構成されたピクチャブロックを参照ブロックとして直接記憶してもよい。代替的には、ビデオエンコーダ20内の量子化ユニット208および逆量子化ユニット210は、互いに組み合わされてもよい。ループフィルタ220は、任意選択であり、ロスレス圧縮符号化の場合、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、および逆変換処理ユニット212は、任意選択である。異なる応用シナリオにおいて、インター予測ユニット244およびイントラ予測ユニット254は、選択的に使用されてもよいことが理解されるべきである。
図3は、本出願の実施形態を実装するように構成されたデコーダ30の一例の概略的/概念的ブロック図である。ビデオデコーダ30は、復号ピクチャ231を取得するために、エンコーダ20などによって符号化された符号化ピクチャデータ(例えば、符号化ビットストリーム)21を受信するように構成される。復号プロセスにおいて、ビデオデコーダ30は、ビデオエンコーダ20からビデオデータを受信し、例えば、符号化ビデオスライスのピクチャブロックを示す符号化ビデオビットストリームと関連するシンタックス要素とを受信する。
図3の例において、デコーダ30は、エントロピー復号ユニット304と、逆量子化ユニット310と、逆変換処理ユニット312と、再構成ユニット314(例えば、加算器314)と、バッファ316と、ループフィルタ320と、復号ピクチャバッファ330と、予測処理ユニット360とを含む。予測処理ユニット360は、インター予測ユニット344と、イントラ予測ユニット354と、モード選択ユニット362とを含んでもよい。いくつかの例において、ビデオデコーダ30は、図2におけるビデオエンコーダ20を参照して説明した符号化トラバーサルと略逆の復号トラバーサルを実行してもよい。
エントロピー復号ユニット304は、量子化係数309、復号コーディングパラメータ(図3には示さず)など、例えば、インター予測パラメータ、イントラ予測パラメータ、ループフィルタパラメータ、および/または別のシンタックス要素(復号)のうちのいずれか1つまたはすべてを取得するために、符号化ピクチャデータ21に対してエントロピー復号を実行するように構成される。エントロピー復号ユニット304は、インター予測パラメータ、イントラ予測パラメータ、および/または別のシンタックス要素を予測処理ユニット360に転送するようにさらに構成される。ビデオデコーダ30は、ビデオスライスレベルにおけるシンタックス要素および/またはビデオブロックレベルにおけるシンタックス要素を受信してもよい。
逆量子化ユニット310は、逆量子化ユニット110と同じ機能を有してもよく、逆変換処理ユニット312は、逆変換処理ユニット212と同じ機能を有してもよく、再構成ユニット314は、再構成ユニット214と同じ機能を有してもよく、バッファ316は、バッファ216と同じ機能を有してもよく、ループフィルタ320は、ループフィルタ220と同じ機能を有してもよく、復号ピクチャバッファ330は、復号ピクチャバッファ230と同じ機能を有してもよい。
予測処理ユニット360は、インター予測ユニット344とイントラ予測ユニット354とを含んでもよい。インター予測ユニット344は、インター予測ユニット244の機能と同様の機能を有してもよく、イントラ予測ユニット354は、イントラ予測ユニット254の機能と同様の機能を有してもよい。予測処理ユニット360は、通常、ブロック予測を実行しおよび/または符号化データ21から予測ブロック365を取得し、予測関連パラメータおよび/または選択された予測モードに関する情報を、例えば、エントロピー復号ユニット304から受信または(明示的または暗黙的に)取得するように構成される。
ビデオスライスがイントラ符号化(I)スライスとして符号化される場合、予測処理ユニット360のイントラ予測ユニット354は、シグナリングされたイントラ予測モードと、現在のフレームまたはピクチャの以前の復号ブロックからのデータとに基づいて、現在のビデオスライスのピクチャブロックのために使用される予測ブロック365を生成するように構成される。ビデオフレームがインターコーディングされた(すなわち、BまたはP)スライスとして符号化される場合、予測処理ユニット360のインター予測ユニット344(例えば、動き補償ユニット)は、エントロピー復号ユニット304から受信された動きベクトルと別のシンタックス要素とに基づいて、現在のビデオスライスのビデオブロックのために使用される予測ブロック365を生成するように構成される。インター予測について、予測ブロックは、1つの参照ピクチャリスト内の参照ピクチャのうちの1つから生成されてもよい。ビデオデコーダ30は、DPB330内に記憶された参照ピクチャに基づいて、デフォルトの構築技術を使用することによって、リスト0およびリスト1の参照フレームリストを構築してもよい。
予測処理ユニット360は、動きベクトルと別のシンタックス要素とを解析することによって、現在のビデオスライスのビデオブロックのために使用される予測情報を決定し、復号されている現在のビデオブロックのために使用される予測ブロックを生成するために予測情報を使用するように構成される。例えば、予測処理ユニット360は、いくつかの受信されたシンタックス要素を使用することによって、現在のビデオスライスのビデオブロックを復号するために、ビデオスライスのビデオブロックを符号化するために使用される予測モード(例えば、イントラまたはインター予測)と、インター予測スライスタイプ(例えば、Bスライス、Pスライス、またはGPBスライス)と、スライスのために使用される参照ピクチャリスト内のピクチャのうちの1つ以上の構成情報と、スライスのために使用される各インター符号化ビデオブロックの動きベクトルと、スライスのために使用される各インター符号化ビデオブロックのインター予測状態と、他の情報とを決定する。本開示の別の例において、ビットストリームからビデオデコーダ30によって受信されるシンタックス要素は、適応パラメータセット(adaptive parameter set、APS)、シーケンスパラメータセット(sequence parameter set、SPS)、ピクチャパラメータセット(picture parameter set、PPS)、またはスライスヘッダのうちの1つ以上におけるシンタックス要素を含む。
逆量子化ユニット310は、ビットストリームにおいて提供され、エントロピー復号ユニット304によって復号された量子化変換係数に対して逆量子化(すなわち、量子化解除)を実行するように構成されてもよい。逆量子化プロセスは、適用されるべき量子化度を決定し、適用されるべき逆量子化度を決定するために、ビデオスライス内の各ビデオブロックに対して、ビデオエンコーダ20によって計算された量子化パラメータを使用することを含んでもよい。
逆変換処理ユニット312は、サンプルドメインにおける残差ブロックを生成するために、逆変換(例えば、逆DCT、逆整数変換、または概念的に同様の逆変換プロセス)を変換係数に適用するように構成される。
再構成ユニット314(例えば、加算器314)は、例えば、再構成された残差ブロック313のサンプル値を予測ブロック365のサンプル値に加算することによって、サンプルドメインにおける再構成されたブロック315を取得するために、逆変換ブロック313(すなわち、再構成された残差ブロック313)を予測ブロック365に加算するように構成される。
ループフィルタユニット320(符号化ループ内または符号化ループ後)は、サンプル変換をスムーズに実行するか、またはビデオ品質を改善するように、フィルタリングされたブロック321を取得するために、再構成されたブロック315をフィルタリングするように構成される。一例において、ループフィルタユニット320は、以下のフィルタリング技術の任意の組み合わせを実行するように構成されてもよい。ループフィルタユニット320は、1つ以上のループフィルタ、例えば、デブロッキングフィルタ、サンプル適応オフセット(sample-adaptive offset、SAO)フィルタ、またはバイラテラルフィルタ、適応ループフィルタ(adaptive loop filter、ALF)、シャープ化もしくは平滑化フィルタ、もしくは協調フィルタなどの別のフィルタを表すことを意図している。ループフィルタユニット320は、図3においてループ内フィルタとして示されているが、ループフィルタユニット320は、他の構成ではループ後フィルタとして実装されてもよい。
所与のフレームまたはピクチャ内の復号ビデオブロック321は、次いで、後続の動き補償のために使用される参照ピクチャを記憶する復号ピクチャバッファ330内に記憶される。
デコーダ30は、復号ピクチャ31をユーザに提示するため、またはユーザが見るために復号ピクチャ31を提供するために、出力332などを使用することによって復号ピクチャ31を出力するように構成される。
ビデオデコーダ30の別の変形例は、圧縮されたビットストリームを復号するように構成されてもよい。例えば、デコーダ30は、ループフィルタユニット320なしで出力ビデオストリームを生成してもよい。例えば、非変換ベースのデコーダ30は、いくつかのブロックまたはフレームについて、逆変換処理ユニット312なしで残差信号を直接、量子化解除してもよい。別の実装形態において、ビデオデコーダ30は、1つのユニットに結合された逆量子化ユニット310と逆変換処理ユニット312とを有してもよい。
具体的には、本発明のこの実施形態では、デコーダ30は、以下の実施形態において説明するインター予測方法を実装するように構成される。
ビデオデコーダ30の別の構造的変形例は、符号化ビデオビットストリームを復号するように構成されてもよいことが理解されるべきである。例えば、ビデオデコーダ30は、フィルタ320が処理を実行する必要なしに、出力ビデオストリームを生成してもよい。代替的には、いくつかのピクチャブロックまたはピクチャフレームについて、ビデオデコーダ30のエントロピー復号ユニット304は、復号によって量子化係数を取得せず、対応して、逆量子化ユニット310および逆変換処理ユニット312が処理を実行する必要はない。ループフィルタ320は、任意選択であり、ロスレス圧縮の場合、逆量子化ユニット310および逆変換処理ユニット312は、任意選択である。異なる応用シナリオにおいて、インター予測ユニットおよびイントラ予測ユニットは、選択的に使用されてもよいことが理解されるべきである。
本出願におけるエンコーダ20およびデコーダ30において、手順の処理結果は、さらに処理された後、次の手順に出力されてもよいことが理解されるべきである。例えば、補間フィルタリング、動きベクトル導出、またはループフィルタリングなどの手順の後、対応する手順の処理結果に対して、クリップまたはシフトシフトなどの動作がさらに実行される。
例えば、現在のピクチャブロックの制御点の動きベクトル、または隣接アフィンコーディングブロックの動きベクトルから導出される現在のピクチャブロックのサブブロックの動きベクトルがさらに処理されてもよい。これは、本出願において限定されない。例えば、動きベクトルの値は、特定のビット幅範囲内にあるように制限される。動きベクトルの許容ビット幅がbitDepthであると仮定すると、動きベクトルの値は、-2^(bitDepth-1)から2^(bitDepth-1)-1の範囲であり、ここで、「^」という記号は、累乗を表す。bitDepthが16である場合、値は、-32768から32767の範囲である。bitDepthが18である場合、値は、-131072から131071の範囲である。別の例について、動きベクトル(例えば、1つの8×8ピクチャブロック内の4つの4×4サブブロックの動きベクトルMV)の値は、4つの4×4サブブロックのMVの整数部分間の最大差がNサンプルを超えないように、例えば、1サンプルを超えないように制限される。
以下の2つの方法は、動きベクトルの値を特定のビット幅範囲内であるように制限するために使用されてもよい。
方法1:動きベクトルのオーバフロー最上位ビットが除去される。
ux=(vx+2bitDepth)%2bitDepth
vx=(ux≧2bitDepth-1)?(ux-2bitDepth):ux
uy=(vy+2bitDepth)%2bitDepth
vy=(uy≧2bitDepth-1)?(uy-2bitDepth):uy
ここで、vxは、ピクチャブロックまたはピクチャブロックのサブブロックの動きベクトルの水平成分であり、vyは、ピクチャブロックまたはピクチャブロックのサブブロックの動きベクトルの垂直成分であり、uxおよびuyは、中間値であり、bitDepthは、ビット幅を表す。
例えば、vxの値は、-32769であり、前述の式に従って得られる32767である。値は、バイナリ補足コードの形式においてコンピュータ内に記憶され、-32769のバイナリ補足コードは、1,0111,1111,1111,1111(17ビット)であり、コンピュータは、オーバフローが発生すると、最上位ビットを破棄する。したがって、vxの値は、0111,1111,1111,1111、すなわち32767であり、これは、式に従って得られた結果と一致する。
方法2:以下の式に示すように、動きベクトルに対してClippingが実行される。
vx=Clip3(-2bitDepth-1,2bitDepth-1-1,vx)
vy=Clip3(-2bitDepth-1,2bitDepth-1-1,vy)
ここで、vxは、ピクチャブロックまたはピクチャブロックのサブブロックの動きベクトルの水平成分であり、vyは、ピクチャブロックまたはピクチャブロックのサブブロックの動きベクトルの垂直成分であり、x、y、およびzは、MVクランピングプロセスClip3の3つの入力値に対応し、Clip3は、zの値を範囲[x,y]にクリッピングすることを表す。
図4は、本出願の実施形態に係る、ビデオコーディングデバイス400(例えば、ビデオ符号化デバイス400またはビデオ復号デバイス400)の概略構造図である。ビデオコーディングデバイス400は、本明細書において説明されている実施形態を実装するのに適している。一実施形態において、ビデオコーディングデバイス400は、ビデオデコーダ(例えば、図1Aにおけるデコーダ30)またはビデオエンコーダ(例えば、図1Aにおけるエンコーダ20)であってもよい。別の実施形態において、ビデオコーディングデバイス400は、図1Aにおけるデコーダ30または図1Aにおけるエンコーダ20の1つ以上の構成要素であってもよい。
ビデオコーディングデバイス400は、データを受信するように構成された入力ポート410および受信機ユニット(Rx)420と、データを処理するように構成されたプロセッサ、論理ユニット、または中央処理装置(CPU)430と、データを送信するように構成された送信機ユニット(Tx)440および出力ポート450と、データを記憶するように構成されたメモリ460とを含む。ビデオコーディングデバイス400は、光信号または電気信号の出力または入力のために、入力ポート410と、受信機ユニット420と、送信機ユニット440と、出力ポート450とに結合された光-電気構成要素と電気-光(EO)構成要素とをさらに含んでもよい。
プロセッサ430は、ハードウェアおよびソフトウェアによって実装される。プロセッサ430は、1つ以上のCPUチップ、コア(例えば、マルチコアプロセッサ)、FPGA、ASIC、およびDSPとして実装されてもよい。プロセッサ430は、入力ポート410、受信機ユニット420、送信機ユニット440、出力ポート450、およびメモリ460と通信する。プロセッサ430は、コーディングモジュール470(例えば、符号化モジュール470または復号モジュール470)を含む。符号化/復号モジュール470は、本出願の実施形態において提供される彩度ブロック予測方法を実装するために、本明細書において開示される実施形態を実装する。例えば、符号化/復号モジュール470は、様々なコーディング動作を実行、処理、または提供する。したがって、符号化/復号モジュール470は、ビデオコーディングデバイス400の機能を実質的に拡張し、異なる状態間のビデオコーディングデバイス400の切り替えに影響を与える。代替的には、符号化/復号モジュール470は、メモリ460内に記憶された命令として実装され、プロセッサ430によって実行される。
メモリ460は、1つ以上のディスク、テープデバイス、およびソリッドステートドライブを含み、オーバフローデータ記憶デバイスとして、これらのプログラムが実行のために選択されたときにプログラムを記憶し、プログラム実行中に読み出される命令およびデータを記憶するために使用されてもよい。メモリ460は、揮発性および/または不揮発性であってもよく、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、3値連想メモリ(ternary content-addressable memory、TCAM)、および/またはスタティックランダムアクセスメモリ(SRAM)であってもよい。
図5は、例示的な実施形態に係る、図1Aにおけるソースデバイス12と宛先デバイス14のいずれかまたは両方として使用されてもよい装置500の簡略化されたブロック図である。装置500は、本出願の技術を実装してもよい。言い換えれば、図5は、本出願の一実施形態に係る符号化デバイスまたは復号デバイス(略してコーディングデバイス500)の実装形態の概略ブロック図である。コーディングデバイス500は、プロセッサ510と、メモリ530と、バスシステム550とを含んでもよい。プロセッサおよびメモリは、バスシステムを介して接続される。メモリは、命令を記憶するように構成される。プロセッサは、メモリ内に記憶された命令を実行するように構成される。コーディングデバイスのメモリは、プログラムコードを記憶し、コーディングデバイスのプロセッサは、本出願において説明されているビデオ符号化または復号方法を実行するために、メモリ内に記憶されたプログラムコードを呼び出してもよい。繰り返しを避けるため、詳細についてここでは説明しない。
本出願のこの実施形態において、プロセッサ510は、中央処理装置(Central Processing Unit、略して「CPU」)であってもよい。代替的には、プロセッサ510は、別の汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)または別のプログラマブル論理デバイス、ディスクリートゲートまたはトランジスタ論理デバイス、ディスクリートハードウェア構成要素などであってもよい。汎用プロセッサは、マイクロプロセッサ、任意の従来のプロセッサなどであってもよい。
メモリ530は、読み出し専用メモリ(ROM)またはランダムアクセスメモリ(RAM)を含んでもよい。任意の他の適切なタイプの記憶デバイスがメモリ530として使用されてもよい。メモリ530は、バス550を介してプロセッサ510によってアクセスされるコードおよびデータ531を含んでもよい。メモリ530は、オペレーティングシステム533とアプリケーションプログラム535とをさらに含んでもよい。アプリケーションプログラム535は、プロセッサ510が本出願において説明されているビデオ符号化または復号方法(詳細には、本出願において説明されているインター予測方法)を実行することを可能にする少なくとも1つのプログラムを含む。例えば、アプリケーションプログラム535は、アプリケーション1~Nを含んでもよく、本出願において説明されているビデオ符号化または復号方法を実行するためのビデオ符号化または復号アプリケーション(略してビデオコーディングアプリケーション)をさらに含む。
データバスに加えて、バスシステム550は、電力バス、制御バス、状態信号バスなどをさらに含んでもよい。しかしながら、明確な説明のために、図中の様々なタイプのバスは、バスシステム550として示されている。
任意選択で、コーディングデバイス500は、1つ以上の出力デバイス、例えば、ディスプレイ570をさらに含んでもよい。一例において、ディスプレイ570は、ディスプレイと、タッチ入力を感知するように動作可能なタッチ感知要素とを組み合わせたタッチ感知ディスプレイであってもよい。ディスプレイ570は、バス550を介してプロセッサ510に接続されてもよい。
以下は、本出願の実施形態における解決策について詳細に説明する。
ビデオ符号化は、イントラ予測(Intra Prediction)、インター予測(Inter Prediction)、変換(Transform)、量子化(Quantization)、エントロピー符号化(Entropy encode)、およびループ内フィルタリング(in-loop filtering)(主に、デブロッキングフィルタリング、de-blocking filtering)などのプロセスを主に含む。ピクチャがコーディングブロックにパーティショニングされた後、イントラ予測またはインター予測が実行される。次いで、残差が取得された後、変換および量子化が実行される。最後に、エントロピー符号化が実行され、ビットストリームが出力される。ここで、コーディングブロックは、サンプルを含むM×Nアレイである(Mは、Nに等しくてもよく、またはNに等しくなくてもよい)。加えて、各サンプル位置のサンプル値は、既知である。
イントラ予測は、現在のピクチャ内の再構成された領域内のサンプルのサンプル値を使用することによって、現在のコーディングブロック内のサンプルのサンプル値を予測することである。
インター予測は、現在のピクチャ内の現在のコーディングブロックについて一致する参照ブロックについて再構成されたピクチャを検索し、現在のコーディングブロックの動き情報を取得し、次いで、動き情報に基づいて現在のコーディングブロック内のサンプルのサンプル値の予測情報または予測子(情報および値は、以下において区別されない)を計算することである。動き情報を計算するプロセスは、動き推定(Motion estimation、ME)と呼ばれ、現在のコーディングブロック内のサンプルのサンプル値の予測子を計算するプロセスは、動き補償(Motion compensation、MC)と呼ばれる。
現在のコーディングブロックの動き情報は、予測方向指示情報(一般に、前方予測、後方予測、または双方向予測)と、参照ブロックを指し示す2つの動きベクトル(Motion vector、MV)と、参照ブロックが位置するピクチャの指示情報(一般に、参照インデックスReference indexとして示される)とを含むことが留意されるべきである。
前方予測は、参照ブロックを取得するために、現在のコーディングブロックに対して前方参照ピクチャセットから参照ピクチャを選択することである。後方予測は、参照ブロックを取得するために、現在のコーディングブロックに対して後方参照ピクチャセットから参照ピクチャを選択することである。双方向予測は、参照ブロックを取得するために、前方参照ピクチャセットから参照ピクチャを選択し、後方参照ピクチャセットから参照ピクチャを選択することである。双方向予測が実行される場合、現在のコーディングブロックに対して2つの参照ブロックがある。各参照ブロックは、動きベクトルと参照フレームインデックスとを使用することによって示される必要がある。次いで、現在のブロック内のサンプルのサンプル値の予測子が、2つの参照ブロック内のサンプルのサンプル値に基づいて決定される。
動き推定中、参照ピクチャ内の現在のコーディングブロックに対して複数の参照ブロックが試行される必要があり、予測のために最終的に使用される特定の参照ブロックが、レート歪み最適化(rate-distortion optimization、RDO)または他の方法によって決定される。
イントラ予測またはインター予測によって予測情報が取得された後、現在のコーディングブロック内のサンプルのサンプル値から対応する予測情報を減算することによって、残差情報が取得される。次いで、残差情報は、離散コサイン変換(discrete cosine transformation、DCT)法などを使用することによって変換され、量子化およびエントロピー符号化によってビットストリームが取得される。予測信号が再構成された残差信号と結合された後、再構成された信号を取得するために、フィルタリングが実行される必要がある。再構成された信号は、後続の符号化のための参照信号として使用される。
復号は、符号化の逆のプロセスである。例えば、最初にエントロピー復号、逆量子化、および逆変換によって残差情報が取得され、現在のコーディングブロックに対してイントラ予測またはインター予測のどちらが実行されるのかを決定するために、ビットストリームが復号される。イントラ予測が実行される場合、イントラ予測方法を使用することによって、現在のコーディングブロックの周囲の再構成された領域内のサンプルのサンプル値に基づいて、予測情報が構築される。インター予測が実行される場合、解析によって動き情報が取得される必要があり、解析によって取得された動き情報に基づいて、再構成されたピクチャ内で参照ブロックが決定され、ブロック内のサンプルのサンプル値は、予測情報として使用される。このプロセスは、動き補償(Motion compensation、MC)と呼ばれる。予測情報と残差情報とを組み合わせ、フィルタリング動作を実行することによって、再構成された情報が取得されうる。
HEVCにおいて、高度動きベクトル予測(Advanced Motion Vector Prediction、AMVP)モードおよびマージ(Merge)モードの2つのインター予測モードが使用される。
AMVPモードにおいて、現在のコーディングブロックの空間的に隣接するコーディングブロックまたは時間的に隣接するコーディングブロックの動き情報に基づいて、候補動きベクトルリストが構築される。次いで、候補動きベクトルリスト内で最適な動きベクトルが決定され、現在のコーディングブロックの動きベクトル予測子(Motion vector predictor、MVP)として使用される。式J=SAD+λに従ってレート歪みコストが計算され、ここで、Jは、レート歪みコストRD Costであり、SADは、オリジナルサンプル値と、候補動きベクトル予測子を使用する動き推定によって取得された予測サンプル値との間の差分絶対値和(Sum of Absolute Differences、SAD)であり、Rは、ビットレートであり、λは、ラグランジュ乗数である。エンコーダ側は、候補動きベクトルリスト内の選択された動きベクトル予測子のインデックス値と、参照フレームのインデックス値とをデコーダ側に転送する。さらに、現在のコーディングブロックの実際の動きベクトルを取得するために、MVPを中心とした近傍において動き検索が実行される。エンコーダ側は、MVPと実際の動きベクトルとの間の差分(motion vector difference)をデコーダ側に転送する。
Mergeモードにおいて、現在のコーディングブロックの空間的に隣接するコーディングブロックまたは時間的に隣接するコーディングブロックの動き情報に基づいて、候補動き情報リストが構築される。次いで、レート歪みコストに基づいて候補動き情報リスト内で最適な動き情報が決定され、現在のコーディングブロックの動き情報として使用される。次に、候補動き情報リスト内の最適な動き情報の位置のインデックス値(以下、merge indexと示す)がデコーダ側に転送される。現在のコーディングブロックの空間候補動き情報と時間候補動き情報とを図6に示す。空間候補動き情報は、5つの空間的に隣接するブロック(A0、A1、B0、B1、およびB2)からのものである。隣接ブロックが利用できない場合、またはインター予測モードが使用される場合、隣接ブロックの動き情報は、候補動き情報リストに追加されない。現在のコーディングブロックの時間的候補動き情報は、参照フレームおよび現在のフレームのピクチャ順序カウント(picture order count、POC)に基づいて、参照フレーム内の対応する位置におけるブロックのMVをスケーリングすることによって取得される。参照フレーム内のT位置におけるブロックが利用可能かどうかが最初に決定される。ブロックが利用できない場合、C位置におけるブロックが選択される。
HEVCにおけるインター予測において、コーディングブロック内のすべてのサンプルは、同じ動き情報を有し、次いで、コーディングブロック内のサンプルの予測子を取得するために、動き情報に基づいて動き補償が実行される。
ビデオシーケンスは、通常はフレーム(Frame)と呼ばれる特定の量のピクチャを含む。隣接するピクチャは、通常、類似しており、すなわち、多くの冗長性がある。隣接するフレーム間の冗長性を排除することによって、圧縮比を高めるために、動き補償が実行される。動き補償は、隣接するフレーム(ここで、「隣接する」とは、2つのフレームが符号化関係の点では隣接しているが、再生順序の点では必ずしも隣接していないことを示す)間の差を記述するための方法であり、インター予測プロセスの一部である。動き補償が実行される前に、コーディングブロックの動き情報は、動き推定またはビットストリーム復号によって取得されている。動き情報は、(1)前方予測と、後方予測と、双方向予測とを含むコーディングブロックの予測方向であって、前方予測が、前の符号化フレームを使用することによってコーディングブロックが予測されることを示し、後方予測が、後続の符号化フレームを使用することによってコーディングブロックが予測されることを示し、双方向予測が、前方符号化フレームと後方符号化フレームの両方を使用することによってコーディングブロックが予測されることを示す、予測方向と、(2)現在のコーディングブロックの参照ブロックが位置するフレームを示す、コーディングブロックの参照フレームインデックスと、(3)参照ブロックに対するコーディングブロックの動き変位を示す、コーディングブロックの動きベクトルMVであって、MVが、それぞれ、水平方向における参照ブロックに対するコーディングブロックの動き変位と、垂直方向における参照ブロックに対するコーディングブロックの動き変位とを示す、水平成分(MVxとして示す)と垂直成分(MVyとして示す)とを含む、動きベクトルMVとを主に含む。前方予測または後方予測がコーディングブロックに対して実行される場合、1つのMVをのみがある。双方向予測がコーディングブロックに対して実行される場合、2つのMVがある。図7は、前述の動き情報の説明を示す。図7、ならびに動き情報および予測情報についての以下の説明において、0は、「前方」を示し、1は、「後方」を示す。例えば、Ref0は、前方参照フレームを表し、Ref1は、後方参照フレームを表し、MV0は、前方動きベクトルを表し、MV1は、後方動きベクトルを表す。A、B、およびCは、それぞれ、前方参照ブロック、現在のコーディングブロック、および後方参照ブロックを表す。Curは、現在のコーディングフレームを示し、破線は、Bの移動軌跡を示す。動き補償は、動き情報に基づいて参照ブロックを見つけ、コーディングブロックの予測ブロックを取得するために参照ブロックを処理するプロセスである。
前方予測の基本的な動き補償プロセスは、以下の通りである。図7に示すように、現在のコーディングブロックは、ブロックBであり、Bの幅および高さは、それぞれWおよびHである。この場合、動き情報に基づいて、現在のコーディングブロックBの前方参照フレームがRef0フレームであり、現在のコーディングブロックBの前方動きベクトルがMV0=(MV0x,MV0y)であることがわかる。Curフレーム内のコーディングブロックBが符号化される場合、最初に、Curフレーム内のBの左上隅の座標(i,j)に基づいて、Ref0フレーム内で同じ座標点が見つけられ、ブロックBの幅および高さに基づいて、Ref0内のブロックB'が取得されてもよい。次いで、ブロックB'は、B'のMV0に基づいて、ブロックAに移動される。最後に、現在のコーディングブロックBの予測ブロックを取得するために、ブロックAに対して補間処理が実行される。現在のコーディングブロックBの予測ブロック内の各サンプルのサンプル値は、ブロックB内の対応するサンプルの予測子と呼ばれる。後方予測の動き補償プロセスは、前方予測の動き補償プロセスと同じであり、違いは、参照方向のみである。後方予測動き補償および前方予測動き補償によって取得される予測ブロックは、それぞれ、前方予測ブロックおよび後方予測ブロックと呼ばれることが留意されるべきである。双方向予測がコーディングブロックに対して実行されない場合、取得される前方予測ブロックおよび取得される後方予測ブロックは、現在のコーディングブロックの予測ブロックである。
双方向予測について、動き情報に基づいて、前方予測動き補償の間中および後方予測動き補償の間中に、前方予測ブロックおよび後方予測ブロックがそれぞれ取得され、次いで、前方予測ブロックおよび後方予測ブロック内の同じ位置におけるサンプル値に対する加重予測および双方向オプティカルフロー(Bi-directional optical flow、BIOまたはBDOF)によって、コーディングブロックBの予測ブロックが取得される。
加重予測方法において、現在のコーディングブロックの予測子が計算される場合、前方予測ブロックのサンプル値および後方予測ブロックの等方性サンプル値に対して、加重加算のみが順次実行される必要があり、すなわち、
PredB(i,j)=ω0PredA(i,j)+ω1PredC(i,j) (1)
である。
式(1)において、PredB(i,j)、PredA(i,j)、およびPredC(i,j)は、それぞれ、座標(i,j)における現在のコーディングブロックの予測ブロックの予測子、前方予測ブロックの予測子、および後方予測ブロックの予測子であり、ω0およびω1(0≦ω0≦1、0≦ω1≦1、およびω0+ω1=1)は、加重係数であり、ω0およびω1の値は、エンコーダによって異なってもよい。一般に、ω0およびω1は、両方とも1/2である。
図8は、加重加算による現在のコーディングブロックの予測ブロックを取得する例を示す。図8において、PredB、PredA、およびPredCは、それぞれ、現在のコーディングブロックの予測ブロック、前方予測ブロック、および後方予測ブロックであり、4×4のサイズを有する。予測ブロック内の小ブロックの値は、点の予測子であり、左上隅を原点として有する座標系がPredB、PredA、およびPredCに対して確立される。例えば、座標(0,0)におけるPredBの予測子は、
PredB(0,0)=ω0PredA(0,0)+ω1PredC(0,0)
=ω0a0,0+ω1c0,0
である。
座標(0,1)におけるPredBの予測子は、
PredB(0,1)=ω0PredA(0,1)+ω1PredC(0,1)
=ω0a0,1+ω1c0,1
である。
他の点が順次計算され、詳細については説明しない。
双方向予測加重予測技術は、計算において単純であるが、そのようなブロックベースの予測補償方法は、非常に粗く、特に複雑なテクスチャを有するピクチャに対して不十分な予測効果しか達成せず、低い圧縮効率しか達成しないことが分かりうる。
BIOにおいて、前方予測ブロックと後方予測ブロックとを取得するために、現在のCUに対して双方向予測動き補償が実行され、次いで、前方予測子と後方予測子とに基づいて、現在のCU内の各4×4サブブロックの精緻化動きベクトルが導出され、最後に、現在のCUの予測ブロックを最終的に取得するために、現在のコーディングブロック内の各サンプルに対して再び補償が実行される。
各4×4サブブロックの精緻化動きベクトル(v
x,v
y)は、L0およびL1の予測子を最小化するために、BIOをサブブロックの周りの6×6ウィンドウΩに適用することによって取得される。具体的には、(v
x,v
y)は、式に従って導出される。
ここで、
は、floor関数であり(floor(A)は、A以下の最大整数を表す)、th'
BIO=2
13-BDであり、th'
BIOは過度に大きい精緻化動きベクトルによって引き起こされる誤転送を防ぐためのしきい値であり、S
2,m=S
2>>12およびS
2,s=S
2&(2
12-1)であり、BDは、現在のサンプルビット幅であり、演算?は、S
1>0の場合、
であり、その他の場合、v
x=0であることを示し、&は、ビットAND演算である。
S
1、S
2、S
3、S
5、およびS
6は、以下の式に従って計算される。
ここで、I
(k)(i,j)は、現在のCUのサンプル位置(i,j)の予測子であり(kは、0または1に等しく、0は、「前方」を示し、1は、「後方」を示し、以下同じである)、
および
は、それぞれ、同じ位置(i,j)の水平勾配および垂直勾配であり、以下の式に従って取得される。
式(2)に従って精緻化動きベクトルが取得された後、現在のブロック内の各サンプルの最終予測子が以下の式に従って決定される。
shiftおよびooffsetは、15-BDおよび1<<(14-BD)+2・(1<<13)であり、rnd(.)は、rounding関数(四捨五入)である。
4×4サブブロックの精緻化動きベクトルは、前方および後方予測子I
(k)(x,y)と、4×4サブブロックが位置する6×6領域の前方および後方水平および垂直勾配
および
とを使用することによって計算される必要があり、6×6領域の勾配は、8×8領域の予測子を使用することによって計算される必要がある。したがって、補間フィルタを使用することによって前方および後方予測子が取得される場合、(W+2)*(H+2)の勾配を計算するために、(W+4)*(H+4)のサイズを有する予測サンプルブロックを取得するために、それぞれ2行および2列ずつ周囲に拡張が実行される必要があり、ここで、Wは、現在のCUの幅であり、Hは、現在のCUの高さである。
BIOの複雑さを低減するために、従来技術では、CUの境界において特別な処理が実行される。
最初に、8タップフィルタを使用することによって、W*H領域の予測子が取得され、1行および1列のみだけ周囲に拡張が実行される。(W+2)*(H+2)領域の予測サンプル値を取得するために、bilinearフィルタを使用することによって、拡張領域の予測子が取得される。
次いで、(W+2)*(H+2)領域の予測サンプル値と式(5)とに基づいて、W*H領域の勾配が計算されてもよい。
最後に、padding方法に従って、(W+2)*(H+2)領域の勾配を取得するために、周囲のW*H領域の勾配に対して拡張が実行され、(W+2)*(H+2)領域の予測子を取得するために、周囲のW*H領域の予測子に対して拡張が実行される。Paddingは、図9に示されており、すなわち、エッジのサンプル値が拡張領域に割り当てられる。
BIOの具体的な実装プロセスは、以下の通りである。
ステップ1:現在のCUの動き情報を決定する。
現在のCUの動き情報は、mergeモード、AMVPモード(背景における説明を参照)、または別のモードを使用することによって決定されてもよい。これは、本明細書では限定されない。
動き情報を決定するための別の方法も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
ステップ2:現在のCUがBIOの使用条件を満たすかどうかを決定する。
双方向予測が現在のCUに対して実行され、前方参照フレーム番号POC_L0と、後方参照フレーム番号POC_L1と、現在のフレーム番号POC_Curとの間の関係が以下の式を満たす場合、現在のCUは、BIOの使用条件を満たす。
(POC_L0-POC_Cur)*(POC_L1-POC_Cur)<0
BIOが使用されるかどうかは、現在のCUのサイズが事前設定しきい値よりも大きいかどうかを決定することによっても決定されてもよいことが留意されるべきである。例えば、現在のCUの高さHが8以上であり、現在のCUの幅Wが8以上である場合にのみ、BIOが使用されうる。
BIOの別の使用条件も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
現在のCUがBIOの使用条件を満たす場合、ステップ3が実行され、そうでない場合、別の方法において動き補償が実行される。
ステップ3:現在のCUの前方および後方予測子を計算する。
前方および後方予測子I(k)(i,j)を取得するために、動き情報を使用することによって動き補償が実行され、ここで、i=-1..cuWおよびj=-1..cuHである((cuW+2)*(cuH+2)の予測行列が取得される)。
8タップ補間フィルタを使用することによって補間を実行することによって取得されるI(k)(i,j)、i=0..cuW-1、およびj=0..cuH-1において、別の位置(1行および1列の拡張が実行される)の予測子が、bilinear補間フィルタを使用することによって補間を実行することによって取得される。
拡張領域の予測子は、別の方法を使用することによって、例えば、8タップ補間フィルタを使用することによって、または整数サンプル位置における参照サンプルを直接使用することによっても取得されてもよいことが留意されるべきである。これは、本明細書では限定されない。
SADがしきい値TH_CU未満であるかどうかを決定するために、前方予測子と後方予測子との間のSADが計算され、SADがしきい値TH_CU未満である場合、BIOは、実行されず、そうでない場合、BIOは、実行されることが留意されるべきである。別の決定方法も本出願に適用されてもよく、詳細について、本明細書では説明しない。
しきい値TH_CUは、(1<<(BD-8+shift))*cuW*cuHに設定されてもよく、shiftは、Max(2,14-BD)に設定されてもよい。
ステップ4:現在のCUの前方予測子と後方予測子とに基づいて、水平勾配と垂直勾配とを計算する。
水平勾配および垂直勾配
および
は、式(4)に従って前方予測子と後方予測子とに基づいて計算され、ここで、i=0..cuW-1およびj=0..cuH-1である(cuW*cuHの予測行列が取得される)。
ステップ5:現在のCUの前方予測子および後方予測子と、水平勾配および垂直勾配とに対してpaddingを実行する。
I
(k)(i,j)と、
と、
とを取得するために、図9における方法を使用することによってPaddingが実行され、ここで、i=-1..cuWおよびj=-1..cuHである((cuW+2)*(cuH+2)の予測行列、水平勾配行列、および垂直勾配行列が取得される)。
ステップ6:各4×4サブブロックの精緻化動きベクトルを導出し、次いで重み付けを実行する。
各4×4サブブロックについて、式(2)に従ってvxおよびvyが取得される。最後に、各4×4サブブロックの予測子を取得するために、式(6)に従って重み付けが実行される。
各4×4サブブロックの前方予測子と後方予測子との間のSADは、SADがしきい値TH_SCU未満であるかどうかを決定するために計算されてもよいことが留意されるべきである。SADがしきい値TH_SCU未満である場合、加重平均が直接実行され、または、そうでない場合、式(2)に従ってvxおよびvyが取得され、次いで、式(6)に従って重み付けが実行される。別の決定方法も本出願に適用されてもよく、詳細について、本明細書では説明しない。TU_SCUは、1<<(BD-3+shift)に設定されてもよい。
仮想パイプラインデータユニット(VPDUs、Virtual pipeline data units)は、非重複M×M輝度/N×M色度処理ユニットである。ハードウェアデコーダについて、連続するVPDUが、異なるパイプラインレベルにおいて同時に処理される。異なるVPDUは、異なるパイプラインレベルにおいて同時に処理される。
VPDU分割原理は、以下の通りである。
(1)VPDUが1つ以上のCUを含む場合、CUは、VPDU内に完全に含まれる。
(2)CUが1つ以上のVPDUを含む場合、VPDUは、CU内に完全に含まれる。
従来技術では、VPDUのサイズは、64×64である。図10に示すように、破線は、VPDUの境界を表し、実線は、CUの境界を表す。図11は、無効なCU分割を示す。
CUが複数のVPDUを含む場合、ハードウェアデコーダは、処理のためにVPDUを連続するVPDUに分割する。例えば、CUのサイズが128×128であり、VPDUのサイズが64×64である場合、4つの連続するVPDUが処理される。
本出願において解決されるべき技術的問題は、BIOを介してCUに対して動き補償が実行されるとき、CUの境界サンプルを処理する方法がCUの内部サンプルを処理する方法と異なることである。CU内にVPDU分割境界がある場合、BIO予測中、VPDU処理の結果がCU処理の結果と一致することを保証するために、境界は、CUの内部サンプルの方法において処理されることを必要とし、その結果、実装の複雑さが増す。
図12を参照すると、本出願の一実施形態は、インター予測方法を提供する。方法は、図2に示すエンコーダ内のインター予測ユニット244または図3に示すデコーダ内のインター予測ユニット344に適用されてもよい。方法は、双方向インター予測方法であってもよく、以下のステップを含む。
ステップS101:事前設定ピクチャ分割幅Widthおよび処理対象ピクチャブロックの幅cuWにおいてより小さい幅を選択し、ここで、より小さい幅は、blkWとして示され、第1のピクチャブロックの幅として使用され、事前設定ピクチャ分割高さHeightおよび処理対象ピクチャブロックの高さcuHにおいてより小さい高さを選択し、ここで、より小さい高さは、blkHとして示され、第1のピクチャブロックの高さとして使用される。
この実施形態における方法がエンコーダに適用される場合、ピクチャを符号化するとき、エンコーダは、ピクチャを処理対象ピクチャブロックに分割する。このステップにおいて、処理対象ピクチャブロックが取得され、次いで、より小さい幅blkW=min(Width,cuW)が選択され、より小さい幅blkWが第1のピクチャブロックの幅として使用され、より小さい高さblkH=min(Height,cuH)が選択され、より小さい高さblkHが第1のピクチャブロックの高さとして使用される。
この実施形態における方法がデコーダに適用される場合、デコーダは、エンコーダからビデオビットストリームを受信し、ビデオビットストリームは、処理対象ピクチャブロックを含む。このステップにおいて、処理対象ピクチャブロックがビデオビットストリームから抽出され、次いで、より小さい幅blkW=min(Width,cuW)が選択され、より小さい幅blkWが第1のピクチャブロックの幅として使用され、より小さい高さblkH=min(Height,cuH)が選択され、より小さい高さblkHが第1のピクチャブロックの高さとして使用される。
事前設定ピクチャ分割幅Widthおよび事前設定ピクチャ分割高さHeightは、それぞれ、VPDUの幅および高さに等しくてもよい。代替的には、事前設定ピクチャ分割幅Widthは、64、32、または16などの値であり、事前設定ピクチャ分割高さHeightは、64、32、または16などの値である。例えば、Width=64およびHeight=64、またはWidth=32およびHeight=32、またはWidth=16およびHeight=16、またはWidth=64およびHeight=32、またはWidth=32およびHeight=64、またはWidth=64およびHeight=16、またはWidth=16およびHeight=64、またはWidth=32およびHeight=16、またはWidth=16およびHeight=32である。
ステップ102:第1のピクチャブロックの幅blkWおよび高さblkHに基づいて、処理対象ピクチャブロック内の複数の第1のピクチャブロックを決定する。
実行可能な実装形態において、処理対象ピクチャブロックの幅および高さは、それぞれ、第1のピクチャブロックの幅および高さと同じであり、すなわち、処理対象ピクチャブロックは、1つの第1のピクチャブロックのみを含むことが理解されるべきである。第1のピクチャブロックの予測子を取得することは、処理対象ピクチャブロックの予測子を取得することである。
任意の第1のピクチャブロックの予測子は、以下のステップ103から107における動作に従って取得される。
ステップ103:処理対象ピクチャブロックの動き情報に基づいて、第1のピクチャブロックの第1の予測ブロックを取得し、ここで、第1の予測ブロックの幅は、第1のピクチャブロックの幅よりも大きく、第1の予測ブロックの高さは、第1のピクチャブロックの高さよりも大きい。
処理対象ピクチャブロックの動き情報は、第1のピクチャブロックの動き情報を含み、第1のピクチャブロックの動き情報は、参照ピクチャおよび動きベクトルなどの情報を含む。この実施形態において、オプティカルフローベースの双方向予測方法(すなわち、前述のBIOまたはBDOF関連技術)がインター予測のために使用される。したがって、第1のピクチャブロックの動き情報は、前方参照ピクチャ、後方参照ピクチャ、前方動きベクトル、および後方動きベクトルなどの情報を含む。
この実施形態における方法がエンコーダに適用される場合、エンコーダは、mergeモード、AMVPモード、または別のモードにおいて処理対象ピクチャブロックの動き情報を決定してもよく、処理対象ピクチャブロックの動き情報は、処理対象ピクチャブロック内の各第1のピクチャブロックの動き情報を含む。このステップにおいて、エンコーダによって決定される処理対象ピクチャブロックの動き情報が取得され、第1のピクチャブロックの動き情報が処理対象ピクチャブロックの動き情報から取得される。
この実施形態における方法がデコーダに適用される場合、デコーダによってエンコーダから受信されるビデオビットストリームは、処理対象ピクチャブロックの動き情報を含み、処理対象ピクチャブロックの動き情報は、処理対象ピクチャブロック内の各第1のピクチャブロックの動き情報を含む。このステップにおいて、処理対象ピクチャブロックの動き情報がビデオビットストリームから抽出され、第1のピクチャブロックの動き情報が処理対象ピクチャブロックの動き情報から取得される。
第1のピクチャブロックの第1の予測ブロックは、第1の前方予測ブロックと第1の後方予測ブロックとを含む。このステップにおいて、第1のピクチャブロックの第1の前方予測ブロックおよび第1の後方予測ブロックは、以下のステップ(1)~(8)において取得されてもよい。ステップ(1)~(8)は、以下のようであってもよい。
(1):処理対象ピクチャブロック内の第1のピクチャブロックの第1の位置と、第1のピクチャブロックの動き情報とに基づいて、前方参照ピクチャ内の第1の前方領域を決定し、ここで、第1の前方領域の幅は、blkW+2であり、第1の前方領域の高さは、blkH+2である。
例えば、図13を参照すると、第1のピクチャブロックBの動き情報は、前方参照ピクチャRef0と、後方参照ピクチャRef1と、前方動きベクトルMV0と、後方動きベクトルMV1とを含む。第2の前方領域B11が、第1のピクチャブロックBの第1の位置に基づいて、前方参照ピクチャRef0内で決定され、ここで、第2の前方領域B11の幅は、blkWであり、第2の前方領域B11の高さは、blkHである。第3の前方領域B12が、前方動きベクトルMV0と、第2の前方領域B11の位置とに基づいて決定され、ここで、第3の前方領域B12の幅は、blkWであり、第3の前方領域B12の高さは、blkHである。第3の前方領域B12を含む第1の前方領域A1が決定され、ここで、第1の前方領域A1の幅は、blkW+2であり、第1の前方領域A1の高さは、blkH+2であり、第3の前方領域B12の中心は、第1の前方領域A1の中心と一致する。
(2):第1の前方領域のコーナー位置が前方参照ピクチャ内の前方参照ピクチャ内のサンプル位置と一致するかどうかを決定し、第1の前方領域のコーナー位置が前方参照ピクチャ内のサンプル位置と一致する場合、第1のピクチャブロックの第1の前方予測ブロックとして機能するように、前方参照ピクチャから第1の前方領域内のピクチャブロックを取得し、または第1の前方領域のコーナー位置が前方参照ピクチャ内のサンプル位置と一致しない場合、ステップ(3)を実行する。
例えば、図13を参照すると、第1の前方領域A1の左上隅が例として使用されている。第1の前方領域A1の左上隅のコーナー位置が前方参照ピクチャRef0内の(15,16)であると仮定すると、左上隅のコーナー位置は、前方参照ピクチャRef0内のサンプル位置と一致し、前方参照ピクチャRef0内のサンプル位置は、(15,16)である。別の例について、第1の前方領域A1の左上隅のコーナー位置が前方参照ピクチャRef0内の(15.3,16.2)であると仮定すると、左上隅のコーナー位置は、前方参照ピクチャRef0内のサンプル位置と一致せず、すなわち、前方参照ピクチャRef0内の位置(15.3,16.2)においてサンプルがない。
(3):前方参照ピクチャ内の第1の前方領域のコーナー位置に最も近いサンプルを決定し、サンプルをコーナーとして使用することによって、第4の前方領域を決定し、ここで、第4の前方領域の幅は、blkW+2であり、第4の前方領域の高さは、blkH+2である。
第1の前方領域の任意のコーナー位置について、第1の前方領域の左上隅の位置が例として使用されると仮定する。前方参照ピクチャ内で左上隅の位置に最も近いサンプルが決定され、サンプルを左上隅として使用することによって、第4の前方領域が決定される。第4の前方領域の幅は、blkW+2であり、第4の前方領域の高さは、blkH+2である。
例えば、図13を参照すると、第1の前方領域A1の左上隅のコーナー位置は、(15.3,16.2)であり、コーナー位置(15.3,16.2)に最も近いサンプルの位置は、前方参照ピクチャRef0内の(15,16)であると決定される。位置(15,16)におけるサンプルを左上隅として使用することによって、第4の前方領域A2が決定される。第4の前方領域A2の幅は、blkW+2であり、第4の前方領域A2の高さは、blkH+2である。
(4):第4の前方領域を含む第5の前方領域を決定し、ここで、第4の前方領域の中心は、第5の前方領域の中心と一致し、第5の前方領域の幅は、blkW+n+1であり、第5の前方領域の高さは、blkH+n+1であり、前方参照ピクチャから第5の前方領域内のピクチャブロックを取得し、第1のピクチャブロックの第1の前方予測ブロックを取得するために、補間フィルタを使用することによってピクチャブロックに対して補間フィルリングを実行し、ここで、第1の前方予測ブロックの幅は、blkW+2であり、第1の前方予測ブロックの高さは、blkH+2であり、nは、補間フィルタのタップ数である。
例えば、8タップ補間フィルタが例として使用される。図13を参照すると、第4の前方領域A2を含む第5の前方領域A3が決定される。第4の前方領域A2の中心は、第5の前方領域A3の中心と一致し、第5の前方領域A3の幅は、blkW+9であり、第5の前方領域A3の高さは、blkH+9である。第5の前方領域A3内のピクチャブロックが前方参照ピクチャRef0から取得され、第1のピクチャブロックBの第1の前方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングが実行される。第1の前方予測ブロックの幅は、blkW+2であり、第1の前方予測ブロックの高さは、blkH+2である。
(5):第1のピクチャブロックの第1の位置と動き情報とに基づいて、後方参照ピクチャ内の第1の後方領域を決定し、ここで、第1の後方領域の幅は、blkW+2であり、第1の後方領域の高さは、blkH+2である。
例えば、図13を参照すると、第1のピクチャブロックBの第1の位置に基づいて、後方参照ピクチャRef1内で第2の後方領域C11が決定され、ここで、第2の後方領域C11の幅は、blkWであり、第2の後方領域C11の高さは、blkHである。後方動きベクトルMV1と、第2の後方領域C11の位置とに基づいて、第3の後方領域C12が決定され、ここで、第3の後方領域C12の幅は、blkWであり、第3の後方領域C12の高さは、blkHである。第3の後方領域C12を含む第1の後方領域D1が決定され、ここで、第1の後方領域D1の幅は、blkW+2であり、第1の後方領域D1の高さは、blkH+2であり、第3の後方領域C12の中心は、第1の後方領域D1の中心と一致してもよい。
(6):第1の後方領域のコーナー位置が後方参照ピクチャ内の後方参照ピクチャ内のサンプル位置と一致するかどうかを決定し、第1の後方領域のコーナー位置が後方参照ピクチャ内のサンプル位置と一致する場合、第1のピクチャブロックの第1の後方予測ブロックとして機能するように、後方参照ピクチャから第1の後方領域内のピクチャブロックを取得し、または第1の後方領域のコーナー位置が後方参照ピクチャ内のサンプル位置と一致しない場合、ステップ(7)を実行する。
例えば、図13を参照すると、第1の後方領域A1の左上隅が例として使用されている。第1の後方領域D1の左上隅のコーナー位置が後方参照ピクチャRef1内の(5,6)であると仮定すると、左上隅のコーナー位置は、後方参照ピクチャRef0内のサンプル位置と一致し、後方参照ピクチャRef0内のサンプル位置は、(5,6)である。別の例について、第1の後方領域D1の左上隅のコーナー位置が後方参照ピクチャRef0内の(5.3,6.2)であると仮定すると、左上隅のコーナー位置は、後方参照ピクチャRef0内のサンプル位置と一致せず、すなわち、後方参照ピクチャRef0内の位置(5.3,6.2)においてサンプルがない。
(7):後方参照ピクチャ内の第1の後方領域のコーナー位置に最も近いサンプルを決定し、サンプルをコーナーとして使用することによって、第4の後方領域を決定し、ここで、第4の後方領域の幅は、blkW+2であり、第4の後方領域の高さは、blkH+2である。
第1の後方領域の任意のコーナー位置について、第1の後方領域の左上隅の位置が例として使用されると仮定する。後方参照ピクチャ内で左上隅の位置に最も近いサンプルが決定され、サンプルを左上隅として使用することによって、第4の後方領域が決定される。第4の後方領域の幅は、blkW+2であり、第4の後方領域の高さは、blkH+2である。
例えば、図13を参照すると、第1の後方領域D1の左上隅のコーナー位置は、(5.3,6.2)であり、コーナー位置(5.3,6.2)に最も近いサンプルの位置は、後方参照ピクチャRef1内の(5,6)として決定される。位置(5,6)におけるサンプルを左上隅として使用することによって、第4の後方領域D2が決定される。第4の後方領域D2の幅は、blkW+2であり、第4の後方領域D2の高さは、blkH+2である。
(8):第4の後方領域を含む第5の後方領域を決定し、ここで、第4の後方領域の中心は、第5の後方領域の中心と一致し、第5の後方領域の幅は、blkW+n+1であり、第5の後方領域の高さは、blkH+n+1であり、後方参照ピクチャから第5の後方領域内のピクチャブロックを取得し、第1のピクチャブロックの第1の後方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングを実行し、ここで、第1の後方予測ブロックの幅は、blkW+2であり、第1の後方予測ブロックの高さは、blkH+2である。
例えば、8タップ補間フィルタが例として使用される。図13を参照すると、第4の後方領域D2を含む第5の後方領域D3が決定される。第4の後方領域D2の中心は、第5の後方領域D3の中心と一致し、第5の後方領域D3の幅は、blkW+9であり、第5の後方領域D3の高さは、blkH+9である。第5の後方領域D3内のピクチャブロックが後方参照ピクチャRef1から取得され、第1のピクチャブロックBの第1の後方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングが実行される。第1の後方予測ブロックの幅は、blkW+2であり、第1の後方予測ブロックの高さは、blkH+2である。
補間フィルタのタップ数nは、6、8、または10などの値であってもよい。
このステップが実行されるとき、処理対象ピクチャブロックの動き情報に基づいて、BIOを介してインター予測が実行されるかどうかがさらに決定されてもよく、BIOを介してインター予測が実行されると決定された場合、このステップが実行される。決定プロセスは、以下のようであってもよい。
処理対象ピクチャブロックのフレーム番号、前方参照ピクチャのフレーム番号、および後方参照ピクチャのフレーム番号が、事前設定BIO使用条件を満たすかどうかが決定される。事前設定BIO使用条件が満たされ、BIOを介してインター予測が実行されると決定された場合、このステップが実行される。事前設定BIO使用条件が満たされない場合、BIO以外の方法においてインター予測が実行されると決定される。別の方法の実装プロセスについて、本明細書では詳細に説明しない。
事前設定BIO使用条件は、以下の第1の式に示される条件であってもよい。
第1の式は、(POC_L0-POC_Cur)*(POC_L1-POC_Cur)<0である。
第1の式において、POC_L0は、前方参照ピクチャのフレーム番号であり、POC_Curは、処理対象ピクチャブロックのフレーム番号であり、POC_L1は、後方参照ピクチャのフレーム番号であり、*は、乗算演算である。
このステップにおいて、第1のピクチャブロックの第1の前方予測ブロックと第1の後方予測ブロックとに基づいて、BIOを介してインター予測が実行されるかどうかがさらに決定されてもよく、BIOを介してインター予測が実行されると決定された場合、ステップ104が実行される。決定プロセスは、以下の通りであってもよい。
以下の第2の式に従って、第1のピクチャブロックの第1の前方予測ブロックと第1の後方予測ブロックとに基づいて、SADが計算される。SADが事前設定しきい値TH_CUを超える場合、BIOを介してインター予測が実行されると決定され、ステップ104が実行される。SADが事前設定しきい値TH_CUを超えない場合、BIO以外の方法においてインター予測が実行されると決定される。別の方法の実装プロセスについて、本明細書では詳細に説明しない。
第2の式において、I(1)(i,j)は、第1の後方予測ブロックの第i行および第j列におけるサンプルの予測子であり、I(0)(i,j)は、第1の前方予測ブロックの第i行および第j列におけるサンプルの予測子である。
TH_CU=(1<<(BD-8+shift))*blkW*blkH、shift=Max(2,14-BD)であり、ここで、BDは、現在のサンプルビット幅を示し、abs()は、絶対値を取得する演算を示し、<<は、左シフト演算を示す。
ステップ104:第1のピクチャブロックの第1の勾配行列を取得するために、第1のピクチャブロックの第1の予測ブロックに対して勾配演算を実行し、ここで、第1の勾配行列の幅は、blkWであり、第1の勾配行列の高さは、blkHである。
第1の勾配行列は、第1の前方水平勾配行列と、第1の前方垂直勾配行列と、第1の後方水平勾配行列と、第1の後方垂直勾配行列とを含む。
このステップにおいて、以下の第3の式に従って、第1の予測ブロック内に含まれる各サンプルの予測子に基づいて、水平勾配および垂直勾配が計算される。各々の計算された水平勾配は、1つの行番号と1つの列番号とに対応し、各々の計算された垂直勾配は、1つの行番号と1つの列番号とに対応する。計算された水平勾配に対応する行番号と列番号とに基づいて、計算された水平勾配によって、第1のピクチャブロックの第1の水平勾配行列が形成され、計算された垂直勾配に対応する行番号と列番号とに基づいて、計算された垂直勾配によって、第1のピクチャブロックの第1の垂直勾配行列が形成される。
勾配行列内の行または列の勾配が計算されるとき、行番号と列番号とに基づいて、第1の予測ブロックから2つのサンプルの予測子が取得され、以下の第3の式に従って、2つのサンプルの予測子に基づいて、水平勾配または垂直勾配が計算される。水平勾配は、行番号と列番号とに個別に対応し、垂直勾配は、行番号と列番号とに個別に対応する。
第1の予測ブロックは、第1の前方予測ブロックと第1の後方予測ブロックとを含む。以下の第3の式に従って、第1の前方予測ブロックに基づいて、前方水平勾配および前方垂直勾配が計算される。各々の計算された前方水平勾配は、1つの行番号と1つの列番号とに対応し、各々の計算された前方垂直勾配は、1つの行番号と1つの列番号とに対応する。計算された前方水平勾配に対応する行番号と列番号とに基づいて、計算された前方水平勾配によって、第1のピクチャブロックの第1の前方水平勾配行列が形成され、計算された前方垂直勾配に対応する行番号と列番号とに基づいて、計算された前方垂直勾配によって、第1のピクチャブロックの第1の前方垂直勾配行列が形成される。
以下の第3の式に従って、第1の後方予測ブロックに基づいて、後方水平勾配および後方垂直勾配が計算される。各々の計算された後方水平勾配は、1つの行番号と1つの列番号とに対応し、各々の計算された後方垂直勾配は、1つの行番号と1つの列番号とに対応する。計算された後方水平勾配に対応する行番号と列番号とに基づいて、計算された後方水平勾配によって、第1のピクチャブロックの第1の後方水平勾配行列が形成され、計算された後方垂直勾配に対応する行番号と列番号とに基づいて、計算された後方垂直勾配によって、第1のピクチャブロックの第1の後方垂直勾配行列が形成される。
第3の式において、kの値は、0または1であってもよく、ここで、0は、「前方」を示し、1は、「後方」を示し、
は、第i行および第j列の垂直勾配であり、ここで、k=0の場合、
は、第i行および第j列の前方水平勾配であり、k=1の場合、
は、第i行および第j列の後方水平勾配であり、>>は、右シフト演算である。
I(k)(i+1,j)は、第1の予測ブロックの第(i+1)行および第j列におけるサンプルの予測子であり、ここで、k=0の場合、I(k)(i+1,j)は、第1の前方予測ブロックの第(i+1)行および第j列におけるサンプルの予測子であり、k=1の場合、I(k)(i+1,j)は、第1の後方予測ブロックの第(i+1)行および第j列におけるサンプルの予測子であり、I(k)(i-1,j)は、第1の予測ブロックの第(i-1)行および第j列におけるサンプルの予測子であり、ここで、k=0の場合、I(k)(i-1,j)は、第1の前方予測ブロックの第(i-1)行および第j列におけるサンプルの予測子であり、k=1の場合、I(k)(i-1,j)は、第1の後方予測ブロックの第(i-1)行および第j列におけるサンプルの予測子である。
I(k)(i,j+1)は、第1の予測ブロックの第i行および第(j+1)列におけるサンプルの予測子であり、ここで、k=0の場合、I(k)(i,j+1)は、第1の前方予測ブロックの第i行および第(j+1)列におけるサンプルの予測子であり、k=1の場合、I(k)(i,j+1)は、第1の後方予測ブロックの第i行および第(j+1)列におけるサンプルの予測子であり、I(k)(i,j-1)は、第1の予測ブロックの第i行および第(j-1)列におけるサンプルの予測子であり、ここで、k=0の場合、I(k)(i,j-1)は、第1の前方予測ブロックの第i行および第(j-1)列におけるサンプルの予測子であり、k=1の場合、I(k)(i,j-1)は、第1の後方予測ブロックの第i行および第(j-1)列におけるサンプルの予測子の値である。
blkW+2の幅とblkH+2の高さとを有する第1の予測ブロックについて、上記の第3の式に従って、第1の予測ブロックに基づいて、blkWの幅とblkHの高さとを有する第1の勾配行列が取得されてもよいことが留意されるべきである。第1の勾配行列は、blkWの幅とblkHの高さとを有する第1の水平勾配行列と、blkWの幅とblkHの高さとを有する第1の垂直勾配行列とを含む。すなわち、blkW+2の幅とblkH+2の高さとを有する第1の前方予測ブロックについて、上記の第3の式に従って、第1の前方予測ブロックに基づいて、blkWの幅とblkHの高さとを有する第1の前方水平勾配行列、およびblkWの幅とblkHの高さとを有する第1の前方垂直勾配行列が取得されてもよい。blkW+2の幅とblkH+2の高さとを有する第1の後方予測ブロックについて、上記の第3の式に従って、第1の後方予測ブロックに基づいて、blkWの幅とblkHの高さとを有する第1の後方水平勾配行列、およびblkWの幅とblkHの高さとを有する第1の後方垂直勾配行列が取得されてもよい。
ステップ105:第1の拡張後に取得される第1の勾配行列の幅および高さが、それぞれ第1のピクチャブロックの幅および高さよりも2サンプル大きくなるように、第1の勾配行列の行列エッジ位置における勾配に基づいて、第1の勾配行列の幅および高さに対して第1の拡張を実行する。
第1の拡張後に取得される第1の勾配行列の幅および高さは、それぞれ第1の予測ブロックの幅および高さに等しい。第1の予測ブロックの幅は、blkW+2であり、第1の予測ブロックの高さは、blkH+2である。第1の勾配行列の幅もblkW+2であり、第1の勾配行列の高さもblkH+2である。
このステップにおいて、第1の拡張後に取得される第1の前方水平勾配行列の幅、第1の前方垂直勾配行列の幅、第1の後方水平勾配行列の幅、および第1の後方垂直勾配行列の幅が、すべてblkW+2になり、第1の拡張後に取得される第1の前方水平勾配行列の高さ、第1の前方垂直勾配行列の高さ、第1の後方水平勾配行列の高さ、および第1の後方垂直勾配行列の高さが、すべてblkH+2になるように、第1の前方水平勾配行列の幅および高さ、第1の前方垂直勾配行列の幅および高さ、第1の後方水平勾配行列の幅および高さ、ならびに第1の後方垂直勾配行列の幅および高さに対して、第1の拡張が個別に実行される。
このステップにおいて、第1の勾配行列は、4つのエッジを含む。第1の勾配行列の左行列エッジにおける勾配について、左行列エッジにおける勾配に基づいて第1の勾配行列の左側において拡張を実行することによって、1列の勾配が取得される。第1の勾配行列の右行列エッジにおける勾配について、右行列エッジ位置における勾配に基づいて第1の勾配行列の右側において拡張を実行することによって、1列の勾配が取得される。第1の勾配行列の上行列エッジにおける勾配について、上行列エッジにおける勾配に基づいて第1の勾配行列の上側において拡張を実行することによって、1行の勾配が取得される。第1の勾配行列の下行列エッジにおける勾配について、下行列エッジにおける勾配に基づいて第1の勾配行列の下側において拡張を実行することによって、1行の勾配が取得される。したがって、第1の拡張後に取得される第1の勾配行列の幅および高さは、それぞれ第1のピクチャブロックの幅および高さよりも2サンプル大きい。
ステップ106:第1の予測ブロックと第1の勾配行列とに基づいて、第1のピクチャブロック内の各基本処理ユニットの動き情報精緻化値を計算する。
基本処理ユニットの幅は、Mであってもよく、基本処理ユニットの高さもMであってもよく、すなわち、基本処理ユニットは、M*Mサンプルを含むピクチャブロックである。Mの値は、2、3、または4などの値であってもよい。
基本処理ユニットの動き情報精緻化値は、水平動き情報精緻化値と垂直動き情報精緻化値とを含む。
このステップは、1061から1064によって実装されることができ、1061から1064は、以下の通りであってもよい。
1061:第1のピクチャブロック内に含まれる各基本処理ユニットを取得するために、第1のピクチャブロックを分割し、ここで、各基本処理ユニットは、M*Mのサイズを有するピクチャブロックである。
1062:基本処理ユニットの位置に基づいて、第1の予測ブロック内の任意の基本処理ユニットの基本予測ブロックを決定し、ここで、基本予測ブロックの幅は、M+2であり、基本予測ブロックの高さは、M+2である。
基本処理ユニットが第1のピクチャブロックの第1から第Mの行と第1から第Mの列とをカバーすると仮定すると、第1の予測ブロックの第0から第(M+1)の行と第0から第(M+1)の列とをカバーするピクチャブロックが、基本処理ユニットの基本予測ブロックとして使用される。
基本処理ユニットの基本予測ブロックは、前方基本予測ブロックと後方基本予測ブロックとを含む。具体的には、第1の前方予測ブロック内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーするピクチャブロックが、基本処理ユニットの前方予測ブロックとして使用され、第1の後方予測ブロック内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーするピクチャブロックが、基本処理ユニットの後方基本予測ブロックとして使用される。
1063:基本処理ユニットの位置に基づいて、第1の勾配行列内の基本処理ユニットの基本勾配行列を決定し、ここで、基本勾配行列の幅は、M+2であり、基本勾配行列の高さは、M+2である。
基本処理ユニットが第1のピクチャブロックの第1から第Mの行と第1から第Mの列とをカバーすると仮定すると、第1の勾配行列内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーする行列が、基本処理ユニットの基本勾配行列として使用される。
基本処理ユニットの基本勾配行列は、前方水平基本勾配行列と、前方垂直基本勾配行列と、後方水平基本勾配行列と、後方垂直基本勾配行列とを含む。具体的には、第1の前方水平勾配行列内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーする行列が、基本処理ユニットの前方水平基本勾配行列として使用され、第1の前方垂直勾配行列内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーする行列が、基本処理ユニットの前方垂直基本勾配行列として使用され、第1の後方水平勾配行列内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーする行列が、基本処理ユニットの後方水平基本勾配行列として使用され、第1の後方垂直勾配行列内の第0から第(M+1)の行と第0から第(M+1)の列とをカバーする行列が、基本処理ユニットの後方垂直基本勾配行列として使用される。
1064.基本処理ユニットの基本予測ブロックと基本勾配行列とに基づいて、基本処理ユニットの動き情報精緻化値を計算する。
1064において、基本処理ユニットの前方基本予測ブロックと、後方基本予測ブロックと、前方水平基本勾配行列と、前方垂直基本勾配行列と、後方水平基本勾配行列と、後方垂直基本勾配行列とに基づいて、以下の第4の式と第5の式とに従って、基本処理ユニットの水平動き情報精緻化値および垂直動き情報精緻化値が計算される。
上記の第4の式において、(i,j)∈Ωは、i=0,1,...,およびM+1、ならびにj=0,1,...,およびM+1を示す。上記の第5の式において、v
xは、基本処理ユニットの水平動き情報精緻化値であり、v
yは、基本処理ユニットの垂直動き情報精緻化値であり、th'
BIO=2
13-BDであり、
は、floor関数であり(floor(A)は、A以下の最大整数を表す)、S
2,m=S
2>>12およびS
2,s=S
2&(2
12-1)である。
1062から1064を繰り返し実行することによって、第1のピクチャブロック内に含まれる各基本処理ユニットの動き情報精緻化値が取得されてもよい。
ステップ107:第1のピクチャブロック内に含まれる各基本処理ユニットの動き情報精緻化値に基づいて、第1のピクチャブロックの予測子を取得する。
第1のピクチャブロックの予測子は、第1のピクチャブロック内の各基本処理ユニット内の各サンプルの予測子を含む。
基本処理ユニットの前方基本予測ブロックと、後方基本予測ブロックと、前方水平基本勾配行列と、前方垂直基本勾配行列と、後方水平基本勾配行列と、後方垂直基本勾配行列とに基づいて、以下の第6の式に従って、第1のピクチャブロック内に含まれる任意の基本処理ユニット内に含まれる各サンプルの予測子が計算される。
第6の式において、predBIO(i,j)は、基本処理ユニット内の第i行および第j列におけるサンプルの予測子であり、shift=15-BDであり、Ooffset=1<<(14-BD)+2・(1<<13)であり、rnd()は、四捨五入である。
103から107を繰り返し実行することによって、処理対象ピクチャブロック内の各第1のピクチャブロックの予測子が取得される。
ステップ108:処理対象ピクチャブロック内に含まれる複数の第1のピクチャブロックの予測子の組み合わせを用いて、処理対象ピクチャブロックの予測子を取得する。
図12に示すインター予測方法は、ステップ1から6として要約されてもよく、ステップ1から6は、以下の通りであってもよい。
ステップ1:現在のCUの動き情報を決定する。
現在のCUの動き情報は、mergeモード、AMVPモード(背景における説明を参照)、または別のモードを使用することによって決定されてもよい。これは、本明細書では限定されない。
動き情報を決定するための別の方法も、本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
ステップ2:現在のCUがBIOの使用条件を満たすかどうかを決定する。
双方向予測が現在のCUに対して実行され、前方参照フレーム番号POC_L0と、後方参照フレーム番号POC_L1と、現在のフレーム番号POC_Curとの間の関係が以下の式を満たす場合、現在のCUは、BIOの使用条件を満たす。
(POC_L0-POC_Cur)*(POC_L1-POC_Cur)<0
BIOが使用されるかどうかは、現在のCUのサイズが事前設定しきい値よりも大きいかどうかを決定することによっても決定されてもよいことが留意されるべきである。例えば、現在のCUの高さHが8以上であり、現在のCUの幅Wが8以上である場合にのみ、BIOが使用されうる。
BIOの別の使用条件も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
現在のCUがBIOの使用条件を満たす場合、ステップ3が実行され、そうでない場合、別の方法において動き補償が実行される。
VPDUサイズが取得され、VPDU_XおよびVPDU_Y、ならびにパラメータblkWおよびblkHが設定される。
blkW=Min(cuW,VPDU_X)
blkH=Min(cuH,VPDU_Y)
Min関数は、最小値が選択されることを示す。
例えば、CUのサイズが128×128であり、VPDUのサイズが64×64である場合、BlkWは、64であり、blkHは、64である。
例えば、CUのサイズが128×128であり、VPDUのサイズが128×32である場合、BlkWは、128であり、blkHは、32である。
例えば、CUのサイズが128×128であり、VPDUのサイズが32×128である場合、BlkWは、32であり、blkHは、128である。
任意選択で、最大インター予測処理ユニットのサイズがVPDUサイズよりも小さい場合、blkWおよびblkHは、以下の式に従って設定されてもよい。
blkW=Min(cuW,MAX_MC_X)
blkH=Min(cuH,MAX_MC_Y)
例えば、CUのサイズが128×128であり、最大インター予測処理ユニットのサイズが32×32である場合、BlkWは、32であり、blkHは、32である。
各CUは、BIOを実行するために、blkWおよびblkHに基づいて分割される。
ステップ3:現在のCUの前方予測子および後方予測子を計算する。
前方および後方予測子I(k)(i,j)を取得するために、動き情報を使用することによって動き補償が実行され、ここで、i=-1..blkWおよびj=-1..blkHである((blkW+2)*(blkH+2)の予測行列が取得される)。
8タップ補間フィルタを使用することによって補間を実行することによって取得されるI(k)(i,j)、i=0..blkW-1、およびj=0..blkHにおいて、別の位置(1行および1列の拡張が実行される)の予測子が、bilinear補間フィルタを使用することによって補間を実行することによって取得される。
予測子は、最小予測子取得ユニットとしてVPDUを使用することによって取得されてもよく、または予測子は、最小予測子取得ユニットとしてVPDUよりも小さいブロックを使用することによって取得されてもよい。これは、限定されない。
拡張領域の予測子は、別の方法を使用することによって、例えば、8タップ補間フィルタを使用することによって、または整数サンプル位置における参照サンプルを直接使用することによっても取得されてもよいことが留意されるべきである。これは、本明細書では限定されない。
SADがしきい値TH_CU未満であるかどうかを決定するために、前方予測子と後方予測子との間のSADが計算され、SADがしきい値TH_CU未満である場合、BIOは、実行されず、そうでない場合、BIOは、実行されることが留意されるべきである。別の決定方法も本出願に適用されてもよく、詳細について、本明細書では説明しない。
しきい値TH_CUは、(1<<(BD-8+shift))*blkW*blkHに設定されてもよく、shiftは、Max(2,14-BD)に設定されてもよい。
ステップ4:現在のCUの前方予測子と後方予測子とに基づいて、水平勾配と垂直勾配とを計算する。
水平勾配および垂直勾配
および
は、式(4)に従って、前方予測子と後方予測子とに基づいて計算され、ここで、i=0..blkW-1およびj=0..blkH-1である(blkW*blkHの勾配行列が取得される)。
ステップ5:現在のCUの前方予測子および後方予測子と、水平勾配および垂直勾配とに対してpaddingを実行する。
I
(k)(i,j)と、
と、
とを取得するために、図9に示す方法を使用することによってPaddingが実行され、ここで、i=-1..blkWおよびj=-1..blkHである((blkW+2)*(blkH+2)の予測行列、水平勾配行列、および垂直勾配行列が取得される)。
ステップ6:各4×4サブブロックの精緻化動きベクトルを導出し、次いで重み付けを実行する。
各4×4サブブロックについて、式(2)に従ってvxおよびvyが取得される。最後に、各4×4サブブロックの予測子を取得するために、式(6)に従って重み付けが実行される。
各4×4サブブロックの前方予測子と後方予測子との間のSADは、SADがしきい値TH_SCU未満であるかどうかを決定するために計算されてもよいことが留意されるべきである。SADがしきい値TH_SCU未満である場合、加重平均が直接実行され、または、そうでない場合、式(2)に従ってvxおよびvyが取得され、次いで、式(6)に従って重み付けが実行される。別の決定方法も本出願に適用されてもよく、詳細について、本明細書では説明しない。TU_SCUは、1<<(BD-3+shift)に設定されてもよい。
本出願のこの実施形態において、より小さい幅が、事前設定ピクチャ分割幅Widthおよび処理対象ピクチャブロックの幅cuWにおいて選択され、blkWとして示され、より小さい高さが、事前設定ピクチャ分割高さHeightおよび処理対象ピクチャブロックの高さcuHにおいて選択され、blkHとして示され、処理対象ピクチャブロック内に含まれる第1のピクチャブロックは、blkWとblkHとに基づいて決定される。したがって、インター予測処理が各第1のピクチャブロックに対して実行されるとき、メモリ空間リソースなどのハードウェアリソースがより少なく消費されるように、各々の決定された第1のピクチャブロックの面積は、あまり大きくなく、それによって、実装形態の複雑さを低減し、インター予測処理効率を改善する。
図14を参照すると、本出願の実施形態は、インター予測方法を提供する。方法は、図2に示すエンコーダ内のインター予測ユニット244、または図3に示すデコーダ内のインター予測ユニット344に適用されてもよい。方法は、双方向インター予測方法であってもよく、以下のステップを含む。
ステップ201および202は、それぞれステップ101および102と同じであり、詳細について、本明細書では再び説明しない。
ステップ203:処理対象ピクチャブロックの動き情報に基づいて、第1のピクチャブロックの第1の予測ブロックを取得し、ここで、第1の予測ブロックの幅は、第1のピクチャブロックの幅に等しく、第1の予測ブロックの高さは、第1のピクチャブロックの高さに等しい。
第1のピクチャブロックの動き情報は、参照ピクチャおよび動きベクトルなどの情報を含む。この実施形態において、オプティカルフローベースの双方向予測方法がインター予測のために使用される。したがって、第1のピクチャブロックの動き情報は、前方参照ピクチャ、後方参照ピクチャ、前方動きベクトル、および後方動きベクトルなどの情報を含む。
この実施形態における方法がエンコーダに適用される場合、エンコーダは、mergeモード、AMVPモード、または別のモードにおいて、処理対象ピクチャブロックの動き情報を決定してもよく、処理対象ピクチャブロックの動き情報は、処理対象ピクチャブロック内の各第1のピクチャブロックの動き情報を含む。このステップにおいて、エンコーダによって決定された処理対象ピクチャブロックの動き情報が取得され、第1のピクチャブロックの動き情報は、処理対象ピクチャブロックの動き情報から取得される。
この実施形態における方法がデコーダに適用される場合、エンコーダからデコーダによって受信されるビデオビットストリームは、処理対象ピクチャブロックの動き情報を含み、処理対象ピクチャブロックの動き情報は、処理対象ピクチャブロック内の各第1のピクチャブロックの動き情報を含む。このステップにおいて、処理対象ピクチャブロックの動き情報は、ビデオビットストリームから抽出され、第1のピクチャブロックの動き情報は、処理対象ピクチャブロックの動き情報から取得される。
第1のピクチャブロックの第1の予測ブロックは、第1の前方予測ブロックと第1の後方予測ブロックとを含む。このステップにおいて、第1のピクチャブロックの第1の前方予測ブロックおよび第1の後方予測ブロックは、以下のステップ(1)から(8)において取得されてもよい。ステップ(1)から(8)は、以下の通りであってもよい。
(1):第1のピクチャブロックの第1の位置と、第1のピクチャブロックの動き情報とに基づいて、前方参照ピクチャ内の第1の前方領域を決定し、ここで、第1の前方領域の幅は、blkWであり、第1の前方領域の高さは、blkHである。
例えば、図15を参照すると、第1のピクチャブロックBの動き情報は、前方参照ピクチャRef0と、後方参照ピクチャRef1と、前方動きベクトルMV0と、後方動きベクトルMV1とを含む。第1のピクチャブロックBの第1の位置に基づいて、前方参照ピクチャRef0内で第2の前方領域B11が決定され、ここで、第2の前方領域B11の幅は、blkWであり、第2の前方領域B11の高さは、blkHである。前方動きベクトルMV0と、第2の前方領域B11の位置とに基づいて、第1の前方領域B12が決定され、ここで、第1の前方領域B12の幅は、blkWであり、第1の前方領域B12の高さは、blkHである。
(2):第1の前方領域のコーナー位置が前方参照ピクチャ内の前方参照ピクチャ内のサンプル位置と一致するかどうかを決定し、第1の前方領域のコーナー位置が前方参照ピクチャ内のサンプル位置と一致する場合、第1のピクチャブロックの第1の前方予測ブロックとして機能するように、前方参照ピクチャから第1の前方領域内のピクチャブロックを取得し、または第1の前方領域のコーナー位置が前方参照ピクチャ内のサンプル位置と一致しない場合、ステップ(3)を実行する。
例えば、図15を参照すると、第1の前方領域B12の左上隅が例として使用されている。第1の前方領域B12の左上隅のコーナー位置が前方参照ピクチャRef0内の(15,16)であると仮定すると、左上隅のコーナー位置は、前方参照ピクチャRef0内のサンプル位置と一致し、前方参照ピクチャRef0内のサンプル位置は、(15,16)である。別の例について、第1の前方領域B12の左上隅のコーナー位置が前方参照ピクチャRef0内の(15.3,16.2)であると仮定すると、左上隅のコーナー位置は、前方参照ピクチャRef0内のサンプル位置と一致せず、すなわち、前方参照ピクチャRef0内の位置(15.3,16.2)においてサンプルがない。
(3):前方参照ピクチャ内の第1の前方領域のコーナー位置に最も近いサンプルを決定し、サンプルをコーナーとして使用することによって、第3の前方領域を決定し、ここで、第3の前方領域の幅は、blkWであり、第3の前方領域の高さは、blkHである。
第1の前方領域の任意のコーナー位置について、第1の前方領域の左上隅の位置が例として使用されると仮定する。前方参照ピクチャ内で左上隅の位置に最も近いサンプルが決定され、サンプルを左上隅として使用することによって、第3の前方領域が決定される。第3の前方領域の幅は、blkWであり、第3の前方領域の高さは、blkHである。
例えば、図15を参照すると、第1の前方領域B12の左上隅のコーナー位置は、(15.3,16.2)であり、コーナー位置(15.3,16.2)に最も近いサンプルの位置は、前方参照ピクチャRef0内の(15,16)として決定される。位置(15,16)におけるサンプルを左上隅として使用することによって、第3の前方領域A1が決定される。第3の前方領域A1の幅は、blkWであり、第3の前方領域A1の高さは、blkHである。
(4):第3の前方領域を含む第4の前方領域を決定し、ここで、第3の前方領域の中心は、第4の前方領域の中心と一致し、第4の前方領域の幅は、blkW+n-1であり、第4の前方領域の高さは、blkH+n-1であり、前方参照ピクチャから第4の前方領域内のピクチャブロックを取得し、第1のピクチャブロックの第1の前方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングを実行し、ここで、第1の前方予測ブロックの幅は、blkWであり、第1の前方予測ブロックの高さは、blkHであり、nは、補間フィルタのタップ数である。
例えば、8タップ補間フィルタが例として使用される。図15を参照すると、第3の前方領域A1を含む第4の前方領域A2が決定される。第3の前方領域A1の中心は、第4の前方領域A2の中心と一致し、第4の前方領域A2の幅は、blkW+7であり、第4の前方領域A2の高さは、blkH+7である。第4の前方領域A2内のピクチャブロックが前方参照ピクチャRef0から取得され、第1のピクチャブロックBの第1の前方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングが実行される。第1の前方予測ブロックの幅は、blkWであり、第1の前方予測ブロックの高さは、blkHである。
(5):第1のピクチャブロックの第1の位置と動き情報とに基づいて、後方参照ピクチャ内の第1の後方領域を決定し、ここで、第1の後方領域の幅は、blkWであり、第1の後方領域の高さは、blkHである。
例えば、図15を参照すると、第1のピクチャブロックBの第1の位置に基づいて、後方参照ピクチャRef1内で第2の後方領域C11が決定され、ここで、第2の後方領域C11の幅は、blkWであり、第2の後方領域C11の高さは、blkHである。後方動きベクトルMV1と、第2の後方領域C11の位置とに基づいて、第1の後方領域C12が決定され、ここで、第1の後方領域C12の幅は、blkWであり、第1の後方領域C12の高さは、blkHである。
(6):第1の後方領域のコーナー位置が後方参照ピクチャ内の後方参照ピクチャ内のサンプル位置と一致するかどうかを決定し、第1の後方領域のコーナー位置が後方参照ピクチャ内のサンプル位置と一致する場合、第1のピクチャブロックの第1の後方予測ブロックとして機能するように、後方参照ピクチャから第1の後方領域内のピクチャブロックを取得し、または第1の後方領域のコーナー位置が後方参照ピクチャ内のサンプル位置と一致しない場合、ステップ(7)を実行する。
例えば、図15を参照すると、第1の後方領域C12の左上隅が例として使用されている。第1の後方領域C12の左上隅のコーナー位置が後方参照ピクチャRef1内の(5,6)であると仮定すると、左上隅のコーナー位置は、後方参照ピクチャRef1内のサンプル位置と一致し、後方参照ピクチャRef1内のサンプル位置は、(5,6)である。別の例について、第1の後方領域C12の左上隅のコーナー位置が後方参照ピクチャRef1内の(5.3,6.2)であると仮定すると、左上隅のコーナー位置は、後方参照ピクチャRef0内のサンプル位置と一致せず、すなわち、後方参照ピクチャRef0内の位置(5.3,6.2)においてサンプルがない。
(7):後方参照ピクチャ内の第1の後方領域のコーナー位置に最も近いサンプルを決定し、サンプルをコーナーとして使用することによって、第3の後方領域を決定し、ここで、第3の後方領域の幅は、blkWであり、第3の後方領域の高さは、blkHである。
第1の後方領域の任意のコーナー位置について、第1の後方領域の左上隅の位置が例として使用されると仮定する。後方参照ピクチャ内で左上隅の位置に最も近いサンプルが決定され、サンプルを左上隅として使用することによって、第3の後方領域が決定される。第3の後方領域の幅は、blkWであり、第3の後方領域の高さは、blkHである。
例えば、図15を参照すると、第1の後方領域C12の左上隅のコーナー位置は、(5.3,6.2)であり、コーナー位置(5.3,6.2)に最も近いサンプルの位置は、後方参照ピクチャRef1内の(5,6)として決定される。位置(5,6)におけるサンプルを左上隅として使用することによって、第3の後方領域D1が決定される。第3の後方領域D1の幅は、blkWであり、第3の後方領域D1の高さは、blkHである。
(8):第3の後方領域を含む第4の後方領域を決定し、ここで、第3の後方領域の中心は、第4の後方領域の中心と一致し、第4の後方領域の幅は、blkW+n-1であり、第4の後方領域の高さは、blkH+n-1であり、後方参照ピクチャから第4の後方領域内のピクチャブロックを取得し、第1のピクチャブロックの第1の後方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングを実行し、ここで、第1の後方予測ブロックの幅は、blkWであり、第1の後方予測ブロックの高さは、blkHである。
例えば、8タップ補間フィルタが例として使用される。図15を参照すると、第3の後方領域D1を含む第4の後方領域D2が決定される。第3の後方領域D1の中心は、第4の後方領域D2の中心と一致し、第4の後方領域D2の幅は、blkW+7であり、第4の後方領域D2の高さは、blkH+7である。第4の後方領域D2内のピクチャブロックが後方参照ピクチャRef1から取得され、第1のピクチャブロックBの第1の後方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングが実行される。第1の後方予測ブロックの幅は、blkWであり、第1の後方予測ブロックの高さは、blkHである。
このステップが実行されるとき、処理対象ピクチャブロックの動き情報に基づいて、BIOを介してインター予測が実行されるかどうかがさらに決定されてもよく、BIOを介してインター予測が実行されると決定された場合、このステップが実行される。決定プロセスについて、図12に示す実施形態におけるステップ103における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
このステップにおいて、第1のピクチャブロックの第1の前方予測ブロックと第1の後方予測ブロックとに基づいて、BIOを介してインター予測が実行されるかどうかがさらに決定されてもよく、BIOを介してインター予測が実行されると決定された場合、ステップ204が実行される。決定プロセスについて、図12に示す実施形態におけるステップ103における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ204:第1のピクチャブロックの第1の勾配行列を取得するために、第1のピクチャブロックの第1の予測ブロックに対して勾配演算を実行し、ここで、第1の勾配行列の幅は、blkW-2であり、第1の勾配行列の高さは、blkH-2である。
第1の勾配行列は、第1の前方水平勾配行列と、第1の前方垂直勾配行列と、第1の後方水平勾配行列と、第1の後方垂直勾配行列とを含む。
第1の前方水平勾配行列の幅、第1の前方垂直勾配行列の幅、第1の後方水平勾配行列の幅、および第1の後方垂直勾配行列の幅は、すべてblkW-2であってもよく、第1の前方水平勾配行列の高さ、第1の前方垂直勾配行列の高さ、第1の後方水平勾配行列の高さ、および第1の後方垂直勾配行列の高さは、すべてblkH-2であってもよい。
このステップにおいて、第1のピクチャブロックの第1の予測ブロックに対して勾配演算を実行する詳細な実装プロセスについて、図12に示す実施形態におけるステップ104における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ205:第1の拡張後に取得される第1の勾配行列の幅および高さが、それぞれ第1のピクチャブロックの幅および高さよりも2サンプル大きくなるように、第1の勾配行列の行列エッジ位置における勾配に基づいて、第1の勾配行列の幅および高さに対して第1の拡張を実行する。
第1の拡張後に取得される第1の勾配行列の幅および高さは、それぞれ第1の予測ブロックの幅blkW+2および高さblkH+2に等しい。
このステップにおいて、第1の拡張後に取得される第1の拡張前方水平勾配行列の幅、第1の前方垂直勾配行列の幅、第1の後方水平勾配行列の幅、および第1の後方垂直勾配行列の幅が、すべてblkW+2になり、第1の拡張後に取得される第1の前方水平勾配行列の高さ、第1の前方垂直勾配行列の高さ、第1の後方水平勾配行列の高さ、および第1の後方垂直勾配行列の高さが、すべてblkH+2になるように、第1の前方水平勾配行列の幅および高さと、第1の前方垂直勾配行列の幅および高さと、第1の後方水平勾配行列の幅および高さと、第1の後方垂直勾配行列の幅および高さとに対して第1の拡張が個別に実行される。
第1の勾配行列に対して第1の拡張を実行する方法について、図12に示す実施形態におけるステップ205における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ206:第1の予測ブロックの幅および高さに対して第2の拡張を実行するために、第1の予測ブロックのブロックエッジ位置におけるサンプル値を複製し、ここで、第2の拡張後に取得される第1の予測ブロックの幅および高さは、blkW+2およびblkH+2である。
このステップにおいて、第1の前方予測ブロックの幅および高さに対して第2の拡張を実行し、第1の後方予測ブロックの幅および高さに対して第2の拡張を実行するために、第1の前方予測ブロックのブロックエッジ位置におけるサンプル値が複製され、第1の後方予測ブロックのブロックエッジ位置におけるサンプル値が複製される。すなわち、このステップにおいて、第2の拡張後に取得される第1の前方予測ブロックの幅および高さは、それぞれblkW+2およびblkH+2であり、第2の拡張後に取得される第1の後方予測ブロックの幅および高さは、それぞれblkW+2およびblkH+2である。
このステップにおいて、第1の予測ブロックの幅および高さに対して第2の拡張を実行するために、第1の予測ブロックのブロックエッジ領域のサンプル地に対して補間フィルタリングがさらに実行されてもよい。
任意選択で、ステップ203において、参照ピクチャ内のblkWの幅とblkHの高さとを有するピクチャブロックが、第1のピクチャブロックの第1の予測ブロックとして直接使用され、すなわち、図15を参照すると、第1の前方領域B12内のピクチャブロックが、前方参照図Ref0内の第1の前方参照ブロックとして使用され、第1の後方領域C12内のピクチャブロックが、後方参照図Ref1内の第1の後方予測ブロックとして使用されると仮定する。この場合、第1の予測ブロックは、参照ピクチャ内のピクチャブロックである。この場合、第1の予測ブロックを取り囲み、第1の予測ブロックに最も近いサンプルの円が参照ピクチャから選択され、選択されたサンプルの円、および第1の予測ブロックは、第2の拡張後に取得されるblkW+2の幅とblkH+2の高さとを有する第1の予測ブロックを形成する。
任意選択で、ステップ203において、第1のピクチャブロックの第1の予測ブロックは、補間フィルタを使用することによって取得される。この場合、第1の予測ブロックは、参照ピクチャ内のピクチャブロックではない。第1の予測ブロックの任意のエッジ上のサンプルについて(説明を容易にするために、エッジは、第1のエッジと呼ばれる)、参照ピクチャ内の第1のエッジ上の各サンプルの第1の位置に基づいて、第2のエッジ内に含まれる各サンプルの第2の位置が取得される。第2のエッジは、第1の予測ブロックの外側にあり、第2のエッジと第1のエッジとの間の距離は、1サンプルである。第2のエッジは、blkW+2サンプルまたはblkH+2サンプルを含む。第2のエッジ上の各サンプルについて、参照ピクチャ内のサンプルの第2の位置は、2つの隣接するサンプル間、または4つの隣接するサンプル間に位置し、サンプルを取得するために、補間フィルタを使用することによって、2つの隣接するサンプルまたは4つの隣接するサンプルに対して補間フィルタリングが実行される。第1の予測ブロックの各エッジに対応する第2のエッジが前述の方法において取得され、各々の取得された第2のエッジおよび第1の予測ブロックは、第2の拡張後に取得されるblkW+2の幅とblkH+2の高さとを有する第1の予測ブロックを形成する。
ステップ204の前に、ステップ206が代替的に実行されてもよい。このようにして、第2の拡張後に取得される第1の予測ブロックが取得されると、第1のピクチャブロックの第1の勾配行列を取得するために、第2の拡張後に取得された第1の予測ブロックに対して勾配演算が実行されてもよい。第2の拡張後に得られる第1の予測ブロックの幅は、blkW+2であり、第2の拡張後に得られる第1の予測ブロックの高さは、blkH+2であるので、取得される第1の勾配行列の幅は、blkWであり、取得される第1の勾配行列の高さは、blkHである。次いで、第1の拡張後に得られる第1の勾配行列の幅および高さが、それぞれ、第1のピクチャブロックの幅および高さよりも2サンプル大きくなるように、第1の勾配行列の行列エッジ位置における勾配に基づいて、第1の勾配行列の幅および高さに対して第1の拡張が実行される。
ステップ207から209は、それぞれ、ステップ106から108と同じであり、詳細について、本明細書では再び説明しない。
図16Aおよび図16Bに示すインター予測方法は、ステップ1から6として要約されてもよく、ステップ1から6は、以下の通りであってもよい。
ステップ1:現在のCUの動き情報を決定する。
現在のCUの動き情報は、mergeモード、AMVPモード(背景における説明を参照)、または別のモードを使用することによって決定されてもよい。これは、本明細書では限定されない。
動き情報を決定するための別の方法も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
ステップ2:現在のCUがBIOの使用条件を満たすかどうかを決定する。
双方向予測が現在のCUに対して実行され、前方参照フレーム番号POC_L0と、後方参照フレーム番号POC_L1と、現在のフレーム番号POC_Curとの間の関係が以下の式を満たす場合、現在のCUは、BIOの使用条件を満たす。
(POC_L0-POC_Cur)*(POC_L1-POC_Cur)<0
BIOが使用されるかどうかは、現在のCUのサイズが事前設定しきい値よりも大きいかどうかを決定することによっても決定されてもよいことが留意されるべきである。例えば、現在のCUの高さHが8以上であり、現在のCUの幅Wが8以上である場合にのみ、BIOが使用されうる。
BIOの別の使用条件も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
現在のCUがBIOの使用条件を満たす場合、ステップ3が実行され、そうでない場合、別の方法において動き補償が実行される。
VPDUサイズが取得され、VPDU_XおよびVPDU_Y、ならびにパラメータblkWおよびblkHが設定される。
blkW=Min(cuW,VPDU_X)
blkH=Min(cuH,VPDU_Y)
例えば、CUのサイズが128×128であり、VPDUのサイズが64×64である場合、blkWは、64であり、blkHは、64である。
例えば、CUのサイズが128×128であり、VPDUのサイズが128×32である場合、blkWは、128であり、blkHは、32である。
例えば、CUのサイズが128×128であり、VPDUのサイズが32×128である場合、blkWは、32であり、blkHは、128である。
任意選択で、最大インター予測処理ユニットのサイズがVPDUのサイズよりも小さい場合、blkWおよびblkHは、以下の式に従って設定されてもよい。
blkW=Min(cuW,MAX_MC_X)
blkH=Min(cuH,MAX_MC_Y)
例えば、CUのサイズが128×128であり、最大インター予測処理ユニットのサイズが32×32である場合、blkWは、32であり、blkHは、32である。
各CUは、BIOを実行するために、blkWとblkHとに基づいて分割される。
ステップ3:現在のCUの前方予測子と後方予測子とを計算する。
前方予測子および後方予測子I(k)(i,j)を取得するために、動き情報を使用することによって動き補償が実行され、ここで、i=0..blkW-1およびj=0..blkH-1である(blkW*blkHの予測行列が取得される)。
予測子は、最小予測子取得ユニットとしてVPDUを使用することによって取得されてもよく、または予測子は、最小予測子取得ユニットとしてVPDUよりも小さいブロックを使用することによって取得されてもよいことが理解されるべきである。これは、限定されない。
ステップ4:現在のCUの前方予測子と後方予測子とに基づいて、水平勾配と垂直勾配とを計算する。
水平勾配および垂直勾配
および
は、式(4)に従って、前方予測子と後方予測子とに基づいて計算され、ここで、i=1..blkW-2およびj=1..blkH-2である((blkW-2)*(blkH-2)の勾配行列が取得される)。
ステップ5:現在のCUの前方予測子および後方予測子と、水平勾配および垂直勾配とに対してpaddingを実行する。
I
(k)(i,j)と、
と、
とを取得するために、図9に示す方法を使用することによってPaddingが実行され、ここで、i=-1..blkWおよびj=-1..blkHである((blkW+2)*(blkH+2)の予測行列と、水平勾配行列と、垂直勾配行列とを取得するために、 (blkW-2)*(blkH-2)の行列に対して2行および2列ずつ周囲にpaddingが実行される)。
ステップ6:各4×4サブブロックの精緻化動きベクトルを導出し、次いで重み付けを実行する。
各4×4サブブロックについて、式(2)に従ってvxおよびvyが取得される。最後に、各4×4サブブロックの予測子を取得するために、式(6)に従って重み付けが実行される。
本出願のこの実施形態において、より小さい幅が、事前設定ピクチャ分割幅Widthおよび処理対象ピクチャブロックの幅cuWにおいて選択され、blkWとして示され、より小さい高さが、事前設定ピクチャ分割高さHeightおよび処理対象ピクチャブロックの高さcuHにおいて選択され、blkHとして示され、処理対象ピクチャブロック内に含まれる第1のピクチャブロックは、blkWとblkHとに基づいて決定される。したがって、各第1のピクチャブロックに対してインター予測処理が実行されるときにより少ないメモリ空間が消費されるように、各々の決定された第1のピクチャブロックの面積は、あまり大きくない。加えて、第1のピクチャブロックの第1の予測ブロックは、第1のピクチャブロックの動き情報に基づいて取得される。第1の予測ブロックの幅は、第1のピクチャブロックの幅に等しく、第1の予測ブロックの高さは、第1のピクチャブロックの高さに等しい。したがって、第1の予測ブロックを取得するためにCPUリソースおよびメモリリソースなどのハードウェアリソースがより少なく消費されるように、第1の予測ブロックは、比較的小さくてもよく、それによって、実装の複雑さを低減し、処理効率を改善する。
図16Aおよび図16Bを参照すると、本出願の実施形態は、インター予測方法を提供する。方法は、図2に示すエンコーダ内のインター予測ユニット244、または図3に示すデコーダ内のインター予測ユニット344に適用されてもよい。方法は、双方向インター予測方法であってもよく、以下のステップを含む。
ステップ301:第1のピクチャブロックの幅cuWを事前設定ピクチャ分割幅Widthと比較し、第1のピクチャブロックの高さcuHを事前設定ピクチャ分割高さHeightと比較し、cuWがWidth以上である場合、および/もしくはcuHがHeight以上である場合、ステップ302を実行し、またはcuWがWidth未満であり、cuHがHeight未満である場合、ステップ305を実行する。
この実施形態における方法がエンコーダに適用される場合、ピクチャを符号化するとき、エンコーダは、ピクチャを第1のピクチャブロックに分割する。このステップの前に、第1のピクチャブロックは、エンコーダから取得される。
この実施形態における方法がデコーダに適用される場合、デコーダは、エンコーダからビデオビットストリームを受信し、ビデオビットストリームは、第1のピクチャブロックを含む。このステップの前に、第1のピクチャブロックは、ビデオビットストリームから抽出される。
このステップが実行されるとき、第1のピクチャブロックの動き情報に基づいて、BIOを介してインター予測が実行されるかどうかがさらに決定されてもよく、BIOを介してインター予測が実行されると決定された場合、このステップが実行される。詳細な実装プロセスについては、図12に示す実施形態におけるステップ103における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ302:第1のピクチャブロックの動き情報に基づいて、第1のピクチャブロックの第2の予測ブロックを取得し、ここで、第2の予測ブロックの幅は、cuW+4であり、第2の予測ブロックの高さは、cuH+4である。
第1のピクチャブロックの動き情報は、参照ピクチャおよび動きベクトルなどの情報を含む。この実施形態において、オプティカルフローベースの双方向予測方法がインター予測のために使用される。したがって、第1のピクチャブロックの動き情報は、前方参照ピクチャ、後方参照ピクチャ、前方動きベクトル、および後方動きベクトルなどの情報を含む。
この実施形態における方法がエンコーダに適用される場合、エンコーダは、mergeモード、AMVPモード、または別のモードにおいて、第1のピクチャブロックの動き情報を決定してもよい。このステップにおいて、エンコーダによって決定された第1のピクチャブロックの動き情報が取得される。
この実施形態における方法がデコーダに適用される場合、エンコーダからデコーダによって受信されるビデオビットストリームは、第1のピクチャブロックの動き情報を含む。このステップにおいて、第1のピクチャブロックの動き情報は、ビデオビットストリームから抽出される。
第1のピクチャブロックの第2の予測ブロックは、第2の前方予測ブロックと第2の後方予測ブロックとを含む。このステップにおいて、第1のピクチャブロックの第2の前方予測ブロックおよび第2の後方予測ブロックは、以下のステップ(1)から(8)において取得されてもよい。ステップ(1)から(8)は、以下の通りであってもよい。
(1):処理対象ピクチャブロック内の第1のピクチャブロックの第1の位置と、第1のピクチャブロックの動き情報とに基づいて、前方参照ピクチャ内の第1の前方領域を決定し、ここで、第1の前方領域の幅は、blkW+4であり、第1の前方領域の高さは、blkH+4である。
例えば、図13を参照すると、第1のピクチャブロックBの動き情報は、前方参照ピクチャRef0と、後方参照ピクチャRef1と、前方動きベクトルMV0と、後方動きベクトルMV1とを含む。第1のピクチャブロックBの第1の位置に基づいて、前方参照ピクチャRef0内で第2の前方領域B11が決定され、ここで、第2の前方領域B11の幅は、blkWであり、第2の前方領域B11の高さは、blkHである。前方動きベクトルMV0と、第2の前方領域B11の位置とに基づいて、第3の前方領域B12が決定され、ここで、第3の前方領域B12の幅は、blkWであり、第3の前方領域B12の高さは、blkHである。第3の前方領域B12を含む第1の前方領域A1が決定され、ここで、第1の前方領域A1の幅は、blkW+4であり、第1の前方領域A1の高さは、blkH+4であり、第3の前方領域B12の中心は、第1の前方領域A1の中心と一致する。
(2):第1の前方領域のコーナー位置が前方参照ピクチャ内の前方参照ピクチャ内のサンプル位置と一致するかどうかを決定し、第1の前方領域のコーナー位置が前方参照ピクチャ内のサンプル位置と一致する場合、第1のピクチャブロックの第2の前方予測ブロックとして機能するように、前方参照ピクチャから第1の前方領域内のピクチャブロックを取得し、または第1の前方領域のコーナー位置が前方参照ピクチャ内のサンプル位置と一致しない場合、ステップ(3)を実行する。
例えば、図13を参照すると、第1の前方領域A1の左上隅が例として使用されている。第1の前方領域A1の左上隅のコーナー位置が前方参照ピクチャRef0内の(15,16)であると仮定すると、左上隅のコーナー位置は、前方参照ピクチャRef0内のサンプル位置と一致し、前方参照ピクチャRef0内のサンプル位置は、(15,16)である。別の例について、第1の前方領域A1の左上隅のコーナー位置が前方参照ピクチャRef0内の(15.3,16.2)であると仮定すると、左上隅のコーナー位置は、前方参照ピクチャRef0内のサンプル位置と一致せず、すなわち、前方参照ピクチャRef0内の位置(15.3,16.2)においてサンプルがない。
(3):前方参照ピクチャ内の第1の前方領域のコーナー位置に最も近いサンプルを決定し、サンプルをコーナーとして使用することによって、第4の前方領域を決定し、ここで、第4の前方領域の幅は、blkW+4であり、第4の前方領域の高さは、blkH+4である。
第1の前方領域の任意のコーナー位置について、第1の前方領域の左上隅の位置が例として使用されると仮定する。前方参照ピクチャ内で左上隅の位置に最も近いサンプルが決定され、サンプルを左上隅として使用することによって、第4の前方領域が決定される。第4の前方領域の幅は、blkW+4であり、第4の前方領域の高さは、blkH+4である。
例えば、図13を参照すると、第1の前方領域A1の左上隅のコーナー位置は、(15.3,16.2)であり、コーナー位置(15.3,16.2)に最も近いサンプルの位置は、前方参照ピクチャRef0内の(15,16)として決定される。位置(15,16)におけるサンプルを左上隅として使用することによって、第4の前方領域A2が決定される。第4の前方領域A2の幅は、blkW+4であり、第4の前方領域A2の高さは、blkH+4である。
(4):第4の前方領域を含む第5の前方領域を決定し、ここで、第4の前方領域の中心は、第5の前方領域の中心と一致し、第5の前方領域の幅は、blkW+n+3であり、第5の前方領域の高さは、blkH+n+3であり、前方参照ピクチャから第5の前方領域内のピクチャブロックを取得し、第1のピクチャブロックの第2の前方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングを実行し、ここで、第2の前方予測ブロックの幅は、blkW+4であり、第2の前方予測ブロックの高さは、blkH+4であり、nは、補間フィルタのタップ数である。
例えば、8タップ補間フィルタが例として使用される。図13を参照すると、第4の前方領域A2を含む第5の前方領域A3が決定される。第4の前方領域A2の中心は、第5の前方領域A3の中心と一致し、第5の前方領域A3の幅は、blkW+11であり、第5の前方領域A3の高さは、blkH+11である。第5の前方領域A3内のピクチャブロックが前方参照ピクチャRef0から取得され、第1のピクチャブロックBの第2の前方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングが実行される。第2の前方予測ブロックの幅は、blkW+4であり、第2の前方予測ブロックの高さは、blkH+4である。
(5):第1のピクチャブロックの第1の位置と動き情報とに基づいて、後方参照ピクチャ内の第1の後方領域を決定し、ここで、第1の後方領域の幅は、blkW+4であり、第1の後方領域の高さは、blkH+4である。
例えば、図13を参照すると、第1のピクチャブロックBの第1の位置に基づいて、後方参照ピクチャRef1内で第2の後方領域C11が決定され、ここで、第2の後方領域C11の幅は、blkWであり、第2の後方領域C11の高さは、blkHである。後方動きベクトルMV1と、第2の後方領域C11の位置とに基づいて、第3の後方領域C12が決定され、ここで、第3の後方領域C12の幅は、blkWであり、第3の後方領域C12の高さは、blkHである。第3の後方領域C12を含む第1の後方領域D1が決定され、ここで、第1の後方領域D1の幅は、blkW+4であり、第1の後方領域D1の高さは、blkH+4であり、第3の後方領域C12の中心は、第1の後方領域D1の中心と一致してもよい。
(6):第1の後方領域のコーナー位置が後方参照ピクチャ内の後方参照ピクチャ内のサンプル位置と一致するかどうかを決定し、第1の後方領域のコーナー位置が後方参照ピクチャ内のサンプル位置と一致する場合、第1のピクチャブロックの第2の後方予測ブロックとして機能するように、後方後方参照ピクチャから第1の領域内のピクチャブロックを取得し、または第1の後方領域のコーナー位置が後方参照ピクチャ内のサンプル位置と一致しない場合、ステップ(7)を実行する。
例えば、図13を参照すると、第1の後方領域A1の左上隅が例として使用されている。第1の後方領域A1の左上隅のコーナー位置が後方参照ピクチャRef0内の(5,6)であると仮定すると、左上隅のコーナー位置は、後方参照ピクチャRef0内のサンプル位置と一致し、後方参照ピクチャRef0内のサンプル位置は、(5,6)である。別の例について、第1の後方領域D1の左上隅のコーナー位置が後方参照ピクチャRef0内の(5.3,6.2)であると仮定すると、左上隅のコーナー位置は、後方参照ピクチャRef0内のサンプル位置と一致せず、すなわち、後方参照ピクチャRef0内の位置(5.3,6.2)においてサンプルがない。
(7):後方参照ピクチャ内の第1の後方領域のコーナー位置に最も近いサンプルを決定し、サンプルをコーナーとして使用することによって、第4の後方領域を決定し、ここで、第4の後方領域の幅は、blkW+4であり、第4の後方領域の高さは、blkH+4である。
第1の後方領域の任意のコーナー位置について、第1の後方領域の左上隅の位置が例として使用されると仮定する。後方参照ピクチャ内で左上隅の位置に最も近いサンプルが決定され、サンプルを左上隅として使用することによって、第4の後方領域が決定される。第4の後方領域の幅は、blkW+4であり、第4の後方領域の高さは、blkH+4である。
例えば、図13を参照すると、第1の後方領域D1の左上隅のコーナー位置は、(5.3,6.2)であり、コーナー位置(5.3,6.2)に最も近いサンプルの位置は、後方参照ピクチャRef1内の(5,6)として決定される。位置(5,6)におけるサンプルを左上隅として使用することによって、第4の後方領域D2が決定される。第4の後方領域D2の幅は、blkW+4であり、第4の後方領域D2の高さは、blkH+4である。
(8):第4の後方領域を含む第5の後方領域を決定し、ここで、第4の後方領域の中心は、第5の後方領域の中心と一致し、第5の後方領域の幅は、blkW+n+3であり、第5の後方領域の高さは、blkH+n+3であり、後方参照ピクチャから第5の後方領域内のピクチャブロックを取得し、第1のピクチャブロックの第2の後方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングを実行し、ここで、第2の後方予測ブロックの幅は、blkW+4であり、第2の後方予測ブロックの高さは、blkH+4である。
例えば、8タップ補間フィルタが例として使用される。図13を参照すると、第4の後方領域D2を含む第5の後方領域D3が決定される。第4の後方領域D2の中心は、第5の後方領域D3の中心と一致し、第5の後方領域D3の幅は、blkW+11であり、第5の後方領域D3の高さは、blkH+11である。第5の後方領域D3内のピクチャブロックが後方参照ピクチャRef1から取得され、第1のピクチャブロックBの第2の後方予測ブロックを取得するために、補間フィルタを使用することによって、ピクチャブロックに対して補間フィルタリングが実行される。第2の後方予測ブロックの幅は、blkW+4であり、第2の後方予測ブロックの高さは、blkH+4であり、nは、補間フィルタのタップ数である。
ステップ303:第1のピクチャブロックの第1の勾配行列を取得するために、第1のピクチャブロックの第2の予測ブロックに対して勾配演算を実行し、ここで、第1の勾配行列の幅は、cuW+2であり、第1の勾配行列の高さは、cuH+2である。
第1の勾配行列は、第1の前方水平勾配行列と、第1の前方垂直勾配行列と、第1の後方水平勾配行列と、第1の後方垂直勾配行列とを含む。
このステップにおいて、第1の勾配行列を取得するために、第1のピクチャブロックの第2の予測ブロックに対して勾配演算を実行する詳細な実装プロセスについて、図12に示す実施形態におけるステップ104における第1の勾配行列を取得する詳細なプロセスを参照されたい。詳細について、本明細書では再び説明しない。
第1の予測ブロックは、第2の前方予測ブロックと第2の後方予測ブロックとを含む。第2の前方予測ブロックに基づいて、cuW+2の幅とcuH+2の高さとを有する第2の前方水平勾配行列と、cuW+2の幅とcuH+2の高さとを有する第2の前方垂直勾配行列とが取得されてもよい。第2の後方予測ブロックに基づいて、cuW+2の幅とcuH+2の高さとを有する第2の後方水平勾配行列と、cuW+2の幅とcuH+2の高さとを有する第2の後方垂直勾配行列とが取得されてもよい。
ステップ304:第2の予測ブロック内の第1のピクチャブロックの第1の予測ブロックを決定し、ここで、第1の予測ブロックの幅は、cuW+2であり、第1の予測ブロックの高さは、cuH+2である。
第1の予測ブロックの中心は、第2の予測ブロックの中心と一致する。
第1の予測ブロックは、第1の前方予測ブロックと第1の後方予測ブロックとを含む。
このステップにおいて、第1のピクチャブロックのcuW+2の幅とcuH+2の高さとを有する第1の前方予測ブロックが、第2の前方予測ブロック内に決定され、第1のピクチャブロックのcuW+2の幅とcuH+2の高さとを有する第1の後方予測ブロックが、第2の後方予測ブロック内に決定される。
ステップ305:第1のピクチャブロックの動き情報に基づいて、第1のピクチャブロックの第1の予測ブロックを取得し、ここで、第1の予測ブロックの幅は、cuW+2であり、第1の予測ブロックの高さは、cuH+2である。
このステップにおいて、第1の予測ブロックを決定する詳細なプロセスについて、図12に示す実施形態におけるステップ103における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ306:第1のピクチャブロックの第1の勾配行列を取得するために、第1のピクチャブロックの第1の予測ブロックに対して勾配演算を実行し、ここで、第1の勾配行列の幅は、cuWであり、第1の勾配行列の高さは、cuHである。
第1の勾配行列は、第1の前方水平勾配行列と、第1の前方垂直勾配行列と、第1の後方水平勾配行列と、第1の後方垂直勾配行列とを含む。
このステップの詳細な実装プロセスについて、図12に示す実施形態におけるステップ104における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ307:第1の拡張後に取得される第1の勾配行列の幅および高さが、それぞれ、第1のピクチャブロックの幅および高さよりも2サンプル大きくなるように、第1の勾配行列の行列エッジ位置における勾配に基づいて、第1の勾配行列の幅および高さに対して第1の拡張を実行する。
このステップの詳細な実装プロセスについて、図12に示す実施形態におけるステップ105における関連する内容を参照されたい。詳細について、本明細書では再び説明しない。
ステップ308から310は、それぞれ、ステップ106から108と同じであり、詳細について、本明細書では再び説明しない。
図15に示すインター予測方法は、ステップ1から6として要約されてもよく、ステップ1から6は、以下の通りであってもよい。
ステップ1:現在のCUの動き情報を決定する。
現在のCUの動き情報は、mergeモード、AMVPモード(背景における説明を参照)、または別のモードを使用することによって決定されてもよい。これは、本明細書では限定されない。
動き情報を決定するための別の方法も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
ステップ2:現在のCUがBIOの使用条件を満たすかどうかを決定する。
双方向予測が現在のCUに対して実行され、前方参照フレーム番号POC_L0と、後方参照フレーム番号POC_L1と、現在のフレーム番号POC_Curとの間の関係が以下の式を満たす場合、現在のCUは、BIOの使用条件を満たす。
(POC_L0-POC_Cur)*(POC_L1-POC_Cur)<0
BIOの別の使用条件も本出願に適用されてもよいことが留意されるべきである。詳細について、本明細書では説明しない。
現在のCUがBIOの使用条件を満たす場合、ステップ3が実行され、そうでない場合、別の方法において動き補償が実行される。
ステップ3:現在のCUの前方予測子と後方予測子とを計算する。
cuWがVPDU_X以上であるか、またはcuHがVPDU_Y以上である場合、前方予測子および後方予測子I(k)(i,j)を取得するために、動き情報を使用することによって動き補償が実行され、ここで、i=--2..cuW+1およびj=-2..cuH+1である(同じ補間フィルタを使用することによって(cuW+4)*(cuH+4)の予測行列が取得される)。
cuWがVPDU_X未満であるか、またはcuHがVPDU_Y未満である場合、前方予測子および後方予測子I(k)(i,j)を取得するために、動き情報を使用することによって動き補償が実行され、ここで、i=-1..cuWおよびj=-1..cuHである((cuW+2)*(cuH+2)の予測行列が取得される)。
8タップ補間フィルタを使用することによって補間を実行することによって取得されるI(k)(i,j)、i=0..cuW-1、およびj=0..cuH-1において、別の位置(1行および1列の拡張が実行される)の予測子が、bilinear補間フィルタを使用することによって補間を実行することによって取得される。
予測子は、最小予測子取得ユニットとしてVPDUを使用することによって取得されてもよく、または予測子は、最小予測子取得ユニットとしてVPDUよりも小さいブロックを使用することによって取得されてもよいことが理解されるべきである。これは、限定されない。
拡張領域の予測子は、別の方法を使用することによって、例えば、8タップ補間フィルタを使用することによって、または整数サンプル位置における参照サンプルを直接使用することによっても取得されてもよいことが留意されるべきである。これは、本明細書では限定されない。
SADがしきい値TH_CU未満であるかどうかを決定するために、前方予測子と後方予測子との間のSADが計算され、SADがしきい値TH_CU未満である場合、BIOは、実行されず、そうでない場合、BIOは、実行されることが留意されるべきである。別の決定方法も本出願に適用されてもよく、詳細について、本明細書では説明しない。
しきい値TH_CUは、(1<<(BD-8+shift))*cuW*cuHに設定されてもよく、shiftは、Max(2,14-BD)に設定されてもよい。
ステップ4:現在のCUの前方予測子と後方予測子とに基づいて、水平勾配と垂直勾配とを計算する。
cuWがVPDU_X以上であるか、またはcuHがVPDU_Y以上である場合、水平勾配および垂直勾配
および
は、式(4)に従って計算され、ここで、i=-1..cuWおよびj=-1..cuHである((cuW+2)*(cuH+2)の勾配行列が取得される)。
cuWがVPDU_X未満であるか、またはcuHがVPDU_Y未満である場合、水平勾配および垂直勾配
および
は、式(4)に従って、前方予測子と後方予測子とに基づいて計算され、ここで、i=0..cuW-1およびj=0..cuH-1である(cuW*cuHの勾配行列が取得される)。
ステップ5:cuWがVPDU_X未満であり、cuHがVPDU_Y未満である場合、現在のCUの前方予測子および後方予測子と、水平勾配および垂直勾配とに対してpaddingを実行する。
I
(k)(i,j)と、
と、
とを取得するために、図9に示す方法を使用することによってPaddingが実行され、ここで、i=-1..cuWおよびj=-1..cuHである((cuW+2)*(cuH+2)の予測行列、水平勾配行列、および垂直勾配行列が取得される)。
ステップ6:各4×4サブブロックの精緻化動きベクトルを導出し、次いで重み付けを実行する。
各4×4サブブロックについて、式(2)に従ってvxおよびvyが取得される。最後に、各4×4サブブロックの予測子を取得するために、式(6)に従って重み付けが実行される。
各4×4サブブロックの前方予測子と後方予測子との間のSADは、SADがしきい値TH_SCU未満であるかどうかを決定するために計算されてもよいことが留意されるべきである。SADがしきい値TH_SCU未満である場合、加重平均が直接実行され、または、そうでない場合、式(2)に従ってvxおよびvyが取得され、次いで、式(6)に従って重み付けが実行される。別の決定方法も本出願に適用されてもよく、詳細について、本明細書では説明しない。TU_SCUは、1<<(BD-3+shift)に設定されてもよい。
本出願のこの実施形態において、同じ方法において、VPDUの境界およびCUの境界に対してBIO予測が実行される。CUが複数のVPDUを含む場合、動き補償予測を実装する複雑さが低減される。
本出願のこの実施形態において、cuWがWidth以上である場合、および/またはcuHがHeight以上である場合、第1のピクチャブロックの第2の予測ブロックは、第1のピクチャブロックの動き情報に基づいて取得される。第2の予測ブロックの幅は、cuW+4であり、第2の予測ブロックの高さは、cuH+4であるので、第1の勾配行列のエッジから拡張処理が省略されることができるように、cuW+2の幅とcuH+2の高さとを有する第1の勾配行列を取得するために、第1のピクチャブロックの第2の予測ブロックに対して勾配演算が実行され、それによって、インター予測効率を改善する。
図17は、本出願の実施形態に係る方法の概略フローチャートである。図に示すように、インター予測方法が提供され、以下のステップを含む。
S1201:処理対象ピクチャブロックの動き情報を取得し、ここで、処理対象ピクチャブロックは、複数の仮想パイプラインデータユニットを含み、仮想パイプラインデータユニットは、少なくとも1つの基本処理ユニットを含む。
S1202:動き情報に基づいて、各仮想パイプラインデータユニットの予測子行列を取得する。
S1203:各予測子行列に基づいて、各仮想パイプラインデータユニットの水平予測勾配行列と垂直予測勾配行列とを計算する。
S1204:予測子行列と、水平予測勾配行列と、垂直予測勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算する。
実行可能な実装形態において、動き情報に基づいて各仮想パイプラインデータユニットの予測子行列を取得するステップは、動き情報に基づいて各仮想パイプラインデータユニットの初期予測行列を取得するステップであって、初期予測行列のサイズが仮想パイプラインデータユニットのサイズと等しい、ステップと、初期予測行列を予測子行列として使用するステップとを含む。
実行可能な実装形態において、各仮想パイプラインデータユニットの初期予測行列を取得するステップの後に、方法は、拡張予測行列を取得するために、初期予測行列のエッジに対してサンプル拡張を実行するステップであって、拡張予測行列のサイズが初期予測行列のサイズよりも大きい、ステップをさらに含み、対応して、初期予測行列を予測子行列として使用するステップは、拡張予測行列を予測子行列として使用するステップを含む。
実行可能な実装形態において、初期予測行列のエッジに対してサンプル拡張を実行するステップは、初期予測行列内のサンプルのサンプル値の補間に基づいて、初期予測行列外のサンプルのサンプル値を取得するステップ、または初期予測行列のエッジにおけるサンプルのサンプル値を、初期予測行列外にあり、エッジに隣接するサンプルのサンプル値として使用するステップを含む。
実行可能な実装形態において、仮想パイプラインデータユニットは、複数の動き補償ユニットを含み、動き情報に基づいて各仮想パイプラインデータユニットの予測子行列を取得するステップは、動き情報に基づいて各動き補償ユニットの補償値行列を取得するステップと、予測子行列を取得するために、複数の動き補償ユニットの補償値行列を組み合わせるステップとを含む。
実行可能な実装形態において、各予測子行列に基づいて、各仮想パイプラインデータユニットの水平予測勾配行列と垂直予測勾配行列とを計算するステップは、水平予測勾配行列と垂直予測勾配行列とを取得するために、予測子行列に対して水平勾配計算と垂直勾配計算とを個別に実行するステップを含む。
実行可能な実装形態において、予測子行列と、水平予測勾配行列と、垂直予測勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算するステップの前に、方法は、パディング予測行列を取得するために、予測子行列のエッジにおいてサンプル拡張を実行するステップであって、パディング予測行列が事前設定サイズを有する、ステップと、パディング水平勾配行列とパディング垂直勾配行列とを取得するために、水平予測勾配行列のエッジおよび垂直予測勾配行列のエッジにおいて勾配拡張を個別に実行するステップであって、パディング水平勾配行列およびパディング垂直勾配行列が、各々事前設定サイズを有する、ステップとをさらに含み、対応して、予測子行列と、水平予測勾配行列と、垂直予測勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算するステップは、パディング予測行列と、パディング水平勾配行列と、パディング垂直勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算するステップを含む。
実行可能な実装形態において、予測子行列のエッジにおいてサンプル拡張を実行するステップの前に、方法は、予測子行列のサイズが事前設定サイズよりも小さいと決定するステップをさらに含む。
実行可能な実装形態において、水平予測勾配行列のエッジおよび垂直予測勾配行列のエッジにおいて勾配拡張を実行するステップの前に、方法は、水平予測勾配行列のサイズおよび/または垂直予測勾配行列のサイズが事前設定サイズよりも小さいと決定するステップをさらに含む。
実行可能な実装形態において、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算するステップの後に、方法は、仮想パイプラインデータユニットの予測子行列と、仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値とに基づいて、各基本処理ユニットの予測子を取得するステップをさらに含む。
実行可能な実装形態において、方法は、双方向予測に使用され、対応して、動き情報は、第1の参照フレームリスト動き情報と第2の参照フレームリスト動き情報とを含み、予測子行列は、第1の予測子行列と第2の予測子行列とを含み、第1の予測子行列は、第1の参照フレームリスト動き情報に基づいて取得され、第2の予測子行列は、第2の参照フレームリスト動き情報に基づいて取得され、水平予測勾配行列は、第1の水平予測勾配行列と第2の水平予測勾配行列とを含み、第1の水平予測勾配行列は、第1の予測子行列に基づいて計算され、第2の水平予測勾配行列は、第2の予測子行列に基づいて計算され、垂直予測勾配行列は、第1の垂直予測勾配行列と第2の垂直予測勾配行列とを含み、第1の垂直予測勾配行列は、第1の予測子行列に基づいて計算され、第2の垂直予測勾配行列は、第2の予測子行列に基づいて計算され、動き情報精緻化値は、第1の参照フレームリスト動き情報精緻化値と第2の参照フレームリスト動き情報精緻化値とを含み、第1の参照フレームリスト動き情報精緻化値は、第1の予測子行列と、第1の水平予測勾配行列と、第1の垂直予測勾配行列とに基づいて計算され、第2の参照フレームリスト動き情報精緻化値は、第2の予測子行列と、第2の水平予測勾配行列と、第2の垂直予測勾配行列とに基づいて計算される。
実行可能な実装形態において、初期予測行列のエッジにおいてサンプル拡張を実行するステップの前に、方法は、処理対象ピクチャブロックが位置するピクチャフレームの時間ドメイン位置が、第1の参照フレームリスト動き情報によって示される第1の参照フレームと第2の参照フレームリスト動き情報によって示される第2の参照フレームとの間に位置すると決定するステップをさらに含む。
実行可能な実装形態において、各仮想パイプラインデータユニットの予測子行列を取得するステップの後に、方法は、第1の予測子行列と第2の予測子行列との間の差が第1のしきい値未満であると決定するステップをさらに含む。
実行可能な実装形態において、基本処理ユニットの動き情報精緻化値は、予測子行列内の1つの基本予測子行列に対応し、予測子行列と、水平予測勾配行列と、垂直予測勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算するステップの前に、方法は、第1の基本予測子行列と第2の基本予測子行列との間の差が第2のしきい値未満であると決定するステップをさらに含む。
実行可能な実装形態において、基本処理ユニットのサイズは、4×4である。
実行可能な実装形態において、仮想パイプラインデータユニットの幅は、Wであり、仮想パイプラインデータユニットの高さは、Hであり、拡張予測行列のサイズは、(W+n+2)×(H+n+2)である。対応して、水平予測勾配行列のサイズは、(W+n)×(H+n)であり、垂直予測勾配行列のサイズは、(W+n)×(H+n)であり、ここで、WおよびHは、正の整数であり、nは、偶数である。
実行可能な実装形態において、nは、0、2、または-2である。
実行可能な実装形態において、処理対象ピクチャブロックの動き情報を取得するステップの前に、方法は、処理対象ピクチャブロックが複数の仮想パイプラインデータユニットを含むと決定するステップをさらに含む。
図18は、本出願の実施形態に係る方法の概略フローチャートである。図に示すように、インター予測装置が提供され、
処理対象ピクチャブロックの動き情報を取得するように構成された取得モジュール1301であって、処理対象ピクチャブロックが複数の仮想パイプラインデータユニットを含み、仮想パイプラインデータユニットが少なくとも1つの基本処理ユニットを含む、取得モジュール1301と、
動き情報に基づいて、各仮想パイプラインデータユニットの予測子行列を取得するように構成された補償モジュール1302と、
各予測子行列に基づいて、各仮想パイプラインデータユニットの水平予測勾配行列と垂直予測勾配行列とを計算するように構成された計算モジュール1303と、
予測子行列と、水平予測勾配行列と、垂直予測勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算するように構成された精緻化モジュール1304と
を含む。
実行可能な実装形態において、補償モジュール1302は、具体的には、動き情報に基づいて、各仮想パイプラインデータユニットの初期予測行列を取得する動作であって、初期予測行列のサイズが仮想パイプラインデータユニットのサイズに等しい、動作と、初期予測行列を予測子行列として使用する動作とを行うように構成される。
実行可能な実装形態において、補償モジュール1302は、具体的には、拡張予測行列を取得するために、初期予測行列のエッジにおいてサンプル拡張を実行する動作であって、拡張予測行列のサイズが初期予測行列のサイズよりも大きい、動作と、拡張予測行列を予測子行列として使用する動作とを行うように構成される。
実行可能な実装形態において、補償モジュール1302は、具体的には、初期予測行列内のサンプルのサンプル値の補間に基づいて、初期予測行列外のサンプルのサンプル値を取得するか、または初期予測行列のエッジにおけるサンプルのサンプル値を、初期予測行列外にあり、エッジに隣接するサンプルのサンプル値として使用するように構成される。
実行可能な実装形態において、仮想パイプラインデータユニットは、複数の動き補償ユニットを含み、補償モジュールは、具体的には、動き情報に基づいて、各動き補償ユニットの補償値行列を取得し、予測子行列を取得するために、複数の動き補償ユニットの補償値行列を組み合わせるように構成される。
実行可能な実装形態において、計算モジュール1303は、具体的には、水平予測勾配行列と垂直予測勾配行列とを取得するために、予測子行列に対して水平勾配計算と垂直勾配計算とを個別に実行するように構成される。
実行可能な実装形態において、装置は、パディング予測行列を取得するために、予測子行列のエッジにおいてサンプル拡張を実行する動作であって、パディング予測行列が事前設定サイズを有する、動作と、パディング水平勾配行列とパディング垂直勾配行列とを取得するために、水平予測勾配行列のエッジと垂直予測勾配行列のエッジとにおいて勾配拡張を個別に実行する動作であって、パディング水平勾配行列およびパディング垂直勾配行列が、各々事前設定サイズを有する、動作と、パディング予測行列と、パディング水平勾配行列と、パディング垂直勾配行列とに基づいて、各仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値を計算する動作とを行うように構成されたパディングモジュール1305をさらに含む。
実行可能な実装形態において、装置は、予測子行列のサイズが事前設定サイズ未満であると決定するように構成された決定モジュール1306をさらに含む。
実行可能な実装形態において、決定モジュール1306は、水平予測勾配行列のサイズおよび/または垂直予測勾配行列のサイズが事前設定サイズ未満であると決定するようにさらに構成される。
第7の態様の実行可能な実装形態において、精緻化モジュール1304は、仮想パイプラインデータユニットの予測子行列と、仮想パイプラインデータユニット内の各基本処理ユニットの動き情報精緻化値とに基づいて、各基本処理ユニットの予測子を取得するようにさらに構成される。
実行可能な実装形態において、装置は、双方向予測に使用され、対応して、動き情報は、第1の参照フレームリスト動き情報と第2の参照フレームリスト動き情報とを含み、予測子行列は、第1の予測子行列と第2の予測子行列とを含み、第1の予測子行列は、第1の参照フレームリスト動き情報に基づいて取得され、第2の予測子行列は、第2の参照フレームリスト動き情報に基づいて取得され、水平予測勾配行列は、第1の水平予測勾配行列と第2の水平予測勾配行列とを含み、第1の水平予測勾配行列は、第1の予測子行列に基づいて計算され、第2の水平予測勾配行列は、第2の予測子行列に基づいて計算され、垂直予測勾配行列は、第1の垂直予測勾配行列と第2の垂直予測勾配行列とを含み、第1の垂直予測勾配行列は、第1の予測子行列に基づいて計算され、第2の垂直予測勾配行列は、第2の予測子行列に基づいて計算され、動き情報精緻化値は、第1の参照フレームリスト動き情報精緻化値と第2の参照フレームリスト動き情報精緻化値とを含み、第1の参照フレームリスト動き情報精緻化値は、第1の予測子行列と、第1の水平予測勾配行列と、第1の垂直予測勾配行列とに基づいて計算され、第2の参照フレームリスト動き情報精緻化値は、第1の予測子行列と、第2の水平予測勾配行列と、第2の垂直予測勾配行列とに基づいて計算される。
実行可能な実装形態において、決定モジュール1306は、処理対象ピクチャブロックが位置するピクチャフレームの時間ドメイン位置が、第1の参照フレームリスト動き情報によって示される第1の参照フレームと第2の参照フレームリスト動き情報によって示される第2の参照フレームとの間に位置すると決定するようにさらに構成される。
第7の態様の実行可能な実装形態において、決定モジュール1306は、第1の予測子行列と第2の予測子行列との間の差が第1のしきい値未満であると決定するようにさらに構成される。
実行可能な実装形態において、決定モジュール1306は、第1の基本予測子行列と第2の基本予測子行列との間の差が第2のしきい値未満であると決定するようにさらに構成される。
実行可能な実装形態において、基本処理ユニットのサイズは、4×4である。
実行可能な実装形態において、仮想パイプラインデータユニットの幅は、Wであり、仮想パイプラインデータユニットの高さは、Hであり、拡張予測行列のサイズは、(W+n+2)×(H+n+2)である。対応して、水平予測勾配行列のサイズは、(W+n)×(H+n)であり、垂直予測勾配行列のサイズは、(W+n)×(H+n)であり、ここで、WおよびHは、正の整数であり、nは、偶数である。
実行可能な実装形態において、nは、0、2、または-2である。
実行可能な実装形態において、決定モジュール1306は、処理対象ピクチャブロックが複数の仮想パイプラインデータユニットを含むと決定するようにさらに構成される。
図19は、本出願の実施形態に係る方法の概略フローチャートである。図に示すように、インター予測装置1400が提供され、
事前設定ピクチャ分割幅と、事前設定ピクチャ分割高さと、処理対象ピクチャブロックの幅および高さとに基づいて、処理対象ピクチャブロック内の複数の第1のピクチャブロックを決定するように構成された決定モジュール1401と、
各第1のピクチャブロックの予測子を取得するために、複数の第1のピクチャブロックに対して双方向オプティカルフロー予測を個別に実行するように構成された予測モジュール1402と、
複数の第1のピクチャブロックの予測子の組み合わせを用いて、処理対象ピクチャブロックの予測子を取得するように構成された組み合わせモジュール1403と
を含む。
実行可能な実装形態において、決定モジュール1401は、
第1のピクチャブロックの幅を決定するために、事前設定ピクチャ分割幅を処理対象ピクチャブロックの幅と比較し、
第1のピクチャブロックの高さを決定するために、事前設定ピクチャ分割高さを処理対象ピクチャブロックの高さと比較し、
第1のピクチャブロックの幅および高さに基づいて、処理対象ピクチャブロック内の複数の第1のピクチャブロックを決定する
ように構成される。
実行可能な実装形態において、第1のピクチャブロックの幅は、事前設定ピクチャ分割幅および処理対象ピクチャブロックの幅のうちのより小さい値であり、第1のピクチャブロックの高さは、事前設定ピクチャ分割高さおよび処理対象ピクチャブロックの高さのうちのより小さい値である。
実行可能な実装形態において、予測モジュール1402は、処理対象ピクチャブロックの動き情報に基づいて、第1のピクチャブロックの第1の予測ブロックを取得し、
第1のピクチャブロックの第1の勾配行列を取得するために、第1の予測ブロックに対して勾配演算を実行し、
第1の予測ブロックと第1の勾配行列とに基づいて、第1のピクチャブロック内の各基本処理ユニットの動き情報精緻化値を計算し、
各基本処理ユニットの動き情報精緻化値に基づいて、第1のピクチャブロックの予測子を取得する
ように構成される。
実行可能な実装形態において、装置1400は、第1の拡張モジュール1404をさらに含む。
第1の拡張モジュールは、第1の拡張後に取得される第1の予測ブロックの幅および高さが、それぞれ第1のピクチャブロックの幅および高さよりも2サンプル大きくなるように、第1の予測ブロックのブロックエッジ位置のサンプル値に基づいて、第1の予測ブロックの幅および高さに対して第1の拡張を実行するように、ならびに/または第1の拡張後に取得される第1の勾配行列の幅および高さが、それぞれ第1のピクチャブロックの幅および高さよりも2サンプル大きくなるように、第1の勾配行列の行列エッジ位置の勾配に基づいて、第1の勾配行列の幅および高さに対して第1の拡張を実行するように構成される。
対応して、予測モジュール1402は、第1の拡張後に取得された第1の予測ブロックおよび/または第1の拡張後に取得された第1の勾配行列に基づいて、第1のピクチャブロック内の各基本処理ユニットの動き情報精緻化値を計算するように構成される。
実行可能な実装形態において、装置は、第2の拡張モジュール1405をさらに含む。
第2の拡張モジュールは、第1の予測ブロックの幅および高さに対して第2の拡張を実行するために、第1の予測ブロックのブロックエッジ領域のサンプル値に対して補間フィルタリングを実行するか、または第1の予測ブロックのブロックエッジ位置のサンプル値を複製するように構成される。
対応して、予測モジュール1402は、第2の拡張後に取得された第1の予測ブロックに対して勾配演算を実行するように構成される。
実行可能な実装形態において、第1の予測ブロックは、前方予測ブロックと後方予測ブロックとを含み、第1の勾配行列は、前方水平勾配行列と、前方垂直勾配行列と、後方水平勾配行列と、後方垂直勾配行列とを含む。
実行可能な実装形態において、事前設定ピクチャ分割幅は、64、32、または16であり、事前設定ピクチャ分割高さは、64、32、または16である。
実行可能な実装形態において、基本処理ユニットは、4×4サンプル行列である。
本出願のこの実施形態において、決定モジュールは、事前設定ピクチャ分割幅と、事前設定ピクチャ分割高さと、処理対象ピクチャブロックの幅および高さとに基づいて、処理対象ピクチャブロック内の複数の第1のピクチャブロックを決定する。したがって、第1のピクチャブロックのサイズは、事前設定ピクチャ分割幅と事前設定ピクチャ分割高さとによって制限され、メモリリソースなどのハードウェアリソースがより少なく消費されることができるように、各々の決定された第1のピクチャブロックの面積は、あまり大きくなく、インター予測を実施することの複雑さが低減されることができ、処理効率が改善されることができる。
当業者は、本明細書において開示され説明されている様々な例示的な論理ブロック、モジュール、およびアルゴリズムステップを参照して説明されている機能が、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせによって実装されうることを理解することができる。ソフトウェアによって実装される場合、例示的な論理ブロック、モジュール、およびステップを参照して説明されている機能は、1つ以上の命令またはコードとしてコンピュータ可読媒体内に記録されるか、またはコンピュータ可読媒体を介して伝送され、ハードウェアベースの処理ユニットによって実行されてもよい。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含んでもよいか、または(例えば通信プロトコルによる)ある場所から別の場所へのコンピュータプログラムの伝送を容易にする任意の通信媒体を含んでもよい。したがって、コンピュータ可読媒体は、一般に、(1)非一時的な有形のコンピュータ可読記憶媒体、または(2)信号もしくはキャリアなどの通信媒体に対応してもよい。データ記憶媒体は、本出願において説明されている技術を実装するための命令、コード、および/またはデータ構造を引き出すために1つ以上のコンピュータまたは1つ以上のプロセッサによってアクセスされうる任意の使用可能な媒体であってもよい。コンピュータプログラム製品は、コンピュータ可読媒体を含んでもよい。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは別のコンパクトディスク記憶装置、磁気ディスク記憶装置もしくは別の磁気記憶装置、フラッシュメモリ、または命令もしくはデータ構造の形態において所望のプログラムコードを記憶するために使用されることができ、コンピュータによってアクセスされうる任意の他の媒体を含んでもよい。加えて、任意の接続が、コンピュータ可読媒体と適切に呼ばれる。例えば、命令がウェブサイト、サーバ、または別のリモートソースから、同軸ケーブル、光ファイバ、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線もしくはマイクロ波などのワイヤレス技術を介して伝送される場合、同軸ケーブル、光ファイバ、ツイストペア、DSL、または赤外線、無線、もしくはマイクロ波などのワイヤレス技術は、媒体の定義内に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、キャリア、信号、または任意の他の一時的な媒体を含まず、実際には非一時的な有形の記憶媒体に向けられていることが理解されるべきである。本明細書において使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、およびBlu-rayディスクを含む。ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザを使用することによってデータを光学的に再生する。前述の項目の組み合わせも、コンピュータ可読媒体の範囲内に収まるべきである。
命令は、1つ以上のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の同等の集積もしくはディスクリート論理回路などの1つ以上のプロセッサによって実行されてもよい。したがって、本明細書において使用される「プロセッサ」という用語は、前述の構造のうちのいずれか、または本明細書において説明されている技術を実装するのに適した任意の他の構造であってもよい。加えて、いくつかの態様において、本明細書において説明されている例示的な論理ブロック、モジュール、およびステップを参照して説明されている機能は、符号化および復号のために構成された専用のハードウェアおよび/もしくはソフトウェアモジュール内で提供されてもよいか、または複合コーデックに組み込まれてもよい。加えて、技術は、すべて、1つ以上の回路または論理要素内に実装されてもよい。
本出願における技術は、ワイヤレスハンドセット、集積回路(IC)、またはICセット(例えば、チップセット)を含む、様々な装置またはデバイスにおいて実装されてもよい。開示されている技術を実装するように構成された装置の機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本明細書において説明されているが、これらは、必ずしも異なるハードウェアユニットによって実装されるわけではない。実際には、上記で説明したように、様々なユニットが、適切なソフトウェアおよび/もしくはファームウェアと組み合わせてコーデックハードウェアユニットに組み合わされてもよいか、または(上記で説明した1つ以上のプロセッサを含む)相互運用可能なハードウェアユニットによって提供されてもよい。
前述の実施形態において、各実施形態における説明は、それぞれの焦点を有する。ある実施形態において詳細に説明されていない部分については、他の実施形態における関連する説明を参照されたい。
前述の説明は、本出願の特定の実装形態の単なる例であり、本出願の保護範囲を限定することを意図していない。本出願において開示されている技術的範囲内で当業者によって容易に考え出される任意の変形または置換は、本出願の保護範囲内に収まるものとする。したがって、本出願の保護範囲は、特許請求の範囲の保護範囲に従うものとする。