[0001]本出願は、その内容全体が参照により本明細書に組み込まれる、2018年12月5日に出願された米国仮出願第62/775,802号の利益を主張する2019年12月4日に出願された米国出願第16/703,495号の優先権を主張する。
[0024]インター予測ビデオコーディングでは、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)は、コーディングユニット(CU)のための予測ユニット(PU)を決定する。ビデオエンコーダは、CUのブロックのサンプル値とPUの予測ブロックのサンプル値との間の残差(たとえば、差)を決定する。ビデオエンコーダは、PUを決定するためにビデオデコーダが使用する情報とともにビデオデコーダに残差情報をシグナリングする。ビデオデコーダは、次いで、ブロックを再構築するためにPUに残差情報を加算する。
[0025]いくつかの例では、ビデオコーダは、三角形モードで現在のブロックをコーディングする。三角形モードでは、ビデオコーダは、現在のブロックを2つの三角形の区分に区分する(たとえば、分割する)。そのような例では、ビデオコーダは、2つの三角形の区分の各々のためのPUを決定し得る。ビデオコーダは、2つの三角形の区分のための動きベクトルに基づいてPUを決定し得る。動きベクトルは、PUを形成するために使用され得る参照ピクチャ中のサンプル値にポイントする。2つの三角形の区分のための動きベクトルを決定する1つの方法は、1つまたは複数の隣接ブロックの動きベクトル情報に基づく。
[0026]たとえば、ビデオエンコーダとビデオデコーダとは、現在のブロックの1つまたは複数の隣接ブロックの動きベクトル情報を含む動きベクトル予測子リストを構築し得る。ビデオエンコーダは、現在のブロックの2つの三角形の区分のうちの第1の三角形の区分のための動きベクトル予測子リストへの第1のインデックス値をシグナリングし得、ビデオデコーダは、第1のインデックス値に基づいて第1の三角形の区分のための動きベクトルを決定し得る。ビデオエンコーダは、現在のブロックの2つの三角形の区分のうちの第2の三角形の区分のための動きベクトル予測子リストへの第2のインデックス値をシグナリングし得る。
[0027]ビデオデコーダは、第1の三角形の区分のための動きベクトルに基づいて第1の三角形の区分のための第1の予測ブロックを決定し、第2の三角形の区分のための動きベクトルに基づいて第2の三角形の区分のための第2の予測ブロックを決定し得る。ビデオデコーダは、第1の三角形の区分と第1の予測ブロックとの間の差と第2の三角形の区分と第2の予測ブロックとの間の差とを示す残差情報を受信し得る。ビデオデコーダは、第1および第2の三角形の区分を再構築するためにそれぞれの第1のまたは第2の予測ブロックにそれぞれの残差情報を加算し、このようにして、現在のブロックを再構築し得る。
[0028]三角形モードでコーディングされる現在のブロックについて、2つの三角形の区分のための動きベクトルにいくつかの制限があり得る。一例として、2つの三角形の区分のための2つの動きベクトルは、異なる必要があり得る。2つの三角形の区分のための2つの動きベクトルが同じであった場合、2つの動きベクトルは、矩形ブロックを形成する領域を効果的に指し得る。この場合、三角形モードで現在のブロックをコーディングすることと、現在のブロックが三角形の区分に分割されない標準モードで現在のブロックをコーディングすることとの間に差がないことになる。たとえば、三角形モードで現在のブロックをコーディングすることの利益がある場合、ビデオエンコーダは、2つの三角形の区分のための動きベクトルが異なることを保証すべきである。三角形の区分のための動きベクトルが同じでなければならない場合、ビデオエンコーダは、三角形の区分に現在のブロックを分割する際に計算リソースを消耗することなしに現在のブロックをコーディングしなければならない。
[0029]したがって、三角形モードで現在のブロックをコーディングすることの利益が達成されることを保証するために、いくつかの例では、ビデオエンコーダは、動きベクトル予測子リスト中に異なるインデックス値を決定し得る。たとえば、動きベクトル予測子リストを構築する際に、ビデオコーダは、重複する動きベクトル情報をプルーニングし得る。一例として、2つの隣接ブロックが同じ動きベクトル情報を有する場合、動きベクトル予測子リストは、2つの隣接ブロックのうちのただ1つのための動きベクトル情報を含み得る。したがって、動きベクトル予測子リストの各エントリ中の動きベクトル情報は異なり得る。2つの三角形の区分のための動きベクトル予測子リスト中のインデックス値が異なるので、動きベクトル予測子リストの各エントリ中の動きベクトル情報が異なり得るので、2つの三角形の区分のための動きベクトルが異なる高い可能性があり得る。
[0030]1つまたは複数の例では、ビデオエンコーダは、シグナリングされる必要がある情報の量を低減するために動きベクトル予測子リストへのインデックス値が第1の三角形の区分と第2の三角形の区分とで異なる必要があるという要求を活用し得る。一例として、ビデオエンコーダは、現在のブロックの第1の三角形の区分のための動きベクトル予測子リストへの第1のインデックス値を決定し、第1のインデックス値に基づき第1の値をシグナリングし得る(たとえば、第1の値は第1のインデックス値に等しい)。ビデオエンコーダは、現在のブロックの第2の三角形の区分のための動きベクトル予測子リストへの第2のインデックス値を決定し得る。しかしながら、この例では、第2のインデックス値が第1のインデックス値よりも大きい場合、ビデオエンコーダは、第2の値を生成するために第2のインデックス値からオフセットを減算し得る(たとえば、第2のインデックス値から1を減算し得る)。ビデオエンコーダは、次いで、第2の値をシグナリングし得る。
[0031]いくつかの例では、より小さい値をシグナリングすることは、より大きい値をシグナリングするよりも少数のビットしか必要としない。したがって、シグナリングされる値を低減する(たとえば、第2のインデックス値ではなく第2のインデックス値からオフセットを減算した結果である第2の値をシグナリングする)ことによって、ビデオエンコーダは、シグナリングされる必要があるビット数を低減し得る。
[0032]ビデオデコーダは、第1の値と第2の値とを受信するように構成され得る。ビデオデコーダは、受信された第1の値に基づいて動きベクトル予測子リストへの第1のインデックス値を決定し得る(たとえば、第1のインデックス値は、受信された第1の値に等しい)。第2のインデックス値を決定するために、ビデオデコーダは、第2の値が第1の値以上であるのかどうかを決定し得る。第2の値が第1の値以上である場合、ビデオデコーダは、動きベクトル予測子リストへの第2のインデックス値を決定するために第2の値にオフセット(たとえば、1の値)を加算し得る。しかしながら、第2の値が第1の値よりも小さい場合、ビデオデコーダは、第2の値に等しい第2のインデックス値を設定し得る。
[0033]一例として、インデックス値{0、1、2、3、および4}によって識別される動きベクトル予測子リスト中の5つのエントリがあり得る。この例では、現在のブロックの第1の三角形の区分のための動きベクトル予測子リスト中の第1のインデックス値は、インデックス値2であり得る。ビデオエンコーダは、第1のインデックス値のための2の第1の値をシグナリングし得る。ある場合には、第2の三角形の区分のための動きベクトル予測子リスト中の第2のインデックス値が3であるとき、ビデオエンコーダは、2(たとえば、3-1=2)に等しい第2の値を生成するために第2のインデックス値からオフセット(たとえば、1の値)を減算し得る。この例では、ビデオエンコーダは、2の第2の値をシグナリングし得る。
[0034]ビデオデコーダは、2の第1の値を受信し、2の第1の値に等しく動きベクトル予測子リスト中に第1のインデックス値を設定し得る。ビデオデコーダはまた、2の第2の値を受信し得る。この例では、第2の値の2が第1の値の2以上であるので、ビデオデコーダは、動きベクトル予測子リスト中の第2のインデックス値の3(たとえば、2+1=3)を決定するために第2の値にオフセット(たとえば、1の値)を加算し得る。
[0035]別の場合には、第2の三角形の区分のための動きベクトル予測子リスト中の第2のインデックス値が1である場合、ビデオエンコーダは、第2の値を1としてシグナリングし得る(たとえば、オフセットを減算しないことがある)。この場合、第2のインデックス値は、第1のインデックス値よりも小さく、したがって、ビデオエンコーダは、オフセットを減算しない。この例では、ビデオデコーダは、1の第2の値を受信し得る。1の第2の値が2の第1の値以上でないので、ビデオデコーダは、オフセットを加算しないことがある。ビデオデコーダは、第2のインデックス値が1の第2の値に等しいと決定し得る。
[0036]図1は、本開示の技法を実行し得る例示的なビデオ符号化および復号システム100を示すブロック図である。本開示の技法は、概して、ビデオデータをコーディングする(符号化するおよび/または復号する)ことを対象とする。概して、ビデオデータは、ビデオを処理するための任意のデータを含む。したがって、ビデオデータは、シグナリングデータなどの未加工の、コーディングされていないビデオと、符号化されたビデオと、復号された(たとえば、再構築された)ビデオと、ビデオメタデータとを含み得る。
[0037]図1に示されているように、システム100は、この例では、宛先デバイス116によって復号および表示されるべき符号化ビデオデータを与えるソースデバイス102を含む。特に、ソースデバイス102は、コンピュータ可読媒体110を介して宛先デバイス116にビデオデータを与える。ソースデバイス102および宛先デバイス116は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、スマートフォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイスなどを含む、広範囲にわたるデバイスのいずれかであり得る。いくつかの場合には、ソースデバイス102および宛先デバイス116は、ワイヤレス通信のために装備され得、したがって、ワイヤレス通信デバイスと呼ばれることがある。
[0038]図1の例では、ソースデバイス102は、ビデオソース104と、メモリ106と、ビデオエンコーダ200と、出力インターフェース108とを含む。宛先デバイス116は、入力インターフェース122と、ビデオデコーダ300と、メモリ120と、ディスプレイデバイス118とを含む。本開示によれば、ソースデバイス102のビデオエンコーダ200および宛先デバイス116のビデオデコーダ300は、三角形のコーディングユニット(CU)および予測ユニット(PU)をコーディングするための技法を適用するように構成され得る。したがって、ソースデバイス102は、ビデオ符号化デバイスの一例を表し、一方、宛先デバイス116は、ビデオ復号デバイスの一例を表す。他の例では、ソースデバイスおよび宛先デバイスは、他の構成要素または配置を含み得る。たとえば、ソースデバイス102は、外部カメラなど、外部ビデオソースからビデオデータを受信し得る。同様に、宛先デバイス116は、一体型ディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースし得る。
[0039]図1に示されているシステム100は一例にすぎない。概して、任意のデジタルビデオ符号化および/または復号デバイスが本開示で説明される技法を実行し得る。ソースデバイス102および宛先デバイス116は、ソースデバイス102が宛先デバイス116への送信のためのコード化ビデオデータを生成するような、コーディングデバイスの例にすぎない。本開示は、「コーディング」デバイスをデータのコーディング(符号化および/または復号)を実行するデバイスと称する。したがって、ビデオエンコーダ200およびビデオデコーダ300は、コーディングデバイス、特に、それぞれ、ビデオエンコーダおよびビデオデコーダの例を表す。いくつかの例では、デバイス102、116は、デバイス102、116の各々がビデオ符号化構成要素とビデオ復号構成要素とを含むように、実質的に対称的な様式で動作し得る。したがって、システム100は、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスト、またはビデオ電話のための、ビデオデバイス102とビデオデバイス116との間の一方向または双方向のビデオ送信をサポートし得る。
[0040]概して、ビデオソース104は、ビデオデータのソース(すなわち、未加工の、コーディングされていないビデオデータ)を表し、ピクチャのためのデータを符号化するビデオエンコーダ200にビデオデータの連続した一連のピクチャ(「フレーム」とも呼ばれる)を与える。ソースデバイス102のビデオソース104は、ビデオカメラ、以前にキャプチャされたビデオを包含するビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースなどの、ビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソース104は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオとアーカイブビデオとコンピュータ発生ビデオとの組合せを発生し得る。各場合において、ビデオエンコーダ200は、キャプチャされたビデオデータ、プリキャプチャされたビデオデータ、またはコンピュータ生成されたビデオデータを符号化し得る。ビデオエンコーダ200は、受信された順序(「表示順序」と呼ばれることがある)からコーディングのためのコーディング順序にピクチャを並べ替え得る。ビデオエンコーダ200は、符号化されたビデオデータを含むビットストリームを生成し得る。ソースデバイス102は、次いで、たとえば、宛先デバイス116の入力インターフェース122による受信および/または取出しのためのコンピュータ可読媒体110上に出力インターフェース108を介して符号化されたビデオデータを出力し得る。
[0041]ソースデバイス102のメモリ106と宛先デバイス116のメモリ120とは汎用メモリを表す。いくつかの例では、メモリ106、120は、未加工のビデオデータ、たとえば、ビデオソース104からの未加工のビデオ、およびビデオデコーダ300からの未加工の、復号されたビデオデータを記憶し得る。追加または代替として、メモリ106、120は、たとえば、それぞれ、ビデオエンコーダ200およびビデオデコーダ300によって実行可能なソフトウェア命令を記憶し得る。この例ではメモリ106、120がビデオエンコーダ200およびビデオデコーダ300とは別々に示されているが、ビデオエンコーダ200およびビデオデコーダ300はまた、機能的に同等のまたは等価の目的のために内部メモリを含み得ることを理解されたい。さらに、メモリ106、120は、たとえば、ビデオエンコーダ200から出力され、ビデオデコーダ300に入力される符号化されたビデオデータを記憶し得る。いくつかの例では、メモリ106、120の部分は、たとえば、未加工の、復号された、および/または符号化されたビデオデータを記憶するために1つまたは複数のビデオバッファとして割り振られ得る。
[0042]コンピュータ可読媒体110は、ソースデバイス102から宛先デバイス116に符号化ビデオデータを移送することが可能な、任意のタイプの媒体またはデバイスを表し得る。一例では、コンピュータ可読媒体110は、ソースデバイス102が、たとえば、無線周波数ネットワークまたはコンピュータベースのネットワークを介してリアルタイムで宛先デバイス116に符号化されたビデオデータを直接送信することを可能にするための通信媒体を表す。ワイヤレス通信プロトコルなどの通信規格に従って、出力インターフェース108は、符号化されたビデオデータを含む送信信号を変調し得、入力インターフェース122は、受信された送信信号を復調し得る。通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などのワイヤレスまたはワイヤード通信媒体のうちの一方または両方を含み得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス102から宛先デバイス116への通信を容易にするために有用であり得る任意の他の機器を含み得る。
[0043]いくつかの例では、コンピュータ可読媒体110はストレージデバイス112を含み得る。ソースデバイス102は、出力インターフェース108からストレージデバイス112に符号化されたデータを出力し得る。同様に、宛先デバイス116は、入力インターフェース122を介してストレージデバイス112から符号化されたデータにアクセスし得る。ストレージデバイス112は、ハードドライブ、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、揮発性または不揮発性メモリ、あるいは符号化ビデオデータを記憶するための任意の他の好適なデジタル記憶媒体など、様々な分散されたまたはローカルにアクセスされるデータ記憶媒体のいずれかを含み得る。
[0044]いくつかの例では、コンピュータ可読媒体110は、ソースデバイス102によって生成された符号化されたビデオデータを記憶し得るファイルサーバ114または別の中間ストレージデバイスを含み得る。ソースデバイス102は、ソースデバイス102によって生成された符号化されたビデオを記憶し得るファイルサーバ114または別の中間ストレージデバイスに符号化されたビデオデータを出力し得る。宛先デバイス116は、ストリーミングまたはダウンロードを介してファイルサーバ114から記憶されたビデオデータにアクセスし得る。ファイルサーバ114は、符号化されたビデオデータを記憶し、符号化されたビデオデータを宛先デバイス116に送信することができる任意のタイプのサーバデバイスであり得る。ファイルサーバ114は、(たとえば、ウェブサイトのための)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、コンテンツ配信ネットワークデバイス、またはネットワーク接続ストレージ(NAS)デバイスを表し得る。宛先デバイス116は、インターネット接続を含む任意の標準的なデータ接続を通してファイルサーバ114から符号化されたビデオデータにアクセスし得る。これは、ワイヤレスチャネル(たとえば、Wi-Fi(登録商標)接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、または、ファイルサーバ114に記憶された符号化ビデオデータにアクセスするのに適した、両方の組合せを含み得る。ファイルサーバ114と入力インターフェース122とは、ストリーミング送信プロトコル、ダウンロード送信プロトコル、またはそれらの組合せに従って動作するように構成され得る。
[0045]出力インターフェース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デバイスを含み得る。
[0046]本開示の技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、動的適応ストリーミングオーバーHTTP(DASH:dynamic adaptive streaming over HTTP)などのインターネットストリーミングビデオ送信、データ記憶媒体上に符号化されたデジタルビデオ、データ記憶媒体に記憶されたデジタルビデオの復号、または他の適用例など、様々なマルチメディア適用例のいずれかをサポートするビデオコーディングに適用され得る。
[0047]宛先デバイス116の入力インターフェース122は、コンピュータ可読媒体110(たとえば、通信媒体、ストレージデバイス112、ファイルサーバ114など)から符号化されたビデオビットストリームを受信する。符号化されたビデオビットストリームは、ビデオブロックまたは他のコーディングされたユニット(たとえば、スライス、ピクチャ、ピクチャグループ、シーケンスなど)の特性および/または処理を記述する値を有するシンタックス要素など、ビデオデコーダ300によっても使用されるビデオエンコーダ200によって定義された情報をシグナリングすることを含み得る。ディスプレイデバイス118は、ユーザに復号されたビデオデータの復号されたピクチャを表示する。ディスプレイデバイス118は、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスのいずれかを表し得る。
[0048]図1には示されていないが、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、それぞれ、オーディオエンコーダおよび/またはオーディオデコーダと統合され得、共通のデータストリーム中のオーディオとビデオの両方を含む多重化されたストリームを処理するために、適切なMUX-DEMUXユニット、あるいは他のハードウェアおよび/またはソフトウェアを含み得る。適用可能な場合、MUX-DEMUXユニットはITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
[0049]ビデオエンコーダ200およびビデオデコーダ300はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダ回路および/またはデコーダ回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。本技法が部分的にソフトウェアで実装されるとき、デバイスは、好適な非一時的コンピュータ可読媒体にソフトウェアの命令を記憶し、本開示の技法を実施するために1つまたは複数のプロセッサを使用してその命令をハードウェアで実行し得る。ビデオエンコーダ200およびビデオデコーダ300の各々は、1つまたは複数のエンコーダまたはデコーダに含まれ得、両者のいずれかがそれぞれのデバイス中の複合エンコーダ/デコーダ(CODEC)の一部として組み込まれ得る。ビデオエンコーダ200および/またはビデオデコーダ300を含むデバイスは、集積回路、マイクロプロセッサ、および/またはセルラー電話機などのワイヤレス通信デバイスを含み得る。
[0050]ビデオエンコーダ200とビデオデコーダ300とは、高効率ビデオコーディング(HEVC)とも呼ばれるITU-T H.265などのビデオコーディング規格あるいはマルチビューおよび/またはスケーラブルビデオコーディング拡張などのそれの拡張に従って動作し得る。代替的に、ビデオエンコーダ200およびビデオデコーダ300は、共同探索テストモデル(JEM)などの他のプロプライエタリ規格または業界規格に従って動作し得る。ただし、本開示の技法は、いかなる特定のコーディング規格にも限定されない。たとえば、汎用ビデオコーディング(VVC)と呼ばれる新しいビデオコーディング規格が現在開発中である。例示的な技法が現在開発中のVVC規格に適用され得る。
[0051]概して、ビデオエンコーダ200とビデオデコーダ300とは、ピクチャのブロックベースのコーディングを実行し得る。「ブロック」という用語は、概して、処理されるべき(たとえば、符号化される、復号される、または符号化および/もしくは復号プロセスで使用されるべき)データを含む構造を指す。たとえば、ブロックは、ルミナンスおよび/またはクロミナンスデータのサンプルの2次元行列を含み得る。概して、ビデオエンコーダ200とビデオデコーダ300とは、YUV(たとえば、Y、Cb、Cr)フォーマットで表されるビデオデータをコーディングし得る。すなわち、ピクチャのサンプルのための赤色、緑色、および青色(RGB)のデータをコーディングするのではなく、ビデオエンコーダ200とビデオデコーダ300とは、ルミナンス成分とクロミナンス成分とをコーディングし得、ここで、クロミナンス成分は、赤色相および青色相のクロミナンス成分の両方を含み得る。いくつかの例では、ビデオエンコーダ200は、符号化より前に受信されたRGBフォーマットのデータをYUV表現に変換し、ビデオデコーダ300は、YUV表現をRGBフォーマットに変換する。代替的に、前および後処理ユニット(図示せず)がこれらの変換を実行し得る。
[0052]本開示は、概して、ピクチャのデータを符号化または復号するプロセスを含むためにピクチャのコーディング(たとえば、符号化および復号)を指すことがある。同様に、本開示は、ブロックのためのデータを符号化または復号するプロセスを含むためにピクチャのブロックのコーディング、たとえば、予測および/または残差コーディングを指すことがある。符号化されたビデオビットストリームは、概して、コーディング決定(たとえば、コーディングモード)とブロックへのピクチャの区分とを表すシンタックス要素のための一連の値を含む。したがって、ピクチャまたはブロックをコーディングすることへの言及は、概して、ピクチャまたはブロックを形成するシンタックス要素の値をコーディングすることとして理解されるべきである。
[0053]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は、イントラモード指示などのイントラ予測情報を含む。
[0054]別の例として、ビデオエンコーダ200およびビデオデコーダ300は、JEMに従って動作するように構成され得る。JEMによれば、(ビデオエンコーダ200などの)ビデオコーダは、ピクチャを複数のCTUに区分する。ビデオエンコーダ200は、4分木2分木(QTBT:quadtree-binary tree)構造などのツリー構造に従ってCTUを区分し得る。JEMのQTBT構造は、HEVCのCUとPUとTUとの間の分離など、複数の区分タイプの概念を除去する。JEMのQTBT構造は、2つのレベル、すなわち、4分木区分に従って区分される第1のレベルと2分木区分に従って区分される第2のレベルとを含む。QTBT構造のルートノードはCTUに対応する。2分木のリーフノードはコーディングユニット(CU)に対応する。
[0055]いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分およびクロミナンス成分の各々を表すために単一のQTBT構造を使用し得、他の例では、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分のための1つのQTBT構造および両方のクロミナンス成分のための別のQTBT構造(またはそれぞれのクロミナンス成分のための2つのQTBT構造)など、2つまたはそれ以上のQTBT構造を使用し得る。
[0056]ビデオエンコーダ200およびビデオデコーダ300は、HEVCごとに4分木区分を使用するか、JEMに従ってQTBT区分を使用するか、または他の区分構造を使用するように構成され得る。説明のために、本開示の技法の説明は、VVCなどにおけるQTBT区分に関して提示される。しかしながら、本開示の技法は、4分木区分または同じく他のタイプの区分を使用するように構成されたビデオコーダにも適用され得ることを理解されたい。
[0057]本開示は、垂直および水平次元、たとえば、16×16のサンプルまたは16バイ16のサンプルに関して(CUまたは他のビデオブロックなどの)ブロックのサンプル次元を互換的に言及するために「N×N」および「NバイN」を使用し得る。一般に、16×16のCUは、垂直方向に16個のサンプル(y=16)を有し、水平方向に16個のサンプル(x=16)を有する。同様に、N×NのCUは、概して、垂直方向にN個のサンプルを有し、水平方向にN個のサンプルを有し、ここで、Nは非負整数値を表す。CU中のサンプルは行と列とに配列され得る。さらに、CUは、必ずしも、水平方向において垂直方向と同じ数のサンプルを有する必要があるとは限らない。たとえば、CUはN×Mのサンプルを備え得、ここで、Mは必ずしもNに等しいとは限らない。
[0058]ビデオエンコーダ200は、予測および/または残差情報ならびに他の情報を表すCUのためのビデオデータを符号化する。予測情報は、CUがCUのための予測ブロックを形成するためにどのように予測されるべきであるのかを示す。残差情報は、概して、符号化の前のCUのサンプルと予測ブロックとの間のサンプルごとの差を表す。
[0059]CUを予測するために、ビデオエンコーダ200は、概して、インター予測またはイントラ予測を通してCUのための予測ブロックを形成し得る。インター予測は、概して、前にコーディングされたピクチャのデータからCUを予測することを指すが、イントラ予測は、概して、同じピクチャの前にコーディングされたデータからCUを予測することを指す。インター予測を実行するために、ビデオエンコーダ200は、1つまたは複数の動きベクトルを使用して予測ブロックを生成し得る。ビデオエンコーダ200は、概して、たとえば、CUと参照ブロックとの間の差に関して、CUに厳密に一致する参照ブロックを識別するために動き探索を実行し得る。ビデオエンコーダ200は、参照ブロックが現在のCUに厳密に一致するのかどうかを決定するために絶対値差分和(SAD)、2乗差分和(SSD)、平均絶対差(MAD)、平均2乗差(MSD)、または他のそのような差計算を使用して差分メトリックを計算し得る。いくつかの例では、ビデオエンコーダ200は、単方向予測または双方向予測を使用して現在のCUを予測し得る。
[0060]JEMおよびVVCはまた、インター予測モードと見なされ得るアフィン動き補償モードを与える。アフィン動き補償モードでは、ビデオエンコーダ200は、ズームインもしくはズームアウト、回転、遠近運動(perspective motion)、または他の不規則な動きタイプなどの非並進運動を表す2つ以上の動きベクトルを決定し得る。
[0061]イントラ予測を実行するために、ビデオエンコーダ200は、予測ブロックを生成するためにイントラ予測モードを選択し得る。JEMおよびVVCは、様々な方向モードならびに平面モードおよびDCモードを含む67個のイントラ予測モードを与える。概して、ビデオエンコーダ200は、現在のブロックのサンプルを予測するために現在のブロック(たとえば、CUのブロック)に隣接するサンプルを記述するイントラ予測モードを選択する。ビデオエンコーダ200が、ラスタ走査順序で(左から右に、上から下に)CTUとCUとをコーディングすると仮定すると、そのようなサンプルは、概して、現在のブロックの上、左上、または左にあり得る。
[0062]ビデオエンコーダ200は、現在のブロックのための予測モードを表すデータを符号化する。たとえば、インター予測モードの場合、ビデオエンコーダ200は、様々な利用可能なインター予測モードのうちのどれが使用されるのかならびに対応するモードのための動き情報を表すデータを符号化し得る。単方向または双方向インター予測の場合、たとえば、ビデオエンコーダ200は、高度動きベクトル予測(AMVP)またはマージモードを使用して動きベクトルを符号化し得る。ビデオエンコーダ200は、アフィン動き補償モードの場合に動きベクトルを符号化するために同様のモードを使用し得る。
[0063]ブロックのイントラ予測またはインター予測などの予測に続いて、ビデオエンコーダ200は、ブロックのための残差データを計算し得る。残差ブロックなどの残差データは、対応する予測モードを使用して形成されるブロックとブロックのための予測ブロックとの間のサンプルごとの差を表す。ビデオエンコーダ200は、サンプル領域ではなく変換領域中に変換データを生成するために残差ブロックに1つまたは複数の変換を適用し得る。たとえば、ビデオエンコーダ200は、離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に同様の変換を残差ビデオデータに適用し得る。さらに、ビデオエンコーダ200は、第1の変換に続いてモード依存非分離可能2次変換(MDNSST)、信号依存変換、カルーネンレーベ変換(KLT)などの2次変換を適用し得る。ビデオエンコーダ200は、1つまたは複数の変換の適用に続いて変換係数を生成する。
[0064]上述のように、変換係数を生成するための任意の変換に続いて、ビデオエンコーダ200は、変換係数の量子化を実行し得る。量子化は、概して、係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を行うプロセスを指す。量子化プロセスを実行することによって、ビデオエンコーダ200は、係数の一部または全部に関連するビット深度を低減し得る。たとえば、ビデオエンコーダ200は、量子化中にnビットの値をmビットの値に切り捨て得、ここで、nは、mよりも大きい。いくつかの例では、量子化を実行するために、ビデオエンコーダ200は、量子化されるべき値のビット単位の右シフトを実行し得る。
[0065]量子化の後に、ビデオエンコーダ200は、変換係数を走査し、量子化変換係数を含む2次元行列から1次元ベクトルを生成し得る。スキャンは、より高いエネルギー(したがって、より低い周波数(frequency))の係数をベクトルの前方に配置し、より低いエネルギー(したがって、より高い周波数)の変換係数をベクトルの後方に配置するように設計され得る。いくつかの例では、ビデオエンコーダ200は、シリアル化ベクトルを生成するために量子化変換係数を走査するためにあらかじめ定義された走査順序を利用し、次いで、ベクトルの量子化変換係数をエントロピー符号化し得る。他の例では、ビデオエンコーダ200は適応型走査を実行し得る。量子化された変換係数を走査して1次元ベクトルを形成した後に、ビデオエンコーダ200は、たとえば、コンテキスト適応型バイナリ算術コーディング(CABAC:context-adaptive binary arithmetic coding)に従って、1次元ベクトルをエントロピー符号化し得る。ビデオエンコーダ200はまた、ビデオデータを復号する際にビデオデコーダ300によって使用するための、符号化されたビデオデータに関連するメタデータを記述するシンタックス要素のための値をエントロピー符号化し得る。
[0066]CABACを実行するために、ビデオエンコーダ200は、送信されるべきシンボルにコンテキストモデル内のコンテキストを割り当て得る。コンテキストは、たとえば、シンボルの近隣値が0値であるのか否かに関係し得る。確率決定は、シンボルに割り当てられたコンテキストに基づき得る。
[0067]ビデオエンコーダ200は、さらに、ブロックベースシンタックスデータ、ピクチャベースシンタックスデータ、およびシーケンスベースシンタックスデータなど、シンタックスデータを、たとえば、ピクチャヘッダ、ブロックヘッダ、スライスヘッダ、あるいはシーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、またはビデオパラメータセット(VPS)など、他のシンタックスデータ中でビデオデコーダ300に生成し得る。ビデオデコーダ300は、同様に、対応するビデオデータをどのように復号するのかを決定するためにそのようなシンタックスデータを復号し得る。
[0068]このようにして、ビデオエンコーダ200は、符号化されたビデオデータたとえば、ブロック(たとえば、CU)へのピクチャの区分とブロックのための予測および/または残差情報とを記述するシンタックス要素を含むビットストリームを生成し得る。最終的に、ビデオデコーダ300は、ビットストリームを受信し、符号化されたビデオデータを復号し得る。
[0069]概して、ビデオデコーダ300は、ビットストリームの符号化されたビデオデータを復号するためにビデオエンコーダ200によって実行されるものとは逆のプロセスを実行する。たとえば、ビデオデコーダ300は、ビデオエンコーダ200のCABAC符号化プロセスと逆ではあるが、それと実質的に同様の様式でCABACを使用してビットストリームのシンタックス要素のための値を復号し得る。シンタックス要素は、CTUのCUを定義するために、CTUへのピクチャの区分情報とQTBT構造などの対応する区分構造による各CTUの区分とを定義し得る。シンタックス要素は、さらに、ビデオデータのブロック(たとえば、CU)のための予測および残差情報を定義し得る。
[0070]残差情報は、たとえば、量子化変換係数によって表され得る。ビデオデコーダ300は、ブロックのための残差ブロックを再生するためにブロックの量子化変換係数を逆量子化し、逆変換し得る。ビデオデコーダ300は、ブロックのための予測ブロックを形成するためにシグナリングされた予測モード(イントラ予測またはインター予測)と関連する予測情報(たとえば、インター予測のための動き情報)とを使用する。ビデオデコーダ300は、元のブロックを再生するために(サンプルごとに)予測ブロックと残差ブロックとを組み合わせ得る。ビデオデコーダ300は、ブロックの境界に沿って視覚的アーティファクトを低減するためにデブロッキングプロセスを実行することなどの追加の処理を実行し得る。
[0071]本開示は、概して、シンタックス要素など、ある情報を「シグナリング」することに言及することがある。「シグナリング」という用語は、概して、符号化ビデオデータを復号するために使用されるシンタックス要素の値および/または他のデータの通信を指すことがある。すなわち、ビデオエンコーダ200は、ビットストリーム中でシンタックス要素の値をシグナリングし得る。概して、シグナリングすることは、ビットストリーム中に値を生成することを指す。上記のように、ソースデバイス102は、実質的にリアルタイムでまたは宛先デバイス116による後の取出しのためにストレージデバイス112にシンタックス要素を記憶するときに発生するかもしれないなど、リアルタイムでなく宛先デバイス116にビットストリームを移送し得る。
[0072]以下は、三角形の動き情報をコーディングすることに関する技法について説明する。いくつかの例では、三角形のPUの動き情報は、組み合わされた方式で符号化される。たとえば、上記で説明されたように、ビデオエンコーダ200およびビデオデコーダ300は、マージモードまたはAMVPモードでブロックをそれぞれ符号化または復号し得る。マージモードまたはAMVPモードでは、ビデオエンコーダ200およびビデオデコーダ300は、同様の技法を使用して動きベクトル予測子リストを構築し、したがって、ビデオエンコーダ200が構築する動きベクトル予測子リストは、ビデオデコーダ300が構築する動きベクトル予測子リストと同じであることを含む、実質的に同じである。
[0073]動きベクトル予測子リストを構築するために、ビデオエンコーダ200およびビデオデコーダ300は、空間的に隣接し、コロケートされたブロックの動きベクトル情報を決定し得る。空間的に隣接するブロックは、符号化または復号されている現在のブロックと同じピクチャ中にあり、現在のブロックにすぐ隣接するブロックを指す。コロケートされたブロックは、符号化または復号されている現在のブロックを含むピクチャとは異なるピクチャ中にあり、他のピクチャ中でだが現在のブロックの右下または中心に位置する傾向があるブロックを指す。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、空間的に隣接するブロックおよび/またはコロケートされたブロックのうちの1つまたは複数を評価し、空間的に隣接するおよび/またはコロケートされたブロックのための動きベクトル情報を決定し得る。ビデオエンコーダ200およびビデオデコーダ300は、空間的に隣接し、コロケートされたブロックの動きベクトル情報を動きベクトル予測子リスト中のエントリとして含むことによって動きベクトル予測子リストを構築し得る。いくつかの例では、履歴ベースの動きベクトル予測(HMVP:history-based motion vector prediction)が使用可能にされ得る。HMVPでは、現在のブロックにすぐ隣接していないブロックの動きベクトル情報が、動きベクトル予測子リスト中に含まれ得る。
[0074]動きベクトル予測子リスト中の動きベクトル情報は、現在のブロックのための動きベクトルを予測するために使用され得る。したがって、動きベクトル予測子リスト中の動きベクトル情報は、動きベクトル予測子と呼ばれることがある。たとえば、ビデオエンコーダ200は、(たとえば、どの参照サンプルが元のビデオデータに最も近いのかに基づいて)現在のブロックのための予測ブロックを決定し、予測ブロック(または予測ブロックを生成するために使用されるサンプル)を指す動きベクトルを決定し得る。
[0075]マージモードでは、ビデオエンコーダ200は、決定された動きベクトルに等しい動きベクトル予測子を識別する。いくつかの例では、ビデオエンコーダ200は、予測ブロックを決定する(たとえば、元のビデオデータに最も近い動きベクトル予測子のうちの1つに基づいて予測ブロックを選択する)ために動きベクトル予測子を利用し得る。両方の例では、ビデオエンコーダ200は、識別された動きベクトル予測子のための動きベクトル予測子リスト中のインデックス値(たとえば、エントリ)を示す情報(たとえば、インデックス値によって識別される動きベクトル予測子リストのエントリ中に記憶された隣接するまたはコロケートされたブロックの動きベクトル情報)をシグナリングする。
[0076]ビデオデコーダ300は、動きベクトル予測子リスト中のインデックス値の情報を受信し、エントリにある動きベクトル予測子(たとえば、インデックス値によって識別される動きベクトル予測子リストのエントリ中に記憶された隣接するまたはコロケートされたブロックの動きベクトル情報)を取り出す。ビデオデコーダ300は、次いで、現在のブロックのための動きベクトルを取り出された動きベクトル情報に等しく(たとえば、動きベクトル予測子に等しく)設定する。
[0077]AMVPはマージモードと同様である。しかしながら、AMVPモードでは、動きベクトル予測子と現在のブロックのための動きベクトルとが同じであるのではなく、ビデオエンコーダ200は、動きベクトル予測子と現在のブロックのための動きベクトルとの間の動きベクトル差(MVD)をシグナリングし得る。AMVPモードでは、ビデオエンコーダ200は、動きベクトル予測子のための動きベクトル予測子リスト中のインデックス値を示す情報をシグナリングし、MVDをシグナリングする。ビデオデコーダ300は、インデックス値を受信し、動きベクトル予測子リストから動きベクトル予測子を取り出す。ビデオデコーダ300は、次いで、現在のブロックのための動きベクトルを決定するために動きベクトル予測子にMVDを加算する。
[0078]VVCは、三角形モードを含む。三角形モードでは、現在のブロック(たとえば、矩形ブロック)は、2つの三角形の区分に分割(split)(たとえば、区分(partitioned)または分割(divided))される。ビデオエンコーダ200は、2つの三角形の区分のための予測ブロックを識別する2つの三角形の区分の各々のための動きベクトルを決定し得る。コーディングユニットの現在のブロックが、どのように、各々がそれぞれのPUを有する三角形の区分に分割されるのかの指示が、図2Aおよび図2Bに示されている。たとえば、分割は、ブロックの対角線(たとえば、左上から右下へ)または反対角線(たとえば、右上から左下へ)であり得、これは、図2Aおよび図2Bに示されるようにCUを2つの三角形のPUに分割する。たとえば、図2Aでは、現在のブロックは、図2Aに示されるように、各々がそれぞれの予測ユニット(PU1124およびPU2126)を有する2つの三角形の区分を形成するように左上隅から右下隅で分割される。上記で説明されたように、PUは、ルーマ予測ブロックとクロマ予測ブロックとを含む。したがって、「予測ブロック」という用語は、PUと互換的に使用される。図2Bでは、現在のブロックは、図2Bに示されるように、各々がそれぞれの予測ユニット(PU1128およびPU2130)を有する2つの三角形の区分を形成するように右上隅から左下隅で分割される。
[0079]マージモードおよびAMVPモードは、三角形モードでコーディングされた現在のブロックに拡張され得る。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、それぞれ、現在のブロックのための各々の動きベクトル予測子リストを構築し得る。ビデオエンコーダ200は、2つの三角形の区分の各々のための動きベクトル予測子を決定し、決定された動きベクトル予測子のための動きベクトル予測子リスト中のエントリを示すインデックス値をシグナリングし得る。
[0080]いくつかの技法は、現在のブロックが三角形モードのために分割される方向を示す情報と2つの三角形の区分のための動きベクトル予測子リスト中のインデックス値とを1つの値に組み合わせる。たとえば、分割方向は、1ビットの値(たとえば、1つの分割方向のための0および別の分割方向のための1)によって表され得る。2つの三角形の区分のための動きベクトルリスト中のインデックス値と分割方向のための1ビットの値とは、[0,39]の範囲の値に組み合わされ得る。VTM-3.0コード中の組合せマップは、図3Aおよび図3Bに示されている。たとえば、分割方向が0(すなわち、Dir0)であり、インデックス値がそれぞれ2つの三角形の区分について0,1である場合、組み合わされたインデックスは3になる。
[0081]たとえば、ビデオエンコーダ200は、3の値をシグナリングし得る。この例では、ビデオデコーダ300は、図3Aおよび図3Bに示されている2つの表を評価し、3の値が図3Aの表中に位置すると決定し得る。したがって、ビデオデコーダ300は、現在のブロックが方向0に分割されると決定し得る(たとえば、この例では図2Aのような分割)。また、ビデオデコーダ300は、「3」が図3Aの表中の行0、列1中に位置すると決定し得る。行が0であることに基づいて、ビデオデコーダ300は、現在のブロックの第1の三角形の区分のための動きベクトル予測子リスト中の第1のインデックス値が0であると決定し得、列が1であることに基づいて、ビデオデコーダ300は、現在のブロックの第2の三角形の区分のための動きベクトル予測子リスト中の第2のインデックス値が1であると決定し得る。
[0082]しかしながら、図3Aおよび図3Bに示される表を使用することは、メモリまたは処理の点で効率的でないことがある。たとえば、図3Aおよび図3Bの表を使用するコーディング方式では、三角形の動き情報がメモリ中のルックアップテーブル中に記憶される必要があり得る。また、ビデオエンコーダ200およびビデオデコーダ300は、三角形のコーディングされたCUごとに表探索を実行する必要があり得、したがって、複雑性が高くなる。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、三角形モードでコーディングされたブロックごとに表探索動作を実行する処理サイクルを消費する必要があり得る。
[0083]本開示は、三角形のCUの動き情報を効率的に符号化するための例示的な技法について説明する。三角形のコーディングされたCUごとに、ビデオコーダ(たとえば、ビデオエンコーダ200またはビデオデコーダ300)は、それぞれ、ビットストリームへまたはそれから、2つの三角形の区分のための2つの対応する三角形のPUの分割方向と動き情報とをコーディング(たとえば、符号化または復号)し得る。コンテキスト適応型のコーディング技法が、より高い圧縮パフォーマンスを達成するためにシンタックス要素に適用され得る。
[0084]また、第2にコーディングされる三角形のPUの動き情報のより良いコーディングパフォーマンスを達成するために、ビデオコーダは、動き情報中の冗長性をさらに除去するために第1にコーディングされる動き情報を使用し得る。たとえば、両方の三角形のPUの動き情報が同じである場合、ブロックは、その動き情報予測のために使用される1つのCU全体として扱われ得る。そのようなブロックは、三角形モード以外でシグナリングされ得るので、この事例は、冗長性を導入する。言い換えれば、両方の三角形の区分のための動きベクトル情報が同じである場合、2つの三角形の区分のための2つの予測ブロックが全体として単一の矩形ブロックを形成することになる。その場合、三角形モードで現在のブロックをコーディングする目的がないことになり、ここで、2つの三角形の区分がそれぞれ動きベクトル情報をそれぞれ有する。むしろ、現在のブロックを三角形の区分に分割し、そして、2つの三角形の区分の各々をコーディングして計算リソースを浪費することがない、非三角形モードで現在のブロックをコーディングするほうがより単純であり得る。
[0085]したがって、2つの三角形の区分のための動きベクトル(たとえば、動きベクトルおよび/または動きベクトルがポイントする予測ブロックの値)が異なっていなければならないという要求があり得る。一例では、三角形モードでの各PUの動き情報は、動きベクトル予測子リスト中のインデックス値を使用してシグナリングされる。マージモードのための動きベクトル予測子リスト中のインデックス値は、マージインデックスと呼ばれる。たとえば、第1の三角形の区分のための第1のマージインデックスは、ビデオデコーダ300が第1の三角形の区分のための第1の動きベクトルを決定する動きベクトル予測子を識別し得、第2の三角形の区分のための第2のマージインデックスは、ビデオデコーダ300が第2の三角形の区分のための第2の動きベクトルを決定する動きベクトル予測子を識別し得る。
[0086]この場合、第2のPUマージインデックスのシグナリングのために、第1のPUのマージインデックスに等しいマージインデックスが除去される(すなわち、使用されることが可能でないことがある)。言い換えれば、第1の三角形の区分のための動きベクトルを決定するために使用されるマージインデックスは、第2の三角形の区分のための動きベクトルを決定するために使用されるマージインデックスでないことがある。このようにして、第1の三角形の区分と第2の三角形の区分とのための動きベクトルが同じである可能性が大幅に低減され得る。
[0087]一例では、両方の区分の候補インデックスをチェックする代わりに、実際の動き情報(動きベクトル(MV)、参照インデックス、加重パラメータなど)がチェックされる。第1の三角形のPU中と同じ動き情報を有する候補は、第2のPUのために使用されることまたはシグナリングされることから除外される。たとえば、動きベクトル予測子リスト中のインデックス値が異なることを単に保証するのではなく、ビデオエンコーダ200は、動きベクトル予測子リスト中の第1のインデックス値によって識別されるエントリのための動きベクトル値、動きベクトルがポイントする参照ピクチャリストへのインデックス、加重パラメータなどを決定し得る。第2のインデックス値によって識別されるエントリ中の動きベクトル予測子のための動きベクトル値、動きベクトルがポイントする参照ピクチャリストへのインデックス、加重パラメータなどが同じである場合、ビデオエンコーダ200は、次いで、動きベクトル予測子リスト中の第2のインデックス値によって識別される動きベクトル情報を選択しないことがある。すなわち、第1の三角形の区分と第2の三角形の区分とのための動きベクトル予測子のためのインデックス値が異なることを単に保証するのではなく、ビデオエンコーダ200は、異なるインデックス値によって識別される異なるエントリ中に記憶された実際の動きベクトル情報をさらに比較することによって第1の三角形の区分と第2の三角形の区分とのための動きベクトル情報が異なることを保証し得る。
[0088]三角形モードは、AMVP(アドバンス動きベクトル予測)、アフィンモードなどの他のインター予測モードと一緒に動作するように拡張され得る。そのような例では、マージインデックスは、本開示で説明される1つまたは複数の例に従ってモード候補インデックスと置き換えられ得る。
[0089]たとえば、AMVPモードの場合、参照インデックス、MV(動きベクトル)予測子インデックス、およびMVDがシグナリングされるとき、第2のPUが、第1のPUの場合と同じである、MVDにMVPを加算することによって取得される最終動き情報を有する事例が、使用を制限される(たとえば、第1のPUと第2のPUとのための動き情報が同じでないことがある)。すなわち、第2のPUの動き情報(たとえば、第2のPUのためのMVDとMVPとを加算したもの)は、第1のPUのための動き情報に等しくなることが許可されないことがあり、したがって、動き情報が第1のPUと同じでないことまたはAMVPが利用可能でないことがあることを保証するために異なるMVPまたはMVDがあり得る。一例として、第2のPUのための動き情報が第1のPUのための動き情報と同じでないことを保証することは、ビットストリーム制約またはシンタックス制約として行われ、ここで、シンタックス制約は、あるシンタックスの組合せが可能でないことと、冗長性がオーバーヘッドを低下させるために除去されることとを意味する。
[0090]三角形の動き情報をコーディングすることに関する技法のいくつかの例について説明する。例示的な技法は、一緒にまたは別々に使用され得る。
[0091]本開示で説明される1つまたは複数の例示的な技法では、ビデオエンコーダ200は、帯域幅効率を促進するためにビデオデコーダ300にシグナリングされる必要がある情報の量を低減し得る。上記で説明されたように、現在のブロックの第1の三角形の区分と第2の三角形の区分とのための動きベクトル予測子リストへのインデックス値は異なっていなければならない。シグナリングされる必要があるデータの量を低減するために動きベクトル予測子リストへの2つのインデックス値が異なる必要があるという要求を活用することが可能であり得る。
[0092]図4は、動き情報を決定することの一例を示す概念図である。図4は、三角形の区分402Aと三角形の区分402Bとに分割された現在のブロック400を示す。図4はまた、インデックス値0~4によって識別される5つのエントリを含む動きベクトル予測子リストを示す。各エントリは、動き予測子を含む。たとえば、インデックス値0によって識別される第1のエントリは、<x0,y0>の動きベクトル値を有するMV0を記憶し、インデックス値1によって識別される第2のエントリは、<x1,y1>の動きベクトル値を有するMV1を記憶し、インデックス値2によって識別される第3のエントリは、<x2,y2>の動きベクトル値を有するMV2を記憶し、インデックス値3によって識別される第4のエントリは、<x3,y3>の動きベクトル値を有するMV3を記憶し、インデックス値4によって識別される第5のエントリは、<x4,y4>の動きベクトル値を有するMV4を記憶する。
[0093]この例では、ビデオエンコーダ200は、現在のブロック400が三角形モードで区分されると決定し得る。ビデオエンコーダ200は、図4に示されている現在のブロック400の1つまたは複数の隣接ブロックの動きベクトル情報を含む動きベクトル予測子リストを構築し得る。
[0094]いくつかの例では、ビデオエンコーダ200は、(たとえば、三角形の区分402Aのための)第1の三角形の予測ブロックを決定し得る。たとえば、ビデオエンコーダ200は、動きベクトル予測子リスト中の動きベクトル予測子を評価し、複数の三角形のブロックを識別し得る。ビデオエンコーダ200は、三角形の区分402Aと三角形のブロックの各々を比較し得、第1の三角形の区分に最も近い三角形のブロックを(たとえば、いくつかの例として、SAD、SSD、またはMADに関して)第1の三角形の予測ブロックとして決定し得る。
[0095]ビデオエンコーダ200は、決定された第1の三角形の予測ブロックに基づいて動きベクトル予測子リスト中の第1のインデックス値を決定し得る。たとえば、図4に示されているように、三角形の区分402Aについて、ビデオエンコーダ200は、使用すべき動きベクトル予測子が、インデックス値1によって識別されるエントリに記憶されたMV1<x1,y1>であると決定していることがある。この例では、第1のインデックス値は、インデックス値1であり得る。ビデオエンコーダ200は、第1のインデックス値に基づいて第1の値をシグナリングし得る。たとえば、ビデオエンコーダ200は、この例では、第1のインデックス値が1の値であることに基づいて1の値をシグナリングし得る。
[0096]上記で説明された技法と同様の技法を使用して、ビデオエンコーダ200は、(たとえば、三角形の区分402Bのための)第2の三角形の予測ブロックを決定し得る。たとえば、ビデオエンコーダ200は、動きベクトル予測子リスト中の動きベクトル予測子を評価し、複数の三角形のブロックを識別し得る。ビデオエンコーダ200は、三角形の区分402Bと三角形のブロックの各々を比較し得、第2の三角形の区分に最も近い三角形のブロックを第2の三角形の予測ブロックとして決定し得る。
[0097]ビデオエンコーダ200は、決定された第2の三角形の予測ブロックに基づいて動きベクトル予測子リスト中の第2のインデックス値を決定し得る。たとえば、図4に示されているように、三角形の区分402Bについて、ビデオエンコーダ200は、使用すべき動きベクトル予測子が、インデックス値3によって識別されるエントリに記憶されたMV3<x3,y3>であると決定していることがある。この例では、第2のインデックス値は、インデックス値3であり得る。
[0098]本開示で説明される1つまたは複数の例によれば、第2のインデックス値が第1のインデックス値よりも大きいので、ビデオエンコーダ200は、第2のインデックス値の値ではなく低減された値をシグナリングするように構成され得る。たとえば、ビデオエンコーダ200は、第2のインデックス値からオフセットを減算することによって第2の値を決定するように構成され得る。一例として、オフセットは1であり得る。したがって、この例では、ビデオエンコーダ200は、2の第2の値を決定し得る(たとえば、3の第2のインデックス値から1を減算したものは2である)。
[0099]ビデオエンコーダ200は、3の第2のインデックス値ではなく第2の値(たとえば、2)をシグナリングし得る。いくつかの例では、より小さい値をシグナリングすることは、より少数のビットを必要とすることを生じる。一例として、2の値を2値化することは、3の値を2値化するよりも少数のビットしか必要としない。別の例として、CABACコーディングが利用されるとき、符号化するために何個のビットが必要になるのかは、可能な値の範囲に基づき得る。範囲が低減される場合、CABACコーディングから生じるビット数が低減される。たとえば、第1の値の場合、範囲は0~4であり得るが、第2の値の場合、範囲は減算により0~3に低減される(たとえば、第2の値が4に等しくなる可能性はない)。
[0100]ビデオデコーダ300は、三角形の区分402Aと三角形の区分402Bとのための動きベクトル予測子を決定するためにシグナリングされた第1の値と第2の値とを利用し得る。たとえば、現在のブロック400に関してシグナリングされた情報に基づいて、ビデオデコーダ300は、現在のブロック400が三角形モードで区分されると決定し得る。ビデオエンコーダ200と同様に、ビデオデコーダ300は、現在のブロック400の1つまたは複数の隣接ブロックの動きベクトル情報を含む動きベクトル予測子リストを構築し得る。
[0101]ビデオデコーダ300は、動きベクトル予測子リスト中の第1のインデックス値を決定するために(たとえば、三角形の区分402Aのための第1のインデックス値を決定するために)第1の値を復号し得る。図4の例では、ビデオデコーダ300は、第1の値のための1の値を復号し得、第1のインデックス値に基づいて第1の三角形の予測ブロックを決定し得る。たとえば、ビデオデコーダ300は、第1の値が1であることに基づいて第1のインデックス値が1であると決定し得る。ビデオデコーダ300は、この例ではMV1<x1,y1>である1の第1のインデックス値によって識別される動きベクトル予測子リストのエントリにアクセスし得る。
[0102]ビデオデコーダ300は、MV1<x1,y1>に基づいて(たとえば、三角形の区分402Aのための)第1の動きベクトルを決定し得る。たとえば、マージモードの場合、ビデオデコーダ300は、第1の動きベクトルをMV1に等しく設定し得る。AMVPモードの場合、ビデオデコーダ300は、MVDを受信し得、第1の動きベクトルを決定するために<x1,y1>にMVDを加算し得る。ビデオデコーダ300は、次いで、第1の動きベクトルによってポイントされる三角形のブロックとして第1の三角形の予測ブロックを決定し得る。
[0103]ビデオデコーダ300は、動きベクトル予測子リスト中の第2のインデックス値を決定するために(たとえば、三角形の区分402Bのための第2のインデックス値を決定するために)第2の値を復号し得る。図4の例では、ビデオデコーダ300は、第2の値のための2の値を復号し得る。上記で説明されたように、実際の第2のインデックス値は3であるが、ビデオエンコーダ200は、2の値をシグナリングしていることがある。したがって、ビデオデコーダ300は、第2の値のための2の値を復号し得る。
[0104]ビデオデコーダ300は、第2の値に基づいて第2のインデックス値を決定し得る。たとえば、ビデオデコーダ300は、第1の値(たとえば、1)と第2の値(たとえば、2)を比較し得る。第2の値が第1の値以上であることに基づいて、ビデオデコーダ300は、第2のインデックス値を決定するために第2の値にオフセット(たとえば、この例では1)を加算し得る(たとえば、2+1は3である)。
[0105]1つまたは複数の例では、ビデオデコーダ300は、第2のインデックス値に基づいて第2の三角形の予測ブロックを決定し得る。たとえば、ビデオデコーダ300は、2の第2の値に1を加算することによって第2のインデックス値が3であると決定し得る。ビデオデコーダ300は、この例ではMV3<x3,y3>である3の第2のインデックス値によって識別される動きベクトル予測子リストのエントリにアクセスし得る。
[0106]ビデオデコーダ300は、MV3<x3,y3>に基づいて(たとえば、三角形の区分402Bのための)第2の動きベクトルを決定し得る。たとえば、マージモードの場合、ビデオデコーダ300は、第2の動きベクトルをMV3に等しく設定し得る。AMVPモードの場合、ビデオデコーダ300は、MVDを受信し得、第2の動きベクトルを決定するために<x3,y3>にMVDを加算し得る。ビデオデコーダ300は、次いで、第2の動きベクトルによってポイントされる三角形のブロックとして第2の三角形の予測ブロックを決定し得る。
[0107]ビデオデコーダ300は、次いで、第1の三角形の予測ブロックと第2の三角形の予測ブロックとに基づいて現在のブロック400を再構築し得る。たとえば、ビデオデコーダ300は、三角形の区分402Aと第1の三角形の予測ブロックとの間の差を示す残差情報を受信し得る。ビデオデコーダ300は、三角形の区分402Aを再構築するために差に第1の三角形の予測ブロックを加算し得る。ビデオデコーダ300は、三角形の区分402Bと第2の三角形の予測ブロックとの間の差を示す残差情報を受信し得る。ビデオデコーダ300は、三角形の区分402Bを再構築するために差に第2の三角形の予測ブロックを加算し得る。
[0108]上記の例では、第2のインデックス値は第1のインデックス値よりも大きく、したがって、ビデオエンコーダ200は、オフセット(たとえば、1)を減算し、ビデオデコーダ300は、オフセット(たとえば、1)を加算した。しかしながら、いくつかの例では、第2のインデックス値は、第1のインデックス値よりも小さくなり得る。たとえば、三角形の区分402Bのための動きベクトル予測子がMV3<x3,y3>ではなくMV0<x0,y0>であると仮定する。
[0109]この例では、ビデオエンコーダ200は、第2のインデックス値が0に等しいことに基づいて第2の値が0であると決定し得、0の第2の値をシグナリングし得る。ビデオデコーダ300は、0の第2の値を復号し得る。ビデオデコーダ300は、1の第1の値と0の第2の値を比較し得る。0の第2の値が1の第1の値以上でないことに基づいて、ビデオデコーダ300は、オフセットを加算し得ない。むしろ、ビデオデコーダ300は、第2のインデックス値が0の第2の値に等しいと決定し得、MV0<x0,y0>に等しいものとして三角形の区分402Bのための動きベクトル予測子を決定し得る。
[0110]上記で説明されたように、ビデオデコーダ300は、現在のブロック400が三角形モードで区分されると決定し得る。いくつかの例では、ビデオデコーダ300は、第1の値と第2の値とは別個の受信されたシンタックス要素に基づいて区分方向(たとえば、分割方向)を決定し得る。たとえば、一例では、分割方向は、1ビットの値(D)によって表され、値は、コンテキスト適応型バイナリ算術コーディング(CABAC)を介して符号化される。コンテキストは、特に、この値のために設計される。このようにして、区分方向を示す情報は、動きベクトル予測子リスト中のインデックスを示す情報とは別個のシンタックス要素であり得る。すなわち、ビデオエンコーダ200は、第1の値と第2の値と(たとえば、上記の例では1と2とのまたは1と0との値)とは別個のシンタックス要素(たとえば、1ビットの値(D))に基づいて現在のブロック400のための区分方向をシグナリングし得る。ビデオデコーダ300は、第1の値と第2の値と(たとえば、上記の例では1と2とのまたは1と0との値)とは別個の受信されたシンタックス要素(たとえば、1ビットの値(D))に基づいて現在のブロック400のための区分方向を決定し得る。
[0111]1つまたは複数の例では、各PUの動き情報は、各PUに対応する候補セットの整数値のインデックスによって表される(I1およびI2)。I1とI2との両方もCABACコーディングを使用して符号化される。たとえば、図4の例では、MV1が、三角形の区分402Aのための動きベクトルを決定するために使用される動きベクトル予測子であり、これは、次いで、三角形の区分402Aのための三角形の予測ブロックを決定するために使用される。インデックス値MV1(たとえば、1)は、CABACコーディングされ得る。
[0112]三角形の区分402A、402Bの候補セットは、別々に生成され得る。2つのセットは、C1およびC2として指名され、候補セットのサイズは、N1およびN2である。この例では、I1の情報を利用することによってI2の符号化パフォーマンスがどのように改善され得るのかを示すためにI1が最初に符号化され、次いで、I2が次に符号化される。候補セット(C)内の動きベクトル(MV)のインデックスを戻す次の関数が定義され得る。
Idx(C2,MV1)<I2である場合、I2’=I2-1を符号化し、そうでない場合、I2’=I2を符号化する。
[0113]例によれば、Idx(C2,MV1)≠+∞である場合、I2’の範囲は〔0,N2-1〕ではなく〔0,N2-2〕になる。この例では、MV1は、第1の三角形の予測ブロックを決定するための動きベクトルまたは動きベクトル予測子を指す。いくつかの例では、第2の三角形の予測ブロックのための動きベクトルが第1の三角形の予測ブロックのための動きベクトルと同じでないので、MV1が動きベクトル予測子リスト中に存在しないことがある。
[0114]ビデオエンコーダ200とビデオデコーダ300とによって使用されるエントロピーコーディング方式では、整数値のインデックスによって消費されるビット数は、通常、その値の範囲に関係する。値の範囲のサイズを減少させることは、コーディング効率を改善することができる。言い換えれば、上記で説明されたように、CABACコーディングの場合、オフセットによって第2の値の値を減少させることによって、第2の値の範囲が低減される(たとえば、図4の例における第2の値の範囲は0から3までのみになり得る)。しかしながら、オフセットの減算がない場合、第2の値のための範囲は0から4になることになる(たとえば、範囲の低減はない)。図4の例において2の値をシグナリングすることによって消費されるビット数は値の範囲に基づくので、値の範囲が低減されなかった場合、2をシグナリングすることによって消費されるビット数は、3をシグナリングすることによって消費されるビット数よりも少なくなることになる。
[0115]いくつかの例では、分割方向は、1ビットの値として表され、値は、CABACのバイパスモードを介して符号化される。この場合も、ビデオエンコーダ200は、第1の値と第2の値と(たとえば、上記の例では1と2とのまたは1と0との値)とは別個のシンタックス要素(たとえば、1ビットの値(D))に基づいて現在のブロック400のための区分方向をシグナリングし得る。ビデオデコーダ300は、第1の値と第2の値と(たとえば、上記の例では1と2とのまたは1と0との値)とは別個の受信されたシンタックス要素(たとえば、1ビットの値(D))に基づいて現在のブロック400のための区分方向を決定し得る。
[0116]同時に、2つの三角形のPUは、同じ候補セットを共有し(C1=C2=C,N1=N2=N)、この場合、任意の所与の動きベクトル(MV)について、Idx(C1,MV)=Idx(C2,MV)があり得る。I1の情報は、I2を符号化するときに次のように使用され得る。I1<I2である場合、I2’=I2-1を符号化し、そうでない場合、I2’=I2を符号化する。この場合、I1の範囲は[0,N-1]であり、I2の範囲は、常に[0,N-2]である。上記は、第2のインデックス値が第1のインデックス値よりも大きいことに基づいて、ビデオエンコーダ200は、ビデオエンコーダ200がシグナリングする第2の値を生成するために第2のインデックス値からオフセットを減算し、ビデオデコーダ300は、動きベクトル予測子リスト中に第2のインデックス値を生成するために第2の値が第1の値以上であることに基づいて受信された第2の値にオフセットを加算する例を言い換えている。
[0117]以下は、三角形モードでコーディングされたブロックのための動きベクトル予測子リストを構築するための技法について説明する。VVCでは、三角形モードは、非三角形モードのためのマージモードにおいて使用されるマージ候補リスト導出とは異なるそれ自体のマージ候補リスト導出方法を有する。異なる導出技法のために実装負担の増加があり得る。VVC三角形モード候補リストは、三角形のPUコーディングのために使用される5つの単予測動きベクトル候補を含み、2つのステップによって導出される。
[0118]ステップ1では、隣接ブロックからの最高7つの動きベクトルが候補セットCstep1を構築するために使用される。いくつかの技法では、Cstep1を構築するプロシージャは、三角形モードによって排他的に使用される。しかしながら、標準のマージモードでは、候補セットCmergeは、同様の目的のために構築される。CmergeおよびCstep1の異なるロジックを有することは、ハードウェアおよびソフトウェア設計の複雑性を増加し得る。
[0119]ステップ2では、Cstep1中の動きベクトルが複数回ループされ、最高5つの単予測MVが最終候補Cstep2のために導出される。詳細なプロシージャは以下の通りである。
1. Cstep1中の各MVについて、MVが単予測であり、MVがCstep2中にない場合、Cstep2にMVを加える。
2. Cstep1中の各MVについて、MVが双予測であり、MVの参照リスト0部分(MVpart0)がCstep2中にない場合、Cstep2にMVpart0を加える。
3. Cstep1中の各MVについて、MVが双予測であり、MVの参照リスト1部分(MVpart1)が、Cstep2中にない場合、Cstep2にMVpart1を加得え。
4. Cstep1中の各MVについて、MVが双予測であり、MVpart0とMVpart1との平均(MVavg)がCstep2中にない場合、Cstep2にMVavgを加える。
5. Sizeof(Cstep2)<5である場合、0のMVで残りのスロットを充填する。
任意のステップにおいて、Sizeof(Cstep2)が5になる場合、プロシージャは直ちに終了する。
[0120]ステップ2の第4のパスにおいて使用される「平均」演算を実行するために、同じ参照ピクチャにポイントする2つの動きベクトルが必要とされる。しかしながら、双予測動きベクトルの参照リスト0部分と参照リスト1部分とは、異なる参照ピクチャにポイントし得る。すなわち、双予測動きベクトルは、2つの動きベクトルを含む。第1の動きベクトルは、第1の参照ピクチャリスト(リスト0)中で識別されるピクチャにポイントし、第2の動きベクトルは、第2の参照ピクチャ(リスト1)中で識別されるピクチャにポイントする。参照リスト0部分は、参照ピクチャリスト0中のピクチャへの第1の動きベクトルを指し、参照リスト1部分は、参照ピクチャリスト1中のピクチャへの第2の動きベクトルを指す。そのような場合、双予測動きベクトルの参照リスト1部分は、参照リスト0部分の同じ参照ピクチャにスケーリングされる必要があり得る。スケーリングは、POCcurrent-POCreference_picture_list_0とPOCcurrent-POCreference_picture_list_1とに基づく。
[0121]上記で説明されたステップ2は、2つの問題を有し得る。
・ステップ2は、マルチパス方式で動作する。Cstep1の最後のアイテムから導出された動き情報は、Cstep2の第1のアイテムになり得るので、ステップ1が完全に完了されるまでステップ2は開始することができない。
・動きベクトルのスケーリングは、特にハードウェアコーデック設計にとって高い複雑性を有する。一方、ステップ2の第4のパスは、コーデックの複雑性を大幅に増加させ得る複数のスケーリング演算を有し得る。
[0122]本開示は、単予測候補リストを導出する際により統一され、より単純な手法を与え得る例示的な技法について説明する。例示的な技法は、既存の候補リスト導出プロセスを使用し得る。たとえば、マージモードの場合、本技法は、マージ候補リスト導出であり得る。この導出プロセスの出力は、Cmergeと呼ばれる。三角形モードが各PUについて単予測を使用するので、マージリスト導出中の双予測MVは、どちらも三角形モードでは(Ctriangleと呼ばれる)候補リストに加えられ得る単L0 MVと単L1 MVとの2つに分割される。いくつかの例では、候補リストに1つしか加えられないことがある。この場合、候補リスト導出はマージモードと共有され、双MVを単MVに分割することしか追加される必要がない。
[0123]言い換えれば、ビデオエンコーダ200およびビデオデコーダ300は、双予測動きベクトルと単予測動きベクトルの両方を含む最初の動きベクトル予測子リストを構築し得る。双予測動きベクトルは、第1の参照ピクチャリスト中で識別されるピクチャ中のブロックにポイントする1つと第2の参照ピクチャリスト中で識別されるピクチャ中のブロックにポイントする1つとの2つの動きベクトルでインター予測される隣接ブロックの動きベクトルを指す。単予測動きベクトルは、1つの動きベクトルでインター予測される隣接ブロックの動きベクトルを指す。
[0124]非三角形モードの場合(たとえば、現在のブロックが三角形モードで区分されない)、動きベクトル予測子リストは、双予測動きベクトルと単予測動きベクトルの両方を含み得る。しかしながら、三角形モードの場合、動きベクトル予測子リストは、単予測動きベクトルしか含み得ない。したがって、動きベクトル予測子リストの構成中に何らかの統一を与えるために、最初の動きベクトル予測子リストが双予測動きベクトルと単予測動きベクトルの両方を含むように、ビデオエンコーダ200およびビデオデコーダ300は、非三角形モードの場合と同様の方式で最初の動きベクトル予測子リストを構築し得る。次いで、ビデオエンコーダ200およびビデオデコーダ300は、(たとえば、非限定的な一例として、動きベクトル予測子リスト中の2つの別個のエントリに双予測動きベクトルを分離することによって)最初の動きベクトル予測子リストに基づいて動きベクトル予測子リストを構築し得る。
[0125]単MVは次々にリストに追加され得るか、または候補のうちの1つが、候補リスト中の後の位置に追加され得る。さらに、三角形のCUのために1回導出された同じマージリストが両方のPUのために使用され得る。いくつかの例では、上記で説明されたように、冗長除去が行われ得る。
[0126]一実装例では、候補リストの生成の第1のステップにおいて、マージ候補リストCmergeが生成される。Cmergeは、双予測MVと単予測MVの両方を含み得る。三角形のPUの動き補償のために使用されるために、各双予測MVは、2つの単予測MV(MVの単L0部分および単L1部分)と置き換えられ得る。言い換えれば、双予測動きベクトルは、参照ピクチャリスト0中のピクチャ中のブロックにポイントする単予測動きベクトルの1つと参照ピクチャリスト1中のピクチャ中のブロックにポイントする単予測動きベクトルの別の1つとの2つの単予測動きベクトルに分離される。冗長除去後に、最終のCtriangleが生成される。
[0127]実装例のCmergeからCtriangleへの変換の詳細について、次のように説明される。
[0128]別の実装例では、特にハードウェアコーデック設計について、候補セットの生成のレイテンシがさらに低減され得るように、上記で説明されたCmergeとCtriangleとの生成がパイプライン方法で設計される。
[0129]スタンドアロンプロシージャとしての標準的なマージ候補Cmergeの生成について、次のように説明する。擬似コードで呼び出されるPruning_test_succeededプロシージャは、標準的なマージモードによって定義された冗長性除去を表す(たとえば、出力CmergeはNmergeの最大サイズを有する)。
[0130]Ctriangleの生成は、Cmergeの生成のためのGENERATE_C_Merge()のロジックを共有し、CmergeのメンバーをCtriangleのメンバーにオンザフライで変換する。生成されたCtriangleは、Ntriangleの最大サイズを有する。
[0131]以下は、動き情報ストレージについて説明する。変数NoBackwardPredFlagは次のように導出される。NoBackwardPredFlagは、特定のピクチャのすべての参照ピクチャが現在のピクチャよりも小さいピクチャ順序カウント(POC)を有するのかどうか示すフラグである。すべての参照ピクチャがより小さいPOCを有する場合、NoBackwardPredFlagは真である。そうでない場合、1つまたは複数の参照ピクチャは、現在のピクチャよりも大きいPOCを有し、NoBackwardPredFlagは、偽である。たとえば、DiffPicOrderCnt(aPic,CurrPic)が現在のスライスのRefPicList0またはRefPicList1中の各ピクチャaPicについて0以下である場合、NoBackwardPredFlagは1に等しく設定される。そうでない場合、NoBackwardPredFlagは0に等しく設定される。
[0132]MV(動きベクトル)の組合せ(combination)のプロシージャは、図5に示されている。ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックのための2つの動きベクトルが異なる参照リストを有する(たとえば、現在のブロックのための第1の動きベクトルが参照ピクチャリスト0中のピクチャを指し、現在のブロックのための第2の動きベクトルが参照ピクチャリスト1中のピクチャを指す)のかどうかを決定し得る(500)。現在のブロックのための2つの動きベクトルが異なる参照リストを有する場合(500のはい)、2つの動きベクトルは、直接組み合わされ得る(combined directly)(図5ではMV1+MV2として表され得る)(502)。そうでない場合(500のいいえ)、MVの組合せが実行され得るようにMVのうちの1つが他の参照リストにマッピングされ得る。
[0133]たとえば、2つのMVが異なるリストにポイントする場合、L0部分としてL0(すなわち、参照ピクチャリスト0)にポイントするMVと、L1部分としてL1(すなわち、参照ピクチャリスト1)にポイントする他のMVと、を使用することによってBi-MVが生成され得る。2つのMVが1つのリスト(たとえば、L0)をポイントする場合、2つのL0構成要素を含んでいるが、L1構成要素を含んでいないBi-MVがないので、2つのMVがBi-MVに直接組み合わされないことがある。
[0134]MV2が最初にテストされる(504)。MV2の参照ピクチャがまた、他の参照リスト中に存在する場合、マッピングは成功し(504の成功)、出力MV2’がMV1と組み合わされ得る(MV1+MV2’として表され得る)(506)。そうでない場合(504の失敗)、同じマッピングがMV1’のためにMV1に対して実行され(508)、成功の場合(508の成功)、(MV1’+MV2)の組み合わされた出力を生じる(510)。MV1’とMV2’の両方が存在しない場合(508の失敗)、出力は、結果として単予測MV1であり得る(512)。
[0135]マッピング動作は、複雑性問題を有する。MVからMV’へのマッピングは、リストがMVの参照ピクチャを含んでいるのかどうかを発見するために他の参照リストにわたってループする必要がある。これは、ビデオエンコーダ200およびビデオデコーダ300にとって計算コストが高い動作である。MV2のマッピングが失敗する場合、同じ動作がMV1に対して実行される必要があるので、最悪計算量はさらに増加する。
[0136]図6Aおよび図6Bに示されているように、三角形のPUモードでコーディングされたCUの場合、分割方向の対角エッジ上のサブブロックは、MV1とMV2の両方の動き補償値を利用し、したがって、MV1とMV2の両方からの情報を含んでいる双予測動きベクトルは、それらのサブブロックのための動き情報として記憶されるべきである。たとえば、図6Aは、サブブロック606Aと606Bとを含むブロック602を示す。サブブロック606AはMV1を利用し、サブブロック606BはMV2を利用する。図6Bは、サブブロック608Aと608Bとを含むブロック604を示す。サブブロック608AはMV1を利用し、サブブロック608BはMV2を利用する。
[0137]本開示は、三角形のPUモードの動き情報の記憶のために双予測MVを生成する簡略化された方法について説明する。2つの単予測MV(たとえば、双予測MVは2つの単予測MVに分割される)は、(可能な場合)参照ピクチャリスト0と参照ピクチャリスト1との構成に基づいて、たとえば、NoBackwardPredFlagの値に基づいて組み合わされる。一例では、NoBackwardPredFlagが真(true)である(すなわち、すべての参照ピクチャが現在のピクチャと比較して過去からのものである)とき、双予測MVを形成するために三角形のPUからの2つの単予測MVが組み合わされ、三角形モードでコーディングされたブロック中に記憶される。そうでない場合、単予測MVが使用される。一例では、単L0が使用され、他の例では、単L1が使用される。さらに別の例では、第1の三角形のPUのMVが使用され、第2の三角形のPUのMVが使用される。いくつかの例示的な技法では、三角形のPUのMV値がチェックされ、チェックすることに基づいて、MVの選択が行われる。いくつかの例では、
その動き情報の参照ピクチャインデックスまたは参照ピクチャPOCがチェックされ、決定プロセスに基づいて1つが選択される。たとえば、現在のピクチャに対して最も近接した参照ピクチャに対応するMVが選定される。一例では、例示的な技法は、参照リストを通したいかなる探索動作もなしに実行され得る。
[0138]実装例の詳細の説明は、以下の通りである。2つのPUの動き情報が異なる参照リスト上にある場合、動き情報は、以下のプロシージャを介して組み合わされ得る。
[0139]PUの動き情報が異なる参照リスト上にある場合、動き情報は、以下のプロシージャを介して組み合わされ得る。
[0140]一実装例では、Combine_From_Different_Listは、上記の例と同じである。Combine_From_Same_Listのプロシージャは、次のように設計され、NoBackwardPredFlagが偽(false)であるときに探索動作が実行されるが、1つの探索動作しか必要とされない。
[0141]図7は、本開示の技法を実行し得る例示的なビデオエンコーダ200を示すブロック図である。図7は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものと見なされるべきではない。説明のために、本開示は、HEVCビデオコーディング規格および開発中のH.266ビデオコーディング規格(たとえば、VVC)などのビデオコーディング規格のコンテキストでビデオエンコーダ200について説明する。しかしながら、本開示の技法は、これらのビデオコーディング規格に限定されず、概して、ビデオ符号化および復号に適用可能である。
[0142]図7の例では、ビデオエンコーダ200は、ビデオデータメモリ230と、モード選択ユニット202と、残差生成ユニット204と、変換処理ユニット206と、量子化ユニット208と、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、フィルタユニット216と、復号ピクチャバッファ(DPB)218と、エントロピー符号化ユニット220とを含む。
[0143]ビデオデータメモリ230は、ビデオエンコーダ200のコンポーネントによって符号化されるべきビデオデータを記憶し得る。ビデオエンコーダ200は、たとえば、ビデオソース104(図1)からビデオデータメモリ230中に記憶されたビデオデータを受信し得る。DPB218は、ビデオエンコーダ200によって後続のビデオデータの予測において使用するための参照ビデオデータを記憶する参照ピクチャメモリとして働き得る。ビデオデータメモリ230およびDPB218は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの様々なメモリデバイスのうちのいずれかによって形成され得る。ビデオデータメモリ230およびDPB218は、同じメモリデバイスまたは別個のメモリデバイスによって与えられ得る。様々な例では、ビデオデータメモリ230は、図示のように、ビデオエンコーダ200の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0144]本開示では、ビデオデータメモリ230への言及は、そのように明確に記載がない限り、ビデオエンコーダ200の内部のメモリに、またはそのように明確に記載がない限り、ビデオエンコーダ200の外部のメモリに限定されるものとして解釈されてはならない。むしろ、ビデオデータメモリ230への言及は、符号化のためにビデオエンコーダ200が受信するビデオデータ(たとえば、符号化されるべき現在のブロックのためのビデオデータ)を記憶する参照メモリとして理解されるべきである。図1のメモリ106はまた、ビデオエンコーダ200の様々なユニットからの出力の一時的なストレージを与え得る。
[0145]図7の様々なユニットは、ビデオエンコーダ200によって実行される動作を理解するのを支援するために図示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。固定機能回路は、特定の機能を与える回路を指し、実行され得る動作に関してあらかじめ設定される。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作中にフレキシブルな機能を与える。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方式でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は、(たとえば、パラメータを受信するかまたはパラメータを出力するために)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは概してイミュータブルである。いくつかの例では、ユニットのうちの1つまたは複数は、別個の回路ブロック(固定機能またはプログラマブル)であり得、いくつかの例では、1つまたは複数のユニットは集積回路であり得る。
[0146]ビデオエンコーダ200は、プログラマブル回路から形成される論理演算装置(ALU)、初等関数ユニット(EFU)、デジタル回路、アナログ回路、および/またはプログラマブルコアを含み得る。プログラマブル回路によって実行されるソフトウェアを使用してビデオエンコーダ200の動作が実行される例では、メモリ106(図1)は、ビデオエンコーダ200が受信し、実行するソフトウェアの命令(たとえば、オブジェクトコード)を記憶し得るか、またはビデオエンコーダ200(図示せず)内の別のメモリがそのような命令を記憶し得る。
[0147]ビデオデータメモリ230は、受信されたビデオデータを記憶するように構成される。ビデオエンコーダ200は、ビデオデータメモリ230からビデオデータのピクチャを取り出し、残差生成ユニット204とモード選択ユニット202とにビデオデータを与え得る。ビデオデータメモリ230中のビデオデータは、符号化されるべき未加工のビデオデータであり得る。
[0148]モード選択ユニット202は、動き推定ユニット222と、動き補償ユニット224と、イントラ予測ユニット226とを含む。モード選択ユニット202は、他の予測モードに従ってビデオ予測を実行するために追加の機能ユニットを含み得る。例として、モード選択ユニット202は、パレットユニット、(動き推定ユニット222および/または動き補償ユニット224の一部であり得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含み得る。
[0149]モード選択ユニット202は、概して、符号化パラメータの組合せをテストするために複数の符号化パスを調整し、そのような組合せのためのレートひずみ値を生じる。符号化パラメータは、CUへのCTUの区分、CUのための予測モード、CUの残差データのための変換タイプ、CUの残差データのための量子化パラメータなどを含み得る。モード選択ユニット202は、他のテストされた組合せよりも良好であるレートひずみ値を有する符号化パラメータの組合せを最終的に選択し得る。
[0150]ビデオエンコーダ200は、一連のCTUにビデオデータメモリ230から取り出されたピクチャを区分し、スライス内の1つまたは複数のCTUをカプセル化し得る。モード選択ユニット202は、上記で説明されたHEVCのQTBT構造または4分木構造などのツリー構造に従ってピクチャのCTUを区分し得る。上記で説明されたように、ビデオエンコーダ200は、ツリー構造に従ってCTUを区分することから1つまたは複数のCUを形成し得る。そのようなCTUはまた、一般に「ビデオブロック」または「ブロック」と呼ばれることもある。
[0151]概して、モード選択ユニット202はまた、現在のブロック(たとえば、現在のCUまたはHEVCでは、PUおよびTUの重複部分)のための予測ブロックを生成するためにそれの構成要素(たとえば、動き推定ユニット222、動き補償ユニット224、およびイントラ予測ユニット226)を制御する。現在のブロックのインター予測のために、動き推定ユニット222は、1つまたは複数の参照ピクチャ(たとえば、DPB218中に記憶された1つまたは複数の前にコーディングされたピクチャ)中の1つまたは複数の厳密に一致する参照ブロックを識別するために動き探索を実行し得る。特に、動き推定ユニット222は、たとえば、絶対値差分和(SAD)、2乗差分和(SSD)、平均絶対差(MAD)、平均2乗差(MSD)などに従って潜在的な参照ブロックが現在のブロックにどれくらい同様であるのかを表す値を計算し得る。動き推定ユニット222は、概して、現在のブロックと考慮されている参照ブロックとの間のサンプルごとの差を使用してこれらの計算を実行し得る。動き推定ユニット222は、現在のブロックに最も厳密に一致する参照ブロックを示す、これらの計算から生じる最も低い値を有する参照ブロックを識別し得る。
[0152]動き推定ユニット222は、現在のピクチャ中の現在のブロックの位置に対する参照ピクチャ中の参照ブロックの位置を定義する1つまたは複数の動きベクトル(MV)を形成し得る。動き推定ユニット222は、次いで、動き補償ユニット224に動きベクトルを与え得る。たとえば、単方向インター予測の場合、動き推定ユニット222は、単一の動きベクトルを与え得るが、双方向インター予測の場合、動き推定ユニット222は、2つの動きベクトルを与え得る。動き補償ユニット224は、次いで、動きベクトルを使用して予測ブロックを生成し得る。たとえば、動き補償ユニット224は、動きベクトルを使用して参照ブロックのデータを取り出し得る。別の例として、動きベクトルが部分サンプル精度を有する場合、動き補償ユニット224は、1つまたは複数の補間フィルタに従って予測ブロックのための値を補間し得る。さらに、双方向インター予測の場合、動き補償ユニット224は、それぞれの動きベクトルによって識別される2つの参照ブロックのためのデータを取り出し、たとえば、サンプルごとの平均化または重み付け平均化を通して取り出されたデータを組み合わせ得る。
[0153]モード選択ユニット202と、動き推定ユニット222と、動き補償ユニット224とは、本開示で説明される1つまたは複数の例示的な技法を実行するように構成され得る。たとえば、モード選択ユニット202は、第1の現在のブロックが三角形モードで区分されると決定し得る。動き推定ユニット222は、第1の現在のブロックの1つまたは複数の隣接ブロックの動きベクトル情報を含む第1の動きベクトル予測子リストを構築するように構成され得る。たとえば、動き推定ユニット222は、隣接ブロックの動きベクトル情報のためにDPB218にアクセスし得る。一例として、動き推定ユニット222は、双予測動きベクトルと単予測動きベクトルの両方を含む最初の動きベクトル予測子リストを構築し、最初の動きベクトル予測子リストに基づいて第1の動きベクトル予測子リストを構築し得る。
[0154]動き推定ユニット222と動き補償ユニット224とは共に、第1の三角形の予測ブロックを決定し得る。一例では、動き推定ユニット222は、どの三角形の予測ブロックが現在のブロックの第1の三角形の区分に最も近いのかを決定し得る。動き推定ユニット222と動き補償ユニット224とは、決定された第1の三角形の予測ブロックに基づいて動きベクトル予測子リスト中の第1のインデックス値を決定し得る。たとえば、動き推定ユニット222は、第1の三角形の予測ブロックにポイントする第1の動きベクトルを予測するための動きベクトル予測子として動きベクトル予測子リストからの何の動きベクトル情報が使用されるべきであるのかを決定し得る。動き推定ユニット222は、第1のインデックス値(たとえば、第1の値が第1のインデックス値に等しいこと)に基づいて第1の値を決定し、エントロピー符号化ユニット220に第1の値を符号化させ、シグナリングさせ得る。
[0155]同様に、動き推定ユニット222と動き補償ユニット224とは共に、第2の三角形の予測ブロックを決定し、決定された第2の三角形の予測ブロックに基づいて動きベクトル予測子リスト中の第2のインデックス値を決定し得る。この例では、動き推定ユニット222と動き補償ユニット224とは、第1のインデックス値と第2のインデックス値とを比較し得る。第2のインデックス値が第1のインデックス値よりも大きいことに基づいて、動き推定ユニット222と動き補償ユニット224とは、第2の値を生成するために第2のインデックス値からオフセット(たとえば、1)を減算し得る。動き推定ユニット222と動き補償ユニット224とは、エントロピー符号化ユニット220に第2の値を符号化させ、シグナリングさせ得る。
[0156]動き推定ユニット222と動き補償ユニット224とは、第2の現在のブロックの1つまたは複数の隣接ブロックの動きベクトル情報を含む第2の動きベクトル予測子リストを構築し得る。上記で説明された技法と同様の三角形の予測ブロックを決定するための技法を使用して、動き推定ユニット222と動き補償ユニット224とは、第3の三角形の予測ブロックを決定し、決定された第3の三角形の予測ブロックに基づいて第2の動きベクトル予測子リスト中の第3のインデックス値を決定し得る。動き推定ユニット222と動き補償ユニット224とは、エントロピー符号化ユニット220に第3のインデックス値に基づいて第3の値を符号化させ、シグナリングさせ得る。
[0157]動き推定ユニット222と動き補償ユニット224とは、第4の三角形の予測ブロックを決定し、決定された第4の三角形の予測ブロックに基づいて第2の動きベクトル予測子リスト中の第4のインデックス値を決定し得る。動き推定ユニット222と動き補償ユニット224とは、第3のインデックスと第4のインデックスを比較し、第4のインデックス値が第3のインデックス値よりも小さいことに基づいて、第4のインデックス値に等しい第4の値を決定し得る。動き推定ユニット222と動き補償ユニット224とは、エントロピー符号化ユニット220に第4の値を符号化させ、シグナリングさせ得る。
[0158]別の例として、イントラ予測またはイントラ予測コーディングの場合、イントラ予測ユニット226は、現在のブロックの近隣にあるサンプルから予測ブロックを生成し得る。たとえば、方向モードの場合、イントラ予測ユニット226は、概して、予測ブロックを生成するために隣接サンプルの値を数学的に組み合わせ、現在のブロックにわたって定義された方向にこれらの計算された値をポピュレートし得る。別の例として、DCモードの場合、イントラ予測ユニット226は、現在のブロックに隣接するサンプルの平均を計算し、予測ブロックの各サンプルについてこの生じた平均を含む予測ブロックを生成し得る。
[0159]モード選択ユニット202は、残差生成ユニット204に予測ブロックを与える。残差生成ユニット204は、ビデオデータメモリ230から現在のブロックの未加工の、コーディングされていないバージョンを受信し、モード選択ユニット202から予測ブロックを受信する。残差生成ユニット204は、現在のブロックと予測ブロックとの間のサンプルごとの差を計算する。得られたサンプルごとの差は、現在のブロックのための残差ブロックを定義する。いくつかの例では、残差生成ユニット204はまた、残差差分パルスコード変調(RDPCM:residual differential pulse code modulation)を使用して残差ブロックを生成するために残差ブロック中のサンプル値の間の差を決定し得る。いくつかの例では、残差生成ユニット204は、バイナリ減算を実行する1つまたは複数の減算器回路を使用して形成され得る。
[0160]モード選択ユニット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サイズに対する非対称区分をもサポートし得る。
[0161]モード選択ユニット202がCUをPUにさらに区分しない例では、各CUは、ルーマコーディングブロックと対応するクロマコーディングブロックとに関連付けられ得る。上記のように、CUのサイズは、CUのルーマコーディングブロックのサイズを指し得る。ビデオエンコーダ200とビデオデコーダ300とは、2N×2N、2N×N、またはN×2NのCUサイズをサポートし得る。
[0162]いくつかの例として、イントラブロックコピーモードコーディング、アフィンモードコーディング、および線形モデル(LM)モードコーディングなどの他のビデオコーディング技法の場合、モード選択ユニット202は、コーディング技法に関連するそれぞれのユニットを介して、符号化されている現在のブロックのための予測ブロックを生成する。パレットモードコーディングなどのいくつかの例では、モード選択ユニット202は、予測ブロックを生成しないことがあり、代わりに、サンプル値の選択されたパレットに基づいてブロックを再構築する方式を示すシンタックス要素を生成する。そのようなモードでは、モード選択ユニット202は、符号化されるためにエントロピー符号化ユニット220にこれらのシンタックス要素を与え得る。
[0163]上記で説明されたように、残差生成ユニット204は、現在のブロックと対応する予測ブロックとのためのビデオデータを受信する。残差生成ユニット204は次いで、現在のブロックのための残差ブロックを生成する。残差ブロックを生成するために、残差生成ユニット204は、予測ブロックと現在のブロックとの間のサンプルごとの差を計算する。
[0164]変換処理ユニット206は、(本明細書では「変換係数ブロック」と呼ぶ)変換係数のブロックを生成するために残差ブロックに1つまたは複数の変換を適用する。変換処理ユニット206は、変換係数ブロックを形成するために残差ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット206は、離散コサイン変換(DCT)、方向変換、カルーネンレーベ変換(KLT)、または概念的に同様の変換を残差ブロックに適用し得る。いくつかの例では、変換処理ユニット206は、残差ブロックに複数の変換、たとえば、回転変換など1次変換および2次変換を実行し得る。いくつかの例では、変換処理ユニット206は、残差ブロックに変換を適用しない。
[0165]量子化ユニット208は、量子化変換係数ブロックを生成するために変換係数ブロック中の変換係数を量子化し得る。量子化ユニット208は、現在のブロックに関連する量子化パラメータ(QP)値に従って変換係数ブロックの変換係数を量子化し得る。ビデオエンコーダ200は、(たとえば、モード選択ユニット202を介して)CUに関連するQP値を調整することによって現在のブロックに関連する変換係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらし得、したがって、量子化変換係数は、変換処理ユニット206によって生成された元の変換係数よりも低い精度を有し得る。
[0166]逆量子化ユニット210および逆変換処理ユニット212は、変換係数ブロックから残差ブロックを再構築するために、それぞれ、量子化変換係数ブロックに逆量子化および逆変換を適用し得る。再構築ユニット214は、再構築された残差ブロックとモード選択ユニット202によって生成された予測ブロックとに基づいて(潜在的にある程度のひずみを伴うが)現在のブロックに対応する再構築されたブロックを生成し得る。たとえば、再構築ユニット214は、再構築されたブロックを生成するためにモード選択ユニット202によって生成された予測ブロックからの対応するサンプルに再構築された残差ブロックのサンプルを加算し得る。
[0167]フィルタユニット216は、再構築されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。たとえば、フィルタユニット216は、CUの端部に沿ってブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。フィルタユニット216の動作は、いくつかの例では、スキップされ得る。
[0168]ビデオエンコーダ200は、DPB218中に再構築されたブロックを記憶する。たとえば、フィルタユニット216の動作が必要とされない例では、再構築ユニット214は、DPB218に再構築されたブロックを記憶し得る。フィルタユニット216の動作が必要とされる例では、フィルタユニット216は、DPB218にフィルタ処理された再構築されたブロックを記憶し得る。動き推定ユニット222と動き補償ユニット224とは、その後符号化されるピクチャのブロックをインター予測するために、再構築された(潜在的にフィルタ処理された)ブロックから形成される参照ピクチャをDPB218から取り出し得る。さらに、イントラ予測ユニット226は、現在のピクチャ中の他のブロックをイントラ予測するために現在のピクチャのDPB218中の再構築されたブロックを使用し得る。
[0169]概して、エントロピー符号化ユニット220は、ビデオエンコーダ200の他の機能構成要素から受信されたシンタックス要素をエントロピー符号化し得る。たとえば、エントロピー符号化ユニット220は、量子化ユニット208からの量子化された変換係数ブロックをエントロピー符号化し得る。別の例として、エントロピー符号化ユニット220は、モード選択ユニット202からの予測シンタックス要素(たとえば、インター予測のための動き情報またはイントラ予測のためのイントラモード情報)をエントロピー符号化し得る。エントロピー符号化ユニット220は、エントロピー符号化されたデータを生成するためにビデオデータの別の例であるシンタックス要素に対して1つまたは複数のエントロピー符号化動作を実行し得る。たとえば、エントロピー符号化ユニット220は、コンテキスト適応型可変長コーディング(CAVLC)動作、CABAC動作、変数-変数(V2V:variable-to-variable)長コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作をデータに対して実行し得る。いくつかの例では、エントロピー符号化ユニット220は、シンタックス要素がエントロピー符号化されないバイパスモードで動作し得る。
[0170]ビデオエンコーダ200は、スライスまたはピクチャのブロックを再構築するために必要なエントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。特に、エントロピー符号化ユニット220は、ビットストリームを出力し得る。
[0171]上記で説明された動作について、ブロックに関して説明する。そのような説明は、ルーマコーディングブロックおよび/またはクロマコーディングブロックのための動作であるものとして理解されるべきである。上記で説明されたように、いくつかの例では、ルーマコーディングブロックおよびクロマコーディングブロックは、CUのルーマおよびクロマ成分である。いくつかの例では、ルーマコーディングブロックおよびクロマコーディングブロックは、PUのルーマおよびクロマ成分である。
[0172]いくつかの例では、ルーマコーディングブロックに関して実行される動作は、クロマコーディングブロックのために繰り返される必要はない。一例として、ルーマコーディングブロックのための動きベクトル(MV)と参照ピクチャとを識別する動作は、クロマブロックのためのMVと参照ピクチャとを識別するために繰り返される必要はない。むしろ、ルーマコーディングブロックのためのMVは、クロマブロックのためのMVを決定するためにスケーリングされ得、参照ピクチャは同じであり得る。別の例として、イントラ予測プロセスは、ルーマコーディングブロックとクロマコーディングブロックとに対して同じであり得る。
[0173]図8は、本開示の技法を実行し得る例示的なビデオデコーダ300を示すブロック図である。図8は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものではない。説明のために、本開示は、HEVCビデオコーディング規格および開発中のH.266ビデオコーディング規格(たとえば、VVC)などのビデオコーディング規格のコンテキストでビデオデコーダ300について説明する。しかしながら、本開示の技法は、他のビデオコーディング規格に従って動作するように構成されたビデオコーディングデバイスによって実行され得る。
[0174]図8の例では、ビデオデコーダ300は、コード化ピクチャバッファ(CPB)320と、エントロピー復号ユニット302と、予測処理ユニット304と、逆量子化ユニット306と、逆変換処理ユニット308と、再構築ユニット310と、フィルタユニット312と、復号ピクチャバッファ(DPB)314とを含む。予測処理ユニット304は、動き補償ユニット316と、イントラ予測ユニット318とを含む。予測処理ユニット304は、他の予測モードに従って予測を実行するために追加のユニットを含み得る。例として、予測処理ユニット304は、パレットユニット、(動き補償ユニット316の一部を形成し得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含み得る。他の例では、ビデオデコーダ300は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[0175]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の他のコンポーネントとともにオンチップであるか、またはそれらのコンポーネントに対してオフチップであり得る。
[0176]追加または代替として、いくつかの例では、ビデオデコーダ300は、メモリ120(図1)からコード化されたビデオデータを取り出し得る。すなわち、メモリ120は、CPBメモリ320とともに上記で説明されたようにデータを記憶し得る。同様に、ビデオデコーダ300の機能の一部または全部がビデオデコーダ300の処理回路によって実行されるためにソフトウェアで実装されるとき、メモリ120は、ビデオデコーダ300によって実行される命令を記憶し得る。
[0177]図8に示されている様々なユニットは、ビデオデコーダ300によって実行される動作を理解するのを支援するために図示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。図7と同様に、固定機能回路は、特定の機能を与える回路を指し、実行され得る動作に関してあらかじめ設定される。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作中にフレキシブルな機能を与える。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方式でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は、(たとえば、パラメータを受信するかまたはパラメータを出力するために)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは概してイミュータブルである。いくつかの例では、ユニットのうちの1つまたは複数は、別個の回路ブロック(固定機能またはプログラマブル)であり得、いくつかの例では、1つまたは複数のユニットは集積回路であり得る。
[0178]ビデオデコーダ300は、プログラマブル回路から形成されるALU、EFU、デジタル回路、アナログ回路、および/またはプログラマブルコアを含み得る。ビデオデコーダ300の動作がプログラマブル回路上で実行されるソフトウェアによって実行される例では、オンチップまたはオフチップメモリは、ビデオデコーダ300が受信し、実行するソフトウェアの命令(たとえば、オブジェクトコード)を記憶し得る。
[0179]エントロピー復号ユニット302は、CPBから符号化されたビデオデータを受信し、シンタックス要素を再生するためにビデオデータをエントロピー復号し得る。予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構築ユニット310、およびフィルタユニット312は、ビットストリームから抽出されたシンタックス要素に基づいて復号ビデオデータを生成し得る。
[0180]概して、ビデオデコーダ300は、ブロックごとにピクチャを再構築する。ビデオデコーダ300は、各ブロックに対して再構築を個々に実行し得る(ここで、現在再構築されている、すなわち、復号されているブロックは、「現在のブロック」と呼ばれることがある)。
[0181]エントロピー復号ユニット302は、量子化変換係数ブロックの量子化変換係数を定義するシンタックス要素ならびに量子化パラメータ(QP)および/または変換モード指示などの変換情報をエントロピー復号し得る。逆量子化ユニット306は、量子化の程度を決定するために、また同様に、逆量子化ユニット306が適用すべき逆量子化の程度を決定するために量子化変換係数ブロックに関連するQPを使用し得る。逆量子化ユニット306は、たとえば、量子化変換係数を逆量子化するためにビット単位左シフト動作を実行し得る。逆量子化ユニット306は、それによって、変換係数を含む変換係数ブロックを形成し得る。
[0182]逆量子化ユニット306が変換係数ブロックを形成した後に、逆変換処理ユニット308は、現在のブロックに関連する残差ブロックを生成するために変換係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット308は、変換係数ブロックに、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を適用し得る。
[0183]さらに、予測処理ユニット304は、エントロピー復号ユニット302によってエントロピー復号された予測情報シンタックス要素に従って予測ブロックを生成する。たとえば、現在のブロックがインター予測されることを予測情報シンタックス要素が示す場合、動き補償ユニット316は予測ブロックを生成し得る。この場合、予測情報シンタックス要素は、参照ブロックを取り出すDPB314中の参照ピクチャ、ならびに現在のピクチャ中の現在のブロックのロケーションに対する参照ピクチャ中の参照ブロックのロケーションを識別する動きベクトルを示し得る。動き補償ユニット316は、概して、動き補償ユニット224(図7)に関して説明された方式と実質的に同様である方式でインター予測プロセスを実行し得る。
[0184]動き補償ユニット316は、エントロピー復号ユニット302とともに、本開示において説明された例示的な技法を実行するように構成され得る。たとえば、動き補償ユニット316は、第1の現在のブロックが三角形モードで区分されると決定し得る。一例として、エントロピー復号ユニット302は、区分方向を示す動きベクトル情報を決定するために使用される情報とは別個のシンタックス要素を受信し得、動き補償ユニット316は、受信されたシンタックス要素に基づいて第1の現在のブロックのための区分方向を決定し得る。
[0185]動き補償ユニット316は、現在のブロックの1つまたは複数の隣接ブロックの動きベクトル情報を含む第1の動きベクトル予測子リストを構築し得る。たとえば、動き補償ユニット316は、双予測動きベクトルと単予測動きベクトルの両方を含む最初の動きベクトル予測子リストを構築し、最初の動きベクトル予測子リストに基づいて第1の動きベクトル予測子リストを構築し得る。第1の動きベクトル予測子リストは、マージモード、高度動きベクトル予測(AMVP)モード、またはアフィンモードのうちの1つでコーディングされる現在のブロックのためのものであり得る
[0186]エントロピー復号ユニット302は、第1の動きベクトル予測子リスト中の第1のインデックス値を決定するための第1の値を復号し得、動き補償ユニット316は、第1のインデックス値に基づいて第1の三角形の予測ブロックを決定し得る。たとえば、動き補償ユニット316は、第1のインデックス値に基づいて第1の動きベクトル予測子リスト中の第1の動きベクトル情報を決定し、第1の動きベクトル情報に基づいて第1の動きベクトルを決定し、第1の動きベクトルに基づいて第1の三角形の予測ブロックを決定し得る。
[0187]エントロピー復号ユニット302は、第1の動きベクトル予測子リスト中の第2のインデックス値を決定するための第2の値を復号し得る。この例では、動き補償ユニット316は、第1の値と第2の値を比較し得る。第2の値が第1の値以上であることに基づいて、動き補償ユニット316は、第2のインデックス値を決定するために第2の値にオフセット(たとえば、1)を加算し得る。
[0188]動き補償ユニット316は、第2のインデックス値に基づいて第2の三角形の予測ブロックを決定し得る。たとえば、動き補償ユニット316は、第2のインデックス値に基づいて第1の動きベクトル予測子リスト中の第2の動きベクトル情報を決定し、第2の動きベクトル情報に基づいて第2の動きベクトルを決定し、第2の動きベクトルに基づいて第2の三角形の予測ブロックを決定し得る。
[0189]上記の例では、エントロピー復号ユニット302は、第1の値のための第1の範囲(たとえば、0~4)に基づいて第1の値を復号し、第2の値のための第2の範囲(たとえば、0~3)に基づいて第2の値を復号し得る。第2の範囲は第1の範囲よりも小さいことがある。
[0190]より詳細に説明されたように、再構築ユニット310は、第1の三角形の予測ブロックと第2の三角形の予測ブロックとに基づいて現在のブロックを再構築し得る。たとえば、再構築ユニット310は、現在のブロックの第1の三角形の区分を再構築するために第1の残差情報に第1の三角形の予測ブロックを加算し、現在のブロックの第2の三角形の区分を再構築するために第2の残差情報に第2の三角形の予測ブロックを加算し得る。
[0191]いくつかの例では、動き補償ユニット316は、第2の現在のブロックの1つまたは複数の隣接ブロックの動きベクトル情報を含む第2の動きベクトル予測子リストを構築し得る。エントロピー復号ユニット302は、第2の動きベクトル予測子リスト中の第3のインデックス値を決定するための第3の値を復号し得る。動き補償ユニット316は、第3のインデックス値に基づいて第3の三角形の予測ブロックを決定し得る。
[0192]エントロピー復号ユニット302は、第2の動きベクトル予測子リスト中の第4のインデックス値を決定するための第4の値を復号し得る。この例では、動き補償ユニット316は、第3の値と第4の値を比較し得る。第4の値が第3の値よりも小さいことに基づいて、動き補償ユニット316は、第4の値に等しく第4のインデックス値を設定し得る。動き補償ユニット316は、第4のインデックス値に基づいて第4の三角形の予測ブロックを決定し得、再構築ユニット310は、第3の三角形の予測ブロックと第4の三角形の予測ブロックとに基づいて第2の現在のブロックを再構築し得る。
[0193]別の例として、現在のブロックがイントラ予測されることを予測情報シンタックス要素が示す場合、イントラ予測ユニット318は、予測情報シンタックス要素によって示されるイントラ予測モードに従って予測ブロックを生成し得る。この場合も、イントラ予測ユニット318は、概して、イントラ予測ユニット226(図7)に関して説明された方式と実質的に同様である方式でイントラ予測プロセスを実行し得る。イントラ予測ユニット318は、DPB314から現在のブロックに対する隣接サンプルのデータを取り出し得る。
[0194]再構築ユニット310は、予測ブロックと残差ブロックとを使用して現在のブロックを再構築し得る。たとえば、再構築ユニット310は、現在のブロックを再構築するために予測ブロックの対応するサンプルに残差ブロックのサンプルを加算し得る。
[0195]フィルタユニット312は、再構築されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。たとえば、フィルタユニット312は、再構築されたブロックの端部に沿ってブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。フィルタユニット312の動作は、必ずしもすべての例で実行されるとは限らない。
[0196]ビデオデコーダ300は、DPB314中に再構築されたブロックを記憶し得る。たとえば、フィルタユニット312の動作が実行されない例では、再構築ユニット310は、DPB314に再構築されたブロックを記憶し得る。フィルタユニット312の動作が実行されない例では、フィルタユニット312は、DPB314にフィルタ処理された再構築されたブロックを記憶し得る。上記で説明されたように、DPB314は、予測処理ユニット304にイントラ予測のための現在のピクチャのサンプルおよび後続の動き補償のための前に復号されたピクチャなどの基準情報を与え得る。さらに、ビデオデコーダ300は、図1のディスプレイデバイス118などのディスプレイデバイス上での後続の提示のためにDPBから復号されたピクチャを出力し得る。
[0197]図9は、ビデオデータを符号化する例示的な方法を示すフローチャートである。図9の例示的な技法について、処理回路に関して説明する。処理回路の1つの例は、ビデオエンコーダ200である。
[0198]たとえば、処理回路は、現在のブロックが三角形モードで区分されると決定し得る(900)。さらに、処理回路は、1つまたは複数の隣接ブロックの動きベクトル情報に基づいて動きベクトル予測子リストを構築し得る(902)。
[0199]処理回路は、第1の三角形の予測ブロックを決定し得る(904)。たとえば、処理回路は、現在のブロックの第1の区分に最も近い三角形の予測ブロックを第1の三角形の予測ブロックとして決定し得る。第1の三角形の予測ブロックは、一例として、動きベクトル予測子リスト中の動きベクトル予測子によってポイントされるブロックであり得る。たとえば、処理回路は、第1の三角形の予測ブロックに基づいて動きベクトル予測子リスト中の第1のインデックス値を決定し得る(906)。処理回路は、第1のインデックス値に基づいて第1の値をシグナリングし得る(908)。たとえば、処理回路は、第1のインデックス値に等しく第1の値を設定し、第1の値をシグナリングし得る。
[0200]処理回路は、第2の三角形の予測ブロックを決定し得る(910)。たとえば、処理回路は、現在のブロックの第2の区分に最も近い三角形の予測ブロックを第2の三角形の予測ブロックとして決定し得る。第2の三角形の予測ブロックは、一例として、動きベクトル予測子リスト中の動きベクトル予測子によってポイントされるブロックであり得る。たとえば、処理回路は、第2の三角形の予測ブロックに基づいて動きベクトル予測子リスト中の第2のインデックス値を決定し得る(912)。
[0201]1つまたは複数の例では、処理回路は、第2のインデックス値が第1のインデックス値よりも大きいのかどうかを決定し得る(914)。第2のインデックス値が第1のインデックス値よりも大きいことに基づいて(914のYES)、処理回路は、第2の値を生成するために第2のインデックス値からオフセットを減算し得る(916)。第2のインデックス値が第1のインデックス値よりも大きくないことに基づいて(914のNO)、処理回路は、第2のインデックス値に等しく第2の値を設定し得る(918)。処理回路は、第2の値をシグナリングし得る(920)。
[0202]図10は、ビデオデータを復号する例示的な方法を示すフローチャートである。図10の例示的な技法について、処理回路に関して説明する。処理回路の1つの例は、ビデオデコーダ300である。
[0203]たとえば、処理回路は、現在のブロックが三角形モードで区分されると決定し得る(1000)。さらに、処理回路は、1つまたは複数の隣接ブロックの動きベクトル情報に基づいて動きベクトル予測子リストを構築し得る(1002)。
[0204]処理回路は、動きベクトル予測子リスト中の第1のインデックス値を決定するための第1の値を復号し得(1004)、第1のインデックス値に基づいて第1の三角形の予測ブロックを決定し得る(1006)。たとえば、処理回路は、第1のインデックス値に基づいて動きベクトル予測子リスト中の第1の動きベクトル情報を決定し、第1の動きベクトル情報に基づいて第1の動きベクトルを決定し、第1の動きベクトルに基づいて第1の三角形の予測ブロックを決定し得る。
[0205]処理回路は、動きベクトル予測子リスト中の第2のインデックス値を決定するための第2の値を復号し得る(1008)。処理回路は、第1の値と第2の値を比較し得る(1010)。第2の値が第1の値以上であることに基づいて(1010のYES)、処理回路は、第2のインデックス値を決定するために第2の値にオフセット(たとえば、1)を加算し得る(1012)。第2の値が第1の値以上でないことに基づいて(1010のNO)、処理回路は、第2の値に等しく第2のインデックス値を設定し得る(1014)。
[0206]処理回路は、第2のインデックス値に基づいて第2の三角形の予測ブロックを決定し得る(1016)。たとえば、処理回路は、第2のインデックス値に基づいて動きベクトル予測子リスト中の第2の動きベクトル情報を決定し、第2の動きベクトル情報に基づいて第2の動きベクトルを決定し、第2の動きベクトルに基づいて第2の三角形の予測ブロックを決定し得る。
[0207]処理回路は、第1の三角形の予測ブロックと第2の三角形の予測ブロックとに基づいて現在のブロックを再構築し得る(1018)。たとえば、処理回路は、現在のブロックの第1の三角形の区分のための第1の残差情報を受信し得、現在のブロックの第1の三角形の区分を再構築するために第1の三角形の予測ブロックに第1の残差情報を加算し得る。処理回路は、第2の三角形の区分のための第2の残差情報を受信し得、現在のブロックの第2の三角形の区分を再構築するために第2の三角形の予測ブロックに第2の残差情報を加算し得る。
[0208]上記例に応じて、本明細書で説明された技法のいずれかのいくつかの行為またはイベントが、異なるシーケンスで実施され得、追加、マージ、または完全に除外され得る(たとえば、すべての説明された行為またはイベントが本技法の実施のために必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、連続的にではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して同時に実施され得る。
[0209]1つまたは複数の例において、前述の機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得るか、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的な有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
[0210]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD-ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体のうちの1つまたは複数を含むことができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体が、接続、搬送波、信号、または他の一時的媒体を含むのではなく、非一時的な有形の記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、およびBlu-rayディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
[0211]命令は、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、あるいは他の等価な集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明された技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用ハードウェアおよび/またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素で十分に実装され得る。
[0212]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わされ得るか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
[0213]様々な例について説明した。これらおよび他の例は添付の特許請求の範囲内に入る。