1つまたは複数の実施形態の例示的な実装形態が以下に提供されるが、開示されるシステムおよび/または方法は、現在知られているか、または存在するかにかかわらず、任意の数の技法を用いて実装され得ることを、最初に理解されたい。本開示は、本明細書に示され、記載される例示的な設計および実装を含む、以下に示される例示的な実装、図面、および技法に決して限定されないものとし、それらの均等物の全範囲とともに、添付の特許請求の範囲内で変更され得る。
以下の用語は、本明細書において反対の文脈で使用されない限り、次のように定義される。具体的には、以下の定義は、本開示をさらに明確にするためのものである。しかしながら、用語は、異なる文脈では異なるように記述される場合がある。したがって、以下の定義は、補足として見なされるものとし、本明細書においてそのような用語のために提供される説明の任意の他の定義を限定するものと見なされないものとする。
ビットストリームは、エンコーダとデコーダとの間の送信のために圧縮されるビデオデータを含むビットのシーケンスである。エンコーダは、符号化プロセスを用いて、ビデオデータをビットストリームに圧縮するように構成されたデバイスである。デコーダは、復号プロセスを用いて、表示のためにビットストリームからビデオデータを再構成するように構成されたデバイスである。ピクチャは、フレームまたはそのフィールドを作るルーマサンプルのアレイおよび/またはクロマサンプルのアレイである。説明の明確性のために、符号化または復号されているピクチャは、現在のピクチャと称され得る。
ネットワーク抽象化レイヤ(NAL)ユニットは、ロー・バイト・シーケンス・ペイロード(RBSP)の形式のデータ、データのタイプの指示を含み、必要に応じてエミュレーション防止バイトが点在するシンタックス構造である。ビデオコーディングレイヤ(VCL)NALユニットは、ピクチャのコード化スライスといった、ビデオデータを含むようにコード化されたNALユニットである。非VCL NALユニットは、ビデオデータの復号、適合性検査の実行、または他の動作をサポートするシンタックスおよび/またはパラメータなど、非ビデオデータを含むNALユニットである。レイヤは、特定された特性(たとえば、共通の解像度、フレームレート、画像サイズなど)を共有するVCL NALユニットと、関連付けられる非VCL NALユニットのセットである。レイヤのVCL NALユニットは、NALユニットヘッダレイヤ識別子(nuh_layer_id)の特定の値を共有し得る。コード化ピクチャは、アクセスユニット(AU)内のNALユニットヘッダレイヤ識別子(nuh_layer_id)の特定の値を有するVCL NALユニットを含むピクチャのコード化表現であり、ピクチャのすべてのコーディングツリーユニット(CTU)を含む。復号されたピクチャは、コード化ピクチャに復号処理を適用することによって生成されたピクチャである。
出力レイヤセット(OLS)は、1つまたは複数のレイヤが出力レイヤとして指定されるレイヤのセットである。出力レイヤは、(たとえば、ディスプレイへの)出力のために指定されるレイヤである。0番目のOLSは、最下位レイヤ(最下位レイヤ識別子を有するレイヤ)のみを含み、したがって、出力レイヤのみを含むOLSである。ビデオパラメータセット(VPS)は、ビデオ全体に関連するパラメータを含むデータユニットである。レイヤ間予測は、参照レイヤ内の参照ピクチャを参照することによって、現在のレイヤ内の現在のピクチャをコード化する機構であり、現在のピクチャと参照ピクチャとは同じAUに含まれ、参照レイヤは現在のレイヤよりも低いnuh_layer_idを含む。
「各レイヤはOLSである」フラグ(each_layer_is_an_ols_flag)は、ビットストリーム内の各OLSが単一のレイヤを含むかどうかをシグナリングするシンタックス要素である。OLSモード識別コード(ols_mode_idc)は、OLSの数、OLSのレイヤ、OLSの出力レイヤに関する情報を示すシンタックス要素である。「VPSのすべての独立したレイヤ」フラグ(vps_all_independent_layers_flag)は、レイヤ間予測がビットストリーム内のレイヤのいずれかをコード化するために使用されるかどうかをシグナリングするシンタックス要素である。「VPS最大レイヤマイナス1」(vps_max_layers_minus1)は、VPSによって指定されるレイヤの数、したがって、対応するコード化ビデオシーケンスにおいて許可されるレイヤの最大数をシグナリングするシンタックス要素である。「出力レイヤセット数マイナス1」(num_output_layer_sets_minus1)は、VPSによって指定されるOLSの総数を指定するシンタックス要素である。
本明細書では、以下の頭文字、コーディングツリーブロック(CTB)、コーディングツリーユニット(CTU)、コーディングユニット(CU)、コード化ビデオシーケンス(CVS)、Joint Video Experts Team(JVET)、Motion Constrained Tile Set(MCTS)、最大転送単位(MTU)、ネットワーク抽象化レイヤ(NAL)、出力レイヤセット(OLS)、ピクチャ順序カウント(POC)、ロー・バイト・シーケンス・ペイロード(RBSP)、シーケンスパラメータセット(SPS)、ビデオパラメータセット(VPS)、Versatile Video Coding(VVC)、およびワーキングドラフト(WD)が使用されている。
データの損失を最小限に抑えながらビデオファイルのサイズを縮小するために、多くのビデオ圧縮技法が使用されうる。たとえば、ビデオ圧縮技法は、ビデオシーケンスにおけるデータ冗長性を低減または除去するために、空間(たとえば、ピクチャ内)予測および/または時間(たとえば、ピクチャ間)予測を実行することを含むことができる。ブロックベースのビデオコーディングの場合、ビデオスライス(たとえば、ビデオピクチャ、またはビデオピクチャの一部)は、ツリーブロック、コーディングツリーブロック(CTB)、コーディングツリーユニット(CTU)、コーディングユニット(CU)、および/またはコーディングノードとも呼ばれることがある、ビデオブロックへとパーティショニングされ得る。ピクチャのイントラコード化(I)スライス内のビデオブロックは、同じピクチャ内の近傍ブロック内の参照サンプルに対して空間予測を用いてコード化される。ピクチャのインターコード化された単方向予測(P)スライスまたは双方向予測(B)スライス内のビデオブロックは、同じピクチャ内の近傍ブロック内の参照サンプルに対して空間予測を、または他の参照ピクチャ内の参照サンプルに対して時間予測を用いることによってコード化され得る。ピクチャは、フレームおよび/または画像と呼ばれることがあり、参照ピクチャは、参照フレームおよび/または参照画像と呼ばれることがある。空間または時間予測は、画像ブロックを表す予測ブロックをもたらす。残差データは、元の画像ブロックと予測ブロックとの間のピクセル差を表す。したがって、インターコード化ブロックは、予測ブロックを形成する参照サンプルのブロックを指し示す動きベクトルと、コード化ブロックと予測ブロックとの間の差を示す残差データとに従って符号化される。イントラコード化ブロックは、イントラコーディングモードおよび残差データに従って符号化される。さらなる圧縮のために、残差データは、画素領域から変換領域に変換され得る。これらの結果、残差変換係数が得られ、これは量子化され得る。量子化された変換係数は、最初に、2次元アレイに配置されてもよい。量子化された変換係数は、変換係数の1次元ベクトルを生成するために走査され得る。なお一層圧縮を達成するために、エントロピーコーディングが適用されてもよい。そのようなビデオ圧縮技法について、以下でさらに詳細に説明する。
符号化されたビデオを正確に復号できることを確実にするために、ビデオは、対応するビデオコーディング規格に従って符号化され、復号される。ビデオコーディング規格は、国際電気通信連合(ITU)標準化セクタ(ITU-T)H.261、国際標準化機構/国際電気標準会議(ISO/IEC)モーションピクチャエキスパーツグループ(MPEG)-1 Part 2、ITU-T H.262またはISO/IEC MPEG-2 Part 2、ITU-T H.263、ISO/IEC MPEG-4 Part 2、ITU-T H.264またはISO/IEC MPEG-4 Part 10としても知られるアドバンストビデオコーディング(AVC)、およびITU-T H.265またはMPEG-H Part 2としても知られる高効率ビデオコーディング(HEVC)を含む。AVCは、スケーラブルビデオコーディング(SVC)、マルチビュービデオコーディング(MVC)およびマルチビュー・ビデオコーディング・プラス・デプス(MVC+D)、ならびに3次元(3D)AVC(3D-AVC)などの拡張を含む。HEVCは、スケーラブルHEVC(SHVC)、マルチビューHEVC(MV-HEVC)、および3D HEVC(3D-HEVC)などの拡張を含む。ITU-TおよびISO/IECのjoint video experts team(JVET)は、Versatile Video Coding(VVC)と呼ばれるビデオコーディング規格の開発を開始した。VVCは、JVET-O2001-v14を含むWDに含まれる。
ピクチャのレイヤは、スケーラビリティをサポートするために使用されることができる。たとえば、ビデオは、複数のレイヤにコード化されることができる。レイヤは、他のレイヤを参照することなくコード化され得る。そのようなレイヤは、サイマルキャストレイヤと呼ばれる。したがって、サイマルキャストレイヤは、他のレイヤを参照することなく、復号されることができる。他の例として、レイヤは、レイヤ間予測を用いてコード化されることができる。これは、現在のレイヤと参照レイヤとの間の差のみを含むことによって、現在のレイヤがコード化されることを可能にする。たとえば、現在のレイヤおよび参照レイヤは、信号対雑音比(SNR)、ピクチャサイズ、フレームレートなどの特性を変化させることによってコード化された同じビデオシーケンスを含み得る。レイヤは、出力レイヤセット(OLS)に編成することができる。OLSは、少なくとも1つの出力レイヤと、出力レイヤの復号をサポートする任意のレイヤとを含むレイヤのセットである。特定の例として、第1のOLSは、ベースレイヤを含み得、第2のOLSは、ベースレイヤと、さらに、増加した特性を有するエンハンスメントレイヤとを含み得る。特性がピクチャ解像度である一例では、ビデオがベース解像度で復号されることを可能にするために、第1のOLSがデコーダに送信されることができ、または、ビデオがより高い向上された解像度で復号されることを可能にするために、第2のOLSが送信されることができる。したがって、ビデオは、ユーザ要求に基づいてスケーリングされることができる。
いくつかの事例では、スケーラビリティは使用されず、各レイヤは、サイマルキャストレイヤとしてコード化される。いくつかのシステムは、すべてのレイヤがサイマルキャストされる場合、各OLSは、(参照レイヤが使用されないので)単一のレイヤを含むはずであると推論する。この推論は、符号化されたビットストリームからシグナリングを省略することができるので、コーディング効率を高める。しかしながら、そのような推論は、マルチビューをサポートしない。マルチビューは、立体視映像としても知られている。マルチビューでは、空間的にオフセットされたカメラによって、同じシーンの2つのビデオシーケンスが記録される。2つのビデオシーケンスは、ヘッドセット内の異なるレンズでユーザに表示される。このように、各眼に対して異なる空間的にオフセットされたシーケンスを表示することにより、3次元(3D)ビデオおよび/または視覚的奥行きの印象を作成することができる。したがって、マルチビューを実装するOLSは、2つのレイヤ(たとえば、各眼に1つ)を含む。しかしながら、レイヤがすべてサイマルキャストであるとき、ビデオデコーダは、各OLSが1つのレイヤのみを含むと推論するために推論を用いてもよい。デコーダがマルチビューの1つのレイヤのみを表示することがあり、またはいずれのレイヤの表示も続行できないことがあるので、これは、エラーをもたらす場合がある。したがって、すべてのレイヤがサイマルキャストされる場合に各OLSは単一のレイヤを含むという推論は、マルチビューアプリケーションがデコーダにおいて適切にレンダリングすることを阻止する可能性がある。
本明細書では、ビデオ内のすべてのレイヤがサイマルキャストされ、レイヤ間予測を用いない場合に、ビデオコーディングシステムがマルチビュービデオを適切に復号することを可能にする機構が開示されている。「VPSのすべての独立したレイヤ」フラグ(vps_all_independent_layers_flag)は、VPS内のビットストリームに含まれ、レイヤのいずれもレイヤ間予測を用いない(たとえば、すべてがサイマルキャストされる)とき、1に設定されることができる。このフラグが1に設定されると、「各レイヤは出力レイヤセット(OLS)である」フラグ(each_layer_is_an_ols_flag)は、VPSにおいてシグナリングされる。each_layer_is_an_ols_flagは、各OLSが単一のレイヤを含むか、または少なくとも1つのOLSが複数のレイヤを含むか(たとえば、マルチビューをサポートするために)を指定するように設定されることができる。したがって、vps_all_independent_layers_flagおよびeach_layer_is_an_ols_flagは、マルチビューアプリケーションをサポートするために使用され得る。さらに、これが発生するとき、OLSモード識別コード(ols_mode_idc)は、VPSにおいて2に設定されることができる。これにより、OLSの数およびOLSに関連するレイヤが明示的にシグナリングされる。次いで、デコーダは、この情報を使用して、マルチビュービデオを含むOLSを正しく復号することができる。このアプローチは、エラーを補正しつつコーディング効率をサポートする。したがって、開示された機構は、エンコーダおよび/またはデコーダの機能を向上させる。さらに、開示された機構は、ビットストリームサイズを低減させ、したがって、エンコーダとデコーダの両方におけるプロセッサ、メモリ、および/またはネットワークリソースの利用を減少させ得る。
図1は、ビデオ信号をコーディングする例示的な動作方法100を示すフローチャートである。具体的には、ビデオ信号は、エンコーダにおいて符号化される。符号化プロセスは、ビデオファイルサイズを減少させるために、様々な機構を使用してビデオ信号を圧縮する。より小さいファイルサイズは、関連付けられる帯域幅オーバーヘッドを低減しつつ、圧縮されたビデオファイルがユーザに向けて送信されることを可能とする。次いで、デコーダは、圧縮されたビデオファイルを復号して、エンドユーザに表示するために元のビデオ信号を再構成する。復号プロセスは、一般に、デコーダがビデオ信号を一貫して再構成することを可能にするために、符号化プロセスをミラーリングする。
ステップ101において、ビデオ信号がエンコーダに入力される。たとえば、ビデオ信号は、メモリに記憶された圧縮されていないビデオファイルであってもよい。他の例として、ビデオファイルは、ビデオカメラなどのビデオキャプチャデバイスによってキャプチャされ、ビデオのライブストリーミングをサポートするように符号化され得る。ビデオファイルは、オーディオコンポーネントとビデオコンポーネントの両方を含み得る。ビデオコンポーネントは、順番に見たときに動きの視覚的印象を与える一連の画像フレームを含む。フレームは、本明細書でルーマ成分(またはルーマサンプル)と呼ばれる光と、クロマ成分(または色サンプル)と呼ばれる色とで表されるピクセルを含む。いくつかの例では、フレームはまた、3次元ビューイングをサポートするために深度値を含んでもよい。
ステップ103において、ビデオは、ブロックへとパーティショニングされる。パーティショニングは、各フレーム内のピクセルを、圧縮のために正方形および/または矩形ブロックに再分割することを含む。たとえば、高効率ビデオコーディング(HEVC)(H.265およびMPEG-H Part 2としても知られる)では、フレームは、まず、あらかじめ定義されたサイズ(たとえば、64ピクセル×64ピクセル)のブロックであるコーディングツリーユニット(CTU)に分割されることができる。CTUは、ルーマサンプルとクロマサンプルの両方を含む。コーディングツリーを使用して、CTUをブロックに分割し、次いで、さらなる符号化をサポートする構成が達成されるまで、ブロックを再帰的に再分割してもよい。たとえば、フレームのルーマ成分は、個々のブロックが比較的均一な照明値を含むまで再分割されてもよい。さらに、フレームのクロマ成分は、個々のブロックが比較的均一な色値を含むまで再分割されてもよい。したがって、パーティショニング機構は、ビデオフレームのコンテンツに応じて変わる。
ステップ105において、ステップ103でパーティショニングされた画像ブロックを圧縮するために、様々な圧縮機構が使用される。たとえば、インター予測および/またはイントラ予測が使用され得る。インター予測は、共通のシーン内のオブジェクトが連続フレーム内に現れる傾向があるという事実を利用するように設計される。したがって、参照フレーム内のオブジェクトを表すブロックは、隣接するフレームにおいて繰り返し記述される必要はない。具体的には、テーブルなどのオブジェクトは、複数のフレームにわたって一定の位置に留まり得る。したがって、テーブルは一回記述され、隣接するフレームは、参照フレームを参照することができる。複数のフレームにわたるオブジェクトのマッチングのために、パターンマッチング機構が使用されてもよい。さらに、移動するオブジェクトは、たとえば、オブジェクトの動きまたはカメラの動きによって、複数のフレームにわたって表され得る。特定の例として、ビデオは、複数のフレームにわたってスクリーンを横切って移動する自動車を示すことがある。そのような動きを記述するために、動きベクトルを使用することができる。動きベクトルは、フレーム内のオブジェクトの座標から参照フレーム内のオブジェクトの座標へのオフセットを提供する2次元ベクトルである。したがって、インター予測は、現在のフレーム内の画像ブロックを、参照フレーム内の対応するブロックからのオフセットを示す動きベクトルのセットとして符号化することができる。
イントラ予測は、共通フレーム内のブロックを符号化する。イントラ予測は、ルーマ成分およびクロマ成分がフレーム内でクラスタ化する傾向があるという事実を利用する。たとえば、木の一部の緑のパッチは、緑の同様のパッチに隣接して配置される傾向がある。イントラ予測は、複数の方向性予測モード(たとえば、HEVCでは33)、平面モード、および直流(DC)モードを使用する。方向性モードは、現在のブロックが、対応する方向における近傍ブロックのサンプルと類似/同じであることを示す。平面モードは、行/列(たとえば、平面)に沿った一連のブロックが、行のエッジにおける近傍ブロックに基づいて補間され得ることを示す。平面モードは、実際上、値の変化に比較的一定の傾きを使用することによって、行/列にわたって光/色のスムーズな遷移を示す。DCモードは、境界平滑化のために使用され、ブロックが、方向性予測モードの角度方向に関連付けられたすべての近傍ブロックのサンプルに関連付けられた平均値と類似/同じであることを示す。したがって、イントラ予測ブロックは、実際の値の代わりに、様々なリレーショナル予測モード値として画像ブロックを表すことができる。さらに、インター予測ブロックは、実際の値の代わりに、動きベクトル値として画像ブロックを表すことができる。いずれの場合も、予測ブロックは、いくつかの場合には、画像ブロックを正確に表さないことがある。任意の差が、残差ブロックに記憶される。ファイルをさらに圧縮するために、変換を残差ブロックに適用してもよい。
ステップ107において、様々なフィルタリング技法が適用され得る。HEVCでは、フィルタは、ループ内フィルタリング方式に従って適用される。上述したブロックベースの予測では、デコーダにおいてブロッキー画像が作成される可能性がある。さらに、ブロックベースの予測方式は、ブロックを符号化し、次いで、参照ブロックとして後で使用するために、符号化ブロックを再構成してもよい。ループ内フィルタリング方式は、雑音抑圧フィルタ、デブロッキングフィルタ、適応ループフィルタ、およびサンプル適応オフセット(SAO)フィルタをブロック/フレームに反復的に適用する。これらのフィルタは、符号化されたファイルを正確に再構成できるように、そのようなブロッキングアーティファクトを軽減する。さらに、これらのフィルタは、アーティファクトが、再構成された参照ブロックに基づいて符号化される後続のブロック内に追加のアーティファクトを作成する可能性が低くなるよう、再構成された参照ブロック内のアーティファクトを軽減する。
ビデオ信号がパーティショニングされ、圧縮され、フィルタリングされると、ステップ109において、結果として得られるデータがビットストリームに符号化される。ビットストリームは、上述したデータ、ならびに、デコーダにおける適切なビデオ信号再構成をサポートするために所望される任意のシグナリングデータを含む。たとえば、そのようなデータは、パーティションデータ、予測データ、残差ブロック、およびデコーダにコーディング命令を提供する様々なフラグを含んでもよい。ビットストリームは、要求に応じたデコーダに向けた送信のためにメモリに記憶され得る。ビットストリームは、複数のデコーダに向けてブロードキャストおよび/またはマルチキャストされてもよい。ビットストリームの作成は、反復的なプロセスである。したがって、ステップ101、103、105、107、および109は、多数のフレームおよびブロックにわたって連続的に、かつ/または同時に行われ得る。図1に示された順序は、説明を明確かつ容易にするために提示されたものであり、ビデオコーディングプロセスを特定の順序に限定することを意図したものではない。
デコーダは、ビットストリームを受信し、ステップ111において復号プロセスを開始する。具体的には、デコーダは、エントロピー復号方式を使用して、ビットストリームを対応するシンタックスおよびビデオデータに変換する。デコーダは、ステップ111において、ビットストリームからのシンタックスデータを使用して、フレームのパーティションを決定する。パーティショニングは、ステップ103におけるブロックパーティショニングの結果と一致するはずである。次に、ステップ111において使用されるエントロピー符号化/復号について説明する。エンコーダは、入力画像内の値の空間的位置決めに基づいて、いくつかの可能な選択肢からブロックパーティショニング方式を選択するなど、圧縮プロセス中に、多くの選択を行う。正確な選択をシグナリングすることは、多数のビンを使用しうる。本明細書で使用されるように、ビンは、変数(たとえば、文脈に応じて変化し得るビット値)として扱われるバイナリ値である。エントロピーコーディングは、エンコーダが特定の場合には明らかに実行可能でない任意のオプションを破棄し、許容可能なオプションのセットを残すことを可能とする。次いで、各許容可能なオプションにコードワードが割り当てられる。コードワードの長さは、許容可能なオプションの数(たとえば、2つのオプションに対して1つのビン、3~4つのオプションに対して2つのビンなど)に基づく。次いで、エンコーダは、選択されたオプションのためのコードワードを符号化する。この方式は、すべての可能なオプションの潜在的に大きいセットからの選択を一意に示すのとは対照的に、許容可能なオプションの小さいサブセットからの選択を一意に示すためにコードワードは必要なだけ大きいので、コードワードのサイズを低減する。次いで、デコーダは、エンコーダと同様の方法で、許容可能なオプションのセットを決定することによって、選択を復号する。許容可能なオプションのセットを決定することによって、デコーダは、コードワードを読み取り、エンコーダによって行われる選択を決定することができる。
ステップ113において、デコーダは、ブロック復号を実行する。具体的には、デコーダは、反対の変換を用いて残差ブロックを生成する。次いで、デコーダは、残差ブロックおよび対応する予測ブロックを用いて、パーティショニングに従って画像ブロックを再構成する。予測ブロックは、ステップ105においてエンコーダで生成されるようなイントラ予測ブロックとインター予測ブロックの両方を含んでもよい。次いで、再構成された画像ブロックは、ステップ111において決定されたパーティショニングデータに従って、再構成されたビデオ信号のフレームの中へ配置される。ステップ113でのシンタックスはまた、上記で説明したようにエントロピーコーディングを介してビットストリームにおいてシグナリングされてもよい。
ステップ115において、エンコーダにおけるステップ107と同様の方法で、再構成されたビデオ信号のフレームに対してフィルタリングが実行される。たとえば、雑音抑圧フィルタ、デブロッキングフィルタ、適応ループフィルタ、およびSAOフィルタをフレームに適用して、ブロッキングアーティファクトを除去してもよい。フレームがフィルタリングされると、ステップ117において、エンドユーザが見るためにディスプレイにビデオ信号を出力することができる。
図2は、ビデオコーディングのための例示的なコーディングおよび復号(コーデック)システム200の概略図である。具体的には、コーデックシステム200は、オペレーティング方法100の実装をサポートする機能を提供する。コーデックシステム200は、エンコーダとデコーダの両方で使用される構成要素を示すために一般化される。コーデックシステム200は、動作方法100のステップ101および103に対して説明したように、ビデオ信号を受信し、パーティショニングし、その結果、パーティショニングされたビデオ信号201が得られる。次いで、コーデックシステム200は、方法100のステップ105、107、および109について説明したように、エンコーダとして動作するとき、パーティショニングされたビデオ信号201をコード化ビットストリームに圧縮する。デコーダとして動作するとき、コーデックシステム200は、動作方法100のステップ111、113、115、および117について説明したように、ビットストリームから出力ビデオ信号を生成する。コーデックシステム200は、一般コーダ制御コンポーネント211と、変換スケーリングおよび量子化コンポーネント213と、ピクチャ内推定コンポーネント215と、ピクチャ内予測コンポーネント217と、動き補償コンポーネント219と、動き推定コンポーネント221と、スケーリングおよび逆変換コンポーネント229と、フィルタ制御分析コンポーネント227と、ループ内フィルタコンポーネント225と、復号ピクチャバッファコンポーネント223と、ヘッダフォーマッティングおよびコンテキスト適応型バイナリ算術コーディング(CABAC)コンポーネント231とを含む。そのようなコンポーネントは、図示のように結合される。図2において、黒線は、符号化/復号されるデータの移動を示し、破線は、他のコンポーネントの動作を制御する制御データの移動を示す。コーデックシステム200のコンポーネントはすべて、エンコーダ内に存在してもよい。デコーダは、コーデックシステム200のコンポーネントのサブセットを含んでもよい。たとえば、デコーダは、ピクチャ内予測コンポーネント217、動き補償コンポーネント219、スケーリングおよび逆変換コンポーネント229、ループ内フィルタコンポーネント225、および復号ピクチャバッファコンポーネント223を含んでもよい。次に、これらのコンポーネントについて説明する。
パーティショニングされたビデオ信号201は、コーディングツリーによってピクセルのブロックへとパーティショニングされたキャプチャされたビデオシーケンスである。コーディングツリーは、ピクセルのブロックをピクセルのより小さいブロックに再分割するために、様々な分割モードを用いる。次いで、これらのブロックを、より小さいブロックにさらに再分割することができる。ブロックは、コーディングツリー上のノードと呼ばれることがある。より大きい親ノードは、より小さい子ノードに分割される。ノードが再分割される回数は、ノード/コーディングツリーの深さと呼ばれる。いくつかの場合には、分割されたブロックを、コーディングユニット(CU)に含めることができる。たとえば、CUは、CUのための対応するシンタックス命令とともに、ルーマブロック、赤色差クロマ(Cr)ブロック、および青色差クロマ(Cb)ブロックを含むCTUのサブ部分とすることができる。分割モードは、使用される分割モードに応じて様々な形状の、それぞれ2つ、3つ、または4つの子ノードにノードをパーティショニングするために使用される、2分木(BT)、3分木(TT)、および4分木(QT)を含み得る。パーティショニングされたビデオ信号201は、圧縮のために、一般コーダ制御コンポーネント211、変換スケーリングおよび量子化コンポーネント213、ピクチャ内推定コンポーネント215、フィルタ制御分析コンポーネント227、および動き推定コンポーネント221に転送される。
一般コーダ制御コンポーネント211は、アプリケーション制約に従って、ビデオシーケンスの画像をビットストリームにコード化することに関連する決定を行うように構成される。たとえば、一般コーダ制御コンポーネント211は、ビットレート/ビットストリームサイズ対再構成品質の最適化を管理する。そのような決定は、記憶空間/帯域幅の利用可能性および画像解像度要求に基づいて行われ得る。一般コーダ制御コンポーネント211はまた、バッファのアンダーランおよびオーバーランの問題を軽減するために、送信速度に照らしてバッファの利用を管理する。これらの問題を管理するために、一般コーダ制御コンポーネント211は、他のコンポーネントによるパーティショニング、予測、およびフィルタリングを管理する。たとえば、一般コーダ制御コンポーネント211は、解像度を増加させ、帯域幅使用を増加させるために圧縮の複雑さを動的に増加させる、または解像度および帯域幅使用を減少させるために圧縮の複雑さを減少させてもよい。したがって、一般コーダ制御コンポーネント211は、ビデオ信号再構成品質をビットレートに関することとバランスさせるようにコーデックシステム200の他のコンポーネントを制御する。一般コーダ制御コンポーネント211は、他のコンポーネントの動作を制御する制御データを作成する。制御データはまた、ヘッダフォーマッティングおよびCABACコンポーネント231に転送され、デコーダで復号するためのパラメータをシグナリングするためにビットストリームに符号化される。
パーティショニングされたビデオ信号201は、インター予測のために動き推定コンポーネント221および動き補償コンポーネント219にも送信される。パーティショニングされたビデオ信号201のフレームまたはスライスは、複数のビデオブロックに分割され得る。動き推定コンポーネント221および動き補償コンポーネント219は、時間的予測を提供するために、1つまたは複数の参照フレーム中の1つまたは複数のブロックに対して、受信されたビデオブロックのインター予測コーディングを実行する。コーデックシステム200は、たとえば、ビデオデータの各ブロックのための適切なコーディングモードを選択するために、複数のコーディングパスを実行してもよい。
動き推定コンポーネント221および動き補償コンポーネント219は、高度に統合され得るが、概念的な目的のために別々に示されている。動き推定コンポーネント221によって実行される動き推定は、ビデオブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、予測ブロックに対するコード化オブジェクトの変位を示し得る。予測ブロックは、ピクセル差に関して、コード化されるブロックに密接に一致することがわかるブロックである。予測ブロックはまた、参照ブロックと呼ばれてもよい。そのようなピクセル差は、絶対差分和(SAD)、2乗差分和(SSD)、または他の差分メトリックによって決定され得る。HEVCは、CTU、コーディングツリーブロック(CTB)、およびCUを含むいくつかのコード化オブジェクトを用いる。たとえば、CTUは、CTBへと分割されることができ、CTBは、CUに含めるためにCBへと分割されることができる。CUは、予測データを含む予測ユニット(PU)および/またはCUのための変換された残差データを含む変換ユニット(TU)として符号化されることができる。動き推定コンポーネント221は、レートひずみ最適化プロセスの一部としてレートひずみ分析を使用することによって、動きベクトル、PU、およびTUを生成する。たとえば、動き推定コンポーネント221は、現在のブロック/フレームについて複数の参照ブロック、複数の動きベクトルなどを決定してもよく、最良のレートひずみ特性を有する参照ブロック、動きベクトルなどを選択してもよい。最良のレートひずみ特性は、ビデオ再構成の品質(たとえば、圧縮によるデータ損失量)とコーディング効率(たとえば、最終符号化のサイズ)の両方のバランスをとる。
いくつかの例では、コーデックシステム200は、復号ピクチャバッファコンポーネント223に記憶された参照ピクチャのサブ整数ピクセル位置の値を計算し得る。たとえば、ビデオコーデックシステム200は、参照ピクチャの1/4ピクセル位置、1/8ピクセル位置、または他の分数ピクセル位置の値を補間し得る。したがって、動き推定コンポーネント221は、フルピクセル位置および分数ピクセル位置に対する動き探索を実行し、分数ピクセル精度で動きベクトルを出力し得る。動き推定コンポーネント221は、PUの位置を参照ピクチャの予測ブロックの位置と比較することによって、インターコード化されたスライス内のビデオブロックのPUの動きベクトルを計算する。動き推定コンポーネント221は、計算された動きベクトルを動きデータとして、符号化のためにヘッダフォーマッティングおよびCABACコンポーネント231に出力し、動きを動き補償コンポーネント219に出力する。
動き補償コンポーネント219によって実行される動き補償は、動き推定コンポーネント221によって決定された動きベクトルに基づいて予測ブロックをフェッチまたは生成することを伴い得る。この場合も、いくつかの例では、動き推定コンポーネント221および動き補償コンポーネント219は、機能的に統合され得る。現在のビデオブロックのPUのための動きベクトルを受信すると、動き補償コンポーネント219は、動きベクトルが指し示す予測ブロックを見つけ得る。次いで、コード化されている現在のビデオブロックのピクセル値から予測ブロックのピクセル値を減算することによって、残差ビデオブロックが形成され、ピクセル差分値が形成される。一般に、動き推定コンポーネント221は、ルーマ成分に対する動き推定を実行し、動き補償コンポーネント219は、クロマ成分とルーマ成分の両方に対するルーマ成分に基づいて計算された動きベクトルを使用する。予測ブロックおよび残差ブロックは、変換スケーリングおよび量子化コンポーネント213に転送される。
パーティショニングされたビデオ信号201は、ピクチャ内推定コンポーネント215およびピクチャ内予測コンポーネント217にも送信される。動き推定コンポーネント221および動き補償コンポーネント219と同様に、ピクチャ内推定コンポーネント215およびピクチャ内予測コンポーネント217は、高度に統合され得るが、概念的な目的のために別々に示されている。ピクチャ内推定コンポーネント215およびピクチャ内予測コンポーネント217は、上記で説明したように、フレーム間の動き推定コンポーネント221および動き補償コンポーネント219によって実行されるインター予測の代替として、現在のフレーム内のブロックに対する現在のブロックをイントラ予測する。特に、ピクチャ内推定コンポーネント215は、現在のブロックを符号化するために使用するイントラ予測モードを決定する。いくつかの例では、ピクチャ内推定コンポーネント215は、複数のテストされたイントラ予測モードから現在のブロックを符号化するために適切なイントラ予測モードを選択する。次いで、選択されたイントラ予測モードは、符号化のためにヘッダフォーマッティングおよびCABACコンポーネント231に転送される。
たとえば、ピクチャ内推定コンポーネント215は、様々なテストされたイントラ予測モードのレートひずみ分析を使用してレートひずみ値を計算し、テストされたモードの中で最良のレートひずみ特性を有するイントラ予測モードを選択する。レートひずみ分析は、一般に、符号化ブロックと、符号化ブロックを生成するために符号化された元の符号化されていないブロックとの間のひずみ(またはエラー)の量、ならびに符号化ブロックを生成するために使用されるビットレート(たとえば、ビット数)を決定する。ピクチャ内推定コンポーネント215は、様々な符号化ブロックのひずみおよびレートから比率を計算して、どのイントラ予測モードがブロックの最良のレートひずみ値を示すかを決定する。加えて、ピクチャ内推定コンポーネント215は、レートひずみ最適化(RDO)に基づく深度モデリングモード(DMM)を使用して、深度マップの深度ブロックをコード化するように構成され得る。
ピクチャ内予測コンポーネント217は、エンコーダにおいて実施されたときにピクチャ内推定コンポーネント215によって決定された選択されたイントラ予測モードに基づいて、予測ブロックから残差ブロックを生成し得るか、またはデコーダにおいて実施されたときにビットストリームから残差ブロックを読み取り得る。残差ブロックは、行列として表される、予測ブロックと元のブロックとの間の値の差を含む。次いで、残差ブロックは、変換スケーリングおよび量子化コンポーネント213に転送される。ピクチャ内推定コンポーネント215およびピクチャ内予測コンポーネント217は、ルーマ成分とクロマ成分の両方に対して動作し得る。
変換スケーリングおよび量子化コンポーネント213は、残差ブロックをさらに圧縮するように構成される。変換スケーリングおよび量子化コンポーネント213は、離散コサイン変換(DCT)、離散サイン変換(DST)、または概念的に同様の変換などの変換を残差ブロックに適用し、残差変換係数値を含むビデオブロックが生成される。ウェーブレット変換、整数変換、サブバンド変換、または他のタイプの変換も使用することができる。変換は、残差情報をピクセル値領域から周波数領域などの変換領域に変換し得る。変換スケーリングおよび量子化コンポーネント213はまた、たとえば周波数に基づいて、変換された残差情報をスケーリングするように構成される。そのようなスケーリングは、異なる周波数情報が異なる粒度で量子化されるように、残差情報にスケールファクタを適用することを伴い、これは、再構成されたビデオの最終的な視覚的品質に影響を及ぼし得る。変換スケーリングおよび量子化コンポーネント213はまた、ビットレートをさらに低減するために変換係数を量子化するように構成される。量子化プロセスは、係数の一部または全部に関連付けられたビット深度を低減し得る。量子化の程度は、量子化パラメータを調整することによって修正されてもよい。いくつかの例では、変換スケーリングおよび量子化コンポーネント213は、次いで、量子化された変換係数を含む行列のスキャンを実行してもよい。量子化された変換係数は、ヘッダフォーマッティングおよびCABACコンポーネント231に転送され、ビットストリームに符号化される。
スケーリングおよび逆変換コンポーネント229は、変換スケーリングおよび量子化コンポーネント213の反対の動作を適用して、動き推定をサポートする。スケーリングおよび逆変換コンポーネント229は、逆スケーリング、変換、および/または量子化を適用して、たとえば、他の現在のブロックのための予測ブロックになり得る参照ブロックとして後で使用するために、画素領域内の残差ブロックを再構成する。動き推定コンポーネント221および/または動き補償コンポーネント219は、後のブロック/フレームの動き推定で使用するために、残差ブロックを対応する予測ブロックに戻して追加することによって、参照ブロックを計算してもよい。スケーリング、量子化、および変換中に作成されるアーティファクトを軽減するために、再構成された参照ブロックにフィルタが適用される。そうでない場合、そのようなアーティファクトは、後続のブロックが予測されるときに、不正確な予測を引き起こす(および追加のアーティファクトを作成する)可能性がある。
フィルタ制御分析コンポーネント227およびループ内フィルタコンポーネント225は、フィルタを残差ブロックおよび/または再構成された画像ブロックに適用する。たとえば、スケーリングおよび逆変換コンポーネント229からの変換された残差ブロックは、元の画像ブロックを再構成するために、ピクチャ内予測コンポーネント217および/または動き補償コンポーネント219からの対応する予測ブロックと結合され得る。次いで、フィルタは、再構成された画像ブロックに適用されてもよい。いくつかの例では、フィルタは、代わりに、残差ブロックに適用され得る。図2の他の構成要素と同様に、フィルタ制御分析コンポーネント227およびループ内フィルタコンポーネント225は、高度に統合され、一緒に実施されてもよいが、概念的な目的のために別々に示されている。再構成された参照ブロックに適用されるフィルタは、特定の空間領域に適用され、そのようなフィルタがどのように適用されるかを調整するための複数のパラメータを含む。フィルタ制御分析コンポーネント227は、再構成された参照ブロックを分析して、そのようなフィルタが適用されるべき場所を決定し、対応するパラメータを設定する。そのようなデータは、符号化のためのフィルタ制御データとして、ヘッダフォーマッティングおよびCABACコンポーネント231に転送される。ループ内フィルタコンポーネント225は、フィルタ制御データに基づいてそのようなフィルタを適用する。フィルタは、デブロッキングフィルタ、雑音抑圧フィルタ、SAOフィルタ、および適応ループフィルタを含み得る。そのようなフィルタは、例に応じて、空間/画素領域(たとえば、再構成されたピクセルブロック)または周波数領域で適用され得る。
エンコーダとして動作するとき、フィルタリングされた再構成画像ブロック、残差ブロック、および/または予測ブロックは、上記で説明したように、動き推定において後で使用するために、復号ピクチャバッファコンポーネント223に記憶される。デコーダとして動作するとき、復号ピクチャバッファコンポーネント223は、再構成されフィルタリングされたブロックを記憶し、出力ビデオ信号の一部としてディスプレイに向けて転送する。復号ピクチャバッファコンポーネント223は、予測ブロック、残差ブロック、および/または再構成された画像ブロックを記憶することができる任意のメモリデバイスであってもよい。
ヘッダフォーマッティングおよびCABACコンポーネント231は、コーデックシステム200の様々なコンポーネントからデータを受信し、そのようなデータを、デコーダに向けて送信するためのコード化ビットストリームに符号化する。具体的には、ヘッダフォーマッティングおよびCABACコンポーネント231は、一般制御データおよびフィルタ制御データなどの制御データを符号化するための様々なヘッダを生成する。さらに、イントラ予測および動きデータを含む予測データ、ならびに量子化された変換係数データの形の残差データはすべて、ビットストリームに符号化される。最終ビットストリームは、元のパーティショニングされたビデオ信号201を再構成するためにデコーダによって望まれるすべての情報を含む。そのような情報はまた、イントラ予測モードインデックステーブル(コードワードマッピングテーブルとも呼ばれる)、様々なブロックのための符号化コンテキストの定義、最確のイントラ予測モードの指示、パーティション情報の指示などを含んでもよい。そのようなデータは、エントロピー符号化を使用することによって符号化され得る。たとえば、情報は、コンテキスト適応型可変長コーディング(CAVLC)、CABAC、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC)、確率間隔区分エントロピー(PIPE)コーディング、または他のエントロピーコーディング技法を使用することによって符号化され得る。エントロピー符号化に続いて、コード化ビットストリームは、他のデバイス(たとえば、ビデオデコーダ)に送信されてもよく、または後の送信または取出しのためにアーカイブされてもよい。
図3は、例示的なビデオエンコーダ300を示すブロック図である。ビデオエンコーダ300は、コーデックシステム200の符号化機能を実装するために、および/または動作方法100のステップ101、103、105、107、および/または109を実装するために使用され得る。エンコーダ300は、入力ビデオ信号をパーティショニングし、パーティショニングされたビデオ信号201と実質的に同様のパーティショニングされたビデオ信号301が得られる。次いで、パーティショニングされたビデオ信号301は、エンコーダ300のコンポーネントによって圧縮され、ビットストリームに符号化される。
具体的には、パーティショニングされたビデオ信号301は、イントラ予測のためにピクチャ内予測コンポーネント317に転送される。ピクチャ内予測コンポーネント317は、ピクチャ内推定コンポーネント215およびピクチャ内予測コンポーネント217と実質的に同様であってもよい。パーティショニングされたビデオ信号301はまた、復号ピクチャバッファコンポーネント323内の参照ブロックに基づくインター予測のために、動き補償コンポーネント321に転送される。動き補償コンポーネント321は、動き推定コンポーネント221および動き補償コンポーネント219と実質的に同様であってもよい。ピクチャ内予測コンポーネント317および動き補償コンポーネント321からの予測ブロックおよび残差ブロックは、残差ブロックの変換および量子化のために、変換および量子化コンポーネント313に転送される。変換および量子化コンポーネント313は、変換スケーリングおよび量子化コンポーネント213と実質的に同様であってもよい。変換され量子化された残差ブロックおよび対応する予測ブロック(関連する制御データとともに)は、ビットストリームへのコーディングのためにエントロピーコーディングコンポーネント331に転送される。エントロピーコーディングコンポーネント331は、ヘッダフォーマッティングおよびCABACコンポーネント231と実質的に同様であってもよい。
変換され量子化された残差ブロックおよび/または対応する予測ブロックはまた、変換および量子化コンポーネント313から逆変換および量子化コンポーネント329に転送され、動き補償コンポーネント321による使用のための参照ブロックに再構成される。逆変換および量子化コンポーネント329は、スケーリングおよび逆変換コンポーネント229と実質的に同様であってもよい。ループ内フィルタコンポーネント325内のループ内フィルタも、例に応じて、残差ブロックおよび/または再構成された参照ブロックに適用される。ループ内フィルタコンポーネント325は、フィルタ制御分析コンポーネント227およびループ内フィルタコンポーネント225と実質的に同様であってもよい。ループ内フィルタコンポーネント325は、ループ内フィルタコンポーネント225について説明したように、複数のフィルタを含んでもよい。次いで、フィルタリングされたブロックは、動き補償コンポーネント321によって参照ブロックとして使用するために、復号ピクチャバッファコンポーネント323に記憶される。復号ピクチャバッファコンポーネント323は、復号ピクチャバッファコンポーネント223と実質的に同様であってもよい。
図4は、例示的なビデオデコーダ400を示すブロック図である。ビデオデコーダ400は、コーデックシステム200の復号機能を実装するために、および/または動作方法100のステップ111、113、115、および/または117を実装するために使用され得る。デコーダ400は、たとえばエンコーダ300からビットストリームを受信し、エンドユーザに表示するためにビットストリームに基づいて再構成された出力ビデオ信号を生成する。
ビットストリームは、エントロピー復号コンポーネント433によって受信される。エントロピー復号コンポーネント433は、CAVLC、CABAC、SBAC、PIPEコーディング、または他のエントロピーコーディング技法などのエントロピー復号方式を実装するように構成される。たとえば、エントロピー復号コンポーネント433は、ヘッダ情報を使用して、ビットストリーム内のコードワードとして符号化された追加のデータを解釈するためのコンテキストを提供し得る。復号された情報は、一般制御データ、フィルタ制御データ、パーティション情報、動きデータ、予測データ、および残差ブロックからの量子化された変換係数など、ビデオ信号を復号するための任意の所望の情報を含む。量子化された変換係数は、残差ブロックへの再構成のために逆変換および量子化コンポーネント429に転送される。逆変換および量子化コンポーネント429は、逆変換および量子化コンポーネント329と同様であってもよい。
再構成された残差ブロックおよび/または予測ブロックは、イントラ予測動作に基づいて画像ブロックに再構成するために、ピクチャ内予測コンポーネント417に転送される。ピクチャ内予測コンポーネント417は、ピクチャ内推定コンポーネント215およびピクチャ内予測コンポーネント217と同様であってもよい。具体的には、ピクチャ内予測コンポーネント417は、予測モードを使用して、フレーム内の参照ブロックの位置を見つけ、残差ブロックを結果に適用して、イントラ予測画像ブロックを再構成する。再構成されたイントラ予測画像ブロックおよび/または残差ブロックならびに対応するインター予測データは、それぞれ、復号ピクチャバッファコンポーネント223およびループ内フィルタコンポーネント225と実質的に同様であり得るループ内フィルタコンポーネント425を介して、復号ピクチャバッファコンポーネント423に転送される。ループ内フィルタコンポーネント425は、再構成された画像ブロック、残差ブロック、および/または予測ブロックをフィルタリングし、そのような情報は、復号ピクチャバッファコンポーネント423に記憶される。復号ピクチャバッファコンポーネント423からの再構成された画像ブロックは、インター予測のために動き補償コンポーネント421に転送される。動き補償コンポーネント421は、動き推定コンポーネント221および/または動き補償コンポーネント219と実質的に同様であってもよい。具体的には、動き補償コンポーネント421は、参照ブロックからの動きベクトルを使用して予測ブロックを生成し、その結果に残差ブロックを適用して画像ブロックを再構成する。結果として得られる再構成されたブロックは、ループ内フィルタコンポーネント425を介して復号ピクチャバッファコンポーネント423に転送してもよい。復号ピクチャバッファコンポーネント423は、引き続き、パーティション情報を介してフレームに再構成され得る追加の再構成された画像ブロックを記憶する。そのようなフレームは、シーケンス内に配置されてもよい。このシーケンスは、再構成された出力ビデオ信号としてディスプレイに向けて出力される。
図5は、レイヤ間予測521のために構成された例示的なマルチレイヤビデオシーケンス500を示す概略図である。マルチレイヤビデオシーケンス500は、コーデックシステム200および/またはエンコーダ300などのエンコーダによって符号化され、たとえば方法100に従って、コーデックシステム200および/またはデコーダ400などのデコーダによって復号され得る。マルチレイヤビデオシーケンス500は、コード化ビデオシーケンスにおけるレイヤのための例示的なアプリケーションを示すために含まれる。マルチレイヤビデオシーケンス500は、レイヤN531およびレイヤN+1 532など、複数のレイヤを使用する任意のビデオシーケンスである。
一例では、マルチレイヤビデオシーケンス500は、レイヤ間予測521を用いてもよい。レイヤ間予測521は、ピクチャ511、512、513、および514と、異なるレイヤのピクチャ515、516、517、および518との間で適用される。図示の例では、ピクチャ511、512、513、および514は、レイヤN+1 532の一部であり、ピクチャ515、516、517、および518は、レイヤN531の一部である。レイヤN531および/またはレイヤN+1 532などのレイヤは、類似のサイズ、品質、解像度、信号対雑音比、能力などの特性の類似の値にすべて関連付けられたピクチャのグループである。レイヤは、同じnuh_layer_idを共有するVCL NALユニットおよび関連する非VCL NALユニットのセットとして形式的に定義され得る。VCL NALユニットは、ピクチャのコード化スライスなど、ビデオデータを含むようにコード化されたNALユニットである。非VCL NALユニットは、ビデオデータの復号、適合性検査の実行、または他の動作をサポートするシンタックスおよび/またはパラメータなど、非ビデオデータを含むNALユニットである。
図示の例では、レイヤN+1 532は、レイヤN531よりも大きい画像サイズに関連付けられている。したがって、レイヤN+1 532内のピクチャ511、512、513、および514は、この例では、レイヤN531内のピクチャ515、516、517、および518よりも大きいピクチャサイズ(たとえば、より大きい高さおよび幅、したがってより多くのサンプル)を有する。しかしながら、そのようなピクチャは、他の特性によって、レイヤN+1 532とレイヤN531との間で分けられることができる。レイヤN+1 532およびレイヤN531の2つのレイヤのみが示されているが、ピクチャのセットは、関連付けられた特性に基づいて任意の数のレイヤに分けられることができる。レイヤN+1 532およびレイヤN531はまた、レイヤ識別子(ID)によって示されてもよい。レイヤIDは、ピクチャに関連付けられたデータの項目であり、ピクチャが指示されたレイヤの一部であることを示す。したがって、各ピクチャ511~518は、どのレイヤN+1 532またはレイヤN531が対応するピクチャを含むかを示すために、対応するレイヤIDに関連付けられ得る。たとえば、レイヤIDは、NALユニットヘッダレイヤ識別子(nuh_layer_id)を含んでいてもよく、(たとえば、レイヤ内のピクチャのスライスおよび/またはパラメータを含む)NALユニットを含むレイヤの識別子を指定するシンタックス要素である。レイヤN531のような、より低い品質/ビットストリームサイズに関連付けられたレイヤは、一般に、より低いレイヤIDが割り当てられ、より低いレイヤと呼ばれる。さらに、レイヤN+1 532のような、より高い品質/ビットストリームサイズに関連付けられたレイヤは、一般に、より高いレイヤIDが割り当てられ、上位レイヤと呼ばれる。
異なるレイヤ531~532内のピクチャ511~518は、代替として表示されるように構成される。特定の例として、デコーダは、より小さいピクチャが望まれる場合、現在の表示時間にピクチャ515を復号し、表示してもよく、または、デコーダは、より大きいピクチャが望まれる場合、現在の表示時間にピクチャ511を復号し、表示してもよい。したがって、上位レイヤN+1 532のピクチャ511~514は、(ピクチャサイズの差にもかかわらず)下位レイヤN531の対応するピクチャ515~518と実質的に同じ画像データを含む。具体的には、ピクチャ511は、ピクチャ515と実質的に同じ画像データを含み、ピクチャ512は、ピクチャ516と実質的に同じ画像データを含む、などである。
ピクチャ511~518は、同じレイヤN531またはN+1 532内の他のピクチャ511~518を参照することによってコード化することができる。同じレイヤ内の他のピクチャを参照してピクチャをコード化すると、インター予測523が生じる。インター予測523は、実線矢印によって示されている。たとえば、ピクチャ513は、レイヤN+1 532内のピクチャ511、512、および/または514のうちの1つまたは2つを参照として使用するインター予測523を使用することによってコード化されてもよく、1つのピクチャは、一方向インター予測のために参照され、および/または2つのピクチャは、双方向インター予測のために参照される。さらに、ピクチャ517は、レイヤN531内のピクチャ515、516、および/または518のうちの1つまたは2つを参照として使用するインター予測523を使用することによってコード化されてもよく、1つのピクチャは、一方向インター予測のために参照され、および/または2つのピクチャは、双方向インター予測のために参照される。インター予測523を実行するときに、ピクチャが同じレイヤ内の他のピクチャの参照として使用されるとき、そのピクチャは、参照ピクチャと呼ばれることがある。たとえば、ピクチャ512は、インター予測523に従ってピクチャ513をコード化するために使用される参照ピクチャであってもよい。インター予測523はまた、マルチレイヤコンテキストにおけるイントラレイヤ予測と呼ぶことができる。したがって、インター予測523は、参照ピクチャと現在のピクチャとが同じレイヤにある場合、現在のピクチャとは異なる参照ピクチャ内の示されたサンプルを参照することによって、現在のピクチャのサンプルをコード化する機構である。
ピクチャ511~518は、異なるレイヤ内の他のピクチャ511~518を参照することによってコード化することもできる。このプロセスは、レイヤ間予測521として知られており、破線の矢印で示されている。レイヤ間予測521は、現在のピクチャと参照ピクチャとが異なるレイヤにあり、したがって異なるレイヤIDを有する場合、参照ピクチャ内の示されたサンプルを参照することによって、現在のピクチャのサンプルをコード化する機構である。たとえば、下位レイヤN531のピクチャは、上位レイヤN+1 532で対応するピクチャをコード化するための参照ピクチャとして使用することができる。具体的な例として、ピクチャ511は、レイヤ間予測521に従ってピクチャ515を参照することによってコード化することができる。そのような場合、ピクチャ515は、レイヤ間参照ピクチャとして使用される。レイヤ間参照ピクチャは、レイヤ間予測521に使用される参照ピクチャである。ほとんどの場合、レイヤ間予測521は、ピクチャ511などの現在のピクチャが、同じAUに含まれ、ピクチャ515などの下位レイヤにあるレイヤ間参照ピクチャのみを使用できるように制約される。AUは、ビデオシーケンス内の特定の出力時間に関連付けられたピクチャのセットであり、したがって、AUは、レイヤ当たり1ピクチャを含むことができる。複数のレイヤ(たとえば、3つ以上)が利用可能である場合、レイヤ間予測521は、現在のピクチャよりも低いレベルで、複数のレイヤ間参照ピクチャに基づいて現在のピクチャを符号化/復号することができる。
ビデオエンコーダは、インター予測523およびレイヤ間予測521の多くの異なる組合せおよび/または置換を介してピクチャ511~518を符号化するために、マルチレイヤビデオシーケンス500を使用することができる。たとえば、ピクチャ515は、イントラ予測に従ってコード化され得る。次いで、ピクチャ515を参照ピクチャとして使用することによって、インター予測523に従って、ピクチャ516~518をコード化することができる。さらに、ピクチャ515をレイヤ間参照ピクチャとして使用することによって、レイヤ間予測521に従って、ピクチャ511をコード化してもよい。次いで、ピクチャ511を参照ピクチャとして使用することによって、インター予測523に従って、ピクチャ512~514をコード化することができる。したがって、参照ピクチャは、異なるコーディング機構のシングルレイヤ参照ピクチャとレイヤ間参照ピクチャの両方として機能することができる。下位レイヤN531ピクチャに基づいて上位レイヤN+1 532ピクチャをコード化することによって、上位レイヤN+1 532は、インター予測523およびレイヤ間予測521よりもはるかに低いコーディング効率を有するイントラ予測を用いることを回避することができる。したがって、イントラ予測の乏しいコーディング効率を、最小/最低品質ピクチャに制限することができ、したがって、最小量のビデオデータをコード化することに制限することができる。参照ピクチャおよび/またはレイヤ間参照ピクチャとして使用されるピクチャは、参照ピクチャリスト構造に含まれる参照ピクチャリストのエントリの中に示すことができる。
そのような動作を実行するために、レイヤN531およびレイヤN+1 532などのレイヤをOLS525に含めてもよい。OLS525は、1つまたは複数のレイヤが出力レイヤとして指定されるレイヤのセットである。出力レイヤは、(たとえば、ディスプレイへの)出力のために指定されるレイヤである。たとえば、レイヤN531は、レイヤ間予測521をサポートするためだけに含まれてもよく、決して出力されなくてもよい。そのような場合、レイヤN+1 532は、レイヤN531に基づいて復号され、出力される。そのような場合、OLS525は、出力レイヤとしてレイヤN+1 532を含む。OLS525は、異なる組合せで多くのレイヤを含み得る。たとえば、OLS525内の出力レイヤは、1つ、2つ、または多くの下位レイヤに基づいて、レイヤ間予測521に従ってコード化することができる。さらに、OLS525は、2つ以上の出力レイヤを含んでもよい。したがって、OLS525は、1つまたは複数の出力レイヤと、出力レイヤを再構成するために必要な任意のサポートレイヤとを含み得る。マルチレイヤビデオシーケンス500は、各々がレイヤの異なる組合せを使用する多くの異なるOLS525を使用することによってコード化することができる。
特定の例として、レイヤ間予測521は、スケーラビリティをサポートするために使用され得る。たとえば、ビデオは、レイヤN531などのベースレイヤと、レイヤN+1 532、レイヤN+2、レイヤN+3などいくつかのエンハンスメントレイヤとにコード化することができ、これらは、レイヤ間予測521に従ってコード化される。解像度、フレームレート、ピクチャサイズなどいくつかのスケーラブルな特性のために、ビデオシーケンスをコード化することができる。次いで、OLS525を、各許容可能な特性のために作成することができる。たとえば、第1の解像度のOLS525は、レイヤN531のみを含んでいてもよく、第2の解像度のOLS525は、レイヤN531およびレイヤN+1 532を含んでいてもよく、第3の解像度のOLSは、レイヤN531、レイヤN+1 532、レイヤN+2などを含んでもよい。このようにして、ネットワーク条件、ハードウェア制約などに基づいて、マルチレイヤビデオシーケンス500のどのバージョンが望まれるかをデコーダが復号することを可能にするために、OLS525を送信することができる。
図6は、マルチビューで使用するためのサイマルキャストレイヤ631、632、633、および634を含む例示的なマルチビューシーケンス600を示す概略図である。マルチビューシーケンス600は、マルチレイヤビデオシーケンス500の一種である。したがって、マルチビューシーケンス600は、コーデックシステム200および/またはエンコーダ300などのエンコーダによって符号化され、たとえば方法100に従って、コーデックシステム200および/またはデコーダ400などのデコーダによって復号され得る。
マルチビュービデオは、立体視映像とも呼ばれる。マルチビューでは、ビデオシーケンスは、複数のカメラアングルから単一のビデオストリームに同時にキャプチャされる。たとえば、空間的にオフセットされた一対のカメラを使用して、ビデオをキャプチャすることができる。各カメラは、異なる角度からビデオをキャプチャする。この結果、同じ主題の一対のビューが得られる。第1のビューをユーザの右眼に提示し、第2のビューをユーザの左眼に提示することができる。たとえば、これは、左眼ディスプレイと別個の右眼ディスプレイとを含むヘッドマウントディスプレイ(HMD)を使用することによって達成することができる。異なる角度から同じ主題の一対のストリームを表示することは、視覚的奥行きの印象を作成し、したがって、3Dビューイングエクスペリエンスを作成する。
マルチビューを実施するために、ビデオを、OLS525に類似のOLS625およびOLS626など複数のOLSへと符号化することができる。各ビューは、レイヤN531と同様であり得るレイヤ631、632、633、および634などのレイヤへと符号化される。特定の例として、右眼ビューを、レイヤ631へと符号化し、左眼ビューを、レイヤ632へと符号化することができる。次いで、レイヤ631および632をOLS625に含めることができる。このようにして、OLS625は、レイヤ631および632が出力レイヤとしてマークされた状態で、デコーダに送信され得る。次いで、デコーダは、レイヤ631と632の両方を復号し、表示することができる。したがって、OLS625は、マルチビュービデオの表現を可能にするのに十分なデータを提供する。他のタイプのビデオと同様に、マルチビュービデオは、異なるディスプレイデバイス、異なるネットワーク条件などを可能にするために、いくつかの表現に符号化されてもよい。したがって、OLS626は、OLS625と実質的に同様であるが、異なる特性を達成するためにコード化されたビデオを含む。たとえば、レイヤ633は、レイヤ631と実質的に同様であってもよく、レイヤ634は、レイヤ632と実質的に同様であってもよい。しかしながら、レイヤ633および634は、レイヤ631および632とは異なる特性を有してもよい。具体的な例として、レイヤ633および634は、レイヤ631および632とは異なる解像度、フレームレート、画面サイズなどで符号化され得る。特定の例として、第1のピクチャ解像度が望まれる場合、OLS625がデコーダに送信されることができ、第2のピクチャ解像度が望まれる場合、OLS626がデコーダに送信されることができる。
いくつかの事例では、スケーラビリティは使用されない。レイヤ間予測を用いないレイヤは、サイマルキャストレイヤと呼ばれる。他のレイヤを参照することなく、サイマルキャストレイヤを完全に復号することができる。たとえば、示されているレイヤ631~634は、いかなる参照レイヤにも依存しないので、すべてサイマルキャストレイヤである。この構成は、いくつかのビデオコーディングシステムにおいてエラーを引き起こす可能性がある。
たとえば、いくつかのビデオコーディングシステムは、すべてのレイヤがサイマルキャストされるとき、各OLSが単一のレイヤを含むことを推論するように構成され得る。いくつかの事例では、そのような推論は、妥当である。たとえば、スケーラビリティが標準ビデオに使用されないとき、システムは、各サイマルキャストレイヤを任意の他のレイヤなしに表示することができると仮定することができ、したがって、OLSは、1つのレイヤのみを含むものとする。この推論は、マルチビューが適切に動作することを阻止する可能性がある。図示のように、OLS625および626は各々、それぞれ、2つのレイヤ631および632と、レイヤ633および634とを含む。そのような場合、デコーダは、どちらのレイヤを復号すべきか不確かであり、1つのレイヤのみが予想されるので、両方のレイヤを復号し、表示しないことがある。
本開示は、ビットストリームにおいてeach_layer_is_an_ols_flagを使用することによって、この問題に対処する。具体的には、vps_all_independent_layers_flagによって示されるように、すべてのレイヤ631~634がサイマルキャストされると、each_layer_is_an_ols_flagがシグナリングされる。each_layer_is_an_ols_flagは、各OLSが単一のレイヤを含むかどうか、またはOLS625および626など任意のOLSが2つ以上のレイヤを含むかどうかを示す。これにより、マルチビューシーケンス600を適切に復号することができる。さらに、ols_mode_idcは、OLS625~626の数ならびにレイヤ631~634に関連する情報が明示的にシグナリングされるべきであることを示すように設定され得る(たとえば、どのレイヤ631~634が出力レイヤであるかの指示)。これらのフラグは、デコーダがマルチビューを使用してOLS625および/または626を正しく復号し、表示するのに十分な情報を提供する。each_layer_is_an_ols_flag、vps_all_independent_layers_flag、およびols_mode_idcは、VVC標準化によって使用される命名法に基づいて命名されることに留意されたい。説明の一貫性および明確性のために、ここでは、そのような名前が含まれる。しかしながら、そのようなシンタックス要素は、本開示の範囲から逸脱することなく、他の名前で呼ばれてもよい。
図7は、マルチビューで使用するためのサイマルキャストレイヤを有するOLSを含む例示的なビットストリーム700を示す概略図である。たとえば、ビットストリーム700は、方法100に従って、コーデックシステム200および/またはデコーダ400による復号のために、コーデックシステム200および/またはエンコーダ300によって生成されることができる。さらに、ビットストリーム700は、コード化されたマルチレイヤビデオシーケンス500および/またはマルチビューシーケンス600を含み得る。
ビットストリーム700は、VPS711と、1つまたは複数のシーケンスパラメータセット(SPS)713と、複数のピクチャパラメータセット(PPS)715と、複数のスライスヘッダ717と、画像データ720とを含む。VPS711は、ビットストリーム700全体に関するデータを含む。たとえば、VPS711は、ビットストリーム700で使用されるデータ関連OLS、レイヤ、および/またはサブレイヤを含んでもよい。SPS713は、ビットストリーム700に含まれるコード化ビデオシーケンス内のすべてのピクチャに共通のシーケンスデータを含む。たとえば、各レイヤは、1つまたは複数のコード化ビデオシーケンスを含んでいてもよく、各コード化ビデオシーケンスは、対応するパラメータについてSPS713を参照してもよい。SPS713内のパラメータは、ピクチャサイジング、ビット深度、コーディングツールパラメータ、ビットレート制限などを含むことができる。各シーケンスはSPS713を指すが、いくつかの例では、単一のSPS713が複数のシーケンスのためのデータを含むことができることに留意されたい。PPS715は、ピクチャ全体に適用されるパラメータを含む。したがって、ビデオシーケンス内の各ピクチャは、PPS715を参照し得る。各ピクチャはPPS715を参照するが、いくつかの例では、単一のPPS715が複数のピクチャのデータを含むことができることに留意されたい。たとえば、複数の類似のピクチャが、類似のパラメータに従ってコード化され得る。そのような場合、単一のPPS715は、そのような類似のピクチャのデータを含み得る。PPS715は、対応するピクチャ内のスライス、量子化パラメータ、オフセットなどに利用可能なコーディングツールを示すことができる。
スライスヘッダ717は、ピクチャ725内の各スライス727に固有のパラメータを含む。したがって、ビデオシーケンスにはスライス727ごとに1つのスライスヘッダ717が存在し得る。スライスヘッダ717は、スライスタイプ情報、POC、参照ピクチャリスト、予測重み、タイルエントリポイント、デブロッキングパラメータなどを含み得る。いくつかの例では、ビットストリーム700は、単一のピクチャ内のすべてのスライス727に適用されるパラメータを含むシンタックス構造であるピクチャヘッダも含み得ることに留意されたい。このため、ピクチャヘッダおよびスライスヘッダ717は、いくつかのコンテキストにおいて交換可能に使用され得る。たとえば、いくつかのパラメータは、そのようなパラメータがピクチャ725内のすべてのスライス727に共通であるかどうかに応じて、スライスヘッダ717とピクチャヘッダとの間で移動され得る。
画像データ720は、インター予測および/またはイントラ予測に従って符号化されたビデオデータ、ならびに対応する変換および量子化された残差データを含む。たとえば、画像データ720は、ピクチャ725のレイヤ723を含んでもよい。レイヤ723は、OLS721に編成され得る。OLS721は、OLS525、625、および/または626と実質的に同様であってもよい。具体的には、OLS721は、1つまたは複数のレイヤ723が出力レイヤとして指定されるレイヤ723のセットである。たとえば、ビットストリーム700は、異なる解像度、フレームレート、ピクチャ725サイズなどでコード化されたビデオを有するいくつかのOLS721を含むようにコード化されてもよい。デコーダによる要求があると、サブビットストリーム抽出プロセスは、要求されたOLS721を除くすべてをビットストリーム700から除去することができる。次いで、エンコーダは、要求されたOLS721のみ、したがって要求された基準を満たすビデオのみを含むビットストリーム700をデコーダに送信することができる。
レイヤ723は、レイヤN531、レイヤN+1 532、ならびに/またはレイヤ631、632、633、および/もしくは634と実質的に同様であってもよい。レイヤ723は、一般に、符号化されたピクチャ725のセットである。レイヤ723は、復号されると、指定された特性(たとえば、共通の解像度、フレームレート、画像サイズなど)を共有するVCL NALユニットのセットとして正式に定義され得る。レイヤ723はまた、VCL NALユニットの復号をサポートするために、関連付けられた非VCL NALユニットを含む。レイヤ723のVCL NALユニットは、nuh_layer_idの特定の値を共有し得る。レイヤ723は、レイヤ間予測なしにコード化されるサイマルキャストレイヤであってもよく、または、それぞれ図6および図5について説明されるように、レイヤ間予測に従ってコード化されるレイヤ723であってもよい。
ピクチャ725は、フレームまたはそのフィールドを作成するルーマサンプルのアレイおよび/またはクロマサンプルのアレイである。たとえば、ピクチャ725は、表示のために出力され得るか、または出力のために他のピクチャ725のコード化をサポートするために使用され得る、コード化された画像であり得る。ピクチャ725は、VCL NALユニットのセットを含んでもよい。ピクチャ725は、1つまたは複数のスライス727を含む。スライス727は、単一のNALユニット、特にVCL NALユニットに排他的に含まれるピクチャ725の整数個の完全タイル、または整数個の連続完全コーディングツリーユニット(CTU)行(たとえば、タイル内)として定義され得る。スライス727は、CTUおよび/またはコーディングツリーブロック(CTB)にさらに分割される。CTUは、コーディングツリーによってパーティショニングすることができるあらかじめ定義されたサイズのサンプルのグループである。CTBは、CTUのサブセットであり、CTUのルーマ成分またはクロマ成分を含む。CTU/CTBは、コーディングツリーに基づいてコーディングブロックにさらに分割される。次いで、コーディングブロックは、予測機構に従って符号化/復号されることができる。
本開示は、ビデオ内のすべてのレイヤ723がサイマルキャストされ、レイヤ間予測を用いないとき、ビデオコーディングシステムが、マルチビューシーケンス600などのマルチビュービデオを適切に復号することを可能にする機構を含む。たとえば、VPS711は、レイヤ723がすべてサイマルキャストであること、およびOLS721が2つ以上のレイヤ723を含むことをデコーダに示すための様々なデータを含むことができる。vps_all_independent_layers_flag731を、VPS711内のビットストリーム700に含めることができる。vps_all_independent_layers_flag731は、レイヤ間予測がビットストリーム700内のレイヤ723のいずれかをコード化するために使用されるかどうかをシグナリングするシンタックス要素である。たとえば、vps_all_independent_layers_flag731は、レイヤ723のいずれもレイヤ間予測を用いず、したがって、すべてがサイマルキャストされるときに1に設定することができる。他の例では、vps_all_independent_layers_flag731は、レイヤ723のうちの少なくとも1つがレイヤ間予測を用いることを示すために、0に設定することができる。vps_all_independent_layers_flag731が1にセットされて、すべてのレイヤ723がサイマルキャストされることを示すとき、each_layer_is_an_ols_flag733がVPS711においてシグナリングされる。each_layer_is_an_ols_flag733は、ビットストリーム700内の各OLS721が単一のレイヤ723を含むかどうかをシグナリングするシンタックス要素である。たとえば、各OLS721は、ほとんどの場合、単一のサイマルキャストレイヤを含み得る。しかしながら、マルチビュービデオがビットストリーム700へと符号化されるとき、1つまたは複数のOLS721は、2つのサイマルキャストレイヤを含み得る。したがって、each_layer_is_an_ols_flag733は、各OLS721が単一のレイヤ723を含むことを指定するために(たとえば、1に)設定され、または少なくとも1つのOLS721がマルチビューをサポートするために2つ以上のレイヤ723を含むことを指定するために(たとえば、0に)設定され得る。したがって、vps_all_independent_layers_flag731およびeach_layer_is_an_ols_flag733は、マルチビューアプリケーションをサポートするために使用されることができる。
さらに、VPS711は、ols_mode_idc735を含んでもよい。ols_mode_idc735は、OLS721の数、OLS721のレイヤ723、OLS721の出力レイヤに関する情報を示すシンタックス要素である。出力レイヤ723は、参照ベースのコーディングのためだけに使用されるのとは対照的に、デコーダによる出力のために指定される任意のレイヤである。ols_mode_idc735は、他のタイプのビデオをコーディングするために0または1に設定され得る。ols_mode_idc735は、マルチビューをサポートするために2に設定されることができる。たとえば、vps_all_independent_layers_flag731が1に設定され(サイマルキャストレイヤを示す)、each_layer_is_an_ols_flag733が0に設定され、少なくとも1つのOLS721が2つ以上のレイヤ723を含むことを示すとき、ols_mode_idc735は、2に設定することができる。ols_mode_idc735が2に設定されると、OLS721の数と、各OLS721に含まれるレイヤ723および/または出力レイヤの数に関する情報とが明示的にシグナリングされる。
VPS711はまた、vps_max_layers_minus1 737を含んでもよい。vps_max_layers_minus1 737は、VPS711によって指定されるレイヤ723の数、したがって、ビットストリーム700内の対応するコード化ビデオシーケンスにおいて許可されるレイヤ723の最大数をシグナリングするシンタックス要素である。VPS711はまた、num_output_layer_sets_minus1 739を含んでもよい。num_output_layer_sets_minus1 739は、VPS711によって指定されるOLS721の総数を指定するシンタックス要素である。一例では、vps_max_layers_minus1 737およびnum_output_layer_sets_minus1 739は、ols_mode_idc735が2に設定されているとき、VPS711においてシグナリングされ得る。これにより、ビデオがマルチビューを含むとき、OLS721の数およびレイヤ723の数がシグナリングされる。具体的には、vps_max_layers_minus1 737およびnum_output_layer_sets_minus1 739は、vps_all_independent_layers_flag731が1に設定され(サイマルキャストレイヤを示す)、each_layer_is_an_ols_flag733が0に設定され、少なくとも1つのOLS721が2つ以上のレイヤ723を含むことを示すとき、シグナリングされ得る。次いで、デコーダは、この情報を使用して、マルチビュービデオを含むOLS721を正しく復号することができる。このアプローチは、エラーを補正しながらコーディング効率をサポートする。特に、マルチビューがサポートされる。しかしながら、マルチビューが使用されないとき、OLS721および/またはレイヤ723の数は、依然としてビットストリーム700から推論され、省略され得る。したがって、開示された機構は、そのようなデバイスがマルチビュービデオを適切にコーディングできるようにすることによって、エンコーダおよび/またはデコーダの機能を向上させる。さらに、開示された機構は、低減されたビットストリームサイズを維持し、したがって、エンコーダとデコーダの両方におけるプロセッサ、メモリ、および/またはネットワークリソースの利用を低減し得る。
ここで、前述の情報について、以下でより詳細に説明する。階層化ビデオコーディングは、スケーラブルビデオコーディングまたはスケーラビリティを有するビデオコーディングとも呼ばれる。ビデオコーディングにおけるスケーラビリティは、マルチレイヤコーディング技法を使用することによってサポートされ得る。マルチレイヤビットストリームは、ベースレイヤ(BL)と、1つまたは複数のエンハンスメントレイヤ(EL)とを含む。スケーラビリティの例には、空間スケーラビリティ、品質/信号対雑音比(SNR)スケーラビリティ、マルチビュースケーラビリティ、フレームレートスケーラビリティなどがある。マルチレイヤコーディング技法が使用されると、参照ピクチャを使用することなく、ピクチャまたはその一部をコード化(イントラ予測)してもよく、同じレイヤにおける参照ピクチャを参照することによってコード化(インター予測)してもよく、および/または他のレイヤにおける参照ピクチャを参照することによってコード化(レイヤ間予測)してもよい。現在のピクチャのレイヤ間予測に使用される参照ピクチャは、レイヤ間参照ピクチャ(ILRP)と呼ばれる。図5は、異なるレイヤのピクチャが異なる解像度を有する空間スケーラビリティのためのマルチレイヤコーディングの一例を示す。
いくつかのビデオコーディングファミリは、シングルレイヤコーディングのために、プロファイルから分けられたプロファイルにおけるスケーラビリティのサポートを提供する。スケーラブルビデオコーディング(SVC)は、空間、時間、および品質スケーラビリティのサポートを提供するアドバンストビデオコーディング(AVC)のスケーラブル拡張である。SVCの場合、ELピクチャ内の各マクロブロック(MB)において、下位レイヤからのコロケートされたブロックを使用してEL MBが予測されるかどうかを示すフラグがシグナリングされる。コロケートされたブロックからの予測は、テクスチャ、動きベクトル、および/またはコーディングモードを含み得る。SVCの実装は、それらの設計において未修正のAVC実装を直接再利用することはできない。SVC ELマクロブロックシンタックスおよび復号プロセスは、AVCシンタックスおよび復号プロセスとは異なる。
スケーラブルHEVC(SHVC)は、空間スケーラビリティおよび品質スケーラビリティをサポートするHEVCの拡張である。マルチビューHEVC(MV-HEVC)は、マルチビュースケーラビリティをサポートするHEVCの拡張である。3D HEVC(3D-HEVC)は、MV-HEVCよりも高度で効率的な3Dビデオコーディングのサポートを提供するHEVCの拡張である。時間スケーラビリティは、シングルレイヤHEVCコーデックの一体部分として含まれてもよい。HEVCのマルチレイヤ拡張では、レイヤ間予測に使用される復号されたピクチャは、同じAUからのみ得られ、長期参照ピクチャ(LTRP)として扱われる。そのようなピクチャには、参照ピクチャリスト内の参照インデックスが、現在のレイヤ内の他の時間参照ピクチャとともに割り当てられる。レイヤ間予測(ILP)は、参照ピクチャリスト内のレイヤ間参照ピクチャを参照するように参照インデックスの値を設定することによって、予測ユニット(PU)レベルで達成される。空間スケーラビリティは、ILRPが符号化または復号されている現在のピクチャとは異なる空間解像度を有するとき、参照ピクチャまたはその一部を再サンプリングする。参照ピクチャの再サンプリングは、ピクチャレベルまたはコーディングブロックレベルのいずれかで実現することができる。
VVCはまた、階層化ビデオコーディングもサポートし得る。VVCビットストリームは、複数のレイヤを含むことができる。レイヤはすべて、互いに独立であることができる。たとえば、各レイヤは、レイヤ間予測を用いることなく、コード化されることができる。この場合、レイヤは、サイマルキャストレイヤとも呼ばれる。いくつかの場合には、レイヤのいくつかは、ILPを使用してコード化される。VPS内のフラグは、レイヤがサイマルキャストレイヤであるかどうか、またはいくつかのレイヤがILPを使用するかどうかを示すことができる。いくつかのレイヤがILPを使用するとき、レイヤ間のレイヤ依存関係もVPSでシグナリングされる。SHVCおよびMV-HEVCとは異なり、VVCはOLSを指定しなくてもよい。OLSは、レイヤの指定されたセットを含み、レイヤのセット内の1つまたは複数のレイヤは、出力レイヤであるように指定される。出力レイヤは、出力されるOLSのレイヤである。VVCのいくつかの実装形態では、レイヤがサイマルキャストレイヤであるとき、復号および出力のために1つのレイヤのみが選択され得る。VVCのいくつかの実装形態では、すべてのレイヤを含むビットストリーム全体は、任意のレイヤがILPを使用するときに復号されるように指定される。さらに、レイヤのうちのいくつかのレイヤは、出力レイヤとして指定される。出力レイヤは、最上位レイヤのみ、すべてのレイヤ、または最上位レイヤ、プラス、示された下位レイヤのセットであるように示されてもよい。
前述の態様は、いくつかの問題を含む。たとえば、レイヤがサイマルキャストレイヤであるとき、復号および出力のために1つのレイヤのみが選択されてもよい。しかしながら、このアプローチは、マルチビューアプリケーションにおけるように、2つ以上のレイヤが復号され、出力され得る場合をサポートしない。
一般に、本開示は、サイマルキャストレイヤの複数の出力レイヤを有する動作点をサポートするためのアプローチについて説明する。技法の記述は、ITU-TおよびISO/IECのJVETによるVVCに基づく。しかしながら、この技法は、他のビデオコーデック仕様に基づく階層化ビデオコーディングにも適用される。
上記の問題の1つまたは複数は、次のようにして解決することができる。具体的には、本開示は、以下に要約されるように、サイマルキャストレイヤを含むビットストリームの複数のレイヤの復号および出力をサポートするための単純かつ効率的な方法を含む。VPSは、各レイヤがOLSであるかどうかの指示を含み得る。各レイヤがOLSであるとき、1つのレイヤのみを復号し、出力することができる。この場合、OLSの数は、レイヤの数に等しいと推論される。さらに、各OLSは、1つのレイヤを含み、そのレイヤは、出力レイヤである。そうでない場合、OLSの数が明示的にシグナリングされる。0番目のOLSを除く各OLSについて、OLSに含まれるレイヤは、明示的にシグナリングされてもよい。さらに、各OLS内の各レイヤは、出力レイヤであると推論することができる。0番目のOLSは、出力レイヤである最下位レイヤのみを含む。
前述の機構の例示的な実装形態は、次の通りである。例示的なビデオパラメータセットシンタックスは、次の通りである。
例示的なビデオパラメータセットセマンティクスは、次の通りである。VPS RBSPは、参照される前に復号プロセスに利用可能であり、0に等しいか、または外部機構を介して提供されるTemporalIdを有する少なくとも1つのアクセスユニットに含まれ、VPS RBSPを含むVPS NALユニットは、vps_layer_id[0]に等しいnuh_layer_idを有するべきである。CVS内のvps_video_parameter_set_idの特定の値を有するすべてのVPS NALユニットは、同じ内容を有するべきである。vps_video_parameter_set_idは、他のシンタックス要素による参照のためのVPSの識別子を提供する。vps_max_layers_minus1プラス1は、VPSを参照する各CVSにおけるレイヤの最大許容数を指定する。vps_max_sub_layers_minus1プラス1は、VPSを参照する各CVSに存在し得る時間サブレイヤの最大数を指定する。vps_max_sub_layers_minus1の値は、0から6まで(を含む)の範囲であるべきである。
vps_all_independent_layers_flagは、CVS内のすべてのレイヤが、レイヤ間予測を用いることなく、独立してコード化されることを指定するために、1に等しく設定され得る。vps_all_independent_layers_flagは、CVS内のレイヤのうちの1つまたは複数がレイヤ間予測を用い得ることを指定するために、0に等しく設定され得る。存在しないとき、vps_all_independent_layers_flagの値は0に等しいと推論される。vps_all_independent_layers_flagが1に等しいとき、vps_independent_layer_flag[i]の値は1に等しいと推論される。vps_all_independent_layers_flagが0に等しいとき、vps_independent_layer_flag[0]の値は0に等しいと推論される。vps_layer_id[i]は、i番目のレイヤのnuh_layer_id値を指定する。mとnの任意の2つの非負整数値の場合、mがnよりも小さいとき、vps_layer_id[m]の値はvps_layer_id[n]より小さいべきである。vps_independent_layer_flag[i]は、インデックスiを有するレイヤがレイヤ間予測を用いないことを指定するために、1に等しく設定され得る。vps_independent_layer_flag[i]は、インデックスiを有するレイヤがレイヤ間予測を用い、vps_layer_dependency_flag[i]がVPSに存在することを指定するために、0に等しく設定され得る。存在しないとき、vps_independent_layer_flag[i]の値は1に等しいと推論される。
vps_direct_dependency_flag[i][j]は、インデックスjを有するレイヤがインデックスiを有するレイヤの直接参照レイヤではないことを指定するために、0に等しく設定され得る。vps_direct_dependency_flag[i][j]は、インデックスjを有するレイヤがインデックスiを有するレイヤの直接参照レイヤであることを指定するために、1に等しく設定され得る。vps_direct_dependency_flag[i][j]が0からvps_max_layers_minus1まで(を含む)の範囲でiおよびjについて存在しないとき、vps_direct_dependency_flag[i][j]は0に等しいと推論される。i番目のレイヤのj番目の直接依存レイヤを指定する変数DirectDependentLayerIdx[i][j]は、次のように導出される。
for( i = 1; i < vps_max_layers_minus1; i++ )
if( !vps_independent_layer_flag[ i ] )
for( j = i, k = 0; j >= 0; j- - )
if( vps_direct_dependency_flag[ i ][ j ] )
DirectDependentLayerIdx[ i ][ k++ ] = j
vps_layer_id[i]に等しいnuh_layer_idを有するレイヤのレイヤインデックスを指定する変数GeneralLayerIdx[i]は、次のように導出される。
for( i = 0; i <= vps_max_layers_minus1; i++ )
GeneralLayerIdx[ vps_layer_id[ i ] ] = i
each_layer_is_an_ols_flagは、各出力レイヤセットが1つのレイヤのみを含み、ビットストリーム内の各レイヤ自体が、単一の含まれるレイヤが唯一の出力レイヤである出力レイヤセットであることを指定するために、1に等しく設定され得る。each_layer_is_an_ols_flagは、出力レイヤセットが2つ以上のレイヤを含み得ることを指定するために、0に等しく設定され得る。vps_max_layers_minus1が0に等しい場合、each_layer_is_an_ols_flagの値は1に等しいと推論される。そうではなく、vps_all_independent_layers_flagが0に等しいとき、each_layer_is_an_ols_flagの値は0に等しいと推論される。
ols_mode_idcは、VPSによって指定されるOLSの総数がvps_max_layers_minus1+1に等しく、i番目のOLSが、0からiまで(を含む)のレイヤインデックスを含むレイヤを含み、各OLSについて、OLS内の最上位レイヤのみが出力されることを指定するために、0に等しく設定され得る。ols_mode_idcは、VPSによって指定されるOLSの総数がvps_max_layers_minus1+1に等しく、i番目のOLSが、0からiまで(を含む)のレイヤインデックスを含むレイヤを含み、各OLSについて、OLS内のすべてのレイヤが出力されることを指定するために、1に等しく設定され得る。ols_mode_idcは、VPSによって指定されたOLSの総数が明示的にシグナリングされ、各OLSについて、OLS内の最上位レイヤおよび明示的にシグナリングされた下位レイヤのセットが出力されることを指定するために、2に等しく設定され得る。ols_mode_idcの値は、0から2まで(を含む)の範囲であるべきである。ols_mode_idcの値3が予約されている。vps_all_independent_layers_flagが1に等しく、each_layer_is_an_ols_flagが0に等しいとき、ols_mode_idcの値は2に等しいと推論される。
num_output_layer_sets_minus1プラス1は、ols_mode_idcが2に等しいときにVPSによって指定されるOLSの総数を指定する。VPSによって指定されるOLSの総数を指定する変数TotalNumOlssは、次のように導出される。
if( vps_max_layers_minus1 = = 0 )
TotalNumOlss = 1
else if( each_layer_is_an_ols_flag | | ols_mode_idc = = 0 | | ols_mode_idc = = 1 )
TotalNumOlss = vps_max_layers_minus1 + 1
else if( ols_mode_idc = = 2 )
TotalNumOlss = num_output_layer_sets_minus1 + 1
layer_included_flag[i][j]は、ols_mode_idcが2に等しいとき、j番目のレイヤ(たとえば、vps_layer_id[j]に等しいnuh_layer_idを有するレイヤ)がi番目のOLSに含まれるかどうかを指定する。layer_included_flag[i][j]は、j番目のレイヤがi番目のOLSに含まれることを指定するために、1に等しく設定され得る。layer_included_flag[i][j]は、j番目のレイヤがi番目のOLSに含まれないことを指定するために、0に等しく設定され得る。
i番目のOLS内のレイヤの数を指定する変数NumLayersInOls[i]と、i番目のOLS内のj番目のレイヤのnuh_layer_id値を指定する変数NumLayersInOls[i]は、次のように導出され得る。
NumLayersInOls[ 0 ] = 1
LayerIdInOls[ 0 ][ 0 ] = vps_layer_id[ 0 ]
for( i = 1, i < TotalNumOlss; i++ ) {
if( each_layer_is_an_ols_flag ) {
NumLayersInOls[ i ] = 1
LayerIdInOls[ i ][ 0 ] = vps_layer_id[ i ]
} else if( ols_mode_idc = = 0 | | ols_mode_idc = = 1 ) {
NumLayersInOls[ i ] = i + 1
for( j = 0; j < NumLayersInOls[ i ]; j++ )
LayerIdInOls[ i ][ j ] = vps_layer_id[ j ]
} else if( ols_mode_idc = = 2 ) {
for( k = 0, j = 0; k <= vps_max_layers_minus1; k++ )
if( layer_included_flag[ i ][ k ] )
LayerIdInOls[ i ][ j++ ] = vps_layer_id[ k ]
NumLayersInOls[ i ] = j
}
}
LayerIdInOls[i][j]に等しいnuh_layer_idを有するレイヤのOLSレイヤインデックスを指定する変数OlsLayeIdx[i][j]は、次のように導出される。
for( i = 0, i < TotalNumOlss; i++ )
for j = 0; j < NumLayersInOls[ i ]; j++ )
OlsLayeIdx[ i ][ LayerIdInOls[ i ][ j ] ] = j
各OLS内の最下位レイヤは、独立したレイヤであるべきである。言い換えれば、0からTotalNumOlss-1まで(を含む)の範囲内の各iについて、vps_independent_layer_flag[GeneralLayerIdx[LayerIdInOls[i][0]]]の値は1に等しいべきである。最上位レイヤ、たとえば、vps_layer_id[vps_max_layers_minus1]に等しいnuh_layer_idを有するレイヤは、VPSによって指定される少なくとも1つのOLSに含まれるべきである。言い換えれば、0からTotalNumOlss-1まで(を含む)の範囲内の少なくとも1つのiについて、LayerIdInOls[i][NumLayersInOls[i]-1]の値は、vps_layer_id[vps_max_layers_minus1]に等しいべきである。
vps_output_layer_flag[i][j]は、ols_mode_idcが2であるとき、i番目のOLSのj番目のレイヤが出力されるかどうかを指定する。vps_output_layer_flag[i]は、i番目のOLSのj番目のレイヤが出力されることを指定するために、1に等しく設定され得る。vps_output_layer_flag[i]は、i番目のOLSのj番目のレイヤが出力されないことを指定するために、0に等しく設定され得る。vps_all_independent_layers_flagが1に等しく、each_layer_is_an_ols_flagが0に等しいとき、vps_output_layer_flag[i]の値は1に等しいと推論することができる。
変数OutputLayerFlag[i][j]は、値1が、i番目のOLSのj番目のレイヤが出力されることを指定し、値0が、i番目のOLSのj番目のレイヤが出力されないことを指定し、次のように導出され得る。
for( i = 0, i < TotalNumOlss; i++ ) {
OutputLayerFlag[ i ][ NumLayersInOls[ i ] - 1 ] = 1
for( j = 0; j < NumLayersInOls[ i ] - 1; j++ )
if( ols_mode_idc[ i ] = = 0 )
OutputLayerFlag[ i ][ j ] = 0
else if( ols_mode_idc[ i ] = = 1 )
OutputLayerFlag[ i ][ j ] = 1
else if( ols_mode_idc[ i ] = = 2 )
OutputLayerFlag[ i ][ j ] = vps_output_layer_flag[ i ][ j ]
}
OLS内の任意のレイヤは、OLSの出力レイヤ、またはOLSの出力レイヤの(直接または間接の)参照レイヤであるべきである。0番目のOLSは、最下位レイヤ(たとえば、vps_layer_id[0]に等しいnuh_layer_idを有するレイヤ)のみを含み、0番目のOLSについては、唯一含まれるレイヤが出力される。vps_constraint_info_present_flagは、general_constraint_info()シンタックス構造がVPSに存在することを指定するために、1に等しく設定され得る。vps_constraint_info_present_flagは、general_constraint_info()シンタックス構造がVPSに存在しないことを指定するために、0に等しく設定され得る。適合するビットストリームでは、vps_reserved_zero_7bitsは0に等しいべきである。vps_reserved_zero_7bitsの他の値は予約されている。デコーダは、vps_reserved_zero_7bitsの値を無視するべきである。
general_hrd_params_present_flagは、シンタックス要素num_units_in_tickおよびtime_scaleならびにシンタックス構造general_hrd_parameters()がSPS RBSPシンタックス構造内に存在することを指定するために、1に等しく設定され得る。general_hrd_params_present_flagは、シンタックス要素num_units_in_tickおよびtime_scaleならびにシンタックス構造general_hrd_parameters()がSPS RBSPシンタックス構造内に存在しないことを指定するために、0に等しく設定され得る。num_units_in_tickは、クロックティックカウンタの1増分(クロックティックと呼ばれる)に対応する周波数time_scaleヘルツ(Hz)で動作するクロックの時間単位の数である。num_units_in_tickは、0よりも大きいべきである。秒単位のクロックティックは、num_units_in_tickをtime_scaleで割った商に等しい。たとえば、ビデオ信号のピクチャレートが25Hzであるとき、time_scaleは、27000000に等しく、num_units_in_tickは、1080000に等しく、その結果、クロックティックは、0.04秒に等しくなり得る。
time_scaleは、1秒間に通過する時間単位の数である。たとえば、27メガヘルツ(MHz)クロックを使用して時間を測定する時間座標系は、27000000のtime_scaleを有する。time_scaleの値は、0よりも大きいべきである。vps_extension_flagは、vps_extension_data_flagシンタックス要素がVPS RBSPシンタックス構造に存在しないことを指定するために、0に等しく設定され得る。vps_extension_flagは、VPS RBSPシンタックス構造内に存在するvps_extension_data_flagシンタックス要素があることを指定するために、1に等しく設定され得る。vps_extension_data_flagは、任意の値を有し得る。vps_extension_data_flagの存在および値は、プロファイルに対するデコーダの適合性に影響を及ぼさない。適合するデコーダは、すべてのvps_extension_data_flagシンタックス要素を無視するべきである。
図8は、例示的なビデオコーディングデバイス800を示す概略図である。ビデオコーディングデバイス800は、本明細書で説明した開示された例/実施形態を実装するのに適している。ビデオコーディングデバイス800は、ダウンストリームポート820、アップストリームポート850、および/またはネットワークを介してアップストリームおよび/またはダウンストリームでデータを通信するための送信器および/または受信器を含むトランシーバユニット(Tx/Rx)810を含む。ビデオコーディングデバイス800はまた、データを処理するための論理ユニットおよび/または中央処理ユニット(CPU)と、データを記憶するためのメモリ832とを含むプロセッサ830を含む。ビデオコーディングデバイス800はまた、電気、光学-電気(OE)構成要素、電気-光学(EO)構成要素、および/または、電気、光学、もしくはワイヤレス通信ネットワークを介してデータを通信するためにアップストリームポート850および/またはダウンストリームポート820に結合されたワイヤレス通信構成要素を含み得る。ビデオコーディングデバイス800はまた、ユーザとの間でデータを通信するための入力および/または出力(I/O)デバイス860を含み得る。I/Oデバイス860は、ビデオデータを表示するためのディスプレイ、オーディオデータを出力するためのスピーカなどの出力デバイスを含み得る。I/Oデバイス860は、キーボード、マウス、トラックボールなどの入力デバイス、および/またはそのような出力デバイスと対話するための対応するインターフェースも含み得る。
プロセッサ830は、ハードウェアおよびソフトウェアによって実現される。プロセッサ830は、1つまたは複数のCPUチップ、コア(たとえば、マルチコアプロセッサとして)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、およびデジタル信号プロセッサ(DSP)として実装され得る。プロセッサ830は、ダウンストリームポート820、Tx/Rx810、アップストリームポート850、およびメモリ832と通信する。プロセッサ830は、コーディングモジュール814を含む。コーディングモジュール814は、マルチレイヤビデオシーケンス500、マルチビューシーケンス600、および/またはビットストリーム700を使用し得る、方法100、900、および1000など、本明細書で説明した開示される実施形態を実装する。コーディングモジュール814はまた、本明細書で説明した任意の他の方法/機構を実装し得る。さらに、コーディングモジュール814は、コーデックシステム200、エンコーダ300、および/またはデコーダ400を実装し得る。たとえば、コーディングモジュール814を使用して、各OLSが単一のレイヤを含むか、または少なくとも1つのOLSが複数のレイヤを含むかを示すために、each_layer_is_an_ols_flagをコード化して、サイマルキャストレイヤが使用されるときにマルチビューをサポートし得る。したがって、コーディングモジュール814は、ビデオデータをコード化するときに、ビデオコーディングデバイス800に、追加の機能および/またはコーディング効率を提供させる。したがって、コーディングモジュール814は、ビデオコーディングデバイス800の機能を改善するだけでなく、ビデオコーディング分野に特有の問題に対処する。さらに、コーディングモジュール814は、ビデオコーディングデバイス800を異なる状態に変換する。あるいは、コーディングモジュール814は、メモリ832に記憶され、プロセッサ830によって実行される命令として(たとえば、非一時的媒体に記憶されたコンピュータプログラム製品として)実装され得る。
メモリ832は、ディスク、テープドライブ、ソリッドステートドライブ、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、フラッシュメモリ、3値コンテンツアドレス可能メモリ(TCAM)、スタティックランダムアクセスメモリ(SRAM)などの1つまたは複数のメモリタイプを含む。メモリ832は、オーバーフローデータ記憶デバイスとして使用されてもよく、そのようなプログラムが実行のために選択されるときにプログラムを記憶し、プログラム実行中に読み取られる命令およびデータを記憶する。
図9は、マルチビューシーケンス600などのマルチビューで使用するためのサイマルキャストレイヤのOLSを有する、たとえばビットストリーム700内のビデオシーケンスを符号化する例示的な方法900を示すフローチャートである。方法900は、方法100を実行するときに、コーデックシステム200、エンコーダ300、および/またはビデオコーディングデバイス800などのエンコーダによって使用され得る。
方法900は、エンコーダがビデオシーケンスを受信し、そのビデオシーケンスを、たとえば、ユーザ入力に基づいて、マルチビューで使用するために、サイマルキャストレイヤのセットへと符号化することを決定したときに開始し得る。ステップ901で、エンコーダは、1つまたは複数のレイヤのコード化ピクチャを含むビットストリームを符号化する。たとえば、レイヤは、サイマルキャストレイヤであってもよく、レイヤ間予測に従ってコード化されなくてもよい。さらに、レイヤは、マルチビュービデオをサポートするためにコード化されてもよい。したがって、レイヤは、1つまたは複数のOLSが2つのレイヤ(たとえば、エンドユーザの各眼に表示するための1つのレイヤ)を含むOLSに編成され得る。
ステップ903で、エンコーダは、VPSをビットストリームへと符号化することができる。VPSは、適切なマルチビュー復号および表示のために、レイヤ/OLS構成をデコーダに示すための様々なシンタックス要素を含み得る。たとえば、VPSは、VPSによって指定されるすべてのレイヤがレイヤ間予測なしに独立してコード化されることを指定するために、1に設定され得るvps_all_independent_layers_flagを含んでもよい。vps_all_independent_layers_flagが1に設定されているとき、したがって、VPSによって指定されるすべてのレイヤがレイヤ間予測なしに独立してコード化されるとき、VPSはまた、each_layer_is_an_ols_flagを含み得る。each_layer_is_an_ols_flagは、各OLSが1つのレイヤのみを含むか、または少なくとも1つのOLSが複数のレイヤを含むかを指定することができる。たとえば、各OLSが1つのレイヤのみを含み、および/または各レイヤが、単一の含まれるレイヤが唯一の出力レイヤであるOLSであることを指定するとき、each_layer_is_an_ols_flagを1に設定することができる。したがって、マルチビューが使用されていないとき、each_layer_is_an_ols_flagを1に設定することができる。他の例として、少なくとも1つのOLSが2つ以上のレイヤを含み、したがって、ステップ901でコード化されたビットストリームがマルチビュービデオを含むことを指定するとき、each_layer_is_an_ols_flagを0に設定することができる。
VPSはまた、ols_mode_idcシンタックス要素を含み得る。たとえば、each_layer_is_an_ols_flagが0に設定され、vps_all_independent_layers_flagが1に設定されているとき、ols_mode_idcは、2に設定され得る。ols_mode_idcが2に設定されている/等しいとき、OLSの総数は、VPSにおいて明示的にシグナリングされる。さらに、ols_mode_idcが2に設定されている/等しいとき、各OLSに関連付けられたレイヤの数および/または出力レイヤの数が、VPSにおいて明示的にシグナリングされる。特定の例では、vps_max_layers_minus1シンタックス要素をVPSに含めて、VPSによって指定されるレイヤの数を明示的に指定し、したがって、OLSに含めることができるレイヤの数を指定してもよい。いくつかの例では、vps_all_independent_layers_flagは、vps_max_layers_minus1が0よりも大きいときにシグナリングされ得る。他の特定の例では、ols_mode_idcが2に等しいとき、num_output_layer_sets_minus1がVPSに含まれてもよい。num_output_layer_sets_minus1は、VPSによって指定されるOLSの総数を指定し得る。したがって、vps_max_layers_minus1およびnum_output_layer_sets_minus1は、そのようなデータが明示的にシグナリングされるとき(たとえば、each_layer_is_an_ols_flagが0に設定され、vps_all_independent_layers_flagが1に設定され、ols_mode_idcが2に設定されており、かつ/または2に等しいと推論されるとき)、それぞれレイヤの数およびOLSの数を示すために、VPSにおいてシグナリングされ得る。具体的な例として、vps_all_independent_layers_flagが1に設定され、each_layer_is_an_ols_flagが0に設定されているとき、ols_mode_idcは2に等しいと推論することができる。
ステップ905で、ビットストリームは、デコーダに向けた通信のために記憶される。
図10は、マルチビューシーケンス600など、マルチビューで使用するためのサイマルキャストレイヤのOLSを含む、たとえばビットストリーム700からのビデオシーケンスを復号する例示的な方法1000を示すフローチャートである。方法1000は、方法100を実行するときに、コーデックシステム200、デコーダ400、および/またはビデオコーディングデバイス800などのデコーダによって使用され得る。
方法1000は、デコーダが、たとえば、方法900の結果として、サイマルキャストマルチビューレイヤのOLSを含むビットストリームを受信し始めるときに開始し得る。ステップ1001において、デコーダは、ビットストリームを受信する。ビットストリームは、1つまたは複数のOLSおよび1つまたは複数のレイヤを含み得る。たとえば、レイヤは、サイマルキャストレイヤであってもよく、レイヤ間予測に従ってコード化されなくてもよい。さらに、レイヤは、マルチビュービデオをサポートするためにコード化されてもよい。したがって、レイヤは、1つまたは複数のOLSが2つのレイヤ(たとえば、エンドユーザの各眼に表示するための1つのレイヤ)を含むOLSに編成され得る。
ビットストリームは、VPSも含み得る。VPSは、適切なマルチビュー復号および表示のために、レイヤ/OLS構成をデコーダに示すための様々なシンタックス要素を含み得る。たとえば、VPSは、VPSによって指定されるすべてのレイヤがレイヤ間予測なしに独立してコード化されることを指定するために、1に設定され得るvps_all_independent_layers_flagを含んでもよい。vps_all_independent_layers_flagが1に設定されているとき、したがって、VPSによって指定されるすべてのレイヤがレイヤ間予測なしに独立してコード化されるとき、VPSはまた、each_layer_is_an_ols_flagを含み得る。each_layer_is_an_ols_flagは、OLSが複数のレイヤを含むかどうかを指定することができる。たとえば、各OLSが1つのレイヤのみを含み、および/または各レイヤが、単一の含まれるレイヤが唯一の出力レイヤであるOLSであることを指定するとき、each_layer_is_an_ols_flagを1に設定することができる。したがって、マルチビューが使用されていないとき、each_layer_is_an_ols_flagを1に設定することができる。他の例として、少なくとも1つのOLSが2つ以上のレイヤを含み、したがって、ビットストリームがマルチビュービデオを含むことを指定するとき、each_layer_is_an_ols_flagを0に設定することができる。
VPSはまた、ols_mode_idcシンタックス要素を含み得る。たとえば、each_layer_is_an_ols_flagが0に設定され、vps_all_independent_layers_flagが1に設定されているとき、ols_mode_idcは、2に等しく設定され得る。ols_mode_idcが2に等しく設定されるとき、OLSの総数は、VPSにおいて明示的にシグナリングされる。さらに、ols_mode_idcが2に設定されている/等しいとき、各OLSに関連付けられたレイヤの数および/または出力レイヤの数が、VPSにおいて明示的にシグナリングされる。特定の例では、vps_max_layers_minus1シンタックス要素をVPSに含めて、VPSによって指定されるレイヤの数を明示的に指定し、したがって、OLSに含めることができるレイヤの数を指定してもよい。いくつかの例では、vps_all_independent_layers_flagは、vps_max_layers_minus1が0よりも大きいときにシグナリングされ得る。他の特定の例では、ols_mode_idcが2に等しいとき、num_output_layer_sets_minus1がVPSに含まれてもよい。num_output_layer_sets_minus1は、VPSによって指定されるOLSの総数を指定し得る。したがって、vps_max_layers_minus1およびnum_output_layer_sets_minus1は、そのようなデータが明示的にシグナリングされるとき(たとえば、each_layer_is_an_ols_flagが0に設定され、vps_all_independent_layers_flagが1に設定され、ols_mode_idcが2に設定されており、かつ/または2に等しいと推論されるとき)、それぞれレイヤの数およびOLSの数を示すために、VPSにおいてシグナリングされ得る。具体的な例として、vps_all_independent_layers_flagが1に設定され、each_layer_is_an_ols_flagが0に設定されているとき、ols_mode_idcは2に等しいと推論することができる。
ステップ1003では、復号されたピクチャを生成するために、VPS内のeach_layer_is_an_ols_flagに基づいて、OLSの出力レイヤからコード化ピクチャが復号される。たとえば、デコーダは、すべてのレイヤがサイマルキャストされていることを決定するために、vps_all_independent_layers_flagを読み取ることがある。デコーダはまた、少なくとも1つのOLSが2つ以上のレイヤを含むことを決定するために、each_layer_is_an_ols_flagを読み取ることがある。デコーダはまた、OLSの数およびレイヤの数が明示的にシグナリングされることを決定するために、ols_mode_idcを読み取ることがある。次いで、デコーダは、それぞれ、num_output_layer_sets_minus1およびvps_max_layers_minus1を読み取ることによって、OLSの数およびレイヤの数を決定することができる。次いで、デコーダは、この情報を使用して、ビットストリーム内の正しいマルチビューレイヤの位置を特定することができる。デコーダは、レイヤからの正しいコード化ピクチャの位置を特定することもできる。次いで、デコーダは、ピクチャを復号して、復号されたピクチャを生成することができる。
ステップ1005において、デコーダは、復号されたビデオシーケンスの一部として表示するために復号されたピクチャを転送することができる。
図11は、マルチビューシーケンス600などのマルチビューで使用するためのサイマルキャストレイヤのOLSを有する、たとえばビットストリーム700内のビデオシーケンスをコード化するための例示的なシステム1100を示す概略図である。システム1100は、コーデックシステム200、エンコーダ300、デコーダ400、および/またはビデオコーディングデバイス800などのエンコーダおよびデコーダによって実装され得る。さらに、システム1100は、マルチレイヤビデオシーケンス500を使用してもよい。加えて、システム1100は、方法100、900、および/または1000を実装するときに使用され得る。
システム1100は、ビデオエンコーダ1102を含む。ビデオエンコーダ1102は、コード化ピクチャの1つまたは複数のレイヤを含むビットストリームを符号化するための符号化モジュール1105を含む。符号化モジュール1105は、さらに、VPSによって指定されるすべてのレイヤがレイヤ間予測なしに独立してコード化されるとき、each_layer_is_an_ols_flagを含むVPSを、ビットストリームへと符号化するためのものであり、each_layer_is_an_ols_flagは、各OLSが1つのレイヤのみを含むかどうかを指定する。ビデオエンコーダ1102は、デコーダに向けた通信のためにビットストリームを記憶するための記憶モジュール1106をさらに含む。ビデオエンコーダ1102は、ビットストリームをビデオデコーダ1110に向けて送信するための送信モジュール1107をさらに含む。ビデオエンコーダ1102は、方法900のステップのいずれかを実行するようにさらに構成され得る。
システム1100は、ビデオデコーダ1110も含む。ビデオデコーダ1110は、1つまたは複数のレイヤのコード化ピクチャと、VPSとを含むビットストリームを受信するための受信モジュール1111であり、VPSによって指定されるすべてのレイヤがレイヤ間予測なしに独立してコード化されるとき、VPSにはeach_layer_is_an_ols_flagが含まれ、each_layer_is_an_ols_flagは、各OLSが1つのレイヤのみを含むかどうかを指定する、受信モジュール1111を含む。ビデオデコーダ1110は、復号されたピクチャを生成するために、VPS内のeach_layer_is_an_ols_flagに基づいて、OLSの出力レイヤからコード化ピクチャを復号するための復号モジュール1113をさらに含む。ビデオデコーダ1110は、復号されたビデオシーケンスの一部として表示するために復号されたピクチャを転送するための転送モジュール1115をさらに含む。ビデオデコーダ1110は、方法1000のステップのいずれかを実行するようにさらに構成され得る。
第1の構成要素は、第1の構成要素と第2の構成要素との間にライン、トレース、または他の媒体を除いて、介在する構成要素がないとき、第2の構成要素に直接結合される。第1の構成要素は、第1の構成要素と第2の構成要素との間にライン、トレース、または他の媒体以外の介在する構成要素があるとき、第2の構成要素に間接的に結合される。「結合された」という用語、およびその変異体は、直接結合されたものと間接的に結合されたものの両方を含む。「約」という用語の使用は、別段に明記されていない限り、後続の数の±10%を含む範囲を意味する。
本明細書に記載された例示的な方法のステップは、必ずしも記載された順序で実行される必要はなく、そのような方法のステップの順序は、単に例示的であると理解されることも理解されたい。同様に、本開示の様々な実施形態と一致する方法では、追加のステップをそのような方法に含めてもよく、特定のステップを省略したり、組み合わせたりしてもよい。
いくつかの実施形態が本開示で提供されたが、開示されたシステムおよび方法は、本開示の意図または範囲から逸脱することなく、多くの他の特定の形態で実施され得ることが理解されよう。本例は、限定的ではなく例示的なものと見なされるものとし、本発明は、本明細書に示された詳細に限定されるものではない。たとえば、様々な要素または構成要素を組み合わせたり、他のシステムに統合したりしてもよく、あるいはいくつかの機能を省略したり、実施しなくてもよい。
加えて、様々な実施形態で個別または別個として説明され図示された技法、システム、サブシステム、および方法は、本開示の範囲から逸脱することなく、他のシステム、構成要素、技法、または方法と組み合わせるか、または統合してもよい。変更、置換、および改変の他の例は、当業者によって確認可能であり、本明細書に開示される意図および範囲から逸脱することなく行われ得る。