以下、図面を参照して本発明の実施形態について詳細に説明する。
<基本構成>
図1は、本発明に係るデータ処理装置の基本構成を示す回路ブロック図である。この基本構成のデータ処理装置1は、一部のループ処理(判定処理)を従属処理に置き換えて実行する本発明に係る主要部のデジタルデータ処理(置換え処理)に先立って種々のデータ処理を行なう前段処理部110と、前段処理部110により処理された処理済みデータを処理順に格納する第1のデータ記憶部としての第1バッファメモリ部120とを備えている。
またデータ処理装置1は、第1バッファメモリ部120から逆順に読み出した処理対象のブロックデータのうち、ブロックの末尾側(逆順に読み出した先頭側)に存在する一定の関係を持つデータに対してその旨を示すフラグを付加する第1の判定処理部の一例であるフラグ付加部130と、フラグ付加部130により処理された処理済みデータを順次格納する第2のデータ記憶部としての第2バッファメモリ部140と、第2バッファメモリ部140から本来の処理順と同じ順(正順)にデータを読み出して種々のデータ処理を行なう第2の判定処理部としての後段処理部150とを備えている。
第1バッファメモリ部120、フラグ付加部130、第2バッファメモリ部140、および後段処理部150によって、あるループ処理を従属処理に置き換えて判定処理を行なう置換処理部3が構成され、処理対象データが所定の条件に合致しているか否かに基づいて処理結果を確定させることで画像処理や符号化処理など所定のデータ処理を行なう。
この基本構成例の第1バッファメモリ部120および第2バッファメモリ部140には、それぞれデータの書込みと読出しとを同時に行なうことのできない1個のバッファメモリ122,142が設けられている。
データ処理装置1をJPEG符号化を行なう符号化装置として構成する場合、前段処理部110としては、DCT係数を算出するDCT計算部112と、量子化計算を行なう量子化計算部114とが設けられる。この場合、第1バッファメモリ部120には、量子化計算後のDCT係数データが格納される。
また、フラグ付加部130としては、AC成分が“0”の値が末尾側に連続して存在することを示すエンドフラグeを生成するEOB処理部132が設けられる。EOB処理部132は、第1バッファメモリ部120から量子化後の係数データを1ブロックごとに、本来の処理順とは逆順に読み出して、つまりジグザグスキャンの逆順に読み出して、最後部側から連続するゼロのデータに対応付けてその旨を示すエンドフラグeを第2バッファメモリ部140に保持させるとともに、最後尾側から最初にゼロでないデータが現われた後には、そのデータをそのまま第2バッファメモリ部140に保持させる。
また、後段処理部150としては、エントロピー符号化部152と、バイトパッキング部154とが設けられる。エントロピー符号化部152は、第2バッファメモリ部140からフラグ付加部130での結果(エンドフラグe)を含む処理対象データを本来の処理順と同じ正順で読み出して、つまりジグザグスキャン順の先頭から読み出して所定の条件に従ってハフマン符号へ変換する。バイトパッキング部154は、エントロピー符号化部152により符号化されたデータを一纏めにする。
DCT計算部112、量子化計算部114、エントロピー符号化部152、およびバイトパッキング部154の基本的な処理は、JPEG符号化を行なう場合に用いられるものとして基本的なもので、周知のものであるので、ここでは、それらの詳細な説明を割愛する。
<処理手順>
図2は、置換処理部3での置換え処理の対象となるループ処理を包含したデータ処理の基本事例を示すフローチャートである。また、図3は、本実施形態のデータ処理装置1の処理手順を説明するフローチャートである。
デジタルデータ処理を行なう際には、前もってある処理(前段処理という)がなされた処理対象の全データの内の所定数のデータ(ブロックデータという)に関して、ある条件を満たしているか否かを判定し、その判定結果に応じて処理結果の確定を切り替えるループ処理(判定処理)を行なうことがある。また、ループ処理が複数存在し、どちらか一方の判定基準の方が優先されることもある。以下、優先される方の判定基準を優先基準、その判定ループ処理を優先ループ処理といい、他方の判定基準を従属基準、その判定ループ処理を従属ループ処理ともいう。
ここで、優先される方のループ処理結果を確定させるには本来の処理順として後側のデータ値を参照する必要がある場合において、ブロック内の所定番目のデータについての処理中に、従属ループ処理によってデータ処理結果を確定させようとしたときに、その処理対象データが従属基準に合致するだけでなく優先基準の判定結果にも影響を与えるがために優先ループ処理結果の確定と関わりを持つ場合を考える。
この場合、前段処理済のデータを順に受け取って処理を行なうといった単純な逐次処理では、その時点では従属ループ処理の処理結果を確定させることができず、優先ループ処理結果の確定を待ってから、従属ループ処理結果の確定を行なうようにする必要があり、処理順として後側のデータについての優先ループ処理が完了するまで、従属ループ処理結果の確定を待たざるを得ない。
このような処理を行なうための処理手順の一例をフローチャートで示すと図2のようになる。具体的には、外側にメインの判定基準(メイン基準)に従って判定処理を行ないつつ(S134)、判定結果に応じてメインとなる所定のデータ処理(S154)を行なうためのメインループが構成されており、その中に、優先ループ処理(S132〜S138)と従属ループ処理(S150〜S152)とが組み込まれている。ここでは、ブロック内の最後尾のデータ値がメイン基準を満たしているときには、優先ループ処理の判定結果の方が従属ループ処理の判定結果よりも優先される場合で説明する。
先ず、前段処理済みデータをブロックサイズで分割して、ブロック内のデータを所定順に処理するため、ブロック内の何番目のデータを処理対象とするのかを特定するためのオペレータn1をゼロ(0)にリセットするとともに、従属ループ処理における条件判定のためのオペレータn2もリセットする(S130)。
次に、メインループ処理(従属ループ処理や優先ループ処理の一部を包含する)において、先ずブロック内のデータを所定順に処理するためオペレータn1に“1”を加えた後(S132)、そのn1番目の処理対象データD(n1)が所定の値であるか否か、すなわちメイン基準を満たしているか否かを判定する(S134)。処理対象データD(n1)がメイン基準を満たしているときには(S134−YES)、さらに処理対象データD(n1)が優先基準をも満たしているか否かを判定する(S136)。ここで、優先基準としては、処理対象データD(n1)がブロックの最後尾のデータであるか否かであるとする。そして、ブロック内の最後尾のデータであるときには(S136−YES)、優先ループ処理の処理結果を確定させ(S170)、そのブロックについての処理を完了させる。
一方、処理対象データD(n1)がメイン基準を満たしていても(S134−YES)、ブロックの最後尾のデータでなければ(S136−NO)、従属ループ処理における条件判定のためのオペレータn2を所定の条件に従って修正を加えた後に(S138)、ステップS132に戻って、次の処理対象データの処理に移行する。このステップS138の処理は、処理対象データD(n1)がメイン基準を満たさなくなったときに、それ以前にメイン基準を満たしていたデータについて、従属基準を満たすものであったか否かを(事後的に)判定するためのものである。
次に、処理対象データD(n1)がメイン基準を満たしていない場合には(S134−NO)、従属ループ処理におけ条件判定のためのオペレータn2が第2の判定条件(従属基準)に合致するか否かを判定する(S150)。そして、この従属基準を満たすものでを満たすものである場合には(S150−YES)、第2のループ処理である従属ループ処理における所定のデータ処理を行なって(S152)、従属ループ処理における条件判定のためのオペレータn2に所定の条件に従って修正を加えてから(S153)、メインのデータ処理を行なう(S154)。なお、オペレータn2に修正を加えても依然として従属基準を満たすものである場合には(S150−YES)、従属ループ処理における所定のデータ処理などを再度行なう(S152,S153)。一方、従属基準を満たさない場合には(S150−NO)、即時にメインのデータ処理を行なう(S154)。
そして、このメインのデータ処理(S154)の後には、従属ループ処理における条件判定のためのオペレータn2をリセットし(S156)、ブロックの最後尾のデータでないときにはステップS132に戻って次の処理対象データの処理に移行するが(S158−NO)、ブロックの最後尾のデータであるときにはそのブロックについての処理を完了させる(S158−YES)。
このような処理は、ソフトウェア処理であればフローチャート通りに記述して実行することで柔軟に対処できるが、ハードウェア回路で実現しようとすると、メモリからデータを読み出して逐次処理すると言った単純な処理では従属ループ処理結果を即時に確定させることができないので、従属ループ処理結果を確定させる前に優先ループ処理を待つための仕組み(具体的には多くのメモリを必要とする)や、処理経路を切替える切替手段や、これらを制御する制御回路などの、複雑な制御処理回路が必要になるので、集積回路によっては、その実装が非常に困難となり得る。
<本実施形態の処理手順>
そこで、本実施形態では、従属ループ処理で取り扱っているデータよりも処理順として後側のデータを優先ループ処理(第1の判定処理)の確定のために必要とするがために、単純な逐次処理では従属ループ処理(第2の判定処理)結果を即時に確定させることができないという点に着目し、通常の処理順においてより後順側のデータが優先される優先ループ処理を予め行なっておき、その結果を示すフラグデータを予め処理対象データに対応付けてデータ記憶部に保存しておき、従属ループ処理時には、そのフラグデータを含むデータをデータ記憶部から本来の取扱い順と同じ正順で取り込んで、そのフラグデータを参照しつつ、処理対象データについて第2の判定処理を行なうことで解決することとした。特に、通常の処理順においてより後順側(典型例は最後尾)のデータが優先される優先ループ処理を行なうに際しては、その優先性に鑑みて、本来とは逆順にデータを取り扱って判定処理を行なうようにした。
すなわち、図3に示すように、前段処理部110で処理された処理済データを一旦第1バッファメモリ部120に1ブロック分蓄積する(S202)。
次に、フラグ付加部130は、前段処理済みデータをブロックサイズで分割して処理するため、先ず、ブロックサイズ判定用のオペレータn3をブロックサイズSIZE(たとえば64)にリセットする(S210)。
次に、フラグ付加部130は、従属ループ処理に先立つ優先ループ処理において、通常の処理順とは逆順で判定処理を行なうべく、先ずブロックサイズ内の何番目のデータを処理対象としているのかを特定するオペレータn3から“1”を差し引いた後(S212)、その処理対象データD(n3)がメイン基準を満たしているか否かを判定する(S214)。データの最後尾側から処理を開始しているので、処理対象データD(n3)がメイン基準を満たすか否かの判定を行なうことで、同時に、処理対象データD(n3)が優先基準を満たすか否かの判定をもできるようになるのである。
フラグ付加部130は、処理対象データD(n3)がメイン基準を満たしているときには、その旨の判定フラグデータを処理対象データD(n3)に代えて第2バッファメモリ部140に記憶し、ステップS212に戻って、次の処理対象データの処理に移行する(S214−YES,S215)。
一方、処理対象データD(n3)がメイン基準を満たしていないときには、フラグ付加部130は、第1バッファメモリ部120から読み出した処理対象データD(n3)をそのまま第2バッファメモリ部140に記憶する(S214−NO,S216)。全データについての処理が完了していなければ(S218−NO)、フラグ付加部130は、オペレータn3から“1”を差し引いた後(S219)、ステップS216に戻って、次の処理対象データについて同様に処理する。
こうすることで、最後尾側から連続するメイン基準を満たすものについては、最後尾のデータが優先基準を満たすものであったことを示すフラグデータを第2バッファメモリ部140に保持させることができるとともに、最後尾側から最初にメイン基準を満たさなくなった以降には、元データをそのまま第2バッファメモリ部140に保持させることができる。
通常の処理順とは逆順で行なったフラグ付加部130によるメインループ処理および優先ループ処理に従ったデータの事前確認処理が完了すると(S218−YES)、後段処理部150は、第2バッファメモリ部140に保持されているデータを処理対象としてブロックサイズで分割して処理するため、先ず、ブロックサイズ判定用のオペレータn1をゼロ(0)にリセットするとともに、従属ループ処理における条件判定のためのオペレータn2もリセットする(S230)。
次に、後段処理部150は、メインループ処理(従属ループ処理や優先ループ処理の一部を包含する)において、通常の処理順と同じ正順で判定処理を行なうべく、先ずブロックサイズ内の何番目のデータを処理対象としているのかを特定するオペレータn1に“1”を加えた後に(S232)、その処理対象データD(n1)が、フラグデータであるのかやメイン基準を満たしているか否かを判定する(S234)。
具体的には、後段処理部150は、先ず、処理対象データD(n1)が判定フラグであるときには(S234−フラグ)、判定フラグに対応した所定の処理として、優先ループ処理の処理結果を確定させ(S270)、ブロックの最後尾のデータとなるまで、処理サイクルを空回りさせ(S272−NO,S274)、ブロック内の最終番目となったらそのブロックについての処理を完了させる(S272−YES)。
一方、後段処理部150は、処理対象データD(n1)がメイン基準を満たしているときには(S234−YES)、従属ループ処理における条件判定のためのオペレータn2を所定の条件に従って修正を加えた後に(S235)、修正されたオペレータn2が第2の判定条件(従属基準)を満たすか否かを判定する(S250)。そして、後段処理部150は、修正されたオペレータn2が従属基準を満たさなければステップS232に戻って次の処理対象データの処理に移行する(S250−NO)。また、修正されたオペレータn2が従属基準を満たすときには、後段処理部150は、第2のループ処理である従属ループ処理における所定のデータ処理を直ちに行なう(S252)。また、後段処理部150は、処理対象データD(n1)が判定フラグでもないしメイン基準をも満たしていないときには(S234−NO)、メインのデータ処理を直ちに行なう(S254)。
この後(S252,S254)、後段処理部150は、オペレータn2をリセットしてから(S256)、ブロックの最後尾のデータでないときにはステップS232に戻って次の処理対象データの処理に移行するが(S258−NO)、ブロックの最後尾のデータであるときにはそのブロックについての処理を完了させる(S258−YES)。
このように、ステップS212〜S218によるデータの事前確認処理を行なっておくことで、第2の判定処理である従属ループ処理における判定基準(従属基準)にも合致し、かつ、第1の判定処理である優先ループ処理における判定基準(優先基準)にも合致し得るようなデータについては、予め優先基準に合致する旨の判定フラグデータに修正して第2バッファメモリ部140に保存することができる。
したがって、後段処理部150における判定処理においては、第2バッファメモリ部140から本来の処理順と同じ正順にデータを読み出してデータ判定を行なうことで、メイン基準に合致しかつ優先基準にも合致し得るようなデータについては従属基準にも合致するか否かを問わず、それに応じた確定処理を(S270)、またメイン基準に合致しかつ従属基準にも合致するデータに応じた確定処理を(S252)、またメイン基準に合致しないデータに応じた確定処理(S254)を、それぞれ直ちに行なうことができるので、データの内容によらず、一定のサイクル数で処理することができるようになる。
<変形構成>
図4は、本発明に係るデータ処理装置の変形構成を示す回路ブロック図である。この変形構成のデータ処理装置1は、図1に示した基本構成における第1バッファメモリ部120および第2バッファメモリ部140を、複数のバッファメモリの並列回路で構成したものである。すなわち、第1バッファメモリ部120および第2バッファメモリ部140には、それぞれ2個のバッファメモリ122,124,142,144が設けられている。
基本構成例のように、第1バッファメモリ部120および第2バッファメモリ部140に、それぞれデータの書込みと読出しとを同時に行なうことのできない1個のバッファメモリを設けると、あるブロックについて処理を完結するには、第1バッファメモリ部120からの読出しと第2バッファメモリ部140への書込みとを行なう逆順の処理と、第2バッファメモリ部140からの読出しを利用した正順の処理とをする必要があるので、全体としては、処理を途切れ、2ブロック分の処理サイクルが必要になってしまう。
これに対して、変形構成例のように、第1バッファメモリ部120および第2バッファメモリ部140に、それぞれ複数個のバッファメモリを設けると、ブロックデータを交互に取り扱うことができ、たとえば一方のバッファメモリにデータを書込みつつ他方のバッファメモリからデータを読み出すことが同時にできるようになり、処理の途切れが生じない。たとえば、一方のブロックについてはバッファメモリ122,142を使用し、他方のブロックについてはバッファメモリ124,144を使用することができる。
これにより、一方のブロック(たとえば奇数番目のブロックデータ)についてのバッファメモリ122を利用したフラグ付加部130による逆順の処理と、他方のブロック(たとえば偶数番目のブロックデータ)についてのバッファメモリ144を利用した後段処理部150による処理順の処理とを並行して行なうことができるし、一方のブロック(たとえば奇数番目のブロックデータ)についてのバッファメモリ124を利用したフラグ付加部130による処理順の処理と、他方のブロック(たとえば偶数番目のブロックデータ)についてのバッファメモリ124を利用した後段処理部150による逆順の処理とを並行して行なうといった、パイプライン処理を行なうことができるので、全体としては、処理を途切れなく継続することができ、1ブロック分の処理サイクルで済ますことができるようになる。
なおこの変形構成例では、ダブルバッファ構成としていたが、データの書込みと読出しとを同時に可能な構成であればよく、第1バッファメモリ部120および第2バッファメモリ部140に、それぞれ1個の2ポートメモリを使用することでも、同様の効果を得ることができる。
<JPEG符号化の場合>
次に、JPEG符号化処理におけるAC係数のエンコード処理を事例にして、具体的に説明する。
図5は、JPEG符号化処理におけるAC係数のエンコード処理を説明する図であり、図5(A)はその処理手順を示したフローチャート、図5(B)はブロック内のデータスキャン順を説明する図である。なお、図5(A)に示すフローチャートは、JPEGの規格書(ISO/IEC10918−1;1993(E))にて規定されているものである。
JPEGでは、8×8=64個のデータを最小単位MCU(Minimum Coded Unit)とし、このMCUごとに符号化を行なう。ここで、AC成分の符号化に際しては、外側のメインループで、8×8個の計64個でなるブロック内の各データのうち、図5(B)の左上隅のDC成分を除く63個のAC成分について、データがメイン基準を満たすか否かの判定処理を行なって(S334)、その判定結果に基づいて、メインのデータ処理としての符号化処理(S354)を順次行なう。
その処理順は、ブロックの右下に向かうほど、量子化により“0”の発生する確率が高くなるため、左上側から斜め右下方向にデータを読むことにより“0”成分が連続して発生し易いように「ジグザグスキャン」を行なう。このジグザグスキャンでは、図5(B)に示すように、ブロックの左上隅(0番目のDC成分を除く1番目から)を起点として、最初に左下方向へ進みながらデータを読み、端まで到達したら今度は右上方向へ進みながらデータを読む。このようにデータを読むことで、“0”成分が連続して出現することが期待できるため、符号化処理もそれにあった形で行なう。
これにより、AC成分をZZ(1)から順番にみていき、“0”でないデータ(ノンゼロのデータ)が見つかったとき、それまでに発生した“0”成分の連続個数(run;4ビットのRRRR(ここで、0≦RRRR≦15))、さらに現在のノンゼロのAC成分に対応するカテゴリを4ビットの有効ビット数SSSSとして表わし、それらの組合せを用いて既知のテーブル(たとえば輝度成分に対するハフマン符号)から対応するハフマン符号を求めるなどして符号化してデータ列に加えるのを符号化処理の基本とするのである。
ここで、外側のメインループ内には、図5(B)の右下隅に示す最後尾(63番目)のAC成分が“0”の場合には、つまりメイン基準を満たすとともに優先基準をも満たす場合には、最終ブロック信号EOB(End Of Block)を出力するための優先ループ処理(以下EOB生成ループ処理ともいう)が存在するとともに、“0”成分の連続個数(run)が“15”を越えたときには、つまりメイン基準を満たすとともに従属基準をも満たす場合には、runの値をリセットしてゼロ長数信号ZRL(Zero Run Length)を出力するための従属ループ処理(以下ZRL生成ループ処理ともいう)が存在する。
最終ブロック信号EOBは、最後のAC成分が“0”の場合には、その前に“0”成分が幾つ続いていても最終ブロック信号EOBを出力するという優先性があり、最終ブロック信号EOBが出力されるときには、たとえメイン基準を満たすとともに従属基準をも満たす場合であってもゼロ長数信号ZRLを出力しない。
つまり、JPEGの符号化処理では、DCT計算の結果の64個のDCT係数を量子化し、先頭の1個はDC(直流)係数として符号に変換し、残り63個はAC係数として処理する。ここで、“0”(ゼロ)ではないAC係数はそのままAC符号に変換し、AC係数が“0”の場合は連続する“0”の個数をカウントして次に現れるノンゼロ係数と一緒に符号化するのを基本とするが、ブロックの末尾にゼロが現れた場合は、それ以前の“0”の連続個数に拘わらず(ZRL符号化に優先して)EOB符号に変換するし、“0”の連続個数が所定数に達すると、EOB符号への変換がない限りにおいてZRL符号に変換するのである(後述する図6を参照)。以下、具体的に説明する。
前段処理部110のDCT計算部112でDCT係数が算出され、量子化計算部114によって算出された量子化済みデータをブロックサイズで分割して処理するため、先ず、ブロックサイズ判定用のオペレータKをゼロ(0)にリセットするとともに、ZRL生成ループ処理における条件判定のためのオペレータRもゼロ(0)にリセットする(S330)。
次に、メインループ処理において、先ずブロックサイズ内の何番目のデータを処理対象としているのかを特定するべく、オペレータKに“1”を加えた後(S332)、その処理対象データZZ(K)が“0”であるか否か(メイン基準を満たしているか否か)を判定する(S334)。処理対象データZZ(K)が“0”であって(S314−YES)、かつブロックの最後尾のデータであるとき、つまりオペレータKが“63”である(優先基準を満たす)ときには(S336−YES)、最終ブロック信号EOBを出力し、そのブロックについての処理を完了させる(S370)。なお、最終ブロック信号として、有効ビット数SSSS=0,run=0が割り当てられている。つまり、末尾の“0”はまとめてEOB符号に変換する。
こうすることで、先頭から順にAC成分をジグザグスキャンして“0”の成分が見つかった場合、最後の(右下隅の)AC成分が“0”のときには、その前に“0”成分がいくつ続いていても、ゼロ長数信号ZRLを出力することなく、最終ブロック信号EOBを優先的に出力して、そのブロックに対する処理を終了できるのである。
一方、処理対象データがメイン基準を満たしていても(S334−YES)、ブロックの最後尾のデータでなければ(S336−NO)、ZRL生成ループ処理における条件判定のためのオペレータRに“1”を加えた後に(S338)、ステップS332に戻って、次の処理対象データの処理に移行する。
また、処理対象データZZ(K)が“0”でない(メイン基準を満たしていない)場合には(S334−NO)、ZRL生成ループ処理における条件判定のためのオペレータRが“15”を超えるか否か(第2の判定条件を満たしているか否か)を判定する、つまりrunの値が15を越えるか否か(従属基準を満たすか否か)を判定する(S350)。そして、オペレータRが“15”を超える場合(runの値が15を越えるとき)、つまりR=16の場合には(S350−YES)、ゼロ長数信号ZRLを出力するとともに、オペレータRから“16”を差し引いてから(S352)、それまでに発生した“0”成分の連続個数(run)と有効ビット数SSSSの組合せを符号化してデータ列に加える(S354)。オペレータRから“16”を差し引いたときに、依然としてオペレータRが“15”を超える場合には、再度ステップS352の処理を繰り返すことになる。こうすることで、“0”でないAC成分(ノンゼロ)が現われる前に連続して存在する“0”のデータについて、EOB符号への変換(S370)がない限りにおいて、16個ごとにゼロ長数信号ZRLを出力することができるようになる。
一方、オペレータRが“15”を超えない場合つまりrunの値が15を越えないときには(S330−NO)、要するに、データZZ(K)がメイン基準(ZZ(K)=0)を満たさず、かつそれ以前のrunの値が15を越えないときには、即時に、メインのデータ処理としてのAC符号化処理を行なう。具体的には、それまでに発生した“0”成分の連続個数(run)とAC成分の有効ビット数SSSSの組合せを符号化してデータ列に加える(S354)。なお、ゼロ長数信号ZRLとしては、有効ビット数SSSS=0,run=15が割り当てられている。
そして、このAC符号化処理(S354)の後には、オペレータRをゼロ(0)にリセットし(S356)、ブロックの最後尾のデータでないとき、つまりオペレータKが“63”でないときにはステップS312に戻って次の処理対象データの処理に移行するが(S358−NO)、ブロックの最後尾のデータであるとき、つまりオペレータKが“63”であるときにはそのブロックについての処理を完了させる(S358−YES)。
つまり、AC成分をジグザグスキャンして、連続する“0”成分を数えながら“0”でない成分を見つけ、“0”でないデータが見つかったときに(ノンゼロが現れたら)、AC符号を発生する、すなわち、それまでに発生した“0”成分の連続個数(run)と有効ビット数SSSSの組合せを符号化してデータ列に加えるのである。
このような処理をソフトウェアで実装するならば、フローチャート通りに記述することで柔軟に対処できるし、ASICやFPGAなどに実装する場合には、“0”成分の連続個数(run)が“15”を超えるようなときに最終データ値も“0”であるとき、ZRL出力に優先してEOB出力を行なうためのEOB生成ループ処理を待つための仕組み(具体的には多くのメモリを必要とする)や、処理経路を切替える切替手段や、これらを制御する制御回路などの、複雑な制御処理回路が必要になるのであるが、これらは、ステートマシンなどで制御回路を構成すれば実現できる。
一方、非特許文献1に記載されているような「ALUアレイタイプの信号処理用半導体デバイス」に実装する場合は、制御回路の実装に向いていないため、その設計の難易度が上がり、回路規模も大きくなる。
<AC係数とZRL符号とEOB符号の関係について>
図6は、JPEG符号化における、AC係数とZRL符号とEOB符号の関係をさらに詳細に説明する図である。
なお、JPEGでは、8×8=64個のデータを最小単位MCUとし、このMCUごとに符号化を行なうが、ここでは、1ブロック=32個のデータ、ZRL=8個のゼロ、と仮定して説明する。これは、図を見易くするためであるが、状況はどちらも変わらない。
ここで、AC成分の符号化に際しては、図5を用いて説明したように、MCU内でAC成分をジグザグスキャンして、連続する“0”成分を数えながら“0”でない成分を見つける。そして、“0”でない成分の有効ビット数SSSSを求める。そして、“0”成分の連続個数(run)と有効ビット数SSSSの組合せを符号化して、データ列に加える。また、“0”でない成分の下位有効ビット数SSSSをデータ列に加える。
ただし、この処理フローにはさらに例外処理として、図5を用いて説明したように、優先基準に合致しているか否かにに応じたループ処理を行なう優先処理(S336,338,370)と、従属基準に合致しているか否かにに応じたループ処理を行なう従属処理(S350,352)とがある。
たとえば、図6に示すように、最後のAC成分が“0”の場合には、その前に“0”成分が幾つ続いていても、最終ブロック信号EOBを出力して、そのブロックに対する処理を終了するのである。また、runの値が“7”(実際のJPEGでは“15”;以下同様)、を越えた場合には、runの値をリセットしてゼロ長数信号ZRLを出力するのである。
したがって、図6(A)に示すように、runの値が“7”を越えない範囲で“0”が連続している場合には、ノンゼロが現われると直ちにAC符号を発生すればよいし、最後尾側でのゼロは、纏めてEOB符号に変換すればよい。
一方、処理対象ブロックのデータ系列によっては、ゼロ長数信号ZRLの発生よりも、最終ブロック信号EOBの発生の方を優先させなければならないことが起こり得る。たとえば、runの値が“7”を越える場合には、ゼロ長数信号ZRLを出力する対象となり得るのであるが、それが最後尾まで続くか否かによってゼロ長数信号ZRLの発生可否が規定されるので、runの値が“7”を越える場合でも、即時にゼロ長数信号ZRLを出力することはできない。“0”が連続して最後尾まで続く場合は、ゼロ長数信号ZRLを出力する対象となり得る場合であっても、最終ブロック信号EOBの発生を優先させる必要があるからである。
たとえば、図6(B)に示すように、runの値が“7”を越える場合でも、即時にゼロ長数信号ZRLを出力することはできず、ノンゼロが現われたときに、AC符号を発生するのに合わせて、ゼロ長数信号ZRLを出力する必要がある。つまり、ノンゼロが現われたときに、それまでにゼロが連続して8個出現していた場合にはZRL符号に変換する。このため、ノンゼロのAC成分が現れたときに、複数の符号(AC符号とZRL符号)を発生することが必要になってしまう。
また、図6(C)に示すように、runの値が“7”を越え、かつ連続して最後尾まで続く場合には、ゼロ長数信号ZRLを出力することなく、最終ブロック信号EOBを発生させなければならない。
結局の所、runの値が“7”を越える場合には、最後尾のAC成分が“0”であるのかノンゼロであるのかによってゼロ長数信号ZRLの出力可否が規定されるので、最後尾のAC成分がメイン基準(ZZ(K)=0)を満たすか否かの判定処理をした後でないと、ゼロ長数信号ZRLの出力を行なうことができないのである。
このような処理をするためには、“0”が連続して8個(JPEGのAC符号化の場合には16個)現れても、ZRL符号の発行を保留しておき、ノンゼロ係数が現れた時点で、それまでの“0”の連続個数を判定して、ZRL符号の発行(必要があれば複数回数)とAC符号の発行を実行する必要がある。
<解決手法>
図7は、上述した従来のJPEG符号化処理の問題を解決する本実施形態による処理手法と、AC係数とZRL符号とEOB符号の関係を説明する図である。また、図8は、本実施形態でのJPEG符号化処理手順を示したフローチャートである。また、図9は、本実施形態のデータ処理手順(JPEG符号化処理手順)における、ブロック内のデータスキャン順を説明する図である。
先ず、図7(A1),(B1)に示すように、前段処理部110においてDCT計算と量子化処理とを行なった処理順にデータを第1バッファメモリ部120に1ブロック分保存する(S402)。そして、フラグ付加部130のEOB処理部132は、本来の処理順とは逆順、すなわち図9(A)に示すようにジグザグスキャンの逆順に、末尾側から順にデータを第1バッファメモリ部120から取り込んで、最後尾側から、順にAC成分が“0”であるのかノンゼロであるのかを予め判定する(S410〜414)。そして、AC成分が“0”であるときには、その判定結果を示すフラグを元のデータと対応付けて第2バッファメモリ部140に保存しておく(S414−YES,S415)。また、最後尾側から最初にノンゼロが現われた後には、AC成分がノンゼロであるのか“0”であるのかを問わず、そのAC成分をそのまま第2バッファメモリ部140に保存しておく(S414−NO,S416〜S419)。
具体的には、図7(A1),(B1)に示すように末尾側に連続して“0”が存在すると、図7(A2),(B2)に示すように、その“0”をエンドフラグeに置き換えて第2バッファメモリ部140に保存するし、最後尾側から最初にノンゼロが現われた後にはそのAC成分をそのまま第2バッファメモリ部140に保存する。つまり、末尾のデータから順に連続して現れるゼロを判定してエンドフラグeを付加し、この処理後のデータを第2バッファメモリ部140に1ブロック分保存する。
次に後段処理部150のエントロピー符号化部152は、オペレータK,Rをリセットした後(S430)、図7(A3),(B3)に示すように、本来の順に、すなわち図9(B)に示すようにジグザグスキャンの正順に、先頭側から順にデータを第2バッファメモリ部140から取り込んで、連続する“0”成分を数えながら、エンドフラグeや“0”でない成分(エンドフラグeを除く)を見つける(S432,S434)。
そして、図7(A3),(B3)に示すように、エントロピー符号化部152は、エンドフラグeが現われると直ちにEOB符号を発生する(S434−フラグ,S470)。また、処理サイクルの調整のため、ブロック内の最終番目となるまで処理サイクルを空回りさせ(S472−NO,S474)、ブロック内の最終番目となったらそのブロックについての処理を完了させる(S472−YES)。
第2バッファメモリ部140からジグザグスキャン順にデータを読み出したときにエンドフラグeが現われた後には、最後尾までエンドフラグeが続くことになるので、第1バッファメモリ部120に保存しておいた元のデータとしてはゼロ長数信号ZRLを出力する対象となり得る場合であっても、第2バッファメモリ部140から読み出したデータを取り扱う限り、エントロピー符号化部152は、“0”を検知することがないので、確実に、ゼロ長数信号ZRLの出力よりもEOB信号の出力を優先させることができる。
また、エントロピー符号化部152は、“0”成分が現われると、従属ループ処理における判定条件であるゼロの連続数を監視するのためのオペレータRに“1”を加えた後に(S435)、連続する“0”成分が“8”(JPEG符号化の場合には“16”;以下同様)であるか否かを判定する(S450)。そして、エントロピー符号化部152は、連続する“0”成分が“8”でなければステップS432に戻って次の処理対象データの処理に移行するし(S450−NO)、図7(A2)に示すように、連続する“0”成分が“8”になると、直ちにZRL符号を発生する(S450−YES,S452)。また、エントロピー符号化部152は、図7(A3),(B3)に示すように、ノンゼロ(エンドフラグeを除く)が現われると直ちにAC符号を発生する(S434−NO,S454)。
この後、従属ループ処理におけ条件判定のためのオペレータRをゼロ(0)にリセットし(S456)、ブロックの最後尾のデータでないときにはステップS432に戻って次の処理対象データの処理に移行するが(S458−NO)、ブロックの最後尾のデータであるときにはそのブロックについての処理を完了させる(S458−YES)。
ステップS432〜S458もしくはステップS470を行なうことで、エントロピー符号化部152は、第2バッファメモリ部140からジグザグスキャン順にデータを読み出してデータ判定を行なうことで、AC符号、ZRL符号、およびEOB符号の何れかの出力を直ちに確定させることができるので、データの内容によらず、一定のサイクル数で処理することができるようになる。
たとえば、JPEGにおけるAC符号化処理であれば、ゼロが16個現れたら即時にZRL符号を発行することができ、エンドフラグeが現れたら即時にEOB符号を発行することができる。ZRL符号の発行を保留する必要がないし、図6(B)に示したようにノンゼロの係数が現れたときに複数の符号を発生することも必要ないので、63個の係数を必ず63サイクルで処理する回路を容易に構成することができ、制御回路が単純なものになる。
これにより、比較的単純な構造の制御回路で制御可能なデータパスを構成することができるようになり、たとえば「ALUアレイのパイプラインで構成されたプログラマブルデバイス」でも容易にJPEGなどの画像処理装置を実装することが可能となる。
なお、エンドフラグeが現れた時点で次のブロックの処理に移ることによって、処理の高速化を図ることもできるが、こうしてしまうと、データの内容によって処理サイクル数に違いができてくるので、ALUアレイに不向きな構成になってしまう。
もちろん、ASICやFPGAなどの回路構成においても、このような処理を実装することもできるので、回路規模削減や設計難易度の容易化、あるいは動作クロック周波数の向上などの効果を期待することができる。この場合、ALUアレイを用いた構成とは異なり、エンドフラグeが現れた時点で次のブロックの処理に移ることによって、処理の高速化を図ることは有効である。
なお、前述の具体的な事例では、ある判定処理よりも本来の処理順におけるより後段側のデータに基づく他の判定処理の方が優先される判定処理ループを持つデータ処理の典型的なものとして、JPEGにおけるAC符号化処理を一例として、本願発明を適用した事例で説明したが、AC符号化処理以外の符号化処理や、その他のデータ処理にも同様に適用できる。
また、「ALUアレイのパイプラインで構成されたプログラマブルデバイス」あるいはASICやFPGAなどのハードウェア回路を用いて実現することに限らず、図8に示したフローチャート通りにソフトウェア処理を記述することでも実現することができる。よって、本発明に係るデータ処理技術(画像処理技術)は、電子計算機(コンピュータ)を用いてソフトウェアで実現することもでき、本発明に係るデータ処理装置(画像処理装置や符号化装置など)を、電子計算機を用いてソフトウェアで実現するために好適なプログラムあるいはこのプログラムを格納したコンピュータ読取可能な記憶媒体を発明として抽出することもできるのである。
1…データ処理装置、3…置換処理部、110…前段処理部、112…DCT計算部、114…量子化計算部、120…第1バッファメモリ部、122,124…バッファメモリ、130…フラグ付加部、132…EOB処理部、140…第2バッファメモリ部、142,144…バッファメモリ、150…後段処理部、152…エントロピー符号化部、154…バイトパッキング部