一般に、本開示は、デジタルビデオ、画像、オーディオ、または音声データのコーディングなど、様々な適用例のための可変長固定長(VF)コードの高速パーシングのための技法を対象とする。本明細書で使用する「コーディング」という用語は、符号化、復号化またはその両方を指すことができる。本開示で説明する技法は、一般的データ圧縮およびコーディングを含む、多種多様な実際的適用例に適用可能であるが、本開示では、例および例示のためにデジタルビデオ符号化および復号化に言及する。
VFコードを使用するコーディングのプロセスは、可変長のワードを固定長コードに符号化することを含む。これらの固定長コードは、記憶するか、または別のデバイスに送信することができる。固定長コードは、次いで復号化して可変長コードに戻すことができる。そのような技法は、データ圧縮の形態として有用であり得る。たとえば、圧縮されていないビットストリング111011000011は、1つまたは複数のデータ構造(たとえば、アレイ)を表すことができる。ビットストリングは、ワードと称されるより短いビットストリングのシーケンスによって表すことができる{11,101,1000,011}。これらのワードの各々は、VFコードを使用して、対応する固定長コードに符号化できる。たとえば、{11−>0,101−>1,1000−>2,011−>3}のようにワードにコードを割り当てると、例示的なシーケンスを0,1,2,3のように符号化することができ、ただし、各コードワードは2ビットコードである。
VFコードは、VFコードツリーによって表すことができる。図4は、バイナリVFコードツリー400の一例である。VFコードは、複数のワードと複数の固定長コードとの間のペアリングを備えることができる。VFコードツリー400中のリーフノードの各々はワードをVFコードで表す。内部ノードはVFコードで表されない。ツリーは、ルートノード64において開始するように構成される。右下に1リンク移動することはビット値0を表す。左下に1リンク移動することはビット値1を表す。したがって、ワード11は、ルートノード64において開始し、左下に2リンク移動することによって表される。
ツリー400のリーフノードの各々は、番号0〜16で標示されている。標示された番号は、リーフノードが表すワードに関連付けられた固定長コードに対応する。定義によれば、固定長コードは、同じ長さのコード値によって表される。いくつかの実施形態では、固定長コードの番号はバイナリストリングである。番号0〜16をバイナリで表すために、固定長コードの各々は5ビットによって表される。
したがって、VFコードツリー400によれば、ワード11は固定長コード00000によって表される。ワード{101,1000,011}は、それぞれ固定長コード{00010,00110,00001}によって表される。したがって、圧縮されていないビットストリング111011000011は、ツリー400のVFコードによって、圧縮されたビットストリング00000000100011000001に符号化され得る。固定長コードを使用することにより、圧縮されたビットストリング中の固定長コードのいずれかの任意の復号化が可能になる。各固定長コードの長さは既知であり、この例では5ビットであるので、新しい固定長コードは5ビットごとに開始する。したがって、圧縮されたビットストリングでは、固定長コードは、位置0、5、10、および15において開始する。したがって、圧縮されたビットストリングの位置5において開始する固定長コード00010は、圧縮されたビットストリング中の残りの固定長コードを復号化することなしに、対応するワード101に直ちに復号化できる。
しかしながら、圧縮されたビットストリング00000000100011000001中の固定長コード00010を復号化することは、ワード101を作り出すが、復号化されたワードが圧縮されていないビットストリング中のどこに入れられるべきかを判断しない。たとえば、元の圧縮されていないビットストリング111011000011は、メモリアレイのコンテンツに対応し得る。したがって、この例のアレイは12ビット長である。アレイは、上記で詳述したように圧縮されたビットストリングに符号化され得る。その場合、圧縮されたビットストリングを復号化すると、アレイ中の正しい位置にビットをもつ同じ12ビットアレイが再生されるべきである。本明細書で説明するパーシング技法は、圧縮されていないビットストリング中の復号化されたワードの位置を判断する迅速な方法を提供する。
本明細書で説明するパーシング技法は、任意に復号化された固定長コードから生じるワードの位置を判断するために、その復号化された固定長コードの前に来る固定長コードに関連するワードの各々の長さを知るだけでよいという概念に基づく。たとえば、上記の例では、1つの固定長コード(00000)が、圧縮されたビットストリーム中の選択された固定長コード(00010)の前に配置されている。選択された固定長コード00010に対応するワード101を配置するためには、固定長コード00000に関連付けられたワード(11)の長さが2であることを知るだけでよい。したがって、ワード101は圧縮されていないビットストリング中の位置2において開始することが知られ、ここで第1の位置は位置0である。
各固定長コードに関連付けられた各ワードの長さを記憶するには、大きいメモリ記憶域が必要になる。しかしながら、本明細書で説明する技法では、固定長コードの部分集合のみについて長さを知る必要がある。この部分集合内の固定長コードの各々は、基本コードワードと呼ばれる。
基本コードワードの選択は、ツリー400などのVFコードツリーの性質に基づく。ツリーにおける各ワードの長さは、ツリー上のワードが発見されたレベルに等しい。たとえば、ワード11はツリーのレベル2において発見され、1001はツリーのレベル4において発見される。したがって、VFコードツリー上の固定長コードに関連付けられたレベルを判断することによって、その固定長コードに関連付けられたワードの長さが確認可能である。
ワードに関連付けられる固定長コードは、辞書式順序で割り振られる。したがって、特定のレベルにある所与のリーフノードに関連付けられた固定長コードは、より低いレベル上の固定長コードよりも値が大きい。たとえば、固定長コード6はレベル4にある。したがって、ツリーの性質によって、固定長コード6は、レベル3、2、または1上のいずれのコードよりも大きい。さらに、固定長コード6は、より高いレベル上のコードよりも小さい。上記の性質を利用して、固定長コードに関連付けられたワードの長さは、ツリーの各レベルにある最小辞書式順序付き固定長コードのリストを使用して得ることができる。ツリー400では、最小辞書式順序付き固定長コードは、少なくとも1つのリーフノードを含むツリーの各レベルにおける最右リーフノードに関連付けられる。
たとえば、図4のツリーでは、ツリーのレベルごとの最小辞書式順序付き固定長コードのリストは、{0,1,3,10,11,12,13,14,15}である。これらの固定長コードの各々は基本コードワードである。各基本コードワードに関連付けられたワードの長さは、基本コードワードとともに記憶できる。したがって、すべての基本コードワードに関連付けられたワードの長さは、リストを使用して直接マップできる。さらに、上記で説明した性質を使用して、任意の固定長コードに関連付けられたワードの長さを判断することができる。選択された固定長コード以下の最大基本コードワードは、選択された固定長コードと同じ、VFコードツリーのレベル上にある。したがって、選択された固定長コードに関連付けられたワードの長さは、選択された固定長コード以下の最大基本コードワードとともに記憶された長さに等しい。たとえば、固定長コード6以下の最大基本コードワードは基本コードワード3である。基本コードワード3は、ツリー400のレベル4上にあり、したがって関連するワード長4を有する。したがって、固定長コード6は、関連するワード長4を有する。したがって、基本コードワードの単純なリストを記憶し、単純な探索を実行することによって、任意の固定長コードの関連するワード長を判断することができる。
上記は、VFコーディングおよびパーシング技法の一実施形態の一例にすぎない。本実施形態および他の実施形態について以下でより詳細に説明する。
本開示のいくつかの態様によれば、VFコーディング技法は、低減された量のメモリ空間を用いるVFコードの符号化および復号化をサポートすることができる。たとえば、そのような技法は、バッハマンのO記法で多くとも2次空間量O(L2)を必要とし、ここで、LはVFコーディングツリーの深さである。2次空間量O(L2)の利用は、コンピュータメモリ中のコーディングツリーの完全表現を利用する他の技法による、指数関数的空間使用O(2L)よりもかなりの改善を提示することができる。
本開示の一態様によれば、TunstallまたはKhodakアルゴリズムを使用して構成されたVFコーディングツリーの代数的性質を利用し、コードワードの符号化および復号化に組合せ数え上げを採用することによって、メモリ空間の低減を達成することができる。本開示で説明する技法の符号化/復号化複雑度は、そのような技法によって処理されるシンボルの数に比例し得る。メモリ要求の低減はより大きいVFコーディングツリーの使用を可能にし、これは符号化の効率向上(すなわち、冗長性の低下)につながり得る。
本開示のいくつかの他の態様によれば、VFコーディング技法は、高速パーシング技法を使用して圧縮されたビットストリーム中のランダムに選択されたコードワードの高速復号化をサポートすることができる。たとえば、そのような技法は、圧縮されていないビットストリーム中のコードワードによって表されるフレーズの位置を判断するために多くともO(log(D))回の演算を必要とし、ここで、圧縮されたビットストリームは圧縮されていないビットストリームの符号化表現であり、Dは平均復号化フレーズ長である。位置を判断するためにコードの完全復号化を利用する他の技法は、O(D)複雑度である。
本開示の様々な態様についてより詳細に説明する。以下に、本開示で説明するVFコーディング技法およびVFコード構造とともに使用するのに好適な例示的なビデオコーディングシステムの説明を記載する。そのようなコーディングシステムおよび技法は、符号化、復号化またはその両方を含むコーディングに有用であり得る。
図1は、ビデオ符号化および復号化システム10を示すブロック図である。図1に示すように、システム10は、通信チャネル16を介して符号化ビデオを受信デバイス14に送信するソースデバイス12を含む。ソースデバイス12は、ビデオソース18とビデオエンコーダ20と送信機22とを含むことができる。受信デバイス14は、受信機24と、ビデオデコーダ26と、ビデオディスプレイデバイス28とを含むことができる。システム10は、本開示による、デジタルビデオデータのメモリ効率の良いVFコーディングのための技法を適用するように構成できる。たとえば、メモリ効率の良いVFコーディング技法は、予測ビデオコーディングプロセスによって作り出される残差ブロック係数のロスレスコーディングのために使用できる。一例として、本技法は、ゼロの連続を使用して0でない変換係数の位置をコーディングするビデオコーディング方式に、または他のビデオコーディング方式に適用できる。
図1の例では、通信チャネル16は、無線周波数(RF)スペクトルまたは1つまたは複数の物理的伝送線路など、ワイヤレスまたはワイヤードの任意の通信媒体、あるいはワイヤレスおよびワイヤードの媒体の任意の組合せを備えることができる。チャネル16は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなど、パケットベースのネットワークの一部を形成することができる。通信チャネル16は、一般に、ビデオデータをソースデバイス12から受信デバイス14に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。
ソースデバイス12は、宛先デバイス14に送信するためのビデオを生成する。ただし、場合によっては、デバイス12、14は、実質的に対称に動作することができる。たとえば、デバイス12、14の各々は、ビデオ符号化および復号化構成要素を含むことができる。したがって、システム10は、たとえば、ビデオストリーミング、ビデオブロードキャスト、またはビデオ電話のためのビデオデバイス12とビデオデバイス14との間の一方向または双方向のビデオ送信をサポートすることができる。他のデータ圧縮およびコーディング適用例の場合、デバイス12、14は、画像、音声またはオーディオデータ、あるいはビデオ、画像、音声およびオーディオデータのうちの2つ以上の組合せなど、他のタイプのデータを送信および受信、または交換するように構成できる。したがって、ビデオ符号化および復号化適用例の説明は例示のために与えたものであり、本明細書で広く説明する本開示の様々な態様を限定するものと見なすべきではない。
ビデオソース18は、1つまたは複数のビデオカメラ、あらかじめキャプチャされたビデオを含んでいるビデオアーカイブ、またはビデオコンテンツプロバイダからのライブビデオフィードなど、ビデオキャプチャデバイスを含むことができる。さらなる代替として、ビデオソース18はソースビデオとしてのコンピュータグラフィックベースのデータ、またはライブビデオとコンピュータ生成ビデオとの組合せを生成することができる。場合によっては、ビデオソース18がカメラである場合、ソースデバイス12および受信デバイス14は、いわゆるカメラ付き携帯電話またはビデオ電話を形成することができる。したがって、いくつかの態様では、ソースデバイス12、受信デバイス14またはその両方は、モバイル電話ハンドセットなど、ワイヤレス通信デバイスハンドセットを形成することができる。各場合において、キャプチャされたビデオ、プリキャプチャされたビデオ、またはコンピュータ生成ビデオは、送信機22とチャネル16と受信機24とを介してビデオソースデバイス12からビデオ受信デバイス14のビデオデコーダ26に送信するために、ビデオエンコーダ20によって符号化できる。ディスプレイデバイス28は、液晶ディスプレイ(LCD)、プラズマディスプレイまたは有機発光ダイオード(OLED)ディスプレイなどの様々なディスプレイデバイスのいずれかを含むことができる。
ビデオエンコーダ20およびビデオデコーダ26は、空間、時間および/または信号対雑音比(SNR)スケーラビリティのためのスケーラブルビデオコーディング(SVC)をサポートするように構成できる。いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ22は、SVCのための細粒度SNRスケーラビリティ(FGS:fine granularity SNR scalability)コーディングをサポートするように構成できる。エンコーダ20およびデコーダ26は、ベースレイヤおよび1つまたは複数のスケーラブルエンハンスメントレイヤの符号化、送信および復号化をサポートすることによって様々な程度のスケーラビリティをサポートすることができる。スケーラブルビデオコーディングの場合、ベースレイヤは最小品質レベルでビデオデータを搬送する。1つまたは複数のエンハンスメントレイヤは追加のビットストリームを搬送して、より高い空間的レベル、時間的レベルおよび/またはSNRレベルをサポートする。
ビデオエンコーダ20およびビデオデコーダ26は、MPEG−2、MPEG−4、ITU−T H.263、またはITU−T H.264/MPEG−4 Advanced Video Coding(AVC)などのビデオ圧縮規格に従って動作することができる。図1には示されていないが、いくつかの態様では、ビデオエンコーダ20およびビデオデコーダ26は、それぞれオーディオエンコーダおよびデコーダと統合され、適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含み、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理し得る。適用可能な場合、MUX−DEMUXユニットはITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠することができる。
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規格は、ITU−T研究グループによる2005年3月付けのITU−T勧告H.264「Advanced video coding for generic audiovisual services」に記載されており、本明細書ではH.264規格またはH.264仕様、あるいはH.264/AVC規格または仕様と呼ぶことがある。
いくつかの態様では、ビデオブロードキャストに関して、本開示で説明する技法を、たとえば、ワイヤレスビデオブロードキャストサーバまたはワイヤレス通信デバイスハンドセットを介して、Forward Link Only(FLO) Air Interface Specification、すなわちTechnical Standard TIA−1099(「FLO Specification」)として発表された「Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast」を使用して、terrestrial mobile multimedia multicast(TM3)システムでリアルタイムビデオサービスを配信するための拡張H.264ビデオコーディングに適用することができる。FLO Specificationは、ビットストリームシンタックスおよびセマンティックス、ならびにFLO Air Interfaceに適した復号化プロセスを定義する例を含む。代替的に、DVB−H(digital video broadcast−handheld)、ISDB−T(integrated services digital broadcast−terrestrial)、またはDMB(digital media broadcast)などの他の規格に従ってビデオをブロードキャストすることができる。したがって、ソースデバイス12は、モバイルワイヤレス端末、ビデオストリーミングサーバ、またはビデオブロードキャストサーバとすることができる。しかしながら、本開示で説明する技法は、特定のタイプのブロードキャスト、マルチキャスト、またはポイントツーポイントシステムに限定されない。ブロードキャストの場合、ソースデバイス12は、ビデオデータのいくつかのチャネルを、その各々が図1の受信デバイス14と同様とすることができる複数の受信デバイスにブロードキャストすることができる。
ビデオエンコーダ20およびビデオデコーダ26はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せとして実装できる。したがって、ビデオエンコーダ20およびビデオデコーダ26の各々を、集積回路(IC)チップまたはデバイスとして少なくとも部分的に実装し、1つまたは複数のエンコーダまたはデコーダ中に含めることができ、そのいずれかを複合エンコーダ/デコーダ(コーデック)の一部としてそれぞれモバイルデバイス、加入者デバイス、ブロードキャストデバイス、サーバなどに統合することができる。さらに、ソースデバイス12および受信デバイス14はそれぞれ、符号化ビデオの送信および受信のために適切な変調、復調、周波数変換、フィルタ処理、および増幅器構成要素を含み、適用可能な場合、ワイヤレス通信をサポートするために十分な無線周波(RF)ワイヤレス構成要素およびアンテナを含むことができる。ただし、説明しやすいように、そのような構成要素は図1に示していない。
ビデオシーケンスは一連のビデオフレームを含む。ビデオエンコーダ20は、ビデオデータを符号化するために個々のビデオフレーム内のピクセルのブロックに作用する。ビデオブロックは、サイズを固定することも変更することもでき、指定のコーディング規格に応じてサイズが異なることがある。各ビデオフレームは一連のスライスを含む。各スライスは一連のマクロブロックを含むことができ、それらはサブブロック中に配置することができる。一例として、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、およびクロマ成分では対応するスケーリングされたサイズなど、様々なブロックサイズのインター予測をサポートする。
ビデオブロックは、小さいほどより良い解像度が得られ、より高い詳細レベルを含むビデオフレームの位置特定に使用することができる。一般に、マクロブロック(MB)および様々なサブブロックをビデオブロックと考えることができる。さらに、スライスは、MBおよび/またはサブブロックなど一連のビデオブロックであると考えることができる。各スライスは単独で復号化可能なユニットとすることができる。予測の後に、8×8残差ブロックまたは4×4残差ブロック上で変換を実行することができ、イントラ16×16予測モードが使用される場合は、クロマ成分またはルーマ成分用の4×4ブロックのDC係数に追加の変換を適用することができる。
図1のシステム10のビデオエンコーダ20および/またはビデオデコーダ26は、本開示で説明するメモリ効率の良いVFコーディング技法およびVFコードの高速パーシングのための技法を採用するように構成できる。特に、ビデオエンコーダ20および/またはビデオデコーダ26は、メモリ利用、処理オーバーヘッド、処理複雑度、帯域幅消費、データ記憶空間、および/または電力消費量を低減するためにそのような技法の少なくともいくつかを適用する、エントロピーエンコーダおよびエントロピーデコーダをそれぞれ含むことができる。
図2は、図1に示すビデオエンコーダ20の一例を示すブロック図である。ビデオエンコーダ20は、少なくとも部分的に、まとめて集積回路デバイスと呼ぶことができる1つまたは複数の集積回路デバイスとして形成できる。いくつかの態様では、ビデオエンコーダ20は、ワイヤレス通信デバイスハンドセットまたはブロードキャストサーバの一部を形成することができる。ビデオエンコーダ20は、ビデオフレーム内のブロックのイントラコーディングおよびインターコーディングを実行することができる。イントラコーディングは、所与のビデオフレーム内のビデオの空間的冗長性を低減または除去するために空間的予測に依拠する。インターコーディングは、ビデオシーケンスの隣接フレーム内のビデオの時間的冗長性を低減または除去するために時間的予測に依拠する。インターコーディングの場合、ビデオエンコーダ20は、隣接フレーム間でビデオブロックを一致させる動作を追跡するために動き推定を実行する。
図2に示すように、ビデオエンコーダ20は、符号化すべきビデオフレーム内の現在のビデオブロック30を受信する。図2の例では、ビデオエンコーダ20は、動き推定ユニット32と、参照フレームストア34と、動き補償ユニット36と、ブロック変換ユニット38と、量子化ユニット40と、逆量子化ユニット42と、逆変換ユニット44と、エントロピー符号化ユニット46とを含む。ビデオエンコーダ20はまた、本開示の様々な態様による、符号化または復号化を含むVFコーディングにおいて使用するVFコーディングツリーによって表されるVFコード構造の構成を定義する属性を含む1つまたは複数のデータ構造のコンテンツを含むコーディングデータを記憶および検索するためにエントロピー符号化ユニット46によって使用され得るメモリ47を含むメモリを含むことができる。ブロッキングアーティファクトを除去するために、ループ内デブロッキングフィルタ(図示せず)をフィルタブロックに適用することができる。ビデオエンコーダ20はまた、加算器48と加算器50とを含む。図2は、ビデオブロックのインターコーディングのためのビデオエンコーダ20の時間的予測構成要素を示す。説明しやすいように図2には示されていないが、ビデオエンコーダ20は、いくつかのビデオブロックのイントラコーディングのための空間的予測構成要素をも含むことができる。
動き推定ユニット32は、1つまたは複数の動きベクトルを生成するためにビデオブロック30を1つまたは複数の隣接ビデオフレーム中のブロックと比較する。以前に符号化されたブロックから再構成されたビデオブロックを記憶するために任意のタイプのメモリまたはデータ記憶デバイスを備えることができる参照フレームストア34から、1つまたは複数の隣接フレームを検索することができる。動き推定は、可変サイズ、たとえば、16×16、16×8、8×16、8×8、またはより小さいブロックサイズのブロックに対して実行できる。
動作中、動き推定ユニット32は、たとえば、レートひずみモデルに基づいて現在のビデオブロック30に最もぴったり一致する隣接フレーム中の1つまたは複数のブロックを識別し、隣接フレーム中のブロックと現在のビデオブロックとの間の変位を判断する。これに基づいて、動き推定ユニット32は、現在のビデオブロック30と、現在のビデオブロック30をコーディングするために使用される参照フレームからの1つまたは複数の一致するブロックとの間の変位の大きさおよび軌道を示す、1つまたは複数の動きベクトル(MV)を作り出す。
動きベクトルは、ハーフもしくはクォータピクセル精度、またはさらにより微細な精度を有することができ、それによりビデオエンコーダ20は、整数ピクセルロケーションよりも高い精度で動きを追跡し、より良い予測ブロックを取得することが可能になる。端数のピクセル値をもつ動きベクトルを使用するとき、動き補償ユニット36中で補間演算が実行される。動き推定ユニット32は、レートひずみモデルなど、いくつかの基準を使用して、ビデオブロックについての最良のブロック区分および1つまたは複数の動きベクトルを識別する。たとえば、双方向予測の場合、複数の動きベクトルがあり得る。得られたブロック区分および動きベクトルを使用して、動き補償ユニット36は予測ビデオブロックを形成する。
ビデオエンコーダ20は、加算器48において、元の現在のビデオブロック30から、動き補償ユニット36によって作り出された予測ビデオブロックを減算することによって残差ビデオブロックを形成する。ブロック変換ユニット38は、H.264/AVCにおいて使用される4×4または8×8整数変換などの変換を残差ブロックに適用して、残差変換ブロック係数を作り出す。量子化ユニット40は、ビットレートをさらに低減するために残差変換ブロック係数を量子化する。ロスレス符号化ユニット46は、量子化係数をエントロピーコード化して、ビットレートをなお一層低減する。
ロスレス符号化ユニット46は、VF符号化ユニットとして動作して、量子化ブロック係数にVF符号化を適用する。特に、エントロピー符号化ユニット46は、本開示で説明するメモリ効率の良いVF符号化技法を使用してデジタルビデオブロック係数のVF符号化を実行するように構成できる。したがって、ビデオデータの符号化を実行するために、本開示で説明する様々なVF符号化プロセスをロスレス符号化ユニット46内に実装することができる。代替的に、そのようなロスレス符号化ユニット46は、限定はしないが、ビデオ、画像、音声およびオーディオデータを含む様々なデータのいずれかを符号化するために、本開示で説明するプロセスを実行することができる。一般に、ビデオデコーダ26は、たとえば、図3に関して説明するように、符号化ビデオを復号化および再構成するために、VF復号化およびパーシングを含む逆演算を実行する。
逆量子化ユニット42および逆変換ユニット44はそれぞれ、逆量子化および逆変換を適用して残差ブロックを再構成する。加算器50は、再構成された残差ブロックを、動き補償ユニット36によって作り出された動き補償された予測ブロックに加算して、参照フレームストア34に記憶するための再構成されたビデオブロックを作り出す。再構成されたビデオブロックは、後続のビデオフレーム中のブロックを符号化するために動き推定ユニット32および動き補償ユニット36によって使用される。
図3は、ビデオデコーダ26の一例を示すブロック図である。ビデオデコーダ26は、少なくとも部分的に、まとめて集積回路デバイスと呼ぶことができる1つまたは複数の集積回路デバイスとして形成することができる。いくつかの態様では、ビデオデコーダ26は、ワイヤレス通信デバイスハンドセットの一部を形成することができる。ビデオデコーダ26は、ビデオフレーム内のブロックのイントラ復号化およびインター復号化を実行することができる。図3に示すように、ビデオデコーダ26は、ビデオエンコーダ20によって符号化された受信機24(図1)からの符号化ビデオビットストリームを受信する。図3の例では、ビデオデコーダ26は、エントロピー復号化ユニット52と、動き補償ユニット54と、逆量子化ユニット56と、逆変換ユニット58と、参照フレームストア62とを含む。ビデオデコーダ26はまた、VF復号化において使用するVFコーディングツリーの構成を定義する属性を含む1つまたは複数のデータ構造のコンテンツを含むコーディングデータを記憶および検索するためにエントロピー復号化ユニット52が使用することができる、メモリ53を含むメモリを含むことができる。ビデオデコーダ26は、加算器64の出力をフィルタ処理するループ内デブロッキングフィルタ(図示せず)をも含むことができる。ビデオデコーダ26は加算器64をも含む。図3は、ビデオブロックのインター復号化のためのビデオデコーダ26の時間予測構成要素を示す。図3には示されていないが、ビデオデコーダ26は、いくつかのビデオブロックのイントラ復号化のための空間予測構成要素をも含むことができる。
ロスレス復号化ユニット52は、符号化ビデオビットストリームを受信し、そのビットストリームから、量子化残差係数、マクロブロックコーディングモード、および動きベクトルとブロック区分とを含むことができる動き情報を復号化する。したがって、エントロピー復号化ユニット52は、VF復号化ユニットとして機能し、VFコーディングツリーの様々な属性を定義するためにメモリ53に記憶されたデータ構造に依拠することができる。たとえば、符号化ビットストリームから量子化残差係数を復号化するために、図2のロスレス符号化ユニット46のように、図3のエントロピー復号化ユニット52は、本開示で説明するデジタルビデオブロック係数のメモリ効率の良いVF復号化を実行することができる。しかしながら、ロスレス復号化ユニット52は、符号化ビットストリームから量子化ブロック係数を取り出すために、図2のロスレス符号化ユニット46に対して逆の方法でVF復号化を実行することができる。ロスレス復号化ユニット52はまた、符号化ビットストリーム中のランダムに選択されたコードワードの高速復号化のためにVFパーシング技法を実行することができる。本開示で説明する様々な復号化およびパーシングプロセスは、ビデオデータの復号化を実行するためにエントロピー復号化ユニット52内に実装できる。代替的に、そのようなロスレス復号化ユニット52は、限定はしないが、ビデオ、画像、音声およびオーディオデータを含む、様々なデータのいずれかを復号化するために本開示で説明するプロセスを実行することができる。いずれの場合も、エントロピー復号化ユニット52によって実行された可変長コーディングの結果を、ユーザに出力し、メモリに記憶し、および/あるいは別のデバイスまたは処理ユニットに送信することができる。
動き補償ユニット54は、動きベクトルと、ブロック区分と、参照フレームストア62からの1つまたは複数の再構成された参照フレームとを受信して、予測ビデオブロックを作り出す。逆量子化ユニット56は、量子化ブロック係数を逆量子化(inverse quantize)、すなわち逆量子化(de-quantize)する。逆変換ユニット58は、逆変換、たとえば、逆DCT、または逆4×4もしくは8×8整数変換を係数に適用して、残差ブロックを作り出す。次いで、予測ビデオブロックは、加算器64によって残差ブロックと加算されて、復号化ブロックを形成する。復号化されたブロックをフィルタ処理してブロッキングアーティファクトを除去するために、デブロッキングフィルタ(図示せず)を適用することができる。フィルタ処理されたブロックは次いで参照フレームストア62に入れられ、参照フレームストア62は、後続のビデオフレームの復号化のために参照フレームを与え、また、ディスプレイデバイス28(図1)を駆動するために復号化ビデオを作り出す。
次に、様々なデータ構造をサポートするVFコーディングのためのメモリ効率の良い技法の例についてより詳細に説明する。これらのコーディング技法は、上記で説明したエンコーダおよびデコーダ内に実装できる。無記憶ソース(memoryless source)Sについて考える。ソースSは、入力アルファベットA={a1,...,am}(2≦m<∞)からシンボルを作り出す。ただし、作り出される各シンボルの確率は、確率{pi=P(ai),i=1,...,m}を有する。作り出される各シンボルの確率のすべての和は1である。たとえば、m=2の場合、a1およびa2のシンボルは、それぞれ、0および1とすることができる。1(P(1))の確率は0.6とすることができ、その場合、P(0)は0.4に等しい。0<pmin≦pmax<1と仮定して、値pmin、pmaxは、相応して最も可能性の低いおよび最も可能性の高いシンボルの確率を示す。
メッセージ
を、ソースSによって作り出される無限長シーケンスのシンボルであると仮定する。可変長コーディングの主概念は、以下のように、任意のメッセージΣをXからのワードのシーケンスによって一意に表すことができるように、ワードX={x
j∈A
*,j=1,...,M}(m≦M<∞)の集合を定義し、次いで、出力アルファベットB={b
1,...,b
n}((2≦n<∞)の文字から形成されたコードワードΦ(x
j)にワードx
jをマップすることである。
マッピングΦは単射であり、たとえば、T.M.CoverおよびJ.M.Thomas、「Elements of Information Theory」、(John Wiley&Sons、New York、1991)に記載されているように、出力コード{Φ(xj)}は一意に復号化可能であると仮定される。
本開示によれば、同じ長さをもつコードワードΦ(x
j)を作り出すコーディングシステムにVFコーディング技法を適用することができる。たとえば、単に
を選択し、ワードx
jのインデックスを使用して、そのようなワードのためのコードを作り出すことが可能である。そのようなコーディングシステムによって作り出されるコードは、可変長ブロック(VB)または可変長固定長(VF)コードと呼ばれることがある。概して、本開示ではVFコードという用語を使用する。
所与のソースSのためのVFコードの構成の問題は、
のソースの符号化の平均冗長度が最小になるような、制限されたサイズ|X|≦Mのプレフィックスフリー集合Xを発見することに関連する。
この場合、d(X,S)は、次式のような平均遅延(またはXのワードの平均の長さ)を示す。
h(s)は、次式のようなソースのエントロピーである。
場合によっては、次式のような理想化された平均冗長度を最小限に抑えるプレフィックス集合Xを発見すれば十分であり得る。
上記の問題は類似している。
無記憶ソースのための最適なVFコードの構成のための最もよく知られているアルゴリズムは、B.P.TunstallによってB.P.Tunstall、「Synthesis of Noiseless Compression Codes」、博士論文、(Georgia Inst. Tech.、Atlanta、Ga.、1968)に記述された。また、Tunstallコーディングは、F.JelinekおよびK.S.Schneider、「On Variable-Length-to-Block Coding」、IEEE Trans. Inf. Theory、18(6)(1972)765〜774に記述され、解析されている。Tunstallコーディングプロセスは、入力アルファベットAの文字に対応する、m個のリーフに接続された単一のノードからなるツリーΔ
(1)で開始する。たとえば、図4のノード64は単一の開始ノードになる。図4はバイナリツリーであり、したがって、m=2であり、したがって第1のステップにおいて、ノード64はリンク66および68を介して2つのリーフに接続される。次いで、コーディングプロセスは、最も高い確率をもつ文字に対応するリーフを選び、それを、新しいリーフに接続されたノードと置き換える。このプロセスは連続的に繰り返され、各ステップにおいて、最も高い確率をもつワードに対応するリーフを選ぶ。i回のステップの後、このコーディングプロセスは、(m−1)i+1個のリーフをもつツリーΔ
(i)を作り出することがわかる。このツリーは、容易に数え上げ、
にマップすることができる、ワードのプレフィックスフリー集合X(Δ
(i))に対応する。
図4は、VFコーディングツリーの一例を示す図である。図4のVFコーディングツリーは、16回の反復後に確率Pr(1)=0.2をもつバイナリ無記憶ソースのためのTunstallアルゴリズムによって作り出されるコーディングツリーの一例である。以下の表1に、図4のツリー中のノードについてのコード、ワードおよび確率(Pr)値を示す。
図4に示すように、コーディングプロセスは、ルートノード64から外側に、左のブランチ66および右のブランチ68に沿って拡張する。コーディングプロセスは、表1中の可変長ワードの各々に固定長コードを割り当てるためにツリーのブランチをトレースする。図4のツリー中のノード0〜16は、上記の表1中に提示されたそれぞれの可変長入力ワードのための対応する固定長コードを指定する。いくつかのワードが他のワードよりも多いシンボルを含んでいるように、ワードは可変の長さを有する。図4および表1中のVFコードにおけるコード番号の割当ては、本開示による例示的な技法について説明するのに好都合である特定の順序で行われる。しかしながら、より一般的な場合は、コード番号の割当てを別様に行うことができ、コード番号のすべての考えられる置換が可能である。
Tunstallコーディングプロセスは、極めてよく研究されており、コーディング理論およびその他において多くの適用例に使用されている。その冗長性の単純な限界は独立して得られており、G.L.Khodak、「Connection Between Redundancy and Average Delay of Fixed-Length Coding」、All−Union Conference on Problems of Theoretical Cybernetics(Novosibirsk、USSR、1969)12(ロシア)、およびF.JelinekおよびK.S.Schneider、「On Variable-Length-to-Block Coding」、IEEE Trans. Inf. Theory、18(6)(1972)765〜774に記載されている。メモリをもつソースのためのTunstallコードの一般化は、T.J.TjalkensおよびF.M.J.Willems、「Variable to Fixed-length codes for Markov sources」、IEEE Trans. Inf. Theory IT−33、246〜257、1987、およびS.A.Savari、Robert G.Gallager、「Generalized Tunstall codes for sources with memory」、IEEE Trans. Info. Theory, vol.IT−43、658〜668ページ、1997年3月によって提唱されている。その冗長性(4)のより正確な漸近解析は、S.A.Savari、「Variable-to-Fixed Length Codes for Predictable Sources」、Proc IEEE Data Compression Conference、Snowbird、Utah、1998年3月30日〜4月1日、481〜490ページ、およびM.Drmota、Y.A.Reznik、S.A.Savari、およびW.Szpankowski、「Precise Asymptotic Analysis of the Tunstall Code」、IEEE International Symposium on Information Theory(ISIT06)、Seattle、Wash.、2006年7月9〜14日によって提示されている。一様分布の近似、乱数生成、および関係する問題のためのTunstallアルゴリズムの適用例について説明した。
Tunstallコーディングプロセスは、可変長固定長(VF)コードの構成に利用可能な唯一の技法でない。G.L.Khodakは、G.L.Khodak、「Connection Between Redundancy and Average Delay of Fixed-Length Coding」、All−Union Conference on Problems of Theoretical Cybernetics(Novosibirsk、USSR、1969)12(ロシア)に、別のコード構成技法を記載している。Khodakプロセスは、G.L.Khodak、「Redundancy Estimates for Word-Based Encoding of Messages Produced by Bernoulli Sources」、Probl. Inf. Trans.、8、(2)(1972)21〜32(ロシア)、およびR.E.Krichevsky、「Universal Data Compression and Retrieval」(Kluwer、1993)にも記載されている。Khodakプロセスは、図4のノード64など、単一のノードを含んでいるツリーで開始し、すべてのそのリーフxが次式を満たすまで、ツリーを漸進的に伸ばす。
上式で、Nは固定の実数(N>1/p
min)である。上記の条件(5)は、得られたツリーΔ
N中のリーフの総数が次式を満たすことを暗示する。
条件(5)はすべてのリーフに適用されるので、Nの異なる値を選択することによって、一定の粒度(granularity)を伴うが、得られたツリーのサイズを制御することができる。また、パラメータNをもつKhodak技法を使用して構成されたツリーΔ
Nは、
回のステップ後にTunstall技法を使用して構成されたツリー
とまったく同じであることを示すことができる。したがって、図4のツリー400は、TunstallまたはKhodak技法のいずれかを使用して構成できる。
したがって、Tunstall技法とKhodak技法の両方は、同じ問題を解決するために使用できる。Tunstall技法は、得られたツリー中のリーフの数にわたって明示的制御を行う利点を有する。一方、Khodak方式は、式(5)ごとに、コーディングツリーの直接構成を実行するために使用できるコーディングツリーの単純な代数的特徴づけを行う。Tunstallコードと同様に、コードインデックスが割り当てられる順序を選択する際にフレキシビリティがあり、本開示の態様の1つは、そのような割当ての特定の順序を定義する。
本開示によれば、VFコードの効率の良い符号化および/または復号化のための技法が提供される。そのような技法は、ビデオコーディング、オーディオコーディング、ボイスコーディング、音声コーディングまたは他の適用例に適用できる。たとえば、TunstallまたはKhodakアルゴリズムを使用して構成されたVFコーディングツリーの代数的性質を利用して、それらのコードインデックスを特定の順序に並べ替えることにより、コードワードの符号化および/または復号化のための組合せ数え上げ技法の使用が可能になるので、本技法は、かなりのメモリ節約をサポートすることができる。たとえば、いくつかの態様では、そのような技法は、多くとも2次メモリ空間量O(L2)を必要とし、ここで、Lはコーディングツリーの深さである。さらに、そのような技法のコーディング複雑度は、それらの技法が処理するシンボルの数に比例し得る。
2つの単純な補題は、本開示によるVFコーディングツリー中の内部コードの直接数え上げをサポートする。
補題1によれば、上記のKhodak条件(5)を満たすツリーΔ
N中の内部ノードωの確率は、以下の性質を有する。
証明:条件(5)、およびP(ω)はリーフの確率よりも大きくなるはずであることから直ちにそうなる。
補題2によれば、
となるようなストリングω∈A
*は、上記のKhodak条件(5)を満たす、ツリーΔ
N中の既存の内部ノードにつながる。証明:これが正しくない場合、外部ノードにつながる、プレフィックスu:ω=uv、|u|>0、|v|>0が存在するはずである。その場合、上記の条件(5)によれば、P(u)<1/N
Pminであることが真であるはずである。しかしながら、これは、上記の式(8)、およびP(ω)=P(u)P(v)<P(u)であることに矛盾する。
Khodakのアルゴリズムを使用して構成されるツリー中のリーフの確率についてのより厳密な限界は、以下の補題に従って導出できる。補題3によれば、上記の条件(5)を満たすツリーΔ
N中のαブランチ(α∈A)に接続されたリーフxは、以下の性質を有する。
証明:ストリングωに対応する内部ノードについて考える。その子は、ω:ωα、α∈Aの一文字拡張に対応する。ノードωαが外部ノードになる場合、上記のKhodak条件(5)によれば、次式を満たさなければならない。
ωは内部であるので(補題1参照)、次式のようになる。
上記の両方の式を組み合せると、式(9)になる。
補題4によれば、
となるようなすべてのストリングω∈A
*は、Khodak条件(5)を満たすツリーΔ
N中のリーフに直接接続されたαブランチを有する内部ノードに対応する。証明:式(12)の左辺は、ωがツリーΔ
N中の有効な内部ノードであることを確実にする(補題2参照)。式(12)の左辺はまた、ωαについて条件(5)が満たされ、したがってωαはリーフであるはずであることを暗示する。Khodakの条件(5)はリーフの確率に関する制限として定式化されるが、それらの直接数え上げのためには使用できない。条件(5)を使用するためには、そのリーフのすべてが条件(5)を満たすまで、バイナリツリー構造を維持し、それを漸進的に伸ばさなければならない。上記の条件(12)は、ツリー構造を構築することなしに直接使用できる。
次に、本開示で提示する数え上げコーディング技法による例示的なVFコーディングツリーの構造について説明する。上記の補題4は、次式のように、無記憶ソースのためのVFコードツリーΔ
N中のすべてのワードを数え上げることができることを暗示する。
上式で、各グループ
は、長さl+1の
ワードを含んでおり、i番目のシンボルで終了し、確率
を有し、ただし、k
1,...,k
m,iは、それらの最初のl位置にある各種のシンボルの数を示す。
バイナリの場合、Pr(1)=p、Pr(0)=q、p<qでは、式(13)を次式のように書き直すことができる。
上式で、グループX
l,k,aは、長さl+1の
ワードによって形成され、ここで、最初のlビットがk個の1を含んでおり、最後のシンボルはaである。
グループのこの区切りに加えて、本開示で説明する技法はまた、各サブグループ中のすべてのワード
が辞書式順序で配置されるか、またはより一般的には、そのようなサブグループ中のブロックのインデックスの高速組合せ計算を可能にする他の順序で配置されることを指定することができる。このようにして、本技法は、高速組合せ計算を可能にするVFコードの特定の変形態を作り出すことができる。
適度に短い、たとえば、12未満または12にほぼ等しいワードの場合、それらの辞書式インデックスの計算(またはそれらのインデックスを使用したワードの合成)は、せいぜい1回のルックアップとすることができる。より長いワードの場合、以下のよく知られている組合せ式を使用することが可能である。
上式で、ω
jは、ワードωの個々のビットを表し、すべてのk>1について、
であると仮定する。このようにして、コードは、サブグループ中のブロックのインデックスの高速計算のための効率の良い組合せ数え上げをサポートすることができる。
図5は、ノードが数え上げVFコーディング方式に従ってグループに構成された、図4のVFコーディングツリーの図である。VFコーディングツリーは例示的なコード構造を表す。特に、図5は、式(14)によって定義された区分の構造を示す。図5のツリー中のVFコード構造は、図4の例におけるVFコード構造と同じであるが、ツリー内のコードのグループのリストを指定する観点から数え上げコーディング方式を示す。特に、コーディングツリーの各レベルlについて、そのレベルに属するグループXl,k,aの数は、多くとも2*(l+1)である。この数は、ツリーが、すべてのリーフがレベルlにある完全なツリーである場合に対応する。したがって、ツリーΔNのL個のレベル中に含まれているグループの総数は、バッハマンのO記法を使用して、多くともO(L2)である。この数は、一般に指数、すなわち、O(2L)である、同じ深さの従来のツリー中に含まれているノードまたはリーフの総数よりもかなり小さい。
図5の例で示されるように、VFコーディングツリーは12個のグループXl,k,aを含み、それは、それぞれプレフィックス長と、プレフィックス中の1の数と、終端シンボル(たとえば、0または1ビット)とを示す、関連するl値,k値、およびa値を参照して識別される。lの値は、ツリー内のレベルをも示す。図5のVFコーディングツリーでは、レベル1に単一のグループがある。グループ(1,1),1は、コード0およびワード11に対応する単一のリーフを含む。この場合、l=1がプレフィックスの長さであり、k=1がプレフィックス中の1の数であり、a=1が終端ビットである。VFコーディングツリーのレベル2に、1つのグループがある。グループ(2,1),1は、コード1およびワード011と、コード2およびワード101とに関係する2つのリーフを含む。この場合、l=2がプレフィックスの長さであり、k=1がプレフィックス中の1の数であり、a=1が終端ビットである。
VFコーディングツリーのレベル3に、3つのグループがある。グループ(3,1),1は、コード7およびワード0011と、コード8およびワード0101と、コード9およびワード1001とに関係する3つのリーフを含む。このグループの場合、l=3がプレフィックスの長さであり、k=1がプレフィックス中の1の数であり、a=1が終端ビットである。グループ(3,1),0は、コード4およびワード0010と、コード5およびワード0100と、コード6およびワード1000とに関係する3つのリーフを含む。このグループの場合、l=3がプレフィックスの長さであり、k=1がプレフィックス中の1の数であり、a=0が終端ビットである。グループ(3,0),1は、コード3およびワード0001に関係する単一のリーフを含む。このグループの場合、l=3がプレフィックスの長さであり、k=0がプレフィックス中の1の数であり、a=1が終端ビットである。ツリーの残りは、さらなるグループXl,k,aによって同様にして識別される。
l値、k値およびa値、ならびに各グループ中のコードに関連付けられた辞書式に第1のワードの値を示すオフセットまたは「基本」値は、VFコーディングツリー内のコードの数え上げ構成および利用をサポートする。さらに、コード0を含んでいる第1のグループがグループ(1,1),1であり、コード1および2を含んでいる第2のグループがグループ(2,1),1であり、コード3を含んでいる第3のグループがグループ(3,0),1であり、コード4、5および6を含んでいる第4のグループがグループ(3,1),0であり、コード7、8および9を含んでいる第5のグループがグループ(3,1),1であり、以下同様であるように、グループを固定長コードの順序に従って順序付けることができる。この順序を仮定すれば、VFコーディングツリーのためのグループのリスト内のグループを容易に識別するために、グループインデックスjを確立することができる。
次に、VFコードの数え上げ構成のための技法の設計について、図5をさらに参照しながら説明する。また、バイナリ無記憶ソースのための構成プロシージャのコンパクトなデータ構造およびCコードの一例を与える。図5を参照すると、各グループXl,k,aの識別のためのパラメータl,kおよびaに加えて、数え上げ構成技法はまた、それぞれのグループ中の第1のコードの値を表す、グループごとの値オフセットを記憶することができる。各グループ中の(オフセットによって指定された)第1のコードは、オフセットまたは基本コードと呼ばれることがある。図5に示すように、基本コードの各々は、丸で囲まれている。上記で説明したように、コンピュータメモリ中の得られたVFコーディングツリー表現のサイズは、多くともO(L2)とすることができ、ここで、Lはツリーの高さ、すなわち、ツリー中のレベルlの数である。
一般に、いくつかの態様では、VFコードの構成のための技法は、辞書式順序を有する可変長ワードを表す固定長コードの集合を生成することを備えることができる。表1を参照すると、たとえば、入力ワードの集合は、第1のワード11から最後のワード0000000001までの辞書式順序を有する。コード0〜16は、それぞれ、ワード11〜0000000001を符号化するために使用される。VFコードの構成は、たとえば、図5のVFコーディングツリーに関して上記で説明した、グループXl,k,aに固定長コードを構成することをさらに備えることができる。グループの各々は、1つまたは複数の固定長コードを含む。所与のグループ中の1つまたは複数の固定長コードは、確率が同じであり、終端シンボルが同じである可変長ワードを表す。
表1および図5を参照すると、たとえば、コード7、8および9は、可変長ワード0011、0101および1001を表す。ワード0011、0101および1001の各々は、下線によって示される、1の終端シンボルa、たとえば、終端ビットを有する。さらに、表1に示すように、ワード0011、0101および1001の各々は、0.0256の確率を有する。したがって、コード7、8および9は、代替的にグループ(3,1),1と指定できる、同じグループXl,k,a=X3,1,1内に入れられる。表1をさらに参照すると、コード4、5および6は、コード7、8および9によって表されるワードと同じ長さを有する入力ワード(0010、0100、1000)を表す。しかしながら、コード4、5および6によって表される入力ワードは、異なる終端ビットa(0)と、異なる確率(0.1024)とを有する。
したがって、コード4、5および6は、代替的にグループ(3,1),0と指定できる、異なるグループXl,k,a=X3,1,0内に入れられる。コード3は、コーディングツリーのレベル3にある他のコードによって表される入力ワードと同じ長さを有する入力ワード(0001)を表す。さらに、コード3によって表される入力ワード0001の確率は、コード4、5および6によって表される入力ワードの確率と同じである。しかしながら、コード3は、異なる終端ビットa(1)を有するコードを表す。したがって、コード3は、代替的にグループ(3,0),1と指定できる、異なるグループXl,k,a=X3,0,1に属する。
可変長ワードの集合は、たとえば、表1に示すように、辞書式順序を有する。VFグループの各々では、1つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。グループが単一の固定長コードのみを含む場合、辞書式順序は一般に重要ではない。しかしながら、グループが2つ以上の固定長コードを含む場合、グループ中の固定長コードは、固定長コードによって表される可変長入力ワードの辞書式順序に従って順序付けられる。たとえば、グループ(3,1),0に関して、コード4は、ワード0010を表し、コード5はワード0100を表し、コード6はワード1000を表す。ワード0010は入力ワード集合の辞書式順序における1番目のワードであり、ワード0100は2番目のワードであり、ワード1000は3番目のワードである。ワードが表すそれらの辞書式順序に従ったグループ内のコードの構成は、本明細書では互換的にオフセットまたは基本コードと呼ぶことがある、辞書式に第1のコードの値と、グループ内の他のコードのインデックス位置とに基づいた、グループ中のコードの方向計算をサポートする。
上記のl,k,a表記に一致して、グループの各々を、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さlと、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の1の数kと、グループ中の固定長コードによって表される可変長ワードの各々の終端シンボルaとで表すことができる。終端シンボルは、0または1の1ビット値とすることができる。プレフィックスは、最後の終端シンボルより前のワードの部分を指し、可変長ワードの全長に応じて長さが変動する。さらに、上記で説明したように、それぞれのグループ中の辞書式順序付き第1の固定長コード、すなわち、オフセットまたは基本コードに対する固定長コードの辞書式順序に基づいて、グループの各々の中の固定長コードの各々をさらに表すことができる。
たとえば、グループ(3,1),0中のワード0010に対応する辞書式順序付き第1の固定長コード4を仮定し、グループ内のコード6によって表されるワード1000のインデックス位置、すなわち、可能なインデックス位置0、1および2のうちの2を仮定すれば、コード6のワードは、単に第1のワード0010に4を乗算すること、または何らかの他の数学演算によって直接計算できる。この代数的性質は、第1の固定長、またはそれぞれのグループ中の「基本」コードに対するコードの辞書式順序内のコードのインデックス位置を仮定すれば、復号化演算の間のコードからワードの直接計算を可能にすることができる。
本開示による、数え上げコーディング技法を可能にするために、各グループ中の1つまたは複数のコードのプレフィックスの長さと、プレフィックス中の1の数と、終端シンボルとを、メモリ中のデータ構造に記憶することができる。本開示のいくつかの態様では、メモリは、メディアコーディングデバイスなど、コーディングデバイス内に常駐するか、あるいはそれに関連付けることができる。たとえば、メディアコーダが、ビデオデータ、画像データ、オーディオデータまたは音声データの少なくとも1つの符号化および復号化の少なくとも1つに、データ構造によって表される固定長コードを適用することができる。図1〜図3のビデオコーディング例に関して、データ構造は、ビデオエンコーダ20、ビデオデコーダ26またはその両方の内に常駐するか、またはそれに関連付けることができる。たとえば、データ構造は、それぞれ、図2および図3のメモリ47またはメモリ53に記憶できる。ビデオエンコーダ20およびビデオデコーダ26は、データ構造にアクセスして、それぞれ、固定長コードを用いて可変長ワードを符号化し、固定長コードを復号化して、可変長ワードを作り出すことができる。より詳細には、エントロピー符号化ユニット46およびエントロピー復号化ユニット52に関連付けられた1つまたは複数のプロセッサは、たとえば、それぞれのメモリ47および53中のそのようなデータ構造にアクセスして、それぞれ、エントロピー符号化および復号化を実行することができる。
図4および図5ならびに表1の例では、説明しやすいように、VFコーディングツリーは、少数のコードと、相対的に短い長さの入力ワードとを含む。しかしながら、実際には、本開示の様々な態様に従って構成されるVFコーディングツリーは、数百または数千のコードおよび入力ワードを含むことができ、そのうちのいくつかはより長いコードおよび/またはワード長を含むことができる。したがって、VFコードの集合を表すためのメモリ空間の消費が懸念事項であり得る。本開示で説明したように、VFコーディングツリーの代数的性質を利用する数え上げ技法の適用により、メモリ効率の良いデータ構造の使用が可能になり、それによってメモリ空間を節約することができる。たとえば、データ構造は、バッハマンのO記法で、多くともメモリ中の空間量O(L2)を必要とすることが可能であり、ただし、Lは、無記憶ソースのための固定長コードの構成を定義する可変長固定長コーディングツリーの深さである。
バイナリ無記憶ソースのための構成プロシージャを実装するためのコンパクトなデータ構造およびCコードの適用の一例について、以下で説明する。一般に、以下のCコードは、データ構造によって定義されたVFコーディングツリーに一致するVFコードを構成するためのプロセスを略述する。上記で説明したように、データ構造は、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さlと、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の1の数kと、グループ中の固定長コードによって表される可変長ワードの各々の終端シンボルaとを指定することができる。l値およびa値は、下記の例示的なコードにおいて、それぞれ「l」および「a」と示される。
さらに、データ構造は、各グループ中の辞書式第1のワードを表すコードを示すオフセットを指定することができる。各グループ中の辞書式第1のワードは、グループ中の最小ワードとすることができる。しかしながら、他の実装形態では、各グループ中の辞書式第1のワードは、グループ中の最大ワードとすることができる。例示のために、オフセットとして辞書式最小ワードのコードを使用することについて、本開示で説明する。しかしながら、上記で説明したように、オフセットがグループ中の辞書式最大ワードのコードを指定するように、グループの順序を逆転することができる。したがって、この例示的な説明は、本開示で広く説明する技法を限定するものと見なすべきではない。
上記のコードは、ビデオデータ、画像データ、音声データおよび/またはボイスデータを符号化するためのメディアコーディングデバイスなど、コーディングデバイス内に常駐するか、またはそれに関連付けられたプロセッサによって実行できる。代替または追加として、上記のコードは、VFデータ構造と、VFコーディングツリーを定義するコンテンツとを生成するために、そのようなコーディングデバイスとは無関係な1つまたは複数のプロセッサ中で実行できる。「プロセッサ」という用語は、概して、本開示で説明する様々な機能は単一の処理ユニットによって実行できるが、その必要はないという理解の下で、1つまたは複数のプロセッサを指す。したがって、「プロセッサ」という用語は、本明細書では、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、それらの任意の組合せ、または等価集積回路またはディスクリート論理回路の他の組合せなど、様々な形態のいずれかをとることができる単一のプロセッサまたは複数のプロセッサを指すために使用される。
VFコードの数え上げ構成時に、得られたVFデータ構造およびそのコンテンツは、次いで、たとえば、VF符号化、VF復号化、またはその両方を実行するように構成された1つまたは複数のプロセッサがアクセスして使用するための、コーディングデバイスに関連付けられたメモリ中にロードされ得る。たとえば、ビデオエンコーダ20およびビデオデコーダ26内に常駐するか、またはそれに関連付けられたメモリは、それぞれ、符号化および復号化する際に使用するためのデータ構造および関連するコンテンツを記憶することができる。場合によっては、ビデオエンコーダ20およびビデオデコーダ26によって記憶されたデータ構造は、適用可能なとき、符号化または復号化を可能にするために十分な情報を伝達する同じデータ構造か、または異なるデータ構造とすることができる。
上記のコードでは、VFコーディングツリーは、ツリー中に最大L個のレベルを有すると仮定される。VFコーディングデータ構造中のプレフィックス長lは、ツリー中の対応するレベルを同時的に指定する。プレフィックス長lが最大長L以下である間に、プロセッサは、上記のコードを実行し、それぞれのワードのプレフィックス中に複数の0と1つの1とを有するワードについて考える。プロセッサは、倍精度値Pr=pow(p,k)*pow(1−p,1−k)でk個の1をもつ各適用可能なlビットワードの確率を計算し、ここで、pは1の確率である。
確率Prが1/(N*p)よりも大きいかまたはそれに等しい場合、上記のコードを実行しているプロセッサは、VFコーディングツリー内の左拡張部がリーフになるかどうかを確かめるために検査する。たとえば、上記のコードによって示されるように、確率が1/(N*p*p)未満である場合、プロセッサは、l,k,0のグループ、すなわち、プレフィックス長l、プレフィックス中の1の数k、および0の終端シンボルaをもつグループを登録する。l、kおよびaの値は、プロセッサによって、それぞれ、vfcg[j].l、vfcg[j].kおよびvfcg[j].aによって指定されたアレイに記録され、ここで、jはグループ番号またはインデックスであり、vfcgはVFコードグループパラメータのアレイを表す。さらに、プロセッサは、特定のコードの番号であるオフセット値Mをvfcg[j].offsetによって指定されたアレイに記録する。次いで、プロセッサはグループ番号jおよびコード番号Mを増分し、ここで、コード番号Mはlおよびkの二項関数である。
左拡張部がリーフにならない場合、すなわち、Prが1/(N*p*p)以上である場合、プロセッサは、右拡張部がリーフになるかどうかを判断する。例示的なコードでは、プロセッサは、Prが1/(N*p*(1−p))未満であるかどうかを判断する。そうであれば、プロセッサは、l,k,1のグループ、すなわち、プレフィックス長l、プレフィックス中の1の数k、および1の終端シンボルaをもつグループを登録する。次いで、プロセッサは、l値、k値およびa値を、それぞれ、vfcg[j].l、vfcg[j].kおよびvfcg[j].aによって指示されたアレイに記録する。プロセッサはまた、特定のコードの番号であるオフセット値Mをvfcg[j].offsetによって指定されたアレイに記録する。次いで、プロセッサはグループ番号jおよびコード番号Mを増分し、ここで、コード番号Mはlおよびkの二項関数である。プロセスはツリー中の連続するレベル、および連続するグループにわたって続き、中間リーフのvcfg[j]値、およびMのその時点での値に等しい、最終リーフのvcfg[j].offset値を生じる。
次に、本開示に従って構成されたVFコーディングツリーを使用する例示的な符号化プロシージャについて説明する。一般に、符号化プロシージャは、辞書式順序を有する可変長ワードを得ることと、複数の固定長コードの1つを用いて可変長ワードの各々を符号化することとを含むことができる。VFコーディングツリーによれば、固定長コードは、確率が同じであり、終端シンボルが同じである可変長ワードを表す1つまたは複数の固定長コードを各々含むグループに構成される。グループの各々の中の1つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。
可変長ワードを符号化することは、それぞれのグループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さと、それぞれのグループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の1の数と、それぞれのグループ中の固定長コードによって表される可変長ワードの各々の終端シンボルとに基づいて、固定長コードを選択することを備えることができる。VFコーディングツリーを構成するグループのリストに関連付けられたプレフィックス長、1の数、および終端シンボルを、1つまたは複数のデータ構造に記憶することができる。データ構造は、符号化プロシージャ中に検索するための、図2のビデオエンコーダ20などのメディアコーダとすることができる、符号化デバイス内に常駐するメモリ、またはその符号化デバイスによってアクセス可能な他のメモリに記憶できる。より詳細には、符号化デバイスは、図2のエントロピー符号化ユニット46などのエントロピーコーディングデバイスに関連付けられた1つまたは複数のプロセッサとすることができる。
コーディングデバイスは、それぞれのグループ中の辞書式順序付き第1の固定長コードに対する固定長コードの辞書式順序に基づいてグループの各々の中の固定長コードの各々を選択することができる。辞書式順序付き第1の固定長コードは、グループのためのオフセットコードまたは基本コードと見なされ得る。オフセットコードまたは基本コードは、特定のグループ中のコードによって表されるワードのうち辞書式順序付き第1の可変長ワードを表す。オフセットコードまたは基本コードにより、コードグループの第1のインデックス位置にある基本コードに対するコードグループ中のコードのインデックス位置に基づいたコードの計算が可能になる。
一般に、可変長ワードのプレフィックス長と、プレフィックス中の1の数と、終端シンボルとは、それらの特性に関連付けられた固定長コードのグループを選択するために使用できる。グループ中の第1のコード、オフセットコード、または基本コードに関連付けられた可変長ワードの辞書式順序付き位置に対する可変長ワードの辞書式順序付き位置を使用して、コーディングデバイスは、コードのインデックス位置を選択することができる。インデックス位置を使用して、コーディングデバイスは、たとえば、コードのインデックス位置と基本コードのインデックス位置との間の差を基本コードに加算することによって、適切なコードを計算することができる。その結果、可変長入力ワードの正しい固定長コードになる。
上述のように、グループのプレフィックス長と、プレフィックス中の1の数と、終端シンボルとは、メモリに記憶されたデータ構造から記憶できる。特に、数え上げ構成技法の結果として、データ構造によって定義されたグループリストが、バッハマンのO記法で多くともメモリ中の空間量O(L2)を必要とすることが可能であり、ただし、Lは、無記憶ソースのための固定長コードの構成を定義する可変長固定長コーディングツリーの深さである。符号化プロシージャは、一般に、様々なデータに適用可能であるが、いくつかの適用例では、可変長ワードは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの少なくとも1つを表すことができ、符号化プロシージャは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの1つを符号化するために可変長ワードを符号化することをさらに備えることができる。
以下に、本開示で説明するように構成されたデータ構造を使用してVFコードを符号化および復号化するためのプロシージャを実装するためのCコードの例を記載する。簡単のために、符号化および復号化プロシージャについて、一致するグループを識別するための単純な線形探索技法を使用して説明する。符号化および復号化の各場合における探索アイテムの数は、バッハマンの記法で、多くともO(L2)であり、ただし、LはVFコーディングツリーの深さを表す。
特に復号化プロシージャに適用するのが容易であるバイナリサーチの使用により、従来のVFコーディングツリーをパースする(parse)ために通常必要とされるO(L)ステップよりもはるかに速いO(log L)ステップになる。グループXl,k,aに属するワードwのコードを計算するために、符号化プロシージャは、k個の1をもつすべてのlビット長ワードの集合中のwのlビットプレフィックスの辞書式インデックスを計算するように構成できる。このプロセスは、インデックス(l,k,w)として、以下の符号化プロシージャのCコード中に示される。同様に、復号化プロシージャは、k個の1をもつlビットシーケンスの辞書式順序付き集合からi番目のワードを生成するワード(l,k,i)として以下の復号化プロシージャのCコード中に示される、逆プロセスを使用するように構成できる。
VF符号化プロシージャのための例示的なCコードを以下で略述する。
コーディングツリー中のグループのリストを使用したVFコードの符号化
上記のCコードでは、ビデオエンコーダ20または別のメディアエンコーダなど、エンコーダに関連付けられたプロセッサは、符号化すべき入力ワードwを受信し、ただし、i=get_bit(in)は入力ワードwからのビットの読取りを表す。プレフィックスの長さlが、現在のグループに指定されたプレフィックス長vfcg[j].lに等しい場合、プレフィックス中の1の数kは、現在のグループに指定されたvfcg[j].kに等しく、iは、現在のグループに指定された終端ビットvfcg[j].aに等しく、その場合、プロセスは、入力ワードのための一致するコードを発見する。この場合、プロセッサは「found」に進み、ここで、i=index(l,k,w)に従ってプレフィックスの辞書式インデックスを判断し、入力ワードのための適切なVFコードを計算する。
たとえば、プロセッサは、グループ内のプレフィックスの辞書式インデックスに基づいてコードを計算することができる。この場合、コードは、辞書式第1の位置vfcg[j].offset+インデックス値iにあるコードに対応する。したがって、図5を参照すると、現在のグループが(3,1),1グループであり、3つの可能なインデックス位置0、1および2のうちコードの辞書式インデックスが2である場合、コードはオフセット(基本)コード7+インデックス値1であり、コード8に等しい。同様に、インデックス値が2である場合、コードはオフセットまたは基本コード7+2であり、9に等しい。
長さlがプレフィックス長vfcg[j].lに一致しない場合、プロセッサは長さ1(1++)を増分する。プロセッサはまた、kの値をビットi(k+=i)と合計して、ビットIをプレフィックス(w=w*2+i)に加算する。その結果、l番目のビットがプレフィックスに加算される。次いで、プロセッサは、次のレベルのグループにおいて一致があるかどうかを判断するために、探索プロセスを繰り返す。特に、プロセッサは、この場合も、プレフィックスの更新された長さlが、現在のグループに指定されたプレフィックス長vfcg[j].lに等しいかどうか、プレフィックス中の1の更新された数kが、現在のグループに指定されたvfcg[j].kに等しいかどうか、更新された終端ビットiが、現在のグループに指定された終端ビットvfcg[j].aに等しいかどうかを判断する。そうであれば、プロセスは、入力ワードのための一致するコードを発見し、「found」に関して上記で説明したようにコードを生成する。
プロセッサは、関連する固定長コードを生成するために、各可変長入力ワードに対して同じ一般的プロセスを適用することができる。VFコードの数え上げ構成から生じるデータ構造は、全体的なメモリ要件を低減しながら入力ワードの符号化を可能にすることができる。特に、対応するプレフィックス長と、プレフィックス0の数と、終端ビットとをもつグループにコードを構成することは、O(2L)ではなくO(L2)程度のメモリ空間を用いたコードの比較的迅速な生成を可能にする。
次に、本開示に従って構成されたVFコーディングツリーを使用する例示的な復号化プロシージャについて説明する。一般に、符号化プロシージャは、固定長コードを得ることと、辞書式順序を有する可変長ワードを作り出すために固定長コードを復号化することとを備えることができる。本開示で説明する数え上げ構成技法によれば、固定長コードをグループに構成することができる。グループの各々は、確率が同じであり、終端シンボルが同じである可変長ワードを表す1つまたは複数の固定長コードを含む。さらに、グループの各々の中の1つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。
図3のビデオデコーダ26などのメディアデコーダとすることができる復号化デバイスは、VFコーディングツリーの様々な属性を表すデータ構造を使用して固定長コードの各々を復号化することができる。より詳細には、コーディングデバイスは、図2のエントロピー符号化ユニット46などのエントロピー符号化デバイスとすることができる。復号化デバイスは、それぞれの固定長コードを含むグループのうちの1つを、識別されるグループ中の辞書式順序付き第1のコードとのそれぞれのコードの比較に基づいて、識別することができる。そのグループ中の辞書式順序付き第1のコードは、オフセットコードまたは基本コードと見なされ得る。復号化デバイスは、識別されたグループ内の(復号化すべき)それぞれのコードの辞書式インデックスを判断することができる。
たとえば、辞書式インデックスは、それぞれのグループ中のそれぞれのコードと辞書式順序付き第1の基本コードとの間の差に基づいて判断できる。辞書式順序付き第1のコードは、グループ中の固定長コードによって表される可変長ワードの辞書式順序のうち第1の可変長ワードを表し、グループの基本コードと見なされ得る。次いで、復号化デバイスは、識別されたグループ内のそれぞれのコードの辞書式インデックスに基づいて、可変長ワードの各々を生成することができる。たとえば、復号化デバイスは、辞書式インデックスに基づいてそれぞれのコードによって表される可変長ワードのプレフィックスを判断することによって復号化される固定長コードの可変長ワードを生成し、識別されたグループの終端シンボルを判断し、終端シンボルをプレフィックスに付加して可変長ワードを形成することができる。
再び、復号化を可能にするために、グループの各々は、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックスの長さと、グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス中の1の数kと、グループ中の固定長コードによって表される可変長ワードの各々の終端シンボルaとによって定義できる。これらの属性は、コーディングデバイス内に常駐するか、またはそれに関連付けられたメモリ中のデータ構造に記憶できる。
上記で説明したように、データ構造は、バッハマンのO記法で、多くともメモリ中の空間量O(L2)を必要とすることができ、ただし、Lは、無記憶ソースのための固定長コードの構成を定義する可変長固定長コーディングツリーの深さである。符号化プロシージャは、一般に、様々なデータに適用可能であるが、いくつかの適用例では、復号化プロシージャによって生成された可変長ワードは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの少なくとも1つを表すことができる。したがって、復号化プロシージャは、ビデオデータ、画像データ、オーディオデータまたは音声データのうちの1つを表す可変長ワードを作り出すために固定長コードを復号化することをさらに備えることができる。
VF復号化プロシージャのための例示的なCコードを以下で略述する。
コーディングツリー中のグループのリストを使用したVFコードの復号化
上記のCコードでは、ビデオデコーダ26または別のメディアデコーダなど、デコーダに関連付けられたプロセッサは、復号化すべき固定長コードを受信する。プロセッサは、本開示で説明するように構成されたデータ構造を使用して、VFコーディングツリー内のコードを含んでいるグループを探索する。グループインデックスjを使用して、VFコーディングツリー中のグループのリストについて、コードがオフセットコード、すなわち、次の(i+1)グループ中の辞書式第1のコードvfcg[j+1].offsetよりも小さいことが発見されるまで、探索は続く。
適切なグループが発見されるまで、プロセッサはグループインデックスjを増分する。復号化すべき現在のコードが、(i+1)番目のグループのオフセットコードvfcg[j+1].offsetよりも小さいことが発見された場合、プロセッサは、コードがj番目のグループ、すなわち、(i+1)番目のグループの直前に来るグループに属すると判断する。一例として、図5のVFコーディングツリーを参照すると、コードがコード8である場合、プロセッサはコード8を各(i+1)番目のグループのオフセットと比較しながら、jインデックスを増分し続ける。jインデックスが、基本コード10を有する(4,0),1グループを示すまで、コード8は(i+1)番目のグループのオフセットコードよりも小さくならない。この時点で、プロセッサは、コード8がグループ(3,1),1である直前のj番目のグループ中にあると判断する。
次いで、プロセッサは、復号化されているコードからj番目のグループのためのオフセットコードvfcg[j].offsetを減算することによって、コードの辞書式インデックスを判断する。グループ(3,1),1の場合、オフセット。復号化すべきコードがコード8である場合、基本コード7の可能なインデックス0、コード8の可能なインデックス1、およびコード9の可能なインデックス2から、グループ(3,1),1内のコード8のインデックスiは8−7=1である。インデックスiを使用して、プロセッサは、(l,k)集合中のi番目のワードwを生成し、ただし、w=word(vfcg[j].l,vfcg[j].k,i)である。次いで、プロセッサは、ワードwに2を乗算して左に1桁シフトさせ、終端ビットvfcg[j].aを加算することによって、終端ビットを付加する。次いで、固定長コードから作り出された可変長ワードは、たとえば、コマンドput bits(w,vfcg[j].l+1,out)によって出力される。
前述のように、適度に短い、たとえば、12未満または12にほぼ等しいワードの場合、それらの辞書式インデックスの計算(またはそれらのインデックスを使用したワードの合成)は、せいぜい1回のルックアップとすることができる。より長いワードの場合、以下のよく知られている組合せ式を使用することが可能である。
上式で、w
jは、ワードwの個々のビットを表し、すべてのk>1について、
であると仮定する。組合せ式(15)は、たとえば、V.I.Mudrov、「An algorithm for enumeration of combinations」、Vyc. Math. and Math. Phys.、5(4)(1965)776〜778(ロシア)、V.F.Babkin、「A method of universal coding with non-exponent labour consumption」、Probl.Inf.Trans.、1(4)(1971)13〜21(ロシア)、J.P.M.Schalkwijk、「An Algorithm For Source Coding」、IEEE Trans.Inf.Theory、18(3)(1972)、395〜399、T.M.Cover、「Enumerative Sources Encoding」、IEEE Trans.Inf.Theory、19(1)(1973)73〜77、Tj.J.Tjalkens、「The Complexity of Minimum Redundancy Coding」、21−th Symp.Inf.Theory in the Benelux(2000年5月)の会報247〜254、およびT.Tjalkens、「Implementation cost of the Huffman-Shannon-Fano code」、Data Compression Conference(DCC’05)(Snowbird、Utah、2005年3月29〜31日)会報123〜132で説明されている。この組合せ式を実装するために、手法は、パスカルの三角形のレベル1までのすべての二項係数を事前計算するか、または以下の単純な識別情報を使用して動的に二項係数を計算するかのいずれかになろう。
事前計算された係数に基づく実装形態は、一般に
ワードのメモリおよびO(l)加算を必要とする。係数の動的計算は、一般にO(l)加算、乗算および除算を必要とする。しかしながら、プロセス全体は、通常ほんのいくつかのレジスタを必要とする。
図6は、VFコードのメモリ効率の良い構造のための方法を示すフローチャート図である。図6に示す方法は、本開示で説明するVFコード構成技法の一例である。本方法は、図2および図3に示すエントロピー符号化ユニット46およびエントロピー復号化ユニット52が使用するVFコードを構成するために、エンコーダ、デコーダに関連付けられた、または別のデバイスに関連付けられた1つまたは複数のプロセッサによって実装でき、限定はしないが、ビデオ、画像、音声およびオーディオデータを含む、様々なデータのいずれかの圧縮およびコーディングをサポートすることができる。本開示全体にわたって、プロセッサという用語は、1つまたは複数のプロセッサ、および他で詳細に説明するプロセッサの様々なタイプのいずれかを指すことができる。いずれの場合も、そのようなプロセッサを、たとえば、VFコーディングで有用なコード構造属性を定義するデータ構造を準備するために、たとえば、エンコーダもしくはデコーダ内に、または汎用コンピュータシステム内に設けることができる。
図6に示すように、プロセッサは、辞書式順序を有する可変長ワードの集合を得て、そのような可変長ワードを表す固定長コードの集合を生成する(82)。ワードは、それぞれのプレフィックス長、プレフィックス中の1の数、終端シンボル、および確率を有する。プロセッサは、同じ確率と同じ終端シンボルとをもつ可変長ワードを表す固定長コードを含んでいるグループに、固定長コードを構成する(84)。さらに、プロセッサは、グループの各々の中の固定長コードを、それらが表す可変長ワードの辞書式順序で配置する(86)。
プロセッサは、各グループ中の固定長コードによって表される可変長ワードの各々のプレフィックス長を指定する(88)。さらに、プロセッサは、各グループ中の固定長コードによって表される可変長ワードのプレフィックス中の1の数を指定する(90)。プロセッサはまた、各グループ中の固定長コードによって表される可変長ワードに関連付けられた終端シンボルを指定する(92)。プロセッサは、データ構造におけるグループごとに、得られたプレフィックス長と、1の数と、終端シンボルとを記憶する(94)。データ構造は、それぞれ、符号化および復号化プロシージャを可能にするために、VFコーディングツリーを表すために、メモリに記憶され、符号化デバイスまたは復号化デバイスに関連付けられたプロセッサによって使用される。
図7は、図6の方法に従って構成されたVFコードを使用してシンボルを符号化する形態のVFコーディングのための方法を示すフローチャート図である。図7に示す方法は、本開示で説明するVF符号化技法の一例である。図7の方法は、メディア符号化デバイスなど、符号化デバイスに関連付けられたプロセッサ、すなわち、1つまたは複数のプロセッサによって実装できる。メディア符号化デバイスの例には、ビデオエンコーダ20、またはビデオ、画像、音声および/またはボイスデータなどの様々なデータを符号化するのに有用な他のエンコーダがある。
図7の例で示されるように、符号化デバイスは固定長コードで符号化される可変長ワードを得る(96)。可変長ワードは、特定の辞書式順序を有するワードの入力集合の部分を形成することができる。さらに、ワードは、関連するプレフィックス長と、プレフィックス中の1の数と、終端シンボルと、たとえば、表1の例に示した確率とを有することができる。可変長ワードを符号化するために、符号化デバイスは、本開示で説明するように、たとえば、VFコーディングツリー内の固定長コードグループに関してコード構造を定義するデータ構造にアクセスする(98)。
データ構造を使用して、符号化デバイスは、コーディングツリー中のコードのグループのうちの1つを選択することができる。たとえば、符号化デバイスは、符号化すべき可変長ワードのプレフィックス長と、プレフィックス中の1の数と、終端シンボルとに基づいて、グループのうちの1つを選択する(100)。次いで、符号化デバイスは、選択されたグループ中の固定長コードのうちの1つを選択することができる。たとえば、符号化デバイスは、選択されたコードグループ内の辞書式順序に基づいて、選択されたグループ中の固定長コードのうちの1つを選択する(102)。
一例として、コードは、それらが表すワードの辞書式順序で配置できる。したがって、グループ中の適切なコードの位置は、選択されたグループ中のコードによって表される他の可変長ワードに対する、符号化すべき可変長ワードのプレフィックスの辞書式位置、または「インデックス」によって判断できる。この辞書式インデックスを使用して、符号化デバイスは、選択された固定長コードを使用して、可変長ワードを符号化する(104)。符号化デバイスは、グループのための辞書式順序付き第1のコード、すなわち、基本コードを判断し、次いで、基本コードに、基本コードによって表されるワードのインデックスと符号化すべきワードのインデックスとの間の差、または基本ワードインデックスが0である場合、単にそのインデックスを加算することができる。
この例では、符号化デバイスは、基本コードと、符号化すべきワードの辞書式インデックスとの和としてワードを符号化する。前述のように、図5を参照すると、現在のグループが(3,1),1グループであり、3つの可能なインデックス位置0、1および2のうちコードの辞書式インデックスが2である場合、コードはオフセットコード7+インデックス値1であり、コード8に等しい。同様に、インデックス値が2である場合、コードはオフセットコード7+2であり、9に等しい。各場合において、メモリ効率の良いデータ構造に記憶された属性は、VFコーディングツリーに従って固定長コードへの可変長ワードの符号化を可能にする。
図8は、図6の方法に従って構成されたVFコードを復号化するための方法の形態のVFコーディングを示すフローチャート図である。図8に示す方法は、本開示で説明するVF復号化技法の一例である。図8の方法は、メディア復号化デバイスなど、復号化デバイスに関連付けられたプロセッサ、すなわち、1つまたは複数のプロセッサによって実装できる。メディア復号化デバイスの例には、ビデオデコーダ26、またはビデオ、画像、音声および/またはボイスデータなどの様々なデータを復号化するのに有用な他のデコーダがある。
図8に示すように、復号化デバイスは、復号化すべき固定長コードを得て(106)、そのコードによって表される対応する可変長ワードを作り出す。復号化デバイスは、VFコーディングツリーに従ってコードグループを定義するデータ構造にアクセスする(108)。データ構造は、グループの各々の中の固定長コードによって表される可変長ワードのプレフィックス長と、プレフィックス中の1の数と、終端シンボルと、確率とを指定することができる。データ構造を使用して、固定長コードを復号化するために、復号化デバイスは、ツリー中のグループの基本コードとの固定長コードの比較に基づいてグループを選択する(110)。
たとえば、復号化デバイスは、ツリー中のjグループに関連付けられた基本コードによってトップダウン型探索を行うことができる。復号化デバイスが復号化すべきコードよりも大きい基本コードを識別すると、探索は終了する。識別された基本コードに関連付けられたグループは(j+1)番目のグループであり、その場合、復号化すべきコードはj番目のグループに属する。一例として、図5を参照すると、復号化すべき固定長コードがコード9である場合、探索は第1のグループで開始するグループの各々について基本コードを検査する。探索がグループ(3,0),1に到達すると、コード10はコード9よりも大きく、したがって、グループ中のコードによって表されるワードの辞書式順序に従ったグループの順序を仮定すれば、コード9は、グループ(3,1),1である直前のグループに属すると判断する。
グループを選択すると、復号化デバイスは、グループの基本コードとのコードの比較によって、選択されたグループ内のコードの辞書式インデックスを判断する(112)。グループ(3,1),1の基本コードが7であり、復号化すべきコードが9である場合、コード9の辞書式インデックスは2、すなわち、7と9との間の差である。コードの辞書式インデックスを使用して、復号化デバイスは対応する可変長ワードを生成する。たとえば、復号化デバイスは、コードの辞書式インデックスに基づいた可変長ワードと、グループの基本コードによって表される可変長ワードとを生成する(114)。
したがって、図5を参照すると、基本コード7が001のプレフィックスを有する可変長ワード0011を表し、コード8の辞書式インデックスが1である場合、復号化デバイスは、1のインデックスをプレフィックス001に加算して、010を作り出すことができる。次いで、復号化デバイスは、グループの終端ビット(1)を付加して、固定長コード8の0101の可変長ワードを作り出すことができる。次いで、復号化デバイスは、生成された可変長ワードを使用して、固定長コードを復号化する(116)。言い換えれば、復号化デバイスは、固定長コード、たとえば、この例ではコード8の復号化された出力として、生成された可変長ワード、たとえば、この例では0101を出力する。
コード構造は、本開示で説明するように、メモリまたはデータ記憶媒体を含む様々なコンピュータ可読媒体のいずれかに記憶されたデータ構造によって定義できる。たとえば、コンピュータ可読媒体は、辞書式順序を有する可変長ワードを表す固定長コードの集合を表す、データ構造を備えることができる。固定長コードはグループに構成され、ただし、グループの各々は、確率が同じであり、終端シンボルが同じである可変長ワードを表す1つまたは複数の固定長コードを含む。さらに、グループの各々の中の1つまたは複数の固定長コードは、それらが表す可変長ワードの辞書式順序で配置される。
本開示によれば、VFコードのパーシングのための技法が提供される。以下で説明される例は、図5のVFコーディングツリーのVFコードを使用する。説明されるパーシング技法とともに他のVFコードが使用できることを当業者なら認識されよう。VFコードは、複数の固定長コード(たとえば、1,2,5,7,8)からなる圧縮されたビットストリーム中の任意の固定長コードにアクセスすること(および直接復号化すること)を可能にする。圧縮されたビットストリームは、複数の可変長ワード(たとえば、011,101,0100,0011,0101)からなる圧縮されていないビットストリームの符号化表現とすることができる。しかしながら、圧縮されていないビットストリーム中の作り出された可変長ワードに先行するビットがわからないので、圧縮されていないビットストリーム中の作り出された可変長ワードの位置はわからない。たとえば、例示的なシーケンス中の固定長コード2を復号化して、ワード101を作り出すことができる。しかしながら、例示的なシーケンス中の2の前に来る固定長コード1を復号化することなしに、圧縮されていないビットストリーム中のどの位置にワード101が属するかはわからない。ワード101の位置を判断するための1つの方法は、固定長コード1を復号化して、ワード011を作り出すことであろう。したがって、ワード011の長さが3であるので、ワード101の位置は圧縮されていないビットストリームの4番目のビットにおいて開始すると判断される。バッハマンのO記法で、VFコードを復号化するための複雑度はO(D)であり、ただし、Dは、予想される復号化フレーズ長である。
しかしながら、圧縮されていないビットストリーム中の可変長ワードの位置を判断するためには、復号化されるために任意に選択された固定長コードの前に来る固定長コードに対応するワードの長さを知るだけでよい。圧縮されたストリームをパーシングする提供される技法は、固定長コードが復号化されることを必要とせず、圧縮されたストリーム中の固定長コードの各々に関連付けられた可変長ワードの長さを与える。いくつかの実施形態では、説明するパーシング技法は、標準探索アルゴリズムとともに使用できる。したがって、パーシング技法の複雑度は、たとえば、補間探索アルゴリズムが使用されるときは約O(log(log(D)))、またはバイナリ探索アルゴリズムが使用されるときはO(log(D))とすることができる。
VFパーシングプロシージャのための例示的な擬似コードを以下で略述する。例示的なプロシージャは、上記で説明した基本コードを選択し、基本コードに対応するコードインデックスを作り出す。インデックスは、アレイlevel_offset[]に記憶される。
レベルごとの基本コードのリストを使用したVFコードのパーシング
各レベルの基本コードのリストを使用してVFコードをパーシングするための例示的なアルゴリズムを以下に示す。この擬似コードは、VFコードに対応するワードの長さを識別するために、基本コードのアレイにおける単純な連続探索を使用する。探索は連続的であるので、この例示的なアルゴリズムの複雑度は線形O(l)であり、ここで、lは符号化シーケンスの長さである。
提案されたデータ構造はまた、VFコードのより高速なパーシング技法をサポートする。level_offset[]は本質的にコード値の順序付きアレイであるので、たとえば、アレイの二分探索(dichotomic search)を実行することができる。二分探索を利用する例示的な高速パーシングルーチンのための擬似コードを以下に示す。
二分探索は、O(l)演算からわずかO(log l)演算にパーシングの複雑度を低減し、ここで、lは符号化シーケンスの長さである。そのようなアルゴリズムは、任意の実現可能な完全復号化プロセスよりもはるかに速い劣線形時間でVFコードをパースすることができる。
VFコードのパーシングの速度のさらなる改善が、上述のデータ構造によって十分にサポートされることを認識されたい。たとえば、補間探索アルゴリズムは、ワード長の位置特定のために使用できる。そのようなアルゴリズムの複雑度は、ほぼO(log log l)である。そのような探索アルゴリズムの例は、G.H.Gonnet、「Handbook of algorithms and data structures」、Addison−Wesley、1984、35〜37ページなど、アルゴリズムのテキストブックに記載されている。
パーシング技法の一実施形態を、図5のVFコードツリーに関して説明する。本技法は、所与のVFコードツリーのための基本コードワードの集合を生成することを必要とする。基本コードワードは、所与のVFコードにおいて使用される固定長コードの集合の部分集合である。単一の基本コードワードは、少なくとも1つの外部ノードを含んでいるVFコードツリーのレベルごとに選択される。いくつかの実施形態では、VFコードツリーの特定のレベルにある第1の辞書式順序付き固定長コードが、そのレベルの基本コードワードである。たとえば、図5のVFコードツリーの基本コードワードは、{0、1、3、10、11、12、13、14、および15}である。他の実施形態では、基本コードワードは、VFコードツリーの特定のレベルにある第1の辞書式順序付きグループとすることができる。たとえば、図5のVFコードツリーの基本コードワードは、{(1,1),1、(2,1),1、(3,0),1、(4,0),1、(5,0),1、(6,0),1、(7,0),1、(8,0),1、および(9,0),0}である。次いで、基本コードワードは、辞書式順序でリスト中に配置される。リストは、リンクされたリスト、アレイ、または他の好適なデータ構造としてメモリ53に記憶できる。
いくつかの実施形態では、基本コードワードを、復号化基本コードワードに対応するワードの長さに関連付けることができる。所与の固定長コードに関連付けられた可変長ワードの長さは、VFツリー上で固定長コードが位置を特定されたレベルである。したがって、所与の基本コードワードに関連付けられた可変長ワードの長さは、VFツリー上の基本コードワードと同じレベルにある各固定長コードに関連付けられた各可変長ワードの長さに等しい。この性質を利用して、固定長コードに関連付けられた可変長ワードの長さは、固定長コードと同じ、VFツリーのレベル上の基本コードワードに関連付けられた可変長ワードの長さを判断することによって判断できる。
本開示の復号化デバイスの一実施形態では、復号化デバイスは、所与のVFコードツリーのレベルに関連付けられた基本コードワードのリストを通して探索を行うことができる。復号化デバイスがパースすべきコードよりも大きい基本コードワードを識別すると探索は終了し、ただし識別された基本コードワードはリスト上の位置xにある。次いで、復号化デバイスは、リスト上の位置x−1にある、識別された基本コードワードよりも小さい最大基本コードワードを見ることができる。この基本コードワードは、パースすべきコードに関連付けられた可変長ワードと同じ長さの可変長ワードに関連付けられている。たとえば、図5のVFツリーの基本コードワードのリストは、(0、1、3、10、11、12、13、14、15)とすることができる。9が復号化すべきコードである場合、基本コードワード10が発見されるまで復号化デバイスは探索する。その場合、基本コードワード3は、10よりも小さい最大基本コードワードである。基本コードワード3はサイズ4の可変長ワードに関連付けられており、したがって、コード9に関連付けられた可変長ワードの長さも4である。
各固定長コードに関連付けられた可変長ワードの長さを記憶する必要がないことにより、メモリ効率が得られる。むしろ、基本コードワードごとに関連情報のみを記憶する必要がある。さらに、固定長コードをそれぞれ復号化することとは対照的に、固定長コードをパーシングすることによって位置を判断することができるので、圧縮されていないビットストリーム中のワードの位置を判断する際の効率が得られる。
いくつかの実施形態では、圧縮されたビットストリームは複数のセグメントに分割される。各セグメントは、1つまたは複数の固定長コードを含むことができる。いくつかの実施形態では、各セグメントは同数の固定長コードを含む。他の実施形態では、異なるセグメントは、異なる数の固定長コードを含むことができる。いくつかのそのような実施形態では、各セグメントは、選択されたセグメントの前に来る圧縮されたビットストリームの部分に関連付けられた圧縮されていないビットストリームの長さに関連付けられる。たとえば、圧縮されたビットストリーム2,3,4,5,2,3,4,2,1は、3つのセグメント{(2,3,4);(5,2,3);(4,2,1)}に分割できる。第1のセグメント(2,3,4)の前に圧縮されたビットストリームの部分はないので、第1のセグメントは0に関連付けられる。第2のセグメント(5,2,3)は、11に関連付けられる。これは、第2のセグメントの前の圧縮されたビットストリームの部分が(2,3,4)であり、その復号化結果が圧縮されていないビットストリーム10100010011になり、11の長さを有するからである。そのような実施形態では、ランダムに選択された固定長コードに対応するワードの位置を発見するために、選択されたコードの前に来る各固定長コードをパースする必要はなく、選択されたコードと同じセグメント中の選択されたコードの前に来る固定長コードをのみパースする必要がある。これは、セグメントの長さを記憶するために余分のメモリを必要とするが、パースされる必要がある固定長コードの数を低減する。
図9は、図6の方法に従って構成されたVFコードを復号化するための別の方法の形態のVFコーディングを示すフローチャート図である。プロセス900は、圧縮されたビットストリームからランダムに選択された固定長コードが復号化され、対応する圧縮されていないビットストリーム中に配置される方法の一実施形態である。いくつかの実施形態では、プロセス900は、エントロピー復号化ユニット52によって実行できる。ステップ902において、圧縮されたビットストリームから固定長コードを選択する。たとえば、選択された固定長コードは、ビデオストリーム中のビデオのランダムフレームを表すデータに対応することができる。次のステップ904において、選択された固定長コードがある圧縮されたビットストリームのセグメントを判断する。さらなるステップ906において、選択された固定長コードの前に来る圧縮されたビットストリームの部分に対応する圧縮されていないビットストリームの長さを判断する。上記で説明したように、いくつかの実施形態では、この長さ値はメモリ53に記憶され、ステップ906は、メモリ53から長さ値を取り出すことを備える。ステップ908に進んで、そのセグメントについて、選択された固定長コードの前に来る各固定長コードに対応する各ワードの長さを判断する。一実施形態では、長さは、図10に関して以下で説明するプロセス1000によって判断される。次のステップ910において、固定長コードを復号化して、対応するワードを生成する。いくつかの実施形態では、復号化は、図8に関して説明した方法によって実行される。さらに、ステップ912において、圧縮されていないビットストリーム中のワードの位置を判断する。位置は、ステップ906において発見された長さ値を、ステップ908において発見された長さ値の各々と加算することによって判断される。圧縮されていないビットストリーム中のワードの開始位置は、合計された値+1に等しい。いくつかの実施形態では、ワードの位置は、ビデオのストリーム中のビデオのフレームの位置とすることができる。
いくつかの実施形態では、圧縮されたビットストリームはセグメントに分割されず、ステップ904〜906はプロセス900から省略されることに留意されたい。
図10は、図6の方法に従って構成されたVFコードに対応するワードの長さを判断するための方法の形態のVFパーシングを示すプロセス1000のフローチャート図である。いくつかの実施形態では、プロセス1000は、エントロピー復号化ユニット52によって実行される。ステップ1002において、固定長コードを得る。次のステップ1004において、上記で説明した基本コードワードを記憶するデータ構造にアクセスする。さらなるステップ1006において、データ構造中の基本コードワードとの固定長コードの比較に基づいてデータ構造から基本コードワードを選択する。選択された基本コードワードは、固定長コードよりも小さい辞書式最大基本コードワードである。次のステップ1008において、固定長コードに対応する可変長ワードの長さを判断する。長さは、基本コードワードに関連付けられた可変長ワードの長さに等しい。いくつかの実施形態では、長さは基本コードワードの構造に記憶される。そのような実施形態では、判断は、メモリから長さを取り出すことを備える。
情報および信号は様々な異なる技術および技法のいずれかを使用して表すことができることを、当業者は理解されよう。たとえば、上記の説明全体にわたって言及されるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界または磁性粒子、光場または光学粒子、あるいはそれらの任意の組合せによって表すことができる。
さらに、本明細書で開示する実施形態に関連して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装できることを、当業者は諒解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップを、上記では概してそれらの機能に関して説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装することができるが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈すべきではない。
本明細書で説明した技術は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装できる。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセットおよび他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスなど、様々なデバイスのいずれかに実装できる。モジュールまたは構成要素として説明する特徴は、集積論理デバイスに一緒に、またはディスクリートであるが相互運用可能な論理デバイスとして別々に実装できる。ソフトウェアで実装した場合、これらの技法は、実行されると、上記で説明した方法の1つまたは複数を実行する命令を含むプログラムコードを備えるコンピュータ可読データ記憶媒体によって少なくとも部分的に実現できる。コンピュータ可読データ記憶媒体は、パッケージング材料を含むことがある、コンピュータプログラム製品の一部をなすことができる。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、磁気または光学データ記憶媒体など、メモリまたはデータ記憶媒体を備えることができる。本技法は、追加または代替として、伝搬信号または電波など、命令またはデータ構造の形態でプログラムコードを搬送または伝達し、コンピュータによってアクセス、読取り、および/または実行できるコンピュータ可読通信媒体によって、少なくとも部分的に実現できる。
プログラムコードは、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、または他の等価の集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサを含むことができるプロセッサによって実行できる。そのようなプロセッサは、本開示で説明する技法のいずれかを実行するように構成できる。汎用プロセッサはマイクロプロセッサとすることができるが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態マシンとすることができる。プロセッサは、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装することもできる。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、前述の構造の任意の組合せ、または本明細書で説明する技法の実装に好適な他の構造または装置のいずれかを指す。さらに、いくつかの態様では、本明細書で説明する機能を、符号化および復号化のために構成された専用のソフトウェアモジュールまたはハードウェアモジュール内に提供することができ、または複合ビデオエンコーダ/デコーダ(コーデック)に組み込むことができる。
本発明の様々な実施形態について説明した。これらおよび他の実施形態は以下の特許請求の範囲内に入る。
以下に本願出願の当初の特許請求の範囲について記載された発明を付記する。
[1]
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶することと、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに1つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択することと、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断することと、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断することと、
を備える方法。
[2]
固定長コードを含む前記可変長固定長コードツリーのレベルごとの前記基本コードワードは、固定長コードを含む前記可変長固定長コードツリーの各レベルにある最小固定長コードを表す、
[1]に記載の方法。
[3]
前記データ構造がアレイを備える、
[1]に記載の方法。
[4]
前記データ構造がリンクされたリストを備える、
[1]に記載の方法。
[5]
前記データ構造がバイナリサーチツリーを備える、
[1]に記載の方法。
[6]
前記データ構造がデジタルサーチツリーを備える、
[1]に記載の方法。
[7]
前記選択された固定長コードに関連付けられたセグメントを判断することをさらに備える、
[1]に記載の方法。
[8]
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
[1]に記載の方法。
[9]
辞書式順序の基本コードワードのリストを表すデータ構造を記憶する
ように構成されたメモリと、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに1つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択し、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断し、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断する
ように構成されたプロセッサと、
を備える装置。
[10]
固定長コードを含む前記可変長固定長コードツリーのレベルごとの前記基本コードワードは、固定長コードを含む前記可変長固定長コードツリーの各レベルにある最小固定長コードを表す、
[9]に記載の装置。
[11]
前記データ構造がアレイを備える、
[9]に記載の装置。
[12]
前記データ構造がリンクされたリストを備える、
[9]に記載の装置。
[13]
前記データ構造がバイナリサーチツリーを備える、
[9]に記載の装置。
[14]
前記データ構造がデジタルサーチツリーを備える、
[9]に記載の装置。
[15]
前記プロセッサが、前記選択された固定長コードに関連付けられたセグメントを判断するようにさらに構成された、
[9]に記載の装置。
[16]
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
[9]に記載の装置。
[17]
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶するための手段と、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに1つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択するための手段と、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断するための手段と、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断するための手段と、
を備える装置。
[18]
固定長コードを含む前記可変長固定長コードツリーのレベルごとの前記基本コードワードは、固定長コードを含む前記可変長固定長コードツリーの各レベルにある最小固定長コードを表す、
[17]に記載の装置。
[19]
前記データ構造がアレイを備える、
[17]に記載の装置。
[20]
前記データ構造がリンクされたリストを備える、
[17]に記載の装置。
[21]
前記データ構造がバイナリサーチツリーを備える、
[17]に記載の装置。
[22]
前記データ構造がデジタルサーチツリーを備える、
[17]に記載の装置。
[23]
前記選択された固定長コードに関連付けられたセグメントを判断するための手段をさらに備える、
[17]に記載の装置。
[24]
前記圧縮されたデータセットが圧縮されたビデオストリームを備える、
[17]に記載の装置。
[25]
辞書式順序の基本コードワードのリストを表すデータ構造をメモリに記憶することと、ここで、固定長コードを含む可変長固定長コードツリーのレベルごとに1つの基本コードワードがある、
複数の固定長コードを備える圧縮されたデータセットから固定長コードを選択することと、
前記選択された固定長コードに関連付けられた前記基本コードワードを判断することと、
前記選択された固定長コードに関連付けられた前記基本コードワードに基づいて、前記選択された固定長コードによって表されるワードの長さを判断することと、
を備える方法を実行する場合の命令を備える、
コンピュータ可読媒体。