添付図面のいずれか1つ以上において、同じ参照数字を有するステップおよび/または特徴が参照される場合、それらのステップおよび/または特徴は、反対の意図が現れない限り、本明細書の目的のために、同じ機能(複数可)または動作(複数可)を有する。
映像圧縮規格のビットストリームフォーマットのシンタックスは、「シンタックス構造」の階層構造として定義されている。それぞれの構文構造は、構文要素のセットを定義し、そのうちのいくつかは他の要素に条件付けされることがある。シンタックスでは、ツールの有用な組み合わせに対応するシンタックス要素の組み合わせのみを許可すると、圧縮の効率が向上する。さらに、実装は可能であっても、結果として生じる実装コストに対して圧縮の利点が不十分であると考えられる構文要素の組み合わせを禁止することによっても、複雑さが軽減される。
図1は、映像符号化および復号化システム100の機能モジュールを示す概略ブロック図である。システム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は、送信機116によって、符号化されたビデオデータ(または「符号化されたビデオ情報」)として、通信チャネル120を介して送信される。また、ビットストリーム115が、後で通信チャネル120を介して送信されるまで、または通信チャネル120を介した送信に代えて、「フラッシュ」メモリやハードディスクドライブなどの非一時的記憶装置122に記憶されることも可能である。例えば、符号化されたビデオデータは、ビデオストリーミングアプリケーションのために広域ネットワーク(WAN)を介して顧客に要求に応じて提供されることがある。
デスティネーションデバイス130は、受信機132、ビデオ復号化器134、および表示装置136を含む。受信機132は、通信路120から符号化されたビデオデータを受信し、受信したビデオデータをビットストリーム(矢印133で示す)としてビデオ復号化器134に渡す。そして、ビデオ復号化器134は、復号化されたフレームデータ(矢印135で示す)を表示装置136に出力する。復号化されたフレームデータ135は、フレームデータ113と同じクロマフォーマットを有する。表示装置136の例としては、陰極線管、スマートフォンやタブレットコンピュータ、コンピュータモニタ、あるいは単体のテレビに搭載されているような液晶ディスプレイなどが挙げられる。また、ソースデバイス110およびデスティネーションデバイス130のそれぞれの機能が単一のデバイスで具現化されることも可能であり、その例としては、携帯電話端末やタブレットコンピュータなどが挙げられる。復号化されたフレームデータは、ユーザへの提示の前にさらに変換されてもよい。例えば、特定の緯度及び経度を有する「ビューポート」は、シーンの360oビューを表現するために、投影フォーマットを使用して復号化されたフレームデータからレンダリングされ得る。
上述した例示的な装置にかかわらず、ソースデバイス110およびデスティネーションデバイス130のそれぞれは、典型的にはハードウェアおよびソフトウェアコンポーネントの組み合わせによって、汎用のコンピューティングシステム内に構成されてもよい。図2Aは、そのようなコンピュータシステム200を示しており、このコンピュータシステム200は、コンピュータモジュール201と、キーボード202、マウスポインタデバイス203、スキャナ226、ビデオソース112として構成されてもよいカメラ227、およびマイクロフォン280などの入力デバイスと、プリンタ215、表示装置136として構成されてもよい表示デバイス214、およびラウドスピーカ217などの出力デバイスと、を含む。外部の変調器-復調器(モデム)送受信機デバイス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を有し、これは、ローカルエリアネットワーク(LAN)として知られるローカルエリア通信ネットワーク222への接続223を介したコンピュータシステム200の結合を可能にする。図2Aに示されているように、ローカル通信ネットワーク222は、接続224を介して広域ネットワーク220に結合することもでき、これは、いわゆる「ファイアウォール」装置または同様の機能を有する装置を典型的に含むであろう。ローカルネットワークインタフェース211は、イーサネット(商標)回路カード、ブルートゥース(商標)無線装置、またはIEEE802.11無線装置で構成されてもよいが、インタフェース211については、他の多数のタイプのインタフェースが実施されてもよい。また、ローカルネットワークインタフェース211は、送信機116と受信機132の機能を提供してもよく、通信チャネル120もローカル通信ネットワーク222で具現化してもよい。
I/Oインタフェース208および213は、シリアルおよびパラレル接続のいずれかまたは両方を与えてもよく、前者は、典型的には、ユニバーサルシリアルバス(USB)規格に従って実装され、対応するUSBコネクタ(図示せず)を有する。ストレージデバイス209は、典型的にはハードディスクドライブ(HDD)210を含む。また、フロッピーディスクドライブや磁気テープドライブ(図示せず)などの他のストレージデバイスも使用することができる。光ディスクドライブ212は、典型的には、データの不揮発性ソースとして機能するために提供される。コンピュータシステム200への適切なデータソースとして、例えば、光ディスク(例えば、CD-ROM、DVD、ブルーレイディスク(商標))、USB-RAM、ポータブル、外付けハードドライブ、およびフロッピーディスクなどのポータブルメモリデバイスが使用されてもよい。典型的には、HDD210、光学ドライブ212、ネットワーク220および222のいずれもが、ビデオソース112として、またはディスプレイ214を介した再生のために保存される復号化されたビデオデータの宛先として動作するようにも構成され得る。システム100のソースデバイス110およびデスティネーションデバイス130は、コンピュータシステム200に具現化されてもよい。
コンピュータモジュール201のコンポーネント205~213は、典型的には、相互接続されたバス204を介して、関連技術者に知られているコンピュータシステム200の従来の動作モードをもたらす方法で通信する。例えば、プロセッサ205は、接続218を用いてシステムバス204に結合される。同様に、メモリ206および光ディスクドライブ212は、接続219によってシステムバス204に結合されている。記載された装置を実施することができるコンピュータの例には、IBM-PCおよび互換機、サンSPARCステーション、アップルMac(商標)または同様のコンピュータシステムが含まれる。
適切または所望の場合、ビデオ符号化器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、ブルーレイディスク(商標)、ハードディスクドライブ、ROMまたは集積回路、USBメモリ、光磁気ディスク、またはPCMCIAカード等のコンピュータ可読カードが含まれ、このようなデバイスがコンピュータモジュール201の内部にあるか外部にあるかは問わない。コンピュータモジュール401へのソフトウェア、アプリケーションプログラム、命令および/またはビデオデータもしくは符号化されたビデオデータの提供にも参加し得る一時的または非有形のコンピュータ可読伝送媒体の例としては、無線または赤外線の伝送路のほか、他のコンピュータまたはネットワークデバイスとのネットワーク接続、および電子メールの送信やWebサイトなどに記録された情報を含むインターネットまたはイントラネットなどが挙げられる。
上述したアプリケーションプログラム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を介して実行される。これにより、RAMメモリ206にオペレーティングシステム253がロードされ、これによりオペレーティングシステム253の動作が開始される。オペレーティングシステム253は、プロセッサ205によって実行可能なシステムレベルのアプリケーションであり、プロセッサ管理、メモリ管理、デバイス管理、ストレージ管理、ソフトウェアアプリケーションインタフェース、および汎用ユーザインタフェースを含む様々な高レベルの機能を果たすものである。
オペレーティングシステム253は、コンピュータモジュール201上で実行されている各プロセスまたはアプリケーションが、別のプロセスに割り当てられたメモリと衝突することなく実行するのに十分なメモリを有するように、メモリ234(209、206)を管理する。さらに、各プロセスが効果的に実行できるように、図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、および説明した方法は、対応するメモリ位置255、256、257においてメモリ234に格納される入力変数254を使用してもよい。ビデオ符号化器114、ビデオ復号化器134、および説明した方法は、出力変数261を生成し、これらは、対応するメモリ位置262、263、264でメモリ234に格納される。中間変数258は、メモリ位置259、260、266、267に格納されてもよい。
図2Bのプロセッサ205を参照すると、レジスタ244、245、246、算術論理ユニット(ALU)240、および制御部239は、プログラム233を構成する命令セット内のすべての命令について「フェッチ、復号化、および実行」サイクルを実行するために必要なマイクロオペレーションのシーケンスを実行するために協働する。各フェッチ、復号化、実行サイクルは以下を含む:
メモリ位置228、229、230から命令231をフェッチまたはリードするフェッチ動作、
制御部239がどの命令がフェッチされたかを判断する復号化動作、および
制御部239および/またはALU240が命令を実行する実行動作。
その後、次の命令のさらなるフェッチ、復号化、および実行サイクルが実行されてもよい。同様に、制御部239がメモリ位置232に値を格納または書き込むストアサイクルが実行されてもよい。
これから説明する図13~図16の方法における各ステップまたはサブプロセスは、プログラム233の1つまたは複数のセグメントに関連付けられており、典型的には、プロセッサ205内のレジスタ部244、245、247、ALU240、および制御部239が協働して、プログラム233の指摘されたセグメントに対する命令セット内のすべての命令に対するフェッチサイクル、復号化サイクル、および実行サイクルを実行することによって実行される。
図3は、ビデオ符号化器114の機能モジュールを示す概略ブロック図である。図4は、ビデオ復号化器134の機能モジュールを示す概略ブロック図である。一般に、データは、ビデオ符号化器114内の機能モジュールとビデオ復号化器134内の機能モジュールとの間を、ブロックを固定サイズのサブブロックに分割したようなサンプルまたは係数のグループで、あるいはアレイとして通過する。ビデオ符号化器114およびビデオ復号化器134は、図2Aおよび図2Bに示すように、汎用コンピュータシステム200を用いて実装されてもよく、ここで、様々な機能モジュールは、コンピュータシステム200内の専用ハードウェアによって、ハードディスクドライブ205上に常駐するソフトウェアアプリケーションプログラム233の1つまたは複数のソフトウェアコードモジュールのようなコンピュータシステム200内で実行可能なソフトウェアによって実装され、プロセッサ205によってその実行が制御されてもよい。あるいは、ビデオ符号化器114およびビデオ復号化器134は、専用のハードウェアと、コンピュータシステム200内で実行可能なソフトウェアとの組み合わせによって実装されてもよい。ビデオ符号化器114、ビデオ復号化器134、および説明した方法は、代替的に、説明した方法の機能またはサブ機能を実行する1つまたは複数の集積回路などの専用ハードウェアで実装されてもよい。そのような専用ハードウェアは、グラフィックプロセッシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、特定用途向け標準製品(ASSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または1つまたは複数のマイクロプロセッサおよび関連するメモリを含んでもよい。特に、ビデオ符号化器114はモジュール310~386を含み、ビデオ復号化器134はモジュール420~496を含み、それぞれがソフトウェアアプリケーションプログラム233の1つ以上のソフトウェアコードモジュールとして実装されてもよい。
図3のビデオ符号化器114は、多用途ビデオ符号化(VVC)のビデオ符号化パイプラインの一例であるが、本明細書で説明する処理ステージを実行するために、他のビデオコーデックを使用することもできる。ビデオ符号化器114は、一連のフレームのようなキャプチャされたフレームデータ113を受信し、各フレームは1つ以上のカラーチャネルを含む。フレームデータ113は、例えば4:0:0、4:2:0、4:2:2、又は4:4:4のクロマフォーマットなどの「クロマフォーマット」に配置されたルマ(「ルマチャネル」)及びクロマ(「クロマチャネル」)のサンプルの2次元アレイを含んでいる。ブロックパーティショナ310は、まず、フレームデータ113を、一般的に正方形の形状であり、CTUのための特定のサイズが使用されるように構成されたCTUに分割する。CTUのサイズは、例えば、64×64、128×128、または256×256のルマサンプルであってもよい。
ブロックパーティショナ310は、さらに、共有符号化ツリーがルマブランチとクロマブランチに分岐する地点で、共有符号化ツリーまたはルマ符号化ツリーおよびクロマ符号化ツリーのいずれかに従って、各CTUを1つ以上のCUに分割する。ルマチャネルは、一次カラーチャネルとも呼ばれることがある。各クロマチャネルは、二次カラーチャネルとも呼ばれることがある。CUは、様々なサイズを有し、正方形と非正方形の両方のアスペクト比を含んでもよい。ブロックパーティショナ310の動作については、図13および図14を参照してさらに説明する。しかし、VVC規格では、CU/CB、PU/PB、およびTU/TBは、常に2の累乗である辺の長さを有する。したがって、312として表される現在のCUは、CTUの共有符号化ツリーまたはルマ符号化ツリーおよびクロマ符号化ツリーに従って、CTUの1つまたは複数のブロックに対する反復に従って進行し、ブロックパーティショナ310から出力される。CTUをCBにパーティショニングするためのオプションは、図5および図6を参照して以下にさらに説明される。
フレームデータ113の第1の分割から得られるCTUは、ラスタースキャン順にスキャンされてもよく、1つまたは複数の「スライス」にグループ化されてもよい。スライスは、「イントラ」(または「I」)スライスであってもよい。イントラスライス(Iスライス)は、インター予測されたCUを含まず、例えば、イントラ予測のみが使用される。あるいは、スライスは、一方向予測または双方向予測(それぞれ、「P」または「B」スライス)であってもよく、それぞれ、「一方向予測」および「双方向予測」として知られる、CUを予測するための1つまたは2つの参照ブロックの追加的な利用可能性を示す。
Iスライスでは、各CTUの符号化ツリーは64×64レベル以下で、ルマ用とクロマ用の2つの符号化ツリーに分岐することがある。別個のツリーを使用することにより、CTUのルマ64×64領域内でルマとクロマとで異なるブロック構造を存在させることができる。例えば、大きなクロマCBに小さなルマCBが多数配置されたり、その逆もあり得る。PまたはBスライスにおいて、CTUの単一の符号化ツリーは、ルマとクロマに共通のブロック構造を定義する。単一ツリーの結果としてのブロックは、イントラ予測であってもインター予測であってもよい。
各CTUについて、ビデオ符号化器114は、2つのステージで動作する。第1ステージ(「検索」ステージと呼ばれる)では、ブロックパーティショナ310は、符号化ツリーの様々な潜在的な構成をテストする。符号化ツリーの各潜在的な構成は、関連する「候補」CUを有する。第1ステージでは、相対的に低歪みで相対的に高い圧縮効率を提供するCUを選択するために、様々な候補CUをテストする。このテストには一般的にラグランジュ最適化が含まれており、それによって候補CUはレート(符号化コスト)と歪み(入力フレームデータ113に対する誤差)の重み付けされた組み合わせに基づいて評価される。「最良」の候補CU(評価されたレート/歪みが最も小さいCU)は、その後のビットストリーム115への符号化のために選択される。候補CUの評価に含まれるのは、与えられた領域に対してCUを使用するか、または様々な分割オプションに従って領域をさらに分割し、小さくなった結果の領域のそれぞれをさらにCUで符号化するか、または領域をさらに分割するかというオプションである。結果として、符号化ツリーとCU自体の両方が検索ステージで選択される。
ビデオ符号化器114は、各CU、例えばCU312に対して、矢印320で示される予測ブロック(PU)を生成する。PU320は、関連するCU312の内容を予測したものである。減算器モジュール322は、PB320とCB312との間に、324(または、差が空間領域にあることを指して「残差」)として示される差を生成する。差分324は、PU320とCU312の対応するサンプル間のブロックサイズの差分である。差分324は、PU320とCU312の対応するサンプル間の差分のブロックサイズ化された配列であり、CU312の各カラーチャネルについて生成される。一次変換及び(オプションで)二次変換が実行される場合、差分324は、モジュール326及び330において変換され、多重化333を介して量子化のために量子化モジュール334に渡される。変換をスキップする場合、差分324は、多重化333を介して量子化のために直接量子化モジュール334に渡される。変換と変換スキップとの間の選択は、CU312に関連する各TBに対して独立に行われる。結果として得られる量子化された残差係数は、矢印336で示されるTB(CU312の各カラーチャネル用)として表される。PU320および関連するTB336は、典型的には、例えば評価されたコストまたは歪みに基づいて、多くの可能な候補CUのうちの1つから選択される。
候補CUは、関連するPBおよびその結果の残差に対してビデオ符号化器114が利用可能な予測モードの1つから得られるCUである。ビデオ復号化器114において予測されたPBと組み合わされるとき、空間領域への逆変換後のTB336の追加は、ビットストリームにおける追加のシグナリングを犠牲にして、復号されたCUと元のCU312との間の差を低減する。
各候補符号化ブロック(CU)、すなわち、1つの変換ブロック(TB)と組み合わせた予測ブロック(PU)は、したがって、関連する符号化コスト(または「レート」)および関連する差分(または「歪み」)を有する。CUの歪みは、サンプル値の差、例えば、絶対差の和(SAD)や二乗差の和(SSD)として推定される。各候補PUから得られる推定値は、モードセレクタ386が差分324を用いてイントラ予測モードを決定してもよい。予測モード387は、現在のCUに対して特定の予測モード、例えばイントラフレーム予測またはインターフレーム予測を使用するという決定を示す。共有符号化ツリーに属するイントラ予測CUの場合、ルマPB対クロマPBに対して独立したイントラ予測モードが指定される。デュアル符号化ツリーのルマブランチまたはクロマブランチに属するイントラ予測CUについては、ルマPBまたはクロマPBにそれぞれ一つのイントラ予測モードが適用される。各候補予測モードおよび対応する残差符号化に関連する符号化コストの推定は、残差のエントロピー符号化よりも大幅に低いコストで実行することができる。したがって、リアルタイムビデオ符号化器においても、多数の候補モードを評価して、レート-歪みの意味で最適なモードを決定することができる。
ラグランジュまたは類似の最適化処理は、(ブロックパーティショナ310による)CTUのCBへの最適なパーティショニングの選択と、複数の可能な予測モードからの最良の予測モードの選択との両方に採用することができる。モードセレクタモジュール386における候補モードのラグランジュ最適化プロセスの適用により、最小のコスト測定を行うイントラ予測モード387、二次変換インデックス388、および一次変換タイプ389、および変換スキップフラグ390(各TBに対して1つ)が選択される。
ビデオ符号化器114の動作の第2ステージ(「符号化」ステージと呼ばれる)では、ビデオ符号化器114において、各CTUの決定された符号化ツリー(複数可)に対する反復が実行される。別々のツリーを使用するCTUの場合、CTUの64×64の各ルマ領域に対して、まずルマ符号化ツリーが符号化され、次いでクロマ符号化ツリーが符号化される。ルマ符号化ツリー内ではルマCBのみが符号化され、クロマ符号化ツリー内ではクロマCBのみが符号化される。共有ツリーを用いたCTUでは、共有ツリーの共通ブロック構造に従って、CU、すなわちルマCBとクロマCBを1つのツリーで記述する。
エントロピー符号化器338は、シンタックス要素の可変長符号化およびシンタックス要素の算術符号化の両方をサポートする。「パラメータセット」、例えばシーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、ピクチャヘッダ(PH)などのビットストリームの部分は、固定長コードワードと可変長コードワードの組合せを使用する。スライス(連続部分ともいう)は、可変長符号化を用いるスライスヘッダと、算術符号化を用いるスライスデータとを有する。ピクチャヘッダは、ピクチャレベルの量子化パラメータオフセットなど、現在のスライスに固有のパラメータを定義する。スライスデータは、スライス内の各CTUのシンタックスエレメントを含む。可変長符号化および算術符号化を使用する場合、ビットストリームの各部分内で順次構文解析が必要となる。これらの部分は、「ネットワーク抽象化レイヤーユニット」または「NALユニット」を形成するために開始コードで区切られることがある。算術符号化は、コンテキスト適応型のバイナリ算術符号化プロセスを使用してサポートされる。算術符号化されたシンタックス要素は、1つまたは複数の「ビン」のシーケンスで構成される。ビンは、ビットと同様に、「0」または「1」の値を持つ。しかし、ビンは、ビットストリーム115内で個別のビットとして符号化されない。ビンは、「コンテキスト」と呼ばれる、関連する予測値(または「可能性が高い」または「最も可能性が高い」)および関連する確率を有する。符号化される実際のビンが予測値と一致した場合、「最も可能性の高いシンボル」(MPS)が符号化される。最も可能性の高いシンボルの符号化は、ビットストリーム115内の消費されたビットの点で、1未満の離散ビットに相当するコストを含め、比較的安価である。符号化されるべき実際のビンが可能性の高い値と不一致である場合、「最小確率シンボル」(LPS)が符号化される。最小確率シンボルの符号化は、消費するビット数の点で比較的高いコストがかかる。ビン符号化技術は、「0」と「1」の確率が偏っているビンを効率的に符号化することができる。2つの可能な値を持つシンタックス要素(つまり「フラグ」)の場合、1つのビンで十分である。多くの可能な値を持つシンタックス要素の場合、一連のビンが必要である。
シーケンス内の後のビンの存在は、シーケンス内の以前のビンの値に基づいて決定されてもよい。さらに、各ビンは2つ以上のコンテキストと関連していてもよい。特定のコンテキストの選択は、シンタックス要素の以前のビン、隣接するシンタックス要素(すなわち、隣接するブロックからのもの)のビンの値などに依存することができる。コンテキスト符号化されたビンが符号化されるたびに、そのビンに対して選択されたコンテキスト(もしあれば)は、新しいビンの値を反映した方法で更新される。このように、二値算術符号化スキームは、適応的であると言われる。
また、ビデオ符号化器114によってサポートされるのは、コンテキストを持たないビン(「バイパスビン」)である。バイパスビンは、「0」と「1」との間の等確率の分布を仮定して符号化される。したがって、各ビンは、ビットストリーム115の1ビットのコストを符号化する。コンテキストがないことで、メモリを節約し、複雑さを軽減することができ、したがって、バイパスビンは、特定のビンの値の分布が歪んでいないところで使用される。コンテキストおよび適応を採用するエントロピー符号化器の一例は、CABAC(Context Adaptive Binary Arithmetic Coder)として当技術分野で知られており、この符号化器の多くの変形がビデオ符号化に採用されている。
エントロピー符号化器338は、一次変換タイプ389、現在のCUの各TBに対する1つの変換スキップフラグ(すなわち、390)、および現在のCUに適用可能であれば、コンテキスト符号化とバイパス符号化のビンの組み合わせ、およびイントラ予測モード387を用いて、二次変換インデックス388を符号化する。二次変換インデックス388は、変換ブロックに関連する残差が、二次変換の適用による一次係数への変換の対象となるそれらの係数位置にのみ有意な残差係数を含む場合に、シグナリングされる。
多重化モジュール384は、各候補CBのテストされた予測モードから選択された、決定された最良のイントラ予測モードに従って、イントラフレーム予測モジュール364からPB320を出力する。候補予測モードは、ビデオ符号化器114によってサポートされるすべての考えられる予測モードを含む必要はない。イントラ予測は、3つのタイプに分類される。「DCイントラ予測」は、近傍の再構成されたサンプルの平均を表す単一の値でPBを移入することを含む。「平面イントラ予測」は、DCオフセットと垂直および水平勾配が近傍の再構成された近隣のサンプルから導出される、平面に従ってサンプルをPBに移入することを含む。近傍の再構成されたサンプルは、典型的には、現在のPBの上方にあり、PBの右側にある程度広がっている再構成されたサンプルの行と、現在のPBの左側にあり、PBを越えて下方にある程度広がっている再構成されたサンプルの列とを含む。「角度イントラ予測」は、フィルタリングされ、特定の方向(または「角度」)にPBを横切って伝搬される再構成された近隣のサンプルでPBを移入することを含む。VVCでは65の角度がサポートされており、長方形のブロックでは、正方形のブロックでは利用できない追加の角度を利用することができ、合計87の角度を生成することができる。クロマPBでは、4つ目のイントラ予測として、クロスコポーネントリニアモデル(CCLM)モードにより、ルマ再構成されたサンプルのコロケーションからPBを生成することが可能である。3つの異なるCCLMモードがあり、各モードは隣接するルマおよびクロマサンプルから導出された異なるモデルを使用する。このモデルは、クロマPBのサンプルのブロックを、配置されたルマサンプルから生成するために使用される。
フレームの端など、以前に再構成されたサンプルが利用できない場合、デフォルトのハーフトーン値として、サンプルの範囲の2分の1が使用される。例えば、10ビットビデオの場合、512という値が使用される。フレームの左上の位置にあるCBに対して以前に利用可能なサンプルがないため、角度および平面イントラ予測モードはDC予測モードと同じ出力、つまりハーフトーン値を大きさとして持つサンプルの平面を生成する。
インターフレーム予測では、予測ブロック382は、動き補償モジュール380によってビットストリーム内の符号化順序のフレームで、現在のフレームに先行する1つまたは2つのフレームからのサンプルを使用して生成され、多重化モジュール384によってPB320として出力される。さらに、インターフレーム予測では、通常、単一の符号化ツリーがルマチャネルとクロマチャネルの両方に使用される。ビットストリーム内の符号化フレームの順序は、撮影時や表示時のフレームの順序とは異なる場合がある。予測に1つのフレームが使用される場合、そのブロックは「一方向予測」と呼ばれ、1つの動きベクトルが関連付けられる。予測に2つのフレームが使用された場合、ブロックは「双方向予測」と呼ばれ、2つの関連する動きベクトルを持つ。Pスライスの場合、各CUは、イントラ予測または一方向予測される。Bスライスの場合、各CUは、イントラ予測、一方向予測、または双方向予測のいずれかである。フレームは、通常、「ピクチャグループ」構造を用いて符号化され、フレームの時間的な階層化を可能にする。複数のフレームは、複数のスライスに分割されてもよく、各スライスは、フレームの一部を符号化する。フレームの時間的な階層化により、フレームは、フレームを表示する順序で、先行する画像と後続する画像を参照することができる。画像は、各フレームを復号化するための依存関係を確実に満たすために必要な順序で符号化される。
サンプルは、動きベクトル378および参照ピクチャインデックスに応じて選択される。動きベクトル378および参照ピクチャインデックスは、すべてのカラーチャネルに適用され、したがって、インター予測は、主にPBではなくPUに対する動作の観点から説明され、すなわち、1つ以上のインター予測ブロックへの各CTUの分解は、単一の符号化ツリーを用いて記述される。インター予測は、動きパラメータの数およびその精度が異なる場合がある。動きパラメータは、典型的には、参照フレームのリストからどの参照フレームを使用するかを示す参照フレームインデックスと、参照フレームのそれぞれに対する空間変換とからなるが、より多くのフレーム、特殊なフレーム、またはスケーリングやローテーションなどの複雑なアフィンパラメータを含んでいてもよい。さらに、参照されたサンプルブロックに基づいて密な動き推定値を生成するために、所定の動き洗練プロセスを適用してもよい。
PU320を決定して選択し、減算器322で元のサンプルブロックからPU320を減算したところで、324と表される符号化コストが最も低い残差が得られ、非可逆圧縮にかけられる。非可逆圧縮処理は、変換、量子化、エントロピー符号化の各ステップからなる。順方向一次変換モジュール326は、差分324に順方向変換を適用し、差分324を時間領域から周波数領域に変換し、一次変換タイプ389に従って矢印328で表される一次変換係数を生成する。一次元における最大の一次変換サイズは、32ポイントDCT-2変換または64ポイントDCT-2変換のいずれかである。符号化されるCBが、ブロックサイズとして表されるサポートされる最大の一次変換サイズ、すなわち64×64または32×32より大きい場合、一次変換326は、差分324のすべてのサンプルを変換するためにタイル状に適用される。変換の各適用が32×32より大きい、例えば64×64の差分324のTB上で動作する場合、TBの左上32×32領域外の全ての結果として生じる一次変換係数328はゼロに設定され、すなわち廃棄される。32×32までのサイズのTBの場合、一次変換タイプ389は、水平方向および垂直方向にDST-7およびDCT-8変換の組合せの適用を示すことができる。残りの一次変換係数328は、順方向二次変換モジュール330に渡される。
二次変換モジュール330は、二次変換インデックス388に従って、二次変換係数332を生成する。二次変換係数332は、モジュール334によって、CBに関連する量子化パラメータに従って量子化され、残差係数336を生成する。変換スキップフラグ390がTBに対して変換スキップが有効であることを示すとき、差分324は、多重化333を介して量子化器334に渡される。
モジュール326の順方向一次変換は、典型的には分離可能であり、各TBの行の集合を変換し、次に列の集合を変換する。順方向一次変換モジュール326は、一次変換タイプ389に従って、水平方向および垂直方向にタイプII離散コサイン変換(DCT-2)のいずれか、または、ルマTBSについては、水平方向または垂直方向のいずれかにタイプVII離散サイン変換(DST-7)およびタイプVIII離散コサイン変換(DCT-8)の組み合わせを用いている。DST-7とDCT-8の組み合わせを使用することを、VVC規格では「マルチ変換選択セット」(MTS)と呼んでいる。DCT-2を使用する場合、最大のTBサイズは32×32または64×64であり、ビデオ符号化器114で設定可能であり、ビットストリーム115でシグナリングされる。設定された最大DCT-2変換サイズに関係なく、TBの左上32×32領域の係数のみがビットストリーム115に符号化される。TBの左上32×32領域以外の有意な係数は破棄され(または「ゼロアウト」され)、ビットストリーム115には符号化されない。MTSは、最大32×32のサイズのCUに対してのみ利用可能であり、関連するルマTBの左上16×16領域の係数のみが符号化される。CUの個々のTBは、対応する変換スキップフラグ390に従って、変換されるか、バイパスされる。
モジュール330の順方向二次変換は、一般に非分割変換であり、イントラ予測CUの残差にのみ適用され、それにもかかわらずバイパスされることもあり得る。順方向二次変換は、16サンプル(一次変換係数328の左上4×4サブブロックとして配置)または48サンプル(一次変換係数328の左上8×8係数の3つの4×4サブブロックとして配置)のいずれかに動作して二次変換係数の集合を生成する。二次変換係数のセットは、それらが導出される一次変換係数のセットよりも数が少なくてもよい。互いに隣接し、DC係数を含む係数のセットのみへの二次変換の適用のため、二次変換は、「低周波非分離二次変換」(LFNST:Low frequency non-separable transform)と称される。
残差係数336は、ビットストリーム115内で符号化するために、エントロピー符号化器338に供給される。典型的には、TUの少なくとも1つの有意な残差係数を有する各TBの残差係数は、スキャンパターンに従って、値の順序付けられたリストを生成するためにスキャンされる。スキャンパターンは、一般的に、4×4の「サブブロック」のシーケンスとしてTBをスキャンし、残差係数の4×4セットの粒度で規則的なスキャン動作を提供し、サブブロックの配置はTBのサイズに依存している。各サブブロック内のスキャンと、あるサブブロックから次のサブブロックへの進行は、通常、後方斜めのスキャンパターンに従う。
上述したように、ビデオ符号化器114は、ビデオ復号化器134で見られる復号化されたフレーム表現に対応するフレーム表現へのアクセスを必要とする。したがって、残差係数336は、デクワンタイザー340に渡され、デクワンタイズされた残差係数342を生成する。デクワント化された残差係数342は、二次変換インデックス388に従って動作する逆二次変換モジュール344に渡され、矢印で346表される中間逆変換係数が生成される。中間逆変換係数346は、逆一次変換モジュール348に渡され、TUの矢印で399表される残差サンプルを生成する。量子化された残差係数342は、変換スキップ390が変換バイパスが実行されることを示す場合、残差サンプル350として多重化349によって出力される。そうでなければ、多重化349は、残差サンプル399を残差サンプル350として出力する。
逆二次変換モジュール344が行う逆変換の種類は、順二次変換モジュール330が行う順変換の種類と対応している。逆一次変換モジュール348によって実行される逆変換の種類は、一次変換モジュール326によって実行される一次変換の種類に対応する。和算モジュール352は、残差サンプル350とPU320とを加算して、CUの再構成サンプル(矢印354で示す)を生成する。
再構成されたサンプル354は、参照サンプルキャッシュ356およびインループフィルタモジュール368に渡される。参照サンプルキャッシュ356は、典型的にはASIC上のスタティックRAMを使用して実装され(したがって、コストのかかるオフチップメモリアクセスを回避する)、フレーム内の後続のCUに対するフレーム内PBを生成するための依存関係を満たすために必要な最小限のサンプルストレージを提供する。最小限の依存性には、次の行のCTUで使用するための、CTUの行の底部に沿ったサンプルの「ラインバッファ」や、CTUの高さによって設定されるカラムバッファが含まれる。参照サンプルキャッシュ356は、参照サンプル(矢印358で表される)を参照サンプルフィルタ360に供給する。サンプルフィルタ360は、平滑化操作を適用して、フィルタリングされた参照サンプル(矢印362で示される)を生成する。フィルタリングされた参照サンプル362は、イントラフレーム予測モジュール364によって使用され、矢印366で表されるサンプルのイントラ予測ブロックを生成する。各候補のイントラ予測モードについて、イントラフレーム予測モジュール364は、サンプルのブロック366を生成する。サンプルのブロック366は、イントラ予測モード387に従って、DC、平面または角度イントラ予測などの技術を使用して、モジュール364によって生成される。
インループフィルタモジュール368は、再構成されたサンプル354にいくつかのフィルタリングステージを適用する。フィルタリングステージは、不連続性から生じるアーティファクトを低減するためにCU境界に整列した平滑化を適用する「デブロッキングフィルタ」(DBF)を含む。インループフィルタモジュール368に存在する別のフィルタリングステージは、「適応ループフィルタ」(ALF)であり、これは、ウィーナーベースの適応フィルタを適用して歪みをさらに低減する。インループフィルタモジュール368に存在する別のフィルタリングステージは、「サンプル適応オフセット」(SAO)フィルタである。SAOフィルタは、まず、再構成されたサンプルを1つまたは複数のカテゴリに分類し、割り当てられたカテゴリに応じて、サンプルレベルでオフセットを適用することによって動作する。
矢印370で表されるフィルタリングされたサンプルは、インループフィルタモジュール368から出力される。フィルタリングされたサンプル370は、フレームバッファ372に格納される。フレームバッファ372は、典型的には、複数(例えば16枚まで)のピクチャを格納する容量を有し、したがって、メモリ206に格納される。フレームバッファ372は、必要なメモリ消費量が大きいため、典型的にはオンチップメモリを使用して格納されない。そのため、フレームバッファ372へのアクセスは、メモリの帯域幅の点でコストがかかる。フレームバッファ372は、参照フレーム(矢印374で表される)を動き推定モジュール376および動き補償モジュール380に提供する。
動き推定モジュール376は、フレームバッファ372内の参照フレームの1つのブロックを参照して、それぞれが本CBの位置からのデカルト空間オフセットである多数の「動きベクトル」(378として示される)を推定する。参照サンプルのフィルタリングされたブロック(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ディスク(商標)、またはその他のコンピュータ可読記憶媒体から読み出されて(または書き込まれて)もよい。さらに、フレームデータ113(およびビットストリーム115)は、通信ネットワーク220に接続されたサーバや無線周波数受信機などの外部から受信されて(または送信されて)もよい。
ビデオ復号化器134を図4に示す。図4のビデオ復号化器134は、多用途ビデオ符号化(VVC)ビデオ復号化パイプラインの一例であるが、本明細書で説明する処理ステージを実行するために、他のビデオコーデックを使用することもできる。図4に示すように、ビデオ復号化器134には、ビットストリーム133が入力される。ビットストリーム133は、メモリ206、ハードディスクドライブ210、CD-ROM、Blu-rayディスク(商標)、またはその他の非一時的なコンピュータ可読記憶媒体から読み取られてもよい。あるいは、ビットストリーム133は、通信ネットワーク220に接続されたサーバや無線周波数受信機などの外部ソースから受信されてもよい。ビットストリーム133は、復号化されるべきキャプチャされたフレームデータを表す符号化されたシンタックス要素を含む。
ビットストリーム133は、エントロピー復号化器モジュール420に入力される。エントロピー復号化器モジュール420は、「ビン」のシーケンスを復号化することによってビットストリーム133からシンタックス要素を抽出し、シンタックス要素の値をビデオ復号化器134の他のモジュールに渡す。エントロピー復号化器モジュール420は、可変長および固定長復号化を使用して、SPS、PPSまたはスライスヘッダ算術復号化エンジンを復号化して、1つまたは複数のビンのシーケンスとしてスライスデータのシンタックスエレメントを復号化する。各ビンは、1つ以上の「コンテキスト」を使用することができ、コンテキストは、ビンの「1」と「0」値をコーディングするために使用される確率レベルを記述する。複数のコンテキストが与えられたビンに使用できる場合、ビンを復号化するために使用可能なコンテキストの1つを選択する「コンテキストモデリング」または「コンテキスト選択」ステップが実行される。
エントロピー復号化器モジュール420は、ビットストリーム133からシンタックス要素を復号するために、例えば「コンテキスト適応型バイナリ算術符号化」(CABAC)などの算術コーディングアルゴリズムを適用する。復号化されたシンタックス要素は、ビデオ復号化器134内のパラメータを再構築するために使用される。パラメータには、残差係数(矢印424で表される)、量子化パラメータ(不図示)、二次変換インデックス474、およびイントラ予測モードなどのモード選択情報(矢印458で表される)が含まれる。また、モード選択情報には、動きベクトルなどの情報や、各CTUを1つ以上のCUに分割することも含まれる。パラメータは、典型的には、以前に復号化されたCBからのサンプルデータと組み合わせて、PBを生成するために使用される。
残差係数424は、逆量子化モジュール428に渡される。逆量子化モジュール428は、残差係数424(すなわち一次変換係数領域)に対して逆量子化(または「スケーリング」)を実行して、量子化パラメータに従って、矢印432で表される再構成された変換係数を作成する。再構成された変換係数432は、逆二次変換モジュール436に渡される。逆二次変換モジュール436は、図15及び図16を参照して説明した方法に従ってエントロピー復号化器420によってビットストリーム113から復号された二次変換タイプ474に従って、二次変換が適用されるか又は操作が行われない(バイパス)かのいずれかを実行する。逆二次変換モジュール436は、再構成された変換係数440(すなわち一次変換領域係数)を生成する。
再構成された変換係数440は、逆一次変換モジュール444に渡される。モジュール444は、エントロピー復号化器420によってビットストリーム133から復号された一次変換タイプ476(または「mts_idx」)に従って、係数440を周波数領域から空間領域に逆変換する。モジュール444の動作の結果は、矢印で499表される残差サンプルのブロックである。CUの所定のTBに対する変換スキップフラグ478が変換のバイパスを示す場合、多重化449は、再構成された変換係数432を残差サンプル488として総和モジュール450に出力する。そうでなければ、多重化449は、残差サンプル488として残差サンプル499を出力する。残差サンプル448は、対応するCBと等しいサイズである。残差サンプル448は、和算モジュール450に供給される。和算モジュール450において、残差サンプル448は、復号化されたPB(452として表される)に追加され、矢印456で表される再構成されたサンプルのブロックを生成する。再構成されたサンプル456は、再構成されたサンプルキャッシュ460およびインループフィルタリングモジュール488に供給される。インループフィルタリングモジュール488は、492で表されるフレームサンプルの再構成されたブロックを生成する。フレームサンプル492は、フレームバッファ496に書き込まれ、そこからフレームデータ135が後に出力される。
再構成されたサンプルキャッシュ460は、ビデオ符号化器114の再構成されたサンプルキャッシュ356と同様に動作する。再構成サンプルキャッシュ460は、メモリ206へのアクセスに頼ることなく(例えば、典型的なオンチップメモリであるデータ232を代わりに使用することによって)、後続のCBをイントラ予測するために必要な再構成された複数のサンプルのストレージを提供する。矢印464で表される参照サンプルは、再構成サンプルキャッシュ460から得られ、参照サンプルフィルタ468に供給されて、矢印472で示されるフィルタリングされた参照サンプルを生成する。フィルタリングされた参照サンプル472は、イントラフレーム予測モジュール476に供給される。モジュール476は、ビットストリーム133にシグナリングされたイントラ予測モードパラメータ458に従って、矢印480で示されるイントラ予測サンプルのブロックを生成し、エントロピー復号化器420によって復号化される。
CBの予測モードがビットストリーム133においてイントラ予測を使用するように指示されている場合、イントラ予測されたサンプル480は、多重化モジュール484を介して復号されたPB452を形成する。イントラ予測は、サンプルの予測ブロック(PB)、すなわち、同じ色成分における「近隣のサンプル」を用いて導出された、1つの色成分におけるブロックを生成する。近隣のサンプルは、現在のブロックに隣接するサンプルであり、ブロック復号順序において先行することにより、既に再構成されている。ルマブロックとクロマブロックが配置されている場合、ルマブロックとクロマブロックは、異なるイントラ予測モードを使用することができる。しかし、2つのクロマCBは、同じイントラ予測モードを共有する。
CBの予測モードがビットストリーム133においてインター予測であることが示される場合、動き補償モジュール434は、フレームバッファ496からのサンプルのブロック498を選択してフィルタリングするために、(エントロピー復号化器420によってビットストリーム133から復号された)動きベクトルおよび参照フレームインデックスを使用して、438として表されるインター予測されたサンプルのブロックを生成する。サンプルのブロック498は、フレームバッファ496に格納された前に復号化されたフレームから得られる。双方向予測のために、サンプルの2つのブロックが生成され、一緒にブレンドされて、復号化されたPB452のためのサンプルを生成する。フレームバッファ496には、インループフィルタリングモジュール488からのフィルタリングされたブロックデータ492が入力される。ビデオ符号化器114のインループフィルタリングモジュール368と同様に、インループフィルタリングモジュール488は、DBF、ALFおよびSAOのフィルタリング動作のいずれかを適用する。一般に、動きベクトルは、ルマチャネルとクロマチャネルの両方に適用されるが、ルマチャネルとクロマチャネルにおけるサブサンプル補間のためのフィルタリング処理は異なっている。
図5は、多用途ビデオ符号化の符号化ツリー構造の各ノードにおいて、1つの領域を1つ以上のサブ領域に分割する利用可能な分割または分割のコレクション500を示す概略ブロック図である。コレクション500に示される分割は、図3を参照して説明したように、ラグランジュ最適化によって決定されるように、符号化ツリーに従って各CTUを1つまたは複数のCUまたはCBに分割するために、符号化器114のブロックパーティショナ310が利用可能である。
コレクション500は、正方形の領域が他の、おそらく非正方形のサブ領域に分割されることのみを示しているが、コレクション500は、符号化ツリーの親ノードが符号化ツリーの子ノードに分割される可能性を示しており、親ノードが正方形の領域に対応することを必要としないことが理解されるべきである。含まれる領域が非正方形である場合、分割の結果得られるブロックのサイズは、含まれるブロックのアスペクト比に応じてスケーリングされる。ある領域がさらに分割されない場合、つまり符号化ツリーのリーフノードでは、CUがその領域を占有する。
領域をサブ領域に細分化するプロセスは、結果として生じるサブ領域が最小のCUサイズ(一般的には4×4ルマサンプル)に達したときに終了する。CUは、所定の最小サイズ(例えば16サンプル)より小さいブロック領域を禁止するように制約されることに加えて、幅または高さの最小値が4であるように制約されている。これ以外にも、幅と高さの両方、または幅と高さの両方の最小値を設定することも可能である。細分化のプロセスは、最も深いレベルの分解の前に終了することもあり、その結果、最小のCUサイズよりも大きいCUができる。分割が行われず、1つのCUがCTUの全体を占めることも可能である。CTUの全体を占める単一のCUは、利用可能な最大の符号化ユニットサイズとなる。4:2:0などのサブサンプルクロマフォーマットの使用により、ビデオ符号化器114及びビデオ復号化器134の配置は、ルマ及びクロマチャネルのブロック構造を定義する共有符号化ツリーの場合を含め、ルマチャネルよりも早くクロマチャネルの領域の分割を終了させ得る。別々の符号化ツリーがルマおよびクロマに対して使用される場合、利用可能な分割操作に対する制約は、そのようなCUがより大きなルマ領域、例えば、64ルマサンプルと共架されても、最小クロマCU領域が16サンプルであることを確実なものとする。
符号化ツリーのリーフノードにはCUが存在する。例えば、リーフノード510は、1つのCUを含む。符号化ツリーの非リーフノードには、2つ以上のさらなるノードへの分割が存在し、その各々は、1つのCUを形成するリーフノードを含むか、またはより小さい領域へのさらなる分割を含む非リーフノードであり得る。符号化ツリーの各リーフノードでは、符号化ツリーの各カラーチャネルに対して1つのCBが存在する。共有ツリーのルマとクロマの両方について同じ深さで終了する分割は、1つのCUが3つの共役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つの領域に分割する。四分木、二分木、三分木の組み合わせは、「QTBTTT」と呼ばれる。ツリーのルートには、ゼロまたはそれ以上のクワッドツリーの分割(ツリーの「QT」セクション)が含まれる。QTセクションが終了すると、ゼロまたはそれ以上の2分割または3分割が発生し(ツリーの「マルチツリー」または「MT」セクション)、最終的にツリーのリーフノードでCBまたはCUで終了する。ツリーがすべてのカラーチャネルを記述している場合、ツリーのリーフノードはCUとなる。ツリーがルマチャネルまたはクロマチャネルを記述する場合、ツリーのリーフノードはCBである。
四分木のみをサポートし、したがって四角いブロックのみをサポートするHEVCと比較して、QTBTTTは、特に二分木および/または三分木の分割を再帰的に適用する可能性を考慮すると、より多くの可能なCUサイズをもたらす。4分木分割のみが利用可能な場合、符号化ツリーの深さが増すごとに、CUサイズが親領域の1/4に縮小されることに相当する。VVCでは、2分木と3分木の分割が可能なため、符号化ツリーの深さはもはやCU面積に直接対応しない。ブロックの幅や高さが4サンプル未満、または4サンプルの倍数にならないような分割を排除するために、分割オプションを制限することで、非正方形のブロックサイズの可能性を低減することができる。ブロックの幅または高さが4サンプル未満または4サンプルの倍数にならない分割を排除するように分割オプションを制限することで、通常とは異なる(正方形ではない)ブロックサイズの可能性を減らすことができる。
図6は、多用途ビデオ符号化で使用されるQTBTTT(または「符号化ツリー」)構造のデータフロー600を示す概略フロー図である。QTBTTT構造は、CTUの1つまたは複数のECUへの分割を定義するために、各CTUに対して使用される。各CTUのQTBTTT構造は、ビデオ符号化器114内のブロックパーティショナ310によって決定され、ビデオ復号化器134内のエントロピー復号化器420によって、ビットストリーム115に符号化されるか、またはビットストリーム133から復号化される。データフロー600はさらに、図5に示す分割に従って、CTUを1つまたは複数のCUに分割するためにブロックパーティショナ310が利用できる許容可能な組み合わせを特徴とする。
階層の最上位レベル、すなわちCTUから出発して、まずゼロまたは複数のクアッドツリー分割が実行される。具体的には、クアッドツリー(QT)分割の決定610が、ブロックパーティショナ310によって行われる。「1」シンボルを返す610での決定は、クアッドツリー分割512に従って、現在のノードを4つのサブノードに分割する決定を示す。その結果、620でのように、4つの新しいノードが生成され、各新しいノードについて、QT分割決定610に再帰する。各新しいノードは、ラスタ(またはZスキャン)の順序で考慮される。あるいは、QT分割決定610が、さらなる分割を行わないことを示す(「0」シンボルを返す)場合、クアッドツリー分割は停止し、続いてマルチツリー(MT)分割が検討される。
まず、ブロックパーティショナ310によって、MT分割決定612が行われる。612では、MT分割を行うかどうかの決定が示される。決定612で「0」シンボルを返すことは、ノードのサブノードへのさらなる分割を実行しないことを示す。ノードのさらなる分割が実行されない場合、そのノードは、符号化ツリーのリーフノードであり、CUに対応する。リーフノードは622で出力される。あるいは、MT分割612がMT分割を実行する決定を示す(「1」シンボルを返す)場合、ブロックパーティショナ310は、方向決定614に進む。
方向決定614は、MT分割の方向を、水平(「H」または「0」)または垂直(「V」または「1」)のいずれかとして示す。ブロックパーティショナ310は、決定614が水平方向を示す「0」を返した場合、決定616に進む。ブロックパーティショナ310は、決定614が垂直方向を示す「1」を返した場合、決定618に進む。
決定616、618のそれぞれにおいて、MT分割の分割数は、BT/TT分割では、2つ(2分割または「BT」ノード)または3つ(3分割または「TT」)のいずれかが示される。すなわち、614からの指示方向が水平の場合には、ブロックパーティショナ310によってBT/TT分割決定616が行われ、614からの指示方向が垂直の場合には、ブロックパーティショナ310によってBT/TT分割決定618が行われる。
BT/TT分割決定616は、水平分割が、「0」を返すことで示される2分割514であるか、「1」を返すことで示される3分割518であるかを示す。BT/TT分割決定616が2分割を示す場合、HBT CTUノード生成ステップ625において、水平2分割514に応じて、ブロックパーティショナ310により2つのノードが生成される。BT/TT分割616が3分割を示すとき、生成HTT_CTUノードステップ626において、水平3分割518に従って、3つのノードがブロックパーティショナ310によって生成される。
BT/TT分割決定618は、垂直分割が、「0」を返すことで示される2分割516であるか、「1」を返すことで示される3分割520であるかを示す。BT/TT分割618が2分割を示す場合、VBT_CTUノード生成ステップ627において、ブロックパーティショナ310により、垂直2分割516に応じて2つのノードが生成される。BT/TT分割618が3分割を示す場合、生成VTT_CTUノードステップ628において、垂直3分割520に従って、ブロックパーティショナ310によって3つのノードが生成される。ステップ625~628から得られる各ノードに対して、方向614に応じて、左から右または上から下の順序で、MT分割決定612に戻るデータフロー600の再帰が適用される。結果として、二分木および三分木の分割は、様々なサイズを有するCUを生成するために適用され得る。
図7A及び図7Bは、CTU710を多数のCU又はCBに分割した例700を提供する。図7Aには、例示的なCU712が示されている。図7Aは、CTU710におけるCUの空間的配置を示す。例示的な分割700は、図7Bにおいて符号化ツリー720としても示されている。
図7AのCTU710の各非リーフノード、例えばノード714、716および718において、含まれるノード(さらに分割されてもよいし、CUであってもよい)が「Zオーダ」にスキャンまたはトラバースされて、符号化ツリー720の列として表されるノードのリストが作成される。四分木の分割の場合、Zオーダスキャンは、左上から右へ、続いて左下から右への順に行われる。水平分割および垂直分割の場合、Zオーダスキャン(トラバーサル)は、それぞれ上から下へのスキャンおよび左から右へのスキャンに単純化される。図7Bの符号化ツリー720は、符号化ツリーのZオーダスキャンに従って並べられたすべてのノードおよびCUをリストアップする。各分割は、リーフノード(CU)に到達するまで、ツリーの次のレベルで2つ、3つ、または4つの新しいノードのリストを生成する。
ブロックパーティショナ310によって画像をCTUに分解し、さらにCUに分解し、図3を参照して説明したようにCUを使用して各残差ブロック(324)を生成した後、残差ブロックはビデオ符号化器114によって順方向変換および量子化の対象となる。結果として得られるTB336は、その後、エントロピー符号化モジュール338の動作の一部として、残差係数のシーケンシャルリストを形成するためにスキャンされる。ビットストリーム133からTBを得るために、ビデオ復号化器134において同等の処理が行われる。
図8A、図8B、図8C、図8Dは、異なるサイズの変換ブロック(TB)に従って実行される順変換および逆分離不可能な二次変換の例を示している。図8Aは、4×4TBサイズに対する一次変換係数802と二次変換係数804との間の一連の関係800を示す図である。一次変換係数802は4×4の係数で構成され、二次変換係数804は8つの係数で構成されている。8つの2次変換係数は、パターン806に配置されている。パターン806は、TBの後方斜め方向の走査で隣接し、DC(左上)位置を含む8つの位置に対応する。図8Aに示す後方斜め走査の残りの8つの位置は、順方向二次変換を行うことによって入力されないため、ゼロ値のままである。したがって、4×4TB用の順方向非分離型二次変換810は、16個の一次変換係数を受信し、8個の二次変換係数を出力として生成する。したがって、4×4TBのための順方向二次変換810は、重みの8×16行列によって表すことができる。同様に、逆二次変換812は、重みの16×8行列によって表すことができる。
図8Bは、4×NおよびN×4のTBサイズ(Nは4より大きい)に対する一次変換係数と二次変換係数の関係818のセットを示し、どちらの場合も、一次係数の左上4×4サブブロック820は二次変換係数824の左上4×4サブブロックと関連付けられている。ビデオ符号化器114において、順方向非分離二次変換830は、16個の一次変換係数を取り、16個の二次変換係数を出力として生成する。残りの一次変換係数822は、順方向二次変換によって入力されず、したがって、ゼロ値のままである。順方向非分離二次変換830が実行された後、係数位置826は、係数822と関連付けられ、入力されず、したがって、ゼロ値のままである。
4×NまたはN×4のTBの順方向二次変換830は、16×16の重みの行列で表すことができる。順方向二次変換830を表す行列は、Aと定義される。同様に、対応する逆二次変換832は、16×16の重みの行列で表すことができる。逆二次変換832を表す行列は、Bと定義される。
4×4TBに対して順二次変換810と逆二次変換812に対するAの一部を再利用することで、非分離型変換カーネルのストレージ要件をさらに低減している。Aの最初の8行が順方向二次変換810に使用され、Aの最初の8行の転置が逆二次変換812に使用される。
図8Cは、サイズ8×8のTBに対する一次変換係数840と二次変換係数842の関係855を示す。一次変換係数840は8×8の係数で構成され、二次変換係数842は8つの変換係数で構成されている。8つの二次変換係数842は、TBの後方斜め走査における連続する8つの位置に対応するパターンで配置され、連続する8つの位置は、TBのDC(左上)係数を含む。TBの残りの二次変換係数はすべてゼロであるため、スキャンする必要はない。8×8TBの順方向非分割二次変換850は、3つの4×4サブブロックに対応する48個の一次変換係数を入力とし、8個の二次変換係数を生成する。8x8個のTBのための順方向二次変換850は、重みの8×48行列によって表すことができる。また、8×8TBの対応する逆二次変換852は、重みの48×8行列によって表すことができる。
図8Dは、8×8以上のサイズのTBについて、一次変換係数860と二次変換係数862の関係875を示す図である。一次係数860の左上8×8ブロック(4つの4×4サブブロックとして配置)は、二次変換係数862の左上4×4サブブロックと関連付けられている。ビデオ符号化器114において、順方向非分離二次変換870は、48個の一次変換係数を演算して、16個の二次変換係数を生成する。残りの一次変換係数864はゼロにされる。二次変換係数862の左上4×4サブブロックの外側の二次変換係数位置866は、入力されず、ゼロのままである。
8×8より大きいサイズのTBの順方向二次変換870は、重みの16×48行列で表すことができる。順方向二次変換870を表す行列は、Fと定義される。 同様に、対応する逆二次変換832は、重みの48×16行列で表すことができる。逆二次変換872を表す行列は、Gと定義される。行列A,B,Fを参照して上述したように、望ましくは、直交性の特性を有する。直交性の特性とはG=FTのみでありFは、ビデオ符号化器114およびビデオ復号化器134に格納される必要がある。直交行列は、行が直交性を有する行列と表現することができる。
Fの一部を再利用することで、非分離型変換カーネルのストレージ要件をさらに低減している。Fは、8×8TBの順二次変換850と逆二次変換852のためのものである。の最初の8行はFの最初の8行の転置が順方向二次変換810に使用される。Fは逆二次変換812に使用される。
非分離型二次変換は、角度特徴などの残差信号の二次元特徴をスパース化することができるため、分離型一次変換のみを使用した場合よりも符号化改善を達成することができる。残差信号における角度特徴は、選択されたイントラ予測モード387の種類に依存する場合があるので、イントラ予測モードに応じて非分離二次変換行列が適応的に選択されることが有利である。上述したように、イントラ予測モードは、「イントラDC」モード、「イントラ平面」モード、「イントラ角度」モード、および「行列イントラ予測」モードから構成される。イントラ予測モードパラメータ458は、イントラDC予測を使用する場合、0の値をとる。イントラ予測モードパラメータ458は、イントラ平面予測が使用されるとき、1の値をとる。イントラ予測モードパラメータ458は、正方形TB上のイントラ角型予測が使用される場合、2から66の間の値をとる。
図9は、多用途ビデオ符号化(VVC)規格で利用可能な変換ブロックのセット900を示したものである。また図9には、集合900の変換ブロックからの残差係数のサブセットへの二次変換の適用を示す。図9には、幅と高さが4から32の範囲の複数のTBが示されている。しかし、幅および/または高さ64のTBは可能であるが、参照を容易にするために示されていない。
4×4の係数のセットに対して、16ポイントの2次変換952(濃い網掛けで示す)が適用される。16点二次変換952は、幅または高さが4のTB、例えば、4×4TB910、8×4TB912、16×4TB914、32×4TB916、4×8TB920、4×16TB930、および4×32TB940に適用される。また、16点二次変換952は、サイズ4×64のTB及び64×4のTB(図9では示されない)にも適用される。幅または高さが4で一次係数が16以上のTBについては、TBの左上4×4のサブブロックにのみ16点二次変換を適用し、他のサブブロックは二次変換を適用するために係数が0値であることが必要である。一般に16ポイントの二次変換を適用すると、図8から図8Dを参照して説明したように、8または16の二次変換係数が生じる。二次変換係数は、TBの左上サブブロックに符号化するために、TBに詰め込まれる。
幅と高さが4より大きい変換サイズの場合、図9に示すように、変換ブロックの左上8×8領域の残差係数の3つの4×4サブブロックに適用するための48ポイント二次変換950(薄い網掛けで示す)が利用可能である。48点二次変換950は、8×8変換ブロック922、16×8変換ブロック924、32×8変換ブロック926、8×16変換ブロック932、16×16変換ブロック934、32×16変換ブロック936、8×32変換ブロック942、16×32変換ブロック944、32×32変換ブロック946に、それぞれの場合において、明るい網かけと破線で示した領域で適用される。また、48点二次変換950は、サイズ8×64、16×64、32×64、64×64、64×32、64×16、64×8のTB(図示せず)にも適用可能である。48ポイントの二次変換カーネルを適用すると、一般に、48未満の二次変換係数が生成されることになる。例えば、図8B~図8Dを参照して説明したように、8または16の二次変換係数が生成され得る。二次変換の対象とならない一次変換係数(「一次のみの係数」)、例えばTB934の係数966は、二次変換が適用されるためにゼロ値であることが要求される。48ポイントの二次変換950を順方向に適用した後、有意な係数を含む可能性のある領域は、48個の係数から16個の係数に減少し、有意な係数を含む可能性のある係数位置の数がさらに減少する。逆二次変換では、復号された有意な係数は、一次逆変換の対象となる領域で有意となり得る係数を生成するために変換される。二次変換により1つ以上のサブブロックが16個の二次変換係数のセットに縮小されるとき、左上の4×4サブブロックのみが有意な係数を含むことができる。二次変換係数が格納される可能性のある任意の係数位置にある最後の有意な係数の位置は、二次変換の適用または一次変換のみが適用されたことを示す。
最後の有意な係数位置がTB内の二次変換係数位置を示すとき、二次変換カーネルを適用するか二次変換をバイパスするかを区別するために、シグナリングされた二次変換インデックス(すなわち、388または474)が必要である。図9中の様々なサイズのTBへの二次変換の適用は、ビデオ符号化器114の観点から説明されてきたが、対応する逆処理は、ビデオ復号化器134において実行される。ビデオ復号化器134は、まず、最後の有意な係数の位置を復号する。復号された最後の有意な係数位置が二次変換の適用可能性を示す場合、二次変換インデックス474は、逆二次変換を適用するかバイパスするかを決定するために復号される。
図10は、複数のスライスを有するビットストリーム1001のシンタックス構造0100を示す。スライスの各々は、複数の符号化ユニットを含む。ビットストリーム1001は、例えばビットストリーム115としてビデオ符号化器114によって生成されてもよいし、例えばビットストリーム133としてビデオ復号化器134によってパースされてもよい。ビットストリーム1001は、例えばネットワーク抽象化レイヤ(NAL)ユニットなどの部分に分割され、各NALユニットに1008などのNALユニットヘッダを先行させることによって、区切りが達成される。シーケンスパラメータセット(SPS)1010は、ビットストリームの符号化および復号化に使用されるプロファイル(ツールのセット)、クロマフォーマット、サンプルビット深度、およびフレーム解像度などのシーケンスレベルのパラメータを定義している。パラメータは、各CTUの符号化ツリーにおける異なるタイプの分割の適用を制約するセット1010にも含まれる。
ピクチャパラメータセット(PPS)1012は、0個以上のフレームに適用されるパラメータのセットを定義する。ピクチャヘッダ(PH)1015は、現在のフレームに適用されるパラメータを定義する。PH1015のパラメータは、CUクロマQPオフセットのリストを含んでもよく、そのうちの1つは、CUレベルで適用されて、クロマブロックによって使用するための量子化パラメータを共起ルマCBの量子化パラメータから導出することができる。
ピクチャヘッダ1015と1つのピクチャを形成するスライス列は、AU(アクセスユニット)として知られており、例えば、AU0_0114のようなものである。AU0_1014は、スライス0から2などの3つのスライスを含み、スライス1は1016と記されている。他のスライスと同様に、スライス1(1016)は、スライスヘッダ0118と、スライスデータ1020を含む。
図11は、CTU1110などの符号化ツリーユニットのルマ符号化ユニットとクロマ符号化ユニットの共有符号化ツリーによるビットストリーム1001(例えば115や133)のスライスデータ(1020対応するスライスデータ1104など)のシンタックス構造1100を示す。CTU1110は、1つまたは複数のCUを含む。一例は、CU1114としてラベル付けされる。CU1114は、変換ツリー1118が続くシグナリングされた予測モード1116を含む。CU1114のサイズが最大変換サイズ(ルマチャネルの32×32または64×の64いずれか)を超えないとき、変換ツリー1118は、TU1124として示される1つの変換ユニットを含む。4:2:0のクロマフォーマットが使用されているとき、対応する最大クロマ変換サイズは、各方向において、ルマ最大変換サイズの半分である。すなわち、最大ルマ変換サイズが32×32または64×64の場合、最大クロマ変換サイズはそれぞれ16×16または32×32となる。4:4:4クロマフォーマットの場合、クロマ最大変換サイズはルマ最大変換サイズと同じになる。4:2:2クロマフォーマットの場合、クロマ最大変換サイズは、水平方向に半分、垂直方向にルマ最大変換サイズと同じになる。つまり、ルマ最大変換サイズが32×32と64×64の場合、クロマ最大変換サイズはそれぞれ16×32と32×64となる。
予測モード1116がCU1114に対するイントラ予測の利用を示す場合、ルマイントラ予測モードとクロマイントラ予測モードとが指定される。また、CU1114のルマCBについては、MTSインデックス1122に従って、一次変換タイプが、(i)水平および垂直方向にDCT-2、(ii)水平および垂直方向に変換スキップ、または(iii)水平および垂直方向にDST-7とDCT-8の組み合わせのいずれかであることがシグナリングされる。シグナリングされたルマ変換タイプがDCT-2水平および垂直である場合(オプション(i))、「低周波非分離変換」(LFNST)インデックスとしても知られる追加のルマ二次変換インデックス1120が、図8A~図8Dおよび図13~図16を参照して説明したような条件でビットストリームにシグナリングされる。
共有符号化ツリーを使用することにより、TU1124は、ルマTB_Y_1128、第1クロマTB_Cb_1132、および第2クロマTB_Cr_1136として示される各カラーチャネル用のTBを含むことになる。各TBが存在するかどうかは、対応する「符号化ブロックフラグ」(CBF)、すなわち符号化ブロックフラグ1123のうちの1つに依存する。TBが存在するとき、対応するCBFは1に等しく、TB内の少なくとも1つの残差係数は非ゼロである。TBが存在しないとき、対応するCBFはゼロに等しく、TB内のすべての残差係数はゼロである。ルマTB1128、第1のクロマTB1134、および第2のクロマTB1136はそれぞれ、変換スキップフラグ1126、1130、および1134によって合図されるように、変換スキップを使用してもよい。Cb及びCrチャネルの両方のクロマ残差を指定するために単一のクロマTBが送信される符号化モードは、「ジョイントCbCr」符号化モードとして知られており、利用可能である。ジョイントCbCr符号化モードが有効な場合、単一のクロマTBが符号化される。
カラーチャネルに関係なく、各符号化されたTBは、最終位置に続いて、1つ以上の残差係数を含む。例えば、ルマTB1128は、最終位置1140及び残差係数1144を含む。最終位置1140は、TBの係数の配列を直列化するために使用される斜め走査パターンの係数を順方向に(すなわち、DC係数から先に)考えたときに、TBにおける最後の有意な残差係数の位置を示す。クロマチャネル用の2つのTB1132及び1136はそれぞれ、ルマTB1128について説明したのと同様の方法で使用される対応する最終位置シンタックス要素を有する。CU用のTB、すなわち1128、1132、および1136のそれぞれの最終位置が、CUの各TBに対して二次変換領域の係数のみが有意であり、一次変換のみを受けるであろう残りの係数はすべてゼロであることを示す場合、二次変換インデックス1120は、二次変換を適用するか否かを指定するためにシグナリングされてもよい。二次変換インデックス1120のシグナリングに関するさらなる条件付けは、図14及び図16を参照して説明される。
二次変換が適用される場合、二次変換インデックス1120は、どのカーネルが選択されるかを示す。一般に、カーネルの「候補セット」において、2つのカーネルが利用可能である。一般に、4つの候補セットがあり、ブロックのイントラ予測モードを使用して、1つの候補セットが選択される。ルマブロックの候補セットを選択するためにルマイントラ予測モードが使用され、2つのクロマブロックの候補セットを選択するためにクロマイントラ予測モードが使用される。図8A~図8Dを参照して説明したように、選択されるカーネルもTBサイズに依存し、4×4、4×N/N×4、および他のサイズのTBに対して異なるカーネルが使用される。4:2:0のクロマフォーマットが使用されている場合、クロマTBは一般的に対応するルマTBの半分の幅と高さであり、結果として幅または高さが8のルマTBが使用される場合、クロマブロックに対して異なる選択カーネルが発生することになる。4×4、4×8、8×4のサイズのルマブロックの場合、2×2、2×4、4×2といった小さなサイズのクロマブロックが存在しないように、共有符号化ツリーのルマブロックとクロマブロックの一対一の対応が変更される。
二次変換インデックス1120は、例えば次のようなものを示す。インデックス値0(適用しない)、1(候補セットの第1カーネルを適用する)、2(候補セットの第2カーネルを適用する)。クロマについては、クロマTBサイズ及びクロマイントラ予測モードを考慮して導出された候補セットの選択された二次変換カーネルが各クロマチャネルに適用され、したがって、Cbブロック1224及びCrブロック1226の残差は、図8A~図8Dを参照して説明したように、二次変換を受ける位置に有意な係数のみを含むことが必要である。ジョイントCbCr符号化が使用される場合、結果として生じるCbおよびCr残差は、ジョイント符号化TB内の有意な係数に対応する位置に有意な係数を含むだけなので、二次変換の対象となる位置に有意な係数を含むという要件は、単一符号化クロマTBにのみ適用可能である。
図12は、符号化ツリーユニットのルマ符号化ユニットとクロマ符号化ユニットが別々の符号化ツリーを持つビットストリーム(例えば、115、133)のスライスデータ1204(例えば、1020)のシンタックス構造1200を示す図である。別個の符号化ツリーは、「I-スライス」に対して利用可能である。スライスデータ1204は、CTU1210のような1つ以上のCTUを含む。CTU1210は、一般に128×128のルマサンプルサイズであり、ルマとクロマに共通の1つのクワッドツリー分割を含む共有ツリーで始まる。結果として生じる64×64個のノードの各々において、別々の符号化ツリーがルマ及びクロマに対して開始する。図12には、ノード1214の例が記されている。ノード1214は、ルマノード1214a及びクロマノード1214bを有する。ルマツリーはルマノード1214aから開始され、クロマツリーはクロマノード1214bから開始される。ノード1214aとノード1214bから続くツリーは、ルマとクロマの間で独立しているので、結果として得られるCUを生成するために、異なる分割オプションが可能である。ルマCU1220は、ルマ符号化ツリーに属し、ルマ予測モード1221と、ルマ変換ツリー1222と、二次変換インデックス1224とを含む。ルマ変換ツリー1222は、TU1230を含む。ルマ符号化ツリーはルマチャネルのサンプルだけを符号化するので、TU1230はルマTB1234を含み、ルマ変換スキップフラグ1232はルマ残差が変換されるべきか否かを示す。ルマTB1234は、最終位置1236と残差係数1238を含む。
クロマCU1250は、クロマ符号化ツリーに属し、クロマ予測モード1251と、クロマ変換ツリー1252と、二次変換インデックス1254とを含む。クロマ変換ツリー1252は、TU1260を含む。クロマツリーはクロマブロックを含むので、TU1260は、Cb_TB1264及びCr_TB1268を含む。Cb_TB1264及びCr_CB1268に対する変換の迂回の適用は、それぞれ、Cb変換スキップフラグ1262及びCr変換スキップフラグ1266で合図される。各TBは、最終位置及び残差係数を含み、例えば、最終位置1270及び残差係数1272は、Cb_TB1264に関連付けられる。クロマツリーのクロマTBに適用される二次変換インデックス1の254シグナリングは、図14及び図16を参照して説明される。
図17は、32×32のTB1700を示す図である。従来のスキャンパターン1710がTB1700に適用されているのが示されている。スキャンパターン1710は、TB1700を後方斜めに進行し、最後の有意な係数位置から始まり、DC(左上)係数位置に向かって進行する。この進行は、TB1700を4×4のサブブロックに分割する。各サブブロックは、TB1700のいくつかのサブブロック、例えばサブブロック1750に示されるように、内部で後方斜め方向に走査される。他のサブブロックも同じように走査される。しかし、図17では、参照を容易にするために、限られた数のサブブロックがフルスキャンで示されている。ある4×4のサブブロックから次のサブブロックへの進行も、TB1700の全体にまたがる後方斜め方向の走査に従う。
MTSを使用する場合、TB1700の左上16×16部分1740の係数のみが重要である場合がある。左上16×16部分は、MTSを適用することができる閾値直交位置(この例では(15,15))を形成し、またはその範囲内にある。最後の有意な係数が、X座標またはY座標のいずれの点でも閾値直交位置の外側にある場合、MTSを適用することはできない。すなわち、最後の有意な係数の位置のX座標またはY座標のいずれかが15を超える場合、MTSは適用できず、DCT-2が適用される(または、変換がスキップされる)。最後の有意な係数の位置は、TB1700内のDC係数の位置に対する直交座標で表される。例えば、最後の有意な係数の位置1730は、15,15である。位置1730から始まり、DC係数に向かって進行するスキャンパターン1710は、MTSが適用されたときにビデオ符号化器114においてゼロアウトされ、ビデオ復号化器134によって使用されない走査サブブロック1720及び1721(網掛けで識別)を結果としてもたらす。ビデオ復号化器134は、1720、1721が走査に含まれるため、サブブロック1720、1721の残差係数を復号する必要があるが、復号されたサブブロック1720、1721の残差係数は、MTSを適用した場合には使用されない。少なくとも、サブブロック1720の残差係数は、MTSが適用されるためにゼロ値であることが要求され得、関連するコーディングコストを低減し、MTSが適用されるときにビットストリームがサブブロックの有意な残差係数を符号化することを防止することが可能である。すなわち、「mts_idx」シンタックス要素の解析は、最後の有意な位置が部分1740内にあることだけでなく、サブブロック1720および1721がゼロ値の残差係数のみを含むことも条件とすることができる。
図18は、説明した配置を用いた32×32のTB1800のスキャンパターン1810を示す図である。スキャンパターン1810は、4×4サブブロックを、コレクション1840のようないくつかの「コレクション」にグループ化する。
本開示の文脈では、スキャンパターンに関連して、コレクションは、(i)MTSに適用可能なサイズのエリアまたは領域を形成する、または(ii)MTSに適用可能なエリアを囲むエリアまたは領域を形成するサブブロックの非オーバーラップセットを提供する。スキャンパターンは、残差係数のサブブロックのいくつかのオーバーラップしないコレクションを進行することによって変換ブロックを横断し、現在のコレクションのスキャンを完了した後に、現在のコレクションから次のコレクションに進行する。
図18の例では、各コレクションは、最大4つのサブブロックの幅と高さを持つ4x4サブブロックの2次元配列である(コレクションのオプション(i))。コレクション1840は、MTSが使用されているときの潜在的な有意な係数の領域、すなわち、TB1800の16×16の領域に対応する。スキャンパターン1810は、再入力することなく、あるコレクションから次のコレクションに進行する、すなわち、あるコレクション内のすべての残差係数がスキャンされると、スキャンパターン1810は次のコレクションに進行する。スキャン1810は、次のコレクションのスキャンに進行する前に、現在のコレクションのスキャンパターンを効果的に完全に完了させる。コレクションは非オーバーラップであり、各残差係数位置は、最終位置から始まり、DC(左上)係数位置に向かって進行するように、1回スキャンされる。
スキャンパターン1710と同様に、スキャンパターン1810もTU1800を4×4のサブブロックに分割している。あるコレクションから次のコレクションへの単調な進行のため、走査が左上のコレクション1840に到達すると、コレクション1840の外側の残差係数のさらなる走査は起こらない。特に、最終位置がコレクション1840内、例えば15,15の位置の最終位置1830にある場合、コレクション1840の外側のすべての残差係数は有意でない。1840外の残差係数がゼロであることは、MTSが使用されているときにビデオ符号化器114において実行されるゼロアウトに整合する。したがって、ビデオ復号化器134は、mts_idxシンタックス要素(CUが単一符号化ツリーに属するときは1122、CUが別符号化ツリーのルマブランチに属するときは1226)のパージングを可能にするために最終位置がコレクション1840内にあることを確認するだけでよい。スキャンパターン1810の使用は、コレクション1840の外側のあらゆる残差係数がゼロ値であることを保証する必要性を除去する。コレクション1840の外側の係数かどうかは、MTS変換係数領域に整列されたコレクションサイズを有するスキャンパターン1810のおかげで、既に明らかである。TB1800を、それぞれが同じサイズであるコレクションの集合に分割することによって、スキャンパターン1810は、スキャンパターン1710と比較して、メモリ消費の低減を可能にすることもできる。TB1800にわたるスキャンは、1つのコレクションにわたるスキャンから構成することができるため、メモリ削減が可能となる。サイズ16×32および32×16のTBについては、16×16サイズのコレクションと同じアプローチで、2つのコレクションを使用することができる。32×8サイズのTBでは、TBサイズの関係で16×8サイズに制約されたコレクションへの分割が可能である。32×8のTBをコレクションに分割すると、32×8のTBを構成する4×4のサブブロックの8×2配列の上を規則的に斜めに進行するのと同じスキャンパターンになる。従って、32×8TBのMTS変換の対象となる8×16の係数の領域において、最終位置が32×8TBの左半分以内であることを確認することで、有意な係数の特性を満たしている。
図19は、サイズ8×32のTB1900を示したものである。TB1900は、コレクションへの分割が可能である。図19の例では、コレクション1940のように、TBサイズの関係でコレクションサイズが8×16に制約されるものがある。8×32TB1900のコレクションへの分割は、8×32TBを構成する4×4サブブロックの2×8配列上の通常の対角線進行と比較して、異なるサブブロック順序をもたらす(例えば図18に示す)。8×16コレクションサイズを使用することにより、最後の有意な係数位置がコレクション1940内にある場合、有意な係数はMTS変換係数領域においてのみ可能であり、例えば7,15における最後の有意な位置1930であることが保証される。
図18、図19のスキャンパターンは、各サブブロックの残差係数を後方斜めにスキャンする。図18、図19の例では、各コレクションのサブブロックが後方斜めにスキャンされる。コレクション間の走査は、図18及び図19において、後方斜め方向に行われる。
図20は、32×32のTB2000の代替スキャン順序2010を示す図である。走査順(スキャンパターン)2010は、部分2010a~2010fに分割される。スキャンオーダー2010から2010eは、コレクションに関するオプション(ii)、MTSに適用可能なエリアを囲むエリアまたは領域を形成するサブブロックの集合に関する。スキャンパターン2010fは、(i)MTSに適用可能なエリアを形成する地域2040をカバーするコレクションに関するものである。スキャン順序2010a~2010fは、1つのサブブロックから次のサブブロックへの後方斜め進行が、領域2040を除くTB2000にわたって起こり、その後、後方斜め進行のスキャンを使用してスキャンされるように定義されている。領域2040は、MTS変換係数領域に相当する。TB2000を、MTS変換係数領域外のサブブロック上のスキャンと、それに続くMTS変換係数領域内のサブブロック上のスキャンとに分割すると、2010a、2010b、2010c、2010d、2010e、および2010fに示すように、サブブロック上の進行がもたらされる。スキャンパターン2010は、2010aから2010eによって定義されるコレクションと、2010fによってスキャンされる領域2040によって定義されるコレクションという、2つのコレクションを識別する。スキャンは、コレクション2040の右下隅(2030)より前に、コレクション2040に接するすべてのサブブロックがスキャンされることを可能にする方法で実行される。スキャンパターン2010は、スキャン2010aから2010eを使用して形成されたサブブロックの集合体をスキャンする。2010aから2010eでカバーされるコレクションが完了すると、スキャンパターン2010は、2010fに従ってスキャンされる次のコレクション2040に継続する。mts_idxのシグナリングを可能にするために、2030などの最後の有意な係数の位置が領域2040内にあることを確認する特性が存在し、領域2040外の残差係数がゼロ値であることも確認する必要はない。
残差係数の走査は、図20の後方斜め走査のバリエーションで行われる。スキャンパターンは、図20において、後方ラスター方式でコレクションをスキャンする。図18及び図19のパターンのバリエーションにおいて、コレクションは、後方ラスター順に走査されてもよい。
図18~図20に示すスキャンパターン、すなわち1810、1910、2010a~fは、図17のスキャンパターン1710と比較して、TBの最高周波数の係数からTBの最低周波数の係数に向かって進行する性質を実質的に保持している。したがって、スキャンパターン1810、1910、および2010a~fを使用するビデオ符号化器114およびビデオ復号化器134の配置は、MTS変換係数領域の外側のゼロ値残差係数をチェックするさらなる必要なしに、最後の有意な係数の位置に依存することができるようにしながら、スキャンパターン1710を用いるときに達成されるのと同様の圧縮効率を達成する。
図13は、フレームデータ113をビットストリーム115に符号化するための方法1300を示し、ビットストリーム115は、符号化ツリーユニットのシーケンスとして1つまたは複数のスライスを含む。方法1300は、構成されたFPGA、ASIC、またはASSPなどの装置によって具現化され得る。さらに、方法1300は、プロセッサ205の実行下でビデオ符号化器114によって実行されてもよい。このように、方法1300は、コンピュータ可読記憶媒体および/またはメモリ206に格納されたソフトウェア233のモジュールとして実施されてもよい。
方法1300は、SPS/PPS符号化のステップ1310で始まる。ステップ1310で、ビデオ符号化器114は、SPS1010およびPPS1012を、固定長および可変長の符号化パラメータのシーケンスとして、ビットストリーム115に符号化する。フレームデータ113のパラメータ、例えば解像度やサンプルビット深度が符号化される。また、特定の符号化ツールの使用状況を示すフラグなど、ビットストリームのパラメータも符号化される。ピクチャパラメータセットは、「デルタQP」シンタックス要素がビットストリーム113に存在する頻度を指定するパラメータ、ルマQPに対するクロマQPのオフセットなどを含む。
方法1300は、ステップ1310からピクチャヘッダ符号化のステップ1320に続く。ステップ1320の実行において、プロセッサ205は、ピクチャヘッダ(例えば1015)をビットストリーム113に符号化し、ピクチャヘッダ1015は、現在のフレーム内のすべてのスライスに適用可能である。ピクチャヘッダ1015は、バイナリ、ターナリー、およびクワッドツリー分割の最大許容深度を示す分割制約を含み、SPS1010の一部として含まれる同様の制約をオーバーライドすることができる。
方法1300は、ステップ1320からスライスヘッダ符号化のステップ1330に続く。ステップ1330で、エントロピー符号化器338は、スライスヘッダ1118をビットストリーム115に符号化する。
方法1300は、ステップ1330から、スライスをCTUに分割するステップ1340に続く。ステップ1340の実行において、ビデオ符号化器114は、スライス0116をCTUのシーケンスに分割する。スライス境界はCTU境界に整列され、スライス内のCTUはCTUスキャン順序、一般にラスタースキャン順序に従って順序付けされる。スライスのCTUへの分割は、各現在のスライスを符号化する際に、フレームデータ113の部分がビデオ符号化器113によって処理されるべき順序を確立する。
方法1300は、ステップ1340から、符号化ツリー決定のステップ1350に続く。ステップ1350で、ビデオ符号化器114は、スライス内の現在選択されているCTUに対する符号化ツリーを決定する。方法1300は、ステップ1350の最初の呼び出しでスライス0116内の第1のCTUから開始し、その後の呼び出しでスライス0116内の後続のCTUに進行する。CTUの符号化ツリーを決定する際に、クワッドツリー、バイナリ、およびターナリー分割の様々な組み合わせが、ブロックパーティショナ310によって生成され、テストされる。
方法1300は、ステップ1350から、符号化ユニット決定のステップ1360に続く。ステップ1360において、ビデオ符号化器114は、既知の方法を用いて、評価中の様々な符号化ツリーから生じるCUのための符号化を決定するために実行する。エンコーディングを決定することは、予測モード(例えば、特定モードによるイントラ予測387または動きベクトルによるインター予測)および一次変換タイプ389を決定することを含む。一次変換タイプ389がDCT-2であると決定され、順方向二次変換を受けないすべての量子化された一次変換係数が有意でない場合、二次変換インデックス388が決定され、二次変換の適用(例えば1120、1224または1254として符号化)を示すことができる。そうでなければ、二次変換インデックス388は、二次変換の迂回を示す。さらに、変換スキップフラグ390がCU内の各TBについて決定され、一次変換(およびオプションとして二次変換)を適用すること、または変換を完全にバイパスすることを示す(たとえば1126/1130/1134または1232/1262/1266など)。ルマチャネルの場合、一次変換のタイプは、DCT-2、変換スキップ、またはMTSオプションの1つに決定され、クロマチャネルの場合、DCT-2または変換スキップが利用可能な変換タイプである。符号化を決定することは、QPを変更することが可能な量子化パラメータを決定すること、すなわち、「デルタQP」シンタックス要素がビットストリーム115に符号化されることを含むことも可能である。個々の符号化ユニットを決定する際に、最適な符号化ツリーもまた、共同して決定される。共有符号化ツリーにおける符号化ユニットがイントラ予測を用いて符号化される場合、ステップ1360において、ルマイントラ予測モードとクロマイントラ予測とが決定される。別個の符号化ツリーにおける符号化ユニットがイントラ予測を使用して符号化されることになっている場合、符号化ツリーの枝がそれぞれルマまたはクロマであることに応じて、ルマイントラ予測モードまたはクロマイントラ予測モードのいずれかがステップ1360において決定される。
符号化ユニット決定のステップ1360は、順方向一次変換モジュール326によるDCT-2一次変換の適用から生じる一次領域残差に「AC」残差係数が存在しないとき、二次変換のテスト適用を禁止してもよい。AC残差係数は、変換ブロックの左上位置以外の位置の残差係数である。DC一次係数のみが存在する場合の二次変換のテストの禁止は、二次変換インデックス388が適用されるブロック、すなわち共有ツリーのY、Cb、Cr(Cb、Crブロックが2サンプルの幅または高さの場合のみYチャネルとなる)に及ぶ。符号化ユニットが共有ツリー用か分離ツリー用かにかかわらず、少なくとも1つの有意なAC主係数が存在する場合、ビデオ符号化器114は、非ゼロの二次変換インデックス値388の選択について(すなわち、二次変換の適用について)テストする。
方法1300は、ステップ1360から符号化ユニット符号化のステップ1370に続く。ステップ1370で、ビデオ符号化器114は、ステップ1360の決定された符号化ユニットをビットストリーム115に符号化する。符号化ユニットがどのように符号化されるかの例を、図14を参照しながらより詳細に説明する。
方法1300は、ステップ1370から最後の符号化ユニットテストのステップ1380に続く。ステップ1380で、プロセッサ205は、現在の符号化ユニットがCTUの最後の符号化ユニットであるかどうかをテストする。そうでない場合(ステップ1380で「NO」)、プロセッサ205内の制御は、符号化ユニット決定ステップ1360に戻る。そうでなければ、現在の符号化ユニットが最後の符号化ユニットである場合(ステップ1380で「YES」)、プロセッサ205内の制御は、最後のCTUテストのステップ1390に進行する。
最後のCTUテストのステップ1390で、プロセッサ205は、現在のCTUがスライス0116内の最後のCTUであるか否かをテストする。現在のCTUがスライス内の最後のCTUでない場合(ステップ1390で1016「NO」)、プロセッサ205内の制御は、決定符号化ツリーステップ1350に戻る。そうでなければ、現在のCTUが最後である場合(ステップ1390で「YES」)、プロセッサ205内の制御は、最後のスライステストのステップ13100に進行する。
最後のスライステストのステップ13100では、プロセッサ205は、符号化されている現在のスライスがフレーム内の最後のスライスであるかどうかをテストする。現在のスライスが最後のスライスでない場合(ステップ13100で「NO」)、プロセッサ205内の制御は、スライスヘッダ符号化のステップ1330に戻る。そうでなければ、現在のスライスが最後のスライスであり、すべてのスライスが符号化された場合(ステップ13100で「YES」)、方法1300は終了する。
図14は、図13のステップ1370に対応する、ビットストリーム115に符号化ユニットを符号化するための方法1400を示す図である。方法1400は、構成されたFPGA、ASIC、またはASSPなどの装置によって具現化されてもよい。さらに、方法1400は、プロセッサ205の実行下でビデオ符号化器114によって実行されてもよい。このように、方法1400は、ソフトウェア233のモジュールとして、コンピュータ可読記憶媒体上及び/又はメモリ206に格納されてもよい。
方法1400は、TU1260のクロマTBに適用することが可能な場合にのみ二次変換インデックス1254を符号化し、TU1124のTBのいずれかに適用することが可能な場合にのみ二次変換インデックス1120を符号化することによって、圧縮効率が改善された結果となる。共有符号化ツリーが使用されている場合、方法1400は、符号化ツリーの各CU、例えば図11のCU1114に対して呼び出され、Y、Cb、およびCrカラーチャネルが符号化される。別個の符号化ツリーが使用されているとき、方法1400は、まず、ルマブランチ1214aの各CU、たとえば1220に対して呼び出され、方法1400は、クロマブランチ1214bの各クロマCU、たとえば1250についても呼び出される。
方法1400は、予測ブロック生成のステップ1410で開始される。ステップ1410で、ビデオ符号化器114は、ステップ1360で決定されたCUの予測モード、例えばイントラ予測モード387に従って、予測ブロック320を生成する。エントロピー符号化器338は、ステップ1360で決定された符号化ユニットのためのイントラ予測モード387をビットストリーム115に符号化する。「pred_mode」シンタックス要素は、符号化ユニットに対するイントラ予測、インター予測、または他の予測モードの使用を区別するために符号化される。イントラ予測が符号化ユニットに対して使用される場合、ルマPBがCUに適用可能である場合、ルマイントラ予測モードが符号化され、クロマPBがCUに適用可能である場合、クロマイントラ予測モードが符号化される。すなわち、CU1114のような共有ツリーに属するイントラ予測されたCUについては、予測モード1116は、ルマイントラ予測モードとクロマイントラ予測モードとを含む。CU1220のような別個の符号化ツリーのルマブランチに属するイントラ予測されたCUについては、予測モード1221は、ルマイントラ予測モードを含む。CU1250のような別の符号化ツリーのクロマブランチに属するイントラ予測されたCUについては、予測モード1251は、クロマイントラ予測モードを含む。一次変換タイプ389は、符号化ユニットのルマTBに対して、水平方向および垂直方向にDCT-2の使用、水平方向および垂直方向に変換スキップ、または水平方向および垂直方向にDCT-8およびDST-7の組み合わせから選択するように符号化される。
方法1400は、ステップ1410から残差決定のステップ1420に続く。予測ブロック320は、差分モジュール322によってフレームデータ312の対応するブロックから差し引かれ、差分324を生成する。
方法1400は、ステップ1420から残差変換のステップ1430に続く。残差変換のステップ1430において、ビデオ符号化器114は、プロセッサ205の実行の下、ステップ1420の残差に対して一次および二次変換をバイパスするか、またはCUの各TBに対して一次変換タイプ389および二次変換インデックス388に従って変換を実行する。差分324の変換は、変換スキップフラグ390に従って実行またはバイパスされてもよく、変換された場合、図3を参照して説明したように、残差サンプル350を生成するためにステップ1350で決定されたように、二次変換も適用されてもよい。定量化モジュール334の動作後、残差係数336が利用可能である。
方法1400は、ステップ1430からルマ変換スキップフラグ符号化のステップ1440に続く。ステップ1440において、エントロピー符号化器338は、コンテキスト符号化された変換スキップフラグ390をビットストリーム115に符号化し、ルマTBの残差が一次変換、および場合によっては二次変換に従って変換されるか、または一次変換および二次変換がバイパスされるかのいずれかを指示する。ステップ1440は、CUがルマTBを含むとき、すなわち、共有符号化ツリー(符号化1126)またはデュアルツリー(符号化1232)のルマブランチにおいて実行される。
方法1400は、ステップ1440からルマ残差符号化のステップ1450に続く。ステップ1450において、エントロピー符号化器338は、ルマTB用の残差係数336をビットストリーム115に符号化する。ステップ1450は、符号化ユニットのサイズに基づいて、適切なスキャンパターンを選択するように動作する。スキャンパターンの例は、図17(従来のスキャンパターン)及び図18~図20(MTSフラグの決定に使用される追加のスキャンパターン)に関連して説明される。本明細書で説明する実施例では、図18~図20の例に関連するスキャンパターンが使用される。残差係数336は、典型的には、4×4のサブブロックを有する後方斜めのスキャンパターンに従って、リストにスキャンされる。16サンプルより大きい幅又は高さを有するTBの場合、スキャンパターンは、図18、図19及び図20を参照して説明したとおりである。リスト内の最初の非ゼロ残差係数の位置(すなわち1140)は、変換ブロックの左上の係数に対するデカルト座標としてビットストリーム115内に符号化される。残りの残差係数は、最終位置の係数からDC(左上)残差係数の順に、残差係数1144として符号化される。ステップ1450は、CUがルマTBを含む場合、すなわち共有符号化ツリー(符号化1128)、またはCUがデュアルツリーのルマブランチ(符号化1234)に属している場合に実行される。
方法1400は、ステップ1450からクロマ変換スキップフラグ符号化のステップ1460に続く。ステップ1460において、エントロピー符号化器338は、対応するTBがDCT-2変換、および任意に二次変換を受けるか、または変換がバイパスされるかを示す、別の2つのコンテキスト符号化変換スキップフラグ390をビットストリーム115に、各クロマTBについて1つずつ符号化する。ステップ1460は、CUがクロマTBを含む場合、すなわち、共有符号化ツリー(符号化1130および1134)またはデュアルツリーのクロマブランチ(符号化1262および1266)において、実行される。
方法1400は、ステップ1460からクロマ残差符号化のステップ1470に続く。ステップ1470において、エントロピー符号化器338は、ステップ1450を参照して説明したように、クロマTBの残差係数をビットストリーム115に符号化する。ステップ1460は、CUがクロマTBを含む場合、すなわち、共有符号化ツリー(符号化1132および1136)またはデュアルツリーのクロマブランチ(符号化1264および1268)において、実行される。16サンプルより大きい幅または高さを有するクロマTBの場合、スキャンパターンは、図18、図19および図20を参照して説明したとおりである。ルマTBとクロマTBに対して図18~図20のスキャンパターンを使用することにより、同じサイズのTBに対してルマとクロマの間で異なるスキャンパターンを定義する必要性を回避することができる。
方法1400は、ステップ1470からLFNSTシグナリングテストのステップ1480に続く。ステップ1480で、プロセッサ205は、二次変換がCUの任意のTBに適用され得るか否かを判断する。CUのTBのすべてが変換スキップを使用する場合、二次変換インデックス388を符号化する必要はなく(ステップ1480で「NO」)、方法1400は、MTSシグナリングテストのステップ14100に進行する。共有符号化ツリーの場合、例えば、ルマTBおよび2つのクロマTBの各々は、ステップ1480で「NO」を返すために変換スキップされる。別個の符号化ツリーの場合、符号化ツリーのルマブランチにおけるルマTBは、ルマおよびクロマそれぞれに関する呼び出しに対して「NO」を返すためにステップ1480のために変換スキップされ、または符号化ツリーのクロマブランチにおける二つのクロマTBは、両方とも変換スキップされる。二次変換が実行されるためには、該当するTBは、二次変換の対象となるTBの位置に有意な残差係数を含むだけでよい。すなわち、他のすべての残差係数はゼロでなければならず、この条件は、図8A~図8Dに示すTBサイズについて806、824、842、または862内のTBの最終位置がある場合に達成される。CU内のいずれかのTBの最終位置が、考慮されたTBサイズに対して806、824、842、または862の外にある場合、二次変換は行われず(ステップ1480で「NO」)、方法1400はMTSシグナリングテストのステップ14100に進行する。
クロマTBの場合、幅または高さ2が発生することがある。幅または高さが2のTBは、そのようなサイズのTBに対して定義されたカーネルがないため、二次変換の対象とならず(ステップ1480で「NO」)、方法1400は、MTSシグナリングテストのステップ14100に進む。二次変換を行う際の追加条件は、該当するTBのうち少なくともAC残差係数が存在することである。すなわち、有意な残差係数が各適用されるTBのDC(左上)位置にしかない場合、二次変換は実行されず(ステップ1480で「NO」)、方法1400はMTSシグナリングテストのステップ14100へ進行する。CUの少なくとも1つのTBが一次変換の対象であり(変換スキップフラグはCUの少なくとも1つのTBについてスキップしないことを示す)、一次変換の対象のTBに関する採取位置制約が満たされ、少なくとも1つのAC係数が一次変換の対象のTBの1つ以上に含まれる(ステップ1480で「YES」)ことを条件に、プロセッサ205内の制御はLFNSTインデックス符号化のステップ1490へ進行する。LFNSTインデックス符号化のステップ1490において、エントロピー符号化器338は、二次変換の適用に関する3つの可能な選択を示す切断された単項のコードワードを符号化する。選択は、ゼロ(適用されない)、1(候補セットの第1のカーネルが適用される)、および2(候補セットの第2のカーネルが適用される)である。コードワードは最大で2つのビンを使用し、各ビンはコンテキスト符号化される。ステップ1480で実行されたテストにより、ステップ1490は、二次変換を適用できるとき、すなわち、符号化される非ゼロインデックスに対してのみ実行される。ステップ1490は、例えば、1120または1224または1225を符号化する。
実質的に、ステップ1480および1490の動作は、二次変換がTU1260のクロマTBに適用できる場合にのみ、別々のツリー構造におけるクロマ用の二次変換インデックス1254が符号化されることを可能にする。共有ツリー構造においてステップ1480および1490は、二次変換がTU1124のTBのいずれかに適用され得る場合にのみ、二次変換インデックス1120を符号化するように動作する。関連する二次変換インデックス(1254および1120など)を除外する際に、方法1400は、符号化効率を向上させるように動作する。特に、共有またはデュアルツリーの場合、不要なフラグが回避され、それによって、必要なビット数が減少し、符号化効率が向上する。別個のツリーの場合、対応するルマ変換ブロックが変換スキップされる場合、二次変換はクロマについて必ずしも抑制されない。
方法1400は、ステップ1490からMTSシグナリングテストのステップ14100に進行する。
MTSシグナリングのステップ14100で、ビデオ符号化器114は、MTSインデックスをビットストリーム115に符号化する必要があるか否かを判断する。ステップ1360でDCT-2変換の使用が選択された場合、最後の有意な係数位置は、TBの左上32×32領域内のどこにあってもよい。最後の有意な係数位置がTBの左上16×16領域外であり、(図17のスキャンパターンではなく)図18および図19のスキャンが使用される場合、ビットストリームにおいて明示的にmts_idxをシグナリングする必要はない。MTSを使用すると、左上16x16領域以外の最後の有意な係数が生成されないため、この場合、信号mts_idxはビットストリームに不要である。ステップ14100は「NO」を返し、方法1400は、最後の有意な係数の位置によって暗示されるDCT-2の使用で、終了する。
一次変換タイプの非DCT-2選択は、TBの幅と高さが32以下の場合にのみ利用可能である。したがって、幅または高さが32を超えるTBの場合、ステップ14100は「NO」を返し、方法1400は、ステップ14100で終了する。非DCT-2選択も、二次変換が適用されない場合にのみ利用可能であり、従って、ステップ1360で二次変換タイプ388が非ゼロであると判断された場合、ステップ14100は「NO」を返し、方法1400はステップ14100において終了する。
図18および図19のスキャンを使用するとき、最後の有意な係数の位置がTBの左上16×16領域内に存在することは、DCT-2一次変換の適用、またはDST-7および/もしくはDCT-8のMTS組み合わせのいずれかから生じ得るので、ステップ1360で行われた選択を符号化するためのmts_idxの明示的なシグナリングが必要である。したがって、最後の有意な係数位置がTBの左上16×16領域内にあるとき、ステップ14100は「YES」を返し、方法1400はMTSインデックス符号化のステップ14110に進行する。
MTSインデックス符号化のステップ14110で、エントロピー符号化器338は、一次変換タイプ389を表す切り捨てられた単項ビン文字列を符号化する。ステップ14110は、例えば、1122または1226を符号化することができる。方法1400は、ステップ14110の実行により終了する。
図15は、ビットストリーム133を復号してフレームデータ135を生成するための方法1500を示し、ビットストリーム133は、符号化ツリーユニットのシーケンスとして1つまたは複数のスライスを含んでいる。方法1500は、構成されたFPGA、ASIC、またはASSPなどの装置によって具現化され得る。さらに、方法1500は、プロセッサ205の実行下でビデオ復号化器134によって実行されてもよい。このように、方法1500は、コンピュータ可読記憶媒体上及び/又はメモリ206内にソフトウェア233の1つ又は複数のモジュールとして記憶されてもよい。
方法1500は、SPS/PPS復号化のステップ1510で始まる。ステップ1510で、ビデオ復号化器314は、ビットストリーム133からSPS1010およびPPS1012を、固定長および可変長の符号化パラメータのシーケンスとして復号化する。解像度やサンプルビット深度などのフレームデータ113のパラメータが復号化される。また、特定の符号化ツールの使用を示すフラグなど、ビットストリームのパラメータも復号化される。デフォルトのパーティション制約は、バイナリ、ターナリーおよびクワッドツリー分割の最大許容深度をシグナリングし、ビデオ復号化器134によってSPS1010の一部として復号化されることもある。
方法1500は、ステップ1510からピクチャヘッダ復号化のステップ1520に続く。ステップ1520の実行において、プロセッサ205は、ビットストリーム113から、現在のフレーム内のすべてのスライスに適用可能なピクチャヘッダ1015を復号化する。ピクチャパラメータセットは、「デルタQP」シンタックス要素がビットストリーム313に存在する頻度、ルマQPに対するクロマQPのオフセットなどを指定するパラメータを含む。オプションのオーバーライドされたパーティション制約は、バイナリ、ターナリーおよびクワッドツリー分割の最大許容深度をシグナリングし、またビデオ復号化器134によってピクチャヘッダ1015の一部として復号化されてもよい。
方法1500は、ステップ1520からスライスヘッダ復号化のステップ1530に続く。ステップ1530で、エントロピー復号化器は、ビットストリーム133からスライスヘッダ0118を復号化420する。
方法1500は、ステップ1530から、スライスをCTUに分割するステップ1540に続く。ステップ1540の実行において、ビデオ符号化器114は、スライス1016をCTUのシーケンスに分割する。スライス境界はCTU境界に整列され、スライス内のCTUはCTUスキャン順序、一般にラスタースキャン順序に従って順序付けされる。スライスのCTUへの分割は、現在のスライスを復号する際に、フレームデータ133のどの部分がビデオ符号化器313によって処理されるべきかを確立する。
方法1500は、ステップ1540から符号化ツリー復号化のステップ1550に続く。ステップ1550で、ビデオ復号化器314は、スライス内の現在選択されているCTUの符号化ツリーを復号化する。方法1500は、ステップ1550の最初の呼び出しでスライス1016内の最初のCTUから開始し、その後の呼び出しでスライス1016内の後続のCTUに進行する。CTUの符号化ツリーを復号する際に、ビデオ符号化器114におけるステップ1350で決定されたクワッドツリー、バイナリ、およびターナリー分割の組合せを示すフラグが復号される。
方法1500は、ステップ1550から符号化ユニット復号化のステップ1570に続く。ステップ1570で、ビデオ復号化器314は、ビットストリーム133からステップ1560の決定された符号化ユニットを復号化する。符号化ユニットがどのように復号されるかの一例を、図16を参照してより詳細に説明する。
方法1500は、ステップ1570から最後の符号化ユニットテストのステップ1580に続く。ステップ1580で、プロセッサ205は、現在の符号化ユニットがCTUの最後の符号化ユニットであるかどうかをテストする。そうでない場合(ステップ1580で「NO」)、プロセッサ205内の制御は符号化ユニット復号化のステップ1560に戻る。そうでなければ、現在の符号化ユニットが最後の符号化ユニットである場合(ステップ1580で「YES」)、プロセッサ205内の制御は、最後のCTUテストのステップ1590へ進む。
最後のCTUテストのステップ1590において、プロセッサ205は、現在のCTUがスライス1016の最後のCTUであるか否かをテストする。スライス1016の最後のCTUでない場合(ステップ1590で「NO」)、プロセッサ205内の制御は、符号化ツリー復号化のステップ1550に戻る。そうでなければ、現在のCTUが最後である場合(ステップ190で「YES5」)、プロセッサ内の制御は、最後のスライステストのステップ15100に進む。
最後のスライステストのステップ15100では、プロセッサ205は、復号化されている現在のスライスがフレーム内の最後のスライスであるか否かをテストする。現在のスライスが最後のスライスでない場合(ステップ15100で「NO」)、プロセッサ205内の制御は、スライスヘッダ復号化のステップ1530に戻る。そうでなければ、現在のスライスが最後のスライスであり、すべてのスライスが復号化された場合(ステップ15100で「YES」)、方法1500は終了する。
図16は、図15のステップ1570に対応する、ビットストリーム133から符号化ユニットを復号するための方法1600を示す図である。方法1600は、構成されたFPGA、ASIC、またはASSPなどの装置によって具現化されてもよい。さらに、方法1600は、プロセッサ205の実行下でビデオ復号化器314によって実行されてもよい。このように、方法1600は、コンピュータ可読記憶媒体上に、及び/又は、メモリ206内のソフトウェア233の1つ以上のモジュールとして記憶されてもよい。
共有符号化ツリーが使用されている場合、方法1600は、符号化ツリーの各CU、例えば図11のCU1114に対して呼び出され、Y、Cb、およびCrカラーチャネルが単一の呼び出しで符号化される。別個の符号化ツリーが使用されている場合、方法1600は、まず、ルマブランチ1214aの各CU、例えば1220に対して呼び出され、方法1600はまた、クロマブランチ1214bの各クロマCU、例えば1250に対して別々に呼び出される。
方法1600は、ルマ変換スキップフラグ復号化のステップ1610から開始される。ステップ1610において、エントロピー復号化器420は、ビットストリーム133からコンテキスト符号化された変換スキップフラグ478(例えば、図11の1126または図12の1232としてビットストリームに符号化されている)を復号する。スキップフラグは、変換がルマTBに適用されるか否かを示す。変換スキップフラグ478は、ルマTBに対する残差は、(i)一次変換、(ii)一次変換および二次変換、または(iii)一次変換および二次変換がバイパスされることに従って変換されることを示す。ステップ1610は、CUが共有符号化ツリー(例えば復号化1126)にルマTBを含む場合に実行される。ステップ1610は、CUが分離符号化ツリーCTUのデュアルツリー(復号1232)のルマブランチに属するときに実行される。
方法1600は、ステップ1610からルマ残差復号化のステップ1620に続く。ステップ1620において、エントロピー復号化器420は、ビットストリーム115からルマTB用の424残差係数を復号する。残差係数424は、復号された残差係数のリストにスキャンを適用することによって、TBに組み合わされる。ステップ1620は、符号化ユニットのサイズに基づいて、適切なスキャンパターンを選択するように動作する。スキャンパターンの例は、図17(従来のスキャンパターン)及び図18~図20(MTSフラグの決定に有用な追加のスキャンパターン)に関連して説明される。本明細書で説明する例では、図18~図20に関連して説明したパターンに基づくスキャンパターンが使用される。このスキャンは、典型的には、図18及び図19を参照して定義したような、4×4サブブロックを使用する後方斜め方向のスキャンパターンである。リスト内の最初の非ゼロ残差係数の位置(すなわち1140)は、ビットストリーム133から、変換ブロックの左上の係数に対するデカルト座標として復号される。残りの残差係数は、最終位置の係数からDC(左上)残差係数の順に、残差係数1144として復号化される。
TBの左上のサブブロックと最後の有意な残差係数を含むサブブロック以外の各サブブロックについて、それぞれのサブブロックに少なくとも一つの有意な残差係数があることを示す「符号化されたサブブロックフラグ」が復号される。符号化されたサブブロックフラグがサブブロック内の少なくとも1つの有意な残差係数の存在を示す場合、「有意マップ」(フラグのセット)が復号され、サブブロック内の各残差係数の有意性が示される。サブブロックが、復号された符号化されたサブブロックフラグから少なくとも1つの有意な残差係数を含むことが示され、スキャンが有意な残差係数に遭遇せずにサブブロックの最後のスキャン位置に達した場合、サブブロックの最後のスキャン位置の残差係数は有意であると推定される。符号化されたサブブロックフラグと有意性マップ(各フラグは「sig_coeff_flag」と名付けられる)は、コンテキスト符号化されたビンを用いて符号化される。サブブロック内の各有意残差係数に対して、対応する残差係数の大きさが1より大きいかどうかを示す「abs_level_gtx_flag」が復号化される。1より大きい大きさを有するサブブロック内の各残差係数に対して、式(1)に従って、残差係数の大きさをさらに決定するために、「par_level_flag」及び「abs_level2_gtx_flag」が復号化される。
AbsLevelPass1 = sig_coeff_flag + par_level_flag + abs_level_gtx_flag + 2×abs_level_gtx_flag2 (1)
abs_level_gtx_flagとabs_level_gtx_flag2のシンタックス要素は、コンテキスト符号化されたビンを使用して符号化される。1に等しいabs_level_gtx_flag2を有する各残差係数に対して、バイパス符号化されたシンタックス要素「abs_remainder」が、ライス-ゴロン符号化を使用して復号される。残差係数の復号された大きさは、次のように決定される。AbsLevel = AbsLevelPass1 + 2×abs_remainder。残差係数の大きさから残差係数の値を得るために、有意な残差係数ごとに符号ビットが復号化される。走査パターンの各サブブロックの直交座標は、XとYの残差係数の直交座標をそれぞれサブブロックの幅と高さのlog2によって調整(右シフト)することによって、走査パターンから導出することができる。ルマTBの場合、サブブロックサイズは常に4×4であり、XとYは2ビットの右シフトとなる。クロマTBにも図18~図20のスキャンパターンを適用し、同じサイズで異なるカラーチャネルのブロックに対して異なるスキャンパターンを格納することを避けることができる。ステップ1620は、CUがルマTBを含むとき、すなわち、共有符号化ツリー(復号化1128)において、またはデュアルツリーのルマブランチに対する呼び出し(例えば復号化1234)に対して実行される。
方法1600は、ステップ1620からクロマ変換スキップフラグ復号化のステップ1630に続く。ステップ1630において、エントロピー復号化器は、各クロマ33TBについてビットストリーム1からコンテキスト符号化されたフラグを復号420する。例えば、コンテキスト符号化されたフラグは、図11の1130と1134、または図12の1262と1266のように符号化されているかもしれない)少なくとも1つのフラグは、クロマTBのそれぞれについて1つずつ復号される。ステップ1630で復号されたフラグは、対応するクロマTBに変換が適用されるかどうか、特に対応するクロマTBにDCT-2変換、および任意に二次変換が適用されるかどうか、または対応するクロマTBに対するすべての変換がバイパスされるかどうかを示す。ステップ1630は、CUがクロマTBを含む場合、すなわち、CUが共有符号化ツリー(復号1130および1134)またはデュアルツリーのクロマブランチ(復号1262および1266)に属する場合に実行される。
方法1600は、ステップ1630からクロマ残差復号化のステップ1640に続く。ステップ1640では、エントロピー復号化器420がビットストリーム133からクロマTBの残差係数を復号する。ステップ1640は、ステップ1620を参照して説明したのと同様の方法で、図18及び図19に定義されたスキャンパターンに従って動作する。ステップ1640は、CUがクロマTBを含むとき、すなわち、CUが共有符号化ツリー(復号1132および1136)またはデュアルツリーのクロマブランチ(復号1264および1268)に属するときに実行される。
方法1600は、ステップ1640からLFNSTシグナリングテストのステップ1650に続く。ステップ1650において、プロセッサ205は、二次変換がCUの任意のTBに適用可能であるか否かを判断する。ルマ変換スキップフラグは、クロマ変換スキップフラグと異なる値を有することができる。CUのTBのすべてが変換スキップを使用する場合、二次変換は適用可能ではなく、二次変換インデックスを符号化する必要はなく(ステップ1650で「NO」)、方法1600は、LFNSTインデックス決定のステップ1660に進行する。例えば、共有符号化ツリーの場合、ルマTBおよび2つのクロマTBの各々は、ステップ1650で「NO」を返すために変換スキップされる。別個の符号化ツリー(例えば1220)のルマブランチに属するCUの場合、ステップ1650は、ルマTBが変換スキップされると「NO」をリターンする。別個の符号化ツリーのクロマブランチに属するCU(例えば1250)については、ステップ1650は、クロマTBが両方とも変換スキップされるとき、「NO」を返す。別の符号化ツリーのクロマブランチ(例えば1250)に属し、4サンプル未満の幅または高さを有するCUについては、ステップ1650は「NO」をリターンする。二次変換を行うためには、該当するTBは、二次変換の対象となるTBの位置に有意な残差係数を含むだけでよい。すなわち、他のすべての残差係数はゼロでなければならず、この条件は、TBの最終位置が、図8A~図8Dに示すTBサイズについて806、824、842、または862内にあるときに達成される。CU内の任意のTBの最終位置が、考慮されたTBサイズに対して806、824、842、または862の外にある場合、二次変換は行われず(ステップ1650で「NO」)、方法1600は、LFNSTインデックス決定のステップ1660に進行する。クロマTBについては、2の幅または高さが発生する可能性がある。幅または高さが2のTBは、そのようなサイズのTBに対して定義されたカーネルが存在しないので、二次変換の対象とはならない。二次変換を行う際の追加条件として、該当するTBの中に少なくとも1つのAC残差係数が存在することである。すなわち、有意な残差係数が各TBについてDC(左上)の位置にしかない場合、二次変換は実行されず(ステップ1650で「NO」)、方法1600は、LFNSTインデックス決定のステップ1660に進む。最後の有意な係数の位置および非DC残差係数の存在に関する制約は、適用可能なサイズのTB、すなわち、2サンプルより大きい幅および高さを有するTBにのみ適用される。少なくとも1つの適用可能なTBが変換され、最終位置の制約が満たされ、非DC係数要件が満たされる(ステップ1650で「YES」)ことを条件に、プロセッサ205内の制御は、LFNSTインデックス復号化のステップ1670へ進行する。
LFNSTインデックス決定のステップ1660は、CUに関連するTBのいずれにも二次変換を適用できない場合に実施される。ステップ1660で、プロセッサ205は、二次変換インデックスが、二次変換の適用がないことを示すゼロの値を有すると決定する。プロセッサ205における制御は、ステップ1660からMTSシグナリングのステップ1672に進行する。
LFNSTインデックス復号化のステップ1670において、エントロピー復号化器420は、二次変換の適用のための3つの可能な選択を示す二次変換インデックス474として、切り詰められた単項コードワードを復号する。選択は、0(適用されない)、1(候補セットの第1のカーネルが適用される)、および2(候補セットの第2のカーネルが適用される)である。コードワードは最大で2つのビンを使用し、各ビンはコンテキスト符号化される。ステップ1650で行われるテストにより、ステップ1670は、二次変換が適用されること、すなわち非ゼロインデックスが復号されることが可能である場合にのみ実行される。方法1600が共有符号化ツリーの一部として呼び出されるとき、ステップ1670は、ビットストリーム133から1120を復号する。方法1600が別個の符号化ツリーのルマブランチの一部として呼び出されるとき、ステップ1670は、ビットストリーム133から1224を復号する。ステップ1670が別個の符号化ツリーのクロマブランチの一部として呼び出されるとき、ステップ1670は、ビットストリーム133から1254を復号する。プロセッサ205内の制御は、ステップ1670からMTSシグナリングのステップ1672に進行する。
ステップ1650、1660、1670は、LFNSTインデックス、すなわち474を決定するために動作する。LFNSTインデックスは、CUに適用されるルマ変換スキップフラグおよびクロマ変換スキップフラグの少なくとも1つが、それぞれの変換ブロックの変換がスキップされないことを示す場合(ステップ1650で「YES」、ステップ1670を実行)、ビデオビットストリーム(例えば、復号1120、1224または1254)から復号化される。LFNSTインデックスは、CUに適用可能なルマ変換スキップフラグおよびクロマ変換スキップフラグのすべてが、それぞれの変換ブロックの変換をスキップすることを示す場合、二次変換を適用しないことを示すように決定される(ステップ1650で「NO」、およびステップ1660を実行する)。共有ツリーの場合、ルマスキップ値およびクロマスキップ値およびLFNSTインデックスは、異なることができる。例えば、クロマ変換ブロックについて復号化されたLFNSTインデックスは、例えば、コロケートされたブロックにおいて、復号化されたルマ変換スキップフラグが、ルマブロックについての変換がスキップされることを示す場合でも、復号化されたクロマスキップフラグに基づくことが可能である。符号化ステップ1480及び1490は、同様の方法で動作する。
MTSシグナリングのステップ1672で、ビデオ復号化器114は、ビットストリーム133からMTSインデックスを復号する必要があるか否かを判断する。ビットストリームを符号化する際に、ステップ1360でDCT-2変換の使用が選択された場合、最後の有意な係数位置は、TBの左上32×32領域内のどこにあってもよい。ステップ1620で復号された最後の有意な係数の位置がTBの左上16×16領域の外側であり、図18および図19のスキャンが使用される場合、DCT-2以外の一次変換を使用してもこの領域の外側に最後の有意な係数を生成しないので、mts_idxを明示的に復号する必要はない。ステップ1672は「NO」を返し、方法1600はステップ1672からMTSインデックス決定のステップ1674に進行する。非DCT2一次変換は、TB幅および高さが32以下の場合にのみ利用可能である。したがって、幅または高さが32を超えるTBについては、ステップ1672は「NO」を返し、方法1600は、MTSインデックス決定のステップ1674に進行する。
非DCT-2一次変換は、二次変換タイプ474が二次変換カーネルの適用をバイパスすることを示す場合にのみ利用可能であり、それに応じて、二次変換タイプ474が非ゼロ値を有する場合、方法1600はステップ1672からステップ1674へと進行する。図18および図19のスキャンを使用するとき、TBの左上16×16領域内の最後の有意な係数位置の存在は、DCT-2一次変換の適用、またはDST-7および/もしくはDCT-8のMTS組み合わせのいずれかから生じ得るので、ステップ1360で行われた選択を符号化するためにmts_idxの明示的なシグナリングが必要となる。したがって、最後の有意な係数位置がTBの左上16×16領域内にあるとき、ステップ1672は「YES」を返し、方法1600はMTSインデックス復号化のステップ1676に進行する。
MTSインデックス決定のステップ1674で、ビデオ復号化器134は、一次変換としてDCT-2を使用することを決定する。一次変換タイプ476は、ゼロに設定される。方法1400は、ステップ1674から変換残差ステップ1680に進行する。
MTSインデックス復号化のステップ1676で、エントロピー復号化器420は、ビットストリーム133から切り捨てられた単項のビン文字列を復号して、一次変換タイプ476を決定する。切り捨てられた文字列は、例えば図11の1122または図12の1226のようにビットストリームにある。方法1400は、ステップ1676から残差変換のステップ1680に進行する。
ステップ1670、1672、1674は、符号化ユニットのMTSインデックスを決定するために動作する。MTSインデックスは、最後の有意な係数が閾値座標(15、15)にあるか、または閾値座標内にある場合(ステップ1672およびステップ1676で「YES」)、映像ビットストリームから復号される。MTSインデックスは、最後の有意な係数が閾値座標の外にある場合、MTSを適用しないことを示すように決定される(ステップ1672およびステップ1674で「NO」)。符号化ステップ14100と14110は、同様の方法で動作する。
ビデオ符号化器114とビデオ復号化器134の代替配置では、適切なサイズのクロマTB(クロマTBにはMTSが適用されない)は、図17を参照して説明したようなスキャンパターンに従ってスキャンされ、ルマTBは図18及び19に従ってスキャンを利用し、ルマTBにのみDST-7/DCT-8の組み合わせが適用される。
残差変換のステップ1680において、ビデオ復号化器314は、プロセッサ205の実行の下、ステップ1420の残差に対して逆一次および逆二次変換をバイパスするか、または一次変換タイプ476および二次変換インデックス474にしたがって逆変換を実行する。変換は、図4を参照して説明したように、CUの各TBについての復号化変換スキップフラグ478に従って、CUの各TBについて実行される。一次変換タイプ476は、符号化ユニットのルマTBに対して、水平方向および垂直方向にDCT-2を使用するか、水平方向および垂直方向にDCT-8およびDST-7の組合せを使用するかを選択する。実質的に、ステップ1680は、復号されたルマ変換スキップフラグ、一次変換タイプ476、およびステップ1610および1650から1670の動作によって決定された二次変換インデックスに従ってCUのルマ変換ブロックを変換し、符号化ユニットを復号化する。また、ステップ1680は、ステップ1630及び1650から1670の動作によって決定されたそれぞれの復号されたクロマ変換スキップフラグ及び二次変換インデックスに従ってCUのクロマ変換ブロックを変換して、符号化ユニットを復号化することができる。クロマチャネルに属するTB(例えば:共有符号化ツリーの場合の1132と1136、別符号化ツリーの場合のクロマブランチの1264と1268)については、4サンプル未満の幅または高さを有するTBの利用可能な二次変換カーネルがないため、TBの幅および高さが4サンプル以上の場合にのみ二次変換が実行される。クロマチャネルに属するTBについては、UHDや8Kなどの映像フォーマットをサポートするために必要なブロックスループット速度でこのような小さなサイズのTBを処理することが困難であるため、VVC規格ではTBサイズが2×2,2×4,42×のイントラ予測CUを禁止する分割操作の制限が設けられている。さらに、イントラ予測動作の一部として再構成されたサンプルを生成するために通常使用されるオンチップメモリのためのメモリアクセスが困難であるため、幅2のTBを有するイントラ予測CUを禁止する制約がある。したがって、二次変換が適用されないクロマTBサイズ(クロマサンプルユニット)を表1に示す。
本明細書で説明したように、符号化および復号化において、異なるスキャンパターンを使用することができる。ステップ1680は、MTSインデックスに従ってCUの変換ブロックを変換し、符号化ユニットを復号化する。
方法1600は、ステップ1680から予測ブロック生成のステップ1690に続く。ステップ1690において、ビデオ復号化器134は、ステップ1360で決定され、エントロピー復号化器420によってビットストリーム113から復号されるようなCUの予測モードに従って452、予測ブロックを生成する。エントロピー復号化器420は、ステップ1360で決定されたような符号化ユニットのための予測モードを、ビットストリーム133から復号する。符号化ユニットに対するイントラ予測、インター予測、または他の予測モードの使用を区別するために、「pred_mode」シンタックスエレメントが復号される。イントラ予測が符号化ユニットに対して使用される場合、ルマPBがCUに適用可能であればルマイントラ予測モードが復号化され、クロマPBがCUに適用可能であればクロマイントラ予測モードが復号化される。
方法1600は、ステップ1690から符号化ユニット再構成のステップ16100に続く。ステップ16100で、予測ブロックは、CUの各カラーチャネルに対する残差サンプル424に452加えられ、再構成されたサンプル456を生成する。デブロッキングなどの追加のインループフィルタリングステップは、フレームデータ135として出力される前に、再構成されたサンプル456に適用されてもよい。方法1600は、ステップ16100の実行で終了する。
上述したように、別個の符号化ツリーの場合、方法1600はまずルマブランチ1214aの各CU、例えば1220に対して呼び出され、方法1600はまたクロマブランチ1214bの各クロマCU、例えば1250に対して別個に呼び出される。クロマ用の方法1600の呼び出しは、CU1250のクロマ変換スキップフラグのすべてが設定されているかどうかに関して、ステップ1650から1670でLFNSTインデックス1254を決定する。同様に、ルマ用の方法1600の呼び出しにおいて、ルマLFNSTインデックス1224は、CU1220のみのルマ変換スキップフラグに関してステップ1650から1670で決定される。
ステップ1450および1620で実施される図18~図20に示すスキャンパターン、すなわち1810、1910、および2010a~fは、図17のスキャンパターン1710と比較して、TBの最高周波数の係数からTBの最低周波数の係数に向かって進行する特性を実質的に保持する。したがって、スキャンパターン1810、1910、および2010a~fを使用するビデオ符号化器114およびビデオ復号化器134の配置は、MTS変換係数領域の外側のゼロ値残差係数をチェックするさらなる必要なく、最後の有意な係数位置に依存することができるようにしながら、スキャンパターン1710を用いたときに達成したのと同様の圧縮効率を達成する。図18~図20のスキャンパターンで使用される最終位置は、すべての有意な係数が左上16x16領域などの適切な左上領域に存在する場合にのみ、MTSを使用することを可能にする。適切な領域の外側、例えばTBの16×16係数領域の外側のフラグをチェックして、有意でない係数がさらに存在しないことを確認するための復号化器134の負担は除去される。復号化器における動作は、MTSを実装するために特定の変更を必要としない。さらに、上述したように、図18および図19のスキャンパターンの使用、すなわち、サイズ16×32、32×16、および32×32の変換ブロックに対する使用は、16×16スキャンから複製され、それによって、メモリ要件を減少させることが可能である。