ビデオコーディング規格は、ITU-T H.261、ISO/IEC MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 Visual、およびそのスケーラブルビデオコーディング(SVC)拡張とマルチビュービデオコーディング(MVC)拡張とを含むITU-T H.264(ISO/IEC MPEG-4 AVCとしても知られている)を含む。
高効率ビデオコーディング(HEVC)は、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)によって2013年4月に確定された。
MPEGおよびITU-T研究グループ16のVCEGによって形成された共同チームであるJoint Video Experts Team(JVET)は、最近では、多用途ビデオコーディング(VVC)として知られることになる新しいビデオコーディング規格に取り組んでいる。VVCの主目的は、既存のHEVC規格に勝る圧縮性能の著しい改善をもたらし、より高品質のビデオサービスならびに360°全方向没入型マルチメディアおよび高ダイナミックレンジ(HDR)ビデオなどの新興のアプリケーションの展開を支援することである。
本開示は、ビデオデータの予測のための合成されたインターイントラ予測モードを改善し得る技法について説明する。多仮説イントラモード(MHI)は、1つのイントラ予測および1つのマージインデックス付き予測を合成することによってマージモードを改善することが示されており、第12回JVETマカオ会議: JVET-L0100におけるM.-S. Chiang、C.-W. Hsu、Y.-W. Huang、S.-M. Leiによる「CE10.1.1: Multi-hypothesis prediction for improving AMVP mode, skip or merge mode, and intra mode」、2018年10月において採用された。MHIによれば、平面予測、DC予測、水平予測、および垂直予測を含む4つのイントラモードのセットにおける候補は、マージインデックス付き予測と合成するための最適な候補を選択するために評価される。上記の例に記載された合成プロセスでは、平面モードもしくはDCモードが選択されるか、またはブロックのサイズが4よりも小さい場合、等しい重みが展開される。それ以外の場合、イントラ予測されたサンプルおよびインター予測されたサンプルのための重み(wIntra, wInter)は、コーディングブロック内のサンプルの領域に基づいて異なる。
本開示は、JVET-L0100に記載されたインターイントラ予測技法では、隣接ブロックのコーディング情報がこれらのツールのコーディング性能を改善するために利用されていないことを認識している。さらに、領域ベースの重みは水平予測モードおよび垂直予測モードに用いられ、このことは領域境界に沿ったアーティファクトを引き起こし得る。
本開示の技法は、インターイントラコーディングの性能を改善し得る。これらの改善は、これらの技法の位置に依存しない重み方式によって生じ得る。本開示の技法によれば、インター予測サンプルおよびイントラ予測サンプルのための重みは、コーディング情報、たとえば、イントラコーディングされた隣接ブロックの数、マージインデックス付きブロックのインター予測の数(単予測または双予測)、および/または現在のブロックのサイズを使用して適応的に決定され得る。
図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など)から符号化されたビデオビットストリームを受信する。符号化されたビデオビットストリームは、ビデオブロックまたは他のコーディングされたユニット(たとえば、スライス、ピクチャ、ピクチャグループ、シーケンスなど)の特性および/または処理を記述する値を有するシンタックス要素などの、ビデオエンコーダ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)とも呼ばれる共同探索テストモデル(JEM)またはITU-T H.266などの、他のプロプライエタリ規格または業界規格に従って動作し得る。しかしながら、本開示の技法は、いかなる特定のコーディング規格にも限定されない。
一般に、ビデオエンコーダ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は、JEMまたはVVCに従って動作するように構成され得る。JEMまたは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を予測し得る。
JEMおよびVVCのいくつかの例は、インター予測モードと見なされ得るアフィン動き補償モードも提供する。アフィン動き補償モードでは、ビデオエンコーダ200は、ズームインもしくはズームアウト、回転、遠近運動、または他の不規則な運動タイプなどの、非並進運動を表す2つ以上の動きベクトルを決定し得る。
イントラ予測を実行するために、ビデオエンコーダ200は、イントラ予測モードを選択して予測ブロックを生成し得る。JEMおよびVVCのいくつかの例は、様々な方向モードを含む67個のイントラ予測モード、ならびに平面モードおよびDCモードを提供する。一般に、ビデオエンコーダ200は、そこから現在のブロックのサンプルを予測するための現在のブロック(たとえば、CUのブロック)に対する隣接サンプルを記述するイントラ予測モードを選択する。そのようなサンプルは、一般に、ビデオエンコーダ200がラスタ走査順序で(左から右に、上から下に)CTUおよびCUをコーディングすると仮定すると、現在のブロックと同じピクチャ中の現在のブロックの上方、上方および左側、または左側にあり得る。
本開示の技法によれば、ビデオエンコーダ200は、ビデオデータのブロック(たとえば、CU)のインターイントラ予測を実行し得る。すなわち、ビデオエンコーダ200は、インター予測ブロックとイントラ予測ブロックの両方を使用して予測ブロックを形成し得る。ビデオエンコーダ200は、インター予測ブロックおよびイントラ予測ブロックのサンプルの重み付けされた組合せを実行することによって、現在のブロックのための最終的な予測ブロックを形成し得る。現在のブロックがクロミナンスブロックであるとき、ビデオエンコーダ200は、現在のクロミナンスブロックに対応するルミナンスブロックに対するイントラ予測コーディングされた隣接ブロックの数(および/またはインター予測コーディングされたブロックの数)に従って重みを決定し得る。すなわち、現在のクロミナンスブロックに対する隣接ブロックに従って重みを決定するのではなく、ビデオエンコーダ200は、現在のクロミナンスブロックに対応するルミナンスブロックに隣接するイントラ予測されたおよび/またはインター予測されたブロックの数を決定し、次いで、ルミナンスブロックに隣接するイントラ予測されたおよび/またはインター予測されたブロックの数に基づいて重みを決定し得る。
一例として、ビデオエンコーダ200は、対応するルミナンスブロックに対する上隣接ブロックおよび/または左隣接ブロックがインター予測されるかどうかを決定し得る。これらの隣接ブロックのどちらもインター予測されないとき、ビデオエンコーダ200は、3という重みがイントラ予測ブロックに適用され、1という重みがインター予測ブロックに適用されると決定し得る。これらの隣接ブロックの両方がインター予測されるとき、ビデオエンコーダ200は、3という重みがインター予測ブロックに適用され、1という重みがイントラ予測ブロックに適用されると決定し得る。これらの隣接ブロックの一方がインター予測され、他方がイントラ予測されるとき、ビデオエンコーダ200は、2という重みがインター予測ブロックとイントラ予測ブロックの両方に適用されると決定し得る。いくつかの例では、ビデオエンコーダ200は、インター予測コーディングされたブロックとして、インターイントラ予測および/またはイントラブロックコピーを使用して予測された隣接ブロックをカウントし得る。ビデオデコーダ300は、現在のクロミナンスブロックに対応するルミナンスブロックに対する隣接ブロックのための予測モードに基づいて現在のクロミナンスブロックのためのインター予測ブロックおよびイントラ予測ブロックに適用されるべき重みを決定するために、実質的に同じプロセスを実行し得る。
ビデオエンコーダ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および/またはビデオデコーダ300は、インターイントラコーディングを実行するように構成され得る。すなわち、ビデオエンコーダ200および/またはビデオデコーダ300は、本明細書で説明する技法のいずれかまたはすべてによる合成されたインターイントラ予測を使用して、ビデオデータのブロックを予測し得る。
たとえば、ビデオエンコーダ200およびビデオデコーダ300は、位置に依存しない重み方式に基づいて、インター予測のサンプルおよびイントラ予測のサンプルに適用すべき重みを適応的に決定し得る。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、イントラコーディングされたおよび/またはインターコーディングされた隣接ブロックの数、マージインデックス付きブロックのインター予測の数(単予測または双予測)、現在のブロックのサイズなどのコーディング情報に従って(たとえば、それに応じて)、重みを適応的に決定し得る。以下の説明では、(wInter, wIntra)をインター予測サンプルおよびイントラ予測サンプルのための重みとする。すなわち、wInterはインター予測ブロックのサンプルに適用される重み値を表し、wIntraはイントラ予測ブロックのサンプルに適用される重み値を表す。いくつかの例では、wInter+wIntra=1であり、ここで、wInterおよびwIntraは0と1との間の有理数値である。
本開示は、一般に、シンタックス要素などの特定の情報を「シグナリングすること」に言及する。「シグナリングすること」という用語は、一般に、シンタックス要素および/または符号化されたビデオデータを復号するために使用される他のデータのための値の通信を指すことがある。すなわち、ビデオエンコーダ200は、ビットストリーム中でシンタックス要素のための値をシグナリングし得る。一般に、シグナリングすることは、ビットストリーム中で値を生成することを指す。上述のように、ソースデバイス102は、実質的にリアルタイムで、または、宛先デバイス116によって後で取り出すためにシンタックス要素を記憶デバイス112に記憶するときに行われ得るなど、リアルタイムではなく、ビットストリームを宛先デバイス116にトランスポートし得る。
図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と呼ばれ、さらなる区分なしで予測および変換に従ってさらに処理される。
図3A~図3Fは、現在のブロックに対する隣接ブロックの例示的な場所を示す概念図である。具体的には、図3Aは上隣接ブロック142および左隣接ブロック144を有する現在のブロック140の一例を表し、図3Bは右上隣接ブロック148および左下隣接ブロック150を有する現在のブロック146の一例を表し、図3Cは上隣接ブロック154、左隣接ブロック156、および左上(上l)隣接ブロック158を有する現在のブロック152の一例を表し、図3Dは右上隣接ブロック162、左下(左b)隣接ブロック164、および左上隣接ブロック166を有する現在のブロック160の一例を表し、図3Eは上隣接ブロック170、右上隣接ブロック172、左隣接ブロック174、および左下隣接ブロック176を有する現在のブロック168の一例を表し、図3Fは上隣接ブロック180、右上隣接ブロック182、左隣接ブロック184、左下隣接ブロック186、および左上隣接ブロック188を有する現在のブロック178の一例を表す。
本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、たとえば、その内容全体が参照により本明細書に組み込まれる、2019年11月14日に出願された米国出願第16/684,379号で説明されるように、イントラコーディングされたおよび/またはインターコーディングされた隣接ブロックの数に基づいて、イントラサンプルおよびインターサンプルのための重みを適応的に決定し得る。しかしながら、本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、位置依存性イントラ予測組合せ(PDPC)なしでインター予測サンプルおよびイントラ予測サンプルのみをブレンドし得る。ビデオエンコーダ200およびビデオデコーダ300は、重みを決定するために参照隣接ブロックを使用し得、ここで、参照隣接ブロックは、たとえば、図3A~図3Fの様々な例に示すように、上隣接ブロック、右上隣接ブロック、左上隣接ブロック、左隣接ブロック、または左下隣接ブロックの任意の組合せであり得る。
一例では、たとえば、図3Aに示すように、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロック140のインターイントラ予測のためのイントラ予測サンプルおよびインター予測サンプルに適用すべき重みを決定するために、上隣接ブロック142および左隣接ブロック144を使用する。すなわち、上隣接ブロック142および左隣接ブロック144は、この例では、現在のブロック140のためのイントラコーディングされた隣接検査に使用される。
別の例では、たとえば、図3Bに示すように、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロック146のインターイントラ予測のためのイントラ予測サンプルおよびインター予測サンプルに適用すべき重みを決定するために、右上隣接ブロック148および左下隣接ブロック150を使用する。すなわち、右上隣接ブロック148および左下隣接ブロック150は、この例では、現在のブロック146のためのイントラコーディングされた隣接検査に使用される。
別の例では、たとえば、図3Cに示すように、上隣接ブロック154、左隣接ブロック156、および左上隣接ブロック158は、現在のブロック152のためのイントラコーディングされた隣接検査に使用される。
別の例では、たとえば、図3Dに示すように、右上隣接ブロック162、左下隣接ブロック164、および左上隣接ブロック166は、現在のブロック160のためのイントラコーディングされた隣接検査に使用される。
別の例では、たとえば、図3Eに示すように、上隣接ブロック170、右上隣接ブロック172、左隣接ブロック174、および左下隣接ブロック176は、現在のブロック168のためのイントラコーディングされた隣接検査に使用される。
別の例では、たとえば、図3Fに示すように、上隣接ブロック180、右上隣接ブロック182、左隣接ブロック184、左下隣接ブロック186、および左上隣接ブロック188は、現在のブロック178のためのイントラコーディングされた隣接検査に使用される。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックのブロックサイズ(たとえば、blkWidthおよびblkHeight)に従って参照隣接ブロックを選択する。たとえば、blkWidthおよびblkHeightが同一である場合、ビデオエンコーダ200およびビデオデコーダ300は図3D、図3E、または図3Fの組合せを使用し得る。別の例では、blkWidthおよびblkHeightが異なる場合、ビデオエンコーダ200およびビデオデコーダ300は、たとえば、図3Bに示すように、上rおよび左bを使用し得る。
別の例では、blkWidthおよびblkHeightが同一である場合、ビデオエンコーダ200およびビデオデコーダ300は、たとえば、図3A~図3Fの例ごとに、現在のブロックの幅次元および高さ次元に沿って対称的に隣接ブロック位置を選択し得る。一方、blkWidthおよびblkHeightが異なる場合、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックの幅次元および高さ次元に沿って非対称的に隣接ブロック位置を選択し得る。たとえば、blkWidthがblkHeightよりも大きい場合、ビデオエンコーダ200およびビデオデコーダ300は、上rおよび左であるものとして隣接ブロックを選択し得るが、blkWidthがblkHeightよりも小さい場合、ビデオエンコーダ200およびビデオデコーダ300は、左bおよび上であるものとして隣接ブロックを選択し得る。
いくつかの例では、検査された隣接ブロックがIBC/CPR符号化される(イントラブロックコピー/現在のピクチャ参照)場合、隣接ブロックはインターコーディングされたブロックと見なされ得る。
いくつかの例では、検査された隣接ブロックがIBC/CPR符号化される場合、隣接ブロックはイントラコーディングされたブロックと見なされ得る。
いくつかの例では、検査された隣接ブロックが合成されたイントラインターブロックであるとき、隣接ブロックはインターコーディングされたブロックと見なされ得る。
いくつかの例では、検査された隣接ブロックが合成されたイントラインターブロックであるとき、隣接ブロックはイントラコーディングされたブロックと見なされ得る。
いくつかの例では、単一のルーマクロマコーディングツリーまたは二重の(別個の)ルーマクロマコーディングツリーが有効化されるとき、ビデオエンコーダ200およびビデオデコーダ300は、対応するルーマブロックまたは対応するルーマブロックの隣接ブロックのイントラ検査に従って、クロマブロックのブレンドのための重みを決定し得る。
いくつかの例では、二重のツリーコーディングが有効化されるとき、ビデオエンコーダ200およびビデオデコーダ300は、隣接クロマブロックのイントラ検査に従って、クロマブロックのブレンドのための重みを決定し得る。
ビデオエンコーダ200およびビデオデコーダ300は、イントラ検査に基づいて重みを決定し得る。wInterおよびwIntraをインターイントラブレンドにおけるインターサンプルおよびイントラサンプルのための重みとする。重みは、nが重みの合計に等しい整数である2nによって正規化され得る。言い換えれば、これらの重みは、単純な右シフト演算で実装可能である4、8、16、...によって正規化され得る。
いくつかの例では、すべての検査された隣接ブロックがイントラコーディングされる場合、ビデオエンコーダ200およびビデオデコーダ300は、イントラサンプルのための重みがインターサンプルのための重みよりも高い(たとえば、(wInter, wIntra)=(1, 3)または(wInter, wIntra)=(3, 5))と決定し得る。
いくつかの例では、すべての検査された隣接ブロックがイントラコーディングされない場合、ビデオエンコーダ200およびビデオデコーダ300は、イントラサンプルのための重みがインターサンプルのための重みよりも低い(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))と決定し得る。
いくつかの例では、検査された隣接ブロックのうちの1つのみがイントラコーディングされる場合、ビデオエンコーダ200およびビデオデコーダ300は、イントラサンプルおよびインターサンプルのための重みが同一であると決定し得る。
いくつかの例では、左上隣接ブロック、上r隣接ブロック、および左b隣接ブロックがすべてイントラコーディングされる場合、ビデオエンコーダ200およびビデオデコーダ300は、重み(wInter, wIntra)が(1, 3)または(3, 5)であると決定し得る。別の例では、左上隣接ブロック、上r隣接ブロック、または左b隣接ブロックのうちの少なくとも1つがイントラコーディングされる場合、ビデオエンコーダ200およびビデオデコーダ300は、(2, 2)または(4, 4)に等しい(wInter, wIntra)を設定し得る。また別の例では、左上隣接ブロック、上r隣接ブロック、および左b隣接ブロックのすべてがイントラコーディングされない場合、ビデオエンコーダ200およびビデオデコーダ300は、(3, 1)または(5, 3)に等しい(wInter, wIntra)を設定し得る。
いくつかの例では、検査されたブロックのうちの少なくとも1つがMHI符号化された(多仮説イントラ)ブロックである場合、ビデオエンコーダ200およびビデオデコーダ300は、検査されたブロックのうちの1つの重みから現在のブロックのための重みをコピーし得る。
いくつかの例では、これらの検査されたブロックのうちの1つのみがイントラコーディングされる場合、ビデオエンコーダ200およびビデオデコーダ300は、イントラサンプルのための重みがインターサンプルのための重みよりも高い(たとえば、(wInter, wIntra)=(1, 3)または(wInter, wIntra)=(3, 5))と決定し得る。
いくつかの例では、これらの検査されたブロックのうちの1つのみがイントラコーディングされる場合、ビデオエンコーダ200およびビデオデコーダ300は、イントラサンプルのための重みがインターサンプルのための重みよりも低い(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))と決定し得る。
いくつかの例では、すべてのこれらの検査されたブロックがイントラコーディングされない場合、ビデオエンコーダ200およびビデオデコーダ300は、イントラサンプルのための重みがインターサンプルのための重みよりも高い(たとえば、(wInter, wIntra)=(1, 3)または(wInter, wIntra)=(3, 5))と決定し得る。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、検査された隣接ブロックのイントラ予測モードに従って(wInter, wIntra)を決定し得る。一例では、DCイントラモードまたは平面モードを使用してコーディングされている少なくとも1つの隣接ブロックがある場合、イントラサンプルのための重みはインターサンプルのための重みも高くなり得る(たとえば、(wInter, wIntra)=(1, 3)または(wInter, wIntra)=(3, 5))。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、マージインデックス付きブロックのインター予測の数、すなわち、マージインデックス付きブロックが単方向予測を使用して予測されるかまたは双方向予測を使用して予測されるかに基づいて、(wInter, wIntra)を決定し得る。
いくつかの例では、マージインデックス付きブロックが双予測である場合、ビデオエンコーダ200およびビデオデコーダ300は、wIntraよりも高いwInterを設定し得る(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))。
いくつかの例では、マージインデックス付きブロックが単予測である場合、ビデオエンコーダ200およびビデオデコーダ300は、wIntraよりも高いwInterを設定し得る(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))。
いくつかの例では、マージインデックス付きブロックが双予測である場合、ビデオエンコーダ200およびビデオデコーダ300は、wIntraよりも高いwInterを設定し得る(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))。一方、単予測によるマージインデックス付きブロックの場合、ビデオエンコーダ200およびビデオデコーダ300は、たとえば、上記で説明したように、隣接イントラおよび/またはインターブロックの数を使用して(wInter, wIntra)を決定し得る。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックのサイズに従って(wInter, wIntra)を決定し得る。現在のブロックのサイズ(SIZEblk)は、その幅および高さに基づく。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックの幅および高さの最小値として現在のブロックのサイズを決定し得る。別の例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックの幅および高さの最大値として現在のブロックのサイズを決定し得る。また別の例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックの幅および高さの乗算(すなわち、積)によって現在のブロックのサイズを決定し得る。さらに別の例では、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックの幅および高さの加算によって現在のブロックのサイズを決定し得る。
いくつかの例では、SIZEblkが事前定義されたしきい値よりも高い場合、ビデオエンコーダ200およびビデオデコーダ300は、wIntraよりも高いまたは低いwInterを設定し得る(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))。
いくつかの例では、SIZEblkが事前定義されたしきい値よりも低い場合、ビデオエンコーダ200およびビデオデコーダ300は、wIntraよりも高いまたは低いwInterを設定し得る(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))。
いくつかの例では、マージインデックス付きブロックが双予測である場合、ビデオエンコーダ200およびビデオデコーダ300は、wIntraよりも高いまたは低いwInterを設定し得る(たとえば、(wInter, wIntra)=(3, 1)または(wInter, wIntra)=(5, 3))。一方、単予測によるマージインデックス付きブロックの場合、ビデオエンコーダ200およびビデオデコーダ300は、現在のブロックのサイズに従って適応的に(wInter, wIntra)を決定し得る。
いくつかの例では、重みペアセット(wInter, wIntra)は事前定義され得る。重みペアセットは、ビットストリームヘッダまたはシーケンスパラメータセット(SPS)中でシグナリングされ得る。すなわち、ビデオエンコーダ200は重みペアセットを符号化し得るが、ビデオデコーダ300は重みペアセットを復号し得る。MHIブロックの符号化プロセスの間、ビデオエンコーダ200は、レートひずみ(RD)評価を使用して最良の重みを決定し得る。この例では、ビデオエンコーダ200は、重みペア中のすべての要素のRDコストを導出し得る。ビデオエンコーダ200は、最小RDコストを有するペアを選択して、現在のブロックを符号化し、このペアのインデックスをビットストリーム中にシグナリングし得る。ビデオエンコーダ200は、バイパスまたはコンテキストベースのエントロピー符号化を使用するCABACアルゴリズムを使用してインデックスを符号化し得る。ビデオデコーダ300は、復号プロセスを実行して、現在のブロックに適用すべき重み(たとえば、重みのペア)を決定するためのインデックスを取得し得る。
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、隣接ブロックモードの検査、ブロックサイズなどに基づく上記の技法において説明した場合に対応する、(SPS、ピクチャパラメータセット(PPS)、ビデオパラメータセット(VPS)、適応パラメータセット(APS)などの)パラメータセット中の重みまたはヘッダ(タイル、スライス、コーディングユニットなど)のリストをコーディングし得る。
図4は、本開示の技法を実行し得る例示的なビデオエンコーダ200を示すブロック図である。図4は説明のために提供され、本開示において広く例示および説明するような技法の限定と見なされるべきではない。説明のために、本開示は、HEVCビデオコーディング規格および開発中のH.266ビデオコーディング規格などのビデオコーディング規格の文脈でビデオエンコーダ200について説明する。しかしながら、本開示の技法はこれらのビデオコーディング規格に限定されず、概してビデオ符号化および復号に適用可能である。
図4の例では、ビデオエンコーダ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の様々なユニットからの出力の一時的な記憶を提供し得る。
図4の様々なユニットは、ビデオエンコーダ200によって実行される動作を理解することを助けるために図示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。固定機能回路は、特定の機能を提供する回路を指し、実行され得る動作に対してプリセットされる。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作において柔軟な機能を提供する。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方法でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は(たとえば、パラメータを受信するまたはパラメータを出力するための)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは概して不変である。いくつかの例では、ユニットのうちの1つまたは複数は別個の回路ブロック(固定機能またはプログラマブル)であってもよく、いくつかの例では、1つまたは複数のユニットは集積回路であってもよい。
ビデオエンコーダ200は、算術論理ユニット(ALU)、初等関数ユニット(EFU)、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含み得る。ビデオエンコーダ200の動作がプログラマブル回路によって実行されるソフトウェアを使用して実行される例では、メモリ106(図1)が、ビデオエンコーダ200が受信および実行するソフトウェアのオブジェクトコードを記憶してもよく、またはビデオエンコーダ200内の別のメモリ(図示せず)が、そのような命令を記憶してもよい。
ビデオデータメモリ230は、受信されたビデオデータを記憶するように構成される。ビデオエンコーダ200は、ビデオデータメモリ230からビデオデータのピクチャを取り出し、ビデオデータを残差生成ユニット204およびモード選択ユニット202に提供し得る。ビデオデータメモリ230中のビデオデータは、符号化されるべき生のビデオデータであり得る。
モード選択ユニット202は、動き推定ユニット222、動き補償ユニット224、およびイントラ予測ユニット226を含む。モード選択ユニット202は、他の予測モードに従ってビデオ予測を実行するための追加の機能ユニットを含み得る。例として、モード選択ユニット202は、パレットユニット、(動き推定ユニット222および/または動き補償ユニット224の一部であり得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含み得る。
モード選択ユニット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)を制御する。現在のブロックのインター予測の場合、動き推定ユニット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は、現在のブロックに対する隣接サンプルの平均を計算し、予測ブロックのサンプルごとにこの結果として生じる平均を含めるべき予測ブロックを生成し得る。
本開示の技法によれば、モード選択ユニット202は、ビデオデータのブロック(たとえば、CU)のインターイントラ予測を実行し得る。すなわち、モード選択ユニット202は、動き推定ユニット222および動き補償ユニット224にインター予測ブロックを形成させ、イントラ予測ユニット226にイントラ予測ブロックを形成させることによって、予測ブロックを形成し得る。モード選択ユニット202は、インター予測ブロックおよびイントラ予測ブロックのサンプルの重み付けされた組合せを実行することによって、現在のブロックのための最終的な予測ブロックを形成し得る。現在のブロックがクロミナンスブロックであるとき、モード選択ユニット202は、現在のクロミナンスブロックに対応するルミナンスブロックに対するイントラ予測コーディングされたおよび/またはインター予測コーディングされた隣接ブロックの数に従って、重み付けされた予測を実行するための重みを決定し得る。すなわち、現在のクロミナンスブロックに対する隣接ブロックに従って重みを決定するのではなく、モード選択ユニット202は、現在のクロミナンスブロックに対応するルミナンスブロックに隣接するインター予測されたブロックの数を決定し、次いで、ルミナンスブロックに隣接するインター予測されたブロックの数に基づいて重みを決定し得る。
一例として、モード選択ユニット202は、対応するルミナンスブロックに対する上隣接ブロックおよび/または左隣接ブロックがインター予測されるかどうかを決定し得る。これらの隣接ブロックのどちらもインター予測されないとき、モード選択ユニット202は、3という重みがイントラ予測ブロックに適用され、1という重みがインター予測ブロックに適用されると決定し得る。これらの隣接ブロックの両方がインター予測されるとき、モード選択ユニット202は、3という重みがインター予測ブロックに適用され、1という重みがイントラ予測ブロックに適用されると決定し得る。これらの隣接ブロックの一方がインター予測され、他方がイントラ予測されるとき、モード選択ユニット202は、2という重みがインター予測ブロックとイントラ予測ブロックの両方に適用されると決定し得る。いくつかの例では、モード選択ユニット202は、インター予測コーディングされたブロックとして、インターイントラ予測および/またはイントラブロックコピーを使用して予測された隣接ブロックをカウントし得る。
モード選択ユニット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サイズのための非対称区分をサポートし得る。
モード選択ユニットがCUをPUにさらに区分しない例では、各CUはルーマコーディングブロックおよび対応するクロマコーディングブロックに関連付けられ得る。上記のように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがある。ビデオエンコーダ200およびビデオデコーダ300は、2N×2N、2N×N、またはN×2NのCUサイズをサポートし得る。
数例として、イントラブロックコピーモードコーディング、アフィンモードコーディング、および線形モデル(LM)モードコーディングなどの他のビデオコーディング技法の場合、モード選択ユニット202は、コーディング技法に関連付けられたそれぞれのユニットを介して、符号化されている現在のブロックのための予測ブロックを生成する。パレットモードコーディングなどのいくつかの例では、モード選択ユニット202は予測ブロックを生成しないことがあり、その代わりに、選択されたパレットに基づいてブロックを再構成する方法を示すシンタックス要素を生成する。そのようなモードでは、モード選択ユニット202は、符号化されるべきこれらのシンタックス要素をエントロピー符号化ユニット220に提供し得る。
いくつかの例では、モード選択ユニット202はインターイントラ予測モードを選択し得る。そのような例では、モード選択ユニット202は、本開示の様々な技法のいずれかに従って、動き補償ユニット224によって生成されたインター予測ブロックおよびイントラ予測ユニット226によって生成されたイントラ予測ブロックに重み付けし得る。モード選択ユニット202は、重み付けされたインター予測ブロックおよびイントラ予測ブロックから予測ブロックを生成し、生成された予測ブロックを出力し得る。
上記で説明したように、残差生成ユニット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のビデオエンコーダ200は、ビデオデータの現在のブロックのためのインター予測ブロックを形成し、ビデオデータの現在のブロックのためのイントラ予測ブロックを形成し、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用し、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のブロックのための予測ブロックを形成し、予測ブロックを使用して現在のブロックをコーディングする(すなわち、この例では、符号化する)ように構成された1つまたは複数のプロセッサを備える、ビデオデータをコーディングするためのデバイスの一例を表す。
ビデオエンコーダ200はまた、ビデオデータの現在のクロミナンスブロックのためのインター予測ブロックを形成し、ビデオデータの現在のクロミナンスブロックのためのイントラ予測ブロックを形成し、現在のクロミナンスブロックに対応するルミナンスブロックに対するイントラ予測コーディングされた隣接ブロックの数を決定し、イントラ予測コーディングされた隣接ブロックの数に従って第1の重みおよび第2の重みを決定し、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用し、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のクロミナンスブロックのための予測ブロックを形成し、予測ブロックを使用して現在のクロミナンスブロックをコーディングするように構成された1つまたは複数のプロセッサを備える、ビデオデータをコーディングするためのデバイスの一例を表す。
図5は、本開示の技法を実行し得る例示的なビデオデコーダ300を示すブロック図である。図5は説明のために提供され、本開示において広く例示および説明するような技法を限定するものではない。説明のために、本開示は、JEM、VVC、およびHEVCの技法によるビデオデコーダ300について説明する。しかしながら、本開示の技法は、他のビデオコーディング規格に従って構成されたビデオコーディングデバイスによって実行され得る。
図5の例では、ビデオデコーダ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を含む。予測処理ユニット304は、他の予測モードに従って予測を実行するための追加のユニットを含み得る。例として、予測処理ユニット304は、パレットユニット、(動き補償ユニット316の一部を形成し得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含み得る。他の例では、ビデオデコーダ300は、より多数の、より少数の、または異なる機能構成要素を含み得る。
いくつかの例では、予測処理ユニット304はインターイントラ予測モードを選択し得る。そのような例では、予測処理ユニット304は、本開示の様々な技法のいずれかに従って、動き補償ユニット316によって生成されたインター予測ブロックおよびイントラ予測ユニット318によって生成されたイントラ予測ブロックに重み付けし得る。予測処理ユニット304は、重み付けされたインター予測ブロックおよびイントラ予測ブロックから予測ブロックを生成し、生成された予測ブロックを出力し得る。
本開示の技法によれば、予測処理ユニット304は、ビデオデータのブロック(たとえば、CU)のインターイントラ予測を実行し得る。すなわち、予測処理ユニット304は、動き補償ユニット316にインター予測ブロックを形成させ、イントラ予測ユニット318にイントラ予測ブロックを形成させることによって、予測ブロックを形成し得る。予測処理ユニット304は、インター予測ブロックおよびイントラ予測ブロックのサンプルの重み付けされた組合せを実行することによって、現在のブロックのための最終的な予測ブロックを形成し得る。現在のブロックがクロミナンスブロックであるとき、予測処理ユニット304は、現在のクロミナンスブロックに対応するルミナンスブロックに対するイントラ予測コーディングされた隣接ブロックの数に従って、重み付けされた予測を実行するための重みを決定し得る。すなわち、現在のクロミナンスブロックに対する隣接ブロックに従って重みを決定するのではなく、予測処理ユニット304は、現在のクロミナンスブロックに対応するルミナンスブロックに隣接するイントラ予測されたブロックの数を決定し、次いで、ルミナンスブロックに隣接するイントラ予測されたブロックの数に基づいて重みを決定し得る。
一例として、予測処理ユニット304は、対応するルミナンスブロックに対する上隣接ブロックおよび/または左隣接ブロックがインター予測されるかどうかを決定し得る。これらの隣接ブロックのどちらもインター予測されないとき、予測処理ユニット304は、3という重みがイントラ予測ブロックに適用され、1という重みがインター予測ブロックに適用されると決定し得る。これらの隣接ブロックの両方がインター予測されるとき、予測処理ユニット304は、3という重みがインター予測ブロックに適用され、1という重みがイントラ予測ブロックに適用されると決定し得る。これらの隣接ブロックの一方がインター予測され、他方がイントラ予測されるとき、予測処理ユニット304は、2という重みがインター予測ブロックとイントラ予測ブロックの両方に適用されると決定し得る。いくつかの例では、予測処理ユニット304は、インター予測コーディングされたブロックとして、インターイントラ予測および/またはイントラブロックコピーを使用して予測された隣接ブロックをカウントし得る。
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によって実行されるべき命令を記憶し得る。
図5に示す様々なユニットは、ビデオデコーダ300によって実行される動作を理解することを助けるために図示されている。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。図4と同様に、固定機能回路は、特定の機能を提供する回路を指し、実行され得る動作に対してプリセットされる。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作において柔軟な機能を提供する。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって定義された方法でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は(たとえば、パラメータを受信するまたはパラメータを出力するための)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは概して不変である。いくつかの例では、ユニットのうちの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(図4)に関して説明した方法と実質的に同様の方法でインター予測プロセスを実行し得る。
別の例として、現在のブロックがイントラ予測されることを予測情報シンタックス要素が示す場合、イントラ予測ユニット318は、予測情報シンタックス要素によって示されたイントラ予測モードに従って予測ブロックを生成し得る。やはり、イントラ予測ユニット318は、一般に、イントラ予測ユニット226(図4)に関して説明した方法と実質的に同様の方法でイントラ予測プロセスを実行し得る。イントラ予測ユニット318は、DPB314から現在のブロックに対する隣接サンプルのデータを取り出し得る。
再構成ユニット310は、予測ブロックおよび残差ブロックを使用して現在のブロックを再構成し得る。たとえば、再構成ユニット310は、残差ブロックのサンプルを予測ブロックの対応するサンプルに加えて、現在のブロックを再構成し得る。
フィルタユニット312は、再構成されたブロックに対して1つまたは複数のフィルタ動作を実行し得る。たとえば、フィルタユニット312は、再構成されたブロックの端部に沿ってブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。フィルタユニット312の動作は、必ずしもすべての例において実行されるとは限らない。
ビデオデコーダ300は、再構成されたブロックをDPB314に記憶し得る。上記で説明したように、DPB314は、イントラ予測のための現在のピクチャおよび後続の動き補償のための以前に復号されたピクチャのサンプルなどの参照情報を予測処理ユニット304に提供し得る。さらに、ビデオデコーダ300は、図1のディスプレイデバイス118などのディスプレイデバイス上で後で提示するための、DPBからの復号されたピクチャを出力し得る。
図5のビデオデコーダ300は、ビデオデータの現在のブロックのためのインター予測ブロックを形成し、ビデオデータの現在のブロックのためのイントラ予測ブロックを形成し、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用し、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のブロックのための予測ブロックを形成し、予測ブロックを使用して現在のブロックをコーディングする(すなわち、この例では、復号する)ように構成された1つまたは複数のプロセッサを備える、ビデオデータをコーディングするためのデバイスの一例を表す。
ビデオデコーダ300はまた、ビデオデータの現在のクロミナンスブロックのためのインター予測ブロックを形成し、ビデオデータの現在のクロミナンスブロックのためのイントラ予測ブロックを形成し、現在のクロミナンスブロックに対応するルミナンスブロックに対するイントラ予測コーディングされた隣接ブロックの数を決定し、イントラ予測コーディングされた隣接ブロックの数に従って第1の重みおよび第2の重みを決定し、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用し、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のクロミナンスブロックのための予測ブロックを形成し、予測ブロックを使用して現在のクロミナンスブロックをコーディングするように構成された1つまたは複数のプロセッサを備える、ビデオデータをコーディングするためのデバイスの一例を表す。
図6は、本開示の技法による、現在のブロックを符号化するための例示的な方法を示すフローチャートである。現在のブロックは現在のCUを備え得る。ビデオエンコーダ200(図1および図4)に関して説明するが、他のデバイスが図6の方法に類似の方法を実行するように構成され得ることを理解されたい。
この例では、ビデオエンコーダ200は最初に、現在のブロックを予測する(350)。たとえば、ビデオエンコーダ200は、本開示の技法によるインターイントラ予測を使用して現在のブロックのための予測ブロックを形成し得る。次いで、ビデオエンコーダ200は、現在のブロックのための残差ブロックを計算し得る(352)。残差ブロックを計算するために、ビデオエンコーダ200は、元のコーディングされていないブロックと現在のブロックのための予測ブロックとの間の差分を計算し得る。次いで、ビデオエンコーダ200は、残差ブロックの係数を変換および量子化し得る(354)。次に、ビデオエンコーダ200は、残差ブロックの量子化された変換係数を走査し得る(356)。走査の間、または走査に続いて、ビデオエンコーダ200は、係数をエントロピー符号化し得る(358)。たとえば、ビデオエンコーダ200は、CAVLCまたはCABACを使用して係数を符号化し得る。次いで、ビデオエンコーダ200は、ブロックのエントロピーコーディングされたデータを出力し得る(360)。
このようにして、図6の方法は、ビデオデータの現在のブロックのためのインター予測ブロックを形成するステップと、ビデオデータの現在のブロックのためのイントラ予測ブロックを形成するステップと、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用するステップと、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のブロックのための予測ブロックを形成するステップと、予測ブロックを使用して現在のブロックをコーディングする(すなわち、符号化する)ステップとを含む方法の一例を表す。
図7は、本開示の技法による、現在のブロックを復号するための例示的な方法を示すフローチャートである。現在のブロックは現在のCUを備え得る。ビデオデコーダ300(図1および図5)に関して説明するが、他のデバイスが図7の方法に類似の方法を実行するように構成され得ることを理解されたい。
ビデオデコーダ300は、エントロピーコーディングされた予測情報および現在のブロックに対応する残差ブロックの係数のためのエントロピーコーディングされたデータなどの、現在のブロックのためのエントロピーコーディングされたデータを受信し得る(370)。ビデオデコーダ300は、現在のブロックのための予測情報を決定するために、および残差ブロックの係数を再生するために、エントロピーコーディングされたデータをエントロピー復号し得る(372)。ビデオデコーダ300は、現在のブロックのための予測ブロックを計算するために、たとえば、現在のブロックのための予測情報によって示されるような、本開示の技法によるインターイントラ予測モードを使用して、現在のブロックを予測し得る(374)。次いで、ビデオデコーダ300は、量子化された変換係数のブロックを作成するために、再生された係数を逆走査し得る(376)。次いで、ビデオデコーダ300は、残差ブロックを生成するために、係数を逆量子化および逆変換し得る(378)。ビデオデコーダ300は、予測ブロックおよび残差ブロックを合成することによって、現在のブロックを最終的に復号し得る(380)。
このようにして、図7の方法は、ビデオデータの現在のブロックのためのインター予測ブロックを形成するステップと、ビデオデータの現在のブロックのためのイントラ予測ブロックを形成するステップと、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用するステップと、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のブロックのための予測ブロックを形成するステップと、予測ブロックを使用して現在のブロックをコーディングする(すなわち、復号する)ステップとを含む方法の一例を表す。
図8は、本開示の技法による、ビデオデータをコーディング(符号化または復号)する例示的な方法を示すフローチャートである。例および説明のために、図8の方法は図1および図5のビデオデコーダ300に関して説明されるが、図1および図4のビデオエンコーダ200または他のビデオコーディングデバイスがこの方法または類似の方法を実行し得る。図8の方法は、たとえば図6の方法のステップ350において現在のクロミナンスブロックを予測するときはビデオエンコーダ200によって、または、たとえば図7のステップ374において現在のクロミナンスブロックを予測するときはビデオデコーダ300によって実行され得る。
最初に、ビデオデコーダ300は、現在のクロミナンスブロックのためのインター予測ブロックを形成する(400)。ビデオデコーダ300はまた、現在のクロミナンスブロックのためのイントラ予測ブロックを形成し得る(402)。次いで、ビデオデコーダ300は、クロミナンスブロックに対応するルミナンスブロック、たとえば、ルミナンスアレイ中でクロミナンスブロックとコロケートされるルミナンスブロックを決定し得る(404)。
次いで、ビデオデコーダ300は、ルミナンスブロックに対する隣接ブロックの予測モードを決定し得る(406)。たとえば、ビデオデコーダ300は、図3A~図3Fに示すような隣接ブロックの他の例について、図3Aの上隣接ブロック142および左隣接ブロック144、図3Bの右上隣接ブロック148および左下隣接ブロック150などの予測モードを決定し得る。ビデオデコーダ300はまた、ルミナンスブロックに対するイントラ予測された隣接ブロックの数を決定し得る(408)。代替として、ビデオデコーダ300は、ルミナンスブロックに対するインター予測された隣接ブロックの数を決定し得る。
ビデオデコーダ300はまた、ルミナンスブロックに対するイントラ予測された隣接ブロックの数に従って、インター予測ブロックおよびイントラ予測ブロックに適用されるべき重みを決定し得る(410)。イントラ予測されたブロックよりも多くのインター予測されたブロックがある場合、ビデオデコーダ300は、インター予測ブロックに適用されるべき重みがイントラ予測ブロックに適用されるべき重みよりも大きいと決定し得る。たとえば、インター予測ブロックに適用されるべき重みは3であってもよく、イントラ予測ブロックに適用されるべき重みは1であってもよい。イントラ予測ブロックの数がインター予測ブロックの数よりも大きい場合、ビデオデコーダ300は、イントラ予測ブロックに適用されるべき重みがインター予測ブロックに適用されるべき重みよりも大きいと決定し得る。たとえば、イントラ予測ブロックに適用されるべき重みは3であってもよく、インター予測ブロックに適用されるべき重みは1であってもよい。イントラ予測ブロックの数およびインター予測ブロックの数が同じである場合、重みは等しくてもよく、たとえば、それぞれについて2であってもよい。
次いで、ビデオデコーダ300は、重みを使用してインター予測ブロックおよびイントラ予測ブロックを合成して、現在のクロミナンスブロックのための予測ブロックを形成し得る(412)。次いで、ビデオデコーダ300は、予測ブロックを使用して現在のクロミナンスブロックをコーディングし得る(414)。
このようにして、図8の方法は、ビデオデコーダをコーディングする方法であって、ビデオデータの現在のクロミナンスブロックのためのインター予測ブロックを形成するステップと、ビデオデータの現在のクロミナンスブロックのためのイントラ予測ブロックを形成するステップと、現在のクロミナンスブロックに対応するルミナンスブロックに対するイントラ予測コーディングされた隣接ブロックの数を決定するステップと、イントラ予測コーディングされた隣接ブロックの数に従って第1の重みおよび第2の重みを決定するステップと、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用するステップと、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のクロミナンスブロックのための予測ブロックを形成するステップと、予測ブロックを使用して現在のクロミナンスブロックをコーディングするステップとを備える方法の一例を表す。
本開示のいくつかの技法が以下の例において要約される。
例1: ビデオデータをコーディングする方法であって、ビデオデータの現在のブロックのためのインター予測ブロックを形成するステップと、ビデオデータの現在のブロックのためのイントラ予測ブロックを形成するステップと、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用するステップと、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のブロックのための予測ブロックを形成するステップと、予測ブロックを使用して現在のブロックをコーディングするステップとを備える方法。
例2: 現在のブロックをコーディングするステップが、現在のブロックを復号するステップを備え、復号するステップが、現在のブロックのための残差ブロックを復号するステップと、残差ブロックのサンプルを予測ブロックのサンプルと合成するステップとを備える、例1の方法。
例3: 現在のブロックをコーディングするステップが、現在のブロックを符号化するステップを備え、符号化するステップが、現在のブロックのサンプルから予測ブロックのサンプルを減算して、残差ブロックを形成するステップと、残差ブロックを符号化するステップとを備える、例1および2のいずれかの方法。
例4: 現在のブロックに対するイントラコーディングされた隣接ブロックの数に従って第1の重みおよび第2の重みを決定するステップをさらに備える、例1~3のいずれかの方法。
例5: 隣接ブロックが上隣接ブロックを含む、例4の方法。
例6: 隣接ブロックが左隣接ブロックを含む、例4および5のいずれかの方法。
例7: 隣接ブロックが右上隣接ブロックを含む、例4~6のいずれかの方法。
例8: 隣接ブロックが左下隣接ブロックを含む、例4~7のいずれかの方法。
例9: 隣接ブロックが左上隣接ブロックを含む、例4~8のいずれかの方法。
例10: 現在のブロックの高さおよび現在のブロックの幅に従って隣接ブロックを決定するステップをさらに備える、例4~9のいずれかの方法。
例11: 高さおよび幅が等しいとき、隣接ブロックが右上隣接ブロックおよび左下隣接ブロックを含む、例10の方法。
例12: 隣接ブロックが上隣接ブロックおよび左隣接ブロックをさらに含む、例11の方法。
例13: 隣接ブロックが左上隣接ブロックをさらに含む、例12の方法。
例14: 高さおよび幅が異なるとき、隣接ブロックが右上隣接ブロックおよび左下隣接ブロックを含む、例10~13のいずれかの方法。
例15: 高さおよび幅が等しいとき、隣接ブロックが現在のブロックの幅次元および高さ次元に沿って対称であり、高さおよび幅が等しくないとき、隣接ブロックが現在のブロックの幅次元および高さ次元に沿って非対称である、例10の方法。
例16: 幅が高さよりも大きいとき、隣接ブロックが右上隣接ブロックおよび左隣接ブロックを含み、高さが幅よりも大きいとき、隣接ブロックが上隣接ブロックおよび左下隣接ブロックを含む、例15の方法。
例17: イントラブロックコピーコーディングされたまたは現在のピクチャ参照コーディングされた隣接ブロックのうちの1つがインターコーディングされたブロックであると決定するステップをさらに備える、例4~16のいずれかの方法。
例18: イントラブロックコピーコーディングされたまたは現在のピクチャ参照コーディングされた隣接ブロックのうちの1つがイントラコーディングされたブロックであると決定するステップをさらに備える、例4~16のいずれかの方法。
例19: インターイントラコーディングされた隣接ブロックのうちの1つがインターコーディングされたブロックであると決定するステップをさらに備える、例4~18のいずれかの方法。
例20: インターイントラコーディングされた隣接ブロックのうちの1つがイントラコーディングされたブロックであると決定するステップをさらに備える、例4~18のいずれかの方法。
例21: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのすべてがイントラコーディングされるときに、第1の重みよりも高くなるように第2の重みを選択するステップを備える、例4~20のいずれかの方法。
例22: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのうちの少なくとも1つがイントラコーディングされないときに、第2の重みよりも高くなるように第1の重みを選択するステップを備える、例4~21のいずれかの方法。
例23: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのうちの1つのみがイントラコーディングされるときに、第2の重みに等しくなるように第1の重みを選択するステップを備える、例4~22のいずれかの方法。
例24: 第1の重みおよび第2の重みを決定するステップが、現在のブロックに対する左上隣接ブロック、右上隣接ブロック、および左下隣接ブロックがイントラコーディングされるときに、1になるように第1の重みを、3になるように第2の重みを選択するステップを備える、例4~23のいずれかの方法。
例25: 第1の重みおよび第2の重みを決定するステップが、現在のブロックに対する左上隣接ブロック、右上隣接ブロック、および左下隣接ブロックがイントラコーディングされるときに、3になるように第1の重みを、5になるように第2の重みを選択するステップを備える、例4~23のいずれかの方法。
例26: 第1の重みおよび第2の重みを決定するステップが、現在のブロックに対する左上隣接ブロック、右上隣接ブロック、または左下隣接ブロックのうちの少なくとも1つがイントラコーディングされるときに、2になるように第1の重みを、2になるように第2の重みを選択するステップを備える、例4~25のいずれかの方法。
例27: 第1の重みおよび第2の重みを決定するステップが、現在のブロックに対する左上隣接ブロック、右上隣接ブロック、または左下隣接ブロックのうちの少なくとも1つがイントラコーディングされるときに、4になるように第1の重みを、4になるように第2の重みを選択するステップを備える、例4~25のいずれかの方法。
例28: 第1の重みおよび第2の重みを決定するステップが、現在のブロックに対する左上隣接ブロック、右上隣接ブロック、および左下隣接ブロックのうちのどれもイントラコーディングされないときに、3になるように第1の重みを、1になるように第2の重みを選択するステップを備える、例4~27のいずれかの方法。
例29: 第1の重みおよび第2の重みを決定するステップが、現在のブロックに対する左上隣接ブロック、右上隣接ブロック、および左下隣接ブロックのうちのどれもイントラコーディングされないときに、5になるように第1の重みを、3になるように第2の重みを選択するステップを備える、例4~27のいずれかの方法。
例30: 第1の重みおよび第2の重みを決定するステップが、多仮説イントラコーディングされた隣接ブロックのうちの1つから第1の重みおよび第2の重みをコピーするステップを備える、例4~29のいずれかの方法。
例31: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのうちの1つのみがイントラコーディングされるときに、第1のレートよりも高くなるように第2の重みを選択するステップを備える、例4~30のいずれかの方法。
例32: 第2の重みが3であり、第1の重みが1である、例31の方法。
例33: 第2の重みが5であり、第1の重みが3である、例31の方法。
例34: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのうちの1つのみがイントラコーディングされるときに、第2のレートよりも高くなるように第1の重みを選択するステップを備える、例4~30のいずれかの方法。
例35: 第1の重みが3であり、第2の重みが1である、例34の方法。
例36: 第1の重みが5であり、第2の重みが3である、例34の方法。
例37: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのうちのどれもイントラコーディングされないときに、第1のレートよりも高くなるように第2の重みを選択するステップを備える、例4~30のいずれかの方法。
例38: 第2の重みが3であり、第1の重みが1である、例37の方法。
例39: 第2の重みが5であり、第1の重みが3である、例37の方法。
例40: 第1の重みおよび第2の重みを決定するステップが、隣接ブロックのうちの少なくとも1つがDCイントラモードまたは平面モードを使用して予測されるときに、第1のレートよりも高くなるように第2の重みを選択するステップを備える、例4~30のいずれかの方法。
例41: 第2の重みが3であり、第1の重みが1である、例40の方法。
例42: 第2の重みが5であり、第1の重みが3である、例40の方法。
例43: 隣接ブロックのうちの1つが単一のルーマクロマコーディングツリーまたは二重のルーマクロマコーディングツリーを有効化したときに、隣接ブロックのうちの1つのルーマブロックに従って第1の重みおよび第2の重みを決定するステップをさらに備える、例1~42のいずれかの方法。
例44: 隣接ブロックのうちの1つが二重のルーマクロマコーディングツリーを有効化したときに、隣接ブロックのうちの1つのクロマブロックに従って第1の重みおよび第2の重みを決定するステップをさらに備える、例1~43のいずれかの方法。
例45: マージインデックス付きブロックのインター予測の数に従って第1の重みおよび第2の重みを決定するステップをさらに備える、例1~44のいずれかの方法。
例46: 第1の重みおよび第2の重みを決定するステップが、マージインデックス付きブロックが双予測であるときに、第2の重みよりも高い第1の重みを設定するステップを備える、例45の方法。
例47: 第1の重みが3であり、第2の重みが1である、例46の方法。
例48: 第1の重みが5であり、第2の重みが3である、例46の方法。
例49: 第1の重みおよび第2の重みを決定するステップが、マージインデックス付きブロックが単予測であるときに、例4~42のうちの1つに従って第1の重みおよび第2の重みを決定するステップを備える、例46~48のいずれかの方法。
例50: 第1の重みおよび第2の重みを決定するステップが、マージインデックス付きブロックが単予測であるときに、第2の重みよりも高い第1の重みを設定するステップを備える、例45の方法。
例51: 第1の重みが3であり、第2の重みが1である、例50の方法。
例52: 第1の重みが5であり、第2の重みが3である、例50の方法。
例53: 現在のブロックのサイズに従って第1の重みおよび第2の重みを決定するステップをさらに備える、例1~52のいずれかの方法。
例54: 現在のブロックのサイズが、現在のブロックの幅と現在のブロックの高さの最小値を備える、例53の方法。
例55: 現在のブロックのサイズが、現在のブロックの幅と現在のブロックの高さの最大値を備える、例53の方法。
例56: 現在のブロックのサイズが、現在のブロックの幅と現在のブロックの高さの積を備える、例53の方法。
例57: 現在のブロックのサイズが、現在のブロックの幅と現在のブロックの高さの和を備える、例53の方法。
例58: 第1の重みおよび第2の重みを決定するステップが、ブロックのサイズが事前定義されたしきい値よりも高いときに、第2の重みよりも高い第1の重みを設定するステップを備える、例53~57のいずれかの方法。
例59: 第1の重みが3であり、第2の重みが1である、例58の方法。
例60: 第1の重みが5であり、第2の重みが3である、例58の方法。
例61: 第1の重みおよび第2の重みを決定するステップが、ブロックのサイズが事前定義されたしきい値よりも高いときに、第1の重みよりも高い第2の重みを設定するステップを備える、例53~57のいずれかの方法。
例62: 第2の重みが3であり、第1の重みが1である、例61の方法。
例63: 第2の重みが5であり、第1の重みが3である、例61の方法。
例64: 第1の重みおよび第2の重みを決定するステップが、ブロックのサイズが事前定義されたしきい値よりも低いときに、第2の重みよりも高い第1の重みを設定するステップを備える、例53~57のいずれかの方法。
例65: 第1の重みが3であり、第2の重みが1である、例64の方法。
例66: 第1の重みが5であり、第2の重みが3である、例64の方法。
例67: 第1の重みおよび第2の重みを決定するステップが、ブロックのサイズが事前定義されたしきい値よりも低いときに、第1の重みよりも高い第2の重みを設定するステップを備える、例53~57のいずれかの方法。
例68: 第2の重みが3であり、第1の重みが1である、例67の方法。
例69: 第2の重みが5であり、第1の重みが3である、例67の方法。
例70: 第1の重みおよび第2の重みを表すビットストリームのデータをコーディングするステップをさらに備える、例1~69のいずれかの方法。
例71: ビットストリームのデータが、シーケンスパラメータセット、ピクチャパラメータセット、適応パラメータセット、ビデオパラメータセット、ピクチャヘッダ、スライスヘッダ、タイルヘッダ、またはブロックヘッダのうちの少なくとも1つを備える、例70の方法。
例72: ビデオデータをコーディングするためのデバイスであって、例1~71のいずれかの方法を実行するための1つまたは複数の手段を備えるデバイス。
例73: 1つまたは複数の手段が、回路において実装された1つまたは複数のプロセッサを備える、例72のデバイス。
例74: 復号されたビデオデータを表示するように構成されたディスプレイをさらに備える、例72のデバイス。
例75: カメラ、コンピュータ、モバイルデバイス、ブロードキャスト受信機デバイス、またはセットトップボックスのうちの1つまたは複数を備える、例72のデバイス。
例76: ビデオデータを記憶するように構成されたメモリをさらに備える、例72のデバイス。
例77: ビデオデータを符号化するためのデバイスであって、ビデオデータの現在のブロックのためのインター予測ブロックを形成するための手段と、ビデオデータの現在のブロックのためのイントラ予測ブロックを形成するための手段と、第1の重みをインター予測ブロックに、第2の重みをイントラ予測ブロックに適用するための手段と、第1の重み付けされたインター予測ブロックおよび第2の重み付けされたイントラ予測ブロックを合成して、現在のブロックのための予測ブロックを形成するための手段と、予測ブロックを使用して現在のブロックをコーディングするための手段とを備えるデバイス。
例78: 実行されると、プロセッサに例1~71のいずれかの方法を実行させる命令を記憶したコンピュータ可読記憶媒体。
例に応じて、本明細書で説明する技法のいずれかのいくつかの行為またはイベントが、異なるシーケンスで実行される場合があり、追加され、統合され、または完全に除外されてもよい(たとえば、説明したすべての行為またはイベントが技法の実践にとって必要であるとは限らない)ことを認識されたい。さらに、いくつかの例では、行為またはイベントは、連続的にではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通じて、同時に実行されてもよい。
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つもしくは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてもよい。
様々な例が説明された。これらおよび他の例は、以下の特許請求の範囲内に入る。