本明細書で使用される用語は本発明における機能を考慮しながらできるだけ現在広く使用されている一般的な用語を選択したが、これは当分野に携わる技術者の意図、慣例または新たな技術の出現などによって異なり得る。また、特定の場合は出願人が任意に選定した用語もあるが、この場合、該当する発明を実施する形態の部分にその意味を記載する。よって、本明細書で使用される用語は、単なる用語の名称ではなく、その用語の有する実質的な意味と本明細書全般にわたる内容に基づいて解釈すべきであることを明らかにする。
本明細書において、一部の用語は以下のように解釈される。コーディングは、場合によってはエンコーディングまたはでコーディングと解釈される。本明細書において、ビデオ信号のエンコーディング(符号化)を行ってビデオ信号のビットストリームを生成する装置はエンコーディング装置またはエンコーダと称され、ビデオ信号ビットストリームのデコーディング(復号化)を行ってビデオ信号を復元する装置はデコーディング装置またはデコーダと称される。また、本明細書において、ビデオ信号処理装置はエンコーダ及びデコーダをいずれも含む概念の用語として使用される。情報(information)は値(values)、パラメータ(parameter)、係数(coefficients)、成分(elements)などをいずれも含む用語であって、場合によっては意味が異なるように解釈されることがあるため、本発明はこれに限らない。「ユニット」は映像処理の基本単位またはピクチャの特定位置を指す意味で移用され、ルマ(luma)成分とクロマ(chroma)成分をいずれも含むイメージ領域を指す。また、「ブロック」はルマ成分及びクロマ成分(つまり、Cb及びCr)のうち特定成分を含むイメージ領域を指す。但し、実施例によって「ユニット」、「ブロック」、「パーティション」、及び「領域」などの用語は互いに混合して使用されてもよい。また、本明細書において、ユニットはコーディングユニット、予測ユニット、変換ユニットをいずれも含む概念として使用される。ピクチャはフィールドまたはフレームを指し、実施例よっては前記用語は互いに混用して使用される。
図1は、本発明の一実施例によるビデオ信号エンコーディング装置の概略的なブロック図である。図1を参照すると、本明細書のエンコーディング装置100は、変換部110、量子化部115、逆量子化部120、逆変換部125、フィルタリング部130、予測部150、及びエントロピーコーディング部160を含む。
変換部110は、入力されたビデオ信号と予測部150で生成された予測信号の差であるレジデュアル信号を変換して変換系数値を獲得する。例えば、離散コサイン変換(Discrete Cosine Transform、DCT)、離散サイン変換(Discrete Sine Transform、DST)、またはウェーブレット変換(Wavelet Transform)などが使用される。離散コサイン変換及び離散サイン変換は、入力されたピクチャ信号をブロックの形態に分けて変換を行うようになる。変換において、変換領域内の分布と特性によってコーディング効率が異なり得る。量子化部115は、変換部110で出力された変換係数の値を量子化する。
コーディング効率を上げるために、ピクチャ信号をそのままコーディングするのではなく、予測部150を介して予めコーディングされた領域を利用してピクチャを予測し、予測されたピクチャに原本ピクチャと予測ピクチャ間のレジデュアル値を足して復元ピクチャを獲得する方法が使用される。エンコーダとデコーダでミスマッチが発生しないように、エンコーダで予測を行う際にはデコーダでも使用可能な情報を使用すべきである。そのために、エンコーダでは符号化した現在ブロックを更に復元する過程を行う。逆量子化部120では変換係数値を逆量子化し、逆変換部125では逆量子化された変換系数値を利用してレジデュアル値を復元する。一方、フィルタリング部130は、復元されたピクチャの品質改善及び符号化効率の向上のためのフィルタリング演算を行う。例えば、デブロッキングフィルタ、サンプル適応的オフセット(Sample Adpative Offset、SAO)、及び適応的ループフィルタなどが含まれる。フィルタリングを経たピクチャは、出力されるか参照ピクチャとして利用するために複合ピクチャバッファ(Decoded Picture Buffer、DPB)156に貯蔵される。
コーディング効率を上げるために、ピクチャ信号をそのままコードせず、予測部150で既にコードされた領域を用いてピクチャを予測し、予測されたピクチャに原ピクチャと予測ピクチャ間のレジデュアル値を足して復元ピクチャを取得する方法が用いられる。イントラ予測部152では、現在ピクチャ内で画面内予測を行い、インター予測部154では、復号ピクチャバッファ156に保存された参照ピクチャを用いて現在ピクチャを予測する。イントラ予測部152は、現在ピクチャ内の復元された領域から画面内予測を行い、画面内符号化情報をエントロピーコーディング部160に伝達する。インター予測部154はさらに、モーション推定部154a及びモーション補償部154bを含んで構成されてよい。モーション推定部154aでは、復元された特定領域を参照して現在領域のモーションベクトル値を取得する。モーション推定部154aでは、参照領域の位置情報(参照フレーム、モーションベクトルなど)などをエントロピーコーディング部160に伝達してビットストリームに含まれ得るようにする。モーション推定部154aから伝達されたモーションベクトル値を用いて、モーション補償部154bでは画面間モーション補償を行う。
予測部150は、イントラ予測部152とインター予測部154を含む。イントラ予測部152は現在ピクチャ内でイントラ(intra)予測を行い、インター予測部154は復号ピクチャバッファ156に貯蔵された参照バッファを利用して現在ピクチャを予測するインター(inter)予測を行う。イントラ予測部152は、現在ピクチャ内の復元されたサンプルからイントラ予測を行い、イントラ符号化情報をエントロピーコーディング部160に伝達する。イントラ符号化情報は、イントラ予測モード、MPM(Most Probable Mode)フラッグ、MPMインデックスのうち少なくとも一つを含む。 イントラ符号化情報は、参照サンプルに関する情報を含むことができる。 イントラ符号化情報は参照サンプルに関する情報を含む。インター予測部154は、モーション推定部154a及びモーション補償部154bを含んで構成される。モーション推定部154aは、復元された参照信号ピクチャの特定領域を参照して現在領域のモーションベクトル値を獲得する。モーション推定部154aは、参照領域に対するモーション情報セット(参照ピクチャインデックス、モーションベクトル情報)をエントロピーコーディング部160に伝達する。モーション補償部154bは、モーション補償部154aから伝達されたモーションベクトル値を利用してモーション補償を行う。 インター予測部154は、参照領域に対するモーション情報を含むインター符号化情報をエントロピーコーディング部160に伝達する。
更なる実施例によって、予測部150はイントラブロックコピー(block copy、BC)予測部(図示せず)を含む。イントラBC予測部は、現在ピクチャ内の復元されたサンプルからイントラBC予測を行い、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC予測部は、現在ピクチャ内の特定領域を参照して現在領域の予測に利用される参照領域を示すブロックベクトル値を獲得する。イントラBC予測部は、獲得されたブロックベクトル値を利用してイントラBC予測を行う。イントラBC予測部は、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC予測部はブロックベクトル情報を含む。
上述したピクチャ予測が行われれば、変換部110は原本ピクチャと予測ピクチャの間のレジデュアル値を変換して変換係数値を獲得する。この際、変換はピクチャ内で特定ブロック単位で行われるが、特定ブロックのサイズは予め設定された範囲内で可変する。量子化部115は、変換部110で生成された変換係数の値を量子化してエントロピーコーディング部160に伝達する。
エントロピーコーディング部160は、量子化された変換係数を示す情報、イントラ符号化情報、及びインター符号化情報などをエントロピーコーディングしてビデオ信号ビットストリームを生成する。 エントロピーコーディング部160では、可変長コーディング(Variable Length Codeing、VLC)方式と算術コーディング(arithmetic coding)方式などが使用される。可変長コーディング(VLC)方式は入力されるシンボルを連続したコードワードに変換するが、コードワードの長さは可変的である。例えば、よく発生するシンボルは短いコードワードで、よく発生しないシンボルは長いコードワードで表現する。可変長コーディング方式として、コンテキスト基盤適応型可変長コーディング(Context-based Adaptive Variable Length Coding、CAVLC)方式が使用される。算術コーディングは連続したデータシンボルを一つの素数に変換するが、算術コーディングは各シンボルを表現するために必要な最適の素数ビットを得る。算術コーディングとして、コンテキスト基盤適合型算術符号化(Context-based Adaptive Binary Arithmetic Coding、CABAC)方式が使用される。例えば、エントロピーコーディング部160は、量子化された変換係数を示す情報を二進化することができる。また、エントロピーコーディング部160は、二進化された情報を算術コーディングしてビットストリームを生成することができる。
前記生成されたビットストリームは、NAL(Network Abstraction Layer)ユニットを基本単位にカプセル化される。NALユニットは、符号化された整数個のコーディングツリーユニット(coding tree unit)を含む。ビデオデコーダでビットストリームを復号化するためには、まずビットストリームをNALユニット単位に分離した後、分離されたそれぞれのNALユニットを復号化すべきである。一方、ビデオ信号ビットストリームの復号化のために必要な情報は、ピクチャパラメータセット(Picture Parameter Set、PPS)、シーケンスパラメータセット(Sequence Parameter Set、SPS)、ビデオパラメータセット(Video Parameter Set、VPS)などのような上位レベルセットのRBSP(Raw Byte Sequence Payload)を介して伝送される。
一方、図1のブロック図は本発明の一実施例によるエンコーディング装置100を示し、分離して示したブロックはエンコーディング装置100のエレメントを論理的に区別して示している。よって、上述したエンコーディング装置100のエレメントは、ディバイスの設計に応じて一つのチップまたは複数のチップに取り付けられる。一実施例によると、上述したエンコーディング装置100の各エレメントの動作はプロセッサ(図示せず)によって行われる。
図2は、本発明の実施例によるビデオ信号デコーディング装置の200概略的なブロック図である。図2を参照すると、本明細書のデコーディング装置200は、エントロピーデコーディング部210、逆量子化部220、逆変換部225、フィルタリング部230、及び予測部250を含む。
エントロピーデコーディング部210は、ビデオ信号ビットストリームをエントロピーデコードし、各領域に対する変換係数情報、イントラ符号化情報、インター符号化情報などを抽出する。例えば、エントロピーデコーディング部210は、ビデオ信号ビットストリームから特定領域の変換係数情報に対する二進化コードを取得することができる。また、エントロピーデコーディング部210は二進化コードを逆二進化し、量子化された変換係数を取得する。逆量子化部220は量子化された変換係数を逆量子化し、逆変換部225は、逆量子化された変換係数を用いてレジデュアル値を復元する。ビデオ信号処理装置200は、逆変換部225から取得したレジデュアル値を、予測部250から取得した予測値と合算して、元来の画素値を復元する。
一方、フィルタリング部230は、ピクチャに対するフィルタリングを行って画質を向上させる。ここには、ブロック歪曲現象を減少させるためのデブロッキングフィルタ及び/またはピクチャ全体の歪曲を除去するための適応的ループフィルタなどが含まれる。フィルタリングを経たピクチャは出力されるか、次のピクチャに対する参照ピクチャとして利用するために復号ピクチャバッファ(DPB)256に貯蔵される。
予測部250は、イントラ予測部252及びインター予測部254を含む。予測部250は、前述したエントロピーデコーディング部210を通じて復号化された符号化タイプ、各領域に対する変換係数、イントラ/インター符号化情報などを活用して予測ピクチャを生成する。復号化が遂行される現在ブロックを復元するために、現在ブロックが含まれた現在ピクチャまたは他のピクチャの復号化された領域が利用できる。 復元に現在ピクチャだけを用いる、すなわち、イントラ予測又はイントラBC予測を行うピクチャ(又は、タイル/スライス)をイントラピクチャ又はIピクチャ(又は、タイル/スライス)、イントラ予測、インター予測及びイントラBC予測を全て行うことができるピクチャ(又は、タイル/スライス)を、インターピクチャ(又は、タイル/スライス)という。インターピクチャ(又は、タイル/スライス)のうち、各ブロックのサンプル値を予測するために、最大で1つのモーションベクトル及び参照ピクチャインデックスを用いるピクチャ(又は、タイル/スライス)を、予測ピクチャ(predictive picture)又はPピクチャ(又は、タイル/スライス)といい、最大で2つのモーションベクトル及び参照ピクチャインデックスを用いるピクチャ(又は、タイル/スライス)を、双予測ピクチャ(Bi-predictive picture)又はBピクチャ(又は、タイル/スライス)という。 言い換えると、Pピクチャ(または、タイル/スライス)は各ブロックを予測するために最大1つの動き情報セットを用いて、Bピクチャ(または、タイル/スライス)は各ブロックを予測するために最大2つの動き情報セットを用いる。ここで、動き情報セットは1つ以上の動きベクトルと1つの参照ピクチャインデックスを含む。
イントラ予測部252は、イントラ符号化情報及び現在ピクチャ内の復元されたサンプルを利用して予測ブロックを生成する。上述したように、イントラ符号化情報は、イントラ予測モード、MPM(MOST Probable Mode)フラッグ、MPMインデックスのうち少なくとも一つを含む。イントラ予測部252は、現在ブロックの左側及び/または上側に位置する復元されたサンプルを参照サンプルとして利用して、現在ブロックのサンプル値を予測する。本開示において、復元されたサンプル、参照サンプル、及び現在ブロックのサンプルはピクセルを示す。また、サンプル値(sample value)はピクセル値を示す。
一実施例において、参照サンプルは現在ブロックの周辺ブロックに含まれたサンプルである。例えば、参照サンプルは現在ブロックの左側境界に隣接したサンプル及び/または上側境界に隣接したサンプルである。また、参照サンプルは現在ブロックの周辺ブロックのサンプルのうち、現在ブロックの左側境界から予め設定された距離以内のライン上に位置するサンプル及び/または現在ブロックの上側境界から予め設定された距離以内のライン上に位置するサンプルである。この際、現在ブロックの周辺ブロックは、現在ブロックに隣接した左側(L)ブロック、上側(A)ブロック、下左側(Below Left、BL)ブロック、右上側(Above Right、AR)ブロック、または左上側(Above Left、AL)ブロックのうち少なくとも一つを含む。
インター予測部254は、復号ピクチャバッファ256に貯蔵された参照ピクチャ及びインター符号化情報を利用して予測ブロックを生成する。インター符号化情報は、参照ブロックに対する現在ブロックのモーション情報セット(参照ピクチャインデックス、モーションベクトルなど)を含む。インター予測には、L0予測、L1予測、及び双予測(Bi-prediction)がある。L0予測はL0ピクチャリストに含まれた一つの参照ピクチャを利用した予測であり、L1予測はL1ピクチャリストに含まれた一つの参照ピクチャを利用した予測を意味する。そのためには、1セットのモーション情報(例えば、モーションベクトル及び参照ピクチャインデックス)が必要である。双予測方式では最大2つの参照領域を利用するが、この2つの参照領域は同じ参照ピクチャに存在してもよく、互いに異なるピクチャにそれぞれ存在してもよい。つまり、双予測方式では最大2セットのモーション情報(例えば、モーションベクトル及び参照ピクチャインデックス)が利用されるが、2つのモーションベクトルが同じ参照ピクチャインデックスに対応してもよく、互いに異なる参照ピクチャインデックスに対応してもよい。この際、参照ピクチャは時間的に現在ピクチャの以前や以降のいずれにも表示(または出力)される。 一実施例によって、双予測方式では、使用される2個の参照領域は、L0ピクチャリスト及びL1ピクチャリストのそれぞれから選択された領域であってよい。
インター予測部254は、モーションベクトル及び参照ピクチャインデックスを利用して現在の参照ブロックを獲得する。前記参照ブロックは、参照ピクチャインデックスに対応する参照ピクチャ内に存在する。また、モーションベクトルによって特定されたブロックのサンプル値またはこれの補間(interpolation)された値が現在ブロックの予測子(predictor)として利用される。サブペル(sub-pel)単位のピクセル正確度を有するモーション予測のために、例えば、輝度信号に対して8-タブ補間フィルタが、色差信号に対して4-タブ補間フィルタが使用される。但し、サブペル単位のモーション予測のための補間フィルタはこれに限らない。このように、インター予測部254は、以前復元されたピクチャから現在ユニットのテクスチャを予測するモーション補償(motion compensation)を行う。この際、インター予測部はモーション情報セットを利用する。
更なる実施例によって、予測部250は、イントラBC予測部(図示せず)を含むことができる。イントラBC予測部は、現在ピクチャ内の復元されたサンプルを含む特定領域を参照して現在領域を復元することができる。イントラBC予測部は、エントロピーデコーディング部210から、現在領域に対するイントラBC符号化情報を取得する。イントラBC予測部は、現在ピクチャ内の特定領域を指示する現在領域のブロックベクトル値を取得する。イントラBC予測部は、取得されたブロックベクトル値を用いてイントラBC予測を行うことができる。イントラBC符号化情報は、ブロックベクトル情報を含むことができる。
更なる実施例によって、予測部250は、イントラBC予測部(図示せず)を含むことができる。イントラBC予測部は、現在ピクチャ内の復元されたサンプルを含む特定領域を参照して現在領域を復元することができる。イントラBC予測部は、エントロピーデコーディング部210から、現在領域に対するイントラBC符号化情報を取得する。イントラBC予測部は、現在ピクチャ内の特定領域を指示する現在領域のブロックベクトル値を取得する。イントラBC予測部は、取得されたブロックベクトル値を用いてイントラBC予測を行うことができる。イントラBC符号化情報は、ブロックベクトル情報を含むことができる。
一方、図2のブロック図は本発明の一実施例によるデコーディング装置200を示し、分離して示したブロックはデコーディング装置200のエレメントを論理的に区別して示している。よって、上述したデコーディング装置200のエレメントは、ディバイスの設計に応じて一つのチップまたは複数のチップに取り付けられる。一実施り例によると、上述したデコーディング装置200の各エレメントの動作はプロセッサ(図示せず)によって行われる。
図3は、ピクチャ内でコーディングツリーユニット(Coding Tree Unit、CTU)がコーディングユニット(Coding Units、CUs)に分割される実施例を示している。ビデオ信号のコーディング過程において、ピクチャはコーディングツリーユニット(CTU)のシーケンスに分割される。コーディングツリーユニットは、輝度サンプルのNXNブロックと、それに対応する色差サンプルの2つのブロックからなる。コーディングツリーユニットは、複数のコーディングユニットに分割される。コーディングツリーユニットは分割されずにリーフノードになってもよい。この場合、コーディングツリーユニット自体がコーディングユニットになり得る。コーディングユニットは上述したビデオ信号の処理過程、つまり、イントラ/インター予測、変換、量子化及び/またはエントロピーコーディングなどの過程でピクチャを処理するための基本単位を指す。一つのピクチャ内において、コーディングユニットのサイズ及び模様は一定ではない。コーディングユニットは正方形または長方形の模様を有する。長方形コーディングユニット(または、長方形ブロック)は垂直コーディングユニット(または、垂直ブロック)と水平コーディングユニット(または、水平ブロック)を含む。本明細書において、垂直ブロックは高さが幅より大きいブロックであり、水平ブロックは幅が高さより大きいブロックである。また、本明細書において、正方形ではない(non-square)ブロックは長方形ブロックを指すが、本発明はこれに限らない。
図3を参照すると、コーディングツリーユニットは、まずクォードツリー(Quad Tree、QT)構造に分割される。つまり、クォードツリー構造において、2N×2Nのサイズを有する一つのノードはN×Nのサイズを有する4つのノードに分割される。本明細書において、クォードツリーは4進(quaternary)ツリーとも称される。クォードツリー分割は再帰的に行われ、全てのノードが同じ深さに分割される必要はない。
一方、上述したクォードツリーのリーフノード(leaf node)は、マルチ-タイプツリー(Multi-Type Tree、MTT)構造に更に分割される。本発明の実施例によると、マルチタイプツリー構造では一つのノードが水平または垂直分割の2進(binary、バイナリー)または3進(ternary、ターナリー)ツリー構造に分割される。つまり、マルチ-タイプツリー構造には、垂直バイナリー分割、水平バイナリー分割、垂直ターナリー分割、及び水平ターナリー分割の4つの分割構造が存在する。本発明の実施例によると、前記各ツリー構造において、ノードの幅及び高さはいずれも2の累乗値を有する。例えば、バイナリーツリー(binary Tree、BT)構造において、2N×2Nのサイズのノードは垂直バイナリー分割によって2つのN×2Nノードに分割され、水平バイナリー分割によって2つの2N×Nノードに分割される。また、ターナリーツリー(Ternary Tree、TT)構造において、2N×2Nのサイズのノードは垂直ターナリー分割によって(N/2)×2N、N×2N及び(N/2)×2Nのノードに分割され、水平ターナリー分割によって2N×(N/2)、2N×N及び2N×(N/2)のノードに分割される。このようなマルチ-タイプツリー分割は再帰的に行われる。
マルチ-タイプツリーのリーフノードはコーディングユニットできる。コーディングユニットに対する分割が指示されないか、またはコーディングユニットが最大変換長さに比べて大きくない場合、該当コーディングユニットはこれ以上の分割無しで予測及び変換の単位に使われる。 一方、上述したクォードツリー及びマルチ-タイプツリーにおいて、次のパラメータのうち少なくとも一つが事前に定義されるか、PPS、SPS、VPSなどのような上位レベルセットのRBSPを介して伝送される。1)CTUサイズ:クォードツリーのルートノード(root node)のサイズ、2)最小QTサイズ(MinQtSize):許容された最小QTリーフノードのサイズ、3)最大BTサイズ(MaxBtSize):許容された最大BTルートノードのサイズ、4)最大TTサイズ(MaxTtSize):許容された最大TTルートノードのサイズ、5)最大MTT深さ(MaxMttDepth):QTのリーフノードからのMTT分割の最大許容深さ、6)最小BTサイズ(MinBtSize):許容された最小BTリーフノードのサイズ、7)最小TTサイズ:許容された最小TTリーフノードのサイズ。
図4は、クワッドツリー及びマルチ-タイプツリーの分割をシグナリングする方法の一実施形態を図示する。前述したクワッドツリー及びマルチ-タイプツリーの分割をシグナリングするために既設定されたフラグが使われることができる。図4を参照すると、クワッドツリーノードを分割するか否かを指示するフラグ‘qt_split_flag’、マルチ-タイプツリーノードを分割するか否かを指示するフラグ‘mtt_split_flag’、マルチ-タイプツリーノードの分割方向を指示するフラグ‘mtt_split_vertical_flag’またはマルチ-タイプツリーノードの分割形態を指示するフラグ‘mtt_split_binary_flag’のうち、少なくとも1つが使われることができる。
本発明の実施形態によれば、コーディングツリーユニットはクワッドツリーのルートノードであり、クワッドツリー構造に先に分割できる。クワッドツリー構造では各々のノード‘QT_node’別に‘qt_split_flag’がシグナリングされる。‘qt_split_flag’の値が1の場合、該当ノードは4個の正四角形ノードに分割され、‘qt_split_flag’の値が0の場合、該当ノードはクワッドツリーのリーフノード‘QT_leaf_node’となる。
各々のクワッドツリーリーフノード‘QT_leaf_node’はマルチ-タイプツリー構造にさらに分割できる。マルチ-タイプツリー構造では、各々のノード‘MTT_node’別に‘mtt_split_flag’がシグナリングされる。‘mtt_split_flag’の値が1の場合、該当ノードは複数の矩形ノードに分割され、‘mtt_split_flag’の値が0の場合、該当ノードはマルチ-タイプツリーのリーフノード‘MTT_leaf_node’となる。マルチ-タイプツリーノード‘MTT_node’が複数の矩形ノードに分割される場合(即ち、‘mtt_split_flag’の値が1の場合)、ノード‘MTT_node’のための‘mtt_split_vertical_flag’及び‘mtt_split_binary_flag’が追加でシグナリングできる。‘mtt_split_vertical_flag’の値が1の場合、ノード‘MTT_node’の垂直分割が指示され、‘mtt_split_vertical_flag’の値が0の場合、ノード‘MTT_node’の水平分割が指示される。また、‘mtt_split_binary_flag’の値が1の場合、ノード‘MTT_node’は2つの矩形ノードに分割され、‘mtt_split_binary_flag’の値が0の場合、ノード‘MTT_node’は3個の矩形ノードに分割される。
コーティングのためのピクチャ予測(モーション補償)はそれ以上分けられないコーディングユニット(つまり、コーディングユニットツリーのリーフノード)を対象に行われる。このような予測を行う基本単位を、以下では予測ユニット(prediction unit)または予測ブロック(prediction block)という。
以下、本明細書で使用されるユニットという用語は、予測を行う基本単位である前記予測ユニットを代替する用語として使用される。但し、本発明はこれに限らず、より広い意味では、前記コーディングユニットを含む概念として理解される。
図5には、本発明の実施例に係るインター予測を図示する。前述したように、デコーダは、復号化された他のピクチャの復元されたサンプルを参照して現在ブロックを予測する。図5を参照すると、デコーダは、現在ブロック32のモーション情報に基づいて参照ピクチャ内の参照ブロック42を取得する。この時、モーション情報は、参照ピクチャインデックス及びモーションベクトル50を含むことができる。参照ピクチャインデックスは、参照ピクチャリストにおいて現在ブロックの参照ピクチャを指示する。また、モーションベクトル50は、現在ピクチャ内における現在ブロック32の座標値と参照ピクチャ内における参照ブロック42の座標値間のオフセットを表す。デコーダは、参照ブロック42のサンプル値に基づいて現在ブロック32の予測子を取得し、前記予測子を用いて現在ブロック32を復元する。
一方、本発明の実施例によれば、サブブロックベースのモーション補償が用いられてよい。すなわち、現在ブロック32は複数のサブブロックに分割され、各サブブロック別に独立したモーションベクトルが用いられてよい。したがって、現在ブロック32内で各サブブロックは異なる参照ブロックを用いて予測されてよい。一実施例によれば、サブブロックは、4X4又は8X8のように既に設定されたサイズを有することができる。デコーダは、各サブブロックのモーションベクトルを用いて現在ブロック32の各サブブロックの予測子を取得する。各サブブロックの予測子を組み合わせて現在ブロック32の予測子が取得でき、デコーダは、このように取得された現在ブロック32の予測子を用いて現在ブロック32を復元することができる。
本発明の実施例によれば、様々な方法のサブブロックベースのモーション補償が行われてよい。サブブロックベースのモーション補償は、アフィン(affine)モデルベースのモーション補償(以下、アフィンモーション補償又はアフィンモーション予測)と、サブブロックベースの時間的モーションベクトル予測(Subblock-based Temporal Motion Vector Prediction,SbTMVP)を含むことができる。以下、各図を参照して、アフィンモーション補償とSbTMVPの様々な実施例について述べる。
図6は、本発明の一実施例に係るモーションベクトルシグナリング方法を例示する図である。本発明の一実施例によれば、モーションベクトル(motion vector,MV)は、モーションベクトル予測(又は、予測子)(motion vector prediction(or predictor)、MVP)に基づいて生成されてよい。一例として、次の数学式1のように、MVはMVPと決定されてよい。言い換えると、MVはMVPと同じ値に決定(又は、設定、誘導)されてよい。
他の例として、次の数学式2のように、MVは、MVP及びモーションベクトル差分(motion vector difference,MVD)に基づいて決定されてもよい。エンコーダは、より正確なMVを表すためにMVD情報をデコーダにシグナルすることができ、デコーダは、取得したMVDをMVPに加算することによってMVを誘導することができる。
本発明の一実施例によれば、エンコーダは、決定されたモーション情報をデコーダに伝送し、デコーダは、受信したモーション情報からMVを生成(又は、誘導)し、これに基づいて予測ブロックを生成することができる。例えば、前記モーション情報は、MVP情報、MVD情報を含むことができる。このとき、インター予測モードによって前記モーション情報の構成要素が異なってよい。一例として、マージモードにおいて、前記モーション情報はMVP情報を含み、MVD情報を含まなくてもよい。他の例として、AMVP(advanced motion vector prediction)モードにおいて、前記モーション情報はMVP情報及びMVD情報を含むことができる。
MVPに関する情報を決定、送信、受信するために、エンコーダとデコーダは同一の方法でMVP候補(又は、MVP候補リスト)を生成することができる。例えば、エンコーダとデコーダは、同一の順序で同一のMVP候補を生成することができる。そして、エンコーダは、生成されたMVP候補の中から決定された(又は、選択された)MVPを示す(又は、指示する)インデックスをデコーダに伝送し、デコーダは、受信したインデックスに基づいて、決定されたMVP及び/又はMVを誘導することができる。
本発明の一実施例によれば、MVP候補は空間候補(spatial candidate)、時間候補(temporal candidate)などを含むことができる。前記MVP候補は、マージモードが適用される場合、マージ候補と呼ぶことができ、AMVPモードが適用される場合、AMVP候補と呼ぶことができる。空間候補は、現在ブロックを基準に特定位置にあるブロックに対するMV(又は、モーション情報)であってよい。例えば、前記空間候補は、現在ブロックと隣接したり又は隣接していない位置のブロックのMVであってよい。時間候補は、現在ピクチャと異なるピクチャ内のブロックに該当するMVであってよい。また、例えば、MVP候補は、アフィン(affine)MV、ATMVP、STMVP、前述したMV(又は、候補)の組合せ、前述したMV(又は、候補)の平均MV、ゼロMVなどを含むことができる。
一実施例において、エンコーダは、参照ピクチャを示す情報をデコーダにシグナルすることができる。実施例として、MVP候補の参照ピクチャと現在ブロック(又は、現在処理ブロック)の参照ピクチャとが異なる場合、エンコーダ/デコーダは、MVP候補のMVスケーリング(motion vector scaling)を行うことができる。この時、MVスケーリングは、現在ピクチャのピクチャ順序カウント(picture order count,POC)、現在ブロックの参照ピクチャのPOC、MVP候補の参照ピクチャのPOCに基づいて行われてよい。
以下に、MVDシグナリング方法に関する具体的な実施例を説明する。下表1には、MVDシグナリングのためのシンタックス構造を例示する。
表1を参照すると、本発明の一実施例によれば、MVDは、MVDの符号(sign)及び絶対値(absolute value)が分けられてコードされてよい。すなわち、MVDの符号及び絶対値はそれぞれ異なるシンタックス(又は、シンタックスエレメント)であってよい。また、MVDの絶対値は、その値が直接コードされてもよく、表1のように、絶対値がNよりも大きいか否かを示すフラグに基づいて段階的にコードされてもよい。仮に、絶対値がNよりも大きい場合、(絶対値-N)の値が共にシグナルされてよい。具体的に、表1の例示において絶対値が0よりも大きいか否かを示すabs_mvd_greater0_flagが伝送されてよい。仮に、絶対値が0よりも大きくないことをabs_mvd_greater0_flagが示す(又は、指示する)場合、MVDの絶対値は0と決定されてよい。また、仮に絶対値が0よりも大きいことをabs_mvd_greater0_flagが示す場合、追加シンタックス(又は、シンタックスエレメント)が存在してよい。
例えば、絶対値が1よりも大きいか否かを示すabs_mvd_greater1_flagが伝送されてよい。仮に、絶対値が1よりも大きくないことをabs_mvd_greater1_flagが示す(又は、指示する)場合、MVDの絶対値は1と決定されてよい。仮に、絶対値が1よりも大きいことをabs_mvd_greater1_flagが示す場合、追加シンタックスが存在してよい。例えば、abs_mvd_minus2が存在してよい。abs_mvd_minus2は、(絶対値-2)の値であってよい。abs_mvd_greater0_flag、abs_mvd_greater1_flag値によって絶対値が1よりも大きい(すなわち、2以上である)と決定されたので、(絶対値-2)値がシグナルされてよい。このように、絶対値に関する情報を階層的にシンタックスシグナルすることによって、絶対値をそのまま二進化(binarization)してシグナリングする場合に比べてより少ないビットが用いられて済む。
一実施例において、上述した絶対値に関連したシンタックスは、指数ゴロム(Exponential-Golomb)、切削型単項(truncated unary)、切削型ライス(truncated Rice)などの変数長(variable length)である二進化方法を適用してコードされてよい。また、MVDの符号を示すフラグは、mvd_sign_flagでシグナルされてよい。
上述した実施例において、MVDに対するコーディング方法を説明したが、MVD以外の情報も符号及び絶対値を分けてシグナリングすることができる。そして、絶対値は、前記絶対値があらかじめ定義された特定値よりも大きいか否かを示すフラグ及び絶対値から前記特定値を引いた値にコードされてよい。前記表1において、[0]と[1]は、コンポーネントインデックス(component index)を表すことができる。例えば、x-コンポーネント(すなわち、水平成分)、y-コンポーネント(すなわち、垂直成分)を表すことができる。
図7は、本発明の一実施例に係る適応的なモーションベクトル解像度(adaptive motion vector resolution)情報のシグナリング方法を例示する図である。本発明の一実施例によれば、MV又はMVDを示すための解像度は多様であり得る。例えば、解像度は、ピクセル(pixel)(又は、ペル(pel))に基づいて表現されてよい。例えば、MV又はMVDは、1/4(quarter)、1/2(half)、1(integer)、2、4ピクセルなどの単位でシグナルされてよい。そして、エンコーダは、MV又はMVDの解像度情報をデコーダにシグナリングすることができる。また、例えば、16は、1/4単位のとき、64にコードされ(1/4*64=16)、1単位のとき、16にコードされ(1*16=16)、4単位のとき、4にコードされてよい(4*.4=16)。すなわち、MV又はMVD値は、次の数学式3によって決定されてよい。
数学式3において、valueDeterminedは、MV又はMVD値を表す。また、valuePerResolutionは、決定された解像度に基づいてシグナリングされる値を表す。このとき、MV又はMVDでシグナリングする値が決定された解像度で割り切れない場合、ラウンディング(rounding)プロセスなどが適用されてよい。高い解像度を使用すれば正確度が向上し得るが、コードされる値が大きいため多くのビットが使用されることがあり、低い解像度を使用すれば正確度が低くなることがあるが、コードされる値が小さいため少ないビットが使用されて済む。一実施例として、上述した解像度は、シーケンス、ピクチャ、スライス、コーディングツリーユニット(coding tree unit,CTU)、コーディングユニット(coding unit,CU)などの単位で個別に設定されてよい。すなわち、エンコーダ/デコーダは、上述した単位のうち、あらかじめ定義された単位によって適応的に解像度を決定/適用することができる。
本明細書の一実施例によれば、上述した解像度情報は、エンコーダからデコーダにシグナリングされてよい。この時、解像度に関する情報は、前述した変数長に基づいて二進化してシグナルされてよい。このような場合、最小の値(すなわち、最も前にある値)に該当するインデックスに基づいてシグナリングされる場合、シグナリングオーバーヘッドが減ることができる。一実施例として、高い解像度から低い解像度の順にシグナリングインデックスにマップされてもよい。
本明細書の一実施例によれば、図7は、様々な複数の解像度のうち、3つの解像度が用いられる場合を仮定してシグナリング方法を示す。この場合、3つのシグナリングビットは、0、10、11でよく、前記3つのシグナリングインデックスはそれぞれ、第1解像度、第2解像度、第3解像度を表すことができる。第1解像度をシグナリングするために1ビットが要求され、残りの解像度をシグナルするために2ビットが要求されるため、第1解像度をシグナルする場合、シグナリングオーバーヘッドを相対的に減らすことができる。図7の例示において、第1解像度、第2解像度、第3解像度はそれぞれ、1/4、1、4ピクセル解像度と定義されてよい。以下の実施例において、MV解像度はMVDの解像度を意味できる。
図8には、本発明の一実施例に係るアフィンモーション補償を示す。既存のインター予測方法によれば、現在ブロックに対するL0予測及びL1予測別に単一のモーションベクトルを用いてインター予測が行われるので、並進運動(translation motion)の予測に最適化されている。しかし、ズームイン/アウト、回転及びその他不規則的な運動に対するモーション補償を効率的に行うためには、様々な形状とサイズの参照ブロック44が用いられる必要がある。
以下では、モーションベクトル差分を用いるマージモード(merge mode with MVD,MMVD)(又は、マージMVD)に基づくモーション補償方法を説明する。
図8は、本発明の一実施例に係るコーディングユニットシンタックス(coding unit syntax)を例示する図である。本発明の一実施例によれば、MMVDが適用されるか否かを示すシンタックス要素は、マージモードが適用されるか否かを示すシンタックス要素に基づいてシグナルされてよい。図8を参照すると、S801段階で、MMVDフラグは、(mmvd_flag)はマージフラグ(merge_flag)が0である場合(すなわち、マージモードを使用しない場合)にシグナルされてよい。図8で、MMVDフラグは、MMVDが適用されるか否かを示すシンタックス要素(又は、フラグ)を表す。そして、マージフラグは、マージモードが適用されるか否かを示すシンタックス要素(又は、フラグ)を表す。
本発明の一実施例によれば、エンコーダ/デコーダは、マージモードが適用される場合、モーションベクトル予測子(motion vector predictor,MVP)及びモーションベクトル差分(motion vector difference,MVD)に基づいてモーションベクトル(motion vector,MV)を決定できる。本明細書において、前記MVPは、ベースモーションベクトル(baseMV)と呼ぶことができる。すなわち、エンコーダ/デコーダは、ベースモーションベクトルにモーションベクトル差分を合算することによってモーションベクトル(すなわち、最終モーションベクトル)を誘導することができる。ただし、本発明がこのような名称に制限されるものではなく、前記MVPは、ベースモーションベクトル、臨時モーションベクトル、初期モーションベクトル、MMVD候補モーションベクトルなどと呼ぶこともできる。前記MVDは、MVPを改善(refine)する値と表現でき、改善モーションベクトル(refineMV)、マージモーションベクトル差分と呼ぶことができる。
本発明の一実施例によれば、MMVDが適用される場合、すなわち、MMVDモードにおいて、MVはベースモーションベクトル、距離(distance)パラメータ(又は、変数)、方向(direction)パラメータ(又は、変数)に基づいて決定されてよい。また、本発明の一実施例によれば、ベースモーションベクトルは候補リストから決定されてよい。例えば、ベースモーションベクトルはマージ候補リストから決定されてよい。また、エンコーダ/デコーダは、他の候補リストの一部からベースモーションベクトルを決定することができる。また、前記候補リストの一部は、前記候補リストの前部の一部(インデックスが小さい方)であってよい。例えば、エンコーダ/デコーダは、マージ候補リストの候補のうち、一番目及び二番目の候補を用いてベースモーションベクトルを決定することができる。そのために、前記2個の候補のうち特定候補を指示する候補インデックスがエンコーダからデコーダにシグナルされてよい。図21を参照すると、ベースモーションベクトルをシグナリングするインデックスであるベース候補インデックスが定義されてよい。エンコーダ/デコーダは、前記ベース候補インデックスによって、候補リストの候補の中から現在ブロックに適用される候補を決定し、決定された候補のモーションベクトルをベースモーションベクトルと決定できる。本発明において、前記ベース候補インデックスはその名称に制限されず、前記ベース候補インデックスは、ベース候補フラグ、候補インデックス、候補フラグ、MMVDインデックス、MMVD候補インデックス、MMVD候補フラグなどと呼ぶことができる。
また、本発明の一実施例によれば、図6及び図7で説明したMVDと異なるMVDが存在してよい。例えば、MMVDにおけるMVDは、図6及び図7で説明したMVDと異なるように定義されてよい。本明細書において、MMVDは、モーションベクトル差分を用いるマージモード(すなわち、モーション補償モード、方法)を表してもよく、MMVDが適用される場合のモーションベクトル差分を表してもよい。例えば、エンコーダ/デコーダは、MMVD適用の有無(又は、使用の有無)を決定することができる。仮に、MMVDが適用される場合、エンコーダ/デコーダは、マージ候補リストから現在ブロックのインター予測に用いられるマージ候補を誘導し、MMVDを誘導して前記マージ候補のモーションベクトルに適用(又は、加算)することによって現在ブロックのモーションベクトルを決定することができる。
一実施例において、前記他のMVDは、簡略化されたMVD、他の(又は、小さい)解像度を有するMVD、利用可能な数が少ないMVD、シグナリング方法が異なるMVDなどを意味できる。例えば、図6及び図7で説明した既存AMVP、アフィンインターモードなどで使用するMVDは、特定シグナリング単位(例えば、x-ペル(pel))に対してx、y軸(すなわち、水平、垂直方向)における全ての領域、例えば、ピクチャに基づく領域(例えば、ピクチャ領域又はピクチャと周辺領域を含む領域)を均等な間隔で全て表すことができるのに対し、MMVDは、特定シグナリング単位を表現する単位が相対的に制限されてよい。また、MMVDをシグナリングする領域(又は、単位)が均等な間隔を持たなくてもよい。また、MMVDは、特定シグナリング単位に対して特定方向だけを示すことができる。
また、本発明の一実施例によれば、MMVDは、距離と方向に基づいて決定されてよい。図21を参照すると、MMVDの距離を示す距離インデックス及びMMVDの方向を示す方向インデックスによるMMVDの距離及び方向が既に設定されてよい。一実施例において、距離は、特定画素単位のMMVDサイズ(例えば、絶対値)を示すことができ、方向は、MMVDの方向を示すことができる。また、エンコーダ/デコーダは、相対的に小さい距離を相対的に小さいインデックスでシグナルすることができる。すなわち、固定長(fixed length)二進化を用いるシグナリングでない場合、エンコーダ/デコーダは、相対的に小さい距離を相対的に少ないビットでシグナルすることができる。
本発明の一実施例において、MMVD関連シンタックス要素は、マージフラグ(すなわち、merge_flag)が0である場合(すなわち、マージモードを使用しない場合)にシグナルされてよい。前述したように、MMVDは、ベース候補(base candidate)に対するMVDをシグナルする方法であってよい。このような点で、MMVDモードは、MVDをシグナルするAMVP、アフィン(affine)AMVP(又は、アフィンインター)などのモードと類似性を有することができる。これにより、マージフラグが0の場合にシグナルできる。S802段階で、デコーダは、現在ブロックにMMVDが適用される場合、すなわち、MMVDフラグが1である場合、MMVD関連シンタックス要素をパースできる。実施例として、MMVD関連シンタックス要素は、mmvd_merge_flag、mmvd_distance_idx、mmvd_direction_idxのうち少なくとも一つを含むことができる。ここで、mmvd_merge_flagは、MMVDのベース候補を示すフラグ(又は、シンタックス要素)を表し、mmvd_distance_idxは、MVDの距離値を示すインデックス(又は、シンタックス要素)を表し、mmvd_direction_idxは、MVDの方向を示すインデックス(又は、シンタックス要素)を表す。
また、図8を参照すると、CuPredModeは、現在ブロックの予測モードを示す変数(又は、値)を表す。又は、現在ブロックの予測モードは、現在ブロックがイントラ予測されるかインター予測されるかを示す値であってよい。又は、現在ブロックの予測モードはpred_mode_flagに基づいて決定されてよい。ここで、pred_mode_flagは、現在ブロックがインター予測モードにコードされたか又はイントラ予測モードにコードされたかを示すシンタックス要素を表す。仮に、pred_mode_flagが0の場合に、現在ブロックの予測モードは、インター予測を使用することを示す値に設定されてよい。インター予測を使用することを示す予測モード値は、MODE_INTERであってよい。仮に、pred_mode_flagが1である場合、現在ブロックの予測モードは、イントラ予測を使用することを示す値に設定されてよい。イントラ予測を使用することを示す予測モード値は、MODE_INTRAであってよい。仮に、pred_mode_flagが存在しない場合、CuPredModeは既に設定された値に設定されてよい。また、一例として、前記既に設定された値は、MODE_INTRAであってよい。
また、図8を参照すると、cu_cbfは、変換と関連したシンタックスが存在するかを示す値であってよい。前記変換と関連したシンタックスは、変換ツリーシンタックス構造(transform tree syntax structure)であってよい。また、前記変換に関連したシンタックスは、図28の変換ツリー(transform_tree)でシグナルされるシンタックスであってよい。また、cu_cbfが0である場合、変換に関連したシンタックスは存在しなくてよい。cu_cbfが1である場合、変換に関連したシンタックスは存在してよい。図28を参照すると、S803段階において、cu_cbfが1である場合、デコーダは、変換ツリーシンタックスを呼び出すことができる。仮に、cu_cbfが存在しない場合、cu_skip_flagに基づいてcu_cbf値が決定されてよい。例えば、cu_skip_flagが1である場合、cu_cbfが0であってよい。また、cu_skip_flagが0の場合に、cu_cbfが1であってよい。前述したように、cu_skip_flagは、スキップモードを使用するか否かを示すシンタックス要素を表す。そして、スキップモードが適用される場合、レジデュアル(residual)信号は使用しなくてよい。すなわち、スキップモードは、予測信号(prediction signal)にレジデュアルを加算しないで復元するモードであってよい。したがって、cu_skip_flagが1ということは、変換に関連したシンタックスが存在しないことを意味できる。
本発明の一実施例によれば、S802段階において、デコーダは、イントラ予測を使用しない場合に、cu_cbfがパースできる。また、cu_skip_flagが0の場合に、cu_cbfがパースできる。また、デコーダは、マージフラグが0の場合に、cu_cbfがパースできる。また、これらの条件は結合して適用されてもよい。例えば、デコーダは、現在ブロックの予測モードがイントラ予測モードでなく、マージフラグが0である場合に、cu_cbfがパースできる。又は、デコーダは、現在ブロックの予測モードがインター予測モードであり、マージフラグが0である場合に、cu_cbfがパースできる。これは、マージモードでないインター予測の場合にスキップモードを使用してもよく、使用しなくてもよいためである。
図9は、本発明の一実施例に係るコーディングユニットシンタックスを例示する図である。本発明の実施例によれば、前述した図8のcu_cbf及び変換関連シンタックスは、図9に示すように変更されてよい。すなわち、本発明の一実施例によれば、特定モードが適用される場合、スキップモードを使用するか否かが決定されてよい。例えば、MMVDが適用される場合、スキップモードを使用するか否かが決定されてよい。一実施例として、図9を参照すると、S901段階において、デコーダは、MMVDが適用されるか否かに基づいて、cu_cbfをパースするか否かが決定できる。すなわち、MMVD適用の有無によってスキップモードを使用するか否かが決定されるので、それに応じて、cu_cbfをパースするか否かが決定されてよい。スキップモード使用の有無が明確な場合、デコーダはcu_cbfをパースしなくてもよい。
一実施例において、MMVDを使用する場合、エンコーダ/デコーダは、スキップモードを使用しなくてもよい。MMVDは、MVDをAMVPのように正確に示すことができず、前述したように、限定された範囲でのみ表現できるので、レジデュアルを用いてより正確に復元することができる。したがって、MMVD使用の有無に基づき、cu_cbfをパースするか否かを決定することによって、予測の正確度を高め、圧縮効率を上げることができる。例えば、MMVDを使用する場合、デコーダは、cu_cbfをパースしなくてもよい。仮に、MMVDを使用しない場合、デコーダは、cu_cbfがパースできる。S901段階において、デコーダは、MMVDフラグが0の場合に、cu_cbfがパースでき、MMVDフラグが1の場合に、cu_cbfをパースしなくてもよい。
本発明の一実施例において、cu_cbfが存在しない場合、デコーダは、cu_cbf値が推論できる。図8で説明した方法によれば、デコーダは、cu_skip_flag値に基づいてcu_cbfが推論できる。本発明の実施例によれば、マージフラグに基づいてcu_cbf値が推論できる。仮にマージフラグが0の場合に、デコーダはcu_cbfを1と推論できる。一例として、マージモードを使用しない場合、変換に関連したシンタックスが存在することを示すことができる。したがって、図8及び図9の実施例においてMMVDを使用する場合、デコーダは、cu_cbfを1と推論できる。実施例として、デコーダは、1)マージフラグが1であり、cu_skip_flagが1の場合に、cu_cbfを0と推論し、2)マージフラグが1であり、cu_skip_flagが0の場合に、cu_cbfを1と推論し、3)マージフラグが0の場合に、cu_cbfを1と推論できる。又は、図8に示すように、実施例として、デコーダは、1)cu_skip_flagが1の場合に、cu_cbfを0と推論し、2)cu_skip_flagが0の場合に、cu_cbfを1と推論できる。
本発明のさらに他の実施例によれば、MMVDフラグに基づいてcu_cbf値が推論できる。MMVDフラグが1の場合に、cu_cbfを1と推論できる。また、MMVDフラグが0の場合には、cu_cbfを0又は1と推論できる。図28で説明した推論方法と結合すれば、1)MMVDフラグが1の場合に、cu_cbfを1と推論し、2)MMVDフラグが0であり、cu_skip_flagが1の場合に、cu_cbfを0と推論し、3)MMVDフラグが0であり、cu_skip_flagが0の場合に、cu_cbfを1と推論できる。
また、一実施例として、図8及び図9の実施例において、MMVDフラグはマージデータ(merge_data)シンタックス内に存在しなくてもよい。マージデータシンタックスは、図8及び図9に示すマージデータシンタックスであってよい。
図10は、本発明の一実施例に係るマージモードシグナリング方法を例示する図である。本発明の一実施例において、マージモードは、図10に示すようなシンタックス要素に基づいてシグナルされてよい。図10を参照すると、マージモードは、正規フラグ(regular flag)、MMVDフラグ、サブブロックフラグ(subblock flag)及び/又はCIIP(combined inter-picture merge and intra-picture prediction)フラグのうち少なくとも一つに基づいてシグナルされてよい。本発明において、CIIPは、インター予測(例えば、マージモードインター予測)とイントラ予測とを結合した予測方法を示し、多重仮定予測(multi-hypothesis prediction)と呼ぶことができる。
図10を参照すると、図10の(a)及び(b)はそれぞれ、スキップでないマージモード及びスキップであるマージモードに該当する場合を示すことができる。図10の実施例において、前述した図8及び図9のマージデータシンタックス(merge data syntax)と違い、正規フラグ(regular flag)が存在し得る。一例として、トライアングル(triangle flag)が存在しなくてもよい。前記正規フラグは、従来のマージモードを使用することを示すシンタックス要素であってよく、本発明において、前記正規フラグは、正規マージフラグと呼ぶことができる。既存のマージモードは、HEVCで使用したのと同じマージモードであってよい。また、前記従来のマージモードは、マージインデックスにより示される候補を使用し、MVDを使用しないで動き補償を行うマージモードであってよい。一実施例において、正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグは、既に設定された順にシグナルされてよい。MMVDフラグは、MMVDを使用するか否かを示すシンタックス要素を表す。サブブロックフラグは、サブブロックベースの予測が行われるサブブロックモードを使用するか否かを示すシンタックス要素を表す。CIIPフラグは、CIIPモードが適用されるか否かを示すシンタックス要素を表す。
本発明の一実施例において、前記正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグ中に当該モードを使用するか否かを示すためのシグナリングは、1以下であってよい。したがって、エンコーダ/デコーダは、前記正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグのうち、1の値が発生すれば、デコーディング順序において以降に取得されるフラグは0であると判断できる。また、前記正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグがいずれも0である場合、前記正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグが示さないモードが使用されるものであってよい。前記正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグが示さないモードは、トライアングル予測(triangle prediction)であってよい。すなわち、一実施例として、正規フラグ、MMVDフラグ、サブブロックフラグ、CIIPフラグがいずれも0である場合、トライアングル予測モードが適用されると決定されてよい。
図11は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図11は、先に図10で説明したシンタックス要素が用いられるシンタックス構造を例示する。図11において、正規マージフラグは、正規マージフラグを表す。一例として、前記正規マージフラグは、先に図10で説明した正規フラグであってよい。
本発明の一実施例によれば、正規マージフラグは、マージデータシンタックスの先頭に位置してよい。S1101段階において、デコーダは、マージデータシンタックス内で、まず、正規マージフラグがパースできる。すなわち、正規マージフラグは、マージフラグが1であることを確認した後にパースする最初のシンタックス要素であってよい。S1102段階において、デコーダは、正規マージフラグが0の場合に、MMVDフラグがパースできる。S1103、S1106、S1105段階において、デコーダは、正規マージフラグが0の場合に、サブブロックマージフラグ、多重仮定フラグ及び/又はトライアングルマージフラグのうち少なくとも一つがパースできる。図11で、merge_subblock_flagは、サブブロックマージモードが適用されるか否かを示すサブブロックマージフラグを表し、mh_intra_flagは、多重仮定予測モードが適用されるか否かを示す多重仮定予測フラグを表し、merge_triangle_flagは、トライアングルマージモードが適用されるか否かを示すトライアングルマージフラグを表す。
図11を参照すると、デコーダは、現在ブロックがあらかじめ定義された特定ブロックサイズ条件を満たす場合、MMVDフラグがパースできる。また、一実施例において、トライアングルマージフラグは、(!regular_merge_flag&&!MMVD_flag&&!merge_subbock_flag&&!mh_intra_flag)と定義されてよい。すなわち、正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、多重仮定予測フラグがいずれも0であるとき、トライアングルマージフラグは1であり、正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、mh_intra_flagのいずれか一つでも1であるとき、トライアングルマージフラグは0であってよい。
図12は、本発明の一実施例に係るマージデータシンタックスを示す図である。図12は、先に図10で説明したシンタックス要素が用いられるシンタックス構造を例示する。図12を参照すると、本発明の一実施例において、デコーダは、まず、正規マージフラグをパースし、パースされた正規マージフラグが1の場合に、マージインデックスがパースできる(S1201)。また、デコーダは、MaxNumMergeCandが1よりも大きい場合、マージインデックスがパースできる。ここで、MaxNumMergeCandは、マージ候補の最大個数を示す変数である。また、デコーダは、正規マージフラグが0の場合に、MMVDフラグ、サブブロックマージフラグ、多重仮定フラグ及び/又はトライアングルマージフラグのうち少なくとも一つがパースできる。一実施例において、トライアングルマージフラグの値は、先に図10及び図11で説明した方法によって決定されてよい。すなわち、トライアングルマージフラグは、他のモードが適用されるか否かを示すフラグ値に基づいて決定されてよい。仮にトライアングルマージフラグが1の場合に、トライアングル予測に関連したシンタックス(又は、シンタックス要素)がパースできる。例えば、デコーダは、トライアングルマージフラグが1の場合に、トライアングルマージインデックス(すなわち、merge_triangle_idx)がパースできる。
図11の実施例のような場合には、正規マージモード(regular merge mode)に必要なマージインデックスは、マージデータシンタックスの後側に存在し、正規マージフラグとマージインデックスとの間に、例えば、MMVDフラグ、サブブロックマージフラグ、多重仮定予測フラグのシグナリングが存在するため、正規マージモードを使用する場合、シグナリングが非効率的であり得る。しかし、図12の実施例では、正規マージフラグが1の場合に、正規マージフラグの直後にマージインデックスをパースすることができるので、正規マージモードと関係ない他のシグナリングをパースする必要がなく、よって、圧縮効率が向上し得る。
また、本発明の一実施例によれば、種々の予測モードが用いられる場合、予測モードの適用条件に基づき、特定予測モードがパーシングされるか否かが決定されてよい。次の表2を参照して説明する。
[表2]
If( A1 && A2 && A3 )
mode_A_flag
If( mode_A_flag) {
// mode A related syntax elements
} else {
if( B1 && B2 && B3 )
mode_B_flag
if( mode_B_flag ) {
// mode B related syntax elements
} else {
// mode C related syntax elements
}
}
表2を参照すると、予測モードとして、Mode A、Mode B、Mode Cが存在する場合を仮定する。また、Mode A、Mode B、Mode Cのいずれか一つの予測モードだけが予測に用いられる場合を仮定する。また、Mode Aを使用するための条件が定義されてよく、Mode Aを使用するための条件はA1、A2、A3でよいと仮定する。本実施例において、A1、A2、A3の全てを満たす場合、エンコーダ/デコーダは、Mode Aが適用できる。また、Mode Bを使用するための条件はB1、B2、B3でよいと仮定する。本実施例において、B1、B2、B3の全てを満たすとき、エンコーダ/デコーダは、Mode Bが適用できる。また、Mode Cを使用するための条件はC1、C2、C3でよく、C1、C2、C3の全てを満たすとき、エンコーダ/デコーダは、Mode Cが適用できる。任意の予測モードX(Mode X)を使用するか否かを示すシグナリング(又は、シンタックス要素)は、mode_X_flagであってよい。
表2を参照すると、デコーダは、mode A、mode B、mode Cの順に現在ブロックに適用される予測モードを決定するために関連シンタックスをパースすることができる。又は、エンコーダは、表2に示すように、mode_A_flag、mode_B_flag、mode_C_flagの順にシグナルすることができる。仮に、デコーダは、Mode Aを使用するための条件を満たす場合、mode_A_flagがパースできる。仮に、mode_A_flagが1の場合に、デコーダは、mode Aに関連したシンタックスをパースし、残りのモードに関連したフラグ及び関連シンタックスをパースしなくてもよい。仮に、mode_A_flagが0の場合に、mode B又はmode Cを使用する可能性があり得る。したがって、デコーダは、mode Bを使用するための条件を満たす場合、mode_B_flagがパースできる。仮に、mode_B_flagが1の場合に、デコーダは、mode Bに関連したシンタックスをパースし、残りのmode(すなわち、mode C)に関連したmode_X_flag及び関連シンタックスをパースしなくてもよい。仮に、mode_B_flagが0の場合に、デコーダは、mode Cを使用すると判断できる。すなわち、mode Cに該当しないmode_X_flagがいずれも0である場合、デコーダは、mode Cを使用すると決定できる。そして、デコーダは、mode Cに関連したシンタックスをパースすることができる。
また、本発明の一実施例によれば、種々の予測モードが用いられる場合、予測モードの適用条件に基づいて、特定予測モードがパーシングされるか否かが決定されてよい。次の表3を参照して説明する。
[表3]
If( (A1 && A2 && A3) && !((!B1 || !B2 || !B3) && (!C1 || !C2 || !C3)) )
mode_A_flag
If( mode_A_flag) {
// mode A related syntax elements
} else {
if( B1 && B2 && B3 )
mode_B_flag
if( mode_B_flag ) {
// mode B related syntax elements
} else {
// mode C related syntax elements
}
}
表3を参照すると、前述した表2と同様に、予測モードとして、Mode A、Mode B、Mode Cが定義されてよく、予測モードを使用するか否かを示すシンタックス要素(すなわち、mode_X_flag)及び/又は関連予測モード情報を示すシンタックス要素が定義されてよい。また、任意のモードXを使用するための条件であるX1、X2、X3などが定義されてよい。前述した表2と同様に、mode A、mode B、mode Cの順に適用されるか否かが決定され、適用される場合、当該予測モードに関連したシンタックス要素をパースすることができる。
このとき、本発明の一実施例によれば、特定予測モードよりも後順位で決定される予測モードのいずれも使用できない場合、エンコーダ/デコーダは、前記特定予測モードを使用すると決定できる。この場合、デコーダは、前記特定予測モードが適用されるか否かを示すフラグ(すなわち、前記特定予測モードがモードXである場合のmode_X_flag)をパースしなくてもよい。一実施例において、予測モードが使用できないことは、先に言及した予測モードを使用するための条件を満たすか否かに基づいて決定されてよい。例えば、相対的に後順位で使用の有無が決定されるmode B、mode Cのいずれも使用できない場合に、デコーダは、mode_A_flagをパースしなくてよく、mode Aを使用すると判断(又は、決定、推論)できる。
上述した表2及び表3では、Mode A、mode B、mode Cの3個の予測モードが適用される場合を仮定して説明するが、本発明はこのような予測モードの個数に制限されるものではなく、その他より多くの予測モードが存在する場合にも提案の方法を用いてモードを決定することができる。例えば、mode A、mode B、mode C、mode Dが利用可能であると仮定するとき、mode B、mode C、mode Dのいずれも利用できない場合、デコーダは別のシグナリング(又は、パーシング)無しでmode Aを使用すると判断できる。また、mode Aを使用しないと判断した後、mode C、mode Dのいずれも使用できない場合に、デコーダは、mode Bを使用すると判断できる。
表3を参照すると、任意の予測モードX(すなわち、mode X)を使用できない条件は、X1、X2、X3のいずれか一つでも満たせない場合であってよい。すなわち、!X1||!X2||!X3の場合に、mode Xが使用することが可能でなくてもよい。したがって、mode B及びmode Cのいずれをも使用できない場合は、((!B1||!B2||!B3)&&(!C1||!C2||!C3))条件を満たす場合を表す。このような条件を満たす場合、デコーダは、mode_A_flagをパースしなくてもよく、その値を1と推論できる。すなわち、デコーダは、mode Aを使用すると判断できる。((!B1||!B2||!B3)&&(!C1||!C2||!C3))条件を満たさない場合、デコーダは、mode_A_flagがパースできる。このとき、デコーダは、mode Aを使用するための条件を共に考慮することができる。すなわち、デコーダは、!((!B1||!B2||!B3)&&(!C1||!C2||!C3))を満たし、(A1&& A2&& A3)である場合に、mode_A_flagがパースできる。言い換えると、mode Bを使用するための条件とmode Cを使用するための条件のうち少なくとも一つを満たす場合、デコーダは、mode_A_flagがパースできる。(B1&&B2&&B3)又は(C1&&C2&&C3)である場合に、デコーダはmode_A_flagがパースできる。
また、デコーダは、mode_A_flagが存在しない場合、(B1&&B2&&B3)又は(C1&&C2&&C3)のとき、mode_A_flag値を0と推論し、そうでない場合、1と推論できる。すなわち、mode B及びmode Cのいずれをも使用できない場合、mode_A_flagが存在しないとき、デコーダはその値を1(すなわち、mode Aを適用する)と推論できる。
上述した表2及び表3では、mode A、mode B、mode Cの予測モードが選択的に適用される場合を仮定して説明し、前記mode A、mode B、mode Cは、本発明で提案する種々の予測モードのうちの特定予測モードと定義されてよい。例えば、mode A、mode B、mode Cはそれぞれ、正規マージモード、CIIPモード、トライアングルマージモードのいずれか一つと定義されてよい。又は、前述したように、上述した表2及び表3は、mode A、mode B、mode C、mode Dが定義される場合にも適用されてよく、例えば、mode A、mode B、mode C、mode Dはそれぞれ、正規マージモード、MMVDモード、CIIPモード、トライアングルマージモードのいずれか一つと定義されてよい。
図13は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。本発明の実施例によれば、先に表2及び/又は表3で説明した方法が図13に適用されてよく、関連する重複説明は省略する。また、図13は、図10及び図11に説明したような正規マージフラグに関連する実施例であってよい。
前述したように、本発明の一実施例によれば、デコーディングプロセスの順序上、特定モードに比べて相対的に使用の有無が遅く決定されるモードの全てを使用できない場合、デコーダは、前記特定モードを使用するか否かを示すシグナリングをパースせずに、前記特定モードを使用すると判断(又は、決定、推論)できる。例えば、サブブロックマージモードの使用有無に対する決定よりも相対的に後順位で使用の有無に対する決定が行われるモードのいずれをも使用できない場合、サブブロックマージモードを使用するか否かを示すシグナリング(又は、シンタックス要素)はパースされなくてもよい。この場合、デコーダは、シンタックスパーシング無しでサブブロックマージモードを使用すると判断できる。例えば、前記相対的に後順位で使用の有無に対する決定が行われるモードは、多重仮定予測、トライアングル予測を含むことができる。
一実施例において、S1301段階において、MMVDの使用の有無が決定されるものよりも使用の有無が遅く決定されるモードのいずれをも使用できない場合、デコーダは、MMVDを使用するか否かを示すシグナリングをパースせずに、MMVDを使用すると判断できる。例えば、前記使用の有無が遅く決定されるモードは、サブブロックマージモード、多重仮定予測、トライアングル予測を含むことができる。
また、上述した実施例において、多重仮定予測を使用できる条件(すなわち、図13でmh_intra_conditions)は、1)sps_mh_intra_enabled_flag、2)cu_skip_flag[x0][y0]==0、3)ブロックサイズ条件のうち少なくとも一つを含むことができる。一例として、ブロックサイズ条件は、((cbWidth*cbHeight)>=64&&cbWidth<128&&cbHeight<128)と定義されてよい。ここで、前記sps_mh_intra_enabled_flagは、現在シーケンスにおいて多重仮定予測を使用できるか否かを示すシンタックス要素を表し、例えば、前記シンタックス要素は、シーケンスパラメータセット(SPS,sequence parameter set)でシグナルされてよい。そして、cbWidth及びcbHeightはそれぞれ、現在ブロック(現在コーディングブロック)の幅及び高さを示す変数である。
また、上述した実施例において、トライアングル予測を使用できる条件(図13で、merge_triangle_conditions)は、1)sps_triangle_enabled_flag、2)tile_group_type(又は、slice_type)==B、3)ブロックサイズ条件のうち少なくとも一つを含むことができる。一例として、ブロックサイズ条件は(cbWidth*cbHeight>=64)と定義されてよい。ここで、前記sps_triangle_enabled_flagは、現在シーケンスにおいてトライアングル予測を使用できるか否かを示すシンタックス要素を表し、例えば、前記シンタックス要素はSPSでシグナルされてよい。
また、上述した実施例において、サブブロックマージを使用できる条件(図13で、merge_subblock_conditions)は、1)MaxNumSubblockMergeCand>0、2)ブロックサイズ条件のうち少なくとも一つを含むことができる。一例として、ブロックサイズ条件は、(cbWidth>=8&&cbHeight>=8)と定義されてよい。ここで、MaxNumSubblockMergeCandは、サブブロックマージ候補の最大個数を示す変数である。
したがって、一実施例において、デコーダは、(!mh_intra_conditions&&!merge_triangle_conditions)である場合、サブブロックマージフラグをパースしなくてもよい。また、デコーダは、サブブロックマージフラグが存在しない場合、(!mh_intra_conditions&&!merge_triangle_conditions)であれば、サブブロックマージフラグを1と推論し、そうでなければ、0と推論できる。
また、一実施例において、デコーダは、(!merge_subblock_conditions&&!mh_intra_conditions&&!merge_triangle_conditions)である場合、MMVDフラグをパースしなくてもよい。また、MMVDフラグが存在しない場合、(!merge_subblock_conditions&&!mh_intra_conditions&&!merge_triangle_conditions)であれば、MMVDフラグを1と推論し、そうでなければ、0と推論できる。
また、一実施例において、デコーダは、(!sps_mh_intra_enabled_flag&&!sps_triangle_enabled_flag)である場合、サブブロックマージフラグをパースしなくてもよく、その値を1と推論できる。又は、cu_skip_flagが1であり、tile_group_type(slice_type)がBでない場合、デコーダは、サブブロックマージフラグをパースしなくてもよく、その値を1と推論できる。又は、幅及び高さがそれぞれ128、128であり、tile_group_typeがBでない場合、デコーダは、サブブロックマージフラグをパースしなくてもよく、その値を1と推論できる。
図14は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図14で説明する実施例は、先に図10乃至13で説明した内容が適用されてよく、説明の便宜のために重複する説明は省略する。本発明の一実施例によれば、マージモードは正規マージモード、MMVD、サブブロックマージモード、CIIPモード、トライアングルマージモード(又は、トライアングル分割モード(TPM,triangle partitioning mode))などを含むことができる。また、それぞれ、モードが使用(又は、適用)されるか否かを示すシグナリング(又は、シンタックス要素)である正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、CIIPフラグ、トライアングルマージフラグが存在してよい。前述したように、予測モードは、MODE_INTRA、MODE_IBC、MODE_INTERを含むことができる。MODE_INTRA及びMODE_IBCは、現在ブロックを含む現在ピクチャを用いた予測モードであってよい。また、MODE_INTRAは、前述したイントラ予測であってよい。MODE_IBCは、モーションベクトル又はブロックベクトルを用いた予測方法であってよい。MODE_INTERは、他のピクチャを用いた予測方法であってよく、前述したインター予測であってよい。
現在予測モードがMODE_IBCであり、マージフラグが1である場合、デコーダは、正規マージモードだけを使用することができる(S1401)。また、このような場合、正規マージフラグをパースしなくてもよい。デコーダは、正規マージフラグを1と推論できる。
また、本発明の一実施例によれば、ブロックサイズ(block size)に基づき、シンタックス要素をパースするか否かが決定されてよい。例えば、ブロックサイズに基づき、シンタックス要素をパースするか否かが決定されてよい。例えば、第1モード、第2モード、第3モード、第4モード、第5モードの順にシンタックス要素がシグナルされる場合、第3モード、第4モード、第5モードを使用できるブロックサイズ条件である第3条件、第4条件、第5条件がそれぞれ存在してよい。仮に第3条件、第4条件、第5条件のいずれをも満たさない条件である条件Aを満たすときは、デコーダは、第3モード、第4モード、第5モードに関するシンタックス要素をパースせず、使用しないと推論できる。また、前記条件Aを満たすときは、デコーダは、第2モードに関連したシンタックス要素をパースせず、第1モードシンタックス要素に基づいて決定することができる。この場合、仮に第1モードを使用しないと決定、推論されると、デコーダは、第2モードを使用すると決定、推論できる。そして、これに基づき、第2モードを使用するために必要なシンタックス要素をパースすることができる。
本発明の一実施例によれば、サブブロックマージモード、CIIP、トライアングルマージモードを使用できるブロックサイズ条件が存在してよい。例えば、図13の実施例で説明した通りであり得る。したがって、4×4、8×4、4×8サイズのブロックは、サブブロックマージモード、CIIP、トライアングルマージモードを使用することが可能でなくてもよい。したがって、4×4、8×4、4×8サイズのブロックは、マージフラグが1の場合に、使用可能なモードが正規マージモードとMMVDだけであってよい。したがって、この場合、デコーダはMMVDフラグをパースしなくてもよい。また、デコーダは、この場合、正規マージフラグに基づいてMMVDフラグ値を決定又は推論することができる。
一実施例において、デコーダは、4×4ブロックに対してインター予測を行わなくてもよい。したがって、以下の実施例では、4×4ブロックに関連した条件に含めずに説明できるが、4×4インター予測が可能な場合にも本発明の実施例の適用が可能である。
図14を参照すると、cbWidth及びcbHeightがそれぞれ8、4である場合又は4、8である場合に、デコーダは、MMVDフラグ、サブブロックマージフラグ、多重仮定予測フラグをパースしなくてもよい(S1402、S1403、S1404)。また、図14に示してはいないが、cbWidth、cbHeightが4、4である場合にもMMVDフラグ、サブブロックマージフラグ、多重仮定予測フラグをパースしなくてよい。また、この場合、その他のMMVD、サブブロックマージモード、CIIP、トライアングル関連シンタックス要素もパースしなくてよい。
また、本発明において、cbWidth、cbHeightがそれぞれ4、8であるか或いは8、4であることを、cbWidth+cbHeightが12であるとして示すことができる。すなわち、cbWidth+cbHeightが12であるか或いは12以下である場合、MMVDフラグ、サブブロックマージフラグ、mh_intra_flagをパースしなくてもよい。また、本発明は、予測モードがMODE_INTERである場合に適用可能である。
本発明の一実施例によれば、MMVDの使用の可否を示す上位レベルシグナリングが存在してよい。上位レベルシグナリングは、現在ブロックを含む単位におけるシグナリングであってよい。例えば、現在ブロックの上位レベルは、CTU、シーケンス、ピクチャ、スライス、タイル、タイルグループなどであってよい。例えば、MMVDの使用の可否を示す上位レベルシグナリング(又は、シンタックス要素)は、SPSレベルのシグナリングであってよい。例えば、MMVDの使用の可否を示す上位レベルシグナリングは、sps_mmvd_enabled_flagであってよい。前記MMVDの使用の可否を示す上位レベルシグナリングは、MMVDを使用できるか否かを示すことができる。仮に、前記MMVDの使用の可否を示す上位レベルシグナリングが0の場合に、デコーダは、MMVD関連シンタックス要素をパースしなくてもよい。また、前記MMVDの使用の可否を示す上位レベルシグナリングが0の場合に、デコーダは、MMVDフラグを0と推論できる。前記MMVDの使用の可否を示す上位レベルシグナリングが1の場合に、MMVDフラグは、ブロックによって1であっても0であってもよい。
また、一実施例において、サブブロックマージモード関連シンタックス要素は、サブブロックマージフラグ、サブブロックマージインデックスを含むことができる。サブブロックマージモードは、SbTMVP(サブブロックベースの時間モーションベクトル)、アフィンモーション補償(affine motion compensation)モードを含むことができる。また、CIIP関連シンタックス要素は、mh_intra_flag(CIIPフラグ)、CIIPのインター予測部分の候補を示すインデックスを含むことができる。CIIPのインター予測部分の候補を示すインデックスは、マージインデックスであってよい。前述したように、CIIPは、現在ピクチャから生成した予測信号と他の参照ピクチャから生成した予測信号に基づいて予測を行う方法であってよく、多重仮定予測と呼ぶことができる。
また、一実施例において、トライアングルマージモード(triangle merge mode)関連シンタックス要素は、merge_triangle_split_dir、merge_triangle_idx0、merge_triangle_idx1を含むことができる。トライアングルマージモードは、現在ブロックを2部分に分け、2部分がそれぞれ異なるモーション情報を使用する予測方法(又は、予測モード)であってよい。また、前記2部分はそれぞれ、長方形以外の任意の多角形の形態を有することができる。本発明は、このような名称に制限されず、前記トライアングルマージモードは他の様々な名称を有することができる。また、merge_triangle_split_dirは、前記2部分がどのように分けられるかを示すシンタックス要素であってよい。また、merge_triangle_idx0及びmerge_triangle_idx1は、前記2部分がそれぞれいかなるモーション情報を使用するかを示すシンタックス要素であってよい。
本発明の一実施例によれば、MMVDフラグが存在しなくてもよい。例えば、図14で説明したように、MMVDの使用の可否を示す上位レベルシグナリング、ブロックサイズ条件などによってMMVDフラグが存在しなくてもよい。下記の実施例では、MMVDフラグが存在しない場合に推論する方法を示すことができる。本発明の一実施例によれば、特定条件を満たす場合、デコーダは、MMVDフラグを1と推論できる。そして、前記特定条件のうち少なくとも一つを満たさない場合、デコーダは、MMVDフラグを0と推論できる。
一実施例において、前記特定条件は、MMVDの使用の可否を示す上位レベルシグナリング(又は、シンタックス要素)が1である場合を含むことができる。前述したように、前記上位レベルシグナリングは、SPS、PPS、スライスヘッダー、タイルグループヘッダー、CTUのいずれか一つに含まれてよい。また、前記特定条件は、ブロックサイズ条件を含むことができる。例えば、ブロックサイズが4×8又は8×4又は4×4である場合を含むことができる。すなわち、cbWidth+cbHeightが12であるか或いは12以下である場合を含むことができる。仮に4×4インター予測が許容されない場合、4×4である場合を除外させることができる。また、前記特定条件は、正規マージフラグが0である場合を含むことができる。また、前記特定条件は、マージフラグが1である場合を含むことができる。
また、一実施例において、エンコーダ/デコーダは、MMVDフラグが存在しない場合、1)sps_mmvd_enabled_flagが1であり、2)cbWidth+cbHeightが12であり、3)正規マージフラグが0であれば、MMVDフラグを1と推論できる。また、1)、2)、3)のうち少なくとも一つを満たさない場合、エンコーダ/デコーダは、MMVDフラグを0と推論できる。
また、本発明の一実施例によれば、デコーダは、正規マージフラグが存在しない場合、あらかじめ定義された条件によってその値を推論することができる。一実施例において、デコーダは、現在ブロックの予測モードに基づいて正規マージフラグが推論できる。例えば、デコーダは、CuPredMode値に基づいて正規マージフラグが推論できる。例えば、デコーダは、CuPredMode値がMODE_IBCである場合、正規マージフラグを1と推論できる。また、デコーダは、CuPredMode値がMODE_INTERである場合、正規マージフラグを0と推論できる。
更なる実施例によれば、デコーダは、マージフラグに基づいて正規マージフラグ値を推論することができる。例えば、マージフラグが1であり、CuPredModeがMODE_IBCである場合、デコーダは、正規マージフラグ値を1と推論できる。また、マージフラグが0の場合に、正規マージフラグ値を0と推論できる。
図15は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図15の実施例は、図10~図13で説明した実施例に関連するさらに他の実施例であってよい。前述したように、本発明の実施例において、マージモードとして複数のモードが定義されてよい。そして、あるモードを使用するかをシグナルする場合に、複数モードに対するシグナリング順序と複数のモードを使用可能な条件に基づき、あるモードの使用の有無、あるモードの使用の有無を示すシグナリングをパースするか否か、又はあるモードの使用の有無を示すシグナリング推論方法などが決定されてよい。
本発明の一実施例によれば、第2モードの使用の可否を示す上位レベルシグナリングに基づき、デコーダは、第1モードの使用の有無を示すシグナリングをパースするか否かを決定できる。また、デコーダは、第2モードの使用の可否を示す上位レベルシグナリングに基づき、第1モードを使用するか否かを示すシグナリング値が推論できる。このとき、第2モードは第1モードよりも使用の有無が遅く決定されるモードであってよい。
より具体的な実施例において、デコーダは、MMVDの使用の可否を示す上位レベルシグナリングに基づき、正規マージフラグをパースできるか否かが決定できる。また、デコーダは、MMVDの使用の可否を示す上位レベルシグナリングに基づき、正規マージフラグ値を推論(又は、決定)できる。図15を参照すると、一例として、デコーダは、sps_mmvd_enabled_flagが1の場合に、正規マージフラグをパースすることができる(S1501)。
また、一実施例において、現在ブロックのサイズに基づき、特定モードの使用の有無を示すシグナリングをパースするか否かが決定できる。また、現在ブロックのサイズに基づき、特定モードを使用するか否かを示すシグナリング値が推論できる。一実施例によれば前記現在ブロックのサイズに基づき、特定モードの使用の有無を示すシグナリングをパースしない場合にも前記特定モードを使用する場合があり得る。すなわち、前記特定モードの使用の有無を示すシグナリング値は1と推論されてよい。
より具体的な実施例において、デコーダは、現在ブロックのサイズに基づき、正規マージフラグをパースするか否かが決定できる。例えば、現在ブロックのサイズが4×8、8×4よりも大きいか否かに基づき、正規マージフラグをパースするか否かが決定できる。ブロックサイズが4×8、8×4よりも大きいものは、幅と高さの和が12よりも大きいものであってよい。図15を参照すると、cbWidth、cbHeightの和が12よりも大きい場合、正規マージフラグをパースすることができる(S1501)。また、4×8と8×4以下のブロックサイズでは使用が制限されるモードがあってよい。
本発明の一実施例によれば、複数の条件を全て満たす場合、特定モードの使用の有無を示すシグナリングをパースしなくてもよい。また、このとき、特定のあるモードを使用するか否かを示すシグナリングを1と推論できる。特定モードの使用の有無を示すシグナリングが1であるものは、使用することを示すものであってよい。実施例として、複数の条件は、第1モードと異なる第2モードの使用の可否を示す上位レベルシグナリングに関連した条件を含むことができる。例えば、複数の条件は、前記第1モードと異なる第2モードを使用できるか否かを示す上位レベルシグナリングが0である条件を含むことができる。このとき、前記第2モードは、前記第1モードよりも使用の可否が遅く決定されたり、或いは関連シンタックス要素が後に存在するモードであってよい。
より具体的な実施例において、デコーダは、特定モードの使用の有無を示すシグナリングは、正規マージフラグであってよい。また、前記複数の条件は、MMVDの使用の可否を示す上位レベルシグナリング値が0である場合であってよい。また、前記複数の条件は、ブロックサイズに関連した条件を含むことができる。例えば、前記複数の条件は、ブロックサイズが臨界値以下である条件を含むことができる。ブロックサイズが臨界値以下である条件において前記特定モードよりも使用の有無が遅く決定されたり或いは関連シンタックス要素が後に存在する一つ以上の他のモードが使用不可であってよい。
より具体的に、あるモードを使用するか否かを示すシグナリングは、正規マージフラグであってよい。また、前記複数の条件は、現在ブロックの幅と高さの和が12である場合を含むことができる。又は、前記複数の条件は、現在ブロックのサイズが4×8又は8×4である場合を含むことができる。また、4×4インター予測が可能な場合、前記複数の条件は、現在ブロックサイズが4×8又は8×4又は4×4である場合を含むことができる。
したがって、一実施例によれば、MMVDの使用の可否を示す上位レベルシグナリング値が0であり、現在ブロックサイズが4×8又は8×4である場合、正規マージフラグをパースしなくてもよい。また、この場合、正規マージフラグ値を1と推論できる。また、MMVDの使用の可否を示す上位レベルシグナリング値が1であるか或いは現在ブロックサイズが4×8又は8×4よりも大きい場合、正規マージフラグをパースすることができる。
S1501段階において、sps_mmvd_enabled_flagが1であるか、或いはcbWidth+cbHeight>12である場合、デコーダは、正規マージフラグがパースできる。また、そうでない場合、すなわち、sps_mmvd_enalbed_flagが0であり、cbWidth+cbHeight<=12である場合、正規マージフラグをパースしなくてもよい。
上述した実施例では、先に図10~図13で説明した通り、正規マージフラグ以後に存在するシンタックス要素に関連したモードの使用可能条件と関連していてよい。例えば、正規マージモード、MMVD、サブブロックマージモード、CIIP、トライアングルマージモードの順にシグナルされたり或いはモードを決定するとき、前記説明した実施例においてMMVDの使用の可否を示す上位レベルシグナリングが0の場合に、デコーダは、MMVDを使用しなくてもよい。また、デコーダは、ブロックサイズが臨界値以下である場合、サブブロックマージモード、CIIP、トライアングルマージモードを使用しなくてもよい。したがって、このような条件を全て満たす場合、デコーダは、更なるシグナリング無しで正規マージモードを使用すると判断できる。さらに、本実施例は、MODE_INTERである場合に適用可能である。
本発明の一実施例において、図15のようにあらかじめ定義された特定条件を満たす場合、正規マージフラグをパースしなくてよく、この場合、デコーダはその値を1と推論できる。例えば、MMVDの使用の可否を示す上位レベルシグナリング値が0であり、ブロックサイズが4×8又は8×4である場合、デコーダは、正規マージフラグ値を1と推論できる。また、これは、マージフラグが1の場合に行われてよい。また、これは、CuPredModeがMODE_INTERである場合に行われてよい。仮に、使用できるか否かを示す上位レベルシグナリング値が1であるか、或いはブロックサイズが4×8又は8×4よりも大きい場合、デコーダは、正規マージフラグ値を0と推論できる。
一例として、正規マージフラグが存在しない場合、デコーダは、次のような条件によって正規マージフラグが推論できる。具体的に、sps_mmvd_enabled_flagが0であり、cbWidth+cbHeight==12である場合、デコーダは、正規マージフラグを1と推論できる。このとき、仮に4×4インター予測が許容される場合、cbWidth+cbHeight==12条件は、cbWidth+cbHeight<=12に変わってよい。そうでない場合、デコーダは、正規マージフラグを0と推論できる。
本発明の一実施例において、トライアングルマージフラグ、アフィンインターフラグ、サブブロックマージフラグがいずれも0である場合、現在ブロック全体に対して同一モーション情報を使用することができる。このような場合のために次のようなモーション情報誘導過程が行われてよい。また、このとき、一つ以上が条件を満たす場合、デコーダは、dmvrFlagを1に設定できる。
- sps_dmvr_enabled_flagが1の場合、
- merge_flag[xCb][yCb]が1の場合、
- predFlagL0[0][0]及びpredFlagL1[0][0]が1の場合、
- mmvd_flag[xCb][yCb]が1の場合、
- DiffPicOrderCnt(currPic,RefPicList[0][refIdxL0])とDiffPicOrderCnt(RefPicList[1][refIdxL1],currPic)が同じ場合
- cbHeightが8より大きいか等しい場合
- cbHeight*cbWidthが64より大きいか等しい場合
また、前記モーション情報誘導過程は、4×8又は8×4サイズのブロックに対しても行われてよい。仮に、4×8又は8×4サイズのブロックに対して両方向予測(bi-prediction)である場合、デコーダは、単方向予測(uni-prediction)に切り替えてよい。
また、本発明の実施例において、マージフラグが1であり、正規マージフラグが1である場合に、現在ブロック全体に対して同一のモーション情報を使用することができる。又は、マージフラグが1であり、MMVDフラグが1である場合に、現在ブロック全体に対して同一のモーション情報を使用することができる。又は、マージフラグが1であり、CIIPフラグが1である場合に、現在ブロック全体に対して同一のモーション情報を使用することができる。又は、マージフラグが0であり、inter_affine_flagが0である場合に、現在ブロック全体に対して同一のモーション情報を使用することができる。このとき、このような場合のためのモーション情報誘導過程が行われてよい。また、このとき、あらかじめ定義された条件のいずれか一つ以上の条件を満たすと、デコーダは、dmvrFlagを1に設定できる。このとき、前述した実施例の条件が適用されてよい。また、前記モーション情報誘導過程は、4×8又は8×4サイズのブロックに対しても行われてよい。仮に4×8又は8×4サイズのブロックに対して両方向予測(bi-prediction)である場合、デコーダは、単方向予測(uni-prediction)に切り替えてよい。
本発明の一実施例によれば、マージモードのうちCIIPが最後に決定されたり或いはシグナルされるモードであってよい。例えば、正規マージモード、MMVD、サブブロックマージモード、トライアングルマージモード、CIIPの順に決定されてよい。このような場合、CIIPを使用できる条件を満たさない場合、デコーダは、デコーディング順序(又は、シンタックスパーシング順序)において先に決定されるモードの使用の可否を示すシグナリングをパースすることなく当該モードを決定することができる。例えば、デコーダは、この場合、CIIP直前のモードの使用の可否を示すシグナリングをパースしなくてもよい。また、このとき、前記直前のモードを使用すると判断できる。例えば、このような場合は、cu_skip_flagが1である場合を含むことができる。又は、このような場合は、cbWidthが128以上である場合又はcbHeightが128以上である場合であってよい。又は、このような場合は、CIIPの使用の可否を示す上位レベルシグナリング、例えば、sps_ciip_enabled_flagが0である場合を含むことができる。
図16は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図16~図19の実施例は、先に図10~図13で説明した実施例が適用されてよく、関連する重複説明は省略する。前述したように、マージモードのうちCIIPが最後に決定されたり或いはシグナルされるモードであってよい。したがって、デコーダは、CIIPフラグをパースせずにCIIP使用の可否を決定することができる。例えば、CIIPよりも先にシグナルされるモードを使用しない場合、CIIPを使用すると判断できる。また、CIIPフラグは、他のシグナリング(又は、シンタックス要素)から誘導する値であってよい。
本発明の一実施例によれば、モードを使用するか否かを示すシグナリングが複数存在してよい。図53を参照すると、モードの使用の有無を示すシグナリングして正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、トライアングルマージフラグが存在してよい。また、正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、トライアングルマージフラグは、パースする場合が存在してよい。例えば、マージフラグ値が1である場合に、前記モードの使用の有無を示すシグナリングがパースできる。又は、CuPredModeがMODE_INTERである場合、前記モードの使用の有無を示すシグナリングがパースできる。また、マージフラグ値が1である場合に、デコーダは正規マージフラグをパースすることができる。
また、正規マージフラグ値が0である場合に、デコーダは、MMVDフラグがパースできる。また、デコーダは、sps_mmvd_enabled_flag値が1である場合に、MMVDフラグがパースできる。また、デコーダは、ブロックサイズ条件を満たす場合、MMVDフラグがパースできる。例えば、ブロックサイズが4×8でなく、8×4でなく、4×4でない場合、MMVDフラグがパースできる。
また、正規マージフラグ値が0である場合に、サブブロックマージフラグがパースできる。また、MMVDフラグ値が0である場合に、サブブロックマージフラグがパースできる。また、ブロックサイズ条件を満たすとき、サブブロックマージフラグがパースできる。例えば、ブロックサイズが8×8以上である場合、サブブロックマージフラグがパースできる。また、最大サブブロックマージ候補個数が0よりも大きい場合、サブブロックマージフラグがパースできる。例えば、最大サブブロックマージ候補個数が0よりも大きい場合は、サブブロックマージ候補リストに含まれ得る候補の使用の可否に対する上位レベルシグナリングのうち少なくとも一つが使用できる旨を示すことができる。例えば、sps_affine_enabled_flag又はsps_sbtmvp_enabled_flagが1である場合に、最大サブブロックマージ候補個数は0よりも大きくてよい。
また、正規マージフラグ値が0である場合に、トライアングルマージフラグがパースできる。また、MMVDフラグ値が0である場合に、トライアングルマージフラグがパースできる。また、サブブロックマージフラグ値が0である場合に、トライアングルマージフラグがパースできる。また、ブロックサイズ条件を満たすとき、トライアングルマージフラグがパースできる。例えば、ブロックサイズが(幅*高く>=64)条件を満たすとき、トライアングルマージフラグがパースできる。また、スライスタイプがBである場合、トライアングルマージフラグがパースできる。例えば、スライスタイプがBであることは、一つのサンプルを予測する時に2つ以上のモーション情報が使用できることを意味できる。また、sps_triangle_enabled_flag値が1である場合に、デコーダは、トライアングルマージフラグがパースできる。また、最大トライアングルマージ候補個数(MaxNumTriangleMergeCand)値に基づく条件を満たす場合、トライアングルマージフラグがパースできる。例えば、最大トライアングルマージ候補個数が2以上である場合、デコーダは、トライアングルマージフラグがパースできる。最大トライアングルマージ候補個数は、トライアングルマージモードで使用できる候補リストの最大個数(又は、長さ)であってよい。
上述したパーシング条件を満たす場合、デコーダは、シグナリングがパースできる。すなわち、言及したパースできる条件のいずれかを満たさないと、シグナリングをパースしなくてもよい。また、シグナリングをパースしない場合に推論できる。例えば、言及したパースできる条件のいずれかを満たさないと、シグナリング値を0と推論できる。さらに他の例として、言及したパースできる条件のいずれかを満たさないと、第1モードの使用の有無を示すシグナリングが0の場合に、第2モードの使用の有無を示すシグナリング値を1と推論できる。さらに他の例として、言及したパースできる条件のいずれかを満たさないと、第1モードの使用の有無を示すシグナリングが1である場合に、第2モードの使用の有無を示すシグナリング値を0と推論できる。
また、本発明の一実施例によれば、CIIPフラグが存在しない場合、デコーダは、その値が推論できる。例えば、一つ以上のモードの使用の有無を示すシグナリング値に基づいて推論する値が決定されてよい。前記モードの使用の有無を示すシグナリングは、CIIPの使用の有無よりも先に決定されるモードを使用するか否かを示すシグナリングを含むことができる。例えば、前記モードの使用の有無を示すシグナリングは、正規マージモードの使用の有無を示すシグナリング、MMVDの使用の有無を示すシグナリング、サブブロックマージモードの使用の有無を示すシグナリング、トライアングルマージモードの使用の有無を示すシグナリングを含むことができる。また、前記モードの使用の有無を示すシグナリングは、マージモードの使用の有無を示すシグナリングを含むことができる。
一実施例によれば、一つ以上のモードの使用の有無を示すシグナリング値がいずれも0である場合、デコーダは、CIIPフラグ値を1と推論できる。前記一つ以上のモードの使用の有無を示すシグナリングは、正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、トライアングルマージフラグを含むことができる。したがって、正規マージフラグ==0&&MMVDフラグ==0&&サブブロックマージフラグ==0&&トライアングルマージフラグ==0の場合、CIIPフラグ値を1と推論できる。また、そうでない場合、CIIPフラグ値を0と推論できる。
一実施例によれば、一つ以上のモードの使用の有無を示すシグナリング値がいずれも0であり、マージフラグが1である場合に、デコーダはCIIPフラグ値を1と推論できる。前記一つ以上のモードの使用の有無を示すシグナリングは、正規マージフラグ、MMVDフラグ、サブブロックマージフラグ、トライアングルマージフラグを含むことができる。したがって、正規マージフラグ==0&&MMVDフラグ==0&&サブブロックマージフラグ==0&&トライアングルマージフラグ==0&&マージフラグ==1の場合、デコーダは、CIIPフラグ値を1と推論できる。また、そうでない場合、デコーダは、CIIPフラグ値を0と推論できる。また、モードの使用の有無を示すシグナリング値が1であることは、前記モードを使用する旨を示し、モードの使用の有無を示すシグナリング値が0であることは、前記モードを使用しない旨を示すことができる。
図17は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図17の実施例は、図16の実施例に基づく効率的なシグナリング方法であり、関連する重複説明は省略する。前述したように、マージモードのうち、CIIPは、最後に決定又はシグナルされるモードであってよい。一実施例によれば、この場合、先に図10~図13で説明したシグナリング方法を用いることができる。図17~図19の実施例は、図10~図13で説明した方法の具体的な実施例であってよい。
本発明の一実施例によれば、モードA、モードB、モードC、モードDの順にモード使用が決定又はシグナルされる場合、モードDを使用できない条件が存在し得る。仮に、モードDを使用できない条件のうち少なくとも一つを満たすと、デコーダは、モードCの使用の有無を示すシグナリングをパースしなくてもよい。また、モードCの使用の有無を示すシグナリングが存在しない場合、デコーダは、その値が推論できる。このとき、推論される値は、モードDを使用できない条件、モードAの使用の有無を示すシグナリング、モードBの使用の有無を示すシグナリングに基づくことができる。また、モードDを使用できない条件のいずれをも満たさないとき、モードCの使用の有無を示すシグナリングをパースすることができる。又は、モードDを使用できない条件の一部のいずれをも満たさない場合、デコーダは、モードCの使用の有無を示すシグナリング(又は、シンタックス要素)がパースできる。モードDを使用できない条件が複数存在するとき、その一部だけを本発明のシグナリング方法に使用できるので、前記条件のうち一部であってよい。例えば、モードCの使用の有無を示すシグナリングをパースするか否かを決定するとき、条件確認を減らすために、一部の条件だけを使用することができる。
一実施例によれば、モードDはCIIPであってよい。また、モードA、モードB、モードCはそれぞれ、MMVD、サブブロックマージモード、トライアングルマージモードであってよく、このとき、別の順序でモードA、モードB、モードCを構成することも可能である。図17~図19は、モードA、モードB、モードCがそれぞれ、MMVD、サブブロックマージモード、トライアングルマージモードである場合を仮定する。一実施例によれば、モードDを使用できない条件は、モードDを使用できるか否かを示す上位レベルシグナリングに基づくことができる。また、モードDを使用できない条件は、ブロックサイズに基づくことができる。また、モードDを使用できない条件は、cu_skip_flagに基づくことができる。また、モードDを使用できない条件は、タイルグループ(又は、スライス)タイプに基づくことができる。また、モードDを使用できない条件は、モードDで使用できる候補の最大個数に基づくことができる。
図17を参照すると、CIIPを使用できない条件は、sps_ciip_enabled_flagが0である場合、cu_skip_flagが1である場合、cbWidthが128以上である場合、cbHeightが128以上である場合を含むことができる。したがって、本発明の実施例によれば、sps_ciip_enabled_flagが0であるか、cu_skip_flagが1であるか、cbWidthが128以上であるか、或いはcbHeightが128以上である場合に、モードCの使用の有無を示すシグナリングをパースしなくてもよい。すなわち、図17の実施例で、sps_ciip_enabled_flagが0であるか、cu_skip_flagが1であるか、cbWidthが128以上であるか、或いはcbHeightが128以上である場合に、トライアングルマージフラグをパースしなくてもよい。また、sps_ciip_enabled_flagが1であり、cu_skip_flagが0であり、cbWidthが128よりも小さく、cbHeightが128よりも小さいとき、モードCの使用の有無を示すシグナリングがパースできる。すなわち、図54の実施例において、sps_ciip_enabled_flagが1であり、cu_skip_flagが0であり、cbWidthが128よりも小さく、cbHeightが128よりも小さいとき、トライアングルマージフラグがパースできる。
また、モードCの使用の有無を示すシグナリングをパースするか否か決定する場合、モードCを使用できる条件をさらに考慮することができる。例えば、モードCを使用できる条件を満たす場合、モードCの使用の有無を示すシグナリング(又は、シンタックス要素)がパースできる。図16を参照すると、トライアングルマージモードを使用できる条件は、sps_triangle_enabled_flag値が1である条件、tile_group_typeがBである条件、cbWidth*cbHeight>=64である条件を含むことができる。
本発明の一実施例において、図17で説明した実施例に関連した推論方法の一例を説明する。本実施例は、図17で説明したモードCの使用の有無を示すシグナリングを推論する方法であってよい。また、モードCの使用の有無を示すシグナリングを推論することは、モードCの使用の有無を示すシグナリングが存在しない場合に行うことができる。
図17の実施例では、モードDを使用できない条件のうち少なくとも一つを満たさないとき、モードCの使用の有無を示すシグナリングをパースしなくて済んだ。本発明の一実施例によれば、複数の条件を満たすとき、モードCの使用の有無を示すシグナリング値を1と推論できる。例えば、1の値は、使用する旨を示し、0の値は、使用しない旨を示すことができる。また、前記複数の条件は、モードDを使用できない条件のうち少なくとも一つを満たす条件を含むことができる。また、前記複数の条件は、モードCを使用できる条件を含むことができる。また、前記複数の条件は、モードA及びモードBの使用の有無を示すシグナリングに基づく条件を含むことができる。例えば、前記複数の条件は、モードAとモードBの使用の有無を示すシグナリングのいずれをも使用しない旨を示す場合を含むことができる。また、前記複数の条件のうち少なくとも一つを満たさない場合、デコーダは、モードCの使用の有無を示すシグナリング値を0と推論できる。
本発明の一実施例において、デコーダは、あらかじめ定義された条件に基づいてトライアングルマージフラグ値を推論することができる。一例として、デコーダは、sps_ciip_enabled_flagが0であるか、cu_skip_flagが1であるか、cbWidthが128以上であるか、或いはcbHeightが128以上である場合、トライアングルマージフラグ値を1と推論できる。例えば、sps_ciip_enabled_flagが0であるか、cu_skip_flagが1であるか、cbWidthが128以上であるか、或いはcbHeightが128以上である場合にのみ、デコーダはトライアングルマージフラグ値を1と推論できる。また、トライアングルマージフラグ値を1と推論するために更なる条件を満たさなければならない条件があってよい。例えば、前記更なる条件は、正規マージフラグが0である条件、MMVDフラグが0である条件、サブブロックマージフラグが0である条件を含むことができる。また、前記更なる条件は、マージフラグが1である条件を含むことができる。また、前記更なる条件は、sps_triangle_enabled_flagが1である条件、tile_group_typeがBである条件、cbWidth*cbHeight>=64である条件を含むことができる。また、更なる条件を全て満たすとき、トライアングルマージフラグ値を1と推論できる。
一実施例において、次の条件を全て満たす場合、トライアングルマージフラグ値は1と推論されてよい。
1)正規マージフラグ==0
2)MMVDフラグ==0
3)サブブロックマージフラグ==0
4)sps_ciip_enabled_flag==0||cu_skip_flag==1||cbWidth>=128||cbHeight>=128
5)sps_triangle_enabled_flag==1&&tile_group_type==B&&cbWidth*cbHeight>=64
又は、他の実施例において、次の条件を全て満たす場合、トライアングルマージフラグ値は1と推論されてよい。
1)正規マージフラグ==0
2)MMVDフラグ==0
3)サブブロックマージフラグ==0
4)sps_ciip_enabled_flag==0||cu_skip_flag==1||cbWidth>=128||cbHeight>=128
5)sps_triangle_enabled_flag==1&&tile_group_type==B&&cbWidth*cbHeight>=64
6)マージフラグ==1
また、一実施例において、上述した条件のいずれか一つを満たさない場合、トライアングルマージフラグ値は、0と推論できる。例えば、sps_ciip_enabled_flagが1であり、cu_skip_flagが0であり、cbWidth<128であり、cbHeight<128である場合、トライアングルマージフラグ値を0と推論できる。又は、正規マージフラグが1である場合に、トライアングルマージフラグ値を0と推論できる。又は、MMVDフラグが1である場合に、トライアングルマージフラグ値を0と推論できる。又は、サブブロックマージフラグが1である場合に、トライアングルマージフラグ値を0と推論できる。又は、sps_triangle_enalbed_flagが0であるか、tile_group_typeがBでないか、或いはcbWidth*cbHeight<64である場合、トライアングルマージフラグ値を0と推論できる。又は、マージフラグが0である場合、トライアングルマージフラグ値を0と推論できる。
図18は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図18の実施例は、図17で説明した方法の具体的な実施例であってよい。図17の説明において、モードCの使用の有無を示すシグナリングをパースするか否かを決定するとき、前述したように、条件確認を減らすために一部の条件だけを使用してよい。例えば、図18の実施例は、図17においてsps_ciip_enabled_flagを確認しない方法であってよい。
例えば、cu_skip_flagが1であるか、cbWidth>=128であるか、或いはcbHeight>=128である場合、デコーダは、トライアングルマージフラグをパースしなくてもよい。また、デコーダは、このとき、トライアングルマージフラグ値を1と推論できる。又は、デコーダは、前記条件を満たすときにのみ、トライアングルマージフラグ値を1と推論できる。また、前述したように、更なる条件を満たすとき、デコーダは1と推論されてよい。また、cu_skip_flagが0であり、cbWidth<128であり、cbHeight<128である場合、デコーダは、トライアングルマージフラグをパースすることができる。また、cu_skip_flagが0であり、cbWidth<128であり、cbHeight<128である場合にトライアングルマージフラグが存在しないと、デコーダはその値を0と推論できる。
本実施例は、前述した図17の実施例に比べて、シンタックス要素パーシング過程において条件確認演算を低減できる利点がある。先に言及したように、モードシグナリング順序が異なるように構成される場合、トライアングルマージフラグの代わりに他のシグナリングに本発明を適用することができる。
図19は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図19の実施例は、図17で説明した方法の具体的な実施例であってよい。図17の説明において、モードCの使用の有無を示すシグナリングをパースするか否かを決定するとき、条件確認を減らすために、一部の条件だけを使用することについて言及したが、これを図19で例示できる。例えば、図19の実施例は、図17においてsps_ciip_enabled_flagを確認しない方法であり、cbWidthが128よりも小さいか否か及びcbHeightが128よりも小さいか否かを確認しない方法であってよい。
例えば、cu_skip_flagが1である場合に、デコーダは、トライアングルマージフラグをパースしなくてもよい。また、デコーダは、このとき、トライアングルマージフラグ値を1と推論できる。又は、デコーダは、この条件を満たすときにのみ、トライアングルマージフラグ値を1と推論できる。また、デコーダは、前述したように更なる条件を満たすとき、1と推論できる。また、cu_skip_flagが0の場合に、トライアングルマージフラグがパースできる。また、cu_skip_flagが0の場合、デコーダは、トライアングルマージフラグが存在しないと、その値を0と推論できる。
本実施例は、前述した図17の実施例に比べて、シンタックス要素パーシング過程で条件確認演算を低減できる利点がある。先に言及したように、モードシグナリング順序が異なるように構成される場合、トライアングルマージフラグの代わりに他のシグナリングに本発明を適用することができる。
図20は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図20の実施例は、図17で説明した方法の具体的な実施例であってよい。図20~図24の実施例は、前述した発明の具体的な実施例であってよい。例えば、図20~図24の実施例は、図10~図13で説明した実施例に関連していてよく、関連する重複説明は省略する。
図20を参照すると、図20以下の発明において、MMVDの使用の有無を示すシグナリングは、mmvd_merge_flagであってよい。すなわち、前述した実施例におけるMMVDフラグは、以下の説明においてmmvd_merge_flagと呼ぶことができる。また、図20以下の発明において、MMVDのベース候補を示すシグナリングは、mmvd_cand_flagであってよい。すなわち、以前にmmvd_merge_flagと言及したものが、図20以下ではmmvd_cand_flagであってよい。また、slice typeに対するものは、タイトルグループタイプ(tile group type)に適用されてもよく、その逆も可能である。また、スライスタイプ(slice type)とタイトルグループタイプ(tile group type)を示す値はそれぞれ、slice_type、tile_group_typeであってよい。また、前述したマージモードの使用の有無を示すシグナリングは、general_merge_flagであってよい。すなわち、先にマージフラグと説明したものは、general_merge_flagに対するものであってよく、general_merge_flagと説明したものをマージフラグに対して適用可能である。
本発明の一実施例によれば、様々なマージモードのうち最後にシグナルされるものは、サブブロックマージモードであってよい。前述したように、前記様々なマージモードは、正規マージモード、MMVD、CIIP、トライアングルマージモード、サブブロックマージモードなどを含むことができる。また、様々なマージモードのうち、サブブロックマージモードの直前にシグナルされるものは、トライアングルマージモードであってよい。
図20を参照すると、エンコーダ/デコーダは、マージデータシンタックスにおいて正規マージモード、MMVD、CIIP、トライアングルマージモード、サブブロックマージモードの順にシグナル/パースすることができる。本発明の一実施例によれば、general_merge_flagに基づき、正規マージフラグをパースするか否かが決定できる。本明細書において、general_merge_flagは、一般マージフラグと呼ぶことができる。本発明の一実施例によれば、general_merge_flagが1である場合、正規マージフラグをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、general_merge_flagが0の場合、正規マージフラグをパースすることが可能でなくてもよい。このとき、general_merge_flagが0の場合に、他の条件に関係なく正規マージフラグをパースすることが可能でなくてもよい。本発明の一実施例によれば、general_merge_flagが1である場合、図20のmerge_data structure部分がパースできる。
本発明の一実施例によれば、デコーダは、general_merge_flagに基づき、mmvd_merge_flagをパースするか否かが決定できる。本発明の一実施例によれば、general_merge_flagが1である場合、mmvd_merge_flagがパースできる。このとき、パースするための更なる条件が必要であり得る。また、general_merge_flagが0の場合に、mmvd_merge_flagをパースすることが可能でなくてもよい。このとき、general_merge_flagが0の場合に、他の条件に関係なくmmvd_merge_flagをパースすることが可能でなくてもよい。
本発明の一実施例によれば、general_merge_flagに基づき、CIIPフラグをパースするか否かが決定できる。本発明の一実施例によれば、general_merge_flagが1の場合に、CIIPフラグをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、general_merge_flagが0の場合に、CIIPフラグをパースすることが可能でなくてもよい。このとき、general_merge_flagが0の場合に、他の条件に関係なくCIIPフラグをパースすることが可能でなくてもよい。
本発明の一実施例によれば、general_merge_flagに基づき、トライアングルマージフラグをパースするか否かが決定できる。本発明の一実施例によれば、general_merge_flagが1の場合に、トライアングルマージフラグをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、general_merge_flagが0の場合に、トライアングルマージフラグをパースすることが可能でなくてもよい。このとき、general_merge_flagが0の場合に、他の条件に関係なくトライアングルマージフラグをパースすることが可能でなくてもよい。
本発明の一実施例によれば、デコーダは、正規マージフラグに基づき、mmvd_merge_flagをパースするか否かが決定できる。本発明の一実施例によれば、正規マージフラグが0の場合に、mmvd_merge_flagをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、正規マージフラグが1の場合に、mmvd_merge_flagをパースすることが可能でなくてもよい。このとき、正規マージフラグが1である場合に、他の条件に関係なくmmvd_merge_flagをパースすることが可能でなくてもよい。
本発明の一実施例によれば、デコーダは、mmvd_merge_flagに基づいてCIIPフラグをパースするか否かが決定できる。本発明の一実施例によれば、mmvd_merge_flagが0の場合に、CIIPフラグをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、mmvd_merge_flagが1の場合に、CIIPフラグをパースすることが可能でなくてもよい。このとき、mmvd_merge_flagが1の場合に、他の条件に関係なくCIIPフラグをパースすることが可能でなくてもよい。
本発明の一実施例によれば、CIIPフラグに基づき、トライアングルマージフラグをパースするか否かが決定できる。本発明の一実施例によれば、CIIPフラグが0の場合に、トライアングルマージフラグをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、CIIPフラグが1の場合に、トライアングルマージフラグをパースすることが可能でなくてもよい。このとき、CIIPフラグが1の場合に、他の条件に関係なくトライアングルマージフラグをパースすることが可能でなくてもよい。
本発明の一実施例によれば、トライアングルマージフラグに基づき、サブブロックマージフラグをパースするか否かが決定できる。本発明の一実施例によれば、トライアングルマージフラグが0の場合に、サブブロックマージフラグをパースすることが可能であってよい。このとき、パースするための更なる条件が必要であり得る。また、トライアングルマージフラグが1の場合に、サブブロックマージフラグをパースすることが可能でなくてもよい。このとき、トライアングルマージフラグが1の場合に、他の条件に関係なくサブブロックマージフラグをパースすることが可能でなくてもよい。
本発明のさらに他の実施例によれば、様々なマージモードのうち最後にシグナルされるものは、使用するか否かを示す値をパーシング無しで決定することができる。例えば、図20を参照すると、サブブロックマージフラグは、パーシング無しで決定されてよい。例えば、次のような条件を全て満たすとき、サブブロックマージフラグは1と決定されてよい。
1)general_merge_flag==1
2)様々なマージモードのうち、サブブロックマージモードよりも先にシグナルされる全てのモードを使用しない場合
3)サブブロックマージモードを使用できる条件を満たす場合
また、そうでない場合(すなわち、上の条件のうち少なくとも一つを満たさない場合)、サブブロックマージフラグを0と決定できる。
例えば、前記条件のうち、“2)様々なマージモードのうち、サブブロックマージモードよりも先にシグナルされる全てのモードを使用しない場合”は、次の条件ように定義されてよい(又は、次の条件を含むことができる)。
(regular_merge_flag==0&&mmvd_merge_flag==0&&ciip_flag==0&&merge_triangle_flag==0)
また、前記条件のうち、“3)サブブロックマージモードを使用できる条件を満たす場合”は、次の条件の通りでよい(又は、次の条件を含むことができる)。
(MaxNumSubblockMergeCand>0&&cbWidth>=8&&cbHeight>=8)
又は、前記条件のうち“3)”は、次の条件の通りでよい(又は、次の条件を含むことができる。)。
(サブブロックマージモードに含み得る方法のうち少なくとも一つがenabledである場合&&cbWidth>=8&&cbHeight>=8)
また、ここで、サブブロックマージモードに含み得る方法は、アフィンモーション補償(affine motion compensation)、サブブロックベースの時間モーションベクトル予測子(subblock-based temporal motion vector prediction)を含むことができる。また、アフィンモーション補償とサブブロックベースの時間モーションベクトル予測子が利用可能か否かを示す上位レベルシグナリングは、それぞれ、sps_affine_enabled_flag、sps_sbtmvp_enabled_flagと定義されてよい。本実施例において、前記条件において、幅、高さについて具体的な値を取り上げて説明したが、本発明がこれに制限されるものではなく、一般のブロックサイズに基づく条件であってよい。
図21は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図21の実施例は、前述した図20の実施例に、より効率的なシグナリング方法を追加したものであってよい。本発明の一実施例によれば、様々なモードのうち、あるモードは、該あるモードより後にシグナルされる一つ以上のモードの全てに対して使用可能な条件を満たさない場合、前記あるモードは、使用するか否かを明示的にシグナルせずに決定してよい。例えば、前記あるモードを使用するか否かを示すシグナリングをパースしなくてもよい。
例えば、図21に示すように、シグナルされるシンタックス構造(syntax structure)においてサブブロックマージモードを使用可能な条件を満たせない場合、トライアングルマージモードは、使用するか否かを明示的シグナル(explicit signaling)せずに、使用の可否が決定できる。例えば、サブブロックマージモードを使用可能な条件を満たせない場合、トライアングルマージフラグをパースしなくてもよい。一実施例として、サブブロックマージモードを使用可能な条件は、図20のサブブロックマージモードを使用できる条件を満たす場合と同一であってよい(又は、次の条件を含むことができる)。
したがって、図21を参照すると、デコーダは、MaxNumSubblockMergeCandが0の場合に、トライアングルマージフラグをパースしなくてもよい。ここで、MaxNumSubblockMergeCandは、サブブロックマージ候補の最大個数を示す変数である。又は、デコーダは、ブロックサイズに基づいてトライアングルマージフラグをパースしなくてもよい。又は、デコーダは、cbWidthが8よりも小さい場合、トライアングルマージフラグをパースしなくてもよい。すなわち、cbWidthが4である場合(又は、4以下である場合)、デコーダはトライアングルマージフラグをパースしなくてもよい。又は、cデコーダは、bHeightが8よりも小さい場合、トライアングルマージフラグをパースしなくてもよい。すなわち、cbHeightが4である場合(又は、4以下である場合)、デコーダはトライアングルマージフラグをパースしなくてもよい。
したがって、本発明の実施例によれば、4-by-Xブロック又はX-by-4ブロックに対して(幅又は高さが4であるブロックに対して)、デコーダはトライアングルマージフラグをパースしなくてもよい。このとき、トライアングルマージフラグを推論する方法を、以下に説明する。本発明の一実施例において、cbWidth、cbHeightの最小値は4であってよい。例えば、輝度ブロックに対して、cbWidth、cbHeightの最小値は4であってよい。また、cbWidth、cbHeightは2の指数形態であってよい。したがって、例えば、cbWidthが8以上であることは、cbWdithが4でないことと同じ意味であってよい。更なる実施例として、cbWidth、cbHeightの最大値は128であってよい。
また、図21の発明において様々なマージモードがトライアングルマージモード、サブブロックマージモードの順にシグナルされることに基づいて説明したが、発明は、これに限定されず、CIIP、サブブロックマージモードの順にシグナルされる場合にも適用可能である。すなわち、上述した実施例において、トライアングルマージモード、トライアングルマージフラグに対するものを、CIIP、CIIPフラグに対するものに取り替えることができる。
図21は、本発明の一実施例に係るモードの使用の有無を示すシグナリングの決定方法を示す図である。図21の実施例は、図20の実施例で説明した方法が適用されてよく、関連する重複説明は省略する。図21を参照すると、トライアングルマージフラグが存在しない場合に、デコーダは、その値が推論できる。
本発明の一実施例によれば、様々なマージモードのうちあるモードの使用の有無を示すシグナリングが存在しないとき、その値を推論することができる。一実施例として、デコーダは、1)様々なマージモードのうち前記あるモードよりも先にシグナルされる全てのモードを使用しなく、2)様々なマージモードのうち前記あるモードより後にシグナルされる全てのモードに対して使用できる条件を満たさなく、3)前記あるモードを使用できる条件を満たす場合、その値を1と推論できる。また、そうでない場合(すなわち、1)又は2)又は3)を満たさない場合)、デコーダは、その値を0と推論できる。また、ここで、条件“2)”において全てのモードに対して使用できる条件を満たさないことは、全てのモードのそれぞれに対して使用できる条件のうち少なくとも一つずつを満たさないことであってよい。
また、ここで、前記あるモードの使用の有無を示すシグナリングを1と推論する条件に、4)様々なマージモードのうち一つを使用する条件が追加されてよい。例えば、4)general_merge_modeが1である場合が追加されてよい。
例えば、図20の実施例に基づき、1)様々なマージモードのうちトライアングルマージモードよりも先にシグナルされる全てのモードを使用しなく、2)様々なマージモードのうちトライアングルマージモードよりも後にシグナルされる全てのモードに対して使用できる条件を満たさなく、3)トライアングルマージモードを使用できる条件を満たし、4)general_merge_modeが1である場合に、トライアングルマージフラグを1と推論できる。また、そうでない場合((すなわち、1)又は2)又は3)又は4)を満たさない場合、デコーダは、トライアングルマージフラグを0と推論できる。
ここで、図21を参照すると、“1)様々なマージモードのうちトライアングルマージモードよりも先にシグナルされる全てのモードを使用しない”ことは、次のような条件であってよい。
(regular_merge_flag==0&&mmvd_merge_flag==0&&ciip_flag==0)
また、図21を参照すると、“2)様々なマージモードのうちトライアングルマージモードよりも後にシグナルされる全てのモードに対して使用できる条件を満たさない”ことは、サブブロックマージモードを使用できる条件を満たしていない場合でよく、次のような条件であってよい。例えば、ブロックサイズに対する条件を含むことができる。
(MaxNumSubblockMergeCand==0||cbWidth==4||cbHeight==4)
また、図60を参照すると、“3)トライアングルマージモードを使用できる条件を満たすこと”は、次のような条件であってよい。
(MaxNumTriangleMergeCand>=2&&sps_triangle_enabled_flag&&slice_type==B&&cbWidth*cbHeight>=64)
更なる実施例として、図20及び図21の実施例において、条件確認に必要な演算を減らすために一部の条件確認を含まなくてもよい。例えば、デコーダは、トライアングルマージフラグをパース又は推論するとき、サブブロックマージモードを使用できる条件を満たせない条件又はサブブロックマージモードを使用できる条件において挙げられた条件のうち一部を使用しなくてもよい。このとき、パーシング段階と推論条件で使用する条件は、同じ該当条件であってよい。例えば、トライアングルマージフラグをパース又は推論するとき、デコーダは、MaxNumSubblockMergeCandに対する条件を確認しなくてもよい。すなわち、MaxNumSubblockMergeCandが0であってもトライアングルマージフラグをパースすることができ、トライアングルマージフラグが存在しない場合、その値を推論するとき、デコーダは、MaxNumSubblockMergeCandが0であるか否かの条件を確認しなくてもよい。
図22は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図22の実施例は、図16~図19の実施例と図20及び図21の実施例を共に行った具体的な実施例であってよい。本発明の実施例によれば、シグナリングオーバーヘッドを減らすことができる。本発明の一実施例によれば、モードA、モードB、モードC、モードD、モードEの順にシグナルされる場合があり得る。このとき、モードD又はモードEを使用できる場合に、モードCの使用の有無を示すシグナリングをパースすることができる。仮にモードD及びモードEのいずれをも使用できない場合には、モードCの使用の有無を示すシグナリングをパースしなくてもよい。また、仮にモードD及びモードEのいずれをも使用できない場合、並びにモードA及びモードBのいずれをも使用しない場合に、モードCの使用の有無を示すシグナリングを使用すると決定されてよい。
図22を参照すると、様々なマージモードが、正規マージ、MMVD、トライアングルマージモード、サブブロックマージモード、CIIPの順にシグナルされてよい。このとき、本発明の実施例によれば、CIIPを使用できない場合、デコーダは、サブブロックマージモードの使用の有無を示すシグナリングをパースしなくてもよい。また、CIIPを使用することができる場合、デコーダは、サブブロックマージモードの使用の有無を示すシグナリングがパースできる。また、CIIPが使用できなく、正規マージを使用しなく、MMVDを使用しなく、トライアングルマージモードを使用しなく、general_merge_flagが1である場合に、デコーダは、サブブロックマージモードの使用の有無を示すシグナリングを使用すると推論できる。そうでない場合には、デコーダは、使用しないと推論できる。
例えば、CIIPを使用できる条件は、1)CIIPの使用の可否を示す上位レベルシグナリングに基づく条件、2)cu_skip_flagに基づく条件、3)ブロックサイズ(幅又は高さ)に基づく条件のうち一つ以上の条件を&&(and)条件で含むことができる。図61を参照すると、CIIPを使用できる条件は、1)sps_ciip_enabled_flag、2)cu_skip_flag==0、3)cbWidth*cbHeight>=64&&cbWidth<128&&cbHeight<128条件のうち一つ以上の条件を&&(and)条件で含むものであってよい。図22を参照すると、CIIPが使用できる場合は、(sps_ciip_enabled_flag&&cu_skip_flag==0&&cbWidth*cbHeight>=64&&cbWidth<128&&cbHeight<128)であってよい。
また、本発明の実施例によれば、サブブロックマージモード及びCIIPのいずれをも使用できない場合、トライアングルマージモードの使用の有無を示すシグナリングをパースしなくてもよい。また、サブブロックマージモード又はCIIPを使用できる場合、トライアングルマージモードの使用の有無を示すシグナリングがパースできる。また、サブブロックマージモード及びCIIPのいずれをも使用できなく、正規マージを使用しなく、MMVDを使用しなく、general_merge_flagが1である場合に、トライアングルマージモードの使用の有無を示すシグナリングを使用すると推論できる。そうでない場合には、使用しないと推論できる。例えば、CIIPを使用できる条件、CIIPが使用できない場合は、先の説明を参照できる。ただし、ここでは、トライアングルマージモードを使用できる条件とCIIPを使用できる条件のうち重なるもの(例えば、図22で、cbWidth*cbHeight>=64)は、CIIPを使用できる条件から省略できる。また、subblock mergeonjungkoモードを使用できる条件は、1)MaxNumSubblockMergeonjungkoCandに基づく条件、2)ブロックサイズに基づく条件のうち一つ以上の条件を&&(and)条件で含むことができる。
図22を参照すると、サブブロックマージモードを使用できる条件は、1)MaxNumSubblockMergeCand>0、2)cbWdith>=8&&cbHeight>=8のうち一つ以上の条件を&&(and)条件で含むことができる。図2を参照すると、サブブロックマージモードを使用できる条件は、(MaxNumSubblockMergeCand>0&&cbWdith>=8&&cbHeight>=8)であってよい。サブブロックマージモードを使用できない場合は、サブブロックマージモードを使用できる場合に対するNOT条件であってよい。
図23は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図23の実施例は、図22と同じさらに他の実施例であってよい。本発明の一実施例によれば、モードA、モードB、モードC、モードD、モードEの順にシグナルされる場合があり得る。このとき、モードD又はモードEが使用できる場合、モードCの使用の有無を示すシグナリングをパースすることができる。仮にモードD及びモードEのいずれをも使用できない場合には、モードCの使用の有無を示すシグナリングをパースしなくてもよい。また、仮にモードDとモードEのいずれをも使用できない場合、並びにモードA及びモードBのいずれをも使用しない場合、モードCの使用の有無を示すシグナリングを使用すると決定できる。
図23を参照すると、様々なマージモードが正規マージ、MMVD、トライアングルマージモード、CIIP、サブブロックマージモードの順にシグナルされてよい。このとき、本発明の実施例によれば、サブブロックマージモードを使用できない場合、CIIPの使用の有無を示すシグナリングをパースしなくてもよい。また、サブブロックマージモードを使用できる場合、CIIPの使用の有無を示すシグナリングがパースできる。また、サブブロックマージモードを使用できなく、正規マージを使用しなく、MMVDを使用しなく、トライアングルマージモードを使用しなく、general_merge_flagが1である場合に、CIIPの使用の有無を示すシグナリングを使用すると推論できる。そうでない場合には、使用しないと推論できる。これについて、図21の説明を参照できる。また、本発明の実施例によれば、CIIPとサブブロックマージモードのいずれをも使用できない場合、CIIP又はサブブロックマージモードを使用できる場合、トライアングルマージモードの使用の有無を示すシグナリングについて図22の説明を参照できる。
図24は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図24及び図25の実施例は、図17の実施例に、トライアングルマージモードを使用できる条件を追加した実施例を示す。本発明の一実施例によれば、トライアングルマージモードを使用できる条件に、トライアングルマージモード候補の最大個数に関するものが含まれてよい。例えば、トライアングルマージモード候補の最大個数を示す値は、MaxNumTriangleMergeCandであってよい。例えば、トライアングルマージモードを使用できるには、(MaxNumTriangleMergeCand>=2)でなければならない。
したがって、図24を参照すると、(MaxNumTriangleMergeCand>=2)を満たす場合、トライアングルマージフラグをパースすることが可能であり、(MaxNumTriangleMergeCand>=2)を満たさない場合、トライアングルマージフラグをパースしなくてもよい。その他、図17の説明と重複する説明は省略する。
したがって、次の条件を全て満たすとき、デコーダは、トライアングルマージフラグがパースできる。仮に、次の条件のうち少なくとも一つを満たさない場合、トライアングルマージフラグをパースしなくてもよい。
1)MaxNumTriangleMergeCand>=2
2)sps_triangle_enabled_flag
3)slice_type==B
4)cbWidth*cbHeight>=64
5)sps_ciip_enabled_flag
6)cu_skip_flag==0
7)cbWidth<128
8)cbHeight<128
さらに他の一実施例において、前記条件のうち一部は省略されてもよい。これは、条件確認に必要な演算を減らすためであろう。例えば、省略される条件は、5)、6)、7)、8)のうち少なくとも一つであってよい。
また、本発明の一実施例において、CIIPフラグは、次のように決定されてよい。次の条件を全て満たす場合、CIIPフラグは1に設定されてよい。
a)general_merge_flag==1
b)regular_merge_flag==0
c)mmvd_merge_flag==0
d)merge_subblock_flag==0
e)merge_triangle_flag==0
f)sps_ciip_enabled_flag==1
g)cu_skip_flag==0
h)cbWidth*cbHeight>=64
i)cbWidth<128
j)cbHeight<128
前記条件のうち少なくとも一つを満たさない場合、CIIPフラグは0に設定されてよい。例えば、h)、i)、j)条件は他のブロックサイズ条件に代替されてよい。
本発明の一実施例において、トライアングルマージフラグが存在しない場合、トライアングルマージフラグは、次のプロセスによって推論されてよい。仮に、以下の全ての条件を満たす場合、トライアングルマージフラグは1と推論されてよい。
1)regular_merge_flag==0
2)mmvd_merge_flag==0
3)merge_subblock_flag==0
4)sps_ciip_enabled_flag==0||cu_skip_flag==1||cbWidth>=128||cbHeight>=128
5)MaxNumTriangleMergeCand>=2&&sps_triangle_enabled_flag==1&&tile_group_type==B&&cbWidth*cbHeight>=64
6)general_merge_flag==1
また、その他の場合、トライアングルマージフラグ値を0と推論できる。前記条件のうち、4)条件において||(すなわち、OR)で連結されたものは、図63で説明した5)、6)、7)、8)条件に該当するが、5)、6)、7)、8)のうち省略されるものがある場合、図64の4)条件においても共に省略されてよい。先に図24で説明したように、トライアングルマージモードを使用できる条件に、トライアングルマージモード候補の最大個数に関するものが含まれてよい。関連する重複説明は省略する。
また、本発明の一実施例によれば、様々なマージモードのうち少なくとも一つのモードは、使用の有無を示すシグナリングに用いられてよい。例えば、マージモードを使用する場合(general_merge_flagが1である場合)、様々なマージモードのうち少なくとも一つのモードは、使用の有無を示すシグナリングを使用する旨を示すことができる。一実施例によれば、前記少なくとも一つのモードは、既に設定されたモードであってよい。例えば、前記少なくとも一つのモードは、1個のモードであってよい。例えば、前記少なくとも一つのモードは、正規マージモードであってよい。
一実施例によれば、マージモードを使用する場合、様々なマージモードに対する使用の有無を示すシグナリングがいずれも使用しないと設定されたとき、既に設定されたモードに対する使用の有無を示すシグナリングを使用するように設定できる。さらに他の実施例によれば、マージモードを使用する場合、様々なマージモードに対する使用の有無を示すシグナリングが、既に設定されたモードに対するものを除いて全て使用しないと設定されたとき、既に設定されたモードに対する使用の有無を示すシグナリングを使用するように設定できる。これは、誤ったシグナリング及びそれによる動作を防止するためのものであってよい。
本発明の一実施例において、次の条件を全て満たす場合、正規マージフラグは1に設定されてよい。
1)regular_merge_flag==0
2)mmvd_merge_flag==0
3)merge_subblock_flag==0
4)ciip_flag==0
5)merge_triangle_flag==0
6)general_merge_flag==1
さらに他の実施例によれば、前記条件のうち一部の条件が省略されてもよい。例えば、前記条件のうち1)条件が省略されてよい。
本発明のさらに他の実施例によれば、様々なマージモードのうち一つの特定モードを除く全てのモードに対する使用可能条件を満たさない場合、デコーダは、前記特定モードの使用の有無を示すシグナリングをパースせずにその値を1と推論できる。又は、様々なマージモードのうち一つの特定モードを除くモードのうち少なくとも一つの使用可能条件を満たす場合、当該一つの特定モードの使用の有無を示すシグナリングをパースすることができる。一実施例として、これはマージモードを使用する場合に該当し得る。また、前記特定の一つのモードは、正規マージモードであってよい。
より具体的に、次の条件1)~4)のうち少なくとも一つを満たす場合に、デコーダは正規マージフラグがパースできる。実施例として、これは、マージモードを使用する場合に該当するものであってよい。
1)sps_mmvd_enabled_flag&&cbWidth*cbHeight!=32
2)MaxNumSubblockMergeCand>0&&cbWidth>=8&&cbHeight>=8
3)sps_ciip_enabled_flag&&cu_skip_flag==0&&cbWidth*cbHeight>=64&&cbWidth<128&&cbHeight<128
4)MaxNumTriangleMergeCand>=2&&sps_triangle_enabled_flag&&slice_type==B&&cbWidth*cbHeight>=64
また、前記1)~4)条件のいずれをも満たさない場合、正規マージフラグをパースしなくてもよく、その値を1と推論できる。これは、マージモードを使用する場合に該当するものであってよい。このとき、演算量を減らすために、前記条件のうち一部を省略してもよい。
また、本発明の他の一実施例によれば、様々なマージモードのうち2つ以上のモードに対する使用の有無を示すシグナリングが使用することを示す場合、前記様々なマージモードのうち既に設定されたモードを除く全てのモードに対する使用の有無を示すシグナリングを使用しないことを示すように設定し、前記既に設定されたモードに対する使用の有無を示すシグナリングを使用するように設定できる。例えば、前記既に設定されたモードは、正規マージモードであってよい。また、さらに他の例として、前記既に設定されたモードは、使用の有無を示すシグナリングが使用することを示した前記2つ以上のモードのうち一つのモードであってよい。このとき、一つのモードを決定する既に設定された方法が存在してよい。例えば、様々なマージモードに対する既に設定された順序のうち最も前のモードと決定できる。例えば、この実施例は、マージモードを使用する場合に該当し得る。
例えば、regular_merge_flag==1であり、merge_subblock_flag==1の場合に、merge_subblock_flagを0に設定できる。又は、ciip_flag==1であり、merge_subblock_flag==1の場合に、ciip_flagとmerge_subblock_flagを0に設定し、regular_merge_flagを1に設定できる。他の例として、ciip_flag==1であり、merge_subblock_flag==1の場合に、既に設定された順序である正規マージモード、MMVD、サブブロックマージモード、CIIP、トライアングルマージモードのうち、前にあるmerge_subblock_flagを1に設定し、CIIPフラグを1に設定できる。
図25は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図25の実施例は、先に説明した発明の具体的な実施例であってよい。例えば、図25の実施例は、図10~図13の実施例で説明した方法が適用されてよく、関連する重複説明は省略する。
前述したように、複数のマージモードが既に設定された順に、使用の有無がシグナルされたり或いは使用の有無が決定されてよい。図66を参照すると、複数のマージモードは正規マージモード、MMVD、サブブロックマージモード、CIIP、トライアングルマージモードを含むことができる。また、図25を参照すると、前記複数のマージモードは、正規マージモード、MMVD、サブブロックマージモード、CIIP、トライアングル1マージモードの順に、使用の有無がシグナルされたり或いは使用の有無が決定されてよい。また、図25を参照すると、正規マージモード、MMVD、サブブロックマージモード、CIIP、トライアングルマージモードを使用するか否かを示すシグナリングはそれぞれ、regular_merge_flag、mmvd_merge_flag、merge_subblock_flag、ciip_flag、MergeTriangleFlagであってよい。また、MergeTriangleFlagは、前述したmerge_triangle_flagと同じ意味であってよい。
また、各モードが行えるために満たさなければならない条件が存在してよい。例えば、あるモードが行えるために満たさなければならない条件を満たさないとき、前記あるモードを行わなくてもよい。また、この場合、前記あるモード以外の他のモードを行うことができる。又は、あるモードが行えるために満たさなければならない条件を満たす場合、前記あるモードを行ってもよく行わなくてもよい。このとき、前記あるモードを行うか否かを決定するための更なるシグナリングが存在してよい。
例えば、あるモードが行えるために満たさなければならない条件は、前記あるモードが利用可能か否かを示す上位レベルシグナリングに基づくことができる。上位レベルは、シーケンスレベル(sequence level)、SPS(sequence parameter set)レベル、スライスレベル(slice level)、タイトルレベル(tile level)、タイトルグループレベル(tile group level)、ブリックレベル(brick level)、CTUレベル(CTU level)などを含むことができる。また、前述したsps_mode_enabled_flagを含むことができる。このとき、モードは、あるモードに代替されてよい。
また、あるモードが行えるために満たさなければならない条件は、ブロックサイズに関連した条件を含むことができる。例えば、現在ブロックの幅又は高さに基づく条件を含むことができる。例えば、幅の上限線又は下限線が存在しよい。又は、高さの上限線又は下限線が存在してよい。又は、area(width*height)の上限線又は下限線が存在してよい。また、現在ブロックは、CU又はPUであってよい。また、現在ブロックの幅、高さはそれぞれ、cbWidth、cbHeightであってよい。本発明において、幅、高さはそれぞれ、cbWidth、cbHeightと同じ意味で使われてよい。
また、あるモードが行えるために満たさなければならない条件は、スライスタイプ(slice type)又はタイトルグループタイプ(tile group type)に基づくことができる。スライスタイプとタイトルグループタイプは同じ意味であってよい。
また、あるモードが行えるために満たさなければならない条件は、他のあるモードを使用するか否かに基づくことができる。前記他のあるモードは、スキップモードを含むことができる。また、スキップモードを使用するか否かは、cu_skip_flagに基づいて決定されてよい。また、前記他のあるモードは、前記あるモードよりも先にシグナルされたり或いは決定されるモードを含むことができる。例えば、前記他のあるモードを使用しない場合、前記あるモードを行うことが可能であってよい。
また、あるモードが行えるために満たさなければならない条件は、候補の最大個数(maximum number of candidates)に基づくことができる。例えば、前記候補(candidates)は、前記あるモードに関連した候補であってよい。例えば、前記候補は、前記あるモードが使用する候補であってよい。例えば、十分の個数以上の候補が存在し得るとき、あるモードを行うことが可能である。例えば、候補の最大個数が既に設定された値以上のとき、前記あるモードを行うことが可能である。例えば、候補の最大個数は、MaxNumModeCandというパラメータで示されてよく、MaxNumModeCandにおいてモードはどのモードを示すかに代替されてよい。例えば、マージモードに対してMaxNumMergeCand値が存在してよい。例えば、トライアングルマージモードに対してMaxNumTriangleMergeCand値が存在してよい。例えば、サブブロックマージモードに対してMaxNumSubblockMergeCand値が存在してよい。また、候補の最大個数は、あるモードが使用可能(enabled)か否かを示す上位レベルシグナリングに基づくことができる。例えば、MaxNumSubblockMergeCandは、sps_affine_enabled_flag又はsps_sbtmvp_enabled_flagに基づくことができる。sps_sbtmvp_enalbed_flagは、サブブロックベースの時間モーション(ベクトル)予測(subblock based temporal motion(vector) prediction)が使用可能か否かを示す上位レベルシグナリングであってよい。
本発明の一実施例によれば、正規マージモードが行えるために満たさなければならない条件が存在してよい。例えば、正規マージモードが行えるためにマージモードを使用することを示すシグナリングが真でなければならない条件であってよい。前記マージモードを使用することを示すシグナリングは、merge_flag又はgeneral_merge_flagであってよい。また、以下に説明する他のモードに対しても、マージモードを使用することを示すシグナリングが真であってこそ、前記他のモードを行うことが可能である。
又は、正規マージモードを行うために満たさなければならない条件が、他のモードとは違い、存在しなくてもよい。これは、正規マージモードが最も基本となるモードであるためであり得る。前述したマージモードを使用する場合であれば、正規マージモードを使用するために更なる条件が必要でなくてもよい。
図25を参照すると、第1条件2501を満たす場合、デコーダは、正規マージフラグ(すなわち、regular_merge_flag)がパースできる。第1条件2501は、sps_mmvd_enabled_flagが1であるか、或いは幅*高さが32でない場合であってよい。また、第1条件2501を満たさない場合に、regular_merge_flagをパースしなくてもよい。この場合、デコーダは、その値を1と推論できる。例えば、sps_mmvd_enabled_flagが0&&幅*高さ==32である場合、デコーダは、regular_merge_flagを1と推論できる。又は、1と推論するために、general_merge_flagが1である条件を含んでもよい。これは、前記第1条件2501を満たさない場合、マージモードに属した他のモードが行えるために満たさなければならない条件を全て満たすことができないためであり得る。その他に、regular_merge_flagが存在しない場合、上の1と推論する条件を満たすことができないと、デコーダは、その値を0と推論できる。また、幅又は高さはそれぞれ、2のべき乗であってよい。また、幅又は高さは、正数であってよい。したがって、幅*高さが32であるものは、幅、高さがそれぞれ4、8であるか、或いは8、4であるものであってよい。また、幅*高さが32でないことは、幅、高さがそれぞれ4、8でなく、8、4でないものであってよい。また、幅*高さが32でないものは、幅と高さが8以上であるものを表すこともできる。これは、インター予測に該当するものであってよく、例えば、4×4ブロックに対してインター予測が許容されなくてもよいためであろう。
本発明の一実施例によれば、MMVDが行えるために満たさなければならない条件が存在してよい。例えば、MMVDが利用可能か否かを示す上位レベルシグナリングに基づくことができる。例えば、MMVDが利用可能か否かを示す上位レベルシグナリングは、sps_mmvd_enabled_flagであってよい。図25を参照すると、第2条件2502を満たす場合、mmvd_merge_flagがパースできる。また、第2条件2502を満たさない場合、mmvd_merge_flagをパースしなくてもよく、その値が推論できる。第2条件2502は、(sps_mmvd_enabled_flag&&cbWidth*cbHeight!=32)であってよい。すなわち、sps_mmvd_enabled_flagが1であり、ブロックサイズ条件を満たすとき、mmvd_merge_flagがパースでき、sps_mmvd_enabled_flagが0であるか、或いはブロックサイズ条件を満たさないとき、mmvd_merge_flagをパースしなくてもよい。また、sps_mmvd_enabled_flagが1であり、前記ブロックサイズを満たさない場合、mmvd_merge_flagを1と推論できる。例えば、sps_mmvd_enabled_flagが1であり、width*heightが32である場合、regular_merge_flagが0の場合、且つgeneral_merge_flagが1である場合に、mmvd_merge_flagを1と推論できる。前記ブロックサイズ条件は、MMVD後にシグナルされるモードを使用できない条件と関連していてよい。
本発明の一実施例によれば、サブブロックマージモードが行えるために満たさなければならない条件が存在してよい。例えば、サブブロックマージモードが利用可能か否かを示す上位レベルシグナリングに基づくことができる。又は、サブブロックマージモードに属するモードが利用可能か否かを示す上位レベルシグナリングに基づくことができる。例えば、サブブロックマージモードには、アフィンモーション予測、サブブロックベースの時間モーションベクトル予測などが含まれてよい。したがって、アフィンモーション予測が利用可能か否かを示す上位レベルシグナリング(例えば、sps_affine_enabled_flag)に基づき、サブブロックマージモードが行われるか否かが判断されてよい。
又は、サブブロックベースの時間モーションベクトル予測が利用可能か否かを示す上位レベルシグナリング(例えば、sps_sbtmvp_enabled_flag)に基づき、サブブロックマージモードが行われるか否かが判断されてよい。又は、サブブロックマージモードが行えるためにサブブロックマージモードに対する最大候補個数に基づく条件を満たさなければならない条件が存在してよい。例えば、サブブロックマージモードに対する最大候補個数値が0よりも大きい場合、サブブロックマージモードを使用することが可能であってよい。また、サブブロックマージモードに対する最大候補個数は、サブブロックマージモードに属するモードが利用可能か否かを示す上位レベルシグナリングに基づくことができる。例えば、複数のサブブロックマージモードに属するモードが利用可能か否かを示す上位レベルシグナリングのうち少なくとも一つが1である場合にのみ、サブブロックマージモードに対する最大候補個数が0よりも大きいことが可能であってよい。また、サブブロックマージモードが行えるためにブロックサイズに基づく条件を満たさなければならない条件が存在してよい。例えば、幅と高さの下限線が存在してよい。例えば、幅が8以上であり、高さが8以上であるとき、サブブロックマージモードを使用することが可能であってよい。
図25を参照すると、第3条件2503を満たす場合、サブブロックマージフラグがパースできる。また、第3条件2503を満たさない場合、merge_subblock_flagをパースしなくてもよく、その値を0と推論できる。第3条件2503は、(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)であってよい。
本発明の一実施例によれば、CIIPが行えるために満たさなければならない条件が存在してよい。例えば、CIIPが利用可能か否かを示す上位レベルシグナリング(例えば、spsXBT_ciip_enabled_flag)に基づき、CIIPを行うことができるか否かが決定されてよい。また、スキップモードを使用するか否かに基づき、CIIPを行うことができるか否かが決定されてよい。例えば、スキップモードを使用する場合、CIIPを行うことが可能でなくてもよい。また、ブロックサイズに基づき、CIIPを行うことができるか否かが決定されてよい。例えば、ブロックサイズが下限線以上であり、上限線以下であるか否かに基づき、CIIPを行うことができるか否かが決定されてよい。例えば、幅*高さが下限線以上であり、幅が上限線以下であり、高さが上限線以下のときに、CIIPを行うことが可能であってよい。例えば、幅*高さが64以上であり、幅が128よりも小さく、高さが128よりも小さいときに、CIIPを行うことが可能であってよい。
図25を参照すると、第4条件2504を満たすとき、CIIPフラグがパースできる。また、第4条件2504を満たさないとき、CIIPフラグをパースしなくてもよく、その値を0と推論できる。第4条件2504は、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width*高さ>=64&&width<128&&高さ<128)であってよい。
本発明の一実施例によれば、トライアングルマージモードが行えるために満たさなければならない条件が存在してよい。例えば、トライアングルマージモードが利用可能か否かを示す上位レベルシグナリング(例えば、sps_triangle_enabled_flag)に基づき、トライアングルマージモードを行うことができるか否かが決定されてよい。また、スライスタイプに基づき、トライアングルマージモードを行うことができるか否かが決定されてよい。例えば、スライスタイプがBである場合、トライアングルマージモードを行うことが可能であってよい。これは、トライアングルマージモードを行うためには2つ以上のモーション情報又は2つ以上の参照ピクチャが必要なためであり得る。また、トライアングルマージモードに対する最大候補個数に基づき、トライアングルマージモードを行うことができるか否かが決定されてよい。トライアングルマージモードに対する最大候補個数は、MaxNumTriangleMergeCand値で示すことができる。例えば、トライアングルマージモードに対する最大候補個数が2以上である場合、トライアングルマージモードを行うことが可能であってよい。これは、トライアングルマージモードを行うためには2つ以上のモーション情報又は2つ以上の参照ピクチャが必要なためであり得る。また、本発明の実施例によれば、トライアングルマージモードが利用可能か否かを示す上位レベルシグナリングが、利用可能であること示す場合、トライアングルマージモードに対する最大候補個数が常に2以上であり、トライアングルマージモードが利用可能か否かを示す上位レベルシグナリングが、利用不可能であることを示す場合、トライアングルマージモードに対する最大候補個数が常に2よりも小さいか或いは0であってよい。
したがって、この場合、トライアングルマージモードが利用可能か否かを示す上位レベルシグナリングに基づかず、トライアングルマージモードに対する最大候補個数に基づき、トライアングルマージモードを行うことができるか否かが決定されてよい。これにより、条件をチェックする演算を減らすことができる。また、ブロックサイズに基づき、トライアングルマージモードを行うことができるか否かが決定されてよい。例えば、ブロックサイズが下限線以上であり、上限線以下か否かに基づき、トライアングルマージモードを行うことができるか否かが決定されてよい。例えば、幅*高さが下限線以上であり、幅が上限線以下であり、高さが上限線以下であるとき、トライアングルマージモードを行うことが可能であってよい。例えば、幅*高さが64以上である場合、トライアングルマージモードを行うことが可能であってよい。また、幅が128よりも小さく、高さが128よりも小さいとき、トライアングルマージモードを行うことが可能であってよい。
図25を参照すると、第5条件2505を満たす場合、トライアングルマージモードを使用するものであってよい。また、第5条件2505を満たさない場合、トライアングルマージモードを使用するものであってよい。第5条件2505は、MergeTriangleFlagが1である場合であってよい。また、第5条件2505を満たすために満たさなければならない条件が存在してよい。例えば、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2&&width*height>=64)を含むことができる。仮に(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2&&width*height>=64)が真である場合、MergeTriangleFlagが1であっても、0であってもよい。このとき、更なる条件によって1なのか0なのかが決定されてよい。前記更なる条件は、トライアングルマージモードよりも先にシグナル又は決定されるモード(例えば、正規マージモード、MMVD、サブブロックマージモード、CIIP)を使用しない場合とマージモードを使用する場合(例えば、general_merge_flag==1)であってよく、前記更なる条件を満たす場合、MergeTriangleFlagは1であり、前記更なる条件を満たさない場合、MergeTriangleFlagは0であってよい。また、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2&&width*height>=64)が偽である場合、MergeTriangleFlagが0であってよい。
図26は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図26は、図12及び図13で説明したシグナリング方法の具体的な実施例であってよい。
本発明の一実施例によれば、あるモードより後にシグナル又は決定されるモードのうち少なくとも一つを行うことができる場合、前記あるモードを使用するか否かを示すシグナリングをパースすることができる。また、あるモードより後にシグナル又は決定されるモードのいずれをも行うことができない場合、前記あるモードに対する使用の有無を示すシグナリングをパースしなくてもよい。また、あるモードより後にシグナル又は決定されるモードのいずれをも行うことができない場合、前記あるモードに対する使用の有無を示すシグナリング値を使用すると決定できる。
また、ここで、あるモードより後にシグナル又は決定されるモードを行うことができるかできないかは、図26で説明した、モードが行えるために満たさなければならない条件を満たすか満たさないかによるものであってよい。又は、ここで、あるモードより後にシグナル又は決定されるモードを行うことができるかできないかは、図26で説明したモードが行えるために満たさなければならない条件の一部を満たすか満たさないかによるものであってよい。例えば、モードが行えるために満たさなければならない条件のうち一部を、他のモードに対するシグナリングを決定するときは省略してもよい。これは、条件を確認する演算を減らすものであってよく、例えば、真である場合が多い条件を省略することができる。
より具体的に、あるモードを使用するためには、該あるモードが利用可能か否かを示す上位レベルシグナリングが真でなければならず、スライスタイプが特定値でなければならないが、前記あるモードと他のモードの使用の有無を示すシグナリングをパースするか否かを決定するために前記あるモードを使用するための条件を確認する場合、上位レベルシグナリングに基づき、またスライスタイプに基づかずに、前記他のモードの使用の有無を示すシグナリングをパースするか否かが決定できる。これは、スライスタイプが特定値である場合が多いためであり得る。したがって、スライスタイプが特定値でなくとも、前記あるモードが利用可能か否かを示す上位レベルシグナリングが真であれば、前記あるモードと他のモードの使用の有無を示すシグナリングがパースできる。
図26を参照すると、mmvd_condition、subblock_merge_condition、ciip_condition、triangle_merge_conditionが存在してよい。例えば、mmvd_condition、subblock_merge_condition、ciip_condition、triangle_merge_conditionはそれぞれ、図25で説明したMMVD、サブブロックマージモード、CIIP、トライアングルマージモードが行えるために満たさなければならない条件であってよい。又は、mmvd_condition、subblock_merge_condition、ciip_condition、triangle_merge_conditionはそれぞれ、図25で説明したMMVD、サブブロックマージモード、CIIP、トライアングルマージモードが行えるために満たさなければならない条件の一部であってよい。例えば、mmvd_condition、subblock_merge_condition、ciip_conditionはそれぞれ、図25で説明した第2条件2502、第3条件2503、第4条件2504であるか、或いはその一部であってよい。
また、あるモードより後にシグナル又は決定されるモードが行えるために満たさなければならない条件のうち、前記あるモードが行えるために満たさなければならない条件が重なる場合、前記あるモードが行えるために満たさなければならない条件を満たしてこそ前記あるモードが使用できるため、このような重なる条件は、図26のmmvd_condition、subblock_merge_condition、ciip_condition、triangle_merge_conditionなどから除外させることができる。
図26を参照すると、triangle_merge_conditionを満たす場合、ciip_flagがパースできる。また、triangle_merge_conditionを満たさない場合、ciip_flagをパースしなくてもよい。また、triangle_merge_conditionを満たさない場合、ciip_flagを1と推論できる。このとき、1と推論するためには、CIIPを行うことができる条件を満たさなければならず、CIIPよりも先にシグナル又は決定されるモードを全て使用しなく(例えば、regular_merge_flag==0&&mmvd_merge_flag==0&&merge_subblock_flag==0)、マージモードを使用する場合(general_merge_flag==1)の条件を満たさなければならない。その他の場合は、ciip_flagが存在しないとき、0と推論できる。
図26を参照すると、ciip_conditionを満たしたり或いはtriangle_merge_conditionを満たす場合、merge_subblock_flagがパースできる。また、ciip_conditionを満たさなく、且つtriangle_merge_coonditionを満たさない場合、merge_subblock_flagをパースしなくてもよい。また、ciip_conditionを満たさなく、且つtriangle_merge_coonditionを満たさない場合、merge_subblock_flagを1と推論できる。このとき、1と推論するために、サブブロックマージモードを行うことができる条件を満たさなければならず、サブブロックマージモードよりも先にシグナル又は決定されるモードを全て使用しなく(例えば、regular_merge_flag==0&&mmvd_merge_flag==0)、マージモードを使用する場合(general_merge_flag==1)の条件を満たさなければならない。その他の場合は、merge_subblock_flagが存在しないとき、0と推論できる。
図26を参照すると、subblock_merge_conditionを満たしたり、ciip_conditionを満たしたり、或いはtriangle_merge_conditionを満たす場合、mmvd_merge_flagがパースできる。また、subblock_merge_conditionを満たさなく、ciip_conditionを満たさなく、且つtriangle_merge_coonditionを満たさない場合、mmvd_merge_flagをパースしなくてもよい。また、subblock_merge_conditionを満たさなく、ciip_conditionを満たさなく、且つtriangle_merge_coonditionを満たさない場合、mmvd_merge_flagを1と推論できる。このとき、1と推論するためには、MMVDを行うことができる条件を満たさなければならず、MMVDよりも先にシグナル又は決定されるモードを全て使用しなく(例えば、regular_merge_flag==0)、マージモードを使用する場合(general_merge_flag==1)の条件を満たさなければならない。また、図66で説明したmmvd_merge_flagを1と推論する場合があり得る。その他の場合は、mmvd_merge_flagが存在しないとき、0と推論できる。
図26を参照すると、mmvd_conditionを満たしたり、subblock_merge_conditionを満たしたり、ciip_conditionを満たしたり、又はtriangle_merge_conditionを満たす場合、regular_merge_flagがパースできる。また、mmvd_conditionを満たさなく、subblock_merge_conditionを満たさなく、ciip_conditionを満たさなく、且つtriangle_merge_coonditionを満たさない場合、regular_merge_flagをパースしなくてもよい。また、mmvd_conditionを満たさなく、subblock_merge_conditionを満たさなく、ciip_conditionを満たさなく、且つtriangle_merge_coonditionを満たさない場合、regular_merge_flagを1と推論できる。このとき、1と推論するためには、正規マージモードを行うことができる条件を満たさなければならず(正規マージモードに対してはこのような条件が存在しなくてもよい)、正規マージモードよりも先にシグナル又は決定されるモードを全て使用しなく(正規マージモードに対してはこのような条件が存在しなくてもよい)、マージモードを使用する場合(general_merge_flag==1)の条件を満たさなければならない。また、図25で説明したregular_merge_flagを1と推論する場合があり得る。その他の場合は、regular_merge_flagが存在しないとき、0と推論できる。
また、図26において、複数のモードに対してそれよりも後にシグナル又は決定されるモードを行うことができるか否かによるシグナリングを説明したが、前記複数のモードのうち一部に対してのみ前記シグナリング方法を用いることができる。すなわち、図25の第1条件2501、第2条件2502、第3条件2503、第4条件2504のうち少なくとも一つを使用し、残りは図26の方法を用いることができる。すなわち、図25の第1条件2501、図26の第2条件2602、図26の第3条件2603、第4条件2604を使用することができる。
図27は、本発明の一実施例に係るマージデータシンタックス構造を示す図である。図27は、図12、図13及び図26で説明したシグナリング方法の具体的な実施例であってよい。図27を参照すると、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)である場合、ciip_flagがパースできる。このとき、CIIPを行うことができる条件を満たす場合にのみciip_flagをパースすることが可能であってよい。また、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)を満たさない場合、ciip_flagをパースしなくてもよい。また、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)を満たさない場合、ciip_flagを1と推論できる。このとき、マージモードを使用し、CIIPを行うことができる条件を満たし、CIIPよりも先にシグナル又は決定されるモードを全て使用しない場合に、ciip_flagを1と推論できる。
例えば、(general_merge_flag==1&&sps_ciip_enabled_flag&&cu_skip_flag==0&&width*height>=64&&width<128&&height<128&&regular_merge_flag==0&&mmvd_merge_flag==0&&merge_subblock_flag==0)であり、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)を満たさない場合に、ciip_flagを1と推論できる。このとき、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)のうち一部の条件のみを使用することができる。一部の条件のみを使用するとき、パースするか否か及び推論をするとき、一部の条件は一致しなければならない。例えば、slice_typeを使用しない場合の、例えば(sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>=2)を満たすとき、ciip_flagをパースすることが可能であってよく、(sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>=2)を満たさないとき、ciip_flagをパースしなくてもよい。また、(sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>=2)を満たさないとき、マージモードを使用し、CIIPを行うことができる条件を満たし、CIIPよりも先にシグナル又は決定されるモードを全て使用しない場合に、ciip_flagを1と推論できる。
図27を参照すると、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128))である場合、merge_subblock_flagがパースできる。このとき、サブブロックマージモードを行うことができる条件を満たす場合にのみ、merge_subblock_flagをパースすることが可能であってよい。また、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128))を満たさない場合、merge_subblock_flagをパースしなくてもよい。また、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128))を満たさない場合に、merge_subblock_flagを1と推論できる。このとき、マージモードを使用し、サブブロックマージモードを行うことができる条件を満たし、サブブロックマージモードよりも先にシグナル又は決定されるモードを全て使用しない場合に、merge_subblock_flagを1と推論できる。
例えば、(general_merge_flag==1&&MaxNumSubblockMergeCand>0&&width>=8&&height>=8&&regular_merge_flag==0&&mmvd_merge_flag==0)であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128))を満たさない場合に、merge_subblock_flagを1と推論できる。このとき、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)のうち一部の条件のみを使用し、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)のうち一部の条件のみを使用することができる。一部の条件のみを使用する場合、パースするか否かと推論をするときに一部の条件は一致しなければならない。また、上記で((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128))を満たさない場合を述べたが、これは、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)を満たさなく(&&)、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)を満たさない場合と同じものであってよい。
図27を参照すると、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))である場合、mmvd_merge_flagがパースできる。このとき、MMVDを行うことができる条件を満たす場合にのみ、mmvd_merge_flagをパースすることが可能であってよい。また、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))を満たさない場合、mmvd_merge_flagをパースしなくてもよい。また、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))を満たさない場合、mmvd_merge_flagを1と推論できる。
このとき、マージモードを使用し、MMVDを行うことができる条件を満たし、MMVDよりも先にシグナル又は決定されるモードを全て使用しない場合に、mmvd_merge_flagを1と推論できる。例えば、(general_merge_flag==1&&sps_mmvd_enabled_flag&&regular_merge_flag==0)であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))を満たさない場合に、mmvd_merge_flagを1と推論できる。このとき、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)のうち一部の条件のみを使用し、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)のうち一部の条件のみを使用し、(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)のうち一部の条件のみを使用することができる。一部の条件のみを使用する場合、パースするか否かと推論をするときに一部の条件は一致しなければならない。また、上記で((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))を満たさない場合を言及したが、これは、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)を満たさなく(&&)、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)を満たさなく(&&)、(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)を満たさない場合と同じものであってよい。
図25で説明したように、mmvd_merge_flagを1と推論する場合があり得る。例えば、(sps_mmvd_enabled_flag==1&&general_merge_flag==1&&width*height==32&&regular_merge_flag==0)である場合、mmvd_merge_flagを1と推論できる。また、図26で説明したように、(general_merge_flag==1&&sps_mmvd_enabled_flag&&regular_merge_flag==0)であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))を満たさない場合に、mmvd_merge_flagを1と推論できる。それ以外の場合は、mmvd_merge_flagを0と推論できる。
図27を参照すると、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)である場合、regular_merge_flagがパースできる。このとき、可能なマージモードとして正規マージモードのみ存在しない場合に限って、regular_merge_flagをパースすることが可能であってよい。また、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)を満たさない場合、regular_merge_flagをパースしなくてもよい。
また、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)を満たさない場合に、regular_merge_flagを1と推論できる。このとき、マージモードを使用する場合に、regular_merge_flagを1と推論できる。例えば、(general_merge_flag==1)であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)を満たさない場合に、regular_merge_flagを1と推論できる。このとき、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)のうち一部の条件のみを使用し、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)のうち一部の条件のみを使用し、(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)のうち一部の条件のみを使用することができる。一部の条件のみを使用する場合、パースするか否かと推論をするときに一部の条件は一致しなければならない。
より具体的に、低複雑度エンコーダは、様々なマージツール(merge tools)を使用しなくてもよく、このようなエンコーダのために、(sps_triangle_enabled_flag||sps_affine_enabled_flag||sps_sbtmvp_enabled_flag||sps_ciip_enabled_flag||sps_mmvd_enabled_flag)を満たさない場合、regular_merge_flagをパースせずに、その値を1と推論することができる。また、上記で((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)を満たさない場合を言及したが、これは、(sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)を満たさなく(&&)、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)を満たさなく(&&)、(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)を満たさなく(&&)、sps_mmvd_enabled_flagを満たさない場合と同じものであってよい。
図25で説明したように、regular_merge_flagを1と推論する場合があり得る。例えば、(sps_mmvd_enabled_flag==0&&general_merge_flag==1&&width*height==32)である場合、regular_merge_flagを1と推論できる。また、図68で説明したように、(general_merge_flag==1)であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)を満たさない場合に、regular_merge_flagを1と推論できる。それ以外の場合は、regular_merge_flagを0と推論できる。
また、図27の第1条件2701と第2条件2702において、(1)width*height>=64、(2)width>=8、height>=8の条件が含まれているので、(1)又は(2)は、幅、高さがそれぞれ4、8でないか、幅、高さがそれぞれ8、4であってはならない。したがって、第1条件2701と第2条件2702において、width*heightが32であるか否かを確認しなくて済む。したがって、第2条件2702は、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)のみ使用することができる。このような場合、general_merge_flagが1であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8)||sps_mmvd_enabled_flag)を満たさない場合に、regular_merge_flagを1と推論できる。また、その他の場合は、regular_merge_flagを0と推論できる。
また、第2条件2702は、sps_mmvd_enabled_flag&&((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))のみ使用することができる。このような場合、(general_merge_flag==1&&sps_mmvd_enabled_flag&&regular_merge_flag==0)であり、((sps_triangle_enabled_flag&&slice_type==B&&MaxNumTriangleMergeCand>=2)||(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)||(MaxNumSubblockMergeCand>0&&width>=8&&height>=8))を満たさない場合、mmvd_merge_flagを1と推論できる。また、その他の場合は、mmvd_merge_flagを0と推論できる。
また、図26で説明したのと同様に、図27でも複数のモードのうち一部に対してのみ前記シグナリング方法を用いることができる。すなわち、図25の第1条件2501、第2条件2502、第3条件2503、第4条件2504のうち一部を使用し、残りは図27の方法を用いることができる。すなわち、図25の第1条件2501、図27の第2条件2702、第3条件2703、第4条件2704を使用することができる。
図28は、本発明の一実施例に係るマージデータシンタックス構造を例示する図である。図28は、図12、図13及び図26で説明したシグナリング方法の具体的な実施例であってよい。また、図28の実施例は、図27で説明した実施例において重複する条件を除いたものであってよい。
図28を参照すると、図27と比較して、第2条件2802においてwidth*height>=64の条件が存在しなくてよい。これは、(width>=8&&height>=8)の条件を満たさない場合、width*height>=64の条件を満たさないはずであり、width*height!=32の条件が既に存在するためであり得る。すなわち、他の条件によってwidth*height>=64が常に満たされるためであり得る。
また、図26で説明したように、図28でも複数のモードのうち一部に対してのみ前記シグナリング方法を用いることができる。すなわち、図25の第1条件2501、第2条件2502、第3条件2503、第4条件2504のうち一部を使用し、残りは図28の方法を用いることができる。すなわち、図25の第1条件2501、図28の第2条件2802、第3条件2803、第4条件2804を使用することができる。又は、図25~図28の第1~第4条件を混用して使用してもよい。すなわち、図27の第1条件2701、図28の第2条件2802、図28の第3条件2801、図28の第4条件2801を使用することができる。
図29は、本発明の一実施例に係るマージモードシグナリング方法を例示する図である。前述したマージモードシグナリングでは、順次的なシグナリング方法を説明した。例えば、図25のような順次的なシグナリング方法を用いることができる。図29の(a)は、このような順次的なシグナリング方法を示している。図29で、太字は、決定されるモードを表し、斜体は、シグナリングであってよい。このシグナリングはフラグであってよく、0又は1の値を有することができる。
また、このシグナリングは、場合によって、明示的シグナリング(explicit signaling)又は暗黙的シグナリング(implicit signaling)が行われてよい。例えば、図29の(a)において、regular_merge_flagがシグナルされてよく、regular_merge_flag値に基づき、正規マージモードなのか否か判断できる。仮にregular_merge_flagが正規マージモードでないことを示した場合、mmvd_merge_flagがシグナルされてよく、mmvd_merge_flagに基づき、MMVDなのか否か判断できる。仮にMMVDでない場合、merge_subblock_flagがシグナルされてよく、merge_subblock_flagに基づき、サブブロックマージモードなのか否か判断できる。仮にサブブロックマージモードでない場合、ciip_flagがシグナルされてよく、ciip_flagに基づき、CIIPであるか否か判断できる。また、ciip_flagに基づき、TPM(トライアングルマージモード、triangular partitioningモード)なのか否か判断できる。図29の(a)では、正規マージモード、MMVD、サブブロックマージモード、CIIP、トライアングルマージモードの順にシグナルされる実施例を示したが、本発明はこれに限定されず、他の順序に構成されてもよい。上の図面に、他の順序で構成される実施例も示されている。
さらに他のマージモードシグナリング方法としてグルーピング方法を用いることができる。図29の(b)は、グルーピング方法の一実施例を示している。例えば、group_1_flagをシグナルすることができ、group_1_flagに基づき、選択するモードがグループ1に属するか否か決定できる。仮にgroup_1_flagがグループ1でないことを示す場合、group_2_flagをシグナルすることができる。また、group_2_flagに基づき、選択するモードがグループ2に属するか否か決定できる。このような動作を、多数のグループが存在する場合にも行うことができる。また、グループ内でどのモードを示すかを示すシグナリングが存在してよい。グルーピング方法によって、順次的なシグナリングに比べてシグナリングの深さを減らすことが可能である。また、シグナリングの最大長(コードワードの最大長)を減らすことが可能である。
本発明の一実施例によれば、3個のグループが存在してよい。また、あるグループに属するモードは1個存在してよい。例えば、グループ1に属するモードは、1個存在してよい。また、グループ2とグループ3に属するモードはそれぞれ2個存在してよい。図29の(b)を参照すると、グループ1にサブブロックマージモードが属し、グループ2に正規マージモード及びMMVDが属し、グループ3にCIIP及びトライアングルマージモードが属してよい。また、group_1_flagはmerge_subblock_flag、group_2_flagは、regular_merge_flagであってよい。また、グループ内においてどのモードを示すかを示すシグナリングとしてciip_flag及びmmvd_merge_flagが存在してよい。例えば、merge_subblock_flagがシグナルされ、merge_subblock_flagに基づいてサブブロックマージモードなのか否か決定できる。仮にサブブロックマージモードでない場合、regular_merge_flagがシグナルされてよい。regular_merge_flagに基づき、グループ2(正規マージモード又はMMVD)なのか、グループ3(CIIP又はトライアングルマージモード)なのか決定できる。また、グループ2であることを示す場合、mmvd_merge_flagに基づき、正規マージモードなのか、MMVDなのか決定できる。また、グループ3であることを示す場合、ciip_flagに基づき、CIIPなのかトライアングルマージモードなのか決定できる。すなわち、図29の(a)及び(b)におけるmerge_subblock_flag、regular_merge_flag、mmvd_merge_flag、ciip_flagは、ある程度異なる意味を有し得る。
図30は、本発明の一実施例に係るマージデータシンタックスを例示する図である。図30の実施例は、図29の(b)で説明したグルーピング方法を用いたものであってよい。本実施例において、前述した内容と重複する説明は省略されてよい。
本発明の一実施例によれば、マージモードを使用する場合、merge_subblock_flagをシグナルすることができる。マージモードを使用する場合は、前述したのと同一であってよく、general_merge_flagが1である場合であってよい。また、本発明は、CuPredModeがMODE_IBCでない場合、又はCuPredModeがMODE_INTERである場合に該当してもよい。また、merge_subblock_flagを、MaxNumSubblockMergeCand、ブロックサイズに基づいてパースするか否か決定でき、これは、前述したサブブロックマージモードを使用できる条件に基づくものであってよい。仮にmerge_subblock_flagが1である場合に、サブブロックマージモードを使用すると決定でき、さらにmerge_subblock_idxに基づいて候補インデックスを決定することができる。
また、仮にmerge_subblock_flagが0である場合に、regular_merge_flagがパースできる。このとき、regular_merge_flagをパースするための条件が存在してよい。例えば、ブロックサイズに基づく条件を含むことができる。また、モードの使用の可否を示す上位レベルシグナリングに基づく条件を含むことができる。前記モードの使用の可否を示す上位レベルシグナリングは、sps_ciip_enabled_flag、sps_triangle_enabled_flagを含むことができる。また、スライスタイプ(slice type)に基づく条件を含むことができる。また、cu_skip_flagに基づく条件を含むことができる。図71を参照すると、(width*height>=64&&width<128&&height<128)を満たしてこそ、regular_merge_flagがパースできる。また、(width*height>=64&&width<128&&height<128)を満たさない場合、regular_merge_flagをパースしなくてもよい。
また、CIIPを使用できる条件は、(sps_ciip_enabled_flag&&cu_skip_flag==0)を含むことができる。また、CIIPを使用できるブロックサイズ条件は、(width*height>=64&&width<128&&height<128)を含むことができる。また、トライアングルマージモードを使用できる条件は、(sps_triangle_enabled_flag&&slice_type==B)を含むことができる。また、トライアングルマージモードを使用できるブロックサイズ条件は、(width*height>=64&&width<128&&height<128)を含むことができる。仮に前記CIIPを使用できる条件又は前記トライアングルマージモードを使用できる条件を満たす場合、regular_merge_flagがパースできる。また、前記CIIPを使用できる条件と前記トライアングルマージモードを使用できる条件のいずれをも満たさない場合、regular_merge_flagをパースしなくてもよい。
本発明の実施例によれば、regular_merge_flagが存在しない場合、その値を1と推論できる。例えば、常に1と推論できる。これは、本発明においてregular_merge_flagが1である場合、正規マージモード又はMMVDを使用するものであってよい。したがって、仮に前記CIIPを使用できるブロックサイズ条件と前記トライアングルマージモードを使用できるブロックサイズ条件の全てを満たせない場合、使用可能なモードは正規マージモードとMMVDであってよく、regular_merge_flagをパースせずに1と決定できる。図71に示す実施例では、CIIP及びトライアングルマージモードを使用できるブロックサイズ条件が同一である。すなわち、幅又は高さが128であるブロックに対してCIIP及びトライアングルマージモードを全て使用することが可能でなくてもよい。
また、前記CIIPを使用できる条件及び前記トライアングルマージモードを使用できる条件を全て満たさない場合にも、前述したように、可能なモードが正規マージモード又はMMVDであってよいので、regular_merge_flagをパースせずに1と推論できる。
図30を参照すると、regular_merge_flagが1である場合に、sps_mmvd_enabled_flag値に基づいてシンタックス要素がパースできる。sps_mmvd_enabled_flagは、前述したように、MMVDが使用可能か否かを示す上位レベルシグナリングであってよい。sps_mmvd_enabled_flagが0の場合に、MMVDを使用できないものであってよい。図71を参照すると、仮にsps_mmvd_enabled_flagが0の場合に、mmvd_merge_flag、mmvd_cand_flag、mmvd_distance_idx、mmvd_direction_idx、merge_idxをパースしなくてもよい。また、mmvd_merge_flagが存在しない場合、その値を0と推論できる。また、merge_idxが存在しない場合、その値を、既に設定された方法によって推論することができる。例えば、merge_idxが存在しない場合に、mmvd_merge_flagが1であれば、mmvd_cand_flagと推論し、mmvd_merge_flagが0の場合に、0と推論できる。したがって、図30の実施例において、sps_mmvd_enabled_flagが0の場合に、regular_merge_flagが1であれば、常にmerge_idx値が0であってよく、マージ候補リスト(merge candidate list)のインデックス0の候補を用いて正規マージモード予測ができる。したがって、候補を選択する自由度がなく、このため、コーディング効率が低下することがある。また、sps_mmvd_enabled_flagが1のる場合に、mmvd_merge_flagがパースでき、mmvd_merge_flagが0の場合に、MaxNumMergeCandに基づいてmerge_idxがパースできる。
また、図30を参照すると、regular_merge_flagが0の場合に、前記CIIPを使用できる条件及び前記トライアングルマージモードを使用できる条件を全て満たす場合、ciip_flagがパースできる。仮にciip_flagが1の場合にCIIPを使用し、ciip_flagが0の場合にトライアングルマージモードを使用するものであってよい。仮に前記CIIPを使用できる条件又は前記トライアングルマージモードを使用できる条件を満たさない場合、ciip_flagをパースしなくてもよい。仮にciip_flagが存在しない場合、regular_merge_flagが1であれば、ciip_flagを0と推論できる。仮にciip_flagが存在しない場合、regular_merge_flagが0であれば、ciip_flagを(sps_ciip_enabled_flag&&cu_skip_flag==0)と推論できる。また、MergeTriangleFlagは、Bスライスの場合、!ciip_flagに設定できる。また、MergeTriangleFlagは、Pスライスの場合、0に設定できる。
図31は、本発明の一実施例に係るマージデータシンタックスを例示する図である。本実施例において、前述したのと重複する内容は省略できる。図30で説明したように、regular_merge_flagが1であり、MMVDを使用できるか否かを示す上位レベルシグナリングが、MMVDを使用できないことを示す場合に、候補選択の自由度が低下することを説明したが、図31の実施例ではそれを解決することができる。
図31を参照すると、merge_idxをパースするか否かは、sps_mmvd_enabled_flagと独立していてよい。すなわち、sps_mmvd_enabled_flagの値に関係なく、merge_idxをパースするか否かが決定できる。本発明の実施例によれば、regular_merge_flagが1の場合に、mmvd_merge_flagが0であり、MaxNumMergeCand>1の場合に、merge_idxがパースできる。また、regular_merge_flagが1の場合に、mmvd_merge_flagが1であれば、merge_idxをパースしなくてもよい。また、regular_merge_flagが1の場合に、MaxNumMergeCandが1であれば、merge_idxをパースしなくてもよい。例えば、sps_mmvd_enabled_flagが1の場合に、regular_merge_flagが1であり、mmvd_merge_flagが0であり、MaxNumMergeCand>1であれば、merge_idxがパースできる。また、同様に、sps_mmvd_enabled_flagが0の場合に、regular_merge_flagが1であり、mmvd_merge_flagが0であり、MaxNumMergeCand>1であれば、merge_idxがパースできる。
また、図30の一実施例において、トライアングルマージモードを使用できるブロックサイズ条件は、(width*height>=64&&width<128&&height<128)であったが、幅又は高さが128である場合、トライアングルマージモードを使用することが可能であってよい。例えば、幅又は高さが128である場合、トライアングルマージモードの予測がコーディング効率の向上に役立ち得るためである。図72では、トライアングルマージモードを、幅又は高さが128である場合にも使用可能であってよい。
図31で、CIIPを使用できるブロックサイズ条件は、(width*height>=64&&width<128&&height<128)であってよい。また、トライアングルマージモードを使用できるブロックサイズ条件は、(width*height>=64)であってよい。したがって、図72を参照すると、(width*height>=64)を満たさない場合、regular_merge_flagをパースしなくてもよい。また、幅が128であるか(又は、高さが128以上であるか)、或いは高さが128である(又は、高さが128以上である)場合、regular_merge_flagをパースする場合があてよい。例えば、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)である場合、(width*height>=64)を満たせば、regular_merge_flagがパースできる。また、(sps_triangle_enabled_flag&&slice_type==B)である場合、(width*height>=64)を満たせば、regular_merge_flagがパースできる。また、(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)を満たさなく、(sps_triangle_enabled_flag&&slice_type==B)を満たさない場合、regular_merge_flagをパースしなくてもよい。
また、図31を参照すると、ciip_flagをパースするか否かを決定するとき、ブロックサイズに基づく条件が必要であり得る。例えば、width<128であり、height<128である場合に、デコーダは、ciip_flagがパースできる。仮に幅が128であるか(又は、128以上であるか)、或いは高さが128である(又は、128以上である)場合に、ciip_flagをパースしなくてもよい。これは、幅又は高さが128である場合(又は、128以上である場合)に、CIIP及びトライアングルマージモードのうち一つは使用できないが、他の一つは使用できるためであり得る。これは、幅又は高さが128である場合(又は、128以上である場合)に、CIIPは使用できないが、トライアングルマージモードを使用できるためであり得る。図30の実施例では幅又は高さが128である場合(又は、128以上である場合)に、CIIP及びトライアングルマージモードの両方とも使用できず、これにより、regular_merge_flagをパースせずに1と推論したため、図31と相違点がある。
本発明の一実施例において、regular_merge_flagは、merge_subblock_flagに基づいてその値が推論できる。本実施例において、regular_merge_flag、merge_subblock_flag、ciip_flagは、図29の(b)、図30、図31で説明したregular_merge_flag、merge_subblock_flag、ciip_flagであってよい。
図30の説明において、regular_merge_flagが存在しない場合に、その値を常に1と推論したが、regular_merge_flagよりも先にシグナルされるmerge_subblock_flagが1である場合が存在してよい。このとき、merge_subblock_flag又はregular_merge_flagに基づいて予測を行うが、両方の値がいずれも1であるため、どの予測を行うかについて曖昧さ(ambiguity)が発生し得る。このため、本実施例ではmerge_subblock_flagに基づいてregular_merge_flagを推論することができる。例えば、merge_subblock_flagが1の場合に、regular_merge_flagを0と推論できる。また、merge_subblock_flagが0の場合に、regular_merge_flagを1と推論できる。又は、ここにgeneral_merge_flag条件が追加されてもよい。例えば、merge_subblock_flagが0であり、general_merge_flagが1である場合に、regular_merge_flagを1と推論できる。
また、図30では、ciip_flagが存在しない場合にその値を推論する方法を示したが、CIIPとトライアングルマージモードの使用可能なブロックサイズ条件が異なる場合、図30で説明したciip_flag推論方法を使用すれば、あるモードを使用できないブロックサイズにおいて前記あるモードを使用する旨をシグナルする。すなわち、例えば、幅又は高さが128である場合、CIIPを使用できないが、ciip_flagが1に設定されることがある。本実施例はこの問題を解決することができる。
本発明の一実施例によれば、ciip_flagが存在しない場合、ブロックサイズに基づいてその値が推論できる。また、ciip_flagが存在しない場合、regular_merge_flagに基づいてその値が推論できる。例えば、regular_merge_flagが1である場合に、ciip_flagを0と推論できる。また、regular_merge_flagが0の場合に、ciip_flagをブロックサイズに基づいて推論することができる。例えば、regular_merge_flagが0の場合に、ciip_flagをブロックサイズ、sps_ciip_enabled_flag、cu_skip_flagに基づいて推論することができる。regular_merge_flagが0の場合に、ciip_flagを(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)と推論できる。したがって、regular_merge_flagが0の場合に、幅又は高さが128であれば、ciip_flagを0と推論できる。また、ciip_flagを1と推論するために、general_merge_flagが1である条件が含まれてよい。仮にgeneral_merge_flagが0の場合に、ciip_flagを0と推論できる。すなわち、regular_merge_flagが0の場合に、ciip_flagを(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128&&general_merge_flag==1)と推論できる。そうでない場合、0と推論できる。
又は、regular_merge_flagが0であり、general_merge_flagが1である場合に、ciip_flagを(sps_ciip_enabled_flag&&cu_skip_flag==0&&width<128&&height<128)と推論できる。仮にgeneral_merge_flagが0の場合に、ciip_flagを0と推論できる。
また、図30の実施例においてMergeTriangleFlagを設定する方法を説明したが、regular_merge_flag値に関係なく設定した。したがって、regular_merge_flagが1であり、MergeTriangleFlagが1である場合が発生することがあり、これは、prediction方法に対して曖昧さ(ambiguity)を発生させる。したがって、本実施例では、regular_merge_flagに基づいてMergeTriangleFlagを設定することができる。例えば、regular_merge_flagが1の場合に、MergeTriangleFlagを0に設定できる。また、regular_merge_flagが0の場合に、MergeTriangleFlagを!ciip_flagに設定できる。さらに、regular_merge_flagが0の場合に、トライアングルマージモードを使用できる条件も考慮してMergeTriangleFlagを設定することができる。例えば、regular_merge_flagが0の場合に、MergeTriangleFlagを(!ciip_flag&&sps_triangle_enabled_flag&&slice_type==B)に設定できる。
したがって、sps_triangle_enabled_flagが0であるか、或いはslice_typeがBでない場合に、MergeTriangleFlagを1に設定する状況を防止することができる。また、MergeTriangleFlagを1に決定するために、general_merge_flagが1である条件が含まれてよい。仮に、general_merge_flagが0の場合に、MergeTriangleFlagを0に設定できる。すなわち、regular_merge_flagが0の場合に、MergeTriangleFlagを(!ciip_flag&&sps_triangle_enabled_flag&&slice_type==B&&general_merge_flag==1)に設定できる。そうでない場合、MergeTriangleFlagを0に設定できる。
又は、regular_merge_flagが0であり、general_merge_flagが1である場合に、MergeTriangleFlagを(!ciip_flag&&sps_triangle_enabled_flag&&slice_type==B)に設定できる。仮にgeneral_merge_flagが0の場合に、MergeTriangleFlagを0に設定できる。
図32は、本発明の一実施例に係るジオメトリックマージモード(geometric merge mode)を示す図である。本発明の一実施例によれば、ジオメトリックマージモードは、ジオメトリック分割モード(geometric partitioning mode)、GEOモード、GEOマージモード、GEO分割(partitioning)などのように様々に呼ばれてもよい。本発明の一実施例によれば、ジオメトリックマージモードは、CU(coding unit)、CB(coding block)を分割する方法であってよい。例えば、正方形又は長方形のCU又はCBを、正方形又は長方形でないパーティション(partition)に分ける方法であってよい。図32を参照すると、ジオメトリック分割の例を示している。図32に示すように、ジオメトリック分割によって、長方形のCUが三角形と台形のパーティション(又は、多角形)に分けられてよい。また、ジオメトリックマージモードを行う方法に対するシグナリングは、CUに対してシグナルされてよい。また、ジオメトリックマージモードは、2つのモーション情報に基づいてモーション補償、予測が行われてよい。また、2つのモーション情報は、マージ候補から得ることができる。本発明の実施例によれば、ジオメトリックマージモードで使用する2つのモーション情報を示すためのシグナリングが存在してよい。例えば、ジオメトリックマージモードにおいて使用する2つのモーション情報を示すために2つのインデックスをシグナルすることができる。より具体的に、例えば、ジオメトリックマージモードで使用する2つのモーション情報を示すために2つのマージ候補インデックスをシグナルすることができる。また、ジオメトリックマージモードにおいて2個の予測子がブレンド(blending)されてよい。例えば、ジオメトリックマージモードにおいてCU内の内部境界(inner boundary)付近で2個の予測子がブレンドされてよい。2つの予測子がブレンドされるということは、2つの予測子が加重和(weighed sum)されることであってよい。
一実施例として、ジオメトリックマージモードで使用する2つのモーション情報を示すためのシンタックス要素が、merge_triangle_idx0、merge_triangle_idx1であってよい。この場合、シンタックス要素から2つのインデックスm、nを得る(derive)ことができる。例えば、次の式のように誘導されてよい。
m=merge_triangle_idx0
n=merge_triangle_idx1+((merge_triangle_idx1>=m)?1:0)
すなわち、インデックスmは、merge_triangle_idx0と同一であってよい。また、index nは、merge_triangle_idx1がmerge_triangle_idx0よりも大きいか等しい場合に、merge_triangle_idx1+1であり、merge_triangle_idx1がmerge_triangle_idx0よりも小さい場合に、merge_triangle_idx1であってよい。
また、図32を参照すると、ジオメトリックマージモードの分割境界(split boundary)は角φ(angle phi)と距離オフセットρ(distance offset rho)で示すことができる。角φは、量子化角(quantized angle)を表すことができ、距離オフセットρは、量子化オフセットを表すことができる。角と距離オフセットは、merge_geo_idxによってシグナルされてよい。例えば、ルックアップテーブル(look-up table)によって定義されてよい。ジオメトリックマージモードは、2つのモーション情報に基づいて2つの予測子から予測信号(prediction signal)を生成することができる。このとき、2つの予測子を加重和するとき、加重値(weight)は前記角及び前記距離オフセットに基づくことができる。又は、2つの予測子を加重和するとき、加重値はブロック内における位置(座標)に基づくことができる。又は、2つの予測子を加重和するとき、加重値はブロック幅、高さに基づくことができる。
ジオメトリックマージモードでは、可能な分割(split)種類がTPMよりも多くてよい。例えば、ジオメトリックマージモードで可能な分割種類は、2個よりも多くてよい。例えば、80個の分割種類であってよい。ジオメトリックマージモードは、マージモードの一種であってよい。すなわち、ジオメトリックマージモードであるとき、general_merge_flag値が1であってよい。
図33は、本発明の一実施例に係るマージデータシンタックスを示す図である。
図33の実施例おいて、図29~図32で説明したり或いはそれ以前に説明した内容は省略してよい。
前述したように、複数のマージモードをシグナルするための方法が存在してよい。また、複数のマージモードは、サブブロックマージモード、正規マージモード、MMVD、CIIP、ジオメトリックマージモードなどを含むことができる。また、複数のマージモードは、トライアングル分割モード(triangle partitioning mode)を含まなくてよい。又は、トライアングル分割モードがジオメトリックマージモードに含まれた形態であってもよい。また、本実施例のシグナリング方法によってマージモードをシグナルするとき、互いに異なる長さのコードワードが用いられてよく、特定モードに短い長さのコードワードを使用するによってコーディング効率を向上させることができる。また、本実施例のシグナリング方法によって余分なシグナリング(redundant signaling)を無くし、コーディング効率が向上し得る。また、本実施例のシグナリングにおいて余分な条件検査を省略し、パーシング複雑性(complexity)が低くなり得る。
本発明の実施例によれば、CIIPを使用できる条件が存在してよい。前記CIIPを使用できる条件をCIIP_conditionsと呼ぶことができる。CIIP_conditionsは、下記の条件を全て満たすとき、真(true)であり得る。
条件1.sps_ciip_enabled_flag
条件2.cu_skip_flag==0
条件3.cbWidth*cbHeight>=64
条件4.cbWidth<128
条件5.cbHeight<128
また、CIIP_conditionsは、前記条件のうち少なくとも一つを満たさないとき、偽(false)であり得る。前記条件については、先の実施例で説明したので省略できる。
本発明の実施例によれば、ジオメトリックマージモードを使用できる条件が存在してよい。前記ジオメトリックマージモードを使用できる条件をGEO_conditionsと呼ぶことができる。GEO_conditionsは、下記の条件を全て満たすとき、真であり得る。
条件1.sps_triangle_enabled_flag
条件2.MaxNumTriangleMergeCand>1
条件3.slice_type==B
条件4.cbWidth>=8
条件5.cbHeight>=8
また、GEO_conditionsは、前記条件のうち少なくとも一つを満たさないとき、偽であり得る。
さらに他の実施例において、slice_type条件が必要でなくてもよい。これは、他の条件、例えば、MaxNumTriangleMergeCandに基づく条件を満たす場合、slice_typeに基づく条件を満たすためであり得る。本発明の実施例によれば、ジオメトリックマージモードを使用できる条件が存在してよい。前記ジオメトリックマージモードを使用できる条件をGEO_conditionsと呼ぶことができる。GEO_conditionsは、下記の条件を全て満たすとき、真であり得る。
条件1.sps_triangle_enabled_flag
条件2.MaxNumTriangleMergeCand>1
条件3.cbWidth>=8
条件4.cbHeight>=8
また、GEO_conditionsは、前記条件のうち少なくとも一つを満たさないとき、偽であり得る。
前記条件については、先の実施例で説明したので省略できる。ただし、sps_triangle_enabled_flag、MaxNumTriangleMergeCandについては、先の説明ではTPMに関する値として説明したが、本実施例ではそれがジオメトリックマージモードに関する値であってよい。すなわち、sps_triangle_enabled_flagは、ジオメトリックマージモードが使用できるか否かを示す上位レベルシグナリングであってよい。また、MaxNumTriangleMergeCandは、ジオメトリックマージモードで使用する候補リスト最大個数であってよい。
本発明の実施例によれば、CIIP_conditions又はGEO_conditionsを満たす場合に、regular_merge_flagがパースできる。また、CIIP_conditions及びGEO_conditionsのいずれをも満たさない場合に、regular_merge_flagをパースしなくてもよい。図75を参照すると、条件2が(CIIP_conditions||GEO_conditions)を表している。すなわち、次の条件のうち少なくとも一つを満たす場合に、regular_merge_flagがパースできる。
条件1(CIIP_conditions).sps_ciip_enabled_flag&&cu_skip_flag==0&&cbWidth*cbHeight>=64&&cbWidth<128&&cbHeight<128
条件2(GEO_conditions).sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>1&&cbWidth>=8&&cbHeight>=8
また、前記条件のいずれをも満たさない場合に、regular_merge_flagをパースしなくてよい。また、regular_merge_flagが存在しない場合に、その値をgeneral_merge_flag&&!merge_subblock_flagと推論できる。
さらに他の実施例として、前述したように前記条件2(GEO_conditions)は、slice_type条件を含めて次の通りであってよい。
条件2(GEO_conditions).sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>1&&slice_type==B&&cbWidth>=8&&cbHeight>=8
しかし、slice_type条件が他の条件を満たすときに常に満たされる場合、パーシング条件確認の複雑度を減らすために、スライスタイプ条件をさらに検査しなくてもよい。
本発明の実施例によれば、CIIP_conditions及びGEO_conditionsを全て満たす場合に、ciip_flagがパースできる。また、CIIP_conditions又はGEO_conditionsを満たさない場合に、ciip_flagをパースしなくてもよい。すなわち、次の条件を全て満たす場合に、ciip_flagがパースでき、次の条件のうち少なくとも一つを満たさない場合に、ciip_flagをパースしなくてよい。
条件1(CIIP_conditions).sps_ciip_enabled_flag&&cu_skip_flag==0&&cbWidth*cbHeight>=64&&cbWidth<128&&cbHeight<128
条件2(GEO_conditions).sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>1&&cbWidth>=8&&cbHeight>=8
また、前述したように、条件2(GEO_conditions)に、slice_typeに基づく条件を含めることも可能である。その条件は、次の通りでよい。
条件2(GEO_conditions).sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>1&&slice_type==B&&cbWidth>=8&&cbHeight>=8
本発明の実施例によれば、パーシング複雑度を下げるために、ciip_flagをパースするための条件が変わってもよい。例えば、ブロックサイズ条件の一部を省略してもよい。本発明において、ジオメトリックマージモードを使用するためのブロックサイズ条件を満たす場合、CIIPを使用するためのブロックサイズ条件の一部が満たされ得る。したがって、図75の条件3を参照して、本発明の実施例によれば、次の条件を全て満たす場合に、ciip_flagがパースでき、次の条件のうち少なくとも一つを満たさない場合に、ciip_flagをパースしなくてよい。
条件1(CIIP_conditions).sps_ciip_enabled_flag&&cu_skip_flag==0&&cbWidth<128&&cbHeight<128
条件2(GEO_conditions).sps_triangle_enabled_flag&&MaxNumTriangleMergeCand>1&&cbWidth>=8&&cbHeight>=8
また、ciip_flagが存在しない場合に、次の条件を全て満たすと、1と推論し、次の条件のうち少なくとも一つを満たさないと、0と推論できる。
条件1.sps_ciip_enabled_flag==1
条件2.general_merge_flag==1
条件3.merge_subblock_flag==0
条件4.regular_merge_flag==0
条件5.cu_skip_flag==0
条件6.cbWidth<128
条件7.cbHeight<128
条件8.cbWidth*cbHeight>=64
すなわち、パースする時の条件と推論する時の条件が異なってよい。また、パースする時に省略した条件(例えば、ブロックサイズに基づく条件)を、推論する時の条件には含まなければならないことがある。
また。ジオメトリックマージモードを使用するか否かを示す値であるmerge_geo_flagを、下記の条件を全て満たす場合に1と決定し、下記の条件のうち少なくとも一つを満たさない場合に0と決定できる。
条件1.sps_triangle_enabled_flag==1
条件2.general_merge_flag==1
条件3.merge_subblock_flag==0
条件4.regular_merge_flag==0
条件5.ciip_flag==0
条件6.MaxNumTriangleMergeCand>=2
条件7.cbWidth>=8
条件8.cbHeight>=8
更なる実施例として、条件9としてslice_type==Bが追加されてよい。
したがって、図33を参照すると、次のようなシグナリング構造を有することができる。第1条件3301を満たす場合に、merge_subblock_flagがパースできる。仮にmerge_subblock_flagが1の場合、サブブロックマージモードを使用するものであってよく、merge_subblock_idxがパースでき、regular_merge_flag、mmvd_merge_flag、ciip_flagをパースしなくてよい。仮にmerge_subblock_flagが0の場合に、第2条件3302を満たすと、regular_merge_flagがパースできる。仮にregular_merge_flagが1の場合、正規マージモード又はMMVDを使用するものであってよく、さらにmmvd_merge_flagをパースすることが可能であってよい。これについては、図29~図32で説明した内容が適用できる。仮にregular_merge_flagが0の場合に、第2条件3302を満たすと、ciip_flagがパースできる。仮にciip_flagが1の場合、CIIPを使用するものであってよい。CIIPを使用する場合、MaxNumMergeCandが1よりも大きいと、merge_idxがパースできる。仮にciip_flagが0の場合、merge_geo_flagが1と決定されてよい。また、仮にciip_flagが0の場合、ジオメトリックマージモードを使用するものであってよい。ジオメトリックマージモードを使用する場合、merge_geo_idx、merge_triangle_idx0、merge_triangle_idx1がパースできる。又は、ジオメトリックマージモードを使用する場合、MaxNumTriangleMergeCandが1より大きいと、merge_geo_idx、merge_triangle_idx0、merge_triangle_idx1がパースできる。
したがって、本発明の実施例によれば、幅又は高さが4であるブロック、すなわち、4×N、N×4サイズのブロックがCIIPを使用する場合、次のようにシグナルすることができる。merge_subblock_flagが0であってよく、第2条件3302を満たすので、regular_merge_flagをパースすることができ、その値が0であってよく、第3条件3303を満たさないので、ciip_flagをパースしなくてよく、前述した内容にしたがってその値を1と推論することができる。また、ジオメトリックマージモードを使用する場合、シグナリングは次の通りでよい。merge_subblock_flagが0で、regular_merge_flagが0で、ciip_flagが0であってよい。
図33で説明した実施例において、ジオメトリックマージモードを使用するか否かを示すシンタックス要素がciip_flag以外には別に存在しなくてよい。また、図33の実施例では幅又は高さが8よりも小さいブロックに対してはジオメトリックマージモードを使用できないとして説明したが、本発明は、これに限定されず、他のブロックサイズ(例えば、スレショルドよりも小さいブロックサイズ)に対してジオメトリックマージモードを使用できない場合にも実施例の適用が可能である。
図34は、本発明が適用される一実施例に係るビデオ信号処理方法を例示する図である。図34を参照すると、説明の便宜のためにデコーダを中心に説明するが、発明がこれに制限されるものではなく、本実施例に係る多重仮定予測ベースのビデオ信号処理方法は、エンコーダにも実質的に同じ方法で適用可能である。
デコーダは、現在ブロックにマージモード(merge mode)が適用されるか否かを示す第1シンタックス要素(syntax element)をパースする(S3401)
デコーダは、前記現在ブロックに前記マージモードが適用される場合、あらかじめ定義された第1条件に基づき、第2シンタックス要素をパースするか否かを決定する(S3402)。実施例として、前記第2シンタックス要素は、第1モード又は第2モードが前記現在ブロックに適用されるか否かを示すことができる。
デコーダは、前記現在ブロックに前記第1モード及び前記第2モードが適用されない場合、あらかじめ定義された第2条件に基づき、第3シンタックス要素をパースするか否かを決定する(S3403)。実施例として、前記第3シンタックス要素は、第3モード又は第4モードのうち、前記現在ブロックに適用されるモードを示すことができる。
デコーダは、前記第2シンタックス要素又は前記第3シンタックス要素に基づき、前記現在ブロックに適用されるモードを決定する(S3404)。
デコーダは、前記決定されたモードに基づいて前記現在ブロックのモーション情報を誘導する(S3405)。
デコーダは、前記現在ブロックのモーション情報を用いて前記現在ブロックの予測ブロックを生成する(S3406)。
前記第1条件は、前記第3モードを利用可能な条件及び前記第4モードを利用可能な条件のうち少なくとも一つを含む。
前述したように、実施例として、前記第3モード及び前記第4モードは、マージデータシンタックス内でデコーディング順序上、前記第1モードよりも後順位に位置してよい。
前述したように、実施例として、前記第1条件を満たす場合、前記第2シンタックス要素をパースする段階を含み、前記第1条件を満たさない場合、前記第2シンタックス要素は1と推論されてよい。
前述したように、実施例として、前記第1条件を満たさない場合、前記第2シンタックス要素は、前記現在ブロックにサブブロックベースのマージモードが適用されるか否かを示す第4シンタックス要素に基づいて推論することができる。
前述したように、実施例として、前記第2条件は、前記第4モードを利用可能な条件を含むことができる。
前述したように、実施例として、前記第2条件は、現在シーケンスにおいて前記第3モードが利用可能か否か、前記現在シーケンスにおいて前記第4モードが利用可能か否か、前記第4モードの最大候補個数が1よりも大きいか否か、前記現在ブロックの幅があらかじめ定義された第1サイズよりも小さいか否か、及び前記現在ブロックの高さがあらかじめ定義された第2サイズよりも小さいか否か、のうち少なくとも一つを含むことができる。
前述したように、実施例として、前記第2シンタックス要素が1である場合に、前記現在ブロックに前記第1モードが適用されるか又は前記第2モードが適用されるかを示す第5シンタックス要素を取得する段階を含むことができる。
上述した本発明の実施例は様々な手段によって具現されてよい。例えば、本発明の実施例は、ハードウェア、ファームウェア(firmware)、ソフトウェア又はそれらの結合などによって具現されてよい。
ハードウェアによる具現の場合、本発明の実施例に係る方法は、一つ又はそれ以上のASIC(Application Specific Integrated Circuit)、DSP(Digital Signal Processor)、DSPD(Digital Signal Processing Device)、PLD(Programmable Logic Device)、FPGA(Field Programmable Gate Array)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサなどによって具現されてよい。
ファームウェア又はソフトウェアによる具現の場合、本発明の実施例に係る方法は、以上で説明された機能又は動作を実行するモジュール、手順又は関数などの形態で具現されてよい。ソフトウェアコードはメモリに格納され、プロセッサによって駆動されてよい。前記メモリはプロセッサの内部又は外部に位置してよく、既に公知の様々な手段によってプロセッサとデータを授受することができる。
一部の実施例は、コンピュータによって実行されるプログラムモジュールのようなコンピュータによって実行可能な命令語を含む記録媒体の形態で具現されてもよい。コンピュータ可読媒体は、コンピュータによってアクセス可能な任意の可用媒体でよく、揮発性及び不揮発性の媒体、分離型及び非分離型のいかなる媒体も含む。また、コンピュータ可読媒体は、いかなるコンピュータ記憶媒体及び通信媒体も含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令語、データ構造、プログラムモジュール又はその他データのような情報の記憶のための任意の方法又は技術で具現された揮発性及び不揮発性、分離型及び非分離型のいかなる媒体も含む。通信媒体は、典型的に、コンピュータ可読命令語、データ構造又はプログラムモジュールのような変調されたデータ信号のその他データ、又はその他伝送メカニズムを含み、任意の情報伝達媒体を含む。
前述した本発明の説明は例示のためのものであり、本発明の属する技術分野における通常の知識を有する者には、本発明の技術的思想又は必須の特徴を変更することなく他の具体的な形態に容易に変形可能であるということが理解できよう。したがって、以上で記述した実施例はいずれの面においても例示的なものであり、限定的でないものと解釈されるべきである。例えば、単一型として説明されている各構成要素は、分散して実施されてもよく、同様に、分散していると説明されている構成要素も結合した形態で実施されてもよい。
本発明の範囲は前記詳細な説明よりは後述する特許請求の範囲によって示され、特許請求の範囲の意味及び範囲そしてその均等概念から導出される変更又は変形された形態はいずれも本発明の範囲に含まれるものと解釈されるべきである。