添付の図面の1以上において、同一の参照符号を有するステップ及び/又は特徴を参照する場合、それらのステップ及び/又は特徴は本明細書の目的のために、反対の意図が現れない限り、同一の機能又は動作を有する。
上述のように、可逆符号化は、コーデックの既存のビルディングブロックでサポートされることが望ましい場合がある。しかしながら、可逆の方法で符号化されたビデオデータの多様なクラスはTSRC処理が設計された統計的特性を示すことを保証できないので、可逆符号化のためにTSRC処理を排他的に使用することは次善の符号化性能を生成することができる。したがって、可逆符号化が使用できる高レベルのビルディングブロックの選択におけるより大きな柔軟性は、全体的な設計に対する最小の追加の複雑さで、優れた符号化性能を可能にする。
図1は、ビデオ符号化及び復号システム100の機能モジュールを示す概略ブロック図である。システム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は、復号されたフレームデータを表示デバイス136に出力し(矢印135で示す)、ビデオデータを再生する。復号されたフレームデータ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)、および通常はROM249にも格納される基本入出力システムソフトウェア(BIOS)モジュール251をチェックする。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に値を格納または書き込む格納サイクルを実行することができる。
後述する図19~図14の方法における各ステップまたはサブプロセスは、プログラム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:0:0、4:2:0、4:2:2、または4:4:4クロマフォーマットであってもよい。ブロックパーティショナ310は最初に、フレームデータ113をCTUに分割し、CTUのための特定のサイズが使用されるように構成される、一般に正方形の形状である。CTUのサイズは例えば、64×64、128×128、または256×256ルマサンプルとすることができる。ブロックパーティショナ310は、ルマコーディングツリー及びクロマコーディングツリーに従って、各CTUを1つ以上のCBにさらに分割する。CBは様々なサイズを有し、正方形および非正方形のアスペクト比の両方を含んでもよい。VVC規格では、CB、CU、PU、およびTUは常に2の累乗である辺長を有する。したがって、312として表される現在のCBは、ブロックパーティショナ310から出力され、CTUのクロマコーディングツリーおよびルマコーディングツリーに従って、CTUの1つまたは複数のブロックにわたる反復に従って進行する。CTUをCBに分割するためのオプションは、図5および図6を参照して以下でさらに説明される。
フレームデータ113の最初の分割から得られる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は、1つまたは複数の対応するTBをもたらす。TB336は、残差324の量子化され変換された表現である。ビデオデコーダ114において予測されたPBと組み合わされると、TB336は、ビットストリームにおける追加の信号を犠牲にして、復号されたCBとオリジナルのCB312との間の差分を低減する。
したがって、各候補コーディングブロック(CB)、すなわち、変換ブロック(TB)と組み合わせた予測ブロック(PB)は、関連する符号化コスト(または「レート」)および関連する差分(または「歪み」)を有する。レートは、典型的にはビット単位で測定される。CBの歪みは、典型的には絶対差の和(SAD)または二乗差の和(SSD)などのサンプル値の差分として推定される。各候補PBから得られる推定は、残差324を使用してモードセレクタ386によって決定され、予測モード(矢印388によって表される)を決定する。各候補予測モードと対応する残差符号化に関連する符号化コストの推定は、残差のエントロピー符号化よりもかなり低いコストで実行できる。従って、レート歪み検知における最適モードを決定するために、多数の候補モードを評価することができる。
レート歪みの観点から最適モードを決定することは、典型的にはラグランジュ最適化の変形を用いて達成される。予測モード388の選択は、典型的には特定の予測モードの適用から生じる残差データのための符号化コストを決定することを含む。符号化コストは「絶対変換差の和」(SATD)を使用することによって近似することができ、それによって、アダマール変換などの比較的単純な変換を使用して、推定された変換残差コストを得る。比較的単純な変換を使用するいくつかの実施形態では、単純化された推定方法から得られるコストがさもなければ完全な評価から決定されるのであろう実際のコストに単調に関係する。単調に関連する推定コストを有する実施形態では、単純化された推定方法を使用して、ビデオエンコーダ114の複雑さを低減しながら、同じ決定(すなわち、予測モード)を行うことができる。推定されたコストと実際のコストとの間の関係における可能な非単調性を可能にするために、簡略化された推定方法を使用して、最良の候補のリストを生成することができる。非単調性は例えば、残差データの符号化に利用可能なさらなるモード決定から生じ得る。最良の候補のリストは、任意の数であってもよい。最良の候補を使用して、より完全な探索を実行して、候補のそれぞれについて残差データを符号化するための最適モード選択を確立することができ、他のモード決定と共に予測モード388の最終選択を可能にする。
予測モードは大きく二つのカテゴリーに分類される。第1のカテゴリは、「イントラフレーム予測」(「イントラ予測」とも呼ばれる)である。イントラフレーム予測では、ブロックに対する予測が生成され、生成方法は現在のフレームから得られた他のサンプルを使用してもよい。イントラ予測のタイプには、イントラプレーナ、イントラDC、イントラ角度、および行列加重イントラ予測(MIP)が含まれる。イントラ予測されたPBの場合、異なるイントラ予測モードがルマおよびクロマのために使用されることが可能であり、したがって、イントラ予測は主に、PB上での動作に関して説明される。さらに、クロマCBは、クロス構成要素線形モデル予測によって、同じ場所に配置されたルマサンプルから予測されてもよい。
予測モードの第2のカテゴリは、「インターフレーム予測」(「インター予測」とも呼ばれる)である。インターフレーム予測では、ブロックの予測がビットストリーム内のフレームを符号化する順序で現在のフレームに先行する1つまたは2つのフレームからのサンプルを使用して生成される。さらに、インターフレーム予測のために、単一のコーディングツリーが典型的には、ルマチャネルおよびクロマチャネルの両方について使用される。ビットストリーム内のフレームの符号化順は、キャプチャまたは表示時のフレームの順序とは異なる場合がある。1つのフレームが予測に使用される場合、ブロックは「片予測」であると言われ、1つの関連する動きベクトルを有する。2つのフレームが予測に使用される場合、ブロックは「双予測」されると言われ、2つの関連する動きベクトルを有する。Pスライスの場合、各CUは、イントラ予測または片予測され得る。Bスライスの場合、各CUは、イントラ予測、片予測、または双予測され得る。フレームは、典型的にはフレームの時間的階層を可能にする「ピクチャのグループ」構造を使用して符号化される。フレームの時間的階層は、フレームがフレームを表示する順序で、先行するピクチャおよび後続するピクチャを参照することを可能にする。画像は、各フレームを復号するための依存関係が満たされていることを保証するために必要な順序で符号化される。
インター予測のサブカテゴリは、「スキップモード」と呼ばれる。インター予測モードおよびスキップモードは、2つの別個のモードとして説明される。しかしながら、インター予測モード及びスキップモードの両方は、先行するフレームからのサンプルのブロックを参照する動きベクトルを含む。インター予測は、符号化された動きベクトルデルタを含み、動きベクトル予測子に対する動きベクトルを指定する。動きベクトル予測子は、「マージインデックス」で選択された1つ以上の候補動きベクトルのリストから得られる。符号化された動きベクトルデルタは、選択された動きベクトル予測に空間オフセットを提供する。また、インター予測は、ビットストリーム133内の符号化された残差を使用する。スキップモードは、インデックス(「マージインデックス」とも呼ばれる)のみを使用して、いくつかの動きベクトル候補のうちの1つを選択する。選択された候補は、さらなるシグナリングなしに使用される。また、スキップモードは、残差係数の符号化をサポートしない。スキップモードが使用されるとき、符号化された残差係数がないことは、スキップモードのための変換を実行する必要がないことを意味する。したがって、スキップモードは、典型的にはパイプライン処理問題を生じない。パイプライン処理問題は、イントラ予測されたCUおよびインター予測されたCUの場合であり得る。スキップモードの限定されたシグナリングのために、スキップモードは比較的高品質の参照フレームが利用可能であるときに、非常に高い圧縮性能を達成するために有用である。ランダムアクセスピクチャグループ構造のより高い時間レイヤにおける双予測されたCUは、典型的には、基礎となる動きを正確に反映する高品質の参照ピクチャおよび動きベクトル候補を有する。
サンプルは、動きベクトルおよび参照ピクチャインデックスに従って選択される。動きベクトルおよび参照ピクチャインデックスは、すべてのカラーチャネルに適用され、したがって、インター予測は主に、PBではなくPU上での動作に関して説明される。各カテゴリー内(すなわち、イントラおよびインターフレーム予測)では、PUを生成するために異なる技法を適用することができる。例えば、イントラ予測は、所定のフィルタリング及び生成処理に従ってPUを生成する方向と組み合わせて、以前に再構成されたサンプルの隣接する行及び列からの値を使用することができる。あるいは、PUが少数のパラメータを使用して記述されてもよい。インター予測方法は、動きパラメータの数とその精度で変わる可能性がある。動きパラメータは通常、参照フレームのリストからどの参照フレームが使用されるべきかを示す参照フレームインデックスと、参照フレームの各々のための空間変換とを含むが、より多くのフレーム、特別なフレーム、またはスケーリングおよび回転などの複雑なアフィンパラメータを含むことができる。さらに、参照されたサンプルブロックに基づいて、高密度動き推定を生成するために、所定の動き精緻化処理を適用することができる。
ラグランジュ処理または類似の最適化処理を採用して、CTUのCBへの最適分割(ブロックパーティショナ310による)と、複数の可能性からの最良予測モードの選択の両方を選択することができる。モードセレクタモジュール386における候補モードのラグランジュ最適化プロセスの適用を通して、最低コスト測定を有する予測モードが「最良」モードとして選択される。最低コストモードは、選択された予測モード388であり、エントロピーエンコーダ338によってビットストリーム115にも符号化される。モードセレクタモジュール386の動作による予測モード388の選択は、ブロックパーティショナ310の動作に拡張する。例えば、予測モード388の選択のための候補は、所与のブロックに適用可能なモードと、さらに、所与のブロックと一緒に集合的に配置される複数のより小さいブロックに適用可能なモードと、を含むことができる。所与のブロックおよびより小さいコロケートされたブロックに適用可能なモードを含む場合、候補を暗黙的に選択するプロセスは、CTUのCBへの最良の階層分解を決定するプロセスでもある。
ビデオエンコーダ114の動作の第2のステージ(「符号化」ステージと呼ばれる)では、選択されたルマコーディングツリーおよび選択されたクロマコーディングツリー、したがって、選択された各CBにわたる反復がビデオエンコーダ114において実行される。反復では、CBが本明細書でさらに説明するように、ビットストリーム115に符号化される。
エントロピーエンコーダ338は、シンタックス要素の可変長符号化とシンタックス要素の算術符号化の両方をサポートする。算術符号化は、コンテキスト適応2進算術符号化(CABAC)プロセスを使用してサポートされる。算術的に符号化されたシンタックス要素は、1つ以上の「bins」のシーケンスからなる。ビンはビットと同様に、「0」または「1」の値を有する。ビンは、ディスクリートビットとしてビットストリーム115に符号化されない。ビンは、「コンテキスト」として知られる、関連する予測(または「可能性」または「最も可能性のある」)値および関連する確率を有する。符号化される実際のビンが予測値と一致するとき、「最確率シンボル(most probable symbol)」(MPS)が符号化される。最確率シンボルを符号化することは、消費されるビットに関して比較的安価である。符号化されるべき実際のビンがありそうな値と一致しない場合、「最低確率シンボル(least probable symbol)」(LPS)が符号化される。最低確率シンボルを符号化することは、消費されるビットに関して比較的高いコストを有する。ビン符号化技術は、「0」対「1」の確率が偏っているビンの効率的な符号化を可能にする。2つの可能な値(すなわち「フラグ」)を持つシンタックス要素に対しては、単一のビンで十分である。可能な値が多いシンタックス要素の場合は、一連のビンが必要である。
シーケンス中の後のビンの存在は、シーケンス中の前のビンの値に基づいて決定されてもよい。さらに、各ビンは、2つ以上のコンテキストに関連付けることができる。特定のコンテキストの選択は、シンタックス要素の以前のビン、隣接するシンタックス要素のビン値(すなわち、隣接するブロックからのもの)などに依存することができる。コンテキスト符号化ビンが符号化されるたびに、そのビンに対して選択されたコンテキスト(もしあれば)は、新しいビン値を反映する方法で更新される。このように、2進算術符号化方式は適応型であると言われている。
また、ビデオエンコーダ114によってサポートされるのは、コンテキストを欠くビン(「バイパスビン」)である。バイパスビンは、「0」と「1」との間の等確率分布を仮定して符号化される。したがって、各ビンは、ビットストリーム115内の1ビットを占有する。コンテキストがないと、メモリが節約され、複雑さが軽減され、したがって、特定のビンの値の分布が偏っていない場合は、バイパスビンが使用される。
エントロピーエンコーダ338は、コンテキスト符号化ビンとバイパス符号化ビンとの組合せを使用して予測モード388を符号化する。例えば、予測モード388がイントラ予測モードである場合、「最確率モード」のリストがビデオエンコーダ114において生成される。最確率モードのリストは典型的には3つまたは6つのモードなどの固定長であり、以前のブロックで遭遇したモードを含むことができる。コンテキスト符号化ビンは、予測モードが最確率モードの1つかどうかを示すフラグを符号化する。イントラ予測モード388が最確率モードの1つである場合、バイパス符号化ビンを使用するさらなるシグナリングが符号化される。符号化されたさらなるシグナリングは例えば、切り捨てられた単項ビンストリングを使用して、どの最確率モードがイントラ予測モード388に対応するかを示す。そわない場合、イントラ予測モード388は、「残りモード」として符号化される。残りのモードとしての符号化は、バイパス符号化されたビンを使用しても符号化される固定長符号などの代替シンタックスを使用して、最確率モードリストに存在するもの以外のイントラ予測モードを表現する。
マルチプレクサモジュール384は、決定された最良の予測モード388に従ってPB320を出力し、各候補CBのテストされた予測モードから選択する。候補予測モードは、ビデオエンコーダ114によってサポートされるすべての考えられる予測モードを含む必要はない。
PB320を決定して選択し、減算器322で元のサンプルブロックからPB320を減算すると、符号化コストが最も低い324で表される残差が得られ、非可逆圧縮を受ける。非可逆圧縮プロセスは、変換、量子化、およびエントロピー符号化のステップを含む。順方向一次変換モジュール326は、残差324に順方向変換を適用し、残差324を空間領域から周波数領域に変換し、矢印328によって表される一次変換係数を生成する。一次変換係数328は、順方向二次変換モジュール330に渡され、非分離型二次変換(NSST)動作を実行することによって、矢印332によって表される変換係数を生成する。フォワードプライマリ変換は、典型的には分離可能であり、典型的にはタイプII離散コサイン変換(DCT-2)を使用して、行のセット、次いで各ブロックの列のセットを変換するが、タイプVII離散サイン変換(DST-7)およびタイプVIII離散コサイン変換(DCT-8)も、例えば、16サンプルを超えないブロック幅に対して水平に、16サンプルを超えないブロック高さに対して垂直に、利用可能であり得る。行および列の各セットの変換は、最初にブロックの各行に1次元変換を適用して中間結果を生成し、次に中間結果の各列に1次元変換を適用して最終結果を生成することによって実行される。順方向二次変換は一般に、分離不可能な変換であり、これは、イントラ予測されたCUの残差に対してのみ適用され、それにもかかわらず、バイパスされてもよい。順方向二次変換は、16個のサンプル(一次変換係数328の左上4x4サブブロックとして配置された)または64個のサンプル(一次変換係数328の4個の4x4サブブロックとして配置された、左上8x8係数として配置された)のいずれかで動作する。
更に、順方向二次変換の行列係数は、使用のために2セットの係数が利用できるように、CUのイントラ予測モードに従って複数のセットから選択される。行列係数のセットのうち1つを使用すること、つまり順方向二次変換のバイパスを使用することは、「nsst_index」のシンタックス要素でシグナルされ、切り捨てられた単項2値化を使って、値ゼロ(二次変換は適用されない)、1つ(選択された行列係数の第1セット)、または2つ(選択された行列係数の第2セット)を表すように符号化されている。
ビデオエンコーダ114はまた、「変換スキップ」モードとして知られる、一次変換および二次変換の両方をスキップすることを選択してもよい。変換をスキップすることは、変換基底関数としての表現を介して符号化コストを低減するための適切な相関を欠く残差データに適している。比較的単純なコンピュータ生成グラフィックスなどの特定のタイプのコンテンツは、同様の挙動を示すことがある。変換スキップモードが使用されるとき、変換係数332は残差係数324と同じである。
変換係数332は、量子化器モジュール334に渡される。モジュール334では、「量子化パラメータ」による量子化が実行されて、矢印336によって表される量子化係数が生成される。量子化パラメータは所与のTBについて一定であり、したがって、TBについての残差係数の生成のための均一なスケーリングをもたらす。「量子化行列」を適用することによって、不均一なスケーリングも可能であり、それによって、各残差係数に適用されるスケーリング係数は、量子化パラメータと、典型的にはTBのサイズに等しいサイズを有するスケーリング行列内の対応するエントリとの組合せから導出される。スケーリング行列は、TBのサイズよりも小さいサイズを有することができ、TBに適用される場合、TBサイズよりもサイズが小さいスケーリング行列から各残差係数のスケーリング値を提供するために、最も近い近傍アプローチが使用される。量子化係数336は、ビットストリーム115における符号化のためにエントロピーエンコーダ338に供給される。典型的には、少なくとも1つの有意な量子化係数を有する各TBの量子化係数がスキャンパターンに従って、値の順序付けられたリストを生成するためにスキャンされる。スキャンパターンは一般に、4x4「サブブロック」のシーケンスとしてTBをスキャンし、残差係数の4×4セットの粒度で規則的なスキャン動作を提供し、サブブロックの配置はTBのサイズに依存する。さらに、予測モード388および対応するブロック分割もビットストリーム115に符号化される。
上述のように、ビデオエンコーダ114は、ビデオデコーダ134によって見られるフレーム表現に対応するフレーム表現へのアクセスを必要とする。したがって、量子化係数336はまた、逆量子化器モジュール340によって逆量子化され、矢印342によって表される再構成された変換係数を生成する。再構成された変換係数342は、逆二次変換モジュール344を通過して、矢印346で表される再構成された一次変換係数を生成する。再構成された一次変換係数346は、逆一次変換モジュール348に渡されて、矢印350によって表されるTUの再構成された残差サンプルを生成する。逆二次変換モジュール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(選択された候補のみに対して動作する)のそれと比較して、単純化されたフィルタリング処理を実行することができる。ビデオエンコーダ114がCUのインター予測を選択すると、動きベクトル378がビットストリーム115に符号化される。
図3のビデオエンコーダ114は汎用ビデオ符号化(VVC)を参照して説明されるが、他のビデオ符号化規格または実装はモジュール310~386の処理ステージを使用することもできる。フレームデータ113(およびビットストリーム115)は、メモリ206、ハードディスクドライブ210、CD-ROM、Blu-ray discTM、または他のコンピュータ可読記憶媒体から読み取る(または書き込む)こともできる。さらに、フレームデータ113(およびビットストリーム115)は、通信ネットワーク220または無線周波数受信機に接続されたサーバなどの外部ソースから受信(または送信)されてもよい。
ビデオデコーダ134を図4に示す。図4のビデオデコーダ134は、汎用ビデオコーディング(VVC)ビデオデコーディングパイプラインの一例であるが、他のビデオコーデックを使用して、本明細書で説明する処理ステージを実行することもできる。図4に示すように、ビットストリーム133はビデオデコーダ134に入力される。ビットストリーム133は、メモリ206、ハードディスクドライブ210、CD-ROM、Blu-ray discTM、または他の一時的でないコンピュータ可読記憶媒体から読み取ることができる。あるいは、ビットストリーム133は、通信ネットワーク220または無線周波数受信機に接続されたサーバなどの外部ソースから受信されてもよい。ビットストリーム133は、復号される撮像フレームデータを表す符号化されたシンタックス要素を含む。
ビットストリーム133は、エントロピーデコーダモジュール420に入力される。エントロピーデコーダモジュール420は、「bins」のシーケンスを復号することによってビットストリーム133からシンタックス要素を抽出し、そのシンタックス要素の値をビデオデコーダ134内の他のモジュールに渡す。ビットストリーム133から抽出されたシンタックス要素の一例は、量子化された係数424である。エントロピーデコーダモジュール420は、演算デコーディングエンジンを使用して、各シンタックス要素を1つ以上のビンのシーケンスとして復号する。各ビンは、ビンの「1」と「0」の値を符号化するために使用される確率レベルを記述するコンテキストと共に、1つ以上の「コンテキスト」を使用することができる。所与のビンに対して複数のコンテキストが利用可能な場合、「コンテキストモデリング」または「コンテキスト選択」ステップが、ビンを復号するために利用可能なコンテキストの1つを選択するために実行される。ビンを復号するプロセスは、順次フィードバックループを形成する。フィードバックループにおける動作の数は、エントロピーデコーダ420がビン/秒で高いスループットを達成することを可能にするために最小化されることが好ましい。コンテキストモデリングはコンテキスト、すなわち、現在のビンの前のプロパティを選択するときに、ビデオデコーダ134に知られているビットストリームの他のプロパティに依存する。例えば、コンテキストは、コーディングツリー内の現在のCUの四分木深さに基づいて選択され得る。依存性は、ビンを復号する前に知られている特性に基づくか、または長い順次処理を必要とせずに決定されることが好ましい。
量子化された係数424は、逆量子化器モジュール428に入力される。逆量子化器モジュール428は、量子化パラメータに従って、量子化された係数424に対して逆量子化(または「スケーリング」)を実行して、矢印432によって表される再構成された中間変換係数を生成する。不均一な逆量子化行列の使用がビットストリーム133に示される場合、ビデオデコーダ134は、スケーリングファクタのシーケンスとしてビットストリーム133から量子化行列を読み出し、スケーリングファクタを行列に配置する。逆スケーリングは、量子化パラメータと組み合わせて量子化行列を使用して、再構成された中間変換係数432を生成する。再構成された中間変換係数432は、逆二次変換モジュール436に渡され、ここで、復号された「nsst_index」シンタックス要素に従って、二次変換が適用され得る。「nsst_index」は、プロセッサ205の実行下で、エントロピーデコーダ420によってビットストリーム133から復号される。逆二次変換モジュール436は、再構成された変換係数440を生成する。
再構成された変換係数440は、逆一次変換モジュール444に渡される。モジュール444は、係数を周波数領域から空間領域に戻すように変換する。モジュール444の動作の結果は、矢印448によって表される残差サンプルのブロックである。残差サンプル448のブロックは、対応するCUにサイズが等しい。逆一次変換のタイプは、タイプII離散コサイン変換(DCT-2)、タイプVII離散サイン変換(DST-7)、タイプVIII離散コサイン変換(DCT-8)、または「変換スキップ」モードとすることができる。変換スキップモードの使用は、ビットストリーム133から復号されるか、または他の方法で推論される変換スキップフラグによってシグナリングされる。変換スキップモードが使用されるとき、残差サンプル448は再構成された変換係数440と同じである。
残差サンプル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つのクロマチャネルはそれぞれ、同じイントラ予測モードを共有する。
ルマブロックのイントラ予測は、4つのタイプからなる。「DCイントラ予測」は、隣接するサンプルの平均を表す単一の値をPBに入力すること(populating)を含む。「プラナーイントラ予測」は、隣接するサンプルから導出される垂直および水平勾配とDCオフセットを用いて、平面に従ってサンプルをPBに入力することを含む。「角度イントラ予測」は、フィルタリングされ、PBを横切って特定の方向(または「角度」)に伝播された隣接するサンプルをPBに入力することを含む。VVCでは、PBは最大65の角度から選択することができ、長方形ブロックは正方形ブロックには利用できない異なる角度を利用することができる。「マトリックスイントラ予測」は、隣接するサンプルの削減されたセットに、ビデオデコーダ134に利用可能な多数の利用可能なマトリックスの1つを乗算することによって、PBを入力することを含む。隣接するサンプルの削減されたセットは、隣接するサンプルをフィルタリングし、サブサンプリングすることによって生成される。次に、削減されたサンプルのセットに行列を乗算し、オフセットベクトルを加算することによって、削減された予測サンプルのセットが生成される。行列および関連するオフセットベクトルは、PBのサイズに応じて多数の可能な行列から選択され、行列およびオフセットベクトルの特定の選択は、「MIPモード」シンタックス要素によって示される。例えば、8×8より大きいサイズを有するPBに対しては、11個のMTPモードがあり、一方、8×8サイズのPBに対しては19個のMIPモードがある。最後に、マトリックスイントラ予測により生成されたPBは、補間による予測サンプルの削減したセットから入力される。
第5のタイプのイントラ予測はクロマPBに利用可能であり、それによって、PBは、「クロス成分線形モデル」(CCLM)モードに従って、並置されたルマ再構成サンプルから生成される。3つの異なるCCLMモードが利用可能であり、その各々は、隣接するルマ及びクロマサンプルから導出された異なるモデルを使用する。次いで、導出されたモデルを使用して、コロケートされたルマサンプルからクロマPBのサンプルのブロックを生成する。
CBの予測モードがビットストリーム133におけるインター予測であることが示されると、動き補償モジュール434は、フレームバッファ496からサンプル498のブロックを選択してフィルタリングするために、動きベクトルおよび参照フレームインデックスを使用して、438として表されるインター予測サンプルのブロックを生成する。サンプル498のブロックは、フレームバッファ496に格納された以前に復号されたフレームから得られる。双予測の場合、2つのサンプルブロックが生成され、一緒にブレンドされて、復号されたPB452のためのサンプルが生成される。フレームバッファ496には、ループ内フィルタリングモジュール488からのフィルタリングされたブロックデータ492が入力される。ビデオエンコーダ114のループ内フィルタリングモジュール368と同様に、ループ内フィルタリングモジュール488は、DBF、ALF、およびSAOフィルタリング動作のいずれかを適用する。一般に、動きベクトルはルマチャネルとクロマチャネルの両方に適用されるが、サブサンプル補間ルマチャネルとクロマチャネルのフィルタリング処理は異なる。フレームバッファ496は、復号されたビデオサンプル135を出力する。
図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は、最大の利用可能なコーディングユニットサイズである。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を生成することができる。
図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個の新しいノードのリストを生成する。
画像をCTUに分解し、さらにブロックパーティショナ310によってCUに分解し、図3を参照して説明したように、各残差ブロック(324)を生成するためにCUを使用すると、残差ブロックはビデオエンコーダ114によって順変換される。ビットストリーム133からTBを得るために、ビデオデコーダ134において同等の逆変換プロセスが実行される。
ビデオエンコーダ114では、量子化された係数336が2レベル後方対角スキャンを実行することによって、1次元リストに再配置され得る。同様に、ビデオデコーダ134において、量子化された係数424は、同じ2レベル後方対角スキャンによって、1次元リストからサブブロックの2次元コレクションに再配置され得る。
図8Aは、例示的な8×8TB800の2レベル後方対角スキャン810を示す。スキャン810は、TB800の右下の残差係数位置からTB800の左上(DC)の残差係数位置に戻るように進行することを示されている。スキャン810の経路は、サブブロックとして知られる4×4領域で、1つのサブブロックから次のサブブロックへ進む。幅または高さが2のTBの場合、2×2、2×8、または8×2のサブブロックサイズが利用可能である。特定のサブブロック内のスキャンは、「符号化されたサブブロックフラグ」に従って実行されるか、またはサブブロックがスキップされる。サブブロックのスキャンがスキップされると、サブブロック内の全ての残差係数はゼロの値を有すると推測される。スキャン810はTB800の右下の残差係数位置から開始することを示されているが、残差係数の所与のセットについて、スキャンは「最後の有意係数」の位置から開始し、係数の順序がスキャン順序の代わりにDC係数から進行すると見なされるとき、「最後の」係数である。
図8Bは、TSRC処理が選択されるときに使用される、例示的な8×8TB850の代替の2レベル前方対角スキャン860を示す。TSRC処理がビデオエンコーダ114で使用されるとき、量子化された係数336は、スキャン860によって1次元リストに再配置される。同様に、TSRC処理がビデオデコーダ134内の現在のTBのために使用される場合、量子化された係数424は、スキャン860によって、1次元リストから、サブブロックの2次元コレクションに再配置される。スキャン860は、TB850の左上(DC)残差係数位置からTB850の右下残差係数位置に進むことが示されている。スキャン810とは異なり、スキャン860は「最後の有意係数」で終了しない。
図8Aおよび8Bは、VVCで典型的に使用されるスキャンパターンを示す。本明細書で説明される例は、モジュール326によって変換された残差係数を符号化するためにスキャンパターン810を使用し、スキャンパターン860は、変換スキップされた変換ブロックのために使用される。
しかしながら、ある実装では、他のスキャンパターンを使用することができる。
上述のように、変換係数332は、変換スキップモードが使用されるときの残差係数324と同じである。従って、変換スキップモードが選択されているか否かにかかわらず、変換係数332は、残差係数と同様に呼ばれることがある。可逆符号化が所望される場合、ビデオエンコーダ114は現在のTBのための変換スキップを選択し、値「TRUE」を有する変換スキップフラグをビットストリーム133にシグナリングする。現在のTBに関連する残差係数332は、ビットストリーム133に符号化される。2つの残差符号化プロセス、「正規残差符号化」(RRC)プロセス、および「変換スキップ残差符号化」(TSRC)プロセスが利用可能である。ビデオエンコーダ114の通常動作では、変換スキップが選択された場合(変換スキップフラグが値「TRUE」を有する)、TSRCプロセスが選択され、そわない場合(変換スキップフラグが値「FALSE」を有する)、RRCプロセスが選択される。しかしながら、残差係数332の符号化が可逆符号化の場合にTSRCによって排他的に処理されることは、典型的には望ましくない。
ビデオエンコーダ114の1つの構成では、TSRC無効フラグがビットストリーム133内でシグナリングされる。TSRC無効フラグは、TSRC無効フラグをシグナリングする相対コストが低くなるように、シーケンス毎に1回、またはピクチャ毎に1回など、比較的高いレベルでシグナリングすることができる。高レベルのシンタックス要素は、典型的には、シーケンスレベルフラグの場合は「シーケンスパラメータセット」(SPS)、パラメータレベルフラグの場合は「ピクチャパラメータセット」(PPS)などのパラメータセットにグループ化される。TSRC無効フラグは、ビデオデータ113がTSRC処理による符号化に適さないと思われる(符号化の損失と機能の再現に関して)クラスに属する場合、「TRUE」に設定されてもよい。TSRCによる符号化に適さないビデオデータの例は、自然な場面コンテンツである。TSRC無効フラグは、ビデオデータ113がTSRC処理でうまくエンコードされると思われるクラスに属するとき、「FALSE」に設定されてもよい。TSRC処理で符号化するのに適したビデオデータは、人工スクリーンコンテンツを含む。
ビデオエンコーダ114が現在のTBのための変換スキップを選択し、TSRC無効フラグが「TRUE」に設定される場合、残差係数332は、RRCプロセスを使用してビットストリーム133に符号化される。同様に、ビデオデコーダ134が変換スキップが現在のTBのために使用され、TSRC無効フラグが「TRUE」に設定されていると判定した場合、残差係数432は、RRCプロセスを使用してビットストリーム133から復号される。
図9は、RRCプロセスを使用して残差係数332の変換ブロックを符号化するための方法900を示す。方法900は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法900は、プロセッサ205の実行下でビデオエンコーダ114によって実行されてもよい。このように、方法900は、コンピュータ読み取り可能な記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施することができる。
方法900は、残差係数332を受信すると量子化器334で、次いでエントロピーエンコーダ338で、ビデオエンコーダ114によって幾つかの構成で実行される。方法900は、係数量子化ステップ910で始まる。
係数量子化ステップ910において、ステップ910は、図11に関連して以下に説明する方法1100を呼び出す。方法1100は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1100は、プロセッサ205の実行下でビデオエンコーダ114によって実行されてもよい。このように、方法1100は、コンピュータ読み取り可能な記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施することができる。方法1100は残差係数332を量子化し、量子化係数336を生成する。方法900は、プロセッサ205の制御下で、ステップ910から最後位置符号化ステップ920に進む。
最後位置符号化ステップ920において、ビデオエンコーダ114は、残差係数332)の変換ブロックについて、量子化係数336内の最後の有意係数の位置を見つける。最後の有意係数は、適切なスキャンパターンの前方方向、例えば2レベル前方対角スキャン860の方向に関連して決定される。量子化された係数は、係数がゼロ以外の任意の値を有する場合に有意である。最後の有効係数の位置は、ビットストリーム133に書き込まれる。方法900は、プロセッサ205の制御下で、ステップ920から状態初期化ステップ930に進む。
状態初期化ステップ930では、量子化器状態Qstateが値ゼロに設定される。
さらに、ステップ930で、最後の有効係数を含むサブブロックが選択される。方法900は、プロセッサ205の制御下で、ステップ930から、符号化サブブロックフラグ決定ステップ940に進む。
ここでの説明は、いくつかのフラグが「TRUE」または「FALSE」であることを参照する。「TRUE」に設定することは、要件が満たされている、もしくはモードが選択されていることをフラグ値が示している、ことを意味する。「FALSE」に設定することは、要件が満たされていない、もしくはモードが選択されていないことをフラグ値が示している、ことを意味する。
符号化サブブロックフラグ決定ステップ940において、ビデオエンコーダ114は、符号化サブブロックフラグを決定し、設定する。現在選択されているサブブロックが状態初期化ステップ930で選択された最初のサブブロックである場合、符号化サブブロックフラグは「TRUE」に設定されるが、ビットストリーム133に符号化されない。現在選択されているサブブロックが、最後のサブブロックテスト970に関連して後述するように、最後のサブブロックとして識別される場合、符号化されたサブブロックフラグは「TRUE」に設定されるが、ビットストリーム133に符号化されない。
そわない場合、ビデオエンコーダ114は、符号化サブブロックフラグを、(i)選択されたサブブロックに属する4×4量子化係数に少なくとも1つの有意係数がある場合には「TRUE」に設定し、または(ii)有意係数がない場合には「FALSE」に設定し、符号化サブブロックフラグをビットストリーム133に符号化する。方法900は、プロセッサ205の制御下で、ステップ940から符号化サブブロックフラグテストステップ950に進む。
符号化サブブロックフラグテストステップ950で、方法900は、符号化サブブロックフラグの値を決定する。方法900は、符号化サブブロックフラグが「TRUE」に設定されている場合、サブブロック符号化ステップ960に進む。さもなければ、符号化サブブロックフラグが「FALSE」に設定されている場合、方法900は、最後のサブブロックテストステップ970に進む。
サブブロック符号化ステップ960において、エントロピーエンコーダ338は、選択されたサブブロック内の量子化係数をビットストリーム133に符号化する。ステップ960は、図13に関連して以下に説明する方法1300を呼び出す。方法900は、プロセッサの制御下で、ステップ960から最後のサブブロックテスト970に進む。
最後のサブブロックテスト970において、方法900は、選択されたサブブロックが現在の変換ブロックにおける最後のサブブロックであるかどうかを決定するように動作する。現在選択されているサブブロックが変換ブロックの左上のサブブロックである場合、ステップ900は「YES」に戻り、方法900は終了する。そうではなく、現在選択されているサブブロックが変換ブロックの左上のサブブロックでない場合、ステップ970は「NO」に戻り、方法900は次のサブブロックを選択するステップ980に進む。
次のサブブロックを選択するステップ980では、変換ブロック内の次のサブブロックが選択される。後方対角スキャン順序810における次のサブブロックが選択される。方法900はステップ980から、選択されたサブブロックの符号化サブブロックフラグを決定するステップ940に進む。
図10は、RRCプロセスによって残差係数432の変換ブロックを復号する方法1000を示す。方法1000は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1000は、プロセッサ205の実行下でビデオデコーダ134によって実行されてもよい。このように、方法1000は、コンピュータ読み取り可能な記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施することができる。
方法1000は、ビットストリーム133の受信時にエントロピーデコーダ420においてビデオエンコーダ134によって、および逆量子化器モジュール428において、いくつかの構成で実施される。方法1000は、最後位置復号ステップ1010で始まる。
最後位置復号ステップ1010では、残差係数432の変換ブロックの最後の有意係数位置がビットストリーム133から復号される。方法1000は、プロセッサ205の制御の下で、ステップ1010から状態初期化ステップ1020に進む。
状態初期化ステップ1020において、ビデオデコーダ134は、量子化器状態Qstateを値0に初期化する。さらに、ステップ1020において、最後の有意係数位置を含むサブブロックが選択される。方法1000はプロセッサ205の制御の下でステップ1020から符号化サブブロックフラグ決定ステップ1030に進む。
符号化サブブロックフラグ決定ステップ1030において、ビデオデコーダ134は符号化サブブロックフラグを決定する。現在選択されているサブブロックが状態初期化ステップ1020で選択された最初のサブブロックである場合、符号化サブブロックフラグは「TRUE」に設定される(すなわち、符号化サブブロックフラグは「TRUE」であると推測される)。現在選択されているサブブロックが、最後のサブブロックテスト1060において以下に説明されるように最後のサブブロックとして識別される場合、符号化サブブロックフラグは「TRUE」として推論される。さもなければ、ビデオデコーダ134は、ビットストリーム133から符号化サブブロックフラグを復号する。方法1000は、プロセッサ205の制御の下で、ステップ1030から符号化サブブロックフラグテスト1040に進む。
符号化サブブロックフラグテスト1040において、方法1000は、ステップ1030で決定された符号化サブブロックフラグの値をテストする。方法1000は、符号化サブブロックフラグが「TRUE」の値を有するとステップ1040で判断された場合、サブブロック復号ステップ1050に進む。そうではなく、ステップ1040において、符号化サブブロックフラグが「FALSE」の値を有すると判定された場合、現在選択されているサブブロック内の量子化された係数のすべてにゼロの値が割り当てられ、方法1000は最後のサブブロックテスト1060に進む。
サブブロック復号ステップ1050において、エントロピーデコーダ420は、ビットストリーム133から選択されたサブブロックの量子化係数を復号する。ステップ1050は、図14に関連して以下に説明する方法1400を呼び出す。方法1000は、プロセッサ205の制御下で最後のサブブロックテスト1060に進む。
最後のサブブロックテスト1060で、現在選択されているサブブロックが変換ブロックの左上のサブブロックである場合、ステップ1060は「YES」に戻り、方法1000は係数スケールステップ1080に進む。そわない場合、ステップ1060は「NO」に戻り、方法1000は次のサブブロックを選択するステップ1070に進む。
次のサブブロックを選択するステップ1070において、後方対角スキャン順序810における次サブブロックが選択される。方法1000は、プロセッサ205の制御の下で、ステップ1070から符号化サブブロックフラグ決定ステップ1030へ進む。
係数スケールステップ1080において、逆量子化器モジュール428は量子化係数424にスケーリングを適用し、再構成された残差係数432を生成する。サブブロックは、復号された符号ビットを使用してサブブロックの残差係数を再構成することによって復号される。ステップ1080は、図12に関連して以下に説明する方法1200を呼び出す。方法1000は、ステップ1080の実行で終了する。
図11は変換ブロックの残差係数332を量子化し、量子化係数336を生成するための方法1100を示す。方法1100は、方法900のステップ910においてTBに対して実施される。方法1100は、DQテスト1110で始まる。
DQテスト1110において、ビデオエンコーダ114は、依存量子化が残差係数332を量子化するために使用されるかどうかを決定する。ビデオエンコーダ114は有効依存量子化フラグの値をチェックし、これは、ビットストリーム133においてハイレベルシンタックスとして通知される。有効依存量子化フラグは、依存量子化がフラグの範囲内で許可されるかどうかを決定する。たとえば、シーケンスレベル依存量子化フラグは、ビデオシーケンス全体を符号化するときに依存量子化が許可されるかどうかを決定する。ピクチャレベル依存量子化フラグは、現在のピクチャを符号化するときに依存量子化が許可されるかどうかを決定し、シーケンスレベル依存量子化フラグの値よりも優先される。有効依存量子化フラグが「FALSE」である場合、ステップ1110は「NO」を返し、方法1100は、スカラー量子化ステップ1120に進む。
DQテスト1110の一構成では、有効依存量子化フラグが「TRUE」である場合、ビデオエンコーダ114はまた、現在のTBについての変換スキップフラグの値をチェックする。有効依存量子化フラグが「TRUE」であり、変換スキップフラグが「TRUE」である場合、ステップ1110は「NO」を返し、方法1100はスカラー量子化ステップ1120に進む。そわなければ、有効依存量子化フラグが「TRUE」であり、変換スキップフラグが「FALSE」である場合、ステップ1110は「YES」を返し、方法1100は依存量子化ステップ1130に進む。
DQテスト1110の別の構成では、有効依存量子化フラグが「TRUE」である場合、ビデオエンコーダ114はまた、TSRC無効フラグの値をチェックする。有効依存量子化フラグが「TRUE」であり、TSRC無効フラグが「TRUE」である場合、ステップ1110は「NO」を返し、方法1100は、スカラー量子化ステップ1120に進む。そわなければ、有効依存量子化フラグが「TRUE」であり、TSRC無効フラグが「FALSE」である場合、ステップ1110は「YES」を返し、方法1100は依存量子化ステップ1130に進む。
DQテスト1110のさらに別の構成では、有効依存量子化フラグが「TRUE」である場合、ビデオエンコーダ114はまた、現在のTBの量子化パラメータ(QP)の値をチェックする。QPは、残差係数332に適用される量子化の程度を示す。QPは最初のQPiと、ビデオエンコーダ114のビット深度BDに依存するオフセットとから、QP=QPi+6*(BD-8)として決定される。たとえば、QPiが4で、ビット深度が8の場合、QPは4であると判断される。QPiが-8であり、ビット深度が10である場合、QPは4として決定される。典型的には、4のQPが、残差係数が量子化されないことを示し、したがって、可逆演算が可能である。しかしながら、QPのより高い値は、依然として可逆演算を達成することができる。例えば、ビデオデータ113が、もともと8のビット深度でキャプチャされたが、より高いビット深度でビデオエンコーダ114に供給される場合、より高いQPで可逆演算が可能である。例えば、ビデオデータ113がビット深度8でキャプチャされたが、ビット深度10でビデオエンコーダ114に供給される場合、4、10、または16のQPで可逆演算が可能である。可逆演算が可能であるQPは、高レベルシンタックスパラメータセットで通知される、変換スキップブロックのための最小QPによって示され得る。有効依存量子化フラグが「TRUE」であり、QPが4(または可逆演算を示す任意の値)である場合、ステップ1110は「NO」を返し、方法1100はスカラー量子化ステップ1120に進む。そわない場合、有効依存量子化フラグが「TRUE」であり、QPが4(または可逆演算を示す同様の値)でない場合、ステップ1110は「YES」を返し、方法1100は依存量子化ステップ1130に進む。
スカラー量子化ステップ1120において、残差係数332はr[n]として表される。次いで、以下の式(1)に従って残差係数r[n]を量子化することによって、量子化係数q[n]が生成される。
q[n]=(k*r[n]+offset)>>qbits (1)
式(1)において、kはスケーリングファクタであり、qbitsは粗い量子化ファクタであり、offsetは量子化閾値の配置を制御する。k、qbits、およびoffsetは、現在のTBの量子化パラメータの値に基づいて決定される。たとえば、QPが4の場合、k=1、qbits=0、offset=0である。次いで、QPが4の場合、q[n]=r[n]となり、スカラー量子化ステップで損失は発生しない。方法1100は、プロセッサ205の制御下で、ステップ1120からSBHテスト1140に進む。
従属量子化ステップ1130において、残差係数r[n]の各々は、複数のスカラ量子化器の選択のうちの1つによって量子化され得る。同じQPの場合、スカラー量子化器は同じ量子化分割数を有するが、量子化閾値が互いに相対的にオフセットされる。特定の残差係数r[n]に対するスカラー量子化器は、係数ごとに更新される現在の量子化器状態Qstateに依存し、結果として生じるq[n]のパリティ(最下位ビット)によって依存する。以前の状態への依存性のために、最適な量子化結果は、係数ごとに決定されない。最適な量子化結果を決定する1つの効率的な方法は、各係数位置における可能な量子化状態の「トレリス(trellis)」を構築することによる。最適な量子化結果は、トレリスを通る最良のパスを等価的に見つけることによって見つけることができる。最適なトレリスパスは、ビタビアルゴリズムを適用することによって決定することができる。方法1100は、ステップ1130の実行で終了する。
SBHテスト1140において、ビデオエンコーダ114は、TBの係数を符号化する前に、量子化係数q[n]を修正するために符号ビットハイディングが使用されるかどうかを判定する。ビデオエンコーダ114は、有効符号ビットハイディングフラグの値を確認する。有効符号ビットハイディングフラグは、ビットストリーム133においてハイレベルシンタックスとして通知される。例えば、有効符号ビットハイディングフラグは、ピクチャヘッダにおいて通知されることができる。有効依存量子化フラグが「TRUE」の場合、有効符号ビットハイディングフラグは暗黙的に「FALSE」である。有効符号ビットハイディングフラグが「FALSE」の場合、ステップ1140は「NO」を返し、方法1100は終了する。
SBHテスト1140の一構成では、判定が有効符号ビットハイディングフラグの値と、現在のTBの変換スキップフラグの値と、に依存する。有効符号ビットハイディングフラグが「TRUE」である場合、ビデオエンコーダ114はまた、現在のTBについての変換スキップフラグの値をチェックする。有効符号ビットハイディングフラグが「TRUE」であり、変換スキップフラグが「TRUE」である場合、ステップ1140は「NO」を返し、方法1100は終了する。そわなければ、有効符号ビットハイディングフラグが「TRUE」であり、変換スキップフラグが「FALSE」である場合、ステップ1140は「YES」を返し、方法1100は、パリティ調整ステップ1150に進む。
SBHテスト1140の別の構成では、判定が有効符号ビットハイディングフラグの値およびTSRC無効フラグの値に依存する。有効符号ビットハイディングフラグが「TRUE」である場合、ビデオエンコーダ114は、TSRC無効フラグの値もチェックする。有効符号ビットハイディングフラグが「TRUE」であり、TSRC無効フラグが「TRUE」である場合、ステップ1140は「NO」を返し、方法1100は終了する。そわない場合、有効符号ビットハイディングフラグが「TRUE」であり、TSRC無効フラグが「FALSE」である場合、ステップ1140は「YES」を返し、方法1100は、パリティ調整ステップ1150に進む。
SBHテスト1140のさらに別の構成では、判定が有効符号ビットハイディングフラグの値と、現在のTBの量子化パラメータ(QP)の値と、に依存する。有効符号ビットハイディングフラグが「TRUE」である場合、ビデオエンコーダ114はまた、現在のTBについてのQPの値をチェックする。有効符号ビットハイディングフラグが「TRUE」であり、QPが4(または可逆演算を示す任意の値)である場合、ステップ1140は「NO」を返し、方法1100は終了する。そうではなく、有効符号ビットハイディングフラグが「TRUE」であり、QPが4(または可逆演算を示す同様の値)でない場合、ステップ1140は「YES」を返し、方法1100はパリティ調整ステップ1150に進む。
パリティ調整ステップ1150において、ビデオエンコーダ114は、現在のTB内のサブブロックの各々について、最初および最後の有意係数の位置をチェックする。サブブロックの最初の有意位置と最後の有意位置との間の差が閾値(典型的には3)より大きい場合、そのサブブロックに対して符号ビットハイディングが使用される。符号ビットハイディングが使用されるサブブロックごとに、ビデオエンコーダ114は、サブブロック内の最初の有意係数の符号をチェックし、それに応じてサブブロック内の係数のパリティを調整する。係数のパリティは係数が偶数の場合はゼロであり、係数が奇数の場合は1である。複数の係数のパリティの合計は奇数の係数の個数が奇数の場合はゼロであり、奇数の係数の個数が偶数の場合は1である。サブブロック内の最初の有意係数の符号が正の場合、サブブロック内の係数はパリティの合計がゼロになるように調整される。サブブロック内の最初の有意係数の符号が負の場合、サブブロック内の係数はパリティの合計が1になるように調整される。方法1100は、ステップ1150の実行後に終了する。
図12は、量子化係数424にスケーリングを適用し、再構成された残差係数432を生成するための方法1200を示す。方法1200は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1200は、プロセッサ205の実行下で、ビデオデコーダ134によって実行されてもよい。このように、方法1200は、コンピュータ読み取り可能な記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施することができる。方法1200は、方法1000のステップ1080で実施される。方法1200は、DQテスト1210で始まる。
DQテスト1210において、ビデオデコーダ134は、従属量子化が量子化係数424を逆量子化するために使用されるかどうかを決定する。ビデオデコーダ134は、有効依存量子化フラグの値をチェックし、これは、ビットストリーム133から復号されてもよく、または他の高レベルシンタックスフラグの値に基づいて推論されてもよい。有効依存量子化フラグが「FALSE」である場合、ステップ1210は「NO」を返し、方法1200は、逆スカラー量子化ステップ1220に進む。
DQテスト1210の一構成では、有効依存量子化フラグが「TRUE」である場合、ビデオデコーダ134は、現在のTBの変換スキップフラグの値もチェックする。有効依存量子化フラグが「TRUE」であり、変換スキップフラグが「TRUE」である場合、ステップ1210は「NO」を返し、方法1100は、逆スカラー量子化ステップ1220に進む。そわなければ、有効依存量子化フラグが「TRUE」であり、変換スキップフラグが「FALSE」である場合、ステップ1210は「YES」を返し、方法1100は、逆依存量子化ステップ1230に進む。
DQテスト1210の別の構成では、有効依存量子化フラグが「TRUE」である場合、ビデオデコーダ134は、TSRC無効フラグの値もチェックする。有効依存量子化フラグが「TRUE」であり、TSRC無効フラグが「TRUE」である場合、ステップ1210は「NO」を返し、方法1100は、逆スカラー量子化ステップ1220に進む。そわなければ、有効依存量子化フラグが「TRUE」であり、TSRC無効フラグが「FALSE」である場合、ステップ1210は「YES」を返し、方法1100は、逆依存量子化ステップ1230に進む。
DQテスト1210のさらに別の構成では、有効依存量子化フラグが「TRUE」である場合、ビデオデコーダ134は、現在のTBの量子化パラメータ(QP)の値もチェックする。有効依存量子化フラグが「TRUE」であり、QPが4(または可逆演算を示す任意の値)である場合、ステップ1210は「NO」を返し、方法1100は逆スカラー量子化ステップ1220に進む。そわない場合、有効依存量子化フラグが「TRUE」であり、QPが4(または可逆演算を示す同様の値)でない場合、ステップ1210は「YES」を返し、方法1100は逆依存量子化ステップ1230に進む。
逆スカラー量子化ステップ1220において、ビデオデコーダ134は、量子化係数424をスケーリングし、再構成された残差係数432を生成する。量子化係数424は、q[n]として表される。再構成された残差係数r[n]は、以下の式(2)に従って量子化係数q[n]をスケーリングすることによって生成される。
式(2)において、sは、現在のTBに対するQPの値に基づいて決定されるスケーリングファクタである。例えば、QPが4の場合、s=1かつr[n]=q[n]である。方法1200は、ステップ1220の実行で終了する。
逆依存量子化ステップ1230において、ビデオデコーダ134は、量子化係数424に逆依存量子化を適用し、再構成された残差係数432を生成する。量子化器状態Qstateは、最初にゼロにリセットされる。量子化係数424は、q[n]で表される。各係数位置nは、後方対角スキャン順810で訪れ、各再構成残差係数r[n]は式(3)に従って計算される。
式(3)において、sは現在のTBに対するQPの値に基づいて決定されたスケーリングファクタである。
各再構成残差係数r[n]が計算された後、量子化器状態は表1に従ってq[n]のパリティに基づいて更新される。
方法1200は、ステップ1230の実行で終了する。
量子化係数336の統計的特性を利用するために、量子化係数は符号化の前に、ビデオエンコーダ114によって(典型的にはエントロピーエンコーダ338によって)いくつかのシンタックス要素に二値化される。例えば、量子化係数336は、しばしばゼロの値を有するので、1つのシンタックス要素は有意フラグであり、ゼロの値を有する量子化係数に対して「FALSE」に設定される。有意フラグが「FALSE」に設定されている場合、関連する量子化係数のそれ以上のシンタックス要素は通知されない。有意フラグは、コンテキスト適応2進算術符号化(CABAC)エントロピー符号化器を使用することによってビットストリーム133に符号化され得る。
CABAC符号器は、コンテキスト符号化シンタックス要素を比較的効率的に符号化するが、コンテキスト符号化シンタックス要素の数を制限することは一般に、ハードウェア実装のための計算要件およびコストを最小化するために望ましい。したがって、量子化係数336がエントロピーエンコーダ338によっていくつかのシンタックス要素に二値化された後、いくつかのシンタックス要素はビットストリーム133にコンテキスト符号化され、他のシンタックス要素はビットストリーム133にバイパス符号化される。コンテキスト符号化シンタックス要素ビンの総数は、変換ブロックごとに制限される。VVC規格では、制限はサンプル当たり1.75ビンに設定される。例えば、64個のサンプルからなる8×8変換ブロックの場合、コンテキスト符号化ビンバジェットは112ビンに設定される。TBをビットストリーム133に符号化する過程で、シンタックス要素がコンテキスト符号化されるときはいつでも、残りのコンテキスト符号化ビンバジェットが追跡され、デクリメントされる。残りのコンテキスト符号化ビンバジェットが枯渇すると、残りの量子化係数および関連するシンタックス要素はバイパス符号化されなければならない。
図13は、現在選択されたサブブロックの量子化係数(336)をビットストリーム133に符号化する方法1300を示す。方法1300は、方法900のステップ960で実施される。方法1300は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1300は、プロセッサ205の実行下でビデオエンコーダ114によって実行され得る。このように、方法1300は、コンピュータ読み取り可能な記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施することができる。方法1300は、最初の係数を選択するステップ1310で始まる。
最初の係数を選択するステップ1310において、方法1300は、現在のサブブロックの量子化係数を選択する。現在のサブブロックが最後の有意係数位置を含む場合、現在の選択された係数が最後の有意係数に設定される。それ以外の場合、現在のサブブロックに最後の有意係数位置が含まれていない場合、現在選択されている係数は現在のサブブロックの右下の係数に設定される。方法1300は、コンテキスト符号化使用チェック1320に進む。
コンテキスト符号化使用チェック1320において、ビデオエンコーダ114は、残りのコンテキスト符号化ビンバジェットが4以上であるかどうかをチェックする。残りのコンテキスト符号化ビンバジェットが4以上である場合、ステップ1320は「YES」を返し、方法1300は、コンテキスト符号化シンタックス要素符号化ステップ1330に進む。そうではなく、現在のコンテキスト符号化ビンバジェットが4未満である場合、ステップ1320は「NO」を返し、方法1300はリマインダパス(remainder pass)符号化ステップ1370に進む。
コンテキスト符号化シンタックス要素符号化ステップ1330において、ビデオエンコーダ114は、潜在的に有意フラグ、1より大きいフラグ、パリティフラグおよび3より大きいフラグを含むCABAC符号化器を使用して、多数のシンタックス要素をビットストリーム133に符号化することができる。シンタックス要素に関連する各ビンは、「コンテキストモデル」を使用してCABAC符号化器によって符号化される。各ビンのコンテキストモデルは、量子化器状態Qstateの現在の値に応じて選択され得る。さらに、コンテキスト符号化ビンがCABAC符号化器によってビットストリーム133に符号化されるときはいつでも、残りのコンテキスト符号化ビンバジェットは、ステップ1330で1だけ低減される。
ステップ1330において、現在の係数が最後の有意係数である場合、有意フラグは「TRUE」に設定されるが、ビットストリーム133には符号化されない。現在の選択されたサブブロックが、後方スキャン順序810における最初または最後のサブブロックではなく、現在の選択された係数が最後係数チェック1350において以下に説明されるような最後係数であり、現在の選択されたサブブロックにおける以前の係数に対するすべての有意フラグが「FALSE」であった場合、有意フラグは「TRUE」に設定される。有意フラグは、ビットストリーム133に符号化されない。現在の係数がゼロの大きさを有する場合、ステップ1330において、有意フラグは「FALSE」に設定され、ビットストリーム133にコンテキスト符号化される。さもなければ、有意フラグは「TRUE」に設定され、ステップ1330でビットストリーム133にコンテキスト符号化される。
現在の係数が1の大きさを有する場合、1より大きいフラグが「FALSE」に設定され、ステップ1330でビットストリーム133にコンテキスト符号化される。そわない場合、1より大きいフラグは「TRUE」に設定され、ビットストリーム133にコンテキスト符号化される。
現在の係数が少なくとも2の大きさを有する場合、パリティフラグは、現在の係数が偶数である場合には「FALSE」に設定され、現在の係数が奇数である場合には「TRUE」に設定される。パリティフラグは、ステップ1330でビットストリーム133にコンテキスト符号化される。現在の係数が3より大きい大きさを有する場合、3より大きいフラグが「TRUE」に設定され、ステップ1330でビットストリーム133にコンテキスト符号化される。そうではなく、現在の係数が2または3の大きさを有する場合、3より大きいフラグが「FALSE」に設定され、ビットストリーム133にコンテキスト符号化される。
方法1300は、プロセッサ205の制御下で、ステップ1330からDQテスト1340に進む。1310で選択された係数に応じて、方法1300は、有意フラグを設定(または場合によっては符号化)した後、ステップ1340に進む。さもなければ、方法1300は、1より大きいフラグ、パリティフラグおよび3より大きいフラグのうちの最後の適切な1つを符号化した後、ステップ1340に進む。
DQテスト1340では、DQテスト1110でチェックしたのと同じ条件を用いて、ステップ1340が「YES」を返すのかまたは「NO」を返すのかを判定する。ステップ1340が「YES」を返す場合、方法1300は、Qstate更新ステップ1345に進む。さもなければ、ステップ1340が「NO」を返す場合、方法1300は、最後係数チェック1350に進む。
Qstate更新ステップ1345では、量子化器状態Qstateが表1による現在の係数のパリティに基づいて更新される。方法1300は、ステップ1345から最後係数チェック1350に進む。
最後係数チェック1350において、ビデオエンコーダ114は、現在選択されている係数が現在選択されているサブブロックの左上の係数であるかどうかをチェックする。現在選択されている係数が現在選択されているサブブロックの左上の係数である場合、ステップ1350は「YES」を返し、方法1300はリマインダパス符号化ステップ1370に進む。さもなければ、現在の係数が左上の係数でない場合、ステップ1350は「NO」を返し、方法1300は、次の係数を選択するステップ1360に進む。
次の係数を選択するステップ1360では、後方対角スキャン順序810において、現在選択されているサブブロックの次の係数が選択される。方法1300は、ステップ1360からコンテキスト符号化使用チェック1320に進む。
リマインダパスを符号化するステップ1370では、現在選択されているサブブロックの量子化係数の残りの大きさが二値化され、例えばエントロピーエンコーダ338によってビットストリーム133にバイパス符号化される。量子化係数は例えば、後方対角スキャン順序810で符号化される。量子化係数がCABACコーダによってコンテキスト符号化された(すなわち、コンテキスト符号化使用チェック1320がパスされた(「YES」を返した))場合、3より大きいフラグが「TRUE」である場合、スキャン位置nにおける量子化係数は、残りの大きさr[n]を有する。残りの大きさは、式(4)を用いて決定される。
r[n]=(x[n]-4)>>1, (4)
ここで、式(4)、x[n]は、スキャン位置nにおける量子化係数の絶対的な大きさである。大きさr[n]は二値化され、ビットストリーム133にバイパス符号化される。量子化係数がコンテキスト符号化されなかった(コンテキスト符号化使用チェック1320がパスされなかった/「NO」を返した)場合、絶対的な大きさx[n]が二値化され、ビットストリーム133にバイパス符号化される。方法1300は、ステップ1370からSBHテスト1380に進む。
SBHテスト1380では、SBHテスト1140でチェックされたのと同じ条件を使用して、ステップ1380が「YES」を返すのか「NO」を返すのかを判定する。SBHテスト1140が「NO」を返す場合、ステップ1380は「NO」を返し、方法1300はN個の符号を符号化するステップ1390に進む。さもなければ、ビデオエンコーダ114は、現在のサブブロックの最初と最後の有意係数の位置をチェックする。最初の有意位置と最後の有意位置との間の差が3より大きい場合、ステップ1380は「YES」を返し、方法1300はN-1個の符号を符号化するステップ1395に進む。そわない場合、ステップ1380は「NO」を返し、方法1300はN個の符号を符号化するステップ1390に進む。
ステップ1140に関連して説明されるように、符号ビットハイディングテストは、異なる実装における多数の代替フラグまたは設定に依存することができる。有効符号ビットハイディングフラグが設定されている(「TRUE」値を有する)場合、異なる実装は、TBの変換スキップフラグ、TSRC無効フラグ、またはTBのQPが可逆符号化に関連する閾値を満たすかどうかに基づいて判定を行うことができる。したがって、ステップ1380は、変換ブロック自体に関連する値またはフラグ、あるいはTSRC無効フラグの上位レベル値に応じて、符号ビットハイディングが有効か否かを決定する。ステップ1380は、可逆符号化を実施するためのある程度の柔軟性を与える。変換ブロックに関連する値またはフラグを使用して符号がハイディングを有効にするかどうかを決定する実装は、RRCを使用して可逆符号化を実装する際の柔軟性を可能にするのに特に適している。
N個の符号を符号化するステップ1390では、現在選択されているサブブロックの任意の有意係数の符号ビットがビットストリーム133にバイパス符号化される。符号ビットは例えば、後方対角スキャン順序810に基づいてビットストリーム133にバイパス符号化される。方法1300は、ステップ1390の実行後に終了する。
N-1個の符号を符号化するステップ1395では、現在選択されているサブブロックの有意係数の符号ビットが後方対角スキャン順序810に基づいてビットストリーム133にバイパス符号化される。最初の有意係数(後方対角スキャン順序810で最後に訪れる)に関連する符号ビットは、ビットストリーム133に符号化されない。言い換えれば、現在選択されているサブブロックにN個の有意係数がある場合、N-1個の符号ビットが、ビットストリーム133にバイパス符号化される。方法1300は、ステップ1395の実行で終了する。
図14は、ビットストリーム133から現在選択されたサブブロックの量子化係数(424)を復号するための方法1400を示す。方法1400は、方法1000のステップ1050で実施される。方法1400は、構成されたFPGA、ASIC、またはASSPなどの装置によって実施され得る。さらに、方法1400は、プロセッサ205の実行下で、ビデオデコーダ134によって実行されてもよい。このように、方法1400は、コンピュータ読み取り可能な記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施することができる。方法1400は、最初の係数を選択するステップ1410で始まる。
最初の係数を選択するステップ1410において、方法1400は、現在のサブブロックの最初の量子化係数を選択する。現在のサブブロックが最後の有意係数位置を含む場合、現在の選択された係数が最後の有意係数に設定される。それ以外の場合、現在選択されている係数は現在のサブブロックの右下の係数に設定される。方法1400は、ステップ1410からコンテキスト符号化使用チェックステップ1420に進む。
コンテキスト符号化使用チェック1420において、ビデオデコーダ134は、残りのコンテキスト符号化ビンバジェットが閾値を満たすかどうか、典型的には変換ブロックのための残りのコンテキスト符号化ビンバジェットが4ビン以上であるかどうかをチェックする。残りのバジェットが4以上である場合、ステップ1420は「YES」を返し、方法1400はコンテキスト符号化シンタックス要素決定ステップ1430に進む。そうではなく、残りのCABACバジェットが閾値(4ビン)未満である場合、ステップ1420は「NO」を返し、方法1400はリマインダパス復号ステップ1470に進む。
コンテキスト符号化シンタックス要素決定ステップ1430において、ビデオデコーダ134は、CABACコーダを使用して、ビットストリーム133から多数のコンテキスト符号化シンタックス要素を復号することができる。シンタックス要素に関連する各ビンは、「コンテキストモデル」を使用してCABACコーダによって復号される。各ビンのコンテキストモデルは、量子化器状態Qstateの現在の値に応じて選択され得る。さらに、コンテキスト符号化ビンがビットストリーム133からCABACコーダによって復号されるときはいつでも、残りのコンテキスト符号化ビンバジェットは1だけ減少される。
現在の係数が最後の有意係数である場合、有意フラグは、ビットストリーム133から復号されるのではなく、「TRUE」と推論される。現在の選択されたサブブロックが後方スキャン順序810における最初または最後のサブブロックではなく、現在の選択された係数が最後係数チェック1450において以下に説明されるような最後係数であり、現在の選択されたサブブロックにおける以前の係数に対するすべての有意フラグが「FALSE」であった場合、有意フラグは「TRUE」と推論される。さもなければ、有意フラグは、ステップ1430でビットストリーム133からコンテキスト復号される。有意フラグが「FALSE」に設定されている場合、現在選択されている係数にゼロの値が割り当てられ、方法1400はDQテスト1440に進む。
有意フラグが「TRUE」に設定されている場合、ステップ1430で、1より大きいフラグがビットストリーム133からコンテキスト復号される。1より大きいフラグが「FALSE」に設定されている場合、現在選択されている係数に1の大きさが割り当てられ、方法1400はDQテスト1440に進む。
1より大きいフラグが「TRUE」に設定されている場合、パリティフラグおよび3より大きいフラグは、ビットストリーム133からコンテキスト復号される。方法1400は、DQテスト1440に進む。ステップ1430で決定されるフラグの数は、ステップ1410で選択された係数の位置および値に依存する。ステップ1430からの進行は、有意フラグが推論または復号された後、または1より大きいフラグ、パリティフラグまたは3より大きいフラグの適切なものを復号した後に生じることができる。
DQテスト1440では、DQテスト1210でチェックしたのと同じ条件を用いて、ステップ1440が「YES」を返すのか「NO」を返すのかを判定する。ステップ1440が「YES」を返すと、方法1400はQstate更新ステップ1445に進む。そうではなく、ステップ1440が「NO」を返す場合、方法1400は、最後係数チェック1450に進む。
Qstate更新ステップ1445では、量子化器状態Qstateが表1に従って現在選択されている係数のパリティに基づいて更新される。現在の選択された係数がゼロの値を有する場合、パリティはゼロである。パリティは、現在選択されている係数が1の大きさを有する場合に1である。そわない場合、パリティフラグが「FALSE」に設定されている場合はパリティはゼロであり、パリティフラグが「TRUE」に設定されている場合はパリティは1である。方法1400は、ステップ1445から最後係数チェック1450に進む。
最後係数チェックステップ1450において、ビデオデコーダ134は、現在選択されている係数が現在選択されているサブブロックの左上の係数であるかどうかをチェックする。現在選択されている係数が現在選択されているサブブロックの左上の係数である場合、ステップ1450は「YES」を返し、方法1400はリマインダパス復号ステップ1470に進む。そうではなく、現在選択されている係数が左上の係数でない場合、ステップ1450は「NO」を返し、方法1400は次の係数を選択するステップ1460に進む。
次の係数を選択するステップ1460では、後方対角スキャン順序810において、現在選択されているサブブロックの次の係数が選択される。方法1400は、ステップ1460からコンテキスト符号化使用チェック1420に進む。
リマインダパス復号ステップ1470では、現在選択されているサブブロックの量子化係数の残りの大きさが、ビットストリーム133からバイパス復号される。量子化係数は、後方対角スキャン順序810で処理される。量子化係数がコンテキスト復号された(コンテキスト符号化使用チェック1420がパスされた、または「YES」を返した)、3より大きいフラグが「TRUE」の値で復号された場合、残りの大きさr[n]がビットストリーム133からバイパス復号され、ここで、nは量子化係数のスキャン位置である。量子化係数の絶対的な大きさx[n]は、x[n]=4+p[n]+2*r[n]として決定され、ここで、パリティフラグが「FALSE」として復号された場合、p[n]はゼロの値を有し、パリティフラグが「TRUE」として復号された場合、p[n]は1の値を有する。
量子化係数がコンテキスト復号され、1より大きいフラグが「TRUE」として復号されたが、3より大きいフラグが復号されなかった、または「FALSE」として復号された場合、絶対的な大きさはx[n]=2+p[n]として決定される。量子化係数がコンテキスト復号されなかった(コンテキスト符号化使用チェック1420がパスされず、「NO」を返した)場合、絶対的な大きさx[n]はビットストリーム133からバイパス復号される。方法1400は、ステップ1470からSBHテスト1480に進む。
SBHテスト1480において、ビデオデコーダ134は、符号ビットハイディングが使用されているかどうか、すなわち、現在選択されているサブブロックに対する1つの符号ビットが推論されているかどうかを判定する。ステップ1480で使用されるテストは、エンコーダ側のステップ1140で使用されるテストに関する。ビデオデコーダ134は、有効符号ビットハイディングフラグの値をチェックし、これは、ビットストリーム133内で高レベルシンタックスとして通知されてもよい。有効依存量子化フラグが「TRUE」の場合、有効符号ビットハイディングフラグは「FALSE」と推論される。有効符号ビットハイディングフラグが「FALSE」の場合、ステップ1480は「NO」を返し、方法1400は、符号復号ステップ1490に進む。
ビデオデコーダ134は、現在選択されているサブブロックの最初と最後の有意係数の位置をチェックする。最初の有意位置と最後の有意位置との間の差が3以下である場合、ステップ1480は「NO」を返し、方法1400は符号復号ステップ1490に進む。
SBHテスト1480の1つの構成では、判定が有効符号ビットハイディングフラグの値と、現在のTBに対する変換スキップフラグの値と、に依存する。有効符号ビットハイディングフラグが「TRUE」であり、最初の有意位置と最後の有意位置との間の差が3より大きい場合、ビデオデコーダ134は、現在のTBに対する変換スキップフラグの値もチェックする。変換スキップフラグが「TRUE」である場合、ステップ1480は「NO」を返し、方法1400は、符号復号ステップ1490に進む。さもなければ、変換スキップフラグが「FALSE」である場合、ステップ1480は「YES」を返し、方法1400は、符号を復号および推論するステップ1495に進む。
SBHテスト1480の別の構成では、判定が有効符号ビットハイディングフラグの値およびTSRC無効フラグの値と、に依存する。有効符号ビットハイディングフラグが「TRUE」であり、最初の有意位置と最後の有意位置との間の差が3より大きい場合、ビデオデコーダ134は、TSRC無効フラグの値もチェックする。TSRC無効フラグが「TRUE」の場合、ステップ1480は「NO」を返し、方法1400は符号復号ステップ1490に進む。さもなければ、TSRC無効フラグが「FALSE」である場合、ステップ1480は「YES」を返し、方法1400は、符号を復号および推論するステップ1495に進む。
SBHテスト1480のさらに別の構成では、判定が有効符号ビットハイディングフラグの値、および現在のTBの量子化パラメータ(QP)の値、変換ブロックの量子化パラメータQPの最初の有意位置と最後の有意位置との間の差に依存する。有効符号ビットハイディングフラグが「TRUE」であり、最初の有意位置と最後の有意位置との間の差が3より大きい場合、ビデオデコーダ134は、現在のTBのQPの値もチェックする。QPが4(または可逆演算を示す任意の値)である場合、ステップ1480は「NO」を返し、方法1400は符号復号ステップ1490に進む。そうではなく、QPが4(または可逆演算を示す同様の値)ではない場合、ステップ1480は「YES」を返し、方法1400は、符号を復号および推論するステップ1495に進む。
符号パス復号ステップ1490では、現在選択されているサブブロックの任意の有意係数の符号ビットがビットストリーム133からバイパス復号される。符号ビットは、ビットストリーム133から後方対角スキャン順序810でバイパス復号される。関連する符号ビットが1の値を有する場合、量子化係数の値は-x[n]に設定される。量子化係数の値は、関連する符号ビットがゼロの値を有する場合、x[n]に設定される。方法1400は、ステップ1490の実行で終了する。
符号を復号および推論するステップ1495では、現在選択されているサブブロックの有意係数の符号ビットがビットストリーム133から後方対角スキャン順序810でバイパス復号される。最初の有意係数(後方対角スキャン順序810で最後に訪れた)に関連する符号ビットは、ビットストリーム133から復号されない。言い換えれば、現在選択されているサブブロックにN個の有意係数がある場合、N-1個の符号ビットが、ビットストリーム133からバイパス復号される。最初の有意係数に関連する符号ビットは、有意係数のパリティの合計に基づいて推論される。パリティの合計がゼロである場合、最初の有意係数に関連する符号ビットはゼロと推論される。パリティの合計が1である場合、最初の有意係数に関連する符号ビットが1として推論される。関連する符号ビットが1の値を有する場合、量子化係数の値は-x[n]に設定される。量子化係数の値は、関連する符号ビットがゼロの値を有する場合、x[n]に設定される。その後、方法1400は終了する。
方法900および1000にて記載される構成は、通常の残差符号化プロセスを使用しながら、ビデオデータの可逆圧縮が実行されることを可能にする。依存量子化および符号ビットハイディングは、可逆演算が望まれるときに柔軟に無効化される非可逆符号化ツールであるが、非可逆符号化ブロックにおいて改善された符号化性能を達成するために依然として利用可能であり得る。
産業上の利用可能性
記載される構成は、コンピュータ及びデータ処理産業に、特にビデオ及び画像信号などの信号の復号、符号化のためのディジタル信号処理に適用可能であり、高い圧縮効率を達成する。
上記は、本発明のいくつかの実施形態のみを記載し、本発明の範囲および精神から逸脱することなく、本発明に修正および/または変更を加えることができ、実施形態は例示的であり、限定的ではない。