本出願の実施形態の特徴及び技術内容をより詳しく理解するために、以下、図面を参照しながら本出願の実施形態の実現を詳細に説明する。添付された図面はただ説明のために用いられ、本出願の実施形態を限定するものではない。
本明細書に使用される全ての技術的及び科学的用語は、特に定義されない限り、本出願の技術分野に属する当業者が一般的に理解するものと同じ意味を有する。本明細書に使用される用語は、本出願の実施形態を説明するためのものであり、本出願を限定することを意図するものではない。
以下の説明では、「いくつかの実施形態」に係るが、それは全ての可能な実施形態のサブセットを説明するが、「いくつかの実施形態」は、全ての可能な実施形態の同じサブセット又は異なるサブセットであってもよく、矛盾がない限りそれらが互いに組み合わせられてもよいことが理解されることができる。なお、本出願の実施形態に係る用語「第1/第2/第3」は、単に類似のオブジェクトを区別し、オブジェクトの特定の順序を意味するものではないことに留意されたい。本明細書に記載された本出願の実施形態が本明細書に図示又は記載された順序以外の順序で実施され得るように、「第1/第2/第3」は、許可される場合に特定の順序又は優先順位を交換することができる。
ビデオ画像では、一般的に第1の画像コンポーネント、第2の画像コンポーネント及び第3の画像コンポーネントで符号化・復号化ブロック(Coding Block,CB)を示す。第1の画像コンポーネント、第2の画像コンポーネント及び第3の画像コンポーネントは、それぞれ、輝度コンポーネント(luma component)、青彩度コンポーネント(blue chroma component)及び赤彩度コンポーネント(red chroma component)である。具体的に、輝度コンポーネントは一般的に記号Yで示し、青彩度コンポーネントは一般的に記号Cb又はUで示し、赤彩度コンポーネントは一般的に記号Cr又はVで示す。このように、ビデオ画像は、YCbCrフォーマットで示してもよく、YUVフォーマットで示してもよい。
本出願の実施形態を更に詳細に説明する前に、本出願の実施形態に係る名詞及び用語について説明する。本出願の実施形態に係る名詞及び用語は次のような解釈に適用される。
MPEG(Moving Picture Experts Group)、
国際標準化機構(International Standardization Organization、ISO)、
国際電気標準会議(international electrotechnical commission、IEC)、
JVET(joint video exploration team)、
AOM(Alliance for Open Media)、
次世代ビデオ符号化・復号化規格H.266/多用途ビデオ符号化・復号化(versatile video coding、VVC)、
VVCの参照ソフトウェア・テストプラットフォーム(VVC Test Model、VTM)、
オーディオビデオ符号化・復号化規格(Audio Video Standard、AVS)、
AVSの高性能テストモデル(High-Performance Model、HPM)、
コンテキストベースの適応2値算術符号化・復号化(Context-based Adaptive Binary Arithmetic Coding、CABAC)、
通常残差符号化・復号化(Regular Residual Coding、RRC)、
変換スキップ残差符号化・復号化(Transform Skip Residual Coding、TSRC)。
現在、プロックに基づいた混合符号化・復号化フレームワークが汎用のビデオ符号化・復号化規格(例えば、VVC)に用いられている。ビデオ画像における各画像(フレーム)は、同一サイズの正方形(例えば、128×128、64×64など)の最大符号化・復号化ユニット(largest coding unit、LCU)に分割され、各LCUは、ルールに基づいて、矩形の符号化・復号化ユニット(coding unit、CU)に分割されることも可能であり、CUは、より小さい予測ユニット(prediction unit、PU)、変換ユニット(Transform Unit、TU)などに分割されることも可能である。具体的に、図1に示されるように、混合符号化・復号化フレームワークは、予測(prediction)、変換(transform)、量子化(quantization)、エントロピー符号化(entropy coding)、インループフィルタ(In Loop Filter)などのモジュールを含むことができる。予測モジュールは、イントラ予測(intra Prediction)及びインター予測(inter Prediction)を含むことができ、インター予測は、動き推定(motion estimation)及び動き補償(motion compensation)を含むことができる。ビデオ画像(video picture)における隣接サンプル間に強い関連性があるため、ビデオ符号化・復号化技術において、イントラ予測の方法を利用して隣接サンプル間の空間的な冗長性を解消することができる。ビデオにおける隣接画像間に強い類似性があるため、ビデオ符号化・復号化技術において、インター予測の方法を利用して隣接画像間の時間的な冗長性を解消し、符号化・復号化効率を向上させることができる。
ビデオ符号器・復号器の基本的な流れは、以下の通りである。符号器では、1つの画像がブロックに分割され、現在ブロックに対してイントラ予測又はインター予測を行うことにより現在ブロックの予測ブロックを生成し、現在ブロックのオリジナルブロックから予測ブロックを減算して残差ブロックを取得し、残差ブロックを変換・量子化して量子化係数行列を取得し、量子化係数行列をエントロピー符号化してビットストリームに出力する。復号器では、現在ブロックに対してイントラ予測又はインター予測を行うことにより現在ブロックの予測ブロックを生成し、一方、ビットストリームを復号化して量子化係数行列を取得し、量子化係数行列を逆量子化・逆変換して残差ブロックを取得し、予測ブロックと残差ブロックとを加算して再構成ブロックを取得する。再構成ブロックは再構成画像を形成する。画像又はブロックに基づいて再構成画像をインループフィルタリングして復号化画像を取得する。符号器でも、復号化画像を取得するために、復号器と類似の処理が必要である。復号化画像は後続の画像の、インター予測のための参照画像であることができる。符号器で特定されたブロック分割情報、及び、予測、変換、量子化、エントロピー符号化、インループフィルタリングなどのモード情報又はパラメータ情報などは、必要に応じてビットストリームに出力される。復号器は、既存情報を解析し分析して、符号器と同じブロック分割情報、予測、変換、量子化、エントロピー符号化、インループフィルタリングなどのモード情報又はパラメータ情報を特定する。それによって、符号器で取得された復号化画像と復号器で取得された復号化画像が同じであることが確保される。符号器で取得された復号化画像は通常、再構成画像とも呼ばれる。予測中に、現在ブロックを予測ユニットに分割してもよく、変換中に、現在ブロックを変換ユニットに分割してもよく、予測ユニットと変換ユニットの分割が異なっていてもよい。上記は、ブロックに基づいた混合符号化・復号化フレームワークでのビデオ符号器・復号器の基本的な流れである。技術の発展に伴い、当該フレームワーク又は流れにおける一部のモジュールやステップが最適化される可能性がある。本出願の実施形態は、当該ブロックに基づいた混合符号化・復号化フレームワークでのビデオ符号器・復号器の基本的な流れに適用されるが、当該フレームワーク又は流れに限定されない。
現在ブロック(Current Block)は、現在符号化・復号化ユニット(CU)、現在予測ユニット(PU)、又は、現在変換ユニット(TU)などであってもよい。
ブロック分割情報、及び、予測、変換、量子化のそれぞれのモード情報及びパラメータ情報、係数などは、エントロピー符号化によりビットストリームに書き込まれる。異なる要素の確率が異なると仮定し、現れる確率の大きい要素に短い符号語を割り当て、現れる確率の小さい要素に長い符号語を割り当てることにより、固定長符号化よりも高い符号化効率を得ることができる。しかし、異なる要素の確率が近い又はほぼ同じであれば、エントロピー符号化による圧縮空間が限られるようになる。CABACは通常のエントロピー符号化方法であり、HEVC及びVCCなどではCABACを利用してエントロピー符号化を行う。CABACは、コンテキストモデルを利用して圧縮効率を向上させることができるが、コンテキストモードの利用及び更新で、操作がより複雑になる。CABACには、バイパス(bypass)モードがある。バイパスモードでは、コンテキストモデルの利用及び更新を必要とせず、より高いスループットを達成することができる。本出願の実施形態では、CABACにおいて、コンテキストモデルの利用及び更新が必要となるモードをコンテキストモードと呼ぶことができる。
一般的に、まず、定義された方法に基づいてコンテキストモデルを特定する必要がある。定義された二分決定の算術復号化プロセスを呼び出す際に、コンテキストモデルのパラメータを入力とすることができる。コンテキストモデルの選択において、隣接係数の間に依存関係がある。例えば、図2は、関連技術に係る現在係数と隣接係数との位置関係を示す概略図である。図2において、黒塗りのブロックは現在係数を表し、グリッド線のブロックは隣接係数を表す。図2に示されるように、現在係数のsig_coeff_flagのためにどのコンテキストモデルを選択するかは、現在係数の右、下、及び右下に隣接する5つの係数の情報に基づいて特定される必要がある。図2からさらに分かるように、コンテキストモードの操作は、バイパスモードの操作よりはるかに複雑であり、また、隣接係数の間に依存関係がある。
CABACの算術符号化・復号化エンジンにおいて、コンテキストモードの利用を必要とする場合、定義された二分決定の算術復号化プロセスを呼び出す必要がある。そのプロセスは、状態遷移プロセス(state transition process)、即ち、コンテキストモデルの更新を含む。二分決定の算術復号化プロセスにおいて、算術復号化エンジンの再正規化プロセスを呼び出す。バイパスモードを利用する際に、バイパス復号化プロセスを呼び出す必要がある。
以下、CABACをVVCに利用することを例として紹介する。
CABACの算術符号化・復号化エンジンにおいて、算術復号化プロセスの入力は、ctxTable、ctxIdx、bypassFlag、算術復号化エンジンの状態変数ivlCurrRange及びivlOffseであり、算術復号化プロセスの出力は、binの値である。
ctxTableはコンテキストモードを選択する際に用いられる表であり、ctxIdxはコンテキストモデルのインデックスである。
図3は、関連技術に係るbinの算術復号化プロセスを示すフローチャートである。図3に示されるように、binの値を復号化するために、コンテキストインデックス表ctxTable、ctxIdx、bypassFlagは、入力として、算術復号化プロセスDecodeBin(ctxTable、ctxIdx、bypassFlag)に伝送され、詳細は以下の通りである。
bypassFlagの値が1であれば、バイパス復号化プロセスDecodeBypass()を呼び出す。
そうでなければ、bypassFlagの値が0であり、ctxTableの値が0であり、且つctxIdxの値が0であれば、DecodeTerminate()を呼び出す。
そうでなければ(bypassFlagの値が0であり且つctxTableの値が0ではない場合)、定義された二分決定の算術復号化プロセスDecodeDecision(ctxTable,ctxIdx)を呼び出す。
また、二分決定の算術復号化プロセスにおいて、当該プロセスの入力は、変数ctxTable、ctxIdx、ivlCurrRange、及びivlOffsetであり、当該プロセスの出力は、復号化された値binVal、更新後の変数ivlCurrRange及ivlOffsetである。
図4は、関連技術に係る二分決定の算術復号化プロセスを示すフローチャートである。図4に示されるように、pStateIdx0及びpStateIdx1は、現在のコンテキストモデルの2つの状態である。
(1)変数ivlLpsRangeの値は以下の方法に基づいて導出される。
ivlCurrRangeの現在値を与え、変数qRangeIdxは以下の方法に基づいて導出される。
qRangeIdx=ivlCurrRange>>5である。
qRangeIdxと、ctxTable及びctxIdxに関連するpStateIdx0及びpStateIdx1とを与え、valMps及びivlLpsRangeは、以下の方法に基づいて導出される。
pState=pStateIdx1+16×pStateIdx0であり、
valMps=pState>>14であり、
ivlLpsRange=(qRangeIdx×((valMps?32767-pState:pState)>>9)>>1)+4である。
(2)変数ivlCurrRangeの値をivlCurrRange-ivlLpsRangeに設定し、以下の操作を実行する。
ivlOffsetがivlCurrRange以上であれば、変数binValの値は1-valMpsであり、ivlOffsetの値はivlOffsetからivlCurrRangeを減算することで得たものであり、ivlCurrRangeの値はivlLpsRangeである。
そうでなければ(ivlOffsetがivlCurrRangeより小さければ)、変数binValの値はvalMpsである。
binValの値を与え、定義された状態遷移(state transition)を実行する。ivlCurrRangeの現在値に基づいて、定義された再正規化(renormalization)を実行することができる。
さらに、状態遷移プロセスにおいて、当該プロセスの入力は、現在のpStateIdx0とpStateIdx1、及び、復号化された値binValであり、当該プロセスの出力は、ctxTable及びctxIdxに関連する、更新されたコンテキスト変数pStateIdx0及びpStateIdx1である。変数shift0及びshift1は、shiftIdxから導出され、shiftIdxとctxTable及びctxIdxの対応関係が以下のように定義される。
shift0=(shiftIdx>>2)+2であり、
shift1=(shiftIdx&3)+3+shift0である。
復号化された値binValに基づいて、ctxTable及びctxIdxに関連する2つの変数pStateIdx0及びpStateIdx1は以下のように更新される。
pStateIdx0=pStateIdx0-(pStateIdx0>>shift0)+(1023×binVal>>shift0)であり、
pStateIdx1=pStateIdx1-(pStateIdx1>>shift1)+(16383×binVal>>shift1)である。
また、算術復号化エンジンの再正規化プロセスの入力は、スライスデータにおけるbits、及び、変数ivlCurrRange及びivlOffsetであり、出力は更新された変数ivlCurrRange及びivlOffsetである。
図5は、関連技術に係る算術復号化エンジンの再正規化を示すフローチャートである。図5に示されるように、ivlCurrRangeの現在値はまず256と比較し、後続のステップは以下の通りである。
ivlCurrRangeが256以上であれば、再正規化が不要となり、RenormDプロセスが終了する。
そうでなければ(ivlCurrRangeが256より小さければ)、再正規化ループ(renormalization loop)に入る。このループでは、ivlCurrRangeの値に2を掛け、即ち、左に1ビットシフトする。ivlOffsetの値に2を掛け、即ち、左に1ビットシフトする。read_bits(1)で得た1ビットをivlOffsetにシフトする。
全体のプロセスでは、ビットストリームにおけるデータによって、ivlOffsetがivlCurrRange以上となることはない。
さらに、二分決定のバイパス復号化プロセスの入力は、スライスデータにおけるbits、及び変数ivlCurrRangeとivlOffsetであり、出力は、更新された変数ivlOffset、及び復号化された値binValである。
bypassFlagが1である場合、バイパス復号化プロセスが呼び出され、図6は、関連技術に係るバイパス復号化プロセスを示すフローチャートである。図6に示されるように、まず、ivlOffsetの値に2を掛け、即ち、左に1ビットシフトする。read_bits(1)で得た1ビットをivlOffsetにシフトする。ivlOffsetの値とivlCurrRangeの値とを比較し、後続のステップは以下の通りである。
ivlOffsetがivlCurrRange以上であれば、binValの値が1に設定され、ivlOffsetはivlOffsetからivlCurrRangeを減算することで得たものに等しい。
そうでなければ(ivlOffsetがivlCurrRangeより小さければ)、binValの値を0に設定する。
全体のプロセスでは、ビットストリームにおけるデータによって、ivlOffsetがivlCurrRange以上となることはない。
なお、現在のビデオ符号化・復号化規格では、残差に対して通常1種類又は複数種類の変換(transform)及び変換スキップ(transform skip)がサポートされることが理解されるべきである。変換は、離散コサイン変換(Discrete Cosine Transform、DCT)などを含む。変換を利用した残差ブロックは、変換(及び量子化)された後、一般的に一定の特性を示す。例えば、何らかの変換(及び量子化)後、低周波領域にエネルギーが多く集中することで左上隅領域における係数が大きくなり、右下隅領域における係数が小さくなり、0係数も多くある。一方、変換スキップは、文字通り、変換を行わないことを意味する。変換スキップ後の係数は変換後の係数と分布規則が異なるため、異なる係数符号化・復号化方法を利用することができる。例えば、VCCでは、変換後の係数にRRCが用いられ、変換スキップ後の係数にTSRCが用いられる。
一般的な変換では、例えば、DCT変換では、変換後のブロックでは、左から右まで周波数が次第に高くなり、上から下まで周波数が次第に高くなる。左上隅は低周波を表し、右下隅は高周波を表す。人間の目は低周波情報により敏感であるが、高周波情報に特に敏感ではない。この特性を利用して、いくつかの高周波情報がより多く処理され又は除去されることは、視覚への影響が少ない。いくつかの技術では、例えば、ゼロ設定(zero-out)では、いくつかの高周波情報を強制的に0に設定することができえる。例として、64×64のブロックに対して、横座標が32以上、又は縦座標が32以上である位置における係数を強制的に0に設定する。上記は単なる一例にすぎず、zero-outの範囲はより複雑な方法で導出されることができるため、ここでの説明は省略する。図7に示されるように、非ゼロ係数(有意係数(Significant Coefficient)とも呼ばれる)が左上隅に(即ち、非ゼロ係数の存在が可能な領域)存在する可能性があり、右下隅における全ての係数がゼロ(即ち、ゼロ設定領域)に設定される。このように、後続の係数符号化・復号化にとって、ゼロ設定領域における係数が必ず0であるため、符号化される必要がない。
さらに、通常ビデオにおける残差を変換(及び量子化)した後、係数分布は左上隅における係数が大きく右下隅に0係数が多いという特性を示すため、係数符号化・復号化中に、いくつかの方法を利用して、左上隅の一定範囲内の係数が符号化・復号化を必要とし、右下隅の一定範囲内の係数が符号化・復号化を必要としない(即ち、これらの係数が0であるとデフォルトする)ようにする。一つの方法では、1つのブロックの係数を符号化・復号化する際に、スキャン順序に従った、そのブロックの最後の非ゼロ係数の位置を先に特定する。この位置を特定した後、スキャン順序に従った最後の非ゼロ係数の位置より後の係数は全て0であると考えられ、即ち、符号化・復号化を必要としない。最後の非ゼロ係数の位置及び当該位置より前の係数のみが符号化・復号化を必要とする。例えば、VVCにおいて、last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffixを利用して、最後の非ゼロ係数の位置(LastSignificantCoeffX,LastSignificantCoeffY)を特定する。
(a)last_sig_coeff_x_prefixは、現在ブロックにおける、スキャン順序に従った最後の非ゼロ係数の水平(又は列)座標のプレフィックス(prefix)を指定する(specify)。last_sig_coeff_x_prefixの値は、0から(log2ZoTbWidth<<1)-1まで(これら2つの境界値を含む)の範囲にあるべきである。
last_sig_coeff_x_prefixが存在しない場合、last_sig_coeff_x_prefixの値は0となる。
(b)last_sig_coeff_y_prefixは、現在ブロックにおける、スキャン順序に従った最後の非ゼロ係数の垂直(又は行)座標のプレフィックス(prefix)を指定する。last_sig_coeff_y_prefixの値は、0から(log2ZoTbHeight<<1)-1まで(これら2つの境界値を含む)の範囲にあるべきである。
last_sig_coeff_y_prefixが存在しない場合、last_sig_coeff_y_prefixの値は0となる。
(c)last_sig_coeff_x_suffixは、現在ブロックにおける、スキャン順序に従った最後の非ゼロ係数の水平(又は列)座標のサフィックス(suffix)を指定する。last_sig_coeff_x_suffixの値は、0から(1<<((last_sig_coeff_x_prefix>>1)-1))-1まで(これら2つの境界値を含む)の範囲にあるべきである。
現在の変換ブロックにおける、スキャン順序に従った最後の非ゼロ係数の水平(又は列)座標の値LastSignificantCoeffXは、以下の方法で導出される。
last_sig_coeff_x_suffixが存在しなければ、LastSignificantCoeffX=last_sig_coeff_x_prefixである。
そうでなければ(last_sig_coeff_x_suffixが存在すれば)、LastSignificantCoeffX=(1<<((last_sig_coeff_x_prefix>>1)-1))*(2+(last_sig_coeff_x_prefix&1))+last_sig_coeff_x_suffixである。
(d)last_sig_coeff_y_suffixは、現在の変換ブロックにおける、スキャン順序に従った最後の非ゼロ係数の垂直(又は行)座標のサフィックス(suffix)を指定する。last_sig_coeff_y_suffixの値は、0から(1<<((last_sig_coeff_y_prefix>>1)-1))-1まで(これら2つの境界値を含む)の範囲にあるべきである。
現在の変換ブロックにおける、スキャン順序に従った最後の非ゼロ係数の垂直(又は行)座標の値LastSignificantCoeffYは、以下の方法で導出される。
last_sig_coeff_y_suffixが存在しなければ、LastSignificantCoeffY=last_sig_coeff_y_prefixである。
そうでなければ(last_sig_coeff_y_suffixが存在すれば)、LastSignificantCoeffY=(1<<((last_sig_coeff_y_prefix>>1)-1))*(2+(last_sig_coeff_y_prefix&1))+last_sig_coeff_y_suffixである。
また、最後の非ゼロ係数及び最後の非ゼロ係数より前の係数は全て符号化・復号化される必要があるが、通常ビデオでは、それらの係数のうち、一定の割合の係数が依然として0である。VVCでは、現在のサブブロックの符号化・復号化の要否を示すフラグsb_coded_flagを利用して、現在のサブブロックにおける係数の符号化・復号化の要否を特定する。符号化・復号化を必要としなければ、現在のサブブロックにおける係数が全て0であると考えられる。ここで、サブブロックは通常n×nのサブブロックであり、例えば、4×4のサブブロックである。
sb_coded_flag[xS][yS]は現在の変換ブロックにおける、位置が(xS,yS)であるサブブロックの以下の情報を指定し、サブブロックは変換係数レベル(transform coefficient level)の配列である。
sb_coded_flag[xS][yS]の値が0であれば、現在の変換ブロックにおける、位置が(xS,yS)であるサブブロック内の全ての変換係数レベルが0となる。
sb_coded_flag[xS][yS]が存在しなければ、sb_coded_flag[xS][yS]の値は1となる。
さらに、係数符号化・復号化を処理する際に、係数の特性を利用して圧縮効率を向上させることができる。例えば、通常ビデオでは、符号化・復号化が必要な係数のうち、一定の割合の係数が0であるため、現在係数が0であるか否かを1つのシンタクス要素で表すことができ、このシンタクス要素は通常、1つの2値シンボル(binary symbol)である。現在係数が0であれば、現在係数の符号化・復号化が終了したことを意味し、そうでなければ、現在係数の符号化・復号化を継続する必要がある。別の例として、通常ビデオでは、非ゼロ係数のうち、一定の割合の係数の絶対値が1であるため、現在係数の絶対値が1より大きいか否かを1つのシンタクス要素で表すことができ、このシンタクス要素は通常、1つの2値シンボルである。現在係数の絶対値が1以下であれば、現在係数の符号化・復号化が終了したことを意味し、そうでなければ、現在係数の符号化・復号化を継続する必要がある。例えば、VCCに係るシンタクス要素は以下の通りである。
sig_coeff_flag[xC][yC]は、現在の変換ブロックの、位置(xC、yC)における対応の変換係数レベルが非ゼロ係数であるか否かを特定するために用いられる。
sig_coeff_flag[xC][yC]の値が0であれば、(xC、yC)位置における変換係数レベルが0に設定される。
そうでなければ(sig_coeff_flag[xC][yC]の値が1であれば)、(xC、yC)位置における変換係数レベルは非ゼロ係数である。
sig_coeff_flag[xC][yC]が存在しなければ、以下のように推定される。
transform_skip_flag[x0][y0][cIdx]の値が0であれば、又はsh_ts_residual_coding_disabled_flagの値が1であれば、以下が適用される。
(xC、yC)が、スキャン順序に従った最後の非ゼロ係数の位置(LastSignificantCoeffX,LastSignificantCoeffY)であれば、又は、以下の条件が全てtrueであれば、sig_coeff_flag[xC][yC]の値は1であると推定される。
(xC&((1<<log2SbW)-1),yC&((1<<log2SbH)-1))が(0,0)に等しく、
inferSbDcSigCoeffFlagの値が1に等しく、且つ、
sb_coded_flag[xS][yS]の値が1に等しい。
そうでなければ、sig_coeff_flag[xC][yC]の値は0であると推定される。
そうでなければ、(transform_skip_flag[x0][y0][cIdx]の値が1であり、且つsh_ts_residual_coding_disabled_flagの値が0であれば)、以下が適用される。
以下の条件が全てtrueであれば、sig_coeff_flag[xC][yC] の値は1であると推定される。
(xC&((1<<log2SbW)-1),yC&((1<<log2SbH)-1))が((1<<log2SbW)-1,(1<<log2SbH)-1)に等しく、
inferSbSigCoeffFlagの値が1であり、且つ、
sb_coded_flag[xS][yS]の値が1である。
そうでなければ、sig_coeff_flag[xC][yC]の値は0であると推定される。
abs_level_gtx_flag[n][j]は、(スキャン位置nにおける)変換係数レベルの絶対値が(j<<1)+1より大きいか否かを特定するために用いられる。abs_level_gtx_flag[n][j]が存在しなければ、abs_level_gtx_flag[n][j]の値が0となる。
このように、上記フラグ(又は、シンタクス要素と呼ばれる)を処理した後、現在係数の符号化・復号化がまだ終了していない場合、係数の絶対値の残りの値(例えば、VVCにおけるabs_remainder)を符号化する必要がある。
abs_remainder[n]は、スキャン位置nにおける、Golomb-Rice codeで符号化・復号化される変換係数レベルの剰余絶対値(remaining absolute value)である。abs_remainder[n]が存在しなければ、abs_remainder[n]の値は0となる。
また、VVCでは、sig_coeff_flag及びabs_level_gtx_flagなどのシンタクス要素がコンテキストモードで符号化・復号化され、abs_remainderがバイパスモードで符号化・復号化される。上記内容に言及されたように、コンテキストモード符号化・復号化(context mode coding)は、バイパスモード符号化・復号化(bypass mode coding)より複雑であり、直観的に、処理速度がより遅い。符号化・復号化が必要な係数が多い場合、コンテキストモード符号化・復号化の多くの利用は復号化速度に影響する。従って、コンテキストモードで符号化・復号化されるシンタクス要素の数を制限し、例えば、コンテキストモードで符号化・復号化される2値シンボルの数が1つの閾値を超えたら、後続の係数が、バイパスモードで強制的に符号化・復号化され、例えば、VVCにおけるdec_abs_levelが挙げられる。
dec_abs_level[n]は、スキャン位置nにおける、Golomb-Rice codeで符号化・復号化される中間値である。dec_abs_level[n]を解析する際に、ZeroPos[n]を導出することができる。位置(xC、yC)における変換係数レベルの絶対値AbsLevel[xC][yC]は、以下の方法で導出される。
dec_abs_level[n]が存在しなければ、又はdec_abs_level[n]の値がZeroPos[n]に等しければ、AbsLevel[xC][yC]の値は0である。
そうでなければ、dec_abs_level[n]の値がZeroPos[n]より小さければ、AbsLevel[xC][yC]の値はdec_abs_level[n]+1である。
そうでなければ(dec_abs_level[n]の値がZeroPos[n]より大きければ)、AbsLevel[xC][yC]の値はdec_abs_level[n] である。
上述はいずれも係数の絶対値であり、非ゼロ係数のサインは、係数サインフラグcoeff_sign_flag、又は、いくつかのサイン導出方法で特定されることができる。coeff_sign_flag[n]は、以下の方法に基づいて、スキャン位置nにおける変換係数のサインを特定するために用いられることができる。
coeff_sign_flag[n]の値が0であれば、対応する変換係数は正の値となる。
そうでなければ(coeff_sign_flag[n]の値が1であれば)、対応する変換係数は負の値となる。
coeff_sign_flag[n]が存在しなければ、coeff_sign_flag[n]の値が0となり、この際、CoeffSignLevel[xC][yC]に基づいて、座標(xC,yC)における変換係数のサインを特定する。
CoeffSignLevel[xC][yC]の値が0であれば、対応する変換係数は0となる。
そうでなければ、CoeffSignLevel[xC][yC]の値が1であれば、対応する変換係数は正の値となる。そうでなければ(CoeffSignLevel[xC][yC]の値が-1であれば)、対応する変換係数は負の値となる。
なお、CoeffSignLevel[xC][yC]は、他のいくつかの方法で導出されてもよいが、ここでの説明は省略する。
また、VVCには、係数の値のパリティフラグpar_level_flagも用いられている。このフラグにより、現在係数の値のパリティが分かり、このフラグが、現在係数の値の特定及び依存量子化(Dependent Quantization)に利用される。
par_level_flag[n]は、スキャン順序に従った位置nにおける変換係数レベルのパリティを指定する。par_level_flag[n]が存在しなければ、par_level_flag[n]の値は0である。
par_level_flagは、変換係数のパリティを特定するほか、abs_level_gtx_flag、abs_remainderなどとともに、係数の大きさを特定するために用いられることもできる。
ここで、コンテキストモード符号化・復号化は、コンテキストモードを選択し、利用し、且つ更新する必要があるが、バイパスモード符号化・復号化は、コンテキストモードを選択し、利用し、且つ更新する必要がない。通常では、一定の範囲内で、コンテキストモードで符号化・復号化されるシンタクス要素を一緒に置き、バイパスモードで符号化・復号化されるシンタクス要素を一緒に置くことで、ハードウェア設計により優しい。例えば、まず、1つのブロックにおける、コンテキストモードで符号化・復号化される全てのシンタクス要素を処理し、次に、バイパスモードで符号化・復号化されるシンタクス要素を処理する。現在ブロックにおける、コンテキストモードで符号化・復号化される全てのシンタクス要素は、さらにいくつかのグループに分けられてもよく、1つのブロックにおける、バイパスモードで符号化・復号化される全てのシンタクス要素は、さらにいくつかのグループに分けられてもよい。
1つの具体的な例において、RRCの具体的なシンタックスは表1に示されている。
配列AbsLevel[xC][yC]は、現在の変換ブロックの変換係数の絶対値の配列を表す。配列AbsLevelPass1[xC][yC]は、現在の変換ブロックの変換係数の一部の再構成の絶対値の配列を表す。配列のインデックスxC及びyCは、現在の変換ブロックにおける(xC、yC)位置を表す。
関数residual_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx)に入った後、ブロックサイズのいくつかの情報を特定する必要があり、例えば、zero-out後のブロックサイズの対数log2ZoTbWidth、log2ZoTbHeightを特定する。横座標が[0,(1<<log2ZoTbWidth)-1]の範囲内にあり、縦座標が[0,(1<<log2ZoTbHeight)-1]の範囲内にある係数は非ゼロ係数である可能性がある。ここで、(1<<log2ZoTbWidth)はzero-out後の変換ブロックの幅を示し、(1<< log2ZoTbHeight)はzero-out後の変換ブロックの高さを示す。次に、last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffixなどに基づいて、最後の非ゼロ係数の位置を特定する。スキャン順序に従った最後の非ゼロ係数より前の係数は、非ゼロ係数である可能性がある。次に、remBinsPass1の値を特定し、即ち、等式remBinsPass1=((1<<(log2TbWidth+log2TbHeight))×7)>>2に基づいて特定する。remBinsPass1は、現在ブロックにおける、コンテキストモードで符号化・復号化されるシンタクス要素の数を指定する。本出願の実施形態では、remBinsPass1がremaining binaries inpass1として理解されることができ、即ち、1ラウンド目における残りの2値シンボルの数である。スキャン順序に従った最後の非ゼロ係数より前の係数は符号化・復号化される必要がある。それらの係数を含むサブブロックについて、各現在のサブブロックが符号化・復号化される必要があるか否かを順次特定する。符号化・復号化される必要があれば、当該方法において、1つのサブブロックにおける、コンテキストモードで符号化・復号化されるシンタクス要素を1ラウンド目に設定し、バイパスモードで符号化・復号化されるシンタクス要素を後に設定する。各係数に対して、最多で、コンテキストモードで符号化・復号化される4つのシンタクス要素(即ち、1つのsig_coeff_flag、2つのabs_level_gtx_flag、1つのpar_level_flag)を処理する必要がある可能性がある。1ラウンド目では、コンテキストモードで符号化・復号化されるシンタクス要素を処理するたびに、remBinsPass1から1を減算する。1つの係数が十分に大きければ、1ラウンド目においてコンテキストモードで符号化・復号化されるいくつかのシンタクス要素を処理した後、残りの値(即ち、abs_remainder)を処理する必要がある。remBinsPass1が十分に小さければ(remBinsPass1>=4を満たさない場合)、1ラウンド目が終了し、残りの係数は直接にバイパスモード(即ち、dec_abs_level)で処理される。
別の具体的な例において、TSRCの具体的なシンタクスは表2に示されている。
関数residual_ts_coding(x0,y0,log2TbWidth,log2TbHeight,cIdx)に入った後、ブロックサイズのいくつかの情報を特定する必要がある。次に、RemCcbsの値を特定し、即ち、等式RemCcbs=((1<<(log2TbWidth+log2TbHeight))×7)>>2に基づいて特定する。RemCcbsは、現在ブロックにおける、コンテキストモードで符号化・復号化されるシンタクス要素の数を指定する。本出願の実施形態では、RemCcbsがremaining context coded binariesとして理解されることができ、即ち、コンテキストモードで符号化・復号化される2値シンボルの残りの数である。現在のサブブロックが符号化・復号化される必要があるか否かは、サブブロックごとに特定される。符号化・復号化される必要がある場合、上記RRCと異なり、TSRC方法において、1つのサブブロックにおける、コンテキストモードで符号化・復号化されるシンタクス要素は2ラウンド目に設定され、各係数に対して、1ラウンド目及び2ラウンド目においてそれぞれ、最多で、コンテキストモードで符号化・復号化される4つのシンタクス要素を処理する。バイパスモードで符号化・復号化されるシンタクス要素は、後に設定される。1ラウンド目及び2ラウンド目では、コンテキストモードで符号化・復号化されるシンタクス要素を処理するたびに、remBinsPass1から1を減算する。1つの係数が十分に大きければ、1ラウンド目及び2ラウンド目においてコンテキストモードで符号化・復号化されるいくつかのシンタクス要素を処理した後、残りの値(即ち、abs_remainder)を処理する必要がある。remBinsPass1が十分に小さければ(remBinsPass1>=4を満たさない場合)、最初の2ラウンドが終了し、残りの係数は直接にバイパスモードで処理され、この場合、依然として、abs_remainderである。
要するに、関連技術において、従来のこのような係数符号化・復号化方法によれば、従来の一般的に使用されているビデオ、例えば消費者向けビデオは、圧縮効率が優れている。消費者向けビデオは通常、各画素のビット深度が8ビット又は10ビットであり、ビットレートがあんまり高くない(通常では数メガバイト/秒(MB/s)以下である)。しかしながら、適用されるいくつかのビデオの画素はより高いビット深度を必要とし、例えば、各画素のビット深度が12ビット、14ビット、16ビット又はより高いである。より高いビット深度は通常、より大きな係数、より多くの非ゼロ係数をもたらし、より高いビットレートをもたらす。適用されるいくつかのビデオは、より高い品質を必要とし、より高い品質は通常、より大きな係数、より多くの非ゼロ係数をもたらし、より高いビットレートをもたらす。より高いビットレートは、復号器のより高い処理能力(例えば、スループット)を求める。
低ビット深度、低品質、低ビットレートのビデオ(通常ビデオ)と比べて、高ビット深度、高品質、高ビットレートのビデオ(「三高ビデオ」)は、通常では、符号化・復号化が必要である係数がより多く、且つ係数がより大きい。例えば、同じサイズの1つのブロックに対して、三高ビデオにおける符号化・復号化が必要である係数が、通常ビデオにおける符号化・復号化が必要である係数よりはるかに多い。それは、通常ビデオのブロックにおいて、予測、変換、量子化後の係数が0となるものが多く、三高ビデオのブロックにおいて、予測、変換、量子化後の係数が非ゼロ係数が多いためである。通常ビデオのブロックにおいて、予測、変換、量子化後の係数のうち、符号化・復号化が必要である係数が0である割合が大きいため、最後の非ゼロ係数の位置(LastSignificantCoeffX,LastSignificantCoeffY)で、符号化・復号化が必要であるか否かの係数の領域を区別することは非常に有効である。最後の非ゼロ係数の位置より前の係数が0である割合が大きいため、サブブロックの符号化・復号化の要否を示すフラグsb_coded_flagで、現在のサブブロックの符号化・復号化の要否をさらに区別することは非常に有効である。しかし、現在ブロックにおける非ゼロ係数が非常に多く、ほとんどの係数、さらに全ての係数が非ゼロ係数である場合、上記最後の非ゼロ係数の位置とサブブロックの符号化・復号化の要否を示すフラグとで、非ゼロ係数を多くフィルタリングすることはなく、また、ビットストリームにおいて、非ゼロ係数の位置とサブブロックの符号化・復号化の要否を示すフラグとを符号化・復号化すること自体は、一定のオーバーヘッドを占有してしまい、無駄が生じる。
別の様態では、最後の非ゼロ係数の位置、及びサブブロックの符号化・復号化の要否を示すフラグなどはいずれも、コンテキストモードで符号化・復号化される。コンテキストモード符号化・復号化は、バイパスモードより複雑であり、これらの情報を処理することは、ソフトウェア及びハードウェアの符号化・復号化の速度及びスループットにも影響する。
他の様態では、最後の非ゼロ係数の位置(LastSignificantCoeffX,LastSignificantCoeffY)を符号化・復号化する現在の方法は、最後の非ゼロ係数の位置における座標を符号化・復号化することである。通常ビデオでは、非ゼロ係数の大部が左上隅に集中し、右下隅の大部の領域がゼロ係数を有するため、LastSignificantCoeffX及びLastSignificantCoeffYの値は一般的に小さい。三高ビデオでは、右下隅にも非ゼロ係数が多くあるため、LastSignificantCoeffX及びLastSignificantCoeffYの値が一般的に大きくなってしまい、ビットストリームにおいて大きな値を符号化・復号化することは、より大きなオーバヘッドをもたらすことになる。また、可逆圧縮にこの方法を利用する可能性もあり、それは、可逆圧縮の際に、量子化を利用することができず、この場合、一般的に係数が比較的に多く比較的に大きいためである。この場合、既存の関連スキームを利用することでより大きなオーバーヘッドをもたらし、無駄が生じてしまい、さらに、符号化・復号化の速度及びスループットにも影響する。
本出願の実施形態において、復号器に適用される係数復号化方法が提供される。ビットストリームを解析して、ビデオフラグ情報を取得する。ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、ビットストリームを解析して、最後の非ゼロ係数の位置反転フラグ情報と最後の非ゼロ係数の座標情報とを取得する。最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を計算することにより、最後の非ゼロ係数の位置を特定する。予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定する。
本出願の実施形態において、符号器に適用される係数符号化方法がさらに提供される。ビデオフラグ情報と、最後の非ゼロ係数の位置とを特定する。ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、最後の非ゼロ係数の位置反転フラグ情報を特定する。最後の非ゼロ係数の位置と、最後の非ゼロ係数の位置反転フラグ情報とに基づいて、最後の非ゼロ係数の座標情報を特定する。予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の非ゼロ係数の座標情報とをビットストリームに書き込む。
このように、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化のシナリオでは、係数分布規則が通常ビデオのシナリオとは異なるため、係数符号化・復号化中に、コンテキストモードで符号化・復号化されるシンタクス要素の数を削減又は除去し、例えば、最後の非ゼロ係数の位置、サブブロック符号化・復号化フラグなどのシンタクス要素が挙げられ、さらに、最後の非ゼロ係数の座標情報の値が大きい場合に座標変換を行うことにより、ビットストリームにおける符号化・復号化によるオーバーヘッドを低減し、係数符号化・復号化のスループット及び符号化・復号化の速度を向上させることができる。また、削減又は除去されるシンタクス要素が、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化において、影響が小さいため、圧縮効率を向上させることもできる。
以下、図面を参照しながら本出願の各実施形態を詳細に説明する。
図8Aを参照すると、図8Aは、本出願の実施形態に係る符号器のシステムの構造の一例のブロック図を示している。図8Aに示されるように、符号器100は、分割ユニット101、予測ユニット102、第1の加算器107、変換ユニット108、量子化ユニット109、逆量子化ユニット110、逆変換ユニット111、第2の加算器112、フィルタリングユニット113、復号化画像バッファ(decoded picture buffer、DPB)ユニット114及びエントロピー符号化ユニット115を含むことができる。ここで、符号器100の入力は、一連の画像又は一枚の静止画像からなるビデオであってもよく、符号器100の出力は、入力ビデオの圧縮されたバージョンを表すビットストリーム(「コードストリーム」と呼ばれることもできる)であってもよい。
分割ユニット101は、入力ビデオにおける画像を1つ又は複数の符号化・復号化ツリーユニット(coding tree units、CTUs)に分割する。分割ユニット101は、画像を複数のタイル(tiles)に分割し、さらに、1つのタイルを1つ又は複数のブリック(bricks)に分割してもよい。ここで、1つのタイル又は1つのブリックは、1つ又は複数の完全な及び/又は部分的なCTUを含んでもよい。また、分割ユニット101は、1つ又は複数のスライス(slices)を形成してもよい。1つのスライスは、ラスタ順(raster order)に並ぶ画像内の1つ又は複数のタイル、又は矩形領域をカバーする画像内の1つ又は複数のタイルを含んでもよい。分割ユニット101は、1つ又は複数のサブ画像をさらに形成してもよく、サブ画像は、1つ又は複数のスライス、タイル、又はブリックを含んでもよい。
符号器100の符号化のプロセスにおいて、分割ユニット101はCTUを予測ユニット102に伝送する。予測ユニット102は一般的に、ブロック分割ユニット103、動き推定(motion estimation、ME)ユニット104、動き補償(motion compensation、MC)ユニット105及びイントラ予測ユニット106を含むことができる。具体的に、ブロック分割ユニット103は、4分木分割、2分木分割、3分木分割を反復的に用いて、入力CTUをより小さい符号化・復号化ユニット(coding units、CUs)にさらに分割する。予測ユニット102は、MEユニット104及びMCユニット105を用いて、CUのインター予測ブロックを取得することができる。イントラ予測ユニット106は、MIPモードを含む様々なイントラ予測モードを用いて、CUのイントラ予測ブロックを取得することができる。例示として、インター予測ブロックを取得するために、レート歪み最適化(rate-distortion optimized)の動き推定法が、MEユニット104及びMCユニット105によって呼び出されることができ、また、インター予測ブロックを取得するために、レート歪み最適化のモード決定法が、イントラ予測ユニット106によって呼び出されることができる。
予測ユニット102はCUの予測ブロックを出力し、第1の加算器107は、分割ユニット101の出力におけるCUとCUの予測ブロックとの間の差、即ち、残差CUを計算する。変換ユニット108は係数を取得するために、残差CUを読み出し、且つ残差CUに対して1つ又は複数の変換操作を行う。量子化ユニット109は、係数を量子化し、且つ量子化係数(即ち、レベル(levels))を出力する。逆量子化ユニット110は、量子化係数に対してスケーリング操作を行うことによって、再構成係数を出力する。逆変換ユニット111は、変換ユニット108における変換に対応の1つ又は複数の逆変換を行い、且つ再構成残差を出力する。第2の加算器112は、再構成残差と予測ユニット102からのCUの予測ブロックとを加算することによって、再構成CUを算出する。また、第2の加算器112は、その出力をイントラ予測の参照として用いるために、予測ユニット102に送る。画像又はサブ画像内の全てのCUが再構成された後、フィルタリングユニット113は、再構成された画像又はサブ画像に対してインループフィルタリングを実行する。ここで、フィルタリングユニット113は1つ又は複数のフィルタを含み、例えば、デブロッキングフィルタ(deblocking filter)、サンプル適応オフセット(sample adaptive offset、SAO)フィルタ、適応ループフィルタ(adaptive loop filter、ALF)、クロマスケーリング付きルママッピング(luma mapping with chroma scaling、LMCS)フィルタ、及びニューラルネットワークベースフィルタ(neural-network-based filter)などが挙げられる。又は、フィルタリングユニット113は、CUが他のCUを符号化・復号化するための参照として用いられないと判断した場合、CUにおける1つ又は複数の目標サンプルに対してインループフィルタリングを行う。
フィルタリングユニット113の出力は復号化された画像又はサブ画像であり、これらの復号化された画像又はサブ画像はDPBユニット114にバッファリングされる。DPBユニット114は、タイミング及び制御情報に基づいて、復号化された画像又はサブ画像を出力する。ここで、DPBユニット114に記憶された画像はさらに、予測ユニット102によるインター予測又はイントラ予測の参照として用いられることができる。最後、エントロピー符号化ユニット115は、符号器100からの、画像の復号化に必要なパラメータ(制御パラメータや補足情報など)を2進数形式に変換し、且つ各データユニットのシンタックス構造に基づいてその2進数形式をビットストリームに書き込み、即ち、符号器100は最終的に、ビットストリームを出力する。
さらに、符号器100は、第1のプロセッサと、コンピュータプログラムを記録する第1のメモリとを備えることができる。第1のプロセッサがコンピュータプログラムを読み出して実行すると、符号器100は入力ビデオを読み出し、且つ対応するビットストリームを生成する。また、符号器100は、1つ又は複数のチップを備えた計算デバイスであってもよい。チップで集積回路として実装された上記ユニットは、図8Aにおける対応のユニットと類似の接続及びデータ交換機能を有する。
図8Bを参照すると、図8Bは、本出願の実施形態に係る復号器のシステムの構造の一例のブロック図を示している。図8Bに示されるように、復号器200は、解析ユニット201、予測ユニット202、逆量子化ユニット205、逆変換ユニット206、加算器207、フィルタリングユニット208及び復号化画像バッファユニット209を含むことができる。ここで、復号器200の入力は、ビデオ又は一枚の静止画像の圧縮されたバージョンを表すビットストリームであり、復号器200の出力は、一連の画像からなる復号化ビデオ又は一枚の復号化された静止画像であってもよい。
復号器200の入力ビットストリームは、符号器100が生成したビットストリームであってもよい。解析ユニット201は入力ビットストリームを解析し、且つ入力ビットストリームからシンタックス要素の値を取得する。解析ユニット201は、1つ又は複数の復号化された画像を取得するために、シンタックス要素の2進表現を数値に変換し、且つ数値を復号器200におけるユニットに送る。解析ユニット201はさらに、復号化された画像を表示するために、入力ビットストリームから1つ又は複数のシンタックス要素を解析することができる。
復号器200の復号化のプロセスにおいて、解析ユニット201は、シンタックス要素の値と、シンタックス要素の値に基づいて設定された又は特定された、1つ又は複数の復号化された画像を取得するための1つ又は複数の変数とを、復号器200におけるユニットに送る。
予測ユニット202は、現在の復号化ブロック(例えば、CU)の予測ブロックを特定する。ここで、予測ユニット202は、動き補償ユニット203及びイントラ予測ユニット204を含むことができる。具体的に、インター復号化モードが現在の復号化ブロックを復号化するために用いられることが示される場合、予測ユニット202は、インター予測ブロックを取得するために、解析ユニット201からの関連パラメータを動き補償ユニット203に送る。イントラ予測モード(MIPモードインデックス値に基づいて示されるMIPモードを含む)が現在の復号化ブロックを復号化するために用いられることが示される場合、予測ユニット202は、イントラ予測ブロックを取得するために、解析ユニット201からの関連パラメータをイントラ予測ユニット204に送信する。
逆量子化ユニット205は、符号器100における逆量子化ユニット110と同じ機能を有する。逆量子化ユニット205は、再構成係数を取得するために、解析ユニット201からの量子化係数(即ち、レベル)に対してスケーリング操作を行う。
逆変換ユニット206は、符号器100における逆変換ユニット111と同じ機能を有する。逆変換ユニット206は、再構成残差を取得するために、1つ又は複数の変換操作(即ち、符号器100における逆変換ユニット111による1つ又は複数の変換操作の逆操作)を行う。
加算器207は、現在の復号化ブロックの再構成ブロックを取得するために、その入力(予測ユニット202からの予測ブロック及び逆変換ユニット206からの再構成残差)に対して加算操作を行う。再構成ブロックはまた、イントラ予測モードのもとで符号化・復号化される他のブロックの参照として用いられるために、予測ユニット202に送られる。
画像又はサブ画像における全てのCUが再構成された後、フィルタリングユニット208は再構成された画像又はサブ画像に対してインループフィルタリングを実行する。フィルタリングユニット208は1つ又は複数のフィルタを含み、例えば、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ、適応ループフィルタ(ALF)、クロマスケーリング付きルママッピング(LMCS)フィルタ、及びニューラルネットワークベースフィルタなどが挙げられる。又は、フィルタリングユニット208は、再構成ブロックが他のブロックを復号化するための参照として用いられないと判断した場合、再構成ブロックにおける1つ又は複数の目標サンプルに対してインループフィルタリングを行う。ここで、フィルタリングユニット208の出力は復号化された画像又はサブ画像であり、これらの復号化された画像又はサブ画像はDPBユニット209にバッファリングされる。DPBユニット209は、タイミング及び制御情報に基づいて、復号化された画像又はサブ画像を出力する。DPBユニット209に記憶された画像はさらに、予測ユニット202によるインター予測又はイントラ予測の参照として用いられることができる。
さらに、復号器200は、第2のプロセッサと、コンピュータプログラムを記録する第2のメモリとを備えることができる。第1のプロセッサがコンピュータプログラムを読み出して実行すると、復号器200は、入力ビットストリームを読み出し、且つ対応する復号化ビデオを生成する。また、復号器200は、1つ又は複数のチップを備えた計算デバイスであってもよい。チップで集積回路として実装された上記ユニットは、図8Bにおける対応のユニットと類似の接続及びデータ交換機能を有する。
また、本出願の実施形態が符号器100に適用される場合、「現在のブロック」は具体的に、ビデオ画像における現在の符号化待ちの画像ブロック(「符号化ブロック」とも呼ばれ得る)を指し、本出願の実施形態が復号器200に適用される場合、「現在のブロック」は具体的に、ビデオ画像における現在の復号化待ちの画像ブロック(「復号化ブロック」とも呼ばれ得る)を指すことに留意されたい。
本出願の一実施形態において、図9を参照すると、図9は、本出願の実施形態に係る係数復号化方法を示すフローチャートである。図9に示されるように、この方法は以下の内容を含むことができる。
S901:ビットストリームを解析して、ビデオフラグ情報を取得する。
なお、本出願の実施形態の係数復号化方法は、復号器に適用される。具体的に、図8Bに示される復号器200の構造に基づいて、本出願の実施形態の係数復号化方法は、主に復号器200における「解析ユニット201」に適用される。当該解析ユニット201は、コンテキストモデルに基づく適応2値算術符号化・復号化モード又はバイパスモードを利用して復号化を行い、関連フラグ情報(又は、シンタクス要素)の値を取得し、現在ブロックの係数を特定することができる。
なお、ビデオ規格に一般的に述べられている係数符号化・復号化は、符号化及び復号化という2つの部分を含むことができるため、係数符号化・復号化は、符号器側の係数符号化方法と復号器側の係数復号化方法とを含む。本出願の実施形態は復号器側の係数復号化方法について述べられる。
通常の状況では、通常ビデオに対して、係数復号化方法は、関連技術における既存方法と同じである。しかし、高ビット深度、高品質、高ビットレート、又は可逆圧縮のビデオ符号化・復号化のシナリオなどの特定の状況に対して、本出願の実施形態では、最終的な非ゼロ係数の位置の導出方法を補正することができる。
本出願の実施形態において、まず、現在のビデオが予め設定された条件を満たすか否かを判断する必要があり、それをビデオフラグ情報で表すことができる。いくつかの実施形態において、ビットストリームを解析して、ビデオフラグ情報を取得することは、
ビデオフラグ情報の値が第1の値である場合、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定すること、又は、
ビデオフラグ情報の値が第2の値である場合、ビデオフラグ情報がビデオが予め設定された条件を満たさないことを指示する、と特定すること、含むことができる。
ここで、第1の値は1であり、第2の値は0である。
なお、別の具体的な例において、第1の値はtrueに設定されてもよく、第2の値はfalseに設定されてもよい。さらに他の具体的な例において、第1の値は0に設定されてもよく、第2の値は1に設定されてもよく、又は、第1の値はfalseに設定されてもよく、第2の値はtrueに設定されてもよい。それについては限定されない。
なお、予め定められた条件は、少なくとも、高ビット深度(high bit depth)、高品質、高ビットレート、高フレームレート及び可逆圧縮(lossless compression)のうちの1つを含む。
即ち、通常ビデオと比べて、本出願の実施形態に係るビデオは、高ビット深度(high bit depth)、高品質、高ビットレート、高フレームレート及び可逆圧縮などの特性を有する。
また、ビデオフラグ情報は、シーケンス(sequence)レベルのフラグであってもよく、さらに、レベルがより高いフラグであってもよく、例えば、VUI(Video Usability Information)、補足拡張情報SEI(Supplemental enhancement information)などが挙げられる。ビデオが予め設定された条件を満たすか否かの判断は、当該ビデオが高ビット深度を満たすか否か、ビデオが高ビットレートを満たすか否か、ビデオが高品質を満たすか否か、ビデオが可逆圧縮を満たすか否か等を判断することにより行うことが可能であるが、以下、これらの4つの場合を例としてそれぞれ説明する。
いくつかの実施形態において、ビデオフラグ情報が高ビット深度フラグ情報である場合、当該方法は、
高ビット深度フラグ情報がビデオが高ビット深度を満たすことを指示する場合、ビデオが予め設定された条件を満たすと特定すること、をさらに含むことができる。
いくつかの実施形態において、ビデオフラグ情報が高ビットレートフラグ情報である場合、当該方法は、
高ビットレートフラグ情報がビデオが高ビットレートを満たすことを指示する場合、ビデオが予め設定された条件を満たすと特定すること、をさらに含むことができる。
いくつかの実施形態において、ビデオフラグ情報が高品質フラグ情報である場合、当該方法は、
高品質フラグ情報がビデオが高品質を満たすことを指示する場合、ビデオが予め設定された条件を満たすと特定すること、をさらに含むことができる。
いくつかの実施形態において、ビデオフラグ情報が可逆圧縮フラグ情報である場合、当該方法は、
可逆圧縮フラグ情報がビデオが可逆圧縮を満たすことを指示する場合、ビデオが予め設定された条件を満たすと特定すること、をさらに含むことができる。
例えば、シーケンスレベルを例として、ビデオフラグ情報は、高ビット深度フラグ情報(sps_high_bit_depth_flagで表す)であってもよく、それは現在のビデオシーケンスが高ビット深度シーケンス(bit-depth sequence)であるか否かを指示するために用いられる。又は、ビデオフラグ情報は、高ビットレートフラグ情報(sps_high_bit_rate_flagで表す)であってもよく、それは現在のビデオシーケンスが高ビットレートシーケンスであるか否かを指示するために用いられる。又は、フラグ情報は、高ビット深度、高ビットレート、高品質、又は可逆圧縮を指示する他のフラグ情報であってもよく、本出願の実施形態では具体的に限定されない。
S902:ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、ビットストリームを解析して、最後の非ゼロ係数の位置反転フラグ情報と最後の非ゼロ係数の座標情報とを取得する。
なお、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、さらに、ビットストリームを解析することにより、最後の非ゼロ係数の位置反転フラグ情報と最後の非ゼロ係数の座標情報とを取得することができる。
最後の非ゼロ係数の座標情報は、last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixに基づいて特定されることができる。従って、いくつかの実施形態では、ビットストリームを解析して、最後の非ゼロ係数の座標情報を取得することは、以下の内容を含むことができる。ビットストリームを解析して、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を取得する。最後の非ゼロ係数の水平座標のプレフィックス情報と、最後の非ゼロ係数の水平座標のサフィックス情報とに基づいて、最後の非ゼロ係数の水平座標を特定する。最後の非ゼロ係数の垂直座標のプレフィックス情報と、最後の非ゼロ係数の垂直座標のサフィックス情報とに基づいて、最後の非ゼロ係数の垂直座標を特定する。最後の非ゼロ係数の水平座標と、最後の非ゼロ係数の垂直座標とに基づいて、最後の非ゼロ係数の座標情報を特定する。
なお、最後の非ゼロ係数の水平座標のプレフィックス情報は、last_sig_coeff_x_prefixで表され、現在ブロックの、予め設定されたスキャン順序に従った最後の非ゼロ係数の水平(又は列)座標のプレフィックスを指定する。最後の非ゼロ係数の垂直座標のプレフィックス情報はlast_sig_coeff_y_prefixで表され、現在ブロックの、予め設定されたスキャン順序に従った最後の非ゼロ係数の垂直(又は行)座標のプレフィックスを指定する。最後の非ゼロ係数の水平座標のサフィックス情報は、last_sig_coeff_x_suffixで表され、現在ブロックの、予め設定されたスキャン順序に従った最後の非ゼロ係数の水平(列)座標のサフィックスを指定する。最後の非ゼロ係数の垂直座標のサフィックス情報は、last_sig_coeff_y_suffixで表され、現在ブロックの、予め設定されたスキャン順序に従った最後の非ゼロ係数の垂直(又は行)座標のサフィックスを指定する。
なお、last_sig_coeff_x_prefix及びlast_sig_coeff_x_suffixは、最後の非ゼロ係数の横座標(即ち水平座標)を指定する。last_sig_coeff_y_prefix和last_sig_coeff_y_suffixは、最後の非ゼロ係数の縦座標(即ち垂直座標)を指定する。それによって、最後の非ゼロ係数の座標情報を得る。
最後の非ゼロ係数の位置反転フラグ情報は、reverse_last_sig_coeff_flagで表されることができる。本出願の実施形態において、最後の非ゼロ係数の位置反転フラグ情報は、少なくとも、シーケンス(sequence)レベル、画像(picture)レベル、スライス(slice)レベル、及びブロック(block)レベルのうちの1つのフラグ情報であってもよく、さらに、より高いレベル(例えば、VUI、SEIなど)のフラグ情報であってもよい。それについては限定されない。
即ち、reverse_last_sig_coeff_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含んでもよく、本出願の実施形態では限定されない。
いくつかの実施形態において、当該方法は、
最後の非ゼロ係数の位置反転フラグ情報の値が第1の値である場合、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用するとを指示する、と特定すること、又は、
最後の非ゼロ係数の位置反転フラグ情報の値が第2の値である場合、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する、と特定すること、をさらに含むことができる。
即ち、第1の値が1であり、第2の値が0であることを例として、reverse_last_sig_coeff_flagの値が1である場合、reverse_last_sig_coeff_flagが現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する、と特定することができる。又は、reverse_last_sig_coeff_flagの値が0である場合、reverse_last_sig_coeff_flagが現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する、と特定することができる。
S903:最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を計算することにより、最後の非ゼロ係数の位置を特定する。
S904:予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定する。
なお、本出願の実施形態において、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在ブロックの右下隅までの水平距離及び垂直距離として特定することができる。
この場合、いくつかの実施形態では、最後の非ゼロ係数の座標情報を計算することにより、最後の非ゼロ係数の位置を特定することは、以下の内容を含むことができる。
現在ブロックの幅及び高さを特定する。
現在ブロックの幅から、最後の非ゼロ係数の位置から現在ブロックの右下隅までの水平距離を引くことにより、最後の非ゼロ係数の水平座標を取得する。
現在ブロックの高さから、最後の非ゼロ係数の位置から現在ブロックの右下隅までの垂直距離を引くことにより、最後の非ゼロ係数の垂直座標を取得する。
最後の非ゼロ係数の水平座標と、最後の非ゼロ係数の垂直座標とに基づいて、最後の非ゼロ係数の位置を特定する。
なお、最後の非ゼロ係数の座標情報は通常、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離である。通常ビデオでは、非ゼロ係数の大部は左上隅に集中し、右下隅の大部の領域はゼロ係数を有する。しかし、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化では、右下隅にも非ゼロ係数が多くあるため、最後の非ゼロ係数の座標情報の値が通常大きいである。この場合、オーバーヘッドを節約するために、係数符号化中に、座標変換(具体的に、座標反転計算であることができ、即ち、座標反転後の最後の非ゼロ係数の座標情報が、最後の非ゼロ係数の位置から現在ブロックの右下隅までの水平距離及び垂直距離である)を行う必要がある。その場合、係数復号化中に、座標反転計算を行う必要がある。再度反転された後、最後の非ゼロ係数の座標情報が、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離となるよう復元することができる。このように、最後の非ゼロ係数の位置を特定して、予め設定されたスキャン順序に従って、現在ブロック内の最後の非ゼロ係数の位置より前の全ての係数を復号化する。
なお、ここの現在ブロックは、zero-out変換がないブロックであってもよく、zero-out変換後のブロックであってもよい。zero-out変換後のブロックを例として、この場合、現在ブロックの幅は1<<log2ZoTbWidthであり、現在ブロックの高さは1<<log2ZoTbHeightである。reverse_last_sig_coeff_flagは、現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する(即ち、reverse_last_sig_coeff_flagの値が1である)場合、
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffXであり、
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffYである。
等式の右側の(LastSignificantCoeffX,LastSignificantCoeffY)は、復号化により得られた最後の非ゼロ係数の座標情報を表し、等式の左側の(LastSignificantCoeffX,LastSignificantCoeffY)は、最後の非ゼロ係数の位置(最後の非ゼロ係数の目標座標情報とみなすことができる)を表す。
本出願実施形態では、reverse_last_sig_coeff_flagの値が0である場合、いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離として特定する。
最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離に基づいて、最後の非ゼロ係数の位置を特定する。
なお、reverse_last_sig_coeff_flagが、現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する場合、復号化により得られた最後の非ゼロ係数の座標情報は、最後の非ゼロ係数の目標座標情報とみなされることができる。本出願の実施形態において、最後の非ゼロ係数の目標座標情報は、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離である。
また、いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する場合、最後の非ゼロ係数の座標情報に基づいて最後の非ゼロ係数の位置を直接に特定する。
予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定する。
なお、予め設定されたスキャン順序は、対角線順序、ジグザグ(Zigzag)順序、水平順序、垂直順序、4×4のサブブロックスキャン順序、又は、他の任意のスキャン順序であってもよく、本出願の実施形態では限定されない。
なお、reverse_last_sig_coeff_flagを取得した後、reverse_last_sig_coeff_flagの値が1である場合、最後の非ゼロ係数の位置反転が用いられる必要がある場合、最後の非ゼロ係数の座標情報を復号化で取得した後、最後の非ゼロ係数の座標情報を計算して、最後の非ゼロ係数の位置を特定する必要がある。次に、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化する。reverse_last_sig_coeff_flagの値が0である場合、即ち、最後の非ゼロ係数の位置反転が用いられる必要がない場合、最後の非ゼロ係数の座標情報を復号化で取得した後、最後の非ゼロ係数の座標情報に基づいて、最後の非ゼロ係数の位置を直接に特定することができる。次に、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化する。
このように、ある特定の状況では、本出願の実施形態は、係数符号化・復号化中に、最後の非ゼロ係数の位置の導出方法の補正を提供する。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。通常の状況では、図10Aに示されるように、最後の非ゼロ係数の位置の横座標、即ち、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離は、last_sig_coeff_x_prefix、last_sig_coeff_x_suffixで表され、符号化され、最後の非ゼロ係数の位置の縦座標、即ち、最後の非ゼロ係数の位置から現在ブロックの左上隅までの垂直距離は、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixで表され、符号化される。一方、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化の場合、最後の非ゼロ係数の位置は一般的に、現在ブロックの全ての可能な非ゼロ係数の領域の右下隅に近い。この場合、図10Bに示されるように、最後の非ゼロ係数の位置から現在ブロックの全ての可能な非ゼロ係数の領域の右下隅までの水平距離がlast_sig_coeff_x_prefix、last_sig_coeff_x_suffixで表され、符号化され、最後の非ゼロ係数の位置から現在ブロックの全ての可能な非ゼロ係数の領域の右下隅までの垂直距離がlast_sig_coeff_y_prefix、last_sig_coeff_y_suffixで表され、符号化される。例えば、現在ブロックの全ての可能な非ゼロ係数の領域は、(0,0)から((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)までの矩形領域である場合、last_sig_coeff_x_prefix、last_sig_coeff_x_suffixが符号化され、最後の非ゼロ係数の位置から現在ブロック((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)までの水平距離を表し、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixが符号化され、最後の非ゼロ係数の位置から現在ブロック((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)までの垂直距離を表す。
セマンティクス(semantics)への補正は以下の通りである。
現在ブロックにおいて、予め設定されたスキャン順序に従った最後の非ゼロ係数の水平(又は列)座標の値LastSignificantCoeffXは、以下の方法に基づいて導出される。
last_sig_coeff_x_suffixが存在しければ、LastSignificantCoeffX=last_sig_coeff_x_prefixである。
そうでなければ(last_sig_coeff_x_suffixが存在すれば)、LastSignificantCoeffX=(1<<((last_sig_coeff_x_prefix>>1)-1))*(2+(last_sig_coeff_x_prefix&1))+last_sig_coeff_x_suffixである。
reverse_last_sig_coeff_flagの値が1であれば、LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffXである。
現在ブロックにおいて、予め設定されたスキャン順序に従った最後の非ゼロ係数の垂直(又は行)座標の値LastSignificantCoeffYは、以下の方法に基づいて導出される。
last_sig_coeff_y_suffixが存在しければ、LastSignificantCoeffY=last_sig_coeff_y_prefixである。
そうでなければ(last_sig_coeff_y_suffixが存在すれば)、LastSignificantCoeffY=(1<<((last_sig_coeff_y_prefix>>1)-1))*(2+(last_sig_coeff_y_prefix&1))+last_sig_coeff_y_suffixである。
reverse_last_sig_coeff_flagの値が1であれば、LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffYである。
reverse_last_sig_coeff_flagは、最後の非ゼロ係数の位置反転フラグであり、最後の非ゼロ係数の位置を反転する必要があるか否かを示す。reverse_last_sig_coeff_flagの値が1であれば、最後の非ゼロ係数の位置を反転する必要があることを示し、そうでなければ、最後の非ゼロ係数の位置を反転する必要がないことを示す。
なお、reverse_last_sig_coeff_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含む。
また、reverse_last_sig_coeff_flagは他のいくつかのフラグに依存し得、例えば、高ビット深度フラグ情報又は高ビットレートフラグ情報などが挙げられる。即ち、高ビット深度フラグ情報又は高ビットレートフラグ情報の値が1である場合、reverse_last_sig_coeff_flagを復号化する必要があり、そうではない場合、reverse_last_sig_coeff_flagを復号化する必要がない。
一つの具体的な例において、シーケンスレベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するシーケンスレベルのフラグsps_high_bit_depth_flagがあると仮定する。sps_high_bit_depth_flagの値が1であれば、現在のビデオシーケンスが高ビット深度シーケンスであることを示し、そうでなければ、現在のビデオシーケンスが高ビット深度シーケンスではないことを示す。シーケンスレベルでは、sps_high_bit_depth_flagの値が1であれば、sps_reverse_last_sig_coeff_flagを復号化する必要がある。ここで、sps_reverse_last_sig_coeff_flagは現在シーケンスの最後の非ゼロ係数の位置反転フラグである。sps_reverse_last_sig_coeff_flagの値が1であれば、現在シーケンス内のブロックが最後の非ゼロ係数の位置反転を利用することを示し、そうでなければ(即ちsps_reverse_last_sig_coeff_flagの値が0であれば)、現在シーケンス内のブロックが最後の非ゼロ係数の位置反転を利用しないことを示す。上記シンタクス表におけるreverse_last_sig_coeff_flagがsps_reverse_last_sig_coeff_flagに変更される。
そのシンタクス要素は以下の通り(Sequence parameter set RBSP syntax)であり、表3を参照されたい。
他の具体的な例において、スライス(slice)レベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するスライスレベルのフラグsps_high_bit_depth_flagがあると仮定する。sps_high_bit_depth_flagの値が1であれば、現在のビデオシーケンスが高ビット深度シーケンスであることを示し、そうでなければ、現在のビデオシーケンスが高ビット深度シーケンスではないことを示す。sliceレベルでは、sps_high_bit_depth_flagの値が1であれば、sh_reverse_last_sig_coeff_flagを復号化する必要がある。ここで、sh_reverse_last_sig_coeff_flagは現在スライスの最後の非ゼロ係数の位置反転フラグである。sh_reverse_last_sig_coeff_flagの値が1であれば、現在スライス内のブロックが最後の非ゼロ係数の位置反転を利用することを示し、そうでなければ(即ちsh_reverse_last_sig_coeff_flagの値が0であれば)、現在スライス内のブロックが最後の非ゼロ係数の位置反転を利用しないことを示す。上記シンタクス表におけるreverse_last_sig_coeff_flagがsh_reverse_last_sig_coeff_flagに変更される。
そのシンタクス要素は以下の通り(Slice header syntax)であり、表4を参照されたい。
なお、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、復号化が必要である可能性のある係数を全て復号化する必要があるとデフォルトすることができる。即ち、最後の非ゼロの係数の位置がもはや利用されず、現在ブロックの全ての可能な非ゼロの係数が、予め設定されたスキャン順序に従ってスキャンされる。従って、本出願の実施形態には、現在ブロックが最後の係数位置を利用するか否かを特定するための最後の係数有効フラグ情報(last-coefficient enabled flag)が導入されることも可能である。
いくつかの実施形態において、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、当該方法は、以下の内容をさらに含むことができる。
ビットストリームを解析して、最後の係数有効フラグ情報を取得する。
最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用することを指示する場合、予め設定されたスキャン順序に従って、最後の係数位置より前の全ての係数を復号化して、現在ブロックの係数を特定する。
なお、最後の係数有効フラグ情報は、default_last_coeff_enabled_flagで表されることができる。本出願の実施形態において、最後の係数有効フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報であってもよく、さらに、より高いレベル(例えば、VUI、SEIなど)のフラグ情報であってもよい。それについては限定されない。
即ち、default_last_coeff_enabled_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含んでもよく、本出願の実施形態では限定されない。
いくつかの実施形態において、当該方法は、
最後の係数有効フラグ情報の値が第1の値である場合、最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用することを指示する、と特定すること、又は、
最後の係数有効フラグ情報の値が第2の値である場合、最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用しないことを指示する、と特定すること、をさらに含むことができる。
ここで、第1の値は1であり、第2の値は0である。
なお、別の具体的な例において、第1の値はtrueに設定されてもよく、第2の値はfalseに設定されてもよい。さらに他の具体的な例において、第1の値は0に設定されてもよく、第2の値は1に設定されてもよく、又は、第1の値はfalseに設定されてもよく、第2の値はtrueに設定されてもよい。それについては限定されない。
このように、第1の値が1であり、第2の値が0であることを例として、default_last_coeff_enabled_flagの値が1である場合、default_last_coeff_enabled_flagが現在ブロックが最後の係数位置を利用することを指示する、と特定することができる。又は、default_last_coeff_enabled_flagの値が0である場合、default_last_coeff_enabled_flagが現在ブロックが最後の係数位置を利用しないことを指示する、と特定することができる。
現在ブロックが最後の係数位置を利用する場合、予め設定されたスキャン順序に従って、最後の係数位置より前の全ての係数を復号化して、現在ブロックの係数を特定することができる。
さらに、現在ブロックが最後の係数位置を利用しない場合、即ち、最後の係数有効フラグ情報の値が0である場合、いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
ビットストリームを解析して、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を取得する。
最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報に基づいて、最後の非ゼロ係数の位置を特定する。
予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定する。
なお、現在ブロックが最後の係数位置を利用しない場合、最後の非ゼロ係数の位置を復号化して取得する必要がある。具体的に、ビットストリームを解析することにより、last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixを取得し、次に、last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixに基づいて、最後の非ゼロ係数の位置を特定する。そうではない場合、現在ブロックが最後の係数位置を利用する場合、もはや最後の非ゼロ係数の位置を特定する必要がなくなり、もはやlast_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixを復号化して取得する必要もなくなる。
なお、現在ブロックが最後の係数位置を利用する場合、予め設定されたスキャン順序に従って、最後の係数位置より前の全ての係数を復号化することができる。現在ブロックが最後の係数位置を利用しない場合、予め設定されたスキャン順序に従って最後の非ゼロ係数の位置より前の全ての係数を復号化することができる。ここで、予め設定されたスキャン順序は、対角線順序、ジグザグ順序、水平順序、垂直順序、4×4のサブブロックスキャン順序、又は、他の任意のスキャン順序であってもよく、本出願の実施形態では限定されない。
さらに、最後の係数位置については、いくつかの実施形態において、最後の係数位置は、現在ブロックにおける、全ての可能な非ゼロ係数からなる行列の右下隅であり、又は、最後の係数位置は、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする最後の位置である。
なお、本出願の実施形態における最後の係数位置は、最後の非ゼロ係数の位置を表さない。それは、最後の係数位置における係数が0である可能性があるが、最後の非ゼロ係数の位置における係数が必ず0ではないためである。
1つの特定の例において、当該方法は、最後の非ゼロ係数の位置を最後の係数位置に設定すること、をさらに含むことができる。
即ち、本出願の実施形態では、最後の非ゼロ係数の位置が依然として利用されることができ、この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定することが必要である。
また、最後の係数位置は、(LastCoeffX,LastCoeffY)で表されることができ、即ち、現在ブロックにおける、予め設定されたスキャン順序に従った全ての可能な非ゼロ係数の最後の位置である。いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
現在ブロックに対して予め設定された操作を行うことにより取得された変換ブロックの幅及び高さを特定する。
変換ブロックの幅及び高さに基づいて座標計算を行うことにより、変換ブロックの右下隅の座標情報を取得する。
変換ブロックの右下隅の座標情報に基づいて、最後の係数位置を特定する。
ここで、予め設定された操作は、少なくともゼロ設定(zero-out)操作を含む。
なお、(LastCoeffX,LastCoeffY)はzero-out後の変換ブロックの右下隅の座標情報を表す。(LastCoeffX,LastCoeffY)の導出方法は以下の通りである。
LastCoeffX=(1<<log2ZoTbWidth)-1であり、LastCoeffY=(1<<log2ZoTbHeight)-1である。
このように、default_last_coeff_enabled_flagの値が1である場合、(LastCoeffX,LastCoeffY)に基づいて最後の係数位置を特定することができる。
1つの特定の例において、最後の非ゼロ係数の位置が依然として利用される。この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能なゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定することができる。いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。最後の非ゼロ係数の位置を最後の係数位置に設定する際に、変換ブロックの右下隅の座標情報に基づいて、最後の非ゼロ係数の位置を特定する。
即ち、最後の非ゼロ係数の位置は、(LastSignificantCoeffX,LastSignificantCoeffY)で表されることができ、即ち、(LastSignificantCoeffX,LastSignificantCoeffY)の導出方法は以下の通りである。
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1であり、LastSignificantCoeffY=(1<<log2ZoTbHeight)-1である。
(LastSignificantCoeffX,LastSignificantCoeffY)はzero-out後の変換ブロックの右下隅の座標情報を表す。default_last_coeff_enabled_flagの値が1であれば、(LastSignificantCoeffX,LastSignificantCoeffY)に基づいて最後の非ゼロ係数の位置を特定することができる。
このように、ある特定の状況では、係数符号化・復号化中に、符号化・復号化が必要である可能性のある係数を全て符号化・復号化する必要があるとデフォルトする。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。符号化・復号化が必要である可能性のある係数を全て符号化・復号化する必要があるとデフォルトし、即ち、最後の非ゼロの係数の位置をもはや利用せず、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする。換言すれば、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、符号化・復号化が必要である最後の係数位置を設定する。この位置は、通常、現在ブロックにおける全ての可能な非ゼロ係数からなる行列の右下隅である。ここで、最後の非ゼロ係数の位置ではなく、符号化・復号化が必要である最後の係数位置を利用する。それは、符号化・復号化が必要である最後の係数位置における係数が0である可能性があるが、最後の非ゼロの係数位置における係数が必ず0ではないためである。
1つの特別な例において、依然として最後の非ゼロ係数の位置を利用する。この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定する。
また、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数を言及したのは、最後の非ゼロ係数以外に、他のいくつかの技術(例えば、上述したzero-outであってもよい)によれば、1つのブロックにおけるいくつかの係数が0であるとデフォルトするためである。
セマンティクスへの補正は表5に示される通りである。
本出願の実施形態では、最後の非ゼロ係数に必要な情報を復号化する前に条件を付加することができ、即ち、default_last_coeff_enabled_flagがfalseである(即ち、default_last_coeff_enabled_flagの値が0に等しい)場合、last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffixなどのシンタクス要素を復号化することが必要になる。default_last_coeff_enabled_flagがtrueである(即ち、default_last_coeff_enabled_flag値が1に等しい)場合、last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffixなどのシンタクス要素を復号化する必要がない。
ここで、default_last_coeff_enabled_flagは、デフォルトの最後の係数(default last coefficient)が用いられるか否かを指示するために用いられるデフォルトの最後の係数有効フラグである。default_last_coeff_enabled_flagの値が1である場合、デフォルトの最後の係数位置が用いられることを示し、即ち、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、復号化が必要である最後の係数位置を設定することを示す。そうではない場合、デフォルトの最後の係数位置が用いられないことを示す。
default_last_coeff_enabled_flagの値が1である場合、デフォルトの最後の係数位置(LastCoeffX,LastCoeffY)は、現在ブロックにおける、予め設定されたスキャン順序に従った全ての可能な非ゼロ係数の最後の位置である。予め設定されたスキャン順序に従って、(LastCoeffX,LastCoeffY)より前の係数を全てスキャンする必要がある。本出願の実施形態において、(LastCoeffX,LastCoeffY)の導出方法は以下の通りである。
LastCoeffX=(1<<log2ZoTbWidth)-1であり、LastCoeffY=(1<<log2ZoTbHeight)-1である。
(LastCoeffX,LastCoeffY)は、zero-out後の変換ブロックの右下隅の座標情報である。
1つの特別な例において、依然として最後の非ゼロ係数の位置を利用する。この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定する。本出願の実施形態において、最後の非ゼロ係数の位置(LastSignificantCoeffX,LastSignificantCoeffY)の導出方法は以下の通りである。
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1であり、LastSignificantCoeffY=(1<<log2ZoTbHeight)-1である。
(LastSignificantCoeffX,LastSignificantCoeffY)は、zero-out後の変換ブロックの右下隅の座標情報である。
なお、default_last_coeff_enabled_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含む。
また、default_last_coeff_enabled_flagは他のいくつかのフラグに依存し得、例えば、高ビット深度フラグ情報又は高ビットレートフラグ情報などが挙げられる。即ち、高ビット深度フラグ情報又は高ビットレートフラグ情報の値が1である場合、default_last_coeff_enabled_flagを復号化する必要があり、そうではない場合、default_last_coeff_enabled_flagを復号化する必要がない。
一つの具体的な例において、シーケンスレベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するシーケンスレベルのフラグsps_high_bit_depth_flagがあると仮定する。sps_high_bit_depth_flagの値が1であれば、現在のビデオシーケンスが高ビット深度シーケンスであることを示し、そうでなければ、現在のビデオシーケンスが高ビット深度シーケンスではないことを示す。シーケンスレベルでは、sps_high_bit_depth_flagの値が1であれば、sps_default_last_coeff_enabled_flagを復号化する必要がある。ここで、sps_default_last_coeff_enabled_flagは、現在シーケンスのデフォルトの最後の係数有効フラグである。sps_default_last_coeff_enabled_flagの値が1であれば、現在シーケンス内のブロックがデフォルトの最後の係数を利用することを示し、そうでなければ(即ち、sps_default_last_coeff_enabled_flagの値が0であれば)、現在シーケンス内のブロックがデフォルトの最後の係数を利用しないことを示す。上記シンタクス表におけるdefault_last_coeff_enabled_flagがsps_default_last_coeff_enabled_flagに変更される。
そのシンタクス要素は以下の通り(Sequence parameter set RBSP syntax)であり、表6を参照されたい。
他の具体的な例において、スライス(slice)レベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するスライスレベルのフラグsps_high_bit_depth_flagがあると仮定する。sps_high_bit_depth_flagの値が1であれば、現在のビデオシーケンスが高ビット深度シーケンスであることを示し、そうでなければ、現在のビデオシーケンスが高ビット深度シーケンスではないことを示す。sliceレベルでは、sps_high_bit_depth_flagの値が1であれば、sh_default_last_coeff_enabled_flagを復号化する必要がある。ここで、sh_default_last_coeff_enabled_flagは現在スライスのデフォルトの最後の係数有効フラグである。sh_default_last_coeff_enabled_flagの値が1であれば、現在スライス内のブロックがデフォルトの最後の係数を利用することを示し、そうでなければ(即ち、sh_default_last_coeff_enabled_flagの値が0であれば)、現在スライス内のブロックがデフォルトの最後の係数を利用しないことを示す。上記シンタクス表におけるdefault_last_coeff_enabled_flagがsh_default_last_coeff_enabled_flagに変更される。
そのシンタクス要素は以下の通り(Slice header syntax)であり、表7を参照されたい。
なお、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、スキャンされたサブブロックはいずれもデフォルトで復号化される必要があり、この場合、ビットストリームでsb_coded_flagを伝送する必要がなく、即ち、符号器及び復号器はいずれも、そのフラグを処理する必要がなく、復号化の速度を向上させる。従って、本出願の実施形態には、現在ブロック内の復号化待ちのサブブロックが復号化されるとデフォルトするか否かを特定するために用いられるサブブロックデフォルト復号化フラグ情報(default sub-block coded flag)がさらに導入されることができる。
いくつかの実施形態において、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、当該方法は、以下の内容をさらに含むことができる。
ビットストリームを解析して、サブブロックデフォルト復号化フラグ情報を取得する。
サブブロックデフォルト復号化フラグ情報が現在ブロック内の復号化待ちのサブブロックが復号化されるとデフォルトすることを指示する場合、サブブロック復号化フラグ情報の値が第1の値であると特定し、復号化待ちのサブブロック内の全ての係数を復号化する。
なお、サブブロックデフォルト復号化フラグ情報は、default_sb_coded_flagで表されることができる。本出願の実施形態において、サブブロックデフォルト復号化フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報であり、さらに、より高いレベル(例えば、VUI、SEIなど)のフラグ情報であってもよい。それについては限定されない。
即ち、default_sb_coded_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含んでもよく、本出願の実施形態では限定されない。
いくつかの実施形態において、当該方法は、
サブブロックデフォルト復号化フラグ情報の値が第1の値である場合、サブブロックデフォルト復号化フラグ情報が復号化待ちのサブブロックが復号化されるとデフォルトすることを指示する、と特定すること、又は、
サブブロックデフォルト復号化フラグ情報の値が第2の値である場合、サブブロックデフォルト復号化フラグ情報が復号化待ちのサブブロックが復号化されるとデフォルトしないことを指示する、と特定すること、をさらに含むことができる。
ここで、第1の値は1であり、第2の値は0である。
なお、別の具体的な例において、第1の値はtrueに設定されてもよく、第2の値はfalseに設定されてもよい。さらに他の具体的な例において、第1の値は0に設定されてもよく、第2の値は1に設定されてもよく、又は、第1の値はfalseに設定されてもよく、第2の値はtrueに設定されてもよい。それについては限定されない。
このように、第1の値が1であり、第2の値が0であることを例として、default_sb_coded_flagの値が1である場合、default_sb_coded_flagが復号化待ちのサブブロックが復号化される必要があるとデフォルトすることを指示すること、と特定することができる。又は、default_sb_coded_flagの値が0である場合、default_sb_coded_flagが復号化待ちのサブブロックが復号化される必要があるとデフォルトしないことを指示すること、と特定することができる。
復号化待ちのサブブロックが復号化される必要があるとデフォルトする場合、default_sb_coded_flagの値が1であり、それは、sb_coded_flagの値が1であり、即ち、sb_coded_flagを復号化する必要がないことを意味する。この場合、復号化待ちのサブブロック内の全ての係数を復号化する必要があるとデフォルトする。
また、復号化待ちのサブブロックが復号化される必要があるとデフォルトしない場合、即ち、default_sb_coded_flagの値が0である場合、いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
ビットストリームを解析して、サブブロック復号化フラグ情報を取得する。
サブブロック復号化フラグ情報の値が第1の値である場合、復号化待ちのサブブロック内の全ての係数を復号化する。
なお、復号化待ちのサブブロックが復号化される必要があるとデフォルトしない場合、サブブロック復号化フラグ情報を復号化して取得する必要があり、次に、サブブロック復号化フラグ情報に応じて、復号化待ちのサブブロック内の全ての係数を復号化するか否かを特定する。
また、サブブロック復号化フラグ情報について、当該方法は、
サブブロック復号化フラグ情報の値が第1の値である場合、復号化待ちのサブブロック内の全ての係数を復号化すると特定すること、又は、
サブブロック復号化フラグ情報の値が第2の値である場合、復号化待ちのサブブロック内の全ての係数がゼロであると特定すること、をさらに含むことができる。
本出願の実施形態では、サブブロック復号化フラグ情報は、sb_coded_flagで表されることができる。第1の値が1であり、第2の値が0であることを例として、sb_coded_flagの値が1である場合、復号化待ちのサブブロック内の全ての係数を復号化する必要があると特定することができる。又は、sb_coded_flagの値が0である場合、復号化待ちのサブブロック内の全ての係数を復号化する必要がないと特定することができる。この場合、復号待ちのサブブロック内の係数は全てゼロである。
このように、ある特定の状況では、係数符号化・復号化中に、スキャンされたサブブロックがいずれも符号化・復号化される必要があるとデフォルトし、換言すれば、スキャンされたサブブロックはいずれも非ゼロ係数を含むとデフォルトする。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。この場合、非ゼロ係数が多く、スキャンされたサブブロックのほとんどが符号化・復号化される必要があり、換言すれば、スキャンされたサブブロックのほとんどは非ゼロ係数を含む。このように、sb_coded_flagをビットストリームで伝送する必要がなくなり、符号器/復号器は、そのフラグを処理する必要がなく、符号化・復号化の速度を向上させることができる。また、ほとんど存在しないフラグが除去されるため、このとき、わずかながら圧縮性能を向上させる。
セマンティクスへの補正は表8に示される通りである。
default_sb_coded_flagは、サブブロックが復号化される必要があるとデフォルトするか否かを指示するフラグである。default_sb_coded_flagの値が1である場合、sb_coded_flag[xS][yS]の値が1であると特定することができ、この場合、ビットストリームからsb_coded_flag[xS][yS]を復号化する必要がない。そうではない場合(default_sb_coded_flagの値が0である場合)、依然としてビットストリームからsb_coded_flag[xS][yS]を復号化する必要がある。
なお、default_sb_coded_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含む。
default_sb_coded_flagは他のいくつかのフラグに依存し得、例えば、高ビット深度フラグ情報又は高ビットレートフラグ情報などが挙げられる。即ち、高ビット深度フラグ情報又は高ビットレートフラグ情報の値が1である場合、default_sb_coded_flagを復号化する必要があり、そうではない場合、default_sb_coded_flagを復号化する必要がない。
一つの具体的な例において、シーケンスレベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するシーケンスレベルのフラグsps_high_bit_depth_flagがあると仮定する。sps_high_bit_depth_flagの値が1であれば、現在のビデオシーケンスが高ビット深度シーケンスであることを示し、そうでなければ、現在のビデオシーケンスが高ビット深度シーケンスではないことを示す。シーケンスレベルでは、sps_high_bit_depth_flagの値が1であれば、sps_default_sb_coded_flagを復号化する必要がある。ここで、sps_default_sb_coded_flagは、現在シーケンスの、サブブロックが復号化される必要があるとデフォルトするか否かを指示するフラグである。sps_default_sb_coded_flagの値が1であれば、現在シーケンス内のブロックのサブブロックが復号化される必要があるとデフォルトすることを示し、そうでなければ(即ちsps_default_sb_coded_flagの値が0であれば)、現在シーケンス内のブロックのサブブロックが復号化される必要があるとデフォルトしないことを示す。上記シンタクス表におけるdefault_sb_coded_flagがsps_default_sb_coded_flagに変更される。
そのシンタクス要素は以下の通り(Sequence parameter set RBSP syntax)であり、表9を参照されたい。
他の具体的な例において、スライス(slice)レベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するスライスレベルのフラグsps_high_bit_depth_flagがあると仮定する。sps_high_bit_depth_flagの値が1であれば、現在のビデオシーケンスが高ビット深度シーケンスであることを示し、そうでなければ、現在のビデオシーケンスが高ビット深度シーケンスではないことを示す。sliceレベルでは、sps_high_bit_depth_flagの値が1であれば、sh_default_sb_coded_flagを復号化する必要がある。ここで、sh_default_sb_coded_flagは、現在スライスの、サブブロックが復号化される必要があるとデフォルトするか否かを指示するフラグである。sh_default_sb_coded_flagの値が1であれば、現在スライス内のブロックのサブブロックが復号化される必要があるとデフォルトすることを示し、そうでなければ(即ちsh_default_sb_coded_flagの値が0であれば)、現在スライス内のブロックのサブブロックが復号化される必要があるとデフォルトしないことを示す。上記シンタクス表におけるdefault_sb_coded_flagがsh_default_sb_coded_flagに変更される。
そのシンタクス要素は以下の通り(Slice header syntax)であり、表10を参照されたい。
なお、本出願の実施形態は3つの最適化方法に関し、その3つの最適化方法はそれぞれ以下の通りである。
方法1は以下の通りである。ある特定の状況では、係数符号化・復号化中に、符号化・復号化が必要である可能性のある係数を全て符号化・復号化する必要があるとデフォルトする。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。符号化・復号化が必要である可能性のある係数を全て符号化・復号化する必要があるとデフォルトし、即ち、最後の非ゼロの係数の位置をもはや利用せず、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする。換言すれば、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、符号化・復号化が必要である最後の係数位置を設定する。ここで、最後の非ゼロ係数の位置ではなく、符号化・復号化が必要である最後の係数位置を利用する。それは、符号化・復号化が必要である最後の係数位置における係数が0である可能性があるが、最後の非ゼロの係数位置における係数が必ず0ではないためである。
また、1つの特定の例において、最後の非ゼロ係数の位置が依然として利用され、この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定する。
方法2は以下の通りである。ある特定の状況では、係数符号化・復号化中に、最後の非ゼロ係数の位置の導出方法を補正する。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。通常の状況では、最後の非ゼロ係数の位置の横座標、即ち、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離は、last_sig_coeff_x_prefix、last_sig_coeff_x_suffixで表され、符号化され、最後の非ゼロ係数の位置の縦座標、即ち、最後の非ゼロ係数の位置から現在ブロックの左上隅までの垂直距離は、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixで表され、符号化される。一方、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化の場合、最後の非ゼロ係数の位置は一般的に、現在ブロックの全ての可能な非ゼロ係数の領域の右下隅に近い。この場合、最後の非ゼロ係数の位置から現在ブロックの全ての可能な非ゼロ係数の領域の右下隅までの水平距離がlast_sig_coeff_x_prefix、last_sig_coeff_x_suffixで表され、符号化され、最後の非ゼロ係数の位置から現在ブロックの全ての可能な非ゼロ係数の領域の右下隅までの垂直距離がlast_sig_coeff_y_prefix、last_sig_coeff_y_suffixで表され、符号化される。例えば、現在ブロックの全ての可能な非ゼロ係数の領域は、(0,0)から((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)までの矩形領域である場合、last_sig_coeff_x_prefix、last_sig_coeff_x_suffixが符号化され、最後の非ゼロ係数の位置から現在ブロック((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)までの水平距離を表し、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixが符号化され、最後の非ゼロ係数の位置から現在ブロック((1<<log2ZoTbWidth)-1,(1<<log2ZoTbHeight)-1)までの垂直距離を表す。
方法3は以下の通りである。ある特定の状況では、係数符号化・復号化中に、スキャンされたサブブロックがいずれも符号化・復号化される必要があるとデフォルトし、換言すれば、スキャンされたサブブロックはいずれも非ゼロ係数を含むとデフォルトする。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。この場合、非ゼロ係数が多く、スキャンされたサブブロックのほとんどが符号化・復号化される必要があり、換言すれば、スキャンされたサブブロックのほとんどは非ゼロ係数を含む。この場合、sb_coded_flagをビットストリームで伝送する必要がなくなり、符号器/復号器は、そのフラグを処理する必要がない。
上記3つの方法に対して、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化のシナリオでは、係数分布規則が通常ビデオのシナリオとは異なるため、係数符号化・復号化中に、コンテキストモードで符号化・復号化されるシンタクス要素の数を削減又は除去し、例えば、最後の非ゼロ係数の位置、サブブロック符号化・復号化フラグなどのシンタクス要素が挙げられ、それにより、係数符号化・復号化のスループット及び符号化・復号化の速度を向上させることができる。また、上記フラグが、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化において、役割が小さいため、これらのフラグを利用しないことは、圧縮効率を低下させることなく、代わりに、圧縮効率をある程度向上させることができる。
その他、本出願の実施形態において、シーケンスレベルを例として、現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するシーケンスレベルのフラグsps_high_bit_depth_flagは、現在のビデオシーケンスが高ビットレートシーケンスであるか否かを指示するsps_high_bit_rate_flagに置き換えられてもよく、さらに、高ビット深度、高ビットレート、高品質、又は可逆符号化などを指示する他のフラグに置き換えられてもよい。
なお、本出願の実施形態の係数復号化方法はいずれも、技術案がビデオにおける全てのコンポーネントに用いられるという例に基づいて説明され、全てのコンポーネントは、RGBフォーマットのビデオにおけるR、G、B、又は、YUVフォーマットのビデオにおけるY、U、V(Y、Cb、Cr)などを指す。本出願の実施形態の係数復号化方法は、1つのコンポーネントのみに適用されてもよく、例えば、YUVフォーマットのYコンポーネントのみに適用される。本出願の実施形態の係数復号化方法は、各コンポーネントのそれぞれに適用されることもでき、即ち、各コンポーネントのそれぞれに適用されるか否かを制御することも可能である。
本実施形態では、復号器に適用される係数復号化方法が提供される。ビットストリームを解析して、ビデオフラグ情報を取得する。ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、ビットストリームを解析して、最後の非ゼロ係数の位置反転フラグ情報と最後の非ゼロ係数の座標情報とを取得する。最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を計算することにより、最後の非ゼロ係数の位置を特定する。予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定する。このように、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化のシナリオでは、係数分布規則が通常ビデオのシナリオとは異なるため、係数符号化・復号化中に、コンテキストモードで符号化・復号化されるシンタクス要素の数を削減又は除去し、例えば、最後の非ゼロ係数の位置、サブブロック符号化・復号化フラグなどのシンタクス要素が挙げられ、さらに、最後の非ゼロ係数の座標情報の値が大きい場合に座標変換を行うことにより、ビットストリームにおける符号化・復号化によるオーバーヘッドを低減し、係数符号化・復号化のスループット及び符号化・復号化の速度を向上させることができる。また、削減又は除去されるシンタクス要素が、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化において、影響が小さいため、圧縮効率を向上させることもできる。
本出願の他の実施形態において、図11を参照すると、図11は、本出願の実施形態に係る係数符号化方法を示すフローチャートである。図11に示されるように、当該方法は以下の内容を含むことができる。
S1101:ビデオフラグ情報と、最後の非ゼロ係数の位置とを特定する。
S1102:ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、最後の非ゼロ係数の位置反転フラグ情報を特定する。
S1103:最後の非ゼロ係数の位置と、最後の非ゼロ係数の位置反転フラグ情報とに基づいて、最後の非ゼロ係数の座標情報を特定する。
S1104:予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の非ゼロ係数の座標情報とをビットストリームに書き込む。
なお、本出願の実施形態の係数符号化方法は、符号器に適用される。具体的に、図8Aに示される符号器100の構造に基づいて、本出願の実施形態の係数符号化方法は、主に符号器100における「エントロピー符号化ユニット115」に適用される。当該エントロピー符号化ユニット115は、コンテキストモデルに基づく適応2値算術符号化・復号化モード又はバイパスモードを利用して、関連フラグ情報(又は、シンタクス要素)をエントロピー符号化し、次に、ビットストリームに書き込むことができる。
なお、ビデオ規格に一般的に述べられている係数符号化・復号化は、符号化及び復号化という2つの部分を含むことができるため、係数符号化・復号化は、符号器側の係数符号化方法と復号器側の係数復号化方法とを含む。本出願の実施形態は符号器側の係数符号化方法について述べられる。
通常の状況では、通常ビデオに対して、係数符号化方法は、関連技術における既存方法と同じである。しかし、高ビット深度、高品質、高ビットレート、又は可逆圧縮のビデオ符号化・復号化のシナリオなどの特定の状況に対して、本出願の実施形態では、最終的な非ゼロ係数の位置の導出方法を補正することができる。この場合、本出願の実施形態には、ビデオフラグ情報と最後の非ゼロ係数の位置反転フラグ情報とが導入される必要があり、それによって、最後の非ゼロ係数の位置を特定し、次に、予め設定されたスキャン順序に従って、現在ブロック内の最後の非ゼロ係数の位置より前の全ての係数を符号化する。
本出願の実施形態において、まず、現在のビデオが予め設定された条件を満たすか否かを判断する必要があり、ビデオフラグ情報で表すことができる。いくつかの実施形態において、ビデオフラグ情報を特定することは、
ビデオが予め定められた条件を満たす場合、ビデオフラグ情報の値が第1の値であると特定すること、又は、
ビデオが予め定められた条件を満たさない場合、ビデオフラグ情報の値が第2の値であると特定すること、を含むことができる。
ここで、第1の値は1であり、第2の値は0である。
なお、別の具体的な例において、第1の値はtrueに設定されてもよく、第2の値はfalseに設定されてもよい。さらに他の具体的な例において、第1の値は0に設定されてもよく、第2の値は1に設定されてもよく、又は、第1の値はfalseに設定されてもよく、第2の値はtrueに設定されてもよい。それについては限定されない。
なお、予め定められた条件は、少なくとも、高ビット深度、高品質、高ビットレート、高フレームレート及び可逆圧縮のうちの1つを含む。
また、ビデオフラグ情報は、シーケンスレベルのフラグであってもよく、さらに、レベルがより高いフラグ(例えば、VUI、SEI)などであってもよい。ビデオが予め設定された条件を満たすか否かの判断は、当該ビデオが高ビット深度を満たすか否か、ビデオが高ビットレートを満たすか否か、ビデオが高品質を満たすか否か、ビデオが可逆圧縮を満たすか否か等を判断することにより行うことが可能であるが、以下、これらの4つの場合を例としてそれぞれ説明する。
いくつかの実施形態において、ビデオフラグ情報が高ビット深度フラグ情報である場合、当該方法は、
ビデオが高ビット深度を満たす場合、高ビット深度フラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定することをさらに含むことができる。
いくつかの実施形態において、ビデオフラグ情報が高ビットレートフラグ情報である場合、当該方法は、
ビデオが高ビットレートを満たす場合、高ビットレートフラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定することをさらに含むことができる。
いくつかの実施形態において、ビデオフラグ情報が高品質フラグ情報である場合、当該方法は、
ビデオが高品質を満たす場合、高品質フラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定することをさらに含むことができる。
いくつかの実施形態において、ビデオフラグ情報が可逆圧縮フラグ情報である場合、当該方法は、
ビデオが可逆圧縮を満たす場合、可逆圧縮フラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定することをさらに含むことができる。
例えば、シーケンスレベルを例として、ビデオフラグ情報は、高ビット深度フラグ情報(sps_high_bit_depth_flagで表す)であってもよく、それは現在のビデオシーケンスが高ビット深度シーケンスであるか否かを指示するために用いられる。又は、ビデオフラグ情報は、高ビットレートフラグ情報(sps_high_bit_rate_flagで表す)であってもよく、それは現在のビデオシーケンスが高ビットレートシーケンスであるか否かを指示するために用いられる。又は、フラグ情報は、高ビット深度、高ビットレート、高品質、又は可逆圧縮を指示する他のフラグ情報であってもよく、本出願の実施形態では具体的に限定されない。
また、最後の非ゼロ係数の位置反転フラグ情報について、最後の非ゼロ係数の位置反転フラグ情報を特定することは、
現在ブロックが最後の非ゼロ係数の位置反転を利用する場合、最後の非ゼロ係数の位置反転フラグ情報の値が第1の値であると特定すること、又は、
現在ブロックが最後の非ゼロ係数の位置反転を利用しない場合、最後の非ゼロ係数の位置反転フラグ情報の値が第2の値であると特定すること、を含むことができる。
本出願の実施形態において、最後の非ゼロ係数の位置反転フラグ情報は、reverse_last_sig_coeff_flagで表されることができる。ここで、最後の非ゼロ係数の位置反転フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報であってもよく、さらに、より高いレベル(例えば、VUI、SEIなど)のフラグ情報であってもよい。それについては限定されない。
即ち、reverse_last_sig_coeff_flagは、シーケンスレベル以上のフラグであってもよく、画像レベルのフラグ、スライスレベルのフラグ、ブロックレベルのフラグ又はその他のレベルのフラグであってもよい。また、ブロックレベルのフラグは、LCUレベルのフラグ、CUレベルのフラグ、又はその他のブロックレベルのフラグを含んでもよく、本出願の実施形態では限定されない。
このように、第1の値が1であり、第2の値が0であることを例として、現在ブロックが最後の非ゼロ係数の位置反転を利用すると特定する場合、reverse_last_sig_coeff_flagの値が1となる。又は、現在ブロックが最後の非ゼロ係数の位置反転を利用しないと特定する場合、reverse_last_sig_coeff_flagの値が0となる。
また、最後の非ゼロ係数の位置は、最後の非ゼロ係数の初期水平座標及び初期垂直座標を含むことができる。初期水平座標は、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離であり、且つ、初期垂直座標は、最後の非ゼロ係数の位置から現在ブロックの左上隅までの垂直距離である場合、最後の非ゼロ係数の位置と、最後の非ゼロ係数の位置反転フラグ情報とに基づいて、最後の非ゼロ係数の座標情報を特定することは、
最後の非ゼロ係数の位置反転フラグ情報の値が第1の値である場合、最後の非ゼロ係数の初期水平座標及び初期垂直座標に基づいて計算を行うことにより、最後の非ゼロ係数の座標情報を特定すること、又は、
最後の非ゼロ係数の位置反転フラグ情報の値が第2の値である場合、最後の非ゼロ係数の初期水平座標及び初期垂直座標に基づいて、最後の非ゼロ係数の座標情報を直接に特定すること、を含むことができる。
換言すれば、いくつかの実施形態において、当該方法は、
最後の非ゼロ係数の位置反転フラグ情報の値が第1の値である場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在のブロックの右下隅までの水平距離及び垂直距離として特定すること、又は、
最後の非ゼロ係数の位置反転フラグ情報の値が第2の値である場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在のブロックの左上隅までの水平距離及び垂直距離として特定すること、をさらに含むことができる。
即ち、最後の非ゼロ係数の座標情報は通常、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離である。通常ビデオでは、非ゼロ係数の大部は左上隅に集中し、右下隅の大部の領域はゼロ係数を有する。しかし、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化では、右下隅にも非ゼロ係数が多くあるため、最後の非ゼロ係数の座標情報の値が通常大きいである。この場合、オーバーヘッドを節約するために、係数符号化中に、座標変換(具体的に、座標反転計算であることができ、即ち、座標反転後の最後の非ゼロ係数の座標情報が、最後の非ゼロ係数の位置から現在ブロックの右下隅までの水平距離及び垂直距離である)を行う必要がある。その場合、復号器では、係数復号化中に、座標反転計算を行う必要がある。再度反転された後、最後の非ゼロ係数の座標情報が、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離となるよう復元することができる。このように、最後の非ゼロ係数の位置を特定する。
また、いくつかの実施形態において、最後の非ゼロ係数の初期水平座標及び初期垂直座標に基づいて計算を行うことにより、最後の非ゼロ係数の座標情報を特定することは、以下の内容を含むことができる。
現在ブロックの幅及び高さを特定する。
現在ブロックの幅から、最後の非ゼロ係数の初期水平座標を引くことにより、最後の非ゼロ係数の水平座標を取得する。現在ブロックの高さから、最後の非ゼロ係数の初期垂直座標を引くことにより、最後の非ゼロ係数の垂直座標を取得する。
最後の非ゼロ係数の水平座標と、最後の非ゼロ係数の垂直座標とに基づいて、最後の非ゼロ係数の座標情報を特定する。
なお、ここの現在ブロックは、zero-out変換がないブロックであってもよく、zero-out変換後のブロックであってもよい。zero-out変換後のブロックを例として、この場合、現在ブロックの幅は1<<log2ZoTbWidthであり、現在ブロックの高さは1<<log2ZoTbHeightである。reverse_last_sig_coeff_flagは、最後の非ゼロ係数の位置反転が利用されることを指示する(即ち、reverse_last_sig_coeff_flagの値が1である)場合、
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1-LastSignificantCoeffXであり、
LastSignificantCoeffY=(1<<log2ZoTbHeight)-1-LastSignificantCoeffYである。
等式の右側の(LastSignificantCoeffX,LastSignificantCoeffY)は、直接に特定された最後の非ゼロ係数の座標情報(即ち、最後の非ゼロ係数の初期水平座標及び初期垂直座標)を表し、等式の左側の(LastSignificantCoeffX,LastSignificantCoeffY)は、座標反転後に得られる最後の非ゼロ係数の座標情報(即ち、現在ブロックが最後の非ゼロ係数の反転を利用する場合、ビットストリームに書き込まれる最後の非ゼロ係数の座標情報である)を表す。
いくつかの実施形態では、最後の非ゼロ係数の座標情報をビットストリームに書き込むことは、以下の内容を含むことができる。
最後の非ゼロ係数の座標情報に基づいて、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を特定する。
最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報をビットストリームに書き込む。
なお、最後の非ゼロ係数の水平座標のプレフィックス情報は、last_sig_coeff_x_prefixで表される。最後の非ゼロ係数の垂直座標のプレフィックス情報は、last_sig_coeff_y_prefixで表される。最後の非ゼロ係数の水平座標のサフィックス情報は、last_sig_coeff_x_suffixで表される。最後の非ゼロ係数の垂直座標のサフィックス情報は、last_sig_coeff_y_suffixで表される。last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixをビットストリームに書き込む。それによって、復号器は、ビットストリームを解析することにより、最後の非ゼロ係数の座標情報を特定することができる。
このように、本出願の実施形態は、最後の非ゼロ係数の位置の導出方法の補正を提供する。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。通常の状況では、図10Aに示されるように、最後の非ゼロ係数の位置の横座標、即ち、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離は、last_sig_coeff_x_prefix、last_sig_coeff_x_suffixで表され、符号化され、最後の非ゼロ係数の位置の縦座標、即ち、最後の非ゼロ係数の位置から現在ブロックの左上隅までの垂直距離は、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixで表され、符号化される。一方、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化の場合、最後の非ゼロ係数の位置は一般的に、現在ブロックの全ての可能な非ゼロ係数の領域の右下隅に近い。この場合、図10Bに示されるように、最後の非ゼロ係数の位置から現在ブロックの全ての可能な非ゼロ係数の領域の右下隅までの水平距離がlast_sig_coeff_x_prefix、last_sig_coeff_x_suffixで表され、符号化され、最後の非ゼロ係数の位置から現在ブロックの全ての可能な非ゼロ係数の領域の右下隅までの垂直距離がlast_sig_coeff_y_prefix、last_sig_coeff_y_suffixで表され、符号化される。従って、本出願の実施形態に、reverse_last_sig_coeff_flagが導入されることで、ビットストリームで比較的に大きな値を符号化することによる比較的に大きなオーバーヘッドの問題を解決することができる。
また、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、符号化が必要である可能性のある係数を全て符号化する必要があるとデフォルトすることができる。即ち、最後の非ゼロの係数の位置がもはや利用されず、現在ブロックの全ての可能な非ゼロの係数が、予め設定されたスキャン順序に従ってスキャンされる。従って、本出願の実施形態には、現在ブロックが最後の係数位置を利用するか否かを特定するための最後の係数有効フラグ情報が導入されることも可能である。
いくつかの実施形態において、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、当該方法は、以下の内容をさらに含むことができる。
最後の係数有効フラグ情報を特定する。
最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用することを指示する場合、予め設定されたスキャン順序に従って、最後の係数位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の係数有効フラグ情報とをビットストリームに書き込む。
なお、最後の係数有効フラグ情報は、default_last_coeff_enabled_flagで表されることができる。本出願の実施形態において、最後の係数有効フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報であってもよく、さらに、より高いレベル(例えば、VUI、SEIなど)のフラグ情報であってもよい。それについては限定されない。
なお、最後の係数有効フラグ情報について、いくつかの実施形態では、最後の係数有効フラグ情報を特定することは、
現在ブロックが最後の係数位置を利用する場合、最後の係数有効フラグ情報の値が第1の値であると特定すること、又は、現在ブロックが最後の係数位置を利用しない場合、最後の係数有効フラグ情報の値が第2の値であると特定すること、を含むことができる。
即ち、第1の値が1であり、第2の値が0であることを例として、現在ブロックが最後の係数位置を利用する場合、default_last_coeff_enabled_flagの値が1となる。又は、現在ブロックが最後の係数位置を利用しない場合、default_last_coeff_enabled_flagの値が0となる。
また、最後の係数位置について、いくつかの実施形態において、最後の係数位置は、現在ブロックにおける、全ての可能な非ゼロ係数からなる行列の右下隅であり、又は、最後の係数位置は、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする最後の位置である。
なお、本出願の実施形態における最後の係数位置は、最後の非ゼロ係数の位置を表さない。それは、最後の係数位置における係数が0である可能性があるが、最後の非ゼロ係数の位置における係数が必ず0ではないためである。
1つの特定の例において、当該方法は、最後の非ゼロ係数の位置を最後の係数位置に設定すること、をさらに含むことができる。
即ち、本出願の実施形態では、最後の非ゼロ係数の位置が依然として利用されることができ、この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定することが必要である。
また、最後の係数位置は、(LastCoeffX,LastCoeffY)で表されることができ、即ち、現在ブロックにおける、予め設定されたスキャン順序に従った全ての可能な非ゼロ係数の最後の位置である。いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
現在ブロックに対して予め設定された操作を行うことにより取得された変換ブロックの幅及び高さを特定する。
変換ブロックの幅及び高さに基づいて座標計算を行うことにより、変換ブロックの右下隅の座標情報を取得する。
変換ブロックの右下隅の座標情報に基づいて、最後の係数位置を特定する。
ここで、予め設定された操作は、少なくともゼロ設定操作を含む。
なお、(LastCoeffX,LastCoeffY)はzero-out後の変換ブロックの右下隅の座標情報を表す。(LastCoeffX,LastCoeffY)の導出方法は以下の通りである。
LastCoeffX=(1<<log2ZoTbWidth)-1であり、LastCoeffY=(1<<log2ZoTbHeight)-1である。
このように、default_last_coeff_enabled_flagの値が1である場合、(LastCoeffX,LastCoeffY)に基づいて最後の係数位置を特定することができる。
1つの特定の例において、最後の非ゼロ係数の位置が依然として利用される。この場合、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能なゼロ係数の最後の位置に、最後の非ゼロ係数の位置を設定することができる。いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。最後の非ゼロ係数の位置を最後の係数位置に設定する際に、変換ブロックの右下隅の座標情報に基づいて、最後の非ゼロ係数の位置を特定する。
即ち、最後の非ゼロ係数の位置は、(LastSignificantCoeffX,LastSignificantCoeffY)で表されることができ、即ち、(LastSignificantCoeffX,LastSignificantCoeffY)の導出方法は以下の通りである。
LastSignificantCoeffX=(1<<log2ZoTbWidth)-1であり、LastSignificantCoeffY=(1<<log2ZoTbHeight)-1である。
(LastSignificantCoeffX,LastSignificantCoeffY)はzero-out後の変換ブロックの右下隅の座標情報を表す。default_last_coeff_enabled_flagの値が1であれば、(LastSignificantCoeffX,LastSignificantCoeffY)に基づいて最後の非ゼロ係数の位置を特定することができる。
また、現在ブロックが最後の係数位置を利用しない場合、即ち、最後の係数有効フラグ情報の値が0である場合、いくつかの実施形態において、当該方法は、以下の内容をさらに含むことができる。
最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を特定する。
最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報に基づいて、最後の非ゼロ係数の位置を特定する。
予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報をビットストリームに書き込む。
なお、現在ブロックが最後の係数位置を利用しない場合、最後の非ゼロ係数の位置を特定する必要がある。具体的に、last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixを特定し、次に、last_sig_coeff_x_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_prefix、last_sig_coeff_y_suffixをビットストリームに書き込む必要がある。
このように、係数符号化・復号化中に、符号化・復号化が必要である可能性のある係数を全て符号化・復号化する必要があるとデフォルトする。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。符号化・復号化が必要である可能性のある係数を全て符号化・復号化する必要があるとデフォルトし、即ち、最後の非ゼロの係数の位置をもはや利用せず、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする。換言すれば、予め設定されたスキャン順序に従った、現在ブロックにおける全ての可能な非ゼロ係数の最後の位置に、符号化・復号化が必要である最後の係数位置を設定する。この位置は、通常、現在ブロックにおける全ての可能な非ゼロ係数からなる行列の右下隅である。従って、本出願実施形態において、default_last_coeff_enabled_flagを導入することで、最後の非ゼロ係数の位置に関連するシンタクス要素を削減しさらに除去することができ、それによって、オーバーヘッドを節約し、無駄を回避することができる。
また、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、スキャンされたサブブロックはいずれもデフォルトで符号化される必要があり、この場合、ビットストリームでsb_coded_flagを伝送する必要がなく、即ち、符号器及び復号器はいずれも、そのフラグを処理する必要がなく、符号化の速度を向上させる。従って、本出願の実施形態では、現在ブロック内の符号化待ちのサブブロックが符号化されるとデフォルトするか否かを特定するために用いられるサブブロックデフォルト符号化フラグ情報がさらに導入されることができる。
いくつかの実施形態において、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、当該方法は、以下の内容をさらに含むことができる。
現在ブロック内の符号化待ちのサブブロックのサブブロックデフォルト符号化フラグ情報を特定する。
サブブロックデフォルト符号化フラグ情報が符号化待ちのサブブロックが符号化されるとデフォルトすることを指示する場合、符号化待ちのサブブロック内の全ての係数を符号化して、符号化で取得されたビット情報と、サブブロックデフォルト符号化フラグ情報とをビットストリームに書き込む。
なお、サブブロックデフォルト符号化フラグ情報は、default_sb_coded_flagで表されることができる。本出願の実施形態において、サブブロックデフォルト符号化フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報であり、さらに、より高いレベル(例えば、VUI、SEIなど)のフラグ情報であってもよい。それについては限定されない。
なお、サブブロックデフォルトフラグ情報について、いくつかの実施形態では、符号化待ちのサブブロックのサブブロックデフォルト符号化フラグ情報を特定することは、
符号化待ちのサブブロックが符号化されるとデフォルトする場合、サブブロックデフォルト符号化フラグ情報の値が第1の値であると特定すること、又は、
符号化待ちのサブブロックが符号化されるとデフォルトしない場合、サブブロックデフォルト符号化フラグ情報の値が第2の値であると特定すること、を含むことができる。
このように、第1の値が1であり、第2の値が0であることを例として、符号化待ちのサブブロックが符号化される必要があるとデフォルトすると特定する場合、default_sb_coded_flagの値が1となる。又は、符号化待ちのサブブロックが符号化される必要があるとデフォルトしないと特定する場合、default_sb_coded_flagの値が0となる。
符号化待ちのサブブロックが符号化される必要があるとデフォルトする場合、default_sb_coded_flagの値が1となり、それは、sb_coded_flagの値が1であり、即ち、sb_coded_flagを符号化する必要がないことを意味する。符号化待ちのサブブロックが符号化される必要があるとデフォルトしない場合、即ち、サブブロックデフォルト符号化フラグ情報が、符号化待ちのサブブロックが符号化されるとデフォルトしないことを指示する場合、いくつかの実施形態において、当該方法は以下の内容をさらに含むことができる。符号化待ちのサブブロックのサブブロック符号化フラグ情報を特定し、サブブロック符号化フラグ情報をビットストリームに書き込む。
また、いくつかの実施形態において、符号化待ちのサブブロックのサブブロック符号化フラグ情報を特定することは、
サブブロックに符号化が必要である場合、サブブロック符号化フラグ情報の値が第1の値であると特定すること、又は、
サブブロック内の全ての係数がゼロである場合、サブブロック符号化フラグ情報の値が第2の値であると特定すること、を含む。
本出願の実施形態では、サブブロック符号化フラグ情報は、sb_coded_flagで表されることができる。第1の値が1であり、第2の値が0であることを例として、符号化待ちのサブブロックを符号化する必要があると特定する場合、符号化待ちのサブブロック内に符号化待ちの非ゼロ係数が含まれることを意味し、sb_coded_flagの値は1となる。又は、符号化待ちのサブブロックを符号化する必要がないと特定する場合、符号化待ちのサブブロック内の係数は全てゼロであることを意味し、sb-coded-flagの値は0となる。
このように、係数符号化・復号化中に、スキャンされたサブブロックがいずれも符号化・復号化される必要があるとデフォルトし、換言すれば、スキャンされたサブブロックはいずれも非ゼロ係数を含むとデフォルトする。即ち、通常の状況では、係数符号化・復号化方法は関連技術における既存方法と同じである。ある特定の状況は、例えば、高ビット深度、高品質、高ビットレートのビデオ符号化・復号化又は可逆圧縮のビデオ符号化・復号化を指すことができる。この場合、非ゼロ係数が多く、スキャンされたサブブロックのほとんどが符号化・復号化される必要があり、換言すれば、スキャンされたサブブロックのほとんどは非ゼロ係数を含む。このように、sb_coded_flagをビットストリームで伝送する必要がなくなり、符号器は、そのフラグを処理する必要がなく、符号化・復号化の速度を向上させることができる。また、ほとんど存在しないフラグが除去されるため、このとき、わずかながら圧縮性能を向上させる。
本出願の実施形態において、符号器に適用される係数符号化方法がさらに提供される。ビデオフラグ情報と、最後の非ゼロ係数の位置とを特定する。ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、最後の非ゼロ係数の位置反転フラグ情報を特定する。最後の非ゼロ係数の位置と、最後の非ゼロ係数の位置反転フラグ情報とに基づいて、最後の非ゼロ係数の座標情報を特定する。予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の非ゼロ係数の座標情報とをビットストリームに書き込む。このように、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化のシナリオでは、係数分布規則が通常ビデオのシナリオとは異なるため、係数符号化・復号化中に、コンテキストモードで符号化・復号化されるシンタクス要素の数を削減又は除去し、例えば、最後の非ゼロ係数の位置、サブブロック符号化・復号化フラグなどのシンタクス要素が挙げられ、さらに、最後の非ゼロ係数の座標情報の値が大きい場合に座標変換を行うことにより、ビットストリームにおける符号化・復号化によるオーバーヘッドを低減し、係数符号化・復号化のスループット及び符号化・復号化の速度を向上させることができる。また、削減又は除去されるシンタクス要素が、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化において、影響が小さいため、圧縮効率を向上させることもできる。
本出願の他の実施形態では、上記実施形態と同様の発明思想に基づいて、図12を参照すると、図12は、本出願の実施形態に係る符号器120の構造を示す概略図。図12に示されるように、当該符号器120は、第1の特定ユニット1201と符号化ユニット1202とを備えることができる。
第1の特定ユニット1201は、ビデオフラグ情報と最後の非ゼロ係数の位置とを特定し、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、最後の非ゼロ係数の位置反転フラグ情報を特定するように構成されており、
第1の特定ユニット1201はさらに、最後の非ゼロ係数の位置と、最後の非ゼロ係数の位置反転フラグ情報とに基づいて、最後の非ゼロ係数の座標情報を特定するように構成されており、
符号化ユニット1202は、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の非ゼロ係数の座標情報とをビットストリームに書き込むように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオが予め定められた条件を満たす場合、ビデオフラグ情報の値が第1の値であると特定し、又は、ビデオが予め定められた条件を満たさない場合、ビデオフラグ情報の値が第2の値であると特定するように構成されている。
いくつかの実施形態において、予め定められた条件は、少なくとも、高ビット深度、高品質、高ビットレート、高フレームレート及び可逆圧縮のうちの1つを含む。
いくつかの実施形態において、第1の特定ユニット1201はさらに、現在ブロックが最後の非ゼロ係数の位置反転を利用する場合、最後の非ゼロ係数の位置反転フラグ情報の値が第1の値であると特定し、又は、現在ブロックが最後の非ゼロ係数の位置反転を利用しない場合、最後の非ゼロ係数の位置反転フラグ情報の値が第2の値であると特定するように構成されている。
いくつかの実施形態において、最後の非ゼロ係数の位置は、最後の非ゼロ係数の初期水平座標及び初期垂直座標を含み、初期水平座標は、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離であり、初期垂直座標は、最後の非ゼロ係数の位置から現在ブロックの左上隅までの垂直距離である。
それに応じて、第1の特定ユニット1201はさらに、最後の非ゼロ係数の位置反転フラグ情報の値が第1の値である場合、最後の非ゼロ係数の初期水平座標及び初期垂直座標に基づいて計算を行うことにより、最後の非ゼロ係数の座標情報を特定し、又は、最後の非ゼロ係数の位置反転フラグ情報の値が第2の値である場合、最後の非ゼロ係数の初期水平座標及び初期垂直座標に基づいて、最後の非ゼロ係数の座標情報を直接に特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、現在ブロックの幅及び高さを特定し、現在ブロックの幅から最後の非ゼロ係数の初期水平座標を引くことにより、最後の非ゼロ係数の水平座標を取得し、現在ブロックの高さから最後の非ゼロ係数の初期垂直座標を引くことにより、最後の非ゼロ係数の垂直座標を取得し、最後の非ゼロ係数の水平座標と最後の非ゼロ係数の垂直座標とに基づいて、最後の非ゼロ係数の座標情報を特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、最後の非ゼロ係数の位置反転フラグ情報の値が第1の値である場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在のブロックの右下隅までの水平距離及び垂直距離として特定し、又は、最後の非ゼロ係数の位置反転フラグ情報の値が第2の値である場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在のブロックの左上隅までの水平距離及び垂直距離として特定するように構成されている。
いくつかの実施形態において、符号化ユニット1202はさらに、最後の非ゼロ係数の座標情報に基づいて、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を特定し、また、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報をビットストリームに書き込むように構成されている。
いくつかの実施形態において、最後の非ゼロ係数の位置反転フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、ブロックレベルのうちの1つのフラグ情報である。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、最後の係数有効フラグ情報を特定するように構成されており、
符号化ユニット1202はさらに、最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用することを指示する場合、予め設定されたスキャン順序に従って、最後の係数位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の係数有効フラグ情報とをビットストリームに書き込むように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、現在ブロックが最後の係数位置を利用する場合、最後の係数有効フラグ情報の値が第1の値であると特定し、又は、現在ブロックが最後の係数位置を利用しない場合、最後の係数有効フラグ情報の値が第2の値であると特定するように構成されている。
いくつかの実施形態において、最後の係数位置は、現在ブロックにおける、全ての可能な非ゼロ係数からなる行列の右下隅であり、又は、最後の係数位置は、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする最後の位置である。
いくつかの実施形態において、第1の特定ユニット1201はさらに、最後の非ゼロ係数の位置を最後の係数位置に設定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、現在ブロックに対して予め設定された操作を行うことにより取得された変換ブロックの幅及び高さを特定し、変換ブロックの幅及び高さに基づいて座標計算を行うことにより、変換ブロックの右下隅の座標情報を取得し、変換ブロックの右下隅の座標情報に基づいて、最後の係数位置を特定するように構成されている。
いくつかの実施形態において、予め設定された操作は、少なくともゼロ設定操作を含む。
いくつかの実施形態において、第1の特定ユニット1201はさらに、最後の非ゼロ係数の位置を最後の係数位置に設定する際に、変換ブロックの右下隅の座標情報に基づいて、最後の非ゼロ係数の位置を特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、現在ブロックが最後の係数位置を利用しない場合、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を特定し、また、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報に基づいて、最後の非ゼロ係数の位置を特定するように構成されており、
符号化ユニット1202はさらに、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報をビットストリームに書き込むように構成されている。
いくつかの実施形態において、最後の係数有効フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報である。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、現在ブロック内の符号化待ちのサブブロックのサブブロックデフォルト符号化フラグ情報を特定するように構成されており、
符号化ユニット1202はさらに、サブブロックデフォルト符号化フラグ情報が符号化待ちのサブブロックが符号化されるとデフォルトすることを指示する場合、符号化待ちのサブブロック内の全ての係数を符号化して、符号化で取得されたビット情報と、サブブロックデフォルト符号化フラグ情報とをビットストリームに書き込むように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、サブブロックデフォルト符号化フラグ情報が符号化待ちのサブブロックが符号化されるとデフォルトしないことを指示する場合、符号化待ちのサブブロックのサブブロック符号化フラグ情報を特定し、且つサブブロック符号化フラグ情報をビットストリームに書き込むように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、符号化待ちのサブブロックが符号化されるとデフォルトする場合、サブブロックデフォルト符号化フラグ情報の値が第1の値であると特定し、又は、符号化待ちのサブブロックが符号化されるとデフォルトしない場合、サブブロックデフォルト符号化フラグ情報の値が第2の値であると特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、サブブロックに符号化が必要である場合、サブブロック符号化フラグ情報の値が第1の値であると特定し、又は、
サブブロック内の全ての係数がゼロである場合、サブブロック符号化フラグ情報の値が第2の値であると特定するように構成されている。
いくつかの実施形態において、サブブロックデフォルト符号化フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報である。
いくつかの実施形態において、第1の値は1であり、第2の値は0である。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオフラグ情報が高ビット深度フラグ情報である場合、ビデオが高ビット深度を満たせば、高ビット深度フラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオフラグ情報が高ビットレートフラグ情報である場合、ビデオが高ビットレートを満たせば、高ビットレートフラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオフラグ情報が高品質フラグ情報である場合、ビデオが高品質を満たせば、高品質フラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定するように構成されている。
いくつかの実施形態において、第1の特定ユニット1201はさらに、ビデオフラグ情報が可逆圧縮フラグ情報である場合、ビデオが可逆圧縮を満たせば、可逆圧縮フラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定するように構成されている。
本出願の実施形態において、「ユニット」は、回路の一部、プロセッサの一部、プログラムの一部又はソフトウェアの一部などであり得ることが理解され得る。当然ながら、「ユニット」は、モジュール又は非モジュールであることもできる。また、本実施形態に係る各構成ユニットは、1つの処理ユニットに集積されてもよく、各ユニットは単独に物理的に存在してもよく、2つ以上のユニットは1つのユニットに集積されてもよい。上記集積ユニットは、ハードウェア又はソフトウェア機能モジュールの形式で実現されることができる。
集積ユニットは、独立の製品として販売されたり使用されたりするのではなく、ソフトウェア機能モジュールとして実装される場合に、コンピュータ可読記録媒体に記憶されてもよい。この理解によれば、本出願の技術的解決策について、本質的な部分、又は従来技術に貢献できた部分、又は当該技術的解決策の全部又は一部は、ソフトウェア製品として表現され得る。このコンピュータソフトウェア製品は、記憶媒体に記憶されており、1つのコンピュータデバイス(パソコン、サーバ、又はネットワークデバイスなどであってもよい)又はプロセッサに本実施形態に記載の方法の全部又は一部のステップを実行させるための複数の命令を含む。前記記憶媒体は、ユニバーサルシリアルバス(universal serial bus、USB)フラッシュディスク、モバイルハードディスク、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(random access memory、RAM)、磁気ディスク又は光ディスクなどの、プログラムコードを記憶可能な各種類の媒体を含む。
従って、本出願の実施形態において、符号器120に適用されるコンピュータ記憶媒体が提供される。当該コンピュータ記憶媒体にコンピュータプログラムが記憶されている。当該コンピュータプログラムが第1のプロセッサによって実行されると、上記実施形態における任意の方法を実行する。
上述した符号器120の構造及びコンピューター記憶媒体に基づいて、図13を参照すると、図13は、本出願の実施形態に係る符号器120の具体的なハードウェア構造を示す概略図。図13に示されるように、符号器120は、第1の通信インターフェース1301、第1のメモリ1302及び第1のプロセッサ1303を含むことができる。各コンポーネントは第1のバスシステム1304を介して結合される。第1のバスシステム1304は、これらのコンポーネント間の接続及び通信を実現するために用いられる。第1のバスシステム1304は、データバスに加えて、電力バス、制御バス及び状態信号バスをさらに含む。しかしながら、説明を明確にするために、図13において、様々なバスは、第1のバスシステム1304としてマークされている。
第1の通信インターフェース1301は、他の外部ネットワーク要素と情報を送受信するプロセスにおいて信号を送受信するために用いられる。
第1のメモリ1302は、第1のプロセッサ1303によって実行可能なコンピュータプログラムを記憶するために用いられる。
第1のプロセッサ1303は、コンピュータプログラムを実行する際に、
ビデオフラグ情報と、最後の非ゼロ係数の位置とを特定することと、
ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、最後の非ゼロ係数の位置反転フラグ情報を特定することと、
最後の非ゼロ係数の位置と、最後の非ゼロ係数の位置反転フラグ情報とに基づいて、最後の非ゼロ係数の座標情報を特定することと、
予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を符号化して、符号化で取得されたビット情報と、ビデオフラグ情報と、最後の非ゼロ係数の座標情報とをビットストリームに書き込むことと、を実行する。
なお、本出願の実施形態の第1のメモリ1302は、揮発性メモリ又は不揮発性メモリであることができ、又は揮発性メモリ及び不揮発性メモリの両方を含むことができる。不揮発性メモリは、読み取り専用メモリ(read-only memory、ROM)、プログラム可能な読み取り専用メモリ(programmable ROM、PROM)、消去可能なプログラム可能な読み取り専用メモリ(erasable PROM、EPROM)、電気的に消去可能なプログラム可能な読み取り専用メモリ(electrically EPROM、EEPROM)、又はフラッシュメモリ(flash memory)であることができる。揮発性メモリは、外部高速キャッシュとして機能するランダムアクセスメモリ(random access memory、RAM)であることができる。例示的であるが限定的ではない例として、様々なRAMが利用可能であり、例えば、スタティックランダムアクセスメモリ(static RAM、SRAM)、ダイナミックランダムアクセスメモリ(dynamic RAM、DRAM)、同期ダイナミックランダムアクセスメモリ(synchronous DRAM、SDRAM)、ダブルデータレート同期ダイナミックランダムアクセスメモリ(double data rate SDRAM、DDRSDRAM)、強化された同期ダイナミックランダムアクセスメモリ(enhanced SDRAM、ESDRAM)、同期リンクダイナミックランダムアクセスメモリ(synch-link DRAM、SLDRAM)、ダイレクトランバスランダムアクセスメモリ(dierct rambus RAM、DRRAM)が挙げられる。本出願に記載されるシステム及び方法の第1のメモリ1302は、これら及び他の任意の適切なタイプのメモリを含むことができるが、これらに限定されない。
第1のプロセッサ1303は、信号処理能力を有する集積回路チップであることができる。実施プロセスにおいて、上記方法の各ステップは、第1のプロセッサ1303におけるハードウェア形態の集積論理回路(integrated logic circuit)又はソフトウェア形態の命令によって完成されることができる。上記第1のプロセッサ1303は、汎用プロセッサ、デジタル信号プロセッサ(digital signal processor、DSP)、特定用途向け集積回路(application specific integrated circuit、ASIC)、フィールドプログラム可能なゲートアレイ(field programmable gate array、FPGA)又は他のプログラム可能なロジックデバイス、ディスクリートゲート又はトランジスタロジックデバイス、ディスクリートハードウェアコンポーネントであることができる。プロセッサは、本出願の実施形態に開示された様々な方法、ステップ及び論理ブロック図を実現又は実行することができる。汎用プロセッサは、マイクロプロセッサ又は任意の通常のプロセッサなどであることができる。本出願の実施形態に開示された方法のステップは、直接にハードウェア復号化プロセッサによって実行及び完成されることができ、又は復号化プロセッサにおけるハードウェア及びソフトウェアモジュールの組み合わせによって実行及び完成されることができる。ソフトウェアモジュールは、ランダムアクセスメモリ、フラッシュメモリ、読み取り専用メモリ、プログラム可能な読み取り専用メモリ、又は電気的に消去可能なプログラム可能なメモリ、レジスタなど本技術分野におけるマチュアな記憶媒体に位置することができる。当該記憶媒体は第1のメモリ1302に位置する。第1のプロセッサ1303は、第1のメモリ1302における情報を読み取り、プロセッサのハードウェアと合わせて上記方法のステップを完成する。
本出願に記載されたこれらの実施形態は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード又はその組合せによって実現されることができることが理解され得る。ハードウェアによって実現される場合、処理ユニットは、1つ又は複数の特定用途向け集積回路(application specific integrated circuits、ASIC)、デジタル信号処理(digital signal processing、DSP)、DSPデバイス(DSP device、DSPD)、プログラム可能なロジックデバイス(programmable logic device、PLD)、フィールドプログラム可能なゲートアレイ(field-programmable gate array、FPGA)、汎用プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサ、本出願に記載される機能を実行するために用いられるその他の電子ユニット又はその組合せで実現されることができる。ソフトウェアによって実現される場合、本出願に記載される技術は、本出願に記載される機能を実行するためのモジュール(例えば、手順、関数など)によって実現されることができる。ソフトウェアコードはメモリに記憶され且つプロセッサによって実行される。メモリは、プロセッサ内又はプロセッサの外部で実現することができる。
選択的に、別の実施形態として、第1のプロセッサ1303は、コンピュータプログラムを実行する際に、上記実施形態における任意の方法を実行するように構成されている。
本出願の実施形態において、符号器が提供される。当該符号器は、第1の特定ユニットと符号化ユニットとを備えることができる。このように、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化のシナリオでは、係数分布規則が通常ビデオのシナリオとは異なるため、係数符号化・復号化中に、コンテキストモードで符号化・復号化されるシンタクス要素の数を削減又は除去することにより、ビットストリームにおける符号化・復号化によるオーバーヘッドを低減し、係数符号化・復号化のスループット及び符号化・復号化の速度を向上させることができる。また、削減又は除去されるシンタクス要素が、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化において、影響が小さいため、圧縮効率を向上させることもできる。
本出願の他の実施形態では、上記実施形態と同様の発明思想に基づいて、図14を参照すると、図14は、本出願の実施形態に係る復号器140の構造を示す概略図。図14に示されるように、当該復号器140は、解析ユニット1401と第2の特定ユニット1402とを備えることができる。
解析ユニット1401は、ビットストリームを解析して、ビデオフラグ情報を取得し、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、ビットストリームを解析して、最後の非ゼロ係数の位置反転フラグ情報と最後の非ゼロ係数の座標情報とを取得するように構成されており、
第2の特定ユニット1402は、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を計算することにより、最後の非ゼロ係数の位置を特定するように構成されており、
解析ユニット1401はさらに、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する場合、最後の非ゼロ係数の座標情報に基づいて、最後の非ゼロ係数の位置を直接に特定するように構成されており、
解析ユニット1401はさらに、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、ビデオフラグ情報の値が第1の値である場合、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する、と特定し、又は、ビデオフラグ情報の値が第2の値である場合、ビデオフラグ情報がビデオが予め設定された条件を満たさないことを指示する、と特定するように構成されている。
いくつかの実施形態において、予め定められた条件は、少なくとも、高ビット深度、高品質、高ビットレート、高フレームレート及び可逆圧縮のうちの1つを含む。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の非ゼロ係数の位置反転フラグ情報の値が第1の値である場合、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する、と特定し、又は、最後の非ゼロ係数の位置反転フラグ情報の値が第2の値である場合、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する、と特定するように構成されている。
いくつかの実施形態において、解析ユニット1401はさらに、ビットストリームを解析して、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を取得するように構成されており、
第2の特定ユニット1402はさらに、最後の非ゼロ係数の水平座標のプレフィックス情報と、最後の非ゼロ係数の水平座標のサフィックス情報とに基づいて、最後の非ゼロ係数の水平座標を特定し、最後の非ゼロ係数の垂直座標のプレフィックス情報と、最後の非ゼロ係数の垂直座標のサフィックス情報とに基づいて、最後の非ゼロ係数の垂直座標を特定し、また、最後の非ゼロ係数の水平座標と最後の非ゼロ係数の垂直座標とに基づいて、最後の非ゼロ係数の座標情報を特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在ブロックの右下隅までの水平距離及び垂直距離として特定するように構成されており、
さらに、第2の特定ユニット1402はさらに、現在ブロックの幅及び高さを特定し、現在ブロックの幅から、最後の非ゼロ係数の位置から現在ブロックの右下隅までの水平距離を引くことにより、最後の非ゼロ係数の水平座標を取得し、現在ブロックの高さから、最後の非ゼロ係数の位置から現在ブロックの右下隅までの垂直距離を引くことにより、最後の非ゼロ係数の垂直座標を取得し、また、最後の非ゼロ係数の水平座標と、最後の非ゼロ係数の垂直座標とに基づいて、最後の非ゼロ係数の位置を特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用しないことを指示する場合、最後の非ゼロ係数の座標情報を、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離として特定し、また、最後の非ゼロ係数の位置から現在ブロックの左上隅までの水平距離及び垂直距離に基づいて、最後の非ゼロ係数の位置を特定するように構成されている。
いくつかの実施形態において、最後の非ゼロ係数の位置反転フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報である。
いくつかの実施形態において、解析ユニット1401はさらに、ビットストリームを解析して、最後の係数有効フラグ情報を取得し、最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用することを指示する場合、予め設定されたスキャン順序に従って、最後の係数位置より前の全ての係数を復号化して、現在ブロックの係数を特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の係数有効フラグ情報の値が第1の値である場合、最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用することを指示する、と特定し、又は、最後の係数有効フラグ情報の値が第2の値である場合、最後の係数有効フラグ情報が現在ブロックが最後の係数位置を利用しないことを指示する、と特定するように構成されている。
いくつかの実施形態において、解析ユニット1401はさらに、最後の係数有効フラグ情報の値が第2の値である場合、ビットストリームを解析して、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報を取得するように構成されており、
第2の特定ユニット1402はさらに、最後の非ゼロ係数の水平座標のプレフィックス情報、最後の非ゼロ係数の垂直座標のプレフィックス情報、最後の非ゼロ係数の水平座標のサフィックス情報、及び最後の非ゼロ係数の垂直座標のサフィックス情報に基づいて、最後の非ゼロ係数の位置を特定し、また、予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定するように構成されている。
いくつかの実施形態において、最後の係数位置は、現在ブロックにおける、全ての可能な非ゼロ係数からなる行列の右下隅であり、又は、最後の係数位置は、予め設定されたスキャン順序に従って、現在ブロックにおける全ての可能な非ゼロ係数をスキャンする最後の位置である。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の非ゼロ係数の位置を最後の係数位置に設定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、現在ブロックに対して予め設定された操作を行うことにより取得された変換ブロックの幅及び高さを特定し、変換ブロックの幅及び高さに基づいて座標計算を行うことにより、変換ブロックの右下隅の座標情報を取得し、また、変換ブロックの右下隅の座標情報に基づいて、最後の係数位置を特定するように構成されている。
いくつかの実施形態において、予め設定された操作は、少なくともゼロ設定操作を含む。
いくつかの実施形態において、第2の特定ユニット1402はさらに、最後の非ゼロ係数の位置を最後の係数位置に設定する際に、変換ブロックの右下隅の座標情報に基づいて、最後の非ゼロ係数の位置を特定するように構成されている。
いくつかの実施形態において、最後の係数有効フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報である。
いくつかの実施形態において、解析ユニット1401はさらに、ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、ビットストリームを解析して、サブブロックデフォルト復号化フラグ情報を取得し、サブブロックデフォルト復号化フラグ情報が現在ブロック内の復号化待ちのサブブロックが復号化されるとデフォルトすることを指示する場合、サブブロック復号化フラグ情報の値が第1の値であると特定し、復号化待ちのサブブロック内の全ての係数を復号化するように構成されている。
いくつかの実施形態において、解析ユニット1401はさらに、サブブロックデフォルト復号化フラグ情報が復号化待ちのサブブロックが復号化されるとデフォルトしないことを指示する場合、ビットストリームを解析して、サブブロック復号化フラグ情報を取得し、サブブロック復号化フラグ情報の値が第1の値である場合、復号化待ちのサブブロック内の全ての係数を復号化するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、サブブロックデフォルト復号化フラグ情報の値が第1の値である場合、サブブロックデフォルト復号化フラグ情報が復号化待ちのサブブロックが復号化されるとデフォルトすることを指示する、と特定し、又は、サブブロックデフォルト復号化フラグ情報の値が第2の値である場合、サブブロックデフォルト復号化フラグ情報が復号化待ちのサブブロックが復号化されるとデフォルトしないことを指示する、と特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、サブブロック復号化フラグ情報の値が第1の値である場合、復号化待ちのサブブロック内の全ての係数を復号化すると特定し、又は、
サブブロック復号化フラグ情報の値が第2の値である場合、復号化待ちのサブブロック内の全ての係数がゼロであると特定するように構成されている。
いくつかの実施形態において、サブブロックデフォルト復号化フラグ情報は、少なくとも、シーケンスレベル、画像レベル、スライスレベル、及びブロックレベルのうちの1つのフラグ情報である。
いくつかの実施形態において、第1の値は1であり、第2の値は0である。
いくつかの実施形態において、第2の特定ユニット1402はさらに、ビデオフラグ情報が高ビット深度フラグ情報である場合、高ビット深度フラグ情報がビデオが高ビット深度を満たすことを指示すれば、ビデオが予め設定された条件を満たすと特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、ビデオフラグ情報が高ビットレートフラグ情報である場合、高ビットレートフラグ情報がビデオが高ビットレートを満たすことを指示すれば、ビデオが予め設定された条件を満たすと特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、ビデオフラグ情報が高品質フラグ情報である場合、高品質フラグ情報がビデオが高品質を満たすことを指示すれば、ビデオが予め設定された条件を満たすと特定するように構成されている。
いくつかの実施形態において、第2の特定ユニット1402はさらに、ビデオフラグ情報が可逆圧縮フラグ情報である場合、可逆圧縮フラグ情報がビデオが可逆圧縮を満たすことを指示すれば、ビデオが予め設定された条件を満たすと特定するように構成されている。
本出願の実施形態において、「ユニット」は、回路の一部、プロセッサの一部、プログラムの一部又はソフトウェアの一部などであり得ることが理解され得る。当然ながら、「ユニット」は、モジュール又は非モジュールであることもできる。また、本実施形態に係る各構成ユニットは、1つの処理ユニットに集積されてもよく、各ユニットは単独に物理的に存在してもよく、2つ以上のユニットは1つのユニットに集積されてもよい。上記集積ユニットは、ハードウェア又はソフトウェア機能モジュールの形式で実現されることができる。
集積ユニットは、独立の製品として販売されたり使用されたりするのではなく、ソフトウェア機能モジュールとして実装される場合に、コンピュータ可読記録媒体に記憶されてもよい。この理解によれば、本出願の技術的解決策について、本質的な部分、又は従来技術に貢献できた部分、又は当該技術的解決策の全部又は一部は、ソフトウェア製品として表現され得る。このコンピュータソフトウェア製品は、記憶媒体に記憶されており、1つのコンピュータデバイス(パソコン、サーバ、又はネットワークデバイスなどであってもよい)又はプロセッサに本実施形態に記載の方法の全部又は一部のステップを実行させるための複数の命令を含む。前記記憶媒体は、USBフラッシュディスク、モバイルハードディスク、ROM、RAM、磁気ディスク又は光ディスクなどの、プログラムコードを記憶可能な各種類の媒体を含む。
従って、本出願の実施形態において、復号器140に適用されるコンピュータ記憶媒体が提供される。当該コンピュータ記憶媒体にコンピュータプログラムが記憶されている。当該コンピュータプログラムが第1のプロセッサによって実行されると、上記実施形態における任意の方法を実行する。
上述した復号器140の構造及びコンピューター記憶媒体に基づいて、図15を参照すると、図15は、本出願の実施形態に係る復号器140の具体的なハードウェア構造を示す概略図。図15に示されるように、復号器140は、第2の通信インターフェース1501、第2のメモリ1502及び第2のプロセッサ1503を含むことができる。各コンポーネントは第2のバスシステム1504を介して結合される。第2のバスシステム1504は、これらのコンポーネント間の接続及び通信を実現するために用いられる。第2のバスシステム1504は、データバスに加えて、電力バス、制御バス及び状態信号バスをさらに含む。しかしながら、説明を明確にするために、図15において、様々なバスは、第2のバスシステム1504としてマークされている。
第2の通信インターフェース1501は、他の外部ネットワーク要素と情報を送受信するプロセスにおいて信号を送受信するために用いられる。
第2のメモリ1502は、第2のプロセッサ1503によって実行可能なコンピュータプログラムを記憶するために用いられる。
第2のプロセッサ1503は、コンピュータプログラムを実行する際に、
ビットストリームを解析して、ビデオフラグ情報を取得することと、
ビデオフラグ情報がビデオが予め設定された条件を満たすことを指示する場合、ビットストリームを解析して、最後の非ゼロ係数の位置反転フラグ情報と最後の非ゼロ係数の座標情報とを取得することと、
最後の非ゼロ係数の位置反転フラグ情報が現在ブロックが最後の非ゼロ係数の位置反転を利用することを指示する場合、最後の非ゼロ係数の座標情報を計算することにより、最後の非ゼロ係数の位置を特定することと、
予め設定されたスキャン順序に従って、最後の非ゼロ係数の位置より前の全ての係数を復号化して、現在ブロックの係数を特定することと、を実行する。
選択的に、別の実施形態として、第2のプロセッサ1503は、コンピュータプログラムを実行する際に、上記実施形態における任意の方法を実行するように構成されている。
なお、第2のメモリ1502は、第1のメモリ1302とハードウェア機能が類似であり、第2のプロセッサ1503は、第1のプロセッサ1303とハードウェア機能が類似であり、その詳細な説明は省略する。
本出願の実施形態において、復号器が提供される。当該復号器は、解析ユニットと第2の特定ユニットとを備えることができる。このように、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化のシナリオでは、係数分布規則が通常ビデオの符号化・復号化シナリオとは異なるため、係数符号化・復号化中に、コンテキストモードで符号化・復号化されるシンタクス要素の数を削減又は除去することにより、ビットストリームにおける符号化・復号化によるオーバーヘッドを低減し、係数符号化・復号化のスループット及び符号化・復号化の速度を向上させることができる。また、削減又は除去されるシンタクス要素が、高ビット深度、高ビットレート、高品質、又は可逆圧縮のビデオ符号化・復号化において、影響が小さいため、圧縮効率を向上させることもできる。
なお、本出願において、「含む」、「備える」又は他のバリアントなどの用語はその他の構成要素を含むことを排除せず、カバーすることを意図するため、一連の要素を含むプロセス、方法、物品又は装置は、それらの要素だけではなく、明確にリストされていない他の要素も含み、又はプロセス、方法、物品又は装置に固有の他の要素を含むことができる。制限がない限り、「…を含む」という文によって限定された要素を含むプロセス、方法、物品又は装置に別の同じ要素が存在することを排除しない。
上記本出願の実施形態のシーケンス番号は、実施形態の優劣を示すものではなく、ただ説明するために用いられる。
本出願に係るいくつかの方法実施形態に開示された方法は、矛盾がない限り、任意に組み合わせて、新しい方法実施形態を得ることができる。
本出願に係るいくつかの製品実施形態に開示された特徴は、矛盾がない限り、任意に組み合わせて、新しい製品実施形態を得ることができる。
本出願に係るいくつかの方法又は装置の実施形態に開示された特徴は、矛盾がない限り、任意に組み合わせて、新しい方法実施形態又は装置実施形態を得ることができる。
上記は、ただ本出願の具体的な実施形態であり、本出願の保護範囲はそれに限定されない。当業者が本出願に開示された技術範囲内で容易に想到し得る変更又は置換は全て本出願の保護範囲内に含まれるべきである。従って、本出願の保護範囲は特許請求の保護範囲によって決められるべきである。