本開示は、ビデオ圧縮規格の基本的部分である、変換コーディングの高度な適用に伴う問題を解決し得る技法について説明する。本開示の技法は、多数の分離不可能変換のためのメモリおよび計算を低減することができ、合理的なコストで大きいコーディング利得を実現する可能性がある。過去には、ビデオコーディングに関していくつかのデータ適応型変換技法が提案されており、そうした技法は非常に大幅なコーディング利得を示す一方、非常に複雑であった。場合によっては、本開示の技法は、必要とされるメモリを低減することができ、パフォーマンスロスがごくわずかとなる可能性がある。
たとえば、ビデオエンコーダが、ビデオデータの現在ピクチャの現在ブロックに関する残差値を決定し得る。この例では、ビデオエンコーダは、現在ブロックに関する複数のデータ要素(たとえば、変換係数)を導出するために、現在ブロックに関する残差値に変換を適用し得る。現在ブロックに関する残差値に変換を適用することの一部として、ビデオエンコーダは、ベクトル変換のシーケンスを適用する。この例では、ベクトル変換のシーケンスの第1のベクトル変換に関する入力値は、現在ブロックに関する残差値を含む。さらに、この例では、ベクトル変換のシーケンスの最後のベクトル変換の出力値は、現在ブロックに関するデータ要素を含む。ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含む。ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトルを受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。ビデオエンコーダは、現在ピクチャの符号化された表現を含むビットストリームに、現在ブロックに関するデータ要素に基づく値を有するシンタックス要素を含めることができる。
同様に、ビデオデコーダが、ビデオデータの現在ピクチャの符号化された表現を含むビットストリーム中のシンタックス要素に基づいて、現在ピクチャの現在ブロックに関する複数のデータ要素(たとえば、変換係数)を決定し得る。この例では、ビデオデコーダは、現在ブロックに関する残差値を導出するために、データ要素に変換を適用し得る。変換は、本明細書ではパスと呼ばれることもある、ベクトル変換のシーケンスを含む。この例では、ベクトル変換のシーケンスの第1のベクトル変換に関する入力値は、複数のデータ要素を含む。ベクトル変換のシーケンスの最後のベクトル変換に関する出力値は、現在ブロックに関する残差値を含む。この例では、ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含む。ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトルを受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。ビデオデコーダは、導出された残差データに基づいて、現在ピクチャのサンプルを再構成し得る。
図1は、本開示の技法を利用し得る例示的なビデオ符号化および復号システム10を示すブロック図である。図1に示すように、システム10は、宛先デバイス14によって後で復号されるべき符号化ビデオデータを提供するソースデバイス12を含む。詳細には、ソースデバイス12は、コンピュータ可読媒体16を介して宛先デバイス14にビデオデータを提供する。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、タブレットコンピュータ、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、ビデオストリーミングデバイスなどを含む、広範囲のデバイスのうちのいずれかを含み得る。いくつかの場合、ソースデバイス12および宛先デバイス14は、ワイヤレス通信に対応し得る。したがって、ソースデバイス12および宛先デバイス14はワイヤレス通信デバイスであり得る。ソースデバイス12は、例示的なビデオ符号化デバイス(すなわち、ビデオデータを符号化するためのデバイス)である。宛先デバイス14は、例示的なビデオ復号デバイス(すなわち、ビデオデータを復号するためのデバイス)である。
図1の例では、ソースデバイス12は、ビデオソース18、ビデオデータを記憶するように構成された記憶媒体19、ビデオエンコーダ20、および出力インターフェース24を含む。宛先デバイス14は、入力インターフェース26、符号化されたビデオデータを記憶するように構成された記憶媒体28、ビデオデコーダ30、およびディスプレイデバイス32を含む。他の例では、ソースデバイス12および宛先デバイス14は、他の構成要素または構成を含む。たとえば、ソースデバイス12は、外部カメラなどの外部ビデオソースからビデオデータを受信し得る。同様に、宛先デバイス14は、統合されたディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースしてもよい。
図1の図示されたシステム10は一例にすぎない。ビデオデータを処理するための技法は、任意のデジタルビデオ符号化および/または復号デバイスによって実行され得る。一般に、本開示の技法はビデオ符号化デバイスによって実行されるが、技法はまた、通常は「コーデック」と呼ばれるビデオエンコーダ/デコーダによって実行され得る。ソースデバイス12および宛先デバイス14は、単に、ソースデバイス12が宛先デバイス14に送信するためのコーディングされたビデオデータを生成するようなコーディングデバイスの例である。いくつかの例では、ソースデバイス12および宛先デバイス14は、ソースデバイス12および宛先デバイス14の各々がビデオ符号化構成要素および復号構成要素を含むように実質的に対称的な方式で動作し得る。したがって、システム10は、たとえば、ビデオストリーミング、ビデオ再生、ビデオ放送、またはビデオ電話のための、ソースデバイス12と宛先デバイス14との間の一方向または双方向のビデオ送信をサポートし得る。
ソースデバイス12のビデオソース18は、ビデオカメラ、以前にキャプチャされたビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェースなどのビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソース18は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオとアーカイブされたビデオとコンピュータで生成されたビデオとの組合せを生成し得る。ソースデバイス12は、ビデオデータを記憶するように構成された1つまたは複数のデータ記憶媒体(たとえば、記憶媒体19)を含み得る。本開示において説明される技法は、ビデオコーディング全般に適用可能であることがあり、ワイヤレスおよび/または有線の適用例において適用されることがある。各場合において、キャプチャされた、事前にキャプチャされた、またはコンピュータで生成されたビデオは、ビデオエンコーダ20によって符号化され得る。出力インターフェース24は、符号化されたビデオ情報をコンピュータ可読媒体16に出力し得る。
宛先デバイス14は、コンピュータ可読媒体16を介して、復号されるべき符号化されたビデオデータを受信し得る。コンピュータ可読媒体16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な任意のタイプの媒体またはデバイスを含み得る。いくつかの例では、コンピュータ可読媒体16は、ソースデバイス12がリアルタイムで宛先デバイス14に符号化されたビデオデータを直接送信することを可能にする通信媒体を含む。符号化されたビデオデータは、ワイヤレス通信プロトコルなどの通信規格に従って変調され、宛先デバイス14に送信され得る。通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などの、任意のワイヤレスまたは有線通信媒体を含み得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなどの、パケットベースネットワークの一部を形成し得る。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にするために有用であり得る任意の他の機器を含み得る。宛先デバイス14は、符号化されたビデオデータおよび復号されたビデオデータを記憶するように構成された1つまたは複数のデータ記憶媒体を含み得る。
いくつかの例では、符号化されたデータは、出力インターフェース24から記憶デバイスに出力され得る。同様に、符号化されたデータは、入力インターフェースによって記憶デバイスからアクセスされ得る。記憶デバイスは、ハードドライブ、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、揮発性メモリもしくは不揮発性メモリ、または符号化されたビデオデータを記憶するための任意の他の適切なデジタル記憶媒体などの、分散されるかまたは局所的にアクセスされる様々なデータ記憶媒体のいずれかを含み得る。さらなる一例では、記憶デバイスは、ソースデバイス12によって生成された符号化されたビデオを記憶し得るファイルサーバまたは別の中間記憶デバイスに対応し得る。宛先デバイス14は、ストリーミングまたはダウンロードを介して記憶デバイスからの記憶されたビデオデータにアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶するとともにその符号化されたビデオデータを宛先デバイス14に送信することが可能な、任意のタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイトのための)ウェブサーバ、FTPサーバ、ネットワーク接続ストレージ(NAS)デバイス、またはローカルディスクドライブを含む。宛先デバイス14は、インターネット接続を含む任意の標準的なデータ接続を通じて、符号化されたビデオデータにアクセスし得る。これは、ファイルサーバに記憶された符号化されたビデオデータにアクセスするのに適した、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。記憶デバイスからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはそれらの組合せであり得る。
本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、動的適応ストリーミングオーバーHTTP(DASH:dynamic adaptive streaming over HTTP)などのインターネットストリーミングビデオ送信、データ記憶媒体上に符号化されているデジタルビデオ、データ記憶媒体上に記憶されたデジタルビデオの復号、または他の用途などの、様々なマルチメディア用途のいずれかをサポートするビデオコーディングに適用され得る。いくつかの例では、システム10は、ビデオストリーミング、ビデオ再生、ビデオ放送、および/またはビデオ電話などの用途をサポートするために、一方向または双方向のビデオ送信をサポートするように構成され得る。
コンピュータ可読媒体16は、ワイヤレス放送もしくは有線ネットワーク送信などの一時媒体、またはハードディスク、フラッシュドライブ、コンパクトディスク、デジタルビデオディスク、Blu-ray(登録商標)ディスク、もしくは他のコンピュータ可読媒体などの記憶媒体(すなわち、非一時的記憶媒体)を含み得る。いくつかの例では、ネットワークサーバ(図示せず)が、たとえば、ネットワーク送信を介して、ソースデバイス12から符号化されたビデオデータを受信し、符号化されたビデオデータを宛先デバイス14に提供し得る。同様に、ディスクスタンピング設備などの媒体製造設備のコンピューティングデバイスが、ソースデバイス12から符号化されたビデオデータを受信し、符号化されたビデオデータを含むディスクを製造し得る。したがって、コンピュータ可読媒体16は、様々な例において、様々な形態の1つまたは複数のコンピュータ可読媒体を含むものと理解されてよい。
宛先デバイス14の入力インターフェース26は、コンピュータ可読媒体16から情報を受信する。コンピュータ可読媒体16の情報は、ビデオエンコーダ20によって定義され、ビデオデコーダ30によっても使用される、シンタックス情報を含むことがあり、シンタックス情報は、ブロックおよび他のコーディングされたユニット、たとえばピクチャグループ(GOP)の特性および/または処理を記述するシンタックス要素を含む。記憶媒体28は、入力インターフェース26によって受信された符号化されたビデオデータを記憶し得る。ディスプレイデバイス32は、復号されたビデオデータをユーザに表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスのいずれかを含み得る。
ビデオエンコーダ20およびビデオデコーダ30は、各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せなどの、様々な適切な固定関数および/またはプログラマブル回路のいずれかとして実装される場合がある。技法が部分的にソフトウェアで実装されるとき、デバイスは、適切な非一時的コンピュータ可読媒体にソフトウェアのための命令を記憶し、本開示の技法を実行するための1つまたは複数のプロセッサを使用してハードウェアにおいて命令を実行し得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれることがあり、そのいずれもが、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合されることがある。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、現行はたは将来の規格などのビデオコーディング規格に従って動作し得る。例示的なビデオコーディング規格は、限定はされないが、ITU-T H.261、ISO/IEC MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 VisualおよびITU-T H.264(ISO/IEC MPEG-4 AVCとしても知られる)(そのスケーラブルビデオコーディング(SVC)拡張およびマルチビュービデオコーディング(MVC)拡張を含む)を含む。加えて、新しいビデオコーディング規格、すなわち高効率ビデオコーディング(HEVC)またはITU-T H.265(その範囲およびスクリーンコンテンツコーディング拡張を含む)、3Dビデオコーディング(3D-HEVC)ならびにマルチビュー拡張(MV-HEVC)およびスケーラブル拡張(SHVC)が、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)によって最近開発された。
HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは、通常、一連のピクチャを含む。ピクチャは、「フレーム」と呼ばれる場合もある。ピクチャは、SL、SCb、およびSCrと表記される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれる場合もある。他の事例では、ピクチャはモノクロームの場合があり、ルーマサンプルのアレイしか含まない場合がある。
ピクチャの符号化された表現を生成するために、ビデオエンコーダ20は、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造を含み得る。モノクロームピクチャ、または3つの別個のカラープレーンを有するピクチャでは、CTUは、単一のコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造を含み得る。コーディングツリーブロックは、サンプルのN×Nブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれる場合もある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックに大まかに類似する場合がある。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含む場合がある。スライスは、ラスタ走査順序で連続的に順序付けられた整数個のCTUを含む場合がある。
本開示は、1つまたは複数のサンプルブロックのサンプルをコーディングするために使用される1つまたは複数のサンプルブロックおよびシンタックス構造を指すために、「ビデオユニット」または「ビデオブロック」または「ブロック」という用語を使用することがある。例示的なタイプのビデオユニットは、CTU、CU、PU、変換ユニット(TU)、マクロブロック、マクロブロック区分などを含み得る。いくつかのコンテキストでは、PUの説明は、マクロブロックまたはマクロブロック区分の説明と交換され得る。例示的なタイプのビデオブロックは、コーディングツリーブロック、コーディングブロック、およびビデオデータの他のタイプのブロックを含み得る。
コーディングされたCTUを生成するために、ビデオエンコーダ20は、CTUのコーディングツリーブロックに対して4分木区分を再帰的に実行して、コーディングツリーブロックをコーディングブロックに分割することができ、したがって、「コーディングツリーユニット」という名前である。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、Cbサンプルアレイ、およびCrサンプルアレイを有するピクチャのルーマサンプルのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックと、コーディングブロックのサンプルをコーディングするために使用されるシンタックス構造とを含み得る。モノクロームピクチャまたは3つの別個のカラープレーンを有するピクチャでは、CUは、単一のコーディングブロック、およびコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造を含み得る。
ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックである。CUの予測ユニット(PU)は、ルーマサンプルの予測ブロック、クロマサンプルの2つの対応する予測ブロック、および予測ブロックを予測するために使用されるシンタックス構造を含み得る。モノクロームピクチャまたは3つの別個のカラープレーンを有するピクチャでは、PUは、単一の予測ブロック、および予測ブロックを予測するために使用されるシンタックス構造を含み得る。ビデオエンコーダ20は、CUの各PUの予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)の予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)を生成し得る。
ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、PUの予測ブロックを生成することができる。ビデオエンコーダ20がイントラ予測を使用してPUの予測ブロックを生成する場合、ビデオエンコーダ20は、PUを含むピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。
ビデオエンコーダ20がCUの1つまたは複数のPUの予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)を生成した後、ビデオエンコーダ20は、CUの1つまたは複数の残差ブロックを生成し得る。たとえば、ビデオエンコーダ20は、CUのルーマ残差ブロックを生成し得る。CUのルーマ残差ブロック中の各サンプルは、CUの予測ルーマブロックのうちの1つの中のルーマサンプルとCUの元のルーマコーディングブロック中の対応するサンプルとの間の差分を示す。加えて、ビデオエンコーダ20は、CUのCb残差ブロックを生成し得る。CUのCb残差ブロック中の各サンプルは、CUの予測Cbブロックのうちの1つの中のCbサンプルとCUの元のCbコーディングブロック中の対応するサンプルとの間の差分を示し得る。ビデオエンコーダ20はまた、CUのCr残差ブロックを生成し得る。CUのCr残差ブロック中の各サンプルは、CUの予測Crブロックのうちの1つの中のCrサンプルとCUの元のCrコーディングブロック中の対応するサンプルとの間の差分を示し得る。
さらに、ビデオエンコーダ20は、残差ブロックを1つまたは複数の変換ブロックに分解し得る。たとえば、ビデオエンコーダ20は、4分木区分を使用して、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を1つまたは複数の変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)に分解し得る。変換ブロックは、同じ変換が適用されるサンプルの矩形(たとえば、正方形または非正方形)ブロックである。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造を含み得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックを有し得る。TUのルーマ変換ブロックは、CUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。モノクロームピクチャまたは3つの別個のカラープレーンを有するピクチャでは、TUは、単一の変換ブロック、および変換ブロックのサンプルを変換するために使用されるシンタックス構造を含み得る。
ビデオエンコーダ20は、TUの変換ブロックに1つまたは複数の変換を適用して、TUの係数ブロックを生成することができる。たとえば、ビデオエンコーダ20は、TUのルーマ変換ブロックに1つまたは複数の変換を適用して、TUのルーマ係数ブロックを生成することができる。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。ビデオエンコーダ20は、TUのCb変換ブロックに1つまたは複数の変換を適用して、TUのCb係数ブロックを生成することができる。ビデオエンコーダ20は、TUのCr変換ブロックに1つまたは複数の変換を適用して、TUのCr係数ブロックを生成することができる。
係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後に、ビデオエンコーダ20は、係数ブロックを量子化し得る。量子化は一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現するプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後、ビデオエンコーダ20は、量子化変換係数を示すシンタックス要素をエントロピー符号化することができる。たとえば、ビデオエンコーダ20は、量子化変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行することができる。
ビデオエンコーダ20は、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含むビットストリームを出力することができる。したがって、ビットストリームは、ビデオデータの符号化された表現を含む。ビットストリームは、ネットワーク抽象化レイヤ(NAL)ユニットのシーケンスを含み得る。NALユニットは、NALユニット中のデータのタイプの指示と、必要に応じてエミュレーション防止ビットが散りばめられているローバイトシーケンスペイロード(RBSP)の形態でそのデータを含むバイトとを含む、シンタックス構造である。NALユニットの各々は、NALユニットヘッダを含むことがあり、RBSPをカプセル化する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化されている整数個のバイトを含むシンタックス構造であり得る。いくつかの事例では、RBSPは0個のビットを含む。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームを構文解析して、ビットストリームからシンタックス要素を取得することができる。ビデオデコーダ30は、ビットストリームから取得されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構成することができる。ビデオデータを再構成するためのプロセスは、全般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、PUの動きベクトルを使用して、現在CUのPUの予測ブロックを決定し得る。加えて、ビデオデコーダ30は、現在CUのTUの係数ブロックを逆量子化し得る。ビデオデコーダ30は、係数ブロックに対して逆変換を実行して、現在CUのTUの変換ブロックを再構成し得る。ビデオデコーダ30は、現在CUのPUの予測ブロックのサンプルを、現在CUのTUの変換ブロックの対応するサンプルに加算することによって、現在CUのコーディングブロックを再構成し得る。ピクチャのCUごとにコーディングブロックを再構成することによって、ビデオデコーダ30はピクチャを再構成し得る。
変換コーディングは、(G. J. Sullivan、J.-R. Ohm、W.-J. Han、およびT. Wiegand、「Overview of the High Efficiency Video Coding (HEVC) Standard」、IEEE Trans. Circuits Syst. Video Technol、vol. 22、no. 12、1649〜1668頁、2012年12月、M. Wien、High Efficiency Video Coding: Coding Tools and Specification、Springer- Verlag、ベルリン、2015年において説明されているような)高効率ビデオコーディング(HEVC)のようなすべての現代のビデオコーディング規格の基本的な部分である。行列ベースのカルーネンレーベ変換(KLT)(または同様に適応的な変換)が特定の信号統計に最適であり得るので、最適な変換コーディングはそれらを用いるべきであることが知られている。しかしながら、行列の実装は、比較的多数の計算および比較的大量のメモリを必要とする傾向がある。実際には、離散コサイン変換(DCT)のような固定分離可能変換が、変換を実施するためにより少ない計算およびメモリを使用し得るので、そのような変換が採用されている。
本開示は、KLTを使用して達成されるコーディング利得にほぼ等しいコーディング利得を取得することが可能であるが、メモリおよび計算が格段に少ない技法について説明する。いくつかの例では、本開示の技法は、以下に基づく。(a)ビデオエンコーダ20によってテストされ得るデータ固有の変換のセットを作成すること、次いでビデオエンコーダ20は、最良のデータ固有の変換(たとえば、ひずみを最小化するもの)を選択し得る。ビデオエンコーダ20は、ビデオデコーダ30によって使用されるインデックスを送る(たとえば、シグナリングする)ことができる、および(b)コンパクト多重パス変換(CMPT)と呼ばれる変換行列によるベクトルの乗算を近似するための技法。CMPT技法がビデオコーディング目的に特に最適化されており、コーディング利得推定値を使用して重要ではない変換パラメータおよび計算を識別するので、本開示の技法は、分離不可能な行列ベースの演算と比較して、より少ないメモリおよび計算を使用し得る。CMPTにより、多くのタイプの実装形態、また実際の例として、ハイパーキューブ-ギブンス変換(HyGT:Hypercube-Givens Transform)と呼ばれる変換近似技法に基づく実装形態が可能になる。
図2は、変換選択を伴うハイブリッドビデオ符号化のための例示的なシステム40を示すブロック図である。詳細には、図2は、ビデオ符号化システム(すなわち、ビデオエンコーダ20などのビデオエンコーダ)の図を示し、最初にビデオフレームがピクセルブロックに分割される(ブロック分離42)。例示的なタイプのピクセルブロックは、CUのコーディングブロックを含み得る。さらに、図2では、各ブロックにおいて、ビデオエンコーダは、各ピクセル値をその予測値から差し引く(44)。ビデオエンコーダは、線形演算を使用して差分(すなわち、残差)のブロックを数値的に変換する(ブロック変換46)。図2の例では、rは、残差データを示し、ytは、変換された残差データを示し、tは、ytを生成するために残差にどの変換が適用されたかの指示を示す。
行列ベクトル乗算によって線形変換が実施され得るが、ビデオコーディング適用は、三角関数から導出された固定係数を有する、同等の行列ベクトル積よりもはるかに効率的に計算され得るいくつかの特殊な高速変換を使用している。V. Britanak、P. C. Yip、およびK. R. Rao、Discrete Cosine and Sine Transforms: General Properties, Fast Algorithms and Integer Approximations、Academic Press、2007年を参照されたい。本開示は、CMPTを使用するいくつかの可能なさらなる改善について説明しており、ベクトル変換のセットがパイプライン方式で使用されて、ベクトル変換によって生成された出力値がパイプライン中の後続ベクトル変換に供給され、各それぞれのベクトル変換が入力として、先行ベクトル変換からの出力に加えて1つまたは複数のパラメータを受信する。
図2では、ビデオエンコーダは、変換された残差データを量子化し(量子化48)、量子化変換残差データを逆量子化する(逆量子化50)ことができる。さらに、ビデオエンコーダは、残差データを復元するために、逆量子化変換残差データに逆変換を適用し得る(逆変換52)。復号ピクチャバッファ(DPB)とも呼ばれる、ビデオエンコーダのフレームバッファ54は、残差データに基づいて決定された再構成されたピクセルブロックを記憶する。ビデオエンコーダは、フレームバッファ54に記憶された再構成されたピクセルブロックを、他のピクセルブロックの予測のために使用し得る(ブロック予測56)。図2の例では、ビデオエンコーダによって変換された残差データに適用される逆変換は、変換された残差データを生成するために以前適用された変換に基づいて決定され得る。変換された残差データを生成するためにどの変換が適用されたかの指示が、ビデオエンコーダのエントロピー符号化ユニット58に提供され得る。エントロピー符号化ユニット58は、量子化変換残差データを示すシンタックス要素とともに変換を示すシンタックス要素をエントロピー符号化し得る。
図3Aおよび図3Bは、ビデオ残差の2次元ブロックに変換を適用するための例示的なオプションを示す。詳細には、図3Aは、ピクセル残差の2次元ブロックにおける分離可能変換を計算するための例示的なオプションを示す概念図である。図3Bは、ピクセル残差の2次元ブロックにおける分離不可能変換を計算するための例示的なオプションを示す概念図である。
分離可能と呼ばれる第1のオプション(たとえば、図3A)では、図3A中の矢印によって示されるように、残差はまず行で、次いで列で(またはその逆で)別個に変換される。より詳細には、N×N入力ブロック60のそれぞれの行ごとに、ビデオエンコーダ/デコーダ(一般的にビデオコーダと呼ばれる)が、N×N変換行列によってそれぞれの行の要素からなるベクトルを乗算することによって、中間ブロック62の行を生成する。中間ブロック62のそれぞれの列ごとに、ビデオコーダは、N×N変換行列によってそれぞれの列の要素からなるベクトルを乗算することによって、出力ブロックの列を生成する。
分離不可能と呼ばれるブロック変換の第2のタイプ(たとえば、図3B)では、すべての残差が、図3Bに示すように単一のベクトルにまとめられ、一緒に変換される。このオプションは、ピクセルブロックの2次元構造を活用しないが、このオプションは、より一般的かつ強力であり、水平および垂直とは異なる方向特徴を活用することができる。たとえば、N×N個の値からなる入力ブロック64の場合、変換行列はN2×N2である。出力ブロックまたはベクトル66を決定するために、ビデオコーダは、変換行列によって入力ブロック64を乗算する。
計算複雑性を最小限に抑えるために、ビデオコーディング規格は、たった1つのブロックサイズおよび1つのタイプの分離可能変換(DCT)を使用してきた。HEVCの最近の採用に伴って、いくつかのブロックサイズに関して分離可能変換が定義され、離散サイン変換(DST)が採用されている。
図2に示すように、ビデオエンコーダがいくつかの異なる変換をテストし、最良の圧縮をもたらす変換を使用し、使用された変換のインデックスtをビデオデコーダに送ることができる場合、さらに良好な圧縮が達成され得る(Y. YeおよびM. Karczewicz、「Improved H.264 intra coding based on bi-directional intra prediction, directional transform, and adaptive coefficient scanning」、Proc. IEEE Int. Conf. Image Process.、サンディエゴ、カリフォルニア、2008年10月、2116〜2119頁、S. TakamuraおよびA. Shimizu、「On intra coding using mode dependent 2D-KLT」、Proc.30th Picture Coding Symp.、サンノゼ、カリフォルニア、2013年12月、137〜140頁、O. G. Sezer、O. G. Guleryuz、およびY. Altunbasak、「Approximation and compression with sparse orthonormal transforms」、IEEE Trans. Image Processing、2328〜2343頁、2015年8月、ならびにH. E. Egilmez、A. Said、Y.-H. Chao、およびA. Ortega、「Graph-based transforms for inter predicted video coding」、Proc. IEEE Int. Conf. Image Process.、ケベックシティ、カナダ、2015年9月、3992〜3996頁参照)。いくつかの例では、インデックスtは、変換のリスト中の変換を示すことによって変換を識別し得る。
本開示は、最初に変換インデックスtごとに、条件付き残差相関行列
Ct=Er|t{r r'} (1)
を計算し、次いで、以下のように相関行列を対角化する直交行列Ktを計算することによって、最適KLTが導出されることを検討する。
Kt Ct K't=Dt (2)
行列Ktは通常、以下のように行列ベクトル積を通じて変換係数yt(図2)のベクトルの計算に直接使用される。
yt=Ktr (3)
分離不可能変換のための現在の行列ベースの技法は、メモリおよび計算に対する過度の要求を必要とし得る。本開示の後半部分では、本開示の技法がこの問題にどのように対処し得るかについて説明する。
下のTable I(表1)は、異なるタイプの2-D線形変換の計算複雑性を示す(Table I(表1)の最後の行については、以下で詳細に説明する)。ブロックサイズNは2の累乗、すなわちN=2Bとして定義されるので、これは指数関数的な複雑性の増大につながり、異なる変換タイプの間で相当な差があり得る。
Table I(表1)において、たった1つの変換がビデオデコーダによって選択され、使用されるので、計算されるピクセルごとの演算の相対的測定が検討される。一方、すべての行列が記憶されなければならないので、メモリ要件は相対的に測定できない。いくつかのビデオ適用が数百または数千の異なる行列を必要とすることがあり、それらが高価な高速メモリに記憶される必要があり得ることに留意することも重要である。
ビデオコーディングの初期の実装形態では、最も単純な手法のみ、すなわち、高速分離可能変換が事実上実現可能であった。今では、小さいブロックサイズ(たとえば、4×4ブロック)のための行列ベースの分離不可能変換が検討され得るが、その要件は、ブロックサイズとともにあまりにも急速に増大することがあり、ブロックが大きくなると法外になり得る。
欠落しているのは、行列ベースの手法と同じ複雑性の増大を伴わない形で、分離不可能変換を効率的に実施するソリューションである。本開示の技法は、そのタイプのソリューションを提供し得る。
本開示の技法は、ビデオ圧縮への変換コーディングの適用に存在する特定のタイプの特徴に基づく。他の適用例では、疎であるか、または特殊構造を有する行列を使用することによって、行列ベクトル演算の複雑性が低減され得る。しかしながら、行列Ktは直交しなければならず、複雑性の制約が行列に直接加えられた場合、それらの圧縮効果が実現され得ないので、それらの技法はビデオコーディングのケースにおいて適用できない。
本開示の例示的なソリューションは、以下に基づく。第一に、本技法は、KLT変換を正確に計算しようとしない。代わりに、本技法は、以下の形式で、KLTの近似値を与えるにすぎないベクトル変換Mt(x)(すなわち、あるベクトルを同じ次元の別のベクトルにマッピングする変換)を求める。
zt=Mt(r)≒yt=Ktr (4)
上記の式では、ztは変換tの出力であり、rは残差データである。
第二に、完全行列ベクトル積が、(パスと呼ばれる)Pt個の異なるベクトル変換Mt,pのシーケンスに置き換えられ、このシーケンスは、各々がパラメータベクトルht,pを有し、関数形式Mt,p(x,ht,p)によるものであり、最終残差変換は、以下の形式による。
本開示の技法は、Pt個のパスによるこのタイプのベクトル変換を対象とし、これは本明細書ではコンパクト多重パス変換(CMPT)と呼ばれる。CMPTの実装形態が図4の図に示されている。言い換えれば、図4は、本開示の技法による、コンパクト多重パス変換実装形態の図である。本開示では、CMPTの定義はかなり一般的であるが、これらの一般的特徴の大半が実際に必要とされ得る。Table I(表1)に示す複雑性の尺度では、次元Nのベクトルに対する変換のためのCMPTに対する制限として、(1)CMPTパスのパラメータのセットを表すためのメモリの量は、Nに比例する必要があり、(2)各CMPTパスは、Nとは無関係である(一定である)時間(たとえば、演算数)をそれぞれ必要とする、Nに比例する数の処理要素を使用して並行して計算可能である場合がある。
図4の例では、ビデオコーダが入力ブロックrに変換を適用する。ビデオコーダがビデオデータを符号化している場合、入力ブロックは残差サンプルを含み得る。ビデオコーダがビデオデータを復号している場合、入力ブロックは変換係数を含み得る。さらに、図4の例では、ビデオコーダは、入力t(たとえば、変換を識別するために使用されるインデックス)に基づいて複数のパラメータアレイ70A〜70T(まとめてパラメータアレイ70)を決定する。いくつかの例では、ビデオコーダは、メモリにパラメータアレイ70を記憶するか、またはメモリに記憶されたデータからパラメータアレイを導出する。入力tは、どの変換を適用すべきかを示し得る。いくつかの例では、入力tは、変換のリストへのインデックスである。異なる変換は、異なるパラメータアレイおよび/または異なるパスに関連付けられ得る。いくつかの例では、入力tは、変換を明示的に識別しない1つまたは複数のデータを含む。たとえば、入力tは、ブロックサイズ、予測モード(たとえば、イントラ予測またはインター予測)、イントラ予測モードなどのうちの1つまたは複数を含み得る。そのような例では、入力tは、変換のリストへのインデックスではなく、変換を決定するために使用され得る何らかの他の情報であり得る。
図4の例では、変換を適用するために、ビデオコーダは一連のパス72A〜72T(まとめてパス72)を実行する。一連のパスの各それぞれのパスは、決定された複数のパラメータアレイのそれぞれのパラメータアレイに基づいて入力データを変換する。入力ブロックrは、一連のパスのうちの第1のパスの入力データである。第1のパス以外の一連のパスの各パスの入力データは、一連のパスの先行パスの出力データである。一連のパスの最後のパスの出力は、変換済みブロックztである。本開示の他の場所で説明するように、各パスは、ギブンス直交変換など、直交変換のセットを含み得る。ビデオコーダは、同時(並行)計算によりパス内の直交変換を実行し得る。たとえば、独立したギブンス変換のセットが、いくつかのプロセッサを使用して同時に計算され得る。
パラメータht,pの最適なセットは、様々な方法で発見され得る。たとえば、パラメータht,pの最適なセットは、可能なパラメータ値の探索を実行すること、および最良の結果をもたらす傾向があるパラメータ値の組合せを識別することによって発見され得る。この例では、探索は、符号化または復号プロセスとは別個に実行され得る。規範シンタックスは、以下を定義し得る。
1. どれが有効な変換であるか、およびそれらの許容パラメータは何か、
2. 復号に使用されるべき変換およびそれぞれのパラメータに関する情報をエンコーダがどのように伝達するかを定めるシンタックス。
いくつかの例では、パラメータの最適なセットは、事前計算され、ビデオエンコーダ20およびビデオデコーダ30の各々に記憶され得る。
一例として、CMPTの特定の一実装形態では、ベクトル要素のペアの独立セットに適用される、並行ギブンス直交変換(回転)のシーケンスが使用される。図5は、そのような変換を表すために一般的に使用される「バタフライ」図、およびその数学的意味を示す。したがって、図5の例では、バタフライはriおよびrjを入力として受信し、またパラメータθを入力として受信する。バタフライの出力は、yiおよびyjである。yiは、cos(θ)ri-sin(θ)rjとして計算される。yjは、cos(θ)rj+sin(θ)riとして計算される。逆変換を適用するとき、ビデオデコーダ30は、riをyicos(θ)+yjsin(θ)として、またrjを-yisin(θ)+yjcos(θ)として計算し得る。図5および本開示の他の例は、ギブンス回転に関して説明しているが、ハウスホルダー変換、3つ以上の角度によるオイラー変換、および他の変換など、ギブンス回転の代わりに他の変換が使用されてもよい。
図6は、次元16のベクトルに対して並行ギブンス回転のシーケンスを使用するコンパクト多重パス変換実装形態の図である。1つのパス内で適用されるギブンス回転が並行して適用され得るという意味で、ギブンス回転は並行である。それらのギブンス回転は、相応に連続的に、たとえば、図6に示すように、ハイパーキューブトポロジーに構成され得る。図6の変換は、入力r1...r16の各々が別個の次元と見なされ得るという意味で、ハイパーキューブトポロジーを有すると見なされ得る。図6の例は、Table I(表1)の最後の行に示すように、メモリおよび演算の複雑性を有するケースである。図6の例では、CMPTは、4つのパス80A、80B、80C、および80Dを含む。しかしながら、他の例では、他の数のパスが考えられる。
図6の例では、パラメータベクトルht,pは、対応するパスにおいて、各バタフライによって使用されるべき異なる角度(θ)を含む。たとえば、パラメータベクトルht,1は{0°,20°,40°,60°,80°,100°,120°,140°}であってよく、パラメータベクトルht,2は、{5°,25°,45°,65°,85°,105°,125°,145°}であってよく、以下同様である。バタフライごとにたった1つの角度が使用される必要があるので、パラメータベクトルは、残差ベクトルrの次元の半分を有する。たとえば、図6の例では、残差ベクトルrが16個のサンプルを含むので、パラメータベクトルの各々に8個のパラメータがある。
いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、異なる変換、異なるブロックサイズ、および異なるパスに対する異なるパラメータベクトルを使用し、いくつかの事例では記憶し得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、8×8ブロックでパラメータベクトル{0°,20°,40°,60°}および{5°,25°,45°,65°}を使用し得る。さらに、この例では、ビデオエンコーダ20およびビデオデコーダ30は、16×16ブロックでパラメータベクトル{2°,22°,42°,62°,82°,102°,122°,142°}、{5°,25°,45°,65°,85°,105°,125°,145°}、{7°,27°,47°,67°,87°,107°,127°,147°}、および{0°,20°,40°,60°,80°,100°,120°,140°}を使用し得る。
図6の例では、各バタフライは、図5に示すギブンス回転に対応する。したがって、図6の例では、各パスにおいて、8個のギブンス回転が(たとえば、並行して)実行される。各それぞれのパスpに関して、それぞれのパスにおけるギブンス回転の各々は、それぞれのパスに関するパラメータベクトル(ht,p)からの異なるパラメータ値(たとえば、θ)を使用し得る。たとえば、図6の左上バタフライの場合、ラウンド1のパラメータベクトル(すなわち、h1,1)における第1のパラメータ値が45°に等しい場合、左上バタフライの出力はcos(45°)r1-sin(45°)r2およびcos(45°)r2+sin(45°)r1に等しい。いくつかの例では、パスにおけるギブンス回転のうちの2つ以上が同じパラメータ値(たとえば、θ)を含み得る。
図6では、変換Mt,p(x,ht,p)の構造が各パスとともに変化することに留意されたい。したがって、パラメータまたは変換の順序が変更された場合、異なる結果が得られる。たとえば、図6のパス80Bのバタフライが図6のパス80Aのバタフライと交換された場合、異なる結果が得られることがある。
このようにして、ビデオエンコーダ20は、ビデオデータの現在ピクチャの現在ブロックに関する残差値を決定し得る。さらに、ビデオエンコーダ20は、現在ブロックに関する複数のデータ要素(たとえば、図4のzt、図6の値zt,1)を導出するために、現在ブロックに関する残差値(たとえば、図4のr、図6の値r1…r16)に変換を適用し得る。現在ブロックに関する残差値に変換を適用することの一部として、ビデオエンコーダ20は、ベクトル変換のシーケンス(たとえば、図4のパス72、図6のパス80)を適用する。ベクトル変換のシーケンスの第1のベクトル変換(たとえば、図4のパス72A、図6のパス80A)に関する入力値は、現在ブロックに関する残差値を含む。ベクトル変換のシーケンスの最後のベクトル変換(たとえば、図4のパス72T、図6のパス80D)の出力値は、現在ブロックに関するデータ要素を含む。ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含む。ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトル(たとえば、図4におけるht,1...ht,Pt、図6におけるht,1...ht,4)を受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。ビデオエンコーダ20は、現在ピクチャの符号化された表現を含むビットストリームに、現在ブロックに関するデータ要素に基づく値を有するシンタックス要素を含めることができる。
ビデオデコーダ30は、符号化において使用された変換の逆を適用し得る。たとえば、図6の例では、zt,1〜zt,16は変換への入力となることができ、r1〜r16は変換の出力である。ギブンス直交変換が使用される場合、逆ギブンス直交変換の入力はyiおよびyjであり、出力はriおよびrjであり、ri=cos(θ)yi+sin(θ)yj、rj=cos(θ)yj-sin(θ)yiである。
このようにして、ビデオデコーダ30は、ビデオデータの現在ピクチャの符号化された表現を含むビットストリーム中のシンタックス要素に基づいて、現在ピクチャの現在ブロックに関する複数のデータ要素(たとえば、変換係数、図6における値zt,1〜zt,16)を決定し得る。さらに、ビデオデコーダ30は、現在ブロックに関する残差値(たとえば、図6における値r1...r16)を導出するために、データ要素に変換を適用し得る。変換は、ベクトル変換のシーケンス(たとえば、図4のパス72、図6のパス80)を含む。図6に示すように、ベクトル変換のシーケンスの第1のベクトル変換(たとえば、図4のパス72A、図6のパス80A)に関する入力値は、複数のデータ要素を含む。さらに、図6に示すように、ベクトル変換のシーケンスの最後のベクトル変換(たとえば、図4のパス72T、図6のパス80D)に関する出力値は、現在ブロックに関する残差値を含む。ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含む。さらに、ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトル(たとえば、図4におけるht,1...ht,Pt、図6におけるht,1...ht,4)を受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。本開示の他の場所で説明するように、ビデオデコーダ30は、導出された残差データに基づいて、現在ピクチャのサンプルを再構成し得る。
様々な例について説明した。本開示の具体的な例は、別々に、または互いに組み合わせて使用され得る。
図7は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図7は説明のために提供され、本開示において広く例示され説明されるような技法の限定と見なされるべきでない。本開示の技法は、様々なコーディング規格または方法に適用可能であり得る。
処理回路はビデオエンコーダ20を含み、ビデオエンコーダ20は、本開示において説明される例示的な技法のうちの1つまたは複数を実行するように構成される。たとえば、ビデオエンコーダ20は集積回路を含み、図7に示される様々なユニットは、回路バスと相互接続されるハードウェア回路ブロックとして形成され得る。これらのハードウェア回路ブロックは別個の回路ブロックであってよく、またはユニットのうちの2つ以上が共通のハードウェア回路ブロックへと組み合わされてよい。ハードウェア回路ブロックは、算術論理演算装置(ALU)、初等関数演算装置(EFU)、ならびに、AND、OR、NAND、NOR、XOR、XNOR、および他の同様の論理ブロックなどの論理ブロックなどの、演算ブロックを形成する電気的構成要素の組合せとして形成され得る。
いくつかの例では、図7に示されるユニットのうちの1つまたは複数は、処理回路上で実行されるソフトウェアユニットであり得る。そのような例では、これらのソフトウェアのためのオブジェクトコードがメモリに記憶される。オペレーティングシステムは、ビデオエンコーダ20に、オブジェクトコードを取り出させ、オブジェクトコードを実行させることができ、オブジェクトコードは、ビデオエンコーダ20に、例示的な技法を実施するための動作を実行させる。いくつかの例では、ソフトウェアユニットは、ビデオエンコーダ20が起動時に実行するファームウェアであり得る。したがって、ビデオエンコーダ20は、例示的な技法を実行するハードウェアを有する構造的構成要素であり、または、ハードウェアを例示的な技法の実行専用にするためのハードウェア上で実行されるソフトウェア/ファームウェアを有する。
図7の例では、ビデオエンコーダ20は、予測処理ユニット100、ビデオデータメモリ101、残差生成ユニット102、変換処理ユニット104、量子化ユニット106、逆量子化ユニット108、逆変換処理ユニット110、再構成ユニット112、フィルタユニット114、参照ピクチャバッファ116、およびエントロピー符号化ユニット118を含む。予測処理ユニット100は、インター予測処理ユニット120およびイントラ予測処理ユニット126を含む。インター予測処理ユニット120は、動き推定ユニットおよび動き補償ユニット(図示せず)を含み得る。
ビデオデータメモリ101は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶するように構成され得る。ビデオデータメモリ101に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。参照ピクチャバッファ116は、復号ピクチャバッファと呼ばれることもある。参照ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する。ビデオデータメモリ101および参照ピクチャバッファ116は、ダイナミックランダムアクセスメモリ(DRAM)(シンクロナスDRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗型RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および参照ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって設けられてよい。様々な例では、ビデオデータメモリ101は、ビデオエンコーダ20の他の構成要素とともにオンチップであってもよく、または、これらの構成要素に対してオフチップであってもよい。ビデオデータメモリ101は、図1の記憶媒体19と同じであるか、またはその一部であり得る。
ビデオエンコーダ20は、ビデオデータを受信する。ビデオエンコーダ20は、ビデオデータのピクチャのスライス中の各CTUを符号化し得る。CTUの各々は、ピクチャの、等しいサイズのルーマコーディングツリーブロック(CTB)、および対応するCTBに関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、区分を実行して、CTUのCTBを次第に小さくなるブロックに分割し得る。より小さいブロックは、CUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、木構造に従ってCTUに関連付けられるCTBを区分し得る。
ビデオエンコーダ20は、CTUのCUを符号化して、CUの符号化された表現(すなわち、コーディングされたCU)を生成し得る。CUを符号化することの一部として、予測処理ユニット100は、CUの1つまたは複数のPUの間でCUに関連付けられるコーディングブロックを区分し得る。したがって、各PUは、ルーマ予測ブロックおよび対応するクロマ予測ブロックに関連付けられ得る。ビデオエンコーダ20およびビデオデコーダ30は、様々なサイズを有するPUをサポートし得る。上で示されたように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがあり、PUのサイズは、PUのルーマ予測ブロックのサイズを指すことがある。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、イントラ予測に対して2N×2NまたはN×NというPUサイズ、およびインター予測に対して2N×2N、2N×N、N×2N、N×N、または類似の、対称のPUサイズをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、インター予測に対して、2N×nU、2N×nD、nL×2N、およびnR×2NというPUサイズのための非対称区分をサポートし得る。
インター予測処理ユニット120は、CUの各PUに対してインター予測を実行することによって、PUに関する予測データを生成し得る。PUに関する予測データは、PUの予測ブロックおよびPUに関する動き情報を含み得る。イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによって、PUに関する予測データを生成し得る。PUに関する予測データは、PUの予測ブロックおよび様々なシンタックス要素を含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対して、イントラ予測を実行し得る。
イントラ予測をPUに対して実行するために、イントラ予測処理ユニット126は、複数のイントラ予測モードを使用して、PUに関する予測データの複数のセットを生成し得る。イントラ予測処理ユニット126は、隣接PUのサンプルブロックからのサンプルを使用して、PUの予測ブロックを生成し得る。PU、CU、およびCTUに対して左から右、上から下への符号化順序を仮定すると、隣接PUは、PUの上、右上、左上、または左であり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば、33個の方向性イントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUに関連付けられる領域のサイズに依存し得る。
予測処理ユニット100は、PUに関してインター予測処理ユニット120によって生成された予測データ、またはPUに関してイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUに関する予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみの尺度に基づいて、CUのPUに関する予測データを選択する。選択される予測データの予測ブロックは、本明細書で選択予測ブロックと呼ばれることがある。
残差生成ユニット102は、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)とCUのPUの選択予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)とに基づいて、CUの残差ブロック(たとえば、ルーマ残差ブロック、Cb残差ブロック、およびCr残差ブロック)を生成し得る。たとえば、残差生成ユニット102は、残差ブロック中の各サンプルがCUのコーディングブロック中のサンプルとCUのPUの対応する選択予測ブロック中の対応するサンプルとの間の差分に等しい値を有するように、CUの残差ブロックを生成し得る。
変換処理ユニット104は、4分木区分を実行して、CUに関連付けられる残差ブロックをCUのTUに関連付けられる変換ブロックに区分し得る。したがって、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックに関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づいてもよく、基づかなくてもよい。「残差4分木」(RQT)と呼ばれる4分木構造が、領域の各々に関連付けられるノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUのTUごとに変換係数ブロックを生成し得る。変換処理ユニット104は、TUに関連付けられる変換ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に類似の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは、変換係数ブロックとして扱われてよい。
本開示の技法によれば、変換処理ユニット104は、本開示の他の場所で説明するコンパクト多重パス変換(CMPT)技法を実装し得る。たとえば、変換処理ユニット104は、現在ブロックに関する複数のデータ要素を導出するために、現在ブロックに関する残差値に変換を適用し得る。この例では、現在ブロックに関する残差値に変換を適用することは、ベクトル変換のシーケンスを適用することを含む。この例では、ベクトル変換のシーケンスの第1のベクトル変換に関する入力値は、現在ブロックに関する残差値を含む。さらに、この例では、ベクトル変換のシーケンスの最後のベクトル変換の出力値は、現在ブロックに関するデータ要素を含む。この例では、ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含む。さらに、この例では、ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトルを受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。
量子化ユニット106は、係数ブロック中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部または全部に関連付けられるビット深度を低減し得る。たとえば、nビットの変換係数は、量子化中にmビットの変換係数に切り捨てられてよく、nはmよりも大きい。量子化ユニット106は、CUに関連付けられる量子化パラメータ(QP)値に基づいて、CUのTUに関連付けられる係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連付けられるQP値を調整することによって、CUに関連付けられる係数ブロックに適用される量子化の程度を調整し得る。量子化は、情報の喪失をもたらし得る。したがって、量子化変換係数は、元の変換係数よりも低い精度を有し得る。
逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、逆量子化および逆変換を係数ブロックに適用して、係数ブロックから残差ブロックを再構成し得る。逆量子化は、変換係数のビット深度を回復し得る。再構成ユニット112は、再構成された残差ブロックを、予測処理ユニット100によって生成された1つまたは複数の予測ブロックからの対応するサンプルに加算して、TUに関連付けられる再構成された変換ブロックを生成し得る。このようにしてCUのTUごとに変換ブロックを再構成することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構成し得る。
フィルタユニット114は、1つまたは複数のデブロッキング動作を実行して、CUに関連付けられるコーディングブロックにおけるブロッキングアーティファクトを低減し得る。フィルタユニット114が、再構成されたコーディングブロックに対して1つまたは複数のデブロッキング動作を実行した後、参照ピクチャバッファ116は、再構成されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、再構成されたコーディングブロックを含む参照ピクチャを使用して、他のピクチャのPUに対してインター予測を実行し得る。加えて、イントラ予測処理ユニット126は、参照ピクチャバッファ116中の再構成されたコーディングブロックを使用して、CUと同じピクチャ中の他のPUに対してイントラ予測を実行し得る。
エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受信し得る。たとえば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受信してよく、予測処理ユニット100からシンタックス要素を受信してよい。エントロピー符号化ユニット118は、データに対して1つまたは複数のエントロピー符号化演算を実行して、エントロピー符号化データを生成し得る。たとえば、エントロピー符号化ユニット118は、CABAC演算、コンテキスト適応型可変長コーディング(CAVLC)演算、可変長対可変長(V2V)コーディング演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)演算、確率区間区分エントロピー(PIPE)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算を、データに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。たとえば、ビットストリームは、CUに関するRQTを表すデータを含み得る。
図8は、本開示の技法を実施するように構成された例示的なビデオデコーダ30を示すブロック図である。図8は説明のために提供され、本開示において広く例示され説明されるような技法の限定でない。説明のために、本開示は、HEVCコーディングの文脈においてビデオデコーダ30について説明する。しかしながら、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
処理回路はビデオデコーダ30を含み、ビデオデコーダ30は、本開示において説明される例示的な技法のうちの1つまたは複数を実行するように構成される。たとえば、ビデオデコーダ30は集積回路を含み、図8に示される様々なユニットは、回路バスと相互接続されるハードウェア回路ブロックとして形成され得る。これらのハードウェア回路ブロックは別個の回路ブロックであってよく、またはユニットのうちの2つ以上が共通のハードウェア回路ブロックへと組み合わされてよい。ハードウェア回路ブロックは、算術論理演算装置(ALU)、初等関数演算装置(EFU)、ならびに、AND、OR、NAND、NOR、XOR、XNOR、および他の同様の論理ブロックなどの論理ブロックなどの、演算ブロックを形成する電気的構成要素の組合せとして形成され得る。
いくつかの例では、図8に示されるユニットのうちの1つまたは複数は、処理回路上で実行されるソフトウェアユニットであり得る。そのような例では、これらのソフトウェアのためのオブジェクトコードがメモリに記憶される。オペレーティングシステムは、ビデオデコーダ30に、オブジェクトコードを取り出させ、オブジェクトコードを実行させることができ、オブジェクトコードは、ビデオデコーダ30に、例示的な技法を実施するための動作を実行させる。いくつかの例では、ソフトウェアユニットは、ビデオデコーダ30が起動時に実行するファームウェアであり得る。したがって、ビデオデコーダ30は、例示的な技法を実行するハードウェアを有する構造的構成要素であり、または、ハードウェアを例示的な技法の実行専用にするためのハードウェア上で実行されるソフトウェア/ファームウェアを有する。
図8の例では、ビデオデコーダ30は、エントロピー復号ユニット150、ビデオデータメモリ151、予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、フィルタユニット160、および参照ピクチャバッファ162を含む。予測処理ユニット152は、動き補償ユニット164およびイントラ予測処理ユニット166を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
ビデオデータメモリ151は、ビデオデコーダ30の構成要素によって復号されるべき、符号化されたビデオビットストリームなどの符号化されたビデオデータを記憶し得る。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線ネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコード化ピクチャバッファ(CPB:coded picture buffer)を形成し得る。参照ピクチャバッファ162は、参照ピクチャメモリと呼ばれることもある。参照ピクチャバッファ162は、たとえば、イントラコーディングモードもしくはインターコーディングモードで、ビデオデコーダ30によってビデオデータを復号する際に使用するための、または出力のための、参照ビデオデータを記憶する。ビデオデータメモリ151および参照ピクチャバッファ162は、ダイナミックランダムアクセスメモリ(DRAM)(シンクロナスDRAM(SDRAM)を含む)、磁気抵抗RAM(MRAM)、抵抗型RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および参照ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって設けられてよい。様々な例では、ビデオデータメモリ151は、ビデオデコーダ30の他の構成要素とともにオンチップであってもよく、または、これらの構成要素に対してオフチップであってもよい。ビデオデータメモリ151は、図1の記憶媒体28と同じであるか、またはその一部であり得る。
ビデオデータメモリ151は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受信し記憶する。エントロピー復号ユニット150は、符号化されたビデオデータ(たとえば、NALユニット)をビデオデータメモリ151から受信することができ、NALユニットを構文解析して、シンタックス要素を取得することができる。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。エントロピー復号ユニット150は、エントロピー符号化ユニット118のプロセスとは全般に逆のプロセスを実行し得る。
ビットストリームからシンタックス要素を取得することに加えて、ビデオデコーダ30は、区分されていないCUに対して再構成動作を実行し得る。CUに対して再構成動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構成動作を実行し得る。CUのTUごとに再構成動作を実行することによって、ビデオデコーダ30は、CUの残差ブロックを再構成し得る。
CUのTUに対して再構成動作を実行することの一部として、逆量子化ユニット154は、TUに関連付けられる係数ブロックを逆量子化(inverse quantize)、すなわち逆量子化(de-quantize)し得る。逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、係数ブロックに1つまたは複数の逆変換を適用して、TUに関連付けられる残差ブロックを生成し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
逆変換処理ユニット156は、本開示の他の場所で説明するコンパクト多重パス変換(CMPT)技法を実装し得る。たとえば、逆変換処理ユニット156は、現在ブロック(たとえば、TU)に関する残差値を導出するために、現在ブロックに関するデータ要素(たとえば、変換係数)に変換を適用し得る。この例では、逆変換処理ユニット156は、少なくとも部分的に、ベクトル変換のシーケンスを適用することによって、現在ブロックに関する変換係数に変換を適用し得る。この例では、ベクトル変換のシーケンスの第1のベクトル変換に関する入力値は、現在ブロックに関する変換係数を含む。さらに、この例では、ベクトル変換のシーケンスの最後のベクトル変換の出力値は、現在ブロックに関する残差値を含む。この例では、ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含む。さらに、この例では、ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトルを受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。
PUがイントラ予測を使用して符号化されている場合、イントラ予測処理ユニット166は、イントラ予測を実行してPUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するブロックのサンプルに基づいてPUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから取得された1つまたは複数のシンタックス要素に基づいて、PUのイントラ予測モードを決定し得る。
PUがインター予測を使用して符号化されている場合、エントロピー復号ユニット150は、PUに関する動き情報を決定し得る。動き補償ユニット164は、PUの動き情報に基づいて、1つまたは複数の参照ブロックを決定し得る。動き補償ユニット164は、1つまたは複数の参照ブロックに基づいて、PUの予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成し得る。
再構成ユニット158は、CUのTUに関する変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)、ならびにCUのPUの予測ブロック(たとえば、ルーマブロック、Cbブロック、およびCrブロック)、すなわちイントラ予測データまたはインター予測データのいずれかを適宜使用して、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構成し得る。たとえば、再構成ユニット158は、変換ブロック(たとえば、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック)のサンプルを、予測ブロック(たとえば、ルーマ予測ブロック、Cb予測ブロック、およびCr予測ブロック)の対応するサンプルに加算して、CUのコーディングブロック(たとえば、ルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック)を再構成し得る。
フィルタユニット160は、デブロッキング動作を実行して、CUのコーディングブロックに関連付けられるブロッキングアーティファクトを低減し得る。ビデオデコーダ30は、CUのコーディングブロックを参照ピクチャバッファ162に記憶し得る。参照ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、参照ピクチャバッファ162中のブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。
図9は、本開示の技法による、ビデオデータを符号化するためのビデオエンコーダ20の例示的な動作を示すフローチャートである。図9の例では、ビデオエンコーダ20は、ビデオデータの現在ピクチャの現在ブロックに関する残差値を決定する(200)。図7の文脈では、残差生成ユニット102は、現在ブロックに関する残差値を決定し得る。いくつかの例では、ビデオエンコーダ20は、コーディングブロックのサンプルを予測ブロックの対応するサンプルの負値に加算すること、またはその逆によって、現在ブロックに関する残差値を決定し得る。他の例では、ビデオエンコーダ20は、予測ブロックのサンプルをコーディングブロックの対応するサンプルから差し引くこと、またはその逆によって、現在ブロックに関する残差値を決定し得る。いくつかの例では、現在ブロックはTUである。
さらに、図9の例では、ビデオエンコーダ20は、現在ブロックに関する複数のデータ要素を導出するために、現在ブロックに関する残差値に変換を適用する(202)。図7の文脈では、変換処理ユニット104は、現在ブロックに関する残差値に変換を適用し得る。ビデオエンコーダ20は、少なくとも部分的に、ベクトル変換のシーケンスを適用することによって、現在ブロックに関する残差値に変換を適用し得る。この例では、ベクトル変換のシーケンスの第1のベクトル変換に関する入力値は、現在ブロックに関する残差値を含む。さらに、ベクトル変換のシーケンスの最後のベクトル変換の出力値は、現在ブロックに関するデータ要素を含むか、またはかかるデータ要素からなる。データ要素は変換係数であり得る。ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含むか、またはかかる出力値からなる。
ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトルを受け取る。それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。たとえば、それぞれのベクトル変換がギブンス回転のセットを含む例では、入力としてパラメータベクトルを受け取るそれぞれのベクトル変換は、ギブンス回転のセットのそれぞれのギブンス回転ごとに角度値(またはsin(θ)およびcos(θ)の値)としてパラメータベクトルにおけるパラメータを使用することを含み得る。
いくつかの例では、ベクトル変換のシーケンスの各それぞれのベクトル変換に関して、ビデオエンコーダ20は、それぞれのベクトル変換に関するそれぞれのパラメータベクトルにおけるパラメータの事前計算された値を記憶する。たとえば、ビデオエンコーダ20は、メモリにθの事前計算された値を記憶し得る。いくつかの例では、ビデオエンコーダ20は、メモリにsin(θ)およびcos(θ)の事前計算された値を記憶する。
いくつかの例では、ベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関するそれぞれのパラメータベクトルにおけるパラメータの数は、それぞれのベクトル変換に関する入力値の数の1/2に等しい。たとえば、図6の例では、パス(すなわち、ベクトル変換)ごとに16個の入力値および8個のバタフライがある。したがって、図6の4個のパスの各々に対して、角度θの8個の値がある。図6において適用される変換は、分離不可能変換であり得る。言い換えれば、図6において適用される変換は、入力ブロックの行および列に別個に適用されない。
いくつかの例では、ビデオエンコーダ20は、1つまたは複数のギブンス直交変換(すなわち、ギブンス回転)を適用し得る。1つまたは複数のギブンス直交変換の各それぞれのギブンス直交変換は、ベクトル変換に関する入力値のそれぞれのペアに適用され得る。それぞれのギブンス直交変換は、それぞれの角度θによってパラメータ化される。そのような例では、ベクトル変換に関するパラメータベクトルの少なくとも1つのパラメータ値は、それぞれの角度θの値を指定する。いくつかの例では、ベクトル変換に関するパラメータベクトルの各パラメータ値は、角度θのそれぞれの値を指定する。さらに、いくつかの例では、ベクトル変換のシーケンスの各ベクトル変換は、角度θの値によってパラメータ化された1つまたは複数のギブンス直交変換を含む。
いくつかの例では、ビデオエンコーダ20は、複数の利用可能な変換の中から、現在ブロックに関する残差値に適用すべき変換を選択し得る。たとえば、ビデオエンコーダ20は、利用可能な変換の各々を試し、(たとえば、ビット数の点で)最良の結果をもたらす変換を選択し得る。いくつかの例では、ビデオエンコーダ20は、ベクトル変換のシーケンスにおけるベクトル変換をシグナリングし得る。たとえば、ビデオエンコーダ20は、ビットストリームに、ベクトル変換を示すシンタックス要素を含め得る。
さらに、図9の例では、ビデオエンコーダ20は、現在ピクチャの符号化された表現を含むビットストリームに、現在ブロックに関するデータ要素に基づく値を有するシンタックス要素を含めることができる(204)。たとえば、ビデオエンコーダ20は、データ要素を量子化し、量子化されたデータ要素の値を決定するために処理され得る1つまたは複数のシンタックス要素を生成し得る。たとえば、ビデオエンコーダ20は、データ要素が非ゼロであるかどうかを示すシンタックス要素、データ要素の符号を示すシンタックス要素、データ要素が1よりも大きいかどうかを示すシンタックス要素、データ要素が2よりも大きいかどうかを示すシンタックス要素、およびデータ要素に関する余り値を示すシンタックス要素を生成し得る。図7の文脈では、量子化ユニット106はデータ要素を量子化することができ、エントロピー符号化ユニット118は1つまたは複数のシンタックス要素を生成することができる。ビデオエンコーダ20は、シンタックス要素のうちの1つまたは複数を符号化する(たとえば、CABAC符号化する)ことができる。図1の文脈では、出力インターフェース24は、ビットストリームを出力し得る。
いくつかの例では、ビデオエンコーダ20は、ビットストリームに、変換を示すシンタックス要素を含める。ビデオエンコーダ20は、(たとえば、VPSもしくはSPSにおける)シーケンスレベル、(たとえば、PPSにおける)ピクチャレベル、スライスレベル、ブロックレベル(たとえば、CTU、CU、TUレベル)、または別のレベルなど、様々なレベルにおいてシンタックス要素を含み得る。
本開示の他の場所で示すように、有効である変換がどれであるか、およびそれらの許容パラメータが規範シンタックスにおいて定義され得る。したがって、いくつかの例では、ベクトル変換のシーケンスのベクトル変換に関して、ビデオエンコーダ20は、ビットストリーム中で、有効な変換のセットをシグナリングし得る。シンタックス要素は、シーケンスレベル、ピクチャレベル、スライスレベル、ブロックレベル、または別のレベルなど、様々なレベルにおいてシグナリングされ得る。いくつかの例では、ビデオエンコーダ20は、ビットストリームに、有効な変換のうちのどれを適用すべきかを示すシンタックス要素を含める。
図9の例では、ベクトル変換のシーケンスにおける各それぞれのベクトル変換は、有効な変換のセットのメンバーであり得る。たとえば、ビデオエンコーダ20は、ビットストリームに、有効な変換のインデックスを示すシンタックス要素を含め得る。シンタックス要素は、シーケンスレベル、ピクチャレベル、スライスレベル、ブロックレベル、または別のレベルなど、様々なレベルにおいてシグナリングされ得る。さらに、ベクトル変換のシーケンスのベクトル変換に関して、ビデオエンコーダ20は、ビットストリーム中で、有効な変換のセットに関するパラメータベクトルにおける許容パラメータをシグナリングし得る。有効な変換に関する許容パラメータは、有効な変換のパラメータベクトルにおいて使用されるパラメータである。たとえば、パラメータは、ギブンス回転の角度であり得、これは量子化され、8ビットで表される。この例では、許容パラメータは、0°から255×(360°/256)までの角度をカバーする、範囲[0..255]内の整数値であり、したがって、負であるか、または255よりも大きい値は「許容され」ない。許容パラメータは、シーケンスレベル、ピクチャレベル、スライスレベル、ブロックレベル、または別のレベルなど、様々なレベルにおいてシグナリングされ得る。たとえば、ビデオエンコーダ20は、ビットストリームに、許容パラメータを示すシンタックス要素を含め得る。
図10は、本開示の技法による、ビデオを復号するためのビデオデコーダ30の例示的な動作を示すフローチャートである。図10の例では、ビデオデコーダ30は、ビデオデータの現在ピクチャの符号化された表現を含むビットストリーム中のシンタックス要素に基づいて、現在ピクチャの現在ブロックに関する複数のデータ要素を決定し得る(250)。データ要素の各々は、それぞれの変換係数であり得る。いくつかの例では、入力インターフェース26はビットストリームを受信し得る。さらに、いくつかの例では、ビデオデコーダ30は、ビットストリームを構文解析して、ビットストリームからシンタックス要素を取得することができる。この例では、ビデオデコーダ30は、エントロピー復号(たとえば、CABAC復号)して、シンタックス要素の値を決定することができる。いくつかの例では、ビデオデコーダ30は、データ要素が非ゼロであるかどうかを示すシンタックス要素、データ要素の符号を示すシンタックス要素、データ要素が1よりも大きいかどうかを示すシンタックス要素、データ要素が2よりも大きいかどうかを示すシンタックス要素、およびデータ要素に関する余り値を示すシンタックス要素など、複数のデータ要素におけるデータ要素に関する1つまたは複数のシンタックス要素を取得し得る。図8の例では、エントロピー復号ユニット150はシンタックス要素を取得し得る。さらに、いくつかの例では、複数のデータ要素を決定するために、ビデオデコーダ30はデータ要素を逆量子化し得る。図8の文脈では、逆量子化ユニット154はデータ要素を逆量子化し得る。いくつかの例では、現在ブロックはTUである。
さらに、図10の例では、ビデオデコーダ30は、現在ブロックに関する残差値を導出するために、データ要素に変換を適用する(252)。図8の文脈では、逆変換処理ユニット156は、現在ブロックに関する残差値を導出するために、データ要素に変換を適用し得る。変換は、ベクトル変換のシーケンスを含む。この例では、ベクトル変換のシーケンスの第1のベクトル変換に関する入力値は、複数のデータ要素を含むか、または複数のデータ要素からなる。さらに、この例では、ベクトル変換のシーケンスの最後のベクトル変換に関する出力値は、現在ブロックに関する残差値を含むか、またはかかる残差値からなる。ベクトル変換のシーケンスの第1のベクトル変換以外のベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関する入力値は、ベクトル変換のシーケンスのそれぞれの先行ベクトル変換の出力値を含むか、またはかかる出力値からなる。この例では、ベクトル変換のシーケンスの各それぞれのベクトル変換はさらに、入力として、それぞれのベクトル変換に関するそれぞれのパラメータベクトルを受け取り、それぞれのベクトル変換に関するそれぞれのパラメータベクトルは、1つまたは複数のパラメータを含む。
いくつかの例では、ベクトル変換のシーケンスの各それぞれのベクトル変換に関して、それぞれのベクトル変換に関するそれぞれのパラメータベクトルにおけるパラメータの数は、それぞれのベクトル変換に関する入力値の数の1/2に等しい。変換は、分離不可能変換であり得る。
いくつかの例では、ベクトル変換のシーケンスの各それぞれのベクトル変換に関して、ビデオデコーダ30は、それぞれのベクトル変換に関するそれぞれのパラメータベクトルにおけるパラメータの事前計算された値を記憶する。たとえば、ビデオデコーダ30は、メモリにθの事前計算された値を記憶し得る。いくつかの例では、ビデオデコーダ30は、メモリにsin(θ)およびcos(θ)の事前計算された値を記憶する。
いくつかの例では、ベクトル変換のシーケンスの1つまたは複数のベクトル変換(たとえば、ベクトル変換の各々)は、1つまたは複数の逆ギブンス直交変換を含み、1つまたは複数の逆ギブンス直交変換の各々は、ベクトル変換に関する入力値のそれぞれのペアに適用される。1つまたは複数の逆ギブンス直交変換の各々は、それぞれの角度θによってパラメータ化される。逆ギブンス直交変換は、形式ri=cos(θ)yi+sin(θ)yj、rj=cos(θ)yj-sin(θ)yiを有し得る。この例では、ベクトル変換に関するパラメータベクトルの少なくとも1つのパラメータ値は、それぞれの角度θの値を指定し得る。たとえば、ベクトル変換に関するパラメータベクトルの各パラメータ値は、角度θのそれぞれの値を指定する。
いくつかの例では、変換を適用することの一部として、ビデオデコーダ30は、ベクトル変換のシーケンスのベクトル変換に関して、ビットストリーム中の1つまたは複数のシンタックス要素に基づいて、ベクトル変換に関するパラメータベクトルを決定し得る。たとえば、ビデオデコーダ30は、ルックアップテーブル内でパラメータベクトルを調べること、またはパラメータベクトルを数学的に決定することができる。
図10の例では、ビデオデコーダ30は、導出された残差データに基づいて、現在ピクチャのサンプルを再構成する(254)。たとえば、ビデオデコーダ30は、残差データのサンプルを予測ブロックの対応するサンプルに加算して、現在ピクチャのサンプルを生成し得る。たとえば、図8の文脈では、予測処理ユニット152は、1つまたは複数の予測ブロックを生成することができ、再構成ユニット158は、1つまたは複数の予測ブロックのサンプルを残差データの対応するサンプルに加算して、現在ピクチャのサンプルを生成し得る。現在ピクチャのサンプルは、CUのコーディングブロックの全部または一部であり得る。再構成は、適用される量子化の量に応じて不可逆的であり得る。したがって、ビデオエンコーダ20による変換の出力は、ビデオデコーダ30によって実行される逆変換の出力と完全には一致しないことがある。
いくつかの例では、ビデオデコーダ30は、ビットストリーム中の1つまたは複数のシンタックス要素に基づいて、変換を決定する。たとえば、ビデオデコーダ30は、変換を示すインデックスをビットストリームから取得し得る。いくつかの例では、ビデオデコーダ30は、様々な情報(たとえば、ブロックサイズ、予測モード、イントラ予測方向など)に基づいて変換を決定する。たとえば、ビデオデコーダ30は、インター予測に対してある変換を決定し、イントラ予測に対して別の変換を決定し得る。
さらに、いくつかの例では、ビデオデコーダ30は、ビットストリーム中の1つまたは複数のシンタックス要素に基づいて、有効な変換のセットを決定し得る。シンタックス要素は、シーケンスレベル、ピクチャレベル、スライスレベル、ブロックレベル、または別のレベルなど、様々なレベルにおいてシグナリングされ得る。ベクトル変換のシーケンスにおける各それぞれのベクトル変換は、有効な変換のセットのメンバーである。たとえば、ビデオデコーダ30は、ビットストリームから、有効な変換のセットを指定するシンタックス要素を取得し得る。そのような例では、ビデオデコーダ30は、有効な変換のうちのどれを適用すべきかを示すシンタックス要素をビットストリームから取得し得る。シンタックス要素は、シーケンスレベル、ピクチャレベル、スライスレベル、ブロックレベル、または別のレベルなど、様々なレベルにおいてシグナリングされ得る。
ビデオデコーダ30は、ベクトル変換のシーケンスのベクトル変換に関して、ビットストリーム中の1つまたは複数のシンタックス要素に基づいて、有効な変換のセットに関するパラメータベクトルにおける許容パラメータを決定し得る。たとえば、ビデオデコーダ30は、ビットストリームから、パラメータベクトルにおける許容パラメータを指定するシンタックス要素を取得し得る。さらに、ビデオデコーダ30は、ビットストリーム中の1つまたは複数のシンタックス要素に基づいて、ベクトル変換のシーケンスにおけるベクトル変換を決定し得る。たとえば、ビデオデコーダ30は、ビットストリームから、ベクトル変換を指定する1つまたは複数のシンタックス要素を取得し得る。そのようなシンタックス要素は、ベクトル変換の各々においてどのパラメータを使用すべきか、ならびにベクトル変換の各々の構造を示し得る。
本開示のいくつかの態様は、説明を目的にHEVC規格の拡張に関して説明されている。しかしながら、本開示において説明される技法は、まだ開発されていない他の標準的なまたは独自のビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
ビデオコーダは、本開示において説明されるように、ビデオエンコーダまたはビデオデコーダを指すことがある。同様に、ビデオコーディングユニットは、ビデオエンコーダまたはビデオデコーダを指すことがある。同様に、ビデオコーディングは、場合により、ビデオ符号化またはビデオ復号を指すことがある。
例によっては、本明細書において説明された技法のうちのいずれかのいくつかの行為またはイベントが、異なるシーケンスで実行されてよく、追加され、統合され、または完全に除外されてよい(たとえば、説明されたすべての行為またはイベントが技法の実践にとって必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、連続的にではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通じて同時に実行されてよい。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベース処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このように、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コード、および/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品がコンピュータ可読媒体を含んでよい。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得るとともにコンピュータによってアクセスされ得る任意の他の媒体含むことができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の等価な集積論理回路もしくはディスクリート論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書において使用される「プロセッサ」という用語は、上記の構造、または本明細書において説明される技法の実装に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書において説明される機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で与えられることがあり、または複合コーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素において完全に実装される可能性がある。したがって、プロセッサは、固定ハードウェア処理回路、プログラマブル処理回路、および/または固定処理回路とプログラマブル処理回路の両方の組合せとして実装された1つまたは複数のプロセッサを含む様々な集積処理回路のいずれかによって形成され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装される場合がある。開示された技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示で説明されているが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上述されたように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされるか、または適切なソフトウェアおよび/もしくはファームウェアとともに、上述された1つもしくは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供される場合がある。
様々な例について説明した。これらおよび他の例は、以下の特許請求の範囲内に入る。