(57)【要約】【課題】パックビッツ符号化処理で通常必要とされるメモリ容量を削減し、且つ、符号化対象のデータの入力から符号化データの出力に至るまでを高速に処理可能にする。【解決手段】準パックビッツ符号化部１０３は、入力したデータと従前のデータとを比較することで、同じデータの連続している数、或いは、異なるデータが連続している数を計数し、同じデータが連続している場合には１つのデータをデータ部として出力し、異なるデータが連続している場合には入力したデータを順にデータ部として出力し、当該データ部の出力に後続して前記計数結果を連続数情報として出力する。データ部１０４には、符号化データの出力するバス（６４ビット＝８バイト）の２倍に相当するバッファを内蔵し、そこにデータ部及び連続数情報を格納していく。このバッファは２分割され、一方にデータが充填された場合にはそのデータを出力する。【選択図】  図１
2004274555.tif 000002
【特許請求の範囲】
【請求項１】
データストリームをパックビッツ符号化する符号化方法であって、
入力したデータと従前のデータとを比較することで、同じデータの連続している数、或いは、異なるデータが連続している数を計数し、同じデータが連続している場合には１つのデータをデータ部として出力し、異なるデータが連続している場合には入力したデータを順にデータ部として出力し、当該データ部の出力に後続して前記計数結果を連続数情報として出力する準パックビッツ符号化工程と、
前記準パックビッツ符号化工程より出力されたデータ部及び当該データ部に後続して出力される連続数情報の順序を、前記連続数情報に前記データ部が後続するように並べ、所定の出力メモリに出力する出力工程とを備え、
前記出力工程は、
連続数情報、データ部の順に、前記出力バッファに一度に出力可能な
データ数に対し２倍のデータ数を格納可能な内部メモリに格納するため、
連続数情報の格納するための連続数用アドレスと、前記データ部のデー
タを格納するためのデータ部用アドレスを保持する内部アドレス保持工
程と、
前記準パックビッツ符号化工程より前記データ部のデータを受信した
場合には前記データ部用アドレス位置に格納して当該データ部用アドレ
スを更新し、前記連続数情報を受信した場合には前記連続数用アドレス
位置に格納して当該連続数用アドレスを更新する格納工程と、
前記内部データを上位と下位領域に分け、それぞれの前記出力メモリ
に対するアドレスを記憶保持する外部アドレス保持工程と、
前記内部データの上位、下位領域のいずれか一方に出力可能なデータ
が整ったとき、その領域のデータ群を、前記出力メモリの前記外部アド
レス保持工程で保持されたアドレス位置に出力すると共に、出力済みと
なった内部メモリの前記領域に対する前記外部アドレス保持工程を更新
する出力制御工程と
を備えることを特徴とする符号化方法。
【請求項２】
前記符号化対象のデータは、画像データの像域情報であることを特徴とする請求項１に記載の符号化方法。
【請求項３】
前記符号化対象のデータは、画像データであることを特徴とする請求項１に記載の符号化方法。
【請求項４】
データストリームをパックビッツ符号化する符号化装置であって、
入力したデータと従前のデータとを比較することで、同じデータの連続している数、或いは、異なるデータが連続している数を計数し、同じデータが連続している場合には１つのデータをデータ部として出力し、異なるデータが連続している場合には入力したデータを順にデータ部として出力し、当該データ部の出力に後続して前記計数結果を連続数情報として出力する準パックビッツ符号化手段と、
前記準パックビッツ符号化手段より出力されたデータ部及び当該データ部に後続して出力される連続数情報の順序を、前記連続数情報に前記データ部が後続するように並べ、所定の出力メモリに出力する出力手段とを備え、
前記出力手段は、
出力バッファに一度に出力可能なデータ数に対し２倍のデータ数を格
納可能な内部メモリと、
連続数情報、データ部の順に前記内部メモリに格納するため、連続数
情報の格納するための連続数用アドレスと、前記データ部のデータを格
納するためのデータ部用アドレスを保持する内部アドレス保持手段と、
前記準パックビッツ符号化手段より前記データ部のデータを受信した
場合には前記データ部用アドレス位置に格納して当該データ部用アドレ
スを更新し、前記連続数情報を受信した場合には前記連続数用アドレス
位置に格納して当該連続数用アドレスを更新する格納手段と、
前記内部データを上位と下位領域に分け、それぞれの前記出力メモリ
に対するアドレスを記憶保持する外部アドレス保持手段と、
前記内部データの上位、下位領域のいずれか一方に出力可能なデータ
が整ったとき、その領域のデータ群を、前記出力メモリの前記外部アド
レス保持手段で保持されたアドレス位置に出力すると共に、出力済みと
なった内部メモリの前記領域に対する前記外部アドレス保持手段を更新
する出力制御手段と
を備えることを特徴とする符号化装置。
【請求項５】
データストリームをパックビッツ符号化する符号化装置として機能するコンピュータプログラムであって、
入力したデータと従前のデータとを比較することで、同じデータの連続している数、或いは、異なるデータが連続している数を計数し、同じデータが連続している場合には１つのデータをデータ部として出力し、異なるデータが連続している場合には入力したデータを順にデータ部として出力し、当該データ部の出力に後続して前記計数結果を連続数情報として出力する準パックビッツ符号化手段と、
前記準パックビッツ符号化手段より出力されたデータ部及び当該データ部に後続して出力される連続数情報の順序を、前記連続数情報に前記データ部が後続するように並べ、所定の出力メモリに出力する出力手段とを備え、
前記出力手段は、
連続数情報、データ部の順に、前記出力バッファに一度に出力可能な
データ数に対し２倍のデータ数を格納可能な所定の内部メモリに格納す
るため、連続数情報の格納するための連続数用アドレスと、前記データ
部のデータを格納するためのデータ部用アドレスを保持する内部アドレ
ス保持手段と、
前記準パックビッツ符号化手段より前記データ部のデータを受信した
場合には前記データ部用アドレス位置に格納して当該データ部用アドレ
スを更新し、前記連続数情報を受信した場合には前記連続数用アドレス
位置に格納して当該連続数用アドレスを更新する格納手段と、
前記内部データを上位と下位領域に分け、それぞれの前記出力メモリ
に対するアドレスを記憶保持する外部アドレス保持手段と、
前記内部データの上位、下位領域のいずれか一方に出力可能なデータ
が整ったとき、その領域のデータ群を、前記出力メモリの前記外部アド
レス保持手段で保持されたアドレス位置に出力すると共に、出力済みと
なった内部メモリの前記領域に対する前記外部アドレス保持手段を更新
する出力制御手段と
として機能することを特徴とするコンピュータプログラム。
【請求項６】
請求項５に記載のコンピュータプログラムを格納することを特徴とするコンピュータ可読記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は情報を圧縮符号化する技術に関するものである。
【０００２】
【従来の技術】
データの圧縮符号化技術としてパックビッツ符号化が知られている。このパックビッツ符号化とはランレングス符号化の１つであり、符号化前の情報を損失することなし復号可能、すなわち、ロスレス符号化でもある。
【０００３】
以下、パックビッツ符号化の説明を、符号化を行う単位であるひとつのデータが８ビットで構成されているものとして行う（データとしては例えば８ビット多値画素データである）。また、符号化する以前のデータを生データと呼び、符号化以前の生データのストリームを生データ列と呼ぶ。
【０００４】
パックビッツ符号化とは、生データ列を、「同じデータが連続する部分」と「異なるデータが連続する部分」とに分割し、それぞれの部分に対してデータの「長さ情報」を付加するものである。そして、「同じデータが連続する部分」に関しては、「連続する数＋データ」という形に、また「異なるデータが連続する部分」に関しては「異なるデータが連続する数＋異なるデータ列」という形で表す。そしてこの処理で生成したデータ列をパックビッツ符号化データとして出力する。
【０００５】
今、以下の（１）ような生データ列（２４個のデータ）が入力されたとする。個々のデータは８ビット（０〜２５５の範囲のデータ）。
０，０，０，０，１，２，３，４，４，４，４，４，４，４，４，５，５，６，７，８，８，９，１０，１０      …  （１）
この場合、生データ列を
０，０，０，０，
１，２，３，
４，４，４，４，４，４，４，４，
５，５，
６，７，
８，８，
９，
１０，１０                                              …  （２）
というように、「同じデータが連続する部分」と、「異なるデータが連続する部分」とに分割する。そして、それぞれの部分に「長さ情報」を付加し、「同じデータが連続する部分」に関してはデータ部分を１つだけに圧縮する。
【０００６】
2004274555.tif 000003
（３）では、「長さ情報」は括弧で囲んで示している。「長さ情報」を正負の値で示したのは、連続する部分が同じデータであるのか、異なるデータであるのかを区別するためである。すなわち、負の数は「同じデータの連続部分」を表し、正の数は「異なるデータの連続部分」を表している。そして、この「長さ情報」をデータと同じく８ビットの幅を持つ「長さコードデータ」としてデータ列に埋め込んで出力する。すなわち、長さコードデータの８ビットの最上位ビットＭＳＢを正負の符号ビットとして扱う。
【０００７】
また、上記の値「９」のように連続する出たの間に、１つだけ孤立して存在するデータについては、「同じデータが一つ連続している」として定義する。そのため、異なるデータの連続する数は最低でも２以上となる。
【０００８】
長さコードデータと「同じ値のデータが連続する数」及び「異なる値のデータが連続する数」との関係（テーブル）は次のようになる（注：「０ｘ」は１６進数を示す）。
【０００９】
2004274555.tif 000004
したがって、先に示した生データ列（１）をパックビッツ符号化すると、次の示す符号化データ列（４）が生成されることになる。
ＦＤ，００，０２，０１，０２，０３，Ｆ９，０４，ＦＦ，５，０１，０６，０７，ＦＦ，０８，００，０９，ＦＦ，１０    …  （４）
上記の如く、パックビッツ符号化では、同じデータの連続する数は１乃至１２８まで表現でき、異なるデータの連続する数は２乃至１２８まで表現できる。従って、仮に、同じデータが連続する数が１２９以上の場合には、１２８個まで連続する符号（長さコードデータ＋連続するデータ）を生成し、１２９番目以降については、その１２９番目のデータを起点とする符号を生成することになる。これは異なるデータの連続する場合にも同様である。
【００１０】
尚、上記表に示すようにパックビッツ符号化では「長さコードデータ」として０ｘ８０を生成しない。従って、この「０ｘ８０」を、符号化データ列の最後を表すエンドオブリストコードデータとして定義することもある。
【００１１】
以降、パックビッツ符号化データにおいて「長さコードデータ」のことを「長さ情報」、長さ情報に続いて出力される実際のデータの値を示す部分を「データ部」という言葉で表現することとする。
【００１２】
以上のように、パックビッツ符号化では同じ値のデータが連続して現れる回数が増加すると符号化後のデータ量が減少する（圧縮率が高くなる）。
【００１３】
【発明が解決しようとする課題】
上記の如く、パックビッツ符号化データはテーブル（４）に示した様に、「同じデータが連続する部分」に関しては「連続する数を表す長さ情報＋データ値」という形で、また「異なるデータが連続する部分」に関しては「異なるデータが連続する数を表す長さ情報＋異なるデータ列」という形で表現されるため「同じデータが連続する数」、または「異なるデータが連続する数」が確定するまでは長さ情報及びそれに続くデータの値を出力する事ができなかった。
【００１４】
特に「異なるデータが連続する部分」に関しては「異なるデータが連続する数」が確定するまでパックビッツ符号化装置に入力されたデータ列を出力することが出来ず、それまで入力されたデータ列（最大１２８個）が格納できるだけの容量を持つメモリなどにデータ列を格納しておく必要があった。
【００１５】
また、「異なるデータが連続する数」が確定した後で前記メモリに格納したデータ列を出力すると、データを入力してから出力するまでに時間がかかるといった問題があった。
【００１６】
そこで、本願発明は、パックビッツ符号化処理で通常必要とされるメモリ容量を削減し、且つ、符号化対象のデータの入力から符号化データの出力に至るまでを高速に処理可能な符号化技術を提供しようとするものである。
【００１７】
【課題を解決するための手段】
かかる課題を解決するため、例えば本発明の符号化方法は以下の工程を備える。すなわち、
データストリームをパックビッツ符号化する符号化方法であって、
入力したデータと従前のデータとを比較することで、同じデータの連続している数、或いは、異なるデータが連続している数を計数し、同じデータが連続している場合には１つのデータをデータ部として出力し、異なるデータが連続している場合には入力したデータを順にデータ部として出力し、当該データ部の出力に後続して前記計数結果を連続数情報として出力する準パックビッツ符号化工程と、
前記準パックビッツ符号化工程より出力されたデータ部及び当該データ部に後続して出力される連続数情報の順序を、前記連続数情報に前記データ部が後続するように並べ、所定の出力メモリに出力する出力工程とを備え、
前記出力工程は、
連続数情報、データ部の順に、前記出力バッファに一度に出力可能な
データ数に対し２倍のデータ数を格納可能な内部メモリに格納するため、
連続数情報の格納するための連続数用アドレスと、前記データ部のデー
タを格納するためのデータ部用アドレスを保持する内部アドレス保持工
程と、
前記準パックビッツ符号化工程より前記データ部のデータを受信した
場合には前記データ部用アドレス位置に格納して当該データ部用アドレ
スを更新し、前記連続数情報を受信した場合には前記連続数用アドレス
位置に格納して当該連続数用アドレスを更新する格納工程と、
前記内部データを上位と下位領域に分け、それぞれの前記出力メモリ
に対するアドレスを記憶保持する外部アドレス保持工程と、
前記内部データの上位、下位領域のいずれか一方に出力可能なデータ
が整ったとき、その領域のデータ群を、前記出力メモリの前記外部アド
レス保持工程で保持されたアドレス位置に出力すると共に、出力済みと
なった内部メモリの前記領域に対する前記外部アドレス保持工程を更新
する出力制御工程とを備えることを特徴とする。
【００１８】
【発明の実施の形態】
以下、添付図面に従って本発明に係る実施形態を説明する。
【００１９】
＜概要の説明＞
実施形態では、デジタル複写機を例にして説明することとする。
【００２０】
図２は実施形態におけるデジタル複写機のブロック構成図である。図中、１は装置全体の制御を司る制御部であり、ＣＰＵ、その制御処理プログラムを記憶しているＲＯＭ、及びワークエリアとして使用するＲＡＭで構成される。２は原稿を読取るリーダ部であり、原稿画像をカラー画像として読取る撮像ユニット並びにＡＤＦ（Ａｕｔｏ  Ｄｏｃｕｍｅｎｔ  Ｆｅｅｄｅｒ）を搭載している。３は前処理部であって各種補正処理（例えばシェーディング補正等が含まれる）を行う。４は読取って得た画像データを圧縮符号化する符号化部であり、例えばＪＰＥＧ符号化方法に従って圧縮符号化する。５は圧縮符号化データを一時的に記憶する記憶部である。従って、リーダ部２からは順次原稿画像を読み取ると、その圧縮符号化データが記憶部５に蓄積されていくことになる。６は復号部であって、記憶部５に蓄積された圧縮符号化データを復号する。７は画像処理部であって、復号部１２で復号して得られた各画素毎について記録色成分のデータの生成すると共に、後述する復号部１２からの各画素毎の情報に基づき、像域に特化した処理を行う。例えば、文字線画領域については、この結果は、プリンタエンジン８に出力され、印刷が行われることになる。プリンタエンジン８は、カラーレーザビームプリンタエンジンとするが、インク液を吐出するタイプでも勿論構わないので、印刷方式で限定されるものではない。
【００２１】
一方、前処理部３から出力された各色成分のデータは、像域判定部９に供給され、ここで画素単位にその如何なる像域にあるのかを判定し、１画素につきこの判定結果を１バイトの属性情報として出力する。
【００２２】
この像域判定部９で判定する内容としては、注目画素が網点中にある文字線画の画素であるか否か、有彩色／無彩色のいずれであるか、文字か否か（文字線画領域か中間調領域か）、文字線画である場合のその線分の太さ情報が含まれる。
【００２３】
文字線画か否かの判定は注目画素と隣接する画素との間の輝度変化が急峻であるか否か（閾値を越えるか）で判断する。そして、その急峻であると判定された画素が所定数連続する場合には文字線画と判定し、所定数に満たない場合には網点であると判断する。従って、網点中にある文字か否かは、注目画素が文字であると判定され、そこから所定の距離範囲内に網点であると判定された画素数が複数存在するかで判断する。なお、文字線画でもなく、網点でもないと判断した場合には、中間調領域と判断すれば良いであろう。
【００２４】
また、有彩色か無彩色かの判断は、注目画素の各輝度色成分ＲＧＢの輝度値の差が閾値以下の場合に無彩色と判断する。更に精度良く判定するためには、注目画素を含む近傍に１つでも有彩色の画素が存在すれば、注目画素を有彩色と判断するようにする。
【００２５】
また、文字の太さ情報とは、文字であると判断された画素のエッジに沿う方向に対して直交する方向の文字線画と判定された画素数を計数すれば良いであろう。
【００２６】
上記の如く、像域判定部９は、１画素毎にその判定結果を８ビットのデータとして出力する。８ビットの内訳は、
Ｂｉｔ      意味
７          予約（０）
６          予約（０）
５          文字太さ
４          文字太さ    ビット４、５で文字・線画の太さ０〜３を表現
３          予約（０）
２          文字        文字線画＝１、非文字線画（中間調）＝０
１          網点中文字  網点中にある文字・線画＝１、それ以外＝０
０          無彩色      無彩色＝１、有彩色＝０
としたが、像域毎に最適な画像処理を行うために用いられる像域要素はこれ以外でも良いのは勿論である。
【００２７】
さて、像域判定部９では、上記の如く、１画素につき１バイトの像域情報が出力されてくるが、像域情報符号化部１０はこの情報をパックビッツ符号化を行うことで圧縮する。本実施形態における特徴部分は、この像域情報符号化部１０にあるので、その詳細について後述することとする。１１は像域情報符号化部１０でパックビッツ符号化された像域情報を一時的に記憶する記憶部である。１２は復号部であって、記憶部１１に記憶された圧縮符号化された像域情報を復号し、画像処理部７に供給する。従って、復号部６、１１は互いに同期して、復号結果を画像処理部７に出力することになる。
【００２８】
画像処理部７そのものは本願発明とは直接には関与しないが、基本的には、カラー輝度信号を記録色信号であるＹＭＣへの変換、ＵＣＲ（Ｕｎｄｅｒ  Ｃｏｌｏｒ  Ｒｅｍｏｖａｌ）及びＢＧ（Ｂｌａｃｋ  Ｇｅｎｅｒａｔｉｏｎ）処理を行ない、プリンタエンジンの階調できる階調数まで減らす量子化（誤差拡散やディザ法）を行ない、無彩色と判定された画素についてはＫ成分のみを用いて印刷する（有彩色と判定された画素はＹＭＣＫを利用する）。また、網点中の文字線画については、誤差拡散処理を施すと、回りの網点の濃度の量子化結果の誤差の影響を受けるので、ディザ処理を行う等が考えられる。また、レーザビームプリンタの場合、線の太さが細いとトナーの乗りが悪く、濃度が薄くなり易く、且つ、その線が途切れ途切れになりやすい。そこで細い程、濃度を高く調整する等の処理が行われる。
【００２９】
＜像域情報符号化部１０の説明＞
実施形態における像域情報符号化部１０の構成は、例えば図１に示す構成となっている。以下、同図のブロック図を用いて、その構成と処理内容を説明することとする。
【００３０】
図中、１０３は準パックビッツ符号化部であり、像域判定部９からの像域情報を８ビットバスｄａｔａ（１１５）から入力し、パックビッツ符号化処理を行い符号化データを生成する。ただし通常のパックビッツ符号化処理では、長さ情報に続いてデータ部が出力されるのに対し、実施形態における符号化部１０３で生成された符号化データは先ずデータ部が先に出力され、それに後続して長さ情報が出力される点で異なる。
【００３１】
尚、本実施形態ではバスｄａｔａの他に、バスｄａｔａから入力されるデータが有効であることを表すｖａｌｉｄ信号１１４、及び準パックビッツ符号化部１０３がデータを取得することが可能である状態を表すレディ信号ｒｅｓｄｙ１１７、バスｄａｔａからデータ入力が終了したことを表す終了信号ｅｎｄ１１８を用いてデータを取得することとする。
【００３２】
準パックビッツ符号化部１０３で生成した符号化データは、ｖ＿ｏｕｔ（１３３）を用いて出力される。しかし先に述べたように、準パックビッツ符号化部１０３から出力される符号化データは通常のパックビッツ符号化データとは異なり、先にデータ部のデータ値が出力され、それに続いて長さ情報がｖ＿ｏｕｔから出力される。
【００３３】
そのため本実施形態の準パックビッツ符号化部１０３では、ｖ＿ｏｕｔから出力しているデータが長さ情報であるか、データ部であるかを判別するために、長さ情報であることを示すｌ＿ｖａｌｉｄ１３２及びデータ部であることを示すｄ＿ｖａｌｄ１３１、データの出力が終了したことを表す終了信号ｖ＿ｅｎｄ１３４を用いて符号化データの出力制御を行う。
【００３４】
データ部を先に出力し、その後で長さ情報を出力することになるので、準パックビッツ符号化部１０３内には、連続数を計数するカウンタと、前回のデータと今回のデータとが同じであるかどうかを判定するため、これらを一時的に保持する数バイト（２バイト）のレジスタがあれば十分である。
【００３５】
１０４はデータ出力部であり、準パックビッツ符号化部１０３から取得した符号化データを、通常のパックビッツ符号化データの順番になるように長さ情報とデータ部の並び順を入れ替えを行う。
【００３６】
本実施形態では並び換えたパックビッツ符号化データを８データ分をまとめて６４ビットとしてｅｎｃｏｄｅ＿ｄａｔａ１４１で示されるバスを介して出力すると共に、前記ｅｎｃｏｄｅ＿ｄａｔａから出力したデータを格納する後段の記憶部１１の格納アドレスをａｄｄｒｅｓｓ１４２としてら出力する。また、ｅｎｃｏｄｅ＿ｄａｔａ及びａｄｄｒｅｓｓからデータ及びアドレスを出力する際には、前記データ及びアドレスが有効であることを表す有効信号であるｅｎｃｏｄｅ＿ｖａｌｄ１４０から１を出力する。また、データ出力部からのアドレス及びデータの出力が終了すると、ｅｎｃｏｄｅ＿ｅｎｄ１４３から１を出力することでデータの出力が終了したことを後段に知らせる。
【００３７】
上記の如く、データ出力部１０４からは６４ビット（８バイト）単位に符号化データを出力することになる。
【００３８】
ところで、パックビッツ符号化では、最大の連続数は１２８であり、異なるデータが１２８バイト連続した場合を考慮すると、データ出力部１０４には１２８バイト分のバッファが必要になると考えられるが、本実施形態では、バス幅の２倍（８×２＝１６バイト）のレジスタ群の容量で上記並べ替えを実現する（詳細は後述）。
【００３９】
つまり、準パックビッツ符号化部１０３、並びに、データ出力部１０４を合わせても十分に少ないバッファ容量で実現できるようにし、１チップ化する際のコストを削減することを可能にしている。
【００４０】
＜準パックビッツ符号化１０３の説明＞
実施形態における準パックビッツ符号化部１０３のハードウェア構成を明らかにするため、その動作に相当する処理内容を図３乃至図８のフローチャートを用いて説明する。
【００４１】
実施形態の符号化部１０３はその動作を開始すると、ｄａｔａ（１１５）からデータ（実施形態では像域情報）が入力されるのを待つ。ｄａｔａ（１１５）からデータが入力されると（ステップＳ３０１）、その値を初期値として内部変数ｃｎｔを１に、ｃｏｎｔｉｎｕｅを０に設定すると共に、ｄａｔａから入力されたデータの値を内部変数ｄａｔａ＿ｂｕｆに格納する（ステップＳ３０２）。尚、上記内部変数のｃｎｔはｄａｔａ＿ｂｕｆに格納した値が連続している数を表し、ｃｏｎｔｉｎｕｅはｄａｔａ＿ｂｕｆに格納したデータ値が連続している状態を１、連続していない状態を０で示す。また、以下の説明において、ｄａｔａ＿ｂｕｆには、符号化する最初のデータ（同じデータが連続する場合にはその先頭のデータ、異なる場合には直前のデータ）を格納するレジスタであり、ｄａｔａとは今回入力したデータを一時的に格納するレジスタであることに注意されたい。
【００４２】
次に準パックビッツ符号化部はデータ入力の終了を判断する（ステップＳ３０６）。本実施形態ではバスｅｎｄ（１１８）から１が入力されることでデータの入力が終了したと判断し、図８の処理へと分岐する。ｅｎｄ（１１８）から１が入力されていない場合は、データ分割部はｄａｔａ（１１５）から次のデータが入力されるのを待つ。
【００４３】
次のデータ値が入力されると（ステップＳ３０７）、符号化部１０３は内部変数ｃｏｎｔｉｎｕｅの値により分岐を行う（ステップＳ３０８）。ｃｏｎｔｉｎｕｅの値が「同じデータが連続していない」部分を表す０である場合、さらにｄａｔａから入力されたデータ値と内部変数ｄａｔａ＿ｂｕｆの値を比較する（ステップＳ３０９）。ここでｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆの値が異なる場合は図４の処理へと分岐する。また、ｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆの値が等しい場合は、図５の処理へと分岐して「同じデータが連続していない部分」を終了するための処理と、新たに「同じデータが連続している部分」が始まるための処理を行う。
【００４４】
一方、ステップＳ３０８により内部変数ｃｏｎｔｉｎｕｅの値が「同じデータが連続している」部分を表す１であった場合、同様にｄａｔａから入力されたデータ値と内部変数ｄａｔａ＿ｂｕｆの値を比較し（ステップＳ３１０）、ｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆの値が異なる場合は図６の処理へと分岐する。また、ｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆの値が等しい場合は、図５の処理へと分岐して「同じデータが連続している部分」を続けるための処理を行う。
【００４５】
図４は準パックビッツ符号化部における、内部変数ｃｏｎｔｉｎｕｅが０かつｄａｔａから入力されたデータ値と内部変数ｄａｔａ＿ｂｕｆの値が異なる場合（図３におけるステップＳ３０９がｎｏ）の処理を表すフローチャートである。
【００４６】
この場合、パックビッツ符号化データを生成するためにｄａｔａ＿ｂｕｆに格納されている値をｖ＿ｏｕｔから出力する（ステップＳ４０１）。これは、異なるデータが連続すると判断した場合のデータを出力していることに他ならない。そして内部変数ｃｎｔの値を参照し、１２８（８０ｈ）であるかを判断する（４０８）。
【００４７】
本実施形態は８ビットでパックビッツ符号データを表しているため、「同じデータが連続している」部分及び「同じデータが連続していない」部分の数は１２８までしか表す事が出来ない。そのため内部ｃｎｔの値が１２８の場合、「同じデータが連続していない部分」が１２８回続いているという情報を出力する必要が生ずる。そのためステップＳ４０４により長さ情報を算出して（この場合「異なるデータが１２８個連続しているので」長さ情報として１２７（７Ｆｈ）が生成される）ｖ＿ｏｕｔから出力する。その後、内部変数ｃｎｔを０に初期化して（ステップＳ４０５）、１を加算する（ステップＳ４０６）。また、ｄａｔａ＿ｂｕｆのデータが出力済みであるので、その内容を今回入力したｄａｔａで更新する（ステップＳ４０７）。そして、次のデータ受け取り準備を行った後で、図３におけるステップＳ３０６に戻る。
【００４８】
また、ステップＳ４０８において内部変数ｃｎｔの値が１２８でない（１２８未満）である場合は、ステップＳ４０６によりｃｎｔに１を加算し、ｄａｔａから入力されたデータ値を内部変数ｄａｔａ＿ｂｕｆに格納して（ステップＳ４０７）、次のデータ受け取り準備を行った後で、図３におけるステップＳ３０６に戻る。
【００４９】
図５は準パックビッツ符号化部１０３における、内部変数ｃｏｎｔｉｎｕｅが０かつｄａｔａから入力されたデータ値と内部変数ｄａｔａ＿ｂｕｆの値が同じ場合（図３におけるステップＳ３０９がｙｅｓ）の処理を表すフローチャートである。
【００５０】
この場合、一つ前の処理まではｃｏｎｔｉｎｕｅが０であるため「同じデータが連続しない」部分の処理を行っていたことになる。そして、今回、ｄａｔａから入力されているデータ値と内部変数ｄａｔａ＿ｂｕｆの値が同じあったことになる。つまり、「同じデータが連続しない」部分は一つ前のデータで終了していたことを意味する。そこで内部変数ｃｏｎｔｉｎｕｅの値を「同じデータが連続している」部分を表す１に設定し（ステップＳ５０１）、内部変数ｃｎｔの値を参照する（ステップＳ５０２）。ｃｎｔの値が１でなければ、それまで続いていた「異なるデータが連続している」部分のデータ数を算出して出力する必要がある。
【００５１】
現在ｄａｔａ＿ｂｕｆに格納されている値は「同じデータが連続している」部分に含まれるため、実際に「同じデータが連続していない」部分のデータ数は内部カウンタｃｎｔから１を減した値である。また、「異なるデータが連続する数」を表す長さ情報は「異なるデータが連続している」数から１を減じた値であるため、ここでは内部変数ｃｎｔから２を減じて長さ情報を求め、その長さ情報をｖ＿ｏｕｔから出力する（ステップＳ５０３）。
【００５２】
そしてｄａｔａ＿ｂｕｆに入っているデータの連続数（ここでは１）を内部変数ｃｎｔに設定（ステップＳ５０４）し、さらにｄａｔａから入力されたデータの分としてｃｎｔに１を加算（ステップＳ５０５）する。これにより次のデータの受け取り準備は終了したため、データ入力終了の判断を行うため図３のステップＳ３０６に戻る。
【００５３】
また、ステップＳ５０２においてｃｎｔ値が１であった場合は、ステップＳ５０５においてｃｎｔの値に１を加算して、図３のステップＳ３０６に戻る。
【００５４】
図６は準パックビッツ符号化部１０３における、内部変数ｃｏｎｔｉｎｕｅが１かつｄａｔａから入力されたデータ値と内部変数ｄａｔａ＿ｂｕｆの値が異なる場合（図３におけるステップＳ３１０でＮｏ）の処理を表すフローチャートである。
【００５５】
この場合ｄａｔａから入力されるデータ値がｄｔａ＿ｂｕｆの値が異なるため、「同じデータが連続している」部分はここで終了し、「同じデータが連続していない」部分が始まることが判明する。そのためｄａｔａ＿ｂｕｆに格納されている値をｖ＿ｏｕｔから出力し（ステップＳ６０１）、内部変数ｃｏｎｔｉｎｕｅの値を「同じデータが連続していない」部分を表す０に設定して（ステップＳ６０７）、内部変数ｃｎｔの値を参照する（ステップＳ６０８）。
【００５６】
ｃｎｔの値が１以外であれば、「同じデータが連続している」部分のデータ数が格納されている内部カウンタｃｎｔから長さ情報を求め（２５６からｃｎｔの値を減じ、さらに１を加えることにより求める）、その長さ情報をｖ＿ｏｕｔから出力する（ステップＳ６０３）。
【００５７】
その後内部変数ｃｎｔを０に初期化して（ステップＳ６０４）から、ｄａｔａから新たなデータ値を取得してｄａｔａ＿ｂｕｆに格納し（ステップＳ６０５）、さらにｃｎｔに１を加算する（ステップＳ６０６）。こうして次のデータ受け取り準備が終了すると、データ入力終了の判断を行うため、図３のステップＳ３０６に戻る。
【００５８】
また、ステップＳ６０８により内部変数ｃｎｔの値が１であった場合は、ステップＳ６０１で出力したデータ値を「同じデータが連続しない」部分の最初のデータとして処理を行う。そのためｄａｔａから新たなデータ値を取得してｄａｔａ＿ｂｕｆに格納し（ステップＳ６０５）、さらにｃｎｔに１を加算する（ステップＳ６０６）。こうして次のデータ受け取り準備が終了すると、データ入力終了の判断を行うため図３のステップＳ３０６に戻る。
【００５９】
図７は準パックビッツ符号化部１０３における、内部変数ｃｏｎｔｉｎｕｅが１かつｄａｔａから入力されたデータ値と内部変数ｄａｔａ＿ｂｕｆの値が同じ場合（図３におけるステップＳ３１０がＹｅｓ）の処理を表すフローチャートである。
【００６０】
この場合ｄａｔａから入力されるデータ値をｄｔａ＿ｂｕｆの値が同じため、「同じデータが連続している」部分はさらに続いていることになる。そのためデータが連続する数を求めるため内部変数ｃｎｔに１を加算する（ステップＳ７０１）。
【００６１】
また、実施形態では、８ビットでパックビッツ符号データを表しているため、「同じデータが連続している」部分及び「同じデータが連続していない」部分の数は図５の説明で述べた様に１２８までしか表す事が出来ない。そのため内部ｃｎｔの値が１２９以上の場合、「同じデータが連続している」部分が１２８回続いているという情報を出力する必要が生ずる。そのため内部変数ｃｎｔの値を参照し（ステップＳ７０２）、その値が１２９以上である場合はｄａｔａ＿ｂｕｆに格納されているデータ値をｖ＿ｏｕｔから出力し（ステップＳ７０３）、それに続いて「同じデータが１２８個連続している」ことを表す長さ情報である１２９（８１ｈ）をｖ＿ｏｕｔから出力する（ステップＳ７０４）。尚、この１２９という長さ情報は、従来技術で示した表（４）をテーブル化して参考して求めてもいいし、同じデータがｎ個続く事を表す長さ情報が
２５６−ｎ＋１
であることから求めてもよい。ステップＳ７０４により長さ情報が出力出力されると、準パックビッツ符号化部１０３は内部変数ｃｎｔから後段にパックビッツ符号データとして出力した分の１２８を減じ（ステップＳ７０５）、次のデータ受け取り準備を行った後で、データ入力終了の判断を行うために図３のステップＳ３０６に戻る。
【００６２】
また、ステップＳ７０２により内部変数ｃｎｔが１２８以下の場合は、パックビッツ符号化に必要なデータは生成されないため、そのまま図３のステップＳ３０６に戻る。
【００６３】
尚、図７のフローチャートではパックビッツ符号化に必要なデータ値は既にｄａｔａ＿ｂｕｆに格納されているのでｍａｓｋｅｄ＿ｄａｔａから入力されたデータ値を内部変数ｄａｔａ＿ｂｕｆに格納する必要は無いが、格納しても構わない。
【００６４】
図８は図３のステップ３０６によりｅｎｄ（１１８）から１が入力され、データの入力が終了したと判断した場合のフローチャートである。
【００６５】
まず始めに内部変数ｄａｔａ＿ｂｕｆに格納しているデータ値をｖ＿ｏｕｔから出力し（ステップＳ８０１）、その後内部変数ｃｏｎｔｉｎｕｅの値を参照する（ステップＳ８０２）。
【００６６】
ｃｏｎｔｉｎｕｅの値が０の場合、ステップ８０１で出力したデータ値は「データが連続していない」部分の最後のデータ値であるため、内部変数ｃｎｔから「異なるデータが連続する」部分の長さ情報を生成して出力する。具体的には内部変数ｃｎｔの値から１を減じてｖ＿ｏｕｔから出力する（ステップＳ８０３）。
【００６７】
そして後段にデータの出力終了を知らせるためにｖ＿ｅｎｄ（１３４）に１を出力し（ステップＳ８０４）、一連の処理を終える。
【００６８】
また、ステップＳ８０２においてｃｏｎｔｉｎｕｅが１であった場合は、ステップＳ８０１で出力したデータ値は「データが連続している」部分のデータ値であるため、内部変数ｃｎｔから「同じデータが連続する」部分の長さ情報を生成して出力する。具体的には内部変数ｃｎｔの値をもちいて
２５６−ｃｎｔ＋１
の値を求め、ｖ＿ｏｕｔから出力する（ステップＳ８０５）。
【００６９】
そして後段にデータの出力終了を知らせるためにｖ＿ｅｎｄ（１３４）に１を出力し、（ステップＳ８０４）、本処理を終了する。
【００７０】
尚、実施形態における準パックビッツ符号化部１０３では、図３〜図８において内部変数ｄａｔａ＿ｂｕｆに格納したデータ値をｖ＿ｏｕｔから出力する場合は同時にｄ＿ｖａｌｉｄ（１３１）から１を出力し、また内部変数ｃｎｔから生成した長さ情報をｖ＿ｏｕｔから出力する場合は同時にｌ＿ｖａｌｉｄ（１３２）から１を出力する。これによりｖ＿ｏｕｔ（１３３）から出力されるデータの有効信号、及びｖ＿ｏｕｔから出力したデータがパックビッツ符号化データのデータ部であるか長さ情報であるかの区別を後段に知らせている。
【００７１】
また、図３〜図８において、図６のステップＳ６０３や図７のステップＳ７０４の様に、ｄａｔａからデータ値の取得を行う事でｖ＿ｏｕｔからデータ部および長さ情報の二つのデータを出力しなければならない場合は、ｖ＿ｏｕｔからの出力が終了するまでｒｅａｄｙ（１１７）を０にすることによりｄａｔａからのデータ入力を停止させる必要がある。
【００７２】
以上、実施形態における準パックビッツ符号化部１０３の処理内容を説明したが、その動作をより理解し易くするため、図１０に準パックビッツ符号化部１０３の入出力タイミングチャートの一例を示し、説明することとする。
【００７３】
図１０では図に示すような１５個のデータ
０，０，０，０，０，０，１，２，３，４，４，４，４，４
がｄａｔａから順次入力される場合のタイミングチャートである。
【００７４】
図１０において、ｃｌｋはクロックを表し、各信号はｃｌｋに同期して入出力が行われる。ｖａｌｉｄ、ｄａｔａ、ｒｅａｄｙ及びｅｎｄ信号はデータを準パックビッツ符号化部に入力するための信号である。
【００７５】
ｃｎｔ、ｄａｔａ＿ｂｕｆ及びｃｏｎｔｉｎｕｅは準パックビッツ符号化部内で使用する内部変数を表し、ｄ＿ｖａｌｉｄ、ｌ＿ｖａｌｉｄ、ｖ＿ｏｕｔ及びｖ＿ｅｎｄ信号はパックビッツ符号化データのデータ部および長さ情報をデータ出力部１０４に出力するための信号である。また。同図ではｖ＿ｏｕｔから出力されるパックビッツ符号化データのうち、長さ情報を表す部分には下線を引いて表示している。
【００７６】
図１０におけるタイミングｔ１においてｄａｔａから最初のデータ値が入力される（ステップＳ３０１）と、準パックビッツ符号化部１０３では内部変数ｃｎｔを１にｃｏｎｔｉｎｕｅを０に設定すると共に、ｄａｔａから入力されたデータ値０（００ｈ）を内部変数ｄａｔａ＿ｂｕｆに格納する（ステップＳ３０２）。
【００７７】
そしてステップＳ３０６によりデータ入力終了の判断を行い、ｅｎｄから１が入力されていないので再びｄａｔａからデータ値が入力されるのを待つ。
【００７８】
タイミングｔ２においてｄａｔａから０（００ｈ）が入力されると（ステップＳ３０７）、準パックビッツ符号化部１０３はステップＳ３０８により内部変数ｃｏｎｔｉｎｕｅの値を参照し、その値が０であるのでステップＳ３０９に進みｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆに格納されている値の比較を行う。タイミングｔ２ではｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆの値がともに０（００ｈ）で等しいため、準パックビッツ符号化部の動作は図５のステップＳ５０１へ進む。
【００７９】
ステップ５０１により内部変数ｃｏｎｔｉｎｕｅの値を「同じデータが連続している」状態である１を設定し、ステップＳ５０２によりｃｎｔの値を参照する。タイミングｔ２におけるｃｎｔの値は１なのでステップ５０５によりｃｎｔに１を加算して２とし、図３のステップＳ３０６に戻る。
【００８０】
タイミングｔ３においてｄａｔａから３つ目の０（００ｈ）が入力されると（ステップＳ３０７）、準パックビッツ符号化部１０３はステップＳ３０８により内部変数ｃｏｎｔｉｎｕｅの値を参照し、その値が１であるのでステップＳ３１０に進みｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆに格納されている値の比較を行う。タイミングｔ３ではｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆの値がともに０（００ｈ）で等しいため、準パックビッツ符号化部の動作は図７のステップＳ７０１へ進む。
【００８１】
ステップＳ７０１ではｃｎｔの値に１を加算することによりｃｎｔの値は３となる。その後ステップＳ７０２によりｃｎｔの値を参照する。ステップ７０２におけるｃｎｔの値は３であるため、そのまま図３のステップＳ３０６に戻ることになる。
【００８２】
タイミングｔ４、ｔ５及びｔ６の動作についてはタイミングｔ３と同様である（同じ値が連続している）。これにより、内部変数ｃｏｎｔｉｎｕｅの値は１を保持し、ｃｎｔの値は６に更新されることになる。
【００８３】
タイミングｔ７においてｄａｔａから１（０１ｈ）が入力されると（ステップＳ３０７）、準パックビッツ符号化部１０３はステップＳ３０８により内部変数ｃｏｎｔｉｎｕｅの値を参照し、その値が１であるのでステップ３１０に進みｄａｔａから入力されたデータ値とｄａｔａ＿ｂｕｆに格納されている値の比較を行う。タイミングｔ７でｄａｔａのデータ値とｄａｔａ＿ｂｕｆの値が異なるため、準パックビッツ符号化部の動作は図６のステップＳ６０１へ進むことになる。
【００８４】
ステップＳ６０１によりｄａｔａ＿ｂｕｆに格納した値をｄ＿ｖａｌｉｄを１にすると同時にｖ＿ｏｕｔから出力した後、ステップＳ６０７により内部変数ｃｏｎｔｉｎｕｅを０に設定して「同じデータが連続しない」部分が始まる準備を行う。また、ステップＳ６０８により内部変数ｃｎｔ（この段階でｃｎｔ＝６である）の値を参照し、１（０１ｈ）でないためステップＳ６０３により長さ情報
２５６  −  ６  ＋  １
を算出してｌ＿ｖａｌｉｄを１にすると同時にｖ＿ｏｕｔから２５１（ＦＢｈ）を出力する。そして内部変数ｃｎｔを０に初期化し（ステップＳ６０４）、ｄａｔａから入力されているデータ値である１（０１ｈ）をｄａｔａ＿ｂｕｆに格納（ステップＳ６０５）、さらにｃｎｔに１を加算してｃｎｔの値を１（０１ｈ）にして図３のステップＳ３０６に戻る。
【００８５】
尚、上記説明した動作はそれぞれ、ステップ６０１のｄａｔａ＿ｂｕｆの値の出力がタイミングｔ７、ステップＳ６０７による内部変数ｃｏｎｔｉｎｕｅに０を設定する動作をタイミングｔ７、ステップＳ６０３の長さ情報の出力がタイミングｔ８、ステップ６０５及びステップＳ６０６におけるデータ値の取得及びステップＳ６０４によるｃｎｔの初期化、ステップＳ６０６によるｃｎｔの加算はタイミングｔ８で行われることになる。
【００８６】
また、タイミングｔ７で入力されたｄａｔａにより準パックビッツ符号化部のｖ＿ｏｕｔからデータ部および長さ情報の二つのデータを出力する必要があるため、タイミングｔ７において準パックビッツ符号化部のｒｅａｄｙから１を出力し、タイミングｔ７で入力されたｄａｔａの値をタイミングｔ８まで保持して、タイミングｔ８においてｄａｔａからｄａｔａ＿ｂｕｆへデータ値の格納を行っている。
【００８７】
次のデータとしてタイミングｔ９でｄａｔａから２（０２ｈ）が入力されると、準パックビッツ符号化部はステップ３０８によりｃｏｎｔｉｎｕｅ値を参照する。タイミングｔ８におけるｃｏｎｔｉｎｕｅ値は０であるため、ステップＳ３０９によりｄａｔａから入力された値２と、ｄａｔａ＿ｂｕｆの値を比較する。タイミングｔ８におけるｄａｔａ＿ｂｕｆの値は１であるため準パックビッツ符号化部の動作は図４のステップＳ４０１へ進む。
【００８８】
ステップＳ４０１により内部変数ｄａｔａ＿ｂｕｆの値をｖ＿ｏｕｔから出力し、ステップＳ４０２により内部変数ｃｎｔの値を参照する。このときのｃｎｔの値は１であるためステップＳ４０６に進んでｃｎｔの値に１を加算する。タイミングｔ９におけるｃｎｔの値は１（０１ｈ）であるため、それが２（０２ｈ）に更新されることになる。
【００８９】
次にステップＳ４０７においてｄａｔａから入力された値２（０２ｈ）をｄａｔａ＿ｂｕｆに格納して図３のステップＳ３０６に戻る。
【００９０】
タイミングｔ１０及びｔ１１における動作は、タイミングｔ９の場合と同じであるためここでは説明を省略するが、タイミングｔ１０及びｔ１１の動作終了時の内部変数ｃｎｔ及びｄａｔａ＿ｂｕｆの値は、それぞれタイミングｔ１１の動作終了時でｃｎｔが２（０２ｈ）でｄａｔａ＿ｂｕｆが０２ｈ、タイミングｔ１２の動作終了時でｃｎｔが３（０３ｈ）でｄａｔａ＿ｂｕｆが０３ｈとそれぞれのタイミングで更新される。この間、異なるデータが連続しているので、ｃｏｎｔｉｎｕｅの値は０のままである。
【００９１】
タイミングｔ１２においてｄａｔａから４（０４ｈ）が入力されると、データ分割部はステップ３０７から３０８へ進み、内部変数ｃｏｎｔｉｎｕｅが０であるためステップ３０９へ進む。そこでｄａｔａから入力された値（今回入力したデータ）が４であり、ｄａｔａ＿ｂｕｆに格納されている値も４であるので、両者は同じであるため図５のステップＳ５０１に進む。
【００９２】
ステップＳ５０１によりｃｏｎｔｉｎｕｅを１に設定して「同じデータが連続する」部分が始まる準備を行った後、ステップＳ５０２２により内部変数ｃｎｔの値を参照する。タイミングｔ１２におけるｃｎｔの値は４であるため、ステップＳ５０３により、ｃｎｔの値から異なる値のデータが連続していた数を求めて（具体的にはｃｎｔの値から２を減した０２ｈ）ｖ＿ｏｕｔから出力する（「０２ｈ」は３個連続している意味であることに注意されたい）。
【００９３】
その後ステップＳ５０４によりｃｎｔの値を１に設定し、さらにステップＳ５０５によりｄａｔａから入力されたデータの分としてｃｎｔの値に１を加算して（これによりｃｎｔの値は０２ｈとなる）、図３のステップＳ３０６に戻る。
【００９４】
タイミングｔ１３、ｔ１４及びｔ１５における動作はタイミングｔ３〜ｔ６において説明した動作と同じであるため説明を省略する。タイミングｔ１５における動作終了時のｃｎｔ及びｄａｔａ＿ｂｕｆの値は、図１０のタイミングｔ１６に示すようにｃｎｔが０５ｈ、ｄａｔａ＿ｂｕｆが０４ｈとなっている。
【００９５】
タイミングｔ１６においてｅｎｄ（１１８）から１が入力されると、準パックビッツ符号化部ではステップＳ３０６においてデータ入力が終了したと判断して動作を終了するための処理のために図８のステップＳ８０１に進む。
【００９６】
ステップＳ８０１においてｄａｔａ＿ｂｕｆに格納されたデータ値をｖ＿ｏｕｔから出力した後、ステップＳ８０２により内部変数ｃｏｎｔｉｎｕｅの値を参照する。タイミングｔ１８におけるｃｏｎｔｉｎｕｅの値は１であるため、ステップＳ８０５に進んでｃｎｔの値から「同じデータが連続する」部分を表す長さ情報を生成する。具体的にはｃｎｔ値である５（０５ｈ）を、
２５６−ｃｎｔ＋１
で算出し、長さ情報として２５２（ＦＣｈ）を算出してｖ＿ｏｕｔから出力する。
【００９７】
その後、後段にデータの出力が終了した事を知らせるためにステップＳ８０４においてｖ＿ｅｎｄから１を出力して動作を停止する。
【００９８】
尚、上記説明した動作はそれぞれ、ステップＳ８０１のｄａｔａ＿ｂｕｆの値の出力がタイミングｔ１６、ステップＳ８０５による長さ情報の出力がタイミングｔ１７、ステップＳ８０４のｖ＿ｅｎｄからの１の出力はタイミングｔ１８において行われる。
【００９９】
上記説明した動作により、準パックビッツ符号化部１０３は通常のパックビッツ符号化データの並び順序である「連続する数＋データ値」又は「異なるデータが連続する数＋異なるデータ列」とは逆に、「データ値＋連続する数」又は「異なるデータ列＋異なるデータが連続する数」という順序でパックビッツ符号化データをｖ＿ｏｕｔから出力することになる。
【０１００】
＜データ出力部１０４の説明＞
次に実施形態におけるデータ出力部１０４について説明する。データ出力部１０４は、先に説明したように、準パックビッツ符号化部１０３から出力された符号化データを並び換え、通常のパックビッツ符号化データの順序になるように長さ情報とデータ部の並び順を入れ替えて出力するものである。
【０１０１】
データ出力部１０４の処理内容を理解し易くするため、図９のフローチャートに従って説明することとする。
【０１０２】
データ出力部１０４は動作を開始すると内部変数の初期設定を行う（ステップＳ９０１）。本実施形態におけるデータ出力部１０４には内部変数として、ｖ＿ｏｕｔから入力される長さ情報の格納位置を示すレジスタＬ＿ｌｏｃａｔｅ、同様にｖ＿ｏｕｔから入力されるデータ部のデータ値の格納位置を示すレジスタＤ＿ｌｏｃａｔｅ、及び長さ情報及びデータ部のデータ値を格納するための１６個の８ビットのデータレジスタ（バッファ）ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［０］を有する。Ｌ＿ｌｏｃａｔｅ、Ｄ＿ｌｏｃａｔｅに格納されるアドレスは、このバッファｄａｔａ＿ｂｕｆ［］の位置である。
【０１０３】
実施形態では、最終的に出力するデータ量は６４ビット、すなち８バイト単位としているので、ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［０］の１６バイトを２つの８バイトグループｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］とｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］に分けて管理する。また、ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］の内容を出力する時に出力先のアドレスを示すアドレスバッファａｄｄｒ＿ｂｕｆ［１］、及び、ｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］の内容を出力する時に出力先のアドレスを示すアドレスバッファａｄｄｒ＿ｂｕｆ［０］が存在する。
【０１０４】
ステップＳ９０１ではこれらの内部変数
Ｌ＿ｌｏｃａｔｅ  ＝  ０
Ｄ＿ｌｏｃａｔｅ  ＝  １
ａｄｄｒ＿ｂｕｆ［０］  ＝  ０
ａｄｄｒ＿ｂｕｆ［１］  ＝  １
ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［０］＝  ０
として初期設定する。
【０１０５】
Ｌ＿ｌｏｃａｔｅを０にし、Ｄ＿ｌｏｃａｔｅを１として初期化する理由は、長さ情報を格納する位置が、データ部の前に位置させるためである。すなわち、出力する際に、通常のパックビッツ符号化の順序（長さ情報にデータ部が後続する形式）にするためである。
【０１０６】
内部変数の初期化が終了すると、データ出力部は準パックビッツ符号化部１０３からのデータの入力が終了しているかどうかの判断を行う（ステップＳ９０２）。データの入力終了の判断は、本実施形態の場合ｖ＿ｅｎｄから１が入力されているかどうかで判断し、１が入力されているとデータの入力終了と判定する。
【０１０７】
ステップＳ９０２においてデータ入力が終了していない（ｖ＿ｅｎｄ  ＝  ０）と判断されると、データ出力部１０４はｖ＿ｏｕｔからデータが入力されるのを待つ。
【０１０８】
本実施形態ではｖ＿ｏｕｔから長さ情報が入力される場合はｌ＿ｖａｌｉｄから１が、データ部のデータ値が入力される場合はｄ＿ｖａｌｉｄから１が入力されるため、具体的にはデータ出力部１０４はｌ＿ｖａｌｉｄの値を参照（ステップＳ９０３）及びｄ＿ｖａｌｉｄの値を参照（ステップＳ９０４）することによりｖ＿ｏｕｔからのデータ入力を待つ。そしてｖ＿ｅｎｄから１が入力されてデータ入力が終了するか、又はｌ＿ｖａｌｉｄ又はｄ＿ｖａｌｉｄが１になりｖ＿ｏｕｔからデータが入力されるまで、図９のステップＳ９０２乃至９０４を繰り返す。
【０１０９】
さて、ステップＳ９０３によりｌ＿ｖａｌｉｄから１が入力されたことを検知すると、データ出力部１０４はｖ＿ｏｕｔから入力される長さ情報をＬ＿ｌｏｄａｔｅが示す番号のｄａｔａ＿ｂｕｆ（以下ｄａｔａ＿ｂｕｆ［Ｌ＿ｌｏｄａｔｅ］と示す）に格納し（ステップＳ９０５）、Ｄ＿ｌｏｄａｔｅが示していた値を新たな長さ情報格納位置としてＬ＿ｌｏｃａｔｅに格納し、Ｄ＿ｌｏｃａｔｅはＤ＿ｌｏｃａｔｅが格納していた値に１を加える（ステップＳ９０６）。
【０１１０】
また、ステップＳ９０６において設定されたＬ＿ｌｏｃａｔｅの値を参照する（ステップＳ９０７）。本実施形態では基本的に、ｄａｔａ＿ｂｕｆ［］の低位からデータを詰めて行き、その並びは、通常のパックビッツ符号化のデータ順になっている。つまり、Ｌ＿ｌｏｃｔｅで示される値より小さいアドレス位置には、既に前の組（データの長さ＋データ部）が既に格納されていることになる。従って、Ｌ＿ｌｏｃａｔｅの値が７より大きい場合はｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］の全ての有意がデータが格納されているになることになる。
【０１１１】
Ｌ＿Ｌｏｃａｔｅが７より大きい場合には、ｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］の格納先を表すアドレスバッファａｄｄｒ＿ｂｕｆ［０］の値をａｄｄｒｅｓｓから出力すると共に、ｒｅｅｎｃｏｄｅ＿ｄａｔａからｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］の値を出力する（ステップＳ９０８）。
【０１１２】
そしてａｄｄｒ＿ｂｕｆ［１］に格納されているアドレスを新たなアドレスとしてａｄｄｒ＿ｂｕｆ［０］に格納し、ａｄｄｒ＿ｂｕｆ［１］はａｄｄｒ＿ｂｕｆ［１］に格納していた値に１を加える。また、ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］に格納された値をｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］に代入し、ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］は０に初期化する。さらにＤ＿ｌｏｃａｔｅ及びＬ＿ｌｏｃａｔｅの値からそれぞれ８を減じる（ステップＳ９０９）。
【０１１３】
これにより次のデータの取得準備が終了したのでデータ出力部はステップＳ９０２に戻りｖ＿ｅｎｄから１が入力されるかｖ＿ｏｕｔから新たなデータが入力されるのを待つ。
【０１１４】
尚、ステップＳ９０７において参照したＬ＿ｌｏｃａｔｅの値が７以下である場合は、そのままステップＳ９０２に戻り、ｖ＿ｅｎｄから１が入力されるかｖ＿ｏｕｔから新たなデータが入力されるのを待つことになる。
【０１１５】
また、ステップＳ９０３においてｌ＿ｖａｌｉｄの値が０であり、かつステップＳ９０４においてｄ＿ｖａｌｉｄから１が入力されたことを検知すると、データ出力部はｖ＿ｏｕｔから入力されるデータ部のデータ値をＤ＿ｌｏｄａｔｅが示す番号のｄａｔａ＿ｂｕｆ（以下ｄａｔａ＿ｂｕｆ［Ｄ＿ｌｏｄａｔｅ］と示す）に格納し（ステップＳ９１０）、Ｄ＿ｌｏｃａｔｅが格納していた値に１を加える（ステップＳ９１１）。
【０１１６】
また、ステップＳ９１２では、ステップＳ９１１において設定されたＤ＿ｌｏｃａｔｅの値を参照する。本実施形態ではステップＳ９０２、Ｓ９０３及びＳ９０４におけるＬ＿ｌｏｃｔｅは７以下の値しか取らないため、Ｄ＿ｌｏｃａｔｅの値が１５より大きい場合はｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］の全てのデータバッファに値が格納されていることになる（このときのデータは異なるデータが連続していることになるに注意されたい）。
【０１１７】
そのためｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］の格納先を表すアドレスバッファａｄｄｒ＿ｂｕｆ［１］の値をａｄｄｒｅｓｓから出力すると共に、ｒｅｅｎｃｏｄｅ＿ｄａｔａからｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］の値を出力する（ステップＳ９１３）。
【０１１８】
そしてａｄｄｒ＿ｂｕｆ［１］に格納していた値に１を加え、ｄａｔａ＿ｂｕｆ［１５］〜ｄａｔａ＿ｂｕｆ［８］の内容を０に初期化すると共にＤ＿ｌｏｃａｔｅの値から８を減じる（ステップＳ９１４）。
【０１１９】
これにより次のデータの取得準備が終了したのでデータ出力部はステップＳ９０２に戻りｖ＿ｅｎｄから１が入力されるかｖ＿ｏｕｔから新たなデータが入力されるのを待つ。
【０１２０】
尚、ステップＳ９１２において参照したＤ＿ｌｏｃａｔｅの値が１５以下である場合は、そのままステップＳ９０２に戻り、ｖ＿ｅｎｄから１が入力されるかｖ＿ｏｕｔから新たなデータが入力されるのを待つ。
【０１２１】
ステップＳ９０２においてｖ＿ｅｎｄから１が入力されてデータ入力が終了すると、データ出力部はＬ＿ｌｏｃａｔｅの値を参照する（ステップＳ９１５）。Ｌ＿ｌｏｃａｔｅの値が０以外である場合はデータバッファｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］のいくつかのバッファの中に出力していないデータが残っているので、ｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］の格納先を表すアドレスバッファａｄｄｒ＿ｂｕｆ［０］の値をａｄｄｒｅｓｓから出力すると共に、ｒｅｅｎｃｏｄｅ＿ｄａｔａからｄａｔａ＿ｂｕｆ［７］〜ｄａｔａ＿ｂｕｆ［０］の値を出力する（ステップＳ９１６）。
【０１２２】
その後、後段にデータの出力終了を知らせるためにｒｅｅｎｃｏｄｅ＿ｅｎｄから１を出力し（ステップＳ９１７）、本処理を終了する。
【０１２３】
またステップＳ９１５においてＬ＿ｌｏｃａｔｅの値が０であった場合は、データバッファの中に出力されていないデータが無いため、ステップＳ９１７に進みｒｅｅｎｃｏｄｅ＿ｅｎｄから１を出力してデータの出力終了を知らせた後、動作を終了する。
【０１２４】
尚、上記説明におけるステップ９０９及び９１４においてｒｅｅｎｃｏｄｅ＿ｄｔａからデータを、またａｄｄｒｅｓｓからアドレスを出力する際にはｒｅｅｎｃｏｄｅ＿ｖａｌｉｄを１にすることを付け加えておく。
【０１２５】
以上であるが、実施形態におけるデータ出力部１０４の処理内容を容易に理解し易くため、図１１、図１２に従ってシーケンスに従って説明する。
【０１２６】
図１１は本実施形態におけるデータ出力部１０４の内部レジスタの遷移を示している。
【０１２７】
同図ではｖ＿ｏｕｔから以下の（５）に示すデータが、左側から順番に入力された場合の動作について説明する。データの並びが、データ部に後続して長さ情報となっていることに注意されたい。なお、長さ情報とデータ部とを区別するため、長さ情報には下線を付すと共に「ｈ」を付した。
【０１２８】
０，ＦＤｈ，１，２，３，０２ｈ，４，Ｆ９ｈ，５，ＦＦｈ，６，７，０１ｈ，８，ＦＦｈ，９，００ｈ，１０，ＦＦｈ  …  （５）
これは以下の（６）に示すデータ列を準パックビッツ符号化部１０３のｄａｔａから入力し、準パックビッツ符号化部１０３によってパックビッツ符号化を行った結果としてｖ＿ｏｕｔから出力されたものとなることに注意されたい。
０，０，０，０，１，２，３，４，４，４，４，４，４，４，４，５，５，６，７，８，８，９，１０，１０  …  （６）
また、上記（５）及び図１１では便宜上、長さ情報は１６進数表記、データ部の値は１０進数表記で示してある。
【０１２９】
図１１（ａ）乃至（ｃ）の各Ｓｔｅｐでは内部変数ｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］、ｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］、  ａｄｄｒ＿ｂｕｆ［０］、ａｄｄｒ＿ｂｕｆ［１］、Ｌ＿ｌｏｃａｔｅ及びＤ＿ｌｏｃａｔｅの値を示し、またｅｎｃｏｅｅ＿ｄａｔａ及びａｄｄｒｅｓｓからデータ及びアドレス値を出力する場合はその都度該当するＳｔｅｐにおいて記述している。
【０１３０】
また、ｖ＿ｏｕｔから入力される値は図１１の右側に書かれた数値で表し、数値の中で一番左側にある値がデータ出力部に入力されるものとする。尚、ｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］、ｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］は図１１では四角で示しており、左側から順にｄａｔａ＿ｂｕｆ［０］、ｄａｔａ＿ｂｕｆ［１］、・・・・・、ｄａｔａ＿ｂｕｆ［１５］を表す。尚、図１１ではｄ＿ｖａｌｉｄ、ｌ＿ｖａｌｉｄ、ｖ＿ｅｎｄ、ｅｎｃｏｄｅ＿ｖａｌｉｄ及びｅｎｃｏｄｅ＿ｅｎｄは省略している。
【０１３１】
それでは、図１１（ａ）乃至（ｃ）に従って、実施形態のデータ出力部１０４の説明を行うこととする。
【０１３２】
Ｓｔｅｐ１２０１では、図９のステップＳ９０１により初期化設定を行った状態を示している。この状態でｖ＿ｏｕｔから最初のデータ０が入力されると、入力されたデータはデータ部の値であるため、図９のステップＳ９１０によりＤ＿ｌｏｃａｔｅの値で示されるｄａｔａ＿ｂｕｆ［１］に格納される。そしてステップＳ９１１によりＤ＿ｌｏｃａｔｅの値に１を加算する。データを取得した後の状態はＳｔｅｐ１２０２に示される。
【０１３３】
Ｓｔｅｐ１２０２では、ｖ＿ｏｕｔから２番目のデータであるＦＤｈが入力されると、入力されたデータは長さ情報であるため図９のステップＳ９０５によりＬ＿ｌｏｃａｔｅの値で示されるｄａｔａ＿ｂｕｆ［０］に格納される。そしてステップＳ９０６によりＤ＿ｌｏｃａｔｅに格納されている値２をＬ＿ｌｏｃａｔｅに格納し、Ｄ＿ｌｏｃａｔｅの値に１を加算する。データを取得した後の状態はＳｔｅｐ１２０３に示される。
【０１３４】
これ以降は上記説明したように、ｖ＿ｏｕｔから入力されたデータがデータ部である場合はＤ＿ｌｏｃａｔｅが示すｄａｔａ＿ｂｕｆへ、長さ情報である場合はＬ＿ｌｏｃａｔｅが示すｄａｔａ＿ｂｕｆへ格納する。
【０１３５】
Ｓｔｅｐ１２０８では、ｖ＿ｏｕｔから長さ情報Ｆ９ｈが入力されると、データ出力部１０４はステップＳ９０５によりＬ＿ｌｏｃａｔｅが示すｄａｔａ＿ｂｕｆ［６］にＦ９ｈを格納し、ステップＳ９０６によりＬ＿ｌｏｃａｔｅにはＤ＿ｌｏｃａｔｅの値である８を格納し、Ｄ＿ｌｏｃａｔｅには９を格納する。Ｓｔｅｐ１２０９はのこのときの内部変数の値はその状態を表している。
【０１３６】
ここでステップＳ９０７によってＬ＿ｌｏｃａｔｅの値が参照され、Ｌ＿ｌｏｃａｔｅの値が７以上であるため、ステップＳ９０８によりａｄｄｒｅｓｓからはａｄｄｒ＿ｂｕｆ［０］の値である０が、ｅｎｃｏｄｅ＿ｄａｔａからはｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］に格納された値が出力される。
【０１３７】
また、ステップＳ９０９ではａｄｄｒ＿ｂｕｆ［０］にはａｄｄｒ＿ｂｕｆ［１］の値である１が、ａｄｄｒ＿ｂｕｆ［１］には１を加算した値の２が格納され、ｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］にはｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］の値が、ｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］は初期化され０が格納される。さらに、Ｄ＿ｌｏｃａｔｅ及びＬ＿ｌｏｃａｔｅにはそれぞれが格納している値から８を減じた値が設定される。Ｓｔｅｐ１２１０は上記ステップＳ９０９による処理後の内部変数の値及びａｄｄｒｅｓｓ、ｅｎｃｏｄｅ＿ｄａｔａから出力される値が示されている。
【０１３８】
Ｓｔｅｐ１２１１からは再びｖ＿ｏｕｔから入力された値を図９のフローチャートに従ってＬ＿ｌｏｃａｔｅ及びＤ＿ｌｏｃａｔｅで示されるｄａｔａ＿ｂｕｆに格納する。そしてＳｔｅｐ１２１８においてｖ＿ｏｕｔから入力された長さ情報００ｈがＬ＿ｌｏｃａｔｅの値が示すｄａｔａ＿ｂｕｆ［７］に格納され、Ｄ＿ｌｏｃａｔｅの値である９がＬ＿ｌｏｃａｔｅに格納される。Ｓｔｅｐ１２１９はその時の内部変数の状態を表している。
【０１３９】
その後、データ出力部の動作はステップＳ９０７でＬ＿ｌｏｃａｔｅの値を参照してステップＳ９０８へ進み、ａｄｄｒｅｓｓからはａｄｄｒ＿ｂｕｆ［０］の値である１が、ｅｎｃｏｄｅ＿ｄａｔａからはｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］に格納された値が出力される。
【０１４０】
また、ステップＳ９０９ではａｄｄｒ＿ｂｕｆ［０］にはａｄｄｒ＿ｂｕｆ［１］の値である２が、ａｄｄｒ＿ｂｕｆ［１］には１を加算した値の３が格納され、ｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］にはｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］の値が、ｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］は初期化され０が格納される。さらに、Ｄ＿ｌｏｃａｔｅ及びＬ＿ｌｏｃａｔｅにはそれぞれが格納している値から８を減じた値が設定される。Ｓｔｅｐ１２２０には上記ステップＳ９０９による処理後の内部変数の値及びａｄｄｒｅｓｓ、ｅｎｃｏｄｅ＿ｄａｔａから出力される値が示されている。
【０１４１】
その後再びｖ＿ｏｕｔから入力されるデータをｄａｔａ＿ｂｕｆに格納していき、Ｓｔｅｐ１２２２により最後のデータであるＦＦｈを格納すると、データ出力部はｖ＿ｅｎｄから１が入力されたのを検知して（図１１には不図示）、ステップＳ９０２からステップＳ９１５に進みＬ＿ｌｏｃａｔｅの値を参照する。Ｓｔｅｐ１２２２ではＬ＿ｌｏｃａｔｅの値は３であるためステップＳ９１６によりａｄｄｒｅｓｓからはａｄｄｒ＿ｂｕｆ［０］の値である２を、ｅｎｃｏｄｅ＿ｄａｔａからはｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］に残っているデータを出力し、ステップＳ９１７においてｅｎｃｏｄｅ＿ｅｎｄ信号（図１１には不図示）を１にして後段にデータの出力終了を知らせた後、動作を終了する。
【０１４２】
以上の動作においてデータ出力部１０４のａｄｄｒｅｓｓ及びｅｎｃｏｄｅ＿ｄａｔａから出力された値（８バイト）との対応関係は次の通りになる。
ａｄｄｒｅｓｓ    ｅｎｃｏｄｅ＿ｄａｔａ
０          ＦＤ  ００  ０２  ０１  ０２  ０３  Ｆ９  ０４
１          ＦＦ  ０５  ０１  ０６  ０７  ＦＦ  ０８  ００
２          ０９  ＦＦ  ０Ａ  ００  ００  ００  ００  ００
なお、実施形態ではデータバスが６４ビットとしていることに注意されたい。これを出力先であるメモリ（実施形態では記憶部１１）に対して８ビット（１バイト）単位にアクセスする場合には、上記アドレス０、１、２は、アドレス０、８、１６と８バイト間隔になるのは当業者であれば容易に推察されよう。
【０１４３】
次に、本実施形態におけるデータ出力部１０４の動作内容を示す他の例を説明することとする。各レジスタの意味は上記と変らない。異なるのは準パックビッツ符号化部１０３から出力されるデータが異なる場合である。
【０１４４】
ここでは、準パックビッツ符号化部１０３から次の（７）で示すデータがｄａｔａから入力したものとして説明する。
０，  ＦＤｈ，１，２，３，４，５，６，７，８，９，１０，１１，１２，１３，１４，１５，１６，１７，１８，１９，２０，１３ｈ  −（７）
これは以下の（８）に示すデータ列を準パックビッツ符号化部１０３のｄａｔａから入力し、準パックビッツ符号化部１０３によってパックビッツ符号化を行った結果としてｖ＿ｏｕｔから出力された場合に相当する。
０，０，０，０，１，２，３，４，５，６，７，８，９，１０，１１，１２，１３，１４，１５，１６，１７，１８，１９，２０  −（８）
図１２は、この場合のシーケンスを示している。上記（７）及び図１２でも図１１と同様に長さ情報は１６進数表記、データ部の値は１０進数表記で示していることに注意されたい。
【０１４５】
さて、図１２において、Ｓｔｅｐ１３０１ではデータ部の値０がｖ＿ｏｕｔから入力される。Ｄ＿ｌｏｃａｔｅの値が示すｄａｔａ＿ｂｕｆ［１］に格納される。このとき、長さ情報は不定である（ｄａｔａ＿ｂｕｆ［０］が「？」となっている）。続く、Ｓｔｅｐ１３０２ではｖ＿ｏｕｔから長さ情報ＦＤｈが入力されるので、Ｌ＿ｌｏｃａｔｅの値が示す位置ｄａｔａ＿ｂｕｆ［０］に格納される。このとき、Ｌ＿ｌｏｃａｔｅは、次の長さ情報を格納するアドレスとして、「２」が設定される。
【０１４６】
Ｓｔｅｐ１３０３では、次のデータ「１」が入力され、それがｄａｔａ＿ｂｕｆ［３］に格納される。このとき、続いて、Ｓｔｅｐ１３０４乃至Ｓ１３１６まで、異なるデータが入力されてくるので、それぞれの値がｄａｔａ＿ｂｕｆ［３］乃至［１５］に格納されていく。
【０１４７】
さて、Ｓｔｅｐ１３１５においてｖ＿ｏｕｔからデータ部の値１３（１０進数表記である）が入力されると、データ出力部はステップＳ９１０によりＤ＿ｌｏｃａｔｅの値を参照してｄａｔａ＿ｂｕｆ［１５］に格納される。ステップＳ９１１によりＤ＿ｌｏｃａｔｅの値に１を加算して「１６」となる。その後ステップＳ９１２においてＤ＿ｌｏｃａｔｅの値を参照するとＤ＿ｌｏｃａｔｅの値は１５を越えているためデータ出力部１０４の動作は、ステップＳ９１３に進み、ａｄｄｒｅｓｓからはａｄｄｒ＿ｂｕｆ［１］の値である１が、ｅｎｃｏｄｅ＿ｄａｔａからはｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］に格納された値が出力される。このとき、アドレス０のデータは出力されていないことに着目されたい。
【０１４８】
また、ステップＳ９１４ではａｄｄｒ＿ｂｕｆ［１］の値に１を加算した値の２が格納され、ｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］は０に初期化される。さらに、Ｄ＿ｌｏｃａｔｅには格納している値から８を減じた値（従って、Ｄ＿ｌｏｃａｔｅ＝７）が設定される。Ｓｔｅｐ１３１７は上記ステップＳ９１３及びステップＳ９１４による処理後の内部変数の値及びａｄｄｒｅｓｓ、ｅｎｃｏｄｅ＿ｄａｔａから出力される値が示されている。
【０１４９】
Ｓｔｅｐ１３１８からは再びｖ＿ｏｕｔから入力されることになるが、図９のフローチャートに従えば、Ｄ＿ｌｏｃａｔｅで示されるｄａｔａ＿ｂｕｆに格納する。そしてＳｔｅｐ１３２３においてｖ＿ｏｕｔから入力されたデータが「長さ情報１３ｈ」入力されると、それまで未定となっていたＬ＿ｌｏｃａｔｅの値が示すｄａｔａ＿ｂｕｆ［２］にその長さ情報を格納する。そしてＤ＿ｌｏｃａｔｅの値である１４がＬ＿ｌｏｃａｔｅに、Ｄ＿ｌｏｃａｔｅには１を加算した１５が格納される。Ｓｔｅｐ１３２４はその時の内部変数の状態を表している。
【０１５０】
その後、データ出力部の動作はステップＳ９０７でＬ＿ｌｏｃａｔｅの値を参照してステップＳ９０８へ進み、ａｄｄｒｅｓｓからはａｄｄｒ＿ｂｕｆ［０］の値である０が、ｅｎｃｏｄｅ＿ｄａｔａからはｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］に格納された値が出力される。
【０１５１】
また、ステップＳ９０９ではａｄｄｒ＿ｂｕｆ［０］にはａｄｄｒ＿ｂｕｆ［１］の値である２が、ａｄｄｒ＿ｂｕｆ［１］には１を加算した値の３が格納され、ｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］にはｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］の値が、ｄａｔａ＿ｂｕｆ［８］〜ｄａｔａ＿ｂｕｆ［１５］は初期化され０が格納される。さらに、Ｄ＿ｌｏｃａｔｅ及びＬ＿ｌｏｃａｔｅにはそれぞれが格納している値から８を減じた値が設定される。Ｓｔｅｐ１３２５には上記ステップＳ９０９による処理後の内部変数の値及びａｄｄｒｅｓｓ、ｅｎｃｏｄｅ＿ｄａｔａから出力される値が示されている。
【０１５２】
その後データ出力部はｖ＿ｅｎｄから１が入力されたのを検知して（図１２には不図示）、ステップＳ９０２からステップＳ９１５に進みＬ＿ｌｏｃａｔｅの値を参照する。Ｓｔｅｐ１３２５ではＬ＿ｌｏｃａｔｅの値は６であるためステップＳ９１６によりａｄｄｒｅｓｓからはａｄｄｒ＿ｂｕｆ［０］の値である２を、ｅｎｃｏｄｅ＿ｄａｔａからはｄａｔａ＿ｂｕｆ［０］〜ｄａｔａ＿ｂｕｆ［７］に残っているデータを出力し、ステップＳ９１７においてｅｎｃｏｄｅ＿ｅｎｄ信号（図１２には不図示）を１にして後段にデータの出力終了を知らせた後、動作を終了する。
【０１５３】
以上の動作においてデータ出力部のａｄｄｒｅｓｓ及びｅｎｃｏｄｅ＿ｄａｔａから出力された値を、時間軸に沿って示すと次のようになる（ここでは、データ部及び長さ情報とも１６進数で示しした）。
ａｄｄｒｅｓｓ      ｅｎｃｏｄｅ＿ｄａｔａ
１        ０６  ０７  ０８  ０９  ０Ａ  ０Ｂ  ０Ｃ  ０Ｄ
０        ＦＤ  ００  １３  ０１  ０２  ０３  ０４  ０５
２        ０Ｅ  ０Ｆ  １０  １１  １２  １３  ００  ００
上記の如く、先にアドレス値が１のデータが出力され、その後アドレス値が０のデータが出力されている。このように本実施形態では出力する符号化データにアドレス情報を付加することにより、符号化データの出力順序を変え手出力することが可能である。そして出力順序を変えることにより長さ情報が確定するまで待つことなくデータ部を出力することができる。
【０１５４】
以上説明したように実施形態によれば、アドレス情報を付加して符号化データを出力することにより、パックビッツ符号化を行う際に長さ情報が確定するまでデータ部の出力を待つことなく後段にパックビッツ符号化データの出力を行うことが可能である。これにより８ビットのパックビッツ符号化データを生成する場合にパックビッツ符号化装置内に必要であった最大１２８個のデータを格納するためのメモリ容量を、本実施形態では１６個に削減することができる。また、データ入力が終了してから符号化データの出力が終了するまでの処理時間を短縮することができる。
【０１５５】
なお、図１２（ｃ）におけるＳｔｅｐ１３２４の状態になったとき、Ｄａｔａ＿Ｂｕｆ［８］乃至［１５］のデータを、Ｓｔｅｐ１３２５のようにＤａｔａ＿Ｂｕｆ［０］乃至［７］に移動させたが、１６バイトのレジスタに対するアドレスするには４ビット（アドレスとして０〜１５が定義できる）あれば良い。従って、１５に１を加算したとき、キャリー信号を発生し（４ビットのデータは０になる）、その信号を利用するようにすれば、上記の８ビットデータの移動処理は不要にできるであろう。
【０１５６】
また、実施形態では、データ出力部１０４の出力するバスが６４ビット（８バイト）としたが、これに限らない。要するに、出力するバス幅（８ビットの倍数）に対して、上記ｄａｔａ＿ｂｕｆ［］の容量はその２倍の容量を確保すれば実現できるからである。
【０１５７】
また、実施形態では、パックビッツ符号化が符号化する対象が１バイト（８ビット）データを例にしたが、これによっても本願発明は限定されない。但し、上記実施形態の如く、像域情報としては８ビットあれば十分であり、殆どの電子回路は８ビットの倍数で設計されていることからすれば、符号化対象は８ビットであることが望ましい。
【０１５８】
また、実施形態では、像域情報をパックビッツ符号化する例を説明したが、符号化対象は画像データでも良い。特に、写真画像等の中間調画像の場合、隣接する画素は互いに同じ値となる可能性が高いので、本実施形態におけるパックビッツ符号化を適用できる。
【０１５９】
また、実施形態で説明した像域情報符号化部１０が有する夫々の構成要素をフローチャートを用いて説明した。かかる説明から明らかなように、その機能と同機能をコンピュータプログラムで実現させても構わない。すなわち、本発明はコンピュータプログラムもその範疇とする。また、通常、コンピュータプログラムは、それが記憶されたＣＤＲＯＭ等のコンピュータ可読記憶媒体を装置にセットし、システムにコピーもしくはインストールすることで実行可能となるわけであるから、本発明はかかるコンピュータ可読記憶媒体をもその範疇とするのは明らかである。
【０１６０】
【発明の効果】
以上説明したように本発明によれば、パックビッツ符号化処理で通常必要とされるメモリ容量を削減し、且つ、符号化対象のデータの入力から符号化データの出力に至るまでを高速に処理可能な符号化技術が提供できる。
【図面の簡単な説明】
【図１】実施形態における像域情報符号化部のブロック構成図である。
【図２】実施形態が適用するデジタル複写機のブロック構成図である。
【図３】図１における準パックビッツ符号化部の処理内容を示すフローチャートである。
【図４】図１における準パックビッツ符号化部の処理内容を示すフローチャートである。
【図５】図１における準パックビッツ符号化部の処理内容を示すフローチャートである。
【図６】図１における準パックビッツ符号化部の処理内容を示すフローチャートである。
【図７】図１における準パックビッツ符号化部の処理内容を示すフローチャートである。
【図８】図１における準パックビッツ符号化部の処理内容を示すフローチャートである。
【図９】図１におけるデータ出力部の処理内容を示すフローチャートである。
【図１０】実施形態における準パックビッツ符号化部の処理を説明するためのタイミングチャートである。
【図１１（ａ）】実施形態におけるデータ出力部内の内部レジスタの遷移を示す図である。
【図１１（ｂ）】実施形態におけるデータ出力部内の内部レジスタの遷移を示す図である。
【図１１（ｃ）】実施形態におけるデータ出力部内の内部レジスタの遷移を示す図である。
【図１２（ａ）】実施形態におけるデータ出力部内の内部レジスタの遷移を示す図である。
【図１２（ｂ）】実施形態におけるデータ出力部内の内部レジスタの遷移を示す図である。
【図１２（ｃ）】実施形態におけるデータ出力部内の内部レジスタの遷移を示す図である。
【図１】
2004274555.tif 000005
【図２】
2004274555.tif 000006
【図３】
2004274555.tif 000007
【図４】
2004274555.tif 000008
【図５】
2004274555.tif 000009
【図６】
2004274555.tif 000010
【図７】
2004274555.tif 000011
【図８】
2004274555.tif 000012
【図９】
2004274555.tif 000013
【図１０】
2004274555.tif 000014
【図１１（ａ）】
2004274555.tif 000015
【図１１（ｂ）】
2004274555.tif 000016
【図１１（ｃ）】
2004274555.tif 000017
【図１２（ａ）】
2004274555.tif 000018
【図１２（ｂ）】
2004274555.tif 000019
【図１２（ｃ）】
2004274555.tif 000020
【手続補正書】
【提出日】平成16年2月23日(2004.2.23)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図３
【補正方法】変更
【補正の内容】
【図３】
2004274555.tif 000021
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2004274555.tif 000022
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2004274555.tif 000023
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2004274555.tif 000024
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2004274555.tif 000025
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図８
【補正方法】変更
【補正の内容】
【図８】
2004274555.tif 000026
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図９
【補正方法】変更
【補正の内容】
【図９】
2004274555.tif 000027