(57)【特許請求の範囲】
【請求項１】
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶することと、ここで、可変長固定長コードツリーのレベルごとに１つの基本コードワードがあり、前記レベルに、固定長コードは属し、各基本コードワードは、前記可変長固定長コードツリーのその所与のレベルの最小固定長コードを表し、各基本コードワードは、その所与のレベルよりも低いレベルで発見されるいずれの固定長コードよりも大きく、各基本コードワードは、その所与のレベルと同じレベルにある固定長コードによって表されるワードの長さに等しい長さをもつワードを表す、
複数の固定長コードを備える圧縮されたデータセットから第１の固定長コードを選択することと、ここで、前記第１の固定長コードの前に来る前記圧縮されたデータセット中に少なくとも第２の固定長コードがある、
前記第２の固定長コードに関連付けられた第１の基本コードワードを判断することと、
前記第１の基本コードワードによって表される第１のワードの第１の長さに少なくとも部分的に基づいて、前記圧縮されたデータセットに対応する圧縮されていないデータセット中の前記第１の固定長コードによって表されるワードの位置を判断することと、
を備える方法。
【請求項２】
前記データ構造がアレイを備える、
請求項１に記載の方法。
【請求項３】
前記データ構造がリンクされたリストを備える、
請求項１に記載の方法。
【請求項４】
前記データ構造がバイナリサーチツリーを備える、
請求項１に記載の方法。
【請求項５】
前記データ構造がデジタルサーチツリーを備える、
請求項１に記載の方法。
【請求項６】
前記第１の固定長コードに関連付けられたセグメントを判断することをさらに備え、前記第１の固定長コードによって表される前記ワードの前記位置を判断することは、さらに、前記セグメントに関連付けられたオフセットに基づく、
請求項１に記載の方法。
【請求項７】
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
請求項１に記載の方法。
【請求項８】
辞書式順序の基本コードワードのリストを表すデータ構造を記憶する
ように構成されたメモリと、ここで、可変長固定長コードツリーのレベルごとに１つの基本コードワードがあり、前記レベルに、固定長コードは属し、各基本コードワードは、前記可変長固定長コードツリーのその所与のレベルの最小固定長コードを表し、各基本コードワードは、その所与のレベルよりも低いレベルで発見されるいずれの固定長コードよりも大きく、各基本コードワードは、その所与のレベルと同じレベルにある固定長コードによって表されるワードの長さに等しい長さをもつワードを表す、
複数の固定長コードを備える圧縮されたデータセットから第１の固定長コードを選択し、ここで、前記第１の固定長コードの前に来る前記圧縮されたデータセット中に少なくとも第２の固定長コードがある、
前記第２の固定長コードに関連付けられた第１の基本コードワードを判断し、
前記第１の基本コードワードによって表される第１のワードの第１の長さに少なくとも部分的に基づいて、前記圧縮されたデータセットに対応する圧縮されていないデータセット中の前記第１の固定長コードによって表されるワードの位置を判断する
ように構成されたプロセッサと、
を備える装置。
【請求項９】
前記データ構造がアレイを備える、
請求項８に記載の装置。
【請求項１０】
前記データ構造がリンクされたリストを備える、
請求項８に記載の装置。
【請求項１１】
前記データ構造がバイナリサーチツリーを備える、
請求項８に記載の装置。
【請求項１２】
前記データ構造がデジタルサーチツリーを備える、
請求項８に記載の装置。
【請求項１３】
前記プロセッサが、前記第１の固定長コードに関連付けられたセグメントを判断するようにさらに構成され、前記プロセッサは、さらに、前記セグメントに関連付けられたオフセットに基づいて、前記第１の固定長コードによって表される前記ワードの前記位置を判断するようにさらに構成された、
請求項８に記載の装置。
【請求項１４】
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
請求項８に記載の装置。
【請求項１５】
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶するための手段と、ここで、可変長固定長コードツリーのレベルごとに１つの基本コードワードがあり、前記レベルに、固定長コードは属し、各基本コードワードは、前記可変長固定長コードツリーのその所与のレベルの最小固定長コードを表し、各基本コードワードは、その所与のレベルよりも低いレベルで発見されるいずれの固定長コードよりも大きく、各基本コードワードは、その所与のレベルと同じレベルにある固定長コードによって表されるワードの長さに等しい長さをもつワードを表す、
複数の固定長コードを備える圧縮されたデータセットから第１の固定長コードを選択するための手段と、ここで、前記第１の固定長コードの前に来る前記圧縮されたデータセット中に少なくとも第２の固定長コードがある、
前記第２の固定長コードに関連付けられた第１の基本コードワードを判断するための手段と、
前記基本コードワードによって表される第１のワードの第１の長さに少なくとも部分的に基づいて、前記圧縮されたデータセットに対応する圧縮されていないデータセット中の前記第１の固定長コードによって表されるワードの位置を判断するための手段と、
を備える装置。
【請求項１６】
前記データ構造がアレイを備える、
請求項１５に記載の装置。
【請求項１７】
前記データ構造がリンクされたリストを備える、
請求項１５に記載の装置。
【請求項１８】
前記データ構造がバイナリサーチツリーを備える、
請求項１５に記載の装置。
【請求項１９】
前記データ構造がデジタルサーチツリーを備える、
請求項１５に記載の装置。
【請求項２０】
前記選択された固定長コードに関連付けられたセグメントを判断するための手段をさらに備える、
請求項１５に記載の装置。
【請求項２１】
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
請求項１５に記載の装置。
【請求項２２】
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶する機能と、ここで、可変長固定長コードツリーのレベルごとに１つの基本コードワードがあり、前記レベルに、固定長コードは属し、各基本コードワードが、前記可変長固定長コードツリーのその所与のレベルの最小固定長コードを表し、各基本コードワードが、その所与のレベルよりも低いレベルで発見されるいずれの固定長コードよりも大きく、各基本コードワードが、その所与のレベルと同じレベルにある固定長コードによって表されるワードの長さに等しい長さをもつワードを表す、
複数の固定長コードを備える圧縮されたデータセットから第１の固定長コードを選択する機能と、ここで、前記第１の固定長コードの前に来る前記圧縮されたデータセット中に少なくとも第２の固定長コードがある、
前記第２の固定長コードに関連付けられた第１の基本コードワードを判断する機能と、
前記第１の基本コードワードによって表される第１のワードの第１の長さに少なくとも部分的に基づいて、前記圧縮されたデータセットに対応する圧縮されていないデータセット中の前記第１の固定長コードによって表されるワードの長さを判断する機能と、
をコンピュータに実現させるためのプログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、その各々の内容全体が参照により本明細書に組み込まれる、２００８年１２月９日に出願された米国仮出願第６１／１２１，１４７号の利益を主張する。
【技術分野】
【０００２】
本開示は、データの高速パーシング（parsing）に関し、より詳細には、可変長固定長コードを使用して圧縮されたデータのパーシングに関する。
【背景技術】
【０００３】
データ圧縮は、データ記憶空間、伝送帯域幅、またはその両方の消費を低減するために、様々な適用例において広く使用されている。データ圧縮の例示的な適用例は、デジタルビデオ、画像、音声およびオーディオコーディングを含む。たとえば、デジタルビデオコーディングは、デジタルテレビジョン、デジタルダイレクトブロードキャストシステム、ワイヤレス通信デバイス、携帯情報端末（ＰＤＡ）、ラップトップまたはデスクトップコンピュータ、デジタルカメラ、デジタル記録デバイス、ビデオゲームデバイス、セルラー電話または衛星無線電話などを含む、広範囲にわたるデバイスで使用されている。デジタルビデオデバイスは、デジタルビデオをより効率的に送信および受信するために、ＭＰＥＧ−２、ＭＰＥＧ−４、またはＨ．２６４／ＭＰＥＧ−４  Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ（ＡＶＣ）など、ビデオ圧縮技法を実装する。
【０００４】
一般に、ビデオ圧縮技法では、ビデオデータに固有の冗長性を低減または除去するために空間的予測、動き推定および動き補償を実行する。特に、イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、隣接フレーム内のビデオの時間的冗長性を低減または除去するために時間的予測に依拠する。インターコーディングの場合、ビデオエンコーダは、２つ以上の隣接フレーム間でビデオブロックを一致させる動作を追跡するために動き推定を実行する。動き推定は、１つまたは複数の参照フレーム中の対応するビデオブロックに対するビデオブロックの変位を示す動きベクトルを生成する。動き補償は、その動きベクトルを使用して、参照フレームから予測ビデオブロックを生成する。動き補償の後、元のビデオブロックから予測ビデオブロックを減算することによって残差ビデオブロックが形成される。
【０００５】
ビデオエンコーダは、ビデオコーディングプロセスによって作り出された残差ブロックのビットレートをさらに低減するために、変換、量子化およびロスレスソースコーディングプロセス（すなわち、エントロピーコーディング）を適用する。ロスレスコーディング技法は、ビデオエンコーダの最終段階において使用され、様々な他のコーディング適用例では、符号化データの記憶または送信より前に使用される。ロスレスソースコーディングは、一般に、変換演算および量子化演算によって作り出される残差係数をさらに圧縮するために算術コードまたは可変長コード（ＶＬＣ）を適用することを含む。ロスレスコーディング技法の例には、一部のエンコーダにおいて代替ロスレスコーディングモードとして使用され得る、コンテキスト適応型バイナリ算術コーディング（ＣＡＢＡＣ）およびコンテキスト適応型可変長コーディング（ＣＡＶＬＣ）がある。他の可能なロスレスコーディング技法は、ＶＦコードと呼ばれることがある、可変長固定長コードを含む。よく知られているＶＦコードの例には、ＴｕｎｓｔａｌｌコードおよびＫｈｏｄａｋコードがある。ビデオデコーダは、ブロックの各々について残差情報を復元するためにロスレス復号化を実行し、動き情報および残差情報を使用して符号化ビデオを再構成する。
【発明の概要】
【０００６】
一般に、本開示は、データ圧縮など、様々な適用例のためのＶＦコードの高速パーシングのための技法を対象とする。たとえば、そのような技法は、圧縮されたデータのセットのランダムセグメントを復号化するために適用できる。本明細書で使用するコーディングという用語は、概して、符号化、復号化、またはその両方を指すことができる。本開示で説明する技法は、ＴｕｎｓｔａｌｌまたはＫｈｏｄａｋアルゴリズムを使用して構成されたＶＦコーディングツリーの代数的性質を利用し、コードワードの構成、符号化、および復号化に組合せ数え上げ（combinatorial enumeration）技法を採用することができる。適用例によっては、ＶＦコーディング技法は、メディアエンコーダ、デコーダ、または複合エンコーダ／デコーダ（コーデック）内に実装できる。また、いくつかの態様では、本開示に従って構成されるＶＦコーディングツリーを定義する様々な属性を、コーディングデバイスに関連付けられたメモリに記憶されたメモリ効率の良いデータ構造に与えることができる。
【図面の簡単な説明】
【０００７】
【図１】ビデオ符号化および復号化システムを示すブロック図。
【図２】ビデオエンコーダの一例を示すブロック図。
【図３】ビデオデコーダの一例を示すブロック図。
【図４】ＶＦコーディングツリーの一例を示す図。
【図５】図４のＶＦコーディングツリーの図。
【図６】ＶＦコードのメモリ効率の良い構造のための方法を示すフローチャート図。
【図７】図６の方法に従って構成されたＶＦコードを使用してワードを符号化するための方法を示すフローチャート図。
【図８】図６の方法に従って構成されたＶＦコードを復号化するための方法を示すフローチャート図。
【図９】図６の方法に従って構成されたＶＦコードを復号化するための別の方法を示すフローチャート図。
【図１０】図６の方法に従って構成されたＶＦコードに対応するワードの長さを判断するための方法の形態のＶＦパーシングを示すフローチャート図。
【発明を実施するための形態】
【０００８】
一般に、本開示は、デジタルビデオ、画像、オーディオ、または音声データのコーディングなど、様々な適用例のための可変長固定長（ＶＦ）コードの高速パーシングのための技法を対象とする。本明細書で使用する「コーディング」という用語は、符号化、復号化またはその両方を指すことができる。本開示で説明する技法は、一般的データ圧縮およびコーディングを含む、多種多様な実際的適用例に適用可能であるが、本開示では、例および例示のためにデジタルビデオ符号化および復号化に言及する。
【０００９】
ＶＦコードを使用するコーディングのプロセスは、可変長のワードを固定長コードに符号化することを含む。これらの固定長コードは、記憶するか、または別のデバイスに送信することができる。固定長コードは、次いで復号化して可変長コードに戻すことができる。そのような技法は、データ圧縮の形態として有用であり得る。たとえば、圧縮されていないビットストリング１１１０１１００００１１は、１つまたは複数のデータ構造（たとえば、アレイ）を表すことができる。ビットストリングは、ワードと称されるより短いビットストリングのシーケンスによって表すことができる｛１１，１０１，１０００，０１１｝。これらのワードの各々は、ＶＦコードを使用して、対応する固定長コードに符号化できる。たとえば、｛１１−＞０，１０１−＞１，１０００−＞２，０１１−＞３｝のようにワードにコードを割り当てると、例示的なシーケンスを０，１，２，３のように符号化することができ、ただし、各コードワードは２ビットコードである。
【００１０】
ＶＦコードは、ＶＦコードツリーによって表すことができる。図４は、バイナリＶＦコードツリー４００の一例である。ＶＦコードは、複数のワードと複数の固定長コードとの間のペアリングを備えることができる。ＶＦコードツリー４００中のリーフノードの各々はワードをＶＦコードで表す。内部ノードはＶＦコードで表されない。ツリーは、ルートノード６４において開始するように構成される。右下に１リンク移動することはビット値０を表す。左下に１リンク移動することはビット値１を表す。したがって、ワード１１は、ルートノード６４において開始し、左下に２リンク移動することによって表される。
【００１１】
ツリー４００のリーフノードの各々は、番号０〜１６で標示されている。標示された番号は、リーフノードが表すワードに関連付けられた固定長コードに対応する。定義によれば、固定長コードは、同じ長さのコード値によって表される。いくつかの実施形態では、固定長コードの番号はバイナリストリングである。番号０〜１６をバイナリで表すために、固定長コードの各々は５ビットによって表される。
【００１２】
したがって、ＶＦコードツリー４００によれば、ワード１１は固定長コード０００００によって表される。ワード｛１０１，１０００，０１１｝は、それぞれ固定長コード｛０００１０，００１１０，００００１｝によって表される。したがって、圧縮されていないビットストリング１１１０１１００００１１は、ツリー４００のＶＦコードによって、圧縮されたビットストリング００００００００１０００１１０００００１に符号化され得る。固定長コードを使用することにより、圧縮されたビットストリング中の固定長コードのいずれかの任意の復号化が可能になる。各固定長コードの長さは既知であり、この例では５ビットであるので、新しい固定長コードは５ビットごとに開始する。したがって、圧縮されたビットストリングでは、固定長コードは、位置０、５、１０、および１５において開始する。したがって、圧縮されたビットストリングの位置５において開始する固定長コード０００１０は、圧縮されたビットストリング中の残りの固定長コードを復号化することなしに、対応するワード１０１に直ちに復号化できる。
【００１３】
しかしながら、圧縮されたビットストリング００００００００１０００１１０００００１中の固定長コード０００１０を復号化することは、ワード１０１を作り出すが、復号化されたワードが圧縮されていないビットストリング中のどこに入れられるべきかを判断しない。たとえば、元の圧縮されていないビットストリング１１１０１１００００１１は、メモリアレイのコンテンツに対応し得る。したがって、この例のアレイは１２ビット長である。アレイは、上記で詳述したように圧縮されたビットストリングに符号化され得る。その場合、圧縮されたビットストリングを復号化すると、アレイ中の正しい位置にビットをもつ同じ１２ビットアレイが再生されるべきである。本明細書で説明するパーシング技法は、圧縮されていないビットストリング中の復号化されたワードの位置を判断する迅速な方法を提供する。
【００１４】
本明細書で説明するパーシング技法は、任意に復号化された固定長コードから生じるワードの位置を判断するために、その復号化された固定長コードの前に来る固定長コードに関連するワードの各々の長さを知るだけでよいという概念に基づく。たとえば、上記の例では、１つの固定長コード（０００００）が、圧縮されたビットストリーム中の選択された固定長コード（０００１０）の前に配置されている。選択された固定長コード０００１０に対応するワード１０１を配置するためには、固定長コード０００００に関連付けられたワード（１１）の長さが２であることを知るだけでよい。したがって、ワード１０１は圧縮されていないビットストリング中の位置２において開始することが知られ、ここで第１の位置は位置０である。
【００１５】
各固定長コードに関連付けられた各ワードの長さを記憶するには、大きいメモリ記憶域が必要になる。しかしながら、本明細書で説明する技法では、固定長コードの部分集合のみについて長さを知る必要がある。この部分集合内の固定長コードの各々は、基本コードワードと呼ばれる。
【００１６】
基本コードワードの選択は、ツリー４００などのＶＦコードツリーの性質に基づく。ツリーにおける各ワードの長さは、ツリー上のワードが発見されたレベルに等しい。たとえば、ワード１１はツリーのレベル２において発見され、１００１はツリーのレベル４において発見される。したがって、ＶＦコードツリー上の固定長コードに関連付けられたレベルを判断することによって、その固定長コードに関連付けられたワードの長さが確認可能である。
【００１７】
ワードに関連付けられる固定長コードは、辞書式順序で割り振られる。したがって、特定のレベルにある所与のリーフノードに関連付けられた固定長コードは、より低いレベル上の固定長コードよりも値が大きい。たとえば、固定長コード６はレベル４にある。したがって、ツリーの性質によって、固定長コード６は、レベル３、２、または１上のいずれのコードよりも大きい。さらに、固定長コード６は、より高いレベル上のコードよりも小さい。上記の性質を利用して、固定長コードに関連付けられたワードの長さは、ツリーの各レベルにある最小辞書式順序付き固定長コードのリストを使用して得ることができる。ツリー４００では、最小辞書式順序付き固定長コードは、少なくとも１つのリーフノードを含むツリーの各レベルにおける最右リーフノードに関連付けられる。
【００１８】
たとえば、図４のツリーでは、ツリーのレベルごとの最小辞書式順序付き固定長コードのリストは、｛０，１，３，１０，１１，１２，１３，１４，１５｝である。これらの固定長コードの各々は基本コードワードである。各基本コードワードに関連付けられたワードの長さは、基本コードワードとともに記憶できる。したがって、すべての基本コードワードに関連付けられたワードの長さは、リストを使用して直接マップできる。さらに、上記で説明した性質を使用して、任意の固定長コードに関連付けられたワードの長さを判断することができる。選択された固定長コード以下の最大基本コードワードは、選択された固定長コードと同じ、ＶＦコードツリーのレベル上にある。したがって、選択された固定長コードに関連付けられたワードの長さは、選択された固定長コード以下の最大基本コードワードとともに記憶された長さに等しい。たとえば、固定長コード６以下の最大基本コードワードは基本コードワード３である。基本コードワード３は、ツリー４００のレベル４上にあり、したがって関連するワード長４を有する。したがって、固定長コード６は、関連するワード長４を有する。したがって、基本コードワードの単純なリストを記憶し、単純な探索を実行することによって、任意の固定長コードの関連するワード長を判断することができる。
【００１９】
上記は、ＶＦコーディングおよびパーシング技法の一実施形態の一例にすぎない。本実施形態および他の実施形態について以下でより詳細に説明する。
【００２０】
本開示のいくつかの態様によれば、ＶＦコーディング技法は、低減された量のメモリ空間を用いるＶＦコードの符号化および復号化をサポートすることができる。たとえば、そのような技法は、バッハマンのＯ記法で多くとも２次空間量Ｏ（Ｌ2）を必要とし、ここで、ＬはＶＦコーディングツリーの深さである。２次空間量Ｏ（Ｌ2）の利用は、コンピュータメモリ中のコーディングツリーの完全表現を利用する他の技法による、指数関数的空間使用Ｏ（２L）よりもかなりの改善を提示することができる。
【００２１】
本開示の一態様によれば、ＴｕｎｓｔａｌｌまたはＫｈｏｄａｋアルゴリズムを使用して構成されたＶＦコーディングツリーの代数的性質を利用し、コードワードの符号化および復号化に組合せ数え上げを採用することによって、メモリ空間の低減を達成することができる。本開示で説明する技法の符号化／復号化複雑度は、そのような技法によって処理されるシンボルの数に比例し得る。メモリ要求の低減はより大きいＶＦコーディングツリーの使用を可能にし、これは符号化の効率向上（すなわち、冗長性の低下）につながり得る。
【００２２】
本開示のいくつかの他の態様によれば、ＶＦコーディング技法は、高速パーシング技法を使用して圧縮されたビットストリーム中のランダムに選択されたコードワードの高速復号化をサポートすることができる。たとえば、そのような技法は、圧縮されていないビットストリーム中のコードワードによって表されるフレーズの位置を判断するために多くともＯ（ｌｏｇ（Ｄ））回の演算を必要とし、ここで、圧縮されたビットストリームは圧縮されていないビットストリームの符号化表現であり、Ｄは平均復号化フレーズ長である。位置を判断するためにコードの完全復号化を利用する他の技法は、Ｏ（Ｄ）複雑度である。
【００２３】
本開示の様々な態様についてより詳細に説明する。以下に、本開示で説明するＶＦコーディング技法およびＶＦコード構造とともに使用するのに好適な例示的なビデオコーディングシステムの説明を記載する。そのようなコーディングシステムおよび技法は、符号化、復号化またはその両方を含むコーディングに有用であり得る。
【００２４】
図１は、ビデオ符号化および復号化システム１０を示すブロック図である。図１に示すように、システム１０は、通信チャネル１６を介して符号化ビデオを受信デバイス１４に送信するソースデバイス１２を含む。ソースデバイス１２は、ビデオソース１８とビデオエンコーダ２０と送信機２２とを含むことができる。受信デバイス１４は、受信機２４と、ビデオデコーダ２６と、ビデオディスプレイデバイス２８とを含むことができる。システム１０は、本開示による、デジタルビデオデータのメモリ効率の良いＶＦコーディングのための技法を適用するように構成できる。たとえば、メモリ効率の良いＶＦコーディング技法は、予測ビデオコーディングプロセスによって作り出される残差ブロック係数のロスレスコーディングのために使用できる。一例として、本技法は、ゼロの連続を使用して０でない変換係数の位置をコーディングするビデオコーディング方式に、または他のビデオコーディング方式に適用できる。
【００２５】
図１の例では、通信チャネル１６は、無線周波数（ＲＦ）スペクトルまたは１つまたは複数の物理的伝送線路など、ワイヤレスまたはワイヤードの任意の通信媒体、あるいはワイヤレスおよびワイヤードの媒体の任意の組合せを備えることができる。チャネル１６は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースのネットワークの一部を形成することができる。通信チャネル１６は、一般に、ビデオデータをソースデバイス１２から受信デバイス１４に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。
【００２６】
ソースデバイス１２は、宛先デバイス１４に送信するためのビデオを生成する。ただし、場合によっては、デバイス１２、１４は、実質的に対称に動作することができる。たとえば、デバイス１２、１４の各々は、ビデオ符号化および復号化構成要素を含むことができる。したがって、システム１０は、たとえば、ビデオストリーミング、ビデオブロードキャスト、またはビデオ電話のためのビデオデバイス１２とビデオデバイス１４との間の一方向または双方向のビデオ送信をサポートすることができる。他のデータ圧縮およびコーディング適用例の場合、デバイス１２、１４は、画像、音声またはオーディオデータ、あるいはビデオ、画像、音声およびオーディオデータのうちの２つ以上の組合せなど、他のタイプのデータを送信および受信、または交換するように構成できる。したがって、ビデオ符号化および復号化適用例の説明は例示のために与えたものであり、本明細書で広く説明する本開示の様々な態様を限定するものと見なすべきではない。
【００２７】
ビデオソース１８は、１つまたは複数のビデオカメラ、あらかじめキャプチャされたビデオを含んでいるビデオアーカイブ、またはビデオコンテンツプロバイダからのライブビデオフィードなど、ビデオキャプチャデバイスを含むことができる。さらなる代替として、ビデオソース１８はソースビデオとしてのコンピュータグラフィックベースのデータ、またはライブビデオとコンピュータ生成ビデオとの組合せを生成することができる。場合によっては、ビデオソース１８がカメラである場合、ソースデバイス１２および受信デバイス１４は、いわゆるカメラ付き携帯電話またはビデオ電話を形成することができる。したがって、いくつかの態様では、ソースデバイス１２、受信デバイス１４またはその両方は、モバイル電話ハンドセットなど、ワイヤレス通信デバイスハンドセットを形成することができる。各場合において、キャプチャされたビデオ、プリキャプチャされたビデオ、またはコンピュータ生成ビデオは、送信機２２とチャネル１６と受信機２４とを介してビデオソースデバイス１２からビデオ受信デバイス１４のビデオデコーダ２６に送信するために、ビデオエンコーダ２０によって符号化できる。ディスプレイデバイス２８は、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイまたは有機発光ダイオード（ＯＬＥＤ）ディスプレイなどの様々なディスプレイデバイスのいずれかを含むことができる。
【００２８】
ビデオエンコーダ２０およびビデオデコーダ２６は、空間、時間および／または信号対雑音比（ＳＮＲ）スケーラビリティのためのスケーラブルビデオコーディング（ＳＶＣ）をサポートするように構成できる。いくつかの態様では、ビデオエンコーダ２０およびビデオデコーダ２２は、ＳＶＣのための細粒度ＳＮＲスケーラビリティ（ＦＧＳ：fine granularity SNR scalability）コーディングをサポートするように構成できる。エンコーダ２０およびデコーダ２６は、ベースレイヤおよび１つまたは複数のスケーラブルエンハンスメントレイヤの符号化、送信および復号化をサポートすることによって様々な程度のスケーラビリティをサポートすることができる。スケーラブルビデオコーディングの場合、ベースレイヤは最小品質レベルでビデオデータを搬送する。１つまたは複数のエンハンスメントレイヤは追加のビットストリームを搬送して、より高い空間的レベル、時間的レベルおよび／またはＳＮＲレベルをサポートする。
【００２９】
ビデオエンコーダ２０およびビデオデコーダ２６は、ＭＰＥＧ−２、ＭＰＥＧ−４、ＩＴＵ−Ｔ  Ｈ．２６３、またはＩＴＵ−Ｔ  Ｈ．２６４／ＭＰＥＧ−４  Ａｄｖａｎｃｅｄ  Ｖｉｄｅｏ  Ｃｏｄｉｎｇ（ＡＶＣ）などのビデオ圧縮規格に従って動作することができる。図１には示されていないが、いくつかの態様では、ビデオエンコーダ２０およびビデオデコーダ２６は、それぞれオーディオエンコーダおよびデコーダと統合され、適切なＭＵＸ−ＤＥＭＵＸユニット、または他のハードウェアおよびソフトウェアを含み、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理し得る。適用可能な場合、ＭＵＸ−ＤＥＭＵＸユニットはＩＴＵ  Ｈ．２２３マルチプレクサプロトコル、またはユーザデータグラムプロトコル（ＵＤＰ）などの他のプロトコルに準拠することができる。
【００３０】
Ｈ．２６４／ＭＰＥＧ−４（ＡＶＣ）規格は、Ｊｏｉｎｔ  Ｖｉｄｅｏ  Ｔｅａｍ（ＪＶＴ）として知られる共同パートナーシップの成果として、ＩＳＯ／ＩＥＣのＭｏｖｉｎｇ  Ｐｉｃｔｕｒｅ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ（ＭＰＥＧ）とともにＩＴＵ−ＴのＶｉｄｅｏ  Ｃｏｄｉｎｇ  Ｅｘｐｅｒｔｓ  Ｇｒｏｕｐ（ＶＣＥＧ）によって策定された。Ｈ．２６４規格は、ＩＴＵ−Ｔ研究グループによる２００５年３月付けのＩＴＵ−Ｔ勧告Ｈ．２６４「Advanced video coding for generic audiovisual services」に記載されており、本明細書ではＨ．２６４規格またはＨ．２６４仕様、あるいはＨ．２６４／ＡＶＣ規格または仕様と呼ぶことがある。
【００３１】
いくつかの態様では、ビデオブロードキャストに関して、本開示で説明する技法を、たとえば、ワイヤレスビデオブロードキャストサーバまたはワイヤレス通信デバイスハンドセットを介して、Ｆｏｒｗａｒｄ  Ｌｉｎｋ  Ｏｎｌｙ（ＦＬＯ）  Ａｉｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、すなわちＴｅｃｈｎｉｃａｌ  Ｓｔａｎｄａｒｄ  ＴＩＡ−１０９９（「ＦＬＯ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」）として発表された「Ｆｏｒｗａｒｄ  Ｌｉｎｋ  Ｏｎｌｙ  Ａｉｒ  Ｉｎｔｅｒｆａｃｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  Ｔｅｒｒｅｓｔｒｉａｌ  Ｍｏｂｉｌｅ  Ｍｕｌｔｉｍｅｄｉａ  Ｍｕｌｔｉｃａｓｔ」を使用して、ｔｅｒｒｅｓｔｒｉａｌ  ｍｏｂｉｌｅ  ｍｕｌｔｉｍｅｄｉａ  ｍｕｌｔｉｃａｓｔ（ＴＭ３）システムでリアルタイムビデオサービスを配信するための拡張Ｈ．２６４ビデオコーディングに適用することができる。ＦＬＯ  Ｓｐｅｃｉｆｉｃａｔｉｏｎは、ビットストリームシンタックスおよびセマンティックス、ならびにＦＬＯ  Ａｉｒ  Ｉｎｔｅｒｆａｃｅに適した復号化プロセスを定義する例を含む。代替的に、ＤＶＢ−Ｈ（ｄｉｇｉｔａｌ  ｖｉｄｅｏ  ｂｒｏａｄｃａｓｔ−ｈａｎｄｈｅｌｄ）、ＩＳＤＢ−Ｔ（ｉｎｔｅｇｒａｔｅｄ  ｓｅｒｖｉｃｅｓ  ｄｉｇｉｔａｌ  ｂｒｏａｄｃａｓｔ−ｔｅｒｒｅｓｔｒｉａｌ）、またはＤＭＢ（ｄｉｇｉｔａｌ  ｍｅｄｉａ  ｂｒｏａｄｃａｓｔ）などの他の規格に従ってビデオをブロードキャストすることができる。したがって、ソースデバイス１２は、モバイルワイヤレス端末、ビデオストリーミングサーバ、またはビデオブロードキャストサーバとすることができる。しかしながら、本開示で説明する技法は、特定のタイプのブロードキャスト、マルチキャスト、またはポイントツーポイントシステムに限定されない。ブロードキャストの場合、ソースデバイス１２は、ビデオデータのいくつかのチャネルを、その各々が図１の受信デバイス１４と同様とすることができる複数の受信デバイスにブロードキャストすることができる。
【００３２】
ビデオエンコーダ２０およびビデオデコーダ２６はそれぞれ、１つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せとして実装できる。したがって、ビデオエンコーダ２０およびビデオデコーダ２６の各々を、集積回路（ＩＣ）チップまたはデバイスとして少なくとも部分的に実装し、１つまたは複数のエンコーダまたはデコーダ中に含めることができ、そのいずれかを複合エンコーダ／デコーダ（コーデック）の一部としてそれぞれモバイルデバイス、加入者デバイス、ブロードキャストデバイス、サーバなどに統合することができる。さらに、ソースデバイス１２および受信デバイス１４はそれぞれ、符号化ビデオの送信および受信のために適切な変調、復調、周波数変換、フィルタ処理、および増幅器構成要素を含み、適用可能な場合、ワイヤレス通信をサポートするために十分な無線周波（ＲＦ）ワイヤレス構成要素およびアンテナを含むことができる。ただし、説明しやすいように、そのような構成要素は図１に示していない。
【００３３】
ビデオシーケンスは一連のビデオフレームを含む。ビデオエンコーダ２０は、ビデオデータを符号化するために個々のビデオフレーム内のピクセルのブロックに作用する。ビデオブロックは、サイズを固定することも変更することもでき、指定のコーディング規格に応じてサイズが異なることがある。各ビデオフレームは一連のスライスを含む。各スライスは一連のマクロブロックを含むことができ、それらはサブブロック中に配置することができる。一例として、ＩＴＵ−Ｔ  Ｈ．２６４規格は、ルーマ成分では１６×１６、８×８、４×４、およびクロマ成分では８×８など、様々なブロックサイズのイントラ予測、ならびにルーマ成分では１６×１６、１６×８、８×１６、８×８、８×４、４×８および４×４、およびクロマ成分では対応するスケーリングされたサイズなど、様々なブロックサイズのインター予測をサポートする。
【００３４】
ビデオブロックは、小さいほどより良い解像度が得られ、より高い詳細レベルを含むビデオフレームの位置特定に使用することができる。一般に、マクロブロック（ＭＢ）および様々なサブブロックをビデオブロックと考えることができる。さらに、スライスは、ＭＢおよび／またはサブブロックなど一連のビデオブロックであると考えることができる。各スライスは単独で復号化可能なユニットとすることができる。予測の後に、８×８残差ブロックまたは４×４残差ブロック上で変換を実行することができ、イントラ１６×１６予測モードが使用される場合は、クロマ成分またはルーマ成分用の４×４ブロックのＤＣ係数に追加の変換を適用することができる。
【００３５】
図１のシステム１０のビデオエンコーダ２０および／またはビデオデコーダ２６は、本開示で説明するメモリ効率の良いＶＦコーディング技法およびＶＦコードの高速パーシングのための技法を採用するように構成できる。特に、ビデオエンコーダ２０および／またはビデオデコーダ２６は、メモリ利用、処理オーバーヘッド、処理複雑度、帯域幅消費、データ記憶空間、および／または電力消費量を低減するためにそのような技法の少なくともいくつかを適用する、エントロピーエンコーダおよびエントロピーデコーダをそれぞれ含むことができる。
【００３６】
図２は、図１に示すビデオエンコーダ２０の一例を示すブロック図である。ビデオエンコーダ２０は、少なくとも部分的に、まとめて集積回路デバイスと呼ぶことができる１つまたは複数の集積回路デバイスとして形成できる。いくつかの態様では、ビデオエンコーダ２０は、ワイヤレス通信デバイスハンドセットまたはブロードキャストサーバの一部を形成することができる。ビデオエンコーダ２０は、ビデオフレーム内のブロックのイントラコーディングおよびインターコーディングを実行することができる。イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、ビデオシーケンスの隣接フレーム内のビデオの時間的冗長性を低減または除去するために時間的予測に依拠する。インターコーディングの場合、ビデオエンコーダ２０は、隣接フレーム間でビデオブロックを一致させる動作を追跡するために動き推定を実行する。
【００３７】
図２に示すように、ビデオエンコーダ２０は、符号化すべきビデオフレーム内の現在のビデオブロック３０を受信する。図２の例では、ビデオエンコーダ２０は、動き推定ユニット３２と、参照フレームストア３４と、動き補償ユニット３６と、ブロック変換ユニット３８と、量子化ユニット４０と、逆量子化ユニット４２と、逆変換ユニット４４と、エントロピー符号化ユニット４６とを含む。ビデオエンコーダ２０はまた、本開示の様々な態様による、符号化または復号化を含むＶＦコーディングにおいて使用するＶＦコーディングツリーによって表されるＶＦコード構造の構成を定義する属性を含む１つまたは複数のデータ構造のコンテンツを含むコーディングデータを記憶および検索するためにエントロピー符号化ユニット４６によって使用され得るメモリ４７を含むメモリを含むことができる。ブロッキングアーティファクトを除去するために、ループ内デブロッキングフィルタ（図示せず）をフィルタブロックに適用することができる。ビデオエンコーダ２０はまた、加算器４８と加算器５０とを含む。図２は、ビデオブロックのインターコーディングのためのビデオエンコーダ２０の時間的予測構成要素を示す。説明しやすいように図２には示されていないが、ビデオエンコーダ２０は、いくつかのビデオブロックのイントラコーディングのための空間的予測構成要素をも含むことができる。
【００３８】
動き推定ユニット３２は、１つまたは複数の動きベクトルを生成するためにビデオブロック３０を１つまたは複数の隣接ビデオフレーム中のブロックと比較する。以前に符号化されたブロックから再構成されたビデオブロックを記憶するために任意のタイプのメモリまたはデータ記憶デバイスを備えることができる参照フレームストア３４から、１つまたは複数の隣接フレームを検索することができる。動き推定は、可変サイズ、たとえば、１６×１６、１６×８、８×１６、８×８、またはより小さいブロックサイズのブロックに対して実行できる。
【００３９】
動作中、動き推定ユニット３２は、たとえば、レートひずみモデルに基づいて現在のビデオブロック３０に最もぴったり一致する隣接フレーム中の１つまたは複数のブロックを識別し、隣接フレーム中のブロックと現在のビデオブロックとの間の変位を判断する。これに基づいて、動き推定ユニット３２は、現在のビデオブロック３０と、現在のビデオブロック３０をコーディングするために使用される参照フレームからの１つまたは複数の一致するブロックとの間の変位の大きさおよび軌道を示す、１つまたは複数の動きベクトル（ＭＶ）を作り出す。
【００４０】
動きベクトルは、ハーフもしくはクォータピクセル精度、またはさらにより微細な精度を有することができ、それによりビデオエンコーダ２０は、整数ピクセルロケーションよりも高い精度で動きを追跡し、より良い予測ブロックを取得することが可能になる。端数のピクセル値をもつ動きベクトルを使用するとき、動き補償ユニット３６中で補間演算が実行される。動き推定ユニット３２は、レートひずみモデルなど、いくつかの基準を使用して、ビデオブロックについての最良のブロック区分および１つまたは複数の動きベクトルを識別する。たとえば、双方向予測の場合、複数の動きベクトルがあり得る。得られたブロック区分および動きベクトルを使用して、動き補償ユニット３６は予測ビデオブロックを形成する。
【００４１】
ビデオエンコーダ２０は、加算器４８において、元の現在のビデオブロック３０から、動き補償ユニット３６によって作り出された予測ビデオブロックを減算することによって残差ビデオブロックを形成する。ブロック変換ユニット３８は、Ｈ．２６４／ＡＶＣにおいて使用される４×４または８×８整数変換などの変換を残差ブロックに適用して、残差変換ブロック係数を作り出す。量子化ユニット４０は、ビットレートをさらに低減するために残差変換ブロック係数を量子化する。ロスレス符号化ユニット４６は、量子化係数をエントロピーコード化して、ビットレートをなお一層低減する。
【００４２】
ロスレス符号化ユニット４６は、ＶＦ符号化ユニットとして動作して、量子化ブロック係数にＶＦ符号化を適用する。特に、エントロピー符号化ユニット４６は、本開示で説明するメモリ効率の良いＶＦ符号化技法を使用してデジタルビデオブロック係数のＶＦ符号化を実行するように構成できる。したがって、ビデオデータの符号化を実行するために、本開示で説明する様々なＶＦ符号化プロセスをロスレス符号化ユニット４６内に実装することができる。代替的に、そのようなロスレス符号化ユニット４６は、限定はしないが、ビデオ、画像、音声およびオーディオデータを含む様々なデータのいずれかを符号化するために、本開示で説明するプロセスを実行することができる。一般に、ビデオデコーダ２６は、たとえば、図３に関して説明するように、符号化ビデオを復号化および再構成するために、ＶＦ復号化およびパーシングを含む逆演算を実行する。
【００４３】
逆量子化ユニット４２および逆変換ユニット４４はそれぞれ、逆量子化および逆変換を適用して残差ブロックを再構成する。加算器５０は、再構成された残差ブロックを、動き補償ユニット３６によって作り出された動き補償された予測ブロックに加算して、参照フレームストア３４に記憶するための再構成されたビデオブロックを作り出す。再構成されたビデオブロックは、後続のビデオフレーム中のブロックを符号化するために動き推定ユニット３２および動き補償ユニット３６によって使用される。
【００４４】
図３は、ビデオデコーダ２６の一例を示すブロック図である。ビデオデコーダ２６は、少なくとも部分的に、まとめて集積回路デバイスと呼ぶことができる１つまたは複数の集積回路デバイスとして形成することができる。いくつかの態様では、ビデオデコーダ２６は、ワイヤレス通信デバイスハンドセットの一部を形成することができる。ビデオデコーダ２６は、ビデオフレーム内のブロックのイントラ復号化およびインター復号化を実行することができる。図３に示すように、ビデオデコーダ２６は、ビデオエンコーダ２０によって符号化された受信機２４（図１）からの符号化ビデオビットストリームを受信する。図３の例では、ビデオデコーダ２６は、エントロピー復号化ユニット５２と、動き補償ユニット５４と、逆量子化ユニット５６と、逆変換ユニット５８と、参照フレームストア６２とを含む。ビデオデコーダ２６はまた、ＶＦ復号化において使用するＶＦコーディングツリーの構成を定義する属性を含む１つまたは複数のデータ構造のコンテンツを含むコーディングデータを記憶および検索するためにエントロピー復号化ユニット５２が使用することができる、メモリ５３を含むメモリを含むことができる。ビデオデコーダ２６は、加算器６４の出力をフィルタ処理するループ内デブロッキングフィルタ（図示せず）をも含むことができる。ビデオデコーダ２６は加算器６４をも含む。図３は、ビデオブロックのインター復号化のためのビデオデコーダ２６の時間予測構成要素を示す。図３には示されていないが、ビデオデコーダ２６は、いくつかのビデオブロックのイントラ復号化のための空間予測構成要素をも含むことができる。
【００４５】
ロスレス復号化ユニット５２は、符号化ビデオビットストリームを受信し、そのビットストリームから、量子化残差係数、マクロブロックコーディングモード、および動きベクトルとブロック区分とを含むことができる動き情報を復号化する。したがって、エントロピー復号化ユニット５２は、ＶＦ復号化ユニットとして機能し、ＶＦコーディングツリーの様々な属性を定義するためにメモリ５３に記憶されたデータ構造に依拠することができる。たとえば、符号化ビットストリームから量子化残差係数を復号化するために、図２のロスレス符号化ユニット４６のように、図３のエントロピー復号化ユニット５２は、本開示で説明するデジタルビデオブロック係数のメモリ効率の良いＶＦ復号化を実行することができる。しかしながら、ロスレス復号化ユニット５２は、符号化ビットストリームから量子化ブロック係数を取り出すために、図２のロスレス符号化ユニット４６に対して逆の方法でＶＦ復号化を実行することができる。ロスレス復号化ユニット５２はまた、符号化ビットストリーム中のランダムに選択されたコードワードの高速復号化のためにＶＦパーシング技法を実行することができる。本開示で説明する様々な復号化およびパーシングプロセスは、ビデオデータの復号化を実行するためにエントロピー復号化ユニット５２内に実装できる。代替的に、そのようなロスレス復号化ユニット５２は、限定はしないが、ビデオ、画像、音声およびオーディオデータを含む、様々なデータのいずれかを復号化するために本開示で説明するプロセスを実行することができる。いずれの場合も、エントロピー復号化ユニット５２によって実行された可変長コーディングの結果を、ユーザに出力し、メモリに記憶し、および／あるいは別のデバイスまたは処理ユニットに送信することができる。
【００４６】
動き補償ユニット５４は、動きベクトルと、ブロック区分と、参照フレームストア６２からの１つまたは複数の再構成された参照フレームとを受信して、予測ビデオブロックを作り出す。逆量子化ユニット５６は、量子化ブロック係数を逆量子化（inverse quantize）、すなわち逆量子化（de-quantize）する。逆変換ユニット５８は、逆変換、たとえば、逆ＤＣＴ、または逆４×４もしくは８×８整数変換を係数に適用して、残差ブロックを作り出す。次いで、予測ビデオブロックは、加算器６４によって残差ブロックと加算されて、復号化ブロックを形成する。復号化されたブロックをフィルタ処理してブロッキングアーティファクトを除去するために、デブロッキングフィルタ（図示せず）を適用することができる。フィルタ処理されたブロックは次いで参照フレームストア６２に入れられ、参照フレームストア６２は、後続のビデオフレームの復号化のために参照フレームを与え、また、ディスプレイデバイス２８（図１）を駆動するために復号化ビデオを作り出す。
【００４７】
次に、様々なデータ構造をサポートするＶＦコーディングのためのメモリ効率の良い技法の例についてより詳細に説明する。これらのコーディング技法は、上記で説明したエンコーダおよびデコーダ内に実装できる。無記憶ソース（memoryless source）Ｓについて考える。ソースＳは、入力アルファベットＡ＝｛ａ1，．．．，ａm｝（２≦ｍ＜∞）からシンボルを作り出す。ただし、作り出される各シンボルの確率は、確率｛ｐi＝Ｐ（ａi），ｉ＝１，．．．，ｍ｝を有する。作り出される各シンボルの確率のすべての和は１である。たとえば、ｍ＝２の場合、ａ1およびａ2のシンボルは、それぞれ、０および１とすることができる。１（Ｐ（１））の確率は０．６とすることができ、その場合、Ｐ（０）は０．４に等しい。０＜ｐmin≦ｐmax＜１と仮定して、値ｐmin、ｐmaxは、相応して最も可能性の低いおよび最も可能性の高いシンボルの確率を示す。
【００４８】
メッセージ
【数１】
0005313362.tif 000002
を、ソースＳによって作り出される無限長シーケンスのシンボルであると仮定する。可変長コーディングの主概念は、以下のように、任意のメッセージΣをＸからのワードのシーケンスによって一意に表すことができるように、ワードＸ＝｛ｘj∈Ａ＊，ｊ＝１，．．．，Ｍ｝（ｍ≦Ｍ＜∞）の集合を定義し、次いで、出力アルファベットＢ＝｛ｂ1，．．．，ｂn｝（（２≦ｎ＜∞）の文字から形成されたコードワードΦ（ｘj）にワードｘjをマップすることである。
【数２】
0005313362.tif 000003
【００４９】
マッピングΦは単射であり、たとえば、Ｔ．Ｍ．ＣｏｖｅｒおよびＪ．Ｍ．Ｔｈｏｍａｓ、「Elements of Information Theory」、（Ｊｏｈｎ  Ｗｉｌｅｙ＆Ｓｏｎｓ、Ｎｅｗ  Ｙｏｒｋ、１９９１）に記載されているように、出力コード｛Φ（ｘj）｝は一意に復号化可能であると仮定される。
【００５０】
本開示によれば、同じ長さをもつコードワードΦ（ｘj）を作り出すコーディングシステムにＶＦコーディング技法を適用することができる。たとえば、単に
【数３】
0005313362.tif 000004
を選択し、ワードｘjのインデックスを使用して、そのようなワードのためのコードを作り出すことが可能である。そのようなコーディングシステムによって作り出されるコードは、可変長ブロック（ＶＢ）または可変長固定長（ＶＦ）コードと呼ばれることがある。概して、本開示ではＶＦコードという用語を使用する。
【００５１】
所与のソースＳのためのＶＦコードの構成の問題は、  
【数４】
0005313362.tif 000005
のソースの符号化の平均冗長度が最小になるような、制限されたサイズ｜Ｘ｜≦Ｍのプレフィックスフリー集合Ｘを発見することに関連する。
この場合、ｄ（Ｘ，Ｓ）は、次式のような平均遅延（またはＸのワードの平均の長さ）を示す。
【数５】
0005313362.tif 000006
ｈ（ｓ）は、次式のようなソースのエントロピーである。
【数６】
0005313362.tif 000007
場合によっては、次式のような理想化された平均冗長度を最小限に抑えるプレフィックス集合Ｘを発見すれば十分であり得る。
【数７】
0005313362.tif 000008
上記の問題は類似している。
【００５２】
無記憶ソースのための最適なＶＦコードの構成のための最もよく知られているアルゴリズムは、Ｂ．Ｐ．ＴｕｎｓｔａｌｌによってＢ．Ｐ．Ｔｕｎｓｔａｌｌ、「Synthesis of Noiseless Compression Codes」、博士論文、（Ｇｅｏｒｇｉａ  Ｉｎｓｔ．  Ｔｅｃｈ．、Ａｔｌａｎｔａ、Ｇａ．、１９６８）に記述された。また、Ｔｕｎｓｔａｌｌコーディングは、Ｆ．ＪｅｌｉｎｅｋおよびＫ．Ｓ．Ｓｃｈｎｅｉｄｅｒ、「On Variable-Length-to-Block Coding」、ＩＥＥＥ  Ｔｒａｎｓ．  Ｉｎｆ．  Ｔｈｅｏｒｙ、１８（６）（１９７２）７６５〜７７４に記述され、解析されている。Ｔｕｎｓｔａｌｌコーディングプロセスは、入力アルファベットＡの文字に対応する、ｍ個のリーフに接続された単一のノードからなるツリーΔ(1)で開始する。たとえば、図４のノード６４は単一の開始ノードになる。図４はバイナリツリーであり、したがって、ｍ＝２であり、したがって第１のステップにおいて、ノード６４はリンク６６および６８を介して２つのリーフに接続される。次いで、コーディングプロセスは、最も高い確率をもつ文字に対応するリーフを選び、それを、新しいリーフに接続されたノードと置き換える。このプロセスは連続的に繰り返され、各ステップにおいて、最も高い確率をもつワードに対応するリーフを選ぶ。ｉ回のステップの後、このコーディングプロセスは、（ｍ−１）ｉ＋１個のリーフをもつツリーΔ(i)を作り出することがわかる。このツリーは、容易に数え上げ、
【数８】
0005313362.tif 000009
にマップすることができる、ワードのプレフィックスフリー集合Ｘ（Δ(i)）に対応する。
【００５３】
図４は、ＶＦコーディングツリーの一例を示す図である。図４のＶＦコーディングツリーは、１６回の反復後に確率Ｐｒ（１）＝０．２をもつバイナリ無記憶ソースのためのＴｕｎｓｔａｌｌアルゴリズムによって作り出されるコーディングツリーの一例である。以下の表１に、図４のツリー中のノードについてのコード、ワードおよび確率（Ｐｒ）値を示す。
【表１】
0005313362.tif 000010
図４に示すように、コーディングプロセスは、ルートノード６４から外側に、左のブランチ６６および右のブランチ６８に沿って拡張する。コーディングプロセスは、表１中の可変長ワードの各々に固定長コードを割り当てるためにツリーのブランチをトレースする。図４のツリー中のノード０〜１６は、上記の表１中に提示されたそれぞれの可変長入力ワードのための対応する固定長コードを指定する。いくつかのワードが他のワードよりも多いシンボルを含んでいるように、ワードは可変の長さを有する。図４および表１中のＶＦコードにおけるコード番号の割当ては、本開示による例示的な技法について説明するのに好都合である特定の順序で行われる。しかしながら、より一般的な場合は、コード番号の割当てを別様に行うことができ、コード番号のすべての考えられる置換が可能である。
【００５４】
Ｔｕｎｓｔａｌｌコーディングプロセスは、極めてよく研究されており、コーディング理論およびその他において多くの適用例に使用されている。その冗長性の単純な限界は独立して得られており、Ｇ．Ｌ．Ｋｈｏｄａｋ、「Connection Between Redundancy and Average Delay of Fixed-Length Coding」、Ａｌｌ−Ｕｎｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｐｒｏｂｌｅｍｓ  ｏｆ  Ｔｈｅｏｒｅｔｉｃａｌ  Ｃｙｂｅｒｎｅｔｉｃｓ（Ｎｏｖｏｓｉｂｉｒｓｋ、ＵＳＳＲ、１９６９）１２（ロシア）、およびＦ．ＪｅｌｉｎｅｋおよびＫ．Ｓ．Ｓｃｈｎｅｉｄｅｒ、「On Variable-Length-to-Block Coding」、ＩＥＥＥ  Ｔｒａｎｓ．  Ｉｎｆ．  Ｔｈｅｏｒｙ、１８（６）（１９７２）７６５〜７７４に記載されている。メモリをもつソースのためのＴｕｎｓｔａｌｌコードの一般化は、Ｔ．Ｊ．ＴｊａｌｋｅｎｓおよびＦ．Ｍ．Ｊ．Ｗｉｌｌｅｍｓ、「Variable to Fixed-length codes for Markov sources」、ＩＥＥＥ  Ｔｒａｎｓ．  Ｉｎｆ．  Ｔｈｅｏｒｙ  ＩＴ−３３、２４６〜２５７、１９８７、およびＳ．Ａ．Ｓａｖａｒｉ、Ｒｏｂｅｒｔ  Ｇ．Ｇａｌｌａｇｅｒ、「Generalized Tunstall codes for sources with memory」、ＩＥＥＥ  Ｔｒａｎｓ．  Ｉｎｆｏ．  Ｔｈｅｏｒｙ，  ｖｏｌ．ＩＴ−４３、６５８〜６６８ページ、１９９７年３月によって提唱されている。その冗長性（４）のより正確な漸近解析は、Ｓ．Ａ．Ｓａｖａｒｉ、「Variable-to-Fixed Length Codes for Predictable Sources」、Ｐｒｏｃ  ＩＥＥＥ  Ｄａｔａ  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ、Ｓｎｏｗｂｉｒｄ、Ｕｔａｈ、１９９８年３月３０日〜４月１日、４８１〜４９０ページ、およびＭ．Ｄｒｍｏｔａ、Ｙ．Ａ．Ｒｅｚｎｉｋ、Ｓ．Ａ．Ｓａｖａｒｉ、およびＷ．Ｓｚｐａｎｋｏｗｓｋｉ、「Precise Asymptotic Analysis of the Tunstall Code」、ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ（ＩＳＩＴ０６）、Ｓｅａｔｔｌｅ、Ｗａｓｈ．、２００６年７月９〜１４日によって提示されている。一様分布の近似、乱数生成、および関係する問題のためのＴｕｎｓｔａｌｌアルゴリズムの適用例について説明した。
【００５５】
Ｔｕｎｓｔａｌｌコーディングプロセスは、可変長固定長（ＶＦ）コードの構成に利用可能な唯一の技法でない。Ｇ．Ｌ．Ｋｈｏｄａｋは、Ｇ．Ｌ．Ｋｈｏｄａｋ、「Connection Between Redundancy and Average Delay of Fixed-Length Coding」、Ａｌｌ−Ｕｎｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｐｒｏｂｌｅｍｓ  ｏｆ  Ｔｈｅｏｒｅｔｉｃａｌ  Ｃｙｂｅｒｎｅｔｉｃｓ（Ｎｏｖｏｓｉｂｉｒｓｋ、ＵＳＳＲ、１９６９）１２（ロシア）に、別のコード構成技法を記載している。Ｋｈｏｄａｋプロセスは、Ｇ．Ｌ．Ｋｈｏｄａｋ、「Redundancy Estimates for Word-Based Encoding of Messages Produced by Bernoulli Sources」、Ｐｒｏｂｌ．  Ｉｎｆ．  Ｔｒａｎｓ．、８、（２）（１９７２）２１〜３２（ロシア）、およびＲ．Ｅ．Ｋｒｉｃｈｅｖｓｋｙ、「Universal Data Compression and Retrieval」（Ｋｌｕｗｅｒ、１９９３）にも記載されている。Ｋｈｏｄａｋプロセスは、図４のノード６４など、単一のノードを含んでいるツリーで開始し、すべてのそのリーフｘが次式を満たすまで、ツリーを漸進的に伸ばす。
【数９】
0005313362.tif 000011
上式で、Ｎは固定の実数（Ｎ＞１／ｐmin）である。上記の条件（５）は、得られたツリーΔN中のリーフの総数が次式を満たすことを暗示する。
【数１０】
0005313362.tif 000012
条件（５）はすべてのリーフに適用されるので、Ｎの異なる値を選択することによって、一定の粒度（granularity）を伴うが、得られたツリーのサイズを制御することができる。また、パラメータＮをもつＫｈｏｄａｋ技法を使用して構成されたツリーΔNは、
【数１１】
0005313362.tif 000013
回のステップ後にＴｕｎｓｔａｌｌ技法を使用して構成されたツリー
【数１２】
0005313362.tif 000014
とまったく同じであることを示すことができる。したがって、図４のツリー４００は、ＴｕｎｓｔａｌｌまたはＫｈｏｄａｋ技法のいずれかを使用して構成できる。
【００５６】
したがって、Ｔｕｎｓｔａｌｌ技法とＫｈｏｄａｋ技法の両方は、同じ問題を解決するために使用できる。Ｔｕｎｓｔａｌｌ技法は、得られたツリー中のリーフの数にわたって明示的制御を行う利点を有する。一方、Ｋｈｏｄａｋ方式は、式（５）ごとに、コーディングツリーの直接構成を実行するために使用できるコーディングツリーの単純な代数的特徴づけを行う。Ｔｕｎｓｔａｌｌコードと同様に、コードインデックスが割り当てられる順序を選択する際にフレキシビリティがあり、本開示の態様の１つは、そのような割当ての特定の順序を定義する。
【００５７】
本開示によれば、ＶＦコードの効率の良い符号化および／または復号化のための技法が提供される。そのような技法は、ビデオコーディング、オーディオコーディング、ボイスコーディング、音声コーディングまたは他の適用例に適用できる。たとえば、ＴｕｎｓｔａｌｌまたはＫｈｏｄａｋアルゴリズムを使用して構成されたＶＦコーディングツリーの代数的性質を利用して、それらのコードインデックスを特定の順序に並べ替えることにより、コードワードの符号化および／または復号化のための組合せ数え上げ技法の使用が可能になるので、本技法は、かなりのメモリ節約をサポートすることができる。たとえば、いくつかの態様では、そのような技法は、多くとも２次メモリ空間量Ｏ（Ｌ2）を必要とし、ここで、Ｌはコーディングツリーの深さである。さらに、そのような技法のコーディング複雑度は、それらの技法が処理するシンボルの数に比例し得る。
【００５８】
２つの単純な補題は、本開示によるＶＦコーディングツリー中の内部コードの直接数え上げをサポートする。
【００５９】
補題１によれば、上記のＫｈｏｄａｋ条件（５）を満たすツリーΔN中の内部ノードωの確率は、以下の性質を有する。
【数１３】
0005313362.tif 000015
証明：条件（５）、およびＰ（ω）はリーフの確率よりも大きくなるはずであることから直ちにそうなる。
【００６０】
補題２によれば、
【数１４】
0005313362.tif 000016
となるようなストリングω∈Ａ*は、上記のＫｈｏｄａｋ条件（５）を満たす、ツリーΔN中の既存の内部ノードにつながる。証明：これが正しくない場合、外部ノードにつながる、プレフィックスｕ：ω＝ｕｖ、｜ｕ｜＞０、｜ｖ｜＞０が存在するはずである。その場合、上記の条件（５）によれば、Ｐ（ｕ）＜１／ＮPminであることが真であるはずである。しかしながら、これは、上記の式（８）、およびＰ（ω）＝Ｐ（ｕ）Ｐ（ｖ）＜Ｐ（ｕ）であることに矛盾する。
【００６１】
Ｋｈｏｄａｋのアルゴリズムを使用して構成されるツリー中のリーフの確率についてのより厳密な限界は、以下の補題に従って導出できる。補題３によれば、上記の条件（５）を満たすツリーΔN中のαブランチ（α∈Ａ）に接続されたリーフｘは、以下の性質を有する。
【数１５】
0005313362.tif 000017
証明：ストリングωに対応する内部ノードについて考える。その子は、ω：ωα、α∈Ａの一文字拡張に対応する。ノードωαが外部ノードになる場合、上記のＫｈｏｄａｋ条件（５）によれば、次式を満たさなければならない。
【数１６】
0005313362.tif 000018
ωは内部であるので（補題１参照）、次式のようになる。
【数１７】
0005313362.tif 000019
上記の両方の式を組み合せると、式（９）になる。
【００６２】
補題４によれば、
【数１８】
0005313362.tif 000020
となるようなすべてのストリングω∈Ａ*は、Ｋｈｏｄａｋ条件（５）を満たすツリーΔN中のリーフに直接接続されたαブランチを有する内部ノードに対応する。証明：式（１２）の左辺は、ωがツリーΔN中の有効な内部ノードであることを確実にする（補題２参照）。式（１２）の左辺はまた、ωαについて条件（５）が満たされ、したがってωαはリーフであるはずであることを暗示する。Ｋｈｏｄａｋの条件（５）はリーフの確率に関する制限として定式化されるが、それらの直接数え上げのためには使用できない。条件（５）を使用するためには、そのリーフのすべてが条件（５）を満たすまで、バイナリツリー構造を維持し、それを漸進的に伸ばさなければならない。上記の条件（１２）は、ツリー構造を構築することなしに直接使用できる。
【００６３】
次に、本開示で提示する数え上げコーディング技法による例示的なＶＦコーディングツリーの構造について説明する。上記の補題４は、次式のように、無記憶ソースのためのＶＦコードツリーΔN中のすべてのワードを数え上げることができることを暗示する。
【数１９】
0005313362.tif 000021
上式で、各グループ
【数２０】
0005313362.tif 000022
は、長さｌ＋１の
【数２１】
0005313362.tif 000023
ワードを含んでおり、ｉ番目のシンボルで終了し、確率
【数２２】
0005313362.tif 000024
を有し、ただし、ｋ1，．．．，ｋm，ｉは、それらの最初のｌ位置にある各種のシンボルの数を示す。
【００６４】
バイナリの場合、Ｐｒ（１）＝ｐ、Ｐｒ（０）＝ｑ、ｐ＜ｑでは、式（１３）を次式のように書き直すことができる。
【数２３】
0005313362.tif 000025
上式で、グループＸl,k,aは、長さｌ＋１の
【数２４】
0005313362.tif 000026
ワードによって形成され、ここで、最初のｌビットがｋ個の１を含んでおり、最後のシンボルはａである。
【００６５】
グループのこの区切りに加えて、本開示で説明する技法はまた、各サブグループ中のすべてのワード
【数２５】
0005313362.tif 000027
が辞書式順序で配置されるか、またはより一般的には、そのようなサブグループ中のブロックのインデックスの高速組合せ計算を可能にする他の順序で配置されることを指定することができる。このようにして、本技法は、高速組合せ計算を可能にするＶＦコードの特定の変形態を作り出すことができる。
【００６６】
適度に短い、たとえば、１２未満または１２にほぼ等しいワードの場合、それらの辞書式インデックスの計算（またはそれらのインデックスを使用したワードの合成）は、せいぜい１回のルックアップとすることができる。より長いワードの場合、以下のよく知られている組合せ式を使用することが可能である。
【数２６】
0005313362.tif 000028
上式で、ωjは、ワードωの個々のビットを表し、すべてのｋ＞１について、
【数２７】
0005313362.tif 000029
であると仮定する。このようにして、コードは、サブグループ中のブロックのインデックスの高速計算のための効率の良い組合せ数え上げをサポートすることができる。
【００６７】
図５は、ノードが数え上げＶＦコーディング方式に従ってグループに構成された、図４のＶＦコーディングツリーの図である。ＶＦコーディングツリーは例示的なコード構造を表す。特に、図５は、式（１４）によって定義された区分の構造を示す。図５のツリー中のＶＦコード構造は、図４の例におけるＶＦコード構造と同じであるが、ツリー内のコードのグループのリストを指定する観点から数え上げコーディング方式を示す。特に、コーディングツリーの各レベルｌについて、そのレベルに属するグループＸl,k,aの数は、多くとも２＊（ｌ＋１）である。この数は、ツリーが、すべてのリーフがレベルｌにある完全なツリーである場合に対応する。したがって、ツリーΔNのＬ個のレベル中に含まれているグループの総数は、バッハマンのＯ記法を使用して、多くともＯ（Ｌ2）である。この数は、一般に指数、すなわち、Ｏ（２L）である、同じ深さの従来のツリー中に含まれているノードまたはリーフの総数よりもかなり小さい。
【００６８】
図５の例で示されるように、ＶＦコーディングツリーは１２個のグループＸl,k,aを含み、それは、それぞれプレフィックス長と、プレフィックス中の１の数と、終端シンボル（たとえば、０または１ビット）とを示す、関連するｌ値，ｋ値、およびａ値を参照して識別される。ｌの値は、ツリー内のレベルをも示す。図５のＶＦコーディングツリーでは、レベル１に単一のグループがある。グループ（１，１），１は、コード０およびワード１１に対応する単一のリーフを含む。この場合、ｌ＝１がプレフィックスの長さであり、ｋ＝１がプレフィックス中の１の数であり、ａ＝１が終端ビットである。ＶＦコーディングツリーのレベル２に、１つのグループがある。グループ（２，１），１は、コード１およびワード０１１と、コード２およびワード１０１とに関係する２つのリーフを含む。この場合、ｌ＝２がプレフィックスの長さであり、ｋ＝１がプレフィックス中の１の数であり、ａ＝１が終端ビットである。
【００６９】
ＶＦコーディングツリーのレベル３に、３つのグループがある。グループ（３，１），１は、コード７およびワード００１１と、コード８およびワード０１０１と、コード９およびワード１００１とに関係する３つのリーフを含む。このグループの場合、ｌ＝３がプレフィックスの長さであり、ｋ＝１がプレフィックス中の１の数であり、ａ＝１が終端ビットである。グループ（３，１），０は、コード４およびワード００１０と、コード５およびワード０１００と、コード６およびワード１０００とに関係する３つのリーフを含む。このグループの場合、ｌ＝３がプレフィックスの長さであり、ｋ＝１がプレフィックス中の１の数であり、ａ＝０が終端ビットである。グループ（３，０），１は、コード３およびワード０００１に関係する単一のリーフを含む。このグループの場合、ｌ＝３がプレフィックスの長さであり、ｋ＝０がプレフィックス中の１の数であり、ａ＝１が終端ビットである。ツリーの残りは、さらなるグループＸl,k,aによって同様にして識別される。
【００７０】
ｌ値、ｋ値およびａ値、ならびに各グループ中のコードに関連付けられた辞書式に第１のワードの値を示すオフセットまたは「基本」値は、ＶＦコーディングツリー内のコードの数え上げ構成および利用をサポートする。さらに、コード０を含んでいる第１のグループがグループ（１，１），１であり、コード１および２を含んでいる第２のグループがグループ（２，１），１であり、コード３を含んでいる第３のグループがグループ（３，０），１であり、コード４、５および６を含んでいる第４のグループがグループ（３，１），０であり、コード７、８および９を含んでいる第５のグループがグループ（３，１），１であり、以下同様であるように、グループを固定長コードの順序に従って順序付けることができる。この順序を仮定すれば、ＶＦコーディングツリーのためのグループのリスト内のグループを容易に識別するために、グループインデックスｊを確立することができる。
【００７１】
次に、ＶＦコードの数え上げ構成のための技法の設計について、図５をさらに参照しながら説明する。また、バイナリ無記憶ソースのための構成プロシージャのコンパクトなデータ構造およびＣコードの一例を与える。図５を参照すると、各グループＸl,k,aの識別のためのパラメータｌ，ｋおよびａに加えて、数え上げ構成技法はまた、それぞれのグループ中の第１のコードの値を表す、グループごとの値オフセットを記憶することができる。各グループ中の（オフセットによって指定された）第１のコードは、オフセットまたは基本コードと呼ばれることがある。図５に示すように、基本コードの各々は、丸で囲まれている。上記で説明したように、コンピュータメモリ中の得られたＶＦコーディングツリー表現のサイズは、多くともＯ（Ｌ2）とすることができ、ここで、Ｌはツリーの高さ、すなわち、ツリー中のレベルｌの数である。
【００７２】
一般に、いくつかの態様では、ＶＦコードの構成のための技法は、辞書式順序を有する可変長ワードを表す固定長コードの集合を生成することを備えることができる。表１を参照すると、たとえば、入力ワードの集合は、第１のワード１１から最後のワード０００００００００１までの辞書式順序を有する。コード０〜１６は、それぞれ、ワード１１〜０００００００００１を符号化するために使用される。ＶＦコードの構成は、たとえば、図５のＶＦコーディングツリーに関して上記で説明した、グループＸl,k,aに固定長コードを構成することをさらに備えることができる。グループの各々は、１つまたは複数の固定長コードを含む。所与のグループ中の１つまたは複数の固定長コードは、確率が同じであり、終端シンボルが同じである可変長ワードを表す。
【００７３】
表１および図５を参照すると、たとえば、コード７、８および９は、可変長ワード００１１、０１０１および１００１を表す。ワード００１１、０１０１および１００１の各々は、下線によって示される、１の終端シンボルａ、たとえば、終端ビットを有する。さらに、表１に示すように、ワード００１１、０１０１および１００１の各々は、０．０２５６の確率を有する。したがって、コード７、８および９は、代替的にグループ（３，１），１と指定できる、同じグループＸl,k,a＝Ｘ3,1,1内に入れられる。表１をさらに参照すると、コード４、５および６は、コード７、８および９によって表されるワードと同じ長さを有する入力ワード（００１０、０１００、１０００）を表す。しかしながら、コード４、５および６によって表される入力ワードは、異なる終端ビットａ（０）と、異なる確率（０．１０２４）とを有する。
【００７４】
したがって、コード４、５および６は、代替的にグループ（３，１），０と指定できる、異なるグループＸl,k,a＝Ｘ3,1,0内に入れられる。コード３は、コーディングツリーのレベル３にある他のコードによって表される入力ワードと同じ長さを有する入力ワード（０００１）を表す。さらに、コード３によって表される入力ワード０００１の確率は、コード４、５および６によって表される入力ワードの確率と同じである。しかしながら、コード３は、異なる終端ビットａ（１）を有するコードを表す。したがって、コード３は、代替的にグループ（３，０），１と指定できる、異なるグループＸl,k,a＝Ｘ3,0,1に属する。
【００７５】
可変長ワードの集合は、たとえば、表１に示すように、辞書式順序を有する。ＶＦグループの各々では、１つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。グループが単一の固定長コードのみを含む場合、辞書式順序は一般に重要ではない。しかしながら、グループが２つ以上の固定長コードを含む場合、グループ中の固定長コードは、固定長コードによって表される可変長入力ワードの辞書式順序に従って順序付けられる。たとえば、グループ（３，１），０に関して、コード４は、ワード００１０を表し、コード５はワード０１００を表し、コード６はワード１０００を表す。ワード００１０は入力ワード集合の辞書式順序における１番目のワードであり、ワード０１００は２番目のワードであり、ワード１０００は３番目のワードである。ワードが表すそれらの辞書式順序に従ったグループ内のコードの構成は、本明細書では互換的にオフセットまたは基本コードと呼ぶことがある、辞書式に第１のコードの値と、グループ内の他のコードのインデックス位置とに基づいた、グループ中のコードの方向計算をサポートする。
【００７６】
上記のｌ，ｋ，ａ表記に一致して、グループの各々を、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さｌと、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の１の数ｋと、グループ中の固定長コードによって表される可変長ワードの各々の終端シンボルａとで表すことができる。終端シンボルは、０または１の１ビット値とすることができる。プレフィックスは、最後の終端シンボルより前のワードの部分を指し、可変長ワードの全長に応じて長さが変動する。さらに、上記で説明したように、それぞれのグループ中の辞書式順序付き第１の固定長コード、すなわち、オフセットまたは基本コードに対する固定長コードの辞書式順序に基づいて、グループの各々の中の固定長コードの各々をさらに表すことができる。
【００７７】
たとえば、グループ（３，１），０中のワード００１０に対応する辞書式順序付き第１の固定長コード４を仮定し、グループ内のコード６によって表されるワード１０００のインデックス位置、すなわち、可能なインデックス位置０、１および２のうちの２を仮定すれば、コード６のワードは、単に第１のワード００１０に４を乗算すること、または何らかの他の数学演算によって直接計算できる。この代数的性質は、第１の固定長、またはそれぞれのグループ中の「基本」コードに対するコードの辞書式順序内のコードのインデックス位置を仮定すれば、復号化演算の間のコードからワードの直接計算を可能にすることができる。
【００７８】
本開示による、数え上げコーディング技法を可能にするために、各グループ中の１つまたは複数のコードのプレフィックスの長さと、プレフィックス中の１の数と、終端シンボルとを、メモリ中のデータ構造に記憶することができる。本開示のいくつかの態様では、メモリは、メディアコーディングデバイスなど、コーディングデバイス内に常駐するか、あるいはそれに関連付けることができる。たとえば、メディアコーダが、ビデオデータ、画像データ、オーディオデータまたは音声データの少なくとも１つの符号化および復号化の少なくとも１つに、データ構造によって表される固定長コードを適用することができる。図１〜図３のビデオコーディング例に関して、データ構造は、ビデオエンコーダ２０、ビデオデコーダ２６またはその両方の内に常駐するか、またはそれに関連付けることができる。たとえば、データ構造は、それぞれ、図２および図３のメモリ４７またはメモリ５３に記憶できる。ビデオエンコーダ２０およびビデオデコーダ２６は、データ構造にアクセスして、それぞれ、固定長コードを用いて可変長ワードを符号化し、固定長コードを復号化して、可変長ワードを作り出すことができる。より詳細には、エントロピー符号化ユニット４６およびエントロピー復号化ユニット５２に関連付けられた１つまたは複数のプロセッサは、たとえば、それぞれのメモリ４７および５３中のそのようなデータ構造にアクセスして、それぞれ、エントロピー符号化および復号化を実行することができる。
【００７９】
図４および図５ならびに表１の例では、説明しやすいように、ＶＦコーディングツリーは、少数のコードと、相対的に短い長さの入力ワードとを含む。しかしながら、実際には、本開示の様々な態様に従って構成されるＶＦコーディングツリーは、数百または数千のコードおよび入力ワードを含むことができ、そのうちのいくつかはより長いコードおよび／またはワード長を含むことができる。したがって、ＶＦコードの集合を表すためのメモリ空間の消費が懸念事項であり得る。本開示で説明したように、ＶＦコーディングツリーの代数的性質を利用する数え上げ技法の適用により、メモリ効率の良いデータ構造の使用が可能になり、それによってメモリ空間を節約することができる。たとえば、データ構造は、バッハマンのＯ記法で、多くともメモリ中の空間量Ｏ（Ｌ2）を必要とすることが可能であり、ただし、Ｌは、無記憶ソースのための固定長コードの構成を定義する可変長固定長コーディングツリーの深さである。
【００８０】
バイナリ無記憶ソースのための構成プロシージャを実装するためのコンパクトなデータ構造およびＣコードの適用の一例について、以下で説明する。一般に、以下のＣコードは、データ構造によって定義されたＶＦコーディングツリーに一致するＶＦコードを構成するためのプロセスを略述する。上記で説明したように、データ構造は、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さｌと、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の１の数ｋと、グループ中の固定長コードによって表される可変長ワードの各々の終端シンボルａとを指定することができる。ｌ値およびａ値は、下記の例示的なコードにおいて、それぞれ「ｌ」および「ａ」と示される。
【００８１】
さらに、データ構造は、各グループ中の辞書式第１のワードを表すコードを示すオフセットを指定することができる。各グループ中の辞書式第１のワードは、グループ中の最小ワードとすることができる。しかしながら、他の実装形態では、各グループ中の辞書式第１のワードは、グループ中の最大ワードとすることができる。例示のために、オフセットとして辞書式最小ワードのコードを使用することについて、本開示で説明する。しかしながら、上記で説明したように、オフセットがグループ中の辞書式最大ワードのコードを指定するように、グループの順序を逆転することができる。したがって、この例示的な説明は、本開示で広く説明する技法を限定するものと見なすべきではない。
【００８２】
ＶＦコードの数え上げ構成
【数２８】
0005313362.tif 000030
【００８３】
上記のコードは、ビデオデータ、画像データ、音声データおよび／またはボイスデータを符号化するためのメディアコーディングデバイスなど、コーディングデバイス内に常駐するか、またはそれに関連付けられたプロセッサによって実行できる。代替または追加として、上記のコードは、ＶＦデータ構造と、ＶＦコーディングツリーを定義するコンテンツとを生成するために、そのようなコーディングデバイスとは無関係な１つまたは複数のプロセッサ中で実行できる。「プロセッサ」という用語は、概して、本開示で説明する様々な機能は単一の処理ユニットによって実行できるが、その必要はないという理解の下で、１つまたは複数のプロセッサを指す。したがって、「プロセッサ」という用語は、本明細書では、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、それらの任意の組合せ、または等価集積回路またはディスクリート論理回路の他の組合せなど、様々な形態のいずれかをとることができる単一のプロセッサまたは複数のプロセッサを指すために使用される。
【００８４】
ＶＦコードの数え上げ構成時に、得られたＶＦデータ構造およびそのコンテンツは、次いで、たとえば、ＶＦ符号化、ＶＦ復号化、またはその両方を実行するように構成された１つまたは複数のプロセッサがアクセスして使用するための、コーディングデバイスに関連付けられたメモリ中にロードされ得る。たとえば、ビデオエンコーダ２０およびビデオデコーダ２６内に常駐するか、またはそれに関連付けられたメモリは、それぞれ、符号化および復号化する際に使用するためのデータ構造および関連するコンテンツを記憶することができる。場合によっては、ビデオエンコーダ２０およびビデオデコーダ２６によって記憶されたデータ構造は、適用可能なとき、符号化または復号化を可能にするために十分な情報を伝達する同じデータ構造か、または異なるデータ構造とすることができる。
【００８５】
上記のコードでは、ＶＦコーディングツリーは、ツリー中に最大Ｌ個のレベルを有すると仮定される。ＶＦコーディングデータ構造中のプレフィックス長ｌは、ツリー中の対応するレベルを同時的に指定する。プレフィックス長ｌが最大長Ｌ以下である間に、プロセッサは、上記のコードを実行し、それぞれのワードのプレフィックス中に複数の０と１つの１とを有するワードについて考える。プロセッサは、倍精度値Ｐｒ＝ｐｏｗ（ｐ，ｋ）＊ｐｏｗ（１−ｐ，１−ｋ）でｋ個の１をもつ各適用可能なｌビットワードの確率を計算し、ここで、ｐは１の確率である。
【００８６】
確率Ｐｒが１／（Ｎ＊ｐ）よりも大きいかまたはそれに等しい場合、上記のコードを実行しているプロセッサは、ＶＦコーディングツリー内の左拡張部がリーフになるかどうかを確かめるために検査する。たとえば、上記のコードによって示されるように、確率が１／（Ｎ＊ｐ＊ｐ）未満である場合、プロセッサは、ｌ，ｋ，０のグループ、すなわち、プレフィックス長ｌ、プレフィックス中の１の数ｋ、および０の終端シンボルａをもつグループを登録する。ｌ、ｋおよびａの値は、プロセッサによって、それぞれ、ｖｆｃｇ［ｊ］．ｌ、ｖｆｃｇ［ｊ］．ｋおよびｖｆｃｇ［ｊ］．ａによって指定されたアレイに記録され、ここで、ｊはグループ番号またはインデックスであり、ｖｆｃｇはＶＦコードグループパラメータのアレイを表す。さらに、プロセッサは、特定のコードの番号であるオフセット値Ｍをｖｆｃｇ［ｊ］．ｏｆｆｓｅｔによって指定されたアレイに記録する。次いで、プロセッサはグループ番号ｊおよびコード番号Ｍを増分し、ここで、コード番号Ｍはｌおよびｋの二項関数である。
【００８７】
左拡張部がリーフにならない場合、すなわち、Ｐｒが１／（Ｎ＊ｐ＊ｐ）以上である場合、プロセッサは、右拡張部がリーフになるかどうかを判断する。例示的なコードでは、プロセッサは、Ｐｒが１／（Ｎ＊ｐ＊（１−ｐ））未満であるかどうかを判断する。そうであれば、プロセッサは、ｌ，ｋ，１のグループ、すなわち、プレフィックス長ｌ、プレフィックス中の１の数ｋ、および１の終端シンボルａをもつグループを登録する。次いで、プロセッサは、ｌ値、ｋ値およびａ値を、それぞれ、ｖｆｃｇ［ｊ］．ｌ、ｖｆｃｇ［ｊ］．ｋおよびｖｆｃｇ［ｊ］．ａによって指示されたアレイに記録する。プロセッサはまた、特定のコードの番号であるオフセット値Ｍをｖｆｃｇ［ｊ］．ｏｆｆｓｅｔによって指定されたアレイに記録する。次いで、プロセッサはグループ番号ｊおよびコード番号Ｍを増分し、ここで、コード番号Ｍはｌおよびｋの二項関数である。プロセスはツリー中の連続するレベル、および連続するグループにわたって続き、中間リーフのｖｃｆｇ［ｊ］値、およびＭのその時点での値に等しい、最終リーフのｖｃｆｇ［ｊ］．ｏｆｆｓｅｔ値を生じる。
【００８８】
次に、本開示に従って構成されたＶＦコーディングツリーを使用する例示的な符号化プロシージャについて説明する。一般に、符号化プロシージャは、辞書式順序を有する可変長ワードを得ることと、複数の固定長コードの１つを用いて可変長ワードの各々を符号化することとを含むことができる。ＶＦコーディングツリーによれば、固定長コードは、確率が同じであり、終端シンボルが同じである可変長ワードを表す１つまたは複数の固定長コードを各々含むグループに構成される。グループの各々の中の１つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。
【００８９】
可変長ワードを符号化することは、それぞれのグループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さと、それぞれのグループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の１の数と、それぞれのグループ中の固定長コードによって表される可変長ワードの各々の終端シンボルとに基づいて、固定長コードを選択することを備えることができる。ＶＦコーディングツリーを構成するグループのリストに関連付けられたプレフィックス長、１の数、および終端シンボルを、１つまたは複数のデータ構造に記憶することができる。データ構造は、符号化プロシージャ中に検索するための、図２のビデオエンコーダ２０などのメディアコーダとすることができる、符号化デバイス内に常駐するメモリ、またはその符号化デバイスによってアクセス可能な他のメモリに記憶できる。より詳細には、符号化デバイスは、図２のエントロピー符号化ユニット４６などのエントロピーコーディングデバイスに関連付けられた１つまたは複数のプロセッサとすることができる。
【００９０】
コーディングデバイスは、それぞれのグループ中の辞書式順序付き第１の固定長コードに対する固定長コードの辞書式順序に基づいてグループの各々の中の固定長コードの各々を選択することができる。辞書式順序付き第１の固定長コードは、グループのためのオフセットコードまたは基本コードと見なされ得る。オフセットコードまたは基本コードは、特定のグループ中のコードによって表されるワードのうち辞書式順序付き第１の可変長ワードを表す。オフセットコードまたは基本コードにより、コードグループの第１のインデックス位置にある基本コードに対するコードグループ中のコードのインデックス位置に基づいたコードの計算が可能になる。
【００９１】
一般に、可変長ワードのプレフィックス長と、プレフィックス中の１の数と、終端シンボルとは、それらの特性に関連付けられた固定長コードのグループを選択するために使用できる。グループ中の第１のコード、オフセットコード、または基本コードに関連付けられた可変長ワードの辞書式順序付き位置に対する可変長ワードの辞書式順序付き位置を使用して、コーディングデバイスは、コードのインデックス位置を選択することができる。インデックス位置を使用して、コーディングデバイスは、たとえば、コードのインデックス位置と基本コードのインデックス位置との間の差を基本コードに加算することによって、適切なコードを計算することができる。その結果、可変長入力ワードの正しい固定長コードになる。
【００９２】
上述のように、グループのプレフィックス長と、プレフィックス中の１の数と、終端シンボルとは、メモリに記憶されたデータ構造から記憶できる。特に、数え上げ構成技法の結果として、データ構造によって定義されたグループリストが、バッハマンのＯ記法で多くともメモリ中の空間量Ｏ（Ｌ2）を必要とすることが可能であり、ただし、Ｌは、無記憶ソースのための固定長コードの構成を定義する可変長固定長コーディングツリーの深さである。符号化プロシージャは、一般に、様々なデータに適用可能であるが、いくつかの適用例では、可変長ワードは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの少なくとも１つを表すことができ、符号化プロシージャは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの１つを符号化するために可変長ワードを符号化することをさらに備えることができる。
【００９３】
以下に、本開示で説明するように構成されたデータ構造を使用してＶＦコードを符号化および復号化するためのプロシージャを実装するためのＣコードの例を記載する。簡単のために、符号化および復号化プロシージャについて、一致するグループを識別するための単純な線形探索技法を使用して説明する。符号化および復号化の各場合における探索アイテムの数は、バッハマンの記法で、多くともＯ（Ｌ2）であり、ただし、ＬはＶＦコーディングツリーの深さを表す。
【００９４】
特に復号化プロシージャに適用するのが容易であるバイナリサーチの使用により、従来のＶＦコーディングツリーをパースする（parse）ために通常必要とされるＯ（Ｌ）ステップよりもはるかに速いＯ（ｌｏｇ  Ｌ）ステップになる。グループＸl,k,aに属するワードｗのコードを計算するために、符号化プロシージャは、ｋ個の１をもつすべてのｌビット長ワードの集合中のｗのｌビットプレフィックスの辞書式インデックスを計算するように構成できる。このプロセスは、インデックス（ｌ，ｋ，ｗ）として、以下の符号化プロシージャのＣコード中に示される。同様に、復号化プロシージャは、ｋ個の１をもつｌビットシーケンスの辞書式順序付き集合からｉ番目のワードを生成するワード（ｌ，ｋ，ｉ）として以下の復号化プロシージャのＣコード中に示される、逆プロセスを使用するように構成できる。
【００９５】
ＶＦ符号化プロシージャのための例示的なＣコードを以下で略述する。
【００９６】
コーディングツリー中のグループのリストを使用したＶＦコードの符号化
【数２９】
0005313362.tif 000031
【００９７】
上記のＣコードでは、ビデオエンコーダ２０または別のメディアエンコーダなど、エンコーダに関連付けられたプロセッサは、符号化すべき入力ワードｗを受信し、ただし、ｉ＝ｇｅｔ＿ｂｉｔ（ｉｎ）は入力ワードｗからのビットの読取りを表す。プレフィックスの長さｌが、現在のグループに指定されたプレフィックス長ｖｆｃｇ［ｊ］．ｌに等しい場合、プレフィックス中の１の数ｋは、現在のグループに指定されたｖｆｃｇ［ｊ］．ｋに等しく、ｉは、現在のグループに指定された終端ビットｖｆｃｇ［ｊ］．ａに等しく、その場合、プロセスは、入力ワードのための一致するコードを発見する。この場合、プロセッサは「ｆｏｕｎｄ」に進み、ここで、ｉ＝ｉｎｄｅｘ（ｌ，ｋ，ｗ）に従ってプレフィックスの辞書式インデックスを判断し、入力ワードのための適切なＶＦコードを計算する。
【００９８】
たとえば、プロセッサは、グループ内のプレフィックスの辞書式インデックスに基づいてコードを計算することができる。この場合、コードは、辞書式第１の位置ｖｆｃｇ［ｊ］．ｏｆｆｓｅｔ＋インデックス値ｉにあるコードに対応する。したがって、図５を参照すると、現在のグループが（３，１），１グループであり、３つの可能なインデックス位置０、１および２のうちコードの辞書式インデックスが２である場合、コードはオフセット（基本）コード７＋インデックス値１であり、コード８に等しい。同様に、インデックス値が２である場合、コードはオフセットまたは基本コード７＋２であり、９に等しい。
【００９９】
長さｌがプレフィックス長ｖｆｃｇ［ｊ］．ｌに一致しない場合、プロセッサは長さ１（１＋＋）を増分する。プロセッサはまた、ｋの値をビットｉ（ｋ＋＝ｉ）と合計して、ビットＩをプレフィックス（ｗ＝ｗ＊２＋ｉ）に加算する。その結果、ｌ番目のビットがプレフィックスに加算される。次いで、プロセッサは、次のレベルのグループにおいて一致があるかどうかを判断するために、探索プロセスを繰り返す。特に、プロセッサは、この場合も、プレフィックスの更新された長さｌが、現在のグループに指定されたプレフィックス長ｖｆｃｇ［ｊ］．ｌに等しいかどうか、プレフィックス中の１の更新された数ｋが、現在のグループに指定されたｖｆｃｇ［ｊ］．ｋに等しいかどうか、更新された終端ビットｉが、現在のグループに指定された終端ビットｖｆｃｇ［ｊ］．ａに等しいかどうかを判断する。そうであれば、プロセスは、入力ワードのための一致するコードを発見し、「ｆｏｕｎｄ」に関して上記で説明したようにコードを生成する。
【０１００】
プロセッサは、関連する固定長コードを生成するために、各可変長入力ワードに対して同じ一般的プロセスを適用することができる。ＶＦコードの数え上げ構成から生じるデータ構造は、全体的なメモリ要件を低減しながら入力ワードの符号化を可能にすることができる。特に、対応するプレフィックス長と、プレフィックス０の数と、終端ビットとをもつグループにコードを構成することは、Ｏ（２L）ではなくＯ（Ｌ2）程度のメモリ空間を用いたコードの比較的迅速な生成を可能にする。
【０１０１】
次に、本開示に従って構成されたＶＦコーディングツリーを使用する例示的な復号化プロシージャについて説明する。一般に、符号化プロシージャは、固定長コードを得ることと、辞書式順序を有する可変長ワードを作り出すために固定長コードを復号化することとを備えることができる。本開示で説明する数え上げ構成技法によれば、固定長コードをグループに構成することができる。グループの各々は、確率が同じであり、終端シンボルが同じである可変長ワードを表す１つまたは複数の固定長コードを含む。さらに、グループの各々の中の１つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。
【０１０２】
図３のビデオデコーダ２６などのメディアデコーダとすることができる復号化デバイスは、ＶＦコーディングツリーの様々な属性を表すデータ構造を使用して固定長コードの各々を復号化することができる。より詳細には、コーディングデバイスは、図２のエントロピー符号化ユニット４６などのエントロピー符号化デバイスとすることができる。復号化デバイスは、それぞれの固定長コードを含むグループのうちの１つを、識別されるグループ中の辞書式順序付き第１のコードとのそれぞれのコードの比較に基づいて、識別することができる。そのグループ中の辞書式順序付き第１のコードは、オフセットコードまたは基本コードと見なされ得る。復号化デバイスは、識別されたグループ内の（復号化すべき）それぞれのコードの辞書式インデックスを判断することができる。
【０１０３】
たとえば、辞書式インデックスは、それぞれのグループ中のそれぞれのコードと辞書式順序付き第１の基本コードとの間の差に基づいて判断できる。辞書式順序付き第１のコードは、グループ中の固定長コードによって表される可変長ワードの辞書式順序のうち第１の可変長ワードを表し、グループの基本コードと見なされ得る。次いで、復号化デバイスは、識別されたグループ内のそれぞれのコードの辞書式インデックスに基づいて、可変長ワードの各々を生成することができる。たとえば、復号化デバイスは、辞書式インデックスに基づいてそれぞれのコードによって表される可変長ワードのプレフィックスを判断することによって復号化される固定長コードの可変長ワードを生成し、識別されたグループの終端シンボルを判断し、終端シンボルをプレフィックスに付加して可変長ワードを形成することができる。
【０１０４】
再び、復号化を可能にするために、グループの各々は、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さと、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の１の数ｋと、グループ中の固定長コードによって表される可変長ワードの各々の終端シンボルａとによって定義できる。これらの属性は、コーディングデバイス内に常駐するか、またはそれに関連付けられたメモリ中のデータ構造に記憶できる。
【０１０５】
上記で説明したように、データ構造は、バッハマンのＯ記法で、多くともメモリ中の空間量Ｏ（Ｌ2）を必要とすることができ、ただし、Ｌは、無記憶ソースのための固定長コードの構成を定義する可変長固定長コーディングツリーの深さである。符号化プロシージャは、一般に、様々なデータに適用可能であるが、いくつかの適用例では、復号化プロシージャによって生成された可変長ワードは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの少なくとも１つを表すことができる。したがって、復号化プロシージャは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの１つを表す可変長ワードを作り出すために固定長コードを復号化することをさらに備えることができる。
【０１０６】
ＶＦ復号化プロシージャのための例示的なＣコードを以下で略述する。
【０１０７】
コーディングツリー中のグループのリストを使用したＶＦコードの復号化
【数３０】
0005313362.tif 000032
【０１０８】
上記のＣコードでは、ビデオデコーダ２６または別のメディアデコーダなど、デコーダに関連付けられたプロセッサは、復号化すべき固定長コードを受信する。プロセッサは、本開示で説明するように構成されたデータ構造を使用して、ＶＦコーディングツリー内のコードを含んでいるグループを探索する。グループインデックスｊを使用して、ＶＦコーディングツリー中のグループのリストについて、コードがオフセットコード、すなわち、次の（ｉ＋１）グループ中の辞書式第１のコードｖｆｃｇ［ｊ＋１］．ｏｆｆｓｅｔよりも小さいことが発見されるまで、探索は続く。
【０１０９】
適切なグループが発見されるまで、プロセッサはグループインデックスｊを増分する。復号化すべき現在のコードが、（ｉ＋１）番目のグループのオフセットコードｖｆｃｇ［ｊ＋１］．ｏｆｆｓｅｔよりも小さいことが発見された場合、プロセッサは、コードがｊ番目のグループ、すなわち、（ｉ＋１）番目のグループの直前に来るグループに属すると判断する。一例として、図５のＶＦコーディングツリーを参照すると、コードがコード８である場合、プロセッサはコード８を各（ｉ＋１）番目のグループのオフセットと比較しながら、ｊインデックスを増分し続ける。ｊインデックスが、基本コード１０を有する（４，０），１グループを示すまで、コード８は（ｉ＋１）番目のグループのオフセットコードよりも小さくならない。この時点で、プロセッサは、コード８がグループ（３，１），１である直前のｊ番目のグループ中にあると判断する。
【０１１０】
次いで、プロセッサは、復号化されているコードからｊ番目のグループのためのオフセットコードｖｆｃｇ［ｊ］．ｏｆｆｓｅｔを減算することによって、コードの辞書式インデックスを判断する。グループ（３，１），１の場合、オフセット。復号化すべきコードがコード８である場合、基本コード７の可能なインデックス０、コード８の可能なインデックス１、およびコード９の可能なインデックス２から、グループ（３，１），１内のコード８のインデックスｉは８−７＝１である。インデックスｉを使用して、プロセッサは、（ｌ，ｋ）集合中のｉ番目のワードｗを生成し、ただし、ｗ＝ｗｏｒｄ（ｖｆｃｇ［ｊ］．ｌ，ｖｆｃｇ［ｊ］．ｋ，ｉ）である。次いで、プロセッサは、ワードｗに２を乗算して左に１桁シフトさせ、終端ビットｖｆｃｇ［ｊ］．ａを加算することによって、終端ビットを付加する。次いで、固定長コードから作り出された可変長ワードは、たとえば、コマンドｐｕｔ  ｂｉｔｓ（ｗ，ｖｆｃｇ［ｊ］．ｌ＋１，ｏｕｔ）によって出力される。
【０１１１】
前述のように、適度に短い、たとえば、１２未満または１２にほぼ等しいワードの場合、それらの辞書式インデックスの計算（またはそれらのインデックスを使用したワードの合成）は、せいぜい１回のルックアップとすることができる。より長いワードの場合、以下のよく知られている組合せ式を使用することが可能である。
【数３１】
0005313362.tif 000033
上式で、ｗjは、ワードｗの個々のビットを表し、すべてのｋ＞１について、
【数３２】
0005313362.tif 000034
であると仮定する。組合せ式（１５）は、たとえば、Ｖ．Ｉ．Ｍｕｄｒｏｖ、「An algorithm for enumeration of combinations」、Ｖｙｃ．  Ｍａｔｈ．  ａｎｄ  Ｍａｔｈ．  Ｐｈｙｓ．、５（４）（１９６５）７７６〜７７８（ロシア）、Ｖ．Ｆ．Ｂａｂｋｉｎ、「A method of universal coding with non-exponent labour consumption」、Ｐｒｏｂｌ．Ｉｎｆ．Ｔｒａｎｓ．、１（４）（１９７１）１３〜２１（ロシア）、Ｊ．Ｐ．Ｍ．Ｓｃｈａｌｋｗｉｊｋ、「An Algorithm For Source Coding」、ＩＥＥＥ  Ｔｒａｎｓ．Ｉｎｆ．Ｔｈｅｏｒｙ、１８（３）（１９７２）、３９５〜３９９、Ｔ．Ｍ．Ｃｏｖｅｒ、「Enumerative Sources Encoding」、ＩＥＥＥ  Ｔｒａｎｓ．Ｉｎｆ．Ｔｈｅｏｒｙ、１９（１）（１９７３）７３〜７７、Ｔｊ．Ｊ．Ｔｊａｌｋｅｎｓ、「The Complexity of Minimum Redundancy Coding」、２１−ｔｈ  Ｓｙｍｐ．Ｉｎｆ．Ｔｈｅｏｒｙ  ｉｎ  ｔｈｅ  Ｂｅｎｅｌｕｘ（２０００年５月）の会報２４７〜２５４、およびＴ．Ｔｊａｌｋｅｎｓ、「Implementation cost of the Huffman-Shannon-Fano code」、Ｄａｔａ  Ｃｏｍｐｒｅｓｓｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ（ＤＣＣ’０５）（Ｓｎｏｗｂｉｒｄ、Ｕｔａｈ、２００５年３月２９〜３１日）会報１２３〜１３２で説明されている。この組合せ式を実装するために、手法は、パスカルの三角形のレベル１までのすべての二項係数を事前計算するか、または以下の単純な識別情報を使用して動的に二項係数を計算するかのいずれかになろう。
【数３３】
0005313362.tif 000035
事前計算された係数に基づく実装形態は、一般に
【数３４】
0005313362.tif 000036
ワードのメモリおよびＯ（ｌ）加算を必要とする。係数の動的計算は、一般にＯ（ｌ）加算、乗算および除算を必要とする。しかしながら、プロセス全体は、通常ほんのいくつかのレジスタを必要とする。
【０１１２】
図６は、ＶＦコードのメモリ効率の良い構造のための方法を示すフローチャート図である。図６に示す方法は、本開示で説明するＶＦコード構成技法の一例である。本方法は、図２および図３に示すエントロピー符号化ユニット４６およびエントロピー復号化ユニット５２が使用するＶＦコードを構成するために、エンコーダ、デコーダに関連付けられた、または別のデバイスに関連付けられた１つまたは複数のプロセッサによって実装でき、限定はしないが、ビデオ、画像、音声およびオーディオデータを含む、様々なデータのいずれかの圧縮およびコーディングをサポートすることができる。本開示全体にわたって、プロセッサという用語は、１つまたは複数のプロセッサ、および他で詳細に説明するプロセッサの様々なタイプのいずれかを指すことができる。いずれの場合も、そのようなプロセッサを、たとえば、ＶＦコーディングで有用なコード構造属性を定義するデータ構造を準備するために、たとえば、エンコーダもしくはデコーダ内に、または汎用コンピュータシステム内に設けることができる。
【０１１３】
図６に示すように、プロセッサは、辞書式順序を有する可変長ワードの集合を得て、そのような可変長ワードを表す固定長コードの集合を生成する（８２）。ワードは、それぞれのプレフィックス長、プレフィックス中の１の数、終端シンボル、および確率を有する。プロセッサは、同じ確率と同じ終端シンボルとをもつ可変長ワードを表す固定長コードを含んでいるグループに、固定長コードを構成する（８４）。さらに、プロセッサは、グループの各々の中の固定長コードを、それらが表す可変長ワードの辞書式順序で配置する（８６）。
【０１１４】
プロセッサは、各グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス長を指定する（８８）。さらに、プロセッサは、各グループ中の固定長コードによって表される可変長ワードのプレフィックス中の１の数を指定する（９０）。プロセッサはまた、各グループ中の固定長コードによって表される可変長ワードに関連付けられた終端シンボルを指定する（９２）。プロセッサは、データ構造におけるグループごとに、得られたプレフィックス長と、１の数と、終端シンボルとを記憶する（９４）。データ構造は、それぞれ、符号化および復号化プロシージャを可能にするために、ＶＦコーディングツリーを表すために、メモリに記憶され、符号化デバイスまたは復号化デバイスに関連付けられたプロセッサによって使用される。
【０１１５】
図７は、図６の方法に従って構成されたＶＦコードを使用してシンボルを符号化する形態のＶＦコーディングのための方法を示すフローチャート図である。図７に示す方法は、本開示で説明するＶＦ符号化技法の一例である。図７の方法は、メディア符号化デバイスなど、符号化デバイスに関連付けられたプロセッサ、すなわち、１つまたは複数のプロセッサによって実装できる。メディア符号化デバイスの例には、ビデオエンコーダ２０、またはビデオ、画像、音声および／またはボイスデータなどの様々なデータを符号化するのに有用な他のエンコーダがある。
【０１１６】
図７の例で示されるように、符号化デバイスは固定長コードで符号化される可変長ワードを得る（９６）。可変長ワードは、特定の辞書式順序を有するワードの入力集合の部分を形成することができる。さらに、ワードは、関連するプレフィックス長と、プレフィックス中の１の数と、終端シンボルと、たとえば、表１の例に示した確率とを有することができる。可変長ワードを符号化するために、符号化デバイスは、本開示で説明するように、たとえば、ＶＦコーディングツリー内の固定長コードグループに関してコード構造を定義するデータ構造にアクセスする（９８）。
【０１１７】
データ構造を使用して、符号化デバイスは、コーディングツリー中のコードのグループのうちの１つを選択することができる。たとえば、符号化デバイスは、符号化すべき可変長ワードのプレフィックス長と、プレフィックス中の１の数と、終端シンボルとに基づいて、グループのうちの１つを選択する（１００）。次いで、符号化デバイスは、選択されたグループ中の固定長コードのうちの１つを選択することができる。たとえば、符号化デバイスは、選択されたコードグループ内の辞書式順序に基づいて、選択されたグループ中の固定長コードのうちの１つを選択する（１０２）。
【０１１８】
一例として、コードは、それらが表すワードの辞書式順序で配置できる。したがって、グループ中の適切なコードの位置は、選択されたグループ中のコードによって表される他の可変長ワードに対する、符号化すべき可変長ワードのプレフィックスの辞書式位置、または「インデックス」によって判断できる。この辞書式インデックスを使用して、符号化デバイスは、選択された固定長コードを使用して、可変長ワードを符号化する（１０４）。符号化デバイスは、グループのための辞書式順序付き第１のコード、すなわち、基本コードを判断し、次いで、基本コードに、基本コードによって表されるワードのインデックスと符号化すべきワードのインデックスとの間の差、または基本ワードインデックスが０である場合、単にそのインデックスを加算することができる。
【０１１９】
この例では、符号化デバイスは、基本コードと、符号化すべきワードの辞書式インデックスとの和としてワードを符号化する。前述のように、図５を参照すると、現在のグループが（３，１），１グループであり、３つの可能なインデックス位置０、１および２のうちコードの辞書式インデックスが２である場合、コードはオフセットコード７＋インデックス値１であり、コード８に等しい。同様に、インデックス値が２である場合、コードはオフセットコード７＋２であり、９に等しい。各場合において、メモリ効率の良いデータ構造に記憶された属性は、ＶＦコーディングツリーに従って固定長コードへの可変長ワードの符号化を可能にする。
【０１２０】
図８は、図６の方法に従って構成されたＶＦコードを復号化するための方法の形態のＶＦコーディングを示すフローチャート図である。図８に示す方法は、本開示で説明するＶＦ復号化技法の一例である。図８の方法は、メディア復号化デバイスなど、復号化デバイスに関連付けられたプロセッサ、すなわち、１つまたは複数のプロセッサによって実装できる。メディア復号化デバイスの例には、ビデオデコーダ２６、またはビデオ、画像、音声および／またはボイスデータなどの様々なデータを復号化するのに有用な他のデコーダがある。
【０１２１】
図８に示すように、復号化デバイスは、復号化すべき固定長コードを得て（１０６）、そのコードによって表される対応する可変長ワードを作り出す。復号化デバイスは、ＶＦコーディングツリーに従ってコードグループを定義するデータ構造にアクセスする（１０８）。データ構造は、グループの各々の中の固定長コードによって表される可変長ワードのプレフィックス長と、プレフィックス中の１の数と、終端シンボルと、確率とを指定することができる。データ構造を使用して、固定長コードを復号化するために、復号化デバイスは、ツリー中のグループの基本コードとの固定長コードの比較に基づいてグループを選択する（１１０）。
【０１２２】
たとえば、復号化デバイスは、ツリー中のｊグループに関連付けられた基本コードによってトップダウン型探索を行うことができる。復号化デバイスが復号化すべきコードよりも大きい基本コードを識別すると、探索は終了する。識別された基本コードに関連付けられたグループは（ｊ＋１）番目のグループであり、その場合、復号化すべきコードはｊ番目のグループに属する。一例として、図５を参照すると、復号化すべき固定長コードがコード９である場合、探索は第１のグループで開始するグループの各々について基本コードを検査する。探索がグループ（３，０），１に到達すると、コード１０はコード９よりも大きく、したがって、グループ中のコードによって表されるワードの辞書式順序に従ったグループの順序を仮定すれば、コード９は、グループ（３，１），１である直前のグループに属すると判断する。
【０１２３】
グループを選択すると、復号化デバイスは、グループの基本コードとのコードの比較によって、選択されたグループ内のコードの辞書式インデックスを判断する（１１２）。グループ（３，１），１の基本コードが７であり、復号化すべきコードが９である場合、コード９の辞書式インデックスは２、すなわち、７と９との間の差である。コードの辞書式インデックスを使用して、復号化デバイスは対応する可変長ワードを生成する。たとえば、復号化デバイスは、コードの辞書式インデックスに基づいた可変長ワードと、グループの基本コードによって表される可変長ワードとを生成する（１１４）。
【０１２４】
したがって、図５を参照すると、基本コード７が００１のプレフィックスを有する可変長ワード００１１を表し、コード８の辞書式インデックスが１である場合、復号化デバイスは、１のインデックスをプレフィックス００１に加算して、０１０を作り出すことができる。次いで、復号化デバイスは、グループの終端ビット（１）を付加して、固定長コード８の０１０１の可変長ワードを作り出すことができる。次いで、復号化デバイスは、生成された可変長ワードを使用して、固定長コードを復号化する（１１６）。言い換えれば、復号化デバイスは、固定長コード、たとえば、この例ではコード８の復号化された出力として、生成された可変長ワード、たとえば、この例では０１０１を出力する。
【０１２５】
コード構造は、本開示で説明するように、メモリまたはデータ記憶媒体を含む様々なコンピュータ可読媒体のいずれかに記憶されたデータ構造によって定義できる。たとえば、コンピュータ可読媒体は、辞書式順序を有する可変長ワードを表す固定長コードの集合を表す、データ構造を備えることができる。固定長コードはグループに構成され、ただし、グループの各々は、確率が同じであり、終端シンボルが同じである可変長ワードを表す１つまたは複数の固定長コードを含む。さらに、グループの各々の中の１つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。
【０１２６】
本開示によれば、ＶＦコードのパーシングのための技法が提供される。以下で説明される例は、図５のＶＦコーディングツリーのＶＦコードを使用する。説明されるパーシング技法とともに他のＶＦコードが使用できることを当業者なら認識されよう。ＶＦコードは、複数の固定長コード（たとえば、１，２，５，７，８）からなる圧縮されたビットストリーム中の任意の固定長コードにアクセスすること（および直接復号化すること）を可能にする。圧縮されたビットストリームは、複数の可変長ワード（たとえば、０１１，１０１，０１００，００１１，０１０１）からなる圧縮されていないビットストリームの符号化表現とすることができる。しかしながら、圧縮されていないビットストリーム中の作り出された可変長ワードに先行するビットがわからないので、圧縮されていないビットストリーム中の作り出された可変長ワードの位置はわからない。たとえば、例示的なシーケンス中の固定長コード２を復号化して、ワード１０１を作り出すことができる。しかしながら、例示的なシーケンス中の２の前に来る固定長コード１を復号化することなしに、圧縮されていないビットストリーム中のどの位置にワード１０１が属するかはわからない。ワード１０１の位置を判断するための１つの方法は、固定長コード１を復号化して、ワード０１１を作り出すことであろう。したがって、ワード０１１の長さが３であるので、ワード１０１の位置は圧縮されていないビットストリームの４番目のビットにおいて開始すると判断される。バッハマンのＯ記法で、ＶＦコードを復号化するための複雑度はＯ（Ｄ）であり、ただし、Ｄは、予想される復号化フレーズ長である。
【０１２７】
しかしながら、圧縮されていないビットストリーム中の可変長ワードの位置を判断するためには、復号化されるために任意に選択された固定長コードの前に来る固定長コードに対応するワードの長さを知るだけでよい。圧縮されたストリームをパーシングする提供される技法は、固定長コードが復号化されることを必要とせず、圧縮されたストリーム中の固定長コードの各々に関連付けられた可変長ワードの長さを与える。いくつかの実施形態では、説明するパーシング技法は、標準探索アルゴリズムとともに使用できる。したがって、パーシング技法の複雑度は、たとえば、補間探索アルゴリズムが使用されるときは約Ｏ（ｌｏｇ（ｌｏｇ（Ｄ）））、またはバイナリ探索アルゴリズムが使用されるときはＯ（ｌｏｇ（Ｄ））とすることができる。
【０１２８】
ＶＦパーシングプロシージャのための例示的な擬似コードを以下で略述する。例示的なプロシージャは、上記で説明した基本コードを選択し、基本コードに対応するコードインデックスを作り出す。インデックスは、アレイｌｅｖｅｌ＿ｏｆｆｓｅｔ［］に記憶される。
【０１２９】
レベルごとの基本コードのリストを使用したＶＦコードのパーシング
【数３５】
0005313362.tif 000037
【０１３０】
各レベルの基本コードのリストを使用してＶＦコードをパーシングするための例示的なアルゴリズムを以下に示す。この擬似コードは、ＶＦコードに対応するワードの長さを識別するために、基本コードのアレイにおける単純な連続探索を使用する。探索は連続的であるので、この例示的なアルゴリズムの複雑度は線形Ｏ（ｌ）であり、ここで、ｌは符号化シーケンスの長さである。
【数３６】
0005313362.tif 000038
【０１３１】
提案されたデータ構造はまた、ＶＦコードのより高速なパーシング技法をサポートする。ｌｅｖｅｌ＿ｏｆｆｓｅｔ［］は本質的にコード値の順序付きアレイであるので、たとえば、アレイの二分探索（dichotomic search）を実行することができる。二分探索を利用する例示的な高速パーシングルーチンのための擬似コードを以下に示す。
【数３７】
0005313362.tif 000039
【０１３２】
二分探索は、Ｏ（ｌ）演算からわずかＯ（ｌｏｇ  ｌ）演算にパーシングの複雑度を低減し、ここで、ｌは符号化シーケンスの長さである。そのようなアルゴリズムは、任意の実現可能な完全復号化プロセスよりもはるかに速い劣線形時間でＶＦコードをパースすることができる。
【０１３３】
ＶＦコードのパーシングの速度のさらなる改善が、上述のデータ構造によって十分にサポートされることを認識されたい。たとえば、補間探索アルゴリズムは、ワード長の位置特定のために使用できる。そのようなアルゴリズムの複雑度は、ほぼＯ（ｌｏｇ  ｌｏｇ  ｌ）である。そのような探索アルゴリズムの例は、Ｇ．Ｈ．Ｇｏｎｎｅｔ、「Handbook of algorithms and data structures」、Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ、１９８４、３５〜３７ページなど、アルゴリズムのテキストブックに記載されている。
【０１３４】
パーシング技法の一実施形態を、図５のＶＦコードツリーに関して説明する。本技法は、所与のＶＦコードツリーのための基本コードワードの集合を生成することを必要とする。基本コードワードは、所与のＶＦコードにおいて使用される固定長コードの集合の部分集合である。単一の基本コードワードは、少なくとも１つの外部ノードを含んでいるＶＦコードツリーのレベルごとに選択される。いくつかの実施形態では、ＶＦコードツリーの特定のレベルにある第１の辞書式順序付き固定長コードが、そのレベルの基本コードワードである。たとえば、図５のＶＦコードツリーの基本コードワードは、｛０、１、３、１０、１１、１２、１３、１４、および１５｝である。他の実施形態では、基本コードワードは、ＶＦコードツリーの特定のレベルにある第１の辞書式順序付きグループとすることができる。たとえば、図５のＶＦコードツリーの基本コードワードは、｛（１，１），１、（２，１），１、（３，０），１、（４，０），１、（５，０），１、（６，０），１、（７，０），１、（８，０），１、および（９，０），０｝である。次いで、基本コードワードは、辞書式順序でリスト中に配置される。リストは、リンクされたリスト、アレイ、または他の好適なデータ構造としてメモリ５３に記憶できる。
【０１３５】
いくつかの実施形態では、基本コードワードを、復号化基本コードワードに対応するワードの長さに関連付けることができる。所与の固定長コードに関連付けられた可変長ワードの長さは、ＶＦツリー上で固定長コードが位置を特定されたレベルである。したがって、所与の基本コードワードに関連付けられた可変長ワードの長さは、ＶＦツリー上の基本コードワードと同じレベルにある各固定長コードに関連付けられた各可変長ワードの長さに等しい。この性質を利用して、固定長コードに関連付けられた可変長ワードの長さは、固定長コードと同じ、ＶＦツリーのレベル上の基本コードワードに関連付けられた可変長ワードの長さを判断することによって判断できる。
【０１３６】
本開示の復号化デバイスの一実施形態では、復号化デバイスは、所与のＶＦコードツリーのレベルに関連付けられた基本コードワードのリストを通して探索を行うことができる。復号化デバイスがパースすべきコードよりも大きい基本コードワードを識別すると探索は終了し、ただし識別された基本コードワードはリスト上の位置ｘにある。次いで、復号化デバイスは、リスト上の位置ｘ−１にある、識別された基本コードワードよりも小さい最大基本コードワードを見ることができる。この基本コードワードは、パースすべきコードに関連付けられた可変長ワードと同じ長さの可変長ワードに関連付けられている。たとえば、図５のＶＦツリーの基本コードワードのリストは、（０、１、３、１０、１１、１２、１３、１４、１５）とすることができる。９が復号化すべきコードである場合、基本コードワード１０が発見されるまで復号化デバイスは探索する。その場合、基本コードワード３は、１０よりも小さい最大基本コードワードである。基本コードワード３はサイズ４の可変長ワードに関連付けられており、したがって、コード９に関連付けられた可変長ワードの長さも４である。
【０１３７】
各固定長コードに関連付けられた可変長ワードの長さを記憶する必要がないことにより、メモリ効率が得られる。むしろ、基本コードワードごとに関連情報のみを記憶する必要がある。さらに、固定長コードをそれぞれ復号化することとは対照的に、固定長コードをパーシングすることによって位置を判断することができるので、圧縮されていないビットストリーム中のワードの位置を判断する際の効率が得られる。
【０１３８】
いくつかの実施形態では、圧縮されたビットストリームは複数のセグメントに分割される。各セグメントは、１つまたは複数の固定長コードを含むことができる。いくつかの実施形態では、各セグメントは同数の固定長コードを含む。他の実施形態では、異なるセグメントは、異なる数の固定長コードを含むことができる。いくつかのそのような実施形態では、各セグメントは、選択されたセグメントの前に来る圧縮されたビットストリームの部分に関連付けられた圧縮されていないビットストリームの長さに関連付けられる。たとえば、圧縮されたビットストリーム２，３，４，５，２，３，４，２，１は、３つのセグメント｛（２，３，４）；（５，２，３）；（４，２，１）｝に分割できる。第１のセグメント（２，３，４）の前に圧縮されたビットストリームの部分はないので、第１のセグメントは０に関連付けられる。第２のセグメント（５，２，３）は、１１に関連付けられる。これは、第２のセグメントの前の圧縮されたビットストリームの部分が（２，３，４）であり、その復号化結果が圧縮されていないビットストリーム１０１０００１００１１になり、１１の長さを有するからである。そのような実施形態では、ランダムに選択された固定長コードに対応するワードの位置を発見するために、選択されたコードの前に来る各固定長コードをパースする必要はなく、選択されたコードと同じセグメント中の選択されたコードの前に来る固定長コードをのみパースする必要がある。これは、セグメントの長さを記憶するために余分のメモリを必要とするが、パースされる必要がある固定長コードの数を低減する。
【０１３９】
図９は、図６の方法に従って構成されたＶＦコードを復号化するための別の方法の形態のＶＦコーディングを示すフローチャート図である。プロセス９００は、圧縮されたビットストリームからランダムに選択された固定長コードが復号化され、対応する圧縮されていないビットストリーム中に配置される方法の一実施形態である。いくつかの実施形態では、プロセス９００は、エントロピー復号化ユニット５２によって実行できる。ステップ９０２において、圧縮されたビットストリームから固定長コードを選択する。たとえば、選択された固定長コードは、ビデオストリーム中のビデオのランダムフレームを表すデータに対応することができる。次のステップ９０４において、選択された固定長コードがある圧縮されたビットストリームのセグメントを判断する。さらなるステップ９０６において、選択された固定長コードの前に来る圧縮されたビットストリームの部分に対応する圧縮されていないビットストリームの長さを判断する。上記で説明したように、いくつかの実施形態では、この長さ値はメモリ５３に記憶され、ステップ９０６は、メモリ５３から長さ値を取り出すことを備える。ステップ９０８に進んで、そのセグメントについて、選択された固定長コードの前に来る各固定長コードに対応する各ワードの長さを判断する。一実施形態では、長さは、図１０に関して以下で説明するプロセス１０００によって判断される。次のステップ９１０において、固定長コードを復号化して、対応するワードを生成する。いくつかの実施形態では、復号化は、図８に関して説明した方法によって実行される。さらに、ステップ９１２において、圧縮されていないビットストリーム中のワードの位置を判断する。位置は、ステップ９０６において発見された長さ値を、ステップ９０８において発見された長さ値の各々と加算することによって判断される。圧縮されていないビットストリーム中のワードの開始位置は、合計された値＋１に等しい。いくつかの実施形態では、ワードの位置は、ビデオのストリーム中のビデオのフレームの位置とすることができる。
【０１４０】
いくつかの実施形態では、圧縮されたビットストリームはセグメントに分割されず、ステップ９０４〜９０６はプロセス９００から省略されることに留意されたい。
【０１４１】
図１０は、図６の方法に従って構成されたＶＦコードに対応するワードの長さを判断するための方法の形態のＶＦパーシングを示すプロセス１０００のフローチャート図である。いくつかの実施形態では、プロセス１０００は、エントロピー復号化ユニット５２によって実行される。ステップ１００２において、固定長コードを得る。次のステップ１００４において、上記で説明した基本コードワードを記憶するデータ構造にアクセスする。さらなるステップ１００６において、データ構造中の基本コードワードとの固定長コードの比較に基づいてデータ構造から基本コードワードを選択する。選択された基本コードワードは、固定長コードよりも小さい辞書式最大基本コードワードである。次のステップ１００８において、固定長コードに対応する可変長ワードの長さを判断する。長さは、基本コードワードに関連付けられた可変長ワードの長さに等しい。いくつかの実施形態では、長さは基本コードワードの構造に記憶される。そのような実施形態では、判断は、メモリから長さを取り出すことを備える。
【０１４２】
情報および信号は様々な異なる技術および技法のいずれかを使用して表すことができることを、当業者は理解されよう。たとえば、上記の説明全体にわたって言及されるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界または磁性粒子、光場または光学粒子、あるいはそれらの任意の組合せによって表すことができる。
【０１４３】
さらに、本明細書で開示する実施形態に関連して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装できることを、当業者は諒解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップを、上記では概してそれらの機能に関して説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装することができるが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈すべきではない。
【０１４４】
本明細書で説明した技術は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装できる。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセットおよび他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスなど、様々なデバイスのいずれかに実装できる。モジュールまたは構成要素として説明する特徴は、集積論理デバイスに一緒に、またはディスクリートであるが相互運用可能な論理デバイスとして別々に実装できる。ソフトウェアで実装した場合、これらの技法は、実行されると、上記で説明した方法の１つまたは複数を実行する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって少なくとも部分的に実現できる。コンピュータ可読データ記憶媒体は、パッケージング材料を含むことがある、コンピュータプログラム製品の一部をなすことができる。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）、電気消去可能プログラマブル読取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気または光学データ記憶媒体など、メモリまたはデータ記憶媒体を備えることができる。本技法は、追加または代替として、伝搬信号または電波など、命令またはデータ構造の形態でプログラムコードを搬送または伝達し、コンピュータによってアクセス、読取り、および／または実行できるコンピュータ可読通信媒体によって、少なくとも部分的に実現できる。
【０１４５】
プログラムコードは、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルロジックアレイ（ＦＰＧＡ）、または他の等価の集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサを含むことができるプロセッサによって実行できる。そのようなプロセッサは、本開示で説明する技法のいずれかを実行するように構成できる。汎用プロセッサはマイクロプロセッサとすることができるが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態マシンとすることができる。プロセッサは、コンピューティングデバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装することもできる。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、前述の構造の任意の組合せ、または本明細書で説明する技法の実装に好適な他の構造または装置のいずれかを指す。さらに、いくつかの態様では、本明細書で説明する機能を、符号化および復号化のために構成された専用のソフトウェアモジュールまたはハードウェアモジュール内に提供することができ、または複合ビデオエンコーダ／デコーダ（コーデック）に組み込むことができる。
【０１４６】
本発明の様々な実施形態について説明した。これらおよび他の実施形態は以下の特許請求の範囲内に入る。
以下に本願出願の当初の特許請求の範囲について記載された発明を付記する。
［１］
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶することと、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに１つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択することと、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断することと、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断することと、
を備える方法。
［２］
固定長コードを含む前記可変長固定長コードツリーのレベルごとの前記基本コードワードは、固定長コードを含む前記可変長固定長コードツリーの各レベルにある最小固定長コードを表す、
［１］に記載の方法。
［３］
前記データ構造がアレイを備える、
［１］に記載の方法。
［４］
前記データ構造がリンクされたリストを備える、
［１］に記載の方法。
［５］
前記データ構造がバイナリサーチツリーを備える、
［１］に記載の方法。
［６］
前記データ構造がデジタルサーチツリーを備える、
［１］に記載の方法。
［７］
前記選択された固定長コードに関連付けられたセグメントを判断することをさらに備える、
［１］に記載の方法。
［８］
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
［１］に記載の方法。
［９］
辞書式順序の基本コードワードのリストを表すデータ構造を記憶する
ように構成されたメモリと、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに１つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択し、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断し、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断する
ように構成されたプロセッサと、
を備える装置。
［１０］
固定長コードを含む前記可変長固定長コードツリーのレベルごとの前記基本コードワードは、固定長コードを含む前記可変長固定長コードツリーの各レベルにある最小固定長コードを表す、
［９］に記載の装置。
［１１］
前記データ構造がアレイを備える、
［９］に記載の装置。
［１２］
前記データ構造がリンクされたリストを備える、
［９］に記載の装置。
［１３］
前記データ構造がバイナリサーチツリーを備える、
［９］に記載の装置。
［１４］
前記データ構造がデジタルサーチツリーを備える、
［９］に記載の装置。
［１５］
前記プロセッサが、前記選択された固定長コードに関連付けられたセグメントを判断するようにさらに構成された、
［９］に記載の装置。
［１６］
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
［９］に記載の装置。
［１７］
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶するための手段と、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに１つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択するための手段と、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断するための手段と、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断するための手段と、
を備える装置。
［１８］
固定長コードを含む前記可変長固定長コードツリーのレベルごとの前記基本コードワードは、固定長コードを含む前記可変長固定長コードツリーの各レベルにある最小固定長コードを表す、
［１７］に記載の装置。
［１９］
前記データ構造がアレイを備える、
［１７］に記載の装置。
［２０］
前記データ構造がリンクされたリストを備える、
［１７］に記載の装置。
［２１］
前記データ構造がバイナリサーチツリーを備える、
［１７］に記載の装置。
［２２］
前記データ構造がデジタルサーチツリーを備える、
［１７］に記載の装置。
［２３］
前記選択された固定長コードに関連付けられたセグメントを判断するための手段をさらに備える、
［１７］に記載の装置。
［２４］
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
［１７］に記載の装置。
［２５］
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶することと、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに１つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択することと、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断することと、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断することと、
を備える方法を実行する場合の命令を備える、
コンピュータ可読媒体。
【図１】
0005313362.tif 000040
【図２】
0005313362.tif 000041
【図３】
0005313362.tif 000042
【図４】
0005313362.tif 000043
【図５】
0005313362.tif 000044
【図６】
0005313362.tif 000045
【図７】
0005313362.tif 000046
【図８】
0005313362.tif 000047
【図９】
0005313362.tif 000048
【図１０】
0005313362.tif 000049