以下、図面について、本発明の実施の形態を詳述する。なお説明は以下の順序で行う。
1.第1の実施の形態(両端からの可変長復号による並列処理)
2.第2の実施の形態(複数データを交互に記憶することによる並列処理)
3.第3の実施の形態(第1及び第2の実施の形態の組み合わせ)
4.他の実施の形態
<1.第1の実施の形態>
[1−1.エンコーダの構成]
図5における10は、全体としてエンコーダを示している。エンコーダ10は、入力端子11を介して画像データが供給されると、当該画像データに対してエンコード処理を実行することにより、可変長符号からなるビットストリームを生成し、出力端子15を介して出力するようになされている。
具体的に入力端子11は、入力された画像データを分離部12に供給する。図6に示すように、画像データBLは、1フレームがHピクセル×Vピクセルで構成されている。画像データBLは4:2:2方式でなり、64ピクセル分の画素値を固定長符号でなる64の輝度データ(Y)と、固定長符号でなる各32の色差データ(Cb)及び(Cr)によって表している。
画像データBLは、この64ピクセル分のブロックを処理ブロックとし、1フレームの画素数に応じた数の処理ブロックによって1フレーム分の画像を表している。
分離部12は、画像データBLが供給されると、図7に示すように、当該画像データBLを処理ブロックごとに分離すると共に、当該処理ブロックを輝度データ(Y)と色差データ(Cb)及び(Cr)とに分離する。以下、この分離された輝度データ(Y)を前半ブロックDBaと呼び、色差データ(Cb)及び(Cr)を後半ブロックDBbと呼ぶ。
分離部12は、前半ブロックDBa及び後半ブロックDBbを可変長符号部13に供給する。
図8に示すように、可変長符号部13(図5)は、前半データブロックDBa及び後半ブロックDBbをVLC(Variable Length Coding)テーブルを用いて可変長符号化することにより可変長符号でなる前半可変長符号列VLa及び後半可変長符号列VLbをそれぞれ生成する。この結果、前半可変長符号列VLa及び後半可変長符号列VLbは、各64の可変長符号(a0〜a63、b0〜b63)を有することになる。
なお可変長符号部13は、固定長符号に対する量子化処理又は可変長符号における下位ビットプレーンの切り捨てによるポスト量子化処理を併用することにより、前半可変長符号列VLa及び後半可変長符号列VLbを所定の符号量以下に抑制するようになされている。
そして可変長符号部13は、当該前半可変長符号列VLa及び後半可変長符号列VLbをビットストリーム生成部14(図5)へ供給する。
図9(A)及び(B)に示すように、ビットストリーム生成部14は、前半可変長符号列VLa及び後半可変長符号列VLbを結合する。このときビットストリーム生成部14は、前半可変長符号列VLa及び後半可変長符号列VLbの間に緩衝データDDとしてダミーデータを挟むことにより、固定符号長でなる符号長固定ブロックVLxを生成する。
なおビットストリーム生成部14は、前半可変長符号列VLaと後半可変長符号列VLbとを加算した符号長が符号長固定ブロックVLxの固定符号長と同一になる場合には、緩衝データDDを挟まないようになされている。
このときビットストリーム生成部14は、図9(C)及び(D)に示すように、後半可変長符号列VLbの先頭ビットが符号長固定ブロックVLxの最後尾にくるよう後半可変長符号列VLbをミラー状に反転させる。例えば後半可変長符号列VLbが「0110001001100・・・」であった場合には、「・・・0011001000110」に並べ替える。
そしてビットストリーム生成部14は、符号長固定ブロックVLxを順次生成して順に結合することにより、ビットストリームBSwを生成するようになされている。
なお上述した一連のエンコード処理は、ハードウェアにより実行させることもでき、またソフトウェアにより実行させることも可能である。エンコード処理をソフトウェアによって実現する場合、CPU(Central Processing Unit)及びRAM(Random Access Memory)に仮想的にエンコーダ10が形成される。そしてROM(Read Only Memory)に格納されたエンコードプログラムをRAMに展開することにより、エンコード処理が実行される。
このようにエンコーダ10は、処理ブロックを2つのブロック(前半ブロックDBa及び後半ブロックDBb)に分離してVLC処理を施し、前半可変長符号列VLa及び後半可変長符号列VLbを生成する。そしてエンコーダ10は、緩衝データDDを間に挟んで前半可変長符号列VLa及び後半可変長符号列VLbを結合し、符号長が固定でなる符号長固定ブロックVLxを生成するようにした。
これによりエンコーダ10は、符号長固定ブロックVLxにおける先頭ビットと最後尾ビットとの間隔を常に一定にすることができる。
[1−2.デコーダの構成]
次に、ビットストリームBSwを復号するデコーダ30について説明する。図10に示すように、デコーダ30は、ビットストリームBSwが供給されると、当該ビットストリームBSwに対して可変長復号処理である並列デコード処理を実行し、画像データBLを生成するようになされている。
デコーダ30は、入力端子31を介してビットストリームBSwが供給されると、並列デコード処理を開始し、当該ビットストリームBSwから2つの復号処理部(第1の復号処理部33及び第2の復号処理部34)によって固定長符号でなる復号データを同時に生成する。そしてデコーダ30は、出力端子36を介して復号データからなる画像データBLを出力するようになされている。
ここで図11(A)に示すように、ビットストリームBSwは、符号長が固定でなる符号長固定ブロックVLxが連なって形成されている。このためデコーダ30は、符号長固定ブロックVLxの符号長から当該符号長固定ブロックVLxの始端及び終端を認識することができ、ビットストリームBSwにおける復号開始位置を算出することができる。
従ってデコーダ30は、図11(B)に示すように、符号長固定ブロックVLxの始端を復号開始位置として特定し、当該始端に読出開始位置を示す開始ポインタP1を設定する。さらにデコーダ30は、当該開始ポインタP1から後方向にデータを順次読み出すことにより、前半可変長符号列VLaを読み出すことができる。
また図11(C)に示すように、符号長固定ブロックVLxは、その後半部分に後半ミラー可変長符号列VLmを含んでいる。この後半ミラー可変長符号列VLmは、後半可変長符号列VLbがミラー化されてなり、その終端が符号長固定ブロックVLxの終端を形成している。
このためデコーダ30は、符号長固定ブロックVLxの終端を復号開始位置として特定し、当該終端に開始ポインタP2を設定する。さらにデコーダ30は、当該開始ポインタから前方向にデータを順次読み出すことより、図11(D)に示すように、後半ミラー可変長符号列VLmを後半可変長符号列VLbとして読み出すことができる。
そしてデコーダ30は、復号に使用された分だけ開始ポインタを移動させることにより、前半可変長符号列VLa及び後半可変長符号列VLbから順次読み出される復号対象ビットを可変長復号化し、復号データを生成する。以下、復号対象ビットの読出及び可変長復号の一連の処理を復号データ生成処理と呼ぶ。
すなわち図12に示すように、デコーダ30は、第1の可変長復号部33によって前半可変長符号列VLaに対して復号データ生成処理を実行し、前半復号データBBaを生成する。またデコーダ30は、第2の可変長復号部34によって後半可変長符号列VLbに対して復号データ生成処理を実行し、後半復号データBBbを生成する。
そして図13に示すように、デコーダ30は、画像データ生成部36によって前半復号データBBa及び後半復号データBBbを結合すると共に、結合された復号ブロックを順次連結することにより、画像データBLを生成するようになされている。
具体的にデコーダ30(図10)は、入力端子31を介して供給されるビットストリームBSwをメモリ32に供給する。この結果メモリ32には、ビットストリームBSwのデータが順次記憶される。
並列デコード部40における読出制御部35は、ビットストリームBSwの先頭部分を1つめの符号長固定ブロックVLxの先頭ビット(すなわち復号開始位置)として認識する。読み出し制御部35は、第1の可変長復号部33に対応する開始ポインタP1を設定し、当該符号長固定ブロックVLxの先頭ビットから後方向(すなわち順方向に)読み出しを開始する。
すなわち読出制御部35は、符号長固定ブロックVLxの先頭ビットから可変長符号の最大符号量と同一ビット数だけデータ(すなわち復号対象ビット)を読み出し、第1の可変長復号部33に供給させる。この結果第1の可変長復号部33の図示しないバッファメモリには、復号対象ビットが記憶される。
第1の可変長復号部33は、VLD(Variable Length Decoding)テーブルを参照することにより、復号対象ビットから復号データを生成し、これを画像データ生成部36に供給する。そして読出制御部35は、復号データの生成に使用した分だけ開始ポインタP1を移動させ、次の復号対象ビットの読み出しを開始する。
そして読出制御部35は、64個の復号データを生成すると、現在処理中の前半可変長符号列VLaの可変長復号を終了したと認識し、次の符号長固定ブロックVLxの始端部分に開始ポインタP1を移動させる。すなわち読出制御部35は、現在処理中の前半可変長符号列VLa(すなわち符号長固定ブロックVLx)の始端から符号長固定ブロックVLxの固定符号長だけ後の位置に開始ポインタP1を移動させる。
これにより読出制御部35は、次の符号長固定ブロックVLxの復号開始位置である始端、すなわち前半可変長符号列VLaの始端に開始ポインタP1を移動させることができ、次の前半可変長符号列VLaに対する復号データ生成処理を開始することができる。
また開始ポインタP1を設定した1つめの符号長固定ブロックVLxの先頭ビットから符号長固定ブロックVLxの固定符号長だけ後に移動した位置が次の符号長固定ブロックVLxの始端となる。
そこで読出制御部35は、次の符号長固定ブロックVLxの始端よりも1[bit]だけ前を現在処理中の符号長固定ブロックVLxの終端(すなわち復号開始位置)と認識し、第2の可変長復号部34に対応する開始ポインタP2を設定する。
すなわち読出制御部35は、符号長固定ブロックVLxの先頭ビットから固定符号長マイナス1[bit]の位置に開始ポインタP2を設定する。そして読出制御部35は、当該符号長固定ブロックVLxの最後尾ビットから、前方向に(すなわち順方向とは逆方向に)符号対象ビットの読み出しを開始する。
読出制御部35は、符号長固定ブロックVLxの最後尾ビットから可変長符号の最大符号量と同一ビット数だけデータ(すなわち復号対象ビット)を読み出し、第2の可変長復号部34に供給させる。この結果第2の可変長復号部34の図示しないバッファメモリには、復号対象ビットが記憶される。
第2の可変長復号部34は、VLDテーブルを参照することにより、復号対象ビットから復号データを生成し、これを画像データ生成部36に供給する。そして読出制御部35は、復号データの生成に使用した分だけ開始ポインタP2を逆方向に移動させ、次の復号対象ビットの読み出しを開始する。
そして読出制御部35は、64個の復号データを生成すると、現在処理中の後半可変長符号列VLbの可変長復号を終了したと認識し、次の符号長固定ブロックVLxの終端(すなわち復号開始位置)に開始ポインタP2を移動させる。すなわち読出制御部35は、現在処理中の後半ミラー可変長符号列VLm(すなわち符号長固定ブロックVLx)の終端から符号長固定ブロックVLxの固定符号長だけ後の位置に開始ポインタP2を移動させる。
これにより読出制御部35は、次の符号長固定ブロックVLxの復号開始位置である終端、すなわち後半ミラー可変長符号列VLmの始端に開始ポインタを移動させることができ、次の後半可変長符号列VLbに対する復号データ生成処理を開始することができる。
そして画像データ生成部36は、第1の可変長復号部33から供給される64個の復号データ(すなわち前半復号データBBa)と第2の可変長復号部34から供給される64個の復号データ(すなわち後半復号データBBb)とを連ねて結合する。さらに画像データ生成部36は、結合された復号ブロックを順次連結することにより、画像データBLを生成し得るようになされている。
なお上述した一連の並列デコード処理は、ハードウェアにより実行させることもでき、またソフトウェアにより実行させることも可能である。並列デコード処理をソフトウェアによって実現する場合、CPU及びRAMに仮想的にデコーダ30が形成される。そしてROMに格納された可変長復号プログラムをRAMに展開することにより、並列デコード処理が実行される。
このようにデコーダ30は、ビットストリームBSwにおける符号長固定ブロックVLxの始端及び終端から同時に復号データ生成処理を実行する。これによりデコーダ30は、2つの可変長復号部によって並列して復号データ生成処理を実行できるため、可変長復号処理を高速化し得るようになされている。
[1−3.具体的な処理手順]
[1−3−1.エンコード処理手順]
次に、エンコードプログラムに従って実行されるエンコード処理手順RT1について、図14のフローチャートを用いて説明する。
エンコーダ10は、画像データBLが供給されると、エンコード処理手順RT1を開始し、ステップSP1へ移る。
ステップSP1において、エンコーダ10は、画像データBLを前半ブロックDBa及び後半ブロックDBbに分離すると、次のステップSP2へ移る。
ステップSP2において、エンコーダ10は、分離した単位(すなわち前半ブロックDBa及び後半ブロックDBb)ごとに画像データBLを可変長符号化し、前半可変長符号列VLa及び後半可変長符号列VLbを生成すると、次のステップSP3へ移る。
ステップSP3において、エンコーダ10は、後半可変長符号列VLbに対してミラー処理を実行し後半ミラー可変長符号列VLmを生成すると、次のステップSP4へ移る。
ステップSP4において、エンコーダ10は、前半可変長符号列VLa及び後半ミラー可変長符号列VLmの間に緩衝データDDを挟んで結合することにより、固定符号長でなる符号長固定ブロックVLxを生成する。さらにエンコーダ30は、新たに生成された符号長固定ブロックVLxを既に生成されている符号長固定ブロックVLxに結合することによりビットストリームBSwを生成すると、終了ステップへ移ってエンコード処理手順RT1を終了する。
[1−3−2.並列デコード処理手順]
次に、並列デコードプログラムに従って実行される並列デコード処理手順RT2について、図15に示すフローチャートを用いて説明する。
デコーダ30は、ビットストリームBSwが供給されると、並列デコード処理手順RT2を開始し、供給されるビットストリームBSwをメモリ32に順次記憶し、次のステップSP11へ移る。
ステップSP11において、デコーダ30は、メモリ32において処理対象となる符号長固定ブロックVLxの始端及び終端を復号開始位置として設定する。
すなわちデコーダ30は、符号長固定ブロックVLxの始端を第1の可変長復号部33に対する復号開始位置として決定し、読出開始位置を表す開始ポインタP1を設定する。またデコーダ30は、符号長固定ブロックVLxの終端を第2の可変長復号部34に対する復号開始位置として決定し、開始ポインタP2を設定すると、次のステップSP13へ移る。
ステップSP13において、デコーダ30は、開始ポインタP1から順方向へ、開始ポインタP2から逆方向へ向けてメモリ32からデータを読み出すことにより、復号対象ビットを順次読み出すと、次のステップSP14へ移る。
ステップSP14において、デコーダ30は、復号対象ビットからVLDテーブルを参照して復号データを生成すると、次のステップSP15へ移る。
ステップSP15において、デコーダ30は、全ての可変長復号部において、処理対象となる符号長固定ブロックVLxに対する復号データの生成が終了したか否かについて判別する。
ここで否定結果が得られた場合、このことは未だ符号長固定ブロックVLxに可変長復号化すべき可変長符号が存在することを表している。このときデコーダ30は、ステップSP13へ戻り、ステップSP14において復号データの生成に使用した復号対象ビットの数だけ開始ポインタP1及びP2を移動した位置から復号対象ビットの読み出しを開始し、処理を継続する。
これに対してステップSP15において肯定結果が得られた場合、デコーダ30は、前半復号データBBaと後半復号データBBbとを結合して復号ブロックを生成する。さらにデコーダ30は、新たに生成した復号ブロックを既に生成されている復号ブロックに対して結合することにより画像データBLを生成すると、終了ステップへ移って並列デコード処理を終了する。
[1−4.動作及び効果]
以上の構成において、エンコーダ10は、画像データBLを複数のデータブロックである前半ブロックDBa及び後半ブロックDBbに分離する。エンコーダ10は、前半ブロックDBa及び後半ブロックDBbを可変長符号化して可変長符号列を生成する。
さらにエンコーダ10は、可変長符号部13によって生成された2つの可変長符号列である前半可変長符号列VLa及び後半可変長符号列VLbを組み合わせることにより始端及び終端から並列して可変長復号化される符号ブロックとしての符号長固定ブロックVLxを生成する。このときエンコーダ10は、符号長固定ブロックVLxを連ねることにより、符号長固定ブロックVLxの境界がわかるようにビットストリームBSwを生成するようにした。
ここで一般的に可変長符号を並列して可変長復号処理をさせる場合、単純に復号開始位置を示す復号開始位置情報をビットストリーム内に含有させることが考えられる。単純に復号開始位置情報を含有させる場合、1つの復号開始位置に対して1つの復号開始位置情報を含有させる必要がある。
本発明のエンコーダ10は、符号長固定ブロックVLxの境界に基づいて符号長固定ブロックVLxの始端及び終端から復号を開始させるため、符号長固定ブロックVLxの境界という1つの復号開始位置情報に対して2つの復号開始位置を特定させることができる。この結果エンコーダ10は、ビットストリームBSxに含有させる復号開始位置情報の情報量を低減させることができ、当該復号開始位置情報に起因して生じる符号量の増大を抑制することができる。
またエンコーダ10は、符号ブロックの符号長を固定長にすることにより、当該符号ブロックの境界がわかるようにした。
これによりエンコーダ10は、デコーダに境界を表す情報を検出させなくても、符号長に基づいて単純に復号開始位置を特定させることができる。
さらにエンコーダ10は、前半可変長符号列VLa及び後半可変長符号列VLbの間に緩衝データDDを挟むことにより符号長を固定して符号長固定ブロックVLxを生成する。
これによりエンコーダ10は、前半可変長符号列VLa及び後半可変長符号列VLb自体の符号量を大きく調整しなくても符号長固定ブロックVLxを固定符号長で生成することができ、処理負荷を低減することができる。
またエンコーダ10は、前半に配列される前半可変長符号列VLaを始端から順方向に並べると共に、後半に配列される後半可変長符号列VLbを終端から逆方向に並べることにより、符号長固定ブロックVLxを生成する。
これによりエンコーダ10は、デコーダに前半可変長符号列VLaを始端から順方向に読み出させ、後半可変長符号列VLbを終端から逆方向に読み出させればよく、後半可変長符号列VLbの並べ替えをさせなくて済む。
またデコーダ30は、可変長符号でなる符号長固定ブロックVLxを複数有し、当該符号長固定ブロックVLxの境界がわかるように生成されたビットストリームBSxを受け取る。デコーダ30は、符号長固定ブロックVLxの境界に基づいて当該符号長固定ブロックVLxの始端及び終端を特定する。そしてデコーダ30は、ビットストリームBSxを符号長固定ブロックVLxの始端及び終端から並列して、可変長復号としての復号データ生成処理を実行する。
これによりデコーダ30は、符号長固定ブロックVLxの始端及び終端を復号開始位置として、並列して復号データ生成処理を実行できるため、ビットストリームBSxに対する可変長復号処理を高速化することができる。
さらにデコーダ30は、始端から順方向に配列された前半可変長符号列VLaと、終端から逆方向に配列された後半可変長符号列VLbとからなる符号長固定ブロックVLxを、同一の復号テーブル(すなわちVLDテーブル)を用いて復号データ生成処理を実行する。
ここでデコーダ30は、後半可変長符号列VLbを逆方向に読み出すことにより、正しい順序で後半可変長符号列VLbを読み出すことができる。このためデコーダ30は、わざわざミラー化したVLDテーブルを準備しなくても、前半可変長符号列VLaと共通のVLDテーブルを使用して後半可変長符号列VLbに対して復号データ生成処理を実行することができる。
以上の構成によれば、エンコーダ10は、画像データBLを処理ブロック単位に分割し、可変長符号化することにより生成された2つの可変長符号列(前半可変長符号列VLa及び後半可変長符号列VLb)を組み合わせて1つの符号ブロックである符号長固定ブロックVLxを生成する。そしてエンコーダ10は、符号長固定ブロックVLxの境界がわかるようにビットストリームBSxを生成する。
これによりデコーダ30は、符号長固定ブロックVLxの境界から2つの復号開始位置(前半可変長符号列VLaの始端及び後半可変長符号列VLbの終端)を特定でき、並列して復号データ生成処理を実行することができる。
かくして本発明は、可変長復号処理を高速化し得るエンコーダ、符号方法及び符号プログラムが記録された記録媒体、並びにデコーダ、復号方法及び復号プログラムが記録された記録媒体を実現できる。
<2.第2の実施の形態>
図16〜図28は第2の実施の形態を示すもので、図5〜15に示す第1の実施の形態に対応する部分を同一符号で示している。第2の実施の形態のエンコーダ50では、ビットストリームBSrの生成方法が第1の実施の形態と異なっている。
[2−1.エンコーダの構成]
エンコーダ50は、画像データBLが供給されると、当該画像データに対してエンコード処理を実行することにより、可変長符号からなるビットストリームBSrを生成するようになされている。
図16に示すように、画像データBLは、4:2:2方式でなり、256ピクセル分の輝度データ(Y)、色差データ(Cb)及び(Cr)を処理ブロック単位としている。輝度データは、輝度値が周波数帯域で分割されることにより、高域成分でなる輝度データ(Ya)及び低域成分でなる輝度データ(Yb)に分割されている。
図17に示すように、エンコーダ50の入力端子51は、入力された画像データを分離部52に供給する。分離部52は、図18に示すように、供給された処理ブロックごとの画像データBLをそれぞれ輝度データ(Ya)及び(Yb)並びに色差データ(Cb)及び(Cr)に分離することにより、データブロックDBa〜DBdを順次生成する。
そして分離部52(図17)は、第1の可変長符号部61、第2の可変長符号部62、第3の可変長符号部63及び第4の可変長符号部64にデータブロックDBa〜DBdをそれぞれ供給する。なお以下、これらをまとめて可変長符号部61〜64と呼ぶ。
図19に示すように、可変長符号部61〜64は、データブロックDBa〜DBdに対してVLC処理を施し、可変長符号列VLa〜VLdをそれぞれ生成し、これらをビットストリーム生成部54へ供給する。
ビットストリーム生成部54は、可変長符号列VLa〜VLbによる入れ子ブロックVLyを生成し、当該入れ子ブロックVLyを連ねることによりビットストリームBSrを生成するようになされている。
ここで図20(A)に示すように、可変長符号列VLaは、128の可変長符号a0〜a127によって構成されている。可変長符号列VLaが有する各1[bit]の符号に対して「k〜0」の番号を附すると、可変長符号列VLaを図20(B)のように表すことができる。
同様に可変長符号列VLaが有する各1[bit]の符号に対して「l〜0」、「m〜0」、「n〜0」の番号を附すると、可変長符号列VLb〜VLdを図20(C)〜(E)のように表すことができる。
図21(A)〜(E)に示すように、ビットストリーム生成部54は、先頭ビットから1[bit]ずつデータを抽出し、可変長符号列VLa、VLb、VLc及びVLdの順に抽出したデータを連ねる。さらにビットストリーム生成部54は、2番目のビットから1[bit]ずつデータを抽出し、可変長符号列VLa、VLb、VLc及びVLdの順に抽出したデータを連ねる。そしてビットストリーム生成部54は、同様にして可変長符号列VLa〜VLdにおける全ての符号の並べ替えを実行する。
この結果入れ子ブロックVLyでは、a[k]、b[l]、c[m]、d[n]、a[k−1]、b[l−1]、c[m−1]、d[n−1]・・・a[x]、b[y]、c[z]、d[v]のように可変長符号列VLa、VLb、VLc及びVLdにおける各データが入れ子状に並ぶことになる。なおx、y、z、vは、それぞれ変数を示している。また以下、繰返して出現する1組のビット群(例えばa[k]、b[l]、c[m]、d[n]を1組とする)を、繰返ビットと呼ぶ。
ここで可変長符号列VLa〜VLdの符号長はそれぞれ異なっている。このため符号長の短い可変長符号列におけるデータが他の可変長符号列よりも先になくなってしまう。この場合図21(F)に示すように、ビットストリーム生成部54は、残りの可変長符号列のデータを互いに入れ子状にして並べ替えを継続する。
すなわちビットストリーム生成部54は、まず可変長符号列VLcの最後のデータc[0]を並べ終え、可変長符号列VLcにおける全てのデータの並べ替えが終了すると、残りの可変長符号列VLa、VLb及びVLdのデータのみを入れ子状にして並べ替えを継続する。この結果入れ子ブロックVLyでは、a[x]、b[y]、d[v]でなる繰返ビットが順次並ぶことになる。
次いでビットストリーム生成部54は、可変長符号列VLdの最後のデータd[0]を並べ終え、可変長符号列VLdにおける全てのデータの並べ替えが終了すると、残りの可変長符号列VLa及びVLbのデータのみを交互にして並べ替えを継続する。この結果入れ子ブロックVLyでは、a[x]、b[y]でなる繰返ビットが順次並ぶことになる。
さらにビットストリーム生成部54は、可変長符号列VLbの最後のデータb[0]を並べ終え、可変長符号列VLbにおける全てのデータの並べ替えが終了すると、残りの可変長符号列VLaのデータのみを連続して並べる。この結果入れ子ブロックVLyでは、a[0]が出現するまでの間、a[x]が連続して並ぶことになる。
このようにエンコーダ50は、可変長符号列VLa、VLb、VLc及びVLdにおける各符号を1[bit]ずつ入れ子状に並べ替えることにより、入れ子ブロックVLyを生成すると共に、当該入れ子ブロックVLyが連続するビットストリームBSrを生成する。
これによりエンコーダ50は、ビットストリームBSrにおいて可変長符号列VLa、VLb、VLc及びVLdのデータをそれぞれ所定の記録間隔で(すなわち4[bit]おきに)並べることができる。
[2−2.デコーダの構成]
図22に示すように、デコーダ80は、ビットストリームBSrが供給されると、当該ビットストリームBSrに対して可変長復号処理である並列デコード処理を実行し、画像データBLを生成するようになされている。
デコーダ80の入力端子81は、入れ子ブロックVLyからなるビットストリームBSrが供給されると、これをメモリ82に供給する。メモリ82は、読出制御部83の制御に従い、供給される入れ子ブロックVLyを順次記憶する。
デコーダ80は、4つの可変長復号部91〜94(すなわち第1の可変長復号部91、第2の可変長復号部92、第3の可変長復号部93及び第4の可変長復号部94)及び読出制御部83からなる並列デコード部90を有している。各可変長復号部91〜94は、読出制御部83の制御に従い、可変長符号列VLa、VLb、VLc及びVLdのデータをそれぞれ復号するようになされている。
ここで上述したように、入れ子ブロックVLyは、可変長符号列VLa、VLb、VLc及びVLdのデータが入れ子状に記録されている。読出制御部83は、入れ子ブロックVLyが記録されているアドレスから、復号開始位置情報及び読出間隔情報を生成し、可変長復号部91〜94に対してそれぞれ供給する。なお復号開始位置情報は、各可変長復号部91〜94が各入れ子ブロックVLyに対する可変長復号を開始すべきメモリ82上のアドレスを表す情報である。また読出間隔情報は各可変長復号部91〜94がデータを読み出すべき間隔を表している。
このとき読出制御部83は、処理対象となる入れ子ブロックVLyの先頭ビット、先頭から2番目のビット、先頭から3番目のビット、先頭から4番目のビット表す復号開始位置情報を可変長復号部91〜94にそれぞれ供給する。また読出制御部83は、「4」を表す読出間隔情報を可変長復号部91〜94にそれぞれ供給する。
図23(A)及び(B)に示すように、第1の可変長復号部91は、復号開始位置情報に従ってメモリ82に記憶されている入れ子ブロックVLyの先頭ビットに読出開始位置を表す開始ポインタP1を設定し、当該開始ポインタP1から4[bit]おきにデータを読み出す。すなわち第1の可変長復号部91は、可変長符号列VLaに由来するデータのみを復号対象ビットとして読み出し、図示しないバッファメモリに一時記憶する。
図23(C)及び(D)に示すように、第2の可変長復号部92は、復号開始位置情報に従ってメモリ82に記憶されている入れ子ブロックVLyの先頭ビットから2[bit]目に開始ポインタP2を設定し、当該開始ポインタP2から4[bit]おきにデータを読み出す。すなわち第2の可変長復号部92は、可変長符号列VLbに由来するデータのみを復号対象ビットとして読み出し、図示しないバッファメモリに一時記憶する。
図示しないが第3の可変長復号部93は、復号開始位置情報に従ってメモリ82に記憶されている入れ子ブロックVLyの先頭ビットから3[bit]目に開始ポインタP3を設定し、当該開始ポインタP3から4[bit]おきにデータを読み出す。すなわち第3の可変長復号部93は、可変長符号列VLcに由来するデータのみを復号対象ビットとして読み出し、図示しないバッファメモリに一時記憶する。
図示しないが第4の可変長復号部94は、復号開始位置情報に従って、メモリ82に記憶されている入れ子ブロックVLyの先頭ビットから4[bit]目に開始ポインタP4を設定し、当該開始ポインタP4から4[bit]おきにデータを読み出す。すなわちすなわち第4の可変長復号部94は、可変長符号列VLdに由来するデータのみを復号対象ビットとして読み出し、図示しないバッファメモリに一時記憶する。
次いで図24(A)に示すように、第1の可変長復号部91は、VLDテーブルを用いて復号対象ビットを可変長復号化し復号データを生成する。第1の可変長復号部91は、復号に使用されたデータのビット数(すなわち2[bit])だけ開始ポインタP1を移動させ、当該開始ポインタP1から4[bit]おきに復号対象ビットとしてデータを読み出す。
図24(B)〜(D)に示すように、第2の可変長復号部92、第3の可変長復号部93及び第4の可変長復号部94は、同様にして、VLDテーブルを用いて復号対象ビットを可変長復号化し復号データを生成する。
第2の可変長復号部92、第3の可変長復号部93及び第4の可変長復号部94は、同様にして復号に使用されたビット数(すなわち2[bit]、6[bit]、2[bit])だけ開始ポインタP2〜P4を移動させ、当該各開始ポインタから4[bit]おきに復号対象ビットとしてデータを読み出す。
そして可変長復号部91〜94は、以降は同様にして復号対象ビットを読出して復号データ生成処理を継続する。なお復号された復号データは、可変長復号部91〜94が有する図示しない復号データ用メモリに一時記憶される。
ここで図24(E)及び(F)に示すように、入れ子ブロックVLyは、その終端部分において、各可変長符号列VLa〜VLdに対応するデータの記録間隔が変化している。
すなわち入れ子ブロックVLyにおいて、可変長符号列VLcに基づくデータが終了すると、残りの可変長符号列VLa、VLb及びVLdに基づくデータの記録間隔が「4」から「3」に変化する。
また入れ子ブロックVLyにおいて、可変長符号列VLdに基づくデータが終了すると、残りの可変長符号列VLa及びVLbに基づくデータの記録間隔が「3」から「2」に変化する。
また入れ子ブロックVLyにおいて、可変長符号列VLdに基づくデータが終了すると、残りの可変長符号列VLaに基づくデータの記録間隔が「2」から「1」に変化し、可変長符号列VLaが連続的に記録された状態になる。
従って各可変長復号部91〜94は、仮に読出間隔「4」のまま入れ子ブロックVLyの終端部分まで復号対象ビットを読み出した場合には、各可変長符号列VLa〜VLdに基づいて復号データを生成することができなくなる。
そこでデコーダ80は、入れ子ブロックVLyの終端部分における記録間隔の変化に応じてメモリ82から復号対象ビットを読み出して復号データを生成する復号データ生成処理を再度行う終端処理を実行するようになされている。
具体的に可変長復号部91〜94は、128回目の復号データの生成処理が終了すると、127回目までと同様に、復号データに使用した分だけ各開始ポインタを移動させる。
このとき読出制御部83は、各開始ポインタの位置を確認し、最も前方向のアドレスに存在する開始ポインタを選択する。読出制御部83は、例えば可変長符号列VLcに対応する開始ポインタP3を選択すると、当該開始ポインタP3より読出間隔である4[bit]手前のアドレスが、復号データ生成処理を終了した可変長符号列VLcの最後のデータが記憶されていた位置(以下、これを先終了アドレスと呼ぶ)であると特定する。
読出制御部83は、先終了アドレス以降から、読出間隔を「3」に変更した上で、可変長符号列VLa、VLb及びVLdに対応する可変長復号部91、92及び94による復号データ生成処理を再度実行させる。
すなわち第1の可変長復号部91は、可変長符号列VLcの先終了アドレスを有する繰返しビットを含む可変長符号から生成された復号データ(以下、これを先終了復号データと呼ぶ)以降に生成された復号データを無効にする。さらに第1の可変長復号部91は、復号データ生成処理を当該先終了復号データから再度実行する。
例えば第1の可変長復号部91が118回目から復号データ生成処理を再実行し、第2の可変長復号部92が124回目から復号データ生成処理を再実行し、第4の可変長復号部94が127回目から復号データ生成処理を再実行する場合について考える。
読出制御部83は、可変長符号列VLcの先終了アドレスを表す先終了アドレス情報を可変長復号部91、92及び94に供給する。可変長復号部91、92及び94は、先終了復号データ及び以降に生成された復号データを無効にする。
例えば第1の可変長復号部91は、可変長符号列VLcの先終了アドレスが可変長符号列VLaにおける118回目に生成された復号データ生成処理に基づく復号データに使用されていた場合には、118回目以降に生成された復号データを無効にする。同様に第2の可変長復号部92は、124回目の復号データ生成処理以降に生成された復号データを無効にする。第4の可変長復号部94は、127回目の復号データ生成処理以降に生成された復号データを無効にする。
また可変長復号部91、92及び94は、各復号データ生成処理の際に設定された開始ポインタの位置をそれぞれ記憶している。そして可変長復号部91、92及び94は、先終了復号データが生成された復号データ生成処理の際に設定された位置に各開始ポインタを戻す。
すなわち第1の可変長復号部91は、開始ポインタP1を118回目の復号データ生成処理の位置に戻す。第2の可変長復号部92は開始ポインタP2を124回目の復号データ生成処理の位置に戻す。第4の可変長復号部94は、開始ポインタP4を127回目の復号データ生成処理の位置に戻す。
そして読出制御部83は、先終了アドレスまでは読出間隔を「4」に設定し、当該先終了アドレスを超えた次の繰返ビットから読出間隔を「3」に変更する旨を表す読出間隔情報を可変長復号部91、92及び94に供給する。
図25(A)に示すように、第1の可変長復号部91は、可変長符号列VLcが存在する間は4[bit]おきにデータを読み出す一方、可変長符号列VLcが存在しなくなった以降は3[bit]おきにデータを読み出すことができる。
この結果第1の可変長復号部91は、可変長符号列VLaのみを復号対象ビットとして読み出すことができ、可変長符号列VLaに基づく復号データを生成することができる。
同様にして可変長復号部92及び94は、読出制御部83の制御により先終了復号データが生成された復号データ生成処理から、当該復号データ生成処理を再度実行する。
ここで各可変長符号列の長さなどに応じて、先終了復号データが生成された復号データ生成処理の回数が相違する。このため再実行される復号データ生成処理の回数は、各可変長復号部91、92及び94ごとに異なっている。
第1の可変長復号部91は、118回目から残り11回の復号データ生成処理を実行する必要がある。第2の可変長復号部92は124回目から残り5回、第4の可変長復号部94は127回目から残り2回の復号データ生成処理を実行する必要がある。
このため第4の可変長復号部94は、2回の復号データ生成処理によって128回目の復号データ生成処理を終了する。このとき読出制御部83は、可変長符号列VLdの最後のアドレスと他の可変長復号部91及び92に対応する開始ポインタP1及び開始ポインタP2とを比較する。
例えば図25(C)に示すように、可変長符号列VLdの最後のアドレス(d[0])よりも前方向に開始ポインタP2が存在する場合、可変長符号列VLbのデータが先に終了する可能性がある。
そこで読出制御部83は、他の可変長復号部91及び92に対応する開始ポインタP1及びP2の全てが可変長符号列VLdの最後のアドレスを超えるまで、可変長復号部91及び92に復号データ生成処理を継続させる。
このとき図25(D)に示すように、読出制御部83は、開始ポインタP1及びP2の全てが可変長符号列VLdの最後のアドレスを超えた場合、可変長符号列VLdの最後のアドレスが先終了アドレスであると認識する。
なお開始ポインタP1及びP2のいずれかが可変長符号列VLdの最後のアドレスを超えることなく128回目の復号データ生成処理を終了した場合、読出制御部83は、前方向で終了した可変長符号列の最後のアドレスを先終了アドレスとして特定する。
図26(A)及び(B)に示すように、このとき第1の可変長復号部91は、読出制御部83の制御により、先終了復号データが生成された復号データ生成処理の位置まで開始ポインタP1を移動させる。また可変長復号部91は、先終了復号データ以降の復号データを無効にし、先終了アドレス後の繰返ビットに対する読出間隔を「2」に変更して復号データ生成処理を継続する。第2の可変長復号部92についても同様である。
図26(C)及び(D)に示すように、読出制御部83は、第2の可変長復号部92による128回目の復号データ生成処理が終了すると、同様にして先終了アドレスを特定する。そして第1の可変長復号部91は、読出制御部83の制御により、先終了復号データが生成された復号データ生成処理の位置まで開始ポインタP1を移動させる。また可変長復号部91は、先終了復号データ以降の復号データを無効にし、先終了アドレス後の繰返ビットに対する読出間隔を「1」に変更して復号データ生成処理を継続する。
読出制御部83は、第1の可変長復号部91による128回目の復号データ生成処理が終了すると、読出間隔が「1」であることから可変長符号列VLaの最後のビットが入れ子ブロックVLyの最終ビットであると認識する。そして読出制御部83は、当該入れ子ブロックVLyに対する並列デコード処理を終了すると共に、次の入れ子ブロックVLyに対する処理を開始するようになされている。
このようにデコーダ80は、複数の可変長符号列VLが入れ子状に記録されてなるビットストリームBSrを可変長符号列VLa〜VLdごとに読み出すようにした。これによりデコーダ80は、複数の可変長符号列VLa〜VLdを同時に可変長復号化して複数の復号データを生成することができ、可変長復号処理を高速化することができる。
[2−3.具体的な処理手順]
[2−3−1.エンコード処理手順]
次に、エンコードプログラムに従って実行されるエンコード処理手順RT3について、図27のフローチャートを用いて説明する。
エンコーダ50は、画像データBLが供給されると、エンコード処理手順RT3を開始し、ステップSP31へ移る。
ステップSP31において、エンコーダ50は、画像データBLを処理ブロック単位であるデータブロックDBに分離すると、次のステップSP32へ移る。
ステップSP32において、エンコーダ50は、分離した単位(すなわちデータブロックDB)ごとに画像データBLを可変長符号化し、複数の可変長符号列VLa〜VLdを生成すると、次のステップSP33へ移る。
ステップSP33において、エンコーダ30は、複数の可変長符号列VLa〜VLdを1[bit]ずつ入れ子状に配置することにより、入れ子ブロックVLyを生成する。さらにエンコーダ30は、新たに生成された入れ子ブロックVLyを既に生成された入れ子ブロックVLyに結合することによりビットストリームBSrを生成すると、終了ステップへ移ってエンコード処理手順RT3を終了する。
[2−3−2.並列デコード処理手順]
次に、並列デコードプログラムに従って実行される並列デコード処理手順RT4について、図28に示すフローチャートを用いて説明する。
デコーダ80は、ビットストリームBSrが供給されると、並列デコード処理手順RT4を開始し、供給されるビットストリームBSrをメモリ82に順次記憶し、次のステップSP41へ移る。
ステップSP41において、デコーダ80は、入れ子ブロックVLyを構成する可変長符号列VLの数を読出間隔に設定すると、次のステップSP42へ移る。
ステップSP42において、デコーダ80は、メモリ82において処理対象となる入れ子ブロックVLyの始端を基準にして復号開始位置をそれぞれ設定すると、次のステップSP43へ移る。
すなわちデコーダ80は、入れ子ブロックVLyの先頭ビットを第1の可変長復号部91に対する復号開始位置として決定し、開始ポインタP1を設定する。またデコーダ80は、入れ子ブロックVLyの2番目、3番目、4番目のビットをそれぞれ可変長復号部92、93及び94に対する復号開始位置として決定し、開始ポインタP2、P3及びP4をそれぞれ設定する。
ステップSP43において、デコーダ80は、可変長復号部91〜94によって開始ポインタから読出間隔おきにデータを読み出し、これを復号対象ビットとすると、次のステップSP44へ移る。
ステップSP44において、デコーダ80は、可変長復号部91〜94によって復号対象ビットからVLDテーブルを参照して復号データを生成すると、次のステップSP45へ移る。
ステップSP45において、デコーダ80は、いずれかの可変長復号部91〜94における復号データ生成処理が終了したか否かについて判別し、否定結果が得られると、次のステップSP42へ戻る。
ステップSP42において、デコーダ80は、ステップSP44における復号データの生成に使用された復号対象ビットの数だけ開始ポインタを移動させると、次のステップSP43へ移って処理を継続する。
これに対してステップSP45において肯定結果が得られた場合、このことは入れ子ブロックVLyにおける記録間隔が変化している可能性があることを表しており、このときデコーダ80は、次のステップSP46へ移る。
ステップSP46において、デコーダ80は、読出間隔が「1」であるか否かについて判別する。ここで否定結果が得られた場合、このことは記録間隔が変化したことにより復号データが誤って生成されている可能性があることを表しており、このときデコーダ80は、次のステップSP50へ移る。
ステップSP50において、デコーダ80は、最も前のアドレスで復号データ生成処理が終了する可変長符号列のアドレスを表す先終了アドレスを特定すると、次のステップSP51へ移る。
ステップSP51において、デコーダ80は、先終了アドレスを含む繰返しビットを有する可変長符号から生成された復号データである先終了復号データ及び以降の復号データを無効化すると、次のステップSP52へ移る。
ステップSP52において、デコーダ80は、先終了アドレスが属する繰返ビットの次のビットから読出間隔を「1」減少させて設定すると、次のステップSP53へ移る。
ステップSP53において、デコーダ80は、先終了復号データの復号処理が実行された位置に開始ポインタを戻すと、次のステップSP43へ戻り、残っている可変長符号列に対する復号データ生成処理を継続する。
これに対してステップSP46において肯定結果が得られた場合、このことは全ての可変長復号部91〜94による復号データ生成処理が終了し、入れ子ブロックVLyが生成されたことを表している。このときデコーダ80は、新たに生成した入れ子ブロックVLyを既に生成されている入れ子ブロックVLyに連結して画像データBLを生成し、終了ステップへ移って並列デコード処理手順RT4を終了する。
[2−4.動作及び効果]
以上の構成において、エンコーダ50は、画像データBLを複数のデータブロックであるデータブロックDBa〜DBdに分離し、データブロックDBa〜DBdを可変長符号化して複数の可変長符号列VLa〜VLdを生成する。エンコーダ50は、複数の可変長符号列VLa〜VLdに基づくデータが入れ子状に配列するビットストリームBSrを生成する。
これによりエンコーダ50は、ビットストリームBSrにおける1つの入れ子ブロックVLy内に並列して可変長符号列VLa〜VLdに基づくデータを配列することができる。
またエンコーダ50は、複数の可変長符号列VLa〜VLdのうち、符号長の短い可変長符号列に基づくデータの配列が終了すると、データの配列が終了していない可変長符号列に基づくデータを入れ子状に配列する。
これによりエンコーダ50は、可変長符号列VLa〜VLdに基づくデータのみからビットストリームBSrを生成することができるため、ダミーデータなどの付加によって生じる符号量の増大を生じることがない。
またエンコーダ50は、複数の符号長固定ブロックVLxに基づくデータを抽出数である1[bit]ずつ入れ子状に配列するようにした。
ここで仮にエンコーダが抽出数を複数に設定した場合、符号長固定ブロックVLxに基づくデータの配列が終了したときに、抽出数を維持するためのダミーデータを付加する必要が生じ、符号量が増大してしまう。
エンコーダ50は、抽出数を「1」に設定したことにより、かかるダミーデータの付加を生じさせず、符号量の増大を抑制することができる。
またデコーダ80は、可変長符号でなる複数の可変長符号列VLa〜VLdに基づくデータが入れ子状に配列されたビットストリームBSrから、可変長符号列VLa〜VLdごとにデータを読み出す。デコーダ80は、複数の可変長符号列VLa〜VLdを並列して可変長復号化して復号データを生成する。
これによりデコーダ80は、複数の可変長符号列VLa〜VLdを並列して可変長復号化することができるため、可変長復号処理を高速化することができる。
またデコーダ80は、ビットストリームBSrに配列されているデータの可変長符号列VLa〜VLdごとの記録間隔と同一でなる読出間隔でデータを読み出すことにより、可変長符号列VLa〜VLdごとにデータを復号対象ビットとして読み出す。
これによりデコーダ80は、可変長符号列VLa〜VLdごとに復号データ生成処理を実行することができ、複数の可変長符号列VLa〜VLdを並列して可変長復号化することができる。
さらにデコーダ80は、複数の可変長符号列VLa〜VLdのうち、符号長の短い可変長符号列に基づくデータの配列が終了すると、データの配列が終了していない可変長符号列に基づくデータが入れ子状に配列されることにより可変長符号列ごとの記録間隔が変化しているビットストリームBSrを可変長復号化する。
デコーダ80は、ビットストリームBSrにおける符号長の短い可変長符号列に基づくデータの読み出しが終了すると、読み出しが終了した可変長符号列の最後の位置である先終了アドレスを特定する。デコーダ80は、当該先終了アドレスに配列されている全ての可変長符号列に基づくデータが一通り配列された繰返ビットのうち、当該先終了アドレスが属する繰返ビット以降を用いて可変長復号化された可変長符号を再度読み出す。そしてデコーダ80は、再度読み出された可変長符号を可変長復号化する。
これによりデコーダ80は、記録間隔が変化したことにより誤って可変長復号化された可能性のある可変長符号に対し、再度可変長復号化することができる。このためデコーダ80は、複数の可変長符号列VLa〜VLdを誤って可変長復号化することなく、最後まで正確に可変長復号化することができる。
以上の構成によれば、エンコーダ50は、符号単位ごとに生成された可変長符号列VLa〜VLdのデータを抽出数である1[bit]ずつそれぞれ抽出して順次並べてビットストリームBSrを生成するようにした。
これによりエンコーダ50は、可変長符号列VLa〜VLdのデータを各可変長符号列VLa〜VLdのデータが記録間隔で配列されるようにビットストリームBSrを生成することができる。
デコーダ80は、このように生成されたビットストリームBSrを記録間隔と同一な読出間隔で読み出すことにより、可変長符号列VLa〜VLdごとに復号対象ビットを読み出すことができるため、並列して復号データ生成処理を実行することができる。
かくして本発明は、可変長復号処理を高速化し得るエンコーダ、符号方法及び符号プログラムが記録された記録媒体、並びにデコーダ、復号方法及び復号プログラムが記録された記録媒体を実現できる。
<3.第3の実施の形態>
図29〜図36は第3の実施の形態を示すもので、図16〜28に示す第2の実施の形態に対応する部分を同一符号で示している。第3の実施の形態では、4つに分割されたデータブロックDBa〜DBdをさらに前半・後半に分割して合計8つの可変長符号列を生成し、符号長固定ブロックVLxを生成する点が第2の実施の形態と異なっている。
[3−1.エンコーダの構成]
図29に示すように、第3の実施の形態のエンコーダ100は、画像データBLが供給されると、当該画像データに対してエンコード処理を実行し、ビットストリームBSxを生成するようになされている。
具体的にエンコーダ100は、入力端子101を介して画像データBLが供給されると、当該画像データBLを分離部102に供給する。
図30に示すように、分離部102は、第2の実施の形態と同様にして画像データBLをデータブロックDBa〜DBdに分離する。さらに分離部102は、データブロックDBa〜DBdを輝度データ又は色差データが各64ずつ分配されるよう中央で2分割し、前半データブロックDBa1〜DBd1と、後半データブロックDBa2〜DBd2を生成する。そして分離部102は、これらを可変長符号部111〜118にそれぞれ供給する。
第1の可変長符号部111は、分離部102から供給される前半データブロックDBa1を可変長符号化して前半可変長符号列VLa1(図30(B))を生成し、第1の結合部131に供給する。
第2の可変長符号部112は、分離部102から供給される後半データブロックDBa2を可変長符号化して後半可変長符号列VLa2(図30(B))を生成し、第1のミラー処理部121に供給する。
第1のミラー処理部121は、後半可変長符号列VLa2を並べ替えてミラー処理を施し、第1の結合部131に供給する。
第1の結合部131は、必要に応じて緩衝データDDを挟むことにより前半データブロックDBa及びミラー処理された後半可変長符号列VLa2を結合し、符号長が固定でなる符号長固定ブロックVXaを生成する。なお第1の結合部131は、前半データブロックDBa及びミラー処理された後半可変長符号列VLa2の合計符号長が固定符号長以下になるようにその符号長を調整するようになされている。
第3の可変長符号部113、第4の可変長符号部114、第2のミラー処理部122及び第2の結合部132は、供給される前半ブロックデータDBb1及び後半ブロックデータDBb2に対して同様の処理を施し、符号長固定ブロックVXbを生成する。
第5の可変長符号部115、第6の可変長符号部116、第3のミラー処理部123及び第3の結合部133は、供給される前半ブロックデータDBc1及び後半ブロックデータDBc2に対して同様の処理を施し、符号長固定ブロックVXcを生成する。
第7の可変長符号部117、第8の可変長符号部118、第4のミラー処理部124及び第4の結合部134は、供給される前半ブロックデータDBd1及び後半ブロックデータDBd2に対して同様の処理を施し、符号長固定ブロックVXdを生成する。
図31に示すように、ビットストリーム生成部104は、符号長固定ブロックVXa〜VXdの先頭ビットから1[bit]ずつ入れ子状にデータを並べることにより、入れ子ブロックVLzを生成する。
この結果入れ子ブロックVLzでは、始端から順方向に向けて前半可変長符号列VLa1、VLb1、VLc1、VLd1に対応するデータが入れ子状に配列される。また入れ子ブロックVLzでは、終端から逆方向に向けて後半可変長符号列VLa2、VLb2、VLc2、VLd2に対応するデータが入れ子状に配列される。
さらにビットストリーム生成部104は、入れ子ブロックVLzを順次連ねることにより、ビットストリームBSxを生成するようになされている。
このようにエンコーダ100は、複数の符号長固定ブロックVXa〜VXdを生成すると共に、当該複数の符号長固定ブロックVXa〜VXdのデータを入れ子状に配列させてビットストリームBSxを生成する。
これによりビットストリームBSxでは、複数の符号長固定ブロックVXa〜VXdに対応するデータを始端及び終端から互いに逆方向に繰返して配列させ得るようになされている。またビットストリームBSxでは、入れ子ブロックVLzをの符号長を一定にすることができる。
[3−2.デコーダの構成]
図32に示すように、第3の実施の形態のデコーダ150は、ビットストリームBSxが供給されると、可変長復号処理としての並列デコード処理を実行し、画像データBLを生成するようになされている。
具体的に、デコーダ150は、入れ子ブロックVLzからなるビットストリームBSxが供給されると、これをメモリ152に供給する。メモリ152は、供給される入れ子ブロックVLzを順次記憶する。
図33に示すように、読出制御部153は、入れ子ブロックVLzの符号長から復号開始位置を特定し、当該復号開始位置に開始ポインタP1〜P4を設定する。すなわち読出制御部153は、第1の可変長復号部161に対応する開始ポインタP1を入れ子ブロックVLzの先頭ビットに設定する。また読出制御部153は、可変長復号部162〜164に対応する開始ポインタP2〜P4を入れ子ブロックVLzの先頭ビットから順方向へ向けて2[bit]目、3[bit]目、4[bit]目にそれぞれ設定する。
そして読出制御部153は、開始ポインタP1〜P4から順方向へ向けて4[bit]おきにデータを読み出すことにより、復号対象ビットを読み出し、それぞれ可変長復号部161〜164に供給する。
さらに読出制御部153は、可変長復号部161〜164から復号データの生成に使用されたビット数の情報を受け取ると、当該復号データの生成に使用されたビット数だけ開始ポインタP1〜P4を順方向へ移動させる。読出制御部153は、開始ポインタP1〜P4から4[bit]おきにデータを読み出すことにより、復号対象ビットを読み出し、それぞれ可変長復号部161〜164に供給する。
これにより可変長復号部161〜164は、復号対象ビットを読み出して可変長復号化する復号データ生成処理を同時並行して実行し得るようになされている。
また読出制御部153は、固定長でなる入れ子ブロックVLzの符号長から復号開始位置を特定し、当該復号開始位置に開始ポインタP5〜P8を設定する。すなわち読出制御部153は、第5の可変長復号部165に対応する開始ポインタP5を入れ子ブロックVLzの最後尾ビットに設定する。また読出制御部153は、可変長復号部166〜168に対応する開始ポインタP6〜P8を入れ子ブロックVLzの最後尾ビットから逆方向へ向けて2[bit]目、3[bit]目、4[bit]目にそれぞれ設定する。
そして読出制御部153は、開始ポインタP5〜P8から逆方向へ向けて4[bit]おきにデータを読み出すことにより、復号対象ビットを読み出し、それぞれ可変長復号部165〜168に供給する。
さらに読出制御部153は、可変長復号部165〜168から復号データの生成に使用されたビット数の情報を受け取ると、当該復号データの生成に使用されたビット数だけ開始ポインタP5〜P8を逆方向へ移動させる。読出制御部153は、開始ポインタP5〜P8から4[bit]おきにデータを読み出すことにより、復号対象ビットを読み出し、それぞれ可変長復号部165〜168に供給する。
これにより可変長復号部165〜168は、復号データ生成処理を同時並行して実行し、データブロックBBa1、BBa2、BBb1、BBb2、BBc1、BBc2、BBd1、BBd2をそれぞれ生成し、画像データ生成部154へ供給する。
図34に示すように、画像データ生成部154は、データブロックBBa1、BBa2、BBb1、BBb2、BBc1、BBc2、BBd1、BBd2をそれぞれ連結して復号ブロックを生成する。そして画像データ生成部154は、復号ブロックをさらに連結することにより画像データBLを生成するようになされている。
このようにデコーダ150は、入れ子ブロックVLzの始端及び終端の両方から入れ子状に配列されたデータを同時並行して読み出して可変長復号化するようにした。
これによりデコーダ150は、同時並行して復号データ生成処理を実行できるため、可変長復号処理を高速化し得るようになされている。
[3−3.具体的な処理手順]
[3−3−1.エンコード処理手順]
次に、エンコードプログラムに従って実行されるエンコード処理手順RT5について、図35のフローチャートを用いて説明する。
エンコーダ100は、画像データBLが供給されると、エンコード処理手順RT5を開始し、ステップSP61へ移る。
ステップSP1において、エンコーダ100は、画像データBLを前半データブロックDBa1〜DBd1と、後半データブロックDBa2〜DBd2とに分離し、次のステップSP62へ移る。
ステップSP62において、エンコーダ10は、分離した単位ごとに画像データBLを可変長符号化し、前半可変長符号列VLa1〜VLd1及び後半可変長符号列VLa2〜VLd2を生成すると、次のステップSP63へ移る。
ステップSP63において、エンコーダ100は、後半可変長符号列VLa2〜VLd2に対してミラー処理を実行すると、次のステップSP64へ移る。
ステップSP64において、エンコーダ100は、前半可変長符号列VLa及び後半ミラー可変長符号列VLmの間に緩衝データDDを挟んで結合することにより、固定符号長でなる符号長固定ブロックVLxa〜VLxdを生成すると、次のステップSP65へ移る。
ステップSP65において、エンコーダ100は、符号長固定ブロックVXa〜VXdから1[bit]ずつデータを抽出し、入れ子状に並べ替えて入れ子ブロックVLzを生成する。そしてエンコーダ100は、入れ子ブロックVLzを連ねることによりビットストリームBSxを生成すると、終了ステップへ移ってエンコード処理手順RT5を終了する。
[3−3−2.並列デコード処理手順]
次に、並列デコードプログラムに従って実行される並列デコード処理手順RT6について、図36に示すフローチャートを用いて説明する。
デコーダ150は、ビットストリームBSxが供給されると、並列デコード処理手順RT6を開始し、供給されるビットストリームBSxをメモリ152に順次記憶し、次のステップSP71へ移る。
ステップSP71において、デコーダ150は、メモリ152において処理対象となる入れ子ブロックVLzの始端及び終端を基準として復号開始位置を設定すると、次のステップSP72へ移る。
すなわちデコーダ150は、入れ子ブロックVLzの始端及び始端から2[bit]目、3[bit]目、4[bit]目を可変長復号部161〜164に対する復号開始位置として決定し、開始ポインタP1〜P4を設定する。またデコーダ150は、入れ子ブロックVLzの終端から2[bit]目、3[bit]目、4[bit]目を可変長復号部165〜168に対する復号開始位置として決定し、開始ポインタP5〜P8を設定する。
ステップSP72において、デコーダ150は、開始ポインタP1〜P4から順方向へ、開始ポインタP5〜P8から逆方向へ向けてメモリ152からデータを読み出すことにより、復号対象ビットを順次読み出すと、次のステップSP73へ移る。
ステップSP73において、デコーダ150は、復号対象ビットから復号データを生成すると、次のステップSP74へ移る。
ステップSP74において、デコーダ150は、全ての可変長復号部161〜168において、処理対象となる入れ子ブロックVLzに対する復号データの生成が終了したか否かについて判別する。
ここで否定結果が得られた場合、このことは未だ入れ子ブロックVLzに可変長復号すべき可変長符号が存在することを表している。このときデコーダ150は、ステップSP72へ戻り、ステップSP73において復号データの生成に使用した復号対象ビットの数だけ開始ポインタP1〜P8を移動した位置から復号対象ビットの読み出しを開始し、処理を継続する。
これに対してステップSP74において肯定結果が得られた場合、デコーダ150は、次のステップSP75へ移る。ステップSP75にいて、デコーダ150は、前半復号データBBa1〜BBd1及び後半復号データBBa2〜BBd2を結合することにより入れ子ブロックVLzを生成する。さらにデコーダ150は、入れ子ブロックVLzを連ねることにより画像データBLを生成すると、終了ステップへ移って並列デコード処理を終了する。
[3−4.動作及び効果]
以上の構成によれば、エンコーダ100は、前半可変長符号列VLa1〜VLd1及び後半可変長符号列VLa2〜VLd2をそれぞれ組み合わせて生成された符号ブロックである符号長固定ブロックVLxを複数生成する。エンコーダ100は、当該複数の符号長固定ブロックVXa〜VXdに基づくデータを入れ子状に配列して入れ子ブロックVLzを生成し、入れ子ブロックVLzを連ねることによりビットストリームBSxを生成する。
これによりエンコーダ100は、入れ子ブロックVLzの始端及び終端から、符号長固定ブロックVXa〜VXdごとのデータに対して並列して復号データ生成処理を実行させることができる。
またエンコーダ100は、2つの可変長符号列である前半可変長符号列VLa1及び後半可変長符号列VLa2の符号長の合計が固定長以下になるように当該2つの可変長符号列を生成する。
これによりエンコーダ100は、各前半可変長符号列VLa1及び後半可変長符号列VLa2が所定の固定長以下になるように前半可変長符号列VLa1及び後半可変長符号列VLa2を生成する場合と比較して、符号長の制限を緩和することができる。この結果エンコーダ100は、固定長を小さく設定して符号量を低減させたり、符号量の調整に伴う画質の劣化を抑制することができる。
デコーダ150は、複数の符号長固定ブロックVXa〜VXdに基づくデータが入れ子状に配列されてなるビットストリームBSxから符号長固定ブロックVXa〜VXdごとのデータを読み出すことにより、複数の符号長固定ブロックVXa〜VXdを並列して可変長復号化する。
これによりデコーダ150は、入れ子ブロックVLzの始端及び終端から復号データ生成処理を実行することができるため、入れ子にする符号長固定ブロックVXa〜VXdの数を増大させなくても並列して実行する復号データ生成処理の数を増大させることができる。この結果デコーダ150は、可変長復号処理としての並列デコード処理を高速化することができる。
以上の構成によれば、エンコーダ100は、2つの可変長符号列を組み合わせて固定長でなる符号長固定ブロックVXa〜VXdを複数生成し、当該符号長固定ブロックVXa〜VXdに基づくデータを抽出数ごとに抽出して順次配列し、入れ子ブロックVLzを生成する。
これによりエンコーダ100は、始端に前半可変長符号列VLa1〜VLd1の先頭ビットが順次並び、終端に後半可変長符号列VLa2〜VLd2が順次並ぶように入れ子ブロックVLzを生成することができる。
デコーダ150は、このように生成された入れ子ブロックVLzの始端及び終端から、複数の可変長符号列に基づくデータを当該可変長符号列ごとに読み出して復号データ生成処理を実行する。
これによりデコーダ150は、並列して実行する復号データ生成処理の数を増大させることができ、並列デコード処理を高速化することができる。
<4.他の実施の形態>
なお上述した第2の実施の形態においては、抽出数を「1」に設定し、可変長符号列VLa〜VLdに基づくデータを1[bit]ずつ入れ子状に配列するようにした場合について述べた。本発明はこれに限らず、抽出数に制限はない。例えば図37に示すように、抽出数を「3」に設定し、可変長符号列VLa〜VLdに基づくデータを3[bit]ずつ入れ子状に配列しても良い。
この場合、エンコーダは、図38に示すように、例えば可変長符号列VLdに基づくデータが終了する際、最後に残った1[bit]又は2[bit]のデータに対してダミーデータDMを付加し、3[bit]の組を生成する。
これによりエンコーダは、3[bit]の抽出数の関係を崩すことなく、上述した第2の実施の形態と同様に記録間隔のみを変化させてビットストリームBSrxを生成することができる。
また上述した第2の実施の形態においては、可変長でなる可変長符号列VLa〜VLdを入れ子状に配列するようにした場合について述べた。本発明はこれに限らず、可変長符号列VLa〜VLdの後にダミーデータを付加することにより符号長を固定値にしても良い。この場合、上述した終端処理(復号データ生成処理の再実行)が不要となる。
さらに上述した第1〜第3の実施の形態においては、画素値をそのまま表す画像データを受け取るようにした場合について述べた。本発明はこれに限らず、例えばDCT処理や量子化処理が施されているような画像データを受け取っても良い。また画像データは4:2:2方式である必要はなく、例えば4:2:0方式や4:4:4方式であっても良い。
さらに上述した第1〜第3の実施の形態においては、画像データBLが所定の画素数分の輝度データのブロック及び色差データのブロックからなるようにした場合について述べた。本発明はこれに限らず、例えば図39のように、輝度データ及び色差データが2ピクセル分ずつ組になって構成されていても良い。この場合、任意の画素数分でなるブロックをデータブロックDBとして分離することが可能となる。
さらに上述した第1〜第3の実施の形態においては、同一画素分(すなわち同一符号量分)のデータをデータブロックDBとして分離するようにした場合について述べた。本発明はこれに限らず、異なる画素分のデータをデータブロックDBとして分離しても良い。またデータブロックDBのサイズに制限はない。
さらに上述した第1の実施の形態においては、符号長固定ブロックVLxを生成することにより、その符号長から符号長固定ブロックVLx間の境界がわかるようにした場合について述べた。本発明はこれに限らず、例えば図40に示すように、符号長が可変でなる符号ブロックVLtを生成し、符号ブロックVLt間に境界情報IBを挟むことにより、当該符号ブロックVLt間の境界がわかるようにしても良い。この場合、1つのデータブロックを連続的に可変長符号化することにより、異なる可変長符号部によって可変長復号化されるべき2つの可変長符号列VLa及びVLbが組み合わされた符号ブロックVLtを生成することができる。
これにより本発明は、符号長固定ブロックVLxの生成のために緩衝データDDを含める必要がないため、緩衝データDDよりも境界情報IBのデータ量が小さい場合には、全体の符号量を低減させることができる。本発明は、例えば画像データとしてDCT処理され符号量が大きく変化するような画像データに適用すると効果的である。
また可変長符号列VLa及びVLbの代りに第2の実施の形態における入れ子ブロックBLyを用いることも可能である。この場合、可変長符号列VLbの代りに後半に使用される入れ子ブロックBLyは、ミラー処理が施される。
さらに上述した第1の実施の形態においては、1つの符号長固定ブロックVLxをその両端から並列して可変長復号化するようにした場合について述べた。本発明はこれに限らず、符号長固定ブロックVLxの符号長から次の符号長固定ブロックVLxの始端及び終端を特定し、複数の符号長固定ブロックVLxを並列して可変長復号化するようにしても良い。
さらに上述した第1の実施の形態においては、前半可変長符号列VLa及び後半可変長符号列VLbが所定の符号長以下となるように生成されるようにした場合について述べた。本発明はこれに限らず、前半可変長符号列VLa及び後半可変長符号列VLbの加算値が所定の符号長以下になるように生成されればよい。
さらに上述した第1〜第3の実施の形態においては、各復号処理部が16[bit] のバッファメモリを有するようにした場合について述べた。本発明はこれに限らず、バッファメモリは可変長符号データの最大符号長に応じて設置され、可変長符号データの最大符号長以上の記憶容量であれば、そのビット数に制限はない。
さらに上述した第1〜第3の実施の形態においては、可変長復号部が開始ポインタから所定の数だけ復号対象ビットを読み出すようにした場合について述べた。本発明はこれに限らず、バッファメモリのシフト制御を行うことにより、復号化に使用されたデータのみをメモリから読み出すようにしても良い。
さらに上述した第1及び第3の実施の形態においては、後半可変長符号列に対してミラー処理を施してから前半可変長符号列と結合するようにした場合について述べた。本発明はこれに限らず、例えば可変長符号部がメモリを有しており、可変長符号列の可変長符号化が終了した際に終端部分から逆方向に向けて読み出すようにしても良い。これによりミラー処理部は不要となる。
さらに上述した第1〜第3の実施の形態においては、符号プログラム及び復号プログラム等をROM又はハードディスクドライブなどに予め格納するようにした場合について述べたが、本発明はこれに限らず、メモリースティック(ソニー株式会社の登録商標)などの外部記憶媒体からフラッシュメモリなどにインストールするようにしても良い。また、データベース生成プログラムなどをUSB(Universal Serial Bus)やEthernet(登録商標)(Institute of Electrical and Electronics Engineers:登録商標)802.11a/b/gなどの無線LAN(Local Area Network)を介して外部から取得し、さらには地上ディジタルテレビジョン放送やBSディジタルテレビジョン放送により配信されるようにしても良い。
さらに上述した第1〜第3の実施の形態を適宜組み合わせることも可能である。
さらに上述した第1の実施の形態においては、分離部としての分離部12と、可変長符号部としての可変長符号部13と、符号ブロック生成部及びビットストリーム生成部としてのビットストリーム生成部14とによってエンコーダとしてのエンコーダ10を構成するようにした場合について述べた。本発明はこれに限らず、その他種々の構成でなる分離部と、可変長符号部と、符号ブロック生成部と、ビットストリーム生成部とによって本発明のエンコーダを構成するようにしても良い。
さらに上述した第1の実施の形態においては、受取部としてのメモリ32と、特定部としての読出制御部32と、並列デコード部としての並列デコード部40とによってデコーダとしてのデコーダ30を構成するようにした場合について述べた。本発明はこれに限らず、その他種々の構成でなる受取部と、特定部と、並列デコード部とによって本発明のデコーダを構成するようにしても良い。
10、50、100……エンコーダ、12、52、102……分離部、14、54、104……ビットストリーム生成部、32、82、152……メモリ、35、83、153……読出制御部、40、90、160……並列デコード部、36、84、156……画像データ生成部、BL、BLx……画像データ、VLx、VXa〜VXd……符号長固定ブロック、VLa〜VLd……可変長符号列、VLa、VLa1〜VLd1……前半可変長符号列、VLb、VLa2〜VLd2……後半可変長符号列、VLy、VLz……入れ子ブロック、BS、BSw、BSr、BSx……ビットストリーム、DB……データブロック。