(57)【要約】【課題】コンテキスト変数情報の初期化処理を軽減し、初期化処理にかかる演算量を削減するとともに、初期化処理にかかる演算量の削減によって復号が完了するまでにかかる時間を短縮することで、より高速な算術復号化装置、および算術復号化プログラムを提供する。【解決手段】初期化済みコンテキスト変数情報格納部１３は、シンタックス情報の種類に応じて初期化済みコンテキスト変数情報を複数格納し、コンテキスト変数管理部１２は、復号済みのシンタックス情報の種類に従って、コンテキスト変数情報が初期化済みコンテキスト変数情報格納部１３に格納されているか否かを判定し、蓄積されていなかった場合、コンテキスト変数情報の初期化を行った後、初期化済みコンテキスト変数情報格納手段に格納し、蓄積されていた場合、復号済みのシンタックス情報に基づいて、初期化済みコンテキスト変数情報格納手段から特定のコンテキスト変数情報を取得する。【選択図】    図２
2005223533.tif 000002
【特許請求の範囲】
【請求項１】
入力されるビットストリームの復号位置を特定するためのスタートコードを基に、入力される前記ビットストリームを探索して算術復号するビット列を特定し、特定したビット列をバッファメモリに格納し、
算術復号を開始するビット列上の位置を示す復号位置情報に基づいて、前記バッファメモリに格納されているビット列のヘッダ情報を復号して、当該復号位置情報によって指定されるビット列上の特定位置におけるビット列を算術復号するための復号手順を示すシンタックス情報を取得し、
予め複数用意されているコンテキスト変数情報のうちの１つを、前記シンタックス情報に応じて初期化し、その初期化した前記コンテキスト変数情報を利用して、前記特定位置におけるビット列を算術復号する算術復号化装置であって、
前記シンタックス情報の種類に応じて初期化された前記コンテキスト変数情報を初期化済みコンテキスト変数情報として複数格納する初期化済みコンテキスト変数情報格納手段と、
前記コンテキスト変数情報の初期化に必要な復号済みの前記シンタックス情報を取得し、当該復号済みのシンタックス情報の種類に従って、前記コンテキスト変数情報が前記初期化済みコンテキスト変数情報格納手段に格納されているか否かを判定し、
格納されていなかった場合、前記復号済みのシンタックス情報に応じて前記コンテキスト変数情報の初期化を行った後、前記初期化済みコンテキスト変数情報格納手段に格納し、
格納されていた場合、前記復号済みのシンタックス情報に基づいて、前記初期化済みコンテキスト変数情報格納手段から特定の前記コンテキスト変数情報を取得するコンテキスト変数管理手段と、
を備えることを特徴とする算術復号化装置。
【請求項２】
入力されるビットストリームの復号位置を特定するためのスタートコードを基に、入力される前記ビットストリームを探索して算術復号するビット列を特定し、特定したビット列をバッファメモリに格納し、
算術復号を開始するビット列上の位置を示す復号位置情報に基づいて、前記バッファメモリに格納されているビット列のヘッダ情報を復号して、当該復号位置情報によって指定されるビット列上の特定位置におけるビット列を算術復号するための復号手順を示すシンタックス情報を取得し、
予め複数用意されているコンテキスト変数情報のうちの１つを、前記シンタックス情報に応じて初期化し、その初期化した前記コンテキスト変数情報を利用して、前記特定位置におけるビット列を算術復号する算術復号化装置をコンピュータに実現させるための算術復号化プログラムであって、
前記コンピュータを、
前記シンタックス情報の種類に応じて初期化された前記コンテキスト変数情報を初期化済みコンテキスト変数情報として複数格納する初期化済みコンテキスト変数情報格納手段と、
前記コンテキスト変数情報の初期化に必要な復号済みの前記シンタックス情報を取得し、当該復号済みのシンタックス情報の種類に従って、前記コンテキスト変数情報が前記初期化済みコンテキスト変数情報格納手段に格納されているか否かを判定し、
格納されていなかった場合、前記復号済みのシンタックス情報に応じて前記コンテキスト変数情報の初期化を行った後、前記初期化済みコンテキスト変数情報格納手段に格納し、
格納されていた場合、前記復号済みのシンタックス情報に基づいて、前記初期化済みコンテキスト変数情報格納手段から特定の前記コンテキスト変数情報を取得するコンテキスト変数管理手段と、
して機能させることを特徴とする算術復号化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、算術復号を利用する画像、映像、音声などの復号化において用いられる算術復号化装置、および算術復号化プログラムに関するものである。
【背景技術】
【０００２】
従来、MPEGに代表される動画像符号化においては、ビットストリーム出力時に用いられるエントロピー符号化として、可変長符号化であるVLC（Variable Length Code）が用いられている。VLCはハフマン符号化の手法に基づいて行われるため、符号化効率を向上させようとするとハフマンテーブルの増大を引き起こす（非特許文献１）など、いくつかの問題を生じることが知られている。そこで近年VLCに代わり、JBIG（非特許文献２）ではQM-Coder、JPEG2000（非特許文献３）ではEBCOT、ITU-T  H.264（非特許文献４）（以降、AVCと称す）ではVLCの他にCABAC(Context-based Adaptive Binary Arithmetic Coding)などといった各種の算術符号化・復号化の手法が採用されている。
【０００３】
基本的な算術符号化および復号化であるエリアス符号化・復号化の概念を、図７に示す。算術符号化および復号化では、一般に下限値0以上、上限値1未満の実数直線を考える。この区間を初期のrangeとする。
【０００４】
算術符号化においては、優勢シンボル（以降、MPSと称す）、劣勢シンボル（以降、LPSと称す）の発生確率に基づいて実数直線を分割する。分割した領域をそれぞれrMPS、rLPSとする。その後、符号化出力対象となるシンボルが属する領域を選択する。ここでは仮にrMPSを選択したとする。その後、選択したrMPSを次のrangeとし、このrangeに対して同様にrMPS、rLPSに分割し、符号化出力対象となる領域を選択する。この動作を符号化出力対象が無くなるまで繰り返し、最終的に特定された領域であるrangeの範囲内に収まる値を出力値valueとして出力することで符号化が完了する。通常はrangeの下限値を出力値valueとして出力する。
【０００５】
また、算術復号化においては、算術符号化において出力された出力値valueを復号するための値を入力値valueとすると、算術符号化と同様にMPS、LPSの発生確率に基づいて実数直線を分割する。その後、入力値valueが含まれる領域を特定する。ここではrMPSが選択され、この領域に対応するシンボルを復号シンボルとして出力する。この動作を繰り返すことで、必要な復号シンボル列を得ることができる。
【０００６】
上述の基本的な算術符号化・復号化は、区間のrangeや入力・出力値であるvalueが実数値であり、演算精度の問題から現実的ではない。そこで実数直線を有限のビット幅を持つ整数区間とし、特定した区間の幅であるrangeと特定した区間の下限値であるvalueに対して正規化処理を導入することで問題を解決している。正規化処理は、左シフト演算により行われ、この正規化処理によって、rangeとvalueの演算精度を確保している。
【０００７】
現在一般的に利用されているQM-Coder、EBCOT、CABACなどの算術符号化・復号化もこの減算シフト型の適応算術符号化・復号化に基づいて行われている。
【０００８】
また、CABACでは、複数のコンテキスト変数情報を利用して符号化効率の向上を図っており、このように符号化されたビットストリームを算術復号するために、デコーダは図８および図９に示すように構成される（詳細については後述）。
【０００９】
コンテキスト変数情報は、算術符号化を行う際に利用される確率の状態であるステート情報（以降、pStateIdxと記す）と、優勢シンボル情報（以降、valMPSと記す）とから構成される。複数のコンテキスト変数情報を特定するために、それぞれコンテキスト変数情報の構造に対してコンテキストインデックス（以降、ctxIdxと記す）が付与される。ここで、優勢シンボルとは、あるシンボル系列を算術符号化している場合において、現在までに符号化した0，１のバイナリシンボルのうち、どちらのシンボルが多く発生したかを表す。
【００１０】
算術符号化においては、一般に、各シンボルの生起確率を利用して0から1までの位置と区間幅を特定することで入力シンボル列を符号化する。この各シンボルの生起確率が予め正確に判っている場合に、入力シンボル列のエントロピーに最も近い状態で符号化できる。しかし、入力シンボル列がリアルタイムに入力される場合には、この各入力シンボルの生起確率を正確に特定することは難しい。この特定された各入力シンボルの生起確率と実際の生起確率との違いが大きいほど符号化効率は低下することになる。
【００１１】
入力シンボル系列が複数のシンボル系列の連続で構成されているものや、入力シンボル系列における各シンボルの生起確率に変化があるものをリアルタイムに算術符号化を行うことを考えると、算術符号化を行う際に、予め決められた各入力シンボルの生起確率を利用してこの入力シンボル列の全てを符号化する場合には、入力シンボル列の生起確率の実態に即していないために、符号化効率が低下してしまう。
【００１２】
算術符号化装置が入力されるシンボルに応じて適応的に生起確率を更新することができる適応型の装置である場合であっても、例えば、図１０に示すように、系列Ａ、系列Ｂ、系列Ｃ…と明らかに違ったシンボル系列の組み合わせからなる入力シンボル列を符号化する場合には、入力シンボルから推定される生起確率が収束するまでにある程度の時間がかかるため、シンボル系列の切り替えを行う際に生起確率の不整合が生じ、結果として符号化効率が低下してしまう。
【００１３】
そこで、図１０に示されるように、入力シンボル列が複数のシンボル系列から構成されていることが予め分かっている場合には、それぞれの系列に対応するコンテキスト、つまり最適な生起確率を用意しておき、シンボル系列が切り替わる度に対応するコンテキストに切り替えることによって、生起確率の不整合を減らすことが可能となる。
【００１４】
コンテキストの切り替えは、一般に所定のルールに従って制御される。CABACでは、シンタックスに従うことで各シンタックス情報に対応する少なくとも1つのコンテキスト変数情報が特定され、内部状態に応じて少なくとも1つのコンテキスト変数情報の中から適切なコンテキスト変数情報が選択される。このような細かいコンテキストの切り替え制御により、符号化効率の向上を図っている。
【００１５】
なお、シンタックスとは、復号手順そのもののことを指し、復号するシンタックスエレメントをどのような順序で符号・復号するかが規定されており、また、シンタックスエレメントとは、シンタックスを構成する各要素のことを指し、シンタックスを構成する各要素の例としては、ベクトル情報、ＤＣＴによって得られるＤＣＴ係数に関する情報、各種のモード判定を行うためのフラグ情報等がある。以降、シンタックスエレメント＝シンタックス情報として扱う。
【００１６】
図８は、一般的なAVCにおいて、ビットストリームをデコードしてシンタックス情報を出力する処理を行うデコーダ１０１の機能ブロック図である。
【００１７】
デコーダ１０１は、図８に示すように、ビットストリーム取得部１０２、復号位置検出部１０３、ビットストリームバッファ１０４、復号位置管理部１０５、シンタックス情報取得部１０６、シンタックス情報格納部１０７、および算術復号部１０８によって構成される。
【００１８】
ビットストリーム取得部１０２は、符号化されたビットストリームを取得する機能を有する。
【００１９】
復号位置検出部１０３は、ビットストリーム取得部１０２によって取得されたビットストリームを、復号位置管理部１０５より得られるスタートコードに基づいて探索し、スタートコードと一致したビットストリーム内の位置を検出することでデコードの先頭位置を特定する機能を有する。また、復号位置検出部１０３は、次の復号位置を特定することで復号単位を特定する機能を有する。ここでは、少なくとも１つのスライスを復号することができるビット列を復号単位として特定できるようにすることで、より良い構成となる。復号位置検出部１０３によって特定されたビットストリーム中のビット列は、ビットストリームバッファ１０４に格納される。
【００２０】
ビットストリームバッファ１０４は、復号位置検出部１０３により特定されたビット列を格納する。
【００２１】
復号位置管理部１０５は、ビットストリーム取得部１０２が取得する入力ビットストリーム中の復号位置を管理する機能を有する。また、復号位置管理部１０５は、ビットストリームバッファに格納されているビット列中の復号位置を管理する機能を有し、必要に応じて復号位置検出部１０３に対してスタートコードを指定してビットストリームバッファ１０４内のビット列を更新する。さらに、復号位置管理部１０５は、シンタックス情報取得部１０６、算術復号部１０８に対して、ビットストリームバッファ１０４内の復号位置情報を通知する機能を有する。
【００２２】
シンタックス情報取得部１０６は、復号位置管理部１０５から得られる復号位置情報と、ビットストリームバッファ１０４に格納されているビット列から、算術復号部１０８で符号化されたビット列よりも上位に位置するヘッダ情報を復号する機能を有し、その後、得られるシンタックス情報をシンタックス情報格納部１０７に通知する機能を有する。
【００２３】
シンタックス情報格納部１０７は、シンタックス情報取得部１０６から得られる各種のシンタックス情報を格納し、必要に応じて、算術復号部１０８にシンタックス情報を通知する機能を有する。
【００２４】
算術復号部１０８は、復号位置管理部１０５から得られる復号位置情報と、ビットストリームバッファ１０４に格納されているビット列から、復号位置情報によって特定されたビット列の位置から算術復号を行い、復号結果を出力シンタックス情報として出力する機能を有する。
【００２５】
図１１は、図８に示すデコーダ１０１の動作を表すフローチャートである。以下に図１１を用いてデコーダ１０１の動作を説明する。
【００２６】
デコーダ１０１がビットストリームの復号処理を開始すると、ビットストリーム取得部１０２は、復号対象となる入力ビットストリームを取得する（ステップＳ１０１）。
【００２７】
復号位置検出部１０３は、復号位置管理部１０５から復号位置を特定するために必要なスタートコードを取得し（ステップＳ１０２）、ビットストリーム取得部１０２が取得したビットストリームを探索し、ビット列を特定する。
【００２８】
次に、復号位置検出部１０３は、ステップＳ１０２で特定したビット列をビットストリームバッファ１０４に格納する（ステップＳ１０３）。
【００２９】
シンタックス情報取得部１０６は、ビットストリームバッファ１０４に格納されているビット列と、復号位置管理部１０５から得られる復号位置情報に基づいて復号を行い、シンタックス情報を取得し（ステップＳ１０４）、そのシンタックス情報をシンタックス情報格納部１１６に格納する（ステップＳ１０５）。
【００３０】
算術復号部１０８は、ビットストリームバッファ１０４からビット列を取得し、復号位置管理部１０５からビット列の復号位置情報を取得する。また、算術復号部１０８は、復号位置情報から特定されるビット列上の位置のビットをどのように解釈して復号するかを決定するために、シンタックス情報格納部１０７から必要なシンタックス情報を取得する。これらの情報を基に算術復号部１０８は算術復号を行い（ステップＳ１０６）、復号結果である出力シンタックス情報を順次出力し、デコーダは、ビットストリームの復号処理を終了する。
【００３１】
図９は、図８で示した算術復号部１０８をより詳しく示した機能ブロック図である。
【００３２】
算術復号部１０８は、状態遷移管理部１１１、コンテキスト初期化部１１２、コンテキスト初期化情報格納部１１３、コンテキスト変数情報格納部１１４、ビット列カウント部１１５、ビット列情報管理部１１６、コンテキスト特定部１１７、２値算術復号部１１８、復号ビット取得部１１９、およびビット列比較部１２０によって構成される。
【００３３】
状態遷移管理部１１１は、シンタックスに従って現在復号しようとしているシンタックス情報を正しく復号することができるように算術復号部１０８内の内部状態を管理する機能を有する。この状態遷移管理部１１１は、コンテキスト初期化部１１２に対する初期化要求や、ビット列カウント部１１５の制御、ビット列情報管理部１１６の制御、コンテキスト特定部１１７の制御、２値算術復号化部１１８に対する復号開始要求を行うことで、内部状態を管理する。
【００３４】
コンテキスト初期化部１１２は、状態遷移管理部１１１の初期化要求に応じて、算術復号を行う際に使用するコンテキスト変数情報の初期化処理を行う機能を有する。コンテキスト初期化部１１２は、コンテキスト初期化情報格納部１１３に格納されている所定の定数と、復号済みシンタックス情報を利用してコンテキスト変数情報の初期化を行う。CABACの初期化を行う際に必要となる復号済みシンタックス情報は、pic_parameter_set_rbsp()に含まれるpic_init_qp_minus26とslice_header()に含まれるslice_qp_deltaから求めるSliceQPY、slice_header()に含まれるslice_type及びcabac_init_idcである。SliceQPYやコンテキスト変数情報の詳しい初期化に関しては、後述する図１４で説明するため、ここでは省略する。コンテキスト変数情報の初期化は、一般に復号単位を復号する際の先頭で行われ、CABACでは、復号単位がスライスであるため、スライスを復号する度にその先頭でコンテキスト変数情報の初期化が行われる。
【００３５】
コンテキスト初期化情報格納部１１３は、コンテキスト初期化部１１２がコンテキスト変数情報の初期化を行う際に使用する所定の定数を格納する。図１２は、格納されているコンテキスト初期化情報の例として、CABACで用いる所定の定数が記述されたテーブルの一部を抜粋したものである。CABACでは、復号済みシンタックス情報から得られるslice_type、cabac_init_idc、そして各コンテキストを特定するためのctxIdxを利用して、図１２に示すようなコンテキスト初期化情報のテーブルから定数m、nが特定され、コンテキスト変数情報の初期化に利用される。
【００３６】
コンテキスト変数情報格納部１１４は、コンテキスト初期化部１１２の初期化処理によって求められたコンテキスト変数情報を格納する。このコンテキスト変数情報格納部１１４に格納されるコンテキスト変数情報は、２値算術復号化部１１８の復号結果に応じて変更される。図９の構成では、コンテキスト変数情報の更新はコンテキスト特定部１１７を介して行われるが、一般に２値算術復号化部１１８が直接コンテキスト変数情報格納部１１４の内容を変更することができるような構成をとることも可能である。
【００３７】
ビット列カウント部１１５は、現在復号しようとしているビットがビット列中のどの位置に対応するかをカウントする機能を有する。これは、復号するビット位置によってビットの発生確率が違うことから、ビット位置に応じたコンテキスト変数情報を対応付ける必要があるためである。
【００３８】
ビット列情報管理部１１６は、復号しようとしているシンタックス情報の候補となる情報をビット列表記した情報に変換して対応付けを行う機能を有する。この対応関係は、ビット列比較部１２０によって利用される。
【００３９】
コンテキスト特定部１１７は、復号しようとしているビットのコンテキスト変数情報を特定するためのctxIdxを、状態遷移管理部１１１から得られる現在復号しようとしているシンタックス情報の種類に関する情報、ビット列カウント部１１５から得られる現在復号しようとしているビット列中のビット位置、復号済みシンタックス情報に基づいて特定する機能を有する。
【００４０】
２値算術復号部１１８は、コンテキスト特定部１１７により特定されたコンテキスト変数情報を利用して算術復号を行う機能を有する。算術復号によって状態が変化したコンテキスト変数情報は、順次コンテキスト変数情報格納部１１４に格納される。図９においては、コンテキスト特定部１１７を介して行われる。また、２値算術復号部１１８は、算術復号時に正規化によりビットストリームからのビット補充が必要な場合には、復号ビット取得部１１９から必要なビットを補充する。
【００４１】
復号ビット取得部１１９は、２値算術復号化部１１８のビット要求に応じてビットストリームと復号位置情報を用いて取得する機能を有する。
【００４２】
ビット列比較部１２０は、２値算術復号化部１１８の出力結果を保持し、ビット列情報管理部１１６で用意されているビット列情報との比較を行う機能を有する。ビット列情報中に等しいものが存在した場合は、ビット列比較部１２０は、等しいビット列情報に対応するシンタックス情報を取得して出力シンタックス情報として出力し、保持していた２値算術復号化部１１８の出力結果を初期化して次のシンタックス情報の復号に備える。また、ビット列比較部１２０は、必要に応じて状態遷移管理部１１１に出力シンタックス情報を通知する。
【００４３】
図１３は、CABACの復号単位である１スライス分の復号動作を表すフローチャートである。以下に図１３を用いて算術復号部１０８の動作を説明する。
【００４４】
CABACの復号を開始すると、状態遷移管理部１１１は、復号する対象となるシンタックス情報がスライスにおける最初のシンタックス情報であるかを判定し、（ステップＳ１１１）。最初のシンタックス情報である場合は、コンテキスト初期化部１１２に対して初期化要求を、２値算術復号化部１１８に対して初期化要求を行う。最初のシンタックス情報ではない場合は、ステップＳ１１４の処理へ移行する。
【００４５】
コンテキスト初期化部１１２は、状態遷移管理部１１１から初期化要求がされると、コンテキスト変数情報の初期化を行う（ステップＳ１１２）。このコンテキスト変数情報の初期化に関しては、後述する図１４で詳しく説明するため、ここでは省略する。
【００４６】
２値算術復号化部１１８は、状態遷移管理部１１１から初期化要求がされると、rangeを所定の値に初期化し、valueを復号ビット取得部１１９から取得したビットで初期化する（ステップＳ１１３）。
【００４７】
次に、状態遷移管理部１１１が、ビット列情報管理部１１６に対して現在復号しようとするシンタックス情報の候補となる情報をビット列表記した情報に変換して対応付けるよう要求すると、この要求に基づいて、ビット列情報管理部１１６は、ビット列情報を作成する（ステップＳ１１４）。
【００４８】
また、ビット列カウント部１１５は、ビット列カウント部１１５内のビット列カウンタbinIdxを−1に初期化する（ステップＳ１１５）。
【００４９】
次に、ビット列カウント部１１５は、ビット列カウント部１１５内のビット列カウンタbinIdxを1増加する（ステップＳ１１６）。
【００５０】
次に、状態遷移管理部１１１がコンテキスト判定部１１７に対して復号で使用するコンテキスト変数情報を特定するためのctxIdxを特定するように要求すると、コンテキスト判定部１１７は、現在復号しようとしているビットのコンテキスト変数情報を特定するためのctxIdxを、状態遷移管理部１１１から得られる現在復号しようとしているシンタックス情報の種類に関する情報、ビット列カウント部１１５から得られる現在復号しようとしているビット列中のビット位置、復号済みシンタックス情報を利用して特定する（ステップＳ１１７）。
【００５１】
状態遷移管理部１１１が２値算術復号化部１１８に対して復号要求すると、２値算術復号化部１１８は、コンテキスト特定部１１７から特定されたctxIdxに基づいて得られるコンテキスト変数情報を取得し、復号を行う（ステップＳ１１８）。算術復号時に正規化によりビットストリームからのビット補充が必要な場合には、復号ビット取得部１１９から必要なビットを補充する。復号が完了すると、２値算術復号化部１１８は、復号結果をビット列比較部１２０に通知する。
【００５２】
次に、ビット列比較部１２０は、自己が保持している２値算術復号化部１１８からの出力結果と、ビット列情報管理部１１６に格納されているビット列情報との比較を行う（ステップＳ１１９）。ビット列情報中に等しいものが存在しない場合は、ステップＳ１１６に移行し、処理が継続される。ビット列情報中に等しいものが存在した場合は、ビット列比較部１２０は、等しいビット列情報に対応するシンタックス情報を取得して出力シンタックス情報として出力し、保持していた２値算術復号化部１１８の出力結果を初期化して次のシンタックス情報の復号に備える。また、ビット列比較部１２０は、必要に応じて状態遷移管理部１１１に出力シンタックス情報を通知する。
【００５３】
次に、状態遷移管理部１１１は、現在復号対象となっているこれから復号しようとしている次のシンタックス情報がmb_typeであり、かつステップＳ１１８の処理において得られる復号結果がI_PCMであるか否か判定する。この条件を満たす場合には、ステップＳ１２１に移行し、条件を満たさない場合には、CABACの復号を終了する。
【００５４】
２値算術復号化部１１８は、状態遷移管理部１１１から初期化要求がされると、rangeを所定の値に初期化し、valueを復号ビット取得部１１９から取得したビットで初期化する（ステップＳ１２１）。初期化が完了すると、一連のCABACの復号処理が終了する。
【００５５】
図１４は、図１３のコンテキスト変数情報の初期化（ステップＳ１１２）についてより詳しく説明したフローチャートである。以下に図１４を用いてコンテキスト変数情報の初期化処理についてさらに説明する。
【００５６】
コンテキスト変数情報の初期化を開始すると、まず、状態遷移管理部１１１からの初期化要求に応じて、コンテキスト初期化部１１２は、復号済みシンタックス情報から現在復号しようとしているスライスのpic_init_qp_minus26、slice_qp_delta、slice_type、cabac_init_idcを取得する（ステップＳ１３１）。ここでは、コンテキスト初期化部１１２は、pic_init_qp_minus26=4、slice_qp_delta=5、slice_type=0(P slice)、cabac_init_idc=1を取得したものとする。
【００５７】
次に、コンテキスト初期化部１１２は、下記の数式に従ってSliceQPYを算出する（ステップＳ１３２）。
【００５８】
[数１]
SliceQPY=26+pic_init_qp_minus26+slice_qp_delta 
=26+4+5
=35
次に、コンテキスト初期化部１１２は、ステップＳ１３１において取得した復号済みコンテキスト変数情報slice_type、cabac_init_idcから、初期化が必要なctxIdxを特定し、そのctxIdxに対応するm、nをコンテキスト初期化情報格納部１１３から取得する（ステップＳ１３３）。初期化が必要なctxIdxがctxIdx=70であるものとすると、コンテキスト初期化部１１２は、図１２に示すコンテキスト初期化情報のテーブルに従ってm＝13、n＝15を取得する。
【００５９】
次に、コンテキスト初期化部１１２は、ステップＳ１３２で算出されたSliceQPYと、ステップＳ１３３で取得されたm、nを用いて、下記の数式に従って、一時変数preCtxStateを算出する（ステップＳ１３４）。
【００６０】
[数２]
preCtxState=((m×SliceQPY)>>4)+n
=(13×35)>>4+15
=28+15
=43
ここで、数式中の「>>4」は、４ビットの右シフト演算を行うことを示す。
【００６１】
次に、コンテキスト初期化部１１２は、一時変数preCtxStateが1より小さいかどうかを判定する（ステップＳ１３５）。
【００６２】
一時変数preCtxStateが1より小さい場合は、コンテキスト初期化部１１２は、一時変数preCtxStateに１を設定する（ステップＳ１３６）。
【００６３】
一時変数preCtxStateが1より小さくない場合、または、一時変数preCtxStateに１が設定された後、コンテキスト初期化部１１２は、一時変数preCtxStateが126より大きいかどうかを判定する（ステップＳ１３７）。
【００６４】
一時変数preCtxStateが126より大きい場合は、コンテキスト初期化部１１２は、一時変数preCtxStateに126を設定する（ステップＳ１３８）。
【００６５】
一時変数preCtxStateが126より大きくない場合、または、一時変数preCtxStateに126が設定された後、コンテキスト初期化部１１２は、一時変数preCtxStateが63以下であるかを判定する（ステップＳ１３９）。
【００６６】
一時変数preCtxStateが63以下でなかった場合、コンテキスト初期化部１１２は、現在初期化を行っているctxIdxに対応するコンテキスト変数情報の構成要素であるステート情報pStateIdxに一時変数preCtxStateから64を引いた値を設定し、また、コンテキスト初期化部１１２は、コンテキスト変数情報の構成要素である優勢シンボル情報valMPSに1を設定する（ステップＳ１４０）。
【００６７】
また、一時変数preCtxStateが63以下であった場合、コンテキスト初期化部１１２は、現在初期化を行っているctxIdxに対応するコンテキスト変数情報の構成要素であるステート情報pStateIdxに63から一時変数preCtxStateを引いた値を設定し、また、コンテキスト変数情報の構成要素である優勢シンボル情報valMPSに0を設定する（ステップＳ１４１）。ここでは、preCtxState＝43であるため、
[数３]
pStateIdx＝63−preCtxState
＝63−43
＝20
valMPS＝0
となる。
【００６８】
次に、コンテキスト初期化部１１２は、ステップＳ１４０またはステップＳ１４１で求めたコンテキスト変数情報をコンテキスト変数情報格納部１１４に格納する（ステップＳ１４２）。ここでは、pStateIdx＝63−43＝20、valMPS＝0がctxIdx＝70のコンテキスト変数情報としてコンテキスト変数情報格納部１１４に格納される。
【００６９】
次に、コンテキスト初期化部１１２は、初期化すべきctxIdxが存在するかどうかを判定し（ステップＳ１４３）、初期化すべきctxIdxが存在する場合は、ステップＳ１３３に戻り、初期化処理を継続し、初期化すべきctxIdxが存在しない場合は、コンテキスト変数情報の初期化処理を終了する。
【００７０】
以上のようなステップを経ることでCABACはコンテキスト変数情報の初期化処理を行っている。従って、CABACにおけるコンテキストの初期化処理は、pic_init_qp_minus26、slice_qp_delta、slice_type、cabac_init_idcといった復号済みシンタックス情報に依存することになる。また、これらのシンタックス情報に基づいて、CABACの復号単位であるスライスの先頭において、毎回複数のコンテキスト変数情報を初期化する必要がある。
【００７１】
他のJBIGやJPEG2000などでも、同様に複数のコンテキスト変数情報を利用して符号化効率の向上を図っている。
【００７２】
JBIGでは、CABACと類似したコンテキスト変数情報が113存在し、これらのコンテキスト変数情報は、復号単位である画像の復号を開始する先頭で、初期化処理が行われる。
【００７３】
このJBIGにおける初期化処理の改善方法として、特許文献１が開示されている。この特許文献１では、ファクシミリなどで複数ページの画像を算術符号化する時、各画像の属性が変わらない場合、あるページの画像の算術符号化終了時の状態管理変数、つまりステート情報と、優勢シンボル情報を引き継ぎ、属性が変わった場合は、この状態管理変数の初期化を行うことを復号側に通知することで、初期化処理の軽減と圧縮効率の向上を図っている。
【００７４】
特許文献１で開示されている初期化処理の軽減と圧縮効率の向上を試みる方法では、符号化時に各画像の属性の変化を測定して、画像の属性が変化しない場合には、コンテキスト変数情報の初期化を行わずに状態を引き継ぎ、属性が変化した場合には、コンテキスト変数情報の初期化を行うことを復号側に通知することで、復号側での初期化処理を軽減する。しかし、復号側のみで初期化処理の軽減を行うことは考慮されておらず、復号側での画像の属性判定に依存してしまう。
【００７５】
また、JBIG等の初期化処理では、予め所定の定数で初期化することができるが、非特許文献４で用いられるCABACの初期化処理などのように、算術復号で必要となる各コンテキスト変数情報、つまり確率分布の状態を特定するためのステート情報と優勢シンボル情報を、一定の復号化単位毎に変化するシンタックス情報によって対応する各コンテキスト初期化情報を特定し、各コンテキスト変数情報を対応する各コンテキスト初期化情報に基づいて算出しながら、一定の復号化単位毎に毎回初期化しなければならなかった。
【非特許文献１】植松友彦著  「文書データ圧縮アルゴリズム入門」ＣＱ出版  １９９４年
【非特許文献２】ＩＴＵ−Ｔ  Ｔ．８２
【非特許文献３】ＩＳＯ／ＩＥＣ  １５４４４
【非特許文献４】ＩＴＵ−Ｔ  Ｈ．２６４
【特許文献１】特開平６−３１９０４６号公報
【発明の開示】
【発明が解決しようとする課題】
【００７６】
上記の問題点を解決するために本発明では、算術復号を行う際に、コンテキスト変数情報を初期化した場合は、このコンテキスト変数情報を初期化済みコンテキスト変数情報として蓄積し、一定の復号化単位毎に変化するシンタックス情報を監視しながら、取得したシンタックス情報によってすでに初期化されたコンテキスト変数情報が初期化済みコンテキスト変数情報として蓄積されている場合には、この初期化済みコンテキスト変数情報に基づいてコンテキスト変数情報を初期化する。このように算術復号におけるコンテキスト変数情報を初期化する際の演算回数を軽減することにより、コンテキスト変数情報の初期化処理を軽減し、初期化処理にかかる演算量を削減するとともに、初期化処理にかかる演算量の削減によって復号が完了するまでにかかる時間を短縮することで、より高速な算術復号化装置、および算術復号化プログラムを提供することを目的とする。
【課題を解決するための手段】
【００７７】
上記目的を達成するために、請求項１に記載の算術復号化装置は、入力されるビットストリームの復号位置を特定するためのスタートコードを基に、入力される前記ビットストリームを探索して算術復号するビット列を特定し、特定したビット列をバッファメモリに格納し、算術復号を開始するビット列上の位置を示す復号位置情報に基づいて、前記バッファメモリに格納されているビット列のヘッダ情報を復号して、当該復号位置情報によって指定されるビット列上の特定位置におけるビット列を算術復号するための復号手順を示すシンタックス情報を取得し、予め複数用意されているコンテキスト変数情報のうちの１つを、前記シンタックス情報に応じて初期化し、その初期化した前記コンテキスト変数情報を利用して、前記特定位置におけるビット列を算術復号する算術復号化装置であって、前記シンタックス情報の種類に応じて初期化された前記コンテキスト変数情報を初期化済みコンテキスト変数情報として複数格納する初期化済みコンテキスト変数情報格納手段と、前記コンテキスト変数情報の初期化に必要な復号済みの前記シンタックス情報を取得し、当該復号済みのシンタックス情報の種類に従って、前記コンテキスト変数情報が前記初期化済みコンテキスト変数情報格納手段に格納されているか否かを判定し、格納されていなかった場合、前記復号済みのシンタックス情報に応じて前記コンテキスト変数情報の初期化を行った後、前記初期化済みコンテキスト変数情報格納手段に格納し、格納されていた場合、前記復号済みのシンタックス情報に基づいて、前記初期化済みコンテキスト変数情報格納手段から特定の前記コンテキスト変数情報を取得するコンテキスト変数管理手段とを備えることを特徴とする。
【００７８】
また、請求項２に記載の算術復号化プログラムは、入力されるビットストリームの復号位置を特定するためのスタートコードを基に、入力される前記ビットストリームを探索して算術復号するビット列を特定し、特定したビット列をバッファメモリに格納し、算術復号を開始するビット列上の位置を示す復号位置情報に基づいて、前記バッファメモリに格納されているビット列のヘッダ情報を復号して、当該復号位置情報によって指定されるビット列上の特定位置におけるビット列を算術復号するための復号手順を示すシンタックス情報を取得し、予め複数用意されているコンテキスト変数情報のうちの１つを、前記シンタックス情報に応じて初期化し、その初期化した前記コンテキスト変数情報を利用して、前記特定位置におけるビット列を算術復号する算術復号化装置をコンピュータに実現させるための算術復号化プログラムであって、前記コンピュータを、前記シンタックス情報の種類に応じて初期化された前記コンテキスト変数情報を初期化済みコンテキスト変数情報として複数格納する初期化済みコンテキスト変数情報格納手段と、前記コンテキスト変数情報の初期化に必要な復号済みの前記シンタックス情報を取得し、当該復号済みのシンタックス情報の種類に従って、前記コンテキスト変数情報が前記初期化済みコンテキスト変数情報格納手段に格納されているか否かを判定し、格納されていなかった場合、前記復号済みのシンタックス情報に応じて前記コンテキスト変数情報の初期化を行った後、前記初期化済みコンテキスト変数情報格納手段に格納し、格納されていた場合、前記復号済みのシンタックス情報に基づいて、前記初期化済みコンテキスト変数情報格納手段から特定の前記コンテキスト変数情報を取得するコンテキスト変数管理手段として機能させることを特徴とする。
【発明の効果】
【００７９】
本発明では、算術復号におけるコンテキスト変数情報を初期化する際の演算回数を軽減することにより、コンテキスト変数情報の初期化処理を軽減し、初期化処理にかかる演算量を削減できる。また、初期化処理にかかる演算量の削減によって復号が完了するまでにかかる時間を短縮できる。
【発明を実施するための最良の形態】
【００８０】
本発明の実施形態を、図１〜図６を用いて説明する。
【００８１】
図１は、本発明の算術復号化装置であるAVCのデコーダにおいて、本発明の初期化部を備える算術復号部が実際にビットストリームをデコードしてシンタックス情報を出力するまでを示した機能ブロック図である。
【００８２】
デコーダ１は、図１に示すように、ビットストリーム取得部２、復号位置検出部３、ビットストリームバッファ４、復号位置管理部５、シンタックス情報取得部６、シンタックス情報格納部７、および算術復号部８によって構成される。
【００８３】
ビットストリーム取得部２は、符号化されたビットストリームをデコードするために取得する機能を有する。
【００８４】
復号位置検出部３は、ビットストリーム取得部２によって取得されたビットストリーム内を、復号位置管理部５より得られるスタートコードに基づいて探索し、スタートコードと一致したビットストリーム内の位置を検出することでデコードの先頭位置を特定する機能を有する。また、復号位置検出部３は、次の復号位置を特定することで復号単位を特定する機能を有する。ここでは、少なくとも１つのスライスを復号することができるビット列を復号単位として特定できることで、より良い構成となる。このようにして特定されたビットストリーム中のビット列は、後述するビットストリームバッファに格納される。
【００８５】
ビットストリームバッファ４は、復号位置検出部３によって特定されたビット列を格納する。
【００８６】
復号位置管理部５は、ビットストリーム取得部２が取得する入力ビットストリーム中の復号位置を管理する機能を有する。また、復号位置管理部５は、ビットストリームバッファ４に格納されているビット列中の復号位置を管理する機能を有し、必要に応じて復号位置検出部３に対してスタートコードを指定してビットストリームバッファ４内のビット列を更新する機能を有する。さらに、復号位置管理部５は、シンタックス情報取得部６、および算術復号部８に対して、ビットストリームバッファ４内の復号位置情報を通知し、また、算術復号部８からの復号位置の検出要求に応じて復号位置検出部３に検出要求に応じたスタートコードを通知する機能を有する。
【００８７】
シンタックス情報取得部６は、復号位置管理部５から得られる復号位置情報と、ビットストリームバッファ４に格納されているビット列から、後述する算術復号部８で符号化されたビット列よりも上位に位置するヘッダ情報を復号し、得られるシンタックス情報を後述するシンタックス情報格納部７に通知する機能を有する。
【００８８】
シンタックス情報格納部７は、シンタックス情報取得部６から得られる各種のシンタックス情報を格納する。また、シンタックス情報格納部７は、必要に応じて、算術復号部８にシンタックス情報を通知する機能を有する。
【００８９】
算術復号部８は、復号位置管理部５から得られる復号位置情報と、ビットストリームバッファ４に格納されているビット列から、復号位置情報によって特定されたビット列の位置から算術復号を行い、復号結果を出力シンタックス情報として出力する機能を有する。また、算術復号部８は、必要に応じて、復号位置管理部５に対して現在の復号位置よりも前もしくは後ろの復号位置の検出要求を行う機能を有する。
【００９０】
図２は、図１の算術復号部８をより詳しく示したブロック図である。
【００９１】
算術復号部８は、状態遷移管理部１１、コンテキスト変数管理部１２、初期化済みコンテキスト変数情報格納部１３、コンテキスト初期化部１４、コンテキスト初期化情報格納部１５、コンテキスト変数情報格納部１６、ビット列カウント部１７、ビット列情報管理部１８、コンテキスト特定部１９、２値算術復号部２０、復号ビット取得部２１、およびビット列比較部２２によって構成される。
【００９２】
状態遷移管理部１１は、現在復号しようとしているシンタックス情報を正しく復号することができるように算術復号部８内の内部状態を管理する機能を有する。この状態遷移管理部１１は、コンテキスト変数管理部１２に対する初期化要求や、ビット列カウント部１７の制御、ビット列情報管理部１８の制御、コンテキスト特定部１９の制御、２値算術復号化部２０に対する復号開始要求を行うことで、内部状態を管理する。
【００９３】
コンテキスト変数管理部１２は、状態遷移管理部１１からの初期化要求に応じて、コンテキスト変数情報の初期化が必要かどうかを判定する機能を有する。コンテキスト変数情報の初期化判定では、後述する初期化済みコンテキスト変数情報格納部１３に格納されている初期化済みコンテキスト変数情報の中から、取得した復号済みシンタックス情報に基づいて初期化されたものが存在するかどうかを検索する。検索の結果、対応する初期化済みコンテキスト変数情報が存在する場合には、後述するコンテキスト変数情報格納部１６に格納することでコンテキスト変数情報初期化時の演算回数を削減する。また、対応する初期化済みコンテキスト変数情報が存在しない場合には、通常のコンテキスト変数情報の初期化処理を行うため、コンテキスト初期化部１４に対して初期化要求を行い、初期化されたコンテキスト変数情報を初期化済みコンテキスト変数情報として後述する初期化済みコンテキスト変数情報格納部１３に格納するとともに、後述するコンテキスト変数情報格納部１６に格納する。ここで、後述する初期化済みコンテキスト変数情報格納部１３にコンテキスト変数情報を格納する際に、復号済みシンタックス情報から所定の先読み数の分の情報を取得し、初期化済みコンテキスト変数情報格納部１３に対してコンテキスト変数情報の格納を制御できることで、より良い構成となる。所定の先読み数分だけ復号済みシンタックス情報が取得できない場合には、先読み要求情報６０４を図９の復号位置管理部５に通知し、再度復号済みシンタックス情報の取得を試みることができる。
【００９４】
また、コンテキスト変数情報を初期化済みコンテキスト変数情報として格納する際に、初期化済みコンテキスト変数情報格納部１３に格納されている初期化済みコンテキスト変数情報の参照率を保持し、新たに初期化済みコンテキスト変数情報格納部１３に対して追加できなくなった場合に、参照率の最も低いものと置き換えができることで、より良い構成となる。
【００９５】
初期化済みコンテキスト変数情報格納部１３は、コンテキスト初期化部１４によって初期化され、コンテキスト変数管理部１２によって通知されたコンテキスト変数情報を、コンテキスト変数管理部１２が取得する復号済みシンタックス情報に基づいてコンテキスト変数情報の初期化処理を行わずに再利用できるように格納する。
【００９６】
コンテキスト初期化部１４は、コンテキスト変数管理部１２の初期化要求に応じて、算術復号を行う際に使用するコンテキスト変数情報の初期化処理を行う機能を有する。コンテキスト初期化部１４は、コンテキスト初期化情報格納部１５に格納されている所定の定数と、コンテキスト変数管理部１２から通知される復号済みシンタックス情報を利用してコンテキスト変数情報の初期化を行う。
【００９７】
CABACの初期化を行う際に必要となる復号済みシンタックス情報は、pic_parameter_set_rbsp()に含まれるpic_init_qp_minus26と、slice_header()に含まれるslice_qp_deltaから求めるSliceQPY、slice_header()に含まれるslice_type及びcabac_init_idcである。CABACでは、復号単位がスライスであるため、スライスを復号する度にその先頭でコンテキスト変数情報の初期化が行われる。
【００９８】
コンテキスト初期化情報格納部１５は、コンテキスト初期化部１４がコンテキスト変数情報の初期化を行う際に使用する所定の定数を格納する。図１２は、コンテキスト初期化情報格納部１５に格納されているコンテキスト初期化情報の例として、CABACで用いる所定の定数が記述されたテーブルの一部を抜粋したものである。CABACでは、復号済みシンタックス情報から得られるslice_type、cabac_init_idc、そして各コンテキストを特定するためのctxIdxを利用して、図１２に示すようなコンテキスト初期化情報のテーブルから定数m、nが特定され、コンテキスト変数情報の初期化に利用される。
【００９９】
コンテキスト変数情報格納部１６は、算術復号で実際に使用するコンテキスト変数情報を格納し、コンテキスト変数情報の初期化が必要な場合には、状態遷移管理部１１の要求に応じて、コンテキスト変数管理部１２は必要なコンテキスト変数情報を取得し、コンテキスト変数情報格納部１６に通知する機能を有する。また、コンテキスト変数情報格納部１６は、通知されたコンテキスト変数情報に基づいて格納されているコンテキスト変数情報を更新することでコンテキスト変数情報の初期化を行う機能を有する。コンテキスト変数情報格納部１６が格納しているコンテキスト変数情報は、２値算術復号化部２０の復号結果に応じて変更される。
【０１００】
図２に示す算術復号部８の構成では、コンテキスト変数情報の更新はコンテキスト特定部１９を介して行われるが、一般に２値算術復号化部２０が直接コンテキスト変数情報格納部１６の内容を変更することができるような構成をとることも可能である。
【０１０１】
ビット列カウント部１７は、現在復号しようとしているビットがビット列中のどの位置に対応するかをカウントする機能を有する。これは、復号するビット位置によってビットの発生確率が違うことから、ビット位置に応じたコンテキスト変数情報を対応付ける必要があるためである。
【０１０２】
ビット列情報管理部１８は、現在復号しようとしているシンタックス情報の候補となる情報をビット列表記した情報に変換して対応付けを行う機能を有する。この対応関係は、後述するビット列比較部２２によって利用される。
【０１０３】
コンテキスト特定部１９は、現在復号しようとしているビットのコンテキスト変数情報を特定するためのctxIdxを、状態遷移管理部１１から得られる現在復号しようとしているシンタックス情報の種類に関する情報、ビット列カウント部１７から得られる現在復号しようとしているビット列中のビット位置、復号済みシンタックス情報を利用して特定する機能を有する。
【０１０４】
２値算術復号化部２０は、コンテキスト特定部１９により特定されたコンテキスト変数情報を利用して算術復号を行う機能を有する。算術復号によって状態が変化したコンテキスト変数情報は、順次コンテキスト変数情報格納部１６に反映される。図２の算術復号部８においては、コンテキスト特定部１９を介して行われる。また、算術復号時に正規化によりビットストリームからのビット補充が必要な場合には、２値算術復号化部２０は、復号ビット取得部２１から必要なビットを補充する。
【０１０５】
復号ビット取得部２１は、２値算術復号化部２０のビット要求に応じてビットストリームと復号位置情報を用いて取得する機能を有する。
【０１０６】
ビット列比較部２２は、２値算術復号化部２０の出力結果を保持し、ビット列情報管理部１８で用意されているビット列情報との比較を行う機能を有する。ビット列情報中に等しいものが存在した場合は、ビット列比較部２２は、等しいビット列情報に対応するシンタックス情報を取得して出力シンタックス情報として出力し、保持していた２値算術復号化部２０の出力結果を初期化して次のシンタックス情報の復号に備える。また、ビット列比較部２２は、必要に応じて状態遷移管理部１１に出力シンタックス情報を通知する。
【０１０７】
図３は、ビットストリーム復号時の処理手順を示すフローチャートである。以下に図３を用いて、まず、デコーダ１の復号処理時における動作の概要について説明する。
【０１０８】
まず、デコーダ１がビットストリームの復号処理を開始すると、ビットストリーム取得部２は、入力ビットストリームを取得するため、復号対象となる入力ビットストリームを取得する（ステップＳ０１）。
【０１０９】
次に、復号位置検出部３は、復号位置管理部５から復号位置を特定するために必要なスタートコードを取得する（ステップＳ０２）。復号位置検出部３は、ビットストリーム取得部２が取得したビットストリームを探索、ビット列を特定し、特定したビット列をビットストリームバッファ４に格納する（ステップＳ０３）。
【０１１０】
次に、シンタックス情報取得部６は、シンタックス情報を取得するため、ビットストリームバッファ４に格納されているビット列と、復号位置管理部５から得られる復号位置情報に基づいて復号を行い、シンタックス情報を取得し（ステップＳ０４）、取得したシンタックス情報をシンタックス情報格納部７に格納する（ステップＳ０５）。
【０１１１】
復号位置管理部５は、算術復号部８から必要に応じて通知される復号位置検出要求に基づいて、算術復号を実行する際に、ビットストリーム内を先読みして次のシンタックス情報を取得する必要があるかどうかを判定する（ステップＳ０６）。次のシンタックス情報が必要な場合には、ステップＳ０２の処理に移行する。
【０１１２】
算術復号を行うため、算術復号部８は、ビットストリームバッファ４からビット列を取得、また、復号位置管理部５からビット列の復号位置情報を取得し、復号位置情報から特定されるビット列上の位置のビットをどのように解釈して復号するかを決定するために、シンタックス情報格納部から必要なシンタックス情報を取得する。算術復号部８は、これらの情報を基に算術復号を行い、復号結果である出力シンタックス情報を順次出力する（ステップＳ０７）。
【０１１３】
次に、コンテキスト変数情報の初期化処理について説明する。図４は、コンテキスト変数情報の初期化処理における処理手順を示すフローチャートである。以下に、図４を用いて算術復号部８の動作を説明する。
【０１１４】
コンテキスト変数情報の初期化を開始すると、コンテキスト変数管理部１２は、コンテキスト変数情報の初期化に必要なパラメータを取得する（ステップＳ１１）。図２では、コンテキスト変数管理部１２が初期化要求を受けた際に取得する復号済みシンタックス情報が、コンテキスト変数情報の初期化に必要なパラメータとなる。
【０１１５】
次に、コンテキスト変数管理部１２は、取得したパラメータによって初期化されたコンテキスト変数情報が存在するか否かを判定する（ステップＳ１２）。図２に示す算術復号部８においては、コンテキスト変数管理部１２は、ステップＳ１１において取得したパラメータである復号済みシンタックス情報に基づいて初期化済みコンテキスト変数情報格納部１３に格納されている初期化済みコンテキスト変数情報を検索する。取得したパラメータで初期化されたコンテキスト変数情報が初期化済みコンテキスト変数情報格納部１３に格納されている場合には、ステップＳ１５の処理に移行し、それ以外は、ステップＳ１３の処理に移行する。
【０１１６】
取得したパラメータで初期化されたコンテキスト変数情報が初期化済みコンテキスト変数情報格納部１３に格納されていない場合、コンテキスト変数管理部１２は、コンテキスト初期化部１４に対して初期化要求を行う（ステップＳ１３）。この初期化要求によって、コンテキスト初期化部１４は、通常のコンテキスト変数情報の初期化処理を行う。
【０１１７】
コンテキスト変数管理部１２は、コンテキスト初期化部１４によって初期化されたコンテキスト変数情報を取得し、初期化済みコンテキスト変数情報格納部１３に格納する（ステップＳ１４）。
【０１１８】
次に、コンテキスト変数管理部１２は、取得した復号済みシンタックス情報に基づいて、初期化済みコンテキスト変数情報格納部１３に格納されている初期化済みコンテキスト変数情報から検索することにより該当するコンテキスト変数情報を特定する（ステップＳ１５）。
【０１１９】
次に、コンテキスト変数管理部１２は、ステップＳ１５で特定したコンテキスト変数情報をコンテキスト変数情報格納部１６に格納する（ステップＳ１６）。
【０１２０】
このようにして、復号時に必要なコンテキスト変数情報の初期化処理が行われる。
【０１２１】
次に、コンテキスト変数情報の初期化処理について、図５のフローチャートに基づいて、詳細に説明する。
【０１２２】
コンテキスト変数情報の初期化を開始すると、状態遷移管理部１１からの初期化要求に応じて、コンテキスト変数管理部１２は、復号済みシンタックス情報から現在復号しようとしているスライスのpic_init_qp_minus26、slice_qp_delta、slice_type、cabac_init_idcを取得する（ステップＳ２１）。ここでは、pic_init_qp_minus26＝4、slice_qp_delta＝5、slice_type＝0（P slice）、cabac_init_idc＝1を取得したものとする。
【０１２３】
ここで、初期化済みコンテキスト変数情報格納部１３に対するコンテキスト変数情報の格納を制御するための所定の先読み数が設定されている場合には、コンテキスト変数管理部１２は、復号済みシンタックス情報から所定の先読み数分の情報を取得する。所定の先読み数分だけ復号済みシンタックス情報が取得できない場合には、コンテキスト変数管理部１２は、先読み要求情報を復号位置管理部５に通知し、再度復号済みシンタックス情報の取得を行う。
【０１２４】
次に、現在復号しようとしているシンタックス情報に該当する初期化済みコンテキスト変数情報を検索するため、コンテキスト変数管理部１２は、取得した復号済みシンタックス情報の種類に基づいて、初期化済みコンテキスト変数情報格納部１３に格納されている初期化済みコンテキスト変数情報から取得した復号済みシンタックス情報に対応するコンテキスト変数情報が存在するか検索し（ステップＳ２２）、初期化済みコンテキスト変数情報が存在するかを判定する（ステップＳ２３）。対応する初期化済みコンテキスト変数情報が存在する場合には、ステップＳ２４の処理に移行し、それ以外は、ステップＳ２５の処理に移行する。
【０１２５】
対応する初期化済みコンテキスト変数情報が存在する場合、コンテキスト変数管理部１２は、初期化済みコンテキスト変数情報格納部１３から特定したコンテキスト変数情報をコンテキスト変数情報格納部１６に格納し（ステップＳ２４）、コンテキスト変数情報の初期化処理を終了する。
【０１２６】
また、対応する初期化済みコンテキスト変数情報が存在しない場合、コンテキスト変数管理部１２は、下記の数式に従ってSliceQPYを算出する（ステップＳ２５）。
【０１２７】
[数４]
SliceQPY=26+pic_init_qp_minus26+slice_qp_delta 
=26+4+5
=35
次に、コンテキスト初期化部１４は、ステップＳ２１において取得した復号済みコンテキスト変数情報slice_type、cabac_init_idcから、初期化が必要なctxIdxを特定し、そのctxIdxに対応するｍ、ｎをコンテキスト初期化情報格納部１５から取得する（ステップＳ２６）。ここでは、初期化が必要なctxIdxがctxIdx＝70であるものとすると、図１１に示すコンテキスト初期化情報のテーブルに従ってm＝13、n＝15を取得する。
【０１２８】
次に、コンテキスト初期化部１４は、ステップＳ２５で算出されたSliceQPYと、ステップＳ２６で取得されたｍ、ｎを用いて、下記の数式に従って一時変数preCtxStateを算出する（ステップＳ２７）。
【０１２９】
[数５]
preCtxState=((m×SliceQPY)>>4)+n
=(13×35)>>4+15
=28+15
=43
ここで、数式中の「>>4」は、４ビットの右シフト演算を行うことを示す。
【０１３０】
次に、コンテキスト初期化部１４は、一時変数preCtxStateが1より小さいかどうかを判定する（ステップＳ２８）。一時変数preCtxStateが1より小さい場合は、ステップＳ２９の処理に移行し、それ以外の場合は、ステップＳ３０の処理に移行する。
【０１３１】
一時変数preCtxStateが1より小さい場合、コンテキスト初期化部１４は、一時変数preCtxStateに１を設定する（ステップＳ２９）。
【０１３２】
次に、コンテキスト初期化部１４は、一時変数preCtxStateが126より大きいかどうかを判定する（ステップＳ３０）。一時変数preCtxStateが126より大きい場合は、ステップＳ３１の処理に移行し、それ以外の場合は、ステップＳ３２の処理に移行する。
【０１３３】
一時変数preCtxStateが126より大きい場合、コンテキスト初期化部１４は、一時変数preCtxStateに126を設定する（ステップＳ３１）。
【０１３４】
次に、コンテキスト初期化部１４は、一時変数preCtxStateが63以下であるかを判定する（ステップＳ３２）。一時変数preCtxStateが63以下の場合は、ステップＳ３４の処理に移行し、それ以外の場合は、ステップＳ３３の処理に移行する。
【０１３５】
一時変数preCtxStateが63以下でない場合、コンテキスト初期化部１４は、現在初期化を行っているctxIdxに対応するコンテキスト変数情報の構成要素であるステート情報pStateIdxに一時変数preCtxStateから64を引いた値を設定し、また、コンテキスト変数情報の構成要素である優勢シンボル情報valMPSに1を設定する（ステップＳ３３）。
【０１３６】
また、一時変数preCtxStateが63以下の場合、コンテキスト初期化部１４は、現在初期化を行っているctxIdxに対応するコンテキスト変数情報の構成要素であるステート情報pStateIdxに63から一時変数preCtxStateを引いた値を設定し、また、コンテキスト変数情報の構成要素である優勢シンボル情報valMPSに0を設定する（ステップＳ３４）。
【０１３７】
ここでは、preCtxState＝43であるため、
[数６]
pStateIdx＝63−preCtxState
＝63−43
＝20
valMPS＝0
となる。
【０１３８】
次に、コンテキスト初期化部１４は、ステップＳ３３またはステップＳ３４において取得されたコンテキスト変数情報をコンテキスト変数情報格納部１６に格納する（ステップＳ３５）。更に、コンテキスト初期化部１４は、同様のコンテキスト変数情報を初期化済みコンテキスト変数情報として初期化済みコンテキスト変数情報格納部１３に格納する。
【０１３９】
ここでは、pStateIdx＝63−43＝20、valMPS＝0が、ctxIdx＝70のコンテキスト変数情報としてコンテキスト変数情報格納部１６および初期化済みコンテキスト変数情報格納部１３に格納される。
【０１４０】
ここで、所定の先読み量が設定されており、ステップＳ２１において、所定の先読み量の分だけ復号済みシンタックス情報が取得できている場合には、現在のコンテキスト変数情報を初期化した条件が、取得した復号済みシンタックス情報に該当する場合のみ格納し、それ以外は格納せずに破棄することで、初期化済みコンテキスト変数情報格納部１３に対する格納を制御する。
【０１４１】
コンテキスト初期化部１４は、初期化すべきctxIdxが存在するか否かを判定し（ステップＳ３６）、初期化すべきctxIdxが存在する場合は、ステップＳ２６の処理に移行し、初期化処理を継続し、初期化すべきctxIdxが存在しない場合は、コンテキスト変数情報の初期化処理を終了する。
【０１４２】
このように、不必要なコンテキスト変数情報の初期化処理を軽減し、初期化処理にかかる演算量を削減するとともに、初期化処理にかかる演算量の削減によって、復号が完了するまでにかかる時間を短縮できる。特に、コンテキスト変数管理部１２、初期化済みコンテキスト変数情報格納部１３を備えることで、一定の復号化単位毎に毎回初期化していたコンテキスト変数情報の再利用が可能となる。
【０１４３】
次に、本実施形態におけるCABACの復号処理について、図６のフローチャートに基づいて説明する。図６は、CABACの復号単位である１スライス分の復号動作を表すフローチャートである。
【０１４４】
CABACの復号処理を開始すると、状態遷移管理部１１は、復号する対象となるシンタックス情報がスライスにおける最初のシンタックス情報であるかを判定する（ステップＳ４１）。復号する対象となるシンタックス情報が最初のシンタックス情報である場合は、ステップＳ４２の処理へ移行し、最初のシンタックス情報ではない場合は、ステップＳ４４の処理へ移行する。
【０１４５】
復号する対象となるシンタックス情報が最初のシンタックス情報である場合、状態遷移管理部１１は、コンテキスト変数管理部１２に対して初期化要求を行い、コンテキスト初期化部１４は、状態遷移管理部１１から初期化要求がされると、上述のコンテキスト変数情報の初期化を行う（ステップＳ４２）。
【０１４６】
また、状態遷移管理部１１が２値算術復号化部２０対して初期化要求を行うと、２値算術復号化部２０は、rangeを所定の値に初期化し、valueを復号ビット取得部２１から取得したビットで初期化する（ステップＳ４３）。
【０１４７】
次に、状態遷移管理部１１がビット列情報管理部１８に対して現在復号しようとするシンタックス情報の候補となる情報をビット列表記した情報に変換して対応付けるよう要求すると、この要求に基づいて、ビット列情報管理部１８は、ビット列情報を作成する（ステップＳ４４）。
【０１４８】
次に、状態遷移管理部１１は、ビット列カウント部１７内のビット列カウンタbinIdxを‐1に初期化する（ステップＳ４５）。
【０１４９】
次に、状態遷移管理部１１は、ビット列カウント部１７内のビット列カウンタbinIdxを１増加する（ステップＳ４６）。
【０１５０】
次に、状態遷移管理部１１がコンテキスト判定部１９に対して、復号で使用するコンテキスト変数情報を特定するためのctxIdxを特定するように要求すると、コンテキスト判定部１９は、現在復号しようとしているビットのコンテキスト変数情報を特定するためのctxIdxを、状態遷移管理部１１から得られる現在復号しようとしているシンタックス情報の種類に関する情報、ビット列カウント部１７から得られる現在復号しようとしているビット列中のビット位置、復号済みシンタックス情報を利用して特定する（ステップＳ４７）。
【０１５１】
次に、状態遷移管理部１１が２値算術復号化部２０に対して復号要求すると、２値算術復号化部２０は、コンテキスト特定部１９から特定されたctxIdxに基づいて得られるコンテキスト変数情報を取得し、復号を行う（ステップＳ４８）。算術復号時に正規化によりビットストリームからのビット補充が必要な場合には、２値算術復号化部２０は、復号ビット取得部２１から必要なビットを補充し、また、復号が完了すると、復号結果をビット列比較部２２に通知する。
【０１５２】
ビット列比較部２２は、保持している２値算術復号化部２０からの出力結果と、ビット列情報管理部１８で用意されているビット列情報との比較を行い、ビット列情報中に等しいものが存在するか否かを判定する（ステップＳ４９）。ビット列情報中に等しいものが存在しない場合は、ステップＳ４６の処理に移行し、処理を継続する。ビット列情報中に等しいものが存在した場合は、ビット列比較部２２は、等しいビット列情報に対応するシンタックス情報を取得して出力シンタックス情報として出力し、保持していた２値算術復号化部２０の出力結果を初期化して次のシンタックス情報の復号に備え、必要に応じて状態遷移管理部１１に出力シンタックス情報を通知する。
【０１５３】
次に、状態遷移管理部１１は、現在復号対象となっているこれから復号しようとしている次のシンタックス情報がmb_typeであり、かつステップＳ４８の処理において得られる復号結果がI_PCMであるか否か判定する。この条件を満たす場合には、ステップＳ５１に移行し、条件を満たさない場合には、CABACの復号を終了する。
【０１５４】
ステップＳ５１では、ステップＳ４３と同様の処理を行うことで、２値算術復号化部２０の状態を初期化する。初期化が完了すると、CABACの復号を終了する。
【０１５５】
このように処理を行うことによって、コンテキスト変数情報を初期化する際の演算回数が軽減され、算術復号時の初期化処理の高速化を図ることが可能となる。
【０１５６】
なお、本発明は、上記の算術復号化装置（デコーダ１）の機能をコンピュータに実現させるためのプログラムを含むものである。このプログラムは、記録媒体から読み取られてコンピュータに取り込まれても良いし、通信ネットワークを介して伝送されコンピュータに取り込まれても良い。
【図面の簡単な説明】
【０１５７】
【図１】本発明のデコーダの基本構成を示す機能ブロック図である。
【図２】本発明の算術復号部の構成を示す機能ブロック図である。
【図３】本発明の基本動作を示すフローチャートである。
【図４】本発明の算術復号部の基本動作を示すフローチャートである。
【図５】本発明の算術復号部の詳細な動作を示すフローチャートである。
【図６】本発明の算術復号部の動作を示すフローチャートである。
【図７】算術符号化・復号化の概念を説明するための概念図である。
【図８】CABACの基本構成を示す機能ブロック図である。
【図９】CABACにおける算術復号部の構成を示す機能ブロック図である。
【図１０】コンテキスト切り替えによる系列の分離を説明するための図である。
【図１１】CABACの基本動作を示すフローチャートである。
【図１２】CABACにおいてコンテキスト変数情報を初期化する際に使用するパラメータm、nの例を示すための図である。
【図１３】CABACにおける算術復号部の動作を示すフローチャートである。
【図１４】CABACにおけるコンテキスト変数情報の初期化処理における動作を示すフローチャートである。
【符号の説明】
【０１５８】
１  デコーダ
２  ビットストリーム取得部
３  復号位置検出部
４  ビットストリームバッファ
５  復号位置管理部
６  シンタックス情報取得部
７  シンタックス情報格納部
８  算術復号部
１１  状態遷移管理部
１２  コンテキスト変数管理部
１３  初期化済みコンテキスト変数情報格納部
１４  コンテキスト初期化部
１５  コンテキスト初期化情報格納部
１６  コンテキスト変数情報格納部
１７  ビット列カウント部
１８  ビット列情報管理部
１９  コンテキスト特定部
２０  ２値算術復号化部
２１  復号ビット取得部
２２  ビット列比較部
１０１  デコーダ
１０２  ビットストリーム取得部
１０３  復号位置検出部
１０４  ビットストリームバッファ
１０５  復号位置管理部
１０６  シンタックス情報取得部
１０７  シンタックス情報格納部
１０８  算術復号部
１１１  状態遷移管理部
１１２  コンテキスト初期化部
１１３  コンテキスト初期化情報格納部
１１４  コンテキスト変数情報格納部
１１５  ビット列カウント部
１１６  ビット列情報管理部
１１７  コンテキスト特定部
１１８  ２値算術復号化部
１１９  復号ビット取得部
１２０  ビット列比較部
【図１】
2005223533.tif 000003
【図２】
2005223533.tif 000004
【図３】
2005223533.tif 000005
【図４】
2005223533.tif 000006
【図５】
2005223533.tif 000007
【図６】
2005223533.tif 000008
【図７】
2005223533.tif 000009
【図８】
2005223533.tif 000010
【図９】
2005223533.tif 000011
【図１０】
2005223533.tif 000012
【図１１】
2005223533.tif 000013
【図１２】
2005223533.tif 000014
【図１３】
2005223533.tif 000015
【図１４】
2005223533.tif 000016