図3は、本開示の一実施形態による通信システム(300)の簡略ブロック図を示す。通信システム(300)は、例えばネットワーク(350)を介して互いに通信可能な複数の端末デバイスを含む。例えば、通信システム(300)は、ネットワーク(350)を介して相互接続された端末デバイス(310)および(320)の第1のペアを含む。図3の例では、端末デバイス(310)および(320)の第1のペアは、データの単方向送信を実行する。例えば、端末デバイス(310)は、ネットワーク(350)を介して他の端末デバイス(320)に送信するためのビデオデータ(例えば、端末デバイス(310)によってキャプチャされたビデオピクチャのストリーム)をコーディングし得る。エンコーディングされたビデオデータは、1つまたは複数のコーディングされたビデオビットストリームの形態で送信され得る。端末デバイス(320)は、ネットワーク(350)からコーディングされたビデオデータを受信し、コーディングされたビデオデータをデコードしてビデオピクチャを復元し、復元されたビデオデータに従ってビデオピクチャを表示することができる。単方向データ送信は、メディアサービング用途などで一般的であり得る。
別の例では、通信システム(300)は、例えばビデオ会議中に発生し得るコーディングされたビデオデータの双方向送信を実行する端末デバイス(330)および(340)の第2の対を含む。データの双方向送信のために、一例では、端末デバイス(330)および(340)の各端末デバイスは、ネットワーク(350)を介して端末デバイス(330)および(340)の他方の端末デバイスに送信するためのビデオデータ(例えば、端末デバイスによってキャプチャされたビデオピクチャのストリーム)をコーディングし得る。端末デバイス(330)および(340)の各端末デバイスはまた、端末デバイス(330)および(340)の他方の端末デバイスによって送信されたコーディングされたビデオデータを受信することができ、コーディングされたビデオデータをデコードしてビデオピクチャを復元することができ、復元されたビデオデータに従ってアクセス可能な表示デバイスにビデオピクチャを表示することができる。
図3の例では、端末デバイス(310)、(320)、(330)および(340)は、サーバ、パーソナルコンピュータ、およびスマートフォンとして示され得るが、本開示の原理はそのように限定されなくてもよい。本開示の実施形態は、ラップトップコンピュータ、タブレットコンピュータ、メディアプレーヤ、および/または専用ビデオ会議機器に適用される。ネットワーク(350)は、例えば、有線および/または無線通信ネットワークを含む、端末デバイス(310)、(320)、(330)および(340)間でコーディングされたビデオデータを伝達する任意の数のネットワークを表す。通信ネットワーク(350)は、回線交換および/またはパケット交換チャネルでデータを交換し得る。代表的なネットワークは、電気通信ネットワーク、ローカルエリアネットワーク、ワイドエリアネットワークおよび/またはインターネットを含む。本議論の目的のために、ネットワーク(350)のアーキテクチャおよびトポロジは、本明細書で以下に説明されない限り、本開示の動作にとって重要ではないことがある。
図4は、開示される主題の用途の例として、ストリーミング環境におけるビデオエンコーダおよびビデオデコーダの配置を示す。開示される主題は、例えば、ビデオ会議、デジタルTV、ならびにCD、DVD、メモリスティックなどを含むデジタルメディアへの圧縮ビデオの記憶などを含む他のビデオ対応用途に等しく適用可能であり得る。
ストリーミングシステムは、ビデオソース(401)、例えば、圧縮されていないビデオピクチャのストリーム(402)を作成する、例えば、デジタルカメラを含むことができるキャプチャサブシステム(413)を含み得る。一例では、ビデオピクチャのストリーム(402)は、デジタルカメラによって捕捉されたサンプルを含む。エンコーディングされたビデオデータ(404)(またはコーディングされたビデオビットストリーム)と比較して高いデータ量を強調するために太線として示されているビデオピクチャのストリーム(402)は、ビデオソース(401)に結合されたビデオエンコーダ(403)を含む電子デバイス(420)によって処理され得る。ビデオエンコーダ(403)は、ハードウェア、ソフトウェア、またはそれらの組合せを含み、以下により詳細に説明されるように、開示される主題の態様を可能にするかまたは実施することができる。エンコーディングされたビデオデータ(404)(またはエンコーディングされたビデオビットストリーム(404))は、ビデオピクチャのストリーム(402)と比較してより少ないデータ量を強調するために細い線として描かれ、将来の使用のためにストリーミングサーバ(405)に記憶され得る。図4のクライアントサブシステム(406)および(408)などの1つ以上のストリーミングクライアントサブシステムは、エンコーディングされたビデオデータ(404)のコピー(407)および(409)を探索するためにストリーミングサーバ(405)にアクセスし得る。クライアントサブシステム(406)は、例えば電子デバイス(430)内のビデオデコーダ(410)を含むことができる。ビデオデコーダ(410)は、エンコーディングされたビデオデータの入力コピー(407)をデコードし、ディスプレイ(412)(例えば、表示画面)または他のレンダリングデバイス(図示せず)上にレンダリングされ得るビデオピクチャの出力ストリーム(411)を作成する。いくつかのストリーミングシステムでは、エンコーディングされたビデオデータ(404)、(407)、および(409)(例えば、ビデオビットストリーム)は、特定のビデオコーディング/圧縮規格に従ってエンコーディングされ得る。それらの規格の例は、ITU-T勧告H.265を含む。一例では、開発中のビデオコーディン
グ規格が、多用途ビデオコーディング(VVC)として非公式に知られている。開示される主題は、VVCの文脈で使用され得る。
電子デバイス(420)および(430)は、他の構成要素(図示せず)を含むことができることに留意されたい。例えば、電子デバイス(420)はビデオデコーダ(図示せず)を含むことができ、電子デバイス(430)はビデオエンコーダ(図示せず)も含むことができる。
図5は、本開示の一実施形態によるビデオデコーダ(510)のブロック図を示す。ビデオデコーダ(510)は、電子デバイス(530)に含まれ得る。電子デバイス(530)は、受信器(531)(例えば、受信回路)を含むことができる。ビデオデコーダ(510)は、図4の例のビデオデコーダ(410)の代わりに使用され得る。
受信器(531)は、ビデオデコーダ(510)によってデコードされる1つまたは複数のコーディングされたビデオシーケンスを受信することができ、同じまたは別の実施形態では、一度に1つのコーディングされたビデオシーケンスを受信し、各コーディングされたビデオシーケンスのデコーディングは、他のコーディングされたビデオシーケンスから独立している。コーディングされたビデオシーケンスは、チャネル(501)から受信されることができ、チャネル(501)は、エンコーディングされたビデオデータを記憶する記憶デバイスへのハードウェア/ソフトウェアリンクであり得る。受信器(531)は、それぞれの使用エンティティ(図示せず)に転送され得る他のデータ、例えば、コーディングされたオーディオデータおよび/または補助データストリームと共にエンコーディングされたビデオデータを受信し得る。受信器(531)は、コーディングされたビデオシーケンスを他のデータから分離し得る。ネットワークジッタに対抗するために、バッファメモリ(515)が、受信器(531)とエントロピーデコーダ/パーサ(520)(以下、「パーサ(520)」)との間に結合され得る。特定の用途では、バッファメモリ(515)は、ビデオデコーダ(510)の一部である。他の用途では、バッファメモリ(515)は、ビデオデコーダ(510)の外部にあってもよい(図示せず)。さらに他の用途では、例えばネットワークジッタに対抗するためにビデオデコーダ(510)の外部にバッファメモリ(図示せず)があり、さらに例えば再生タイミングを処理するためにビデオデコーダ(510)の内部に別のバッファメモリ(515)があり得る。受信器(531)が十分な帯域幅および制御可能性の記憶/転送デバイスから、またはアイソシンクロナスネットワークからデータを受信しているとき、バッファメモリ(515)は必要ないか、または小さくてよい。インターネットなどのベストエフォートパケットネットワークで使用するために、バッファメモリ(515)が必要とされることがあり、比較的大きくてもよく、好適には適応的なサイズであってもよく、ビデオデコーダ(510)の外部のオペレーティングシステムまたは同様の要素(図示せず)に少なくとも部分的に実装され得る。
ビデオデコーダ(510)は、コーディングされたビデオシーケンスからシンボル(521)を再構成するためのパーサ(520)を含み得る。それらのシンボルのカテゴリは、ビデオデコーダ(510)の動作を管理するために使用される情報と、場合によっては、図5に示されたように、電子デバイス(530)の不可欠な部分ではないが、電子デバイス(530)に結合され得るレンダデバイス(512)などのレンダリングデバイス(例えば、表示スクリーン)を制御するための情報を含む。レンダリングデバイスの制御情報は、補足拡張情報(SEI(Supplemental Enhancement Information)メッセージ)またはビデオユーザビリティ情報(VUI:Video Usability Information)パラメータセットフラグメント(図示せず)の形式であり得る。パーサ(520)は、受信されるコーディングされたビデオシーケンスを解析/エントロピーデコードし得る。コーディングされたビデオシーケンスのコーディングは、ビデオコーディング技術または規格に従うことができ、文脈依存の有無にかかわらず可変長コーディング、ハフマンコーディング、算術コーディングなどを含む様々な原理に従うことができる。パーサ(520)は、グループに対応する少なくとも1つのパラメータに基づいて、コーディングされたビデオシーケンスから、ビデオデコーダ内の画素のサブグループのうちの少なくとも1つに対するサブグループパラメータのセットを抽出し得る。サブグループは、Group of Pictures(GOP)、ピクチャ、タイル、スライス、マクロブロック、コーディングユニット(CU:Coding Unit)、ブロック、変換ユニット(TU:Transform Unit)、予測ユニット(PU:Prediction Unit)などを含むことができる。パーサ(520)はまた、変換係数、量子化器パラメータ値、動きベクトルなどの情報をコーディングされたビデオシーケンスから抽出し得る。
パーサ(520)は、バッファメモリ(515)から受信されるビデオシーケンスに対してエントロピーデコーディング/解析動作を実行して、シンボル(521)を作成し得る。
シンボル(521)の再構成は、コーディングされたビデオピクチャまたはその一部(ピクチャ間およびイントラピクチャ、ブロック間およびイントラブロックなど)のタイプ、および他の要因に応じて、複数の異なるユニットを含むことができる。どのユニットがどのように関与するかは、パーサ(520)によってコーディングされたビデオシーケンスから解析されたサブグループ制御情報によって制御され得る。パーサ(520)と以下の複数のユニットとの間のそのようなサブグループ制御情報の流れは、分かりやすくするために描かれていない。
既に述べた機能ブロックを超えて、ビデオデコーダ(510)は、以下に説明するように、いくつかの機能ユニットに概念的に細分され得る。商業的制約の下で動作する実際の実装では、これらのユニットの多くは互いに密接に相互作用し、少なくとも部分的には互いに統合され得る。しかしながら、開示される主題を説明する目的のために、以下の機能ユニットに概念的に細分するのが適切である。
第1のユニットはスケーラ/逆変換ユニット(551)である。スケーラ/逆変換ユニット(551)は、量子化された変換係数、ならびに使用する変換、ブロックサイズ、量子化因子、量子化スケーリング行列などを含む制御情報を、パーサ(520)からシンボル(複数可)(521)として受け取る。スケーラ/逆変換ユニット(551)は、アグリゲータ(555)に入力され得るサンプル値を含むブロックを出力することができる。
場合によっては、スケーラ/逆変換(551)の出力サンプルは、イントラコーディングされたブロック、つまり、以前に再構成されたピクチャからの予測情報を使用していないが、現在のピクチャの以前に再構成された部分からの予測情報を使用できるブロック、に関係することができる。そのような予測情報は、イントラピクチャ予測ユニット(552)によって提供され得る。場合によっては、イントラピクチャ予測ユニット(552)は、現在のピクチャバッファ(558)からフェッチされた周囲の既に再構成された情報を使用して、再構成中のブロックと同じサイズおよび形状のブロックを生成する。現在のピクチャバッファ(558)は、例えば、部分的に再構成された現在のピクチャおよび/または完全に再構成された現在のピクチャをバッファリングする。アグリゲータ(555)は、場合によっては、サンプルごとに、イントラ予測ユニット(552)が生成した予測情報を、スケーラ/逆変換ユニット(551)によって提供される出力サンプル情報に追加する。
他の場合では、スケーラ/逆変換ユニット(551)の出力サンプルは、インターコーディングされ、潜在的に動き補償されたブロックに関係し得る。このような場合、動き補償予測ユニット(553)が、参照ピクチャメモリ(557)にアクセスして、予測に使用されるサンプルをフェッチすることができる。ブロックに関連するシンボル(521)に従ってフェッチされたサンプルを動き補償した後、これらのサンプルは、出力サンプル情報を生成するために、アグリゲータ(555)によってスケーラ/逆変換ユニット(551)の出力に追加され得る(この場合、残差サンプルまたは残差信号と呼ばれる)。動き補償予測ユニット(553)が予測サンプルをフェッチする参照ピクチャメモリ(557)内のアドレスは、動きベクトルによって制御されることができ、動きベクトルは、例えば、X、Y、および参照ピクチャ成分を有することができるシンボル(521)の形式で動き補償予測ユニット(553)に利用可能である。動き補償はまた、サブサンプルの正確な動きベクトルが使用されているときに参照ピクチャメモリ(557)からフェッチされたサンプル値の補間、動きベクトル予測機構などを含むことができる。
アグリゲータ(555)の出力サンプルは、ループフィルタユニット(556)において様々なループフィルタリング技術の対象となり得る。ビデオ圧縮技術は、コーディングされたビデオシーケンス(コーディングされたビデオビットストリームとも呼ばれる)に含まれるパラメータによって制御され、パーサ(520)からのシンボル(521)としてループフィルタユニット(556)に利用可能になるインループフィルタ技術を含むことができるが、コーディングされたピクチャまたはコーディングされたビデオシーケンスの前の(デコーディング順序で)部分のデコード中に取得されたメタ情報に応答することもでき、以前に再構成およびループフィルタリングされたサンプル値に応答することもできる。
ループフィルタユニット(556)の出力は、レンダデバイス(512)に出力され得るだけでなく、将来のピクチャ間予測で使用するために参照ピクチャメモリ(557)に記憶され得るサンプルストリームであり得る。
特定のコーディングされたピクチャは、完全に再構成されると、将来の予測のための参照ピクチャとして使用され得る。例えば、現在のピクチャに対応するコーディングされたピクチャが完全に再構成され、コーディングされたピクチャが(例えば、パーサ(520)によって)参照ピクチャとして識別されると、現在のピクチャバッファ(558)は、参照ピクチャメモリ(557)の一部になることができ、次のコーディングされたピクチャの再構成を開始する前に、新しい現在のピクチャバッファが再割り当てされ得る。
ビデオデコーダ(510)は、ITU-T Rec.H.265などの規格における所定のビデオ圧縮技術に従ってデコーディング動作を実行し得る。コーディングされたビデオシーケンスは、コーディングされたビデオシーケンスが、ビデオ圧縮技術または規格で文書化されているようなビデオ圧縮技術または規格のシンタックスおよびプロファイルの両方に準拠するという意味で、使用されているビデオ圧縮技術または規格によって指定されたシンタックスに準拠し得る。具体的には、プロファイルは、ビデオ圧縮技術または規格で利用可能なすべてのツールの中から、そのプロファイルの下での使用に利用可能な唯一のツールとして特定のツールを選択し得る。また、コンプライアンスのために必要なのは、コーディングされたビデオシーケンスの複雑さが、ビデオ圧縮技術または規格のレベルによって定義された範囲内にあることであり得る。場合によっては、レベルは、最大ピクチャサイズ、最大フレームレート、最大再構成サンプルレート(例えば毎秒メガサンプルの単位で測定される)、および最大参照ピクチャサイズなどを制限する。レベルによって設定された限界は、場合によっては、仮想参照デコーダ(HRD:Hypothetical Reference Decoder)の仕様、およびコーディングされたビデオシーケンスでシグナリングされるHRDバッファ管理のメタデータによってさらに制限され得る。
一実施形態では、受信器(531)は、エンコーディングされたビデオと共に追加の(冗長な)データを受信し得る。追加のデータは、コーディングされたビデオシーケンス(複数可)の一部として含まれ得る。追加のデータは、データを適切にデコードするため、および/または元のビデオデータをより正確に再構成するために、ビデオデコーダ(510)によって使用され得る。追加のデータは、例えば、時間、空間、または信号ノイズ比(SNR:signal noise ratio)エンハンスメントレイヤ、冗長スライス、冗長ピクチャ、および前方誤り訂正コードなどの形式であり得る。
図6は、本開示の一実施形態によるビデオエンコーダ(603)のブロック図を示す。ビデオエンコーダ(603)は、電子デバイス(620)に含まれる。電子デバイス(620)は、送信器(640)(例えば、送信回路)を含む。ビデオエンコーダ(603)は、図4の例のビデオエンコーダ(403)の代わりに使用され得る。
ビデオエンコーダ(603)は、ビデオエンコーダ(603)によってコーディングされるべきビデオ画像を取り込み得るビデオソース(601)(図6の例では電子デバイス(620)の一部ではない)からビデオサンプルを受信し得る。別の例では、ビデオソース(601)は電子デバイス(620)の一部である。
ビデオソース(601)は、任意の適切なビット深度(例えば、8ビット、10ビット、12ビット、...)、任意の色空間(例えば、BT.601 Y CrCB、RGB、...)、および任意の適切なサンプリング構造(例えば、Y CrCb 4:2:0、Y CrCb 4:4:4)であり得るデジタルビデオサンプルストリームの形式で、ビデオエンコーダ(603)によってコーディングされるソースビデオシーケンスを提供し得る。メディアサービングシステムでは、ビデオソース(601)は、以前に準備されたビデオを記憶する記憶装置であり得る。ビデオ会議システムにおいて、ビデオソース(601)は、ローカル画像情報をビデオシーケンスとしてキャプチャするカメラであってもよい。ビデオデータは、連続して見たときに動きを与える、複数の個々のピクチャとして提供されてもよい。ピクチャ自体は、画素の空間アレイとして編成されることができ、各画素は、使用中のサンプリング構造、色空間などに応じて1つ以上のサンプルを含み得る。当業者であれば、画素とサンプルとの関係を容易に理解し得る。以下の説明はサンプルに焦点を当てている。
一実施形態によれば、ビデオエンコーダ(603)は、リアルタイムで、または用途によって要求される他の任意の時間制約の下で、ソースビデオシーケンスのピクチャをコーディングされたビデオシーケンス(643)にコーディングおよび圧縮し得る。適切なコーディング速度を強制することは、コントローラ(650)の1つの機能である。いくつかの実施形態では、コントローラ(650)は、以下に説明するように他の機能ユニットを制御し、他の機能ユニットに機能的に結合される。分かりやすくするために、結合は描かれていない。コントローラ(650)によって設定されるパラメータには、レート制御関連のパラメータ(ピクチャスキップ、量子化器、レート歪み最適化手法のラムダ値など)、ピクチャサイズ、Group of Pictures(GOP)レイアウト、最大動きベクトル探索範囲などが含まれ得る。コントローラ(650)は、特定のシステム設計に最適化されたビデオエンコーダ(603)に関する他の適切な機能を有するように構成され得る。
いくつかの実施形態では、ビデオエンコーダ(603)は、コーディング・ループで動作するように構成される。過度に簡略化された説明として、一例では、コーディング・ループは、ソースコーダ(630)(例えば、コーディングされる入力ピクチャと、参照ピクチャ(複数可)とに基づいて、シンボルストリームのようなシンボルを生成することを担当する)と、ビデオエンコーダ(603)に組み込まれた(ローカル)デコーダ(633)とを含むことができる。デコーダ(633)は、(リモート)デコーダも作成するのと同様の方法でサンプルデータを作成するためにシンボルを再構成する(開示される主題で考慮されるビデオ圧縮技術では、シンボルとコーディングされたビデオビットストリームとの間の任意の圧縮が可逆的であるため)。その再構成されたサンプルストリーム(サンプルデータ)は、参照ピクチャメモリ(634)に入力される。シンボルストリームのデコーディングにより、デコーダ位置(ローカルまたはリモート)に関係なくビットイグザクト(bit-exact)な結果が得られるため、参照ピクチャメモリ(634)内のコンテンツもまたローカルエンコーダとリモートエンコーダとの間でビットイグザクトになる。言い換えると、エンコーダの予測部分は、デコーディング中に予測を使用するときにデコーダが「見る」のとまったく同じサンプル値を参照ピクチャサンプルとして「見る」。参照ピクチャの同期性(および例えばチャネルエラーに起因して同期性が維持され得ない場合に結果として生じるドリフト)のこの基本原理は、一部の関連技術でも使用される。
「ローカル」デコーダ(633)の動作は、図5に関連して上記で既に詳細に説明された、ビデオデコーダ(510)などの「リモート」デコーダの動作と同じであり得る。図5も簡単に参照すると、しかしながら、シンボルが利用可能であり、エントロピーコーダ(645)およびパーサ(520)によるコーディングされたビデオシーケンスへのシンボルのエンコーディング/デコーディングは可逆であることができ、バッファメモリ(515)およびパーサ(520)を含むビデオデコーダ(510)のエントロピーデコーディング部分は、ローカルデコーダ(633)に完全に実装されていないことがある。
この点について行われうる観察は、デコーダに存在する解析/エントロピーデコーディング以外のデコーダ技術が、実質的に同一の機能形式で、対応するエンコーダにも必ず存在する必要があることである。このため、開示される主題はデコーダ動作に焦点を合わせている。エンコーダ技術の説明は、包括的に説明されているデコーダ技術の逆であるため、省略され得る。特定の領域に関してのみ、より詳細な説明が必要とされ、以下で提供される。
動作中、いくつかの例では、ソースコーダ(630)は、動き補償予測コーディングを実行することがあり、これは、「参照ピクチャ」として指定されたビデオシーケンスからの1つまたは複数の以前にコーディングされたピクチャを参照して入力ピクチャを予測的にコーディングする。このようにして、コーディングエンジン(632)は、入力ピクチャの画素ブロックと、入力ピクチャへの予測参照(複数可)として選択され得る参照ピクチャ(複数可)の画素ブロックとの間の差異をコーディングする。
ローカルビデオデコーダ(633)は、ソースコーダ(630)によって作成されたシンボルに基づいて、参照ピクチャとして指定され得るピクチャのコーディングされたビデオデータをデコードし得る。コーディングエンジン(632)の動作は、好適には、非可逆プロセスであり得る。コーディングされたビデオデータがビデオデコーダ(図6には示されていない)でデコードされ得るとき、再構成されたビデオシーケンスは通常、いくらかの誤差を有するソースビデオシーケンスのレプリカであり得る。ローカルビデオデコーダ(633)は、参照ピクチャ上でビデオデコーダによって実行され得るデコーディングプロセスを複製し、再構成された参照ピクチャを参照ピクチャキャッシュ(634)に記憶させ得る。このようにして、ビデオエンコーダ(603)は、遠端ビデオデコーダによって取得される再構成された参照ピクチャとして共通のコンテンツを有する再構成された参照ピクチャのコピーをローカルに記憶し得る(送信エラーがない)。
予測器(635)は、コーディングエンジン(632)の予測探索を実行し得る。すなわち、コーディングされる新しいピクチャに対して、予測器(635)は、サンプルデータ(候補参照画素ブロックとして)または新しいピクチャの適切な予測参照として役立ち得る参照ピクチャ動きベクトル、ブロック形状などの特定のメタデータについて、参照ピクチャメモリ(634)を探索し得る。予測器(635)は、適切な予測参照を見つけるために、サンプルブロックと画素ブロックごとに動作し得る。場合によっては、予測器(635)によって取得された探索結果によって決定されるように、入力ピクチャは、参照ピクチャメモリ(634)に記憶された複数の参照ピクチャから引き出された予測参照を有し得る。
コントローラ(650)は、例えば、ビデオデータをエンコーディングするために使用されるパラメータおよびサブグループパラメータの設定を含む、ソースコーダ(630)のコーディング動作を管理し得る。
前述のすべての機能ユニットの出力は、エントロピーコーダ(645)でエントロピーコーディングを受けることがある。エントロピーコーダ(645)は、ハフマンコーディング、可変長コーディング、算術コーディングなどの技術に従ってシンボルを可逆圧縮することにより、様々な機能ユニットによって生成されたシンボルをコーディングされたビデオシーケンスに変換する。
送信器(640)は、エントロピーコーダ(645)によって作成されたコーディングされたビデオシーケンス(複数可)をバッファに入れて、通信チャネル(660)を介した送信のために準備することができ、通信チャネル(660)は、エンコーディングされたビデオデータを記憶する記憶デバイスへのハードウェア/ソフトウェアリンクであり得る。送信器(640)は、ビデオコーダ(603)からのコーディングされたビデオデータを、送信される他のデータ、例えば、コーディングされたオーディオデータおよび/または補助データストリーム(ソースは図示せず)とマージし得る。
コントローラ(650)は、ビデオエンコーダ(603)の動作を管理し得る。コーディング中に、コントローラ(650)は、それぞれのコーディングされたピクチャに特定のコーディングされたピクチャタイプを割り当てることがあり、これは、それぞれのピクチャに適用され得るコーディング技術に影響を及ぼし得る。例えば、ピクチャは、多くの場合、以下のピクチャタイプのうちの1つとして割り当てられ得る。
イントラピクチャ(Iピクチャ)は、シーケンス内の他のピクチャを予測のソースとして使用せずにコーディングおよびデコーディングされ得るものであり得る。一部のビデオコーデックは、例えば独立デコーダリフレッシュ(「IDR:Independent Decoder Refresh」)ピクチャを含む様々なタイプのイントラピクチャに対応する。当業者は、Iピクチャのそれらの変種ならびにそれらのそれぞれの用途および特徴を認識している。
予測ピクチャ(Pピクチャ)は、イントラ予測またはインター予測を用い、各ブロックのサンプル値を予測するのに最大1つの動きベクトルと参照インデックスとを用いてコーディングおよびデコーディングされ得るピクチャであり得る。
双方向予測ピクチャ(Bピクチャ)は、イントラ予測またはインター予測を用い、各ブロックのサンプル値を予測するのに最大2つの動きベクトルと参照インデックスとを用いてコーディングおよびデコーディングされ得るピクチャであり得る。同様に、複数の予測ピクチャは、単一のブロックの再構成のために2つより多くの参照ピクチャおよび関連メタデータを使用し得る。
ソースピクチャは、一般的には、複数のサンプルブロック(例えば、4×4、8×8、4×8、または16×16のサンプルそれぞれのブロック)に空間的に細分され、ブロックごとにコーディングされ得る。ブロックは、ブロックのそれぞれのピクチャに適用されたコーディング割り当てによって決定されるように他の(既にコーディングされた)ブロックを参照して予測的にコーディングされ得る。例えば、Iピクチャのブロックは、非予測的にコーディングされ得るか、または同じピクチャの既にコーディングされたブロックを参照して予測的にコーディングされ得る(空間予測またはイントラ予測)。Pピクチャの画素ブロックは、空間予測によってまたは時間予測によって、以前にコーディングされた1つの参照ピクチャを参照して予測的にコーディングされ得る。Bピクチャのブロックは、空間予測によってまたは時間予測によって、以前にコーディングされた1つまたは2つの参照ピクチャを参照して予測的にコーディングされ得る。
ビデオエンコーダ(603)は、ITU-T Rec.H.265などの所定のビデオコーディング技術または規格に従ってコーディング動作を実行し得る。その動作において、ビデオエンコーダ(603)は、入力ビデオシーケンスにおける時間的および空間的冗長性を利用する予測コーディング動作を含む、様々な圧縮動作を実行し得る。したがって、コーディングされたビデオデータは、使用されているビデオコーディング技術または規格によって指定されたシンタックスに準拠し得る。
一実施形態では、送信器(640)は、エンコーディングされたビデオと共に追加のデータを送信し得る。ソースコーダ(630)は、コーディングされたビデオシーケンスの一部としてそのようなデータを含み得る。追加のデータは、時間/空間/SNRエンハンスメントレイヤ、冗長ピクチャおよびスライスなどの他の形式の冗長データ、SEIメッセージ、およびVUIパラメータセットフラグメントなどを含み得る。
ビデオは、時系列の複数のソースピクチャ(ビデオピクチャ)として取り込まれ得る。イントラピクチャ予測(しばしばイントラ予測と略される)は、所与のピクチャにおける空間的相関を利用し、インターピクチャ予測は、ピクチャ間の(時間的または他の)相関を利用する。一例では、現在のピクチャと呼ばれる、エンコーディング/デコーディング中の特定のピクチャがブロックに分割される。現在のピクチャ中のブロックが動画中の、以前にコーディングされて依然としてバッファリングされている参照ピクチャ中の参照ブロックに類似する場合、現在のピクチャ中のブロックは、動きベクトルと称されるベクトルによってコーディングされ得る。動きベクトルは、参照ピクチャ中で参照ブロックを指し、複数の参照ピクチャが用いられる場合、参照ピクチャを特定する第3の次元を有し得る。
一部の実施形態では、インターピクチャ予測に双予測技術が使用され得る。双予測技術によれば、第1の参照ピクチャおよび第2の参照ピクチャなどの2つの参照ピクチャが使用され、これらはデコーディング順序で両方ともビデオ内の現在のピクチャより前にある(しかし、表示順序では、それぞれ過去および未来のものであってもよい)。第1の参照ピクチャ中で第1の参照ブロックの方に向いている第1の動きベクトルと、第2の参照ピクチャ中で第2の参照ブロックの方に向いている第2の動きベクトルとによって、現在のピクチャ中のブロックはコーディングされ得る。ブロックは、第1の参照ブロックと第2の参照ブロックとの組合せによって予測され得る。
さらに、コーディング効率を改善するために、インターピクチャ予測にマージモード技術が使用され得る。
本開示の一部の実施形態によれば、インターピクチャ予測およびイントラピクチャ予測などの予測は、ブロック単位で実行される。例えば、HEVC規格によれば、ビデオピクチャのシーケンス内のピクチャは、圧縮のためにコーディングツリーユニット(CTU:coding tree unit)に分割され、ピクチャにおけるCTUは、64×64画素、32×32画素、または16×16画素などの同じサイズを有する。一般に、CTUは、1つのルマコーディングツリーブロック(CTB:coding tree block)および2つのクロマCTBである3つのCTBを含む。各CTUは、1つまたは複数のコーディングユニット(CU:coding unit)に再帰的にクワッドツリー分割され得る。例えば、64×64画素のCTUは、64×64画素の1つのCU、または32×32画素の4つのCU、または16×16画素の16個のCUに分割され得る。一例では、各CUは、インター予測タイプまたはイントラ予測タイプなどのCUの予測タイプを決定するために分析される。CUは、時間的および/または空間的な予測可能性に応じて、1つ以上の予測ユニット(PU:prediction unit)に分割される。一般に、各PUは、ルマ予測ブロック(PB:prediction block)と、2つのクロマPBとを含む。一実施形態では、コーディング(エンコーディング/デコーディング)における予測動作は、予測ブロックの単位で実行される。予測ブロックの例としてルマ予測ブロックを使用すると、予測ブロックは、8×8画素、16×16画素、8×16画素、および16×8画素などの画素の値(例えば、ルマ値)の行列を含む。
図7は、本開示の別の実施形態によるビデオエンコーダ(703)の図を示す。ビデオエンコーダ(703)は、ビデオピクチャのシーケンス内の現在のビデオピクチャにおけるサンプル値の処理ブロック(例えば、予測ブロック)を受信し、処理ブロックを、コーディングされたビデオシーケンスの一部であるコーディングされたピクチャにエンコーディングするように構成される。一例では、ビデオエンコーダ(703)は、図4の例のビデオエンコーダ(403)の代わりに使用される。
HEVCの例では、ビデオエンコーダ(703)は、8×8サンプルの予測ブロックなどの処理ブロックのサンプル値の行列を受信する。ビデオエンコーダ(703)は、処理ブロックが、例えばレート歪み最適化を使用して、イントラモード、インターモード、または双予測モードを使用して最良にコーディングされるかどうかを決定する。処理ブロックがイントラモードでコーディングされるとき、ビデオエンコーダ(703)は、処理ブロックをコーディングされたピクチャへコーディングするために、イントラ予測技術を使用することができ、処理ブロックがインターモードまたは双予測モードでコーディングされるとき、ビデオエンコーダ(703)は、処理ブロックをコーディングされたピクチャにコーディングするために、それぞれインター予測技術または双予測技術を使用することができる。特定のビデオコーディング技術では、マージモードは、予測子の外側のコーディングされた動きベクトル成分の恩恵を受けずに動きベクトルが1つまたは複数の動きベクトル予測子から導出されるピクチャ間予測サブモードであり得る。特定の他のビデオコーディング技術では、対象ブロックに適用可能な動きベクトル成分が存在し得る。一例では、ビデオエンコーダ(703)は、処理ブロックのモードを決定するためのモード決定モジュール(図示せず)などの他の構成要素を含む。
図7の例では、ビデオエンコーダ(703)は、図7に示されているように互いに結合されたインターエンコーダ(730)、イントラエンコーダ(722)、残差計算器(723)、スイッチ(726)、残差エンコーダ(724)、一般コントローラ(721)、およびエントロピーエンコーダ(725)を含む。
インターエンコーダ(730)は、現在のブロック(例えば、処理ブロック)のサンプルを受信し、そのブロックを参照ピクチャにおけるの1つまたは複数の参照ブロック(例えば、前のピクチャおよび後のピクチャにおけるブロック)と比較し、インター予測情報(例えば、インターエンコーディング技術、動きベクトル、マージモード情報による冗長情報の記述)を生成し、任意の適切な技術を使用してインター予測情報に基づいてインター予測結果(例えば、予測ブロック)を算出するように構成される。一部の例では、参照ピクチャは、エンコーディングされたビデオ情報に基づいてデコードされた、デコードされた参照ピクチャである。
イントラエンコーダ(722)は、現在のブロック(例えば、処理ブロック)のサンプルを受信し、場合によっては、ブロックを同じピクチャにおいて既にコーディングされているブロックと比較し、変換後に量子化係数を生成し、場合によってはイントラ予測情報(例えば、1つまたは複数のイントラエンコーディング技術によるイントラ予測方向情報)も生成するように構成される。一例では、イントラエンコーダ(722)は、イントラ予測情報と、同一ピクチャにおける参照ブロックとに基づいて、イントラ予測結果(例えば、予測ブロック)も算出する。
一般コントローラ(721)は、一般制御データを決定し、一般制御データに基づいてビデオエンコーダ(703)の他の構成要素を制御するように構成される。一例では、一般コントローラ(721)は、ブロックのモードを決定し、モードに基づいてスイッチ(726)に制御信号を提供する。例えば、モードがイントラモードである場合、一般コントローラ(721)は、残差計算器(723)が用いるイントラモード結果を選択するためにスイッチ(726)を制御し、イントラ予測情報を選択してビットストリームに含めるためにエントロピーエンコーダ(725)を制御し、モードがインターモードである場合、一般コントローラ(721)は、残差計算器(723)が用いるインター予測結果を選択するためにスイッチ(726)を制御し、インター予測情報を選択してビットストリームに含めるためにエントロピーエンコーダ(725)を制御する。
残差計算器(723)は、受信されたブロックと、イントラエンコーダ(722)またはインターエンコーダ(730)から選択された予測結果との差分(残差データ)を計算するように構成される。残差エンコーダ(724)は、残差データに基づいて動作して、変換係数を生成するために残差データをエンコーディングするように構成される。一例では、残差エンコーダ(724)は、残差データを空間領域から周波数領域に変換し、変換係数を生成するように構成される。変換係数はその後、量子化された変換係数を得るために量子化処理を受ける。様々な実施形態において、ビデオエンコーダ(703)はまた、残差デコーダ(728)を含む。残差デコーダ(728)は、逆変換を実行し、デコードされた残差データを生成するように構成される。デコードされた残差データは、イントラエンコーダ(722)およびインターエンコーダ(730)によって好適に使用され得る。例えば、インターエンコーダ(730)は、デコードされた残差データとインター予測情報とに基づいてデコードされたブロックを生成することができ、イントラエンコーダ(722)は、デコードされた残差データとイントラ予測情報とに基づいてデコードされたブロックを生成することができる。一部の例では、デコードされたブロックは、デコードされたピクチャを生成するために適切に処理され、デコードされたピクチャは、メモリ回路(図示せず)にバッファリングされ、参照ピクチャとして使用され得る。
エントロピーエンコーダ(725)は、エンコーディングされたブロックを含むようにビットストリームをフォーマットするように構成される。エントロピーエンコーダ(725)は、HEVC規格などの適切な規格に従って様々な情報を含むように構成される。一例では、エントロピーエンコーダ(725)は、一般制御データ、選択された予測情報(例えば、イントラ予測情報またはインター予測情報)、残差情報、および他の適切な情報をビットストリームに含めるように構成される。開示される主題によれば、インターモードまたは双予測モードのいずれかのマージサブモードでブロックをコーディングする場合、残差情報は存在しないことに留意されたい。
図8は、本開示の別の実施形態によるビデオデコーダ(810)の図を示す。ビデオデコーダ(810)は、コーディングされたビデオシーケンスの一部であるコーディングされたピクチャを受信し、コーディングされたピクチャをデコードして再構成されたピクチャを生成するように構成される。一例では、ビデオデコーダ(810)は、図4の例のビデオデコーダ(410)の代わりに使用される。
図8の例では、ビデオデコーダ(810)は、図8に示されているように互いに結合されたエントロピーデコーダ(871)、インターデコーダ(880)、残差デコーダ(873)、再構成モジュール(874)、およびイントラデコーダ(872)を含む。
エントロピーデコーダ(871)は、コーディングされたピクチャから、コーディングされたピクチャを構成するシンタックス要素を表す特定のシンボルを再構成するように構成され得る。そのようなシンボルは、例えば、ブロックがコーディングされるモード(例えば、イントラモード、インターモード、双方向予測モード、後者の2つは、マージサブモードまたは別のサブモード)、イントラデコーダ(872)またはインターデコーダ(880)によってそれぞれ予測に使用される特定のサンプルまたはメタデータを識別することができる予測情報(例えば、イントラ予測情報やインター予測情報など)、例えば量子化変換係数の形態の残差情報などを含むことができる。一例では、予測モードがインター予測モードまたは双方向予測モードである場合、インター予測情報はインターデコーダ(880)に提供され、予測タイプがイントラ予測タイプである場合、イントラ予測情報がイントラデコーダ(872)に提供される。残差情報は逆量子化を受けることができ、残差デコーダ(873)に提供される。
インターデコーダ(880)は、インター予測情報を受信し、インター予測情報に基づいてインター予測結果を生成するように構成される。
イントラデコーダ(872)は、イントラ予測情報を受信し、イントラ予測情報に基づいて予測結果を生成するように構成される。
残差デコーダ(873)は、逆量子化を実行して逆量子化された変換係数を抽出し、逆量子化された変換係数を処理して残差を周波数領域から空間領域に変換するように構成される。残差デコーダ(873)はまた、(量子化器パラメータ(QP:Quantizer Parameter)を含むために)特定の制御情報を必要とする場合があり、その情報はエントロピーデコーダ(871)によって提供される場合がある(これとして示されていないデータ経路は、低量制御情報のみであり得る)。
再構成モジュール(874)は、空間領域において、残差デコーダ(873)による出力としての残差と、(場合によってはインターまたはイントラ予測モジュールによる出力としての)予測結果とを組み合わせて、再構成されたピクチャの一部であり得る再構成されたブロックを形成するように構成され、再構成されたブロックは再構成されたビデオの一部であり得る。視覚的品質を改善するために、デブロッキング動作などの他の適切な動作が実行され得ることに留意されたい。
ビデオエンコーダ(403)、(603)、および(703)、ならびにビデオデコーダ(410)、(510)、および(810)は、任意の適切な技術を使用して実施され得ることに留意されたい。一実施形態では、ビデオエンコーダ(403)、(603)、および(703)、ならびにビデオデコーダ(410)、(510)、および(810)は、1つまたは複数の集積回路を使用して実施され得る。別の実施形態では、ビデオエンコーダ(403)、(603)、および(603)、ならびにビデオデコーダ(410)、(510)、および(810)は、ソフトウェア命令を実行する1つまたは複数のプロセッサを使用して実施され得る。
本開示の態様は、例えば画面コンテンツコーディングのためのコーディングツールのための高レベルなシンタックス制御のための技術を含む。
ブロックベースの補償は、インター予測およびイントラ予測に使用され得る。インター予測の場合、異なるピクチャからのブロックに基づく補償は、動き補償として知られている。ブロックに基づく補償は、イントラ予測など、同じピクチャにおける以前に再構成されたエリアからも行われ得る。同じピクチャにおける再構成されたエリアからのブロックに基づく補償は、イントラピクチャブロック補償、現在のピクチャ参照(CPR:current picture referencing)、またはイントラブロックコピー(IBC:intra block copy)と呼ばれる。現在のブロックと、同じピクチャにおける参照ブロック(予測ブロックとも呼ばれる)との間のオフセットを示す変位ベクトルはブロックベクトル(BV:block vector)と呼ばれ、現在のブロックは、参照ブロックに基づいてエンコーディング/デコーディングされ得る。任意の値(正または負、x方向でもy方向でも)をとることができる動き補償の動きベクトルとは異なり、BVには、参照ブロックが利用可能で既に再構成されていることを保証するためのいくつかの制約がある。また、いくつかの例では、並列処理を考慮するために、タイル境界、スライス境界、またはウェーブフロントラダー(wavefront ladder)形状の境界である、いくつかの参照エリアが除外される。
ブロックベクトルのコーディングは、明示的または暗黙的に行われる場合がある。明示的モードでは、ブロックベクトルとその予測子との間のBV差がシグナリングされる。暗黙的モードでは、ブロックベクトルは、マージモードの動きベクトルと同様の方法で、BV差を使用せずに予測子(ブロックベクトル予測子と呼ばれる)から回復される。明示的モードは、非マージBV予測モードと呼ばれ得る。暗黙的モードは、マージBV予測モードと呼ばれ得る。
ブロックベクトルの分解能は、いくつかの実施では、整数位置に限定される。他のシステムでは、ブロックベクトルは分数位置を指すことができる。
いくつかの例では、ブロックレベルでのイントラブロックコピーの使用は、IBCフラグなどのブロックレベルフラグを使用してシグナリングされ得る。一実施形態では、現在のブロックが明示的にコーディングされるとき、ブロックレベルフラグがシグナリングされる。いくつかの例では、ブロックレベルでのイントラブロックコピーの使用は、参照インデックスの手法を使用してシグナリングされ得る。デコーディング中の現在のピクチャは、その後、参照ピクチャまたは特殊な参照ピクチャとして扱われる。一例では、このような参照ピクチャは、参照ピクチャのリストの最後の位置に置かれる。特殊な参照ピクチャは、他の時間的な参照ピクチャと一緒に、デコードされたピクチャバッファ(DPB:decoded picture buffer)などのバッファで管理される。
IBCモードにはバリエーションがあり得る。一例では、IBCモードは、イントラ予測モードおよびインター予測モードとは異なる第3のモードとして扱われる。したがって、暗黙的モード(またはマージモード)および明示的モードのBV予測は、通常のインターモードから分離される。IBCモードには別個のマージ候補リストが定義されることができ、別個のマージ候補リスト内のエントリはBVである。同様に、一例では、IBC明示的モードのBV予測候補リストはBVのみを含む。これら2つのリスト(すなわち、別個のマージ候補リストおよびBV予測候補リスト)に適用される一般的な規則は、これら2つのリストが、候補導出プロセスに関して、通常のマージモードで使用されるマージ候補リストまたは通常のAMVPモードで使用されるAMVP予測子リストと同じ論理に従い得るということである。例えば、IBCモードの別個のマージ候補リストを導出するために、5つの空間的に隣接する位置(例えば、図2のA0、A1、およびB0、B1、B2)、例えば、HEVCまたはVVC相互マージモードがIBCモードのためにアクセスされる。
前述したように、ピクチャにおいて再構成中の現在のブロックのBVは、いくつかの制約がある可能性があり、したがって、現在のブロックの参照ブロックは探索範囲内にある。探索範囲とは、参照ブロックを選択できるピクチャの一部のことを指す。例えば、探索範囲は、ピクチャにおける再構成されたエリアのいくつかの部分の中にあってもよい。探索範囲のサイズ、位置、形状などは制約され得る。あるいは、BVが制約され得る。一例では、BVはxおよびy成分を含む二次元ベクトルであり、xおよびy成分の少なくとも一方が制約され得る。制約は、BV、探索範囲、またはBVと探索範囲との組合せに対して指定され得る。様々な例において、BVに対していくつかの制約が指定されると、これに従って探索範囲が制約される。同様に、探索範囲に対していくつかの制約が指定されると、これに従ってBVが制約される。
図9は、本開示の実施形態によるイントラブロックコピーの例を示す。現在のピクチャ(900)は、デコーディング中に再構成される。現在のピクチャ(900)は、再構成されたエリア(910)(灰色のエリア)と、デコーディング対象エリア(920)(白色のエリア)とを含む。現在のブロック(930)は、デコーダによって再構成中である。現在のブロック(930)は、再構成されたエリア(910)にある参照ブロック(940)から再構成され得る。参照ブロック(940)と現在のブロック(930)との間の位置オフセットは、ブロックベクトル(950)(またはBV(950))と呼ばれる。図9の例では、探索範囲(960)は、再構成されたエリア(910)内にあり、参照ブロック(940)は、探索範囲(960)内にあり、ブロックベクトル(950)は、探索範囲(960)内にある参照ブロック(940)を指すように制約される。
BVおよび/または探索範囲には、様々な制約が適用され得る。一実施形態では、現在のCTBにおける再構成中の現在のブロックに対する探索範囲は、現在のCTB内になるように制約される。
一実施形態において、イントラブロックコピーに使用される参照サンプルを記憶するのに効率的なメモリ要件は、1CTBサイズである。一例では、CTBサイズは128×128サンプルである。現在のCTBは、再構成中の現在の領域を含む。現在の領域は、64×64サンプルのサイズを有する。参照メモリは、再構成されたサンプルを現在の領域にさらに記憶できるので、参照メモリは、参照メモリサイズが、128×128サンプルのCTBサイズと等しいときは、64×64のサンプルをさらに3領域記憶することができる。したがって、探索範囲は、以前に再構成されたCTBのいくつかの部分を含むことができ、参照サンプルを記憶するための総メモリ要件は変化しない(128×128サンプルの1CTBサイズ、または64×64の合計4つの参照サンプルなど)。一例では、図10に示すように、以前に再構成されたCTBが現在のCTBの左隣にある。
図10は、本開示の実施形態によるイントラブロックコピーの例を示す。現在のピクチャ(1001)は、再構成中の現在のCTB(1015)と、現在のCTB(1015)の左隣にある、以前に再構成されたCTB(1010)とを含む。現在のピクチャ(1001)内のCTBは、128×128サンプルなどのCTBサイズ、および128サンプルなどのCTB幅を有する。現在のCTB(1015)は、4つの領域(1016)~(1019)を含み、現在の領域(1016)は再構成中である。現在の領域(1016)は、複数のコーディングブロック(1021)~(1029)を含む。同様に、以前に再構成されたCTB(1010)も4つの領域(1011)~(1014)を含む。コーディングブロック(1021)~(1025)は既に再構成されており、現在のブロック(1026)は再構成中であり、コーディングブロック(1026)~(1027)、および領域(1017)~(1019)はこれから再構成される。
現在の領域(1016)は、並置領域(すなわち以前に再構成されたCTB(1010)内の領域(1011))を有する。以前に再構成されたCTB(1010)に対する並置領域(1011)の相対位置は、現在のCTB(1015)に対する現在の領域(1016)の相対位置と同一であってもよい。図10に示す例では、現在の領域(1016)は、現在のCTB(1015)の左上領域であり、したがって並置領域(1011)もまた、以前に再構成されたCTB(1010)の左上領域である。以前に再構成されたCTB(1010)の位置は、現在のCTB(1015)の位置からCTB幅だけオフセットされているので、並置領域(1011)の位置は、現在の領域(1016)の位置からCTB幅だけオフセットされる。
一実施形態では、現在の領域(1016)の並置領域は、以前に再構成されたCTBにあり、以前に再構成されたCTBの位置は、現在のCTB(1015)の位置からCTB幅1つ分、または倍数分オフセットされており、したがって、並置領域の位置もまた、現在の領域(1016)の位置から対応するCTB幅1つ分、または倍数分オフセットされている。並置領域の位置は、現在の領域(1016)から、左シフトさせたり、上シフトさせたりすることができる。
前述したように、現在のブロック(1026)に対する探索範囲のサイズは、CTBサイズによって制約される。いくつかの実施形態では、探索範囲のサイズを他のサイズに制約され得る。図10の例では、探索範囲は、以前に再構成されたCTB(1010)内の領域(1012)~(1014)、およびコーディングブロック(1021)~(1025)などの、既に再構成された現在の領域(1016)の一部を含むことができる。探索範囲から並置領域(1011)をさらに除外するので、探索範囲のサイズはCTBサイズ内に収まる。図10を参照すると、参照ブロック(1091)は、以前に再構成されたCTB(1010)の領域(1014)に配置される。ブロックベクトル(1020)は、現在のブロック(1026)と、それぞれの参照ブロック(1091)との間のオフセットを示す。参照ブロック(1091)は探索範囲内にある。
図10に示す例は、現在の領域が現在のCTB(1015)内の別の位置に置かれる他の状況に適切に適応され得る。一例では、現在のブロックが領域(1017)にあるとき、現在のブロックの並置領域は領域(1012)である。したがって、探索範囲は領域(1013)~(1014)、領域(1016)、および既に再構成された領域(1017)の一部を含むことができる。探索範囲から領域(1011)および並置領域(1012)をさらに除外するので、探索範囲のサイズはCTBサイズ内に収まる。一例では、現在のブロックが領域(1018)にあるとき、現在のブロックの並置領域は領域(1013)である。したがって、探索範囲は領域(1014)、領域(1016)~(1017)、および既に再構成された領域(1018)の一部を含むことができる。探索範囲から領域(1011)~(1012)および並置領域(1013)をさらに除外するので、探索範囲のサイズはCTBサイズ内に収まる。一例では、現在のブロックが領域(1019)にあるとき、現在のブロックの並置領域は領域(1014)である。したがって、探索範囲は領域(1016)~(1018)、および既に再構成された領域(1019)の一部を含むことができる。探索範囲から以前に再構成されたCTB(1010)をさらに除外するので、探索範囲のサイズはCTBサイズ内に収まる。
前述の説明では、参照ブロックは、以前に再構成されたCTB(1010)または現在のCTB(1015)にあってもよい。
図11は、本開示の実施形態によるイントラブロックコピーの例を示す。現在のピクチャ(1101)は、再構成中の現在のCTB(1115)と、現在のCTB(1115)の左隣にある、以前に再構成されたCTB(1110)とを含む。現在のピクチャ(1101)内のCTBは、CTBサイズおよびCTB幅を有する。現在のCTB(1115)は4つの領域(1116)~(1119)を含み、現在の領域(1116)は再構成中である。現在の領域(1116)は、複数のコーディングブロック(1121)~(1129)を含む。同様に、以前に再構成されたCTB(1110)も4つの領域(1111)~(1114)を含む。再構成中の現在のブロック(1121)は、現在の領域(1116)で最初に再構成され、それからコーディングブロック(1122)~(1129)が再構成される。一例では、CTBサイズは128×128サンプルで、領域(1111)~(1114)および(1116)~(1119)はそれぞれ64×64サンプルである。参照メモリサイズはCTBサイズと等しい128×128サンプルであり、したがって探索範囲は、参照メモリサイズによって境界を定められるときは、3つの領域と、追加領域の一部とを含む。
同様に、図10を参照して説明したように、現在の領域(1116)は、並置領域(すなわち以前に再構成されたCTB(1110)内の領域(1111))を有する。現在のブロック(1121)に対する参照ブロックは領域(1111)内に存在し得るので、探索範囲は、領域(1111)~(1114)を含み得る。例えば、参照ブロックが領域(1111)にあるときは、参照ブロックの並置領域は領域(1116)であり、領域(1116)内に、現在のブロック(1121)が再構成される前に再構成されているサンプルはない。しかしながら、図10を参照して説明したように、例えば、コーディングブロック(1121)の再構成後、コーディングブロック(1122)を再構成するための探索範囲に領域(1111)を含めることができなくなる。したがって、参照メモリバッファの厳密な同期およびタイミング制御が使用され、これは困難な場合がある。
いくつかの実施形態によれば、現在のブロックが、現在のCTBの現在の領域で最初に再構成されるときは、以前に再構成されたCTB内にある現在の領域の並置領域を探索範囲から除外でき、現在のCTBおよび以前に再構成されたCTBは、同じ現在のピクチャにある。ブロックベクトルは、参照ブロックが、以前に再構成されたCTB内の並置領域を除外した探索範囲内にあるように決定され得る。一実施形態では、探索範囲は、並置領域の後、かつ現在のブロックの前にデコーディング順序で再構成されたコーディングブロックを含む。
以下の説明では、CTBサイズは変更でき、最大CTBサイズは参照メモリサイズと同一に設定される。一例では、参照メモリサイズまたは最大CTBサイズは、128×128サンプルである。説明は、他の参照メモリサイズまたは最大CTBサイズに適切に適応され得る。
一実施形態では、CTBサイズは参照メモリサイズと等しい。以前に再構成されたCTBは現在のCTBの左隣にあり、並置領域の位置は現在の領域の位置からCTB幅だけオフセットされ、探索範囲内のコーディングブロックは、現在のCTBおよび以前に再構成されたCTBのうちの少なくとも一方にある。
図12A~図12Dは、本開示の実施形態によるイントラブロックコピーの例を示す。図12A~図12Dを参照すると、現在のピクチャ(1201)は、再構成中の現在のCTB(1215)と、現在のCTB(1215)の左隣にある、以前に再構成されたCTB(1210)とを含む。現在のピクチャ(1201)内のCTBは、CTBサイズおよびCTB幅を有する。現在のCTB(1215)は、4つの領域(1216)~(1219)を含む。同様に、以前に再構成されたCTB(1210)も4つの領域(1211)~(1214)を含む。一実施形態では、CTBサイズは最大CTBサイズであり、参照メモリサイズと等しい。一例では、CTBサイズおよび参照メモリサイズは128×128サンプルであり、したがって各領域(1211)~(1214)および(1216)~(1219)は、64×64サンプルのサイズを有する。
図12A~図12Dに示す例では、現在のCTB(1215)は、領域(1216)~(1219)にそれぞれ対応する、左上領域と、右上領域と、左下領域と、右下領域とを含む。以前に再構成されたCTB(1210)は、領域(1211)~(1214)にそれぞれ対応する、左上領域と、右上領域と、左下領域と、右下領域とを含む。
図12Aを参照すると、現在の領域(1216)が再構成中である。現在の領域(1216)は、複数のコーディングブロック(1221)~(1229)を含むことができる。現在の領域(1216)は、並置領域、すなわち以前に再構成されたCTB(1210)内の領域(1211)を有する。再構成されるべきコーディングブロック(1221)~(1229)のうちの1つの探索範囲から、並置領域(1211)を除外することができる。探索範囲は、デコーディング順序で並置領域(1211)の後、かつ現在の領域(1216)の前に再構成された、以前に再構成されたCTB(1210)の領域(1212)~(1214)を含むことができる。
図12Aを参照すると、並置領域(1211)の位置は、現在の領域(1216)の位置から、128サンプルなどCTB幅だけオフセットされている。例えば、並置領域(1211)の位置は、現在の領域(1216)の位置から128サンプル分左シフトされている。
図12Aを再度参照すると、現在の領域(1216)が現在のCTB(1215)の左上領域にあるとき、並置領域(1211)は、以前に再構成されたCTB(1210)の左上領域にあり、探索領域は、以前に再構成されたCTBの左上領域を除外する。
図12Bを参照すると、現在の領域(1217)が再構成中である。現在の領域(1217)は、複数のコーディングブロック(1241)~(1249)を含むことができる。現在の領域(1217)は、並置領域(すなわち以前に再構成されたCTB(1210)内の領域(1212))を有する。複数のコーディングブロック(1241)~(1249)のうちの1つの探索範囲から、並置領域(1212)を除外することができる。探索範囲は、以前に再構成されたCTB(1210)の領域(1213)~(1214)と、並置領域(1212)の後、かつ現在の領域(1217)の前に再構成された、現在のCTB(1215)内の領域(1216)とを含む。参照メモリサイズ(すなわち1CTBサイズ)の制約により、探索範囲から領域(1211)をさらに除外する。同様に、並置領域(1212)の位置は、現在の領域(1217)の位置から、128サンプルなどCTB幅だけオフセットされている。
図12Bの例では、現在の領域(1217)が現在のCTB(1215)の右上領域にあり、並置領域(1212)もまた、以前に再構成されたCTB(1210)の右上領域にあり、探索領域から、以前に再構成されたCTB(1210)の右上領域を除外する。
図12Cを参照すると、現在の領域(1218)が再構成中である。現在の領域(1218)は、複数のコーディングブロック(1261)~(1269)を含むことができる。現在の領域(1218)は、以前に再構成されたCTB(1210)内の並置領域(すなわち、領域(1213))を有する。複数のコーディングブロック(1261)~(1269)のうちの1つの探索範囲から、並置領域(1213)を除外することができる。探索範囲は、以前に再構成されたCTB(1210)の領域(1214)と、並置領域(1213)の後、かつ現在の領域(1218)の前に再構成された、現在のCTB(1215)内の領域(1216)~(1217)とを含む。同様に、参照メモリサイズの制約により、探索範囲から領域(1211)~(1212)をさらに除外する。並置領域(1213)の位置は、現在の領域(1218)の位置から、128サンプルなどCTB幅だけオフセットされている。図12Cの例では、現在の領域(1218)が現在のCTB(1215)の左下領域にあるときは、並置領域(1213)もまた、以前に再構成されたCTB(1210)の左下領域にあり、探索領域は、以前に再構成されたCTB(1210)の左下領域を除外する。
図12Dを参照すると、現在の領域(1219)が再構成中である。現在の領域(1219)は、複数のコーディングブロック(1281)~(1289)を含むことができる。現在の領域(1219)は、以前に再構成されたCTB(1210)内の並置領域(すなわち、領域(1214))を有する。複数のコーディングブロック(1281)~(1289)のうちの1つの探索範囲から、並置領域(1214)を除外することができる。探索範囲は、デコーディング順序で並置領域(1214)の後、かつ現在の領域(1219)の前に再構成された、現在のCTB(1215)内の領域(1216)~(1218)を含む。参照メモリサイズの制約により、探索範囲から領域(1211)~(1213)を除外し、したがって探索範囲から、以前に再構成されたCTB(1210)を除外する。同様に、並置領域(1214)の位置は、現在の領域(1219)の位置から、128サンプルなどCTB幅だけオフセットされている。図12Dの例では、現在の領域(1219)が現在のCTB(1215)の右下領域にあるときは、並置領域(1214)もまた、以前に再構成されたCTB(1210)の右下領域にあり、探索領域は、以前に再構成されたCTB(1210)の右下領域を除外する。
図13は、本開示の一実施形態によるストリングコピーモードの一例を示す。ストリングコピーモードは、ストリングマッチングモード、ストリング内コピーモード、またはストリング予測とも呼ばれ得る。現在のピクチャ(1310)は、再構成された領域(灰色のエリア)(1320)と、再構成中の領域(1321)とを含む。領域(1321)内の現在のブロック(1335)が再構成中である。現在のブロック(1335)は、CB、CUなどであり得る。現在のブロック(1335)は、複数のストリング(例えば、ストリング(1330)および(1331))を含むことができる。一例では、現在のブロック(1335)は複数の連続したストリングに分割され、走査順序に沿ってあるストリングの後に次のストリングが続く。走査順序は、ラスタ走査順序、トラバース走査順序、または別の所定の走査順序などの任意の適切な走査順序とすることができる。
再構成された領域(1320)は、ストリング(1330)およびストリング(1331)を再構成するための参照エリアとして使用され得る。
複数のストリングの各々について、ストリングオフセットベクトル(SVと呼ばれる)および/またはストリングの長さ(ストリング長と呼ばれる)がシグナリングまたは推測され得る。SV(例えば、SV0)は、再構成されるストリング(例えば、ストリング(1330))と、既に再構成された参照エリア(1320)内に位置するそれぞれの参照ストリング(例えば、参照ストリング(1300))との間の変位を示す変位ベクトルとすることができる。参照ストリングは、再構成されるべきストリングを再構成するために使用され得る。よって、SVは、対応する参照ストリングが参照エリア(1320)内のどこに位置するかを示すことができる。ストリング長は、参照ストリングの長さに対応することもできる。図13を参照すると、現在のブロック(1335)は、64サンプルを含む8×8 CBであり、ラスタ走査順序を使用して2つのストリング(例えば、ストリング(1330)および(1331))に分割される。ストリング(1330)は現在のブロック(1335)の最初の29個のサンプルを含み、ストリング(1331)は現在のブロック(1335)の残りの35個のサンプルを含む。ストリング(1330)を再構成するために使用される参照ストリング(1300)は、対応するストリングベクトルSV0によって示されることができ、ストリング(1331)を再構成するために使用される参照ストリング(1301)は、対応するストリングベクトルSV1によって示されることができる。
一般に、ストリングサイズ(ストリング長とも呼ばれる)は、ストリングの長さまたはストリング内のサンプル数を指すことができる。図13を参照すると、ストリング(1330)は29個のサンプルを含み、よってストリング(1330)のストリングサイズは29である。ストリング(1331)は35個のサンプルを含み、よってストリング(1331)のストリングサイズは35である。ストリングロケーション(またはストリング位置)は、ストリング内のサンプル(例えば、デコーディング順序で最初のサンプル)のサンプル位置によって表され得る。
前述の説明は、任意の適切な数のストリングを含む現在のブロックを再構成するように適切に適応され得る。一例では、現在のブロック内のサンプルが参照エリア内に一致するサンプルを有しない場合、エスケープサンプル(またはエスケープ画素)がシグナリングされ、参照エリア内の再構成されたサンプルを参照せずにエスケープサンプルの値が直接コーディングされ得る。一例では、ブロックは、複数のストリングと1つまたは複数のエスケープサンプルとを含み、複数のストリングはストリングコピーモードを使用して再構成され、1つまたは複数のエスケープサンプルは直接コーディングされ、ストリングコピーモードを使用して予測されない。1つまたは複数のエスケープサンプルは、ブロック内の任意の適切な位置に配置され得る。一例では、ブロック内の1つまたは複数のエスケープサンプルは、複数のストリングの外側に配置される。
高レベルシンタックス(HLS:high level syntax)は、低レベルコーディングレイヤによって共有され得るパラメータを指定することができる。例えば、CTUサイズ(CBの最大サイズでもある)は、シーケンスレベルまたはシーケンスパラメータセット(SPS)で指定され、あるピクチャから別のピクチャに変更されない。HLSは、高レベルに対応することができる。高レベル(またはハイレベル)は、ブロックレベルよりも高くすることができる。高レベルは、ビデオシーケンス(またはシーケンスレベル)、1つまたは複数のピクチャ、ピクチャ(またはピクチャレベル)、スライス(またはスライスレベル)、タイルグループ(またはタイルグループレベル)、タイル(またはタイルレベル)、CTU(またはCTUレベル)などに対応することができる。一般に、HLSは、SPS、ピクチャパラメータセット(PPS)、ピクチャヘッダ、スライスヘッダ、適応パラメータセット(APS:adaptive parameter set)などを含むことができる。一例では、HLSは、タイル、タイルグループ、または同様のサブピクチャレベルに対応する。一例では、HLSはCTUに対応する。
各HLSは、特定のカバレッジ範囲を有することができる。例えば、PPSは、1つまたは複数のピクチャによって共有され得る共通シンタックス要素を指定し得る。ピクチャヘッダは、ピクチャにおいて使用される共通シンタックス要素を指定し得る。第1のレベルに対応する第1のHLSは、第2のレベルが第1のレベルよりも高く、第2のHLSによってカバーされる第2の範囲が第1のHLSによってカバーされる第1の範囲を含む第2のレベルに対応する第2のHLSに提供されるシンタックス要素をオーバーライドすることができる。例えば、ピクチャヘッダに対するHLS(ピクチャヘッダHLSとも呼ばれる)は、現在のピクチャが参照するPPS内のシンタックス要素をオーバーライドすることができ、第1のHLSはピクチャヘッダHLSであり、第2のHLSはPPSである。一例では、現在のピクチャに属するスライスヘッダは、同じ現在のピクチャのピクチャヘッダで割り当てられているシンタックス要素またはパラメータをオーバーライドすることができる。
図14は、本開示の一実施形態による、SPS(1401)、ピクチャヘッダ(1411)および(1421)、ならびにブロックレベルシンタックス(例えば、ブロックデータ(1412(1)~(n))およびブロックデータ(1422(1)~(m)))を含む例示的なビットストリーム構造(1400)を示す。パラメータnおよびmは、任意の適切な正の整数であり得る。パラメータnおよびmは、同一であっても異なっていてもよい。ブロックデータ(1412(1)~(n))、(1422(1)~(m))は、ブロックの残差、ブロックのコーディングに用いられるサイド情報(または制御情報)などのデータを含み得る。図14を参照すると、SPS(1401)は、第1のピクチャおよび第2のピクチャなどの複数のピクチャを含むビデオシーケンスに対応する。第1のピクチャはブロック1~nを含むことができ、第2のピクチャはブロック1~mを含むことができる。
ブロック1~nおよび1~mをコーディングするために使用されるシンタックス要素は、SPS(1401)ならびにピクチャヘッダ(1411)および(1421)などの様々なHLSに含まれ得る。ブロック1~nおよび1~mをコーディングするために使用されるシンタックス要素は、それぞれブロックデータ(1412(1)~(n))および(1422(1)~(m))などのブロックレベルのシンタックスに含まれることもできる。したがって、第1のピクチャのピクチャデータ(1410)は、ピクチャヘッダ(1411)とそれに続くブロックデータ(1412(1)~(n))を含む。第2のピクチャのピクチャデータ(1420)は、ピクチャヘッダ(1421)と、それに続くブロックデータ(1422(1)~(n))とを含むことができる。
SPS(1401)は、ビデオシーケンスによって共有され得る共通のシンタックス要素を指定することができる。ピクチャヘッダ(1411)は、第1のピクチャにおいて使用される共通シンタックス要素を指定することができる。ピクチャヘッダ(1421)は、第2のピクチャにおいて使用される共通のシンタックス要素を指定することができる。一例では、ピクチャヘッダ(1411)内のシンタックス要素は、SPS(1401)内の対応するシンタックス要素をオーバーライドする。一例では、ブロックデータ(例えば、(1412(2)))内のシンタックス要素は、ピクチャヘッダ(1411)内の対応するシンタックス要素をオーバーライドする。
図15Aおよび図15Bは、本開示の一実施形態による例示的なシンタックステーブル(1500)を示す図である。シンタックステーブル(1500)は、適切な高レベルの適切なHLSに対応することができる。シンタックステーブル(1500)は、特定の定義されたプロファイルに含まれるコーディングツールのためのフラグ(またはコーディングツール有効化フラグ)を含むことができる。1つまたは複数のフラグがシグナリングされ得る。例えば、シンタックステーブル(1500)は、SPSを含むSPSシンタックステーブルである。AVS3などの例では、シンタックステーブル(1500)は、特定の定義されたプロファイルに含まれるコーディングツールのSPSフラグのセットを示す。
各フラグを使用して、ビットストリーム内の特定のコーディングツールを有効化(例えば、フラグを1に設定することによって)または無効化(例えば、フラグを0に設定することによって)することができる。フラグがビットストリーム内に提示されない場合、フラグは無効化されている(例えば、フラグの値は0である)と推測され得る。フラグに対応する変数(またはコーディングツール変数)は、フラグと等しく設定され得る。一例では、フラグに対応する変数はシグナリングされず、フラグから導出される。一例では、フラグに対応する変数は変更可能であり、フラグは変更されない。
一例では、カメラ捕捉コンテンツをコーディングするために考慮される第1のセットのコーディングツール有効化フラグは、eipm_enable_flag、dmvr_enable_flag、bio_enable_flag、affine_umve_enable_flag、etmvp_enable_flag、subtmvp_enable_flag、st_chroma_enable_flag、ipf_chroma_enable_flag、ealf_enable_flag、sp_enable_flag、およびiip_enable_flagなどのフラグを含むが、これらに限定されない。以下に説明するように、第1のセットのコーディングツール有効化フラグは、第1のセットのコーディングツールに対応することができる。第1のセットのコーディングツールは、カメラ捕捉コンテンツをコーディングするための任意の適切なコーディングツールを含むことができる。例えば、第1のセットのコーディングツールは、拡張イントラ予測モード、デコーダ側動きベクトル改善、双方向オプティカルフロー、最終的な動きベクトル表現、エンハンスト時間動きベクトル予測、サブブロックベースの時間動きベクトル予測、クロマセカンダリ変換、クロマイントラ予測フィルタリング、エンハンスト適応ループフィルタリング、アフィンモードのセカンダリ予測、および改善されたイントラ予測モードのうちの1つまたは複数を含むが、これらに限定されない。
第1のセットのコーディングツール有効化フラグの各々は、第1のセットのコーディングツールのそれぞれ1つがビットストリーム内で使用され得るかどうかを示すことができる。例えば、eipm_enable_flagは、拡張イントラ予測モードに対応する。第1のセットのコーディングツールは、カメラ捕捉コンテンツをコーディングするために使用されることができ、カメラ捕捉コンテンツコーディングツールと呼ばれ得る。
一例では、画面コンテンツをコーディングするために考慮される第2のセットのコーディングツール有効化フラグは、ibc_enable_flag、isc_enable_flag、fimc_enable_flag、およびists_enable_flagなどのフラグを含む。第2のセットのコーディングツール有効化フラグは、後述するように、第2のセットのコーディングツール(画面コンテンツコーディング(SCC:screen content coding)ツールとも呼ばれる)に対応することができる。第2のセットのコーディングツール有効化フラグの各々は、第2のセットのコーディングツールのそれぞれ1つがビットストリーム内で使用され得るかどうかを示すことができる。例えば、ibc_enable_flagは、ブロック内コピーモードに対応する。第2のセットのコーディングツール(またはSCCツール)は、画面コンテンツをコーディングするために使用され得る。一例では、第1のセットのコーディングツールは、画面コンテンツをコーディングするよりも効率的にカメラ捕捉コンテンツをコーディングするために使用され得る。
シンタックステーブル(1500)内のフラグのサブセットのセマンティクスは以下のように列挙され、シンタックステーブル(1500)内のフラグのサブセットは、第1のセットのコーディングツール有効化フラグおよび第2のセットのコーディングツール有効化フラグを含む。
eipm_enable_flagは、拡張イントラ予測モードがビットストリームにおいて、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。eipm_enable_flagが1に等しいことは、拡張イントラ予測モードがビットストリームにおいて、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得ることを示すことができる。eipm_enable_flagが0に等しいことは、拡張イントラ予測モードがビットストリームにおいて、例えば高レベルで使用され得ないことを示すことができる。eipm_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、eipm_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)EipmEnableFlagは、eipm_enable_flagと等しく設定され得る。一例では、変数EipmEnableFlagはシグナリングされず、eipm_enable_flagから導出される。一例では、変数EipmEnableFlagは変更可能であり、eipm_enable_flagは変更されない。
dmvr_enable_flagは、デコーダ側動きベクトル改善がビットストリームにおいて、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。dmvr_enable_flagが1に等しいことは、デコーダ側動きベクトル改善がビットストリームにおいて、例えば高レベルで使用され得ることを示すことができる。dmvr_enable_flagが0に等しいことは、デコーダ側動きベクトル改善がビットストリームにおいて、例えば高レベルで使用され得ないことを示すことができる。dmvr_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、dmvr_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)DmvrEnableFlagは、dmvr_enable_flagと等しく設定され得る。一例では、変数DmvrEnableFlagはシグナリングされず、dmvr_enable_flagから導出される。一例では、変数DmvrEnableFlagは変更可能であり、dmvr_enable_flagは変更されない。
bio_enable_flagは、双方向オプティカルフローがビットストリーム内で、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。bio_enable_flagが1に等しいことは、双方向オプティカルフローがビットストリーム内で、例えば高レベルで使用され得ることを示すことができる。bio_enable_flagが0に等しいことは、双方向オプティカルフローがビットストリーム内で、例えば高レベルで使用され得ないことを示すことができる。bio_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、bio_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)BioEnableFlagは、bio_enable_flagと等しく設定され得る。一例では、変数BioEnableFlagはシグナリングされず、bio_enable_flagから導出される。一例では、変数BioEnableFlagは変更可能であり、bio_enable_flagは変更されない。
affine_umve_enable_flagは、アフィンモードの最終的な動きベクトル表現がビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。affine_umve_enable_flagが1に等しいことは、アフィンモードの最終的な動きベクトル表現がビットストリームで、例えば高レベルで使用され得ることを示すことができる。affine_umve_enable_flagが0に等しいことは、アフィンモードの最終的な動きベクトル表現がビットストリームで、例えば高レベルで使用され得ないことを示すことができる。affine_umve_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、affine_umve_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)AffineUmveEnableFlagは、affine_umve_enable_flagと等しく設定され得る。一例では、変数AffineUmveEnableFlagはシグナリングされず、affine_umve_enable_flagから導出される。一例では、変数AffineUmveEnableFlagを変更可能であり、affine_umve_enable_flagは変更されない。
etmvp_enable_flagは、エンハンスト時間動きベクトル予測がビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。etmvp_enable_flagが1に等しいことは、アフィンモードのエンハンスト時間動きベクトル予測がビットストリームで、例えば高レベルで使用され得ることを示すことができる。etmvp_enable_flagが0に等しいことは、エンハンスト時間動きベクトル予測がビットストリームで、例えば高レベルで使用され得ないことを示すことができる。etmvp_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、etmvp_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)EtmvpEnableFlagは、etmvp_enable_flagと等しく設定され得る。一例では、変数EtmvpEnableFlagはシグナリングされず、etmvp_enable_flagから導出される。一例では、変数EtmvpEnableFlagを変更可能であり、etmvp_enable_flagは変更されない。
subtmvp_enable_flagは、サブブロックベースの時間動きベクトル予測がビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。subtmvp_enable_flagが1に等しいことは、アフィンモードのサブブロックベースの時間動きベクトル予測がビットストリームで、例えば高レベルで使用され得ることを示すことができる。subtmvp_enable_flagが0に等しいことは、サブブロックベースの時間動きベクトル予測がビットストリームで、例えば高レベルで使用され得ないことを示すことができる。subtmvp_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、subtmvp_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)SubTmvpEnableFlagは、subtmvp_enable_flagと等しく設定され得る。一例では、変数SubTmvpEnableFlagはシグナリングされず、subtmvp_enable_flagから導出される。一例では、変数SubTmvpEnableFlagは変更可能であり、subtmvp_enable_flagは変更されない。
st_chroma_enable_flagは、クロマセカンダリ変換がビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。st_chroma_enable_flagが1に等しいことは、クロマセカンダリ変換がビットストリームで、例えば高レベルで使用され得ることを示すことができる。st_chroma_enable_flagが0に等しいことは、クロマセカンダリ変換がビットストリームで、例えば高レベルで使用され得ないことを示すことができる。st_chroma_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、st_chroma_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)StChromaEnableFlagは、st_chroma_enable_flagと等しく設定することができる。一例では、変数StChromaEnableFlagはシグナリングされず、st_chroma_enable_flagから導出される。一例では、変数StChromaEnableFlagは変更可能であり、st_chroma_enable_flagは変更されない。
ipf_chroma_enable_flagは、クロマイントラ予測フィルタリングがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。ipf_chroma_enable_flagが1であることは、クロマイントラ予測フィルタリングがビットストリームで、例えば高レベルで使用され得ることを示すことができる。ipf_chroma_enable_flagが0であることは、クロマイントラ予測フィルタリングがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。ipf_chroma_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、ipf_chroma_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)IpfChromaEnableFlagは、ipf_chroma_enable_flagと等しく設定することができる。一例では、変数IpfChromaEnableFlagはシグナリングされず、ipf_chroma_enable_flagから導出される。一例では、変数IpfChromaEnableFlagは変更可能であり、ipf_chroma_enable_flagは変更されない。
ealf_enable_flagは、エンハンスト適応ループフィルタリングがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。ealf_enable_flagが1に等しいことは、エンハンスト適応ループフィルタリングがビットストリームで、例えば高レベルで使用され得ることを示すことができる。ealf_enable_flagが0に等しいことは、エンハンスト適応ループフィルタリングがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。ealf_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、ealf_enable_flagの値(またはコーディングツール変数)は0であると推論され得る。変数EalfEnableFlagは、ealf_enable_flagと等しく設定され得る。一例では、変数EalfEnableFlagはシグナリングされず、ealf_enable_flagから導出される。一例では、変数EalfEnableFlagは変更可能であり、ealf_enable_flagは変更されない。
sp_enable_flagは、アフィンモードのセカンダリ予測がビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。sp_enable_flagが1に等しいことは、アフィンモードのセカンダリ予測がビットストリームで、例えば高レベルで使用され得ることを示すことができる。sp_enable_flagが0に等しいことは、アフィンモードのセカンダリ予測がビットストリームで、例えば高レベルで使用され得ないことを示すことができる。sp_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、sp_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)SpEnableFlagは、sp_enable_flagと等しく設定することができる。一例では、変数SpEnableFlagはシグナリングされず、sp_enable_flagから導出される。一例では、変数SpEnableFlagは変更可能であり、sp_enable_flagは変更されない。
iip_enable_flagは、改善されたイントラ予測モードがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。iip_enable_flagが1に等しいことは、改善されたイントラ予測モードがビットストリームで、例えば高レベルで使用され得ることを示すことができる。iip_enable_flagが0に等しいことは、改善されたイントラ予測モードがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。iip_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、iip_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)IipEnableFlagは、iip_enable_flagと等しく設定することができる。一例では、変数IipEnableFlagはシグナリングされず、iip_enable_flagから導出される。一例では、変数IipEnableFlagは変更可能であり、iip_enable_flagは変更されない。
ibc_enable_flagは、ブロック内コピー(IBC)モードがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。ibc_enable_flagが1に等しいことは、IBCモードがビットストリームで、例えば高レベルで使用され得ることを示すことができる。ibc_enable_flagが0に等しいことは、IBCモードがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。ibc_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、ibc_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)IbcEnableFlagは、ibc_enable_flagと等しく設定され得る。一例では、変数IbcEnableFlagはシグナリングされず、ibc_enable_flagから導出される。一例では、変数IbcEnableFlagは変更可能であり、ibc_enable_flagは変更されない。
isc_enable_flagは、ストリング内コピーモードがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。isc_enable_flagが1に等しいことは、ストリング内コピーモードがビットストリームで、例えば高レベルで使用され得ることを示すことができる。isc_enable_flagが0に等しいことは、ストリング内コピーモードがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。isc_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、isc_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)IscEnableFlagは、isc_enable_flagと等しく設定され得る。一例では、変数IscEnableFlagはシグナリングされず、isc_enable_flagから導出される。一例では、変数IscEnableFlagは変更可能であり、isc_enable_flagは変更されない。
fimc_enable_flagは、周波数ベースのイントラモードコーディングがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。fimc_enable_flagが1に等しいことは、周波数ベースのイントラモードコーディングがビットストリームで、例えば高レベルで使用され得ることを示すことができる。fimc_enable_flagが0に等しいことは、周波数ベースのイントラモードコーディングがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。fimc_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、fimc_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)FimcEnableFlagは、fimc_enable_flagと等しく設定され得る。一例では、変数FimcEnableFlagはシグナリングされず、fimc_enable_flagから導出される。一例では、変数FimcEnableFlagは変更可能であり、fimc_enable_flagは変更されない。
ists_enable_flagは、暗黙的なシグナリングされた変換スキップモードがビットストリームで、例えば高レベル(例えば、ビデオシーケンスのSPSレベル)で使用され得るかどうかを示すことができる。ists_enable_flagが1に等しいことは、暗黙的なシグナリングされた変換スキップモードがビットストリームで、例えば高レベルで使用され得ることを示すことができる。ists_enable_flagが0に等しいことは、暗黙的なシグナリングされた変換スキップモードがビットストリームで、例えば高レベルで使用され得ないことを示すことができる。ists_enable_flagが存在しない(例えば、シンタックステーブル(1500)でシグナリングされない)場合、ists_enable_flagの値は0であると推測され得る。変数(またはコーディングツール変数)IstsEnableFlagは、ists_enable_flagと等しく設定され得る。一例では、変数IstsEnableFlagはシグナリングされず、ists_enable_flagから導出される。一例では、変数IstsEnableFlagは変更可能であり、ists_enable_flagは変更されない。
いくつかの例では、それぞれのコーディングツールの有効化フラグ(例えば、affine_umve_enable_flag)をシグナリングするかどうかは、1つまたは複数の追加の条件に依存し得る。1つまたは複数の追加の条件は、他のコーディングツールがビットストリームにおいて使用され得るかどうかを含むことができる。図15Aのボックス(1510)は、affine_umve_enable_flagをシグナリングするかどうかが、AffineEnableFlagおよびUmveEnableFlagの2つの変数に依存することを示す。一例では、変数AffineEnableFlagは、アフィンモードがビットストリームで使用され得るかどうかを示すことができ、変数UmveEnableFlagは、最終的な動きベクトル表現がビットストリームで使用され得るかどうかを示すことができる。
上述したように、シンタックステーブル(1500)は、適切な高レベルの適切なHLSに対応することができる。例えば、シンタックステーブル(1500)はSPSシンタックステーブルとすることができる。同様に、ピクチャレベル有効化フラグは、ピクチャレベル有効化フラグに関連付けられたコーディングツールが、ピクチャのために使用され得るかどうかを判定するために、ピクチャのピクチャヘッダ(またはスライスヘッダ)でシグナリングされ得る。
コーディングツールのための下位レベル有効化フラグ(例えば、ピクチャレベル有効化フラグ)の値は、同じコーディングツールのための上位レベル有効化フラグ(例えば、シーケンスレベル有効化フラグまたはSPSフラグ)の値に依存し得る。いくつかの例では、コーディングツールの下位レベル有効化フラグ(例えば、ピクチャレベル有効化フラグ)の値は、同じコーディングツールの上位レベル有効化フラグ(例えば、シーケンスレベル有効化フラグまたはSPSフラグ)の値および1つまたは複数の追加の条件に依存し得る。図15Aのボックス(1510)を参照して上述したように、1つまたは複数の追加の条件は、ビットストリームで他のコーディングツールが使用され得るかどうかを含むことができる。
したがって、上位レベル有効化フラグ(例えば、シーケンスレベル有効化フラグまたはSPSフラグ)が、コーディングツールがビットストリームで使用され得ないことを示す場合、対応するピクチャレベル有効化フラグの値はシグナリングされず、0であると推測され得る。あるいは、対応するピクチャレベル有効化フラグがシグナリングされることができ、シグナリングされる対応するピクチャレベル有効化フラグの値は0である。
上記の説明は、PPS、スライス、タイルグループ、タイル、CTU、またはブロックレベルよりも高い任意の適切なサブピクチャレベルなどの任意の適切な高レベルに適切に適応され得る。一例では、スライスレベル有効化フラグは、スライスレベル有効化フラグに関連付けられたコーディングツールがスライスに使用され得るかどうかを判定するために、ピクチャにおけるスライスのスライスヘッダでシグナリングされ得る。
いくつかの例では、ピクチャにおける各スライスについて各スライスヘッダでシグナリングされる特定の共通シンタックス要素は、特定の共通シンタックス要素が、例えばアプリケーションシナリオの大部分において、あるスライスから別のスライスまで変化しない場合、ピクチャのピクチャヘッダに置かれ得る。
ある種類のビデオコンテンツ(例えば、ビデオ、ピクチャ)をコーディングするために複数のコーディングツールが有効でない場合、複数のコーディングツールは無効化され得る。一例では、複数のコーディングツールの各々は個別に無効化される。一方、コーディングツールのユーザビリティと特定のビデオまたはビデオの種類との関係を識別することは困難である。
画面コンテンツは、コンピュータ生成テキスト、グラフィックス、アニメーションなどのコンピュータ生成コンテンツを含むコンテンツの種類(例えば、ビデオコンテンツ)を指すことができる。画面コンテンツビデオは、コンピュータ生成テキスト、グラフィックス、アニメーションなどの上記の画面コンテンツを含むことができる。いくつかの例では、画面コンテンツは、コンピュータ生成コンテンツ(例えば、コンピュータ生成テキスト、グラフィックス、アニメーションなど)とカメラ捕捉コンテンツ(例えば、カメラ捕捉ビデオ)との混合を指すことができる。いくつかの例では、画面コンテンツビデオは、コンピュータ生成コンテンツに加えて、カメラ捕捉コンテンツ(例えば、カメラ捕捉ビデオ)を含むことができる。
画面コンテンツビデオは、カメラ捕捉ビデオと比較して異なる特性を示すことができる。様々な実施形態において、画面コンテンツビデオ(例えば、コンピュータ生成コンテンツを含む)は、ノイズがなく、鮮明なエッジを有し、および/または複数の繰り返しパターンを有することができる。例えば、テキストおよびグラフィックスが豊富なコンテンツの繰り返しパターンは、画面コンテンツビデオの同じピクチャにおいて頻繁に発生する。ピクチャにおけるブロックを予測するために、等しいまたは類似のパターンを有するピクチャにおける以前に再構成されたブロックを予測子として有することにより、予測誤差を効果的に低減することができ、したがって、画面コンテンツビデオにおけるコーディング効率を改善することができる。
画面コンテンツはカメラ捕捉コンテンツの特性とは異なる特性を有する可能性があるため、カメラ捕捉ビデオ用に主に開発されたビデオコーディングツールは、ビデオコーディングツールが画面コンテンツビデオに適用される場合ほど効率的ではない可能性がある。さらに、SCCツールは、主にカメラ捕捉ビデオ用に開発されたビデオコーディングツールよりも効率的に画面コンテンツビデオをコーディングするように開発され得る。テキストおよびグラフィックを有する典型的な画面コンテンツビデオの場合、同じピクチャは繰り返しパターンを含むことができる。したがって、図9~図11および図12A~図12Dを参照して説明したIBCモードならびに図13を参照して説明したストリングコピーモードが有効となり得る。
SCCツールは、画面コンテンツに適した周波数ベースのイントラモードコーディングおよび変換スキップ(TS:transform skip)モードを含むことができる。
AVS3を含む最近開発されたビデオコーディング規格では、画面コンテンツをサポートするSCCツールが追加されている。SCCツールは、画面コンテンツをコーディングするための任意の適切なコーディングツールを含むことができる。例えば、SCCツールは、IBCモード、ストリングコピーモード、周波数ベースのイントラモードコーディング、TSモード等の組合せを含む。SCCツールは、画面コンテンツビデオをコーディングする際に効率的であり得る。上述したように、カメラ捕捉コンテンツまたはビデオを処理するように設計されたコーディングツールは、画面コンテンツビデオを圧縮するのに有効ではない場合がある。カメラ捕捉コンテンツまたはビデオを処理するように設計されたコーディングツールが画面コンテンツビデオのコーディングに効果がない場合、例えば、エンコーダランタイムを節約するために、カメラ捕捉コンテンツを処理するように設計されたコーディングツールをオフにされ得る。様々な例において、コーディングツールの高レベル有効化フラグは、個別に無効化されるべきである。したがって、例えば複数のコーディングツールのシンタックス要素を無効化することによって、複数のコーディングツールを同時に無効化するようにHLSにおけるシンタックス構造を設計することが有利である。複数のコーディングツールを個別にではなく同時に無効化することにより、エンコーダランタイムを節約し、したがってコーディング効率を改善することができる。例えば、複数のコーディングツールが同時にオフにされる場合、エンコーダは、複数のコーディングツールの有用性を調べる必要がなく、したがって、エンコーダランタイムを節約することができる。画面コンテンツビデオおよびカメラ捕捉ビデオについて例が説明されているが、本開示の他の実施形態では、他のタイプのビデオまたは他の基準のための複数のコーディングツールが同時にオフにされてもよいことに留意されたい。
上述したように、高レベルは、ビデオシーケンス、1つまたは複数のピクチャ、ピクチャ、スライス、タイルグループ、タイル、CTUなどに対応することができる。本開示の態様によれば、高レベルは、シーケンスレベル、ピクチャレベル、またはサブピクチャレベルを指すことができる。サブピクチャレベルは、スライスレベル、タイルレベル、タイルグループレベル、CTUレベルなどを指すことができる。一例では、高レベルは、ブロックレベル(またはブロックのレベル)よりも高いレベルである。高レベル制御フラグは、限定ではないが、SPS、PPS、ピクチャヘッダ、スライスヘッダ、タイル、タイルグループ、サブピクチャレベル、CTUレベルなどの高レベルのうちの1つまたは組合せでシグナリングされるフラグを含むことができる。
一般に、コーディングツール有効化フラグ(例えば、eipm_enable_flag)は、任意の適切なレベル(例えば、図15Aおよび図15Bを参照して説明したようなシーケンスレベル)に対応する任意の適切なシンタックス構造(例えば、SPSシンタックステーブル(1500))で示され(例えば、シグナリングまたは推論され)得る。コーディングツール有効化フラグは、ビットストリーム内の適切なレベルの少なくとも1つのブロックに対してそれぞれのコーディングツールが使用され得るかどうかを示すことができる。それぞれのコーディングツールのコーディングツール有効化フラグの各々は、異なるレベルで異なるシンタックスを有することができる。例えば、拡張イントラ予測モードの場合、ピクチャレベルおよびシーケンスレベルで、シンタックス要素ph_eipm_enable_flagおよびsps_eipm_enable_flagがそれぞれ使用され得る。あるいは、コーディングツール有効化フラグの各々は、異なるレベルで同じシンタックスを有することができる。コーディングツール有効化フラグは、カメラ捕捉コンテンツをコーディングするための第1のセットのコーディングツール有効化フラグと、画面コンテンツをコーディングするための第2のセットのコーディングツール有効化フラグとを含むことができる。
本開示の態様によれば、カメラ捕捉コンテンツをコーディングするための第1のセットのコーディングツール有効化フラグは、フラグ:eipm_enable_flag、dmvr_enable_flag、bio_enable_flag、affine_umve_enable_flag、etmvp_enable_flag、subtmvp_enable_flag、st_chroma_enable_flag、ipf_chroma_enable_flag、ealf_enable_flag、sp_enable_flag、iip_enable_flagなどを含むことができるが、これらに限定されない。
一実施形態では、第1のセットのコーディングツール有効化フラグは、図15Aおよび図15Bを参照して説明したようなシーケンスレベルなど、任意の適切な高レベルに対応する任意の適切なHLSで示され(例えば、シグナリングまたは推論され)得る。第1のセットのコーディングツール有効化フラグのうちの1つは、HLS(例えば、SPS)においてシグナリングされ得る。あるいは、第1のセットのコーディングツール有効化フラグのうちの1つはシグナリングされず、推測される。それぞれのコーディングツールに対する第1のセットのコーディングツール有効化フラグの各々は、異なるレベルで異なるシンタックスを有することができる。例えば、拡張イントラ予測モードの場合、ピクチャレベルおよびシーケンスレベルで、シンタックス要素ph_eipm_enable_flagおよびsps_eipm_enable_flagがそれぞれ使用され得る。あるいは、それぞれのコーディングツールに対する第1のセットのコーディングツール有効化フラグの各々は、異なるレベルで同じシンタックスを有することができる。例えば、拡張イントラ予測モードの場合、ピクチャレベルおよびシーケンスレベルで同じシンタックス要素eipm_enable_flagが使用され得る。いくつかの実施形態では、第1のセットのコーディングツール有効化フラグは、SPSフラグ(複数可)としてSPS内で、またはピクチャヘッダフラグ(複数可)としてピクチャヘッダ内でシグナリングされ得る。
SCCツールは、IBCモード、ストリングコピーモード、周波数ベースのイントラモードコーディング、暗黙的なシグナリングされたTSモード等の組合せを含み得るが、これらに限定されない。本開示の態様によれば、画面コンテンツをコーディングするための第2のセットのコーディングツール有効化フラグは、フラグ:ibc_enable_flag、isc_enable_flag、fimc_enable_flag、ists_enable_flagなどを含むことができるが、これらに限定されない。
一実施形態では、第2のセットのコーディングツール有効化フラグは、図15Aおよび図15Bを参照して説明したようなシーケンスレベルなど、任意の適切な高レベルに対応する任意の適切なHLSで示され(例えば、シグナリングまたは推論され)得る。第2のセットのコーディングツール有効化フラグのうちの1つは、HLS(例えば、SPS)においてシグナリングされ得る。あるいは、第2のセットのコーディングツール有効化フラグのうちの1つはシグナリングされず、推測される。それぞれのコーディングツールに対する第2のセットのコーディングツール有効化フラグの各々は、異なるレベルで異なるシンタックスを有することができる。あるいは、それぞれのコーディングツールに対する第2のセットのコーディングツール有効化フラグの各々は、異なるレベルで同じシンタックスを有することができる。いくつかの実施形態では、第2のセットのコーディングツール有効化フラグは、SPSフラグ(複数可)としてSPS内で、またはピクチャヘッダフラグ(複数可)としてピクチャヘッダ内でシグナリングされ得る。
より高いレベル(例えば、SPS)のコーディングツール(例えば、拡張イントラ予測モード)用の第1のコーディングツール有効化フラグ(例えば、sps_eipm_enable_flag)を使用して、より低いレベル(例えば、ピクチャヘッダ)のコーディングツール用の第2のコーディングツール有効化フラグ(例えば、ph_eipm_enable_flag)がシグナリングされるべきかどうかを判定することができる。高いレベルは低いレベルよりも高い。第1のコーディングツール有効化フラグが第1の値(例えば、値0)である場合、第2のコーディングツール有効化フラグは(i)シグナリングされず、第1の値であると推測されるか、または(ii)第2のコーディングツール有効化フラグは第1の値としてシグナリングされる。第1のコーディングツール有効化フラグが第2の値(例えば、値1)である場合、第2のコーディングツール有効化フラグは、(i)第1の値または第2の値のいずれかとしてシグナリングされ得るか、または(ii)第1の値であると推論され得る。
一例では、SPS内の第1のコーディングツール有効化フラグ(例えば、sps_eipm_enable_flag)は0であり、したがって、ピクチャヘッダ内の第2のコーディングツール有効化フラグ(例えば、ph_eipm_enable_flag)は0であると推測される。ピクチャヘッダ内の第2のコーディングツール有効化フラグ(例えば、ph_eipm_enable_flag)が0である場合、ブロックレベルにおける対応するコーディングツールフラグは0であると推測される。
一例では、SPS内の第1のコーディングツール有効化フラグ(例えば、sps_eipm_enable_flag)は1であり、したがって、ピクチャヘッダ内の第2のコーディングツール有効化フラグ(例えば、ph_eipm_enable_flag)は0または1としてシグナリングされる。ピクチャヘッダ内の第2のコーディングツール有効化フラグ(例えば、ph_eipm_enable_flag)が1である場合、ブロックレベルにおける対応するコーディングツールフラグは0または1としてシグナリングされる。
本開示の態様によれば、コーディングされたビデオビットストリームから複数のブロックについてのコーディング情報がデコーディングされ得る。コーディング情報は、複数のブロックについての高レベル制御フラグを示すことができる。高レベル制御フラグは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されているかどうかを示すことができる。複数のブロックのうちの少なくとも1つは現在のブロックを含む。複数のブロックのうちの少なくとも1つについて複数のコーディングツールが無効化されているかどうかは、高レベル制御フラグに基づいて判定され得る。その後、複数のコーディングツールが無効化されていると判定されたことに基づいて、複数のコーディングツールなしで現在のブロックを再構成することができる。
一実施形態では、複数のコーディングツールは、SCCツールとは異なる第1のセットのコーディングツールまたはカメラ捕捉コンテンツコーディングツールを含む。高レベル制御フラグは、scc_only_enable_flagとすることができる。高レベル制御フラグの第1の値(例えば、真である、または1の値を有する)は、複数のコーディングブロックのうちの少なくとも1つに対して複数のコーディングツール(例えば、カメラ捕捉コンテンツコーディングツール)が無効化されていることを示すことができる。一例では、高レベル制御フラグの第1の値は、複数のコーディングブロックのうちの少なくとも1つに対してSCCツールのみが許容可能であることを示す。高レベル制御フラグの第2の値(例えば、偽である、または0の値を有する)は、複数のコーディングブロックのうちの少なくとも1つに対して複数のコーディングツール(例えば、カメラ捕捉コンテンツコーディングツール)が無効化されていない(例えば、許容可能であり得る)ことを示すことができる。
第1のセットのコーディングツールまたはカメラ捕捉コンテンツコーディングツールは、複数のコーディングツールの例として説明されているが、複数のコーディングツールは、任意の適切なセットのコーディングツールまたはコーディングモードを含むことができ、例えば、本開示の態様による適切な高レベル制御フラグなどの高レベルシンタックス要素によって、複数のブロックのうちの少なくとも1つに対して同時にオフにされ得る。一実施形態では、SCCツールは、高レベルシンタックス要素によって同時にオフにされる。例えば、複数のブロックのうちの少なくとも1つがカメラ捕捉コンテンツを含み、SCCツールがカメラ捕捉コンテンツをコーディングするために効率的でない可能性がある場合、SCCツールは、複数のブロックのうちの少なくとも1つに対して同時に無効化されることができ、カメラ捕捉コンテンツコーディングツールは、複数のブロックのうちの少なくとも1つをコーディングするために使用されることができる。他のツールのセットも同様に同時にオフされ得る。
高レベル制御フラグは、SPS、PPS、ピクチャヘッダ、スライスヘッダ、タイルグループレベル、およびタイルレベルのうちの1つでシグナリングされ得る。
一実施形態では、高レベル制御フラグは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されていることを示し、複数のコーディングツールは、複数のブロックのうちの少なくとも1つに対して無効化されていると判定され得る。
一実施形態では、高レベル制御フラグは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが許容可能であり得ることを示す。したがって、図15Aおよび図15Bに記載されているような複数のコーディングツールの各々について、コーディングツール(例えば、拡張イントラ予測モード)が複数のブロックのうちの少なくとも1つに対して許可されているかどうかは、コーディングツールのためのそれぞれのインジケータに基づいて判定され得る。それぞれのインジケータは、図15Aおよび図15Bを参照して説明したものなどの、コーディングツール有効化フラグ(例えば、eipm_enable_flag)またはそれぞれのコーディングツール変数(例えば、EipmEnableFlag)を指すことができる。複数のコーディングツールの各々のためのそれぞれのインジケータは、コーディングツールが複数のブロックのうちの少なくとも1つに対して許容可能であるかどうかを示すことができる。
一実施形態では、ビデオシーケンスのSPS(またはシーケンスヘッダ)内の高レベル制御フラグは、ビデオシーケンス内の複数のブロックに対して複数のコーディングツールが無効化されているかどうかを示すことができる。高レベル制御フラグが、ビデオシーケンス内の複数のブロックについて複数のコーディングツールが無効化されていることを示す場合、複数のコーディングツールは、ビデオシーケンス内の複数のブロックについて無効化されていると判定され得る。高レベル制御フラグは、ビデオシーケンスのSPSでシグナリングされ得る。
高レベル制御フラグ(例えば、scc_only_enable_flag)は、シーケンスヘッダ(またはSPS)内に、シーケンスヘッダまたはSPSによってカバーされるビデオシーケンスおよび低レベルコーディングレイヤ(例えば、ビデオシーケンス内の現在のピクチャ、複数のブロック内の少なくとも1つのブロック)に複数のコーディングツールが必要ではないことを示すことができる。
一例では、高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しいとき、ビデオシーケンスをコーディングするために複数のコーディングツールは必要とされない。したがって、複数のコーディングツールのためのコーディングツール有効化フラグまたはコーディングツール変数は、ビデオシーケンスをコーディングするために値0に設定または推測されるべきである。一例では、エンコーダおよびデコーダは、コーディングツール有効化フラグまたはコーディングツール変数を設定することができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいとき、複数のコーディングツールの使用は、それぞれのコーディングツール有効化フラグおよび/または他の条件に基づいて判定され得る。図15Aのボックス(1510)を参照して上述したように、一例では、他の条件は、他のコーディングツールが使用されるかどうかを含むことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)は、例えば、複数のコーディングツールに対するコーディングツール有効化フラグのいずれかの前に、シーケンスヘッダまたはSPSでシグナリングされ得る。
一例では、高レベル制御フラグは、scc_only_enable_flagと称される。図16は、本開示の一実施形態による、例えばSPS内のシンタックステーブル(1600)を示し、セマンティクスは以下のように記述され得る。例示目的のために、図16は、第1のセットのコーディングツールに対する第1のセットのコーディングツール有効化フラグを示す。第1のセットのコーディングツール有効化フラグがシグナリングされるかどうかは、ボックス(1610)~(1611)によって示されるように、高レベル制御フラグ(例えば、scc_only_enable_flag)に依存し得る。
変数(または高レベル制御変数)(例えば、SccOnlyEnableFlag)は、高レベル制御フラグ(例えば、scc_only_enable_flag)と等しく設定され得る。一例では、高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しい(またはTrueである)ことは、HLS(例えば、SPS)内の関連するシンタックス要素(例えば、第1のセットのコーディングツール有効化フラグ)がビットストリームでシグナリングされないことを示すことができる。例えば、scc_only_enable_flagは1であり、高レベル制御変数(例えば、SccOnlyEnableFlag)はscc_only_enable_flagに設定される。したがって、SccOnlyEnableFlagは1である。その場合、SccOnlyEnableFlagは0である。したがって、ボックス(1610)~(1611)の間の関連するシンタックス要素(例えば、第1のセットのコーディングツール有効化フラグ)はシグナリングされない。
高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいことは、関連するシンタックス要素(例えば、第1のセットのコーディングツール有効化フラグ)がビットストリームでシグナリングされ得ることを示すことができる。図16を参照すると、eipm_enable_flag、dmvr_enable_flag、bio_enable_flag、etmvp_enable_flag、subtmvp_enable_flag、およびiip_enable_flagは、scc_only_enable_flagが0である場合にシグナリングされる。
affine_umve_enable_flag、st_chroma_enable_flag、ipf_chroma_enable_flag、ealf_enable_flag、およびsp_enable_flagなどの第1のセットのコーディングツール有効化フラグの他のフラグがシグナリングされるかどうかは、ボックス(1621)~(1622)によって示される他の条件に基づいてさらに判定され得る。ボックス(1510)を参照して上述したように、他の条件は、他のコーディングツールが使用され得るかどうかを含むことができる。簡潔にするために、詳細な説明は省略する。ボックス(1622)を参照すると、変数SecondaryTransformEnableFlagが、セカンダリ変換が使用され得ることを示す1である場合、st_chroma_enable_flagがシグナリングされる。そうではなく、変数SecondaryTransformEnableFlagが0であり、セカンダリ変換が無効化されていることを示す場合、st_chroma_enable_flagはシグナリングされない。
ビットストリームに高レベル制御フラグ(例えば、scc_only_enable_flag)が存在しない場合、高レベル制御フラグ(例えば、scc_only_enable_flag)の値は0であると推測され得る。
一実施形態では、複数のコーディングツールの各々のそれぞれのインジケータは、高レベル制御フラグに基づいて決定され得る。一例では、それぞれのインジケータはコーディングツール変数(例えば、EipmEnableFlag)であり、複数のコーディングツールの各々について、コーディングツール変数は、それぞれのコーディングツールの高レベル制御フラグおよびそれぞれのコーディングツール有効化フラグに基づいて決定されることができ、それぞれのコーディングツール有効化フラグは、複数のブロックのうちの少なくとも1つのためのものであり得る。例えば、コーディングツール変数(例えば、EipmEnableFlag)は、各コーディングツール有効化フラグ(例えば、eipm_enable_flag)と、高レベル制御フラグ(例えば、scc_only_enable_flag)用の変数(例えば、SccOnlyEnableFlag)とに基づいて決定される。一例では、コーディングツール有効化フラグ(例えば、eipm_enable_flag)はピクチャヘッダ内にあり、したがって、コーディングツール変数(例えば、EipmEnableFlag)はピクチャヘッダ変数である。
一実施形態では、複数のコーディングツールの各々のそれぞれのインジケータは、複数のコーディングツールが複数のブロックのうちの少なくとも1つに対して無効化されていることを示す高レベル制御フラグに基づいて、複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが無効化されていることを示す0の値に設定することができる。
一実施形態では、高レベル制御フラグはSPSまたはピクチャヘッダで示され、複数のコーディングツールの各々のためのそれぞれのインジケータは、複数のブロックのうちの少なくとも1つを含む現在のピクチャのためのものであり得る。
一実施形態では、現在のピクチャのピクチャヘッダ内の高レベル制御フラグは、現在のピクチャにおける複数のブロックに対して複数のコーディングツールが無効化されているかどうかを示すことができる。現在のピクチャにおける複数のブロックに対して複数のコーディングツールが無効化されていることを示す高レベル制御フラグに基づいて、現在のピクチャにおける複数のブロックに対して複数のコーディングツールが無効化されていると判定され得る。高レベル制御フラグは、現在のピクチャのピクチャヘッダ内でシグナリングされ得る。
ピクチャヘッダ内の高レベル制御フラグ(例えば、scc_only_enable_flag)は、ピクチャヘッダによってカバーされる現在のピクチャおよび低レベルコーディングレイヤに複数のコーディングツールが必要とされないことを示すために使用され得る。高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しいことは、現在のピクチャをコーディングするために複数のコーディングツールが必要でないことを示すことができる。したがって、複数のコーディングツールのためのコーディングツール有効化フラグまたはそれぞれのコーディングツール変数は、現在のピクチャをコーディングするために0に等しく設定されるべきである。高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいことは、それぞれのコーディングツール有効化フラグおよび/または他の条件に基づいて複数のコーディングツールの使用が決定され得ることを示すことができる。図15Aのボックス(1510)を参照して上述したように、一例では、他の条件は、他のコーディングツールが使用されるかどうかを含むことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)は、例えば、複数のコーディングツールのコーディングツール有効化フラグのいずれかの前に、ピクチャヘッダ内でシグナリングされ得る。
一例では、高レベル制御フラグは、scc_only_enable_flagと称される。高レベル制御フラグのセマンティクスは、以下のように記述され得る。
一例では、高レベル制御フラグ(例えば、scc_only_enable_flag)を使用して、それぞれのコーディングツールまたはモード(例えば、第1のセットのコーディングツール)のコーディングツール有効化フラグ(例えば、第1のセットのコーディングツール有効化フラグ)またはコーディングツール変数(例えば、第1のセットのコーディングツール有効化フラグに対応するコーディングツール変数)を決定することができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しいことは、例えば、現在のピクチャにおける複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが使用され得ないことを示すことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいことは、例えば、現在のピクチャにおける複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが使用され得ることを示すことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が存在しない場合、高レベル制御フラグ(例えば、scc_only_enable_flag)の値は0であると推測され得る。高レベル制御変数(例えば、SccOnlyEnableFlag)は、高レベル制御フラグ(例えば、scc_only_enable_flag)であると設定され得る。
図16を参照した上記の説明は、ピクチャヘッダ内の高レベル制御フラグ(例えば、scc_only_enable_flag)を使用して、ピクチャヘッダによってカバーされる現在のピクチャおよび低レベルコーディングレイヤに対して複数のコーディングツールが無効化されているかどうかを示すことができる場合に適切に適応され得る。
いくつかの実施形態では、複数のコーディングツールは、第1のセットのコーディングツール(またはカメラ捕捉コーディングツール)を含む。上述したように、カメラ捕捉コーディングツールのコーディングツール変数は、高レベル変数(例えば、SccOnlyEnableFlag)に基づいて導出され得る。コーディングツール変数は、それぞれのコーディングツール有効化フラグおよび高レベル制御フラグに基づいて決定され得る。コーディングツール変数は、各コーディングツール有効化フラグと、高レベル制御フラグに対応する高レベル変数(例えば、SccOnlyEnableFlag)とに基づいて決定され得る。
一例では、コーディングツール変数EipmEnableFlagは、式1に示すように、eipm_enable_flagおよび高レベル変数(例えば、SccOnlyEnableFlag)に基づいて決定される。高レベル変数が1であり、かつ/またはeipm_enable_flagが0である場合、コーディングツール変数EipmEnableFlagは0である。高レベル変数が0であり、eipm_enable_flagが1である場合、コーディングツール変数EipmEnableFlagは1である。EipmEnableFlag=eipm_enable_flag&!SccOnlyEnableFlag 式1。
上記の説明は、式2~式11に示すように、コーディングツール変数とそれぞれのコーディングツール有効化フラグおよび高レベル変数との間の関係に適切に適応され得る。
DmvrEnableFlag=dmvr_enable_flag&!SccOnlyEnableFlag (式2)
BioEnableFlag=bio_enable_flag&!SccOnlyEnableFlag (式3)
AffineUmveEnableFlag=affine_umve_enable_flag&!SccOnlyEnableFlag (式4)
EtmvpEnableFlag=etmvp_enable_flag&!SccOnlyEnableFlag (式5)
SubTmvpEnableFlag=subtmvp_enable_flag&!SccOnlyEnableFlag (式6)
StChromaEnableFlag=st_chroma_enable_flag&!SccOnlyEnableFlag (式7)
IpfChromaEnableFlag=ipf_chroma_enable_flag&!SccOnlyEnableFlag (式8)
EalfEnableFlag=ealf_enable_flag&!SccOnlyEnableFlag (式9)
SpEnableFlag=sp_enable_flag&!SccOnlyEnableFlag (式10)
IipEnableFlag=iip_enable_flag&!SccOnlyEnableFlag (式11)
一実施形態では、SPS内の高レベル制御フラグ(例えば、scc_only_enable_flag)または現在のピクチャのピクチャヘッダを使用して、ピクチャレベルでのコーディングツール有効化フラグまたはコーディングツールのそれぞれのコーディングツール変数を導出することができる。
高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しいことは、現在のピクチャをコーディングするために複数のコーディングツールが必要でないことを示すことができる。したがって、複数のコーディングツールのためのコーディングツール有効化フラグまたはそれぞれのコーディングツール変数は、現在のピクチャをコーディングするために0に設定されるべきである。高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいことは、それぞれのコーディングツール有効化フラグおよび/または他の条件に基づいて複数のコーディングツールの使用が決定され得ることを示すことができる。図15Aのボックス(1510)を参照して上述したように、一例では、他の条件は、他のコーディングツールが使用されるかどうかを含むことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)は、例えば、複数のコーディングツールのコーディングツール有効化フラグ(もしあれば)のいずれかの前に、ピクチャヘッダ内でシグナリングされ得る。
一例では、高レベル制御フラグは、scc_only_enable_flagと称される。高レベル制御フラグのセマンティクスは、以下のように記述され得る。
一例では、高レベル制御フラグ(例えば、scc_only_enable_flag)を使用して、それぞれのコーディングツールまたはモード(例えば、第1のセットのコーディングツール)のコーディングツール有効化フラグ(例えば、第1のセットのコーディングツール有効化フラグ)またはコーディングツール変数(例えば、第1のセットのコーディングツール有効化フラグに対応するコーディングツール変数)を決定することができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しいことは、例えば、現在のピクチャにおける複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが使用され得ないことを示すことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいことは、例えば、現在のピクチャにおける複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが使用され得ることを示すことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が存在しない場合、高レベル制御フラグ(例えば、scc_only_enable_flag)の値は0であると推測され得る。高レベル制御変数(例えば、SccOnlyEnableFlag)は、高レベル制御フラグ(例えば、scc_only_enable_flag)であると設定され得る。
図16を参照した上記の説明は、SPSまたはピクチャヘッダ内の高レベル制御フラグ(例えば、scc_only_enable_flag)を使用して、現在のピクチャに対して複数のコーディングツールが無効化されているかどうかを示すことができる場合に適切に適応され得る。
一実施形態では、高レベル制御変数(例えば、SccOnlyEnableFlag)が1に等しい場合、ピクチャヘッダにおいて複数のコーディングツールに対するコーディングツール有効化フラグはシグナリングされる必要がない。代わりに、コーディングツール有効化フラグは0であると推測されてもよい。
一実施形態では、複数のコーディングツールのうちの1つは、SPS(またはSPSレベル)内のピクチャヘッダ内の第1のコーディングツール有効化フラグ(ピクチャヘッダ有効化フラグとも呼ばれる)および第2のコーディングツール有効化フラグ(SPS有効化フラグとも呼ばれる)を有する。ピクチャレベルでの複数のコーディングツールのうちの1つのコーディングツール変数は、既存の条件(例えば、ピクチャヘッダ有効化フラグ)および高レベル変数の値(例えば、SccOnlyEnableFlag)に基づいて導出され得る。
例えば、拡張イントラ予測モードの場合、拡張イントラ予測モードのピクチャヘッダ有効化フラグは、ph_eipm_enable_flagである。ピクチャヘッダ有効化フラグ(例えば、ph_eipm_enable_flag)が1に等しいことは、拡張イントラ予測モードが現在のピクチャで使用され得ることを示すことができる。ピクチャヘッダ有効化フラグ(例えば、ph_eipm_enable_flag)が0に等しいことは、拡張イントラ予測モードが現在のピクチャで使用され得ないことを示すことができる。ピクチャヘッダ有効化フラグ(例えば、ph_eipm_enable_flag)が存在しない場合、ピクチャヘッダ有効化フラグ(例えば、ph_eipm_enable_flag)の値は0であると推測され得る。コーディングツール変数(例えば、EipmEnableFlag)は、ph_eipm_enable_flag&&!SccOnlyEnableFlagに等しく設定され得る。
本開示の態様によれば、高レベル制御フラグは、SPSまたはピクチャヘッダにおいて示され得る。複数のブロックのうちの少なくとも1つは、現在のブロックであり得る。一実施形態では、現在のブロックに対してコーディングツールが許容可能であるかどうかを示す、複数のコーディングツールの各々に対するそれぞれのブロックレベル有効化フラグをシグナリングするかどうかは、高レベル制御フラグに基づいて判定され得る。
一実施形態では、高レベル制御フラグを使用して、複数のコーディングツールが現在のブロックに対して無効化されているかどうかを示すことができる。一例では、高レベル制御フラグは、複数のコーディングツールがブロックレベルシンタックスに必要でないことを示すために使用される。
高レベル制御フラグが1に等しいことは、現在のブロック(例えば、CB、PB、またはTB)をコーディングするために複数のコーディングツールが必要でないことを示すことができる。したがって、複数のコーディングツールのためのブロックレベルコーディングツールフラグはシグナリングされない。高レベル制御フラグが0に等しいことは、コーディングツール有効化フラグおよび/または他の条件に基づいて複数のコーディングツールの使用が決定され得ることを示すことができる。一例では、高レベル制御フラグはピクチャヘッダでシグナリングされる。
一実施形態では、高レベル制御フラグはscc_only_enable_flagである。高レベル制御フラグ(例えば、scc_only_enable_flag)のセマンティクスは以下のように記述され得る。高レベル制御フラグ(例えば、scc_only_enable_flag)を使用して、現在のブロックのブロックレベルでのコーディングツールの使用フラグ(またはブロックレベルフラグ)のシグナリングを決定することができる。一実施形態では、コーディングツールの使用フラグまたはブロックレベルフラグは、コーディングツールが現在のブロックに使用されているかどうかを示す。高レベル制御フラグ(例えば、scc_only_enable_flag)が1に等しいことは、コーディングツールが現在のブロックで使用され得ないことを示すことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が0に等しいことは、コーディングツールが現在のブロックに使用され得ることを示すことができる。高レベル制御フラグ(例えば、scc_only_enable_flag)が存在しない場合、高レベル制御フラグ(例えば、scc_only_enable_flag)の値は0であると推測され得る。高レベル制御フラグ(例えば、scc_only_enable_flag)に対応する高レベル制御変数(例えば、SccOnlyEnableFlag)は、高レベル制御フラグ(例えば、scc_only_enable_flag)と等しく設定され得る。
図17Aおよび図17Bは、本開示の実施形態によるブロックレベルフラグに対する例示的なシンタックスを示す。図17Aを参照すると、ブロックレベルでは、拡張イントラ予測モード用のコーディングツール変数(例えば、EipmEnableFlag)と、条件(例えば、IntraLumaPedModeIndexは1より大きい)とに基づいて、拡張イントラ予測モード用のブロックレベルフラグ(例えば、eipm_pu_flag)をシグナリングするかどうかかが決定される。
本開示の態様によれば、図17Aにおけるシンタックスは、図17Bに示されるように変更され得る。図17Bでは、ブロックレベルにおいて、拡張イントラ予測モード用のコーディングツール変数(例えば、EipmEnableFlag)と、条件(例えば、IntraLumaPedModeIndexは1より大きい)と、高レベルの制御変数(例えば、SccOnlyEnableFlag)とに基づいて、拡張イントラ予測モード用のブロックレベルフラグ(例えば、eipm_pu_flag)をシグナリングするかどうかが決定される。一例では、ブロックレベルフラグ(例えば、eipm_pu_flag)は、拡張イントラ予測モードがブロックに使用されるかどうかを示す。高レベル制御変数(例えば、SccOnlyEnableFlag)が0である場合、拡張イントラ予測モードのためのブロックレベルフラグ(例えば、eipm_pu_flag)をシグナリングするかどうかは、拡張イントラ予測モードのためのコーディングツール変数(例えば、EipmEnableFlag)および条件(例えば、IntraLumaPedModeIndexは1より大きい)に基づいて決定され、これは、図17Aに記載されたものと同じである。高レベル制御変数(例えば、SccOnlyEnableFlag)が1である場合、拡張イントラ予測モード用のコーディングツール変数(例えば、EipmEnableFlag)および条件(例えば、IntraLumaPedModeIndexは1より大きい)にかかわらず、拡張イントラ予測モード用のブロックレベルフラグ(例えば、eipm_pu_flag)はシグナリングされないと決定され、これは、図17Aに記載されたものとは異なる。
図18は、本開示の一実施形態によるプロセス(1800)の概要を示すフローチャートを示す。プロセス(1800)は、CB、PB、PU、CU、TB、TUなどのブロックの再構成に使用され得る。様々な実施形態では、プロセス(1800)は、端末デバイス(310)、(320)、(330)および(340)の処理回路、ビデオエンコーダ(403)の機能を実行する処理回路、ビデオデコーダ(410)の機能を実行する処理回路、ビデオデコーダ(510)の機能を実行する処理回路、ビデオエンコーダ(603)の機能を実行する処理回路などの処理回路によって実行される。いくつかの実施形態では、プロセス(1900)はソフトウェア命令で実装され、したがって、処理回路がソフトウェア命令を実行すると、処理回路はプロセス(1800)を実行する。プロセスは(S1801)から始まり、(S1810)に進む。
(S1810)において、コーディングされたビデオビットストリームから複数のブロックのコーディング情報がデコーディングされ得る。コーディング情報は、複数のブロックについての高レベル制御フラグを示すことができる。高レベル制御フラグは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されているかどうかを示すことができる。複数のブロックのうちの少なくとも1つは現在のブロックを含むことができる。
高レベル制御フラグは、SPS、PPS、ピクチャヘッダ、スライスヘッダ、タイルグループレベル、およびタイルレベルのうちの1つでシグナリングされ得る。
複数のコーディングツールは、画面コンテンツコーディング(SCC)ツールとは異なるカメラ捕捉コンテンツコーディングツールを含むことができる。高レベル制御フラグが第1の値であることは、複数のコーディングブロックのうちの少なくとも1つに対してSCCツールのみが許容可能であり、複数のコーディングブロックのうちの少なくとも1つに対してカメラ捕捉コンテンツコーディングツールが無効化されていることを示すことができる。高レベル制御フラグが第2の値であることは、複数のコーディングブロックのうちの少なくとも1つに対してカメラ捕捉コンテンツコーディングツールおよびSCCツールが許容可能であることを示すことができる。
(S1820)において、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されているかどうかは、高レベル制御フラグに基づいて判定され得る。
一例では、高レベル制御フラグは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されていることを示し、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されていると判定され得る。
一例では、高レベル制御フラグは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが許容可能であることを示し、複数のコーディングツールの各々について、コーディングツールに対するそれぞれのインジケータに基づいて、複数のブロックのうちの少なくとも1つに対してコーディングツールが許容可能であるかどうかが判定され得る。
一実施形態では、複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが許容可能であるかどうかを示す、複数のコーディングツールの各々に対するそれぞれのインジケータは、高レベル制御フラグに基づいて判定され得る。一例では、それぞれのインジケータは変数である。複数のコーディングツールの各々について、それぞれの変数は、それぞれのコーディングツールに対する高レベル制御フラグおよびそれぞれの有効化可能フラグに基づいて決定され得る。それぞれの有効化可能フラグは、複数のブロックのうちの少なくとも1つのためのものとすることができる。一例では、複数のコーディングツールの各々に対するそれぞれのインジケータは、複数のブロックのうちの少なくとも1つに対して複数のコーディングツールが無効化されていることを高レベル制御フラグが示していることに基づいて、複数のブロックのうちの少なくとも1つに対してそれぞれのコーディングツールが無効化されていることを示す0の値に設定される。一例では、高レベル制御フラグはSPSまたはピクチャヘッダで示され、複数のコーディングツールの各々のそれぞれのインジケータは、複数のブロックのうちの少なくとも1つを含む現在のピクチャに対するものである。
一実施形態では、高レベル制御フラグは、ビデオシーケンスのSPSでシグナリングされ、ビデオシーケンス内の複数のブロックに対して複数のコーディングツールが無効化されているかどうかを示す。ビデオシーケンス内の複数のブロックについて複数のコーディングツールが無効化されていることを示す高レベル制御フラグに基づいて、ビデオシーケンス内の複数のブロックについて複数のコーディングツールが無効化されていると判定され得る。
一実施形態では、高レベル制御フラグは、現在のピクチャのピクチャヘッダ内でシグナリングされ、現在のピクチャにおける複数のブロックに対して複数のコーディングツールが無効化されているかどうかを示す。現在のピクチャにおける複数のブロックに対して複数のコーディングツールが無効化されていることを示す高レベル制御フラグに基づいて、現在のピクチャにおける複数のブロックに対して複数のコーディングツールが無効化されていると判定され得る。
一実施形態では、高レベル制御フラグはSPSまたはピクチャヘッダで示され、複数のブロックのうちの少なくとも1つは現在のブロックである。一例では、現在のブロックに対してコーディングツールが許容可能であるかどうかを示す、複数のコーディングツールの各々に対するそれぞれのブロックレベル有効化フラグをシグナリングするかどうかは、高レベル制御フラグに基づいて判定され得る。
(S1830)において、複数のコーディングツールが無効化されていると判定されたことに基づいて、複数のコーディングツールなしで現在のブロックは再構成され得る。
プロセス(1800)は、適切に適応され得る。プロセス(1800)のステップは、変更および/または省略され得る。追加のステップ(複数可)が追加され得る。任意の適切な実施順序が使用され得る。
本開示の実施形態は、別々に使用されてもよく、任意の順序で組み合わされてもよい。さらに、方法(または実施形態)、エンコーダ、およびデコーダのそれぞれは、処理回路(例えば、1つまたは複数のプロセッサまたは1つまたは複数の集積回路)によって実装され得る。一例では、1つまたは複数のプロセッサは、非一時的コンピュータ可読媒体に記憶されたプログラムを実行する。本開示の実施形態は、ルマブロックまたはクロマブロックに適用されてもよい。
上記で説明された技術は、1つ以上のコンピュータ可読媒体に物理的に記憶された、コンピュータ可読命令を使用するコンピュータソフトウェアとして実施され得る。例えば、図19は、開示される主題の特定の実施形態を実施するのに適したコンピュータシステム(1900)を示す。
コンピュータソフトウェアは、1つ以上のコンピュータ中央処理装置(CPU:central processing unit)およびグラフィック処理装置(GPU:Graphics Processing Unit)などによって直接的に、または解釈およびマイクロコードの実行などを通して実行され得る命令を含むコードを作成するために、アセンブリ、コンパイル、リンキング、または同様のメカニズムを受け得る任意の適切な機械コードまたはコンピュータ言語を使用してコーディングされ得る。
命令は、例えばパーソナルコンピュータ、タブレットコンピュータ、サーバ、スマートフォン、ゲーミングデバイス、およびモノのインターネットデバイスなどを含む様々なタイプのコンピュータまたはその構成要素上で実行され得る。
コンピュータシステム(1900)に関して図19に示される構成要素は、本質的に例示であり、本開示の実施形態を実施するコンピュータソフトウェアの使用または機能の範囲に関する限定を示唆することを意図されていない。構成要素の構成は、コンピュータシステム(1900)の例示的な実施形態に示されている構成要素のいずれか1つまたは組合せに関して依存性も要件も有していないと解釈されるべきである。
コンピュータシステム(1900)は、特定のヒューマンインターフェース入力デバイスを含み得る。このようなヒューマンインターフェース入力デバイスは、例えば触覚入力(キーストローク、スワイプ、データグローブの動きなど)、オーディオ入力(声、拍手など)、視覚入力(ジェスチャなど)、嗅覚入力(図示せず)を用いた1人以上の人間のユーザによる入力に応答し得る。ヒューマンインターフェースデバイスは、オーディオ(音声、音楽、環境音など)、画像(走査画像、写真画像は静止画像カメラから取得など)、ビデオ(2次元ビデオ、立体ビデオを含む3次元ビデオなど)などの、必ずしも人間による意識的な入力に直接関連しない特定の媒体を取り込むためにも使用され得る。
入力ヒューマンインターフェース装置は、キーボード(1901)、マウス(1902)、トラックパッド(1903)、タッチスクリーン(1910)、データグローブ(図示せず)、ジョイスティック(1905)、マイク(1906)、スキャナ(1907)、カメラ(1908)のうち1つまたは複数(それぞれ1つのみ図示)を含み得る。
コンピュータシステム(1900)はまた、特定のヒューマンインターフェース出力デバイスを含み得る。このようなヒューマンインターフェース出力デバイスは、例えば触覚出力、音、光、およびにおい/味によって1人以上の人間のユーザの感覚を刺激し得る。そのようなヒューマンインターフェース出力装置は、触覚出力装置(例えば、タッチスクリーン(1910)、データグローブ(図示せず)、またはジョイスティック(1905)による触覚フィードバックを含み得るが、入力装置として機能しない触覚フィードバック装置もあり得る)、音声出力装置(スピーカ(1909)、ヘッドホン(図示せず)など)、視覚的出力装置(それぞれにタッチスクリーン入力機能の有無にかかわらず、それぞれ触覚フィードバック機能の有無にかかわらず、ステレオグラフィック出力、仮想現実の眼鏡(図示せず)、ホログラフィックディスプレイおよびスモークタンク(図示せず)などの手段により、2次元の視覚的出力または3次元以上の出力を出力できるものもある、CRTスクリーン、LCDスクリーン、プラズマスクリーン、OLEDスクリーンを含むスクリーン(1910)など)、およびプリンタ(図示せず)を含み得る。
コンピュータシステム(1900)はまた、CD/DVDまたは同様の媒体(1921)を伴うCD/DVD ROM/RW(1920)を含む光学媒体、サムドライブ(1922)、取り外し可能なハードドライブまたはソリッドステートドライブ(1923)、テープおよびフロッピーディスクなどのレガシー磁気媒体(図示せず)、ならびにセキュリティドングル(図示せず)などの専用のROM/ASIC/PLDベースのデバイスなど、人間がアクセス可能な記憶デバイスおよびこれに関連する媒体を含み得る。
当業者はまた、本開示の主題に関連して使用される「コンピュータ可読媒体」という用語が伝送媒体、搬送波、または他の一時的信号を包含しないことを理解すべきである。
コンピュータシステム(1900)はまた、1つまたは複数の通信ネットワーク(1955)へのインターフェース(1954)を含むことができる。ネットワークは、例えば、無線、有線、光であり得る。ネットワークはさらに、ローカル、広域、メトロポリタン、車両および産業、リアルタイム、遅延耐性などであり得る。ネットワークの例は、Ethernetなどのローカルエリアネットワーク、無線LAN、GSM、3G、4G、5G、LTEなどを含むセルラネットワーク、ケーブルテレビ、衛星テレビおよび地上波テレビを含むテレビの有線または無線広域デジタルネットワーク、CANBusを含む車両用および産業用などを含む。特定のネットワークは、一般的には、特定の一般データポートまたは周辺バス(1949)(例えば、コンピュータシステム(1900)のUSBポートなど)に接続される外部ネットワークインターフェースアダプタを必要とし、他のものは、一般的には、以下で説明されるようにシステムバスへの接続によってコンピュータシステム(1900)のコアに統合される(例えば、PCコンピュータシステムへのイーサネットインターフェースまたはスマートフォンコンピュータシステムへのセルラーネットワークインターフェース)。これらのネットワークのいずれかを使用して、コンピュータシステム(1900)は他のエンティティと通信し得る。このような通信は、単方向、受信のみ(例えば、放送TV)、単方向送信のみ(例えば、特定のCANbusデバイスへのCANbus)、または例えばローカルもしくはワイドエリアデジタルネットワークを使用した他のコンピュータシステムに対する双方向のものであり得る。特定のプロトコルおよびプロトコルスタックは、上記で説明されたように、それらのネットワークおよびネットワークインターフェースの各々で使用され得る。
前述のヒューマンインターフェースデバイス、人間がアクセス可能な記憶デバイス、およびネットワークインターフェースは、コンピュータシステム(1900)のコア(1940)に接続され得る。
コア(1940)は、1つ以上の中央処理装置(CPU)(1941)、グラフィック処理装置(GPU)(1942)、フィールドプログラマブルゲートアレイ(FPGA)(1943)の形式の専用のプログラマブル処理装置、特定のタスク用のハードウェアアクセラレータ(1944)、およびグラフィックアダプタ(1950)などを含み得る。これらの装置は、読み取り専用メモリ(ROM)(1945)、ランダムアクセスメモリ(1946)、ユーザがアクセスできない内部ハードドライブ、SSDなどの内部大容量記憶装置(1947)とともに、システムバス(1948)を介して接続され得る。いくつかのコンピュータシステムでは、システムバス(1948)に1つまたはそれ以上の物理プラグの形でアクセスして、追加のCPU、GPUなどによる拡張を可能にすることができる。周辺機器は、コアのシステムバス(1948)に直接、または周辺バス(1949)を介して取り付けられ得る。一例では、スクリーン(1910)はグラフィックアダプタ(2150)に接続され得る。周辺バスのアーキテクチャは、PCIおよびUSBなどを含む。
CPU(1941)、GPU(1942)、FPGA(1943)、およびアクセラレータ(1944)は、組み合わせて前述のコンピュータコードを構成できる特定の命令を実行できる。そのコンピュータコードは、ROM(1945)またはRAM(1946)に記憶され得る。移行データはRAM(1946)にも記憶され得るが、永続データは、例えば内部大容量記憶装置(1947)に記憶され得る。1つまたは複数のCPU(1941)、GPU(1942)、大容量記憶装置(1947)、ROM(1945)、RAM(1946)などと密接に関連付けられ得るキャッシュメモリを使用することにより、任意のメモリ装置に対する高速記憶および読み出しが可能になる。
コンピュータ可読媒体は、様々なコンピュータ実施動作を実行するためのコンピュータコードを有し得る。媒体およびコンピュータコードは、本開示の目的のために特別に設計および構成されたものであり得るし、またはそれらは、コンピュータソフトウェア技術の当業者に周知の利用可能な種類のものであり得る。
限定としてではなく一例として、アーキテクチャを有するコンピュータシステム(1900)、具体的にはコア(1940)は、1つまたは複数の有形のコンピュータ可読媒体で具現化されたソフトウェアを実行するプロセッサ(CPU、GPU、FPGA、およびアクセラレータなどを含む)の結果として機能を提供し得る。このようなコンピュータ可読媒体は、上で紹介したユーザがアクセス可能な大容量記憶装置、およびコア内部大容量記憶装置(1947)やROM(1945)などの非一時的な性質を持つコア(1940)の特定の記憶装置に関連付けられた媒体であり得る。本開示の様々な実施形態を実装するソフトウェアは、そのような装置に記憶され、コア(1940)によって実行され得る。コンピュータ可読媒体は、特定のニーズに従って、1つまたはそれ以上のメモリ装置またはチップを含み得る。ソフトウェアは、コア(1940)、特にその中のプロセッサ(CPU、GPU、FPGAなどを含む)に、RAM(1946)に記憶されているデータ構造の定義すること、ソフトウェアで定義された処理に従ってそのようなデータ構造を変更することを含む、ここで説明する特定の処理または特定の処理の特定の部分を実行させることができる。加えて、または代替として、コンピュータシステムは、ここで説明する特定の処理または特定の処理の特定の部分を実行するためにソフトウェアの代わりに、またはソフトウェアと一緒に動作できる、回路(例えば、アクセラレータ(1944))に組み込まれたまたは他の方法で実装されたロジックの結果として機能を提供できる。ソフトウェアへの参照はロジックを含むことができ、その逆も適宜可能である。適切な場合には、コンピュータ可読媒体への言及は、実行のためのソフトウェアを記憶する回路(集積回路(IC)など)、実行のための論理を具現化する回路、またはこれらの両方を包含し得る。本開示は、ハードウェアとソフトウェアの任意の適切な組合せを包含する。
付録A:頭字語
JEM:共同探査モデル
VVC:多用途ビデオコーディング
BMS:ベンチマークセット
MV:動きベクトル
HEVC:高効率ビデオコーディング
SEI:補足拡張情報
VUI:ビデオユーザビリティ情報
GOP:Group of Pictures
TU:変換ユニット
PU:予測ユニット
CTU:コーディングツリーユニット
CTB:コーディングツリーブロック
PB:予測ブロック
HRD:仮想参照デコーダ
SNR:信号対雑音比
CPU:中央処理装置
GPU:グラフィックス処理装置
CRT:ブラウン管
LCD:液晶ディスプレイ
OLED:有機発光ダイオード
CD:コンパクトディスク
DVD:デジタルビデオディスク
ROM:読み出し専用メモリ
RAM:ランダムアクセスメモリ
ASIC:特定用途向け集積回路
PLD:プログラマブルロジックデバイス
LAN:ローカルエリアネットワーク
GSM:モバイル通信用グローバルシステム
LTE:ロングタームエボリューション
CANBus:コントローラエリアネットワークバス
USB:ユニバーサルシリアルバス
PCI:周辺機器相互接続
FPGA:フィールドプログラマブルゲートアレイ
SSD:ソリッドステートドライブ
IC:集積回路
CU:コーディングユニット
本開示はいくつかの例示的な実施形態を説明してきたが、本開示の範囲内にある修正例、置換例、および様々な代替均等例がある。したがって、当業者は、本明細書に明示的に示されていないまたは記載されていないが、本開示の原理を具体化し、したがってその趣旨および範囲内にある多数のシステムおよび方法を考案することができることが理解されよう。
ビデオエンコーダ(403)、(603)、および(703)、ならびにビデオデコーダ(410)、(510)、および(810)は、任意の適切な技術を使用して実施され得ることに留意されたい。一実施形態では、ビデオエンコーダ(403)、(603)、および(703)、ならびにビデオデコーダ(410)、(510)、および(810)は、1つまたは複数の集積回路を使用して実施され得る。別の実施形態では、ビデオエンコーダ(403)、(603)、および(703)、ならびにビデオデコーダ(410)、(510)、および(810)は、ソフトウェア命令を実行する1つまたは複数のプロセッサを使用して実施され得る。
図10は、本開示の実施形態によるイントラブロックコピーの例を示す。現在のピクチャ(1001)は、再構成中の現在のCTB(1015)と、現在のCTB(1015)の左隣にある、以前に再構成されたCTB(1010)とを含む。現在のピクチャ(1001)内のCTBは、128×128サンプルなどのCTBサイズ、および128サンプルなどのCTB幅を有する。現在のCTB(1015)は、4つの領域(1016)~(1019)を含み、現在の領域(1016)は再構成中である。現在の領域(1016)は、複数のコーディングブロック(1021)~(1029)を含む。同様に、以前に再構成されたCTB(1010)も4つの領域(1011)~(1014)を含む。コーディングブロック(1021)~(1025)は既に再構成されており、現在のブロック(1026)は再構成中であり、コーディングブロック(1026)~(1029)、および領域(1017)~(1019)はこれから再構成される。
図18は、本開示の一実施形態によるプロセス(1800)の概要を示すフローチャートを示す。プロセス(1800)は、CB、PB、PU、CU、TB、TUなどのブロックの再構成に使用され得る。様々な実施形態では、プロセス(1800)は、端末デバイス(310)、(320)、(330)および(340)の処理回路、ビデオエンコーダ(403)の機能を実行する処理回路、ビデオデコーダ(410)の機能を実行する処理回路、ビデオデコーダ(510)の機能を実行する処理回路、ビデオエンコーダ(603)の機能を実行する処理回路などの処理回路によって実行される。いくつかの実施形態では、プロセス(1800)はソフトウェア命令で実装され、したがって、処理回路がソフトウェア命令を実行すると、処理回路はプロセス(1800)を実行する。プロセスは(S1801)から始まり、(S1810)に進む。
コア(1940)は、1つ以上の中央処理装置(CPU)(1941)、グラフィック処理装置(GPU)(1942)、フィールドプログラマブルゲートアレイ(FPGA)(1943)の形式の専用のプログラマブル処理装置、特定のタスク用のハードウェアアクセラレータ(1944)、およびグラフィックアダプタ(1950)などを含み得る。これらの装置は、読み取り専用メモリ(ROM)(1945)、ランダムアクセスメモリ(1946)、ユーザがアクセスできない内部ハードドライブ、SSDなどの内部大容量記憶装置(1947)とともに、システムバス(1948)を介して接続され得る。いくつかのコンピュータシステムでは、システムバス(1948)に1つまたはそれ以上の物理プラグの形でアクセスして、追加のCPU、GPUなどによる拡張を可能にすることができる。周辺機器は、コアのシステムバス(1948)に直接、または周辺バス(1949)を介して取り付けられ得る。一例では、スクリーン(1910)はグラフィックアダプタ(1950)に接続され得る。周辺バスのアーキテクチャは、PCIおよびUSBなどを含む。