本開示のいくつかの態様および実施形態が以下に提供される。当業者に明らかになるように、これらの態様および実施形態のうちのいくつかは独立に適用されてよく、それらのうちのいくつかは組み合わせて適用されてよい。以下の説明では、説明の目的で、本発明の実施形態の完全な理解をもたらすように具体的な詳細が説明される。しかしながら、様々な実施形態がこれらの具体的な詳細なしに実践され得ることは明らかであろう。図および説明は限定的であることを意図しない。
以下の説明は、例示的な実施形態のみを提供し、本開示の範囲、適用性、または構成を限定することを意図しない。むしろ、例示的な実施形態の以下の説明は、例示的な実施形態を実施することを可能にする説明を当業者に提供する。添付の特許請求の範囲に記載したような本発明の趣旨および範囲から逸脱することなく、様々な変更が要素の機能および構成に加えられ得ることを理解されたい。
本実施形態の十分な理解をもたらすために、以下の説明において具体的な詳細が与えられる。しかしながら、本実施形態がこれらの具体的な詳細なしに実践され得ることが当業者によって理解されよう。たとえば、不必要な詳細で本実施形態を不明瞭にしないように、回路、システム、ネットワーク、プロセス、および他の構成要素はブロック図の形態で構成要素として示されることがある。他の事例では、本実施形態を不明瞭にすることを避けるために、よく知られている回路、プロセス、アルゴリズム、構造、および技法は、不必要な詳細なしに示されることがある。
また、個々の実施形態がフローチャート、フロー図、データフロー図、構造図、またはブロック図として示されるプロセスとして説明され得ることに留意されたい。フローチャートは逐次プロセスとして動作を説明することがあるが、動作の多くは並列または同時に実行され得る。加えて、動作の順序は並べ替えられてよい。プロセスは、その動作が完了するときに終了するが、図に含まれない追加のステップを有することができる。プロセスは、方法、機能、プロシージャ、サブルーチン、サブプログラムなどに相当し得る。プロセスが関数に相当するとき、その終了は、その関数が呼出し関数またはメイン関数に戻ることに相当し得る。
「コンピュータ可読媒体」という用語は、限定はしないが、ポータブルまたは非ポータブルの記憶デバイス、光記憶デバイス、ならびに命令および/またはデータを記憶、包含、または搬送することができる様々な他の媒体を含む。コンピュータ可読媒体は、データがそこに記憶され得るとともに、ワイヤレスに、または有線接続を介して伝搬する搬送波および/または一時的な電子信号を含まない、非一時的媒体を含み得る。非一時的媒体の例は、限定はしないが、磁気ディスクもしくは磁気テープ、コンパクトディスク(CD)もしくはデジタル多用途ディスク(DVD)などの光記憶媒体、フラッシュメモリ、メモリ、またはメモリデバイスを含み得る。コンピュータ可読媒体は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラムステートメントの任意の組合せを表し得る、その上に記憶されたコードおよび/または機械実行可能命令を有し得る。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡すことおよび/または受けることによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む、任意の適切な手段を介して渡されてよく、転送されてよく、または送信されてよい。
さらに、実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはこれらの任意の組合せによって実装されてよい。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実装されるとき、必要なタスクを実行するためのプログラムコードまたはコードセグメント(たとえば、コンピュータプログラム製品)は、コンピュータ可読媒体または機械可読媒体に記憶され得る。プロセッサは、必要なタスクを実行し得る。
より多くのデバイスおよびシステムが、デジタルビデオデータを消費するための能力を消費者に提供するので、効率的なビデオコーディング技法に対する必要がより重要となっている。デジタルビデオデータの中に存在する大量のデータを処理するのに必要な記憶要件および送信要件を低減するために、ビデオコーディングが必要とされる。高いビデオ品質を維持しながらより低いビットレートを使用する形態にビデオデータを圧縮するために、様々なビデオコーディング技法が使用され得る。
ビデオエンコーダ、デコーダ、および他のコーディング処理デバイスを使用するビデオコーディングのいくつかのシステムおよび方法が、本明細書で説明される。いくつかの例では、いくつかの予測モードを制約するための、ビデオコーディングの1つまたは複数のシステムおよび方法が説明される。たとえば、いくつかの条件が満たされるとき、ビデオデータにおいてインター予測双予測が実行されるのを防止する制約が課され得る。双予測制約に関するさらなる詳細が以下で提供される。
図1は、符号化デバイス104および復号デバイス112を含むシステム100の一例を示すブロック図である。符号化デバイス104はソースデバイスの一部であってよく、復号デバイス112は受信デバイスの一部であってよい。ソースデバイスおよび/または受信デバイスは、モバイルもしくは固定の電話ハンドセット(たとえば、スマートフォン、セルラー電話など)、デスクトップコンピュータ、ラップトップもしくはノートブックコンピュータ、タブレットコンピュータ、セットトップボックス、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイス、インターネットプロトコル(IP)カメラ、または任意の他の適切な電子デバイスなどの、電子デバイスを含み得る。いくつかの例では、ソースデバイスおよび受信デバイスは、ワイヤレス通信用の1つまたは複数のワイヤレストランシーバを含み得る。本明細書で説明するコーディング技法は、(たとえば、インターネットを介した)ストリーミングビデオ送信、テレビジョン放送もしくは送信、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の適用例を含む、様々なマルチメディア用途におけるビデオコーディングに適用可能である。いくつかの例では、システム100は、ビデオ会議、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、ゲーミング、および/またはビデオ電話などの適用例をサポートするために、一方向または双方向のビデオ送信をサポートすることができる。
符号化デバイス104(または、エンコーダ)は、符号化ビデオビットストリームを生成するためにビデオコーディング規格またはプロトコルを使用してビデオデータを符号化するために使用され得る。ビデオコーディング規格は、ITU-T H.261、ISO/IEC MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 Visual、ならびにそのスケーラブルビデオコーディング(SVC:Scalable Video Coding)拡張およびマルチビュービデオコーディング(MVC:Multiview Video Coding)拡張を含むITU-T H.264(ISO/IEC MPEG-4 AVCとも呼ばれる)を含む。より最近のビデオコーディング規格、すなわち高効率ビデオコーディング(HEVC)が、ITU-Tビデオコーディングエキスパートグループ(VCEG:Video Coding Experts Group)とISO/IECムービングピクチャエキスパートグループ(MPEG)とのビデオコーディング共同研究部会(JCT-VC)によって確定された。MV-HEVCと呼ばれるHEVCのマルチビュー拡張、およびSHVCと呼ばれるHEVCのスケーラブル拡張、または任意の他の適切なコーディングプロトコルを含むHEVCの様々な拡張が、マルチレイヤビデオコーディングを扱い、同様にJCT-VCによって開発されている。HEVCの範囲拡張、すなわち、HEVC-RextもJCT-VCによって開発されている(たとえば、RExt WD7と呼ばれる範囲拡張の最近のワーキングドラフト(WD))。
(たとえば、JCTVC-Q1003におけるような)HEVC仕様テキストは、本明細書でHEVCバージョン1(または、HEVCの第1のバージョン)と呼ばれることがある。範囲拡張仕様は、HEVCのバージョン2(または、HEVCの第2のバージョン)と呼ばれることがある。しかしながら、提案する技法(たとえば、双予測制約または他の技法)が関係する限り、HEVCバージョン1および範囲拡張仕様は技術的に類似である。したがって、本明細書において変更がHEVCバージョン1に基づいて参照されるときはいつでも、同じ変更が範囲拡張仕様に適用されてよく、本明細書でHEVCバージョン1モジュールが再使用されるときはいつでも、HEVC範囲拡張モジュールも(同じサブクローズとともに)再使用される。
本明細書で説明する多くの実施形態が、HEVC規格またはそれの拡張を使用する例を説明する。しかしながら、本明細書で説明する技法およびシステムはまた、AVC、MPEG、それらの拡張、あるいはすでに利用可能であるかまたはまだ利用可能もしくは開発済みでない他の適切なコーディング規格などの、他のコーディング規格に適用可能であり得る。したがって、本明細書で説明する技法およびシステムは特定のビデオコーディング規格を参照しながら説明され得るが、説明がその特定の規格だけに適用されるものと解釈されるべきでないことを当業者なら諒解されよう。
図1を参照すると、ビデオソース102は、符号化デバイス104にビデオデータを提供し得る。ビデオソース102は、ソースデバイスの一部であってよく、またはソースデバイス以外のデバイスの一部であってもよい。ビデオソース102は、ビデオキャプチャデバイス(たとえば、ビデオカメラ、カメラ付き携帯電話、ビデオ付き携帯電話など)、記憶されたビデオを含むビデオアーカイブ、ビデオデータを提供するビデオサーバもしくはコンテンツプロバイダ、ビデオサーバもしくはコンテンツプロバイダからビデオを受信するビデオフィードインターフェース、コンピュータグラフィックスビデオデータを生成するためのコンピュータグラフィックスシステム、そのようなソースの組合せ、または任意の他の適切なビデオソースを含み得る。
ビデオソース102からのビデオデータは、1つまたは複数の入力ピクチャまたは入力フレームを含み得る。ピクチャまたはフレームは、ビデオの一部である静止画像である。符号化デバイス104のエンコーダエンジン106(または、エンコーダ)は、ビデオデータを符号化して符号化ビデオビットストリームを生成する。いくつかの例では、符号化ビデオビットストリーム(または、「ビデオビットストリーム」もしくは「ビットストリーム」)は、一連の1つまたは複数のコード化ビデオシーケンスである。コード化ビデオシーケンス(CVS:coded video sequence)は、ベースレイヤの中でいくつかの特性を伴うランダムアクセスポイントピクチャを有するアクセスユニット(AU:access unit)で開始し、ベースレイヤの中でいくつかの特性を伴うランダムアクセスポイントピクチャを有する次のAUの直前までの、一連のAUを含む。たとえば、CVSを開始するランダムアクセスポイントピクチャのいくつかの特性は、1に等しいRASLフラグ(たとえば、NoRaslOutputFlag)を含み得る。そうでない場合、ランダムアクセスポイントピクチャ(0に等しいRASLフラグを有する)はCVSを開始しない。アクセスユニット(AU)は、1つまたは複数のコード化ピクチャ、および同じ出力時間を共有するコード化ピクチャに対応する制御情報を含む。ピクチャのコード化スライスは、ビットストリームレベルで、ネットワークアブストラクションレイヤ(NAL:network abstraction layer)ユニットと呼ばれるデータ単位の中にカプセル化される。たとえば、HEVCビデオビットストリームは、NALユニットを含む1つまたは複数のCVSを含み得る。NALユニットの各々は、NALユニットヘッダを有する。一例では、ヘッダは、H.264/AVCに対して1バイト(マルチレイヤ拡張を除いて)、HEVCに対して2バイトである。NALユニットヘッダの中のシンタックス要素は、指定されたビットを取り、したがって、すべての種類のシステム、および特にトランスポートストリーム、リアルタイムトランスポート(RTP)プロトコル、ファイルフォーマットなどのトランスポートレイヤにとって認識できる。
ビデオコーディングレイヤ(VCL)NALユニットおよび非VCL NALユニットを含む、NALユニットの2つのクラスがHEVC規格に存在する。VCL NALユニットは、コード化ピクチャデータの1つのスライスまたはスライスセグメント(以下で説明する)を含み、非VCL NALユニットは、1つまたは複数のコード化ピクチャに関係する制御情報を含む。場合によっては、NALユニットはパケットと呼ばれることがある。HEVC AUは、コード化ピクチャデータを含むVCL NALユニット、および(もしあれば)コード化ピクチャデータに対応する非VCL NALユニットを含む。
NALユニットは、ビデオの中のピクチャのコード化表現などの、ビデオデータのコード化表現(たとえば、符号化ビデオビットストリーム、ビットストリームのCVSなど)を形成するビットのシーケンスを含み得る。エンコーダエンジン106は、各ピクチャを複数のスライスに区分することによって、ピクチャのコード化表現を生成する。スライスの中の情報が、同じピクチャ内の他のスライスからのデータに依存することなくコーディングされるように、スライスは他のスライスとは無関係である。スライスは、独立したスライスセグメント、および存在する場合、前のスライスセグメントに依存する1つまたは複数の従属したスライスセグメントを含む、1つまたは複数のスライスセグメントを含む。スライスは、次いで、ルーマサンプルおよびクロマサンプルのコーディングツリーブロック(CTB:coding tree block)に区分される。ルーマサンプルのCTB、およびクロマサンプルの1つまたは複数のCTBは、サンプル用のシンタックスとともにコーディングツリーユニット(CTU:coding tree unit)と呼ばれる。CTUは、HEVC符号化のための基本処理ユニットである。CTUは、様々なサイズの複数のコーディングユニット(CU:coding unit)に分割され得る。CUは、コーディングブロック(CB:coding block)と呼ばれるルーマサンプルアレイおよびクロマサンプルアレイを含む。
ルーマCBおよびクロマCBは、予測ブロック(PB:prediction block)にさらに分割され得る。PBは、(使用のために利用可能または有効にされているとき)インター予測またはイントラブロックコピー予測のために同じ動きパラメータを使用するルーマ成分またはクロマ成分のサンプルのブロックである。ルーマPBおよび1つまたは複数のクロマPBは、関連するシンタックスとともに予測ユニット(PU:prediction unit)を形成する。インター予測の場合、動きパラメータのセット(たとえば、1つまたは複数の動きベクトル、参照インデックスなど)は、PUごとにビットストリームの中でシグナリングされ、ルーマPBおよび1つまたは複数のクロマPBのインター予測のために使用される。イントラブロックコピー予測の場合、動きパラメータのセット(たとえば、1つまたは複数のブロックベクトルなど)も、PUごとにシグナリングされ得、イントラブロックコピー予測のために使用され得る。CBはまた、1つまたは複数の変換ブロック(TB:transform block)に区分され得る。TBは、予測残差信号をコーディングするために同じ2次元変換がそこに適用される、色成分のサンプルの正方形ブロックを表す。変換ユニット(TU:transform unit)は、ルーマサンプルおよびクロマサンプルのTB、ならびに対応するシンタックス要素を表す。
CUのサイズは、コーディングモードのサイズに対応し、形状が正方形であり得る。たとえば、CUのサイズは、8×8サンプル、16×16サンプル、32×32サンプル、64×64サンプル、または対応するCTUのサイズまでの任意の他の適切なサイズであってよい。本明細書では、「N×N」という句は、垂直寸法および水平寸法に関してビデオブロックのピクセル寸法(たとえば、8ピクセル×8ピクセル)を指すために使用される。ブロックの中のピクセルは、行および列をなして配置されてよい。いくつかの実施形態では、ブロックは、水平方向において垂直方向と同じ数のピクセルを有しなくてよい。CUに関連するシンタックスデータは、たとえば、1つまたは複数のPUへのCUの区分を記述し得る。区分モードは、CUがイントラ予測モード符号化されるのか、それともインター予測モード符号化されるのかの間で異なり得る。PUは、形状が非正方形であるように区分されてよい。CUに関連するシンタックスデータはまた、たとえば、CTUによる1つまたは複数のTUへのCUの区分を記述し得る。TUは、形状が正方形または非正方形であってよい。
HEVC規格によれば、変換は、変換ユニット(TU)を使用して実行され得る。TUは、異なるCUに対して異なってよい。TUは、所与のCU内のPUのサイズに基づいてサイズ決定され得る。TUは、同じサイズであってよく、またはPUより小さくてよい。いくつかの例では、CUに対応する残差サンプルは、残差4分木(RQT:residual quad tree)と呼ばれる4分木構造を使用して、より小さいユニットに再分割され得る。RQTのリーフノードは、TUに対応し得る。TUに関連するピクセル差分値は、変換係数を生成するように変換され得る。変換係数は、次いで、エンコーダエンジン106によって量子化され得る。
ビデオデータのピクチャがCUに区分されると、エンコーダエンジン106は、予測モードを使用して各PUを予測する。予測ユニットまたは予測ブロックは、次いで、残差(以下で説明する)を得るために元のビデオデータから減算される。CUごとに、予測モードが、シンタックスデータを使用してビットストリームの内部でシグナリングされ得る。予測モードは、イントラ予測(または、イントラピクチャ予測)またはインター予測(または、インターピクチャ予測)を含み得る。イントラ予測を使用すると、たとえば、PUにとっての平均値を見つけるためのDC予測、平坦面をPUに適合させるための平面予測、隣接データから外挿するための方向予測、または任意の他の適切なタイプの予測を使用して、同じピクチャの中の隣接画像データから各PUが予測される。インター予測を使用すると、1つまたは複数の(出力順序において現在ピクチャの前または後の)参照ピクチャの中の画像データからの動き補償予測を使用して、各PUが予測される。ピクチャエリアを、インターピクチャ予測を使用してコーディングすべきか、それともイントラピクチャ予測を使用してコーディングすべきかという決定は、たとえば、CUレベルにおいて行われ得る。
いくつかの例では、ピクチャの1つまたは複数のスライスは、スライスタイプが割り当てられる。スライスタイプは、Iスライス、Pスライス、およびBスライスを含む。Iスライス(独立に復号可能なイントラフレーム)は、イントラ予測のみによってコーディングされているピクチャのスライスであり、したがって、Iスライスがスライスの任意の予測ユニットまたは予測ブロックを予測するのにフレーム内のデータしか必要としないので、独立に復号可能である。Pスライス(単方向予測フレーム)は、イントラ予測を用いて、かつ単方向インター予測を用いてコーディングされ得るピクチャのスライスである。Pスライス内の各予測ユニットまたは予測ブロックは、イントラ予測またはインター予測のいずれかを用いてコーディングされる。インター予測が適用されるとき、予測ユニットまたは予測ブロックは、1つの参照ピクチャのみによって予測され、したがって、参照サンプルは、1つのフレームの1つの参照領域だけからのものである。Bスライス(双方向予測フレーム)は、イントラ予測を用いて、かつインター予測(たとえば、双予測または単予測のいずれか)を用いてコーディングされ得るピクチャのスライスである。Bスライスの予測ユニットまたは予測ブロックは、2つの参照ピクチャから双方向に予測され得、ここで、各ピクチャは1つの参照領域に寄与し、2つの参照領域のサンプルセットが重み付けられて(たとえば、等しい重みを用いて、または異なる重みを用いて)、双方向予測ブロックの予測信号を生成する。上述のように、1つのピクチャのスライスは、独立にコーディングされる。場合によっては、ピクチャは、ただ1つのスライスとしてコーディングされ得る。
イントラピクチャ予測は、ピクチャ内で空間的に隣接するサンプル間の相関を利用する。インターピクチャ予測は、画像サンプルのブロックに対する動き補償予測を導出するために、ピクチャ間の時間的な相関を使用する。並進動きモデルを使用すると、前に復号されたピクチャ(参照ピクチャ)の中のブロックの位置は動きベクトル(Δx,Δy)によって示され、Δxが現在ブロックの位置に対する参照ブロックの水平変位を規定し、Δyが現在ブロックの位置に対する参照ブロックの垂直変位を規定する。場合によっては、動きベクトル(Δx,Δy)は、整数サンプル精度(整数精度とも呼ばれる)であり得、その場合、動きベクトルは、参照フレームの整数ペルグリッド(または、整数ピクセルサンプリンググリッド)を指す。場合によっては、動きベクトル(Δx,Δy)は、参照フレームの整数ペルグリッドに制約されることなくその下にある対象物の移動をより正確に取り込むために、分数サンプル精度(分数ペル精度または非整数精度とも呼ばれる)であり得る。動きベクトルの精度は、動きベクトルの量子化レベルによって表現され得る。たとえば、量子化レベルは、整数精度(たとえば、1ピクセル)または分数ペル精度(たとえば、1/4ピクセル、1/2ピクセル、または他のサブピクセル値)であってよい。対応する動きベクトルが分数サンプル精度を有するときの予測信号を導出するために、参照ピクチャに補間が適用される。たとえば、整数位置において利用可能なサンプルは、分数位置における値を推定するために(たとえば、1つまたは複数の補間フィルタを使用して)フィルタ処理され得る。前に復号された参照ピクチャは、参照ピクチャリストへの参照インデックス(refIdx)によって示される。動きベクトルおよび参照インデックスは、動きパラメータと呼ばれることがある。単予測および双予測を含む2種類のインターピクチャ予測が実行され得る。
双予測を使用するインター予測の場合、2つの動き補償予測を(同じ参照ピクチャから、または場合によっては異なる参照ピクチャから)生成するために、動きパラメータの2つのセット(Δ0,Δy0,refIdx0およびΔx1,Δy1,refIdx1)が使用される。たとえば、双予測を用いると、各予測ブロックは、2つの動き補償予測信号を使用し、B予測ユニットを生成する。2つの動き補償予測は、次いで、組み合わせられて最終の動き補償予測を得る。たとえば、2つの動き補償予測は、平均化によって組み合わせられてよい。別の例では、重み付き予測が使用されてよく、その場合、異なる重みが各動き補償予測に適用され得る。双予測において使用され得る参照ピクチャは、リスト0およびリスト1として示される2つの別個のリストの中に記憶される。動きパラメータは、エンコーダにおいて動き推定プロセスを使用して導出され得る。
単予測を使用するインター予測の場合、参照ピクチャから動き補償予測を生成するために、動きパラメータの1つのセット(Δx0,Δy0,refIdx0)が使用される。たとえば、単予測を用いると、各予測ブロックは、多くて1つの動き補償予測信号を使用し、P予測ユニットを生成する。
PUは、予測プロセスに関係するデータ(たとえば、動きパラメータまたは他の適切なデータ)を含み得る。たとえば、PUがイントラ予測を使用して符号化されるとき、PUは、PU用のイントラ予測モードを記述するデータを含み得る。別の例として、PUがインター予測を使用して符号化されるとき、PUは、PU用の動きベクトルを規定するデータを含み得る。PU用の動きベクトルを規定するデータは、たとえば、動きベクトルの水平成分(Δx)、動きベクトルの垂直成分(Δy)、動きベクトルに対する分解能(たとえば、整数精度、1/4ピクセル精度、または1/8ピクセル精度)、動きベクトルが指す参照ピクチャ、参照インデックス、動きベクトル用の参照ピクチャリスト(たとえば、リスト0、リスト1、またはリストC)、またはそれらの任意の組合せを記述し得る。
符号化デバイス104は、次いで、変換および量子化を実行し得る。たとえば、予測に続いて、エンコーダエンジン106は、PUに対応する残差値を計算し得る。残差値は、コーディングされているピクセルの現在ブロック(PU)と現在ブロックを予測するために使用される予測ブロック(たとえば、現在ブロックの予測されたバージョン)との間のピクセル差分値を備え得る。たとえば、予測ブロックを生成した(たとえば、インター予測またはイントラ予測を送出した)後、エンコーダエンジン106は、予測ユニットによって生成された予測ブロックを現在ブロックから減算することによって、残差ブロックを生成することができる。残差ブロックは、現在ブロックのピクセル値と予測ブロックのピクセル値との間の差分を数量化するピクセル差分値のセットを含む。いくつかの例では、残差ブロックは、2次元のブロックフォーマット(たとえば、ピクセル値の2次元行列または2次元アレイ)で表され得る。そのような例では、残差ブロックは、ピクセル値の2次元表現である。
予測が実行された後に残ることがある任意の残差データは、ブロック変換を使用して変換され、ブロック変換は、離散コサイン変換、離散サイン変換、整数変換、ウェーブレット変換、他の適切な変換関数、またはそれらの任意の組合せに基づき得る。場合によっては、1つまたは複数のブロック変換(たとえば、サイズ32×32、16×16、8×8、4×4、または他の適切なサイズ)が、各CUにおける残差データに適用され得る。いくつかの実施形態では、エンコーダエンジン106によって実施される変換プロセスおよび量子化プロセスのためにTUが使用されてよい。1つまたは複数のPUを有する所与のCUはまた、1つまたは複数のTUを含み得る。以下でさらに詳細に説明するように、残差値は、ブロック変換を使用して変換係数に変換され得、次いで、エントロピーコーディングのためのシリアル化変換係数を生成するために、TUを使用して量子化および走査され得る。
いくつかの実施形態では、CUのPUを使用するイントラ予測コーディングまたはインター予測コーディングに続いて、エンコーダエンジン106は、CUのTUに対する残差データを計算し得る。PUは、空間領域(すなわち、ピクセル領域)におけるピクセルデータを備え得る。TUは、ブロック変換を適用した後の、変換領域における係数を備え得る。前記のように、残差データは、符号化されていないピクチャのピクセルとPUに対応する予測値との間のピクセル差分値に相当し得る。エンコーダエンジン106は、CUに対する残差データを含むTUを形成し得、次いで、TUを変換してCUに対する変換係数を生成し得る。
エンコーダエンジン106は、変換係数の量子化を実行し得る。量子化は、変換係数を量子化することによってさらなる圧縮をもたらして、係数を表すために使用されるデータの量を低減する。たとえば、量子化は、係数の一部または全部に関連するビット深度を低減し得る。一例では、nビット値を有する係数は、量子化の間にmビット値に切り捨てられてよく、nはmよりも大きい。
量子化が実行されると、コード化ビデオビットストリームは、量子化変換係数、予測情報(たとえば、予測モード、動きベクトル、ブロックベクトルなど)、区分情報、および他のシンタックスデータなどの任意の他の適切なデータを含む。コード化ビデオビットストリームの様々な要素が、次いで、エンコーダエンジン106によってエントロピー符号化され得る。いくつかの例では、エンコーダエンジン106は、既定の走査順序を利用して量子化変換係数を走査して、エントロピー符号化され得るシリアル化ベクトルを生成し得る。いくつかの例では、エンコーダエンジン106は適応走査を実行し得る。量子化変換係数を走査してベクトル(たとえば、1次元ベクトル)を形成した後、エンコーダエンジン106は、ベクトルをエントロピー符号化し得る。たとえば、エンコーダエンジン106は、コンテキスト適応型可変長コーディング、コンテキスト適応型バイナリ算術コーディング、シンタックスベースコンテキスト適応型バイナリ算術コーディング、確率間隔区分エントロピーコーディング、または別の適切なエントロピー符号化技法を使用してよい。
符号化デバイス104の出力部110は、符号化ビデオビットストリームデータを構成するNALユニットを、通信リンク120を介して受信デバイスの復号デバイス112へ送り得る。復号デバイス112の入力部114は、NALユニットを受信し得る。通信リンク120は、ワイヤレスネットワーク、有線ネットワーク、または有線ネットワークとワイヤレスネットワークとの組合せによって設けられる、チャネルを含み得る。ワイヤレスネットワークは、任意のワイヤレスインターフェースまたはワイヤレスインターフェースの組合せを含んでよく、任意の適切なワイヤレスネットワーク(たとえば、インターネットまたは他のワイドエリアネットワーク、パケットベースネットワーク、WiFi(商標)、無線周波数(RF)、UWB、WiFi-Direct、セルラー、ロングタームエボリューション(LTE)、WiMax(商標)など)を含んでよい。有線ネットワークは、任意の有線インターフェース(たとえば、ファイバ、イーサネット(登録商標)、電力線イーサネット(登録商標)、同軸ケーブルを介したイーサネット(登録商標)、デジタル信号ライン(DSL)など)を含んでよい。有線ネットワークおよび/またはワイヤレスネットワークは、基地局、ルータ、アクセスポイント、ブリッジ、ゲートウェイ、スイッチなどの様々な機器を使用して実装され得る。符号化ビデオビットストリームデータは、ワイヤレス通信プロトコルなどの通信規格に従って変調されてよく、受信デバイスへ送信されてよい。
いくつかの例では、符号化デバイス104は、符号化ビデオビットストリームデータをストレージ108に記憶し得る。出力部110は、エンコーダエンジン106から、またはストレージ108から、符号化ビデオビットストリームデータを取り出し得る。ストレージ108は、分散されるかまたは局所的にアクセスされる様々なデータ記憶媒体のうちのいずれかを含み得る。たとえば、ストレージ108は、ハードドライブ、ストレージディスク、フラッシュメモリ、揮発性メモリもしくは不揮発性メモリ、または符号化ビデオデータを記憶するための任意の他の適切なデジタル記憶媒体を含み得る。
復号デバイス112の入力部114は、符号化ビデオビットストリームデータを受信し、デコーダエンジン116に、またはデコーダエンジン116によって後で使用できるようにストレージ118に、ビデオビットストリームデータを提供し得る。デコーダエンジン116は、エントロピー復号すること(たとえば、エントロピーデコーダを使用して)、および符号化ビデオデータを構成する1つまたは複数のコード化ビデオシーケンスの要素を抽出することによって、符号化ビデオビットストリームデータを復号し得る。デコーダエンジン116は、次いで、符号化ビデオビットストリームデータを再スケーリングし得、符号化ビデオビットストリームデータにおいて逆変換を実行し得る。残差データが、次いで、デコーダエンジン116の予測ステージに渡される。デコーダエンジン116は、次いで、ピクセルのブロック(たとえば、PU)を予測する。いくつかの例では、逆変換の出力(残差データ)に予測が加算される。
復号デバイス112は、復号ビデオをビデオ宛先デバイス122に出力し得、ビデオ宛先デバイス122は、復号ビデオデータをコンテンツの消費者に表示するためのディスプレイまたは他の出力デバイスを含み得る。いくつかの態様では、ビデオ宛先デバイス122は、復号デバイス112を含む受信デバイスの一部であってよい。いくつかの態様では、ビデオ宛先デバイス122は、受信デバイス以外の別個のデバイスの一部であってよい。
補足エンハンスメント情報(SEI:Supplemental Enhancement information)メッセージが、ビデオビットストリームの中に含まれ得る。たとえば、SEIメッセージは、復号デバイス112によってビットストリームを復号するために必須でない情報(たとえば、メタデータ)を搬送するために使用され得る。この情報は、復号された出力の表示または処理を改善する際に有用である(たとえば、そのような情報は、コンテンツの視認性を改善するためにデコーダ側エンティティによって使用され得る)。
HEVC規格の拡張は、MV-HEVCと呼ばれるマルチビュービデオコーディング拡張、およびSHVCと呼ばれるスケーラブルビデオコーディング拡張を含む。MV-HEVC拡張およびSHVC拡張は階層化コーディングの概念を共有し、異なるレイヤが符号化ビデオビットストリームの中に含まれる。コード化ビデオシーケンスの中の各レイヤは、固有のレイヤ識別子(ID)によってアドレス指定される。レイヤIDは、NALユニットが関連付けられているレイヤを識別するために、NALユニットのヘッダの中に存在し得る。MV-HEVCでは、異なるレイヤは、ビデオビットストリームの中で同じシーンの異なるビューを表すことができる。SHVCでは、異なる空間解像度(すなわち、ピクチャ解像度)で、または異なる再構成忠実度でビデオビットストリームを表す、異なるスケーラブルレイヤが提供される。スケーラブルレイヤは、(レイヤID=0である)ベースレイヤ、および(レイヤID=1、2、...nである)1つまたは複数のエンハンスメントレイヤを含み得る。ベースレイヤは、HEVCの第1のバージョンのプロファイルに準拠し得、ビットストリームの中の最低利用可能レイヤを表す。エンハンスメントレイヤは、ベースレイヤと比較して増大した空間解像度、時間分解能もしくはフレームレート、および/または再構成忠実度(すなわち、品質)を有する。エンハンスメントレイヤは、階層的に編成され、下位レイヤに依存することがある(または、依存しないこともある)。いくつかの例では、異なるレイヤは、単一標準コーデックを使用してコーディングされ得る(たとえば、すべてのレイヤが、HEVC、SHVC、または他のコーディング規格を使用して符号化される)。いくつかの例では、異なるレイヤは、多標準コーデックを使用してコーディングされ得る。たとえば、ベースレイヤがAVCを使用してコーディングされてよく、1つまたは複数のエンハンスメントレイヤがHEVC規格に対するSHVC拡張および/またはMV-HEVC拡張を使用してコーディングされてよい。
概して、レイヤは、VCL NALユニットのセット、および非VCL NALユニットの対応するセットを含む。NALユニットは、特定のレイヤID値が割り当てられる。レイヤが下位レイヤに依存することがあるという意味で、レイヤは階層的であり得る。レイヤセットは、自蔵式であるビットストリーム内で表されるレイヤのセットを参照し、自蔵式とは、レイヤセット内のレイヤが、復号プロセスにおいてレイヤセットの中の他のレイヤに依存し得るが、いかなる他のレイヤにも復号のために依存しないことを意味する。したがって、レイヤセットの中のレイヤは、ビデオコンテンツを表すことができる独立したビットストリームを形成することができる。レイヤセットの中のレイヤのセットは、サブビットストリーム抽出プロセスの動作によって別のビットストリームから取得され得る。レイヤセットは、いくつかのパラメータに従って動作することをデコーダが望むときに復号されるべきレイヤのセットに相当し得る。
前に説明したように、HEVCビットストリームは、VCL NALユニットおよび非VCL NALユニットを含むNALユニットのグループを含む。VCL NALユニットは、コード化ビデオビットストリームを形成するコード化ピクチャデータを含む。たとえば、コード化ビデオビットストリームを形成するビットのシーケンスが、VCL NALユニットの中に存在する。非VCL NALユニットは、他の情報に加えて、符号化ビデオビットストリームに関係する高レベル情報を有するパラメータセットを含み得る。たとえば、パラメータセットは、ビデオパラメータセット(VPS:video parameter set)、シーケンスパラメータセット(SPS:sequence parameter set)、およびピクチャパラメータセット(PPS:picture parameter set)を含み得る。パラメータセットの目的の例は、ビットレート効率、エラーレジリエンシー、およびシステムレイヤインターフェースを提供することを含む。各スライスは、スライスを復号するために復号デバイス112が使用し得る情報にアクセスするために、単一のアクティブなPPS、SPS、およびVPSを参照する。識別子(ID)は、パラメータセットごとにコーディングされてよく、VPS ID、SPS ID、およびPPS IDを含む。SPSは、SPS IDおよびVPS IDを含む。PPSは、PPS IDおよびSPS IDを含む。各スライスヘッダは、PPS IDを含む。IDを使用して、アクティブなパラメータセットが所与のスライスに対して識別され得る。
PPSは、所与のピクチャの中のすべてのスライスに適用される情報を含む。これにより、ピクチャの中のすべてのスライスは、同じPPSを参照する。異なるピクチャの中のスライスも、同じPPSを参照し得る。SPSは、同じコード化ビデオシーケンス(CVS)またはビットストリームの中のすべてのピクチャに適用される情報を含む。前に説明したように、コード化ビデオシーケンスは、ベースレイヤの中で(上記で説明した)いくつかの特性を伴うランダムアクセスポイントピクチャ(たとえば、瞬時復号参照(IDR:instantaneous decode reference)ピクチャもしくはブロークンリンクアクセス(BLA:broken link access)ピクチャ、または他の適切なランダムアクセスポイントピクチャ)で開始し、ベースレイヤの中でいくつかの特性を伴うランダムアクセスポイントピクチャを有する次のアクセスユニット(AU)の直前(または、ビットストリームの末尾)までの、一連のAUである。SPSの中の情報は、コード化ビデオシーケンス内でピクチャからピクチャへと変化しないことがある。コード化ビデオシーケンスの中のピクチャは、同じSPSを使用し得る。VPSは、コード化ビデオシーケンス内またはビットストリーム内のすべてのレイヤに適用される情報を含む。VPSは、コード化ビデオシーケンス全体に適用されるシンタックス要素を有するシンタックス構造を含む。いくつかの実施形態では、VPS、SPS、またはPPSは、符号化ビットストリームとともにインバンド(in-band)で送信され得る。いくつかの実施形態では、VPS、SPS、またはPPSは、コード化ビデオデータを含むNALユニットとは別個の送信の中で、アウトオブバンド(out-of-band)で送信され得る。
いくつかの実施形態では、ビデオ符号化デバイス104および/またはビデオ復号デバイス112は、それぞれ、オーディオ符号化デバイスおよびオーディオ復号デバイスと統合されてよい。ビデオ符号化デバイス104および/またはビデオ復号デバイス112はまた、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、個別論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せなどの、上記で説明したコーディング技法を実施するために必要な他のハードウェアまたはソフトウェアを含んでよい。ビデオ符号化デバイス104およびビデオ復号デバイス112は、複合エンコーダ/デコーダ(コーデック)の一部としてそれぞれのデバイスの中に統合されてよい。符号化デバイス104の具体的な詳細の一例が、図7を参照しながら以下で説明される。復号デバイス112の具体的な詳細の一例が、図8を参照しながら以下で説明される。
動きを伴うテキストおよびグラフィックスなどのスクリーンコンテンツ材料用の新しいコーディングツールを得るための調査が実行されており、スクリーンコンテンツに対してコーディング効率を改善する技術が提案されている。専用のコーディングツールを用いてスクリーンコンテンツの特性を活用することによって、コーディング効率における著しい改善が取得され得る。スクリーンコンテンツコーディング(SCC:screen content coding)用の特定のツールを含む、高効率ビデオコーディング(HEVC)規格の将来の拡張をできる限り開発することを目標として、取組みが進行中である。
前に説明したように、イントラ予測およびインター予測を含む様々な予測モードが、ビデオコーディングプロセスにおいて使用され得る。イントラ予測の一形態は、イントラブロックコピー(IBC:intra-block copy)を含む。イントラ予測のイントラブロックコピーモードは、HEVC範囲拡張ワーキングドラフトテキスト(JCTVC-P1005)に含められた。画像ピクチャまたはフレームにおける冗長性を使用して、イントラブロックコピーは、ピクチャの隣接領域または非隣接領域の中のサンプルの再構成ブロックからの変位としてサンプルのブロック(たとえば、CU、PU、または他のコーディングブロック)を予測するために、ブロック整合を実行する。コンテンツのパターンを繰り返すことからの冗長性を除去することによって、イントラブロックコピー予測はコーディング効率を改善する。
イントラブロックコピー(IBC)モードは、非隣接サンプルからの空間予測を可能にするが、現在ピクチャ内の空間予測を可能にしない。たとえば、図2は、現在コーディングユニット202を予測するためにイントラブロックコピーが使用されるコード化ピクチャ200を示す。コーディングユニット202は、CTUまたはCTUの区分(たとえば、コーディングブロックと呼ばれるルーマサンプルアレイおよびクロマサンプルアレイを含むコーディングユニット(CU)、コーディングブロック、ルーマ予測ブロック(PB)および1つまたは複数のクロマPBを含む予測ユニット(PU)、予測ブロック、またはピクセルのブロックを含む他の区分)を含むことができる。現在コーディングユニット202は、ブロックベクトル206を使用して、コード化ピクチャ200の(ループ内フィルタリングの前の)すでに復号された予測ブロック204から予測される。ループ内フィルタリングは、ループ内デブロッキングフィルタおよびサンプル適応オフセット(SAO:Sample Adaptive Offset)フィルタのいずれかまたは両方を使用して実行され得る。デコーダでは、いかなる補間も伴わずに予測値が残差に加算され得る。たとえば、ブロックベクトル206は、整数値としてシグナリングされ得る。ブロックベクトル予測の後、HEVC規格において規定されるものなどの動きベクトル差分コーディング方法を使用して、ブロックベクトル差分が符号化される。イントラブロックコピーは、CUレベルとPUレベルの両方において可能にされる。いくつかの事例では、PUレベルイントラブロックコピーのために、2N×NおよびN×2NのPU区分がすべてのCUサイズに対してサポートされる。場合によっては、CUが最小のCUであるとき、N×NのPU区分がサポートされる。いくつかの例では、イントラブロックコピーは、同じスライスからの予測ブロックのみを使用するコーディングユニットに対して実行され得る。
IBCの探索エリアが大きいことなどに起因して、イントラブロックコピーに関して様々な問題が起こる。たとえば、イントラブロックコピーが使用されるとき、メモリ帯域幅および増大した処理を伴う問題が持ち込まれることがある。従来のイントラ予測モードに反して、イントラブロックコピーは、(予測ブロック、ブロック、またはサンプルのブロックと呼ばれることがある)非隣接サンプルからの空間予測を可能にする。これらの非隣接サンプルは、同じピクチャ内の(ループ内フィルタリングの前の)すでに復号されたサンプルのいずれかからのものであり得、ブロックベクトルによってシグナリングされ得る。これらの非隣接サンプルのメモリアクセスは、イントラブロックコピーが使用されるとき、全体的なメモリ帯域幅を増大させる。たとえば、少なくとも部分的には、(キャッシュメモリ/ローカルメモリの中にない)空間予測サンプルをフェッチすることによって、読取りアクセスが増大させられる。従来のイントラ予測モードでは、使用される隣接サンプルが上のサンプルの1行および左のサンプルの1列だけであり、そのようにキャッシュメモリの中に配置され得るので、読取りアクセスは、従来のイントラ予測結果と比較して増大する。しかしながら、イントラブロックコピーが使用されるとき、前に隣接サンプルおよび非隣接サンプルから符号化および/または復号されたサンプルは、参照ユニット(たとえば、予測ブロック)として使用されてよく、そのことは、記憶されることが必要なデータの量を増大させる。場合によっては、追加のデータは、キャッシュメモリまたは他のローカルメモリの中に記憶され得ず、追加の記憶メカニズムを使用して記憶されなければならない。したがって、増大した数の利用可能なサンプルをサポートするために、システムは追加のメモリ使用をサポートする必要がある。
さらに、イントラブロックコピー空間予測のためにフィルタ処理されていないサンプル(たとえば、予測ブロック)と将来のピクチャ用の出力/時間予測のためにフィルタ処理された再構成サンプルの両方を記憶することに部分的に起因して、書込みアクセスが増大させられる。たとえば、フィルタ処理されていないサンプルは、イントラブロックコピーのための参照として使用され、したがって、システムは、フィルタ処理されていないサンプル、ならびにループ内フィルタリングの間に生成されるフィルタ処理されたサンプルを記憶する必要がある。フィルタ処理されたサンプルは、(たとえば、インター予測を使用する)後続のフレームの予測のために使用され得る。
前に説明したように、インター予測モードは、単予測または双予測を含み得る。双予測の場合、予測ブロックは2つの動き補償予測信号および2つの動きベクトル(MV:motion vector)を使用し、そのことはメモリおよび処理に負担をかける。さらに、上記で説明したように、フィルタ処理されたサンプルに加えて、現在ピクチャの非隣接サンプルおよびフィルタ処理されていないサンプルを記憶することが追加として必要であることに起因して、イントラブロックコピーモードはワーストケースメモリアクセス(全体的なワーストケース帯域幅)を増大させる。
ビデオコーディングのためのいくつかの予測モードに制約をもたらす、コーディングの1つまたは複数のシステムおよび方法が本明細書で説明され、上記で説明した問題を効率的に解決するために使用され得る。たとえば、コーディングの1つまたは複数のシステムおよび方法は、メモリ帯域幅効率を改善すること、ワーストケースメモリアクセスを制限すること、および(たとえば、スクリーンコンテンツコーディングなどの高効率ビデオコーディング(HEVC)拡張、または他のHEVC拡張のための)イントラブロックコピーの他の態様を対象とする。本明細書で提案するシステムおよび方法はまた、概して、できる限り高いビット深度(たとえば、8ビット以上、または他のビット深度)、高いクロマサンプリングフォーマット(たとえば、4:4:4および4:2:2、または他のサンプリングを含む)、またはHEVCおよびHEVC拡張の他の態様のサポートを含む、HEVCおよびHEVC拡張に適用可能である。
いくつかの条件が満たされるとき、ビデオデータにおいてインター予測双予測が実行されるのを防止する制約を課するための、1つまたは複数の実施形態が本明細書で説明される。たとえば、イントラブロックコピー予測および他の条件に基づいて双予測を制約する様々な例が以下で提供される。本明細書で説明する実施形態および/または例の各々は、他の実施形態と一緒または別個に働くことができる。提案する方法はイントラブロックコピーに関して説明されるが、1-Dディクショナリ、パレットコーディング、または他の適切なコーディング技法などの、高い帯域幅要件およびキャッシュ要件を有する他のコーディングツールにも適用され得る。
いくつかの例では、イントラブロックコピー予測が有効にされているとき、双予測に制約が課され得る。たとえば、ビデオデータの1つまたは複数のコーディングユニットまたは予測ブロックに対してイントラブロックコピー予測が有効にされているとき、双予測制約が適用され得る。そのような例では、イントラブロックコピー予測が有効にされているとき、いくつかのコーディングユニット(たとえば、コーディングされている現在ブロック)に対して双予測が無効にされ得る。8×8双予測または他の双予測などの、双予測の様々な形式が制約されてよい。双予測を制約することによって、HEVC v1ワーストケース帯域幅制限は、スクリーンコンテンツコーディング(SCC)拡張などに対して維持され得る。
いくつかの例では、イントラブロックコピー予測が有効にされていることに加えて、他の条件も双予測制約が適用されるのに必要とされ得る。たとえば、他の条件は、(たとえば、スライスに対して、コーディングユニットに対してなど、)1つまたは複数の動きベクトルが非整数精度(たとえば、分数動きベクトル)であること、双予測ブロックの両方の動きベクトルが非整数精度であること、双予測ブロックの動きベクトルが同一でなくかつ/または同じ参照ピクチャを指していないこと、あるいはそれらの任意の組合せを示す値を有するシンタックス要素を、含むことができる。(イントラブロックコピー予測が有効にされていることに加えて)これらの条件のうちの1つまたは複数が満たされる場合、いくつかのコーディングユニットまたはブロックにおいて双予測が実行されるのを防止する、双予測への制約が適用され得る。双予測制約が課されるとき、ビデオデータを符号化または復号するために、単予測およびイントラ予測(たとえば、IBCまたは他のイントラ予測)を含む他の予測モードが利用可能である。場合によっては、条件のうちの1つまたは複数が満たされるとき、単予測も制約され得る。(その動きベクトルが非整数精度であること、および/あるいは同一でなくかつ/または同じ参照ピクチャを指していないことに対してチェックされる)双予測ブロックは、コーディングされている現在ブロックを含むピクチャからのものか、現在ブロックを含むスライスからのものか、または現在ブロックを含むコーディングユニット(たとえば、復号されているビデオデータのCTU、CU、または他のユニット)からのものであり得る。たとえば、コーディングされている現在ブロックを含む現在ピクチャの中の任意の双予測ブロックが、非整数精度であり、かつ/あるいは同一でないかまたは同じ参照ピクチャを指していない、両方の動きベクトルを有する場合、制約が課され得る(IBCが有効にされていることなどの他の制約が満たされるとき)。別の例では、コーディングされている現在ブロックを含む現在スライスの中の任意の双予測ブロックが、非整数精度であり、かつ/あるいは同一でないかまたは同じ参照ピクチャを指していない、両方の動きベクトルを有する場合、制約が課され得る(IBCが有効にされていることなどの他の制約が満たされるとき)。別の例では、コーディングされている現在ブロックを含む現在コーディングユニットの中の任意の双予測ブロックが、非整数精度であり、かつ/あるいは同一でないかまたは同じ参照ピクチャを指していない、両方の動きベクトルを有する場合、制約が課され得る(IBCが有効にされていることなどの他の制約が満たされるとき)。
いくつかの例では、イントラブロックコピーが有効にされており、かつuse_integer_mvフラグが1つまたは複数の動きベクトルが非整数精度であることを示す値に設定されているとき、双予測に制約が課され得る。use_integer_mvフラグは、スライスレベルまたはブロックレベルにおいてシグナリングされ得る。たとえば、1つまたは複数の動きベクトルは、スライス内の任意のブロック、特定のコーディングユニットもしくはブロック、またはピクチャの他のユニットに関連付けられ得る。例示的な一例では、(イントラブロックコピー予測が有効にされていることに加えて)スライス内の任意のブロックに関連付けられた任意の動きベクトルが非整数精度である場合、制約が適用され得る。use_integer_mvフラグは、本明細書で動きベクトル分解能フラグと呼ばれることがある。動きベクトル分解能フラグは、インター予測モードに対して使用される動きベクトル(MV)の分解能を規定する。たとえば、動きベクトル分解能フラグは、(たとえば、スライスに対して、コーディングユニットに対してなど、)1つまたは複数の動きベクトルが非整数精度(たとえば、分数動きベクトル)であることを示す値に設定され得る。例示的な一例では、動きベクトル分解能フラグにとって0という値は、(たとえば、スライスの中の、コーディングユニットの中の、またはピクチャの他の部分の)1つまたは複数の動きベクトルが分数ペル精度を有することを示し、動きベクトル分解能フラグに対する1という値は、(たとえば、スライスの中の、コーディングユニットの中の、またはピクチャの他の部分の)すべての動きベクトルが整数精度であることを示す。1という値が、分数ペル精度を有するものとして1つまたは複数の動きベクトルを示すことができ、0という値が、すべての動きベクトルが整数精度を有することを示すことができることを、当業者なら諒解されよう。
双予測への制約が適用され得る前に、1つまたは複数の他の条件が満たされる必要があり得る。HEVCへのスクリーンコンテンツコーディング(SCC)拡張の場合、双予測ブロック(たとえば、8×8双予測ブロック、または4×8、8×4、16×16などの他の適切なサイズ決定された双予測ブロック、または任意の他の適切なサイズの双予測ブロック)の動きベクトル(MV)のうちの少なくとも1つが整数精度を有するとき、HEVCバージョン1帯域幅ワーストケース制限は維持される(超過されない)。たとえば、分数精度を有する動きベクトルが使用されるときしか補間が必要とされないので、MVが整数精度であるとき、補間のために必要とされるサンプルがロードされる必要がないという事実に起因して、帯域幅ワーストケース制限はこのシナリオにおいて維持される。双予測ブロックのMVが整数精度を有するときのシナリオでは、双予測制約(たとえば、8×8双予測制約または他の適切な双予測制約)は課されなくてよい。双予測を制約するための条件は、そのように双予測ブロックの両方のMVが非整数精度(たとえば、分数ペル精度)であることを含むことができる。前に述べたように、動きベクトルの精度は、動きベクトルの量子化レベルによって表現され得る。量子化レベルは、たとえば、整数精度(たとえば、1ピクセル)または分数ペル精度(たとえば、1/4ピクセル、1/2ピクセル、または他のサブピクセル値)であってよい。
さらに、HEVCへのSCC拡張の場合、双予測ブロックの両方のMVが同一であり、かつ/または同じ参照ピクチャ(refPic)を指すとき、HEVCバージョン1帯域幅ワーストケース制限が維持される。たとえば、両方のMVが同一であり同じrefPicを指しているとき、予測サンプルがMVごとに2回ロードされる必要がないという事実に起因して、このシナリオにおいて帯域幅ワーストケース制限は維持される。すなわち、MVが同じサンプルを指すので、同じ予測サンプルは1回だけロードされてよい。双予測ブロックの両方のMVが同一であり同じrefPicを指すときのシナリオでは、双予測制約(たとえば、8×8双予測制約)は課される必要がない。双予測を制約するための別の条件は、そのように双予測ブロックのMVが同一であることおよび/または同じ参照インデックスからのものであることを含むことができる。
上記で説明した例によれば、1つまたは複数の実施形態は、双予測(たとえば、8×8双予測、または他の双予測)に選択的に制約を課することを含む。いくつかの事例では、より大きい圧縮効率という利点を双予測がもたらすので、コーダが双予測を実行することがより良好であり得、双予測が制約されるとき、効率は失われる。したがって、双予測への洗練された制約が本明細書で提供され、ここで、制約は、それが必要とされる場合のみ適用される。たとえば、それらの任意の組合せを含む1つまたは複数またはすべての条件が満たされるとき、双予測(たとえば、8×8双予測または他の双予測)は制約され得る。制約は、条件が満たされるときに双予測を無効にすることを含み得る。条件は、たとえば、以下のことを含み得る。
a)スライス、ピクチャ、またはシーケンスレベルのIBC制御に基づいて、現在ブロックに対してIBCが有効にされている。
b)現在スライスに対してuse_integer_mvが0に等しい。
c)双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度である(たとえば、MVが分数ペル精度である)。
d)以下のこと、すなわち、双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一であり、かつ同じ参照ピクチャを指していることが、真でない。
上の条件のうちの1つもしくは複数が満たされるとき、条件の組合せが満たされるとき、または条件のすべてが満たされるとき、双予測への制約が課され得る。同様に、上の条件のうちの1つもしくは複数が満たされないとき、条件の組合せが満たされないとき、または条件のすべてが満たされないとき、双予測への制約は課されなくてよい。
一例では、現在ブロックまたは他のコーディングユニットに対してイントラブロックコピーが有効にされており、use_integer_mvフラグの値が0であり(現在ブロックを含むスライスの中の1つまたは複数のMVが非整数精度であることを示す)、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であるとき、インターフレーム(Iフレーム)の中のいくつかの予測ブロックに対して制約が課され双予測が無効にされる。たとえば、既定のサイズ(たとえば、8×8双予測ブロックまたは他の適切なサイズ)以下であるサイズを有する予測ブロックなどの、いくつかの予測ブロックのみに対して双予測は無効にされ得る。
別の例では、現在ブロックまたは他のコーディングユニットに対してイントラブロックコピーが有効にされており、use_integer_mvフラグの値が0であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、Iフレームの中のいくつかの予測ブロックに対して双予測は無効にされる(たとえば、予測ブロックサイズが8×8または他の適切なサイズなどの既定のサイズ以下であるとき)。
また別の例では、現在ブロックまたは他のコーディングユニットに対してイントラブロックコピーが有効にされており、use_integer_mv_flagの値が0であり、双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、Iフレームの中のいくつかの予測ブロックに対して双予測は無効にされる(たとえば、予測ブロックサイズが8×8または他の適切なサイズなどの既定のサイズ以下であるとき)。
別の例では、現在ブロックまたは他のコーディングユニットに対してイントラブロックコピーが有効にされており、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であるとき、インターフレーム(Iフレーム)の中のいくつかの予測ブロックに対して制約が課され双予測が無効にされる。たとえば、既定のサイズ(たとえば、8×8双予測ブロックまたは他の適切なサイズ)以下であるサイズを有する予測ブロックなどの、いくつかの予測ブロックのみに対して双予測は無効にされ得る。
別の例では、現在ブロックまたは他のコーディングユニットに対してイントラブロックコピーが有効にされており、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、Iフレームの中のいくつかの予測ブロックに対して双予測は無効にされる(たとえば、予測ブロックサイズが8×8または他の適切なサイズなどの既定のサイズ以下であるとき)。
また別の例では、現在ブロックまたは他のコーディングユニットに対してイントラブロックコピーが有効にされており、双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、Iフレームの中のいくつかの予測ブロックに対して双予測は無効にされる(たとえば、予測ブロックサイズが8×8または他の適切なサイズなどの既定のサイズ以下であるとき)。
いくつかの実施形態では、双予測へのデコーダ側制約は、上の条件a)〜d)のうちの1つもしくは複数またはそれらの組合せに基づいて実施され得る。たとえば、条件a)〜d)のうちの1つまたは複数が満たされるとき、双予測(たとえば、8×8双予測または任意の他の双予測)がシグナリングされ得ないようにシンタックス要素inter_pred_idcのいくつかの値(たとえば、inter_pred_idc==2)を許容しないことによって、条件a)〜d)がデコーダ制約として課され得る。シンタックス要素inter_pred_idcは、現在の予測ユニットに対してリスト0が使用されるのか、リスト1が使用されるのか、それとも双予測が使用されるのかを規定し得る。
上記で与えられた例のいずれかが、双予測にデコーダ側制約を課するために使用され得る。たとえば、イントラブロックコピーが有効にされており、かつuse_integer_mvが0であるとき、デコーダ側制約は適用され得る。別の例として、イントラブロックコピーが有効にされており、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であるとき、デコーダ側制約は適用され得る。また別の例として、イントラブロックコピーが有効にされており、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、デコーダ側制約は適用され得る。別の例として、イントラブロックコピーが有効にされており、use_integer_mvが0であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であるとき、デコーダ側制約は適用され得る。別の例として、イントラブロックコピーが有効にされており、use_integer_mvが0であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、デコーダ側制約は適用され得る。また別の例として、イントラブロックコピーが有効にされており、use_integer_mvが0であり、双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、デコーダ側制約は適用され得る。別の例として、イントラブロックコピーが有効にされており、双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)の両方のMVが非整数精度であり、かつ双予測ブロック(たとえば、8×8双予測ブロックまたは他のサイズの双予測ブロック)のMVが同一でなくかつ/または同じ参照ピクチャを指していない(上の条件d)が満たされる)とき、デコーダ側制約は適用され得る。
デコーダ側制約の一例では、イントラブロックコピーが有効にされており、かつuse_integer_mvが0であるとき、8×8双予測(または、他の双予測)は許容され得ない。この例が8×8双予測以外の他のタイプの双予測に適用されることを当業者なら諒解されよう。たとえば、変数EightbyEightBiPredRestrictionEnableflagが、EightbyEightBiPredRestrictionEnableflag = curr_pic_as_ref_enabled_flag && !use_integer_mv_flagとして導出され得る。この導出において、curr_pic_as_ref_enabled_flagは、SPSフラグ、PPSフラグ、またはVPSフラグに基づき得る。いくつかの例では、1に等しいcurr_pic_as_ref_enabled_flagは、SPSまたはPPS(または、他のパラメータセット)を参照する現在ピクチャがそのピクチャ自体の参照ピクチャリストの中に含まれ得ることを規定し得る(それがIBCベースの予測において使用され得ることを意味する)。いくつかの例では、0に等しいcurr_pic_as_ref_enabled_flagは、SPSまたはPPS(または、他のパラメータセット)を参照するピクチャがそのピクチャ自体のいかなる参照ピクチャリストの中にも絶対に含まれないことを規定し得る。いくつかの例では、存在しないとき、curr_pic_as_ref_enabled_flagの値は0(または、いくつかの例では1)に等しいものと推定されてよい。EightbyEightBiPredRestrictionEnableflagフラグは双予測制約フラグとも呼ばれ、curr_pic_as_ref_enabled_flagはIBCフラグとも呼ばれる。上の公式化を使用すると、IBCフラグが1に等しく、かつ動きベクトル分解能フラグが0に等しいとき、双予測制約フラグは1に等しい。双予測制約フラグが1に等しいとき、双予測制約は有効にされる。
現在の「高効率ビデオコーディング(HEVC)スクリーンコンテンツコーディング:ドラフト3」によれば、inter_pred_idc[x0][y0]シンタックスは、現在の予測ユニットに対してリスト0が使用されるのか、リスト1が使用されるのか、それとも双予測が使用されるのかを、以下に示すTable 7-11(表1)に従って規定する。アレイインデックスx0、y0は、考慮される予測ブロックの左上ルーマサンプルの、ピクチャの左上ルーマサンプルに対するロケーション(x0,y0)を規定する。2つの変数nPbWおよびnPbHは、現在のルーマ予測ブロックの幅および高さを規定する。
イントラブロックコピーが有効にされており、かつuse_integer_mvが0であるときに、8×8双予測(または、他の双予測)が許容されない上記の例示的な実装形態では、現在の予測ユニットに対してリスト0が使用されるのか、リスト1が使用されるのか、それとも双予測が使用されるのかを規定するinter_pred_idc[x0][y0]の値は、Table 7-11(表1)の修正されたバージョン(Table 1(表2)-インター予測モードへの名称関連付け、として以下でラベル付けされる)に従って導出される。
デコーダ側制約の第2の例では、例は、イントラブロックコピーが有効にされており、use_integer_mvが0であり、8×8双予測ブロックの両方のMVが非整数精度(たとえば、分数ペル精度)であり、かつ以下のこと、すなわち、8×8双予測ブロックのMVが同一であり同じ参照ピクチャを指すことが真でないとき(8×8双予測ブロックのMVが同一でないこと、または同じ参照ピクチャを指していないことのうちの、いずれか一方または両方を意味する)、8×8双予測(または、他の双予測)を許容しないことを含み得る。この例では、変数EightbyEightBiPredhasIntegermvは、EightbyEightBiPredhasnoIntegermv = !((mvL0 & 0x3 == 0) || (mvL1&0x3 == 0))として導出される。変数EightbyEightBiPredIdenticalMvは、EightbyEightBiPrednotIdenticalMv = !((mvL0 == mvL1) && (refIdxL0 == refIdxL1))として導出される。変数EightbyEightBiPredRestrictionEnableflagは、EightbyEightBiPredRestrictionEnableflag = (curr_pic_as_ref_enabled_flag && !use_integer_mv && EightbyEightBiPredhasnoIntegermv && EightbyEightBiPrednotIdenticalMv)として導出される。この導出において、curr_pic_as_ref_enabled_flagは、SPSフラグまたはPPSフラグに基づき得る。
デコーダ側制約の上記の第2の例示的な実装形態では、現在の予測ユニットに対してリスト0が使用されるのか、リスト1が使用されるのか、それとも双予測が使用されるのかを規定するinter_pred_idc[x0][y0]の値は、Table 7-11(表1)の別の修正されたバージョン(Table 2(表3)-インター予測モードへの名称関連付け、として以下でラベル付けされる)に従って導出され、対応する変数の異なる値を伴う。
本明細書で説明する技法およびシステムを使用して、イントラブロックコピー技法は低減されたメモリ帯域幅要件およびサイズ要件を伴って実行される。たとえば、イントラブロックコピー予測が使用され、いくつかの他の条件が満たされるとき、双予測が無効にされてよく、その結果、メモリ帯域幅への負担およびサイズが最小限に抑えられる。その結果、メモリ帯域幅効率が改善され、ワーストケースメモリアクセスが制限され、イントラブロックコピーの他の態様が拡張される。
図3は、本明細書で説明する技法のうちの1つまたは複数を使用する、1つまたは複数の符号化ビデオピクチャを生成するためにビデオデータを符号化するプロセス300の一例を示す。302において、プロセス300は、エンコーダにおいてビデオデータを取得することを含む。ビデオデータは、現在ピクチャ、現在ピクチャの現在スライス、現在コーディングユニット(たとえば、コーディングされているビデオデータのCTU、CU、または他のユニット)、または任意の他のビデオデータを含むことができる。
304において、プロセス300は、ビデオデータの少なくとも1つのブロックにおいてイントラピクチャ予測を実行するためにイントラブロックコピー予測が有効にされていると決定することを含む。たとえば、現在ピクチャのブロック、現在スライスのブロック、現在コーディングユニット(たとえば、コーディングされているビデオデータのCTU、CU、または他のユニット)のブロックに対して、IBCが有効にされ得る。いくつかの例では、ピクチャ、スライス、またはコード化ビデオシーケンス(CVS)レベルにおいてIBCが有効にされ得る。
306において、プロセス300は、ビデオデータの双予測ブロックの両方の動きベクトルが非整数精度であると決定することを含む。たとえば、双予測ブロックの両方のベクトルは、上記で説明したように、分数ペル精度を有するものと決定され得る。いくつかの例では、双予測ブロックは、8×8双予測ブロックを含む。いくつかの例では、双予測ブロックは、4×4ブロック、16×16ブロック、または任意の他の適切なブロックなどの、特定の区分サイズを有する任意のブロックを含むことができる。
308において、プロセス300は、ビデオデータの1つまたは複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。インター予測双予測は、イントラブロックコピー予測が有効にされているという決定、および双予測ブロックの両方の動きベクトルが非整数精度であるという決定に応答して無効にされる。いくつかの例では、インターピクチャ双予測が無効にされるとき、インターピクチャ単予測が依然として使用されてよい。いくつかの例では、インターピクチャ双予測が無効にされるとき、インターピクチャ単予測も無効にされてよい。
310において、プロセス300は、予測モードを使用して1つまたは複数の符号化ビデオピクチャを生成することを含む。予測モードは、イントラ予測またはインター予測単予測を含むことができる。例示的な一例では、プロセス300は、1つまたは複数の符号化ビデオピクチャを生成するために、イントラブロックコピー予測を使用してビデオデータにおいてイントラピクチャ予測を実行することを含むことができる。別の例示的な例では、プロセス300は、1つまたは複数の符号化ビデオピクチャを生成するために、イントラピクチャ予測を実行することを含むことができる。別の例示的な例では、プロセス300は、1つまたは複数の符号化ビデオピクチャを生成するために、インターピクチャ単予測を実行することを含むことができる。
いくつかの態様では、プロセス300は、双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないと決定することを含む。そのような態様では、308においてインター予測双予測を無効にすることは、イントラピクチャ予測が有効にされているという決定、双予測ブロックの両方の動きベクトルが非整数精度であるという決定、および双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないという決定に応答して、ビデオデータの1つまたは複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。
いくつかの態様では、プロセス300は、動きベクトル分解能フラグの値が0に等しいと決定することを含む。動きベクトル分解能フラグは、インター予測モードのために使用される動きベクトルの分解能を規定する。いくつかの例では、動きベクトル分解能フラグは、上記で説明したuse_integer_mvフラグを含む。そのような態様では、308においてインター予測双予測を無効にすることは、イントラピクチャ予測が有効にされているという決定、双予測ブロックの両方の動きベクトルが非整数精度であるという決定、および動きベクトル分解能フラグの値が0に等しいという決定に応答して、ビデオデータの1つまたは複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。
いくつかの態様では、ビデオデータは、ピクチャのスライスを備える。スライスは、上記で説明したように、複数のブロックを含む。そのような態様では、308においてインター予測双予測を無効にすることは、スライスの複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。たとえば、インターピクチャ双予測は、そのスライスのブロックのみに対して制約されてよく、ピクチャの他のスライスブロックに対して制約されなくてよい。いくつかの例では、ピクチャは、単一のスライスのみを含むことができる。いくつかの例では、ピクチャは、複数のスライスを含むことができる。
いくつかの態様では、しきい値サイズよりも小さい予測ブロックを符号化することに関してインターピクチャ双予測が無効にされる。いくつかの例では、しきい値サイズは、8×8ピクセルの予測ブロックサイズ、または任意の他の適切なブロックサイズを含む。
図4は、本明細書で説明する技法のうちの1つまたは複数を使用する、1つまたは複数の符号化ビデオピクチャを生成するためにビデオデータを符号化するプロセス400の別の例を示す。402において、プロセス400は、エンコーダにおいてビデオデータを取得することを含む。ビデオデータは、現在ピクチャ、現在ピクチャの現在スライス、現在コーディングユニット(たとえば、コーディングされているビデオデータのCTU、CU、または他のユニット)、または任意の他のビデオデータを含むことができる。
404において、プロセス400は、ビデオデータの少なくとも1つのブロックにおいてイントラピクチャ予測を実行するためにイントラブロックコピー予測が有効にされていると決定することを含む。たとえば、現在ピクチャのブロック、現在スライスのブロック、現在コーディングユニット(たとえば、コーディングされているビデオデータのCTU、CU、または他のユニット)のブロックに対して、IBCが有効にされ得る。いくつかの例では、ピクチャ、スライス、またはコード化ビデオシーケンス(CVS)レベルにおいてIBCが有効にされ得る。
406において、プロセス400は、ビデオデータの双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないと決定することを含む。いくつかの例では、双予測ブロックは、8×8双予測ブロックを含む。いくつかの例では、双予測ブロックは、4×4ブロック、16×16ブロック、または任意の他の適切なブロックなどの、特定の区分サイズを有する任意のブロックを含むことができる。
408において、プロセス400は、ビデオデータの1つまたは複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。インター予測双予測は、イントラブロックコピー予測が有効にされているという決定、および双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないという決定に応答して無効にされる。いくつかの例では、インターピクチャ双予測が無効にされるとき、インターピクチャ単予測が依然として使用されてよい。いくつかの例では、インターピクチャ双予測が無効にされるとき、インターピクチャ単予測も無効にされてよい。
410において、プロセス400は、予測モードを使用して1つまたは複数の符号化ビデオピクチャを生成することを含む。予測モードは、イントラ予測またはインター予測単予測を含むことができる。例示的な一例では、プロセス400は、1つまたは複数の符号化ビデオピクチャを生成するために、イントラブロックコピー予測を使用してビデオデータにおいてイントラピクチャ予測を実行することを含むことができる。別の例示的な例では、プロセス400は、1つまたは複数の符号化ビデオピクチャを生成するために、イントラピクチャ予測を実行することを含むことができる。別の例示的な例では、プロセス400は、1つまたは複数の符号化ビデオピクチャを生成するために、インターピクチャ単予測を実行することを含むことができる。
いくつかの態様では、プロセス400は、双予測ブロックの両方の動きベクトルが非整数精度であると決定することを含む。そのような態様では、408においてインター予測双予測を無効にすることは、イントラピクチャ予測が有効にされているという決定、双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないという決定、および双予測ブロックの両方の動きベクトルが非整数精度であるという決定に応答して、ビデオデータの1つまたは複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。
いくつかの態様では、プロセス400は、動きベクトル分解能フラグの値が0に等しいと決定することを含む。動きベクトル分解能フラグは、インター予測モードのために使用される動きベクトルの分解能を規定する。そのような態様では、408においてインター予測双予測を無効にすることは、イントラピクチャ予測が有効にされているという決定、双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないという決定、および動きベクトル分解能フラグの値が0に等しいという決定に応答して、ビデオデータの1つまたは複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。
いくつかの態様では、ビデオデータは、ピクチャのスライスを備える。スライスは、上記で説明したように、複数のブロックを含む。そのような態様では、408においてインター予測双予測を無効にすることは、スライスの複数のブロックを符号化することに関してインターピクチャ双予測を無効にすることを含む。たとえば、インターピクチャ双予測は、そのスライスのブロックのみに対して制約されてよく、ピクチャの他のスライスブロックに対して制約されなくてよい。いくつかの例では、ピクチャは、単一のスライスのみを含むことができる。いくつかの例では、ピクチャは、複数のスライスを含むことができる。
いくつかの態様では、しきい値サイズよりも小さい予測ブロックを符号化することに関してインターピクチャ双予測が無効にされる。いくつかの例では、しきい値サイズは、8×8ピクセルの予測ブロックサイズ、または任意の他の適切なブロックサイズを含む。
図5は、本明細書で説明する技法のうちの1つまたは複数を使用する、1つまたは複数の復号ビデオピクチャを生成するためにビデオデータを復号するプロセス500の一例を示す。502において、プロセス500は、複数の予測モードを使用して符号化された符号化ビデオデータをビデオビットストリームの中で受信することを含む。複数の予測モードは、インターピクチャ単予測モード、インターピクチャ双予測モード、およびイントラピクチャイントラブロックコピーモードを備える。符号化ビデオデータは、現在ピクチャ、現在ピクチャの現在スライス、現在コーディングユニット(たとえば、復号されているビデオデータのCTU、CU、または他のユニット)、または任意の他のビデオデータを含むことができる。
504において、プロセス500は、符号化ビデオデータの1つまたは複数のブロックに対してインターピクチャ双予測が無効にされているという表示をビデオビットストリームの中で受信することを含む。インターピクチャ双予測は、符号化ビデオデータの1つまたは複数のブロックに対してイントラブロックコピーが有効にされていること、および符号化ビデオデータの双予測ブロックの両方の動きベクトルが非整数精度であることに基づいて無効にされる。たとえば、双予測ブロックの両方のベクトルは、上記で説明したように、分数ペル精度を有するものと決定され得る。いくつかの例では、現在ピクチャのブロック、現在スライスのブロック、現在コーディングユニット(たとえば、復号されているビデオデータのCTU、CU、または他のユニット)のブロックに対して、IBCが有効にされ得る。いくつかの例では、ピクチャ、スライス、またはコード化ビデオシーケンス(CVS)レベルにおいてIBCが有効にされ得る。いくつかの例では、非整数動きベクトルを有する双予測ブロックは、8×8双予測ブロックを含む。いくつかの例では、双予測ブロックは、4×4ブロック、16×16ブロック、または任意の他の適切なブロックなどの、特定の区分サイズを有する任意のブロックを含むことができる。
506において、プロセス500は、符号化ビデオデータのブロックを予測するための複数の予測モードの中から、予測モードを表示に基づいて決定することを含む。たとえば、符号化ビデオデータを復号する際の使用のために、インターピクチャ単予測モードまたはイントラピクチャイントラブロックコピーモードが選択され得る。
508において、プロセス500は、決定された予測モードを使用して符号化ビデオデータのブロックを復号することを含む。たとえば、符号化ビデオデータは、インターピクチャ単予測モードまたはイントラピクチャイントラブロックコピーモードを使用して復号され得る。
いくつかの例では、インターピクチャ双予測は、符号化ビデオデータの1つまたは複数のブロックに対してイントラブロックコピーが有効にされていること、符号化ビデオデータの双予測ブロックの両方の動きベクトルが非整数精度であること、および双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないことに基づいて無効にされる。
いくつかの例では、インターピクチャ双予測は、符号化ビデオデータの1つまたは複数のブロックに対してイントラブロックコピーが有効にされていること、符号化ビデオデータの双予測ブロックの両方の動きベクトルが非整数精度であること、および動きベクトル分解能フラグの値が0に等しいことに基づいて無効にされ、動きベクトル分解能フラグは、インター予測モードのために使用される動きベクトルの分解能を規定する。
いくつかの態様では、符号化ビデオデータは、ピクチャのスライスを備える。スライスは、上記で説明したように、複数のブロックを含む。そのような態様では、スライスの複数のブロックを復号することに関してインター予測双予測が無効にされる。
いくつかの態様では、しきい値サイズよりも小さい予測ブロックを復号することに関してインターピクチャ双予測が無効にされる。いくつかの例では、しきい値サイズは、8×8ピクセルの予測ブロックサイズ、または任意の他の適切なブロックサイズを含む。
図6は、本明細書で説明する技法のうちの1つまたは複数を使用する、1つまたは複数の復号ビデオピクチャを生成するためにビデオデータを復号するプロセス600の別の例を示す。602において、プロセス600は、複数の予測モードを使用して符号化された符号化ビデオデータをビデオビットストリームの中で受信することを含む。複数の予測モードは、インターピクチャ単予測モード、インターピクチャ双予測モード、およびイントラピクチャイントラブロックコピーモードを備える。符号化ビデオデータは、現在ピクチャ、現在ピクチャの現在スライス、現在コーディングユニット(たとえば、復号されているビデオデータのCTU、CU、または他のユニット)、または任意の他のビデオデータを含むことができる。
604において、プロセス600は、符号化ビデオデータの1つまたは複数のブロックに対してインターピクチャ双予測が無効にされているという表示をビデオビットストリームの中で受信することを含む。インターピクチャ双予測は、符号化ビデオデータの1つまたは複数のブロックに対してイントラブロックコピーが有効にされていること、および双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないことに基づいて無効にされる。いくつかの例では、現在ピクチャのブロック、現在スライスのブロック、現在コーディングユニット(たとえば、復号されているビデオデータのCTU、CU、または他のユニット)のブロックに対して、IBCが有効にされ得る。いくつかの例では、ピクチャ、スライス、またはコード化ビデオシーケンス(CVS)レベルにおいてIBCが有効にされ得る。いくつかの例では、同一でない動きベクトルを有する双予測ブロックは、8×8双予測ブロックを含む。いくつかの例では、双予測ブロックは、4×4ブロック、16×16ブロック、または任意の他の適切なブロックなどの、特定の区分サイズを有する任意のブロックを含むことができる。
606において、プロセス600は、符号化ビデオデータのブロックを予測するための複数の予測モードの中から、予測モードを表示に基づいて決定することを含む。たとえば、符号化ビデオデータを復号する際の使用のために、インターピクチャ単予測モードまたはイントラピクチャイントラブロックコピーモードが選択され得る。
608において、プロセス600は、決定された予測モードを使用して符号化ビデオデータのブロックを復号することを含む。たとえば、符号化ビデオデータは、インターピクチャ単予測モードまたはイントラピクチャイントラブロックコピーモードを使用して復号され得る。
いくつかの態様では、インターピクチャ双予測は、符号化ビデオデータの1つまたは複数のブロックに対してイントラブロックコピーが有効にされていること、双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないこと、および双予測ブロックの両方の動きベクトルが非整数精度であることに基づいて無効にされる。
いくつかの態様では、インターピクチャ双予測は、符号化ビデオデータの1つまたは複数のブロックに対してイントラブロックコピーが有効にされていること、双予測ブロックの両方の動きベクトルが同一でないかまたは同じ参照ピクチャを指していないこと、および動きベクトル分解能フラグの値が0に等しいことに基づいて無効にされ、動きベクトル分解能フラグは、インター予測モードのために使用される動きベクトルの分解能を規定する。
いくつかの態様では、ビデオデータは、ピクチャのスライスを備える。スライスは、上記で説明したように、複数のブロックを含む。そのような態様では、スライスの複数のブロックを復号することに関してインター予測双予測が無効にされる。
いくつかの態様では、しきい値サイズよりも小さい予測ブロックを復号することに関してインターピクチャ双予測が無効にされる。いくつかの例では、しきい値サイズは、8×8ピクセルの予測ブロックサイズを含む。
いくつかの例では、プロセス300、400、500、および600は、図1に示すシステム100などのコンピューティングデバイスまたは装置によって実行されてよい。たとえば、プロセス300および400は図1および図7に示す符号化デバイス104によって実行されてよく、プロセス500および600は図1および図8に示す復号デバイス112によって実行されてよい。場合によっては、コンピューティングデバイスまたは装置は、プロセス300、400、500、および600のステップを実行するように構成されているデバイスのプロセッサ、マイクロプロセッサ、マイクロコンピュータ、または他の構成要素を含み得る。いくつかの例では、コンピューティングデバイスまたは装置は、ビデオフレームを含むビデオデータ(たとえば、ビデオシーケンス)をキャプチャするように構成されたカメラを含み得る。いくつかの例では、ビデオデータをキャプチャするカメラまたは他のキャプチャデバイスは、コンピューティングデバイスとは別個であり、その場合、コンピューティングデバイスは、キャプチャされたビデオデータを受信または取得する。コンピューティングデバイスは、ビデオデータを通信するように構成されたネットワークインターフェースをさらに含み得る。ネットワークインターフェースは、インターネットプロトコル(IP)ベースのデータまたは他のタイプのデータを通信するように構成され得る。
プロセス300、400、500、および600は、論理フロー図として図示され、その動作は、ハードウェア、コンピュータ命令、またはそれらの組合せで実施され得る動作のシーケンスを表す。コンピュータ命令のコンテキストでは、動作は、1つまたは複数のプロセッサによって実行されたとき、説明する動作を実行する1つまたは複数のコンピュータ可読記憶媒体に記憶されたコンピュータ実行可能命令を表す。概して、コンピュータ実行可能命令は、特定の機能を実行し、または特定のデータタイプを実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。動作が説明される順序は、限定として解釈されることを意図せず、説明される任意の数の動作は、プロセスを実施するために任意の順序で、かつ/または並列に組み合わせられてよい。
追加として、プロセス300、400、500、および600は、実行可能命令とともに構成された1つまたは複数のコンピュータシステムの制御下で実行されてよく、ハードウェアまたはその組合せによって1つまたは複数のプロセッサ上で集合的に実行するコード(たとえば、実行可能命令、1つもしくは複数のコンピュータプログラム、または1つもしくは複数のアプリケーション)として実装されてよい。上述のように、コードは、たとえば、1つまたは複数のプロセッサによって実行可能な複数の命令を備えるコンピュータプログラムの形態で、コンピュータ可読記憶媒体または機械可読記憶媒体に記憶され得る。コンピュータ可読記憶媒体または機械可読記憶媒体は非一時的であってよい。
本明細書で説明するコーディング技法は、例示的なビデオ符号化および復号システム(たとえば、システム100)において実施され得る。いくつかの例では、システムは、宛先デバイスによって後で復号されるべき符号化ビデオデータを提供するソースデバイスを含む。具体的には、ソースデバイスは、コンピュータ可読媒体を介して宛先デバイスにビデオデータを提供する。ソースデバイスおよび宛先デバイスは、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、いわゆる「スマート」パッド、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイスなどを含む、広範囲のデバイスのいずれかを備え得る。場合によっては、ソースデバイスおよび宛先デバイスは、ワイヤレス通信のために装備され得る。
宛先デバイスは、復号されるべき符号化ビデオデータを、コンピュータ可読媒体を介して受信し得る。コンピュータ可読媒体は、ソースデバイスから宛先デバイスへ符号化ビデオデータを移動することが可能な任意のタイプの媒体またはデバイスを備え得る。一例では、コンピュータ可読媒体は、ソースデバイスが符号化ビデオデータをリアルタイムで宛先デバイスに直接送信することを可能にするための通信媒体を備え得る。符号化ビデオデータは、ワイヤレス通信プロトコルなどの通信規格に従って変調され得、宛先デバイスへ送信され得る。通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などの、任意のワイヤレス通信媒体または有線通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなどの、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイスから宛先デバイスへの通信を容易にするために有用であり得る任意の他の機器を含み得る。
いくつかの例では、符号化データは、出力インターフェースから記憶デバイスに出力され得る。同様に、符号化データは、入力インターフェースによって記憶デバイスからアクセスされ得る。記憶デバイスは、ハードドライブ、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、揮発性メモリもしくは不揮発性メモリ、または符号化ビデオデータを記憶するための任意の他の適切なデジタル記憶媒体などの、分散されるかまたは局所的にアクセスされる様々なデータ記憶媒体のいずれかを含み得る。さらなる一例では、記憶デバイスは、ソースデバイスによって生成された符号化ビデオを記憶し得るファイルサーバまたは別の中間記憶デバイスに相当し得る。宛先デバイスは、記憶デバイスからの記憶されたビデオデータに、ストリーミングまたはダウンロードを介してアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶するとともにその符号化ビデオデータを宛先デバイスへ送信することが可能な、任意のタイプのサーバであってよい。例示的なファイルサーバは、ウェブサーバ(たとえば、ウェブサイト用の)、FTPサーバ、ネットワーク接続ストレージ(NAS)デバイス、またはローカルディスクドライブを含む。宛先デバイスは、インターネット接続を含む任意の標準的なデータ接続を通じて符号化ビデオデータにアクセスし得る。これは、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、またはファイルサーバに記憶された符号化ビデオデータにアクセスするのに適した、その両方の組合せを含み得る。記憶デバイスからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはそれらの組合せであり得る。
本開示の技法は、必ずしもワイヤレスの適用例または設定に限定されるとは限らない。技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、動的適応ストリーミングオーバーHTTP(DASH:dynamic adaptive streaming over HTTP)などのインターネットストリーミングビデオ送信、データ記憶媒体上に符号化されているデジタルビデオ、データ記憶媒体上に記憶されたデジタルビデオの復号、または他の適用例などの、様々なマルチメディア用途のいずれかのサポートの際にビデオコーディングに適用され得る。いくつかの例では、システムは、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの適用例をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
一例では、ソースデバイスは、ビデオソース、ビデオエンコーダ、および出力インターフェースを含む。宛先デバイスは、入力インターフェース、ビデオデコーダ、およびディスプレイデバイスを含み得る。ソースデバイスのビデオエンコーダは、本明細書で開示する技法を適用するように構成され得る。他の例では、ソースデバイスおよび宛先デバイスは、他の構成要素または構成を含み得る。たとえば、ソースデバイスは、外部カメラなどの外部ビデオソースからビデオデータを受信してよい。同様に、宛先デバイスは、一体型ディスプレイデバイスを含むのではなく、外部のディスプレイデバイスとインターフェースしてよい。
上記の例示的なシステムは一例にすぎない。ビデオデータを並行して処理するための技法は、任意のデジタルビデオ符号化および/または復号デバイスによって実行されてよい。概して、本開示の技法はビデオ符号化デバイスによって実行されるが、技法はまた、通常は「コーデック」と呼ばれるビデオエンコーダ/デコーダによって実行されてよい。その上、本開示の技法はまた、ビデオプロセッサによって実行されてよい。ソースデバイスおよび宛先デバイスはそのようなコーディングデバイスの例にすぎず、ソースデバイスは、宛先デバイスへの送信のためにコード化ビデオデータを生成する。いくつかの例では、ソースデバイスおよび宛先デバイスは、デバイスの各々がビデオ符号化および復号構成要素を含むように、実質的に対称的に動作し得る。したがって、例示的なシステムは、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、またはビデオ電話のために、ビデオデバイス間での一方向または双方向のビデオ送信をサポートし得る。
ビデオソースは、ビデオカメラ、前にキャプチャされたビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースなどの、ビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソースは、ソースビデオとしてのコンピュータグラフィックスベースデータ、またはライブビデオ、アーカイブされたビデオ、およびコンピュータ生成されたビデオの組合せを生成し得る。場合によっては、ビデオソースがビデオカメラである場合、ソースデバイスおよび宛先デバイスは、いわゆるカメラフォンまたはビデオフォンを形成し得る。しかしながら、上述のように、本開示で説明する技法は、一般に、ビデオコーディングに適用可能であり得、ワイヤレスおよび/または有線の用途に適用され得る。各事例において、キャプチャされたビデオ、プリキャプチャされたビデオ、またはコンピュータ生成されたビデオは、ビデオエンコーダによって符号化され得る。符号化されたビデオ情報は、次いで、出力インターフェースによってコンピュータ可読媒体上に出力され得る。
述べたように、コンピュータ可読媒体は、ワイヤレスブロードキャストもしくは有線ネットワーク送信などの一時的媒体、またはハードディスク、フラッシュドライブ、コンパクトディスク、デジタルビデオディスク、Blu-ray(登録商標)ディスク、または他のコンピュータ可読媒体などの記憶媒体(すなわち、非一時的記憶媒体)を含み得る。いくつかの例では、ネットワークサーバ(図示せず)が、ソースデバイスから符号化ビデオデータを受信し得、たとえば、ネットワーク送信を介して、宛先デバイスに符号化ビデオデータを提供し得る。同様に、ディスクスタンピング施設などの媒体生産施設のコンピューティングデバイスが、ソースデバイスから符号化ビデオデータを受信し得、符号化ビデオデータを含むディスクを生産し得る。したがって、コンピュータ可読媒体は、様々な例において、様々な形式の1つまたは複数のコンピュータ可読媒体を含むものと理解され得る。
宛先デバイスの入力インターフェースは、コンピュータ可読媒体から情報を受信する。コンピュータ可読媒体の情報は、ビデオエンコーダによって規定されるシンタックス情報を含み得、シンタックス情報はまた、ビデオデコーダによって使用され、ブロックの特性および/または処理ならびに他のコード化ユニット、たとえば、ピクチャグループ(GOP:group of pictures)を記述する、シンタックス要素を含む。ディスプレイデバイスは、復号ビデオデータをユーザに表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスのいずれかを備え得る。本発明の様々な実施形態が説明された。
符号化デバイス104および復号デバイス112の具体的な詳細が、それぞれ、図7および図8に示される。図7は、本開示で説明する技法のうちの1つまたは複数を実施し得る例示的な符号化デバイス104を示すブロック図である。符号化デバイス104は、たとえば、本明細書で説明するシンタックス構造(たとえば、VPS、SPS、PPS、または他のシンタックス要素のシンタックス構造)を生成し得る。符号化デバイス104は、ビデオスライス内のビデオブロックのイントラ予測コーディングおよびインター予測コーディングを実行し得る。前に説明したように、イントラコーディングは、所与のビデオフレーム内またはピクチャ内の空間的冗長性を低減または除去するために、空間予測に少なくとも部分的に依拠する。インターコーディングは、ビデオシーケンスの隣接するまたは取り囲むフレーム内の時間的冗長性を低減または除去するために、時間予測に少なくとも部分的に依拠する。イントラモード(Iモード)は、いくつかの空間ベースの圧縮モードのうちのいずれかを指し得る。単方向予測(Pモード)または双方向予測(Bモード)などのインターモードは、いくつかの時間ベースの圧縮モードのうちのいずれかを指し得る。
符号化デバイス104は、区分ユニット35、予測処理ユニット41、フィルタユニット63、ピクチャメモリ64、加算器50、変換処理ユニット52、量子化ユニット54、およびエントロピー符号化ユニット56を含む。予測処理ユニット41は、動き推定ユニット42、動き補償ユニット44、およびイントラ予測処理ユニット46を含む。ビデオブロック再構成のために、符号化デバイス104はまた、逆量子化ユニット58、逆変換処理ユニット60、および加算器62を含む。フィルタユニット63は、デブロッキングフィルタ、適応ループフィルタ(ALF:adaptive loop filter)、およびサンプル適応オフセット(SAO)フィルタなどの、1つまたは複数のループフィルタを表すことを意図する。フィルタユニット63がループ内フィルタであるものとして図7に示されるが、他の構成では、フィルタユニット63はループ後フィルタとして実装されてよい。後処理デバイス57は、符号化デバイス104によって生成された符号化ビデオデータに、さらなる処理を実行し得る。本開示の技法は、いくつかの事例では、符号化デバイス104によって実施され得る。しかしながら、他の事例では、本開示の技法のうちの1つまたは複数は、後処理デバイス57によって実施されてよい。
図7に示すように、符号化デバイス104はビデオデータを受信し、区分ユニット35はデータをビデオブロックに区分する。区分することはまた、スライス、スライスセグメント、タイル、または他のもっと大きいユニットに区分すること、ならびに、たとえば、LCUおよびCUの4分木構造によるビデオブロック区分を含み得る。符号化デバイス104は、概して、符号化されるべきビデオスライス内のビデオブロックを符号化する構成要素を示す。スライスは、複数のビデオブロックに(また場合によっては、タイルと呼ばれるビデオブロックのセットに)分割され得る。予測処理ユニット41は、エラー結果(たとえば、コーディングレート、およびひずみのレベルなど)に基づいて、現在ビデオブロックに対して、複数のイントラ予測コーディングモードのうちの1つ、または複数のインター予測コーディングモードのうちの1つなどの、複数の可能なコーディングモードのうちの1つを選択し得る。予測処理ユニット41は、残差ブロックデータを生成するために加算器50に、また参照ピクチャとして使用するための符号化ブロックを再構成するために加算器62に、得られたイントラまたはインターコード化ブロックを提供し得る。
予測処理ユニット41内のイントラ予測処理ユニット46は、空間的な圧縮を行うために、コーディングされるべき現在ブロックと同じフレームまたはスライスの中の1つまたは複数の隣接ブロックに対する現在ビデオブロックのイントラ予測コーディングを実行し得る。予測処理ユニット41内の動き推定ユニット42および動き補償ユニット44は、時間的な圧縮を行うために、1つまたは複数の参照ピクチャの中の1つまたは複数の予測ブロックに対する現在ビデオブロックのインター予測コーディングを実行する。
動き推定ユニット42は、ビデオシーケンスにとっての所定のパターンに従って、ビデオスライス用のインター予測モードを決定するように構成され得る。所定のパターンは、シーケンスの中のビデオスライスを、Pスライス、Bスライス、またはGPBスライスとして指定し得る。動き推定ユニット42および動き補償ユニット44は高集積され得るが、概念的な目的のために別個に図示される。動き推定ユニット42によって実行される動き推定は、ビデオブロックにとっての動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、現在ビデオフレーム内または現在ピクチャ内のビデオブロックの予測ユニット(PU)の、参照ピクチャ内の予測ブロックに対する変位を示し得る。
予測ブロックは、絶対差分和(SAD:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分メトリックによって決定され得るピクセル差分の観点で、コーディングされるべきビデオブロックのPUと密接に整合するように見出されたブロックである。いくつかの例では、符号化デバイス104は、ピクチャメモリ64に記憶された参照ピクチャのサブ整数ピクセル位置に対する値を計算し得る。たとえば、符号化デバイス104は、参照ピクチャの1/4ピクセル位置、1/8ピクセル位置、または他の分数ピクセル位置の値を補間し得る。したがって、動き推定ユニット42は、フルピクセル位置および分数ピクセル位置に対する動き探索を実行し得、分数ピクセル精度を有する動きベクトルを出力し得る。
動き推定ユニット42は、PUの位置を参照ピクチャの予測ブロックの位置と比較することによって、インターコード化スライスの中のビデオブロックのPU用の動きベクトルを計算する。参照ピクチャは、第1の参照ピクチャリスト(リスト0)または第2の参照ピクチャリスト(リスト1)から選択されてよく、その各々はピクチャメモリ64に記憶された1つまたは複数の参照ピクチャを識別する。動き推定ユニット42は、計算された動きベクトルをエントロピー符号化ユニット56および動き補償ユニット44へ送る。
動き補償ユニット44によって実行される動き補償は、場合によっては、サブピクセル精度への補間を実行する動き推定によって決定される動きベクトルに基づいて、予測ブロックをフェッチまたは生成することを伴い得る。現在ビデオブロックのPU用の動きベクトルを受信すると、動き補償ユニット44は、参照ピクチャリストの中で動きベクトルが指す予測ブロックの位置を特定し得る。符号化デバイス104は、コーディングされている現在ビデオブロックのピクセル値から予測ブロックのピクセル値を減算し、ピクセル差分値を形成することによって、残差ビデオブロックを形成する。ピクセル差分値は、ブロックに対する残差データを形成し、ルーマ差分成分とクロマ差分成分の両方を含み得る。加算器50は、この減算演算を実行する1つまたは複数の構成要素を表す。動き補償ユニット44はまた、ビデオスライスのビデオブロックを復号する際の復号デバイス112による使用のために、ビデオブロックおよびビデオスライスに関連付けられたシンタックス要素を生成し得る。
イントラ予測処理ユニット46は、上記で説明したように、動き推定ユニット42および動き補償ユニット44によって実行されるインター予測の代替として、現在ブロックをイントラ予測し得る。具体的には、イントラ予測処理ユニット46は、現在ブロックを符号化するために使用すべきイントラ予測モードを決定し得る。いくつかの例では、イントラ予測処理ユニット46は、たとえば、別個の符号化パスの間、様々なイントラ予測モードを使用して現在ブロックを符号化し得、イントラ予測処理ユニット46(または、いくつかの例では、モード選択ユニット40)は、テストされたモードから使用すべき適切なイントラ予測モードを選択し得る。たとえば、イントラ予測処理ユニット46は、テストされた様々なイントラ予測モードに対してレートひずみ分析を使用してレートひずみ値を計算し得、テストされたモードの中から最良のレートひずみ特性を有するイントラ予測モードを選択し得る。レートひずみ分析は、概して、符号化ブロックと、符号化ブロックを生成するために符号化された、符号化されていない元のブロックとの間のひずみ(すなわち、エラー)の量、ならびに符号化ブロックを生成するために使用されるビットレート(すなわち、ビット数)を決定する。イントラ予測処理ユニット46は、どのイントラ予測モードがブロックにとって最良のレートひずみ値を示すのかを決定するために、様々な符号化ブロックに対するひずみおよびレートから比を計算し得る。
いずれの場合も、ブロック用のイントラ予測モードを選択した後、イントラ予測処理ユニット46は、ブロック用の選択されたイントラ予測モードを示す情報をエントロピー符号化ユニット56に提供し得る。エントロピー符号化ユニット56は、選択されたイントラ予測モードを示す情報を符号化し得る。符号化デバイス104は、様々なブロック用の符号化コンテキストの構成データ定義、ならびに最確のイントラ予測モード、イントラ予測モードインデックステーブル、およびコンテキストの各々に対して使用すべき修正されたイントラ予測モードインデックステーブルの表示を、送信されるビットストリームの中に含め得る。ビットストリーム構成データは、複数のイントラ予測モードインデックステーブルおよび修正された複数のイントラ予測モードインデックステーブル(コードワードマッピングテーブルとも呼ばれる)を含み得る。
予測処理ユニット41がインター予測またはイントラ予測のいずれかを介して現在ビデオブロックに対する予測ブロックを生成した後、符号化デバイス104は、現在ビデオブロックから予測ブロックを減算することによって残差ビデオブロックを形成する。残差ブロックの中の残差ビデオデータは、1つまたは複数のTUの中に含められてよく、変換処理ユニット52に適用され得る。変換処理ユニット52は、離散コサイン変換(DCT)または概念的に類似の変換などの変換を使用して、残差ビデオデータを残差変換係数に変換する。変換処理ユニット52は、ピクセル領域から周波数領域などの変換領域に、残差ビデオデータを変換し得る。
変換処理ユニット52は、得られた変換係数を量子化ユニット54へ送り得る。量子化ユニット54は、ビットレートをさらに低減するために変換係数を量子化する。量子化プロセスは、係数の一部または全部に関連するビット深度を低減し得る。量子化の程度は、量子化パラメータを調整することによって変更され得る。いくつかの例では、量子化ユニット54は、次いで、量子化変換係数を含む行列の走査を実行し得る。代替として、エントロピー符号化ユニット56が走査を実行してもよい。
量子化に続いて、エントロピー符号化ユニット56は、量子化変換係数をエントロピー符号化する。たとえば、エントロピー符号化ユニット56は、コンテキスト適応型可変長コーディング(CAVLC:context adaptive variable length coding)、コンテキスト適応型バイナリ算術コーディング(CABAC:context adaptive binary arithmetic coding)、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)、確率間隔区分エントロピー(PIPE:probability interval partitioning entropy)コーディング、または別のエントロピー符号化技法を実行し得る。エントロピー符号化ユニット56によるエントロピー符号化に続いて、符号化ビットストリームは、復号デバイス112へ送信されてよく、または復号デバイス112によって後で送信もしくは取出しができるようにアーカイブされてもよい。エントロピー符号化ユニット56はまた、コーディングされている現在ビデオスライス用の動きベクトルおよび他のシンタックス要素をエントロピー符号化し得る。
逆量子化ユニット58および逆変換処理ユニット60は、参照ピクチャの参照ブロックとして後で使用できるようにピクセル領域における残差ブロックを再構成するために、それぞれ、逆量子化および逆変換を適用する。動き補償ユニット44は、参照ピクチャリスト内の参照ピクチャのうちの1つの予測ブロックに残差ブロックを加算することによって、参照ブロックを計算し得る。動き補償ユニット44はまた、動き推定において使用するためのサブ整数ピクセル値を計算するために、1つまたは複数の補間フィルタを再構成残差ブロックに適用し得る。加算器62は、ピクチャメモリ64に記憶するための参照ブロックを生成するために、動き補償ユニット44によって生成された動き補償された予測ブロックに再構成残差ブロックを加算する。参照ブロックは、後続のビデオフレームまたはピクチャの中のブロックをインター予測するための参照ブロックとして、動き推定ユニット42および動き補償ユニット44によって使用され得る。
このようにして、図7の符号化デバイス104は、符号化ビデオビットストリームのためのシンタックスを生成するように構成されたビデオエンコーダの一例を表す。符号化デバイス104は、たとえば、上記で説明したように、VPS、SPS、およびPPSパラメータセットを生成し得る。符号化デバイス104は、図3および図4に関して上記で説明したプロセスを含む、本明細書で説明する技法のうちのいずれかを実行し得る。本開示の技法が、概して、符号化デバイス104に関して説明されたが、上述のように、本開示の技法のいくつかはまた、後処理デバイス57によって実施されてよい。
図8は、例示的な復号デバイス112を示すブロック図である。復号デバイス112は、エントロピー復号ユニット80、予測処理ユニット81、逆量子化ユニット86、逆変換処理ユニット88、加算器90、フィルタユニット91、およびピクチャメモリ92を含む。予測処理ユニット81は、動き補償ユニット82およびイントラ予測処理ユニット84を含む。復号デバイス112は、いくつかの例では、図7からの符号化デバイス104に関連して説明した符号化パスとは概して逆の復号パスを実行し得る。復号デバイス112は、図5および図6に関して上記で説明したプロセスを含む、本明細書で説明する技法のうちのいずれかを実行し得る。
復号プロセスの間、復号デバイス112は、符号化デバイス104によって送られた符号化ビデオスライスのビデオブロックおよび関連するシンタックス要素を表す符号化ビデオビットストリームを受信する。いくつかの実施形態では、復号デバイス112は、符号化デバイス104から符号化ビデオビットストリームを受信し得る。いくつかの実施形態では、復号デバイス112は、サーバ、メディアアウェアネットワーク要素(MANE:media-aware network element)、ビデオエディタ/スプライサ、または上記で説明した技法のうちの1つもしくは複数を実施するように構成されたそのような他のデバイスなどのネットワークエンティティ79から、符号化ビデオビットストリームを受信し得る。ネットワークエンティティ79は、符号化デバイス104を含んでよく、または含まなくてもよい。本開示で説明する技法のうちのいくつかは、ネットワークエンティティ79が符号化ビデオビットストリームを復号デバイス112へ送信する前に、ネットワークエンティティ79によって実施され得る。いくつかのビデオ復号システムでは、ネットワークエンティティ79および復号デバイス112は、別個のデバイスの一部であってよく、他の事例では、ネットワークエンティティ79に関して説明する機能は、復号デバイス112を備える同じデバイスによって実行されてよい。
復号デバイス112のエントロピー復号ユニット80は、量子化係数、動きベクトル、および他のシンタックス要素を生成するために、ビットストリームをエントロピー復号する。エントロピー復号ユニット80は、動きベクトルおよび他のシンタックス要素を予測処理ユニット81に転送する。復号デバイス112は、ビデオスライスレベルおよび/またはビデオブロックレベルにおいてシンタックス要素を受信し得る。エントロピー復号ユニット80は、VPS、SPS、およびPPSなどの1つまたは複数のパラメータセットの中の、固定長シンタックス要素と可変長シンタックス要素の両方を処理および構文解析し得る。
ビデオスライスがイントラコード化(I)スライスとしてコーディングされるとき、予測処理ユニット81のイントラ予測処理ユニット84は、シグナリングされたイントラ予測モード、および現在フレームまたは現在ピクチャの、前に復号されたブロックからのデータに基づいて、現在ビデオスライスのビデオブロックに対する予測データを生成し得る。ビデオフレームがインターコード化(すなわち、B、P、またはGPB)スライスとしてコーディングされるとき、予測処理ユニット81の動き補償ユニット82は、エントロピー復号ユニット80から受信された動きベクトルおよび他のシンタックス要素に基づいて、現在ビデオスライスのビデオブロックに対する予測ブロックを生成する。予測ブロックは、参照ピクチャリスト内の参照ピクチャのうちの1つから生成され得る。復号デバイス112は、ピクチャメモリ92に記憶された参照ピクチャに基づいて、デフォルトの構成技法を使用して、参照フレームリスト、すなわち、リスト0およびリスト1を構成し得る。
動き補償ユニット82は、動きベクトルおよび他のシンタックス要素を構文解析することによって、現在ビデオスライスのビデオブロックに対する予測情報を決定し、予測情報を使用して、復号されている現在ビデオブロックに対する予測ブロックを生成する。たとえば、動き補償ユニット82は、パラメータセットの中の1つまたは複数のシンタックス要素を使用して、ビデオスライスのビデオブロックをコーディングするために使用された予測モード(たとえば、イントラ予測またはインター予測)、インター予測スライスタイプ(たとえば、Bスライス、Pスライス、またはGPBスライス)、スライスのための1つまたは複数の参照ピクチャリストに対する構成情報、スライスのインター符号化ビデオブロックごとの動きベクトル、スライスのインターコード化ビデオブロックごとのインター予測ステータス、および現在ビデオスライスの中のビデオブロックを復号するための他の情報を決定し得る。
動き補償ユニット82はまた、補間フィルタに基づいて補間を実行し得る。動き補償ユニット82は、参照ブロックのサブ整数ピクセルに対する補間値を計算するために、ビデオブロックの符号化の間に符号化デバイス104によって使用されたような補間フィルタを使用し得る。この場合、動き補償ユニット82は、符号化デバイス104によって使用された補間フィルタを、受信されたシンタックス要素から決定し得、予測ブロックを生成するためにその補間フィルタを使用し得る。
逆量子化ユニット86は、ビットストリームの中で提供されるとともにエントロピー復号ユニット80によって復号された量子化変換係数を逆量子化(inverse quantize)または逆量子化(de-quantize)する。逆量子化プロセスは、量子化の程度を決定し、同様に、適用されるべき逆量子化の程度を決定するために、ビデオスライスの中のビデオブロックごとに符号化デバイス104によって計算された量子化パラメータを使用することを含み得る。逆変換処理ユニット88は、ピクセル領域における残差ブロックを生成するために、変換係数に逆変換(たとえば、逆DCTまたは他の適切な逆変換)、逆整数変換、または概念的に類似の逆変換プロセスを適用する。
動き補償ユニット82が動きベクトルおよび他のシンタックス要素に基づいて現在ビデオブロックに対する予測ブロックを生成した後、復号デバイス112は、逆変換処理ユニット88からの残差ブロックを、動き補償ユニット82によって生成された対応する予測ブロックと加算することによって、復号ビデオブロックを形成する。加算器90は、この加算演算を実行する1つまたは複数の構成要素を表す。所望される場合、(コーディングループ中またはコーディングループ後のいずれかの)ループフィルタも、ピクセル遷移を平滑化するために、または別の方法でビデオ品質を改善するために使用され得る。フィルタユニット91は、デブロッキングフィルタ、適応ループフィルタ(ALF)、およびサンプル適応オフセット(SAO)フィルタなどの、1つまたは複数のループフィルタを表すことを意図する。フィルタユニット91がループ内フィルタであるものとして図8に示されるが、他の構成では、フィルタユニット91はループ後フィルタとして実装されてよい。所与のフレームまたはピクチャの中の復号ビデオブロックは、次いで、ピクチャメモリ92に記憶され、ピクチャメモリ92は、後続の動き補償のために使用される参照ピクチャを記憶する。ピクチャメモリ92はまた、図1に示すビデオ宛先デバイス122などのディスプレイデバイス上で後で提示できるように、復号ビデオを記憶する。
上記の説明では、本出願の態様は、その特定の実施形態を参照しながら説明されたが、本発明がそれらに限定されないことを当業者は認識されよう。したがって、本出願の例示的な実施形態が本明細書で詳細に説明されたが、本発明の概念が別の方法で様々に具現化または採用されてよく、従来技術による限定を除いて、添付の特許請求の範囲がそのような変形形態を含むものと解釈されることを意図することを理解されたい。上記で説明した発明の様々な特徴および態様は、個別または一緒に使用され得る。さらに、実施形態は、本明細書の広い趣旨および範囲から逸脱することなく、本明細書で説明したものを越えた任意の数の環境および適用例において利用され得る。したがって、本明細書および図面は、限定ではなく例示であると見なされるべきである。例示のために、方法は特定の順序で説明された。代替実施形態では、説明した順序とは異なる順序で方法が実行され得ることを諒解されたい。
構成要素がいくつかの動作を実行する「ように構成」されているものとして説明される場合、そのような構成は、たとえば、動作を実行するための電子回路もしくはハードウェアを設計することによって、動作を実行するためのプログラマブル電子回路(たとえば、マイクロプロセッサ、または他の適切な電子回路)をプログラムすることによって、またはそれらの任意の組合せで達成され得る。
本明細書で開示する実施形態に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、ファームウェア、またはそれらの組合せとして実装され得る。ハードウェアとソフトウェアとのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップが、概して、それらの機能に関して上記で説明された。そのような機能がハードウェアとして実装されるのか、それともソフトウェアとして実装されるのかは、特定の適用例および全体的なシステムに課された設計制約によって決まる。当業者は説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装決定は本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
本明細書で説明した技術はまた、電子ハードウェア、コンピュータソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセットおよび他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスなどの、様々なデバイスのいずれかにおいて実装され得る。モジュールまたは構成要素として説明した任意の特徴が、集積論理デバイスの中で一緒に、または個別であるが相互動作可能な論理デバイスとして別個に実装され得る。ソフトウェアで実装される場合、技法は、実行されたとき、上記で説明した方法の1つまたは複数を実行する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって、少なくとも部分的に実現され得る。コンピュータ可読データ記憶媒体は、パッケージング材料を含み得るコンピュータプログラム製品の一部を形成し得る。コンピュータ可読媒体は、同期型ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、磁気または光学データ記憶媒体などの、メモリまたはデータ記憶媒体を備え得る。技法は、追加または代替として、伝搬される信号または波などの、命令またはデータ構造の形態でプログラムコードを搬送または通信するとともに、コンピュータによってアクセスされ、読み取られ、かつ/または実行され得る、コンピュータ可読通信媒体によって少なくとも部分的に実現され得る。
プログラムコードは、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積論理回路もしくは個別論理回路などの、1つまたは複数のプロセッサを含み得るプロセッサによって実行され得る。そのようなプロセッサは、本開示で説明した技法のうちのいずれかを実行するように構成され得る。汎用プロセッサはマイクロプロセッサであってもよいが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装され得る。したがって、本明細書で使用した「プロセッサ」という用語は、上記の構造、上記の構造の任意の組合せ、または本明細書で説明した技法の実装にとって適した任意の他の構造もしくは装置のいずれかを指し得る。加えて、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のソフトウェアモジュール内もしくはハードウェアモジュール内で提供されてよく、または複合ビデオエンコーダデコーダ(コーデック)に組み込まれてよい。