(57)【要約】【課題】  複数のシンタクス要素間に依存関係がある場合でも、処理を高速化できる可変長符号化装置を提供する。【解決手段】  本発明による可変長符号化装置は、ブロック単位に画像データを入力し、シンタクス要素から符号化データを生成する可変長符号化装置であって、前記画像データを一時的に格納する記憶手段と、前記記憶手段への画像データの格納と同時に、前記画像データから第一のシンタクス要素を算出する第一のシンタクス要素算出手段と、前記第一シンタクス要素の値から第一シンタクス要素の符号化データを生成する第一の符号化手段と、前記記憶手段に格納された前記画像データを読み出し、この画像データから第二のシンタクス要素の値を算出する第二のシンタクス要素算出手段と、前記第一のシンタクス要素の値と前記第二のシンタクス要素の値に基づいて第二のシンタクス要素の符号化データを生成する第二の符号化手段と、前記第一および第二のシンタクス要素の符号化データを結合する結合手段と、を備える。【選択図】 図１
2006140969.tif 000002
【特許請求の範囲】
【請求項１】
ブロック単位に画像データを入力し、シンタクス要素から符号化データを生成する可変長符号化装置であって、
前記画像データを一時的に格納する記憶手段と、
前記記憶手段への画像データの格納と同時に、前記画像データから第一のシンタクス要素を算出する第一のシンタクス要素算出手段と、
前記第一シンタクス要素の値から第一シンタクス要素の符号化データを生成する第一の符号化手段と、
前記記憶手段に格納された前記画像データを読み出し、この画像データから第二のシンタクス要素の値を算出する第二のシンタクス要素算出手段と、
前記第一のシンタクス要素の値と前記第二のシンタクス要素の値に基づいて第二のシンタクス要素の符号化データを生成する第二の符号化手段と、
前記第一および第二のシンタクス要素の符号化データを結合する結合手段と、
を備えることを特徴とする可変長符号化装置。
【請求項２】
前記第二のシンタクス要素算出手段は、前記記憶手段に格納された画像データを逆ジグザグスキャン順に読み出して、前記第二のシンタクス要素を算出することを特徴とする請求項１記載の可変長符号化装置。
【請求項３】
前記第一のシンタクス要素は、ブロック内の値がゼロでないデータの個数、値がゼロであるデータの個数、ブロック内の最後のゼロでないデータより前に入力される、値がゼロであるデータの個数、及びブロック内の最後の絶対値が２以上のデータ以降に入力される絶対値が１であるデータの個数のうち少なくとも１つを含むことを特徴とする請求項１又は請求項２記載の可変長符号化装置。
【請求項４】
前記第二のシンタクス要素は、前記画像データのゼロラン長及び前記画像データのレベル値のうち少なくとも１つを含むことを特徴とする請求項１乃至３の何れか１項に記載の可変長符号化装置。
【請求項５】
前記結合手段は、符号化データを結合し、Ｈ．２６４規格で定められている符号化ストリームを出力することを特徴とする請求項１乃至４の何れか１項に記載の可変長符号化装置。
【請求項６】
前記第一のシンタクス要素算出手段は、
前記入力された画像データからゼロデータの個数又は非ゼロデータの個数を示す付加情報を算出する付加情報算出手段と、
前記記憶手段に一時的に格納された前記画像データ及び前記付加情報算出手段で算出された付加情報に基づいて、第一のシンタクス要素を算出する第一のシンタクス要素合成手段と、
を備えることを特徴とする請求項１乃至５の何れか１項に記載の可変長符号化装置。
【請求項７】
前記記憶手段からの前記画像データは、逆ジグザグスキャン順に読み出されて前記第一のシンタクス要素合成手段に供給されることを特徴とする請求項６に記載の可変長符号化装置。
【請求項８】
ブロック単位に画像データを入力し、シンタクス要素から符号化データを生成する可変長符号化方法であって、
前記画像データを一時的に記憶手段に格納する記憶工程と、
前記記憶手段への画像データの格納と同時に、前記画像データから第一のシンタクス要素を算出する第一のシンタクス要素算出工程と、
前記第一シンタクス要素の値から第一シンタクス要素の符号化データを生成する第一の符号化工程と、
前記記憶手段に格納された前記画像データを読み出し、この画像データから第二のシンタクス要素の値を算出する第二のシンタクス要素算出工程と、
前記第一のシンタクス要素の値と前記第二のシンタクス要素の値に基づいて第二のシンタクス要素の符号化データを生成する第二の符号化工程と、
前記第一および第二のシンタクス要素の符号化データを結合する結合工程と、
を備えることを特徴とする可変長符号化方法。
【請求項９】
前記第二のシンタクス要素算出工程は、前記記憶手段に格納された画像データを逆ジグザグスキャン順に読み出して、前記第二のシンタクス要素を算出することを特徴とする請求項８記載の可変長符号化方法。
【請求項１０】
前記第一のシンタクス要素は、ブロック内の値がゼロでないデータの個数、値がゼロであるデータの個数、ブロック内の最後のゼロでないデータより前に入力される、値がゼロであるデータの個数、及びブロック内の最後の絶対値が２以上のデータ以降に入力される絶対値が１であるデータの個数のうち少なくとも１つを含むことを特徴とする請求項８又は請求項９記載の可変長符号化方法。
【請求項１１】
前記第二のシンタクス要素は、前記画像データのゼロラン長及び前記画像データのレベル値のうち少なくとも１つを含むことを特徴とする請求項８乃至１０の何れか１項に記載の可変長符号化方法。
【請求項１２】
前記結合工程は、符号化データを結合し、Ｈ．２６４規格で定められている符号化ストリームを出力することを特徴とする請求項８乃至１１の何れか１項に記載の可変長符号化方法。
【請求項１３】
前記第一のシンタクス要素算出工程は、
前記入力された画像データからゼロデータの個数又は非ゼロデータの個数を示す付加情報を算出する付加情報算出工程と、
前記記憶手段に一時的に格納された前記画像データ及び前記付加情報算出工程で算出された付加情報に基づいて、第一のシンタクス要素を算出する第一のシンタクス要素合成工程と、
を備えることを特徴とする請求項８乃至１２の何れか１項に記載の可変長符号化方法。
【請求項１４】
前記記憶手段からの前記画像データは、逆ジグザグスキャン順に読み出されて前記第一のシンタクス要素合成工程に供給されることを特徴とする請求項１３に記載の可変長符号化方法。
【請求項１５】
請求項８乃至１４の何れか１項に記載の可変長符号化方法を実行することを特徴とするコンピュータプログラム。
【請求項１６】
請求項１５に記載のコンピュータプログラムを格納することを特徴とするコンピュータ読取可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像信号を圧縮する際の可変長符号化装置に関するものである．
【背景技術】
【０００２】
近年、動画像の圧縮符号化方式としてＨ．２６４と呼ばれる方式が規格化された。このＨ．２６４符号化方式では、ＭＰＥＧ２およびＭＰＥＧ４などの従来の圧縮符号化方式に比べて、多くの演算量が要求されるが、より高い符号化効率が実現されることが知られている。
【０００３】
このＨ．２６４符号化方式では、可変長符号化方式として、コンテキスト適応型可変長符号化（ＣＡＶＬＣ）方式が定義されている。ＣＡＶＬＣ方式での符号化ストリームを形成するシンタクス要素としては、ブロック内の値がゼロでないデータの個数（以下、ＴｏｔａｌＣｏｅｆｆと呼ぶ）、ブロック内の最後のゼロでないデータより前に入力される値がゼロであるデータの個数（以下、ＴｏｔａｌＺｅｒｏｓと呼ぶ）、ブロック内の最後の絶対値が２以上のデータ以降に入力される絶対値が１であるデータの個数（以下、ＴｒａｉｌｉｎｇＯｎｅｓと呼ぶ）、非ゼロデータの値（以下、Ｌｅｖｅｌと呼ぶ）、非ゼロデータに先行するゼロデータの個数（以下、Ｒｕｎと呼ぶ）がある。ただし、Ｈ．２６４の規格ではＴｒａｉｌｉｎｇＯｎｅｓの最大値は３であると定められている。
【０００４】
このＣＡＶＬＣ方式では、ＭＰＥＧ２およびＭＰＥＧ４などで採用されている可変長符号化方式と比べて以下の２点が大きく異なっている。つまり、
１．ＬｅｖｅｌおよびＲｕｎが逆スキャン順に符号化される、
２．ＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓの算出結果に応じて、ＬｅｖｅｌおよびＲｕｎの符号化に必要な可変長符号化テーブルが変更される、
ということである。
【０００５】
そして、ＣＡＶＬＣ方式の可変長符号化装置の一例として、特許文献１に記載されているものがある。この可変長符号化装置では、複数のデータを並列に可変長符号化し、生成された複数の可変長符号化データを順次連結することにより、処理の高速化を実現しようとしている。
【特許文献１】特開２００４−０５６７５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載の可変長符号化装置においては、複数のシンタクス要素間に依存関係があり、第一のシンタクス要素の算出が終了するまで第二のシンタクス要素の符号化が開始できない場合には処理に時間がかかるという問題がある。
【０００７】
例えばＣＡＶＬＣ方式の場合では、ブロック内のすべての画像データを読み出してＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓを算出した後に、ブロック内のすべての画像データのＬｅｖｅｌおよびＲｕｎを初めから順に可変長符号化しなければならないため、可変長符号化処理に時間がかかってしまうのである。
【０００８】
本発明はこのような問題点に鑑みてなされ、複数のシンタクス要素間に依存関係がある場合でも処理の高速化を実現できる可変長符号化装置及び方法を提供するものである。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明による可変長符号化装置は、ブロック単位に画像データを入力し、シンタクス要素から符号化データを生成する可変長符号化装置であって、前記画像データを一時的に格納する記憶手段と、前記記憶手段への画像データの格納と同時に、前記画像データから第一のシンタクス要素を算出する第一のシンタクス要素算出手段と、前記第一シンタクス要素の値から第一シンタクス要素の符号化データを生成する第一の符号化手段と、前記記憶手段に格納された前記画像データを読み出し、この画像データから第二のシンタクス要素の値を算出する第二のシンタクス要素算出手段と、前記第一のシンタクス要素の値と前記第二のシンタクス要素の値に基づいて第二のシンタクス要素の符号化データを生成する第二の符号化手段と、前記第一および第二のシンタクス要素の符号化データを結合する結合手段と、を備えることを特徴とする。
【００１０】
また、本発明による可変長符号化方法は、ブロック単位に画像データを入力し、シンタクス要素から符号化データを生成する可変長符号化方法であって、前記画像データを一時的に記憶手段に格納する記憶工程と、前記記憶手段への画像データの格納と同時に、前記画像データから第一のシンタクス要素を算出する第一のシンタクス要素算出工程と、前記第一シンタクス要素の値から第一シンタクス要素の符号化データを生成する第一の符号化工程と、前記記憶手段に格納された前記画像データを読み出し、この画像データから第二のシンタクス要素の値を算出する第二のシンタクス要素算出工程と、前記第一のシンタクス要素の値と前記第二のシンタクス要素の値に基づいて第二のシンタクス要素の符号化データを生成する第二の符号化工程と、前記第一および第二のシンタクス要素の符号化データを結合する結合工程と、を備えることを特徴とする。
【００１１】
さらなる本発明の特徴は、以下本発明を実施するための最良の形態および添付図面によって明らかになるものである。
【発明の効果】
【００１２】
以上のような構成を備える本発明によれば、記憶手段への画像データの書き込みと同時に、第一のシンタクス要素の算出を行うことにより、第二のシンタクス要素の可変長符号化処理を記憶手段からの読み出しと同じサイクルで行うことができるようになる。その結果、複数の依存関係のあるシンタクス要素を高速に可変長符号化することが可能になる。
【発明を実施するための最良の形態】
【００１３】
＜第一の実施形態＞
図１は本発明の第一の実施形態の構成を示した図である。
【００１４】
図１において、本実施形態に係る可変長符号化装置１０１は、記憶手段１０２、第一のシンタクス要素算出手段１０３、第二のシンタクス要素算出手段１０４、第一の符号化手段１０５、第二の符号化手段１０６、可変長符号化データを結合する結合手段１０７を備える。
【００１５】
可変長符号化回路１０１には、縦横４個からなる矩形ブロックの画像データが図２Ａで示すラスタースキャン順に入力される。
【００１６】
記憶手段１０２は、画像データが一時的に保存されるＲＡＭである。なおこのＲＡＭへの読み書きには１サイクルを要するものとする。
【００１７】
第一のシンタクス要素算出手段１０３は、ブロック内の画像データを読み込み、該ブロックのＴｏｔａｌＣｏｅｆｆ、 ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓを算出し、内部に保持しておく回路である。
【００１８】
第二のシンタクス要素算出手段１０４は、記憶手段１０２に保存された画像データを図２Ｂで示す逆ジグザグスキャン順に読み出し、ブロックの各画像データのＬｅｖｅｌおよびＲｕｎを算出する回路である。
【００１９】
第一の符号化手段１０５は、第一のシンタクス要素算出手段１０３で算出されたＴｏｔａｌＣｏｅｆｆ、 ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓを予め定められている可変長符号化テーブルを用いて可変長符号化する回路である。
【００２０】
第二の符号化手段１０６は、第一のシンタクス要素算出手段１０３で算出されたＴｏｔａｌＣｏｅｆｆ、 ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓに基づいて可変長符号化テーブルを選択し、その可変長符号化テーブルを用いて第二のシンタクス要素算出手段１０４で算出された各画像データのＬｅｖｅｌおよびＲｕｎ を可変長符号化する回路である。
【００２１】
結合手段１０７は、第一の符号化手段１０５および第二の符号化手段１０６によって出力された各シンタクス要素の可変長符号を所定のフォーマットに従って、シフトおよびパッキングし、一つの可変長ストリームデータを生成する回路である。
【００２２】
次に、図３で示した画像データを可変長符号化する際のデータの流れについて以下に説明する。
【００２３】
図４は、図１の各回路が行う処理を時間ごとに示したタイムチャートである。
【００２４】
時刻０から、可変長符号化装置１０１に図３のブロック１の画像データが１サイクルに一つずつ入力され、記憶手段１０２に書き込まれる。ブロックは縦横４個の画像データからなるので、ブロック１の全画像データの書き込みには１６サイクルを要する。
【００２５】
画像データは、記憶手段１０２への書き込まれるのと同時に、第一のシンタクス要素算出手段１０３に入力される。第一のシンタクス要素算出手段１０３は、全画像データが入力された直後にブロック１のＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓの値を算出し、出力する。
【００２６】
続いて、時刻１６から時刻３２において、第二のシンタクス要素算出手段１０４は、記憶手段１０２からブロック１の画像データを逆ジグザグスキャン順に１サイクルに一つずつ読み出し、各画像データのＲｕｎおよびＬｅｖｅｌの値を求める。第二のシンタクス要素算出手段１０３は、非ゼロデータが入力された直後にそのデータのＬｅｖｅｌおよびＲｕｎの値を第二の符号化手段１０６に入力する。
【００２７】
また、時刻１６までに算出されたＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓは第一の符号化手段１０５に入力され、予め定められている可変長符号化テーブルを用いて１サイクルで可変長符号化される。また、ＴｒａｉｌｉｎｇＯｎｅの値は、次のブロックの可変長符号化テーブル選択に必要となるので保持しておく。可変長符号化されたデータは結合手段１０７に入力され、時刻３２まで保持される。
【００２８】
さらに、時刻１６から時刻３２において、第二の符号化手段１０６は、第一のシンタクス要素算出手段１０３から入力されるＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓの値にもとづいてＲｕｎおよびＬｅｖｅｌの符号化に必要な可変長符号化テーブルを選択する。そして選択された可変長符号化テーブルを用いて１サイクルで各画像データのＲｕｎ およびＬｅｖｅｌの可変長符号化を行う。Ｒｕｎ の符号化とＬｅｖｅｌの符号化は並行して行なわれるものとする。可変長符号化されたデータは結合手段１０７に入力され、時刻３２まで保持される。
【００２９】
また、これと並行して記憶手段１０２に図３のブロック２の画像データが書き込まれる。さらに、第一のシンタクス要素算出手段は、ブロック２のＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓをブロック１の場合と同様に算出する。
【００３０】
次に、時刻３２から時刻４８の間に、結合手段１０７は、第一の符号化手段１０５および第二の符号化手段１０６から入力された可変長符号を読み出し、結合およびパッキング処理を行い、Ｈ．２６４規格で定められている符号化ストリームを出力する。
【００３１】
また、これと並行して第二のシンタクス要素算出手段１０４は、ブロック２の各画像データのＲｕｎおよびＬｅｖｅｌをブロック１の場合と同様に算出する。また、第一の符号化手段１０５および第二の符号化手段１０６はブロック２の各シンタクス要素の可変長符号化をブロック１の場合と同様に行う。
【００３２】
さらに、これと並行して記憶手段１０２に図３のブロック３の画像データが書き込まれる。また、第一のシンタクス要素算出手段は、ブロック３のＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓをブロック１の場合と同様に算出する。全てのブロックに対して同様の処理を繰り返し、１サイクルあたり１つのデータを処理していく。
【００３３】
続いて、各シンタクス要素の算出方法の詳細を説明する。
【００３４】
初めに第一のシンタクス要素算出手段１０３での、ＴｏｔａｌＣｏｅｆｆの算出動作を図５のフローチャートを用いて説明する。
【００３５】
初めにステップＳ１０１において、変数ＴｏｔａｌＣｏｅｆｆが０に初期化される。次にステップＳ１０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ１０３に進む。
【００３６】
ステップＳ１０３において、画像データの値がゼロであるか否かが判定される。ゼロでない場合には、処理はステップＳ１０４に進み、ＴｏｔａｌＣｏｅｆｆの値を１加算してさらにステップＳ１０５に進む。
【００３７】
ゼロである場合には、処理はステップＳ１０５に進む。ステップＳ１０５において、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータである場合には、処理はステップＳ１０６に進み、現在のＴｏｔａｌＣｏｅｆｆの値を算出結果として出力し、現在のブロックに対する処理を終了する。ブロックの最後のデータでない場合には、処理はステップＳ１０２に戻り、次の画像データを取り込む。
【００３８】
続いて、第一のシンタクス要素算出手段１０３での、ＴｒａｉｌｉｎｇＯｎｅｓの算出動作を図６のフローチャートを用いて説明する。
【００３９】
初めにステップＳ２０１で変数ＴｒａｉｌｉｎｇＯｎｅｓが０に初期化される。また、変数ＬａｓｔＩｎｄｅｘ２および３個の要素からなる配列ＯｎｅＩｎｄｅｘの各要素が１７に初期化する。なお、図６のフローチャートの説明において、ラスタースキャン順に入力される各画像データを逆ジグザグスキャン順の読み出す順番を示す数をインデックスと定義する。例えば、図７のブロック内の画像データ７０１のインデックスは１６、画像データ７０２のインデックスは１０である。
【００４０】
ＬａｓｔＩｎｄｅｘ２は、ブロック内の絶対値２以上の値をもつ画像データのインデックスの最小値を表す変数である。また、配列ＯｎｅＩｎｄｅｘはブロック内の絶対値１の値を持つ画像データのインデックスを小さい順に３つ格納する配列である。
【００４１】
次にステップＳ２０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ２０３に進む。ステップＳ２０３において、画像データの値がゼロであるか否かが判定される。ゼロである場合には、処理はステップＳ２０８に進む。ゼロでない場合には、処理はステップＳ２０４に進み、そこで画像データの絶対値が１であるか否かが判定される。
【００４２】
画像データの絶対値が１でない場合には、処理はステップＳ２０５に進み、ＬａｓｔＩｎｄｅｘ２の値と現在取り込まれている画像データのインデックス値を比較し、小さい値をＬａｓｔＩｎｄｅｘ２に代入する。
【００４３】
ステップＳ２０４において、画像データの絶対値が１である場合には、処理はステップＳ２０６に進み、配列ＯｎｅＩｎｄｅｘ［２］の値と現在取り込まれている画像データのインデックス値を比較し、小さいほうの値をＯｎｅＩｎｄｅｘ［２］に代入し、その後処理はステップＳ２０７に進む。
【００４４】
ステップＳ２０７において、ＯｎｅＩｎｄｅｘ［０］、 ＯｎｅＩｎｄｅｘ［１］、 ＯｎｅＩｎｄｅｘ［２］の値を比較し、最小値がＯｎｅＩｎｄｅｘ［０］、 最大値がＯｎｅＩｎｄｅｘ［２］になるように、配列の値が並び替えられる。
【００４５】
ステップＳ２０８において、現在の画像データがブロックの最後のデータか否かを判別する。ブロックの最後のデータでない場合にはステップＳ２０２に戻り、次の画像データを取り込む。ブロックの最後のデータである場合にはステップＳ２０９に進む。ステップＳ２０９においてＬａｓｔＩｎｄｅｘ２の値とＯｎｅＩｎｄｅｘ［２］が比較される。ＯｎｅＩｎｄｅｘ［２］の方が小さい場合にはステップＳ２１０に進みＴｒａｉｌｉｎｇＯｎｅｓに１加算する。ＬａｓｔＩｎｄｅｘ２の方が小さい場合または値が等しい場合には処理はステップＳ２１１に進む。
【００４６】
続いて、ステップＳ２１１において、ＬａｓｔＩｎｄｅｘ２の値とＯｎｅＩｎｄｅｘ［１］が比較される。ＯｎｅＩｎｄｅｘ［１］の方が小さい場合にはステップＳ２１２に進みＴｒａｉｌｉｎｇＯｎｅｓに１加算する。ＬａｓｔＩｎｄｅｘ２の方が小さい場合または値が等しい場合には、処理はステップＳ２１３に進む。
【００４７】
続いてステップＳ２１３において、ＬａｓｔＩｎｄｅｘ２の値とＯｎｅＩｎｄｅｘ［０］が比較される。ＯｎｅＩｎｄｅｘ［０］の方が小さい場合には、処理はステップＳ２１４に進み、ＴｒａｉｌｉｎｇＯｎｅｓに１加算する。ＬａｓｔＩｎｄｅｘ２の方が小さい場合または値が等しい場合には、処理はステップＳ２１５に進む。
【００４８】
最後に、ステップＳ２１５において、現在のＴｒａｉｌｉｎｇＯｎｅｓの値が算出結果として出力され、現在のブロックに対する処理が完了する。
【００４９】
次に第一のシンタクス要素算出手段１０３での、ＴｏｔａｌＺｅｒｏｓの算出動作を図８のフローチャートを用いて説明する。
【００５０】
初めに、ステップ３０１で変数ＴｏｔａｌＺｅｒｏｓが０に初期化される。また、変数ＬａｓｔＩｎｄｅｘが１７に初期化される。なお、ＬａｓｔＩｎｄｅｘはブロック内の絶対値１以上の値をもつ画像データのインデックスの最小値を表す変数である。
【００５１】
次に、ステップＳ３０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ３０３に進む。ステップＳ３０３において、画像データの値がゼロであるか否かが判定される。ゼロである場合には、処理はステップＳ３０４に進み、ＴｏｔａｌＺｅｒｏｓに１加算する。ゼロでない場合には、処理はステップＳ３０５に進む。
【００５２】
ステップＳ３０５において、ＬａｓｔＩｎｄｅｘの値と現在取り込まれている画像データのインデックス値が比較され、小さい値をＬａｓｔＩｎｄｅｘに代入してステップＳ３０６に進む。
【００５３】
ステップＳ３０６にて、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータである場合には、処理はステップＳ３０７に進み、ＴｏｔａｌＺｅｒｏｓから、ＬａｓｔＩｎｄｅｘ−１の値を減算する。
【００５４】
続いて、処理はステップＳ３０８に進み、現在のＴｏｔａｌＺｅｒｏｓの値が算出結果として出力され、現在のブロックに対する処理が終了する。ステップＳ３０５において、ブロックの最後のデータでないと判断された場合には、処理はステップＳ３０２に戻り、次の画像データが取り込まれる。
【００５５】
上述した方法により、第一のシンタクス要素算出手段１０３は、記憶手段１０２にブロック内の最後の画像データ入力の直後に、ＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓの値を算出することが可能となる。
【００５６】
次に、第二のシンタクス要素算出手段１０４での、Ｒｕｎの算出動作を図９のフローチャートを用いて説明する。
【００５７】
初めにステップＳ４０１において、変数Ｒｕｎ、ＦｉｒｓｔＮｏｎＺｅｒｏＦｌａｇが０に初期化される。なお、ＦｉｒｓｔＮｏｎＺｅｒｏＦｌａｇはブロック内のゼロでない画像データが一つでも入力されると１になり、まだ入力されていないときは０になるフラグである。
【００５８】
次にステップＳ４０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ４０３に進む。ステップＳ４０３において、画像データの値がゼロであるか否かが判定される。ゼロでない場合には、処理はステップＳ４０４に進み、そこでＦｉｒｓｔＮｏｎＺｅｒｏＦｌａｇの値がゼロであるか否かが判定される。ゼロでない場合には、処理はステップＳ４０５に進み、現在のＲｕｎの値を出力し、さらにステップＳ４０８に進む。ステップＳ４０３においてゼロであると判断された場合には、処理はステップＳ４０６に進む。ステップＳ４０６において、ＦｉｒｓｔＮｏｎＺｅｒｏＦｌａｇが１にセットされ、さらに処理はステップＳ４０８に進む。
【００５９】
ステップＳ４０８では、Ｒｕｎにゼロが代入され、ステップＳ４０９に進む。なお、ステップＳ４０３において、画像データの値がゼロである場合にはステップＳ４０７に進み、Ｒｕｎに１を加算してステップＳ４０９に進む。
【００６０】
ステップＳ４０９において、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータである場合には現在のブロックに対する処理を終了する。ブロックの最後のデータでない場合にはステップＳ４０２に戻り、次の画像データを取り込む。
【００６１】
次に、第二のシンタクス要素算出手段１０４での、Ｌｅｖｅｌの算出動作を図１０のフローチャートを用いて説明する。
【００６２】
ステップＳ５０１において、ブロック内の次の画像データが取り込まれ、処理はステップＳ５０２に進む。ステップＳ５０２において、画像データの値がゼロであるか否かが判定される。ゼロである場合には、処理はステップＳ５０４に進み、ゼロでない場合にはステップＳ５０３に進む。ステップＳ５０３では現在入力されているデータの値がＬｅｖｅｌとして出力され、処理はステップＳ５０４に進む。
【００６３】
ステップＳ５０４では、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータである場合には現在のブロックに対する処理が終了する。ブロックの最後のデータでない場合には、処理はステップＳ５０１に戻り、次の画像データが取り込まれる。
【００６４】
以上説明してきたように、本発明の第一の実施形態によれば、第二のシンタクス要素算出手段１０４は記憶手段１０２からブロック内の画像データ読み出しと同時にＲｕｎおよびＬｅｖｅｌの値を算出することが可能となる。
【００６５】
第二の符号化手段１０６は、第一のシンタクス要素算出手段１０３で算出された第一のシンタクス要素をもとに、予め定められた複数の可変長符号化テーブルの中から一つの可変長符号化テーブルを選択しＲｕｎおよびＬｅｖｅｌの可変長符号化を行う。予めＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓの値が算出されているので、第二のシンタクス要素算出手段１０４によりブロック内の各画像データが読み出された直後にＲｕｎ Ｌｅｖｅｌの可変長符号化を行うことができる。
【００６６】
また、これと並行して第一の符号化手段１０５により、ＴｏｔａｌＣｏｅｆｆ、  ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓを可変長符号化することにより、全てのシンタクス要素の可変長符号を記憶手段１０２からブロック内の画像データ読み出しが終了したのと同じクロックサイクルを得ることができる。
【００６７】
＜第二の実施形態＞
続いて、本発明の第二の実施形態について説明する。
【００６８】
第二の実施形態と第一の実施形態との異なる点は次の通りである。第一の実施形態では、第一のシンタクス要素算出手段は記憶手段に入力される画像データから直接、第一のシンタクス要素の値を算出する。これに対し、第二の実施形態では、画像データから付加情報の値を算出し、第一のシンタクス要素算出手段は前記付加情報と、記憶手段から読み出されるデータを用いて第一のシンタクス要素の値を算出する。
【００６９】
図１１は、本発明の第二の実施形態の構成を示した図である。図１１において本発明にかかわる可変長符号化装置１１０１は記憶手段１１０２、第一のシンタクス要素算出手段１１０３、第二のシンタクス要素算出手段１１０４、第一の符号化手段１１０５、第二の符号化手段１１０６、可変長符号化データを結合する結合手段１１０７を備える。なお、可変長符号化回路１１０１、記憶手段１１０２、第二のシンタックス要素算出手段１１０４、第一の符号化手段１１０５、第二の符号化手段１１０６、結合手段１１０７の説明は第一の実施形態と同じであるため省略する。
【００７０】
第一のシンタクス要素算出手段１１０３は、記憶手段１１０２に画像データが入力されると同時に、第一のシンタクス要素の値の算出に必要な付加情報を算出する。そしてその後に記憶手段１１０２から画像データを読み出す際に前記付加情報を用いて第一のシンタクス要素の値を算出する。
【００７１】
第一のシンタクス要素算出手段１１０３の内部の構成を図１２に示す。第一のシンタクス要素算出手段は、内部に付加情報算出手段１２０１および第一のシンタクス要素合成手段１２０２を持つ。
【００７２】
付加情報算出手段１２０１は、可変長符号化回路１１０１にラスタースキャン順に入力されるブロック内の各画像データから付加情報としてゼロデータの個数および非ゼロデータの個数を算出する回路である。
【００７３】
第一のシンタクス要素合成手段１２０２は、記憶手段１１０２から逆ジグザグスキャン順に読み出されるデータおよび付加情報算出手段１２０１で算出された付加情報からシンタクス要素のうち、第二のシンタクス要素の符号化に必要とされるＴｏｔａｌＣｏｅｆｆ、 ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓの値を算出する回路である。
【００７４】
次に図３で示した画像データを可変長符号化する際のデータの流れについて以下に説明する。
【００７５】
図１３は、図１１の各回路が行う処理を時間ごとに示したタイムチャートである。時刻０から、可変長符号化装置１１０１に図３のブロック１の画像データが１サイクルに一つずつ入力され、記憶手段１１０２に書き込まれる。ブロックは、縦横４個の画像データからなるので、ブロック１の全てのデータの書き込みには１６サイクルを要する。
【００７６】
記憶手段１１０２への書き込みと同時に、画像データは付加情報算出手段１２０１に入力され、付加情報としてブロック１のゼロデータの個数および非ゼロデータの個数が算出される。付加情報算出手段１２０１は全ての画像データが入力された直後に算出結果を出力する。
【００７７】
続いて時刻１６から時刻３２において、第一のシンタクス要素合成手段１２０２は、記憶手段１１０２からブロック１の画像データを逆ジグザグスキャン順に１サイクルに一つずつ読み出す。そして、付加情報算出手段１２０１で算出された付加情報および読み出された画像データをもとにブロック１の第一のシンタクス要素として、ＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓを求める。
【００７８】
第一のシンタクス要素合成手段１２０２は最初の絶対値が２以上のデータが読み出された時点あるいは、絶対値が１のデータが３つ読み出された時点でブロック１の第一のシンタクス要素の合成を完了する。例えば図７のようなデータが入力された場合には時刻２７に−５が入力された時点で第一のシンタクス要素を算出することができる。
【００７９】
また、第二のシンタクス要素算出手段１１０４は記憶手段１１０２からブロック１の画像データを逆ジグザグスキャン順に１サイクルに一つずつ読み出し、各画像データのＲｕｎ およびＬｅｖｅｌ値を求める。第二のシンタクス要素算出手段１１０４は非ゼロデータが入力された直後に、そのデータのＬｅｖｅｌおよびＲｕｎの値を第二の符号化手段１１０６に入力する。
【００８０】
また、時刻２７までに算出されたＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓは第一の符号化手段１１０５に入力され、予め定められている可変長符号化テーブルを用いて１サイクルで可変長符号化される。また、ＴｒａｉｌｉｎｇＯｎｅｓの値は次のブロックの可変長符号化テーブルの選択に必要になるので保持しておく。可変長符号化されたデータは結合手段１１０７に入力され、時刻３２まで保持される。
【００８１】
さらに、時刻２７から時刻３２において、第二の符号化手段２０６は、第一のシンタクス要素合成手段１２０２から入力されるＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓの値にもとづいてＲｕｎ およびＬｅｖｅｌの符号化に必要な可変長符号化テーブルを選択する。そして、選択された可変長符号化テーブルを用いて各画像データのＲｕｎ およびＬｅｖｅｌの可変長符号化を行う。第二の符号化手段１１０６はＲｕｎおよびＬｅｖｅｌの符号化を並行して行うものとする。可変長符号化されたデータは結合手段１１０７に入力され、時刻３２まで保持される。
【００８２】
また、これと並行して記憶手段１１０２に図３のブロック２の画像データが書き込まれる。また、付加情報算出手段１２０１は、ブロック２のゼロデータの個数およびゼロでないデータの個数をブロック１の場合と同様に算出する。
【００８３】
次に、時刻３２から時刻４８の間に、結合手段１１０７で第一の符号化手段１１０５および第二の符号化手段１１０６から入力された可変長符号を読み出し結合およびパッキング処理を行い符号化ストリームを出力する。
【００８４】
また、これと並行して第一のシンタクス要素合成手段１２０２はブロック２のＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓおよびＴｏｔａｌＺｅｒｏｓの値をブロック１の場合と同様に算出する。
【００８５】
さらに、第二のシンタクス要素算出手段１１０４はブロック２の各データのＲｕｎおよびＬｅｖｅｌ値をブロック１の場合と同様に算出する。また、第一の符号化手段１１０５および第二の符号化手段１１０６はブロック２の各シンタクス要素の可変長符号化をブロック１の場合と同様に行う。
【００８６】
また、これと並行して記憶手段１１０２にさらに図３のブロック３の画像データが書き込まれる。付加情報算出手段１２０１は、ブロック２のゼロデータの個数およびゼロでないデータの個数をブロック１の場合と同様に算出する。全てのブロックに対して同様の処理を繰り返し、１サイクルあたり１つのデータを処理していく。
【００８７】
続いて、付加情報算出手段１２０１での付加情報の算出方法について、図１４を用いて説明する。
【００８８】
初めにステップＳ６０１において、変数ＮｏｎＺｅｒｏＣｏｅｆｆおよびＺｅｒｏＣｏｅｆｆが０に初期化される。なお、ＮｏｎＺｅｒｏＣｏｅｆｆはブロック内の非ゼロデータの個数を表す変数、ＺｅｒｏＣｏｅｆｆはブロック内のゼロデータの個数を表す変数である。
【００８９】
次に、ステップＳ６０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ６０３に進む。ステップＳ６０３において、画像データの値がゼロであるか否かが判定される。ゼロでない場合には、処理はステップＳ６０４に進み、ＮｏｎＺｅｒｏＣｏｅｆｆの値を１加算してステップＳ６０６に進む。ゼロである場合には、処理はステップＳ６０５に進み、ＺｅｒｏＣｏｅｆｆの値を１加算してステップＳ６０６に進む。
【００９０】
ステップＳ６０６において、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータである場合には、処理はステップＳ６０７に進み、現在のＮｏｎＺｅｒｏＣｏｅｆｆ、ＺｅｒｏＣｏｅｆｆの値が算出結果として出力され、現在のブロックに対する処理が終了する。ブロックの最後のデータでない場合には処理はステップＳ６０２に戻り、次の画像データが取り込まれる。なお、本実施形態では、値がゼロであるデータと、非ゼロデータの両方を計数してＮｏｎＺｅｒｏＣｏｅｆｆ、ＺｅｒｏＣｏｅｆｆの値を求めたが、どちらか一方を計数し、他方はブロックの画像データの個数から減算して算出してもよい。
【００９１】
続いて、第一のシンタクス要素合成手段１２０２における、第一のシンタクス要素の値の合成方法について説明する。
【００９２】
まず、ＴｏｔａｌＣｏｅｆｆの値については、付加情報算出手段で算出されたＮｏｎＺｅｒｏＣｏｅｆｆと同じであるので、ＮｏｎＺｅｒｏＣｏｅｆｆの値をそのまま出力する。
【００９３】
続いて、ＴｒａｉｌｉｎｇＯｎｅｓの算出動作を図１５のフローチャートを用いて説明する。
【００９４】
初めに、ステップＳ７０１において、変数ＴｒａｉｌｉｎｇＯｎｅｓが０に初期化される。
【００９５】
次にステップＳ７０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ７０３に進む。ステップＳ７０３において、画像データの値がゼロであるか否かが判定される。ゼロである場合には、処理はステップＳ７０７に進み、ゼロでない場合にはステップＳ７０４に進む。そして、ステップＳ７０４において、画像データの絶対値が１であるか否かが判定される。
【００９６】
ステップＳ７０４において、画像データの絶対値が１でないと判断された場合には、処理はステップＳ７０８に進み、現在のＴｒａｉｌｉｎｇＯｎｅｓの値を出力して終了する。
【００９７】
ステップＳ７０４において画像データの絶対値が１であると判断された場合には、処理はステップＳ７０５に進み、ＴｒａｉｌｉｎｇＯｎｅｓに１を加算して、さらにステップＳ７０６に進む。ステップＳ７０６においてＴｒａｉｌｉｎｇＯｎｅｓの値が３の場合にはステップＳ７０８に進み、現在のＴｒａｉｌｉｎｇＯｎｅｓの値を出力して終了する。一方、ＴｒａｉｌｉｎｇＯｎｅｓの値が２以下の場合にはステップＳ７０７に進む。
【００９８】
ステップＳ７０７において、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータでない場合には、処理はステップＳ７０２に戻り、次の画像データが取り込まれる。ブロックの最後のデータである場合には、処理はステップＳ７０８に進み、現在のＴｒａｉｌｉｎｇＯｎｅｓの値が出力され、終了する。
【００９９】
次に、ＴｏｔａｌＺｅｒｏｓの算出動作について図１６のフローチャートを用いて説明する。
【０１００】
初めにステップＳ８０１において、変数ＴｏｔａｌＺｅｒｏｓに付加情報算出手段１６０１で算出されたＺｅｒｏＣｏｅｆｆを代入する。
【０１０１】
次に、ステップＳ８０２において、ブロック内の次の画像データが取り込まれ、処理はステップＳ８０３に進む。
【０１０２】
ステップＳ８０３において、画像データの値がゼロであるか否かが判定される。ゼロである場合には、処理はステップＳ８０４に進み、ＴｏｔａｌＺｅｒｏｓの値を１減算してさらにステップＳ８０５に進む。
【０１０３】
ステップＳ８０３で画像データがゼロでないと判断された場合には、処理はステップＳ８０６に進み、現在のＴｏｔａｌＺｅｒｏｓの値が出力され、終了する。
【０１０４】
ステップＳ８０５において、現在の画像データがブロックの最後のデータか否かが判別される。ブロックの最後のデータである場合には、処理はステップＳ８０６に進み、現在のＴｏｔａｌＺｅｒｏｓの値を算出結果として出力し、現在のブロックに対する処理を終了する。ブロックの最後のデータでない場合には、処理はステップＳ８０２に戻り、次の画像データが取り込まれる。
【０１０５】
上述してきた方法により、第一のシンタクス要素合成手段はＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓの値を、絶対値が２以上のデータ、あるいは３番目の絶対値が１のデータが読み出された時点で算出することが可能になる。
【０１０６】
第二のシンタクス要素算出手段１１０４での処理は、第一の実施形態と同じであるため説明を省略する。なお、第二のシンタクス要素算出手段１１０４では、ＲｕｎおよびＬｅｖｅｌを、非ゼロデータが読み出された時点で算出することが可能である。
【０１０７】
以上説明してきたように、本発明の第二の実施形態によれば、第二の符号化手段２０６は第一のシンタクス要素算出手段２０３で算出されたシンタクス要素を用いて、予め可変長符号化テーブルを選択しＲｕｎおよびＬｅｖｅｌの可変長符号化を行う。ＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、 ＴｏｔａｌＺｅｒｏｓの値が確定するまでは可変長符号化を開始できないが、絶対値が２以上のデータあるいは３番目の絶対値が１のデータが読み出されるのに時間がかかる場合にはＲｕｎおよびＬｅｖｅｌの個数が少なくなるので、全体としてはブロック内の最後のデータが読み出されるときと同じクロックサイクルで可変長符号化を終えることができる。
【０１０８】
これと並行して、第一の符号化手段１１０５により、ＴｏｔａｌＣｏｅｆｆ、ＴｒａｉｌｉｎｇＯｎｅｓ、ＴｏｔａｌＺｅｒｏｓを可変長符号化することにより、全てのシンタクス要素の可変長符号を記憶手段１１０２からブロック内の画像データ読み出しが終了したのと同じクロックサイクルに得ることができる。
【０１０９】
また、逆ジグザグスキャン順の画像データからのほうが第一のシンタックス要素の値が算出しやすい場合には、第一の実施形態よりも第一のシンタックス要素算出手段の回路規模を小さくすることができる。
【０１１０】
なお、本発明の第一の実施形態および第二の実施形態では、毎サイクルに入力される画像データの個数は１つとしたが、符号化処理を並列化することにより、複数の画像データが毎サイクルに入力される場合にも本発明を適用することができる。
【０１１１】
また、本発明の第一の実施形態および第二の実施形態ではＨ．２６４のＣＡＶＬＣ方式の例を説明したが、本発明はＣＡＶＬＣ方式以外にも、依存関係のある複数のシンタクス要素の符号化に適用することも可能である。
【０１１２】
＜その他の実施形態＞
本発明では、実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行することによっても達成される。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フロッピィ（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【０１１３】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれている。
【０１１４】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書きこまれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含む。
【０１１５】
また、上記実施の形態の機能を実現するソフトウェアのプログラムコードがネットワークを介して配信されることにより、システム又は装置のハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納され、そのシステム又は装置のコンピュータ（又はＣＰＵやＭＰＵ）が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行することによっても、達成されることは云うまでもない。
【図面の簡単な説明】
【０１１６】
【図１】第一の実施形態に係る可変長符号化装置の構成を示す図である。
【図２】画像データの読み出し順序を示す図である。
【図３】画像データの一例を示す図である。
【図４】第一の実施形態における各回路の動作を示すタイムチャートである。
【図５】ＴｏｔａｌＣｏｅｆｆの算出方法を示すフローチャートである。
【図６】ＴｒａｉｌｉｎｇＯｎｅｓの算出方法を示すフローチャートである。
【図７】画像データのブロックの一例を示す図である。
【図８】ＴｏｔａｌＺｅｒｏｓの算出方法を示すフローチャートである。
【図９】Ｒｕｎの算出方法を示すフローチャートである。
【図１０】Ｌｅｖｅｌの算出方法を示すフローチャートである。
【図１１】第二の実施形態に係る可変長符号化装置の構成を示す図である。
【図１２】第二の実施形態に係る可変長符号化装置における第一のシンタクス要素算出手段の内部構成を示す図である。
【図１３】本発明の第二の実施形態における各回路の動作を示すタイムチャートである。
【図１４】付加情報の算出方法を示すフローチャートである。
【図１５】ＴｒａｉｌｉｎｇＯｎｅｓの算出方法を示すフローチャートである。
【図１６】ＴｏｔａｌＺｅｒｏｓの算出方法を示すフローチャートである。
【図１】
2006140969.tif 000003
【図２】
2006140969.tif 000004
【図３】
2006140969.tif 000005
【図４】
2006140969.tif 000006
【図５】
2006140969.tif 000007
【図６】
2006140969.tif 000008
【図７】
2006140969.tif 000009
【図８】
2006140969.tif 000010
【図９】
2006140969.tif 000011
【図１０】
2006140969.tif 000012
【図１１】
2006140969.tif 000013
【図１２】
2006140969.tif 000014
【図１３】
2006140969.tif 000015
【図１４】
2006140969.tif 000016
【図１５】
2006140969.tif 000017
【図１６】
2006140969.tif 000018