(57)【要約】【課題】デコードする際に並列化して処理速度を向上させ、しかも回路規模の増大を防げる画像復号装置及び画像復号方法を提供することである。【解決手段】入力側バッファ１０３はゼロ係数を含まない非ゼロ係数列を格納する。パラメータの生成手段はゼロ係数挿入位置を示す、所定の処理単位毎に複数に分割した複数のパラメータを生成する。出力側バッファ１０６はゼロ係数を含む係数列を格納する。複数のテーブル１０８ａ及び１０８ｂは複数の処理単位毎に設けられ、複数のパラメータに対応して、出力側バッファにおけるゼロ係数及び非ゼロ係数の位置と非ゼロ係数の個数を出力する。複数の係数選択回路１０５ａ及び１０５ｂは複数の処理単位毎に設けられ、複数のテーブルの出力にて、再現される係数列のゼロ係数及び非ゼロ係数のインデックスを決定し出力側バッファへ非ゼロ係数を転送し出力側バッファへゼロ係数を書き込む。【選択図】図１
2010004284.tif 000002
【特許請求の範囲】
【請求項１】
所定の動画フォーマットのゼロ係数を含まない非ゼロ係数列を入力し、デコードして、ゼロ係数を含めた元の係数列を再現する画像復号装置であって、
インデックスが決定される前の前記非ゼロ係数列を格納する入力側バッファと、
前記非ゼロ係数列の間にゼロ係数を挿入する位置を示すパラメータの生成手段であって、所定の処理単位ごとに複数に分割して用いられる複数のパラメータを生成する手段と、
インデックスが決定されたゼロ係数を含む係数列を格納する出力側バッファと、
分割した前記複数の処理単位毎に設けられ、分割した前記複数のパラメータによる複数の入力に対応して、前記出力側バッファにおけるゼロ係数及び非ゼロ係数の位置と非ゼロ係数の個数を出力することが可能な複数のテーブルと、
分割した前記複数の処理単位毎に設けられ、前記複数のテーブルの出力に応じて、再現される係数列のゼロ係数及び非ゼロ係数のインデックスを決定し、前記入力側バッファから前記出力側バッファへ非ゼロ係数を転送し、前記出力側バッファへゼロ係数を書き込む複数の係数選択回路と、を具備し、
ゼロ係数を含めた再現される係数列に対するインデックスを同時に決定することを特徴とする画像復号装置。
【請求項２】
前記パラメータを入力として、前記処理単位中に非ゼロ係数が１つも含まれない場合を判定して判定信号として出力するバイパス選択回路と、
前記判定信号が非ゼロ係数が無い場合を示した場合に前記出力側バッファへ前記処理単位の係数列をゼロとして出力するゼロ選択回路と、
を更に具備したことを特徴とする請求項１に記載の画像復号装置。
【請求項３】
前記パラメータは、非ゼロ係数の有無を示す第１のフラグと、最終非ゼロ係数であることを示す第２のフラグとを用いて生成される、第２のフラグを反映させた第１のフラグであることを特徴とする請求項１又は２に記載の画像復号装置。
【請求項４】
前記複数のテーブルが上位ビット側の第１の係数選択テーブルと下位ビット側の第２の係数選択テーブルで構成され、前記複数の係数選択回路が上位ビット側の第１の係数選択回路と下位ビット側の第２の係数選択回路で構成される場合、前記第１の係数選択回路では前記第２の係数選択テーブルによりテーブル引きされた非ゼロ係数の値分だけ、読み込む入力側バッファの格納位置をずらすことを特徴とする請求項１乃至３のいずれか１つに記載の画像復号装置。
【請求項５】
所定の動画フォーマットのゼロ係数を含まない非ゼロ係数列を入力し、デコードして、ゼロ係数を含めた元の係数列を再現する画像復号方法であって、
前記非ゼロ係数列の間にゼロ係数を挿入する位置を示すパラメータを所定の処理単位に分割し、
この分割した複数の処理単位毎に設けられた複数のテーブルに対して、前記非ゼロ係数列が格納された入力側バッファの非ゼロ係数列の格納位置と、再現される係数列に対応するインデックス決定後の出力側バッファの係数列の格納位置とをテーブル参照し、
ゼロ係数を含めた再現される係数列に対応するインデックスを同時に算出することを特徴とする画像復号方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像復号装置及び画像復号方法に係り、特に動画フォーマットＨ．２６４におけるＣＡＢＡＣ符号化されたデータを復号する画像復号装置及び画像復号方法に関する。
【背景技術】
【０００２】
オーディオ・ビジュアル（ＡＶ）・マルチメディア・システムの分野において、高度動画像圧縮符号化標準（ＡＶＣ：Advanced Video Coding）は、Ｈ．２６４／ＡＶＣと呼ばれている。
【０００３】
Ｈ．２６４／ＡＶＣでは、離散コサイン変換（ＤＣＴ：Discrete Cosine Transform）係数や動きベクトルなど、シンタックスで伝送することが規定されている情報である、シンタックス要素のエントロピー符号化（可変長符号化）方式として、単純な表による変換の他に高効率な符号化方式が用意されており、高い符号化効率が必要とされるＤＣＴ係数の符号化時などに適用される。
【０００４】
このような高効率な符号化方式として、コンテキスト適応型２値算術符号化方式（ＣＡＢＡＣ：Context Adaptive Binary Arithmetic Coding）と呼ばれる方式がある。
【０００５】
ＣＡＢＡＣ方式の符号化装置は、通常の２値算術符号化器と、多値信号（例えば、−３或いは＋６などの信号）を２値信号（０と１の信号）に変換するための２値化部と、符号化すべき２値信号の発生確率を周囲の状況に応じて計算・更新するコンテキスト計算部を備えている。２値化部は、入力された多値シンタックス要素を可変長の２値シンボル列に変換するものである。ＣＡＢＡＣ符号化装置では、２値化シンボルの１ビットごとに、コンテキスト情報に基づいて適応的に確率モデルを切り替えながら算術符号化を行う。
【０００６】
本願明細書においては、動画フォーマットＨ．２６４上での残差ブロックＣＡＢＡＣ(residual_block_cabac)符号化されたシンタックス要素の画素データ係数列をデコードする際に適用されるＣＡＢＡＣデコーダについて説明する。
【０００７】
動画フォーマットＨ．２６４において、シンタックス要素coeff_abs_level_minus1[]、coeff_sign_flag[]（[]内には係数列の各係数に対応する番号を示すインデックス(Index)が、０以上の整数で入る）から求めたcoeffLevel(係数列の各係数)のIndex(coeffLevelの各係数に対応した番号を示す指標)をデコードする際、そのIndexはsignificant_coeff_flag[]、last_significant_coeff_flag[]により決定される。規格書に記載されている順序/方法でcoeffLevelに対するIndexのデコードを行うと、あるcoeffLevelのIndexを決定した後に次のcoeffLevelのIndexを決定することとなる。つまり、１つのcoeffLevelのIndexを決定してから次のcoeffLevelのIndexを決定する処理に移る。
【０００８】
その結果、マクロブロック(MB)内に係数が少ない場合はデコード処理が早く終わるが、係数が多く存在する場合、その分デコード処理に時間がかかり、ワーストケースでは係数の数(384係数)サイクル+レイテンシの時間を要する。
【０００９】
ところで、このように係数列をデコードする際に、順次にIndexのデコードを行うと、significant_coeff_flag[]、last_significant_coeff_flag[]を１シンボルずつ処理するので、処理サイクル数が多くなり、処理時間が膨大なるという問題がある。
【００１０】
この問題を解消する方法として、本出願人はsignificant_coeff_flag[]、last_significant_coeff_flag[]を参照テーブルから同時引き(並列化)することによってデコード処理を高速化させるという提案をしている(例えば、特許文献１参照)。
【００１１】
しかしながら、特許文献１では処理速度を向上できるが、並列化するときに参照テーブルが大きくなるという問題がある。
【特許文献１】特開２００６−１６６３４４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１２】
そこで、本発明は上記の問題に鑑み、デコードする際に並列化処理を用いて処理速度を向上させることができ、しかも回路規模の増大を防ぐことができる画像復号装置及び画像復号方法を提供することを目的とするものである。
【課題を解決するための手段】
【００１３】
本願発明の一態様によれば、所定の動画フォーマットのゼロ係数を含まない非ゼロ係数列を入力し、デコードして、ゼロ係数を含めた元の係数列を再現する画像復号装置であって、インデックスが決定される前の前記非ゼロ係数列を格納する入力側バッファと、前記非ゼロ係数列の間にゼロ係数を挿入する位置を示すパラメータの生成手段であって、所定の処理単位ごとに複数に分割して用いられる複数のパラメータを生成する手段と、インデックスが決定されたゼロ係数を含む係数列を格納する出力側バッファと、分割した前記複数の処理単位毎に設けられ、分割した前記複数のパラメータによる複数の入力に対応して、前記出力側バッファにおけるゼロ係数及び非ゼロ係数の位置と非ゼロ係数の個数を出力することが可能な複数のテーブルと、分割した前記複数の処理単位毎に設けられ、前記複数のテーブルの出力に応じて、再現される係数列のゼロ係数及び非ゼロ係数のインデックスを決定し、前記入力側バッファから前記出力側バッファへ非ゼロ係数を転送し、前記出力側バッファへゼロ係数を書き込む複数の係数選択回路と、を具備し、ゼロ係数を含めた再現される係数列に対するインデックスを同時に決定することを特徴とする画像復号装置が提供される。
【００１４】
本願発明の他の態様によれば、所定の動画フォーマットのゼロ係数を含まない非ゼロ係数列を入力し、デコードして、ゼロ係数を含めた元の係数列を再現する画像復号方法であって、前記非ゼロ係数列の間にゼロ係数を挿入する位置を示すパラメータを所定の処理単位に分割し、この分割した複数の処理単位毎に設けられた複数のテーブルに対して、前記非ゼロ係数列が格納された入力側バッファの非ゼロ係数列の格納位置と、再現される係数列に対応するインデックス決定後の出力側バッファの係数列の格納位置とをテーブル参照し、ゼロ係数を含めた再現される係数列に対応するインデックスを同時に算出することを特徴とする画像復号方法が提供される。
【発明の効果】
【００１５】
本発明によれば、デコードする際に並列化処理を用いて処理速度を向上させることができ、しかも回路規模の増大を防ぐことができる画像復号装置及び画像復号方法を提供できる。
【発明を実施するための最良の形態】
【００１６】
発明の実施の形態について図面を参照して説明する。  
本発明の実施形態を図１乃至図６を参照して説明する前に、図７及び図８を参照して本発明の関連技術を説明する。
【００１７】
図７に示す画像復号装置１００は、外部より送信されてくる非ゼロの画素データ係数列(ビットストリーム)を入力し、入力パラメータ(coeff_abs_level_minus1、coeff_sign_flag、numCoeff、significant_coeff_flag、last_significant_coeff_flagおよびmaxNumCoeff)を作成するシンタックスデコーダ１０１と、対応するシンタックス(syntax)からインデックス(index)が決定される前の係数列の係数(level)をデコードするlevelデコード回路１０２と、デコードされたlevelを格納するlevelバッファ１０３と、last_significant_coeff_flagをsignificant_coeff_flagへ反映させlevelの有無(非ゼロ，ゼロ)をデコードするlast_significant_coeff_flag回路１０４と、係数毎にIndexを決定する選択回路１０５と、Indexが決定されたlevelを格納するcoeffバッファ１０６と、ジグザクスキャン(ZigZagScan)処理を行うジグザクスキャン回路１０７とを備えている。
【００１８】
図８は図７の関連技術のデコード方法を説明する模式図であって、（ａ）はＣＡＢＡＣデコード後の２値係数列を示す図、（ｂ）は係数列パラメータＡ，Ｂ，Ｃ，Ｄの説明図、（ｃ）はデコード方法の処理フロー図を示している。
【００１９】
このような構成において、シンタックスデコーダ１０１には、図示しない送信側(画像符号装置側)よりゼロ(０)係数を除いた非ゼロ係数のみの係数列のビットストリーム（bitstream）データが送信される。このような非ゼロ係数のみのストリームとなっているのは、ゼロ係数を除いた非ゼロ係数のみを集めて圧縮した方が伝送効率がよいためである。送信されてきたデータはビットストリーム格納部１０に格納される。ＣＡＢＡＣデコーダ１１では、図８(a)のような２値係数列がデコードされる。ＣＡＢＡＣデコード後の２値係数列は２値係数列格納部１２に格納される。
【００２０】
図８(b)は係数列パラメータＡ，Ｂ，Ｃ，Ｄの定義を表しており、Ａは非ゼロ係数であれば“１”と表示される値であることを意味する。Ｂは最後の非ゼロ係数であれば“１”と表示される値であることを意味する。Ｃは係数の絶対値マイナス１の値が表示されることを意味する。Ｄは係数の符号として“０”でプラスを表示し、“１”でマイナスを表示することを意味する。
【００２１】
非ゼロ係数のビットストリームをＣＡＢＡＣデコーダ１１でデコードすると、Ｃ列の部分が数値になる。Ｃ列には数値から１引いた値が入っていて、これと組み合わせてＤ列に符号が入っている。＋か−かの符号である。Ｄ列で１ならば−、０ならば＋ということになる。Ｃ列の上から２番目をみると、“７”となっている。Ｃ列には、係数の絶対値−１が入っているので、本当の係数値は＋１して“８”である。しかもＤ列の同じ上から２番目が“１”なので、“−８”という値になる。同様にして、Ｃ列，Ｄ列の１番目は“９”，“０”なので“＋１０”になる。
【００２２】
ここでは、Ｃ列，Ｄ列は既にデコードされた係数値があるとします。問題とするのは、Ａ列とＢ列を組み合わせて如何に、Ｃ列，Ｄ列をデコードしたゼロ係数を含まない非ゼロ係数列の間にゼロ係数を挟むかという点である。Ａ列，Ｂ列のパラメータによって非ゼロ係数列の何処にゼロ係数を挟んだよいのか、言い換えるとゼロ係数列の何処に非ゼロ係数を配置したらよいのかが分かるようになっている。
【００２３】
アルファベッドで書かれた用語の意味を説明する。  
maxNumCoeff…処理を行うblock内にあるデコードされる残差(係数)の最大個数。ここで はcoded_block_flagの存在と、係数のゼロ埋めに使用される。図８(c)の係数列マトリックス１６の例では、４×４＝１６個が係数の最大個数であり、maxNumCoeff＝１６である。
【００２４】
significant coeff flag…非ゼロ係数の有無を示すフラグ。１の場合には以下のことが言える。(1) 対応する位置にある係数がゼロではない。(2) 同じIndexのlast_significant_coeff_flagが意味を成す。
【００２５】
last_significant_coeff_flag…最終非ゼロ係数であることを示すフラグ。対応するsignificant_coeff_flagが1の時にのみ 意味をなす。このフラグが1の場合は処理block内で最終非ゼロ係数となる。また、最終非ゼロ係数＝最終Indexの場合にはゼロの場合がある。
【００２６】
coeffLevel[]…ooeff_level_abs_minus1より再現される係数列。残差(residual)とも呼ばれる。残差自身のデコードは非ゼロ係数のみ行われ、処理block内の非ゼロ係数の場所はsignificant_coeff_flag / last_significant_coeff_flagにより決定される。
【００２７】
level…デコード順の非ゼロ係数列。 coeffLevelロに並べ替えられる前の状態をさすことが多い。
【００２８】
index…配列の添え字。coeffLevel□の添え字として説明している場合が多い。
【００２９】
図８(c)に示すように、ビットストリーム格納部１０に格納されたビットストリーム中からＨ．２６４の係数データを取り出しデコードする際、ビットストリームはＣＡＢＡＣデコーダ１１においてＣＡＢＡＣデコード（復号）され、一旦、図８(a)に示すような２値係数列(bin string列)となり、２値係数列格納部１２に格納される。また、２値係数列格納部１２に接続されたlast_significant_coeff_flagデコード回路１０４において、ＣＡＢＡＣデコード後の２値係数列が非ゼロ係数であるかを示すパラメータ（Ａ列のsignificant_coeff_flag）を、最終非ゼロ係数であるかを示すパラメータ（Ｂ列のlast_significant_coeff_flag）へ反映させlevel(非ゼロ係数)の有無をデコードする。
【００３０】
選択回路１０５では、ＣＤ列１３から得られた非ゼロ係数列(level)に対して、levelの有無を示すcoeff_flagを参照してゼロ(０)係数を含めた係数列(level)を生成する際に、ゼロ係数を含めた係数列の生成と共にその生成した係数列に対応したインデックス(係数列マトリックス１６を得るのに必要な順番を示す番号)を生成(決定)する。
【００３１】
図８(a)に示すＣＡＢＡＣデコード後の２値係数列の中から、ＣＤ列１３の内容のデータ部分(非ゼロ係数の数値)が生成される。２値係数列データをデコードしゼロ係数を含んだ元通りの係数列を得るには、図８(c)に示すように、予めＣＤ列１３に基づいて生成された非ゼロ係数列(ゼロ係数を含まない)と、ＡＢ列１４に基づいて生成された非ゼロ係数の有無を示すパラメータとを用いて、係数列１５を作成し、結果として係数列マトリックス１６を得ることができる。
【００３２】
動画フォーマット規格H.264において、ＣＤ列１３のcoeff_abs_level_minus1[]、coeff_sign_flag[]に基づいて再現される係数列(coeffLevel)のIndexをデコードする際、そのIndexは選択回路１０５でＡＢ列１４のsignificant_coeff_flag[]、last_significant_coeff_flag[]に基づいて決定される。規格書に記載されている順序/方法で再現される係数列(coeffLevel)に対するIndexのデコードを行うと、あるlevelのIndexを決定した後に次のlevelのIndexを決定することとなる。
【００３３】
従って、マクロブロック(MacroBlock)内に係数(level)が多く存在する場合、その分処理に時間がかかり、ワーストケースでは係数の個数(例えば384係数)サイクル+レイテンシの時間を要する。
【００３４】
そこで、本発明の実施形態では、デコードされたlevel(Indexが決定される前のcoeffLevel)に対してIndexを決定する際に、非ゼロ係数列を所定の処理単位(例えば４画素単位)に分割し、この分割した複数の処理単位ごとに複数のテーブルを設け、ゼロ係数を挿入する位置を示すパラメータ(last_significant_coeff_flagを反映させたsignificant_coeff_flag)で複数のテーブルを一度に引くようすることにより、一度に複数のIndexを決定することによって、テーブルを増大させることなく処理速度を向上させることを可能とした。
【００３５】
［第１の実施形態］
図１は本発明の第１の実施形態の画像復号装置のブロック図を示している。本第１の実施形態として、４画素２並列 計８画素単位で処理を行う例を示す。
【００３６】
図１に示す画像復号装置１００Ａは、外部より送信されてくる非ゼロ係数の画素データ係数列(ビットストリーム)を入力し、パラメータcoeff_abs_level_minus1、coeff_sign_flag、numCoeff、significant_coeff_flag、last_significant_coeff_flagおよびmaxNumCoeffを作成するシンタックスデコーダ１０１と、対応するシンタックス(syntax)データからインデックス(Index)が決定される前の非ゼロ係数(level)をデコードするlevelデコード回路１０２と、デコードされた非ゼロ係数(level)を格納する入力側バッファとしてのlevelバッファ１０３と、パラメータlast_significant_coeff_flagをsignificant_coeff_flagへ反映させlevelの有無をデコードし、coeff_flagとして出力するlast_significant_coeff_flagデコード回路１０４と、coeff_flag(デコード回路１０４の出力)の上位4bitを参照し、coeffバッファ１０６に対するlevelバッファ１０３のIndex、及び非ゼロ係数の個数(coeff_num_up)を得るテーブルであって、８画素単位で処理した場合の、４から７番目の画素を処理する上位側係数選択テーブル１０８ａと、coeff_flag(デコード回路１０４の出力)の下位4bitを参照し、coeffバッファ１０６に対するlevelバッファ１０３のIndex、及び非ゼロ係数の個数(coeff_num_lw)を得るテーブルであって、８画素単位で処理した場合の、０から３番目の画素を処理する下位側係数選択テーブル１０８ｂと、上位側の非ゼロ係数の個数(coeff_num_up)と下位側の非ゼロ係数の個数(coeff_num_lw)とを加算し、非ゼロ係数の総数を算出する加算器１０９と、上位側係数選択テーブル１０８ａの出力(index_pattern_up)に応じて、levelバッファ１０３から非ゼロ係数(level)を読み出し、係数毎にIndexを決定し、coeffバッファ１０６へ格納する上位側係数選択回路１０５ａと、下位側係数選択テーブル１０８ｂの出力(index_pattern_lw)に応じて、levelバッファ１０３から非ゼロ係数(level)を読み出し、係数毎にIndexを決定し、coeffバッファ１０６へ格納する下位側係数選択回路１０５ｂと、Indexが決定された係数列(level)を格納するバッファであって、8画素単位で８bank構成の出力側バッファとしてのcoeffバッファ１０６と、Indexが決定された係数列(level)をIndex順にジグザクスキャン(ZigZagScan)処理を行うジグザクスキャン回路１０７とを備えている。
【００３７】
なお、図１中の表記で、例えば、第０から第７ビットの８ビットのデータを[7:0]と表している。［7:4］は第４から第７ビットの上位４ビットのデータを、［3:0］は第０から第３ビットの下位４ビットのデータを表している。
【００３８】
図２は図１のlast_significant_coeff_flagデコード回路１０４におけるlast_significant_coeff_flag/significant_coeff_flagのデコード動作を説明している。  
まず、シンタックスデコーダ１０１によりデコードされたsignificant_coeff_flag、last_significant_coeff_flagおよびmaxNumCoeffを受け取る際に、last_significant_coeff_flagデコード回路１０４によりsignificant_coeff_flagへlast_significant_coeff_flagを反映させたcoeff_flagを生成する。coeff_flagには対応するbit位置に非ゼロ係数がある場合は“１”、ゼロ係数の場合は“０”が格納されている。
【００３９】
last_significant_coeff_flagは、significant_coeff_flagが"１"で且つlast_significant_coeff_flagが“１”のときのみに意味をなすので、図２で＊印の値は任意の数であってもよい。
【００４０】
last_significant_coeff_flagデコード回路１０４の出力であるcoeff_flagは、Ａ列及びＢ列を組み合わせて生成される非ゼロ係数の有無、即ちゼロ係数及び非ゼロ係数を含んだ最大個数の係数を有する係数列について、ゼロ係数がどの位置にあるか、或いは非ゼロ係数がどの位置にあるかを示していると言える。
【００４１】
なお、levelデコード回路１０２では、シンタックスデコーダ１０１から出力されたＣ列及びＤ列のcoeff_abs_level_minus1及びcoeff_sign_flagから非ゼロ係数(level)のデコードが行われ、そのデコードされた非ゼロ係数(level)がlevelバッファ１０３へ格納されているものとする。
【００４２】
次に、非ゼロ係数の有無を表すcoeff_flagを使い、再現される係数列(coeffLevel[])に対する非ゼロ係数格納用levelバッファ１０３内での位置、および非ゼロ係数の個数を上位側/下位側係数選択テーブル１０８ａ/１０８ｂによりテーブル引きする。本実施形態では、４画素ずつ２並列に計８画素単位で処理を行うことから、８ビットのcoeff_flag[7:0]を上位側４ビット(coeff_flag[7:4])と下位側４ビット(coeff_flag[3:0])に分割し、それぞれに対して４画素用の２つのテーブル１０８ａ，１０８ｂを同時に引く構成になる。ここで、上位側係数選択テーブル１０８ａと下位側係数選択テーブル１０８ｂとは全く同じ構成の４画素用のテーブルを２つ用意するだけでよい。このように２並列にして係数選択テーブルを２つ用いることにより、並列化せずに８画素用テーブルを１つだけ用いる場合に比べて係数選択テーブルの規模を小さくすることができる。しかも同じ構成の小さいテーブルを２つ用意すればよい。勿論、８ビットのcoeff_flag[7:0]を４分割し、それぞれに４つの係数選択テーブルを一度に用いてテーブル引きしてもよい。
【００４３】
テーブルにより、coeffLevel[]用バッファ(coeffバッファ１０６)のどの位置にlevelバッファ１０３のどの係数が当てはまるか、coeffLevel[]用バッファ(coeffバッファ１０６)のどの位置にゼロ係数が当てはまるか、当てはまる非ゼロ係数の数が決定される。
【００４４】
ゼロ係数、非ゼロ係数の格納位置がテーブルにより決定されたら、対応する位置へ上位側/下位側係数選択回路１０５ａ／１０５ｂによりlevelバッファ１０３からcoeffバッファ１０６へ非ゼロ係数が転送される。ゼロ係数の場合はcoeffバッファ１０６へゼロ書き込みが行われる。このとき、上位側の係数選択回路１０５ａでは下位側の係数選択テーブル１０８ｂによりテーブル引きされた非ゼロ係数(level)の個数分だけ、levelバッファ１０３から読み込むbankの位置をずらす。
【００４５】
最後に、次の処理のために、評価済み(デコード済み)の非ゼロ係数(level)lの個数だけlevelバッファ１０３をインクリメントし、出力側のcoeffバッファ１０６のbankを切り替えるための判定をする。
【００４６】
図３は４画素単位での上位側又は下位側の係数選択テーブル１０８ａ又は１０８ｂを示している。  
図３において、符号２０はlast_significant_coeff_flagデコード回路１０４の８ビット出力(ＡＢ列から得られた非ゼロ係数の有無を表すcoeff_flag)の内の上位側４ビットのcoeff_flag[7:4]又は下位側４ビットのcoeff_flag[3:0]を示している。
【００４７】
符号２１はcoeffバッファ１０６の下位側(又は上位側)４ビット分のIndex No.(正確にはバンク(bank)のIndex No.))を示している。４ビット分のIndex_patternの内、右上がりハッチングにて示すｚの部分はゼロ係数を表し、右下がりハッチングにて示す部分は非ゼロ係数の位置(levelバッファ１０３のIndex No.)を表している。coeffバッファ１０６は再現される８ビット分のデータ(ゼロ係数と非ゼロ係数を含むデータ)が全て８ビット分のbankへ詰めて格納されるので、８ビット分のbankを全て使うとは限らず非ゼロ係数の個数(下位側と上位側の非ゼロ係数の総和)分だけのbankが使用される。
【００４８】
符号２２は下位側(又は上位側)の４ビット分の係数の個数の内の非ゼロ係数の個数を示している。
【００４９】
図３に示す係数選択テーブルを引くということは、このテーブルで入力(ＩＮ)側のlevelバッファ１０３のバンク(bank)と出力(ＯＵＴ)側のcoeffバッファ１０６のバンク(bank)の対応付けを引くことを意味している。
【００５０】
図４はlast_significant_coeff_flagデコード回路１０４の出力であるcoeff_flagを入力として図３のテーブルを引き、再現される係数列のインデックス(Index)を決定する処理例を示している。  
図４(a)はlast_significant_coeff_flagデコード回路１０４からのデコード出力(last_significant_coeff_flagをsignificant_coeff_flagに反映させた非ゼロ係数の有無を示す１又は０のデータ)、例えば８ビットのcoeff_flag[7:0]を示している。
【００５１】
図４(b)は図４(a)の８ビットのcoeff_flag[7:0]を４ビットずつ上位側，下位側に分割したcoeff_flag[7:4]＝００１１，coeff_flag[3:0]＝１１０１をそれぞれ、図３の係数選択テーブル１０８ａ，１０８ｂのの入力ビットとしたときの、ゼロ係数を含めて再現されるcoeffバッファ１０６の４ビット分のインデックス(Index)[3]〜[0]を、levelバッファ１０３のbankのIndex(index_pattern_up，index_pattern_lw)として示している。coeff_num_up，coeff_num_lwはそれぞれ、index_pattern_up又はindex_pattern_lw中の非ゼロ係数の個数を示している。
【００５２】
図４(c)はゼロ係数を含めて再現されるcoeffバッファ１０６の係数列(図８の符号１５示すものに相当する)に対応したIndex[０]〜[７]を示している。Index[１]，[６]，[７]にはゼロ係数が設定され、Index[０]，[２]，[３]にはそれぞれlevelバッファ１０３のIndexに相当するlevel_buf[０]，[１]，[２]の各bankに格納された係数が設定されることを意味している。
【００５３】
また、図４(c)の上位側のcoeff_bufで使用するlevelバッファ１０３のbankには下位側のcoeff_bufの非ゼロ係数の個数(ここでは図４(b)の下位側に示す“３”)が上位側のlevel_bufのIndexを表すためのオフセット(加算値)として付けられる(図４中の(b)から(c)への細い実線の矢印がそれを示している)。
【００５４】
図５は図３の係数選択テーブルを引くことが、levelバッファ１０３を入力側(IN)のbankとし、coeffバッファ１０６を出力側(OUT)のbankとしたとき、ＩＮとＯＵＴのbankの対応付け引くことを意味しているので、ＩＮとＯＵＴの関係を、ＡＢ列から得られた非ゼロ係数の有無を表すcoeff_flag[7:0]の２つの実例について説明する。つまり、ＡＢ列に基づいて生成されるゼロ係数(又は非ゼロ係数)の挿入位置を示すパラメータを用いて、ＣＤ列よりデコードされた非ゼロ係数の間に、如何にしてゼロ係数(又は非ゼロ係数)が挿入されるかを説明する。
【００５５】
図５(a)はcoeff_flag[7:0]＝００１１１０１の場合におけるＩＮとＯＵＴの関係を示している。  
ＩＮ側のlevelバッファ１０３の□の各bank０〜７にはゼロを含まない非ゼロ係数の値としてａ〜ｈが入っている。ＯＵＴ側のcoeffバッファ１０６の□の各bank０〜７には図４で説明したことから、coeffバッファ１０６のbank１，６，７にゼロ係数が入る結果、coeffバッファ１０６の各bank０〜７にはａ，０，ｂ，ｃ，ｄ，ｅ，０，０が入り、ゼロ係数を含んだ係数列が再現される。
【００５６】
同様に、図５(b)はcoeff_flag[7:0]＝００１１１１１の場合におけるＩＮとＯＵＴの関係を示している。  
ＩＮ側のlevelバッファ１０３の□の各bank０〜７にはゼロを含まない非ゼロ係数の値としてａ〜ｈが入っている。ＯＵＴ側のcoeffバッファ１０６のbank６，７にゼロ係数が入る結果、coeffバッファ１０６の□の各bank０〜７にはａ，ｂ，ｃ，ｄ，ｅ，ｆ，０，０が入り、ゼロ係数を含んだ係数列が再現される。
【００５７】
第１の実施形態によれば、デコードする際に並列化処理を用いて処理速度を向上させることができ、しかもテーブルを小さくして回路規模の増大を防ぐことができる。
【００５８】
［第２の実施形態］
図６は本発明の第２の実施形態の画像復号装置のブロック図を示している。本第２の実施形態として、４画素２並列 計８画素単位で処理を行う例を示す。
【００５９】
図６に示す画像復号装置１００Ｂで、図１の回路構成と異なる点は、last_significant_coeff_flagデコード回路１０４の結果を入力として、処理単位中に非ゼロ係数が１つも含まれない場合(即ちゼロ係数のみの場合)を判定してbypath_flag として出力するバイパス選択回路１１０と、bypath_flag が非ゼロ係数が無い場合(即ちゼロ係数のみの場合)を示した場合にcoeffバッファへ処理画素(処理単位の画素)をゼロとして出力するゼロ選択回路１１１とを設けたものである。
【００６０】
このような構成においては、バイパス選択回路１１０は、last_significant_coeff_flagデコード回路１０４の結果を入力として、処理単位(例として４画素２並列＝８画素)中に非ゼロ係数が１つも含まれない場合を判定(判定結果をbypath_flagとする)して出力する。ゼロ選択回路１１１は、bypath_flag が非ゼロ係数が無い場合を示した場合にcoeffバッファ１０６へ処理画素(処理単位、この場合は８画素分)をゼロとして出力する。
【００６１】
バイパス選択回路１１０およびゼロ選択回路１１１の付加により、係数選択テーブル１０８ａ，１０８ｂおよび係数選択回路１０５ａ，１０５ｂは処理単位中に非ゼロ係数が含まれない場合は活性化されない。
【００６２】
このことにより、処理単位中に非ゼロ係数が１つも含まれない場合(即ちゼロ係数のみの場合)には係数選択テーブル１０８ａ，１０８ｂ、及び係数選択回路１０５ａ，１０５ｂを停止することができ、処理電力を低減できる利点がある。
【００６３】
第２の実施形態によれば、処理単位中に非ゼロ係数が１つも含まれない場合には、これを判定して、係数選択テーブルおよび係数選択回路を停止することで、処理電力を低減することができる。
【００６４】
以上述べたように本発明によれば、並列化による処理サイクル数の削減、ワーストケースのサイクル数の削減、処理の固定レイテンシ化による制御の簡単化を実現することが可能となる。
【図面の簡単な説明】
【００６５】
【図１】本発明の第１の実施形態の画像復号装置を示すブロック図。
【図２】図１のlast_significant_coeff_flagデコード回路におけるlast_significant_coeff_flag/significant_coeff_flagのデコード動作を説明する図。
【図３】４画素単位での上位側又は下位側の係数選択テーブルを示す図。
【図４】図３の係数選択テーブルを引くことで、再現される係数列のインデックスを決定する処理例を示す図。
【図５】ＡＢ列から得られた非ゼロ係数の有無を表すパラメータの２つの実例について、levelバッファのbankとcoeffバッファのbankの関係を説明する図。
【図６】本発明の第２の実施形態の画像復号装置を示すブロック図。
【図７】本発明の関連技術の画像復号装置を示すブロック図。
【図８】図７の関連技術のデコード方法を説明する模式図。
【符号の説明】
【００６６】
１００Ａ，１００Ｂ…画像復号装置
１０１…シンタックスデコーダ
１０２…levelデコード回路
１０３…levelバッファ(入力側バッファ)
１０４…last_significant_coeff_flagデコード回路
１０５ａ…上位側係数選択回路
１０５ｂ…下位側係数選択回路
１０６…coeffバッファ(出力側バッファ)
１０７…ジクザクスキャン回路
１０８ａ…上位側係数選択テーブル
１０８ｂ…下位側係数選択テーブル
１１０…バイパス選択回路
１１１…ゼロ選択回路
【図１】
2010004284.tif 000003
【図２】
2010004284.tif 000004
【図３】
2010004284.tif 000005
【図４】
2010004284.tif 000006
【図５】
2010004284.tif 000007
【図６】
2010004284.tif 000008
【図７】
2010004284.tif 000009
【図８】
2010004284.tif 000010