1つまたは複数の実施形態の例示的な実装形態が以下に提供されるが、開示するシステムおよび/または方法が、現在知られているかまたは存在しているかどうかにかかわらず任意の数の技法を使用して実施され得ることを、最初に理解されたい。本開示は、本明細書で図示および説明する例示的な設計および実装形態を含む、以下に図示する例示的な実装形態、図面、および技法に決して限定されるべきでなく、均等物のそれらの完全な範囲と一緒に添付の特許請求の範囲内で修正されてよい。
以下の用語は、本明細書の中で逆の文脈で使用されない限り次のように定義される。特に、以下の定義は追加の明快さを本開示に与えることを意図する。しかしながら、用語は、異なる文脈では異なって説明されることがある。したがって、以下の定義は補足と見なされるべきであり、本明細書の中でそのような用語に与えられる説明のいかなる他の定義も限定するものと見なされるべきでない。
ビットストリームとは、エンコーダとデコーダとの間での送信のために圧縮されるビデオデータを含む、ビットのシーケンスである。エンコーダとは、ビデオデータをビットストリームの中に圧縮するために符号化プロセスを採用するように構成されるデバイスである。デコーダとは、表示のためにビットストリームからビデオデータを再構成するために復号プロセスを採用するように構成されるデバイスである。ピクチャとは、フレームまたはフレームのフィールドを作成する、ルーマサンプルのアレイおよび/またはクロマサンプルのアレイである。説明の明快のために、符号化または復号されているピクチャは現在ピクチャと呼ぶことができる。参照ピクチャとは、インター予測および/またはレイヤ間予測による参照によって他のピクチャをコーディングするときに使用され得る参照サンプルを含むピクチャである。参照ピクチャリストとは、インター予測および/またはレイヤ間予測のために使用される参照ピクチャのリストである。いくつかのビデオコーディングシステムは、参照ピクチャリスト1および参照ピクチャリスト0として示され得る2つのピクチャリストを参照する。参照ピクチャリスト構造とは、複数の参照ピクチャリストを含むアドレス指定可能なシンタックス構造である。レイヤとは、類似のサイズ、品質、解像度、信号対雑音比、能力などの、類似の値の特性にそのすべてが関連するピクチャのグループである。レイヤ識別子(ID)とは、ピクチャに関連し、かつピクチャが、示されるレイヤの一部であることを示す、データの項目である。インター予測とは、現在ピクチャとは異なる参照ピクチャの中の示されるサンプルへの参照によって現在ピクチャのサンプルをコーディングするメカニズムであり、ただし、参照ピクチャおよび現在ピクチャは同じレイヤの中にある。レイヤ間コンテキストでは、現在ピクチャと参照ピクチャの両方が同じレイヤの中にあるので、インター予測はレイヤ内予測と呼ぶこともできる。レイヤ間予測とは、参照ピクチャの中の示されるサンプルへの参照によって現在ピクチャのサンプルをコーディングするメカニズムであり、ただし、現在ピクチャおよび参照ピクチャは異なるレイヤの中にあり、したがって、異なるレイヤIDを有する。レイヤ間参照ピクチャとは、レイヤ間予測のために使用される参照ピクチャである。いくつかのビデオコーディングシステムは、現在ピクチャおよび関連するレイヤ間参照ピクチャが、同じアクセスユニット(AU)の中に含まれることを必要とする場合がある。参照ピクチャリスト構造エントリとは、参照ピクチャリストに関連する参照ピクチャを示す、参照ピクチャリスト構造の中のアドレス指定可能なロケーションである。レイヤ間参照ピクチャ(ILRP)エントリとは、レイヤ間予測のために使用される参照ピクチャを含むエントリである。レイヤ間参照ピクチャフラグとは、参照ピクチャリスト構造のエントリの中の参照ピクチャがレイヤ間参照ピクチャであることを示すデータである。ILRPレイヤインジケータとは、現在ピクチャによって参照されるレイヤ間参照ピクチャに関連するレイヤを示すデータである。スライスヘッダとは、スライスの中で表されるタイル内のすべてのビデオデータに関係するデータ要素を含む、コード化スライスの一部である。シーケンスパラメータセット(SPS)とは、ピクチャのシーケンスに関係するデータを含むパラメータセットである。AUとは、(たとえば、ユーザへの表示のための)復号ピクチャバッファ(DPB:decoded picture buffer)からの出力に対して同じ表示時間(たとえば、同じピクチャ順序カウント)に関連する1つまたは複数のコード化ピクチャのセットである。復号ビデオシーケンスとは、ユーザへの表示に備えてデコーダによって再構成されているピクチャのシーケンスである。
本明細書では以下の頭字語、すなわち、コーディングツリーブロック(CTB:Coding Tree Block)、コーディングツリーユニット(CTU:Coding Tree Unit)、コーディングユニット(CU:Coding Unit)、コード化ビデオシーケンス(CVS:Coded Video Sequence)、復号ピクチャバッファ(DPB)、ジョイントビデオエキスパートチーム(JVET:Joint Video Experts Team)、動き制約付きタイルセット(MCTS:Motion-Constrained Tile Set)、最大転送単位(MTU:Maximum Transfer Unit)、ネットワークアブストラクションレイヤ(NAL:Network Abstraction Layer)、ピクチャ順序カウント(POC:Picture Order Count)、ランダムアクセス復号可能リーディング(RADL:Random Access Decodable Leading)ピクチャ、ランダムアクセススキップドリーディング(RASL:Random Access Skipped Leading)ピクチャ、ローバイトシーケンスペイロード(RBSP:Raw Byte Sequence Payload)、参照ピクチャリスト(RPL:Reference Picture List)、シーケンスパラメータセット(SPS)、ビデオコーディングレイヤ(VCL:Video Coding Layer)、多用途ビデオコーディング(VVC:Versatile Video Coding)、およびワーキングドラフト(WD:Working Draft)が使用される。
データの最小の損失しか伴わずにビデオファイルのサイズを低減するために、多くのビデオ圧縮技法が採用され得る。たとえば、ビデオ圧縮技法は、ビデオシーケンスにおけるデータ冗長性を低減または除去するために、空間(たとえば、ピクチャ内)予測および/または時間(たとえば、ピクチャ間)予測を実行することを含むことができる。ブロックベースのビデオコーディングの場合、ビデオスライス(たとえば、ビデオピクチャまたはビデオピクチャの一部分)は、ツリーブロック、コーディングツリーブロック(CTB)、コーディングツリーユニット(CTU)、コーディングユニット(CU)、および/またはコーディングノードと呼ばれることもある、ビデオブロックに区分されてよい。ピクチャのイントラコード化(I)スライスの中のビデオブロックは、同じピクチャの中の隣接するブロックの中の参照サンプルに対する空間予測を使用してコーディングされる。ピクチャのインターコード化単方向予測(P)または双方向予測(B)スライスの中のビデオブロックは、同じピクチャの中の隣接するブロックの中の参照サンプルに対する空間予測、または他の参照ピクチャの中の参照サンプルに対する時間予測を採用することによって、コーディングされ得る。ピクチャは、フレームおよび/または画像と呼ばれることがあり、参照ピクチャは、参照フレームおよび/または参照画像と呼ばれることがある。空間予測または時間予測は、画像ブロックを表す予測ブロックをもたらす。残差データは、元の画像ブロックと予測ブロックとの間のピクセル差分を表す。したがって、インターコード化ブロックは、予測ブロックを形成する参照サンプルのブロックを指し示す動きベクトル、およびコード化ブロックと予測ブロックとの間の差分を示す残差データに従って符号化される。イントラコード化ブロックは、イントラコーディングモードおよび残差データに従って符号化される。さらなる圧縮のために、残差データはピクセル領域から変換領域に変換され得る。これらは残差変換係数をもたらし、残差変換係数が量子化され得る。量子化変換係数は、当初は2次元アレイをなして配列されてよい。量子化変換係数は、変換係数の1次元ベクトルを生成するために走査され得る。なお一層の圧縮を達成するために、エントロピーコーディングが適用され得る。そのようなビデオ圧縮技法が以下でより詳細に説明される。
符号化されたビデオが正確に復号され得ることを確実にするために、ビデオは対応するビデオコーディング規格に従って符号化および復号される。ビデオコーディング規格は、国際電気通信連合(ITU)標準化部門(ITU-T)H.261、国際標準化機構/国際電気標準会議(ISO/IEC)モーションピクチャエキスパートグループ(MPEG)-1パート2、ITU-T H.262またはISO/IEC MPEG-2パート2、ITU-T H.263、ISO/IEC MPEG-4パート2、ITU-T H.264またはISO/IEC MPEG-4パート10としても知られるアドバンストビデオコーディング(AVC)、およびITU-T H.265またはMPEG-Hパート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とのジョイントビデオエキスパートチーム(JVET)は、多用途ビデオコーディング(VVC)と呼ばれるビデオコーディング規格を策定し始めている。VVCは、JVET-N1001-v6を含むワーキングドラフト(WD)の中に含まれる。
ビデオコーディングシステムは、インター予測に従ってピクチャを符号化してよい。インター予測では、ピクチャは、別のピクチャへの参照によってコーディングされる。コーディングされているピクチャは現在ピクチャと呼ばれ、参照として使用されるピクチャは参照ピクチャと呼ばれる。いくつかのビデオコーディングシステムは、参照ピクチャリストを採用することによって参照ピクチャを追跡する。さらに、いくつかのビデオコーディングシステムは、スケーラブルビデオコーディングを採用する。スケーラブルビデオコーディングでは、ビデオシーケンスは、ベースレイヤおよび1つまたは複数のエンハンスメントレイヤとしてコーディングされる。このコンテキストでは、ピクチャは、異なるレイヤに存在する複数のピクチャに分割され得る。たとえば、より低いレイヤバージョンのピクチャは、より高いレイヤバージョンのピクチャよりも低品質のものであってよい。さらに、より低いレイヤバージョンのピクチャは、より高いレイヤバージョンのピクチャよりも小さくてよい(たとえば、より小さい幅および/または高さを有してよい)。レイヤを使用するとき、現在のレイヤにおけるピクチャは、(参照ピクチャを用いない)イントラ予測に従ってコーディングされ得るか、同じレイヤの中の参照ピクチャへの参照によるインター予測に従ってコーディングされ得るか、または異なるレイヤの中の参照ピクチャへの参照によるレイヤ間予測に従ってコーディングされ得る。しかしながら、参照ピクチャリストは、複数のレイヤを横断して参照ピクチャを記述するようには設計されていないことがある。
レイヤ間予測を採用するときに参照ピクチャリストを管理するための例示的なメカニズムが、本明細書で開示される。たとえば、参照ピクチャリストは、コード化ビデオによって使用される参照ピクチャごとにエントリを含むように構成され得る。次いで、各エントリが(同じレベルの中での参照のための)インター予測参照ピクチャを含むのか、それとも(レイヤ間での参照のための)レイヤ間参照ピクチャを含むのかを示すために、フラグが採用され得る。一例では、参照ピクチャリストを含むシンタックス構造に対する参照ピクチャフラグのグループは、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]として示され得る。inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]フラグは、参照ピクチャ構造の中の第iのエントリがILRPエントリであるとき、1に等しく設定され得るか、または参照ピクチャ構造の中の第iのエントリがILRPエントリでないとき、0に設定され得る。さらに、参照ピクチャ構造のエントリによって示されるレイヤ間参照ピクチャをどのレイヤが含むのかを示すために、ILRPレイヤインジケータが使用され得る。デコーダは、次いで、レイヤ間予測を実行するために、参照ピクチャフラグおよびILRPレイヤインジケータを使用して適切なレイヤ間参照ピクチャを選択することができる。したがって、開示するメカニズムは、エンコーダおよび/またはデコーダにおける追加の機能性を生み出す。さらに、開示するメカニズムはコーディング効率を高めてよく、そのことがエンコーダおよび/またはデコーダにおけるプロセッサ、メモリ、および/またはネットワークリソース使用量を低減し得る。
図1は、ビデオ信号をコーディングする例示的な動作方法100のフローチャートである。具体的には、ビデオ信号はエンコーダにおいて符号化される。符号化プロセスは、ビデオファイルサイズを低減するために、様々なメカニズムを採用することによってビデオ信号を圧縮する。より小さいファイルサイズは、関連する帯域幅オーバーヘッドを低減しながら、圧縮されたビデオファイルがユーザに向かって送信されることを可能にする。デコーダは、次いで、圧縮されたビデオファイル復号して、エンドユーザへの表示のために元のビデオ信号を再構成する。復号プロセスは、概して、符号化プロセスを正確に模倣してデコーダがビデオ信号を矛盾なく再構成することを可能にする。
ステップ101において、エンコーダの中にビデオ信号が入力される。たとえば、ビデオ信号は、メモリの中に記憶された圧縮されていないビデオファイルであってよい。別の例として、ビデオファイルは、ビデオカメラなどのビデオキャプチャデバイスによってキャプチャされてよく、ビデオのライブストリーミングをサポートするために符号化されてよい。ビデオファイルは、オーディオ成分とビデオ成分の両方を含んでよい。ビデオ成分は、シーケンスをなして見られると動きの視覚的な印象を与える、一連の画像フレームを含む。フレームは、本明細書でルーマ成分(または、ルーマサンプル)と呼ばれる光、およびクロマ成分(または、カラーサンプル)と呼ばれる色に関して表現される、ピクセルを含む。いくつかの例では、フレームはまた、3次元表示をサポートするための深度値を含んでもよい。
ステップ103において、ビデオはブロックに区分される。区分することは、各フレームの中のピクセルを圧縮のための正方形ブロックおよび/または長方形ブロックに再分割することを含む。たとえば、高効率ビデオコーディング(HEVC)(H.265およびMPEG-Hパート2としても知られる)では、フレームは最初に、既定のサイズ(たとえば、64ピクセル×64ピクセル)のブロックであるコーディングツリーユニット(CTU)に分割され得る。CTUは、ルーマサンプルとクロマサンプルの両方を含む。CTUをブロックに分割し、次いで、さらなる符号化をサポートする構成が獲得されるまでブロックを再帰的に再分割するために、コーディングツリーが採用され得る。たとえば、フレームのルーマ成分は、個々のブロックが、比較的均一な照明値を含むまで再分割されてよい。さらに、フレームのクロマ成分は、個々のブロックが、比較的均一なカラー値を含むまで再分割されてよい。したがって、区分メカニズムはビデオフレームの内容に応じて変わる。
ステップ105において、様々な圧縮メカニズムが採用されて、ステップ103において区分された画像ブロックを圧縮する。たとえば、インター予測および/またはイントラ予測が採用されてよい。インター予測は、連続するフレームの中に、共通のシーンの中のオブジェクトが現れる傾向があるという事実を利用するように設計されている。したがって、参照フレームの中のオブジェクトを示すブロックは、隣接するフレームの中で繰り返し記述される必要がない。特に、テーブルのようなオブジェクトは、複数のフレームにわたって一定の位置にとどまることがある。したがって、テーブルは1回記述され、隣接するフレームは逆戻りして参照フレームを参照することができる。複数のフレームにわたってオブジェクトを整合させるために、パターンマッチングメカニズムが採用されてよい。さらに、たとえば、オブジェクト移動またはカメラ移動に起因して、移動するオブジェクトが複数のフレームを横断して表されることがある。具体的な例として、ビデオは、複数のフレームにわたってスクリーンを横断して移動する自動車を見せることがある。そのような移動を記述するために動きベクトルが採用され得る。動きベクトルは、あるフレームの中のオブジェクトの座標から参照フレームの中のオブジェクトの座標までのオフセットを提供する2次元ベクトルである。したがって、インター予測は、現在フレームの中の画像ブロックを、参照フレームの中の対応するブロックからのオフセットを示す動きベクトルのセットとして符号化することができる。
イントラ予測は、共通のフレームの中のブロックを符号化する。イントラ予測は、ルーマ成分およびクロマ成分がフレームの中でかたまりになる傾向があるという事実を利用する。たとえば、木の一部分の中の緑色の断片は、緑色の類似の断片に隣接して配置される傾向がある。イントラ予測は、複数の方向性予測モード(たとえば、HEVCでは33個)、平面モード、および直流(DC)モードを採用する。方向性モードは、現在ブロックが、対応する方向における隣接ブロックのサンプルと類似/同じであることを示す。平面モードは、行/列に沿った一連のブロック(たとえば、平面)が、行の縁部において隣接ブロックに基づいて補間され得ることを示す。平面モードは、事実上、値を変化させる際に比較的一定の勾配を採用することによって、行/列を横断する光/色の滑らかな遷移を示す。DCモードは、境界平滑化のために採用され、ブロックが、方向性予測モードの角度方向に関連するすべての隣接ブロックのサンプルに関連する平均値と類似/同じであることを示す。したがって、イントラ予測ブロックは、実際の値ではなく、関係のある様々な予測モード値として画像ブロックを表すことができる。さらに、インター予測ブロックは、実際の値ではなく、動きベクトル値として画像ブロックを表すことができる。いずれの場合も、予測ブロックは、場合によっては画像ブロックを厳密に表さないことがある。任意の差分が残差ブロックの中に記憶される。ファイルをさらに圧縮するために、残差ブロックに変換が適用されてよい。
ステップ107において、様々なフィルタ処理技法が適用されてよい。HEVCでは、フィルタはループ内フィルタ処理方式に従って適用される。上記で説明したブロックベース予測は、デコーダにおいてブロック状の画像の発生をもたらす場合がある。さらに、ブロックベース予測方式はブロックを符号化してよく、次いで、参照ブロックとして後で使用するために符号化ブロックを再構成してよい。ループ内フィルタ処理方式は、雑音抑圧フィルタ、デブロッキングフィルタ、適応ループフィルタ、およびサンプル適応オフセット(SAO:sample adaptive offset)フィルタを、反復的にブロック/フレームに適用する。これらのフィルタは、符号化されたファイルが正確に再構成され得るように、そのようなブロッキングアーティファクトを軽減する。さらに、再構成された参照ブロックに基づいて符号化されている後続のブロックの中で、アーティファクトが追加のアーティファクトを発生させる可能性が低くなるように、これらのフィルタは、再構成された参照ブロックにおけるアーティファクトを軽減する。
ビデオ信号が区分、圧縮、およびフィルタ処理されていると、ステップ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:binary tree)、3分木(TT:triple tree)、および4分木(QT:quad tree)を含んでよい。区分されたビデオ信号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:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分メトリックによって決定されてよい。HEVCは、CTU、コーディングツリーブロック(CTB)、およびCUを含むいくつかのコード化オブジェクトを採用する。たとえば、CTUはCTBに分割され得、次いで、CTBはCUの中に含めるためのCBに分割され得る。CUは、予測データを含む予測ユニット(PU:prediction unit)、および/またはCUに対する変換された残差データを含む変換ユニット(TU:transform unit)として符号化され得る。動き推定構成要素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:rate-distortion optimization)に基づく深度モデリングモード(DMM:depth modeling mode)を使用して、深度マップの深度ブロックをコーディングするように構成され得る。
ピクチャ内予測構成要素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は入力ビデオ信号を区分し、区分されたビデオ信号301が結果として得られ、区分されたビデオ信号301は区分されたビデオ信号201と実質的に類似である。区分されたビデオ信号301は、次いで、エンコーダ300の構成要素によって、ビットストリームの中に圧縮および符号化される。
具体的には、区分されたビデオ信号301は、イントラ予測のためにピクチャ内予測構成要素317に転送される。ピクチャ内予測構成要素317は、ピクチャ内推定構成要素215およびピクチャ内予測構成要素217と実質的に類似であってよい。区分されたビデオ信号301はまた、復号ピクチャバッファ構成要素323の中の参照ブロックに基づくインター予測のために、動き補償構成要素321に転送される。動き補償構成要素321は、動き推定構成要素221および動き補償構成要素219と実質的に類似であってよい。ピクチャ内予測構成要素317および動き補償構成要素321からの予測ブロックおよび残差ブロックは、残差ブロックの変換および量子化のために、変換および量子化構成要素313に転送される。変換および量子化構成要素313は、変換スケーリングおよび量子化構成要素213と実質的に類似であってよい。変換および量子化された残差ブロック、ならびに対応する予測ブロックは、ビットストリームの中にコーディングするために、(関連する制御データと一緒に)エントロピーコーディング構成要素331に転送される。エントロピーコーディング構成要素331は、ヘッダフォーマッティングおよびCABAC構成要素231と実質的に類似であってよい。
変換および量子化された残差ブロック、ならびに/または対応する予測ブロックはまた、動き補償構成要素321による使用のための参照ブロックへの再構成のために、変換および量子化構成要素313から逆変換および量子化構成要素329に転送される。逆変換および量子化構成要素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は、フレームの中での参照ブロックの位置を特定するための予測モードを採用し、その結果に残差ブロックを適用して、イントラ予測された画像ブロックを再構成する。再構成された、イントラ予測された画像ブロックおよび/または残差ブロック、ならびに対応するインター予測データは、復号ピクチャバッファ構成要素423にループ内フィルタ構成要素425を介して転送され、それらは、それぞれ、復号ピクチャバッファ構成要素223およびループ内フィルタ構成要素225と実質的に類似であってよい。ループ内フィルタ構成要素425は、再構成された画像ブロック、残差ブロック、および/または予測ブロックをフィルタ処理し、そのような情報が復号ピクチャバッファ構成要素423の中に記憶される。復号ピクチャバッファ構成要素423からの再構成された画像ブロックは、インター予測のために動き補償構成要素421に転送される。動き補償構成要素421は、動き推定構成要素221および/または動き補償構成要素219と実質的に類似であってよい。具体的には、動き補償構成要素421は、予測ブロックを生成するために参照ブロックからの動きベクトルを採用し、その結果に残差ブロックを適用して画像ブロックを再構成する。得られた再構成ブロックはまた、ループ内フィルタ構成要素425を介して復号ピクチャバッファ構成要素423に転送されてよい。復号ピクチャバッファ構成要素423は、再構成された追加の画像ブロックを引き続き記憶し、そうした画像ブロックは、区分情報を介してフレームに再構成され得る。そのようなフレームもシーケンスの中に置かれてよい。シーケンスは、再構成された出力ビデオ信号としてディスプレイに向かって出力される。
図5は、たとえば、ブロック圧縮ステップ105、ブロック復号ステップ113、動き推定構成要素221、動き補償構成要素219、動き補償構成要素321、および/または動き補償構成要素421において、動きベクトル(MV:motion vector)を決定するために実行されるような、単方向インター予測500の一例を示す概略図である。
単方向インター予測500は、現在ピクチャ510の中の現在ブロック511を予測するために、参照ブロック531を有する参照ピクチャ530を採用する。参照ピクチャ530は、図示のように(たとえば、後続の参照ピクチャのように)時間的に現在ピクチャ510の後に配置されてよいが、いくつかの例では、(たとえば、先行する参照ピクチャのように)時間的に現在ピクチャ510の前に配置されてもよい。現在ピクチャ510は、特定の時間において符号化/復号されている例示的なフレーム/ピクチャである。現在ピクチャ510は、参照ピクチャ530の参照ブロック531の中のオブジェクトに整合する、現在ブロック511の中のオブジェクトを含む。参照ピクチャ530は、現在ピクチャ510を符号化するための参照として採用されるピクチャであり、参照ブロック531は、現在ピクチャ510の現在ブロック511の中にも含まれるオブジェクトを含む、参照ピクチャ530の中のブロックである。
現在ブロック511は、コーディングプロセスの中で、指定された点において符号化/復号されている任意のコーディングユニットである。現在ブロック511は、区分されたブロック全体であってよく、またはアフィンインター予測モードを採用するときにはサブブロックであってもよい。現在ピクチャ510は、いくらかの時間的距離(TD:temporal distance)533だけ参照ピクチャ530から離れている。TD533は、ビデオシーケンスの中での現在ピクチャ510と参照ピクチャ530との間の時間量を示し、ピクチャの単位で計測され得る。現在ブロック511に対する予測情報は、ピクチャ間の方向および時間的距離を示す参照インデックスよって参照ピクチャ530および/または参照ブロック531を参照し得る。TD533によって表される時間期間にわたって、現在ブロック511の中のオブジェクトは、現在ピクチャ510の中のある位置から参照ピクチャ530の中の別の位置(たとえば、参照ブロック531の位置)まで移動する。たとえば、オブジェクトは、時間的なオブジェクトの移動の方向である動き軌跡513に沿って移動することがある。動きベクトル535は、TD533にわたって、動き軌跡513に沿ったオブジェクトの移動の方向および大きさを表す。したがって、符号化された動きベクトル535、参照ブロック531、および現在ブロック511と参照ブロック531との間の差分を含む残差は、現在ブロック511を再構成するとともに現在ピクチャ510の中の現在ブロック511の位置を特定するのに十分な情報を提供する。
図6は、たとえば、ブロック圧縮ステップ105、ブロック復号ステップ113、動き推定構成要素221、動き補償構成要素219、動き補償構成要素321、および/または動き補償構成要素421において、MVを決定するために実行されるような、双方向インター予測600の一例を示す概略図である。
双方向インター予測600は、単方向インター予測500と類似であるが、現在ピクチャ610の中の現在ブロック611を予測するために1対の参照ピクチャを採用する。したがって、現在ピクチャ610および現在ブロック611は、それぞれ、現在ピクチャ510および現在ブロック511と実質的に類似である。現在ピクチャ610は、時間的に、ビデオシーケンスの中で現在ピクチャ610の前に出現する先行する参照ピクチャ620とビデオシーケンスの中で現在ピクチャ610の後に出現する後続の参照ピクチャ630との間に配置される。先行する参照ピクチャ620および後続の参照ピクチャ630は、本来なら参照ピクチャ530と実質的に類似である。
現在ブロック611は、先行する参照ピクチャ620の中の先行する参照ブロック621、および後続の参照ピクチャ630の中の後続の参照ブロック631に整合される。そのような整合は、ビデオシーケンスの過程にわたって、動き軌跡613に沿って、かつ現在ブロック611を介して、先行する参照ブロック621における位置から後続の参照ブロック631における位置までオブジェクトが移動することを示す。現在ピクチャ610は、いくらかの先行する時間的距離(TD0)623だけ、先行する参照ピクチャ620から離れており、いくらかの後続の時間的距離(TD1)633だけ、後続の参照ピクチャ630から離れている。TD0 623は、ビデオシーケンスの中での先行する参照ピクチャ620と現在ピクチャ610との間の時間量を、ピクチャの単位で示す。TD1 633は、ビデオシーケンスの中での現在ピクチャ610と後続の参照ピクチャ630との間の時間量を、ピクチャの単位で示す。したがって、TD0 623によって示される時間期間にわたって動き軌跡613に沿って、先行する参照ブロック621から現在ブロック611までオブジェクトが移動する。オブジェクトはまた、TD1 633によって示される時間期間にわたって動き軌跡613に沿って、現在ブロック611から後続の参照ブロック631まで移動する。現在ブロック611に対する予測情報は、ピクチャ間の方向および時間的距離を示す1対の参照インデックスによって、先行する参照ピクチャ620および/または先行する参照ブロック621、ならびに後続の参照ピクチャ630および/または後続の参照ブロック631を参照し得る。
先行する動きベクトル(MV0)625は、TD0 623にわたって動き軌跡613に沿った(たとえば、先行する参照ピクチャ620と現在ピクチャ610との間の)オブジェクトの移動の方向および大きさを表す。後続の動きベクトル(MV1)635は、TD1 633にわたって動き軌跡613に沿った(たとえば、現在ピクチャ610と後続の参照ピクチャ630との間の)オブジェクトの移動の方向および大きさを表す。したがって、双方向インター予測600では、現在ブロック611は、先行する参照ブロック621および/または後続の参照ブロック631、MV0 625、ならびにMV1 635を採用することによって、コーディングおよび再構成され得る。
図7は、たとえば、ブロック圧縮ステップ105、ブロック復号ステップ113、動き推定構成要素221、動き補償構成要素219、動き補償構成要素321、および/または動き補償構成要素421において、MVを決定するために実行されるような、レイヤベース予測700の一例を示す概略図である。レイヤベース予測700は、単方向インター予測500および/または双方向インター予測600と類似であるが、異なるレイヤの中のピクチャ間でも実行される。
レイヤベース予測700は、異なるレイヤの中の、ピクチャ711、712、713、および714と、ピクチャ715、716、717、および718との間に適用される。図示の例では、ピクチャ711、712、713、および714は、レイヤN+1 732の一部であり、ピクチャ715、716、717、および718は、レイヤN731の一部である。レイヤN731および/またはレイヤN+1 732などのレイヤは、類似のサイズ、品質、解像度、信号対雑音比、能力などの、類似の値の特性にそのすべてが関連するピクチャのグループである。図示の例では、レイヤN+1 732は、レイヤN731よりも大きい画像サイズに関連する。したがって、この例では、レイヤN+1 732の中のピクチャ711、712、713、および714は、レイヤN731の中のピクチャ715、716、717、および718よりも大きいピクチャサイズ(たとえば、より大きい高さおよび幅、したがって、より多くのサンプル)を有する。しかしながら、そのようなピクチャは、他の特性によってレイヤN+1 732とレイヤN731との間で分離され得る。2つのレイヤ、すなわち、レイヤN+1 732およびレイヤN731しか図示されないが、ピクチャのセットが、関連する特性に基づいて任意の数のレイヤに分離され得る。レイヤN+1 732およびレイヤN731はまた、レイヤIDによって示されてよい。レイヤIDは、ピクチャに関連するデータの項目であり、ピクチャが、示されるレイヤの一部であることを示す。したがって、どちらのレイヤN+1 732またはレイヤN731が、対応するピクチャを含むのかを示すために、各ピクチャ711~718は対応するレイヤIDに関連し得る。
異なるレイヤ731~732の中のピクチャ711~718は、代替として表示されるように構成される。したがって、異なるレイヤ731~732の中のピクチャ711~718は、同じピクチャ順序カウントを共有することができ、同じAUの中に含まれ得る。本明細書で使用するAUは、DPBからの出力に対して同じ表示時間に関連する1つまたは複数のコード化ピクチャのセットである。たとえば、小さい方のピクチャが望まれる場合、デコーダは現在の表示時間においてピクチャ715を復号および表示してよく、または大きい方のピクチャが望まれる場合、デコーダは現在の表示時間においてピクチャ711を復号および表示してよい。したがって、高い方のレイヤN+1 732におけるピクチャ711~714は、(ピクチャサイズの差異にもかかわらず)低い方のレイヤN731における対応するピクチャ715~718と実質的に同じ画像データを含む。具体的には、ピクチャ711は、ピクチャ715と実質的に同じ画像データを含み、ピクチャ712は、ピクチャ716と実質的に同じ画像データを含むなどである。
ピクチャ711~718は、同じレイヤN731またはN+1 732の中の他のピクチャ711~718への参照によってコーディングされ得る。同じレイヤの中の別のピクチャを参照してピクチャをコーディングすることがインター予測723をもたらし、インター予測723は、単方向インター予測500および/または双方向インター予測600と実質的に類似である。インター予測723が実線矢印によって示される。たとえば、ピクチャ713は、参照としてレイヤN+1 732の中のピクチャ711、712、および/または714のうちの1つまたは2つを使用して、インター予測723を採用することによってコーディングされてよく、ここで、単方向インター予測のために1つのピクチャが参照され、かつ/または2つのピクチャは双方向インター予測のための参照である。さらに、ピクチャ717は、参照としてレイヤN731の中のピクチャ715、716、および/または718のうちの1つまたは2つを使用して、インター予測723を採用することによってコーディングされてよく、ここで、単方向インター予測のために1つのピクチャが参照され、かつ/または2つのピクチャは双方向インター予測のための参照である。インター予測723を実行するときに同じレイヤの中の別のピクチャのための参照としてピクチャが使用されるとき、そのピクチャは、参照ピクチャと呼ばれることがある。たとえば、ピクチャ712は、インター予測723に従ってピクチャ713をコーディングするために使用される参照ピクチャであってよい。インター予測723は、マルチレイヤコンテキストではレイヤ内予測と呼ぶこともできる。したがって、インター予測723は、現在ピクチャとは異なる参照ピクチャの中の示されるサンプルへの参照によって現在ピクチャのサンプルをコーディングするメカニズムであり、ただし、参照ピクチャおよび現在ピクチャは同じレイヤの中にある。
ピクチャ711~718はまた、異なるレイヤの中の他のピクチャ711~718への参照によってコーディングされ得る。このプロセスはレイヤ間予測721としても知られ、破線矢印によって示される。レイヤ間予測721は、参照ピクチャの中の示されるサンプルへの参照によって現在ピクチャのサンプルをコーディングするメカニズムであり、ただし、現在ピクチャおよび参照ピクチャは異なるレイヤの中にあり、したがって、異なるレイヤIDを有する。たとえば、低い方のレイヤN731の中のピクチャは、高い方のレイヤN+1 732における対応するピクチャをコーディングするための参照ピクチャとして使用され得る。具体例として、ピクチャ711は、レイヤ間予測721によるピクチャ715への参照によってコーディングされ得る。そのような場合、ピクチャ715は、レイヤ間参照ピクチャとして使用される。レイヤ間参照ピクチャとは、レイヤ間予測721のために使用される参照ピクチャである。たいていの場合、レイヤ間予測721は、ピクチャ711などの現在ピクチャが、ピクチャ715などの、同じAUの中に含まれ低い方のレイヤにあるレイヤ間参照ピクチャしか使用できないように制約される。複数のレイヤ(たとえば、3つ以上)が利用可能であるとき、レイヤ間予測721は、現在ピクチャよりも低いレベルにおける複数のレイヤ間参照ピクチャに基づいて、現在ピクチャを符号化/復号することができる。
ビデオエンコーダは、インター予測723とレイヤ間予測721との多くの異なる組合せおよび/または並べ替えを介してピクチャ711~718を符号化するために、レイヤベース予測700を採用することができる。たとえば、ピクチャ715は、イントラ予測に従ってコーディングされてよい。ピクチャ716~718は、次いで、参照ピクチャとしてピクチャ715を使用することによって、インター予測723に従ってコーディングされ得る。さらに、ピクチャ711は、レイヤ間参照ピクチャとしてピクチャ715を使用することによって、レイヤ間予測721に従ってコーディングされてよい。ピクチャ712~714は、次いで、参照ピクチャとしてピクチャ711を使用することによって、インター予測723に従ってコーディングされ得る。したがって、参照ピクチャは、異なるコーディングメカニズムのための単一レイヤ参照ピクチャとレイヤ間参照ピクチャの両方の働きをすることができる。低い方のレイヤN731のピクチャに基づいて高い方のレイヤN+1 732のピクチャをコーディングすることによって、高い方のレイヤN+1 732は、インター予測723およびレイヤ間予測721よりもずっと低いコーディング効率を有するイントラ予測を採用することを回避することができる。したがって、イントラ予測の劣悪なコーディング効率は、品質が最小/最低のピクチャに限定されてよく、したがって、最小量のビデオデータをコーディングすることに限定されてよい。参照ピクチャおよび/またはレイヤ間参照ピクチャとして使用されるピクチャは、参照ピクチャリスト構造の中に含まれる参照ピクチャリストのエントリの中で示され得る。
図8は、例示的な参照ピクチャリスト構造(RPL構造)800を示す概略図である。単方向インター予測500、双方向インター予測600、および/またはレイヤベース予測700において使用される参照ピクチャおよび/またはレイヤ間参照ピクチャの表示を記憶するために、RPL構造800が採用され得る。したがって、RPL構造800は、方法100を実行するとき、コーデックシステム200、エンコーダ300、および/またはデコーダ400によって採用され得る。
RPL構造800は、RPL0 811およびRPL1 812などの複数の参照ピクチャリストを含む、アドレス指定可能なシンタックス構造である。RPL構造800は、例に応じてビットストリームのSPSおよび/またはスライスヘッダの中に記憶されてよい。RPL0 811およびRPL1 812などの参照ピクチャリストは、インター予測および/またはレイヤ間予測のために使用される参照ピクチャのリストである。RPL0 811およびRPL1 812は各々、複数のエントリ815を含んでよい。参照ピクチャリスト構造エントリ815は、RPL0 811および/またはRPL1 812などの参照ピクチャリストに関連する参照ピクチャを示す、RPL構造800の中のアドレス指定可能なロケーションである。各エントリ815は、インター予測のために使用されるピクチャを参照するピクチャ順序カウント(POC)値(または、他のポインタ値)を含んでよい。具体的には、単方向インター予測500によって使用されるピクチャへの参照は、RPL0 811の中に記憶され、双方向インター予測600によって使用されるピクチャへの参照は、RPL0 811とRPL1 812の両方の中に記憶される。たとえば、双方向インター予測600は、RPL0 811によって示される1つの参照ピクチャおよびRPL1 812によって示される1つの参照ピクチャを使用してよい。
具体例では、RPL構造800は、ref_pic_list_struct( listIdx, rplsIdx )として示され得、ここで、listIdx821は、参照ピクチャリストRPL0 811および/またはRPL1 812を識別し、rplsIdx825は、参照ピクチャリストの中のエントリ815を識別する。したがって、ref_pic_list_structは、listIdx821およびrplsIdx825に基づいてエントリ815を戻すシンタックス構造である。エンコーダは、ビデオシーケンスの中で、非イントラコード化スライスごとにRPL構造800の一部分を符号化することができる。デコーダは、次いで、コード化ビデオシーケンスの中の各非イントラコード化スライスを復号する前に、RPL構造800の対応する部分を解決することができる。
上述のように、参照ピクチャはインター予測のために参照され得る。さらに、参照ピクチャはレイヤ間予測のためのレイヤ間参照ピクチャとして使用され得る。したがって、RPL構造800は、レイヤ間予測をサポートするためにILRPフラグ833およびILRPレイヤインジケータ835を含めることによって修正される。ILRPフラグ833は、RPL構造800の対応するエントリ815によって参照されるピクチャが、レイヤ間予測のために使用されるレイヤ間参照ピクチャであるかどうかを示す、データである。したがって、エンコーダは、各エントリ815がILRPエントリとして扱われるべきかどうかを示すために、ILRPフラグ833を使用することができる。ILRPエントリは、レイヤ間予測のために使用されるレイヤ間参照ピクチャを参照する任意のエントリ815である。さらに、デコーダは、RPL構造800の中の各エントリ815がILRPエントリであるかどうかを決定するために、ILRPフラグ833を使用することができる。具体例では、ILRPフラグ833は、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]として示され、ここで、iは、対応するエントリ815を各値が示すカウンタ変数である。ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリがILRPエントリであるとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定され得る。さらに、ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリがILRPエントリでないとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定され得る。
上述のように、レイヤ間参照ピクチャは、符号化/復号されている現在ピクチャと同じAUの中に位置してよく同じPOC値を有してよい。したがって、RPL構造800は、対応するレイヤ間参照ピクチャのPOC値を追加するように修正されなくてよい。しかしながら、AUの1つまたは複数のどのレイヤが、現在ピクチャを復号するための適切なレイヤ間参照ピクチャを含むのかを、デコーダが推測できないことがある。この目的のためにILRPレイヤインジケータ835が含められる。ILRPレイヤインジケータ835は、現在ピクチャによって参照されるレイヤ間参照ピクチャに関連するレイヤを示すデータである。具体的には、ILRPレイヤインジケータ835は、ILRPフラグ833によって示されるようなILRPエントリであるエントリ815ごとに、1つまたは複数のレイヤを示すことができる。したがって、エンコーダは、エントリ815に関連する1つまたは複数のレイヤ間参照ピクチャのレイヤを示すために、ILRPレイヤインジケータ835をビットストリームの中に符号化することができる。加えて、エントリ815が、ILRPフラグ833によって示されるようなILRPエントリであるとき、デコーダは、ILRPレイヤインジケータ835に基づいてレイヤ間参照ピクチャのレイヤを決定することができる。したがって、RPL構造800へのILRPフラグ833およびILRPレイヤインジケータ835の追加は、RPL構造800がレイヤ間予測のための参照ピクチャを管理することを可能にするための、十分な情報を提供する。
図9は、レイヤ間予測をサポートするためのコーディングツールパラメータを含む例示的なビットストリーム900を示す概略図である。たとえば、ビットストリーム900は、コーデックシステム200および/またはデコーダ400によって復号するために、コーデックシステム200および/またはエンコーダ300によって生成され得る。別の例として、ビットストリーム900は、ステップ111におけるデコーダによる使用のために、方法100のステップ109においてエンコーダによって生成されてよい。さらに、ビットストリーム900は、単方向インター予測500、双方向インター予測600、および/またはレイヤベース予測700に従ってコーディングされ得るコード化ビデオシーケンスであってよい。加えて、ビットストリーム900は、RPL構造800を通信するために採用され得る。
ビットストリーム900は、シーケンスパラメータセット(SPS)910、複数のピクチャパラメータセット(PPS:picture parameter set)911、複数のスライスヘッダ915、および画像データ920を含む。SPS910は、ビットストリーム900の中に含まれるビデオシーケンスの中のすべてのピクチャに共通のシーケンスデータを含む。そのようなデータは、ピクチャサイズ決定、ビット深度、コーディングツールパラメータ、ビットレート制約などを含むことができる。PPS911は、ピクチャ全体に適用されるパラメータを含む。したがって、ビデオシーケンスの中の各ピクチャは、PPS911を参照し得る。各ピクチャがPPS911を参照するが、いくつかの例では単一のPPS911が複数のピクチャのためのデータを含むことができることに留意されたい。たとえば、複数の類似のピクチャが、類似のパラメータに従ってコーディングされる場合がある。そのような場合、単一のPPS911は、そのような類似のピクチャのためのデータを含んでよい。PPS911は、対応するピクチャの中のスライスのために利用可能なコーディングツール、量子化パラメータ、オフセットなどを示すことができる。スライスヘッダ915は、ピクチャの中の各スライスに特有であるパラメータを含む。したがって、ビデオシーケンスの中のスライス当たり1つのスライスヘッダ915があり得る。スライスヘッダ915は、スライスタイプ情報、ピクチャ順序カウント(POC)、参照ピクチャリスト、予測重み、タイルエントリポイント、デブロッキングパラメータなどを含んでよい。いくつかのコンテキストでは、スライスヘッダ915がタイルグループヘッダと呼ばれることもあることに留意されたい。いくつかの例では、ビットストリーム900がピクチャヘッダも含んでよく、ピクチャヘッダが、単一のピクチャの中のすべてのスライスに適用されるパラメータを含むシンタックス構造であることに留意されたい。この理由で、いくつかのコンテキストでは、ピクチャヘッダおよびスライスヘッダ915は互換的に使用され得る。たとえば、いくつかのパラメータは、そのようなパラメータがピクチャの中のすべてのスライスに共通であるかどうかに応じて、スライスヘッダ915とピクチャヘッダとの間で移動させられてよい。
画像データ920は、インター予測、イントラ予測、および/またはレイヤ間予測に従って符号化されたビデオデータ、ならびに変換および量子化された対応する残差データを含む。たとえば、ビデオシーケンスは複数のピクチャ923を含む。ピクチャ923は、フレームまたはフレームのフィールドを作成する、ルーマサンプルのアレイおよび/またはクロマサンプルのアレイである。フレームは、ビデオシーケンスの中の対応する瞬間におけるユーザへの完全または部分的な表示を対象とする、完全な画像である。ピクチャ923は、単一のAU921の中に含まれてよい。AU921は、同じピクチャ順序カウントを有するすべてのコード化ピクチャ923と、随意に、コード化ピクチャ923をコーディングするために採用されたコーディングメカニズムを表すパラメータを含む、スライスヘッダ915などの1つまたは複数のヘッダとを記憶するように構成された、コーディングユニットである。したがって、AU921は、ビットストリーム900の中に含まれるピクチャレベルごとに、単一のピクチャ923を含むことができる。ピクチャ923は、1つまたは複数のスライス925を含む。スライス925は、単一のNALユニットの中に排他的に含まれる、ピクチャ923の整数個の完全なタイルまたは(たとえば、タイル内の)整数個の連続する完全なCTU行として規定されてよい。スライス925は、CTUおよび/またはコーディングツリーブロック(CTB)にさらに分割される。CTUは、コーディングツリーによって区分され得る、既定のサイズのサンプルのグループである。CTBはCTUのサブセットであり、CTUのルーマ成分またはクロマ成分を含む。CTU/CTBは、コーディングツリーに基づいてコーディングブロックにさらに分割される。コーディングブロックは、次いで、予測メカニズムに従って符号化/復号され得る。
ビットストリーム900は、レイヤ間予測をサポートするための様々なコーディングツールパラメータを含む。具体的には、ビットストリームは、参照ピクチャリスト構造931、ILRPフラグ933、およびILRPレイヤインジケータ935を含み、それらは、それぞれ、RPL構造800、ILRPフラグ833、およびILRPレイヤインジケータ835と実質的に類似であってよい。参照ピクチャリスト構造931、ILRPフラグ933、およびILRPレイヤインジケータ935は、SPS910、スライスヘッダ915、および/または対応するピクチャヘッダの中にコーディングされてよい。したがって、エンコーダは、参照ピクチャリスト構造931の中のエントリの中で参照ピクチャを列挙することができ、参照ピクチャのうちのどれがレイヤ間参照ピクチャであるのかをILRPフラグ933の中で示すことができ、関連するレイヤ間参照ピクチャをどのレイヤが含むのかをILRPレイヤインジケータ935の中で示すことができる。さらに、デコーダは、参照ピクチャリスト構造931、ILRPフラグ933、およびILRPレイヤインジケータ935を取得するために、SPS910、スライスヘッダ915、および/または対応するピクチャヘッダを復号することができる。デコーダは、次いで、参照ピクチャリスト構造931の中のエントリから、現在ピクチャに対する参照ピクチャを決定することができる。デコーダはまた、ILRPフラグ933を採用することによって、参照ピクチャのうちのどれがレイヤ間参照ピクチャであるのかを決定することができる。さらに、デコーダは、ILRPレイヤインジケータ935を採用することによって、レイヤ間参照ピクチャに関連する1つまたは複数のレベルを決定することができる。したがって、ビットストリーム900は、ビデオシーケンスをコーディングするためにイントラ予測、インター予測、および/またはレイヤ間予測の組合せを実行するときに、参照ピクチャを管理するための十分な情報を提供するように構成される。
前述の情報が、次に本明細書において以下でより詳細に説明される。ビットストリームの中央でコード化ピクチャの空間解像度を変更するために、参照ピクチャリサンプリング(RPR:reference picture resampling)メカニズムが採用されてよい。この解像度変更は、現在ピクチャがイントラコーディングされていないときでも現在ピクチャにおいて達成され得る。この機能を可能にするために、現在ピクチャは、インター予測目的のために1つまたは複数の参照ピクチャを参照してよく、ただし、参照ピクチャは、現在ピクチャの空間解像度とは異なる空間解像度を採用する。したがって、現在ピクチャの符号化および復号は、そのような参照ピクチャまたは参照ピクチャの部分のリサンプリングを伴ってよい。この機能は、適応型解像度変更(ARC:adaptive resolution change)と呼ばれることもある。参照ピクチャのリサンプリングは、ピクチャレベルまたはコーディングブロックレベルのいずれかにおいて実現され得る。
いくつかの実装形態が、RPRから恩恵を受けることがある。たとえば、ビデオ電話およびビデオ会議はレート適合を採用することがある。コード化ビデオのレートは、変化するネットワーク条件に対して適合され得る。ネットワーク条件が悪化し利用可能な帯域幅がより小さくなると、エンコーダは、より低い解像度ピクチャにおいてピクチャを符号化することによって適合させてよい。別の例として、マルチパーティビデオ会議におけるアクティブな話者の変更が、RPRから恩恵を受けることがある。マルチパーティビデオ会議では、アクティブな話者は、会議参加者のうちの他の人たちに対するビデオよりも大きいビデオサイズで見せられることがある。アクティブな話者が変わると、各参加者に対するピクチャ解像度も調整され得る。アクティブな話者がより頻繁に変わるとき、RPR/ARCメカニズムは次第にもっと有益となる。別の例では、ストリーミングにおける迅速な開始が、RPRから恩恵を受けることがある。ストリーミングアプリケーションは、表示し始める前にいくらかの長さまでの復号ピクチャをバッファリングすることがある。より低い解像度でビットストリームを開始することは、より迅速に表示し始めるのに十分なピクチャをアプリケーションがバッファリングすることを可能にし得る。表示が始まっていると、次いで、解像度が高められ得る。別の例では、ストリーミングにおける適応型ストリーム切替えが、RPRから恩恵を受けることがある。動的適応ストリーミングオーバーHTTP(DASH)は、@mediaStreamStructureIdと称する機能を採用する。この機能は、HEVCにおける関連するRASLピクチャを伴うクリーンランダムアクセス(CRA:clean random access)ピクチャと呼ばれることがある、非復号可能リーディングピクチャを有するオープンなピクチャグループ(GOP:group of picture)ランダムアクセスポイントにおいて、異なる表現の間での切替えを可能にする。たとえば、同じビデオの2つの異なる表現は、それらが同じ値の@mediaStreamStructureIdを有する間、異なるビットレートおよび同じ空間解像度を有する場合がある。そのような場合、関連するRASLピクチャを伴うCRAピクチャにおける2つの表現の間での切替えが実行され得る。CRAピクチャに関連するRASLピクチャは、許容できる品質を伴って復号され得、そのことがシームレスな切替えを可能にする。空間解像度が異なるDASH表現の間で切り替えるとき、ARC/RPRにより@mediaStreamStructureId機能が採用されることが可能になる。
スケーラブルビデオコーディング、および/またはスケーラビリティを有するビデオコーディングと呼ばれることもある、階層化ビデオコーディングを採用することによって、ARC/RPRが実施され得る。ビデオコーディングにおけるスケーラビリティは、マルチレイヤコーディング技法を使用することによってサポートされ得る。マルチレイヤビットストリームは、ベースレイヤ(BL:base layer)および1つまたは複数のエンハンスメントレイヤ(EL:enhancement layer)を備える。スケーラビリティは、空間スケーラビリティ、品質/信号対雑音比(SNR)スケーラビリティ、マルチビュースケーラビリティなどを含んでよい。マルチレイヤコーディング技法が採用されると、ピクチャ(または、ピクチャの部分)は、(1)参照ピクチャを使用することなく(イントラ予測)、(2)同じレイヤの中にある1つまたは複数の参照ピクチャへの参照によって(インター予測)、あるいは(3)他のレイヤの中にある1つまたは複数の参照ピクチャへの参照によって(レイヤ間予測)、コーディングされ得る。現在ピクチャのレイヤ間予測のために使用される参照ピクチャは、レイヤ間参照ピクチャ(ILRP)と呼ばれる。
H.26xビデオコーディングファミリーは、シングルレイヤコーディング用のプロファイルからの、分離されたプロファイルにおけるスケーラビリティに対するサポートを提供し得る。スケーラブルビデオコーディング(SVC)は、空間スケーラビリティ、時間スケーラビリティ、および品質スケーラビリティに対するサポートを提供する、AVC/H.264のスケーラブル拡張である。SVCの場合、より低いレイヤからのコロケートブロックを使用してMBが予測されるかどうかを示すために、ピクチャの中の各マクロブロック(MB)の中でフラグがシグナリングされる。コロケートブロックからの予測は、テクスチャモード、動きベクトルモード、および/またはコーディングモードを含んでよい。
スケーラブルHEVC(SHVC)は、空間スケーラビリティおよび品質スケーラビリティに対するサポートを提供する、HEVC/H.265の拡張である。マルチビューHEVC(MV-HEVC)は、マルチビュースケーラビリティに対するサポートを提供する、HEVC/H.265の拡張である。3次元(3D)HEVC(3D-HEVC)は、3Dビデオコーディングに対するサポートを提供する、HEVC/H.264の拡張である。時間スケーラビリティは、シングルレイヤHEVCコーデックにおいて採用され得る。HEVCのマルチレイヤ拡張は、レイヤ間予測のために使用される復号ピクチャが、同じAUのみから取られ、かつ長期的参照ピクチャ(LTRP:long-term reference picture)として扱われる、メカニズムを採用する。そのようなピクチャは、現在のレイヤの中の他の時間参照ピクチャと一緒に、参照ピクチャリストの中の参照インデックスが割り当てられる。レイヤ間予測(ILP:inter-layer prediction)は、参照ピクチャリストの中のレイヤ間参照ピクチャを参照するように参照インデックスの値を設定することによって、予測ユニット(PU)レベルにおいて達成される。
符号化または復号されている現在ピクチャとは異なる空間解像度をILRPが有するとき、空間スケーラビリティは、参照ピクチャまたは参照ピクチャの部分のリサンプリングを採用し得る。参照ピクチャリサンプリングは、ピクチャレベルまたはコーディングブロックレベルのいずれかにおいて実現され得る。
ビデオコーデック仕様では、ピクチャは複数の目的のために識別されてよい。たとえば、ピクチャは、インター予測における参照ピクチャとしての使用のために、DPBからの出力のために、動きベクトルのスケーリングのために、重み付き予測などのために、識別されてよい。いくつかのビデオコーディングシステムでは、ピクチャはピクチャ順序カウント(POC)によって識別され得る。さらに、DPBの中のピクチャは、短期的参照のために使用されるか、長期的参照のために使用されるか、または参照のために使用されないものとして、マークされ得る。ピクチャは、そのピクチャが参照のために使用されないとマークされていると、もはや予測のために使用され得ない。そのようなピクチャがもはや出力のために必要とされないとき、そのピクチャはDPBから除去され得る。
AVCは、短期的参照ピクチャおよび長期的参照ピクチャを採用してよい。ピクチャがもはや予測参照として必要とされないとき、参照ピクチャは、参照のために使用されないものとしてマークされてよい。これらの3つのステータス(短期的、長期的、および参照のために使用されない)の間での転換は、復号された参照ピクチャのマーキングプロセスによって制御される。そのようなシステムにおける参照ピクチャマーキングのために、暗黙的なスライディングウィンドウプロセスおよび明示的なメモリ管理制御動作(MMCO:memory management control operation)プロセスが採用され得る。スライディングウィンドウプロセスは、参照フレームの数がSPSの中の最大数(max_num_ref_frames)に等しいとき、参照のために使用されないものとして短期的参照ピクチャにマークする。短期的参照ピクチャは、直近に復号された短期的ピクチャがDPBの中に保持されるように、先入れ先出し方式で記憶される。明示的なMMCOプロセスは、複数のMMCOコマンドを含んでよい。MMCOコマンドは、参照のために使用されないものとして1つまたは複数の短期的参照ピクチャまたは長期的参照ピクチャにマークしてよく、参照のために使用されないものとしてすべてのピクチャにマークしてよく、あるいは長期的として現在の参照ピクチャまたは既存の短期的参照ピクチャにマークしてよく、その長期的参照ピクチャに長期的ピクチャインデックスを割り当ててよい。AVCでは、参照ピクチャマーキング動作ならびにDPBからのピクチャの出力および除去のプロセスは、ピクチャが復号された後に実行される。
HEVCは、参照ピクチャマーキングのために参照ピクチャセット(RPS:reference picture set)を採用する。RPSを採用すると、現在ピクチャまたは任意の後続のピクチャによって使用される参照ピクチャの完全セットが、スライスごとに提供される。したがって、現在または将来のピクチャによる使用のためにDPBの中に保持されるべきすべてのピクチャの完全セットが、RPSの中でシグナリングされる。このことは、DPBの相対的な変化しかシグナリングされないAVC方式とは異なる。RPSは、DPBの中の参照ピクチャの正確なステータスを維持するとき、復号順序でもっと早いピクチャからの情報を記憶しなくてよい。
AVCでは、ピクチャマーキングおよびバッファ動作(DPBからの復号ピクチャの出力と除去の両方)は、現在ピクチャが復号された後に適用されてよい。HEVCでは、最初に現在ピクチャのスライスヘッダからRPSが復号される。次いで、現在ピクチャを復号する前にピクチャマーキングおよびバッファ動作が適用され得る。
VVCは、参照ピクチャ管理のために参照ピクチャリスト0および参照ピクチャリスト1を採用する。その手法を用いると、ピクチャのための参照ピクチャリストは、参照ピクチャリスト初期化プロセスおよび参照ピクチャリスト修正プロセスを使用せずに直ちに構成される。さらに、参照ピクチャマーキングが、2つの参照ピクチャリストに基づいて直ちに実行される。
前述のシステムはいくつかの問題を有する。VVCデコーダは、レイヤ間予測を伴うマルチレイヤビデオコーデックを可能にするために、レイヤ間参照ピクチャを導出することを可能とすべきである。そのようなメカニズムを実施するために、コーデックは、RPLをシグナリングし、RPLを導出し、かつマルチレイヤコンテキストにおいて参照ピクチャマーキングを実行するための、メカニズムを採用すべきである。
本開示は、階層化ビデオコーディングにおける参照ピクチャ管理のためのいくつかの手法を含む。これは、RPLのシグナリング、RPLの導出、および参照ピクチャマーキングを含む。本技法の説明はVVCに基づくが、他の階層化ビデオコーディング仕様に適用される。たとえば、本開示は、VVCに基づくレイヤ間予測を伴うマルチレイヤビデオコーデックにおけるRPLのシグナリングのためのメカニズムを含む。以下の制約が、以下で説明する例に適用されてよい。同じレイヤIDを有し同じプレゼンテーション時間に関連するすべてのVCL NALユニットは、1つのピクチャを備えてよい。さらに、ピクチャ内のすべてのVCL NALユニットは、同じPOC値を有してよい。そのようなPOC値はまた、ピクチャのPOC値として参照されてもよい。
第1の例は次のように要約される。同じプレゼンテーション時間に関連するすべてのピクチャが、1つのアクセスユニットに属する。異なるレイヤの、かつ同じアクセスユニット内のピクチャは、同じPOC値を有する。CVSの中の任意のコード化ピクチャのインター予測のためにILRPが使用されるかどうかを指定するために、inter_layer_ref_pics_flagなどの第1のフラグがSPSに追加され得る。ILRPがCVSの中の1つまたは複数のコード化ピクチャのインター予測のために使用され得ることを第1のフラグが指定するとき、エントリがILRPエントリであるかどうかを指定するために、RPL構造の中のエントリごとに第2のフラグがシグナリングされ得る。エントリに対する第2のフラグが、エントリがILRPエントリであることを指定するとき、現在ピクチャのレイヤIDとエントリによって参照されるピクチャとの間の差分-1を指定する第1のデルタ値がシグナリングされ得る。いくつかの例では、第1のデルタ値は、現在ピクチャを含むレイヤのレイヤインデックスとエントリによって参照されるピクチャを含むレイヤのレイヤインデックスとの間の差分-1を指定する。現在スライスの復号の開始において、RPLが、ビットストリームの中のRPLシグナリングに従ってデコーダによって構成され得る。エントリがILRPエントリであるとき、現在ピクチャと同じPicOrderCntValを有するとともに現在ピクチャのレイヤID-第1のデルタ値-1に等しいレイヤIDを有するピクチャを参照するように、エントリが導出される。現在ピクチャの復号の開始において、各ILRPは(存在する場合)長期的参照のために使用されるものとしてマークされる。現在ピクチャの復号の終了において、各ILRPは(存在する場合)短期的参照のために使用されるものとしてマークされる。同じレイヤのピクチャを復号するとき、復号ピクチャは、参照のために使用されないものとしてのみマークされてよい。
上述の例を実行する方法は次の通りである。一例では、ビデオビットストリームを復号するための方法が開示される。各レイヤが複数のピクチャを備えて、ビットストリームは複数のレイヤを備える。ピクチャのうちの1つまたは複数は、異なるレイヤに属するとともに同じプレゼンテーション時間を有し、したがって、1つのアクセスユニットを形成する。本方法は、ピクチャごとにPOC値を導出することを備える。1つのアクセスユニット内のすべてのピクチャのPOC値は同じである。現在スライスに対していくつかのRPLが導出される。各エントリは、エントリがILRPエントリであるかどうかを指定するフラグに関連する。導出されたRPLに基づいて現在スライスが復号される。例示的な一態様では、ビットストリームは、CVSの中の任意のコード化ピクチャのインター予測のためにILRPエントリが使用されるかどうかを指定する、SPSフラグを含む。例示的な一態様では、RPLの中のエントリが、ILRPエントリであることを指定されるとき、ビットストリームは、現在スライスを含む現在ピクチャのレイヤIDとエントリによって参照されるピクチャとの間の差分-1を指定する、第1のデルタ値を含む。例示的な一態様では、ILRPエントリは、現在ピクチャと同じPicOrderCntValを有するとともに現在ピクチャのレイヤID-第1のデルタ値-1に等しいレイヤIDを有するピクチャを参照する。例示的な一態様では、現在ピクチャの復号の開始において、各ILRPは(存在する場合)長期的参照のために使用されるものとしてマークされる。現在ピクチャの復号の終了において、各ILRPは(存在する場合)短期的参照のために使用されるものとしてマークされる。
上述の例を実行する第2の方法は次の通りである。一例では、同じプレゼンテーション時間に関連するすべてのピクチャは、1つのアクセスユニットに属する。各ピクチャは、レイヤ内POC値および相互レイヤPOC値に関連し得る。1つのCVS内のピクチャは、異なる相互レイヤPOC値を有してよい。異なるレイヤの、かつ同じアクセスユニット内のピクチャは、同じレイヤ内POC値を有してよいが、異なる相互レイヤPOC値を有してもよい。いかなるピクチャも、より高いレイヤのピクチャを参照しなくてよく、したがって、より大きい値のレイヤIDを有するピクチャを参照しなくてよい。同じレイヤのピクチャを復号するとき、復号ピクチャは、参照のために使用されないものとしてのみマークされてよい。
上述の例を実行する第3の方法は次の通りである。一例では、同じプレゼンテーション時間に関連するすべてのピクチャは、1つのアクセスユニットに属する。CVS内のピクチャは、異なるPOC値を有してよい。1つのCVS内のピクチャは、POC値のみによって識別され得る。いかなるピクチャも、より高いレイヤのピクチャを参照しなくてよく、したがって、より大きい値のレイヤIDを有するピクチャを参照しなくてよい。同じレイヤのピクチャを復号するとき、復号ピクチャは、参照のために使用されないものとしてのみマークされてよい。
上述の例を実行する第4の方法は次の通りである。各アクセスユニットは、1つのピクチャのみを含んでよい。したがって、同じプレゼンテーション時間に関連するが異なるレイヤに属するいかなる2つのピクチャも、2つの異なるアクセスユニットに属してよい。1つのCVS内のピクチャは、異なるPOC値を有してよい。1つのCVS内のピクチャは、POC値のみによって識別され得る。いかなるピクチャも、より高いレイヤのピクチャを参照しなくてよく、したがって、より大きい値のレイヤIDを有するピクチャを参照しなくてよい。現在ピクチャおよび参照ピクチャが同じレイヤに属するか否かにかかわらず、参照ピクチャは、参照のために使用されないものとしてマークされてよい。
上述の方法の第1の例示的な実装形態が以下で説明される。例示的な定義は次の通りである。ILRPは、現在ピクチャと同じアクセスユニットの中のピクチャであり、現在ピクチャのnuh_layer_idよりも小さいnuh_layer_idを有し、長期的参照のために使用されるものとしてマークされる。長期的参照ピクチャ(LTRP)は、現在ピクチャのnuh_layer_idに等しいnuh_layer_idを有し、かつ長期的参照のために使用されるものとしてマークされる、ピクチャである。参照ピクチャは、短期的参照ピクチャもしくは長期的参照ピクチャまたはレイヤ間参照ピクチャである、ピクチャである。参照ピクチャは、復号順序で後続のピクチャの復号プロセスにおいてインター予測のために使用され得るサンプルを含む。短期的参照ピクチャ(STRP:short-term reference picture)は、現在ピクチャのnuh_layer_idに等しいnuh_layer_idを有し、かつ短期的参照のために使用されるものとしてマークされる、ピクチャである。
例示的なシーケンスパラメータセットRBSPシンタックスは次の通りである。
例示的な参照ピクチャリスト構造シンタックスは次の通りである。
例示的なシーケンスパラメータセットRBSPセマンティックは次の通りである。CVSの中のいかなるコード化ピクチャのインター予測のためにもLTRPが使用されないことを指定するために、long_term_ref_pics_flagは0に等しく設定されてよい。CVSの中の1つまたは複数のコード化ピクチャのインター予測のためにLTRPが使用され得ることを指定するために、long_term_ref_pics_flagは1に等しく設定されてよい。CVSの中のいかなるコード化ピクチャのインター予測のためにもILRPが使用されないことを指定するために、inter_layer_ref_pics_flagは0に等しく設定されてよい。CVSの中の1つまたは複数のコード化ピクチャのインター予測のためにILRPが使用され得ることを指定するために、inter_layer_ref_pics_flagは1に等しく設定されてよい。
例示的な汎用スライスヘッダセマンティックは次の通りである。slice_typeは、以下の表に従ってスライスのコーディングタイプを指定する。
NalUnitTypeが、両端値を含むIDR_W_RADL~CRA_NUTという範囲の中のNalUnitTypeの値であり、かつ現在ピクチャがアクセスユニットの中の最初のピクチャであるとき、slice_typeは2に等しくすべきである。
例示的な参照ピクチャリスト構造セマンティックは次の通りである。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリがILRPエントリであることを指定するために、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリがILRPエントリでないことを指定するために、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定されてよい。存在しないとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]の値は0に等しいものと推測される。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリがSTRPエントリであることを指定するために、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリがLTRPエントリであることを指定するために、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定されてよい。inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]が0に等しく、かつst_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]が存在しないとき、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]の値は1に等しいものと推測され得る。
変数NumLtrpEntries[ listIdx ][ rplsIdx ]は次のように導出されてよい。
For ( i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ )
if( !inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] && !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] )
NumLtrpEntries[ listIdx ][ rplsIdx ]++
シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリが0以上の値を有することを指定するために、strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリが0よりも小さい値を有することを指定するために、strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定されてよい。存在しないとき、strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]の値は1に等しいものと推測され得る。
リストDeltaPocSt[ listIdx ][ rplsIdx ]は次のように導出されてよい。
for( i = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ )
if( !inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] && st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) { (7-93)
DeltaPocSt[ listIdx ][ rplsIdx ][ i ] = ( strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] ) ? abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] : 0 - abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]
rpls_entry_layer_id_delta_minus1[ listIdx ][ rplsIdx ][ i ]+1は、現在ピクチャのnuh_layer_idと第iのエントリによって参照されるピクチャとの間の差分を指定する。rpls_entry_layer_id_delta_minus1[ listIdx ][ rplsIdx ][ i ]の値は、両端値を含む0~125という範囲の中にあってよい。
コード化ピクチャのための例示的な復号プロセスは次の通りである。復号プロセスは、現在ピクチャCurrPicに対して次のように動作する。NALユニットが復号される。以下の復号プロセスは、スライスヘッダレイヤ以上の中の以下の要素からのシンタックスを使用し得る。ピクチャ順序カウントに関係する変数および関数が導出される。これはピクチャの最初のスライスに対してのみ呼び出されてよい。非瞬時復号リフレッシュ(IDR:instantaneous decoding refresh)ピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリスト0(RefPicList[ 0 ])および参照ピクチャリスト1(RefPicList[ 1 ])の導出のために、参照ピクチャリスト構成のための復号プロセスが呼び出されてよい。参照ピクチャマーキングのための復号プロセスが呼び出され、参照ピクチャは、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされてよい。これはピクチャの最初のスライスに対してのみ呼び出されてよい。現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するCRAピクチャ、または1に等しいNoIncorrectPicOutputFlagを有する漸進的ランダムアクセス(GRA:Gradual Random Access)ピクチャであるとき、利用不可能な参照ピクチャを生成するための復号プロセスが呼び出され、そうしたプロセスは、ピクチャの最初のスライスに対してのみ呼び出されてよい。PictureOutputFlagは次のように設定されてよい。次の条件のうちの1つが真である場合、PictureOutputFlagは0に等しく設定されてよい。現在ピクチャがRASLピクチャであり、かつ関連するIRAPピクチャのNoIncorrectPicOutputFlagが1に等しいとき、PictureOutputFlagは0に等しく設定されてよい。gra_enabled_flagが1に等しく、かつ現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャであるとき、PictureOutputFlagは0に等しく設定されてよい。gra_enabled_flagが1に等しく、現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャに関連し、かつ現在ピクチャのPicOrderCntValが、関連するGRAピクチャのRpPicOrderCntValよりも小さいとき、PictureOutputFlagは0に等しく設定されてよい。そうでない場合、PictureOutputFlagは1に等しく設定される。現在ピクチャのすべてのスライスが復号された後、現在の復号ピクチャは、短期的参照のために使用されるものとしてマークされ、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリは、短期的参照のために使用されるものとしてマークされる。
参照ピクチャリスト構成のための例示的な復号プロセスは次の通りである。このプロセスは、非IDRピクチャのスライスごとに復号プロセスの開始において呼び出される。参照ピクチャは、参照インデックスを通じてアドレス指定される。参照インデックスとは、参照ピクチャリストへのインデックスである。イントラコーディング(I)スライスを復号するとき、スライスデータの復号において参照ピクチャリストは使用されない。単方向インター予測(P)スライスを復号するとき、スライスデータの復号において参照ピクチャリスト0(RefPicList[ 0 ])だけが使用される。双方向インター予測(B)スライスを復号するとき、スライスデータの復号において参照ピクチャリスト0と参照ピクチャリスト1(RefPicList[ 1 ])の両方が使用される。非IDRピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]が導出される。参照ピクチャリストは、参照ピクチャのマーキングにおいて、またはスライスデータの復号において、使用される。それがピクチャの最初のスライスではない、非IDRピクチャのIスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 0 ]およびRefPicList[ 1 ]が導出されてよいが、それらの導出は、現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために必須でなくてよい。ピクチャの最初のスライスではないPスライスに対して、RefPicList[ 1 ]がビットストリーム適合検査目的のために導出されてよいが、現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために必須でなくてよい。
参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]は、次のように構成されてよい。
for( i = 0; i < 2; i++ ) {
for( j = 0, k = 0, pocBase = PicOrderCntVal; j < num_ref_entries[ i ][ RplsIdx[ i ] ]; j++) {
if( !inter_layer_ref_pic_flag[ i ][ RplsIdx[ i ] ][ j ] ) {
if( st_ref_pic_flag[ i ][ RplsIdx[ i ] ][ j ] ) {
RefPicPocList[ i ][ j ] = pocBase - DeltaPocSt[ i ][ RplsIdx[ i ] ][ j ]
if(現在ピクチャと同じnuh_layer_idおよびRefPicPocList[ i ][ j ]に等しいPicOrderCntValを有する参照ピクチャpicAがDPBの中にある)RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない" (8-5)
pocBase = RefPicPocList[ i ][ j ]
} else {
if( !delta_poc_msb_cycle_lt[ i ][ k ] ) {
if(現在ピクチャと同じnuh_layer_idを有し、かつPicOrderCntVal & ( MaxPicOrderCntLsb - 1 )がPocLsbLt[ i ][ k ]に等しい、参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
} else {
if(現在ピクチャと同じnuh_layer_idおよびFullPocLt[ i ][ k ]に等しいPicOrderCntValを有する参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
}
k++
}
} else {
refPicLayerId = nuh_layer_id - rpls_entry_layer_id_delta_minus1[ i ][ RplsIdx[ i ] ][ j ] - 1
if(refPicLayerIdに等しいnuh_layer_idおよび現在ピクチャと同じPicOrderCntValを有する参照ピクチャpicAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
}
}
}
}
0または1に等しいiごとに、RefPicList[ i ]の中の最初のNumRefIdxActive[ i ]個のエントリはRefPicList[ i ]の中のアクティブエントリとして参照され、RefPicList[ i ]の中の他のエントリはRefPicList[ i ]の中の非アクティブエントリとして参照される。特定のピクチャがRefPicList[ 0 ]の中のエントリとRefPicList[ 1 ]の中のエントリの両方によって参照されることが可能である。特定のピクチャが、RefPicList[ 0 ]の中の2つ以上のエントリによって、またはRefPicList[ 1 ]の中の2つ以上のエントリによって、参照されることも可能である。RefPicList[ 0 ]の中のアクティブエントリおよびRefPicList[ 1 ]の中のアクティブエントリは、現在ピクチャおよび復号順序で現在ピクチャに後続する1つまたは複数のピクチャのインター予測のために使用され得るすべての参照ピクチャを、一括して参照する。RefPicList[ 0 ]の中の非アクティブエントリおよびRefPicList[ 1 ]の中の非アクティブエントリは、現在ピクチャのインター予測のために使用されないが復号順序で現在ピクチャに後続する1つまたは複数のピクチャのためのインター予測において使用され得るすべての参照ピクチャを、一括して参照する。対応するピクチャがDPBの中に存在しないので、どの参照ピクチャにも等しくない、1つまたは複数のエントリがRefPicList[ 0 ]またはRefPicList[ 1 ]の中にあり得る。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 0 ]の中の各非アクティブエントリは、無視されるべきである。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリに対して、偶発的なピクチャ損失が推測されるべきである。
ビットストリーム適合のために、以下の制約が適用されるべきである。0または1に等しいiごとに、num_ref_entries[ i ][ RplsIdx[ i ] ]はNumRefIdxActive[ i ]よりも小さくすべきでない。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリによって参照されるピクチャが、DPBの中に存在すべきであり、現在ピクチャのTemporalId以下のTemporalIdを有するべきである。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各エントリによって参照されるピクチャは、現在ピクチャであるべきでない。ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のSTRPエントリ、および同じピクチャの同じスライスまたは異なるスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリは、同じピクチャを参照すべきでない。現在ピクチャのPicOrderCntValとエントリによって参照されるピクチャのPicOrderCntValとの間の差分がそれに対して224以上となるLTRPエントリが、RefPicList[ 0 ]またはRefPicList[ 1 ]の中にあるべきでない。現在ピクチャと同じnuh_layer_idを有する、RefPicList[ 0 ]の中のすべてのエントリ、および現在ピクチャと同じnuh_layer_idを有する、RefPicList[ 1 ]の中のすべてのエントリによって参照される、固有のピクチャのセットをsetOfRefPicsとする。setOfRefPicsの中のピクチャの数はsps_max_dec_pic_buffering_minus1以下とすべきであり、setOfRefPicsはピクチャのすべてのスライスに対して同じであるべきである。現在ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリによって参照されるピクチャは、現在ピクチャと同じアクセスユニットの中にあるべきである。現在ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリによって参照されるピクチャが、DPBの中に存在すべきであり、現在ピクチャのnuh_layer_idよりも小さいnuh_layer_idを有するべきである。スライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリは、アクティブエントリであるべきである。
参照ピクチャマーキングのための例示的な復号プロセスは次の通りである。このプロセスは、スライスヘッダの復号およびスライスに対する参照ピクチャリスト構成のための復号プロセスの後、ただしスライスデータの復号の前に、ピクチャ当たり1回呼び出される。このプロセスは、DPBの中の1つまたは複数の参照ピクチャが、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされる結果となり得る。DPBの中の復号ピクチャは、参照のために使用されないか、短期的参照のために使用されるか、または長期的参照のために使用されるものとして、マークされ得る。ただし、復号ピクチャは、復号プロセスの動作中の任意の所与の瞬間において、これらの3つのうちの1つとしてのみマークされてよい。これらのマーキングのうちの1つをピクチャに割り当てることは、適用可能なとき、これらのマーキングのうちの別のものを暗黙的に除去する。ピクチャが、参照のために使用されるものとしてマークされるとして言及されるとき、このことは、ピクチャが短期的参照のために使用されるかまたは長期的参照のために使用されるものとしてマークされることをまとめて指すが、その両方ではない。STRPおよびILRPは、それらのnuh_layer_idおよびPicOrderCntVal値によって識別されてよい。LTRPは、それらのnuh_layer_id値、およびそれらのPicOrderCntVal値のLog2( MaxLtPicOrderCntLsb )個の最下位ビット(LSB)によって識別されてよい。現在ピクチャがコード化レイヤビデオシーケンス開始(CLVSS:coded layer video sequence start)ピクチャである場合、もしあれば現在ピクチャと同じnuh_layer_idを有する、現在DPBの中のすべての参照ピクチャは、参照のために使用されないものとしてマークされる。そうでない場合、以下が適用される。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリごとに、参照されるピクチャが、現在ピクチャと同じnuh_layer_idを有するSTRPであるとき、ピクチャは、長期的参照のために使用されるものとしてマークされる。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のいかなるエントリによっても参照されない、DPBの中の現在ピクチャと同じnuh_layer_idを有する各参照ピクチャは、参照のために使用されないものとしてマークされる。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のILRPエントリごとに、参照されるピクチャは、長期的参照のために使用されるものとしてマークされる。
上述の方法の第2の例示的な実装形態が以下で説明される。例示的な定義は次の通りである。ILRPは、現在ピクチャと同じアクセスユニットの中のピクチャであり、現在ピクチャのnuh_layer_idよりも小さいnuh_layer_idを有し、長期的参照のために使用されるものとしてマークされる。LTRPは、現在ピクチャのnuh_layer_idに等しいnuh_layer_idを有し、かつ長期的参照のために使用されるものとしてマークされる、ピクチャである。参照ピクチャは、短期的参照ピクチャもしくは長期的参照ピクチャまたはレイヤ間参照ピクチャである、ピクチャである。参照ピクチャは、復号順序で後続のピクチャの復号プロセスにおいてインター予測のために使用され得るサンプルを含む。STRPは、現在ピクチャのnuh_layer_idに等しいnuh_layer_idを有し、かつ短期的参照のために使用されるものとしてマークされる、ピクチャである。
例示的なビデオパラメータセットシンタックスは次の通りである。
例示的なビデオパラメータセットRBSPセマンティックは次の通りである。vps_video_parameter_set_idは、他のシンタックス要素による参照のためのVPSに対する識別子を提供する。vps_max_layer_idは、ビデオパラメータセット(VPS:video parameter set)を参照する各CVSの中のnuh_layer_idの最大許容値を指定する。決定されると、元のビットストリームを生成するとき、vps_max_layer_idの値は変化しないままであることが期待される。このことは、元のビットストリームが書き直されるかまたは書き直されたビットストリームがさらに書き直される場合を含む。さもなければ、ピクチャ順序カウント値が途絶することがあり、予想外の挙動が発生することがある。代替として、代わりにSPSの中でシグナリングされsps_max_layer_idと称する、nuh_layer_idの最大許容値。
例示的な汎用スライスヘッダセマンティックは次の通りである。slice_typeは、以下の表に従ってスライスのコーディングタイプを指定する。
NalUnitTypeが、両端値を含むIDR_W_RADL~CRA_NUTという範囲の中のNalUnitTypeの値であり、かつ現在ピクチャがアクセスユニットの中の最初のピクチャであるとき、slice_typeは2に等しくすべきである。slice_pic_order_cnt_lsbは、現在ピクチャに対してMaxPicOrderCntLsbを法とするPicOrderCntValの値を指定する。slice_pic_order_cnt_lsbシンタックス要素の長さはlog2_max_pic_order_cnt_lsb_minus4+4ビットである。slice_pic_order_cnt_lsbの値は、両端値を含む0~MaxPicOrderCntLsb-1という範囲の中にあるべきである。slice_poc_lsb_lt[ i ][ j ]は、第iの参照ピクチャリストの中の第jのLTRPエントリの、MaxPicOrderCntLsbを法とするPicOrderCntValの値を指定する。slice_poc_lsb_lt[ i ][ j ]シンタックス要素の長さはlog2_max_pic_order_cnt_lsb_minus4+4ビットである。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリが非LTRPエントリ(STRPエントリまたはILRPエントリ)であることを指定するために、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリがLTRPエントリであることを指定するために、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定されてよい。存在しないとき、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]の値は1に等しいものと推測され得る。
変数NumLtrpEntries[ listIdx ][ rplsIdx ]は次のように導出されてよい。
for( i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ )
if( !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) (7-87)
NumLtrpEntries[ listIdx ][ rplsIdx ]++
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]は、第iのエントリがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の最初の非LTRPエントリであるとき、現在ピクチャのCrossLayerPoc値と第iのエントリによって参照されるピクチャのCrossLayerPoc値との間の絶対差分を指定する。abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]は、第iのエントリが非LTRPエントリであるがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の最初の非LTRPエントリでないとき、第iのエントリによって参照されるピクチャのCrossLayerPoc値とref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の前の非LTRPエントリによって参照されるピクチャのCrossLayerPoc値との間の絶対差分を指定する。abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]の値は、両端値を含む0~(215 - 1 )*( vps_max_layer_id+1)という範囲の中にあってよい。シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリが0以上の値を有することを指定するために、entry_sign_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリが0よりも小さい値を有することを指定するために、entry_sign_flag[ listIdx ][ rplsIdx ]は0に等しく設定されてよい。存在しないとき、entry_sign_flag[ i ][ j ]の値は1に等しいものと推測される。
リストDeltaPoc[ listIdx ][ rplsIdx ]は次のように導出され得る。
for( i = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ ) {
if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) { (7-88)
DeltaPoc[ listIdx ][ rplsIdx ][ i ] = ( entry_sign_flag[ listIdx ][ rplsIdx ][ i ]) ? abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] : 0 - abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]
}
}
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ i ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の中の第iのエントリによって参照されるピクチャの、MaxPicOrderCntLsbを法とするPicOrderCntValの値を指定する。rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ i ]シンタックス要素の長さはlog2_max_pic_order_cnt_lsb_minus4+4ビットである。
コード化ピクチャのための例示的な復号プロセスは次の通りである。復号プロセスは、現在ピクチャCurrPicに対して次のように動作する。NALユニットの復号は、本明細書で指定されるようなものである。以下の復号プロセスは、スライスヘッダレイヤ以上の中のシンタックス要素を使用する。ピクチャ順序カウントに関係する変数および関数が導出される。そのような導出は、ピクチャの最初のスライスに対してのみ呼び出されてよい。非IDRピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリスト0(RefPicList[ 0 ])および参照ピクチャリスト1(RefPicList[ 1 ])の導出のために、参照ピクチャリスト構成のための復号プロセスが呼び出される。参照ピクチャマーキングのための復号プロセスが呼び出される。参照ピクチャは、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされてよい。このメカニズムは、ピクチャの最初のスライスに対してのみ呼び出されてよい。現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するCRAピクチャ、または1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャであるとき、利用不可能な参照ピクチャを生成するための復号プロセスが呼び出される。このプロセスは、ピクチャの最初のスライスに対してのみ呼び出されてよい。
PictureOutputFlagは次のように設定されてよい。次の条件のうちの1つが真である場合、PictureOutputFlagは0に等しく設定される。現在ピクチャがRASLピクチャであり、かつ関連するIRAPピクチャのNoIncorrectPicOutputFlagが1に等しいとき、PictureOutputFlagは0に等しく設定される。gra_enabled_flagが1に等しく、かつ現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャであるとき、PictureOutputFlagは0に等しく設定される。gra_enabled_flagが1に等しく、現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャに関連し、かつ現在ピクチャのPicOrderCntValが、関連するGRAピクチャのRpPicOrderCntValよりも小さいとき、PictureOutputFlagは0に等しく設定される。そうでない場合、PictureOutputFlagは1に等しく設定される。現在ピクチャのすべてのスライスが復号された後、現在の復号ピクチャは、短期的参照のために使用されるものとしてマークされてよく、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリは、短期的参照のために使用されるものとしてマークされてよい。
ピクチャ順序カウントのための例示的な復号プロセスは次の通りである。このプロセスの出力は、現在ピクチャのピクチャ順序カウントであるCrossLayerPocである。各コード化ピクチャは、CrossLayerPocとして示されるピクチャ順序カウント変数に関連する。現在ピクチャがCLVSSピクチャでないとき、変数prevPicOrderCntLsbおよびprevPicOrderCntMsbは次のように導出され得る。現在ピクチャのnuh_layer_idに等しいnuh_layer_idおよび0に等しいTemporalIdを有し、かつRASLピクチャまたはRADLピクチャでない、復号順序での前のピクチャをprevTid0Picとする。変数prevPicOrderCntLsbはprevTid0Picのslice_pic_order_cnt_lsbに等しく設定されてよい。変数prevPicOrderCntMsbはprevTid0PicのPicOrderCntMsbに等しく設定されてよい。現在ピクチャの変数PicOrderCntMsbは次のように導出されてよい。現在ピクチャがCLVSSピクチャである場合、PicOrderCntMsbは0に等しく設定されてよい。そうでない場合、PicOrderCntMsbは次のように導出されてよい。
if( ( slice_pic_order_cnt_lsb < prevPicOrderCntLsb ) && ( ( prevPicOrderCntLsb - slice_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb
else if( (slice_pic_order_cnt_lsb > prevPicOrderCntLsb ) && ( ( slice_pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
else
PicOrderCntMsb = prevPicOrderCntMsb
PicOrderCntValは次のように導出され得る。
PicOrderCntVal = PicOrderCntMsb + slice_pic_order_cnt_lsb
CLVSSピクチャに対して、PicOrderCntMsbが0に等しく設定されるときから、すべてのCLVSSピクチャはslice_pic_order_cnt_lsbに等しく設定されたPicOrderCntValを有してよい。PicOrderCntValの値は、両端値を含む-231~231-1という範囲の中にあってよい。1つのCVSの中で、同じ値のnuh_layer_idを有する任意の2つのコード化ピクチャに対するPicOrderCntVal値は、同じでなくてよい。任意の特定のアクセスユニットの中のすべてのピクチャは、同じ値のPicOrderCntValを有してよい。
変数CrossLayerPocは次のように導出されてよい。
CrossLayerPoc = PicOrderCntVal * ( vps_max_layer_id + 1 ) + nuh_layer_id
関数PicOrderCnt( picX )は次のように指定されてよい。
PicOrderCnt( picX ) =ピクチャpicXのPicOrderCntVal
関数DiffPicOrderCnt( picA, picB )は次のように指定されてよい。
DiffPicOrderCnt( picA, picB ) = PicOrderCnt( picA ) -PicOrderCnt( picB )
ビットストリームは、両端値を含む-215~215-1という範囲の中にない、復号プロセスにおいて使用されるDiffPicOrderCnt( picA, picB )の値をもたらすデータを含まなくてよい。現在ピクチャをXとし、同じCVSの中の2つの他のピクチャをYおよびZとする。DiffPicOrderCnt( X, Y )とDiffPicOrderCnt( X, Z )の両方が正であるかまたはその両方が負であるとき、YおよびZは、Xからの同じ出力順序方向をなすものと見なされてよい。
参照ピクチャリスト構成のための例示的な復号プロセスは次の通りである。このプロセスは、非IDRピクチャのスライスごとに復号プロセスの開始において呼び出されてよい。参照ピクチャは、参照インデックスを通じてアドレス指定される。参照インデックスとは、参照ピクチャリストへのインデックスである。Iスライスを復号するとき、スライスデータの復号において参照ピクチャリストは使用されない。Pスライスを復号するとき、スライスデータの復号において参照ピクチャリスト0(RefPicList[ 0 ])だけが使用される。Bスライスを復号するとき、スライスデータの復号において参照ピクチャリスト0と参照ピクチャリスト1(RefPicList[ 1 ])の両方が使用される。非IDRピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]が導出される。参照ピクチャリストは、参照ピクチャのマーキングにおいて、またはスライスデータの復号において、使用され得る。それがピクチャの最初のスライスでない、非IDRピクチャのIスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 0 ]およびRefPicList[ 1 ]が導出されてよい。ただし、現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために、それらの導出は必須でなくてよい。それがピクチャの最初のスライスでないPスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 1 ]が導出されてよい。ただし、現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために、RefPicList[ 1 ]の導出は必須でなくてよい。参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]は、次のように構成されてよい。
for( i = 0; i < 2; i++ ) {
for( j = 0, k = 0, pocBase = CrossLayerPoc; j < num_ref_entries[ i ][ RplsIdx[ i ] ]; j++) {
if( st_ref_pic_flag[ i ][ RplsIdx[ i ] ][ j ] ) {
RefPicPocList[ i ][ j ] = pocBase - DeltaPoc[ i ][ RplsIdx[ i ] ][ j ]
if(RefPicPocList[ i ][ j ]に等しいCrossLayerPocを有する参照ピクチャpicAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない" (8-5)
pocBase = RefPicPocList[ i ][ j ]
} else {
if( !delta_poc_msb_cycle_lt[ i ][ k ] ) {
if(現在ピクチャと同じnuh_layer_idを有し、かつPicOrderCntVal & ( MaxPicOrderCntLsb - 1 )がPocLsbLt[ i ][ k ]に等しい、参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
} else {
if(現在ピクチャと同じnuh_layer_idおよびFullPocLt[ i ][ RplsIdx[ i ] ][ k ]に等しいPicOrderCntValを有する参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
}
k++
}
}
}
0または1に等しいiごとに、RefPicList[ i ]の中の最初のNumRefIdxActive[ i ]個のエントリはRefPicList[ i ]の中のアクティブエントリとして参照され、RefPicList[ i ]の中の他のエントリはRefPicList[ i ]の中の非アクティブエントリとして参照される。エントリによって参照されるピクチャが、現在ピクチャとは異なる値のnuh_layer_idを有するとき、参照ピクチャリストの中のエントリは、ILRPエントリとして参照されてよい。特定のピクチャがRefPicList[ 0 ]の中のエントリとRefPicList[ 1 ]の中のエントリの両方によって参照されることが可能である。特定のピクチャが、RefPicList[ 0 ]の中の2つ以上のエントリによって、またはRefPicList[ 1 ]の中の2つ以上のエントリによって、参照されることも可能である。RefPicList[ 0 ]の中のアクティブエントリおよびRefPicList[ 1 ]の中のアクティブエントリは、現在ピクチャおよび復号順序で現在ピクチャに後続する1つまたは複数のピクチャのインター予測のために使用され得るすべての参照ピクチャを、一括して参照する。RefPicList[ 0 ]の中の非アクティブエントリおよびRefPicList[ 1 ]の中の非アクティブエントリは、現在ピクチャのインター予測のために使用されないが復号順序で現在ピクチャに後続する1つまたは複数のピクチャのためのインター予測において使用され得るすべての参照ピクチャを、一括して参照する。対応するピクチャがDPBの中に存在しないので、どの参照ピクチャにも等しくない、1つまたは複数のエントリがRefPicList[ 0 ]またはRefPicList[ 1 ]の中にあり得る。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 0 ]の中の各非アクティブエントリは、無視されてよい。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリに対して、偶発的なピクチャ損失が推測され得る。
ビットストリーム適合は、以下の制約が適用されることを必要とし得る。0または1に等しいiごとに、num_ref_entries[ i ][ RplsIdx[ i ] ]はNumRefIdxActive[ i ]よりも小さくなくてよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリによって参照されるピクチャが、DPBの中に存在してよく、現在ピクチャのTemporalId以下のTemporalIdを有してよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各エントリによって参照されるピクチャは、現在ピクチャでなくてよい。ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のSTRPエントリ、および同じピクチャの同じスライスまたは異なるスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリは、同じピクチャを参照しなくてよい。現在ピクチャのPicOrderCntValとエントリによって参照されるピクチャのPicOrderCntValとの間の差分がそれに対して224以上となるLTRPエントリが、RefPicList[ 0 ]またはRefPicList[ 1 ]の中になくてよい。現在ピクチャと同じnuh_layer_idを有する、RefPicList[ 0 ]の中のすべてのエントリ、および現在ピクチャと同じnuh_layer_idを有する、RefPicList[ 1 ]の中のすべてのエントリによって参照される、固有のピクチャのセットをsetOfRefPicsとする。setOfRefPicsの中のピクチャの数は、sps_max_dec_pic_buffering_minus1以下であってよく、setOfRefPicsは、ピクチャのすべてのスライスに対して同じであってよい。現在ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリによって参照されるピクチャが、DPBの中に存在してよく、現在ピクチャと同じアクセスユニットの中にあってよい。現在ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリによって参照されるピクチャは、現在ピクチャのnuh_layer_idよりも小さいnuh_layer_idを有してよい。スライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリは、アクティブエントリであってよい。
参照ピクチャマーキングのための例示的な復号プロセスは次の通りである。このプロセスは、ピクチャ当たり1回呼び出されてよい。このことは、スライスヘッダの復号およびスライスに対する参照ピクチャリスト構成のための復号プロセスの後、ただしスライスデータの復号の前に、行われてよい。このプロセスは、DPBの中の1つまたは複数の参照ピクチャが、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされる結果となり得る。DPBの中の復号ピクチャは、参照のために使用されないか、短期的参照のために使用されるか、または長期的参照のために使用されるものとして、マークされ得る。DPBの中の復号ピクチャは、復号プロセスの動作中の任意の所与の瞬間において、これらの3つのうちの1つとしてのみマークされ得る。これらのマーキングのうちの1つをピクチャに割り当てることは、適用可能なとき、これらのマーキングのうちの別のものを暗黙的に除去する。ピクチャが、参照のために使用されるものとしてマークされるとして言及されるとき、このことは、ピクチャが短期的参照のために使用されるかまたは長期的参照のために使用される(ただし、両方ではない)ものとしてマークされることをまとめて指す。STRPは、それらのnuh_layer_idおよびPicOrderCntVal値によって識別される。LTRPは、それらのnuh_layer_id値、およびそれらのPicOrderCntVal値のLog2( MaxLtPicOrderCntLsb )個のLSBによって識別される。現在ピクチャがCLVSSピクチャである場合、現在ピクチャと同じnuh_layer_idを有する、(もしあれば)現在DPBの中のすべての参照ピクチャは、参照のために使用されないものとしてマークされてよい。そうでない場合、以下が適用される。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリごとに、参照されるピクチャが、現在ピクチャと同じnuh_layer_idを有するSTRPであるとき、参照されるピクチャは、長期的参照のために使用されるものとしてマークされる。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のいかなるエントリによっても参照されず現在ピクチャと同じnuh_layer_idを有する、DPBの中の各参照ピクチャは、参照のために使用されないものとしてマークされてよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のILRPエントリごとに、参照されるピクチャは、長期的参照のために使用されるものとしてマークされてよい。
上述の方法の第3の例示的な実装形態が以下で説明される。定義の一例は次の通りである。ILRPは、現在ピクチャと同じアクセスユニットの中のピクチャであり、現在ピクチャのnuh_layer_idよりも小さいnuh_layer_idを有し、長期的参照のために使用されるものとしてマークされる。LTRPは、現在ピクチャのnuh_layer_idに等しいnuh_layer_idを有し、かつ長期的参照のために使用されるものとしてマークされる、ピクチャである。参照ピクチャは、短期的参照ピクチャもしくは長期的参照ピクチャまたはレイヤ間参照ピクチャである、ピクチャである。参照ピクチャは、復号順序で後続のピクチャの復号プロセスにおいてインター予測のために使用され得るサンプルを含む。STRPは、現在ピクチャのnuh_layer_idに等しいnuh_layer_idを有し、かつ短期的参照のために使用されるものとしてマークされる、ピクチャである。
例示的な汎用スライスヘッダセマンティックは次の通りである。slice_typeは、以下の表に従ってスライスのコーディングタイプを指定し得る。
NalUnitTypeが、両端値を含むIDR_W_RADL~CRA_NUTという範囲の中のNalUnitTypeの値であり、かつ現在ピクチャがアクセスユニットの中の最初のピクチャであるとき、Slice_typeは2に等しく設定されてよい。
コード化ピクチャのための例示的な復号プロセスは次の通りである。復号プロセスは、現在ピクチャCurrPicに対して次のように動作する。NALユニットの復号は、本明細書で指定されるようなものである。以下の復号プロセスは、スライスヘッダレイヤ以上の中のシンタックス要素を使用する。ピクチャ順序カウントに関係する変数および関数が導出される。そのような導出は、ピクチャの最初のスライスに対してのみ呼び出されてよい。非IDRピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリスト0(RefPicList[ 0 ])および参照ピクチャリスト1(RefPicList[ 1 ])の導出のために、参照ピクチャリスト構成のための復号プロセスが呼び出される。参照ピクチャマーキングのための復号プロセスが呼び出される。参照ピクチャは、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされてよい。このメカニズムは、ピクチャの最初のスライスに対してのみ呼び出されてよい。現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するCRAピクチャ、または1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャであるとき、利用不可能な参照ピクチャを生成するための復号プロセスが呼び出される。このプロセスは、ピクチャの最初のスライスに対してのみ呼び出されてよい。
PictureOutputFlagは次のように設定されてよい。次の条件のうちの1つが真である場合、PictureOutputFlagは0に等しく設定される。現在ピクチャがRASLピクチャであり、かつ関連するIRAPピクチャのNoIncorrectPicOutputFlagが1に等しいとき、PictureOutputFlagは0に等しく設定される。gra_enabled_flagが1に等しく、かつ現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャであるとき、PictureOutputFlagは0に等しく設定される。gra_enabled_flagが1に等しく、現在ピクチャが、1に等しいNoIncorrectPicOutputFlagを有するGRAピクチャに関連し、かつ現在ピクチャのPicOrderCntValが、関連するGRAピクチャのRpPicOrderCntValよりも小さいとき、PictureOutputFlagは0に等しく設定される。そうでない場合、PictureOutputFlagは1に等しく設定される。現在ピクチャのすべてのスライスが復号された後、現在の復号ピクチャは、短期的参照のために使用されるものとしてマークされてよく、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリは、短期的参照のために使用されるものとしてマークされてよい。
ピクチャ順序カウントのための例示的な復号プロセスは次の通りである。このプロセスの出力は、現在ピクチャのピクチャ順序カウントであるPicOrderCntValである。各コード化ピクチャは、PicOrderCntValとして示されるピクチャ順序カウント変数に関連し得る。現在ピクチャが、復号順序でアクセスユニットの中の最初のピクチャであるCLVSSピクチャでないとき、変数prevPicOrderCntLsbおよびprevPicOrderCntMsbは次のように導出されてよい。現在ピクチャのnuh_layer_id以下のnuh_layer_idおよび0に等しいTemporalIdを有し、かつRASLピクチャまたはRADLピクチャでない、復号順序での前のピクチャをprevTid0Picとする。変数prevPicOrderCntLsbはprevTid0Picのslice_pic_order_cnt_lsbに等しく設定されてよい。変数prevPicOrderCntMsbはprevTid0PicのPicOrderCntMsbに等しく設定されてよい。現在ピクチャの変数PicOrderCntMsbは次のように導出されてよい。現在ピクチャが、復号順序でアクセスユニットの中の最初のピクチャであるCLVSSピクチャである場合、PicOrderCntMsbは0に等しく設定されてよい。そうでない場合、PicOrderCntMsbは次のように導出される。
if( ( slice_pic_order_cnt_lsb < prevPicOrderCntLsb ) && ( ( prevPicOrderCntLsb - slice_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb
else if( (slice_pic_order_cnt_lsb > prevPicOrderCntLsb ) && ( ( slice_pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
else
PicOrderCntMsb = prevPicOrderCntMsb
PicOrderCntValは次のように導出されてよい。
PicOrderCntVal = PicOrderCntMsb + slice_pic_order_cnt_lsb
PicOrderCntMsbが0に等しく設定されてから、復号順序でアクセスユニットの中の最初のピクチャである各CLVSSピクチャは、slice_pic_order_cnt_lsbに等しく設定されたPicOrderCntValを有してよい。PicOrderCntValの値は、両端値を含む-231~231-1という範囲の中にあってよい。1つのCVSの中で、任意の2つのコード化ピクチャに対するPicOrderCntVal値は同じでなくてよい。関数PicOrderCnt( picX )は次のように指定されてよい。
PicOrderCnt( picX ) =ピクチャpicXのPicOrderCntVal
関数DiffPicOrderCnt( picA, picB )は次のように指定されてよい。
DiffPicOrderCnt( picA, picB ) = PicOrderCnt( picA ) -PicOrderCnt( picB )
ビットストリームは、両端値を含む-215~215-1という範囲の中にない、復号プロセスにおいて使用されるDiffPicOrderCnt( picA, picB )の値をもたらすデータを含まなくてよい。現在ピクチャをXとし、同じCVSの中の2つの他のピクチャをYおよびZとする。DiffPicOrderCnt( X, Y )とDiffPicOrderCnt( X, Z )の両方が正であるかまたはその両方が負であるとき、YおよびZは、Xからの同じ出力順序方向をなすものと見なされてよい。
参照ピクチャリスト構成のための例示的な復号プロセスは次の通りである。このプロセスは、非IDRピクチャのスライスごとに復号プロセスの開始において呼び出されてよい。参照ピクチャは、参照インデックスを通じてアドレス指定される。参照インデックスとは、参照ピクチャリストへのインデックスである。Iスライスを復号するとき、スライスデータの復号において参照ピクチャリストは使用されない。Pスライスを復号するとき、スライスデータの復号において参照ピクチャリスト0(RefPicList[ 0 ])だけが使用される。Bスライスを復号するとき、スライスデータの復号において参照ピクチャリスト0と参照ピクチャリスト1(RefPicList[ 1 ])の両方が使用される。非IDRピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]が導出される。参照ピクチャリストは、参照ピクチャのマーキングにおいて、またはスライスデータの復号において、使用される。それがピクチャの最初のスライスでない、非IDRピクチャのIスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 0 ]およびRefPicList[ 1 ]が導出されてよい。現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために、それらの導出は必須でない。それがピクチャの最初のスライスでないPスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 1 ]が導出されてよい。ただし、現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために、そのような導出は必須でない。参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]は、次のように構成されてよい。
for( i = 0; i < 2; i++ ) {
for( j = 0, k = 0, pocBase = PicOrderCntVal; j < num_ref_entries[ i ][ RplsIdx[ i ] ]; j++) {
if( st_ref_pic_flag[ i ][ RplsIdx[ i ] ][ j ] ) {
RefPicPocList[ i ][ j ] = pocBase - DeltaPocSt[ i ][ RplsIdx[ i ] ][ j ]
if(RefPicPocList[ i ][ j ]に等しいPicOrderCntValを有する参照ピクチャpicAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない" (8-5)
pocBase = RefPicPocList[ i ][ j ]
} else {
if( !delta_poc_msb_cycle_lt[ i ][ k ] ) {
if(PicOrderCntVal & ( MaxPicOrderCntLsb - 1 )がPocLsbLt[ i ][ k ]に等しい参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
} else {
if(FullPocLt[ i ][ k ]に等しいPicOrderCntValを有する参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
}
k++
}
}
}
0または1に等しいiごとに、RefPicList[ i ]の中の最初のNumRefIdxActive[ i ]個のエントリはRefPicList[ i ]の中のアクティブエントリとして参照され、RefPicList[ i ]の中の他のエントリはRefPicList[ i ]の中の非アクティブエントリとして参照される。エントリによって参照されるピクチャが、現在ピクチャとは異なる値のnuh_layer_idを有するとき、参照ピクチャリストの中のエントリは、ILRPエントリとして参照されてよい。特定のピクチャがRefPicList[ 0 ]の中のエントリとRefPicList[ 1 ]の中のエントリの両方によって参照されることが可能である。特定のピクチャが、RefPicList[ 0 ]の中の2つ以上のエントリによって、またはRefPicList[ 1 ]の中の2つ以上のエントリによって、参照されることも可能である。RefPicList[ 0 ]の中のアクティブエントリおよびRefPicList[ 1 ]の中のアクティブエントリは、現在ピクチャおよび復号順序で現在ピクチャに後続する1つまたは複数のピクチャのインター予測のために使用され得るすべての参照ピクチャを、一括して参照してよい。RefPicList[ 0 ]の中の非アクティブエントリおよびRefPicList[ 1 ]の中の非アクティブエントリは、現在ピクチャのインター予測のために使用されないが復号順序で現在ピクチャに後続する1つまたは複数のピクチャのためのインター予測において使用され得るすべての参照ピクチャを、一括して参照してよい。対応するピクチャがDPBの中に存在しないので、どの参照ピクチャにも等しくない、1つまたは複数のエントリがRefPicList[ 0 ]またはRefPicList[ 1 ]の中にあり得る。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 0 ]の中の各非アクティブエントリは、無視されてよい。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリに対して、偶発的なピクチャ損失が推測され得る。
ビットストリーム適合に対して以下の制約が適用されてよい。0または1に等しいiごとに、num_ref_entries[ i ][ RplsIdx[ i ] ]はNumRefIdxActive[ i ]よりも小さくなくてよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリによって参照されるピクチャが、DPBの中に存在してよく、現在ピクチャのTemporalId以下のTemporalIdを有してよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各エントリによって参照されるピクチャは、現在ピクチャでなくてよい。ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のSTRPエントリ、および同じピクチャの同じスライスまたは異なるスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリは、同じピクチャを参照しなくてよい。現在ピクチャのPicOrderCntValとエントリによって参照されるピクチャのPicOrderCntValとの間の差分がそれに対して224以上となるLTRPエントリが、RefPicList[ 0 ]またはRefPicList[ 1 ]の中になくてよい。現在ピクチャと同じnuh_layer_idを有する、RefPicList[ 0 ]の中のすべてのエントリ、および現在ピクチャと同じnuh_layer_idを有する、RefPicList[ 1 ]の中のすべてのエントリによって参照される、固有のピクチャのセットをsetOfRefPicsとする。setOfRefPicsの中のピクチャの数は、sps_max_dec_pic_buffering_minus1以下であってよく、setOfRefPicsは、ピクチャのすべてのスライスに対して同じであってよい。現在ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリによって参照されるピクチャは、現在ピクチャと同じアクセスユニットの中にあってよい。現在ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリによって参照されるピクチャが、DPBの中に存在してよく、現在ピクチャのnuh_layer_idよりも小さいnuh_layer_idを有してよい。スライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中の各ILRPエントリは、アクティブエントリであってよい。
参照ピクチャマーキングのための例示的な復号プロセスは次の通りである。このプロセスは、スライスヘッダの復号およびスライスに対する参照ピクチャリスト構成のための復号プロセスの後、ピクチャ当たり1回呼び出されてよい。プロセスはまた、スライスデータの復号の前に呼び出されてよい。このプロセスは、DPBの中の1つまたは複数の参照ピクチャが、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされる結果となり得る。DPBの中の復号ピクチャは、参照のために使用されないか、短期的参照のために使用されるか、または長期的参照のために使用されるものとして、マークされ得る。DPBの中の復号ピクチャは、復号プロセスの動作中の任意の所与の瞬間において、これらの3つのうちの1つとしてのみマークされ得る。これらのマーキングのうちの1つをピクチャに割り当てることは、適用可能なとき、これらのマーキングのうちの別のものを暗黙的に除去する。ピクチャが、参照のために使用されるものとしてマークされるとして言及されるとき、このことは、ピクチャが短期的参照のために使用されるかまたは長期的参照のために使用される(ただし、両方ではない)ものとしてマークされることをまとめて指す。STRPおよびILRPは、それらのnuh_layer_idおよびPicOrderCntVal値によって識別されてよい。LTRPは、それらのnuh_layer_id値、およびそれらのPicOrderCntVal値のLog2( MaxLtPicOrderCntLsb )個のLSBによって識別されてよい。現在ピクチャがCLVSSピクチャである場合、現在ピクチャと同じnuh_layer_idを有する、(もしあれば)現在DPBの中のすべての参照ピクチャは、参照のために使用されないものとしてマークされてよい。そうでない場合、以下が適用される。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリごとに、参照されるピクチャが、現在ピクチャと同じnuh_layer_idを有するSTRPであるとき、ピクチャは、長期的参照のために使用されるものとしてマークされる。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のいかなるエントリによっても参照されない、DPBの中の現在ピクチャと同じnuh_layer_idを有する各参照ピクチャは、参照のために使用されないものとしてマークされてよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のILRPエントリごとに、参照されるピクチャは、長期的参照のために使用されるものとしてマークされてよい。
上述の方法の第4の例示的な実装形態が以下で説明される。ピクチャ順序カウントのための例示的な復号プロセスは次の通りである。このプロセスの出力は、現在ピクチャのピクチャ順序カウントであるPicOrderCntValである。各コード化ピクチャは、PicOrderCntValとして示されるピクチャ順序カウント変数に関連する。現在ピクチャがCLVSSピクチャでないとき、変数prevPicOrderCntLsbおよびprevPicOrderCntMsbは次のように導出されてよい。現在ピクチャのnuh_layer_id以下のnuh_layer_idおよび0に等しいTemporalIdを有し、かつRASLピクチャまたはRADLピクチャでない、復号順序での前のピクチャをprevTid0Picとする。変数prevPicOrderCntLsbはprevTid0Picのslice_pic_order_cnt_lsbに等しく設定されてよい。変数prevPicOrderCntMsbはprevTid0PicのPicOrderCntMsbに等しく設定されてよい。現在ピクチャの変数PicOrderCntMsbは次のように導出されてよい。現在ピクチャがCLVSSピクチャである場合、PicOrderCntMsbは0に等しく設定されてよい。そうでない場合、PicOrderCntMsbは次のように導出されてよい。
if( ( slice_pic_order_cnt_lsb < prevPicOrderCntLsb ) && ( ( prevPicOrderCntLsb - slice_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb
else if( (slice_pic_order_cnt_lsb > prevPicOrderCntLsb ) && ( ( slice_pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb / 2 ) ) )
PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb
else
PicOrderCntMsb = prevPicOrderCntMsb
PicOrderCntValは次のように導出されてよい。
PicOrderCntVal = PicOrderCntMsb + slice_pic_order_cnt_lsb
CLVSSピクチャに対して、PicOrderCntMsbが0に等しく設定されてから、すべてのCLVSSピクチャはslice_pic_order_cnt_lsbに等しいPicOrderCntValを有してよい。PicOrderCntValの値は、両端値を含む-231~231-1という範囲の中にあってよい。1つのCVSの中で、任意の2つのコード化ピクチャに対するPicOrderCntVal値は同じでなくてよい。関数PicOrderCnt( picX )は次のように指定されてよい。
PicOrderCnt( picX ) =ピクチャpicXのPicOrderCntVal
関数DiffPicOrderCnt( picA, picB )は次のように指定されてよい。
DiffPicOrderCnt( picA, picB ) = PicOrderCnt( picA ) -PicOrderCnt( picB )
ビットストリームは、両端値を含む-215~215-1という範囲の中にない、復号プロセスにおいて使用されるDiffPicOrderCnt( picA, picB )の値をもたらすデータを含まなくてよい。現在ピクチャをXとし、同じCVSの中の2つの他のピクチャをYおよびZとする。DiffPicOrderCnt(X, Y)とDiffPicOrderCnt( X, Z )の両方が正であるかまたはその両方が負であるとき、YおよびZは、Xからの同じ出力順序方向をなすものと見なされる。
参照ピクチャリスト構成のための例示的な復号プロセスは次の通りである。このプロセスは、非IDRピクチャのスライスごとに復号プロセスの開始において呼び出されてよい。参照ピクチャは、参照インデックスを通じてアドレス指定される。参照インデックスとは、参照ピクチャリストへのインデックスである。Iスライスを復号するとき、スライスデータの復号において参照ピクチャリストは使用されない。Pスライスを復号するとき、スライスデータの復号において参照ピクチャリスト0(RefPicList[ 0 ])だけが使用される。Bスライスを復号するとき、スライスデータの復号において参照ピクチャリスト0と参照ピクチャリスト1(RefPicList[ 1 ])の両方が使用される。非IDRピクチャのスライスごとに復号プロセスの開始において、参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]が導出されてよい。参照ピクチャリストは、参照ピクチャのマーキングにおいて、またはスライスデータの復号において、使用され得る。それがピクチャの最初のスライスでない、非IDRピクチャのIスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 0 ]およびRefPicList[ 1 ]が導出されてよい。現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために、そのような導出は必須でなくてよい。ピクチャの最初のスライスでないPスライスに対して、ビットストリーム適合検査目的のためにRefPicList[ 1 ]が導出されてよい。ただし、現在ピクチャまたは復号順序で現在ピクチャに後続するピクチャの復号のために、そのような導出は必須でなくてよい。
参照ピクチャリストRefPicList[ 0 ]およびRefPicList[ 1 ]は、次のように構成されてよい。
for( i = 0; i < 2; i++ ) {
for( j = 0, k = 0, pocBase = PicOrderCntVal; j < num_ref_entries[ i ][ RplsIdx[ i ] ]; j++) {
if( st_ref_pic_flag[ i ][ RplsIdx[ i ] ][ j ] ) {
RefPicPocList[ i ][ j ] = pocBase - DeltaPocSt[ i ][ RplsIdx[ i ] ][ j ]
if(RefPicPocList[ i ][ j ]に等しいPicOrderCntValを有する参照ピクチャpicAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない" (8-5)
pocBase = RefPicPocList[ i ][ j ]
} else {
if( !delta_poc_msb_cycle_lt[ i ][ k ] ) {
if(PicOrderCntVal & ( MaxPicOrderCntLsb - 1 )がPocLsbLt[ i ][ k ]に等しい参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
} else {
if(FullPocLt[ i ][ k ]に等しいPicOrderCntValを有する参照picAがDPBの中にある)
RefPicList[ i ][ j ] = picA
else
RefPicList[ i ][ j ] = "参照ピクチャがない"
}
k++
}
}
}
0または1に等しいiごとに、RefPicList[ i ]の中の最初のNumRefIdxActive[ i ]個のエントリはRefPicList[ i ]の中のアクティブエントリとして参照され、RefPicList[ i ]の中の他のエントリはRefPicList[ i ]の中の非アクティブエントリとして参照される。特定のピクチャがRefPicList[ 0 ]の中のエントリとRefPicList[ 1 ]の中のエントリの両方によって参照されることが可能である。特定のピクチャが、RefPicList[ 0 ]の中の2つ以上のエントリによって、またはRefPicList[ 1 ]の中の2つ以上のエントリによって、参照されることも可能である。RefPicList[ 0 ]の中のアクティブエントリおよびRefPicList[ 1 ]の中のアクティブエントリは、現在ピクチャおよび復号順序で現在ピクチャに後続する1つまたは複数のピクチャのインター予測のために使用され得るすべての参照ピクチャを、一括して参照してよい。RefPicList[ 0 ]の中の非アクティブエントリおよびRefPicList[ 1 ]の中の非アクティブエントリは、現在ピクチャのインター予測のために使用されないが復号順序で現在ピクチャに後続する1つまたは複数のピクチャのためのインター予測において使用され得るすべての参照ピクチャを、一括して参照してよい。対応するピクチャがDPBの中に存在しないので、どの参照ピクチャにも等しくない、1つまたは複数のエントリがRefPicList[ 0 ]またはRefPicList[ 1 ]の中にあり得る。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 0 ]の中の各非アクティブエントリは、無視されてよい。どの参照ピクチャにも等しくない、RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリに対して、偶発的なピクチャ損失が推測され得る。
ビットストリーム適合は、以下の制約が適用されることを必要とし得る。0または1に等しいiごとに、num_ref_entries[ i ][ RplsIdx[ i ] ]はNumRefIdxActive[ i ]よりも小さくなくてよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各アクティブエントリによって参照されるピクチャが、DPBの中に存在してよく、現在ピクチャのTemporalId以下のTemporalIdを有してよい。RefPicList[ 0 ]またはRefPicList[ 1 ]の中の各エントリによって参照されるピクチャは、現在ピクチャでなくてよい。ピクチャのスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のSTRPエントリ、および同じピクチャの同じスライスまたは異なるスライスのRefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリは、同じピクチャを参照しなくてよい。現在ピクチャのPicOrderCntValとエントリによって参照されるピクチャのPicOrderCntValとの間の差分がそれに対して224以上となるLTRPエントリが、RefPicList[ 0 ]またはRefPicList[ 1 ]の中になくてよい。RefPicList[ 0 ]の中のすべてのエントリおよびRefPicList[ 1 ]の中のすべてのエントリによって参照される固有のピクチャのセットをsetOfRefPicsとする。setOfRefPicsの中のピクチャの数は、sps_max_dec_pic_buffering_minus1以下であってよく、setOfRefPicsは、ピクチャのすべてのスライスに対して同じであってよい。RefPicList[ 0 ]またはRefPicList[ 1 ] ]の中の各アクティブエントリによって参照されるピクチャが、DPBの中に存在してよく、現在ピクチャのnuh_layer_id以下のnuh_layer_idを有してよい。
参照ピクチャマーキングのための例示的な復号プロセスは次の通りである。このプロセスは、スライスヘッダの復号およびスライスに対する参照ピクチャリスト構成のための復号プロセスの後、ピクチャ当たり1回呼び出されてよい。プロセスは、スライスデータの復号の前に呼び出されてよい。このプロセスは、DPBの中の1つまたは複数の参照ピクチャが、参照のために使用されないかまたは長期的参照のために使用されるものとしてマークされる結果となり得る。DPBの中の復号ピクチャは、参照のために使用されないか、短期的参照のために使用されるか、または長期的参照のために使用されるものとして、マークされ得る。DPBの中の復号ピクチャは、復号プロセスの動作中の任意の所与の瞬間において、これらの3つのうちの1つとしてのみマークされ得る。これらのマーキングのうちの1つをピクチャに割り当てることは、適用可能なとき、これらのマーキングのうちの別のものを暗黙的に除去する。ピクチャが、参照のために使用されるものとしてマークされるとして言及されるとき、このことは、ピクチャが短期的参照のために使用されるかまたは長期的参照のために使用される(ただし、両方ではない)ものとしてマークされることをまとめて指す。STRPは、それらのPicOrderCntVal値によって識別されてよい。LTRPは、それらのPicOrderCntVal値のLog2( MaxLtPicOrderCntLsb )個のLSBによって識別されてよい。現在ピクチャがCLVSSピクチャである場合、(もしあれば)現在DPBの中のすべての参照ピクチャは、参照のために使用されないものとしてマークされてよい。そうでない場合、以下が適用される。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のLTRPエントリごとに、参照されるピクチャがSTRPであるとき、参照されるピクチャは、長期的参照のために使用されるものとしてマークされる。RefPicList[ 0 ]またはRefPicList[ 1 ]の中のいかなるエントリによっても参照されない、DPBの中の各参照ピクチャは、参照のために使用されないものとしてマークされる。
図10は、例示的なビデオコーディングデバイス1000の概略図である。ビデオコーディングデバイス1000は、本明細書で説明するような、開示する例/実施形態を実施するのに適している。ビデオコーディングデバイス1000は、ダウンストリームポート1020、アップストリームポート1050、ならびに/またはネットワークを介してアップストリームおよび/もしくはダウンストリームへデータを通信するための送信機および/もしくは受信機を含むトランシーバユニット(Tx/Rx)1010を備える。ビデオコーディングデバイス1000はまた、データを処理するための論理ユニットおよび/または中央処理ユニット(CPU)を含むプロセッサ1030、ならびにデータを記憶するためのメモリ1032を含む。ビデオコーディングデバイス1000はまた、電気通信ネットワーク、光通信ネットワーク、またはワイヤレス通信ネットワークを介したデータの通信のための、アップストリームポート1050および/またはダウンストリームポート1020に結合された電気構成要素、光電気(OE)構成要素、電気光(EO)構成要素、および/またはワイヤレス通信構成要素を備えてよい。ビデオコーディングデバイス1000はまた、ユーザとの間でデータを通信するための入力および/または出力(I/O)デバイス1060を含んでよい。I/Oデバイス1060は、ビデオデータを表示するためのディスプレイ、オーディオデータを出力するためのスピーカーなどの、出力デバイスを含んでよい。I/Oデバイス1060はまた、キーボード、マウス、トラックボールなどの、入力デバイス、および/またはそのような出力デバイスと相互作用するための対応するインターフェースを含んでよい。
プロセッサ1030は、ハードウェアおよびソフトウェアによって実装される。プロセッサ1030は、1つまたは複数のCPUチップ、コア(たとえば、マルチコアプロセッサ)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、およびデジタル信号プロセッサ(DSP)として実装され得る。プロセッサ1030は、ダウンストリームポート1020、Tx/Rx1010、アップストリームポート1050、およびメモリ1032と通信している。プロセッサ1030は、コーディングモジュール1014を備える。コーディングモジュール1014は、方法100、1100、および/または1200などの、本明細書で説明される開示する実施形態を実施し、そうした方法は、RPL構造800、ならびに単方向インター予測500、双方向インター予測600、および/またはレイヤベース予測700に従ってコーディングされ得るピクチャを含む、ビットストリーム900を採用し得る。コーディングモジュール1014はまた、本明細書で説明する任意の他の方法/メカニズムを実施し得る。さらに、コーディングモジュール1014は、コーデックシステム200、エンコーダ300、および/またはデコーダ400を実施し得る。たとえば、コーディングモジュール1014は、上記で説明したようにレイヤ間予測をサポートするように参照ピクチャを管理するために、参照ピクチャ構造の中でILRPフラグおよび/またはILRPレイヤインジケータをコーディングするために採用され得る。したがって、コーディングモジュール1014は、ビデオデータをコーディングするとき、ビデオコーディングデバイス1000に追加の機能性および/またはコーディング効率を提供させる。したがって、コーディングモジュール1014は、ビデオコーディングデバイス1000の機能性を改善し、かつビデオコーディング技術に特有の問題に対処する。さらに、コーディングモジュール1014は、異なる状態へのビデオコーディングデバイス1000の変換に影響を及ぼす。代替として、コーディングモジュール1014は、(たとえば、非一時的媒体上に記憶されるコンピュータプログラム製品として)メモリ1032の中に記憶されるとともにプロセッサ1030によって実行される命令として実装され得る。
メモリ1032は、ディスク、テープドライブ、ソリッドステートドライブ、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、フラッシュメモリ、3元連想メモリ(TCAM)、スタティックランダムアクセスメモリ(SRAM)などの、1つまたは複数のメモリタイプを備える。メモリ1032は、プログラムが実行のために選択されるときにそのようなプログラムを記憶するための、またプログラム実行中に読み取られる命令およびデータを記憶するための、オーバーフローデータ記憶デバイスとして使用され得る。
図11は、レイヤ間予測に従ってビデオシーケンスをビットストリーム900などのビットストリームの中に符号化する例示的な方法1100のフローチャートである。方法1100は、RPL構造800を採用することによる単方向インター予測500、双方向インター予測600、および/またはレイヤベース予測700に従ってピクチャを符号化するための方法100を実行するとき、コーデックシステム200、エンコーダ300、および/またはビデオコーディングデバイス1000などのエンコーダによって採用され得る。
エンコーダが、複数のピクチャを含むビデオシーケンスを受信し、たとえば、ユーザ入力に基づいて、そのビデオシーケンスをビットストリームの中に符号化すべきと決定すると、方法1100が開始してよい。ステップ1101において、エンコーダは、現在ピクチャをビットストリームの中に符号化する。たとえば、現在ピクチャは、レイヤ間参照ピクチャに基づくレイヤ間予測に従って符号化されてよい。たとえば、そのようなレイヤ間予測は、レイヤ間予測721に従って実行されてよい。上記で説明したように、レイヤ間参照ピクチャは、現在ピクチャと同じAUの中にあってよい。したがって、レイヤ間参照ピクチャは、現在ピクチャと同じPOCを含んでよい。さらに、レイヤ間参照ピクチャは、現在ピクチャとは異なるレイヤの中に配置される。たとえば、レイヤ間参照ピクチャは、現在ピクチャのレイヤよりも低いレイヤに関連し得る。したがって、レイヤ間参照ピクチャは、現在ピクチャのレイヤIDよりも低いレイヤIDに関連し得る。
ステップ1103において、エンコーダは、RPL構造800などの参照ピクチャリスト構造をビットストリームの中に符号化することができる。参照ピクチャリスト構造は、複数の参照ピクチャに対する複数のエントリを備える。そのようなエントリは、現在ピクチャに関連するエントリを含む。エントリは、レイヤ間参照ピクチャを示す。たとえば、参照ピクチャリスト構造は、ref_pic_list_struct( listIdx, rplsIdx )として示されてよく、ここで、listIdxは参照ピクチャリストを識別し、rplsIdxは参照ピクチャリストの中のエントリを識別し、ref_pic_list_structは、listIdxおよびrplsIdxに基づいてエントリを戻すシンタックス構造である。
ステップ1105において、エンコーダは、レイヤ間参照ピクチャフラグをビットストリームの中に符号化することができる。レイヤ間参照ピクチャフラグは、現在ピクチャに関連するエントリがILRPエントリであることを示す。たとえば、レイヤ間参照ピクチャフラグは、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]として示されてよい。具体的には、ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリがILRPエントリであるとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。さらに、ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリがILRPエントリでないとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定されてよい。たとえば、ref_pic_list_struct( listIdx, rplsIdx )およびinter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、SPSの中でビットストリームの中に符号化されてよい。別の例では、ref_pic_list_struct( listIdx, rplsIdx )およびinter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、スライスヘッダおよび/またはピクチャヘッダなどの現在ピクチャに関連するヘッダの中で、ビットストリームの中に符号化されてよい。
ステップ1107において、エンコーダは、ILRPレイヤインジケータをビットストリームの中に符号化することができる。ILRPレイヤインジケータは、レイヤ間参照ピクチャのレイヤを示す。たとえば、ILRPレイヤインジケータは、レイヤ間参照ピクチャフラグによって示されるようなレイヤ間参照ピクチャに関連する参照ピクチャリスト構造のエントリごとに、1つまたは複数のレイヤを示すことができる。
ステップ1109において、エンコーダは、たとえば、要求時の通信のために、デコーダに向かう通信のためにビットストリームを記憶することができる。
図12は、レイヤ間予測を採用するときにビットストリーム900などのビットストリームからビデオシーケンスを復号する例示的な方法のフローチャートである。方法1200は、RPL構造800を採用することによる単方向インター予測500、双方向インター予測600、および/またはレイヤベース予測700に従ってピクチャを復号するための方法100を実行するとき、コーデックシステム200、デコーダ400、および/またはビデオコーディングデバイス1000などのデコーダによって採用され得る。
たとえば、方法1100の結果として、デコーダが、ビデオシーケンスを表すコード化データのビットストリームを受信し始めると、方法1200が開始してよい。ステップ1201において、デコーダはビットストリームを受信する。ビットストリームは、現在ピクチャ、参照ピクチャリスト構造、レイヤ間参照ピクチャフラグ、および/またはILRPレイヤインジケータを備えてよい。たとえば、参照ピクチャリスト構造は、レイヤ間参照ピクチャフラグおよび/またはILRPレイヤインジケータを備えてよい。
ステップ1203において、デコーダは、現在ピクチャに関連する、参照ピクチャリスト構造の中のエントリが、ILRPエントリであることを、レイヤ間参照ピクチャフラグに基づいて決定することができる。たとえば、参照ピクチャリスト構造は、複数の参照ピクチャに対する複数のエントリを備える。そのようなエントリは、現在ピクチャに関連するエントリを含む。エントリは参照ピクチャを示す。たとえば、参照ピクチャリスト構造は、ref_pic_list_struct( listIdx, rplsIdx )として示されてよく、ここで、listIdxは参照ピクチャリストを識別し、rplsIdxは参照ピクチャリストの中のエントリを識別し、ref_pic_list_structは、listIdxおよびrplsIdxに基づいてエントリを戻すシンタックス構造である。さらに、レイヤ間参照ピクチャフラグは、現在ピクチャに関連するエントリがILRPエントリであるかどうかを示す。たとえば、レイヤ間参照ピクチャフラグは、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]として示されてよい。具体的には、ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリがILRPエントリであるとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は1に等しく設定されてよい。さらに、ref_pic_list_struct( listIdx, rplsIdx )の中の第iのエントリがILRPエントリでないとき、inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は0に等しく設定されてよい。たとえば、ref_pic_list_struct( listIdx, rplsIdx )およびinter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、SPSの中でビットストリームの中に符号化されてよい。別の例では、ref_pic_list_struct( listIdx, rplsIdx )およびinter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、スライスヘッダおよび/またはピクチャヘッダなどの現在ピクチャに関連するヘッダの中で、ビットストリームの中に符号化されてよい。
ステップ1205において、デコーダは、エントリがILRPエントリであるとき、ILRPレイヤインジケータに基づいてレイヤ間参照ピクチャのレイヤを決定してよい。たとえば、ILRPレイヤインジケータは、レイヤ間参照ピクチャフラグによって示されるようなレイヤ間参照ピクチャに関連する参照ピクチャリスト構造のエントリごとに、1つまたは複数のレイヤを示すことができる。たとえば、レイヤ間参照ピクチャは、現在ピクチャと同じAUの中に含まれてよい。したがって、レイヤ間参照ピクチャは、現在ピクチャと同じPOCを含んでよい。さらに、レイヤ間参照ピクチャは、現在ピクチャとは異なるレイヤの中に配置される。たとえば、レイヤ間参照ピクチャは、現在ピクチャのレイヤよりも低いレイヤに関連し得る。したがって、レイヤ間参照ピクチャは、現在ピクチャのレイヤIDよりも低いレイヤIDに関連し得る。
ステップ1207において、デコーダは、エントリがILRPエントリであるとき、ILRPレイヤインジケータによって示されるレベルにおいて、参照ピクチャリスト構造の中のエントリによって示されるレイヤ間参照ピクチャに基づくレイヤ間予測に従って、現在ピクチャを復号することができる。
ステップ1209において、デコーダは、エントリがILRPエントリでないとき、参照ピクチャリスト構造の中のエントリによって示されるレイヤ内参照ピクチャに基づくレイヤ内予測に従って、現在ピクチャを復号することができる。レイヤ内参照ピクチャは、単一レイヤコンテキストでは単に参照ピクチャとして参照される。さらに、レイヤ内予測は、コンテキストに応じてイントラ予測および/または単一レイヤインター予測を含んでよい。参照ピクチャが採用されるとき、レイヤ内予測は単一レイヤインター予測を示す。
ステップ1211において、デコーダは、復号ビデオシーケンスの一部としての表示のために、復号/再構成された現在ピクチャを転送する。
図13は、レイヤ間予測を採用するときにビットストリーム900などのビットストリームの中で画像のビデオシーケンスをコーディングするための例示的なシステム1300の概略図である。システム1300は、コーデックシステム200、エンコーダ300、デコーダ400、および/またはビデオコーディングデバイス1000などの、エンコーダおよびデコーダによって実施され得る。さらに、システム1300は、RPL構造800を採用することによる単方向インター予測500、双方向インター予測600、および/またはレイヤベース予測700に従ってピクチャを復号するための方法100、1100、および/または1200を実施するときに採用され得る。
システム1300は、ビデオエンコーダ1302を含む。ビデオエンコーダ1302は、現在ピクチャをビットストリームの中に符号化するための符号化モジュール1301を備え、現在ピクチャは、レイヤ間参照ピクチャに基づくレイヤ間予測に従って符号化される。符号化モジュール1301はさらに、参照ピクチャリスト構造をビットストリームの中に符号化するためのものであり、参照ピクチャリスト構造は、現在ピクチャに関連するエントリを含む複数の参照ピクチャに対する複数のエントリを備えるとともにレイヤ間参照ピクチャを示す。符号化モジュール1301はさらに、レイヤ間参照ピクチャフラグをビットストリームの中に符号化するためのものであり、レイヤ間参照ピクチャフラグは、現在ピクチャに関連するエントリがILRPエントリであることを示す。ビデオエンコーダ1302は、デコーダに向かう通信のためにビットストリームを記憶するための、記憶モジュール1303をさらに備える。ビデオエンコーダ1302は、ビデオデコーダ1310に向かってビットストリームを送信するための、送信モジュール1305をさらに備える。ビデオエンコーダ1302は、方法1100のステップのうちのいずれかを実行するようにさらに構成され得る。
システム1300はまた、ビデオデコーダ1310を含む。ビデオデコーダ1310は、現在ピクチャ、参照ピクチャリスト構造、およびレイヤ間参照ピクチャフラグを備えるビットストリームを受信するための、受信モジュール1311を備える。ビデオデコーダ1310は、現在ピクチャに関連する、参照ピクチャリスト構造の中のエントリが、ILRPエントリであるかどうかを、レイヤ間参照ピクチャフラグに基づいて決定するための、決定モジュール1313をさらに備える。ビデオデコーダ1310は、エントリがILRPエントリであるとき、参照ピクチャリスト構造の中のエントリによって示されるレイヤ間参照ピクチャに基づくレイヤ間予測に従って現在ピクチャを復号するための、復号モジュール1315をさらに備える。ビデオデコーダ1310は、復号ビデオシーケンスの一部としての表示のために現在ピクチャを転送するための、転送モジュール1317をさらに備える。ビデオデコーダ1310は、方法1200のステップのうちのいずれかを実行するようにさらに構成され得る。
ライン、トレース、または別の媒体を除いて、第1の構成要素と第2の構成要素との間に介在する構成要素がないとき、第1の構成要素は第2の構成要素に直接結合される。第1の構成要素と第2の構成要素との間にライン、トレース、または別の媒体以外の介在する構成要素があるとき、第1の構成要素は第2の構成要素に間接的に結合される。「結合される」という用語およびその変形は、直接結合されることと間接的に結合されることの両方を含む。「約(about)」という用語の使用は、別段に明記されていない限り、それに続く数の±10%を含む範囲を意味する。
本明細書に記載する例示的な方法のステップが、必ずしも説明した順序で実行されることが必要とされるとは限らないことも理解されたく、そのような方法のステップの順序は、例にすぎないと理解されるべきである。同様に、そのような方法の中に追加のステップが含まれてよく、いくつかのステップは、本開示の様々な実施形態に一致する方法で省かれてよくまたは組み合わせられてよい。
本開示の中でいくつかの実施形態が提供されているが、開示するシステムおよび方法が、本開示の趣旨または範囲から逸脱することなく、多くの他の特定の形態で具現されてよいことが理解され得る。本例は限定的ではなく例示的と見なされることになり、その意図は本明細書で与えられる詳細に限定されない。たとえば、様々な要素または構成要素は、別のシステムの中で組み合わせられるかもしくは統合されてよく、またはいくつかの特徴が省かれてよくもしくは実装されなくてもよい。
加えて、様々な実施形態において個別または別個として説明および図示される技法、システム、サブシステム、および方法は、本開示の範囲から逸脱することなく、他のシステム、構成要素、技法、または方法と組み合わせられてよく、または統合されてもよい。変更、置換、および改変の他の例が、当業者によって確認可能であり、本明細書で開示する趣旨および範囲から逸脱することなく行われてよい。