(57)【要約】【課題】  符号化に時間がかかる（処理速度が遅い）という問題や、複数の上限値によって符号化した全ての符号化データを保持するためのバッファが必要となり、符号化のためのメモリ容量が増大するという問題があった。【解決手段】  パックビッツ方式の符号化処理において、「同じ値のデータが連続して入力される数」の上限値と「異なる値が続いて入力される数」の上限値を変更して圧縮率を向上する。また上記動作を、データを二度読みをせず、バッファ容量を増やすことなく行う。【選択図】  図１
2008182448.tif 000002
【特許請求の範囲】
【請求項１】
パックビッツ方式により符号化処理を行うパックビッツ符号化手段において、
データを入力する入力手段、
入力されたデータを符号化する第1の符号化手段、
第１の符号化手段により符号化したデータを格納する格納手段、
入力されたデータを符号化する複数の符号化手段、
前記第１の符号化手段及び前記複数の符号化手段により符号化したデータのデータ量をカウントする複数のカウンタ、
前記複数のカウンタのカウンタ値から所定の符号化手段を選択する選択手段、
前記格納手段に格納された符号化データを前記選択手段で選択した符号化方式による符号化処理を行った符号化データに変換する再符号化処理手段、
前記再符号間処理手段によって変換したデータを出力するデータ出力手段、
を有するパックビッツ符号化手段。
【請求項２】
請求項１のパックビッツ符号化手段において、
前記第一の符号化手段及び前記複数の符号化手段は、パックビッツ符号化を行うときの「同じ値が連続する数」の上限値及び「異なる値が続けて入力される数」の上限値をそれぞれ変更することができることを特徴とするパックビッツ符号化手段。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパックビッツ方式により符号化処理を行う符号化装置に関する。
【背景技術】
【０００２】
従来、データの圧縮方式にはさまざまな方式が利用されているが、復号化した時に符号化前の情報を損失なく復号する方式（ロスレス）としてはパックビッツ符号化方式による符号化が知られている。
【０００３】
パックビッツ符号化とは、符号化を行うデータ（以下、符号化前のデータを生データと呼ぶ）をランレングス方式で圧縮する符号化方式である。以下に、8ビットの生データを符号する場合のパックビッツ符号化処理の説明を行う。
【０００４】
パックビッツ符号化は先ず始めに、生データを「同じ値のデータが連続して入力される部分」と「ひとつ前に入力されたデータの値と異なる値のデータが連続して入力される部分」に分割する。そしてそれぞれの部分がいくつ続いているか（「同じ値のデータが連続する部分」では同じ値が連続して入力された回数を、「ひとつ前に入力されたデータの値と異なる値のデータが連続する部分」では異なる値が入力された個数を表す）を表す「長さ情報」を付加して符号化を行う。
【０００５】
そして、「同じ値のデータが連続する部分」では「連続する数＋データの値」という形に、また「異なるデータが連続する部分」では「異なるデータが連続する数＋異なる値のデータ列」という形で表す。そしてこの処理で生成したデータ列をパックビッツ符号化データとして出力する。上記処理を行うことにより、「同じ値のデータが連続する部分」では「同じ値のデータが連続する部分」を「連続する数」と「データの値」の二つの値で表現することが出来る。
【０００６】
以下にパックビッツ符号化の手順の例を示す。例えば、下記（１）に示すような順番で２４個の生データ列が入力されたとする。
【０００７】
0,0,0,0,1,2,3,4,4,4,4,4,4,4,4,5,5,6,7,8,8,9,10,10      −（１）
この場合、生データ列を
0,0,0,0,
1,2,3,
4,4,4,4,4,4,4,4,
5,5,
6,7,
8,8,
9,
10,10                            −（２）
というように、「同じ値のデータが連続する部分」と、「異なる値のデータが連続する部分」とに分割する。そして、それぞれの部分に「長さ情報」を付加し、「同じ値のデータが連続する部分」に関してはデータ部分を1つだけに圧縮する。
【０００８】
0,0,0,0,        →(-4),0,
1,2,3,          →(3),1,2,3,
4,4,4,4,4,4,4,4,→(-8),4,
5,5,            →(-2),5,
6,7,            →(2),6,7,
8,8,            →(-2),8,
9,              →(1),9,
10,10           →(-2),10                            −（３）
ここで「長さ情報」として付加した情報は、負の数は「同じ値のデータが連続する数」を表し、正の数は「異なる値のデータの数」を表している。そして、この「長さ情報」をデータと同じく8ビットの幅を持つ「長さコードデータ」としてデータ列に埋め込んで出力する。
【０００９】
したがって、上の（１）の入力データ列に対してパックビッツ符号化を行うと、（４）に示す符号化データ列となる。
【００１０】
FD,00,02,01,02,03,F9,04,FF,05,01,06,07,FF,08,00,09,FF,10     −（４）
上記（４）では長さ情報及びデータ部とも１６進数表示を行い、長さ情報については負の数を２の補数により表している。以下に、「長さ情報」と、生成される「長さコードデータ」の対応を示す。
【００１１】
【表１】
2008182448.tif 000003
【００１２】
尚、上記表に示すようにパックビッツ符号化では「長さコードデータ」として0x80は生成しない。そのためデータ列の最後を表すエンドオブリストコードデータとして0x80を使用することもある。
【００１３】
また、「同じ値のデータが連続する部分」や「異なる値のデータが連続する部分」の長さが129個を越える場合は、長さが128の部分までで一度符号化処理を行い、128個を越えた部分に対しては改めて「同じ値のデータが連続する部分」又は「異なる値のデータが連続する部分」として処理を行う。以降、再び長さが128を越える場合は同様に符号化処理を繰り返す。
【００１４】
以降、パックビッツ符号化されたデータ列において「長さコードデータ」のことを「長さ情報」、長さ情報に続いて出力される実際のデータの部分を「データ部」と呼ぶ。
【００１５】
従来例としては、例えばかすれやムラをランレングス符号化したまま補正するため、補正したことによってラン長が変化した部分に対して前後するランレングス符号を相対的に修正する画像境界変更手段を備える画像調整装置がある（特許文献１参照）。
【特許文献１】特開平５−１３７００５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
上記従来の技術では、パックビッツ符号化を行う際の「同じ値のデータが連続する部分」や「異なる値のデータが連続する部分」の長さの上限がそれぞれ128で固定されていたため、データの値や並び方によっては冗長な符号化を行っていた。
【００１７】
また、データの値や並び方によって「同じ値のデータが連続する部分」や「異なる値のデータが連続する部分」の上限値を変更して符号化を行うことで符号化後のデータ量を削減するために、以下の２つの方法が提案されている。
【００１８】
１．一度データを読み込むことで最適な上限値を求めた上で、再度データを読み込んで最適な上限値を用いて符号化を行う
２．複数の上限値により符号化を行った結果をバッファに格納し、その中からデータ量が最も少ない符号化データを使用する
しかし上記１の方法ではデータを二度読み込む必要があり、符号化に時間がかかる（処理速度が遅い）という問題があった。また、上記２の方々では、複数の上限値によって符号化した全ての符号化データを保持するためのバッファが必要となり、符号化のためのメモリ容量が増大するという問題があった。
【課題を解決するための手段】
【００１９】
そこで本発明では、パックビッツ方式により符号化処理を行うパックビッツ符号化手段において、データを入力する入力手段、入力されたデータを符号化する第1の符号化手段、第１の符号化手段により符号化したデータを格納する格納手段、入力されたデータを符号化する複数の符号化手段、前記第１の符号化手段及び前記複数の符号化手段により符号化したデータのデータ量をカウントする複数のカウンタ、前期複数のカウンタのカウンタ値から所定の符号化手段を選択する選択手段、前記格納手段に格納された符号化データを前記選択手段で選択した符号化方式による符号化処理を行った符号化データに変換する再符号化処理手段、前記再符号間処理手段によって変換したデータを出力するデータ出力手段、を有するパックビッツ符号化手段により、複数のデータを同時に入力してパックビッツ符号化処理を行うことで符号化速度を上げる。
【発明の効果】
【００２０】
以上説明したように、本実施例のパックビッツ符合化装置では所定の上限値を用いてパック符号化を行う場合に、データを二度読みすることなく、また複数の上限値によって符号化した全ての符号化データを保持することなく符号化データを生成することが出来る。
【発明を実施するための最良の形態】
【００２１】
（第一の実施例）
図１は本発明のパックビッツ符号化装置のブロック図である。図１において、101はパックビッツ符号化部であり、ｄａｔａ_inから入力された生データ列に対してパックビッツ符号化処理を行って出力する。尚パックビッツ符号化部101における符号化処理では、長さ情報の上限値は通常通り8ビットデータの場合は128で符号化処理を行う。そのため、「同じ値のデータが連続する部分」及び「異なる値のデータが連続する部分」の上限値はそれぞれ128となる。
【００２２】
102、103、104は符号化データ量測定部であり、data_inから入力された生データ列に対して、所定の上限値を用いてパックビッツ符号化した場合の符号化データ量を算出する。尚、本実施例では符号化データ量測定部102では上限値を128(80h)で、103では上限値を96(60h)で、104では上限値を160(A0h)で符号化を行う。このため、符号化データ量測定部102,103,104で行われるパックビッツ符号化処理は、「同じ値のデータが連続する部分」及び「異なる値のデータが連続する部分」の上限値がそれぞれ以下の通りとなる。
【００２３】
符号化データ量測定部102
同じ値のデータが連続する部分の上限値：128
異なる値のデータが連続する部分の上限値：128
符号化データ量測定部102
同じ値のデータが連続する部分の上限値：160
異なる値のデータが連続する部分の上限値：96
符号化データ量測定部102
同じ値のデータが連続する部分の上限値：96
異なる値のデータが連続する部分の上限値：160
図１の実施例では符号化データ量測定部を３つ使用したが、さらに多くの符号化データ量測定部を用いて処理を行うことも可能である。
【００２４】
各符号化データ量測定部で算出した符号化データ量は、信号線border_valから上限値を出力すると共に信号線data_lengthから制御部へ出力される。
【００２５】
105はバッファメモリであり、パックビッツ符号化部101で符号化されたデータを格納するためのメモリである。また、制御部106からデータ出力要求があるとバッファメモリは格納した符号化データを再符号化処理部へ出力する。
【００２６】
106は制御部であり、各符号化データ量測定部から入力された符号化データ量を比較し、素の中から符号化データ量が最も小さくなるときの上限値を取得して再符号化処理部へ出力する。また、上限値を再符号化処理部へ出力して再符号化処理部による再符号化処理の準備が整うと、バッファメモリに対してデータ出力要求を出力する。
【００２７】
107は再符号化処理部であり、バッファメモリから入力されるパックビッツ符号化データを制御部から与えられた上限値を用いた符号化データに変換して出力する。
【００２８】
図２は符号化データ量測定部の動作を説明するフローチャートである。符号化データ量測定部では、以下の４つの変数を用いて符号化データの演算を行う。
・state
符号化データ量測定部の状態を表す変数で、データが何もない状態を表すnone、データが1つ残っている状態を表すonedata、同じ値が連続して入力されている状態を表すcontinue及び異なる値が入力されているuncontinueの４種類の状態を持つ。
・cnt
同じ値が連続して入力されている数、又は異なる値が続いて入力されている数を表す。
・length
符号化したデータ量を表す。
・border
それぞれの符号化データ量測定部における上限値を表し、「異なる値のデータが連続する部分」の上限値はborderの値、「同じ値のデータが連続する部分」の上限値は(256-border)となる。
【００２９】
符号化データ量測定部が動作を開始すると、始めにステップ201により初期設定を行う。初期設定ではstateはデータが何もない状態を表すnone、cnt及びlengthには０が設定される。
【００３０】
その後ステップ202によりデータの入力が終了したかを判定し、データの入力が終了した場合はステップ221により符号化データ量としてlengthの値を信号線data_lengthに出力して動作を終了する。データの入力が終了していない場合はステップ203でstateがnoneであるか判定を行う。
【００３１】
stateがnoneである場合は入力されたデータにより新たに符号化処理が行われることとなる。個の場合、入力されるデータはひとつ目であるためcntは１に、また新たに符号化処理が行われる場合は長さ情報とデータ部の２つのデータが出力されるため符号化データ量を表すlengthの値に２を加算する。また、符号化データ量測定部の状態はひとつ目のデータが入力された状態になるためstateにonedataを設定する（ステップ220）。その後、入力されたデータは符号化データ量測定部内のバッファに格納され（ステップ209）、再びステップ202においてデータの入力を待つ。
【００３２】
ステップ203においてstateがnoneでない場合、stateがonedataであるか判定を行う（ステップ204）。stateがonedataである場合は入力されたデータ（data）とバッファに格納されたデータ（buf）の比較を行う（ステップ217）。入力されたデータ（data）の値とバッファに格納されたデータ（buf）の値が等しい場合、符号化データ量測定部の状態は同じ値が連続して入力されているcontinueに設定され、cntの値に１を加算することにより、同じ値が入力された数を１加算する（ステップ219）。
【００３３】
また、ステップ217により入力されたデータ（data）の値とバッファに格納されたデータ（buf）の値が異なる場合、符号化データ量測定部の状態は異なる値が入力されているuncontinueに設定され、cntの値に１を加算することにより、異なる値が入力された数を１加算する（ステップ218）。
【００３４】
ステップ218及びステップ219の処理が終了すると、入力されたデータは符号化データ量測定部内のバッファに格納され（ステップ209）、再びステップ202においてデータの入力を待つ。
【００３５】
ステップ204においてstateがonedataでない場合、stateがcontinueであるか判定を行う（ステップ205）。stateがcontinueである場合は入力されたデータ（data）とバッファに格納されたデータ（buf）の比較を行う（ステップ212）。入力されたデータ（data）の値とバッファに格納されたデータ（buf）の値が等しい場合、cntに１を加算した値が、「同じ値が連続する数」の上限値である（256-border）と等しいかどうかを判定する（ステップ214）。cnt+1と（256-border）が等しい場合、符号化処理は一度入力されたデータまでを符号化処理し、再度データがない状態から符号化処理を開始する。そのためcntには０を、stateにはnoneを設定する（ステップ216）。
【００３６】
ステップ214においてcnt+1と（256-border）が等しくない場合、同じ値が入力された数を１加算するためcntの値に１を加算する（ステップ215）。
【００３７】
ステップ212により、入力されたデータ（data）の値とバッファに格納されたデータ（buf）の値が異なる場合、入力されたデータは符号化されるデータのひとつ目であるためcntは１に、新たに符号化処理が行われる場合は長さ情報とデータ部の２つのデータが出力されるため符号化データ量を表すlengthの値に２を加算する。また、符号化データ量測定部の状態はひとつ目のデータが入力された状態になるためstateにonedataを設定する（ステップ213）。
【００３８】
ステップ213、215、216の処理後、入力されたデータは符号化データ量測定部内のバッファに格納され（ステップ209）、再びステップ202においてデータの入力を待つ。
【００３９】
ステップ205においてstateがcontinueでない場合、stateはuncontinueとなる。
【００４０】
その後、処理はステップ206に進み入力されたデータ（data）とバッファに格納されたデータ（buf）の比較を行う。入力されたデータ（data）の値とバッファに格納されたデータ（buf）の値が異なる場合、cntに１を加算した値が、「異なる値が連続する数」の上限値であるborderと等しいかどうかを判定する（ステップ207）。cnt+1とborderが等しい場合、符号化処理は一度入力されたデータまでを符号化処理し、再度データがない状態から符号化処理を開始する。そのためcntには０を、stateにはnoneを設定する。また、入力されたデータは符号化処理された場合にデータ部として出力するためにlengthに１を加算する（ステップ210）。
【００４１】
ステップ214においてcnt+1とborderが等しくない場合、異なる値が入力された数を１加算するためcntの値に１を加算するとともに、入力されたデータが符号化処理された場合にデータ部として出力するためにlengthに１を加算する（ステップ208）。
【００４２】
ステップ206により、入力されたデータ（data）の値とバッファに格納されたデータ（buf）の値が等しい場合、入力されたデータは「同じ値が連続する部分」のデータの二つ目であるためcntは２に、また、新たに符号化処理が行われる場合は長さ情報とデータ部の２つのデータが出力されるが、データ部の分は既に前回のステップでlengthの値加算されているため、ここでは無さが情報の分の１を加算する。また、符号化データ量測定部の状態は同じ値のデータが入力された状態になるためstateにcontinueを設定する（ステップ211）。
【００４３】
ステップ208、210、211の処理後、入力されたデータは符号化データ量測定部内のバッファに格納され（ステップ209）、再びステップ202においてデータの入力を待つ。
【００４４】
以上説明した処理をステップ202によりデータ入力が終了するまで続けることにより、ステップ221において入力されたデータを設定した上限値borderを用いてパックビッツ符号化処理を行った際の符号化データ量がdata_lengthから出力される。
【００４５】
図３は再符号化処理部107のブロック図である。以下、同図のブロック図を用いて、その構成と処理内容を説明することとする。
【００４６】
図３において、３０１はデータ分割部であり、encode_data（図中の３１１）から入力されるパックビッツ符号化データの長さ情報とデータ部を判別し、入力された長さ情報を解析することにより、長さ情報に続いて入力されるデータ部のデータ値がいくつ連続しているのか（以下、連続個数と記す）をデータ値と同時に出力する。
【００４７】
本実施形態のデータ分割部３０１はパックビッツ符号化データを受け取るencode_dataの他にencode_dataからパックビッツ符号化データが入力されていることを表す有効信号であるdata_valid（３１０）及び符号化データの入力が終了したことを表す終了信号data_end（３１３）、及び、データ分割部が符号化データを入力可であることを通知するレディ信号data_ready（３１２）を用いてパックビッツ符号化データを取得する。
【００４８】
また、データ分割部３０１からの出力はdata（３１５）を用いてデータ値を、ｎｕｍ（３１６）を用いて連続個数の出力を行う。本実施形態では、前述のdata、numのバスの他に前記data及びnumから出力されている値が有効であることを表す有効信号valid（３１４）、受け側がデータの受信が可能であることを表すレディ信号ready（３１７）及びデータの出力が終了したことを表す終了信号end（３１８）を用いてデータの授受を行う。
【００４９】
３０３はデータ結合部であり、データ分割部３０１から出力したデータ値及び連続個数、制御部106から出力した上限値border_valを参照して再符号化処理を行って新たな符号化データを生成する。
【００５０】
データ結合部で生成した符号化データは、v_out（333）を用いて出力される。しかしデータ結合部３０３から出力される符号化データは通常のパックビッツ符号化データとは異なり、先にデータ部のデータ値が、データ部に続いて長さ情報がv_outから出力される。
【００５１】
そのため本実施形態のデータ結合部では、v_outから出力しているデータが長さ情報であるかデータ部であるかを判別するために、長さ情報有効信号であるl_valid及びデータ部有効信号であるd_vald、データの出力が終了したことを表す終了信号v_end（334）を用いて符号化データの出力を行う。
【００５２】
３０４はデータ出力部であり、データ結合部３０３から取得した符号化データを、パックビッツ符号化データの順番になるように長さ情報とデータ部の並び順を入れ替えを行う。上記データ結合部３０３及びデータ出力部３０４により、パックビッツ符号化データを再構成することになる。
【００５３】
本実施形態では並び換えたパックビッツ符号化データを８データ分をまとめて６４ビットとしてreencode_data（341）から出力すると共に、前記reencode_dataから出力したデータを格納する後段のメモリアドレスをaddress（342）から出力する。また、reencode_data及びaddressからデータ及びアドレスを出力する際には、前記データ及びアドレスが有効であることを表すように有効信号であるreencode_valdから１を出力する。
【００５４】
また、データ出力部からのアドレス及びデータの出力が終了すると、reencode_enｄ（343）から１を出力することでデータの出力が終了したことを後段に知らせる。
【００５５】
データ分割部３０１の動作を手順として示すと、図４に示すフローチャートのようになる。
【００５６】
データ分割部３０１は動作を開始すると内部カウンタ（図２ではｉと表記）を初期化する。具体的にはカウンタ ｉ を０に設定し（ステップ４０１）、次にパックビッツ符号化データの入力が終了しているかどうかの判断を行う（ステップ４０２）。
【００５７】
データの入力終了の判断は先に説明したように「長さ情報として128（16進数表記で80h、以下数字に続く括弧内は１６進数表記を表す）を入力する」という方法もあるが、本実施形態ではdata_endから「TRUE＝１」を入力することによりデータの入力終了を表すこととする。
【００５８】
ステップ４０２においてデータ入力が終了していない（data_end = 0）と判断されると、データ分割部はencode_dataからデータが入力されるのを待つ。ここで、従来の技術で示した（３）及び（４）のようにパックビッツ符号化データは最初に長さ情報が入力されるため、具体的には長さ情報が入力されるのを待つことになる。
【００５９】
encode_dataから最初の符号化データである長さ情報（図４ではＬと表す）が入力されると（ステップ４０３）、データ分割部では入力されたＬの値を参照して長さ情報が「同じデータが連続する数」を表しているか「異なるデータが連続する数」を表しているのかを判断する。具体的には、入力された長さ情報Ｌを正負の符号無しデータとし、閾値「１２８（80h）」と比較し（ステップ４０４）、Ｌが１２８より大きい場合は「同じデータが連続する数」、１２８未満の場合は「異なるデータが連続する数」と判断する。
【００６０】
入力された長さ情報Ｌが128（80h）より大きい場合、データ分割部では長さ情報Ｌから同じデータの連続する数を求めて変数Ｎに代入する。本実施形態では同じデータが連続する数は２の補数により負の値として表現されているため、長さ情報Ｌから連続数の算出を行う（ステップ４０５）。具体的には
Ｎ＝２５６−Ｌ＋１
により連続数を求めてＮに代入する。
【００６１】
同じデータが連続する数を算出すると、データ分割部は再びencode_dataからパックビッツ符号化データが入力されるのを待つ。パックビッツ符号化データでは長さ情報が128以上の場合、次のデータは連続するデータの値が入力されるため、ここではデータ部（データ値）の入力を待つ。
【００６２】
encode_dataからデータ部（図４ではＤと表す）が入力されると（ステップ４０６）、データ分割部はnum出力（3１６）からデータ連続数であるＮを、data出力（3１５）からデータ値であるDを出力する（ステップ4０７）。
【００６３】
これにより、「データ値ＤがＮ個ある」という情報を後段に送り、再びステップ４０２によるデータ入力終了の判断に戻る。
【００６４】
また、入力された長さ情報Ｌが128（80h）未満の場合、データ分割部では長さ情報Ｌから異なるデータが連続する数を求めて変数Ｎ'に代入する（ステップ４０８）。本実施形態では異なるデータが連続する数は長さ情報に１を加えた値であるため、具体的には
Ｎ'＝Ｌ＋１
により異なるデータの数を求める。
【００６５】
異なるデータの数を算出すると、データ分割部は再びencode_dataからパックビッツ符号化データが入力されるのを待つ。パックビッツ符号化データでは長さ情報が128以下の場合、長さ情報に続いて先に算出したＮ'の数だけデータの値が入力される。従ってここではデータ部（データ値）の入力を待つ。
【００６６】
encode_dataからデータ部Dが入力されると（ステップ４０９）、データ分割部はnum出力（３１６）から１を、data出力（３１５）からデータ値Ｄを出力する（ステップ４１０）。これにより、「dataから出力したデータ値Ｄは１つである」という情報を後段に送る。
【００６７】
dataからデータ値Ｄを出力すると、データ分割部は内部カウンタ ｉ に１を加算し（ステップ４１２）、Ｎ'との比較を行う（ステップ４１２）。カウンタ値ｉがＮ'より小さい場合は、引き続きデータ値が入力されるためステップ４０９に戻りencode_dataからデータ部が入力されるのを待つ。
【００６８】
またステップ４１２により比較した結果カウンタ値ｉとＮ'の値が等しい場合は、データ値がＮ'の個数入力されたため、カウンタｉを０に初期化して（ステップ４１３）、ステップ４０２によるデータ入力終了の判断に戻る。
【００６９】
上記ステップ４０２〜４１３の動作を繰り返すことでパックビッツ符号化データの入力を行い、最後にステップ４０２においてdata_end=1が入力されてパックビッツ符号化データの入力終了が検出されると、データ分割部３０１はデータ出力を終了したことを表すためにend出力から１を出力して動作を終了する。
【００７０】
次に、実施形態におけるデータ結合部３０３の動作処理を図５乃至図１０のフローチャートに従って説明する。
【００７１】
データ連結部３０３がその処理を開始すると、num及びdataから最初のデータ連続個数及びデータ値の入力を待つ。
【００７２】
データ連続個数及びデータ値が入力されると（ステップ５０１）、その値を初期値としてnumから入力されたデータ連続個数を内部変数ｃｎｔに、dataから入力されたデータ値を内部変数data_bufに格納する（ステップ５０２）。
【００７３】
そしてcntに格納した値を参照し（ステップ５０３）、その値が１以外である場合はdataから入力されたデータ値が「同じデータ値が連続している」部分のデータ値であると判断し、その状態をデータ連続部で保持するために内部変数continueを１に設定する（ステップ５０４）。
【００７４】
また、cntに格納した値が１である場合は、dataから入力されたデータ値が「同じデータが連続していない」部分のデータ値であると判断し、この状態をデータ連続部で保持するために内部変数continueを０に設定する（ステップ５０５）。
【００７５】
以上により、次のデータを入力するための準備が終了する。
【００７６】
次にデータ結合部はデータ入力の終了を判断する（ステップ５０６）。本実施形態ではデータ分割部がend(318)が「１＝high」にすることでデータの入力が終了したと判断し、図１０の処理へと分岐する。end(318)から１が入力されていない場合には、データ分割部はnum(316)とdata（315）から次のデータ連続数及びデータ値が入力されるのを待つ。
【００７７】
データ連続数とデータ値が入力されると（ステップ５０７）、データ結合部は内部変数continueの値により分岐を行う（ステップ５０８）。continueの値が「同じデータが連続していない」部分を表す０である場合、さらにdataから入力されたデータ値と内部変数data_bufの値を比較する（ステップ５０９）。ここでdataから入力されたデータ値とdata_bufの値が異なる場合は図６の処理へ分岐する。また、dataから入力されたデータ値とdata_bufの値が等しい場合は、図７の処理へ分岐して「同じデータが連続していない部分」を終了するための処理と、新たに「同じデータが連続している部分」が始まるための処理を行う。
【００７８】
一方、ステップ５０８により内部変数continueの値が「同じデータが連続している」部分を表す１であった場合、同様にdataから入力されたデータ値と内部変数data_bufの値を比較し（ステップ５１０）、dataから入力されたデータ値とdata_bufの値が異なる場合は図８の処理へ分岐する。また、dataから入力されたデータ値とdata_bufの値が等しい場合は、図７へ分岐して「同じデータが連続している部分」を続けるための処理を行う。
【００７９】
図６はデータ結合部における、内部変数continueが０かつdataから入力されたデータ値と内部変数data_bufの値が異なる場合（図５におけるステップ５０９がｙｅｓ）の処理を表すフローチャートである。
【００８０】
この場合、新たなパックビッツ符号化データを生成するためにdata_bufに格納されている値が必要であるためdata_bufに格納されている値をv_outから出力する（ステップ６０１）。そしてnumから入力されているデータ連続数を参照する（ステップ６０２）。
【００８１】
データ連続数が１以外であれば、それはdataから入力されている値が１つ以上連続している事を表しているため、「同じデータが連続していない」部分はここで終了する。そのため内部変数continueの値を「同じデータが連続している」部分を表す１に設定し（ステップ６０３）、それまで続いていた「異なるデータが連続している」部分のデータ数が格納されている内部カウンタcntから１を減ずることで「異なるデータが連続する数」を表す長さ情報を求め、その長さ情報をv_outから出力する（ステップ６０４）。
【００８２】
その後、内部変数cntを０に初期化して（ステップ６０５）から、numから入力されたデータ連続数をｃｎｔに加算し（ステップ６０６）、dataから入力されたデータ値を内部変数data_bufに格納し（ステップ６０７）、次のデータ受け取り準備を行った後で、図５のステップ５０６に戻る。
【００８３】
また、ステップ６０２においてｎｕｍから入力されたデータ連続数が１であった場合は、引き続き「同じデータが連続していない」部分であることを表している。この場合はまず内部変数ｃｎｔの値を参照し、border_valであるかを判断する（ステップ６０８）。内部ｃｎｔの値がborder_valの場合、「同じデータが連続していない部分」がborder_valで表される回続いているという情報を出力する必要が生ずる。そのためステップ６０４により長さ情報を算出して（この場合「異なるデータがborder_val個連続しているので」長さ情報としてborder_val-1が生成される）v_outから出力する。
【００８４】
その後、内部変数cntを０に初期化して（ステップ６０５）から、numから入力されたデータ連続数（ここでは１）をｃｎｔに加算し（ステップ６０６）、dataから入力されたデータ値を内部変数data_bufに格納し（ステップ６０７）、次のデータ受け取り準備を行った後で図５のステップ５０６に戻る。
【００８５】
ステップ６０８において内部変数cntの値がborder_valでない（border_valで表される値未満）である場合は、numから入力されたデータ連続数（ここでは１）をｃｎｔに加算し（ステップ６０６）、dataから入力されたデータ値を内部変数data_bufに格納して（ステップ６０７）、次のデータ受け取り準備を行った後で、図５のステップ５０６に戻る。
【００８６】
図７はデータ結合部における、内部変数continueが０かつdataから入力されたデータ値と内部変数data_bufの値が同じ場合（図５におけるステップ５０９でＮｏ）の処理を表すフローチャートである。
【００８７】
この場合、一つ前の処理まではcontinueが０であるため「同じデータが連続しない」部分の処理を行っていたが、dataから入力されているデータ値と内部変数data_bufの値が同じであるため「同じデータが連続しない」部分は一つ前のデータで終了していたことになる。そこで内部変数continueの値を「同じデータが連続している」部分を表す１に設定し（ステップ７０１）、内部変数cntの値を参照する。cntの値が１でなければ、それまで続いていた「異なるデータが連続している」部分のデータ数を算出して出力する必要がある。
【００８８】
そのためには、現在data_bufに格納されている値は「同じデータが連続している」部分に含まれるため、実際に「同じデータが連続していない」部分のデータ数は内部カウンタcntから１を減した値となる。また、「異なるデータが連続する数」を表す長さ情報は「異なるデータが連続している」数から１を減じた値であるため、ここでは内部変数cntから２を減じて長さ情報を求め、その長さ情報をv_outから出力する（ステップ７０２）。
【００８９】
そしてdataから入力されるのデータ値と同じデータがdata_bufに入っているため内部変数ｃｎｔを１に設定（ステップ７０３）してから、numより入力されたデータ連続数をｃｎｔに加算（ステップ７０４）して次のデータ受け取り準備を行い、図５におけるステップ５０６に戻る。
【００９０】
図８はデータ結合部における、内部変数continueが１かつdataから入力されたデータ値と内部変数data_bufの値が異なる場合（図５におけるステップ５１０がＮｏ）の処理を表すフローチャートである。
【００９１】
この場合dataから入力されるデータ値をdta_bufの値が異なるため、「同じデータが連続している」部分はここで終了する。そのためdata_bufに格納されている値をv_outから出力する（ステップ８０１）。そしてnumから入力されているデータ連続数を参照する（ステップ８０２）。
【００９２】
データ連続数が１以外であれば、それはdataから入力されている値が１つ以上連続している事を表しているため、再び「同じデータが連続している」部分が開始される。そのため内部変数continueの値は「同じデータが連続している」部分を表す１のままにしておき、それまで続いていた「同じデータが連続している」部分のデータ数が格納されている内部カウンタcntから長さ情報を求め（256からcntの値を減じ、さらに１を加えることにより求める）、その長さ情報をv_outから出力する（ステップ８０３）。
【００９３】
その後、内部変数cntを０に初期化して（ステップ８０４）から、dataから新たなデータ値を取得してdata_bufに格納し（ステップ８０５）、さらにnumから入力されたデータ連続数をｃｎｔに加算する（ステップ８０６）。こうして次のデータ受け取り準備が終了すると、図５のステップＳ５０６に戻ることになる。
【００９４】
また、ステップ８０２においてｎｕｍから入力されたデータ連続数が１であった場合は「同じデータが連続していない」部分が始まる事を表している。この場合はまず内部変数continueの値を「同じデータが連続していない」部分を表す0に設定して（ステップ８０７）、内部変数cntの値を参照する（ステップ８０８）。
【００９５】
cntの値が１以外であれば、「同じデータが連続している」部分のデータ数が格納されている内部カウンタcntから長さ情報を求め（256からcntの値を減じ、さらに１を加えることにより求める）、その長さ情報をv_outから出力する（ステップ８０３）。
【００９６】
その後、内部変数cntを０に初期化して（ステップ８０４）から、dataから新たなデータ値を取得してdata_bufに格納し（ステップ８０５）、さらにnumから入力されたデータ連続数（ここでは１）をｃｎｔに加算する（ステップ８０６）。こうして次のデータ受け取り準備が終了すると、図５のステップ５０６に戻り、データ入力終了の判断を行うことになる。
【００９７】
また、ステップ８０８により内部変数cntの値が１であった場合は、ステップ８０１で出力したデータ値を「同じデータが連続しない」部分の最初のデータとして処理を行う。そのためdataから新たなデータ値を取得してdata_bufに格納し（ステップ８０５）、さらにnumから入力されたデータ連続数（ここでは１）をｃｎｔに加算する（ステップ８０６）。こうして次のデータ受け取り準備が終了すると、図５のステップＳ５０６に戻る。
【００９８】
図９はデータ結合部における、内部変数continueが１かつdataから入力されたデータ値と内部変数data_bufの値が同じ場合（図５におけるステップ５１０がｙｅｓ）の処理を表すフローチャートである。
【００９９】
この場合dataから入力されるデータ値をdta_bufの値が同じため、「同じデータが連続している」部分はさらに続く。そのためデータが連続する数を求めるため内部変数cntにnumから入力されたデータ連続数を加算する（ステップ９０１）。
【０１００】
その結果、内部ｃｎｔの値が（256-ｂｏｒｄｅｒ_val+1）以上の場合、「同じデータが連続している」部分が（256-ｂｏｒｄｅｒ_val）で表される値の回数分続いているという情報を出力する必要が生ずる。そのため内部変数cntの値を参照し（ステップ９０２）、その値が（256-ｂｏｒｄｅｒ_val+1）以上である場合はdata_bufに格納されているデータ値をv_outから出力し（ステップ９０３）、それに続いて「同じデータが（256-ｂｏｒｄｅｒ_val）個連続している」ことを表す長さ情報である（256-ｂｏｒｄｅｒ_val+1）をv_outから出力する（ステップ９０４）。
【０１０１】
ステップ９０４により長さ情報が出力されると、データ結合部は内部変数cntから後段にパックビッツ符号データとして出力した分の（256-ｂｏｒｄｅｒ_val）を減じ（ステップ９０５）、次のデータ受け取り準備を行った後で、図５におけるステップ５０６に戻る。
【０１０２】
また、ステップ９０２により内部変数cntが（256-ｂｏｒｄｅｒ_val）以下の場合は、パックビッツ符号化に必要なデータは生成されないため、そのまま図３のステップ５０６に戻り、データ入力終了の判断を行うことになる。
【０１０３】
尚、図９のフローチャートではパックビッツ符号化に必要なデータ値は既にdata_bufに格納されているのでdataから入力されたデータ値を内部変数data_bufに格納する必要は無いが、格納してもよい。
【０１０４】
図１０は図５のステップ５０６によりend(318)から１が入力され、データの入力が終了したと判断した場合のフローチャートを示す。
【０１０５】
図１０ではまず始めに内部変数data_bufに格納しているデータ値をv_outから出力し（ステップ１００１）、その後内部変数continueの値を参照する（ステップ１００２）。
【０１０６】
ｃontinueの値が０の場合、ステップ１００１で出力したデータ値は「データが連続していない」部分の最後のデータ値であるため、内部変数cntから「異なるデータが連続する」部分の長さ情報を生成して出力する。具体的には内部変数cntの値から１を減じてv_outから出力する（ステップ１００３）。
【０１０７】
そして後段にデータの出力終了を知らせるためにv_end（334）に１を出力して（ステップ１００４）動作を終了する。
【０１０８】
一方ステップ１００２においてcontinueが１であった場合は、ステップ１００１で出力したデータ値は「データが連続している」部分のデータ値であるため、内部変数cntから「同じデータが連続する」部分の長さ情報を生成して出力する。具体的には内部変数cntの値を用いて
２５６−ｃｎｔ＋１
の値を求め、v_outから出力する（ステップ１００５）。
【０１０９】
そして後段にデータの出力終了を知らせるためにv_end（334）に１を出力して（ステップ１００４）動作を終了する。
【０１１０】
尚、本実施形態のデータ結合部303では、図５乃至図１０において内部変数data_bufに格納したデータ値をv_outから出力する場合は同時にd_valid（331）から１を出力し、また内部変数cntから生成した長さ情報をv_outから出力する場合は同時にl_valid（332）から１を出力する。これによりv_out（333）から出力されるデータの有効信号、及びv_outから出力したデータがパックビッツ符号化データのデータ部であるか長さ情報であるかの区別を後段に知らせている。
【０１１１】
また、図５乃至図１０において、図８のステップ８０３や図９のステップ９０４の様に、num及びdataからデータ連続数及びデータ値の取得を行う事でv_outからデータ部および長さ情報の二つのデータを出力しなければならない場合は、v_outからの出力が終了するまでready（317）を０（すなわち、次のデータの入力要求をしない）にすることによりデータ結合部３０１からのデータ連続数及びデータ入力を停止させる必要がある。
【図面の簡単な説明】
【０１１２】
【図１】本発明におけるパックビッツ符合化装置のブロック図
【図２】本発明における符号化データ量測定部の動作を説明するフローチャート
【図３】再符号化処理部１０７のブロック図
【図４】データ分割部３０１の動作を説明するフローチャート
【図５】データ結合部３０３の動作を説明するフローチャート
【図６】データ結合部３０３の動作を説明するフローチャート
【図７】データ結合部３０３の動作を説明するフローチャート
【図８】データ結合部３０３の動作を説明するフローチャート
【図９】データ結合部３０３の動作を説明するフローチャート
【図１０】データ結合部３０３の動作を説明するフローチャート
【図１】
2008182448.tif 000004
【図２】
2008182448.tif 000005
【図３】
2008182448.tif 000006
【図４】
2008182448.tif 000007
【図５】
2008182448.tif 000008
【図６】
2008182448.tif 000009
【図７】
2008182448.tif 000010
【図８】
2008182448.tif 000011
【図９】
2008182448.tif 000012
【図１０】
2008182448.tif 000013