【文献】
Sunil Lee et al.,Efficient coefficient coding method for large transform in VLC mode,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,3rd Meeting: Guangzhou, CN,2010年10月,JCTVC-C210,pp.1-6
【文献】
Marta Karczewicz et al.,Improvements on VLC,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,3rd Meeting: Guangzhou, CN,2010年10月,JCTVC-C263,pp.1-5
【文献】
Marta Karczewicz et al.,CE5: Improved coefficient coding with LCEC,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,4th Meeting: Daegu, KR,2011年 1月,JCTVC-D374-r2,pp.1-3
【文献】
Yukinobu Yasugi and Tomoyuki Yamamoto,Simplification of transform coefficient coding in LCEC,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,5th Meeting: Geneva, CH,2011年 3月,JCTVC-E156,pp.1-4
【文献】
Marta Karczewicz et al.,CE5: coefficient coding with LCEC for large blocks,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,5th Meeting: Geneva, CH,2011年 3月,JCTVC-E383 r3,pp.1-4
【文献】
Liwei Guo et al.,Run-level Table Reduction for CAVLC ,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,6th Meeting: Torino,2010年 7月,JCTVC-F298_r1,pp.1-5
【文献】
Jaeho Lee et al.,Run-mode coding improvement with table reduction in CAVLC,Joint Collaborative Team on Video Coding (JCT-VC) of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11,6th Meeting: Torino, IT,2011年 7月,JCTVC-F407-r1,pp.1-3
(58)【調査した分野】(Int.Cl.,DB名)
前記第1の関数を実行することと、前記データをコーディングすることとは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに、前記第1の関数を実行することと、前記データをコーディングすることを備える、請求項1に記載の方法。
前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記しきい値を示すシグナリング値をコーディングすることをさらに備える、請求項1に記載の方法。
前記第1の係数についての前記データをコーディングすることは、ビデオ符号化プロセス中に前記コードワードを使用して前記第1の係数についての{ラン、レベルID}ペアを符号化することを備える、請求項1に記載の方法。
前記コードワードは2値化値であり、前記データをコーディングすることは、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングすることをさらに備える、請求項1に記載の方法。
前記コードワードを復号することは、前記コードワードを備える2値化値を再生するためにデータをエントロピー復号することと、前記2値化値が対応する前記コードワードインデックス値を決定することと、を備える請求項7に記載の方法。
前記変換ユニットに対応する予測データを決定することと、前記変換ユニットについての残差データを再生することと、前記予測データと前記残差データとを組み合わせることと、をさらに備える請求項7に記載の方法。
ビデオデータをコーディングするためのデバイスであって、前記デバイスは、ビデオデータの変換ユニットの第1の係数が、第1のしきい値よりも小さい走査順序値(k)を有し、前記第1の係数のレベルIDは0であるとき、前記第1の係数についてのデータとコードワードインデックス値との間のマッピングを決定するための第1の関数E1(k)を実行することと、
前記第1の係数が前記変換ユニットにおける走査順序中の最後有効係数であるとき、前記コードワードインデックス値は前記第1の関数E1(k)により返される値に等しいと決定することと、
前記第1の係数が前記最後有効係数でないとき、前記第1の係数のランと前記第1の関数E1(k)により返される値との比較に基づき、前記第1の係数についての前記コードワードインデックス値を決定することと、
前記コードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、を行うように構成されたビデオコーダを備えるデバイス。
前記ビデオコーダは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに前記第1の関数を実行し、前記データをコーディングするように構成された、請求項12に記載のデバイス。
前記ビデオコーダは、さらに、前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記しきい値を示すシグナリング値をコーディングするようにさらに構成された、請求項12に記載のデバイス。
前記係数についての前記データをコーディングするために、前記ビデオエンコーダは、ビデオ符号化プロセス中に、前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを符号化するように構成された、請求項18に記載のデバイス。
前記コードワードは2値化値であり、前記データをコーディングするために、前記ビデオコーダは、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングするように構成された、請求項12に記載のデバイス。
前記第1の関数を実行する手段と、前記データをコーディングする手段とは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに、前記第1の関数を実行する手段と、前記データをコーディングする手段とを備える、請求項21に記載のデバイス。
前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記しきい値を示すシグナリング値をコーディングする手段をさらに備える、請求項21に記載のデバイス。
前記第1の係数についての前記データをコーディングする手段は、ビデオ符号化プロセス中に前記コードワードを使用して前記第1の係数についての{ラン、レベルID}ペアを符号化する手段を備える、請求項21に記載のデバイス。
前記コードワードは2値化値であり、前記データをコーディングする手段は、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングする手段をさらに備える、請求項21に記載のデバイス。
前記プロセッサに前記第1の関数を実行させる前記命令と、前記プロセッサに前記データをコーディングさせる前記命令とは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに、前記プロセッサに前記第1の関数を実行させる命令と、前記プロセッサに前記データをコーディングさせる命令とを備える、請求項29に記載のコンピュータプログラム。
前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記プロセッサに、前記しきい値を示すシグナリング値をコーディングさせる命令をさらに備える、請求項29に記載のコンピュータプログラム。
前記プロセッサに前記コードワードを復号させる前記命令は、前記プロセッサに、前記コードワードを備える2値化値を再生するためにデータをエントロピー復号させる命令と、
前記プロセッサに、前記2値化値が対応する前記コードワードインデックス値を決定させる命令と、
を備える、請求項34に記載のコンピュータプログラム。
【発明を実施するための形態】
【0012】
[0019]概して、本開示では、ビデオデータのブロックの係数をコーディングするための技法について説明する。ビデオデータは、動きをシミュレートするために、高速に連続して再生される一連のフレーム(またはピクチャ)を含む。フレームの各々はブロックに分割され得る。
【0013】
[0020]ビデオエンコーダは、空間的および時間的冗長性を利用することによってビデオデータを圧縮することを試みる。たとえば、ビデオエンコーダは、隣接する、前にコーディングされたブロックに関してブロックをコーディングすることによって、空間的冗長性を利用し得る。同様に、ビデオエンコーダは、前にコーディングされたフレームのデータに関してブロックをコーディングすることによって、時間的冗長性を利用し得る。特に、ビデオエンコーダは、空間ネイバーのデータから、または前にコーディングされたフレームのデータから現在ブロックを予測し得、次いで、ブロックについての残差値を、ブロックについての実効値(actual value)とブロックについての予測値との間の差として計算し得る。ブロックについての残差は、ピクセル(または空間)領域中のピクセルごとの差分値を含む。
【0014】
[0021]ビデオエンコーダは、次いで、値のエネルギーを、変換領域、たとえば、周波数領域中の比較的少数の係数に圧縮することを試みるために、(変換ユニット(TU)とも呼ばれる)残差の値に変換を適用し得る。ビデオエンコーダは、次いで、変換係数を量子化し得る。ビデオエンコーダは、さらに、量子化変換係数の2次元行列を、量子化変換係数を含む1次元ベクトルに変換するために量子化変換係数を走査し得る。係数を走査するプロセスは、係数の直列化と呼ばれることがある。
【0015】
[0022]ビデオエンコーダは、次いで、走査された係数をエントロピー符号化するために、エントロピーコーディングプロセスを適用し得る。エントロピーコーディングは、概して、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)とコンテキスト適応型バイナリ算術コーディング(CABAC:context-adaptive binary arithmetic coding)とを含む。CAVLCは、概して、可変長コードワード(VLC)テーブルの選択を含み、コードワードテーブルは、符号化されるべき値を可変長コードワードにマッピングする。概して、VLCテーブルは、より高い確率をもつシンボルまたは値には、より短い長さのコードワードが割り当てられるが、より低い確率をもつシンボルまたは値には、より長い長さコードワードが割り当てられるように構成される。CAVLCでは、係数は、一般に最高周波数から最低周波数への順序で走査される。CABACでは、コーディングされるべきデータは、最初に2値化され、2値化値を形成し、2値化値は、次いで、2進算術コーディングされ得る。2値化テーブルは、2値化値と2値化されるべきデータとの間のマッピング(または、代替的に、デコーダの場合、2値化値と対応するデータとの間のマッピング)を与え得る。
【0016】
[0023]係数の値(すなわち、レベル)を直接コーディングするのではなく、ビデオコーディングデバイスは、次の非0係数と現在非0係数との間の走査中の0値係数の数を示す値(「ラン」または「ゼロランレングス」という用語で呼ばれる)と、現在係数が1に等しい絶対値を有するのか、1よりも大きい絶対値を有するのかについてのインジケータ(「レベルID」という用語で呼ばれる)とのペアを表す値をコーディングし得る。値のこのペアは、「cn」と呼ばれるコードワードインデックスにマッピングされ得、コードワードインデックスは、選択されたテーブル中のコードワードのインデックスに対応し得る。すなわち、コードワードマッピングテーブルは、ペア{ラン、レベルID}をコードワードインデックス値cnにマッピングし得、値cnは、テーブル中のコードワードに対応し得る。たとえば、値cnは、VLCテーブル中のVLCコードワード、または2値化テーブル中の2値化値に対応し得る。
【0017】
[0024]ビデオコーディングデバイスは、走査中の現在係数の位置に基づいてcnへのペア{ラン、レベルID}のマッピングを決定し得る。値kは、逆走査順序中の現在係数と最後係数(すなわち、逆走査中の最後の係数)との間の係数の数に対応するとする。さらに、E(ラン,k)は、位置kにおける{ラン、レベルID}ペアについてのcnの値を決定するときに使用されるべき値を返す関数を表すとする。E(ラン,k)を使用すべきかどうかは、kがしきい値よりも小さいかどうかに基づき得る。
【0018】
[0025]本開示は、いくつかの特殊な場合について、2次元テーブルではなく、関数を使用するための技法を提供する。たとえば、関数が、現在係数について、kがしきい値よりも小さく、ラン=k+1、およびレベルID=0である特殊な場合に使用され得る。E1(k)は、そのような関数を表すとする。これは、それが逆走査中の最後有効(すなわち、非0値)係数に対応するという点で特殊な場合である。以下の擬似コードは、修正E1(k)関数を使用するための例示的なエンコーダベースの方法を与える。
【数1】
【0019】
[0026]上記の擬似コードの実装形態および実行は、データをコーディングする(すなわち、符号化する)方法の一例を表し、本方法は、ビデオデータの変換ユニットの係数が、しきい値(T)よりも小さい走査順序値(k)を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数である(すなわち、ラン==k+1)とき、係数についてのデータとコードワードインデックス値との間のマッピング(cn=E1(k))を決定するために、関数(E1(k))を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることと、を含む。
【0020】
[0027]以下の擬似コードは、上記で説明した方法とは逆の例示的なデコーダベースの方法を与える。
【数2】
【0021】
[0028]上記の擬似コードの実装形態および実行は、ビデオデータをコーディングする(すなわち、復号する)方法の一例を表し、本方法は、ビデオデータの変換ユニットの係数が、しきい値(T)よりも小さい走査順序値(k)を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数である(cn==E1(k))とき、係数についてのデータとコードワードインデックス値(cn)との間のマッピングを決定するために、関数(E1(k))を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることと、を含む。
【0022】
[0029]このようにして、上記の擬似コードの両方のセットは、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることと、を含む方法の例を表す。すなわち、エンコーダとデコーダの両方は、本開示の技法に従って、いくつかの走査順序位置についての{ラン、レベルID}ペアをコーディングするための同様の方法を実行するように構成され得る。
【0023】
[0030]上記で説明した例では、E1(k)は、現在係数について、ラン=k+1およびレベルID=0である特殊な場合のために使用される。他の特殊な場合には、コードワードインデックスを決定する際に使用するための関数が割り当てられ得る。たとえば、runLeft(k)は、走査順序位置kにおける係数と、走査順序位置kのすぐ左側の位置における係数との間の走査順序中の係数の数として定義されるとする。言い換えれば、走査順序位置kにおける係数が位置(x,y)を有する場合、runLeft(k)は、位置(x−1,y)に達するための走査順序中の係数の数を返す。{ラン、レベルID}を有する走査位置kにおける所与の係数について、ランがrunLeft(k)に等しいとき、{ラン、レベルID}についてのコードワードインデックスを決定するために関数E2(k)が使用され得る。
【0024】
[0031]同様に、ランがrunTop(k)に等しいとき、位置kにおける{ラン、レベルID}についてのコードワードインデックスを決定するために関数E3(k)が使用され得、runTop(k)は、現在係数位置の上の位置に達するための走査順序中の係数の数を返す。すなわち、走査順序位置kにおける現在係数が位置(x,y)を有すると仮定すると、runTop(k)は、位置(x,y−1)に達するための走査順序中の係数の数を返す。
【0025】
[0032]ただ1つのしきい値を使用するのではなく、いくつかの例では、kが3つの範囲、すなわち、k<T0、T0≦k<T1、またはT1≦kのうちの1つ内にあるかどうかを決定するために2つのしきい値が使用され得る。このようにして、T0≦k<T1であるときのみ、上記の例は適用され得(たとえば、E1(k)が使用され得)、他の場合、コードワードインデックスcnを選択するための従来の方法が使用され得る。
【0026】
[0033]上記の例では、(1つまたは複数の)しきい値は、設計者または管理者などのユーザ、あるいはビデオエンコーダによって選択され得る。選択された(1つまたは複数の)しきい値は、たとえば、ピクチャパラメータセット(PPS)、スライスパラメータセット(SPS)、または適応パラメータセット(APS)中でシグナリングされ得る。代替的に、(1つまたは複数の)しきい値の(1つまたは複数の)値は、ピクチャサイズ、ピクチャタイプ、ブロックサイズ、予測モード(たとえば、インター、イントラ)、QP(量子化パラメータ)、パーティションモード(たとえば、2N×2N、N×N)、動きベクトル値、動きベクトル予測子値のうちの1つまたは複数などのサイド情報に基づいて適応的に決定され得る。サイド情報は、現在ブロックの利用可能なサイド情報であり得るか、または、すでに符号化/復号されたブロックからのサイド情報であり得る。
【0027】
[0034]
図1は、ビデオデータのブロックの係数をコーディングするための技法を利用し得る例示的なビデオ符号化および復号システム10を示すブロック図である。
図1に示すように、システム10は、通信チャネル16を介して符号化ビデオを宛先デバイス14に送信するソースデバイス12を含む。ソースデバイス12および宛先デバイス14は、広範囲にわたるデバイスのいずれかを備え得る。場合によっては、ソースデバイス12および宛先デバイス14は、ワイヤレスハンドセット、いわゆるセルラー無線電話または衛星無線電話などのワイヤレス通信デバイスを備えるか、あるいは、通信チャネル16を介してビデオ情報を通信することができ、その場合、通信チャネル16がワイヤレスである、任意のワイヤレスデバイスを備え得る。ただし、ビデオデータのブロックの係数をコーディングすることに関係する本開示の技法は、必ずしもワイヤレスアプリケーションまたは設定に限定されるとは限らない。たとえば、これらの技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、インターネットビデオ送信、記憶媒体上に符号化される符号化デジタルビデオ、または他のシナリオに適用され得る。したがって、通信チャネル16は、符号化ビデオデータの送信または記憶に好適なワイヤレスまたはワイヤード媒体の任意の組合せを備え得る。
【0028】
[0035]
図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、変調器/復調器(モデム)22と、送信機24とを含む。宛先デバイス14は、受信機26と、モデム28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。本開示によれば、ソースデバイス12のビデオエンコーダ20は、ビデオデータのブロックの係数をコーディングするための技法を適用するように構成され得る。他の例では、ソースデバイスおよび宛先デバイスは他の構成要素または構成を含み得る。たとえば、ソースデバイス12は、外部カメラなど、外部ビデオソース18からビデオデータを受信し得る。同様に、宛先デバイス14は、内蔵ディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースし得る。
【0029】
[0036]
図1の図示のシステム10は一例にすぎない。ビデオデータのブロックの係数をコーディングするための技法は、任意のデジタルビデオ符号化および/または復号デバイスによって実行され得る。概して、本開示の技法はビデオ符号化デバイスによって実行されるが、本技法は、一般に「コーデック」と呼ばれるビデオエンコーダ/デコーダによっても実行され得る。その上、本開示の技法はまた、ビデオプリプロセッサによって実行され得る。ソースデバイス12および宛先デバイス14は、ソースデバイス12が宛先デバイス14に送信するためのコード化ビデオデータを生成するような、コーディングデバイスの例にすぎない。いくつかの例では、デバイス12、14は、デバイス12、14の各々がビデオ符号化構成要素とビデオ復号構成要素とを含むように、実質的に対称的に動作し得る。したがって、システム10は、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスト、またはビデオテレフォニーのためのビデオデバイス12とビデオデバイス14との間の一方向または双方向のビデオ送信をサポートし得る。
【0030】
[0037]ソースデバイス12のビデオソース18は、ビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオを含んでいるビデオアーカイブ、および/またはビデオコンテンツプロバイダからのビデオフィードを含み得る。さらなる代替として、ビデオソース18は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオとアーカイブビデオとコンピュータ生成ビデオとの組合せを生成し得る。場合によっては、ビデオソース18がビデオカメラである場合、ソースデバイス12および宛先デバイス14は、いわゆるカメラフォンまたはビデオフォンを形成し得る。ただし、上述のように、本開示で説明する技法は、概してビデオコーディングに適用可能であり得、ワイヤレスおよび/またはワイヤード適用例に適用され得る。各場合において、キャプチャされたビデオ、以前にキャプチャされたビデオ、またはコンピュータ生成ビデオは、ビデオエンコーダ20によって符号化され得る。符号化ビデオ情報は、次いで、通信規格に従ってモデム22によって変調され、送信機24を介して宛先デバイス14に送信され得る。モデム22は、信号変調のために設計された様々なミキサ、フィルタ、増幅器または他の構成要素を含み得る。送信機24は、増幅器、フィルタ、および1つまたは複数のアンテナを含む、データを送信するために設計された回路を含み得る。
【0031】
[0038]宛先デバイス14の受信機26はチャネル16を介して情報を受信し、モデム28はその情報を復調する。この場合も、ビデオ符号化プロセスは、ビデオデータのブロックの係数をコーディングするための本明細書で説明する技法のうちの1つまたは複数を実装し得る。チャネル16を介して通信される情報は、ビデオエンコーダ20によって定義され、またビデオデコーダ30によって使用される、ブロックおよび他のコード化ユニット、たとえば、GOPの特性および/または処理を記述するシンタックス要素を含む、シンタックス情報を含み得る。ディスプレイデバイス32は、復号されたビデオデータをユーザに対して表示し、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスのいずれかを備え得る。
【0032】
[0039]
図1の例では、通信チャネル16は、無線周波数(RF)スペクトルあるいは1つまたは複数の物理伝送線路など、任意のワイヤレスまたはワイヤード通信媒体、あるいはワイヤレス媒体とワイヤード媒体との任意の組合せを備え得る。通信チャネル16は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成し得る。通信チャネル16は、概して、ワイヤード媒体またはワイヤレス媒体の任意の好適な組合せを含む、ビデオデータをソースデバイス12から宛先デバイス14に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。通信チャネル16は、ソースデバイス12から宛先デバイス14への通信を可能にするのに有用であり得るルータ、スイッチ、基地局、または任意の他の機器を含み得る。他の例では、ソースデバイス12は、データを送信するのではなく、記憶媒体上に符号化データを記憶し得る。同様に、宛先デバイス14は、記憶媒体から符号化データを取り出すように構成され得る。
【0033】
[0040]ビデオエンコーダ20およびビデオデコーダ30は、代替的にMPEG−4、Part10、Advanced Video Coding(AVC)と呼ばれるITU−T H.264規格など、ビデオ圧縮規格に従って動作し得る。ただし、本開示の技法は、いかなる特定のコーディング規格にも限定されない。他の例にはMPEG−2およびITU−T H.263がある。
図1には示されていないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ30は、それぞれオーディオエンコーダおよびデコーダと統合され得、適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含んで、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理し得る。適用可能な場合、MUX−DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
【0034】
[0041]ITU−T H.264/MPEG−4(AVC)規格は、Joint Video Team(JVT)として知られる共同パートナーシップの成果として、ISO/IEC Moving Picture Experts Group(MPEG)とともにITU−T Video Coding Experts Group(VCEG)によって策定された。いくつかの態様では、本開示で説明する技法は、H.264規格に概して準拠するデバイスに適用され得る。H.264規格は、ITU−T Study Groupによる2005年3月付けのITU−T勧告H.264「Advanced Video Coding for generic audiovisual services」に記載されており、本明細書ではH.264規格またはH.264仕様、あるいはH.264/AVC規格または仕様と呼ぶことがある。Joint Video Team(JVT)はH.264/MPEG−4 AVCへの拡張に取り組み続けている。
【0035】
[0042]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダ回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも複合エンコーダ/デコーダ(コーデック)の一部としてそれぞれのカメラ、コンピュータ、モバイルデバイス、加入者デバイス、ブロードキャストデバイス、セットトップボックス、サーバなどに統合され得る。
【0036】
[0043]ビデオシーケンスは、一般に一連のビデオフレームを含む。ピクチャのグループ(GOP)は、概して、一連の1つまたは複数のビデオフレームを備える。GOPは、GOP中に含まれるいくつかのフレームを記述するシンタックスデータを、GOPのヘッダ中、GOPの1つまたは複数のフレームのヘッダ中、または他の場所に含み得る。各フレームは、それぞれのフレームのための符号化モードを記述するフレームシンタックスデータを含み得る。ビデオエンコーダ20は、一般に、ビデオデータを符号化するために、個々のビデオフレーム内のビデオブロックに対して動作する。ビデオブロックは、ブロックまたはブロックのパーティションに対応し得る。ビデオブロックは、固定サイズまたは変動サイズを有し得、指定のコーディング規格に応じてサイズが異なり得る。各ビデオフレームは複数のスライスを含み得る。各スライスは複数のブロックを含み得、それらのブロックは、サブブロックとも呼ばれるパーティションに構成され得る。
【0037】
[0044]一例として、ITU−T H.264規格は、ルーマ成分については16×16、8×8、または4×4、およびクロマ成分については8×8などの様々なブロックサイズでのイントラ予測をサポートし、ルーマ成分については16×16、16×8、8×16、8×8、8×4、4×8および4×4、ならびにクロマ成分については対応するスケーリングされたサイズなどの様々なブロックサイズでのインター予測をサポートする。本開示では、「N×N」と「N by N」は、垂直寸法および水平寸法に関するブロックのピクセル寸法、たとえば、16×16ピクセルまたは16 by 16ピクセルを指すために互換的に使用され得る。概して、16×16ブロックは、垂直方向に16ピクセルを有し(y=16)、水平方向に16ピクセルを有する(x=16)。同様に、N×Nブロックは、一般に、垂直方向にNピクセルを有し、水平方向にNピクセルを有し、ただし、Nは非負整数値を表す。ブロック中のピクセルは行と列に構成され得る。さらに、ブロックは、必ずしも、水平方向に垂直方向と同じ数のピクセルを有する必要はない。たとえば、ブロックはN×Mピクセルを備え得、ただし、Mは必ずしもNに等しいとは限らない。
【0038】
[0045]16×16よりも小さいブロックサイズは、16×16ブロックの区分と呼ばれることがある。ビデオブロックは、ピクセル領域におけるピクセルデータのブロックを備え得、あるいは、たとえば、コード化ビデオブロックと予測ビデオブロックとの間のピクセル差分を表す残差ビデオブロックデータへの離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に同様の変換などの変換の適用後の、変換領域中の変換係数のブロックを備え得る。場合によっては、ビデオブロックは、変換領域における量子化変換係数のブロックを備え得る。
【0039】
[0046]小さいビデオブロックほど、より良い解像度が得られ、高い詳細レベルを含むビデオフレームのロケーションのために使用され得る。一般に、ブロック、およびサブブロックと呼ばれることがある様々なパーティションは、ビデオブロックと見なされ得る。さらに、スライスは、ブロックおよび/またはサブブロックなど、複数のビデオブロックであると見なされ得る。各スライスは、ビデオフレームの単独で復号可能なユニットであり得る。代替的に、フレーム自体が復号可能なユニットであり得るか、またはフレームの他の部分が復号可能なユニットとして定義され得る。「コーディングユニット(coding unit)」という用語は、フレーム全体、フレームのスライス、シーケンスとも呼ばれるピクチャグループ(GOP)など、ビデオフレームの単独で復号可能な任意のユニット、または適用可能なコーディング技法に従って定義される別の単独で復号可能なユニットを指すことがある。
【0040】
[0047]高効率ビデオコーディング(HEVC:High Efficiency Video Coding)と現在呼ばれる、新しいビデオコーディング規格を開発するための取り組みが現在進行中である。この今度の規格はH.265とも呼ばれる。この規格化の取り組みは、HEVCテストモデル(HM:HEVC Test Model)と呼ばれるビデオコーディングデバイスのモデルに基づく。HMは、たとえば、ITU−T H.264/AVCによるデバイスに勝るビデオコーディングデバイスのいくつかの能力を仮定する。たとえば、H.264は9つのイントラ予測符号化モードを提供するが、HMは34個ものイントラ予測符号化モードを提供する。
【0041】
[0048]HEVCでは、ビデオデータのブロックをコーディングユニット(CU)と呼び、CUは、1つまたは複数の予測ユニット(PU:prediction unit)および/または1つまたは複数の変換ユニット(TU)を含み得る。ビットストリーム内のシンタックスデータが、ピクセルの数に関して最大のコーディングユニットである最大コーディングユニット(LCU:largest coding unit)を定義し得る。概して、CUは、CUがサイズの差異を有しないことを除いて、H.264のマクロブロックと同様の目的を有する。したがって、CUは、サブCUに分割され得る。概して、本開示におけるCUへの言及は、ピクチャの最大コーディングユニットまたはLCUのサブCUを指すことがある。LCUはサブCUに分割され得、各サブCUはさらにサブCUに分割され得る。ビットストリームのシンタックスデータは、CU深さと呼ばれる、LCUが分割され得る最大回数を定義し得る。それに応じて、ビットストリームは最小コーディングユニット(SCU:smallest coding unit)をも定義し得る。本開示ではまた、CU、PU、またはTUのいずれかを指すために「ブロック」という用語を使用する。
【0042】
[0049]LCUは4分木データ構造に関連付けられ得る。概して、4分木データ構造はCUごとに1つのノードを含み、ルートノードはLCUに対応する。CUが4つのサブCUに分割された場合、CUに対応するノードは4つのリーフノードを含み、リーフノードの各々はサブCUのうちの1つに対応する。4分木データ構造の各ノードは、対応するCUのシンタックスデータを与え得る。たとえば、4分木のノードは、そのノードに対応するCUがサブCUに分割されるかどうかを示す分割フラグを含み得る。CUのシンタックス要素は、再帰的に定義され得、CUがサブCUに分割されるかどうかに依存し得る。CUがさらに分割されない場合、そのCUはリーフCUと呼ばれる。本開示では、元のリーフCUの明示的分割が存在しなくても、リーフCUの4つのサブCUをリーフCUとも呼ぶ。たとえば、16×16サイズのCUがさらに分割されない場合、この16×16CUが決して分割されなくても、4つの8×8サブCUをリーフCUとも呼ぶ。
【0043】
[0050]その上、リーフCUのTUもそれぞれの4分木データ構造に関連付けられ得る。すなわち、リーフCUは、リーフCUがどのようにTUに区分されるかを示す4分木を含み得る。本開示では、LCUがどのように区分されるかを示す4分木をCU4分木と呼び、リーフCUがどのようにTUに区分されるかを示す4分木をTU4分木と呼ぶ。TU4分木のルートノードは概してリーフCUに対応し、CU4分木のルートノードは概してLCUに対応する。分割されないTU4分木のTUはリーフTUと呼ばれる。
【0044】
[0051]リーフCUは、1つまたは複数の予測ユニット(PU)を含み得る。概して、PUは、対応するCUの全部または一部分を表し、そのPUの参照サンプル(すなわち、参照ピクセル値)を取り出すためのデータを含み得る。たとえば、PUがインターモード符号化されるとき、PUは、PUの動きベクトルを定義するデータを含み得る。動きベクトルを定義するデータは、たとえば、動きベクトルの水平成分、動きベクトルの垂直成分、動きベクトルの解像度(たとえば、1/4ピクセル精度もしくは1/8ピクセル精度)、動きベクトルがポイントする参照フレーム、および/または動きベクトルの参照リスト(たとえば、リスト0もしくはリスト1)を記述し得る。(1つまたは複数の)PUを定義するリーフCUのデータはまた、たとえば、CUを1つまたは複数のPUに区分することを記述し得る。区分モードは、CUがコーディングされないか、イントラ予測モード符号化されるか、またはインター予測モード符号化されるかに応じて異なり得る。イントラコーディングの場合、PUは、以下で説明するリーフ変換ユニットと同じように扱われ得る。
【0045】
[0052]リーフCUは、1つまたは複数の変換ユニット(TU)を含み得る。変換ユニットは、上記で説明したように、TU4分木構造を使用して指定され得る。すなわち、分割フラグは、リーフCUが4つの変換ユニットに分割されるかどうかを示し得る。次いで、各変換ユニットはさらに4つのサブTUに分割され得る。TUがさらに分割されないとき、そのTUはリーフTUと呼ばれることがある。概して、イントラコーディングの場合、リーフCUに属するすべてのリーフTUは同じイントラ予測モードを共有する。すなわち、概して、リーフCUのすべてのTUの予測値を計算するために同じイントラ予測モードが適用される。イントラコーディングの場合、ビデオエンコーダは、イントラ予測モードを使用して各リーフTUの残差値を、TUに対応する予測値の一部と元のブロックとの間の差として計算し得る。残差値は変換され、量子化され、走査され得る。インターコーディングの場合、ビデオエンコーダは、PUレベルで予測を実行し、各PUの残差を計算し得る。リーフCUに対応する残差値は変換され、量子化され、走査され得る。インターコーディングの場合、リーフTUはPUよりも大きくまたは小さくなり得る。イントラコーディングの場合、PUは、対応するリーフTUとコロケートされ得る。いくつかの例では、リーフTUの最大サイズは、対応するリーフCUのサイズであり得る。
【0046】
[0053]概して、本開示では、特に明記しない限り、リーフCUおよびリーフTUに言及するためにそれぞれCUおよびTUという用語を使用する。概して、本開示の技法は、CUのデータを変換し、量子化し、走査し、エントロピー符号化することに関する。一例として、本開示の技法は、ブロックを予測するために使用されたイントラ予測モードに基づいてイントラ予測されたブロックの残差値を変換するために使用すべき変換を選択することを含む。本開示ではまた、イントラ予測モード方向に依存するそのような変換に言及するために「方向性変換(directional transform)」または「設計変換(designed transform)」という用語を使用する。すなわち、ビデオエンコーダは、変換ユニット(TU)に適用すべき方向性変換を選択し得る。上記のように、イントラ予測は、あるピクチャの現在のCUのTUを、同じピクチャの前にコーディングされたCUおよびTUから予測することを含む。より詳細には、ビデオエンコーダは、特定のイントラ予測モードを使用してあるピクチャの現在のTUをイントラ予測し得る。
【0047】
[0054]予測データと残差データとを生成するためのイントラ予測コーディングまたはインター予測コーディングの後、および変換係数を生成するための(H.264/AVCで使用される4×4または8×8整数変換、あるいは離散コサイン変換(DCT)、または他の概念的に同様の変換などの)任意の変換の後、変換係数の量子化が実行され得る。量子化は、概して、係数を表すために使用されるデータの量をできるだけ低減するために変換係数を量子化するプロセスを指す。量子化プロセスは、係数の一部または全部に関連するビット深度を低減し得る。たとえば、量子化中にnビット値がmビット値に切り捨てられ得、nはmよりも大きい。
【0048】
[0055]量子化の後に、たとえば、コンテンツ適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、または別のエントロピーコーディング方法に従って、量子化データのエントロピーコーディングが実行され得る。ビデオエンコーダ20は、VLCを使用してランモードで量子化変換係数をコーディングし得る。係数の値を直接コーディングするのではなく、ビデオコーディングデバイスは、最後非0係数と現在係数との間の走査中の0値係数の数を示す値(「ラン」または「ゼロランレングス」という用語で呼ばれる)と、現在係数が1に等しい絶対値を有するのか、1よりも大きい絶対値を有するのかについてのインジケータ(「レベルID」という用語で呼ばれる)とのペアを表す値をコーディングし得る。
【0049】
[0056]HEVCテストモデルでは、{レベルID、ラン}とコードワード番号cnとの間のマッピングは、係数位置kの各値について指定される。現在のテストモデル(HM3.0)では、2つの異なる方法があり、これらの2つの方法の間の選択は、現在非0係数ロケーションkをしきい値Tと比較することに依存する。詳細なプロセスは以下の通りである。
【数3】
【数4】
【0050】
[0057]現在のHEVC方式は、k<Tの場合、エンコーダにおける2次元テーブルE(ラン,k)と、デコーダにおける2次元テーブルD(ラン,k)とを記憶する。テーブルのサイズは、しきい値Tの値に依存する。T=28のとき、エンコーダとデコーダの両方が434個の要素を記憶する。
【0051】
[0058]本開示の技法によれば、いくつかの走査順序位置における係数について、ビデオエンコーダ20は、「cn」と呼ばれるコードワードインデックスを決定し得、コードワードインデックスは、選択されたテーブル、たとえば、VLCテーブルまたは2値化テーブル中のコードワードのインデックスに対応し得る。すなわち、コードワードマッピングテーブルはペア{ラン、レベルID}をコードワードインデックス値cnにマッピングし得、値cnはテーブル中のコードワードに対応し得、コードワードは、VLCコードワード、またはその後2進算術コーディングされ得る2値化値を備え得る。
【0052】
[0059]ビデオエンコーダ20は、走査中の現在係数の位置に基づいてcnへのペア{ラン、レベルID}のマッピングを決定し得る。値kは、逆走査順序中の現在係数と最後係数(すなわち、逆走査中の最後の係数)との間の係数の数に対応するとする。さらに、E(ラン,k)は、位置kにおける{ラン、レベルID}ペアについてのcnの値を決定するときに使用されるべき値を返す関数を表すとする。E(ラン,k)を使用すべきかどうかは、kがしきい値よりも小さいかどうかに基づき得る。
【0053】
[0060]本開示は、いくつかの特殊な場合について、2次元テーブルではなく、関数を使用するための技法を提供する。たとえば、ビデオエンコーダ20は、現在係数について、kがしきい値よりも小さく、ラン=k+1、およびレベルID=0である特殊な場合のための関数を実行し得る。E1(k)は、そのような関数を表すとする。これは、それが逆走査中の最後有効(すなわち、非0値)係数に対応するという点で特殊な場合である。以下の擬似コードは、修正E1(k)関数を使用するための例示的なエンコーダベースの方法を与える。
【数5】
【0054】
[0061]このようにして、ビデオエンコーダ20は、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることとを行うように構成されたコーディングデバイスの一例を表す。
【0055】
[0062]ビデオエンコーダ20は、ブロックベースのシンタックスデータ、フレームベースのシンタックスデータ、およびGOPベースのシンタックスデータなどのシンタックスデータを、たとえば、フレームヘッダ、ブロックヘッダ、スライスヘッダ、またはGOPヘッダ中でビデオデコーダ30にさらに送り得る。GOPシンタックスデータは、それぞれのGOP中のいくつかのフレームを記述し得、フレームシンタックスデータは、対応するフレームを符号化するために使用される符号化/予測モードを示し得る。
【0056】
[0063]ビデオデコーダ30は、量子化変換係数を復号するための上記で説明した方法と同様の方法を実行するように構成され得る。たとえば、ビデオデコーダ30は、以下の擬似コードによる方法を実行し得る
【数6】
【0057】
[0064]このようにして、ビデオデコーダ30はまた、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることとを行うように構成されたコーディングデバイスの一例を表す。
【0058】
[0065]いくつかの例では、k<Tの場合のcnと{ラン、レベルID}との間のマッピングは、上記で説明した技法に基づいて、たとえば、いくつかの位置についての関数または1次元テーブルを使用して決定され得る。k≧Tの場合のマッピングは、いくつかの例では、従来のHEVCの場合と同様の方法で決定され得る。
【0059】
[0066]いくつかの例によれば、コードワード番号は、以下のルールに基づいて導出される。
【数7】
【0060】
[0067] 上記の2つのルールによれば、ルール1は、レベルID0に関連するあらゆるランには、レベルID1に関連するランについてのコード番号よりも小さいコード番号が割り当てられることを示す。
【0061】
[0068]レベルID値が与えられれば、より短いランには、ランが値k+1を有する場合以外は、より長いランについてのコード番号よりも小さいコード番号が割り当てられるように、ラン2が実行され得る。
【0062】
[0069]2つのルールに基づいて、各{ラン、レベルID}についてのコード番号は、ランが値k+1を有する場合にどんなコード番号が割り当てられるかに応じて決定されることがわかるであろう。ランが値k+1を有する場合が発生する可能性が高いために、ラン値に基づくコード番号割当てが、この場合にそれほど最適でないとわかる。値k(すなわち、現在係数位置)に基づいて、特殊コード番号がこの場合に与えられ得る。
【0063】
[0070]いくつかの例によれば、各{ラン、レベルID}ペアにコード番号を割り当てる際に、ランが値k+1を有する場合のみが特殊コード番号を必要とするが、他の場合、コード番号の割当ては、上記の2つのルール1および2に従う。
【0064】
[0071]いくつかの例によれば、ランが値k+1を有する場合のコード番号は、1次元テーブルE1(k)中に保存され得る。T=28のとき、記憶される28個の要素がある。これらの特殊コード番号をテーブル中に保存することは、一例にすぎないことに留意されたい。いくつかの例では、E1(k)の値はまた、E1(k)の要素を明示的に記憶する必要がないような式を通して得られ得る。
【0065】
[0072]復号ルールは、単に上記の2つの符号化ルールとマッピングテーブルE1(k)とに基づいて導出され得る。テーブルE1(k)のサイズはTである。T=28のとき、記憶される要素は28個しかない。この場合も、いくつかの例では、E1(k)の値はまた、E1(k)の要素を明示的に記憶する必要がないような式を通して得られ得る。
【0066】
[0073]符号化および復号プロセスの詳細は、以下のように記述され得る。
【0067】
[0074]エンコーダ側において、E1(k)関数とあらかじめ定義された2つのルールとの助けをかりて、以下に転載される上記のエンコーダ擬似コードに従って、(E1(k)と、ランと、レベルIDと、位置インデックス値kと、に基づいて)ビデオエンコーダ20によって以下のようにコード番号cnが導出され得る。
【数8】
【0068】
[0075]デコーダ側において、コード番号cnの値と現在係数の位置インデックス値kとに基づいてラン値とレベルID値とを導出するために、以下に転載される上記のデコーダ擬似コードに従って、ビデオデコーダ30によって以下のような逆演算が実行され得る。
【数9】
【0069】
[0076]別の例として、上記で説明した方法は、T1>k≧T0に適用され得る(例1は、T0=TおよびT1=0である特殊な場合である)。k<T0またはk≧T1であるとき、異なる方法が使用される。T1およびT0は、この例では、異なるしきい値を表す。ビデオエンコーダ20は、以下の例示的な擬似コードによる方法を実行し得る。
【数10】
【0070】
[0077]ビデオデコーダ30は、逆であるが、同様の方法を実行するように構成され得る。
【0071】
[0078]さらに別の例として、T0および/またはT1ならびに/あるいは1次元マッピングテーブルE1(k)の値はユーザまたはエンコーダによって選択され、選択された値はオーバーヘッド情報としてデコーダに送信される。たとえば、それらは、PPS(ピクチャパラメータセット)、SPS(スライスパラメータセット)、またはAPS(適応パラメータセット)中で送信され得る。
【0072】
[0079]いくつかの例では、T0および/またはT1ならびに/あるいは1次元マッピングテーブルE1(k)の値は、ピクチャサイズ、ピクチャタイプ、ブロックサイズ、予測モード(たとえば、インター、イントラ)、QP(量子化パラメータ)、パーティションモード(たとえば、2N×2N、N×N)、動きベクトル値、動きベクトル予測子値などのサイド情報に基づいて適応的に決定され得る。サイド情報は、現在ブロックの利用可能なサイド情報であり得るか、または、すでに符号化/復号されたブロックからのサイド情報であり得る。
【0073】
[0080]いくつかの例では、cnと(ラン,レベルID)=(run0,lev0)との間のマッピングを指定するために、1次元テーブルE2(k)が使用される。run0のいくつかの例示的な値は、run_l、run_tおよびk+1であり、run_lは、逆ジグザグ走査中の前の非0係数の左ロケーションに対応し、run_tは、前の係数の上ロケーションに対応している。以下でさらに詳細に説明する
図4は、走査とこれらの位置との例を与える。たとえば、4×4ブロックでは、k=7のとき、前の係数はロケーション8(
図4の102J)にある。ロケーション8の左ロケーションはロケーション3(
図4の102I)であり、それはラン=4に対応し、したがってrun_l=4である。ロケーション8の上ロケーションはロケーション4(
図4の102F)であり、それはラン=3に対応し、したがってrun_t=3である。エンコーダは、(ラン,レベルID)をコード番号cnにマッピングするためにマッピングテーブルE2(k)を使用し、デコーダは逆マッピングを実行する。
【0074】
[0081]いくつかの例では、(ラン,レベルID)とcnとの間のマッピングを定義するためにいくつかの1次元テーブルEi(k)が使用される。たとえば、E1(k)は、cnと(ラン,レベルID)=(k+1,0)との間のマッピングを定義し、E2(k)は、cnと(ラン,レベルID)=(run_l,0)との間のマッピングを定義し、E3(k)は、(ラン,レベルID)=(run_t,0)の間のマッピングを定義する。他の(ラン,レベルID)の場合、cnへのそれらのマッピングは、他の方法を使用して定義され得る。
【0075】
[0082]ビデオエンコーダ20およびビデオデコーダ30はそれぞれ、適用可能なとき、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理回路、ソフトウェア、ハードウェア、ファームウェアなど、様々な好適なエンコーダまたはデコーダ回路のいずれか、あるいはそれらの任意の組合せとして実装され得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも複合ビデオエンコーダ/デコーダ(コーデック)の一部として統合され得る。ビデオエンコーダ20および/またはビデオデコーダ30を含む装置は、集積回路、マイクロプロセッサ、および/またはセルラー電話などのワイヤレス通信デバイスを備え得る。
【0076】
[0083]たとえば、走査順序中のいくつかの位置に基づいて、いくつかの{ラン、レベルID}ペアについてのコードワードインデックスを決定するために関数または1次元テーブルを使用することは、様々な利益を与え得る。たとえば、2次元テーブルを1次元テーブルまたは関数と交換することは、ビデオコーディングデバイスのメモリストレージ要件を軽減し得る。コードワードインデックス値のルックアップは、いくつかの例では、関数または1次元テーブルを使用して2次元テーブルよりも高速に実行され得る。
【0077】
[0084]
図2は、ビデオデータのブロックの係数をコーディングするための技法を実装し得るビデオエンコーダ20の一例を示すブロック図である。ビデオエンコーダ20は、マクロブロック、あるいはマクロブロックのパーティションまたはサブパーティションを含む、ビデオフレーム内のブロックのイントラコーディングおよびインターコーディングを実行し得る。イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、ビデオシーケンスの隣接するフレーム内のビデオの時間的冗長性を低減または除去するために時間的予測に依拠する。イントラモード(Iモード)は、いくつかの空間ベースの圧縮モードのいずれかを指し、単方向予測(Pモード)または双方向予測(Bモード)などのインターモードは、いくつかの時間ベースの圧縮モードのいずれかを指し得る。
【0078】
[0085]典型的なビデオエンコーダは、元のビデオシーケンスの各フレームを、「ブロック」と呼ばれる連続矩形領域に区分する。これらのブロックは、「イントラモード」(Iモード)、または「インターモード」(PモードまたはBモード)で符号化される。
【0079】
[0086]Pモードの場合、エンコーダ(およびより詳細には、動き推定ユニット42)は、最初に、F
refで示された前にコーディングされた「参照フレーム」中で符号化されているブロックと同様のブロックを探索し得る。探索は、概して、符号化されるべきブロックからのある空間変位のみになるように制限される。最良の一致、または「予測」が識別されたとき、それは2次元(2D)動きベクトル(Δx,Δy)の形態で表され、Δxは水平変位であり、Δyは垂直変位である。動きベクトルは、参照フレームとともに、予測ブロックF
predを構成するために使用され得る。
【数11】
【0080】
[0087]フレーム内のピクセルのロケーションは(x,y)によって示される。
【0081】
[0088]Iモードで符号化されたブロックの場合、予測ブロックは、同じフレーム内の前に符号化された隣接ブロックからの空間的予測を使用して形成される。ビデオエンコーダ20のイントラ予測ユニット46は、ブロックをIモードで符号化し得る。
【0082】
[0089]IモードとPモードの両方の場合、予測誤差、すなわち、符号化されているブロックと予測ブロックとの間の差は、いくつかの個別変換の重み付けされた基底関数のセットとして表される。変換は、一般に、たとえば、変換処理ユニット52によって32×32、16×16、8×8、または4×4ブロックベースで実行される。32×16/16×32、32×8/8×32...のような他の変換も可能である。重み、すなわち変換係数は、その後、たとえば、量子化ユニット54によって量子化される。量子化は情報に損失をもたらし、したがって、量子化係数は、元の係数よりも低い精度を有する。
【0083】
[0090]量子化変換係数および動きベクトルは、「シンタックス要素」の例である。これらと一部の制御情報とは、ビデオシーケンスの完全なコード化表現を形成する。エンコーダからデコーダへの送信の前に、すべてのシンタックス要素は、たとえば、エントロピーコーディングユニット56によってエントロピーコーディングされ、それにより、それらの表現のために必要とされるビット数をさらに減らす。エントロピーコーディングは、送信または記憶されたシンボル(シンタックス要素)を表すのに必要なビット数を、それらの分布の性質(いくつかのシンボルは他のシンボルよりも頻繁に生じる)を利用することによって最小限に抑えることを目的としたロスレス演算である。
【0084】
[0091]ビデオコーダによって採用されるエントロピーコーディングの1つの方法は、可変長コード(VLC)である。VLCコーディングの場合、コード化シンボルの各々には、最初にコードワード番号が割り当てられ得る。コーディングされるべきn個のシンボルがあるとき、各シンボルには、0からn−1にわたるコードワード番号が割り当てられ得る。その後、これらのコードワード番号の各々に、コードワード(0と1とのストリング)が割り当てられる。より短いコードワードは、より高い確率を有するシンボルに割り当てられ得る。その上、コードワードは、一意に復号可能でなければならず、すなわち、デコーダが、有限の長さの有効なビットのシーケンスを受信した場合、符号化されるときに、受信したビットのシーケンスを生成したであろう入力シンボルのただ1つの可能なシーケンスが存在しなければならない。
【0085】
[0092]エントロピーコーディングの別の方法はコンテキスト適応型バイナリ算術コーディング(CABAC)である。CABACでは、変換係数または{ラン、レベルID}ペアなど、符号化されるべき値には2値化値が割り当てられ得る。2値化値は、次いで算術コーディングされ得る。本開示の技法によれば、コードワードは2値化値に対応し得る。したがって、ビデオエンコーダ20は、2値化値についてのコードワードインデックスを決定することによって、係数についての2値化値を決定し得る。したがって、本開示におけるコードワードを決定することへの言及は、VLCコードワードの決定と、たとえば、CABACなどの算術コーディングを使用してさらにコーディングされ得る2値化値の決定の両方を含むと理解されるべきである。
【0086】
[0093]正しくビットストリームを復号するために、エンコーダとデコーダの両方が、コードワードの同じセット(たとえば、同じテーブル)と、コードワードへのシンボルの同じ割当てとを使用する。前に説明したように、圧縮を最大にするために、最も頻繁に生じるシンボルには、最も短いコードワードが割り当てられるべきである。しかしながら、異なるシンボルの頻度(確率)は、符号化画像のタイプに応じて変化し得る。したがって、コードワードの単一のセットと、それらのコードワードへのシンボルの単一の割当て(コードワード番号へのシンボルのマッピング)とを使用することにより、コーディング効率が低下することになる。
【0087】
[0094]この問題を修正するために、適応の異なる方法が使用される。シンボルのセットについて、いくつかのコードワードのセットが利用可能であり得る。これらのセットのうちのどちらが使用されるかは、コード化ブロックのタイプ(I、P、またはBタイプブロック)、成分(ルーマまたはクロマ)またはQP値など、エンコーダとデコーダの両方に知られている情報に依存し得る。性能は、コードワード間で切り替えるために使用されるパラメータがどのくらい十分にシンボル統計値を特徴づけるかに依存する。
【0088】
[0095]圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用される量子化パラメータ(QP)の値を調整することによって制御され得る。圧縮比はまた、採用されるエントロピーコーディングの方法に依存する。いくつかの例では、モード選択ユニット40は、各符号化パスが異なるQPを使用する、複数の符号化パスを実行することによって使用すべきQPを決定し、たとえば、レートひずみ最適化(RDO)と呼ばれるプロセスにおいて、ビデオデータをコーディングするために使用されるビット数と、ビデオデータ中にもたらされるひずみの量とを最も良く平衡させるQPを選択する。
【0089】
[0096]
図2に示すように、ビデオエンコーダ20は、符号化されるべきビデオフレーム内の現在のビデオブロックを受信する。
図2の例では、ビデオエンコーダ20は、動き補償ユニット44と、動き推定ユニット42と、参照フレームメモリ64と、加算器50と、変換ユニット52と、量子化ユニット54と、エントロピーコーディングユニット56とを含む。ビデオブロック再構成のために、ビデオエンコーダ20はまた、逆量子化ユニット58と、逆変換ユニット60と、加算器62とを含む。再構成されたビデオからブロッキネスアーティファクトを除去するためにブロック境界をフィルタ処理するデブロッキングフィルタ(
図2に図示せず)も含まれ得る。所望される場合、デブロッキングフィルタは、一般に、加算器62の出力をフィルタ処理することになる。
【0090】
[0097]符号化プロセス中に、ビデオエンコーダ20はコーディングされるべきビデオフレームまたはスライスを受信する。フレームまたはスライスは、複数のビデオブロックに分割され得る。動き推定ユニット42および動き補償ユニット44は、時間圧縮を行うために、1つまたは複数の参照フレーム中の1つまたは複数のブロックに対する受信したビデオブロックのインター予測コーディングを実行する。また、イントラ予測ユニット46は、空間圧縮を行うために、コーディングされるブロックと同じフレームまたはスライス中の1つまたは複数の近傍ブロックに対する受信したビデオブロックのイントラ予測コーディングを実行し得る。
【0091】
[0098]モード選択ユニット40は、たとえば、誤差結果に基づいてコーディングモード、すなわち、イントラまたはインターのうちの1つを選択し、残差ブロックデータを生成するために、得られたイントラコード化ブロックまたはインターコード化ブロックを加算器50に与え、参照フレームとして使用するための符号化ブロックを再構成するために、得られたイントラコード化ブロックまたはインターコード化ブロックを加算器62に与え得る。上記で説明したように、モード選択ユニット40は、QPなどの他のコーディング特性とともに、適切なコーディングモードを選択するためにレートひずみ最適化を使用し得る。
【0092】
[0099]動き推定ユニット42と動き補償ユニット44とは、高度に統合され得るが、概念的な目的のために別々に示してある。動き推定は、ビデオブロックの動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、現在のフレーム(または、他のコード化ユニット)内のコーディングされている現在のブロックに対する予測参照フレーム(または、他のコード化ユニット)内の予測ブロックの変位を示し得る。予測ブロックは、絶対値差分和(SAD:sum of absolute difference)、2乗差分和(SSD:sum of square difference)、または他の差分メトリックによって決定され得るピクセル差分に関して、コーディングされるべきブロックにぴったり一致することがわかるブロックである。動きベクトルはまた、マクロブロックのパーティションの変位を示し得る。動き補償は、動き推定によって決定された動きベクトルに基づいて予測ブロックをフェッチまたは生成することに関与し得る。この場合も、いくつかの例では、動き推定ユニット42と動き補償ユニット44とは機能的に統合され得る。
【0093】
[0100]動き推定ユニット42は、ビデオブロックを参照フレームメモリ64中の参照フレームのビデオブロックと比較することによってインターコード化フレームのビデオブロックの動きベクトルを計算する。動き補償ユニット44はまた、参照フレーム、たとえば、IフレームまたはPフレームのサブ整数ピクセルを補間し得る。一例として、ITU H.264規格には、符号化されている現在フレームよりも前の表示順序を有する参照フレームを含むリスト0、および符号化されている現在フレームよりも後の表示順序を有する参照フレームを含むリスト1という2つのリストが記載されている。したがって、参照フレームメモリ64に記憶されたデータは、これらのリストに従って編成され得る。
【0094】
[0101]動き推定ユニット42は、参照フレームメモリ64からの1つまたは複数の参照フレームのブロックを現在のフレーム、たとえば、PフレームまたはBフレームの符号化すべきブロックと比較する。参照フレームメモリ64中の参照フレームがサブ整数ピクセルの値を含むとき、動き推定ユニット42によって計算される動きベクトルは参照フレームのサブ整数ピクセルロケーションを参照し得る。動き推定ユニット42および/または動き補償ユニット44はまた、サブ整数ピクセル位置の値が参照フレームメモリ64に記憶されていない場合、参照フレームメモリ64に記憶された参照フレームのサブ整数ピクセル位置の値を計算するように構成され得る。動き推定ユニット42は、計算された動きベクトルをエントロピーコーディングユニット56と動き補償ユニット44とに送る。動きベクトルによって識別される参照フレームブロックは予測ブロックと呼ばれることがある。
【0095】
[0102]動き補償ユニット44は、予測ブロックに基づいて予測データを計算し得る。ビデオエンコーダ20は、コーディングされている元のビデオブロックから、動き補償ユニット44からの予測データを減算することによって残差ビデオブロックを形成する。加算器50は、この減算演算を実行する1つまたは複数の構成要素を表す。変換処理ユニット52は、離散コサイン変換(DCT)または概念的に同様の変換などの変換を残差ブロックに適用し、残差変換係数値を備えるビデオブロックを生成する。変換処理ユニット52は、概念的にDCTと同様である、H.264規格によって定義される変換などの他の変換を実行し得る。
【0096】
[0103]ウェーブレット変換、整数変換、サブバンド変換または他のタイプの変換も使用され得る。いずれの場合も、変換処理ユニット52は、変換を残差ブロックに適用し、残差変換係数のブロックを生成する。変換は、残差情報をピクセル領域(空間領域とも呼ばれる)から周波数領域などの変換領域に変換し得る。量子化ユニット54は、ビットレートをさらに低減するために残差変換係数を量子化する。量子化プロセスは、係数の一部または全部に関連するビット深さを低減し得る。量子化の程度は、量子化パラメータを調整することによって修正され得る。
【0097】
[0104]量子化の後に、エントロピーコーディングユニット56は量子化変換係数をエントロピーコーディングする。たとえば、エントロピーコーディングユニット56は、コンテンツ適応型可変長コーディング(CAVLC)、コンテキスト適応型バイナリ算術コーディング(CABAC)、または別のエントロピーコーディング技法を実行し得る。エントロピーコーディングユニット56によるエントロピーコーディングの後、符号化ビデオは、別のデバイスに送信されるか、あるいは後の送信または取出しのためにアーカイブされ得る。コンテキスト適応型バイナリ算術コーディングの場合、コンテキストは近傍マクロブロックに基づき得る。
【0098】
[0105]本開示の技法によれば、エントロピーコーディングユニット56は、係数(すなわち、量子化変換係数)についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行するように構成され得る。たとえば、VLCの場合、エントロピーコーディングユニット56は、係数についてのVLCコードワードを決定し得る。別の例として、CABACの場合、エントロピーコーディングユニット56は、係数についての2値化値を決定し得、さらに2値化値をエントロピー符号化し得る。このようにして、CABACの場合、2値化値はコードワードに対応し得る。特に、CABACを使用してコーディングするときに、エントロピーコーディングユニット56は、VLC中のコードワードインデックス値に対応するコードワードを決定する説明と同様の方法でコードワードインデックス値に対応する2値化値を決定し得る。
【0099】
[0106]エントロピーコーディングユニット56は、本開示の技法を使用して{ラン、レベルID}ペアをコーディングし得る。たとえば、エントロピーコーディングユニット56は、上記で説明したエンコーダ擬似コードに従って実行するように構成され得る。すなわち、いくつかの係数について、エントロピーコーディングユニット56は、コードワードインデックス値と現在係数についてのデータとの間のマッピングを決定するための関数を実行するように構成され得る。たとえば、エントロピーコーディングユニット56は、係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、関数を実行し得る。
【0100】
[0107]別の例として、エントロピーコーディングユニット56は、変換ユニットにおける第1の係数の左にある第2の係数が、0よりも大きい絶対値を有するとき、ラン値が、第2の係数に達するまでの走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを有する係数に対して異なる関数を実行し得る。さらに別の例として、エントロピーコーディングユニット56は、変換ユニットにおける第1の係数の上にある第2の係数が、0よりも大きい絶対値を有するとき、ラン値が、第2の係数に達するまでの走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを有する係数に対してさらに異なる関数を実行し得る。現在係数の上および左の係数の例について、
図4に関して以下により詳細に説明する。
【0101】
[0108]さらに、いくつかの例では、エントロピーコーディングユニット56は、係数の走査順序値が2つのしきい値間にあるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行するように構成され得る。すなわち、エントロピーコーディングユニット56は、走査順序値が第1のしきい値よりも小さく、第1のしきい値よりも小さい第2のしきい値よりも大きいときに、マッピングを決定するための関数を実行し得る。たとえば、T
1は第1のしきい値を表し、T
2は第2のしきい値を表し、kは係数の走査順序値を表すと仮定する。エントロピーコーディングユニット56は、T
2<k<T
1のとき、マッピングを決定するための関数を実行するように構成され得る。エントロピーコーディングユニット56、またはビデオエンコーダ20の別のユニットは、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、適応パラメータセット(APS)、スライスヘッダ、フレームヘッダ、シーケンスヘッダ、または他のデータ構造などのパラメータセット中で第1および/または第2のしきい値を表すシグナリングデータをコーディングするように構成され得る。同様に、ビデオエンコーダ20は、しきい値の値を表すシグナリングデータをコーディングし得、係数についてのデータとコードワードインデックス値との間のマッピングを決定すべきかどうかを決定するために、ただ1つのしきい値が使用される。
【0102】
[0109]エントロピーコーディングユニット56が、CAVLCを使用してデータをコーディングするように構成された場合、エントロピーコーディングユニット56は、VLCテーブルからVLCコードワードを選択するためにコードワードインデックス値を使用し得る。たとえば、VLCテーブルは、特定の順序に従って(たとえば、最も短いものから最も長いものに)構成されたコードワードを含み得、コードワードインデックス値はVLCテーブル中のエントリに対応し得る。たとえば、コードワードインデックス値がnと仮定すると、エントロピーコーディングユニット56は、VLCテーブルから第nのVLCコードワードを選択し得る。
【0103】
[0110]エントロピーコーディングユニット56が、CABACを使用してデータをコーディングするように構成された場合、エントロピーコーディングユニット56は、CABACを使用してコーディングされるべき2値化値を選択するためにコードワードインデックス値を使用し得る。たとえば、エントロピーコーディングユニット56は、上記で説明したVLCコードワードの選択と同様の方法で、2値化テーブルから2値化値を選択し得る。したがって、コードワードインデックス値がnであると仮定すると、エントロピーコーディングユニット56は、2値化テーブルから第nの2値化値を選択し得る。その上、エントロピーコーディングユニット56は、CABACによる算術コーディングを使用して2値化値を符号化し得る。すなわち、エントロピーコーディングユニット56は、現在コンテキスト状態を決定するために、現在シンタックス要素をコーディングするためのコンテキストを初期化し、次いで、2値化値の各ビットをコーディングし得る(CABACでは、ビットは「ビン」と呼ばれる)。2値化値の各ビンをコーディングした後に、エントロピーコーディングユニット56は、直近にコーディングされたビンの値に基づいて現在コンテキスト状態を更新し得る。
【0104】
[0111]場合によっては、エントロピーコーディングユニット56またはビデオエンコーダ20の別のユニットは、エントロピーコーディングに加えて他のコーディング機能を実行するように構成され得る。たとえば、エントロピーコーディングユニット56はマクロブロックおよびパーティションのCBP値を決定するように構成され得る。エントロピーコーディングユニット56はまた、符号化ビデオビットストリーム中での送信のために適切なシンタックス要素を用いてヘッダ情報を構成し得る。
【0105】
[0112]逆量子化ユニット58および逆変換ユニット60は、それぞれ逆量子化および逆変換を適用して、たとえば、参照ブロックとして後で使用するために、ピクセル領域中で残差ブロックを再構成する。動き補償ユニット44は、残差ブロックを参照フレームメモリ64のフレームのうちの1つの予測ブロックに加算することによって参照ブロックを計算し得る。動き補償ユニット44はまた、再構成された残差ブロックに1つまたは複数の補間フィルタを適用して、動き推定において使用するサブ整数ピクセル値を計算し得る。加算器62は、再構成された残差ブロックを、動き補償ユニット44によって生成された動き補償予測ブロックに加算して、参照フレームメモリ64に記憶するための再構成されたビデオブロックを生成する。再構成されたビデオブロックは、後続のビデオフレーム中のブロックをインターコーディングするために動き推定ユニット42および動き補償ユニット44によって参照ブロックとして使用され得る。
【0106】
[0113]このようにして、ビデオエンコーダ20は、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることとを行うように構成されたビデオコーダの一例を表す。特に、この例では、ビデオコーダはビデオエンコーダである。係数についてのデータをコーディングするために、ビデオエンコーダ20は、ビデオ符号化プロセス中にコードワードを使用して係数についての{ラン、レベルID}ペアを符号化するように構成され得る。同様に、コードワードは2値化値を備え得、データをコーディングするために、ビデオエンコーダ20は、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して2値化値をコーディングするように構成され得る。
【0107】
[0114]
図3は、ビデオデータのブロックの係数をコーディングするための技法を実装し得るビデオデコーダ30の一例を示すブロック図である。
図3の例では、ビデオデコーダ30は、エントロピー復号ユニット70と、動き補償ユニット72と、イントラ予測ユニット74と、逆量子化ユニット76と、逆変換ユニット78と、参照フレームメモリ82と、加算器80とを含む。ビデオデコーダ30は、いくつかの例では、ビデオエンコーダ20(
図2)に関して説明した符号化パスとは概して逆の復号パスを実行し得る。動き補償ユニット72は、エントロピー復号ユニット70から受信した動きベクトルに基づいて予測データを生成し得る。
【0108】
[0115]本開示の技法によれば、エントロピー復号ユニット70は、現在係数についてのデータ、たとえば、現在係数についての{ラン、レベルID}ペアに対応するコードワードインデックス値を復号し得る。たとえば、CAVLCでは、エントロピー復号ユニット70は、VLCコードワードを受信し、VLCテーブルからコードワードインデックス値を決定し得る。別の例として、CABACでは、エントロピー復号ユニット70は、2値化値を再生するためにCABAC符号化データを復号し得る。すなわち、エントロピー復号ユニット70は、エントロピーコーディングユニット56に関して上記で説明した遷移と同様のコンテキスト状態を通して遷移すること、および現在の状態と復号されている現在値とに基づいて現在ビットの値を決定することによって、ビットごとに(またはビンごとに)2値化値を再生し得る。このようにして、エントロピー復号ユニット70は2値化値を再生し得る。エントロピー復号ユニット70は、次いで、2値化テーブルから2値化値のコードワードインデックス値を決定し得る。
【0109】
[0116]いずれの場合も、現在係数のデータについてのコードワード(たとえば、VLCコードワードまたは2値化値)を決定した後に、いくつかの例では、エントロピー復号ユニット70は、コードワードインデックス値とデータ、たとえば、{ラン、レベルID}ペアとの間のマッピングを決定するための関数を使用し得る。たとえば、エントロピー復号ユニット70は、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、マッピングを決定するための関数を実行し得る。
【0110】
[0117]別の例として、エントロピー復号ユニット70は、係数に対して異なる関数を実行して、変換ユニットにおける第1の係数の左にある第2の係数が、0よりも大きい絶対値を有するとき、ラン値が、第2の係数に達するための走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを上記係数が有するかどうかを決定し得る。さらに別の例として、エントロピー復号ユニット70は、係数に対してさらに異なる関数を実行して、変換ユニットにおける第1の係数の上にある第2の係数が、0よりも大きい絶対値を有するとき、ラン値が、第2の係数に達するための走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを上記係数が有するかどうかを決定し得る。
【0111】
[0118]さらに、いくつかの例では、エントロピー復号ユニット70は、係数の走査順序値が2つのしきい値間にあるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行するように構成され得る。すなわち、エントロピー復号ユニット70は、走査順序値が第1のしきい値よりも小さく、第1のしきい値よりも小さい第2のしきい値よりも大きいときに、マッピングを決定するための関数を実行し得る。たとえば、T
1は第1のしきい値を表し、T
2は第2のしきい値を表し、kは係数の走査順序値を表すと仮定する。エントロピー復号ユニット70は、T
2<k<T
1のとき、マッピングを決定するための関数を実行するように構成され得る。エントロピー復号ユニット70、またはビデオデコーダ30の別のユニットは、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、適応パラメータセット(APS)、スライスヘッダ、フレームヘッダ、シーケンスヘッダ、または他のデータ構造などのパラメータセット中で第1および/または第2のしきい値を表すシグナリングデータをコーディング(すなわち、復号)するように構成され得る。同様に、ビデオデコーダ30は、しきい値の値を表すシグナリングデータをコーディングし得、係数についてのデータとコードワードインデックス値との間のマッピングを決定すべきかどうかを決定するために、ただ1つのしきい値が使用される。すなわち、ビデオデコーダ30は、(1つまたは複数の)しきい値の(1つまたは複数の)値を決定するために、そのようなデータ構造を受信し、データ構造を復号し得る。
【0112】
[0119]このようにして、ビデオデコーダ30は、変換ユニットの現在係数についての{ラン、レベルID}値のペアを決定し得る。ビデオデコーダ30は、係数についての他のシンタックスデータ(たとえば、実際のレベル値)をさらに復号し、それにより、変換ユニットを再構成し得る。たとえば、レベルID値が、係数が1よりも大きい絶対値を有することを示したとき、ビデオデコーダ30は、係数の実効値を示す追加のシンタックスデータを復号し得る。変換ユニットの各係数についてこれを実行し、走査順序に従って0のランの後に順序中の非0値係数についてのレベル値を配置することによって、ビデオデコーダ30は、現在コーディングユニットのための変換ユニットを再生し得る。その上、逆量子化ユニット76は、変換ユニットを逆量子化し得、逆変換ユニット78は、空間領域中の残差値を再生するために、変換ユニットを逆変換し得る。
【0113】
[0120]ビデオデコーダ30では、現在フレーム中のブロックは、最初にエンコーダの場合と同様の方法でそれの予測を構成し、圧縮された予測誤差を予測に追加することによって得られる。圧縮された予測誤差は、量子化係数を使用して変換基底関数を重み付けすることによって発見される。再構成されたフレームと元のフレームとの間の差は、再構成誤差と呼ばれる。
【0114】
[0121]動き補償ユニット72は、ビットストリーム中で受信した動きベクトルを使用して、参照フレームメモリ82中の参照フレーム中の予測ブロックを識別し得る。イントラ予測ユニット74は、ビットストリーム中で受信されたイントラ予測モードを使用して、空間的に隣接するブロックから予測ブロックを形成し得る。逆量子化ユニット76は、ビットストリーム中で供給され、エントロピー復号ユニット70によって復号された量子化ブロック係数を逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)する。逆量子化プロセスは、たとえば、H.264復号規格によって定義された従来のプロセスを含み得る。逆量子化プロセスはまた、量子化の程度を決定し、同様に、適用されるべき逆量子化の程度を決定するための、各マクロブロックについてエンコーダ50によって計算される量子化パラメータQP
Yの使用を含み得る。
【0115】
[0122]逆変換ユニット58は、逆変換、たとえば、逆DCT、逆整数変換、または概念的に同様の逆変換プロセスを変換係数に適用して、ピクセル領域において残差ブロックを生成する。動き補償ユニット72は、動き補償ブロックを生成し、場合によっては、補間フィルタに基づいて補間を実行する。サブピクセル精度をもつ動き推定に使用されるべき補間フィルタの識別子は、シンタックス要素中に含まれ得る。動き補償ユニット72は、ビデオブロックの符号化中にビデオエンコーダ20によって使用された補間フィルタを使用して、参照ブロックのサブ整数ピクセルのための補間値を計算し得る。動き補償ユニット72は、受信されたシンタックス情報に従って、ビデオエンコーダ20によって使用された補間フィルタを決定し、その補間フィルタを使用して予測ブロックを生成し得る。
【0116】
[0123]動き補償ユニット72は、シンタックス情報のいくつかを使用して、符号化ビデオシーケンスの(1つまたは複数の)フレームを符号化するために使用されるマクロブロックのサイズと、符号化ビデオシーケンスのフレームの各マクロブロックがどのように区分されるのかを記述するパーティション情報と、各パーティションがどのように符号化されるのかを示すモードと、各インター符号化マクロブロックまたはパーティションのための1つまたは複数の参照フレーム(および参照フレームリスト)と、符号化ビデオシーケンスを復号するための他の情報とを決定する。
【0117】
[0124]加算器80は、残差ブロックを、動き補償ユニット72またはイントラ予測ユニットによって生成される対応する予測ブロックと加算して、復号ブロックを形成する。所望される場合、ブロッキネスアーティファクトを除去するために、復号ブロックをフィルタ処理するためにデブロッキングフィルタも適用され得る。復号ビデオブロックは、次いで、参照フレームメモリ82に記憶され、参照フレームメモリ82は、参照ブロックを後続の動き補償に供給し、また、(
図1のディスプレイデバイス32などの)ディスプレイデバイス上での提示のために復号されたビデオを生成する。
【0118】
[0125]ビデオデコーダ30は、TUの受信した係数を復号するために、関数または1次元テーブルを使用することなどの本開示の技法のいずれかまたはすべてを実行するように構成され得る。ビデオデコーダ30は、上記のデコーダ擬似コード、または上記のエンコーダ擬似コードとは逆の方法を実装するように構成され得る。
【0119】
[0126]このようにして、ビデオデコーダ30は、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることとを行うように構成されたビデオコーダの一例を表す。特に、この例では、ビデオコーダはビデオデコーダである。係数についてのデータをコーディングするために、ビデオデコーダ30は、コードワードを使用して係数についての{ラン、レベルID}ペアを決定するように構成され得る。その上、ビデオデコーダ30は、コードワードインデックス値から係数についてのデータを決定するためにコードワードを復号した後に関数を実行するように構成され得る。
【0120】
[0127]
図4は、係数120A〜120P(係数120)の例示的なジグザグ走査を示す概念図である。
図4は4×4ブロックの一例を示しているが、他のブロックサイズも可能である。係数120は、概して、TUのピクセルの変換と量子化とから生じる量子化変換係数に対応する。この例では、ジグザグ走査は、係数120Aから開始し、次いで係数120Bに進み、次いで係数120Eに進み、次いで係数120Iに進み、次いで係数120Fに進み、次いで係数120Cに進み、次いで係数120Dに進み、次いで係数120Gに進み、次いで係数120Jに進み、次いで係数120Mに進み、次いで係数120Nに進み、次いで係数120Kに進み、次いで係数120Hに進み、次いで係数120Lに進み、次いで係数120Oに進み、最後に係数120Pに進む。
【0121】
[0128]この走査を実行することによって、ピクセルの係数の2次元構成は、係数120の各々の値を含む1次元配列に変換され得る。これらの値は、アレイ中で走査順に構成され得る。たとえば、係数120Aの値が配列中の最初にあり得、その後に係数120B、120E、120I、120Fなどの値が続き得る。
【0122】
[0129]所与のブロック中の係数は、ある順序(走査)で構成され、1次元順序付き係数ベクトルを生じる。1つの広く使用される走査は、ジグザグ走査である。4×4ブロックの例示的なジグザグスキャンを
図4に示す。水平走査、垂直走査、波面走査のような何らかの他の走査もあり得る。本開示では、ジグザグ走査は、提案された方式を説明するために使用される。また、本開示の提案された方式は、他の走査とともに動作することができることを理解されたい。
【0123】
[0130]ジグザグ走査は、2次元(2D)変換を適用した後、最高のエネルギーを有する変換係数(すなわち、より高い値の係数)が低周波数変換関数に対応し、
図4に示すように、ブロックの左上に配置されることを想定する。逆に、より高い周波数、より低いエネルギー変換係数は、ブロックの右下のほうに存在する。したがって、ジグザグスキャニングによって生成される係数ベクトルにおいて、大きさが大きい係数ほど、ベクトルの開始近くに現れる可能性が高くなる。量子化の後、大部分の低いエネルギー係数は0に等しくなる。係数コーディング中に係数走査を適応させることも可能である。たとえば、走査中のより小さい番号は、非0係数がより頻繁に発生するそれらの位置に割り当てられ得る。
【0124】
[0131]HEVCテストモデルにおいてVLCを使用して単一の4×4ブロックをエントロピー符号化することは、一例として、以下のステップを伴う。
【0125】
1.走査中の最後の非0係数の絶対値|レベル|が1であるのか、>1であるのかを示すレベルIDと組み合わされた、この係数の位置を符号化する。4×4ブロックの残りの係数は、逆方向走査順序でコーディングされ、ランモードまたはレベルモードでコーディングされる。ランモードからレベルモードに切り替わるためのプロシージャは、すでにコーディングされた係数の絶対値に基づいて決定される。
【0126】
2.ランモードコーディング。このモードでは、前の非0係数から開始するゼロ係数の数がシグナリングされる。シンタックス要素isLevelOne_runは、ランとレベルIDとをジョイントコーディングする。ランの値は、逆走査順序中の現在非0係数と次の非0係数との間のゼロ係数の数に等しいが、レベルIDは、次の非0係数の|レベル|が1であるのか、>1であるのかを示す。現在非0係数が位置kにある場合、ラン値は0からkまでの範囲中にあり得る。kに等しいラン値は、このブロック中にそれ以上非0係数がないことを意味する。{レベルID、ラン}とコードワード数cnとの間のマッピングは、値kに依存する。
【0127】
3.レベルモードコーディング。|レベル|の値は、VLCxを使用して復号され、xは、レベルモードでコーディングされている第1の係数の場合0である。各係数のレベルモード復号の後、|レベル|>vlc_level_table[x]の場合、VLCテーブルインデックスxは1だけ増分される。
【0128】
[0132]CABACを使用して{ラン、レベルID}ペアをコーディングするとき、同様のプロセスが実行され得る。しかしながら、本開示に示すように、VLCコードワードを選択するのではなく、ビデオコーダは2値化値を選択し、次いで、CABACを使用してシンタックス要素をコーディングするとき、さらに2値化値を2進算術コーディングし得る。
【0129】
[0133]上述のように、1次元テーブルと1次元テーブルに近似する式とが、走査順序中の1つまたは複数の特殊位置のために与えられ得る。VLCの場合、ランモードコーディングは、逆走査順序で、たとえば、係数120Pから係数120Aまで実行され得る。したがって、係数120Aは、ランモードコーディングの目的で、すなわち、{ラン、レベルID}ペアをコーディングするときに走査順序中の「最後の」係数として扱われ得る。上述のように、走査順序中の特殊位置の一例は、値kがしきい値よりも小さく、ランがk+1に等しい位置である。たとえば、係数120Dが逆走査順序中の最後の係数であった場合、係数120Dはラン値6とk値7とを有し得る。したがって、ビデオエンコーダ20またはビデオデコーダ30は、コードワードインデックスと係数120Dについての{ラン、レベルID}ペアとの間のマッピングを決定するために、1次元テーブルまたは関数を使用し得る。
【0130】
[0134]上記で説明したように、他の位置は、1次元テーブルまたは関数が与えられ得る特殊位置と見なされ得る。他の特殊位置の例には、run_lおよびrun_tがある。一例として、係数120Dおよび120Cが0値であり、係数120Fが非0値を有するとき、係数120Gは、run_l位置にあると見なされ得る。上記で説明したように、「ラン左」または「runLeft(k)」位置とも呼ばれるrun_l位置は、現在位置とrun_l位置との間の走査順序中のすべての係数が0値であるような現在位置のすぐ左の位置である。別の例として、代替的に、係数120Dが0値であり、係数120Cが非0値を有するとき、係数120Gは、run_t位置にあると見なされ得る。上記で説明したように、「ラン上」または「runTop(k)」位置とも呼ばれるrun_t位置は、現在位置とrun_t位置との間の走査順序中のすべての係数が0値であるような現在位置のすぐ上の位置である。
【0131】
[0135]
図5は、現在ブロックを符号化するための例示的な方法を示すフローチャートである。現在ブロックは、現在CU、または現在CUの一部分を備え得る。ビデオエンコーダ20(
図1および
図2)に関して説明するが、他のデバイスが同様の方法を実行するように構成され得ることを理解されたい。
【0132】
[0136]この例では、ビデオエンコーダ20は、初めに、現在ブロックを予測する(150)。たとえば、ビデオエンコーダ20は、現在ブロックのための1つまたは複数の予測ユニット(PU)についてのピクセル値を計算し得る。たとえば、動き推定ユニット42は、前にコーディングされたピクチャ中の参照ブロックを指すPUについての動きベクトルを計算し得、動き補償ユニット44は、参照ブロックから、予測ユニットについてのピクセル値として使用されるべきピクセル値を抽出し得る。代替的に、イントラ予測ユニット46は、イントラ予測を使用して、予測されたピクセル値を計算し得る。
【0133】
[0137]ビデオエンコーダ20は、次いで、たとえば、変換ユニット(TU)を生成するために、現在ブロックのための残差ブロックを計算する(152)。残差ブロックを計算するために、ビデオエンコーダ20は、元のコーディングされていないブロックと現在ブロックのための予測ブロックとの間の差を計算し得る。たとえば、加算器50は、元のブロックについてのピクセル値とコロケート予測されたピクセル値との間の差を計算し得る。ビデオエンコーダ20は、次いで、残差ブロックの係数を変換し、量子化する(154)。これは、量子化変換係数を含む変換ユニットを生じ得る。
【0134】
[0138]次に、ビデオエンコーダ20は、変換ユニットの量子化変換係数を走査する(156)。走査中に、または走査の後に、ビデオエンコーダ20は、ランモードで係数を符号化する(158)。たとえば、ビデオエンコーダ20は、係数についての{ラン、レベルID}ペアを表す、VLCコードワードまたは2値化値などのコードワードを決定し得る。VLCコーディングの場合、ビデオエンコーダ20は、{ラン、レベルID}ペアについて決定されたコードワード番号に対応するVLCコードワードを使用して{ラン、レベルID}ペアをコーディングし得る。CABACコーディングの場合、ビデオエンコーダ20は、{ラン、レベルID}ペアについて決定されたコードワード番号に対応する2値化値をCABACコーディングし得る。
【0135】
[0139]特に、ビデオエンコーダ20は、逆走査順序中の係数についての{ラン、レベルID}ペアをコーディングし得る。各{ラン、レベルID}ペアについて、ビデオエンコーダ20は、{ラン、レベルID}ペアを符号化するために使用すべきテーブル中のコードワード(たとえば、VLCテーブル中のVLCコードワードまたは2値化テーブル中の2値化値)へのインデックスを表すコードワード番号(cn)を決定し得る。ステップ158を実行するためのいくつかの例に関する追加の詳細について、
図6に関して以下に説明する。このようにしてコードワードを選択して、ビデオエンコーダ20は、ブロックの係数についてのコード化データを出力する(160)。たとえば、VLCの場合、ビデオエンコーダ20はVLCコードワードを出力し得るが、CABACの場合、ビデオエンコーダ20は、2値化値についてのCABACコード化データを出力し得る。
【0136】
[0140]
図6は、現在ブロックの係数についてのコードワードインデックスを符号化するための例示的な方法を示すフローチャートである。特に、
図6の方法は、
図5のステップ158を実行するための方法の一例をより詳細に示している。
図6の方法について、単一の{ラン、レベルID}ペアがコーディングされる単一の係数に関して説明する。
【0137】
[0141]初めに、ビデオエンコーダ20は、位置kにおいて係数を(逆走査順序を使用して)走査する(180)。この例では、係数は、対応するしきい値よりも小さいk値を有すると仮定される。ビデオエンコーダ20は、次いで、係数についてのラン値とレベルID値とを決定する(182)。特に、ビデオエンコーダ20は、ランが、現在係数と次の非0値係数との間の0値係数の数に等しいか、または、残りの非0値係数がない場合に逆走査中の最後係数に等しいこと、を決定し得る。同様に、ビデオエンコーダ20は、係数が絶対値「1」を有するときにレベルIDが値「0」を有すること、または係数が1よりも大きい絶対値を有するときにレベルIDが値「1」を有することを決定し得る。言い換えれば、位置kにおける係数を「A」と呼び、走査順序中の次の非0値係数を「B」と呼ぶ。0に等しいレベルIDは、Bの絶対値が1であることを示し得、1に等しいレベルIDは、Bの絶対値が1よりも大きいことを示し得る。
【0138】
[0142]ビデオエンコーダ20は、次いで、レベルIDが値「0」を有するかどうかを決定する(183)。レベルIDが値「0」を有しない(183の「NO」ブランチ)、たとえば、値「1」の場合、ビデオエンコーダ20は、cnの値をk+2+ランに等しく設定する(184)。他方で、レベルIDが「0」に等しい場合(183の「YES」ブランチ)、ビデオエンコーダ20は、ランがk+1に等しいかどうかをさらに決定する(185)。特に、ビデオエンコーダ20は、現在係数が逆走査順序中の最後非0値係数であるかどうかを判断し得る。
【0139】
[0143]ビデオエンコーダ20が、ランがk+1に等しいと決定したとき(185の「YES」ブランチ)、ビデオエンコーダ20は、たとえば、kの値にインデックスされた1次元テーブルを使用して{ラン、レベルID}ペアについてのcnの値を計算する(186)。代替的に、ビデオエンコーダ20は、1次元テーブルに近似する関数を実行し、値kを関数に渡し得る。関数は、kの値に基づいてcnについての値を返し得る。このようにして、ビデオエンコーダ20は、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行し得、この例では、cnはコードワードインデックス値である。
【0140】
[0144]他方で、ランがk+1に等しくない場合(185の「NO」ブランチ)、ビデオエンコーダ20は、ランがE1(k)、すなわち、kの値について1次元テーブルによって返された値、よりも小さいかどうかを決定する(188)。ランがE1(k)よりも小さい場合(188の「YES」ブランチ)、ビデオエンコーダ20は、cnがランに等しい値を有することを決定する(190)。他方で、ランがE1(k)よりも大きい場合(188の「NO」ブランチ)、ビデオエンコーダ20は、cnがrun+1に等しい値を有することを決定する(192)。ビデオエンコーダ20は、次いで、cnの決定された値にマッピングされたコードワード、たとえば、VLCテーブルからのVLCコードワード、またはCABACの場合、2値化テーブルからの2値化値を選択する(194)。さらに、CABACの場合、ビデオエンコーダ20は、選択された2値化値をエントロピー符号化し得る。
【0141】
[0145]このようにして、
図5および
図6は、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることとを含む、ビデオデータをコーディングする方法の例を表す。
【0142】
[0146]
図7は、ビデオデータの現在ブロックを復号するための例示的な方法を示すフローチャートである。現在ブロックは、現在CU、または現在CUの一部分を備え得る。ビデオデコーダ30(
図1および
図3)に関して説明するが、他のデバイスが同様の方法を実行するように構成され得ることを理解されたい。
【0143】
[0147]ビデオデコーダ30は、現在ブロックのための予測ブロックを計算するために、たとえば、イントラまたはインター予測モードを使用して現在ブロックを予測する(200)。ビデオデコーダ30はまた、現在ブロックに対応する残差ブロックの係数についてのコードワードに対応するコード化データを受信する(202)。たとえば、VLCでは、コード化データはVLCコードワード自体であり得るが、CABACの場合、コード化データは、ビデオデコーダ30が、2値化値(すなわち、コードワード)を再生するためにCABAC復号し得る2値化値に対応するCABACコード化データを備え得る。
【0144】
[0148]ビデオデコーダ30は、コードワードがマッピングされるコードワードインデックスを決定し、係数についてのデータを再生するためにランモードを使用して、コードワードからマッピングされるコードワードインデックスを復号する(204)。もちろん、上記で説明したように、係数についてのデータは{ラン、レベルID}ペアに対応する。
図7には示されていないが、ビデオデコーダ30はさらに、レベルIDが、レベル値が1よりも大きいことを示すとき、係数についての実際のレベル値を示す係数についてのレベルデータを復号し得る。ビデオデコーダ30はまた、量子化変換係数のブロックを作成するために再生係数を逆走査する(206)。ビデオデコーダ30は、次いで、残差ブロックを生成するために、係数を逆量子化し、逆走査する(208)。残差ブロックは、ピクセル領域中の残差係数を含み得る。ビデオデコーダ30は、最終的に、予測ブロックと残差ブロックとを組み合わせることによって現在ブロックを復号する(210)。すなわち、ビデオデコーダ30は、対応するブロックについての個々のピクセル値を再生するために、残差値と予測値とを加算し得る。
【0145】
[0149]
図8は、コードワードインデックスを復号するための例示的な方法を示すフローチャートである。特に、
図8の方法は、より詳細に
図7のステップ204を実行するための方法の一例である。
図8の例は、単一の係数についての単一のコードワードインデックス値cnに関して説明し、この係数は、しきい値よりも小さいk値を有すると仮定される。
【0146】
[0150]いくつかの例では、ビデオデコーダ30はVLCコードワードを受信し得るが、他の例では、ビデオデコーダ30は、2値化値(すなわち、コードワード)を再生するために、受信したCABACコード化データを復号し得る。いずれの場合も、ビデオデコーダ30は、位置kにおける係数についてのコードワードから係数についてのコードワードインデックス値cnを決定する(220)。たとえば、ビデオデコーダ30は、VLCテーブルから、受信したVLCコードワードがマッピングされるコードワードインデックス値を決定し得る。代替的に、ビデオデコーダ30は、2値化値を再生し、2値化テーブルを使用してコードワードインデックスを決定し得る。このようにして、ビデオデコーダ30は、コードワードインデックス値に関連するコードワード(たとえば、VLCコードワードまたは2値化値)を使用して、係数についてのデータをコーディングし得る。
【0147】
[0151]ビデオデコーダ30は、次いで、cnがk+1よりも大きいかどうかを決定する(222)。cnがk+1よりも大きい場合(222の「YES」ブランチ)、ビデオデコーダ30は、係数についてのレベルIDが値「1」を有すること(224)と、係数についてのラン値が値cn−k−2を有すること(226)とを決定する。このようにして、ビデオデコーダ30は、cnがk+1よりも大きいとき、係数についての{ラン、レベルID}ペアを再構成し得る。
【0148】
[0152]他方で、cnがk+1よりも大きくないとき(222の「NO」ブランチ)、ビデオデコーダ30は、レベルIDが値「0」を有することを決定する(228)。その上、ビデオデコーダ30は、cnが、E1(k)によって返される値、すなわち、kの値に対して実行される関数によって返される値に等しいかどうかを決定し、関数は1次元テーブルに近似する(230)。代替的に、ビデオデコーダ30は、実際の1次元テーブルを使用してこの値を決定し得る。E1(k)によって返される値が、cnに等しい場合(230の「YES」ブランチ)、ビデオデコーダ30は、ランが値k+1を有することを決定する(232)。このようにして、係数が走査順序中の最後有効係数であるとき、ビデオデコーダ30は、係数についてのデータ(たとえば、ラン値)とコードワードインデックス値cnとの間のマッピングを決定するための関数を実行し得る。
【0149】
[0153]他方で、E1(k)によって返される値が、cnに等しくない場合(230の「NO」ブランチ)、ビデオデコーダ30は、cnが、E1(k)によって返される値よりも小さいかどうかを決定する(234)。cnが、E1(k)によって返される値よりも小さい場合(「234のYESブランチ」)、ビデオデコーダ30は、ランがcnに等しい値を有することを決定する(236)。しかしながら、cnが、E1(k)によって返される値よりも大きい場合(234の「NO」ブランチ)、ビデオデコーダ30は、ランがcn−1に等しい値を有することを決定する(238)。ビデオデコーダ30は、次いで、決定された{ラン、レベルID}ペアを使用して係数を復号する(240)。
【0150】
[0154]このようにして、
図7および
図8の例は、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および係数が変換ユニットにおける走査順序中の最後有効係数であるとき、係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、コードワードインデックス値に関連するコードワードを使用して係数についてのデータをコーディングすることとを含む、データをコーディングするための方法の例を表す。
【0151】
[0155]
図5〜
図8の例には示されていないが、ビデオエンコーダ20およびビデオデコーダ30は、他の状況の場合、係数についてのデータとコードワードインデックス値との間のマッピングを決定するために他の関数を使用するように構成され得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、変換ユニットにおける第1の係数の左にある第2の係数が、0よりも大きい絶対値を有するとき、ラン値が、第2の係数に達するための走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを有する係数についてのマッピングを決定するために異なる関数を実行するように構成され得る。別の例として、ビデオエンコーダ20およびビデオデコーダ30は、変換ユニットにおける第1の係数の上にある第2の係数が、0よりも大きい絶対値を有するとき、ラン値が、第2の係数に達するための走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを有する係数についてのマッピングを決定するためにさらに別の異なる関数を実行するように構成され得る。
【0152】
[0156]その上、上述のように、k値は、
図5〜
図8の方法を実行する際に対応するしきい値よりも小さいと仮定された。しかしながら、他の例では、ビデオエンコーダ20およびビデオデコーダ30は、係数についてのkが2つのしきい値間にあるとき、これらの方法を実行し得る。たとえば、ビデオエンコーダ20は、kが第1のしきい値T1よりも小さく、第2のしきい値T2よりも大きいとき、
図5および
図6の方法を実行し得る。同様に、ビデオデコーダ30は、kが第1のしきい値T1よりも小さく、第2のしきい値T2よりも大きいとき、
図7および
図8の方法を実行し得る。しかしながら、kがT1よりも大きいか、またはT2よりも小さいとき、ビデオエンコーダ20およびビデオデコーダ30は、これらの例では、代替方法を実行し得る。さらに、本方法は、しきい値についての値を決定するためのシグナリングデータをコーディングすることをさらに含み得る。
【0153】
[0157]例によっては、本明細書で説明した方法のうちいずれかの、いくつかの作用またはイベントは、異なるシーケンスで実行され得、追加、マージ、または完全に除外され得る(たとえば、すべての説明した作用またはイベントが、本方法の実施のために必要であるとは限らない)ことを認識されたい。さらに、いくつかの例では、行為またはイベントは、連続してではなくむしろ、同時に、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して実行され得る。
【0154】
[0158]1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含むデータ記憶媒体または通信媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、あるいは(2)信号または搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
【0155】
[0159]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイ(登録商標)ディスク(disc)を含み、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【0156】
[0160]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)などの1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路、あるいはそれらの組合せによって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指し得る。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび/またはソフトウェアモジュール内に与えられ得、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
【0157】
[0161]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実施され得る。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
【0158】
[0162]様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1] ビデオデータをコーディングする方法であって、前記方法は、
ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および前記係数が前記変換ユニットにおける走査順序中の最後有効係数であるとき、
前記係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、
前記コードワードインデックス値に関連するコードワードを使用して前記係数についての前記データをコーディングすることと、
を備える方法。
[2] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、前記方法は、さらに、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の左にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、
前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行することと、
前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、
を備える、[1]に記載の方法。
[3] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、前記方法は、さらに、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の上にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、
前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行することと、
前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、
を備える、[1]に記載の方法。
[4] 前記しきい値は第1のしきい値を備え、前記関数を実行することと、前記データをコーディングすることとは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに、前記関数を実行することと、前記データをコーディングすることを備える、[1]に記載の方法。
[5] 前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記しきい値を示すシグナリング値をコーディングすることをさらに備える、[1]に記載の方法。
[6] 前記係数についての前記データをコーディングすることは、ビデオ符号化プロセス中に前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを符号化することを備える、[1]に記載の方法。
[7] 前記係数についての前記データをコーディングすることは、ビデオ復号プロセス中に前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを決定することを備える、[1]に記載の方法。
[8] 前記コードワードは2値化値を備え、前記データをコーディングすることは、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングすることをさらに備える、[1]に記載の方法。
[9] 前記データをコーディングすることは、前記コードワードインデックス値を再生するために前記コードワードを復号することを備え、前記関数を実行することは、前記コードワードインデックス値から前記係数についての前記データを決定するために前記コードワードを復号した後に前記関数を実行することを備える、[1]に記載の方法。
[10] 前記コードワードを復号することは、前記コードワードを備える2値化値を再生するためにデータをエントロピー復号することと、前記2値化値が対応する前記コードワードインデックス値を決定することと、を備える[9]に記載の方法。
[11] 前記変換ユニットに対応する予測データを決定することと、前記変換ユニットについての残差データを再生することと、前記予測データと前記残差データとを組み合わせることと、をさらに備える[9]に記載の方法。
[12] 前記係数についての前記データをコーディングすることは、前記関数を実行した後に前記コードワードを使用して前記データを符号化することを備える、[1]に記載の方法。
[13] ビデオデータをコーディングするためのデバイスであって、前記デバイスは、ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および前記係数が前記変換ユニットにおける走査順序中の最後有効係数であるとき、前記係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、前記コードワードインデックス値に関連するコードワードを使用して前記係数についての前記データをコーディングすることとを行うように構成されたビデオコーダを備えるデバイス。
[14] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、前記ビデオコーダは、さらに、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の左にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、
前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行することと、
前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、
を行うように構成された、[13]に記載のデバイス。
[15] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、前記ビデオコーダは、さらに、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の上にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、
前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行することと、
前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、
を行うように構成された、[13]に記載のデバイス。
[16] 前記しきい値は第1のしきい値を備え、前記ビデオコーダは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに前記関数を実行し、前記データをコーディングするように構成された、[13]に記載のデバイス。
[17] 前記ビデオコーダは、さらに、前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記しきい値を示すシグナリング値をコーディングするようにさらに構成された、[13]に記載のデバイス。
[18] 前記ビデオコーダはビデオデコーダを備える、[13]に記載のデバイス。
[19] 前記係数についての前記データをコーディングするために、前記ビデオデコーダは、前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを決定するように構成された、[18]に記載のデバイス。
[20] 前記ビデオデコーダは、前記コードワードインデックス値を再生するために前記コードワードを復号するように構成され、前記関数を実行するために、前記ビデオデコーダは、前記コードワードインデックス値から前記係数についての前記データを決定するために前記コードワードを復号した後に前記関数を実行するように構成された、[18]に記載のデバイス。
[21] 前記ビデオコーダはビデオエンコーダを備える、[13]に記載のデバイス。
[22] 前記係数についての前記データをコーディングするために、前記ビデオエンコーダは、ビデオ符号化プロセス中に、前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを符号化するように構成された、[21]に記載のデバイス。
[23] 前記コードワードは2値化値を備え、前記データをコーディングするために、前記ビデオコーダは、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングするように構成された、[13]に記載のデバイス。
[24] ビデオデータをコーディングするためのデバイスであって、前記デバイスは、
ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および前記係数が前記変換ユニットにおける走査順序中の最後有効係数であるとき、前記係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行する手段と、
前記係数が前記走査順序値を有するとき、および前記係数が前記変換ユニットにおける前記走査順序中の前記最後有効係数であるとき、前記コードワードインデックス値に関連するコードワードを使用して前記係数についての前記データをコーディングする手段と、
を備えるデバイス。
[25] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の左にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行する手段と、
前記第1の係数についての前記データが前記{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい前記値を有するとき、前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングする手段と、
をさらに備える、[24]に記載のデバイス。
[26] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の上にある第2の係数に達するために前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行する手段と、
前記第1の係数についての前記データが前記{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい前記値を有するとき、前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングする手段と、
をさらに備える、[24]に記載のデバイス。
[27] 前記しきい値は第1のしきい値を備え、前記関数を実行する手段と、前記データをコーディングする手段とは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに、前記関数を実行する手段と、前記データをコーディングする手段とを備える、[24]に記載のデバイス。
[28] 前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記しきい値を示すシグナリング値をコーディングする手段をさらに備える、[24]に記載のデバイス。
[29] 前記係数についての前記データをコーディングする手段は、ビデオ復号プロセス中に前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを決定する手段を備える、[24]に記載のデバイス。
[30] 前記データをコーディングする手段は、前記コードワードインデックス値を再生するために前記コードワードを復号する手段を備え、前記関数を実行する手段は、前記コードワードインデックス値から前記係数についての前記データを決定するために前記コードワードを復号した後に前記関数を実行する手段を備える、[29]に記載のデバイス。
[31] 前記係数についての前記データをコーディングする手段は、ビデオ符号化プロセス中に前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを符号化する手段を備える、[24]に記載のデバイス。
[32] 前記コードワードは2値化値を備え、前記データをコーディングする手段は、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングする手段をさらに備える、[24]に記載のデバイス。
[33] 実行されたとき、ビデオデータをコーディングするためのデバイスのプロセッサに、
ビデオデータの変換ユニットの係数が、しきい値よりも小さい走査順序値を有するとき、および前記係数が前記変換ユニットにおける走査順序中の最後有効係数であるとき、
前記係数についてのデータとコードワードインデックス値との間のマッピングを決定するための関数を実行することと、
前記コードワードインデックス値に関連するコードワードを使用して前記係数についての前記データをコーディングすることと、
を行わせる命令を記憶したコンピュータ可読媒体を備えるコンピュータプログラム製品。
[34] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の左にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、前記プロセッサに、
前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行することと、
前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、
を行わせる命令をさらに備える、[33]に記載のコンピュータプログラム製品。
[35] 前記関数は第1の関数を備え、前記マッピングは第1のマッピングを備え、前記コードワードインデックス値は第1のコードワードインデックス値を備え、前記係数は第1の係数を備え、
前記第1の係数についての前記データが、ラン値が前記変換ユニットにおける前記第1の係数の上にある第2の係数に達するための前記走査順序中の係数の数に等しくなるような{ラン、レベルID}ペアを備えるとき、および前記第2の係数が0よりも大きい絶対値を有するとき、前記プロセッサに、
前記第1の係数についての前記データと第2のコードワードインデックス値との間の第2のマッピングを決定するための第2の関数を実行することと、
前記第2のコードワードインデックス値に関連するコードワードを使用して前記第1の係数についての前記データをコーディングすることと、
を行わせる命令をさらに備える、[33]に記載のコンピュータプログラム製品。
[36] 前記しきい値が第1のしきい値を備え、前記プロセッサに前記関数を実行させる前記命令と、前記プロセッサに前記データをコーディングさせる前記命令とは、前記走査順序値が前記第1のしきい値よりも小さく、前記第1のしきい値よりも小さい第2のしきい値よりも大きいときに、前記プロセッサに前記関数を実行させる命令と、前記プロセッサに前記データをコーディングさせる命令とを備える、[33]に記載のコンピュータプログラム製品。
[37] 前記変換ユニットを含むスライスについてのスライスパラメータセット(SPS)と、前記変換ユニットを含む前記スライスについての適応パラメータセット(APS)と、前記変換ユニットを含むピクチャについてのピクチャパラメータセット(PPS)とのうちの少なくとも1つ中で、前記プロセッサに、前記しきい値を示すシグナリング値をコーディングさせる命令をさらに備える、[33]に記載のコンピュータプログラム製品。
[38] 前記プロセッサに前記係数についての前記データをコーディングさせる前記命令は、前記プロセッサに前記係数についての前記データを復号させる命令を備える、[33]に記載のコンピュータプログラム製品。
[39] 前記プロセッサに前記係数についての前記データをコーディングさせる前記命令は、前記プロセッサに、前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを決定させる命令を備える、[38]に記載のコンピュータプログラム製品。
[40] 前記プロセッサに前記データをコーディングさせる前記命令は、前記プロセッサに、前記コードワードインデックス値を再生するために前記コードワードを復号させる命令を備え、
前記プロセッサに前記関数を実行させる前記命令は、前記プロセッサに、前記コードワードインデックス値から前記係数についての前記データを決定するために前記コードワードを復号した後に前記関数を実行させる命令を備える、
[38]に記載のコンピュータプログラム製品。
[41] 前記プロセッサに前記コードワードを復号させる前記命令は、前記プロセッサに、前記コードワードを備える2値化値を再生するためにデータをエントロピー復号させる命令と、
前記プロセッサに、前記2値化値が対応する前記コードワードインデックス値を決定させる命令と、
を備える、[38]に記載のコンピュータプログラム製品。
[42] 前記プロセッサに前記係数についての前記データをコーディングさせる前記命令は、前記プロセッサに、前記係数についての前記データを復号させる命令を備える、[33]に記載のコンピュータプログラム製品。
[43] 前記プロセッサに前記係数についての前記データをコーディングさせる前記命令は、前記プロセッサに、前記コードワードを使用して前記係数についての{ラン、レベルID}ペアを符号化させる命令を備える、[42]に記載のコンピュータプログラム製品。
[44] 前記コードワードは2値化値を備え、
前記プロセッサに前記データをコーディングさせる前記命令は、前記プロセッサに、コンテキスト適応型バイナリ算術コーディング(CABAC)を使用して前記2値化値をエントロピーコーディングさせる命令をさらに備える、[33]に記載のコンピュータプログラム製品。