全般に、本開示は、HEVC規格の拡張または次世代のビデオコーディング規格などの、高度なビデオコーデックの文脈において使用され得る、イントラ予測およびイントラ予測モードコーディングのための技法を説明する。たとえば、本開示は、イントラ予測のための最確モード(MPM)を導出し、選択し、および/またはシグナリングするための技法を説明する。本開示において説明される例はまた、多数の角度モードを使用するイントラ予測のための技法を含む。多数の角度モードを使用するイントラ予測のための技法は、Nタップのイントラ補間フィルタを適用するための技法を含むことがあり、Nは2より大きい。本開示はまた、ブロックごとの複数のイントラ予測方向、たとえばブロックのサブブロックに対するそれぞれの方向を可能にし得る技法を説明し、これは、複数のイントラ予測モードの追加のシグナリングを必要としないことがある。
イントラ予測およびイントラモードコーディングは、高効率ビデオコーディング(HEVC)規格の拡張または次世代のビデオコーディング規格などの、高度なビデオコーデックの文脈において使用され得る技法である。
HEVCにおけるイントラモードコーディングでは、各イントラ予測単位(PU)に対して、選択されたイントラ予測モードがシグナリングされる。イントラ予測モードを選択するために、3つのイントラモードがまず特定され、これらは、実際に選択される可能性がより高いと想定されており、すなわち最確モード(MPM)である。HEVCでは、平面イントラ予測モードと、DCイントラ予測モードと、角度イントラ予測モードとそれぞれ関連付けられる33個の異なる予測方向とを含む、ルーマブロックのイントラ予測のための35個のモードがある。
HEVCにおけるイントラ予測の既存の設計の35個の固定された予測角度は、非常に変わりやすいエッジ方向の分布を捉えるには非効率であることがある。しかしながら、より多くの予測角度を適用することは、望ましくないエンコーダの複雑さの増大をもたらし得る。たとえば、HEVC参照ソフトウェアに基づく65個の予測角度への直接の拡張は、およそ2倍の数のSATD調査を必要とすることがある。さらに、HEVCにおいて3つのMPMを使用する現在のイントラモードコーディングの効率は限られることがあり、それは、その現在のイントラモードコーディングがすべての利用可能なイントラ予測モードの実際の確率分布に正確に対応しないことがあるからである。
本開示は、HEVCにおけるこれらの欠点の1つまたは複数を正すことができる技法を説明する。たとえば、本開示のいくつかの技法によれば、ビデオコーダは3つよりも多くのMPMを導出し得る。いくつかのそのような例では、ビデオコーダは、MPMのうちのいずれが現在のPUのための選択されたMPMであるかを示すMPMインデックスの1つまたは複数のビンを復号するためのコンテキストモデリングを使用し得る。ビデオコーダが3つよりも多くのMPMを導出するいくつかの例では、ビデオコーダは、MPMの中から、左の隣接列の代表的なイントラ予測モードを定義して、左の隣接列のMPMとして左の隣接列の代表的なイントラ予測モードを使用することができ、かつ/または、上の隣接行の代表的なイントラ予測モードを定義して、上の隣接行のMPMとして上の隣接行の代表的なイントラ予測モードを使用することができる。さらに、ビデオコーダが3つよりも多くのMPMを導出するいくつかの例では、ビデオコーダは、MPMの中にすでにある角度モードとの類似性に基づいて、1つまたは複数の追加の角度MPMを選択し得る。この例では、類似性は、イントラ予測モードインデックスの差またはイントラ予測角度の差のうちの少なくとも1つに基づいて決定される。さらに、本開示のいくつかの例示的な技法では、非MPMインデックスは、非MPMインデックスがある基準を満たす場合には
ビットより短い符号語としてビットストリームにおいて符号化されることがあり、それ以外の場合には
ビットを有する固定長符号として符号化され、ここで全体でN個の非MPMインデックスの利用可能な値がある。
ビデオコーダが33個より多くの角度イントラ予測モードを使用し得る本開示のいくつかの例では、ビデオコーダは、補間が1/32ペル精度である隣接する再構築されたサンプルに対して補間フィルタを使用し得る。本開示のいくつかの例では、ビデオコーダは、Nタップのイントラ予測フィルタを隣接する再構築されたサンプルに適用して、決定された小数位置における値を補間することによって、それぞれのサンプルの値を計算することができ、ここでNは2より大きい。
図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ」という用語は、総称的に、ビデオエンコーダとビデオデコーダの両方を指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、総称的に、ビデオ符号化またはビデオ復号のいずれかを指し得る。
図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12および宛先デバイス14を含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれ得る。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれ得る。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車載コンピュータなどを含む、広範囲のデバイスを備え得る。
宛先デバイス14は、符号化されたビデオデータをソースデバイス12からチャネル16を介して受信し得る。チャネル16は、符号化されたビデオデータをソースデバイス12から宛先デバイス14に移動させることが可能な1つまたは複数の媒体またはデバイスを備え得る。いくつかの例では、チャネル16は、ソースデバイス12が符号化されたビデオデータをリアルタイムで宛先デバイス14に直接送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。1つまたは複数の通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路などの、ワイヤレスおよび/または有線の通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などの、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス12から宛先デバイス14への通信を容易にする他の機器を含み得る。
いくつかの例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、Blu-ray(登録商標)ディスク、DVD、CD-ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体などの、ローカルにアクセスされる様々なデータ記憶媒体を含み得る。
いくつかの例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶するファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ファイルサーバまたは他の中間記憶デバイスに記憶された符号化されたビデオデータに、ストリーミングまたはダウンロードを介してアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶するとともに符号化されたビデオデータを宛先デバイス14へ送信することが可能なタイプのサーバであり得る。例示的なファイルサーバは、ウェブサーバ(たとえば、ウェブサイト用の)、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
宛先デバイス14は、インターネット接続などの標準的なデータ接続を通じて符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、ファイルサーバに記憶されている符号化されたビデオデータにアクセスするのに適切である、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、デジタル加入者線(DSL)、ケーブルモデムなど)、または両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
本開示の技法は、ワイヤレスの用途または設定に限定されない。技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえば、インターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の用途などの様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
図1は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間に必ずしもデータ通信を含まないビデオコーディングの状況(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データは、ローカルメモリからの取出し、ネットワークを介したストリーミングなどが行われる。ビデオ符号化デバイスは、データを符号化してメモリに記憶することができ、かつ/またはビデオ復号デバイスはメモリからデータを取り出して復号することができる。多くの例では、互いに通信しないが、単にデータをメモリへと符号化し、かつ/またはメモリからデータを取り出して復号するデバイスによって、符号化および復号が実行される。
図1の例では、ソースデバイス12は、ビデオソース18、ビデオエンコーダ20、および出力インターフェース22を含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、ビデオキャプチャデバイス、たとえば、ビデオカメラ、以前キャプチャされたビデオデータを含むビデオアーカイブ、ビデオデータをビデオコンテンツプロバイダから受信するためのビデオフィードインターフェース、および/もしくはビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、符号化されたビデオデータを宛先デバイス14へ出力インターフェース22を介して直接送信する。他の例では、復号および/または再生のために宛先デバイス14が後でアクセスするために、符号化されたビデオデータはまた、記憶媒体またはファイルサーバへ記憶され得る。
図1の例では、宛先デバイス14は、入力インターフェース28、ビデオデコーダ30、およびディスプレイデバイス32を含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、符号化されたビデオデータをチャネル16を通じて受信し得る。ビデオデコーダ30は、符号化されたビデオデータを復号し得る。ディスプレイデバイス32は、復号されたビデオデータを表示し得る。ディスプレイデバイス32は、宛先デバイス14と一体化されてよく、または宛先デバイス14の外部にあってもよい。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの様々なディスプレイデバイスを備え得る。
ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のいずれかとして実装され得る。技法が部分的にソフトウェアで実装される場合、本開示の技法を実行するために、デバイスは、ソフトウェアのための命令を適切な非一時的コンピュータ可読記憶媒体に記憶することができ、1つまたは複数のプロセッサを使用するハードウェアにおいて命令を実行することができる。前述のもの(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)のいずれもが、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は、1つまたは複数のエンコーダまたはデコーダに含まれてよく、それらのいずれかが、組み合わされたエンコーダ/デコーダ(コーデック)の一部としてそれぞれのデバイスの中で一体化されてよい。ビデオエンコーダ20および/またはビデオデコーダ30を含む装置は、集積回路、マイクロプロセッサ、および/または、携帯電話などのワイヤレス通信デバイスを備え得る。
ソースデバイス12のビデオソース18は、ビデオカメラ、以前にキャプチャされたビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースなどの、ビデオキャプチャデバイスを含み得る。さらなる代替として、ビデオソース18は、ソースビデオとしてコンピュータグラフィックスベースのデータを、または、ライブビデオ、アーカイブされたビデオ、およびコンピュータで生成されたビデオの組合せを生成することができる。いくつかの場合には、ビデオソース18がビデオカメラである場合、ソースデバイス12および宛先デバイス14は、いわゆるカメラ付き携帯電話またはビデオ付き携帯電話を形成することができる。しかしながら、上述されたように、本開示において説明される技法は、一般に、ビデオコーディングに適用可能であることがあり、ワイヤレス用途および/または有線用途に適用されることがある。各々の場合において、キャプチャされたビデオ、前にキャプチャされたビデオ、またはコンピュータにより生成されたビデオは、ビデオエンコーダ20によって符号化され得る。符号化されたビデオ情報は次いで、出力インターフェース22によってチャネル16へと出力され得る。
本開示において説明される技法の多くが、ビデオエンコーダ20とビデオデコーダ30の両方によって実行され得る。したがって、説明を簡単にするために、本技法はビデオコーダに関して説明されることがあり、ビデオコーダは、ビデオエンコーダ20およびビデオデコーダ30などのビデオエンコーダおよび/またはビデオデコーダであり得る。本開示は一般に、ビデオエンコーダ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、および、そのスケーラブルビデオコーディング(SVC)拡張とマルチビュービデオコーディング(MVC)拡張とを含むITU-T H.264(ISO/IEC MPEG-4 AVCとしても知られる)を含む。加えて、高効率ビデオコーディング(HEVC)が、ITU-T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT-VC)によって最近開発された。HEVC仕様の草案はhttp://phenix.int-evry.fr/jct/doc_end_user/documents/14_Vienna/wg11/JCTVC-N1003-v1.zip、以後「JCTVC-N1003」から入手可能である。
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つの独立スライスセグメントに含まれ、同じアクセス単位内に次の独立スライスセグメントがもしあればそれに先行するすべての後続の従属スライスセグメントがもしあればそれらに含まれる、整数個のCTUであり得る。
コーディングされた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が、PUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。インター予測は、単方向インター予測(すなわち、単予測)または双方向インター予測(すなわち、双予測)であり得る。単予測または双予測を実行するために、ビデオエンコーダ20は、現在のスライスのための第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を生成し得る。参照ピクチャリストの各々は、1つまたは複数の参照ピクチャを含み得る。単予測を使用するとき、ビデオエンコーダ20は、参照ピクチャ内の参照場所を決定するために、RefPicList0およびRefPicList1の一方または両方において参照ピクチャを探索し得る。さらに、単予測を使用するとき、ビデオエンコーダ20は、参照場所に対応するサンプルに少なくとも一部基づいて、PUの予測サンプルブロックを生成し得る。その上、単予測を使用するとき、ビデオエンコーダ20は、PUの予測ブロックと参照場所との間の空間的な変位を示す単一の動きベクトルを生成し得る。PUの予測ブロックと参照場所との間の空間的な変位を示すために、動きベクトルは、PUの予測ブロックと参照場所との間の水平方向の変位を指定する水平成分を含むことがあり、PUの予測ブロックと参照場所との間の垂直方向の変位を指定する垂直成分を含むことがある。
PUを符号化するために双予測を使用するとき、ビデオエンコーダ20は、RefPicList0中の参照ピクチャ中の第1の参照場所およびRefPicList1中の参照ピクチャ中の第2の参照場所を決定し得る。次いで、ビデオエンコーダ20は、第1および第2の参照場所に対応するサンプルに少なくとも一部基づいて、PUの予測ブロックを生成し得る。その上、PUを符号化するために双予測を使用するとき、ビデオエンコーダ20は、PUのサンプルブロックと第1の参照場所との間の空間的な変位を示す第1の動きベクトルおよびPUの予測ブロックと第2の参照場所との間の空間的な変位を示す第2の動きベクトルを生成し得る。
通常、Bピクチャの第1または第2の参照ピクチャリスト(たとえば、RefPicList0またはRefPicList1)のための参照ピクチャリスト構築には、参照ピクチャリスト初期化および参照ピクチャリスト並べ替え(修正)という2つのステップがある。参照ピクチャリスト初期化は、POC(ピクチャ順序カウント、ピクチャの表示順序と揃えられる)の値の順序に基づいて、参照ピクチャメモリ(復号ピクチャバッファとしても知られている)の中の参照ピクチャをリストに置く明示的な機構である。参照ピクチャリスト並べ替え機構は、リストの中で置かれたピクチャの位置を、参照ピクチャリスト初期化の間に任意の新しい位置へと修正し、または、参照ピクチャメモリの中の任意の参照ピクチャを、そのピクチャが初期化されたリストに属してすらいない任意の位置に置くことができる。参照ピクチャリスト並べ替え(修正)の後のいくつかのピクチャは、リストにおいて非常に遠い位置に置かれることがある。しかしながら、ピクチャの位置がリストの有効な参照ピクチャの数を超える場合、ピクチャは最終的な参照ピクチャリストのエントリとして見なされない。有効な参照ピクチャの数は、各リストのためのスライスヘッダにおいてシグナリングされ得る。参照ピクチャリストが構築された後で(利用可能であれば、すなわちRefPicList0およびRefPicList1)、参照ピクチャリストへの参照インデックスが、参照ピクチャリストに含まれる任意の参照ピクチャを特定するために使用され得る。
ビデオエンコーダ20は、イントラ予測モード符号化を使用してビデオデータのいくつかのブロックを符号化し、ブロックを符号化するために使用される選択されたイントラ予測モードを示す情報を提供し得る。ビデオエンコーダ20は、イントラ予測モードを使用して、任意のタイプのフレームまたはスライス(たとえば、PフレームまたはPスライスおよびBフレームまたはBスライスに加えて、IフレームまたはIスライス)のブロックをイントラ予測符号化し得る。ブロックがイントラ予測モード符号化されるべきであるとビデオエンコーダ20が決定するとき、ビデオエンコーダ20は、レートひずみ分析を実行して最も適切なイントラ予測モードを選択し得る。イントラ予測モードは「イントラモード」とも呼ばれることがある。たとえば、ビデオエンコーダ20は、1つまたは複数のイントラ予測モードに対するレートひずみ値を計算し、許容可能なレートひずみ特性を有するモードのうちの1つを選択し得る。
ビデオエンコーダ20は、いくつかの例では、コンテキストに基づいて、最確モードについてイントラ予測モードの選択のための分析を開始するように構成され得る。最確モードが適切なレートひずみ特性を達成するとき、いくつかの例では、ビデオエンコーダ20は最確モードを選択し得る。他の例では、ビデオエンコーダ20は、最確モードについての選択プロセスを開始する必要はない。
ビデオエンコーダ20がCUの1つまたは複数のPUの予測ブロック(たとえば、予測ルーマブロック、予測Cbブロック、および予測Crブロック)を生成した後、ビデオエンコーダ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は、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のルーマ係数ブロックを生成することができる。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。ビデオエンコーダ20は、TUのCb変換ブロックに1つまたは複数の変換を適用して、TUのCb係数ブロックを生成することができる。ビデオエンコーダ20は、TUのCr変換ブロックに1つまたは複数の変換を適用して、TUのCr係数ブロックを生成することができる。
係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロック、またはCr係数ブロック)を生成した後に、ビデオエンコーダ20は、係数ブロックを量子化することができる。量子化は一般に、変換係数を表すために使用されるデータの量をできるだけ減らすために変換係数が量子化され、さらなる圧縮をもたらすプロセスを指す。
したがって、予測データおよび残差データを作り出すためのイントラ予測コーディングまたはインター予測コーディングに続いて、また変換係数を作り出すための任意の変換(H.264/AVCまたは離散コサイン変換DCTにおいて使用される4×4または8×8の整数変換など)に続いて、変換係数の量子化が実行され得る。量子化は一般に、係数を表すために使用されるデータの量をできるだけ減らすために変換係数が量子化されるプロセスを指す。量子化プロセスは、係数の一部またはすべてと関連付けられるビット深度を低減し得る。たとえば、nビット値は、量子化の間にmビット値に丸められることがあり、ここで、nはmよりも大きい。
ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を実行し得る。たとえば、量子化に続いて、量子化されたデータのエントロピーコーディングが、たとえばコンテンツ適応可変長コーディング(CALVC)、CABAC、または別のエントロピーコーディング方法に従って実行され得る。エントロピーコーディングのために構成される処理ユニット、または別の処理ユニットが、量子化された係数のゼロランレングスコーディング、および/または、コーディングブロックパターン(CBP:coded block pattern)値、マクロブロックタイプ、コーディングモード、コーディングされる単位(フレーム、スライス、マクロブロック、またはシーケンスなど)の最大マクロブロックサイズなどのシンタックス情報の生成などの、他の処理機能を実行し得る。
ビデオエンコーダ20はまた、ブロックに対する符号化コンテキストを決定するように構成され得る。コンテキストは、たとえば、ピクセル寸法に関して決定され得るブロックのサイズ、HEVCの例における2N×2N、N×2N、2N×N、N×Nなどの予測単位(PU)のタイプ、2N×N/2、N/2×2N、2N×1、1×2Nなどの短距離イントラ予測(SDIP)のタイプ、H.264の例におけるマクロブロックのタイプ、ブロックのコーディング単位(CU)深度、またはビデオデータのブロックのサイズの他の測定結果などの、ブロックの様々な特性に基づいて決定され得る。いくつかの例では、ビデオエンコーダ20は、上の隣接ブロック、左の隣接ブロック、左上の隣接ブロック、右上の隣接ブロック、または他の隣接ブロックのためのイントラ予測モードのいずれかまたはすべてに基づいて、コンテキストを決定し得る。いくつかの例では、ビデオエンコーダ20は、1つまたは複数のブロックのためのイントラ予測モード、ならびに符号化されている現在のブロックのサイズ情報の両方に基づいて、コンテキストを決定する。
ビデオエンコーダ20は、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含むビットストリームを出力し得る。ビットストリームは、ネットワーク抽象化レイヤ(NAL)ユニットのシーケンスを備え得る。NALユニットは、NALユニット中のデータのタイプを示すものと、必要に応じてエミュレーション防止ビットが散りばめられているローバイトシーケンスペイロード(RBSP)の形態でそのデータを含むバイトとを含む、シンタックス構造である。NALユニットの各々は、NALユニットヘッダを含み、RBSPを封入する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化されている整数個のバイトを含むシンタックス構造であり得る。いくつかの事例では、RBSPは、0個のビットを含む。
異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)のためのRBSPをカプセル化することができ、第2のタイプのNALユニットはコーディングされたスライスのためのRBSPをカプセル化することができ、第3のタイプのNALユニットはSEIメッセージのためのRBSPをカプセル化することができ、以下同様である。ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれ得る。パラメータセット(たとえば、ビデオパラメータセット(VPS)、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)など)を含むNALユニットは、パラメータセットNALユニットと呼ばれ得る。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームを構文解析して、ビットストリームからシンタックス要素を取得し得る。ビデオデコーダ30は、ビットストリームから取得されたシンタックス要素に少なくとも一部基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは、全般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。たとえば、ビデオデコーダ30は、PUの動きベクトルを使用して、現在のCUのPUの予測ブロックを決定し得る。加えて、ビデオデコーダ30は、現在のCUのTUと関連付けられる係数ブロックを逆量子化し得る。ビデオデコーダ30は、係数ブロックに対して逆変換を実行して、現在のCUのTUと関連付けられる変換ブロックを再構築し得る。ビデオデコーダ30は、現在CUのPUの予測ブロックのサンプルを、現在CUのTUの変換ブロックの対応するサンプルに加算することによって、現在CUのコーディングブロックを再構築し得る。ピクチャのCUごとにコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築し得る。
したがって、本開示のいくつかの例では、ビデオデコーダ30は最終的に、たとえば入力インターフェース28から、符号化されたビデオデータを受信し得る。本開示のいくつかの技法によれば、ビデオデコーダ30は、ビデオデータのブロックを符号化するために使用されるイントラ予測モードを表す符号語または他のシンタックスを受信し得る。ビデオデコーダ30は、ビデオエンコーダ20と実質的に同様の方式で、ブロックのコーディングコンテキストを決定するように構成され得る。
上述のように、ビットストリームの特定のNALユニットは、VPS、SPS、およびPPSを含み得る。いくつかの例では、VPSは、0個以上のコーディングされたビデオシーケンス(CVS:coded video sequence)全体に適用されるシンタックス要素を備えるシンタックス構造である。いくつかの例では、SPSは、0個以上のCVS全体に適用されるシンタックス要素を含むシンタックス構造である。SPSは、SPSが有効であるときに有効であるVPSを特定するシンタックス要素を含み得る。したがって、VPSのシンタックス要素は、SPSのシンタックス要素より全般に適用可能であり得る。いくつかの例では、PPSは、各スライスセグメントヘッダにおいて見出されるシンタックス要素により決定されるような0個以上のコーディングされたピクチャ全体に適用されるシンタックス要素を含むシンタックス構造である。
パラメータセット(たとえば、VPS、SPS、PPSなど)は、スライスのスライスヘッダから直接または間接的に参照される識別情報を含み得る。いくつかの例では、スライスヘッダは、現在のスライスセグメントである独立スライスセグメントの、または復号順序において現在の従属スライスセグメントに先行する直近の独立スライスセグメントの、スライスセグメントヘッダである。そのような例では、スライスセグメントヘッダは、タイル走査において連続的に順序付けられ単一のNALユニットに含まれている、整数個のコーディングツリーユニットである。この参照プロセスは「有効化」として知られている。したがって、ビデオデコーダ30が特定のスライスを復号しているとき、その特定のスライスのスライスヘッダの中のシンタックス要素によって直接または間接的に参照されるパラメータセットは、「有効化されている」と言われる。パラメータセットのタイプに応じて、有効化は、ピクチャごとに、またはシーケンスごとに行われ得る。たとえば、スライスのスライスヘッダは、PPSを特定するシンタックス要素を含み得る。したがって、ビデオコーダがスライスをコーディングするとき、PPSは有効化され得る。さらに、PPSはSPSを特定するシンタックス要素を含み得る。したがって、SPSを特定するPPSが有効化されるとき、SPSは有効化され得る。SPSはVPSを特定するシンタックス要素を含み得る。したがって、VPSを特定するSPSが有効化されるとき、VPSは有効化される。
上で簡単に述べたように、ビデオエンコーダ20はCABAC符号化を使用してシンタックス要素を符号化し得る。CABAC符号化をシンタックス要素に適用するために、ビデオエンコーダ20は、シンタックス要素をバイナリ化して「ビン」と呼ばれる一連の1つまたは複数のビットを形成し得る。加えて、ビデオエンコーダ20は、コーディングコンテキストを特定し得る。コーディングコンテキストは、特定の値を有するビンをコーディングすることの確率を特定し得る。たとえば、コーディングコンテキストは、値0のビンをコーディングすることの0.7の確率、および値1のビンをコーディングすることの0.3の確率を示し得る。コーディングコンテキストを特定した後、ビデオエンコーダ20は、区間を下位の部分区間および上位の部分区間に分割し得る。部分区間の一方は値0と関連付けられることがあり、他方の部分区間は値1と関連付けられることがある。部分区間の幅は、特定されたコーディングコンテキストによって関連する値について示される確率に比例し得る。シンタックス要素のビンが下位の部分区間と関連付けられる値を有する場合、符号化される値は、下位の部分区間の下方の境界に等しいことがある。シンタックス要素の同じビンが上位の部分区間と関連付けられる値を有する場合、符号化される値は、上位の部分区間の下方の境界に等しいことがある。シンタックス要素の次のビンを符号化するために、ビデオエンコーダ20は、符号化されるビットの値と関連付けられる部分区間である区間を用いて、これらのステップを繰り返し得る。ビデオエンコーダ20が次のビンのためにこれらのステップを繰り返すとき、ビデオエンコーダ20は、特定されたコーディングコンテキストによって示される確率および符号化されるビンの実際の値に基づいて、修正された確率を使用し得る。いくつかの例では、ビデオエンコーダ20が次のビンのためにこれらのステップを繰り返すとき、ビデオエンコーダ20は別のコーディングコンテキストを選択し得る。
ビデオデコーダ30がCABAC復号をシンタックス要素に対して実行するとき、ビデオデコーダ30は、コーディングコンテキストを特定し得る。ビデオデコーダ30は次いで、区間を下位の部分区間および上位の部分区間に分割し得る。部分区間の一方は値0と関連付けられることがあり、他方の部分区間は値1と関連付けられることがある。部分区間の幅は、特定されたコーディングコンテキストによって関連する値について示される確率に比例し得る。符号化された値が下位の部分区間内にある場合、ビデオデコーダ30は、下位の部分区間と関連付けられる値を有するビンを復号し得る。符号化された値が上位の部分区間内にある場合、ビデオデコーダ30は、上位の部分区間と関連付けられる値を有するビンを復号し得る。シンタックス要素の次のビンを復号するために、ビデオデコーダ30は、符号化された値を含む部分区間である区間を用いて、これらのステップを繰り返し得る。ビデオデコーダ30が次のビンのためにこれらのステップを繰り返すとき、ビデオデコーダ30は、特定されたコーディングコンテキストによって示される確率および復号されたビンに基づいて、修正された確率を使用し得る。ビデオデコーダ30は次いで、ビンを非バイナリ化してシンタックス要素を復元し得る。
通常のCABAC符号化をすべてのシンタックス要素に対して実行するのではなく、ビデオエンコーダ20は、バイパスCABACコーディングを使用していくつかのビンを符号化し得る。バイパスCABACコーディングをビンに対して実行することは、通常のCABACコーディングをビンに対して実行するよりも、計算的にコストがかからない場合がある。さらに、バイパスCABACコーディングを実行することは、より高度な並列化およびスループットを可能にし得る。バイパスCABACコーディングを使用して符号化されたビンは、「バイパスビン」と呼ばれることがある。バイパスビンを一緒にグループ化することは、ビデオエンコーダ20およびビデオデコーダ30のスループットを増大させ得る。バイパスCABACコーディングエンジンは、いくつかのビンを単一のサイクルの中でコーディングすることが可能であり得るが、通常のCABACコーディングエンジンは、単一のビンしか1つのサイクルの中でコーディングすることが可能ではないことがある。バイパスCABACコーディングエンジンは、コンテキストを選択せず両方のシンボル(0および1)に対して1/2の確率を前提とし得るので、バイパスCABACコーディングエンジンはより簡単であり得る。したがって、バイパスCABACコーディングでは、区間はちょうど半分に分割される。
図2は、ビデオデータのブロックのイントラ予測の例を示す概念図である。イントラ予測では、ビデオデータのブロック(たとえば、PU)は、空間的に隣接している再構築される画像サンプルを使用して予測される。画像ブロック40、たとえば16×16の画像ブロックのためのイントラ予測の典型的な例が、図2に示されている。イントラ予測を用いると、画像ブロック40は、選択された予測方向(矢印42により示されるような)に沿った上および左の隣接する再構築されたサンプル(参照サンプル)により予測される。
図3は、イントラ予測モードおよび対応するモードインデックスの例を示す概念図である。図3に示されるように、HEVCでは、平面モード(すなわち、平面イントラ予測モード)、DCモード、および33個の角度モード(すなわち、角度イントラ予測モード)を含めて、ルーマブロックのイントラ予測のための35個のモードがある。HEVCにおいて定義されるイントラ予測の35個のモードが、以下の表のようにインデックスを付けられる。
図4は、平面イントラ予測モードに従ってビデオデータのブロックの予測サンプルを生成するための例示的な技法を示す概念図である。平面モードは通常、最も頻繁に使用されるイントラ予測モードである。N×Nブロックのために平面予測を実行するために、図4に示されるように、(x, y)に位置する各サンプルpxyに対して、予測値は、双線形フィルタを用いて、4つの特定の隣接する再構築されたサンプル、すなわち参照サンプルを使用して計算される。図4に示されるように、4つの参照サンプルは、右上の再構築されたサンプルTR(50)、左下の再構築されたサンプルBL(52)、ならびに現在のサンプルと同じ列(rx,-1)および行(r-1,y)に位置する2つの再構築されたサンプル(54、56)を含む。平面モードは、pxy=(N-x-1)・L+(N-y-1)・T+x・TR+・BLとして定式化され得る。この式において、Nはブロックの幅および高さである。
DCモードでは、予測ブロックは単に、隣接する再構築されたサンプルの平均値により埋められる。たとえば、DCイントラ予測モードを使用してPUの予測ブロックを生成するために、ビデオコーダは、PUの予測ブロックの各サンプルを、隣接する再構築されたサンプルの平均値に等しく設定し得る。一般に、平面イントラ予測モードとDCイントラ予測モードの両方が、滑らかに変化する画像領域および不変の画像領域をモデル化するために適用される。
HEVCは、角度イントラ予測モードに対して33個の異なる予測方向を規定する。与えられる各角度イントラ予測に対して、イントラ予測方向が、たとえば図3に従って特定され得る。図3の例では、イントラ予測モード10は純粋な水平の予測方向に対応し、イントラ予測モード26は純粋な垂直の予測方向に対応する。
特定のイントラ予測方向を仮定すると、予測ブロックの各サンプルに対して、その座標(x, y)がまず、図3の例に示されるように、予測方向に沿って隣接する再構築されたサンプルの行/列に投影される。(x, y)が2つの隣接する再構築されたサンプルLとRの間の小数位置αに投影され、(x, y)の予測値がpxy=(1-α)・L+α・Rとして定式化される2タップの双線形補間フィルタを使用して計算されると仮定する。浮動点演算を避けるために、HEVCでは、上記の計算は実際には整数の算術を使用して、pxy=((32-a)・L+a・R+16)>>5のように近似され、ここでaは32×αに等しい整数である。
HEVCにおけるイントラモードコーディングでは、各イントラPUに対して、選択されたイントラ予測モードがシグナリングされる。選択されたイントラ予測モードをシグナリングするために、3つのイントラ予測モードがまず特定され、これらは、実際に選択される可能性がより高いと想定されており、すなわち最確モード(MPM)である。HEVCでは、candModeList[x]、x=0, 1, 2と標識されるMPMが次のように導出される。
まず、左隣接モード(candIntraPredModeA)および上隣接モード(candIntraPredModeB)が、JCTVC-N1003の8.4.2項に従って次にように導出される。
このプロセスへの入力は、現在のピクチャの左上のルーマサンプルに対して相対的に現在のルーマ予測ブロックの左上のサンプルを指定するルーマ場所(xCb, yCb)である。
1. 隣接場所(xNbA, yNbA)および(xNbB, yNbB)はそれぞれ、(xPb-1, yPb)および(xPb, yPb-1)に等しく設定される。
2. AまたはBのいずれかにより置き換えられるXに対して、変数candIntraPredModeXは次のように導出される。
- 6.4.1項において規定されるようなz走査順序でのブロックのための可用性導出プロセスが、(xPb, yPb)に等しく設定された場所(xCurr, yCurr)および(xNbX, yNbX)に等しく設定された隣接場所(xNbY, yNbY)を入力として用いて呼び出され、出力はavailableXに割り当てられる。
- 候補イントラ予測モードcandIntraPredModeXは次のように導出される。
- availableXがFALSEに等しい場合、candIntraPredModeXはINTRA_DCに等しく設定される。
- そうではなく、CuPredMode[xNbX][yNbX]がMODE_INTRAに等しくない場合、またはpcm_flag[xNbX][yNbX]が1に等しい場合、candIntraPredModeXはINTRA_DCに等しく設定され、
- そうではなく、XがBに等しくyPb-1が((yPb>>CtbLog2SizeY)<<CtbLog2SizeY)より小さい場合、candIntraPredModeBはINTRA_DCに等しく設定される。
- それ以外の場合、candIntraPredModeXはIntraPredModeY[xNbX][yNbX]に等しく設定される。
したがって、現在のPUのルーマ予測ブロックの左上のサンプルの左にある隣接サンプルが利用可能ではない場合、現在のPUのルーマ予測ブロックの左上のサンプルの左にある隣接サンプルがイントラ予測を使用して予測されない場合、または、現在のPUのルーマ予測ブロックの左上のサンプルの左にある隣接サンプルがパルス符号変調(PCM)を使用して符号化される場合、candIntraPredModeAはDCイントラ予測モードに設定される。それ以外の場合、candIntraPredModeAは、その予測ブロックが現在のPUのルーマ予測ブロックの左上のサンプルの左にある隣接サンプルを含んでいるPUのイントラ予測モードに設定される。同様に、PUのルーマ予測ブロックの左上のサンプルの上にある隣接サンプルが利用可能ではない場合、現在のPUのルーマ予測ブロックの左上のサンプルの上にある隣接サンプルがイントラ予測を使用して予測されない場合、現在のPUのルーマ予測ブロックの左上のサンプルの上にある隣接サンプルがPCMを使用して符号化される場合、または、現在のPUのルーマ予測ブロックの左上のサンプルの上にある隣接サンプルが現在のPUとは異なるコーディングツリーブロックの中にある場合、candIntraPredModeBはDCイントラ予測モードに設定される。それ以外の場合、candIntraPredModeBは、その予測ブロックが現在のPUのルーマ予測ブロックの左上のサンプルの上にある隣接サンプルを含んでいるPUのルーマイントラ予測モードに設定される(すなわち、IntraPredModeY[xNbX][yNbX])。
そして、JCTVC-N1003の8.4.2項において、導出された左隣接モード(candIntraPredModeA)および上隣接モード(candIntraPredModeB)を使用して、3つのMPMが次のように導出される。
3. x=0...2であるcandModeList[x]が次のように導出される。
- candIntraPredModeBがcandIntraPredModeAに等しい場合、以下が適用される。
- candIntraPredModeAが2より小さい(すなわち、INTRA_PLANARまたはINTRA_DCに等しい)場合、x=0...2であるcandModeList[x]は次のように導出される。
candModeList[0]=INTRA_PLANAR (8-15)
candModeList[1]=INTRA_DC (8-16)
candModeList[2]=INTRA_ANGULAR26 (8-17)
- それ以外の場合、x=0...2であるcandModeList[x]は次のように導出される。
candModeList[0]=candIntraPredModeA (8-18)
candModeList[1]=2+((candIntraPredModeA+29)%32) (8-19)
candModeList[2]=2+((candIntraPredModeA-2+1)%32) (8-20)
- それ以外の場合(candIntraPredModeBがcandIntraPredModeAに等しくない)、以下が適用される。
- candModeList[0]およびcandModeList[1]は次のように導出される。
candModeList[0]=candIntraPredModeA (8-21)
candModeList[1]=candIntraPredModeB (8-22)
- candModeList[0]とcandModeList[1]のいずれもがINTRA_PLANARに等しくない場合、candModeList[2]はINTRA_PLANARに等しく設定され、
- そうではなく、candModeList[0]とcandModeList[1]のいずれもがINTRA_DCに等しくない場合、candModeList[2]はINTRA_DCに等しく設定され、
- それ以外の場合、candModeList[2]はINTRA_ANGULAR26に等しく設定される。
3つのMPMが決められた後で、JCTVC-N1003の8.4.2項では、各PUに対して、現在のPUの選択されたイントラモードが3つのMPMのうちの1つと同じであるかどうかを示すために、1ビットのフラグprev_intra_luma_pred_flag[xPb][yPb]がまずシグナリングされる。
- prev_intra_luma_pred_flag[xPb][yPb]が1としてシグナリングされる場合、すなわち3つのMPMのうちの1つが現在のPUをコーディングするために選択される場合、どのMPMが現在のPUをコーディングするために選択されるかを示す、インデックスmpm_idx(0、1、または2に等しいことがある)がさらにシグナリングされる。mpm_idxは、切捨て単項符号を使用してバイナリ化され、コンテキストモデリングを使用せずにバイパスコーディングされる。
- それ以外の場合(prev_intra_luma_pred_flag[xPb][yPb]が0としてシグナリングされる)、すなわち非MPMが現在のPUのために使用される場合、どの非MPMが現在のPUのために選択されるかを示す、インデックスrem_intra_luma_pred_mode[xPb][yPb]がさらにシグナリングされる。rem_intra_luma_pred_mode[xPb][yPb]の値は0、1、...、31であることがあり、固定長(5ビット)のバイナリ化がバイパスコーディングとともに使用される。
前に論じられたように、ビデオエンコーダ20は、現在のPUのイントラ予測モードを選択する。PUのイントラ予測モードを選択するプロセスは、エンコーダ側イントラモード決断と呼ばれ得る。現在のPUのイントラ予測モードを選択するとき、ビデオエンコーダ20は、現在のPUのために決定される3つのMPMのうちの1つまたは非MPMイントラ予測モードのうちの1つを選択し得る。ビデオエンコーダ20が現在のPUのイントラ予測モードとして現在のPUのための3つのMPMのうちの1つを選択する場合、ビデオエンコーダ20は、現在のPUのMPMインデックスをビットストリームにおいてシグナリングし得る。JCTVC-N1003において、座標(x, y)にある左上のルーマサンプルを有するPUのMPMインデックスは、mpm_ind[x][y]と表記される。そうではなく、ビデオエンコーダ20が現在のPUのイントラ予測モードとして現在のPUのための3つのMPMのうちの1つを選択しない場合、ビデオエンコーダ20は、現在のPUの非MPMインデックスをビットストリームにおいてシグナリングし得る。JCTVC-N1003において、座標(x, y)にある左上のルーマサンプルを有するPUの非MPMインデックスは、rem_intra_pred_mode[x][y]と表記される。さらに、ビデオエンコーダ20は、現在のPUに対してMPMインデックスがシグナリングされるか非MPMインデックスがシグナリングされるかを示すシンタックス要素をビットストリームにおいてシグナリングする。JCTVC-N1003において、座標(x, y)にある左上のルーマサンプルを有するPUに対するこのシンタックス要素は、prev_intra_luma_pred_flag[x][y]と表記される。
JCTVC-N1003において、MPMインデックスは3つの可能性のある異なる値のみを有し得るが、非MPMインデックスはより多数の可能性のある値を有し得る。その結果、MPMインデックスをシグナリングするには、非MPMインデックスよりも少数のビットしか必要とされないことがある。
現在のPUのイントラ予測モードをできる限り効率的に選択するために、HEVC参照ソフトウェア(「HM」と呼ばれる)の設計において、いくつかの高速なイントラモード決断方法が統合されている。HM参照ソフトウェアは、https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/tags/HM-14.0/からダウンロードされ得る。
ルーマブロックに対して35個もの利用可能なイントラ予測モードがあるので、完全なレートひずみの最適化に基づくエンコーダモードの決断は、実際に実施するにはあまりにも高価であることがある。HMの最新のバージョンでは、イントラモードの決断は2つの段階として実行される。第1の段階において、N個のイントラモード候補リストがまず、「Sum of Absolute Transform Difference」(SATD)として一般に知られているはるかにコストの低い基準を使用して、大まかに決められる。Nの値はブロックサイズに依存し、HMにおけるデフォルトの設定は、4×4および8×8に対してはNが8に等しく、16×16以上のブロックサイズに対してはNが3に等しいというものである。その後、左隣接モードおよび上隣接モード、すなわち、candIntraPredModeAとcandIntraPredModeBのいずれか、またはこれらの両方(candIntraPredModeAがcandIntraPredModeBに等しくない場合)が、まだ含まれていなければイントラモード候補リストに付加される。第2の段階において、イントラモード候補リストが高価なレートひずみコスト計算プロセスに与えられ、最終的な最良のイントラ予測モードが現在のPUに対して決められる。この2段階のイントラモード決断プロセスを用いると、高価なレートひずみコスト計算に対してはイントラ予測モードの大半がスキップされ、コーディング性能の低下という大きな犠牲を伴わなくても、最良のイントラ予測モードが選択される。
Matsuo他、「Improved intra angular prediction by DCT-based interpolation filter」、Signal Processing Conference(EUSIPCO)、2012 Proceedings of the 20th European、pp. 1568-1572. IEEE、2012年においては、4タップのDCTに基づく補間フィルタを4×4および8×8のブロックサイズに適用することが提案されており、4タップのフィルタが適用されるときにはイントラ平滑化フィルタもオフにされ、16×16以上のブロックサイズに対しては、2タップの双線形補間フィルタが適用される。2011年12月6日に出願された、Maani、Ehsan、「Interpolation filter for intra prediction of HEVC」、米国特許出願第13/312,946号においては、イントラ平滑化フィルタがオフであるときに4タップの補間フィルタを使用することができるが、この4タップの補間フィルタは、CUBIC補間プロセス、DCTベースの補間プロセス、またはHermite補間プロセスに基づいて取得され得る。M. Guo、X. Guo、およびS. Lei、「Improved Intra Mode Coding」、ITU-T SG16 WP3およびISO/IEC JTC1/SC29/WG11のJoint Collaborative Team on Video Coding(JCT-VC)、第4回会合: 大邱、韓国、2011年1月20〜28日においては、イントラモードのバイナリ化が、隣接ブロックのモードに従って事前に定義されたコーディングツリーの集合から適応的に選択される。
たとえばHEVC規格に従った、ビデオデータをコーディングするためのイントラ予測のための既存の技法と関連付けられる、いくつかの問題があり得る。たとえば、HEVCにおけるイントラ予測の既存の設計の35個の固定された予測角度は、非常に変わりやすいエッジ方向の分布を捉えるには非効率であることがある。しかしながら、より多くの予測角度を適用することは、望ましくないエンコーダの複雑さの増大をもたらし得る。たとえば、HEVC参照ソフトウェアに基づく65個の予測角度への直接の拡張は、HEVCにおけるイントラ予測の既存の設計の35個の固定された予測角度と比較して、およそ2倍の数のSATD調査を必要とすることがある。加えて、HEVCにおいてたとえば3つのMPMを使用する現在のイントラモードコーディングの効率は限られることがあり、それは、その現在のイントラモードコーディングがすべての利用可能なイントラ予測モードの実際の確率分布に正確に対応しないことがあるからである。言い換えると、特定のPUのためにHEVCにおいて決定される3つのMPMは、実際には、その特定のPUのために使用される可能性が最も高いイントラ予測モードではないことがある。
本開示の技法は、たとえばHEVC規格に従ってビデオデータをコーディングするためのイントラ予測のための既存の技法と関連付けられる上で特定された問題、ならびに、イントラ予測とビデオのコーディングおよび圧縮という技術分野における他の問題を解決し得る。以下の箇条書きにされる方法は、個別に適用され得る。代替的に、それらの任意の組合せが適用され得る。
本開示のいくつかの態様によれば、3つよりも多くのMPMがイントラ予測モードをシグナリングするために使用され得る。たとえば、Mにより表記されるMPMの数の典型的な例は、4、5、または6であり得る。追加のMPMの使用は、PUのイントラ予測モードをシグナリングするために非MPMインデックスを使用する可能性を下げ得る。MPMインデックスは通常、非MPMインデックスよりも少数のビットを使用して表現されるので、追加のMPMの使用はビットストリームのサイズを減らし得る。
3つよりも多くのMPMがPUのイントラ予測モードをシグナリングするために使用されるいくつかの例では、ビデオエンコーダ20は、CABACなどのエントロピー符号化プロセスを使用してMPMインデックスを符号化することができ、ビデオデコーダ30は、CABACなどのエントロピー復号プロセスを使用してMPMインデックスを復号することができる。PUのMPMインデックスは、MPMのいずれがPUのイントラ予測モードであるかを特定する数値であり得る。MPMインデックスを符号化するためにエントロピー符号化プロセスを使用することの一部として、ビデオエンコーダ20はMPMインデックスをバイナリ化し得る。言い換えると、ビデオエンコーダ20は、MPMインデックスをバイナリ符号へと変換し得る。異なる例では、ビデオエンコーダ20は、様々なバイナリ化方法を使用して、MPMインデックスをバイナリ符号へと変換し得る。たとえば、ビデオコーダは、固定された切捨て単項符号または固定されたハフマン符号のうちの少なくとも1つを使用してMPMインデックスをバイナリ化し得る。さらに、いくつかの例では、MPMインデックスをコーディングするとき、バイナリ化方法は、固定された切捨て単項符号であることがあり、または固定されたハフマン符号であることがあり、またはコーディングされた隣接イントラモードに基づいて決められることがある。たとえば、ビデオコーダは、1つまたは複数の隣接ブロックをコーディングするために使用されるイントラ予測モードに基づいて、バイナリ化方法を決定し得る。たとえば、PUのMPMインデックスに対して、ビデオコーダは、PUと隣り合う1つまたは複数の隣接ブロックをコーディングするために使用されるイントラ予測モードに基づいて、バイナリ化方法を決定し得る。MPMインデックスをバイナリ化した後、ビデオエンコーダ20は、バイナリ化されたMPMインデックスをCABAC符号化し、CABAC符号化されたバイナリ化されたMPMインデックスをビットストリームに含め得る。MPMインデックスを復号することの一部として、ビデオデコーダ30は、ビットストリームからCABAC符号化されたバイナリ化されたMPMインデックスを取得し、CABAC復号をCABAC符号化されたバイナリ化されたMPMインデックスに適用してバイナリ化されたMPMインデックスを復元し、MPMインデックスを非バイナリ化してMPMインデックスを復元し得る。本開示では、「MPMインデックスのビン」という語句は、バイナリ化されたMPMインデックスのビンを指し得る。
本開示のいくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、MPMインデックスの1つまたは複数のビンをコーディング(たとえば、CABACコーディング)するとき、コンテキストモデリングを使用し得る。言い換えると、ビデオエンコーダ20およびビデオデコーダ30は、MPMインデックスの1つまたは複数のビンの各それぞれのビンに対して、それぞれのビンのそれぞれのコーディングコンテキストを選択し得る。ビデオエンコーダ20およびビデオデコーダ30は、それぞれのビンのそれぞれのコーディングコンテキストを使用してそれぞれのビンをコーディングし得る。たとえば、MPMインデックスをコーディングするとき、最初のまたは選択されたN個のコーディングされたビンはコンテキストモデルを使用してコーディングされ得るが、コンテキストインデックスはコーディングされた隣接イントラ予測モードを使用して決められる。たとえば、現在のピクチャの中のPUのMPMインデックスに対して、ビデオコーダは、PUに対して現在のピクチャの中で隣り合う1つまたは複数の隣接PUをコーディングするために使用されるイントラ予測モードに基づいて、コンテキストインデックスを決定し得る。この例では、Nは整数である。いくつかの様々な例では、Nは1、2、または3に等しいことがある。したがって、いくつかの例では、1つまたは複数のコンテキストモデリングされたビンは、MPMインデックスの第1のビンからなる。他の例では、1つまたは複数のコンテキストモデリングされたビンは、MPMインデックスの選択されたN個のビンからなり、NはM-Kに等しく設定され、Kは事前に定義された数である。
現在のPUのMPMインデックスの1つまたは複数のビンをコーディングするときにビデオエンコーダ20およびビデオデコーダ30がコンテキストモデリングを使用する一例では、コンテキストインデックスは、左隣接イントラ予測モードおよび上隣接イントラ予測モードのケースに依存する。この例のケース0では、左隣接イントラ予測モードおよび上隣接イントラ予測モードは同じであり、いずれのイントラ予測モードもDCまたは平面ではない。この例のケース1では、左隣接イントラ予測モードおよび上隣接イントラ予測モードは同じであり、これらのイントラ予測モードのうちの少なくとも1つがDCまたは平面である。この例のケース2では、左隣接イントラ予測モードおよび上隣接イントラ予測モードは異なり、いずれのイントラ予測モードも平面ではない。この例のケース3では、左隣接イントラ予測モードおよび上隣接イントラ予測モードは異なり、これらのイントラ予測モードのうちの少なくとも1つが平面である。左隣接イントラ予測モードおよび上隣接イントラ予測モードは、現在のPUの左および上のPUのイントラ予測モードであり得る。この例では、ビデオエンコーダ20およびビデオデコーダ30は、ケースインデックス(たとえば、ケース0、ケース1、ケース2、またはケース3)からコンテキストインデックス番号にマッピングする、事前に定義されたマッピングテーブルに基づいてコンテキストインデックスを計算し得る。言い換えると、ビデオコーダは、コンテキストインデックスマッピングテーブルに対するケースインデックスを使用して、ケースインデックスからコンテキストインデックスを決定し得る。コンテキストインデックス番号は、事前に定義されたコーディングコンテキストの集合の中のある事前に定義されたコーディングコンテキストを特定し得る。
したがって、この例では、ビデオコーダがMPMインデックスのコンテキストモデリングされたビンのコンテキストインデックスを選択するとき、ビデオコーダは、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードが同じであり、かつ、左の隣接ブロックを復号するために使用されるイントラ予測モードも上の隣接ブロックを復号するために使用されるイントラ予測モードもDCまたは平面ではない場合、第1のコンテキストインデックスを選択し得る。さらに、この例では、ビデオコーダは、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードが同じであり、かつ、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードのうちの少なくとも1つがDCまたは平面である場合、第2のコンテキストインデックスを選択し得る。この例では、ビデオコーダは、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードが異なり、かつ、左の隣接ブロックを復号するために使用されるイントラ予測モードも上の隣接ブロックを復号するために使用されるイントラ予測モードも平面ではない場合、第3のコンテキストインデックスを選択し得る。この例では、ビデオコーダは、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードが異なり、かつ、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードのうちの少なくとも1つがDCまたは平面である場合、第4のコンテキストインデックスを選択し得る。
いくつかの例では、コンテキストインデックスマッピングテーブルに対する異なるケースインデックスが、異なるビンのために使用される。たとえば、ビデオエンコーダ20またはビデオデコーダ30などのビデオコーダは、MPMインデックスのビン0のためにコンテキストインデックスマッピングテーブルに対する第1のケースインデックスを使用し、MPMインデックスのビン1のためにコンテキストインデックスマッピングテーブルに対する第2のケースインデックスを使用し、MPMインデックスのビン2のためにコンテキストインデックスマッピングテーブルに対する第3のケースインデックスを使用し、以下同様であり得る。この例のコンテキストインデックスマッピングテーブルに対する異なるケースインデックスは、上で説明されたケース(たとえば、ケース0、ケース1、ケース2、およびケース3)に異なるコンテキストを割り当て得る。たとえば、前の段落において説明されるマッピングは、MPMインデックスの第1のビンに適用され得るが、MPMインデックスの第2のビンに対しては、ビデオコーダは、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードが同じであり、かつ、左の隣接ブロックを復号するために使用されるイントラ予測モードも上の隣接ブロックを復号するために使用されるイントラ予測モードもDCまたは平面ではない場合、第2のコンテキストインデックスを選択し、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードが同じであり、かつ、左の隣接ブロックを復号するために使用されるイントラ予測モードと上の隣接ブロックを復号するために使用されるイントラ予測モードのうちの少なくとも1つがDCまたは平面である場合、第3のコンテキストインデックスを選択し、以下同様であり得る。
現在のPUのMPMインデックスの1つまたは複数のビンをコーディングするときにビデオエンコーダ20およびビデオデコーダ30がコンテキストモデリングを使用するいくつかの例では、1つだけのコンテキストが最初のまたは選択されたN個のビンの各々をコーディングするために適用され、コンテキストは隣接イントラ予測モードに依存しないことがある。たとえば、そのような例では、ビデオエンコーダ20およびビデオデコーダ30は、MPMインデックスに対してコーディングコンテキスト選択プロセスを一度実行し、MPMインデックスの後続のビンに対してコーディングコンテキスト選択プロセスを繰り返さない。言い換えると、ビデオコーダは、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、共通のコンテキストインデックスを選択し得る。
上で言及されたように、いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、MPMインデックスのN個のコーディングされたビンをコーディングするとき、コンテキストモデリングを使用し得る。1つのそのような例では、Nが(M-K)に等しく設定され、Kは事前に定義された数であり、MはMPMの数である。たとえば、Kは1、2、または3に等しいことがある。
したがって、上の例では、ビデオエンコーダ20は、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出し得る。この例では、Mは3より大きい。さらに、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、最確モードインデックスが使用されるか非最確モードインデックスが使用されるかを示すシンタックス要素が符号化される。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示し、非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。MPMインデックスまたは非MPMインデックスのうちの示されるものがMPMインデックスであることに基づいて、ビデオエンコーダ20は、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、1つまたは複数の隣接ブロックを復号するために使用されるイントラ予測モードに基づいて、コンテキストモデリングされたビンのコンテキストインデックスを選択し得る。ビデオエンコーダ20は、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化し得る。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。この例では、選択されたイントラ予測モードを示すためにMPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化するために、ビデオエンコーダ20は、PUのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックス(たとえば、mpm_idx)が使用されるか、または非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されるかを示す、シンタックス要素(たとえば、prev_intra_luma_pred_flag)を符号化し得る。ビデオエンコーダ20は、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、コンテキストモデリングされたビンの選択されたコンテキストインデックスを使用してコンテキストモデリングされたビンのCABAC符号化を実行し得る。さらに、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化することの一部として、ビデオエンコーダ20は、現在のPUの選択されたイントラ予測モードに基づいて、現在のPUの予測ブロックを生成し得る。ビデオエンコーダ20は、現在のCUと予測ブロックとの間のピクセル差分を表す残差データを生成し得る。この例では、ビデオエンコーダ20は、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含むビットストリームを出力することができ、コーディングされたピクチャは現在のピクチャを含む。
同様に、いくつかの例では、ビデオデコーダ30は、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出し得る。この例では、Mは3より大きい。さらに、ビデオデコーダ30は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号し得る。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示し、非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。MPMインデックスまたは非MPMインデックスのうちの示されるものがMPMインデックスであることに基づいて、ビデオデコーダ30は、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、1つまたは複数の隣接ブロックを復号するために使用されるイントラ予測モードに基づいて、コンテキストモデリングされたビンのコンテキストインデックスを選択し得る。さらに、ビデオデコーダ30は、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築し得る。
たとえば、この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。この例では、選択されたイントラ予測モードを示すためにMPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号するために、ビデオデコーダ30は、現在のPUのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックス(たとえば、mpm_idx)が使用されるか、または非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されるかを示す、シンタックス要素(たとえば、prev_intra_luma_pred_flag)をビットストリームから復号し得る。この例では、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、ビデオデコーダ30は、コンテキストモデリングされたビンの選択されたコンテキストインデックスを使用して、MPMインデックスのコンテキストモデリングされたビンのCABAC復号を実行し得る。さらに、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築することの一部として、ビデオデコーダ30は、選択されたイントラ予測モードを使用して現在のPUの予測ブロックを生成し得る。この例では、ビデオデコーダ30は、CUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、残差値を使用して現在のCUを再構築し得る。この例では、ビデオデコーダ30は、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含むビットストリームを受信することができ、コーディングされたピクチャは現在のピクチャを含む。
上で簡単に論じられたように、HEVCにおいて規定される3つのMPMを使用するイントラ予測モードコーディングの効率は限られることがあり、それは、HEVCにおいて規定される3つのMPMが頻繁に、すべての利用可能なイントラ予測モードの実際の確率分布に正確に対応しないからである。たとえば、PUのイントラ予測モードが特定の非MPMイントラ予測モードである確率は、PUのイントラ予測モードがHEVCにおいて規定される3つのMPMのうちのいずれかである確率より高いことがある。
したがって、本開示のいくつかの例によれば、MPMを導出するとき、代表的なイントラ予測モードは左の(または上の)隣接列(または行)のために定義され、代表的なイントラ予測モードは左の(または上の)隣接列からのMPM候補として使用される。たとえば、ビデオコーダは、左の隣接列のための代表的なイントラ予測モードを定義し、左の隣接列のための代表的なモードをMPM候補として使用し得る。ビデオコーダは、左の隣接ブロックに対してHEVCにおいて定義されるMPMに加えて、または左の隣接ブロックに対してHEVCにおいて定義されるMPMの代わりに、左の隣接列のための代表的なモードをMPM候補として使用し得る(candIntraPredModeA)。その上、ビデオコーダは、上の隣接行のための代表的なイントラ予測モードを定義し、上の隣接行のための代表的なモードをMPM候補として使用し得る。ビデオコーダは、上の隣接ブロックに対してHEVCにおいて定義されるMPMに加えて、または上の隣接ブロックに対してHEVCにおいて定義されるMPMの代わりに、上の隣接行のための代表的なモードをMPM候補として使用し得る(candIntraPredModeB)。
左の隣接列は、ピクチャのCUのための現在のPUの現在のサンプルを含むサンプルの列の、ピクチャにおいてすぐ左のサンプルの列を含み得る。たとえば、左の隣接列は、現在のPUのすぐ左の各サンプルを含み得る(またはそれらからなり得る)。上の隣接行は、ピクチャのCUのための現在のPUの現在のサンプルを含むサンプルの行の、ピクチャにおいてすぐ上のサンプルの行を含み得る。たとえば、上の隣接行は、現在のPUのすぐ上の各サンプルを含み得る(またはそれらからなり得る)。
たとえば、ビデオデータを符号化することの一部として、ビデオエンコーダ20は、一部には、複数のイントラ予測モードの中からビデオデータのブロックのイントラ予測のためのM個のMPMを導出することによって、ビデオデータのブロックを符号化し得る。いくつかの例では、Mは3より大きい。この例では、MPMは、左の隣接列のためのMPMおよび上の隣接行のためのMPMを含み得る。いくつかの例では、ビデオエンコーダ20は、左の隣接列のための代表的なイントラ予測モードを定義し、左の隣接列のためのMPMとして左の隣接列のための代表的なイントラ予測モードを使用する。いくつかの例では、ビデオエンコーダ20は、上の隣接行のための代表的なイントラ予測モードを定義し、上の隣接行のためのMPMとして上の隣接行のための代表的なイントラ予測モードを使用する。
さらに、ビデオエンコーダ20は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化することができ、MPMインデックスまたは非MPMインデックスのうちの示されるものを符号化する。たとえば、ビデオエンコーダ20は、ビットストリームがmpm_indexシンタックス要素を示すデータを含むかrem_intra_luma_pred_modeシンタックス要素を示すデータを含むかを示す、prev_intra_luma_pred_flagシンタックス要素を示すデータをビットストリームに含め得る。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。ビデオエンコーダ20は、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化する。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化するために、ビデオエンコーダ20は、一部には、選択されたイントラ予測モードを使用して現在のPUの予測ブロックを生成することによって、ビデオデータのブロックを再構築し得る。さらに、ビデオエンコーダ20は、CUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、残差値を使用して現在のCUを再構築し得る。
ビデオデータをコーディングするためのイントラ予測のために使用されるべきイントラ予測モードを選択する類似の例において、ビデオデコーダ30は、一部には、複数のイントラ予測モードの中からビデオデータのブロックのイントラ予測のためのM個のMPMを導出することによって、ビデオデータのブロックを復号し得る。この例では、Mは3より大きいことがある。MPMは、左の隣接列のためのMPMおよび上の隣接行のためのMPMを含み得る。いくつかの例では、ビデオデコーダ30は、左の隣接列のための代表的なイントラ予測モードを定義し、左の隣接列のためのMPMとして左の隣接列のための代表的なイントラ予測モードを使用する。いくつかの例では、ビデオデコーダ30は、上の隣接行のための代表的なイントラ予測モードを定義し、上の隣接行のためのMPMとして上の隣接行のための代表的なイントラ予測モードを使用する。
さらに、ビデオデコーダ30は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号することができ、最確モードインデックスまたは非最確モードインデックスのうちの示されるものを復号する。たとえば、ビデオデコーダ30は、ビットストリームからprev_intra_pred_flagを取得し得る。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。
ビデオデコーダ30は次いで、得られる選択されたイントラ予測モードに基づいてビデオブロックを再構築し得る。この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。この例では、得られる選択されたイントラ予測モードに基づいてビデオブロックを再構築することの一部として、ビデオデコーダ30は、選択されたイントラ予測モードを使用してビデオブロックの予測ブロックを生成し得る。たとえば、ビデオブロックはCUであることがあり、ビデオデコーダ30は選択されたイントラ予測モードを使用してCUのPUの予測ブロックを生成することがある。さらに、ビデオデコーダ30は、ビデオブロックの対応する残差サンプルに予測ブロックのサンプルを加算することによって、ビデオブロックの少なくともいくつかのサンプルを再構築し得る。たとえば、ビデオブロックはCUであることがあり、ビデオデコーダ30は予測ブロックのサンプルをCUのTUの1つまたは複数の変換ブロックの中の対応する残差サンプルに加算し得る。
様々な例において、ビデオコーダは、様々な方法で代表的なイントラ予測モードを決定し得る。一例では、代表的なイントラ予測モードは、隣接ブロックによって使用されるすべてのイントラ予測モードの関数として定義される。たとえば、最小のPUサイズ(たとえば、4)の単位での、左(または上)の隣接列(または行)の実際に使用されるイントラ予測モードの数がカウントされ、最も頻繁に使用されるものが代表的なイントラ予測モードとして定義される。したがって、上の例では、ビデオエンコーダ20およびビデオデコーダ30は、左の隣接列の最も頻繁なイントラ予測モードに基づいて左の隣接列の代表的なイントラ予測モードを定義し、上の隣接行の最も頻繁なイントラ予測モードに基づいて上の隣接列の代表的なイントラ予測モードを定義し得る。
代替的に、カウントは現在のブロックのPUサイズに基づく。たとえば、ビデオコーダは、(i)最小の予測単位サイズ、または(ii)ビデオデータのブロックの予測単位サイズのうちの少なくとも1つに基づいて、隣接ブロックの最も頻繁なイントラ予測モードを決定し得る。一例では、最小のPUサイズ(たとえば、4×4)の単位に基づいてカウントする代わりに、現在のブロックの異なるPUに対して異なる単位のサイズが使用され得る。たとえば、現在のブロックのPUサイズが64×64である場合、カウントは、最小のPUサイズ(4×4)の代わりに、8×8のPUサイズまたは16×16のPUサイズに基づく。
いくつかの例では、代表的なイントラ予測モードは、左(または上)の隣接列(または行)における選択された隣接ブロックによって使用されるイントラ予測モードのうちの1つとして定義され得る。たとえば、一番左(上)または一番右(下)のものではない、左(右)の隣接列(行)の中心の位置にあるサンプル(または最小のPUサイズに等しいブロック)のイントラ予測モードは、左(または上)隣接モードの代表的なイントラ予測モードとして定義される。さらに、上の例では、隣接ブロックの最も頻繁なイントラ予測モードは、最小の予測単位サイズ、またはビデオデータのブロックの予測単位サイズのうちの少なくとも1つに基づいて決定され得る。別の例では、ビデオエンコーダ20およびビデオデコーダ30は、左の隣接列の中の選択された隣接ブロックによって使用されるイントラ予測モードとして、左の隣接列の代表的なイントラ予測モードを定義することができ、上の隣接行の中の選択された隣接ブロックによって使用されるイントラ予測モードとして、上の隣接行の代表的なイントラ予測モードを定義することができる。
上で言及されたように、本開示の特定の例はM個のMPMを許容し、Mは3より大きい。したがって、本開示のそのような例によれば、ビデオエンコーダ20は、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出し得る。言い換えると、ビデオエンコーダ20は、複数のイントラ予測モードの中から、ビデオデータの現在のピクチャのCUのPUのイントラ予測のためのM個のMPMを導出し得る。この例では、Mは3より大きい。この例では、Mは、複数のイントラ予測モードの中のイントラ予測モードの総数より小さい。さらに、この例では、ビデオエンコーダ20は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化し得る。この例では、ビデオエンコーダ20は、MPMインデックスまたは非MPMインデックスのうちの示されるものを符号化し得る。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示し、非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。ビデオエンコーダ20は、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化し得る。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。この例では、ビデオエンコーダ20は、選択されたイントラ予測モードを示すためにMPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化することができ、ビデオエンコーダ20は、PUのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックス(たとえば、mpm_idx)が使用されるか、または非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されるかを示す、シンタックス要素(たとえば、prev_intra_luma_pred_flag)を符号化することができる。さらに、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化することの一部として、ビデオエンコーダ20は、現在のPUの選択されたイントラ予測モードに基づいて、現在のPUの予測ブロックを生成し得る。ビデオエンコーダ20は、現在のCUと予測ブロックとの間のピクセル差分を表す残差データを生成し得る。この例では、ビデオエンコーダ20は、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含むビットストリームを出力することができ、コーディングされたピクチャは現在のピクチャを含む。
その上、本開示のそのような例によれば、ビデオデコーダ30は、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出し得る。この例では、Mは3より大きい。Mは、複数のイントラ予測モードの中のイントラ予測モードの総数より小さいことがある。さらに、この例では、ビデオデコーダ30は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号し得る。この例では、ビデオデコーダ30は、MPMインデックスまたは非MPMインデックスのうちの示されるものを復号し得る。ビデオデコーダ30は、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築し得る。
たとえば、この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。この例では、選択されたイントラ予測モードを示すためにMPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号するために、ビデオデコーダ30は、現在のPUのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックス(たとえば、mpm_idx)が使用されるか、または非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されるかを示す、シンタックス要素(たとえば、prev_intra_luma_pred_flag)をビットストリームから復号し得る。さらに、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築することの一部として、ビデオデコーダ30は、選択されたイントラ予測モードを使用して現在のPUの予測ブロックを生成し得る。この例では、ビデオデコーダ30は、CUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、残差値を使用して現在のCUを再構築し得る。この例では、ビデオデコーダ30は、コーディングされたピクチャの表現および関連するデータを形成するビットのシーケンスを含むビットストリームを受信することができ、コーディングされたピクチャは現在のピクチャを含む。
いくつかの例では、M(M>3)個のMPMを決めるとき、HEVCにおいて定義される元の3つのMPMがM個のMPMにおいて維持され、追加の(M-3個の)イントラ予測モードが追加される。たとえば、いくつかの例では、追加の3つのイントラ予測モードが、平面モードおよびDCモードが常にMPMに含まれるように選択され得る。言い換えると、M個のMPMを導出するプロセスは、M個のMPMの中に平面モードおよびDCモードを含めることを備え得る。
代替的に、いくつかの例では、追加の(M-3個の)イントラ予測モードは、平面モード、DCモード、垂直(すなわち、INTRA_ANGULAR26)モード、および/または水平(すなわち、INTRA_ANGULAR10)モード、および/または対角(すなわち、INTRA_ANGULAR18)モードが常にMPMに含まれるように選択され得る。言い換えると、M個のMPMを導出するプロセスは、平面モードと、DCモードと、垂直モード、水平モード、または対角モードのうちの少なくとも1つとを、M個のMPMの中に含めることを備え得る。
いくつかの例では、追加の(M-3個の)イントラ予測モードは、最初の3つのMPMにすでに含まれている角度モードに最も近い角度モードから選択され得る。この例では、「最も近い」という用語は、イントラ予測モードインデックスの差分、またはイントラ予測モードインデックスの差分の絶対値、またはイントラ予測角度の差分により測られる。たとえば、この例では、M個のMPMを導出することの一部として、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は3つのMPMを導出することができ、3つのMPMは少なくとも1つの角度モードを含む。さらに、この例では、ビデオコーダは、少なくとも角度モードとの類似性に基づいて、1つまたは複数の追加の角度MPMを選択し得る。この例では、類似性は、イントラ予測モードインデックスの差またはイントラ予測角度の差のうちの少なくとも1つに基づいて決定される。
本開示のいくつかの例によれば、インデックス値をコーディングするために使用されるビットの数を減らすために、非MPMインデックスをコーディングするときには、インデックス値をコーディングするために利用されるビットの数のある程度の変動が含まれ得る。したがって、ビデオエンコーダ20およびビデオデコーダ30などのビデオコーダは、複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すためにMPMインデックスが使用されているか非MPMインデックスが使用されているかを決定し、非MPMインデックスが特定されるとき、1つまたは複数の基準が満たされているかどうかに応じて、非MPMインデックスを表すための固定長符号と非MPMインデックスを表すための可変長符号のいずれかを使用し得る。様々な例において、ビデオコーダは、異なる方法で様々な基準を決定し得る。たとえば、基準は、非MPMインデックスが複数のイントラ予測モードの所定の数の最初の非MPMインデックスのうちの1つである場合、満たされ得る。いくつかの例では、基準は、非MPMインデックスが所定の数の最後の非MPMインデックスのうちの1つである場合、満たされる。いくつかの例では、基準は、非MPMインデックスが所定の数の選択された非MPMインデックスのうちの1つである場合、満たされる。
したがって、本開示の一例によれば、ビデオエンコーダ20は、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個の最確モードを導出し得る。この例では、Mは3より大きいことがある。さらに、ビデオエンコーダ20は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化し得る。さらに、この例では、ビデオエンコーダ20は、選択されたイントラ予測モードを示すために非MPMインデックスが使用されることを示すシンタックス要素に基づいて、非MPMインデックスを符号化し得る。この例では、非MPMインデックスは、非MPMインデックスがある基準を満たす場合には
ビットより短い符号語としてビットストリームにおいて符号化されることがあり、それ以外の場合には
ビットを有する固定長符号として符号化される。この例では、全体でN個の非MPMインデックスの利用可能な値があり得る。さらに、ビデオエンコーダ20は、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化し得る。本開示では、
は切り上げ演算を表す。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードであり得る。さらに、この例では、選択されたイントラ予測モードを示すためにMPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化するために、ビデオエンコーダ20は、現在のPUに対して複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックス(たとえば、mpm_idx)が使用されるか、または非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されるかを示す、シンタックス要素(たとえば、prev_intra_luma_pred_flag)を示すデータをビットストリームに含め得る。さらに、いくつかのそのような例では、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化するために、ビデオエンコーダ20は選択されたイントラ予測モードを使用してPUの予測ブロックを生成することができ、ビデオエンコーダ20は現在のCUと予測ブロックとの間のピクセル差分を表す残差データを生成することができる。いくつかの例では、ビデオエンコーダ20は、残差データを変換し量子化して、得られた量子化された変換係数を表すエントロピー符号化されたシンタックス要素をビットストリームに含め得る。
一例では、基準は、非MPMインデックスが複数のイントラ予測モードの所定の数の最初の非MPMインデックスのうちの1つである場合、満たされ得る。たとえば、非MPMモードに対して、エンコーダとデコーダの両方が、利用可能な非MPMモードの各々にインデックス値を割り当て得る。復号されたインデックス値を用いて、デコーダはどの非MPMモードがシグナリングされるかを知る。一例では、非MPMインデックスが最初のM個のインデックス値のうちの1つであるとき、非MPMインデックスは0〜(M-1)の範囲内にあり得る。別の例では、基準は、非MPMインデックスが所定の数の最後の非MPMインデックスのうちの1つである場合、満たされ得る。別の例では、基準は、非MPMインデックスが所定の数の選択された非MPMインデックスのうちの1つである場合、満たされ得る。
同様の例において、ビデオデコーダ30は、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出し得る。この例では、Mは3より大きいことがある。さらに、この例では、ビデオデコーダ30は、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号し得る。前のように、MPMインデックスは、M個の最確モードのうちのいずれが選択されたイントラ予測モードであるかを示し、非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。さらに、この例では、選択されたイントラ予測モードを示すMPMインデックスに基づいて、ビデオデコーダ30は非MPMインデックスを復号し得る。この例では、非MPMインデックスは、非MPMインデックスがある基準を満たす場合には
ビットより短い符号語としてビットストリームにおいて符号化され、それ以外の場合には
ビットを有する固定長符号としてビットストリームにおいて符号化される。この例では、全体でN個の非MPMインデックスの利用可能な値がある。ビデオデコーダ30は、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築し得る。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードであり得る。さらに、この例では、現在のPUのイントラ予測のための選択されたイントラ予測モードを示すためにMPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号するために、ビデオデコーダ30は、現在のPUの選択されたイントラ予測モードを示すために、MPMインデックス(たとえば、mpm_idx)が使用されるか、または非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されるかを示す、シンタックス要素(たとえば、prev_intra_luma_pred_flag)をビットストリームから復号し、または別様に取得し得る。さらに、いくつかの例では、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築することの一部として、ビデオデコーダ30は、選択されたイントラ予測モードを使用して現在のPUの予測ブロックを生成し得る。そのような例では、ビデオデコーダ30は、CUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、残差値を使用して現在のCUを再構築し得る。
一例では、基準は、非MPMインデックスが複数のイントラ予測モードの所定の数の最初の非MPMインデックスのうちの1つである場合、満たされ得る。たとえば、基準は、非MPMインデックスが複数のイントラ予測モードの最初のX個の非MPMインデックスのうちの1つであるということであってよく、Xは整数である。別の例では、基準は、非MPMインデックスが所定の数の最後の非MPMインデックスのうちの1つである場合、満たされ得る。たとえば、基準は、非MPMインデックスが複数のイントラ予測モードの最後のX個の非MPMインデックスのうちの1つであるということであってよく、Xは整数である。別の例では、基準は、非MPMインデックスが所定の数の選択された非MPMインデックスのうちの1つである場合、満たされ得る。たとえば、基準は、非MPMインデックスが複数のイントラ予測モードのX個の選択された非MPMインデックスのうちの1つであるということであってよく、Xは整数である。
したがって、非MPMインデックスをコーディングするとき、すべての利用可能なN個の非MPMインデックスが、最初のM個または最後のM個または選択されたM個を除いて、
ビットを有する固定長符号を使用してコーディングされることがあり、一方、M個のインデックス値は、
ビットよりも短い符号語を使用してシグナリングされる。この例では、MはMPMの数に等しいことも等しくないこともある。代替的に、すべての利用可能なN個の非MPMインデックスは、
ビットを有する固定長符号を使用してコーディングされる。
代替的に、いくつかの例では、非MPMインデックスが水平モードを参照するか垂直モードを参照するかを示す1ビットのフラグがまずコンテキストモデリングとともにシグナリングされ、次いで、どの非MPMが選択されるかを指定するインデックスがさらにシグナリングされる。したがって、この例では、ビデオエンコーダ20は、ビデオデータのブロックの選択されたイントラ予測モードを示すために非MPMインデックス(たとえば、rem_intra_luma_pred_mode)が使用されることを示すシンタックス要素(たとえば、prev_intra_luma_pred_flag)に基づいて、非MPMインデックスが水平モードまたは垂直モードのうちの1つを参照するかどうかを示す第2のシンタックス要素を符号化し得る。同様に、ビデオデコーダ30は、ビットストリームから、非MPMインデックスが使用されることを示すシンタックス要素(たとえば、prev_intra_luma_pred_flag)に基づいて、非MPMインデックスが水平モードまたは垂直モードのうちの1つを参照するかどうかを示す第2のシンタックス要素を復号し得る。
いくつかの例では、イントラ予測モードをシグナリングするために3つよりも多くのMPMが使用されるとき、エンコーダモードの決断の間、各PUに対して、最初のK個(K≧2)のMPMが、レートひずみ最適化によって調査されるべき候補イントラ予測モードへと挿入される。Kの値は、左隣接イントラ予測モードIntraModeLおよび上隣接イントラ予測モードIntraModeAが同じであるかどうかに依存し得る。たとえば、K=(IntraModeL==IntraModeA)?2:3である。言い換えると、この例では、IntraModeLがIntraModeAに等しい場合、Kは2に等しく設定され、それ以外の場合、3に等しく設定される。
いくつかの例では、MPMの数はCUサイズまたはPUサイズに依存し得る。たとえば、MPMの数はより大きなCUサイズまたはPUサイズに対してはより大きいことがある。代替的に、いくつかの例では、MPMの数は、シーケンスパラメータセット、ピクチャパラメータセット、またはスライスヘッダにおいてシグナリングされ得る。
本開示のいくつかの例によれば、ビデオエンコーダ20およびビデオデコーダ30などのビデオコーダは、33個よりも多くの角度イントラ予測モードを使用し得る。たとえば、ビデオコーダは65個の角度モードを使用し得る。この例では、65個の予測角度(方向)は、補間が1/32ペル(ピクセル)精度で実行されるように定義され得る。上で論じられたように、PUが角度イントラ予測モードを使用して符号化されるとき、ビデオコーダは、角度イントラ予測モードと関連付けられる予測方向に沿ってPUの予測ブロックのサンプルの座標を投影することによって、2つの再構築された隣接サンプルの間の小数位置を決定し得る。補間が1/32ペル精度で実行されるとき、31個の等距離の位置が2つの隣り合う再構築された隣接サンプルの間で定義され、ビデオコーダは、再構築された隣接ピクセルまたは31個の位置のうちの最も近いものとして、決定された小数位置を設定する。実数直線の代わりに限られた数の位置を使用することで、補間計算を実行する際に伴う処理を簡略化することができる。上で簡単に論じられたように、33個よりも多くの角度イントラ予測モードが利用可能であるにもかかわらず1/32ペル精度を使用して補間を実行することで、複雑さを同じレベルに保ちながら精度を上げることができる。具体的には、高い精度で補間を実行するためには、エンコーダとデコーダの両方において多数の異なる補間フィルタが設計され記憶される必要がある。したがって、たとえば、高い補間精度に対する必要性をなくすことによって、ビデオコーダの複雑さ(32個だけの異なる補間フィルタが依然として利用されている)は、1/32ペルの補間を使用すると同じままになり得る。
したがって、33個よりも多くの角度イントラ予測モードが使用され(たとえば、65個の角度イントラ予測モードが使用され)、補間が1/32ペルの精度で実行される上の例では、ビデオデータのブロックを符号化することの一部として、ビデオエンコーダ20は、33個よりも多くの角度イントラ予測モードを含む複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報(たとえば、mpm_idxまたはrem_intra_luma_pred_mode)を符号化し得る。この例では、角度イントラ予測モードは、補間が1/32ペル精度で実行されるように定義される。さらに、この例では、ビデオエンコーダ20は、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化し得る。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。さらに、この例では、ビデオデータのブロックを符号化することの一部として、ビデオエンコーダ20は、現在のPUの予測ブロックの各それぞれのサンプルに対して、現在のピクチャの2つの隣接する再構築されたサンプルの間の小数位置を決定し得る。図5は、角度イントラ予測モードに従ってビデオデータのブロックの予測サンプルを生成するための例示的な技法を示す概念図である。たとえば、図5の例では、ビデオエンコーダ20は、隣接するサンプルLとRの間の小数位置αを決定し得る。2つの隣接する再構築されたサンプルは現在のPUに隣接する。ビデオエンコーダ20は、選択されたイントラ予測モードと関連付けられる予測方向に沿って、それぞれのサンプルの座標を、2つの隣接する再構築されたサンプルを含む隣接する再構築されたサンプルの行または列へと投影することによって、小数位置を決定し得る。たとえば、図5の例では、線60は選択されたイントラ予測モードと関連付けられる予測方向を示し、(x, y)はそれぞれのサンプル62の座標である。この例では、ビデオエンコーダ20は、2つの隣接する再構築されたサンプルの値を使用して決定された小数位置における値を補間する、補間フィルタを使用してそれぞれのサンプルの予測値を計算し得る。この補間は1/32ペル精度である。加えて、この例では、ビデオデータを符号化することの一部として、ビデオエンコーダ20は、現在のブロックと予測ブロックとの間のピクセル差分を表す残差データを生成し得る。ビデオエンコーダ20は、残差データを変換し量子化して、得られた量子化された変換係数を表すエントロピー符号化されたシンタックス要素をビットストリームに含め得る。
同様に、一例では、ビデオデコーダ30は、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報(たとえば、mpm_idxまたはrem_intra_luma_pred_mode)を復号し得る。この例では、複数のイントラ予測モードは、33個よりも多くの角度イントラ予測モードを含む。角度イントラ予測モードは、補間が1/32ペル精度で実行されるように定義され得る。ビデオデコーダ30は、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築し得る。
したがって、この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードであり得る。ビデオデータのブロックを再構築することの一部として、現在のPUの予測ブロックの各それぞれのサンプルに対して、ビデオデコーダ30は、選択されたイントラ予測モードと関連付けられる予測方向に沿って、それぞれのサンプルの座標を、2つの隣接する再構築されたサンプルを含む隣接する再構築されたサンプルの行または列へと投影することによって、現在のピクチャの2つの隣接する再構築されたサンプルの間の小数位置を決定し得る。加えて、ビデオデコーダ30は、2つの隣接する再構築されたサンプルの値を使用して決定された小数位置における値を補間する、補間フィルタを使用してそれぞれのサンプルの予測値を計算し得る。この例では、この補間は1/32ペル精度である。ビデオデコーダ30は、CUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、残差値を使用して現在のCUのコーディングブロックを再構築し得る。
上の例では、ビデオエンコーダ20およびビデオデコーダ30は、33個よりも多くの角度イントラ予測モードを使用し得る。たとえば、複数の角度イントラ予測モードは65個の角度イントラ予測モードを含み得る。さらに、上の例では、補間フィルタは2タップの双線形補間フィルタであり得る。いくつかのそのような例では、補間フィルタは次のように定式化され、
pxy=(1-α)・L+α・R
ここでpxyはそれぞれのサンプルの計算された値であり、LおよびRは2つの再構築された隣接サンプルの値であり、αは決定された小数位置である。
上で示されたように、本開示のいくつかの例によれば、ビデオコーダは33個よりも多くの角度イントラ予測モードを使用し得る。1つのそのような例では、各PUに対して、N個の角度モードだけが使用可能であるように制約され、N個の角度モードは、左および上の隣接ブロックのコーディングされた情報を使用してすべての利用可能な角度モードから適応的に選択される。たとえば、この例では、ビデオエンコーダ20は、ピクチャのブロック(たとえば、PU)を符号化するときに特定の角度イントラ予測モードを選択することを禁止される(すなわち、選択することを制約される)。この例では、ビデオエンコーダ20は、同じピクチャの他のブロックを符号化する際に使用するために特定の角度イントラ予測モードがビデオエンコーダ20に対して利用可能であるにもかかわらず、および、その特定の角度イントラ予測モードが、ブロックを符号化するためにビデオエンコーダ20が使用することを許可されている角度イントラ予測モードよりも良好な圧縮性能を提供し得るという事実にもかかわらず、その特定の角度イントラ予測モードを選択することを禁止され得る。
したがって、N個の角度イントラ予測モードのみが使用されることが可能である例では、ビデオエンコーダ20およびビデオデコーダ30は、1つまたは複数の隣接ブロックを復号するために使用されるイントラ予測モードに基づいて、複数の角度イントラ予測モードの中からN個の角度イントラ予測モードの部分集合を選択し得る。この例では、現在のPUの選択されたイントラ予測モードを示すシンタックス情報は、選択されたイントラ予測モードを示すインデックスを備え得る。この例では、インデックスは
ビットからなる固定長符号である。この例では、Nは33などの様々な整数であり得る。
いくつかの例では、全体のイントラ予測モードの数はCUサイズまたはPUサイズに依存する。たとえば、ビデオコーダ(たとえば、ビデオエンコーダ20またはビデオデコーダ30)は、CUサイズまたはPUサイズのうちの少なくとも1つに基づいて、複数のイントラ予測モードの中のイントラ予測モードの総数を決定し得る。たとえば、CUサイズまたはPUサイズがある特定の閾値未満である場合、ある特定の数未満のインデックス値を有する角度イントラ予測モードのみが利用可能である。いくつかの例では、イントラ予測モードの総数は、SPS、PPS、またはスライスヘッダにおいてシグナリングされ得る。
上で論じられたように、ビデオエンコーダ20およびビデオデコーダ30は、再構築された隣接サンプルに補間フィルタを適用して、予測ブロックの中のサンプルの値を決定し得る。本開示のいくつかの技法によれば、Nタップのイントラ補間フィルタが適用されることが可能であり、Nは2より大きい。たとえば、Nは3および4であり得る。ビデオエンコーダ20またはビデオデコーダ30などのビデオコーダがNタップのイントラ補間フィルタを使用して予測ブロックの中のサンプルの値を決定するとき、ビデオコーダは、N個の再構築された隣接サンプルの値に基づいて値を計算し得る。Nタップ(N>2)の補間を使用することは、補間の間により多くの参照サンプル(N個の参照サンプル)を含めることによってより正確な補間結果を提供し得るので、既存の2タップの補間より有利であり得る。統計的には、より多くの参照サンプルを使用することは、より複雑度の高いより良好な補間精度をもたらす。Nタップのイントラ補間フィルタは、同期補間フィルタ、ガウシアン補間フィルタ、および画像相関モデルを使用して導出される補間フィルタを含み得る。同期フィルタは、より低い周波数に影響を与えることなく所与のカットオフ周波数より上のすべての周波数成分を除去し、線形の位相応答を有する。したがって、Nタップの補間フィルタは、同期補間フィルタ、ガウシアン補間フィルタ、および画像相関モデルを使用して導出される補間フィルタのうちの少なくとも1つを備え得る。
このようにして、ビデオエンコーダ20は、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報を符号化し得る。たとえば、ビデオエンコーダ20は、現在のPUのためのmpm_idxシンタックス要素またはrem_intra_luma_pred_modeシンタックス要素をビットストリームにおいてシグナリングし得る。さらに、ビデオエンコーダ20は、選択されたイントラ予測モードに従って、Nタップのイントラ補間フィルタをビデオデータのブロックの隣接する再構築されたサンプルに適用することがあり、Nは2より大きい。ビデオエンコーダ20は、Nタップのイントラ予測フィルタを適用して、フルペルの隣接する再構築されたサンプルの間の位置に対応し得る、フィルタリングされた隣接する再構築されたサンプルを決定し得る。ビデオエンコーダ20は、選択されたイントラ予測モードに従って、フィルタリングされた隣接する再構築されたサンプルに基づいてビデオデータのブロックを符号化し得る。たとえば、ビデオエンコーダ20は、フィルタリングされた隣接する再構築されたサンプルを使用して、予測ブロックを生成し、予測ブロックに基づいてビデオデータのブロックの残差データを生成し得る。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。さらに、この例では、現在のPUの予測ブロックの各それぞれのサンプルに対して、ビデオエンコーダ20は、選択されたイントラ予測モードと関連付けられる予測方向に沿って、それぞれのサンプルの座標を、2つの隣接する再構築されたサンプルを含む隣接する再構築されたサンプルの行または列へと投影することによって、隣接する再構築されたサンプルの集合の2つの隣接する再構築されたサンプルの間の小数位置を決定し得る。隣接する再構築されたサンプルの集合は、現在のピクチャの中の現在のPUの上および左にある再構築されたサンプルを含む。さらに、ビデオエンコーダ20は、Nタップのイントラ予測フィルタを隣接する再構築されたサンプルに適用して、決定された小数位置における値を補間することによって、それぞれのサンプルの値を計算することができ、ここでNは2より大きい。フィルタリングされた隣接する再構築されたサンプルに基づいてビデオデータのブロックを符号化することの一部として、ビデオエンコーダ20は、現在のCUと予測ブロックとの間のピクセル差分を表す残差データを生成し得る。ビデオエンコーダ20は、残差データを変換し量子化して、得られた量子化された変換係数を表すエントロピー符号化されたシンタックス要素をビットストリームに含め得る。
同様に、ビデオデコーダ30は、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報を復号し得る。たとえば、ビデオデコーダ30は、mpm_idxシンタックス要素またはrem_intra_luma_pred_modeシンタックス要素をビットストリームから取得し得る。さらに、ビデオデコーダ30は、選択されたイントラ予測モードに従って、Nタップのイントラ予測フィルタをビデオデータのブロックの隣接する再構築されたサンプルに適用することがあり、Nは2より大きい。さらに、ビデオデコーダ30は、選択されたイントラ予測モードに従って、フィルタリングされた隣接する再構築されたサンプルに基づいてビデオデータのブロックを再構築し得る。
この例では、ビデオデータのブロックは、ビデオデータの現在のピクチャの中の現在のCUであることがあり、ビデオデータのブロックの選択されたイントラ予測モードは、現在のCUの現在のPUの選択されたイントラ予測モードである。この例では、現在のPUの予測ブロックの各それぞれのサンプルに対して、ビデオデコーダ30は、選択されたイントラ予測モードと関連付けられる予測方向に沿って、それぞれのサンプルの座標を、2つの隣接する再構築されたサンプルを含む隣接する再構築されたサンプルの行または列へと投影することによって、隣接する再構築されたサンプルの集合の2つの隣接する再構築されたサンプルの間の小数位置を決定し得る。隣接する再構築されたサンプルの集合は、現在のピクチャの中の現在のPUの上および左にある再構築されたサンプルを含む。ビデオデコーダ30は、Nタップのイントラ補間フィルタを隣接する再構築されたサンプルに適用して、決定された小数位置における値を補間することによって、それぞれのサンプルの予測値を計算することができ、ここでNは2より大きい。この例では、ビデオデータのブロック(たとえば、現在のCU)を再構築することの一部として、ビデオデコーダ30は、CUのPUの予測ブロックのサンプルを、現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、残差値を使用して現在のCUのコーディングブロックを再構築し得る。
補間フィルタが画像相関モデルを使用して導出されるとき、一般化されたガウシアン関数に基づく画像相関関数が適用されることがあり、各小数位置に対する補間関数がさらに少なくとも最小二乗平均推定を使用して導出される。たとえば、画像相関モデルを使用して補間フィルタを導出するとき、画像相関モデルがR(i,i)=ρx |i|・ρy |j|であり、iおよびjが水平軸および垂直軸における2つの画像サンプルの間の距離を示すと仮定すると、ρxは水平方向の画像相関係数であり、ρyは垂直方向の画像相関係数であり、ρxとρyの両方が[0, 1]の範囲内にあることがあり、これは、より大きな画像距離がより小さな相関を出力することを意味する。別の例では、4つのサンプルa、b、c、およびdがあると仮定すると、分数サンプルeが補間されることになる。望ましい補間フィルタ[f0, f1, f2, f3]を導出するために、補間プロセス[a, b, c, d]*[f0, f1, f2, f3]T=[e]がA*F=Eと書き直されることがあり、ここでA=[a, b, c, d]、F=[f0, f1, f2, f3]T、かつE=[e]である。最小二乗平均推定によれば、最適なフィルタFはF*=(AT*A)-1*ATEであり、「(AT*A)-1*ATE」は仮定される画像相関モデルによって決定され得る。したがって、画像相関モデルを使用すると、各分数サンプルに対する補間フィルタは、最小二乗平均推定を使用して導出され得る。
したがって、ビデオコーダが画像相関モデルを使用してイントラ補間フィルタを導出するいくつかの例では、ビデオコーダは、一般化されたガウシアン関数に基づく画像相関関数を適用し得る。加えて、ビデオコーダは、最小二乗平均推定を使用して各小数位置に対して補間関数を導出し得る。
いくつかの例では、ビデオコーダがガウシアン補間フィルタを適用するとき、フィルタの平滑化の強さを制御するパラメータはブロックサイズに応じて変化し得る。したがって、そのような例では、イントラ補間フィルタは、ガウシアン補間フィルタを備えることがあり、ガウシアン補間フィルタの平滑化の強さを制御するパラメータは、ブロックサイズに基づいて変化する。たとえば、ガウシアン補間フィルタは次のように定式化されることがあり、
ここで、xは小数位置を示し、σは平滑化の強さを制御する。したがって、より大きな値のσは、平滑化の強さが大きいガウシアン補間フィルタを生成する。
さらに、いくつかの例では、ビデオコーダは適用すべき補間フィルタを選択し得る。そのような例では、フィルタの選択は、ブロックサイズと、ブロックの内部の相対的なサンプル位置とに依存し得る。したがって、そのような例では、ビデオコーダは、ブロックサイズまたはブロックの内部の相対的なサンプル位置に少なくとも基づいて、イントラ補間フィルタを選択し得る。たとえば、異なる補間フィルタの集合、すなわちf1、f2、...fyが設計されたと仮定すると、異なる補間フィルタが現在のブロックの内部の異なるピクセル位置のために使用され得る。たとえば、補間フィルタf1は現在のブロックの内部のピクセルの最初の2行のために利用されることがあり、補間フィルタf2はピクセルの残りの行のために利用されることがある。
異なる補間フィルタが単一のブロックのイントラ予測のために利用可能であることがあり、補間フィルタの選択は、明示的にシグナリングされることがあり、または、再構築されたサンプル値およびイントラ予測モードを含む隣接する復号された情報から導出されることがある。したがって、そのような例では、ビデオコーダは、再構築されたサンプル値または隣接ブロックのイントラ予測モードのうちの少なくとも1つに基づいてイントラ補間フィルタを選択し得る。たとえば、異なる補間フィルタの集合、すなわちf1、f2、...fyが設計されたと仮定すると、異なる補間フィルタが異なるイントラ予測モードのために使用され得る。たとえば、補間フィルタf1は対角イントラ予測モードのために利用されることがあり、補間フィルタf2は垂直イントラ予測モードのために利用されることがある。
本開示のいくつかの例によれば、複数のイントラ予測方向が、複数のイントラ予測モードの追加のシグナリングを伴わずに1つのPUに対して許容され得る。たとえば、ビデオデコーダ30は、複数のイントラ予測モードの中からビデオデータのブロック(たとえば、PU)の選択されたイントラ予測モードを示すシンタックス情報を復号し得る。さらに、ビデオデコーダ30は、追加のイントラ予測モードを示す追加のシンタックス情報を復号することなく、ブロックの1つまたは複数の追加のイントラ予測モードを決定し得る。この例では、ビデオデコーダ30は、選択されたイントラ予測モードおよび1つまたは複数の追加のイントラ予測モードに従ってビデオデータのブロックを再構築し得る。たとえば、ビデオデコーダ30は、CUの残差データに基づくブロックと、選択されたイントラ予測モードおよび1つまたは複数の追加のイントラ予測モードに基づいて生成されたブロックの予測ブロックとを含む、CUを再構築し得る。
複数のイントラ予測方向が複数のイントラ予測モードの追加のシグナリングを伴わずに1つのPUに対して許可されるいくつかの例では、PUは複数のサブブロックを備え、PU内の各サブブロックは固有のイントラ予測モードを有し得る。この例では、PU内のサブブロックは4×4のブロックである。このようにして、一例では、上で言及されたビデオデータのブロックの1つまたは複数の追加のイントラ予測モードを決定することの一部として、ビデオデコーダ30は、追加のイントラ予測モードを示す追加のシンタックス情報を復号することなく、ビデオデータのブロックの複数のサブブロックのそれぞれのイントラ予測モードを決定し得る。さらに、この例では、ビデオデータのブロックを再構築することの一部として、ビデオデコーダ30は、それぞれの決定されたイントラ予測モードに従ってサブブロックを再構築し得る。
さらに、いくつかの例では、1つのサブブロックのイントラ予測方向は、最も近い上または左の参照ブロックのイントラ予測モードとして導出され得る。このようにして、ビデオデータのブロックの複数のサブブロックのそれぞれのイントラ予測モードを決定することの一部として、ビデオデコーダ30は、サブブロックの少なくとも1つのそれぞれのイントラ予測モードを、最も近い上または左の参照ブロックのイントラ予測モードとして導出し得る。いくつかの例では、現在のPUの各サブブロックに対して、予測は2つの予測方向の加重和であり、2つの予測方向は上の参照行および左の参照列の中の最も近いブロックから来る。このようにして、ビデオデータのブロックの複数のサブブロックのそれぞれのイントラ予測モードを決定することの一部として、ビデオデコーダ30は、サブブロックの少なくとも1つのそれぞれのイントラ予測モードを、上の参照ブロックと左の参照ブロックの一方または両方に基づいて導出し得る。
同様に、ビデオデータを符号化するプロセスの一部として、ビデオエンコーダ20は、複数のイントラ予測モードの中からビデオデータのブロック(たとえば、PU)の選択されたイントラ予測モードを示すシンタックス情報を符号化し得る。ビデオエンコーダ20は、追加のイントラ予測モードを示す追加のシンタックス情報を符号化することなく、ビデオデータのブロックの1つまたは複数の追加のイントラ予測モードを決定し得る。ビデオエンコーダ20は、選択されたイントラ予測モードおよび1つまたは複数の追加のイントラ予測モードに従ってビデオデータのブロックを符号化し得る。いくつかの例では、ビデオデータのブロックの1つまたは複数の追加のイントラ予測モードを決定することの一部として、ビデオエンコーダ20は、追加のイントラ予測モードを示す追加のシンタックス情報を符号化することなくビデオデータのブロックの複数のサブブロックのそれぞれのイントラ予測モードを決定することができ、ビデオデータのブロックを符号化することの一部として、ビデオエンコーダ20は、それぞれの決定されたイントラ予測モードに従ってサブブロックを符号化することができる。いくつかの例では、ビデオデータのブロックの複数のサブブロックのそれぞれのイントラ予測モードを決定することの一部として、ビデオエンコーダ20は、サブブロックの少なくとも1つのそれぞれのイントラ予測モードを、最も近い上または左の参照ブロックのイントラ予測モードとして導出し得る。いくつかの例では、ビデオデータのブロックの複数のサブブロックのそれぞれのイントラ予測モードを決定することの一部として、ビデオエンコーダ20は、サブブロックの少なくとも1つのそれぞれのイントラ予測モードを、上の参照ブロックと左の参照ブロックの一方または両方に基づいて導出し得る。
上で言及されたように、ビデオエンコーダ20は、PUのためにどのイントラ予測モードを選択すべきかを決めるためのプロセスを実行し得る。HEVCにおける35個すべての利用可能なイントラ予測モードに対して完全なレートひずみ最適化プロセスを実行することは、いくつかの事例では現実的ではないことがあるので、ビデオエンコーダ20は、「Sum of Absolute Transform Difference」(SATD)基準を使用してイントラ予測モードを調査することによって、N個のイントラ予測モード候補のリストを決定し得る。本開示のいくつかの例のように、35個よりも多くのイントラ予測モードが利用可能であるときには、SATD基準を使用してイントラ予測モードを調査することすらも、過剰に時間がかかるものになることがあり、またはリソース集約的になることがある。
したがって、本開示の例によれば、ビデオエンコーダ20におけるイントラ角度予測のためのSATD調査の数を減らすために、たとえば大きく減らすために、K段階のSATD調査方式が提案される。この例では、Kは2より大きい。この例では、SATD調査の各段階に対して、イントラ予測角度の事前に定義された部分集合から来る、選択された数のイントラ予測モードだけが、SATDコストを用いて調査され得る。たとえば、SATD調査の第1の段階において、ビデオエンコーダ20は、イントラ予測モードの事前に定義された部分集合からのイントラ予測角度の各々をSATDコストを用いて調査することができ、最良のN個のイントラ予測モードを決めることができる。この例では、Nはブロックサイズに応じた事前に定義された定数値である。その後、SATD調査の各々の残っている段階に対して、ビデオエンコーダ20は、予測角度の差分に関して、前の段階において決められた最良のN個のイントラ予測モードに近いイントラ予測角度だけを、SATDコストを用いて調査し、ビデオエンコーダ20は、次の段階のための最良のN個のイントラ予測モードを決める。
一例では、提案される65個の角度モードが適用されるとき、ビデオエンコーダ20は、イントラ予測モードのいずれがエンコーダ側でより効率的なコスト基準(たとえば、レートひずみ(R-D)コスト)を用いてさらに検査されるかを決めるために、2段階のSATD調査方式を適用する。第1の段階において、ビデオエンコーダ20は、平面モード、DCモード、および33個の角度モードを含む、HEVCにおいて定義される元の35個のイントラ予測モードのみを、SATDコストを用いて調査し、次いで最良のN個の(NはHEVC参照ソフトウェアにおいて使用されるものと同じであり得る)イントラ予測モードが決められる。第2の段階において、ビデオエンコーダ20はさらに、最良のN個の角度モードの直接の近隣である、すなわち直接隣り合う(角度モードインデックス±1)、イントラ角度モードのみを、SATDコストを用いて調査する。ビデオエンコーダ20は、最終的な裁量のN個のイントラ予測モードを、R-Dコストを用いてさらに調査すると決め得る。
したがって、いくつかの例では、ビデオエンコーダ20は、イントラ予測モードの第1の部分集合の各々に従って、ビデオデータのブロックを符号化するためのそれぞれのSATDコストを決定し得る。加えて、ビデオエンコーダ20は、イントラ予測モードの第1の部分集合の決定されたSATDコストに基づいて、イントラ予測モードの第2の部分集合を決定し得る。ビデオエンコーダ20は、イントラ予測モードの第2の部分集合の各々に従って、ビデオデータのブロックを符号化するためのそれぞれのSATDコストを決定し得る。さらに、ビデオエンコーダ20は、イントラ予測モードの第1の部分集合および第2の部分集合の決定されたSATDコストに基づいて、イントラ予測モードのうちの1つを選択し得る。ビデオエンコーダ20は、イントラ予測モードのうちの選択された1つに従ってビデオデータのブロックを符号化し得る。
この例では、イントラ予測モードの第1の部分集合の決定されたSATDコストに基づいてイントラ予測モードの第2の部分集合を決定することの一部として、ビデオエンコーダ20は、下からN番目までの決定されたSATDコストを有する、イントラ予測モードの第1の部分集合のうちのN個のイントラ予測モードを特定し得る。ビデオエンコーダ20は、イントラ予測モードの第2の部分集合に、特定されたN個のイントラ予測モードのイントラ予測角度に近いイントラ予測角度を有するイントラ予測モードを含め得る。イントラ予測モードの第2の部分集合に特定されたN個のイントラ予測モードのイントラ予測角度に近いイントラ予測角度を有するイントラ予測モードを含めることの一部として、ビデオエンコーダ20は、イントラ予測モードの第2の部分集合に、特定されたN個のイントラ予測モードのイントラ予測角度に隣り合うイントラ予測角度を有するイントラ予測モードを含め得る。
さらに、いくつかの例では、イントラ予測モードの第1の部分集合および第2の部分集合の決定されたSATDコストに基づいてイントラ予測モードの1つを選択することの一部として、ビデオエンコーダ20は、下からN番目までの決定されたSATDコストを有する、イントラ予測モードの第1の部分集合および第2の部分集合のうちのN個のイントラ予測モードを特定し得る。この例では、ビデオエンコーダ20は、特定されたN個のイントラ予測モードの各々のそれぞれのレートひずみコストを決定し得る。その上、この例では、ビデオエンコーダ20は、決定されたレートひずみコストに基づいて、特定されたN個のイントラ予測モードの1つを選択し得る。
SATD調査に関する本開示の例では、Nの値はビデオデータのブロックのブロックサイズに依存する。さらに、いくつかのそのような例では、イントラ予測モードの第1の部分集合は、平面イントラ予測モード、DCイントラ予測モード、および33個の角度予測モードを含み得る。
SATD調査に関する本開示のいくつかの例では、イントラ予測モードの第1の部分集合および第2の部分集合は、イントラ予測モードのK個の部分集合のうちの第1の部分集合および第2の部分集合を備え、Kは2以上である。そのような例では、イントラ予測モードのK個の部分集合の現在の各部分集合に対して、ビデオエンコーダ20は、イントラ予測モードの現在の部分集合の各イントラ予測モードに従って、ビデオデータのブロックを符号化するためのそれぞれのSATDコストを決定し得る。加えて、ビデオエンコーダ20は、イントラ予測モードの現在の部分集合の決定されたSATDコストに基づいて、イントラ予測モードのK個の部分集合の次の部分集合を決定し得る。
図6は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図6は説明のために提供され、本開示において広く例示され説明されるような技法の限定と見なされるべきでない。本開示の技法は、様々なコーディング規格または方法のいずれにも適用可能であり得る。
図6の例では、ビデオエンコーダ20は、予測処理ユニット100、ビデオデータメモリ101、残差生成ユニット102、変換処理ユニット104、量子化ユニット106、逆量子化ユニット108、逆変換処理ユニット110、再構築ユニット112、フィルタユニット114、復号ピクチャバッファ116、およびエントロピー符号化ユニット118を含む。予測処理ユニット100は、インター予測処理ユニット120およびイントラ予測処理ユニット126を含む。インター予測処理ユニット120は、動き推定(ME)ユニット122および動き補償(MC)ユニット124を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含み得る。
ビデオデータメモリ101は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ101に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ101および復号ピクチャバッファ116は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ101および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。
ビデオエンコーダ20は、ビデオデータを受信し得る。ビデオエンコーダ20は、ビデオデータのピクチャのスライスの中の各CTUを符号化し得る。CTUの各々は、ピクチャの、等しいサイズのルーマコーディングツリーブロック(CTB)、および対応するCTBと関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、4分木区分を実行して、CTUのCTBを次第に小さくなるブロックに分割し得る。より小さいブロックは、CUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUと関連付けられるCTBを4つの等しいサイズのサブブロックに区分することができ、サブブロックの1つまたは複数を4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
ビデオエンコーダ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、CU、およびCTUに対して左から右、上から下への符号化順序を仮定すると、隣接ブロックは、PUの予測ブロックの上、右上、左上、または左であってよい。イントラ予測処理ユニット126は、本明細書において説明されるように、様々な数のイントラ予測モード、たとえば、DC予測モード、平面予測モード、または対角/角度予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、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の予測ブロックのサイズおよび位置に基づいてもよく、基づかなくてもよい。
変換処理ユニット104は、1つまたは複数の変換をTUの変換ブロックに適用することによって、CUのTUごとに変換係数ブロックを生成し得る。変換処理ユニット104は、TUと関連付けられた変換ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に類似の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは変換係数ブロックとして扱われてよい。
量子化ユニット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は、CUと同じピクチャの中の他のPUに対してイントラ予測を実行するために、復号ピクチャバッファ116の中の再構築されたコーディングブロックを使用し得る。
エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受け取り得る。たとえば、エントロピー符号化ユニット118は、係数ブロックを量子化ユニット106から受け取ることができ、シンタックス要素を予測処理ユニット100から受け取ることができる。エントロピー符号化ユニット118は、エントロピー符号化されたデータを生成するために、1つまたは複数のエントロピー符号化動作をデータに対して実行し得る。たとえば、エントロピー符号化ユニット118は、コンテキスト適応型可変長コーディング(CAVLC)動作、CABAC動作、可変長-可変長(V2V)コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作を、データに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成された、エントロピー符号化されたデータを含むビットストリームを出力し得る。
ビデオエンコーダ20は、本開示において説明される技法のいずれかを実行するように構成されるビデオエンコーダの例である。本開示の1つまたは複数の技法によれば、ビデオエンコーダ20内の1つまたは複数のユニットは、ビデオ符号化プロセスの一部として本明細書において説明される技法を実行し得る。たとえば、イントラ予測処理ユニット126および/またはエントロピー符号化ユニット118は、ビデオ符号化プロセスの一部として本明細書において説明される技法を実行するように構成され得る。いくつかの例では、イントラ予測処理ユニット126は、イントラ予測モードおよび/もしくはイントラ予測のためのMPMを導出または選択するための本明細書において説明される技法、多数のMPMおよび/または角度モードを使用する技法、ならびに、Nタップのイントラ補間フィルタを適用するための技法を実行するように構成されることがあり、Nは2より大きい。イントラ予測処理ユニット126は、ブロックごとの複数のイントラ予測方向、たとえばブロックのサブブロックに対するそれぞれの方向を可能にするための本明細書において説明される技法を実行するように構成されることがあり、この技法は、複数のイントラ予測モードの追加のシグナリングを必要としないことがある。
イントラ予測処理ユニット126は、選択されたイントラ予測モードおよび/またはイントラ予測のためのMPMインデックスなどの、シンタックス情報をエントロピー符号化ユニット118に提供し得る。イントラ予測処理ユニット126および/またはエントロピー符号化ユニット118は、イントラ予測に関するシンタックス情報、たとえば、選択されたイントラ予測モードおよび/またはイントラ予測のためのMPMインデックスを、ビデオデコーダ30によって復号され得る符号化されたビデオビットストリームにおいて符号化またはシグナリングするための、本明細書において説明される技法を実施するように構成され得る。
図7は、本開示の技法を実施するように構成される例示的なビデオデコーダ30を示すブロック図である。図7は説明のために提供され、広く例示されるとともに本開示において説明されるような技法を限定するものではない。本開示の技法は、様々なコーディング規格または方法に適用可能であり得る。
図7の例では、ビデオデコーダ30は、エントロピー復号ユニット150、ビデオデータメモリ151、予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、フィルタユニット160、および復号ピクチャバッファ162を含む。予測処理ユニット152は、動き補償ユニット164およびイントラ予測処理ユニット166を含む。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
ビデオデータメモリ151は、ビデオデコーダ30の構成要素によって復号されるべき符号化されたビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ151に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータの有線ネットワーク通信もしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって、取得され得る。ビデオデータメモリ151は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶するコーディングピクチャバッファ(CPB)を形成し得る。復号ピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードにおいて、ビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ151および復号ピクチャバッファ162は、シンクロナスDRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗性RAM(MRAM)、抵抗性RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ151および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。
ビデオデータメモリ151によって形成されるコーディングピクチャバッファ(CPB)は、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受信および記憶し得る。エントロピー復号ユニット150は、ビデオデータメモリ151によって形成されるCPBからNALユニットを受け取り、NALユニットを構文解析してビットストリームからシンタックス要素を取得し得る。エントロピー復号ユニット150は、NALユニットの中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて、復号されたビデオデータを生成し得る。
ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、シンタックス要素をコーディングされたスライスNALユニットから抽出し、エントロピー復号し得る。コーディングされたスライスの各々は、スライスヘッダおよびスライスデータを含み得る。スライスヘッダは、スライスに関係するシンタックス要素を含み得る。
シンタックス要素をビットストリームから復号することに加えて、ビデオデコーダ30は、CUに対して復号動作を実行し得る。CUに対して復号動作を実行することによって、ビデオデコーダ30は、CUのコーディングブロックを再構築し得る。
CUに対して復号動作を実行することの一部として、逆量子化ユニット154は、CUのTUと関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化ユニット154は、逆量子化ユニット154が適用するべき量子化の程度と、同様に逆量子化の程度とを決定するために、TUのCUと関連付けられるQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスおよび圧縮されたシーケンスを表すために使用されるビット数の比が、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、採用されるエントロピーコーディングの方法に依存し得る。
逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUと関連付けられた残差ブロックを生成するために、1つまたは複数の逆変換を係数ブロックに適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を係数ブロックに適用し得る。
PUがイントラ予測を使用して符号化される場合、イントラ予測処理ユニット166は、イントラ予測を実行して、PUの予測ブロックを生成し得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に隣接するブロックの再構築されたサンプル値に基づいて、PUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのイントラ予測モードを決定し得る。
予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)および第2の参照ピクチャリスト(RefPicList1)を構築し得る。さらに、PUがインター予測を使用して符号化されている場合、エントロピー復号ユニット150は、PUの動き情報を取得し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUの1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUの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のルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックと関連付けられるブロッキングアーティファクトを低減し得る。ビデオデコーダ30は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックを復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、その後の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを提供し得る。たとえば、ビデオデコーダ30は、復号ピクチャバッファ162の中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測動作またはインター予測動作を実行し得る。このようにして、ビデオデコーダ30は、ビットストリームから有意ルーマ係数ブロックの変換係数レベルを抽出し、変換係数レベルを逆量子化し、変換係数レベルに変換を適用して変換ブロックを生成し、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成し、コーディングブロックを表示のために出力し得る。
ビデオデコーダ30は、本開示において説明される技法のいずれかを実行するように構成されるビデオデコーダの例である。本開示の1つまたは複数の技法によれば、ビデオデコーダ30内の1つまたは複数のユニットは、ビデオ復号プロセスの一部として本明細書において説明される技法を実行し得る。たとえば、イントラ予測処理ユニット166および/またはエントロピー復号ユニット150は、ビデオ復号プロセスの一部として本明細書において説明される技法を実行するように構成され得る。いくつかの例では、イントラ予測処理ユニット166は、イントラ予測モードおよび/もしくはイントラ予測のためのMPMを導出または選択するための本明細書において説明される技法、多数のMPMおよび/または角度モードを使用する技法、ならびに、Nタップのイントラ補間フィルタを適用するための技法を実行するように構成されることがあり、Nは2より大きい。イントラ予測処理ユニット166は、ブロックごとの複数のイントラ予測方向、たとえばブロックのサブブロックに対するそれぞれの方向を可能にするための本明細書において説明される技法を実行するように構成されることがあり、この技法は、複数のイントラ予測モードの追加のシグナリングを必要としないことがある。
イントラ予測処理ユニット166は、選択されたイントラ予測モードおよび/またはイントラ予測のためのMPMインデックスなどの、シンタックス情報をエントロピー復号ユニット150から受け取り得る。イントラ予測処理ユニット166および/またはエントロピー復号ユニット150は、イントラ予測に関するシンタックス情報、たとえば、選択されたイントラ予測モードおよび/またはイントラ予測のためのMPMインデックスを、符号化されたビデオビットストリームから復号するための、本明細書において説明される技法を実施するように構成され得る。
以下のサブセクションでは、本開示の特定の技法の例示的な実装形態が提供される。実際には、例の任意の部分の任意の組合せが、新しい例として使用され得る。例示的な実装形態は、JCTVC-N1003への編集の形式で示されている。以下では、JCTVC-N1003に追加されるテキストは、タグ<ins>および</ins>の間に示されており、「ins」は「insert(挿入)」の短縮である。JCTVC-N1003から削除されるテキストは、タグ<dlt>および</dlt>の間に示されており、「dlt」は「delete(削除)」の短縮である。
ビデオエンコーダ20およびビデオデコーダ30がPUのイントラ予測モードをシグナリングするための3つよりも多くのMPMを使用する、いくつかの例が上で説明された。いくつかのそのような例では、ビデオエンコーダ20およびビデオデコーダ30は、CABACコーディングを使用してMPMインデックスを符号化し復号する。CABAC符号化の一部として、ビデオエンコーダ20は、バイナリ化プロセスをMPMインデックスに適用してMPMインデックスをバイナリ符号に変換し、ビデオデコーダ30は、バイナリ符号を非バイナリ化してMPMインデックスを復元する。本開示の技法によれば、下のTable 9-32(表2)に示されるように、MPMインデックス(mpm_idx)は、切捨てライスバイナリ化プロセス(TR)を使用してバイナリ化され、入力パラメータcMaxは、MPMのより大きな値に対応するように2から5に変更される。JCTVC-N1003の9.3.3.2項は、切捨てライスバイナリ化プロセスの実装形態を説明する。
さらに、上で説明されたように、ビデオエンコーダ20およびビデオデコーダ30は、MPMインデックスの1つまたは複数のビンをコーディング(たとえば、CABACコーディング)するとき、コンテキストモデリングを使用し得る。JCTVC-N1003では、バイナリ化されたMPMインデックス(すなわち、mpm_idx)は、3つのビンからなる。しかしながら、本開示では、より多数のMPMを用いて、バイナリ化されたMPMインデックスは5つ以上のビンを含み得る。JCTVC-N1003の9.3.4.2.1項において規定されるように変数ctxIncがTable 9-37(表3)における対応するエントリによって規定され、2つ以上の値がbinIdxに対してTable 9-37(表3)において列挙されるとき、そのbinIdxに対するctxIncの割当てプロセスはさらに、括弧の中で与えられる項目において規定される。JCTVC-N1003の9.3.4.2.1項においてさらに記載されるように、ctxIncは、コーディングコンテキストのインデックスであるctxIdxの値を決定するために使用される。下のTable 9-37(表3)の編集されたバージョンにおいて示されるように、MPMインデックスの最初の3つのビンは、以下の追加された9.3.4.x.x項のコンテキストモデリング方法を使用して選択されたコーディングコンテキストを使用してコーディングされることがあり、MPMインデックスの残りのビンはバイパスコーディングを使用してコーディングされることがある。
<ins>9.3.3.x rem_intra_luma_pred_modeのバイナリ化プロセス
このプロセスへの入力は、シンタックス要素rem_intra_luma_pred_modeのバイナリ化に対する要求である。
このプロセスの出力は、シンタックス要素のバイナリ化である。
- rem_intra_luma_pred_modeが28に等しい場合、バイナリ化文字列は「111」である。
- それ以外の場合、バイナリ化は5つのビンを有する固定長符号である。
9.3.4.x.x シンタックス要素mpm_idxのためのctxIncの導出プロセス
このプロセスへの入力は、左の隣接ブロックのイントラモードcandIntraPredModeAおよび上の隣接ブロックのイントラモードcandIntraPredModeBである。
このプロセスの出力は変数ctxIncである。
変数csbfCtxが、現在の場所(xS, yS)、走査順序におけるシンタックス要素coded_sub_block_flagの2つの以前に復号されたビン、および変換ブロックサイズlog2TrafoSizeを使用して、次のように導出される。
- candIntraPredModeAがcandIntraPredModeBに等しいとき、ctxIncは次のように導出される
ctxInc=candIntraPredModeA>1?0:1
- それ以外の場合
ctxInc=(candIntraPredModeA && candIntraPredModeB)?2:3</ins>
本開示のいくつかの例によれば、3つよりも多くのMPMが定義される。以下のテキストは、6つのMPMを実装するためのJCTVC-N1003に対する例示的な変更を記述する。
8.4.2 ルーマイントラ予測モードの導出プロセス
このプロセスへの入力は、現在のピクチャの左上のルーマサンプルに対して相対的に現在のルーマ予測ブロックの左上のサンプルを指定するルーマ場所(xCb, yCb)、<ins>予測ブロックサイズnPbs</ins>である。
このプロセスにおいて、ルーマイントラ予測モードIntraPredModeY[xPb][yPb]が導出される。
Table 8-1(表4)は、イントラ予測モードの値および関連する名称を規定する。
0...34と標識されるIntraPredModeY[xPb][yPb]は、本開示の図8である図8-1に示されるような予測の方向を表す。
IntraPredModeY[xPb][yPb]は以下の順序付けられたステップによって導出される。
4. 隣接場所(xNbA, yNbA)および(xNbB, yNbB)はそれぞれ、(xPb-1, yPb)および(xPb, yPb-1)に等しく設定される。
5. AまたはBのいずれかにより置き換えられるXに対して、変数candIntraPredModeXは次のように導出される。
<ins>
- candIntraPredModeXがINTRA_DCとして初期化される。
- イントラモード使用のカウントを0として初期化する: cntIntraPredModeX[i]=0, i=0, 1, …, 34
- イントラモード使用の最大カウントを0として初期化する: cntMaxIntraPredModeX=0
- x=0..nPbS - 1に対して、以下が適用される。
- (xCurr, yCurr)=(X==A)?(xNbA+x, yNbA)?(xNbA, yNbA +x)
- 6.4.1項において規定されるようなz走査順序でのブロックのための可用性導出プロセスが、(xPb, yPb)に等しく設定された場所(xCurr, yCurr)および(xNbX, yNbX)に等しく設定された隣接場所(xNbY, yNbY)を入力として用いて呼び出され、出力はavailableXに割り当てられる。
- availableXがTRUEに等しく、CuPredMode[xNbX][yNbX]がMODE_INTRAに等しい場合、以下が適用される。
- cntIntraPredModeX[CuPredMode[ xCurr][ yCurr ]]++
- cntIntraPredModeX[CuPredMode[ xCurr][ yCurr ]]>cntMaxIntraPredModeXである場合、以下が適用される。
- cntMaxIntraPredModeX=cntIntraPredModeX[CuPredMode[xCurr][yCurr]];
- candIntraPredModeX=CuPredMode[xCurr][yCurr] </ins>
<dlt>
- 6.4.1項において規定されるようなz走査順序でのブロックのための可用性導出プロセスが、(xPb, yPb)に等しく設定された場所(xCurr, yCurr)および(xNbX, yNbX)に等しく設定された隣接場所(xNbY, yNbY)を入力として用いて呼び出され、出力はavailableXに割り当てられる。
- 候補イントラ予測モードcandIntraPredModeXは次のように導出される。
- availableXがFALSEに等しい場合、candIntraPredModeXはINTRA_DCに等しく設定される。
- そうではなく、CuPredMode[xNbX][yNbX]がMODE_INTRAに等しくない場合、またはpcm_flag[xNbX][yNbX]が1に等しい場合、candIntraPredModeXはINTRA_DCに等しく設定され、
- そうではなく、XがBに等しくyPb-1が((yPb>>CtbLog2SizeY)<<CtbLog2SizeY)より小さい場合、candIntraPredModeBはINTRA_DCに等しく設定される。
- それ以外の場合、candIntraPredModeXはIntraPredModeY[xNbX][yNbX]に等しく設定される。</dlt>
6. x=0...<dlt>2</dlt><ins>5</ins>であるcandModeList[x]は次のように導出される。
- <ins>idxPlanarが0として設定され、idxDCが1として設定される;</ins>
- candIntraPredModeBがcandIntraPredModeAに等しい場合、以下が適用される。
- candIntraPredModeAが2より小さい(すなわち、INTRA_PLANARまたはINTRA_DCに等しい)場合、x=0...<dlt>2</dlt><ins>5</ins>であるcandModeList[x]は次のように導出される。
candModeList[0]=INTRA_PLANAR (8-15)
candModeList[1]=INTRA_DC (8-16)
candModeList[2]=INTRA_ANGULAR26 (8-17)
<ins>candModeList[3]=INTRA_ANGULAR10 (8-17)
candModeList[4]=INTRA_ANGULAR2 (8-17)
candModeList[5]=INTRA_ANGULAR18 (8-17)</ins>
- それ以外の場合、x=0...5であるcandModeList[x]は次のように導出される。
candModeList[0]=candIntraPredModeA (8-18)
<dlt>candModeList[2]=2+((candIntraPredModeA+29)%32) (8-19)
candModeList[2]=2+((candIntraPredModeA-2+1)%32) (8-20)</dlt>
<ins>candModeList[1]=INTRA_PLANAR (8-20)
candModeList[2]=2+((candIntraPredModeA-1)%32) (8-19)
candModeList[3]=2+((candIntraPredModeA+29)%32) (8-20)
candModeList[4]=2+((candModeList[2]-1)%32) (8-20)
candModeList[5]=INTRA_DC (8-20)
idxPlanar=1
idxDC=5</ins>
- それ以外の場合(candIntraPredModeBがcandIntraPredModeAに等しくない)、以下が適用される。
- candModeList[0]およびcandModeList[1]は次のように導出される。
candModeList[0]=candIntraPredModeA (8-21)
candModeList[1]=candIntraPredModeB (8-22)
- candModeList[0]とcandModeList[1]のいずれもがINTRA_PLANARに等しくない場合、candModeList[2]はINTRA_PLANARに等しく設定され、<ins>以下が適用される。
- maxDir=max(candModeList[0], candModeList[1] )
- minDir=min(candModeList[0], candModeList[1] )
- idxPlanar=2
- candModeList[0]とcandModeList[1]のいずれかがINTRA_DCに等しい場合、以下が適用される。
candModeList[3]=2+((maxDir+29)%32) (8-21)
candModeList[4]=2+((maxDir-1)%32) (8-22)
candModeList[5]=2+((candModeList[4]-1)%32) (8-22)
idxDC=(candModeList[0]==INTRA_DC)?0:1
- それ以外の場合、
candModeList[3]=INTRA_DC (8-21)
candModeList[4]=2+((maxDir-1)%32) (8-22)
- candModeList[4]がminDirに等しい場合、candModeList[4]++
candModeList[5]=2+((candModeList[4]+29)%32) (8-22)
- candModeList[5]がmaxDirに等しい場合、candModeList[5]--
- candModeList[5]がcandModeList[4]に等しい場合、candModeList[5]=minDir+1
idxDC=3</ins>
- そうではなく、candModeList[0]とcandModeList[1]のいずれもがINTRA_DCに等しくない場合、candModeList[2]はINTRA_DCに等しく設定され、<ins>以下が適用される。
candModeList[3]=2+((candIntraPredModeA+29)%32)
candModeList[4]=2+((candIntraPredModeA-1)%32)
candModeList[5]=2+((candModeList[4]-1)%32)
idxPlanar=(candModeList[0]==INTRA_PLANAR)?0:1
idxDC=2</ins>
- それ以外の場合、candModeList[2]はINTRA_ANGULAR26に等しく設定され、以下が適用される。
<ins>candModeList[3]=INTRA_ANGULAR10
candModeList[4]=INTRA_ANGULAR2
candModeList[5]=INTRA_ANGULAR18
idxPlanar=(candModeList[0]==INTRA_PLANAR)?0:1
idxDC=1-idxPlanar</ins>
7. IntraPredModeY[xPb][yPb]は以下の手順を適用することによって導出される。
- prev_intra_luma_pred_flag[xPb][yPb]が1に等しい場合、IntraPredModeY[xPb][yPb]はcandModeList[mpm_idx]に等しく設定される。
- それ以外の場合、IntraPredModeY[xPb][yPb]は以下の順序付けられたステップを適用することによって導出される。
1) x=0...<dlt>2</dlt><ins>5</ins>であるアレイcandModeList[x]は以下の順序付けられたステップとして修正される。<ins>
i. candModeList[idxPlanar]=candModeList[0]
ii. candModeList[idxDC]=candModeList[1]
iii. candModeList[0]=INTRA_PLANAR
iv. candModeList[1]=INTRA_DC</ins>
v. candModeList[<dlt>0</dlt><ins>2</ins>]がcandModeList[ dlt>1</dlt><ins>3</ins>]より大きいとき、両方の値が次のように交換される。
(candModeList[<dlt>0</dlt><ins>2</ins>], candModeList[<dlt>1</dlt><ins>3</ins>])=Swap(candModeList[<dlt>0</dlt><ins>2</ins>], candModeList[<dlt>1</dlt><ins>3</ins>]) (8-23)
vi. candModeList[<dlt>0</dlt><ins>2</ins>]がcandModeList[<dlt>2</dlt><ins>4</ins>]より大きいとき、両方の値が次のように交換される。
(candModeList[<dlt>0</dlt><ins>2</ins>], candModeList[<dlt>2</dlt><ins>4</ins>])=Swap(candModeList[<dlt>0</dlt><ins>2</ins>], candModeList[<dlt>2</dlt><ins>4</ins>]) (8-24)
vii. <ins>candModeList[2]がcandModeList[5]より大きいとき、両方の値が次のように交換される。
(candModeList[2], candModeList[5])=Swap(candModeList[2], candModeList[5])</ins>
viii. candModeList[<dlt>1</dlt><ins>3</ins>]がcandModeList[ dlt>2</dlt><ins>4</ins>]より大きいとき、両方の値が次のように交換される。
(candModeList[<dlt>1</dlt><ins>3</ins>], candModeList[<dlt>2</dlt><ins>4</ins>])=Swap(candModeList[<dlt>1</dlt><ins>3</ins>], candModeList[<dlt>2</dlt><ins>4</ins>]) (8-25)
ix. <ins>candModeList[3]がcandModeList[5]より大きいとき、両方の値が次のように交換される。
(candModeList[3], candModeList[5])=Swap(candModeList[3], candModeList[5])
candModeList[4]がcandModeList[5]より大きいとき、両方の値が次のように交換される。
(candModeList[4], candModeList[5])=Swap(candModeList[4], candModeList[5])</ins>
2) IntraPredModeY[xPb][yPb]は以下の順序付けられたステップによって導出される。
i. IntraPredModeY[xPb][yPb]がrem_intra_luma_pred_mode[xPb][yPb]に等しく設定される。
両端を含めて0から<dlt>2</dlt><ins>5</ins>に等しいiに対して、IntraPredModeY[xPb][yPb]がcandModeList[i]以上であるとき、IntraPredModeY[xPb][yPb]の値は1だけインクリメントされる。
上で示されたJCTVC-N1003の8.4.2項の例示的な適応されたバージョンでは、現在のPUのMPMの導出プロセスは、左の隣接列の代表的なイントラ予測モード(candIntraPredModeA)および上の隣接行の代表的なイントラ予測モード(candIntraPredModeB)のための導出プロセスを含む。この例では、左の隣接列はx=x...nPbsに対するサンプル(xNbA, yNbA+x)に対応し、上の隣接行はx=0...nPbsに対するサンプル(xNbA+x, yNbA)に対応し、ここでnPbsは現在のPUの予測ブロックの幅および高さである。
さらに、上で示されたJCTVC-N1003の8.4.2項の例示的な適応されたバージョンでは、candIntraPredModeAがcandIntraPredModeBと同じであり、candIntraPredModeAが平面またはDCである場合、MPM候補のリスト(すなわち、candModeList)は常に、平面イントラ予測モード、DCイントラ予測モード、垂直イントラ予測モード(すなわち、INTRA_ANGULAR26)、水平イントラ予測モード(すなわち、INTRA_ANGULAR10)、および対角イントラ予測モード(すなわち、INTRA_ANGULAR18)を含む。しかしながら、この例では、candIntraPredModeAが平面でもDCでもない場合、MPM候補のリストは、candIntraPredModeA、平面イントラ予測モード、candIntraPredModeAに最も近い3つの角度イントラ予測モード、およびDCイントラ予測モードを含む。candIntraPredModeAに最も近い3つの角度イントラ予測モードは、次のように計算される。
2+((candIntraPredModeA-1)%32)、
2+((candIntraPredModeA+29)%32)、および
2+((candModeList[2]-1)%32)
上の式において、%は剰余演算を示す。
同様に、上で示されたJCTVC-N1003の8.4.2項の例示的な適応されたバージョンでは、candIntraPredModeAがcandIntraPredModeBに等しくない場合、ビデオコーダは、剰余演算を含むJCTVC-N1003の8.4.2項の例示的な適応されたバージョンに示される式を使用して、candIntraPredModeAとcandIntraPredModeBのいずれかに最も近いものとして決定された他の角度イントラ予測モードを、MPM候補のリストに含め得る。
上で説明されたように、本開示のいくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、33個よりも多くの角度イントラ予測モードを使用し得る。以下のテキストは、65個の角度イントラ予測モードを実装するためのJCTVC-N1003に対する例示的な変更を記述する。
8.4.4.2.6 INTRA_ANGULAR2...INTRA_ANGULAR34の範囲にあるイントラ予測モードの規定
このプロセスへの入力は以下の通りである。
- イントラ予測モードpredModeIntra、
- 隣接サンプルp[x][y]、ただしx=-1、y=-1..nTbS*2-1、かつx=0..nTbS*2-1、y=-1、
- 変換ブロックサイズを規定する変数nTbS、
- 現在のブロックの色成分を規定する変数cIdx。
このプロセスの出力は、予測されるサンプルpredSamples[x][y]であり、ただしx, y=0..nTbs-1である。
本開示の図9である図8-2は、33個すべてのイントラ角度を示しており、Table 8-4(表5)は、predModeIntraと角度パラメータintraPredAngleとの間のマッピングテーブルを規定する。
Table 8-5(表7)はさらに、predModeIntraと逆角度パラメータinvAngleとの間のマッピングテーブルを規定する。
x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
- predModeIntraが18以上である場合、以下の順序付けられたステップが適用される。
1. 参照サンプルアレイref[x]が次のように規定される。
- 以下のことが適用される。
ref[x]=p[-1+x][-1]、ただしx=0..nTbS (8-47)
- intraPredAngleが0より小さい場合、主参照サンプルアレイは次のように延長される。
- (nTbS*intraPredAngle)>>5が-1より小さいとき、
ref[x]=p[-1][-1+((x*invAngle+128)>>8)]、
ただしx=-1..(nTbS*intraPredAngle)>>5 (8-48)
- それ以外の場合、
ref[x]=p[-1+x][-1]、ただしx=nTbS+1..2*nTbS (8-49)
2. x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
a. インデックス変数iIdxおよび乗算係数iFactが次のように導出される。
iIdx=((y+1)*intraPredAngle)>>5 (8-50)
iFact=((y+1)*intraPredAngle)&31 (8-51)
b. iFactの値に応じて、以下が適用される。
- iFactが0に等しくない場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=
((32-iFact)*ref[x+iIdx+1]+iFact*ref[x+iIdx+2]+16)>>5 (8-52)
- それ以外の場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=ref[x+Idx+1] (8-53)
c. predModeIntraが26(垂直)に等しく、cIdxが0に等しくnTbsが32より小さいとき、以下のフィルタリングが適用され、ただしx=0、y=0..nTbS-1であり、
predSamples[x][y]=Clip1Y(p[x][-1]+((p[-1][y]-p[-1][-1])>>1)) (8-54)
- それ以外(predModeIntraが18未満である)の場合、以下の順序付けられたステップが適用される。
1. 参照サンプルアレイref[x]が次のように規定される。
- 以下のことが適用される。
ref[x]=p[-1][-1+x]、ただしx=0..nTbS (8-55)
- intraPredAngleが0より小さい場合、主参照サンプルアレイは次のように延長される。
- (nTbS*intraPredAngle)>>5が-1より小さいとき、
ref[x]=p[-1+((x*invAngle+128)>>8)][-1]、
ただしx=-1..(nTbS*intraPredAngle)>>5 (8-56)
- それ以外の場合、
ref[x]=p[-1][-1+x]、ただしx=nTbS+1..2*nTbS (8-57)
2. x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
a. インデックス変数iIdxおよび乗算係数iFactが次のように導出される。
iIdx=((x+1)*intraPredAngle)>>5 (8-58)
iFact=((x+1)*intraPredAngle)&31 (8-59)
b. iFactの値に応じて、以下が適用される。
- iFactが0に等しくない場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=
((32-iFact)*ref[y+iIdx+1]+iFact*ref[y+iIdx+2]+16)>>5 (8-60)
- それ以外の場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=ref[y+Idx+1] (8-61)
c. predModeIntraが10(水平)に等しく、cIdxが0に等しくnTbsが32より小さいとき、以下のフィルタリングが適用され、ただしx=0..nTbS-1、y=0であり、
predSamples[x][y]=Clip1Y(p[-1][y]+((p[x][-1]-p[-1][-1])>>1)) (8-62)
Table 8-5(表8)はさらに、predModeIntraと逆角度パラメータinvAngleとの間のマッピングテーブルを規定する。
x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
- predModeIntraが18以上である場合、以下の順序付けられたステップが適用される。
......
7.4.9.11 残差コーディングのセマンティクス
イントラ予測のために、様々な走査順序が使用される。変数scanIdxは、どの走査順序が使用されるかを指定し、ここで0に等しいscanIdxは右上への対角方向の走査順序を指定し、1に等しいscanIdxは水平方向の走査順序を指定し、2に等しいscanIdxは垂直方向の走査順序を指定する。scanIdxの値は次のように導出される。
- CuPredMode[x0][y0]がMODE_INTRAに等しい場合、以下の条件のうちの1つまたは複数が真である。
- log2TrafoSizeが2に等しい。
- log2TrafoSizeが3に等しく、cIdxが0に等しい。
predModeIntraが次のように導出される。
- cIdxが0に等しい場合、predModeIntraはIntraPredModeY[x0][y0]に等しく設定される。
- それ以外の場合、predModeIntraはIntraPredModeCに等しく設定される。
scanIdxが次のように導出される。
- predModeIntraが両端を含めて<dlt>6</dlt><ins>10</ins>から<dlt>14</dlt><ins>26</ins>の範囲にある場合、scanIdxは2に等しく設定される。
- そうではなく、predModeIntraが両端を含めて<dlt>22</dlt><ins>42</ins>から<dlt>30</dlt><ins>58</ins>の範囲にある場合、scanIdxは1に等しく設定される。
- それ以外の場合、scanIdxは0に等しく設定される。
- それ以外の場合、scanIdxは0に等しく設定される。
8.4.4.2.3 隣接サンプルのフィルタリングプロセス
このプロセスへの入力は以下の通りである。
- 隣接サンプルp[x][y]、ただしx=-1、y=-1..nTbS*2-1、かつx=0..nTbS*2-1、y=-1、
- 変換ブロックサイズを規定する変数nTbS。
- このプロセスの出力はフィルタリングされたサンプルpF[x][y]であり、ただしx=-1、y=-1..nTbS*2-1、かつx=0..nTbS*2-1、y=-1である。
変数filterFlagは、次のように導出される。
- 以下の条件のうちの1つまたは複数が真であれば、filterFlagは0に等しく設定される。
- predModeIntraがINTRA_DCに等しい。
- nTbSが4に等しい。
- それ以外の場合、以下が適用される。
- 変数minDistVerHorがMin(Abs(predModeIntra-26), Abs(predModeIntra-10))に等しく設定される。
- 変数intraHorVerDistThres[nTbs]がTable 8-3(表9)において規定される。
- 変数filterFlagは、次のように導出される。
- minDistVerHorがintraHorVerDistThres[nTbS]より大きい場合、filterFlagは1に等しく設定される。
- それ以外の場合、filterFlagは0に等しく設定される。
7.4.9.11 残差コーディングのセマンティクス
イントラ予測のために、様々な走査順序が使用される。変数scanIdxは、どの走査順序が使用されるかを指定し、ここで0に等しいscanIdxは右上への対角方向の走査順序を指定し、1に等しいscanIdxは水平方向の走査順序を指定し、2に等しいscanIdxは垂直方向の走査順序を指定する。scanIdxの値は次のように導出される。
- CuPredMode[x0][y0]がMODE_INTRAに等しい場合、以下の条件のうちの1つまたは複数が真である。
- log2TrafoSizeが2に等しい。
- log2TrafoSizeが3に等しく、cIdxが0に等しい。
predModeIntraが次のように導出される。
- cIdxが0に等しい場合、predModeIntraはIntraPredModeY[x0][y0]に等しく設定される。
- それ以外の場合、predModeIntraはIntraPredModeCに等しく設定される。
scanIdxが次のように導出される。
- predModeIntraが両端を含めて<dlt>6</dlt><ins>10</ins>から<dlt>14</dlt><ins>26</ins>の範囲にある場合、scanIdxは2に等しく設定される。
- そうではなく、predModeIntraが両端を含めて<dlt>22</dlt><ins>42</ins>から<dlt>30</dlt><ins>58</ins>の範囲にある場合、scanIdxは1に等しく設定される。
- それ以外の場合、scanIdxは0に等しく設定される。
- それ以外の場合、scanIdxは0に等しく設定される。
8.4.4.2.3 隣接サンプルのフィルタリングプロセス
このプロセスへの入力は以下の通りである。
- 隣接サンプルp[x][y]、ただしx=-1、y=-1..nTbS*2-1、かつx=0..nTbS*2-1、y=-1、
- 変換ブロックサイズを規定する変数nTbS。
- このプロセスの出力はフィルタリングされたサンプルpF[x][y]であり、ただしx=-1、y=-1..nTbS*2-1、かつx=0..nTbS*2-1、y=-1である。
変数filterFlagは、次のように導出される。
- 以下の条件のうちの1つまたは複数が真であれば、filterFlagは0に等しく設定される。
- predModeIntraがINTRA_DCに等しい。
- nTbSが4に等しい。
- それ以外の場合、以下が適用される。
- 変数minDistVerHorがMin(Abs(predModeIntra-26), Abs(predModeIntra-10))に等しく設定される。
- 変数intraHorVerDistThres[nTbs]がTable 8-3(表9)において規定される。
- 変数filterFlagは、次のように導出される。
- minDistVerHorがintraHorVerDistThres[nTbS]より大きい場合、filterFlagは1に等しく設定される。
- それ以外の場合、filterFlagは0に等しく設定される。
Table 8-3 - 様々な変換ブロックサイズに対するintraHorVerDistThres[nTbS]の規定
filterFlagが1に等しいとき、以下が適用される。
...
上で説明されたように、本開示のいくつかの技法によれば、ビデオエンコーダ20およびビデオデコーダ30は、Nタップのイントラ補間フィルタを適用し得る。以下のテキストは、4タップのイントラ補間フィルタの適用を実装するためのJCTVC-N1003に対する例示的な変更を記述する。
<ins>x.x.x イントラ補間フィルタ係数初期化プロセス</ins>
このプロセスの出力は、アレイfilterCubic[sFrac][pos]である。sFracのアレイインデックスは0から31にわたる小数位置を指定し、posはpos番目のサンプルのフィルタ係数を指定する。アレイfilterCubicおよびfilterGaussianが次のように導出される。
<ins>filterCubic[32][4]={
{
{ 0, 256, 0, 0 }, // 0
{ -3, 252, 8, -1 }, // 1
{ -5, 247, 17, -3 }, // 2
{ -7, 242, 25, -4 }, // 3
{ -9, 236, 34, -5 }, // 4
{ -10, 230, 43, -7 }, // 5
{ -12, 224, 52, -8 }, // 6
{ -13, 217, 61, -9 }, // 7
{ -14, 210, 70, -10 }, // 8
{ -15, 203, 79, -11 }, // 9
{ -16, 195, 89, -12 }, // 10
{ -16, 187, 98, -13 }, // 11
{ -16, 179, 107, -14 }, // 12
{ -16, 170, 116, -14 }, // 13
{ -17, 162, 126, -15 }, // 14
{ -16, 153, 135, -16 }, // 15
{ -16, 144, 144, -16 }, // 16
},
};
sigma=0.9
for(i=0; i<17; i++)
{
for(c=0; c<4; c++ )
{
filterGaussian [b][i][c]=(256.0*exp(-((c-delta)/sigma)2)/sum+0.5);
}
}
for(i=17; i<32; i++)
{
for(c=0; c<4; c++ )
{
filterCubic[b][i][c]=filterCubic[b][32-i][3-c];
filterGaussian[b][i][c]=filterGaussian[b][32-i][3-c];
}
}
</ins>
8.4.4.2.6 INTRA_ANGULAR2...INTRA_ANGULAR34の範囲にあるイントラ予測モードの規定
このプロセスへの入力は以下の通りである。
- イントラ予測モードpredModeIntra、
- 隣接サンプルp[x][y]、ただしx=-1、y=-1..nTbS*2-1、かつx=0..nTbS*2-1、y=-1、
- 変換ブロックサイズを規定する変数nTbS、
- 現在のブロックの色成分を規定する変数cIdx。
このプロセスの出力は、予測されるサンプルpredSamples[x][y]であり、ただしx, y=0..nTbs-1である。
...
x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
- predModeIntraが18以上である場合、以下の順序付けられたステップが適用される。
3. 参照サンプルアレイref[x]が次のように規定される。
- 以下のことが適用される。
ref[x]=p[-1+x][-1]、ただしx=0..nTbS (8-47)
- intraPredAngleが0より小さい場合、主参照サンプルアレイは次のように延長される。
- (nTbS*intraPredAngle)>>5が-1より小さいとき、
ref[x]=p[-1][-1+((x*invAngle+128)>>8)]、
ただしx=-1..(nTbS*intraPredAngle)>>5 (8-48)
- それ以外の場合、
ref[x]=p[-1+x][-1]、ただしx=nTbS+1..2*nTbS (8-49)
4. x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
a. インデックス変数iIdxおよび乗算係数iFactが次のように導出される。
iIdx=((y+1)*intraPredAngle)>>5 (8-50)
iFact=((y+1)*intraPredAngle)&31 (8-51)
b. iFactの値に応じて、以下が適用される。
- iFactが0に等しくない場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
</dlt>predSamples[x][y]=
((32-iFact)*ref[x+iIdx+1]+iFact*ref[x+iIdx+2]+16)>>5 (8-52)</dlt>
<ins>p=0,...,3に対して、pF[p]=(cIdx==0&&nTbS<=8)?filterCubic[iFact][p]:filterGaussian[iFact][p]
P[1]=ref[x+iIdx+1]
P[2]=ref[x+iIdx2]
P[0]=(x==0)?ref[x+iIdx+1]:ref[x+iIdx]
P[3]=(x==nTbS-1)?ref[x+iIdx2]:ref[x+iIdx+3]
predSamples[x][y]=
(pF[0]*P[0]+pF[1]*P[1]+pF[2]*P[2]+pF[3]*P[3]+128)>>8 (8-52)</ins>
- それ以外の場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=ref[x+Idx+1] (8-53)
c. predModeIntraが26(垂直)に等しく、cIdxが0に等しくnTbsが32より小さいとき、以下のフィルタリングが適用され、ただしx=0、y=0..nTbS-1であり、
predSamples[x][y]=Clip1Y(p[x][-1]+((p[-1][y]-p[-1][-1])>>1)) (8-54)
- それ以外(predModeIntraが18未満である)の場合、以下の順序付けられたステップが適用される。
3. 参照サンプルアレイref[x]が次のように規定される。
- 以下のことが適用される。
ref[x]=p[-1][-1+x]、ただしx=0..nTbS (8-55)
- intraPredAngleが0より小さい場合、主参照サンプルアレイは次のように延長される。
- (nTbS*intraPredAngle)>>5が-1より小さいとき、
ref[x]=p[-1+((x*invAngle+128)>>8)][-1]、
ただしx=-1..(nTbS*intraPredAngle)>>5 (8-56)
- それ以外の場合、
ref[x]=p[-1][-1+x]、ただしx=nTbS+1..2*nTbS (8-57)
4. x, y=0..nTbs-1である予測サンプルpredSamples[x][y]の値は次のように導出される。
d. インデックス変数iIdxおよび乗算係数iFactが次のように導出される。
iIdx=((x+1)*intraPredAngle)>>5 (8-58)
iFact=((x+1)*intraPredAngle)&31 (8-59)
e. iFactの値に応じて、以下が適用される。
- iFactが0に等しくない場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=
((32-iFact)*ref[y+iIdx+1]+iFact*ref[y+iIdx+2]+16)>>5 (8-60)
- それ以外の場合、予測サンプルpredSamples[x][y]の値は次のように導出される。
predSamples[x][y]=ref[y+Idx+1] (8-61)
f. predModeIntraが10(水平)に等しく、cIdxが0に等しくnTbsが32より小さいとき、以下のフィルタリングが適用され、ただしx=0..nTbS-1、y=0であり、
predSamples[x][y]=Clip1Y(p[-1][y]+((p[x][-1]-p[-1][-1])>>1)) (8-62)
図10は、本開示の技法によるビデオデータを符号化する方法を示すフローチャートである。図10は、汎用ビデオエンコーダに関して説明される。汎用ビデオエンコーダは、たとえばビデオエンコーダ20に相当し得るが、本開示の技法はいずれの特定のタイプのビデオエンコーダにも限定されない。ビデオエンコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(200)。一例では、Mは3より大きいことがある。ビデオエンコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化する(202)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。MPMインデックスまたは非MPMインデックスのうちの示されるものがMPMインデックスであることに基づいて、ビデオエンコーダは、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、1つまたは複数の隣接ブロックを復号するために使用されるイントラ予測モードに基づいて、コンテキストモデリングされたビンのコンテキストインデックスを選択する(204)。ビデオエンコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化する(206)。
図11は、本開示の技法によるビデオデータを復号する方法を示すフローチャートである。図11は、汎用ビデオデコーダに関して説明される。汎用ビデオデコーダは、たとえばビデオデコーダ30に相当し得るが、本開示の技法はいずれの特定のタイプのビデオデコーダにも限定されない。ビデオデコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(220)。一例では、Mは3より大きいことがある。ビデオデコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化する(222)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。MPMインデックスまたは非MPMインデックスのうちの示されるものがMPMインデックスであることに基づいて、ビデオデコーダは、MPMインデックスの1つまたは複数のコンテキストモデリングされたビンの各々に対して、1つまたは複数の隣接ブロックを復号するために使用されるイントラ予測モードに基づいて、コンテキストモデリングされたビンのコンテキストインデックスを選択する(224)。ビデオデコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築する(226)。
図12は、本開示の技法によるビデオデータを符号化する方法を示すフローチャートである。図12は、汎用ビデオエンコーダに関して説明される。汎用ビデオエンコーダは、たとえばビデオエンコーダ20に相当し得るが、本開示の技法はいずれの特定のタイプのビデオエンコーダにも限定されない。ビデオエンコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(300)。一例では、Mは3より大きいことがあり、MPMは、左の隣接列のためのMPMおよび上の隣接行のためのMPMを含むことがある。一例では、M個のMPMは、(i)左の隣接列に対する代表的なイントラ予測モードを定義して、左の隣接列に対するMPMとして左の隣接列に対する代表的なイントラ予測モードを使用すること(302)、または、上の隣接行に対する代表的なイントラ予測モードを定義して、上の隣接行に対するMPMとして上の隣接行に対する代表的なイントラ予測モードを使用すること(304)のうちの少なくとも1つによって導出され得る。
ビデオエンコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化し得る(306)。加えて、ビデオエンコーダは、MPMインデックスまたは非MPMインデックスのうちの示されるものを符号化し得る(308)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。ビデオエンコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化し得る(310)。
図13は、本開示の技法によるビデオデータを復号する方法を示すフローチャートである。図13は、汎用ビデオデコーダに関して説明される。汎用ビデオデコーダは、たとえばビデオデコーダ30に相当し得るが、本開示の技法はいずれの特定のタイプのビデオデコーダにも限定されない。ビデオデコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(350)。一例では、Mは3より大きいことがあり、MPMは、左の隣接列のためのMPMおよび上の隣接行のためのMPMを含むことがある。M個の最確モードは、(i)左の隣接列に対する代表的なイントラ予測モードを定義して、左の隣接列に対するMPMとして左の隣接列に対する代表的なイントラ予測モードを使用すること(352)、または、(ii)上の隣接行に対する代表的なイントラ予測モードを定義して、上の隣接行に対するMPMとして上の隣接行に対する代表的なイントラ予測モードを使用すること(354)のうちの少なくとも1つによって導出され得る。
ビデオデコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号し得る(356)。加えて、ビデオデコーダは、MPMインデックスまたは非MPMインデックスのうちの示されるものを復号し得る(358)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。ビデオデコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを復号し得る(360)。
図14は、本開示の技法によるビデオデータを符号化する方法を示すフローチャートである。図14は、汎用ビデオエンコーダに関して説明される。汎用ビデオエンコーダは、たとえばビデオエンコーダ20に相当し得るが、本開示の技法はいずれの特定のタイプのビデオエンコーダにも限定されない。ビデオエンコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(400)。一例では、Mは3より大きいことがある。ビデオエンコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化する(402)。図12の例では、MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。さらに、非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。選択されたイントラ予測モードを示すMPMに基づいて、ビデオエンコーダは非MPMインデックスを符号化する(404)。図14の例では、非MPMインデックスは、非MPMインデックスがある基準を満たす場合には
ビットより短い符号語としてビットストリームにおいて符号化され、それ以外の場合には
ビットを有する固定長符号としてビットストリームにおいて符号化される。図14の例では、全体でN個の非MPMインデックスの利用可能な値がある。ビデオエンコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化する(406)。
図15は、本開示の技法によるビデオデータを復号する方法を示すフローチャートである。図15は、汎用ビデオデコーダに関して説明される。汎用ビデオデコーダは、たとえばビデオデコーダ30に相当し得るが、本開示の技法はいずれの特定のタイプのビデオデコーダにも限定されない。ビデオデコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(450)。一例では、Mは3より大きいことがある。ビデオデコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号する(452)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。選択されたイントラ予測モードを示すMPMに基づいて、ビデオデコーダは非MPMインデックスを復号する(454)。図15の例では、非MPMインデックスは、非MPMインデックスがある基準を満たす場合には
ビットより短い符号語としてビットストリームにおいて符号化され、それ以外の場合には
ビットを有する固定長符号としてビットストリームにおいて符号化される。図15の例では、全体でN個の非MPMインデックスの利用可能な値があり得る。さらに、図15の例では、ビデオデコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築する(456)。
図16は、本開示の技法によるビデオデータを符号化する方法を示すフローチャートである。図16は、汎用ビデオエンコーダに関して説明される。汎用ビデオエンコーダは、たとえばビデオエンコーダ20に相当し得るが、本開示の技法はいずれの特定のタイプのビデオエンコーダにも限定されない。ビデオエンコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(600)。図16の例では、Mは3より大きい。ビデオエンコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を符号化する(602)。ビデオエンコーダは、MPMインデックスまたは非MPMインデックスのうちの示されるものを符号化する(604)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す。ビデオエンコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化する(606)。
図17は、本開示の技法によるビデオデータを復号する方法を示すフローチャートである。図17は、汎用ビデオデコーダに関して説明される。汎用ビデオデコーダは、たとえばビデオデコーダ30に相当し得るが、本開示の技法はいずれの特定のタイプのビデオデコーダにも限定されない。ビデオデコーダは、複数のイントラ予測モードの中から、ビデオデータのブロックのイントラ予測のためのM個のMPMを導出する(650)。図17の例では、Mは3より大きい。ビデオデコーダは、ビデオデータのブロックのイントラ予測のための複数のイントラ予測モードのうちの選択されたイントラ予測モードを示すために、MPMインデックスが使用されるか非MPMインデックスが使用されるかを示すシンタックス要素を復号する(652)。ビデオデコーダは、MPMインデックスまたは非MPMインデックスのうちの示されるものを復号する(654)。MPMインデックスは、M個のMPMのうちのいずれが選択されたイントラ予測モードであるかを示す。非MPMインデックスは、M個のMPM以外の複数のイントラ予測モードのうちのいずれが選択されたイントラ予測モードであるかを示す(654)。ビデオデコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築する(656)。
図18は、本開示の技法によるビデオデータを符号化する方法を示すフローチャートである。図18は、汎用ビデオエンコーダに関して説明される。汎用ビデオエンコーダは、たとえばビデオエンコーダ20に相当し得るが、本開示の技法はいずれの特定のタイプのビデオエンコーダにも限定されない。ビデオエンコーダは、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報を符号化する(700)。一例では、複数のイントラ予測モードは、33個よりも多くの角度イントラ予測モードを含み得る。角度イントラ予測モードは、補間が1/32ペル精度で実行されるように定義され得る。ビデオエンコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを符号化する(702)。
図19は、本開示の技法によるビデオデータを復号する方法を示すフローチャートである。図19は、汎用ビデオデコーダに関して説明される。汎用ビデオデコーダは、たとえばビデオデコーダ30に相当し得るが、本開示の技法はいずれの特定のタイプのビデオデコーダにも限定されない。ビデオデコーダは、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報を復号する(750)。一例では、複数のイントラ予測モードは33個よりも多くの角度イントラ予測モードを含むことがあり、角度イントラ予測モードは補間が1/32ペル精度で実行されるように定義されることがある。ビデオデコーダは、選択されたイントラ予測モードに基づいてビデオデータのブロックを再構築し得る(752)。
図20は、本開示の技法によるビデオデータを符号化する方法を示すフローチャートである。図20は、汎用ビデオエンコーダに関して説明される。汎用ビデオエンコーダは、たとえばビデオエンコーダ20に相当し得るが、本開示の技法はいずれの特定のタイプのビデオエンコーダにも限定されない。ビデオエンコーダは、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報を符号化する(800)。ビデオエンコーダは、選択されたイントラ予測モードに従って、Nタップのイントラ補間フィルタをビデオデータのブロックの隣接する再構築されたサンプルに適用する(802)。一例では、Nは2より大きいことがある。ビデオエンコーダは、選択されたイントラ予測モードに従って、フィルタリングされた隣接する再構築されたサンプルに基づいてビデオデータのブロックを符号化し得る(804)。
図21は、本開示の技法によるビデオデータを復号する方法を示すフローチャートである。図21は、汎用ビデオデコーダに関して説明される。汎用ビデオデコーダは、たとえばビデオデコーダ30に相当し得るが、本開示の技法はいずれの特定のタイプのビデオデコーダにも限定されない。ビデオデコーダは、複数のイントラ予測モードの中からビデオデータのブロックの選択されたイントラ予測モードを示すシンタックス情報を復号する(850)。ビデオデコーダは、選択されたイントラ予測モードに従って、Nタップのイントラ予測フィルタをビデオデータのブロックの隣接する再構築されたサンプルに適用する(852)。一例では、Nは2より大きいことがある。ビデオデコーダは、選択されたイントラ予測モードに従って、フィルタリングされた隣接する再構築されたサンプルに基づいてビデオデータのブロックを再構築し得る(854)。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信されることがあり、かつハードウェアに基づく処理ユニットによって実行されることがある。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得るか、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示において説明される技法の実施のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータまたは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または、命令もしくはデータ構造の形式の所望のプログラムコードを記憶するために使用されコンピュータによってアクセスされ得る任意の他の媒体を含み得る。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用してウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるものとする。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の集積論理回路もしくは離散論理回路などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書において使用される「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に適した任意の他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書において説明される機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/またはソフトウェアモジュールの中で与えられることがあり、あるいは複合コーデックに組み込まれることがある。また、本技法は、1つまたは複数の回路または論理要素において完全に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またICのセット(たとえば、チップセット)を含む、様々なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的側面を強調するために、様々な構成要素、モジュール、またはユニットが説明されているが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上で説明されたように、様々なユニットは、コーデックハードウェアユニットにおいて結合されることがあり、または適切なソフトウェアおよび/もしくはファームウェアとともに、上で説明されたような1つまたは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されることがある。
様々な例が説明された。これらおよび他の例は、以下の特許請求の範囲内に入る。