添付の図面のいずれか1以上において、同一の参照符号を有するステップ及び/又は特徴を参照する場合、それらのステップ及び/又は特徴は本明細書の目的のために、反対の意図が現れない限り、同一の機能又は動作を有する。
上述のように、直前のブロックからのサンプルの使用は、ビデオエンコーダまたはデコーダにおけるブロックのスループットを制限し得るフィードバック依存性をもたらす。典型的なリアルタイム符号化および復号アプリケーションに必要とされるように、高レートの処理ブロックを維持できることを保証するために、結果として生じるフィードバック依存性ループの重大性を軽減する方法が望ましい。フィードバック依存ループは例えば、毎秒500-4000サンプルからの現代のビデオフォーマットの高いサンプルレートに対して特に問題であるが、ASIC(特定用途向け集積回路)クロック周波数は典型的には数百MHzである。
図1は、ビデオ符号化及び復号システム100の機能モジュールを示す概略ブロック図である。システム100は、遭遇する最悪の場合のブロック処理レートを低減するために、ルマ符号化ツリーおよびクロマ符号化ツリーにおける領域の許容される再分割のための異なる規則を利用することができる。例えば、システム100は、ブロックのアスペクト比にかかわらず、ブロックが常に16(16)サンプルの倍数としてサイズ設定されるように動作することができる。さらに、符号化ツリーが小さなルマ符号化ブロックの存在を示す分割を含む場合、分割は、クロマチャネルにおいて禁止されてもよく、その結果、単一のクロマCBが複数のルマCBと並置される。クロマCBは、(1つまたは複数のルマCBがインター予測を使用する場合を含む)各コロケートされたルマCBの予測モードとは独立して、1つのイントラ予測モードなどの単一の予測モードを使用することができる。残留係数符号化は、2つのサンプルの幅または高さを有するブロックの場合を含めて、16ブロックサイズの倍数を利用することもできる。
システム100は、ソース装置110と宛先装置130とを含む。通信チャネル120は、符号化されたビデオ情報をソース装置110から宛先装置130に通信するために使用される。いくつかの構成では、ソース装置110および宛先装置130がそれぞれの携帯電話ハンドセットまたは「スマートフォン」のいずれかまたは両方を備えることができ、その場合、通信チャネル120はワイヤレスチャネルである。他の構成では、ソース装置110および宛先装置130がビデオ会議機器を備えることができ、その場合、通信チャネル120は通常、インターネット接続などの有線チャネルである。さらに、ソース装置110および宛先装置130は、無線テレビ放送、ケーブルテレビアプリケーション、インターネットビデオアプリケーション(ストリーミングを含む)、およびファイルサーバ内のハードディスクドライブなどの何らかのコンピュータ可読記憶媒体上に符号化ビデオデータが取り込まれるアプリケーションをサポートする装置を含む、広範囲の装置のうちの任意のものを備えることができる。
図1に示すように、ソース装置110は、ビデオソース112と、ビデオエンコーダ114と、送信機116と、を含む。ビデオソース112は、典型的には撮像センサ等の、撮像されたビデオフレームデータ(113として示されている)のソース、非一時的記録媒体上に格納された前に撮像されたビデオシーケンス、又はリモート撮像センサからのビデオ、を有する。ビデオソース112はまた、コンピュータグラフィックスカードの出力であってもよく、例えば、タブレットコンピュータなどのコンピューティングデバイスで実行されているオペレーティングシステムとさまざまなアプリケーションのビデオ出力を表示する。ビデオソース112として撮像センサを含み得るソース装置110の例は、スマートフォン、ビデオカメラ、業務用ビデオカメラ、およびネットワークビデオカメラを含む。
ビデオエンコーダ114は、図3を参照してさらに説明されるように、ビデオソース112からの撮像されたフレームデータ(矢印113によって示される)をビットストリーム(矢印115によって示される)に変換(または「符号化」)する。ビットストリーム115は、符号化されたビデオデータ(または「符号化されたビデオ情報」)として通信チャネル120を介して送信機116によって送信される。ビットストリーム115は後に通信チャネル120を介して送信されるまで、または通信チャネル120を介した送信の代わりに、「フラッシュ」メモリまたはハードディスクドライブなどの非一時的記憶装置122に記憶されることも可能である。
宛先装置130は、受信機132と、ビデオデコーダ134と、表示装置136と、を含む。受信機132は、通信チャネル120から符号化されたビデオデータを受信し、受信されたビデオデータをビットストリームとしてビデオデコーダ134に渡す(矢印133によって示される)。そして、ビデオデコーダ134は、(矢印135で示す)復号フレームデータを表示装置136に出力する。復号フレームデータ135は、フレームデータ113と同じクロマフォーマットを有する。表示装置136の例には、陰極線管、スマートフォン、タブレットコンピュータ、コンピュータモニタ、またはスタンドアロンテレビセットなどの液晶ディスプレイが含まれる。また、ソース装置110および宛先装置130の各々の機能性が単一の装置で実現されることも可能であり、その例は、携帯電話ハンドセットおよびタブレットコンピュータを含む。
上記の例示的なデバイスにもかかわらず、ソース装置110および宛先装置130のそれぞれは、一般にハードウェアおよびソフトウェア構成要素の組合せを介して、汎用コンピューティングシステム内で構成され得る。図2Aは、コンピュータモジュール201と、キーボード202、マウスポインタデバイス203、スキャナ226、ビデオソース112として構成することができるカメラ227、およびマイクロフォン280などの入力デバイスと、プリンタ215、表示装置136として構成することができるディスプレイデバイス214、およびスピーカ217を含む出力デバイスと、を含む、そのようなコンピュータシステム200を示す。外部変復調器(モデム)トランシーバ装置216は、接続221を介して通信ネットワーク220との間で通信するためにコンピュータモジュール201によって使用され得る。通信チャネル120を表すことができる通信ネットワーク220は、インターネット、セルラ電気通信ネットワーク、またはプライベートWANなどの広域ネットワーク(WAN)であってもよい。接続221が電話回線である場合、モデム216は従来の「ダイヤルアップ」モデムであってもよい。あるいは接続221が大容量(例えば、ケーブルまたは光)接続である場合、モデム216はブロードバンドモデムであってもよい。無線モデムはまた、通信ネットワーク220への無線接続のために使用されてもよい。トランシーバ装置216は、送信機116及び受信機132の機能性を提供することができ、通信チャネル120は、接続221内に具現化することができる。
コンピュータモジュール201は、典型的には少なくとも1つのプロセッサユニット205と、メモリユニット206とを含む。例えば、メモリユニット206は、半導体ランダムアクセスメモリ(RAM)及び半導体リードオンリーメモリ(ROM)を有することができる。コンピュータモジュール201はまた、ビデオディスプレイ214、スピーカ217、およびマイクロフォン280に結合するオーディオビデオインターフェース207、キーボード202、マウス203、スキャナ226、カメラ227、およびオプションとしてジョイスティックまたは他のヒューマンインターフェースデバイス(図示せず)に結合するI/Oインターフェース213、ならびに外部モデム216およびプリンタ215のためのインターフェース208を含む、いくつかの入出力(I/O)インターフェースを含む。オーディオビデオインターフェース207からコンピュータモニタ214への信号は一般に、コンピュータグラフィックスカードの出力である。いくつかの実装では、モデム216が、例えばインターフェース208内のコンピュータモジュール201内に組み込まれてもよい。コンピュータモジュール201はまた、ローカルネットワークインターフェース211を有し、これは、接続223を介して、ローカルエリアネットワーク(LAN)として知られるローカルエリア通信ネットワーク222への、コンピュータシステム200の結合を可能にする。図2Aに示すように、ローカル通信ネットワーク222は、通常、いわゆる「ファイアウォール」デバイスまたは同様の機能のデバイスを含む接続224を介してワイドネットワーク220に結合することもできる。ローカルネットワークインターフェース211は、イーサネットTM回路カード、ブルートゥースTMワイヤレス構成又はIEEE802.11ワイヤレス構成を含むことができるが、インターフェース211のために多くの他のタイプのインターフェースが実施されてもよい。ローカルネットワークインターフェース211は、また、送信機116の機能を提供することができ、受信機132および通信チャネル120はまた、ローカル通信ネットワーク222において具現化することができる。
I/Oインターフェース208および213は、シリアルコネクティビティおよびパラレルコネクティビティのいずれかまたは両方を提供することができ、前者は、典型的にはユニバーサルシリアルバス(USB)規格に従って実施され、対応するUSBコネクタ(図示せず)を有する。記憶装置209が提供され、典型的にはハードディスクドライブ(HDD)210を含む。フロッピーディスクドライブおよび磁気テープドライブ(図示せず)などの他の記憶装置も使用することができる。光ディスクドライブ212は、典型的にはデータの不揮発性ソースとして機能するために設けられる。例えば、光ディスク(例えば、CD-ROM、DVD、Blu ray DiscTM)、USB-RAM、ポータブル、外部ハードドライブ、およびフロッピーディスクなどのポータブルメモリデバイスは、コンピュータシステム200に対するデータの適切なソースとして使用することができる。典型的にはHDD210、光ドライブ212、ネットワーク220及び222のいずれかはビデオソース112として、又はディスプレイ214を介して再生するために記憶されるべき復号されたビデオデータのための宛先として動作するように構成されてもよい。システム100のソース装置110および宛先装置130は、コンピュータシステム200において具現化されてもよい。
コンピュータモジュール201の構成要素205~213は、典型的には相互接続バス204を介して、当業者に知られているコンピュータシステム200の従来の動作モードをもたらす方法で通信する。例えば、プロセッサ205は、接続218を用いてシステムバス204に結合される。同様に、メモリ206および光ディスクドライブ212は、接続219によってシステムバス204に結合される。上記の構成が実行可能なコンピュータの例には、IBM-PCおよび互換機、Sun SPARCステーション、Apple MacTMまたは同様のコンピュータシステムが含まれる。
適切または必要な場合、ビデオエンコーダ114およびビデオデコーダ134、ならびに以下で説明する方法は、コンピュータシステム200を使用して実施することができる。具体的には、ビデオエンコーダ114、ビデオデコーダ134、および説明される方法は、コンピュータシステム200内で実行可能な1つまたは複数のソフトウェアアプリケーションプログラム233として実施することができる。具体的には、ビデオエンコーダ114、ビデオデコーダ134、および説明する方法のステップは、コンピュータシステム200内で実行されるソフトウェア233内の命令231(図2B参照)によって実行される。ソフトウェア命令231は、それぞれが1つ以上の特定のタスクを実行するための1つ以上のコードモジュールとして形成されてもよい。ソフトウェアはまた、2つの別個の部分に分割されてもよく、その場合、第1の部分と対応するコードモジュールは説明される方法を実行し、第2の部分と対応するコードモジュールは、第1の部分とユーザとの間のユーザインターフェースを管理する。
ソフトウェアは例えば、以下に説明する記憶装置を含むコンピュータ可読媒体に記憶することができる。ソフトウェアは、コンピュータ可読媒体からコンピュータシステム200にロードされ、その後、コンピュータシステム200によって実行される。このようなソフトウェア又はコンピュータ可読媒体に記録されたコンピュータプログラムを有するコンピュータ可読媒体は、コンピュータプログラム製品である。コンピュータシステム200におけるコンピュータプログラム製品の使用は、ビデオエンコーダ114、ビデオデコーダ134、および説明される方法を実施するための有利な装置をもたらすことが好ましい。
ソフトウェア233は、典型的にはHDD210またはメモリ206に記憶される。ソフトウェアは、コンピュータ可読媒体からコンピュータシステム200にロードされ、コンピュータシステム200によって実行される。したがって、例えば、ソフトウェア233は、光ディスクドライブ212によって読み取られる光学的に読み取り可能なディスク記憶媒体(例えば、CD-ROM)225に記憶することができる。
場合によっては、アプリケーションプログラム233が1つ以上のCD-ROM225上で符号化されてユーザに供給され、対応するドライブ212を介して読み出されてもよく、あるいはネットワーク220または222からユーザによって読み出されてもよい。さらに、ソフトウェアは、他のコンピュータ可読媒体からコンピュータシステム200にロードすることもできる。コンピュータ可読記憶媒体は、実行および/または処理のために記録された命令および/またはデータをコンピュータシステム200に提供する任意の非一時的な有形の記憶媒体を指す。このような記憶媒体の例としては、フロッピーディスク、磁気テープ、CD-ROM、DVD、Blu-ray DiscTM、ハードディスクドライブ、ROMまたは集積回路、USBメモリ、光磁気ディスク、またはPCMCIAカードなどのコンピュータ可読カードを含み、そのような装置がコンピュータモジュール201の内部または外部であるか否かは問わない。コンピュータモジュール401へのソフトウェア、アプリケーションプログラム、命令および/またはビデオデータまたは符号化されたビデオデータの提供にも参加し得る一時的なまたは非有形のコンピュータ可読伝送媒体の例には、無線または赤外線伝送チャネル、ならびに別のコンピュータまたはネットワーク接続された装置へのネットワーク接続、ならびにウェブサイトなどに記録された電子メール伝送および情報を含むインターネットまたはイントラネットが含まれる。
アプリケーションプログラム233の第2の部分および上記の対応するコードモジュールは、ディスプレイ214上でレンダリングされるかまたは他の方法で表される1つ以上のグラフィカルユーザインタフェース(GUI)を実装するために実行されてもよい。典型的にはキーボード202およびマウス203の操作を通して、アプリケーションおよびコンピュータシステム200のユーザは機能的に適応可能な方法でインターフェースを操作し、GUIに関連するアプリケーションに制御コマンドおよび/または入力を提供することができる。スピーカ217を介して出力されるスピーチプロンプトおよびマイクロフォン280を介して入力されるユーザ音声コマンドを利用するオーディオインターフェースなど、他の形態の機能的に適応可能なユーザインターフェースを実装することもできる。
図2Bは、プロセッサ205および「メモリ」234の詳細な概略ブロック図である。メモリ234は、図2Aのコンピュータモジュール201がアクセス可能な全てのメモリモジュール(HDD209及び半導体メモリ206を含む)の論理集合体を表す。
最初にコンピュータモジュール201の電源が入ると、パワーオン自己テスト(POST)プログラム250が実行される。POSTプログラム250は、典型的には図2Aの半導体メモリ206のROM249に記憶される。ソフトウェアを記憶するROM249などのハードウェアデバイスは、ファームウェアと呼ばれることもある。POSTプログラム250は、コンピュータモジュール201内のハードウェアを検査して、適切に機能することを確認し、通常、正しい動作のために、プロセッサ205、メモリ234(209、206)、および基本入出力システムソフトウェア(BIOS)モジュール251(通常はROM249にも格納される)をチェックする。POSTプログラム250が正常に実行されると、BIOS251は、図2Aのハードディスクドライブ210を起動する。ハードディスクドライブ210を起動すると、ハードディスクドライブ210上に常駐するブートストラップローダプログラム252がプロセッサ205を介して実行される。これにより、オペレーティングシステム253がRAMメモリ206にロードされ、その上でオペレーティングシステム253が動作を開始する。オペレーティングシステム253は、プロセッサ205によって実行可能なシステムレベルアプリケーションであり、プロセッサ管理、メモリ管理、デバイス管理、ストレージ管理、ソフトウェアアプリケーションインタフェース、および汎用ユーザインタフェースを含む様々な高レベルの機能を満たす。
オペレーティングシステム253は、メモリ234(209、206)を管理して、コンピュータモジュール201上で実行される各プロセスまたはアプリケーションが別のプロセスに割り当てられたメモリと衝突することなく実行するのに十分なメモリを有することを保証する。さらに、図2Aのコンピュータシステム200で利用可能な異なるタイプのメモリは、各プロセスが効果的に実行できるように、適切に使用されなければならない。したがって、集約メモリ234は、メモリの特定のセグメントが(特に明記されていない限り)どのように割り当てられるかを示すことを意図するものではなく、むしろ、コンピュータシステム200によってアクセス可能なメモリの一般的なビューと、そのようなセグメントがどのように使用されるかを提供することを意図するものである。
図2Bに示すように、プロセッサ205は、制御部239、演算論理ユニット(ALU)240、時にはキャッシュメモリと呼ばれるローカルまたは内部メモリ248、を含む多数の機能モジュールを含む。キャッシュメモリ248は、典型的にはレジスタセクション内に多数の記憶レジスタ244~246を含む。1つ以上の内部バス241は、これらの機能モジュールを機能的に相互接続する。プロセッサ205はまた、典型的には、接続218を使用して、システムバス204を介して外部装置と通信するための1つ以上のインターフェース242を有する。メモリ234は、接続219を使用してバス204に結合される。
アプリケーションプログラム233は、条件分岐およびループ命令を含み得る命令のシーケンス231を含む。プログラム233はまた、プログラム233の実行に使用されるデータ232を含んでもよい。命令231およびデータ232は、それぞれメモリ位置228、229、230および235、236、237に格納される。命令231とメモリ位置228~230の相対的なサイズに応じて、メモリ位置230に示される命令によって示されるように、特定の命令を単一のメモリ位置に記憶することができる。あるいは、命令がメモリ位置228および229に示される命令セグメントによって示されるように、各々が別個のメモリ位置に記憶されるいくつかの部分にセグメント化されてもよい。
一般に、プロセッサ205には、その中で実行される命令のセットが与えられる。プロセッサ205は後続の入力を待ち、この入力に対してプロセッサ205は、別の命令セットを実行することによって反応する。各入力は入力装置202、203のうちの1つまたは複数によって生成されたデータ、ネットワーク220、202のうちの1つを介して外部ソースから受信されたデータ、記憶装置206、209のうちの1つから取り出されたデータ、または対応するリーダ212に挿入された記憶媒体225から取り出されたデータを含む、いくつかのソースのうちの1つまたは複数から提供することができ、すべて図2Aに示されている。命令のセットを実行すると、データが出力される場合がある。実行には、データまたは変数をメモリ234に記憶することも含まれ得る。
ビデオエンコーダ114、ビデオデコーダ134、および説明される方法は、メモリ234内の対応するメモリ位置255、256、257に格納されている入力変数254を使用することができる。ビデオエンコーダ114、ビデオデコーダ134、および説明される方法は、出力変数261を生成し、これらは、メモリ234内の対応するメモリ位置262、263、264に格納される。中間変数258は、メモリ位置259、260、266および267に格納され得る。
図2Bのプロセッサ205を参照すると、レジスタ244、245、246、演算論理ユニット(ALU)240、および制御部239は、プログラム233を構成する命令セット内のすべての命令に対して「フェッチ、デコード、および実行」サイクルを実行するのに必要なマイクロオペレーションのシーケンスを実行するために協働する。各フェッチ、デコード、および実行サイクルは
メモリ位置228、229、230から命令231をフェッチまたは読出すフェッチ動作
制御部239が、どの命令がフェッチされたかを判定するデコード動作
制御部239及び/又はALU240が命令を実行する動作を実行する
を有する。
その後、次の命令のフェッチ、デコード、および実行サイクルをさらに実行することができる。同様に、制御部239がメモリ位置232に値を格納または書き込む格納サイクルを実行することができる。
後述する図10および図11の方法における各ステップまたはサブプロセスは、プログラム233の1つまたは複数のセグメントに関連付けられ、典型的にはプロセッサ205内のレジスタセクション244、245、247、ALU240、および制御部239が協働して、プログラム233の注記されたセグメントに対する命令セット内のすべての命令に対してフェッチ、デコード、および実行サイクルを実行することによって実行される。
図3は、ビデオエンコーダ114の機能モジュールを示す概略ブロック図である。図4は、ビデオデコーダ134の機能モジュールを示す概略ブロック図である。一般に、データは、固定サイズのサブブロックへのブロックの分割などのサンプルまたは係数のグループで、または配列として、ビデオデコーダ134とビデオエンコーダ114の機能モジュールの間を通過する。ビデオエンコーダ114およびビデオデコーダ134は、図2Aおよび図2Bに示すように、汎用コンピュータシステム200を使用して実施することができ、様々な機能モジュールは、ハードディスクドライブ205上に常駐し、プロセッサ205によってその実行中に制御されるソフトウェアアプリケーションプログラム233の1つ以上のソフトウェアコードモジュールなど、コンピュータシステム200内で実行可能なソフトウェアによって、コンピュータシステム200内の専用ハードウェアによって実現することができる。あるいは、ビデオエンコーダ114およびビデオデコーダ134は、コンピュータシステム200内で実行可能なソフトウェアおよび専用ハードウェアの組合せによって実装されてもよい。ビデオエンコーダ114、ビデオデコーダ134、および説明される方法は、代替として、説明される方法の機能またはサブ機能を実行する1つまたは複数の集積回路などの専用ハードウェアで実装され得る。そのような専用ハードウェアは、グラフィック処理ユニット(GPU)、デジタルシグナルプロセッサ(DSP)、特定用途向け標準製品(ASSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または1つまたは複数のマイクロプロセッサおよび関連するメモリを含むことができる。特に、ビデオエンコーダ114は、モジュール310~386を含み、ビデオデコーダ134は、ソフトウェアアプリケーションプログラム233の1つ以上のソフトウェアコードモジュールとしてそれぞれ実装され得るモジュール420~496を含む。
図3のビデオエンコーダ114は、汎用ビデオ符号化(VVC)ビデオ符号化パイプラインの一例であるが、本明細書で説明する処理ステージを実行するために他のビデオコーデックを使用することもできる。ビデオエンコーダ114は、一連のフレームのような撮像されたフレームデータ113を受信し、各フレームは1つ以上のカラーチャネルを含む。フレームデータ113は、4:2:0クロマフォーマットまたは4:2:2クロマフォーマットであってもよい。ブロックパーティショナ310は最初に、フレームデータ113をCTUに分割し、CTUのための特定のサイズが使用されるように構成される、一般に正方形の形状である。CTUのサイズは例えば、64×64、128×128、または256×256ルマサンプルとすることができる。ブロックパーティショナ310は、ルマ符号化ツリー及びクロマ符号化ツリーに従って、各CTUを1つ以上のCBにさらに分割する。CBは様々なサイズを有し、正方形および非正方形のアスペクト比の両方を含んでもよい。図10を参照して、ブロックパーティショナ310の動作をさらに説明する。しかし、VVC規格ではCB、CU、PU、およびTUは常に2の累乗である辺長を有する。したがって、312として表される現在のCBは、ブロックパーティショナ310から出力され、CTUのクロマ符号化ツリーおよびルマ符号化ツリーに従って、CTUの1つまたは複数のブロックにわたる反復に従って進行する。CTUをCBに分割するためのオプションは、図5および図6を参照して以下でさらに説明される。
フレームデータ113の第1の分割から得られるCTUは、ラスタスキャン順序でスキャンされ、1つまたは複数の「スライス」にグループ化され得る。スライスは「イントラ」(または「I」)スライスであってもよく、イントラスライス(Iスライス)はスライス内のすべてのCUがイントラ予測されることを示す。代替的に、スライスは、単一または双予測(それぞれ、「P」または「B」スライス)であってもよく、それぞれ、スライスにおける単一および双予測のさらなる利用可能性を示す。
各CTUに対して、ビデオエンコーダ114は2段階で動作する。第1段階(「サーチ」ステージと呼ばれる)では、ブロックパーティショナ310が符号化ツリーの様々な潜在的構成をテストする。符号化ツリーの各潜在的構成は、関連する「候補」CBを有する。第1段階は、低歪で高い圧縮効率を提供するCBを選択するために様々な候補CBをテストすることを含む。このテストは一般にラグランジュ最適化を含み、それによって候補CBがレート(符号化コスト)と歪(入力フレームデータ113に関する誤差)の重み付けされた組合せに基づいて評価される。「最良の」候補CB(評価されたレート/歪みが最も低いCB)は、ビットストリーム115への後続の符号化のために選択される。候補CBの評価には、所与のエリアに対してCBを使用するか、または様々な分割オプションに従ってエリアをさらに分割し、結果として生じるより小さいエリアのそれぞれをさらなるCBで符号化するか、またはエリアをさらにさらに分割するオプションが含まれる。その結果、CBと符号化ツリー自体の両方がサーチステージで選択される。
ビデオエンコーダ114は、各CB、例えばCB312に対して、矢印320によって示される予測ブロック(PB)を生成する。PB320は、関連するCB312のコンテンツの予測である。減算器モジュール322は、PB320とCB312との間に、324(または「残差」、空間領域内にある差分を参照する)として示される差分を生成する。差分324は、PB320およびCB312における対応するサンプル間のブロックサイズの差分である。差分324は、変換され、量子化され、矢印336によって示される変換ブロック(TB)として表される。PB320および関連するTB336は典型的には例えば、評価されたコストまたは歪みに基づいて、多くの可能な候補CBのうちの1つから選択される。
候補符号化ブロック(CB)は、関連するPBおよび結果として生じる残差についてビデオエンコーダ114に利用可能な予測モードの1つから生じるCBである。各候補CBは図8を参照して後述するように、1つまたは複数の対応するTBをもたらす。TB336は、差分324の定量化され変換された表現である。ビデオデコーダ114において予測されたPBと組み合わされると、TB336は、ビットストリームにおける追加の信号を犠牲にして、復号されたCBとオリジナルのCB312との間の差分を低減する。
したがって、各候補符号化ブロック(CB)、すなわち、変換ブロック(TB)と組み合わせた予測ブロック(PB)は、関連する符号化コスト(または「レート」)および関連する差分(または「歪み」)を有する。レートは、典型的にはビット単位で測定される。CBの歪みは、典型的には絶対差の和(SAD)または二乗差の和(SSD)などのサンプル値の差分として推定される。各候補PBから得られる推定は、差分324を使用してモード選択器386によって決定され、イントラ予測モード(矢印388によって表される)を決定する。各候補予測モードと対応する残差符号化に関連する符号化コストの推定は、残差のエントロピー符号化よりもかなり低いコストで実行できる。従って、レート歪み検知における最適モードを決定するために、多数の候補モードを評価することができる。
レート歪みの観点から最適モードの決定は、典型的にはラグランジュ最適化の変形を用いて達成される。イントラ予測モード388の選択は、典型的には特定のイントラ予測モードの適用から生じる残差データのための符号化コストを決定することを含む。符号化コストは「絶対変換差の和」(SATD)を使用することによって近似することができ、それによって、アダマール変換などの比較的単純な変換を使用して、推定された変換残差コストを得る。比較的単純な変換を使用するいくつかの実施形態では、単純化された推定方法から得られるコストがさもなければ完全な評価から決定されるのであろう実際のコストに単調に関係する。単調に関連する推定コストを有する実施形態では、単純化された推定方法を使用して、ビデオエンコーダ114の複雑さを低減しながら、同じ決定(すなわち、イントラ予測モード)を行うことができる。推定されたコストと実際のコストとの間の関係における可能な非単調性を可能にするために、簡略化された推定方法を使用して、最良の候補のリストを生成することができる。非単調性は例えば、残差データの符号化に利用可能なさらなるモード決定から生じ得る。最良の候補のリストは、任意の数であってもよい。最良の候補を使用して、より完全な探索を実行して、候補のそれぞれについて残差データを符号化するための最適モード選択を確立することができ、他のモード決定と共にイントラ予測モードの最終選択を可能にする。
他のモード決定は、「変換スキップ」として知られる順方向変換をスキップする能力を含む。変換をスキップすることは、変換基底関数としての表現を介して符号化コストを低減するための適切な相関を欠く残差データに適している。比較的単純なコンピュータ生成グラフィックスのような特定のタイプのコンテンツは、同様の挙動を示すことがある。「スキップされた変換」の場合、変換自体が実行されなくても、残差係数は依然として符号化される。
ラグランジュ処理または類似の最適化処理を採用して、CTUのCBへの最適分割(ブロックパーティショナ310による)と、複数の可能性からの最良の予測モードの選択の両方を選択することができる。モード選択モジュール386における候補モードのラグランジュ最適化プロセスの適用を通して、最低コスト測定を有するイントラ予測モードが「最良」のモードとして選択される。最低コストのモードは、選択されたイントラ予測モード388であり、エントロピーエンコーダ338によってビットストリーム115に符号化される。モード選択モジュール386の動作によるイントラ予測モード388の選択は、ブロックパーティショナ310の動作に拡張する。例えば、イントラ予測モード388の選択のための候補は、所与のブロックに適用可能なモードと、さらに、所与のブロックと一緒に集合的に配置される複数のより小さいブロックに適用可能なモードとを含むことができる。所与のブロックおよびより小さいコロケートされたブロックに適用可能なモードを含む場合、候補を暗黙的に選択するプロセスは、CTUのCBへの最良の階層分解を決定するプロセスでもある。
ビデオエンコーダ114の動作の第2段階(「符号化」ステージと呼ばれる)では、選択されたルマ符号化ツリーおよび選択されたクロマ符号化ツリー、したがって選択された各CBに対する反復がビデオエンコーダ114内で実行される。反復では、CBが本明細書でさらに説明するように、ビットストリーム115に符号化される。
エントロピーエンコーダ338は、構文要素の可変長符号化と構文要素の算術符号化の両方をサポートする。算術符号化は、コンテキスト適応2進算術符号化処理を使用してサポートされる。算術的に符号化された構文要素は1つ以上の’bins’のシーケンスからなる。ビンはビットと同様に、「0」または「1」の値を持つ。しかし、ビンはビットストリーム115内で離散ビットとして符号化されていない。ビンは、「コンテキスト」として知られる、関連する予測(または「可能性」または「最も可能性のある」)値および関連する確率を有する。符号化される実際のビンが予測値と一致するとき、「最確シンボル」(MPS)が符号化される。最も確率の高いシンボルを符号化することは、消費されるビットに関して比較的安価である。符号化されるべき実際のビンがありそうな値と一致しない場合、「最低確率シンボル」(LPS)が符号化される。最低確率シンボルを符号化することは、消費されるビットに関して比較的高いコストを有する。ビン符号化技術は、「0」対「1」の確率がスキューされるビンの効率的な符号化を可能にする。2つの可能な値(すなわちflag)を持つ構文要素に対しては、単一のビンで十分である。可能な値が多い構文要素の場合は、一連のビンが必要である。
シーケンス中の後のビンの存在は、シーケンス中の前のビンの値に基づいて決定されてもよい。さらに、各ビンは、2つ以上のコンテキストに関連付けることができる。特定のコンテキストの選択は構文要素の以前のビン、隣接する構文要素のビン値(すなわち、隣接するブロックからのもの)などに依存することができる。コンテキスト符号化ビンが符号化されるたびに、そのビンに対して選択されたコンテキスト(もしあれば)は、新しいビン値を反映する方法で更新される。このように、2進算術符号化方式は適応型であると言われている。
また、ビデオエンコーダ114によってサポートされるのは、コンテキストを欠くビン(「バイパスビン」)である。バイパスビンは、「0」と「1」との間の等確率分布を仮定して符号化される。したがって、各ビンは、ビットストリーム115内の1ビットを占有する。コンテキストがないと、メモリが節約され、複雑さが軽減される。したがって、特定のビンの値の分布が偏っていない場合は、バイパスビンが使用される。コンテキストおよび適応を使用するエントロピーコーダの一例はCABAC(コンテキスト適応バイナリ算術コーダ)として当技術分野で知られており、このコーダの多くの変形がビデオ符号化に使用されている。
エントロピーエンコーダ338は、コンテキスト符号化ビンとバイパス符号化ビンとの組合せを使用してイントラ予測モード388を符号化する。典型的には、「最確モード」のリストがビデオエンコーダ114において生成される。最も確率の高いモードのリストは典型的には3つまたは6つのモードのような固定長であり、以前のブロックで遭遇したモードを含むことができる。コンテキスト符号化ビンは、イントラ予測モードが最も確率の高いモードの1つかどうかを示すフラグを符号化する。イントラ予測モード388が最も確率の高いモードのうちの1つである場合、バイパス符号化されたビンを使用するさらなるシグナリングが符号化される。符号化されたさらなるシグナリングは例えば、切り捨てられた単項ビンストリングを使用して、どの最も確率の高いモードがイントラ予測モード388に対応するかを示す。そうでない場合、イントラ予測モード388は、「残りのモード」として符号化される。残りのモードとしての符号化は、バイパス符号化されたビンを使用しても符号化される固定長符号などの代替構文を使用して、最も確率の高いモードリストに存在するもの以外のイントラ予測モードを表現する。
マルチプレクサモジュール384は、決定された最良のイントラ予測モード388に従ってPB320を出力し、各候補CBのテストされた予測モードから選択する。候補予測モードは、ビデオエンコーダ114によってサポートされるすべての考えられる予測モードを含む必要はない。
予測モードは大きく二つのカテゴリーに分類される。第1のカテゴリは、「イントラフレーム予測」(「イントラ予測」とも呼ばれる)である。イントラフレーム予測では、ブロックに対する予測が生成され、生成方法は現在のフレームから得られた他のサンプルを使用してもよい。イントラ予測されたPBの場合、異なるイントラ予測モードがルマおよびクロマのために使用されることが可能であり、したがって、イントラ予測は主に、PB上での動作に関して説明される。
予測モードの第2のカテゴリは、「インターフレーム予測」(「インター予測」とも呼ばれる)である。インターフレーム予測では、ブロックの予測がビットストリーム内のフレームを符号化する順序で現在のフレームに先行する1つまたは2つのフレームからのサンプルを使用して生成される。さらに、インターフレーム予測のために、単一の符号化ツリーが典型的には、ルマチャネルおよびクロマチャネルの両方について使用される。ビットストリーム内のフレームの符号化順は、キャプチャまたは表示時のフレームの順序とは異なる場合がある。1つのフレームが予測に使用される場合、ブロックは「単一予測」であると言われ、1つの関連する動きベクトルを有する。2つのフレームが予測に使用される場合、ブロックは「双予測」されると言われ、2つの関連する動きベクトルを有する。Pスライスの場合、各CUは、イントラ予測または単一予測され得る。Bスライスの場合、各CUは、イントラ予測、単一予測、または双予測され得る。フレームは、典型的にはフレームの時間的階層を可能にする「ピクチャのグループ」構造を使用して符号化される。フレームの時間的階層は、フレームがフレームを表示する順序で、先行するピクチャおよび後続するピクチャを参照することを可能にする。画像は、各フレームを復号するための依存関係が満たされていることを確認するために必要な順序で符号化される。
インター予測のサブカテゴリは、「スキップモード」と呼ばれる。インター予測およびスキップモードは、2つの別個のモードとして説明される。しかしながら、インター予測モード及びスキップモードの両方は、先行するフレームからのサンプルのブロックを参照する動きベクトルを含む。インター予測は符号化された動きベクトルデルタを含み、動きベクトル予測子に対する動きベクトルを指定する。動きベクトル予測子は、「マージインデックス」で選択された1つ以上の候補動きベクトルのリストから得られる。符号化された動きベクトルデルタは、選択された動きベクトル予測に空間オフセットを提供する。また、インター予測は、ビットストリーム133内の符号化された残差を使用する。スキップモードは、インデックス(「マージインデックス」とも呼ばれる)のみを使用して、いくつかの動きベクトル候補のうちの1つを選択する。選択された候補は、さらなるシグナリングなしに使用される。また、スキップモードは、残差係数の符号化をサポートしない。スキップモードが使用されるとき、符号化された残差係数がないことは、スキップモードのための変換を実行する必要がないことを意味する。したがって、スキップモードは、典型的にはパイプライン処理問題を生じない。パイプライン処理問題は、イントラ予測CUおよびインター予測CUの場合であり得る。スキップモードの限定されたシグナリングのために、スキップモードは比較的高品質の参照フレームが利用可能であるときに、非常に高い圧縮性能を達成するために有用である。ランダムアクセスピクチャグループ構造のより高い時間レイヤにおける双予測CUは、典型的には基礎となる動きを正確に反映する高品質の参照ピクチャおよび動きベクトル候補を有する。
サンプルは、動きベクトルおよび参照ピクチャインデックスに従って選択される。動きベクトルおよび参照ピクチャインデックスは、すべてのカラーチャネルに適用され、したがって、インター予測は主に、PBではなくPU上での動作に関して説明される。各カテゴリー内(すなわち、イントラおよびインターフレーム予測)では、PUを生成するために異なる技法を適用することができる。例えば、イントラ予測は、所定のフィルタリング及び生成処理に従ってPUを生成する方向と組み合わせて、以前に再構成されたサンプルの隣接する行及び列からの値を使用することができる。あるいは、PUが少数のパラメータを使用して記述されてもよい。インター予測法は、動きパラメータの数とその精度で変わる可能性がある。動きパラメータは通常、参照フレームのリストからのどの参照フレームが使用されるべきかを示す参照フレームインデックスと、参照フレームの各々のための空間変換とを含むが、より多くのフレーム、特別なフレーム、またはスケーリングおよび回転などの複雑なアフィンパラメータを含むことができる。さらに、参照サンプルブロックに基づいて高密度動き推定を生成するために、所定の動き精緻化処理を適用することができる。
PB320を決定し、選択し、減算器322で元のサンプルブロックからPB320を減算すると、符号化コストが最も低い、324で表される残差が得られ、非可逆圧縮を受ける。非可逆圧縮プロセスは、変換、量子化、およびエントロピー符号化のステップを含む。順方向一次変換モジュール326は、差分324に順方向変換を適用し、差分324を空間領域から周波数領域に変換し、矢印328によって表される一次変換係数を生成する。一次変換係数328は、順方向二次変換モジュール330に渡され、非分離二次変換(NSST)動作を実行することによって、矢印332によって表される変換係数を生成する。順方向一次変換は典型的には分離可能であり、典型的にはDCT-2を使用して、行のセット、次いで各ブロックの列のセットを変換するが、DST-7およびDCT-8も、例えば、16サンプルを超えないブロック幅については水平方向に、16サンプルを超えないブロック高さについては垂直方向に利用可能であり得る。行および列の各セットの変換は、最初にブロックの各行に1次元変換を適用して部分結果を生成し、次に部分結果の各列に1次元変換を適用して最終結果を生成することによって実行される。順方向二次変換は一般に、分離不可能な変換であり、これは、イントラ予測されたCUの残差に対してのみ適用され、それにもかかわらず、バイパスされてもよい。順方向二次変換は、16個のサンプル(1次変換係数328の左上4×4サブブロックとして配置される)または64個のサンプル(1次変換係数328の4つの4×4サブブロックとして配置される、左上8×8係数として配置される)のいずれかで動作する。更に、順方向二次変換の行列係数は、使用のために2組の係数が利用できるように、CUのイントラ予測モードに従って複数のセットから選択される。行列係数のセットの1つ、または順方向二次変換のバイパスを使用することは、「nsst_index」のシンタックス要素でシグナリングされ、切り捨てられた単項二値化(a truncated unary binarisation)を使って、値ゼロ(二次変換は適用されない)、1つ(選択された行列係数の第1セット)、または2つ(選択された行列係数の第2セット)を表すように符号化されている。
変換係数332は、量子化器モジュール334に渡される。モジュール334では、「量子化パラメータ」による量子化が実行され、矢印336によって表される残差係数が生成される。量子化パラメータは所与のTBについて一定であり、したがって、TBについての残差係数の生成のための均一なスケーリングをもたらす。「量子化行列」を適用することによって、不均一なスケーリングも可能であり、それによって、各残差係数に適用されるスケーリング係数は、量子化パラメータと、典型的にはTBのサイズに等しいサイズを有するスケーリング行列内の対応するエントリとの組合せから導出される。残差係数336は、ビットストリーム115における符号化のためにエントロピーエンコーダ338に供給される。典型的には、TUの少なくとも1つの有意な残差係数を有する各TBの残差係数がスキャンパターンに従って、値の順序付けられたリストを生成するためにスキャンされる。スキャンパターンは一般に、4×4「サブブロック」のシーケンスとしてTBをスキャンし、残差係数の4×4セットの粒度で規則的なスキャン動作を提供し、サブブロックの配置は、TBのサイズに依存する。さらに、予測モード388および対応するブロック分割もビットストリーム115に符号化される。
上述したように、ビデオエンコーダ114は、ビデオデコーダ134に見られるフレーム表現に対応するフレーム表現にアクセスする必要がある。従って、残差係数336も逆量子化器モジュール340によって逆量子化され、矢印342によって表される逆変換係数を生成する。逆変換係数342は、逆二次変換モジュール344を通過して、矢印346で表される中間逆変換係数を生成する。中間逆変換係数346は、TUの矢印350によって表される残差サンプルを生成するために、逆一次変換モジュール348に渡される。逆二次変換モジュール344によって実行される逆変換のタイプは、順方向二次変換モジュール330によって実行される順変換のタイプに対応する。逆一次変換モジュール348によって実行される逆変換のタイプは、一次変換モジュール326によって実行される一次変換のタイプに対応する。加算モジュール352は、残差サンプル350とPU320とを加算して、CUの再構成サンプル(矢印354によって示される)を生成する。
再構成されたサンプル354は、参照サンプルキャッシュ356およびループ内フィルタモジュール368に渡される。参照サンプルキャッシュ356は、通常ASIC上のスタティックRAMを使用して実現され(したがって、コストのかかるオフチップメモリアクセスを回避する)、フレーム内の後続のCUのためのフレーム内PBを生成するための依存関係を満たすために必要な最小限のサンプル記憶装置を提供する。最小依存関係は、典型的にはCTUの行の最下部に沿ったサンプルの「ラインバッファ」を含み、CTUの次の行および列バッファリングによって使用され、その範囲はCTUの高さによって設定される。参照サンプルキャッシュ356は、参照サンプルフィルタ360に参照サンプル(矢印358で示す)を供給する。サンプルフィルタ360は、平滑化演算を適用して、フィルタリングされた参照サンプル(矢印362によって示される)を生成する。フィルタリングされた参照サンプル362は、イントラフレーム予測モジュール364によって使用され、矢印366によって表されるサンプルのイントラ予測ブロックを生成する。各候補イントラ予測モードについて、イントラフレーム予測モジュール364は、サンプルのブロック、すなわち366を生成する。
ループ内フィルタモジュール368は、再構成されたサンプル354にいくつかのフィルタリング段階を適用する。フィルタリング段階は、不連続性から生じるアーチファクトを低減するために、CU境界に整列された平滑化を適用する「デブロッキングフィルタ」(DBF)を含む。インループフィルタモジュール368に存在する別のフィルタリング段階は、「適応ループフィルタ」(ALF)であり、これは、歪みをさらに低減するためにウィナーベースの適応フィルタを適用する。ループ内フィルタモジュール368における更なる利用可能なフィルタリング段階は、「サンプル適応オフセット」(SAO)フィルタである。SAOフィルタは最初に、再構成されたサンプルを1つまたは複数のカテゴリに分類し、割り当てられたカテゴリに従って、サンプルレベルでオフセットを適用することによって動作する。
矢印370で表されるフィルタリングされたサンプルは、ループ内フィルタモジュール368から出力される。フィルタリングされたサンプル370は、フレームバッファ372に記憶される。フレームバッファ372は、典型的には、いくつかの(例えば、16までの)ピクチャを格納するための容量を有し、従って、メモリ206に格納される。フレームバッファ372は、大きなメモリ消費が要求されるため、通常、オンチップメモリを使用して記憶されない。したがって、フレームバッファ372へのアクセスは、メモリ帯域幅に関してコストがかかる。フレームバッファ372は、参照フレーム(矢印374によって表される)を動き推定モジュール376および動き補償モジュール380に提供する。
動き推定モジュール376は、いくつかの「動きベクトル」(378として示される)を推定し、各々は現在のCBの位置からのデカルト空間オフセットであり、フレームバッファ372内の参照フレームのうちの1つ内のブロックを参照する。参照サンプルのフィルタリングされたブロック(382として表される)は、各動きベクトルに対して生成される。フィルタリングされた参照サンプル382は、モードセレクタ386による潜在的な選択に利用可能なさらなる候補モードを形成する。さらに、所与のCUについて、PU320は、1つの参照ブロック(「単一予測」)を使用して形成されてもよく、または2つの参照ブロック(「双予測」)を使用して形成されてもよい。選択された動きベクトルに対して、動き補償モジュール380は、動きベクトル内のサブピクセル精度をサポートするフィルタリング処理に従って、PB320を生成する。したがって、動き推定モジュール376(多くの候補動きベクトルに対して動作する)は、計算の複雑さを低減するために、動き補償モジュール380(選択された候補のみに対して動作する)のそれと比較して、単純化されたフィルタリング処理を実行することができる。
図3のビデオエンコーダ114は汎用ビデオ符号化(VVC)を参照して説明されるが、他のビデオ符号化規格または実装はモジュール310~386の処理段階を使用することもできる。フレームデータ113(およびビットストリーム115)は、メモリ206、ハードディスクドライブ210、CD-ROM、Blu-rayディスクTM、または他のコンピュータ可読記憶媒体から読み取る(または書き込む)こともできる。さらに、フレームデータ113(およびビットストリーム115)は、通信ネットワーク220または無線周波数受信機に接続されたサーバなどの外部ソースから受信(または送信)されてもよい。
ビデオデコーダ134を図4に示す。図4のビデオデコーダ134は、汎用ビデオコーディング(VVC)ビデオデコーディングパイプラインの一例であるが、他のビデオコーデックを使用して、本明細書で説明する処理段階を実行することもできる。図4に示すように、ビットストリーム133はビデオデコーダ134に入力される。ビットストリーム133は、メモリ206、ハードディスクドライブ210、CD-ROM、Blu-rayディスクTM、または他の一時的でないコンピュータ可読記憶媒体から読み取ることができる。あるいは、ビットストリーム133が通信ネットワーク220または無線周波数受信機に接続されたサーバなどの外部ソースから受信されてもよい。ビットストリーム133は、復号される撮像フレームデータを表す符号化されたシンタックス要素を含む。
ビットストリーム133は、エントロピーデコーダモジュール420に入力される。エントロピーデコーダモジュール420は、「bins」のシーケンスを復号することによってビットストリーム133からシンタックス要素を抽出し、そのシンタックス要素の値をビデオデコーダ134内の他のモジュールに渡す。エントロピーデコーダモジュール420は、演算デコーディングエンジンを使用して、各シンタックス要素を1つ以上のビンのシーケンスとして復号する。各ビンは、ビンの「1」と「0」の値を符号化するために使用される確率レベルを記述するコンテキストと共に、一つ以上の「コンテキスト」を使用することができる。所与のビンに対して複数のコンテキストが利用可能な場合、「コンテキストモデリング」または「コンテキスト選択」ステップが、ビンを復号するために利用可能なコンテキストの1つを選択するために実行される。ビンを復号するプロセスは、順次フィードバックループを形成する。フィードバックループにおける動作の数は、エントロピーデコーダ420がビン/秒で高いスループットを達成することを可能にするために最小化されることが好ましい。コンテキストモデリングはコンテキスト、すなわち、現在のビンの前のプロパティを選択するときに、ビデオデコーダ134に知られているビットストリームの他のプロパティに依存する。例えば、コンテキストは、符号化ツリー内の現在のCUの四分木深さに基づいて選択され得る。依存性は、ビンを復号する前によく知られている特性に基づくか、または長い順次処理を必要とせずに決定されることが好ましい。符号化ツリーの四分木深さは、容易に知られているコンテキストモデリングに対する依存性の一例である。イントラ予測モードは、決定するのが比較的困難または計算集約的であるコンテキストモデリングのための依存性の一例である。イントラ予測モードは、「最も確率の高いモード(most probable modes)」(MPM)のリストへのインデックスまたは「残りのモード」のリストへのインデックスのいずれかとして符号化され、MPMと残りのモードの間の選択は復号された「intra_luma_mpm_flag」に従っている。MPMが使用されている場合、「intra_luma_mpm_idx」シンタックス要素が復号され、最も確率の高いモードのうちどれを使用するのかを選択する。一般に、6つのMPMがある。残りのモードが使用されている場合、「intra_luma_remainder」シンタックス要素が復号され、残りの(非MPM)モードのどれを使用するかを選択する。最も確率の高いモードと残りのモードの両方を決定することは、かなりの数の動作を必要とし、隣接ブロックのイントラ予測モードへの依存性を含む。例えば、隣接ブロックは、現在のブロックの左上のブロックであってもよい。望ましくは、各CUのビンのコンテキストが、シグナリングされているイントラ予測モードを知ることなく、算術符号化エンジンによる構文解析を可能にして、決定することができる。したがって、逐次ビン復号のための算術符号化エンジンに存在するフィードバックループは、イントラ予測モードへの依存性を回避する。イントラ予測モード決定は、隣接ブロックのイントラ予測モードに対するMPMリスト構成の依存性のために、別個のフィードバックループを用いて、後続の処理ステージに延期され得る。したがって、エントロピーデコーダモジュール420の演算デコードエンジンは、以前の(例えば、隣接する)ブロックのイントラ予測モードを知る必要なく、intra_luma_mpm_flag、intra_luma_mpm_idx、intra_luma_remainderを構文解析することができる。エントロピーデコーダモジュール420は、ビットストリーム133からシンタックス要素を復号するために、算術符号化アルゴリズム、例えば「コンテキスト適応2進算術符号化」(CABAC)を適用する。復号されたシンタックス要素は、ビデオデコーダ134内のパラメータを再構成するために使用される。パラメータは、残差係数(矢印424によって表される)と、イントラ予測モード(矢印458によって表される)などのモード選択情報とを含む。モード選択情報は、動きベクトル、および各CTUの1つまたは複数のCBへの分割などの情報も含む。パラメータは、典型的には以前に復号されたCBからのサンプルデータと組み合わせて、PBを生成するために使用される。
残差係数424は、逆量子化モジュール428に入力される。逆量子化モジュール428は、残差係数424に対して逆量子化(または「スケーリング」)を実行して、量子化パラメータに従って、矢印432によって表される再構成された中間変換係数を生成する。再構成された中間変換係数432は、復号された「nsst_index」シンタックス要素に従って、二次変換が適用されるか、または演算(バイパス)されない逆二次変換モジュール436に渡される。「nsst_index」は、プロセッサ205の実行の下で、エントロピーデコーダ420によってビットストリーム133から復号される。図3を参照して説明されるように、「nsst_index」は、ビットストリーム133から、ゼロから2の値を有する切り捨てられた単項シンタックス要素として復号される。逆二次変換モジュール436は、再構成された変換係数440を生成する。不均一な逆量子化行列の使用がビットストリーム133に示される場合、ビデオデコーダ134は、スケーリングファクタのシーケンスとしてビットストリーム133から量子化行列を読み出し、スケーリングファクタを行列に配置する。逆スケーリングは、量子化パラメータと組み合わせて量子化行列を使用して、再構成された中間変換係数432を生成する。
再構成された変換係数440は、逆一次変換モジュール444に渡される。モジュール444は、係数を周波数領域から空間領域に戻すように変換する。TBは、有効残差係数値および非有効残差係数値に事実上基づいている。モジュール444の動作の結果は、矢印448によって表される残差サンプルのブロックである。残差サンプル448は、対応するCUとサイズが等しい。残差サンプル448は、加算モジュール450に供給される。加算モジュール450において、残差サンプル448は、復号されたPB(452として表される)に加算されて、矢印456によって表される再構成されたサンプルのブロックを生成する。再構成サンプル456は、再構成サンプルキャッシュ460およびループ内フィルタリングモジュール488に供給される。ループ内フィルタリングモジュール488は、492として表されるフレームサンプルの再構成されたブロックを生成する。フレームサンプル492は、フレームバッファ496に書き込まれる。
再構成サンプルキャッシュ460は、ビデオエンコーダ114の再構成サンプルキャッシュ356と同様に動作する。再構成されたサンプルキャッシュ460は(例えば、典型的には、オンチップメモリであるデータ232を代わりに使用することによって)メモリ206を介さずに後続のCBをイントラ予測するために必要とされる再構成されたサンプルのための記憶装置を提供する。矢印464によって表される参照サンプルは、再構成サンプルキャッシュ460から得られ、参照サンプルフィルタ468に供給されて、矢印472によって示されるフィルタリングされた参照サンプルを生成する。フィルタリングされた参照サンプル472は、イントラフレーム予測モジュール476に供給される。モジュール476は、ビットストリーム133でシグナリングされ、エントロピーデコーダ420によって復号されたイントラ予測モードパラメータ458に従って、矢印480によって表されるイントラ予測サンプルのブロックを生成する。
CBの予測モードがビットストリーム133におけるイントラ予測であることが示されていると、イントラ予測サンプル480は、マルチプレクサモジュール484を介して復号PB452を形成する。イントラ予測は、サンプルの予測ブロック(PB)、すなわち、同じ色成分内の「隣接サンプル」を使用して導出された1つの色成分内のブロックを生成する。隣接するサンプルは、現在のブロックに隣接するサンプルであり、ブロック復号順序において先行することにより、既に再構成されている。ルマおよびクロマブロックが並置される場合、ルマおよびクロマブロックは、異なるイントラ予測モードを使用することができる。しかしながら、2つのクロマチャネルはそれぞれ、同じイントラ予測モードを共有する。イントラ予測は、3つのタイプに分類される。「DCイントラ予測」は、隣接するサンプルの平均を表す単一の値でPBをポピュレートすることを含む。「プレーンイントラ予測(Planar intra prediction)」は、隣接するサンプルから導出されるDCオフセットおよび垂直および水平勾配で、プレーンに従うサンプルでPBをポピュレートすることを含む。「角度イントラ予測(Angular intra prediction)」は、フィルタリングされ、PBを横切って特定の方向(または「角度」)に伝播される隣接するサンプルでPBをポピュレートすることを含む。VVC65では、正方形ブロックでは使用できない追加の角度を使用できる矩形ブロックで角度がサポートされ、合計87の角度が生成される。第4のタイプのイントラ予測は、クロマPBに利用可能であり、それによって、PBは、「クロス構成要素線形モデル」(CCLM)モードに従って、並置されたルマ再構成サンプルから生成される。3つの異なるCCLMモードが利用可能であり、その各々は、隣接するルマ及びクロマサンプルから導出された異なるモデルを使用する。次いで、導出されたモデルを使用して、コロケートされたルマサンプルからクロマPBのサンプルのブロックを生成する。
CBの予測モードがビットストリーム133におけるインター予測であることが示されていると、動き補償モジュール434は、フレームバッファ496からサンプルのブロックを選択し、フィルタリングするために、動きベクトルおよび参照フレームインデックスを使用して、438として表されるインター予測サンプルのブロックを生成する。サンプル498のブロックは、フレームバッファ496に記憶された以前に復号されたフレームから得られる。双方向予測の場合、2つのサンプルのブロックが生成され、一緒にブレンドされて、復号されたPB452のためのサンプルが生成される。フレームバッファ496には、ループ内フィルタリングモジュール488からのフィルタリングされたブロックデータ492でポピュレートされる。ビデオエンコーダ114のループ内フィルタリングモジュール368と同様に、ループ内フィルタリングモジュール488は、DBF、ALF、およびSAOフィルタリング動作のいずれか、少なくとも、またはすべてを適用する。一般に、動きベクトルは、ルマチャネルとクロマチャネルの両方に適用されるが、サブサンプル補間ルマチャネルおよびクロマチャネルのフィルタリング処理は異なる。符号化ツリーにおける分割が比較的小さなルマブロックの集合をもたらし、対応するクロマ領域が対応する小さなクロマブロックに分割されない場合、ブロックは図13および図14をそれぞれ参照して説明されるように、符号化され、復号される。特に、いずれかの小さなルマブロックがインター予測を使用して予測される場合、インター予測動作は、ルマCBに対してのみ実行され、対応するクロマCBのいずれの部分に対しても実行されない。ループ内フィルタリングモジュール368は、再構成されたサンプル456からフィルタリングされたブロックデータ492を生成する。
図5は、汎用ビデオ符号化のツリー構造内の1つまたは複数のサブ領域への領域の利用可能な分割(divisions)または分割(splits)の集合500を示す概略ブロック図である。集合500に示される分割(divisions)は、図3を参照して説明されるように、ラグランジュ最適化によって決定されるように、符号化ツリーに従って各CTUを1つまたは複数のCUまたはCBに分割するために、エンコーダ114のブロックパーティショナ310に利用可能である。
集合500は、正方形領域のみが他の、おそらくは正方形でないサブ領域に分割されていることを示すが、図500は潜在的な分割を示しているが、包含領域が正方形であることを必要としないことを理解されたい。含有領域が非正方形の場合、分割から生じるブロックの寸法は含有ブロックの縦横比に従ってスケールされる。領域がそれ以上分割されなくなると、すなわち、符号化ツリーのリーフノードにおいて、CUがその領域を占有する。ブロックパーティショナ310によるCTUの1つまたは複数のCUへの特定のサブ分割は、CTUの「符号化ツリー」と呼ばれる。
領域をサブ領域にサブ分割するプロセスは、結果として生じるサブ領域が最小CUサイズに達したときに終了しなければならない。所定の最小サイズ、例えば、16サンプルより小さいブロック領域を禁止するようにCUを制約することに加えて、CUは、4の最小幅または高さを有するように制約される。幅および高さの両方に関して、または幅または高さに関して、他の最小値も可能である。サブ分割のプロセスは、最も深いレベルの分解の前に終了することもでき、その結果、CUが最小CUサイズよりも大きくなる。分割が起こらず、その結果、単一のCUがCTUの全体を占有することが可能である。CTUの全体を占有する単一のCUは、最大の利用可能な符号化ユニットサイズである。また、分割が発生しないCUは、処理領域サイズよりも大きい。符号化ツリーの最高レベルでの2分割または3分割の結果として、64×128、128×64、32×128、および128×32などのCUサイズが可能であり、それぞれも処理領域サイズより大きい。図10A~10Fを参照してさらに説明される処理領域サイズよりも大きいCUSの例。4:2:0などのサブサンプリングされたクロマフォーマットの使用により、ビデオエンコーダ114およびビデオデコーダ134の構成は、ルマチャネルにおけるよりも早くクロマチャネルにおける領域の分割を終了させることができる。
符号化ツリーのリーフノードには、それ以上のサブ分割のないCUが存在する。例えば、リーフノード510は、1つのCUを含む。符号化ツリーの非リーフノードには、2つ以上のさらなるノードへの分割が存在し、各ノードはリーフノード従って1つのCUを含むか、またはより小さな領域へのさらなる分割を含むことができる。符号化ツリーの各リーフノードにおいて、各カラーチャネルに対して1つの符号化ブロックが存在する。ルマおよびクロマの両方について同じ深さで終端する分割は、3つの並置されたCBをもたらす。クロマよりも深いルマの深さで終端する分割は、複数のルマCBがクロマチャネルのCBと並置されることになる。
四分木分割512は図5に示すように、包含領域を4つの等しいサイズの領域に分割する。HEVCと比較して、汎用ビデオ符号化(VVC)は、水平2分割514および垂直2分割516を追加することにより、さらなる柔軟性を達成する。分割514および516の各々は、包含領域を2つの等しいサイズの領域に分割する。分割は、含有ブロック内の水平境界(514)または垂直境界(516)に沿っている。
水平3分割518および垂直3分割520を追加することにより、汎用ビデオ符号化においてさらなる柔軟性が達成される。3分割518および520は、ブロックを、包含領域の幅または高さの1/4および3/4に沿って水平方向(518)または垂直方向(520)のいずれかで境界をつけられた3つの領域に分割する。4分木、2分木、および3分木の組合せは、「QTBTTT」と呼ばれる。ツリーのルートには、ゼロ個以上の四分木分割(ツリーの「QT」セクション)が含まれる。QTセクションが終了すると、ゼロまたはそれ以上の2分割または3分割(ツリーの「マルチツリー」または「MT」セクション)が発生し、最終的にツリーのリーフノードのCBまたはCUで終了する。ツリーがすべてのカラーチャネルを記述する場合、ツリーリーフノードはCUである。ツリーがルマチャネルまたはクロマチャネルを記述する場合、ツリーリーフノードはCBである。
4分木のみをサポートし、したがって正方形ブロックのみをサポートするHEVCと比較して、QTBTTTは、特に2分木および/または3分木分割の可能な再帰的適用を考慮すると、より多くの可能なCUサイズをもたらす。異常な(正方形でない)ブロックサイズの可能性は、ブロック幅または高さが4サンプル未満であるか、または4サンプルの倍数ではないかのいずれかになる分割を排除するように分割オプションを制約することによって低減することができる。一般に、この制約は、ルマサンプルを考慮する際に適用される。しかしながら、説明した構成では、制約がクロマチャネル用のブロックに別々に適用することができる。クロマチャネルに対する分割オプションへの制約の適用は、フレームデータが4:2:0クロマフォーマットまたは4:2:2クロマフォーマットの場合など、ルマとクロマで最小ブロックサイズが異なり得る。各分割では、この包含領域に関して辺寸法が変わらない、半分になっている、または1/4になっているサブ領域が生成される。そして、CTUサイズは2のべき乗であるため、全てのCUの辺寸法も2のべき乗である。
図6は、汎用ビデオ符号化で使用されるQTBTTT(または「符号化ツリー」)構造のデータフロー600を示す概略フロー図である。QTBTTT構造は、CTUを1つまたは複数のCUに分割することを定義するために、各CTUに対して使用される。各CTUのQTBTTT構造は、ビデオエンコーダ114内のブロックパーティショナ310によって決定され、ビットストリーム115に符号化されるか、またはビデオデコーダ134内のエントロピーデコーダ420によってビットストリーム133から復号される。データフロー600はさらに、図5に示される分割に従って、CTUを1つまたは複数のCUに分割するためにブロックパーティショナ310に利用可能な許容可能な組合せを特徴付ける。
階層の最上位レベル、すなわちCTUから始めて、ゼロまたはそれ以上の四分木分割が最初に実行される。具体的には、四分木(QT)分割決定610がブロックパーティショナ310によって行われる。「1」シンボルを返す610での決定は、四分木分割512に従って現在のノードを4つのサブノードに分割する決定を示す。その結果、620などの、4つの新しいノードが生成され、各新しいノードについて、QT分割決定610に戻る。各新しいノードは、ラスタ(またはZスキャン)順序で考慮される。あるいは、QT分割決定610がさらなる分割が実行されるべきでないことを示す(「0」シンボルを返す)場合、四分木分割は停止し、マルチツリー(MT)分割がその後考慮される。
まず、MT分割決定612がブロックパーティショナ310によって行われる。612において、MT分割を実行する決定が示される。決定612で「0」のシンボルを返すことは、ノードのサブノードへのそれ以上の分割が実行されないことを示す。ノードのそれ以上の分割が実行されない場合、ノードは符号化ツリーのリーフノードであり、CUに対応する。リーフノードは622で出力される。あるいは、MT分割612がMT分割を実行する決定を示す(「1」シンボルを返す)場合、ブロックパーティショナ310は方向決定614に進む。
方向決定614は、水平(「H」または「0」)または垂直(「V」または「1」)のいずれかとしてMT分割の方向を示す。ブロックパーティショナ310は、決定614が水平方向を示す「0」を返す場合、決定616に進む。ブロックパーティショナ310は、決定614が垂直方向を示す「1」を返す場合、決定618に進む。
決定616および618のそれぞれにおいて、MT分割のパーティション数は、BT/TT分割で2つ(2分割または「BT」ノード)または3つ(3分割または「TT」)のいずれかとして示される。すなわち、BT/TT分割決定616は、614からの指示された方向が水平であるときにブロックパーティショナ310によって行われ、BT/TT分割決定618は、614からの指示された方向が垂直であるときにブロックパーティショナ310によって行われる。
BT/TT分割決定616は、水平分割が「0」を返すことによって示される2分割514であるか、「1」を返すことによって示される3分割518であるかを示す。BT/TT分割決定616が2分割を示す場合、HBT CTUノード生成ステップ625において、水平2分割514に従って、2つのノードがブロックパーティショナ310によって生成される。BT/TT分割616が3分割を示す場合、HTT CTUノード生成ステップ626において、水平3分割518に従って、ブロックパーティショナ310によって3つのノードが生成される。
BT/TT分割決定618は、垂直分割が「0」を返すことによって示される2分割516であるか、「1」を返すことによって示される3分割520であるかを示す。BT/TT分割618が2分割を示す場合、VBT CTUノード生成ステップ627では、垂直2分割516に従って、ブロックパーティショナ310によって2つのノードが生成される。BT/TT分割618が3分割を示す場合、VTT CTUノード生成ステップ628において、垂直3分割520に従って、ブロックパーティショナ310によって3つのノードが生成される。ステップ625~628から生じる各ノードについて、MT分割決定612に戻るデータフロー600の再帰が、方向614に応じて、左から右へ、または上から下への順序で適用される。その結果、2分木および3分木分割を適用して、様々なサイズを有するCUを生成することができる。
符号化ツリーの各ノードにおける許可された分割および許可されない分割のセットは、図9を参照してさらに説明される。
図7Aおよび7Bは、CTU710のいくつかのCUまたはCBへの分割例700を提供する。CU712の一例を図7Aに示す。図7Aは、CTU710におけるCUの空間配置を示す。分割例700は、図7Bに符号化ツリー720としても示されている。
図7AのCTU710内の各非リーフノード、例えばノード714、716および718において、収容されたノード(さらに分割されていてもよいし、CUであってもよい)は、ノードのリストを作成するために「Zオーダー」でスキャンまたはトラバースされ、符号化ツリー720内のカラムとして表される。4分木分割の場合、Zオーダースキャンは、左上から右に続いて左下から右の順序になる。水平分割および垂直分割の場合、Zオーダースキャン(トラバーサル)は、それぞれ、上から下へ、および左から右へのスキャンに単純化する。図7Bの符号化ツリー720は、適用されたスキャンオーダーに従って、すべてのノードおよびCUをリストする。各分割は、リーフノード(CU)に到達するまで、ツリーの次のレベルで2、3、または4個の新しいノードのリストを生成する。
ブロックパーティショナ310によって画像をCTUに分解し、さらにCUに分解し、図3を参照して説明されるように、各残差ブロック(324)を生成するためにCUを用いて、残差ブロックは、ビデオエンコーダ114によって順変換および量子化される。結果として得られるTB336は、その後、エントロピー符号化モジュール338の動作の一部として、残差係数の順次リストを形成するためにスキャンされる。同等のプロセスがビットストリーム133からTBを得るために、ビデオデコーダ134内で実行される。
図7Aおよび7Bの例は、ルマチャネルおよびクロマチャネルの両方に適用可能な符号化ツリーを説明する。しかしながら、図7Aおよび図7Bの例は、ルマチャネルのみに適用可能な符号化ツリーまたはクロマチャネルのみに適用可能な符号化ツリーのトラバースに関する挙動も示す。多くのネストされた分割を持つ符号化ツリーの場合、より深いレベルで利用可能な分割オプションは、対応する小さな領域の利用可能なブロックサイズの制限によって制約される。小さな領域のための利用可能なブロックサイズに対する制限は、実装に不合理な負担を課すほど高いブロック処理レートの最悪の場合を防止するために課される。特に、ブロックサイズがクロマにおける16(16)個のサンプルの倍数であるという制約は、実装が16(16)個のサンプルの粒度でサンプルを処理することを可能にする。ブロックサイズを16サンプルの倍数に制限することは、「イントラ再構成」フィードバックループ、すなわち、モジュール450、460、468、476、および484を含む図4のビデオデコーダ134内の経路、ならびにビデオエンコーダ114内の同等の経路に特に関連する。特に、ブロックサイズを16(16)サンプルの倍数に制限することは、イントラ予測モードにおけるスループットを維持するのに役立つ。例えば、「同時データ複数命令」(SIMD)マイクロプロセッサアーキテクチャは一般に、16個のサンプルを含むことができるワイドワード上で動作する。また、ハードウェアアーキテクチャは、イントラ再構成フィードバックループに沿ってサンプルを転送するために、16サンプルの幅を有するバスのような広いバスを使用することができる。より小さなブロックサイズ、例えば4つのサンプルが使用されるならば、バスは、例えばサンプルデータを含むバス幅の4分の1だけ、十分に利用されないであろう。利用不足のバスはより小さなブロック(すなわち、16サンプル未満)を処理することができるが、比較的小さなサイズの多くのブロック又は全てのブロックのような最悪の場合のシナリオでは、利用不足がエンコーダ(114)又はデコーダ(134)のリアルタイム動作を妨げる結果となり得る。インター予測の場合、各ブロックは、フレームバッファ(バッファ372または496など)から取得された参照サンプルに依存する。フレームバッファは、先行するフレームを処理するときに参照サンプルで占められるので、インター予測ブロックを生成するためのブロックバイブロック動作に影響を及ぼすフィードバック依存ループはない。イントラフレーム再構成に関連するフィードバック依存ループに加えて、イントラ予測モード458の決定に関連する追加の同時フィードバックループが存在する。イントラ予測モード458は、最も確率の高いモードリストからモードを選択することによって、または残りのモードリストからモードを選択することによって決定される。最も確率の高いモードリストおよび残りのモードリストの決定は、隣接ブロックのイントラ予測モードを必要とする。比較的小さいブロックサイズが使用される場合、最も確率の高いモードリストおよび残りのモードリストはより頻繁に、すなわち、サンプルのブロックサイズおよびチャネルのサンプリングレートによって支配される周波数で決定される必要がある。
図8A、8B、および8Cは、ルマ分割の前に終端され、4:2:0クロマフォーマットを使用するクロマ分割を有する符号化ツリー820(図8B)によるCTU800(8A)の例示的な分割を提供する。クロマ分割が終了する場合、各クロマチャネルに1つずつ、1対のCBが使用される。説明の便宜上、サイズ64×64ルマサンプルのCTU800。CTU800は、128×128のCTUサイズと、1つの追加の四分木分割を含む符号化ツリーとに等しい。四分木分割が8×8ルマ領域814に適用される。8×8ルマ領域814は、4つの4×4ルマCBに分割されるが、クロマチャネルでは分割は起こらない。その代わりに、所定の最小サイズ(記載された例では16)のクロマCBペアが使用され、1つは各クロマチャネルに対応する。クロマCBのペアは、典型的には同時に処理されることが望ましいサンプルの数に対する最小粒度に対応する最小サイズである。例えば、ビデオエンコーダ114およびビデオエンコーダ134の多くの実装は例えば、ハードウェア実装における対応する幅の広い内部バスの使用により、16サンプルのセットに対して動作する。さらに、分割から生じる各ルマCBは、少なくとも部分的に、クロマCBのペアと重なり、集合ルマCBは、クロマCBのペアと完全に重なる。領域814の例では、4×4のクロマCBのペアが生成される。図8Cは、結果として得られるルマCBとクロマCBとがどのように関連するかの例を示す。
再び8Aを参照すると、垂直2分割が16×4ルマ領域810に適用される。16×4ルマ領域810は、2つの8×4ルマCBに分割されるが、クロマチャネルには分割は起こらず、8×2クロマCBのペアをもたらす。16×4ルマ領域812には、垂直3分割が適用される。16×4ルマ領域812は、4×4、4×8、および4×4ルマCBに分割されるが、クロマチャネルには分割は起こらず、8×2クロマCBのペアをもたらす。水平2分割は、8×16ルマ領域816に適用される。8×16ルマ領域816は、8×4、8×8、および8×4ルマCBに分割されるが、クロマチャネルでは分割は起こらず、4×8クロマCBのペアをもたらす。したがって、クロマCBは、面積が少なくとも16サンプルである。
図8Cは、異なる平面内の異なるブロック構造を例示するために、「爆発的(exploded)」(または分離)方式で示される3つの色平面を有するCTU800の一部を示す。ルマサンプル平面850、第1のクロマサンプル平面852、および第2のクロマサンプル平面854が示されている。「YCbCr」色空間が使用中であるとき、ルマサンプル平面850は画像フレームのYサンプルを含み、第1のクロマサンプル平面852は画像フレームのCbサンプルを含み、第2のクロマサンプル平面854は画像フレームのCrサンプルを含む。4:2:0クロマフォーマットを使用すると、第1のクロマサンプル平面852および第2のクロマサンプル平面854は、ルマサンプル平面850に対して水平および垂直にサンプル密度の半分を有することになる。結果として、サンプル中のクロマブロックのCB寸法は、典型的には対応するルマCBの寸法の半分である。すなわち、4:2:0クロマフォーマットの場合、クロマCBの幅および高さは、それぞれ、コロケートされたルマCBの幅および高さの半分である。4:2:2クロマフォーマットの場合、クロマCBの高さはコロケートされたルマCBの高さの半分であり、幅はコロケートされたルマCBの幅と同じである。明確にするために、8×16ルマ領域816の符号化ツリーにおける親分割のみが示され、分割はルマサンプル平面850においてのみ示される。クロマ分割が終了すると、複数のルマCBがクロマCBのペアと並置される。例えば、CTU800の符号化ツリーは、8×16ルマ領域816に適用される水平3分割を含む。水平3分割は、ルマサンプル平面850に存在する、8×4ルマCB860、8×8ルマCB862、および8×4ルマCB864をもたらす。8×16ルマ領域816は、クロマサンプル平面(852および854)内の4×8クロマサンプルのエリアに対応するので、符号化ツリーの3分割はクロマサンプル平面(852および854)には適用されない。したがって、4×8クロマサンプルの領域は、クロマについてのリーフノードを形成し、その結果、クロマCBのペア、すなわち、第1のクロマサンプル平面852についてのクロマCB866と、第2のクロマサンプル平面854についてのクロマCB868とが得られる。ルマ平面のみに適用される水平3分割の例では、32サンプルの最小クロマCBサイズが達成される。他の例示的なルマ領域(810、812、および814)は、最小ルマブロックサイズおよびサンプル処理の所望の粒度に対応する、16の最小クロマCBサイズをもたらす。
図9は、4:2:0クロマフォーマットの使用から生じるクロマチャネルのための変換ブロックサイズおよび関連するスキャンパターンの集合900を示す。集合900は、4:2:2クロマフォーマットにも使用することができる。記載された構成は、特に4:2:0及び4:2:2フォーマットに対して、画像フレームのクロマチャネルが画像フレームのルマチャネルに対してサブサンプリングされるクロマフォーマットを有する画像フレームと共に使用するのに適している。集合900は、全ての可能なクロマ変換ブロックサイズを含まない。図9には、16以下の幅または8以下の高さを有するクロマ変換ブロックのみが示されている。より大きな幅および高さを有するクロマブロックが生じ得るが、参照を容易にするために図9には示されていない。
禁止された変換サイズ910のセットは、変換ブロックサイズ2×2、2×4、および4×2を含み、これらはすべて、16サンプル未満の領域を有する。言い換えれば、図9の例では、特にイントラ予測CBについて、16(16)個のクロマサンプルの最小変換サイズが説明された構成の動作から生じる。禁止された変換サイズ910のインスタンスは、図10を参照して説明したように、分割オプションを決定することによって回避される。変換における残差係数は、変換が「サブブロック」(または「係数グループ」)に分割される2層アプローチでスキャンされる。スキャンは、最後の有効(非ゼロ)係数からDC(左上)係数に向かってスキャン経路に沿って行われる。スキャン経路は、各サブブロック(「下位層」)内の進行、および1つのサブブロックから次(「上位層」)への進行として定義される。集合900では、8×2TB920が8×2サブブロック、すなわち、16個の残差係数を含むサブブロックを使用する。2×8TB922は、2×8サブブロックを使用し、すなわち、16個の残差係数も含む。
幅または高さが2であり、他の寸法が8の倍数であるTBは、複数の2×8または8×2サブブロックを使用する。したがって、いくつかの例では2つのサンプルの幅を有するクロマブロックが、ブロックをサブブロックに分割することを使用して符号化され、サイズ2×8サンプルのそれぞれと、2つのサンプルの高さを有するクロマブロックとはいくつかの例ではブロックをサブブロックに分割することを使用して符号化され、サイズ8×2サンプルのそれぞれである。例えば、16×2TB916は、2つの8×2サブブロックを有し、各サブブロックは、TB920に対して示されるようにスキャンされる。サブブロック進行917に示すように、1つのサブブロックから次へのスキャンの進行。
2×32TB(図9には図示せず)は、1×4アレイとして配置された4つの2×8サブブロックを使用する。各サブブロック内の残差係数は、2×8TB922について示されるようにスキャンされ、サブブロックは1×4アレイの最下位サブブロックから最上位サブブロックまで進む。
TBが大きければ大きいほど、同様のスキャンの進行に続く。幅および高さがそれぞれ4以上であるすべてのTBについて、4×4サブブロックスキャンが使用される。例えば、4×8TB923は、下位サブブロックから上部サブブロックへの進行と共に、4×4サブブロックスキャン924を使用する。4×4TB925は、同様の方法でスキャンすることができる。8×8TB929は、4つの4×4サブブロックに対して進行930を使用する。すべての場合において、サブブロック内のスキャンおよびサブブロックからサブブロックへの進行は、後方対角スキャン(a backward diagonal scan)に続き、すなわち、スキャンは、「最後の」有意残差係数からTBの左上残差係数に向かって後方に進行する。図9はまた、例えば、8×4TB932、16×4TB934、および16×8TB936にわたるスキャン順序を示す。さらに、スキャン経路に沿った最後の有意係数の位置に応じて、サブブロックの最後の有意係数位置から左上の残差係数に戻るまでの最後の有意残差係数を含むサブブロックの部分のみをスキャンする必要がある。順方向(すなわち、ブロックの右下により近い)にスキャン経路に沿ったさらなるサブブロックは、スキャンされる必要はない。集合900、特に禁止された変換サイズ910は、図10を参照して説明されるように、クロマにおける符号化ツリーの領域(またはノード)をサブ領域(またはサブノード)に分割する能力に制限を課す。
2×2、2×4、および4×2のTB(TB910のセット)を使用するVVCシステムでは、2×2のサブブロックが2つのサンプルの幅および/または高さのTBのために使用され得る。上述したように、TB910の使用は、イントラ再構成フィードバック依存性ループにおけるスループット制約を増加させる。さらに、4つの係数のみを有するサブブロックの使用は、より高いスループットで残差係数を構文解析することの困難性を増加させる。特に、各サブブロックについて、「有意性マップ」は、その中に含まれる各残差係数の有意性を示す。1値の有意性フラグの符号化は、残差係数の大きさを少なくとも1であるとして確立し、ゼロ値フラグの符号化は、残差係数の大きさをゼロとして確立する。(1つ前方からの)残差係数の大きさおよび符号は、「有意である」残差係数についてのみ符号化される。有意ビットは符号化されず、大きさ(ゼロから)がDC係数に対して常に符号化される。高スループットエンコーダおよびデコーダは、リアルタイム動作を維持するために、クロックサイクル当たり複数の有意性マップビンを符号化または復号する必要があり得る。サイクル当たりのマルチビン符号化および復号の難しさは、ビン間依存性がより多いとき、例えば、より小さいサブブロックサイズが使用されるとき、増加する。システム100において、サブブロックサイズは、ブロックサイズにかかわらず、(最後の有意係数を含むサブブロックの例外にもかかわらず)16である。
図10は、クロマ符号化ツリーにおいて許可された分割のリストを生成するための規則1000のセットを示す。他のフレームは、インター予測されたブロックとイントラ予測されたブロックとの混合を可能にすることができる。符号化ツリーの利用可能な分割の全セットを図6を参照して説明したが、利用可能な変換サイズに対する制限は所与の領域サイズに対する特定の分割オプションに制約を課す。以下に説明するように、各クロマチャネルに対する分割オプションは、対応する符号化ツリーユニットの領域の寸法に従って決定される。
クロマ領域のための規則1020は、異なる領域の許可された分割を示す。規則1020の許可された分割は、異なるクロマフォーマットが使用されている場合があるので、クロマチャネルが考慮中であっても、ルマサンプルの単位で表現される。
符号化ツリーのノードを横断する際に、符号化ツリーの領域サイズをもつ分割オプションのセットの利用可能性をチェックすることにより、クロマに対する許可された分割のリストを得る。CBを使用して符号化される可能性のある領域をもたらす分割オプションは、許可される分割のリストに追加される。CBを使用して符号化される領域のためには、領域サイズが集合900からの特定のサイズの整数個の変換で符号化を可能にしなければならない。特定のサイズは、(幅および高さの両方を考慮して)領域サイズを超えない最大サイズであるように選択される。したがって、より小さい領域に対しては、単一の変換が使用される。領域サイズが最大の利用可能な変換のサイズを超える場合、最大の利用可能な変換は、領域の全体を占有するようにタイル化される。
所与の領域(ルマサンプルで表される)を有する符号化ツリー内のノードを考慮する場合、所与のタイプの分割を実行する能力は、分割タイプおよびクロマ領域エリアに従って決定される。図10に示すように、分割オプションは分割オプションが禁止サイズのサブ領域をもたらすかどうかを決定するために、領域サイズに対してテストされる。許可されたサイズのサブ領域をもたらす分割オプションは、許可されたクロマ分割1070と見なされる。
例えば、QTモードである場合(図6の決定610に対応する)、クロマ領域のための規則1021aとして示されるように、領域が4:2:0フォーマットのサイズ8×8または4:2:2フォーマットの8×8である場合、分割がクロマチャネルに対してそれぞれ2×2または2×4の変換サイズをもたらすので、四分木分割は許可されない。許容可能な領域サイズを矢印1021で示す。同様に、クロマ規則セット1020に対する他の許容可能な分割は、矢印1022、1023、1024、1025、および1026によって示され、図13および図14に関連して以下に説明される。矢印1021、1022、1023、1024、1025および1026は、それぞれ許可されたクロマ分割リスト1070を参照する。
クロマチャネルの領域サイズは、ルマサンプルグリッドに関して記述される。たとえば、8x4領域は、4:2:0クロマフォーマットが使用されている場合、クロマチャネルの4x2変換に対応する。4:2:2クロマフォーマットが使用されている場合、8x4領域はクロマの4x4変換に対応する。4:4:4クロマフォーマットが使用されているとき、クロマはルマに関してサブサンプリングされず、したがって、クロマにおける変換サイズは領域サイズに対応する。
許容可能な分割オプションは、以下の図13および図14に関連してさらに説明される。
図11は、画像フレームの符号化ツリーをビデオビットストリームに符号化する方法1100を示す。方法1100は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1100は、プロセッサ205の実行下でビデオデコーダ114によって実行されてもよい。したがって、方法1100は、コンピュータ可読記憶媒体および/またはメモリ206に記憶されてもよい。方法1100は、クロマフォーマットを判定するステップ1105で開始する。
クロマフォーマットを判定するステップ1105において、プロセッサ205は、フレームデータ113のクロマフォーマットを、4:2:0クロマフォーマットまたは4:2:2クロマフォーマットのうちの1つとして判定する。クロマフォーマットはフレームデータのプロパティであり、方法1100の動作中に変化しない。方法1100は、プロセッサ205の制御下で、ステップ1105からフレームをCTUに分割するステップ1110に続く。
フレームをCTUに分割するステップ1110において、ブロックパーティショナ310は、プロセッサ205の実行下で、フレームデータ113の現在のフレームをCTUのアレイに分割する。分割から生じるCTUにわたる符号化の進行が開始する。プロセッサ内の制御は、ステップ1110から符号化ツリーを決定するステップ1120に進む。
符号化ツリーを決定するステップ1120において、ビデオエンコーダ114は、プロセッサ205の実行下で、様々な予測モードおよび分割オプションを組み合わせてテストして、CTUの符号化ツリーに到達する。また、CTUに対する符号化ツリーの各CUに対する予測モードと残差係数を導出する。一般に、ラグランジュ最適化は、CTUのための最適な符号化ツリーおよびCUを選択するために実行される。インター予測の使用を評価する場合、候補動きベクトルのセットから動きベクトルが選択される。候補動きベクトルは、サーチパターンに従って生成される。候補動きベクトルに対するフェッチされた参照ブロックの歪みのテストを評価する場合、符号化ツリーにおける禁止されたクロマ分割の適用が考慮される。分割がクロマにおいて禁止され、ルマにおいて許可される場合、結果として生じるルマCBは、インター予測を使用することができる。動き補償はルマチャンネルのみに適用されるため、歪み演算ではルマ歪みが考慮され、クロマ歪みは考慮されない。クロマ分割が禁止されていた場合、クロマチャンネルで動き補償が行われないため、クロマ歪みは考慮されない。クロマについては、考慮されるイントラ予測モードおよび符号化されたクロマTB(もしあれば)から生じる歪みが考慮される。ルマとクロマの両方を考慮する場合、インター予測検索では、まずルマ歪みに基づいて動きベクトルを選択し、次にクロマ歪みも考慮して動きベクトルを「リファイン」することがある。リファインメントは一般に、サブピクセル変位量のような動きベクトル値上の小さな変動を考慮する。クロマ分割が禁止され、小さいルマブロックに対するインター予測の評価が実行される場合、クロマリファインメントは必要とされない。プロセッサ205内の制御は、ステップ1120から符号化ツリーを符号化するステップ1130に進む。
符号化ツリーを符号化するステップ1130において、ビデオエンコーダ114は、プロセッサ205の実行下で、図13に関連して説明する方法1300を実行して、現在のCTUの符号化ツリーをビットストリーム115に符号化する。ステップ1130は、現在のCTUをビットストリームに符号化するために実行される。プロセッサ205における制御は、ステップ1130から最後のCTUテストステップ1140に進む。
最後のCTUテストステップ1140において、プロセッサ205は、現在のCTUがスライス又はフレーム内の最後のCTUであるかどうかをテストする。そわない場合(ステップ1140で「NO」)、ビデオエンコーダ114は、フレーム内の次のCTUに進み、プロセッサ205内の制御はステップ1140からステップ1120に戻り、フレーム内の残りのCTUの処理を継続する。CTUがフレームまたはスライス内の最後のCTUである場合、ステップ1140は「YES」に戻り、方法1100は終了する。方法1100の結果として、画像フレーム全体がCTUのシーケンスとしてビットストリームに符号化される。
図12は、ビデオビットストリームから画像フレームの符号化ツリーを復号する方法1200を示す。方法1200は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1200は、プロセッサ205の実行下でビデオデコーダ134によって実行されてもよい。したがって、方法1200は、コンピュータ可読記憶媒体および/またはメモリ206に記憶されてもよい。方法1200は、クロマフォーマットを判定するステップ1205で開始する。
クロマフォーマットを判定するステップ1205において、プロセッサ205は、フレームデータ113のクロマフォーマットを、4:2:0クロマフォーマットまたは4:2:2クロマフォーマットのうちの1つとして判定する。クロマフォーマットはフレームデータのプロパティであり、方法1200の動作中に変化しない。ビデオデコーダ134は、ビットストリーム133のプロファイルによってクロマフォーマットを判定してもよい。プロファイルは特定のビットストリーム133によって使用され得る符号化ツールのセットを定義し、クロマフォーマットを4:2:0のような特定の値に制約し得る。プロファイルは例えば、ビットストリーム133からの「profile_idc」シンタックス要素を復号することによって、またはビットストリーム133からの1つ以上の制約フラグを復号することによって判定され、各制約フラグはビットストリーム133における特定のツールの使用を制約する。クロマフォーマットがプロファイルによって完全に特定されていない場合、「chroma_format_idc」のようなさらなるシンタックスを復号して、クロマフォーマットを判定してもよい。方法1200は、ステップ1205からフレームをCTUに分割するステップ1210まで、プロセッサ205の実行下で継続する。
フレームをCTUに分割するステップ1210において、ビデオデコーダ134は、プロセッサ205の実行下で、CTUのアレイに復号されるフレームデータ133の現在のフレームの分割を決定する。決定された分割から生じるCTUにわたる復号の進行が開始する。プロセッサ内の制御は、ステップ1210から符号化ツリーを復号するステップ1220に進む。
符号化ツリーを復号するステップ1220において、ビデオデコーダ134はプロセッサ205の実行下で、ビットストリーム133から現在のCTUの符号化ツリーを復号するために、現在のCTUに対して方法1400を実行する。現在のCTUは、ステップ1210の実行から生じるCTUのうちの選択された1つである。プロセッサ205における制御は、ステップ1220から最後のCTUテストステップ1240に進む。
最後のCTUテストステップ1240において、プロセッサ205は、現在のCTUがスライス又はフレーム内の最後のCTUであるかどうかをテストする。そわない場合(ステップ1240で「NO」)、ビデオデコーダ134はフレーム内の次のCTUに進み、プロセッサ205内の制御はステップ1240からステップ1220に戻り、ビットストリームからCTUを復号し続ける。CTUがフレームまたはスライス内の最後のCTUである場合、ステップ1240は「YES」に戻り、方法1300は終了する。
図13は、画像フレームの符号化ツリーをビデオビットストリームに符号化する方法1300を示す。方法1300は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1300は、プロセッサ205の実行下でビデオエンコーダ114によって実行され得る。したがって、方法1300は、コンピュータ可読記憶媒体および/またはメモリ206に記憶されてもよい。方法1300は各ブロックが最小領域にあるように、ブロックをビットストリーム115に符号化する。記載された構成は、所定の最小サイズのサンプルを使用する。説明される例で使用される最小サイズは16サンプルであり、これは、いくつかのハードウェアおよびソフトウェア実装の観点から好ましい。しかしながら、それにもかかわらず、異なる最小サイズを使用することができる。例えば、32または64の処理粒度と、それぞれ32または64サンプルの対応する最小ブロック領域とが可能である。最小面積を有する符号化ブロックは、ハードウェアおよびソフトウェア実装の両方において、実装の実現可能性にとって有利である。ソフトウェア実装の場合、16サンプルの最小領域は、AVX-2およびSSE4などの典型的な単一命令多重データ(SIMD)命令セットと整列する。現在のCTUの符号化ツリーのルートノードで最初に呼び出される方法1300は、分割モードを符号化するステップ1310で開始する。
分割モードを符号化するステップ1310において、エントロピーエンコーダ338は、プロセッサ205の実行下で、符号化ツリーの現在のノードにおける分割モードをビットストリーム115に符号化する。分割モードは図5を参照して説明したように分割の1つであり、分割モードを符号化するステップは、可能な分割の符号化のみを可能にする。例えば、四分木分割512は、符号化ツリーのルートノードにおいて、または符号化ツリー内の他の四分木分割の下においてのみ可能である。セット910に関連して示されるように、4サンプル未満の幅または高さを有するルマCBをもたらす分割は禁止される。例えば、規則セット1010に基づいて、2分割および/または3分割の最大深さに関する他の制約も有効であり得る。プロセッサ205における制御は、ステップ1310から分割無しテストステップ1320に進む。
分割無しテストステップ1320で、プロセッサ205は、現在の分割が「分割無し」(すなわち、510)であるかどうかをテストする。現在の分割が分割無し510である場合(ステップ1320で「YES」)、プロセッサ205の制御はステップ1320からCUを符号化するステップ1330に進む。そうでなく、現在の分割が510でない場合(ステップ1320で「NO」)、プロセッサ205の制御はクロマ分割禁止テストステップ1340に進む。
CUを符号化するステップ1330において、エントロピーエンコーダ338は、プロセッサ205の実行下で、CUの予測モードおよびCUの残差をビットストリーム115に符号化する。ステップ1330が符号化ツリーの各リーフノードで到達すると、方法1300は完了ステップ1330で終了し、符号化ツリートラバースにおける親呼び出しに戻る。符号化ツリーのすべてのノードがトラバースされると、CTU全体がビットストリーム115に符号化され、制御は方法1100に戻り、画像フレーム内の次のCTUに進む。
クロマ分割禁止テストステップ1340において、プロセッサ205は図10のクロマ領域1020分割規則セットに従って、ステップ1310のように、符号化ツリー内の現在のノードに対する分割がクロマチャネルに適用されることを許可されているかどうかを判定する。符号化ツリー内の現在のノードが128個のルマサンプル(32×4または4×32または16×8または8×16)のルマ領域をカバーする場合、対応するクロマ領域(それぞれ16×2、2×16、8×4、4×8のクロマサンプル)内の3分割は、規則セット1020に示されるように禁止される。3分割が許可された場合、結果として得られるブロックサイズは禁止されたブロックサイズ(例えば、2×4または4×2)を含むことになる。符号化ツリー内の現在のノードが64個のルマサンプルのルマ領域をカバーする場合、規則セット1020に示されるように、2分割、3分割、四分木分割は禁止される。64個のルマサンプルのルマ領域に対して2分割、3分割、四分木分割を実施すると、禁止されたクロマブロックサイズ(2×2、2×4、4×2)になる。分割が禁止されていない場合(すなわち、分割がリスト1070の許可されたクロマ分割である場合)、ステップ1340は「NO」を返し、プロセッサ205の制御はステップ1340からルマおよびクロマ分割を実行するステップ1350に進む。そわない場合、分割が禁止されている場合(1340で「YES」)、プロセッサ205の制御はルマ分割を実行するステップ13100に進む。
ルマおよびクロマ分割を実行するステップ1350において、プロセッサ205は、分割を適用して、符号化ツリーの現在のノードに関連する現在の領域を、符号化ツリーのサブノードに関連するサブ領域に分割する。分割は、図5および図6の説明に従って適用される。プロセッサ205内の制御は、ステップ1350から領域を選択するステップ1360に進む。
領域を選択するステップ1360において、プロセッサは、ステップ1350から生じるサブ領域のうちの1つを選択する。サブ領域は、領域のZ順スキャンに従って選択される。選択は、ステップ1360の後続の反復でサブ領域を通って進行する。プロセッサ205内の制御は、ステップ1360から符号化ツリーを符号化するステップ1370に進む。
符号化ツリーを符号化するステップ1370において、プロセッサ205は、ステップ1360の結果として生じる選択された領域に対して、方法1300を再帰的に起動する。ステップ1370はさらに、ビットストリームの各領域について、ルマおよびクロマブロック、ならびに関連する予測モードおよび残差係数を符号化するように動作する。プロセッサ205における制御は、ステップ1370から最後の領域テストステップ1380に進む。
最後の領域テストステップ1380において、プロセッサ205は、ステップ1360で選択された選択領域がステップ1350で実行されるように、分割モード分割から得られた領域の最後の1つかどうかをテストする。領域が最後の領域でない場合(ステップ1380で「NO」)、プロセッサ205における制御はステップ1380からステップ1360に進み、分割の領域を進み続け、そわない場合、ステップ1380は「YES」を返し、方法1300は終了し、プロセッサ205における制御は、方法1300の親呼び出しに進む。
ルマ分割を実行するステップ13100では、ステップ1310で符号化されたような分割モードがプロセッサ205のみによってルマチャネルで実行される。その結果、符号化ツリーの現在のノードは、分割モードに従って複数のルマCBに分割される。クロマCBのペア、すなわち、クロマチャネル当たり1つのクロマCBのみが生成される。結果として得られる各ルマCBは、クロマCBのペアと集合的に結果として得られるルマCBとに部分的に重なる(並置される)。集合ルマCBは、クロマCBのペアの領域を正確にカバーする。クロマCBのペアの領域と。また、各ルマCB及びクロマCBの最小面積は、最小サイズ、例えば16サンプルである。
ステップ13100および1350はそれぞれ、クロマチャネルCbおよびCrのためのクロマ符号化ブロックのサイズを決定するように動作する。ステップ1350では、ステップ1310で決定された分割モードに基づいて、クロマチャネルのクロマ符号化ブロックサイズが決定される。ステップ13100において、クロマチャネルのクロマ符号化ブロックサイズは、所定の最小クロマブロックサイズに基づいて決定される。上述したように、ステップ1350は、符号化ツリーユニットに対して禁止されているクロマ分割に基づいて実施される。図10の規則セット1020に示されるように、許容可能な分割、したがってクロマ符号化ブロックのサイズは、ステップ1105で判定されたクロマフォーマットに基づいて決定される。
プロセッサ205内の制御は、ステップ13100からルマCBを選択するステップ13110に進む。
ルマCBを選択するステップ13110において、プロセッサ205は、ステップ13100から得られたCBの次のルマCBを選択する。方法13100は最初に、第1のCB、すなわち、ルマ分割から生じるCBの左上ルマCBを選択する。ステップ13110の後続の起動時に、各「次の」ルマCBは、ステップ13100から得られるルマCBに渡るZオーダスキャンに従って選択される。プロセッサ205における制御は、ステップ13110からルマCBを符号化するステップ13120に進む。
ルマCBを符号化するステップ13120において、エントロピーエンコーダ338は、プロセッサ205の実行下で、選択されたルマCBをビットストリーム115に符号化する。一般的に、予測モードと残差係数は、選択されたルマCBに対して符号化される。ルマCBのために符号化された予測モードは、インター予測またはイントラ予測を使用することができる。例えば、「cu_skip_flag」は残差なしでのインター予測の使用を示すために符号化され、さもなければ、「pred_mode_flag」および任意選択で「pred_mode_ibc_flag」は、それぞれ任意選択の残差係数をもつイントラ予測、インター予測、またはブロック内コピーの使用を示すために符号化される。残差が存在してもよい場合、「cu_cbf」フラグはCBの任意のTBにおける少なくとも1つの有意な(非ゼロの)残差係数の存在を示す。CBがインター予測を使用するように指示される場合、関連する動きベクトルは、ルマCBのみに適用可能である。すなわち、動きベクトルは、部分的に並置されたクロマCBに関連するPBを生成するためにも適用されない。CBがブロック内コピーを使用するように指示されると、関連するブロックベクトルは、ルマCBのみに関連付けられ、部分的に並置されたクロマCBには関連付けられない。プロセッサ205における制御は、ステップ13120から最後のルマCBテストステップ13130に進む。
最後のルマCBテストステップ13130で、プロセッサ205は、ステップ13110で選択されたルマCBがステップ13100で実行された分割のルマCBのZ順反復に従って最後のルマCBであるかどうかをテストする。選択されたルマCBが最後のものでない場合(ステップ13130で「NO」)、プロセッサ205の制御はステップ13130からステップ13120に進む。そわない場合、ステップ13130は「YES」に戻り、プロセッサ205の制御は、クロマイントラ予測モードを決定するステップ13140に進む。
クロマイントラ予測モードを決定する13140では、ビデオエンコーダ114がプロセッサ205の実行下で、ステップ13100のルマCBと一緒に配置されたクロマCBのペアに対するイントラ予測モードを決定する。ステップ13140は、イントラ予測を使用してクロマブロックが符号化されることを効果的に決定する。クロマCBによって占有される領域が、ルマチャネルにおいて複数のルマCBにさらに分割されるかどうかの判定が行われる。チャネルに対するクロマブロックのサイズは、ステップ1350の動作によって決定される所定の最小値(例えば16サンプル)である。ステップ13120において、対応するルマCBがインター予測を使用して符号化された場合であっても、クロマCBのペアに対するイントラ予測モードが決定される。1つの構成では、DCイントラ予測のような単一の予測モードが各クロマCBに適用される。単一予測モードの使用は、クロマ分割の禁止によってモードが決定されることを可能にし(ステップ1340における「YES」の結果)、複数の可能なモードのうちのどの1つのモードが使用されるべきかを決定するための追加の探索を必要としない。さらに、ビットストリーム115はこの場合、追加のシグナリングを必要としない、すなわち、追加の「intra_chroma_pred_mode」シンタックス要素を符号化する必要がない。しかし、構成はクロマ分割が禁止されているとき(ステップ1340で「YES」)、ビットストリーム115に「intra_chroma_pred_mode」シンタックス要素を含めることによって、いくつかの可能なイントラ予測モードのうちの1つのイントラ予測モードをシグナリングすることによって、より高い圧縮性能を達成することができる。ビデオエンコーダ114は、どのイントラ予測モードを使用するかを決定する。イントラ予測モードは、一般に歪みと比較して符号化コストの考慮に従って決定される。しかしながら、一般に、このようなクロマCBに対して単一のイントラ予測モードを使用する場合と比較して、より高い圧縮性能が得られる。プロセッサ205における制御は、ステップ13140からクロマCBを符号化するステップ13150に進む。
クロマCBを符号化するステップ13150において、エントロピーエンコーダ338はプロセッサ205の実行下で、複数のイントラ予測モードが使用可能であるときに、「intra_chroma_pred_mode」シンタックス要素を使用して、クロマCBのイントラ予測モードをビットストリーム115に符号化する。1つのイントラ予測モード、例えばDCイントラ予測が可能であるとき、「intra_chroma_pred_mode」は、ビットストリーム115に符号化されない。クロマイントラ予測のための利用可能なイントラ予測モードがDC、平面、および以下の角度予測モードを含むことができる:水平、垂直、上右対角。利用可能なイントラ予測モードは「ダイレクトモード」(DM_CHROMA)も含むことができ、それによって、クロマイントラ予測モードは、共配置されたルマCBから、一般的にステップ13100から結果として生じるルマCBの最下位および最右から、取得される。「クロス構成要素線形モデル」イントラ予測が利用可能である場合、クロマCBは、ルマCBからのサンプルから予測され得る。図14のステップ14150を参照して説明したように、クロマCBに関連付けられたクロマTBの残差係数も、ビットストリーム115に符号化され得る。ステップ13150がプロセッサ205によって実行されると、方法1300が終了し、プロセッサ205内の制御が方法1300の親呼び出しに戻る。
図14は、方法1200のステップ1220で実施される、ビデオビットストリームから画像フレームの符号化ツリーを復号する方法1400を示す。方法1400は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1400は、プロセッサ205の実行下でビデオデコーダ134によって実行されてもよい。そのようなものとして、方法1400は、コンピュータ可読記憶媒体および/またはメモリ206に記憶することができる。方法1400は、各ブロックがハードウェアの場合とソフトウェアの場合の両方で、実装の実現可能性にとって有利である16サンプルなどの最小面積よりも小さくないように、ビットストリーム133からブロックを復号することになる。ソフトウェアの場合、16サンプルの最小領域は、AVX-2及びSSE4のような典型的な単一命令多重データ(SIMD)命令セットと整列する。現在のCTUの符号化ツリーのルートノードで最初に起動される方法1400は、分割モードを復号するステップ1410で開始する。
分割モードを復号するステップ1410において、エントロピーデコーダ420は、プロセッサ205の実行下で、符号化ツリーの現在のノードにおける分割モードをビットストリーム133に復号する。分割モードは、図5を参照して説明したように分割のうちの1つであり、分割モードを符号化する方法は、クロマチャネルにおいて分割が禁止されている場合であっても許可される、すなわち、ルマチャネルにおいて許可される分割の符号化のみを許可する。例えば、四分木分割512は、符号化ツリーのルートノードにおいて、または符号化ツリー内の他の四分木分割の下においてのみ可能である。4サンプル未満の幅または高さを有するルマCBをもたらす分割は禁止される。したがって、最小ルマCBサイズは16サンプルである。2分割および/または3分割の最大深さに関する他の制約もまた、有効であり得る。プロセッサ205における制御は、ステップ1410から分割無しテストステップ1420に進む。
分割無しテストステップ1420において、プロセッサ205は現在の分割が「分割無し」(すなわち、510)であるかどうかをテストする。現在の分割が分割無し510である場合(1420で「YES」)、プロセッサ205の制御はステップ1420からCUを復号するステップ1430に進む。そわない場合、ステップ1420は「NO」を返し、プロセッサ205の制御はクロマ分割禁止テストステップ1440に進む。
CUを復号するステップ1430において、エントロピーデコーダ420は、プロセッサ205の実行下で、CUの予測モード及びビットストリーム115のCUの残差係数を復号する。ステップ1430は、エントロピーデコーダ420によってビットストリームから決定された残差係数および予測モードを使用して、符号化ユニットを復号するように動作する。ステップ1430が符号化ツリーの各リーフノードで到達すると、方法1400はステップ1430が完了すると終了し、符号化ツリー探索における親呼び出しに戻る。符号化ツリーのすべてのノードがトラバースされると、CTU全体がビットストリーム133から復号され、制御は方法1200に戻り、画像フレーム内の次のCTUに進む。
クロマ分割禁止テストステップ1440において、プロセッサ205は図10のクロマ領域1020分割規則セットに従って、ステップ1410のように、符号化ツリー内の現在のノードに対する分割がクロマチャネルに適用されることを許可されているかどうかを判定する。ステップ1440は、方法1300のステップ1340と同様に、分割テストが禁止されているかどうかを判定する。ステップ1440の動作は、禁止ブロックサイズの発生を防止する。クロマ領域が既に最小サイズ、例えば16のクロマサンプルにある場合、結果として得られる領域が許容最小値よりも小さいので、任意のタイプのさらなる分割は許容されない。クロマ領域サイズが32サンプルであり、対応する分割が(水平または垂直3分割であるかにかかわらず)3分割である場合、領域8クロマサンプルのクロマブロックを回避するために、さらなる分割も許可されない。分割が禁止されていない場合(すなわち、分割が許可されている場合)、ステップ1450は「NO」を返し、プロセッサ205の制御はステップ1440からルマおよびクロマ分割を実行するステップ1450に進む。そわない場合、分割が禁止されている場合(ステップ1450で「YES」)、プロセッサ205の制御はクロマイントラ予測モードを決定するステップ14100に進む。
ルマおよびクロマ分割を実行するステップ1450において、プロセッサ205は、分割を適用して、符号化ツリーの現在のノードに関連する現在の領域を、符号化ツリーのサブノードに関連するサブ領域に分割する。分割は、図5および図6に関連して説明したように適用される。
ステップ14100および1450はそれぞれ、クロマチャネルCbおよびCrのためのクロマ符号化ブロックのサイズを決定するように動作する。ステップ1450では、ステップ1410で復号された分割モードに基づいて、クロマチャネルのクロマ符号化ブロックサイズが決定される。ステップ14100において、クロマチャネルのクロマ符号化ブロックサイズは、所定の最小クロマブロックサイズに基づいて決定される。上述のように、ステップ1450は、16の最小クロマCBサイズ(およびルマ領域128サンプルの3分割の場合には32)に対応する、符号化ツリーユニットに対して禁止されているクロマ分割に基づいて実施される。図10の規則セット1020に示されるように、許容可能な分割、したがってクロマ符号化ブロックのサイズは、ステップ1205で判定されたクロマフォーマットに基づいて決定される。
プロセッサ205内の制御は、ステップ1450から領域選択ステップ1460に進む。
領域選択ステップ1460において、プロセッサ205は、領域のZオーダスキャンに従って、ステップ1450から生じるサブ領域の1つを選択する。ステップ1460は、後続の反復でサブ領域を通る進行選択を操作する。プロセッサ205内の制御は、ステップ1460から符号化ツリーを復号するステップ1470に進む。
符号化ツリーを復号するステップ1470において、プロセッサ205は、ステップ1460の動作の結果として生じる選択された領域に対して、方法1400を再帰的に起動する。ステップ1470はさらに、ビットストリームから決定された残差係数および予測モードを使用して、符号化ツリーの各領域を復号するように動作する。プロセッサ205における制御は、ステップ1470から最後の領域テストステップ1480に進む。
最後の領域テストステップ1480で、プロセッサ205は、ステップ1460の最後の反復で事前選択されたように、選択された領域が、ステップ1450で実施された分割モード分割から生じる領域の最後の1つかどうかをテストする。領域が最後の領域でない場合(ステップ1480で「NO」)、プロセッサ205の制御は、ステップ1480からステップ1460に進み、分割の領域を進み続ける。そわない場合、ステップ1480は「YES」を返し、方法1400は終了し、プロセッサ205の制御は方法1400の親呼出しに進む。
ルマ分割を実行するステップ14100では、ステップ1410で符号化されたような分割モードがプロセッサ205のみによってルマチャネルで実行される。その結果、符号化ツリーの現在のノードは、分割モードに従って複数のルマCBに分割される。ステップ14100は、クロマCBのペア、すなわち、クロマチャネル当たり1つのクロマCBのみを生成するように動作する。結果として得られる各ルマCBは、クロマCBのペアと部分的に重なり(少なくとも部分的に一緒に配置され)、集合的に、ルマCBは、クロマCBのペアと完全に重なる。また、各ルマCBおよびクロマCBの最小面積は16サンプルである。プロセッサ205内の制御は、ステップ14100からルマCBを選択するステップ14110に進む。
ルマCBを選択するステップ14110において、プロセッサ205は、ステップ14100から得られたCBの次のルマCBを選択する。次のルマCBの選択は、第1のCB、すなわちルマ分割から生じるCBの左上のルマCBから開始する。ステップ14110の後続の呼び出し時に、各「次の」ルマCBが、ステップ14100から得られるルマCBにわたるZオーダースキャンに従って選択される。プロセッサ205内の制御は、ステップ14110からルマCBを復号するステップ14120に進む。
ルマCBを復号するステップ14120において、エントロピーデコーダ420は、プロセッサ205の実行下で、選択されたルマCBをビットストリーム115に復号する。一般に、予測モードおよび残差は、選択されたルマCBについて復号される。例えば、「cu_skip_flag」は残差なしでのインター予測の使用を示すために復号され、さもなければ「pred_mode_flag」および任意選択で「pred_mode_ibc_flag」はそれぞれ任意選択の残差係数をもつイントラ予測、インター予測、またはブロック内コピーの使用を示すために復号される。残差が存在する可能性がある場合、「cu_cbf」フラグはCBの任意のTBにおける少なくとも1つの有意な(非ゼロの)残差係数の存在を示す。CBがインター予測を使用するように指示される場合、関連する動きベクトルはルマCBのみに適用可能であり、すなわち、動きベクトルは、部分的に並置されたクロマCBに関連するPBを生成するためにも適用されない。CBがブロック内コピーを使用するように指示されると、関連するブロックベクトルは、ルマCBのみに関連付けられ、部分的に並置されたクロマCBには関連付けられない。プロセッサ205における制御は、ステップ14120から最後のルマCBをテストするステップ14130に進む。
最後のルマCBをテストするステップ14130で、プロセッサ205は、ステップ14110で選択されたルマCBがステップ14100で実行された分割のルマCBのZオーダー反復に従って最後のルマCBであるかどうかをテストする。選択されたルマCBが最後のものでない場合、プロセッサ205内の制御は、ステップ14130からステップ14110に進む。そわない場合には、プロセッサ205における制御は、クロマイントラ予測モードを決定するステップ14140に進む。
クロマイントラ予測モードを決定する14140では、ビデオデコーダ134が、プロセッサ205の実行下で、ステップ14100のルマCBと一緒に配置されたクロマCBのペアに対するイントラ予測モードを決定する。ステップ14140は、ステップ1440の動作によって決定されるように、クロマブロックがルマのための符号化ツリーを分割することが行われている間にクロマのための符号化ツリーを分割することの停止の結果である場合、イントラ予測を使用してクロマブロックが符号化されており、したがって、イントラ予測を使用して復号されるべきであることを効果的に決定する。ステップ14120において、対応するルマCBがインター予測を使用して復号された場合であっても、クロマCBのペアに対するイントラ予測モードが決定される。1つの構成では、DCイントラ予測のような単一の予測モードが各クロマCBに適用される。単一予測モードの使用は、クロマ分割の禁止によってモードが決定されることを可能にし(ステップ1440における「YES」の結果)、複数の可能なモードのうちのどの1つのモードが使用されるべきかを決定するための追加の探索を必要としない。さらに、ビットストリーム134はこの場合、追加のシグナリングを必要とせず、すなわち、追加の「intra_chroma_pred_mode」シンタックス要素を符号化する必要がない。しかし、構成は、クロマ分割が禁止されているとき(ステップ1440で「YES」)、「intra_chroma_pred_mode」シンタックス要素をビットストリーム134に含めることによって、いくつかの可能なイントラ予測モードのうち1つのイントラ予測モードをシグナリングすることによって、より高い圧縮性能を達成することができる。ビデオデコーダ134は、エントロピーデコーダ420を使用して、ビットストリーム134から「intra_chroma_pred_mode」シンタックス要素を復号するために、使用されるイントラ予測モードを決定する必要がある。プロセッサ205における制御は、ステップ14140からクロマCBを復号するステップ14150に進む。
クロマCBを復号するステップ14150において、エントロピーデコーダ420は、プロセッサ205の実行下で、一般に、復号された「intra_chroma_pred_mode」シンタックス要素に従って、ビットストリーム420からのクロマCBのイントラ予測モードを決定する。「intra_chroma_pred_mode」の復号は、複数のイントラ予測モードが利用可能な場合に実行される。1つのイントラ予測モード、例えばDCイントラ予測のみが利用可能である場合、モードは、ビットストリーム133から追加のシンタックス要素を復号することなく推論される。クロマイントラ予測のために利用可能なイントラ予測モードは、DC、平面、以下の角度予測モードを含み得る:水平、垂直、上右対角。利用可能なイントラ予測モードはまた、「直接モード」(DM_CHROMA)を含むことができ、それによって、クロマイントラ予測モードは、ステップ14100から結果として生じるルマCBの一般的に最下位および最右位で並置されたルマCBから取得される。「クロス構成要素線形モデル」イントラ予測が利用可能である場合、クロマCBは、ルマCBからのサンプルから予測され得る。クロマCBのペアについて、「cu_cbf」フラグは、クロマCBのペアのいずれか1つにおける少なくとも1つの有意な残差係数の存在をシグナリングする。少なくとも1つの有意な残差係数がクロマCBのペアのいずれか1つに存在する場合、「tu_cbf_cb」および「tu_cbf_cr」はそれぞれ、CbおよびCrチャネルのクロマCBにおける少なくとも1つの有意な係数の存在をシグナリングする。少なくとも1つの有意な残差係数を有するクロマCBについて、シンタックス要素の「residual_coding」シーケンスがそれぞれのクロマCBの残差係数を決定するために復号される。残差符号化シンタックスは、後方対角スキャンに従って、最後の有意な係数位置から左上(「DC」)係数位置に変換ブロックをポピュレートする値のシーケンスとして残差係数を符号化する。後方対角スキャンは、一般にサイズ4×4であるが、サイズ2×2、2×4、2×8、8×2、4×2も可能な「サブブロック」(または「係数グループ」)のシーケンスとして変換ブロックのスキャンを実行する。各係数グループ内のスキャンは、後方対角方向にあり、1つのサブブロックから次のサブブロックへのスキャンも後方対角方向にある。ステップ14150がプロセッサ205によって実行されると、方法1400が終了し、プロセッサ205内の制御が方法1400の親呼び出しに戻る。
方法1300および1400の符号化ツリーアプローチは、16サンプルの最小ブロック領域が4:2:0クロマフォーマットビデオデータに対して維持され、ソフトウェアおよびハードウェアの両方における高スループット実装を容易にする。さらに、小さいCBサイズに対するルマCBに対するインター予測の制限は、動き補償されたクロマCBを生成するためにサンプルをフェッチをもする必要性を回避することによって、動き補償メモリ帯域幅に対するこの最悪の場合のメモリ帯域幅を低減する。特に、最小クロマCBサイズが2×2であり、クロマCBのサブサンプル補間のためのフィルタサポートを提供するために追加のサンプルが必要とされる場合、小さいブロックサイズのためにルマチャネルにおいてインター予測を実行するだけと比較して、メモリ帯域幅の実質的な増加が見られる。動き補償の符号化利得は、実質的にルマチャネル内に現れ、したがって、小さなブロックも動き補償されることから省略することは比較的わずかな符号化性能の影響のためにメモリ帯域幅の低減を達成する。さらに、メモリ帯域幅の低減は、4×4ルマCBに対して動き補償を実行し、結果として得られる符号化利得を達成する実現可能性に寄与する。
ビデオエンコーダ114およびビデオデコーダ134の1つの構成では、2つ以上のルマ分割が、符号化ツリーのクロマ分割が終了する点から符号化ツリー内で発生することができる。例えば、8×16ルマ領域は、クロマチャネルにおいて分割されず、4×8クロマCBのペアをもたらす。ルマチャネルにおいて、8×16ルマ領域は最初に、水平3分割で分割され、次に、結果として生じるルマCBのうちの1つがさらに分割される。例えば、結果として得られる8×4ルマCBは、2つの4×4ルマCBに垂直に2分割される。符号化ツリーのクロマ分割が終了する点から符号化ツリーにおいて2つ以上のルマ分割を有する構成は、クロマ分割禁止領域内のビデオエンコーダ114およびビデオデコーダ134のそれぞれにおける方法1300および1400を再起動し、後続の呼出しではそれ以上のクロマCBは必要とされないという修正を伴う。クロマCBのペアが作成される方法1300および1400の呼び出しでは、クロマ領域全体が作成されたクロマCBによってカバーされるので、方法1300および1400の再帰的呼び出しは追加のクロマCBを作成する必要がない。
図15は、イントラ予測符号化ユニットの変換ブロック分割の集合1500を示す。ルマCBは、同じサイズの1つのルマTB(「ISP_NO_SPLIT」)に分割されてもよい。サイズ4×4のルマCBが16サンプルの領域を有し、さらに分割されず、サイズ4×4の1つのルマTBにもなる。32サンプルの領域を有するルマCBは、2つの区分に分割されてもよい。例えば、8×4ルマCB1510は、水平に(「ISP_HOR_SPLIT」)2つの8×2ルマTB1520に分割されてもよいし、垂直に(「ISP_VER_SPLIT」)2つの4×4ルマTB1530に分割されてもよい。ルマCB1510が4×8ルマCBである場合、ブロックは1520において2つの4×4ルマTBに水平に、または1530において2つの2×8ルマTBに垂直に分割され得る。
64サンプル以上の領域のルマCBは、4つの区分への1つの区分に分割される。幅Wおよび高さHの、より大きい64サンプルの領域を有するルマCB1550は、サイズWx(H/4)の4つのルマTB1560に水平に分割されてもよく、または4つの(W/4)xHルマTBに垂直に分割されてもよい。集合1500に示すように、ルマCBを複数の区分に分割すると、ルマTBがますます小さくなる。イントラ予測は、各ルマTBについてPBを生成するために実行され、イントラ再構成プロセスは、1つの区分から次の区分へのルマCB内で実行される。
図16は、画像フレームの符号化ユニットをビデオビットストリーム115に符号化するための方法1600を示す。方法1600は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1600は、プロセッサ205の実行下でビデオエンコーダ114によって実行され得る。そのようなものとして、方法1600は、コンピュータ可読記憶媒体および/またはメモリ206に記憶することができる。方法1600は、係数グループサイズが変換ブロックサイズのみに基づいて決定され、ルマチャネルとクロマチャネルとの間でさらに区別されないように、ブロックをビットストリーム115に符号化することになる。エントロピー符号化は、ビデオエンコーダ114におけるクリティカルフィードバックループであるので、係数グループサイズ決定に必要なメモリアクセスまたは演算を低減することが有利である。符号化ツリー内の各符号化ユニットに対して呼び出される、すなわち図13のステップ1330で呼び出される方法1600は、pred_modeを符号化するステップ1610で開始する。上述したように、ステップ1330は、ステップ1320が現在の分割が分割無し510であると判定した場合に実行される。
pred modeを符号化するステップ1610において、エントロピーエンコーダ338は、プロセッサ205の実行下で、CUの予測モードをビットストリーム115に符号化する。プロセッサ205における制御は、ステップ1610からイントラ予測テストステップ1620に進む。
イントラ予測テストステップ1620において、プロセッサ205は、CUの予測モードをテストする。予測モードがイントラ予測である場合(ステップ1620で「YES」)、プロセッサ205の制御は、ステップ1620からイントラサブ分割モードを符号化するステップ1650に進む。さもなければ、予測モードがイントラ予測でない場合(ステップ1620で「No」)、プロセッサ205の制御は、ステップ1620からマージフラグおよびインデックスを符号化するステップ1630に進む。
マージフラグおよびインデックスを符号化するステップ1630において、エントロピーエンコーダ338は、プロセッサ205の実行下で、インター予測のための「マージモード」の使用(または使用しない)をシグナリングするマージフラグをビットストリーム115に符号化する。マージモードはCUの動きベクトルを、空間的に(または時間的に)隣接するブロックの候補のセットのうち、空間的に(または時間的に)隣接するブロックから取得させる。マージモードが使用されている場合、対応する「マージインデックス」で1つの候補が選択される。マージインデックスは、マージフラグと共にビットストリーム115内に符号化される。「動きベクトル予測」が使用される場合、同様の符号化が実行され、それによって、いくつかの可能な候補動きベクトルのうちの1つが、フラグを使用して予測子としてシグナリングされる。プロセッサ205における制御は、ステップ1630から動きベクトルデルタを符号化するステップ1640に進む。
動きベクトルデルタを符号化するステップ1640において、エントロピーエンコーダ338は、プロセッサ205の実行下で、動きベクトルデルタをビットストリーム115に符号化する。ステップ1640は、動きベクトル予測がCUのために使用される場合に実行される。動きベクトルデルタは、ステップ1630で符号化された動きベクトル予測子と、動き補償に使用される動きベクトルと、の間のデルタを指定する。プロセッサ205における制御は、ステップ1640から符号化残差テストステップ1660に進む。動きベクトル予測がCUのために使用されない場合、ステップ1640は実施されず、方法1600は直接ステップ1660に進む。
イントラサブ分割モードを符号化するステップ1650では、エントロピーエンコーダ338がプロセッサ205の実行下で、コンテキスト符号化「Intra_subpartitions_mode_flag」シンタックス要素を用いてイントラサブ分割をビットストリーム115に使用するかどうかの決定を符号化する。イントラサブ分割は、ルマCBサイズが最小ルマ変換ブロックサイズよりも大きい、すなわち16ルマサンプルよりも大きいときに、ルマチャネルに利用可能である。イントラサブ分割は、集合1500に示されるように、符号化ユニットを複数のルマ変換ブロックに分割する。ルマCBが複数のTBに分割される場合、「intra_subpartitions_split_flag」は、ルマCBの複数のルマTBへの分割が水平方向または垂直方向に生じるかどうかをシグナリングする。集合的に、「intra_subpartitions_mode_flag」および「intra_subpartitions_split_flag」は、「ISP_NO_SPLIT」、「ISP_HOR_SPLIT」および「ISP_VER_SPLIT」として列挙される3つの可能な分割を符号化する。プロセッサ205における制御は、ステップ1650から符号化残差テストステップ1660に進む。
符号化残差テストステップ1660において、プロセッサ205は、符号化ブロックの任意の変換ブロック内の少なくとも1つの残差係数が有意であるかどうかを判定する。この判定は、イントラサブ分割の適用から生じるすべてのルマTBと、2つのクロマチャネルに関連するクロマTBのペアとを含む。ルマTBおよびクロマTBのいずれかにおける少なくとも1つの残差係数が有意である場合、エントロピーエンコーダ338は、プロセッサ205の実行下で、「cu_cbf」シンタックス要素について「1」を算術的に符号化し、ステップ1660は「YES」を返し、プロセッサ205はルマ係数グループサイズを決定するステップ1670に進む。有意な残差係数がCUのいずれのTBにも存在しない場合、ステップ1660は「NO」を返し、「0」がcu_cbfについて算術的に符号化され、方法1600は終了し、プロセッサ205は、CTU内の次のCUに進む。
ルマ係数グループサイズを決定するステップ1670において、プロセッサは、CUに関連する1つまたは複数のルマTB(変換ブロック)の係数グループサイズを決定する。イントラサブ分割が使用されていない場合、1つのルマTBが存在する。イントラサブ分割が使用されている場合は、2つまたは4つのルマTBがある。ルマTBのサイズは水平または垂直に実行されているイントラサブ分割、およびルマTBの数に依存し、したがって、集合1500に示すように、ルマCUサイズに依存する。
係数グループサイズは以下のテーブル1に示すように、ルマTB幅および高さを使用して決定される。テーブル1は、TBがルマチャネルまたはクロマチャネルに対するものであるかにかかわらず、TBに対して同じサイズの係数グループを有するルマチャネルおよびクロマチャネルに対する係数グループマッピングテーブルに対する変換ブロック(TB)サイズを示す。TB幅および高さは2の累乗であり、したがって、テーブル1は、TB幅および高さのlog2、すなわち「log2TBwidth」および「log2TBheight」がテーブル1の3次元への最初の2つのインデックスを形成することを考慮する。テーブルの最終寸法は、係数グループの幅と高さを区別する。係数グループの寸法は、log2幅およびlog2高さとして記憶される。例えば、サイズ16×16のTBはテーブル1のインデックス(4,4)をもたらし、これは、4×4の係数グループサイズを示す(2,2)を返す。サイズ(2×32)のTBはテーブル1のインデックス(1,5)をもたらし、これは、2×8の係数グループサイズを示す(1,3)を返す。ルマTBの最小面積は16サンプルであるので、テーブル1においてlog2width+log2heightが4未満の場合はアクセスされない。イントラサブ分割がCUのために使用される場合、各ルマTBは同じサイズを有し、したがって、ルマTBのための係数グループサイズ決定は、CUのために1回実行される。
以下のテーブル2は、クロマと比較して、ルマが同じサイズTBについて異なる係数グループサイズを有するルマチャネルおよびクロマチャネルについて、変換ブロック(TB)サイズを係数グループサイズにマッピングすることを示す。テーブル2が使用される場合、追加の次元、すなわちルマとクロマとを区別することが必要とされ、表サイズはテーブル1と比較して2倍である。テーブル1に定義される係数グループサイズはTB幅および高さ内に適合するが、面積が16サンプルを超えない可能な最大サイズであるサイズをもたらす。テーブル1は係数グループサイズのセットを提供し、そこから係数グループサイズが選択される。幅対高さの選択された係数グループアスペクト比は、TB幅および高さの制約内で可能な限り1:1に近く保たれる。プロセッサ205内の制御は、ステップ1670からルマTBを符号化するステップ1680に進む。
ルマTBを符号化するステップ1680において、エントロピーエンコーダ338は、プロセッサ205の実行下で、CUの1つまたは複数のルマTBの残差係数をビットストリーム115に符号化する。ステップ1670の決定された係数グループサイズは、各ルマTBに対して使用される。各ルマTBについて、ルマTB内の少なくとも1つの有意係数の存在を示す符号化ブロックフラグがビットストリーム115に符号化される。ルマTBに少なくとも1つの有意係数が存在する場合、最後の有意位置がビットストリームに符号化される。最後の有意位置は、TBのDC(左上)係数から右下の係数に進むスキャン経路に沿った最後の有意係数として定義される。スキャン経路は、TBを、それぞれ係数グループサイズとしてサイズ設定され、TBの全体を占有する、オーバーラップしないサブブロックのアレイに分割する際の対角スキャンとして定義される。スキャン順序における1つのサブブロックから次のサブブロックへの進行もまた、対角スキャンに従う。エントロピーエンコーダ338は、左上の係数グループおよび最後の有意係数を含む係数グループ以外の各係数グループについて、「符号化サブブロックフラグ」を符号化する。符号化サブブロックフラグは、サブブロック内の少なくとも1つの有意残差係数の存在を示す。サブブロック内に有意残差係数がない場合、TB内の残差係数の対角スキャンは、そのサブブロックをスキップする。サブブロック内に少なくとも1つの有意残差係数がある場合、そのサブブロック内のすべての位置がスキャンされ、各残差係数の大きさが符号化され、各有意残差係数の符号が符号化される。プロセッサ205における制御は、ステップ1680からクロマ係数グループサイズを決定するステップ1690に進む。
クロマ係数グループサイズを決定するステップ1690において、プロセッサ205は、CUに関連付けられたクロマ変換ブロックのペアについての係数グループサイズを決定する。ルマCBが複数のルマTBに分割されるか否かとは無関係に、各クロマチャネルに対する1つのクロマCBがCUに関連付けられる。係数グループサイズはテーブル1に示すように、クロマTB幅及び高さを用いて決定される。TB幅および高さは2の累乗であり、したがって、テーブル1は、TB幅および高さのlog2、すなわち「log2TBwidth」および「log2TBheight」がテーブル1の3次元への最初の2つのインデックスを形成することを考慮する。テーブルの最終寸法は、係数グループの幅と高さを区別する。係数グループの寸法は、log2幅およびlog2高さとして記憶される。例えば、サイズ16×16のTBはテーブル1のインデックス(4,4)をもたらし、これは、4×4の係数グループサイズを示す(2,2)を返す。サイズ(2×32)のTBはテーブル1のインデックス(1,5)をもたらし、これは、2×8の係数グループサイズを示す(1,3)を返す。各クロマTBは同じサイズを有するので、クロマTBのペアに対する係数グループサイズ決定はCUに対して1回実行される。テーブル2が使用される場合、追加の寸法、すなわちルマとクロマとを区別する次元が必要とされ、テーブルサイズはテーブル1のそれと比較して2倍である。
ステップ1670および1690に関連して説明したように、係数グループサイズは、変換ブロックサイズのみに基づいて決定され、ルマチャネルとクロマチャネルとの間でさらに区別されることはない。したがって、係数グループサイズは、クロマフォーマットが4:2:2であるか4:2:0であるかに関係なく決定される。テーブル1に関連して説明したように、係数グループサイズは、16サンプルまでの係数グループの最大領域に基づく。ステップ1690はクロマフォーマットに起因して、色プレーン(CbおよびCrチャネルに適用可能)における変換ブロックまたはサブサンプリングの色プレーン(YまたはCbまたはCr)とは無関係に、TBに対する係数グループサイズを決定するために動作する。テーブル1は、ステップ1670およびステップ1690の両方で使用される。従って、ルマ面に属する変換ブロックと、クロマカラー面の各々に対して、単一のテーブルが使用される。プロセッサ205における制御は、ステップ1690からクロマTBを符号化するステップ16100に進む。
クロマTBを符号化するステップ16100において、エントロピーエンコーダ338は、プロセッサ205の実行下で、CUのクロマTBのペアの残差係数をビットストリーム115に符号化する。ステップ1690の決定された係数グループサイズは、クロマTBのペアに対して使用される。各クロマTBについて、クロマTBにおける少なくとも1つの有意係数の存在を示す符号化ブロックフラグはビットストリーム115に符号化される。各クロマTBに対する符号化ステップの残りは、ステップ1680を参照して説明したように、ルマTBに対する符号化プロセスに一致する。方法1600はステップ16100の実行時に終了し、プロセッサ205における制御は、CTUの次のCUに進む。
図17は、ビデオビットストリーム133から画像フレームの符号化ユニットを復号する方法1700を示す。方法1700は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施されてもよい。さらに、方法1700は、プロセッサ205の実行下でビデオデコーダ134によって実行されてもよい。そのようなものとして、方法1700は、コンピュータ可読記憶媒体および/またはメモリ206に記憶することができる。方法1700は、係数グループサイズが変換ブロックサイズのみに基づいて決定され、ルマチャネルとクロマチャネルとの間でさらに区別されないように、ビットストリーム133からブロックを復号することになる。エントロピー復号は、ビデオエンコーダ134におけるクリティカルフィードバックループであるので、係数グループサイズ決定に必要なメモリアクセスまたは演算を低減することが有利である。方法1700は、符号化ツリー内の各符号化ユニットについて呼び出され、すなわち、図14のステップ1430で呼び出される。上述したように、ステップ1430は、現在の分割が分割無し510である場合に実行される。方法1700は、pred_modeを復号するステップ1710で開始する。
pred_modeを復号するステップ1710において、エントロピーデコーダ420は、プロセッサ205の実行下で、ビットストリーム133からCUの予測モードを復号する。プロセッサ205における制御は、ステップ1710からイントラ予測テストステップ1720に進む。
イントラ予測テストステップ1720では、プロセッサ205がステップ1710で復号されたCUの予測モードをテストする。予測モードがイントラ予測である場合、ステップ1720は「YES」を返し、プロセッサ205における制御はステップ1720からイントラサブ分割モードを復号するステップ1750に進む。そわない場合、イントラ予測ではない場合、ステップ1720は「NO」を返し、プロセッサ205における制御は、ステップ1720からマージフラグおよびインデックスを復号するステップ1730に進む。
マージフラグおよびインデックスを復号するステップ1730において、エントロピーデコーダ420は、プロセッサ205の実行下で、ビットストリーム133から、「マージモード」がビットストリーム内でインター予測のために使用されているか否かをシグナリングするマージフラグを復号する。マージモードはCUの動きベクトルを、空間的または時間的に隣接する候補ブロックのセットのうち、空間的に(または時間的に)隣接するブロックから取得させる。マージモードが使用される場合、1つの候補が「マージインデックス」によって選択され、ビットストリーム133からも復号される。「動きベクトル予測」が使用される場合、同様の復号が実行され、それによって、いくつかの可能な候補動きベクトルのうちの1つが、ビットストリーム内のフラグによって予測子としてシグナリングされる。プロセッサ205における制御は、ステップ1730から動きベクトルデルタを復号するステップ1740に進む。
動きベクトルデルタを復号するステップ1740において、エントロピーデコーダ420は、プロセッサ205の実行下で、ビットストリーム133から動きベクトルデルタを復号する。ステップ1740は、動きベクトル予測がCUのために使用される場合に実行される。動きベクトルデルタは、ステップ1730で符号化された動きベクトル予測子と、動き補償に使用される動きベクトルとの間のデルタを指定する。プロセッサ205における制御は、ステップ1740から符号化残差テストステップ1760に進む。動きベクトル予測がCUのために使用されない場合、ステップ1740は実施されず、プロセッサ205における制御は直接ステップ1760に進む。
イントラサブ分割モードを復号するステップ1750では、エントロピーデコーダ420が、プロセッサ205の実行下で、コンテキスト符号化された「intra_subpartitions_mode_flag」シンタックス要素を使用して、ビットストリーム133からイントラサブ分割を使用するかどうかの決定を復号する。ルマCBサイズが最小ルマ変換ブロックサイズ、すなわち16ルマサンプルよりも大きいとき、イントラサブ分割はルマチャネルに対して利用可能である。集合1500に示されるように、イントラサブ分割は、符号化ユニットを複数のルマ変換ブロックに分割する。ルマCBが複数のTBに分割される場合、「intra_subpartitions_split_flag」は、ルマCBの複数のルマTBへの分割が水平にもしくは垂直に発生するか否かをシグナリングする。集合的に、「intra_subpartitions_mode_flag」と「intra_subpartitions_split_flag」は、「ISP_NO_SPLIT」、「ISP_HOR_SPLIT」、および「ISP_VER_SPLIT」として列挙された3つの可能な分割を符号化する。プロセッサ205における制御は、ステップ1750から符号化残差テストステップ1760に進む。
符号化残差テストステップ1760において、プロセッサ205は、符号化ブロックの任意の変換ブロック内の少なくとも1つの残差係数が有意であるかどうかを判定する。この判定は、イントラサブ分割の適用から生じるすべてのルマTBと、2つのクロマチャネルに関連するクロマTBのペアとを含む。エントロピーエンコーダ420はプロセッサ205の実行下で、「cu_cbf」シンタックス要素を算術的に復号し、プロセッサ205は、CUのいずれかのTBにおける少なくとも1つの残差係数が有意であるか否かを判定する。ルマTBおよびクロマTBのいずれかにおける少なくとも1つの残差係数が有意である場合、ステップ1760は「YES」を返し、プロセッサ205における制御は、ルマ係数グループサイズを決定するステップ1770に進む。cu_cbfについて算術的に復号される「ゼロ」によって示されるように、CUのいずれのTBにも有意な残差係数が存在しない場合、ステップ1760は「no」を返し、方法1700は終了し、プロセッサ205は、CTU内の次のCUに進む。
ルマ係数グループサイズを決定するステップ1770において、プロセッサ205は、CUに関連する1つまたは複数のルマ変換ブロックの係数グループサイズを判定する。ステップ1770の判定は、ステップ1670の判定と同様に動作する。プロセッサ205内の制御は、ステップ1770からルマTBを復号するステップ1780に進む。
ルマTBを復号するステップ1780において、エントロピーデコーダ420は、プロセッサ205の実行下で、ビットストリーム133からのCUの1つまたは複数のルマTBの残差係数を復号する。ステップ1770の判定された係数グループサイズは、各ルマTBに対して使用される。各ルマTBについて、ルマTB内に少なくとも1つの有意係数が存在することを示す符号化ブロックフラグがビットストリーム133から復号される。ルマTB内に少なくとも1つの有意係数が存在する場合、最後の有意位置がビットストリームから復号される。最後の有意位置は、TBのDC(左上)係数から右下の係数に進むスキャン経路に沿った最後の有意係数として定義される。スキャン経路は、TBを、それぞれ係数グループサイズとしてサイズ設定され、TBの全体を占有する、オーバーラップしないサブブロックのアレイに分割する際の対角スキャンとして定義される。スキャン順序における1つのサブブロックから次のサブブロックへの進行もまた、対角スキャンに従う。エントロピーエンコーダ338は、左上の係数グループおよび最後の有意係数を含む係数グループ以外の各係数グループについて、「符号化サブブロックフラグ」を符号化する。符号化されたサブブロックフラグは、サブブロック内の少なくとも1つの有意残差係数の存在を示す。サブブロック内に有意残差係数がない場合、TB内の残差係数の対角スキャンは、そのサブブロックをスキップする。サブブロック内に少なくとも1つの有意残差係数がある場合、そのサブブロック内のすべての位置がスキャンされ、各残差係数の大きさが符号化され、各有意残差係数の符号が符号化される。プロセッサ205における制御は、ステップ1780から、クロマ係数グループサイズを決定するステップ1790に進む。
クロマ係数グループサイズを決定するステップ1790において、プロセッサ205は、CUに関連付けられたクロマ変換ブロックのペアに対する係数グループサイズを判定する。ステップ1790で行われる判定は、ステップ1690で行われる判定と同じように動作する。
ステップ1690と同様に、係数グループサイズは、ステップ1790において、変換ブロックサイズに基づいて決定され、ルマチャネルとクロマチャネルとの間でさらに区別されない。したがって、係数グループサイズは、クロマフォーマットが4:2:2または4:2:0であるか、または各色プレーンにおける対応するサブサンプリングであるかに関係なく決定される。テーブル1に関連して説明したように、係数グループサイズは、16サンプルまでであるTBの最大領域に基づく。ステップ1690は、変換ブロックの色平面(CbまたはCr)に関係なく、TBの係数グループサイズを決定するように動作する。プロセッサ205内の制御は、ステップ1790からクロマTBを復号するステップ17100に進む。
クロマTBを復号するステップ17100において、エントロピーデコーダ420は、プロセッサ205の実行下で、ビットストリーム133からのCUのクロマTBのペアの残差係数を復号する。ステップ1790の決定された係数グループサイズは、クロマTBのペアに対して使用される。各クロマTBについて、クロマTB内に少なくとも1つの有意係数が存在することを示す符号化ブロックフラグがビットストリーム133から復号される。各クロマTBに対する復号処理の残りの部分は、ステップ1780を参照して説明したように、ルマTBに対するのと同じ方法で動作する。方法1700は、ステップ17100の実行時に終了し、プロセッサ205における制御は、CTUの次のCUに進む。
テーブル3はテーブル1を用いた場合に、JVET 「共通試験条件」(CTC)-「All Intra Main 10」構成の下で得られた符号化性能結果を示す。テーブル3の結果は、方法1600および1700を実施しないベースラインVTM-4.0と比較して、方法1600および1700を実施する「VVC試験モデル」(VTM)ソフトウェアを用いて得られた。全体として、変化からの符号化の影響はなく、クロマチャネルに少しの利得さえ見られ、変換ブロックサイズから係数グループサイズへのマッピングテーブルを単純化することは、符号化性能に有害ではないことを実証する。
ビデオエンコーダ115およびビデオデコーダ134は、それぞれ方法1600および1700を使用して、ルマTBおよびクロマTBの係数グループサイズを調和させることによって、残差符号化/復号処理におけるメモリ削減を達成する。その結果、クロマTBは、2×8のような係数グループサイズにアクセスすることができる。2x2と4x4のみではなく、4x2、2x4、8x2。ルマTBの場合、イントラサブ分割を使用すると、16x1と1x16のサイズが可能である。サイズ16x1および1x16はテーブル1におけるそれらの存在によってクロマに利用可能であるが、クロマブロックの最小幅および高さは2つのサンプルであり、したがって、サイズ16x1および1x16はクロマTBにおいて使用されない。残差符号化及び復号は、設計におけるフィードバックループの一部であるので、メモリ低減は例えば、ソフトウェア実装におけるキャッシュ性能又はハードウェア実装におけるクリティカルパス低減の改善に対応する。
uint32_t g_log2SbbSize[MAX_CU_DEPTH + 1][MAX_CU_DEPTH + 1][2] =
//===== ルマ/クロマ =====
{
{ { 0,0 },{ 0,1 },{ 0,2 },{ 0,3 },{ 0,4 },{ 0,4 },{ 0,4 },{ 0,4 } },
{ { 1,0 },{ 1,1 },{ 1,2 },{ 1,3 },{ 1,3 },{ 1,3 },{ 1,3 },{ 1,3 } },
{ { 2,0 },{ 2,1 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 } },
{ { 3,0 },{ 3,1 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 } },
{ { 4,0 },{ 3,1 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 } },
{ { 4,0 },{ 3,1 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 } },
{ { 4,0 },{ 3,1 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 } },
{ { 4,0 },{ 3,1 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 },{ 2,2 } }
};
テーブル1:(TBがルマチャネルまたはクロマチャネルのためのものであるかにかかわらず、TBのための同じサイズの係数グループを有する)ルマチャネルおよびクロマチャネルのための係数グループマッピングテーブルへのブロックサイズの変換
uint32_t g_log2SbbSize[2][MAX_CU_DEPTH+1][MAX_CU_DEPTH+1][2] =
{
//===== ルマ =====
{
{ {0,0}, {0,1}, {0,2}, {0,3}, {0,4}, {0,4}, {0,4}, {0,4} },
{ {1,0}, {1,1}, {1,2}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3} },
{ {2,0}, {2,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {3,0}, {3,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {4,0}, {3,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {4,0}, {3,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {4,0}, {3,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {4,0}, {3,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} }
},
//===== クロマ =====
{
{ {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0} },
{ {0,0}, {1,1}, {1,1}, {1,1}, {1,1}, {1,1}, {1,1}, {1,1} },
{ {0,0}, {1,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {0,0}, {1,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {0,0}, {1,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {0,0}, {1,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {0,0}, {1,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} },
{ {0,0}, {1,1}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2}, {2,2} }
},
};
テーブル2:変換ブロックサイズの、ルマチャネルおよびクロマチャネルの係数グループサイズへの従来のマッピング(ルマ対クロマの同じサイズのTBに対して異なる係数グループサイズを有する)
テーブル3:TBがルマチャネルまたはクロマチャネルに対するものであるかにかかわらず、TBに対して同じサイズの係数グループを有することから生じる符号化性能。
産業上の利用可能性
記載される構成は、コンピュータ及びデータ処理産業に、特にビデオ及び画像信号のような信号の符号化、復号のためのディジタル信号処理に適用可能であり、高い圧縮効率を達成する。
HEVCとは対照的に、VVCシステムは柔軟性を高めるために、ルマチャネルおよびクロマチャネルのための別個の符号化ツリーの使用を可能にする。しかしながら、上述したように、結果として生じる問題は、スループットに影響を及ぼすより小さなクロマブロックの使用により生じる可能性がある。本明細書で説明される構成は、各符号化ツリーユニットが処理されてスループット問題を回避するのを助けるときに、適切な規則を決定する。さらに、上述のように、上述の構成は、スループット問題を回避するための規則が与えられると、各符号化ツリーを記述するために使用されるコンテキスト符号化ビンの算術符号化の改善された効率および精度を提供することを支援することができる。
上記は本発明のいくつかの実施形態のみを記載し、本発明の範囲および精神から逸脱することなく、本発明に修正および/または変更を加えることができ、実施形態は例示的であり、限定的ではない。