関連出願
[0001] 本出願は、2018年7月10日に出願された米国仮出願第62/696,281号、2018年8月2日に出願された米国仮出願第62/713,944号、および2019年7月9日に出願された米国出願第16/506,720号の利益を主張するものであり、それらの各々の内容は、参照により本明細書に組み込まれる。
[0002] 本開示は、ビデオ符号化およびビデオ復号を含むビデオコーディングに関する。
[0003] デジタルビデオ能力は、デジタルテレビ、デジタルダイレクトブロードキャストシステム、ワイヤレスブロードキャストシステム、携帯情報端末(PDA)、ラップトップまたはデスクトップコンピュータ、タブレットコンピュータ、電子ブックリーダ、デジタルカメラ、デジタル記録デバイス、デジタルメディアプレーヤ、ビデオゲームデバイス、ビデオゲーム機、セルラ式または衛星無線電話、いわゆる「スマートフォン」、ビデオテレカンファレンスデバイス、ビデオストリーミングデバイス、および同様のものを含む、広範囲のデバイスに組み込まれることができる。デジタルビデオデバイスは、MPEG−2、MPEG−4、ITU−T H.263、ITU−T H.264/MPEG−4,パート10,アドバンスドビデオコーディング(AVC:Advanced Video Coding)、高効率ビデオコーディング(HEVC:High Efficiency Video Coding)規格、ITU−T H.265/高効率ビデオコーディング(HEVC)で定義されている規格、およびそのような規格の拡張版に記載されているもののような、ビデオコーディング技法を実施する。ビデオデバイスは、そのようなビデオコーディング技法を実施することによってより効率的にデジタルビデオ情報を送信、受信、符号化、復号、および/または記憶し得る。
[0004] ビデオコーディング技法は、ビデオシーケンスに内在する冗長性を低減または取り除くために、空間(イントラピクチャ)予測および/または時間(インターピクチャ)予測を含む。ブロックベースビデオコーディングの場合、ビデオスライス(例えば、ビデオピクチャまたはビデオピクチャの一部)は、コーディングツリー単位(CTU:coding tree units)、コーディング単位(CU:coding units)、および/またはコーディングノードとも呼ばれ得るビデオブロックに区分され得る。ピクチャのイントラコーディングされた(I)スライス内のビデオブロックは、同じピクチャにおける隣接ブロック中の参照サンプルに対して空間予測を使用して符号化される。ピクチャのインターコーディングされた(PまたはB)スライス内のビデオブロックは、同じピクチャにおける隣接ブロック中の参照サンプルに対して空間予測を使用するかまたは他の参照ピクチャ中の参照サンプルに対して時間予測を使用し得る。ピクチャは、フレームと呼ばれ得、参照ピクチャは、参照フレームと呼ばれ得る。
[0005] 概して、本開示は、ビデオデータのブロックの動き情報をコーディングするための技法を説明する。これらの技法は、波面並列処理中に使用され得る。動き情報は、履歴動きベクトル予測子(HMVP:history motion vector predictors)から予測される動きベクトルを含み得る。HMVP候補は、前にコーディングされたブロックの動き情報を指し得る。ビデオコーダ(エンコーダまたはデコーダ)は、コーディング(符号化または復号)プロセス中、複数のHMVP候補を有するテーブルを維持し得る。ビデオコーダは、新しいスライスが発生すると、テーブルを空にし得る。インターコーディングされたブロックが存在するとき、ビデオコーダは、インターコーディングされたブロックに関連する動き情報をテーブルに付加し得る。
[0006] 一例では、ビデオデータをコーディング(符号化または復号)する方法が、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、メモリの第2の履歴MVPバッファをリセットすることと、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を含む。いくつかの例では、ビデオコーディングプロセスの第1のスレッドが、第1のCTUラインをコーディングし得、第1のスレッドとは異なる、ビデオコーディングプロセスの第2のスレッドは、第2のCTUラインをコーディングし得る。
[0007] 別の例では、ビデオデータをコーディングするためのデバイスが、ビデオデータを記憶するように構成されたメモリと、回路で実施され、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、メモリの第2の履歴MVPバッファをリセットすることと、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を行うように構成された1つまたは複数の処理ユニットとを含む。
[0008] 別の例では、コンピュータ読取可能な記憶媒体が、実行されると、プロセッサに、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、メモリの第2の履歴MVPバッファをリセットすることと、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を行わせる命令が記憶されている。
[0009] 別の例では、ビデオデータをコーディングするためのデバイスが、ビデオデータを記憶するように構成されたメモリと、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶するための手段と、メモリの第2の履歴MVPバッファをリセットするための手段と、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶するための手段と、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を含む。
[0010] 1つまたは複数の例の詳細は、添付の図面および以下の説明で示される。他の特徴、目的、および利点は、本説明および図面から、そして特許請求の範囲から明らかになるであろう。
[0011] 図1は、本開示の技法を実行し得る例となるビデオ符号化および復号システムを例示するブロック図である。
[0012] 図2Aは、例となる四分木二分木(QTBT)構造を例示する概念図である。
図2Bは、対応するコーディングツリー単位(CTU)を例示する概念図である。
[0013] 図3は、履歴動きベクトル予測子(HMVP)を使用して動き情報をコーディングするための例となるプロセスを例示するフロー図である。
[0014] 図4は、HMVPテーブルの更新の例を例示する概念図である。
[0015] 図5は、動き情報コーディングのための非隣接ブロックの例となる選択を例示する概念図である。
[0016] 図6は、親ブロックに基づく非隣接ブロックの例となる選択を例示する概念図である。
[0017] 図7は、コーディングツリー単位(CTU)の所望の波面処理の例を例示する概念図である。
[0018] 図8は、HMVPに使用される動き情報の例を例示する概念図である。
[0019] 図9は、コーディングツリー単位(CTU)の複数のラインに区分されたピクチャの例を例示する概念図である。
[0020] 図10Aは、マージモードのための例となる空間隣接動きベクトル候補を例示するブロック図である。
図10Bは、高度動きベクトル予測(AMVP)モードのための例となる空間隣接動きベクトル候補を例示するブロック図である。
[0021] 図11Aは、時間動きベクトル予測(TMPV)候補を例示する概念図である。
図11Bは、時間動きベクトル予測(TMPV)候補を例示する概念図である。
[0022] 図12は、コーディングツリー単位(CTU)および隣接ブロックの例を例示するブロック図である。
[0023] 図13は、現在CTU内の現在CUを例示するブロック図である。
[0024] 図14は、本開示の技法を実行し得る例となるビデオエンコーダを例示するブロック図である。
[0025] 図15は、本開示の技法を実行し得る例となるビデオデコーダを例示するブロック図である。
[0026] 図16は、本開示の技法による、ビデオデータの現在ブロックを符号化するための例となる方法を例示するフローチャートである。
[0027] 図17は、本開示の技法による、ビデオデータの現在ブロックを復号するための例となる方法を例示するフローチャートである。
[0028] 図18は、本開示の技法による、ビデオデータをコーディング(符号化または復号)する例となる方法を例示するフローチャートである。
詳細な説明
[0029] 図1は、本開示の技法を実行し得る例となるビデオ符号化および復号システム100を例示するブロック図である。本開示の技法は、一般に、ビデオデータをコーディング(符号化および/または復号)することを対象とする。概して、ビデオデータは、ビデオを処理するための任意のデータを含む。ゆえに、ビデオデータは、生の、コーディングされていないビデオ、符号化されたビデオ、復号された(例えば、再構築された)ビデオ、およびシグナリングデータのようなビデオメタデータを含み得る。
[0030] 図1に示されるように、この例において、システム100は、宛先デバイス116によって復号されて表示されることとなる符号化ビデオデータを提供するソースデバイス102を含む。特に、ソースデバイス102は、コンピュータ読取可能な媒体110を介して宛先デバイス116にビデオデータを提供する。ソースデバイス102および宛先デバイス116は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、スマートフォンのような電話ハンドセット、テレビ、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲーム機、ビデオストリーミングデバイス、または同様のものを含む、広範囲のデバイスのうちの任意のものを備え得る。場合によっては、ソースデバイス102および宛先デバイス116は、ワイヤレス通信に対応し得、ゆえにワイヤレス通信デバイスと呼ばれ得る。
[0031] 図1の例において、ソースデバイス102は、ビデオソース104と、メモリ106と、ビデオエンコーダ200と、出力インターフェース108とを含む。宛先デバイス116は、入力インターフェース122と、ビデオデコーダ300と、メモリ120と、ディスプレイデバイス118とを含む。本開示によれば、ソースデバイス102のビデオエンコーダ200および宛先デバイス116のビデオデコーダ300は、動き情報をコーディングするための技法を応用するように構成され得る。ゆえに、ソースデバイス102は、ビデオ符号化デバイスの例を表し、宛先デバイス116は、ビデオ復号デバイスの例を表す。他の例では、ソースデバイスおよび宛先デバイスが、他の構成要素または配置を含み得る。例えば、ソースデバイス102は、外部カメラのような外部ビデオソースからビデオデータを受信し得る。同様に、宛先デバイス116は、統合されたディスプレイデバイスを含むよりむしろ外部ディスプレイデバイスとインターフェース接続し得る。
[0032] 図1に示されるシステム100は一例にすぎない。概して、任意のデジタルビデオ符号化および/または復号デバイスは、動き情報をコーディングするための技法を実行し得る。ソースデバイス102および宛先デバイス116は、ソースデバイス102が、宛先デバイス116への送信のためのコーディングされたビデオデータを生成するそのようなコーディングデバイスの例にすぎない。本開示は、「コーディング」デバイスを、データのコーディング(符号化および/または復号)を実行するデバイスと呼ぶ。ゆえに、ビデオエンコーダ200およびビデオデコーダ300は、コーディングデバイスの例、特に、それぞれビデオエンコーダおよびビデオデコーダを表す。いくつかの例において、ソースデバイス102および宛先デバイス116は、略対称的な方法で動作し得、そのため、ソースデバイス102および宛先デバイス116の各々がビデオ符号化および復号構成要素を含む。それゆえに、システム100は、例えば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、またはビデオ電話のために、ソースデバイス102と宛先デバイス116との間での一方向または双方向のビデオ送信をサポートし得る。
[0033] 概して、ビデオソース104は、ビデオデータ(すなわち、生の、コーディングされていないビデオデータ)のソースを表し、ビデオデータの連続する一連のピクチャ(「フレーム」とも呼ばれる)を、ピクチャのためのデータを符号化するビデオエンコーダ200に提供する。ソースデバイス102のビデオソース104は、ビデオカメラのようなビデオキャプチャデバイス、前にキャプチャされた生のビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースを含み得る。さらなる代替として、ビデオソース104は、ライブビデオ、アーカイブされたビデオ、およびコンピュータ生成されたビデオの組合せ、またはソースビデオとしてコンピュータグラフィックベースデータを生成し得る。いずれの場合も、ビデオエンコーダ200は、キャプチャされた、事前キャプチャされた、またはコンピュータ生成されたビデオデータを符号化する。ビデオエンコーダ200は、ピクチャを、受信された順序(「表示順序」と呼ばれることがある)からコーディングのためのコーディング順序に並べ換え得る。ビデオエンコーダ200は、符号化ビデオデータを含むビットストリームを生成し得る。次いで、ソースデバイス102は、例えば、宛先デバイス116の入力インターフェース122による受信および/または取出しのために、出力インターフェース108を介してコンピュータ読取可能な媒体110上に符号化ビデオデータを出力し得る。
[0034] ソースデバイス102のメモリ106および宛先デバイス116のメモリ120は、汎用メモリを表す。いくつかの例において、メモリ106、120は、生のビデオデータ、例えば、ビデオソース104からの生のビデオと、ビデオデコーダ300からの生の復号ビデオデータとを記憶し得る。追加的にまたは代替的に、メモリ106、120は、例えば、それぞれビデオエンコーダ200およびビデオデコーダ300によって実行可能なソフトウェア命令を記憶し得る。この例では、ビデオエンコーダ200およびビデオデコーダ300から切り離して示されているが、ビデオエンコーダ200およびビデオデコーダ300はまた、機能的に同様または同等の目的で内部メモリを含み得ることが理解されるべきである。さらに、メモリ106、120は、例えば、ビデオエンコーダ200から出力され、ビデオデコーダ300に入力される符号化ビデオデータを記憶し得る。いくつかの例において、メモリ106、120の一部は、例えば、生のビデオデータ、復号ビデオデータ、および/または符号化ビデオデータを記憶するために、1つまたは複数のビデオバッファとして割り振られ得る。
[0035] コンピュータ読取可能な媒体110は、符号化ビデオデータをソースデバイス102から宛先デバイス116に伝送する能力がある任意のタイプの媒体またはデバイスを表し得る。一例において、コンピュータ読取可能な媒体110は、ソースデバイス102が、例えば、無線周波数ネットワークまたはコンピュータベースネットワークを介して、リアルタイムで符号化ビデオデータを宛先デバイス116に直接送信することを可能にする通信媒体を表す。出力インターフェース108は、符号化ビデオデータを含む送信信号を変調し得、入力インターフェース122は、ワイヤレス通信プトロコルのような通信規格に従って、受信した送信信号を復調し得る。通信媒体は、無線周波数(RF:radio frequency)スペクトルまたは1もしくは複数の物理伝送線のような任意のワイヤレスまたはワイヤード通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、広域ネットワーク、またはインターネットのようなグローバルネットワークといった、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス102から宛先デバイス116への通信を容易にするのに有用であり得る任意の他の機器を含み得る。
[0036] いくつかの例において、ソースデバイス102は、出力インターフェース108から記憶デバイス112に符号化データを出力し得る。同様に、宛先デバイス116は、入力インターフェース122を介して記憶デバイス112からの符号化データにアクセスし得る。記憶デバイス112は、ハードドライブ、ブルーレイディスク、DVD、CD−ROM、フラッシュメモリ、揮発性もしくは非揮発性メモリ、または符号化ビデオデータを記憶するための任意の他の好適なデジタル記憶媒体のような、様々な分配型の、または局所的にアクセスされるデータ記憶媒体のうちの任意のものを含み得る。
[0037] いくつかの例において、ソースデバイス102は、符号化ビデオデータを、ファイルサーバ114に、またはソースデバイス102によって生成された符号化ビデオを記憶し得る別の中間記憶デバイスに出力し得る。宛先デバイス116は、ストリーミングまたはダウンロードを介してファイルサーバ114からの記憶されたビデオデータにアクセスし得る。ファイルサーバ114は、符号化ビデオデータを記憶するおよび符号化ビデオデータを宛先デバイス116に送信する能力がある任意のタイプのサーバデバイスであり得る。ファイルサーバ114は、(例えば、ウェブサイトの)ウェブサーバ、ファイル転送プロトコル(FTP:File Transfer Protocol)サーバ、コンテンツ配信ネットワークデバイス、またはネットワーク接続ストレージ(NAS)デバイスを表し得る。宛先デバイス116は、インターネット接続を含む任意の標準的なデータ接続を通してファイルサーバ114からの符号化ビデオデータにアクセスし得る。これは、ファイルサーバ114に記憶されている符号化ビデオデータにアクセスするのに好適なワイヤレスチャネル(例えば、Wi−Fi接続)、ワイヤード接続(例えば、デジタル加入者回線(DSL:digital subscriber line)、ケーブルモデム、等)、または両方の組合せを含み得る。ファイルサーバ114および入力インターフェース122は、ストリーミング送信プロトコル、ダウンロード送信プロトコル、またはそれらの組合せに従って動作するように構成され得る。
[0038] 出力インターフェース108および入力インターフェース122は、ワイヤレス送信機/受信機、モデム、ワイヤードネットワーキング構成要素(例えば、イーサネット(登録商標)カード)、様々なIEEE802.11規格のうちの任意のものに従って動作するワイヤレス通信構成要素、または他の物理的構成要素を表し得る。出力インターフェース108および入力インターフェース122がワイヤレス構成要素を備える例にでは、出力インターフェース108および入力インターフェース122が、4G、4G−LTE(登録商標)(ロングタームエボリューション)、LTEアドバンスド、5G、または同様のもののようなセルラ通信規格に従って、符号化ビデオデータのようなデータを転送するように構成され得る。出力インターフェース108がワイヤレス送信機を備えるいくつかの例において、出力インターフェース108および入力インターフェース122は、IEEE802.11仕様、IEEE802.15仕様(例えば、ZigBee(登録商標))、Bluetooth(登録商標)規格、または同様のもののような他のワイヤレス規格に従って、符号化ビデオデータのようなデータを転送するように構成され得る。いくつかの例において、ソースデバイス102および/または宛先デバイス116は、それぞれのシステムオンチップ(SoC:system-on-a-chip)デバイスを含み得る。例えば、ソースデバイス102は、ビデオエンコーダ200および/または出力インターフェース108に起因する機能性を実行するためのSoCデバイスを含み得、宛先デバイス116は、ビデオデコーダ300および/または入力インターフェース122に起因する機能性を実行するためのSoCデバイスを含み得る。
[0039] 本開示の技法は、無線テレビ放送、ケーブルテレビ放送、衛星テレビ放送、動的適応型ストリーミングオーバHTTP(DASH:dynamic adaptive streaming over HTTP)のようなインターネットストリーミングビデオ送信、データ記憶媒体上で符号化されるデジタルビデオ、データ記憶媒体上に記憶されたデジタルビデオの復号、または他のアプリケーションのような、様々なマルチメディアアプリケーションのうちの任意のものをサポートして、ビデオコーディングに適用され得る。
[0040] 宛先デバイス116の入力インターフェース122は、コンピュータ読取可能な媒体110(例えば、記憶デバイス112、ファイルサーバ114、または同様のもの)から符号化ビデオビットストリームを受信する。符号化ビデオビットストリームは、ビデオブロックまたは他のコーディングされる単位(例えば、スライス、ピクチャ、ピクチャのグループ、シーケンス、または同様のもの)の特性および/または処理を説明する値を有するシンタックス要素のような、ビデオエンコーダ200によって定義され、ビデオデコーダ300によっても使用されるシグナリング情報を含み得る。ディスプレイデバイス118は、復号ビデオデータの復号ピクチャをユーザに表示する。ディスプレイデバイス118は、ブラウン管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスのような様々なディスプレイデバイスのうちの任意のものを表し得る。
[0041] 図1には示されていないが、いくつかの例において、ビデオエンコーダ200およびビデオデコーダ300は各々、オーディオエンコーダおよび/またはオーディオデコーダと一体化され得、共通データストリーム中のオーディオとビデオの両方を含む多重化ストリームを処理するために、適切なMUX−DEMUXユニット、または他のハードウェアおよび/またはソフトウェアを含み得る。適用可能な場合、MUX−DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP:user datagram protocol)のような他のプロトコルに準拠し得る。
[0042] ビデオエンコーダ200およびビデオデコーダ300は各々、1つまたは複数のマイクロプロセッサ、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せのような、様々な好適なエンコーダまたはデコーダ回路のうちの任意のものとして実施され得る。本技法がソフトウェアで部分的に実施されると、デバイスは、本開示の技法を実行するために、このソフトウェアのための命令を、好適で非一時的なコンピュータ読取可能な媒体に記憶し、1つまたは複数のプロセッサを使用してハードウェアで命令を実行し得る。ビデオエンコーダ200およびビデオデコーダ300の各々は、1つまたは複数のエンコーダまたはデコーダに含まれ得、それらのどちらも、複合エンコーダ/デコーダ(CODEC)の一部としてそれぞれのデバイスに統合され得る。ビデオエンコーダ200および/またはビデオデコーダ300を含むデバイスは、集積回路、マイクロプロセッサ、および/またはセルラ電話のようなワイヤレス通信デバイスを備え得る。
[0043] ビデオエンコーダ200およびビデオデコーダ300は、高効率ビデオコーディング(HEVC)とも呼ばれるITU−T H.265のようなビデオコーディング規格またはそれに対する拡張、例えば、マルチビューおよび/またはスケーラブルビデオコーディング拡張に従って動作し得る。代替的に、ビデオエンコーダ200およびビデオデコーダ300は、JEM(Joint Exploration Test Model)またはVVC(Versatile Video Coding)とも呼ばれるITU−T H.266のような他のプロプライエタリ規格または業界規格に従って動作し得る。VVC規格の最近のドラフトは、Bross等による「Versatile Video Coding (Draft 5)」,ITU−T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11からなるJVET(Joint Video Experts Team),第14回会合:ジュネーブ、スイス、2019年3月19−27日、JVET−N1001−v3(以下、「VVCドラフト5」)、に記載されている。しかしながら、本開示の技法は、どの特定のコーディング規格にも限定されるものではない。
[0044] 概して、ビデオエンコーダ200およびビデオデコーダ300は、ピクチャのブロックベースコーディングを実行し得る。「ブロック」という用語は、一般に、処理される(例えば、符号化されるか、復号されるか、それ以外の場合には符号化および/または復号プロセスにおいて使用される)べきデータを含む構造を指す。例えば、ブロックは、ルミナンスおよび/またはクロミナンスデータのサンプルの二次元マトリックスを含み得る。概して、ビデオエンコーダ200およびビデオデコーダ300は、YUV(例えば、Y、Cb、Cr)フォーマットで表されるビデオデータをコーディングし得る。すなわち、ピクチャのサンプルの赤、緑、および青(RGB)データをコーディングするのではなく、ビデオエンコーダ200およびビデオデコーダ300は、輝度成分とクロミナンス成分とをコーディングし得、ここで、クロミナンス成分は、赤の色相と青の色相の両方のクロミナンス成分を含み得る。いくつかの例において、ビデオエンコーダ200は、符号化の前に、受信したRGBフォーマットのデータをYUV表現に変換し、ビデオデコーダ300は、YUV表現をRGBフォーマットに変換する。代替的に、前処理ユニットおよび後処理ユニット(図示せず)がこれらの変換を実行し得る。
[0045] 本開示は、一般に、ピクチャのデータを符号化または復号するプロセスを含むために、ピクチャのコーディング(例えば、符号化および復号)に言及し得る。同様に、本開示は、ブロックのためのデータを符号化または復号するプロセス、例えば、予測および/または残差コーディングを含むために、ピクチャのブロックのコーディングに言及し得る。符号化ビデオビットストリームは、一般に、コーディング決定(例えば、コーディングモード)とブロックへのピクチャの区分とを表すシンタックス要素のための一連の値を含む。ゆえに、ピクチャまたはブロックをコーディングすることへの言及は、一般に、ピクチャまたはブロックを形成するシンタックス要素のための値をコーディングすることと理解されるべきである。
[0046] HEVCは、コーディング単位(CU)、予測単位(PU:prediction units)、および変換単位(TU:transform units)を含む様々なブロックを定義する。HEVCによれば、ビデオコーダ(例えばビデオエンコーダ200)は、四分木構造に従ってコーディングツリー単位(CTU)をCUに区分する。すなわち、ビデオコーダは、CTUおよびCUを4つの等しい重複しない正方形に区分し、四分木の各ノードは、子ノードを有さないかまたは4つの子ノードを有するかのいずれかである。子ノードのないノードは、「リーフノード」と呼ばれ得、そのようなリーフノードのCUは、1つまたは複数のPUおよび/または1つまたは複数のTUを含み得る。ビデオコーダは、PUおよびTUをさらに区分し得る。例えば、HEVCでは、残差四分木(RQT:residual quadtree)が、TUの区分を表す。HEVCでは、PUがインター予測データを表し、TUが残差データを表す。イントラ予測されるCUは、イントラモードインジケーションのようなイントラ予測情報を含む。
[0047] 別の例として、ビデオエンコーダ200およびビデオデコーダ300は、JEMまたはVVCに従って動作するように構成され得る。JEMまたはVVCによれば、ビデオコーダ(例えばビデオエンコーダ200)は、ピクチャを複数のコーディングツリー単位(CTU)に区分する。ビデオエンコーダ200は、四分木−二分木(QTBT:quadtree-binary tree)構造またはマルチタイプツリー(MTT:Multi-Type Tree)構造のようなツリー構造に従ってCTUを区分し得る。QTBT構造は、HEVCのCU、PU、およびTU間の区別のような複数の区分タイプという概念を除去する。QTBT構造は、四分木区分に従って区分される第1のレベルと、二分木区分に従って区分される第2のレベルという2つのレベルを含み得る。QTBT構造のルートノードは、CTUに対応する。二分木のリーフノードは、コーディング単位(CU)に対応する。
[0048] MTT区分構造では、ブロックが、四分木(QT)区分、二分木(BT:binary tree)区分、および1つまたは複数のタイプの三分木(TT:triple tree)区分を使用して区分され得る。三分木区分は、ブロックが3つのサブブロックに分割される区分である。いくつかの例では、三分木区分が、中心を通って元のブロックを分割することなく、ブロックを3つのサブブロックに分割する。MTTにおける区分タイプ(例えば、QT、BT、およびTT)は、対称または非対称であり得る。
[0049] いくつかの例において、ビデオエンコーダ200およびビデオデコーダ300は、輝度成分およびクロミナンス成分の各々を表すために単一のQTBTまたはMTT構造を使用し得るが、他の例において、ビデオエンコーダ200およびビデオデコーダ300は、輝度成分に対して1つのQTBTまたはMTT構造および両方のクロミナンス成分に対して別のQTBTまたはMTT構造(または、それぞれのクロミナンス成分に対して2つのQTBTまたはMTT構造)など、2つ以上のQTBTまたはMTT構造を使用し得る。
[0050] ビデオエンコーダ200およびビデオデコーダ300は、HEVCによる四分木区分、JEMによるQTBT区分、または他の区分構造を使用するように構成され得る。説明のために、本開示の技法の説明は、QTBT区分に関して提示される。しかしながら、本開示の技法は、四分木区分、または他のタイプの区分を使用するように構成されたビデオコーダにも適用され得ることは理解されるべきである。
[0051] 本開示は、垂直次元および水平次元の観点からブロック(例えばCUまたは他のビデオブロック)のサンプル次元を指すために、例えば、16×16(16x16)のサンプルまたは16×16(16 by 16)のサンプルのように、「N×N(NxN)」および「N×N(N by N)」を同義で使用し得る。概して、16×16のCUは、垂直方向に16個のサンプルを有し(y=16)、水平方向に16個のサンプルを有する(x=16)であろう。同様に、N×NのCUは、一般に、垂直方向にN個のサンプルを有し、水平方向にN個のサンプルを有し、ここで、Nは、非負の整数値を表す。CU中のサンプルは、行および列に配置され得る。さらに、CUは、水平方向において、必ずしも、垂直方向と同じ数のサンプルを有する必要はない。例えば、CUは、N×Mのサンプルを備え得、ここで、Mは必ずしもNに等しいとは限らない。
[0052] ビデオエンコーダ200は、予測情報および/または残差情報並びに他の情報を表すCUのためのビデオデータを符号化する。予測情報は、CUのための予測ブロックを形成するためにCUがどのように予測されるべきかを示す。残差情報は、一般に、符号化の前のCUのサンプルと予測ブロックとの間のサンプルごとの差分を表す。
[0053] CUを予測するために、ビデオエンコーダ200は、一般に、インター予測またはイントラ予測を通してCUのための予測ブロックを形成し得る。インター予測は、一般に、前にコーディングされたピクチャのデータからCUを予測することを指し、イントラ予測は、一般に、同じピクチャの、前にコーディングされたデータからCUを予測することを指す。インター予測を実行するために、ビデオエンコーダ200は、1つまたは複数の動きベクトルを使用して予測ブロックを生成し得る。ビデオエンコーダ200は、一般に、例えば、CUと参照ブロックとの間の差分の観点から、CUに厳密に一致する参照ブロックを識別するために動き探索を実行し得る。ビデオエンコーダ200は、参照ブロックが現在CUに厳密に一致するかどうかを決定するために、差分絶対値和(SAD:sum of absolute difference)、差分二乗和(SSD:sum of squared differences)、平均絶対値差分(MAD:mean absolute difference)、平均二乗差分(MSD:mean squared differences)、または他のそのような差分算出を使用して差分メトリックを算出し得る。いくつかの例において、ビデオエンコーダ200は、単方向予測または双方向予測を使用して現在CUを予測し得る。
[0054] JEMはまた、インター予測モードとみなされ得るアフィン動き補償モードを提供する。アフィン動き補償モードにおいて、ビデオエンコーダ200は、ズームインまたはズームアウト、回転、射影運動、または他の不規則な動作タイプのような非並進運動を表す2つ以上の動きベクトルを決定し得る。
[0055] イントラ予測を実行するために、ビデオエンコーダ200は、予測ブロックを生成するためのイントラ予測モードを選択し得る。JEMは、平面モードおよびDCモード並びに様々な方向性モードを含む67個のイントラ予測モードを提供する。概して、ビデオエンコーダ200は、現在ブロックのサンプルが予測される、現在ブロック(例えば、CUのブロック)に隣接するサンプルを説明するイントラ予測モードを選択する。ビデオエンコーダ200がラスタ走査順序で(左から右、上から下に)CTUおよびCUをコーディングすると仮定すると、そのようなサンプルは、一般に、現在ブロックと同じピクチャ中で現在ブロックの上、左上、または左にあり得る。
[0056] ビデオエンコーダ200は、現在ブロックのための予測モードを表すデータを符号化する。例えば、インター予測モードの場合、ビデオエンコーダ200は、様々な利用可能なインター予測モードのうちのどれが使用されるかを表すデータ、並びに対応するモードの動き情報を符号化し得る。単方向または双方向インター予測の場合、例えば、ビデオエンコーダ200は、高度動きベクトル予測(AMVP:advanced motion vector prediction)またはマージモードを使用して動きベクトルを符号化し得る。ビデオエンコーダ200は、同様のモードを使用して、アフィン動き補償モードのための動きベクトルを符号化し得る。
[0057] ブロックのイントラ予測またはインター予測のような予測に続いて、ビデオエンコーダ200は、ブロックのための残差データを算出し得る。残差ブロックのような残差データは、ブロックと、対応する予測モードを使用して形成された、そのブロックの予測ブロックとの間のサンプルごとの差分を表す。ビデオエンコーダ200は、サンプル領域ではなく変換領域において変換データを作り出すために、残差ブロックに1つまたは複数の変換を適用し得る。例えば、ビデオエンコーダ200は、離散コサイン変換(DCT:discrete cosine transform)、整数変換、ウェーブレット変換、または概念的に同様の変換を残差ビデオデータに適用し得る。追加的に、ビデオエンコーダ200は、第1の変換に続いて、モード依存分離不可能二次変換(MDNSST:mode-dependent non-separable secondary transform)、信号依存変換、カルーネンレーベ変換(KLT:Karhunen-Loeve transform)、または同様のもののような二次変換を適用し得る。ビデオエンコーダ200は、1つまたは複数の変換の適用に続いて変換係数を作り出す。
[0058] 上述のように、変換係数を作り出すための任意の変換に続いて、ビデオエンコーダ200は、変換係数の量子化を実行し得る。量子化は、一般に、変換係数を表すために使用されるデータ量をできる限り低減させためにそれらの係数が量子化されるプロセスを指し、これは、さらなる圧縮を提供する。量子化プロセスを実行することによって、ビデオエンコーダ200は、係数の一部または全部に関連するビット深度を低減させ得る。例えば、ビデオエンコーダ200は、量子化中にnビット値をmビット値に丸めることができ、ここで、nは、mより大きい。いくつかの例において、量子化を実行するために、ビデオエンコーダ200は、量子化されるべき値のビット単位の右シフトを実行し得る。
[0059] 量子化に続いて、ビデオエンコーダ200は、変換係数を走査し、量子化された変換係数を含む二次元マトリックスから一次元ベクトルを作り出し得る。走査は、より高いエネルギー(そのため、より低い周波数)の係数をベクトルの前方に置き、より低いエネルギー(そのため、より高い周波数)の変換係数をベクトルの後方に置くように設計され得る。いくつかの例において、ビデオエンコーダ200は、直列化されたベクトルを作り出すために、あらかじめ定義された走査順序を利用して、量子化された変換係数を走査し、次いで、このベクトルの量子化された変換係数をエントロピー符号化し得る。他の例において、ビデオエンコーダ200は、適応走査を実行し得る。一次元ベクトルを形成するために、量子化された変換係数を走査した後、ビデオエンコーダ200は、例えば、コンテキスト適応型バイナリ算術コーディング(CABAC:context-adaptive binary arithmetic coding)にしたがって、一次元ベクトルをエントロピー符号化し得る。ビデオエンコーダ200はまた、ビデオデータを復号する際にビデオデコーダ300が使用するために、符号化ビデオデータに関連するメタデータを説明するシンタックス要素の値をエントロピー符号化し得る。
[0060] CABACを実行するために、ビデオエンコーダ200は、送信されるべきシンボルに、コンテキストモデル内のコンテキストを割り当て得る。コンテキストは、例えば、シンボルの隣接する値がゼロ値であるか否かに関係し得る。確率の決定は、シンボルに割り当てられたコンテキストに基づき得る。
[0061] ビデオエンコーダ200はさらに、例えば、ピクチャヘッダ、ブロックヘッダ、スライスヘッダ、またはシーケンスパラメータセット(SPS:sequence parameter set)、ピクチャパラメータセット(PPS:picture parameter set)、もしくはビデオパラメータセット(VPS:video parameter set)のような他のシンタックスデータ中で、ビデオデコーダ300への、ブロックベースシンタックスデータ、ピクチャベースシンタックスデータ、およびシーケンスベースシンタックスデータのようなシンタックスデータを生成し得る。ビデオデコーダ300は、対応するビデオデータを復号する方法を決定するために、そのようなシンタックスデータを同様に復号し得る。
[0062] このように、ビデオエンコーダ200は、符号化ビデオデータ、例えば、ブロック(例えば、CU)へのピクチャの区分と、ブロックの予測情報および/または残差情報とを説明するシンタックス要素を含むビットストリームを生成し得る。最終的に、ビデオデコーダ300は、ビットストリームを受信し、符号化ビデオデータを復号し得る。
[0063] 概して、ビデオデコーダ300は、ビットストリームの符号化ビデオデータを復号するために、ビデオエンコーダ200によって実行されるものと逆のプロセスを実行する。例えば、ビデオデコーダ300は、ビデオエンコーダ200のCABAC符号化プロセスと逆ではあるが実質的に同じである方法で、CABACを使用してビットストリームのシンタックス要素の値を復号し得る。シンタックス要素は、ピクチャの情報をCTUに区分することと、CTUのCUを定義するために、QTBT構造のような対応する区分構造に従って各CTUを区分することとを定義し得る。シンタックス要素は、ビデオデータのブロック(例えば、CU)の予測情報および残差情報をさらに定義し得る。
[0064] 残差情報は、例えば、量子化された変換係数によって表され得る。ビデオデコーダ300は、ブロックのための残差ブロックを再生するために、ブロックの量子化された変換係数を逆量子化および逆変換し得る。ビデオデコーダ300は、ブロックのための予測ブロックを形成するために、シグナリングされた予測モード(イントラ予測またはインター予測)および関連する予測情報(例えば、インター予測の動き情報)を使用する。ビデオデコーダ300は、次いで、元のブロックを再生するために、(サンプル単位で)予測ブロックと残差ブロックとを組み合わせ得る。ビデオデコーダ300は、ブロックの境界に沿った視覚的アーティファクトを低減するためのデブロッキングプロセスの実行のような追加の処理を実行し得る。
[0065] 本開示は、一般に、シンタックス要素のような特定の情報を「シグナリング」することを指し得る。「シグナリング」という用語は、一般に、符号化ビデオデータを復号するために使用されるシンタックス要素および/または他のデータのための値の通信を指し得る。すなわち、ビデオエンコーダ200は、ビットストリーム中のシンタックス要素の値をシグナリングし得る。概して、シグナリングは、ビットストリームにおいて値を生成することを指す。上述のように、ソースデバイス102は、ビットストリームを宛先デバイス116に略リアルタイムで伝送し得るか、または宛先デバイス116による後の取り出しのためにシンタックス要素を記憶デバイス112に記憶するときに行われるように、リアルタイムでなくてもよい。
[0066] 本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、ビデオデータのピクチャをコーディングするときに波面並列処理を実行するように構成され得る。概して、波面並列処理は、別個の処理スレッドを使用してコーディングツリー単位(CTU)の個々のラインをコーディングすることを伴い得る。例えば、ビデオエンコーダ200またはビデオデコーダ300によって実行される第1のスレッドがCTUの第1のラインを処理し得、第2のスレッドがCTUの第2のラインを処理し得、以下同様である。CTUをコーディングすることは、とりわけ、同じCTUまたは前にコーディングされたCTU(例えば、左の隣接CTUおよび/または上の隣接CTU)内の動き情報を指し得る、CTUの動き予測されたコーディング単位(CU)の動き情報をコーディングすることを含む。そのような動き情報は、動きベクトル予測子(MVP)バッファに記憶され得る。本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、現在CTUラインのビデオデータをコーディングする前に、現在CTUラインのためのMVPバッファをリセットするように構成され得る。MVPバッファは、現在CTUラインのための個別のMVPバッファであり得るか、または共通のMVPバッファがCTUの複数のラインに使用され得る。
[0067] いくつかの例において、動き情報をMVPバッファに記憶するとき、ビデオエンコーダ200およびビデオデコーダ300は、MVPバッファ内の一意の動き情報だけを記憶し得る。例えば、ビデオエンコーダ200およびビデオデコーダ300は、現在の動きベクトルを使用して現在CUをコーディングし、動きベクトルが現在CUについてMVPバッファに現在記憶されているかどうかを決定し、記憶されている場合には、動きベクトルをMVPバッファに記憶するのを防ぎ、記憶されていない場合には、動きベクトルをMVPバッファに記憶し得る。
[0068] いくつかの例において、ビデオエンコーダ200およびビデオデコーダ300は、MVPバッファが満杯になったときにMVPバッファから動きベクトルを除去するために先入れ先出し(FIFO:first-in-first-out)規則を使用し得る。すなわち、新しい動きベクトルをMVPバッファに追加するために、ビデオエンコーダ200およびビデオデコーダ300は、最も早く挿入された動きベクトルをMVPバッファから除去し、新しい動きベクトルをMVPバッファに挿入し得る。このように、MVPバッファは、キューのような挙動を有し得る。
[0069] いくつかの例において、ビデオエンコーダ200およびビデオデコーダ300は、様々なタイプの異なる動きモデルの各々のための別個のMVPバッファを維持し得る。例えば、ビデオエンコーダ200およびビデオデコーダ300は、アフィン動きモデルのためのアフィンMVPバッファ、イントラブロックコピーモードの動き情報のためのイントラブロックコピーMVPバッファ、局所照明補償の動き情報のための照明補償MVPバッファ、サブブロックMVPのためのサブブロックMVPバッファ、および/または時間的動き予測のための時間MVPバッファを維持し得る。
[0070] いくつかの例において、ビデオエンコーダ200およびビデオデコーダ300は、1つまたは複数のMVPバッファ内の2つ以上のMVPから合成MVPを生成し、合成MVPをMVPバッファのうちの1つに挿入し得る。2つ以上のMVPは、同じ動きモデルに準拠するかまたは異なる動きモデルに準拠し得る(すなわち、異なる動き情報タイプを有する)。
[0071] 図2Aおよび図2Bは、例となる四分木二分木(QTBT)構造130と、対応するコーディングツリー単位(CTU)132とを例示する概念図である。実線は四分木分割を表し、破線は二分木分割を示す。二分木の各分割(すなわち、非リーフ)ノードでは、どの分割タイプ(すなわち、水平または垂直)が使用されるかを示すために1つのフラグがシグナリングされ、ここで、0は水平分割を示し、1は垂直分割を示す。四分木分割の場合、四分木ノードがブロックを同じサイズの4つのサブブロックへと水平および垂直に分割するため、分割タイプを示す必要はない。従って、QTBT構造130の領域ツリーレベル(すなわち、実線)のためのシンタックス要素(例えば分割情報)と、QTBT構造130の予測ツリーレベル(すなわち、破線)のためのシンタックス要素(例えば分割情報)とを、ビデオエンコーダ200は符号化し得、ビデオデコーダ300は復号し得る。QTBT構造130の終端リーフノードによって表されるCUのための、予測および変換データのようなビデオデータを、ビデオエンコーダ200は符号化し得、ビデオデコーダ300は復号し得る。
[0072] 概して、図2BのCTU132は、第1および第2のレベル(例えば、領域ツリーレベルおよび予測ツリーレベル)におけるQTBT構造130のノードに対応するブロックのサイズを定義するパラメータに関連付けられ得る。これらのパラメータは、CTUサイズ(サンプル中のCTU132のサイズを表す)、最小四分木サイズ(MinQTSize、最小許容四分木リーフノードサイズを表す)、最大二分木サイズ(MaxBTSize、最大許容二分木ルートノードサイズを表す)、最大二分木深度(MaxBTDepth、最大許容二分木深度を表す)、および最小二分木サイズ(MinBTSize、最小許容二分木リーフノードサイズを表す)を含み得る。
[0073] CTUに対応するQTBT構造のルートノードは、QTBT構造の第1のレベルにおいて4つの子ノードを有し得、その各々が四分木区分に従って区分され得る。すなわち、第1のレベルのノードは、(子ノードを有さない)リーフノードであるか、または4つの子ノードを有するかのいずれかである。QTBT構造130の例は、そのようなノードを、親ノードと、分岐のための実線を有する子ノードとを含むものとして表す。第1のレベルのノードが最大許容二分木ルートノードサイズ(MaxBTSize)より大きくない場合、ノードは、それぞれの二分木によってさらに区分され得る。1つのノードの二分木分割は、分割の結果生じるこのノードが最小許容二分木リーフノードサイズ(MinBTSize)または最大許容二分木深度(MaxBTDepth)に達するまで反復され得る。QTBT構造130の例は、そのようなノードを、分岐のための破線を有するものとして表す。二分木リーフノードは、コーディング単位(CU)と呼ばれ、これは、これ以上の区分なしに、予測(例えば、イントラピクチャ予測またはインターピクチャ予測)および変換に使用される。上述したように、CUは「ビデオブロック」または「ブロック」とも呼ばれ得る。
[0074] QTBT区分構造の一例において、CTUサイズは128×128(ルーマサンプルと2つの対応する64×64のクロマサンプル)と設定され、MinQTSizeは、16×16と設定され、MaxBTSizeは、64×64と設定され、(幅と高さの両方についての)MinBTSizeは、4と設定され、MaxBTDepthは、4と設定される。四分木リーフノードを生成するために、最初に四分木区分がCTUに適用される。四分木リーフノードは、16×16(すなわち、MinQTSize)から128×128(すなわち、CTUサイズ)までのサイズを有し得る。リーフ四分木ノードが128×128である場合、サイズがMaxBTSize(すなわち、この例において64×64)を超えるので、それは、二分木によってこれ以上分割されない。そうでない場合、リーフ四分木ノードは、二分木によってさらに区分される。従って、四分木リーフノードは、二分木のためのルートノードでもあり、0の二分木深度を有する。二分木深度がMaxBTDepth(この例において4)に達すると、これ以上の分割は許可されない。二分木ノードがMinBTSize(この例において4)に等しい幅を有するとき、それはこれ以上の垂直分割が許可されないことを意味する。同様に、MinBTSizeに等しい高さを有する二分木ノードは、その二分木ノードについてこれ以上の水平分割が許可されないことを意味する。上述のように、二分木のリーフノードはCUと呼ばれ、これ以上の区分なく予測および変換に従ってさらに処理される。
[0075] 図3は、履歴動きベクトル予測子(HMVP)を使用して動き情報をコーディングするための例となるプロセスを例示するフロー図である。最初に、ビデオエンコーダ200またはビデオデコーダ300のようなビデオコーダは、HMVP候補を有するテーブルをロードする(140)。次いで、ビデオコーダは、HMVP候補を使用してビデオデータのブロックをコーディングする(142)。次いで、ビデオコーダは、コーディングされたブロックの動き情報でテーブルを更新する(144)。
[0076] 図4は、HMVPテーブルを更新する例を例示する概念図である。JVET−K0104では、テーブルサイズが16に設定され、先入れ先出し(FIFO)規則が適用される。図4は、HMVP候補を除去し、本開示の技法の例において使用されるテーブルに新しいものを追加するためにFIFO規則が適用される例を描写する。
[0077] ビデオエンコーダ200またはビデオデコーダ300のようなビデオコーダは、候補リスト内の時間動きベクトル予測(TMVP:temporal motion vector prediction)候補の後に、テーブル内の最後のエントリから最初のエントリまでのHMVP候補を挿入し得る。ビデオコーダは、HMVP候補にプルーニングを適用し得る。ビデオコーダは、利用可能なマージ候補の総数がマージ候補のシグナリングされた最大許容数に達したとき、プルーニングプロセスを終了し得る。
[0078] 図4の例において、更新前のテーブルは、履歴MVP0−(HMVP0)〜履歴MVPL−1(HMVPL−1)を含み、ここで、下付きの数字0〜L−1は、履歴MVPが追加された順序を表す。CL−1は、テーブルに追加される新しい履歴MVPを表す。ゆえに、この例では、FIFO規則に従って、CL−1を追加する前にHMVP0がテーブルから除去される。
[0079] 図5は、動き情報コーディングのための非隣接ブロックの例となる選択を例示する概念図である。図5の例では、「Curr」とラベル付けされている現在ブロックが、Ai、Bj、およびNAkとラベル付けされている隣接ブロックおよび/または非隣接の隣接ブロックを使用して動き情報がコーディングされ得る現在コーディング単位(CU)を表す。非隣接動きベクトル予測は、例えば、2018年6月8日に出願された米国出願第16/003,269号に記載されている。ビデオコーダは、FIFO規則と、非隣接ブロックのための動き候補のバッファの最大サイズとを適用し得る。
[0080] 図6は、親ブロックに基づく非隣接ブロックの例となる選択を例示する概念図である。すなわち、親ブロックは、現在ブロックを含むサブブロックに分割されたブロックである。例えば、親ブロックは、CTUであるか、またはCTUが区分されたサブブロックであり得る。図5と同様に、図6では、現在CUは、「Curr」とラベル付けされており、動き情報が取り出され、現在CUの動き情報を予測するために使用され得る非隣接ブロックは、「NAi,j」とラベル付けされている。
[0081] コロケートされたブロックの隣接空間ブロックの動きベクトルは、動きベクトルHおよびC(すなわち、コロケートされたブロックの中心および右下にある動きベクトル)に加えて、マージモードのための動きベクトル予測(MVP)候補として使用され得る。
[0082] 本開示の技法は、例えば、AMVPおよび/またはマージコーディングモードに使用される候補を追加することによって、動きベクトル予測を改善するために使用され得、ここで、追加される候補は、非隣接ブロックから取得され得る。例えば、追加される候補は、図6のNA1,1〜NA1,9のうちのいずれかに対応し得る。
[0083] 図7は、コーディングツリー単位(CTU)の所望の波面処理の例を例示する概念図である。図7に示されるように、様々なスレッドが、CTUの異なるラインを処理するために割り当てられ得る。すなわち、ビデオエンコーダ200またはビデオデコーダ300のようなビデオコーダは、例えば、異なるCTUラインをコーディングするときの波面並列処理(WPP:wavefront parallel processing)のために、複数の異なるスレッドを実行し得る。いくつかの例では、インター予測されたブロックの動き情報をコンテキストベースコーディング(例えば、CABACコーディング)するために使用される特定の確率が、例えば、最後のブロックがまだコーディングされていなかったと仮定して、その確率が前のCTUラインの最後のブロックから決定されるべきものであった場合、決定されないであろう。ゆえに、本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、CTUラインが正しく処理され得ることを確実にするために、CTUラインをコーディングする前に、CTUラインのためのCTUバッファをリセットし得る。
[0084] 図8は、HMVPに使用される動き情報の例を例示する概念図である。図8は、さらなるブロックの動きベクトルを考慮しつつ、FIFOの使用により、現在ブロックにより近いブロックの動きベクトルがどのように候補リストから除去され得るかを例示する。特に、図8では、Xが、現在コーディングされている動き情報を表し、影付きブロックのMVが、履歴バッファ内にある。本開示は、図8に示されるように、従来のHMVP技法が、FIFO規則の使用に少なくとも部分的に起因して、非隣接ブロックの動きベクトルを十分には活用しないことを認識する。
[0085] 特に、ブロックXがコーディングされるとき、左上CTU、上CTU、および右上CTUの非隣接ブロック(TL0,T0,T1,TR0,TR1,TR2,TR3)の動き情報は、履歴バッファから除去されている。従って、これらのブロックの動き情報は、動きベクトルが履歴バッファ内にある、例えば、CTUのLL0、CTUのLL1、およびCTUのF0〜F3より非隣接ブロックがXに近い場合でも、候補リストへの追加について考慮されない。
[0086] 本開示はまた、HVMPのための単一のバッファが波面並列処理に適用可能でないことを認識する。単一のバッファだけが使用される場合、バッファのサイズは、全てのスレッド(例えば、CTUライン)において処理されているブロックのための潜在的な空間候補を含むために非常に大きくなるであろう。例えば、4つのスレッドが並列に実行されるように設定されている場合、バッファのサイズは64に達し得る。結果として、ビデオデコーダ300にMVPのインデックスをシグナリングするためにより多くのビットが必要とされる。同様に、冗長なエントリが発生し得る。すなわち、履歴バッファ内のエントリは、このライン中のブロックに対して潜在的に有用であり得るが、他のライン(例えば、図8中のXおよびF)中のブロックに対しては有用でない可能性がある。その結果、ブロックの最適な候補を見つけることは困難であり得る。
[0087] 図9は、コーディングツリー単位(CTU)の複数のラインに区分されたピクチャの例を例示する概念図である。特に、図9の例において、ピクチャ150は、CTUライン152A〜152E(CTUライン152)を含む。CTUライン152の各々は、CTUのそれぞれのセットを含む:CTUライン152Aは、CTU154A〜154Jを含み、CTUライン152Bは、CTU156A〜156Jを含み、CTUライン152Cは、CTU158A〜158Jを含み、CTUライン152Dは、CTU160A〜160Jを含み、CTUライン152Eは、CTU162A〜162Jを含む。
[0088] ビデオエンコーダ200およびビデオデコーダ300は、履歴ベースMVPのために複数のバッファを使用するように、本開示の技法に従って構成され得る。いくつかの例において、ビデオエンコーダ200およびビデオデコーダ300は、(各々が別個のそれぞれの処理スレッドによって処理され得る)CTUライン152の各々について別個の履歴MVPバッファを維持し得るか、または波面並列処理が適用されるときに各CTUラインの開始時にリセットされる単一のバッファが存在し得る。
[0089] 一例において、CTU158Cは、現在CTUを表し得る。CTU154A〜154F、156A〜156D、158A、および158B(図9中でグレーの陰影を使用して示される)の動き情報が、CTU158Cの動き情報をコーディングするときに使用するために1つまたは複数のそれぞれの履歴MVPバッファで利用可能であり得る。
[0090] 追加的にまたは代替的に、ビデオエンコーダ200およびビデオデコーダ300は、以下の技法のうちのいずれかまたは全てを単独でまたは組み合わせて使用して、履歴MVPバッファの初期化を実行し得る。ビデオエンコーダ200およびビデオデコーダ300は、各CTUラインの履歴MVPバッファをリセットして空にし得る。ビデオエンコーダ200およびビデオデコーダ300は、各CTUラインの履歴MVPバッファを、異なる参照フレームインデックスおよび/もしくはインター予測方向を有するゼロ動きベクトル、または他の事前定義されたもしくは導出された動き情報で事前に満たすことができる。ビデオエンコーダ200およびビデオデコーダ300は、各CTUラインの履歴MVPバッファを、同じ時間レイヤまたは下位時間レイヤ(現在フレーム/ピクチャに利用可能な参照ピクチャ)中のコーディングされたフレーム(ピクチャ)からの動き情報で事前に満たすことができる。
[0091] ビデオエンコーダ200およびビデオデコーダ300は、例えば、時間的距離に基づいて動き情報をスケーリングするか、または動き情報を処理/修正する、例えば、この動き情報を別のMVと組み合わせることができる。概して、ビデオエンコーダ200およびビデオデコーダ300は、この動き情報を、コーディングされたフレーム/ピクチャ中の前の履歴MVPバッファからの動き情報、またはコーディングされたフレーム/ピクチャ中のコロケートされた領域(CTUであるか、または特定のブロックサイズ、例えば4×4ブロックより大きい可能性がある)の動き情報と組み合わせ得る。ビデオエンコーダ200およびビデオデコーダ300は、現在CTUの右上CTUがコーディングされるとき、上CTUラインの履歴MVPバッファを事前に満たし得る。ビデオエンコーダ200およびビデオデコーダ300は、異なる参照フレームインデックスおよび/またはインター予測方向を有するゼロ動きベクトル、または他の事前定義されたもしくは導出された動き情報を使用し得る。
[0092] 追加的にまたは代替的に、ビデオエンコーダ200およびビデオデコーダ300は、CTUラインのCTUがコーディング(符号化または復号)されるときはいつでも、現在CTUラインの下のCTUラインの履歴バッファを初期化または修正するために、関連する履歴MVPバッファを使用し得る。
[0093] 追加的にまたは代替的に、ビデオエンコーダ200およびビデオデコーダ300は、関連する履歴MVPバッファからエントリを除去するためにFIFO規則を適用し得る。
[0094] 追加的にまたは代替的に、ビデオエンコーダ200およびビデオデコーダ300は、関連するCTUラインが完全に符号化/復号されたとき、履歴MVPバッファをクリアし得る。
[0095] ビデオエンコーダ200およびビデオデコーダ300は、AMVP/マージまたは他のモードの候補リストより大きいMVPバッファサイズを維持し得る。バッファからの任意の1つまたは複数のMVは、特定のモード、例えば、AMPV、マージモード、アフィン、または任意の他のインターモードで使用される候補リストのための(1つまたは複数の)MV候補として選択され得る。バッファからMVをどのように選択するのか、例えば、N個の最後にバッファに追加されたMVを選ぶのか、バッファの先頭から数個、および/またはバッファの中間から数個、および/またはバッファの末尾から数個を選ぶのか、についての規則が定義され得る。代替的に、どのMVが選択されるかを示すために、シグナリングが適用され得る(例えば、ビデオエンコーダ200は、シグナリングされたデータを符号化し得、ビデオデコーダ300は、シグナリングされたデータを復号し得る)。MVPバッファサイズは、任意のパラメータセット(例えば、ビデオパラメータセット、シーケンスパラメータセット、ピクチャパラメータセット、または同様のもの)、スライスヘッダ、またはその他においてシグナリングされ得る。MVPバッファは、スライス、ピクチャ、および/またはビデオシーケンスに関連付けられ得る。
[0096] ビデオエンコーダ200およびビデオデコーダ300がインターコーディングされたブロックを処理するとき、ブロック中で使用されるMVはMVPバッファに追加され得、一意のMVだけがバッファ内に保持され得る。バッファが満杯である場合、新しいMVが追加されるときに古いMVがバッファから除去され得る。MVがバッファに追加され得る規則が存在し得、例えば、AMVPモードでは、シグナリングされたMVだけが追加され得、ブロックがマージモードでコーディングされる場合には、ブロックのMVはバッファに追加されない。
[0097] ビデオエンコーダ200およびビデオデコーダ300は、バッファ内の既存の1つまたは複数のMVにMVを付加し得る。例えば、バッファ内の既存のMVが単方向である場合、新しいMVを追加するとき、それらの既存のMVは、新しいMVを付加することによって双方向になるように修正され得る。
[0098] 新しいMVを追加しつつ、いくつかのMV処理が適用され得る。例えば、新しいMVがバッファ内の既存のMVに近い場合、それらの近いMVが除去され得る。近いとは、MV成分値(例えば、x成分およびy成分)を比較することによって近いことを意味し得る。いくつかの例では、バッファ内の既存のMVとしきい値だけ異なるMVだけがバッファに追加され得る。同じしきい値が、異なるバッファに対して構成され得る。
[0099] バッファ内の動きベクトルは、単方向(L0またはL1)、双方向、または任意の他の動きモデルMVであり得る。
[0100] モード情報は、バッファ内のMVに関連付けられ得、バッファ内のMVのインデックスがブロック中でシグナリングされるか、またはバッファからMVを取得することに関して他の規則が適用される場合、モード情報は、そのMV情報に関連するデータから導出され得る。例えば、その情報がマージモードである場合、ブロックは、示されたMVを用いてマージモードでコーディングされる。
[0101] 本開示はさらに、従来の履歴ベースMVPが、通常の動き予測子だけを保持し、動き情報を修正することなく通常の動き予測のためだけに使用されることを認識する。本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、コーディングされた動き情報だけでなく、アフィン動きモデル、イントラブロックコピーモードの動き情報、局所照明補償の動き情報、サブブロックMVP、または時間的動き予測子のような、他のタイプの動き予測子も保持する少なくとも1つの履歴MVPバッファを使用し得る。
[0102] 追加的にまたは代替的に、ビデオエンコーダ200およびビデオデコーダ300は、アフィン動きモデル、イントラブロックコピーモードの動き情報、局所照明補償の動き情報、サブブロックMVP、または時間的動き予測子のような、異なる動きモデルのために複数の履歴MVPバッファを使用し得る。
[0103] 追加的にまたは代替的に、現在MVPと、他の空間MVPまたは時間MVPのような他の動き予測子とに基づく合成動きベクトルも候補リストに追加され得る。
[0104] 追加的にまたは代替的に、ビデオエンコーダ200およびビデオデコーダ300は、履歴MVPバッファ内の2つ以上のMVP、または空間MVPもしくは時間MVPのような他のタイプのMVPを有する履歴MVPバッファ内の1つまたは複数のMVPから合成MVPを生成し得る。
[0105] ビデオエンコーダ200およびビデオデコーダ300は、ブロック区分方式を実施し得る。HEVCでは、ピクチャが、コーディングツリー単位(CTU)のシーケンスに分割される。3つのサンプルアレイを有するピクチャの場合、CTUは、クロマサンプルの2つの対応するブロックとともにルーマサンプルのN×Nブロックを含む。CTUは、ツリー構造を使用することによってコーディング単位(CU)に分割される。各リーフCUは、PU分割タイプに従って、1つ、2つ、または4つの予測単位(PU)にさらに分割され得る。PU分割タイプに基づいて予測プロセスを適用することによって残差ブロックを取得した後、リーフCUは、変換単位(TU)に区分され得る。
[0106] VVCでは、二分割および三分割セグメンテーション構造を使用するネストされたマルチタイプツリーを有する四分木が、複数の区分単位タイプの概念に取って代わり、すなわち、ネストされたマルチタイプツリー区分は、最大変換長に対して大きすぎるサイズを有するCUを必要に応じて除いて、CU、PU、およびTU概念の区別を除去し、CU区分形状に対してさらなる柔軟性をサポートする。コーディングツリー構造では、CUが、正方形または長方形のいずれかの形状を有し得る。
[0107] ビデオエンコーダ200およびビデオデコーダ300は、ビデオデータのブロックを予測するために動き情報を利用し得る。各ブロックについて、動き情報のセットが利用可能であり得る。動き情報のセットは、前方予測方向および後方予測方向の動き情報を含む。ここで、前方予測方向および後方予測方向は、現在ピクチャまたはスライスの参照ピクチャリスト0(RefPicList0)および参照ピクチャリスト1(RefPicList1)に対応する2つの予測方向である。「前方」および「後方」という用語は、必ずしも幾何学的意味を有するとは限らない。むしろ、それらは、動きベクトルがどの参照ピクチャリストに基づくかを区別するために使用される。前方予測は、参照リスト0に基づいて形成された予測を意味し、後方予測は、参照リスト1に基づいて形成された予測を意味する。参照リスト0および参照リスト1の両方が所与のブロックのための予測を形成するために使用される場合、それは双方向予測と呼ばれる。
[0108] 所与のピクチャまたはスライスについて、1つの参照ピクチャリストだけが使用される場合、ピクチャまたはスライス内の全てのブロックが前方予測される。両方の参照ピクチャリストが所与のピクチャまたはスライスに使用される場合、ピクチャまたはスライス内のブロックは、前方予測、または後方予測、または双方向予測され得る。
[0109] 各予測方向について、動き情報は、参照インデックスおよび動きベクトルを含む。参照インデックスは、対応する参照ピクチャリスト(例えば、RefPicList0またはRefPicList1)内の参照ピクチャを識別するために使用される。動きベクトルは、各々がそれぞれ水平方向および垂直方向に沿ったオフセット値を示す水平成分および垂直成分の両方を有する。いくつかの説明では、簡単さのために、「動きベクトル」という単語が、動きベクトルとその関連する参照インデックスの両方を示すために、動き情報と同義で使用され得る。
[0110] ピクチャ順序カウント(POC:Picture order count)は、ピクチャの表示順序を識別するためにビデオコーディング規格において広く使用される。1つのコーディングされたビデオシーケンス内の2つのピクチャが同じPOC値を有し得る場合があるが、それは典型的には、コーディングされたビデオシーケンス内では起こらない。複数のコーディングされたビデオシーケンスがビットストリーム中に存在するとき、同じ値のPOCをもつピクチャは、復号順序の観点から互いにより近くなり得る。
[0111] HEVCでは、それぞれPUについて、マージモード(スキップはマージモードの特例とみなされる)と高度動きベクトル予測(AMVP:advanced motion vector prediction)モードという名前の2つのインター予測モードが存在する。
[0112] AMVPモードまたはマージモードのいずれかにおいて、動きベクトル(MV:motion vector)候補リストが複数の動きベクトル予測子のために維持される。現在PUの(1つまたは複数の)動きベクトル、並びにマージモードにおける参照インデックスは、MV候補リストから1つの候補を選び取ることによって生成される。
[0113] MV候補リストは、マージモードのための最大5つの候補と、AMVPモードのためのたった2つの候補とを含む。マージ候補は、動き情報のセット、例えば、参照ピクチャリスト(リスト0およびリスト1)および参照インデックスの両方に対応する動きベクトルを含み得る。マージ候補がマージインデックスによって識別される場合、参照ピクチャが現在ブロックの予測に使用され、関連する動きベクトルが決定される。しかしながら、リスト0またはリスト1のいずれかからの各潜在的予測方向についてのAMVPモードの下では、AMVP候補が動きベクトルだけを含むため、参照インデックスが、MVPインデックスとともに、MV候補リストに明示的にシグナリングされる。AMVPモードでは、予測された動きベクトルがさらに精練され(refined)得る。
[0114] 上からわかるように、マージ候補は、動き情報のフルセットに対応し、AMVP候補は、参照インデックスおよび特定の予測方向のためのただ1つの動きベクトルを含む。両方のモードのための候補は、同じ空間および時間隣接ブロックから同様に導出され得る。
[0115] 図10Aおよび10Bは、マージモードおよび高度動きベクトル予測(AMVP)モードのための例となる空間隣接動きベクトル候補を例示するブロック図である。図10Aは、マージモードのための空間隣接MV候補の例を示し、図10Bは、AMVPモードのための空間隣接MV候補の例を示す。空間MV候補は、図10Aおよび図10Bに示されるように、隣接ブロックから導出される。特定のPU(PU0)について、ブロックから候補を生成するための方法は、マージモードとAMVPモードとで異なる。
[0116] マージモードでは、最大4つのMV候補が、図10Aに示される順序で導出され得る。具体的には、この順序は、図10Aに示されるように以下の通りである:左(0)、上(1)、右上(2)、左下(3)、および左上(4)。
[0117] AVMPモードにおい、隣接ブロックは、2つのグループに分割される。第1のグループは、ブロック0および1を含む左グループである。第2のグループは、図10Bに示されるように、ブロック2、3、および4を含む上グループである。各グループについて、シグナリングされた参照インデックスによって示されるものと同じ参照ピクチャを参照する隣接ブロック中の潜在的な候補は、グループの最終候補を形成するために選択されるべき優先度が最も高い。全ての隣接ブロックが、同じ参照ピクチャを指す動きベクトルを含まないことが可能である。従って、そのような候補を見つけることができない場合、第1の利用可能な候補が、最終候補を形成するためにスケーリングされるため、時間的距離差が補償され得る。
[0118] 図11Aおよび図11Bは、時間動きベクトル予測(TMPV)候補を例示する概念図である。図11Aは、TMVP候補の例を示す。TMVP候補は、可能かつ利用可能である場合、空間動きベクトル候補の後にMV候補リストに追加される。TMVP候補のための動きベクトル導出のプロセスは、マージモードとAMVPモードの両方について同じであるが、マージモードにおけるTMVP候補のためのターゲット参照インデックスは常に0に設定される。
[0119] TMVP候補導出のためのプライマリブロックロケーションは、空間隣接候補を生成するために使用される上および左のブロックへのバイアスを補償するために、ブロック「T」として図11Aに示されるように、コロケートされたPUの外側の右下のブロックである。しかしながら、そのブロックが現在CTB行の外側に位置するか、または動き情報が利用可能でない場合、そのブロックはPUの中央ブロックと置き換えられる。
[0120] TMVP候補のための動きベクトルは、スライスレベルにおいて示される、コロケートされたピクチャのコロケートされたPUから導出される。コロケートされたPUのための動きベクトルは、コロケートされたMVと呼ばれる。
[0121] 図11Bは、MVスケーリングの例を示す。TMVP候補動きベクトルを導出するためには、図11Bに示されるように、コロケートされたMVが、時間的距離差を補償するようにスケーリングされる必要があり得る。
[0122] マージモードおよびAMVPモードのいくつかの他の態様は、以下の通り、特筆するに値する。例えば、ビデオエンコーダ200およびビデオデコーダ300は、動きベクトルスケーリングを実行し得る。動きベクトルの値が、プレゼンテーション時間におけるピクチャの距離に比例すると仮定する。動きベクトルは、2つのピクチャ、参照ピクチャ、および動きベクトルを含むピクチャ(すなわち、包含ピクチャ)を関連付ける。ある動きベクトルがその他の動きベクトルを予測するために利用されるとき、包含ピクチャと参照ピクチャとの距離が、ピクチャ順序カウント(POC)値に基づいて算出される。
[0123] 動きベクトルが予測されるためには、その関連する包含ピクチャと参照ピクチャの両方が異なり得る。従って、(POCに基づく)新しい距離が算出される。そして、動きベクトルは、これら2つのPOC距離に基づいてスケーリングされる。空間隣接候補の場合、2つの動きベクトルのための包含ピクチャは同じであるが、参照ピクチャは異なる。HEVCでは、動きベクトルスケーリングが、空間および時間隣接候補のためのTMVPとAMVPの両方に適用される。
[0124] 別の例として、ビデオエンコーダ200およびビデオデコーダ300は、人工的動きベクトル候補の生成を実行し得る。動きベクトル候補リストが完全でない場合、人工的動きベクトル候補が生成され、リストが全ての候補を有することとなるまでリストの最後に挿入される。
[0125] マージモードでは、2つのタイプの人工的MV候補、すなわち、Bスライスだけのために導出された組み合わされた候補と、第1のタイプが十分な人工的候補を提供しない場合にAMVPだけに使用されるゼロ個の候補とが存在する。すでに候補リスト内にあり、必要な動き情報を有する候補の各対について、双方向の組み合わされた動きベクトル候補が、リスト0内のピクチャを指す第1の候補の動きベクトルと、リスト1内のピクチャを指す第2の候補の動きベクトルとの組合せによって導出される。
[0126] 別の例として、ビデオエンコーダ200およびビデオデコーダ300は、候補挿入のためにプルーニングプロセスを実行し得る。異なるブロックからの候補が偶然同じになることがあり得、これはマージ/AMVP候補リストの効率を低下させる。この問題を解決するためにプルーニングプロセスが適用される。それは、ある程度同一の候補を挿入することを回避するために、現在の候補リストにおいて1つの候補をその他の候補と比較する。複雑さを低減するために、各潜在的なものを他の全ての既存のものと比較する代わりに、限られた数のプルーニングプロセスだけが適用される。適用可能な場合、以下の比較だけが適用される:上のマージ候補が左のマージ候補と比較され、右上のマージ候補が上のマージ候補と比較され、左下のマージ候補が左のマージ候補と比較され、左上のマージ候補が左のマージ候補および上のマージ候補と比較される。
[0127] ビデオエンコーダ200およびビデオデコーダ300はまた、他の動き予測方法を使用し得る。VVC(Versatile Video Coding)の開発において、履歴ベース動きベクトル予測子(HMVP)方法が、L.Zhang等による、「CE4-related: History-based Motion Vector Prediction」、Joint Video Experts Team文書:JVET−K0104(以下「K0104」)で提案されている。HMVP方法は、各ブロックが、直接隣接する因果的な隣接動きフィールドに加えて、過去から復号されたMVのリストからそのMV予測子を見つけることを可能にする。符号化/復号プロセス中、複数のHMVP候補を有するテーブルが維持される。新しいスライスに遭遇すると、テーブルは空にされる。インターコーディングされたブロックがあるときはいつでも、関連する動き情報が、HMVP候補として先入れ先出し(FIFO)方式でテーブルに挿入される。次いで、制約であるFIFO規則が適用され得る。HMVPをテーブルに挿入するとき、テーブル内に同一のHMVPがあるかどうかを見つけるために、冗長検査が最初に適用され得る。見つかった場合、その特定のHMVPがテーブルから除去され得、その後、全てのHMVP候補が移動される。
[0128] HMVP候補は、マージ候補リスト構築プロセスにおいて使用され得る。例えば、テーブル内の最後のエントリから最初のエントリまでの全てのHMVP候補が、TMVP候補の後に挿入され得る。プルーニングがHMVP候補に適用され得る。利用可能なマージ候補の総数が、シグナリングされた最大許容マージ候補に達すると、マージ候補リスト構築プロセスは終了する。
[0129] 同様に、HMVP候補はまた、AMVP候補リスト構築プロセスにおいて使用され得る。テーブル内の最後のK個のHMVP候補の動きベクトルは、TMVP候補の後に挿入され得る。いくつかの例では、AMVPターゲット参照ピクチャと同じ参照ピクチャをもつHMVP候補だけが、AMVP候補リストを構築するために使用される。プルーニングは、HMVP候補に適用され得る。
[0130] HEVCにおいて、現在CTUのコーディングは、左、左上、上、および右上のCTUだけに依存し得る。ゆえに、波面並列処理(WPP)は、HEVCにおいてサポートされ得る。しかしながら、K0104におけるHMVP方法は、現在ブロックとスライス内の全ての前にコーディングされたCTUとの間の依存状態をもたらし得る。従って、HMVP方法が使用される場合、WPPは適用されないであろう。本開示は、CTU初期化付きのHMVPを使用するための技法を説明し、ここでは、依存状態がHEVCの場合と同じ状態のままである。本開示はまた、CTU行初期化(リセット)付きのHMVPのための技法を説明する。
[0131] 本開示の技法に従って、ビデオエンコーダ200およびビデオデコーダ300は、CTU初期化付きのHMVPを実行し得る。HMVPテーブルは、各CTUの開始時に初期化される。初期化は、現在CTUの直接隣接するコーディングされたブロックからのMVをHMVPテーブルに追加し得る。直接隣接するコーディングされたブロックは、HEVCにあるように、現在CTUの左、上、左上、または右上にあり得る。時間動きベクトル予測が可能な場合、直接隣接するコーディングされたブロックはまた、参照ピクチャ中のコロケートされたブロックであり得る。
[0132] 図12は、コーディングツリー単位(CTU)および隣接ブロックの例を例示するブロック図である。一例では、現在CTUブロックのための空間および時間マージ候補だけが、HMVPテーブルを初期化するために使用される。HEVCの空間および時間マージ候補を使用する例を図12に示す。挿入順序は以下の通りである:左(0)、上(1)、右上(2)、および左上(4)。時間マージ候補のロケーションは、「T」によって示される。右下の時間マージ候補および左下(3)の候補は、それらのロケーションが現在CTUラインより下であるため、利用不可能であることに留意されたい。
[0133] 別の例において、現在CTUブロックのためのマージ候補導出プロセスは、HMVPテーブルを初期化するために使用される。空間および時間マージ候補に加えて、他のマージ候補(例えば、人工的動きベクトル候補)も初期化に使用され得る。
[0134] 図13は、現在CTU内の現在CUを例示するブロック図である。いくつかの例において、HMVPテーブルは、現在CTUのコーディングの開始時に空として初期化される。しかしながら、図13に示されているように、第1のCUがコーディングされた後、第1のCUの空間および時間マージ候補がHMVPテーブルに追加される。次いで、CUがインター予測コーディングされる場合、第1のCUのMVも追加される。第1のCUが現在CTUに等しくない場合、順に2つの時間マージ候補「T0」および「T1」が追加され得ることに留意されたい。図13は、CTU内の第1のCUのマージ候補の例を示す。
[0135] 別の例において、HMVPテーブルは、現在CTUのコーディングの開始時に空として初期化される。しかしながら、第1のCUがコーディングされた後、第1のCUの全てのマージ候補がHMVPテーブルに追加される。そして、第1のCUのMVも、それがインター予測コーディングされる場合、追加される。
[0136] ビデオエンコーダ200およびビデオデコーダ300はまた、CTU行初期化付きのHMVPを実行し得る。別の例において、上で説明したHMVPのためのCTU初期化は、CTU行中の第1のCTUにおいてのみ適用される。K0104におけるHMVPと同様に、プルーニングプロセスが、いくつかまたは全ての重複を除去するために、初期化されたテーブルに適用され得る。プルーニングプロセスはまた、複雑さを低減するために初期化されたテーブルに適用されないであろう。
[0137] 図14は、本開示の技法を実行し得る例となるビデオエンコーダ200を例示するブロック図である。図14は、説明のために提供されており、本開示で広範に実証および説明される技法を限定するものとみなされるべきではない。説明のために、本開示は、開発中のH.266ビデオコーディング規格およびHEVCビデオコーディング規格のようなビデオコーディング規格のコンテキストにおいて、ビデオエンコーダ200を説明する。しかしながら、本開示の技法は、これらのビデオコーディング規格に限定されるものではなく、一般に、ビデオ符号化および復号に適用可能である。
[0138] 図14の例において、ビデオエンコーダ200は、ビデオデータメモリ230と、モード選択ユニット202と、残差生成ユニット204と、変換処理ユニット206と、量子化ユニット208と、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、フィルタユニット216と、復号ピクチャバッファ(DPB:decoded picture buffer)218と、エントロピー符号化ユニット220とを含む。ビデオデータメモリ230、モード選択ユニット202、残差生成ユニット204、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、逆変換処理ユニット212、再構築ユニット214、フィルタユニット216、DPB218、およびエントロピー符号化ユニット220のうちのいずれかまたは全ては、1つまたは複数のプロセッサにおいてまたは処理回路において実施され得る。さらに、ビデオエンコーダ200は、これらおよび他の機能を実行するための追加または代替のプロセッサまたは処理回路を含み得る。
[0139] ビデオデータメモリ230は、ビデオエンコーダ200の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオエンコーダ200は、例えば、ビデオソース104(図1)から、ビデオデータメモリ230に記憶されたビデオデータを受信し得る。DPB218は、ビデオエンコーダ200による後続のビデオデータの予測において使用するための参照ビデオデータを記憶する参照ピクチャメモリとして機能し得る。ビデオデータメモリ230およびDPB218は、同期動的ランダムアクセスメモリ(SDRAM)を含むDRAM、磁気RAM(MRAM)、抵抗性RAM(RRAM(登録商標))のような様々なメモリデバイスまたは他のタイプのメモリデバイスのうちの任意のものによって形成され得る。ビデオデータメモリ230およびDPB218は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例において、ビデオデータメモリ230は、例示されるように、ビデオエンコーダ200の他の構成要素とともにオンチップであり得るか、これらの構成要素に対してオフチップであり得る。
[0140] 本開示において、ビデオデータメモリ230への参照は、そうであることが具体的に説明されない限り、ビデオエンコーダ200の内部のメモリに限定されると解釈されるべきでも、そうであることが具体的に説明されない限り、ビデオエンコーダ200の外部のメモリに限定されると解釈されるべきででもない。むしろ、ビデオデータメモリ230への参照は、ビデオエンコーダ200が符号化のために受信するビデオデータ(例えば、符号化されるべきである現在ブロックのためのビデオデータ)を記憶する参照メモリとして理解されるべきである。図1のメモリ106はまた、ビデオエンコーダ200の様々なユニットからの出力の一時的な記憶を提供し得る。
[0141] 図14の様々なユニットは、ビデオエンコーダ200によって実行される動作の理解を助けるために例示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実施され得る。固定機能回路は、特定の機能性を提供する回路を指し、実行され得る動作にプリセットされている。プログラマブル回路は、様々なタスクを実行し、実行され得る動作において柔軟な機能性を提供するようにプログラムされ得る回路を指す。例えば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方法でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は、(例えば、パラメータを受信するためまたはパラメータを出力するために)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは一般に不変である。いくつかの例において、ユニットのうちの1つまたは複数は、別個の回路ブロック(固定機能またはプログラマブル)であり得、いくつかの例において、1つまたは複数のユニットは、集積回路であり得る。
[0142] ビデオエンコーダ200は、算術論理ユニット(ALU)、基本機能ユニット(EFU)、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含み得る。ビデオエンコーダ200の動作がプログラマブル回路によって実行されるソフトウェアを使用して実行される例では、メモリ106(図1)が、ビデオエンコーダ200が受信して実行するソフトウェアのオブジェクトコードを記憶し得るか、またはビデオエンコーダ200内の別のメモリ(図示せず)がそのような命令を記憶し得る。
[0143] ビデオデータメモリ230は、受信されたビデオデータを記憶するように構成される。ビデオエンコーダ200は、ビデオデータメモリ230からビデオデータのピクチャを取り出し、ビデオデータを残差生成ユニット204およびモード選択ユニット202に提供し得る。ビデオデータメモリ230中のビデオデータは、符号化されるべき生のビデオデータであり得る。
[0144] モード選択ユニット202は、動き推定ユニット222と、動き補償ユニット224と、イントラ予測ユニット226とを含む。モード選択ユニット202は、他の予測モードに従ってビデオ予測を実行するための追加の機能ユニットを含み得る。例として、モード選択ユニット202は、パレットユニット、(動き推定ユニット222および/または動き補償ユニット224の一部であり得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM:linear model)ユニット、または同様のものを含み得る。
[0145] モード選択ユニット202は、一般に、符号化パラメータの組合せと、そのような組合せのための結果として生じるレート歪み値をテストするために複数の符号化パスを調整する。符号化パラメータは、CTUのCUへの区分、CUのための予測モード、CUの残差データのための変換タイプ、CUの残差データのための量子化パラメータ、等を含み得る。モード選択ユニット202は、最終的に、テストされた他のどの組合せより良好なレート歪み値を有する符号化パラメータの組合せを選択し得る。
[0146] ビデオエンコーダ200は、ビデオデータメモリ230から取り出されたピクチャを一連のCTUに区分し、スライス内に1つまたは複数のCTUをカプセル化し得る。モード選択ユニット202は、上で説明したHEVCのQTBT構造または四分木構造のようなツリー構造に従ってピクチャのCTUを区分し得る。上で説明したように、ビデオエンコーダ200は、ツリー構造に従ってCTUの区分から1つまたは複数のCUを形成し得る。そのようなCUは、一般に、「ビデオブロック」または「ブロック」とも呼ばれ得る。
[0147] 概して、モード選択ユニット202はまた、現在ブロック(例えば、現在CU、またはHEVCにおいて、PUとTUとの重複部分)のための予測ブロックを生成するために、その構成要素(例えば、動き推定ユニット222、動き補償ユニット224、およびイントラ予測ユニット226)を制御する。現在ブロックのインター予測のために、動き推定ユニット222は、1つまたは複数の参照ピクチャ(例えば、DPB218に記憶された1つまたは複数の前にコーディングされたピクチャ)中の1つまたは複数の厳密に一致する参照ブロックを識別するために動き探索を実行し得る。特に、動き推定ユニット222は、例えば、差分絶対値和(SAD)、差分二乗和(SSD)、平均絶対値差分(MAD)、平均二乗差分(MSD)、または同様のものに従って、潜在的な参照ブロックが現在ブロックにどれだけ類似しているかを表す値を算出し得る。動き推定ユニット222は、一般に、現在ブロックと考慮されている参照ブロックとの間のサンプルごとの差分を使用してこれらの算出を実行し得る。動き推定ユニット222は、現在ブロックに最も厳密に一致する参照ブロックを示す、これらの算出から生じる最低値を有する参照ブロックを識別し得る。
[0148] 動き推定ユニット222は、現在ピクチャ中の現在ブロックの位置に対する参照ピクチャ中の参照ブロックの位置を定義する1つまたは複数の動きベクトル(MV)を形成し得る。次いで、動き推定ユニット222は、動きベクトルを動き補償ユニット224に提供し得る。例えば、単方向インター予測の場合、動き推定ユニット222は、単一の動きベクトルを提供し得るが、双方向インター予測の場合、動き推定ユニット222は、2つの動きベクトルを提供し得る。次いで、動き補償ユニット224は、動きベクトルを使用して予測ブロックを生成し得る。例えば、動き補償ユニット224は、動きベクトルを使用して参照ブロックのデータを取り出し得る。別の例として、動きベクトルが分数サンプル精度を有する場合、動き補償ユニット224は、1つまたは複数の補間フィルタに従って予測ブロックの値を補間し得る。さらに、双方向インター予測の場合、動き補償ユニット224は、それぞれの動きベクトルによって識別された2つの参照ブロックのためのデータを取り出し、例えば、サンプルごとの平均化または重み付け平均化を通して、取り出されたデータを組み合わせることができる。
[0149] 本開示の技法によれば、復号ピクチャバッファ218は、CTUのラインのための1つまたは複数の履歴MVPバッファを含み得る。すなわち、各CTUラインがそれ自体のMVPバッファを割り振られ得るか、または単一のMVPバッファが複数のCTUラインに使用され得る。いずれの場合も、ビデオエンコーダ200は、CTUラインのビデオデータの復号開始時に、CTUラインのためのMVPバッファをリセットし得る。動き補償ユニット224またはビデオエンコーダ200の別のユニットは、一意の動きベクトルだけをMVPバッファに記憶するように構成され得る。上述したように、動き補償ユニット224またはビデオエンコーダ200の別のユニットは、MVPバッファに記憶された動き情報を管理するためにFIFO規則を使用するように構成され得、その結果、動きベクトルをMVPバッファに追加するとき、MVPバッファが満杯である場合、動き補償ユニット224は、最も早く追加された動きベクトルをMVPバッファから除去し得る。いくつかの例において、ビデオエンコーダ200は、例えば、アフィン動きモデル、イントラブロックコピーモードの動き情報、局所照明補償の動き情報、サブブロックMVP、および時間的動き予測のような、様々な動きモデルの各々について異なるそれぞれのMVPバッファを維持し得る。
[0150] 別の例として、イントラ予測、またはイントラ予測コーディングの場合、イントラ予測ユニット226は、現在ブロックに隣接するサンプルから予測ブロックを生成し得る。例えば、方向性モードの場合、イントラ予測ユニット226は、一般に、隣接するサンプルの値を数学的に組み合わせ、予測ブロックを作り出すために、現在ブロックにわたって定義された方向にこれらの算出された値をポピュレートさせ得る。別の例として、DCモードの場合、イントラ予測ユニット226は、現在ブロックに隣接するサンプルの平均を算出し、予測ブロックの各サンプルについての結果として生じる平均を含むように予測ブロックを生成し得る。
[0151] モード選択ユニット202は、予測ブロックを残差生成ユニット204に提供する。残差生成ユニット204は、ビデオデータメモリ230から現在ブロックの生のコーディングされていないバージョンを受信し、モード選択ユニット202から予測ブロックを受信する。残差生成ユニット204は、現在ブロックと予測ブロックとの間のサンプルごとの差分を算出する。結果として生じるサンプルごとの差分は、現在ブロックについての残差ブロックを定義する。いくつかの例において、残差生成ユニット204はまた、残差差分パルスコード変調(RDPCM:residual differential pulse code modulation)を使用して残差ブロックを生成するために、残差ブロック中のサンプル値間の差分を決定し得る。いくつかの例において、残差生成ユニット204は、バイナリ減算を実行する1つまたは複数の減算器回路を使用して形成され得る。
[0152] モード選択ユニット202がCUをPUに区分する例では、各PUが、ルーマ予測単位および対応するクロマ予測単位に関連付けられ得る。ビデオエンコーダ200およびビデオデコーダ300は、様々なサイズを有するPUをサポートし得る。上で示したように、CUのサイズは、CUのルーマコーディングブロックのサイズを指し得、PUのサイズは、PUのルーマ予測単位のサイズを指し得る。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ200は、イントラ予測の場合には、2N×2NまたはN×NというPUサイズを、インター予測の場合には、2N×2N、2N×N、N×2N、N×N、等という対称PUサイズをサポートし得る。ビデオエンコーダ200およびビデオデコーダ300はまた、インター予測の場合に、2N×nU、2N×nD、nL×2N、およびnR×2NというPUサイズについての非対称区分をサポートし得る。
[0153] モード選択ユニットがこれ以上CUをPUに区分しない例において、各CUは、ルーマコーディングブロックおよび対応するクロマコーディングブロックに関連付けられ得る。以上のように、CUのサイズは、CUのルーマコーディングブロックのサイズを指し得る。ビデオエンコーダ200およびビデオデコーダ120は、2N×2N、2N×N、またはN×2NのCUサイズをサポートし得る。
[0154] いくつかの例として、イントラブロックコピーモードコーディング、アフィンモードコーディング、および線形モデル(LM)モードコーディングのような他のビデオコーディング技法の場合、モード選択ユニット202は、コーディング技法に関連するそれぞれのユニットを介して、符号化されている現在ブロックのための予測ブロックを生成する。パレットモードコーディングのようないくつかの例において、モード選択ユニット202は、予測ブロックを生成せず、代わりに、選択されたパレットに基づいてブロックを再構築する方法を示すシンタックス要素を生成し得る。そのようなモードにおいて、モード選択ユニット202は、符号化されるために、これらのシンタックス要素をエントロピー符号化ユニット220に提供し得る。
[0155] 上で説明したように、残差生成ユニット204は、現在ブロックおよび対応する予測ブロックのためのビデオデータを受信する。次いで、残差生成ユニット204は、現在ブロックのための残差ブロックを生成する。残差ブロックを生成するために、残差生成ユニット204は、予測ブロックと現在ブロックとの間のサンプルごとの差分を算出する。
[0156] 変換処理ユニット206は、変換係数のブロック(本明細書において「変換係数ブロック」と呼ばれる)を生成するために、残差ブロックに1つまたは複数の変換を適用する。変換処理ユニット206は、変換係数ブロックを形成するために、残差ブロックに様々な変換を適用し得る。例えば、変換処理ユニット206は、離散コサイン変換(DCT)、方向性変換、カルーネンレーベ変換(KLT)、または概念的に類似した変換を残差ブロックに適用し得る。いくつかの例において、変換処理ユニット206は、残差ブロックへの複数の変換、例えば、一次変換と、回転変換のような二次変換とを実行し得る。いくつかの例において、変換処理ユニット206は、残差ブロックに変換を適用しない。
[0157] 量子化ユニット208は、量子化された変換係数ブロックを作り出すために、変換係数ブロック中の変換係数を量子化し得る。量子化ユニット208は、現在ブロックに関連する量子化パラメータ(QP:quantization parameter)値に従って変換係数ブロックの変換係数を量子化し得る。ビデオエンコーダ200は(例えば、モード選択ユニット202を介して)、CUに関連するQP値を調整することによって、現在ブロックに関連する変換係数ブロックに適用される量子化の度合いを調整し得る。量子化は、情報の損失をもたらし得るため、量子化された変換係数は、変換処理ユニット206によって作り出された元の変換係数より低い精度を有し得る。
[0158] 逆量子化ユニット210および逆変換処理ユニット212は、変換係数ブロックから残差ブロックを再構築するために、それぞれ量子化された変換係数ブロックに逆量子化および逆変換を適用し得る。再構築ユニット214は、再構築された残差ブロックと、モード選択ユニット202によって生成された予測ブロックとに基づいて、(ある程度の歪みを伴う可能性があるが)現在ブロックに対応する再構築されたブロックを作り出し得る。例えば、再構築ユニット214は、再構築されたブロックを作り出すために、再構築された残差ブロックのサンプルを、モード選択ユニット202によって生成された予測ブロックからの対応するサンプルに加算し得る。
[0159] フィルタユニット216は、再構築されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。例えば、フィルタユニット216は、CUのエッジに沿ったブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。いくつかの例では、フィルタユニット216の動作がスキップされ得る。
[0160] ビデオエンコーダ200は、再構築されたブロックをDPB218に記憶する。例えば、フィルタユニット216の動作が必要とされない例では、再構築ユニット214が、再構築されたブロックをDPB218に記憶し得る。フィルタユニット216の動作が必要とされる例では、フィルタユニット216が、フィルタ処理された再構築されたブロックをDPB218に記憶し得る。動き推定ユニット222および動き補償ユニット224は、後に符号化されるピクチャのブロックをインター予測するために、再構築された(および潜在的にフィルタ処理された)ブロックから形成された参照ピクチャをDPB218から取り出し得る。加えて、イントラ予測ユニット226は、現在ピクチャ中の他のブロックをイントラ予測するために、現在ピクチャのDPB218中の再構築されたブロックを使用し得る。
[0161] 概して、エントロピー符号化ユニット220は、ビデオエンコーダ200の他の機能構成要素から受信されたシンタックス要素をエントロピー符号化し得る。例えば、エントロピー符号化ユニット220は、量子化ユニット208からの量子化された変換係数ブロックをエントロピー符号化し得る。別の例として、エントロピー符号化ユニット220は、モード選択ユニット202からの予測シンタックス要素(例えば、インター予測の動き情報またはイントラ予測のためのイントラモード情報)をエントロピー符号化し得る。エントロピー符号化ユニット220は、エントロピー符号化されたデータを生成するために、ビデオデータの別の例であるシンタックス要素に対して、1つまたは複数のエントロピー符号化動作を実行し得る。例えば、エントロピー符号化ユニット220は、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)動作、CABAC動作、V2V(variable-to-variable)長コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率区間区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作をデータに対して実行し得る。いくつかの例において、エントロピー符号化ユニット220は、シンタックス要素がエントロピー符号化されないバイパスモードで動作し得る。
[0162] ビデオエンコーダ200は、スライスまたはピクチャのブロックを再構築するために必要とされるエントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。特に、エントロピー符号化ユニット220は、ビットストリームを出力し得る。
[0163] 上で説明した動作は、ブロックに関して説明される。そのような説明は、ルーマコーディングブロックおよび/またはクロマコーディングブロックのための動作であると理解されるべきである。上で説明したように、いくつかの例において、ルーマコーディングブロックおよびクロマコーディングブロックは、CUのルーマ成分およびクロマ成分である。いくつかの例において、ルーマコーディングブロックおよびクロマコーディングブロックは、PUのルーマ成分およびクロマ成分である。
[0164] いくつかの例では、ルーマコーディングブロックに関して実行された動作が、クロマコーディングブロックについて繰り返される必要はない。一例として、ルーマコーディングブロックの動きベクトル(MV)および参照ピクチャを識別するための動作が、クロマブロックのMVおよび参照ピクチャを識別するために繰り返される必要はない。むしろ、ルーマコーディングブロックのMVは、クロマブロックのMVを決定するためにスケーリングされ得、参照ピクチャは同じであり得る。別の例として、イントラ予測プロセスは、ルーマコーディングブロックおよびクロマコーディングブロックについて同じであり得る。
[0165] ビデオエンコーダ200は、ビデオデータを記憶するように構成されたメモリと、回路で実施され、第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、第2のCTUラインの動き情報をメモリの第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を行うように構成された1つまたは複数の処理ユニットとを含む、ビデオデータを符号化するように構成されたデバイスの例を表す。
[0166] ビデオエンコーダ200はまた、ビデオデータを記憶するように構成されたメモリと、回路で実施され、コーディングされた動き情報を履歴動きベクトル予測子(MVP)バッファに記憶することと、異なるタイプの動き情報を履歴MVPバッファに記憶することと、履歴MVPバッファの動き情報を使用してビデオデータのブロックの動き情報をコーディングすることとを行うように構成された1つまたは複数の処理ユニットとを含む、ビデオデータを符号化するように構成されたデバイスの例を表す。
[0167] ビデオエンコーダ200はまた、ビデオデータを記憶するように構成されたメモリと、回路で実施され、複数の異なるタイプの動き情報をそれぞれの異なる履歴動きベクトル予測子(MVP)バッファに記憶するように構成された1つまたは複数の処理ユニットとを含む、ビデオデータを符号化するように構成されたデバイスの例を表す。
[0168] 図15は、本開示の技法を実行し得る例となるビデオデコーダ300を例示するブロック図である。図15は、説明のために提供されており、本開示で広範に実証および説明される技法を限定するものではない。説明のために、本開示は、JEMおよびHEVCの技法によるビデオデコーダ300を記載する。しかしながら、本開示の技法は、他のビデオコーディング規格に従って構成されたビデオコーディングデバイスによって実行され得る。
[0169] 図15の例において、ビデオデコーダ300は、符号化ピクチャバッファ(CPB:coded picture buffer)メモリ320と、エントロピー復号ユニット302と、予測処理ユニット304と、逆量子化ユニット306と、逆変換処理ユニット308と、再構築ユニット310と、フィルタユニット312と、復号ピクチャバッファ(DPB)314とを含む。CPBメモリ320、エントロピー復号ユニット302、予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構築ユニット310、フィルタユニット312、およびDPB314のうちのいずれかまたは全ては、1つまたは複数のプロセッサにおいてまたは処理回路において実施され得る。さらに、ビデオデコーダ300は、これらおよび他の機能を実行するための追加または代替のプロセッサまたは処理回路を含み得る。
[0170] 予測処理ユニット304は、動き補償ユニット316と、イントラ予測ユニット318とを含む。予測処理ユニット304は、他の予測モードに従って予測を実行するための加算ユニットを含み得る。例として、予測処理ユニット304は、パレットユニット、(動き補償ユニット316の一部を形成し得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニット、または同様のものを含み得る。他の例において、ビデオデコーダ300は、より多くの、より少ない、または異なる機能構成要素を含み得る。
[0171] CPBメモリ320は、ビデオデコーダ300の構成要素によって復号されることとなる符号化ビデオビットストリームのようなビデオデータを記憶し得る。CPBメモリ320に記憶されるビデオデータは、例えば、コンピュータ読取可能な媒体110(図1)から取得され得る。CPBメモリ320は、符号化ビデオビットストリームからの符号化ビデオデータ(例えば、シンタックス要素)を記憶するCPBを含み得る。また、CPBメモリ320は、ビデオデコーダ300の様々なユニットからの出力を表す一時データのような、コーディングされたピクチャのシンタックス要素以外のビデオデータを記憶し得る。DPB314は、一般に、ビデオデコーダ300が符号化ビデオビットストリームの後続のデータまたはピクチャを復号するときに参照ビデオデータとして出力および/または使用し得る復号ピクチャを記憶する。CPBメモリ320およびDPB314は、同期動的ランダムアクセスメモリ(SDRAM)を含むDRAM、磁気RAM(MRAM)、抵抗性RAM(RRAM)のような様々なメモリデバイスまたは他のタイプのメモリデバイスのうちの任意のものによって形成され得る。CPBメモリ320およびDPB314は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例において、CPBメモリ320は、ビデオデコーダ300の他の構成要素とともにオンチップであり得るか、これらの構成要素に対してオフチップであり得る。
[0172] 追加的にまたは代替的に、いくつかの例において、ビデオデコーダ300は、コード化されたビデオデータをメモリ120(図1)から取り出し得る。すなわち、メモリ120は、CPBメモリ320を用いて上述したようにデータを記憶し得る。同様に、メモリ120は、ビデオデコーダ300の機能性のうちの一部または全部が、ビデオデコーダ300の処理回路によって実行されるソフトウェアで実施されるとき、ビデオデコーダ300によって実行されるべき命令を記憶し得る。
[0173] 図15に示される様々なユニットは、ビデオデコーダ300によって実行される動作の理解を助けるために例示される。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実施され得る。図14と同様に、固定機能回路は、特定の機能性を提供する回路を指し、実行され得る動作にプリセットされている。プログラマブル回路は、様々なタスクを実行し、実行され得る動作において柔軟な機能性を提供するようにプログラムされ得る回路を指す。例えば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方法でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は、(例えば、パラメータを受信するためまたはパラメータを出力するために)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは一般に不変である。いくつかの例において、ユニットのうちの1つまたは複数は、別個の回路ブロック(固定機能またはプログラマブル)であり得、いくつかの例において、1つまたは複数のユニットは、集積回路であり得る。
[0174] ビデオデコーダ300は、ALU、EFU、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含み得る。ビデオデコーダ300の動作がプログラマブル回路上で実行するソフトウェアによって実行される例では、オンチップまたはオフチップメモリが、ビデオデコーダ300が受信して実行するソフトウェアの命令(例えば、オブジェクトコード)を記憶し得る。
[0175] エントロピー復号ユニット302は、CPBから符号化ビデオデータを受信し、シンタックス要素を再生するためにビデオデータをエントロピー復号し得る。予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構築ユニット310、およびフィルタユニット312は、ビットストリームから抽出されたシンタックス要素に基づいて、復号ビデオデータを生成し得る。
[0176] 概して、ビデオデコーダ300は、ブロック単位でピクチャを再構築する。ビデオデコーダ300は、各ブロックに対して個別に再構築動作を実行し得る(ここで、現在再構築されている、すなわち復号されているブロックは、「現在ブロック」と呼ばれ得る)。
[0177] エントロピー復号ユニット302は、量子化された変換係数ブロックの量子化された変換係数を定義するシンタックス要素、並びに量子化パラメータ(QP)および/または(1つまたは複数の)変換モードインジケーションのような変換情報をエントロピー復号し得る。逆量子化ユニット306は、量子化された変換係数ブロックに関連するQPを使用して、量子化の程度を決定し、同様に、逆量子化ユニット306が適用すべき逆量子化の程度を決定し得る。例えば、逆量子化ユニット306は、量子化された変換係数を逆量子化するためにビット単位の左シフト演算を実行し得る。それによって、逆量子化ユニット306は、変換係数を含む変換係数ブロックを形成し得る。
[0178] 逆量子化ユニット306が変換係数ブロックを形成した後、逆変換処理ユニット308は、現在ブロックに関連する残差ブロックを生成するために、この変換係数ブロックに1つまたは複数の逆変換を適用し得る。例えば、逆変換処理ユニット308は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向性変換、または別の逆変換を係数ブロックに適用し得る。
[0179] さらに、予測処理ユニット304は、エントロピー復号ユニット302によってエントロピー復号された予測情報シンタックス要素に従って予測ブロックを生成する。例えば、現在ブロックがインター予測されることを予測情報シンタックス要素が示す場合、動き補償ユニット316は、予測ブロックを生成し得る。この場合、予測情報シンタックス要素は、参照ブロックを取り出すべきDPB314中の参照ピクチャと、現在ピクチャ中の現在ブロックのロケーションに対する参照ピクチャ中の参照ブロックのロケーションを識別する動きベクトルとを示し得る。動き補償ユニット316は、一般に、動き補償ユニット224(図14)に関して説明した方法と実質的に同様の方法でインター予測プロセスを実行し得る。
[0180] 本開示の技法によれば、復号ピクチャバッファ314は、CTUのラインのための1つまたは複数の履歴MVPバッファを含み得る。すなわち、各CTUラインがそれ自体のMVPバッファを割り振られ得るか、または単一のMVPバッファが複数のCTUラインに使用され得る。いずれの場合も、ビデオデコーダ300は、CTUラインのビデオデータの符号化開始時に、CTUラインのためのMVPバッファをリセットし得る。動き補償ユニット316またはビデオデコーダ300の別のユニットは、一意の動きベクトルだけをMVPバッファに記憶するように構成され得る。上述したように、動き補償ユニット316またはビデオデコーダ300の別のユニットは、MVPバッファに記憶された動き情報を管理するためにFIFO規則を使用するように構成され得、その結果、動きベクトルをMVPバッファに追加するとき、MVPバッファが満杯である場合、動き補償ユニット316は、最も早く追加された動きベクトルをMVPバッファから除去し得る。いくつかの例において、ビデオデコーダ300は、例えば、アフィン動きモデル、イントラブロックコピーモードの動き情報、局所照明補償の動き情報、サブブロックMVP、および時間的動き予測のような、様々な動きモデルの各々について異なるそれぞれのMVPバッファを維持し得る。
[0181] 別の例として、現在ブロックがイントラ予測されることを予測情報シンタックス要素が示す場合、イントラ予測ユニット318は、予測情報シンタックス要素によって示されるイントラ予測モードに従って予測ブロックを生成し得る。この場合も、イントラ予測ユニット318は、一般に、イントラ予測ユニット226(図14)に関して説明した方法と実質的に同様の方法でイントラ予測プロセスを実行し得る。イントラ予測ユニット318は、DPB314から現在ブロックに隣接するサンプルのデータを取り出し得る。
[0182] 再構築ユニット310は、予測ブロックと残差ブロックとを使用して現在ブロックを再構築し得る。例えば、再構築ユニット310は、現在ブロックを再構築するために、残差ブロックのサンプルを予測ブロックの対応するサンプルに加算し得る。
[0183] フィルタユニット312は、再構築されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。例えば、フィルタユニット312は、再構築されたブロックのエッジに沿ってブロッキネスアーティファクトを低減させるためにデブロッキング動作を実行し得る。フィルタユニット312の動作は、必ずしも全ての例において実行されるとは限らない。
[0184] ビデオデコーダ300は、再構築されたブロックをDPB314に記憶し得る。例えば、フィルタユニット312の動作が必要とされない例では、再構築ユニット310が、再構築されたブロックをDPB314に記憶し得る。フィルタユニット312の動作が必要とされる例では、フィルタユニット312が、フィルタ処理された再構築されたブロックをDPB314に記憶し得る。上述したように、DPB314は、イントラ予測のためには現在ピクチャのおよび後続の動き補償のためには前に復号されたピクチャとのサンプル、といった参照情報を予測処理ユニット304に提供し得る。さらに、ビデオデコーダ300は、図1のディスプレイデバイス118のようなディスプレイデバイス上での後続の提示のために、DPB314から復号ピクチャを出力し得る。
[0185] ビデオデコーダ300は、ビデオデータを記憶するように構成されたメモリと、回路で実施され、(ビデオコーディングプロセスの第1のスレッドによって処理され得る)第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、(ビデオコーディングプロセスの第2のスレッドによって処理され得る)第2のCTUラインの動き情報をメモリの第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を行うように構成された1つまたは複数の処理ユニットとを含む、ビデオデータを復号するように構成されたデバイスの例を表す。第2のスレッドは、第1のスレッドと異なり得る。
[0186] ビデオデコーダ300はまた、ビデオデータを記憶するように構成されたメモリと、回路で実施され、コーディングされた動き情報を履歴動きベクトル予測子(MVP)バッファに記憶することと、異なるタイプの動き情報を履歴MVPバッファに記憶することと、履歴MVPバッファの動き情報を使用してビデオデータのブロックの動き情報をコーディングすることとを行うように構成された1つまたは複数の処理ユニットとを含む、ビデオデータを復号するように構成されたデバイスの例を表す。
[0187] ビデオデコーダ300はまた、ビデオデータを記憶するように構成されたメモリと、回路で実施され、複数の異なるタイプの動き情報をそれぞれの異なる履歴動きベクトル予測子(MVP)バッファに記憶するように構成された1つまたは複数の処理ユニットとを含む、ビデオデータを復号するように構成されたデバイスの例を表す。
[0188] 図16は、本開示の技法による、現在ブロックを符号化するための例となる方法を例示するフローチャートである。現在ブロックは、現在CUを備え得る。ビデオエンコーダ200(図1および図14)に関して説明したが、他のデバイスが図16の方法と同様の方法を実行するように構成され得ることは理解されるべきである。
[0189] この例において、ビデオエンコーダ200は、動き情報を使用して現在ブロックを最初に予測する(350)。例えば、ビデオエンコーダ200は、動き情報を使用して現在ブロックのための予測ブロックを形成し得る。次いで、ビデオエンコーダ200は、現在ブロックのための残差ブロックを算出し得る(352)。残差ブロックを算出するために、ビデオエンコーダ200は、元の符号化されていないブロックと現在ブロックのための予測ブロックとの間の差分を算出し得る。次いで、ビデオエンコーダ200は、残差ブロックの係数を変換および量子化し得る(354)。次に、ビデオエンコーダ200は、残差ブロックの量子化された変換係数を走査し得る(356)。走査中、または走査に続いて、ビデオエンコーダ200は、本開示の技法を使用して係数と動き情報とをエントロピー符号化し得る(358)。ビデオエンコーダ200は、CAVLCまたはCABACを使用して係数を符号化し得る。
[0190] ビデオエンコーダ200は、本開示の技法のうちのいずれかまたは全てに従って、例えば、HMVP候補を含む動き情報候補リストを構築し、ブロックの動き情報のための予測子を表す候補インデックスを選択し、候補インデックスをエントロピー符号化し得る。本開示の技法によれば、ビデオエンコーダ200は、対応するCTUラインの動き情報を記憶するためにMVPバッファを使用する前に、MVPバッファをリセットし得る。いくつかの例では、各CTUラインがそれ自体のMVPバッファを有し得るか、または1つのMVPバッファが複数のCTUラインに使用され得る。さらに、ビデオエンコーダ200は、複数のタイプの動き情報をMVPバッファ、例えば、同じバッファまたは異なるそれぞれの動きモデルバッファに記憶し得る。ビデオエンコーダ200は、MVPバッファのデータから選択された動きベクトル予測子を使用して現在ブロックの動き情報を符号化し得る。次いで、ビデオエンコーダ200は、例えば、候補インデックスのような、動き情報および係数のためのデータを含む、ブロックのエントロピーコーディングされたデータを出力し得る(360)。
[0191] このように、図16の方法は、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、メモリの第2の履歴MVPバッファをリセットすることと、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を含む方法の例を表す。
[0192] 図16の方法はまた、動き情報を履歴動きベクトル予測子(MVP)バッファに記憶することと、異なるタイプの動き情報を履歴MVPバッファに記憶することと、履歴MVPバッファの動き情報を使用してビデオデータのブロックの動き情報をコーディングすることとを含む方法の例を表す。
[0193] 図16の方法はまた、複数の異なるタイプの動き情報をそれぞれの異なる履歴動きベクトル予測子(MVP)バッファに記憶することを含む方法の例を表す。
[0194] 図17は、本開示の技法による、ビデオデータの現在ブロックを復号するための例となる方法を例示するフローチャートである。現在ブロックは、現在CUを備え得る。ビデオデコーダ300(図1および15)に関して説明したが、他のデバイスが図17の方法と同様の方法を実行するように構成され得ることは理解されるべきである。
[0195] ビデオデコーダ300は、現在ブロックに対応する残差ブロックの係数のためのエントロピーコーディングされた予測情報およびエントロピーコーディングされたデータのような、現在ブロックのためのエントロピーコーディングされたデータを受信し得る(370)。上述したように、エントロピーコーディングされた予測情報は、例えば、本開示の技法に従って、HMVP候補を含み得る候補リストに候補インデックスを含め得る。ビデオデコーダ300は、現在ブロックのための予測情報を決定するため、および、残差ブロックの係数を再生するために、エントロピーコーディングされたデータをエントロピー復号し得る(372)。ビデオデコーダ300は、現在ブロックの予測ブロックを算出するために、例えば、現在ブロックのための予測情報によって示された予測モードを使用して、現在ブロックを予測し得る(374)。
[0196] 特に、ビデオデコーダ300は、上述したように、HMVP候補を含む候補リストを構築し、次いで、復号された候補インデックスを使用して、現在ブロックのための動きベクトル予測子として使用すべき候補を候補リストから決定し得る。本開示の技法によれば、ビデオデコーダ300は、対応するCTUラインの動き情報を記憶するためにMVPバッファを使用する前に、MVPバッファをリセットし得る。いくつかの例では、各CTUラインがそれ自体のMVPバッファを有し得るか、または1つのMVPバッファが複数のCTUラインに使用され得る。さらに、ビデオデコーダ300は、複数のタイプの動き情報をMVPバッファ、例えば、同じバッファまたは異なるそれぞれの動きモデルバッファに記憶し得る。ビデオデコーダ300は、MVPバッファのデータから動きベクトル予測子を使用して選択し得る。
[0197] 次いで、ビデオデコーダ300は、動きベクトル予測子を使用して現在ブロックのための動きベクトルを再構築し、次いで、予測ブロックを生成するために動きベクトルを使用して現在ブロックを予測し得る。次いで、ビデオデコーダ300は、量子化された変換係数のブロックを作成するために、再生された係数を逆走査し得る(376)。次いで、ビデオデコーダ300は、残差ブロックを作り出すために、係数を逆量子化および逆変換し得る(378)。ビデオデコーダ300は、最終的に、予測ブロックと残差ブロックとを組み合わせることによって現在ブロックを復号し得る(380)。
[0198] このように、図17の方法は、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、メモリの第2の履歴MVPバッファをリセットすることと、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を含む方法の例を表す。
[0199] 図17の方法はまた、動き情報を履歴動きベクトル予測子(MVP)バッファに記憶することと、異なるタイプの動き情報を履歴MVPバッファに記憶することと、履歴MVPバッファの動き情報を使用してビデオデータのブロックの動き情報をコーディングすることとを含む方法の例を表す。
[0200] 図17の方法はまた、複数の異なるタイプの動き情報をそれぞれの異なる履歴動きベクトル予測子(MVP)バッファに記憶することを含む方法の例を表す。
[0201] 図18は、本開示の技法による、ビデオデータをコーディング(符号化または復号)する例となる方法を例示するフローチャートである。例えば、図18の方法は、図16のステップ350または図17のステップ374の間に実行され得る。例示および説明のために、図18の方法は、ビデオデコーダ300に関して説明されるが、ビデオエンコーダ200もまた、この方法または同様の方法を実行し得る。
[0202] ビデオデコーダ300は、例えば、イントラ予測またはインター予測を使用して、ピクチャの第1のCTUラインのブロックをコーディングし得る(390)。ビデオデコーダ300は、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報を、例えばDPB314の第1のバッファに記憶する(392)。ビデオデコーダ300は、インター予測コーディング中に使用される動き情報をコーディングするために、第1のバッファの動き情報を使用し得る。いくつかの例では、ビデオデコーダ300によって実行されるビデオコーディングプロセスの第1のスレッドが、第1のCTUラインをコーディングし得る。
[0203] ビデオデコーダ300はまた、例えば、DPB314の第2のバッファをリセットし得る(394)。第2のバッファは、第1のバッファと同じであり得るか、または異なるバッファであり得る。ビデオデコーダ300はまた、第2のCTUラインのブロックをコーディングし得る(396)。ビデオデコーダ300は、第2のCTUラインの動き情報を第2のバッファに記憶し得る(398)。いくつかの例では、ビデオデコーダ300によって実行されるビデオコーディングプロセスの第2のスレッドが、第2のCTUラインをコーディングし得、ここで、第2のスレッドは、第1のスレッドとは異なる。
[0204] このように、図18の方法は、ピクチャの第1のコーディングツリー単位(CTU)ラインの動き情報をメモリの第1の履歴動きベクトル予測子(MVP)バッファに記憶することと、メモリの第2の履歴MVPバッファをリセットすることと、第2の履歴MVPバッファをリセットした後に、ピクチャの第2のCTUラインの動き情報を第2の履歴MVPバッファに記憶することと、ここで、第2のCTUラインは、第1のCTUラインとは異なる、を含む方法の例を表す。
[0205] 例によっては、本明細書で説明した技法のうちの任意のものの特定の動作(act)またはイベントが、異なる順序で実行され得、追加、混合、または完全に省略され得る(例えば、説明した全ての動作またはイベントが本技法の実践に必要なわけではない)ことは認識されるべきである。さらに、特定の例では、動作またはイベントが、連続してではなく、例えば、マルチスレッド処理、割込み処理、または複数のプロセッサによって同時に実行され得る。
[0206] 1つまたは複数の例において、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せで実施され得る。ソフトウェアで実施される場合、これらの機能は、1つまたは複数の命令またはコードとして、コンピュータ読取可能な媒体に記憶されるか、またはコンピュータ読取可能な媒体を通して送信され、ハードウェアベース処理ユニットによって実行され得る。コンピュータ読取可能な媒体は、例えば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの移送を容易にする任意の媒体を含む通信媒体またはデータ記憶媒体のような有形の媒体に対応するコンピュータ読取可能な記憶媒体を含み得る。このように、コンピュータ読取可能な媒体は、一般に、(1)非一時的である有形のコンピュータ読取可能な記憶媒体または(2)信号または搬送波のような通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実施のための命令、コード、および/またはデータ構造を取り出すために、1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセス可能な任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ読取可能な媒体を含み得る。
[0207] 限定ではなく例として、そのようなコンピュータ読取可能な記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光学ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、フラッシュメモリ、または命令もしくはデータ構造の形式で所望のプログラムコードを記憶するために使用され得、かつ、コンピュータによってアクセス可能な任意の他の媒体を備えることができる。また、いずれの接続も、厳密にはコンピュータ読取可能な媒体と称される。例えば、命令が、ウェブサイト、サーバ、または他のリモートソースから、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、電波、およびマイクロ波のようなワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、電波、およびマイクロ波のようなワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ読取可能な記憶媒体およびデータ記憶媒体が、接続、搬送波、信号、または他の一時的な媒体を含むのではなく、代わりに、非一時的な有形の記憶媒体を対象としていることは理解されるべきである。本明細書で使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびブルーレイディスクを含み、ここで、ディスク(disk)は、通常磁気的にデータを再生し、ディスク(disc)は、レーザーを用いて光学的にデータを再生する。上記の組合せもまた、コンピュータ読取可能な媒体の範囲内に含まれるべきである。
[0208] 命令は、1つまたは複数のデジタルシグナルプロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の同等の集積またはディスクリート論理回路のような1つまたは複数のプロセッサによって実行され得る。従って、「プロセッサ」および「処理回路」という用語は、本明細書で使用される場合、前述の構造または本明細書で説明した技法の実施に好適な任意の他の構造のうちの任意のものを指し得る。加えて、いくつかの態様において、本明細書で説明した機能性は、符号化および復号のために構成された専用ハードウェアおよび/またはソフトウェアモジュール内に提供され得るか、複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素で完全に実施され得る。
[0209] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(例えば、チップセット)を含む、幅広い種類のデバイスまたは装置において実施され得る。様々な構成要素、モジュール、またはユニットは、本開示において、開示された技法を実行するように構成されたデバイスの機能的な態様を強調するために説明されているが、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明したように、様々なユニットは、コーデックハードウェアユニットへと組み合わされるか、好適なソフトウェアおよび/またはファームウェアと併せて、上で説明した1つまたは複数のプロセッサを含む、相互動作するハードウェアユニットの集合によって提供され得る。
[0210] 様々な例が説明されている。これらの例および他の例は、以下の特許請求の範囲の範囲内である。