以下、この発明について、下記の順序に従い説明する。
1.この発明の実施の第1の形態について
1−1.実施の第1の形態による符号化処理について
1−1−1−1.符号化装置について
1−1−1−2.データ構造について
1−1−1−3.符号化処理について
1−1−1−4.符号化処理の具体的な例
1−1−1−5.出力形式について
1−1−2.実施の第1の形態の第1の変形例について(第1の異なる出力形式)
1−1−3.実施の第1の形態の第2の変形例について(第2の異なる出力形式)
1−1−4.実施の第1の形態の第3の変形例について(異なる符号化単位)
1−2.実施の第1の形態による復号化処理について
1−2−1−1.復号化装置について
1−2−1−2.復号化処理について
1−2−1−3.復号化処理の具体的な例
1−2−2.実施の第1の形態の第1の変形例による復号化処理について
1−2−2−1.復号化装置について
1−2−2−2.復号化処理について
1−2−2−3.復号化処理の具体的な例
1−2−3.実施の第1の形態の第2の変形例による復号化処理について
1−2−3.実施の第1の形態の第3の変形例による復号化処理について
2.この発明の実施の第2の形態について
2−1.実施の第2の形態による符号化処理について
2−1−1−2.データ構造について
2−1−1−3.符号化処理について
2−1−1−4.符号化処理の具体的な例
2−1−1−5.出力形式について
2−1−2.実施の第2の形態の第1の変形例について(第1の異なる出力形式)
2−1−3.実施の第2の形態の第2の変形例について(第2の異なる出力形式)
2−1−4.実施の第2の形態の第3の変形例について(異なる符号化単位)
2−2.実施の第2の形態による復号化処理について
2−2−1−2.復号化処理について
2−2−1−3.復号化処理の具体的な例
2−2−2.実施の第2の形態の第1の変形例による復号化処理について
2−2−2−2.復号化処理について
2−2−2−3.復号化処理の具体的な例
2−2−3.実施の第2の形態の第2の変形例による復号化処理について
2−2−4.実施の第2の形態の第3の変形例による復号化処理について
3.実施の第1および第2の形態に共通して適用可能なハードウェア構成について
3−1.ハードウェア構成の例
3−2.符号化処理に対する適用例
3−3.復号化処理に対する適用例
4.この発明の実施の第3の形態について(複数のCPUを持つハードウェア構成)
4−1.ハードウェア構成の例
4−2.符号化処理に対する適用例
4−3.復号化処理に対する適用例
1.この発明の実施の第1の形態について
1−1−1−1.符号化装置について
先ず、この発明の実施の第1の形態を、図面を参照しながら説明する。図1は、この発明の実施の第1の形態による符号化装置1Aの機能を示す一例の機能ブロック図を示し、この図1を用いてこの発明による圧縮符号化処理を概略的に説明する。
詳細は後述するが、図1に示す符号化装置1Aや、後述する符号化装置1B、符号化装置1Cは、実際には、図示されないCPU(Central Processing Unit)により、所定のプログラムに従い全体の動作が制御される。図1に示される各部は、図示されないメモリと、CPU上で動作されるプログラムで実現されるようにしてもよいし、各部がそれぞれ独立したハードウェアから成りこれらのハードウェアの動作をCPUにより制御するようにしてもよい。
入力された画像データは、入力データ用メモリ10に一旦、格納される。入力画像データは、R(赤色)を表示する画素、G(緑色)を表示する画素およびB(青色)を表示する画素それぞれが8ビットを超え16ビット未満、さらに好ましくは、8ビットを超え13ビット未満の量子化ビット数を有するデータである。なお、画像データは、RGBの三原色によるもの限らず、例えば輝度Y、色差Cb、Crによるものでもよい。以下に説明する圧縮符号化処理は、これらR、GおよびBそれぞれの画素データ、あるいは、輝度Y、色差Cbおよび色差Crそれぞれの画素データに対して、独立的に行われる。
入力データ用メモリ10に格納された画像データは、データ分離部11で、画素毎に、LSB(Least Significant Bit)側の8ビット(以下、「LSB側ビット」と呼ぶ)と、LSB側ビットを除いたMSB側の残りのビット(以下、「MSB側ビット」と呼ぶ)とに分離される。この発明では、このように分離されたLSB側ビットとMSB側ビットとに対して、それぞれ異なる圧縮符号方式で以て圧縮符号化を行う。
図2は、このデータ分離部11による一例のデータ分離処理を概略的に示す。例えば、画素の量子化ビット数が10ビットであり1画素のデータが10ビットのデータ長を有する場合、図2Aに一例が示されるように、LSBから8ビット目までがLSB側ビット、9ビット目からMSB(この例では10ビット目)までの2ビットがMSB側ビットとされる。このLSB側ビットおよびMSB側ビットの分離は、画素毎になされ、分離されたLSB側ビット(図2Bの上側参照)は、LSB側データ用メモリ12に格納され、分離されたMSB側ビット(図2Bの下側参照)は、MSB側データ用メモリ16に格納される。
なお、LSB側ビットおよびMSB側ビットは、例えば、画面の左上隅の画素を先頭に、水平ラインの左端から右端に向けた画素の配列順に対応して、ライン単位で順次並べられて、LSB側データ用メモリ12およびMSB側データ用メモリ16に格納される。
LSB側データ用メモリ12に格納されたLSB側ビット(図3A参照)は、DPCM部13でDPCM(Defferential Pulse Code Modulation)処理により、例えば直前に処理したLSB側ビットと現在のLSB側ビットとの差分がとられる(図3B参照)。フレームの最初のLSB側ビットは、元のデータがそのまま用いられる。この差分データに対して、ハフマン符号化部14により所定のハフマンテーブルに基づきハフマン符号化を施し、可変長符号により圧縮符号化する(図3C参照)。ハフマン符号化部14から出力されたデータは、出力データ用メモリ15に格納される。なお、DPCM処理およびハフマン符号化処理については、周知であるため詳細な説明を省略する。
一方、MSB側データ用メモリ16に格納されたMSB側ビットは、1重目ランレングス処理部17および2重目ランレングス処理部で2重にランレングス処理を施されて圧縮符号化され、出力データ用メモリ15に格納される。なお、詳細は後述するが、1重目ランレングス処理部17は、MSB側ビット単位でのランレングス処理がMSB側ビットの所定バイト分毎に行われ、2重目ランレングス処理部18では、所定数のMSB側ビットからなる所定バイト分のビット列を単位としてランレングス処理が行われる。
すなわち、この発明では、MSB側ビットは、所定バイトを単位として圧縮符号化が施される。このとき、1重目ランレングス処理部17では、所定バイト内でのランレングス処理を行い、2重目ランレングス処理部18では、所定バイト単位でランレングス処理を行う。なお、以下では、所定バイトを1バイトとして説明する。
1重目ランレングス処理部17および2重目ランレングス処理部18の処理結果がMSB側ビットの圧縮符号化出力として出力データ用メモリ15に格納される。出力データ用メモリ15に格納されたLSB側ビットの圧縮符号化出力と、MSB側ビットの圧縮符号化出力とが、入力画像データが圧縮符号化された圧縮符号化データとして出力される。この図1の例では、出力データは、MSB側ビットが圧縮符号化されたMSB側圧縮符号化データと、LSB側ビットが圧縮符号化されたLSB側圧縮符号化データとが画素単位でインタリーブされて出力される。出力データは、例えば出力ファイル19に格納される。
このように、画素データを、LSB側とMSB側とに分離し、分離されたLSB側データとMSB側データとに対して、それぞれのデータの特徴に応じて異なる方式で圧縮符号化を行うことで、より効率的且つ高速に圧縮符号化処理を行うことができる。
すなわち、画素データにおいて、MSB側のビットは、その画素を特徴付ける情報を有し、画像の相関性から、隣接する画素においてはMSB側のビットの値が近似している可能性が高い。そこで、MSB側のビットを、その特徴に適応した方式で圧縮符号化することで、圧縮率を高めることができる。
また、画素データをLSB側の8ビットと、当該LSB側の8ビットを除いたMSB側とのビットに分離してそれぞれ圧縮符号化することで、各々の圧縮符号化処理を8ビット乃至8ビット以下のデータ単位で行うことができると共に、それぞれの処理を並列的に行うことができるので、圧縮符号化処理を高速化することができる。
次に、上述の1重目ランレングス処理部17および2重目ランレングス処理部18における処理について、より詳細に説明する。図4は、データ分離部11および1重目ランレングス処理部17における処理を、画素データが9ビット、10ビット、11ビットおよび12ビットの量子化ビット数を有する場合について、概略的に示す。データ分離部11では、画素毎に、画素データをLSB側の8ビットと、当該LSB側の8ビットを除いたMSB側のビットとに分離する。
すなわち、画素データの量子化ビット数が9ビットの例では、MSB側ビットは、MSBの1ビットとなる。画素データの量子化ビット数が10ビットの例では、MSB側ビットは、MSB側の2ビットとなる。同様に、画素データの量子化ビット数が11ビットおよび12ビットの例では、MSB側ビットは、それぞれMSB側の3ビットおよび4ビットとなる。
1重目ランレングス処理部17では、MSB側データ用メモリ16に格納されたMSB側ビットの所定バイト分(この例では1バイト分=8ビット分)からなるビット列に対して、MSB側ビットのビット数単位でビット列を比較してランレングス処理を行う。
すなわち、画素データの量子化ビット数が9ビットの場合には、隣接する8画素分のMSB側ビットからなる1バイトのデータ列が1重目ランレングス処理部17の処理対象とされる。画素データの量子化ビット数が10ビットの場合には、隣接する4画素分のMSB側ビットからなる1バイトのデータ列が1重目ランレングス処理部17の処理対象とされる。また、画素データの量子化ビット数が11ビットおよび12ビットの場合には、隣接する2画素分のMSB側ビットからなる1バイトのデータ列が処理対象とされる。
なお、画素データの量子化ビット数が11ビットの場合のように、MSB側ビットのビット数のの整数倍が8ビットにならない場合には、所定のスタッフィングビットを付加して、全体のデータ長が1バイトとなるようにされる。例えば、画素データの量子化ビット数が11ビットの場合、LSB側の8ビットを除いたMSB側のビットは、3ビットとなる。この3ビットをMSB側ビットとして、2画素分のMSB側ビットに対して1重目ランレングス処理部17の処理を行う。これに限らず、1画素におけるMSB側の3ビットに対してスタッフィングビットを付加した4ビットを、MSB側ビットと見なしてもよい。
画素データの量子化ビット数が10ビットであって1画素が10ビットのデータ長を持つ場合を例にとると、MSB側ビットが2ビットであって、隣接する4画素分のMSB側ビットからなる所定バイトすなわち1バイト(=8ビット)のビット列に対して、MSB側ビット単位すなわち2ビット単位で比較がなされる。比較の結果、当該所定バイトのビット列がMSB側ビットのビット数単位の繰り返しから成っていると判断されれば、繰り返されたMSB側ビットのビット列がランレングスのレベルとして出力される。
例えば、ある画素に対応するMSB側ビットのビット列が「01」であって、当該画素に隣接する3画素に対応するMSB側ビットのビット列も、それぞれ「01」であれば、1重目ランレングス処理部17の処理対象のデータ列がMSB側ビットのビット列「01」の繰り返しからなると判断される。このときのランレングスのレベルは、繰り返されたMSB側ビットのビット列である「01」とされる。
同様に、画素データの量子化ビット数が9ビットであって1画素が9ビットのデータ長を持つ場合、MSB側ビットが1ビットとなるため、隣接する8画素分のMSB側ビットからなる所定バイト(1バイト=8ビット)のビット列に対して、MSB側ビットに対応して1ビット単位で比較がなされる。また、画素データの量子化ビット数が12ビットであって1画素が12ビットのデータ長を持つ場合、MSB側ビットが4ビットとなるため、隣接する2画素分のMSB側ビットからなる所定バイト(1バイト=8ビット)のデータ列に対して、MSB側ビット単位すなわち4ビット単位で比較がなされる。また、スタッフィングビットを用いた場合、スタッフィングビットを含めた単位で処理を行うことができる。
一方、当該所定バイトのビット列がMSB側ビットのビット数単位の繰り返しではないと判断されれば、当該所定バイトの値がそのまま出力される。例えば、当該所定バイトに含まれる各MSB側ビットのビット列がそれぞれ例えば「01」、「01」、「11」、「01」であれば、同一のMSB側ビットの繰り返しではないと判断され、これら4個のMSB側ビットからなるビット列「01011101」が1重目ランレングス処理部17の出力とされる。
また、1重目ランレングス処理部17では、全体の長さが所定バイトとなる隣接する所定数のMSB側ビットが同一ビット列の繰り返しからなるか否かを示す第1のフラグが設定される。この第1のフラグは、1重目ランレングス処理部17における処理の制御に用いられると共に、出力データに埋め込まれて用いられる。
詳細は後述するが、例えば、第1のフラグの値が"1"であれば、隣接する所定数のMSB側ビットが同一ビット列の繰り返しからなることを示し、1重目ランレングス処理部17での処理においては、隣接する所定数のMSB側ビットに対するランレングス処理が可能であることが示される。一方、第1のフラグの値が"0"であれば、隣接する所定数のMSB側ビットが同一ビット列の繰り返しではないことを示し、1重目ランレングス処理部17での処理においては、隣接する所定数のMSB側ビットに対するランレングス処理ができないことが示される。
なお、当該所定バイト内におけるMSB側ビットの繰り返し数は、図4の右端欄に示すように、入力画像データにおける画素データの量子化ビット数に応じて固定的となるため、特に出力する必要はない。
2重目ランレングス処理部18では、MSB側データ用メモリ16に格納されたMSB側ビットの所定バイト分すなわち1バイト分(=8ビット分)からなるビット列を単位として、ランレングス処理を行う。より具体的には、MSB側データ用メモリ16に格納されたデータに対して、所定バイト分のビット列を単位として、隣接するビット列が同一ビット列の繰り返しであるか否かがビット列毎に順次、判断され、繰り返しの回数が計数される。この繰り返し回数の計数値が、所定バイト単位のラン数として2重目ランレングス処理部18から出力される。隣接するビット列が同一ビット列の繰り返しではない場合には、所定バイト単位のラン数が出力されない。
また、2重目ランレングス処理部18では、所定数のMSB側ビットからなる所定バイト分のビット列が繰り返されるか否かを示す第2のフラグが設定される。この第2のフラグは、2重目ランレングス処理部18における処理の制御に用いられると共に、出力データに埋め込まれて用いられる。
詳細は後述するが、例えば、第2のフラグの値が"1"であれば、所定数のMSB側ビットからなる所定バイト分のビット列が繰り返されることを示し、2重目ランレングス処理部18での処理においては、所定数のMSB側ビットからなる次の所定バイト分のビット列に対して繰り返しの判断を行うことが示される。一方、第2のフラグの値が"0"であれば、所定数のMSB側ビットからなる所定バイト分のビット列が繰り返されていないことを示し、2重目ランレングス処理部18での処理においては、所定数のMSB側ビットからなる次の所定バイト分のビット列に対して繰り返しの判断を行わないことが示される。
1−1−1−2.データ構造について
図5は、1重目ランレングス処理部17および2重目ランレングス処理部18の出力に基づく、MSB側の出力データの一例の構造を示す。MSB側の出力データは、図5に例示されるように、データ先頭側の固定長の部分と、この固定長の部分に続く可変長の部分とからなる。固定長の部分には、先頭から、第2のフラグおよび第1のフラグの順に配置される。
また、可変長の部分は、1重目ランレングス処理部17の処理結果に基づくデータが配置される第1の領域と、2重目ランレングス処理部18の処理結果に基づくデータが配置される第2の領域とからなる。
第1の領域は、第1のフラグの値に応じて格納されるデータが決められ、データ長が割り当てられる。すなわち、第1のフラグが、MSB側ビットのビット列を単位としたランレングス処理を行ったことを示していれば、第1の領域には、データ長がMSB側ビットのビット数に応じて割り当てられ、ランレングスのレベルが格納される。上述した画素データの量子化ビット数が10ビットの例では、第1の領域に対してMSB側ビットのデータ長である2ビットが割り当てられ、例えば「01」といった、ランレングスのレベルが格納される。
一方、第1のフラグが、MSB側ビットのビット列を単位としたランレングス処理を行っていないことを示していれば、第1の領域には、所定数のMSB側ビットのビット数のサイズが割り当てられ、所定数のMSB側ビットからなるビット列が格納される。上述した画素データの量子化ビット数が10ビットの例では、第1の領域に対して所定バイトすなわち1バイト(=8ビット)が割り当てられ、例えば「01011101」といった、4個分のMSB側ビットのビット列からなるビット列が格納される。
第2の領域は、2重目ランレングス処理部18の処理結果に基づく所定バイト単位のランレングス処理によるラン数が配置される領域で、第2のフラグの値に応じて第2の領域を割り当てるか否かが決められる。すなわち、第2のフラグが所定バイト分のビット列が繰り返されていることを示している場合、第2の領域に対して所定ビット数が割り当てられ、2重目ランレングス処理部18によるランレングス処理結果である繰り返し回数(ラン数)が格納される。
一方、第2のフラグが、所定バイト分のビット列が繰り返されていないことを示していれば、第2の領域を割り当てない。すなわち、この場合には、第2の領域が出力されない。
若しくは、可変長の領域は、MSB側ビット単位でのランレングス処理および所定バイト単位のランレングス処理が共に行われていない場合に、圧縮符号化がなされていない所定バイト分のビット列が配置される。
なお、第1のフラグおよび第2のフラグは、この出力データの構造においては、それぞれ、MSB側ビット単位のランレングス処理が行われたか否か、所定バイト単位のランレングス処理が行われたか否かを示すことになる。
1−1−1−3.符号化処理について
図6〜図10のフローチャートを用い、この発明の実施の第1の形態による圧縮符号化処理について、より具体的に説明する。なお、図6〜図10の各フローチャートにおける各処理は、例えば図示されないCPUにより所定のプログラムに基づき制御することができる。これに限らず、図1に例示される符号化装置1を構成する各部が互いに連携して適宜、実行するようにもできる。なお、以下では、圧縮符号化処理が画像データの1フレーム毎に行われるものとして説明する。
図6は、この発明の実施の第1の形態による圧縮符号化方法の全体の流れを概略的に示すフローチャートである。既に説明したように、この発明の実施の第1の形態では、画像データに対し、画素毎に、画素データをLSB側の8ビットと、当該LSB側の8ビットを除くMSB側のビットとに分離し(ステップS1)、分離されたLSB側ビットに対する圧縮符号化(ステップS2)と、MSB側ビットに対する圧縮符号化(ステップS3)とをそれぞれ行う。ステップS2によるLSB側ビットの圧縮符号化データと、ステップS3によるMSB側ビットの圧縮符号化データは、所定にインターリーブされて出力される(ステップS4)。
図7は、上述のステップS2におけるLSB側ビットに対する圧縮符号化の一例の処理を示すフローチャートである。上述した図3Aも参照し、DPCM部13は、LSB側データ用メモリ12に格納されたLSB側ビットに対して1画素分毎にDPCM処理を行い、差分データを出力する(ステップS10)。次のステップS11で、ハフマン符号化部14は、DPCM部13から出力された差分データに対してハフマン符号化による圧縮符号化処理を施し、出力する(図3B参照)。圧縮符号化されたLSB側ビットの出力データは、出力データ用メモリ15に所定に書き込まれる。1フレーム分の処理が終了したら(ステップS12)、図6のステップS4に処理が移行される。
図8は、上述のステップS3におけるMSB側ビットに対する圧縮符号化の一例の処理を示すフローチャートである。ステップS20では、1フレーム分の処理が終了したか否かが判断される。若し、終了したと判断されれば、図6のステップS4に処理が移行される。終了していなければ、処理はステップS21に移行される。
ステップS21では、第3のフラグに基づきMSB側データ用メモリ16から所定バイト分すなわち1バイト分のビット列を読み込むか否かが判断される。なお、第3のフラグは、例えば値が"1"でビット列を読み込むことを示し、値が"0"でビット列を読み込まないことを示す。第3のフラグの初期値は、"1"とする。第3のフラグの値が"0"であれば、ビット列を読み込まないと判断され、処理はステップS23に移行される。
一方、第3のフラグの値が"1"であれば、ビット列を読み込むと判断され、処理はステップS22に移行する。ステップS22では、MSB側データ用メモリ16から所定バイト分のビット列が読み込まれ、処理がステップS23に移行される。読み込まれたビット列は、例えば図示されないメモリやレジスタに保持される。
ステップS23では、MSB側ビットの所定バイト分のビット列に対し、MSB側ビット単位でのランレングス処理を行うか否かが判断される。すなわち、このステップS23では、後続する処理で、MSB側ビット単位でのランレングス処理を行うか、所定バイト単位でのランレングス処理を行うかが判断される。このステップS23における判断は、図9および図10で詳細を説明する、ステップS24およびステップS25の処理結果に応じてなされる。
ここでは、便宜上、第4のフラグを定義し、第4のフラグの値が"0"であれば、後続する処理でMSB側ビット単位でのランレングス処理を行い、第4のフラグの値が"1"であれば、後続する処理で所定バイト単位でのランレングス処理を行うものとする。また、第4のフラグは、初期値を"0"とする。すなわち、初期状態では、後続する処理でMSB側ビット単位のランレングス処理が行われるようにされる。
ステップS23で、MSB側ビット単位でのランレングス処理を行うと判断されれば、処理がステップS24に移行される。ステップS24では、1重目ランレングス処理部17において、図示されないメモリやレジスタに保持されているMSB側ビットの所定バイト分のビット列に対して、MSB側ビット単位でのランレングス処理が行われる。また、処理に伴い、第1のフラグの値が所定に設定されると共に、第3のフラグの値が"1"に設定される。ステップS24の処理が終了すると、処理はステップS20に戻される。
一方、ステップS23で、MSB側ビット単位でのランレングス処理を行わないと判断されれば、処理がステップS25に移行される。ステップS25では、2重目ランレングス処理部18において、図示されないメモリやレジスタに保持されているMSB側ビットの所定バイト分のビット列を単位として、ランレングス処理が行われる。また、処理に伴い、第2のフラグの値および第3のフラグの値が所定に設定される。ステップS25の処理が終了すると、処理はステップS20に戻される。
図9は、上述した図8のステップS24におけるMSB側ビット単位での一例のランレングス処理をより詳細に示すフローチャートである。先ず、最初のステップS30で、所定数のMSB側ビットからなる所定バイト分のビット列を、MSB側ビット単位で比較する。この比較結果に基づき、ステップS31で、当該所定バイト分のビット列がMSB側ビット単位でランレングス処理可能か否かが判断される。すなわち、当該所定バイト分のビット列が、MSB側ビットの所定回数の繰り返しで構成されていれば、MSB側ビット単位でのランレングス処理が可能であると判断される。
ステップS31で、MSB側ビット単位でのランレングス処理が可能であると判断されれば、処理はステップS32に移行される。ステップS32では、第1のフラグの値が"1"に設定され、次のステップS33で、MSB側ビット単位でのランレングス処理が行われる。このランレングス処理の結果、ランレングスのレベルが出力される。出力されたランレングスのレベルは、例えば図示されないメモリやレジスタに保持される。
次のステップS34で、2重目ランレングス処理部18において行われる所定バイト単位のランレングス処理によるラン数を「0」に設定して初期化すると共に、第3のフラグの値を"1"に設定する。さらに、次のステップS35で、次の処理を所定バイト単位のランレングス処理とするように所定に設定する。例えば、上述した第4のフラグの値を"1"に設定する。ステップS35の処理が終了すると、処理は図8のステップS20に戻される。
一方、上述のステップS31で、MSB側ビット単位でのランレングス処理が可能ではないと判断されれば、処理はステップS36に移行される。ステップS36では、第1のフラグの値が"0"に設定され、次のステップS37で、現在読み込まれている所定バイト分のビット列がそのまま出力される。出力されたビット列は、例えば図示されないメモリやレジスタに保持される。
次のステップS38で、第2のフラグの値を"0"に設定すると共に第3のフラグの値を"1"に設定し、さらに、次のステップS39で、次の処理をMSB側ビット単位のランレングス処理とするように所定に設定する。例えば、上述した第4のフラグの値を"0"に設定する。これは、所定バイト分のビット列に対してMSB側ビット単位でのランレングス処理ができない場合には、所定バイト単位でのランレングス処理ができる可能性が低いと考えられるからである。ステップS39の処理が終了されると、処理は図8のステップS20に戻される。
図10は、上述した図8のステップS25におけるMSB側ビットの所定バイト分のビット列を単位とした一例のランレングス処理をより詳細に示すフローチャートである。先ず、最初のステップS40で、現在読み込まれている所定バイト分のビット列に隣接する所定バイト分のビット列がMSB側データ用メモリ16から読み込まれ、現在読み込まれている所定バイト分のビット列と、新たに読み込まれた所定バイト分のビット列とが比較される。
ステップS40での比較結果に基づき、次のステップS41で、所定バイト単位のランレングス処理が可能か否かが判断される。すなわち、読み込まれている所定バイト分のビット列と、新たに読み込まれた所定バイト分のビット列とが一致していれば、バイト単位でのランレングス処理が可能であると判断される。ランレングス処理が可能であると判断されれば、処理はステップS42に移行される。
ステップS42では、所定バイト単位でのランレングス処理が行われる。ランレングス処理は、例えば、現在読み込まれている所定バイト分のビット列(参照ビット列とする)と、新たに読み込まれた所定バイト分のビット列(比較ビット列とする)とが比較され、一致していればラン数が例えば1だけインクリメントされる。
ここで、ランレングス処理は、比較ビット列に参照ビット列と異なるビット列が現れるまで繰り返される。例えば、比較ビット列と参照ビット列とが一致すると、当該比較ビット列の次の所定バイトが新たな比較ビット列としてMSB側データ用メモリ16から読み込まれる。この新たな比較ビット列と参照ビット列とが一致するか否かを判断する。一致すれば、ラン数を1だけインクリメントして、当該新たな比較ビット列の次の所定バイトを、より新たな比較ビット列として読み込み、参照ビット列との比較を行う。
または、このステップS42のランレングス処理において、参照ビット列に対して異なる比較ビット列が現れない状態でラン数が限界値に達するまで、ランレングス処理が繰り返され、ラン数がインクリメントされる。ラン数の限界値は、例えば図5を用いて説明したように、MSB側の出力データに割り当てられた第2の領域のサイズに基づく。例えば第2の領域に4ビットが割り当てられていれば、値「0000」を1としてラン数の限界値は、「16」となる。なお、ラン数の限界値は、「16」に限定されるものではない。
ステップS42でのランレングス処理が終了すると、ステップS43で第3のフラグの値が"1"に設定され、さらにステップS44で、次の処理を所定バイト単位のランレングス処理とするように所定に設定される。例えば、上述の第4のフラグの値が"1"に設定される。ステップS44の処理が終了すると、処理は図8のステップS20に戻される。
一方、上述のステップS41の判断で、ランレングス処理が可能ではない、すなわち、現在読み込まれている所定バイト分のビット列と、新たに読み込まれた所定バイト分のビット列とが一致しないと判断されれば、処理はステップS45に移行される。ステップS45では、2重目ランレングス処理部18における所定バイト単位のランレングス処理によるラン数が「0」であるか否かが判断される。
若し、ステップS45により当該ラン数が「0」であると判断されれば、処理はステップS46に移行され、第2のフラグの値が"0"に設定される。一方、ステップS45により、当該ラン数が「1」以上であって「0」ではないと判断されれば、処理はステップS47に移行され、第2のフラグの値が"1"に設定される。
ステップS46またはステップS47で第2のフラグの値が所定に設定されると、処理はステップS48に移行され、ランレングス処理の結果が出力される。ここでは、図5を用いて説明したように、ステップS46およびステップS47により設定された第2のフラグの値に応じて、出力が制御される。すなわち、ステップS46で第2のフラグの値が"0"に設定されていれば、データが出力されない。また、ステップS47で第2のフラグの値が"1"に設定されていれば、現在保持されているラン数が出力される。
ステップS48でランレングス処理の結果が出力されると、次のステップS49で、第3のフラグの値が"0"に設定され、さらにステップS50で、次の処理をMSB側ビット単位のランレングス処理とするように所定に設定される。例えば、上述した第4のフラグの値を"0"に設定する。ステップS50の処理が終了すると、処理は図8のステップS20に戻される。
1−1−1−4.符号化処理の具体的な例
上述の図6〜図10の処理のうち、MSB側ビットの符号化処理について、図11を参照しながら具体的な例を用いて説明する。ここでは、画素データの量子化ビット数が10ビットであって画素データが10ビットのデータ長を持つものとして説明する。すなわち、MSB側ビットのデータ長が2ビットとされる。
図11Aは、図6のステップS1により分離されたMSB側ビットの例を示す。2ビットからなるMSB側ビットが画素毎に分離され、画面の左上隅の画素に対応するデータを先頭に、ラインの左端から右端に向けた画素の配列に対応してライン毎に並べられてMSB側データ用メモリ16に格納される。この図11Aの例では、最初の16画素までは、MSB側ビットの値が全て「00」とされ、17画素目から20画素目までが「10」の繰り返しで、21画素目から24画素目までは、「11」、「01」、「01」、「01」のビット列となっている。
当初、第3のフラグの値は"1"に設定されているので、図8のステップS21から処理がステップS22に移行し、所定バイト分のビット列がMSB側データ用メモリ16から読み込まれる。この例では所定バイトが1バイトなので、図11Bにビット列(a)で示されるように、4画素分のMSB側ビット「00000000」がMSB側データ用メモリ16から読み込まれる。
ステップS23では、後続する処理でMSB側ビット単位でのランレングス処理を行うか、所定バイト単位でのランレングス処理を行うかが例えば第4のフラグに基づき判断される。上述したように、初期状態では、MSB側ビット単位でのランレングス処理を行うようにされているので、ステップS24(図9のステップS30)に処理が移行し、MSB側データ用メモリ16から読み込まれた、4画素分のMSB側ビットによる所定バイト分のビット列(a)について、MSB側ビット単位で比較がなされる。
すなわち、図11Cに一例が示されるように、ビット列(a)におけるMSB側ビットAの他のビットが2ビット単位でMSB側ビットAとそれぞれ比較され、両者が一致するか否かが判断される。
ビット列(a)は、MSB側ビットのビット列「00」が4回繰り返されているので、ランレングス処理が可能と判断され(ステップS31)、ステップS32で第1のフラグが"1"に設定される。そして、次のステップS33でビット列(a)に対してMSB側ビット単位でランレングス処理がなされ、繰り返されたMSB側ビットのビット列「00」がランレングスのレベルとして出力されると共に、第1のフラグが出力される。
このステップS32およびステップS33で、図11Dに示す出力データ100A(第1のフラグ)および出力データ101B(ランレングスのレベル)が確定される。なお、上述したように、MSB側ビット単位のランレングス処理による繰り返し数は、画素データの量子化ビット数に基づき固定的に決まるため、出力する必要が無い。
次に、所定バイト単位でのランレングス処理におけるラン数が「0」に設定され初期化されると共に、第3のフラグの値が"1"に設定され(ステップS34)、さらに、次の処理が所定バイト単位のランレングス処理に決められ(ステップS35)、処理が図8のステップS20に戻される。この時点では、第1のフラグの値が"1"、第3のフラグの値が"1"、ラン数が「0」となっている。
図8のステップS20において、1フレーム分の処理が未だ終了していないので処理がステップS21に移行される。上述したように図9のステップS34で第3のフラグの値が"1"に設定されているので、処理はステップS22に移行され、MSB側データ用メモリ16から、ビット列(a)に隣接する次の所定バイト分のビット列(b)「00000000」が読み込まれる。次のステップS23では、上述したように図9のステップS35で次の処理が所定バイト単位のランレングス処理に決められているため、処理がステップS25(図10のステップS40)に移行される。
図10のステップS40で、前回読み込まれたビット列(a)と、今回読み込まれたビット列(b)とが比較される。ビット列(a)とビット列(b)とが一致するため、ランレングス処理が可能と判断され(ステップS41)、ステップS42で、1バイト単位のランレングス処理が行われ、ラン数がインクリメントされる。先ず、ビット列(a)とビット列(b)とが一致するので、ラン数がインクリメントされ、「1」とされる。
ビット列(a)とビット列(b)とが一致すると、ビット列(b)に隣接する次のビット列(c)「00000000」とビット列(a)とがさらに較される。この図11Bに示される例では、ビット列(c)とビット列(a)とが一致するので、ラン数がさらにインクリメントされ、「2」とされる。ビット列(a)とビット列(c)とが一致すると、ビット列(c)に隣接する次のビット列(d)「00000000」とビット列(a)とがさらにまた、比較される。この図11Bに示される例では、ビット列(d)とビット列(a)とが一致するので、ラン数がさらにまたインクリメントされ、「3」とされる。
ビット列(a)とビット列(d)とが一致すると、ビット列(d)に隣接するビット列(e)「10101010」とビット列(a)とがさらに比較される。この図11Bに示される例では、ビット列(e)とビット列(a)とは一致しないので、ランレングス処理が終了される。ラン数は、保持される。
ランレングス処理が終了されると、次のステップS43で第3のフラグの値が"1"に設定され、さらに次のステップS35で、次の処理を所定バイト単位のランレングス処理に決められる。そして、処理は図8のステップS20に戻される。この時点では、第1のフラグの値が"1"、第3のフラグの値が"1"、ラン数が「3」となっている。
次の図8のステップS20において、1フレーム分の処理が未だ終了していないので処理がステップS21に移行される。上述したように図9のステップS34で第3のフラグの値が"1"に設定されているので、処理はステップS22に移行され、MSB側データ用メモリ16から、前回所定バイト単位でのランレングス処理が終了したビット列(d)に隣接する次の1バイト分のビット列(e)「10101010」が読み込まれる。次のステップS23では、上述したように図9のステップS35で次の処理が所定バイト単位のランレングス処理に決められているため、処理がステップS25(図10のステップS40)に移行される。
図10のステップS40で、前回読み込まれたビット列(d)と、今回読み込まれたビット列(e)とが比較される。ビット列(d)とビット列(e)とが一致しないので、ランレングス処理が可能ではないと判断され(ステップS41)、処理がステップS45に移行され、ラン数が「0」か否かが判断される。上述のステップS42で、ラン数が「3」となっているので、処理がステップS47に移行されて第2のフラグの値が"1"に設定され、次のステップS48で、ランレングス処理の結果が出力される。ここで出力されるランレングス処理の結果は、ラン数「3(4ビットのバイナリ表記で「0011」)」と、第2のフラグの値"1"である。すなわち、このステップS48で、図11Dに示す出力データ102A(第2のフラグ)および出力データ103(ラン数)が確定される。
上述のステップS32とこのステップS48により、上述した図5に示すMSB側のデータ構造を単位とする処理が完結し、図11Bに示されるビット列(a)〜ビット列(d)までの符号化が終了したことになる。この例では、全て値が"0"である32ビットのビット列が8ビットのビット列「11000011」に圧縮符号化されている。
次のステップS49で、第3のフラグの値が"0"に設定され、さらに次のステップS50で、次の処理がMSB側ビット単位のランレングス処理に決められる。
処理はステップS20に戻され、1フレーム分の処理が未だ終了していないので処理がステップS21に移行される。上述のステップS49で第3のフラグの値が"0"に設定されているので、新たなデータを読み込むことなく処理はステップS23に移行される。上述のステップS50で次の処理がMSB側ビット単位のランレングス処理に決められているので、処理はステップS23からステップS24(図9のステップS30)に移行される。
図9のステップS30では、現在読み込まれている所定バイト分のビット列に対してMSB側ビット単位で比較がなされる。この時点では、上述のステップS22でビット列(e)「10101010」が読み込まれているので、このビット列(e)が処理対象とされる。ビット列(e)において、図11Cに示すMSB側ビットB「10」に対して比較がなされる。この例ではMSB側のビット列B「10」が4回繰り返されているので、ランレングス処理が可能と判断され(ステップS31)、ステップS32で第1のフラグの値が"1"に設定される。そして、次のステップS33でビット列(e)に対してMSB側ビット単位でランレングス処理がなされ、繰り返されたMSB側ビットのビット列「10」がランレングスのレベルとして出力されると共に、第1のフラグが出力される。
このステップS32およびステップS33で、図11Dに示す出力データ100B(第1のフラグ)および出力データ101B(ランレングスのレベル)が確定される。
次に、所定バイト単位でのランレングス処理におけるラン数が「0」に設定され初期化されると共に、第3のフラグの値が"1"に設定され(ステップS34)、さらに、次の処理が所定バイト単位のランレングス処理に決められ(ステップS35)、処理が図8のステップS20に戻される。この時点では、第1のフラグの値が"1"、第2のフラグの値が"1"、第3のフラグの値が"1"、ラン数が「0」となっている。
図8のステップS20において、1フレーム分の処理が未だ終了していないので処理がステップS21に移行される。上述したように図9のステップS34で第1のフラグの値が"1"に設定されているので、処理はステップS22に移行され、MSB側データ用メモリ16から、ビット列(e)に隣接する次の所定バイト分のビット列(f)「11010101」が読み込まれる。次のステップS23では、上述したように図9のステップS35で次の処理が所定バイト単位のランレングス処理に決められているため、処理がステップS25(図10のステップS40)に移行される。
図10のステップS40で、前回読み込まれたビット列(e)と、今回読み込まれたビット列(f)とが比較される。ビット列(e)とビット列(f)とが一致しないので、ランレングス処理が可能ではないと判断され(ステップS41)、処理がステップS45に移行され、ラン数が「0」であるか否かが判断される。上述したように、この時点ではラン数が「0」となっているので、処理がステップS46に移行され第2のフラグの値が"0"に設定され、次のステップS48でランレングス処理の結果が出力される。ここで出力されるランレングス処理の結果は、ラン数「0」と、第2のフラグの値"0"である。
図5を用いて説明したように、第2のフラグの値が"0"の場合には、ラン数が出力されないため、このステップS48で、図11Dに示す出力データ102B(第2のフラグ)が確定される。また、ラン数が出力されないため、図5に示す第2の領域が割り当てられないことが確定される。このステップS48の時点で、上述した図5に示すMSB側のデータ構造を単位とする処理が完結し、ビット列(e)の符号化処理が終了したことになる。8ビットのビット列「10101010」が4ビットのビット列「0110」に圧縮符号化されている。
次のステップS49で、第3のフラグの値が"0"に設定され、さらに次のステップS50で、次の処理がMSB側ビット単位のランレングス処理に決められる。
処理は図8のステップS20に戻され、1フレーム分の処理が未だ終了していないので処理がステップS21に移行される。上述のステップS49で第3のフラグの値が"0"に設定されているので、処理はステップS23に移行される。上述のステップS50で次の処理がMSB側ビット単位のランレングス処理に決められているので、処理はステップS24(図9のステップS30)に移行される。
図9のステップS30では、現在読み込まれている所定バイト分のビット列に対してMSB側ビット単位で比較がなされる。この時点では、上述のステップS22でビット列(f)「11010101」が読み込まれているので、このビット列(f)が処理対象とされる。ビット列(f)において、図11Cに示すMSB側ビットC「11」に対して比較がなされる。ビット列(f)は、MSB側ビットC「11」が繰り返されていないため、ランレングス処理が可能ではないと判断され(ステップS31)、ステップS36で第1のフラグの値が"0"に設定され、ステップS37で、ビット列(f)がそのまま出力される。さらにステップS38で、第2のフラグの値が"0"に設定されると共に、第3のフラグの値が"1"に設定される。
このステップS36〜ステップS38で、図11Dに示す出力データ102C(第2のフラグ)、出力データ100C(第1のフラグ)および出力データ104(ビット列(f))が確定される。この時点で、上述した図5に示すMSB側のデータ構造を単位とする処理が完結し、ビット列(f)の符号化処理が終了したことになる。この場合は、MSB側ビット単位および所定バイト単位のランレングス処理が共に行われず、MSB側ビットの圧縮符号化がなされていないため、8ビットのビット列「11010101」に対して第1および第2のフラグが付加され、10ビットのビット列「0011010101」となっている。
そして、次のステップS39で、所定バイト分のビット列に対してMSB側ビット単位でのランレングス処理ができないので所定バイト単位でのランレングス処理ができる可能性も低いとして、次の処理がMSB側ビット単位のランレングス処理に決められる。
処理は図8のステップS20に戻され、1フレーム分の処理が未だ終了していないので処理がステップS21に移行され、上述したように図9のステップS38で第3のフラグの値が"1"に設定されているので、処理はステップS22に移行され、MSB側データ用メモリ16から、ビット列(f)に隣接する次の所定バイト分のビット列(g)「10101010」が読み込まれる。次のステップS23では、上述したように図9のステップS39で次の処理がMSB側ビット単位のランレングス処理に決められているため、処理がステップS24(図9のステップS30)に移行される。
図9のステップS30では、現在読み込まれている所定バイト分のビット列に対してMSB側ビット単位で比較がなされる。この時点では、上述のステップS22でビット列(g)「10101010」が読み込まれているので、このビット列(g)が処理対象とされる。ビット列(g)において、先頭のMSB側ビットのビット列「10」に対して比較がなされる。この例では、MSB側ビットのビット列「10」が4回繰り返されているので、ランレングス処理が可能と判断され(ステップS31)、ステップS32で第1のフラグの値が"1"に設定される。そして、次のステップS33デビット列(g)に対してMSB側ビット単位でランレングス処理がなされ、繰り返されたMSB側ビットのビット列「10」がランレングスのレベルとして出力されると共に、第1のフラグが出力される。
次に、所定バイト単位でのランレングス処理におけるラン数が「0」に設定され初期化されると共に、第1のフラグの値が1に設定され(ステップS34)、さらに、次の処置が所定バイト単位のランレングス処理に決められ(ステップS35)、処理が図8のステップS20に戻される。
以上のような処理を、1フレーム分の全ての画素データに対して順次、行う。
MSB側ビットに対するランレングス処理を、所定バイト単位とMSB側ビット単位とで2重に行うため、高い圧縮率が期待できる。
また、隣接ライン上の画素や、処理が終了した画素を参照せずに、ライン上で一方向的に圧縮符号化処理を行うため、高速な処理が可能である。
さらに、MSB側ビット単位でランレングス処理を行う際には、所定数のMSB側ビットにおいて、MSB側ビットのビット列が全て繰り返している場合のみ、ランレングス処理を行う。さらにこのとき、画素データの量子化ビット数の情報に基づき、ラン数を出力しないようにしているため、圧縮率をさらに高めることができる。さらにまた、MSB側ビットのビット列が所定数のMSB側ビットにおいて全て繰り返していないとされた場合に、当該所定数のMSB側ビットをそのまま出力するようにしているため、高速に処理することができる。
1−1−1−5.出力形式について
図12は、上述したLSB側ビットおよびMSB側ビットに対する圧縮符号化処理により得られた出力データの、一例の出力形式を示す。なお、この図12の例は、上述した図11Dに示したデータ出力に対応している。上述したように、この発明の実施の第1の形態では、圧縮符号化されたLSB側ビットとMSB側ビットとを、インターリーブして出力する。インターリーブの単位は、所定バイト単位のMSB側ビットが復号可能なデータ構造に基づき決めることができる。なお、復号化処理については、後述する。
例えば、MSB側ビットの上述した図5の構造を単位として、MSB側ビットの圧縮符号化データと、LSB側ビットの圧縮符号化データとが交互に配置される。ここで、LSB側ビットは、画素単位で圧縮符号化されているのに対し、MSB側ビットは、MSB側ビット単位のランレングス処理により画素間での圧縮符号化もなされている。そのため、MSB側ビットの圧縮符号化データに含まれるMSB側ビットに対応するLSB側ビットの圧縮符号化データが、MSB側ビットの圧縮符号化データに続けて配置される。
図12の例では、先頭側に配置されるMSB側圧縮符号化データ110は、図11Dの出力データ100A、101A、102Aおよび103に対応し、図11Aおよび図11Bをさらに参照し、16画素分のMSB側ビットが圧縮符号化されたものである。したがって、このMSB側圧縮符号化データ110に続けて、対応する16画素分のLSB側ビットが圧縮符号化されたLSB側圧縮符号化データ111が配置される。
また、次のMSB側圧縮符号化データ112は、図11Dの出力データ100B、101Bおよび102Bに対応し、図11Aおよび図11Bをさらに参照し、4画素分のMSB側ビットが圧縮符号化されたものである。したがって、このMSB側圧縮符号化データ112に続けて、対応する4画素分のLSB側ビットが圧縮符号化されたLSB側圧縮符号化データ113が配置される。
同様に、さらに次のMSB側圧縮符号化データ114は、図11Dの出力データ100Cおよび103、ならびに、値が"0"となっている第2のフラグに対応し、図11Aおよび図11Bをさらに参照し、4画素分のMSB側ビットに対応している。したがって、このMSB側圧縮符号化データ114に続けて、対応する4画素分のLSB側ビットが圧縮符号化されたLSB側圧縮符号化データ115が配置される。
このように、この実施の第1の形態では、圧縮符号化されたデータを、MSB側ビットとLSB側ビットとでインターリーブして出力する。出力データは、例えばファイルに格納される。これに限らず、出力データをストリームデータとして所定の伝送路に対して出力してもよい。MSB側ビットとLSB側ビットとが複数画素単位でインターリーブされているため、受信側では、全てのデータの受信が完了しなくても、復号化を開始できる利点がある。
1−1−2.実施の第1の形態の第1の変形例について(第1の異なる出力形式)
次に、この発明の実施の第1の形態の第1の変形例について説明する。この実施の第1の形態の第1の形態は、上述した実施の第1の形態に対して、出力データの形式を異ならせたもので、それに伴い、符号化装置も部分的に変更されている。すなわち、上述の実施の第1の形態では、MSB側ビットとLSB側ビットとをインターリーブして出力していた。これに対して、この実施の第1の形態の第1の変形例では、出力データを、1の出力系統に対してLSB側ビットとMSB側ビットとに分離して出力する。
図13は、この実施の第1の形態の第1の変形例による一例の符号化装置1Bの機能を示す一例の機能ブロック図である。なお、図13において、上述した図1の構成と共通する部分には同一の符号を付し、詳細な説明を省略する。
図13の構成で、DPCM部13およびハフマン符号化部14におけるLSB側ビットの圧縮符号化処理と、1重目ランレングス処理部17および2重目ランレングス処理部18におけるMSB側ビットの圧縮符号化処理は、上述した実施の第1の形態における処理と同一である。
図13に示されるように、この実施の第1の形態の第1の変形例による符号化装置1Bは、上述した図1に示す、実施の第1の形態による符号化装置1Aに対して、LSB側ビットの圧縮符号化を行う部分に圧縮長計算部20が追加された構成となっている。圧縮長計算部20は、ハフマン符号化部13で可変長符号により圧縮符号化されて供給される符号の符号長を、符号化の区切りに応じて累積する。累積されたLSB側ビットの圧縮符号データ長情報は、出力データ用メモリ15に記憶される。出力データ用メモリ15から読み出された出力データは、例えば出力ファイル21に格納される。
例えば出力データをファイルに格納する場合、1ファイルに格納する分の画素データに対する圧縮符号化が符号化の区切りとされ、1ファイルに格納する分の画素データについて、LSB側ビットを圧縮符号化した符号化データの符号量を累積する。これに限らず、例えば1フレーム分の画素データに対する圧縮符号化を符号化の区切りとしてもよいし、1ライン分や複数フレーム分の画素データに対する圧縮符号化を符号化の区切りとすることもできる。また、画面を所定に分割したそれぞれを、符号化の区切りとすることもできる。
図14は、この実施の第1の形態の第1の変形例による、MSB側ビットおよびLSB側ビットが圧縮符号化されて出力される際の、一例の出力形式を示す。先頭に圧縮符号データ長情報が配置される。圧縮符号データ長情報は、例えばデータ長が所定バイトの固定長とされる。この圧縮符号データ長情報の後ろに、LSB側ビットが圧縮符号化されたLSB側圧縮符号化データが配置される。このとき、符号化の区切りに応じた画素分のLSB側圧縮符号化データが全て、纏めて配置される。LSB側圧縮符号化データの後ろに、符号化の区切りに応じた画素分全ての、MSB側ビットが圧縮符号化されたMSB側圧縮符号化データが纏めて配置される。
先頭に配置される、圧縮符号データ長情報を固定長のデータとするとき、当該圧縮符号データ長情報の後端から圧縮符号データ長情報分、後方に移動した位置がMSB側圧縮符号化データの先頭位置とされる。
なお、ここでは、LSB側圧縮符号化データを出力データの前側に配置し、MSB側圧縮符号化データを後側に配置しているが、これはこの例に限定されない。すなわち、MSB側圧縮符号化データを前側に配置し、LSB側圧縮符号化データを後側に配置することも考えられる。この場合、例えば、圧縮長計算部20を2重目ランレングス処理部18の後ろに配置してMSB側圧縮符号化データの符号長を累積し、累積されたMSB側ビットの圧縮符号データ長情報を出力データの先頭に配置し、次にMSB側圧縮符号化データを配置し、次にLSB側圧縮符号化データを配置する。
1−1−3.実施の第1の形態の第2の変形例について(第2の異なる出力形式)
次に、この発明の実施の第1の形態の第2の変形例について説明する。この実施の第1の形態の第1の形態は、上述した実施の第1の形態の第1の変形例において1系統で出力していたLSB側圧縮符号化データとMSB側圧縮符号化データとを、それぞれ独立的に出力する。
図15は、この実施の第1の形態の第2の変形例による一例の符号化装置1Cの機能を示す一例の機能ブロック図である。なお、図15において、上述した図1の構成と共通する部分には同一の符号を付し、詳細な説明を省略する。
図15の構成で、DPCM部13およびハフマン符号化部14におけるLSB側ビットの圧縮符号化処理と、1重目ランレングス処理部17および2重目ランレングス処理部18におけるMSB側ビットの圧縮符号化処理は、上述した実施の第1の形態における処理と同一である。
図15に示されるように、この実施の第1の形態の第2の変形例による符号化装置1Cは、LSB側およびMSB側に、出力データ用メモリ15Aおよび15Bをそれぞれ有し、LSB側ビットの圧縮符号化出力であるハフマン符号化部14の出力を出力データ用メモリ15Aに格納し、MSB側ビットの圧縮符号化出力である2重目ランレングス処理部18の出力を出力データ用メモリ15Bに格納する。
LSB側ビットの圧縮符号化出力およびMSB側ビットの圧縮符号化出力は、出力データ用メモリ15Aおよび15Bからそれぞれ独立的に読み出され、図16に一例が示されるように、出力データ22Aおよび出力データ22Bの2系統のデータとして出力される。出力データ22Aおよび出力データ22Bは、例えばそれぞれ異なるファイルに格納される。
1−1−4.実施の第1の形態の第3の変形例について(異なる符号化単位)
次に、この発明の実施の第1の形態の第3の変形例について説明する。上述した実施の第1の形態では、所定バイトを1バイトとして、MSB側ビットのランレングス処理を1バイトを単位として行っていた。これに対して、この実施の第1の形態の第3の変形例は、所定バイトを2バイトとして、MSB側ビットのランレングス処理を、2バイトを単位として行う。すなわち、MSB側ビット単位のランレングス処理を、2バイト分のMSB側ビットからなるビット列について行うと共に、所定バイト単位のランレングス処理を、2バイト単位で行う。
なお、この実施の第1の形態の第3の変形例では、上述した実施の第1の形態による符号化装置1A(図1参照)をそのまま適用できると共に、図6〜図10のフローチャートを用いて説明した符号化処理も、基本的に、そのまま適用できる。そのため、これらの詳細な説明については、繁雑さを避けるために省略する。また、LSB側ビットに対する圧縮符号化処理は、実施の第1の形態で説明したのと同様にして、DPCMおよびハフマン符号化により行うので、説明を省略する。さらに、以下において、所定バイトは2バイトである。
図17は、この実施の第1の形態の第3の変形例による、データ分離部11および1重目ランレングス処理部17における処理を、画素データが9ビット、10ビット、11ビットおよび12ビットの量子化ビット数である場合について、概略的に示す。上述した実施の第1の形態と同様に、データ分離部11では、画素毎に、LSB側の8ビットと、当該LSB側の8ビットを除いたMSB側のビットとを分離し、MSB側ビットとLSB側ビットとを形成する。1重目ランレングス処理部17では、MSB側データ用メモリ16に格納されたMSB側ビットの所定バイト分(この例では2バイト分)からなるビット列に対して、MSB側ビットのビット数単位でビット列を比較してランレングス処理を行う。
すなわち、1画素のデータが9ビットの場合には、隣接する16画素分のMSB側ビットからなる所定バイトのデータ列が1重目ランレングス処理部17の処理対象とされる。画素データの量子化ビット数が10ビットの場合には、隣接する8画素分のMSB側ビットからなる所定バイトのデータ列が1重目ランレングス処理部17の処理対象とされる。また、画素データの量子化ビット数が11ビットおよび12ビットの場合には、隣接する4画素分のMSB側ビットからなる所定バイトのデータ列が処理対象とされる。
なお、画素データの量子化ビット数が11ビットの場合のように、MSB側ビットのビット数の整数倍が所定バイトにならない場合は、所定のスタッフィングビットが用いられる。
画素データの量子化ビット数が10ビットであって1画素が10ビットのデータ長を持つ場合を例にとると、MSB側ビットが2ビットであって、隣接する8画素分のMSB側ビットからなる所定バイトのビット列に対して、MSB側ビットに対応して2ビット単位で比較がなされる。比較の結果、当該所定バイトのビット列がMSB側ビット単位の繰り返しから成っていると判断されれば、繰り返されたMSB側ビットのビット列がランレングスのレベルとして出力される。
画素データの量子化ビット数が9ビットであって1画素が9ビットのデータ長を持つ場合も同様にして、隣接する16画素分のMSB側ビットからなる所定バイトのビット列に対して、MSB側ビットに対応して1ビット単位で比較がなされる。また、画素データの量子化ビット数が12ビットであって1画素が12ビットのデータ長を持つ場合、隣接する4画素分のMSB側ビットからなる所定バイトのデータ列に対して、MSB側ビットに対応して4ビット単位で比較がなされる。
画素データの量子化ビット数が11ビットであって1画素が11ビットのデータ長を持つ場合は、MSB側ビットのデータ長が3ビットであるので、所定バイトに対して5個のMSB側ビットを配置することができる。3ビットのMSB側ビットにそれぞれ1ビットのスタッフィングビットを付加する場合は、隣接する4画素分の、スタッフィングビットを含むMSB側ビットからなる16ビットのビット列に対して、MSB側ビットに対応して4ビット乃至3ビット単位で比較がなされる。一方、3ビットのMSB側ビットを5個、所定バイト内に配置する場合は、隣接する5画素分の、3ビットのMSB側ビットからなる15ビットのビット列に対して、MSB側ビットに対応して3ビット単位で比較がなされる。
1重目ランレングス処理部17では、上述の実施の第1の形態と同様にして、隣接する所定数のMSB側ビットが、当該所定バイトすなわち所定バイト内で同一ビットの繰り返しからなるか否かを示す第1のフラグが設定される。
2重目ランレングス処理部18では、所定バイト単位すなわち2バイト単位でランレングス処理がなされる。より具体的には、MSB側データ用メモリ16に格納されたデータに対して、所定バイト分のビット列を単位として、隣接するビット列が同一ビット列の繰り返しであるか否かがビット列毎に順次、判断され、繰り返しの回数が計数される。この繰り返し回数の計数値が、所定バイト単位のラン数として2重目ランレングス処理部18から出力される。隣接する16ビット列が同一ビット列の繰り返しではない場合には、所定バイト単位のラン数が出力されない。
また、2重目ランレングス処理部18では、所定数のMSB側ビットからなる所定バイトすなわち2バイト分のビット列が繰り返されるか否かを示す第2のフラグが設定される。
図18は、この実施の第1の形態の第3の変形例における、1重目ランレングス処理部17および2重目ランレングス処理部18の出力に基づく、MSB側の出力データの一例の構成を示す。この出力データの構成は、基本的には、上述した実施の第1の形態で図5を用いて説明した構成と、同様である。すなわち、出力データは、それぞれ1ビットからなる第1のフラグおよび第2のフラグが配置される、先頭側の固定長の部分と、1重目ランレングス処理部17の処理結果に基づくデータが配置される第1の領域と、2重目ランレングス処理部18の処理結果に基づくデータが配置される第2の領域とが配置される可変長の部分とからなる。
可変長の部分における第1の領域は、第1のフラグの値に応じて格納されるデータが決められる。すなわち、第1のフラグが、MSB側ビットのビット列を単位としたランレングス処理を行ったことを示していれば、第1の領域には、データ長がMSB側ビットのビット数に応じて割り当てられ、ランレングスのレベルが格納される。一方、第1のフラグが、MSB側ビットのビット列を単位としたランレングス処理を行っていないことを示していれば、第1の領域には、所定バイトのサイズが割り当てられる。
第2の領域は、2重目ランレングス処理部18の処理結果に基づく所定バイト単位のラン数が配置される領域で、第2のフラグの値に応じて第2の領域を割り当てるか否かが決められる。すなわち、第2のフラグが、所定バイト分のビット列が繰り返されていることを示している場合、第2の領域に対して所定ビット数のサイズが割り当てられ、2重目ランレングス処理部18によるランレングス処理結果である繰り返し回数(ラン数)が格納される。一方、第2のフラグが、所定バイト分のビット列が繰り返されていないことを示していれば、第2の領域を割り当てない。
図19は、この実施の第1の形態の第3の変形例による、所定バイトを2バイトとし、2バイトを単位とした場合の、MSB側ビットの圧縮符号化処理を概略的に示す。ここでは、画素データの量子化ビット数が10ビットであって1画素が10ビットのデータ長を持つものとする。図19Aは、データ分離部11で分離されたMSB側ビットの例を示す。2ビットからなるMSB側ビットが画素毎に分離され、画面の左上隅の画素に対応するデータを先頭に、ラインの左端から右端に向けた画素の配列に対応してライン毎に並べられてMSB側データ用メモリ16に格納される。このMSB側ビットの8画素分からなる所定バイトすなわち2バイトのビット列を単位として、ランレングス処理が行われる。
例えば、図19Bに例示される所定バイトのビット列(A)「0000000000000000」は、先頭のMSB側ビットのビット列「00」が8回繰り返されてなると共に、隣接する所定バイトのビット列(B)「0000000000000000」と一致する。このビット列(A)において、先頭のMSB側ビットDのビット列「00」について、MSB側ビット単位でランレングス処理が行われる。また、ビット列(A)に隣接する所定バイトのビット列(B)が当該ビット列(A)と比較されて、所定バイト単位でランレングス処理が行われる(図19C参照)。これらの、MSB側ビット単位のランレングス処理および所定バイト単位のランレングス処理の結果、第1および第2のフラグが設定されると共に、この例では、MSB側ビット単位のランレングス処理におけるランレングスのレベルと、所定バイト単位のランレングス処理におけるラン数とが出力される(図19D参照)。
また、図19Bに例示される所定バイトのビット列(C)「1010101011010101」については、先頭のMSB側ビットEのビット列「10」の繰り返しとなっていないので、MSB側ビット単位のランレングス処理が行われず、それに伴い、隣接する所定バイトのビット列との所定バイト単位の比較もなされない(図9のフローチャートのステップS30、ステップS31、ステップS36〜ステップS39など参照)。その結果、第1および第2のフラグが設定されると共に、この所定バイトのビット列(C)がそのまま出力される(図19D参照)。
この実施の第1の形態の第3の変形例によれば、MSB側ビットのランレングス処理を2バイトのビット列について行うため、上述した実施の第1の形態によるMSB側ビットのランレングス処理を1バイトのビット列について行う例に対して、画素データのMSB側ビットがより高い連続性を有する場合に、用いて好適である。例えばアニメーションなど比較的平坦な画像に対してこの実施の第1の形態の第3の変形例による圧縮符号化方式を適用すると、高圧縮率と高速な符号化が期待できる。
また、上述の実施の第1の形態などによる、MSB側ビットのランレングス処理を1バイトのビット列について行う例は、画素データの量子化ビット数が8ビットを超え12ビット以下の場合に、高圧縮率が期待できる。これは、画素データの量子化ビット数が13ビット以上16ビット未満の場合には、MSB側ビット単位でのランレングス処理によるランのレベルが5ビット以上となってしまい、所定バイト(1バイト)内にMSB側ビットが1個しか入らず、所定バイト内におけるMSB側ビット単位でのランレングス処理が成り立たなくなってしまうからである。
これに対し、この実施の第1の形態の第3の変形例では、MSB側ビットのランレングス処理を2バイトのビット列について行うため、画素データの量子化ビット数が13ビット以上、16ビット未満の場合でも、高圧縮率が期待できる。これは、画素データの量子化ビット数が13ビット以上16ビット未満でも、所定バイト(2バイト)内に少なくとも2個のMSB側ビットが入ることになるので、MSB側ビット単位でのランレングス処理を効率的に行うことができるからである。すなわち、この実施の第1の形態の第3の変形例は、例えば画素データの量子化ビット数が13ビット、14ビット、15ビットといった、画素の階調に関してより高解像度の画像データに対する圧縮符号化処理に用いて好適である。
なお、この実施の第1の形態の第3の変形例にも、図12を用いて説明した、実施の第1の形態による、MSB側圧縮符号化データとLSB側圧縮符号化データとをインターリーブした出力形態や、図13および図14を用いて説明した、実施の第1の形態の第1の変形例による、1の出力系統に対してLSB側ビットとMSB側ビットに分離して出力する出力形態、さらに、図15および図16を用いて説明した、実施の第1の形態の第2の変形例による、LSB側圧縮符号化データとMSB側圧縮符号化データとをそれぞれ独立的に出力する出力形態の何れをも適用することが可能である。
また、この実施の第1の形態の第3の変形例では、MSB側ビットのランレングス処理を2バイトのビット列について行っているが、これはこの例に限らず、MSB側ビットのランレングス処理を3バイト若しくはそれ以上のデータ長のビット列について行ってもよい。
1−2.実施の第1の形態による復号化処理について
1−2−1−1.復号化装置について
次に、上述した実施の第1の形態による、圧縮符号化されたLSB側ビットとMSB側ビットとをインターリーブして出力する例に対応した一例の復号化処理について説明する。図20は、この実施の第1の形態による復号化を行う復号化装置2Aの機能を示す一例の機能ブロック図である。
詳細は後述するが、図1に示す復号化装置2Aや、後述する復号化装置2B、復号化装置2Cは、実際には、図示されないCPUにより、所定のプログラムに従い全体の動作が制御される。図20に示される各部は、図示されないメモリと、CPU上で動作されるプログラムで実現されるようにしてもよいし、各部がそれぞれ独立したハードウェアから成りこれらのハードウェアの動作をCPUにより制御するようにしてもよい。
上述した符号化装置1Aで圧縮符号化され、MSB側圧縮符号化データとLSB側圧縮符号化データとが所定にインターリーブされた圧縮符号化データが、入力メモリ30に格納される。なお、符号化装置1Aで圧縮符号化された画素データの元の量子化ビット数は、予め復号化装置2Aに対して設定されるものとする。また、以下の記述で、所定バイトは1バイトである。入力メモリ30からのデータの読み出しは、メモリ制御部31により制御される。
先ず、MSB側圧縮符号化データの復号化処理について説明する。1重目復号化部32は、MSB側ビット単位のランレングス処理に対するデコードを行う。また、2重目復号化部33は、所定バイトすなわち1バイト単位のランレングス処理に対するデコードを行う。1重目復号化部32および2重目復号化部33は、メモリ制御部31に対して読み出し要求を送信し、第1のフラグおよび第2のフラグをそれぞれ読み込む。
1重目復号化部32は、読み込んだ第1のフラグの値に基づき、メモリ制御部31に対してMSB側ビットまたは次の所定バイトの読み出しを要求する。MSB側ビットの読み出しを要求した場合は、要求に応じて読み込まれたMSB側ビットを、元の画素データの量子化ビット数に応じた回数で繰り返して出力する。次の所定バイトの読み出しを要求した場合は、要求に応じて読み込まれた所定バイトのデータをそのまま出力する。出力されたデータは、2重目復号化部33に供給される。
2重目復号化部33は、読み込んだ第2のフラグに基づき、メモリ制御部31に対して所定バイト単位のランレングス処理のラン数の読み出しを要求するか、または、メモリ制御部31に対するデータの読み出しを要求しない。所定バイト単位のランレングス処理のラン数の読み出しを要求した場合には、1重目復号化部32から供給された所定バイト分のデータをラン数分、繰り返して出力する。一方、メモリ制御部31に対してデータの読み出しを要求しない場合は、1重目復号化部32から供給された所定バイト分のデータをそのまま出力する。
2重目復号化部33の出力は、ベースバンドのMSB側ビットである。このベースバンドのMSB側ビットは、MSB側出力メモリ34に所定に格納される。
また、2重目復号化部33は、デコードしたサンプル数(画素データ数)を計数する。計数されたデコード済みサンプル数は、ハフマン復号化部35およびデータ統合部38に供給される。
次に、LSB側圧縮符号化データに対する復号化処理について説明する。ハフマン復号化部35は、2重目復号化部33から供給されたデコード済みサンプル数に応じた数のサンプル数に対応するLSB側圧縮符号化データの読み出しを、メモリ制御部31に対して要求する。この要求に応じて、メモリ制御部31からハフマン復号化部35に対して、LSB側圧縮符号化データが読み込まれる。
ハフマン復号化部35は、符号化装置1Aのハフマンテーブルと対応する所定のハフマンテーブルを有し、読み込まれたLSB側圧縮符号化データのハフマン符号をを当該ハフマンテーブルを参照しながら復号化する。復号化されたデータは、画素毎に8ビットのデータ長を固定的に有する。ハフマン復号化部35の出力は、DPCM復号化部36に供給される。DPCM復号化部36は、供給された8ビットのデータと直前に処理した8ビットのデータとを加算して、DPCM符号の復号化を行う。
DPCM復号化部36の出力は、バースバンドのLSB側ビットである。このベースバンドのLSB側ビットは、LSB側出力メモリ37に格納される。
データ統合部38は、2重目復号化部33から供給されたデコード済みサンプル数に基づき、MSB側出力メモリ34およびLSB側出力メモリ37からベースバンドのMSB側ビットおよびLSB側ビットをそれぞれ読み出し、1画素の画素データを構成するようにデータの統合を行う。例えば、データ統合部38は、2重目復号化部33から供給されたデコード済みサンプル数分のMSB側ビットおよびLSB側ビットが、MSB側出力メモリ34およびLSB側出力メモリ37にそれぞれ溜め込まれると、互いに対応するMSB側ビットとLSB側ビットとを接続して1画素のデータを生成する。この画素データが出力される。
1−2−1−2.復号化処理について
図21〜図23は、この実施の第1の形態に対応する復号化装置2Aにおける一例の復号化処理を示すフローチャートである。なお、図21〜図23の各フローチャートにおける各処理は、例えば図示されないCPUにより所定のプログラムに基づき制御することができる。これに限らず、図20に例示される復号化装置2Aを構成する各部が互いに連携して適宜、実行するようにもできる。
図21は、実施の第1の形態による復号化方法の全体の流れを概略的に示すフローチャートである。なお、ここでは、符号化装置1Aで1フレーム分の画素データに対する圧縮符号化が行われ、この1フレーム分の圧縮符号化データに対する復号化処理を行うものとして説明する。
先ず、ステップS60で、符号化装置1Aで圧縮符号化される前の、ベースバンドの画像データにおける画素データのビット数が設定され、次のステップS61で、符号化装置1Aで圧縮符号化された圧縮符号化データが格納されるファイルが読み込まれる。ファイルから読み込まれた圧縮符号化データは、入力メモリ30に格納される。なお、圧縮符号化データは、ファイルに格納されて供給されるのに限らず、例えばストリームデータとして供給され、入力メモリ30に格納されるようにしてもよい。
次のステップS62で、1重目復号化部32および2重目復号化部33において、MSB側圧縮符号化データに対する復号化処理が行われ、復号化されたベースバンドのMSB側ビットがMSB側出力メモリ34に格納される。また、2重目復号化部33からデコード済みサンプル数が出力され、ハフマン復号化部35およびデータ統合部38に供給される。
次のステップS63で、LSB側ビットとMSB側ビットとの統合処理がデコード済みサンプル数分、行われたか否かが判断される。若し、行われたと判断されれば、処理はステップS66に移行され、1フレーム分のデータについて処理が終了したか否かが判断される。若し、1フレーム分のデータについて処理が終了したと判断されれば、一連の復号化処理が終了される。一方、1フレーム分のデータについての処理が未だ終了していないと判断されれば、処理はステップS62に戻される。
上述のステップS63で、デコード済みサンプル数分の統合処理が未だ行われていないと判断されれば、処理はステップS64に移行される。ステップS64では、ハフマン復号化部35およびDPCM復号化部36において、LSB側圧縮符号化データに対する復号化処理が行われ、復号化されたベースバンドのLSB側ビットがLSB側出力メモリ37に格納される。
1画素分のLSB側ビットが復号化されたら、処理はステップS65に移行される。ステップS65では、データ統合部38において、上述のステップS62で復号化されたMSB側ビットの1画素分と、当該MSB側ビットに対応する、ステップS64で復号化された1画素分のLSB側ビットとが統合され、1画素分の画素データが復元される。1画素分の画素データが統合されたら、処理はステップS63に戻される。
図22は、上述した図21のフローチャートにおけるステップS62の、MSB側圧縮符号化データの一例の号化処理をより詳細に示すフローチャートである。図5を用いて説明したMSB側の出力データのデータ構造を参照し、最初ステップS80で、先頭の1ビットが読み込まれて2重目復号化部33に第2のフラグが取得され、ステップS81で、次の1ビットが読み込まれて1重目復号化部32に第1のフラグが取得される。
次のステップS82で、1重目復号化部32において、取得された第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われているか否かが判断される。若し、第1のフラグの値が"1"であり、MSB側ビット単位でのランレングス処理が行われてると判断されれば、処理はステップS83に移行され、1重目復号化部32により第1のフラグの次の2ビット、すなわちランレングスのレベルが読み込まれる。そして、所定バイトになるまで、読み込まれた2ビットの値が繰り返し出力される。
一方、第1のフラグの値が"0"であって、MSB側ビット単位でのランレングス処理が行われていないと判断されれば、処理はステップS88に移行され、第1のフラグに続く所定バイトすなわち1バイト(=8ビット)が読み込まれ、出力される。そして、処理はステップS89に移行される。
次のステップS84で、2重目復号化部33において、取得された第2のフラグの値に基づき所定バイト単位でのランレングス処理が行われているか否かが判断される。若し、第2のフラグの値が"1"であり、所定バイト単位でのランレングス処理が行われていると判断されれば、処理はステップS85に移行され、第1のフラグに続く4ビットが読み込まれ、所定バイト単位でのランレングス処理によるラン数が取得される。
一方、ステップS84で、所定バイト単位でのランレングス処理が行われていないと判断されれば、処理はステップS89に移行される。ステップS89では、デコード済みサンプル数が取得される。
次のステップS86で、2重目復号化部33は、上述したステップS83で1重目復号化部32から出力された所定バイト分のデータを、ステップS85で取得されたラン数分、繰り返して出力する。そして、ステップS87で、デコード済みのサンプル数が取得される。
図23は、上述のステップS87およびステップS89におけるデコード済みサンプル数の取得を行うための一例の処理を概念的に示すフローチャートである。すなわち、この図23のフローチャートに示されるように、MSB側ビット単位でのランレングス処理に対する復号化がなされ(ステップS130)、画素データの量子化ビット数に基づきMSB側ビットの繰り返し数が分かる。このMSB側ビットの繰り返し数がデコード済みのサンプル数Nとされる(ステップS131)。
例えば、画素データの量子化ビット数が10ビットで、1バイトを単位としてランレングス処理を行う場合、MSB側ビット単位でランレングス処理されていれば、このMSB側ビット単位のランレングス処理の復号化によりデコードされたデコード済みサンプル数Nは、4個となる。
所定バイト単位でのランレングス処理が行われていなければ(ステップS132)、このデコード済みサンプル数Nが出力される。一方、所定バイト単位でのランレングス処理が行われていれば、ラン数に基づき所定バイト数単位のランレングス処理に対する復号化が行われる(ステップS133)。このときのラン数と、上述のデコード済みサンプル数Nとに基づき、下記の式(1)によりデコード済みサンプル数が求められる。
デコード済みサンプル数=N×(所定バイト数単位のランレングス処理のラン数+1) ・・・(1)
図24は、上述した図21のフローチャートにおけるステップS64の、LSB側圧縮符号化データの一例の復号化処理をより詳細に示すフローチャートである。先ず、2重目復号化部33から供給されたデコード済みサンプル数に基づき、ハフマン復号化部35からメモリ制御部31に対して、LSB側圧縮符号化データの読み出しが要求される。この要求に応じて、入力メモリ30からLSB側圧縮符号化データが読み出され、ハフマン復号化部35に供給される。
このとき、図21および図22で説明したMSB側圧縮符号化データの復号化処理が終了したMSB側ビットに対応するLSB側圧縮符号化データが、入力メモリ30から読み出される。より具体的には、この実施の第1の形態による符号化装置1Aにおいて、出力データは、図12を用いて説明したように、先ずMSB側圧縮符号化データが配置され、次に対応するLSB側圧縮符号化データが配置され、その次に、次のMSB側圧縮符号化データが配置され、さらにその次に、当該次のMSB側圧縮符号化データに対応するLSB側圧縮符号化データが配置される。そこで、メモリ制御部31は、ハフマン復号化部35による読み出し要求に対して、直前に読み出されたMSB側圧縮符号化データの直後に配置されるLSB側圧縮符号化データから、読み出しを開始する。
ハフマン復号化部35は、所定のハフマンテーブルを参照し、供給されたLSB側圧縮符号化データのハフマン符号を復号化する。ハフマン復号化部35は、復号されたデータを所定バイト毎に出力し、DPCM復号化部36に供給する。
例えば、メモリ制御部31は、入力メモリ30から1ビット乃至所定ビット毎にデータを読み出してハフマン復号化部35に供給する。ハフマン復号化部35は、供給されたデータを逐次的にハフマンテーブルと比較し、復号化を行う。復号化されて得られたビット列のデータ長が所定バイトになったら、1画素分のLSB側圧縮符号化データについてハフマン符号の復号化が完了したとされ、当該データが出力される。
DPCM復号化部36では、供給された所定バイトのデータがフレームの先頭のデータであると判断されれば(ステップS71)、これをそのまま、LSB側圧縮符号化データが復号化されたベースバンドのLSB側ビットとして出力する(ステップS73)と共に、図示されないメモリに保持する。一方、ステップS71で、供給された所定バイトのデータがフレームの先頭のデータではないと判断されれば、DPCMの復号化が行われる(ステップS72)。例えば、供給されたデータがメモリに保持されると共に、当該データを直前に処理されメモリに保持されている所定バイトのデータに加算する。加算結果がLSB側圧縮符号化データが復号化されたベースバンドのLSB側ビットとして出力される。
1−2−1−3.復号化処理の具体的な例
上述した図21〜図24のフローチャート、ならびに、図25〜図30を用いて、この実施の第1の形態による復号化処理を、具体的な例を挙げて説明する。ここでは、画素データの量子化ビット数を10ビットとし、所定バイトが1バイトであって、1バイトを単位として符号化がなされているものとする。
MSB側圧縮符号化データが図25Aに一例が示されるビット列「11000011」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図25Aに示すビット列は、MSB側ビット単位でのランレングス処理と、所定バイト単位でのランレングス処理とが共に行われる例である。
先ず、図22のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第2のフラグが取得される。図25Aの例では、第2のフラグの値が"1"であって、所定バイト単位すなわち1バイト単位でのランレングス処理が行われていることが示される(図25Bの復号手順(1))。そして、ステップS81に従い次の1ビットが読み込まれて第1のフラグが取得される。この図25Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図25Bの復号手順(2))。
図22のステップS82の判断では、第1のフラグの値が"1"なのでMSB側ビット単位でのランレングス処理が行われたと判断され、図22のステップS83に従い、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれたランレングスのレベルのビット列が1バイトの長さになるまで繰り返される。図25Aの例では、ランレングスのレベルを示すビット列が「00」となっているので、このビット列「00」が4回繰り返され、ビット列「00000000」が出力される(図25Bの復号手順(3))。
さらに、図22のステップS84の判断では、第2のフラグの値が"1"なので所定バイト単位のランレングス処理が行われたと判断され、図22のステップS85に従い、ランレングスのレベルを示す2ビットのビット列の次に配置される、ランレングスのラン数を示す4ビットのビット列が読み込まれる。図25Aの例では、ラン数を示すビット列が「0011」となっているので、ラン数が「3」であるとされ、直前に出力されたビット列「00000000」が3回繰り返されて出力される(図25Bの復号手順(4))。
この復号手順(1)〜復号手順(4)までで、上述した図5に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので(図22のステップS87)、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が行われる。この統合処理は、図21のフローチャートで説明したように、1画素分のLSB側ビットが復号化される毎に行われる。
図26を用いて、MSB側ビットとLSB側ビットとの統合処理について説明する。図26Aは、復号化装置2Aに供給される一例の圧縮符号化データを示す。この圧縮符号化データの先頭に配置されるMSB側圧縮符号化データ(1)は、上述の図25Aに示したMSB側圧縮符号化データに対応する。
このMSB側圧縮符号化データから、図25を用いて説明したような処理により、MSB側ビットのビット列「00」がMSB側ビット単位のランレングス処理の復号化により4回繰り返され、さらに所定バイト単位のランレングス処理の復号化により3回繰り返されたビット列「00000000000000000000000000000000」が得られる(図26B左側参照)。このビット列は、MSB側出力メモリ34に格納される。デコード済みサンプル数は、図23のフローチャートを用いて説明したように、(MSB側ビット単位のデコード済みサンプル数N)×(所定バイト単位のランレングス処理のラン数+1)=4×(3+1)=16となる。
一方、LSB側圧縮符号化データは、例えば1画素分のLSB側ビットが復号化される毎にLSB側出力メモリ37に格納される(図26B右側参照)。
データ統合部38は、MSB側出力メモリ34に格納したビット列を、MSB側ビット毎すなわち2ビット毎に、LSB側出力メモリ37に格納した、デコード済みサンプル数分のLSB側ビットの1画素分すなわち8ビットに対して、MSB側ビットとLSB側ビットとが対応するようにそれぞれ接続してMSB側ビットとLSB側ビットとを統合して、デコード済みサンプル数分の画素データを得る(図26C)。
すなわち、この図26の例では、図26Bの左側に示される、復号化されたMSB側ビットによるビット列「00000000000000000000000000000000」の先頭から2ビットずつビット列が取り出される。そして、取り出された16個の2ビットのビット列「00」、「00」、・・・、「00」が順次、画素が対応するLSB側ビットに接続され、元の10ビットの量子化ビット数を持つ画素データが得られる。この図26の例では、16サンプルすなわち16画素分の画素データが得られる。
なお、データ統合部38におけるこの統合処理は、LSB側出力メモリ37に対してデコード済みサンプル数分のLSB側ビットが格納されてから行ってもよい。
MSB側圧縮符号化データが図27Aに一例が示されるビット列「0110」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図27Aに示されるビット列は、MSB側ビット単位でのランレングス処理が行われ、所定バイト単位でのランレングス処理が行われない例である。
先ず、図22のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第2のフラグが取得される。図27Aの例では、第2のフラグの値が"0"であって、所定バイト単位でのランレングス処理が行われていないことが示される(図27Bの復号手順(1))。次にステップS81に従い次の1ビットが読み込まれて第1のフラグが取得される。この図27Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図27Bの復号手順(2))。
図22のステップS82の判断では、第1のフラグの値が"1"なのでMSB側ビット単位でのランレングス処理が行われたと判断され、次のステップS83に従い、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれたランレングスのレベルのビット列が1バイトの長さになるまで繰り返される。図27Aの例では、ランレングスのレベルを示すビット列が「10」となっているので、このビット列「10」が4回繰り返され、ビット列「10101010」が出力される(図27Bの復号手順(3))。
次のステップS84の判断では、第2のフラグの値が"0"なので、所定バイト単位のランレングス処理が行われていないと判断され、処理はステップS89に移行される。この図27Aのビット列の場合は、この復号手順(1)〜復号手順(3)までで、MSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が、1画素分のLSB側ビット毎に行われる。
この場合のMSB側ビットとLSB側ビットとの統合処理は、図26を用いて説明した処理と略同様である。すなわち、図28に一例が示されるように、図28Aに示すMSB側圧縮符号化データ(2)から、図27を用いて説明した処理により、MSB側ビットのビット列「10」がMSB側ビット単位のランレングス処理の復号化により4回繰り返された「10101010」が得られる(図28B左側参照)。このビット列がMSB側出力メモリ34に格納され、デコード済みサンプル数が(MSB側ビット単位のデコード済みサンプル数N)×(所定バイト単位のランレングス処理のラン数+1)=4×(0+1)=4と求められる。
一方、LSB側圧縮符号化データは、例えば1画素分のLSB側ビットが復号化される毎にLSB側出力メモリ37に格納される(図28B右側参照)。
データ統合部38は、MSB側出力メモリ34に格納したビット列を、MSB側ビット毎すなわち2ビット毎に、LSB側出力メモリ37に格納した、デコード済みサンプル数分のLSB側ビットの1画素分すなわち8ビットに対して、MSB側ビットとLSB側ビットとが対応するようにそれぞれ接続してMSB側ビットとLSB側ビットとを統合して、デコード済みサンプル数分の画素データを得る(図28C)。
すなわち、この図28の例では、図28Bの左側に示される、MSB側ビットによるビット列「10101010」の先頭から2ビットずつビット列が取り出される。そして、取り出された4個の2ビットのビット列「10」、「10」、「10」、「10」が順次、画素が対応するLSB側ビットに接続され、元の10ビットの量子化ビット数を持つ画素データが得られる。この図28の例では、4サンプルすなわち4画素分の画素データが得られる。
MSB側圧縮符号化データが図29Aに一例が示されるビット列「0011010101」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図29Aに示されるビット列は、MSB側ビット単位でのランレングス処理と所定バイト単位でのランレングス処理とが行われない例である。
図22のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第2のフラグが取得され、この第2のフラグの値"0"に基づき、所定バイト単位でのランレングス処理が行われていないことが示される(図29Bの復号手順(1))。次の1ビットがステップS81に従い読み込まれて第1のフラグが取得され、この第1のフラグの値0に基づき、MSB側ビット単位でのランレングス処理が行われていないことが示される。
第2のフラグの値"0"に基づき、ステップS82でMSB側ビット単位でのランレングス処理が行われていないと判断され、処理がステップS88に移行され、第2および第1のフラグの次に配置される所定バイトすなわち1バイト分のビット列「11010101」が出力される(図29Bの復号手順(3))。
この復号手順(1)〜復号手順(3)までで、上述した図5に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
復号化されたMSB側ビットとLSB側ビットとの、データ統合部38における統合処理は、図26および図28を用いて説明した処理と略同様である。すなわち、図30に一例が示されるように、図30Aに示すMSB側圧縮符号化データ(3)から、図29を用いて説明した処理により、第1のフラグの次に配置される所定バイトすなわち1バイト分のビット列「11010101」が得られ(図30左側参照)、このビット列がMSB側メモリ34に格納される。
この例では、所定バイト単位でのランレングス処理が行われていないので、上述した図23のフローチャートのステップS132の判断に従い、MSB側ビットの繰り返し数「4」がデコード済みのサンプル数Nとされる。
一方、LSB側圧縮符号化データは、例えば1画素分のLSB側ビットが復号化される毎にLSB側出力メモリ37に格納される(図30B右側参照)。
データ統合部38は、MSB側出力メモリ34に格納したビット列を、MSB側ビット毎すなわち2ビット毎に、LSB側出力メモリ37に格納した、デコード済みサンプル数分のLSB側ビットの1画素分すなわち8ビットに対して、MSB側ビットとLSB側ビットとが対応するようにそれぞれ接続してMSB側ビットとLSB側ビットとを統合して、デコード済みサンプル数分の画素データを得る(図30C)。
すなわち、この図30の例では、図30Bの左側に示される、MSB側ビットによるビット列「11010101」の先頭から2ビットずつビット列が取り出される。そして、取り出された2ビットのビット列「11」、「01」、「01」、「01」が順次、画素が対応するLSB側ビットに接続され、元の10ビットの量子化ビット数を持つ画素データが得られる。この図30の例では、4サンプルすなわち4画素分の画素データが得られる。
1−2−2.実施の第1の形態の第1の変形例による復号化処理について
1−2−2−1.復号化装置について
次に、上述した実施の第1の形態の第1の変形例による、1の出力系統に対して圧縮符号化されたLSB側ビットと圧縮符号化されたMSB側ビットに分離して出力する例に対応した一例の復号化処理について説明する。図31は、この実施の第1の形態の第1の変形例による復号化を行う復号化装置2Bの機能を示す一例の機能ブロック図である。なお、図31において、上述した図20の構成と共通する部分には同一の符号を付し、詳細な説明を省略する。また、符号化装置1Bで圧縮符号化された画素データの元の量子化ビット数は、予め復号化装置2Bに対して設定されるものとする。さらに、以下の記述で、所定バイトは1バイトである。
図14で例示したような出力形式の圧縮符号化データが入力メモリ30に格納される。メモリ制御部31は、入力メモリ30から、圧縮符号化データの先頭に配置される圧縮符号データ長情報を読み込み、読み込まれた圧縮符号データ長情報に基づき入力メモリ30に格納された圧縮符号化データを読み込む。
すなわち、図14を参照し、ハフマン復号化部35からメモリ制御部31に対して読み出し要求があった場合には、圧縮符号データ長情報の直後からビット列を読み込むように制御する。一方、1重目復号化部32や2重目復号化部33から読み出し要求があった場合には、圧縮符号データ長情報で示される位置に基づきビット列を読み込むように制御する。
LSB側圧縮符号化データに対する復号化処理では、ハフマン符号化部35の読み出し要求に応じて、メモリ制御部31は、圧縮符号データ長情報の直後から圧縮符号データ長情報で示される位置まで、1ビット乃至所定ビットずつデータを読み出し、ハフマン復号化部35に供給する。ハフマン復号化部35は、供給されたデータを逐次的にハフマンテーブルと比較し、ハフマン符号の復号化を行う。復号化されて得られたビット列のデータ長が8ビットになったら、当該ビット列がDPCM復号化部36に供給される。DPCM復号化部36は、供給された8ビットのデータと直前に処理した8ビットのデータとを加算して、DPCMの復号化を行う。DPCM復号化部36から出力されたベースバンドのLSB側ビットは、LSB側出力メモリ37に格納される。
一方、MSB側圧縮符号化データに対する復号化処理では、1重目復号化部32および2重目復号化部33により、メモリ制御部31に対してデータの読み出しを要求する。メモリ制御部31は、この読み出し要求に応じて、圧縮符号データ長情報に示される位置に基づき入力メモリ30からデータを読み出し、1重目復号化部32または2重目復号化部33に供給する。1重目復号化部32は、供給されたデータに含まれる第1のフラグに基づきMSB側ビット単位のランレングス処理に対する復号化を行い、2重目復号化部33は、供給されたデータに含まれる第2のフラグに基づき所定バイト単位のランレングス処理に対する復号化を行う。2重目復号化部33から出力されたベースバンドのMSB側ビットは、MSB側出力メモリ34に格納される。
データ統合部38は、MSB側出力メモリ34およびLSB側出力メモリ37からベースバンドのMSB側ビットおよびLSB側ビットをそれぞれ読み出し、1画素の画素データを構成するようにデータの統合を行う。MSB側ビットとLSB側ビットとが統合されて生成された1画素の画素データが出力画素データとして出力される。
1−2−2−2.復号化処理について
図32〜図34は、この実施の第1の形態の第1の変形例に対応する復号化装置2Bにおける一例の復号化処理を示すフローチャートである。なお、図32〜図34の各フローチャートにおける各処理は、例えば図示されないCPUにより所定のプログラムに基づき制御することができる。これに限らず、図31に例示される復号化装置2Bを構成する各部が互いに連携して適宜、実行することもできる。
図32は、実施の第1の形態の第1の変形例に対応する復号化方法の全体の流れを概略的に示すフローチャートである。なお、ここでは、符号化装置1Bで1フレーム分の画素データに対する圧縮符号化が行われ、この1フレーム分の圧縮符号化データに対する復号化処理を行うものとして説明する。
先ず、ステップS90で、符号化装置1Bで圧縮符号化される前の、ベースバンドの画像データにおける画素データのビット数が設定され、次のステップS91で、符号化装置1Bで圧縮符号化された圧縮符号化データが格納されるファイルが読み込まれる。ファイルから読み込まれた圧縮符号化データは、入力メモリ30に格納される。なお、圧縮符号化データは、ファイルに格納されて供給されるのに限らず、例えばストリームデータとして供給され、入力メモリ30に格納されるようにしてもよい。
次のステップS92で、メモリ制御部31によりLSB側の圧縮符号データ長情報が取得される。例えば、メモリ制御部31は、入力メモリ30に格納されたデータの先頭の所定バイトを読み出し、LSB側の圧縮符号データ長情報を取得する。そして、ステップS93およびステップS94で、LSB側圧縮符号化データおよびMSB側圧縮符号化データがそれぞれ復号化される。
すなわち、ステップS93において、ハフマン復号化部35からメモリ制御部31に対してデータの読み出しが要求される。メモリ制御部31は、この要求に応じて、入力メモリ30に格納された圧縮符号化データの、圧縮符号データ長情報の直後から圧縮符号データ長情報で示される位置までの読み出しを行う。読み出されたデータは、ハフマン復号化部35およびDPCM復号化部36で復号化され、ベースバンドのLSB側ビットとされてLSB側出力メモリ37に格納される。
一方、ステップS94では、1重目復号化部32および2重目復号化部22からメモリ制御部31に対してデータの読み出しが要求される。メモリ制御部31は、この要求に応じて、入力メモリ30に格納された圧縮符号化データを、圧縮符号データ長情報で示される位置から読み出す。1重目復号化部32および2重目復号化部33は、読み出されたデータに基づきMSB側圧縮符号化データの復号化を行い、復号化されたベースバンドのMSB側ビットがMSB側出力メモリ34に格納される。
ステップS93およびステップS94で、1フレーム分のLSB側圧縮符号化データおよびMSB側圧縮符号化データに対する復号化処理が終了すると、処理はステップS95に移行される。ステップS95では、データ統合部38において、ステップS93で復号化されたベースバンドのLSB側ビットと、ステップS94で復号化されたベースバンドのMSB側ビットとが統合され、1フレーム分の画素データが復元される。
図33は、上述した図32のフローチャートにおけるステップS93の、LSB側圧縮符号化データの復号化処理を、より詳細に示す一例のフローチャートである。この図33のフローチャートによる処理は、1フレーム分の画素に対応するLSB側圧縮符号化データの復号化処理が終了するまで繰り返される(ステップS100)。
ステップS101で、ハフマン復号化部35からメモリ制御部31に対して、入力メモリ30に格納されているLSB側圧縮符号化データの読み出しが要求される。メモリ制御部31は、この要求に応じて、入力メモリ30に格納されている圧縮符号化データの先頭に配置された圧縮符号データ長情報の直後から、当該圧縮符号データ長情報で示される位置まで、1ビット毎乃至所定ビット毎にデータを読み出して、ハフマン復号化部35に供給する。ハフマン復号化部35は、供給されたデータを逐次的にハフマンテーブルと比較し、復号化を行う。復号化されて得られたビット列のデータ長が所定バイトになったら、1画素分のLSB側圧縮符号化データについてハフマン符号の復号化が完了したとされ、当該データが出力される。
DPCM復号化部36では、供給された所定バイトのデータがフレームの先頭のデータであると判断されれば(ステップS102)、これをそのまま、LSB側圧縮符号化データが復号化されたベースバンドのLSB側ビットとして出力する(ステップS103)と共に、図示されないメモリに保持する。一方、ステップS103で、供給された所定バイトのデータがフレームの先頭のデータではないと判断されれば、DPCMの復号化が行われる(ステップS104)。例えば、供給されたデータがメモリに保持されると共に、当該データを直前に処理されメモリに保持されている所定バイトのデータに加算する。加算結果がLSB側圧縮符号化データが復号化されたベースバンドのLSB側ビットとして出力される。
ステップS103またはステップS104の処理が終了したら、処理はステップS100に戻され、1フレーム分の復号化が終了するまでこれらの処理が繰り返される。
図34は、上述した図32のフローチャートにおけるステップS94の、MSB側圧縮符号化データの一例の復号化処理をより詳細に示すフローチャートである。この図34のフローチャートによる処理は、1フレーム分の画素に対応するMSB側圧縮符号化データの復号化処理が終了するまで繰り返される(ステップS110)。
繰り返しの最初の回のステップS111において、入力メモリ30に格納された圧縮符号化データに対し、圧縮符号データ長情報に示される位置から1ビットの読み込みがなされて2重目復号化部33に第2のフラグが取得され、ステップS112で次の1ビットが読み込まれて1重目復号化部32に第1のフラグが取得される。
なお、繰り返しの最初の回以外の回におけるステップS111では、直前に読み出されたビットの次の1ビットが読み込まれることになる。
次のステップS113で、1重目復号化部32において、取得された第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われているか否かが判断される。若し、第1のフラグの値が"1"であり、MSB側ビット単位でのランレングス処理が行われてると判断されれば、処理はステップS114に移行され、1重目復号化部32により第1のフラグの次の2ビット、すなわちランレングスのレベルが読み込まれる。そして、所定バイトになるまで、読み込まれた2ビットの値が繰り返し出力される。
一方、第1のフラグの値が"0"であって、MSB側ビット単位でのランレングス処理が行われていないと判断されれば、処理はステップS118に移行され、第1のフラグに続く所定バイトすなわち1バイト(=8ビット)が読み込まれ、出力される。そして、処理はステップS110に戻される。
次のステップS115で、2重目復号化部33において、取得された第2のフラグの値に基づき所定バイト単位でのランレングス処理が行われているか否かが判断される。若し、第2のフラグの値が"1"であり、所定バイト単位でのランレングス処理が行われていると判断されれば、処理はステップS116に移行され、第1のフラグに続く4ビットが読み込まれ、所定バイト単位でのランレングス処理によるラン数が取得される。
一方、ステップS115で、所定バイト単位でのランレングス処理が行われていないと判断されれば、処理はステップS110に戻される。
次のステップS117で、2重目復号化部33は、上述したステップS114で1重目復号化部32から出力された所定バイト分のデータを、ステップS116で取得されたラン数分、繰り返して出力する。
1−2−2−3.復号化処理の具体的な例
上述した図32〜図34のフローチャート、ならびに、図35および図36を用いて、この実施の一形態の第1の変形例による復号化処理を、具体的な例を挙げて説明する。ここでは、画素データの量子化ビット数を10ビットとし、所定バイトが1バイトであって、1バイトを単位として符号化がなされているものとする。
MSB側圧縮符号化データが図35Aに一例が示されるビット列「1100001101100011010101・・・」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。
先ず、図34のフローチャートのステップS111に従い先頭の1ビットが読み込まれて第2のフラグが取得され、取得された第2のフラグの値が"1"であるので、所定バイト単位でのランレングス処理が行われていることが示される(図35Bの復号手順(1))。次のステップS112に従い次の1ビットが読み込まれて第1のフラグが取得され、取得された第1のフラグの値が"1"であるので、MSB側ビット単位でのランレングス処理が行われていることが示される(図35Bの復号手順(2))。
第1のフラグの値が"1"なので、ステップS113により、第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われたと判断され、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれた2ビットのビット列「00」が4回繰り返され(ステップS114)、所定バイト(1バイト)のデータ列「00000000」が出力される(図35Bの復号手順(3))。
さらに、ステップS115により、第2のフラグの値に基づき所定バイト単位でのランレングス処理が行われたと判断され、ステップS116に従い、ランレングスのレベルを示す2ビットのビット列の次に配置される、ランレングスのラン数を示す4ビットのビット列「0011」が読み込まれる。読み込まれたビット列に基づきラン数が「3」であることが分かるので、直前に出力されたビット列「00000000」が3回繰り返されて出力される(図35Bの復号手順(4))。
処理がステップS110に戻され、未だ1フレーム分の処理が終了していないので、次のステップS111に従い、直前に読み込まれたランレングスのラン数を示す4ビットのビット列「0011」の次の1ビットが読み込まれ、第2のフラグが取得される。図35Aの例では、取得された第2のフラグの値が"0"であって所定バイト単位でのランレングス処理が行われていないことが示される(図35Bの復号手順(5))。次のステップS112に従い次の1ビットが読み込まれて第1のフラグが取得され、取得された第1のフラグの値が"1"であるので、MSB側ビット単位でのランレングス処理が行われていることが示される(図35Bの復号手順(6))。
ステップS113により、第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われたと判断され、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれた2ビットのビット列「10」が4回繰り返され(ステップS114)、所定バイト(1バイト)のデータ列「10101010」が出力される(図35Bの復号手順(7))。
次のステップS115の判断では、第2のフラグの値が"0"なので、所定バイト単位のランレングス処理が行われていないと判断され、処理がステップS110に戻される。
未だ1フレーム分の処理が終了していないので、処理はステップS110からステップS111に移行され、直前に読み込まれたランレングスのレベルを示す2ビットのビット列「10」の次の1ビットが読み込まれ、第2のフラグが取得される。図35Aの例では、取得された第2のフラグの値が"0"であって、所定バイト単位でのランレングス処理が行われていないことが示される(図35Bの復号手順(8))。次のステップS112に従い次の1ビットが読み込まれて第1のフラグが取得され、取得された第1のフラグの値が"0"であるので、MSB側ビット単位でのランレングス処理が行われていないことが示される(図35Bの復号手順(9))。
ステップS113により、第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われていないと判断され、処理がステップS118に移行される。ステップS118では、直前に読み込まれた第1のフラグの次の所定バイトすなわち1バイトが読み込まれ、この1バイトのビット列「11010101」が出力される。
上述のような処理を、1フレーム分の画素について終了するまで、例えばファイルから読み出され入力メモリ30に格納された圧縮符号化データにおける末尾のビットが読み出されるまで繰り返す。
図36を用いて、データ統合部38で行われるMSB側ビットとLSB側ビットとの統合処理について説明する。図36Aは、LSB側出力メモリ37に格納される、ベースバンドのLSB側ビットを示す。1画素分が所定バイトすなわち1バイト(=8ビット)からなるLSB側ビットが、例えば画面の左上隅の画素を先頭に、水平ラインの左端から右端に向けた画素の配列順に対応して、ライン単位で順次並べられる。図36Bは、MSB側出力メモリ34に格納される、ベースバンドのMSB側ビットを示す。1画素分が2ビットからなるMSB側ビットが、例えばLSB側ビットと同様の順序で並べられる。
データ統合部38は、例えばベースバンドのLSB側ビットおよびMSB側ビットが1フレーム分、LSB側出力メモリ37およびMSB側出力メモリ34にそれぞれ格納されると、データのLSB側出力メモリ37およびMSB側出力メモリ34からの読み出しと、読み出されたデータの統合処理を開始する。一例として、先ず、LSB側出力メモリ37に格納されたデータを8ビット分、読み出し、次に、MSB側出力メモリ34格納されたデータを2ビット分、読み出す。読み出されたこれら8ビット分のビット列と2ビット分のデータ列とを接続することで、10ビットの量子化ビット数を持つ画素データが復号化される。
1画素分の画素データが得られたら、LSB側出力メモリ37から次の8ビット分のデータを読み出し、さらにMSB側出力メモリ34から次の2ビット分のデータを読み出す。そして、読み出されたこれら8ビットのビット列と2ビットのビット列とを接続することで、10ビットの量子化ビット数を持つ次の画素データが復号化される。データ統合部38は、このようなLSB側出力メモリ37およびMSB側出力メモリ34からのデータの読み出しおよび読み出されたデータの統合を、1フレーム分の画素について全て完了するまで、繰り返し行い、復号化された画素データを得る(図36C参照)。
なお、上述したLSB側圧縮符号化データの復号化処理と、MSB側圧縮符号化データの復号化処理とは、復号化装置2Bにおいて並列的に行うことができる。これに限らず、LSB側圧縮符号化データの復号化処理およびMSB側圧縮符号化データの復号化処理は、一方の処理が完了後に他方の処理を行うようにしてもよい。
また、上述では、データ統合部38におけるLSB側ビットとMSB側ビットとの統合処理が、LSB側圧縮符号化データの復号化処理およびMSB側圧縮符号化データの復号化処理が終了してから行われるように説明したが、これはこの例に限定されない。例えば、データ統合部38は、LSB側圧縮符号化データの復号化処理およびMSB側圧縮符号化データの復号化処理により、統合可能なベースバンドのLSB側ビットとベースバンドのMSB側ビットとが復号化されたら順次、LSB側ビットおよびMSB側ビットに対するデータ統合処理を行うようにすることもできる。
1−2−3.実施の第1の形態の第2の変形例による復号化処理について
次に、上述した実施の第1の形態の第2の変形例による、圧縮符号化されたLSB側ビットと圧縮符号化されたMSB側ビットとをそれぞれ独立的に出力する例に対応した一例の復号化処理について説明する。図37は、この実施の第1の形態の第2の変形例による復号化を行う復号化装置2Cの機能を示す一例の機能ブロック図である。なお、図37において、上述した図20の構成と共通する部分には同一の符号を付し、詳細な説明を省略する。また、符号化装置1Cで圧縮符号化された画素データの元の量子化ビット数は、予め復号化装置2Cに対して設定されるものとする。さらに、以下の記述で、所定バイトは1バイトである。
図37に示される復号化装置2Cは、MSB側圧縮符号化データおよびLSB側圧縮符号化データにそれぞれ対応する2系統の入力系統を有し、それぞれMSB側入力メモリ30AおよびLSB側入力メモリ30Bの2つの入力データ用メモリと、これらMSB側入力メモリ30AおよびLSB側入力メモリ30Bを制御するためのメモリ制御部31Aおよび31Bとを有する。
図16で例示した出力形式を参照し、MSB側の出力データ22B(MSB側圧縮符号化データ)がMSB側入力メモリ30Aに格納される。メモリ制御部31Aは、1重目復号化部32および2重目復号化部33からの、MSB側入力メモリ30Aに格納されたMSB側の出力データ22Bの読み出し要求に応じて、MSB側入力メモリ30Aから所定にデータを読み出す。読み出されたデータは、1重目復号化部32および/または2重目復号化部33に供給される。
また、LSB側の出力データ22A(LSB側圧縮符号化データ)がLSB側入力メモリ30Bに格納される。メモリ制御部31Bは、ハフマン復号化部35からの、LSB側入力メモリ30Bに格納されたLSB側の出力データ22Aの読み出し要求に応じて、LSB側入力メモリ30Bから所定にデータを読み出す。読み出されたデータは、ハフマン復号化部35に供給される。
なお、図37の構成における以降の処理、すなわち、1重目復号化部32および2重目復号化部33によるMSB側圧縮符号化データの復号化処理、ハフマン復号化部35およびDPCM復号化部36によるLSB側圧縮符号化データの復号化処理、ならびに、データ統合部38によるMSB側ビットとLSB側ビットとの統合処理は、上述した実施の第1の形態の第1の変形例の場合と同様であるので、繁雑さを避けるために、詳細な説明を省略する。
すなわち、図38のフローチャートに復号化装置2Cによる一例の復号化処理の全体の流れが示されるように、ステップS120で、符号化装置1Cで圧縮符号化される前の、ベースバンドの画像データにおける画素データの量子化ビット数が設定される。
ステップS121で、LSB側圧縮符号化データが格納されたファイルが読み込まれ、読み込まれたLSB側圧縮符号化データがLSB側入力メモリ30Bに格納される。そして、ステップS122で、ハフマン復号化部35の読み出し要求に応じてメモリ制御部31BによりLSB側入力メモリ30Bに格納されたLSB側圧縮符号化データが読み出され、読み出されたLSB側圧縮符号化データが復号化される。LSB側圧縮符号化データが復号化されたベースバンドのLSB側ビットは、LSB側出力メモリ37に格納される。
一方、ステップS123で、MSB側圧縮符号化データが格納されたファイルが読み込まれ、読み込まれたMSB側圧縮符号化データがMSB側入力メモリ30Aに格納される。そして、ステップS124で、1重目復号化部32および/または2重目復号化部33の読み出し要求に応じてメモリ制御部31AによりMSB側入力メモリ30Aに格納されたMSB側圧縮符号化データが読み出され、読み出されたMSB側圧縮符号化データが復号化される。MSB側圧縮符号化データが復号化されたベースバンドのMSB側ビットは、MSB側出力メモリ34に格納される。
ステップS122およびステップS124で、1フレーム分のLSB側圧縮符号化データおよびMSB側圧縮符号化データに対する復号化処理が終了すると、処理はステップS125に移行される。ステップS125では、データ統合部38において、ステップS122で復号化されたベースバンドのLSB側ビットと、ステップS124で復号化されたベースバンドのMSB側ビットとが統合され、1フレーム分の画素データが復号化される。
なお、この図38のフローチャートにおけるステップS122のLSB側圧縮符号化データの復号化処理の詳細は、上述の実施の第1の形態の第1の変形例による、図33および図34のフローチャートにそれぞれ示した処理をそのまま適用できるので、ここでは、繁雑さを避けるために説明を省略する。また、データ統合部38によるデータ統合処理も、上述の実施の第1の形態の第1の変形例による、図36を用いて説明した処理がそのまま適用できるので、ここでは、繁雑さを避けるために説明を省略する。
1−2−3.実施の第1の形態の第3の変形例による復号化処理について
次に、上述した実施の第1の形態の第3の変形例による、所定バイトを2バイトとし、MSB側ビットのランレングス処理を2バイトを単位として行った圧縮符号化データに対する復号化処理について説明する。なお、この実施の第1の形態の第3の変形例では、上述した実施の第1の形態の符号化装置1Aに対応する復号化装置2A(図20参照)をそのまま適用できると共に、図21〜図24のフローチャートを用いて説明した復号化処理も、基本的に、そのまま適用できる。そのため、これらの詳細な説明については、繁雑さを避けるために省略する。
また、LSB側圧縮符号化データに対する復号化処理は、実施の第1の形態による復号化処理で説明した、1バイトのビット列についてLSB側ビットが圧縮符号化されたLSB側圧縮符号化データに対する復号化処理を同一であるので、説明を省略する。
図39は、この実施の第1の形態の第3の変形例による復号化処理における一例の復号化手順を示す。この図39と、上述した図21〜図24とを用いて、この実施の第1の形態の第3の変形例による復号化処理について説明する。なお、ここでは、圧縮符号化データの出力形式が、実施の第1の形態において図12を用いて説明した、MSB側圧縮符号化データとLSB側圧縮符号化データとがインターリーブされた形式とする。また、以下において、所定バイトは2バイトである。
MSB側圧縮符号化データが図39Aに一例が示されるビット列「11000001」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図39に示すビット列は、MSB側ビット単位でのランレングス処理と、所定バイトすなわち2バイト単位でのランレングス処理とが共に行われる例である。
先ず、図22のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第2のフラグが取得される。図39Aの例では、第2のフラグの値が"1"であって、所定バイト単位すなわち2バイト単位でのランレングス処理が行われていることが示される(図39Bの復号手順(1))。そして、ステップS81に従い次の1ビットが読み込まれて第1のフラグが取得される。この図39Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図39Bの復号手順(2))。
図22のステップS82の判断では、第1のフラグの値が"1"なのでMSB側ビット単位でのランレングス処理が行われたと判断され、図22のステップS83に従い、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれたランレングスのレベルのビット列が所定バイトの長さになるまで繰り返される。図39Aの例では、ランレングスのレベルを示すビット列が「00」となっているので、このビット列「00」が8回繰り返され、ビット列「0000000000000000」が出力される(図39Bの復号手順(3))。
さらに、図22のステップS84の判断では、第2のフラグの値が"1"なので所定バイト単位のランレングス処理が行われたと判断され、図22のステップS85に従い、ランレングスのレベルを示す2ビットのビット列の次に配置される、ランレングスのラン数を示す4ビットのビット列が読み込まれる。図39Aの例では、ラン数を示すビット列が「0001」となっているので、ラン数が「1」であるとされ、直前に出力されたビット列「0000000000000000」が1回繰り返されて出力される(図39Bの復号手順(4))。
この復号手順(1)〜復号手順(4)までで、上述した図18に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので(図22のステップS87)、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
デコード済みサンプル数は、上述した式(1)に基づき、
デコード済みサンプル数=MSB側ビットの繰り返し数(MSB側ビット単位でのデコード済みのサンプル数)N×(所定バイト数単位のランレングス処理のラン数+1)=8×(1+1)=16
このように求められる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が行われる。この統合処理は、図21のフローチャートで説明したように、1画素分のLSB側ビットが復号化される毎に行われる。
MSB側圧縮符号化データが図40Aに一例が示されるビット列「001010101011010101」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図40Aに示されるビット列は、MSB側ビット単位でのランレングス処理と所定バイト単位でのランレングス処理とが行われない例である。
図22のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第2のフラグが取得され、この第2のフラグの値"0"に基づき、所定バイト単位でのランレングス処理が行われていないことが示される(図40Bの復号手順(1))。次の1ビットがステップS81に従い読み込まれて第1のフラグが取得され、この第1のフラグの値"0"に基づき、MSB側ビット単位でのランレングス処理が行われていないことが示される。
第1のフラグの値"0"に基づき、ステップS82でMSB側ビット単位でのランレングス処理が行われていないと判断され、処理がステップS88に移行され、第2および第1のフラグの次に配置される所定バイト分のビット列「1010101011010101」が出力される(図40Bの復号手順(3))。
この復号手順(1)〜復号手順(3)までで、上述した図18に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。この例では、所定バイト単位でのランレングス処理が行われていないので、上述した図23のフローチャートのステップS132の判断に従い、MSB側ビットの繰り返し数「8」がデコード済みのサンプル数Nとされる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が行われる。この統合処理は、図21のフローチャートで説明したように、1画素分のLSB側ビットが復号化される毎に行われる。
なお、この実施の第1の形態の第3の変形例による復号化処理は、図12を用いて説明した、実施の第1の形態によるMSB側圧縮符号化データとLSB側圧縮符号化データとをインターリーブした出力形式に適用できるのに限らず、図14を用いて説明した、実施の第1の形態の第1の変形例による1の出力系統に対してLSB側ビットとMSB側ビットに分離して出力する出力形式に適用することが可能である。この場合、復号化処理は図31に示した復号化装置2Bが用いられ、図32〜図34のフローチャートに準じた復号化処理がなされる。
同様に、この実施の第1の形態の第3の変形例による復号化処理は、図16を用いて説明した、実施の第1の形態の第2の変形例によるLSB側圧縮符号化データとMSB側圧縮符号化データとをそれぞれ独立的に出力する出力形式にも適用することが可能である。この場合、復号化処理は図37に示した復号化装置2Cが用いられ、図38、ならびに、図33および図34のフローチャートに準じた復号化処理がなされる。
また、圧縮符号化が3バイト若しくはそれ以上のデータ長を単位としてなされる場合についても、この実施の第1の形態の第3の変形例による復号化処理を同様に適用することができる。
2.この発明の実施の第2の形態について
次に、この発明の実施の第2の形態について説明する。この実施の第2の形態では、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加するようにした例である。復号化処理において第2のフラグに基づく判断が必要ない場合に、当該第2のフラグを付加しないようにできるため、より高い圧縮率を達成することができる。
なお、この実施の第2の形態、ならびに、後述する実施の第2の形態の第1の変形例、第2の変形例および第3の変形例における符号化装置および復号化装置は、それぞれ上述した実施の第1の形態による符号化装置1A、1Bおよび1C、ならびに、復号化装置2A、2Bおよび2Cをそれぞれそのまま適用することができるため、これらについては、詳細な説明を省略する。
すなわち、この実施の第2の形態は、上述した実施の第1の形態に対応し、符号化処理は、図1で説明した符号化装置1Aで行うことができ、圧縮符号化された出力データは、MSB側ビットが圧縮符号化されたMSB側圧縮符号化データと、LSB側ビットが圧縮符号化されたLSB側圧縮符号化データとがインターリーブされた構造とされる。
2−1.実施の第2の形態による符号化処理について
2−1−1−2.データ構造について
図41は、この実施の第2の形態によるMSB側の出力データの一例の構造を示す。この実施の第2の形態によるMSB側の出力データは、図41に例示されるように、データ先頭の1ビットのデータ長を持つ固定長の部分と、この固定長の部分に続く可変長の部分とからなる。固定長の部分には、第1のフラグが配置される。
一方、可変長の部分には、先頭側から、MSB側ビット単位のランレングス処理によるランレングスのレベルが格納される第1の領域と、第2のフラグと、1バイト単位のランレングス処理によるラン数が格納される第2の領域とが配置される。
第1の領域は、第1のフラグの値に応じて格納されるデータが決められ、データ長が割り当てられる。すなわち、第1のフラグの値が"1"であれば、第1の領域には、データ長がMSB側ビットのビット数に応じて割り当てられ、ランレングスのレベルが格納される。一方、第1のフラグの値が"0"であれば、第1の領域には、MSB側ビット単位でのランレングス処理および所定バイト単位のランレングス処理が行われない場合の、圧縮符号化がなされていない1バイト分のビット列が配置される。
第1の領域に続けて第2のフラグが配置される。この実施の第2の形態では、第2のフラグが割り当てられるか否かは、第1のフラグの値に応じて決められる。すなわち、第1のフラグの値が"0"であって、MSB側ビット単位でのランレングス処理が行われていないことを示していれば、第2のフラグが出力されない。一方、第1のフラグの値が"1"であれば、第2のフラグに1ビットが割り当てられる。
第2の領域は、2重目ランレングス処理部18の処理結果に基づくバイト単位のラン数が配置される領域で、第2のフラグの値に応じて第2の領域を割り当てるか否かが決められる。すなわち、第2のフラグの値が"1"であれば、第2の領域に対して所定ビット数が割り当てられ、2重目ランレングス処理部18によるランレングス処理結果である繰り返し回数が格納される。一方、第2のフラグの値が"0"であれば、第2の領域が割り当てられない。
2−1−1−3.符号化処理について
次に、この実施の第2の形態による圧縮符号化処理について説明する。この実施の第2の形態による圧縮符号化処理は、基本的には、図6〜図10のフローチャートを用いて説明した、上述の実施の第1の形態による圧縮符号化処理と同様である。以下、これら図6〜図10のフローチャートを適宜、参照しながら説明する。
すなわち、全体的には、図6で説明したように、画素データをLSB側の8ビットと、当該LSB側の8ビットを除くMSB側のビットとに分離し(ステップS1)、分離されたLSB側ビットに対する圧縮符号化(ステップS2)と、MSB側ビットに対する圧縮符号化(ステップS3)とをそれぞれ行い、圧縮符号化されたLSB側ビットの圧縮符号化データとるMSB側ビットの圧縮符号化データとがインターリーブされて出力される(ステップS4)。
また、上述のステップS2におけるLSB側ビットに対する圧縮符号化は、DPCM部13によりLSB側データ用メモリ12に格納されたLSB側ビットに対して1バイト毎DPCM処理を行って差分データを出力し(ステップS10)、この差分データに対して、ステップS11でハフマン符号化部14によりハフマン符号化による圧縮符号化処理を施して出力する。
ステップS3におけるMSB側ビットに対する圧縮符号化処理が、上述の実施の第1の形態とこの実施の第2の形態とで異なる。図42は、この実施の第2の形態による、MSB側ビットに対する一例の圧縮符号化処理を示すフローチャートである。この図42に示す処理において、ステップS31でMSB側ビット単位でのランレングス処理が行えないと判断された後に、第2のフラグの値を"0"に設定するステップS371が設けられている点が、上述した実施の第1の形態における図9の処理と異なる点である。
すなわち、ステップS30において所定数のMSB側ビットからなる所定バイト分のビット列をMSB側ビット単位で比較し、比較結果に基づきステップS31で、当該所定バイト分のビット列がMSB側ビット単位でランレングス処理可能であるか否かが判断される。処理可能であると判断されれば、処理はステップS32に移行される。ステップS32以降の処理は、上述の実施の第1の形態における図9のステップS32以降の処理と同一であるので、説明を省略する。
一方、ステップS31で、所定バイト分のビット列がMSB側ビット単位でランレングス処理できないと判断されると、処理はステップS36に移行される。ステップS36では、第1のフラグの値が"0"に設定され、次のステップS37で、現在読み込まれている所定バイト分のビット列がそのまま出力される。出力されたビット列は、例えば図示されないメモリやレジスタに記憶される。
そして、次のステップS371で、第2のフラグの値が"0"に設定される。ここで第2のフラグの値を"0"に設定することで、所定バイト単位でのランレングス処理が行われていないことが示されると共に、出力データにおいて、第2のフラグおよび第2の領域が出力されない。第2のフラグが出力されないため、上述の実施の第1の形態に対して圧縮率の点で有利となる。
ステップS371で第2のフラグの値が"0"に設定されると、次のステップS38で第3のフラグの値が"1"に設定され、さらに、次のステップS39で次の処理をMSB側ビット単位のランレングス処理とするように設定される。
2−1−1−4.符号化処理の具体的な例
この実施の第2の形態によるMSB側ビットの符号化処理について、図43を参照しながら具体的な例を用いて説明する。ここでは、画素データの量子化ビット数が10ビットであって1画素が10ビットのデータ長を持ちMSB側ビットのデータ長が2ビットであるものとして説明する。
図43Aは、図6のステップS1により分離されたMSB側ビットの例を示す。2ビットからなるMSB側ビットが画素毎に分離され、表示順に並べられてMSB側データ用メモリ16に格納される。ビット列の構成は、上述した図11Aに示す構成と同一である。以下、上述の実施の第1の形態で図6〜図8、図10、ならびに、図11を用いて説明した部分と共通する部分は、適宜、省略しながら説明を行う。
最初は、図8のステップS21から処理がステップS22に移行し、所定バイト分(この例では1バイト分)のビット列(a)がMSB側データ用メモリ16から読み込まれる。次のステップS23で、例えばMSB側ビット単位でのランレングス処理を行うようにされ、ステップS24(図42のステップS30)に処理が移行される。読み込まれた所定バイト分のビット列(a)について、MSB側ビット単位で比較がなされ、ビット列(a)の例ではランレングス処理が可能と判断され(ステップS31)、ステップS32で第1のフラグが"1"に設定される。
そして、次のステップS33でビット列(a)に対してMSB側ビット単位でランレングス処理がなされ、ランレングスのレベルを示すビット列「00」が出力されると共に、第1のフラグが出力される。そして、所定バイト単位でのランレングス処理におけるラン数が「0」に設定されると共に、第3のフラグの値が"1"に設定され(ステップS34)、次の処理が所定バイト単位のランレングス処理に決められ(ステップS35)、処理が図8のステップS20に戻される。
図8のステップS20からステップS21に処理が移行され、第3のフラグの値に基づき処理はステップS22に移行され、MSB側データ用メモリ16から、ビット列(a)に隣接する次の所定バイト分のビット列(b)「00000000」が読み込まれる。次の処理が所定バイト単位のランレングス処理に決められているため、ステップS23からステップS25(図10のステップS40)に処理が移行される。
図10のステップS40の、前回読み込まれたビット列(a)と、今回読み込まれたビット列(b)との比較結果に基づきランレングス処理が可能と判断され(ステップS41)、ステップS42で、所定バイト単位のランレングス処理が行われ、ラン数がインクリメントされる。所定バイト分のビット列の比較が、ビット列同士が一致しなくなるまで繰り返され、ラン数のインクリメントが行われる。この図43Aの例では、ビット列(d)までが一致しており、ビット列(d)とビット列(e)との比較で処理が終了され、ラン数が「3」とされる。
ランレングス処理が終了されると、次のステップS43で第3のフラグの値が"1"に設定され、さらに次のステップS35で、次の処理を所定バイト単位のランレングス処理に決められ、処理は図8のステップS20に戻される。
ステップS20からステップS21に処理が移行され、第3のフラグの値に基づき処理がステップS22に移行され、MSB側データ用メモリ16から次の所定バイト分のビット列(e)「10101010」が読み込まれ、次の処理が所定バイト単位のランレングス処理に決められているため、処理がステップS23からステップS25(図10のステップS40)に移行される。
図10のステップS40で、前回読み込まれたビット列(d)と、今回読み込まれたビット列(e)とが比較され、比較結果に基づきランレングス処理が可能ではないと判断され(ステップS41)、処理がステップS45に移行され、ラン数が「0」か否かが判断される。上述のステップS42でラン数が「3」となっているので、処理がステップS47に移行されて第2のフラグの値が"1"に設定され、次のステップS48で、ランレングス処理の結果が出力される。ここで出力されるランレングス処理の結果は、ラン数「3(4ビットのバイナリ表記で「0011」)」と、第2のフラグの値"1"である。すなわち、このステップS48で、図43Dに示す出力データ102A’(第2のフラグ)および出力データ103’(ラン数)が確定される。
上述のステップS32とこのステップS48により、図43Bに示されるビット列(a)〜ビット列(d)までの符号化が終了される。圧縮符号化されたデータは、図43Dに一例が示されるように、第1のフラグによる出力データ102A’、ランレングスのレベルによる出力データ100A’、第2のフラグによる出力データ101A’および1バイト単位でのランレングス処理のラン数による出力データ103’の順に出力される。この例では、全て値が"0"である32ビットのビット列が8ビットのビット列「10010011」に圧縮符号化されている。
次のステップS49で第3のフラグの値が"0"に設定され、さらに次のステップS50で、次の処理がMSB側ビット単位のランレングス処理に決められ、処理はステップS20に戻される。
ステップS20からステップS21に処理が移行され、上述のステップS49で第3のフラグの値が"0"に設定されているので、新たなデータを読み込むことなく処理はステップS23に移行される。上述のステップS50で次の処理がMSB側ビット単位のランレングス処理に決められているので、処理はステップS23からステップS24(図42のステップS30)に移行される。
図42のステップS30では、現在読み込まれている所定バイト分のビット列(e)「10101010」に対してMSB側ビット単位で比較がなされ、比較結果に基づきランレングス処理が可能と判断され(ステップS31)、ステップS32で第1のフラグの値が"1"に設定される。そして、次のステップS33でビット列(e)に対してMSB側ビット単位でランレングス処理がなされ、繰り返されたMSB側ビットのビット列「10」がランレングスのレベルとして出力されると共に、第1のフラグが出力される。このステップS32およびステップS33で、図43Dに示す出力データ100B’(第1のフラグ)および出力データ101B’(ランレングスのレベル)が確定される。
次に、所定バイト単位でのランレングス処理におけるラン数が「0」に設定されると共に、第3のフラグの値が"1"に設定され(ステップS34)、さらに、次の処理が所定バイト単位のランレングス処理に決められ(ステップS35)、処理が図8のステップS20に戻される。
ステップS20からステップS21に処理が移行され、第3のフラグの値に基づき処理がさらにステップS22に移行され、MSB側データ用メモリ16から、ビット列(e)に隣接する次の所定バイト分のビット列(f)「11010101」が読み込まれる。次のステップS23では、上述したように図42のステップS35で次の処理が所定バイト単位のランレングス処理に決められているため、処理がステップS25(図10のステップS40)に移行される。
図10のステップS40で、前回読み込まれたビット列(e)と、今回読み込まれたビット列(f)とが比較され、比較結果に基づきランレングス処理が可能ではないと判断され(ステップS41)、処理がステップS45に移行され、ラン数が「0」であるか否かが判断される。ラン数は「0」となっているので、処理がステップS46に移行され第2のフラグの値が"0"に設定され、次のステップS48でランレングス処理の結果が出力される。ここで出力されるランレングス処理の結果は、ラン数「0」と、第2のフラグの値"0"である。
図41を用いて説明したように、第2のフラグの値が"0"の場合には、ラン数が出力されないため、このステップS48で、図43Dに示す出力データ102B(第2のフラグ)が確定される。また、ラン数が出力されないため、図41に示す第2の領域が割り当てられないことが確定される。
このステップS48の時点で、ビット列(e)の符号化処理が終了したことになる。圧縮符号化されたデータは、図43Dに一例が示されるように、第1のフラグによる出力データ102B’、ランレングスのレベルによる出力データ100B’、第2のフラグによる出力データ101B’の順に出力される。8ビットのビット列「10101010」が4ビットのビット列「1100」に圧縮符号化されている。
次のステップS49で、第3のフラグの値が"0"に設定され、さらに次のステップS50で、次の処理がMSB側ビット単位のランレングス処理に決められ、処理が図8のステップS20に戻される。
ステップS20からステップS21に処理が移行され、第3のフラグの値に基づき処理がステップS23に移行され、上述のステップS50で次の処理がMSB側ビット単位のランレングス処理に決められているので、処理はステップS24(図42のステップS30)に移行される。
図42のステップS30では、現在読み込まれている1バイト分のビット列(f)「11010101」が読み込まれているので、このビット列(f)において、図43Cに示すMSB側ビットC「11」に対して比較がなされる。比較結果に基づきランレングス処理が可能ではないと判断され(ステップS31)、ステップS36で第1のフラグの値が"0"に設定され、ステップS37で、ビット列(f)がそのまま出力される。さらに、ステップS371で第2のフラグの値が"0"に設定される。
このステップS36、ステップS37およびステップS371で、図43Dに示す出力データ100C(第1のフラグ)および出力データ104(ビット列(f))とが確定される。また、ステップS36で第1のフラグの値が"0"に設定されているため、図41のデータ構造の説明に従い、第2のフラグが出力されない。
この時点で、上述した図41に示すMSB側のデータ構造を単位とする処理が完結し、ビット列(f)の符号化処理が終了したことになる。この場合は、MSB側ビット単位および所定バイト単位のランレングス処理が共に行われず、MSB側ビットの圧縮符号化がなされていないため、8ビットのビット列「11010101」に対して第1のフラグが付加され、9ビットのビット列「011010101」となっている。MSB側ビット単位および所定バイト単位のランレングス処理が共に行われない場合のデータ長が上述した実施の第1の形態の場合に比べて、1ビット分、短縮される。
次のステップS38で第3のフラグの値が"1"に設定され、次のステップS39で、次の処理がMSB側ビット単位のランレングス処理に決められる。これは、1バイト分のビット列に対してMSB側ビット単位でのランレングス処理ができない場合には、所定バイト単位でのランレングス処理ができる可能性が低いと考えられるからである。
処理は図8のステップS20に戻され、1フレーム分の処理が未だ終了していないので処理がステップS21に移行される。以下、処理が同様にして繰り返される。
2−1−1−5.出力形式について
図44は、上述した、この実施の第2の形態によるLSB側ビットおよびMSB側ビットに対する圧縮符号化処理により得られた出力データの、一例の出力形式を示す。なお、この図44の例は、上述した図43Dに示したデータ出力に対応している。上述したように、この発明の実施の第2の形態では、圧縮符号化されたLSB側ビットとMSB側ビットとを、インターリーブして出力する。インターリーブの単位は、所定バイト単位のMSB側ビットが復号可能なデータ構造に基づき決めることができる。なお、実施の第2の形態による復号化処理については、後述する。
例えば、MSB側ビットの上述した図41の構造を単位として、MSB側ビットの圧縮符号化データと、LSB側ビットの圧縮符号化データとが交互に配置される。MSB側ビットの圧縮符号化データに含まれるMSB側ビットに対応するLSB側ビットの圧縮符号化データが、MSB側ビットの圧縮符号化データに続けて配置される。
MSB側圧縮符号化データにおいては、第1のフラグの値が"1"であれば、少なくとも第1のフラグ、MSB側ビット単位のランレングス処理のレベルおよび第2のフラグが順に出力され、第2のフラグの値が"1"であれば、さらに所定バイト単位のランレングス処理のラン数が出力される。図44のMSB側圧縮符号化データ110’は、第1および第2のフラグの値がそれぞれ"1"であり、MSB側ビット単位のランレングス処理のレベルと、所定バイト単位のランレングス処理のラン数とが出力されている例である。また、MSB側圧縮符号化データ112’は、第1のフラグの値が"1"、第2のフラグの値が"0"であって、所定バイト単位のランレングス処理のラン数が出力されていない例である。
一方、MSB側圧縮符号化データ114’は、第1のフラグの値が"0"であり、第1のフラグと、圧縮符号化されていないMSB側ビットの所定バイト分のビット列とが出力されている例である。
2−1−2.実施の第2の形態の第1の変形例について(第1の異なる出力形式)
次に、この発明の実施の第2の形態の第1の変形例について説明する。この実施の第2の形態の第1の変形例は、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、出力データを、1の出力系統に対してLSB側圧縮符号化データとMSB側圧縮符号化データとに分離して出力するようにした例である。
なお、この実施の第2の形態の第1の変形例において、符号化処理は、上述した実施の第1の形態の第1の変形例による符号化装置1Bにより行うことができると共に、符号化装置1Bにより行われる圧縮符号化処理は、上述した実施の第2の形態による処理と同一の処理で行われるため、符号化装置および符号化処理についての詳細な説明は、繁雑さを避けるために省略する。また、以下において、所定バイトは1バイトである。
すなわち、この実施の第2の形態の第1の変形例では、符号化装置1Bは、LSB側ビットの圧縮符号化処理は、上述した実施の第1の形態の第1の変形例と同様に、DPCM符号化部13により直前に処理したLSB側ビットと現在のLSB側ビットとの差分をとり、この差分データに対してハフマン符号化部14でハフマンテーブルを用いて可変長の圧縮符号化を行い、圧縮長計算部20でハフマン符号化部14による符号化の際の符号長を求める。
また、MSB側ビットの圧縮符号化は、1重目ランレングス処理部17と2重目ランレングス処理部18とにより、実施の第2の形態で図6〜図8、図10および図42を用いて説明したようにして、MSB側ビット単位のランレングス処理および所定バイト単位でのランレングス処理を行い、第1および第2のフラグをそれぞれ設定する。
図45は、この実施の第2の形態の第1の変形例による、MSB側ビットおよびLSB側ビットが圧縮符号化されて出力される際の、一例の出力形式を示す。圧縮符号データ長情報、LSB側圧縮符号化データおよびMSB側圧縮符号化データの配置は、図14を用いて説明した実施の第1の形態の第1の変形例の場合の配置と同様である。すなわち、先頭に圧縮符号データ長情報が配置され、圧縮符号データ長情報の後ろから圧縮符号データ長情報で示される位置までLSB側圧縮符号化データが配置され、当該圧縮符号化データ情報で示される位置から後ろにMSB側圧縮符号化データが配置される。LSB側圧縮符号化データおよびMSB側圧縮符号化データは、それぞれ符号化の区切りに応じた画素分のデータが全て配置される。
MSB側圧縮符号化データは、図44を用いて説明した実施の第2の形態による出力形式と同様に、第1のフラグの値が"1"であれば、少なくとも第1のフラグ、MSB側ビット単位のランレングス処理のレベルおよび第2のフラグが順に出力され、第2のフラグの値が"1"であれば、さらに所定バイト単位のランレングス処理のラン数が出力される。また、第1のフラグの値が"0"であれば、第1のフラグと、圧縮符号化されていないMSB側ビットの所定バイト分のビット列とが出力される。このようなデータ構造が連続的に出力される。
なお、この実施の第2の形態の第1の変形例においても、MSB側圧縮符号化データを前側に配置し、LSB側圧縮符号化データを後側に配置することもできる。
2−1−3.実施の第2の形態の第2の変形例について(第2の異なる出力形式)
次に、この発明の実施の第2の形態の第2の変形例について説明する。この実施の第2の形態の第1の変形例は、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、出力データを、LSB側圧縮符号化データとMSB側圧縮符号化データとをそれぞれ独立的に出力するようにした例である。
なお、この実施の第2の形態の第1の変形例において、符号化処理は、上述した実施の第1の形態の第2の変形例による符号化装置1Cにより行うことができると共に、符号化装置1Cにより行われる圧縮符号化処理は、上述した実施の第2の形態の第1の変形例による処理と同一の処理で行われるため、符号化装置および符号化処理についての詳細な説明は、繁雑さを避けるために省略する。また、以下において、所定バイトは1バイトである。
すなわち、この実施の第2の形態の第2の変形例では、LSB側ビットの圧縮符号化出力およびMSB側ビットの圧縮符号化出力は、出力データ用メモリ15Aおよび15Bからそれぞれ独立的に読み出され、図46に一例が示されるように、出力データ22Aおよび出力データ22B’の2系統のデータとして出力される。
MSB側圧縮符号化データが出力される出力データ22B’は、上述の実施の第2の形態の第1の変形例と同様に、第1のフラグの値が"1"であれば、少なくとも第1のフラグ、MSB側ビット単位のランレングス処理のレベルおよび第2のフラグが順に出力され、第2のフラグの値が"1"であれば、さらに所定バイト単位のランレングス処理のラン数が出力される。また、第1のフラグの値が"0"であれば、第1のフラグと、圧縮符号化されていないMSB側ビットの所定バイト分のビット列とが出力される。このようなデータ構造が連続的に出力される。
出力データ22Aおよび出力データ22B’は、例えばそれぞれ異なるファイルに格納される。
2−1−4.実施の第2の形態の第3の変形例について(異なる符号化単位)
次に、この発明の実施の第2の形態の第3の変形例について説明する。この実施の第2の形態の第3の変形例は、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、所定バイトを2バイトとし、MSB側ビット単位のランレングス処理を2バイトを単位として行う例である。
なお、この実施の第2の形態の第3の変形例では、実施の第2の形態と同様に、上述した実施の第1の形態による符号化装置1A(図1参照)をそのまま適用できると共に、実施の第2の形態による図6〜図8、図10、ならびに、図42のフローチャートを用いて説明した符号化処理が、基本的に、そのまま適用できる。そのため、これらの詳細な説明については、繁雑さを避けるために省略する。また、LSB側ビットに対する圧縮符号化処理は、実施の第1の形態で説明した、1バイトのビット列についてLSB側ビットのランレングス処理を行う場合と同一であるので、説明を省略する。
また、データ分離部11および1重目ランレングス処理部17における概略的な処理は、図17を用いて説明した実施の第1の形態の第3の変形例による処理と同様なので、詳細な説明を省略する。すなわち、データ分離部11では、画素データ毎に、LSB側の8ビットと当該LSB側の8ビットを除いたMSB側のビットとを分離する。そして、1重目ランレングス処理部17では、MSB側ビットの所定バイトすなわち2バイト分からなるビット列に対して、MSB側ビットのビット数単位でビット列を比較してランレングス処理を行う。
図47は、この実施の第2の形態の第3の変形例によるMSB側の出力データの一例の構造を示す。図47に示されるように、実施の第2の形態の第3の変形例に適用可能なデータ構造は、基本的には、図41に示した実施の第2の形態に適用可能なデータ構造と同様である。すなわち、出力データは、データ先頭の1ビットのデータ長を持つ固定長の部分と、この固定長の部分に続く可変長の部分とからなる。固定長の部分には、第1のフラグが配置される。
また、可変長の部分には、先頭側から、MSB側ビット単位のランレングス処理によるランレングスのレベルが格納される第1の領域と、所定バイトすなわち2バイト単位でのランレングス処理を行ったか否かを示す第2のフラグと、所定バイト単位のランレングス処理によるラン数が格納される第2の領域とが配置される。若しくは、可変長の部分には、MSB側ビット単位でのランレングス処理および所定バイト単位のランレングス処理が行われない場合の、圧縮符号化がなされていない所定バイト分のビット列が配置される。
第1の領域は、第1のフラグの値が"1"であれば、MSB側ビットのビット数に応じたデータ長が割り当てられ、ランレングスのレベルが格納される。一方、第1のフラグの値が"0"であれば、第1の領域には、所定バイトのデータ長が割り当てられ、所定数のMSB側ビットからなるビット列が格納される。
第1の領域の次に、上述の実施の第2の形態と同様に、第1のフラグの値に応じて第2のフラグが配置される。すなわち、第1のフラグの値が"1"であれば、第1の領域に続けて1ビットが割り当てられ第2のフラグが配置される。一方、第1のフラグの値が"0"であれば、第2のフラグは出力されない。また、第2のフラグの次に、第2のフラグの値に応じて第2の領域が割り当てられる。すなわち、第2のフラグの値が"1"であれば、第2の領域に対して所定ビット数が割り当てられ、2重目ランレングス処理部18によるランレングス処理のラン数が格納される。一方、第2のフラグの値が"0"であれば、第2の領域が割り当てられない。
図48は、この実施の第2の形態の第3の変形例による、MSB側ビットの一例の圧縮符号化処理を概略的に示す。ここでは、画素データの量子化ビット数が10ビットであって1画素が10ビットのデータ長を持つものとする。図48Aに一例が示されるように、データ分離部11において、2ビットからなるMSB側ビットが画素毎に分離され、表示順に並べられてMSB側データ用メモリ16に格納される。このMSB側ビットの8画素分からなる所定バイトすなわち2バイトのビット列を単位として、ランレングス処理が行われる。
例えば、図48Bに例示される所定バイトのビット列(A)「0000000000000000」は、先頭のMSB側ビットのビット列「00」が8回繰り返されてなると共に、隣接する所定バイトのビット列(B)「0000000000000000」と一致する。このビット列(A)に対し、先頭のMSB側ビットのビット列「00」について、MSB側ビット単位でランレングス処理が行われ、第1のフラグの値が"1"に設定される。また、ビット列(A)に隣接する所定バイトのビット列(B)が当該ビット列(A)と比較されて、所定バイト単位でランレングス処理が行われ(図48C参照)、第2のフラグの値が"1"に設定される。
第1のフラグの値が"1"なので、第1の領域に2ビットが割り当てられランレングスのレベルが格納されると共に、第2のフラグの1ビットが第1の領域の後ろに割り当てられる。第2のフラグの値が"1"なので、第2の領域に対して4ビットが割り当てられ、所定バイト単位でのランレングス処理のラン数が格納される(図48D参照)。
また、図48Bに例示される所定バイトのビット列(C)「1010101011010101」については、先頭のMSB側ビットのビット列「10」の繰り返しとなっていないので、MSB側ビット単位のランレングス処理が行われず、第1のフラグの値が"0"に設定される。それに伴い、隣接する所定バイトのビット列との所定バイト単位の比較もなされず(図42のフローチャートのステップS30、ステップS31、ステップS36〜ステップS39など参照)、第2のフラグの値が"0"に設定される(図42のステップS371参照)。第1のフラグの値が"0"なので、第1の領域に所定バイトが割り当てられ、ビット列(C)がこの第1の領域にそのまま格納される。また、第2のフラグの値が"0"なので、第2の領域が出力されず、さらに、第1のフラグの値が"0"なので、第2のフラグも出力されない(図48D参照)。
なお、この実施の第2の形態の第3の変形例にも、図44を用いて説明した、実施の第2の形態による、MSB側圧縮符号化データとLSB側圧縮符号化データとをインターリーブした出力形態や、図45を用いて説明した、実施の第2の形態の第1の変形例による、1の出力系統に対してLSB側ビットとMSB側ビットに分離して出力する出力形態、さらに、図46を用いて説明した、実施の第2の形態の第2の変形例による、LSB側圧縮符号化データとMSB側圧縮符号化データとをそれぞれ独立的に出力する出力形態の何れをも適用することが可能である。
また、この実施の第2の形態の第3の変形例では、MSB側ビットのランレングス処理を2バイトのビット列について行っているが、これはこの例に限らず、MSB側ビットのランレングス処理を3バイト若しくはそれ以上のデータ長のビット列について行ってもよい。
2−2.実施の第2の形態による復号化処理について
次に、上述した実施の第2の形態による、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、LSB側圧縮符号化データとMSB側圧縮符号化データとがインターリーブされて出力する例に対応した一例の復号化処理について説明する。
なお、この実施の第2の形態では、上述した実施の第1の形態による復号化処理を行う復号化装置2Aをそのまま適用することができるため、復号化装置の詳細な説明を省略する。
2−2−1−2.復号化処理について
この実施の第2の形態による復号化処理は、全体的な流れ、LSB側圧縮符号化データの復号化処理およびデコード済みサンプル数の算出処理については、図21、図23および図24を用いて説明した、上述の実施の第1の形態による復号化処理と同様である。この実施の第2の形態による復号化処理では、第2のフラグの位置が変更されたのに伴い、MSB側圧縮符号化データの復号化処理が変更されている。以下、図21、図23および図24のフローチャートを適宜、参照しながら説明する。
すなわち、全体的には、図21で説明したように、ステップS60で圧縮符号化前のベースバンドの画素データのビット数が設定され、次のステップS61で、この実施の第2の形態による、図6〜図8および図10、ならびに、図42に示した符号化処理で圧縮符号化された圧縮符号化データが、例えばファイルを介して読み込まれる。ステップS62で、後述する図49に一例が示されるフローチャートに従いMSB側圧縮符号化データの復号化処理が行われ、ステップS63を介して処理がステップS64に移行される。
ステップS64で、図24に一例が示される処理によりLSB側圧縮符号化データの復号化が行われ、ステップS65で、復号化されたMSB側ビットとLSB側ビットとが統合される。ステップS63で、LSB側圧縮符号化データに関して、図23に一例が示される処理により求められるデコード済みのサンプル数分を全て処理していると判断されれば、ステップS66で1フレーム分の処理が終了したか否かが判断され、終了していなければ、ステップS62からの処理が繰り返される。
図49は、この実施の第2の形態によるMSB側ビットに対する一例の復号化処理を示すフローチャートである。この図49に示すフローチャートは、図22を用いて説明した、上述の実施の第1の形態による復号化処理に対して、第2のフラグを取得するステップの位置が異ならされ、第1のフラグの値に基づく判断の後に、第2のフラグが取得されるようになっている。
すなわち、図49のフローチャートにおいて、図41を用いて説明したMSB側の出力データのデータ構造を参照し、最初のステップS80で先頭の1ビットが読み込まれて1重目復号化部32に第1のフラグが取得される。次のステップS82で、取得された第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われているか否かが判断される。若し、第1のフラグの値が"1"であり、MSB側ビット単位でのランレングス処理が行われていると判断されれば、処理はステップS83に移行され、1重目復号化部32により第1のフラグの次の2ビット、すなわちランレングスのレベルが読み込まれる。そして、所定バイト数(この例では1バイト)になるまで、読み込まれた2ビットの値が繰り返し出力される。
一方、ステップS82で、若し第1のフラグの値が"0"であり、MSB側ビット単位でのランレングス処理が行われていないと判断されれば、処理はステップS88に移行され、第1のフラグに続く所定バイトすなわち1バイトが読み込まれ、出力される。そして、処理はステップS89に移行され、デコード済みサンプル数が取得される。
ステップS83でのランレングスのレベルによる出力が終了したら、処理は次のステップS831に移行される。このステップS831では、ランレングスのレベルの次の1ビットが読み込まれ、2重目復号化部33に第2のフラグが取得される。そして、次のステップS84で、取得された第2のフラグの値に基づき所定バイト単位でのランレングス処理が行われているか否かが判断される。
若し、第2のフラグの値が"1"であり、所定バイト単位でのランレングス処理が行われていると判断されれば、処理はステップS85に移行され、第2のフラグの次の4ビットが読み込まれ、所定バイト単位でのランレングス処理によるラン数が取得される。そして、次のステップS86で、2重目復号化部33は、上述したステップS83で1重目復号化部32から出力された所定バイト分のデータが、取得されたラン数分、繰り返して出力され、次のステップS87でデコード済みサンプル数が取得される。
2−2−1−3.復号化処理の具体的な例
上述した図21、図23、図24および図49のフローチャート、ならびに、図50〜図55を用いて、この実施の第2の形態による復号化処理を、具体的な例を挙げて説明する。ここでは、画素データの量子化ビット数を10ビットとし、所定バイトが1バイトであって、1バイトを単位として符号化がなされているものとする。
MSB側圧縮符号化データが図50Aに示されるビット列「10010011」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図50Aに示されるビット列は、MSB側ビット単位でのランレングス処理と、所定バイト単位でのランレングス処理とが共に行われている例である。
先ず、図49のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第1のフラグが取得される。図50Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図50Bの復号手順(1))。ステップS82の判断に従い処理がステップS83に移行され、第1のフラグの次に配置される、ランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれたランレングスのレベルのビットが所定バイトの長さになるまで繰り返し出力される。図50Aの例では、ランレングスのビットを示すビット列が「00」となっているので、このビット列「00」が4回繰り返され、ビット列「00000000」が出力される(図50Bの復号手順(2))。
次に、第1のフラグの値が"1"であれば、ランレングスのレベルを示す2ビットの次に、1ビットの第2のフラグが配置されていることになる。ステップS831で、ランレングスのレベルを示す2ビットの次の1ビットが読み込まれ、第2のフラグが取得される。この図50Aの例では、第2のフラグの値が"1"であって、所定バイト単位でのランレングス処理が行われていることが示される(図50Bの復号手順(3))。
次のステップS84の判断では、第2のフラグの値が"1"なので所定バイト単位でのランレングス処理が行われたと判断され、図49のステップS85に従い第2のフラグの次の、所定バイト単位でのランレングス処理のラン数を示す4ビットのビット列が読み込まれる。図50Aの例では、ラン数を示すビット列が「0011」となっているので、ラン数が「3」であるとされ、直前に出力されたビット列「00000000」が3回繰り返されて出力される(図50Bの復号手順(4))。
この復号手順(1)〜復号手順(4)までで、上述した図41に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、デコード済みサンプル数が分かるので(図49のステップS87)、個のデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が行われる。この統合処理は、図21のフローチャートで説明したように、1画素分のLSB側ビットが復号化される毎に行われる。
図51を用いて、MSB側ビットとLSB側ビットとの統合処理について説明する。この統合処理は、基本的には、上述した実施の第1の形態において図26を用いて説明した処理と同様である。図51Aの先頭に配置されるMSB側圧縮符号化データ(1)から、図50を用いて説明したような処理より、MSB側ビットのビット列「00」がMSB側ビット単位のランレングス処理の復号化により4回繰り返され、さらに所定バイト単位のランレングス処理の復号化により3回繰り返されたビット列「0000000000000000」が得られ(図51B左側参照)、MSB側出力メモリ34に格納される。デコード済みサンプル数は、(MSB側ビット単位のデコード済みサンプル数N)×(所定バイト単位のランレングス処理のラン数+1)=4×(3+1)=16となる。
一方、LSB側圧縮符号化データは、例えば1画素分のLSB側ビットが復号化される毎にLSB側出力メモリ37に格納される(図51B右側参照)。
データ統合部38は、MSB側出力メモリ34に格納したビット列「0000000000000000」を、MSB側ビット毎すなわち2ビットのビット列「00」毎に、LSB側出力メモリ37に格納した、デコード済みサンプル数分のLSB側ビットの1画素分すなわち8ビットに対して、MSB側ビットとLSB側ビットとが対応するようにそれぞれ接続してMSB側ビットとLSB側ビットとを統合して、デコード済みサンプル数分すなわち16サンプル分の画素データを得る(図51C)。
MSB側圧縮符号化データが図52Aに一例が示されるビット列「1100」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図52Aに示されるビット列は、MSB側ビット単位でのランレングス処理が行われ、所定バイト単位でのランレングス処理が行われない例である。
先ず、図49のフローチャートのステップS80に従い先頭が1ビットが読み込まれて第1のフラグが取得される。図52Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図52Bの復号手順(2))。次のステップS82の判断では、第1のフラグの値が"1"なのでMSB側ビット単位でのランレングス処理が行われていると判断され、次のステップS83に従い、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列が読み込まれ、読み込まれたランレングスのレベルのビット列が所定バイトの長さになるまで繰り返される。図52Aの例では、ランレングスのレベルを示すビット列が「10」となっているので、このビット列「10」が4回繰り返され、ビット列「10101010」が出力される(図52Bの復号手順(2))。
次に、第1のフラグの値が"1"であれば、ランレングスのレベルを示す2ビットの次に、1ビットの第2のフラグが配置されていることになる。ステップS831で、ランレングスのレベルを示す2ビットの次の1ビットが読み込まれ、第2のフラグが取得される。この図52Aの例では、第2のフラグの値が"0"であって、所定バイト単位でのランレングス処理が行われていないことが示される(図52Bの復号手順(3))。
次のステップS84の判断では、第2のフラグの値が0なので、1バイト単位のランレングス処理が行われていないと判断され、処理はステップS89に移行される。この図52Aのビット列の場合は、この復号手順(1)〜復号手順(3)までで、図41に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が、1画素分のLSB側ビット毎に行われる。
この場合のMSB側ビットとLSB側ビットとの統合処理は、図51を用いて説明した処理と略同様である。すなわち、図53に一例が示されるように、図53Aに示すMSB側圧縮符号化データ(2)から、図52を用いて説明した処理により、MSB側ビットのビット列「10」がMSB側ビット単位のランレングス処理の復号化により4回繰り返された「10101010」が得られる(図53B左側参照)。このビット列がMSB側出力メモリ34に格納され、デコード済みサンプル数が(MSB側ビット単位のデコード済みサンプル数N)×(所定バイト単位のランレングス処理のラン数+1)=4×(0+1)=4と求められる。
一方、LSB側圧縮符号化データは、例えば1画素分のLSB側ビットが復号化される毎にLSB側出力メモリ37に格納される(図28B右側参照)。
データ統合部38は、MSB側出力メモリ34に格納したビット列「10101010」を、MSB側ビット毎すなわち2ビット毎「10」、「10」、「10」、「10」に、LSB側出力メモリ37に格納した、デコード済みサンプル数分のLSB側ビットの1画素分すなわち8ビットに対して、MSB側ビットとLSB側ビットとが対応するようにそれぞれ接続してMSB側ビットとLSB側ビットとを統合して、デコード済みサンプル数分すなわち4画素分の画素データを得る(図53C)。
MSB側圧縮符号化データが図54Aに一例が示されるビット列「011010101」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図54Aに示されるビット列は、MSB側ビット単位でのランレングス処理と所定バイト単位でのランレングス処理とが行われない例である。
図49のフローチャートのステップS80に従い先頭の1ビットが読み込まれて第1のフラグが取得され、この第1のフラグの値"0"に基づき、MSB側ビット単位でのランレングス処理が行われていないことが示される(図54Bの復号手順(1))。この第1のフラグの値"0"に基づき、ステップS82でMSB側ビット単位でのランレングス処理が行われていないと判断され、処理がステップS88に移行され、第1のフラグの次に配置される所定バイト分のビット列「11010101」が出力される(図54Bの復号手順(2))。
この復号手順(1)および復号手順(2)まで、上述した図41に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
復号化されたMSB側ビットとLSB側ビットとの、データ統合部38における統合処理は、図51および図53を用いて説明した処理と略同様である。すなわち、図55に一例が示されるように、図55Aに示すMSB側圧縮符号化データ(3)から、図54を用いて説明した処理により、第1のフラグの次に配置される所定バイト分のビット列「11010101」が得られ(図55B左側参照)、このビット列がMSB側メモリ34に格納される。
この例では、所定バイト単位でのランレングス処理が行われていないので、上述した図23のフローチャートのステップS132の判断に従い、MSB側ビットの繰り返し数「4」がデコード済みのサンプル数Nとされる。
一方、LSB側圧縮符号化データは、例えば1画素分のLSB側ビットが復号化される毎にLSB側出力メモリ37に格納される(図55B右側参照)。
データ統合部38は、MSB側出力メモリ34に格納したビット列「11010101」を、MSB側ビット毎すなわち2ビット毎「11」、「01」、「01」、「01」に、LSB側出力メモリ37に格納した、デコード済みサンプル数分のLSB側ビットの1画素分すなわち8ビットに対して、MSB側ビットとLSB側ビットとが対応するようにそれぞれ接続してMSB側ビットとLSB側ビットとを統合して、デコード済みサンプル数分の画素データを得る(図55C)。
2−2−2.実施の第2の形態の第1の変形例による復号化処理について
次に、上述した実施の第2の形態の第1の変形例による、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、1の出力系統に対してLSB側圧縮符号化データとMSB側圧縮符号化データとに分離して出力する例に対応した一例の復号化処理について説明する。
なお、この実施の第2の形態の第1の変形例では、上述した実施の第1の形態の第1の変形例による復号化処理を行う復号化装置2Bをそのまま適用することができるため、復号化装置の詳細な説明を省略する。また、以下において、所定バイトは1バイトである。
2−2−2−2.復号化処理について
この実施の第2の形態の第1の変形例による復号化処理は、全体的な流れおよびLSB側圧縮符号化データの復号化処理については、図32および図33を用いて説明した、上述の実施の第1の形態の第1の変形例による復号化処理と同様である。この実施の第2の形態の第1の変形例による復号化処理では、第2のフラグの位置が変更されたのに伴い、MSB側圧縮符号化データの復号化処理が変更されている。以下、図32および図33のフローチャートを適宜、参照しながら説明する。
すなわち、全体的には、図32で説明したように、ステップS90で圧縮符号化前のベースバンドの画素データのビット数が設定され、次のステップS91で、図6〜図8および図10、ならびに、図42に示した符号化処理で圧縮符号化され、この実施の第2の形態の第1の変形例による、1の出力系統に対してLSB側圧縮符号化データとMSB側圧縮符号化データとに分離して出力された圧縮符号化データが、例えばファイルを介して読み込まれ、入力メモリ30Bに格納される。
次のステップS92で、メモリ制御部31によりLSB側の圧縮符号データ長情報が取得される。ステップS93で上述した図33のフローチャートに従いLSB側圧縮符号化データの復号化が行われる。また、ステップS94で、入力メモリ30に格納された圧縮符号化データが圧縮符号データ長情報に示される位置から読み出され、後述する図56のフローチャートに従いMSB側圧縮符号化データの復号化が行われる。
ステップS93およびステップS94で、1フレーム分のLSB側圧縮符号化データおよびMSB側圧縮符号化データに対する復号化処理が終了すると、ステップS95で、データ統合部38において、ステップS93で復号化されたベースバンドのLSB側ビットとステップS94で復号化されたベースバンドのMSB側ビットとが統合され、1フレーム分の画素データが復元される。
図56は、この実施の第2の形態の第1の変形例によるMSB側ビットに対する一例の復号化処理を示すフローチャートである。この図56に示すフローチャートは、図34を用いて説明した、上述の実施の第1の形態の第1の変形例による復号化処理に対して、第2のフラグを取得するステップの位置が異ならされ、第1のフラグの値に基づく判断の後に、第2のフラグが取得されるようになっている。
すなわち、図56のフローチャートにおいて、ステップS110で1フレーム分の復号化処理が終了していないとされれば、図41を用いて説明したMSB側の出力データのデータ構造を参照し、ステップS111で先頭の1ビットが読み込まれて1重目復号化部32に第1のフラグが取得される。次のステップS113で、取得された第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われているか否かが判断される。若し、第1のフラグの値が"1"であり、MSB側ビット単位でのランレングス処理が行われていると判断されれば、処理はステップS114に移行され、1重目復号化部32により第1のフラグの次の2ビット、すなわちランレングスのレベルが読み込まれる。そして、所定バイト数(この例では1バイト)になるまで、読み込まれた2ビットの値が繰り返し出力される。
一方、ステップS113で、若し第1のフラグの値が"0"であり、MSB側ビット単位でのランレングス処理が行われていないと判断されれば、処理はステップS118に移行され、第1のフラグに続く所定バイトすなわち1バイトが読み込まれ、出力される。
ステップS114でのランレングスのレベルによる出力が終了したら、処理は次のステップS1141に移行される。このステップS1141では、ランレングスのレベルの次の1ビットが読み込まれ、2重目復号化部33に第2のフラグが取得される。そして、次のステップS115で、取得された第2のフラグの値に基づき所定バイト単位でのランレングス処理が行われているか否かが判断される。
若し、第2のフラグの値が"1"であり、所定バイト単位でのランレングス処理が行われていると判断されれば、処理はステップS116に移行され、第2のフラグの次の4ビットが読み込まれ、所定バイト単位でのランレングス処理によるラン数が取得される。そして、次のステップS117で、2重目復号化部33は、上述したステップS114で1重目復号化部32から出力された所定バイト分のデータが、取得されたラン数分、繰り返して出力される。
2−2−2−3.復号化処理の具体的な例
上述した図32、図33および図56のフローチャート、ならびに、図57を用いて、実施の第2の形態の第1の変形例による復号化処理について、具体的な例を挙げて説明する。ここでは、画素データの量子化ビット数を10ビットとし、所定バイトが1バイトであって、1バイトを単位として符号化がなされているものとする。
MSB側圧縮符号化データが図57Aに一例が示されるビット列「100100111100011010101・・・」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。
先ず、図56のフローチャートのステップS111に従い先頭の1ビットが読み込まれて第1のフラグが取得され、読み込まれた第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図57Bの復号手順(1))。第1のフラグの値が"1"なので、ステップS113により、MSB側ビット単位でのランレングス処理が行われたと判断され、ステップS114で第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列「00」が読み込まれる。読み込まれた2ビットのビット列「00」が4回繰り返されて所定バイトのビット列「00000000」が出力される(図57Bの復号手順(2))。
第1のフラグの値が"1"なので、ランレングスのレベルの次の1ビットは、第2のフラグとなる。次のステップS1141で、ランレングスのレベルの次の1ビットが読み込まれて第2のフラグが取得され、第2のフラグの値が"1"であって、所定バイト単位でのランレングス処理が行われていることが示される(図57Bの復号手順(3))。ステップS115により、第2のフラグの値に基づき所定バイト単位でのランレングス処理が行われたと判断され、ステップS116に従い、第2のフラグの次に配置される、ランレングスのラン数を示す4ビットのビット列「0011」が読み込まれる。読み込まれたビット列に基づきラン数が「3」であることが分かるので、直前に出力されたビット列「00000000」が3回繰り返されて出力される(図57の復号手順(4))。
処理がステップS110に戻され、未だ1フレーム分の処理が終了していないので、次のステップS111に従い、直前に読み込まれたランレングスのラン数を示す4ビットのビット列「0011」の次の1ビットが読み込まれ、第1のフラグが取得される。図57Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図57Bの復号手順(5))。ステップS113により、第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われたと判断され、第1のフラグの次に配置されるランレングスのレベルを示す2ビットのビット列「10」が読み込まれ、読み込まれたビット列「10」が4回繰り返され(ステップS114)、所定バイトのビット列「10101010」が出力される(図57Bの復号手順(6))。
第1のフラグの値が"1"なので、ランレングスのレベルの次の1ビットは、第2のフラグとなる。次のステップS1141で、ランレングスのレベルの次の1ビットが読み込まれて第2のフラグが取得され、第2のフラグの値が"0"であって、所定バイト単位でのランレングス処理が行われていないことが示される(図57Bの復号手順(7))。次のステップS115の判断では、第2のフラグの値が"0"なので、所定バイト単位のランレングス処理が行われていないと判断され、処理がステップS110に戻される。
未だ1フレームが終了していないので、処理はステップS110からステップS111に移行され、直前に読み込まれた第2のフラグの次の1ビットが読み込まれ、第1のフラグが取得される。図57Aの例では、取得された第1のフラグの値が"0"であって、MSB側ビット単位でのランレングス処理が行われていないことが示される。したがって、次のステップS113により、第1のフラグの値に基づきMSB側ビット単位でのランレングス処理が行われていないと判断され、処理がステップS118に移行され、直前に読み込まれた第1のフラグの次の所定バイトが読み込まれ、この所定バイトのビット列「11010101」が出力される。
上述のような処理を、1フレーム分の画素について終了するまで、例えばファイルから読み出され入力メモリ30に格納された圧縮符号化データにおける末尾のビットが読み出されるまで繰り返す。
なお、データ統合部38による復号化されたベースバンドのLSB側ビットおよびMSB側ビットの統合処理は、図36を用いて説明した、実施の第1の形態の第1の変形例による処理と同一なので、繁雑さを避けるために、詳細な説明を省略する。
2−2−3.実施の第2の形態の第2の変形例による復号化処理について
次に、上述した実施の第2の形態の第2の変形例による、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、圧縮符号化されたLSB側ビットおよびMSB側ビットをそれぞれ独立的に出力する例に対応した一例の復号化処理について説明する。
なお、この実施の第2の形態の第2の変形例では、上述した実施の第1の形態の第2の変形例による復号化処理を行う復号化装置2Cをそのまま適用することができるため、復号化装置の詳細な説明を省略する。また、以下において、所定バイトは1バイトである。
この実施の第2の形態の第2の変形例による復号化処理は、全体的な流れおよびLSB側圧縮符号化データの復号化処理については、図38および図33を用いて説明した、上述の実施の第1の形態の第2の変形例による復号化処理と同様である。この実施の第2の形態の第2の変形例による復号化処理では、第2のフラグの位置が変更されたのに伴い、MSB側圧縮符号化データの復号化処理が変更されている。以下、図38および図33のフローチャートを適宜、参照しながら説明する。
すなわち、全体的には、図38で説明したように、ステップS120で圧縮符号化前のベースバンドの画素データのビット数が設定される。そして、図6〜図8および図10、ならびに、図42に示した符号化処理で圧縮符号化されたLSB側圧縮符号化データが、ステップS121で例えばファイルを介して読み込まれ、LSB側入力メモリ30Aに格納される。また、同様の符号化処理で圧縮符号化されたMSB側圧縮符号化データが、ステップS123で例えばファイルを介して読み込まれ、MSB側入力メモリ30Aに格納される。
入力メモリ30Bに格納されたLSB側圧縮符号化データは、ステップS122で、上述した図56のフローチャートに従い復号化される。ステップS122およびステップS124で、1フレーム分のLSB側圧縮符号化データおよびMSB側圧縮符号化データに対する復号化処理が終了すると、ステップS125で、データ統合部38において、ステップS122で復号化されたベースバンドのLSB側ビットとステップS124で復号化されたベースバンドのMSB側ビットとが統合され、1フレーム分の画素データが復元される。
なお、データ統合部38による復号化されたベースバンドのLSB側ビットおよびMSB側ビットの統合処理は、図36を用いて説明した、実施の第1の形態の第1の変形例による処理と同一なので、繁雑さを避けるために、詳細な説明を省略する。
2−2−4.実施の第2の形態の第3の変形例による復号化処理について
次に、上述した実施の第2の形態の第3の変形例による、所定バイト単位のビット列が繰り返されるか否かを示す第2のフラグについて、出力データ上の位置を変更し、必要な場合のみ当該第2のフラグを付加する場合において、所定バイトを2バイトとし、MSB側ビットのランレングス処理を2バイトのビット列について行った圧縮符号化データに対する復号化処理について説明する。
なお、この実施の第2の形態の第3の変形例では、上述した実施の第1の形態の符号化装置1Aに対応する復号化装置2A(図20参照)をそのまま適用できる。また、復号化処理は、全体的な流れおよびLSB側圧縮符号化データの復号化処理は、上述の実施の第1の形態で図21、図23および図24を用いて説明した復号化処理をそのまま適用できる。また、MSB側圧縮符号化データの復号化処理は、上述の実施の第2の形態で図49を用いて説明した復号化処理が略適用できる。そのため、これらの詳細な説明については、繁雑さを避けるために省略する。また、以下において、所定バイトは2バイトである。
また、LSB側圧縮符号化データに対する復号化処理は、実施の第1の形態による復号化処理で説明した、1バイトのビット列についてLSB側ビットが圧縮符号化されたLSB側圧縮符号化データに対する復号化処理と同一であるので、説明を省略する。
図58および図59は、この実施の第2の形態の第3の変形例による復号化処理における一例の復号化手順を示す。この図58および図59と、上述した図49のフローチャートとを用いて、この実施の第2の形態の第3の変形例による復号化処理について説明する。なお、ここでは、圧縮符号化データの出力形式が、実施の第1の形態において図12を用いて説明した、MSB側圧縮符号化データとLSB側圧縮符号化データとがインターリーブされた形式とする。
MSB側圧縮符号化データが図58Aに一例が示されるビット列「10010001」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図58Aに示すビット列は、MSB側ビット単位でのランレングス処理と、所定バイト単位でのランレングス処理とが共に行われている例である。
先ず、図49のフローチャートのステップS80に従い先頭のビットが読み込まれて第1のフラグが取得される。図58Aの例では、第1のフラグの値が"1"であって、MSB側ビット単位でのランレングス処理が行われていることが示される(図58Bの復号手順(1))。図49のステップS82の判断では、第1のフラグの値が"1"なのでMSB側ビット単位でのランレングス処理が行われたと判断され、図49のステップS83に従い、第1のフラグの次に配置される、ランレングスのレベルを示す2ビットのビット列「00」が読み込まれ、読み込まれた2ビットのビット列が所定バイトの長さになるまで繰り返される。図58Aの例では、ランレングスのレベルを示す2ビットのビット列「00」が8回繰り返され、ビット列「0000000000000000」が出力される(図58Bの復号手順(2))。
第1のフラグの値が"1"なので、次に、図49のステップS831で、直前に読み込まれたランレングスのレベルの次の1ビットは、第2のフラグとなる。次のステップS831で、ランレングスのレベルの次の1ビットが読み込まれて第2のフラグが取得され、第2のフラグの値が1であって、2バイト単位のランレングス処理が行われていることが示される(図58Bの復号手順(3))。ステップS84により、第2のフラグの値に基づき2バイト単位でのランレングス処理が行われたと判断され、ステップS85に従い、第2のフラグの次に配置される、ランレングスのラン数を示す4ビットのビット列「0001」が読み込まれる。読み込まれたビット列に基づきラン数が「1」であることが分かるので、直前に出力されたビット列「0000000000000000」が1回繰り返されて出力される(図58Bの復号手順(4))。
この復号手順(1)〜復号手順(4)までで、上述した図47に示すMSB側の出力データのデータ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので(図49のステップS87)、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化が行われる。
MSB側圧縮符号化データが図59Aに一例が示される「01010101011010101」からなる場合の、MSB側圧縮符号化データの復号化処理について説明する。この図59Aに示されるビット列は、MSB側ビット単位でのランレングス処理と、所定バイト単位でのランレングス処理とが行われない例である。
図49のフローチャートのステップS80に従い先頭の1ビットが読み込まれ、第1のフラグが取得され、この第1のフラグの値"0"に基づき、MSB側ビット単位でのランレングス処理が行われていないことが示される(図59Bの復号手順(1))。次のステップS82で、第1のフラグの値"0"に基づきMSB側ビット単位でのランレングス処理が行われていないと判断され、処理がステップS88に移行され、第1のフラグの次に配置される所定バイトのビット列「1010101011010101」が出力される(図59Bの復号手順(2))。
個の復号手順(1)および復号手順(2)までで、上述した図47に示すMSB側の出力データ構造を単位とする処理が完結したことになる。この時点で、復号化したデコード済みサンプル数が分かるので、このデコード済みサンプル数に基づきLSB側圧縮符号化データの復号化処理が行われる。この例では、2バイト単位でのランレングス処理が行われていないので、上述した図23のフローチャートのステップS132の判断に従い、MSB側ビットの繰り返し数「8」がデコード済みのサンプル数Nとされる。
LSB側圧縮符号化データの復号化されベースバンドのLSB側ビットがLSB側出力メモリ37に格納されると、データ統合部38で、MSB側ビットとLSB側ビットとの統合処理が行われる。この統合処理は1画素分のLSB側ビットが復号化される毎に行われる。
なお、この実施の第2の形態の第3の変形例による復号化処理は、上述のように実施の第2の形態によるMSB側圧縮符号化データとLSB側圧縮符号化データとをインターリーブした出力形式に適用できるのに限らず、実施の第2の形態の第1の変形例による1の出力系統に対してLSB側ビットとMSB側ビットに分離して出力する出力形式に適用することが可能である。この場合、復号化処理は図31に示した復号化装置2Bが用いられ、図32、図33および図56のフローチャートに準じた復号化処理がなされる。
同様に、この実施の第2の形態の第3の変形例による復号化処理は、実施の第2の形態の第2の変形例によるLSB側圧縮符号化データとMSB側圧縮符号化データとをそれぞれ独立的に出力する出力形式にも適用することが可能である。この場合、復号化処理は図37に示した復号化装置2Cが用いられ、図38、ならびに、図33および図56のフローチャートに準じた復号化処理がなされる。
また、圧縮符号化が3バイト若しくはそれ以上のデータ長を単位としてなされる場合についても、この実施の第2の形態の第3の変形例による復号化処理を同様に適用することができる。
3.実施の第1および第2の形態に共通して適用可能なハードウェア構成について
3−1.ハードウェア構成の例
次に、上述した実施の第1および第2の形態による符号化装置1A、1Bおよび1C、ならびに、復号化装置2A、2Bおよび2Cに共通して適用可能なハードウェア構成について、図60を用いて説明する。この図60に一例が示されるように、符号化装置1A、1Bおよび1C、ならびに、復号化装置2A、2Bおよび2Cは、コンピュータ装置と同等の構成により実現可能である。
ブリッジ201は、CPU203、RAM(Random Access Memory)204およびGPU(Graphic Processing Unit)205に対するデータ転送を制御する。RAM204は、CPU203のワークメモリとして用いられる。GPU205は、CPU203から供給された表示制御命令に基づき、ディスプレイ208に所定の表示を行わせるための表示信号を生成し出力する。
ブリッジ201とバス209を介して接続されるブリッジ202は、ハードディスクドライブ(HDD)206、USB(Universal Serial Bus)インターフェイス(I/F)207およびバス208に対するデータ転送を制御する。ブリッジ202に対してIEEE(Institute Electrical and Electronics Engineers)1394規格に準じたインターフェイスを接続することもできる。ハードディスクドライブ206は、CPU203が動作するためのプログラムデータが格納される。また、ハードディスクドライブ206は、CPU203によって生成されたデータや、各インターフェイスを介して外部から供給されたデータを格納することができる。さらに、ハードディスクドライブ206は、CPU203のワークメモリとして用いることもできる。
バス208は、例えばPCI(Peripheral Component Interconnect)バスであって、入力インターフェイス(I/F)210およびドライブ装置211が接続される。入力I/F210は、例えばマウス213といったポインティングデバイスや、キーボード214が接続され、ユーザによるマウス213やキーボード214に対してなされた入力操作に応じた信号を出力する。ドライブ装置211は、例えばCD−ROM(Compact Disc-Read Only Memory)、DVD−ROM(Digital Versatile Disc-ROM)などの記録媒体を再生する。また、ドライブ装置211として、CD−R(Compact Disc-Recordable)、CD−RW(Compact Disc-ReWritable)、DVD−R(DVD Recordable)、DVD−RW(DVD Re-recordable)、DVD+R(DVD +R format)、DVD+RW(DVD +RW format)、Blu−ray Discといった、書き込み可能な記録媒体に対応したものを用いることもできる。
バス208に対して、ビデオI/F220がさらに接続される。ビデオI/F220は、例えばべースバンドのディジタルビデオデータの入出力が行われる。
バス208に対して、さらに外部との通信を行うための通信I/F215を接続することができる。通信I/F215は、例えばTCP/IP(Transmission Control Protocol/Internet Protocol)といった所定のプロトコルで外部の機器と通信し、データのやりとりを行うことができるようにされる。
CPU203は、RAM204をワークメモリとして用いて、HDD206に予め格納されているプログラムに従い所定に処理を実行して各種命令やデータを生成し、生成した命令やデータをこの装置の各部に供給する。また、この装置の各部で生成されたデータがCPU203に供給される。
3−2.符号化処理に対する適用例
上述した符号化装置1A、1Bおよび1Cの構成は、プログラムに従いCPU203上で動作するソフトウェアとして構成される。図1を用いて説明した符号化装置1Aを例にとると、入力データ用メモリ10および出力データ用メモリ15、ならびに、LSB側データ用メモリ12およびMSB側データ用メモリ16は、それぞれRAM204の所定領域が用いられる。これに限らず、ハードディスクドライブ206の所定領域をこれら入力データ用メモリ10および出力データ用メモリ15、ならびに、LSB側データ用メモリ12およびMSB側データ用メモリ16として用いることも可能である。また、データ分離部11や、LSB側ビットの圧縮符号化を行うDPCM部13およびハフマン符号化部14、ならびに、MSB側ビットの圧縮符号化を行う1重目ランレングス処理部17および2重目ランレングス処理部18は、CPU203上で動作するソフトウェアとして構成される。
このような装置による画像データの一例の符号化処理について、概略的に説明する。圧縮符号化すべきベースバンドのディジタルビデオデータが外部からビデオI/F220に対して供給される。ビデオI/F220に供給されたディジタルビデオデータは、例えばハードディスクドライブ206に格納される。CPU203は、ハードディスクドライブ206に格納されたディジタルビデオデータを例えばフレーム単位で読み出し、RAM204に転送する。ディジタルビデオデータは、RAM204上に入力データ用メモリ10として割り当てられた第1の領域に格納される。
なお、ディジタルビデオデータは、USB I/F207や通信I/F215から供給することもできる。さらに、ベースバンドのディジタルビデオデータが記録された記録媒体をドライブ装置211で再生して供給することもできる。
CPU203は、RAM204の第1の領域に格納された1フレーム分のディジタルビデオデータを、例えば画面の左上隅に対応する画素から順に、水平方向に読み出す。このとき、例えばディジタルビデオデータがR、GおよびB各色それぞれの画素データからなる場合、各色毎に読み出しがなされる。CPU203は、読み出した画素データに対して、上述の実施の第1の形態、実施の第1の形態の第1の変形例、実施の第1の形態の第2の変形例、あるいは、実施の第1の形態の第3の変形例、若しくは、実施の第2の形態、実施の第2の形態の第1の変形例、実施の第2の形態の第2の変形例、または、実施の第2の形態の第3の変形例による符号化方法により、圧縮符号化を施す。
すなわち、実施の第1の形態による符号化装置1Aにおける処理を例にとると、CPU203は、読み出した画素データをLSB側の8ビットと、LSB側の8ビットを除いたMSB側ビットとに分解する。なお、画素データの量子化ビット数は、例えばキーボード214からの入力などにより、予め設定されているものとする。CPU203は、LSB側ビットに対して、上述したように、DPCM符号化処理およびハフマン符号化処理を施して圧縮符号化し、圧縮符号化されたLSB側圧縮符号化データを、RAM204上の出力データ用メモリ15として割り当てられた第2の領域に所定に格納する。MSB側ビットに対しても同様に、MSB側ビット単位および所定バイト単位のランレングス処理を所定に行い圧縮符号化し、圧縮符号化されたMSB側圧縮符号化データを、RAM204上の第2の領域に所定に格納する。
1フレーム分の圧縮符号化処理が終了すると、RAM204上の第2の領域から、圧縮符号化データが所定に読み出され出力される。例えば、RAM204から読み出された圧縮符号化データは、ハードディスクドライブ206に一旦、格納される。ハードディスクドライブ206に格納された圧縮符号化データは、USB I/F207や通信I/F215を介して外部に出力される。これに限らず、ハードディスクドライブ209から読み出された圧縮符号化データを、ドライブ装置211に装填された記録可能な記録媒体に記録することもできる。
上述のような処理において、CPU203が複数の処理を並列的に実行可能であれば、LSB側ビットに対する圧縮符号化処理と、MSB側ビットに対する圧縮符号化処理とをそれぞれ並列的に行うことができる。また、R、GおよびB各色の画素データそれぞれに対する処理を並列的に行うことも可能である。一例として、CPU203は、プログラムに従い時分割的に処理が制御され、時分割されたそれぞれのスレッドにおいて、MSB側ビットおよびLSB側ビット、R、GおよびB各色の画素データのそれぞれに対する処理を実行することが考えられる。
3−3.復号化処理に対する適用例
復号化装置および復号化処理についても、同様である。すなわち、上述した復号化装置2A、2Bおよび2Cの構成は、プログラムに従いCPU203上で動作するソフトウェアとして構成される。図20を用いて説明した復号化装置2Aを例にとると、入力メモリ30、MSB側出力メモリ34およびMSB側出力メモリ37は、それぞれRAM204の所定領域が用いられる。これに限らず、ハードディスクドライブ206の所定領域を、これら入力メモリ30、MSB側出力メモリ34およびMSB側出力メモリ37として用いることも可能である。メモリ制御部31は、ブリッジ201に対応する。メモリ制御部31の機能を、CPU203上で動作するソフトウェアとして実現することも可能である。また、MSB側圧縮符号化データの復号化を行う1重目復号化部32および2重目復号化部33、LSB側圧縮符号化データの復号化処理を行うハフマン復号化部35およびDPCM復号化部36、ならびに、復号化されたLSB側ビットとMSB側ビットとを統合するデータ統合部38は、CPU203上で動作するソフトウェアとして構成される。
復号化処理は、このような装置による、画像データが圧縮符号化された圧縮符号化データの一例の復号化処理について、概略的に説明する。復号化すべき圧縮符号化データが、例えばUSB I/F207を介して供給され、ハードディスクドライブ206に格納される。圧縮符号化データは、これに限らず、通信I/F215から供給するようにもできる。また、圧縮符号化データが記録された記録媒体をドライブ装置211で再生することで、圧縮符号化データを供給することもできる。
MSB側圧縮符号化データとLSB側圧縮符号化データとが1系統で供給される場合は、1のファイルとしてハードディスクドライブ206に格納される。MSB側圧縮符号化データとLSB側圧縮符号化データとがそれぞれ独立的に供給される場合は、MSB側圧縮符号化データが格納されるファイルと、LSB側圧縮符号化データが格納されるファイルとの2ファイルがハードディスクドライブ206に格納される。なお、ここでは、ファイルには、1フレーム分の圧縮符号化データが格納されているものとする。CPU203は、ハードディスクドライブ206に格納された圧縮符号化データを読み出し、RAM204に転送する。圧縮符号化データは、RAM204上の入力メモリ30として割り当てられた第1の領域に格納される。
CPU203は、RAM204上の第1の領域に格納された圧縮符号化データを所定に読み込み、LSB側圧縮符号化データおよびMSB側圧縮符号化データのそれぞれに対して、圧縮符号化データの符号化方法に応じて、上述の実施の第1の形態、実施の第1の形態の第1の変形例、実施の第1の形態の第2の変形例、あるいは、実施の第1の形態の第3の変形例、若しくは、実施の第2の形態、実施の第2の形態の第1の変形例、実施の第2の形態の第2の変形例、または、実施の第2の形態の第3の変形例による復号化方法により、復号化を施す。なお、圧縮符号化データの符号化方法は、予め分かっているものとする。
実施の第1の形態による復号化装置2Aにおける処理を例にとると、CPU203は、例えばブリッジ201に対して、RAM204上の第1の領域に格納されたMSB側圧縮符号化データおよびLSB側圧縮符号化データを、それぞれビット単位で所定に読み出すように要求する。CPU203は、RAM204から読み出されたMSB側圧縮符号化データに対して、上述したようにMSB側ビット単位および所定バイト単位のランレングス処理に対する復号化処理を施し、復号化されたMSB側ビットを、RAM204上のMSB側出力メモリ34として割り当てられた第2の領域に所定に格納する。LSB側圧縮符号化データに対しても同様に、RAM204から読み出されたLSB側圧縮符号化データに対して、上述したようにハフマン符号の復号化処理およびDPCMの復号化処理を施し、復号化されたLSB側ビットを、RAM204上のLSB側出力メモリ37として割り当てられた第3の領域に所定に格納する。
例えば1フレーム分の復号化処理が終了すると、CPU203は、RAM204上の第2および第3の領域に格納された、復号化されたMSB側ビットおよびLSB側ビットをそれぞれ所定に読み出し、MSB側ビットとLSB側ビットとの統合処理を行う。統合処理され元の量子化ビット数が復元され復号化された画素データは、例えばハードディスクドライブ206に一旦、格納される。ハードディスクドライブ206に格納された、復号化された画素データは、USB I/F207や通信I/F215を介して外部に出力される。これに限らず、ハードディスクドライブ209から読み出された、復号化された画素データを、ドライブ装置211に装填された記録可能な記録媒体に記録することもできる。
上述のような処理において、CPU203が複数の処理を並列的に実行可能であれば、LSB側圧縮符号化データに対する復号化処理と、MSB側圧縮符号化データに対する復号化処理とをそれぞれ並列的に行うことができる。また、R、GおよびB各色の画素データが圧縮符号化された圧縮符号化データそれぞれに対する処理を、並列的に行うことも可能である。
なお、上述では、この発明の実施の第1の形態、実施の第1の形態の第1の変形例、実施の第1の形態の第2の変形例、あるいは、実施の第1の形態の第3の変形例、若しくは、実施の第2の形態、実施の第2の形態の第1の変形例、実施の第2の形態の第2の変形例、または、実施の第2の形態の第3の変形例による符号化方法および復号化方法を、図60に示すコンピュータ装置と同等の構成を有するハードウェアで実行するように説明したが、これはこの例に限られない。すなわち、符号化装置や復号化装置において、それぞれの機能を実行する部分を各々独立的なハードウェアで構成し、CPUの制御に基づき統合的に動作させることができる。
4.この発明の実施の第3の形態について(複数のCPUを持つハードウェア構成)
次に、この発明の実施の第3の形態について説明する。この実施の第3の形態では、上述の実施の第1の形態、実施の第1の形態の第1の変形例、実施の第1の形態の第2の変形例、あるいは、実施の第1の形態の第3の変形例、若しくは、実施の第2の形態、実施の第2の形態の第1の変形例、実施の第2の形態の第2の変形例、または、実施の第2の形態の第3の変形例による符号化方法および復号化方法を、それぞれ独立的に動作可能な複数のコアを持つCPUを用いて実行する例である。
4−1.ハードウェア構成の例
図61は、この実施の第3の形態に適用可能な一例のハードウェア構成を示す。この図61に一例が示されるハードウェア構成は、上述した実施の第1および第2の形態による符号化装置1A、1Bおよび1C、ならびに、復号化装置2A、2Bおよび2Cに共通して適用可能である。
なお、この図61に示す構成において、上述した図60に示す構成と共通する部分には同一の符号を付し、詳細な説明を省略する。
この実施の第3の形態によるハードウェア構成は、図61に示されるように、マイクロプロセッサ230は、複数のCPUコア231、ならびに、232A〜232Hを有すると共に、I/O(Input/Output)コントローラ233およびメモリコントローラ234を有し、これらが内部バス240で接続された構成を有する。なお、図61では、マイクロプロセッサ230が8個のサブCPUコア232A〜232Hを有する構成となっているが、これはこの例に限られず、マイクロプロセッサ230は、さらに多数のサブCPUコアを有することもできるし、サブCPUの数を8個より少なくしてもよい。
メインCPUコア231は、OS(Operating System)などの基本プログラムが実行される。メインCPUコア231と内部バス240で接続される8個のサブCPUコア232A〜232Hは、例えばRISC(Reduced Instruction Set Computer)タイプの信号処理プロセッサである。メインCPUコア231と、サブCPUコア232A〜232Hは、バス240を介して互いに通信しながら、それぞれ並列的に動作可能とされている。
I/Oコントローラ233は、ブリッジ202に接続され、メインCPUコア231およびサブCPUコア232A〜232Hと、ブリッジ202との間の入出力を制御する。メモリコントローラ234は、マイクロプロセッサ230によるXDR(Extreme Data Rate)−RAM236に対するアクセスを制御する。XDR−RAM236は、このマイクロプロセッサ230全体のワークメモリとして用いられ、マイクロプロセッサ230が有する複数のCPUコアからのアクセスに応じられるように、データ転送速度を非常に高速としたタイプのRAMである。
このような構成において、8個のサブCPUコア232A〜232Hは、それぞれ独立的に符号化処理または復号化処理を行うことができる。また、メインCPUコア231は、サブCPUコア232A〜232Hが受け持つ処理以外の処理を実行する。例えば、メインCPUコア231は、サブCPUコア232A〜232Hそれぞれに対する動作制御や、ブリッジ202からI/Oコントローラ233を介して入力される信号に応じた処理などを行う。
4−2.符号化処理に対する適用例
上述した符号化装置1A、1Bおよび1Cの構成は、プログラムに従いマイクロプロセッサ230上で動作するソフトウェアとして構成される。図1を用いて説明した符号化装置1Aを例にとると、入力データ用メモリ10および出力データ用メモリ15、ならびに、LSB側データ用メモリ12およびMSB側データ用メモリ16は、それぞれXDR−RAM236の所定領域が用いられる。ハードディスクドライブ206の所定領域をこれらのメモリとして用いることも考えられる。
ここで、上述したように、サブCPUコア232A〜232Hは、それぞれ独立的に動作可能であるので、符号化処理において独立的に処理可能な処理のそれぞれを、サブCPUコア232A〜232Hに対して分散的に割り当てると、処理を高速化することができる。処理のサブCPUコア232A〜232Hに対する割り当ては、プログラムによって指定することができる。
例えば、画素データをデータ分離部11で分離した後の、LSB側ビットおよびMSB側ビットに対する圧縮符号化処理は、それぞれ独立的に処理可能である。また、R、GおよびB各色の画素データに対する圧縮符号化処理は、各色毎の独立的な処理が可能である。また、画面を所定に分割した各領域に対して圧縮符号化を行う場合、分割された各領域に対する圧縮符号化処理は、それぞれ独立的に処理可能である。
このような、独立的に処理可能なそれぞれの処理に対して、サブCPUコア232A〜232Hをそれぞれ割り当てる。以下では、R、GおよびB各色それぞれの画素データについて、MSB側ビットおよびLSB側ビットのそれぞれに対してサブCPUコアを割り当てるものとする。
例えば、R、GおよびB色の画素データそれぞれのMSB側ビットに対する圧縮符号化処理を、サブCPUコア232A、232Bおよび232Cにそれぞれ割り当てる。すなわち、これらサブCPUコア232A、232Bおよび232Cのそれぞれにおいて、MSB側ビットの圧縮符号化を行う1重目ランレングス処理部17および2重目ランレングス処理部18による処理がソフトウェア的に実行される。
同様に、R、GおよびB色の画素データそれぞれのLSB側ビットに対する圧縮符号化処理を、サブCPUコア232D、232Eおよび232Fにそれぞれ割り当てる。すなわち、これらサブCPUコア232D、232Eおよび232Fのそれぞれにおいて、LSB側ビットの圧縮符号化を行うDPCM部13およびハフマン符号化部14による処理がソフトウェア的に実行される。
データ分離部11における、画素データに対するMSB側ビットとLSB側ビットとの分離処理は、メインCPUコア231において行うことができる。符号化処理が割り当てられていないサブCPUコア232G、232Hなどに、この分離処理を割り当ててもよい。また、サブCPUコア232A〜232Fそれぞれの符号化処理をメインCPUコア231により監視および制御することができる。
この図61の構成の装置による画像データの符号化処理について、概略的に説明する。図60を用いて説明した場合と同様に、圧縮符号化すべきベースバンドのディジタルビデオデータが外部からビデオI/F220に対して供給され、例えばハードディスクドライブ206に格納される。マイクロプロセッサ230中のメインCPUコア231は、ハードディスクドライブ206に格納されたディジタルビデオデータを例えばフレーム単位で読み出てXDR−RAM236に転送し、XDR−RAM236上に入力データ用メモリ10として割り当てられた第1の領域に格納される。
サブCPUコア232A〜232Fのそれぞれは、XDR−RAM236上の第1の領域に格納された1フレーム分のディジタルビデオデータを、例えば画面の左上隅の対応する画素から順に、水平方向に読み出す。例えば、サブCPUコア232A〜232Fのそれぞれは、自分が処理するデータをXDR−RAM236から読み出すように、メモリコントローラ234に対して要求する。メモリコントローラ234は、この要求に応じて、XDR−RAM236から所定にデータを読み出し、読み出したデータを対応するサブCPUコア232A〜232Fに対してそれぞれ供給する。
サブCPUコア232A〜232Fのそれぞれは、供給されたデータに対して、上述の実施の第1の形態、実施の第1の形態の第1の変形例、実施の第1の形態の第2の変形例、あるいは、実施の第1の形態の第3の変形例、若しくは、実施の第2の形態、実施の第2の形態の第1の変形例、実施の第2の形態の第2の変形例、または、実施の第2の形態の第3の変形例による符号化方法により、圧縮符号化を施す。符号化処理は、サブCPUコア232A〜232C、ならびに、サブCPUコア232D〜232Fにおいて、それぞれ並列的に行うことができる。
一例として、R色の画素データに基づくMSB側ビットの圧縮符号化を行うサブCPUコア232Aは、供給されたR色の画素データに基づくMSB側ビットのデータに対して、MSB側ビット単位および所定バイト単位のランレングス処理を所定に行い圧縮符号化する。圧縮符号化されたMSB側圧縮符号化データは、メモリコントローラ234の制御に基づきXDR−RAM236に出力データ用メモリ15として割り当てられた第2の領域の所定のアドレス、例えば、サブCPUコア232Aに対して割り当てられたアドレスに書き込まれる。
他の例として、R色の画素データに基づくLSB側ビットの圧縮符号化を行うサブCPUコア232Dは、供給されたR色の画素データに基づくLSB側ビットのデータに対して、DPCM符号化処理およびハフマン符号化処理を施して圧縮符号化する。圧縮符号化されたLSB側圧縮符号化データは、メモリコントローラ234の制御に基づきXDR−RAM236に出力データ用メモリ15として割り当てられた第2の領域の所定のアドレス、例えば、サブCPUコア232Dに対して割り当てられたアドレスに書き込まれる。
1フレーム分の圧縮符号化処理が終了すると、XDR−RAM236上の第2の領域から、圧縮符号化データが所定に読み出され出力される。例えば、XDR−RAM236から読み出された圧縮符号化データは、ハードディスクドライブ209に一旦、格納され、USB I/F207や通信I/F215を介して外部に出力されたり、ドライブ装置211に装填された記録可能な記録媒体に記録される。
このように、この実施の第3の形態では、画像データに対する圧縮符号化処理を、複数のサブCPUコア232A〜232Hにより、画像データの所定の単位毎に並列的に行うようにしている。そのため、画像データの圧縮符号化処理を、例えば図60を用いて説明した、1個のCPU203により処理を行う場合に比べて、極めて高速に行うことができる。
4−3.復号化処理に対する適用例
復号化装置および復号化処理についても、同様である。すなわち、復号化装置2A、2Bおよび2Cの構成は、プログラムに従いマイクロプロセッサ230上で動作するソフトウェアとして構成される。図20を用いて説明した復号化装置2Aを例にとると、入力メモリ30、MSB側出力メモリ34およびMSB側出力メモリ37は、それぞれXDR−RAM236の所定領域が用いられる。ハードディスクドライブ206の所定領域をこれらのメモリとして用いることも考えられる。
ここで、上述したように、サブCPUコア232A〜232Hは、それぞれ独立的に動作可能であるので、復号化処理において独立的に処理可能な処理のそれぞれを、サブCPUコア232A〜232Hに対して分散的に割り当てると、処理を高速化することができる。
例えば、LSB側圧縮符号化データおよびMSB側圧縮符号化データに対する復号化処理は、それぞれ独立的に処理可能である。また、圧縮符号化の際に、R、GおよびB各色の画素データをそれぞれ符号化した場合、これら圧縮符号化されたR、GおよびB各色の圧縮符号化データに対する復号化処理は、それぞれ独立的に処理可能である。また、圧縮符号化の際に、画面を所定に分割して分割された各領域に対してそれぞれ符号化した場合、分割された各領域の圧縮符号化データに対する復号化処理は、それぞれ独立的に処理可能である。
上述した符号化処理の場合と同様に、このような独立的に処理可能なそれぞれの処理に対して、サブCPUコア232A〜232Hをそれぞれ割り当てる。処理のサブCPUコア232A〜232Hに対する割り当ては、プログラムによって指定することができる。以下では、R、GおよびB各色それぞれの画素データに基づくLSB側ビットおよびMSB側ビットが圧縮符号化されたLSB側圧縮符号化データおよびMSB側圧縮符号化データのそれぞれに対して、サブCPUコアを割り当てるものとする。
例えば、R、GおよびB色の画素データそれぞれのMSB側ビットが圧縮符号化されたMSB側圧縮符号化データに対する復号化処理を、サブCPUコア232A、232Bおよび232Cにそれぞれ割り当てる。すなわち、これらサブCPUコア232A、232Bおよび232Cのそれぞれにおいて、MSB側圧縮符号化データの復号化処理を行う1重目復号化部32および2重目復号化部33による処理がソフトウェア的に実行される。
同様に、R、GおよびB色の画素データそれぞれのLSB側ビットが圧縮符号化されたLSB側圧縮符号化データに対する復号化処理を、サブCPUコア232D、232Eおよび232Fにそれぞれ割り当てる。すなわち、これらサブCPUコア232D、232Eおよび232Fのそれぞれにおいて、LSB側圧縮符号化データの復号化処理を行うハフマン復号化部35およびDPCM復号化部36による処理がソフトウェア的に実行される。
メモリ制御部31における、入力メモリ30からのデータの読み出し制御や、データ統合部38における復号化されたMSB側ビットとLSB側ビットとの統合処理は、例えばメインCPUコア231の制御に基づきメモリコントローラ234において行うことができる。また、サブCPUコア232A〜232Fそれぞれの復号化処理をメインCPUコア231により監視および制御することができる。
この図61の構成の装置による、画像データが圧縮符号化された圧縮符号化データの復号化処理について、概略的に説明する。図60を用いて説明した場合と同様に、復号化すべき圧縮符号化データが、例えばUSB I/F207や通信I/F215、圧縮符号化データが記録された記録媒体を介して供給され、ハードディスクドライブ206に格納される。
MSB側圧縮符号化データとLSB側圧縮符号化データとが1系統で供給される場合は、1のファイルとしてハードディスクドライブ206に格納される。MSB側圧縮符号化データとLSB側圧縮符号化データとがそれぞれ独立的に供給される場合は、MSB側圧縮符号化データが格納されるファイルと、LSB側圧縮符号化データが格納されるファイルとの2ファイルがハードディスクドライブ206に格納される。例えばメインCPUコア231は、ハードディスクドライブ206に格納された圧縮符号化データを、例えばフレーム単位で読み出し、XDR−RAM236に転送する。圧縮符号化データは、XDR−RAM236上の入力メモリ30として割り当てられた第1の領域に格納される。
サブCPUコア232A〜232Fは、XDR−RAM236上の第1の領域に格納された圧縮符号化データを所定に読み込み、LSB側圧縮符号化データおよびMSB側圧縮符号化データのそれぞれに対して、圧縮符号化データの符号化方法に応じて、上述の実施の第1の形態、実施の第1の形態の第1の変形例、実施の第1の形態の第2の変形例、あるいは、実施の第1の形態の第3の変形例、若しくは、実施の第2の形態、実施の第2の形態の第1の変形例、実施の第2の形態の第2の変形例、または、実施の第2の形態の第3の変形例による復号化方法により、復号化を施す。なお、圧縮符号化データの符号化方法は、予め分かっているものとする。
XDR−RAM236からの圧縮符号化データの読み出しに際して、上述の実施の第1の形態や実施の第2の形態のように、圧縮符号化データがMSB側圧縮符号化データとLSB側圧縮符号化データとがインターリーブされて供給される場合の制御は、例えば以下のようになされる。すなわち、MSB側圧縮符号データを復号化するサブCPUコア232A〜232Cによるデータの読み出しと、LSB側圧縮符号化データを復号化するサブCPUコア232D〜232Fによるデータの読み出しとが所定単位で交互に行われるように、例えばサブCPUコア232A〜232C、ならびに、サブCPUコア232D〜232Fの読み出し要求に応じて、メインCPUコア231により制御される。
また、上述の実施の第1の形態の第1の変形例や、実施の第2の形態の第2の変形例のように、1系統にMSB側圧縮符号化データとLSB側圧縮符号化データとが分離して供給される場合のXDR−RAM236からの圧縮符号化データの読み出し制御は、例えば下記のようになされる。すなわち、メモリコントローラ234は、サブCPUコア232A〜232C、ならびに、サブCPUコア232D〜232Fの読み出し要求に応じたメインCPUコア231の制御に基づき、データの先頭に配置された圧縮符号データ長情報に基づきMSB側圧縮符号化データとLSB側圧縮符号化データとをそれぞれ読み出し、MSB側圧縮符号化データをサブCPUコア232A〜232Cに供給し、LSB側圧縮符号化データをサブCPUコアD〜232Fに供給する。
さらに、上述の実施の第1の形態の第2の変形例や、実施の第2の形態の第2の変形例のように、MSB側圧縮符号化データとLSB側圧縮符号化データとがそれぞれ独立して供給される場合のXDR−RAM236からの圧縮符号化データの読み出し制御は、例えば下記のようになされる。すなわち、メモリコントローラ234は、サブCPUコア232A〜232C、ならびに、サブCPUコア232D〜232Fの読み出し要求に応じたメインCPUコア231の制御に基づき、MSB側圧縮符号化データとLSB側圧縮符号化データとをそれぞれ読み出し、MSB側圧縮符号化データをサブCPUコア232A〜232Cに供給し、LSB側圧縮符号化データをサブCPUコアD〜232Fに供給する。
サブCPUコア232A〜232C、ならびに、サブCPUコア232D〜232Fは、供給された圧縮符号化データをそれぞれ所定に復号化する。復号化処理は、サブCPUコア232A〜232C、ならびに、サブCPUコア232D〜232Fにおいて、それぞれ並列的に行うことができる。
サブCPUコアにおける復号化処理の一例として、R色の画素データに基づくMSB側ビットが圧縮符号化されたMSB側圧縮符号化データを復号化するサブCPUコア232Aは、供給されたMSB側圧縮符号化データに対してMSB側ビット単位および所定バイト単位のランレングス処理に対する復号化処理を施し、復号化されたMSB側ビットを、XDR−RAM236上のMSB側出力メモリ34として割り当てられた第2の領域に所定に格納する。
サブCPUコアにおける復号化処理の他の例として、R色の画素データに基づくLSB側ビットが圧縮符号化されたLSB側圧縮符号化データを復号化するサブCPUコア232Dは、供給されたLSB側圧縮符号化データに対してハフマン符号の復号化処理およびDPCMの復号化処理を施し、復号化されたLSB側ビットを、XDR−RAM236上のLSB側出力メモリ37として割り当てられた第3の領域に所定に格納する。
例えば1フレーム分の復号化処理が終了すると、メインCPUコア231は、XDR−RAM236上の第2および第3の領域に格納された、復号化されたMSB側ビットおよびLSB側ビットをそれぞれ所定に読み出すようにメモリコントローラ234を制御し、MSB側ビットとLSB側ビットとの統合処理を行う。統合処理され元の量子化ビット数が復元され復号化された画素データは、例えばハードディスクドライブ206に一旦、格納され、USB I/F207や通信I/F215、ドライブ装置211に装填された記録可能な記録媒体を介して出力される。
このように、この実施の第3の形態では、画像データが圧縮符号化された圧縮符号化データに対する復号化処理を、複数のサブCPUコア232A〜232Hにより、圧縮符号化データの所定の単位毎に並列的に行うようにしている。そのため、圧縮符号化データの復号化処理を、例えば図60を用いて説明した、1個のCPU203により処理を行う場合に比べて、極めて高速に行うことができる。