図面を参照して、本発明によるデコーダー検証装置の実施の形態を記載する。そのデコーダー検証装置は、図2に示されているように、JPEG Decoder DUT2を検証することに利用される。そのデコーダー検証装置は、JPEG検証コンポーネント1とリファレンスソフト3とを備えている。
JPEG検証コンポーネント1は、ユーザにより入力される制約情報5に基づいてJPEGデータ6を算出する。制約情報5は、マーカーセグメントの各パラメータの値の指定や、オプションマーカーの生成の指定や、ハフマンコードに関する指定とを示している。そのマーカーセグメントの各パラメータの値の指定は、そのパラメータの値を示し、または、そのパラメータの値が取り得る範囲を示している。そのオプションマーカーは、DNLやEXPなどが例示される。そのハフマンコードに関する指定は、生成されるLi(iは1から16までの整数で、Liは長さiのハフマン符号の数を示す)のiの最大値(ハフマン符号の長さの最大値)と各Liの設定値(0、1以上、0以上)とを示している。JPEGデータ6は、符号化されているデータであり、静止画像を示している。
リファレンスソフト3は、コンピュータにより実行され、JPEGデータ6をデコードすることにより期待値8を算出する。期待値8は、符号化されていないデータであり、JPEGデータ6が示す静止画像を示している。
JPEG Decoder DUT2は、外部機器により入力されるJPEGデータに基づいて画像データを出力する。そのJPEGデータは、符号化されているデータであり、静止画像を示している。その画像データは、符号化されていないデータであり、そのJPEGデータが示す静止画像を示している。JPEG Decoder DUT2は、JPEGデータ6が入力されたときに、JPEGデータ6をデコードすることにより結果7を出力する。結果7は、符号化されていないデータであり、JPEGデータ6が示す静止画像を示している。
図3は、JPEG検証コンポーネント1を示している。JPEG検証コンポーネント1は、マーカーセグメントパラメータランダム生成部11と量子化テーブル生成部12とハフマンテーブルランダム生成部14と符号化データランダム生成部15とフレーム生成部16とを備えている。
マーカーセグメントパラメータランダム生成部11は、ユーザにより入力される制約情報5に基づいて、複数のマーカーセグメントの各パラメータをJPEGの勧告書(ISO/IEC10918−1:1993(E))で規定された値の範囲内でランダムに生成する。その複数のマーカーセグメントは、マーカーセグメントSOIとマーカーセグメントSOFとマーカーセグメントSOSとマーカーセグメントEOIとを含んでいる。その複数のマーカーセグメントは、それぞれ、複数のパラメータの値を指定している。すなわち、マーカーセグメントSOFは、量子化テーブルセレクタTqiの値を指定している。マーカーセグメントSOSは、DCエントロピ符号化テーブルセレクタTdjの値とACエントロピ符号化テーブルセレクタTajの値とを指定している。
量子化テーブル生成部12は、マーカーセグメントパラメータランダム生成部11により生成されたマーカーセグメントSOFのパラメータである量子化テーブルセレクタTqiに基づいて量子化テーブル識別子Tqを生成する。量子化テーブル識別子Tqは、少なくともマーカーセグメントSOFで指定された量子化テーブルセレクタTqiに対応している。量子化テーブル生成部12は、さらに、全て値が1である量子化テーブル要素Qkから量子化テーブルマーカーセグメントDQTを生成する。
ハフマンテーブルランダム生成部14は、制約情報5とマーカーセグメントパラメータランダム生成部11により生成されたマーカーセグメントSOSのパラメータであるDCエントロピ符号化テーブルセレクタTdjとACエントロピ符号化テーブルセレクタTajとに基づいて、ハフマンテーブルマーカーセグメントDHTを生成する。ハフマンテーブルマーカーセグメントDHTは、DCエントロピ符号化テーブルとACエントロピ符号化テーブルとを示している。そのDCエントロピ符号化テーブルとACエントロピ符号化テーブルとは、ハフマン符号として成立する範囲内でランダムに生成される。
符号化データランダム生成部15は、量子化テーブル生成部12により生成された量子化テーブルマーカーセグメントDQTとハフマンテーブルランダム生成部14により生成されたハフマンテーブルマーカーセグメントDHTとに基づいて、符号化データECSを生成する。符号化データECSは、ハフマンテーブルマーカーセグメントDHTが示すDCエントロピ符号化テーブルで指定されたハフマン符号を網羅するように、かつ、ハフマンテーブルマーカーセグメントDHTが示すACエントロピ符号化テーブルで指定されたハフマン符号を網羅するように、ランダムに生成される。
フレーム生成部16は、マーカーセグメントパラメータランダム生成部11により生成された複数のマーカーセグメントと量子化テーブル生成部12により生成された量子化テーブルマーカーセグメントDQTとハフマンテーブルランダム生成部14により生成されたハフマンテーブルマーカーセグメントDHTと符号化データランダム生成部15により生成された符号化データECSに基づいて、JPEGの勧告書(ISO/IEC10918−1:1993(E))で規定された範囲内でマーカーセグメントの生成順序がランダムなJPEGデータ6を生成する。
図4は、ハフマンテーブルランダム生成部14の動作を示している。ハフマンテーブルランダム生成部14は、制約情報5が示すハフマン符号の長さの最大値l_maxに代入されている値をチェックする(ステップS1)。すなわち、ハフマンテーブルランダム生成部14は、DCエントロピ符号化テーブルを生成する場合で最大値l_maxの値が4以上16以下でないときに、または、ACエントロピ符号化テーブルを生成する場合で最大値l_maxの値が8以上16以下でないときに(ステップS1、NO)、エラーメッセージを出力して、制約情報5がハフマン符号として成立しない制約を与えていることをユーザに通知する(ステップS2)。ハフマンテーブルランダム生成部14は、DCエントロピ符号化テーブルを生成する場合で最大値l_maxの値が4以上16以下であるときに、または、ACエントロピ符号化テーブルを生成する場合で最大値l_maxの値が8以上16以下であるときに(ステップS1、YES)、制約情報5が示す配列l_unused[]に基づいて配列l_list[]に値を代入する。配列l_unused[i]は、インデックス値i(iは、1から16までの整数を示す。)を用いて、Liが0である場合に0を示し、Liが1以上である場合に1を示し、Liが0以上である場合に2を示している。ハフマンテーブルランダム生成部14は、配列l_unused[]のうちのi番目の変数l_unused[i]が1を示すときに、配列l_list[]のうちの変数l_list[i]に1を代入し、変数l_unused[i]が1以外の値を示すときに、変数l_list[i]に0を代入する(ステップS3)。
ハフマンテーブルランダム生成部14は、配列l_unused[]のうちの1を示す変数l_unused[i]の個数を変数l_cntに代入する(ステップS4)。
ハフマンテーブルランダム生成部14は、変数l_limを用いて、次式:
が満たされているかどうかを確認する(ステップS5)。変数l_limは、DCエントロピ符号化テーブルを生成するときに12を示し、かつ、ACエントロピ符号化テーブルを生成するときに162を示している。ハフマンテーブルランダム生成部14は、その式が満足していないときに(ステップS5、NO)、エラーメッセージを出力して、制約情報5がハフマン符号として成立しない制約を与えていることをユーザに通知する(ステップS6)。
ハフマンテーブルランダム生成部14は、その式が満足しているときに(ステップS5、YES)、インデックス値iに1を代入し、変数l_totalに0を代入する(ステップS7)。
ハフマンテーブルランダム生成部14は、インデックス値iの値が変数l_maxの値より小さいときに(ステップS8、YES)、変数l_unused[i]に基づいて変数l_valueにランダムな値を代入する(ステップS9)。すなわち、ハフマンテーブルランダム生成部14は、変数l_unused[i]が0を示すときに、変数l_valueに0を代入する。ハフマンテーブルランダム生成部14は、変数l_unused[i]が1を示すときに、変数l_valueに乱数を代入する。その乱数は、1以上であり、かつ、次式:
l_lim−(l_total+l_cnt)
により示される値以下であり、かつ、2i未満である。ハフマンテーブルランダム生成部14は、変数l_unused[i]が2を示すときに、変数l_valueに乱数を代入する。その乱数は、0以上であり、かつ、次式:
l_lim−(l_total+l_cnt)
により示される値以下であり、かつ、2i未満である。
ハフマンテーブルランダム生成部14は、変数l_valueが示す値を変数l_list[i]に代入する(ステップS10)。ハフマンテーブルランダム生成部14は、次式:
が満足していないときに(ステップS11、NO)、その式が満足するまで再度ステップS9の処理とステップS10の処理とを繰り返し実行する。ハフマンテーブルランダム生成部14は、その式が満足しているときに(ステップS11、YES)、変数l_totalが示す値と変数l_valueが示す値とを加算した値を変数l_totalに代入する。ハフマンテーブルランダム生成部14は、変数l_unused[i]が1を示すときに、変数l_cntが示す値から1を減算した値を変数l_cntに代入する。ハフマンテーブルランダム生成部14は、インデックス値iが示す値に1を加算した値をインデックス値iに代入する(ステップS12)。ハフマンテーブルランダム生成部14は、インデックス値iがl_maxと等しくなるまでステップS9〜ステップS12を繰り返して実行する。
ハフマンテーブルランダム生成部14は、インデックス値iが示す値と変数l_maxが示す値とが等しいときに(ステップS8、NO)、変数l_limが示す値から変数l_totalが示す値を減算した値を変数l_list[l_max]に代入する(ステップS13)。
ハフマンテーブルランダム生成部14は、DCエントロピ符号化テーブルを生成するときに、使用可能な0x00〜0x0Bの12個の値をランダムな順序で生成して配列v_list[0:11]に格納する。ハフマンテーブルランダム生成部14は、ACエントロピ符号化テーブルを生成するときに、使用可能な0x00〜0x0A、0x10〜0x1A、…、0xF0〜0xFAの162個の値をランダムな順序で生成し、配列v_list[0:161]に格納する。
ハフマンテーブルランダム生成部14は、マーカーセグメントSOSで指定されたDCエントロピ符号化テーブルセレクタTdjとACエントロピ符号化テーブルセレクタTajとに対応するハフマンテーブル識別子ThとハフマンテーブルマーカーセグメントDHTとを生成する。ハフマンテーブルマーカーセグメントDHTは、DCエントロピ符号化テーブルとACエントロピ符号化テーブルとを示している。そのDCエントロピ符号化テーブルは、マーカーセグメントSOSで指定されたDCエントロピ符号化テーブルセレクタTdjに対応し、ハフマンテーブルランダム生成部14により算出された配列l_list[]をL値とし、配列v_list[0:11]をV値としている。そのACエントロピ符号化テーブルは、マーカーセグメントSOSで指定されたACエントロピ符号化テーブルセレクタTajに対応し、ハフマンテーブルランダム生成部14により算出された配列l_list[]をL値とし、配列v_list[0:161]をV値としている。
符号化データランダム生成部15は、ハフマン符号を生成する動作と、DC成分の符号化データを生成する動作と、AC成分の符号化データを生成する動作とを実行する。
図5は、そのハフマン符号を生成する動作を示している。符号化データランダム生成部15は、変数kに0を代入し、インデックス値iに1を代入し、変数jに1を代入する(ステップS20)。符号化データランダム生成部15は、変数jの値が変数l_list[i]の値より大きいときに(ステップS21、NO)、配列huffsize[]のうちのi番目の変数huffsize[i]に1を代入し、変数kが示す値に1を加算した値を変数kに代入し、変数jが示す値に1を加算した値を変数jに代入する(ステップS22)。符号化データランダム生成部15は、次式:
j>l_list[i]
が成立するまで、ステップS22の処理を繰り返して実行する。
符号化データランダム生成部15は、変数jの値が変数l_list[i]の値より大きいときに(ステップS21、YES)、インデックス値iが示す値に1を加算した値をインデックス値iに代入し、変数jに1を代入する(ステップS23)。符号化データランダム生成部15は、インデックス値iが16より大きいかどうかを判別し(ステップS24)、インデックス値iが16より大きくないときにステップS21〜ステップS22の処理を繰り返し実行する。
符号化データランダム生成部15は、インデックス値iが16より大きいときに(ステップS24、YES)、変数huffsize[k]に0を代入する(ステップS25)。符号化データランダム生成部15は、変数kに0を代入し、変数codeに0を代入し、変数huffsize[0]が示す値を変数siに代入する(ステップS26)。
符号化データランダム生成部15は、変数codeが示す値を変数huffsize[k]に代入し、変数codeが示す値に1を加算した値を変数codeに代入し、変数kが示す値に1を加算した値を変数kに代入する(ステップS27)。符号化データランダム生成部15は、変数huffsize[k]が示す値と変数siが示す値とを比較し(ステップS28)、変数huffsize[k]が示す値と変数siが示す値とが異なるまで、ステップS27の処理を繰り返し実行する。
符号化データランダム生成部15は、変数huffsize[k]が示す値が0でないときに(ステップS29、NO)、変数codeを1ビット論理左シフトし、変数siが示す値に1を加算した値を変数siに代入する(ステップS30)。符号化データランダム生成部15は、変数huffsize[k]が示す値と変数siが示す値とを比較し(ステップS31)、変数huffsize[k]が示す値と変数siが示す値とが等しくなるまで、ステップS30の処理を繰り返し実行する。
符号化データランダム生成部15は、変数huffsize[k]が示す値と変数siが示す値とが等しいときに(ステップS31、YES)、ステップS27〜ステップS31を繰り返し実行する。このとき、符号化データランダム生成部15は、変数huffsize[k]が示す値が0であるときに(ステップS29、YES)、この動作を終了する。
すなわち、符号化データランダム生成部15は、配列l_list[]に基づいて配列huffsize[]と配列huffcode[]とを生成して、符号化データECSを生成する。このとき、配列huffcode[]は、ハフマン符号のリストを示し、配列huffsize[]は、配列huffcode[]が示すハフマン符号の長さのリストを示している。なお、このアルゴリズムは、JPEGの勧告書に規定されているものと同一である。
図6は、DC成分の符号化データを生成する動作を示している。ここでは、JPEGの処理単位である1データユニット(DC成分1個、AC成分63個)の処理動作について説明する。符号化データランダム生成部15は、−1023〜1023の範囲のうちからランダムに選択された整数を変数dcdに代入する(ステップS40)。符号化データランダム生成部15は、変数dcdと同一成分で前のユニットで生成した変数predとの差分を算出し、その差分を付加ビットdiffに代入し、変数dcdが示す値を変数predに代入する(ステップS41)。符号化データランダム生成部15は、付加ビットdiffを絶対値化する。すなわち、符号化データランダム生成部15は、付加ビットdiffが示す値が0より小さいときに(ステップS42、YES)、付加ビットdiffが示す値から1を減算した値を付加ビットdiffに代入し、付加ビットdiffが示す値に−1を乗算した値を付加ビットdiffに代入する(ステップS43)。
符号化データランダム生成部15は、次式:
S=log2(diff+1)
によりカテゴリ値Sを算出する(ステップS44)。符号化データランダム生成部15は、配列v_list[]のうちからカテゴリ値Sと一致する変数v_list[i]をサーチして、一致するときのインデックス値iを求める。すなわち、符号化データランダム生成部15は、インデックス値iに0を代入した後に(ステップS45)、カテゴリ値Sが変数v_list[i]に一致するまで(ステップS46、YES)、インデックス値iが示す値に1を加算した値をインデックス値iに代入する(ステップS47)。
符号化データランダム生成部15は、変数huffcode[i]が示す値と変数huffsize[i]が示す値とに基づいてハフマン符号hcodeと付加ビットdiff[0:S−1]を生成して、符号化データECSを生成する(ステップS48)。
図7は、AC成分の符号化データを生成する動作を示している。ここでは、JPEGの処理単位である1データユニット(DC成分1個、AC成分63個)の処理動作について説明する。このとき、符号化データランダム生成部15は、その63個のAC成分のデータを処理する。符号化データランダム生成部15は、まず、変数jに1を代入する(ステップS60)。符号化データランダム生成部15は、変数jが示す値が63以下であるかどうかを判別することにより、63個のAC成分のデータのうちの何個目のデータの処理を行っているのかを判定して(ステップS61)、63個目であれば(ステップS61、NO)、終了する。
符号化データランダム生成部15は、変数jが示す値が63以下であるときに(ステップS61、YES)、63個のAC成分のデータのうちの処理が行われていない残りのデータの個数が15個より少ないかどうかを判別する(ステップS62)。符号化データランダム生成部15は、その残りのデータの個数が15個より少ないときに(ステップS62、YES)、変数r_maxに63にその残りのデータの個数を代入する(ステップS63)。符号化データランダム生成部15は、その残りのデータの個数が15個より少なくないときに(ステップS62、NO)、変数r_maxに15を代入する(ステップS64)。
符号化データランダム生成部15は、0から変数r_maxが示す値までの範囲のうちからランダムに選択された整数をラン長Rに代入する(ステップS65)。符号化データランダム生成部15は、ラン長Rの値を変数jに代入する(ステップS66)。符号化データランダム生成部15は、ラン長Rが0あるいは15を示すときに(ステップS67、YES)、0から10までの範囲のうちからランダムに選択された整数をカテゴリ値Sに代入する(ステップS68)。符号化データランダム生成部15は、ラン長Rが0あるいは15を示していないときに(ステップS67、NO)、1から10までの範囲のうちからランダムに選択された整数をカテゴリ値Sに代入する(ステップS69)。
符号化データランダム生成部15は、ラン長Rとカテゴリ値Sとがともに0を示すときに変数jに63を代入する(ステップS70)。符号化データランダム生成部15は、変数jが示す値に1を加算した値を変数jに代入する(ステップS71)。符号化データランダム生成部15は、0から(2S−1)までの範囲のうちからランダムに選択された整数を付加ビットabdに代入する(ステップS72)。
符号化データランダム生成部15は、ラン長R(4ビット)とカテゴリ値S(4ビット)を組み合わせてRS値(8ビット)を生成し、配列v_list[]からそのRS値と一致する変数v_list[i]をサーチして、一致するときのインデックス値iを求める。すなわち、符号化データランダム生成部15は、インデックス値iに0を代入した後に(ステップS75)、RS値が変数v_list[i]に一致するまで、インデックス値iが示す値に1を加算した値をインデックス値iに代入する(ステップS77)。
符号化データランダム生成部15は、求まったインデックス値iに対応するhuffcode[i]とhuffsize[i]により、ハフマン符号hcodeと付加ビットabd[0:S−1]を生成して、ECSデータを生成する(ステップS78)。符号化データランダム生成部15は、変数jの値が64になるまで、ステップS61〜S78を繰り返して実行する。符号化データランダム生成部15は、このような動作により1データユニットに対応するECSデータを生成するが、これを繰り返すことにより、1フレーム分(1画像分)の符号化データECSを生成する。
本発明によるデコーダー検証方法の実施の形態は、本発明によるデコーダー検証装置を用いて実行される。ユーザは、JPEG Decoder DUT2を検証するときに、制約情報5を作成する。JPEG検証コンポーネント1は、制約情報5に基づいてJPEGデータ6を生成する。リファレンスソフト3は、コンピュータにより実行され、JPEGデータ6をデコードすることにより期待値8を算出する。ユーザは、JPEG Decoder DUT2を用いて、JPEGデータ6をデコードし、結果7を生成する。ユーザは、結果7と期待値8とが一致しているときにJPEG Decoder DUT2が適切に動作していると判別し、結果7と期待値8とが異なっているときにJPEG Decoder DUT2が適切に動作していないと判別する。
このようなデコーダー検証方法によれば、ユーザは、JPEG Decoder DUT2を検証するための膨大な画像を作成する必要がなく、JPEG Decoder DUT2を検証するための工数と期間とを低減することができる。この結果、JPEGデータをデコードするこのようなハードウェアは、開発期間を短サイクル化することができる。
JPEG検証コンポーネント1は、JPEGの勧告書で規定された符号化データフォーマットの範囲内で、マーカーセグメントの各パラメータの値振り、マーカーセグメントの生成順番、ハフマンテーブルの種類がランダムなJPEGデータを生成することができる。JPEG検証コンポーネント1は、また、制約を与えることにより、各パラメータの値を特定の値あるいはある範囲内に、オプションマーカーの有る場合無い場合に、あるいは、特殊なハフマン符号を用いたJPEGデータを生成することができ、さらに、ハフマンテーブルで定義されたハフマン符号を網羅したJPEGデータを生成することができる。このため、このようなデコーダー検証方法によれば、ユーザは、JPEG検証コンポーネント1を用いることにより、マーカーセグメントの各パラメータの値振り、マーカーセグメントの生成順番、オプションマーカーの有無、ハフマンテーブルの種類、符号化データでのハフマン符号の網羅性などを十分に検証するための多種多様なデータを瞬時に生成することができるため、検証対象であるJPEG Decoder DUT2を適切な時間内に十分に検証することができる。
ビット長が長いハフマン符号は、一般的に、画像からハフマン符号に符号化されるときに、生成されにくい。JPEG検証コンポーネント1は、制約条件5を適切に与えることにより、ビット長の長いハフマン符号を含んでいる検証用符号化データを生成することができる。
なお、JPEG検証コンポーネント1は、コンピュータプログラムから形成されることもできる。そのコンピュータプログラムは、コンピュータにより実行され、JPEG検証コンポーネント1と同様にして、ユーザにより入力される制約情報5に基づいてJPEGデータ6を算出する。さらに、本発明によるデコーダー検証装置は、そのコンピュータプログラムとリファレンスソフト3との両方を実行するコンピュータから形成されることもできる。さらに、リファレンスソフト3は、JPEG検証コンポーネント1と別個のハードウェアから形成されることもできる。そのハードウェアは、リファレンスソフト3を実行するコンピュータと同様にして、JPEGデータ6をデコードすることにより期待値8を算出する。
なお、ハードウェアであるJPEG Decoder DUT2は、HDL(Hardware description language)ハードウェア記述言語により表現されるソフトウェアに置換することもできる。このとき、本発明によるデコーダー検証方法は、JPEG Decoder DUT2を検証するときと同様にして、そのソフトウェアを検証することができ、この結果、JPEGデータをデコードするハードウェアの開発期間を短サイクル化することができる。
図8は、本発明によるデコーダー検証装置に適用されるJPEG検証コンポーネントの実施の他の形態を示している。そのJPEG検証コンポーネント20は、マーカーセグメントパラメータランダム生成部21と量子化テーブルランダム生成部22とハフマンテーブルランダム生成部24と符号化データランダム生成部25とフレーム生成部26とを備えている。
マーカーセグメントパラメータランダム生成部21は、既述の実施の形態におけるマーカーセグメントパラメータランダム生成部11と同様に動作する。すなわち、マーカーセグメントパラメータランダム生成部21は、ユーザによりJPEG検証コンポーネント20に入力される制約情報5に基づいて、複数のマーカーセグメントの各パラメータをJPEGの勧告書で規定された値の範囲内でランダムに生成する。
量子化テーブルランダム生成部22は、マーカーセグメントパラメータランダム生成部21により生成されたマーカーセグメントSOFのパラメータである量子化テーブルセレクタTqiに基づいて量子化テーブル識別子Tqを生成する。量子化テーブル識別子Tqは、少なくともマーカーセグメントSOFで指定された量子化テーブルセレクタTqiに対応している。量子化テーブルランダム生成部22は、さらに、全て値が1である量子化テーブル要素Qkから量子化テーブルマーカーセグメントQTを生成する。量子化テーブルランダム生成部22は、さらに、マーカーセグメントパラメータランダム生成部21により生成されたマーカーセグメントSOFのパラメータである量子化テーブルセレクタTqiと符号化データランダム生成部25により生成された配列qb_max[0:63]とに基づいてに基づいて量子化テーブル識別子Tqを生成する。量子化テーブル識別子Tqは、少なくともマーカーセグメントSOFで指定された量子化テーブルセレクタTqiに対応している。量子化テーブルランダム生成部22は、さらに、量子化テーブル要素Qkから量子化テーブルマーカーセグメントDQTを生成する。その量子化テーブル要素Qkは、1から1023/qb_max[k]までの範囲でランダムに生成される。
ハフマンテーブルランダム生成部24は、既述の実施の形態におけるハフマンテーブルランダム生成部14と同様に動作する。すなわち、ハフマンテーブルランダム生成部24は、制約情報5とマーカーセグメントパラメータランダム生成部21により生成されたマーカーセグメントSOSのパラメータであるDCエントロピ符号化テーブルセレクタTdjとACエントロピ符号化テーブルセレクタTajとに基づいて、ハフマンテーブルマーカーセグメントDHTを生成する。ハフマンテーブルマーカーセグメントDHTは、DCエントロピ符号化テーブルとACエントロピ符号化テーブルとを示している。そのDCエントロピ符号化テーブルとACエントロピ符号化テーブルとは、ハフマン符号として成立する範囲内でランダムに生成される。
符号化データランダム生成部25は、量子化テーブルランダム生成部22により生成された量子化テーブルマーカーセグメントQTとハフマンテーブルランダム生成部24により生成されたハフマンテーブルマーカーセグメントDHTとに基づいて、配列qb_max[]と符号化データECSとを生成する。符号化データECSは、ハフマンテーブルマーカーセグメントDHTが示すDCエントロピ符号化テーブルで指定されたハフマン符号を網羅するように、かつ、ハフマンテーブルマーカーセグメントDHTが示すACエントロピ符号化テーブルで指定されたハフマン符号を網羅するように、ランダムに生成される。
フレーム生成部26は、既述の実施の形態におけるフレーム生成部16と同様に動作する。すなわち、フレーム生成部26は、マーカーセグメントパラメータランダム生成部21により生成された複数のマーカーセグメントと量子化テーブルランダム生成部22により生成された量子化テーブルマーカーセグメントDQTとハフマンテーブルランダム生成部24により生成されたハフマンテーブルマーカーセグメントDHTと符号化データランダム生成部25により生成された符号化データECSに基づいてJPEGデータを生成する。そのJPEGデータは、JPEGの勧告書で規定された範囲内でマーカーセグメントの生成順序がランダムになるように生成されている。
符号化データランダム生成部25は、ハフマン符号を生成する動作と、DC成分の符号化データを生成する動作と、AC成分の符号化データを生成する動作とを実行する。
そのハフマン符号を生成する動作は、既述の実施の形態における符号化データランダム生成部15が実行するハフマン符号を生成する動作と一致している。
図9は、そのDC成分の符号化データを生成する動作を示している。ここでは、JPEGの処理単位である1データユニット(DC成分1個、AC成分63個)の処理動作について説明する。符号化データランダム生成部25は、−1023〜1023の範囲のうちからランダムに選択された整数を変数dcdに代入する(ステップS80)。符号化データランダム生成部25は、変数dcdと同一成分で前のユニットで生成した変数predとの差分を算出し、その差分を付加ビットdiffに代入し、変数dcdが示す値を変数predに代入する(ステップS81)。
符号化データランダム生成部25は、付加ビットdiffを絶対値化する。すなわち、符号化データランダム生成部25は、付加ビットdiffが示す値が0より小さいときに(ステップS82、YES)、付加ビットdiffが示す値から1を減算した値を付加ビットdiffに代入し、付加ビットdiffが示す値に−1を乗算した値を付加ビットdiffに代入する(ステップS83)。符号化データランダム生成部25は、次式:
S=log2(diff+1)
によりカテゴリ値Sを算出する(ステップS84)。
符号化データランダム生成部25は、配列bq_max[]のうちの変数bq_max[0]の値が変数dcdの値の絶対値より小さいときに(ステップS85)、変数dcdの値の絶対値を変数bq_max[0]に代入する(ステップS86)
符号化データランダム生成部25は、配列v_list[]のうちからカテゴリ値Sと一致する変数v_list[i]をサーチして、一致するときのインデックス値iを求める。すなわち、符号化データランダム生成部25は、インデックス値iに0を代入した後に(ステップS87)、カテゴリ値Sが変数v_list[i]に一致するまで(ステップS88、YES)、インデックス値iが示す値に1を加算した値をインデックス値iに代入する(ステップS89)。
符号化データランダム生成部25は、変数huffcode[i]が示す値と変数huffsize[i]が示す値とに基づいてハフマン符号hcodeと付加ビットdiff[0:S−1]を生成して、符号化データECSを生成する(ステップS90)。
このような動作によれば、変数bq_max[0]は、変数dcdの値の絶対値の最大値を示している。
図10は、そのAC成分の符号化データを生成する動作を示している。ここでは、JPEGの処理単位である1データユニット(DC成分1個、AC成分63個)の処理動作について説明する。このとき、符号化データランダム生成部25は、その63個のAC成分のデータを処理する。符号化データランダム生成部25は、まず、変数jに1を代入する(ステップS100)。符号化データランダム生成部25は、変数jが示す値が63以下であるかどうかを判別することにより、63個のAC成分のデータのうちの何個目のデータの処理を行っているのかを判定して(ステップS101)、63個目であれば(ステップS101、NO)、終了する。
符号化データランダム生成部25は、変数jが示す値が63以下であるときに(ステップS101、YES)、63個のAC成分のデータのうちの処理が行われていない残りのデータの個数が15個より少ないかどうかを判別する(ステップS102)。符号化データランダム生成部25は、その残りのデータの個数が15個より少ないときに(ステップS102、YES)、変数r_maxに63にその残りのデータの個数を代入する(ステップS103)。符号化データランダム生成部25は、その残りのデータの個数が15個より少なくないときに(ステップS102、NO)、変数r_maxに15を代入する(ステップS104)。
符号化データランダム生成部25は、0から変数r_maxが示す値までの範囲のうちからランダムに選択された整数をラン長Rに代入する(ステップS105)。符号化データランダム生成部25は、ラン長Rの値を変数jに代入する(ステップS106)。符号化データランダム生成部25は、ラン長Rが0あるいは15を示すときに(ステップS107、YES)、0から10までの範囲のうちからランダムに選択された整数をカテゴリ値Sに代入する(ステップS108)。符号化データランダム生成部25は、ラン長Rが0あるいは15を示していないときに(ステップS107、NO)、1から10までの範囲のうちからランダムに選択された整数をカテゴリ値Sに代入する(ステップS109)。
符号化データランダム生成部25は、ラン長Rとカテゴリ値Sとがともに0を示すときに変数jに63を代入する(ステップS110)。符号化データランダム生成部25は、変数jが示す値に1を加算した値を変数jに代入する(ステップS111)。符号化データランダム生成部25は、0から(2S−1)までの範囲のうちからランダムに選択された整数を付加ビットabdに代入する(ステップS112)。
符号化データランダム生成部25は、変数bq_max[j]が示す値と付加ビットabdが示す値とを比較する(ステップS113)。符号化データランダム生成部25は、変数bq_max[j]が示す値が付加ビットabdが示す値より小さいときに、付加ビットabdが示す値を変数bq_max[j]に代入する(ステップS114)。
符号化データランダム生成部25は、ラン長R(4ビット)とカテゴリ値S(4ビット)を組み合わせてRS値(8ビット)を生成し、配列v_list[]からそのRS値と一致する変数v_list[i]をサーチして、一致するときのインデックス値iを求める。すなわち、符号化データランダム生成部25は、インデックス値iに0を代入した後に(ステップS115)、RS値が変数v_list[i]に一致するまで、インデックス値iが示す値に1を加算した値をインデックス値iに代入する(ステップS117)。
符号化データランダム生成部25は、求まったインデックス値iに対応するhuffcode[i]とhuffsize[i]により、ハフマン符号hcodeと付加ビットabd[0:S−1]を生成して、ECSデータを生成する(ステップS118)。符号化データランダム生成部25は、変数jの値が64になるまで、ステップS61〜S78を繰り返して実行する。符号化データランダム生成部25は、このような動作により1データユニットに対応するECSデータを生成するが、これを繰り返すことにより、1フレーム分(1画像分)の符号化データECSを生成する。
このような動作によれば、変数bq_max[j]は、付加ビットabdの最大値を示している。
このとき、量子化テーブルランダム生成部22は、マーカーセグメントパラメータランダム生成部11により生成された量子化テーブルセレクタTqiと符号化データランダム生成部25により生成された配列qb_max[0:63]とに基づいて、少なくともSOFで指定されたTqiに対応する量子化テーブル識別子Tqと、1から1023/qb_max[k]の値までの範囲内でランダムに生成される量子化テーブル要素Qkから、量子化テーブルマーカーセグメントDQTを生成して、フレーム生成部16へ出力する。すなわち、量子化テーブルランダム生成部22は、以上から、量子化テーブルDQTを逆量子化できる範囲内でランダムに生成する。
本発明によるデコーダー検証方法の実施の他の形態は、JPEG検証コンポーネント20が適用されるデコーダー検証装置を用いて実行される。ユーザは、JPEG Decoder DUT2を検証するときに、制約情報5を作成する。JPEG検証コンポーネント20は、制約情報5に基づいてJPEGデータ6を生成する。リファレンスソフト3は、コンピュータにより実行され、JPEGデータ6をデコードすることにより期待値8を算出する。ユーザは、JPEG Decoder DUT2を用いて、JPEGデータ6をデコードし、結果7を生成する。ユーザは、結果7と期待値8とが一致しているときにJPEG Decoder DUT2が適切に動作していると判別し、結果7と期待値8とが異なっているときにJPEG Decoder DUT2が適切に動作していないと判別する。
このようなデコーダー検証方法によれば、既述の実施の形態におけるJPEG検証コンポーネント1を用いるデコーダー検証方法と同様にして、ユーザは、JPEG Decoder DUT2を検証するための工数と期間とを低減することができる。
さらに、JPEG検証コンポーネント1では、量子化テーブルの各要素の値は1で固定されていたのに対して、JPEG検証コンポーネント20では、逆量子化できる範囲内でランダムに振ることができる。このため、JPEG検証コンポーネント20を用いたデコーダー検証方法によれば、JPEG Decoder DUT2の検証で量子化テーブルに依存する部分の検証深度を高めることができる。