(57)【要約】      （修正有）【課題】残差インデックスデコーダのスループット及び処理速度を向上させ且つ回路規模を削減する。【解決手段】ＶＬＣデコーダ１００と、ｌｅｖｅｌデコーダ１１１と、ｒｕｎデコーダ１１３と、ｌｅｖｅｌ及びｒｕｎに従って、画素データにインデックスを付加することによって出力データを復号し、ジグザグスキャンブロック１２０に送信するｃｏｅｆｆＬｅｖｅｌデコーダ１１５と、ＶＬＣデコーダ１００によって生成されたデータに従ってｒｕｎデコーダ１１３の処理と同じ順序でカウントすることによってカウント値を生成し、カウント値をｒｕｎデコーダ１１３及びｃｏｅｆｆＬｅｖｅｌデコーダ１１５に送信するカウンタ１１４と、を備え、ｒｕｎデコーダ１１３は、カウンタ１１４から送信されたカウント値に従ってｒｕｎを復号し、ｃｏｅｆｆＬｅｖｅｌデコーダ１１５は、カウンタ１１４から送信されたカウント値に従って画素データにインデックスを付加する。【選択図】図１
2009060343.tif 000002
【特許請求の範囲】
【請求項１】
ＶＬＣデコーダによって生成されたデータに従って量子化されたＤＣＴ係数値を示すｌｅｖｅｌを復号するｌｅｖｅｌデコーダと、
前記ＶＬＣデコーダによって生成されたデータに従って所定の順序で前記ＤＣＴ係数値の前の０の連続個数を示すｒｕｎを復号するｒｕｎデコーダと、
前記ｌｅｖｅｌデコーダによって復号されたｌｅｖｅｌ及び前記ｒｕｎデコーダによって復号されたｒｕｎに従って、画素データにインデックスを付加することによって出力データを復号し、当該出力データをジグザグスキャンブロックに送信するｃｏｅｆｆＬｅｖｅｌデコーダと、
前記ＶＬＣデコーダによって生成されたデータに従って前記ｒｕｎデコーダの処理と同じ順序でカウントすることによってカウント値を生成し、当該カウント値を前記ｒｕｎデコーダ及び前記ｃｏｅｆｆＬｅｖｅｌデコーダに送信するカウンタと、を備え、
前記ｒｕｎデコーダは、前記カウンタから送信されたカウント値に従って前記ｒｕｎを復号し、
前記ｃｏｅｆｆＬｅｖｅｌデコーダは、前記カウンタから送信されたカウント値に従って前記画素データにインデックスを付加することを特徴とする残差インデックスデコーダ。
【請求項２】
前記カウンタは、前記ｒｕｎデコーダによって復号されたｒｕｎと前記ＶＬＣデコーダによって生成されたデータのうち残りのゼロの数を示すｚｅｒｏｓＬｅｆｔとの差を取ることによって前記カウント値を生成する請求項１に記載の残差インデックスデコーダ。
【請求項３】
前記カウンタは、アップカウンタである請求項１又は２に記載の残差インデックスデコーダ。
【請求項４】
前記ｃｏｅｆｆＬｅｖｅｌデコーダは、前記カウンタにカウント命令を送信し、
前記カウンタは、前記ｃｏｅｆｆＬｅｖｅｌデコーダから送信されたカウント命令に応じて前記カウント値を生成する請求項１乃至３の何れか１項に記載の残差インデックスデコーダ。
【請求項５】
ＶＬＣデコーダによって生成されたデータに従って量子化されたＤＣＴ係数値を示すｌｅｖｅｌを復号し、
前記ＶＬＣデコーダによって生成されたデータに従って前記ＶＬＣデコーダによって生成されたデータのうち残りのゼロの数を示すｚｅｒｏｓＬｅｆｔを復号し、
前記ＶＬＣデコーダによって生成されたデータに従って所定の順序で前記ＤＣＴ係数値の前の０の連続個数を示すｒｕｎを復号し、
前記復号されたｌｅｖｅｌ及びｒｕｎに従って、画素にインデックスを付加することを特徴とする残差インデックスのデコード方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、残差インデックスデコーダ及び残差インデックスのデコード方法に関し、特に、動画フォーマットＨ．２６４におけるresidual_block_cavlc部分のデコードに適用される残差インデックスデコーダ及び残差インデックスのデコード方法に関する。
【背景技術】
【０００２】
近年、動画データの圧縮符号化方式としてＨ．２６４が知られている。Ｈ．２６４のデコード処理の１つに、ＣＡＶＬＣ（Context-based Adaptive Variable Length Code）方式を用いた残差インデックスのデコード処理であるresidual_block_cavlcシンタックスのデコード処理がある。
【０００３】
従来の残差インデックスデコーダは、ｌｅｖｅｌデコーダ、ｒｕｎデコーダ及びｃｏｅｆｆＬｅｖｅｌデコーダを備えている。従来の残差インデックスデコーダでは、ｌｅｖｅｌデコーダ及びｒｕｎデコーダによるデコード処理の後にｃｏｅｆｆＬｅｖｅｌデコーダによるデコード処理が行われるため、ｌｅｖｅｌデコーダ及びｒｕｎデコーダとｃｏｅｆｆＬｅｖｅｌデコーダとの間にそれぞれlevelを蓄積するためのｌｅｖｅｌバッファ及びrunを蓄積するためのｒｕｎバッファが設けられている。
【０００４】
ストリーム内のパラメータは、level，run(run_before) の順番に格納されており、levelとrunを全てデコードした後にrunをデコードした順序と逆順でcoffLevel[]を決定する。
【０００５】
また、ｒｕｎデコーダとｃｏｅｆｆＬｅｖｅｌデコーダが互いに逆順のｒｕｎカウンタ及びｃｏｅｆｆＬｅｖｅｌカウンタに従って動作するので、runのデコードとcoeffLevel[coeffNum]のデコードが互いに異なる処理順序で行われる。
【０００６】
しかし、ｃｏｅｆｆＬｅｖｅｌデコーダがｌｅｖｅｌデコーダ及びｒｕｎデコーダのデコード処理が終了するまでデコード処理を行うことができないので、スループットが悪化するという問題があった。
【０００７】
また、ｌｅｖｅｌバッファとは別にｒｕｎバッファが設けられ、ｒｕｎカウンタとは別にｃｏｅｆｆＬｅｖｅｌカウンタが設けられているので、回路規模が増加するという問題があった。
【０００８】
また、ｒｕｎバッファが設けられることによって、ｒｕｎバッファアクセスに起因して処理速度が低下するという問題があった。
【０００９】
一方、residual_block_cavlc シンタックスのデコード処理をソフトウェアによって実現する場合には、runのデコード及びcoeffLevelのデコードにおいてそれぞれ別々のループアルゴリズムが記述される。
【００１０】
しかし、ループアルゴリズムが２つ含まれるので、ステップ数が増加するという問題がある。
【特許文献１】特開２００６−２８７８６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明の目的は、スループット及び処理速度を向上させ且つ回路規模を削減するための残差インデックスデコーダ及び残差インデックスのデコード方法を提供することである。
【課題を解決するための手段】
【００１２】
本発明の第１態様によれば、ＶＬＣデコーダによって生成されたデータに従って量子化されたＤＣＴ係数値を示すｌｅｖｅｌを復号するｌｅｖｅｌデコーダと、前記ＶＬＣデコーダによって生成されたデータに従って所定の順序で前記ＤＣＴ係数値の前の０の連続個数を示すｒｕｎを復号するｒｕｎデコーダと、前記ｌｅｖｅｌデコーダによって復号されたｌｅｖｅｌ及び前記ｒｕｎデコーダによって復号されたｒｕｎに従って、画素にインデックスを付加することによって出力データを復号し、当該出力データをジグザグスキャンブロックに送信するｃｏｅｆｆＬｅｖｅｌデコーダと、前記ＶＬＣデコーダによって生成されたデータに従って前記ｒｕｎデコーダの処理と同じ順序でカウントすることによってカウント値を生成し、当該カウント値を前記ｒｕｎデコーダ及び前記ｃｏｅｆｆＬｅｖｅｌデコーダに送信するカウンタと、を備え、前記ｒｕｎデコーダは、前記カウンタから送信されたカウント値に従って前記ｒｕｎを復号し、前記ｃｏｅｆｆＬｅｖｅｌデコーダは、前記カウンタから送信されたカウント値に従って前記画素データにインデックスを付加することを特徴とする残差インデックスデコーダが提供される。
【発明の効果】
【００１３】
本発明によれば、スループット及び処理速度を向上させ且つ回路規模を削減することが出来る。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施例について図面を参照して説明する。なお、以下の実施例は、本発明の実施の一形態であって、本発明の範囲を限定するものではない。
【実施例１】
【００１５】
はじめに、本発明の実施例１について説明する。本発明の実施例１は、ハードウェアを用いて本発明の目的を達成する例である。
【００１６】
（構成）
図１は、本発明の実施例１に係る残差インデックスデコーダ１１０の構成を示すブロック図である。
【００１７】
本発明の実施例１に係る残差インデックスデコーダ１１０は、ＶＬＣ（Variable Length Code）デコーダ１００及びジグザグスキャンブロック１２０に接続されている。
【００１８】
ＶＬＣデコーダ１００は、シンタックスのＶＬＣデコード処理を行うことによってＶＬＣデコードデータを生成し、残差インデックスデコーダ１１０に送信する。
【００１９】
残差インデックスデコーダ１１０は、ｌｅｖｅｌデコーダ１１１、ｌｅｖｅｌバッファ１１２、ｒｕｎデコーダ１１３、カウンタ１１４及びｃｏｅｆｆＬｅｖｅｌデコーダ１１５を備えている。
【００２０】
ｌｅｖｅｌデコーダ１１１は、ＶＬＣデコーダ１００から送信されたＶＬＣデコードデータのパラメータに従ってlevelをデコードし、ｌｅｖｅｌバッファ１１２に送信する。levelは、量子化されたＤＣＴ係数値を示すデータである。
【００２１】
ｌｅｖｅｌバッファ１１２は、ｌｅｖｅｌデコーダ１１１から送信されたlevelを蓄積するためのバッファである。
【００２２】
ｒｕｎデコーダ１１３は、ＶＬＣデコーダ１００から送信されたＶＬＣデコードデータのrun_before及びzerosLeft並びに後述のカウンタ１１４から送信されたカウント値及びデコード命令に従ってrunをデコードし、ｃｏｅｆｆＬｅｖｅｌデコーダ１１５に送信する。run_beforeは、ＤＣＴ係数値の前の０の連続個数を示すデータであり、zerosLeftは、デコードされる残りのゼロの数を示すデータであり、runは、ＤＣＴ係数値の前の０の連続個数を示すデータである。
【００２３】
カウンタ１１４は、ＶＬＣデコーダ１００から送信されたＶＬＣデコードデータのTotalCoeff及びzerosLeft並びにｃｏｅｆｆＬｅｖｅｌデコーダ１１５から送信されたカウント命令に従ってｒｕｎデコーダ１１３の処理と同じ順序でカウントを行うことによってカウント値を生成し、カウント値及びデコード命令をｒｕｎデコーダ１１３及びｃｏｅｆｆＬｅｖｅｌデコーダ１１５に送信する。カウンタ１１４は、例えばアップカウンタである。TotalCoeffは、非０係数の個数を示すデータである。
【００２４】
ｃｏｅｆｆＬｅｖｅｌデコーダ１１５は、ｌｅｖｅｌバッファ１１２に蓄積されたlevel、ｒｕｎデコーダ１１３から送信されたrun及びカウンタ１１４から送信されたカウント値に従って画素にインデックスを付加することによってcoeffLevel[coeffNum]をデコードし、ジグザグスキャンブロック１２０に送信する。coeffLevel[coeffNum]は、出力データである。
【００２５】
ジグザグスキャンブロック１２０は、ｃｏｅｆｆＬｅｖｅｌデコーダ１１５から送信された出力データを受信し、ジグザグスキャンを行う。
【００２６】
（動作）
はじめに、ｌｅｖｅｌデコーダ１１１は、ＶＬＣデコーダ１００から送信されたＶＬＣデコードデータのパラメータに従って全てのlevelをデコードし、デコードされたlevelをｌｅｖｅｌバッファ１１２へ送信する。
【００２７】
次に、カウンタ１１４は、ＶＬＣデコーダ１００から送信されたＶＬＣデコードデータのzerosLeft及びTotalCoeff初期値を決定し、ｃｏｅｆｆＬｅｖｅｌデコーダ１１５から送信されたカウント命令に従ってカウントを行い、ｒｕｎデコーダ１１３及びｃｏｅｆｆＬｅｖｅｌデコーダ１１５にカウント値及びデコード命令を送信する。
【００２８】
次に、ｃｏｅｆｆＬｅｖｅｌデコーダ１１５は、ｒｕｎデコーダ１１３から送信されたrunを受信するとともにｌｅｖｅｌバッファ１１２に蓄積されたlevelを読み出し、coeffLevel[coeffNum]をデコードする。このとき、level及びrunは、デコードされた順序でcoeffLevel[coeffNum]のデコードに使用される。すなわち、coeffLevel[]は引数であるcoeffNumが大きい順番に決定される。また、run及びcoeffLevel[]のデコードの可否は、カウンタ１１４から送信されたカウンタ値に従って決定される。
【００２９】
図２は、本発明の実施例１に係る残差インデックスデコーダ１１０の各部１１１〜１１５から出力される波形を示す概略図である。
【００３０】
図２に示されたように、本発明の実施例１に係る残差インデックスデコーダ１１０は、ｌｅｖｅｌデコーダ１１１によってデコードされたlevel及びｒｕｎデコーダ１１３によってデコードされたrunをデコードされた順番にデコードするので、runのデコード処理とcoeffLevel [coeffNum]のデコード処理を並列で行うことが出来る。
【００３１】
本発明の実施例１によれば、ｒｕｎデコーダ１１３及びｃｏｆｆＬｅｖｅｌデコーダ１１５が同じ順番にデコード処理を行うので、残差インデックスデコーダ１１０のスループットを向上させることが出来る。
【００３２】
また、本発明の実施例１によれば、ｒｕｎデコーダ１１３とｃｏｆｆＬｅｖｅｌデコーダ１１５の間のバッファが不要となるので、回路規模を削減し且つバッファアクセスに起因する処理速度の低下を防ぐことが出来る。
【００３３】
また、本発明の実施例１によれば、ｒｕｎデコーダ１１３とｃｏｆｆＬｅｖｅｌデコーダ１１５が共通のカウンタ１１４に従って処理を行うので、回路規模を削減することが出来る。
【実施例２】
【００３４】
次に、本発明の実施例２について説明する。本発明の実施例１は、ハードウェアを用いて本発明の目的を達成する例であるが、本発明の実施例２は、ソフトウェアを用いて本発明の目的を達成する例である。なお、本発明の実施例１と同様の内容についての説明は省略する。
【００３５】
図３は、本発明の実施例２に係る残差インデックスデコーダ２１０の構成を示すブロック図である。
【００３６】
本発明の実施例２に係る残差インデックスデコーダ２１０は、ＶＬＣ（Variable Length Code）デコーダ２００、ジグザグスキャンブロック２２０及びメモリ２３０に接続されている。
【００３７】
ＶＬＣデコーダ２００は、メモリ２３０に記憶されたＶＬＣデコードプログラム２３１に従ってＶＬＣデコード処理を行うことによってＶＬＣデコードデータを生成し、生成されたＶＬＣデコードデータをメモリ２３０に書き込む。
【００３８】
残差インデックスデコーダ２１０は、メモリ２３０に記憶された残差インデックスデコードプログラム２３２、ｌｅｖｅｌデコードプログラム２３３及びｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコードプログラム２３４に従って残差インデックスデコード手段２１１、ｌｅｖｅｌデコード手段２１２及びｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３を実現する。
【００３９】
ジグザグスキャンブロック２２０は、メモリ２３０に記憶されたジグザグスキャンプログラム２３５に従って残差インデックスデコーダ２１０の処理結果に対してジグザグスキャンを行う。
【００４０】
メモリ２３０は、ＶＬＣデコーダ２００の制御プログラムであるＶＬＣデコードプログラム２３１、残差インデックスデコーダ２１０の制御プログラムである残差インデックスデコードプログラム２３２、ｌｅｖｅｌデコードプログラム２３３及びｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコードプログラム２３４並びにジグザグスキャンブロック２２０の制御プログラムであるジグザグスキャンプログラム２３５を記憶する。また、メモリ２３０は、ＶＬＣデコーダ２００、残差インデックスデコーダ２１０及びジグザグスキャンブロック２２０における処理に際して、ワーキングメモリとしても用いられる。
【００４１】
図４は、本発明の実施例２に係る残差インデックスデコード処理における残差インデックスデコーダ２１０の処理手順を示すフローチャートである。
【００４２】
はじめに、残差インデックスデコード手段２１１は、メモリ２３０からＶＬＣデコードデータを読み出すための演算“coeff_token”を実行する（Ｓ４０１）。
【００４３】
ＶＬＣデコードデータのTottalCoeffが０より大きい場合には（Ｓ４０２−ＹＥＳ）、ｌｅｖｅｌデコード手段２１２は、メモリ２３０に記憶されたｌｅｖｅｌデコードプログラム２３３を実行することによって後述のｌｅｖｅｌデコード処理を行う（Ｓ４０３）。
【００４４】
次に、残差インデックスデコード手段２１１は、zerosLeftをデコードするための演算“decode zerosLeft”を実行する（Ｓ４０４）。
【００４５】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、メモリ２３０に記憶されたｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコードプログラム２３４を実行することによって後述のｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード処理を行う（Ｓ４０５）。
【００４６】
Ｓ４０５が終了した後に、本発明の実施例２に係る残差インデックスデコード処理が終了する。
【００４７】
一方、ＶＬＣデコードデータのTottalCoeffが０より小さい場合には（Ｓ４０２−ＮＯ）、残差インデックスデコード手段２１１は、run及びcoeffLevel[]のデコードをする必要がないものと判断し、Ｓ４０３〜Ｓ４０５を行うことなく本発明の実施例２に係る残差インデックスデコード処理を終了する。
【００４８】
図５は、本発明の実施例２に係るｌｅｖｅｌデコード処理におけるｌｅｖｅｌデコード手段２１２の処理手順を示すフローチャートである。
【００４９】
はじめに、ｌｅｖｅｌデコード手段２１２は、インデックス変数ｉに初期値として０を代入する（Ｓ５０１）。
【００５０】
インデックス変数ｉがＶＬＣデコードデータのTotalCoeffより小さい場合には（Ｓ５０２−ＹＥＳ）、ｌｅｖｅｌデコード手段２１２は、ＶＬＣデコードデータのパラメータのデコードを行うための演算“decode trailing_ones_sign_flag”を実行する（Ｓ５０３）。
【００５１】
次に、ｌｅｖｅｌデコード手段２１２は、ｌｅｖｅｌのデコードを行うための演算“decode level”を実行する（Ｓ５０４）。
【００５２】
次に、ｌｅｖｅｌデコード手段２１２は、インデックス変数ｉをインクリメントし（Ｓ５０５）、Ｓ５０２に戻る。
【００５３】
インデックス変数ｉがＶＬＣデコードデータのTotalCoeffと等しくなった場合には（Ｓ５０２−ＮＯ）、ｌｅｖｅｌデコード手段２１２は、本発明の実施例２に係るｌｅｖｅｌデコード処理を終了し、図４のＳ４０４へジャンプする。
【００５４】
図６は、本発明の実施例２に係るｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード処理におけるｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３の処理手順を示すフローチャートである。
【００５５】
はじめに、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、変数coeffNumに初期値を代入するための演算“coeffNum = TotalCoeff + zerosLeft - 1”を実行する（Ｓ６０１）。
【００５６】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、インデックス変数ｉに初期値として０を代入する（Ｓ６０２）。
【００５７】
インデックス変数ｉがＶＬＣデコードデータのTotalCoeffから１を引いた値より小さい場合には（Ｓ６０３−ＹＥＳ）、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、出力データのインデックスを決定するための演算“coeffLevel[coeffNum] = level[i]”を実行する（Ｓ６０４）。
【００５８】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、ｒｕｎのデコードを行うための演算“decode run”を実行する（Ｓ６０５）。
【００５９】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、演算“zerosLeft -= run”を実行する（Ｓ６０６）。
【００６０】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、係数の数の算出を行うための演算“coeffNum = coeffNum - run - 1”を実行する（Ｓ６０７）。
【００６１】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、インデックス変数ｉをインクリメントし（Ｓ６０８）、Ｓ６０３に戻る。
【００６２】
インデックス変数ｉがＶＬＣデコードデータのTotalCoeffから１を引いた値と等しくなった場合には（Ｓ６０３−ＮＯ）、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、出力データのインデックスを決定するための演算“coeffLevel[coeffNum] = level[i]”を実行し（Ｓ６０９）、本発明の実施例２に係るｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード処理を終了する。
【００６３】
図７は、本発明の実施例２に係る残差インデックスデコード処理のソースコードの一例を示す概略図である。
【００６４】
図７に示すように、本発明の実施例２に係る残差インデックスデコーダ２１０は、level及びzerosLeftをストリームからデコードしてメモリ２３０に書き込む。次に、coeffNumの初期値をTotalCoeffとzerosLeftに従って決定し、forループをcallする。forループではインデックスをTotalCoeffで取り、runをデコードしながら、メモリ２３０に書き込まれたlevelと共にcoeffLevel[coeffNum]を決定する。coeffLevel[coeffNum]の決定後に、次のcoeffLevelのインデックスとなるcoeffNum をデコードされたrunにより更新する。また、同じループ内で次のrunのデコードに必要なzerosLeftの更新も行う。
【００６５】
次に、本発明の実施例２の変形例について説明する。本発明の実施例２の変形例は、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード処理をwhile文を用いて実現する例である。
【００６６】
図８は、本発明の実施例２の変形例に係るｒｕｎデコード処理におけるｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３の処理手順を示すフローチャートである。
【００６７】
はじめに、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、変数coeffNumに初期値を代入するための演算“coeffNum = TotalCoeff + zerosLeft - 1”を実行する（Ｓ８０１）。
【００６８】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、インデックス変数ｉに初期値として０を代入する（Ｓ８０２）。
【００６９】
ＶＬＣデコードデータのcoeffNumが０以上である場合には（Ｓ８０３−ＹＥＳ）、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、出力データのインデックスを決定するための演算“coeffLevel[coeffNum] = level[i]”を実行する（Ｓ８０４）。
【００７０】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、ｒｕｎのデコードを行うための演算“decode run”を実行する（Ｓ８０５）。
【００７１】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、演算“zerosLeft -= run”を実行する（Ｓ８０６）。
【００７２】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、係数の数の算出を行うための演算“coeffNum = coeffNum - run - 1”を実行する（Ｓ８０７）。
【００７３】
次に、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、インデックス変数ｉをインクリメントし（Ｓ８０８）、Ｓ８０３に戻る。
【００７４】
ＶＬＣデコードデータのcoeffNumが負の値になった場合には（Ｓ８０３−ＮＯ）、ｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３は、本発明の実施例２の変形例に係るｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード処理を終了する。
【００７５】
図９は、本発明の実施例２の変形例に係る残差インデックスデコード処理のソースコードの一例を示す概略図である。
【００７６】
図９に示すように、本発明の実施例２の変形例に係る残差インデックスデコーダ２１０は、level及びzerosLeftをストリームからデコードしてメモリ２３０に書き込む。次に、coeffNumの初期値をTotalCoeffとzerosLeftに従って決定し、whileループをcallする。whileループでは、インデックスが決定されていない非ゼロ係数の数を示すcoeffNumが０又は正である間処理が続けられる。whileループ内では、runをデコードしながら、メモリ２３０に書き込まれたlevelと共にcoeffLevel[coeffNum]を決定する。coeffLevel[coeffNum]の決定後に、次のcoeffLevelのインデックスとなるcoeffNum をデコードされたrunにより更新する。また、同じループ内で次のrunのデコードに必要なzerosLeftの更新も行う。
【００７７】
本発明の実施例２によれば、本発明の実施例１と同様の効果に加えて、residual_block_cavlc のデコード処理をソフトウェアによって実現する場合に、runのデコード及びcoeffLevelのデコードのループアルゴリズムを共通化するので、処理ステップ数を削減することが出来る。
【図面の簡単な説明】
【００７８】
【図１】本発明の実施例１に係る残差インデックスデコーダ１１０の構成を示すブロック図である。
【図２】本発明の実施例１に係る残差インデックスデコーダ１１０の各部１１１〜１１５から出力される波形を示す概略図である。
【図３】本発明の実施例２に係る残差インデックスデコーダ２１０の構成を示すブロック図である。
【図４】本発明の実施例２に係る残差インデックスデコード処理における残差インデックスデコーダ２１０の処理手順を示すフローチャートである。
【図５】本発明の実施例２に係るｌｅｖｅｌデコード処理におけるｌｅｖｅｌデコード手段２１２の処理手順を示すフローチャートである。
【図６】本発明の実施例２に係るｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード処理におけるｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３の処理手順を示すフローチャートである。
【図７】本発明の実施例２に係る残差インデックスデコード処理のソースコードの一例を示す概略図である。
【図８】本発明の実施例２の変形例に係るｒｕｎデコード処理におけるｒｕｎ＆ｃｏｅｆｆＬｅｖｅｌデコード手段２１３の処理手順を示すフローチャートである。
【図９】本発明の実施例２の変形例に係る残差インデックスデコード処理のソースコードの一例を示す概略図である。
【符号の説明】
【００７９】
１００，２００  ＶＬＣデコーダ
１１０，２１０  残差インデックスデコーダ
１１１  ｌｅｖｅｌデコーダ
１１２  ｌｅｖｅｌバッファ
１１３  ｒｕｎデコーダ
１１４  カウンタ
１１５  ｃｏｅｆｆＬｅｖｅｌデコーダ
１２０，２２０  ジグザグスキャンブロック
２１１  残差インデックスデコード手段
２１２  ｌｅｖｅｌデコード手段
２１３  ｒｕｎデコード手段
２３０  メモリ
【図１】
2009060343.tif 000003
【図２】
2009060343.tif 000004
【図３】
2009060343.tif 000005
【図４】
2009060343.tif 000006
【図５】
2009060343.tif 000007
【図６】
2009060343.tif 000008
【図７】
2009060343.tif 000009
【図８】
2009060343.tif 000010
【図９】
2009060343.tif 000011