(57)【特許請求の範囲】
【請求項１】
ＪＰＥＧ（ジョイントフォトグラフィックエキスパートグループ）画像ファイルにおけるハフマン符号を復号する方法であって、
前記ＪＰＥＧ画像ファイルのビットストリームからビットストリームサンプルを取得するステップと、
異なるビット長の複数のハフマングループからハフマングループを特定するために、基本テーブルにアクセスすることによって前記ビットストリームサンプルを複数の閾値と比較するステップであって、該基本テーブルは、前記複数のハフマングループの各々について、該ハフマングループのビット長を示すビット長情報、該ハフマングループにおける最小のハフマンシンボルを特定する閾値と、二次テーブルからシンボル値を取得する際に使用されるオフセットアドレスと、を格納している、該ステップと、
特定された前記ハフマングループのオフセットアドレスを前記基本テーブルから取り出すステップと、
特定された前記ハフマングループのビット長情報を使用して、前記ビットストリームから現在のハフマンシンボルを抽出するステップと、
前記現在のハフマンシンボル及び特定された前記ハフマングループのオフセットアドレスを使用して、二次テーブルからシンボル値を取得するステップであって、前記二次テーブルは、前記複数のハフマングループの各々について、該ハフマングループのオフセットアドレスからハフマンシンボルのシンボル値を格納している、該ステップと、
を含み、
前記複数の閾値は、前記ビットストリームからの前記ビットストリームサンプルと長さを等しくするためにゼロでパディングされている、方法。
【請求項２】
前記ビットストリームサンプルを取得するステップは、
前記ビットストリームサンプルを取得するために前記ビットストリームに対してスキャンオペレーションを行うステップと、
前記ビットストリームサンプルをメモリバッファにロードするステップと、
を含む、請求項１に記載の方法。
【請求項３】
ＪＰＥＧ（ジョイントフォトグラフィックエキスパートグループ）画像ファイルにおけるハフマン符号を復号するためのシステムであって、
前記ＪＰＥＧ画像に対するオペレーションを行うための制御モジュールと、
前記制御モジュールに結合され、前記ＪＰＥＧ画像ファイルに含まれるハフマンテーブル情報であり基本テーブル及び二次テーブルを生成するための該ハフマンテーブル情報から該基本テーブル及び該二次テーブルを生成するハフマンテーブル生成器であって、該基本テーブルは、異なるビット長の複数のハフマングループの各々について、該ハフマングループのビット長を示すビット長情報、該ハフマングループにおける最小のハフマンシンボルを特定する閾値と、二次テーブルからシンボル値を取得する際に使用されるオフセットアドレスと、を格納しており、該二次テーブルは、前記複数のハフマングループの各々について、該ハフマングループのオフセットアドレスからハフマンシンボルのシンボル値を格納している、該ハフマンテーブル生成器と、
前記制御モジュールに結合されたビットストリームバッファであって、前記ＪＰＥＧ画像ファイルに含まれる画像データからのデータ抜粋を格納するための該ビットストリームバッファと、
前記制御モジュールに結合された複数の閾値比較器であって、前記複数の閾値と前記データ抜粋とを比較することによって現在のハフマンシンボルに対応するハフマングループを特定するための該複数の閾値比較器と、
を備え、
前記制御モジュールが、前記閾値比較器によって特定された前記ハフマングループのオフセットアドレスを前記基本テーブルから取得し、取得した該オフセットアドレスを使用して前記現在のハフマンシンボルに対応するシンボル値を前記二次テーブルから取得し、
前記複数の閾値は、前記データ抜粋と長さを等しくするためにゼロでパディングされている、システム。
【請求項４】
前記複数のハフマングループは、１６個のハフマングループを備える、請求項３に記載のシステム。
【請求項５】
前記基本テーブル及び前記二次テーブルは、前記ＪＰＥＧ画像ファイルに含まれているハフマンテーブル情報から生成される、請求項１に記載の方法。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本発明の実施形態は、ＪＰＥＧ（ジョイントフォトグラフィックエキスパートグループ）画像ファイルで使用される可変長符号（ＶＬＣ）の復号に関するものである。
【関連技術の説明】
【０００２】
[0002]コンピューティングアプリケーションでは、可変長符号化（ＶＬＣ）の符号化方式によって可逆的データ圧縮が可能となっている。一般に、ＶＬＣ符号化方式は、確率論的手法を利用する。この手法では、より頻度の大きいシンボルを表現するために必要なビット数が、より頻度の低いシンボルを表現するために必要なビット数より少なくて済む。ＶＬＣ符号化は、コンピューティングにおいて広く用いられており、特に、非圧縮情報がその圧縮情報よりもはるかに大きい記憶空間を必要とする画像、音楽、ビデオ等のようなメディアアプリケーションにおいて使用されている。
【０００３】
[0003]ＶＬＣ符号化方式の一つにハフマン符号化がある。ハフマン符号化は、データを圧縮する極めて有効な手段であり、特に、ソースマテリアル内の値の出現を利用して、ハフマン木における各シンボル値がどこに出現するべきかを決定することにより、圧縮すべきアイテムが、対応するハフマン木の生成を支援するように使用される場合に有効である。ハフマン符号化はまた、接頭符号と呼ばれることもあるプレフィックスフリー符号（語頭符号）を生成すること、即ち、ハフマン木によって生成されるシンボルは、そのハフマン木によって生成される他の如何なるシンボルの接頭部に対応しないという利点がある。
【０００４】
[0004]ハフマン符号化は、様々なメディアアプリケーションで広く用いられており、特に、ＪＰＥＧ（ジョイントフォトグラフィックエキスパートグループ）画像ファイル形式において用いられている。ハフマン符号化は全てのＪＰＥＧで使用されるので、各ＪＰＥＧビューワは、画像を圧縮解除するためにハフマン符号化の処理をする必要がある。ＪＰＥＧビューワがハフマン符号化をより効率的に処理できると、符号化処理がより速くなる。
【０００５】
[0005]ＪＰＥＧ規格では、各画像に対して異なるハフマンテーブルを準備することができる。画像における全値の出現頻度を決定し、それら頻度を使用して、その画像の固有のハフマンテーブルを生成する。したがって、ビューワがＪＰＥＧ画像を復号するために、ハフマンテーブルの再構成に必要な情報が、ファイルそれ自体にファイルヘッダとして含まれる。
【発明の概要】
【０００６】
[0006]ＪＰＥＧ画像におけるハフマンシンボルを復号する手法について説明する。一つの手法は、ＪＰＥＧ画像ファイルにおけるハフマン符号を復号する方法に関するものである。この方法は、ＪＰＥＧ画像ファイルに関連付けられたビットストリームからビットストリームサンプルを取得することを含む。ビットストリームサンプルは、ハフマングループ番号を特定するために閾値と比較される。ハフマングループに関連付けられた情報が取り出され、ビットストリームから現在のハフマンシンボルを抽出するために使用される。次いで、対応するシンボル値を、現在のハフマンシンボル及びグループ情報を使用して取得することができる。
【０００７】
[0007]ＪＰＥＧファイルにおけるハフマン符号を復号するためのシステムを使用する別の手法についても説明する。このシステムは、ＪＰＥＧ画像ファイルに対するオペレーション（走査を実行するための制御モジュールを含む。ハフマンテーブル生成器が、ＪＰＥＧ画像ファイルに含まれる情報から基本テーブル及び二次テーブルを生成するために使用される。次いで、ビットストリームバッファを使用して、ＪＰＥＧ画像ファイルに含まれる画像データからデータ抜粋を格納することができ、複数の閾値比較器を使用して、現在のハフマンシンボルに対応するハフマングループを特定する。制御モジュールは、ハフマングループに関連付けられたグループ情報を取得し、このグループ情報を使用して、現在のハフマンシンボルに対応するシンボル値を取得することができる。
【０００８】
[0008]更に他の手法として、ＪＰＥＧ画像ファイルにおけるハフマン可変長符号を復号する方法を述べる。この方法は、ＪＰＥＧ画像ファイルに関連付けられたビットストリームから１６ビットをスキャンしてビットストリームバッファ内に取り込むことを含む。現在のハフマンシンボルに対応するハフマングループが特定され、このハフマングループに関連付けられたグループ情報が基本テーブルから取り出される。このグループ情報を参照して、現在のハフマンシンボルのシンボル値が二次テーブルから取得される。
【０００９】
[0009]添付の図面は、本明細書に組み込まれその一部となるものであり、本発明の実施形態を示しており、本明細書の説明と共に本発明の原理を説明する役目を果たしている。
【発明を実施するための最良の形態】
【００１０】
[0019]ここで、本発明の幾つかの実施形態を詳細に示す。代替的な実施形態と共に本発明を説明するが、本発明がこれらの実施形態に限定されるものではないことは理解されよう。それどころか、本発明は、添付の特許請求の範囲で定義される本発明の趣旨及び範囲に含まれうる代替形態、修正形態、及び均等物を含むものである。
【００１１】
[0020]さらに、以下の詳細な説明においては、特許請求の範囲に記載された主題の完全な理解のために多数の具体的な細部を示す。しかしながら、これら特定の細部又はそれらの均等物なしに実施形態が実施され得ることが当業者には認識されよう。他の例では、周知の方法、手順、構成要素、及び回路については詳細には述べていないが、これは、本発明の主題の態様及び特徴を不必要に分かりにくくしないためである。
【００１２】
[0021]以下の詳細な説明の幾つかの部分を、方法の観点で提示して論じる。この方法の動作を説明する添付の図面（例えば、図５）には、そのステップ及びシーケンスが開示されているが、このようなステップ及びシーケンスは例示的なものである。実施形態は、添付の図面のフローチャートに記載されるステップの変形形態や他の様々なステップ、並びに本明細書に記載される以外のシーケンスにおける様々なステップを実施するのにも適する。
【００１３】
[0022]詳細な説明の幾つかの部分は、手順、ステップ、論理ブロック、処理、及び、コンピュータメモリ上で実行されうるデータビットに対する操作の他の記号表現として提示される。これらの記述及び表現は、データ処理技術の当業者がその作業の内容を最も効果的に他のデータ処理技術の当業者に伝えるために使用する手段である。手順、コンピュータ実行ステップ、論理ブロック、及びプロセス等は、本明細書においても、また一般的にも、望ましい結果を導く一連の首尾一貫したステップ又は命令として考えられる。これらのステップは、物理量の物理的操作を要するステップである。必須ではないが通常は、これらの量は、コンピュータシステムにおいて格納、転送、結合、比較、及び他の操作がなされ得る電気又は磁気信号の形態をとる。これらの信号を、主に一般的な用法であるという理由で、ビット、値、要素、シンボル、文字、項、又は番号などとして呼ぶことが時として好都合であることが分かっている。
【００１４】
[0023]しかし、上記及び類似の用語の全ては、該当する物理量に関連付けられるべきであり、これらの物理量に適用される便利なラベルに過ぎないことに留意する必要がある。以下の説明において明らかなように、特にことわりがない限り、「アクセス」、「書き込み」、「含有」、「格納」、「送信」、「トラバース」、「関連付け」、「識別」などの用語を使用する説明は、全体を通して、コンピュータシステム又は類似の電子計算デバイスの動作及びプロセスを指していることを理解されたい。それらは、コンピュータシステムのレジスタ及びメモリにおける物理量（電子的量）として表現されるデータを操作して、同様にコンピュータシステムのメモリ又はレジスタ、或いは他のそうした情報記憶装置、伝送装置、又は表示装置における物理量として表現される他のデータに変形するものである。
【００１５】
[0024]計算デバイスは通常、少なくとも何らかの形態のコンピュータ可読媒体を含む。コンピュータ可読媒体は、計算デバイスによってアクセスできる任意の利用可能な媒体とすることができる。コンピュータ可読媒体としては、限定するものではないが、例として、コンピュータ記憶媒体及び通信媒体がある。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、また他のデータ等の情報を格納するための任意の方法又は技術で実装された揮発性及び不揮発性のリムーバブル及び非リムーバブルの媒体を含む。コンピュータ記憶媒体は、以下に限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、又は他のメモリ技術、或いは、ＣＤ−ＲＯＭ、ＤＶＤ（デジタル多用途ディスク）、又は他の光ストレージ、或いは、磁気カセット、磁気テープ、磁気ディスクストレージ、又は他の磁気記憶装置、或いは、所望の情報を格納するために使用することができコンピューティングデバイスによってアクセスすることができる他の任意の媒体を含む。通信媒体は、通常、搬送波又は他の移送メカニズムなどの変調されたデータ信号としてコンピュータ可読命令、データ構造、プログラムモジュール、又は他のデータを具体化し、また任意の情報送達媒体を含む。用語「変調されたデータ信号」は、信号内で情報を符号化するように一つ又は複数の信号特性が設定又は変更された信号を意味する。通信媒体には、限定ではなく例として、有線ネットワーク又は直接配線接続などの有線媒体、並びに、音響、ＲＦ、赤外線、及び他の無線媒体などの無線媒体が含まれる。上記の任意の組合せも、コンピュータ可読媒体の範囲に含まれるものとする。
【００１６】
[0025]幾つかの実施形態は、一以上のコンピュータ又は他の装置で実行されるプログラムモジュール等のコンピュータ実行可能命令の一般的コンテキストにおいて記述することができる。一般に、プログラムモジュールには、特定のタスクを実行する又は特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、及びデータ構造などが含まれる。通常、プログラムモジュールの機能は、様々な実施形態で所望に応じて組み合わせたり分散させることができる。
【００１７】
[0026]本明細書で説明する実施形態では、コンピュータシステムにおける別個のコンポーネントＣＰＵ及びＧＰＵを参照することがあるが、ＣＰＵとＧＰＵは単一の装置に統合することができ、命令ロジック、バッファ、及び機能ユニット等の様々なリソースをＣＰＵとＧＰＵが共用してもよく、又は、別々のリソースをグラフィックスオペレーションと汎用オペレーションに提供してもよいことが、当業者には認識されよう。したがって、本明細書でＧＰＵに関連するように説明される回路及び／又は機能の何れか又は全てを、適宜に構成したＣＰＵにて実施及び実行することも可能である。
【００１８】
[0027]また、本明細書で説明する実施形態ではＧＰＵを参照することがあるが、本明細書に記載の回路及び／又は機能は、汎用プロセッサ又は他の専用コプロセッサのような他のタイプのプロセッサ、或いはＣＰＵ内に実装され得ることを理解されたい。
【００１９】
＜基本計算システム＞
[0028]まず図１を参照する。同図は、例示的なコンピュータシステム１１２のブロック図を示している。本明細書に記載のコンピュータシステム１１２は、実施形態を好適に実施し得る動作プラットフォームの例示的構成を示していることを理解されたい。しかしながら、異なる構成を有する他のコンピュータシステムを、コンピュータシステム１１２の代わりに、本発明の範囲内で使用することもできる。即ち、コンピュータシステム１１２は、図１に関連して説明する要素以外の要素を含むことができる。更に、実施形態は、コンピュータシステム１１２のようなコンピュータシステムだけでなく、実施形態を実施可能にするように構成できる任意のシステム上で実施されうる。実施形態は、異なる多くのタイプのコンピュータシステム１１２上で実施され得ることを理解されたい。システム１１２は、例えば、専用グラッフィックスレンダリングＧＰＵに連結された強力な汎用ＣＰＵを有するデスクトップコンピュータ又はサーバコンピュータシステムとして実施することができる。このような実施形態では、周辺機器バス、専用オーディオ／ビデオコンポーネント、及び入出力装置等を追加するコンポーネントを含むことができる。
【００２０】
[0029]同様に、システム１１２は、携帯端末（例えば、携帯電話など）、或いは、例えば、ワシントン州レドモンドのマクロソフト社から入手可能なＸｂｏｘ（登録商標）や日本の東京のソニー・コンピュータエンタテインメント社から入手可能なＰＬＡＹＳＴＡＴＩＯＮ３（登録商標）のようなセットトップビデオゲーム機として実施可能である。また、システム１１２は、計算デバイスの電子装置（例えば、コンポーネント１０１、１０３、１０５、１０６等）が単一の集積回路チップ内に完全に含まれる「システムオンチップ」として実施することもできる。例としては、ディスプレイ、カーナビゲーションシステム、携帯エンターテイメントシステム等を有する携帯装置等がある。
【００２１】
[0030]コンピュータシステム１１２は、情報を伝達するためのアドレス／データバス１００と、バス１００と結合されており情報及び命令を処理するための中央処理装置１０１と、バス１００と結合されており中央処理装置１０１に対する情報及び命令を格納するための揮発性メモリ装置１０２（例えば、ＲＡＭ（ランダムアクセスメモリ）、スタティックＲＡＭ、ダイナミックＲＡＭ等）と、バス１００と結合されており処理装置１０１に対する静的な情報及び命令を格納するための不揮発性メモリ装置１０３（例えば、ＲＯＭ（読取り専用メモリ）、プログラマブルＲＯＭ、フラッシュメモリ等）と、を備える。更に、コンピュータシステム１１２はまた、情報及び命令を格納するためのデータ記憶装置１０４（例えば、ハードディスクドライブ）を備える。
【００２２】
[0031]コンピュータシステム１１２はまた、オプションのグラッフィックスサブシステム１０５と、オプションの英数字入力装置１０６と、オプションのカーソル制御又は指示装置１０７と、信号通信インターフェース（入出力装置）１０８と、を備える。オプションの英数字入力装置１０６は、情報及びコマンド選択を中央処理装置１０１に伝達することができる。オプションのカーソル制御又は指示装置１０７は、ユーザ入力情報及びコマンド選択を中央処理装置１０１に伝達するためにバス１００に結合されている。信号通信インターフェース（入出力装置）１０８は、シリアルポートとすることができ、バス１００にやはり結合されている。また、通信インターフェース１０８は、無線通信メカニズムを含むことができる。通信インターフェース１０８を使用して、コンピュータシステム１１２は、インターネット又はイントラネット（例えば、ローカルエリアネットワーク）のような通信ネットワークを介して他のコンピュータシステムに通信可能に結合することができ、或いは、データ（例えば、デジタルテレビ信号）を受け取ることができる。コンピュータシステム１１２はまた、例えば、ビデオケーブル１１１によって接続された付属の表示装置１１０上に情報を表示することによってコンピュータユーザに情報を提示するグラッフィックスサブシステム１０５を備えることもできる。ある実施形態では、グラッフィックスサブシステム１０５は、中央処理装置１０１内に組み込まれる。別の実施形態では、グラッフィックスサブシステム１０５は、分離した別個のコンポーネントである。別の実施形態では、グラッフィックスサブシステム１０５は、別のコンポーネントに組み込まれる。別の実施形態では、グラッフィックスサブシステム１０５は、他の態様でシステム１１２に含まれる。
【００２３】
[0032]＜ＪＰＥＧアプリケーションにおける効率的なＶＬＣ処理＞
【００２４】
[0033]以下の実施形態では、ＪＰＥＧ画像表示アプリケーションにおける可変長符号化（ＶＬＣ）、特にハフマン符号化を効率的に処理するための手法を説明する。一実施形態では、ＪＰＥＧ画像におけるハフマン符号を処理するための方法が、ＪＰＥＧビットストリームからＶＬＣシンボルを効率的に抽出し、ＶＬＣシンボルをそれに対応するシンボル値と突き合わせることを含む。
【００２５】
[0034]本明細書に記載する幾つかの実施形態では、ＪＰＥＧファイル形式の幾つかの特徴及びそれに対応するハフマンテーブルの使用法を活用する。第１に、ＪＰＥＧに対して許容されるハフマン符号の最大長は、１６ビットである。第２に、ＪＰＥＧ画像と共に使用される各ハフマンテーブルは、１６個のハフマングループを定義する。グループは各グループ内のシンボルの長さによって定義される。例えば、第１のグループは、１ビット長のシンボルからなり、第２のグループは、２ビット長のシンボルからなり、以下同様に、長さが１６ビットのシンボルからなる第１６のグループまで定義される。第３に、前述したように、ハフマン符号はプレフィックスフリー符号である。第４に、各ハフマングループ内で、符号値は、連続している。上記の特徴を活用することにより、ハフマン符号化の処理のための効率的な手法が可能となる。
【００２６】
＜例示的ハフマン符号＞
[0035]ＪＰＥＧ規格では、各画像がそれ自体の固有の計算されたハフマンテーブルを有することが可能であるが、幾つかの「典型的」テーブルがＪＰＥＧ委員会によって提供されている。そのような典型的なテーブルの一つは、下記の表１の配列によって指定されるＤＣ輝度（DCluminance）テーブルである。
【表１】
0004693072.tif 000002
【００２７】
[0036]第１の配列ｄｃ＿ｌｕｍｉｎａｎｃｅ  ｂｉｔｓ［］は、ＪＰＥＧによって使用される１６個の各ハフマングループ内に幾つのシンボルが存在するかを示すことによって、ハフマン符号が対応するテーブル内にどのように割り当てられるかを指定する。このテーブルでは、２ビット長から９ビット長のシンボルに対応するグループ２〜９のみがエントリを有する。３ビット長のシンボルからなるグループ３は、５個のシンボルを有し、残りのグループは、それぞれ１個のシンボルを有する。グループ１及びグループ１０〜１６は、それぞれ、エントリがゼロとして定義されている。
【００２８】
[0037]第２の配列ｄｃ＿ｌｕｍｉｎａｎｃｅ＿ｖａｌ［］は、シンボルに関連付けられる値をそれらが割り当てられる順序で示している。このテーブルでは、０が第１のシンボルに関連付けられ、１が第２のシンボルに関連付けられ、以下同様に行われる。
【００２９】
[0038]次に図２を参照する。同図は、例示的なハフマンテーブル２００を示している。ハフマンテーブル２００は、図示のように、表１で定義されたＤＣ輝度テーブルに対応している。左の列は、ｄｃ＿ｌｕｍｉｎａｎｃｅ  ｂｉｔｓ［］配列によって指定されたハフマンシンボル、即ち、シンボル２０１、２０３、２０５、２０７、２０９、２１１、２１３、２１５、２１７、２１９、２２１、及び２２３からなる。右の列は、ｄｃ＿ｌｕｍｉｎａｎｃｅ＿ｖａｌ［］配列によってシンボルに関連付けられた値、即ち、シンボル値２０２、２０４、２０６、２０８、２１０、２１２、２１４、２１６、２１８、２２０、２２２、及び２２４からなる。前述したように、ハフマン符号は、プレフィックスフリー符号であり、図２に示すようにそれらを左揃えに示すと、他のシンボルの接頭部と同一のシンボルが存在しない、例えば、シンボル２０１は００であり、他には００で始まるシンボルがないことが容易に分かる。
【００３０】
＜ＪＰＥＧファイル形式＞
[0039]次に図３を参照する。同図は、一実施形態に係るＪＰＥＧ画像ファイル３００を示している。図示するように、ＪＰＥＧ画像ファイル３００は、ヘッダ３１０と画像データ３２０の二つの部分からなる。ヘッダ３１０は、ＪＰＥＧ画像ファイル３００に含まれる画像を復号するために必要な情報を含み、一方、画像データ３２０は、実際の圧縮画像データを含んでいる。例えば、ヘッダ３１０は、ＪＰＥＧ画像ファイル３００をＪＰＥＧ画像ファイルとして識別する最初のシーケンスと、表１に示す配列のようなＪＰＥＧ画像ファイル３００に関するハフマンテーブル情報を含む部分とを含むことができる。
【００３１】
[0040]図示するように、画像データ３２０は、圧縮シンボルデータのビットストリームからなる。このビットストリームデータの例示的な抜粋を、ビットストリーム抜粋３２５として示す。図示の実施形態におけるビットストリーム抜粋３２５は、一続きの幾つかのＶＬＣシンボル、例えば、シンボル３３１、３３３、及び３３５から構成される。シンボルが可変長であるので、ＪＰＥＧビューワは、それぞれの完全なシンボルを、長さにかかわらず認識する必要がある。
【００３２】
＜従来の手法＞
[0041]ＪＰＥＧ画像ファイルにおけるハフマン符号を処理するための一般的な従来技術の手法は、幾つかのビット（多くの場合、３ビット）をビットストリームから読み取り、それらのビットをメモリに格納されたテーブルと比較することを含む。それらビットが完全なシンボルを構成する場合、テーブルはそのことを指し示し、そのシンボルに関連付けられた値を提供する。それらのビットが完全なシンボルでない場合、テーブルはやはりそのことを指し示し、また別のテーブルへの参照を含める。ビットストリームから更なるビットが読み取られ、第２のテーブルが参照され、同様の結果が生じ得る。この繰り返しのループサイクルは、最も些細な事例を除いてほとんどの場合、処理時間、繰り返しメモリアクセス、及び、複数のテーブルを格納するメモリの利用法の観点から非効率である。
【００３３】
＜基本テーブルと二次テーブル＞
[0042]以下の実施形態では、より効率的なＪＰＥＧ画像のハフマン復号のための手法を説明する。この手法の特徴の一つは、メモリテーブルの利用法を限定することにより、より効率的にメモリを利用することである。最も些細な事例を除いてほとんどの場合、基本及び二次テーブルの使用により、メモリの利用法の点で大幅な改善が見られる。
【００３４】
[0043]以下、図４を参照する。同図は、一実施形態に係る基本テーブル４００を示している。基本テーブル４００は、上記で表１に示したＤＣ輝度の「典型的」テーブル情報から導かれる。基本テーブル４００は、ＪＰＥＧ規格によって定義される１６個のハフマングループに対応する１６個のグループに分割される。各グループは、以下の三つの情報、即ち、個々のグループにおけるエントリのビットの長さに対応するｎビットと、図示の実施形態にではそのグループ内のエントリの最小値に対応する閾値と、そのグループ内のエントリのシンボル値が格納される第２のテーブルにおける位置を指すメモリポインタであるオフセットと、を含む。前述のように、グループ２〜９のみが、ＤＣ輝度の典型的テーブルにおいてエントリを有する。
【００３５】
[0044]基本テーブル４００内に示される閾値は、閾値を１６ビット長まで埋めるために、ゼロで「パディング」されている。幾つかの実施形態では、後により詳細に述べるように、閾値は、同じ長さであり、例えば、とり得る最長のハフマン符号と同じ長さであることが好都合である。
【００３６】
[0045]次に、図５を参照する。同図は、一実施形態に係る二次テーブル５００を示している。図示の実施形態において、二次テーブル５００は、上記で表１に示したＤＣ輝度の「典型的」テーブル情報から導かれる。二次テーブル５００は、ＪＰＥＧビットストリームに符号化されたハフマンシンボルに対応するシンボル値のリストである。幾つかの実施形態では、これらの値は、オフセット値とインデックスの組合せにより任意の特定のエントリを取り出すことができるようにメモリに順次格納される。例えば、図示のように二次テーブル５００がメモリアドレス＜Ｔａｂｌｅ  ２  Ａｄｄｒｅｓｓ＞から始まる場合、オフセットとしての＜Ｔａｂｌｅ  ２  Ａｄｄｒｅｓｓ＞と、インデックスとしての＜２＊ｖａｌｕｅ＿ｌｅｎｇｔｈ＞（ｖａｌｕｅ＿ｌｅｎｇｔｈは、二次テーブルにおけるエントリのバイト長に対応する）とを使用して、二次テーブル５００に格納された第３のシンボル値を取り出す。
【００３７】
＜ＪＰＥＧ画像のハフマン値の復号＞
[0046]以下、図６を参照する。同図は、一実施形態に係る、ＪＰＥＧ画像ファイルにおけるハフマン符号を復号する方法のフローチャート６００を示している。フローチャート６００で具体的なステップを開示するが、これらのステップは例示的なものである。即ち、本発明の実施形態は、様々な他の（追加の）ステップ又はフローチャート６００に記載のステップの変形形態を実施するのにも適する。フローチャート６００のステップは、与えられた順序と異なる順序で行われてもよく、フローチャート６００のステップの全てが行われなくてもよいことを理解されたい。
【００３８】
[0047]図示するように、ステップ６１０は、ビットストリームから１６ビットをスキャンすることを含む。この実施形態では、ＶＬＣ符号の可能な最大の長さは、１６ビットである。したがって、この単一のスキャン動作により、ビットストリームから完全なシンボルが確実に取り出される。幾つかの実施形態では、これらのビットは、ビットストリームバッファ内に収納される。
【００３９】
[0048]図示の実施形態におけるステップ６２０は、ビットストリームバッファにおける第１のシンボルについて該当するハフマングループを決定することを含む。前述のように、ハフマン符号は、プレフィックスフリー符号である。したがって、ある特定のハフマンシンボルが属するグループを特定することにより、そのシンボルのビット長も示される。ある手法では、ビットストリームバッファは、１６個の異なる閾値と比較される。これら１６個の閾値は、ＪＰＥＧ符号化で使用される１６個の候補のハフマングループの何れかとそれぞれ関連付けられている。この比較は、並列に非常に迅速に行うことが可能であり、この比較により、適切なグループが決定されて、シンボルそれ自体が容易に決定される。
【００４０】
[0049]次にステップ６３０に示すように、基本テーブルにアクセスし、シンボル情報を取り出す。幾つかの実施形態では、ハフマンシンボルを復号する際に二つのテーブルが利用される。第１のテーブル、即ち、基本テーブルは、ＪＰＥＧ符号化で使用される１６個のハフマングループに関する情報を含む。そのような一実施形態では、１６個のグループのそれぞれについて「ベーストリプレット(basetriplet)」が使用される。このトリプレットは、そのグループ内のエントリの長さ（例えば、ビット数での長さ）と、ステップ６２０で行われる比較のために使用することができるそのグループについての閾値と、そのグループでのエントリが開始しうる第２のメモリテーブルの部分を指し示すメモリオフセットと、を含む。第２のテーブルは、ビットストリームに符号化された様々なハフマンシンボルに対するシンボル値を含む。
【００４１】
[0050]次にステップ６４０に示すように、対応するシンボル値を取り出す。幾つかの実施形態では、基本テーブルが、二次テーブルにアクセスするための適切なオフセット情報を提供する。次いで、シンボルそれ自体を使用してインデックスを提供することができ、オフセットと組み合わせたインデックスにより、二次テーブルにおける特定のシンボル値をその位置から取り出すことが可能になる。
【００４２】
[0051]次に図７を参照する。同図は、一実施形態に係る、可変長符号（ＶＬＣ）シンボルを復号する方法のフローチャート７００を示している。フローチャート７００に具体的なステップを開示するが、これらのステップは例示的なものである。即ち、本発明の実施形態は、様々な他の（追加の）ステップ又はフローチャート７００に記載のステップの変形形態を実施するのにも適する。フローチャート７００のステップは、与えられた順序と異なる順序で行われてもよく、そのステップの全てが行われなくてもよいことを理解されたい。
【００４３】
[0052]ステップ７１０に示すように、符号化の際に使用されるＶＬＣグループについての閾値情報を取り出す。幾つかの実施形態では、この閾値情報は、図４を参照して上記で説明したような基本テーブルから取得される。幾つかの実施形態では、ある所与のグループについての閾値情報は、そのグループ内のエントリの最小値からなる。更に、幾つかの実施形態では、全ての閾値が等しい長さになるように、特定のグループの閾値に対し「充填」、即ち「パディング」がなされ得る。
【００４４】
[0053]ステップ７２０に示すように、ビットストリームにアクセスし、幾つかのビットをビットストリームから取得する。ＪＰＥＧビットストリームの場合、可能な最大のＶＬＣシンボル長は、１６ビットであり、したがって、ステップ７２０において、１６ビットがビットストリームから取得され、ビットストリームバッファに格納される。他の実施形態では、ビットを取得するために異なる手法が利用される。例えば、ある実施形態では、これら１６ビットを取得するためにビットストリームが最初にスキャンされ、また、別の実施形態では、それらのビットをビットストリームから読み取ることができる。
【００４５】
[0054]次にステップ７３０に示すように、ビットストリームバッファを閾値情報と比較して、現在のシンボルが属するＶＬＣグループを決定する。他の実施形態では、このステップは、異なる態様で行われる。例えば、一実施形態では、ビットストリームバッファに格納された値は、各グループの閾値と比較され、特定のグループに対してビットストリームバッファが閾値よりも大きい場合、比較結果として「真」が返される。真の結果の数を合計することにより、現在のシンボルに対するグループ番号が与えられる。幾つかの実施形態では、第１のＶＬＣグループについての閾値は、ビットストリームバッファと比較する必要が無く、このような実施形態では、ビットストリームバッファの全ての候補の値が、第１のＶＬＣグループについての閾値以上となる。
【００４６】
[0055]次にステップ７４０に示すように、グループ番号を使用してグループ情報を取り出す。幾つかの実施形態では、グループ番号は、基本テーブルに対するインデックスの役割を果たす。また、基本テーブルは、特定のグループにおけるシンボルの長さのビット数、そのグループにおける最小のエントリに対応する閾値、及びそのグループにおけるエントリのシンボル値が格納される二次テーブルにおける位置のメモリオフセットに関する情報を含む。
【００４７】
[0056]次にステップ７５０に示すように、ビットストリームから現在のシンボルを抽出する。幾つかの実施形態では、このステップは、基本テーブルによって示されるビット数をビットストリームから読み取ることによって行われる。他の実施形態では、例えば、ステップ７２０は、「スキャン」動作ではなく「読取り」動作を含み、このステップは、基本テーブルによって示されるビット数をビットストリームバッファから読み取ることによって行われる。
【００４８】
[0057]次にステップ７６０に示すように、現在のシンボルに対応するシンボル値を取得する。幾つかの実施形態では、シンボル値は、二次テーブルに格納される。そのような一実施形態では、現在のシンボル、そのグループについての閾値、及びそのグループについてのオフセット値を用いて、二次テーブルに対するインデックスが算出される。このような計算の例を、下記の表２に示す。
【表２】
0004693072.tif 000003
【００４９】
＜例示的ＶＬＣ復号＞
[0058]次に、図８Ａ〜８Ｄを参照する。同図は、一実施形態に係る例示的ＶＬＣ復号プロセスを示している。図８Ａ〜８Ｄは、フローチャート７００の方法によるビットストリーム８２５に対するオペレーションを示している。
【００５０】
[0059]図８Ａに示すように、ビットストリーム８２５は、一続きの幾つかの可変長シンボルから構成される。ビットストリーム８２５の最初の１６ビットがスキャンされて、バッファ８４５内に取り込まれる。図示の実施形態では、スキャンオペレーションが用いられるため、ビットストリームメモリポインタ８２７は移動しない。別の実施形態で、例えば、読取り動作が用いられる場合、ビットストリームメモリポインタ８２７は、ビットストリームのアクセスされる部分の終端まで移動し得る。
【００５１】
[0060]次いで、バッファ８４５の内容が、幾つかの閾値、例えば、基本テーブル４００に示される閾値４３２〜４３９と比較される。バッファ８４５が閾値以上である場合の全比較により、１（真）が返される。図示の実施形態では、前述のように、グループ１についての閾値とバッファを比較する必要がなく、このような実施形態では、バッファ８４５の全てのとり得る値が、グループ１についての閾値より大きく、したがって、この比較は自動的に１として扱われることに留意されたい。
【００５２】
[0061]これらの真の結果の和が、現在のシンボルのＶＬＣグループを示す。図８Ａに示される実施形態では、バッファ８４５は、閾値４３２及び４３３より大きいが閾値４３４よりも小さく、したがって、現在のシンボルは、ＶＬＣグループ３に属する。
【００５３】
[0062]ＶＬＣグループは、基本テーブル、例えば、基本テーブル４００のアドレス指定をして、該当するベーストリプレットを取り出すために使用される。図示の実施形態では、ベーストリプレットは、ｎビット値４２３、閾値４３３、及びオフセット４４３から構成される。
【００５４】
[0063]図８Ｂに示すように、現在のシンボルは、ビットストリーム８２５から読み取られ、シンボルレジスタ８５５に格納される。ベーストリプレット、具体的には、現在のシンボルのシンボル８３１で示されるｎビット値４２３は、３ビットの長さである。したがって、ビットストリーム８２５の最初の３ビットが、メモリに読み込まれる。図示の実施形態は、読取りオペレーションを伴うため、ビットストリームポインタ８２７は、読取り動作の終端の位置まで進む。別の実施形態では、ビットストリーム８２５からではなくバッファ８４５からシンボル８３１を取り出すことができる。そのような一実施形態では、ビットストリームポインタ８２７を移動させるためにフラッシュオペレーションが用いられる。
【００５５】
[0064]シンボル８３１は、閾値４３３及びオフセット４４３と共に、二次テーブル５００のアドレス指定のために使用される。オフセット４４３は、グループ３におけるエントリの二次テーブル５００内での開始位置を示し、シンボル８３１は、閾値４３３と共にインデックス値を提供する。図示の実施形態では、シンボル８３１は、グループ３における第１のエントリに対応し、そのシンボル値は、メモリ位置＜Ｔａｂｌｅ  ２  Ａｄｄｒｅｓｓ  ＋１＞に格納されている。このシンボル８３１のシンボル値は、１である。
【００５６】
[0065]図８Ｃに示すように、ビットストリーム８２５における次のＶＬＣシンボル、例えば、シンボル８３３を復号するとき、同様のプロセスが行われる。即ち、ビットストリーム８２５の最初の１６ビットが、バッファ８４５に読み込まれ、基本テーブル４００に示されるような閾値と比較される。この比較により、現在のシンボルが、グループ６の要素であり６ビット長であることが示される。次いで、図８Ｄに示すように、最初の６ビットは、シンボルレジスタ８５５に読み込まれ、ビットストリームポインタ８２７が、シンボル８３３の終端まで進む。グループ６に関連付けられたベーストリプレット、例えば、ｎビット値４２６、閾値４３６、及びオフセット４４６を使用して、二次テーブル５００に対するインデックスが算出され、対応するシンボル値である８が取り出される。
【００５７】
＜ＪＰＥＧ復号のためのシステム＞
[0066]以下、図９を参照する。同図は、一実施形態に係るＪＰＥＧ復号のためのシステム９００を示している。システム９００は、特定の列挙した特徴及び要素を組み込んだものとして示されているが、他の実施形態が、追加の、より少ない、若しくは、異なる特徴、要素、又は構成を含む適用例に適することを理解されたい。さらに、システム９００は、例えば、専用電子部品を用いてハードウェアに、例えば、プログラムによるモジュールの集合体としてソフトウェアによって、又はこれらの組合せとして実装され得ることを理解されたい。
【００５８】
[0067]システム９００は、記憶要素９１０を含むように示されている。記憶要素９１０は、異なる実施形態では異なる形態をとることができる。例えば、一実施形態では、記憶要素９１０は、磁気ハードディスクドライブである。図示の実施形態では、記憶要素９１０は、ＪＰＥＧファイル９１５を格納するものとして示されている。ＪＰＥＧファイル９１５は、図に示すようにヘッダ９１６及びビットストリーム９１８を含む。
【００５９】
[0068]システム９００はまた、メモリ９２０を含むように示されている。メモリ９２０は、異なる実施形態では異なる形態をとることができる。図示の実施形態では、メモリ９２０は、基本テーブル９２２及び二次テーブル９２４を格納するために使用される。
【００６０】
[0069]システム９００はまた、ＪＰＥＧ復号エンジン９５０を含むように示されている。図示の実施形態では、ＪＰＥＧ復号エンジン９５０は、ＪＰＥＧ制御モジュール９５１、ハフマンテーブル生成器９５２、ビットストリームバッファ９５４、複数の閾値比較器９５６、シンボルバッファ９５８、及びシンボル値バッファ９５９を含む。
【００６１】
[0070]図示の実施形態によるシステム９００の動作は、ＪＰＥＧファイル９１５をＪＰＥＧ復号エンジン９５０に渡すことを含み、ここでは、ＪＰＥＧファイル９１５はＪＰＥＧ制御モジュール９５１によって受け取られる。ヘッダ９１６は、ハフマンテーブル生成器９５２に渡され、ハフマンテーブル生成器９５２は、ヘッダ９１６に含まれる情報、例えば、ＪＰＥＧファイル９１５の一部分として符号化されたハフマンテーブル情報を使用して、基本テーブル９２２及び二次テーブル９２４を生成する。ＪＰＥＧ制御モジュール９５１は、基本テーブル９２２にアクセスし、そこに記述されている各ハフマングループの閾値情報を取得する。この閾値情報は、複数の閾値比較器９５６に読み込まれる。
【００６２】
[0071]ビットストリーム９１８の一部分、例えば、最初の１６ビットは、ビットストリームバッファ９５４に読み込まれる。次いで、ビットストリームバッファ９５４の内容が、各閾値比較器９５６と比較され、これらの比較の結果により、現在のシンボルのハフマングループが特定される。該当するハフマングループがいったん決定されると、グループ情報を基本テーブル９２２から取得することが可能になる。そして、このグループ情報により、ビットストリーム９１８から現在のシンボルの抽出が可能になり、現在のシンボルが、シンボルバッファ９５８に格納される。
【００６３】
[0072]これらのグループ情報とシンボルの組合せは、二次テーブル９２４にアクセスし、現在のシンボルのシンボル値を抽出するために使用される。次いで、抽出されたシンボル値はシンボル値バッファ９５９に格納される。
【００６４】
[0073]以上に本発明の実施形態を説明した。具体的な実施形態として本発明を説明したが、本発明は、それら実施形態により限定されて解釈されるべきでなく、添付の特許請求の範囲によって解釈されるべきことを理解すべきである。
【図面の簡単な説明】
【００６５】
【図１】本発明の実施形態を実施し得る例示的なコンピュータシステムを示すブロック図である。
【図２】一実施形態に係る例示的なハフマンテーブルを示す図である。
【図３】一実施形態に係るＪＰＥＧ画像ファイルを示す図である。
【図４】一実施形態に係る基本テーブルを示す図である。
【図５】一実施形態に係る二次テーブルを示す図である。
【図６】一実施形態に係る、ＪＰＥＧ画像ファイルにおけるハフマン符号を復号する方法を示すフローチャートである。
【図７】一実施形態に係る、可変長符号（ＶＬＣ）を復号する方法を示すフローチャートである。
【図８Ａ】一実施形態に係る、ビットストリームに対する例示的なＶＬＣ復号プロセスを示す図である。
【図８Ｂ】一実施形態に係る、ビットストリームに対する例示的なＶＬＣ復号プロセスを示す図である。
【図８Ｃ】一実施形態に係る、ビットストリームに対する例示的なＶＬＣ復号プロセスを示す図である。
【図８Ｄ】一実施形態に係る、ビットストリームに対する例示的なＶＬＣ復号プロセスを示す図である。
【図９】一実施形態に係るＪＰＥＧ復号のためのシステムを示すブロック図である。
【符号の説明】
【００６６】
１００…バス、１０１…中央処理装置、１０２…ＲＡＭ、１０３…ＲＯＭ、１０４…データ記憶装置、１０５…グラッフィックスサブシステム、１０６…英数字入力装置、１０７…カーソル制御装置、１０８…入出力装置、１１０…表示装置、１１２…コンピュータシステム、２００…ハフマンテーブル、３００…ＪＰＥＧ画像ファイル、３１０…ヘッダ、３２０…画像データ、３２５…ビットストリーム抜粋、４００…基本テーブル、５００…二次テーブル、８２５…ビットストリーム、８２７…ビットストリームポインタ、８４５…バッファ、８５５…シンボルレジスタ、９００…システム、９１０…記憶要素、９１５…ＪＰＥＧファイル、９１６…ヘッダ、９１８…ビットストリーム、９２０…メモリ、９２２…基本テーブル、９２４…二次テーブル、９５０…ＪＰＥＧ復号エンジン、９５１…ＪＰＥＧ制御モジュール、９５２…テーブル生成器、９５４…ビットストリームバッファ、９５６…閾値比較器、９５８…シンボルバッファ、９５９…シンボル値バッファ。
【図１】
0004693072.tif 000004
【図２】
0004693072.tif 000005
【図３】
0004693072.tif 000006
【図４】
0004693072.tif 000007
【図５】
0004693072.tif 000008
【図６】
0004693072.tif 000009
【図７】
0004693072.tif 000010
【図８Ａ】
0004693072.tif 000011
【図８Ｂ】
0004693072.tif 000012
【図８Ｃ】
0004693072.tif 000013
【図８Ｄ】
0004693072.tif 000014
【図９】
0004693072.tif 000015