(57)【特許請求の範囲】
【請求項１】
複数のデータ列をそれぞれ符号化する複数の符号化回路と、
前記複数の符号化回路により符号化された符号をそれぞれバッファリングする複数の符号バッファと、
前記複数の符号化回路により符号化された前回の符号のそれぞれの符号長で、前記複数の符号バッファ内の符号列をそれぞれ切り出す複数の切り出し部と、
前記複数の切り出し部により切り出された複数の符号列をインターリーブさせながら結合する結合器とを有し、
前記複数の切り出し部は、最初、前記複数の符号化回路により符号化される符号の中のそれぞれの最大の符号長で、前記複数の符号バッファ内の符号列をそれぞれ切り出すことを特徴とする可変長符号化装置。
【請求項２】
複数の符号列がインターリーブされた符号列をバッファリングするメインバッファと、
前記メインバッファ内の符号列と所定の符号列とを連接するサブビット連接部と、
前記サブビット連接部により連接された符号列を所定の符号長だけシフトするサブシフタと、
前記サブシフタによりシフトされた符号列を複数の符号列に分割してバッファリングする複数のサブバッファと、
前記複数のサブバッファによりバッファリングされた複数の符号を復号する復号器とを有し、
前記サブビット連接部は、前記メインバッファ内の符号列と、前記複数のサブバッファ内の符号列の中で前記復号器により復号されなかった残りの符号列とを連接し、
前記サブシフタは、前記復号器により復号された前回の符号の符号長だけシフトすることを特徴とする可変長復号装置。
【請求項３】
さらに、複数の符号列がインターリーブされた符号列と所定の符号列とを連接するメインビット連接部と、
前記メインビット連接部により連接された符号列を所定の符号長だけシフトするメインシフタとを有し、
前記メインビット連接部は、複数の符号列がインターリーブされた符号列と、前記メインバッファ内の前記複数の符号列の中で前記サブビット連接部に出力されなかった残りの符号列とを連接し、
前記メインシフタは、前記復号器により復号された前回の符号の符号長だけシフトすることを特徴とする請求項２記載の可変長復号装置。
【請求項４】
複数の符号列がインターリーブされた符号列をバッファリングするメインバッファと、
前記メインバッファ内の符号列と所定の符号列とを連接する第１のサブビット連接部と、
前記第１のサブビット連接部により連接された符号列を所定の符号長だけシフトする第１のサブシフタと、
前記第１のサブシフタによりシフトされた符号列が分割された一部の符号列をバッファリングする第１のサブバッファと、
前記第１のサブバッファによりバッファリングされた符号を復号する第１の復号器と、
前記第１のサブシフタによりシフトされた符号列が分割された他の符号列と、所定の符号列とを連接する第２のサブビット連接部と、
前記第２のサブビット連接部により連接された符号列を所定の符号長だけシフトする第２のサブシフタと、
前記第２のサブシフタによりシフトされた符号列をバッファリングする第２のサブバッファと、
前記第２のサブバッファによりバッファリングされた符号を復号する第２の復号器とを有し、
前記第１のサブビット連接部は、前記メインバッファ内の符号列と、前記第１のサブバッファ内の符号列の中で前記第１の復号器により復号されなかった残りの符号列とを連接し、
前記第１のサブシフタは、前記第１の復号器により復号された前回の符号の符号長だけシフトし、
前記第２のサブビット連接部は、前記第１のサブシフタによりシフトされた符号列が分割された他の符号列と、前記第２のサブバッファ内の符号列の中で前記第２の復号器により復号されなかった残りの符号列とを連接し、
前記第２のサブシフタは、前記第２の復号器により復号された前回の符号の符号長だけシフトすることを特徴とする可変長復号装置。
【請求項５】
さらに、複数の符号列がインターリーブされた符号列と所定の符号列とを連接するメインビット連接部と、
前記メインビット連接部により連接された符号列を所定の符号長だけシフトするメインシフタとを有し、
前記メインビット連接部は、複数の符号列がインターリーブされた符号列と、前記メインバッファ内の前記複数の符号列の中で前記第１のサブビット連接部に出力されなかった残りの符号列とを連接し、
前記メインシフタは、前記第１及び第２の復号器により復号された前回の符号の符号長だけシフトすることを特徴とする請求項４記載の可変長復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、可変長符号化装置及び可変長復号装置に関する。
【背景技術】
【０００２】
無線通信における伝送路の輻輳やシステムＬＳＩ（大規模集積回路：Large Scale Integration）における外部メモリの圧迫を解消するために、転送データを可変長符号化アルゴリズムによって圧縮することが一般的である。可変長符号化処理では、各符号化対象シンボル群の出現確率を基に各シンボルに可変長の符号を割り当てることを特徴としている。ハフマン符号化では１つのシンボルに少なくとも１ビットの符号が割り当てられる。また、算術符号化やレンジコーダのようにデータ列そのものを符号化対象シンボルとみなし、個々のシンボルに疑似的に１ビット未満の符号を割り当てることで理論的な限界までシンボル列を圧縮する手法も使用されている。
【０００３】
ところで、可変長復号処理では、１シンボルの符号長が可変であるため、個々の符号へのランダムアクセスが困難であるという問題がある。特定のシンボルのみを復号したい場合は、符号列から所望の符号の先頭位置を決定する必要があるが、所望のシンボルより前のシンボル列が可変長であるため、実際に前のシンボル全てを復号処理しなければ所望の符号の復号処理を実施することができず、符号の復号処理は必ず先頭から逐次的に実施しなければならない。算術符号化でも同様であり、過去の復号過程が現在の復号処理に影響する算術復号処理では必然的に先頭からの逐次処理となってしまう。そのため、従来より可変長符号を高速に復号するための解決手段として、直列復号器や並列復号器など複数の回路構成が提案されている。
【０００４】
図１は、下記の特許文献１に開示されている直列復号器を有する可変長復号装置の構成を示す図である。この可変長復号装置は、１つの復号表を２つに分割し、それを復号表Ａ及び復号表Ｂとしている。これらの復号表Ａ及び復号表Ｂを用いて復号装置を構築する。可変長復号装置は、復号表Ａを内部に有する第１の復号器１０１、復号表Ｂを内部に有する第２の復号器１０２、及び復号表Ｂを内部に有する第３の復号器１０４を有する。第２の復号器１０２及び第３の復号器１０４は、直列に接続されている。入力された符号はそれぞれ復号器１０１及び１０２に並列に入力される。このとき、入力された符号は必ず復号表Ａ又は復号表Ｂによって復号可能である。シフタ１０３は、入力された符号の中で第２の復号器１０２で復号された符号の符号長だけシフトすることにより、第２の復号器１０２で消費されたビット数だけ破棄し、第３の復号器１０４に入力する。第２の復号器１０２に入力された符号列は、第２の復号器１０２の消費ビットを除いて第３の復号器１０４に入力される。この場合、符号列の中の連続する２つの符号が共に復号表Ｂに含まれる場合、１クロックサイクルで２つの復号処理が実行されることになる。セレクタ１０５は、３個の復号器１０１、１０２及び１０３により出力される復号結果の中で正常に復号できたものから選択することによって、１サイクルで複数符号の復号処理が実行可能となる。この際、第２の復号器１０２と第３の復号器１０４は直列接続されているが、復号表Ａ及び復号表Ｂは元の復号表を分割したものであり、復号表Ａ及び復号表Ｂの探索は元の復号表よりも低遅延で実施できるため、遅延時間の増大を抑制している。
【０００５】
図２は、下記の特許文献２に開示されている並列復号器を有する可変長復号装置の構成を示す図である。この可変長復号装置は、１クロックサイクル内で複数の符号の先頭位置を決定することを目的としており、入力符号は第１の復号器２０１及び第２の復号器２０３に並列に入力される。第２の復号器２０３は、第１の復号器２０１で消費され得るビット数分だけ存在する。複数の第２の復号器２０３の入力符号は、それぞれ、複数のシフタ２０２により、第１の復号器２０１による消費され得るビット数の分だけ上位ビットが破棄される。この構成によって、入力符号は、第１の復号器２０１で先頭ビットから復号処理が実施され、それと並行して複数の第２の復号器２０３が符号を復号する。セレクタ２０４は、複数の第２の復号器２０３の中から第１の復号器２０１の消費ビット数だけ上位ビットが破棄された符号を復号した第２の復号器２０３の出力を選択する。これによって、第１の復号器２０１及び第２の復号器２０３で並列に第１及び第２の復号シンボルが出力される。この構成によれば、遅延時間が支配的な復号器を複数段通らずに、所望の２シンボルが同時に取得可能であるため、高速な復号が可能となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１５８６９８号公報
【特許文献２】特開２００６−４２３３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１及び特許文献２は、共に１クロックサイクル内での復号シンボル数を増加させていることが特徴であり、そのために低遅延な回路を構築することに主眼を置いている。ところで並列度を増加させた場合の回路規模の増大は回路の消費電力やチップ単価に直接的に影響するため、並列度の増加に対して回路規模が比例するなど、妥当なレベルでの回路規模増加に収めることが要求される。また、並列復号器は主にリアルタイム性が必要な状況において用いられるため、その復号器は入力符号列の特性に依存せず必ず毎サイクル並列度分の復号処理を行うことが要求される。
【０００８】
上記要求を鑑みるに、特許文献１では復号過程が第２の復号器１０２と第３の復号器１０４の直列構成になった場合のみ１サイクルで複数シンボルの復号が可能となる。符号がこのパスを通るか否かは入力符号に依存してしまうため、並列度は確率的にしか議論できない。すなわち、可変長復号装置の処理速度をワーストケースの１クロックサイクル１復号を想定してシステムを構築しなければ復号処理が間に合わず、処理が破綻してしまう可能性が否めず、リアルタイム性を要求するシステムでは適用困難である。また、３並列又は４並列など並列度を上げた場合、復号器が直列接続されている構成のため、遅延時間の増大によって動作周波数が上げられず、結果として単位時間当たりの復号シンボル数はある一定の値に収束してしまうことが予想される。さらには、複数並列にした場合は並列化できる確率が低下してしまうため、並列度の増加は困難である。
【０００９】
特許文献２では、第１の復号器２０１の消費ビット数分の第２の復号器２０３が並列に構成されているため、必ず１サイクル２復号処理が可能である。しかし、この構成において並列度を増加させた場合、複数の第２の復号器２０３が第１の復号器２０１の消費し得るビット数分だけ並列に接続されてしまうため、回路規模が多項式的に増大してしまい、現実的な回路規模での実装が困難である。
【００１０】
本発明の目的は、小面積で高速な処理を行うことができる可変長符号化装置及び可変長復号装置を提供することである。
【課題を解決するための手段】
【００１１】
可変長符号化装置は、複数のデータ列をそれぞれ符号化する複数の符号化回路と、前記複数の符号化回路により符号化された符号をそれぞれバッファリングする複数の符号バッファと、前記複数の符号化回路により符号化された前回の符号のそれぞれの符号長で、前記複数の符号バッファ内の符号列をそれぞれ切り出す複数の切り出し部と、前記複数の切り出し部により切り出された複数の符号列をインターリーブさせながら結合する結合器とを有し、前記複数の切り出し部は、最初、前記複数の符号化回路により符号化される符号の中のそれぞれの最大の符号長で、前記複数の符号バッファ内の符号列をそれぞれ切り出す。
【００１２】
可変長復号装置は、複数の符号列がインターリーブされた符号列をバッファリングするメインバッファと、前記メインバッファ内の符号列と所定の符号列とを連接するサブビット連接部と、前記サブビット連接部により連接された符号列を所定の符号長だけシフトするサブシフタと、前記サブシフタによりシフトされた符号列を複数の符号列に分割してバッファリングする複数のサブバッファと、前記複数のサブバッファによりバッファリングされた複数の符号を復号する復号器とを有し、前記サブビット連接部は、前記メインバッファ内の符号列と、前記複数のサブバッファ内の符号列の中で前記復号器により復号されなかった残りの符号列とを連接し、前記サブシフタは、前記復号器により復号された前回の符号の符号長だけシフトする。
また、可変長復号装置は、複数の符号列がインターリーブされた符号列をバッファリングするメインバッファと、前記メインバッファ内の符号列と所定の符号列とを連接する第１のサブビット連接部と、前記第１のサブビット連接部により連接された符号列を所定の符号長だけシフトする第１のサブシフタと、前記第１のサブシフタによりシフトされた符号列が分割された一部の符号列をバッファリングする第１のサブバッファと、前記第１のサブバッファによりバッファリングされた符号を復号する第１の復号器と、前記第１のサブシフタによりシフトされた符号列が分割された他の符号列と、所定の符号列とを連接する第２のサブビット連接部と、前記第２のサブビット連接部により連接された符号列を所定の符号長だけシフトする第２のサブシフタと、前記第２のサブシフタによりシフトされた符号列をバッファリングする第２のサブバッファと、前記第２のサブバッファによりバッファリングされた符号を復号する第２の復号器とを有し、前記第１のサブビット連接部は、前記メインバッファ内の符号列と、前記第１のサブバッファ内の符号列の中で前記第１の復号器により復号されなかった残りの符号列とを連接し、前記第１のサブシフタは、前記第１の復号器により復号された前回の符号の符号長だけシフトし、前記第２のサブビット連接部は、前記第１のサブシフタによりシフトされた符号列が分割された他の符号列と、前記第２のサブバッファ内の符号列の中で前記第２の復号器により復号されなかった残りの符号列とを連接し、前記第２のサブシフタは、前記第２の復号器により復号された前回の符号の符号長だけシフトする。
【発明の効果】
【００１３】
小面積で高速な処理を行うことができる。
【図面の簡単な説明】
【００１４】
【図１】特許文献１に開示されている直列復号器を有する可変長復号装置の構成を示す図である。
【図２】特許文献２に開示されている並列復号器を有する可変長復号装置の構成を示す図である。
【図３】図３（Ａ）は第１の実施形態による可変長符号化装置の構成例を示す図であり、図３（Ｂ）は第１の実施形態による可変長復号装置の構成例を示す図である。
【図４】ハフマン符号の符号表の例を示す図である。
【図５】図３（Ａ）の可変長符号化装置の処理を説明するための符号列を示す図である。
【図６】第２の実施形態による可変長符号化装置の構成例を示す図である。
【図７】第２の実施形態による可変長符号化装置の具体的な構成例を示す図である。
【図８】図７の可変長符号化装置の符号化方法の例を示すフローチャートである。
【図９】第２の実施形態による可変長復号装置の構成例を示す図である。
【図１０】図９の可変長復号装置の復号方法の例を示すフローチャートである。
【図１１】第３の実施形態による可変長復号装置の構成例を示す図である。
【図１２】第４の実施形態による可変長符号化装置の構成例を示す図である。
【図１３】第４の実施形態による可変長復号装置の構成例を示す図である。
【図１４】第５の実施形態による可変長復号装置の構成例を示す図である。
【図１５】図１５（Ａ）及び（Ｂ）は図７の可変長符号化装置の符号化回路（レンジエンコーダ）の符号化（エンコード）処理例を示すフローチャートである。
【図１６】図１６（Ａ）及び（Ｂ）は図１４の可変長復号装置のレンジデコーダの復号（デコード）処理例を示すフローチャートである。
【図１７】可変長符号化装置及び可変長復号装置を用いた動画像符号化装置の構成例を示す図である。
【発明を実施するための形態】
【００１５】
（第１の実施形態）
図３（Ａ）は第１の実施形態による可変長符号化装置の構成例を示す図であり、図３（Ｂ）は第１の実施形態による可変長復号装置の構成例を示す図であり、図４はハフマン符号の符号表の例を示す図であり、図５は図３（Ａ）の可変長符号化装置の処理を説明するための符号列を示す図である。図４のハフマン符号は、可変長符号である。
【００１６】
まず、図３（Ａ）を参照しながら、可変長符号化装置を説明する。可変長符号化装置は、Ａ系統の符号化器３０２ａ及びＢ系統の符号化器３０２ｂを有する。符号化器３０２ａ及び３０２ｂは、並列に符号化を行う。符号化器３０２ａ及び３０２ｂは、同じ符号表を基に符号化を行ってもよいし、異なる符号表を基に符号化を行ってもよい。
【００１７】
Ａ系統の符号化器３０２ａは、Ａ系統のシンボル列（データ列）３０１ａを例えば図４の符号表を基に可変長符号に符号化し、その符号化した符号を切り出し部３０４ａに出力し、その符号の符号長を符号長バッファ３０３ａに出力する。符号長バッファ３０３ａは、ＦＩＦＯ（ファーストインファーストアウト）であり、上記の符号長をバッファリングする。切り出し部３０４ａは、符号バッファを有し、符号化器３０２ａにより符号化された符号をバッファリングする。
【００１８】
例えば、切り出し部３０４ａは、図５の符号列ＤＴ１をバッファリングする。符号化器３０２ａは、まず符号長ａ０の符号を出力し、次に符号長ａ１の符号を出力し、次に符号長ａ２の符号を出力し、その後も符号の出力を繰り返す。その結果、切り出し部３０４ａは、符号列ＤＴ１として、符号長ａ０の符号、符号長ａ１の符号及び符号長ａ２の符号を順次、バッファリングする。次に、切り出し部３０４ａは、最初、符号化器３０２ａにより符号化される図４の符号表の符号の中の最大の符号長の１２ビットで、符号バッファ内の符号列ＤＴ１を切り出し、その切り出した符号列３０５ａをマルチプレクサ３０６に出力する。この切り出しにより、符号長ａ２の符号は、符号長ａ２αの符号及び符号長ａ２βの符号に分割される。切り出された１２ビットの符号列３０５ａは、符号長ａ０の符号、符号長ａ１の符号及び符号長ａ２αの符号により構成される。切り出し部３０４ａ内の符号バッファには、符号長ａ２βの符号が残される。切り出し部３０４ａは、２回目以降では、符号化器３０２ａにより符号化された前回の符号の符号長を符号長バッファ３０３ａから入力し、その符号長で、符号バッファ内の符号列ＤＴ１を切り出す。
【００１９】
同様に、Ｂ系統の符号化器３０２ｂは、Ｂ系統のシンボル列（データ列）３０１ｂを例えば図４の符号表を基に可変長符号に符号化し、その符号化した符号を切り出し部３０４ｂに出力し、その符号の符号長を符号長バッファ３０３ｂに出力する。符号長バッファ３０３ｂは、ＦＩＦＯであり、上記の符号長をバッファリングする。切り出し部３０４ｂは、符号バッファを有し、符号化器３０２ｂにより符号化された符号をバッファリングする。
【００２０】
例えば、切り出し部３０４ｂは、図５の符号列ＤＴ２をバッファリングする。符号化器３０２ｂは、まず符号長ｂ０の符号を出力し、次に符号長ｂ１の符号を出力し、その後も符号化を繰り返す。その結果、切り出し部３０４ｂは、符号列ＤＴ２として、符号長ｂ０の符号及び符号長ｂ１の符号を順次、バッファリングする。次に、切り出し部３０４ｂは、最初、符号化器３０２ｂにより符号化される図４の符号表の符号の中の最大の符号長の１２ビットで、符号バッファ内の符号列ＤＴ２を切り出し、その切り出した符号列３０５ｂをマルチプレクサ３０６に出力する。この切り出しにより、符号長ｂ１の符号は、符号長ｂ１αの符号及び符号長ｂ１βの符号に分割される。切り出された１２ビットの符号列３０５ｂは、符号長ｂ０の符号及び符号長ｂ１αの符号により構成される。切り出し部３０４ｂ内の符号バッファには、符号長ｂ１βの符号が残される。切り出し部３０４ｂは、２回目以降では、符号化器３０２ｂにより符号化された前回の符号の符号長を符号長バッファ３０３ｂから入力し、その符号長で、符号バッファ内の符号列ＤＴ２を切り出す。
【００２１】
マルチプレクサ３０６は、切り出し部３０４ａにより切り出された符号列３０５ａ及び切り出し部３０４ｂにより切り出された符号列３０５ｂを交互に多重化し、符号列ＤＴ３を出力する。図５に示すように、データ列ＤＴ３において、前半の１２ビットは、切り出し部３０４ａにより切り出された１２ビットの符号列３０５ａであり、後半の１２ビットは、切り出し部３０４ｂにより切り出された１２ビットの符号列３０５ｂである。
【００２２】
次に、図３（Ｂ）を参照しながら、可変長復号装置を説明する。可変長復号装置は、Ａ系統の復号器３１７ａ及びＢ系統の復号器３１７ｂを有する。復号器３１７ａ及び３１７ｂは、並列に復号を行う。復号器３１７ａ及び３１７ｂは、同じ復号表を基に復号を行ってもよいし、異なる復号表を基に復号を行ってもよい。
【００２３】
符号列ＤＴ３は、図３（Ａ）の可変長符号化装置により符号化された符号列である。読み出し部３１２は、所定の符号長の符号列ＤＴ３を読み出し、符号列３１３をデマルチプレクサ３１４に出力する。符号列３１３は、Ａ系統の符号列とＢ系統の符号列を有する。デマルチプレクサ３１４は、逆多重化により、符号列３１３のうちの前部のＡ系統の符号を復号用バッファ３１５内のＡ系統符号列３１６ａの残部に連接（結合）し、符号列３１３のうちの後部のＢ系統の符号を復号用バッファ３１５内のＢ系統符号列３１６ｂの残部に連接（結合）する。
【００２４】
復号器３１７ａは、図３（Ａ）の符号化器３０２ａの符号表に対応する復号表を用いて、符号列３１６ａの先頭の符号を復号し、復号シンボルを出力すると共に、復号した符号の符号長をデマルチプレクサ３１４に出力する。Ａ系統符号列３１６ａは、復号器３１７ａで復号された符号の符号長だけ減り、その減った符号長だけデマルチプレクサ３１４によりＡ系統の符号列３１３が追加される。その結果、Ａ系統符号列３１６ａの長さは、最大符号長Ｎになる。最大符号長Ｎは、図４の場合には１２ビットである。
【００２５】
復号器３１７ｂは、図３（Ａ）の符号化器３０２ｂの符号表に対応する復号表を用いて、符号列３１６ｂの先頭の符号を復号し、復号シンボルを出力すると共に、復号した符号の符号長をデマルチプレクサ３１４に出力する。Ｂ系統符号列３１６ｂは、復号器３１７ｂで復号された符号の符号長だけ減り、その減った符号長だけデマルチプレクサ３１４によりＢ系統の符号列３１３が追加される。その結果、Ｂ系統符号列３１６ｂの長さは、最大符号長Ｎになる。
【００２６】
以上のように、図３（Ａ）の可変長符号化装置では、シンボル列３０１ａ及び３０１ｂの符号を逐次的に結合するのではなく、切り出し部３０４ａ及び３０４ｂで切り出された符号列３０５ａ及び３０５ｂを順次結合することにより、新たな符号列ＤＴ３を構築する。符号列ＤＴ３のフォーマットは、Ａ系統のシンボル列３０１ａ及びＢ系統のシンボル列３０１ｂから生成されたビットストリームが交互に再配置されている形式となり、特に各ビットストリームからそれぞれ何ビットを取り出して配置するかの単位を、過去に各系統で符号化された符号の符号長を基に決定する。具体的な取り出し単位決定方法としては、各系統毎に符号化した符号の符号長を格納する符号長バッファ（ＦＩＦＯ）３０３ａ及び３０３ｂを設け、切り出し部３０４ａ及び３０４ｂは、各系統で過去に符号化した符号の符号長の中から、最も過去に格納された符号長を使用し、符号列の切り出しを行う。ここで、各系統で最初に符号化される際には過去に符号化した符号が存在しないが、この際は、切り出し部３０４ａ及び３０４ｂは、最大符号長Ｎ（例えば１２ビット）の符号列を切り出す。また、符号化器３０２ａ及び３０２ｂは、符号化処理が終了した系統の符号列の末尾に符号の終了を示すＥＯＳ（End Of Sequence）を挿入する。ＥＯＳに割り当てる符号は任意であるが、符号化対象シンボルに対する符号群の一部とみなし、復号過程で符号列から取り出され得る最大のビット幅を超えてはならない。
【００２７】
図３（Ａ）の可変長符号化装置は、２個の符号化器３０２ａ及び３０２ｂが並列に符号化処理を行うので、小面積で高速に符号化処理を行うことができる。また、図３（Ｂ）の可変長復号装置は、２個の復号器３１７ａ及び３１７ｂが並列に復号処理を行うので、小面積で高速に復号処理を行うことができる。
【００２８】
（第２の実施形態）
図６は、第２の実施形態による可変長符号化装置の構成例を示す図である。Ａ系統のシンボルバッファ６０１ａは、Ａ系統のシンボル列（データ列）を記憶する。Ａ系統の符号化回路６０２ａは、例えば図４の符号表を用いて、シンボルバッファ６０１ａ内のシンボル列を先頭から順次、符号に符号化し、その符号をストリームバッファ６０３ａに出力し、その符号の符号長を符号長バッファ６０４ａに出力する。ストリームバッファ６０３ａは、符号化回路６０２ａにより符号化された符号を順次バッファリングする。符号長バッファ６０４ａは、ＦＩＦＯであり、符号化回路６０２ａにより符号化された符号の符号長を順次バッファリングする。なお、符号長バッファ６０４ａは、最初、最大符号長Ｎ（例えば１２ビット）を記憶する。例えば、ストリームバッファ６０３ａは、図５の符号列ＤＴ１をバッファリングする。
【００２９】
まず、符号化回路６０２ａが符号長ａ０の符号を出力すると、ストリームバッファ６０３ａには符号長ａ０の符号が記憶され、符号長バッファ６０４ａには符号長ａ０が記憶される。次に、符号化回路６０２ａが符号長ａ１の符号を出力すると、ストリームバッファ６０３ａには符号長ａ１の符号が記憶され、符号長バッファ６０４ａには符号長ａ１が記憶される。次に、符号化回路６０２ａが符号長ａ２の符号を出力すると、ストリームバッファ６０３ａには符号長ａ２の符号が記憶され、符号長バッファ６０４ａには符号長ａ２が記憶される。以下、同様に、符号化回路６０３ａは、符号長ａ３及びａ４の符号等の出力を繰り返す。
【００３０】
切り出し部６０５ａは、符号長バッファ６０４ａ内の先頭に記憶されている最大符号長Ｎ（１２ビット）を取り出し、最大符号長Ｎで、ストリームバッファ６０３ａ内の符号列ＤＴ１を切り出し、その切り出した符号列をマルチプレクサ６０６に出力する。切り出された１２ビットの符号列は、図５に示すように、符号長ａ０の符号、符号長ａ１の符号及び符号長ａ２αの符号により構成される。符号長バッファ６０４ａは、最大符号長Ｎが取り出されると、最大符号長Ｎを破棄する。ストリームバッファ６０３ａには、符号長ａ２βの符号が残される。次に、切り出し部６０５ａは、符号長バッファ６０４ａから符号長ａ０を取り出し、符号長ａ０で、ストリームバッファ６０３ａ内の符号列を切り出し、マルチプレクサ６０６に出力する。符号長バッファ６０４ａは、符号長ａ０が取り出されると、符号長ａ０を破棄する。次に、切り出し部６０５ａは、符号長バッファ６０４ａから符号長ａ１を取り出し、符号長ａ１で、ストリームバッファ６０３ａ内の符号列を切り出し、マルチプレクサ６０６に出力する。符号長バッファ６０４ａは、符号長ａ１が取り出されると、符号長ａ１を破棄する。以下、同様に、切り出し部６０５ａは、符号化回路６０２ａにより符号化された前回の符号の符号長を符号長バッファ６０４ａから入力し、その符号長で、ストリームバッファ６０３ａ内の符号列を切り出し、マルチプレクサ６０６に出力する。
【００３１】
同様に、Ｂ系統のシンボルバッファ６０１ｂは、Ｂ系統のシンボル列（データ列）を記憶する。Ｂ系統の符号化回路６０２ｂは、例えば図４の符号表を用いて、シンボルバッファ６０１ｂ内のシンボル列を先頭から順次、符号に符号化し、その符号をストリームバッファ６０３ｂに出力し、その符号の符号長を符号長バッファ６０４ｂに出力する。ストリームバッファ６０３ｂは、符号化回路６０２ｂにより符号化された符号を順次バッファリングする。符号長バッファ６０４ｂは、ＦＩＦＯであり、符号化回路６０２ｂにより符号化された符号の符号長を順次バッファリングする。なお、符号長バッファ６０４ｂは、最初、最大符号長Ｎ（例えば１２ビット）を記憶する。例えば、ストリームバッファ６０３ｂは、図５の符号列ＤＴ２をバッファリングする。
【００３２】
まず、符号化回路６０２ｂが符号長ｂ０の符号を出力すると、ストリームバッファ６０３ｂには符号長ｂ０の符号が記憶され、符号長バッファ６０４ｂには符号長ｂ０が記憶される。次に、符号化回路６０２ｂが符号長ｂ１の符号を出力すると、ストリームバッファ６０３ｂには符号長ｂ１の符号が記憶され、符号長バッファ６０４ｂには符号長ｂ１が記憶される。次に、符号化回路６０２ｂが符号長ｂ２の符号を出力すると、ストリームバッファ６０３ｂには符号長ｂ２の符号が記憶され、符号長バッファ６０４ｂには符号長ｂ２が記憶される。以下、同様に、符号化回路６０３ｂは、符号長ｂ３及びｂ４の符号等の出力を繰り返す。
【００３３】
切り出し部６０５ｂは、符号長バッファ６０４ｂ内の先頭に記憶されている最大符号長Ｎ（１２ビット）を取り出し、最大符号長Ｎで、ストリームバッファ６０３ｂ内の符号列ＤＴ２を切り出し、その切り出した符号列をマルチプレクサ６０６に出力する。切り出された１２ビットの符号列は、図５に示すように、符号長ｂ０の符号及び符号長ｂ１αの符号により構成される。符号長バッファ６０４ｂは、最大符号長Ｎが取り出されると、最大符号長Ｎを破棄する。ストリームバッファ６０３ｂには、符号長ｂ１βの符号が残される。次に、切り出し部６０５ｂは、符号長バッファ６０４ｂから符号長ｂ０を取り出し、符号長ｂ０で、ストリームバッファ６０３ｂ内の符号列を切り出し、マルチプレクサ６０６に出力する。符号長バッファ６０４ｂは、符号長ｂ０が取り出されると、符号長ｂ０を破棄する。次に、切り出し部６０５ｂは、符号長バッファ６０４ｂから符号長ｂ１を取り出し、符号長ｂ１で、ストリームバッファ６０３ｂ内の符号列を切り出し、マルチプレクサ６０６に出力する。符号長バッファ６０４ｂは、符号長ｂ１が取り出されると、符号長ｂ１を破棄する。以下、同様に、切り出し部６０５ｂは、符号化回路６０２ｂにより符号化された前回の符号の符号長を符号長バッファ６０４ｂから入力し、その符号長で、ストリームバッファ６０３ｂ内の符号列を切り出し、マルチプレクサ６０６に出力する。
【００３４】
マルチプレクサ６０６は、切り出し部６０５ａにより切り出された符号列及び切り出し部６０５ｂにより切り出された符号列を交互に多重化し、符号列ＤＴ３を結合済符号バッファ６０７に出力する。結合済符号バッファ６０７は、符号列ＤＴ３を記憶する。例えば、図５に示すように、データ列ＤＴ３において、前半の１２ビットは、切り出し部６０５ａにより切り出された１２ビットの符号列であり、後半の１２ビットは、切り出し部６０５ｂにより切り出された１２ビットの符号列である。
【００３５】
図７は、本実施形態による可変長符号化装置の具体的な構成例を示す図である。可変長符号化装置は、２個の符号化回路７０３ａ及び７０３ｂにより２並列の符号化を行う。シンボルバッファ７０１は、例えばＳＲＡＭ（スタティックランダムアクセスメモリ：Static Random Access Memory）であり、シンボル列（データ列）を記憶する。分配器（セレクタ）７０２は、シンボルバッファ７０１内のシンボル列をシンボル単位で交互にＡ系統の符号化回路７０３ａ及びＢ系統の符号化回路７０３ｂに出力する。
【００３６】
符号化回路７０３ａは、分配器７０２により出力されたＡ系統のシンボル列を可変長符号に符号化し、その符号化した符号をセレクタ７０４ａに出力し、その符号の符号長をセレクタ７０６ａに出力する。符号長は、例えば５ビットデータとして表現される。セレクタ７０４ａは、符号化回路７０３ａが符号を出力している間は符号化回路７０３ａが出力する符号を選択し、シンボルバッファ７０１内のＡ系統のシンボル列が空になり、符号化回路７０３ａの符号化が終了するとＥＯＳコード（符号化終了コード）を選択し、符号バッファ７０５ａに出力する。符号バッファ７０５ａは、例えば１４４ビットレジスタであり、セレクタ７０４ａにより出力される符号又はＥＯＳコードを順次バッファリングし、図６のストリームバッファ６０３ａと同様に、例えば図５の符号列ＤＴ１を記憶する。セレクタ７０６ａは、符号化回路７０３ａの符号化開始前に最大符号長Ｎの１２ビットを選択し、符号化回路７０３ａの符号化が開始すると符号化回路７０３ａにより出力される符号長を選択し、符号長ＦＩＦＯ７０７ａに出力する。符号長ＦＩＦＯ７０７ａは、例えば５ビット×１６ワードの記憶容量を有し、図６の符号長バッファ６０４ａと同様に、最大符号長Ｎ（１２ビット）、符号長ａ０〜ａ４等を順次バッファリングする。切り出し部７０８ａは、図６の切り出し部６０５ａと同様に、符号長ＦＩＦＯ７０７ａに記憶されている符号長を順次取り出し、取り出した符号長で、符号バッファ７０５ａ内の符号列を順次切り出し、その切り出した符号列を結合器７０９に出力する。すなわち、切り出し部７０８ａは、最初、符号化回路７０３ａにより符号化される符号の中の最大符号長Ｎで、符号バッファ７０５ａ内の符号列を切り出し、その後、符号化回路７０３ａにより符号化された前回の符号の符号長で、符号バッファ７０５ａ内の符号列を切り出す。
【００３７】
同様に、符号化回路７０３ｂは、分配器７０２により出力されたＢ系統のシンボル列を可変長符号に符号化し、その符号化した符号をセレクタ７０４ｂに出力し、その符号の符号長をセレクタ７０６ｂに出力する。符号長は、例えば５ビットデータとして表現される。セレクタ７０４ｂは、符号化回路７０３ｂが符号を出力している間は符号化回路７０３ｂが出力する符号を選択し、シンボルバッファ７０１内のＢ系統のシンボル列が空になり、符号化回路７０３ｂの符号化が終了するとＥＯＳコード（符号化終了コード）を選択し、符号バッファ７０５ｂに出力する。符号バッファ７０５ｂは、例えば１４４ビットレジスタであり、セレクタ７０４ｂにより出力される符号又はＥＯＳコードを順次バッファリングし、図６のストリームバッファ６０３ｂと同様に、例えば図５の符号列ＤＴ２を記憶する。セレクタ７０６ｂは、符号化回路７０３ｂの符号化開始前に最大符号長Ｎの１２ビットを選択し、符号化回路７０３ｂの符号化が開始すると符号化回路７０３ｂにより出力される符号長を選択し、符号長ＦＩＦＯ７０７ｂに出力する。符号長ＦＩＦＯ７０７ｂは、例えば５ビット×１６ワードの記憶容量を有し、図６の符号長バッファ６０４ｂと同様に、最大符号長Ｎ（１２ビット）、符号長ｂ０〜ｂ４等を順次バッファリングする。切り出し部７０８ｂは、図６の切り出し部６０５ｂと同様に、符号長ＦＩＦＯ７０７ｂに記憶されている符号長を順次取り出し、取り出した符号長で、符号バッファ７０５ｂ内の符号列を順次切り出し、その切り出した符号列を結合器７０９に出力する。すなわち、切り出し部７０８ｂは、最初、符号化回路７０３ｂにより符号化される符号の中の最大符号長Ｎで、符号バッファ７０５ｂ内の符号列を切り出し、その後、符号化回路７０３ｂにより符号化された前回の符号の符号長で、符号バッファ７０５ｂ内の符号列を切り出す。
【００３８】
結合器７０９は、切り出し部７０８ａにより切り出されたＡ系統の符号列及び切り出し部７０８ｂにより切り出されたＢ系統の符号列を交互に結合する。すなわち、結合器７０９は、切り出し部７０８ａ及び７０８ｂにより切り出された符号列をインターリーブさせながら結合する。セレクタ７１０は、切り出し部７０８ａ及び７０８ｂの切り出しが終了すると、結合器７０９により結合された符号列を結合済符号バッファ７１１に出力する。結合済符号バッファ７１１は、セレクタ７１０により出力された符号列を記憶する。セレクタ７１０により出力される符号列は、結合済符号バッファ７１１に格納された符号列の末尾に結合される。
【００３９】
図８は、図７の可変長符号化装置の符号化方法の例を示すフローチャートである。ステップＳ８０１では、初期化時に、セレクタ７０６ａ及び７０６ｂは最大符号長Ｎ（１２ビット）を選択し、符号長ＦＩＦＯ７０７ａ及び７０７ｂに最大符号長Ｎをプッシュする（記憶させる）。次に、ステップＳ８０２では、符号長ＦＩＦＯ７０７ａ及び７０７ｂの両方が空か否かをチェックする。空であれば符号化処理を終了し、空でなければステップＳ８０３及びＳ８０７の並列処理に進む。
【００４０】
ステップＳ８０３では、符号長ＦＩＦＯ７０７ａが空か否かをチェックする。空であればステップＳ８０６へ進み、空でなければステップＳ８０４に進む。ステップＳ８０６では、符号長ｌｅｎＡに０を設定し、ステップＳ８１１に進む。ステップＳ８０４では、符号化回路７０３ａは、符号化を行い、その符号を符号バッファ７０５ａにプッシュし、符号長を符号長バッファ７０７ａにプッシュする。次に、ステップＳ８０５では、切り出し部７０８ａは、符号長ＦＩＦＯ７０７ａ内の符号長を読み出し、その符号長を符号長ｌｅｎＡに設定し、ステップＳ８１１に進む。
【００４１】
ステップＳ８０７では、符号長ＦＩＦＯ７０７ｂが空か否かをチェックする。空であればステップＳ８１０へ進み、空でなければステップＳ８０８に進む。ステップＳ８１０では、符号長ｌｅｎＢに０を設定し、ステップＳ８１１に進む。ステップＳ８０８では、符号化回路７０３ｂは、符号化を行い、その符号を符号バッファ７０５ｂにプッシュし、符号長を符号長バッファ７０７ｂにプッシュする。次に、ステップＳ８０９では、切り出し部７０８ｂは、符号長ＦＩＦＯ７０７ｂ内の符号長を読み出し、その符号長を符号長ｌｅｎＢに設定し、ステップＳ８１１に進む。
【００４２】
分配器７０２は、シンボルバッファ７０１から毎サイクル１シンボルずつ読み出し、符号化回路７０３ａ及び７０３ｂに交互に出力する。符号化回路７０３ａ及び７０３ｂは、幅広い可変長符号化処理を対象としているが、その一例としてハフマン符号化を例とする。ハフマン符号は、入力シンボル群の確率分布に基づいた符号表を用いて符号化する方式であり、１シンボルに整数ビットを割り当てる符号化方式でも特に高い符号化効率を示す。図４のハフマン符号では、最小符号長が１ビット、最大符号長が１２ビットの符号表を用いて対象シンボルを符号化していく。
【００４３】
ステップＳ８１１では、切り出し部７０８ａは、符号バッファ７０５ａに格納されている符号列の長さが符号長ｌｅｎＡ以上であるか否かをチェックする。符号長ｌｅｎＡ以上であればステップＳ８１２に進み、符号長ｌｅｎＡ未満であればステップＳ８０２に戻る。ステップＳ８１２では、切り出し部７０８ｂは、符号バッファ７０５ｂに格納されている符号列の長さが符号長ｌｅｎＢ以上であるか否かをチェックする。符号長ｌｅｎＢ以上であればステップＳ８１３及びＳ８１７の並列処理に進み、符号長ｌｅｎＢ未満であればステップＳ８０２に戻る。
【００４４】
ステップＳ８１３では、切り出し部７０８ａは、符号バッファ７０５ａ内の符号列を符号長ｌｅｎＡで切り出し、結合器７０９及びセレクタ７１０を介して、結合済符号バッファ７１１に格納する。次に、ステップＳ８１４では、切り出し部７０８ａは、符号長バッファ７０７ａから符号長をポップする（取り出す）。次に、ステップＳ８１５では、分配器７０２は、シンボルバッファ７０１に符号化対象シンボルがあるか否かをチェックする。符号化対象シンボルがあればステップＳ８０２に戻り、符号化対象シンボルがなければステップＳ８１６へ進む。ステップＳ８１６では、セレクタ７０４ａは、ＥＯＳコードを選択し、符号バッファ７０５ａに書き込む。その後、ステップＳ８０２の処理に戻る。
【００４５】
ステップＳ８１７では、切り出し部７０８ｂは、符号バッファ７０５ｂ内の符号列を符号長ｌｅｎＢで切り出し、結合器７０９及びセレクタ７１０を介して、結合済符号バッファ７１１に格納する。次に、ステップＳ８１８では、切り出し部７０８ｂは、符号長バッファ７０７ｂから符号長をポップする。次に、ステップＳ８１９では、分配器７０２は、シンボルバッファ７０１に符号化対象シンボルがあるか否かをチェックする。符号化対象シンボルがあればステップＳ８０２に戻り、符号化対象シンボルがなければステップＳ８２０へ進む。ステップＳ８２０では、セレクタ７０４ｂは、ＥＯＳコードを選択し、符号バッファ７０５ｂに書き込む。その後、ステップＳ８０２の処理に戻る。
【００４６】
以上のように、切り出し部７０８ａ及び７０８ｂは、それぞれ、符号バッファ７０５ａ及び７０５ｂに格納された符号列が符号長ｌｅｎＡ及びｌｅｎＢ以上になった場合のみ、符号バッファ７０５ａ及び７０５ｂ内の符号列を切り出し、結合器７０９へ出力する。符号バッファ７０５ａ及び７０５ｂのいずれかが符号長ｌｅｎＡ及びｌｅｎＢに満たない場合は、切り出し部７０８ａ及び７０８ｂは結合器７０９に符号列を出力せず、符号化回路７０３ａ及び７０３ｂは、シンボルの符号化処理を継続する。符号バッファ７０５ａ及び７０５ｂのサイズは、符号バッファ７０５ａ及び７０５ｂの格納容量の偏りがワーストケースの場合から計算可能である。ワーストケースの場合は、符号バッファ７０５ａに毎サイクル１ビットの符号が書き込まれ、符号バッファ７０５ｂには毎サイクル１２ビットの符号が書き込まれる場合であり、切り出し部７０８ａ及び７０８ｂから結合済符号バッファ７１１に符号列が書き込まれるのは符号バッファ７０５ａに１２ビットの符号が格納された場合である。この時、符号バッファ７０５ｂには１２×１２ビットの符号が格納されていることとなり、これが符号バッファ７０５ａ及び７０５ｂに必要なメモリ容量となる。シンボルバッファ７０１及び結合済符号バッファ７１１は、入力するシンボル列に依存するため、その最低／最大容量はシステムに依存し、ＳＲＡＭ又はＤＲＡＭ（ダイナミックランダムアクセスメモリ：Dynamic Random Access Memory）で実装することが望ましい。符号化の終了条件は、符号長ＦＩＦＯ７０７ａ及び７０７ｂが空になった場合である。Ａ系統の符号化対象シンボル数とＢ系統の符号化対象シンボル数が異なる場合は、一方が先に符号化処理を終了するが、その場合は終了した系統を停止させ、他方の系統の符号化回路が全シンボルを符号化するまで継続する。
【００４７】
図９は、第２の実施形態による可変長復号装置の構成例を示す図である。可変長復号装置は、Ａ系統の復号部９１１ａ及びＢ系統の復号部９１１ｂが２並列に復号処理を行う。結合済符号バッファ９０１は、例えばＳＲＡＭであり、図７の可変長符号化装置により生成された符号列を記憶する。結合済符号バッファ９０１は、Ａ系統の符号列及びＢ系統の符号列がインターリーブされた符号列をメインビット連接部９０２に出力する。
【００４８】
メインビット連接部９０２は、結合済符号バッファ９０１により出力される符号列とメインバッファ９０４により出力される所定の符号列とを連接する。メインシフタ９０３は、メインビット連接部９０２により連接された符号列を所定の符号長ｌｅｎＡ＋ｌｅｎＢだけシフトし、２系統×Ｎ＝２４ビットの符号列をメインバッファ９０４に出力する。メインバッファ９０４は、２４ビットの符号列をバッファリングする。２４ビットの符号列は、図５の符号列ＤＴ３のように、Ａ系統の符号列及びＢ系統の符号列を有する。
【００４９】
第１のサブビット連接部９０５ａは、メインバッファ９０４内の符号列と第１のサブバッファにより出力される所定の符号列とを連接する。第１のサブシフタ９０６ａは、第１のサブビット連接部９０５ａにより連接された符号列を所定の符号長ｌｅｎＡだけシフトし、２４ビットの符号列を出力する。具体的には、第１のサブシフタ９０６ａは、２４ビットの符号列のうちの前半の１２ビットのＡ系統の符号列を第１のサブバッファ９０７ａに出力し、後半の１２ビットのＢ系統の符号列を第２のサブビット連接部９０５ｂに出力する。第１のサブバッファ９０７ａは、第１のサブシフタ９０６ａによりシフトされた２４ビットの符号列が分割された一部の前半の１２ビットのＡ系統の符号列をバッファリングする。第１の復号器９０８ａは、第１のサブバッファ９０７ａによりバッファリングされた符号列の先頭の符号をシンボル（データ）に復号し、その復号したシンボルｄｅｃＡをシンボルバッファ９１０に出力し、その復号した符号の符号長ｌｅｎＡを第１のサブシフタ９０６ａ及び加算器９０９に出力する。
【００５０】
第１のサブビット連接部９０５ａは、メインバッファ９０４内の符号列と、第１のサブバッファ９０７ａ内の符号列の中で第１の復号器９０８ａにより復号されなかった残りの符号とを連接する。第１のサブシフタ９０６ａは、第１のサブビット連接部９０５ａにより連接された符号列を、第１の復号器９０８ａにより復号された前回の符号の符号長ｌｅｎＡだけシフトする。
【００５１】
第２のサブビット連接部９０５ｂは、第１のサブシフタ９０６ａによりシフトされた符号列が分割された他の符号列（後半１２ビットのＢ系統の符号列）と、第２のサブバッファ９０７ｂの所定の符号列とを連接する。第２のサブシフタ９０６ｂは、第２のサブビット連接部９０５ｂにより連接された符号列を所定の符号長ｌｅｎＢだけシフトする。第２のサブバッファ９０７ｂは、第２のサブシフタ９０６ｂによりシフトされた１２ビット符号列をバッファリングする。第２の復号器９０８ｂは、第２のサブバッファ９０７ｂによりバッファリングされた先頭の符号をシンボル（データ）に復号し、その復号したシンボルｄｅｃＢをシンボルバッファ９１０に出力し、その復号した符号の符号長ｌｅｎＢを第２のサブシフタ９０６ｂ及び加算器９０９に出力する。
【００５２】
第２のサブビット連接部９０５ｂは、第１のサブシフタ９０６ａによりシフトされた符号列が分割された他の符号列（後半１２ビットのＢ系統の符号列）と、第２のサブバッファ９０７ｂ内の符号列の中で第２の復号器９０８ｂにより復号されなかった残りの符号とを連接する。第２のサブシフタ９０６ｂは、第２のサブビット連接部９０５ｂにより連接された符号列を、第２の復号器９０８ｂにより復号された前回の符号の符号長ｌｅｎＢだけシフトする。
【００５３】
加算器９０９は、第１の復号器９０８ａにより復号された符号の符号長ｌｅｎＡと第２の復号器９０８ｂにより復号された符号の符号長ｌｅｎＢとを加算し、符号長ｌｅｎＡ＋ｌｅｎＢをメインシフタ９０３に出力する。
【００５４】
メインビット連接部９０２は、結合済符号バッファ９０１内の符号列と、メインバッファ９０４内の符号列の中で第１のサブビット連接部９０５ａに出力されなかった残りの符号列とを連接する。メインシフタ９０３は、メインビット連接部９０２により連接された符号列を、第１の復号器９０８ａ及び第２の復号器９０８ｂにより復号された前回の符号の合計の符号長ｌｅｎＡ＋ｌｅｎＢだけシフトする。
【００５５】
以上のように、可変長復号装置は、複数系統の符号列がインターリーブされた符号を復号することができる。メインシフタ９０３は、系統数×最大符号長＝２×１２＝２４ビット分のシフト処理が可能である。メインバッファ９０４は、系統数×最大符号長＝２×１２＝２４ビット分のバッファリングを行う。第１のサブシフタ９０６ａ及び第２のサブシフタ９０６ｂは、それぞれ、最大符号長＝１２ビット分のシフトが可能である。第１のサブバッファ９０７ａ及び第２のサブバッファ９０７ｂは、それぞれ、各系統に対して最大符号長＝１２ビット分の符号を格納可能である。
【００５６】
図１０は、図９の可変長復号装置の復号方法の例を示すフローチャートである。ステップＳ１００１では、初期化時にはメインバッファ９０４及びサブバッファ９０７ａ，９０７ｂ共に符号が格納されていないため、メインバッファ９０４は、初期化直後に結合済符号バッファ９０１からデータを読み出し、２４ビットのデータを書き込む。２４ビット容量のメインバッファ９０４は、毎サイクル符号列を第１のサブビット連接部９０５ａに供給し、復号器９０８ａ及び９０８ｂで消費された符号の符号長ｌｅｎＡ及びｌｅｎＢの合計符号長ｌｅｎＡ＋ｌｅｎＢ分を、結合済符号バッファ９０１から補充する。初期化直後は、サブバッファ９０７ａ及び９０７ｂに符号が格納されていないが、最初の読み出し長は最大符号長の１２ビットであることが符号化装置の符号化時に約束されているため、サブシフタ９０６ａ及び９０６ｂのシフト量を０ビットとしてサブバッファ９０７ａ及び９０７ｂにデータを供給する。第１のサブバッファ９０７ａにはメインバッファ９０４内の２４ビットの符号列のうちの前半の１２ビットが格納され、第２のサブバッファ９０７ｂにはメインバッファ９０４内の２４ビットの符号列のうちの後半の１２ビットが格納される。初期化終了後に、ステップＳ１００２及びＳ１００７の並列処理に進む。
【００５７】
ステップＳ１００２では、可変長復号装置は、Ａ系統のＥＯＳ復号終了フラグがアサートされていればＡ系統の復号処理の終了を意味するのでステップＳ１００６に進み、Ａ系統のＥＯＳ復号終了フラグがアサートされていなければＡ系統の復号処理の未終了を意味するのでステップＳ１００３に進む。ステップＳ１００３では、第１の復号器９０８ａは、第１のサブバッファ９０７ａ内の先頭の符号をシンボル（復号データ）ｄｅｃＡに復号し、その符号の符号長（消費ビット長）ｌｅｎＡを出力する。次に、ステップＳ１００４では、可変長復号装置は、シンボルｄｅｃＡがＥＯＳコードであるか否かをチェックし、ＥＯＳコードであれば終了を意味するのでステップＳ１００５へ進み、ＥＯＳコードでなければステップＳ１０１２及びＳ１０１４の並列処理に進む。ステップＳ１００５では、可変長復号装置は、Ａ系統のＥＯＳ復号終了フラグをアサートし、ステップＳ１０１２及びＳ１０１４の並列処理に進む。ステップＳ１００６では、第１の復号器９０８ａは、シンボルｄｅｃＡとして終了コードＮＯＮＥを出力し、符号長ｌｅｎＡとして「０」を出力し、ステップＳ１０１２及びＳ１０１４の並列処理に進む。
【００５８】
ステップＳ１００７では、可変長復号装置は、Ｂ系統のＥＯＳ復号終了フラグがアサートされていればＢ系統の復号処理の終了を意味するのでステップＳ１０１１に進み、Ｂ系統のＥＯＳ復号終了フラグがアサートされていなければＢ系統の復号処理の未終了を意味するのでステップＳ１００８に進む。ステップＳ１００８では、第２の復号器９０８ｂは、第２のサブバッファ９０７ｂ内の先頭の符号をシンボル（復号データ）ｄｅｃＢに復号し、その符号の符号長（消費ビット長）ｌｅｎＢを出力する。次に、ステップＳ１００９では、可変長復号装置は、シンボルｄｅｃＢがＥＯＳコードであるか否かをチェックし、ＥＯＳコードであれば終了を意味するのでステップＳ１０１０へ進み、ＥＯＳコードでなければステップＳ１０１２及びＳ１０１４の並列処理に進む。ステップＳ１０１０では、可変長復号装置は、Ｂ系統のＥＯＳ復号終了フラグをアサートし、ステップＳ１０１２及びＳ１０１４の並列処理に進む。ステップＳ１０１１では、第２の復号器９０８ｂは、シンボルｄｅｃＢとして終了コードＮＯＮＥを出力し、符号長ｌｅｎＢとして「０」を出力し、ステップＳ１０１２及びＳ１０１４の並列処理に進む。
【００５９】
ステップＳ１０１２では、加算器９０９は、符号長ｌｅｎＡ及び符号長ｌｅｎＢを加算し、その加算値ｌｅｎＡ＋ｌｅｎＢを符号長ｌｅｎＭａｉｎとして出力する。次に、ステップＳ１０１３では、メインシフタ９０３は、ビット連接部９０２により出力される符号列を符号長ｌｅｎＭａｉｎだけシフトする。その後、ステップＳ１０１６へ進む。
【００６０】
ステップＳ１０１４では、第１のサブシフタ９０６ａは、第１のサブビット連接部９０５ａにより連接された符号列を符号長ｌｅｎＡだけシフトする。次に、ステップＳ１０１５では、第２のサブシフタ９０６ｂは、第２のサブビット連接部９０５ｂにより連接された符号列を符号長ｌｅｎＢだけシフトする。その後、ステップＳ１０１６へ進む。
【００６１】
ステップＳ１０１６では、可変長復号装置は、Ａ系統のＥＯＳ復号終了フラグがアサートであり、かつＢ系統のＥＯＳ復号終了フラグがアサートであれば、処理を終了し、それ以外の場合にはステップＳ１００２及びＳ１００７の並列処理に戻る。
【００６２】
以上のように、メインバッファ９０４に格納された符号列はＡ系統の符号列とＢ系統の符号列とが交互に並んでいるため、まず第１のサブバッファ９０７ａは符号列のシフト処理によって第１の復号器９０８ａで消費した符号を破棄し、第１のサブビット連接部９０５ａは第１のサブバッファ９０７ａの残余符号列とメインバッファ９０４の符号列とを結合する。結合されたデータの上位１２ビットは再度、第１のサブバッファ９０７ａに格納され、その次の１２ビットは、第２のサブバッファ９０６ｂに格納される。加算器９０９は、第１の復号器９０８ａ及び第２の復号器９０８ｂで復号された符号の符号長ｌｅｎＡ及びｌｅｎＢを加算し、合計の符号長ｌｅｎＡ＋ｌｅｎＢを出力する。メインシフタ９０３は、メインバッファ９０４の符号列から現復号処理によってＡ系統の復号部９１１ａ及びＢ系統の復号部９１１ｂに補充された符号列を破棄するため、メインバッファ９０４の出力を符号長ｌｅｎＡ＋ｌｅｎＢだけシフトし、補充ビット分を破棄する。シフトされた符号列は、結合済符号バッファ９０１の符号列と連結され、その上位２４ビットは再度メインバッファ９０４に格納される。
【００６３】
図７の可変長符号化装置によれば、必ず１サイクルで並列度分の復号処理が可能な符号を生成することができる。結合済符号列は、各系統の符号がインターリーブ（マージ）された構成となっており、それぞれの符号列から何ビットを切り出して結合済符号列を構築するかを各系統で過去に符号化された符号の符号長から決定する。そのため、復号処理で置き換えると、各系統の符号の先頭位置が前のサイクルで各系統で復号した符号の符号長からわかることを意味する。
【００６４】
特に、前のサイクルの符号の符号長の結合済符号列を連結することで、並列復号時の各系統では常に復号処理で復号した符号の符号長と、各系統へ補充するビット長が一致するため、復号時における各系統では常に最大符号長分の符号が保持され、各系統の復号処理が停止することは無い。
【００６５】
ここで、復号開始時に各系統の復号部９１１ａ及び９１１ｂに何ビットを供給するかが不明のため、最初の供給量を符号列から取り出され得る最大符号長Ｎに一致させることで、必ず１サイクルで並列度分の符号が復号可能になることを保障する。
【００６６】
符号化対象シンボルを複数の系統に分割して符号化するため、各系統の符号化対象シンボル数が一致しない場合が発生する。これが発生した場合、各系統の復号器９０８ａ及び９０８ｂをどのタイミングで停止させるかが不明となるため、復号処理がオーバーランしてしまう問題が発生する。そのため、符号化回路７０３ａ及び７０３ｂの各符号列の末尾にＥＯＳコードを付加することで、復号終了時には各系統にＥＯＳコードが復号されることになる。このため、ＥＯＳコードを復号した系統を停止させることで、処理のオーバーランを防止することが可能である。
【００６７】
復号装置においては、各系統の復号部９１１ａ及び９１１ｂが並列に接続されている構成となり、各系統で少なくとも最大符号長Ｎと一致する容量のサブバッファ９０７ａ及び９０７ｂを有する。１クロックサイクルで並列度分の符号を復号するためには、必ずサブバッファ９０７ａ及び９０７ｂには最大符号長Ｎ分の符号が充填されていなければならない。本実施形態では、常に復号器９０８ａ及び９０８ｂで復号した符号の符号長の符号列が、結合済符号バッファ９０１からサブバッファ９０７ａ及び９０７ｂに補充するビット長と一致しているため、必ず最大符号長Ｎ分の符号がサブバッファ９０７ａ及び９０７ｂに格納されていることとなる。これは各系統で毎サイクル１シンボルが復号可能であるということを意味する。また、復号装置内で最も遅延時間が支配的な復号器９０８ａ及び９０８ｂが並列接続されているため、並列度を増加させても最大遅延時間を決定する各系統のパス（クリティカルパス）には常に１つずつの復号器９０８ａ及び９０８ｂしか存在していないため、並列度向上による遅延時間増大を抑制することができる。また、並列度と復号器９０８ａ，９０８ｂの個数が比例関係となるため、並列度に対する回路規模も線形的増加で済む。本実施形態では、符号化装置における各系統のシンボルの符号化と、復号装置における各系列からのシンボル取得の順序が同一であればよく、各サイクルで必ず並列度分のシンボルを取得する構成でなくても良い。復号装置の構成によっては複数サイクルが必要な復号器９０８ａ，９０８ｂを用いることも可能であり、レンジコーダのように特定のサイクルでのみビットを消費するような符号化復号アルゴリズムにも適用可能である。
【００６８】
（第３の実施形態）
図１１は、第３の実施形態による可変長復号装置の構成例を示す図である。以下、図１１が図９と異なる点を説明する。サブビット連接部９０５は、図９の第１のサブビット連接部９０５ａ及び第２のサブビット連接部９０５ｂに対応する。サブシフタ９０６は、図９の第１のサブシフタ９０６ａ及び第２のサブシフタ９０６ｂに対応する。復号器９０８は、図９の第１の復号器９０８ａ及び第２の復号器９０８ｂに対応する。
【００６９】
サブビット連接部９０５は、メインバッファ９０４内の符号列とセレクタ１１０２により出力される所定の符号列とを連接する。サブシフタ９０６は、サブビット連接部９０５により連接された符号列を所定の符号長ｌｅｎだけシフトする。第１のサブバッファ９０７ａは、サブシフタ９０６によりシフトされた２４ビットの符号列を２系統の符号列に分割し、前半１２ビットのＡ系統の符号列をバッファリングする。第２のサブバッファ９０７ｂは、サブシフタ９０６によりシフトされた２４ビットの符号列を２系統の符号列に分割し、後半１２ビットのＢ系統の符号列をバッファリングする。セレクタ１１０１は、第１のサブバッファ９０７ａの符号列と第２のサブバッファ９０７ｂの符号列を交互に選択し、復号器９０８に出力する。復号器９０８は、セレクタ１１０１により出力される符号列を入力し、第１のサブバッファ９０７ａの符号と第２のサブバッファ９０７ｂの符号とを交互に復号し、復号したシンボルをシンボルバッファ９１０に出力し、復号した符号の符号長ｌｅｎをサブシフタ９０６及びメインシフタ９０３に出力する。
【００７０】
セレクタ１１０２は、第１のサブバッファ９０７ａ内の符号列の中で復号器９０８により復号されなかった残りの符号列と、第２のサブバッファ９０７ｂ内の符号列の中で復号器９０８により復号されなかった残りの符号列とを交互に選択し、サブビット連接部９０５に出力する。サブビット連接部９０５は、メインバッファ９０４内の符号列と、セレクタ１１０２により出力されるサブバッファ９０７ａ及び９０７ｂ内の符号列の中で復号器９０８により復号されなかった残りの符号列とを連接する。メインシフタ９０３は、メインビット連接部９０２により連接された符号列を、復号器９０８により復号された前回の符号の符号長ｌｅｎだけシフトする。サブシフタ９０６は、サブビット連接部９０５により連接された符号列を、復号器９０８により復号された前回の符号の符号長ｌｅｎだけシフトする。
【００７１】
本実施形態の可変長復号装置は、２系統の結合済符号列を単体の復号器９０８で復号する例を示す。本実施形態は、サブバッファ９０７ａ及び９０７ｂの出力端子に接続されるセレクタ１１０１及び１１０２の選択を毎サイクル交互に切り替える。回路規模が大きい復号器９０８及びサブシフタ９０６がそれぞれ１個ずつに統合されたことによって、回路規模削減に繋がる。本実施形態では、任意の並列度による並列復号化が可能であり、さらには同じ結合済符号列を最大並列度以下で任意の復号並列度に変更することが可能である。
【００７２】
（第４の実施形態）
図１２は、第４の実施形態による可変長符号化装置の構成例を示す図であり、図７に対して、Ｃ系統の符号化部及びＤ系統の符号化部を追加したものである。可変長符号化装置は、Ａ系統の符号化部、Ｂ系統の符号化部、Ｃ系統の符号化部及びＤ系統の符号化部が並列に接続される。以下、図１２が図７と異なる点を説明する。
【００７３】
Ｃ系統の符号化部は、図７と同様に、第３の符号化回路７０３ｃ、セレクタ７０４ｃ、第３の符号バッファ７０５ｃ、セレクタ７０６ｃ、第３の符号長ＦＩＦＯ７０７ｃ及び第３の切り出し部７０８ｃを有する。Ｄ系統の符号化部は、図７と同様に、第４の符号化回路７０３ｄ、セレクタ７０４ｄ、第４の符号バッファ７０５ｄ、セレクタ７０６ｄ、第４の符号長ＦＩＦＯ７０７ｄ及び第４の切り出し部７０８ｄを有する。分配器７０２は、シンボルバッファ７０１内のシンボルを４系統の符号化回路７０３ａ，７０３ｂ，７０３ｃ，７０３ｄに交互に分配する。第３の切り出し部７０８ｃは、切り出した符号列を結合器７０９に出力する。第４の切り出し部７０８ｄは、切り出した符号列を結合器７０９に出力する。結合器７０９は、４系統の切り出し部７０８ａ，７０８ｂ，７０８ｃ，７０８ｄの符号列を結合し、結合済符号バッファ７１１に出力する。結合済符号バッファ７１１には、４系統の符号列がインターリーブされた符号列が格納される。インターリーブは、複数系統（例えば４系統）の符号列を順番に交互に結合することを意味する。本実施形態によれば、２並列より高い並列度の符号化装置を構成することができる。
【００７４】
図１３は、第４の実施形態による可変長復号装置の構成例を示す図であり、図９に対して、Ｃ系統の復号部９１１ｃ及びＤ系統の復号部９１１ｄを追加したものである。可変長復号装置は、Ａ系統の復号部９１１ａ、Ｂ系統の復号部９１１ｂ、Ｃ系統の復号部９１１ｃ及びＤ系統の復号部９１１ｄが並列に接続される。以下、図１３が図９と異なる点を説明する。
【００７５】
Ｃ系統の復号部９１１ｃは、復号部９１１ａ及び９１１ｂと同様に、第３のサブビット連接部９０５ｃ、第３のサブシフタ９０６ｃ、第３のサブバッファ９０７ｃ及び第３の復号器９０８ｃを有する。Ｄ系統の復号部９１１ｄも、復号部９１１ａ及び９１１ｂと同様に、第４のサブビット連接部９０５ｄ、第４のサブシフタ９０６ｄ、第４のサブバッファ９０７ｄ及び第４の復号器９０８ｄを有する。
【００７６】
メインシフタ９０３及びメインバッファ９０４は、系統数×最大符号長＝４×１２＝４８ビットの符号列を出力する。第１のサブシフタ９０６ａは、４８ビットの符号列のうちの先頭の最大符号長Ｎである１２ビットを第１のサブバッファ９０７ａに出力し、残りの３×Ｎ＝３×１２＝３６ビットの符号列を第２のサブビット連接部９０５ｂに出力する。第２のサブシフタ９０６ｂは、３６ビットの符号列のうちの先頭の最大符号長Ｎである１２ビットを第２のサブバッファ９０７ｂに出力し、残りの２×Ｎ＝２×１２＝２４ビットの符号列を第３のサブビット連接部９０５ｃに出力する。第３のサブシフタ９０６ｃは、２４ビットの符号列のうちの先頭の最大符号長Ｎである１２ビットを第３のサブバッファ９０７ｃに出力し、残りの１×Ｎ＝１×１２＝１２ビットの符号列を第４のサブビット連接部９０５ｄに出力する。
【００７７】
第３の復号器９０８ｃは、復号したシンボルｄｅｃＣをシンボルバッファ９１１に出力し、復号した符号の符号長ｌｅｎＣを第３のサブシフタ９０６ｃ及び加算器９０９に出力する。第４の復号器９０８ｄは、復号したシンボルｄｅｃＤをシンボルバッファ９１１に出力し、復号した符号の符号長ｌｅｎＤを第４のサブシフタ９０６ｄ及び加算器９０９に出力する。加算器９０９は、符号長ｌｅｎＡ、ｌｅｎＢ、ｌｅｎＣ及びｌｅｎＤを加算し、加算値ｌｅｎＡ＋ｌｅｎＢ＋ｌｅｎＣ＋ｌｅｎＤをメインシフタ９０３に出力する。メインシフタ９０３は、メインビット連接部９０２により連接された符号列を符号長ｌｅｎＡ＋ｌｅｎＢ＋ｌｅｎＣ＋ｌｅｎＤだけシフトする。シンボルバッファ９１１には、４系統のシンボルが格納される。
【００７８】
復号装置では、４系統のサブシフタ９０６ａ〜９０６ｄをカスケード接続するため遅延時間の若干の増加は発生するが、遅延時間が支配的な４系統の復号器９０８ａ〜９０８ｄは全て並列に接続されているため、遅延時間の大幅な増加は発生せず、高い並列度で低遅延な復号装置が構築可能である。
【００７９】
（第５の実施形態）
図１４は、第５の実施形態による可変長復号装置の構成例を示す図である。図１４は、図９に対して、復号器９０８ａ及び９０８ｂの代わりにレンジデコーダ１４０１及び１４０１ｂを設け、逆二値化部１４０２を追加したものである。以下、図１４が図９と異なる点を説明する。
【００８０】
本実施形態は、ハフマン符号化に限らず、幅広い可変長符号化に適用可能であり、その一例として並列度を２とし、各系統の符号化方法として算術符号の一種であるレンジコーダ（レンジ幅１６ビット）を用いた場合の可変長復号装置の構成例を示す。可変長符号化装置の構成は図７と同様である。レンジデコーダ１４０１ａ及び１４０１ｂは、それぞれ、復号したデータを逆二値化部１４０２に出力する。逆二値化部１４０２は、二値化データを逆二値化することによりシンボルを生成し、シンタックスエレメントバッファ９１０に出力する。
【００８１】
図１５（Ａ）は、図７の可変長符号化装置の符号化回路（レンジエンコーダ）７０３ａ，７０３ｂの符号化（エンコード）処理例を示すフローチャートである。ステップＳ１５０１では、レンジエンコーダ７０３ａ，７０３ｂは、初期化処理を行う。次に、ステップＳ１５０２では、レンジエンコーダ７０３ａ，７０３ｂは、１ビット処理を行う。その詳細は、後に図１５（Ｂ）を参照しながら説明する。次に、ステップＳ１５０３では、レンジエンコーダ７０３ａ，７０３ｂは、全ビットの処理が完了したか否かをチェックする。完了していなければステップＳ１５０２に戻り、完了していればステップＳ１５０４へ進む。ステップＳ１５０４では、レンジエンコーダ７０３ａ，７０３ｂは、最終処理として、残余ビットを出力する。
【００８２】
図１５（Ｂ）は、図１５（Ａ）のステップＳ１５０２の１ビット処理の処理例を示すフローチャートである。ステップＳ１５１１では、レンジエンコーダ７０３ａ，７０３ｂは、レンジ（Ｒａｎｇｅ）及びロー（Ｌｏｗ）の更新処理を行う。次に、ステップＳ１５１２では、レンジエンコーダ７０３ａ，７０３ｂは、引き伸ばしの必要があるか否かをチェックする。必要がある場合にはステップＳ１５１３に進み、必要がない場合には処理を終了する。ステップＳ１５１３では、レンジエンコーダ７０３ａ，７０３ｂは、引き伸ばし処理を行い、ビット出力を行う。
【００８３】
図１６（Ａ）は、図１４の可変長復号装置のレンジデコーダ１４０１ａ，１４０１ｂの復号（デコード）処理例を示すフローチャートである。ステップＳ１６０１では、レンジデコーダ１４０１ａ，１４０１ｂは、初期化処理を行い、ビット取り込みを行う。次に、ステップＳ１６０２では、レンジデコーダ１４０１ａ，１４０１ｂは、１ビット処理を行う。その詳細は、後に図１６（Ｂ）を参照しながら説明する。次に、ステップＳ１６０３では、レンジデコーダ１４０１ａ，１４０１ｂは、全ビットの処理が完了したか否かをチェックする。完了していなければステップＳ１６０２に戻り、完了していれば処理を終了する。
【００８４】
図１６（Ｂ）は、図１６（Ａ）のステップＳ１６０２の１ビット処理の処理例を示すフローチャートである。ステップＳ１６１１では、レンジデコーダ１４０１ａ，１４０１ｂは、レンジ（Ｒａｎｇｅ）及びロー（Ｌｏｗ）の更新処理を行う。次に、ステップＳ１６１２では、レンジデコーダ１４０１ａ，１４０１ｂは、引き伸ばしの必要があるか否かをチェックする。必要がある場合にはステップＳ１６１３に進み、必要がない場合には処理を終了する。ステップＳ１６１３では、レンジデコーダ１４０１ａ，１４０１ｂは、引き伸ばし処理を行い、ビット取り込みを行う。
【００８５】
ここで、２つのレンジエンコーダ７０３ａ及び７０３ｂにおける引き伸ばし処理のタイミングは、レンジエンコーダ７０３ａ及び７０３ｂでの符号化対象となるシンボル列によって規定されているものとする。例えば、動画圧縮規格Ｈ.２６４におけるＣＡＢＡＣ（Context-based Adaptive Binary Arithmetic Coding）に類似した動画像符号化の例を考える。Ｈ.２６４における符号化では符号化処理前のデータは「シンタックスエレメント列」であるが、まずこれに二値化を施し、二値化の結果であるビット列に対してレンジエンコーダ７０３ａ，７０３ｂを適用する。この例におけるＨ.２６４に類似した符号化においては、シンタックスエレメント列を二値化した後のビットを交互に振り分けることで２系統のシンボル列を形成する。符号化処理においてビットをレンジエンコーダ７０３ａ，７０３ｂで符号化する順序と、デコード処理においてレンジデコーダ１４０１ａ，１４０１ｂからビットを取り出す順序は動画像符号化方式の文法と各シンタックスエレメントの二値化処理によってのみ規定され、符号化と復号における引き伸ばし処理のタイミングは同じビットにおいて発生する。よって、符号化処理中の引き伸ばし処理における出力ビットをハフマン符号における出力ビット、復号処理中の引き伸ばし処理における取り込みビットをハフマン符号における消費ビットとすれば、レンジエンコーダ７０３ａ，７０３ｂ及びレンジデコーダ１４０１ａ，１４０１ｂ以外の処理はハフマン符号における実施形態と等しくなる。
【００８６】
図１７は、可変長符号化装置１７０１及び可変長復号装置１７０２を用いた動画像符号化装置１７０５の構成例を示す図である。可変長符号化装置１７０１は第１〜第５の実施形態の可変長符号化装置であり、可変長復号装置１７０２は第１〜第５の実施形態の可変長復号装置である。
【００８７】
第１〜第５の実施形態の可変長符号化装置及び可変長復号装置の適用範囲は特に限定されず、画像の符号化から無線パケット伝送など幅広い形態が考えられるが、特にリアルタイムの復号処理が要求されるシステムに適用することが望ましい。図１７には、動画像可変長符号化装置１７０５におけるバッファ１７０４のメモリ帯域削減を想定したシステム図である。撮像装置１７０３は、撮像した動画像をローカルデコード画像格納バッファ（ＤＲＡＭ）１７０４を介して動画像符号化装置１７０５に出力する。Ｈ.２６４やＭＰＥＧ−２に代表される動画像可変長符号化装置１７０５は、時間的に近接する画像同士の相関性を利用したフレーム間予測（画面間予測）を行う画面間予測部１７０７と、隣接する画素同士の相関性を利用したフレーム内予測（画面内予測、イントラ予測）を行う画面内予測部１７０７とをスイッチ１７１２の選択によって動画像を圧縮している。画面内予測では、時間的に近い位置にあるフレームから、圧縮対象ブロック（マクロブロック）の動き情報を予測して圧縮し、符号の復号の際には動き情報を基に、予測元の参照領域を読み出して復号に使用する。既に符号化されたピクチャとの相関性を利用する画面間予測を行うためには、一度符号化した過去の画像を内部で複号する必要がある。ローカルデコード画像生成部１７１０でローカルデコードされた画像は非圧縮の状態であり、その状態を保ったままバッファ１７０４へアクセスすると、帯域圧迫の原因となってしまう。そのため、バッファ１７０４へ書き込む際に符号化装置１７０１がローカルデコード画像を符号化してバッファ１７０４に書き込み、復号装置１７０２がバッファ１７０４から符号を読み出して復号することによってバッファ１７０４のメモリ帯域を削減することができる。ここで、符号化装置１７０１及び復号装置１７０２の処理速度が遅いと、バッファ１７０４から読み出すレイテンシが増加してしまうため、フレームレートに対して処理時間が超過してしまい、処理が破綻する可能性が存在するため、符号化装置１７０１及び復号装置１７０２の処理には高いリアルタイム性と並列度の保障が要求される。第１〜第５の実施形態は並列度を任意に設定でき、かつ必ず並列度を保った復号処理が実現できるため、システムの要求性能に対して柔軟に並列度を設定でき、このような構成においても適用可能である。例えば、バッファ１７０４のデータビット幅を６４ビットとし、１画素のビット深度を８ビットとすると、符号化装置１７０１及び復号装置１７０２を８並列構成にすることによって、バッファ１７０４のアクセスのレイテンシは可変長復号装置１７０２のサブバッファ及びメインバッファへの格納に必要な数サイクル程度となり、実質的に符号化及び復号処理による処理時間の増大を抑制することが可能である。
【００８８】
復号装置１７０２は、参照領域格納バッファ１７０８を介して、復号した画像を画面間予測部１７０７に出力する。ＤＣＴ量子化部１７０９は、画面内予測部１７０６又は画面間予測部１７０７により圧縮されたデータに対して、ＤＣＴ（離散コサイン変換：Discrete Cosine Transform）及び量子化を行い、符号化部１７１１に出力する。符号化部１７１１は、符号化により符号を生成してバッファ１７０４に書き込む。
【００８９】
第１〜第５の実施形態によれば、２以上の並列度に対して回路規模の増大は並列度に対して比例関係で収まり、かつ並列度を上げても必ず１サイクルで並列度分の復号が保障されるので、小面積、低遅延かつ高速な符号化装置及び復号装置を提供することができる。また、符号化装置及び復号装置は、ＳｏＣ（システムオンチップ：System On Chip）におけるメモリ帯域削減や、無線通信における伝送路のトラフィック削減のために、符号化及び復号することが有用であり、特に復号処理を高速化することができる。
【００９０】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００９１】
７０１  シンボルバッファ
７０２  分配器
７０３ａ，７０３ｂ  符号化回路
７０４ａ，７０４ｂ  セレクタ
７０５ａ，７０５ｂ  セレクタ
７０６ａ，７０６ｂ  セレクタ
７０７ａ，７０７ｂ  符号長ＦＩＦＯ
７０８ａ，７０８ｂ  切り出し部
７０９  結合器
７１０  セレクタ
７１１  結合済符号バッファ
９０１  結合済符号バッファ
９０２  メインビット連接部
９０３  メインシフタ
９０４  メインバッファ
９０５ａ，９０５ｂ  サブビット連接部
９０６ａ，９０６ｂ  サブシフタ
９０７ａ，９０７ｂ  サブバッファ
９０８ａ，９０８ｂ  復号器
９０９  加算器
９１０  シンボルバッファ
【図１】
0005811775.tif 000002
【図２】
0005811775.tif 000003
【図３】
0005811775.tif 000004
【図４】
0005811775.tif 000005
【図５】
0005811775.tif 000006
【図６】
0005811775.tif 000007
【図７】
0005811775.tif 000008
【図８】
0005811775.tif 000009
【図９】
0005811775.tif 000010
【図１０】
0005811775.tif 000011
【図１１】
0005811775.tif 000012
【図１２】
0005811775.tif 000013
【図１３】
0005811775.tif 000014
【図１４】
0005811775.tif 000015
【図１５】
0005811775.tif 000016
【図１６】
0005811775.tif 000017
【図１７】
0005811775.tif 000018