上記のような課題を解決するために、本発明は、次のようなビデオ信号処理装置及びビデオ信号処理方法を提供する。
まず、本発明の実施例によれば、ビデオ信号処理方法において、現在ブロックの予測モードを決定する段階;前記現在ブロックの予測モードが現在ピクチャを参照するBC(block copy)予測モードであれば、前記BC予測モードに基づいて前記現在ブロックをデコードする段階;及び、前記現在ブロックの予測モードが少なくとも一つのピクチャを参照するインター予測モードであれば、前記インター予測モードに基づいて前記現在ブロックをデコードする段階を含み、前記BC予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記インター予測モードで前記現在ブロックをデコードするために参照される空間的隣位置の集合の一部を含んで構成されるビデオ信号処理方法が提供される。ここで、BC予測モードは、IBC(intra block copy)予測モード又はCBR(current picture referencing)予測モードと命名できる。
前記インター予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記現在ブロックの最上端最左側位置が(xCb,yCb)のとき、(xCb-1,yCb-1)位置を含み、前記BC予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記現在ブロックの最上端最左側位置が(xCb,yCb)のとき、(xCb-1,yCb-1)位置を含まなくてもよい。
前記BC予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記現在ブロックの最上端最左側位置が(xCb,yCb)のとき、(xCb-1,yCb+cbHeight-1)位置及び(xCb+cbWidth-1,yCb-1)位置のうち少なくとも一つで構成され、前記cbWidthは前記現在ブロックの幅(width)であり、前記cbHeightは前記現在ブロックの高さ(height)であってよい。
前記現在ブロックの予測モードを決定する段階は、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータ(pred_mode_bc_flag)を取得する段階;及び、前記BCモードパラメータに基づいて前記現在ブロックの予測モードをBC予測モードと決定する段階を含むことができる。ここで、BCモードパラメータは、BCモードがIBCモードと命名される場合pred_mode_ibc_flagと表記されてもよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの属した並列プロセシング(parallel processing)単位が、現在ピクチャでないピクチャを参照ピクチャとして参照しない単位であり、前記現在ブロックよりも上位レベルのシグナリング情報(sps_bc_enabled_flag)がBC予測モードを使用することを示す場合、前記BCモードパラメータの値は、BC予測モードを使用することを示す値と決定されてよい。ここで、上位レベルのシグナリング情報(sps_bc_enabled_flag)は、BCモードがIBCモードと命名される場合、sps_ibc_enabled_flagと表記されてよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの属したスライス(Slice)が、現在ピクチャでないピクチャを参照ピクチャとして参照しないスライスであり、前記現在ブロックよりも上位レベルのシグナリング情報(sps_bc_enabled_flag)がBC予測モードを使用可能であることを示す場合、前記BCモードパラメータの値は、BC予測モードを使用することを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、前記BCモードパラメータの値は、BC予測モードを使用しないことを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの属したスライスが、現在ピクチャでないピクチャを参照ピクチャとして参照可能なスライスであれば、前記BCモードパラメータの値は、BC予測モードを使用しないことを示す値と決定されてよい。
前記現在ブロックの予測モードを決定する段階は、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得する前に、前記ビットストリームから前記現在ブロックの予測モードを示す予測モードパラメータ(pred_mode_flag)を取得する段階を含むことができる。
前記ビットストリームから前記予測モードパラメータが取得されない場合、前記現在ブロックの属した並列プロセシング(parallel processing)単位が、現在ピクチャでないピクチャを参照ピクチャとして参照しない単位であれば、前記予測モードパラメータは、イントラ予測モードを示す値と決定されてよい。
前記ビットストリームから前記予測モードパラメータが取得されない場合、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、前記予測モードパラメータは、インター予測モードを示す値と決定されてよい。
前記現在ブロックの予測モードを決定する段階は、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得する段階を含むことができる。前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの分割を示すコーディングツリータイプ情報(treeType)が、クロマ成分(chroma component)を示すDUAL_TREE_CHROMAであれば、BCモードパラメータの値は、BC予測モードを使用しないことを示す値と決定されてよい。
前記現在ブロックの予測モードを決定する段階は、ビットストリームから前記現在ブロックの予測モードを示す予測モードパラメータを取得する段階を含み、前記ビットストリームから前記予測モードパラメータが取得されない場合、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当しなく、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、前記予測モードパラメータは、インター予測を示す値と決定されてよい。
前記現在ブロックの予測モードを決定する段階は、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得する段階を含み、前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックがスキップモードか否かを示すパラメータがスキップモードであることを示し、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当する場合、BCモードパラメータの値は、BC予測モードを使用することを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックがスキップモードか否かを示すパラメータがスキップモードであることを示さなく、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当しなく、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、BCモードパラメータの値は、BCを使用しないことを示す値と決定されてよい。
前記現在ブロックの予測モードを決定する段階は、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得する前に、前記ビットストリームから前記現在ブロックの予測モードを示す予測モードパラメータを取得する段階を含み、前記ビットストリームから前記予測モードパラメータが取得されない場合、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当すれば、前記予測モードパラメータは、イントラ予測を示す値と決定されてよい。
前記インター予測モードに基づいて前記現在ブロックをデコードする段階は、ビットストリームから前記現在ブロックのインター予測類型を示すインター予測類型パラメータ(inter_pred_idc)を取得する段階;及び、前記現在ブロックのサイズ及び前記インター予測類型パラメータに基づいて前記現在ブロックの参照リストを決定する段階を含み、前記現在ブロックの幅と高さの和が12よりも大きければ、前記インター予測類型パラメータはL0参照リスト及びL1参照リストのうち少なくとも一つのリストを示し、前記現在ブロックの幅と高さの和が12であれば、前記インター予測類型パラメータはL0参照リスト及びL1参照リストのいずれか一つのリストを示すことができる。
前記現在ブロックの幅と高さの和が12よりも大きければ、前記インター予測類型パラメータのビットシグナリング00はL0参照リストを示し、ビットシグナリング01はL1参照リストを示し、ビットシグナリング1はL0参照リストとL1参照リストを示すことができる。
また、本発明の一実施例によれば、ビデオ信号処理方法において、現在ブロックの予測モードを決定する段階;前記現在ブロックの予測モードが現在ピクチャを参照するBC(block copy)予測モードであれば、前記BC予測モードに基づいて前記現在ブロックをエンコードするビットストリームを生成する段階;及び、前記現在ブロックの予測モードが少なくとも一つのピクチャを参照するインター予測モードであれば、前記インター予測モードに基づいて前記現在ブロックをエンコードするビットストリームを生成する段階を含み、前記BC予測モードで前記現在ブロックをエンコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記インター予測モードで前記現在ブロックをエンコードするために参照される空間的隣位置の集合の一部を含んで構成される、ビデオ信号処理方法が提供される。
また、本発明の一実施例によれば、ビデオ信号処理装置において、プロセッサを含み、前記プロセッサは、現在ブロックの予測モードを決定し、前記現在ブロックの予測モードが現在ピクチャを参照するBC(block copy)予測モードであれば、前記BC予測モードに基づいて前記現在ブロックをデコードし、前記現在ブロックの予測モードが少なくとも一つのピクチャを参照するインター予測モードであれば、前記インター予測モードに基づいて前記現在ブロックをデコードし、前記BC予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記インター予測モードで前記現在ブロックをデコードするために参照される空間的隣位置の集合の一部を含んで構成されるビデオ信号処理装置が提供される。
前記インター予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記現在ブロックの最上端最左側位置が(xCb,yCb)のとき、(xCb-1,yCb-1)位置を含み、前記BC予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記現在ブロックの最上端最左側位置が(xCb,yCb)のとき、(xCb-1,yCb-1)位置を含まなくてもよい。
前記BC予測モードで前記現在ブロックをデコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記現在ブロックの最上端最左側位置が(xCb,yCb)のとき、(xCb-1,yCb+cbHeight-1)位置及び(xCb+cbWidth-1,yCb-1)位置のうち少なくとも一つで構成され、前記cbWidthは前記現在ブロックの幅(width)であり、前記cbHeightは前記現在ブロックの高さ(height)であってよい。
前記プロセッサは、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得し、前記BCモードパラメータに基づいて前記現在ブロックの予測モードをBC予測モードと決定できる。
前記ビットストリームから前記BCモードパラメータが取得されなく、前記現在ブロックの属した並列プロセシング(parallel processing)単位が、現在ピクチャでないピクチャを参照ピクチャとして参照しない単位であり、前記現在ブロックよりも上位レベルのシグナリング情報(sps_bc_enabled_flag)がBC予測モードを使用することを示す場合、前記BCモードパラメータの値は、BC予測モードを使用することを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの属したスライス(Slice)が、現在ピクチャでないピクチャを参照ピクチャとして参照しないスライスであり、前記現在ブロックよりも上位レベルのシグナリング情報(sps_bc_enabled_flag)がBC予測モードを使用可能であることを示す場合、前記BCモードパラメータの値は、BC予測モードを使用することを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されなく、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、前記BCモードパラメータの値は、BC予測モードを使用しないことを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されない場合、前記現在ブロックの属したスライスが、現在ピクチャでないピクチャを参照ピクチャとして参照可能なスライスであれば、前記BCモードパラメータの値は、BC予測モードを使用しないことを示す値と決定されてよい。
前記プロセッサは、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得する前に、前記ビットストリームから前記現在ブロックの予測モードを示す予測モードパラメータを取得し、前記ビットストリームから前記予測モードパラメータが取得されなく、前記現在ブロックの属した並列プロセシング(parallel processing)単位が、現在ピクチャでないピクチャを参照ピクチャとして参照しない単位であれば、前記予測モードパラメータは、イントラ予測モードを示す値と決定され、前記ビットストリームから前記予測モードパラメータが取得されなく、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、前記予測モードパラメータは、インター予測モードを示す値と決定されてよい。
前記プロセッサは、ビットストリームから、前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得できる。前記ビットストリームから前記BCモードパラメータが取得されなく、前記現在ブロックの分割を示すコーディングツリータイプ情報(treeType)が、クロマ成分(chroma component)を示すDUAL_TREE_CHROMAであれば、BCモードパラメータの値は、BC予測モードを使用しないことを示す値と決定されてよい。
前記プロセッサは、ビットストリームから、前記現在ブロックの予測モードを示す予測モードパラメータを取得できる。前記ビットストリームから前記予測モードパラメータが取得されなく、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当しなく、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、前記予測モードパラメータは、インター予測を示す値と決定されてよい。
前記プロセッサは、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得し、前記ビットストリームから前記BCモードパラメータが取得されなく、前記現在ブロックがスキップモードか否かを示すパラメータがスキップモードであることを示し、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当する場合、BCモードパラメータの値は、BC予測モードを使用することを示す値と決定されてよい。
前記ビットストリームから前記BCモードパラメータが取得されなく、前記現在ブロックがスキップモードか否かを示すパラメータがスキップモードであることを示さなく、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当しなく、前記現在ブロックの属した並列プロセシング単位が、現在ピクチャでないピクチャを参照ピクチャとして参照可能な単位であれば、BCモードパラメータの値は、BCを使用しないことを示す値と決定されてよい。
また、本発明の一実施例によれば、ビデオ信号処理装置において、プロセッサを含み、前記プロセッサは、現在ブロックの予測モードを決定し、前記現在ブロックの予測モードが現在ピクチャを参照するBC(block copy)予測モードであれば、前記BC予測モードに基づいて前記現在ブロックをエンコードするビットストリームを生成し、前記現在ブロックの予測モードが少なくとも一つのピクチャを参照するインター予測モードであれば、前記インター予測モードに基づいて前記現在ブロックをエンコードするビットストリームを生成し、前記BC予測モードで前記現在ブロックをエンコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記インター予測モードで前記現在ブロックをエンコードするために参照される空間的隣位置の集合の一部を含んで構成されるビデオ信号処理装置が提供される。
前記プロセッサは、ビットストリームから前記現在ブロックの予測モードがBC予測モードであるか否かを示すBCモードパラメータを取得する前に、前記ビットストリームから前記現在ブロックの予測モードを示す予測モードパラメータを取得し、前記ビットストリームから前記予測モードパラメータが取得されない場合、前記現在ブロックのサイズが、インター予測が制限されるブロックサイズにあらかじめ設定されたブロックサイズに該当すれば、前記予測モードパラメータは、イントラ予測を示す値と決定されてよい。
前記プロセッサは、ビットストリームから前記現在ブロックのインター予測類型を示すインター予測類型パラメータを取得し、前記現在ブロックのサイズ及び前記インター予測類型パラメータに基づいて前記現在ブロックの参照リストを決定するが、前記現在ブロックの幅と高さの和が12よりも大きければ、前記インター予測類型パラメータはL0参照リスト及びL1参照リストのうち少なくとも一つのリストを示し、前記現在ブロックの幅と高さの和が12であれば、前記インター予測類型パラメータはL0参照リスト及びL1参照リストのいずれか一つのリストを示すことができる。
前記現在ブロックの幅と高さの和が12よりも大きければ、前記インター予測類型パラメータのビットシグナリング00はL0参照リストを示し、ビットシグナリング01はL1参照リストを示し、ビットシグナリング1はL0参照リストとL1参照リストを示すことができる。
また、本発明の一実施例によれば、ビデオ信号処理のためのビットストリームを保存するコンピュータ可読記録媒体において、前記ビットストリームは、対象ブロックの予測モード情報を含み、前記対象ブロックの予測モードが対象ピクチャを参照するBC(block copy)予測モードであれば、前記BC予測モードに基づいて前記対象ブロックをエンコードするビットストリームを含み、前記対象ブロックの予測モードが少なくとも一つのピクチャを参照するインター予測モードであれば、前記インター予測モードに基づいて前記対象ブロックをエンコードするビットストリームを含み、前記BC予測モードで前記対象ブロックをエンコードするために参照される空間的隣(spatial neighbor)位置の集合は、前記インター予測モードで前記対象ブロックをエンコードするために参照される空間的隣位置の集合の一部を含んで構成されるコンピュータ可読記録媒体が提供される。
[実施例]
本明細書で使用される用語は本発明における機能を考慮しながらできるだけ現在広く使用されている一般的な用語を選択したが、これは当分野に携わる技術者の意図、慣例または新たな技術の出現などによって異なり得る。また、特定の場合は出願人が任意に選定した用語もあるが、この場合、該当の発明を実施する形態の部分においてその意味を記載する。よって、本明細書で使用される用語は、単なる用語の名称ではなく、その用語の有する実質的な意味と本明細書全般にわたる内容に基づいて解釈すべきであることを明らかにする。
本明細書において、一部用語は以下のように解釈される。コーディングは、場合によってはエンコーディングまたはでコーディングに解釈される。本明細書において、ビデオ信号のエンコーディング(符号化)を行ってビデオ信号のビットストリームを生成する装置はエンコーディング装置またはエンコーダと称され、ビデオ信号ビットストリームのデコーディング(復号化)を行ってビデオ信号を復元する装置はデコーディング装置またはデコーダと称される。また、本明細書において、ビデオ信号処理装置はエンコーダ及びデコーダをいずれも含む概念の用語として使用される。情報(information)は値(values)、パラメータ(parameter)、係数(coefficients)、成分(elements)などをいずれも含む用語であって、場合によっては意味が異なるように解釈されることがあるため、本発明はこれに限らない。‘ユニット’は、映像処理の基本単位又はピクチャの特定位置を意味し、ルマ(luma)成分とクロマ(chroma)成分の両方を含むイメージ領域のことを指す。また、「ブロック」は輝度成分及び色差成分(つまり、Cb及びCr)のうち特定成分を含むイメージ領域を指す。但し、実施例によって「ユニット」、「ブロック」、「パーティション」、及び「領域」などの用語は互いに混合して使用されてもよい。また、本明細書において、ユニットはコーディングユニット、予測ユニット、変換ユニットをいずれも含む概念として使用される。ピクチャはフィールドまたはフレームを指し、実施例よっては前記用語は互いに混用して使用される。
図1は、本発明の一実施例によるビデオ信号エンコーディング装置100の概略的なブロック図である。図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を含む。イントラ予測部152は現在ピクチャ内でイントラ(intra)予測を行い、インター予測部154は復号ピクチャバッファ156に貯蔵された参照バッファを利用して現在ピクチャを予測するインター(inter)予測を行う。イントラ予測部152は、現在ピクチャ内の復元されたサンプルからイントラ予測を行い、イントラ符号化情報をエントロピーコーディング部160に伝達する。イントラ符号化情報は、イントラ予測モード、MPM(Most Probable Mode)フラッグ、MPMインデックスのうち少なくとも一つを含む。 イントラ符号化情報は参照サンプルに関する情報を含む。インター予測部154は、モーション推定部154a及びモーション補償部154bを含んで構成される。モーション推定部154aは、復元された参照信号ピクチャの特定領域を参照して現在領域のモーションベクトル値を獲得する。モーション推定部154aは、参照領域に対するモーション情報(参照ピクチャインデックス、モーションベクトル情報)をエントロピーコーディング部160に伝達する。モーション補償部154bは、モーション補償部154aから伝達されたモーションベクトル値を利用してモーション補償を行う。 インター予測部154は、参照領域に対するモーション情報を含むインター符号化情報をエントロピーコーディング部160に伝達する。
上述したピクチャ予測が行われれば、変換部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)方式が使用される。
前記生成されたビットストリームは、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は、ビデオ信号ビットストリームをエントロピーデコードし、各領域に対する変換係数、イントラ符号化情報、インター符号化情報などを抽出する。逆量子化部220は、エントロピーデコードされた変換係数を逆量子化し、逆変換部225は、逆量子化された変換係数を用いてレジデュアル値を復元する。ビデオ信号処理装置200は、逆変換部225から取得したレジデュアル値を予測部250から取得した予測値と合算して元来の画素値を復元する。
一方、フィルタリング部230は、ピクチャに対するフィルタリングを行って画質を向上させる。ここには、ブロック歪曲現象を減少させるためのデブロッキングフィルタ及び/またはピクチャ全体の歪曲を除去するための適応的ループフィルタなどが含まれる。フィルタリングを経たピクチャは出力されるか、次のピクチャに対する参照ピクチャとして利用するために復号ピクチャバッファ(DPB)256に貯蔵される。
予測部250は、イントラ予測部252及びインター予測部254を含む。予測部250は、前述したエントロピーデコーディング部210を通じて復号化された符号化タイプ、各領域に対する変換係数、イントラ/インター符号化情報などを活用して予測ピクチャを生成する。復号化が遂行される現在ブロックを復元するために、現在ブロックが含まれた現在ピクチャまたは他のピクチャの復号化された領域が利用できる。復元に現在ピクチャだけを用いる、すなわち、イントラ予測だけを行うピクチャ(又は、タイル/スライス)を、イントラピクチャ又はIピクチャ(又は、タイル/スライス)といい、イントラ予測及びインター予測の両方を行うことができるピクチャ(又は、タイル/スライス)を、インターピクチャ(又は、タイル/スライス)という。インターピクチャ(又は、タイル/スライス)のうち、各ブロックのサンプル値を予測するために、最大で1つのモーションベクトル及び参照ピクチャインデックスを用いるピクチャ(又は、タイル/スライス)を、予測ピクチャ(predictive picture)又はPピクチャ(又は、タイル/スライス)といい、最大で2つのモーションベクトル及び参照ピクチャインデックスを用いるピクチャ(又は、タイル/スライス)を、双予測ピクチャ(Bi-predictive picture)又はBピクチャ(又は、タイル/スライス)という。 言い換えると、Pピクチャ(または、タイル/スライス)は各ブロックを予測するために最大1つの動き情報セットを用いて、Bピクチャ(または、タイル/スライス)は各ブロックを予測するために最大2つの動き情報セットを用いる。ここで、動き情報セットは1つ以上の動きベクトルと1つの参照ピクチャインデックスを含む。
イントラ予測部252は、イントラ符号化情報及び現在ピクチャ内の復元されたサンプルを利用して予測ブロックを生成する。上述したように、イントラ符号化情報は、イントラ予測モード、MPM(MOST Probable Mode)フラッグ、MPMインデックスのうち少なくとも一つを含む。イントラ予測部252は、現在ブロックの左側及び/又は上側に位置している復元されたピクセルを参照ピクセルとして用いて現在ブロックのピクセル値を予測する。一実施例によれば、参照ピクセルは、現在ブロックの左側境界に隣接したピクセル及び/又は上側境界に隣接したピクセルであってよい。他の実施例によれば、参照ピクセルは、現在ブロックの周辺ブロックのピクセルのうち、現在ブロックの左側境界から既に設定された距離以内に隣接したピクセルら及び/又は現在ブロックの上側境界から既に設定された距離以内に隣接したピクセルであってもよい。このとき、現在ブロックの周辺ブロックは、現在ブロックに隣接した左側(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)を行う。
前記イントラ予測部252又はインター予測部254から出力された予測値、及び逆変換部225から出力されたレジデュアル値が合算されて復元されたビデオピクチャが生成される。すなわち、ビデオ信号デコーディング装置200は、予測部250で生成された予測ブロックと逆変換部225から取得されたレジデュアルを用いて現在ブロックを復元する。
一方、図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個の矩形ノードに分割される。
図5及び図6には、本発明の実施例に係るイントラ予測方法をより具体的に示す。前述したように、イントラ予測部は、現在ブロックの左側及び/又は上側に位置している復元されたピクセルを参照ピクセルとして用いて現在ブロックのピクセル値を予測する。
まず、図5には、イントラ予測モードで現在ブロックの予測のために用いられる参照サンプルの一実施例を示す。一実施例によれば、参照ピクセルは、現在ブロックの左側境界に隣接したピクセル及び/又は上側境界に隣接したピクセルであってよい。図5に示すように、現在ブロックのサイズがW×Hであり、現在ブロックに隣接した単一参照ライン(line)のピクセルがイントラ予測に用いられる場合、現在ブロックの左側及び/又は上側に位置している最大で2W+2H+1個の隣接ピクセルを用いて参照ピクセルを設定することができる。一方、本発明の更なる実施例によれば、現在ブロックのイントラ予測のために多重参照ラインのピクセルが用いられてもよい。多重参照ラインは、現在ブロックから既に設定された範囲以内に位置しているn個のラインで構成されてよい。一実施例によれば、イントラ予測のために多重参照ラインのピクセルが用いられる場合、参照ピクセルとして設定されるラインを示す別個のインデックス情報がシグナルされてよい。参照ピクセルとして用いられる少なくとも一部の隣接ピクセルがまだ復元されていない場合、イントラ予測部は、既に設定された規則に従う参照サンプルパディング過程を行って参照ピクセルを取得することができる。また、イントラ予測部は、イントラ予測の誤差を減らすために参照サンプルフィルタリング過程を行うことができる。すなわち、隣接ピクセル及び/又は参照サンプルパディング過程によって取得されたピクセルにフィルタリングを行って参照ピクセルが取得できる。イントラ予測部は、このように取得された参照ピクセルを用いて現在ブロックのピクセルを予測する。
次に、図6には、イントラ予測に用いられる予測モードの一実施例を示す。イントラ予測のために、イントラ予測方向を示すイントラ予測モード情報がシグナルされてよい。イントラ予測モード情報は、イントラ予測モードセットを構成する複数のイントラ予測モードのうちいずれか一つを示す。現在ブロックがイントラ予測ブロックの場合、デコーダはビットストリームから現在ブロックのイントラ予測モード情報を受信する。デコーダのイントラ予測部は、抽出されたイントラ予測モード情報に基づいて現在ブロックに対するイントラ予測を行う。
本発明の実施例によれば、イントラ予測モードセットは、イントラ予測に用いられる全てのイントラ予測モード(例えば、総67個のイントラ予測モード)を含むことができる。より具体的に、イントラ予測モードセットは、平面モード、DCモード及び複数の(例えば、65個の)角度モード(すなわち、方向モード)を含むことができる。それぞれのイントラ予測モードは、既に設定されたインデックス(すなわち、イントラ予測モードインデックス)で示されてよい。例えば、図6に示すように、イントラ予測モードインデックス0は平面モードを示し、イントラ予測モードインデックス1はDCモードを示す。また、イントラ予測モードインデックス2~66は、異なる角度モードをそれぞれ示すことができる。角度モードは、既に設定された角度範囲以内の異なる角度をそれぞれ示す。例えば、角度モードは、時計回り方向に45度~-135度の角度範囲(すなわち、第1角度範囲)以内の角度を示すことができる。前記角度モードは12時方向を基準に定義されてよい。このとき、イントラ予測モードインデックス2は、水平対角(Horizontal Diagonal,HDIA)モードを示し、イントラ予測モードインデックス18は、水平(Horizontal,HOR)モードを示し、イントラ予測モードインデックス34は、対角(Diagonal,DIA)モードを示し、イントラ予測モードインデックス50は、垂直(Vertical,VER)モードを示し、イントラ予測モードインデックス66は、垂直対角(Vertical Diagonal,VDIA)モードを示す。
一方、既に設定された角度範囲は、現在ブロックの形態によって個別に設定されてよい。例えば、現在ブロックが長方形ブロックの場合、時計回り方向に45度を超えるか或いは-135度未満の角度を示す広角モードがさらに用いられてよい。現在ブロックが水平ブロックの場合、角度モードは、時計回り方向に(45+offset1)度から(-135+offset1)度までの角度範囲(すなわち、第2角度範囲)以内の角度を示すことができる。このとき、第1角度範囲を外れる角度モード67~76がさらに用いられてよい。また、現在ブロックが垂直ブロックの場合、角度モードは、時計回り方向に(45-offset2)度から(-135-offset2)度までの角度範囲(すなわち、第3角度範囲)以内の角度を示すことができる。このとき、第1角度範囲を外れる角度モード-10~-1がさらに用いられてよい。本発明の実施例によれば、offset1及びoffset2の値は、長方形ブロックの幅と高さ間の比率によって個別に決定されてよい。また、offset1及びoffset2は正数であってよい。
本発明の更なる実施例によれば、イントラ予測モードセットを構成する複数の角度モードは、基本角度モードと拡張角度モードを含むことができる。このとき、拡張角度モードは基本角度モードに基づいて決定されてよい。
一実施例によれば、基本角度モードは、既存HEVC(High Efficiency Video Coding)標準のイントラ予測で用いられる角度に対応するモードであり、拡張角度モードは、次世代ビデオコーデック標準のイントラ予測で新しく追加される角度に対応するモードであってよい。より具体的に、基本角度モードは、イントラ予測モード{2,4,6,…,66}のいずれか一つに対応する角度モードであり、拡張角度モードは、イントラ予測モード{3,5,7,…,65}のいずれか一つに対応する角度モードであってよい。すなわち、拡張角度モードは、第1角度範囲内で基本角度モード間の角度モードであってよい。したがって、拡張角度モードが示す角度は、基本角度モードが示す角度に基づいて決定されてよい。
他の実施例によれば、基本角度モードは、既に設定された第1角度範囲以内の角度に対応するモードであり、拡張角度モードは、前記第1角度範囲を外れる広角モードであってよい。すなわち、基本角度モードは、イントラ予測モード{2,3,4,…,66}のいずれか一つに対応する角度モードであり、拡張角度モードは、イントラ予測モード{-10,-9,…,-1}及び{67,68,…,76}のいずれか一つに対応する角度モードであってよい。拡張角度モードが示す角度は、対応する基本角度モードが示す角度の反対側の角度と決定されてよい。したがって、拡張角度モードが示す角度は、基本角度モードが示す角度に基づいて決定されてよい。一方、拡張角度モードの個数はこれに限定されず、現在ブロックのサイズ及び/又は形態によって更なる拡張角度が定義されてもよい。例えば、拡張角度モードは、イントラ予測モード{-14,-13,…,-1}及び{67,68,…,80}のいずれか一つに対応する角度モードと定義されてもよい。一方、イントラ予測モードセットに含まれるイントラ予測モードの総個数は、前述した基本角度モード及び拡張角度モードの構成によって可変してよい。
上記の実施例において、拡張角度モード間の間隔は、対応する基本角度モード間の間隔に基づいて設定されてよい。例えば、拡張角度モード{3,5,7,…,65}間の間隔は、対応する基本角度モード{2,4,6,…,66}間の間隔に基づいて決定されてよい。また、拡張角度モード{-10,-9,…,-1}間の間隔は、対応する反対側の基本角度モード{56,57,…,65}間の間隔に基づいて決定され、拡張角度モード{67,68,…,76}間の間隔は、対応する反対側の基本角度モード{3,4,…,12}間の間隔に基づいて決定されてよい。拡張角度モード間の角度間隔は、対応する基本角度モード間の角度間隔と同一に設定されてよい。また、イントラ予測モードセットにおいて拡張角度モードの個数は、基本角度モードの個数以下に設定されてよい。
本発明の実施例によれば、拡張角度モードは、基本角度モードに基づいてシグナルされてよい。例えば、広角モード(すなわち、拡張角度モード)は、第1角度範囲以内の少なくとも一つの角度モード(すなわち、基本角度モード)を代替することができる。代替される基本角度モードは、広角モードの反対側に対応する角度モードであってよい。すなわち、代替される基本角度モードは、広角モードが示す角度の反対方向の角度に対応するか、或いは前記反対方向の角度から既に設定されたオフセットインデックスだけ離れた角度に対応する角度モードである。本発明の実施例によれば、既に設定されたオフセットインデックスは1である。代替される基本角度モードに対応するイントラ予測モードインデックスは、広角モードに再びマップされて当該広角モードをシグナルすることができる。例えば、広角モード{-10,-9,…,-1}は、イントラ予測モードインデックス{57,58,…,66}によってそれぞれシグナルされてよく、広角モード{67,68,…,76}は、イントラ予測モードインデックス{2,3,…,11}によってそれぞれシグナルされてよい。このように、基本角度モードのためのイントラ予測モードインデックスが拡張角度モードをシグナルするようにすることにより、各ブロックのイントラ予測に用いられる角度モードの構成が互いに異なっても、同じセットのイントラ予測モードインデックスをイントラ予測モードのシグナリングに用いることができる。したがって、イントラ予測モード構成の変化によるシグナリングオーバーヘッドが最小化し得る。
一方、拡張角度モードが使用されるか否かは、現在ブロックの形態及びサイズのうち少なくとも一つに基づいて決定されてよい。一実施例によれば、現在ブロックのサイズが既に設定されたサイズよりも大きい場合、拡張角度モードが現在ブロックのイントラ予測のために用いられ、そうでない場合、基本角度モードだけが現在ブロックのイントラ予測のために用いられてよい。他の実施例によれば、現在ブロックが正方形以外のブロックである場合、拡張角度モードが現在ブロックのイントラ予測のために用いられ、現在ブロックが正方形ブロックである場合、基本角度モードだけが現在ブロックのイントラ予測のために用いられてよい。
イントラ予測部は、現在ブロックのイントラ予測モード情報に基づいて、現在ブロックのイントラ予測に用いられる参照ピクセル及び/又は補間された参照ピクセルを決定する。イントラ予測モードインデックスが特定角度モードを示す場合、現在ブロックの現在ピクセルから前記特定角度に対応する参照ピクセル又は補間された参照ピクセルが現在ピクセルの予測に用いられる。したがって、イントラ予測モードによって異なるセットの参照ピクセル及び/又は補間された参照ピクセルがイントラ予測に用いられ得る。参照ピクセル及びイントラ予測モード情報を用いて現在ブロックのイントラ予測が行われると、デコーダは、逆変換部から取得した現在ブロックの残差信号を現在ブロックのイントラ予測値と合算して現在ブロックのピクセル値を復元する。
図7は、本発明の一実施例に係るインター予測を示す図である。
前述したように、現在ピクチャ又はブロックをエンコード、デコードする時、他のピクチャ又はブロックから予測できる。すなわち、他のピクチャ又はブロックとの類似性に基づいてエンコード、デコードすることが可能である。他のピクチャ又はブロックと類似の部分を現在ピクチャ又はブロックでは省略したシグナリングでエンコード、デコードすることができ、これについて以下にさらに説明する。ブロック単位の予測をすることが可能である。
図7を参照すると、左側に参照ピクチャ(Reference picture)があり、右側に現在ピクチャ(Current picture)があるが、現在ピクチャ又は現在ピクチャの一部を、参照ピクチャ又は参照ピクチャの一部との類似性を用いて予測することができる。図7の現在ピクチャ中に実線で表した四角形が現在エンコード、デコードするブロックであるとしたとき、参照ピクチャの点線で表した四角形から現在ブロックを予測することができる。この時、現在ブロックが参照すべきブロック(参照ブロック)を示す情報が存在してよく、これは直接シグナルされてもよく、シグナリングオーバーヘッドを減らすためにいずれかの約束によって生成してもよい。前記現在ブロックが参照すべきブロックを示す情報は、モーションベクトル(motion vector)を含むことができる。これは、現在ブロックと参照ブロック間のピクチャ内における相対的な位置を示すベクトルであってよい。図7を参照すると、参照ピクチャの点線で表した部分が存在するが、現在ブロックがどのように移動すれば参照ピクチャの参照すべきブロックへ移動できるかを示すベクトルがモーションベクトルであってよい。すなわち、現在ブロックをモーションベクトルに沿って動けば現れるブロックは、図7の現在ピクチャに点線で表した部分であってよく、この点線で表した部分は、ピクチャ内での位置が参照ピクチャの参照ブロック位置と同一であっよい。
また、前記現在ブロックが参照すべきブロックを示す情報は、参照ピクチャを示す情報を含むことができる。参照ピクチャを示す情報として参照ピクチャリストと参照ピクチャインデックスが含まれてよい。参照ピクチャリストは参照ピクチャを表すリストであり、参照ピクチャリストに含まれた参照ピクチャにおいて参照ブロックを使用することが可能である。すなわち、参照ピクチャリストに含まれた参照ピクチャから現在ブロックを予測することが可能である。また、参照ピクチャインデックスは、使用する参照ピクチャを示すためのインデックスであってよい。
図8は、本発明の一実施例に係るモーションベクトルシグナリング方法を示す図である。
本発明の一実施例によれば、モーションベクトル(motion vector;MV)は、MVP(motion vector predictor)に基づいて生成することが可能である。例えば、下記のように、MVPがモーションベクトルになり得る。
MV=MVP
他の例として、下記のように、モーションベクトルはMVD(motion vector difference)に基づいてもよい。MVPに、正確なモーションベクトルを示すためにMVDを加算することができる。
MV=MVP+MVD
また、ビデオコーディングにおいてエンコーダで決定したモーションベクトル情報をデコーダに伝送し、デコーダは、受信したモーションベクトル情報からモーションベクトルを生成して予測ブロックを決定することが可能である。例えば、前記モーションベクトル情報は、MVPに関する情報、MVDを含むことができる。このとき、モードによって前記モーションベクトル情報の構成要素が異なってよい。例えば、マージモード(merge mode)では前記モーションベクトル情報はMVPに関する情報を含み、MVDを含まなくてよい。また、他の例として、AMVP(advanced motion vector prediction)モードでは、前記モーションベクトル情報はMVPに関する情報を含み、MVDを含むことができる。
MVPに関する情報を決定、送信、受信するために、エンコーダとデコーダは、同じ方法でMVP候補(MVP candidates)を生成することができる。例えば、エンコーダとデコーダは、同じ順序で同じMVP候補を生成することができる。そして、エンコーダは、生成したMVP候補の中から決定したMVPを示すインデックスをデコーダに伝送し、デコーダは、このインデックスに基づき、決定されたMVP及びMVを知ることが可能である。
MVP候補及びMVP候補生成方法は、空間的候補(spatial candidate)、時間的候補(temporal candidate)などを含むことができる。空間的候補は、現在ブロックから一定の位置にあるブロックに対するモーションベクトルであってよい。例えば、現在ブロックと隣接又は非隣接するブロック又は位置に該当するモーションベクトルであってよい。時間的候補は、現在ピクチャと他のピクチャ内のブロックに該当するモーションベクトルであってよい。又は、MVP候補は、アフィンモーションベクトル(affine motion vector)、ATMVP、STMVP、前述のモーションベクトルの組合せ(combination)、前述のモーションベクトルの平均ベクトル、ゼロモーションベクトル(zero motion vector)などを含むことができる。
また、前述の参照ピクチャを示す情報も、エンコーダからデコーダに伝送されてよい。また、MVP候補に該当する参照ピクチャが、参照ピクチャを示す情報に該当しない時、モーションベクトルスケーリング(motion vector scaling)をしてもよい。モーションベクトルスケーリングは、現在ピクチャのPOC(picture order count)、現在ブロックの参照ピクチャのPOC、MVP候補の参照ピクチャのPOC、MVP候補に基づく計算であってよい。
図9は、本発明の一実施例に係るMVD(motion vector difference)シンタックスを示す図である。
MVDは、MVDの符号(sign)と絶対値(absolute value)が分離してコードされてよい。すなわち、MVDの符号と絶対値は別個のシンタックスであってよい。また、MVDの絶対値は、値が直接コードされてもよいが、図9のように、絶対値がNよりも大きいか否かを示すフラグ(flag)を含んでコードされてよい。仮に絶対値がNよりも大きい場合、(絶対値-N)の値が共にシグナルされてよい。図9の例では、abs_mvd_greater0_flagが伝送されてよく、このフラグは、絶対値が0よりも大きいか否かを示すフラグであってよい。仮に、絶対値が0よりも大きくないとabs_mvd_greater0_flagが示した場合、絶対値が0であると決定できる。また、仮に絶対値が0よりも大きいとabs_mvd_greater0_flagが示した場合、追加シンタックスシンタックスが存在してよい。例えば、abs_mvd_greater1_flagが存在でき、このフラグは、絶対値が1よりも大きいか否かを示すフラグであってよい。仮に絶対値が1よりも大きくないとabs_mvd_greater1_flagが示した場合、絶対値が1であると決定できる。仮に絶対値が1よりも大きいとabs_mvd_greater1_flagが示した場合、追加シンタックスが存在してよい。例えば、abs_mvd_minus2が存在できるが、これは(絶対値-2)の値であってよい。前述したabs_mvd_greater0_flag、abs_mvd_greater1_flagから絶対値が1よりも大きいと(2以上として)決定されたので、(絶対値-2)を示す。abs_mvd_minus2が可変長(variable length)に二進化(binarization)される場合、より少ないビットでシグナルするためである。例えば、Exp-Golomb、truncated unary、truncated Riceなどの可変長二進化方法が存在する。またmvd_sign_flagは、MVDの符号を示すフラグであってよい。
この実施例においてコーディング方法をMVDを用いて説明したが、MVD以外の情報も、符号と絶対値に関して分け、絶対値は、絶対値が或る値よりも大きいか否かを示すフラグと、絶対値から前記或る値を引いた値にコードすることが可能である。
また、図9において、[0]と[1]は成分インデックス(component index)を示すことができる。例えば、x-成分、y-成分を示すことができる。
また、図9において、cpIdxは、コントロールポイントインデックス(control point index)を示すことができる。コントロールポイントインデックスは、アフィンモーション予測(affine motion prediction)におけるコントロールモーションベクトルインデックス(control motion vector index)に該当するインデックスであってよい。また、アフィンモーション予測以外の予測方法では、cpIdxを例えば、0のように既に設定された値として使用することができる。
図10は、本発明の一実施例に係るAMVR(adaptive motion vector resolution)シグナリングを示す図である。
本発明の一実施例によれば、モーションベクトル又はMVDを示す解像度(resolution)は、様々であり得る。言い換えると、モーションベクトル又はMVDがコードされる解像度は、様々であり得る。例えば、解像度は、ピクセル(pixel;pel)に基づいて示すことができる。例えば、1/4(quarter)、1/2(half)、1(integer)、2、4ピクセルなどの単位でモーションベクトル又はMVDをシグナルすることができる。例えば、16を示したいとき、1/4単位にすれば64でコードし(1/4*64=16)、1単位にすれば16でコードし(1*16=16)、4単位にすれば4でコードすることができる(4*4=16)。すなわち、次のように値を決定することができる。
valueDetermined=resolution*valuePerResolution
ここで、valueDeterminedは、伝達する値、本実施例ではモーションベクトル又はMVDであってよい。また、valuePerResolutionは、valueDeterminedを[/resolution]単位で示した値であってよい。
このとき、モーションベクトル又はMVDとしてシグナルする値が解像度で割り切れない場合、丸め(rounding)などにより、予測性能が最も良いモーションベクトル又はMVDではなく不正確な値を送ることができる。高い解像度を使用すれば不正確さを下げることはできるが、コードされる値が大きいため多くのビットが使用されることがあり、低い解像度を使用すれば不正確さが上がることがあるが、コードされる値が小さいので少ないビットを使用して済む。
また、前記解像度を、ブロック、CU、sliceなどの単位に個別に設定することが可能である。したがって、単位に合わせて適応的に(adaptive)解像度を適用することができる。
前記解像度は、エンコーダからデコーダにシグナルされてよい。このとき、解像度に対するシグナリングは、前述した可変長に二進化したシグナリングであってよい。このような場合、最小の値(最も前にある値)に該当するインデックスでシグナルする場合、シグナリングオーバーヘッドが減少する。
一実施例として、高解像度(詳細にシグナリング)から低解像度の順にシグナリングインデックスにマッチさせることができる。
図10は、3つの解像度に対するシグナリングを示している。このような場合、3つのシグナリングは、0、10、11でよく、3つのシグナリングのそれぞれが解像度1、解像度2、解像度3に該当し得る。解像度1をシグナルするためには1ビットが必要であり、残りの解像度をシグナルするためには2ビットが必要であるため、解像度1をシグナルする時にシグナリングオーバーヘッドが少ない。図10の例では、解像度1、解像度2、解像度3がそれぞれ1/4、1、4ピクセルである。
以下の発明において、モーションベクトル解像度はMVDの解像度を意味できる。
図11は、本発明の一実施例に係るインター予測関連シンタックスを示す図である。
本発明の一実施例によれば、インター予測方法は、スキップモード(skip mode)、マージモード(merge mode)、インターモード(inter mode)などを含むことができる。一実施例によれば、スキップモードではレジデュアルシグナル(residual signal)が伝送されなくてよい。また、スキップモードにおいてマージモードのようなMV決定方法を用いることができる。スキップモードが使用されるか否かは、スキップフラグ(skip flag)によって決定されてよい。図11を参照すると、cu_skip_flag値によって、スキップモード使用の有無が決定されてよい。
一実施例によれば、マージモードではMVDを使用しなくてよい。モーション候補インデックス(Motion candidate index)に基づいてモーションベクトルを決定することができる。マージモードが使用されるか否かは、マージフラグ(merge flag)によって決定されてよい。図11を参照すると、merge_flag値によって、マージモード使用の有無が決定されてよい。また、スキップモードを使用しない場合にマージモードを使用することが可能である。
スキップモード又はマージモードにおいて一つ以上の候補リスト種類の中から選択的に使用することが可能である。例えば、マージ候補(merge candidate)又はサブブロックマージ候補(subblock merge candidate)を使用することが可能である。また、マージ候補は、空間的隣候補(spatial neighboring candidate)、時間的候補(temporal candidate)などを含むことができる。また、マージ候補は、現在ブロック(CU)全体に対するモーションベクトルを使用する候補を含むことができる。すなわち、現在ブロックに属する各サブブロックのモーションベクトルが同じ候補を含むことができる。また、サブブロックマージ候補は、サブブロックベースの時間的MV、アフィンマージ候補(affine merge candidate)などを含むことができる。また、サブブロックマージ候補は、現在ブロック(CU)のサブブロック別に異なるモーションベクトルを使用することが可能な候補を含むことができる。アフィンマージ候補は、アフィンモーション予測のコントロールポイントモーションベクトルを決定するとき、MVDを使用しないで決定する方法で作ったものであってよい。また、サブブロックマージ候補は、現在ブロックでサブブロック単位にモーションベクトルを決定する方法を含むことができる。例えば、サブブロックマージ候補は、先に言及したサブブロックベースの時間的MVとアフィンマージ候補の他にも、平面MV、回帰ベースMV、STMVPなどを含むことができる。
一実施例によれば、インターモードではMVDを使用することができる。モーション候補インデックスに基づいてMVPを決定し、前記MVP及びMVDに基づいてモーションベクトルを決定することができる。インターモードが使用されるか否かは、他のモードが使用されるか否かによって決定されてよい。また、他の例として、インターモードが使用されるか否かはフラグによって決定されてもよい。図11では、他のモードであるスキップモード及びマージモードを使用しない場合にインターモードを使用する例を示している。
インターモードは、AMVPモード、アフィンインターモードなどを含むことができる。インターモードは、MVP及びMVDに基づいてモーションベクトルを決定するモードであってよい。アフィンインターモードは、アフィンモーション予測のコントロールポイントモーションベクトルを決定する時にMVDを使用する方法であってよい。
図11を参照すると、スキップモード又はマージモードと決定された後に、サブブロックマージ候補を使用するか、或いはマージ候補を使用するかが決定できる。例えば、特定条件を満たす場合に、サブブロックマージ候補を使用するか否かを示すmerge_subblock_flagをパースすることができる。また、前記特定条件は、ブロックサイズと関連した条件であってよい。例えば、幅、高さ、領域などに関する条件であってよく、これらを組み合わせて使用することもできる。図11を参照すると、例えば、現在ブロック(CU)の幅及び高さが特定値以上の時の条件であってよい。merge_subblock_flagをパースする場合には、その値を0と推論(infer)できる。仮にmerge_subblock_flagが1である場合にサブブロックマージ候補を使用し、0である場合にマージ候補を使用することができる。サブブロックマージ候補を使用する場合に、候補インデックスであるmerge_subblock_idxをパースでき、マージ候補を使用する場合に、候補インデックスであるmerge_idxをパースすることができる。この時、候補リストの最大個数が1である場合にはパースしなくてもよい。merge_subblock_idx又はmerge_idxをパッシングしない場合には、0と推論できる。
図11は、coding_unit関数を示しているが、イントラ予測関連内容は省かれたものでよく、図11は、インター予測と決定された場合を示すものであってよい。
図12は、本発明の一実施例に係る空間的隣位置を示す図である。
前述したように、予測を行う際に現在ブロック周辺位置を参照することができる。すなわち、現在ブロック周辺位置に該当するモーション情報を参照することができる。例えば、マージモード又はAMVPモードなどを使用する時、現在ブロック周辺位置に該当するモーション情報に基づいてMVP又はMVを設定することが可能である。前記周辺位置は既に設定されていてよい。また、前記周辺位置が多数あるとき、それらを参照する順序が既に設定されていてもよい。また、周辺位置は空間的隣及び時間的隣を含むことができる。
図12を参照すると、A0、A1、B0、B1、B2に該当する位置が既に設定されていてよい。また、ここでの位置は、ルマ位置を意味できる。現在ブロックの最上端-最左側位置を(xCb,yCb)とするとき、A0、A1、B0、B1、B2はそれぞれ、(xCb-1,yCb+cbHeight)、(xCb-1,yCb+cbHeight-1)、(xCb+cbWidth,yCb-1)、(xCb+cbWidth-1,yCb-1)、(xCb-1,yCb-1)であってよい。このとき、cbWidth、cbHeightはそれぞれ、現在ブロック(current block)の幅と高さであってよい。
本発明の一実施例によれば、マージモードにおいてA1、B1、B0、A0、B2の順に空間的隣を参照することができる。また、空間的隣位置に該当する空間的候補を候補リストに追加することができる。また、空間的候補の他に時間的候補を追加でき、これは空間的候補よりも後に存在してよい。また、時間的候補に該当するモーションベクトルを、コロゲイテッドモーションベクトル(collocated motion vector)と呼ぶことができる。
また、候補リストが満たされていない場合、ゼロモーションベクトル(zero motion vector)を候補リストに追加できる。ゼロモーションベクトルは、モーションベクトルが現在ブロック位置を示すモーションベクトルであってよい。
また、マージ候補リストに、ヒストリーベースのモーションベクトル予測候補(history-based motion vector prediction candidate)、対平均候補(pairwise average candidate)などが含まれてよい。これは、候補リストにおいて空間的候補よりも後に位置することが可能である。前記ヒストリーベースのモーションベクトル予測候補は、保存しておいたモーション情報であってよい。また、保存しておいたモーション情報は、現在ブロック以前にデコードされた(エンコードされた)ブロックに該当するモーション情報であってよい。また、対平均候補は、候補リストに既に追加された候補に基づいて生成する候補であってよい。例えば、対平均候補は、候補リストに既に追加された候補の平均であってよい。
上に説明した現在ブロック周辺位置を参照して候補リストに追加する過程に、モーションベクトルスケーリング過程が含まれてよい。モーションベクトルスケーリングは、参照したモーション情報の参照ピクチャのPOC(picture order count)、現在ブロックを含むピクチャのPOC、現在ブロックの参照ピクチャのPOC、参照したモーション情報などに基づいて行うことができる。
本発明の一実施例によれば、既に設定された空間的隣位置の中からグループを設定することができる。また前記グループの中から既に設定された個数のモーション情報を参照することが可能である。例えば、グループ1の中から既に設定された個数のモーション情報を参照し、グループ2の中から既に設定された個数のモーション情報を参照できる。例えば、前記既に設定された個数は1であってよい。また、グループ内における参照順序が既に設定されていてもよい。また、グループ間の候補追加順序が既に設定されていてもよい。
図12を参照すると、グループ1がA0、A1であり、グループ2がB0、B1、B2であってよい。また、グループ1で使用可能なモーション情報から候補を作り、グループ2で使用可能なモーション情報から候補を作ることができる。また、グループ1からの候補を候補リストに追加し、グループ2からの候補を候補リストに順に追加できる。例えば、AMVPモードで候補リストを説明したように作ることができる。
また、候補リストが満たされていない場合、スケールド候補、時間的候補、ゼロモーションベクトルなどを追加することが可能である。
図13は、本発明の一実施例に係る現在ピクチャ参照を示す図である。
前述したように、現在ブロックを予測するとき、参照ピクチャ内のブロックを参照することができる。本発明の一実施例によれば、前記参照ピクチャが現在ブロックを含むピクチャ、すなわち、現在ピクチャであってよい。したがって、現在ブロックを予測する時に現在ピクチャのブロックを参照することが可能である。このような技術をCPR(current picture referencing)と呼ぶことができる。
一実施例によれば、CPRを使用する場合、現在ピクチャが唯一の参照ピクチャであってよい。この場合、参照ピクチャを示すシグナリングを省略して推論することが可能である。
一実施例によれば、CPRを使用する場合、現在ブロックが参照する参照ブロックを示すモーションベクトルが存在してもよい。一実施例によれば、CPRを使用する場合に参照ブロックの位置が制限されていてよい。例えば、参照ブロックの位置が現在ブロック位置を基準に制限されていてよい。例えば、現在ブロックを含むCTU内側に参照ブロック位置が制限されていてよい。又は、現在ブロックを含むCTUを一部でも含む位置に参照ブロック位置が制限されていてもよい。参照ブロック位置を制限することにより、メモリーの負担を減らすことができる。
本発明の一実施例によれば、現在ブロックがCPRを使用するか否かを示すシグナリングが存在してもよい。一実施例として、このようなシグナリングは現在ブロックを含むより大きい単位でのシグナリングであってよい。例えば、スライス(Slice)又はタイル(Tile)レベルでのシグナリングが可能である。例えば、並列プロセシング(parallel processing)可能なレベルでのシグナリングが可能である。一実施例として、例えば、現在ブロックが参照する参照ピクチャが現在ピクチャである場合、CPRを使用することが可能である。又は、現在ピクチャが唯一の参照ピクチャである場合、CPRを使用することが可能である。また、さらに、現在ブロックがイントラ予測を使用しないブロックである場合にCPRを使用することが可能である。すなわち、例えば、現在ブロックに該当する参照ピクチャが現在ピクチャである場合、イントラ予測を使用しないと、CPRを使用することが可能である。一実施例として、現在ピクチャが唯一の参照ピクチャであることを、CurrPicIsOnlyRefという変数で示すことが可能である。又は、CPRを使用するということは、参照ピクチャが現在ピクチャである場合でよい。又は、CPRを使用するということは、参照ピクチャが現在ピクチャであり、イントラ予測を使用しない場合であってもよい。
本発明の一実施例によれば、CPRを使用するとき、前述したマージモード、AMVPモードなどを用いてモーション情報を示すことが可能である。
また、CPRを使用する場合、現在スライス又はタイルがPスライス又はPタイルに設定されることが可能である。また、CPRを使用する場合、デュアルツリーを使用するということを示すフラグが、デュアルツリーを使用するということを示す値に設定されてよい。デュアルツリーは、ルマに該当するツリーとクロマに該当するツリーが異なり得ることを意味できる。
図13を参照すると、現在ピクチャ内に実線で表した現在ブロックが存在している。また、点線で表した参照ブロックが現在ピクチャ内に存在している。このとき、前記参照ブロック位置を示すモーション情報が存在してよい。図13を参照すると、矢印で表したものが、参照ブロック位置を示すモーション情報であってよい。
また、本発明の一実施例によれば、CPRを使用する場合、候補リスト構成が変わってもよい。例えば、CPRを使用する場合、時間的候補を候補リストに含まなくてもよい。
また、本発明の一実施例によれば、CPRを使用する場合、周辺で参照したモーション情報をスケールしなくてもよい。
図14は、本発明の一実施例に係る空間的隣候補参照方法を示す図である。
本発明の一実施例によれば、現在ブロックがCPRを使用する場合、候補リスト構成方法がCPRを使用しない場合と異なってよい。例えば、現在ブロックがCPRを使用する場合、空間的隣候補追加方法が、CPRを使用しない場合と異なってよい。例えば、現在ブロックがCPRを使用する場合、CPRの参照ブロックの位置し得る範囲を超える位置のモーション情報を参照しなくてもよい。又は、現在ブロックがCPRを使用する場合、CPRの参照ブロックの位置し得る範囲に基づく範囲を超える位置のモーション情報を参照しなくてもよい。前記CPRの参照ブロックの位置し得る範囲は、現在ブロックの属したCTU範囲であってよい。したがって、本発明の一実施例によれば、現在CTUを超える位置からモーション情報を参照しなくてもよい。例えば、現在ブロックが参照ブロックの位置し得る範囲境界と接している場合、既に設定された空間的隣位置が、参照ブロックの位置し得る範囲を外れることがある。特に、図12の既に設定された空間的隣位置を参照すると、現在ブロックが参照ブロックの位置し得る範囲の上端境界又は左側境界に接している場合、多数の既に設定された空間的隣位置が参照ブロックの位置し得る範囲を外れることがある。
図14を参照すると、CTU内側に参照ブロック位置が制限されてよい。一実施例によれば、参照ブロックの位置し得る範囲を外れる位置からのモーション情報を参照しなくてもよい。例えば、現在ブロックが参照ブロックが有し得る範囲の境界に位置している場合、既に設定された空間的隣位置が、参照ブロックの位置し得る範囲を外れることが発生し得る。図14で、現在ブロック周辺に既に設定された空間的隣を、小さい点線の四角形で表示した。このとき、CTUを外れる位置は使用可能でないものと判断できる。
これは、参照ブロックの位置し得る範囲を超える位置を参照すると、その位置のモーション情報は、現在ブロックの参照ブロック又は参照した位置の参照ブロックが制限された範囲を超えないようにするためには、有し得るモーション情報の範囲が狭いためである。例えば、図14において、not availableと表示した部分の参照ブロックも、それの属したCTUを超えてはならない。また、not availableと表示した部分のモーション情報が示す位置が、現在ブロックの参照ブロックが位置し得る範囲を超えないためには、図14では、参照する部分のモーション情報のy成分が0でなければならない。現在ブロックが左側境界に接した場合には、境界を外れる参照する部分のモーション情報のx成分が0でなければならない。また、x成分又はy成分が0であり、残りの成分は0でない状況でも、既に設定されたコーディング順序上、ある成分の符号がいずれか一つ(例えば、マイナス)であるものだけが有効であるか、その符号ではなく他の符号であるとき、MVDを大きくさせる確率が高くなり得る。
参照ブロックが現在CTU内側に制限される場合を挙げてさらに説明すれば、CTU内側だけを参照ブロックとして使用するため、MV間の連関性があまりないだろう。また、仮にマージモードのようにMVD補正が不可能なとき、CTU外のMVがx、y成分の両方もある場合に現在ブロック又は周辺ブロックの参照ブロックはCTU範囲を超えることになる。例えば、現在ブロックがCTU上の境界にあるとき、上側ブロックMVのy成分がある場合に現在ブロック又は周辺ブロックがCTU範囲を超えることになる。
スライス(Slice)全体がCPRになるので、周辺ブロックもイントラ又はCPRを使用したことがある。
仮にタイル(Tile)境界にある場合(或いは、CPRでないスライスにある場合)、周辺がCPRでないインターであることもあるが、その場合には、周辺MVは遠方を示し、CTU外れることがある。また、この周辺MVは、別のピクチャを示すため、連関性が少ないだろう。
したがって、本発明の一実施例によれば、CPRを使用する現在ブロックが参照する空間的隣位置がCPRを使用した場合にのみモーション情報を参照することが可能である。又は、CPRを使用する現在ブロックが参照する空間的隣位置がCPRを使用しない場合、その位置からモーション情報を参照しないことが可能である。
さらに他の実施例によれば、空間的隣位置のモーション情報を現在ブロックに該当する参照ブロックが有し得る範囲にクリッピング(clipping)して参照してもよい。
図14の実施例のように、可能な空間的隣位置を減らす場合、全体候補個数を減らすことが可能である。このような場合、候補インデックスシグナリングを減らすことが可能である。例えば、既に設定された位置の空間的隣候補とゼロモーションベクトル(zero motion vector)が候補リストに追加可能であるか、i)既に設定された位置の空間的隣候補、ii)制限された個数のHMVP候補又は対平均候補、iii)ゼロモーションベクトルが候補リストに追加可能である場合、可能な空間的隣位置が減ると、可能な候補個数が減り得る。この場合、候補インデックスの最大値を減らしてインデックスを二進化したとき、ビット数を減らすことができる。
又は、図14の実施例のように、可能な空間的隣位置を減らす場合、空間的隣候補以降に追加可能な候補が候補リストにおいてより前に追加され得るようにすることにより、前記空間的隣候補以降に追加可能な候補を使用するとき、候補インデックスに該当するビット数を減らすことができる。
図15は、本発明の一実施例に係るブロック位置とモーション候補リスト構成を示す図である。
本発明の一実施例によれば、既に設定された位置でモーション情報を参照するものとして可能な候補個数が少なくてよい。例えば、図14で説明した状況によれば、可能な空間的隣位置が減ってよい。例えば、現在ブロックが、参照ブロックが有し得る範囲の上端境界又は左側境界に接して存在する場合、可能な候補個数が少なくなり得る。この場合、デコーダ及びエンコーダで当該空間的隣を参照して使用可能か否かを把握しなくても(例えば、当該空間的隣位置がイントラ予測を使用したか或いはインター予測を使用したか把握しなくても)、当該空間的隣に該当する候補はないと判断できる。また、この場合、候補リストにおいてゼロMVが入る位置を前の方に繰り上げることができる。
したがって、本発明の一実施例によれば、候補インデックスからそれがゼロMVを示すかを判断できる場合があり得る。例えば、空間的隣位置のうち一部が現在ブロック位置及び隣として参照できる範囲によって除外される場合、残りとして可能な全ての候補個数以上のインデックスであればゼロモーションベクトルであり得る。例えば、空間的隣候補の次にゼロモーションベクトルが追加される場合に、可能な空間的隣候補個数以上のインデックスであれば、ゼロモーションベクトルと判断できる。例えば、空間的隣位置の一部が、現在ブロック位置及び隣として参照できる範囲によって除外される場合、残った空間的隣位置がM個のとき、0から始まるインデックス値がMであれば、空間的隣候補の次に追加される候補であると判断でき、空間的隣候補の次にゼロMVが来る場合、ゼロMVであることが判断できる。
例えば、図15においてAと表示したブロックの場合のように、現在ブロックが、参照ブロックの位置し得る範囲の左側境界に接している場合があり得る。この場合、図14で説明したように、参照ブロックの位置し得る範囲を外れる位置のモーション情報を参照しないと、現在ブロックの左側位置が使用不可能になる。したがって、左側位置を除外した位置だけが使用可能である。又は、この場合、図14で説明したように、参照ブロックの位置し得る範囲を外れる位置のモーション情報を参照しないと、図12で説明したA0、A1、B2位置が使用不可能になる。したがって、B0とB1だけが使用可能である。一実施例として、マージモードの場合、B0、B1の両方を使用可能であってよく、AMVPモードの場合、B0、B1のいずれか一方だけ使用可能であってよい。したがって、マージモードの場合、0からインデックスが2であれば、空間的隣候補の次に来る候補であることが判断できる。また、AMVPモードである場合、0からインデックスが1であれば、空間的隣候補の次に来る候補であることが判断できる。すなわち、空間的隣候補の次にゼロMVが来る場合に、インデックスによってゼロMVであることが判断できる。
また、図15においてBと表示したブロックの場合のように、現在ブロックが、参照ブロックの位置し得る範囲の上端境界に接している場合があり得る。この場合、図14で説明したように、参照ブロックの位置し得る範囲を外れる位置のモーション情報を参照しないと現在ブロックの上端位置が使用不可能になる。したがって、現在ブロックの上端位置を除外した位置だけが使用可能である。又は、このような場合、図14で説明したように、参照ブロックの位置し得る範囲を外れる位置のモーション情報を参照しないと、図12で説明したB0、B1、B2位置が使用不可能になる。したがって、A0とA1だけが使用可能である。一実施例として、マージモードの場合、A0、A1の両方が使用可能であってよく、AMVPモードの場合、A0、A1のいずれか一方だけが使用可能であってよい。したがって、マージモードの場合、0からインデックスが2であれば、空間的隣候補の次に来る候補であることが判断できる。また、AMVPモードの場合、0からインデックスが1であれば、空間的隣候補の次に来る候補であることが判断できる。すなわち、空間的隣候補の次にゼロMVがくる場合にインデックスによってゼロMVであることが判断できる。
図15を参照すると、現在CTU範囲に参照ブロック位置が制限され、現在CTUを外れる位置のモーション情報を参照しない場合のAMVP候補リスト構成を示している。現在ブロックが、図15のA又はBのようにCTU左側境界又は上端境界に接している場合、空間的隣候補個数が最大で1個可能であり、残りの候補はゼロMVで満たすことができる。例えば、AMVP候補リストの構成時に、A0、A1のうち一つの位置と、B0、B1、B2のうち一つの位置を空間的隣候補として使用できる。したがって、図15のAブロックのように現在ブロックが左側境界に接している場合、B0、B1のうち一つの位置を空間的隣候補として使用可能である。図15のBブロックのように現在ブロックが上側境界に接している場合、A0、A1のうち一つの位置を空間的隣候補として使用可能である。したがって、候補インデックスが1の場合には、MVPがゼロMVであると判断できる。
本発明の一実施例によれば、候補インデックスによりゼロMVを示すことを判断すれば、図18~図22で説明する実施例などを行うことが可能である。例えば、MVDコーディングに変化を与えることができる。例えば、特定の場合に、MVD成分の符号をシグナリング伝送及びシンタックスパーシング無しで決定することが可能である。
図16は、本発明の一実施例に係るブロック位置とモーション候補リスト構成を示す図である。
本発明の一実施例によれば、ピクチャを外れる位置のモーション情報を参照できなくてもよい。これは、CPRを使用する場合とCPRを使用しない場合をいずれも含むことができる。
本発明の一実施例によれば、CPRにおいて参照ブロックが有し得る位置はピクチャ内側であってよい。又は、本発明の一実施例によれば、CPRにおいて参照ブロックが有し得る位置は、ピクチャ内側を含む領域であってもよい。
図16を参照すると、現在ブロックがピクチャ境界に接している場合、空間的隣位置が制限されてよい。ピクチャを外れる位置のモーション情報を参照できないわけである。例えば、現在ブロックがピクチャの左側境界に接している場合(図16でAと表示したブロックの場合)、現在ブロックの左側位置を参照できない。また、現在ブロックがピクチャの上端境界に接している場合(図16でBと表示したブロックの場合)、現在ブロックの上端位置を参照できない。
したがって、この場合、二進化の最大値を減らしたり或いはゼロMVであると判断することが可能である。
前述したように、仮にCPRを使用する場合、時間的候補、スケールド候補などを使用しなくてもよい。
まず、CPRを使用し、AMVPモードを使用する場合では、本実施例のように、現在ブロックがピクチャ境界に隣接している場合、可能な空間的隣位置が制限されてよい。特に、左側境界又は上端境界に隣接している場合、それぞれ、現在ブロックの左側位置と現在ブロックの上端位置のモーション情報が参照できなくなる。したがって、AMVP候補リスト構成するとき、使用可能な空間的候補は最大で1個になり得る。仮に候補インデックス(最大候補個数が2の場合にフラグであってもよい。)が示す値が1である場合(候補インデックスが0から始まる場合)、その候補インデックスに該当するモーションベクトルはゼロモーションベクトルであると判断できる。
マージモードを使用する場合では、本実施例のように現在ブロックがピクチャ境界に隣接している場合、可能な空間的隣位置が制限されてよい。特に、左側境界又は上端境界に隣接している場合、それぞれ、現在ブロックの左側位置と現在ブロックの上端位置のモーション情報を参照できなくなる。したがって、図12の実施例によれば、参照可能な位置は最大で2個であってよい。したがって、マージ候補インデックスが参照可能な最大個数以上であるケースに該当するモーションベクトルは、空間的隣候補から来たものでないと判断できる。
仮にCPRを使用するマージモードにおいて空間的隣候補とゼロMVだけを使用する場合には、上のような場合、ゼロMVであるということが、候補インデックスから判断できる。しかし、CPRマージモードにおいてゼロMVは無意味であり得るので、(可能な空間的隣候補個数-1)に、可変長(variable length)である候補インデックスの最大値を設定することができる。このようになれば、或るインデックス値のビット数を減らすことができる。
他の実施例として、CPRを使用するマージモードにおいて空間的隣候補、HMVP候補、対平均候補などを候補リストに含むことができる。この時、仮に上に説明した実施例のように、空間的隣候補の可能な最大個数が制限されると、可能な対平均候補個数も減り得る。空間的隣候補の組合せが減り得るためである。仮に、図12及び図16のような実施例において、可能な空間的隣候補位置が2個になると、可能な対平均候補個数は1個になり得る。また、HMVPにおいてヒストリーを保存する空間がリセットされる既に設定された部分があり得る。例えば、CTU行ごとにHMVPにおいてヒストリーを保存する空間がリセットされてよい。これは、並列プロセシングを容易にさせる目的のためである。エンコーダ及びデコーダは、同じヒストリーを維持可能でなければならないためである。したがって、HMVPにおいてヒストリーを保存する空間がリセットされる既に設定された部分では、HMVP候補を候補リストに追加できなくなる。仮にCPRを使用し、空間的隣位置が制限される場合に、HMVPにおいてヒストリーを保存する空間がリセットされると、可能な最大候補個数がさらに減少し得る。例えば、ピクチャの左側境界において空間的隣位置が最大で2個に制限されてよく、CTU行の開始部分においてHMVPでヒストリーを保存する空間がリセットされてよい。この場合、候補リストに最大で2個の空間的隣候補が含まれてよく、HMVP候補が含まれてよい。仮に対平均候補を追加できる場合であっても、対平均を作る時に1個の組合せしか得られない。したがって、対平均候補を追加できる場合、候補が最大で3個及びゼロモーションベクトルであってよい。仮に対平均候補を追加できない実施例では、候補が最大で2個及びゼロモーションベクトルであり得る。これにより、候補インデックスの最大値を既存に比べて減らすことができ、インデックスのビット数を減らすことが可能である。
さらに他の例として、CPRを使用する場合、対平均候補を使用しないことが可能である。CPRを使用する場合には、CPRを使用しない場合に比べて有用なモーションベクトルが制限的であり得るためである。
さらに他の実施例として、現在ブロックがピクチャの左側境界に隣接している場合、HMVP候補を使用しなくてもよい。又は、現在ブロックがHMVPのヒストリーがリセットされる境界に隣接している場合(例えば、リセットされる位置と現在ブロック左側-上端のx座標が同じ場合)、HMVP候補を使用しなくてもよい。仮にCTU行の開始においてHMVPのヒストリーを保存する空間がリセットされる場合、ピクチャの最も左側のCTUをコードする時はヒストリーにモーション情報が多様でないことがある。したがって、ピクチャ左側境界に隣接しているブロックの場合に、モーションベクトルのx成分は0又はプラスでなければならない。また、この時点でヒストリーに保存されたモーションベクトル方向は制限的であるため、左側境界に隣接しているブロックが活用し難いことがある。したがって、現在ブロックがピクチャ左側境界に隣接している場合、HMVP候補を使用しなくてもよい。この場合、上の実施例と組み合わせると、ピクチャの左側境界に隣接しているブロックの場合、マージ候補リストに最大で2個の空間的隣候補、最大で1個の対平均候補及びゼロMVを追加することが可能である。したがって、ゼロMVを追加できる場合、インデックスの最大値を3(インデックスが0から始まる場合)、ゼロMVを追加できない場合、インデックスの最大値を2(インデックスが0から始まる場合)に二進化できる。
本発明の一実施例によれば、現在ブロックがピクチャの左側、右側、上端、下端の境界に隣接しているということが、現在ブロックの座標、現在ブロックの幅、現在ブロックの高さ、現在ピクチャの幅、現在ピクチャの高さなどに基づいて判断可能である。現在ブロックの最上端-最左側座標を(x0,y0)とすることができる。現在ブロックの幅、高さをそれぞれcbWidth、cbHeightとすることができる。現在ピクチャの幅、高さをそれぞれpicWidth、picHeightとすることができる。仮に(x0==0)が真である場合、ピクチャ左側境界に隣接しているとすることができる。仮に((x0+ cbWidth)==picWidth)が真である場合、ピクチャの右側境界に隣接しているとすることができる。仮に(y0==0)が真である場合、ピクチャの上端境界に隣接しているとすることができる。仮に((y0+cbHeight)==picHeight)が真である場合、ピクチャの下端境界に隣接しているとすることができる。
CPRを使用する場合として説明したが、CPRを使用しなくても、時間的モーションベクトルを使用できない場合、又は周辺ブロックの参照ピクチャと現在ブロックの参照ピクチャとが一致する場合、上のような動作を行うことが可能である。
図17は、本発明の一実施例に係る空間的隣候補使用を示す図である。
本発明の一実施例によれば、空間的隣位置を使用できない場合があり得る。仮に既に設定された位置がイントラ予測をした場合に、該当の位置からモーション情報を参照できなくてもよい。したがって、本発明の一実施例によれば、既に設定された空間的隣位置がイントラ予測を使用したか否かによって、可能な空間的隣候補個数を減らすことができる。又は、既に設定された空間的隣位置が参照できるインター予測を使用したか否かによって、可能な空間的隣候補個数を減らすことができる。例えば、既に設定された空間的隣位置がCPRを使用するインター予測を使用したか否かによって、可能な空間的隣候補個数を減らすことができる。
例えば、AMVPモードである場合、空間的隣位置のうち、左側位置が全てイントラ予測したか、或いは上端位置が全てイントラ予測した場合(ピクチャを外れる部分又はデコードされていない位置は除いて考えることができる。)があり得る。又は、AMVPモードである場合、空間的隣位置のうち、左側位置が全て参照できるインター予測をしなかったか、或いは上端位置が全て参照できるインター予測しなかった場合(ピクチャを外れる部分又はデコードされていない位置は除いて考えることができる。)があることができる。すなわち、左側位置の全て或いは上端位置の全てがモーション情報参照が不可能な場合があり得る。この場合、左側位置或いは上端位置のいずれか一方だけ参照可能な場合、可能な空間的隣候補個数は1個であり、インデックスが1である場合、ゼロMVであることが判断できる。又は、左側位置と上端位置の両方とも参照不可能な場合(例えば、図17に示したように、既に設定された位置がいずれもイントラ予測を行った場合)、可能な空間的隣候補個数は0個であり、インデックスが0である場合、ゼロMVであることが判断できる。或いは、左側位置と上端位置の両方とも参照不可能な場合(例えば、図17に示すように、既に設定された位置がいずれもイントラ予測を行った場合)、可能な空間的隣候補個数は0個であり、インデックス伝送及びパーシングを省略できる。そして、インデックスを0、ゼロMVと推論できる。
さらに他の例として、既に設定された空間的隣位置のうち、モーション情報を参照できない場合には、シンタックスパーシング段階でその位置を除外させ、最大候補個数に変化を与えることが可能である。モーション情報を参照できない場合は、当該位置がイントラ予測を使用した場合を含むことができる。又は、モーション情報を参照できない場合は、該当の位置がピクチャを外れたり、或いはコーディング順序上、デコードされていない場合を含むことができる。
仮にマージモードにおいて既に設定された位置で全てモーション情報を参照できない場合を仮定すれば、候補リストに空間的隣候補を追加できなくてもよい。したがって、HMVP候補、対平均候補などを候補として使用することが可能である。このとき、現在ブロックが、前の図面で説明したHMVPのヒストリーを保存する空間をリセットする位置にあると、HMVP候補も追加できなくてもよい。また、対平均候補がHMVP候補よりも前に来るか、或いはHMVP候補を追加できない場合には、対平均候補も出ないだろう。したがって、ゼロMVだけが可能な候補として残り得る。しかし、CPRにおいてゼロMVは無意味であり得る。この場合に、マージモードであることを示すシグナリングを省略(伝送及びパーシング省略)することができる。そして、マージモードを使用しないと推論できる。例えば、マージモードであることを示すシグナリングは、merge_flagであってよい。したがって、本発明の一実施例によれば、CPRを使用する場合、現在ブロック周辺の既に設定された空間的隣位置が全て使用不可で(該当の位置がピクチャを外れた場合、該当の位置がイントラ予測をした場合、該当の位置がCPRを使用しない場合などを含むことができる。)あり、現在ブロックが、HMVPのヒストリーを保存する空間がリセットされる位置である場合、マージモードであることを示すシグナリングを省略し、マージモードを使用しないと推論できる。HMVPのヒストリーを保存する空間がリセットされる位置は、CTU行が始まる位置、或いはHMVP候補を使用しないものと既に設定された位置などであってよい。
さらに他の例として、既に設定された空間的隣位置のうち、1個を除いてモーション情報を参照できない場合があり得る。モーション情報を参照できない場合は、該当の位置がピクチャを外れた場合、該当の位置がイントラ予測をした場合、該当の位置がCPRを使用しない場合などを含むことができる。この場合にも、前の実施例のように、1個の空間的隣候補以外に別の候補が追加されないと、対平均候補を作ることができなくてもよい。また、HMVPのヒストリーを保存する位置がリセットされる部分であるため、HMVP候補を含むことができなくてもよい。したがって、このような位置で候補インデックスの最大値を、既存と異なるようにして二進化できる。例えば、既に設定された空間的隣位置のうち、1個を除いて残りの位置では全てモーション情報を参照できず、HMVPのヒストリーを保存する空間をリセットする部分では、空間的隣候補が最大で1個、HMVP候補が最大で0個、対平均候補が最大で0個作られてよい。したがって、ゼロMVを候補に追加できる実施例では、1ビットのフラグで候補インデックスシグナリングが可能である。しかし、この場合、候補インデックスを伝送しパースすることを省略し、0と推論することが可能である。CPRにおいてゼロMVが無意味であり得るためである。また、ゼロMVを候補に追加できない実施例では、可能な候補1個だけでよく、この場合、候補インデックスを伝送しパースすることを省略し、0と推論することが可能である。
図18は、本発明の一実施例に係るモーションベクトルを示す図である。
本発明の一実施例によれば、コーディング順序によってモーションベクトルが有し得る値が制限されてよい。また、これは、CPRを使用する場合であってよい。例えば、コーディング順序によってモーションベクトルが右下方向を示さなくてもよい。現在ブロックを基準に右側又は下側にあるブロックは、ブロックコーディング順序によればデコードされなかったためである。したがって、本発明の一実施例によれば、CPRを使用するとき、モーションベクトルのx成分が0以上、同時にy成分が0以上でなくてよい。すなわち、CPRを使用するとき、モーションベクトルは、(x成分>=0&&y成分>=0)でなくてよい。
また、図14~図17で説明した実施例によれば、MVPがゼロMVである場合があり得る。特に、MVPがゼロMVであることは、シンタックスパーシング段階で分かる場合がある。この場合には、MVD(MVD)が右下方向を示さなくてもよい。すなわち、MVDは(x成分>=0&&y成分>=0)でなくてもよい。さらに他の実施例として、MVは(x成分>-(現在ブロック幅)&&y成分>(-現在ブロック高さ))でなくてもよい。すなわち、ゼロMVをMVPとして使用する場合に、MVDは(x成分>-(現在ブロック幅)&&y成分>(-現在ブロック高さ))でなくてもよい。したがって、本発明の一実施例によれば、MV又はMVDのx成分値によってy成分値の範囲を限定できる場合があり得る。
一実施例によれば、MVDの成分を分けてコーディングすることができる。例えば、図9で説明したようにMVDをコードすることができる。例えば、成分1と成分2を分けてコードできる。また、例えば、成分1、成分2の順にコードできる。一実施例として、成分1と成分2はそれぞれ、x-成分、y-成分であってよい。下の実施例は、MVPがゼロMVである場合でよい。
本発明の一実施例によれば、成分1が0よりも大きければ、成分2は0よりも小さくてよい。より具体的に、成分1が0よりも大きければ、成分2の絶対値は最小ブロックサイズ以上であってよい。また、成分1が0よりも大きければ、成分2の絶対値は、現在ブロック高さ以上であってよい。
本発明の一実施例によれば、成分1が0であれば、成分2は0でなくてよい。また、成分1が0であれば、成分2は0よりも小さくてよい。より具体的に、成分1が0であれば、成分2の絶対値は最小ブロックサイズ以上であってよい。また、成分1が0であれば、成分2の絶対値は現在ブロック高さ以上であってよい。
本発明の一実施例によれば、成分1が0よりも小さく、絶対値が最小ブロックサイズよりも小さいとき、成分2は0でなくてよい。また、この場合、成分2は0よりも小さくてよい。より具体的に、この場合、成分2の絶対値は、最小ブロックサイズ以上であってよい。また、この場合、成分2の絶対値は、現在ブロック高さ以上であってよい。
本発明の一実施例によれば、成分1が0よりも小さく、絶対値が現在ブロック幅よりも小さいとき、成分2は0でなくてよい。また、この場合、成分2は0よりも小さくてよい。より具体的に、この場合、成分2の絶対値は、最小ブロックサイズ以上であってよい。また、この場合、成分2の絶対値は、現在ブロック高さ以上であってよい。
図18を参照すると、現在ブロックにおいてMVのx-成分値が、図面に図示の通りであり得る。その場合、CPRの参照ブロックを、図18で陰影で表示した領域に入らせることができる。したがって、y-成分が有し得る値の範囲を限定することができる。すなわち、x-成分値によってy-成分の値を限定することが可能である。
図19は、本発明の一実施例に係るMVDシンタックスを示す図である。
図9で説明したように、MVDをx-成分、y-成分に分けてコードすることができる。図19を参照すると、[0]、[1]に該当する値はそれぞれ、x-成分、y-成分であってよい。また、abs_mvd_greater0_flagは、当該成分の絶対値が0よりも大きいか否かを示すフラグであってよい。また、abs_mvd_greater1_flagは、当該成分の絶対値が1よりも大きいか否かを示すフラグであってよい。また、abs_mvd_minus2は、該当成分の絶対値から2を引いた値であってよい。また、mvd_sign_flagは、当該成分の符号を示すフラグであってよい。また、mvd_sign_flagの0値がプラス、1値がマイナスを示すことができる。
図18で説明した実施例を、図19のMVDコーディングシンタックスに反映することができる。
図19で、“zeroMVP”条件は、MVPがゼロMVである場合を示すことができ、CPRを使用する場合を示すことができる。すなわち、MVPがゼロMVであり、CPRを使用する場合に、ゼロMVPが真であってよい。MVPがゼロMVである条件は、図14~図17で説明した実施例に従うことができる。以上の実施例によれば、MVPがゼロMVであることは、現在ブロックの位置又は候補インデックスに基づき得る。
本発明の一実施例によれば、ゼロMVPである場合、x-成分が0であれば、y-成分は0でなくてよい。したがって、この場合、abs_mvd_greater0_flag[1]をパースしなくてもよい。また、この場合、abs_mvd_greater0_flag[1]を、0でないことを示す値と推論できる。また、この場合、abs_mvd_greater0_flag[1]を1と推論できる。
本発明の一実施例によれば、ゼロMVPである場合、x-成分が0であれば、y-成分の絶対値は1よりも大きくてよい。これは、現在ブロック高さが1よりも大きいためであってよい。したがって、この場合、abs_mvd_greater1_flag[1]をパースしなくてもよい。また、この場合、abs_mvd_greater1_flag[1]を、絶対値が1よりも大きいことを示す値と推論できる。また、この場合、abs_mvd_greater1_flag[1]を1と推論できる。CPRがある前の既存MVDコーディングでは、abs_mvd_greater1_flagが存在しないとき、0と推論したため、本実施例と結合すれば、abs_mvd_greater1_flagが存在しないとき、推論する値が条件によって分けられてよい。例えば、abs_mvd_greater1_flag[compIdx]が存在しないとき、abs_mvd_greater0_flag[compIdx]が0であれば、0と推論し、abs_mvd_greater1_flag[compIdx]が1であれば、1と推論できる。又は、例えば、abs_mvd_greater1_flag[compIdx]が存在しないとき、abs_mvd_greater0_flag[compIdx]が0であれば、0と推論できる。又は、abs_mvd_greater1_flag[compIdx]が存在しないとき、ゼロMVPであり、abs_mvd_greater0_flag[!compIdx]が0であれば、1と推論できる
本発明の一実施例によれば、ゼロMVPである場合、x-成分が正数であるか或いは0であれば、y-成分は負数であってよい。したがって、この場合、y-成分のmvd_sign_flagをパースしなくてもよい。また、この場合、mvd_sign_flagを、負数を示す値と推論できる。この場合、mvd_sign_flagを1と推論できる。したがって、ゼロMVPであり、mvd_sign_flag[0]が0である場合、mvd_sign_flag[1]をパースせず、1と推論できる。また、ゼロMVPであり、abs_mvd_greater0_flag[0]が0である場合、mvd_sign_flag[1]をパースせず、1と推論できる。
また、CPRがある前の既存にmvd_sign_flagが存在しない場合、0と推論したことがあり得る。しかし、既存にmvd_sign_flagが存在しない場合は(図9の実施例を参照)、当該成分の絶対値が0である場合しかなかっただろう。したがって、本発明の実施例と結合して、mvd_sign_flagが存在しない場合に1と推論するように統一できる。また、他の例としては、条件によって、mvd_sign_flagを推論する値が異なってもよい。例えば、ゼロMVP&&(mvd_sign_flag[0]==0||abs_mvd_greater0_flag[0]==0)の場合、1と推論し、そうでない場合、0と推論できる。
図20は、本発明の一実施例に係るモーションベクトルを示す図である。
本発明の一実施例によれば、参照ブロックの位置し得る範囲によってモーションベクトルが有し得る値が制限されてよい。また、これは、CPRを使用する場合であってよい。例えば、参照ブロックの位置し得る範囲を外れないようにモーションベクトルが設定されてよい。
例えば、現在ブロックが、参照ブロックが位置し得る範囲の境界に隣接している場合、モーションベクトルは、隣接している境界の反対方向であってよい。すなわち、現在ブロックが参照ブロックの位置し得る範囲の左側境界又は右側境界に隣接している場合、x-成分はそれぞれ、0以上、0以下であってよい。また、現在ブロックが参照ブロックの位置し得る範囲の上端境界又は下端境界に隣接している場合、y-成分はそれぞれ、0以上、0以下であってよい。また、一実施例として、参照ブロックの位置し得る範囲は、現在ブロックの属したCTU範囲であってよい。
また、図14~図17で説明した実施例によれば、MVPがゼロMVである場合があり得る。特に、MVPがゼロMVであることは、シンタックスパーシング段階で分かる場合がある。この場合、モーションベクトルに関する上の説明がMVDに適用されてよい。
図20を参照すると、CPRの参照ブロックが有し得る位置が、現在ブロックの属したCTU内に限定されてよい。この場合、現在ブロックがAと表示した位置のように左側境界に隣接している場合、モーションベクトルのx-成分は0以上であってよい。また、現在ブロックがBと表示した位置のように上端境界に隣接している場合、モーションベクトルのy-成分は0以上であってよい。
図21は、本発明の一実施例に係るMVDシンタックスを示す図である。
図9で説明したように、MVDをx-成分、y-成分に分けてコードすることができる。図21を参照すると、[0]、[1]に該当する値はそれぞれ、x-成分、y-成分であってよい。また、abs_mvd_greater0_flagは、当該成分の絶対値が0よりも大きいか否かを示すフラグであってよい。また、abs_mvd_greater1_flagは、当該成分の絶対値が1よりも大きいか否かを示すフラグであってよい。また、abs_mvd_minus2は、当該成分の絶対値から2を引いた値であってよい。また、mvd_sign_flagは、当該成分の符号を示すフラグであってよい。また、mvd_sign_flagの0値がプラス、1値がマイナスを示すことができる。
図20で説明した実施例を、図21のMVDコーディングシンタックスに反映することができる。
図21で、“zeroMVP”条件は、MVPがゼロMVである場合を示すことができ、CPRを使用する場合を示すことができる。すなわち、MVPがゼロMVであり、CPRを使用する場合、ゼロMVPが真であってよい。。MVPがゼロMVである条件は、図14~図17で説明した実施例に従うことができる。以上の実施例によれば、MVPがゼロMVであることは、現在ブロックの位置又は候補インデックスに基づき得る。
図21を参照すると、左側、右側、上端、下端の境界に隣接していることを示す条件をそれぞれ、左側_境界、右側_境界、上端_境界、下端_境界と示している。また、境界に隣接していることは、現在ブロックの座標、現在ブロックの幅、現在ブロックの高さ、参照ブロックの位置として可能な範囲の幅、参照ブロックの位置として可能な範囲の高さなどに基づいて判断できる。例えば、現在ブロックの上端-左側座標を、(x0,y0)と示すことができる。また、現在ブロックの幅及び高さをそれぞれ、cbWidth、cbHeightと示すことができる。また、参照ブロックの位置として可能な範囲の幅及び高さをそれぞれ、rWidth、rHeightと示すことができる。例えば、(x0%rWidth==0)が真であれば、左側境界に隣接しているものであってよい。((x0+cbWidth)%rWidth==0)が真であれば、右側境界に隣接しているものであってよい。(y0%rHeight==0)が真であれば、上端境界に隣接しているものであってよい。((y0+cbHeight)%rHeight==0)が真であれば、下端境界に隣接しているものであってよい。また、一実施例によれば、rWidth、rHeightは、CTU(CTB)幅、高さであってよい。
図20で説明したように、ゼロMVPであり、境界に隣接している場合、MVDの符号が決定され得る場合がある。例えば、ゼロMVPであり、左側_境界である場合、mvd_sign_flag[0]をパースしなくてもよく、プラスを示す値(例えば、0)と推論できる。
また、ゼロMVPであり、右側_境界である場合、mvd_sign_flag[0]をパースしなくてもよく、マイナスを示す値(例えば、1)と推論できる。
また、ゼロMVPであり、上端_境界である場合、mvd_sign_flag[1]をパースしなくてもよく、プラスを示す値(例えば、0)と推論できる。
また、ゼロMVPであり、下端_境界である場合、mvd_sign_flag[1]をパースしなくてもよく、マイナスを示す値(例えば、1)と推論できる。
また、図9、図19、図21では、abs_mvd_greater0_flag、abs_mvd_greater1_flag、abs_mvd_minus2、mvd_sign_flagの順にコードするが、この順序が変わることにより、他の実施例を行うことも可能である。現在ブロック位置、ゼロMVPの有無、参照ブロックの位置し得る範囲、既に知っている他のシンタックス値などに基づき、或るシンタックスをパースしないで推論できる。
図22は、本発明の一実施例に係るMVDシンタックスを示す図である。
図22を参照すると、図18~図21で説明した実施例を結合して行うことができる。これにより、mvd_コーディングに必要なビット数を減らすことができる。
また、本発明の一実施例によれば、ゼロMVPである場合、或る成分のMVDの絶対値が決定されると、MVD値が、可能な範囲を超える参照ブロックを示さないように、MVDの符号をパーシング無しで決定することが可能である。例えば、図9、図19、図21の実施例のように、MVDの符号を決定する前に絶対値を決定できる場合がある。仮に、或る成分の|MVD|が可能な範囲を超える場合、符号をマイナスと決定できる。また、仮に、或る成分の-|MVD|が可能な範囲を超える場合、符号をプラスと決定できる。
図23は、本発明の一実施例に係るブロックとサイズを示す図である。
本発明の一実施例によれば、現在ブロックの幅又は高さが最大幅又は最大高さである場合があり得る。この場合、既に設定された空間的隣位置でモーション情報を参照できなくてもよい。これは、コーディング順序によるものでよい。例えば、現在ブロックの幅が最大幅である場合、現在ブロックの右側位置からはモーション情報を参照できなくてもよい。図12の実施例のような場合、B0からモーション情報を参照できなくてもよい。さらに他の例として、現在ブロックの高さが最大高さである場合、現在ブロックの下端位置からはモーション情報を参照できなくてもよい。図12の実施例のような場合、A0からモーション情報を参照できなくてもよい。
仮に、図23の実施例を図14の実施例と結合すれば、モーション情報を参照できる空間的隣位置を1個に減らすことができる。例えば、左側境界に隣接しており、最大幅である場合、図12のA0、A1、B0、B2からモーション情報を参照できなくてもよい。また、上端境界に隣接しており、最大高さである場合、A0、B0、B1、B2からモーション情報を参照できなくてもよい。したがって、この場合、可能な空間的隣位置が減るので、前述の実施例のように、ゼロMVを判断したり、候補インデックスパーシングを省略したり、又は候補インデックスの最大値を小さく二進化するなどの実施例を行うことが可能である。
図24は、本発明の一実施例に係るマージ候補リスト構成を示す図である。
本発明の一実施例によれば、CPRを使用する場合、マージ候補リスト構成方法は、CPRを使用しない場合と異なってよい。例えば、CPRを使用しない場合にマージ候補リストに追加され得る候補の一部が、CPRを使用する場合にはマージ候補リストに追加されなくてもよい。
一実施例として、CPRを使用する場合にゼロMVを使用しなくてもよい。現在ピクチャ内でゼロMVが示す参照ブロックは現在ブロックになり得るためである。
一実施例として、CPRを使用する場合に時間的MV(コロゲイテッドMV)を使用しなくてもよい。CPRを使用する場合、現在ピクチャ以外のピクチャを参照できなくてもいいためである。
一実施例として、CPRを使用する場合にHMVP候補又は対平均候補を使用しなくてもよい。この場合、前の図面の実施例で説明したように、インデックスシグナリングに変化を与えることが可能である。
一実施例として、CPRを使用する場合、HMVP候補又は対平均候補に基づく候補を使用することが可能である。
一実施例として、CPRを使用する場合、サブブロックマージモードを使用しなくてもよい。サブブロックマージモードは、前述した通りでよい。これにより、CPRを使用する場合、サブブロックマージモードを示すフラグをパースしないで推論することが可能である。
本発明の一実施例によれば、CPRを使用する場合、既に設定された空間的隣位置の集合が、CPRを使用しない場合における既に設定された空間的隣位置の集合と異なってよい。本発明の一実施例によれば、CPRを使用する場合、図12の既に設定された位置でB0及びB1のいずれか一つを使用しなくてもよい。例えば、CPRを使用する場合B0位置からモーション情報を参照しなくてもよい。又は、本発明の一実施例によれば、CPRを使用する場合、図12の既に設定された位置でA0及びA1のいずれか一つを使用しなくてもよい。例えば、CPRを使用する場合、A0位置からモーション情報を参照しなくてもよい。これは、CPRを使用する場合のモーション情報は、相対的に複雑で様々なものを要求しなくて済むためである。又は、CPRを使用する場合、近い位置からのモーション情報が類似であり得るためである。
図25は、本発明の一実施例に係るブロック位置とシンタックスを示す図である。
本発明の一実施例によれば、CPRを使用する場合、AMVPモードでゼロMVをMVPとして使用しなくてもよい。この場合、図15の実施例と結合すれば、現在ブロック位置によって候補リストに空間的候補が1個だけ追加される場合があり得る。また、ゼロMVをMVPとして使用しないと、MVP候補リストには1個の候補だけが存在してもよい。この場合、候補インデックスをパースしなくて済む。また、この場合、候補インデックスを0と推論できる。
図25を参照すると、(a)に、現在ブロックが参照ブロックが有し得る範囲の左側境界又は上端境界に隣接している場合を示している。この場合、前記参照ブロックが有し得る範囲を外れる位置からのモーション情報を参照しなくてもよい。この場合、AMVPモードを使用するとき、ゼロMVをMVPとして使用しない場合、MVP候補として可能なものは最大で1個になり得る。したがって、この場合、図25の(b)のように、候補インデックスを示すmvp_l0_flag及びmvp_l1_flagをパースしなくてもよい。この時、0と推論できる。CPRを使用する場合を、CurrPicIsOnlyRefと示した。またl0とl1はそれぞれ参照リスト0、1を示すことができる。また、CPRを使用する場合、現在ピクチャが唯一の参照ピクチャであるので、参照リスト1個に対してのみMVが存在してよい。この時、MV関連シンタックスも参照リスト1個に対してのみパースすることができる。
図26は、本発明の一実施例に係るHMVPのヒストリーを保存する空間をリセットすることを示す図である。
前述したように、既に設定された位置でHMVPのヒストリーを保存する空間をリセットすることができる。前記HMVPのヒストリーを保存する空間をHMVPテーブルと呼ぶことができる。
本発明の一実施例によれば、CPRを使用する場合と使用しない場合に、前記既に設定された位置が異なってよい。例えば、CPRを使用しない場合に、CTU行の開始でHMVPテーブルをリセットすることができる。また、例えば、CPRを使用する場合に、参照ブロックが存在可能な範囲の開始でHMVPテーブルをリセットすることができる。又は、例えば、CPRを使用する場合、各CTUの開始でHMVPテーブルをリセットすることができる。又は、CPRを使用する場合には、CPRを使用しない場合に比べて、HMVPテーブルをリセットする既に設定された位置がより多く(頻繁に)存在し得る。
CPRを使用する場合、現在ブロックから遠く離れた位置に該当するモーション情報は、現在と連関性が少ないことがあるためである。また、CPRを使用する場合、HMVPテーブルリセットをより頻度に行うことによって、並列プロセシングをより容易にさせることができる。
図26を参照すると、図面中のそれぞれの小さい四角形は、参照ブロックが存在し得る範囲或いはCTU範囲を示すことができる。また、Xで表示した部分が、HMVPテーブルがリセットされる部分であってよい。図26の上側に示したCPRを使用しない場合には、CTU行の開始でHMVPテーブルをリセットすることができる。図26の下側に表示したCPRを使用する場合には、CTUの開始でHMVPテーブルをリセットすることができる。
本発明の一実施例によれば、CPRを使用する場合のMVDコーディング方法は、CPRを使用しない場合のMVDコーディング方法と異なってよい。例えば、CPRを使用しない場合、図9のようなコーディング方法を用いることができる。これは、CPRを使用する場合には、コーディング順序によって可能なMVの範囲がCPRを使用しない場合とは異なり得るためである。
一実施例として、CPRを使用する場合には、x-成分とy-成分を分離してコードする方式を使用しなくてもよい。例えば、ベクトルの絶対値と方向に基づくコーディング方式を用いることができる。
一実施例として、CPRを使用する場合には、MVPがゼロMVのとき、MVが示す基準点が既存(現在ブロックの上端-左側からのベクトル)と異なってよい。
一実施例として、CPRを使用する場合には、図9、図19、図21で説明したのとは異なるシンタックスを使用することができる。例えば、絶対値が或る値よりも大きいか否かを示すフラグにおいて、或る値がCPRを使用する場合には、使用しない場合と異なってよい。これにより、絶対値から或る値を引いた値のシグナリングができる。例えば、前述の実施例において、絶対値が1よりも大きいか否かを示すフラグがあったとする。例えば、CPRを使用する場合には、絶対値が最小ブロックサイズよりも大きいか否かを示すフラグがあり得る。又は、CPRを使用する場合には、現在ブロックの幅又は高さよりも大きいか否かを示すフラグを使用することができる。例えば、CPRを使用する場合には、x-成分に対しては絶対値が現在ブロック幅よりも大きいか否かを示すフラグを、y-成分に対しては絶対値が現在ブロック高さよりも大きいか否かを示すフラグを使用することができる。
本発明の一実施例によれば、CPRを使用する場合には、共有マージリストを使用しなくてもよい。共有マージリストは、多数のブロック(例えば、コーディングユニット)が同一マージリストを使用する技術であってよい。これは、並列プロセシングを容易にするために共有マージリストを使用することができる。しかし、CPRを使用する場合には、現在ピクチャを参照ブロックとして使用するため、現在ピクチャの該当の部分が再構成(reconstruction)されている必要があり、並列プロセシングを容易にすることがあまり意味がないことがある。またCPRを使用する場合には、共有マージリストを使用すると、正確度が低下したり或いは使用可能な候補数が過度に少なくなることがある。
さらに他の実施例によれば、CPRを使用する場合には、共有マージリストにおいて同一マージリストを使用するブロックをまとめる基準が、CPRを使用しない時と異なってよい。
本発明の一実施例によれば、CPRを使用する場合には。CPRを使用しない場合に使用する方法の一部を使用しなくてもよい。又は、本発明の一実施例によれば、CPRを使用する場合には、CPRを使用しない場合に使用する方法の一部を別に使用することができる。前記CPRを使用しない場合に使用する方法は、予測モードなどを含むことができる。
図27は、本発明の一実施例に係るコーディングユニットシンタックスを示す図である。
前述したCPRは、IBC(intra block copy)又はBC(block copy)と呼ぶこともできる。これにより、CPRモードは、IBCモード又はBCモードと命名できる。
本発明の一実施例によれば、IBCは、独立した予測モードとして存在してよい。すなわち、前述したイントラ予測、インター予測は、それぞれ、MODE_INTRA、MODE_INTERであり得るが、MODE_INTRA及びMODE_INTERと異なるMODE_IBCが存在してよい。また、前の図面に示したように、MODE_INTRA、MODE_INTER、MODE_IBCは、CuPredMode値によって示されてよい。
また、タイルグループは、CU、CTU、PUなどのより上位の単位であってよい。また、タイルグループは、並列プロセシング可能な単位であってよい。
B(bi-predictive)タイルグループは、イントラ予測又はインター予測、IBCなどを使用できるものでよい。また、Bタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ2個まで使用することが可能である。又は、Bタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ1個以上を使用することが可能である。
また、イントラ予測は、IBC技法を含む概念であってよい。イントラ予測は、現在ピクチャだけを参照する予測方法であってよい。また、インター予測は、現在ピクチャ以外のピクチャを参照ピクチャとして参照できる方法であってよい。
P(predictive)タイルグループは、イントラ予測又はインター予測、IBCなどを使用できるものでよい。また、Pタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ1個まで使用することが可能である。又は、Bタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ2個以上使用しないことが可能である。
I(intra)タイルグループは、イントラ予測、IBCを使用するものでよい。また、Iタイルグループは、現在ピクチャ以外のピクチャを参照ピクチャとして参照しないことが可能である。
本発明の一実施例によれば、(tile_group_type !=I || sps_ibc_enabled_flag)の場合、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flagをパースする可能性があってよい。すなわち、(tile_group_type !=I || sps_ibc_enabled_flag)でない場合、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flagの全てをパースしないことが可能である。
また、sps_ibc_enabled_flagは、IBCが用いられるか否かを示す上位レベルのシグナリングであってよい。例えば、sps_ibc_enabled_flagは、IBCが用いられるか否かを示すシーケンスパラメータセット(sequence parameter set)におけるシグナリングであってよい。また、sps_ibc_enabled_flagが0に設定された場合にはIBCを使用しなく、1に設定された場合にはIBCを使用することができる。ここで、sps_ibc_enabled_flagは、IBCモードをBCモードと命名する場合、sps_bc_enabled_flagと表記されてもよい。
また、cu_skip_flag値に基づいてスキップモードが用いられるか否かを決定することができる。仮に、cu_skip_flagが1である場合、スキップモードが用いられてよい。
また、pred_mode_flag又はpred_mode_ibc_flagに基づいて予測モードが決定されることが可能である。すなわち、pred_mode_flag又はpred_mode_ibc_flagに基づき、現在モードがMODE_INTRAなのかMODE_INTERなのかMODE_IBCなのかが決定されてよい。又は、pred_mode_flag又はpred_mode_ibc_flagに基づいてCuPredMode値が決定されてよい。ここで、pred_mode_flagは、予測モードフラグと命名でき、pred_mode_ibc_flagは、BCモードフラグと命名できる。また、pred_mode_ibc_flagは、IBCモードをBCモードと命名する場合、pred_mode_bc_flagと表記されてもよい。
また、tile_group_typeは、タイルグループの種類を示すことができる。タイルグループの種類は、前述したように、Iタイルグループ、Pタイルグループ、Bタイルグループを含むことができる。また、tile_group_type値がI、P、Bである場合、それぞれ、Iタイルグループ、Pタイルグループ、Bタイルグループを示すことができる。
本発明の一実施例によれば、(cu_skip_flag[x0][y0]==0 && tile_group_type !=I))の場合、pred_mode_flagをパースすることが可能である。また、cu_skip_flagが1の場合、pred_mode_flagをパースしなくてもよい。また、tile_group_typeがIの場合、pred_mode_flagをパースしなくてもよい。
本発明の一実施例によれば、((tile_group_type==I && cu_skip_flag[x0][y0]==0)||(tile_group_type !=I &&(cu_skip_flag[x0][y0]||CuPredMode[x0][y0]!=MODE_INTRA))&& sps_ibc_enabled_flag && blockSizeCondition)の場合、pred_mode_ibc_flagをパースすることが可能である。例えば、(tile_group_type==I && cu_skip_flag[x0][y0]==0)の場合、pred_mode_ibc_flagをパースすることが可能である。又は、(tile_group_type !=I &&(cu_skip_flag[x0][y0]||CuPredMode[x0][y0]!=MODE_INTRA))の場合、pred_mode_ibc_flagをパースすることが可能である。又は、(tile_group_type==I && cu_skip_flag[x0][y0]==0)でもなく、(tile_group_type !=I &&(cu_skip_flag[x0][y0]||CuPredMode[x0][y0]!=MODE_INTRA))でもない場合、pred_mode_ibc_flagをパースしないことが可能である。また、sps_ibc_enabled_flagが1である場合、pred_mode_ibc_flagをパースでき、sps_ibc_enabled_flagが0である場合、pred_mode_ibc_flagをパースしないことが可能である。また、pred_mode_ibc_flagをパースできるブロックサイズに基づく条件があり得る。図27を参照すると、ブロックサイズ条件を、cbWidthとcbHeightがいずれも32よりも小さい場合と示した。
また、図27を参照すると、CuPredModeがMODE_INTRAである場合にイントラ予測関連シンタックス要素をパースすることが可能である。また、CuPredModeがMODE_INTRAである場合にモーションベクトル関連シンタックス要素をパースしないことが可能である。
また、CuPredModeがMODE_INTRAでない場合にインター予測関連シンタックス要素をパースすることができる。また、CuPredModeがMODE_INTRAでない場合にIBC関連シンタックス要素をパースすることができる。IBC関連シンタックス要素は、モーションベクトル関連シンタックス要素を含むことができる。すなわち、CuPredModeがMODE_IBCである場合、IBC関連シンタックス要素をパースすることができる。IBC関連シンタックス要素は、マージモード関連シンタックス要素、AMVP関連シンタックス要素を含むことが可能である。また、IBCは、MODE_INTERである場合に比べて予測モードがより制限的であり得、パースするシンタックス要素もより少なくてよい。例えば、MODE_IBCである場合には、参照リストL0に対するシンタックス要素だけをパースすることが可能である。さらに他の例として、MODE_IBCである場合には、merge_dataにおいてモード使用の有無を示すフラグの一部をパースしなくてもよい。また、CuPredModeがMODE_INTRAでない場合にインター予測関連シンタックス要素をパースし、IBC関連シンタックス要素をパースすることは、クロマ成分に対するシンタックスをパースしない場合であってよい。又は、CuPredModeがMODE_INTRAでない場合にインター予測関連シンタックス要素をパースし、IBC関連シンタックス要素をパースすることは、ツリータイプ(treeType)がDUAL_TREE_CHROMAでない場合であってよい。
一実施例として、ツリータイプによって、どの成分に対するシンタックスをパースするのか、どの成分に対する処理をするのかなどが判断できる。仮に、ツリータイプがSINGLE_TREEである場合、ルマ成分とクロマ成分がシンタックス要素値を共有できる。また、仮にツリータイプがSINGLE_TREEである場合には、ルマブロックとクロマブロックが同一方法で分割(partitioning)されてよい。仮にツリータイプがDUAL_TREEである場合には、ルマブロックとクロマブロックが個別の方法で分割されることが可能である。また、ツリータイプがDUAL_TREEの場合、DUAL_TREE_LUMA、DUAL_TREE_CHROMAを含むことができる。ツリータイプがDUAL_TREE_LUMAなのかDUAL_TREE_CHROMAなのかによって、ルマ成分に対する処理をするのかクロマ成分に対する処理をするのかが判断可能である。
図28は、本発明の一実施例に係る予測モードシグナリングを示す図である。
本発明の一実施例によれば、pred_mode_flagに基づいて予測モードが示されてよい。また、pred_mode_flagに基づいてCuPredModeが決定されることが可能である。また、pred_mode_flagに基づいて、インター予測なのかイントラ予測なのかを示すことが可能である。
本発明の一実施例によれば、pred_mode_flagが0であれば、CuPredModeはMODE_INTERに設定されてよい。また、pred_mode_flagが1であれば、CuPredModeがMODE_INTRAに設定されてよい。一実施例によれば、pred_mode_flagは、現在CUがインター予測モードなのかイントラ予測モードなのかを示すことが可能である。
仮にpred_mode_flagが存在しない場合、pred_mode_flag又はCuPredModeを推論することが可能である。仮にpred_mode_flagが存在しない場合、pred_mode_flag又はCuPredModeを、どのタイルグループであるかに基づいて推論することが可能である。例えば、Iタイルグループである場合、CuPredModeをMODE_INTRAと推論することが可能である。また、Pタイルグループ又はBタイルグループである場合、CuPredModeをMODE_INTERと推論することが可能である。
本発明の一実施例によれば、pred_mode_ibc_flagに基づいて予測モードが示されてよい。また、pred_mode_ibc_flagに基づいてCuPredModeが決定されることが可能である。また、pred_mode_ibc_flagに基づいてIBCモードなのか否かを示すことが可能である。
本発明の一実施例によれば、pred_mode_ibc_flagが0である場合、CuPredModeはMODE_INTERに設定されてよい。また、pred_mode_ibc_flagが1である場合、CuPredModeはMODE_IBCに設定されてよい。又は、pred_mode_ibc_flagが0である場合、CuPredModeはMODE_IBCでない値に設定されてよい。
仮にpred_mode_ibc_flagが存在しない場合、pred_mode_ibc_flag又はCuPredModeを推論することが可能である。仮にpred_mode_ibc_flagが存在しない場合、pred_mode_ibc_flag又はCuPredModeを、どのタイルグループかに基づいて推論することが可能である。例えば、Iタイルグループである場合、CuPredModeをMODE_INTRAと推論することが可能である。また、Pタイルグループ又はBタイルグループである場合、CuPredModeをMODE_INTERと推論することが可能である。
本発明において、タイルグループとしたものは、タイルグループの他に、スライス又は他の並列プロセシング可能な単位に代替されてもよい。
本発明の一実施例によれば、IBCを使用する場合にスキップモードを使用することが可能である。例えば、Iタイルグループに対してIBCを使用する場合にスキップモードを使用することが可能である。例えば、Iタイルグループに対してIBCを使用するCUに対してスキップモードを使用することが可能である。しかし、図27及び図28で説明したシンタックス及びシグナリング方法においてこれを支援できない場合がある。例えば、IタイルグループにおいてIBCモードであり且つスキップモードである場合を仮定することができる。その場合、sps_ibc_enabled_flagは1であってよい。また、cu_skip_flagをパースすることができる。このとき、cu_skip_flagの値は1(スキップモードを使用することを示す値)であってよい。また、cu_skip_flagが1である場合或いはIタイルグループに対してpred_mode_flagをパースしなくてもよい。その場合、CuPredModeをIタイルグループに対してMODE_INTRAと推論することが可能である。また、Iタイルグループであり、cu_skip_flagが1である場合、pred_mode_ibc_flagをパースしなくてもよい。その場合、CuPredModeをIタイルグループに対してMODE_INTRAと推論することが可能である。したがってIBCを使用するにもかかわらず、CuPredModeをMODE_IBCと示すことができない状況が発生し得る。
図29は、本発明の一実施例に係る予測モードシグナリングを示す図である。
図29のpred_mode_flag及びpred_mode_ibc_flagに関する説明は、図27及び図28を参照できる。図29の実施例は、図28で説明した問題を解決するためのものでよい。
本発明の一実施例によれば、cu_skip_flagに基づいてCuPredModeが推論されることが可能である。また、どのようなタイルグループなのかに基づいてCuPredModeが推論されることが可能である。例えば、Iタイルグループである場合、cu_skip_flagに基づいてCuPredModeを推論することが可能である。例えば、Iタイルグループであり、cu_skip_flagが0である場合、CuPredModeをMODE_INTRAと推論することが可能である。また、Iタイルグループであり、cu_skip_flagが1である場合、CuPredModeをMODE_IBCと推論することが可能である。また、cu_skip_flagが0と1である場合は、それぞれ、スキップモードを使用しないことと使用することを示すことができる。また、前記実施例は、pred_mode_flag又はpred_mode_ibc_flagが存在しない場合に行うことができる。
また、このとき、cu_skip_flagに基づき、CuPredModeを他の値に設定する過程無しで設定することが可能である。また、このとき、cu_skip_flagに基づき、CuPredModeを他の値に設定する過程無しでMODE_IBC又はMODE_INTRAに設定することが可能である。例えば、Iタイルグループであり、cu_skip_flagが1である場合、CuPredModeを直接にMODE_IBCに設定することが可能である。また、Iタイルグループであり、cu_skip_flagが0である場合、CuPredModeを直接にMODE_INTRAに設定することが可能である。同様に、上述の実施例は、pred_mode_flag又はpred_mode_ibc_flagが存在しない場合に行うことができる。
また、タイルグループの種類及びcu_skip_flagに基づいて設定するCuPredMode推論値があり得、cu_skip_flagではなくタイルグループの種類のみに基づいて設定するCuPredMode推論値があり得る。例えば、タイルグループの種類及びcu_skip_flagに基づいてCuPredModeをMODE_INTRA及びMODE_IBCと推論できる。また、タイルグループの種類に基づいてCuPredModeをMODE_INTERと推論できる。
IBCでない既存イントラ予測は、スキップモードを使用しなくてもよい。したがって、スキップモードを使用するとシグナルされた場合、IBC又はインター予測であると判断できる。また、スキップモードを使用するとシグナルされ、イントラ予測(IBCを含む。)のみを使用するタイルグループの場合には、IBCであると判断できる。
図29を参照すると、pred_mode_flagが存在しない場合、CuPredModeを推論できる。仮にIタイルグループであり、cu_skip_flagが0である場合、MODE_INTRAと推論できる。仮にIタイルグループであり、cu_skip_flagが1である場合、MODE_IBCと推論できる。仮にPタイルグループであるか或いはBタイルグループである場合、MODE_INTERと推論できる。
また、図29を参照すると、pred_mode_ibc_flagが存在しない場合、CuPredModeを推論できる。仮にIタイルグループであり、cu_skip_flagが0である場合、MODE_INTRAと推論できる。仮にIタイルグループであり、cu_skip_flagが1である場合、MODE_IBCと推論できる。仮にPタイルグループであるか或いはBタイルグループである場合、MODE_INTERと推論できる。
図30は、本発明の一実施例に係る予測モードシグナリングを示す図である。
図30のpred_mode_flag及びpred_mode_ibc_flagに関する説明は、図27及び図28を参照できる。図30の実施例は、図28で説明した問題を解決するためのものでよい。
一実施例として、sps_ibc_enabled_flagに基づいてCuPredMode又はpred_mode_flag又はpred_mode_ibc_flagを推論する方法が異なってよい。
一実施例として、sps_ibc_enabled_flagが1である場合に、図29で説明した推論方法を使用することが可能である。また、sps_ibc_enabled_flagが0である場合に、図28で説明した推論方法を使用することが可能である。
図30を参照すると、CuPredMode値を推論する場合があり得る。例えば、pred_mode_flag又はpred_mode_ibc_flagが存在しない場合、CuPredMode値を推論することが可能である。本発明の一実施例によれば、sps_ibc_enabled_flagが1であり、Iタイルグループである場合に、cu_skip_flag値に基づいてCuPredModeを推論できる。例えば、sps_ibc_enabled_flagが1である場合に、Iタイルグループであり、cu_skip_flag値が0であれば、CuPredModeをMODE_INTRAに設定できる。また、sps_ibc_enabled_flagが1である場合に、Iタイルグループであり、cu_skip_flag値が1であれば、CuPredModeをMODE_IBCに設定できる。また、sps_ibc_enabled_flagが1である場合に、Pタイルグループであるか或いはBタイルグループであれば、CuPredModeをMODE_INTERに設定できる。また、sps_ibc_enabled_flagが0である場合に、Iタイルグループであれば、CuPredModeをMODE_INTRAに設定できる。また、sps_ibc_enabled_flagが0である場合に、Pタイルグループであるか或いはBタイルグループであれば、CuPredModeをMODE_INTERに設定できる。
図31は、本発明の一実施例に係るコーディングユニットシンタックスを示す図である。
本発明の一実施例によれば、Iタイルグループである場合、pred_mode_ibc_flagをパースすることができる。この場合、図28で説明した問題を解決することができる。また、Iタイルグループであり、sps_ibc_enabled_flagが1である場合、pred_mode_ibc_flagをパースすることができる。すなわち、IタイルグループでIBCモードを使用し、スキップモードを使用する場合にもpred_mode_ibc_flagを設定してMODE_IBCを示すことができる。
図31を参照すると、(tile_group_type==I)である場合、sps_ibc_enabled_flagが1であり、ブロックサイズと関連した条件を満たせばpred_mode_ibc_flagをパースしている。
図32は、本発明の一実施例に係る予測モードシグナリングを示す図である。
本発明の一実施例によれば、pred_mode_flagが存在しない場合、pred_mode_flagを推論することができる。エンコーダは、現在ブロックの上位レベルグループの種類によって現在ブロックのpred_mode_flagが推論され得るようにすることにより、現在ブロックのpred_mode_flagをビットストリームに記載することを省略し、圧縮効率を上げることができる。例えば、エンコーダは、現在ブロックの属したタイルグループがIタイルグループであり、現在ブロックの予測モードがイントラ予測モードである場合、1の値を示す現在ブロックのpred_mode_flag値をビットストリームに記載することを省略することができる。エンコーダは、現在ブロックの属したタイルグループがB又はPタイルグループであり、現在ブロックの予測モードがインター予測モードである場合、0の値を示す現在ブロックのpred_mode_flag値をビットストリームに記載することを省略することができる。より具体的に、エンコーダは、現在ブロックの属したタイルグループがB又はPタイルグループであり、現在ブロックの予測モードがスキップモードである場合(例えば、cu_skip_flagの値が1である場合)、0の値を示す現在ブロックのpred_mode_flag値をビットストリームに記載することを省略することができる。
これにより、デコーダは、一実施例として、タイルグループの種類に基づいてpred_mode_flagを推論することができる。例えば、Iタイルグループである場合、pred_mode_flag値を1と推論できる。また、Pタイルグループである場合、pred_mode_flag値を0と推論できる。また、Bタイルグループである場合、pred_mode_flag値を0と推論できる。
また、pred_mode_flagに基づいてCuPredModeをMODE_INTER又はMODE_INTRAに設定することができる。例えば、pred_mode_flagが0である場合、CuPredModeをMODE_INTERに設定できる。また、pred_mode_flagが1である場合、CuPredModeをMODE_INTRAに設定できる。
本発明の一実施例によれば、pred_mode_flag又はpred_mode_ibc_flagに基づいてCuPredModeを設定することが可能である。例えば、pred_mode_ibc_flagが0である場合、pred_mode_flagにも基づいてCuPredModeを設定することが可能である。例えば、pred_mode_ibc_flagが0である場合、pred_mode_flagにも基づき、CuPredModeをMODE_INTER又はMODE_INTRAに設定することが可能である。又は、pred_mode_ibc_flagが0である場合、pred_mode_flagにも基づき、CuPredModeをMODE_IBCでない値に設定することが可能である。図32を参照すると、pred_mode_ibc_flagが0であり、pred_mode_flagが0である場合、CuPredModeをMODE_INTERに設定できる。また、pred_mode_ibc_flagが0であり、pred_mode_flagが1である場合、CuPredModeをMODE_INTRAに設定できる。
本発明の一実施例によれば、pred_mode_ibc_flagにのみ基づいてCuPredModeを設定する場合があり得る。例えば、pred_mode_ibc_flagが1である場合、他のフラグ無しでCuPredModeを設定することができる。例えば、pred_mode_ibc_flagが1である場合、CuPredModeをMODE_IBCに設定できる。
本発明の一実施例によれば、pred_mode_ibc_flagが存在しない場合、pred_mode_ibc_flagを推論することができる。例えば、タイルグループの種類に基づいてpred_mode_ibc_flag値を推論することができる。また、タイルグループの種類及びIBCモード使用可能条件に基づいてpred_mode_ibc_flag値を推論することができる。より具体的に、Iタイルグループである場合、IBCモード使用可能条件に基づいてpred_mode_ibc_flag値を推論できる。例えば、Iタイルグループであり、IBC使用可能条件を満たす場合、pred_mode_ibc_flag値を1と推論できる。1と推論する場合、CuPredModeはMODE_IBC値に設定されてよい。また、Iタイルグループであり、IBC使用可能条件を満たさない場合、pred_mode_ibc_flag値を0と推論できる。又は、Iタイルグループであり、IBC使用可能条件のうち少なくとも一つを満たさない場合、pred_mode_ibc_flag値を0と推論できる。0と推論する場合、CuPredModeは、MODE_IBCでない値に設定されてよい。IBCモード使用可能条件は、sps_ibc_enabled_flag値を含むことができる。また、IBCモード使用可能条件は、ブロックサイズに関連した条件を含むことができる。図32を参照すると、Iタイルグループであり、sps_ibc_enabled_flagが1である場合、pred_mode_ibc_flag値を1と推論することが可能である。このとき、IBCモード使用可能条件が追加され、その条件まで満たす場合、pred_mode_ibc_flag値を1と推論することが可能である。図32で、追加のIBCモード使用条件をブロックサイズ条件と示した。
また、Iタイルグループであり(図32で条件1))、sps_ibc_enabled_flagが0である場合(図32で条件2a))、pred_mode_ibc_flag値を0と推論することができる。また、Iタイルグループであり(図32で条件1))、他のIBCモード使用条件を満たさない場合(図32で条件2b))、pred_mode_ibc_flag値を0と推論できる。
さらに他の実施例として、P又はBタイルグループである場合、pred_mode_ibc_flag値を0と推論できる。また、P又はBタイルグループである場合、タイルグループの種類以外の別の条件無しでpred_mode_ibc_flag値を、既に設定された値と推論できる。
エンコーダは、ビデオ信号のエンコーディング過程で上のような条件が満たされる場合、pred_mode_ibc_flagをビットストリームに記載しなくてもよい。このように、エンコーダは、pred_mode_ibc_flag値をビットストリームに記載しないことにより、ビデオ圧縮効率を上げることができる。
本発明の多数の実施例において推論と表示したものは、設定、誘導(derivation,derive)などと同じ意味であってよい。
本発明の一実施例によれば、ツリータイプは次のように誘導されてよい。
仮に、tile_group_typeがIであり、qtbtt_dual_tree_intra_flagが1である場合、ツリータイプはDUAL_TREE_LUMAに設定されてよい。又は、tile_group_typeがIであり、qtbtt_dual_tree_intra_flagが1であり、ルマ成分を処理する場合、ツリータイプはDUAL_TREE_LUMAに設定されてよい。
仮に、tile_group_typeがIであり、qtbtt_dual_tree_intra_flagが1である場合、ツリータイプはDUAL_TREE_CHROMAに設定されてよい。又は、tile_group_typeがIであり、qtbtt_dual_tree_intra_flagが1であり、クロマ成分を処理する場合、ツリータイプはDUAL_TREE_CHROMAに設定されてよい。
仮に、tile_group_typeがIでないか、或いはqtbtt_dual_tree_intra_flagが0である場合、ツリータイプはSINGLE_TREEに設定されてよい。
一実施例によれば、qtbtt_dual_tree_intra_flagは、デュアルツリーが許容されるか否かを示すシグナリングであってよい。デュアルツリーが許容されるということは、ルマとクロマ成分に対する分離されたコーディングクオドツリーシンタックス構造(separate coding quad tree syntax structure)が存在するものであり得る。より具体的に、qtbtt_dual_tree_intra_flagは、現在ピクチャが唯一の参照ピクチャである場合、デュアルツリーが許容されるか否かを示すシグナリングであってよい。
図33は、本発明の一実施例に係るコーディングユニットシンタックスを示す図である。
本発明の一実施例によれば、クロマ成分の場合、IBCモードを使用しなくてもよい。より具体的に、DUAL_TREE_CHROMAである場合、IBCモードを使用しなくてもよい。
図33を参照すると、ツリータイプがDUAL_TREE_CHROMAでない場合、pred_mode_ibc_flagをパースすることができる。また、ツリータイプがDUAL_TREE_CHROMAである場合、pred_mode_ibc_flagをパースしなくてもよい。一実施例によれば、ツリータイプがDUAL_TREE_CHROMAである場合、CuPredModeをMODE_INTRAと推論できる。
図34は、本発明の一実施例に係るコーディングユニットシンタックスを示す図である。
図34のコーディングユニットシンタックスは、イントラ予測に関連したシンタックスを示すものであってよい。本発明の一実施例によれば、intra_chroma_pred_modeシグナリングが存在し得る。また、intra_chroma_pred_modeに基づいてクロマ成分のイントラ予測モードを決定することができる。
図34を参照すると、ツリータイプがSINGLE_TREEであるか或いはDUAL_TREE_CHROMAである場合、intra_chroma_pred_modeをパースすることが可能である。また、ツリータイプがDUAL_TREE_LUMAである場合intra_chroma_pred_modeをパースしないことが可能である。
図35は、本発明の一実施例に係るクロマ成分のイントラ予測モード誘導を示す図である。
図35を参照すると、IntraPredModeCは、クロマ成分に対するイントラ予測モードであってよい。また、xCb、yCbはクロマコーディングブロックの最上端-最左側サンプル(sample)をルマ位置を基準に示したものでよい。また、IntraPredModeYは、ルマ成分に対するイントラ予測モードであってよい。
本発明の一実施例によれば、IntraPredModeCは、IntraPredModeYに基づいて決定されてよい。また、IntraPredModeCは、IntraPredModeY及びintra_chroma_pred_modeに基づいて決定されてよい。このとき、IntraPredModeYは、現在クロマブロックに該当するルマブロックに該当するモードであってよい。一実施例によれば、或る位置に対するIntraPredModeCに該当するIntraPredModeYを使用する位置が既に設定されていてもよい。一実施例によれば、既に設定された位置は、現在クロマブロックの中央に該当するルマブロック位置であってよい。例えば、(xCb,yCb)位置のIntraPredModeCを誘導(derivation)する時、(xCb+cbWidth/2,yCb+cbHeight/2)位置のIntraPredModeYを参照することができる。又は、(xCb,yCb)位置のIntraPredModeCを誘導する時、既に設定された位置はxCb又はyCbに基づく位置であってよい。
或るIntraPredModeY値に対するIntraPredModeC値は、図35のTable 8-2又はTable 8-3を参照できる。Table 8-2は、CCLMを使用できない場合(又は、sps_cclm_enalbed_flagが0である場合)、Table 8-3は、CCLMを使用できる場合(又は、sps_cclm_enalbed_flagが1である場合)に該当し得る。IntraPredModeYがいずれかの値であるとき、図35でその値に該当するコラム(column)を参照でき、そのコラムにおいてintra_chroma_pred_modeに該当する値がIntraPredModeCになり得る。例えば、IntraPredModeYが1であり、intra_chroma_pred_modeが1である場合、IntraPredModeCは50であってよい。
一実施例によれば、sps_cclm_enalbed_flagは、CCLMが適用され得るか否かを示す上位レベルのシグナリングであってよい。例えば、sps_cclm_enalbed_flagが1である場合、CCLMの適用が可能なものであってよい。また、sps_cclm_enalbed_flagが0である場合、CCLMの適用が不可能なものであってよい。
図35のIntraPredModeC値が81又は82又は83であるものは、CCLMモードに該当し得る。また、図35のsps_cclm_enabled_flagが0のとき、IntraPredModeC値が4であるものは、DMモードに該当し得る。また、図35のsps_cclm_enabled_flagが1のとき、IntraPredModeC値が7であるものは、DMモードに該当し得る。
また、intra_chroma_pred_modeをシグナルするビンストリング(bin string)定義が存在し得る。例えば、DMモードを最も少ないビット数のintra_chroma_pred_modeを用いて示すことができる。例えば、DMモードを1ビットのintra_chroma_pred_modeを用いて示すことができる。
一実施例によれば、sps_cclm_enalbed_flagが0である場合、intra_chroma_pred_mode値4、0、1、2、3を示すビット数は次第に増加したり或いは同一であっよい。一実施例によれば、sps_cclm_enalbed_flagが0である場合、intra_chroma_pred_mode値4、0、1、2、3を示すビンストリングはそれぞれ、0、100、101、110、111であってよい。
一実施例によれば、sps_cclm_enalbed_flagが1である場合、intra_chroma_pred_mode値7、4、5、6、0、1、2、3を示すビット数は次第に増加したり或いは同一であっよい。一実施例によれば、sps_cclm_enalbed_flagが1である場合、intra_chroma_pred_mode値7、4、5、6、0、1、2、3を示すビンストリングはそれぞれ、0、10、1110、1111、11000、11001、11010、11011であってよい。
しかし、説明した実施例によれば、クロマブロックに対するイントラ予測が容易でない場合が発生し得る。特に、クロマブロックに対するイントラ予測モード誘導が容易でない場合が発生し得る。前述したように、クロマブロックがイントラ予測である場合、イントラ予測モードを決定するために該当のルマブロックに対するイントラ予測モードを参照しなければならない場合がある。しかし、仮に該当のルマ位置がイントラ予測をしない場合、又はMODE_INTRAでない場合が発生し得る。例えば、該当のルマ位置がMODE_IBCである場合、該当するルマイントラ予測モードが存在しないことがある。一実施例によれば、SINGLE_TREEである場合には、該当するルマブロックとクロマブロックが同一の予測モードを使用することが可能である。また、DUAL_TREEである場合には、該当するルマブロックとクロマブロックが個別の予測モードを使用することが可能である。また、Iタイルグループである場合、DUAL_TREEを使用することが可能である。また、Iタイルグループである場合、MODE_INTRA又はMODE_IBCを使用することが可能である。したがって、同一位置でDUAL_TREE_LUMAはMODE_IBCを使用し、DUAL_TREE_CHROMAはMODE_INTRAを使用する場合が発生し得る。
図36は、本発明の一実施例に係るクロマ成分のイントラ予測モード誘導を示す図である。
図36の実施例は、図35で説明した問題を解決するための方法であってよい。
本発明の一実施例によれば、IntraPredModeYが存在しない場合、IntraPredModeYを既に設定されたモード(又は、値)に設定できる。したがって、クロマブロックに該当するルマ位置がイントラ予測を使用しない場合又はIBCモードを使用した場合にも、IntraPredModeCを誘導することが可能である。
より具体的に、IntraPredModeYが存在しない場合、IntraPredModeYを平面モード(planer mode、値0)に設定することが可能である。この場合、図35で説明したシグナリング方法において平面モードを少ないビット数を用いてシグナルすることが可能である。
又は、IntraPredModeYが存在しない場合、IntraPredModeYをDCモード(値1)に設定することが可能である。この場合、図35で説明したシグナリング方法においてDCモードを少ないビット数を用いてシグナルすることが可能である。
又は、IntraPredModeYが存在しない場合、IntraPredModeYを垂直モード(vertical mode、値50)に設定することが可能である。この場合、図35で説明したシグナリング方法において垂直モードを少ないビット数を用いてシグナルすることが可能である。
又は、IntraPredModeYが存在しない場合、IntraPredModeYを水平モード(horizontal mode、値18)に設定することが可能である。この場合、図35で説明したシグナリング方法において水平モードを少ないビット数を用いてシグナルすることが可能である。
さらに他の実施例として、IntraPredModeYが存在しない場合、intra_chroma_pred_mode値に該当するIntraPredModeC値は、図35に示していない値に決められてもよい。すなわち、図35で、IntraPredModeY値が存在しない場合のコラムが別に存在してもよい。例えば、intra_chroma_pred_mode4、0、1、2、3に該当するIntraPredModeCはそれぞれ、0、1、50、18であってよい。又は、intra_chroma_pred_mode4、0、1、2、3に該当するIntraPredModeCはそれぞれ、0、50、18、1であってよい。これは、sps_cclm_enabled_flagが0である場合と1である場合のいずれにも適用することが可能である。
さらに他の実施例として、IntraPredModeYが存在しない場合、IntraPredModeCを既に設定された値に設定することが可能である。例えば、IntraPredModeYが存在しない場合、intra_chroma_pred_modeに関係なくIntraPredModeCを既に設定された値に設定することが可能である。また、IntraPredModeYが存在しない場合、intra_chroma_pred_mode値を常に0にシグナルすることが可能である。例えば、IntraPredModeYが存在しない場合、IntraPredModeCを平面モードに設定することが可能である。又は、IntraPredModeYが存在しない場合、IntraPredModeCをCCLMに設定することが可能である。又は、IntraPredModeYが存在しない場合、IntraPredModeCをDMモードに設定することが可能である。また、IntraPredModeYが存在しない場合、図34で説明したintra_chroma_pred_modeをパースしないことが可能である。
さらに他の実施例として、IntraPredModeYが存在しない場合、IntraPredModeYを参照する位置を変更することが可能である。
上の実施例において、IntraPredModeYが存在しない場合は、クロマイントラ予測モードを誘導する時に参照する該当のルマ位置MODE_INTRAでない場合を意味することができる。又は、(xCb,yCb)位置のクロマイントラ予測モードを誘導する時にルマ成分に該当するCuPredMode[xCb+cbWidth/2][yCb+cbHeight/2]がMODE_INTRAでない場合、又はMODE_IBCである場合を意味することもできる。
又は、(xCb,yCb)位置のクロマイントラ予測モードを誘導する時にルマ成分に該当するIntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]が存在しない場合を意味することも可能である。
図36を参照すると、IntraPredModeC[xCb][yCb]を誘導するとき、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]が存在しなければ、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]を、既に設定された値に設定できる。そして、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]及び図35で説明したTableを参照してIntraPredModeCを誘導することができる。
また、IntraPredModeC[xCb][yCb]を誘導するとき、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]が存在する場合、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]及び図35で説明したテーブルを参照してIntraPredModeCを誘導することができる。
本発明の一実施例によれば、クロマブロックを予測するときに該当のルマブロックがIBCモードを使用した場合、予測モードが制限されてよい。より具体的に、クロマブロックをイントラ予測するときに該当のルマブロックがIBCモードを使用した場合、イントラ予測モードが制限されてよい。例えば、この場合、DMモードを使用しないことが可能である。該当するルマブロックとクロマブロックが別個のモードを使用した場合、両者間の類似性が低下することがあるためである。
図37は、本発明の一実施例に係るコーディングユニットシンタックスを示す図である。
本発明の一実施例によれば、クロマブロックに関するモーション情報がルマブロックに関するモーション情報と別個に存在してよい。例えば、クロマブロックがIBCモードを使用する場合、クロマブロックに関するモーション情報がルマブロックに関するモーション情報と別個に存在してよい。
図37を参照すると、ツリータイプがDUAL_TREE_CHROMAである場合、モーション情報関連シンタックス要素をパースすることが可能である。例えば、ツリータイプがDUAL_TREE_CHROMAであり、CuPredModeがMODE_IBCである場合、モーション情報関連シンタックス要素をパースすることが可能である。前記モーション情報関連シンタックス要素は、merge_flag、merge_data中のシンタックス要素、mvp_l0_flag、amvr_4pel_flagなどを含むことができる。
図38は、本発明の一実施例に係るシンタックス構造を示す図である。
本発明の一実施例によれば、ブロックサイズに基づいて予測モードが制限されてもよい。すなわち、ブロックサイズに基づいてCuPredModeが制限的であってもよい。例えば、インター予測が制限されてよい。これは、メモリー帯域幅又は計算複雑度(computational complexity)を下げるためのものでよい。例えば、小さいサイズのブロックで予測モードが制限されてよい。例えば、臨界値(threshold)以下のサイズのブロックで予測モードが制限されてよい。例えば、臨界値は4×4サイズであってよい。すなわち、具体的な実施例において、4×4以下のサイズのブロックでインター予測が使用されなくて済む。
さらに他の実施例として、説明した制限される予測モードは、双予測(bi-prediction)するインター予測であってよい。例えば、臨界値以下のブロックサイズにおいて双予測が使用されなくてもよい。このとき、臨界値は4×8又は8×4以下を示すことができる。例えば、臨界値は(幅+高さ)が12であってよい。仮に双予測が制限される場合、双予測(bi-prediction)を単予測(uni-prediction)に転換する過程が存在することが可能である。又は、双予測が制限される場合、予測方向又はどの参照リストを使用するかを示す値が制限的であってよい。
説明したように、予測モードが制限されてもよく、これにより、効率的なシグナリングのために前の図面で説明したのと異なるシンタックス構造を使用することができる。
本発明の一実施例によれば、MODE_INTRAである場合にはスキップモードを使用しなくてもよい。したがって、MODE_INTRAである場合、cu_skip_flagが0であってよい。したがって、仮にcu_skip_flagが1であれば、MODE_INTRAでないと判断できる。
図38を参照すると、タイルグループタイプがIでないか或いはsps_ibc_enabled_flagが1である場合、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flagをパースすることが可能である。また、このとき、追加の条件を考慮してパースすることができる。すなわち、タイルグループタイプがIであり、sps_ibc_enabled_flagが0である場合には、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flagをパースしなくてもよい。一実施例によれば、CuPredModeは、MODE_INTRA、MODE_INTER、MODE_IBCのいずれか一つの値であってよい。仮にタイルグループタイプがIである場合、可能なCuPredMode値は、MODE_INTRA又はMODE_IBCであってよい。しかし、MODE_IBCが制限された場合、例えば、sps_ibc_enalbed_flagが0である場合、可能なCuPredMode値はMODE_INTRAだけであってよい。したがって、タイルグループタイプがIであり、sps_ibc_enabled_flagが0である場合には、pred_mode_flag、pred_mode_ibc_flagをパースせず、CuPredModeをMODE_INTRAと判断できる。また、前述したように、cu_skip_flagを0と判断できる。
本発明の一実施例によれば、ブロックサイズに基づいてcu_skip_flag、pred_mode_flag、pred_mode_ibc_flagをパースすることができる。
例えば、インター予測が制限されるブロックサイズであり、IBC使用が不可能な場合、cu_skip_flagをパースしなくてもよい。すなわち、インター予測を使用できるブロックサイズであるか或いはIBC使用が可能な場合、cu_skip_flagをパースすることが可能である。仮に、インター予測が制限されるブロックサイズであり、IBC使用が不可能な場合には、CuPredModeをMODE_INTRAと判断できる。この場合、cu_skip_flag値を0と判断、推論できる。一実施例として、インター予測が制限されるブロックサイズは4×4ブロックであってよい。また、IBC使用が不可能な場合は、sps_ibc_enabled_flagが0である場合であってよい。
本発明の一実施例によれば、インター予測が制限されるブロックサイズであれば、pred_mode_flagをパースしなくてもよい。本発明の一実施例によれば、pred_mode_flag値に基づき、CuPredModeがMODE_INTRAなのかMODE_INTERなのかを決定することが可能である。仮に、インター予測が制限されるブロックサイズであれば、pred_mode_flagをCuPredModeがMODE_INTRAを示す値であるものと判断できる。また、CuPredModeは、pred_mode_ibc_flagに基づいて変更されてよい。すなわち、CuPredModeは、pred_mode_flag及びpred_mode_ibc_flagに基づいて決定されてよく、pred_mode_flagにのみ基づいて決定したCuPredModeを、pred_mode_ibc_flagに基づいて変更することができる。一実施例によれば、pred_mode_ibc_flag値によって、CuPredModeがMODE_IBCなのか、pred_mode_flagにのみ基づいて決定した値なのかが決定できる。
仮に、インター予測が制限されないブロックサイズであれば、pred_mode_flagをパースすることが可能である。このとき、追加の条件を考慮することができる。例えば、cu_skip_flag又はタイルグループタイプ(tile group type)に基づき、pred_mode_flagをパースするか否かが決定できる。説明したように、pred_mode_flagは、CuPredModeがMODE_INTRAなのかMODE_INTERなのかを決定する値であり得るが、cu_skip_flag又はタイルグループタイプに基づいてCuPredModeが制限される場合が発生し得るわけである。例えば、タイルグループタイプがIである場合、CuPredModeは、MODE_INTRA値だけか可能である。また、タイルグループタイプがIでない場合、すなわち、タイルグループタイプがP又はBである場合、CuPredModeが、MODE_INTRAもMODE_INTERも可能である。しかし、仮にタイルグループタイプがIでない場合に、cu_skip_flagが1であれば、CuPredModeはMODE_INTER値だけが可能である。したがって、本発明の一実施例によれば、cu_skip_flagが1であるか或いはタイルグループタイプがIである場合には、pred_mode_flagをパースしなくてもよい。したがって、本発明の一実施例によれば、タイルグループタイプがIである場合には、pred_mode_flag又はCuPredModeを、MODE_INTRAを示す値と推論できる。また、タイルグループタイプがP又はBである場合には、pred_mode_flag又はCuPredModeを、MODE_INTERを示す値と推論できる。
一実施例として、インター予測が制限されるブロックサイズは、4×4ブロックであってよい。又は、インター予測が制限されるブロックサイズは、4×4以下のブロックであってもよい。
また、インター予測が制限されるブロックサイズに基づいてpred_mode_ibc_flagをパースすることができる。また、cu_skip_flagに基づいてpred_mode_ibc_flagをパースすることができる。一実施例によれば、インター予測が制限されるブロックサイズであり、cu_skip_flagが1である場合、pred_mode_ibc_flagをパースしなくてもよい。前述したように、インター予測が制限されるブロックサイズではCuPredModeがMODE_INTERでなくてもよい。また、cu_skip_flagが1である場合、CuPredModeがMODE_IBCでなくてもよい。したがって、インター予測が制限されるブロックサイズであり、cu_skip_flagが1である場合、pred_mode_ibc_flag又はCuPredModeをMODE_IBCと判断、推論できる。また、これは、MODE_IBCに設定することが可能な場合であってよい。例えば、sps_ibc_enabled_flagが1である場合、MODE_IBCに設定することが可能なものであってよい。したがって、インター予測が制限されるブロックサイズであり、cu_skip_flagが1である場合、pred_mode_ibc_flag又はCuPredModeを、sps_ibc_enabled_flagによって判断、推論できる。より具体的に、インター予測が制限されるブロックサイズであり、cu_skip_flagが1である場合、pred_mode_ibc_flagをsps_ibc_enabled_flagと推論できる。また、インター予測が制限されないブロックサイズであるか或いはcu_skip_flagが0である場合、pred_mode_ibc_flagをパースすることが可能である。
また、タイルグループタイプがIであり、cu_skip_flagが1である場合、pred_mode_ibc_flagをパースしないことが可能である。また、このとき、pred_mode_ibc_flag又はCuPredModeをMODE_IBCを示す値と判断、推論することが可能である。Iタイルグループにおいて可能なCuPredMode値は、MODE_INTRA、MODE_IBCであるが、MODE_INTRAのときは、スキップモードを使用しないためである。したがって、タイルグループタイプがIであり、cu_skip_flagが0である場合、pred_mode_ibc_flagをパースすることが可能である。
また、タイルグループタイプがIでない場合、CuPredModeがMODE_INTRAであり、インター予測が制限されるブロックサイズでなければ、pred_mode_ibc_flagをパースしなくてもよい。この場合、pred_mode_ibc_flag無しで予測モードを決定できるためである。また、タイルグループタイプがIでない場合、CuPredModeがMODE_INTRAでないか或いはインター予測が制限されるブロックサイズである場合、pred_mode_ibc_flagをパースすることができる。また、このとき、追加の条件を考慮してpred_mode_ibc_flagをパースすることができる。例えば、タイルグループタイプがIでない場合に、CuPredModeがMODE_INTRAであり、インター予測が制限されるブロックであれば、pred_mode_ibc_flagをパースすることが可能である。インター予測が制限されても最終的な予測モードはMODE_INTRA又はMODE_IBCと決定され得るためである。このとき、さらに、cu_skip_flagが0である場合、pred_mode_ibc_flagをパースすることが可能である。
一実施例として、インター予測が制限されるブロックサイズは4×4ブロックであってよい。又は、インター予測が制限されるブロックサイズは4×4以下のブロックであってもよい。
図39は、本発明の一実施例に係るシグナリング値推論方法を示す図である。
図39を参照すると、図38で説明したように、pred_mode_flag又はpred_mode_ibc_flagを推論できる。又は、図38で説明したように、CuPredModeを決定できる。また、図39のpred_mode_flag、pred_mode_ibc_flagはそれぞれ、図38のpred_mode_flag、pred_mode_ibc_flagと同じシグナリングであってよい。
本発明の一実施例によれば、pred_mode_flag値に基づいてCuPredModeをMODE_INTER又はMODE_INTRAと決定できる。この値をMODE_TEMPとすれば、pred_mode_ibc_flag値に基づいてCuPredModeをMODE_TEMP又はMODE_IBCと決定できる。
図38で説明したようにインター予測が制限されるブロックサイズである場合、pred_mode_flagをMODE_INTRAを示す値と推論できる。すなわち、インター予測が制限されるブロックサイズである場合、pred_mode_flagを1と推論できる。図39を参照すると、ブロックサイズが4×4である場合にpred_mode_flag値を1と推論できる。
また、図38で説明したようにインター予測が制限されるブロックサイズであり、スキップモードである場合、pred_mode_ibc_flagをMODE_IBCを示す値と推論できる。これは、MODE_IBCを使用できる場合であってよい。例えば、MODE_IBCを使用できる場合は、sps_ibc_enabled_flagが1である場合であってよい。例えば、インター予測が制限されるブロックサイズであり、スキップモードである場合、pred_mode_ibc_flagをsps_ibc_enabled_flag値と推論できる。図39を参照すると、ブロックサイズが4×4であり、スキップモードである場合に、pred_mode_ibc_flagをsps_ibc_enabled_flag値と推論できる。
図40は、本発明の一実施例に係るシグナリング値推論方法を示す図である。
図38及び図39で、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flag、CuPredModeをパースしたり推論したり或いは決定する方法を説明した。しかし、図39で示した推論方法においてコンフリクト(conflict)がある場合が発生し得る。
例えば、インター予測が制限されるブロックサイズであり、タイルグループタイプがP又はBであるとき、pred_mode_flag値が推論し難い場合がある。図39で、pred_mode_flag値を2つの値のうち一つと推論できるが、2つの場合を全て満足することがある。
また、インター予測が制限されるブロックサイズであり、スキップモードであり、タイルグループタイプがP又はBであるとき、pred_mode_ibc_flag値を推論し難い場合がある。図39で、pred_mode_ibc_flag値を2つの値のいずれか一つと推論できるが、2つの場合を全て満足することがある。
図40は、この問題を解決するための実施例であり得る。
タイルグループタイプがP又はBである場合、可能な予測モードは、MODE_INTRA、MODE_INTER、MODE_IBCが可能である。仮に、このとき、インター予測が制限されるブロックサイズであれば、MODE_INTRA、MODE_INTER、MODE_IBCのうちMODE_INTERを利用できない場合がある。したがって、本発明の一実施例によれば、この場合、pred_mode_flagをMODE_INTRAを示す値と推論することが可能である。MODE_IBC決定は、pred_mode_ibc_flagを用いて行うことができるためである。したがって、次のように整理できる。
仮に、タイルグループタイプがIであるか或いはインター予測が制限されるブロックサイズである場合、pred_mode_flagをMODE_INTRAを示す値と推論できる。また、1)タイルグループタイプがP又はBであり、2)インター予測が制限されるブロックサイズでない場合、pred_mode_flagをMODE_INTERを示す値と推論できる。
タイルグループタイプがP又はBである場合、可能な予測モードは、MODE_INTRA、MODE_INTER、MODE_IBCが可能である。仮に、このとき、インター予測が制限されるブロックサイズであれば、MODE_INTRA、MODE_INTER、MODE_IBCのうちMODE_INTERを利用できない場合がある。また、スキップモードであれば、MODE_INTRA、MODE_INTER、MODE_IBCのうちMODE_INTRAを利用できない場合がある。したがって、タイルグループタイプがP又はBであり、インター予測が制限されるブロックサイズであり、スキップモードである場合、MODE_IBCだけを使用することが可能である。したがって、この場合、pred_mode_ibc_flagを1と推論することが可能である。したがって、次のように整理できる。
仮に、1)タイルグループタイプがIであるか、或いは2)インター予測が制限されるブロックサイズであり、スキップモードである場合、pred_mode_ibc_flagをMODE_IBCを示す値、例えば、1と推論できる。また、i)タイルグループタイプがP又はBであり、ii)インター予測が制限されるブロックサイズでないか或いはスキップモードでない場合、pred_mode_ibc_flagをMODE_IBCを示す値、例えば、0と推論できる。
一実施例として、インター予測が制限されるブロックサイズは、4×4ブロックであってよい。又は、インター予測が制限されるブロックサイズは、4×4以下のブロックであってもよい。
図40は、説明したpred_mode_flag、pred_mode_ibc_flag推論方法を、インター予測が制限されるブロックサイズが4×4である場合の例を挙げて示している。
また、説明した発明において、タイルグループタイプはスライスタイプであってよい。また、スキップモードか否かは、cu_skip_flagから決定されてよい。
図41は、本発明の一実施例に係るinter_pred_idc値と二進化を示す図である。inter_pred_idcはインター予測の類型を示すパラメータであり、インター予測類型パラメータと呼ばれてもよい。
図38で説明したように、ブロックサイズに基づいて双予測が使用されなくてもよい。したがって、本発明の一実施例によって、或るブロックサイズでは可能なインター予測がL0 uni-prediction、L1 uni-prediction、bi-predictionでよく、或るブロックサイズでは可能なインター予測がL0 uni-prediction、L1 uni-predictionでよい。また、どのようなインター予測であるかをinter_pred_idcにより示すことが可能である。また、L0 uni-predictionは、参照リスト0だけを使用するインター予測であってよい。また、L1 uni-predictionは、参照リスト1だけを使用するインター予測であってよい。また、bi-predictionは、参照リスト0と参照リスト1の両方を使用するインター予測であってよい。また、どのようなインター予測であるかはCU別に決定されてよい。L0 uni-prediction、L1 uni-prediction、bi-predictionを示すinter_pred_idc値はそれぞれ、PRED_L0、PRED_L1、PRED_BIであってよい。また、L0 uni-prediction、L1 uni-prediction、bi-predictionを示すinter_pred_idc値はそれぞれ、0、1、2であってよい。
本発明の一実施例によれば、bi-predictionが使用されないブロックサイズの場合には、bi-predictionに該当するinter_pred_idc値が存在しなくてもよい。
また、inter_pred_idcを示すための二進化方法が存在し得る。また、この方法は、bi-predictionが許容されるブロックと許容されないブロックで異なってよい。また、これは、inter_pred_idcをパースする場合に使用するビンストリングであってよい。仮に、bi-predictionが許容される場合、inter_pred_idcとしてL0 uni-prediction又はL1 uni-prediction又はbi-predictionに該当する値が可能であり得る。これを示すために、inter_pred_idcを可変長二進化方法で示すことができる。例えば、L0 uni-prediction、L1 uni-prediction、bi-predictionに該当する値をそれぞれ、00、01、1と示すことができる。又は、L0 uni-prediction、L1uni-prediction、bi-predictionに該当する値をそれぞれ、10、11、0と示すことができる。また、仮に、bi-predictionが許容されない場合、inter_pred_idcとしてL0 uni-prediction又はL1 uni-predictionに該当する値が可能であり得る。したがって、inter_pred_idcを1ビットで示すことができる。例えば、L0 uni-prediction、L1 uni-predictionに該当する値をそれぞれ、0、1と示すことができる。又は、L0 uni-prediction、L1 uni-predictionに該当する値をそれぞれ、1、0と示すことができる。
一実施例によれば、bi-predictionが使用されないブロックサイズは、臨界値以下のブロックサイズであってよい。例えば、臨界値は4×8ブロック又は8×4ブロックであってよい。仮に、4×4インター予測が許容されない場合、bi-predictionが使用されないブロックサイズは、4×8又は8×4ブロックであってよい。また、4×4ブロックは、(幅+高さ==8)であるものと示すことができる。また、4×8又は8×4ブロックは、(幅+高さ==12)であるものと示すことができる。
図41を参照すると、4×8又は8×4ブロックである場合、inter_pred_idcはPRED_L0、PRED_L1に該当する値だけ存在してよい。また、この場合、inter_pred_idcを0又は1と示すことができる。
図42は、本発明の一実施例に係るinter_pred_idc値と二進化を示す図である。
図41で説明したように、inter_pred_idcが示し得る値のセット及びそのシグナリング方法が多数存在し得る。例えば、或るブロックではinter_pred_idcが示し得る値の種類が3つであり、このとき、1乃至2ビットを用いてシグナルできる。また、或るブロックではinter_pred_idcが示し得る値の種類が2つであり、b-ビットを用いてシグナルできる。また、このとき、inter_pred_idcが示し得る値の種類とシグナリングは、ブロックサイズに基づいて変わることが可能である。例えば、bi-predictionが許容されるブロックサイズであるか否かによって、inter_pred_idcが示し得る値の種類とシグナリングが変わることが可能である。
しかし、図41で説明した方法において、或るブロックサイズの場合にinter_pred_idcが示し得る値の種類とシグナリングに曖昧性(ambiguity)がある場合があり得る。例えば、ブロックサイズが4×8又は8×4である場合、(幅+高さ)!=8条件と((幅+高さ==8)||(幅+高さ==12))条件の両方を満足させることがある。このため、エンコーダ、デコーダ間のシグナリング及びビットストリームが不一致する場合が発生し得る。
図42の実施例は、この問題を解決するための方法であり得る。本発明の一実施例によれば、condition1を満たす場合と!condition1を満たす場合に、inter_pred_idcが示し得る値の種類とシグナリング方法が異なってよい。例えば、condition1はbi-predictionが許容されないブロックサイズ条件であってよい。例えば、condition1は4×8又は8×4ブロックである条件であってよい。仮に、bi-predictionが許容されない場合にinter_pred_idcを2ビットを用いてシグナルする場合が発生すると、シグナリングが効率的でないものとなり得る。bi-predictionが許容されない場合にinter_pred_idc値としてPRED_BIを示すことがないわけである。一実施例として、双予測が許容されないブロックサイズ条件は、4×8又は8×4以下のブロックサイズであってよい。したがって、bi-predictionが許容されないブロックサイズは、4×8又は8×4又は4×4であってよい。
図42を参照すると、幅+高さが8又は12である場合、inter_pred_idcとして可能な値は、PRED_L0、PRED_L1であってよい。また、このとき、1ビットでinter_pred_idcを示すことができる。シグナリングは、0又は1であってよい。また、幅+高さが8及び12でない場合、inter_pred_idcとして可能な値は、PRED_L0、PRED_L1、PRED_BIであってよい。また、このとき、1又は2ビットでinter_pred_idcを示すことができる。シグナリングは、00、01、1であってよい。
図43は、本発明の一実施例に係るinter_pred_idc値と二進化を示す図である。
図43は、図41及び図42で説明した問題を解決するための実施例であってよい。また、図43は、図42の実施例で効率性を高めた方法であってよい。前述したように、インター予測が許容されないブロックサイズが存在し得る。図42の実施例で、インター予測が許容されないブロックサイズを考慮しないと、不要な条件チェックが必要となる場合がある。例えば、インター予測が許容されない場合にinter_pred_idc値は意味がなくてもよい。ところが、inter_pred_idcシグナリングにおいてインター予測が許容されない場合の条件をチェックすると、これは意味がないだろう。したがって、本発明の一実施例によれば、インター予測が許容されない場合の条件チェック無しでbi-predictionが許容されない場合の条件チェックをしてinter_pred_idcシグナリング及び値のセットを決定することができる。例えば、インター予測が許容されない場合は、4×4ブロックサイズであってよく、bi-predicitonが許容されない場合は、4×8又は8×4ブロックサイズであってよい。
図43を参照すると、幅+高さが12である場合、inter_pred_idcとして可能な値は、PRED_L0、PRED_L1であってよい。また、このとき、1ビットでinter_pred_idcを示すことができる。シグナリングは0又は1であってよい。また、幅+高さが12でない場合、inter_pred_idcとして可能な値はPRED_L0、PRED_L1、PRED_BIであってよい。また、このとき、1又は2ビットでinter_pred_idcを示すことができる。シグナリングは00、01、1であってよい。
したがって、事実上、図43の実施例において、4×4ブロックの場合には、inter_pred_idc値のセットとシグナリングが図43の2個の列のうち左側(全体では3番目の列)に該当し、これは図42の実施例と異なってよい。
本発明の一実施例によれば、ツリータイプがDUAL_TREE_CHROMAである場合、cu_skip_flagをパースすることが可能である。ツリータイプがDUAL_TREE_CHROMAであれば、ルマブロックとクロマブロックの分割が異なってよく、クロマE該当するものを処理することを示すことができる。また、ツリータイプがDUAL_TREE_CHROMAである場合、MODE_IBCを使用できれば、cu_skip_flagをパースすることが可能である。MODE_IBCを使用できる場合は、sps_ibc_enabled_flagが1である場合であってよい。これは、クロマブロックの予測モードがMODE_IBCである場合、スキップモードを使用できるようにするためである。
上述した本発明の実施例は多様な手段を介して具現される。例えば、本発明の実施例は、ハードウェア、ファームウェア(firmware)、ソフトフェアまたはそれらの組み合わせによって具現される。
ハードウェアによる具現の場合、本発明の実施例による方法は、一つまたはそれ以上のASICs(Application Specific Integrated Circuits)、DSPs(Digital Signal Processors)、DSDPs(Digital Signal Processing Devices)、PDLs(Programmable Logic Devices)、FPGAs(Field Programmable Gate Arrays)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサなどによって具現される。
ファームフェアやソフトウェアによる具現の場合、本発明の実施例による方法は、上述した機能または動作を行うモジュール、手順または関数などの形態で具現される。ソフトウェアコードは、メモリに貯蔵されてプロセッサによって具現される。前記メモリはプロセッサの内部または外部に位置し、既に公知の多様な手段によってプロセッサとデータを交換する。
上述した本発明の説明は例示のためのものであって、本発明が属する技術分野における通常の知識を有する者は、本発明の技術的思想や必須的特徴を変更せずも他の具体的な形態に容易に変更可能であることを理解できるはずである。よって、上述した実施例は全ての面で例示的なものであり、限定的なものではないと理解すべきである。例えば、単一型として説明されている各構成要素は分散されて実施されてもよく、同じく分散されていると説明されている構成要素も結合された形態で実施されてもよい。
本発明の範囲は、上述した詳細な説明よりは後述する特許請求の範囲によって示され、特許請求の範囲の意味及び範囲、そしてその均等概念から導き出される全ての変更または変形された形態が本発明の範囲に含まれると解釈すべきである。