(57)【特許請求の範囲】
【請求項１】
ビデオデータのブロックをコーディングするデバイスにおける方法であって、
ビデオデータの前記ブロックがルーマブロックであるかクロマブロックであるかを、判断する手段が判断することと、
ビデオデータの前記ブロックがルーマブロックである場合、走査順序におけるビデオデータの前記ブロックの最後非０変換係数の位置と、ビデオデータの前記ブロックの最後非０変換係数の大きさが１であるのかまたは１よりも大きいのかに基づくコード番号ｃｎとスケーリングファクタとに基づいて、複数の可変長コーディング（ＶＬＣ）テーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を、更新する手段が適応的に更新することと、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を、前記更新する手段が適応的に更新することと
を備える、方法。
【請求項２】
ビデオデータの複数のクロマブロックを、符号化する手段が符号化することと、
各クロマブロックについて、前記クロマブロックのサイズにかかわらず、同じ複数のＶＬＣテーブルから前記ＶＬＣテーブルを、選択する手段が選択することと
をさらに備える、請求項１に記載の方法。
【請求項３】
ビデオデータの複数のルーマブロックを、符号化する手段が符号化することと、
前記ルーマブロックの各々について、前記ルーマブロックのサイズに基づいて、２つ以上の複数のＶＬＣテーブルのうちの複数のＶＬＣテーブルを、選択する手段が選択することと
をさらに備える、請求項１に記載の方法。
【請求項４】
コード番号ｃｎと前記スケーリングファクタとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を、前記更新する手段が適応的に更新することが、現在ＶＬＣテーブルインデックス値を、前記スケーリングファクタによって除算された前記コード番号ｃｎと比較することを備える、請求項１に記載の方法。
【請求項５】
前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を、前記更新する手段が適応的に更新することが、前記現在ＶＬＣテーブルインデックス値を前記コード番号ｃｎと比較することを備える、請求項１に記載の方法。
【請求項６】
コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を、前記更新する手段が適応的に更新することは、
ビデオデータの前記ブロックのサイズを、前記更新する手段が判断することと、
ビデオデータの前記ブロックがルーマブロックであり、８×８よりも大きいサイズを有する場合、前記コード番号ｃｎと前記スケーリングファクタとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
を備え、
さらに、ビデオデータの前記ブロックが８×８よりも大きいサイズを有していない場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を、前記更新する手段が適応的に更新することと
を備える、請求項１に記載の方法。
【請求項７】
前記方法が、コンピューティングデバイスのプロセッサによって実行される、請求項１に記載の方法。
【請求項８】
前記方法がエンコーダによって実行され、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを符号化するために使用される、請求項１に記載の方法。
【請求項９】
前記方法がデコーダによって実行され、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを復号するために使用される、請求項１に記載の方法。
【請求項１０】
ビデオデータのブロックをコーディングするように構成されたデバイスであって、
ビデオデータの前記ブロックがルーマブロックであるかクロマブロックであるかを判断することと、
ビデオデータの前記ブロックがルーマブロックである場合、走査順序におけるビデオデータの前記ブロックの最後非０変換係数の位置と、ビデオデータの前記ブロックの最後非０変換係数の大きさが１であるのかまたは１よりも大きいのかに基づくコード番号ｃｎとスケーリングファクタとに基づいて、複数の可変長コーディング（ＶＬＣ）テーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
を行うように構成されたプロセッサ
を備える、デバイス。
【請求項１１】
ビデオデータの複数のクロマブロックを符号化することと、
各クロマブロックについて、前記クロマブロックのサイズにかかわらず、同じ複数のＶＬＣテーブルから前記ＶＬＣテーブルを選択することと
を行うように構成されたプロセッサをさらに備える、請求項１０に記載のデバイス。
【請求項１２】
ビデオデータの複数のルーマブロックを符号化することと、
前記ルーマブロックの各々について、前記ルーマブロックのサイズに基づいて、２つ以上の複数のＶＬＣテーブルのうちの複数のＶＬＣテーブルを選択することと
を行うように構成されたプロセッサをさらに備える、請求項１０に記載のデバイス。
【請求項１３】
コード番号ｃｎと前記スケーリングファクタとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することが、現在ＶＬＣテーブルインデックス値を、前記スケーリングファクタによって除算された前記コード番号ｃｎと比較することを備える、請求項１０に記載のデバイス。
【請求項１４】
前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することが、前記現在ＶＬＣテーブルインデックス値を前記コード番号ｃｎと比較することを備える、請求項１０に記載のデバイス。
【請求項１５】
コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新するために、前記プロセッサは、
ビデオデータの前記ブロックのサイズを判断することと、
ビデオデータの前記ブロックがルーマブロックであり、８×８よりも大きいサイズを有する場合、前記コード番号ｃｎと前記スケーリングファクタとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
を行うように構成され、
前記プロセッサはさらに、ビデオデータの前記ブロックが８×８よりも大きいサイズを有していない場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することとを行うように構成される、請求項１０に記載のデバイス。
【請求項１６】
前記デバイスがエンコーダであり、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを符号化するために使用される、請求項１０に記載のデバイス。
【請求項１７】
前記デバイスがデコーダであり、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを復号するために使用される、請求項１０に記載のデバイス。
【請求項１８】
実行されたとき、コンピューティングデバイスに、
ビデオデータのブロックがルーマブロックであるかクロマブロックであるかを判断することと、
ビデオデータの前記ブロックがルーマブロックである場合、走査順序におけるビデオデータの前記ブロックの最後非０変換係数の位置と、ビデオデータの前記ブロックの最後非０変換係数の大きさが１であるのかまたは１よりも大きいのかに基づくコード番号ｃｎとスケーリングファクタとに基づいて、複数の可変長コーディング（ＶＬＣ）テーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
を行わせる命令を記憶する、コンピュータ可読記憶媒体。
【請求項１９】
ビデオデータのブロックをコーディングするように構成されたデバイスであって、
ビデオデータの前記ブロックがルーマブロックであるかクロマブロックであるかを判断するための手段と、
ビデオデータの前記ブロックがルーマブロックである場合、走査順序におけるビデオデータの前記ブロックの最後非０変換係数の位置と、ビデオデータの前記ブロックの最後非０変換係数の大きさが１であるのかまたは１よりも大きいのかに基づくコード番号ｃｎとスケーリングファクタとに基づいて、複数の可変長コーディング（ＶＬＣ）テーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新するための手段と、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新するための手段と
を備える、デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、その各々の内容全体が参照により本明細書に組み込まれる、以下の米国仮出願の優先権を主張する。
【０００２】
２０１１年６月２９日に出願された米国仮出願第６１／５０２，７９４号、および
２０１１年１０月２７日に出願された米国仮出願第６１／５５２，３４６号。
【０００３】
本開示は、ビデオコーディングおよび圧縮に関する。より詳細には、本開示は、ビデオデータの１つまたは複数のブロックのための変換係数を符号化するために可変長コーディング（ＶＬＣ）を使用する技法を対象とする。
【背景技術】
【０００４】
エントロピー符号化は、ビデオデータを圧縮するためにビデオコーディングにおいて広く採用されている方法である。エントロピー符号化のいくつかの態様によれば、ビデオエンコーダは、変換係数の１次元ベクトルを生成するために、画像のピクセルを表す変換係数の２次元行列を走査する。多くの適用例では、ビデオエンコーダは、有利には、ビデオデータをさらに圧縮するために変換係数を量子化する方法を採用する。ビデオデコーダはビデオデータを復号する。復号プロセスの一部として、ビデオデコーダは、変換係数の２次元行列を再構成するために変換係数の１次元ベクトルを走査する。
【０００５】
１つまたは複数の例の詳細は、添付の図面および以下の説明に記載されている。本発明の他の特徴、目的、および利点は、これらの説明および図面、ならびに特許請求の範囲から明らかになろう。
【発明の概要】
【０００６】
概して、本開示では、ビデオデータをコーディングするための技法、特にビデオコーディングプロセス中に変換係数を走査することに関する技法について説明する。いくつかの例では、ビデオエンコーダは、エントロピー符号化中に生成される量子化変換係数アレイに関連する様々な可能な値を表すために可変長コード（ＶＬＣ：variable length code）を使用するように構成される。そのような場合、符号化プロセスの中間ステップは、メモリ中に記憶された少なくとも１つの値を使用することに依拠する。本開示では、ビデオデータのＶＬＣコーディングを実装するために必要とされるメモリリソースを最小限に抑えるかまたは低減するための方法について説明する。
【０００７】
１つまたは複数の例の詳細は、添付の図面および以下の説明に記載されている。本発明の他の特徴、目的、および利点は、これらの説明および図面、ならびに特許請求の範囲から明らかになろう。これらの例のうちのいくつかに従って、８×８よりも大きいサイズのクロマブロックのための専用コーディング方式について説明する。
【０００８】
一実施形態は、ビデオデータのブロックがルーマブロックであるのかクロマブロックであるのかを最初に判断することによって、ビデオデータのブロックをコーディングする方法を含む。ビデオデータのブロックがルーマブロックである場合、コード番号ｃｎに基づいて複数のＶＬＣテーブルからＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値と、スケーリングファクタの値との両方が適応的に更新される。一方、ビデオデータのブロックがクロマブロックである場合、ＶＬＣテーブルインデックス値は、コード番号ｃｎに基づいて適応的に更新され、スケーリングファクタは使用されない。
【０００９】
別の実施形態は、上記の例の方法または本明細書で開示する他の技法を実行するために使用され得る、コンピューティングデバイスのプロセッサ、または特にエンコーダまたはデコーダを含む。他の実施形態は、プロセッサにそのような方法を実行させるための命令を記憶するコンピュータ可読媒体を含む。
【図面の簡単な説明】
【００１０】
【図１】本開示の技法に従って動作するように構成されたビデオ符号化および復号システムの一例を示すブロック図。
【図２】本開示の技法に従って動作するように構成されたビデオエンコーダの一例を示すブロック図。
【図３】本開示の技法に従って動作するように構成されたビデオデコーダの一例を示すブロック図。
【図４】本開示の１つまたは複数の態様に一致する、ビデオデータのブロックをコーディングする方法の一例を示す表。
【図５】本開示の１つまたは複数の態様に一致する、ビデオデータのブロックをコーディングする方法の一例を示す流れ図。
【発明を実施するための形態】
【００１１】
概して、本開示では、ビデオデータをコーディングするための技法について説明する。より詳細には、本開示では、ビデオコーディングプロセス中に変換係数を走査することに関する技法について説明する。符号化ビデオデータは、一般に、予測データと残差データとを含む。ビデオエンコーダは、イントラ予測モードまたはインター予測モードを使用して予測データを生成する。イントラ予測は、概して、あるピクチャのビデオブロックを、同じピクチャの隣接する、前にコーディングされたブロックに対して予測することを伴う。インター予測は、概して、あるピクチャのブロックを、前にコーディングされたピクチャのデータに対して予測することを伴う。
【００１２】
マクロブロックは、ＩＴＵ  Ｈ．２６４規格および他の規格によって定義されているビデオブロックの１つのタイプである。マクロブロックは一般に１６×１６データブロックを指す。ＩＴＵ−Ｔ  Ｈ．２６４規格は、ルーマ成分については１６×１６、８×８、または４×４、およびクロマ成分については８×８など、様々なブロックサイズのイントラ予測をサポートし、ならびにルーマ成分については１６×１６、１６×８、８×１６、８×８、８×４、４×８および４×４、およびクロマ成分については対応するスケーリングされたサイズなど、様々なブロックサイズのインター予測をサポートする。たとえば、ＩＴＵ−Ｔ  Ｈ．２６４は９つのイントラ予測モードを提供するが、ＨＭは少なくとも３４個のイントラ予測モードを提供する。
【００１３】
新生のＨＥＶＣ規格は、ビデオブロックのための新しい用語を定義している。特に、ＨＥＶＣでは、ビデオブロック（またはそのパーティション）は差し支えなく「コーディングユニット」と呼ばれる。ＨＥＶＣ規格では、最大コーディングユニット（ＬＣＵ）が４分木区分方式に従ってますます小さいコーディングユニット（ＣＵ）に分割され、その方式において定義されている様々なＣＵは、さらに、いわゆる予測ユニット（ＰＵ）および／または変換ユニット（ＴＵ）に区分され得る。ＬＣＵ、ＣＵ、ＰＵ、およびＴＵは、すべて本開示の趣旨内のビデオブロックである。ＨＥＶＣ規格または他のビデオコーディング規格に一致する、他のタイプのビデオブロックも潜在的に使用され得る。したがって、「ブロック」という句は、任意のサイズのビデオブロックを指す。さらに、ビデオブロックは、ピクセル領域中のビデオデータのブロック、または離散コサイン変換（ＤＣＴ）領域、ＤＣＴと同様の領域、ウェーブレット領域などの変換領域中のデータのブロックを時々指す。さらに、本明細書で説明するデータのブロックは、ルーマブロック、サブサンプリングされたクロマブロック、または、ルーマブロックと２つのサブサンプリングされたクロマブロックとの両方を指し得る。
【００１４】
現在、ＨＥＶＣテストモデルでは、８×８よりも大きいブロックのための専用係数コーディング方式は、ルーマブロックにのみ適用される。クロマブロックについて、８×８よりも大きいブロックのために利用可能なおよび専用の係数コーディング方式はない。８×８よりも大きいクロマブロックをコーディングするために、８×８ブロック用と同じ係数コーディング方式を使用して、そのブロック中の走査順序による最初の６４個の係数のみが保たれ、コーディングされる。切り捨てが生じたことにより、有意なデータの損失が生じることがある。クロマデータ損失を低減するかまたは除去する目的で、本開示では、８×８よりも大きいサイズのクロマブロックのための専用コーディング方式について説明する。
【００１５】
イントラ予測またはインター予測の後に、ビデオエンコーダはブロックの残差値を計算する。この残差値は、概して、ブロックの予測データとブロックの真値との間の差に対応する。ブロックの残差値をさらに圧縮するために、残差値は、（「エネルギー」とも呼ばれる）できるだけ多くのデータをできるだけ少数の係数に構成する変換係数のセットに変換され得る。変換係数は、元のブロックと同じサイズである係数の２次元行列に対応する。言い換えれば、元のブロック中のピクセルとちょうど同数の変換係数がある。ただし、変換により、変換係数の多くは、０に等しい値を有し得る。
【００１６】
ビデオエンコーダは、量子化変換係数を表すために必要とされるデータの量を低減するためにさらにビデオデータを圧縮するために、しばしば変換係数を量子化する。量子化の後に、ビデオエンコーダは、変換係数を走査して、量子化変換係数を含む２次元行列から１次元ベクトルを生成する。ビデオエンコーダは、場合によっては、走査の前または後に０に等しいいくつかの係数を設定する。
【００１７】
ビデオエンコーダは、データをなお一層圧縮するために、得られたアレイをエントロピー符号化する。いくつかの例では、ビデオエンコーダは、たとえば、コンテキスト適応型可変長コーディング（ＣＡＶＬＣ）を使用して、アレイの様々な可能な量子化変換係数を表すために可変長コード（ＶＬＣ）を使用するように構成される。他の例では、ビデオエンコーダは、たとえば、コンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）を使用して、得られた量子化係数を符号化するためにバイナリ算術コーディングを使用するように構成される。他の例では、ビデオエンコーダは、得られた量子化係数を符号化するために確率間隔区分エントロピーコード（ＰＩＰＥ）を使用するように構成される。
【００１８】
本開示では、ビデオコーディングプロセス中に変換係数を走査することに関する技法について説明する。本技法は、ビデオ符号化および／または復号を実行するように構成されたビデオエンコーダ／デコーダ（コーデック）と処理ユニットとを含む、ビデオ符号化ユニットとビデオ復号ユニットの両方に適用可能である。「ビデオコーディングユニット」または「ビデオコーディングデバイス」への言及は、ビデオデータの符号化、復号、または符号化と復号の両方が可能なユニットまたはデバイスを指すことを理解されたい。
【００１９】
図１は、本開示の技法を実装するように構成され得る例示的なビデオ符号化および復号システム１００を示すブロック図である。図１に示すように、システム１００は、通信チャネル１１５を介して符号化ビデオを宛先デバイス１０６に送信するソースデバイス１０２を含む。ソースデバイス１０２および宛先デバイス１０６は、広範囲のデバイスのうちのいずれかを備える。場合によっては、ソースデバイス１０２および宛先デバイス１０６は、いわゆるセルラーまたは衛星無線電話などのワイヤレス通信デバイスハンドセットを備える。しかしながら、ビデオデータの変換係数の符号化および復号に一般に適用される本開示の技法は、必ずしもワイヤレス適用例または設定に限定されるとは限らず、ビデオ符号化および／または復号能力を含む多種多様な非ワイヤレスデバイスに潜在的に適用可能である。
【００２０】
図１の例では、ソースデバイス１０２は、ビデオソース１２０と、ビデオエンコーダ１２２と、変調器／復調器（モデム）１２４と、送信機１２６とを含む。宛先デバイス１０６は、受信機１２８と、モデム１３０と、ビデオデコーダ１３２と、ディスプレイデバイス１３４とを含む。本開示によれば、ソースデバイス１０２のビデオエンコーダ１２２は、（たとえば、各々が表示された画像のピクセルに対応する）変換係数を表す１次元ベクトルへの変換係数の２次元行列を含むビデオデータのブロックの変換係数を走査する。本開示のいくつかの実施形態によれば、ビデオエンコーダ１２２は、ビデオデータのブロックの第１の複数の係数を適応的に走査し、ブロックの第２の複数の係数のために固定走査を使用する。たとえば、第１の複数の変換係数について、ビデオエンコーダ１２２は、ビデオデータの少なくとも１つの前に符号化されたブロックの変換係数が走査された順序に応じて、第１の複数の変換係数が走査される順序を適応的に変更する。たとえば、ビデオエンコーダ１２２は、他の前に符号化されたブロック中の同じ位置における係数が非０係数である頻度に基づいて、変換係数が走査される順序を変更する。第２の複数の変換係数について、ビデオエンコーダ１２２は、ビデオデータの少なくとも１つの前に符号化されたブロックの走査順序に応じて、第２の複数の変換係数が走査される順序を適応的に変更しない。代わりに、ビデオエンコーダ１２２は、エンコーダによって符号化されるビデオデータの複数のブロックのために同じ走査順序を使用して第２の複数の係数を走査する。
【００２１】
宛先デバイス１０６のビデオデコーダ１３２はまた、逆変換係数復号を実行するように構成され得る。それらの状況下で、ビデオデコーダ１３２は、変換係数の２次元行列を再構成するために、ビデオデータのブロックを表す変換係数の１次元ベクトルの係数を変換係数の２次元行列内の位置にマッピングする。
【００２２】
図１の図示のシステム１００は例にすぎない。本開示の変換係数符号化および復号技法は任意の符号化デバイスまたは復号デバイスによって実行され得る。ソースデバイス１０２および宛先デバイス１０６は、そのような技法をサポートすることができるコーディングデバイスの例にすぎない。
【００２３】
この例では、ソースデバイス１０２のビデオエンコーダ１２２は、ビデオソース１２０から受信したビデオデータを符号化する。ビデオソース１２０は、ビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオを含んでいるビデオアーカイブ、またはビデオコンテンツプロバイダからのビデオフィードを備える。さらなる代替として、ビデオソース１２０は、場合によっては、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオとアーカイブビデオとコンピュータ生成ビデオとの組合せを生成する。場合によっては、ビデオソース１２０がビデオカメラである場合、ソースデバイス１０２および宛先デバイス１０６は、いわゆるカメラ付き携帯電話またはビデオ付き携帯電話を形成する。各場合において、キャプチャされたビデオ、以前にキャプチャされたビデオまたはコンピュータ生成ビデオは、ビデオエンコーダ１２２によって符号化される。
【００２４】
例示的なシステム１００では、ビデオデータがビデオエンコーダ１２２によって符号化されると、符号化されたビデオ情報は、たとえば、符号分割多元接続（ＣＤＭＡ）あるいは他の通信規格または技法などの通信規格に従ってモデム１２４によって変調され、送信機１２６を介して宛先デバイス１０６に送信される。モデム１２４は、信号変調のために設計された様々なミキサ、フィルタ、増幅器または他の構成要素を含む。この例の送信機１２６は、増幅器、フィルタ、および１つまたは複数のアンテナを含む、データを送信するために設計された回路を含む。宛先デバイス１０６の受信機１２８はチャネル１１５を介して情報を受信し、モデム１３０は情報を復調する。同じく、ビデオデコーダ１３２によって実行されるビデオ復号プロセスは、ビデオエンコーダ１２２によって実行される符号化技法と同様の（たとえば、逆）復号技法を含む。
【００２５】
本開示のいくつかの態様によれば、通信チャネル１１５は、無線周波数（ＲＦ）スペクトルまたは１つもしくは複数の物理的伝送線路など、任意のワイヤレスまたはワイヤード通信媒体、あるいはワイヤレス媒体とワイヤード媒体の任意の組合せを備える。そのような場合、通信チャネル１１５は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成する。通信チャネル１１５は、概して、ビデオデータをソースデバイス１０２から宛先デバイス１０６に送信するための好適な任意の通信媒体、または様々な通信媒体の集合を表す。
【００２６】
この場合も、図１は例にすぎず、本開示の技法は、必ずしも符号化デバイスと復号デバイスとの間のデータ通信を含むとは限らないビデオコーディング設定（たとえば、ビデオ符号化またはビデオ復号）に適用可能である。他の例では、データがローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われ得る。符号化デバイスがデータを符号化し、メモリに記憶し、および／または復号デバイスがメモリからデータを取り出し、復号する。多くの場合、符号化および復号は、互いに通信しないが、単にメモリにデータを符号化し、および／またはメモリからデータを取り出し、復号する無関係なデバイスによって実行される。
【００２７】
図１には示されていないが、いくつかの態様では、ビデオエンコーダ１２２およびビデオデコーダ１３２は、それぞれオーディオエンコーダおよびオーディオデコーダと統合され得、場合によっては、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理するために、適切なＭＵＸ−ＤＥＭＵＸユニット、または他のハードウェアおよびソフトウェアを含むことができる。適用可能な場合、ＭＵＸ−ＤＥＭＵＸユニットは、ＩＴＵ  Ｈ．２２３マルチプレクサプロトコル、またはユーザデータグラムプロトコル（ＵＤＰ）などの他のプロトコルに準拠し得る。
【００２８】
ビデオエンコーダ１２２およびビデオデコーダ１３２のいずれかまたは両方は、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェアまたはそれらの任意の組合せとして実装され得る。ビデオエンコーダ１２２およびビデオデコーダ１３２の各々は潜在的に１つまたは複数のエンコーダまたはデコーダ中に含まれ、それらのいずれも潜在的に複合エンコーダ／デコーダ（コーデック）の一部としてそれぞれのモバイルデバイス、加入者デバイス、ブロードキャストデバイス、サーバなどに統合される。
【００２９】
場合によっては、デバイス１０２、１０６は、実質的に対称的に動作するように構成され得る。たとえば、デバイス１０２、１０６の各々は、場合によっては、ビデオ符号化および復号構成要素を含む。したがって、システム１００は、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスト、またはビデオテレフォニーのためのビデオデバイス１０２とビデオデバイス１０６との間の一方向または双方向のビデオ送信をサポートすることができる。
【００３０】
符号化プロセス中に、ビデオエンコーダ１２２は、いくつかのコーディング技法または演算を実行する。概して、ビデオエンコーダ１２２は、ビデオブロックを符号化するために、個々のビデオフレーム（またはスライスなどの他の独立してコーディングされたユニット）内のビデオブロック上で動作する。フレーム、スライス、フレームの部分、ピクチャのグループ、または他のデータ構造は、複数のビデオブロックを含む独立したデータユニットとして定義され得、シンタックス要素は、そのような様々な独立したデータユニットに含まれ得る。独立したデータユニット内のビデオブロックは、固定サイズまたは可変サイズを有し、場合によっては、指定されたコーディング規格に応じてサイズが異なり得る。場合によっては、各ビデオフレームは、一連の単独で復号可能なスライスを含み、各スライスは、さらに、１つまたは複数のマクロブロックまたはＬＣＵを含むことができる。
【００３１】
再び図１を参照すると、ビデオエンコーダ１２２は、予測ブロックを識別するために、コーディングされているビデオブロックがビデオデータの別のブロックと比較される予測コーディングをしばしば実行する。予測コーディングのこのプロセスは、しばしば、動き推定および動き補償と呼ばれる。動き推定は、１つまたは複数の予測フレーム（または他のコーディングユニット）の１つまたは複数の予測ビデオブロックに対するビデオブロックの動きを推定する。動き補償は、１つまたは複数の予測フレームあるいは他のコーディングユニットから所望の予測ビデオブロックを生成する。動き補償は、分数ピクセル精度で予測データを生成するために補間フィルタ処理が実行される補間プロセスを含む。
【００３２】
予測ブロックを生成した後に、コーディングされている現在のビデオブロックと予測ブロックとの間の差は残差ブロックとしてコーディングされ、予測ブロックを識別するために（動きベクトルなどの）予測シンタックスが使用される。残差ブロックは、変換され、量子化される。変換技法は、場合によっては、ＤＣＴプロセスまたは概念的に同様のプロセス、整数変換、ウェーブレット変換、または他のタイプの変換を備える。ＤＣＴプロセスまたはＤＣＴ様プロセスでは、一例として、変換プロセスは、ピクセル値（たとえば、残差値）のセットを、たとえば、周波数領域におけるピクセル値のエネルギーを表す変換係数に変換する。量子化は、一般に変換係数に適用され、概して、所与の変換係数に関連するビット数を制限するプロセスを伴う。
【００３３】
多くの実施形態では、変換および量子化に続いて、変換され、量子化された残差ビデオブロックに対してエントロピーコーディングが実行される。シンタックス要素、様々なフィルタシンタックス情報、および符号化中に定義される予測ベクトルが、エントロピーコード化ビットストリーム中に含まれる。概して、エントロピーコーディングは、一連の量子化変換係数および／または他のシンタックス情報を一括して圧縮する１つまたは複数のプロセスを備える。２次元ビデオブロックから係数の１つまたは複数のシリアル化１次元ベクトルを定義するために、量子化された変換係数に対して固定または適応走査順序などの走査技法が実行される。たとえば、本明細書で説明する技法によれば、ビデオブロックの異なる係数のために、固定走査技法と適応走査技法の両方が使用され得る。１つまたは複数のシリアル化１次元ベクトルを生成するために走査されると、走査された係数は、次いで、任意のシンタックス情報とともにエントロピーコーディングされる。
【００３４】
符号化プロセスの一部として、符号化されたビデオブロックは、後続のビデオブロックの後続の予測ベースのコーディングのために使用されるビデオデータを生成するために復号される。この段階で、ビデオ品質を改善し、たとえば、復号されたビデオからブロッキネスまたは他のアーティファクトを除去するために、フィルタ処理が採用される。このフィルタ処理は、場合によっては、ループ内（in-loop）またはループ後（post loop）である。ループ内フィルタ処理の場合、再構成されたビデオデータのフィルタ処理はコーディングループ内で行われ、これは、フィルタ処理されたデータが、後続の画像データの予測において後で使用するためにエンコーダまたはデコーダによって記憶されることを意味する。対照的に、ループ後フィルタ処理の場合、再構成されたビデオデータのフィルタ処理はコーディングループ外で行われ、これは、データのフィルタ処理されていないバージョンが、後続の画像データの予測において後で使用するためにエンコーダまたはデコーダによって記憶されることを意味する。
【００３５】
図２は、本開示に一致する例示的なビデオエンコーダ２５０を示すブロック図である。ビデオエンコーダ２５０は、ソースデバイス１００のビデオエンコーダ１２２、または異なるデバイスのビデオエンコーダのいずれかに対応し得る。図２に示すように、ビデオエンコーダ２５０は、予測モジュール２４０と、加算器２４１および２４６と、メモリ２４５とを含む。ビデオエンコーダ２５０は、変換モジュール２４２および量子化モジュール２４３、ならびに逆量子化モジュール２４８および逆変換モジュール２４７をも含む。ビデオエンコーダ２５０はエントロピーコーディングモジュール２４４をも含む。エントロピーコーディングモジュール２４４は走査モジュール２６０を含む。
【００３６】
符号化プロセス中に、ビデオエンコーダ２５０は、コーディングされるべきビデオブロックを受信し、予測モジュール２４０は予測コーディング技法を実行する。インターコーディングの場合、予測モジュール２４０は、予測ブロックを定義するために、符号化されるべきビデオブロックを１つまたは複数のビデオ参照フレームまたはスライス中の様々なブロックと比較する。イントラコーディングの場合、予測モジュール２４０は、ビデオデータの同じフレーム、スライス、または他のユニット内の隣接するデータに基づいて予測ブロックを生成する。予測モジュール２４０は予測ブロックを出力し、加算器２４１は、残差ブロックを生成するために、コーディングされているビデオブロックから予測ブロックを減算する。
【００３７】
本開示のいくつかの態様によれば、インターコーディングの場合、予測モジュール２４０は、予測ブロックを指す動きベクトルを識別し、動きベクトルに基づいて予測ブロックを生成する、動き推定モジュールおよび動き補償モジュール（図２に図示せず）を備える。一般に、動き推定は、動きを推定する、動きベクトルを生成するプロセスと考えられる。たとえば、動きベクトルは、現在のフレーム内のコーディングされている現在のブロックに対する予測フレーム内の予測ブロックの変位を示すことができる。動き補償は、一般に、動き推定によって判断された動きベクトルに基づいて予測ブロックをフェッチまたは生成するプロセスと考えられる。イントラコーディングの場合、予測モジュール２４０は、ビデオデータの同じフレーム、スライス、または他のユニット内の隣接するデータに基づいて予測ブロックを生成する。１つまたは複数のイントラ予測モードは、潜在的に、イントラ予測ブロックがどのように定義され得るかを定義することができる。
【００３８】
いくつかの例では、インターコーディングのための動き補償は、サブピクセル解像度への補間を含む。予測モジュール２４０によって生成された補間予測データは、たとえば、１／２ピクセル解像度、１／４ピクセル解像度、またはさらにより精細な解像度に補間される。これにより、動き推定が、そのようなサブピクセル解像度へのビデオブロックの動きを推定することが可能になる。
【００３９】
予測モジュール２４０が予測ブロックを出力した後、および加算器２４１が、残差ブロックを生成するために、コーディングされているビデオブロックから予測ブロックを減算した後、変換モジュール２４２は残差ブロックに変換を適用する。変換は、場合によっては、離散コサイン変換（ＤＣＴ）、整数変換、またはＩＴＵ  Ｈ．２６４規格、ＨＶＥＣ規格などによって定義されるものなど、概念的に同様の変換を備える。いくつかの例では、変換モジュール２４２は、別様にサイズ決定された変換を実行し、コーディング効率および改善された圧縮のために異なるサイズの変換を選択する。ウェーブレット変換、整数変換、サブバンド変換または他のタイプの変換も使用され得る。いずれの場合も、変換モジュール２４２は、残差ピクセル値の残差ブロックに特定の変換を適用し、残差変換係数のブロックを生成する。変換は、残差ピクセル値情報をピクセル領域から周波数領域に変換する。
【００４０】
逆量子化モジュール２４８および逆変換モジュール２４７は、それぞれ逆量子化および逆変換を適用して、ピクセル領域において残差ブロックを再構成する。加算器２４６は、再構成された残差ブロックを、予測モジュール２４０によって生成された予測ブロックに加算して、メモリ２４５に記憶するための再構成されたビデオブロックを生成する。フィルタモジュール２４９は、場合によっては、再構成されたビデオブロックに対してループ内フィルタ処理またはループ後フィルタ処理を実行する。
【００４１】
いくつかの例では、メモリ２４５は、符号化されるべき他のフレームのブロックに関する動き推定において使用するためのブロックのフレームまたはスライスを記憶する。そのような記憶より前に、ループ内フィルタ処理の場合、フィルタモジュール２４９は、ビデオ品質を改善するためにビデオブロックにフィルタ処理を適用する。フィルタモジュール２４９によるそのようなフィルタ処理はブロッキネスまたは他のアーティファクトを低減する。さらに、フィルタ処理は、コーディングされているビデオブロックへの緊密な一致を備える予測ビデオブロックを生成することによって、圧縮を改善する。フィルタ処理はまた、フィルタ処理されたデータは復号データとして出力されるが、フィルタ処理されていないデータは予測モジュール２４０によって使用されるように、ループ後に実行され得る。
【００４２】
いくつかの例では、量子化モジュール２４３は、ビットレートをさらに低減するために（たとえば、変換モジュール２４２からの）残差変換係数を量子化する。量子化モジュール２４３は、たとえば、係数の各々をコーディングするために使用されるビット数を制限する。量子化の後に、エントロピーコーディングモジュール２４４は、データを走査し、エントロピー符号化する。たとえば、エントロピーコーディングユニット２４４は、１つまたは複数のシリアル化１次元ベクトルを生成するために、２次元表現から量子化係数ブロックを走査することができる。たとえば、走査モジュール２６０は、量子化係数ブロックを表す２次元行列の走査を実行することができる。
【００４３】
この走査プロセスに続いて、エントロピー符号化モジュール２４４が、データをさらに圧縮するために、本明細書で説明するエントロピーコーディング方法に従って（シンタックス要素とともに）量子化変換係数を符号化する。この例では、エントロピー符号化ビットストリーム中に含まれるシンタックス情報は、インターコーディングのための動きベクトルまたはイントラコーディングのための予測モードなど、予測モジュール２４０からの予測シンタックスを含む。エントロピー符号化ビットストリーム中に含まれるシンタックス情報は、場合によっては、予測モジュール２４０による補間のために適用されるフィルタ情報またはフィルタモジュール２４９によって適用されるフィルタなど、フィルタ情報をも含む。さらに、エントロピーコード化ビットストリーム中に含まれるシンタックス情報はまた、シンタックス要素（または他の情報）のうちの１つまたは複数を表す１つまたは複数のＶＬＣコードワードを含み得る。
【００４４】
エントロピー符号化モジュール２４４によるエントロピーコーディングに続いて、符号化されたビデオは、別のデバイスに送信されるか、あるいは後で送信または検索するためにアーカイブされる。たとえば、デコーダは、エントロピー符号化モジュール２４４によって生成された、符号化されたビデオの変換係数の１次元ベクトルを使用して、ビデオデータのブロックを表す２次元行列を再構成することができる。
【００４５】
図３は、本明細書で説明する方法で符号化されたビデオシーケンスを復号するビデオデコーダ３５０の一例を示すブロック図である。受信されたビデオシーケンスは、場合によっては、画像フレームの符号化されたセット、フレームスライスのセット、通常コード化ピクチャグループ（ＧＯＰ：group of pictures）、または符号化されたビデオブロックとそのようなビデオブロックを復号する方法を定義するためのシンタックス情報とを含む多種多様なコード化ビデオユニットを備える。
【００４６】
図３に表すビデオデコーダ３５０は、図２のエントロピー符号化モジュール２４４によって実行される符号化の逆である復号関数を実行するエントロピー復号モジュール３４４を組み込んでいる。いくつかの例では、エントロピー復号モジュール３４４は、１次元シリアル化フォーマットのエントロピー符号化ビデオブロックを変換して２次元ブロックフォーマットに戻す。ベクトルの数およびサイズ、ならびにビデオブロックのために定義された走査順序は、２次元ブロックがどのように再構成されるかを定義する。
【００４７】
図３に示すように、ビデオデコーダはフィルタモジュール３４９を含む。フィルタモジュール３４９は、再構成されたビデオブロックに対してループ内フィルタ処理またはループ後フィルタ処理を実行することができる。ビデオデコーダ３５０はまた、予測モジュール３４０と、逆量子化ユニット３４３と、逆変換モジュール３４２と、メモリ３４５と、加算器３４６とを含む。
【００４８】
多種多様なビデオ圧縮技術および規格は、入力ビデオ信号に固有の冗長性を低減または除去するために、空間的および時間的予測を実行する。上記で説明したように、入力ビデオブロックは、空間的予測（すなわち、イントラ予測）および／または時間的予測（すなわち、インター予測または動き推定）を使用して予測される。本明細書で説明する予測モジュールは、一般に、与えられた入力ビデオブロックのための望ましい予測モードを選定するために、モード決定モジュール（図示せず）を含む。モード選択は、ブロックがイントラコード化されたのかインターコード化されたのか、イントラコーディングが使用された場合の予測ブロックサイズおよび予測モード、ならびにインターコーディングが使用された場合に使用された動きパーティションサイズおよび動きベクトルなど、様々なファクタを考慮する。入力ビデオブロックから予測ブロックが減算され、次いで、上記で説明したように、残差ビデオブロック上に変換および量子化が適用される。
【００４９】
量子化係数は、モード情報とともに、ビデオビットストリームを形成するためにエントロピー符号化され得る。量子化係数はまた、再構成されたビデオブロックを形成するために予測ビデオブロック（選定されたコーディングモードに応じてイントラ予測されたブロックまたは動き補償ブロック）に再加算され得る再構成された残差ブロックを形成するために、逆量子化および逆変換され得る。再構成されたビデオ信号中の視覚的アーティファクトを低減するために、ループ内フィルタ処理方法またはループ後フィルタ処理方法が適用され得る。再構成されたビデオブロックは、最後に、将来のビデオブロックのコーディングを使用するために参照フレームバッファ（すなわち、メモリ）に記憶される。
【００５０】
いくつかの例では、ビデオフレームの所与のリーフレベルブロックの係数がジグザグ走査技法に従って順序付けられる（走査される）。そのような技法は、エンコーダ２５０によって１次元の順序付き係数ベクトルを生成するために使用される。ジグザグ走査技法は、ブロックの上部左端の係数において開始することと、ブロックの下部左端の係数までジグザグパターンで走査し続けることとを備える。
【００５１】
ジグザグ走査技法によれば、最も大きいエネルギーを有する変換係数（たとえば、最も大きい係数値）が低周波変換関数に対応し、ブロックの左上に配置されることが想定される。したがって、ジグザグ走査に基づいて生成される係数ベクトル（たとえば、１次元係数ベクトル）について、より大きい大きさの係数は、ベクトルの開始近くに現れる可能性が最も高いと仮定される。係数ベクトルが量子化された後、大部分の低いエネルギー係数が０に等しくなることも仮定される。いくつかの例では、係数コーディング中に係数走査が適応される。たとえば、非０係数がより頻繁に発生する位置に、走査中のより小さい番号が割り当てられる。
【００５２】
いくつかの例によれば、エンコーダ２５０は、変換係数の逆方向ジグザグ走査を実行する。逆方向ジグザグ走査を実行するために、エンコーダ２５０は、最後非０係数（たとえば、ブロックの左上位置から最も遠い非０係数）に対応するロケーションにおいて符号化を開始する。上記のジグザグ走査の例とは異なり、逆方向ジグザグ走査の例によれば、エンコーダ２５０は、最後非０係数から（すなわち、ブロックの右下位置において）ブロックの左上位置までジグザグパターンでコーディングする。いくつかの例では、エンコーダ２５０は、１つまたは複数のすでにコード化された係数の大きさに基づいて、ランコーディングモードとコーディングのレベルモードとの間を切り替えるように構成される。
【００５３】
変換係数の逆方向ジグザグ走査に従って、エンコーダ２５０は、最後非０係数（すなわち、逆方向走査順序の第１の非０係数）を示すｌａｓｔ＿ｐｏｓシンタックス要素を最初に符号化することによって、ビデオデータのブロックを走査する。いくつかの例では、エンコーダ２５０はまた、最後非０係数の大きさが１であるのかまたは１よりも大きいのかを示すｌｅｖｅｌ＿ＩＤシンタックス要素を符号化する。いくつかの例では、エンコーダ２５０は、ｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素を一緒にＶＬＣコードワードとして符号化する。
【００５４】
いくつかの例では、ｌｅｖｅｌ＿ＩＤおよびｌａｓｔ＿ｐｏｓシンタックス要素をコーディングするために、エンコーダ２５０は、ｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素についての値を判断し、判断された値をコード番号ｃｎを判断するために使用する。コード番号ｃｎは、ｌｅｖｅｌ＿ＩＤおよびｌａｓｔ＿ｐｏｓシンタックス要素を表すＶＬＣコードワードを判断するために、複数のＶＬＣテーブルのうちの選択されたＶＬＣテーブルに入力され得るエントリ値を備える。いくつかの例では、エンコーダ２５０は、ｌｅｖｅｌ＿ＩＤおよびｌａｓｔ＿ｐｏｓシンタックス要素とコード番号ｃｎとの間の関係を定義するメモリに記憶された複数のマッピングテーブルのうちのマッピングテーブルを使用することに基づいて、コード番号ｃｎを判断する。他の例では、エンコーダ２５０は、ｌｅｖｅｌ＿ＩＤおよびｌａｓｔ＿ｐｏｓシンタックス要素とコード番号ｃｎとの間の関係を定義する構造化マッピングに基づいて、コード番号ｃｎを判断する。
【００５５】
上記の例に記載されているように、ｌｅｖｅｌ＿ＩＤおよびｌａｓｔ＿ｐｏｓシンタックス要素を表すそのようなＶＬＣコードワードを判断するために、エンコーダ２５０は、メモリに記憶された複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択し、ＶＬＣコードワードを判断するために、選択されたＶＬＣテーブルに判断されたコード番号ｃｎを入力する。いくつかの例では、エンコーダ２５０は、ＶＬＣテーブルインデックス値に基づいて複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択する。ＶＬＣテーブルインデックス値は、ｌｅｖｅｌ＿ＩＤおよびｌａｓｔ＿ｐｏｓシンタックス要素を表すＶＬＣコードワードを判断するためにコード番号ｃｎを入力するために、エンコーダ２５０が複数のＶＬＣテーブルのいずれを使用すべきかを示す。
【００５６】
たとえば、ＶＬＣテーブルのアレイのうちの現在ＶＬＣテーブルのインデックスを表すために、値ｖｌｃＴａｂｌｅＩｎｄｅｘが使用され得る。ＶＬＣテーブルのそのようなアレイはａｒｒａｙＶＬＣＮｕｍと呼ばれることがある。インデックス値ｖｌｃｉｎｄｅｘに基づいて、いくつかのＶＬＣテーブルのうちのテーブルが、次いで、ａｒｒａｙＶＬＣＮｕｍ［ｖｌｃＩｎｄｅｘ］として表され得る。上記の例に記載されているように、エンコーダ２５０は、変換係数をコーディングするために、値ａｒｒａｙＶＬＣＮｕｍ［ｖｌｃＩｎｄｅｘ］によって表される特定のテーブルにコード番号ｃｎを入力する。
【００５７】
いくつかの例では、メモリに記憶された複数ＶＬＣテーブルは、１つまたは複数のコードワード長分布特性に基づいて構成されている。より詳細には、ＶＬＣテーブルの各々は、それぞれのＶＬＣテーブル中でＶＬＣコードワード長が増加する異なる「レート」を表す。たとえば、図４のＶＬＣマッピングテーブルは、エンコーダが４つのＶＬＣテーブル、ＶＬＣ０〜ＶＬＣ３の中からＶＬＣテーブルを選択する一例を示す。
【００５８】
図４の例によれば、ＶＬＣテーブル、ＶＬＣ０〜ＶＬＣ３のいくつかのＶＬＣコードワードの後に、それぞれがテーブル内のＶＬＣコードワードのそれぞれの長さを表す１つまたは複数の「ｘ」シンボルが続く。たとえば、図４のＶＬＣ２中のＶＬＣコードワード例１ｘｘは、コード番号０〜３に関連する以下の４つのＶＬＣコードワードを表す。
【００５９】
１００
１０１
１１０
１１１
図４の例に示すように、ＶＬＣテーブルＶＬＣ０のそれぞれのコードワードの長さが増加するレートは、ＶＬＣテーブルＶＬＣ１のそれぞれのコードワードの長さが増加するレートよりも「速く」、これは、ＶＬＣテーブルＶＬＣ２のそれぞれのコードワードの長さが増加するレートよりも速く、これは、ＶＬＣテーブルＶＬＣ３のそれぞれのコードワードの長さが増加するレートよりも速い。いくつかの例では、ビデオデータのブロックのためのｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素を符号化するために、図４に示すＶＬＣテーブル０〜３の様々なＶＬＣコードワード長「速度」の中から選択することは有益であり得る。
【００６０】
前述のように、いくつかの例では、ＶＬＣテーブルインデックス値に基づいて、ｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素を符号化するために、複数のＶＬＣテーブル（たとえば、図４のＶＬＣテーブル０〜３）の中からＶＬＣテーブルが選択され得る。いくつかの例では、ビデオデータのブロックがエンコーダ２５０によって符号化されるにつれて、エンコーダ２５０は、ＶＬＣテーブルインデックス値を更新する。
【００６１】
たとえば、１６×１６またはより大きいサイズをもつルーマブロックの場合、エンコーダは、以下のルールに基づいてＶＬＣテーブルインデックス値を更新するように構成され得る。
【００６２】
ｖｌｃＴａｂｌｅＩｎｄｅｘ＋＝（ｃｎ／４＝＝ｖｌｃＴａｂｌｅＩｎｄｅｘ？０＊（ｃｎ／４＜ｖｌｃＴａｂｌｅＩｎｄｅｘ？−１：１））；
ｖｌｃＴａｂｌｅＩｎｄｅｘ＝Ｍｉｎ（ｖｌｃＴａｂｌｅＩｎｄｅｘ，１６）；
この例によれば、ビデオエンコーダがコード番号ｃｎを判断し（すなわち、前述のように）、コード番号ｃｎを使用してＶＬＣコードワードを判断するたびに、エンコーダは現在ＶＬＣテーブルインデックス値を、スケーリングファクタ（この例では４）によって除算されたコード番号ｃｎと比較する。現在ＶＬＣテーブルインデックス値がスケーリングファクタで除算されたコード番号ｃｎに等しい場合、エンコーダ２５０は、ＶＬＣテーブルインデックス値を変更しない。この例では、現在ＶＬＣテーブルインデックス値がスケーリングファクタによって除算されたコード番号ｃｎよりも大きい場合、エンコーダ２５０は、ＶＬＣテーブルインデックス値を（それから１を減算し）減分する。ＶＬＣテーブルインデックス値がスケーリングファクタで除算されたコード番号ｃｎよりも小さい場合、エンコーダ２５０は、ＶＬＣテーブルインデックス値を（それに１を加算し）増分する。同じく上記の例に示すように、エンコーダ２５０は、更新された（すなわち、増分されたか、減分されたか、または、変更されなかった）ＶＬＣテーブルインデックス値を所定のしきい値（すなわち、上記の例では１６）とさらに比較する。更新されたＶＬＣテーブルインデックス値が所定のしきい値よりも大きい場合、エンコーダ２５０は、ＶＬＣテーブルインデックス値に所定のしきい値の値を割り当てる。このようにして、エンコーダ２５０は、ＶＬＣテーブルインデックス値が所定のしきい値を超えないようにする。
【００６３】
エンコーダ２５０が上記の例において説明したようにＶＬＣテーブルインデックス値を更新すると、エンコーダ２５０は、更新されたＶＬＣテーブルインデックス値を使用してビデオデータの別のブロック（エンコーダによって符号化されるビデオデータの次のブロック）のためのｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素を符号化する（たとえば、ＶＬＣテーブルを選択する）。上記の図４の例を再び参照すると、エンコーダ２５０は、ＶＬＣテーブル０〜３の中から選択するために、更新されたＶＬＣテーブルインデックス値を使用する。たとえば、現在ＶＬＣテーブルインデックス値が（図４の第３の列中のＶＬＣテーブル、テーブルＶＬＣ２を選択すべき）２の値を有し、ＶＬＣテーブルインデックス値が、スケーリングファクタによって除算されたコード番号ｃｎよりも小さい場合、エンコーダ２５０は、１の値を有するようにＶＬＣテーブルインデックス値を減分する。この例によれば、ビデオデータの次のブロックのために、エンコーダ２５０は、減分されたＶＬＣテーブルインデックス値１に基づいてテーブルＶＬＣ１を選択する。
【００６４】
いくつかの例では、１６×１６よりも小さいルーマブロックまたはクロマブロックの場合、エンコーダ２５０は、ＶＬＣテーブルインデックス値を更新するために以下のルールを使用する。
【００６５】
ｖｌｃＴａｂｌｅＩｎｄｅｘ＋＝（ｃｎ＝＝ｖｌｃＴａｂｌｅＩｎｄｅｘ？：（ｃｎ＜ｖｌｃＴａｂｌｅＩｎｄｅｘ？−１：１））；
ｖｌｃＴａｂｌｅＩｎｄｅｘ＝Ｍｉｎ（ｖｌｃＴａｂｌｅＩｎｄｅｘ，  １６）；
この例によれば、エンコーダ２５０は、現在ＶＬＣテーブルインデックス値を、スケーリングファクタによって除算されたコード番号ｃｎと比較しない。代わりに、８×８またはそれよりも小さいルーマまたはクロマブロックの場合、エンコーダ２５０は、現在ＶＬＣテーブルインデックス値をコード番号ｃｎ自体と比較し、比較に基づいて、ＶＬＣテーブルインデックス値を更新する（たとえば、増分するか、減分するか、または維持する）。上記に記載した１６×１６ルーマブロック例に従って説明したように、エンコーダ２５０はまた、場合によっては、更新された（すなわち、増分されたか、減分されたか、または変更されなかった）ＶＬＣテーブルインデックス値を所定のしきい値と比較する。更新されたＶＬＣテーブルインデックス値が所定のしきい値よりも大きい場合、エンコーダ２５０は、ＶＬＣテーブルインデックス値に所定のしきい値の値を割り当てるように構成され得る。
【００６６】
本明細書で説明する技法によれば、エンコーダ２５０は、異なるサイズのルーマブロックおよびクロマブロックを符号化するように構成され得る。たとえば、本明細書で説明する技法によれば、８×８またはより大きいサイズのルーマブロックの場合、エンコーダ２５０は、スケーリングファクタに基づいてＶＬＣテーブルインデックス値を更新することができる。たとえば、上記で説明したように、エンコーダは、ＶＬＣテーブルインデックス値を、スケーリングファクタによって除算されたコード番号と比較することに基づいて、ＶＬＣテーブルインデックス値を適応的に更新することができる。しかしながら、８×８またはより大きいサイズをもつクロマブロックの場合、エンコーダは、そのようなスケーリングファクタを使用しない。代わりに、エンコーダは、ＶＬＣテーブルインデックス値をコード番号と比較することに基づいて、スケーリングファクタによってコード番号を除算することなしに、ＶＬＣテーブルインデックス値を適応的に更新する。このようにして、本明細書で説明されるエンコーダは、より大きいサイズ（たとえば、８×８よりも大きいサイズ）のルーマブロックとクロマブロックの両方を符号化するように構成され得る。
【００６７】
一例として、本明細書で説明する技法によれば、適応的に値ｖｌｃＴａｂｌｅＩｎｄｅｘを更新するために以下のルールが使用される。
【００６８】
８×８よりも大きいサイズ（すなわち、１６×１６、３２×３２、６４×６４）をもつルーマブロックの場合：
ｖｌｃＴａｂｌｅＩｎｄｅｘ＋＝（ｃｎ／４＝＝ｖｌｃＴａｂｌｅＩｎｄｅｘ？０：（ｃｎ／４＜ｖｌｃＴａｂｌｅＩｎｄｅｘ？−１：１））；
ｖｌｃＴａｂｌｅＩｎｄｅｘ＝Ｍｉｎ（ｖｌｃＴａｂｌｅＩｎｄｅｘ，１６）；
（１６×１６またはより大きいサイズのクロマブロックを含む）他のブロックの場合、
ｖｌｃＴａｂｌｅＩｎｄｅｘ＋＝（ｃｎ＝＝ｖｌｃＴａｂｌｅＩｎｄｅｘ？−１：１））；
ｖｌｃＴａｂｌｅＩＮｄｅｘ＝Ｍｉｎ（ｖｌｃＴａｂｌｅＩｎｄｅｘ，  １６）；
本明細書で説明する技法に一致するいくつかの例では、ｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素を符号化するために、そこからＶＬＣテーブルを選択するために、適応的に更新されたＶＬＣテーブルインデックス値が使用されるＶＬＣテーブルのアレイは、ルーマブロックの場合はブロックサイズに依存し、クロマブロックの場合はブロックサイズに依存しない。たとえば、クロマブロックの場合、エンコーダ２５０は、クロマブロックのサイズにかかわらず、ｌａｓｔ＿ｐｏｓおよびｌｅｖｅｌ＿ＩＤシンタックス要素をコーディングするためにＶＬＣテーブルの同じアレイ（たとえば、ａｒｒａｙＶＬＣＴａｂｌｅＮｕｍ）を使用することができる。この例によれば、ルーマブロックの場合、それぞれのルーマブロックのサイズに応じて、ＶＬＣテーブルの異なるアレイ（たとえば、異なるａｒｒａｙＶＬＣＴａｂｌｅＮｕｍ）が選択され、ルーマブロックをコーディングするために使用され得る。
【００６９】
図５は、本開示の１つまたは複数の態様に一致する、ビデオデータのブロックをコーディングする方法の一例を示す流れ図である。図５の方法は、ビデオデータのブロックを符号化するために、図２に示したエンコーダ２５０によって実行されるように説明する。図５の方法は、ビデオデータのブロックを復号するために、図３に示したデコーダ３５０を含む任意のデバイスによって実行され得る。
【００７０】
本開示の態様に一致する図５の例に示すように、エンコーダ２５０は、ビデオデータのブロックがルーマブロックであるかクロマブロックであるかを判断する（５０１）。ビデオデータのブロックがルーマブロックである場合、エンコーダ２５０は、コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新する（５０２）。ビデオデータのブロックがクロマブロックである場合、エンコーダ２５０は、コード番号ｃｎに基づいて、スケーリングファクタを使用することなしに、ＶＬＣテーブルインデックス値を適応的に更新する（５０３）。
【００７１】
１つまたは複数の例では、本明細書で説明した機能は、少なくとも部分的に特定のハードウェア構成要素またはプロセッサなどのハードウェアで実装される。より一般的には、それらの技術は、ハードウェア、プロセッサ、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、たとえば、１つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、あるいはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体の例は、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含むデータ記憶媒体または通信媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含む。このようにして、コンピュータ可読媒体は、概して、（１）非一時的である有形コンピュータ可読記憶媒体、あるいは（２）信号または搬送波などの通信媒体に対応する。データ記憶媒体は、本開示で説明した技法の実装のための命令、コードおよび／またはデータ構造を取り出すために１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体を含む。本コンピュータプログラム製品は、場合によっては、コンピュータ可読媒体を含む。
【００７２】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続も、コンピュータ可読媒体、すなわち、コンピュータ可読伝送媒体と適切に呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線（ＤＳＬ）、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、ＤＳＬ、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびブルーレイ（登録商標）ディスク（disc）を含み、この場合、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）はデータをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。
【００７３】
命令は、一般に、１つまたは複数の中央処理ユニット（ＣＰＵ）、デジタル信号プロセッサ（ＤＳＰ）などの１つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路によって実行される。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明する技法の実装に好適な他の構造のいずれかを指すことができる。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアおよび／またはソフトウェアモジュール内に実装され得、あるいは複合コーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素中に十分に実装され得る。
【００７４】
本開示の技法は、上記で提示される例に範囲を限定されず、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置において実施され得ることを、当業者は容易に諒解されよう。本開示では、開示する技法を実行するように構成されたデバイスの機能的態様を強調するために様々な構成要素、モジュール、またはユニットについて説明したが、それらの構成要素、モジュール、またはユニットを、必ずしも異なるハードウェアユニットによって実現する必要があるとは限らない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明した１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作ハードウェアユニットの集合によって与えられ得る。
【００７５】
様々な例について説明した。これらおよび他の例は以下の特許請求の範囲に入る。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
ビデオデータのブロックをコーディングする方法であって、
ビデオデータのブロックがルーマブロックであるかクロマブロックであるかを判断することと、
ビデオデータの前記ブロックがルーマブロックである場合、コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
を備える、方法。
［Ｃ２］
ビデオデータの複数のクロマブロックを符号化することと、
各クロマブロックについて、前記クロマブロックのサイズにかかわらず、同じ複数のＶＬＣテーブルから前記ＶＬＣテーブルを選択することと
をさらに備える、Ｃ１に記載の方法。
［Ｃ３］
ビデオデータの複数のルーマブロックを符号化することと、
前記ルーマブロックの各々について、前記ルーマブロックのサイズに基づいて、２つ以上の複数のＶＬＣテーブルのうちの複数のＶＬＣテーブルを選択することと
をさらに備える、Ｃ１に記載の方法。
［Ｃ４］
コード番号ｃｎと前記スケーリングファクタとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することが、現在ＶＬＣテーブルインデックス値を、前記スケーリングファクタによって除算された前記コード番号ｃｎと比較することを備える、Ｃ１に記載の方法。
［Ｃ５］
前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することが、前記現在ＶＬＣテーブルインデックス値を前記コード番号ｃｎと比較することを備える、Ｃ１に記載の方法。
［Ｃ６］
ビデオデータの前記ブロックのサイズを判断することと、
ビデオデータの前記ブロックがルーマブロックであり、８×８よりも大きいサイズを有する場合、コード番号ｃｎとスケーリングファクタＳとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
他の場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタＳを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
をさらに備える、Ｃ１に記載の方法。
［Ｃ７］
前記方法が、コンピューティングデバイスのプロセッサによって実行される、Ｃ１に記載の方法。
［Ｃ８］
前記方法がエンコーダによって実行され、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを符号化するために使用される、Ｃ１に記載の方法。
［Ｃ９］
前記方法がデコーダによって実行され、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを復号するために使用される、Ｃ１に記載の方法。
［Ｃ１０］
ビデオデータのブロックをコーディングするように構成されたデバイスであって、
ビデオデータのブロックがルーマブロックであるかクロマブロックであるかを判断することと、
ビデオデータの前記ブロックがルーマブロックである場合、コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
を行うように構成されたプロセッサ
を備える、デバイス。
［Ｃ１１］
ビデオデータの複数のクロマブロックを符号化することと、
各クロマブロックについて、前記クロマブロックのサイズにかかわらず、同じ複数のＶＬＣテーブルから前記ＶＬＣテーブルを選択することと
を行うように構成されたプロセッサをさらに備える、Ｃ１０に記載のデバイス。
［Ｃ１２］
ビデオデータの複数のルーマブロックを符号化することと、
前記ルーマブロックの各々について、前記ルーマブロックのサイズに基づいて、２つ以上の複数のＶＬＣテーブルのうちの複数のＶＬＣテーブルを選択することと
を行うように構成されたプロセッサをさらに備える、Ｃ１０に記載のデバイス。
［Ｃ１３］
コード番号ｃｎと前記スケーリングファクタとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することが、現在ＶＬＣテーブルインデックス値を、前記スケーリングファクタによって除算された前記コード番号ｃｎと比較することを備える、Ｃ１０に記載のデバイス。
［Ｃ１４］
前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することが、前記現在ＶＬＣテーブルインデックス値を前記コード番号ｃｎと比較することを備える、Ｃ１０に記載のデバイス。
［Ｃ１５］
ビデオデータの前記ブロックのサイズを判断することと、
ビデオデータの前記ブロックがルーマブロックであり、８×８よりも大きいサイズを有する場合、コード番号ｃｎとスケーリングファクタＳとに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
他の場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタＳを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
を行うように構成されたプロセッサをさらに備える、Ｃ１０に記載のデバイス。
［Ｃ１６］
前記デバイスがエンコーダであり、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを符号化するために使用される、Ｃ１０に記載のデバイス。
［Ｃ１７］
前記デバイスがデコーダであり、前記更新されたＶＬＣテーブルインデックス値が、ビデオデータの前記ブロックを復号するために使用される、Ｃ１０に記載のデバイス。
［Ｃ１８］
実行されたとき、コンピューティングデバイスに、
ビデオデータのブロックがルーマブロックであるかクロマブロックであるかを判断することと、
ビデオデータの前記ブロックがルーマブロックである場合、コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新することと、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
［Ｃ１９］
ビデオデータのブロックをコーディングするように構成されたデバイスであって、
ビデオデータのブロックがルーマブロックであるかクロマブロックであるかを判断するための手段と、
ビデオデータの前記ブロックがルーマブロックである場合、コード番号ｃｎとスケーリングファクタの値とに基づいて、複数のＶＬＣテーブルのうちのＶＬＣテーブルを選択するために使用されるＶＬＣテーブルインデックス値を適応的に更新するための手段と、
ビデオデータの前記ブロックがクロマブロックである場合、前記コード番号ｃｎに基づいて、前記スケーリングファクタを使用することなしに、前記ＶＬＣテーブルインデックス値を適応的に更新するための手段と
を備える、デバイス。
【図１】
0005755808.tif 000002
【図２】
0005755808.tif 000003
【図３】
0005755808.tif 000004
【図４】
0005755808.tif 000005
【図５】
0005755808.tif 000006