(57)【特許請求の範囲】
【請求項１】
連続して入力される可変長符号化された符号化データの各々を単位として累積するＮ個（Ｎは２以上の整数）の累積部と、
入力される前記符号化データを、前記Ｎ個の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分け、前記符号化データの振分けを示す振分けデータを生成する振分部と、
前記Ｎ個の累積部に振り分けられた符号化データと前記振り分けデータとを含む信号列を生成する生成部とを有することを特徴としたデータ処理装置。
【請求項２】
連続して入力される可変長符号化された符号化データの各々を単位として累積する２個の累積部と、
入力される前記符号化データを、前記２個の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分ける振分部と、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成する生成部とを有し、
前記累積部は、２個の前記符号化データのうち符号長が長い方または短い方の符号化データを、前記２個の累積部への振分けを示す、第１のビットパターンまたは当該第１のビットパターンが反転した第２のビットパターンで累積し、
前記生成部は、前記２個の累積部への振分けを示す第１のビットパターン、前記２個の累積部への振分けを示す第２のビットパターンを連結してビット列を生成する
することを特徴としたデータ処理装置。
【請求項３】
連続して入力される可変長符号化された符号化データの各々を単位として累積するＮ個（Ｎは２以上の整数）の累積部と、
入力される前記符号化データを、前記Ｎ個の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分け、前記符号化データの振分けを示す振分けデータを生成する振分部と、
前記Ｎ個の累積部に振り分けられた符号化データと前記振り分けデータとを含む信号列を生成する生成部と、
前記信号列に含まれる前記符号化データをそれぞれ並列して復号するＮ個の復号部と、
前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データを、前記振り分けデータに基づいて、もとの順序に並べ替える並替部とを有することを特徴としたデータ処理装置。
【請求項４】
連続して入力される可変長符号化された符号化データの各々を単位として累積する２個の累積部と、
入力される前記符号化データを、前記２個の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分ける振分部と、
前記２個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成する生成部と、
前記ビット列に含まれる前記符号化データをそれぞれ並列して復号する２個の復号部と、
前記２個の復号部によりそれぞれ復号された２個の復号データを前記振分部による振分けに従ってもとの順序に並べ替える並替部とを有し、
前記累積部は、２個の前記符号化データのうち符号長が長い方または短い方の符号化データを、前記２個の累積部への振分けを示す、第１のビットパターンまたは当該第１のビットパターンが反転した第２のビットパターンで累積し、
前記生成部は、前記２個の累積部への振分けを示す第１のビットパターン、前記２個の累積部への振分けを示す第２のビットパターンを連結してビット列を生成し、
前記並替部は、前記ビットパターンに基づいて、前記２個の符号化データから復号される２個の前記復号データをもとの順序に並べ替えることを特徴としたデータ処理装置。
【請求項５】
請求項３において、
前記ビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データと、前記並替部が前記Ｎ個の復号データを並べ替えるための前記振分けデータとを復元する復元部を有するデータ処理装置。
【請求項６】
請求項４において、
前記ビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データを復元する復元部とを有するデータ処理装置。  
【請求項７】
請求項５または６において、
前記生成部により生成される前記ビット列は外部に出力された後、当該外部から取り込まれて前記復元部に入力されるデータ処理装置。
【請求項８】
連続して入力される可変長符号化された符号化データの各々を単位として累積するＮ個（Ｎは２以上の整数）の累積部と、入力される前記符号化データを、前記Ｎ個の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分け、前記符号化データの振分けを示す振分けデータを生成する振分部と、前記Ｎ個の累積部に振り分けられた符号化データと前記振り分けデータとを含む信号列を生成する生成部とを有する装置から入力された前記信号列に含まれる前記符号化データをそれぞれ並列して復号するＮ個の復号部と、
前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データを、前記振り分けデータに基づいて、もとの順序に並べ替える並替部とを有することを特徴としたデータ処理装置。
【請求項９】
可変長符号化された符号化データを連続して入力し、
入力される前記符号化データを、連続して入力される前記符号化データの各々を単位として累積するＮ個（Ｎは２以上の整数）の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分け、前記符号化データの振分けを示す振分けデータを生成し、
前記Ｎ個の累積部に振り分けられた符号化データと前記振り分けデータとを含む信号列を生成する、
ことを特徴としたデータ処理方法。
【請求項１０】
可変長符号化された符号化データを連続して入力し、
入力される前記符号化データを、連続して入力される前記符号化データの各々を単位として累積する２個の累積部のうちで、各累積部がすでに累積した符号化データの累積符号長が短い累積部に振り分けて累積し、
前記２個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成し、
前記累積において、２個の前記符号化データのうち符号長が長い方または短い方の符号化データを、前記２個の累積部への振分けを示す、第１のビットパターンまたは当該第１のビットパターンが反転した第２のビットパターンで累積し、
前記ビット列の生成において、前記２個の累積部への振分けを示す第１のビットパターン、前記２個の累積部への振分けを示す第２のビットパターンを連結してビット列を生成
することを特徴としたデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置、及びデータ処理方法に関する。
【背景技術】
【０００２】
可変長符号化は、固定符号長のデータをその発生頻度に応じた符号長の符号化データに変換し、平均符号長を短縮するデータ圧縮方法である。可変長符号化は、たとえば、画像データや音声データの圧縮に用いられる。たとえば、画像データを圧縮する場合、ラスタスキャン順に並んだ画素値データが、それぞれの発生頻度に応じた可変長の符号化データに変換される。そして、圧縮された画像データを展開するときには、個々の符号化データが順次復号される。復号処理では、符号化データが、もとの画素値データに変換される。
【０００３】
可変調符号化・復号を高速化するための方法の一つとして、復号処理の並列化が提案されている（たとえば、特許文献１〜３）。一例では、符号化時に符号化データを所定の単位で複数のに分割し、その分割単位ごとにユニークコードを挿入する。復号時には、ユニークコードを検出することにより、符号化時に分割されたデータを認識し、分割された単位で複数の復号回路に分配し、並列して復号処理が行われる。そして、系列ごとの復号データを連結することで、展開したデータが得られる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平０１−２０９８１９号公報
【特許文献２】特開平０７−２３３９７号公報
【特許文献３】特開平１１−３４１４８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
可変長符号化における復号処理において、複数の復号回路に分配された系列毎の処理時間について考える。可変長符号化データの復号処理は、処理単位内に符号化されているデータ数や各符号化データの符号長によって、処理時間が異なる。処理単位内の符号化データ数や符号長が大きい系列ほど、処理時間が長くなり、その一方で、処理単位内の符号化データ数や符号長が小さい系列では、無駄な待ち時間が生じる。よって、復号処理全体としての処理時間は、合計の符号化データ数や符号長が大きい系列での処理時間に制約される。このように、復号処理を並列化したとしても、処理の高速化が制限されるという問題がある。
【０００６】
そこで、本発明の目的は、符号化データの並列化された復号処理をさらに高速化する、データ処理装置等を提供することにある。
【課題を解決するための手段】
【０００７】
上記の目的を達成するための一態様におけるデータ処理装置は、符号化処理部においては、連続するＮ個（Ｎは複数）の可変長符号化された符号化データをそれぞれ累積するＮ個の累積部と、前記符号化データを前記Ｎ個の累積部のいずれかに、当該Ｎ個の累積部における前記符号化データの累積符号長の差が小さくなるように振り分ける振分部とを有する。
【０００８】
また、復号処理部においては、前記Ｎ個の累積部に累積された前記符号化データをそれぞれ並列して順次復号するＮ個の復号部と、前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データを前記振分部による振分けに従ってもとの順序に並べ替える並替部とを有する。
【発明の効果】
【０００９】
以下に説明する実施形態によれば、振り分けられた符号化データ系列の符号化データ数および符号長を略均等化でき、符号化データの並列化された復号処理をさらに高速化することができる。
【図面の簡単な説明】
【００１０】
【図１】データ処理装置が適用される、画像処理装置の構成例を示す図である。
【図２】画像圧縮展開部１４の詳細な構成を示す図である。
【図３】可変長符号化部２２の詳細な構成例を示す図である。
【図４】累積部ＶＳＦＴ＿Ａの詳細な構成例を示す図である。
【図５】振分部３０による振分けの具体例を示す図である
【図６】可変長符号化部２２の動作手順を説明するフローチャート図である。
【図７】可変長復号部２４の詳細な構成例を示す図である。
【図８】復号部ＶＬＤ＿Ａの詳細な構成例を示す図である。
【図９】並替部５０による並べ替えを説明する図である。
【図１０】可変長復号部２４の動作手順を説明するフローチャート図である。
【図１１】Ｎ＝３の例における可変長符号化部２２の構成を示す図である。
【図１２】可変長符号化部２２の動作手順を説明するフローチャート図である。
【図１３】可変長符号化部２２の動作手順を説明するフローチャート図である。
【図１４】Ｎ＝３の例における可変長復号部２４の構成を示す図である。
【図１５】図１４の可変長復号部２４の動作手順を説明するフローチャート図である
【図１６】第２の実施形態における可変長符号化部２２の構成例を示す図である。
【図１７】テーブル種別ＴＢＬ０の例を示す図である。
【図１８】符号化データのビットパターンについて説明する図である。
【図１９】第２の実施形態における累積部ＶＳＦＴ＿Ａの詳細な構成例である。
【図２０】第２の実施形態における可変長符号化部２２の動作手順を説明するフローチャート図である。
【図２１】サブルーチンＳＲ１のフローチャート図である。
【図２２】サブルーチンＳＲ２のフローチャート図である。
【図２３】サブルーチンＳＲ３のフローチャート図である。
【図２４】サブルーチンＳＲ４のフローチャート図である。
【図２５】第２の実施形態における可変長復号部２４の構成例を示す図である。
【図２６】第２の実施形態における復号部ＶＬＤ＿Ａの詳細な構成例を示す図である。
【図２７】第２の実施形態における可変長復号２４の動作手順を説明するフローチャート図である。
【図２８】サブルーチンＳＲ１１のフローチャート図である。
【図２９】サブルーチンＳＲ１２のフローチャート図である。
【発明を実施するための形態】
【００１１】
以下、図面にしたがって本発明の実施の形態について説明する。但し、適用される技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１２】
図１は、データ処理装置が適用される、画像処理装置の構成例を示す。画像処理装置２は、画像入力、画像処理、及び画像出力の各処理を行う。画像処理装置２は、たとえば画像処理用のＬＳＩ（Large Scale Integration）である。入力される画像データは、たとえば、不図示の撮像装置から送られる、撮像画像の画素値データである。画像データは、たとえば、フレームや、フレームを分割した領域といった処理単位ごとに画像処理される。また、画像処理された画像データの出力先は、たとえば不図示の表示装置や記録装置などである。画像処理装置２は、画像処理の前後に、処理単位ごとの画像データを外部メモリ４に格納する。その際、画像圧縮展開部１４が、画像データの圧縮・展開を行う。ここでは、画像圧縮展開部１４に、データ処理装置が含まれる。なお、外部メモリ４は、たとえば、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）などの大容量のメモリである。
【００１３】
画像処理装置２では、制御部６からの制御信号に応答して、画像入力部８、画像処理部１０、画像出力部１２、画像圧縮展開部１４、及びメモリ制御部１６が動作する。画像入力が行われるとき、画像入力部８は、外部から入力される画像データを画像圧縮展開部１４に送る。画像圧縮展開部１４は、画像データを圧縮してメモリ制御部１６に送る。メモリ制御部１６は、圧縮された画像データ（以下、圧縮画像データ）を外部メモリ４に格納する。次いで、画像処理が行われるとき、メモリ制御部１６は、外部メモリ４から圧縮画像データを読み出し、画像圧縮展開部１４に送る。画像圧縮展開部１４は、圧縮画像データを展開し、画像処理部１０に送る。画像処理部１０は、展開された画像データに画像処理を行い、画像圧縮展開部１４に送る。画像処理は、たとえば、輝度等の補正処理や色変換処理などである。画像圧縮展開部１４は、画像処理された画像データを圧縮し、メモリ制御部１６に送る。メモリ制御部１６は、圧縮画像データを外部メモリ４に格納する。そして、画像出力が行われるとき、メモリ制御部１６は、外部メモリ４から圧縮画像データを読み出し、画像圧縮展開部１４に送る。画像圧縮展開部１４は、圧縮画像データを展開し、画像出力部１２に送る。画像出力部１２は、展開された画像データを外部に出力する。
【００１４】
図２は、画像圧縮展開部１４の詳細な構成を示す。画像圧縮展開部１４は、画像圧縮部１８と、画像展開部１９とを有する。
【００１５】
画像圧縮部１８は、画素予測差分算出部２０と可変長符号化部２２を有する。画素予測差分算出部２０は、入力される画像データから、連続する符号化対象データＤ＿ｍ（ｍ＝０、１、２、３、・・・）を生成する。入力される画像データは、ラスタスキャン順に連続した画素値データである。画素予測差分算出部２０は、連続する画素における先行の画素の画素値から後続の画素の画素値を予測する。そして、画素予測差分算出部２０は、後続の画素の予測値と実際の画素値との差分である画素予測差分を算出する。よって、ラスタスキャン順に連続した画素予測値差分が、連続する符号化対象データＤ＿ｍとして生成される。なお、画素予測差分値に０が連続する場合には、連続する０値をまとめて符号化するランレングス符号化を用いて、符号化対象データ数を減らすことも可能である。例えば、画素予測差分として０が複数個続いていることを示すデータを一つの符号化対象データとすることで、画素予測差分（値は０）を複数個符号化するよりも、符号化データ数を削減することができる。次いで、可変長符号化部２２は、連続する符号化対象データＤ＿ｍを可変長符号化し、連続する符号化データＥ＿ｍに変換する。個々の符号化対象データＤ＿ｍは、その発生頻度に応じた符号長の符号化データＥ＿ｍに変換される。連続する可変長符号化データＥ＿ｍはビット列化され、圧縮画像データとしてメモリ制御部１６に出力される。そして、圧縮画像データが、外部メモリ４に格納される。
【００１６】
画像展開部１９は、可変長復号部２４と画素予測補償部２６を有する。可変長復号部２４は、連続する符号化データＥ＿ｍを取得して復号する。符号化データＥ＿ｍは、ビット列化された状態で、メモリ制御部１６により外部メモリ４から読み出される。可変長復号部２４は、個々の符号化データＥ＿ｍを、その符号長に応じた発生頻度を有する復号データＦ＿ｍに復号する。ここで、復号される復号データＦ＿ｍは、画素値予測差分データである。よって、ラスタスキャン順に連続する画素値予測差分データが、可変長復号部２４から出力される。次いで、画素予測補償部２６は、復号データＦ＿ｍに基づき、画素ごとの画素値を算出する。ラスタスキャン順に連続する画素値データは、展開された画像データとして出力される。
【００１７】
ここでは、可変長符号化部２２と可変長復号部２４が、データ処理装置に対応する例である。以下、可変長符号化部２２と可変長復号部２４の詳細について、第１、第２の実施形態に分けて説明する。
【００１８】
［第１の実施形態］
図３は、可変長符号化部２２の詳細な構成例を示す。ここでは、可変長符号化部２２は、２系列の復号処理用の符号化を行うための構成を有する。符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２には、連続する符号化対象データＤ＿ｎが、Ｎ個ずつ（図３では、Ｎ＝２個ずつ）並列して入力される。たとえば、符号化対象データＤ＿ｎ（ｎ＝０、２、４、６、・・・）は符号化テーブルＴＢＬ０＿１に、符号化対象データＤ＿ｎ＋１は符号化テーブルＴＢＬ０＿２に入力される。符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２は、符号化対象データの値と、その発生頻度に応じた符号長の符号化データを対応付ける。ここでは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２は、同じテーブルである。符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２は、符号化対象データＤ＿ｎ、Ｄ＿ｎ＋１がそれぞれ入力されると、対応する符号化データＥ＿ｎ、Ｅ＿ｎ＋１をそれぞれ出力する。また、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２は、符号化データＥ＿ｎ、Ｅ＿ｎ＋１の符号長Ｌ＿ｎ、Ｌ＿ｎ＋１をそれぞれ出力する。符号長Ｌ＿ｎ、Ｌ＿ｎ＋１は、比較部３２に入力される。
【００１９】
振分部３０は、符号化データＥ＿ｎ、Ｅ＿ｎ＋１を、２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂに、それぞれの累積符号長の差が小さくなるように振り分ける。振り分け部３０の詳細については、後述する。累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、振分けられる符号化データＥ＿ｎ、またはＥ＿ｎ＋１をそれぞれ累積する。累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂには、振分けられる符号化データＥ＿ｎ、またはＥ＿ｎ＋１とともに、符号長Ｌ＿ｎ、またはＬ＿ｎ＋１が入力される。累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、符号長Ｌ＿ｎ、またはＬ＿ｎ＋１から、それぞれ累積する符号化データの累積符号長を算出する。符号化データＥ＿ｎ、またはＥ＿ｎ＋１は、累積符号長が所定のビット長になるまで、各累積部に累積される。所定のビット長は、任意に設定されるビット長であり、たとえば３２ビットである。累積された符号化データＥ＿ｎ、またはＥ＿ｎ＋１からなる３２ビット長の累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂは、それぞれ記憶部３６ａ、３６ｂに格納される。このとき、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、記憶部３６ａ、３６ｂに、データ書込みを指示するライトイネーブル信号ＷＥを出力する。記憶部３６ａ、３６ｂは、たとえば、フリップフロップ回路である。また、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、算出した累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂを、比較部３８に出力する。
【００２０】
ここで、図４に、累積部ＶＳＦＴ＿Ａの詳細な構成例を示す。なお、累積部ＶＳＦＴ＿Ｂも、同じ構成を有する。よって、次の説明は、累積部ＶＳＦＴ＿Ｂにも適用される。
【００２１】
各部の動作について、符号化データＥ＿ｎとその符号長Ｌ＿ｎが入力される場合を例として説明する。記憶部６０は、図示しないクロックに同期して入力される符号化データＥ＿ｎを一時的にラッチし、符号化データＥ＿ｎを可変シフタ・連結部６２に出力する。可変シフタ・連結部６２は、記憶部６４内のそれまでの累積符号化データＤｔ＿Ａに、記憶部６０内の符号化データＥ＿ｎを、その時点での累積符号長Ｓｕｍ＿１に応じてシフトして連結する。累積符号長Ｓｕｍ＿１は、加算器６８から入力される。こうして符号化データＥ＿ｎが累積され、累積符号化データＤｔ＿Ａが記憶部６４に格納される。なお、記憶部６０、６４は、たとえばフリップフロップ回路である。
【００２２】
一方、記憶部６６は、記憶部６０が符号化データＥ＿ｎをラッチするタイミングと同期して、入力される符号長Ｌ＿ｎをラッチし、加算器６８に出力する。加算器６８は、可変シフタ・連結部６２におけるシフト量や記憶部３６ａに対する書込みイネーブル信号ＷＥを生成するための回路である。加算器６８は、記憶部７０内のその時点での累積符号長Ｓｕｍ＿１に、符号長Ｌ＿ｎを加算する。こうして累計された累積符号長Ｓｕｍ＿１は、可変シフタ・連結部６２に入力され、また、記憶部７０に格納される。累積符号長Ｓｕｍ＿１は、３２ビット長を示すたとえば５ビットのデータである。累積符号長Ｓｕｍ＿１が３２ビットを超えたことを示す繰り上げビットが、書込みイネーブル信号ＷＥとして、記憶部３６ａに出力される。よって、累積符号長Ｓｕｍ＿１が３２ビットを超えたとき、書込みイネーブル信号ＷＥは、書込みを許可する値「１」になる。これにより、記憶部６４に格納される累積符号化データＤｔ＿Ａは、累積符号長Ｓｕｍ＿１が３２ビットを超えたときに、記憶部３６ａに３２ビット分格納される。なお、記憶部６６、７０は、たとえば、フリップフロップ回路である。
【００２３】
また、加算器７２は、記憶部７４内のそれまでの累積符号長Ｓｕｍ＿Ａに、符号長Ｌ＿ｎを加算する。記憶部７４は、たとえば、フリップフロップ回路である。そして、累計された累積符号長Ｓｕｍ＿Ａは、比較部３８に出力される。
【００２４】
図３に戻る。振分部３０は、符号化データＥ＿ｎ、Ｅ＿ｎ＋１を２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂのいずれかに、２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂにおける符号化データＥ＿ｎ、Ｅ＿ｎ＋１の累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの差が小さくなるように振り分ける。具体的には、振分判定部３１により、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のうち符号長が長い方が、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂのうち累積符号長が短い方に振分けられる。また、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のうち符号長が短い方が、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂのうち累積符号長が長い方に振り分けられる。ここにおいて実行される振り分けは、次の２通りである。なお、振り分け先は「→」で示される。
振分けＡ０：符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ
振分けＡ１：符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ
比較部３２は、２つの符号長Ｌ＿ｎ、Ｌ＿ｎ＋１の大小を比較する。比較結果は、振分判定部３１に入力される。また、比較部３８は、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの大小を比較する。比較結果は、振分判定部３１に入力される。一方で、セレクタ３４ａ、３４ｂの両方に、符号化データＥ＿ｎとその符号長Ｌ＿ｎ、及び符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１が入力される。振分判定部３１は、符号化データＥ＿ｎ、Ｅ＿ｎ＋１の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂへの振分けを示す振分けデータＣＳを生成する。振分けデータＣＳは、たとえば１ビットのデータである。振分けデータＣＳの値は、たとえば、振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）のときには「０」である。また、振分けデータＣＳは、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）のときには「１」である。振分けデータＣＳは、制御信号としてセレクタ３４ａ、３４ｂに入力される。  
【００２５】
振分けデータＣＳが「０」のとき、セレクタ３４ａは、符号化データＥ＿ｎとその符号長Ｌ＿ｎを累積部ＶＳＦＴ＿Ａに出力する。また、このとき、セレクタ３４ｂは、符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１を累積部ＶＳＦＴ＿Ｂに出力する。また、振分けデータＣＳが「１」のとき、セレクタ３４ａは、符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１を累積部ＶＳＦＴ＿Ａに出力する。また、このとき、セレクタ３４ｂは、符号化データＥ＿ｎとその符号長Ｌ＿ｎを累積部ＶＳＦＴ＿Ｂに出力する。
【００２６】
ビット列生成部４０は、２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂに累積された符号化データＥ＿ｎ、Ｅ＿ｎ＋１を、一定のビット数ずつ連結してビット列ＢＳを生成する。具体的には、ビット列生成部４０は、記憶部３６ａに格納された累積符号化データＤｔ＿Ａと、記憶部３６ｂに格納された累積符号化データＤｔ＿Ｂを、一定のビット数ずつ交互に連結する。ビット列生成部４０は、たとえばマルチプレクサを有する。一定のビット数は、任意のビット数が可能であり、たとえば１ビットである。生成されたビット列ＢＳは、たとえば、可変長符号化部２２内のバッファメモリ４２に格納される。バッファメモリ４２は、たとえばＳＲＡＭ（Static RAM）である。
【００２７】
また、バッファメモリ４２には、振分判定部３１が生成する振分けデータＣＳも格納される。振分けデータＣＳは、ビット列ＢＳとは別に、あるいはビット列ＢＳの一部として格納される。ビット列ＢＳとは別に格納される場合、振分けデータＣＳは、たとえば、バッファメモリ４２のビット列ＢＳと異なる領域に格納される。その場合、たとえば、一対の累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂに対応する複数の振分けデータＣＳを、可変長符号化して圧縮してもよい。ビット列ＢＳの一部として格納される場合、たとえば、一対の累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂがマルチプレクスされるごとに、振分けデータＣＳが連結される。
【００２８】
バッファメモリに格納されたビット列ＢＳと振分けデータＣＳは、圧縮画像データとして、たとえば図１の外部メモリ４に格納される。このように、符号化データＥ＿ｎ、Ｅ＿ｎ＋１をビット列化することで、単一のアクセスにより符号化データＥ＿ｎ、Ｅ＿ｎ＋１をバッファメモリ４２に格納できる。
【００２９】
図５は、振分部３０による振分けの具体例を示す図である。図５（Ａ）〜（Ｃ）には、ｎ＝０、２、４、６、・・・の場合における符号化データＥ＿ｎ、Ｅ＿ｎ＋１と、振分けデータＣＳと、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂで累積される累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂの例が、時系列で示される。図５（Ａ）〜（Ｃ）では、矩形により符号化データＥ＿ｎ、Ｅ＿ｎ＋１が示される。また、矩形の高さと矩形内の数字により、符号長（ビット数）が示される。
【００３０】
図５（Ａ）には、符号化データＥ＿２、Ｅ＿３の振分けが行われるときの状態が示される。このとき、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂに、符号化データＥ＿０、Ｅ＿１が累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂとしてそれぞれ累積されている。なお、初期状態では、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂはともに「０」であるので、たとえば、符号化データＥ＿０は累積部ＶＳＦＴ＿Ａに、符号化データＥ＿１は累積部ＶＳＦＴ＿Ｂに振り分けられたものとする。
【００３１】
符号化データＥ＿０、Ｅ＿１の符号長は、それぞれ「２」、「３」である。よって、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂはそれぞれ「２」、「３」であり、累積符号長Ｓｕｍ＿Ａは、累積符号長Ｓｕｍ＿Ｂより小さい。一方、あらたな符号化データＥ＿２、Ｅ＿３の符号長Ｌ＿２、Ｌ＿３はそれぞれ「５」、「３」であり、符号長Ｌ＿２は符号長Ｌ＿３より大きい。よって、このとき、符号化データＥ＿２は累積部ＶＳＦＴ＿Ａに、符号化データＥ＿３は累積部ＶＳＦＴ＿Ｂに振分けられる。つまり、振分けＡ０が行われる。このとき、振分けデータＣＳは、「０」である。
【００３２】
上記の振分けが行われると、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂは、それぞれ「５」、「３」が加算されて「７」、「６」になり、その差は「１」になる。これは、振分けＡ１が行われて符号化データＥ＿２が累積部ＶＳＦＴ＿Ｂに、符号化データＥ＿３が累積部ＶＳＦＴ＿Ａに振分けられた場合の、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂ「５」、「８」の差「３」より小さくなる。
【００３３】
次いで、図５（Ｂ）には、あらたな符号化データＥ＿４、Ｅ＿５の振分けが行われるときの状態が示される。このとき、図５（Ａ）の振分けにより、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂは「７」、「６」である。よって、累積符号長Ｓｕｍ＿Ａは、累積符号長Ｓｕｍ＿Ｂより大きい。一方、符号化データＥ＿４、Ｅ＿５の符号長Ｌ＿４、Ｌ＿５はそれぞれ「４」、「２」であり、符号長Ｌ＿４は符号長Ｌ＿５より大きい。よって、符号化データＥ＿４は累積部ＶＳＦＴ＿Ｂに、符号化データＥ＿５は累積部ＶＳＦＴ＿Ａに振分けられる。つまり、振分けＡ１が行われる。このとき、振分けデータＣＳは、「１」である。
【００３４】
すると、累積符号化データＤｔ＿Ａの累積符号長Ｓｕｍ＿Ａは、符号化データＥ＿５の符号長「２」が加算されて「９」になる。一方、累積符号化データＤｔ＿Ｂの累積符号長Ｓｕｍ＿Ｂは、符号化データＥ＿４の符号長「４」が加算されて「１０」になる。すると、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの差は、「１」である。これは、たとえば振分けＡ０が行われて累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂがそれぞれ「１２」、「８」になる場合の差「４」より小さくなる。
【００３５】
次いで、図５（Ｃ）には、あらたな符号化データＥ＿６、Ｅ＿７の振分けが行われるときの状態が示される。このとき、図５（Ｂ）の振り分けにより、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂは「９」、「１０」であり、累積符号長Ｓｕｍ＿Ａは、累積符号長Ｓｕｍ＿Ｂより小さい。一方、符号化データＥ＿６、Ｅ＿７の符号長Ｌ＿６、Ｌ＿７はそれぞれ「３」、「１」であり、符号長Ｌ＿６は符号長Ｌ＿７より大きい。よって、符号化データＥ＿６は累積部ＶＳＦＴ＿Ａに、符号化データＥ＿７は累積部ＶＳＦＴ＿Ｂに振分けられる。つまり、振分けＡ０が行われる。このとき、振分けデータＣＳは、「０」である。
【００３６】
すると、累積符号化データＤｔ＿Ａの累積符号長Ｓｕｍ＿Ａは、符号化データＥ＿６の符号長「３」が加算されて「１２」になる。一方、累積符号化データＤｔ＿Ｂの累積符号長Ｓｕｍ＿Ｂは、符号化データＥ＿７の符号長「１」が加算されて「１１」になる。すると、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの差は、「１」である。これは、たとえば振分けＡ１が行われて累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂは、それぞれ「１０」、「１３」になる場合の差「３」より小さくなる。
【００３７】
図６は、可変長符号化部２２の動作手順を説明するフローチャート図である。図６に示す手順は、可変長符号化部２２の各部により実行される。可変長符号化部２２の各部の動作は、図３では図示を省略した制御部により制御される。
【００３８】
まず、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のカウンタ変数ｎの値が「０」に初期設定される。また、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの値が「０」にそれぞれ初期設定される（Ｓ２）。たとえば、振分判定部３１がカウンタ変数ｎを初期設定する。また、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂが記憶部７０の累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂを初期設定する。次いで、セレクタ３４ａ、３４ｂは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２から、符号化データＥ＿ｎ、Ｅ＿ｎ＋１を取得する（Ｓ４）。次いで、セレクタ３４ａ、３４ｂ、及び比較部３２は、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２から、符号化対象データＥ＿ｎ、Ｅ＿ｎ＋１の符号長Ｌ＿ｎ、Ｌ＿ｎ＋１を取得する（Ｓ６）。
【００３９】
次いで、振分判定部３１は、比較部３８による比較結果から、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さいかを判定する（Ｓ８）。累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さいとき（Ｓ８のＹｅｓ）、振分判定部３１は、比較部３２による比較結果から、符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より大きいかを判定する（Ｓ１０）。一方、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂ以上のとき（Ｓ８のＮｏ）、振分判定部３１は、符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より大きいかを判定する（Ｓ１２）。
【００４０】
累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さく、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より大きいとき、手順Ｓ１０の判定結果はＹｅｓになる。また、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂ以上であり、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１以下のとき、手順Ｓ１２の判定結果はＮｏになる。この２つのケースでは、振分判定部３１は、振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）を行う（Ｓ１４）。そして、累積部ＶＳＦＴ＿Ａは、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎを加算する。また、累積部ＶＳＦＴ＿Ｂは、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎ＋１を加算する（Ｓ１６）。そして、振分判定部３１は、値「０」の振分けデータＣＳを、ビット列生成部４０またはバッファメモリ４２に出力する（Ｓ１８）。
【００４１】
累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂ以上、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１以下のとき、手順Ｓ１０の判定結果はＮｏになる。また、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さく、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より大きいとき、手順Ｓ１２の判定結果はＹｅｓになる。この２つのケースでは、振分判定部３１は、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）を行う（Ｓ２０）。そして、累積部ＶＳＦＴ＿Ａは、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎ＋１を加算する。また、累積部ＶＳＦＴ＿Ｂは、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎを加算する（Ｓ２２）。そして、振分判定部３１は、値「１」の振分けデータＣＳを、ビット列生成部４０またはバッファメモリ４２に出力する（Ｓ２４）。
【００４２】
そして、カウンタ変数ｎが「２」インクリメントされる（Ｓ２６）。そして、処理単位の領域におけるすべての符号化対象データＤ＿ｎ、Ｄ＿ｎ＋１の符号化と振分けが完了するまで、手順Ｓ４〜Ｓ２６が繰り返される（Ｓ２８のＮｏ）。
【００４３】
このように、第１の実施形態によれば、連続する２個の可変調符号化データＥ＿ｎ、Ｅ＿ｎ＋１を２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂのいずれかに、それらの累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの差が小さくなるように振り分けるので、２個の系列に対して符号化データ数が均等に振り分けられるとともに、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂが略均等化される。その結果、後述する２個の復号部での復号処理時間が均等化され、全体の処理時間を短くできる。
【００４４】
図７は、可変長復号部２４の詳細な構成例を示す。ここでは、可変長復号部２４は、２系列の復号処理を並列して行うための構成を有する。可変長復号部２４内のバッファメモリ４４には、外部メモリ４からビット列ＢＳが読み出される。これとともに、振分けデータＣＳが、ビット列ＢＳとは別に、またはビット列ＢＳの一部として、外部メモリ４から可変長復号部２４内のバッファメモリ４４に読み出される。符号化データＥ＿ｎ、Ｅ＿ｎ＋１がビット列化されることで、単一のアクセスによりバッファメモリ４４から符号化データＥ＿ｎ、Ｅ＿ｎ＋１を読み出すことができる。
【００４５】
符号化データ復元部４６は、ビット列ＢＳを一定のビット数（たとえば１ビット）ずつ分割して、二つの系列の累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂを復元する。ビット列ＢＳは、バッファメモリ４４から読み出される。符号化データ復元部４６は、たとえば、ビット列生成部４０のマルチプレクサに対応するデマルチプレクサを有する。これにより、ビット列ＢＳは、累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂに分割される。符号化データＥ＿ｎ、Ｅ＿ｎ＋１は、累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂに含まれている。累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂは、それぞれ記憶部４８ａ、４８ｂに格納される。記憶部４８ａ、４８ｂは、次に説明する２個の復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂにそれぞれ対応するバッファであり、たとえばフリップフロップ回路である。また、バッファメモリ４４のビット列ＢＳとは別領域格納されている振分けデータＣＳは、並替部５０に出力される。
【００４６】
２個の復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂは、２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂに累積された符号化データＥ＿ｎ、Ｅ＿ｎ＋１をそれぞれ並列して順次復号する。復号部ＶＬＤ＿Ａは、記憶部４８ａに格納された累積符号化データＤｔ＿Ａから順次符号化データＥ＿ｎ、またはＥ＿ｎ＋１を読み出して，復号データＦ＿Ａに復号する。また、復号部ＶＬＤ＿Ｂは、記憶部４８ｂに格納された累積符号化データＤｔ＿Ｂから順次符号化データＥ＿ｎ、またはＥ＿ｎ＋１を読み出して、復号データＦ＿Ｂに復号する。
【００４７】
ここで、図８に、復号部ＶＬＤ＿Ａの詳細な構成例を示す。なお、復号部ＶＬＤ＿Ｂも、同じ構成を有する。よって、次の説明は、復号部ＶＬＤ＿Ｂにも適用される。セレクタ７６には、累積符号化データＤｔ＿Ａ（復号部ＶＬＤ＿Ｂの側では累積符号化データＤｔ＿Ｂ）が入力される。セレクタ７６は、データ要求信号Ｒｅｑに応答して、３２ビット長の累積符号化データＤｔ＿Ａを選択して記憶部７８に格納する。記憶部７８は、たとえばフリップフロップ回路である。記憶部７８に格納された累積符号化データＤｔ＿Ａは、セレクタ７６に帰還入力され、一方で可変シフタ８０に入力される。セレクタ７６に帰還入力された累積符号化データＤｔ＿Ａは、新たな累積符号化データＤｔ＿Ａが要求されるまで、繰り返し記憶部７８に格納される。可変シフタ８０は、累積符号化データＤｔ＿Ａにおける復号済みの符号長分ビットシフトした位置からビットデータを読み出し、記憶部８２に格納する。記憶部８２は、たとえばフリップフロップ回路である。復号済みの符号長ＳＵＭ＿１´は、後述するように加算器８６から入力される。
【００４８】
記憶部８２に格納されたビットデータは、順次復号テーブルＴＢＬ０＿Ａに入力される。復号テーブルＴＢＬ０＿Ａは、符号化データと、その符号長に応じた発生頻度の復号データとを対応付ける。復号テーブルＴＢＬ０＿Ａは、可変長符号化部２２の符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２に対応する。復号テーブルＴＢＬ０＿Ａは、入力されたビットデータとテーブル内の符号化データとを上位ビットから順に照合し、一致する符号化データを検索する。そして、検索された符号化データＥ＿Ａに対応する復号データＦ＿Ａ（復号部ＶＬＤ＿Ｂ側では、復号データＦ＿Ｂ）が出力される。出力された復号データＦ＿Ａは、記憶部８４に格納される。記憶部８４は、たとえばフリップフロップ回路である。記憶部８４に格納された復号データＦ＿Ａは、セレクタ５０ａ、５０ｂに出力される。また、復号テーブルＴＢＬ０＿Ａは、復号済みの符号長Ｌ＿Ａを出力する。復号済みの符号長Ｌ＿Ａは、加算器８６に送られる。
【００４９】
加算器８６は、記憶部８８に格納された復号済みの符号長ＳＵＭ＿１´に、あらたな復号済みの符号長Ｌ＿Ａを加算する。記憶部８８は、たとえばフリップフロップ回路である。こうして累計された復号済みの符号長ＳＵＭ＿１´が、記憶部８８に格納され、また、可変シフタ８０に入力される。その一方で、復号済み符号長ＳＵＭ＿１´の繰り上げビットが、データ要求信号Ｒｅｑとして、セレクタ７６と図７の記憶部４８ａに入力される。復号済み符号長ＳＵＭ＿１´は、たとえば、累積符号化データＤｔ＿Ａの上限の符号長３２ビットを示す５ビットのデータである。復号済みの符号長ＳＵＭ＿１´の繰り上げビットが、データ要求信号Ｒｅｑとしてセレクタ７６や記憶部４８ａに送られる。よって、復号済みの符号長が３２ビットを超えたとき、新たなデータ要求を示す値「１」のデータ要求信号Ｒｅｑが送られる。これに応答して、記憶部４８ａからセレクタ７６に、あらたな３２ビット長の累積符号化データＤｔ＿Ａが送られる。
【００５０】
図７に戻る。並替部５０は、２個の復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂによりそれぞれ復号された２個の復号データＦ＿Ａ、Ｆ＿Ｂを、振分部３０による振分けに従ってもとの順序に並べ替える。たとえば、図９（Ａ）には、可変長符号化部２２の振分部３０において振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）が行われた場合が示される。このことは、振分けデータＣＳの値「０」に示される。このとき、累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂからそれぞれ復号された復号データＦ＿Ａ、Ｆ＿Ｂは、それぞれ、符号化データＥ＿ｎ、Ｅ＿ｎ＋１から復号されたものである。よって、復号データＦ＿Ａは復号データＦ＿ｎとして、復号データＦ＿Ｂは復号データＦ＿ｎ＋１として並べ替えられる。また、図９（Ｂ）には、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）が行われた場合が示される。このことは、振分けデータＣＳの値「１」に示される。このとき復号データＦ＿Ａ、Ｆ＿Ｂは、それぞれ、符号化データＥ＿ｎ＋１、Ｅ＿ｎから復号されたものである。よって、復号データＦ＿Ａは復号データＦ＿ｎ＋１として、復号データＦ＿Ｂは復号データＦ＿ｎとして並べ替えられる。このようにして、復号データＦ＿Ａ、Ｆ＿Ｂが、もとの順に並べ替えられる。
【００５１】
並替部５０では、復号データＦ＿Ａ、Ｆ＿Ｂの両方がセレクタ５０ａ、５０ｂに入力される。そして、セレクタ５０ａ、５０ｂは、振分けデータＣＳに応じて、２つの入力のいずれかを選択して出力する。たとえば、振分けデータＣＳの値が「０」のとき、セレクタ５０ａは復号データＦ＿Ａを選択して出力し、セレクタ５０ｂは復号データＦ＿Ｂを選択して出力する。一方、振分けデータＣＳの値が「１」のとき、セレクタ５０ａは復号データＦ＿Ｂを選択して出力し、セレクタ５０ｂは復号データＦ＿Ａを選択して出力する。こうして、セレクタ５０ａは、復号データＦ＿Ａ、Ｆ＿Ｂのうち、符号化データＥ＿ｎから復号された復号データを選択して出力する。また、セレクタ５０ｂは、復号データＦ＿Ａ、Ｆ＿Ｂのうち、符号化データＥ＿ｎ＋１から復号された復号データを選択して出力する。
【００５２】
セレクタ５０ａから出力される復号データＦ＿ＡまたはＦ＿Ｂは、記憶部５２ａに格納される。また、セレクタ５０ｂから出力される復号データＦ＿ＡまたはＦ＿Ｂは、記憶部５２ｂに格納される。こうして、２個の復号データＦ＿Ａ、Ｆ＿Ｂが、符号化データＥ＿ｎ、Ｅ＿ｎ＋１に対応するもとの順序で並べ替えられ、記憶部５２ａ、５２ｂに格納される。そして、記憶部５２ａ、５２ｂから、符号化データＥ＿ｎ、Ｅ＿ｎ＋１からそれぞれ復号された復号データＦ＿ｎ、Ｆ＿ｎ＋１が出力される。
【００５３】
図１０は、可変長復号部２４の動作手順を説明するフローチャート図である。図１０に示す手順は、可変長復号部２４の各部により実行される。可変長復号部２４の各部の動作は、図７では図示を省略した制御部により制御される。
【００５４】
まず、符号化データ復元部４６が、ビット列ＢＳを分割して、累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂを復元する（Ｓ３０）。次いで、復号データＦ＿ｎ、Ｆ＿ｎ＋１をカウントするカウンタ変数ｎの値が「０」に初期化される（Ｓ３０）。たとえば、記憶部５２ａ、５２ｂが復号データＦ＿ｎ、Ｆ＿ｎ＋１のカウンタ変数ｎの値を「０」に設定する。次いで、復号部ＶＤＬ＿Ａ、ＶＤＬ＿Ｂが、復号データＦ＿Ａ、Ｆ＿Ｂを復号する（Ｓ３２）。次いで、並替部５０は、振分けデータＣＳを取得する（Ｓ３４）。
【００５５】
振分けＡ０が行われたとき、振分けデータＣＳは「０」である（Ｓ３６のＹｅｓ）。よって、このとき、並替部５０は、復号データＦ＿Ａが符号化データＥ＿ｎに、復号データＦ＿Ｂが符号化データＥ＿ｎ＋１に対応するように並べ替える（Ｓ３８）。一方、振分けＡ１が行われたとき、振分けデータＣＳは「０」でなく「１」である（Ｓ３６のＮｏ）。よって、このとき、並替部５０は、復号データＦ＿Ａが符号化データＥ＿ｎ＋１に、復号データＦ＿Ｂが符号化データＥ＿ｎに対応するように並べ替える（Ｓ４０）。
【００５６】
そして、カウンタ変数ｎが「２」インクリメントされる（Ｓ４２）。そして、処理単位の領域におけるすべての符号化データが復号されるまで、手順Ｓ３１〜Ｓ４２が繰り返される（Ｓ４４のＮｏ）。
【００５７】
このように、第１の実施形態によれば、２個の系列に振り分けられた符号化データ数が均等であり、かつ、２個の累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂでの累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂが略均等化されることで、２個の復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂによる累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂの復号処理速度が略均等化される。よって、復号対象データの符号化データ数、あるいは符号長が不均等であることにより、符号化データ数、あるいは符号長が大きい方の処理時間に全体の処理時間が制約されるといったことを回避できる。よって、並列化された復号処理がさらに高速化される。
【００５８】
［Ｎ＝３の例］
上述の説明では、Ｎ＝２の場合の２系列の振分け、及び復号処理の例を示した。しかしながら、本実施形態は、Ｎが３以上の場合の３系列以上の振分け、及び復号処理を行う場合にも適用できる。次に、Ｎ＝３の例について説明する。
【００５９】
図１１は、Ｎ＝３の例における可変長符号化部２２の構成を示す。ここでは、可変長符号化部２２は、図３の構成に加えて、符号化テーブルＴＢＬ０＿３、累積部ＶＳＦＴ＿Ｃ、及び記憶部３６ｃを有する。また、振分部３０は、セレクタ３４ｃを有する。
【００６０】
符号化テーブルＴＢＬ０＿３は、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２と同じ構成を有する。ここでは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２、及びＴＢＬ０＿３は、それぞれ、連続する符号化対象データＤ＿ｎ（ｎ＝０、３、６、９、・・・）、Ｄ＿ｎ＋１、及びＤ＿ｎ＋２を、符号化データＥ＿ｎ、Ｅｎ＋１、及びＥ＿ｎ＋２にそれぞれ符号化する。また、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２、及びＴＢＬ０＿３は、対応する符号長Ｌ＿ｎ、Ｌ＿ｎ＋１、及び符号長Ｌ＿ｎ＋２をそれぞれ出力する。
【００６１】
符号化テーブルＴＢＬ０＿１〜ＴＢＬ０＿３からそれぞれ出力される符号化データＥ＿ｎとその符号長Ｌ＿ｎ、符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１、及び符号化データＥ＿ｎ＋２とその符号長Ｌ＿ｎ＋２は、いずれもセレクタ３４ａ〜３４ｃに入力される。また、符号長Ｌｎ〜Ｌ＿ｎ＋２は、比較部３２に入力される。
【００６２】
累積部ＶＳＦＴ＿Ｃは、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂと同じ構成を有する。累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂ、及びＶＳＦＴ＿Ｃは、符号化データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２のいずれかをそれぞれ累積する。累積部ＶＳＦＴ＿Ｃが累積した符号化データは、累積符号化データＤｔ＿Ｃとして記憶部３６ｃに格納される。また、累積部ＶＳＦＴ＿Ｃは、累積符号化データＤｔ＿Ｃの累積符号長Ｓｕｍ＿Ｃを算出する。累積符号長Ｓｕｍ＿Ｃは、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂとともに比較部３８に入力される。
【００６３】
振分部３０は、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂ、及びＶＳＦＴ＿Ｃにおける累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂ、及びＳｕｍ＿Ｃの差が小さくなるような振分けを行う。具体的には、符号化データＥ＿ｎ、Ｅ＿ｎ＋１、Ｅ＿ｎ＋２のうち最も符号長が長いものが、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂ、ＶＳＦＴ＿Ｃのうち最も累積符号長が短いものに振り分けられる。そして、最も符号長が長いもの以外の２個の符号化データは、一定のルールで、最も累積符号長が短いもの以外の２個の累積部に振り分けられる。そうすることで、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂ、及びＳｕｍ＿Ｃの差をできるだけ小さくすることができる。たとえば、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂ、及びＳｕｍ＿Ｃの差を、符号長Ｌ＿ｎ、Ｌ＿ｎ＋１、及びＬ＿ｎ＋２のうちの最大符号長以下にすることができる。また、振分判定部３１は、振分けを示す振分けデータＣＳを生成する。振分けデータＣＳは、たとえば２ビットのデータである。上記の一定のルールに基づく振分けと振分けデータＣＳの値は、次の３通りである。
振分けＢ０：
振分けデータＣＳ＝０
符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、
符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ、
符号化データＥ＿ｎ＋２→累積部ＶＳＦＴ＿Ｃ
振分けＢ１：
振分けデータＣＳ＝１
符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ、
符号化データＥ＿ｎ＋２→累積部ＶＳＦＴ＿Ｂ、
符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｃ  
振分けＢ２：
振分けデータＣＳ＝２
符号化データＥ＿ｎ＋２→累積部ＶＳＦＴ＿Ａ、
符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、
符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｃ
振分けデータＣＳは、制御信号として、セレクタ３４ａ、３４ｂ、及び３４ｃに入力される。また、セレクタ３４ａ、３４ｂ、及び３４ｃは、振分けデータＣＳに応じていずれかの入力を選択して出力する。たとえば、振分けデータＣＳが「０」のとき、セレクタ３４ａは、符号化データＥ＿ｎとその符号長Ｌ＿ｎを累積部ＶＳＦＴ＿Ａに出力する。また、このとき、セレクタ３４ｂは、符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１を累積部ＶＳＦＴ＿Ｂに出力する。また、このとき、セレクタ３４ｃは、符号化データＥ＿ｎ＋２とその符号長Ｌ＿ｎ＋２を累積部ＶＳＦＴ＿Ｃに出力する。また、振分けデータＣＳが「１」のとき、セレクタ３４ａは、符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１を累積部ＶＳＦＴ＿Ａに出力する。また、このとき、セレクタ３４ｂは、符号化データＥ＿ｎ＋２とその符号長Ｌ＿ｎ＋２を累積部ＶＳＦＴ＿Ｂに出力する。また、このとき、セレクタ３４ｃは、符号化データＥ＿ｎとその符号長Ｌ＿ｎを累積部ＶＳＦＴ＿Ｃに出力する。そして、振分けデータＣＳが「２」のとき、セレクタ３４ａは、符号化データＥ＿ｎ＋２とその符号長Ｌ＿ｎ＋２を累積部ＶＳＦＴ＿Ａに出力する。また、このとき、セレクタ３４ｂは、符号化データＥ＿ｎとその符号長Ｌ＿ｎを累積部ＶＳＦＴ＿Ｂに出力する。また、このとき、セレクタ３４ｃは、符号化データＥ＿ｎ＋１とその符号長Ｌ＿ｎ＋１を累積部ＶＳＦＴ＿Ｃに出力する。
【００６４】
ビット列生成部４０は、記憶部３６ａ、３６ｂ、及び３６ｃにそれぞれ格納された累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂ、及びＤｔ＿Ｃを、たとえば１ビットずつ順番に連結して、ビット列ＢＳを生成する。さらに、ビット列生成部４０は、ビット列ＢＳに振分けデータＣＳを連結してもよい。そして、ビット列ＢＳと振分けデータＣＳは、バッファメモリ４２に格納される。
【００６５】
図１２、１３は、図１１の可変長符号化部２２の動作手順を説明するフローチャート図である。図１２では、まず、符号化データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２のカウンタ変数ｎが「０」に初期設定される。また、累積符号長データＳｕｍ＿Ａ、Ｓｕｍ＿Ｂ、及びＳｕｍ＿Ｃが「０」に初期設定される（Ｓ１０２）。次いで、セレクタ３４ａ、３４ｂ、及び３４ｃは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２、及びＴＢＬ０＿３から符号化データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２を取得する（Ｓ１０４）。次いで、比較部３２、ならびにセレクタ３４ａ、３４ｂ、及び３４ｃは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２、及びＴＢＬ３から符号化対象データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２の符号長Ｌ＿ｎ、Ｌ＿ｎ＋１、及びＬ＿ｎ＋２を取得する（Ｓ１０６）。
【００６６】
次いで、振分判定部３１は、比較部３８による比較結果から、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂ、Ｓｕｍ＿Ｃのうちで、累積符号長Ｓｕｍ＿Ａが最小かを判定する（Ｓ１０８）。累積符号長Ｓｕｍ＿Ａが最小のとき（Ｓ１０８のＹｅｓ）、振分判定部３１は判定結果ＳＵＭ＿ＳＴＡＴＥ＝０を生成する（Ｓ１１４）。また、累積符号長Ｓｕｍ＿Ａが最小でないとき（Ｓ１０８のＮｏ）、振分判定部３１は、累積符号長Ｓｕｍ＿Ｂが最小かを判定する（Ｓ１１０）。累積符号長Ｓｕｍ＿Ｂが最小のとき（Ｓ１１０のＹｅｓ）、振分判定部３１は判定結果ＳＵＭ＿ＳＴＡＴＥ＝１を生成する（Ｓ１１６）。また、累積符号長Ｓｕｍ＿Ｂが最小でないとき（Ｓ１１０のＮｏ）、振分判定部３１は、累積符号長Ｓｕｍ＿Ｃが最小と判定し、振分判定部３１は判定結果ＳＵＭ＿ＳＴＡＴＥ＝２を生成する（Ｓ１１８）。
【００６７】
次いで、振分判定部３１は、比較部３２による比較結果から、符号長Ｌ＿ｎ、Ｌ＿ｎ＋１、及びＬ＿ｎ＋２のうちで、符号長Ｌ＿ｎが最大かを判定する（Ｓ１２０）。符号長Ｌ＿ｎが最大のとき（Ｓ１２０のＹｅｓ）、振分判定部３１は、判定結果ＬＮ＿ＳＴＡＴＥ＝０を生成する（Ｓ１２６）。符号長Ｌ＿ｎが最大でないとき（Ｓ１２０のＮｏ）、振分判定部３１は、符号長Ｌ＿ｎ＋１が最大かを判定する（Ｓ１２２）。符号長Ｌ＿ｎ＋１が最大のとき（Ｓ１２２のＹｅｓ）、振分判定部３１は、判定結果ＬＮ＿ＳＴＡＴＥ＝１を生成する（Ｓ１２８）。また、符号長Ｌ＿ｎ＋１が最大でないとき（Ｓ１２２のＮｏ）、振分判定部３１は、符号長Ｌ＿ｎ＋２が最大と判定し、振分判定部３１は、判定結果ＬＮ＿ＳＴＡＴＥ＝２を生成する（Ｓ１３０）。
【００６８】
次いで、図１３に進み、振分判定部３１は、判定結果の組合せ（ＳＵＭ＿ＳＴＡＴＥ、ＬＮ＿ＳＴＡＴＥ）が、（０、０）、（１、１）、または（２、２）であるかを判定する（Ｓ１３２）。ここで、次の３通りのいずれかの場合、判定結果がＹｅｓになる。
［１］累積符号長Ｓｕｍ＿Ａが最小、かつ符号長Ｌ＿ｎが最大
［２］累積符号長Ｓｕｍ＿Ｂが最小、かつ符号長Ｌ＿ｎ＋１が最大
［３］累積符号長Ｓｕｍ＿Ｃが最小、かつ符号長Ｌ＿ｎ＋２が最大
判定結果がＹｅｓの場合、振分判定部３１は、振分けＢ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋２→累積部ＶＳＦＴ＿Ｃ）を行う（Ｓ１３８）。次いで、累積部ＶＳＦＴ＿Ａが、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎを加算する。また、累積部ＶＳＦＴ＿Ｂが、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎ＋１を加算する。そして、累積部ＶＳＦＴ＿Ｃが、累積符号長Ｓｕｍ＿Ｃに符号長Ｌ＿ｎ＋３を加算する（Ｓ１４４）。次いで、振分判定部３１は、値「０」の振分けデータＣＳを、ビット列生成部４０、あるいはバッファメモリ４２に出力する（Ｓ１５０）。
【００６９】
手順Ｓ１３２の判定結果がＮｏの場合、振分判定部３１は、データＳＵＭ＿ＳＴＡＴＥ、ＬＮ＿ＳＴＡＴＥが、（０、１）、（１、２）、または（２、０）であるかを判定する（Ｓ１３４）。
ここで、次の３通りのいずれかの場合、判定結果がＹｅｓになる。
［４］累積符号長Ｓｕｍ＿Ａが最小、かつ符号長Ｌ＿ｎ＋１が最大
［５］累積符号長Ｓｕｍ＿Ｂが最小、かつ符号長Ｌ＿ｎ＋２が最大
［６］累積符号長Ｓｕｍ＿Ｃが最小、かつ符号長Ｌ＿ｎが最大
判定結果がＹｅｓの場合、振分判定部３１は、振分けＢ１（符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋２→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｃ）を行う（Ｓ１４０）。次いで、累積部ＶＳＦＴ＿Ａが、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎ＋１を加算する。また、累積部ＶＳＦＴ＿Ｂが、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎ＋２を加算する。そして、累積部ＶＳＦＴ＿Ｃが、累積符号長Ｓｕｍ＿Ｃに符号長Ｌ＿ｎを加算する（Ｓ１４６）。次いで、振分判定部３１は、値「１」の振分けデータＣＳを、ビット列生成部４０、あるいはバッファメモリ４２に出力する（Ｓ１５２）。
【００７０】
手順Ｓ１３４の判定結果がＮｏの場合、振分判定部３１は、データＳＵＭ＿ＳＴＡＴＥ、ＬＮ＿ＳＴＡＴＥが、（０、２）、（１、０）、または（２、１）であると判定する。
この場合、次の３通りのいずれかに対応する。
［７］累積符号長Ｓｕｍ＿Ａが最小、かつ符号長Ｌ＿ｎ＋２が最大
［８］累積符号長Ｓｕｍ＿Ｂが最小、かつ符号長Ｌ＿ｎが最大
［９］累積符号長Ｓｕｍ＿Ｃが最小、かつ符号長Ｌ＿ｎ＋１が最大
振分判定部３１は、振分けＢ２（符号化データＥ＿ｎ＋２→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｃ）を行う（Ｓ１４２）。次いで、累積部ＶＳＦＴ＿Ａが、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎ＋２を加算する。また、累積部ＶＳＦＴ＿Ｂが、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎを加算する。そして、累積部ＶＳＦＴ＿Ｃが、累積符号長Ｓｕｍ＿Ｃに符号長Ｌ＿ｎ＋１を加算する（Ｓ１４８）。次いで、振分判定部３１は、値「２」の振分けデータＣＳを、ビット列生成部４０、あるいはバッファメモリ４２に出力する（Ｓ１５４）。
【００７１】
そして、カウンタ変数ｎが「３」だけインクリメントされる（Ｓ１５６）。そして、処理対象の領域におけるすべての符号化対象データの符号化と振分け処理が完了するまで、手順Ｓ１０４〜Ｓ１５４が繰り返される（Ｓ１５８のＮｏ）。
【００７２】
図１４は、Ｎ＝３の例における可変長復号部２４の構成を示す。図１４では、可変長復号部２４は、図７の構成に加え、記憶部４８ｃ、復号部ＶＬＤ＿Ｃ、及び記憶部５２Ｃを有する。また、並替部５０は、セレクタ５０Ｃを有する。
【００７３】
符号化データ復元部４６は、ビット列ＢＳを一定のビット数（たとえば１ビット）ずつ分割して、累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂ、及びＤｔ＿Ｃを復元する。累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂ、及びＤｔ＿Ｃには、符号化データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２が振分けＢ０〜Ｂ２に基づいて振り分けられている。復元された累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂ、及びＤｔ＿Ｃは、それぞれ、記憶部４８ａ、４８ｂ、及び４８ｃに格納される。
【００７４】
復号部ＶＬＤ＿Ｃは、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂと同じ構成を有する。復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂ、及びＶＬＤ＿Ｃは、記憶部４８ａ、４８ｂ、及び４８ｃに格納される累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂ、及びＤｔ＿Ｃを順次復号する。復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂ、及びＶＬＤ＿Ｃで復号された復号データＦ＿Ａ、Ｆ＿Ｂ、及びＦ＿Ｃは、いずれも並替部５０のセレクタ５０ａ、５０ｂ、及び５０ｃに入力される。
【００７５】
並替部５０では、セレクタ５０ａ、５０ｂ、及び５０ｃが、振分けデータＣＳに基づいて、復号データＦ＿Ａ、Ｆ＿Ｂ、及びＦ＿Ｃのいずれかを選択して出力する。たとえば、振分けデータＣＳの値が「０」のとき、セレクタ５０ａは復号データＦ＿Ａを、セレクタ５０ｂは復号データＦ＿Ｂを、セレクタ５０ｃは復号データＦ＿Ｃをそれぞれ選択して出力する。また、振分けデータＣＳの値が「１」のとき、セレクタ５０ａは復号データＦ＿Ｂを、セレクタ５０ｂは復号データＦ＿Ｃを、セレクタ５０ｃは復号データＦ＿Ａをそれぞれ選択して出力する。また、振分けデータＣＳの値が「２」のとき、セレクタ５０ａは復号データＦ＿Ｃを選択して出力する。このとき、セレクタ５０ｂは復号データＦ＿Ａを選択して出力する。また、このとき、セレクタ５０ｃは復号データＦ＿Ｂを選択して出力する。
【００７６】
こうして、セレクタ５０ａは、復号データＦ＿Ａ、Ｆ＿Ｂ、及びＦ＿Ｃのうち、符号化データＥ＿ｎから復号された復号データを選択して出力する。また、セレクタ５０ｂは、復号データＦ＿Ａ、Ｆ＿Ｂ、及びＦ＿Ｃのうち、符号化データＥ＿ｎ＋１から復号された復号データを選択して出力する。そして、セレクタ５０ｃは、復号データＦ＿Ａ、Ｆ＿Ｂ、及びＦ＿Ｃのうち、符号化データＥ＿ｎ＋２から復号された復号データを選択して出力する。
【００７７】
こうして、符号化データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２から復号された復号データが、それぞれ記憶部５２ａ、５２ｂ、及び５２ｃに格納される。そして、記憶部５２ａ、５２ｂ、及び５２ｃに格納された復号データが、それぞれ、復号データＦ＿ｎ、Ｆ＿ｎ＋１、及びＦ＿ｎ＋２として出力される。これら復号データＦ＿ｎ、Ｆ＿ｎ＋１、及びＦ＿ｎ＋２を順番に並べることで、もとのデータに戻すことができる。このようにして、復号データが、もとの順に並べ替えられる。
【００７８】
図１５は、図１４の可変長復号部２４の動作手順を説明するフローチャート図である。まず、符号化データ復元部４６が、ビット列ＢＳを分割して、累積符号化データＤｔ＿Ａ、Ｄｔ＿Ｂ、及びＤｔ＿Ｃを復元する（Ｓ１６０）。次いで、復号データＦ＿ｎ、Ｆ＿ｎ＋１、及びＦ＿ｎ＋２をカウントするカウンタ変数ｎが値「０」に初期化される（Ｓ１６２）。次いで、復号部ＶＤＬ＿Ａ、ＶＤＬ＿Ｂ、及びＶＤＬ＿Ｃは、復号データＦ＿Ａ、Ｆ＿Ｂ、及びＦ＿Ｃを復号する（Ｓ１６４）。次いで、並替部５０は、振分けデータＣＳを取得する（Ｓ１６６）。
【００７９】
振分けデータＣＳが「０」のとき（Ｓ１６８のＹｅｓ）、並替部５０は、復号データＦ＿Ａが復号データＦ＿ｎ、復号データＦ＿Ｂが復号データＦ＿ｎ＋１、そして、復号データＦ＿Ｃが復号データＦ＿ｎ＋２に対応するように、並べ替える（Ｓ１７２）。また、振分けデータＣＳが「０」でなく「１」のとき（Ｓ１６８のＮｏ、Ｓ１７０のＹｅｓ）、並替部５０は、復号データＦ＿Ａが復号データＦ＿ｎ＋１、復号データＦ＿Ｂが復号データＦ＿ｎ＋２、そして、復号データＦ＿Ｃが復号データＦ＿ｎに対応するように並べ替える（Ｓ１７４）。そして、振分けデータＣＳが「１」でなく「２」のとき（Ｓ１７０のＮｏ）、並替部５０は、復号データＦ＿Ａが復号データＦ＿ｎ＋２、復号データＦ＿Ｂが復号データＦ＿ｎ、そして、復号データＦ＿Ｃが復号データＦ＿ｎ＋１に対応するように並べ替える（Ｓ１７４）。
【００８０】
そして、カウンタ変数ｎが「３」インクリメントされる（Ｓ１７８）。そして、すべての符号化データが処理されるまで、手順Ｓ１６４〜Ｓ１７８が繰り返される（Ｓ１８０のＮｏ）。
【００８１】
上述の説明では、符号化データＥ＿ｎ、Ｅ＿ｎ＋１、及びＥ＿ｎ＋２のうち最も符号長が長いものが、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂ、ＶＳＦＴ＿Ｃのうち最も累積符号長が短いものに振り分けられる例が示された。この例は、累積符号部の数が４個以上の場合にも適用できる。あるいは、たとえば、符号長が長い符号化データから順に、累積符号長が短い累積部へ振り分けることも可能である。そうすることで、累積部における累積符号長の差が小さくなるような振分けが可能になる。
【００８２】
上述のように、第１の実施形態によれば、Ｎ個の符号化データをＮ個の累積部のいずれかに、Ｎ個の累積部における符号化データ数が均等で、かつ、累積符号長の差が小さくなるように振り分けることで、累積部ごとのＮ個の復号部が処理する符号化データの累積符号長の差が小さくなる。よって、Ｎ個の復号部の処理時間の差が小さくなるので、符号長が長い方の復号部の処理時間に全体としての処理時間が制約されるといったことを回避できる。よって、全体としての復号処理が高速化される。
【００８３】
また、たとえば、１フレーム分の圧縮画像データを画像の領域単位で分割して復号処理を並列化する場合と比較すると、第１の実施形態は次のような有利な効果を奏する。たとえば、１フレームを前半、後半に分割する場合、展開された画像データに対し、近傍の画素を用いた画像処理（たとえば、平滑化）を行おうとすると、前半の圧縮画像データがすべて展開されないと、後半における前半との境界付近の画素に対する画像処理が開始できない。この点、第１の実施形態では、符号化データごとに復号処理が並列化されるので、近傍の画素がある程度まとまった状態で順次展開される。よって、展開された画像データから順次画像処理を行うことができ、画像処理まで含めた全体としての処理が高速化される。
【００８４】
また、領域単位で復号処理を並列化する場合、領域ごとに画像データを格納するためのバッファ用メモリが必要になる。あるいは、単一のメモリに複数の領域の画像データを格納すると、複数の復号部からのアクセスを調停するための処理負荷が増大する。この点、第１の実施形態では、符号化データを一つのバッファ用メモリに格納すればよいので、バッファ用メモリの数、容量、あるいはアクセス調停回路を節約できる。さらに、符号化データを所定のビットずつマルチプレクスしてビット列化することで、単一のアクセスによりバッファ用メモリから符号化データを読み出すことができる。よって、全体としての処理負荷が軽減でき、復号処理がさらに高速化される。
【００８５】
第１の実施形態では、並替部５０が、振分けデータＣＳに基づいて、復号データの並べ替えを行う例を示した。次に、振分けデータＣＳを用いずに、復号データの並べ替えを行う第２の実施形態について説明する。
【００８６】
［第２の実施形態］
第２の実施形態は、２個の符号化データの２個の累積部への振り分けに関する。２個の累積部の累積符号長の差が短くなるように振り分けるという点において、第２の実施形態は第１の実施形態と同じである。ただし、第２の実施形態では、振分けデータの代わりに、符号化データのビットパターンが振分けを示す情報を有する。
【００８７】
図１６は、第２の実施形態における可変長符号化部２２の構成例を示す。第１の実施形態と重複する部分には、図４と同じ符号が付される。第２の実施形態では、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、２個の符号化データＥ＿ｎ、Ｅ＿ｎ＋１のうち符号長がたとえば短い方の符号化データ（以下、判定用符号化データという）を、その順序に応じた（判定用符号化データがＥ＿ｎからＥ＿ｎ＋１かに応じた）ビットパターンで累積する。符号化データＥ＿ｎが短い方であり判定用符号化データなら、たとえば先頭ビット「０」を有するビットパターン（以下、ビットパターンＢＰ０という）で累積される。また、符号化データＥ＿ｎ＋１が短い方であり判定用符号化データなら、たとえば先頭ビット「１」を有するビットパターン（以下、ビットパターンＢＰ１という）で累積される。このように、２個の符号化データＥ＿ｎ、Ｅ＿ｎ＋１のうち短い方の判定用符号化データを、その短い方がＥ＿ｎかＥ＿ｎ＋１かに応じて先頭ビットが「０」または「１」のビットパターンにしておけば、後の並替えでもとの順序にもどすとき、符号長が短い方の先頭ビットが「０」ならその符号化データがＥ＿ｎ、「１」ならその符号化データがＥ＿ｎ＋１と判定でき、振分け情報を符号化データＥ＿ｎ、Ｅ＿ｎ＋１から抽出できる。
【００８８】
具体例を示す前に、符号化テーブルのテーブル種別について説明する。図１７には、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２内のテーブル種別ＴＢＬ０の例が示される。テーブル種別ＴＢＬ０では、符号化対象データの発生頻度が高い方から順に、符号長が短い符号化データが対応づけられる。たとえば、符号化対象データ「０」〜「２」には符号長が２〜３ビットの符号化データ「１０」〜「１１１」が、符号化対象データ「３」〜「１４」には、符号長が４〜５ビットの符号化データ「００００」〜「０１１１１」が対応付けられる。また、テーブル種別ＴＢＬ０は、一の符号化データが他の符号化データと先頭部で一致しないように構成される。符号化データ「１０」を例とすると、テーブル種別ＴＢＬ０には、先頭部に「１０」を有する他の符号化データは含まれない。かかるテーブル種別ＴＢＬ０において、符号長が２〜３ビットの符号化データ「１０」〜「１１１」は、先頭ビットが「１」のビットパターンＢＰ１に対応する。また、符号長が４〜５ビットの符号化データ「００００」〜「０１１１１」は、先頭ビットが「０」のビットパターンＢＰ０に対応する。
【００８９】
なお、テーブル種別ＴＢＬ１は、テーブル種別ＴＢＬ０の反転を示す。たとえば、テーブル種別ＴＢＬ１では、符号長が２〜３ビットの符号化データ「０１」〜「０００」はビットパターン／ＢＰ１であり、符号長が４〜５ビットの符号化データ「１１１１」〜「１００００」はビットパターン／ＢＰ０である。ただし、実際の符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２内の種別は、テーブル種別ＴＢＬ０である。
【００９０】
符号化データＥ＿ｎ、Ｅ＿ｎ＋１は、テーブル種別ＴＢＬ０の符号化テーブルＴＢＬ０＿１、またはＴＢＬ０＿２で符号化される。よって、符号化データＥ＿ｎ、Ｅ＿ｎ＋１は、符号長Ｌ＿ｎ、Ｌ＿ｎ＋１が４ビット未満の場合はビットパターンＢＰ１内のいずれかである。一方、符号化データＥ＿ｎ、Ｅ＿ｎ＋１は、符号長Ｌ＿ｎ、Ｌ＿ｎ＋１が４ビット以上の場合はビットパターンＢＰ０内のいずれかである。
【００９１】
図１８は、符号化データＥ＿ｎ、Ｅ＿ｎ＋１の、符号化時と累積時のビットパターンの具体例を示す。図１８（Ａ）、（Ｂ）は、符号化データＥ＿ｎが短い方の判定用符号化データである場合を示す。たとえば、図１８（Ａ）では、符号化データＥ＿ｎは２ビット長の「１０」、符号化データＥ＿ｎ＋１は３ビット長の「１１０」である。このとき、短い方の判定用符号化データＥ＿ｎは、先頭ビット「１」のビットパターンＢＰ１である。よって、判定用符号化データＥ＿ｎは、ビットパターン／ＢＰ１の「０１」に反転されて累積される。一方、長い方の符号化データＥ＿ｎ＋１は、先頭ビット「１」のビットパターンＢＰ１のまま累積される。図１８（Ｂ）では、符号化データＥ＿ｎは４ビット長の「００１１」、符号化データＥ＿ｎ＋１は５ビット長の「０１０００」である。このとき、短い方の判定用符号化データＥ＿ｎは、先頭ビット「０」のビットパターンＢＰ０である。よって、判定用符号化データＥ＿ｎは、そのままのビットパターンで累積される。長い方の符号化データＥ＿ｎ＋１も、先頭ビット「０」のビットパターンＢＰ０のまま累積される。
【００９２】
図１８（Ｃ）、（Ｄ）は、符号化データＥ＿ｎ＋１が短い方の判定用符号化データである場合を示す。たとえば、図１８（Ｃ）では、符号化データＥ＿ｎは３ビット長の「１１０」、符号化データＥ＿ｎ＋１は２ビット長の「１０」である。このとき、短い方の判定用符号化データＥ＿ｎ＋１は、先頭ビット「１」のビットパターンＢＰ１である。よって、判定用符号化データＥ＿ｎは、ビットパターンＢＰ１のまま累積される。長い方の符号化データＥ＿ｎも、先頭ビットが「１」のビットパターンＢＰ１のまま累積される。図１８（Ｄ）では、符号化データＥ＿ｎは５ビット長の「０１０００」、符号化データＥ＿ｎ＋１は４ビット長の「００１１」である。このとき、短い方の判定用符号化データＥ＿ｎ＋１は、先頭ビット「０」のビットパターンＢＰ０である。よって、判定用符号化データＥ＿ｎ＋１は、ビットパターン／ＢＰ０の「１１００」に反転されて累積される。一方、長い方の符号化データＥ＿ｎは、先頭ビット「０」のビットパターンＢＰ０のまま累積される。
【００９３】
図１８（Ａ）〜（Ｄ）をまとめると、図１８（Ｅ）、（Ｆ）に示すようになる。図１８（Ｅ）に示すように、符号化データＥ＿ｎの方が符号長が短く、符号化データＥ＿ｎが判定用符号化データである場合、符号長Ｌ＿ｎが４ビット未満であればそのビットパターンはＢＰ１であり、ビットパターン／ＢＰ１に反転され累積される。一方、符号長Ｌ＿ｎが４ビット以上であれば、判定用符号化データＥ＿ｎはビットパターンＢＰ０のまま累積される。また、図１８（Ｆ）に示すように、符号化データＥ＿ｎ＋１の方が符号長が短く、符号化データＥ＿ｎ＋１が判定用符号化データである場合、符号長Ｌ＿ｎ＋１が４ビット未満であればそのビットパターンはＢＰ１であり、そのまま累積される。一方、符号長Ｌ＿ｎが４ビット以上であれば、判定用符号化データＥ＿ｎはビットパターンＢＰ０であり、ビットパターン／ＢＰ０に反転されて累積される。
【００９４】
図１６に戻る。振分判定部３１は、第１の実施形態と同様にして、セレクタ３４ａ、３４ｂに制御信号を送り、符号化データＥ＿ｎ、Ｅ＿ｎ＋１を累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂに振り分ける。また、振分判定部３１は、比較部３２による符号長Ｌ＿ｎ、Ｌ＿ｎ＋１の比較結果により、どちらの符号長が長いかを判定する。そして、振分判定部３１は、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂに対し、ＩｓＥｎ信号と、ＩｓＬｎｇ信号を出力する。ＩｓＥｎ信号は、振り分けた符号化データが符号化データのうちどちらか、つまり符号化データＥ＿ｎか否かを示す。また、ＩｓＬｎｇ信号は、振り分けた符号化データが長い方か否かを示す。
【００９５】
累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、ＩｓＬｎｇ信号に基づいて、それぞれに振分けられた符号化データが短い方の判定用符号化データであるか否かを判定する。たとえば、また、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、ＩｓＥｎ信号に基づいて、判定用符号化データが符号化データＥ＿ｎであるか、または符号化データＥ＿ｎ＋１であるかを判定する。そして、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、図１８に示した場合分けに応じて、符号化データＥ＿ｎ、またはＥ＿ｎ＋１を、そのままのビットパターン、または反転したビットパターンで累積する。さらに、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、判定用符号化データを復号するためのテーブル種別の情報を、必要に応じて生成する。
【００９６】
図１９は、第２の実施形態における累積部ＶＳＦＴ＿Ａの詳細な構成例である。第２の実施形態では、累積部ＶＳＦＴ＿Ａは、図４で示した構成に加え、一点鎖線で囲った、テーブル種別判定部１０２、ビット反転部１０４、セレクタ１０６、テーブル種別ビット埋込制御部１０８、及び、加算器１１０を有する。累積部ＶＳＦＴ＿Ｂも、ここに示す構成を有する。よって、次の説明は、累積部ＶＳＦＴ＿Ｂにも適用される。
【００９７】
テーブル種別判定部１０２は、入力されるＩｓＬｎｇ信号から、振分けられた符号化データＥ＿Ａ（累積部ＶＳＦＴ＿Ｂ側では符号化データＥ＿Ｂ）が短い符号長で振分け判定に用いられる判定用符号化データであるかを判定する。また、テーブル種別判定部１０２は、入力されるＩｓＥｎ信号から、符号化データＥ＿Ａが符号化データＥ＿ｎか、またはＥ＿ｎ＋１かを判定する。
【００９８】
たとえば、符号化データＥ＿Ａが判定用符号化データでない場合、テーブル種別ＴＢＬ０により符号化された符号化データＥ＿Ａは、そのままのビットパターンで累積される。よって、テーブル種別判定部１０２は、テーブル種別ＴＢＬ０を示すテーブル種別信号ＴＳを生成する。テーブル種別信号ＴＳは、制御信号としてセレクタ１０６に送られる。セレクタ１０６は、テーブル種別ＴＢＬ０を示すテーブル種別信号ＴＳ＿Ａに応じて、符号化データＥ＿Ａを反転せずに記憶部６０に格納する。
【００９９】
一方、符号化データＥ＿Ａが判定用符号化データである場合、テーブル種別判定部１０２は、判定用符号化データＥ＿Ａの先頭ビットＨＢ＿Ａから、判定用符号化データＥ＿Ａのビットパターンを判定する。たとえば、先頭ビットＨＢ＿Ａが「０」であれば、ビットパターンＢＰ０である。また、先頭ビットＨＢ＿Ａが「１」であれば、ビットパターンＢＰ１である。
【０１００】
第１に、判定用符号化データＥ＿ＡがビットパターンＢＰ０の符号化データＥ＿ｎであるとき、または、ビットパターンＢＰ１の符号化データＥ＿ｎ＋１であるときは、図１８に示されるように、判定用符号化データＥ＿Ａは、そのままのビットパターンで累積される。よって、このとき、テーブル種別判定部１０２は、テーブル種別ＴＢＬ０を示すテーブル種別信号ＴＳをセレクタ１０６に入力する。すると、セレクタ１０６は、符号化データＥ＿Ａをそのままのビットパターンで記憶部６０に格納する。一方、第２に、判定用符号化データＥ＿Ａが、ビットパターンＢＰ１の符号化データＥ＿ｎであるとき、または、ビットパターンＢＰ０の符号化データＥ＿ｎ＋１であるときは、図１８に示されるように、判定用符号化データＥ＿Ａは、反転したビットパターンで累積される。よって、このとき、テーブル種別判定部１０２は、テーブル種別ＴＢＬ１を示すテーブル種別信号ＴＳをセレクタ１０６に入力する。すると、セレクタ１０６は、反転部１０４によりビットが反転された符号化データＥ＿Ａを、記憶部６０に格納する。
【０１０１】
ここで、図１７を参照する。図１８において示したとおり、符号長が長い方の符号化データはテーブル種別ＴＢＬ０で符号化されたまま反転されずに累積される。一方で、符号長が短い方の判定用符号化データのビットが反転されると、符号化データＥ＿ｎはビットパターン／ＢＰ１に反転され、符号化データＥ＿ｎ＋１はビットパターン／ＢＰ０に反転されるので、テーブル種別ＴＢＬ１で符号化されたことと等価になる。よって、詳しくは後述するように、符号化データの復号時には、テーブル種別ＴＢＬ０、ＴＢＬ１のどちらを用いるかが判定される。まず、テーブル種別ＴＢＬ０、ＴＢＬ１では、４ビット未満の符号化データはそれぞれ一意に特定できる。よって符号化データＥ＿ｎ、Ｅ＿ｎ＋１の符号長Ｌ＿ｎ、Ｌ＿ｎ＋１が両方とも４ビット未満のときには、判定用符号化データＥ＿ｎ、またはＥ＿ｎ＋１の先頭ビットが「０」か「１」かにより、テーブル種別ＴＢＬ０、ＴＢＬ１のどちらで符号化されたか判定される。つまり、テーブル種別ＴＢＬ０、ＴＢＬ１のどちらで復号すべきか判定される。しかしながら、４ビット以上の符号化データを含めると、一の符号化データが他の符号化データの先頭部と一致して、一意に特定できない場合がある。よって、判定用符号化データＥ＿ｎ、またはＥ＿ｎ＋１のビットパターンは、先頭ビットにより判定できない。かかる場合、次のようにして、判定用符号化データを復号するためのテーブル種別を示す情報が付加される。
【０１０２】
まず、テーブル種別判定部１０２は、符号化データＥ＿ｎ、Ｅ＿ｎ＋１の符号長Ｌ＿ｎ、Ｌ＿ｎ＋１のうち長い方が４ビット未満であるかを判定する。たとえば、符号長が長い方の符号化データはテーブル種別ＴＢＬ０で符号化されているので、先頭ビットが「１」であれば符号長は４ビット未満であると判定される。長い方が４ビット未満である場合、短い方も当然４ビット未満である。よって、この場合、判定用符号化データＥ＿ｎ、またはＥ＿ｎ＋１がＢＰ１、／ＢＰ１内のどのビットパターンであるかは、先頭ビットにより判定できる。よって、復号のための追加的なテーブル種別情報は付加されない。一方、符号長Ｌ＿ｎ、Ｌ＿ｎ＋１のうち長い方が４ビット以上の場合、テーブル種別判定部１０２は、累積部ＶＳＦＴ＿Ｂ側のテーブル種別ビット埋込制御部１０８にテーブル種別信号ＴＳ＿Ａを送る。また、累積部ＶＳＦＴ＿Ｂ側でも、符号化データＥ＿Ｂの符号長Ｌ＿Ｂに基づいて同じ処理が行われる。テーブル種別ビット埋込制御部１０８は、符号化データＥ＿Ａの符号長が長い方である場合、累積部ＶＳＦＴ＿Ｂ側から送られるテーブル種別信号ＴＳ＿Ｂに応じて、テーブル種別ビットＴＢを符号化データＥ＿Ａの後に付加する。テーブル種別ビットＴＢは、判定用符号化データを復号するためのテーブル種別を示す。テーブル種別ビットＴＢの値は、たとえば、テーブル種別ＴＢＬ０を示す「０」、またはＴＢＬ１を示す「１」である。
【０１０３】
また、このとき、加算器１１０は、テーブル種別ビットＴＢ分の1ビットを符号長Ｌ＿Ａに加算し、テーブル種別ビットＴＢが付加されることで、符号長Ｌ＿Ａは１ビット分長くなる。
【０１０４】
以降、図４で説明したようにして、符号化データＥ＿ｎ、またはＥ＿ｎ＋１が累積される。このようにして、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂは、判定用符号化データをその順序（つまり、それがＥ＿ｎかＥ＿ｎ＋１か）に応じたビットパターンで累積する。
【０１０５】
図２０〜２４は、第２の実施形態における可変長符号化部２２の動作手順を説明するフローチャート図である。図２０がメインルーチンを示し、図２１〜２４は、それぞれサブルーチンを示す。図２０〜２４は、符号長が短い方の符号化データを判定用符号化データとしたときの手順例である。図２０のメインルーチンでは、まず、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のカウンタ変数ｎの値が「０」に初期設定される。また、累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂの値が「０」にそれぞれ初期設定される（Ｓ２０２）。次いで、セレクタ３４ａ、３４ｂは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２から、符号化データＥ＿ｎ、Ｅ＿ｎ＋１を取得する（Ｓ２０４）。次いで、セレクタ３４ａ、３４ｂ、及び比較部３２は、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２から符号化対象データＥ＿ｎ、Ｅ＿ｎ＋１の符号長Ｌ＿ｎ、Ｌ＿ｎ＋１を取得する（Ｓ２０６）。
【０１０６】
次いで、振分判定部３１は、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さいかを判定する（Ｓ２０８）。累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さいとき（Ｓ２０８のＹｅｓ）、振分判定部３１は、符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より大きいかを判定する（Ｓ２１０）。一方、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂ以上のとき（Ｓ２０８のＮｏ）、振分判定部３１は、符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より大きいかを判定する（Ｓ２１２）。
【０１０７】
累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより短く、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より長いとき、手順Ｓ２１０の判定結果はＹｅｓである。このとき、サブルーチンＳＲ１が実行される。また、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより短く、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１以下のとき、手順Ｓ２１０の判定結果はＮｏである。このとき、サブルーチンＳＲ２が実行される。また、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂ以下であり、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より長いとき、手順Ｓ２１２の判定結果はＹｅｓである。このとき、サブルーチンＳＲ３が実行される。そして、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂ以下であり、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１以下のとき、手順Ｓ２１２の判定結果はＮｏである。このとき、サブルーチンＳＲ４が実行される。サブルーチンＳＲ１〜ＳＲ４は、累積部ＶＳＦT＿Ａ、ＶＳＦＴ＿Ｂで、符号化データＥ＿ｎ、Ｅ＿ｎ＋１が累積されるときの手順である。サブルーチンＳＲ１〜ＳＲ４の手順は、後に、図２１〜２４において示される。
【０１０８】
サブルーチンＳＲ１〜ＳＲ４のいずれかが終了すると、カウンタ変数ｎが「２」インクリメントされる（Ｓ２１４）。そして、処理単位の領域におけるすべての符号化対象データＤ＿ｎ、Ｄ＿ｎ＋１の符号化と振分けが完了するまで、手順Ｓ２０４〜Ｓ２１４が繰り返される（Ｓ２１６のＮｏ）。
【０１０９】
図２１は、サブルーチンＳＲ１の手順を示す。サブルーチンＳＲ１は、上述したように、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより短く、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より長い場合に実行される。つまり、サブルーチンＳＲ１は、振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）が行われ、符号化データＥ＿ｎ＋１が判定用符号化データである場合に実行される。
【０１１０】
短い方の符号長Ｌｎ＋１が閾値Ｔｈ（たとえば、４ビット）以上のとき（Ｓ２２０のＹｅｓ）、累積部ＶＳＦＴ＿Ｂ側では、判定用符号化データＥ＿ｎ＋１はビットが反転して累積される（Ｓ２２２）。このことは、判定用符号化データＥ＿ｎ＋１をテーブル種別ＴＢＬ１で符号化したことと等価である。そして、この場合、長い方の符号長Ｌ＿ｎは当然に閾値Ｔｈ以上である。このとき、判定用符号化データＥ＿ｎ＋１はテーブル種別ＴＢＬ１で符号化されているので、テーブル種別ビットＴＢの値が「１」に設定される（Ｓ２２８）。
【０１１１】
一方、短い方の符号長Ｌｎ＋１が閾値Ｔｈ未満のとき（Ｓ２２０のＮｏ）、累積部ＶＳＦＴ＿Ｂ側では、判定用符号化データＥ＿ｎ＋１は、そのままのビットパターンで累積される。このとき、判定用符号化データＥ＿ｎ＋１はテーブル種別ＴＢＬ０で符号化された状態である。そして、長い方の符号長Ｌ＿ｎが閾値Ｔｈ以上のとき（Ｓ２２６のＹｅｓ）、判定用符号化データＥ＿ｎ＋１はテーブル種別ＴＢＬ０で符号化されているので、累積部ＶＳＦＴ＿Ａ側では、テーブル種別ビットＴＢの値が「０」に設定される（Ｓ２３０）。一方、長い方の符号長Ｌ＿ｎが閾値Ｔｈ未満のとき（Ｓ２２６のＮｏ）、サブルーチンＳＲ１が終了する。この場合、符号長Ｌｎ、Ｌ＿ｎ+１は両方とも閾値Ｔｈ未満である。よって、判定用符号化データの先頭ビットにより復号処理のためのテーブル種別が判定できる。よって、テーブルビットＴＢは付加されない。
【０１１２】
手順Ｓ２２８、またはＳ２３０に次いで、テーブル種別ビット埋込制御部１０８は、符号長が長い方の符号化データＥ＿ｎに、テーブル種別ビットＴＢを付加する（Ｓ２３２）。そして、累積部ＶＳＦＴ＿Ａ側では、累積符号長Ｓｕｍ＿Ａにテーブル種別ビットＴＢのビット長「１」が加算される（Ｓ２３４）。そして、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎが加算される。また、累積部ＶＳＦＴ＿Ｂ側では、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎ＋１が加算される（Ｓ２３６）。そして、サブルーチンＳＲ１が終了すると、図２０の手順Ｓ２１４に移行する。
【０１１３】
図２２は、サブルーチンＳＲ２の手順を示す。サブルーチンＳＲ２は、累積符号長Ｓｕｍ＿Ａが累積符号長Ｓｕｍ＿Ｂより小さく、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１以下である場合に実行される。つまり、サブルーチンＳＲ１は、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）が行われ、符号化データＥ＿ｎが判定用符号化データである場合に実行される。
【０１１４】
短い方の符号長Ｌｎが閾値Ｔｈ未満のとき（Ｓ２４０のＹｅｓ）、累積部ＶＳＦＴ＿Ｂ側では、判定用符号化データＥ＿ｎはビットが反転して累積される（Ｓ２４２）。このことは、判定用符号化データＥ＿ｎをテーブル種別ＴＢＬ１で符号化したことと等価である。そして、長い方の符号長Ｌ＿ｎ＋１は当然に閾値Ｔｈ以上であるとき（Ｓ２４４のＹｅｓ）、テーブル種別ビットＴＢの値が「１」に設定される（Ｓ２４８）。一方、長い方の符号長Ｌ＿ｎ＋１が閾値Ｔｈ未満のとき（Ｓ２４４のＮｏ）、サブルーチンＳＲ２が終了する。このとき、短い方の符号長Ｌ＿ｎも当然に閾値Ｔｈ未満なので、テーブルビットＴＢは付加されない。
【０１１５】
一方、短い方の符号長Ｌｎが閾値Ｔｈ以上のとき（Ｓ２４０のＮｏ）、累積部ＶＳＦＴ＿Ｂ側では、判定用符号化データＥ＿ｎは、そのままのビットパターンで累積される。このとき、判定用符号化データＥ＿ｎはテーブル種別ＴＢＬ０で符号化された状態である。よって、テーブル種別ビットＴＢの値が「０」に設定される（Ｓ２５０）。そして、この場合、長い方の符号長Ｌ＿ｎ＋１は当然に閾値Ｔｈ以上である。
【０１１６】
手順Ｓ２４８、またはＳ２５０に次いで、累積部ＶＳＦＴ＿Ａ側では、テーブル種別ビット埋込制御部１０８が、符号長が長い方の符号化データＥ＿ｎ＋１に、テーブル種別ビットＴＢを付加する（Ｓ２５２）。そして、累積符号長Ｓｕｍ＿Ａにテーブル種別ビットＴＢのビット長「１」が加算される（Ｓ２５４）。そして、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎ＋１が加算される。また、累積部ＶＳＦＴ＿Ｂ側では、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎが加算される（Ｓ２５６）。そして、サブルーチンＳＲ２が終了すると、図２０の手順Ｓ２１４に移行する。
【０１１７】
図２３は、サブルーチンＳＲ３の手順を示す。サブルーチンＳＲ３は、累積符号長Ｓｕｍ＿Ｂが累積符号長Ｓｕｍ＿Ａ以下であり、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１より長い場合に実行される。つまり、サブルーチンＳＲ３は、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）が行われ、符号化データＥ＿ｎ＋１が判定用符号化データである場合に実行される。
【０１１８】
短い方の符号長Ｌｎ＋１が閾値Ｔｈ以上のとき（Ｓ２６０のＹｅｓ）、累積部ＶＳＦＴ＿Ａ側では、判定用符号化データＥ＿ｎ＋１はビットが反転して累積される（Ｓ２６２）。このことは、判定用符号化データＥ＿ｎをテーブル種別ＴＢＬ１で符号化したことと等価である。そして、この場合、長い方の符号長Ｌ＿ｎは当然に閾値Ｔｈ以上である。このとき、判定用符号化データＥ＿ｎ＋１はテーブル種別ＴＢＬ１で符号化されているので、テーブル種別ビットＴＢの値が「１」に設定される（Ｓ２６８）。
【０１１９】
一方、短い方の符号長Ｌｎ＋１が閾値Ｔｈ未満のとき（Ｓ２６０のＮｏ）、累積部ＶＳＦＴ＿Ａ側では、判定用符号化データＥ＿ｎ＋１は、そのままのビットパターンで累積される。このとき、判定用符号化データＥ＿ｎ＋１はテーブル種別ＴＢＬ０で符号化された状態である。そして、長い方の符号長Ｌ＿ｎが閾値Ｔｈ以上のとき（Ｓ２６６のＹｅｓ）、判定用符号化データＥ＿ｎ＋１はテーブル種別ＴＢＬ０で符号化されているので、テーブル種別ビットＴＢの値が「０」に設定される（Ｓ２７０）。一方、長い方の符号長Ｌ＿ｎが閾値Ｔｈ未満のとき（Ｓ２６６のＮｏ）、サブルーチンＳＲ３が終了する。このとき、短い方の符号長Ｌ＿ｎ＋１も当然に閾値Ｔｈ未満なので、テーブルビットＴＢは付加されない。
【０１２０】
手順Ｓ２６８、またはＳ２７０に次いで、累積部ＶＳＦＴ＿Ｂ側では、テーブル種別ビット埋込制御部１０８が、符号長が長い方の符号化データＥ＿ｎに、テーブル種別ビットＴＢを付加する（Ｓ２７２）。そして、累積符号長Ｓｕｍ＿Ｂにテーブル種別ビットＴＢのビット長「１」が加算される（Ｓ２７４）。そして、累積部ＶＳＦＴ＿Ａ側では、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎ＋１が加算される。また、累積部ＶＳＦＴ＿Ｂ側では、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎが加算される（Ｓ２７６）。そして、サブルーチンＳＲ３が終了すると、図２０の手順Ｓ２１４に移行する。
【０１２１】
図２４は、サブルーチンＳＲ４の手順を示す。サブルーチンＳＲ４は、累積符号長Ｓｕｍ＿Ｂが累積符号長Ｓｕｍ＿Ａ以下であり、かつ符号長Ｌ＿ｎが符号長Ｌ＿ｎ＋１以下である場合に実行される。つまり、サブルーチンＳＲ４は、振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）が行われ、符号化データＥ＿ｎが判定用符号化データである場合に実行される。
【０１２２】
短い方の符号長Ｌｎが閾値Ｔｈ未満のとき（Ｓ２８０のＹｅｓ）、累積部ＶＳＦＴ＿Ａ側では、判定用符号化データＥ＿ｎはビットが反転して累積される（Ｓ２８２）。このことは、判定用符号化データＥ＿ｎをテーブル種別ＴＢＬ１で符号化したことと等価である。そして、長い方の符号長Ｌ＿ｎ＋１は当然に閾値Ｔｈ以上であるとき（Ｓ２８４のＹｅｓ）、テーブル種別ビットＴＢの値が「１」に設定される（Ｓ２８８）。一方、長い方の符号長Ｌ＿ｎ＋１が閾値Ｔｈ未満のとき（Ｓ２８４のＮｏ）、サブルーチンＳＲ４が終了する。このとき、短い方の符号長Ｌ＿ｎも当然に閾値未満なので、テーブルビットＴＢは付加されない。
【０１２３】
一方、短い方の符号長Ｌｎが閾値Ｔｈ以上のとき（Ｓ２８０のＮｏ）、累積部ＶＳＦＴ＿Ａ側では、判定用符号化データＥ＿ｎは、そのままのビットパターンで累積される。このとき、判定用符号化データＥ＿ｎはテーブル種別ＴＢＬ０で符号化された状態である。よって、テーブル種別ビットＴＢの値が「０」に設定される（Ｓ２９０）。そして、この場合、長い方の符号長Ｌ＿ｎ＋１は当然に閾値Ｔｈ以上である。
【０１２４】
手順Ｓ２８８、またはＳ２９０に次いで、累積部ＶＳＦＴ＿Ｂ側では、テーブル種別ビット埋込制御部１０８が、符号長が長い方の符号化データＥ＿ｎ＋１に、テーブル種別ビットＴＢを付加する（Ｓ２９２）。そして、累積符号長Ｓｕｍ＿Ｂにテーブル種別ビットＴＢのビット長「１」が加算される（Ｓ２９４）。そして、累積符号長Ｓｕｍ＿Ａに符号長Ｌ＿ｎが加算され、また、累積符号長Ｓｕｍ＿Ｂに符号長Ｌ＿ｎ＋１が加算される（Ｓ２９６）。そして、サブルーチンＳＲ４が終了すると、図２０の手順Ｓ２１４に移行する。
【０１２５】
このような手順で、累積部ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂでは、図１８に示したように、判定用符号化データがその順序（それがＥ＿ｎかＥ＿ｎ＋１か）に応じたビットパターンで累積される。
【０１２６】
図２５は、第２の実施形態における可変長復号部２４の構成例を示す。図２５では、可変長復号部２４は、図７で示した構成に加え、一点鎖線で囲まれた、比較部５４と、選択判定部５６を有する。比較部５４には、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂから、復号済みの符号化データの累積符号長Ｓｕｍ＿Ａ´、Ｓｕｍ＿Ｂ´が入力される。比較部５４は、復号済みの累積符号長Ｓｕｍ＿Ａ´、Ｓｕｍ＿Ｂ´の大きさを比較して、比較結果を選択判定部５６に入力する。選択判定部５６には、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂから、判定用符号化データの先頭ビットＨＢ＿Ａ、ＨＢ＿Ｂと、テーブル種別ビットＴＢが入力される。
【０１２７】
選択判定部５６は、復号済みの累積符号長Ｓｕｍ＿Ａ´、Ｓｕｍ＿Ｂ´から、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂのうち、判定用符号化データを含む方を判定する。復号時の復号済みの累積符号長Ｓｕｍ＿Ａ´、Ｓｕｍ＿Ｂ´は、振分け時の累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂに対応する。符号化後の振分けでは、この累積符号長Ｓｕｍ＿Ａ、Ｓｕｍ＿Ｂに基づき、符号長が短い方が累積符号長が長い方に振り分けられた。よって、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂのうち、復号済みの累積符号長が長い方に、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のうち符号長が短い方が含まれる。一方、復号済みの累積符号長が短い方に、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のうち符号長が長い方が含まれる。
【０１２８】
また、選択判定部５６は、先頭ビットＨＢ＿Ａ、またはＨＢ＿Ｂから、短い方の判定用符号化データのビットパターンを判定する。たとえば、先頭ビットが「０」であれば、ビットパターンＢＰ０であり、先頭ビットが「１」であれば、ビットパターンＢＰ１である。すなわち、判定用符号化データの先頭ビットが「０」なら符号化データＥ＿ｎであることが判明し、「１」なら符号化データＥ＿ｎ＋１であることが判明する。よって、振分け情報を抽出することができる。選択判定部５６は、判定用符号化データのビットパターンから、復号データＦ＿Ａ、Ｆ＿Ｂを並べ替えるための振分けデータＣＳを生成する。この振分けデータＣＳは、並替部５０に送られる。
【０１２９】
また、選択判定部５６は、テーブル種別ビットＴＢの有無、あるいは先頭ビットＨＢ＿Ａ、またはＨＢ＿Ｂにより、判定用符号化データを復号するためのテーブル種別を判定する。たとえば、テーブル種別ビットＴＢがある場合、選択判定部５６は、テーブル種別ビットの値に応じてテーブル種別ＴＢＬ０、またはＴＢＬ１を判定する。一方、テーブル種別ビットＴＢがない場合、つまり、符号化データＥ＿ｎ、Ｅ＿ｎ＋１の符号長が両方とも閾値（４ビット）未満の場合、選択判定部５６は、判定用符号化データの先頭ビットＨＢ＿Ａ、またはＨＢ＿Ｂから、判定用符号化データを復号するためのテーブル種別を判定する。たとえば、先頭ビットが「１」の場合、テーブル種別ＴＢＬ０と判定され、先頭ビットが「０」の場合、テーブル種別ＴＢＬ１と判定される。そして、選択判定部５６は、判定したテーブル種別を示すテーブル選択信号ＴＳ１を、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂに送る。
【０１３０】
並替部５０は、たとえば、振分けデータＣＳが「０」のときには、復号データＦ＿Ａ、Ｆ＿ＢをそれぞれＦ＿ｎ、Ｆ＿ｎ＋１として並べ替える。あるいは、並替部５０は、振分けデータＣＳが「１」のときには、復号データＦ＿Ａ、Ｆ＿ＢをそれぞれＦ＿ｎ＋１、Ｆ＿ｎとして並べ替える。
【０１３１】
図２６は、第２の実施形態における復号部ＶＬＤ＿Ａの詳細な構成例である。第２の実施形態では、累積部ＶＬＤ＿Ａは、図８で示した構成に加え、一点鎖線で囲った、反転部１２０、セレクタ１２２、加算器１２４、及び記憶部１２６を有する。なお、復号部ＶＬＤ＿Ｂも、ここに示す構成を有する。よって、次の説明は、復号部ＶＬＤ＿Ｂにも適用される。
【０１３２】
図８で説明したように、記憶部８２には、累積符号化データＤｔ＿Ａから取り出される符号化データが格納される。かかる符号化データＥ＿Ａ（復号部ＶＬＤ＿Ｂ側では符号化データＥ＿Ｂ）は、反転部１２０とセレクタ１２２に送られる。反転部１２０は、符号化データＥ＿Ａを反転してセレクタ１２２に送る。セレクタ１２２は、記憶部８２から送られる符号化データＥ＿Ａと、反転された符号化データＥ＿Ａのいずれかを、テーブル選択信号ＴＳ１に応じて選択し、復号テーブルＴＢＬ０＿Ａに入力する。テーブルＴＢＬ０＿Ａは、符号化テーブルＴＢＬ０＿１、ＴＢＬ０＿２内の、テーブル種別ＴＢＬ０に対応する復号テーブルである。テーブル選択信号ＴＳ１がテーブル種別ＴＢＬ０を示す「０」の場合、セレクタ１２２は記憶部８２から送られる符号化データＥ＿Ａを出力する。あるいは、テーブル選択信号ＴＳ１がテーブル種別ＴＢＬ１を示す「１」の場合、セレクタ１２２は符号化データＥ＿Ａを反転したビットデータを出力する。この場合、符号化データＥ＿Ａをビット反転したデータが復号テーブルＴＢＬ０＿Ａで復号されると、符号化データＥ＿Ａがテーブル種別ＴＢＬ１で復号されたことになる。このようにして、復号テーブルのテーブル種別ＴＢＬ０、またはＴＢＬ１が選択的に切り替えられる。
【０１３３】
復号テーブルＴＢＬ０＿Ａは、累積符号化データＤｔ＿Ａから取り出される符号化データＥ＿Ａまたは符号化データＥ＿Ａをビット反転したデータを復号し、復号データＦ＿Ａを出力する。復号データＦ＿Ａは、記憶部８４に格納される。また、復号テーブルＴＢＬ０＿Ａは、テーブル種別ビットＴＢが付加いるた判断されたとき、符号長が長い方の符号化データを復号する場合に、後に付加されたテーブル種別ビットＴＢを抽出して出力する。テーブル種別ビットＴＢは、選択判定部５６に送られる。
【０１３４】
このようにして、復号部ＶＬＤ＿Ａ、ＶＬＤ＿Ｂは、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のビットパターンに応じたテーブル種別により、復号処理を行うことができる。
【０１３５】
図２７〜２９は、第２の実施形態における可変長復号２４の動作手順を説明するフローチャート図である。図２７はメインルーチンを示し、図２８、２９はそれぞれサブルーチンを示す。図２７のメインルーチンにおいて、まず、符号化データＥ＿ｎ、Ｅ＿ｎ＋１のカウンタ変数ｎの値が「０」に初期設定される（Ｓ３０２）。次いで、復号済みの累積符号長Ｓｕｍ＿Ａ´が復号済みの累積符号長Ｓｕｍ＿Ｂ´より短いとき、サブルーチンＳＲ１１が実行される。一方、復号済みの累積符号長Ｓｕｍ＿Ａ´が復号済みの累積符号長Ｓｕｍ＿Ｂ´以上であるとき、サブルーチンＳＲ１２が実行される。サブルーチンＳＲ１１、ＳＲ１２では、振分けデータＣＳが決定される。サブルーチンＳＲ１１、ＳＲ１２は、それぞれ図２８、２９に示される。
【０１３６】
サブルーチンＳＲ１１、ＳＲ１２が終了し、振分けデータＣＳが「０」のとき（Ｓ３０６のＹｅｓ）、復号データＦ＿Ａが復号データＦ＿ｎ、復号データＦ＿Ｂが復号データＦ＿ｎ＋１に対応するように並べ替えられる（Ｓ３０８）。一方、振分けデータＣＳが「１」のとき（Ｓ３０６のＮｏ）、復号データＦ＿Ａが符号化データＦ＿ｎ＋１、復号データＦ＿Ｂが復号データＦ＿ｎに対応するように並べ替えられる（Ｓ３１０）。そして、カウンタ変数ｎが「２」インクリメントされる（Ｓ３１２）。そして、処理単位の領域におけるすべての符号化データが復号されるまで、手順Ｓ３０４〜Ｓ３１２が繰り返される（Ｓ３１４のＮｏ）。
【０１３７】
図２８は、サブルーチンＳＲ１１の手順を示す。サブルーチンＳＲ１１は、復号済みの累積符号長Ｓｕｍ＿Ａ´が復号済みの累積符号長Ｓｕｍ＿Ｂ´未満であるとき実行される。このとき、復号部ＶＬＤ＿Ａ側で復号される符号化データＥ＿Ａの方が、復号部ＶＬＤ＿Ｂ側で復号される符号化データＥ＿Ｂより符号長が長い。一方、符号長が短い方の符号化データＥ＿Ｂが判定用符号化データである。また、符号化データＥ＿Ａは、テーブル種別ＴＢＬ０で符号化されたものである。そして、その先頭ビットＨＢ＿Ａにより、符号長が閾値（４ビット）以上か、閾値未満かが判定される。
【０１３８】
符号化データＥ＿Ａの先頭ビットＨＢ＿Ａが「１」のとき、符号化データＥ＿Ａの符号長は閾値未満である。よって、符号化データＥ＿Ｂの符号長も閾値未満である。このとき、手順Ｓ３２０の判定結果はＹｅｓになる。すると、符号化データＥ＿Ａは、テーブル種別ＴＢＬ０で復号される（Ｓ３２２）。次いで、復号済みの符号長ＳＵＭ＿Ａ´に、符号化データＥ＿Ａの符号長Ｌ＿Ａが加算される（Ｓ３２４）。
【０１３９】
そして、符号長が短い方の、つまり判定用符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂに基づいて、振分けが判定される。また、符号化データＥ＿Ｂの符号長も閾値未満であるので、先頭ビットＨ＿Ｂにより、復号するためのテーブル種別が判定される。判定用符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂが「０」のとき（Ｓ３２６のＹｅｓ）、判定用符号化データＥ＿Ｂは符号化データＥ＿ｎである。このことは、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）が実行されたことを示す。よって、振分けデータＣＳが「１」に設定される（Ｓ３２８）。また、このことは、判定用符号化データＥ＿Ｂがテーブル種別ＴＢＬ１で符号化されたことを示す。よって、値「１」のテーブル種別ビットＴＢが生成される（Ｓ３３０）。なお、ここでは、符号化データＥ＿Ａ、Ｅ＿Ｂの符号長がいずれも閾値未満であるので、符号化時にはテーブル種別ビットＴＢは付加されていない。よって、後の処理のために、テーブル種別ビットＴＢが生成される。
【０１４０】
一方、判定用符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂが「１」のとき（Ｓ３２６のＮｏ）、判定用符号化データＥ＿Ｂは符号化データＥ＿ｎ＋１である。このことは、振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）が実行されたことを示す。よって、振分けデータＣＳが「０」に設定される（Ｓ３３２）。また、このことは、判定用符号化データＥ＿Ｂがテーブル種別ＴＢＬ０で符号化されたことを示す。よって、値「０」のテーブル種別ビットＴＢが生成される（Ｓ３３４）。
【０１４１】
また、手順Ｓ３２０で、符号化データＥ＿Ａの先頭ビットＨＢ＿Ａが「０」のとき、符号化データＥ＿Ａの符号長は閾値以上である。このとき、手順Ｓ３２０の判定結果はＮｏになる。すると、符号化データＥ＿Ａがテーブル種別ＴＢＬ０で復号される（Ｓ３３６）。そして、復号済みの符号長ＳＵＭ＿Ａ´に、符号化データＥ＿Ａの符号長Ｌ＿Ａが加算される（Ｓ３３８）。そして、このとき、符号化時にテーブル種別ビットＴＢが付加されているので、符号化データＥ＿Ａからテーブル種別ビットＴＢが取得され（Ｓ３４０）、復号済みの符号長ＳＵＭ＿Ａ´に１ビット分加算される（Ｓ３４２）。
【０１４２】
次いで、判定用符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂが「０」のとき（Ｓ３４４のＹｅｓ）、振分けビットＣＳが「１」に設定される（Ｓ３４６）。このことは、振分けＡ１が実行されたことに対応する。一方、判定用符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂが「１」のとき（Ｓ３４４のＮｏ）、振分けビットＣＳが「０」に設定される（Ｓ３４８）。このことは、振分けＡ０が実行されたことに対応する。
【０１４３】
次いで、手順Ｓ３５０で、テーブル種別ビットＴＢの値が判定される。テーブル種別ビットＴＢが「０」のとき（Ｓ３５０のＹｅｓ）、判定用符号化データＥ＿Ｂは、テーブル種別ＴＢＬ０で復号される（Ｓ３５２）。あるいは、テーブル種別ビットＴＢが「１」のとき（Ｓ３５０のＮｏ）、判定用符号化データＥ＿Ｂは、テーブル種別ＴＢＬ１で復号される（Ｓ３５４）。そして、復号部ＶＬＤ＿Ｂ側の復号済み累積符号長Ｓｕｍ＿Ｂ´に、符号化データＥ＿Ｂの符号長Ｌ＿Ｂが加算される（Ｓ３５６）。
【０１４４】
このようなサブルーチンＳＲ１１により、判定用符号化データＥ＿Ｂの先頭ビットに基づいて、振分けデータＣＳが設定される。それとともに、判定用符号化データＥ＿Ｂは、そのビットパターンに応じたテーブル種別で復号される。そして、図２７の手順Ｓ３０６に移行する。
【０１４５】
図２９は、サブルーチンＳＲ１２の手順を示す。サブルーチンＳＲ１２は、復号済みの累積符号長Ｓｕｍ＿Ａ´が復号済みの累積符号長Ｓｕｍ＿Ｂ´以上であるとき実行される。このとき、符号化データＥ＿Ｂの方が符号化データＥ＿Ａより符号長が長い。よって、符号化データＥ＿Ｂは、テーブル種別ＴＢＬ０で符号化されたものである。そして、その先頭ビットＨＢ＿Ｂより、符号長が閾値以上か、閾値未満かが判定される。また、符号化データＥ＿Ａが判定用符号化データである。
【０１４６】
符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂが「１」のとき、符号化データＥ＿Ｂの符号長は閾値未満である。よって、符号化データＥ＿Ａの符号長も閾値未満である。このとき、手順Ｓ３６０の判定結果はＹｅｓになる。すると、符号化データＥ＿Ｂは、テーブル種別ＴＢＬ０で復号される（Ｓ３６２）。次いで、復号済みの符号長ＳＵＭ＿Ｂ´に、符号化データＥ＿Ｂの符号長Ｌ＿Ｂが加算される（Ｓ３６４）。
【０１４７】
そして、符号長が短い方の、つまり判定用符号化データＥ＿Ａの先頭ビットＨＢ＿Ａに基づいて、振分けが判定される。また、符号化データＥ＿Ａの符号長も閾値未満であるので、先頭ビットＨ＿Ａにより、復号するためのテーブル種別が判定される。判定用符号化データＥ＿Ａの先頭ビットＨＢ＿Ａが「０」のとき（Ｓ３６６のＹｅｓ）、判定用符号化データＥ＿Ａは符号化データＥ＿ｎである。このことは、振分けＡ０（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ａ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ｂ）が実行されたことを示す。よって、振分けデータＣＳが「０」に設定される（Ｓ３６８）。また、このことは、判定用符号化データＥ＿Ａがテーブル種別ＴＢＬ１で符号化されたことを示す。よって、値「１」のテーブル種別ビットＴＢが生成される（Ｓ３７０）。
【０１４８】
一方、判定用符号化データＥ＿Ａの先頭ビットＨＢ＿Ａが「１」のとき（Ｓ３６６のＮｏ）、判定用符号化データＥ＿Ａは符号化データＥ＿ｎ＋１である。このことは、振分けＡ１（符号化データＥ＿ｎ→累積部ＶＳＦＴ＿Ｂ、符号化データＥ＿ｎ＋１→累積部ＶＳＦＴ＿Ａ）が実行されたことを示す。よって、振分けデータＣＳが「１」に設定される（Ｓ３７２）。また、このことは、判定用符号化データＥ＿Ａがテーブル種別ＴＢＬ０で符号化されたことを示す。よって、値「０」のテーブル種別ビットＴＢが生成される（Ｓ３７４）。
【０１４９】
また、手順Ｓ３６０で、符号化データＥ＿Ｂの先頭ビットＨＢ＿Ｂが「０」のとき、符号化データＥ＿Ｂの符号長は閾値以上である。このとき、手順Ｓ３６０の判定結果はＮｏになる。すると、符号化データＥ＿Ｂがテーブル種別ＴＢＬ０で復号される（Ｓ３７６）。そして、復号済みの符号長ＳＵＭ＿Ｂ´に、符号化データＥ＿Ｂの符号長Ｌ＿Ｂが加算される（Ｓ３７８）。そして、このとき、符号化時にテーブル種別ビットＴＢが付加されているので、符号化データＥ＿Ｂからテーブル種別ビットＴＢが取得され（Ｓ３８０）、復号済みの符号長ＳＵＭ＿Ｂ´に１ビット分加算される（Ｓ３８２）。
【０１５０】
次いで、判定用符号化データＥ＿Ａの先頭ビットＨＢ＿Ｂが「０」のとき（Ｓ３８４のＹｅｓ）、振分けビットＣＳが「０」に設定される（Ｓ３８６）。このことは、振分けＡ０が実行されたことに対応する。一方、判定用符号化データＥ＿Ａの先頭ビットＨＢ＿Ｂが「１」のとき（Ｓ３８４のＮｏ）、振分けビットＣＳが「１」に設定される（Ｓ３８８）。このことは、振分けＡ１が実行されたことに対応する。
【０１５１】
次いで、手順Ｓ３９０で、テーブル種別ビットＴＢの値が判定される。テーブル種別ビットＴＢが「０」のとき（Ｓ３９０のＹｅｓ）、判定用符号化データＥ＿Ａは、テーブル種別ＴＢＬ０で復号される（Ｓ３９２）。あるいは、テーブル種別ビットＴＢが「１」のとき（Ｓ３９０のＮｏ）、判定用符号化データＥ＿Ａは、テーブル種別ＴＢＬ１で復号される（Ｓ３９４）。そして、復号部ＶＬＤ＿Ａ側の復号済み累積符号長Ｓｕｍ＿Ａ´に、符号化データＥ＿Ａの符号長Ｌ＿Ａが加算される（Ｓ３９６）。
【０１５２】
このようなサブルーチンＳＲ１２により、判定用符号化データＥ＿Ａの先頭ビットに基づいて、振分けデータＣＳが設定される。それとともに、判定用符号化データＥ＿Ａは、そのビットパターンに応じたテーブル種別で復号される。そして、図２７の手順Ｓ３０６に移行する。
【０１５３】
このような手順によれば、符号化データのビットパターンに基づいて並べ替えを行うことができる。それとともに、符号化データのビットパターンに応じたテーブル種別で復号を行うことができる。
【０１５４】
上述の説明では、符号長が短い方の符号化データを判定用符号化データとする例を示した。しかしながら、符号長が長い方の符号化データを判定用符号化データとする場合にも、第２の実施形態は適用される。
【０１５５】
上述したように、第２の実施形態によれば、振分けデータの代わりに符号化データのビットパターンが振分けを示す情報を有するため、符号化データに振分けデータを付加する必要がない。一方、テーブル種別ビットは特定のパターンでのみ付加すれば良いので、実施例１と比べて符号長をより短くすることができる。よって、圧縮効率がさらに向上する。
【０１５６】
なお、上述の説明では、可変長符号化部２２と可変長復号部２４が、単一のデータ処理装置に設けられる場合を示した。しかしながら、可変長復号部と可変長復号部は、それぞれ別個のデータ処理装置に設けることが可能である。たとえば、動画データを圧縮して送信する放送局側に可変長復号部を設け、受信局側に可変長復号部を設けてもよい。
【０１５７】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１５８】
（付記１）
連続するＮ個（Ｎは複数）の可変長符号化された符号化データをそれぞれ累積するＮ個の累積部と、
前記符号化データを前記Ｎ個の累積部のいずれかに、当該Ｎ個の累積部における前記符号化データの累積符号長の差が小さくなるように振り分ける振分部を有し、
前記振分部は、前記Ｎ個の符号化データの前記Ｎ個の累積部への振分けを示す振分けデータを生成することを特徴としたデータ処理装置。
【０１５９】
（付記２）
付記１において、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成する生成部を有するデータ処理装置。
【０１６０】
（付記３）
連続する２個の可変長符号化された符号化データをそれぞれ累積する２個の累積部と、
前記符号化データを前記２個の累積部のいずれかに、当該２個の累積部における前記符号化データの累積符号長の差が小さくなるように振り分ける振分部を有し、
前記累積部は、２個の前記符号化データのうち符号長が長い方または短い方の第１の符号化データを、当該２個の符号化データにおける順序に応じて第１のビットパターンまたはそれが反転した第２のビットパターンで累積することを特徴としたデータ処理装置。
【０１６１】
（付記４）
付記３において、
前記２個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成する生成部を有するデータ処理装置。
【０１６２】
（付記５）
付記１乃至２のいずれかのデータ処理装置が生成した符号化データを処理するデータ処理装置であって、
前記符号化データをそれぞれ並列して復号するＮ個の復号部と、
前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データを前記Ｎ個の符号化データの前記Ｎ個の累積部への振分けを示す振分けデータに従ってもとの順序に並べ替える並替部とを有するデータ処理装置。
【０１６３】
（付記６）
付記３乃至４のいずれかのデータ処理装置が生成した符号化データを処理するデータ処理装置であって、
前記符号化データをそれぞれ並列して復号する２個の復号部と、
前記２個の復号部によりそれぞれ復号された２個の復号データをもとの順序に並べ替える並替部とを有し、
前記並替部は、前記第１の符号化データのビットパターンに基づいて、前記２つの符号化データから復号される２個の前記復号データをもとの順序に並べ替えるデータ処理装置。
【０１６４】
（付記７）
連続するＮ個（Ｎは複数）の可変長符号化された符号化データをそれぞれ累積するＮ個の累積部と、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結し、さらに前記振分けデータを連結してビット列を生成する生成部と、
前記ビット列に含まれる前記符号化データをそれぞれ並列して復号するＮ個の復号部と、
前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データを前記振分部による振分けに従ってもとの順序に並べ替える並替部とを有するデータ処理装置。
【０１６５】
（付記８）
付記７において、
前記符号化データを前記Ｎ個の累積部のいずれかに、当該Ｎ個の累積部における前記符号化データの累積符号長の差が小さくなるように振り分ける振分部を含むデータ処理装置。
【０１６６】
（付記９）
付記７または８において、
前記振分部は、前記Ｎ個の符号化データの前記Ｎ個の累積部への振分けを示す振分けデータを生成し、
前記並替部は、前記Ｎ個の復号データを前記振分けデータに基づいてもとの順序に並べ替えるデータ処理装置。
【０１６７】
（付記１０）
付記７または８において、
Ｎ＝２であり、
前記累積部は、２個の前記符号化データのうち符号長が長い方または短い方の第１の符号化データを、当該２個の符号化データにおける順序に応じて第１のビットパターンまたはそれが反転した第２のビットパターンで累積し、
前記並替部は、前記第１の符号化データのビットパターンに基づいて、前記２つの符号化データから復号される２個の前記復号データをもとの順序に並べ替えるデータ処理装置。  
【０１６８】
（付記１１）
付記７乃至１０のいずれかにおいて、
前記ビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データを復元する復元部とを有するデータ処理装置。
【０１６９】
（付記１２）
付記９において、
前記ビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データと、前記並替部が前記Ｎ個の復号データを並べ替えるための前記振分けデータとを復元する復元部とを有するデータ処理装置。
【０１７０】
（付記１３）
付記１１または１２において、
前記生成部により生成される前記ビット列は外部に出力された後、当該外部から取り込まれて前記復元部に入力されるデータ処理装置。
【０１７１】
（付記１４）
連続するＮ個（Ｎは複数）の可変長符号化された符号化データをそれぞれ累積するＮ個の累積部のいずれかに、当該Ｎ個の累積部における前記符号化データの累積符号長の差が小さくなるように前記符号化データが振り分けられ、前記Ｎ個の累積部に累積された前記符号化データをそれぞれ並列して復号するＮ個の復号部と、
前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データを前記振分部による振分けに従ってもとの順序に並べ替える並替部とを有するデータ処理装置。
【０１７２】
（付記１５）
付記１４において、
前記並替部は、前記Ｎ個の符号化データの前記Ｎ個の累積部への振分けを示す振分けデータに基づいて、前記Ｎ個の復号データをもとの順序に並べ替えるデータ処理装置。
【０１７３】
（付記１６）
付記１４において、
Ｎ＝２であり、
前記累積部では、２個の前記符号化データのうち符号長が長い方または短い方の第１の符号化データが、当該２個の符号化データにおける順序に応じて第１のビットパターンまたはそれが反転した第２のビットパターンで累積され、
前記並替部は、前記第１の符号化データのビットパターンに基づいて、前記２つの符号化データから復号される２個の前記復号データをもとの順序に並べ替えるデータ処理装置。
【０１７４】
（付記１７）
付記１４乃至１６のいずれかにおいて、
前記Ｎ個の累積部に累積された符号化データが所定のビット数ずつ連結されたビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データを復元する復元部を有するデータ処理装置。
【０１７５】
（付記１８）
付記１５において、
前記Ｎ個の累積部に累積された符号化データが所定のビット数ずつ連結され、さらに前記振分けデータが連結されたビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データと、前記並替部が前記Ｎ個の復号データを並べ替えるための前記振分けデータとを復元する復元部を有するデータ処理装置。
【０１７６】
（付記１９）
連続するＮ個（Ｎは複数）の可変長符号化された符号化データをそれぞれ累積するＮ個の累積部と、
前記符号化データを前記Ｎ個の累積部のいずれかに、当該Ｎ個の累積部における前記符号化データの累積符号長の差が小さくなるように振り分ける振分部とを有し、
前記Ｎ個の累積部に累積された前記符号化データが、Ｎ個の復号部によりそれぞれ並列して復号され、前記Ｎ個の復号部によりそれぞれ復号されたＮ個の復号データが、前記振分部による振分けに従ってもとの順序に並べ替えられるデータ処理装置。
【０１７７】
（付記２０）
付記１９において、
前記振分部は、前記Ｎ個の符号化データの前記Ｎ個の累積部への振分けを示す振分けデータを生成し、
前記Ｎ個の復号データが前記振分けデータに基づいてもとの順序に並べ替えられるデータ処理装置。
【０１７８】
（付記２１）
付記１９において、
Ｎ＝２であり、
前記累積部は、２個の前記符号化データのうち符号長が長い方または短い方の第１の符号化データを、当該２個の符号化データにおける順序に応じて第１のビットパターンまたはそれが反転した第２のビットパターンで累積し、
前記第１の符号化データのビットパターンに基づいて、前記２つの符号化データから復号される２個の前記復号データがもとの順序に並べ替えられるデータ処理装置。
【０１７９】
（付記２２）
付記１９乃至２１のいずれかにおいて、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成する生成部をさらに有し、
前記ビット列が前記所定のビット数ずつ分割され、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データが復元されるデータ処理装置。
【０１８０】
（付記２３）
付記２０において、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結し、さらに前記振分けデータを連結してビット列を生成する生成部をさらに有し、
前記ビット列が前記所定のビット数ずつ分割され、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データと、前記並替部が前記Ｎ個の復号データを並べ替えるための前記振分けデータとが復元されるデータ処理装置。
【０１８１】
（付記２４）
連続するＮ個（Ｎは複数）の可変長符号化された符号化データをそれぞれ累積するＮ個の累積部のいずれかに、前記符号化データを、当該Ｎ個の累積部における前記符号化データの累積符号長の差が小さくなるような振分けで振り分け、
前記Ｎ個の累積部に累積された前記符号化データをそれぞれ並列して復号し、
前記復号されたＮ個の復号データを前記振分けに従ってもとの順序に並べ替える、
データ処理方法。
【０１８２】
（付記２５）
付記２４において、
前記振分けでは、前記Ｎ個の符号化データの前記Ｎ個の累積部への振分けを示す振分けデータを生成し、
前記Ｎ個の復号データを前記振分けデータに基づいてもとの順序に並べ替える、
データ処理方法。
【０１８３】
（付記２６）
付記２４において、
Ｎ＝２であり、
前記累積部に、２個の前記符号化データのうち符号長が長い方または短い方の第１の符号化データを、当該２個の符号化データにおける順序に応じて第１のビットパターンまたはそれが反転した第２のビットパターンで累積し、
前記第１の符号化データのビットパターンに基づいて、前記２つの符号化データから復号される２個の前記復号データをもとの順序に並べ替える、
データ処理方法。
【０１８４】
（付記２７）
付記２４乃至２６のいずれかにおいて、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結してビット列を生成し、
前記ビット列を前記所定のビット数ずつ分割して、前記Ｎ個の復号部が復号するためのＮ個の前記符号化データを復元する、
データ処理方法。
【０１８５】
（付記２８）
付記２５において、
前記Ｎ個の累積部に累積された符号化データを所定のビット数ずつ連結し、さらに前記振分けデータを連結してビット列を生成し、
前記ビット列を前記所定のビット数ずつ分割して、Ｎ個の復号データに復号するためのＮ個の前記符号化データと、前記Ｎ個の復号データを並べ替えるための前記振分けデータとを復元する、
データ処理方法。  
【符号の説明】
【０１８６】
１４：画像圧縮展開部、  ２２：可変長符号化部、  ２４：可変長復号部、  ３０：振分部、４０：ビット列生成部、  ５０：並替部、  ４６：符号化データ復元部、  
Ｅ＿ｎ：符号化データ、  Ｆ＿ｎ：復号データ、  ＶＳＦＴ＿Ａ、ＶＳＦＴ＿Ｂ：累積部、  
ＶＬＤ＿Ａ、ＶＬＤ＿Ｂ：復号部
【図１】
0005742464.tif 000002
【図２】
0005742464.tif 000003
【図３】
0005742464.tif 000004
【図４】
0005742464.tif 000005
【図５】
0005742464.tif 000006
【図６】
0005742464.tif 000007
【図７】
0005742464.tif 000008
【図８】
0005742464.tif 000009
【図９】
0005742464.tif 000010
【図１０】
0005742464.tif 000011
【図１１】
0005742464.tif 000012
【図１２】
0005742464.tif 000013
【図１３】
0005742464.tif 000014
【図１４】
0005742464.tif 000015
【図１５】
0005742464.tif 000016
【図１６】
0005742464.tif 000017
【図１７】
0005742464.tif 000018
【図１８】
0005742464.tif 000019
【図１９】
0005742464.tif 000020
【図２０】
0005742464.tif 000021
【図２１】
0005742464.tif 000022
【図２２】
0005742464.tif 000023
【図２３】
0005742464.tif 000024
【図２４】
0005742464.tif 000025
【図２５】
0005742464.tif 000026
【図２６】
0005742464.tif 000027
【図２７】
0005742464.tif 000028
【図２８】
0005742464.tif 000029
【図２９】
0005742464.tif 000030