添付の図面は、例を示す。添付の図面における、参照番号で指示される要素は、以下の説明における、同じ参照番号で指示される要素に対応する。本開示において、順序を示す言葉(たとえば、「第1の」、「第2の」、「第3の」など)で始まる名称をもつ要素は、それらの要素が特定の順序を有することを必ずしも示唆しない。そうではなく、そのような順序を示す言葉は、同じまたは同様のタイプの異なる要素を指すのに使われるにすぎない。
ビデオコーダは、ビデオブロックの左上側でビデオブロックと接する画素のセットに基づいて、イントラ予測されたビデオブロックを生成することができる。ビデオブロックの左側の境界画素は、ビデオブロックの画素の底の行より下に広がっていてよく、ビデオブロックの上側の境界は、ビデオブロックの画素の最も右側の列より右に広がっていてよい。
いくつかの例では、境界画素の1つまたは複数は利用不可能であり得る。したがって、ビデオコーダは、利用不可能な境界画素に値を割り当てるパディング動作を実行することができる。パディング動作は、左下の境界画素から始まり、境界画素を順番に通って右上の境界画素に至る順序に従って、境界画素を処理することができる。パディング動作が利用不可能な境界画素を処理するとき、パディング動作は、パディング動作によって以前処理された境界画素の値に基づいて、利用不可能な境界画素に値を割り当てることができる。パディング動作を実行した後、ビデオコーダは、境界画素に基づいて、イントラ予測されたビデオブロックを生成することができる。ビデオコーダがビデオエンコーダである場合、ビデオコーダは、イントラ予測されたビデオブロックに基づいて、符号化されたビデオデータを生成することができる。たとえば、ビデオエンコーダは、イントラ予測されたビデオブロックに少なくとも一部基づいて、残差データを生成することができる。ビデオコーダがビデオデコーダである場合、ビデオコーダは、イントラ予測されたビデオブロックに基づいて、復号されたビデオデータを生成することができる。たとえば、ビデオデコーダは、イントラ予測されたビデオブロックと残差ビデオブロックとに少なくとも一部基づいて、復号されたビデオブロックを復元することができる。
図1は、本開示の技法を利用することができる例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用され説明される場合、「ビデオコーダ」は総称的に、ビデオエンコーダとビデオデコーダの両方と、複合エンコーダ−デコーダ(コーデック)とを指す。本開示では、「ビデオコーディング」または「コーディング」という用語は総称的に、ビデオ符号化とビデオ復号とを指し得る。コーダ、エンコーダ、デコーダおよびコーデックという用語はすべて、本開示と一致するビデオデータのコーディング(符号化および/または復号)のために設計された特定の機械を指し得る。ビデオコーディングを実行するデバイスは、ビデオコーディングデバイスまたはビデオコーディング装置と呼ばれ得る。
図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化されたビデオデータを生成する。宛先デバイス14は、ソースデバイス12によって生成された、符号化されたビデオデータを復号することができる。ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォン、いわゆる「スマート」パッドなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲にわたるデバイスを備え得る。いくつかの例では、ソースデバイス12および宛先デバイス14は、ワイヤレス通信のために装備され得る。
宛先デバイス14は、チャネル16を介してソースデバイス12から符号化されたビデオデータを受信することができる。チャネル16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動することが可能な、任意のタイプの媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12が符号化されたビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルのような通信規格に従って、符号化されたビデオデータを変調することができ、変調されたビデオデータを宛先デバイス14に送信することができる。通信媒体は、高周波(RF)スペクトルまたは1つまたは複数の物理伝送線路のような、ワイヤレス通信媒体または有線通信媒体を備え得る。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークのような、パケットベースネットワークの一部を形成し得る。通信媒体は、ソースデバイス12から宛先デバイス14への通信を支援する、ルータ、スイッチ、基地局、または他の機器を含み得る。
別の例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する、記憶媒体に対応し得る。この例では、宛先デバイス14は、ディスクアクセスまたはカードアクセスを介して、記憶媒体にアクセスすることができる。記憶媒体は、ブルーレイ(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体など、種々のローカルにアクセスされるデータ記憶媒体を含み得る。さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオを記憶する、ファイルサーバまたは別の中間記憶デバイスを含み得る。この例では、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは別の中間記憶デバイスに記憶された、符号化されたビデオデータにアクセスすることができる。ファイルサーバは、符号化されたビデオデータを記憶することと、符号化されたビデオデータを宛先デバイス14に送信することとが可能な、あるタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイトのための)ウェブサーバ、FTPサーバ、ネットワークアタッチトストレージ(NAS)デバイス、およびローカルディスクドライブを含む。宛先デバイス14は、インターネット接続のような標準的なデータ接続を通じて、符号化されたビデオデータにアクセスすることができる。データ接続の例示的なタイプは、ファイルサーバに記憶された符号化されたビデオデータにアクセスするのに適切な、ワイヤレスチャネル(たとえば、Wi−Fi接続)、有線接続(たとえば、DSL、ケーブルモデムなど)、または両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
本開示の技法は、ワイヤレスの用途または設定には限定されない。本技法は、無線を通じたテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのデジタルビデオの符号化、データ記憶媒体に記憶されたデジタルビデオの復号、または他の用途など、種々のマルチメディア用途のいずれかをサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または二方向のビデオ送信をサポートするように構成され得る。
図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。場合によっては、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、たとえばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含むビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/または、ビデオデータを生成するためのコンピュータグラフィックスシステムなどのソース、あるいはそのようなソースの組合せを含み得る。
ビデオエンコーダ20は、ビデオデータを符号化することができる。出力インターフェース22は、符号化されたビデオデータを宛先デバイス14に直接送信することができる。あるいは、出力インターフェース22は、復号および/または再生のために宛先デバイス14によって後でアクセスするために、記憶媒体またはファイルサーバ上に、符号化されたビデオデータを記憶することができる。
図1の例において、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。場合によっては、入力インターフェース28は、受信機および/またはモデムを含み得る。宛先デバイス14の入力インターフェース28は、チャネル16を介して符号化されたビデオデータを受信する。符号化されたビデオデータは、ビデオデータを表す種々のシンタクス要素を含み得る。
ディスプレイデバイス32は、宛先デバイス14と一体であってよく、またはその外部にあってよい。他の例では、宛先デバイス14はディスプレイデバイスであり得る。一般に、ディスプレイデバイス32は、復号されたビデオデータをユーザに表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、種々のディスプレイデバイスのいずれかを備え得る。
ビデオエンコーダ20およびビデオデコーダ30は、現在開発中の高効率ビデオコーディング(HEVC)規格などのビデオ圧縮規格に従って動作することができ、HEVCテストモデル(HM)に準拠することができる。あるいは、ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG−4、Part 10、Advanced Video Coding(AVC)と呼ばれるITU−T H.264規格、またはそのような規格の拡張版など、他のプロプライエタリ規格または業界規格に従って動作し得る。しかしながら、本開示の技法は、いかなる特定のコーディング規格にも限定されない。他の例示的なビデオ圧縮規格は、MPEG−2およびITU−T H.263を含む。
図1の例には示されていないが、ビデオエンコーダ20およびビデオデコーダ30は各々、オーディオエンコーダおよびオーディオデコーダと統合されてよく、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するための適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含み得る。いくつかの例では、MUX−DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)など他のプロトコルに準拠することができる。
この場合も、図1は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含むとは限らないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。多くの例では、ビデオ符号化およびビデオ復号は、互いに通信しないが、符号化されたビデオデータをメモリに記憶し、かつ/またはメモリから符号化されたビデオデータデータを取り出し復号するデバイスによって、実行される。
ビデオエンコーダ20およびビデオデコーダ30は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェアのような、様々なタイプの回路、またはそれらの任意の組合せを使用して実装され得る。いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、少なくとも部分的にソフトウェアで実装され得る。ビデオエンコーダ20および/またはビデオデコーダ30がソフトウェアで部分的に実装される場合、デバイスは、適切な非一時的コンピュータ可読記憶媒体にソフトウェアの命令を記憶し、1つまたは複数のプロセッサを使用してその命令をハードウェアで実行して、本開示の技法を実行することができる。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれてよく、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合されてよい。
上で手短に述べたように、ビデオエンコーダ20は、ビデオデータを符号化する。ビデオデータは、1つまたは複数のピクチャを備え得る。ピクチャの各々は、ビデオの一部を形成する静止画像である。いくつかの事例では、ピクチャは、ビデオ「フレーム」と呼ばれ得る。ビデオエンコーダ20がビデオデータを符号化するとき、ビデオエンコーダ20は、ビットストリームを生成し得る。ビットストリームは、ビデオデータのコーディングされた表現を形成する、ビットのシーケンスを含み得る。
ビットストリームを生成するために、ビデオエンコーダ20は、ビデオデータ中の各ピクチャに対して符号化動作を実行することができる。ビデオエンコーダ20がピクチャに対して符号化動作を実行するとき、ビデオエンコーダ20は、一連のコーディングされたピクチャと関連するデータとを生成することができる。コーディングされたピクチャとは、ピクチャのコーディングされた表現である。関連するデータは、シーケンスパラメータセットと、ピクチャパラメータセットと、適応パラメータセットと、他のシンタクス構造とを含み得る。シーケンスパラメータセット(SPS)は、ピクチャの0個以上のシーケンスに適用可能なパラメータを含み得る。ピクチャパラメータセット(PPS)は、0個以上のピクチャに適用可能なパラメータを含み得る。適応パラメータセット(APS)は、0個以上のピクチャに適用可能なパラメータを含み得る。PPS中のパラメータは、ピクチャのセットに対して一定であってよく、一方、異なる適応パラメータセット中のパラメータは、ピクチャのセット中の異なるピクチャに適用可能であってよい。
コーディングされたピクチャを生成するために、ビデオエンコーダ20は、ピクチャを等しいサイズの重複しないビデオブロックに区分することができる。ビデオブロックの各々は、ツリーブロックと関連付けられる。いくつかの事例では、ツリーブロックは、最大コーディングユニット(LCU)とも呼ばれ得る。HEVCのツリーブロックは、H.264/AVCなど、従来の規格のマクロブロックに広い意味で類似し得る。しかしながら、ツリーブロックは、特定のサイズに必ずしも限定されるものではなく、1つまたは複数のコーディングユニット(CU)を含み得る。ビデオエンコーダ20は、4分木区分を使用して、ツリーブロックのビデオブロックを、CUと関連付けられるビデオブロックへと区分することができるので、「ツリーブロック」という名前である。
いくつかの例では、ビデオエンコーダ20は、ピクチャを複数のスライスに区分することができる。スライスの各々は、整数個のCUを含み得る。いくつかの例では、スライスは、整数個のツリーブロックを備える。他の例では、スライスの境界は、ツリーブロック内にあり得る。
ピクチャに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、ピクチャの各スライスに対して符号化動作を実行することができる。ビデオエンコーダ20がスライスに対して符号化動作を実行すると、ビデオエンコーダ20は、スライスと関連付けられた符号化されたデータを生成することができる。スライスと関連付けられた符号化されたデータは、「コーディングされたスライス」と呼ばれ得る。
コーディングされたスライスを生成するために、ビデオエンコーダ20は、スライス中の各ツリーブロックに対して符号化動作を実行することができる。ビデオエンコーダ20がツリーブロックに対して符号化動作を実行すると、ビデオエンコーダ20は、コーディングされたツリーブロックを生成することができる。コーディングされたツリーブロックは、ツリーブロックの符号化されたバージョンを表すデータを備え得る。
コーディングされたツリーブロックを生成するために、ビデオエンコーダ20は、ツリーブロックのビデオブロック上で4分木区分を再帰的に実行して、ビデオブロックを徐々により小さなビデオブロックへと分けることができる。より小さなビデオブロックの各々は、異なるCUと関連付けられ得る。たとえば、ビデオエンコーダ20は、ツリーブロックのビデオブロックを4つの等しいサイズのサブブロックに区分し、サブブロックの1つまたは複数を、4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。ビットストリーム中の1つまたは複数のシンタクス要素は、ビデオエンコーダ20がツリーブロックのビデオブロックを区分できる最大の回数を示し得る。CUのビデオブロックは、正方形の形状であり得る。CUのビデオブロックのサイズ(すなわち、CUのサイズ)は、8×8の画素から、最大で64×64以上の画素を有するツリーブロックのビデオブロックのサイズ(すなわち、ツリーブロックのサイズ)にまでわたり得る。
ビデオエンコーダ20は、ツリーブロックの各々の区分されていないCUに対して符号化動作を実行することができる。区分されていないCUは、ビデオブロックが他のCUのためのビデオブロックへと区分されていない、CUである。区分されていないCUに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、CUのために1つまたは複数の予測ユニット(PU)を生成することができる。CUのPUの各々は、CUのビデオブロック内の異なるビデオブロックと関連付けられ得る。ビデオエンコーダ20は、CUの各PUの、予測されたビデオブロックを生成することができる。PUの予測されたビデオブロックは、サンプルのブロックであってよい。本開示では、「サンプル」という用語は、画素の明るさ(輝度)または色(クロミナンス)を指し得る。ビデオエンコーダ20は、イントラ予測またはインター予測を使用して、PUの予測されたビデオブロックを生成することができる。
ビデオエンコーダ20がイントラ予測を使用してPUの予測されたビデオブロックを生成する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャのサンプルに基づいて、PUの予測されたビデオブロックを生成することができる。ビデオエンコーダ20がイントラ予測を使用してCUのPUの予測されたビデオブロックを生成する場合、CUはイントラ予測されたCUである。
ビデオエンコーダ20がインター予測を使用してPUの予測されたビデオブロックを生成する場合、ビデオエンコーダ20は、PUと関連付けられるピクチャ以外のピクチャの値に基づいて、PUの予測されたビデオブロックを生成することができる。言い換えると、ビデオエンコーダ20は、1つまたは複数の参照ピクチャの中のサンプルに基づいて、PUの予測されたビデオブロックを生成することができる。加えて、ビデオエンコーダ20がインター予測を使用してPUの予測されたビデオブロックを生成する場合、ビデオエンコーダ20は、PUの動き情報を生成することができる。PUの動き情報は、PUのビデオブロックに対応する参照ピクチャの部分を示し得る。言い換えると、PUの動き情報は、PUの「参照サンプル」を示し得る。ビデオエンコーダ20は、PUの動き情報によって示される参照ピクチャの部分に基づいて、PUの予測されたビデオブロックを生成することができる。ビデオエンコーダ20がインター予測を使用してCUのPUの予測されたビデオブロックを生成する場合、CUはインター予測されたCUである。
ビデオエンコーダ20がCUの1つまたは複数のPUの予測されたビデオブロックを生成した後、ビデオエンコーダ20は、CUのPUの予測されたビデオブロックに基づいて、CUの残差データを生成することができる。CUの残差データは、CUのPUの予測されたビデオブロック中のサンプルと、CUの元のビデオブロック中のサンプルとの差を示し得る。
さらに、区分されていないCUに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、CUの残差データに対して再帰的な4分木区分を実行して、CUの残差データを、CUの変換ユニット(TU)と関連付けられる残差データの1つまたは複数のブロック(すなわち、残差ビデオブロック)へと区分することができる。CUの各TUは、異なる残差ビデオブロックと関連付けられ得る。ビデオコーダ20は、CUの各TUに対して変換動作を実行することができる。
ビデオエンコーダ20がTUに対して変換動作を実行すると、ビデオエンコーダ20は、TUと関連付けられる残差ビデオブロックに対して1つまたは複数の変換を適用して、TUと関連付けられる1つまたは複数の変換係数ブロック(すなわち、変換係数のブロック)を生成することができる。概念的には、変換係数ブロックは、変換係数の2次元(2D)行列であってよい。
変換係数ブロックを生成した後、ビデオエンコーダ20は、変換係数ブロックに対して量子化動作を実行することができる。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現する処理を指す。量子化は、変換係数の一部またはすべてと関連付けられるビット深度を低減することができる。たとえば、量子化中にnビットの変換係数がmビットの変換係数に切り捨てられてよく、ただし、nはmよりも大きい。
ビデオエンコーダ20は、各CUまたはある数のCUを、量子化パラメータ(QP)値と関連付けることができる。CUと関連付けられるQP値は、ビデオエンコーダ20が、CUまたはその数のCUと関連付けられる変換係数ブロックをどのように量子化するかを、決定し得る。ビデオエンコーダ20は、CUと関連付けられるQP値を調整することによって、CUと関連付けられる変換係数ブロックに適用される量子化の程度を調整することができる。
ビデオエンコーダ20が変換係数ブロックを量子化した後、ビデオエンコーダ20は、量子化された変換係数をスキャンして、変換係数レベルの1次元ベクトルを生成することができる。ビデオエンコーダ20は、1次元ベクトルをエントロピー符号化することができる。ビデオエンコーダ20はまた、ビデオデータと関連付けられる他のシンタクス要素もエントロピー符号化することができる。
ビデオエンコーダ20によって生成されるビットストリームは、一連のネットワーク抽象化レイヤ(NAL)ユニットを含む。NALユニットの各々は、NALユニット中のデータのタイプの指示と、データを含むバイトとを含むシンタクス構造であり得る。たとえば、NALユニットは、シーケンスパラメータセット、ピクチャパラメータセット、コーディングされたスライス、補助強化情報(SEI)、アクセスユニット区切り文字、フィラーデータ、または別のタイプのデータを表すデータを含み得る。NALユニット中のデータは、エントロピー符号化された変換係数ブロック、動き情報などのような、エントロピー符号化されたシンタクス構造を含み得る。
ビデオデコーダ30は、ビデオエンコーダ20によって生成されるビットストリームを受け取ることができる。ビットストリームは、ビデオエンコーダ20によって符号化されるビデオデータの符号化された表現を含み得る。ビデオデコーダ30がビットストリームを受け取ると、ビデオデコーダ30は、ビットストリームに対して解析動作を実行することができる。ビデオデコーダ30が解析動作を実行すると、ビデオデコーダ30は、ビットストリームからシンタクス要素を抽出することができる。ビデオデコーダ30は、ビットストリームから抽出されたシンタクス要素に基づいて、ビデオデータのピクチャを復元することができる。シンタクス要素に基づいてビデオデータを復元するための処理は、一般に、シンタクス要素を生成するためにビデオエンコーダ20によって実行される処理の逆であり得る。
ビデオデコーダ30がCUと関連付けられるシンタクス要素を抽出した後、ビデオデコーダ30は、シンタクス要素に基づいて、CUのPUのイントラ予測されたビデオブロックまたはインター予測されたビデオブロックを生成することができる。加えて、ビデオデコーダ30は、CUのTUと関連付けられる変換係数ブロックを逆量子化することができる。ビデオデコーダ30は、変換係数ブロックに対して逆変換を実行して、CUのTUと関連付けられる残差ビデオブロックを復元することができる。予測されたビデオブロックを生成し、残差ビデオブロックを復元した後、ビデオデコーダ30は、予測されたビデオブロックおよび残差ビデオブロックに基づいて、CUのビデオブロックを復元することができる。このようにして、ビデオデコーダ30は、ビットストリーム中のシンタクス要素に基づいて、CUのビデオブロックを決定することができる。
上で簡単に説明されたように、ビデオエンコーダ20またはビデオデコーダ30のようなビデオコーダは、イントラ予測を使用して、PUの予測されたビデオブロックを生成することができる。説明を簡単にするために、本開示は、イントラ予測を使用して生成された予測されたビデオブロックを、イントラ予測されたビデオブロックと呼ぶことがある。ビデオコーダがPUのイントラ予測されたビデオブロックを生成すると、ビデオコーダは、イントラ予測されたビデオブロック中の画素に、様々な境界画素の値を割り当てることができる。
図2は、例示的なビデオブロック50と、ビデオブロック50と関連付けられる境界画素のセットとを示す、概念図である。ビデオブロック50は、ビデオコーダが現在コーディングしているCUのPUと関連付けられ得る。図2の例では、ビデオブロック50は、a〜pと名付けられた16個の画素からなる。図2の例では、境界画素はA〜Rと名付けられている。他のビデオブロックは、ビデオブロック50よりも大きくてよく、または小さくてよい。一般に、ビデオブロックは、ビデオブロックの上の2×w+1個の境界画素およびビデオブロックの左の2×h+1個の境界画素と関連付けられてよく、ここでwはビデオブロックの幅であり、hはビデオブロックの高さである。
ビデオブロック(たとえば、ビデオブロック50)の上の境界画素は、上側の予測因子を形成し得る。言い換えると、上側の予測因子は、ビデオブロックの上にあるサンプルの行に対応する、参照サンプルの列であり得る。ビデオブロックの左上の画素の座標が(x,y)であり、ビデオブロックのサイズがN×Nである場合、iが−1から2Nにわたるものとして、座標(x+i,y−1)のサンプルが、上側の予測因子を形成する。ビデオブロックの左の境界画素は、左側の予測因子を形成する。言い換えると、左側の予測因子は、ビデオブロックの左にあるサンプルの列に対応する、参照サンプルの列であり得る。ビデオブロックの左上の画素の座標が(x,y)であり、ビデオブロックのサイズがN×Nである場合、jが−1から2Nにわたるものとして、座標(x−1,y+j)のサンプルが、左側の予測因子を形成する。
図3Aは、HEVCにおける例示的なイントラ予測モードを示す、概念図である。図3Aの例では、イントラ予測モード1、2、および4〜33は、イントラ予測されたビデオブロックを生成するためにビデオコーダが境界画素を延ばし得る様々な方向に対応する。たとえば、ビデオコーダがイントラ予測モード1を使用する場合、ビデオコーダは、境界画素の値を垂直に下方向に延ばすことによって、イントラ予測されたビデオブロックを生成することができる。この例では、ビデオコーダは、イントラ予測モード1を使用して、境界画素Aの値を画素a、e、i、およびmに割り当て、境界画素Bの値を画素b、f、j、およびnに割り当て、境界画素Cの値を画素c、g、k、およびoに割り当て、境界画素Dの値を画素d、h、l、およびpに割り当てることによって、ビデオブロック50(図2)を生成することができる。
モード0は、平面モードを指し得る。ビデオコーダは、以下の式を使用して、平面モードを使用してイントラ予測されたビデオブロックを生成することができる。
ここで、x,y=0..nS−1であり、k=Log2(nS)である。
上の式において、predSamples[x,y]はイントラ予測されたサンプルの列であり、nSは予測されたビデオブロックのサイズを示し、p[x,y]は近隣のサンプルの列である。
モード3は、DCモードを指し得る。DCモードを使用してイントラ予測されたビデオブロックを生成するために、ビデオコーダは、以下の式を使用して値DCValをまず計算することができる。
現在のブロックのクロミナンスインデックス(cIdx)が0に等しい場合、以下が当てはまる。
それ以外の場合、予測サンプルpredSamples[x,y]は以下のように導出される。
上の式において、predSamples[x,y]はイントラ予測されたサンプルの列であり、nSは予測されたビデオブロックのサイズを示し、p[x,y]は近隣のサンプルの列である。
別の例では、ビデオコーダがイントラ予測モード10を使用する場合、ビデオコーダは、境界画素の値を対角線上に左下から右上に延ばすことによって、イントラ予測されたビデオブロックを生成することができる。図2の例では、ビデオコーダは、イントラ予測モード10を使用して、境界画素Jの値を画素aに割り当て、境界画素Kの値を画素eおよびbに割り当て、境界画素Lの値を画素i、f、およびcに割り当て、境界画素Mの値を画素m、j、g、およびdに割り当て、境界画素Nの値を画素n、k、およびhに割り当て、境界画素Oの値を画素oおよびlに割り当て、境界画素Pの値を画素pに割り当てることによって、ビデオブロック50を生成することができる。
他の例では、ビデオコーダは、イントラ予測モードを示すために異なる数字を使用することができる。たとえば、図3Bは、異なるイントラ予測モードへの別の数の割当てを示す、概念図である。
図3Cは、H.264/AVCにおける例示的なイントラ予測モードを示す、概念図である。H.264/AVCにおける利用可能なイントラ予測モードは、より少ないことがある。
いくつかの例では、イントラ予測されたビデオブロックと関連付けられる境界画素の1つまたは複数は、利用不可能である。イントラ予測されたビデオブロックと関連付けられる境界画素のセットは、イントラ予測されたビデオブロックを生成するためにビデオコーダが使用することができる、境界画素を含み得る。境界画素が利用不可能である場合、ビデオコーダは、境界画素の値にアクセスすることが不可能であり得る。したがって、ビデオコーダは、境界画素の値を使用してイントラ予測されたビデオブロックを生成することが不可能であり得る。
境界画素は、種々の理由で利用不可能であり得る。たとえば、境界画素が現在のピクチャ(すなわち、ビデオコーダが現在コーディングしているピクチャ)の境界の外側にある場合、境界画素は利用不可能であり得る。別の例では、境界画素が現在のスライスまたはタイル(すなわち、ビデオコーダが現在コーディングしているスライスまたはタイル)の境界の外側にあり、スライス/タイルにまたがる予測が許可されていない場合、境界画素は利用不可能であり得る。別の例では、境界画素がインター予測されたCUと関連付けられ、制約されたイントラ予測が現在のピクチャに対して可能にされている場合、境界画素は利用不可能であり得る。
1つまたは複数の境界画素が利用不可能であることがあるので、ビデオコーダは、利用不可能な境界画素に値を割り当てるパディング動作を実行することができる。ビデオコーダがパディング動作を実行した後、ビデオコーダは、利用可能な境界画素の利用可能な値と、利用不可能な境界画素の割り当てられた値とを使用して、イントラ予測されたビデオブロックを生成することができる。
異なるビデオコーダが、様々な方法で、値を利用不可能な境界画素に割り当てることができる。たとえば、ビデオコーダは、左下の境界画素(たとえば、図2の境界画素P)から角の画素(たとえば、図2の境界画素R)を通り右上の境界画素(たとえば、図2の境界画素H)へ至るように境界画素をスキャンする、パディング動作を実行することができる。この例では、ビデオコーダが利用不可能な境界画素に到達すると、ビデオコーダは、ビデオコーダが次の利用可能な境界画素に到達するまで、前方にスキャンすることができる。利用可能な境界画素を特定すると、パディング動作は、次の利用可能な画素と前の利用可能な境界画素の値とに基づいて、値を利用不可能な境界画素に割り当てることができる。
上で説明された例示的なパディング動作では、前の利用可能な境界画素がない場合、ビデオコーダは、最初の利用可能な境界画素を見つけるために前方にスキャンし、次いで、最初の利用可能な境界画素の値を、最初の利用可能な境界画素の前の各々の利用不可能な境界画素に割り当てることができる。言い換えると、Ppad=Pnextであり、ここでPpadは、最初の利用可能な境界画素より前の各々の利用不可能な境界画素に割り当てられる値であり、Pnextは、次の利用可能な境界画素の値である。次の利用可能な境界画素がない場合、ビデオコーダは、最後の利用可能な境界画素の値から、利用不可能な境界画素の値を外挿することができる。言い換えると、Ppad=Ppreであり、ここでPpadは、最後の利用可能な境界画素の後の各々の利用不可能な境界画素の値であり、Ppreは、最後の利用可能な境界画素の値である。PpreおよびPnextという境界画素が利用可能ではない場合、ビデオコーダは、デフォルト値を境界画素に割り当てることができる。
前の段落で説明された方式で値を利用不可能な境界画素に割り当てることには、いくつかの欠点があり得る。たとえば、この方式で値を各々の利用不可能な境界画素に割り当てることは、次の利用可能な境界画素を見つけるように前方にスキャンするためのいくつかのメモリ読取り動作を、ビデオコーダが実行することを必要とし得る。その結果、上で説明されたパディング動作は、ジャンプが多いメモリアクセスを必要とし得る。たとえば、ビデオコーダが次の利用可能な境界画素を見つけると、ビデオコーダは、値Ppadを利用不可能な境界画素に割り当てることができる。次いで、ビデオコーダは、現在の境界画素から次の利用可能な境界画素まで、値Ppadを各々の境界画素に割り当てることができ、これは、現在の境界画素から再び開始するメモリアクセスを必要とし得る。そのような行ったり来たりする様式のメモリアクセスパターンは、望ましくないことがある。メモリがデータ位置に関してランダムな方式でアクセスされる場合には特に、メモリアクセス動作は時間がかかり消費電力が多いものであり得る。
本開示の技法によれば、ビデオコーダは、左下の境界画素(たとえば、図2の境界画素P)から始まり境界画素を順番に通って右上の境界画素(たとえば、図2の境界画素H)に至る順序に従って境界画素のセットを処理する、パディング動作を実行することができる。パディング動作が利用不可能な境界画素を処理するとき、パディング動作は、パディング動作によって以前処理された境界画素の値に基づいて、利用不可能な境界画素に値を割り当てる。このようにして、ビデオコーダは、次の利用可能な境界画素を見つけるために前方にスキャンする必要がない。同時に、パディング動作は、ビデオデータのコーディング効率にほとんど影響がないことがある。ビデオコーダは、より規則的で一貫したメモリアクセスパターンを使用できるので、ビデオコーダの複雑さを下げることができ、他の技法を実装するビデオコーダと比較して、ビデオコーダの性能を上げることができる。
図4は、本開示の技法を実装するように構成された例示的なビデオエンコーダ20示すブロック図である。図4は、説明を目的に与えられており、本開示において広く例示され説明される技法を限定するものと見なされるべきではない。説明のために、本開示は、HEVCコーディングの状況において、ビデオエンコーダ20を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法にも適用可能であり得る。
図4の例において、ビデオエンコーダ20は、複数の機能コンポーネントを含む。ビデオエンコーダ20の機能コンポーネントは、予測モジュール100と、残差生成モジュール102と、変換モジュール104と、量子化モジュール106と、逆量子化モジュール108と、逆変換モジュール110と、復元モジュール112と、フィルタモジュール113と、復号ピクチャバッファ114と、エントロピー符号化モジュール116とを含む。予測モジュール100は、動き推定モジュール122と、動き補償モジュール124と、イントラ予測モジュール126とを含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能コンポーネントを含んでよい。さらに、動き推定モジュール122と動き補償モジュール124は、高度に統合され得るが、図4の例では、説明のために別々に表されている。
ビデオエンコーダ20は、ビデオデータを受信することができる。ビデオエンコーダ20は、様々なソースからビデオデータを受信することができる。たとえば、ビデオエンコーダ20は、ビデオソース18(図1)または別のソースからビデオデータを受信することができる。ビデオデータは、一連のピクチャを表し得る。ビデオデータを符号化するために、ビデオエンコーダ20は、ピクチャの各々に対して符号化動作を実行することができる。ピクチャに対して符号化動作を実行することの一部として、ビデオエンコーダ20は、ピクチャの各スライスに対して符号化動作を実行することができる。スライスに対する符号化動作を実行することの一部として、ビデオエンコーダ20は、スライス中のツリーブロックに対して符号化動作を実行することができる。
ツリーブロックに対して符号化動作を実行することの一部として、予測モジュール100は、ツリーブロックのビデオブロックに対して4分木区分を実行して、ビデオブロックを徐々により小さなビデオブロックへと分けることができる。より小さなビデオブロックの各々は、異なるCUと関連付けられ得る。たとえば、予測モジュール100は、ツリーブロックのビデオブロックを4つの等しいサイズのサブブロックに区分し、サブブロックの1つまたは複数を、4つの等しいサイズのサブサブブロックに区分することができ、以下同様である。
CUと関連付けられるビデオブロックのサイズは、8×8サンプルから、最大で64×64サンプル以上のツリーブロックのサイズにまで、わたり得る。本開示では、「N×N(NxN)」および「N×N(N by N)」は、垂直方向の寸法および水平方向の寸法に関するビデオブロックのサンプルの寸法、たとえば、16×16(16x16)サンプルまたは16×16(16 by 16)サンプルを指すために交換可能に使用され得る。一般に、16×16のビデオブロックは、垂直方向に16個のサンプルを有し(y=16)、水平方向に16個のサンプルを有する(x=16)。同様に、N×Nのブロックは、一般に、垂直方向にN個のサンプルを有し、水平方向にN個のサンプルを有し、Nは非負整数値を表す。
さらに、ツリーブロックに対して符号化動作を実行することの一部として、予測モジュール100は、ツリーブロック用の階層的な4分木データ構造を生成することができる。たとえば、ツリーブロックは、4分木データ構造のルートノードに対応し得る。予測モジュール100が、ツリーブロックのビデオブロックを4つのサブブロックに区分する場合、ルートノードは、4分木データ構造中に4つの子ノードを有する。子ノードの各々は、サブブロックの1つと関連付けられるCUに対応する。予測モジュール100が、サブブロックの1つを4つのサブサブブロックに区分する場合、サブブロックと関連付けられるCUに対応するノードは、サブサブブロックの1つと関連付けられるCUに各々が対応する、4つの子ノードを有してよく、以下同様である。
4分木データ構造の各ノードは、対応するツリーブロックまたはCUのシンタクスデータ(たとえば、シンタクス要素)を含み得る。たとえば、4分木の中のノードは、そのノードに対応するCUのビデオブロックが4つのサブブロックに区分される(すなわち、分割される)かどうかを示す分割フラグを含み得る。CUのシンタクス要素は、再帰的に定義されてよく、CUのビデオブロックがサブブロックに分割されるかどうかに依存してよい。ビデオブロックが区分されていないCUは、4分木データ構造におけるリーフノードに対応し得る。コーディングされたツリーブロックは、対応するツリーブロック用の4分木データ構造に基づくデータを含み得る。
ビデオエンコーダ20は、ツリーブロックの各々の区分されていないCUに対して符号化動作を実行することができる。ビデオエンコーダ20が区分されていないCUに対して符号化動作を実行すると、ビデオエンコーダ20は、区分されていないCUの符号化された表現を表すデータを生成することができる。
CUに対して符号化動作を実行することの一部として、予測モジュール100は、CUの1つまたは複数のPUの中で、CUのビデオブロックを区分することができる。ビデオエンコーダ20およびビデオデコーダ30は、様々な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サイズに対する非対称区分もサポートすることができる。いくつかの例では、予測モジュール100は、CUのビデオブロックの辺に正しい角度で接触しない境界に沿ったCUのPUの間で、CUのビデオブロックを区分するように、幾何学的な区分を実行することができる。
動き推定モジュール122および動き補償モジュール124は、CUの各PUに対してインター予測を実行することができる。インター予測は、時間圧縮を実現し得る。PUに対してインター予測を実行することによって、動き推定モジュール122および動き補償モジュール124は、CUと関連付けられるピクチャ以外の参照ピクチャの復号されたサンプルに基づいて、PUの予測データを生成することができる。PUの予測データは、予測されたビデオブロックと様々なシンタクス要素とを含み得る。
さらに、動き推定モジュール122がPUに関して動き推定動作を実行するとき、動き推定モジュール122は、PUの1つまたは複数の動きベクトルを生成することができる。たとえば、スライスは、Iスライス、Pスライス、またはBスライスであり得る。動き推定モジュール122および動き補償モジュール124は、PUがIスライス中にあるか、Pスライス中にあるか、Bスライス中にあるかに応じて、CUのPUに対して様々な動作を実行することができる。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、動き推定モジュール122および動き補償モジュール124は、PUに対してインター予測を実行しない。
PUがPスライス中にある場合、PUを含むピクチャは、「リスト0」と呼ばれる参照ピクチャのリストと関連付けられる。リスト0中の参照ピクチャの各々は、復号の順序での後続ピクチャのインター予測に使用され得るサンプルを含む。動き推定モジュール122が、Pスライス中のPUに関して動き推定動作を実行するとき、動き推定モジュール122は、PUの参照サンプルについて、リスト0中の参照ピクチャを検索することができる。PUの参照サンプルは、PUのビデオブロック中のサンプルに最も密接に対応するサンプルのセット、たとえば、サンプルのブロックであり得る。動き推定モジュール122は、種々の評価基準を使用して、参照ピクチャ中のサンプルのセットがどの程度密接にPUのビデオブロック中のサンプルに対応するかを判定することができる。たとえば、動き推定モジュール122は、絶対値差分和(SAD)、2乗差分和(SSD)、または他の差分による評価基準によって、参照ピクチャ中のサンプルのセットがどの程度密接に、PUのビデオブロック中のサンプルに対応するかを、判定することができる。
Pスライス中のPUの参照サンプルを識別した後、動き推定モジュール122は、参照サンプルを含む、リスト0中の参照ピクチャを示す参照インデックスと、PUと参照サンプルの間の空間変位を示す動きベクトルとを生成することができる。様々な例において、動き推定モジュール122は、動きベクトルを可変の精度で生成することができる。たとえば、動き推定モジュール122は、1/4サンプル精度、1/8サンプル精度、または他の分数のサンプル精度で、動きベクトルを生成することができる。分数のサンプル精度の場合、参照サンプル値は、参照ピクチャ中の整数位置のサンプル値から補間され得る。動き推定モジュール122は、PUの動き情報を、エントロピー符号化モジュール116および動き補償モジュール124に出力することができる。PUの動き情報は、参照インデックスとPUの動きベクトルとを含み得る。動き補償モジュール124は、PUの動き情報を使用して、PUの参照サンプルを識別し取り出すことができる。
PUがBスライス中にある場合、PUを含むピクチャは、「リスト0」および「リスト1」と呼ばれる参照ピクチャの2つのリストと関連付けられ得る。リスト0中の参照ピクチャの各々は、復号の順序での後続ピクチャのインター予測に使用され得るサンプルを含む。リスト1中の参照ピクチャは、復号の順序ではピクチャの前に現れるが、提示の順序ではピクチャの後に現れる。いくつかの例では、Bスライスを含むピクチャは、リスト0とリスト1の組合せである、リストの組合せと関連付けられ得る。
さらに、PUがBスライス中にある場合、動き推定モジュール122は、PUについての単方向予測または双方向予測を実行することができる。動き推定モジュール122が、PUについての単方向予測を実行するとき、動き推定モジュール122は、PUの参照サンプルについて、リスト0またはリスト1の参照ピクチャを検索することができる。動き推定モジュール122は次いで、参照サンプルを含む、リスト0またはリスト1中の参照ピクチャを示す参照インデックスと、PUと参照サンプルの間の空間変位を示す動きベクトルとを生成することができる。動き推定モジュール122は、PUの動き情報を示すシンタクス要素を、エントロピー符号化モジュール116および動き補償モジュール124に出力することができる。PUの動き情報は、参照インデックスと、予測方向インジケータと、PUの動きベクトルとを含み得る。予測方向インジケータは、参照インデックスが、リスト0中の参照ピクチャを示すか、リスト1中の参照ピクチャを示すかを示し得る。動き補償モジュール124は、PUの動き情報を使用して、PUの参照サンプルを識別し取り出すことができる。
動き推定モジュール122が、PUについての双方向予測を実行するとき、動き推定モジュール122は、PUの参照サンプルについて、リスト0中の参照ピクチャを検索することができ、また、PUの別の参照サンプルについて、リスト1中の参照ピクチャを検索することができる。動き推定モジュール122は次いで、参照サンプルを含む、リスト0およびリスト1中の参照ピクチャを示す参照インデックスと、参照サンプルとPUの間の空間変位を示す動きベクトルとを生成することができる。動き推定モジュール122は、PUの動き情報を示すシンタクス要素を、エントロピー符号化モジュール116および動き補償モジュール124に出力することができる。PUの動き情報は、参照インデックスとPUの動きベクトルとを含み得る。動き補償モジュール124は、動き情報を使用して、PUの参照サンプルを識別し取り出すことができる。
いくつかの例では、動き推定モジュール122は、PUの動き情報のフルセットをエントロピー符号化モジュール116に出力しない。そうではなく、動き推定モジュール122は、別のPUの動き情報を参照して、PUの動き情報をシグナリングし得る。たとえば、動き推定モジュール122は、PUの動き情報が、隣接するPUの動き情報と十分に類似していると判定することができる。この例では、動き推定モジュール122は、PUと関連付けられるCUの4分木ノードにおいて、PUが隣接PUと同じ動き情報を有することを、ビデオデコーダ30に対して示す値を示し得る。別の例では、動き推定モジュール122は、PUと関連付けられるCUと関連付けられた4分木ノードにおいて、隣接するPUと動きベクトル差(MVD)とを特定し得る。動きベクトル差は、PUの動きベクトルと、示される隣接するPUの動きベクトルとの差を示す。ビデオデコーダ30は、示される隣接するPUの動きベクトルと、動きベクトル差とを使用して、PUの動きベクトルを予測することができる。第2のPUの動き情報をシグナリングするときに第1のPUの動き情報を参照することによって、ビデオエンコーダ20は、より少数のビットを使用して、第2のPUの動き情報をシグナリングすることが可能であり得る。
CUに対して符号化動作を実行することの一部として、イントラ予測モジュール126は、CUのPUに対してイントラ予測を実行することができる。イントラ予測は、空間圧縮を実現し得る。イントラ予測モジュール126がPUに対してイントラ予測を実行するとき、イントラ予測モジュール126は、同じピクチャ中の他のPUの復号されたサンプルに基づいて、PUの予測データを生成することができる。PUの予測データは、予測されたビデオブロックと様々なシンタクス要素とを含み得る。イントラ予測モジュール126は、Iスライス、Pスライス、およびBスライスの中のPUに対して、イントラ予測を実行することができる。
PUに対してイントラ予測を実行するために、イントラ予測モジュール126は、複数のイントラ予測モードを使用して、PUの予測データの複数のセットを生成することができる。イントラ予測モジュール126が、イントラ予測モードを使用して、PUの予測データのセットを生成するとき、イントラ予測モジュール126は、イントラ予測モードと関連付けられる方向に、近隣のPUのビデオブロックからPUのビデオブロックにわたって、サンプルを延ばすことができる。近隣のPUは、PUの上、PUの右上、PUの左上、PUの左、またはPUの左下にあり得る。イントラ予測モジュール126は、様々な数のイントラ予測モード、たとえば、35個の方向のイントラ予測モードを使用することができる。イントラ予測モジュール126は、様々なイントラ予測動作を実行することができる。たとえば、イントラ予測モジュール126は、図6の例示的なイントラ予測動作を実行することができる。
予測モジュール100は、PUについての、動き補償モジュール124によって生成された予測データ、またはPUについての、イントラ予測モジュール126によって生成された予測データの中から、PUの予測データを選択することができる。いくつかの例では、予測モジュール100は、予測データのセットのレート/歪みの評価基準に基づいて、PUの予測データを選択する。
予測モジュール100が、イントラ予測モジュール126によって生成された予測データを選択する場合、予測モジュール100は、PUの予測データを生成するのに使用されたイントラ予測モード、すなわち、選択されたイントラ予測モードをシグナリングすることができる。予測モジュール100は、選択されたイントラ予測モードを様々な方法でシグナリングすることができる。たとえば、選択されたイントラ予測モードは、隣接するPUのイントラ予測モードと同じであることがあり得る。言い換えると、隣接するPUのイントラ予測モードは、現在のPUに対して最もあり得るモードであり得る。したがって、予測モジュール100は、選択されたイントラ予測モードが隣接するPUのイントラ予測モードと同じであることを示すための、シンタクス要素を生成することができる。
予測モジュール100がCUのPUの予測データを選択した後、残差生成モジュール102は、CUのビデオブロックからCUのPUの予測データの予測されたビデオブロックを差し引くことによって、CUの残差データを生成することができる。CUの残差データは、CUのビデオブロック中のサンプルの様々なサンプル成分に対応する、2D残差ビデオブロックを含み得る。たとえば、残差データは、CUのPUの予測されたビデオブロック中のサンプルの輝度成分と、CUの元のビデオブロック中のサンプルの輝度成分との差に対応する、残差ビデオブロックを含み得る。加えて、CUの残差データは、CUのPUの予測されたビデオブロック中のサンプルのクロミナンス成分と、CUの元のビデオブロック中のサンプルのクロミナンス成分との差に対応する、残差ビデオブロックを含み得る。
予測モジュール100は、4分木区分を実行して、CUの残差ビデオブロックをサブブロックへと区分することができる。各々の分割されていない残差ビデオブロックは、CUの異なるTUと関連付けられ得る。CUのTUと関連付けられる残差ビデオブロックのサイズおよび位置は、CUのPUと関連付けられるビデオブロックのサイズおよび位置に基づいてよく、または基づかなくてよい。「残差4分木」(RQT)として知られる4分木構造は、残差ビデオブロックの各々と関連付けられるノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
変換モジュール104は、TUと関連付けられる残差ビデオブロックに1つまたは複数の変換を適用することによって、CUの各TUのための1つまたは複数の変換係数ブロックを生成することができる。変換係数ブロックの各々は、変換係数の2D行列であり得る。変換モジュール104は、TUと関連付けられる残差ビデオブロックに様々な変換を適用することができる。たとえば、変換モジュール104は、離散コサイン変換(DCT)、方向変換、または概念的に同様の変換を、TUと関連付けられる残差ビデオブロックに適用することができる。
変換モジュール104が、TUと関連付けられる変換係数ブロックを生成した後、量子化モジュール106は、変換係数ブロック中の変換係数を量子化することができる。量子化モジュール106は、CUと関連付けられるQP値に基づいて、CUのTUと関連付けられる変換係数ブロックを量子化することができる。
ビデオエンコーダ20は、様々な方法でQP値をCUと関連付けることができる。たとえば、ビデオエンコーダ20は、CUと関連付けられるツリーブロックに対して、レート歪み分析を実行することができる。レート歪み分析では、ビデオエンコーダ20は、ツリーブロックに対して符号化動作を複数回実行することによって、ツリーブロックの複数のコーディングされた表現を生成することができる。ビデオエンコーダ20がツリーブロックの異なる符号化された表現を生成するとき、ビデオエンコーダ20は、異なるQP値をCUと関連付けることができる。所与のQP値が、ビットレートおよび歪みの評価基準が最小であるツリーブロックのコーディングされた表現でCUと関連付けられるとき、ビデオエンコーダ20は、所与のQP値がCUと関連付けられることをシグナリングすることができる。
逆量子化モジュール108および逆変換モジュール110は、それぞれ、変換係数ブロックに逆量子化と逆変換とを適用して、変換係数ブロックから残差ビデオブロックを復元することができる。復元モジュール112は、復元された残差ビデオブロックを、予測モジュール100によって生成される1つまたは複数の予測されたビデオブロックからの対応するサンプルに追加して、TUと関連付けられる復元されたビデオブロックを生成することができる。このようにCUの各TUのビデオブロックを復元することによって、ビデオエンコーダ20は、CUのビデオブロックを復元することができる。
復元モジュール112がCUのビデオブロックを復元した後、フィルタモジュール113は、デブロッキング動作を実行して、CUと関連付けられるビデオブロックにおけるブロッキングアーチファクトを低減することができる。デブロッキング動作を実行した後、フィルタモジュール113は、復号ピクチャバッファ114にCUの復元されたビデオブロックを記憶することができる。動き推定モジュール122および動き補償モジュール124は、復元されたビデオブロックを含む参照ピクチャを使用して、後続ピクチャのPUに対してインター予測を実行することができる。加えて、イントラ予測モジュール126は、復号ピクチャバッファ114中の復元されたビデオブロックを使用して、CUと同じピクチャの中の他のPUに対してイントラ予測を実行することができる。
エントロピー符号化モジュール116は、ビデオエンコーダ20の他の機能コンポーネントからデータを受信し得る。たとえば、エントロピー符号化モジュール116は、量子化モジュール106から変換係数ブロックを受信することができ、予測モジュール100からシンタクス要素を受信することができる。エントロピー符号化モジュール116がデータを受信するとき、エントロピー符号化モジュール116は、1つまたは複数のエントロピー符号化動作を実行して、エントロピー符号化されたデータを生成することができる。たとえば、ビデオエンコーダ20は、コンテキスト適応可変長コーディング(CAVLC)動作、コンテキスト適応バイナリ算術コーディング(CABAC)動作、可変対可変(V2V)長さコーディング動作、シンタクスベースのコンテキスト適応バイナリ算術コーディング(SBAC)動作、Probability Interval Partitioning Entropy(PIPE)コーディング動作、または別のタイプのエントロピー符号化動作をデータに対して実行することができる。エントロピー符号化モジュール116は、エントロピー符号化されたデータを含むビットストリームを出力することができる。
データに対してエントロピー符号化動作を実行することの一部として、エントロピー符号化モジュール116は、コンテキストモデルを選択することができる。エントロピー符号化モジュール116がCABAC動作を実行中である場合、コンテキストモデルは、ビンが特定の値を有する確率を示し得る。CABACのコンテキストでは、「ビン」という用語は、シンタクス要素の2値化されたバージョンのビットを指すのに使用される。
エントロピー符号化モジュール116がCAVLC動作を実行中である場合、コンテキストモデルは、対応するコードワードに係数をマッピングすることができる。CAVLCにおけるコードワードは、比較的短いコードが優勢シンボルに対応し、比較的長いコードが劣勢シンボルに対応するように構築され得る。適切なコンテキストモデルの選択は、エントロピー符号化動作のコーディング効率に影響を及ぼし得る。
いくつかの例では、ビデオエンコーダ20は、スライスのCUを、複数のタイルに分けることができる。ビデオエンコーダ20は、ピクチャの2つ以上の水平方向の境界と、ピクチャの2つ以上の垂直方向の境界とを定義することによって、CUをタイルに分けることができる。水平方向の境界は、ピクチャの上部の端と下部の端とを含み得る。垂直方向の境界は、ピクチャの左辺と右辺とを含み得る。ビデオエンコーダがタイルを使用しないとき、ビデオエンコーダ20は、ラスタースキャンの順序で、フレームのツリーブロックのすべてを符号化することができる。しかしながら、ビデオエンコーダ20がタイルを使用するとき、ビデオエンコーダは、ラスタースキャンの順序でタイルを符号化することができる。ビデオエンコーダ20がタイルを符号化するとき、ビデオエンコーダ20は、ラスタースキャンの順序で、タイル内のツリーブロック(すなわち、LCU)を符号化することができる。したがって、ビデオエンコーダ20は、タイルを使用して、ピクチャのツリーブロックの符号化の順序を変えることができる。
さらに、いくつかの例では、ビデオエンコーダ20が所与のCUを符号化しているとき、ビデオエンコーダ20は、所与のCUおよび空間的に近隣のCUが同じタイルに属している限り、空間的に近隣のCUと関連付けられる情報を使用して、所与のCUに対してイントラ予測を実行することができる。空間的に近隣のCUは、所与のCUと同じピクチャの中にあるCUであり得る。(ビデオエンコーダ20が所与のCUに対してインター予測を実行するとき、ビデオエンコーダ20はまた、時間的に近隣のCUのタイルとは無関係に、時間的に近隣のCUからの動き情報と画素情報とを使用することができる。)同様に、いくつかの例では、ビデオエンコーダ20が所与のCUを符号化しているとき、ビデオエンコーダ20は、所与のCUおよび空間的に近隣のCUが同じタイルの中にある限り、空間的に近隣のCUと関連付けられる情報を使用して、所与のCUのシンタクス要素をエントロピー符号化するためのコンテキストを選択することができる。これらの制約によって、ビデオエンコーダ20は、タイルの2つ以上を並行して符号化することが可能であり得る。
図5は、本開示の技法を実装し得る、例示的なビデオエンコーダ30を示すブロック図である。図5は、説明を目的に与えられており、本開示において広く例示され説明される技法に対する限定ではない。説明のために、本開示は、HEVCコーディングの状況において、ビデオデコーダ30を説明する。しかしながら、本開示の技法は、他のコーディング規格または方法にも適用可能であり得る。
図5の例において、ビデオデコーダ30は、複数の機能コンポーネントを含む。ビデオデコーダ30の機能コンポーネントは、エントロピー復号モジュール150と、予測モジュール152と、逆量子化モジュール154と、逆変換モジュール156と、復元モジュール158と、フィルタモジュール159と、復号ピクチャバッファ160とを含む。予測モジュール152は、動き補償モジュール162と、イントラ予測モジュール164とを含む。いくつかの例では、ビデオデコーダ30は、図4のビデオエンコーダ20に関して説明された符号化パスとは全般に逆の復号パスを実行し得る。他の例では、ビデオデコーダ30は、より多数の、より少数の、または異なる機能コンポーネントを含み得る。
ビデオデコーダ30は、符号化されたビデオデータを備えるビットストリームを受信し得る。ビットストリームは、複数のシンタクス要素を含み得る。ビデオデコーダ30がビットストリームを受信すると、エントロピー復号モジュール150は、ビットストリームに対して解析動作を実行することができる。ビットストリームに対して解析動作を実行した結果として、エントロピー復号モジュール150は、ビットストリームからシンタクス要素を抽出することができる。解析動作を実行することの一部として、エントロピー復号モジュール150は、ビットストリーム中のエントロピー符号化されたシンタクス要素を、エントロピー復号することができる。予測モジュール152、逆量子化モジュール154、逆変換モジュール156、復元モジュール158、およびフィルタモジュール159は、ビットストリームから抽出されたシンタクス要素に基づいて復号されたビデオデータを生成する、復元動作を実行することができる。
上で論じられたように、ビットストリームは、一連のNALユニットを備え得る。ビットストリームのNALユニットは、シーケンスパラメータセットNALユニット、ピクチャパラメータセットNALユニット、SEI NALユニットなどを含み得る。ビットストリームに対して解析動作を実行することの一部として、エントロピー復号モジュール150は、シーケンスパラメータセットNALユニットからのシーケンスパラメータセット、ピクチャパラメータセットNALユニットからのピクチャパラメータセット、SEI NALユニットからのSEIデータなどを抽出してエントロピー復号する、解析動作を実行することができる。
加えて、ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームに対して解析動作を実行することの一部として、エントロピー復号モジュール150は、コーディングされたスライスNALユニットからコーディングされたスライスを抽出しエントロピー復号する、解析動作を実行することができる。コーディングされたスライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関するシンタクス要素を含み得る。スライスヘッダ中のシンタクス要素は、スライスを含むピクチャと関連付けられたピクチャパラメータセットを識別するシンタクス要素を含み得る。エントロピー復号モジュール150は、コーディングされたスライスヘッダに対して、CAVLC復号動作などのエントロピー復号動作を実行して、スライスヘッダを回復することができる。
コーディングされたスライスNALユニットからスライスデータを抽出した後、エントロピー復号モジュール150は、スライスデータからコーディングされたツリーブロックを抽出することができる。エントロピー復号モジュール150は次いで、コーディングされたツリーブロックからコーディングされたCUを抽出することができる。エントロピー復号モジュール150は、コーディングされたCUからシンタクス要素を抽出する、解析動作を実行することができる。抽出されたシンタクス要素は、エントロピー符号化された変換係数ブロックを含み得る。エントロピー復号モジュール150は次いで、シンタクス要素に対してエントロピー復号動作を実行することができる。たとえば、エントロピー復号モジュール150は、変換係数ブロックに対してCABAC動作を実行することができる。
エントロピー復号モジュール150が区分されていないCUに対して解析動作を実行した後、ビデオデコーダ30は、区分されていないCUに対して復元動作を実行することができる。区分されていないCUに対して復元動作を実行するために、ビデオデコーダ30は、CUの各TUに対して復元動作を実行することができる。CUの各TUに対して復元動作を実行することによって、ビデオデコーダ30は、CUと関連付けられる残差ビデオブロックを復元することができる。
TUに対して復元動作を実行することの一部として、逆量子化モジュール154は、TUと関連付けられた変換係数ブロックを逆量子化、すなわち、量子化解除することができる。逆量子化モジュール154は、HEVCのために提案される、またはH.264復号規格によって定義される逆量子化処理と同様の方式で、変換係数ブロックを逆量子化することができる。逆量子化モジュール154は、量子化の程度を判定し、同様に、逆量子化モジュール154が適用するべき逆量子化の程度を判定するための、変換係数ブロックのCUのためにビデオエンコーダ20によって計算される量子化パラメータQPを使用することができる。
逆量子化モジュール154が変換係数ブロックを逆量子化した後、逆変換モジュール156は、変換係数ブロックと関連付けられたTUの残差ビデオブロックを生成することができる。逆変換モジュール156は、TUの残差ビデオブロックを生成するために、逆変換を変換係数ブロックに対して適用することができる。たとえば、逆変換モジュール156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を変換係数ブロックに適用することができる。
いくつかの例では、逆変換モジュール156は、ビデオエンコーダ20からのシグナリングに基づいて、変換係数ブロックに適用するべき逆変換を判定することができる。そのような例では、逆変換モジュール156は、変換係数ブロックと関連付けられたツリーブロックの4分木のルートノードにおいてシグナリングされた変換に基づいて、逆変換を判定することができる。他の例では、逆変換モジュール156は、ブロックサイズ、コーディングモードなど、1つまたは複数のコーディング特性から逆変換を推論することができる。いくつかの例では、逆変換モジュール156はカスケード逆変換を適用することができる。
インター予測を使用してCUのPUが符号化された場合、動き補償モジュール162は、動き補償を実行して、PUの予測されるビデオブロックを生成することができる。動き補償モジュール162は、PUの動き情報を使用して、PUの参照サンプルを識別することができる。PUの参照サンプルは、PUとは時間的に異なるピクチャ中にあり得る。PUの動き情報は、動きベクトルと、参照ピクチャインデックスと、予測方向とを含み得る。動き補償モジュール162は、PUの参照サンプルを使用して、PUの予測されたビデオブロックを生成することができる。いくつかの例では、動き補償モジュール162は、PUに隣接するPUの動き情報に基づいて、PUの動き情報を予測することができる。本開示では、ビデオエンコーダ20がインター予測を使用してPUの予測されたビデオブロックを生成する場合、PUはインター予測されたPUである。
いくつかの例では、動き補償モジュール162は、補間フィルタに基づく補間を実行することによって、PUの予測されたビデオブロックを精緻化することができる。サブサンプル精度を有する動き補償に使用されるべき補間フィルタの識別子は、シンタクス要素中に含まれ得る。動き補償モジュール162は、PUの予測されたビデオブロックの生成中にビデオエンコーダ20によって使用されるのと同じ補間フィルタを使用して、参照ブロックのサブ整数サンプルに対する補間される値を算出することができる。動き補償モジュール162は、受信されたシンタクス情報に従って、ビデオエンコーダ20によって使用された補間フィルタを判定し、その補間フィルタを使用して予測されるビデオブロックを生成することができる。
イントラ予測を使用してPUが符号化される場合、イントラ予測モジュール164は、イントラ予測を実行して、PUの予測されるビデオブロックを生成することができる。たとえば、イントラ予測モジュール164は、ビットストリーム中のシンタクス要素に基づいて、PUのイントラ予測モードを判定することができる。ビットストリームは、PUのイントラ予測モードを予測するのにイントラ予測モジュール164が使用することができる、シンタクス要素を含み得る。たとえば、イントラ予測モジュール164は、図6の例示的なイントラ予測動作を実行することができる。
いくつかの例では、シンタクス要素は、イントラ予測モジュール164が別のPUのイントラ予測モードを使用して、現在のPUのイントラ予測モードを予測するべきであることを示し得る。たとえば、現在のPUのイントラ予測モードが、隣接するPUのイントラ予測モードと同じであることがあり得る。言い換えると、隣接するPUのイントラ予測モードは、現在のPUに対して最もあり得るモードであり得る。したがって、この例では、ビットストリームは、PUのイントラ予測モードが、隣接するPUのイントラ予測モードと同じであることを示す、小さなシンタクス要素を含み得る。イントラ予測モジュール164は次いで、イントラ予測モードを使用して、空間的に隣接するPUのビデオブロックに基づいて、PUの予測データ(たとえば、予測されるサンプル)を生成することができる。
復元モジュール158は、適用可能なとき、CUのTUと関連付けられる残差ビデオブロックとCUのPUの予測されるビデオブロックとを使用して、すなわち、イントラ予測データとインター予測データのいずれかを使用して、CUのビデオブロックを復元することができる。したがって、ビデオデコーダ30は、ビットストリーム中のシンタクス要素に基づいて、予測されたビデオブロックと残差ビデオブロックとを生成することができ、予測されたビデオブロックと残差ビデオブロックとに基づいて、ビデオブロックを生成することができる。復元モジュール158がCUのビデオブロックを復元した後、フィルタモジュール159は、デブロッキング動作を実行して、CUと関連付けられるブロッキングアーチファクトを低減することができる。
復号ピクチャバッファ160は、ビデオデータのピクチャの復号されたサンプルを記憶することができる。したがって、フィルタモジュール159がデブロッキング動作を実行した後、ビデオデコーダ30は、復号ピクチャバッファ160にCUのビデオブロックを記憶することができる。復号ピクチャバッファ160は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために、参照ピクチャを与えることができる。たとえば、ビデオデコーダ30は、復号ピクチャバッファ160中のビデオブロックに基づいて、他のCUのPUに対して、イントラ予測動作またはインター予測動作を実行することができる。
図6は、例示的なイントラ予測動作200を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30のようなビデオコーダは、イントラ予測動作200を実行することができる。他の例では、ビデオコーダは、イントラ予測動作200以外のイントラ予測動作を使用することができる。たとえば、他の例では、ビデオコーダは、ビデオコーダがイントラ予測動作200よりも多数の、少数の、または異なるステップを実行する、イントラ予測動作を実行することができる。
ビデオコーダがイントラ予測動作200を開始した後、ビデオコーダは、PUのためのパディング動作を実行することができる(202)。ビデオコーダがパディング動作を実行するとき、ビデオコーダは、PUと関連付けられる利用不可能な境界画素に値を割り当てることができる。ビデオコーダは、様々なパディング動作を実行することができる。たとえば、ビデオコーダは、図7の例示的なパディング動作、図8の例示的なパディング動作、図10の例示的なパディング動作、または別のパディング動作を実行することができる。
ビデオコーダがパディング動作を実行した後、ビデオコーダは、境界画素に基づいて、PUのイントラ予測されたビデオブロックを生成することができる(204)。ビデオコーダは、境界画素の一部またはすべてを使用して、イントラ予測されたビデオブロックを生成することができる。
図7は、例示的なパディング動作250を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30のようなビデオコーダは、パディング動作250を実行することができる。他の例では、ビデオコーダは、パディング動作250以外のパディング動作を使用することができる。たとえば、他の例では、ビデオコーダは、ビデオコーダがパディング動作250よりも多数の、少数の、または異なるステップを実行する、パディング動作を実行することができる。
ビデオコーダがパディング動作250を開始した後、ビデオコーダは、左下の境界画素を示すように画素インジケータを設定することができる(252)。たとえば、図2の例では、ビデオコーダは、境界画素Pを示すように画素インジケータを設定することができる。説明を簡単にするために、本開示は、現在の境界画素として、画素インジケータによって示される境界画素を指し得る。
次に、ビデオコーダは、現在の境界画素が利用可能であるかどうかを判定することができる(254)。ビデオコーダは、様々な方法で、現在の境界画素が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、現在の境界画素が利用可能かどうかを判定することができる。
現在の境界画素が利用可能ではない(254の「いいえ」)と判定したことに応答して、ビデオコーダは、デフォルト値を現在の境界画素に割り当てることができる(256)。現在の境界画素は左下の境界画素なので、ビデオコーダは、左下の境界画素が利用可能かどうかを判定し、左下の境界画素が利用可能ではないと判定したことに応答して、デフォルト値を左下の境界画素に割り当てることができる。別の例では、ビデオコーダは、左下の境界画素が利用不可能であると判定したことに応答して、次の利用可能な境界画素の値を左下の境界画素に割り当てることができる。
値を現在の境界画素に割り当てた後、または、現在の境界画素が利用可能である(254の「はい」)と判定したことに応答して、ビデオコーダは、次の境界画素を示すように画素インジケータを更新することができる(258)。現在の境界画素が左下の境界画素と角の境界画素(たとえば、図2の境界画素R)との間にある場合、次の境界画素は、現在の境界画素のすぐ上にある。たとえば、図2の例では、現在の境界画素が境界画素Pである場合、次の境界画素は境界画素Oである。現在の境界画素が境界画素Oである場合、次の境界画素は境界画素Nであり、以下同様である。現在の画素が角の境界画素である場合、または、角の境界画素と右上の境界画素(たとえば、図2の境界画素H)との間にある場合、次の境界画素は、現在の境界画素のすぐ右にある。たとえば、図2の例では、現在の境界画素が境界画素Rである場合、次の境界画素は境界画素Aである。現在の境界画素が境界画素Aである場合、次の境界画素は境界画素Bであり、以下同様である。画素インジケータを更新することによって、次の境界画素が現在の境界画素になる。
画素インジケータを更新した後、ビデオコーダは、現在の境界画素が利用可能であるかどうかを判定することができる(260)。現在の境界画素が利用可能ではない(260の「いいえ」)と判定したことに応答して、ビデオコーダは、前の境界画素の値を現在の境界画素に割り当てることができる(262)。言い換えると、ビデオコーダは、順序に従って現在の境界画素の直前の境界画素の値を、現在の境界画素に割り当てることができる。たとえば、図2の例では、現在の境界画素が境界画素Mであり境界画素Mが利用不可能である場合、ビデオコーダは、境界画素Nの値を境界画素Mに割り当てることができる。現在の境界画素が境界画素Lであり境界画素Lが利用不可能である場合、ビデオコーダは、境界画素Mの値を境界画素Lに割り当てることができ、以下同様である。ビデオコーダが第1の境界画素の値を第2の境界画素に割り当てるとき、ビデオコーダは、第2の境界画素の実際の値を変えなくてよいが、イントラ予測されたビデオブロックを生成する目的で、第2の境界画素の値として第1の境界画素の値を使用することができる。
ステップ262を実行した後で、または、現在の境界画素が利用可能である(260の「はい」)と判定したことに応答して、ビデオコーダは、現在の境界画素が右上の境界画素であるかどうかを判定することができる(264)。たとえば、図2の例では、ビデオコーダは、現在の境界画素が境界画素Hかどうかを判定することができる。現在の境界画素が右上の境界画素である(264の「はい」)と判定したことに応答して、ビデオコーダは、パディング動作250を終了することができる。一方、現在の境界画素が右上の境界画素ではない(264の「いいえ」)と判定したことに応答して、ビデオコーダは、画素インジケータを再び更新することができる(258)。ビデオコーダは次いで、新たな現在の境界画素に関して、ステップ260〜264を繰返すことができる。
このようにして、ビデオコーダは、左下の境界画素から始まり、境界画素を順番に通って右上の境界画素に至る順序に従って、境界画素のセットを処理するパディング動作を実行することができる。パディング動作が利用不可能な境界画素を処理するとき、パディング動作は、パディング動作によって以前処理された画素の値に基づいて、利用不可能な境界画素に値を割り当てる。
パディング動作250と同様の例示的なパディング動作では、(x,y)はビデオブロックの座標を示し、(x−1,y−1)は角の境界画素の座標を示す。(x−1,y−1)が利用不可能である場合、ビデオコーダが利用可能な境界画素に達するまで、ビデオコーダは、左から右へ、上側の予測因子を確認することができる。利用可能な境界画素が座標(x+d,y−1)を有する場合、ビデオコーダは、(x+d,y−1)における境界画素の値を、(x−1,y−1)から(x+d−1,y−1)までのすべての境界画素に割り当てることができる。それ以外の場合、(x−1,y−1)における境界画素が利用可能であれば、ビデオコーダは変数dを−1に設定し、次の擬似コードを実行することができる。
上の擬似コードでは、Nはビデオブロックの幅を示し得る。加えて、ビデオコーダは、(x−1,y)における境界画素が利用可能かどうかを判定することができる。(x−1,y)における境界画素が利用可能ではない場合、ビデオコーダが利用可能な境界画素に達するまで、ビデオコーダは、上から下へ、左側の予測因子を確認することができる。利用可能な境界画素が座標(x−1,y+d)を有する場合、ビデオコーダは、(x−1,y+d)における境界画素の値を、(x−1,y)から(x−1,y+d−1)までのすべての境界画素に割り当てることができる。それ以外の場合、(x−1,y)における境界画素が利用可能であれば、ビデオコーダは変数dを0に設定し、次の擬似コードを実行することができる。
図7の例では、x=−1、y=nS×2−2...−1に対して、p[x,y]が利用不可能な境界画素である場合、ビデオコーダは、p[x,y]の値をp[x,y+1]の値で置き換えることができる。x=0..nS×2−1,y−1に対して、p[x,y]が利用不可能な境界画素である場合、p[x,y]の値をp[x−1,y]の値で置き換える。nSは、イントラ予測されたビデオブロックの幅または高さに等しく、pは、サンプルの二次元配列であり、p[0,0]は、イントラ予測されたビデオブロックの左上の輝度サンプルである。
図8は、図7の例示的なパディング動作が境界画素の中を進む順序を示す、概念図である。図8の例に示されるように、パディング動作は、左下の境界画素において開始し、角の境界画素に向かって上に進み、次いで右上の境界画素に向かって右に進む。
図9は、例示的なパディング動作300を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30のようなビデオコーダは、パディング動作300を実行することができる。他の例では、ビデオコーダは、パディング動作300以外のパディング動作を使用することができる。たとえば、他の例では、ビデオコーダは、ビデオコーダがパディング動作300よりも多数の、少数の、または異なるステップを実行する、パディング動作を実行することができる。
ビデオコーダがパディング動作300を開始した後、ビデオコーダは、分割点を示すように第1の画素インジケータと第2の画素インジケータとを設定することができる(302)。分割点は、境界画素を2つのセグメントに分けることができる。セグメントの一方は、分割点の上および右にある境界画素を含み得る。セグメントの他方は、分割点の下および左にある境界画素を含み得る。
分割点は、様々な境界画素の1つであり得る。たとえば、ビデオコーダは、第1の画素インジケータと第2の画素インジケータとを、角の境界画素(たとえば、図2の境界画素R)に設定することができる。別の例では、ビデオコーダは、第1の画素インジケータと第2の画素インジケータとを、別の境界画素(たとえば、図2の境界画素L)を示すように設定することができる。
分割点を示すように第1の画素インジケータと第2の画素インジケータとを設定した後、ビデオコーダは、分割点が利用可能かどうかを判定することができる(304)。ビデオコーダは、様々な方法で、分割点が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、分割点が利用可能かどうかを判定することができる。
分割点が利用可能ではない(304の「いいえ」)と判定したことに応答して、ビデオコーダは、分割点の値を導出することができる(306)。ビデオコーダは、様々な方法で分割点の値を導出することができる。たとえば、ビデオコーダは、分割点に隣接する境界画素のいずれかが利用可能かどうかを判定することができる。この例では、分割点に隣接する境界画素の1つが利用可能である場合、ビデオコーダは、隣接する境界画素の値を分割点に割り当てることによって、分割点の値を導出することができる。さらに、この例では、ビデオコーダは、隣接する境界画素のいずれもが利用可能ではない場合、デフォルト値を分割点に割り当てることができる。たとえば、分割点が角の分割点である場合、ビデオコーダは、次の擬似コードを使用して、分割点の値を導出することができる。
上の擬似コードでは、PL1は、角の境界画素の下の境界画素の値を示すことができ、Ppadは、角の境界画素に割り当てられるべき導出された値を示すことができ、PA1は、角の境界画素の右の境界画素の値を示すことができる。角の境界画素、および、角の境界画素の下の境界画素と角の境界画素の右の境界画素との両方が、利用不可能である場合、このような場合はまれにしか起こり得ないので、角の境界画素に対してデフォルト値を使用することは、コーディング性能にほとんど影響を及ぼし得ない。
分割点の値を導出した後、または、分割点が利用可能である(304の「はい」)と判定した後、ビデオコーダは、第1の画素インジケータによって示された境界画素の下または左にある境界画素を示すように、第1の画素インジケータを更新することができる(308)。説明を簡単にするために、本開示は、第1の画素インジケータによって示される境界画素を、第1の現在の境界画素と呼ぶことがある。たとえば、図2の例では、第1の現在の境界画素が境界画素Bである場合、ビデオコーダは、境界画素Aを示すように第1の画素インジケータを更新することができる。第1の現在の境界画素が境界画素Rである場合、ビデオコーダは、境界画素Iを示すように第1の画素インジケータを更新することができる。第1の現在の境界画素が境界画素Iである場合、ビデオコーダは、境界画素Jを示すように第1の画素インジケータを更新することができる。
第1の画素インジケータを更新した後、ビデオコーダは、第1の現在の境界画素が利用可能であるかどうかを判定することができる(310)。ビデオコーダは、様々な方法で、第1の現在の境界画素が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、第1の現在の境界画素が利用可能かどうかを判定することができる。
第1の現在の境界画素が利用不可能である(310の「いいえ」)と判定したことに応答して、ビデオコーダは、前の境界画素の値を第1の現在の境界画素に割り当てることができる(312)。たとえば、図2の例では、第1の現在の境界画素が境界画素Iであり境界画素Iが利用不可能である場合、ビデオコーダは、境界画素Rの値を境界画素Iに割り当てることができる。第1の現在の境界画素が境界画素Jであり境界画素Jが利用不可能である場合、ビデオコーダは、境界画素Iの値を境界画素Jに割り当てることができ、以下同様である。
ビデオコーダがステップ310を実行すると、または、第1の現在の境界画素が利用可能である(310の「はい」)と判定した後、ビデオコーダは、第1の現在の境界画素が左下の境界画素であるかどうかを判定することができる(314)。第1の現在の境界画素が左下の境界画素である(314の「はい」)と判定したことに応答して、ビデオコーダは、分割点境界画素の左または下で行われる、境界画素に関するパディング動作300を終了することができる。しかしながら、第1の現在の境界画素が左下の境界画素ではない(314の「いいえ」)と判定したことに応答して、ビデオコーダは、第1の画素インジケータを再び更新し(308)、別の境界画素に関してステップ310〜314を実行することができる。このようにして、パディング動作300は、分割点境界画素の左または下にある各々の利用不可能な境界画素に、値を割り当てることができる。
加えて、ステップ306で分割点境界画素の値を導出した後、または、分割点が利用可能である(304の「はい」)と判定したことに応答して、ビデオコーダは、第2の画素インジケータによって示された境界画素の上または右にある境界画素を示すように、第2の画素インジケータを更新することができる(316)。説明を簡単にするために、本開示は、第2の画素インジケータによって示される境界画素を、第2の現在の境界画素と呼ぶことがある。
第2の画素インジケータを更新した後、ビデオコーダは、第2の現在の境界画素が利用可能であるかどうかを判定することができる(318)。ビデオコーダは、様々な方法で、現在の境界画素が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、第2の現在の境界画素が利用可能かどうかを判定することができる。
第2の現在の境界画素が利用不可能である(318の「いいえ」)と判定したことに応答して、ビデオコーダは、前の境界画素の値を第2の現在の境界画素に割り当てることができる(320)。たとえば、図2の例では、第2の現在の境界画素が境界画素Dであり境界画素Dが利用不可能である場合、ビデオコーダは、境界画素Cの値を境界画素Dに割り当てることができる。
ステップ320を実行した後で、または、第2の現在の境界画素が利用可能である(318の「はい」)とビデオコーダが判定した後で、ビデオコーダは、第2の現在の境界画素が右上の境界画素であるかどうかを判定することができる(322)。第2の現在の境界画素が右上の境界画素であると判定したことに応答して、ビデオコーダは、分割点境界画素の右または上にある境界画素に関するパディング動作300を終了することができる(322の「はい」)。しかしながら、第2の現在の境界画素が右上の境界画素ではない(322の「いいえ」)と判定したことに応答して、ビデオコーダは、第2の画素インジケータを更新し(316)、別の境界画素に関してステップ318〜322を実行することができる。このようにして、ビデオコーダは、分割点の上または右にある各境界画素を処理することができる。
図9の例では、ビデオコーダは、ステップ308〜314とステップ316〜322とを並行に実行することができる。他の例では、ビデオコーダは、ステップ308〜314とステップ316〜322とを順番に実行することができる。
図10は、図9のパディング動作が境界画素の中を進む例示的な順序を示す、概念図である。図10の例に示されるように、角の境界画素は、分割点境界画素である。ビデオコーダは、角の境界画素の下の境界画素(たとえば、ステップ308〜314における)と、角の境界画素の右の境界画素(たとえば、ステップ316〜322)とを同時に処理することができる。図10の例では、角の境界画素は影が付けられている。角の境界画素が利用不可能である場合、ビデオコーダは、近隣の境界画素340のいずれかまたは両方から、角の境界画素の値を導出することができる。
別の例では、ビデオコーダは、ビデオコーダが利用可能な境界画素を特定するまで、上側の予測因子全体を左から右に確認することができる。ビデオコーダは次いで、角の画素と、角の画素と利用可能な境界画素との間のすべての境界画素とを、利用可能な境界画素の値に設定することができる。この例では、角の画素の下の境界画素が利用不可能である場合、ビデオコーダは、ビデオコーダが利用可能な境界画素を特定するまで、左側の予測因子に沿って上から下に確認することができる。ビデオコーダは次いで、角の画素の下の各境界画素を、利用可能な境界画素の値に設定することができる。
図11は、例示的なパディング動作350を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30のようなビデオコーダは、パディング動作350を実行することができる。他の例では、ビデオコーダは、パディング動作350以外のパディング動作を使用することができる。たとえば、他の例では、ビデオコーダは、ビデオコーダがパディング動作350よりも多数の、少数の、または異なるステップを実行する、パディング動作を実行することができる。
パディング動作350では、境界画素は、分割点の複数の候補を含む。分割点の複数の候補は、様々な境界画素の1つを含み得る。たとえば、分割点の複数の候補は、角の境界画素と、角の境界画素と左下の境界画素との間の途中の境界画素と、角の境界画素と右上の境界画素との間の途中の境界画素とを含み得る。別の例では、分割点の複数の候補は、左下の境界画素と右上の境界画素とを含み得る。別の例では、分割点の複数の候補は、角の境界画素のすぐ右の境界画素と、角の境界画素のすぐ下の境界画素とを含み得る。
別の例では、分割点の複数の候補は、2つの境界画素PLXとPAYとの間のすべての境界画素を含み得る。この例では、PLXは、角の境界画素から左下の境界画素までの任意の境界画素であってよく、PAYは、角の境界画素から右上の境界画素までの任意の境界画素であってよい。この例では、ビデオコーダは、利用可能な分割点候補に対して、PLXからPAYに向かって、またはPAYからPLXに向かって順番に、分割点候補を探索することができる。このようにして利用可能な分割点候補を探索することで、一次元探索に対する探索の複雑さを下げることができる。たとえば、この例では、分割点が左下の境界画素である場合、左下の境界画素において始まり、順番に境界画素を通って右上の境界画素に至る順序に従って境界画素のセットを処理するパディング動作を、ビデオコーダが実行し、パディング動作が利用不可能な境界画素を処理する場合、パディング動作は、パディング動作によって以前処理された境界画素の値に基づいて、利用不可能な境界画素に値を割り当てる。
別の例では、分割点の複数の候補は、境界画素のすべてを含み得る。この例では、ビデオコーダは、分割点候補全体にわたって、左下の境界画素から右上の境界画素に向かって、またはその逆の向きで、ある利用可能な分割点候補を順番に探索することができる。このようにして利用可能な分割点候補を探索することで、一方向探索に対する探索の複雑さを下げることができる。
ビデオコーダがパディング動作350を開始した後、ビデオコーダは、分割点候補の最初の1つを示すように、分割点インジケータを設定することができる(352)。説明を簡単にするために、本開示は、分割点インジケータによって示される分割点候補を、現在の分割点と呼ぶことがある。たとえば、複数の分割点候補が角の境界画素を含む場合、ビデオコーダは、分割点インジケータを角の境界画素に設定することができる。
分割点候補の1つを示すように分割点インジケータを設定した後、ビデオコーダは、現在の分割点が利用可能かどうかを判定することができる(354)。ビデオコーダは、様々な方法で、現在の分割点が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、現在の分割点が利用可能かどうかを判定することができる。
現在の分割点が利用不可能である(354の「いいえ」)場合、ビデオコーダは、現在の分割点が確認されるべき分割点候補の最後の1つであるかどうかを判定することができる(356)。現在の分割点が分割点候補の最後の1つであると判定したことに応答して、ビデオコーダは、デフォルト値を現在の分割点に割り当てることができる(358)。他の例では、ビデオコーダは、デフォルト値を使用する代わりに、近隣の画素の値に基づく値を、現在の分割点に割り当てることができる。
一方、現在の分割点が分割点候補の最後の1つではないと判定したことに応答して、ビデオコーダは、分割点インジケータが分割点候補の次の1つを示すように、分割点インジケータを更新することができる(360)。たとえば、図2の例では、複数の分割点候補は、境界画素Lと、境界画素Rと、境界画素Dとを含み得る。現在の分割点が境界画素Lであり境界画素Lが利用不可能である場合、ビデオコーダは、分割点インジケータが境界画素Rを示すように、分割点インジケータを更新することができる。ビデオコーダは、様々な方法で、利用可能な分割点候補を探索することができる。たとえば、ビデオコーダは、左下の境界画素に最も近い分割点候補から始めて、次いで、右上の境界画素に最も近い分割点候補に向かって、分割点候補全体を探索することができる。
分割点インジケータを更新した後、ビデオコーダは、現在の分割点が利用可能であるかどうかを再び判定することができる(354)。このようにして、ビデオコーダは、分割点候補の1つが利用可能であるとビデオコーダが判定するまで、または、分割点候補のいずれもが利用可能ではないとビデオコーダが判定するまで、またはこれらと逆のことをビデオコーダが判定するまで、分割点候補を処理することができる。
ステップ358を実行した後、または、現在の分割点が利用可能である(354の「はい」)と判定した後、ビデオコーダは、現在の分割点を示すように、第1の画素インジケータと第2の画素インジケータとを設定することができる(362)。たとえば、現在の分割点が角の境界画素である場合、ビデオコーダは、角の境界画素(たとえば、図2の境界画素R)を示すように、第1の画素インジケータと第2の画素インジケータとを設定することができる。
現在の分割点を示すように第1の画素インジケータと第2の画素インジケータとを設定した後、ビデオコーダは、第1の画素インジケータによって示された境界画素の下または左にある境界画素を示すように、第1の画素インジケータを更新することができる(364)。説明を簡単にするために、本開示は、第1の画素インジケータによって示される境界画素を、第1の現在の境界画素と呼ぶことがある。たとえば、図2の例では、第1の現在の境界画素が境界画素Bである場合、ビデオコーダは、境界画素Aを示すように第1の画素インジケータを更新することができる。第1の現在の境界画素が境界画素Rである場合、ビデオコーダは、境界画素Iを示すように第1の画素インジケータを更新することができる。第1の現在の境界画素が境界画素Iである場合、ビデオコーダは、境界画素Jを示すように第1の画素インジケータを更新することができる。
第1の画素インジケータを更新した後、ビデオコーダは、第1の現在の境界画素が利用可能であるかどうかを判定することができる(366)。ビデオコーダは、様々な方法で、第1の現在の境界画素が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、第1の現在の境界画素が利用可能かどうかを判定することができる。
第1の現在の境界画素が利用不可能である(366の「いいえ」)と判定したことに応答して、ビデオコーダは、前の境界画素の値を第1の現在の境界画素に割り当てることができる(368)。たとえば、図2の例では、第1の現在の境界画素が境界画素Iであり境界画素Iが利用不可能である場合、ビデオコーダは、境界画素Rの値を境界画素Iに割り当てることができる。第1の現在の境界画素が境界画素Jであり境界画素Jが利用不可能である場合、ビデオコーダは、境界画素Iの値を境界画素Jに割り当てることができ、以下同様である。
ビデオコーダが前の境界画素の値を第1の現在の境界画素に割り当てると、または、第1の現在の境界画素が利用可能である(366の「はい」)と判定した後、ビデオコーダは、第1の現在の境界画素が左下の境界画素であるかどうかを判定することができる(370)。第1の現在の境界画素が左下の境界画素である(370の「はい」)と判定したことに応答して、ビデオコーダは、現在の分割点の左または下で行われる、境界画素に関するパディング動作300を終了することができる。しかしながら、第1の現在の境界画素が左下の境界画素ではない(370の「いいえ」)と判定したことに応答して、ビデオコーダは、第1の画素インジケータを再び更新し(364)、別の境界画素に関してステップ366〜370を実行することができる。このようにして、パディング動作350は、現在の分割点の左または下にある各々の利用不可能な境界画素に、値を割り当てることができる。
加えて、ステップ362において第1の画素インジケータと第2の画素インジケータとを現在の分割点に設定した後、ビデオコーダは、第2の画素インジケータによって示された境界画素の上または右にある境界画素を示すように、第2の画素インジケータを更新することができる(372)。説明を簡単にするために、本開示は、第2の画素インジケータによって示される境界画素を、第2の現在の境界画素と呼ぶことがある。
第2の画素インジケータを更新した後、ビデオコーダは、第2の現在の境界画素が利用可能であるかどうかを判定することができる(374)。ビデオコーダは、様々な方法で、第2の現在の境界画素が利用可能であるかどうかを判定することができる。たとえば、ビデオコーダは、図13の例示的な動作を実行して、第2の現在の境界画素が利用可能かどうかを判定することができる。
第2の現在の境界画素が利用不可能である(374の「いいえ」)と判定したことに応答して、ビデオコーダは、前の境界画素の値を第2の現在の境界画素に割り当てることができる(376)。たとえば、図2の例では、第2の現在の境界画素が境界画素Dであり境界画素Dが利用不可能である場合、ビデオコーダは、境界画素Cの値を境界画素Dに割り当てることができる。
前の境界画素の値を第2の現在の境界画素に割り当てた後、または、第2の現在の境界画素が利用可能である(374の「はい」)とビデオコーダが判定した後、ビデオコーダは、第2の現在の境界画素が右上の境界画素であるかどうかを判定することができる(378)。第2の現在の境界画素が右上の境界画素であると判定したことに応答して、ビデオコーダは、現在の分割点の右または上にある境界画素に関するパディング動作300を終了することができる。しかしながら、第2の現在の境界画素が右上の境界画素ではない(378の「いいえ」)と判定したことに応答して、ビデオコーダは、第2の画素インジケータを更新し(372)、別の境界画素に関してステップ374〜378を実行することができる。このようにして、ビデオコーダは、分割点境界画素の上または右にある各境界画素を処理することができる。
図11の例では、ビデオコーダは、ステップ364〜370とステップ372〜378とを並行に実行することができる。他の例では、ビデオコーダは、ステップ364〜370とステップ372〜378とを順番に実行することができる。
図12は、図11のパディング動作が境界画素の中を進む例示的な順序を示す、概念図である。図12の例に示されるように、影が付けられた境界画素は、分割点候補である。図12の例では、境界画素400は、選択された分割点であってよく、ビデオコーダは、選択された分割点の下の境界画素(たとえば、図11のステップ364〜370における)と、選択された分割点の上および右にある境界画素(たとえば、ステップ372〜378)とを同時に処理することができる。
図13は、境界画素が利用可能かどうかを判定するための例示的な動作450を示すフローチャートである。ビデオエンコーダ20またはビデオデコーダ30のようなビデオコーダは、動作450を実行することができる。他の例では、ビデオコーダは、境界画素が利用可能かどうかを判定するために、動作450以外の動作を使用することができる。たとえば、他の例では、ビデオコーダは、ビデオコーダが動作450よりも多数の、少数の、または異なるステップを実行する、動作を実行することができる。
ビデオコーダが動作450を開始した後、ビデオコーダは、境界画素が現在のピクチャの境界の外側にあるかどうかを判定することができる(452)。現在のピクチャは、ビデオコーダが現在コーディングしているピクチャであり得る。たとえば、ビデオコーダが、ビデオブロックが現在のピクチャの上端または左端に隣接しているPUに対して、イントラ予測動作を実行している場合、ビデオブロックの上または左の1つまたは複数の画素は、現在のピクチャの境界の外側にあり得る。境界画素が現在のピクチャの境界の外側にあると判定した(452の「はい」)ことに応答して、ビデオコーダは、境界画素が利用不可能であると判定することができる(454)。
境界画素が現在のピクチャの境界の外側にないと判定した(452の「いいえ」)ことに応答して、ビデオコーダは、境界画素が現在のスライスまたはタイルの境界の外側にあるかどうか、または、スライスにまたがる/タイルにまたがる予測が許可されていないかどうかを判定することができる(456)。現在のスライスまたはタイルは、ビデオコーダが現在コーディングしているスライスまたはタイルであり得る。たとえば、ビデオコーダが、ビデオブロックが現在のスライスまたはタイルの上端または左端に隣接しているPUに対して、イントラ予測動作を実行している場合、ビデオブロックの上または左の1つまたは複数の画素は、現在のスライスまたはタイルの境界の外側にあり得る。スライスにまたがる予測が許可される場合、ビデオコーダは、第1のスライス中の画素の値を使用して、第2のスライス中のCUのイントラ予測されたビデオブロックを生成することを許可される。境界画素が現在のスライスまたはタイルの境界の外側にあると判定したこと、または、スライス/タイルにまたがる予測が許可されていないと判定したことに応答して(456の「はい」)、ビデオコーダは、境界画素が利用不可能であると判定することができる(454)。
しかしながら、境界画素が現在のスライスまたはタイルの外側にないと判定したこと、または、スライスにまたがる/タイルにまたがる予測が許可されていると判定したことに応答して(456の「いいえ」)、ビデオコーダは、境界画素がインター予測されたCUと関連付けられるかどうかと、制約されたイントラ予測が可能にされるかどうかとを、判定することができる(458)。言い換えると、境界画素がインター予測されたCUに属し、制約されたイントラ予測が可能にされる場合、境界画素は、利用可能または利用不可能であるとして標識され得る。境界画素がインター予測されたCUと関連付けられるビデオブロック中にある場合、境界画素は、インター予測されたCUと関連付けられ得る。
H.264/AVCでは、インター予測されたスライス中のマクロブロック(MB)は、インターMBとイントラMBのいずれかとしてコーディングされ得る。同様に、HEVCでは、PスライスまたはBスライス中のCUは、インター予測されたCUまたはイントラ予測されたCUであり得る。イントラMBおよびイントラ予測されたCUは、近隣のビデオブロックから予測される。加えて、ビデオコーダは、制約されたイントラMBをコーディングすることができる。ビデオコーダは、同じスライス中の近隣のイントラMBから、制約されたイントラMBを生成することができる。本開示の技法によれば、ビデオコーダは、近隣のイントラ予測されたCUのビデオブロックから制約されたイントラ予測されたCUを生成することができるが、近隣のインター予測されたCUのビデオブロックからは生成することができない。インターモードおよび制約されたイントラモードのみでピクチャのグループがコーディングされているかどうかを規定するために、ピクチャパラメータセット(PPS)において、constrained_intra_pred_flagがシグナリングされ得る。
イントラリフレッシュは、エラー伝搬を減らすために、ビデオエンコーダがイントラMBまたはイントラ予測されたCUを挿入することを可能にする、エラー回復ツールであり得る。参照ピクチャが失われた場合、ビデオデコーダは、参照ピクチャを使用するインターMBまたはインター予測されたCUを正確に復号することが不可能であり得る。インターMBまたはインター予測されたCUがイントラMBまたはイントラ予測されたCUを予測するために使用される場合、ビデオコーダは、イントラMBまたはイントラ予測されたCUを復号することが不可能であり得る。したがって、エラーは、イントラMBまたはイントラ予測されたCUに伝搬し得る。制約されたイントラMBおよび制約されたイントラ予測されたCUは、インターMBまたはインター予測されたCUに依存しないので、参照ピクチャの喪失は、ビデオデコーダが制約されたイントラMBまたはイントラ予測されたCUを復号することを妨げない。したがって、制約されたイントラMBまたは制約されたイントラ予測されたCUとしてイントラMBまたはイントラ予測されたCUを復号することで、よりエラー回復力が高くなり得る。
スケーラブルビデオコーディング(SVC:scalable video coding)では、ビデオデコーダは、ビデオデコーダの単一ループの復号設計が原因で、複数の従属レイヤ(同じまたは異なる解像度を有する)を完全には復号できない。この場合、イントラ予測されたベースレイヤ(BL)モードが使用されるとき、ビデオデコーダは、対応するベースレイヤイントラMBが制約されたイントラMBとしてコーディングされる場合、エンハンスメントレイヤMBのみを正確に復号することができる。それ以外の場合は、ビデオデコーダは、復元された近隣のインターMBから、ベースレイヤイントラMBを予測する必要があることがあり、この近隣のインターMBは、単一ループの復号の場合においてエンハンスメントレイヤを復号するときは、利用可能ではないことがある。
境界画素がインター予測されたCUと関連付けられ、制約されたイントラ予測が可能にされていると判定したことに応答して(458の「はい」)、ビデオコーダは、境界画素が利用不可能であると判定することができる(454)。一方、境界画素がインター予測されたCUと関連付けられず、または制約されたイントラ予測が可能にされていないと判定したことに応答して(458の「いいえ」)、ビデオコーダは、境界画素が利用可能であると判定することができる(460)。
上の例では、ビデオコーダは、デフォルト値または前の境界画素の値を、利用不可能な境界画素に割り当てることができる。他の例では、ビデオコーダは、利用不可能な境界画素の値を補間することができる。たとえば、一連の1つまたは複数の利用不可能な境界画素のいずれかの側に、1つまたは複数の利用可能な境界画素がある場合、ビデオコーダは、一連の利用不可能な境界画素のいずれかの側での、利用可能な境界画素の値に基づいて、利用不可能な境界画素の値を補間することができる。利用不可能な境界画素は、Ui=Aa+i×(Ab−Aa)/(M+1)として補間されてよく、iは1からMである。この式では、AaおよびAbは、一連の利用不可能な境界画素のいずれかの側での利用可能な境界画素であり、Mは、一連の利用不可能な境界画素の中の利用不可能な境界画素の数であり、Uiは、利用不可能な境界画素を示す。上の式では、Mは2の累乗ではないことがあるので、分割が必要であり得る。
Mは2の累乗ではないことがあり、分割を避けることが望ましいことがあるので、一連の利用不可能な境界画素を補間するために別の技法が使用され得る。この技法によれば、Q=Floor(log
2(M))、P=(1<<Q)、かつR=M−Pとする。ビデオコーダは、右側にある利用不可能な境界画素、すなわちU
p+1からU
Mの各々を、A
bの
値に設定することができる。U
1からU
Pまでの任意の境界画素に対して、
である。
いくつかの例では、一連の1つまたは複数の利用不可能な境界画素のいずれの側にも、利用可能な境界が存在しない。たとえば、連続的な利用不可能な境界画素が、予測因子の終点まで発生することがある。この例では、ビデオエンコーダは、最後の利用可能な境界画素の値を、予測因子の終点まで延ばすことができる。別の例では、連続的な利用不可能な境界画素が、予測因子の始点で発生することがある。この例では、ビデオコーダは、最初の利用可能な境界画素に先行する利用不可能な境界画素の値として、最初の利用可能な境界画素の値を使用することができる。したがって、そのような例では、ビデオコーダは、単純な延長を使用して、利用不可能な参照サンプルの値を生成することができる。
1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。機能は、ソフトウェアで実装される場合、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶され、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含むデータ記憶媒体または通信媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは、命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され、コンピュータによってアクセスされ得る、任意の他の媒体を備え得る。同様に、いかなる接続も適切にコンピュータ可読媒体と称される。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的な有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
命令は、1つまたは複数のデジタル信号プロセッサ(DSP)などの1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または本明細書で説明された技法の実装に適した任意の他の構造のいずれかを指し得る。加えて、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用のハードウェアおよび/またはソフトウェアモジュール内で提供されてよく、あるいは複合コーデックに組み込まれてよい。また、本技法は、1つまたは複数の回路または論理要素中で完全に実装され得る。
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。本開示では、開示される技法を実行するように構成されたデバイスの機能的態様を強調するために、様々なコンポーネント、モジュール、またはユニットが説明されたが、それらのコンポーネント、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要はない。むしろ、上で説明されたように、様々なユニットが、適切なソフトウェアおよび/またはファームウェアとともに、上で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられてよく、または相互動作可能なハードウェアユニットの集合によって与えられてよい。
様々な例が説明されてきた。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に、出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
ビデオデータをコーディングするための方法であって、
左下の境界画素において始まり、順番に境界画素を通って右上の境界画素に至る順序に従って前記境界画素のセットを処理するパディング動作を実行することであって、前記パディング動作が利用不可能な境界画素を処理する場合、前記パディング動作が、前記パディング動作によって以前処理された境界画素の値に基づいて、前記利用不可能な境界画素に値を割り当てる、実行することと、
前記境界画素に基づいて、イントラ予測されたビデオブロックを生成することとを備える、方法。
[C2]
前記パディング動作を実行することが、
現在の境界画素が利用可能であるかどうか判定することと、
前記順序に従って前記現在の境界画素の直前の境界画素の値を、前記現在の境界画素に割り当てることとを備える、請求項1に記載の方法。
[C3]
前記現在の境界画素が利用可能かどうか判定することが、前記現在の境界画素がインター予測されたCUと関連付けられ、制約されたイントラ予測が可能にされる場合、前記現在の境界画素は利用不可能であると判定することを備える、請求項2に記載の方法。
[C4]
前記パディング動作を実行することが、
前記左下の境界画素が利用可能であるかどうか判定することと、
前記左下の境界画素が利用不可能であると判定したことに応答して、デフォルト値を前記左下の境界画素に割り当てることとを備える、請求項1に記載の方法。
[C5]
前記パディング動作を実行することが、
前記左下の境界画素が利用可能であるかどうか判定することと、
前記左下の境界画素が利用不可能であると判定したことに応答して、次の利用可能な境界画素の値を前記左下の境界画素に割り当てることとを備える、請求項1に記載の方法。
[C6]
前記パディング動作を実行することが、
x=−1、y=nS×2−2...−1に対して、p[x,y]が利用不可能な境界画素である場合、p[x,y]の値をp[x,y+1]の値で置き換えることと、
x=0..nS×2−1,y−1に対して、p[x,y]が利用不可能な境界画素である場合、p[x,y]の値をp[x−1,y]の値で置き換えることとを備え、
nSが、前記イントラ予測されたビデオブロックの幅または高さに等しく、pが、サンプルの2次元配列であり、p[0,0]が、前記イントラ予測されたビデオブロックの左上の輝度サンプルである、請求項1に記載の方法。
[C7]
符号化処理の間に実行され、前記イントラ予測されたビデオブロックに基づいて符号化されたビデオデータを生成することをさらに備える、請求項1に記載の方法。
[C8]
前記イントラ予測されたビデオブロックに少なくとも一部基づいて残差データを生成することをさらに備える、請求項7に記載の方法。
[C9]
復号処理の間に実行され、前記イントラ予測されたビデオブロックに基づいて復号されたビデオデータを生成することをさらに備える、請求項1に記載の方法。
[C10]
前記イントラ予測されたビデオブロックと残差ビデオブロックとに少なくとも一部基づいて、復号されたビデオブロックを復元することをさらに備える、請求項9に記載の方法。
[C11]
1つまたは複数のプロセッサを備えるビデオコーディング装置であって、前記1つまたは複数のプロセッサが、
左下の境界画素において始まり、順番に境界画素を通って右上の境界画素に至る順序に従って前記境界画素のセットを処理するパディング動作を実行することであって、前記パディング動作が利用不可能な境界画素を処理する場合、前記パディング動作が、前記パディング動作によって以前処理された境界画素の値に基づいて、前記利用不可能な境界画素に値を割り当てることと、
前記境界画素に基づいて、イントラ予測されたビデオブロックを生成することとを行うように構成される、ビデオコーディング装置。
[C12]
前記1つまたは複数のプロセッサが
現在の境界画素が利用可能であるかどうか判定し、
前記順序に従って前記現在の境界画素の直前の境界画素の値を前記現在の境界画素に割り当てるように前記パディング動作を実行するように、前記1つまたは複数のプロセッサが構成される、請求項11に記載のビデオコーディング装置。
[C13]
前記1つまたは複数のプロセッサが、前記現在の境界画素がインター予測されたCUと関連付けられ、制約されたイントラ予測が可能にされる場合、少なくとも一部、前記現在の境界画素は利用不可能であると判定することによって、前記現在の境界画素が利用可能かどうか判定するように構成される、請求項12に記載のビデオコーディング装置。
[C14]
前記1つまたは複数のプロセッサが
前記左下の境界画素が利用可能であるかどうか判定し、
前記左下の境界画素が利用可能であると判定したことに応答してデフォルト値を前記左下の境界画素に割り当てるように前記パディング動作を実行するように、前記1つまたは複数のプロセッサが構成される、請求項11に記載のビデオコーディング装置。
[C15]
前記1つまたは複数のプロセッサが
前記左下の境界画素が利用可能であるかどうか判定し、
前記左下の境界画素が利用不可能であると判定したことに応答して次の利用可能な境界画素の値を前記左下の境界画素に割り当てるように前記パディング動作を実行するように、前記1つまたは複数のプロセッサが構成される、請求項11に記載のビデオコーディング装置。
[C16]
x=−1、y=nS×2−2...−1に対して、p[x,y]が利用不可能な境界画素である場合、p[x,y]の値をp[x,y+1]の値で置き換え、
x=0..nS×2−1,y−1に対して、p[x,y]が利用不可能な境界画素である場合、p[x,y]の値をp[x−1,y]の値で置き換えるように、前記パディング動作を実行するように前記1つまたは複数のプロセッサが構成され、
nSが、前記イントラ予測されたビデオブロックの幅または高さに等しく、pが、サンプルの2次元配列であり、p[0,0]が、前記イントラ予測されたビデオブロックの左上の輝度サンプルである、請求項11に記載のビデオコーディング装置。
[C17]
ビデオエンコーダを備え、前記1つまたは複数のプロセッサが、前記イントラ予測されたビデオブロックに基づいて符号化されたビデオデータを生成するように構成される、請求項11に記載のビデオコーディング装置。
[C18]
前記1つまたは複数のプロセッサが、前記イントラ予測されたビデオブロックに少なくとも一部基づいて残差データを生成するように構成される、請求項17に記載のビデオコーディング装置。
[C19]
ビデオデコーダを備え、前記1つまたは複数のプロセッサが、前記イントラ予測されたビデオブロックに基づいて復号されたビデオデータを生成するように構成される、請求項11に記載のビデオコーディング装置。
[C20]
前記1つまたは複数のプロセッサが、前記イントラ予測されたビデオブロックおよび残差ビデオブロックに基づいて、復号されたビデオブロックを復元するように構成される、請求項19に記載のビデオコーディング装置。
[C21]
左下の境界画素において始まり、順番に境界画素を通って右上の境界画素に至る順序に従って前記境界画素のセットを処理するパディング動作を実行するための手段であって、前記パディング動作が利用不可能な境界画素を処理する場合、前記パディング動作が、前記パディング動作によって以前処理された境界画素の値に基づいて、前記利用不可能な境界画素に値を割り当てる、手段と、
前記境界画素に基づいて、イントラ予測されたビデオブロックを生成するための手段とを備える、ビデオコーディング装置。
[C22]
前記パディング動作を実行するための前記手段が、
現在の境界画素が利用可能かどうかを判定するための手段と、
前記順序に従って前記現在の境界画素の直前の境界画素の値を、前記現在の境界画素に割り当てるための手段とを備える、請求項21に記載のビデオコーディング装置。
[C23]
前記現在の境界画素が利用可能かどうか判定するための前記手段が、前記現在の境界画素がインター予測されたCUと関連付けられ、制約されたイントラ予測が可能にされる場合、前記現在の境界画素は利用不可能であると判定するための手段を備える、請求項22に記載のビデオコーディング装置。
[C24]
コンピュータ実行可能命令を記憶する1つまたは複数のコンピュータ可読記憶媒体を備えるコンピュータプログラム製品であって、前記コンピュータ実行可能命令が、実行されると、1つまたは複数のプロセッサに、
左下の境界画素において始まり、順番に境界画素を通って右上の境界画素に至る順序に従って前記境界画素のセットを処理するパディング動作を実行することであって、前記パディング動作が利用不可能な境界画素を処理する場合、前記パディング動作が、前記パディング動作によって以前処理された画素の値に基づいて、前記利用不可能な境界画素に値を割り当てることと、
前記境界画素に基づいて、イントラ予測されたビデオブロックを生成することとを行わせる、コンピュータプログラム製品。
[C25]
前記コンピュータ実行可能命令が、前記1つまたは複数のプロセッサに、
現在の境界画素が利用可能であるかどうか判定させ、
前記順序に従って前記現在の境界画素の直前の境界画素の値を、前記現在の境界画素へ割り当てさせる、請求項24に記載のコンピュータプログラム製品。
[C26]
前記コンピュータ実行可能命令が、前記1つまたは複数のプロセッサに、前記現在の境界画素がインター予測されたCUと関連付けられ、制約されたイントラ予測が可能にされる場合、前記現在の境界画素は利用不可能であると判定させる、請求項25に記載のコンピュータプログラム製品。