本開示は、勾配ベースの予測改良に関する。勾配ベースの予測改良において、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、インター予測の一部として動きベクトルに基づいて現在のブロックのための予測ブロックを決定し、修正された予測サンプル(たとえば、改良された予測サンプル)を生成するために予測ブロックのサンプルを修正する(たとえば、改良する)。ビデオエンコーダは、修正された予測サンプルと現在のブロックとの間の差分を示す残差値をシグナリングする。ビデオデコーダは、ビデオエンコーダが予測ブロックのサンプルを修正して修正された予測サンプルを生成するために実行したのと同じ動作を実行する。ビデオデコーダは、残差値を修正された予測サンプルに加算して、現在のブロックを再構築する。
予測ブロックのサンプルを修正するための1つの例示的な方法は、ビデオコーダが、1つまたは複数の改良オフセットを決定して、予測ブロックのサンプルを改良オフセットに加算することである。改良オフセットを生成するための1つの例示的な方法は、勾配および動きベクトル変位に基づく。勾配は、予測ブロックのサンプルに適用される勾配フィルタから決定され得る。
動きベクトル変位の例は、動きベクトルの水平変位および動きベクトルの垂直変位を含む。水平変位は、動きベクトルのx座標に加算される、またはそれから減算される値であってもよく、垂直変位は、動きベクトルのy座標に加算される、またはそれから減算される値であってもよい。たとえば、水平変位はΔvxと呼ばれることがあり、vxは動きベクトルのx座標であり、垂直変位はΔvyと呼ばれることがあり、vyは動きベクトルのy座標である。
現在のブロックの動きベクトルの精度レベルは、異なるインター予測モードに対して異なり得る。たとえば、動きベクトルの座標(たとえば、x座標またはy座標)は、整数部分を含み、小数部分を含み得る。小数部分は動きベクトルのサブペル部分と呼ばれ、それは、動きベクトルの整数部分が予測ブロックを含む参照ピクチャにおける実際のピクセルを特定し、動きベクトルのサブペル部分は参照ピクチャの中のピクセル間の位置を特定するために動きベクトルを調整するものであるからである。
動きベクトルの精度レベルは、動きベクトルのサブペル部分に基づき、参照ピクチャの中の実際のピクセルからの動きベクトルの動きの粒度を示す。ある例として、x座標のサブペル部分が0.5である場合、動きベクトルは参照ピクチャの中の2つの水平ピクセルの中間にある。x座標のサブペル部分が0.25である場合、動きベクトルは2つの水平ピクセルの間の4分の1のところにあり、以下同様である。これらの例では、動きベクトルの精度レベルはサブペル部分に等しくてもよい(たとえば、精度レベルは0.5、0.25などである)。
いくつかの例では、水平変位および垂直変位の精度レベルは、動きベクトルの精度レベル、または動きベクトルが生成された方法に基づき得る。たとえば、ある形式のインター予測モードであるマージモードなどのいくつかの例では、動きベクトルのx座標およびy座標のサブペル部分はそれぞれ、水平変位および垂直変位であり得る。ある形式のインター予測モードであるアフィンモードなどの別の例として、動きベクトルは角点動きベクトルに基づいてもよく、水平変位および垂直変位は角点動きベクトルに基づいて決定されてもよい。
水平変位および垂直変位の精度レベルは、異なるインター予測モードに対して異なり得る。たとえば、一部のインター予測モードでは、水平変位および垂直変位は、他のインター予測モードと比較して(たとえば、第2の予測モードでは精度レベルは1/16である)より精密であってもよい(たとえば、第1の予測モードでは精度レベルは1/128である)。
実装において、ビデオコーダは、異なる精度レベルを扱うために異なる論理回路を含む必要があり得る。勾配ベースの予測改良を実行することは、乗算、シフト演算、加算、および他の算術演算を含む。ある精度レベルの水平変位および垂直変位のために構成される論理回路は、より精度レベルの高い水平変位および垂直変位を処理することが可能ではないことがある。したがって、一部のビデオコーダは、水平変位および垂直変位が第1の精度レベルを有するようなあるインター予測モードのための勾配ベースの予測改良を実行するための論理回路の1つのセットと、水平変位および垂直変位が第2の精度レベルを有するような別のインター予測モードのための勾配ベースの予測改良を実行するための論理回路の異なるセットとを含む。
しかしながら、異なるインター予測モードのための勾配ベースの予測改良を実行するための異なる論理回路があることで、追加の論理回路が生じ、これはビデオコーダのサイズを増やすとともに、さらなる電力を消費する。たとえば、現在のブロックが第1のモードでインター予測される場合、勾配ベースの予測改良のための論理回路の第1のセットが使用される。しかしながら、異なるインター予測モードのための勾配ベースの予測改良のための論理回路の第2のセットも、依然として電力を受け取っている。
本開示は、水平変位および垂直変位の精度レベルを異なるインター予測モードのための同じ精度レベルへと丸めるための、技法の例を説明する。たとえば、ビデオコーダは、第1のインター予測モードでインター予測される第1のブロックのための第1の精度レベルを有する第1の変位(たとえば、第1の水平変位または第1の垂直変位)をある設定された精度レベルに丸めてもよく、第2のインター予測モードにおいてインター予測される第2のブロックのための第2の精度レベルを有する第2の変位(たとえば、第2の水平変位または第2の垂直変位)を同じ設定された精度レベルに丸めてもよい。言い換えると、ビデオコーダは、水平変位および垂直変位のうちの少なくとも1つを、異なるインター予測モードに対して同じである精度レベルに丸めてもよい。一例として、第1のインター予測モードはアフィンモードであってもよく、第2のインター予測モードは双方向オプティカルフロー(BDOF)であってもよい。
このようにして、異なるインター予測モードに対して異なる論理回路があるのではなく、異なるインター予測モードのための勾配ベースの予測改良のために同じ論理回路を使用することができる。たとえば、ビデオコーダの論理回路は、同じ精度レベルを有する水平変位および垂直変位のための勾配ベースの予測改良を実行するように構成され得る。ビデオコーダは、丸められた水平変位および垂直変位の精度レベルが設定された精度レベルに等しくなるように水平変位および垂直変位を丸めてもよく、同じ論理回路が異なるインター予測モードのための勾配ベースの予測改良を実行することを可能にする。
図1は、本開示の技法を実行し得る例示的なビデオ符号化および復号システム100を示すブロック図である。本開示の技法は、一般に、ビデオデータをコーディング(符号化および/または復号)することを対象とする。一般に、ビデオデータは、ビデオを処理するための任意のデータを含む。したがって、ビデオデータは、生の符号化されていないビデオ、符号化されたビデオ、復号された(たとえば、再構成された)ビデオ、およびシグナリングデータなどのビデオメタデータを含み得る。
図1に示すように、システム100は、この例では、復号され、宛先デバイス116によって表示されるべき符号化されたビデオデータを提供するソースデバイス102を含む。具体的には、ソースデバイス102は、コンピュータ可読媒体110を介して宛先デバイス116にビデオデータを提供する。ソースデバイス102および宛先デバイス116は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、スマートフォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲーミングコンソール、ビデオストリーミングデバイス、ブロードキャスト受信機デバイス、セットトップボックスなどを含む、広範囲のデバイスのうちのいずれかを含み得る。場合によっては、ソースデバイス102および宛先デバイス116は、ワイヤレス通信用に装備されることがあり、したがって、ワイヤレス通信デバイスと呼ばれることがある。
図1の例では、ソースデバイス102は、ビデオソース104、メモリ106、ビデオエンコーダ200、および出力インターフェース108を含む。宛先デバイス116は、入力インターフェース122、ビデオデコーダ300、メモリ120、およびディスプレイデバイス118を含む。本開示によれば、ソースデバイス102のビデオエンコーダ200および宛先デバイス116のビデオデコーダ300は、勾配ベースの予測改良のための技法を適用するように構成され得る。したがって、ソースデバイス102はビデオ符号化デバイスの一例を表すが、宛先デバイス116はビデオ復号デバイスの一例を表す。他の例では、ソースデバイスおよび宛先デバイスは、他の構成要素または構成を含み得る。たとえば、ソースデバイス102は、外部カメラなどの外部ビデオソースからビデオデータを受信し得る。同様に、宛先デバイス116は、統合されたディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースし得る。
図1に示すようなシステム100は一例にすぎない。一般に、任意のデジタルビデオ符号化および/または復号デバイスが、勾配ベースの予測改良のための技法を実行し得る。ソースデバイス102および宛先デバイス116は、ソースデバイス102が宛先デバイス116に送信するためのコーディングされたビデオデータを生成するようなコーディングデバイスの例にすぎない。本開示は、データのコーディング(符号化および/または復号)を実行するデバイスを「コーディング」デバイスと呼ぶ。したがって、ビデオエンコーダ200およびビデオデコーダ300は、コーディングデバイス、具体的には、それぞれ、ビデオエンコーダおよびビデオデコーダの例を表す。いくつかの例では、デバイス102、116は、デバイス102、116の各々がビデオ符号化および復号構成要素を含むように実質的に対称的な方法で動作し得る。したがって、システム100は、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、またはビデオテレフォニーのための、ビデオデバイス102、116間の一方向または双方向のビデオ送信をサポートし得る。
一般に、ビデオソース104は、ビデオデータ(すなわち、生の符号化されていないビデオデータ)のソースを表し、ビデオデータの連続した一連のピクチャ(「フレーム」とも呼ばれる)をビデオエンコーダ200に提供し、ビデオエンコーダ200は、ピクチャのためのデータを符号化する。ソースデバイス102のビデオソース104は、ビデオカメラ、以前にキャプチャされた生のビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースなどの、ビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソース104は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオとアーカイブされたビデオとコンピュータ生成されたビデオとの組合せを生成し得る。各場合において、ビデオエンコーダ200は、キャプチャされた、事前にキャプチャされた、またはコンピュータ生成されたビデオデータを符号化する。ビデオエンコーダ200は、受信された順序(「表示順序」と呼ばれることがある)からコーディング用のコーディング順序にピクチャを並べ替え得る。ビデオエンコーダ200は、符号化されたビデオデータを含むビットストリームを生成し得る。次いで、ソースデバイス102は、たとえば、宛先デバイス116の入力インターフェース122による受信および/または取出しのために、符号化されたビデオデータを出力インターフェース108を介してコンピュータ可読媒体110上に出力し得る。
ソースデバイス102のメモリ106および宛先デバイス116のメモリ120は、汎用メモリを表す。いくつかの例では、メモリ106、120は、生のビデオデータ、たとえば、ビデオソース104からの生のビデオ、およびビデオデコーダ300からの生の復号されたビデオデータを記憶し得る。追加または代替として、メモリ106、120は、たとえば、それぞれ、ビデオエンコーダ200およびビデオデコーダ300によって実行可能なソフトウェア命令を記憶し得る。この例ではビデオエンコーダ200およびビデオデコーダ300とは別々に示されているが、ビデオエンコーダ200およびビデオデコーダ300は、機能的に類似するまたは同等の目的で内部メモリも含み得ることを理解されたい。さらに、メモリ106、120は、符号化されたビデオデータ、たとえば、ビデオエンコーダ200からの出力およびビデオデコーダ300への入力を記憶し得る。いくつかの例では、メモリ106、120の一部は、たとえば、生の復号されたおよび/または符号化されたビデオデータを記憶するための、1つまたは複数のビデオバッファとして割り振られ得る。
コンピュータ可読媒体110は、符号化されたビデオデータをソースデバイス102から宛先デバイス116にトランスポートすることが可能な任意のタイプの媒体またはデバイスを表し得る。一例では、コンピュータ可読媒体110は、たとえば、無線周波数ネットワークまたはコンピュータベースのネットワークを介して、ソースデバイス102が符号化されたビデオデータを宛先デバイス116にリアルタイムで直接送信することを可能にする通信媒体を表す。ワイヤレス通信プロトコルなどの通信規格に従って、出力インターフェース108が符号化されたビデオデータを含む送信信号を変調し得、入力インターフェース122が受信された送信信号を変調し得る。通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などの、任意のワイヤレスまたはワイヤード通信媒体を含み得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなどの、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス102から宛先デバイス116への通信を容易にするために有用であり得る任意の他の機器を含み得る。
いくつかの例では、ソースデバイス102は、符号化されたデータを出力インターフェース108から記憶デバイス112に出力し得る。同様に、宛先デバイス116は、入力インターフェース122を介して、記憶デバイス112からの符号化されたデータにアクセスし得る。記憶デバイス112は、ハードドライブ、Blu-rayディスク、DVD、CD-ROM、フラッシュメモリ、揮発性もしくは不揮発性メモリ、または、符号化されたビデオデータを記憶するための任意の他の適切なデジタル記憶媒体などの、様々な分散されたまたはローカルでアクセスされるデータ記憶媒体のいずれかを含み得る。
いくつかの例では、ソースデバイス102は、符号化されたビデオデータを、ソースデバイス102によって生成された符号化されたビデオを記憶し得るファイルサーバ114または別の中間記憶デバイスに出力し得る。宛先デバイス116は、ストリーミングまたはダウンロードを介して、ファイルサーバ114からの記憶されたビデオデータにアクセスし得る。ファイルサーバ114は、符号化されたビデオデータを記憶し、その符号化されたビデオデータを宛先デバイス116に送信することが可能な任意のタイプのサーバデバイスであり得る。ファイルサーバ114は、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、コンテンツ配信ネットワークデバイス、またはネットワークアタッチトストレージ(NAS)デバイスを表し得る。宛先デバイス116は、インターネット接続を含む任意の標準的なデータ接続を通じて、ファイルサーバ114からの符号化されたビデオデータにアクセスし得る。これは、ワイヤレスチャネル(たとえば、Wi-Fi接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、またはファイルサーバ114上に記憶された符号化されたビデオデータにアクセスするのに適した両方の組合せを含み得る。ファイルサーバ114および入力インターフェース122は、ストリーミング送信プロトコル、ダウンロード送信プロトコル、またはそれらの組合せに従って動作するように構成され得る。
出力インターフェース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)デバイスを含み得る。たとえば、ソースデバイス102は、ビデオエンコーダ200および/または出力インターフェース108に起因する機能を実行するためのSoCデバイスを含み得、宛先デバイス116は、ビデオデコーダ300および/または入力インターフェース122に起因する機能を実行するためのSoCデバイスを含み得る。
本開示の技法は、オーバージエアテレビジョンブロードキャスト、ケーブルテレビジョン送信、衛星テレビジョン送信、動的適応ストリーミングオーバーHTTP(DASH)などのインターネットストリーミングビデオ送信、データ記憶媒体上に符号化されたデジタルビデオ、データ記憶媒体上に記憶されたデジタルビデオの復号、または他の適用例などの、様々なマルチメディア適用例のいずれかをサポートするビデオコーディングに適用され得る。
宛先デバイス116の入力インターフェース122は、コンピュータ可読媒体110(たとえば、記憶デバイス112、ファイルサーバ114など)から符号化されたビデオビットストリームを受信する。符号化されたビデオビットストリームコンピュータ可読媒体110は、ビデオブロックまたは他のコーディングされたユニット(たとえば、スライス、ピクチャ、ピクチャグループ、シーケンスなど)の特性および/または処理を記述する値を有するシンタックス要素などの、ビデオエンコーダ200によって定義され、ビデオデコーダ300によっても使用されるシグナリング情報を含み得る。ディスプレイデバイス118は、復号されたビデオデータの復号されたピクチャをユーザに表示する。ディスプレイデバイス118は、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスのいずれかを表し得る。
図1には示されていないが、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は各々、オーディオエンコーダおよび/またはオーディオデコーダと統合されることがあり、共通のデータストリーム中のオーディオとビデオの両方を含む多重化されたストリームを処理するために、適切なMUX-DEMUXユニット、または他のハードウェアおよび/もしくはソフトウェアを含み得る。適用可能な場合、MUX-DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
ビデオエンコーダ200およびビデオデコーダ300は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せなどの、様々な適切なエンコーダおよび/またはデコーダ回路のいずれかとして実装され得る。技法が部分的にソフトウェアにおいて実装されるとき、デバイスは、適切な非一時的コンピュータ可読媒体にソフトウェア用の命令を記憶し、本開示の技法を実行するために1つまたは複数のプロセッサを使用してハードウェアにおいて命令を実行し得る。ビデオエンコーダ200およびビデオデコーダ300の各々は、1つまたは複数のエンコーダまたはデコーダに含まれることがあり、そのいずれもが、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合されることがある。ビデオエンコーダ200および/またはビデオデコーダ300を含むデバイスは、集積回路、マイクロプロセッサ、および/またはセルラー電話などのワイヤレス通信デバイスを含み得る。
ビデオエンコーダ200およびビデオデコーダ300は、高効率ビデオコーディング(HEVC)とも呼ばれるITU-T H.265などのビデオコーディング規格、またはマルチビューおよび/もしくはスケーラブルビデオコーディング拡張などのその拡張に従って動作し得る。代替として、ビデオエンコーダ200およびビデオデコーダ300は、多用途ビデオコーディング(VVC)とも呼ばれるITU-T H.266などの、他のプロプライエタリ規格または業界規格に従って動作し得る。VVC規格の最近のドラフトは、Bross他、「Versatile Video Coding (Draft 4)」、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のJoint Video Experts Team(JVET)、第13回会議、マラケシュ、モロッコ、2019年1月9~18日、JVET-M1001-v5(以後「VVC Draft 4」)に記載されている。VVC規格のより最近のドラフトは、Bross他、「Versatile Video Coding (Draft 8)」、ITU-T SG 16 WP 3およびISO/IEC JTC 1/SC 29/WG 11のJoint Video Experts Team(JVET)、第17回会議、ブリュッセル、ベルギー、2020年1月7~17日、JVET-Q2001-vD(以後「VVC Draft 8」)に記載されている。しかしながら、本開示の技法は、いかなる特定のコーディング規格にも限定されない。
一般に、ビデオエンコーダ200およびビデオデコーダ300は、ピクチャのブロックベースのコーディングを実行し得る。「ブロック」という用語は、一般に、処理される(たとえば、符号化および/または復号プロセスにおいて符号化される、復号される、または他の方法で使用される)べきデータを含む構造を指す。たとえば、ブロックは、ルミナンスおよび/またはクロミナンスデータのサンプルの2次元行列を含み得る。一般に、ビデオエンコーダ200およびビデオデコーダ300は、YUV(たとえば、Y、Cb、Cr)フォーマットで表されるビデオデータをコーディングし得る。すなわち、ピクチャのサンプルのための赤、緑、および青(RGB)データをコーディングするのではなく、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分およびクロミナンス成分をコーディングし得、クロミナンス成分は、赤色相と青色相の両方のクロミナンス成分を含み得る。いくつかの例では、ビデオエンコーダ200が、符号化に先立って、受信されたRGBフォーマットされたデータをYUV表現にコンバートし、ビデオデコーダ300が、YUV表現をRGBフォーマットにコンバートする。代替として、前処理ユニットおよび後処理ユニット(図示せず)が、これらのコンバージョンを実行し得る。
本開示は、一般に、ピクチャのデータを符号化または復号するプロセスを含めるように、ピクチャのコーディング(たとえば、符号化および復号)に言及することがある。同様に、本開示は、ブロックのためのデータを符号化または復号するプロセスを含めるように、ピクチャのブロックのコーディング、たとえば、予測および/または残差コーディングに言及することがある。符号化されたビデオビットストリームは、一般に、コーディング決定(たとえば、コーディングモード)およびブロックへのピクチャの区分を表すシンタックス要素のための一連の値を含む。したがって、ピクチャまたはブロックをコーディングすることへの言及は、一般に、ピクチャまたはブロックを形成するシンタックス要素のためのコーディング値として理解されるべきである。
HEVCは、コーディングユニット(CU)、予測ユニット(PU)、および変換ユニット(TU)を含む、様々なブロックを定義する。HEVCによれば、(ビデオエンコーダ200などの)ビデオコーダは、4分木構造に従ってコーディングツリーユニット(CTU)をCUに区分する。すなわち、ビデオコーダは、CTUおよびCUを4個の等しい重複しない正方形に区分し、4分木の各ノードは、0個または4個のいずれかの子ノードを有する。子ノードがないノードは「リーフノード」と呼ばれることがあり、そのようなリーフノードのCUは、1つもしくは複数のPUおよび/または1つもしくは複数のTUを含み得る。ビデオコーダはPUおよびTUをさらに区分し得る。たとえば、HEVCでは、残差4分木(RQT)はTUの区分を表す。HEVCでは、PUはインター予測データを表し、TUは残差値を表す。イントラ予測されるCUは、イントラモード指示などのイントラ予測情報を含む。
別の例として、ビデオエンコーダ200およびビデオデコーダ300は、VVCに従って動作するように構成され得る。VVCによれば、(ビデオエンコーダ200などの)ビデオコーダは、ピクチャを複数のコーディングツリーユニット(CTU)に区分する。ビデオエンコーダ200は、4分木2分木(QTBT)構造またはマルチタイプツリー(MTT)構造などのツリー構造に従ってCTUを区分し得る。QTBT構造は、HEVCのCU、PU、およびTUの間の区別などの、複数の区分タイプの概念を排除する。QTBT構造は、2つのレベル、すなわち、4分木区分に従って区分された第1のレベルおよび2分木区分に従って区分された第2のレベルを含む。QTBT構造のルートノードはCTUに対応する。2分木のリーフノードはコーディングユニット(CU)に対応する。
MTT区分構造では、ブロックは、4分木(QT)区分、2分木(BT)区分、および1つまたは複数のタイプのトリプルツリー(TT)区分を使用して区分され得る。トリプルツリー区分は、ブロックが3個のサブブロックに分割される区分である。いくつかの例では、トリプルツリー区分は、中心を通って元のブロックを分けることなしに、ブロックを3個のサブブロックに分ける。MTTにおける区分タイプ(たとえば、QT、BT、およびTT)は対称または非対称であり得る。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分およびクロミナンス成分の各々を表すために単一のQTBTまたはMTT構造を使用し得るが、他の例では、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分のための1つのQTBT/MTT構造および両方のクロミナンス成分のための別のQTBT/MTT構造(またはそれぞれのクロミナンス成分のための2つのQTBT/MTT構造)などの、2つ以上のQTBTまたはMTT構造を使用し得る。
ビデオエンコーダ200およびビデオデコーダ300は、HEVCごとの4分木区分、QTBT区分、MTT区分、または他の区分構造を使用するように構成され得る。説明のために、本開示の技法の記載はQTBT区分に関して提示される。しかしながら、本開示の技法はまた、4分木区分、または他のタイプの区分も使用するように構成されたビデオコーダに適用され得ることを理解されたい。
本開示は、垂直次元および水平次元に換算して(CUまたは他のビデオブロックなどの)ブロックのサンプル次元を指すために、互換的に「N×N」および「NかけるN(N by N)」、たとえば、16×16サンプルまたは16かける16(16 by 16)サンプルを使用し得る。一般に、16×16 CUは、垂直方向に16個のサンプル(y=16)および水平方向に16個のサンプル(x=16)を有する。同様に、N×N CUは、一般に、垂直方向にN個のサンプルおよび水平方向にN個のサンプルを有し、ここで、Nは負ではない整数値を表す。CU中のサンプルは、行および列に配置され得る。さらに、CUは、必ずしも水平方向に垂直方向と同じ数のサンプルを有する必要があるとは限らない。たとえば、CUはN×Mサンプルを含んでもよく、ここで、Mは必ずしもNに等しいとは限らない。
ビデオエンコーダ200は、予測および/または残差情報、ならびに他の情報を表すCUのためのビデオデータを符号化する。予測情報は、CUのための予測ブロックを形成するためにCUがどのように予測されることになるかを示す。残差情報は、一般に、符号化に先立つCUのサンプルと予測ブロックのサンプルとの間のサンプルごとの差分を表す。
CUを予測するために、ビデオエンコーダ200は、一般に、インター予測またはイントラ予測を通じてCUのための予測ブロックを形成し得る。インター予測は、一般に、以前にコーディングされたピクチャのデータからCUを予測することを指すが、イントラ予測は、一般に、同じピクチャの以前にコーディングされたデータからCUを予測することを指す。インター予測を実行するために、ビデオエンコーダ200は、1つまたは複数の動きベクトルを使用して予測ブロックを生成し得る。ビデオエンコーダ200は、一般に、たとえば、CUと参照ブロックとの間の差分に関してCUと厳密に一致する参照ブロックを識別するために、動き探索を実行し得る。ビデオエンコーダ200は、参照ブロックが現在のCUと厳密に一致するかどうかを決定するために、絶対差分和(SAD)、2乗差分和(SSD)、平均絶対差(MAD)、平均2乗差(MSD)、または他のそのような差分計算を使用して差分メトリックを計算し得る。いくつかの例では、ビデオエンコーダ200は、単方向予測または双方向予測を使用して現在のCUを予測し得る。
VVCのいくつかの例は、インター予測モードと見なされ得るアフィン動き補償モードも提供する。アフィン動き補償モードでは、ビデオエンコーダ200は、ズームインもしくはズームアウト、回転、遠近運動、または他の不規則な運動タイプなどの、非並進運動を表す2つ以上の動きベクトルを決定し得る。
イントラ予測を実行するために、ビデオエンコーダ200は、イントラ予測モードを選択して予測ブロックを生成し得る。VVCのいくつかの例は、様々な方向モードを含む67個のイントラ予測モード、ならびに平面モードおよびDCモードを提供する。一般に、ビデオエンコーダ200は、そこから現在のブロックのサンプルを予測するための現在のブロック(たとえば、CUのブロック)に対する隣接サンプルを記述するイントラ予測モードを選択する。そのようなサンプルは、一般に、ビデオエンコーダ200がラスタ走査順序で(左から右に、上から下に)CTUおよびCUをコーディングすると仮定すると、現在のブロックと同じピクチャ中の現在のブロックの上方、上方および左側、または左側にあり得る。
ビデオエンコーダ200は、現在のブロックのための予測モードを表すデータを符号化する。たとえば、インター予測モードの場合、ビデオエンコーダ200は、様々な利用可能なインター予測モードのうちのどれが使用されるか、ならびに対応するモードについての動き情報を表すデータを符号化し得る。単方向または双方向インター予測の場合、たとえば、ビデオエンコーダ200は、高度動きベクトル予測(AMVP)またはマージモードを使用して動きベクトルを符号化し得る。ビデオエンコーダ200は、アフィン動き補償モードのための動きベクトルを符号化するために類似のモードを使用し得る。
ブロックのイントラ予測またはインター予測などの予測に続いて、ビデオエンコーダ200はブロックのための残差値を計算し得る。残差ブロックなどの残差値は、ブロックと、対応する予測モードを使用して形成されたそのブロックのための予測ブロックとの間のサンプルごとの差分を表す。ビデオエンコーダ200は、サンプル領域ではなく変換領域において変換データを生成するために、1つまたは複数の変換を残差ブロックに適用し得る。たとえば、ビデオエンコーダ200は、離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に類似の変換を残差ビデオデータに適用し得る。加えて、ビデオエンコーダ200は、第1の変換に続いて、モード依存型分離不可能二次変換(MDNSST:mode-dependent non-separable secondary transform)、信号依存変換、カルーネンレーベ変換(KLT:Karhunen-Loeve transform)などの二次変換を適用し得る。ビデオエンコーダ200は、1つまたは複数の変換の適用に続いて、変換係数を生成する。
上述のように、変換係数を生成するための任意の変換に続いて、ビデオエンコーダ200は、変換係数の量子化を実行し得る。量子化は、一般に、係数を表すために使用されるデータの量をできる限り低減するために変換係数が量子化され、さらなる圧縮が行われるプロセスを指す。量子化プロセスを実行することによって、ビデオエンコーダ200は、係数の一部または全部に関連付けられたビット深度を低減し得る。たとえば、ビデオエンコーダ200は量子化の間にnビット値をmビット値に丸めてもよく、ここで、nはmよりも大きい。いくつかの例では、量子化を実行するために、ビデオエンコーダ200は、量子化されるべき値のビット単位の右シフトを実行し得る。
量子化に続いて、ビデオエンコーダ200は、変換係数を走査し、量子化された変換係数を含む2次元行列から1次元ベクトルを生成し得る。走査は、より高いエネルギー(したがって、より低い周波数)変換係数をベクトルの前方に置き、より低いエネルギー(したがって、より高い周波数)変換係数をベクトルの後方に置くように設計され得る。いくつかの例では、ビデオエンコーダ200は、シリアル化ベクトルを生成し、次いで、ベクトルの量子化された変換係数をエントロピー符号化するために、量子化された変換係数を走査するための事前定義された走査順序を利用し得る。他の例では、ビデオエンコーダ200は、適応走査を実行し得る。量子化された変換係数を走査して1次元ベクトルを形成した後、ビデオエンコーダ200は、たとえば、コンテキスト適応型バイナリ算術コーディング(CABAC)に従って、1次元ベクトルをエントロピー符号化し得る。ビデオエンコーダ200はまた、ビデオデータを復号する際にビデオデコーダ300によって使用するための符号化されたビデオデータに関連付けられたメタデータを記述するシンタックス要素のための値をエントロピー符号化し得る。
CABACを実行するために、ビデオエンコーダ200は、送信されるべきシンボルにコンテキストモデル内のコンテキストを割り当て得る。コンテキストは、たとえば、シンボルの隣接値がゼロ値化されているか否かに関係し得る。確率決定は、シンボルに割り当てられたコンテキストに基づき得る。
ビデオエンコーダ200は、たとえば、ピクチャヘッダ、ブロックヘッダ、スライスヘッダ、または、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、もしくはビデオパラメータセット(VPS)などの他のシンタックスデータにおいて、ビデオデコーダ300へのブロックベースのシンタックスデータ、ピクチャベースのシンタックスデータ、およびシーケンスベースのシンタックスデータなどのシンタックスデータをさらに生成し得る。ビデオデコーダ300は、そのようなシンタックスデータを同様に復号して、対応するビデオデータをどのように復号するかを決定し得る。
このようにして、ビデオエンコーダ200は、符号化されたビデオデータ、たとえば、ブロック(たとえば、CU)へのピクチャの区分ならびにブロックについての予測および/または残差情報を記述するシンタックス要素を含むビットストリームを生成し得る。最終的に、ビデオデコーダ300は、ビットストリームを受信し、符号化されたビデオデータを復号し得る。
一般に、ビデオデコーダ300は、ビデオエンコーダ200によって実行されるプロセスとは逆のプロセスを実行して、ビットストリームの符号化されたビデオデータを復号する。たとえば、ビデオデコーダ300は、ビデオエンコーダ200のCABAC符号化プロセスとは逆であるが実質的に同様の方法で、CABACを使用してビットストリームのシンタックス要素のための値を復号し得る。シンタックス要素は、CTUへのピクチャの区分情報、およびQTBT構造などの対応する区分構造に従った各CTUの区分を定義して、CTUのCUを定義し得る。シンタックス要素は、ビデオデータのブロック(たとえば、CU)についての予測および残差情報をさらに定義し得る。
残差情報は、たとえば、量子化された変換係数によって表され得る。ビデオデコーダ300は、ブロックのための残差ブロックを再生するために、ブロックの量子化された変換係数を逆量子化し、逆変換し得る。ビデオデコーダ300は、ブロックのための予測ブロックを形成するために、シグナリングされた予測モード(イントラ予測またはインター予測)および関連する予測情報(たとえば、インター予測についての動き情報)を使用する。次いで、ビデオデコーダ300は、元のブロックを再生するために、予測ブロックおよび残差ブロックを(サンプルごとに)合成し得る。ビデオデコーダ300は、ブロックの境界に沿って視覚的アーティファクトを低減するためのデブロッキングプロセスを実行するなどの、追加の処理を実行し得る。
本開示は、一般に、シンタックス要素などの特定の情報を「シグナリングすること」に言及する。「シグナリングすること」という用語は、一般に、シンタックス要素および/または符号化されたビデオデータを復号するために使用される他のデータのための値の通信を指すことがある。すなわち、ビデオエンコーダ200は、ビットストリーム中でシンタックス要素のための値をシグナリングし得る。一般に、シグナリングすることは、ビットストリーム中で値を生成することを指す。上述のように、ソースデバイス102は、実質的にリアルタイムで、または、宛先デバイス116によって後で取り出すためにシンタックス要素を記憶デバイス112に記憶するときに行われ得るなど、リアルタイムではなく、ビットストリームを宛先デバイス116にトランスポートし得る。
本開示の技法によれば、ビデオエンコーダ200およびまたはビデオデコーダ300は、勾配ベースの予測改良を実行するように構成され得る。上で説明されたように、現在のブロックをインター予測することの一部として、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックのための1つまたは複数の予測ブロックを(たとえば、1つまたは複数の動きベクトルに基づいて)決定し得る。勾配ベースの予測改良では、ビデオエンコーダ200およびビデオデコーダ300は、予測ブロックの1つまたは複数のサンプル(たとえば、すべてのサンプルを含む)を修正する。
たとえば、勾配ベースの予測改良において、位置(i,j)におけるインター予測サンプル(たとえば、予測ブロックのサンプル)は、水平方向における変位、水平勾配、垂直方向における変位、および位置(i,j)における垂直勾配により導出される、オフセットΔI(i,j)によって改良される。一例では、予測改良は次のように説明される。ΔI(i,j)=gx(i,j)*Δvx(i,j)+gy(i,j)*Δvy(i,j)、ただしgx(i,j)は水平勾配であり、gy(i,j)は垂直勾配であり、Δvx(i,j)は水平方向における変位であり、Δvy(i,j)は垂直方向における変位である。
画像の勾配は、画像の強度または色の方向的な変化の尺度である。たとえば、勾配値は、隣接サンプルに基づく色または強度の最大の変化の方向への、色または強度の変化率に基づく。一例として、勾配値は、変化率が比較的低い場合よりも、変化率が比較的高い場合により大きい。
さらに、現在のブロックのための予測ブロックは、現在のブロックを含む現在のピクチャとは異なる参照ピクチャであり得る。ビデオエンコーダ200およびビデオデコーダ300は、参照ピクチャの中のサンプル値に基づいてオフセット(たとえば、ΔI(i,j))を決定し得る(たとえば、勾配は参照ピクチャの中のサンプル値に基づいて決定される)。いくつかの例では、勾配を決定するために使用される値は、予測ブロック自体の中の値、または予測ブロックの値に基づいて生成される値(たとえば、予測ブロック内の値から生成される、補間された値、丸められた値など)であり得る。また、いくつかの例では、勾配を決定するために使用される値は、予測ブロックの外にあって参照ピクチャの中にあってもよく、または、予測ブロックの外にあって参照ピクチャの中にあるサンプルから生成されてもよい(たとえば、補間される、丸められるなど)。
しかしながら、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のピクチャの中のサンプル値に基づいてオフセットを決定し得る。イントラブロックコピーなどのいくつかの例では、現在のピクチャおよび参照ピクチャは同じピクチャである。
変位(たとえば、垂直変位および/または水平変位)は、インター予測モードに基づいて決定され得る。いくつかの例では、変位は動きパラメータに基づいて決定される。より詳しく説明されるように、デコーダ側の動き改良モードでは、変位は参照ピクチャの中のサンプルに基づき得る。他のインター予測モードでは、変位は参照ピクチャの中のサンプルに基づかなくてもよいが、例示的な技法はそのように限定されず、参照ピクチャの中のサンプルが変位を決定するために使用されてもよい。垂直変位および/または水平変位を決定する様々な方法があってもよく、技法は垂直変位および/または水平変位を決定するある特定の方法に限定されない。
以下は、勾配計算を実行するための例示的な方法を説明する。たとえば、勾配フィルタに対して、一例では、Sobelフィルタが勾配計算のために使用され得る。勾配は次のように計算される。gx(i,j)=I(i+1,j-1)-I(i-1,j-1)+2*I(i+1,j)-2*I(i-1,j)+I(i+1,j+1)-I(i-1,j+1)、およびgy(i,j)=I(i-1,j+1)-I(i-1,j-1)+2*I(i,j+1)-2*I(i,j-1)+I(i+1,j+1)-I(i+1,j-1)。
いくつかの例では、[1,0,-1]フィルタが適用される。勾配は次のように計算され得る。gx(i,j)=I(i+1,j)-I(i-1,j)、およびgy(i,j)=I(i,j+1)-I(i,j-1)。いくつかの例では、他の勾配フィルタ、たとえばCannyフィルタが適用され得る。
勾配正規化のために、計算された勾配は、改良オフセット導出において使用される前に(たとえば、ΔIを計算する前に)正規化されてもよく、または、正規化は改良オフセット導出の後に行われてもよい。丸めプロセスは正規化の間に適用され得る。たとえば、[1,0,-1]フィルタが適用される場合、正規化は、1を入力値に加算し、次いで1だけ右シフトすることによって実行される。入力が2のN乗によりスケーリングされる場合、正規化は、1<<Nを加算し、次いで(N+1)だけ右シフトすることによって実行される。
境界における勾配について、予測ブロックの境界における勾配は、各境界においてS/2だけ予測ブロックを延長することによって計算されてもよく、Sは勾配計算のためのフィルタリングステップである。一例では、延長された予測サンプルは、インター予測のための予測ブロックと同じ動きベクトルを使用することによって生成される(動き補償)。いくつかの例では、延長された予測サンプルは、同じ動きベクトルを使用することによって、しかし、動き補償における補間処理のためにより短いフィルタを使用することによって生成される。いくつかの例では、延長された予測サンプルは、整数動き補償のために丸められた動きベクトルを使用することによって生成される。いくつかの例では、延長された予測サンプルはパディングによって生成され、パディングは境界サンプルを複製することによって実行される。いくつかの例では、予測ブロックがサブブロックベースの動き補償によって生成される場合、延長された予測サンプルは、最も近いサブブロックの動きベクトルを使用することによって生成される。いくつかの例では、予測ブロックがサブブロックベースの動き補償によって生成される場合、延長された予測サンプルは、1つの代表的な動きベクトルを使用することによって生成される。一例では、代表的な動きベクトルは、予測ブロックの中心にある動きベクトルであり得る。一例では、代表的な動きベクトルは、境界サブブロックの動きベクトルを平均化することによって導出され得る。
ハードウェアにおける並列処理またはパイプラインフレンドリーな設計を促すために、サブブロックベースの勾配導出が適用され得る。sbWおよびsbHと表記されるサブブロックの幅および高さは、sbW=min(blkW,SB_WIDTH)およびsbH=min(blkH,SB_HEIGHT)のように決定され得る。この式において、blkWおよびblkHはそれぞれ、予測ブロックの幅および高さである。SB_WIDTHおよびSB_HEIGHTは2つの所定の変数である。一例では、SB_WIDTHおよびSB_HEIGHTはともに16に等しい。
水平変位および垂直変位について、改良導出において使用される水平変位Δvx(i,j)および垂直変位Δvy(i,j)は、いくつかの例では、インター予測モードに応じて決定され得る。しかしながら、例示的な技法は、インター予測モードに基づいて水平変位および垂直変位を決定することには限定されない。
小ブロックサイズインターモード(たとえば、インター予測される小さいサイズのブロック)では、最悪の場合のメモリ帯域幅を減らすために、小さいブロックのためのインター予測モードが無効にされ、または制約され得る。たとえば、4×4以下のブロックのためのインター予測は無効にされ、4×8、8×4、4×16、および16×4のための双方向予測は無効にされ得る。それらの小さいブロックのための補間プロセスにより、メモリ帯域幅は増大し得る。それでも、最悪の場合のメモリ帯域を増やすことなく、それらの小さいブロックに、補間なしで整数動き補償を適用することができる。
1つまたは複数の例示的な技法では、整数動き補償および勾配ベースの予測改良とともに、一部のまたはすべてのそれらの小さいブロックに対して、インター予測が有効にされ得る。まず、動きベクトルが動き補償のための整数動きベクトルへと丸められる。次いで、丸めの残り、すなわち動きベクトルのサブペル部分が、勾配ベースの予測改良のためのΔvx(i,j)およびΔvy(i,j)として使用される。たとえば、小さいブロックのための動きベクトルが(2.25, 5.75)である場合、動き補償のために使用される整数動きベクトルは(2, 6)であり、水平変位(たとえば、Δvx(i,j))は0.25であり、垂直変位(たとえば、Δvy(i,j))は0.75である。この例では、水平成分および垂直成分の精度レベルは0.25(または1/4)である。たとえば、水平変位および垂直変位は、0.25ずつインクリメントされ得る。
いくつかの例では、小ブロックサイズインターモードについて、勾配ベースの予測改良は利用可能であり得るが、それは、小さいサイズのブロックがマージモードでインター予測される場合のみである。マージモードの例が以下で説明される。いくつかの例では、小さいサイズのインターモードについて、勾配ベースの予測改良は、整数動きモードを有するブロックに対して無効にされ得る。整数動きモードでは、1つまたは複数の動きベクトル(たとえば、シグナリングされた動きベクトル)は整数である。いくつかの例では、より大きいサイズのブロックに対しても、ブロックが整数動きモードでインター予測される場合、勾配ベースの予測改良はそのようなブロックに対して無効にされ得る。
動き情報が空間的または時間的に隣接するコーディングされたブロックから導出されるような、インター予測モードの例である普通のマージモードでは、Δvx(i,j)およびΔvy(i,j)は、動きベクトル丸めプロセスの残余であり得る(たとえば、動きベクトル(2.25, 5.75)の上の例と同様)。一例では、時間動きベクトル予測子は、現在のピクチャと参照ピクチャとの間のピクチャ順序カウント差分に従って、時間動きバッファにおいて動きベクトルをスケーリングすることによって導出される。丸めプロセスは、スケーリングされた動きベクトルをある精度に丸めるために実行され得る。残余は、Δvx(i,j)およびΔvy(i,j)として使用され得る。残余の精度(すなわち、水平変位および垂直変位の精度レベル)は、事前定義することができ、動きベクトル予測の精度より高くてもよい。たとえば、動きベクトル精度が1/16である場合、残余の精度は1/(16*MaxBlkSize)であり、MaxBlkSizeは最大ブロックサイズである。言い換えると、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)の精度レベルは1/(16*MaxBlkSize)である。
インター予測モードの例である動きベクトル差分を伴うマージモード(MMVD)では、動き情報を表現するために、マージインデックスと一緒に動きベクトル差分がシグナリングされる。いくつかの技法では、動きベクトル差分(たとえば、実際の動きベクトルと動きベクトル予測子との間の差分)は、動きベクトルと同じ精度を有する。本開示において説明される1つまたは複数の例では、動きベクトル差分はより高い精度を有することが許容され得る。シグナリングされる動きベクトル差分がまず、動きベクトル精度へと丸められ、マージインデックスによって示される動きベクトルが、動き補償のための最後の動きベクトルを生成するために加算される。1つまたは複数の例において、丸めの後の残余部分(たとえば、動きベクトル差分の丸められた値と動きベクトル差分の元の値との間の差分)が、勾配ベースの予測改良のための水平変位および垂直変位として使用され得る(たとえば、Δvx(i,j)およびΔvy(i,j)として使用される)。いくつかの例では、Δvx(i,j)およびΔvy(i,j)は、動きベクトル差分の候補としてシグナリングされ得る。
デコーダ側の動きベクトル改良モードでは、元の双予測ブロックを生成するために、元の動きベクトルを使用する動き補償が実行され、リスト0予測とリスト1予測との間の差分が計算され、これはDistOrigと表記される。リスト0は、インター予測のために使用される可能性があり得る参照ピクチャのリストを含む第1の参照ピクチャリスト(RefPicList0)を指す。リスト1は、インター予測のために使用される可能性があり得る参照ピクチャのリストを含む第2の参照ピクチャリスト(RefPicList1)を指す。次いで、リスト0およびリスト1における動きベクトルが、最も近い整数位置に丸められる。すなわち、リスト0の中のピクチャを指す動きベクトルは最も近い整数位置に丸められ、リスト1の中のピクチャを指す動きベクトルは最も近い整数位置に丸められる。整数変位の範囲を探索して、リスト0予測において特定されるピクチャのブロックとリスト1において特定されるピクチャのブロックとの間の最も小さいひずみDistNewを有する変位のペアを、動き補償のための新しい整数動きベクトルを使用して見つけるために、探索アルゴリズムが使用される。DistNewがDistOrigより小さい場合、リスト0予測とリスト1予測の両方における予測改良のためのΔvx(i,j)およびΔvy(i,j)を導出するために、新しい整数動きベクトルが双方向オプティカルフロー(BDOF)へ供給される。それ以外の場合、予測改良のための元のリスト0予測およびリスト1予測に対して、BDOFが実行される。
アフィンモードでは、動きフィールドが各ピクセルのために導出され得る(たとえば、動きベクトルがピクセルごとに決定され得る)。しかしながら、複雑さを減らしてメモリ帯域幅を下げるために、4×4ベースの動きフィールドがアフィン動き補償のために使用される。たとえば、ピクセルごとに動きベクトルを決定するのではなく、動きベクトルがサブブロックのために決定され、一例として、1つのサブブロックは4×4である。いくつかの他のサブブロックサイズ、たとえば4×2、2×4、または2×2も使用され得る。1つまたは複数の例では、アフィン動き補償を改善するために、勾配ベースの予測改良が使用され得る。ブロックの勾配は上で説明されたように計算され得る。アフィン動きモデル
を仮定すると、a、b、c、d、e、およびfは、少数の例として、制御点動きベクトルならびにブロックの長さおよび幅に基づいて、ビデオエンコーダ200およびビデオデコーダ300によって決定される値である。いくつかの例では、a、b、c、d、e、およびfの値はシグナリングされ得る。
以下は、a、b、c、d、e、およびfを決定するいくつかの例示的な方法を説明する。ビデオコーダ(たとえば、ビデオエンコーダ200またはビデオデコーダ300)では、ピクチャは、アフィンモードにおいて、ブロックベースのコーディングのためにサブブロックへと区分される。ブロックのためのアフィン動きモデルはまた、同じ行の中にない3つの異なる位置における3つの動きベクトル(MV)
、
、および
によって記述され得る。これらの3つの位置は通常は制御点と呼ばれ、3つの動きベクトルは制御点動きベクトル(CPMV)と呼ばれる。3つの制御点がブロックの3つの角にある場合、アフィン動きを
と記述することができ、blkWおよびblkHはブロックの幅および高さである。
アフィンモードでは、ビデオエンコーダ200およびビデオデコーダ300は、サブブロックの代表的な座標(たとえば、サブブロックの中心の位置)を使用して各サブブロックのための動きベクトルを決定し得る。一例では、ブロックは重複しないサブブロックへと区分される。ブロック幅はblkWであり、ブロック高さはblkHであり、サブブロック幅はsbWであり、サブブロック高さはsbHであり、そうすると、blkH/sbH行のサブブロックがあり、各行にblkW/sbW個のサブブロックがある。6パラメータのアフィン動きモデルでは、i番目の行(0<=i<blkW/sbW)およびj番目の列(0<=j<blkH/sbH)におけるサブブロックのための動きベクトル(サブブロックMVと呼ばれる)は、次のように導出される。
上の式から、変数a、b、c、d、e、およびfは、次のように定義され得る。
インター予測モードの例であるアフィンモードでは、ビデオエンコーダ200およびビデオデコーダ300は、以下の方法のうちの少なくとも1つによって変位(たとえば、水平変位または垂直変位)を決定し得る。以下は例であり、限定するものと見なされるべきではない。ビデオデコーダ200およびビデオデコーダ300がアフィンモードのための変位(たとえば、水平変位または垂直変位)を決定し得る、他の方法があり得る。
4×4のサブブロックベースのアフィンモード補償では、2×2ベースの変位導出について、各々の2×2のサブブロックにおける変位は同じである。各々の4×4のサブブロックにおいて、4×4の中の4つの2×2のサブブロックに対するΔv(i,j)は、次のように計算される。
1×1の変位導出では、各サンプルのための変位が導出される。4×4の中の左上のサンプルの座標は(0,0)であってもよく、この場合、Δv(i,j)は次のように導出される。
いくつかの例では、右シフト演算として実施される2による除算が、改良オフセット計算に移され得る。たとえば、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)を導出するときに2による除算の演算を実行するのではなく、ビデオエンコーダ200およびビデオデコーダ300は、ΔIを決定すること(たとえば、改良オフセット)の一部として、2による除算の演算を実行し得る。
4×2のサブブロックベースのアフィン動き補償では、動きベクトル記憶のための動きフィールドは依然として4×4である。しかしながら、アフィン動き補償は4×2である。4×4のサブブロックのための動きベクトル(MV)は(vx,vy)であってもよく、その場合、左の4×2の動き補償のためのMVは(vx-a,vy-c)であり、左の4×2の動き補償のためのMVは(vx+a,vy+c)である。
2×2ベースの変位導出では、2×2ベースの変位導出において、各々の2×2のサブブロックにおける変位は同じである。各々の4×2のサブブロックにおいて、4×4の中の2つの2×2のサブブロックに対するΔv(i,j)は、次のように計算される。
1×1の変位導出では、各サンプルのための変位が導出される。4×2の中の左上のサンプルの座標を(0,0)とすると、Δv(i,j)は次のように導出される。
右シフト演算として実施され得る2による除算が、改良オフセット計算に移され得る。たとえば、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)を導出するときに2による除算の演算を実行するのではなく、ビデオエンコーダ200およびビデオデコーダ300は、ΔIを決定すること(たとえば、改良オフセット)の一部として、2による除算の演算を実行し得る。
2×4のサブブロックベースのアフィン動き補償では、動きベクトル記憶のための動きフィールドは依然として4×4である。しかしながら、アフィン動き補償は2×4である。4×4のサブブロックのためのMVは(vx,vy)であってもよく、その場合、左の4×2の動き補償のためのMVは(vx-b,vy-d)であり、左の4×2の動き補償のためのMVは(vx+b,vy+d)である。
2×2ベースの変位導出では、各々の2×2のサブブロックにおける変位は同じである。各々の2×4のサブブロックにおいて、2×4の中の2つの2×2のサブブロックに対するΔv(i,j)は、次のように計算される。
1×1の変位導出では、1×1ベースの変位導出において、各サンプルのための変位が導出される。2×4の中の左上のサンプルの座標は(0,0)であってもよく、この場合、Δv(i,j)は次のように導出される。
右シフト演算として実施され得る2による除算が、改良オフセット計算に移され得る。たとえば、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)を導出するときに2による除算の演算を実行するのではなく、ビデオエンコーダ200およびビデオデコーダ300は、ΔIを決定すること(たとえば、改良オフセット)の一部として、2による除算の演算を実行し得る。
以下は、変位および勾配の精度を説明する。いくつかの例では、すべてのモードにおいて、水平変位および垂直変位に対して同じ精度が使用され得る。精度は、事前定義されていてもよく、または高水準シンタックスにおいてシグナリングされてもよい。したがって、水平変位および垂直変位が異なる精度を有する異なるモードから導出される場合、水平変位および垂直変位は事前定義された精度に丸められる。事前定義された精度の例は、1/4、1/8、1/16、1/32、1/64、1/128などである。
上で説明されたように、精度レベルとも呼ばれる精度は、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)がどの程度の精度であるかを示すことができ、水平変位および垂直変位は、上で説明された1つまたは複数の例を使用して、またはいくつかの他の技法を使用して決定され得る。一般に、精度レベルは、小数(たとえば、0.25、0.125、0.0625、0.03125、0.015625、0.0078125など)または分数(たとえば、1/4、1/8、1/16、1/32、1/64、1/128など)として定義される。たとえば、1/4の精度レベルでは、水平変位または垂直変位は、0.25のインクリメント(たとえば、0.25、0.5、または0.75)を用いて表され得る。1/8の精度レベルでは、水平変位および垂直変位は、0.125のインクリメント(たとえば、0.125、0.25、0.325、0.5、0.625、0.75、または0.825)を用いて表され得る。理解され得るように、精度レベルの数値が低いほど(たとえば、1/8は1/4より小さい)、インクリメントの粒度がより高く、値をより正確に表すことができる(たとえば、1/4の精度レベルでは、変位は最も近い4分の1の倍数に丸められるが、1/8の精度レベルでは、変位は最も近い8分の1の倍数に丸められる)。
水平変位および垂直変位は異なるインター予測モードに対して異なる精度レベルを有し得るので、ビデオエンコーダ200およびビデオデコーダ300は、異なるインター予測モードのための勾配ベースの予測改良を実行するために、異なる論理回路を含むように構成され得る。上で説明されたように、勾配ベースの予測改良を実行するために、ビデオエンコーダ200およびビデオデコーダ300は、演算gx(i,j)*Δvx(i,j)+gy(i,j)*Δvy(i,j)を実行してもよく、gxおよびgyはそれぞれ、予測ブロックのサンプルのうちのサンプルの第1のセットに基づく第1の勾配および予測ブロックのサンプルのうちのサンプルの第2のセットに基づく第2の勾配であり、ΔvxおよびΔvyはそれぞれ、水平変位および垂直変位である。理解され得るように、勾配ベースの予測改良のために、ビデオエンコーダ200およびビデオデコーダ300は、乗算と加算の演算を実行し、ならびに、計算において使用される一時的な結果を記憶するためにメモリを利用する必要があり得る。
しかしながら、数学演算を実行するための論理回路(たとえば、乗算回路、加算回路、メモリレジスタ)の能力は、論理回路が構成される精度レベルに制限され得る。たとえば、第1の精度レベルのために構成される論理回路は、水平変位または垂直変位がより精密な第2の精度レベルにある勾配予測改良に必要とされる動作を実行することが可能ではないことがある。
したがって、一部の技法は、異なるインター予測モードのための勾配ベースの予測改良を実行するために、異なる精度レベルのために構成される論理回路の異なるセットを利用する。たとえば、論理回路の第1のセットは、水平変位および/または垂直変位が0.25であるインター予測モードのための勾配ベースの予測改良を実行するように構成されることがあり、論理回路の第2のセットは、水平変位および/または垂直変位が0.125であるインター予測モードのための勾配ベースの予測改良を実行するように構成されることがある。これらの異なるセットの回路があることで、ビデオエンコーダ200およびビデオデコーダ300の全体のサイズが増すとともに、場合によっては電力を浪費する。
本開示において説明されるいくつかの例では、同じ勾配計算プロセスが、すべてのインター予測モードに対して使用され得る。言い換えると、異なるインター予測モードのための勾配ベースの予測改良を実行するために、同じ論理回路が使用され得る。たとえば、勾配の精度は、すべてのインター予測モードにおける予測改良に対して同じに保たれ得る。いくつかの例では、変位および勾配の精度のために、例示的な技法は、同じ(または統一された)予測改良プロセスが異なるモードに適用され得ることと、同じ予測改良モジュールが異なるモードに適用され得ることとを確実にしてもよい。
例として、ビデオエンコーダ200およびビデオデコーダ300は、水平変位および垂直変位のうちの少なくとも1つを、異なるインター予測モードに対して同じである精度レベルに丸めるように構成され得る。たとえば、水平変位および垂直変位が丸められる精度レベルが0.015625(1/64)である場合、水平変位および/または垂直変位の精度レベルがあるインター予測モードに対して1/4であると、水平変位および/または垂直変位の精度レベルは1/64に丸められる。水平変位および/または垂直変位の精度レベルが1/128である場合、水平変位および/または垂直変位の精度レベルは1/64に丸められる。
このようにして、勾配ベースの予測改良のための論理回路を、異なるインター予測モードのために再使用することができる。たとえば、上の例では、ビデオエンコーダ200およびビデオデコーダ300は、0.125の精度レベルのための論理回路を含んでもよく、この論理回路を異なるインター予測モードのために再使用することができ、それは、水平変位および/または垂直変位の精度レベルが0.125に丸められるからである。
いくつかの例では、本開示において説明される技法に従って丸めが実行されないとき、乗算タイプおよび累積タイプの演算のための論理回路は、それが比較的高水準の精度を有するように設計される場合、再使用され得る(たとえば、ある特定の精度レベルの乗算のために設計された論理回路は、より低い精度レベルの値の乗算演算を処理することができる)。しかしながら、シフト演算については、ある特定の精度のために設計された論理回路は、より低い精度レベルの値のシフト演算を処理することが可能ではないことがある。本開示において説明される例示的な技法と、説明された丸め技法を用いると、異なるインター予測モードのためのシフト演算のために論理回路を再使用することが可能であり得る。
一例では、予測改良オフセットは次のように導出される。
ΔI(i,j)=(gx (i,j)*Δvx(i,j)+gy(i,j)*Δvy(i,j)+offset)≫shift
上の式では、オフセットは1<<(shift-1)に等しく、shiftは事前定義された変位の精度および勾配によって決定され、異なるモードに対して固定されている。いくつかの例では、オフセットは0に等しい。
いくつかの例では、モードは、小ブロックサイズインターモード、普通のマージモード、動きベクトル差分を伴うマージモード、デコーダ側動きベクトル改良モード、およびアフィンモードなどの、水平変位および垂直変位に関して上で説明されたモードのうちの1つまたは複数を含み得る。モードはまた、双方向オプティカルフロー(BDOF)を含み得る。
各予測方向に対して、別個の改良があり得る。たとえば、双方向予測の場合、予測改良は、各予測方向に対して別々に実行され得る。改良の結果は、改良なしの場合の予測とビット幅が同じであることを確実にするために、ある範囲へと切り捨てられ得る。たとえば、改良の結果は16ビットの範囲へと切り捨てられる。上で述べられたように、例示的な技法は、2つの異なる方向における変位が同じ動きの軌跡にあることが想定される、BDOFにも適用することができる。
以下は、Nビット(たとえば、16ビット)乗算の制約を説明する。勾配ベースの予測改良の複雑さを減らすために、乗算はNビット(たとえば、16ビット)以内に保たれ得る。この例では、勾配および変位は、16ビットを超えないビットによって表現されることが可能であるべきである。そうではない場合、この例では、勾配または変位は16ビット以内になるように量子化される。たとえば、16ビットの表現を保つために、右シフトが適用され得る。
以下は、改良オフセットΔI(i,j)および改良結果の切り捨てを説明する。改良オフセットΔI(i,j)は、ある範囲へと切り捨てられる。一例では、この範囲は、元の予測信号の範囲によって決定される。ΔI(i,j)の範囲は元の予測信号の範囲と同じであってもよく、または範囲はスケーリングされた範囲であってもよい。スケールは、1/2、1/4、1/8などであってもよい。改良結果は、元の予測信号と同じ範囲(たとえば、予測ブロックの中のサンプルの範囲)を有するように切り捨てられる。切り捨てを実行するための式は次の通りである。
pbSamples[x][y]=Clip3(0,( 2BitDepth )-1, (predSamplesL0[x+1][y+1]+offset4+predSamplesL1[x+1][y+1]+bdofOffset)>>shift4)
このようにして、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックをインター予測するための予測ブロックを決定するように構成され得る。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、予測ブロックを指し示す動きベクトルまたはブロックベクトル(たとえば、イントラブロックコピーモードのための)を決定し得る。
ビデオエンコーダ200およびビデオデコーダ300は、予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のための水平変位または垂直変位のうちの少なくとも1つを決定し得る。水平変位の例はΔvxであり、垂直変位の例はΔvyである。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、インター予測モードに基づいて、予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のための水平変位または垂直変位のうちの少なくとも1つを決定し得る(たとえば、2つの例として、アフィンモードのために上の例示的な技法を使用してΔvxおよびΔvyを決定し、または、マージモードのために上の例示的な技法を使用してΔvxおよびΔvyを決定する)。
1つまたは複数の例によれば、ビデオエンコーダ200およびビデオデコーダ300は、水平変位および垂直変位のうちの少なくとも1つを、異なるインター予測モードに対して同じである精度レベルに丸め得る。異なるインター予測モードの例は、アフィンモードおよびBDOFを含む。たとえば、第1のインター予測モードにおいてインター予測される第1のブロックのための勾配ベースの予測改良を実行するための第1の水平変位または垂直変位の精度レベルは、第1の精度レベルであってもよく、第2のインター予測モードにおいてインター予測される第2のブロックのための勾配ベースの予測改良を実行するための第2の水平変位または垂直変位の精度レベルは、第2の精度レベルであってもよい。ビデオエンコーダ200およびビデオデコーダ300は、第1の水平変位または垂直変位の第1の精度レベルをこの精度レベルに丸め、第1の水平変位または垂直変位の第2の精度レベルを同じ精度レベルに丸めるように構成され得る。
いくつかの例では、精度レベルは、事前定義されていてもよく(たとえば、ビデオエンコーダ200およびビデオデコーダ300にあらかじめ記憶されていてもよく)、またはシグナリングされてもよい(たとえば、ビデオエンコーダ200によって定義され、ビデオデコーダ300にシグナリングされてもよい)。いくつかの例では、精度レベルは1/64であってもよい。
ビデオエンコーダ200およびビデオデコーダ300は、水平変位または垂直変位のうちの丸められた少なくとも1つに基づいて、1つまたは複数の改良オフセットを決定するように構成され得る。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、水平変位または垂直変位のうちのそれぞれの丸められた少なくとも1つを使用して、予測ブロックの各サンプルのためのΔI(i,j)を決定し得る。すなわち、ビデオエンコーダ200およびビデオデコーダ300は、予測ブロックの各サンプルのための改良オフセットを決定し得る。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、丸められた水平変位および垂直変位を利用して、改良オフセット(たとえば、ΔI)を決定し得る。
前に説明されたように、勾配ベースの予測改良を実行するために、ビデオエンコーダ200およびビデオデコーダ300は、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第1のセットに基づいて第1の勾配を決定してもよく(たとえば、gx(i,j)を決定し、サンプルの第1のセットはgx(i,j)を決定するために使用されるサンプルである)、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第2のセットに基づいて第2の勾配を決定してもよい(たとえば、gy(i,j)を決定し、サンプルの第2のセットはgy(i,j)を決定するために使用されるサンプルである)。ビデオエンコーダ200およびビデオデコーダ300は、丸められた水平変位および垂直変位ならびに第1の勾配および第2の勾配に基づいて、改良オフセットを決定し得る。
ビデオエンコーダ200およびビデオデコーダ300は、決定された1つまたは複数の改良オフセットに基づいて予測ブロックの1つまたは複数のサンプルを修正して、修正された予測ブロック(たとえば、修正された予測ブロックを形成する1つまたは複数の修正されたサンプル)を生成し得る。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、ΔI(i,j)をI(i,j)に加算し、またはそれから減算してもよく、I(i,j)は位置(i,j)に位置する予測ブロックの中のサンプルを指す。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、1つまたは複数の改良オフセットを切り捨ててもよい(たとえば、ΔI(i,j)を切り捨ててもよい)。ビデオエンコーダ200およびビデオデコーダ300は、切り取られた1つまたは複数の改良オフセットに基づいて、予測ブロックの1つまたは複数のサンプルを修正し得る。
符号化のために、ビデオエンコーダ200は、(たとえば、修正された予測ブロックの修正されたサンプルに基づいて)現在のブロックと修正された予測ブロックとの間の差分を示す、(たとえば、残差ブロックの)残差値を決定し、残差値を示す情報をシグナリングし得る。復号のために、ビデオデコーダ300は、残差値を示す情報を受信し、修正された予測ブロック(たとえば、修正された予測ブロックの修正されたサンプル)および残差値に基づいて(たとえば、残差値を修正されたサンプルに加算することによって)現在のブロックを再構築し得る。
図2Aおよび図2Bは、例示的な4分木2分木(QTBT)構造130および対応するコーディングツリーユニット(CTU)132を示す概念図である。実線は4分木分割を表し、点線は2分木分割を示す。2分木の各分割(すなわち、非リーフ)ノードでは、どの分割タイプ(すなわち、水平または垂直)が使用されるかを示すために1つのフラグがシグナリングされ、ここで、この例では、0が水平分割を示し、1が垂直分割を示す。4分木分割の場合、4分木ノードはブロックをサイズが等しい4個のサブブロックに水平および垂直に分割するので、分割タイプを示す必要はない。したがって、ビデオエンコーダ200は、QTBT構造130の領域木レベル(すなわち、実線)のための(分割情報などの)シンタックス要素およびQTBT構造130の予測木レベル(すなわち、破線)のための(分割情報などの)シンタックス要素を符号化し得、ビデオデコーダ300は、それらのシンタックス要素を復号し得る。ビデオエンコーダ200は、QTBT構造130の末端リーフノードによって表されるCUのための、予測データおよび変換データなどのビデオデータを符号化し得、ビデオデコーダ300は、そのビデオデータを復号し得る。
一般に、図2BのCTU132は、第1のレベルおよび第2のレベルでQTBT構造130のノードに対応するブロックのサイズを定義するパラメータに関連付けられ得る。これらのパラメータは、CTUサイズ(サンプル中のCTU132のサイズを表す)、最小4分木サイズ(MinQTSize、最小の許容される4分木リーフノードサイズを表す)、最大2分木サイズ(MaxBTSize、最大の許容される2分木ルートノードサイズを表す)、最大2分木深度(MaxBTDepth、最大の許容される2分木深度を表す)、および最小2分木サイズ(MinBTSize、最小の許容される2分木リーフノードサイズを表す)を含み得る。
CTUに対応するQTBT構造のルートノードは、QTBT構造の第1のレベルで4個の子ノードを有することがあり、子ノードの各々は、4分木区分に従って区分されることがある。すなわち、第1のレベルのノードは、(子ノードを有しない)リーフノードであるか、4個の子ノードを有するかのいずれかである。QTBT構造130の例は、分岐のための実線を有する親ノードと子ノードとを含むようなノードを表す。第1のレベルのノードが最大の許容される2分木ルートノードサイズ(MaxBTSize)よりも大きくない場合、これらのノードはそれぞれの2分木によってさらに区分され得る。1つのノードの2分木分割は、分割の結果として生じるノードが最小の許容される2分木リーフノードサイズ(MinBTSize)または最大の許容される2分木深度(MaxBTDepth)に達するまで繰り返され得る。QTBT構造130の例は、分岐のための破線を有するようなノードを表す。2分木リーフノードはコーディングユニット(CU)と呼ばれ、コーディングユニット(CU)は、これ以上の区分なしで、予測(たとえば、イントラピクチャ予測またはインターピクチャ予測)および変換のために使用される。上記で説明したように、CUは「ビデオブロック」または「ブロック」と呼ばれることもある。
QTBT区分構造の一例では、CTUサイズは128×128(ルーマサンプルおよび2つの対応する64×64クロマサンプル)として設定され、MinQTSizeは16×16として設定され、MaxBTSizeは64×64として設定され、(幅と高さの両方についての)MinBTSizeは4として設定され、MaxBTDepthは4として設定される。4分木リーフノードを生成するために、4分木区分がまずCTUに適用される。4分木リーフノードは、16×16(すなわち、MinQTSize)から128×128(すなわち、CTUサイズ)までのサイズを有し得る。リーフ4分木ノードは、128×128である場合、サイズがMaxBTSize(すなわち、この例では64×64)を超えるので、2分木によってさらに分割されない。それ以外の場合、リーフ4分木ノードは2分木によってさらに区分される。したがって、4分木リーフノードは2分木のルートノードでもあり、0としての2分木深度を有する。2分木深度がMaxBTDepth(この例では4)に達するとき、さらなる分割は許可されない。2分木ノードがMinBTSize(この例では4)に等しい幅を有するとき、それはさらなる水平分割が許可されないことを示唆する。同様に、MinBTSizeに等しい高さを有する2分木ノードは、その2分木ノードに対してさらなる垂直分割が許可されないことを示唆する。上述のように、2分木のリーフノードはCUと呼ばれ、さらなる区分なしで予測および変換に従ってさらに処理される。
図3は、本開示の技法を実行し得る例示的なビデオエンコーダ200を示すブロック図である。図3は説明のために提供され、本開示において広く例示および説明するような技法の限定と見なされるべきではない。説明のために、本開示は、HEVCビデオコーディング規格および開発中のH.266ビデオコーディング規格などのビデオコーディング規格の文脈でビデオエンコーダ200について説明する。しかしながら、本開示の技法はこれらのビデオコーディング規格に限定されず、概してビデオ符号化および復号に適用可能である。
図3の例では、ビデオエンコーダ200は、ビデオデータメモリ230、モード選択ユニット202、残差生成ユニット204、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、フィルタユニット216、復号されたピクチャバッファ(DPB)218、およびエントロピー符号化ユニット220を含む。ビデオデータメモリ230、モード選択ユニット202、残差生成ユニット204、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、フィルタユニット216、DPB218、およびエントロピー符号化ユニット220のいずれかまたはすべては、1つもしくは複数のプロセッサにおいてまたは処理回路において実装され得る。さらに、ビデオエンコーダ200は、これらおよび他の機能を実行するための追加または代替のプロセッサまたは処理回路を含み得る。
ビデオデータメモリ230は、ビデオエンコーダ200の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオエンコーダ200は、たとえば、ビデオソース104(図1)から、ビデオデータメモリ230に記憶されたビデオデータを受信し得る。DPB218は、ビデオエンコーダ200による後続のビデオデータの予測において使用するための参照ビデオデータを記憶する参照ピクチャメモリとして働き得る。ビデオデータメモリ230およびDPB218は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ230およびDPB218は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ230は、図示のように、ビデオエンコーダ200の他の構成要素とともにオンチップであってもよく、またはそれらの構成要素に対してオフチップであってもよい。
本開示では、ビデオデータメモリ230への言及は、そのようなものとして特に説明されていない限り、ビデオエンコーダ200の内部のメモリ、または、そのようなものとして特に説明されていない限り、ビデオエンコーダ200の外部のメモリに限定されるものとして解釈されるべきではない。むしろ、ビデオデータメモリ230への言及は、符号化するためにビデオエンコーダ200が受信するビデオデータ(たとえば、符号化されるべき現在のブロックのためのビデオデータ)を記憶する参照メモリとして理解されるべきである。図1のメモリ106はまた、ビデオエンコーダ200の様々なユニットからの出力の一時的な記憶を提供し得る。
図3の様々なユニットは、ビデオエンコーダ200によって実行される動作を理解することを助けるために図示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。固定機能回路は、特定の機能を提供する回路を指し、実行され得る動作に対してプリセットされる。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作において柔軟な機能を提供する。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方法でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は(たとえば、パラメータを受信するまたはパラメータを出力するための)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは概して不変である。いくつかの例では、ユニットのうちの1つまたは複数は別個の回路ブロック(固定機能またはプログラマブル)であってもよく、いくつかの例では、1つまたは複数のユニットは集積回路であってもよい。
ビデオエンコーダ200は、算術論理ユニット(ALU)、初等関数ユニット(EFU)、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含み得る。ビデオエンコーダ200の動作がプログラマブル回路によって実行されるソフトウェアを使用して実行される例では、メモリ106(図1)が、ビデオエンコーダ200が受信および実行するソフトウェアのオブジェクトコードを記憶してもよく、またはビデオエンコーダ200内の別のメモリ(図示せず)が、そのような命令を記憶してもよい。
ビデオデータメモリ230は、受信されたビデオデータを記憶するように構成される。ビデオエンコーダ200は、ビデオデータメモリ230からビデオデータのピクチャを取り出し、ビデオデータを残差生成ユニット204およびモード選択ユニット202に提供し得る。ビデオデータメモリ230中のビデオデータは、符号化されるべき生のビデオデータであり得る。
モード選択ユニット202は、動き推定ユニット222、動き補償ユニット224、イントラ予測ユニット226、勾配ベース予測改良(GBPR)ユニット227を含む。モード選択ユニット202は、他の予測モードに従ってビデオ予測を実行するための追加の機能ユニットを含み得る。例として、モード選択ユニット202は、パレットユニット、(動き推定ユニット222および/または動き補償ユニット224の一部であり得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含み得る。
GBPRユニット227は動き推定ユニット222および動き補償ユニット224とは別個であるものとして示されているが、いくつかの例では、GBPRユニット227は、動き推定ユニット222および/または動き補償ユニット224の一部であってもよい。GBPRユニット227は、理解を容易にするために、動き推定ユニット222および動き補償ユニット224とは別々に示されているが、限定するものと見なされるべきではない。
モード選択ユニット202は、一般に、符号化パラメータの組合せおよびそのような組合せに対する結果として生じるレートひずみ値をテストするために複数の符号化パスを協調させる。符号化パラメータは、CUへのCTUの区分、CUのための予測モード、CUの残差値のための変換タイプ、CUの残差値のための量子化パラメータなどを含み得る。モード選択ユニット202は、その他のテストされた組合せよりも良いレートひずみ値を有する符号化パラメータの組合せを最終的に選択し得る。
ビデオエンコーダ200は、ビデオデータメモリ230から取り出されたピクチャを一連のCTUに区分し、スライス内に1つまたは複数のCTUをカプセル化し得る。モード選択ユニット202は、上記で説明したHEVCのQTBT構造または4分木構造などのツリー構造に従ってピクチャのCTUを区分し得る。上記で説明したように、ビデオエンコーダ200は、ツリー構造に従ってCTUを区分することから1つまたは複数のCUを形成し得る。そのようなCUは、一般に、「ビデオブロック」または「ブロック」と呼ばれることもある。
一般に、モード選択ユニット202はまた、現在のブロック(たとえば、現在のCU、またはHEVCでは、PUおよびTUの重複する部分)のための予測ブロックを生成するために、その構成要素(たとえば、動き推定ユニット222、動き補償ユニット224、イントラ予測ユニット226、およびGBPRユニット227)を制御する。現在のブロックのインター予測の場合、動き推定ユニット222は、1つまたは複数の参照ピクチャ(たとえば、DPB218に記憶された1つまたは複数の以前にコーディングされたピクチャ)中の1つまたは複数の厳密に一致する参照ブロックを識別するために動き探索を実行し得る。具体的には、動き推定ユニット222は、たとえば、絶対差分和(SAD)、2乗差分和(SSD)、平均絶対差(MAD)、平均2乗差(MSD)などに従って、潜在的な参照ブロックが現在のブロックにどのくらい類似しているかを表す値を計算し得る。動き推定ユニット222は、一般に、現在のブロックと考慮されている参照ブロックとの間のサンプルごとの差分を使用してこれらの計算を実行し得る。動き推定ユニット222は、現在のブロックに最も厳密に一致する参照ブロックを示す、これらの計算の結果として生じる最も低い値を有する参照ブロックを識別し得る。
動き推定ユニット222は、現在のピクチャ中の現在のブロックの位置に対する参照ピクチャ中の参照ブロックの位置を定義する1つまたは複数の動きベクトル(MV)を形成し得る。次いで、動き推定ユニット222は動きベクトルを動き補償ユニット224に提供し得る。たとえば、単方向インター予測の場合、動き推定ユニット222は単一の動きベクトルを提供し得るが、双方向インター予測の場合、動き推定ユニット222は2つの動きベクトルを提供し得る。次いで、動き補償ユニット224は、動きベクトルを使用して予測ブロックを生成し得る。たとえば、動き補償ユニット224は、動きベクトルを使用して参照ブロックのデータを取り出し得る。別の例として、動きベクトルがフラクショナルサンプル精度を有する場合、動き補償ユニット224は、1つまたは複数の補間フィルタに従って予測ブロックのための値を補間し得る。さらに、双方向インター予測の場合、動き補償ユニット224は、それぞれの動きベクトルによって識別された2つの参照ブロックのためのデータを取り出し、たとえば、サンプルごとの平均化または重み付けされた平均化によって、取り出されたデータを合成し得る。
別の例として、イントラ予測またはイントラ予測コーディングの場合、イントラ予測ユニット226は、現在のブロックに隣接するサンプルから予測ブロックを生成し得る。たとえば、方向モードの場合、イントラ予測ユニット226は、一般に、隣接サンプルの値を数学的に合成し、これらの計算された値を現在のブロックにわたる定義された方向にポピュレートして、予測ブロックを生成し得る。別の例として、DCモードの場合、イントラ予測ユニット226は、現在のブロックに対する隣接サンプルの平均を計算し、予測ブロックのサンプルごとにこの結果として生じる平均を含めるべき予測ブロックを生成し得る。
GBPRユニット227は、勾配ベースの予測改良のために、本開示において説明される例示的な技法を実行するように構成され得る。たとえば、GBPRユニット227は、動き補償ユニット224とともに、現在のブロックをインター予測するための予測ブロックを(たとえば、動き推定ユニット222によって決定される動きベクトルに基づいて)決定し得る。GBPRユニット227は、予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)を決定し得る。一例として、GBPRユニット227は、現在のブロックをインター予測するための、モード選択ユニット202によって行われる決定に基づいて、インター予測モードを決定し得る。いくつかの例では、GBPRユニット227は、決定されたインター予測モードに基づいて水平変位および垂直変位を決定し得る。
GBPRユニット227は、水平変位および垂直変位を、異なるインター予測モードに対して同じである精度レベルに丸め得る。たとえば、現在のブロックは第1の現在のブロックであってもよく、予測ブロックは第1の予測ブロックであってもよく、水平変位および垂直変位は第1の水平変位または垂直変位であってもよく、丸められた水平変位および垂直変位は第1の丸められた水平変位および垂直変位であってもよい。いくつかの例では、GBPRユニット227は、第2の現在のブロックをインター予測するための第2の予測ブロックを決定し、第2の予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために第2の水平変位および垂直変位を決定し得る。GBPRユニット227は、第1の水平変位および垂直変位が丸められた同じ精度レベルへと第2の水平変位および垂直変位を丸めて、第2の丸められた水平変位および垂直変位を生成し得る。
いくつかの場合、第1の現在のブロックをインター予測するためのインター予測モードおよび第2の現在のブロックのためのインター予測モードは異なり得る。たとえば、異なるインター予測モードの第1のモードはアフィンモードであり、異なるインター予測モードの第2のモードは双方向オプティカルフロー(BDOF)モードである。
水平変位および垂直変位が丸められる精度レベルは、GBPRユニット227による使用のために事前定義されて記憶されてもよく、または、GBPRユニット227が精度レベルを決定してもよく、ビデオエンコーダ200が精度レベルをシグナリングしてもよい。一例として、精度レベルは1/64である。
GBPRユニット227は、丸められた水平変位および垂直変位に基づいて、1つまたは複数の改良オフセットを決定し得る。たとえば、GBPRユニット227は、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第1のセットに基づいて第1の勾配を決定してもよく(たとえば、上で説明された予測ブロックのサンプルを使用してgx(i,j)を決定する)、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第2のセットに基づいて第2の勾配を決定してもよい(たとえば、上で説明された予測ブロックのサンプルを使用してgy(i,j)を決定する)。GBPRユニット227は、丸められた水平変位および垂直変位ならびに第1の勾配および第2の勾配に基づいて、1つまたは複数の改良オフセットを決定し得る。いくつかの例では、GBPRユニット227は、1つまたは複数の改良オフセットの値が高すぎる(たとえば、しきい値より大きい)場合、1つまたは複数の改良オフセットを切り捨て得る。
GBPRユニット227は、決定された1つもしくは複数の改良オフセットまたは切り捨てられた1つもしくは複数の改良オフセットに基づいて予測ブロックの1つまたは複数のサンプルを修正して、修正された予測ブロック(たとえば、修正された予測ブロックを形成する1つまたは複数の修正されたサンプル)を生成し得る。たとえば、GBPRユニット227は、gx(i,j)*Δvx(i,j)+gy(i,j)*Δvy(i,j)を決定してもよく、gx(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための第1の勾配であり、Δvx(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための丸められた水平変位であり、gy(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための第2の勾配であり、Δvy(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための丸められた垂直変位である。いくつかの例では、ΔvxおよびΔvyは、予測ブロックのサンプル(i,j)の各々に対して同じであり得る。
得られた修正されたサンプルは、勾配ベースの予測改良において予測ブロック(たとえば、修正された予測ブロック)を形成し得る。すなわち、修正された予測ブロックは、勾配ベースの予測改良において予測ブロックとして使用される。モード選択ユニット202は、予測ブロックを残差生成ユニット204に提供する。残差生成ユニット204は、ビデオデータメモリ230から現在のブロックの生の符号化されていないバージョンを受信し、モード選択ユニット202から予測ブロックを受信する。残差生成ユニット204は、現在のブロックと予測ブロックとの間のサンプルごとの差分を計算する。結果として生じるサンプルごとの差分は、現在のブロックのための残差ブロックを定義する。いくつかの例では、残差生成ユニット204はまた、残差差分パルスコード変調(RDPCM)を使用して残差ブロックを生成するために、残差ブロック中のサンプル値の間の差分を決定し得る。いくつかの例では、残差生成ユニット204は、バイナリ減算を実行する1つまたは複数の減算器回路を使用して形成され得る。
モード選択ユニット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サイズのための非対称区分をサポートし得る。
モード選択ユニット202がCUをPUにさらに区分しない例では、各CUはルーマコーディングブロックおよび対応するクロマコーディングブロックに関連付けられ得る。上記のように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがある。ビデオエンコーダ200およびビデオデコーダ300は、2N×2N、2N×N、またはN×2NのCUサイズをサポートし得る。
数例として、イントラブロックコピーモードコーディング、アフィンモードコーディング、および線形モデル(LM)モードコーディングなどの他のビデオコーディング技法の場合、モード選択ユニット202は、コーディング技法に関連付けられたそれぞれのユニットを介して、符号化されている現在のブロックのための予測ブロックを生成する。パレットモードコーディングなどのいくつかの例では、モード選択ユニット202は予測ブロックを生成しないことがあり、その代わりに、選択されたパレットに基づいてブロックを再構成する方法を示すシンタックス要素を生成し得る。そのようなモードでは、モード選択ユニット202は、符号化されるべきこれらのシンタックス要素をエントロピー符号化ユニット220に提供し得る。
上記で説明したように、残差生成ユニット204は、現在のブロックおよび対応する予測ブロックのためのビデオデータを受信する。次いで、残差生成ユニット204は現在のブロックのための残差ブロックを生成する。残差ブロックを生成するために、残差生成ユニット204は予測ブロックと現在のブロックとの間のサンプルごとの差分を計算する。
変換処理ユニット206は、変換係数のブロック(本明細書では「変換係数ブロック」と呼ばれる)を生成するために、1つまたは複数の変換を残差ブロックに適用する。変換処理ユニット206は、変換係数ブロックを形成するために、様々な変換を残差ブロックに適用し得る。たとえば、変換処理ユニット206は、離散コサイン変換(DCT)、方向変換、カルーネンレーベ変換(KLT)、または概念的に類似の変換を残差ブロックに適用し得る。いくつかの例では、変換処理ユニット206は、複数の変換、たとえば、回転変換などの、一次変換および二次変換を残差ブロックに対して実行し得る。いくつかの例では、変換処理ユニット206は、変換を残差ブロックに適用しない。
量子化ユニット208は、変換係数ブロック中で変換係数を量子化して、量子化された変換係数ブロックを生成し得る。量子化ユニット208は、現在のブロックに関連付けられた量子化パラメータ(QP)値に従って変換係数ブロックの変換係数を量子化し得る。ビデオエンコーダ200は(たとえば、モード選択ユニット202を介して)、CUに関連付けられたQP値を調整することによって、現在のブロックに関連付けられた係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらすことがあり、したがって、量子化された変換係数は変換処理ユニット206によって生成された元の変換係数よりも低い精度を有することがある。
逆量子化ユニット210および逆変換処理ユニット212は、それぞれ、逆量子化および逆変換を量子化された変換係数ブロックに適用して、変換係数ブロックから残差ブロックを再構成し得る。再構成ユニット214は、再構成された残差ブロックおよびモード選択ユニット202によって生成された予測ブロックに基づいて、(潜在的にある程度のひずみを伴うが)現在のブロックに対応する再構成されたブロックを生成し得る。たとえば、再構成ユニット214は、再構成された残差ブロックのサンプルをモード選択ユニット202によって生成された予測ブロックからの対応するサンプルに加えて、再構成されたブロックを生成し得る。
フィルタユニット216は、再構成されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。たとえば、フィルタユニット216は、CUの端部に沿ってブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。フィルタユニット216の動作は、いくつかの例では、スキップされ得る。
ビデオエンコーダ200は、再構成されたブロックをDPB218に記憶する。たとえば、フィルタユニット216の動作が必要とされない例では、再構成ユニット214は再構成されたブロックをDPB218に記憶し得る。フィルタユニット216の動作が必要とされる例では、フィルタユニット216はフィルタリングされた再構成されたブロックをDPB218に記憶し得る。動き推定ユニット222および動き補償ユニット224は、後で符号化されるピクチャのブロックをインター予測するために、再構成された(かつ潜在的にフィルタリングされた)ブロックから形成された参照ピクチャをDPB218から取り出し得る。加えて、イントラ予測ユニット226は、現在のピクチャ中の他のブロックをイントラ予測するために、現在のピクチャのDPB218中の再構成されたブロックを使用し得る。
一般に、エントロピー符号化ユニット220は、ビデオエンコーダ200の他の機能構成要素から受信されたシンタックス要素をエントロピー符号化し得る。たとえば、エントロピー符号化ユニット220は、量子化ユニット208からの量子化された変換係数ブロックをエントロピー符号化し得る。別の例として、エントロピー符号化ユニット220は、モード選択ユニット202からの予測シンタックス要素(たとえば、インター予測のための動き情報またはイントラ予測のためのイントラモード情報)をエントロピー符号化し得る。エントロピー符号化ユニット220は、ビデオデータの別の例であるシンタックス要素に対して1つまたは複数のエントロピー符号化動作を実行して、エントロピー符号化されたデータを生成し得る。たとえば、エントロピー符号化ユニット220は、コンテキスト適応型可変長コーディング(CAVLC)動作、CABAC動作、可変対可変(V2V)長コーディング動作、シンタックスベースのコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作をデータに対して実行し得る。いくつかの例では、エントロピー符号化ユニット220は、シンタックス要素がエントロピー符号化されないバイパスモードで動作し得る。
ビデオエンコーダ200は、スライスまたはピクチャのブロックを再構成するために必要とされるエントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。具体的には、エントロピー符号化ユニット220がビットストリームを出力し得る。
上記で説明した動作は、ブロックに関して説明されている。そのような説明は、ルーマコーディングブロックおよび/またはクロマコーディングブロックのための動作であるものとして理解されるべきである。上記で説明したように、いくつかの例では、ルーマコーディングブロックおよびクロマコーディングブロックは、CUのルーマ成分およびクロマ成分である。いくつかの例では、ルーマコーディングブロックおよびクロマコーディングブロックは、PUのルーマ成分およびクロマ成分である。
いくつかの例では、ルーマコーディングブロックに関して実行される動作は、クロマコーディングブロックのために繰り返される必要はない。一例として、ルーマコーディングブロックのための動きベクトル(MV)および参照ピクチャを識別するための動作は、クロマコーディングブロックのためのMVおよび参照ピクチャを識別するために繰り返される必要はない。むしろ、ルーマコーディングブロックのためのMVはクロマコーディングブロックのためのMVを決定するためにスケーリングされてもよく、参照ピクチャは同じであってもよい。別の例として、イントラ予測プロセスは、ルーマコーディングブロックおよびクロマコーディングブロックについて同じであってもよい。
図4は、本開示の技法を実行し得る例示的なビデオデコーダ300を示すブロック図である。図4は説明のために提供され、本開示において広く例示および説明するような技法を限定するものではない。説明のために、本開示は、VVCおよびHEVCの技法によるビデオデコーダ300について説明する。しかしながら、本開示の技法は、他のビデオコーディング規格に従って構成されたビデオコーディングデバイスによって実行され得る。
図4の例では、ビデオデコーダ300は、コーディングされたピクチャバッファ(CPB)メモリ320、エントロピー復号ユニット302、予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構成ユニット310、フィルタユニット312、および復号されたピクチャバッファ(DPB)314を含む。CPBメモリ320、エントロピー復号ユニット302、予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構成ユニット310、フィルタユニット312、およびDPB314のいずれかまたはすべては、1つもしくは複数のプロセッサにおいてまたは処理回路において実装され得る。さらに、ビデオデコーダ300は、これらおよび他の機能を実行するための追加または代替のプロセッサまたは処理回路を含み得る。
予測処理ユニット304は、動き補償ユニット316、イントラ予測ユニット318、および勾配ベース予測改良(GBPR)ユニット319を含む。予測処理ユニット304は、他の予測モードに従って予測を実行するための追加のユニットを含み得る。例として、予測処理ユニット304は、パレットユニット、(動き補償ユニット316の一部を形成し得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含み得る。他の例では、ビデオデコーダ300は、より多数の、より少数の、または異なる機能構成要素を含み得る。
GBPRユニット319は動き補償ユニット316とは別個であるものとして示されているが、いくつかの例では、GBPRユニット319は、動き補償ユニット316の一部であってもよい。GBPRユニット319は、理解を容易にするために、動き補償ユニット316とは別々に示されているが、限定するものと見なされるべきではない。
CPBメモリ320は、ビデオデコーダ300の構成要素によって復号されるべき、符号化されたビデオビットストリームなどのビデオデータを記憶し得る。CPBメモリ320に記憶されたビデオデータは、たとえば、コンピュータ可読媒体110(図1)から取得され得る。CPBメモリ320は、符号化されたビデオビットストリームからの符号化されたビデオデータ(たとえば、シンタックス要素)を記憶するCPBを含み得る。また、CPBメモリ320は、ビデオデコーダ300の様々なユニットからの出力を表す一時的なデータなどの、コーディングされたピクチャのシンタックス要素以外のビデオデータを記憶し得る。DPB314は、一般に、符号化されたビデオビットストリームの後続のデータまたはピクチャを復号するときにビデオデコーダ300が参照ビデオデータとして出力および/または使用し得る、復号されたピクチャを記憶する。CPBメモリ320およびDPB314は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。CPBメモリ320およびDPB314は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、CPBメモリ320は、ビデオデコーダ300の他の構成要素とともにオンチップであってもよく、またはそれらの構成要素に対してオフチップであってもよい。
追加または代替として、いくつかの例では、ビデオデコーダ300はメモリ120(図1)からコーディングされたビデオデータを取り出し得る。すなわち、メモリ120は、CPBメモリ320に関して上記で説明したようなデータを記憶し得る。同様に、メモリ120は、ビデオデコーダ300の機能の一部または全部がビデオデコーダ300の処理回路によって実行されるべきソフトウェアにおいて実装されるとき、ビデオデコーダ300によって実行されるべき命令を記憶し得る。
図4に示す様々なユニットは、ビデオデコーダ300によって実行される動作を理解することを助けるために図示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。図3と同様に、固定機能回路は、特定の機能を提供する回路を指し、実行され得る動作に対してプリセットされる。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作において柔軟な機能を提供する。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方法でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は(たとえば、パラメータを受信するまたはパラメータを出力するための)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは概して不変である。いくつかの例では、ユニットのうちの1つまたは複数は別個の回路ブロック(固定機能またはプログラマブル)であってもよく、いくつかの例では、1つまたは複数のユニットは集積回路であってもよい。
ビデオデコーダ300は、ALU、EFU、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含み得る。ビデオデコーダ300の動作がプログラマブル回路上で実行されるソフトウェアによって実行される例では、オンチップメモリまたはオフチップメモリが、ビデオデコーダ300が受信および実行するソフトウェアの命令(たとえば、オブジェクトコード)を記憶し得る。
エントロピー復号ユニット302は、CPBから符号化されたビデオデータを受信し、ビデオデータをエントロピー復号して、シンタックス要素を再生し得る。予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構成ユニット310、およびフィルタユニット312は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。
一般に、ビデオデコーダ300は、ブロックごとにピクチャを再構成する。ビデオデコーダ300は、各ブロックに対して個々に再構成動作を実行し得る(ここで、現在再構成されている、すなわち、復号されているブロックは「現在のブロック」と呼ばれることがある)。
エントロピー復号ユニット302は、量子化された変換係数ブロックの量子化された変換係数、ならびに量子化パラメータ(QP)および/または変換モード指示などの変換情報を定義するシンタックス要素をエントロピー復号し得る。逆量子化ユニット306は、量子化の程度と、同様に、逆量子化ユニット306が適用すべき逆量子化の程度とを決定するために、量子化された変換係数ブロックに関連付けられたQPを使用し得る。逆量子化ユニット306は、たとえば、量子化された変換係数を逆量子化するために、ビット単位の左シフト演算を実行し得る。逆量子化ユニット306は、それによって、変換係数を含む変換係数ブロックを形成し得る。
逆量子化ユニット306が変換係数ブロックを形成した後、逆変換処理ユニット308は、現在のブロックに関連付けられた残差ブロックを生成するために、1つまたは複数の逆変換を変換係数ブロックに適用し得る。たとえば、逆変換処理ユニット308は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
さらに、予測処理ユニット304は、エントロピー復号ユニット302によってエントロピー復号された予測情報シンタックス要素に従って予測ブロックを生成する。たとえば、現在のブロックがインター予測されることを予測情報シンタックス要素が示す場合、動き補償ユニット316は予測ブロックを生成し得る。この場合、予測情報シンタックス要素は、そこから参照ブロックを取り出すべきDPB314中の参照ピクチャ、ならびに現在のピクチャ中の現在のブロックの場所に対する参照ピクチャ中の参照ブロックの場所を識別する動きベクトルを示し得る。動き補償ユニット316は、一般に、動き補償ユニット224(図3)に関して説明した方法と実質的に同様の方法でインター予測プロセスを実行し得る。
別の例として、現在のブロックがイントラ予測されることを予測情報シンタックス要素が示す場合、イントラ予測ユニット318は、予測情報シンタックス要素によって示されたイントラ予測モードに従って予測ブロックを生成し得る。やはり、イントラ予測ユニット318は、一般に、イントラ予測ユニット226(図3)に関して説明した方法と実質的に同様の方法でイントラ予測プロセスを実行し得る。イントラ予測ユニット318は、DPB314から現在のブロックに対する隣接サンプルのデータを取り出し得る。
別の例として、勾配ベースの予測改良が有効であることを予測情報シンタックス要素が示す場合、GBPRユニット319は、予測ブロックのサンプルを修正して、現在のブロックを再構築するために使用される修正された予測ブロックを生成してもよい(たとえば、修正された予測ブロックを形成する修正されたサンプルを生成してもよい)。
GBPRユニット319は、勾配ベースの予測改良のために、本開示において説明される例示的な技法を実行するように構成され得る。たとえば、GBPRユニット319は、動き補償ユニット316とともに、現在のブロックをインター予測するための予測ブロックを(たとえば、予測処理ユニット304によって決定される動きベクトルに基づいて)決定し得る。GBPRユニット319は、予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)を決定し得る。一例として、GBPRユニット319は、現在のブロックをインター予測するための、予測情報シンタックス要素に基づいて、インター予測モードを決定し得る。いくつかの例では、GBPRユニット319は、決定されたインター予測モードに基づいて水平変位および垂直変位を決定し得る。
GBPRユニット319は、水平変位および垂直変位を、異なるインター予測モードに対して同じである精度レベルに丸め得る。たとえば、現在のブロックは第1の現在のブロックであってもよく、予測ブロックは第1の予測ブロックであってもよく、水平変位および垂直変位は第1の水平変位または垂直変位であってもよく、丸められた水平変位および垂直変位は第1の丸められた水平変位および垂直変位であってもよい。いくつかの例では、GBPRユニット319は、第2の現在のブロックをインター予測するための第2の予測ブロックを決定し、第2の予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために第2の水平変位および垂直変位を決定し得る。GBPRユニット319は、第1の水平変位および垂直変位が丸められた同じ精度レベルへと第2の水平変位および垂直変位を丸めて、第2の丸められた水平変位および垂直変位を生成し得る。
いくつかの場合、第1の現在のブロックをインター予測するためのインター予測モードおよび第2の現在のブロックのためのインター予測モードは異なり得る。たとえば、異なるインター予測モードの第1のモードはアフィンモードであり、異なるインター予測モードの第2のモードは双方向オプティカルフロー(BDOF)モードである。
水平変位および垂直変位が丸められる精度レベルは、GBPRユニット319による使用のために事前定義されて記憶されてもよく、または、GBPRユニット319がシグナリングされる情報において精度レベルを示す情報を受信してもよい(たとえば、精度レベルはシグナリングされる)。一例として、精度レベルは1/64である。
GBPRユニット319は、丸められた水平変位および垂直変位に基づいて、1つまたは複数の改良オフセットを決定し得る。たとえば、GBPRユニット319は、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第1のセットに基づいて第1の勾配を決定してもよく(たとえば、上で説明された予測ブロックのサンプルを使用してgx(i,j)を決定する)、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第2のセットに基づいて第2の勾配を決定してもよい(たとえば、上で説明された予測ブロックのサンプルを使用してgy(i,j)を決定する)。GBPRユニット319は、丸められた水平変位および垂直変位ならびに第1の勾配および第2の勾配に基づいて、1つまたは複数の改良オフセットを決定し得る。いくつかの例では、GBPRユニット319は、1つまたは複数の改良オフセットの値が高すぎる(たとえば、しきい値より大きい)場合、1つまたは複数の改良オフセットを切り捨て得る。
GBPRユニット319は、決定された1つまたは複数の改良オフセットまたは切り捨てられた1つまたは複数の改良オフセットに基づいて予測ブロックの1つまたは複数のサンプルを修正して、修正された予測ブロック(たとえば、修正された予測ブロックを形成する1つまたは複数の修正されたサンプル)を生成し得る。たとえば、GBPRユニット319は、gx(i,j)*Δvx(i,j)+gy(i,j)*Δvy(i,j)を決定してもよく、gx(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための第1の勾配であり、Δvx(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための丸められた水平変位であり、gy(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための第2の勾配であり、Δvy(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための丸められた垂直変位である。いくつかの例では、ΔvxおよびΔvyは、予測ブロックのサンプル(i,j)の各々に対して同じであり得る。
得られた修正されたサンプルは、勾配ベースの予測改良において修正された予測ブロックを形成し得る。すなわち、修正された予測ブロックは、勾配ベースの予測改良において予測ブロックとして使用され得る。再構成ユニット310は、予測ブロックおよび残差ブロックを使用して現在のブロックを再構成し得る。たとえば、再構成ユニット310は、残差ブロックのサンプルを予測ブロックの対応するサンプルに加えて、現在のブロックを再構成し得る。
フィルタユニット312は、再構成されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。たとえば、フィルタユニット312は、再構成されたブロックの端部に沿ってブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。フィルタユニット312の動作は、必ずしもすべての例において実行されるとは限らない。
ビデオデコーダ300は、再構成されたブロックをDPB314に記憶し得る。上記で説明したように、DPB314は、イントラ予測のための現在のピクチャおよび後続の動き補償のための以前に復号されたピクチャのサンプルなどの参照情報を予測処理ユニット304に提供し得る。さらに、ビデオデコーダ300は、図1のディスプレイデバイス118などのディスプレイデバイス上で後で提示するための、DPBからの復号されたピクチャを出力し得る。
図5は、ビデオデータをコーディングするための例示的な方法を示すフローチャートである。現在のブロックは現在のCUを含み得る。図5の例は、処理回路に関して説明される。処理回路の例は、GBPRユニット227などのビデオエンコーダ200、およびGBPRユニット319などのビデオデコーダ300のための、固定された機能および/またはプログラマブル回路を含む。
1つまたは複数の例では、メモリは、予測ブロックのサンプルを記憶するように構成され得る。たとえば、DPB218またはDPB314は、インター予測のために使用される予測ブロックのサンプルを記憶するように構成され得る。イントラブロックコピーは、例示的なインター予測モードとして見なされてもよく、この場合、イントラブロックコピーのために使用されるブロックベクトルが、動きベクトルの例である。
処理回路は、現在のブロックをインター予測するための、メモリに記憶されている予測ブロックを決定し得る(350)。処理回路は、予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のための、水平変位および垂直変位(たとえば、ΔvxおよびΔvy)を決定し得る(352)。一例として、処理回路は、現在のブロックをインター予測するためのインター予測モードを決定し得る。いくつかの例では、処理回路は、決定されたインター予測モードに基づいて水平変位および垂直変位を決定し得る。
処理回路は、水平変位および垂直変位を、異なるインター予測モードに対して同じである精度レベルに丸め得る(354)。たとえば、現在のブロックは第1の現在のブロックであってもよく、予測ブロックは第1の予測ブロックであってもよく、水平変位および垂直変位は第1の水平変位または垂直変位であってもよく、丸められた水平変位および垂直変位は第1の丸められた水平変位および垂直変位であってもよい。いくつかの例では、処理回路は、第2の現在のブロックをインター予測するための第2の予測ブロックを決定し、第2の予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために第2の水平変位および垂直変位を決定し得る。処理回路は、第1の水平変位および垂直変位が丸められた同じ精度レベルへと第2の水平変位および垂直変位を丸めて、第2の丸められた水平変位および垂直変位を生成し得る。
いくつかの場合、第1の現在のブロックをインター予測するためのインター予測モードおよび第2の現在のブロックのためのインター予測モードは異なり得る。たとえば、異なるインター予測モードの第1のモードはアフィンモードであり、異なるインター予測モードの第2のモードは双方向オプティカルフロー(BDOF)モードである。
水平変位および垂直変位が丸められる精度レベルは、事前定義されていてもよく、またはシグナリングされてもよい。一例として、精度レベルは1/64である。
処理回路は、丸められた水平変位および垂直変位に基づいて、1つまたは複数の改良オフセットを決定し得る(356)。たとえば、処理回路は、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第1のセットに基づいて第1の勾配を決定してもよく(たとえば、上で説明された予測ブロックのサンプルを使用してgx(i,j)を決定してもよく)、予測ブロックの1つまたは複数のサンプルのうちのサンプルの第2のセットに基づいて第2の勾配を決定してもよい(たとえば、上で説明された予測ブロックのサンプルを使用してgy(i,j)を決定してもよい)。処理回路は、丸められた水平変位および垂直変位ならびに第1の勾配および第2の勾配に基づいて、1つまたは複数の改良オフセットを決定し得る。いくつかの例では、処理回路は、1つまたは複数の改良オフセットの値が高すぎる(たとえば、しきい値より大きい)場合、1つまたは複数の改良オフセットを切り捨て得る。
処理回路は、決定された1つもしくは複数の改良オフセットまたは切り捨てられた1つもしくは複数の改良オフセットに基づいて予測ブロックの1つまたは複数のサンプルを修正して、修正された予測ブロック(たとえば、修正された予測ブロックを形成する1つまたは複数の修正されたサンプル)を生成し得る(358)。たとえば、処理回路は、gx(i,j)*Δvx(i,j)+gy(i,j)*Δvy(i,j)を決定してもよく、gx(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための第1の勾配であり、Δvx(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための丸められた水平変位であり、gy(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための第2の勾配であり、Δvy(i,j)は、1つまたは複数のサンプルのうちの(i,j)に位置するサンプルのための丸められた垂直変位である。いくつかの例では、ΔvxおよびΔvyは、予測ブロックのサンプル(i,j)の各々に対して同じであり得る。
処理回路は、修正された予測ブロック(たとえば、修正された予測ブロックの1つまたは複数の修正されたサンプル)に基づいて、現在のブロックをコーディング(たとえば、符号化または復号)し得る(360)。たとえば、ビデオ復号のために、処理回路(たとえば、ビデオデコーダ300)は、修正された予測ブロックに基づいて(たとえば、1つまたは複数の修正されたサンプルを受信された残差値に加算することによって)現在のブロックを再構築し得る。ビデオ符号化のために、処理回路(たとえば、ビデオエンコーダ200)は、現在のブロックと修正された予測ブロック(たとえば、修正された予測ブロックの1つまたは複数の修正されたサンプル)との間の残差値(たとえば、残差ブロックの)を決定し、残差値を示す情報をシグナリングし得る。
本開示の例の非限定的な説明のためのリストが以下で説明される。
例1: ビデオデータを復号する方法であって、現在のブロックのインター予測するための1つまたは複数の予測ブロックを決定するステップと、現在のブロックをインター予測するためのインター予測モードを決定するステップと、決定されたインター予測モードに基づいて、1つまたは複数の予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために水平変位または垂直変位のうちの少なくとも1つを決定するステップと、1つまたは複数の修正されたサンプルを生成するために、水平変位または垂直変位のうちの決定された少なくとも1つに基づいて1つまたは複数の予測ブロックの1つまたは複数のサンプルを修正するステップと、1つまたは複数の修正されたサンプルに基づいて現在のブロックを再構築するステップとを備える方法。
例2: インター予測モードを決定するステップが、小さいサイズを有する現在のブロックにインター予測が適用されることを決定するステップを備え、方法が、現在のブロックのための動きベクトルを整数動きベクトルへと丸めるステップをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、丸めの残余に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例1の方法。
例3: 現在のブロックが第1のブロックを備え、予測ブロックが第1の予測ブロックを備え、方法が、小さいサイズを有する第2のブロックのためのインター予測モードを決定するステップと、第2のブロックのためのインター予測モードがマージモードであることに基づいて、勾配ベースの予測改良を使用して第2のブロックのための第2の予測ブロックの1つまたは複数のサンプルを修正するステップとをさらに備え、勾配ベースの予測改良が、マージモードでインター予測されない小さいサイズを有するブロックに対して無効にされる、例1の方法。
例4: 現在のブロックが第1のブロックを備え、予測ブロックが第1の予測ブロックを備え、方法が、小さいサイズを有する第2のブロックのためのインター予測モードを決定するステップと、第2のブロックのためのインター予測モードが整数動きモードではないことに基づいて、勾配ベースの予測改良を使用して第2のブロックのための第2の予測ブロックの1つまたは複数のサンプルを修正するステップとをさらに備え、勾配ベースの予測改良が、整数動きモードを有するブロックに対して無効にされ、整数動きモードにおいて、1つまたは複数のシグナリングされる動きベクトルが整数である、例1の方法。
例5: インター予測モードを決定するステップが、現在のブロックがマージモードでインター予測されることを決定するステップを備え、方法が、空間的または時間的な隣接ブロックから導出される動きベクトルを丸めるステップをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、丸めの残余に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例1の方法。
例6: インター予測モードを決定するステップが、現在のブロックが動きベクトル差分を伴うマージモードでインター予測されることを決定するステップを備え、方法が、動きベクトル差分を丸めるステップをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、丸めの残余に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例1の方法。
例7: インター予測モードを決定するステップが、現在のブロックがデコーダ側動きベクトル改良モードでインター予測されることを決定するステップを備え、方法が、元の動きベクトルを使用して元の双予測ブロックを決定するステップと、双予測ブロック間の差分に基づいてDistOrigを決定するステップと、丸められた元のベクトルの整数変位の範囲における探索に基づいてDistNewを決定するステップとをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、DistNewがDistOrig未満であることに基づいて、双方向オプティカルフロー(BDOF)を実行して、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例1の方法。
例8: インター予測モードを決定するステップが、現在のブロックがアフィンモードでインター予測されることを決定するステップを備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、現在のブロックのサブブロックの位置に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例1の方法。
例9: 異なるインター予測モードに対して同じである事前定義された精度へと水平変位および垂直変位のうちの少なくとも1つを丸めるステップをさらに備え、1つまたは複数のサンプルを修正するステップが、1つまたは複数の修正されたサンプルを生成するために、水平変位または垂直変位のうちの丸められた少なくとも1つに基づいて1つまたは複数の予測ブロックの1つまたは複数のサンプルを修正するステップを備える、例1の方法。
例10: 1つまたは複数の修正されたサンプルを切り捨てるステップをさらに備え、現在のブロックを再構築するステップが、1つまたは複数の切り捨てられた修正されたサンプルに基づいて、現在のブロックを再構築するステップを備える、例1の方法。
例11: 例1~10のいずれかの1つまたは複数の特徴の組合せを備える方法。
例12: ビデオデータを符号化する方法であって、現在のブロックをインター予測するための1つまたは複数の予測ブロックを決定するステップと、現在のブロックをインター予測するためのインター予測モードを決定するステップと、決定されたインター予測モードに基づいて、1つまたは複数の予測ブロックの1つまたは複数のサンプルの勾配ベースの予測改良のために水平変位または垂直変位のうちの少なくとも1つを決定するステップと、1つまたは複数の修正されたサンプルを生成するために、水平変位または垂直変位のうちの決定された少なくとも1つに基づいて1つまたは複数の予測ブロックの1つまたは複数のサンプルを修正するステップと、現在のブロックおよび1つまたは複数の修正されたサンプルに基づいて残差値を決定するステップと、残差値を示す情報をシグナリングするステップとを備える、方法。
例13: インター予測モードを決定するステップが、小さいサイズを有する現在のブロックにインター予測が適用されることを決定するステップを備え、方法が、現在のブロックのための動きベクトルを整数動きベクトルへと丸めるステップをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、丸めの残余に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例12の方法。
例14: 現在のブロックが第1のブロックを備え、予測ブロックが第1の予測ブロックを備え、方法が、小さいサイズを有する第2のブロックのためのインター予測モードを決定するステップと、第2のブロックのためのインター予測モードがマージモードであることに基づいて、勾配ベースの予測改良を使用して第2のブロックのための第2の予測ブロックの1つまたは複数のサンプルを修正するステップとをさらに備え、勾配ベースの予測改良が、マージモードでインター予測されない小さいサイズを有するブロックに対して無効にされる、例12の方法。
例15: 現在のブロックが第1のブロックを備え、予測ブロックが第1の予測ブロックを備え、方法が、小さいサイズを有する第2のブロックのためのインター予測モードを決定するステップと、第2のブロックのためのインター予測モードが整数動きモードではないことに基づいて、勾配ベースの予測改良を使用して第2のブロックのための第2の予測ブロックの1つまたは複数のサンプルを修正するステップとをさらに備え、勾配ベースの予測改良が、整数動きモードを有するブロックに対して無効にされ、整数動きモードにおいて、1つまたは複数のシグナリングされる動きベクトルが整数である、例12の方法。
例16: インター予測モードを決定するステップが、現在のブロックがマージモードでインター予測されることを決定するステップを備え、方法が、空間的または時間的な隣接ブロックから導出される動きベクトルを丸めるステップをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、丸めの残余に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例12の方法。
例17: インター予測モードを決定するステップが、現在のブロックが動きベクトル差分を伴うマージモードでインター予測されることを決定するステップを備え、方法が、動きベクトル差分を丸めるステップをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、丸めの残余に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例12の方法。
例18: インター予測モードを決定するステップが、現在のブロックがデコーダ側動きベクトル改良モードでインター予測されることを決定するステップを備え、方法が、元の動きベクトルを使用して元の双予測ブロックを決定するステップと、双予測ブロック間の差分に基づいてDistOrigを決定するステップと、丸められた元のベクトルの整数変位の範囲における探索に基づいてDistNewを決定するステップとをさらに備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、DistNewがDistOrig未満であることに基づいて、双方向オプティカルフロー(BDOF)を実行して、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例12の方法。
例19: インター予測モードを決定するステップが、現在のブロックがアフィンモードでインター予測されることを決定するステップを備え、水平変位または垂直変位のうちの少なくとも1つを決定するステップが、現在のブロックのサブブロックの位置に基づいて、水平変位または垂直変位のうちの少なくとも1つを決定するステップを備える、例12の方法。
例20: 異なるインター予測モードに対して同じである事前定義された精度へと水平変位または垂直変位のうちの少なくとも1つを丸めるステップをさらに備え、1つまたは複数のサンプルを修正するステップが、1つまたは複数の修正されたサンプルを生成するために、水平変位または垂直変位のうちの丸められた少なくとも1つに基づいて1つまたは複数の予測ブロックの1つまたは複数のサンプルを修正するステップを備える、例12の方法。
例21: 1つまたは複数の修正されたサンプルを切り捨てるステップをさらに備え、残差値を決定するステップが、現在のブロックおよび1つまたは複数の切り捨てられた修正されたサンプルに基づいて残差値を決定するステップを備える、例12の方法。
例22: 例12~21のいずれかの特徴の組合せを備える、方法。
例23: ビデオデータを復号するためのデバイスであって、予測ブロックを含むビデオデータを記憶するように構成されるメモリと、少なくとも1つの固定機能回路またはプログラマブル回路を備えるビデオデコーダとを備え、ビデオデコーダが例1~11のいずれかの方法を実行するように構成される、デバイス。
例24: 復号されたビデオデータを表示するように構成されるディスプレイをさらに備える、例23のデバイス。
例25: カメラ、コンピュータ、モバイルデバイス、ブロードキャスト受信機デバイス、またはセットトップボックスのうちの1つまたは複数を備える、例23および24のいずれかのデバイス。
例26: ビデオデータを符号化するためのデバイスであって、予測ブロックを含むビデオデータを記憶するように構成されるメモリと、少なくとも1つの固定機能回路またはプログラマブル回路を備えるビデオエンコーダとを備え、ビデオエンコーダが例12~22のいずれかの方法を実行するように構成される、デバイス。
例27: 符号化されるべきビデオデータをキャプチャするように構成されるカメラをさらに備える、例26のデバイス。
例28: コンピュータ、モバイルデバイス、ブロードキャスト受信機デバイス、またはセットトップボックスのうちの1つまたは複数を備える、例26および27のいずれかのデバイス。
例29: ビデオデータを復号するためのデバイスであって、例1~11のいずれかの方法を実行するための手段を備える、デバイス。
例30: 例12~22のいずれかの方法を実行するための手段を備える、ビデオデータを符号化するためのデバイス。
例31: 実行されると、ビデオデータを復号するためのデバイスの1つまたは複数のプロセッサに例1~11のいずれかの方法を実行させる命令を記憶した、コンピュータ可読記憶媒体。
例32: 実行されると、ビデオデータを符号化するためのデバイスの1つまたは複数のプロセッサに例12~22のいずれかの方法を実行させる命令を記憶した、コンピュータ可読記憶媒体。
例に応じて、本明細書で説明する技法のいずれかのいくつかの行為またはイベントが、異なるシーケンスで実行される場合があり、追加され、統合され、または完全に除外されてもよい(たとえば、説明したすべての行為またはイベントが技法の実践にとって必要であるとは限らない)ことを認識されたい。さらに、いくつかの例では、行為またはイベントは、連続的にではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通じて、同時に実行されてもよい。
1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含み得る。このように、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る任意の他の媒体を含むことができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の同等の集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」および「処理回路」という用語は、上記の構造、または本明細書で説明する技法の実装に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明する機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で提供されてもよく、または複合コーデックに組み込まれてもよい。また、技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。開示する技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示で説明されるが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされてもよく、または適切なソフトウェアおよび/もしくはファームウェアとともに、上記で説明したような1つもしくは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてもよい。
様々な例が説明された。これらおよび他の例は、以下の特許請求の範囲内に入る。