(57)【特許請求の範囲】
【請求項１】
算術符号化された符号化データを確率状態および優勢確率シンボルを表すコンテキスト変数に基づいて復号する算術復号演算器と、
前記算術復号演算器に前記コンテキスト変数を供給して前記算術復号演算器による演算結果を保持する複数本の演算レジスタと、
前記演算レジスタの保持内容を退避するための複数本の退避レジスタと
を具備し、
前記複数本の退避レジスタは、前記コンテキスト変数のうち所定のシンタックス要素に係るもののみを退避し、
前記所定のシンタックス要素は、複数のグループに分類され、
前記複数本の退避レジスタの各々は、前記分類されたグループに対応してそれぞれコンテキスト変数を退避する
算術復号装置。
【請求項２】
前記複数のグループは、マクロブロックに関するシンタックス要素のグループと、動きベクトル情報に関するシンタックス要素のグループと、画素予測に関するシンタックス要素のグループと、ブロック情報に関するシンタックス要素のグループとを含む
請求項１記載の算術復号装置。
【請求項３】
前記マクロブロックに関するシンタックス要素のグループは、「ｍｂ＿ｔｙｐｅ」と、「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」と、「ｓｕｂ＿ｍｂ＿ｔｙｐｅ」とを含み、
前記動きベクトル情報に関するシンタックス要素のグループは、「ｍｖｄ＿ｌ０［］［］［０］」と、「ｍｖｄ＿ｌ１［］［］［０］」と、「ｍｖｄ＿ｌ０［］［］［１］」と、「ｍｖｄ＿ｌ１［］［］［１］」とを含み、
前記画素予測に関するシンタックス要素のグループは、「ｒｅｆ＿ｉｄｘ＿ｌ０」と、「ｒｅｆ＿ｉｄｘ＿ｌ１」と、「ｍｂ＿ｑｐ＿ｄｅｌｔａ」と、「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」と、「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」と、「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」と、「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」と、「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」とを含み、
前記ブロック情報に関するシンタックス要素のグループは、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」と、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」と、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」とを含む
請求項２記載の算術復号装置。
【請求項４】
復号対象のスライスタイプがＩまたはＳＩの場合には「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」を前記画素予測に関するシンタックス要素のグループに含ませて管理する
請求項３記載の算術復号装置。
【請求項５】
前記複数本の演算レジスタおよび前記複数本の退避レジスタの各々は、１２８ビット幅のレジスタであり、８ビット毎に７ビットのコンテキスト変数を１個ずつ割り当てて、１６個のコンテキスト変数を格納し、８ビット毎に余っている１ビットを集めた１６ビットを余剰レジスタとして１個または２個のコンテキスト変数を格納する
請求項１記載の算術復号装置。
【請求項６】
前記複数本の演算レジスタおよび前記複数本の退避レジスタの何れか１本を転送元レジスタとして当該転送元レジスタに格納された１６個のコンテキスト変数のうちの２個における７ビットを交換するとともに、それ以外の２個のコンテキスト変数の１４ビットの値と前記余剰レジスタのうちの１４ビットの値とを交換して、前記複数本の演算レジスタおよび前記複数本の退避レジスタの何れか１本を転送先レジスタとして転送する交換転送処理部をさらに具備する
請求項５記載の算術復号装置。
【請求項７】
前記交換が行われたことを示す交換状態情報を前記余剰レジスタに割り当て、
前記交換転送処理部は、指定された１ビットの値と前記交換状態情報とが等しい場合には前記交換を行うことなく前記転送元レジスタの格納内容を前記転送先レジスタに転送し、前記指定された１ビットの値と前記交換状態情報とが異なる場合には前記交換を行うとともに前記交換状態情報を反転して前記転送元レジスタの格納内容を前記転送先レジスタに転送する
請求項６記載の算術復号装置。
【請求項８】
前記複数本の演算レジスタおよび前記複数本の退避レジスタの何れかの格納内容を保持する転送バッファと、
前記転送バッファに保持されるコンテキスト変数のうち指定されたものの初期値を生成するコンテキスト変数初期値生成部とをさらに具備し、
前記転送バッファは、前記コンテキスト変数初期値生成部により生成された前記初期値によってその格納内容を変更した上で前記転送先レジスタに転送する
請求項７記載の算術復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、算術復号方式に関し、特にコンテキスト適応型二値算術符号化方式（ＣＡＢＡＣ：Context-Adaptive Binary Arithmetic Coding）により符号化されたデータを復号する算術復号装置に関する。
【背景技術】
【０００２】
コンテキスト適応型二値算術符号化方式（ＣＡＢＡＣ）は、ＩＴＵ−Ｔ（International Telecommunication Union - Telecommunication standardization sector：国際電気通信連合の電気通信標準化部門）において標準化されたＨ．２６４における、エントロピー符号化方式の一つである。このＣＡＢＡＣでは、符号化前に各種多値データを「０」か「１」のシンボルで表現することにより二値化する。それを二値算術符号化処理によって符号化する。復号（デコード）の際にはその逆の処理を行うことになる。
【０００３】
二値算術符号化処理は、「０」か「１」のシンボルで表現されたデータをさらに出現確率が高いと推測される方のシンボルを優勢確率シンボル（ＭＰＳ：Most Probable Symbol）とし、ＭＰＳでない方を劣勢確率シンボル（ＬＰＳ：Least Probable Symbol）として、｛０，１｝から｛ＬＰＳ，ＭＰＳ｝に置き換える処理である。そして、ＬＰＳまたはＭＰＳの２シンボルによって表現された二値データを算術符号で符号化する。ＭＰＳが「０」であるか「１」であるかは、処理済みのデータに基づいて１シンボルごとに予測されて決定される。すなわち、符号化（エンコード）の際は符号化済みのデータのみから次に符号化するシンボルのＭＰＳ値が決まり、復号の際には復号済みのデータのみから次に復号するシンボルのＭＰＳ値が決まる。
【０００４】
また、二値算術符号化処理では、予め用意された複数の確率モデル（コンテキスト）の中から現在の状態に適合するものに順次切り替えながら処理が行われる。ＣＡＢＡＣでは、それぞれのコンテキストに対応したコンテキスト変数をコンテキスト変数テーブルに格納しておいて、コンテキストインデックス（ｃｔｘＩｄｘ）によってコンテキスト変数ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］を特定する。Ｈ．２６４のＣＡＢＡＣ復号に必要なコンテキスト変数は、全部で４６０個存在する。すなわち、コンテキストインデックス（ｃｔｘＩｄｘ）は、「０」から「４５９」の値を示す。各コンテキスト変数とコンテキストインデックスとの関係は、図４７乃至図４９に示す通りである。
【０００５】
各コンテキスト変数は、出現確率を示す６ビットの確率状態インデックスｐＳｔａｔｅＩｄｘと、出現確率の高い優勢確率シンボル（ＭＰＳ）を示す１ビットのｖａｌＭＰＳから成る７ビットの値により構成される。ｐＳｔａｔｅＩｄｘは、そのコンテキストにおけるＬＰＳの出現確率の推定値を、予め定義された「０」から「６３」までの確率状態によって表す。ｖａｌＭＰＳは、ＭＰＳに該当するシンボルが「０」または「１」の何れであるかを表す。
【０００６】
ＣＡＢＡＣ復号器では、コンテキスト変数が１つ選択され、そのコンテキスト変数に基づいて１つのＢｉｎ（２値データの１ビット）が復号される。そして、その復号されたＢｉｎによってコンテキスト変数が更新される。ＣＡＢＡＣ復号器では、マクロブロックを構成するパラメータ毎に復号の方法が定義されている。このパラメータは、シンタックス要素（ＳＥ：Syntax Element）と呼ばれる。１つのシンタックス要素の復号は、複数のコンテキスト変数を使用して復号した複数のＢｉｎに対して、シンタックス要素毎に決められている多値化の方法に従って、シンタックス要素の多値データを求めることによって行われる。
【０００７】
１つのＢｉｎを復号する場合、１つ前に復号されたＢｉｎの値によってそのコンテキストインデックスが決まるようになっているものは、コンテキストインデックスの昇順において各シンタックス要素の先頭や中間に存在することが多い。各シンタックス要素のＢｉｎの長さも直前のＢｉｎを復号するまで確定しないものが多い。そのため、１つのシンタックス要素の復号が終わり、別のシンタックス要素を復号する際においても、コンテキストインデックスは直前のＢｉｎを復号するまで決まらないことになる。さらに、１つのシンタックス要素の復号において、同じコンテキストインデックスのコンテキスト変数を連続して使用する場合もあれば、毎回異なるコンテキストインデックスのコンテキスト変数を使用する場合もある。
【０００８】
例えば、図５０は、スライスタイプがＢスライスである場合の、「ｍｂ＿ｔｙｐｅ」の復号フローを示す図である。最初のコンテキストインデックスが「２７」、「２８」、「２９」の何れから始まるかを決める処理があり、その後も直前の復号結果によって分岐先が変わる。「０」または「１」のラベルは直前の復号結果のＢｉｎを示しており、そのラベルに従って各枝の処理が行われる。枝のラベルのないものは直前のＢｉｎに関係なく実行される。円内の数字がコンテキストインデックスである。
【０００９】
また、各シンタックス要素に割り当てられたコンテキスト変数の数も様々である。そして、同じシンタックス要素のコンテキスト変数のコンテキストインデックスは近い値であり、先に使用されるものから昇順に並んでいる。ただし、コンテキストインデックスが近い値のシンタックス要素同士は、必ずしも復号される順番通りには並んでいない。
【００１０】
ここで、メモリ上にコンテキストインデックスの順番に並べた配列としてコンテキスト変数を管理して、それをプロセッサから読み出して処理することを考える。３２ビット単位などで複数のコンテキスト変数をまとめてアクセスする場合、同じシンタックス要素であれば近くに並んでいるため、メモリアクセス回数が減って比較的効率が良い。アクセス回数をさらに減らすために、１２８ビットのような大きな単位で複数のシンタックス要素のコンテキスト変数を同時にアクセスすると、同時に取り込んだ別のシンタックス要素が必ずしもすぐに復号されず、効率が悪くなる。
【００１１】
メモリの占有量を少なくするために、コンテキスト変数をコンテキストインデックスの順番通りに隙間なく８ビット単位で配置することを想定する。コンテキスト変数の最も多いシンタックス要素は１５個であるため、１２８ビットあれば１つのシンタックス要素を収めることができる（８ビット×１５個＝１２０ビット）。一方、各シンタックス要素が１２８ビット単位のアラインメント境界を跨いで配置されてしまうと、１２８ビット単位でアクセスしても同じシンタックス要素を１度のメモリアクセスで済ませることができないという問題もある。
【００１２】
ＣＡＢＡＣ復号器をより効率良く動作させるためには、コンテキスト変数へのアクセスレイテンシが短いことが望ましく、また、ＣＡＢＡＣ復号処理以外の要因でアクセスレイテンシが変化することは復号処理速度性能を保証することを困難にするため好ましくない。そのため、専用の記憶領域にコンテキスト変数を格納しておくことが理想的である。しかし、４６０個のコンテキスト変数を記憶するために専用の記憶領域の全てをフリップフロップのレジスタとして実装するのは回路規模が大き過ぎて現実的ではなく、ＳＲＡＭ（Static Random Access Memory）などで実現することになる。ＳＲＡＭを使用すると、コンテキスト変数へのアクセスレイテンシが増えるため、ＣＡＢＡＣの復号処理速度が低下する。これを解決するための技術として、例えば、出現頻度の高いシンタックス要素をアクセスレイテンシの小さなメモリに保持したコンテキスト変数によって処理する動画像処理装置が提案されている（例えば、特許文献１参照。）。
【特許文献１】特開２００７−３００５１７号公報（図１）
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上述の従来技術によれば、出現頻度の高いシンタックス要素を処理する際にアクセスレイテンシの小さなメモリを利用することができるため、処理速度を高速化することができる。
【００１４】
しかしながら、上述の従来技術は、アクセスレイテンシの短い格納場所に一時的に保存するものとして、出願頻度が高いシンタックス要素である「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」を想定しており、復号処理全体を高速化するには必ずしも十分ではない。
【００１５】
本発明はこのような状況に鑑みてなされたものであり、コンテキスト適応型二値算術復号処理のために、シンタックス要素の処理態様に合致したレジスタ構成を備える算術復号装置を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、上記課題を解決するためになされたものであり、その第１の側面は、算術符号化された符号化データを確率状態および優勢確率シンボルを表すコンテキスト変数に基づいて復号する算術復号演算器と、上記算術復号演算器に上記コンテキスト変数を供給して上記算術復号演算器による演算結果を保持する複数本の演算レジスタと、上記演算レジスタの保持内容を退避するための複数本の退避レジスタとを具備する算術復号装置である。これにより、複数本の演算レジスタから算術復号演算器にコンテキスト変数を供給して復号を行い、復号処理の進行状況に応じて演算レジスタの保持内容を複数本の退避レジスタに退避させるという作用をもたらす。
【００１７】
また、この第１の側面において、上記複数本の退避レジスタは、上記コンテキスト変数のうち所定のシンタックス要素に係るもののみを退避するようにしてもよい。これにより、退避されたコンテキスト変数はメモリにストアされることなく、次に使用されるまでその内容が保持されるという作用をもたらす。例えば、実施の形態における第１乃至第４のコンテキストグループのシンタックス要素に係るコンテキスト変数は、退避レジスタに退避することにより、メモリへのアクセスが回避される。
【００１８】
また、この場合、上記所定のシンタックス要素は、複数のグループに分類され、上記複数本の退避レジスタの各々は、上記分類されたグループに対応してそれぞれコンテキスト変数を退避するようにしてもよい。これにより、グループ毎にコンテキスト変数を退避させるという作用をもたらす。実施の形態における第１乃至第４のコンテキストグループでは、コンテキストグループ毎にコンテキスト変数が退避される。
【００１９】
例えば、上記複数のグループは、マクロブロックに関するシンタックス要素のグループと、動きベクトル情報に関するシンタックス要素のグループと、画素予測に関するシンタックス要素のグループと、ブロック情報に関するシンタックス要素のグループとを含んでもよい。
【００２０】
より具体的には、上記マクロブロックに関するシンタックス要素のグループは、「ｍｂ＿ｔｙｐｅ」と、「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」と、「ｓｕｂ＿ｍｂ＿ｔｙｐｅ」とを含み、上記動きベクトル情報に関するシンタックス要素のグループは、「ｍｖｄ＿ｌ０［］［］［０］」と、「ｍｖｄ＿ｌ１［］［］［０］」と、「ｍｖｄ＿ｌ０［］［］［１］」と、「ｍｖｄ＿ｌ１［］［］［１］」とを含み、上記画素予測に関するシンタックス要素のグループは、「ｒｅｆ＿ｉｄｘ＿ｌ０」と、「ｒｅｆ＿ｉｄｘ＿ｌ１」と、「ｍｂ＿ｑｐ＿ｄｅｌｔａ」と、「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」と、「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」と、「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」と、「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」と、「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」とを含み、上記ブロック情報に関するシンタックス要素のグループは、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」と、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」と、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」とを含んでもよい。また、復号対象のスライスタイプがＩまたはＳＩの場合には「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」を上記画素予測に関するシンタックス要素のグループに含ませて管理してもよい。
【００２１】
また、この第１の側面において、上記複数本の演算レジスタおよび上記複数本の退避レジスタの各々は、１２８ビット幅のレジスタであり、８ビット毎に７ビットのコンテキスト変数を１個ずつ割り当てて、１６個のコンテキスト変数を格納し、８ビット毎に余っている１ビットを集めた１６ビットを余剰レジスタとして１個または２個のコンテキスト変数を格納してもよい。これにより、８ビット毎にアラインしてコンテキスト変数を割り当てながら、余剰領域にさらにコンテキスト変数を割り当てるという作用をもたらす。
【００２２】
また、この場合において、上記複数本の演算レジスタおよび上記複数本の退避レジスタの何れか１本を転送元レジスタとして当該転送元レジスタに格納された１６個のコンテキスト変数のうちの２個における７ビットを交換するとともに、それ以外の２個のコンテキスト変数の１４ビットの値と上記余剰レジスタのうちの１４ビットの値とを交換して、上記複数本の演算レジスタおよび上記複数本の退避レジスタの何れか１本を転送先レジスタとして転送する交換転送処理部をさらに具備してもよい。これにより、余剰領域に割り当てたコンテキスト変数を、８ビット毎にアラインした領域に交換転送して使用させるという作用をもたらす。
【００２３】
また、この場合において、上記交換が行われたことを示す交換状態情報を上記余剰レジスタに割り当て、上記交換転送処理部は、指定された１ビットの値と上記交換状態情報とが等しい場合には上記交換を行うことなく上記転送元レジスタの格納内容を上記転送先レジスタに転送し、上記指定された１ビットの値と上記交換状態情報とが異なる場合には上記交換を行うとともに上記交換状態情報を反転して上記転送元レジスタの格納内容を上記転送先レジスタに転送してもよい。これにより、交換状態情報に応じて交換転送させるか否かを変化させるという作用をもたらす。
【００２４】
また、この場合において、上記複数本の演算レジスタおよび上記複数本の退避レジスタの何れかの格納内容を保持する転送バッファと、上記転送バッファに保持されるコンテキスト変数のうち指定されたものの初期値を生成するコンテキスト変数初期値生成部とをさらに具備し、上記転送バッファは、上記コンテキスト変数初期値生成部により生成された上記初期値によってその格納内容を変更した上で上記転送先レジスタに転送してもよい。これにより、演算レジスタまたは退避レジスタに初期値を設定させるという作用をもたらす。
【発明の効果】
【００２５】
本発明によれば、コンテキスト適応型二値算術復号処理のために、シンタックス要素の処理態様に合致したレジスタ構成を備える算術復号装置を提供することができるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００２６】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２７】
図１は、本発明の実施の形態における算術復号装置の一例としてのＣＡＢＡＣ復号器２０の一構成例を示す図である。このＣＡＢＡＣ復号器２０は、符号列入力部１０から符号化データを受け取り、二値信号に復号（デコード）した後に、多値信号に多値化するものである。このＣＡＢＡＣ復号器２０は、二値算術符号復号処理部２１と、コンテキストインデックス計算処理部２２と、コンテキスト変数テーブル保持部２３と、多値化処理部２４とを備えている。
【００２８】
コンテキストインデックス計算処理部２２は、コンテキストインデックス（ｃｔｘＩｄｘ）を計算して、その計算されたｃｔｘＩｄｘを二値算術符号復号処理部２１に供給するものである。
【００２９】
コンテキスト変数テーブル保持部２３は、各コンテキストに対応したコンテキスト変数をコンテキスト変数テーブルとして保持するものである。各コンテキスト変数は、出現確率を示す確率状態インデックスｐＳｔａｔｅＩｄｘと、出現確率の高い優勢確率シンボル（ＭＰＳ）を示すｖａｌＭＰＳとから構成される。コンテキスト変数テーブル保持部２３に保持されるコンテキスト変数は、ｃｔｘＩｄｘによって特定され、ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］と表される。
【００３０】
二値算術符号復号処理部２１は、符号列入力部１０から入力された符号化データを二値信号に復号するものである。この二値算術符号復号処理部２１は、シンボルを１つ復号する際、コンテキストインデックス計算処理部２２からｃｔｘＩｄｘを受け取り、このｃｔｘＩｄｘに基づいてコンテキスト変数テーブル保持部２３からコンテキスト変数ｃｏｎｔｅｘｔ［ｃｔｘＩｄｘ］を取得する。そして、このコンテキスト変数に基づいてシンボルを復号して、二値信号を多値化処理部２４に出力する。
【００３１】
多値化処理部２４は、二値算術符号復号処理部２１から出力された二値信号を元の多値信号に多値化するものである。二値算術符号化の際にはシンタックス要素（ＳＥ：Syntax Element）に応じて多値信号から二値信号への変換が行われており、この多値化処理部２４ではそのような二値信号を元の多値信号に戻す処理が行われる。ここで、シンタックス要素とは、Ｈ．２６４においてシンタックスで伝送することが規定されている情報である。
【００３２】
図２は、本発明の実施の形態における算術復号装置をＣＡＢＡＣ復号コプロセッサ１００として実現した場合の一構成例を示す図である。このＣＡＢＡＣ復号コプロセッサ１００は、ＣＰＵ（Central Processing Unit）２００に接続されるコプロセッサとして動作する。すなわち、ＣＡＢＡＣ復号コプロセッサ１００は、ＣＰＵ２００から発行された命令に従って処理を行う。ＣＰＵ２００は、その作業領域としてメインメモリ３００を使用する。メインメモリ３００とＣＰＵ２００との間には、命令を保持する命令キャッシュ３１０と、データを保持するデータキャッシュ３２０とが接続される。
【００３３】
ＣＡＢＡＣ復号コプロセッサ１００は、ＣＡＢＡＣ復号演算器１１０と、ライトバック処理部１１５と、レジスタファイル１２０と、レジスタ転送処理部１３０と、ロードストア処理部１４０と、ＤＭＡ制御部１５０と、ＩＮＩＴＩＤＣ制御レジスタ１６０と、ＳＬＩＣＥＱＰＹ制御レジスタ１７０と、命令デコード処理部１８０と、復号制御部１９０とを備える。
【００３４】
ＣＡＢＡＣ復号演算器１１０は、ＣＡＢＡＣ符号化方式により符号化されたデータを復号するための処理を行うものである。このＣＡＢＡＣ復号演算器１１０は、復号制御部１９０からの指示に従って、復号に必要な処理を行う。ライトバック処理部１１５は、ＣＡＢＡＣ復号演算器１１０による処理結果をＣＰＵ２００のレジスタ（図示しない）へ書き込むものである。なお、ＣＡＢＡＣ復号演算器１１０は、特許請求の範囲に記載の算術復号演算器の一例である。
【００３５】
レジスタファイル１２０は、コンテキスト変数を保持するためのレジスタである。このレジスタファイル１２０は、１２８ビット幅のレジスタを８本備えている。これら８本のレジスタをＣＶ０乃至ＣＶ７と呼称する。８本のレジスタのうち４本（ＣＶ０乃至ＣＶ３）は、ＣＡＢＡＣ復号演算器１１０に直結された演算レジスタであり、ＣＡＢＡＣ復号演算器１１０にコンテキスト変数を供給して、ＣＡＢＡＣ復号演算器１１０による演算結果を保持するものである。また、残りの４本（ＣＶ４乃至ＣＶ７）は、演算レジスタの保持内容を退避するための退避レジスタである。この退避レジスタを利用することにより、特定のシンタックス要素のコンテキスト変数については、演算レジスタの保持内容をメインメモリ３００等にストアすることなくレジスタファイル１２０において管理することができるようになる。なお、レジスタファイル１２０は、特許請求の範囲に記載の演算レジスタおよび退避レジスタの一例である。
【００３６】
レジスタ転送処理部１３０は、レジスタファイル１２０におけるレジスタ間の転送処理を行うものである。このレジスタ転送処理部１３０は、レジスタ間の転送の際に、後述するように、一部のビットを交換する機能を有する。また、このレジスタ転送処理部１３０は、後述するように、内部で生成した初期値をレジスタに設定する機能を有する。
【００３７】
ロードストア処理部１４０は、メインメモリ３００からレジスタファイル１２０に対するロード処理、または、レジスタファイル１２０からメインメモリ３００に対するストア処理を行うものである。なお、メインメモリ３００へのアクセスはＣＰＵ２００およびデータキャッシュ３２０を介して行われ、メインメモリ３００にアクセスすることなくデータキャッシュ３２０上で処理が行われる場合もある。
【００３８】
ＤＭＡ制御部１５０は、ＣＡＢＡＣ復号演算器１１０とメインメモリ３００との間のＤＭＡ（Direct Memory Access）制御を行うものである。このＤＭＡ制御部１５０は、メインメモリ３００から読み出したストリームをＣＡＢＡＣ復号演算器１１０へ供給するストリーム入力処理、および、ＣＡＢＡＣ復号演算器１１０で復号された逆直交変換係数をメインメモリ３００へ書き込む係数出力処理を行う。
【００３９】
ＩＮＩＴＩＤＣ制御レジスタ１６０およびＳＬＩＣＥＱＰＹ制御レジスタ１７０は、コンテキスト変数の初期値を生成するための制御レジスタである。ＩＮＩＴＩＤＣ制御レジスタ１６０は、初期化テーブルを決定するためのインデックスｃａｂａｃ＿ｉｎｉｔ＿ｉｄｃまたはスライスタイプを保持する。ＳＬＩＣＥＱＰＹ制御レジスタ１７０は、スライスの量子化パラメータ（ＳｌｉｃｅＱＰＹ：Slice Quantisation Parameter Y）を保持する。なお、ＩＮＩＴＩＤＣとＳＬＩＣＥＱＰＹはコンテキスト変数毎に変更する値ではないため、命令のオペランドとしてではなく、制御レジスタにより供給される。
【００４０】
命令デコード処理部１８０は、ＣＰＵ２００からＣＡＢＡＣ復号コプロセッサ１００に対して発行されたコプロセッサ命令を解読（命令デコード）するデコーダである。この命令デコード結果は復号制御部１９０に供給される。
【００４１】
復号制御部１９０は、命令デコード処理部１８０から供給された命令デコード結果に従って各部を制御するものである。この復号制御部１９０の出力は、信号線１９９を介して各部に供給される。
【００４２】
ＣＡＢＡＣ復号コプロセッサ１００は、ＣＰＵ２００に接続されており、ＣＰＵ２００にはデータキャッシュ３２０と命令キャッシュ３１０が接続される。メインメモリ３００上のデータはいずれかのキャッシュ経由でＣＰＵ２００に読み出され、データキャッシュ３２０から追い出されたデータはメインメモリ３００に書き込まれる。メインメモリ３００は、例えば２次キャッシュなどを介して接続される場合も想定される。メインメモリ３００上のプログラムは、命令キャッシュ３１０を介してＣＰＵ２００に読み出されて、ＣＡＢＡＣ復号コプロセッサ１００にも供給される。ここでは図示しないが、ＣＰＵ２００にもレジスタファイルとロードストア処理部が備えられており、ロードストア処理が行われる。データキャッシュ３２０はＣＰＵ２００およびＣＡＢＡＣ復号コプロセッサ１００に共有されているため、ＣＰＵ２００とＣＡＢＡＣ復号コプロセッサ１００との間でキャッシュアクセスが競合しないように調停する機構がＣＰＵ２００内に設けられる。ＣＡＢＡＣ復号コプロセッサ１００のロードストア処理部１４０はＣＰＵ２００を介してデータキャッシュ３２０へ接続されている。
【００４３】
各処理部は、接続されている処理部が処理中であって次サイクルで新しい処理が受け付けられなければ、受け付けられるまで待機するようになっている。例えば、ＣＰＵ２００は、命令デコード処理部１８０が命令を受け取ることができるときにのみ命令を出力し、または、命令が受け取られるまで同じ命令を出力し続ける。命令デコード処理部１８０は、復号制御部１９０が次サイクルで新しい処理の制御が可能であれば、復号制御部１９０に対する制御信号を生成する。復号制御部１９０は各処理部が次サイクルで新しい制御が可能であれば、命令実行のための制御を各処理部へ指示する。
【００４４】
図３は、本発明の実施の形態におけるシンタックス要素のコンテキストグループの一例を示す図である。本発明の実施の形態では、スライスタイプ毎に使用されるコンテキスト変数が限定されることを考慮するとともに、シンタックス要素が復号される順番を考慮して、コンテキスト変数を５つのコンテキストグループにグループ分けする。
【００４５】
第１のコンテキストグループは、マクロブロック（ＭＢ）タイプコンテキストグループである。このマクロブロックタイプコンテキストグループは、マクロブロックに関するシンタックス要素のグループであり、マクロブロック内のスライスのスライスタイプに応じてさらに３つに分類されるが、１つのスライスにおいては対応する１つの分類のみが使用される。
【００４６】
マクロブロックタイプコンテキストグループにおいて、Ｉスライス用のシンタックス要素としては、「ｍｂ＿ｔｙｐｅ（ＳＩ  ｓｌｉｃｅｓ  ｏｎｌｙ）」および「ｍｂ＿ｔｙｐｅ（Ｉ  ｓｌｉｃｅｓ  ｏｎｌｙ）」が分類される。「ｍｂ＿ｔｙｐｅ」は、マクロブロックタイプを示すシンタックス要素である。
【００４７】
マクロブロックタイプコンテキストグループにおいて、Ｐスライス用のシンタックス要素としては、「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ（Ｐ，ＳＰ  ｓｌｉｃｅｓ  ｏｎｌｙ）」、「ｍｂ＿ｔｙｐｅ（Ｐ，ＳＰ  ｓｌｉｃｅｓ  ｏｎｌｙ）」、および、「ｓｕｂ＿ｍｂ＿ｔｙｐｅ（Ｐ，ＳＰ  ｓｌｉｃｅｓ  ｏｎｌｙ）」が分類される。「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」は、マクロブロックスキップフラグを示すシンタックス要素である。「ｓｕｂ＿ｍｂ＿ｔｙｐｅ」は、サブマクロブロックタイプを示すシンタックス要素である。
【００４８】
マクロブロックタイプコンテキストグループにおいて、Ｂスライス用のシンタックス要素としては、「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ（Ｂ  ｓｌｉｃｅｓ  ｏｎｌｙ）」、「ｍｂ＿ｔｙｐｅ（Ｂ  ｓｌｉｃｅｓ  ｏｎｌｙ）」、および、「ｓｕｂ＿ｍｂ＿ｔｙｐｅ（Ｂ  ｓｌｉｃｅｓ  ｏｎｌｙ）」が分類される。
【００４９】
第２のコンテキストグループは、ＭＶＤ（Motion Vector Difference）コンテキストグループである。このＭＶＤコンテキストグループは、動きベクトル情報に関するシンタックス要素のグループである。このＭＶＤコンテキストグループには、「ｍｖｄ＿ｌ０［］［］［０］」、「ｍｖｄ＿ｌ１［］［］［０］」、「ｍｖｄ＿ｌ０［］［］［１］」、および、「ｍｖｄ＿ｌ１［］［］［１］」が分類される。これらは、水平方向および垂直方向における動きベクトル情報を示すシンタックス要素である。
【００５０】
第３のコンテキストグループは、予測コンテキストグループである。この予測コンテキストグループは、画素予測に関するシンタックス要素のグループである。この予測コンテキストグループには、「ｒｅｆ＿ｉｄｘ＿ｌ０」、「ｒｅｆ＿ｉｄｘ＿ｌ１」、「ｍｂ＿ｑｐ＿ｄｅｌｔａ」、「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」、「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」、「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」、「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」、および、「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」が分類される。「ｒｅｆ＿ｉｄｘ＿ｌ０」および「ｒｅｆ＿ｉｄｘ＿ｌ１」は、参照インデックスを示すシンタックス要素である。「ｍｂ＿ｑｐ＿ｄｅｌｔａ」は、マクロブロック量子化パラメータを示すシンタックス要素である。「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」は、画面内色差予測モードを示すシンタックス要素である。「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」および「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」は、画面内輝度予測モードフラグを示すシンタックス要素である。「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」および「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」は、画面内輝度予測モードを示すシンタックス要素である。
【００５１】
第４のコンテキストグループは、ブロック情報コンテキストグループである。このブロック情報コンテキストグループは、ブロックの符号化方式などのブロック情報に関するシンタックス要素のグループである。このブロック情報コンテキストグループには、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」、および、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」が分類される。「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」は、マクロブロックフィールド復号フラグを示すシンタックス要素である。「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」は、符号化ブロックパターンを示すシンタックス要素である。「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」は、直交変換サイズ８×８フラグを示すシンタックス要素である。
【００５２】
第５のコンテキストグループは、ｒｅｓｉｄｕａｌコンテキストグループである。このｒｅｓｉｄｕａｌコンテキストグループには、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」および「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が分類される。「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」は、符号化ブロックサイズを示すシンタックス要素である。「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」は、有意係数フラグを示すシンタックス要素である。「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」は、最終有意係数フラグを示すシンタックス要素である。「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」は、係数絶対値情報を示すシンタックス要素である。
【００５３】
後述するように、第１乃至第４のコンテキストグループのシンタックス要素は復号処理の前半において復号されるものであり、第５のコンテキストグループのシンタックス要素は復号処理の後半において復号されるものである。すなわち、使用されるコンテキスト変数は、復号処理の進行状況に応じて変化する。以下では、これらコンテキストグループのシンタックス要素のコンテキスト変数とレジスタファイル１２０のレジスタとの関係について説明する。
【００５４】
図４は、本発明の実施の形態におけるマクロブロックタイプコンテキストグループのコンテキスト変数の割当例を示す図である。「ｃｉｄｘ」は、この割当例における先頭からの相対的なコンテキストインデックスを示すものである。「ｃｔｘＩｄｘ」は、Ｈ．２６４において規定されたコンテキストインデックスを示すものである。以降の図においても同様である。
【００５５】
図４（ａ）は、Ｉスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、レジスタの先頭から３個のコンテキスト変数が「ｍｂ＿ｔｙｐｅ（ＳＩ  ｓｌｉｃｅｓ  ｏｎｌｙ）」に、続く８個のコンテキスト変数が「ｍｂ＿ｔｙｐｅ（Ｉ  ｓｌｉｃｅｓ  ｏｎｌｙ）」にそれぞれ割り当てられている。
【００５６】
図４（ｂ）は、Ｉスライス用のコンテキスト変数を割り当てた場合の他の例である。ここでは、レジスタの先頭から３個のコンテキスト変数が「ｍｂ＿ｔｙｐｅ（ＳＩ  ｓｌｉｃｅｓ  ｏｎｌｙ）」に、続く８個のコンテキスト変数が「ｍｂ＿ｔｙｐｅ（Ｉ  ｓｌｉｃｅｓ  ｏｎｌｙ）」にそれぞれ割り当てられている点は、図４（ａ）の場合と同様である。この例では、さらに３個のコンテキスト変数がブロック情報コンテキストグループの「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」に割り当てられている。
【００５７】
図４（ｃ）は、Ｐスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、レジスタの先頭から３個のコンテキスト変数が「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ（Ｐ，ＳＰ  ｓｌｉｃｅｓ  ｏｎｌｙ）」に、続く７個のコンテキスト変数が「ｍｂ＿ｔｙｐｅ（Ｐ，ＳＰ  ｓｌｉｃｅｓ  ｏｎｌｙ）」に、続く３個のコンテキスト変数が「ｓｕｂ＿ｍｂ＿ｔｙｐｅ（Ｐ，ＳＰ  ｓｌｉｃｅｓ  ｏｎｌｙ）」にそれぞれ割り当てられている。
【００５８】
図４（ｄ）は、Ｂスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、レジスタの先頭から３個のコンテキスト変数が「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ（Ｂ  ｓｌｉｃｅｓ  ｏｎｌｙ）」に、続く９個のコンテキスト変数が「ｍｂ＿ｔｙｐｅ（Ｂ  ｓｌｉｃｅｓ  ｏｎｌｙ）」に、続く４個のコンテキスト変数が「ｓｕｂ＿ｍｂ＿ｔｙｐｅ（Ｂ  ｓｌｉｃｅｓ  ｏｎｌｙ）」にそれぞれ割り当てられている。
【００５９】
これらのうち、最も多くのコンテキスト変数を含んでいるのが図４（ｄ）である。この図４（ｄ）には、１６個のコンテキスト変数が含まれており、８ビット毎にコンテキスト変数を割り当てたとしても、８ビット×１６個＝１２８ビットとなり、レジスタファイル１２０の１２８ビット幅の１本のレジスタに保持することができることになる。
【００６０】
図５は、本発明の実施の形態におけるＭＶＤコンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、レジスタの先頭から７個のコンテキスト変数が「ｍｖｄ＿ｌ０［］［］［０］」および「ｍｖｄ＿ｌ１［］［］［０］」に、続く７個のコンテキスト変数が「ｍｖｄ＿ｌ０［］［］［１］」および「ｍｖｄ＿ｌ１［］［］［１］」にそれぞれ割り当てられている。この図５には１４個のコンテキスト変数が含まれており、８ビット毎にコンテキスト変数を割り当てたとしても、８ビット×１４個＝１１２ビットとなり、レジスタファイル１２０の１２８ビット幅の１本のレジスタに保持することができることになる。
【００６１】
図６は、本発明の実施の形態における予測コンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、レジスタの先頭から６個のコンテキスト変数が「ｒｅｆ＿ｉｄｘ＿ｌ０」および「ｒｅｆ＿ｉｄｘ＿ｌ１」に、続く４個のコンテキスト変数が「ｍｂ＿ｑｐ＿ｄｅｌｔａ」に、続く４個のコンテキスト変数が「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」に、続く１個のコンテキスト変数が「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」および「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」に、続く１個のコンテキスト変数が「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」および「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」にそれぞれ割り当てられている。この図６には１６個のコンテキスト変数が含まれており、８ビット毎にコンテキスト変数を割り当てたとしても、８ビット×１６個＝１２８ビットとなり、レジスタファイル１２０の１２８ビット幅の１本のレジスタに保持することができることになる。
【００６２】
図７は、本発明の実施の形態におけるブロック情報コンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、レジスタの先頭から１２個のコンテキスト変数が「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」に、続く３個のコンテキスト変数が「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」にそれぞれ割り当てられている。このブロック情報コンテキストグループのシンタックス要素には、３個のコンテキスト変数を要する「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」が分類されるが、これを合わせると１８個のコンテキスト変数が含まれることになり、８ビット毎にコンテキスト変数を割り当てたとすると、８ビット×１８個＝１４４ビットとなり、レジスタファイル１２０の１２８ビット幅の１本のレジスタに保持することができなくなる。
【００６３】
ただし、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」の３個のコンテキスト変数は、メインプロファイル（ＭＰ：Main Profile）では使用されないため、メインプロファイルのストリームに限定したＣＡＢＡＣ復号器であれば１本のレジスタに保持することができる。一方、ハイプロファイル（ＨＰ：High Profile）のストリームを扱うためには、後述する交換転送機能を用いることにより、１８個のコンテキスト変数を１本のレジスタ上で操作することになる。
【００６４】
このように、前半に復号される第１乃至第４のコンテキストグループのシンタックス要素については、それぞれのコンテキストグループに１本ずつのレジスタを割り当てることが可能である。したがって、前半の処理が終了した段階で４本の退避レジスタに必要なコンテキスト変数を全て退避することができることがわかる。これにより、第１乃至第４のコンテキストグループのコンテキスト変数については、メインメモリ３００へのストア処理およびメインメモリ３００からのロード処理が不要になる。
【００６５】
図８乃至図１３は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、Ｈ．２６４において規定されたブロックカテゴリー（ｃｔｘＢｌｏｃｋＣａｔ）に従って、各シンタックス要素を６種類に分類することとする。
【００６６】
図８は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー０のコンテキスト変数の割当例を示す図である。このブロックカテゴリー０では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から１０個のコンテキスト変数が「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」に、第１３番目から第１６番目（ｃｉｄｘ＝１２〜１５）に「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１５個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１５個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１５個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１５個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。
【００６７】
図９は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー１のコンテキスト変数の割当例を示す図である。このブロックカテゴリー１では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から１０個のコンテキスト変数が「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」に、第１３番目から第１６番目（ｃｉｄｘ＝１２〜１５）に「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１４個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１４個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１４個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１４個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。
【００６８】
図１０は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー２のコンテキスト変数の割当例を示す図である。このブロックカテゴリー２では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から１０個のコンテキスト変数が「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」に、第１３番目から第１６番目（ｃｉｄｘ＝１２〜１５）に「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１５個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１５個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１５個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１５個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。
【００６９】
図１１は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー３のコンテキスト変数の割当例を示す図である。このブロックカテゴリー３では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から９個のコンテキスト変数が「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」に、第１３番目から第１６番目（ｃｉｄｘ＝１２〜１５）に「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から３個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から３個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から３個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から３個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。
【００７０】
図１２は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー４のコンテキスト変数の割当例を示す図である。このブロックカテゴリー４では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から１０個のコンテキスト変数が「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」に、第１３番目から第１６番目（ｃｉｄｘ＝１２〜１５）に「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１４個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１４個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１４個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から１４個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。
【００７１】
図１３は、本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー５のコンテキスト変数の割当例を示す図である。このブロックカテゴリー５では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から１０個のコンテキスト変数が「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」に割り当てられている。なお、ブロックカテゴリー５では「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が存在しない。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１５個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から９個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から１５個のコンテキスト変数が「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」に、もう一方のレジスタの先頭から９個のコンテキスト変数が「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」にそれぞれ割り当てられている。
【００７２】
このように、後半に復号される第５のコンテキストグループのシンタックス要素については、ブロックカテゴリーに従って６つに分類することにより、各ブロックカテゴリーにつき３本ずつのレジスタを割り当てることが可能である。
【００７３】
ｒｅｓｉｄｕａｌコンテキストグループのシンタックス要素は、図４７乃至図４９から分かるように、４６０個のコンテキスト変数のうちの約８割を占める。これらをレジスタに全部載せるようなサイズのレジスタファイルをフリップフロップで実装するのであれば、４６０個全てを載せるようにするのと回路規模上は大差がない。そのため、ｒｅｓｉｄｕａｌコンテキストグループのコンテキスト変数はＳＲＡＭであるメインメモリ３００へ格納することを考えるのが自然である。マクロブロックは１６×１６画素のブロックであり、さらに４つに分割されて８×８画素のサブマクロブロック毎に復号される。Ｌｕｍａ（輝度成分Ｙ）とＣｈｒｏｍａ（彩度成分ＣｒおよびＣｂ）の逆直交変換係数はそれぞれ別々に符号化されている。
【００７４】
Ｌｕｍａについては、１６×１６画素を４×４画素のブロックで分割した１６個のブロックの各直流成分のみを集めた４×４ブロック（ブロックカテゴリー０）の１個と、直流成分を除いた各交流成分のみの４×４ブロック（ブロックカテゴリー１）の１６個とによってマクロブロックを符号化する場合と、直流成分と交流成分を含んだ４×４ブロック（ブロックカテゴリー２）の１６個によって符号化する場合と、直流成分と交流成分を含んだ８×８ブロック（ブロックカテゴリー５）の４個によって符号化する場合とがある。
【００７５】
Ｃｈｒｏｍａについては、４：２：０フォーマット（ＮｕｍＣ８ｘ８は「１」となる）の場合、直流成分のみを集めた２×２ブロック（ブロックカテゴリー３）の１個と、交流成分のみの４×４ブロック（ブロックカテゴリー４）の４個とを、ＣｒとＣｂのそれぞれについて符号化される。１２８ビットのレジスタ３本分のコンテキスト変数を一度ロードすると、２×２、４×４、８×８などのサイズのブロック分の係数を復号する間は、そのコンテキスト変数のみを使い続けながら復号を行うことができる。特に、交流成分を含んだブロック（ブロックカテゴリー１、２、４、５）に関しては、さらに複数ブロックの復号の間で同じコンテキスト変数のみを使い続けながら復号を行うことができる。そのため、前半に復号される第１乃至第４のコンテキストグループのシンタックス要素のコンテキスト変数をメモリに配置して使用前にロードするようにした場合と比べると、Ｂｉｎ当たりのロード回数は非常に少ないものとなる。そして、ブロックカテゴリー単位で復号が行われるため、１２８ビットレジスタへの３回のロードと３回のストアは各ブロックカテゴリーの前後にまとめて行うだけでよい。本発明の実施の形態では、演算レジスタを４本備えるため、レジスタ間で余分な転送を行うことなく、復号処理を実行することができる。
【００７６】
図１４は、本発明の実施の形態におけるレジスタファイル１２０の各レジスタとコンテキスト変数との関係例を示す図である。図１４（ａ）は、１２８ビット幅の１本のレジスタに対して８ビット毎に７ビットのコンテキスト変数を１個ずつ割り当てて、１６個のコンテキスト変数Ｃ０乃至Ｃ１５を格納した場合の例である。図４乃至図６、および、図８乃至図１３のケースでは、１本のレジスタに対して最大１６個のコンテキスト変数が割り当てられるため、同図（ａ）のように格納することにより、必要なコンテキスト変数は全て格納することができる。
【００７７】
これに対し、図７のケースのように、最大１８個のコンテキスト変数を１本のレジスタに割り当てようとする場合には、以下のような工夫を施す必要がある。図１４（ｂ）は、１２８ビット幅の１本のレジスタに対して８ビット毎に７ビットのコンテキスト変数を１個ずつ割り当てた上で、余剰となった１ビットを集めることにより、さらに２個のコンテキスト変数を格納した場合の例である。すなわち、この例では、コンテキスト変数Ｃ０乃至Ｃ６において１ビットずつ余った余剰ビットを集めて、その７ビット分の余剰ビットにコンテキスト変数Ｃ１６を割り当てている。同様に、コンテキスト変数Ｃ７乃至Ｃ１３において１ビットずつ余った余剰ビットを集めて、その７ビット分の余剰ビットにコンテキスト変数Ｃ１７を割り当てている。また、コンテキスト変数Ｃ１４の余剰ビットには、交換情報ビットが割り当てられている。この交換情報ビットについては、次図を用いて説明する。
【００７８】
図１５は、本発明の実施の形態におけるレジスタファイル１２０のレジスタ間の交換転送の態様例を示す図である。同図において、上側が転送元レジスタであり、下側が転送先レジスタである。
【００７９】
交換転送の前後において、コンテキスト変数Ｃ０乃至Ｃ１１の１２個については、格納位置に変動はない。コンテキスト変数Ｃ１２は、転送後にはコンテキスト変数Ｃ０乃至Ｃ６の７ビットの余剰ビットに分配される。同様に、コンテキスト変数Ｃ１３は、転送後にはコンテキスト変数Ｃ７乃至Ｃ１３の７ビットの余剰ビットに分配される。これに対し、コンテキスト変数Ｃ０乃至Ｃ６の余剰ビットに格納されていたコンテキスト変数Ｃ１６は、転送後にはコンテキスト変数Ｃ１２の位置に格納される。同様に、コンテキスト変数Ｃ７乃至Ｃ１３の余剰ビットに格納されていたコンテキスト変数Ｃ１７は、転送後にはコンテキスト変数Ｃ１３の位置に格納される。また、コンテキスト変数Ｃ１４およびＣ１５は、転送後には互いに入れ換えて格納される。
【００８０】
このような交換転送が行われた場合、コンテキスト変数Ｃ１４の余剰ビットに当る交換情報ビットは、転送後に反転される。すなわち、同図のように転送前に交換情報ビットが「０」であれば、「１」に設定される。逆に、転送前に交換情報ビットが「１」であれば、「０」に設定される。
【００８１】
このような交換転送を行うことにより、図７の例のように１８個のコンテキスト変数を格納する場合、処理に必要なコンテキスト変数をその都度、レジスタ上に８ビット毎に配置することができるようになる。例えば、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」を用いる場合には第１３番目から第１５番目のコンテキスト変数の位置（ｃｉｄｘ＝１２乃至１４）に「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」のコンテキスト変数を格納する。このとき、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」のコンテキスト変数は、コンテキスト変数Ｃ０乃至Ｃ６の余剰ビットと、コンテキスト変数Ｃ７乃至Ｃ１３の余剰ビットと、コンテキスト変数Ｃ１５にそれぞれ格納されているものとする。
【００８２】
その後、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」を用いる場合には、交換転送を行う。これにより、第１３番目から第１５番目のコンテキスト変数の位置（ｃｉｄｘ＝１２乃至１４）に「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」のコンテキスト変数が格納されるようになる。
【００８３】
このような仕組みを用いることにより、ｃｉｄｘを４ビットに抑えたままの状態で最大１８個のコンテキスト変数を１本のレジスタに格納することができる。なお、この交換転送は、後述するコンテキスト交換転送命令により実行される。
【００８４】
図１６は、本発明の実施の形態におけるレジスタ転送処理部１３０の一構成例を示す図である。このレジスタ転送処理部１３０は、転送バッファ１３１と、コンテキスト変数初期値生成部１３２と、初期値パラメータテーブル１３３と、交換転送処理部１３４と、セレクタ１３５とを備えている。
【００８５】
転送バッファ１３１は、レジスタファイル１２０の転送元のレジスタからのデータを保持する１２８ビットのバッファである。この転送バッファ１３１により、交換転送処理部１３４による処理をパイプライン処理することが可能となる。また、この転送バッファ１３１には、後述するコンテキスト初期化命令に従って、初期値が設定される。この場合の初期値は、コンテキスト変数初期値生成部１３２において生成され、その格納位置は復号制御部１９０から信号線１９９を介して指示される。
【００８６】
コンテキスト変数初期値生成部１３２は、コンテキスト変数の初期値を生成するものである。このコンテキスト変数初期値生成部１３２は、後述するコンテキスト初期化命令のオペランドによって指定されたｃｉｄｘ（４ビットの値ｉｍｍ＿ｃｉｄｘ）の位置を先頭として、オペランドで指定されたｃｔｘＩｄｘ（９ビットの値ｉｍｍ＿ｃｔｘＩｄｘ）から順番に、オペランドで指定された個数（４ビットの値ｉｍｍ＿ｃｎｕｍ）のコンテキスト変数の初期値を１サイクルにつき１個ずつ生成する。そして、オペランドで指定された転送バッファ（ｃｖ＿ｄｓｔ）の該当位置の７ビットに書き込む処理をｉｍｍ＿ｃｎｕｍ回繰り返す。このコンテキスト変数初期値生成部１３２によって生成される初期値は、Ｈ．２６４により定義された値であり、初期値パラメータテーブル１３３から供給される初期値パラメータ（ｍおよびｎ）およびＳＬＩＣＥＱＰＹ制御レジスタ１７０から信号線１７９を介して供給される量子化パラメータ（ＳｌｉｃｅＱＰＹ）によって決定される。
【００８７】
初期値パラメータテーブル１３３は、初期値パラメータ（ｍおよびｎ）を保持するテーブルである。この初期値パラメータテーブル１３３は、コンテキスト初期化命令のオペランドによって指定されたｃｔｘＩｄｘおよびＩＮＩＴＩＤＣ制御レジスタ１６０から信号線１６９を介して供給される値により索引される。ＩＮＩＴＩＤＣ制御レジスタ１６０の値は、「０」乃至「２」のときにはｃａｂａｃ＿ｉｎｉｔ＿ｉｄｃとして用いられ、「３」のときにはＩスライスまたはＳＩスライスであることを示す。
【００８８】
初期値パラメータ（ｍおよびｎ）は、Ｈ．２６４において、ｓｌｉｃｅ＿ｈｅａｄｅｒ（）に含まれるｓｌｉｃｅ＿ｔｙｐｅと、ｃａｂａｃ＿ｉｎｉｔ＿ｉｄｃと、ｃｔｘＩｄｘとにより特定できるように、表形式で定義されている。量子化パラメータ（ＳｌｉｃｅＱＰＹ）は、ｓｌｉｃｅ＿ｈｅａｄｅｒ（）に含まれるｓｌｉｃｅ＿ｑｐ＿ｄｅｌｔａと、ｐｉｃ＿ｐａｒａｍｅｔｅｒ＿ｓｅｔ＿ｒｂｓｐ（）に含まれるｐｉｃ＿ｉｎｉｔ＿ｑｐ＿ｍｉｎｕｓ２６とによりスライス毎に算出される値である。
preCtxState = Clip3( 1, 126, ( ( m ? SliceQPY ) >> 4 ) + n )
if( preCtxState <= 63 ) {
pStateIdx = 63 - preCtxState
valMPS = 0
} else {
pStateIdx = preCtxState - 64
valMPS = 1
}
ただし、Ｃｌｉｐ３は以下のような関数である。
int Clp3(int x, int y, int x){
if(z>x)r eturn x;
if(z>y) return y;
return z;
}
【００８９】
このような初期化をソフトウェアで行うには、ｍおよびｎをメモリ上に格納してスライス毎に参照する必要がある。ほとんどのコンテキスト変数のｍおよびｎは４種類用意されていて、ｓｌｉｃｅ＿ｔｙｐｅとｃａｂａｃ＿ｉｎｉｔ＿ｉｄｃから選択される。そのため、ｍおよびｎを配列として格納すると数Ｋバイトの容量になり、４Ｋバイトや８Ｋバイトのサイズであることが多いプロセッサの一次データキャッシュの大半を占めてしまう。すなわち、一次データキャッシュにコンテキスト変数を保持しながら処理している場合には、スライス毎にコンテキスト変数がキャッシュから追い出されてしまう可能性が高い。この点、本発明の実施の形態によれば、初期値パラメータテーブル１３３を別途設けることにより、一次データキャッシュを占有することなく処理を行うことができる。
【００９０】
これら初期値パラメータテーブル１３３およびコンテキスト変数初期値生成部１３２によってレジスタに直接初期値を生成することにより、前半に復号される第１乃至第４のコンテキストグループのシンタックス要素については、コンテキスト変数をロードまたはストアする必要がなくなる。また、後半に復号される第５のコンテキストグループのシンタックス要素については、レジスタに生成した初期値をメモリにストアすることにより、コンテキスト変数の初期化を行うことができる。
【００９１】
交換転送処理部１３４は、図１５により説明した交換転送処理を行うものである。すなわち、この交換転送処理部１３４は、コンテキスト変数Ｃ０乃至Ｃ１３の余剰ビットとコンテキスト変数Ｃ１２およびＣ１３とを交換し、コンテキスト変数Ｃ１４およびＣ１５を互いに入れ換えるとともに、交換情報ビットを反転させる。
【００９２】
セレクタ１３５は、転送バッファ１３１に保持されているデータ、および、交換転送処理部１３４により交換転送処理が施されたデータの何れか一方を、選択するセレクタである。このセレクタ１３５により選択されたデータは、信号線１３９を介してレジスタファイル１２０の転送先のレジスタに出力される。何れのデータが選択されるかは、実行された命令により決定される。転送命令であれば。常に転送バッファ１３１に保持されているデータが選択される。コンテキスト交換転送命令であれば、オペランドおよび交換情報ビットの状態によって何れのデータが選択されるかが決定される。
【００９３】
図１７は、Ｈ．２６４におけるｓｌｉｃｅ＿ｄａｔａのシンタックス要素の構文解析（ｐａｒｓｅ）処理を抽出したフローチャートを示す図である。
【００９４】
まず、スライスタイプがＩスライスでもなく（ｓｌｉｃｅ＿ｔｙｐｅ！＝Ｉ）、かつ、ＳＩスライスでもない（ｓｌｉｃｅ＿ｔｙｐｅ！＝ＳＩ）場合（ステップＳ９０１）、「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」が復号される（ステップＳ９０２）。このとき使用されるコンテキスト変数は、「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」のＰまたはＳＰスライス用（ｃｔｘＩｄｘ＝１１乃至１３）またはＢスライス用（ｃｔｘＩｄｘ＝２４乃至２６）である。「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」が「１」を示している場合には、続くマクロブロックに関する処理（ステップＳ９０４、Ｓ９０５およびＳ９１０）はスキップされる（ステップＳ９０３）。
【００９５】
「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」が「１」を示していない場合には、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｅ＿ｆｌａｇ」を復号する必要があるか否かが判断される（ステップＳ９０４）。「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｅ＿ｆｌａｇ」を復号する必要がある旨判断された場合には、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｅ＿ｆｌａｇ」が復号される（ステップＳ９０５）。このとき使用されるコンテキスト変数は、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｅ＿ｆｌａｇ」のコンテキスト変数（ｃｔｘＩｄｘ＝７０乃至７２）である。その後、マクロブロック層の復号が行われる（ステップＳ９１０）。
【００９６】
そして、「ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ」が復号され（ステップＳ９０７）、「ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ」が「１」を示していれば構文解析処理を終了する（ステップＳ９０８）。「ｅｎｄ＿ｏｆ＿ｓｌｉｃｅ」が「１」を示していなければ先頭（ステップＳ９０１）から処理を繰り返す。
【００９７】
図１８は、マクロブロック層（ステップＳ９１０）の復号手順を示す図である。まず、「ｍｂ＿ｔｙｐｅ」が復号される（ステップＳ９１１）。このとき使用されるコンテキスト変数は、「ｍｂ＿ｔｙｐｅ」のＳＩスライス用（ｃｔｘＩｄｘ＝０乃至２）、Ｉスライス用（ｃｔｘＩｄｘ＝３乃至１０）、ＰまたはＳＰスライス用（ｃｔｘＩｄｘ＝１４乃至２０）またはＢスライス用（ｃｔｘＩｄｘ＝２７乃至３５）である。
【００９８】
「ｍｂ＿ｔｙｐｅ」が画面内ＰＣＭ（Intra-frame Pulse Code Modulation）である（ｍｂ＿ｔｙｐｅ＝Ｉ＿ＰＣＭ）場合には（ステップＳ９１２）、画面内ＰＣＭのための処理が行われる（ステップＳ９１３）。
【００９９】
「ｍｂ＿ｔｙｐｅ」がインターマクロブロックであり、かつ、パーティションが４個である場合には（ステップＳ９１４）、「ｓｕｂ＿ｍｂ＿ｐｒｅｄ」が復号される（ステップＳ９６０）。そして、マクロブロックパーティション予測モードが「Ｉｎｔｒａ＿１６ｘ１６」でない場合には（ステップＳ９１５）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」が復号される（ステップＳ９１６）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」のコンテキスト変数（ｃｔｘＩｄｘ＝７３乃至８４）である。そして、Ｌｕｍａの非ゼロの逆直交変換係数があり、かつ、８×８サイズ逆直交変換である可能性があれば（ステップＳ９１７）、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」が復号される（ステップＳ９１８）。このとき使用されるコンテキスト変数は、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」のコンテキスト変数（ｃｔｘＩｄｘ＝３９９乃至４０１）である。
【０１００】
一方、ステップＳ９１４において、「ｍｂ＿ｔｙｐｅ」がインターマクロブロックであり、かつ、パーティションが４個である旨判断されなかった場合には、イントラ予測（「ｍｂ＿ｔｙｐｅ」が「Ｉ＿４ｘ４」または「Ｉ＿８ｘ８」）であり、かつ、８×８サイズ逆直交変換である可能性があれば（ステップＳ９２１）、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」が復号される（ステップＳ９２２）。このとき使用されるコンテキスト変数は、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」のコンテキスト変数（ｃｔｘＩｄｘ＝３９９乃至４０１）である。また、「ｍｂ＿ｐｒｅｄ」が復号された後（ステップＳ９３０）、マクロブロックパーティション予測モードが「Ｉｎｔｒａ＿１６ｘ１６」でない場合には（ステップＳ９２３）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」が復号される（ステップＳ９２４）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」のコンテキスト変数（ｃｔｘＩｄｘ＝７３乃至８４）である。
【０１０１】
そして、」ｒｅｓｉｄｕａｌ」の復号が必要であるか否かが判断され（ステップＳ９２５）、必要であると判断された場合には、「ｍｂ＿ｑｐ＿ｄｅｌｔａ」が復号されて（ステップＳ９２６）、「ｒｅｓｉｄｕａｌ」の復号が行われる（ステップＳ９８０）。
【０１０２】
このマクロブロック層の復号手順から分かるように、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」は分岐する経路によって他のシンタックス要素とは復号の順番が逆転する。これに対して、メインプロファイルのように「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」がない場合には、分岐の経路によらず復号の順番が同じとなる。また、図１７の「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」も、Ｐ、ＳＰまたはＢスライスのときには、ともに「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」と「ｍｂ＿ｔｙｐｅ」との間に復号する必要がある。このような例外的なシンタックス要素である「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」と「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」を合わせて使用するために、図７のようにコンテキスト変数を管理する。
【０１０３】
もう１つ例外的なシンタックス要素は「ｍｂ＿ｑｐ＿ｄｅｌｔａ」である。「ｒｅｓｉｄｕａｌ」の復号が必要ない場合には復号しなくてもよいが、「ｒｅｓｉｄｕａｌ」がある場合には復号する必要がある。そのため、予測コンテキストグループのシンタックス要素を復号した後に、ＭＶＤコンテキストグループおよびブロック情報コンテキストグループの復号をして、さらに予測コンテキストグループのシンタックス要素を復号する必要がある。
【０１０４】
これら例外的なシンタックス要素が存在するため、仮にＣＡＢＡＣ復号器が１本の演算レジスタしかアクセスできない場合には、シンタックス要素のグループが変わるごとに演算レジスタへ転送して入れ替える必要が生じる。もし、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」と「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」と「ｍｂ＿ｑｐ＿ｄｅｌｔａ」が存在しなければ、各グループのシンタックス要素をマクロブロック毎に１回だけ演算レジスタに転送（復帰）してグループが変わるときに元のレジスタに転送（退避）するだけでよい。しかし、例外的なシンタックス要素が存在する場合には、マクロブロック毎に同じグループのシンタックス要素について、コンテキスト変数を演算レジスタに復帰および退避のために２回以上の転送をしなくてはならないグループが生じてしまう。これを回避するために、本発明の実施の形態では、演算レジスタを３本以上設けることにより、余分な転送を減らすことができる。なお、演算レジスタを２本設けた場合には、演算レジスタが１本であるよりは転送回数を減らすことができる。
【０１０５】
図１９および図２０は、「ｍｂ＿ｐｒｅｄ」（ステップＳ９３０）の復号手順を示す図である。
【０１０６】
マクロブロックパーティション予測モードが「Ｉｎｔｒａ＿４ｘ４」であれば（ステップＳ９３２）、以下の処理（ステップＳ９３３乃至Ｓ９３５）が１６回繰り返し行われる。すなわち、「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」が復号される（ステップＳ９３３）。このとき使用されるコンテキスト変数は、「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」のコンテキスト変数（ｃｔｘＩｄｘ＝６８）である。また、「ｐｒｅｖ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」が「０」を示している場合には（ステップＳ９３４）、「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」が復号される（ステップＳ９３５）。このとき使用されるコンテキスト変数は、「ｒｅｍ＿ｉｎｔｒａ４ｘ４＿ｐｒｅｄ＿ｍｏｄｅ」のコンテキスト変数（ｃｔｘＩｄｘ＝６９）である。
【０１０７】
マクロブロックパーティション予測モードが「Ｉｎｔｒａ＿８ｘ８」であれば（ステップＳ９３６）、以下の処理（ステップＳ９３７乃至Ｓ９３９）が４回繰り返し行われる。すなわち、「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」が復号される（ステップＳ９３７）。このとき使用されるコンテキスト変数は、「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」のコンテキスト変数（ｃｔｘＩｄｘ＝６８）である。また、「ｐｒｅｖ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ＿ｆｌａｇ」が「０」を示している場合には（ステップＳ９３８）、「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」が復号される（ステップＳ９３９）。このとき使用されるコンテキスト変数は、「ｒｅｍ＿ｉｎｔｒａ８ｘ８＿ｐｒｅｄ＿ｍｏｄｅ」のコンテキスト変数（ｃｔｘＩｄｘ＝６９）である。
【０１０８】
なお、マクロブロックパーティション予測モードがＩｎｔｒａ＿４ｘ４またはＩｎｔｒａ＿８ｘ８以外の場合には、以上の処理（ステップＳ９３２乃至Ｓ９３９）は行われない（ステップＳ９３１）。
【０１０９】
Ｃｈｒｏｍａの復号が必要でなければ（ステップＳ９４１）、「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」が復号される（ステップＳ９４２）。このとき使用されるコンテキスト変数は、「ｉｎｔｒａ＿ｃｈｒｏｍａ＿ｐｒｅｄ＿ｍｏｄｅ」のコンテキスト変数（ｃｔｘＩｄｘ＝６４乃至６７）である。
【０１１０】
マクロブロックパーティション予測モードがＤｉｒｅｃｔである場合には、ここで「ｍｂ＿ｐｒｅｄ」の復号は終了する（ステップＳ９４３）。マクロブロックパーティション予測モードがＤｉｒｅｃｔでなければ、以下の処理（ステップＳ９４４乃至Ｓ９５６）が行われる。各パーティションについて、「ｒｅｆ＿ｉｄｘ＿ｌ０」の復号が必要であるか否かが判断され（ステップＳ９４４）、必要であれば「ｒｅｆ＿ｉｄｘ＿ｌ０」の復号が行われる（ステップＳ９４５）。このとき使用されるコンテキスト変数は、「ｒｅｆ＿ｉｄｘ＿ｌ０」のコンテキスト変数（ｃｔｘＩｄｘ＝５４乃至５９）である。同様に、各パーティションについて、「ｒｅｆ＿ｉｄｘ＿ｌ１」の復号が必要であるか否かが判断され（ステップＳ９４６）、必要であれば「ｒｅｆ＿ｉｄｘ＿ｌ１」の復号が行われる（ステップＳ９４７）。このとき使用されるコンテキスト変数は、「ｒｅｆ＿ｉｄｘ＿ｌ１」のコンテキスト変数（ｃｔｘＩｄｘ＝５４乃至５９）である。
【０１１１】
また、各パーティションについて、「ｍｖｄ＿ｌ０」の復号が必要であるか否かが判断され（ステップＳ９５１）、必要であれば「ｍｖｄ＿ｌ０［］［］［０］」および「ｍｖｄ＿ｌ０［］［］［１］」の復号が行われる（ステップＳ９５２、Ｓ９５３）。このとき使用されるコンテキスト変数は、「ｍｖｄ＿ｌ０［］［］［０］」および「ｍｖｄ＿ｌ０［］［］［１］」のコンテキスト変数（ｃｔｘＩｄｘ＝４０乃至５３）である。同様に、各パーティションについて、「ｍｖｄ＿ｌ１」の復号が必要であるか否かが判断され（ステップＳ９５４）、必要であれば「ｍｖｄ＿ｌ１［］［］［０］」および「ｍｖｄ＿ｌ１［］［］［１］」の復号が行われる（ステップＳ９５５、Ｓ９５６）。このとき使用されるコンテキスト変数は、「ｍｖｄ＿ｌ１［］［］［０］」および「ｍｖｄ＿ｌ１［］［］［１］」のコンテキスト変数（ｃｔｘＩｄｘ＝４０乃至５３）である。
【０１１２】
図２１および図２２は、「ｓｕｂ＿ｍｂ＿ｐｒｅｄ」（ステップＳ９６０）の復号手順を示す図である。
【０１１３】
マクロブロック内の４つのサブマクロブロックの各々について、それぞれ「ｓｕｂ＿ｍｂ＿ｔｙｐｅ」が復号される（ステップＳ９６１）。このとき使用されるコンテキスト変数は、「ｓｕｂ＿ｍｂ＿ｔｙｐｅ」のＰまたはＳＰスライス用（ｃｔｘＩｄｘ＝２１乃至２３）またはＢスライス用（ｃｔｘＩｄｘ＝３６乃至３９）である。
【０１１４】
また、「ｒｅｆ＿ｉｄｘ＿ｌ０」の復号が必要であるか否かが判断され（ステップＳ９６２）、必要であれば「ｒｅｆ＿ｉｄｘ＿ｌ０」の復号が行われる（ステップＳ９５３）。このとき使用されるコンテキスト変数は、「ｒｅｆ＿ｉｄｘ＿ｌ０」のコンテキスト変数（ｃｔｘＩｄｘ＝５４乃至５９）である。同様に、「ｒｅｆ＿ｉｄｘ＿ｌ１」の復号が必要であるか否かが判断され（ステップＳ９６４）、必要であれば「ｒｅｆ＿ｉｄｘ＿ｌ１」の復号が行われる（ステップＳ９５５）。このとき使用されるコンテキスト変数は、「ｒｅｆ＿ｉｄｘ＿ｌ１」のコンテキスト変数（ｃｔｘＩｄｘ＝５４乃至５９）である。
【０１１５】
また、マクロブロック内の４つのサブマクロブロックの各々について、「ｍｖｄ＿ｌ０」の復号が必要であるか否かが判断され（ステップＳ９７１）、必要であればサブマクロブロックパーティションの各々について、「ｍｖｄ＿ｌ０［］［］［０］」および「ｍｖｄ＿ｌ０［］［］［１］」の復号が行われる（ステップＳ９７２、Ｓ９７３）。このとき使用されるコンテキスト変数は、「ｍｖｄ＿ｌ０［］［］［０］」および「ｍｖｄ＿ｌ０［］［］［１］」のコンテキスト変数（ｃｔｘＩｄｘ＝４０乃至５３）である。同様に、マクロブロック内の４つのサブマクロブロックの各々について、「ｍｖｄ＿ｌ１」の復号が必要であるか否かが判断され（ステップＳ９７４）、必要であればサブマクロブロックパーティションの各々について、「ｍｖｄ＿ｌ１［］［］［０］」および「ｍｖｄ＿ｌ１［］［］［１］」の復号が行われる（ステップＳ９７５、Ｓ９７６）。このとき使用されるコンテキスト変数は、「ｍｖｄ＿ｌ１［］［］［０］」および「ｍｖｄ＿ｌ１［］［］［１］」のコンテキスト変数（ｃｔｘＩｄｘ＝４０乃至５３）である。
【０１１６】
図２３および図２４は、「ｒｅｓｉｄｕａｌ」（ステップＳ９８０）の復号手順を示す図である。
【０１１７】
マクロブロックパーティション予測モードが「Ｉｎｔｒａ＿１６ｘ１６」であれば（ステップＳ９８１）、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ０」が復号される（ステップＳ８１０）。そして、「ｒｅｓｉｄｕａｌ＿ｃａｔ１」を復号する必要があるか否かが判断され（ステップＳ９８２）、必要と判断された場合には「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ１」が４回分復号される（ステップＳ８２０）。この判断は、４回繰り返される。
【０１１８】
ステップＳ９８１においてマクロブロックパーティション予測モードが「Ｉｎｔｒａ＿１６ｘ１６」でないと判断された場合、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」が「１」でなければ（ステップＳ９８３）、「ｒｅｓｉｄｕａｌ＿ｃａｔ２」を復号する必要があるか否かが判断され（ステップＳ９８４）、必要と判断された場合には「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ２」が４回分復号される（ステップＳ８３０）。この判断は、４回繰り返される。
【０１１９】
ステップＳ９８３において「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」が「１」であると判断された場合、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ５」が４回分復号される（ステップＳ８６０）。
【０１２０】
Ｃｈｒｏｍａの復号が不要と判断された場合には、ここで「ｒｅｓｉｄｕａｌ」の復号は終了する（ステップＳ９８５）。Ｃｈｒｏｍａの復号が必要と判断された場合には、「ｒｅｓｉｄｕａｌ＿ｃａｔ３」を復号する必要があるか否かが判断され（ステップＳ９８６）、必要と判断された場合には「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ３」が復号される（ステップＳ８４０）。この判断は、２回繰り返される。また、「ｒｅｓｉｄｕａｌ＿ｃａｔ４」を復号する必要があるか否かが判断され（ステップＳ９８７）、必要と判断された場合には「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ４」が復号される（ステップＳ８５０）。この判断は、４×「ＮｕｍＣ８ｘ８」回のループと２回のループの２重ループにより繰り返される。
【０１２１】
図２５は、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ０」（ステップＳ８１０）の復号手順を示す図である。
【０１２２】
「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が復号され（ステップＳ８１１）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が「１」でなければ「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ０」の復号は終了する（ステップＳ８１２）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」のブロックカテゴリー０のコンテキスト変数（ｃｔｘＩｄｘ＝８５乃至８８）である。
【０１２３】
「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号され（ステップＳ８１３）、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が「１」であれば（ステップＳ８１４）、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号される（ステップＳ８１５）。終了が検知されるまでステップＳ８１３以降の処理が繰り返される（ステップＳ８１６）。なお、ここで使用されるコンテキスト変数は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー０のコンテキスト変数（ｃｔｘＩｄｘ＝１０５乃至１１９または２７７乃至２９１）および「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー０のコンテキスト変数（ｃｔｘＩｄｘ＝１６６乃至１８０または３３８乃至３５２）である。
【０１２４】
ステップＳ８１６において終了が検知された後は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が復号される（ステップＳ８１７）。このとき使用されるコンテキスト変数は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のブロックカテゴリー０のコンテキスト変数（ｃｔｘＩｄｘ＝２２７乃至２３６）である。また、「ｃｏｅｆｆ＿ｓｉｇｎ＿ｆｌａｇ」が復号される（ステップＳ８１８）。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
【０１２５】
図２６は、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ１」（ステップＳ８２０）の復号手順を示す図である。
【０１２６】
「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が復号され（ステップＳ８２１）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が「１」でなければ「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ１」の復号は終了する（ステップＳ８２２）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」のブロックカテゴリー１のコンテキスト変数（ｃｔｘＩｄｘ＝８９乃至９２）である。
【０１２７】
「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号され（ステップＳ８２３）、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が「１」であれば（ステップＳ８２４）、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号される（ステップＳ８２５）。終了が検知されるまでステップＳ８２３以降の処理が繰り返される（ステップＳ８２６）。なお、ここで使用されるコンテキスト変数は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー１のコンテキスト変数（ｃｔｘＩｄｘ＝１２０乃至１３３または２９２乃至３０５）および「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー１のコンテキスト変数（ｃｔｘＩｄｘ＝１８１乃至１９４または３５３乃至３６６）である。
【０１２８】
ステップＳ８２６において終了が検知された後は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が復号される（ステップＳ８２７）。このとき使用されるコンテキスト変数は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のブロックカテゴリー１のコンテキスト変数（ｃｔｘＩｄｘ＝２３７乃至２４６）である。また、「ｃｏｅｆｆ＿ｓｉｇｎ＿ｆｌａｇ」が復号される（ステップＳ８２８）。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
【０１２９】
図２７は、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ２」（ステップＳ８３０）の復号手順を示す図である。
【０１３０】
「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が復号され（ステップＳ８３１）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が「１」でなければ「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ２」の復号は終了する（ステップＳ８３２）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」のブロックカテゴリー２のコンテキスト変数（ｃｔｘＩｄｘ＝９３乃至９６）である。
【０１３１】
「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号され（ステップＳ８３３）、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が「１」であれば（ステップＳ８３４）、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号される（ステップＳ８３５）。終了が検知されるまでステップＳ８３３以降の処理が繰り返される（ステップＳ８３６）。なお、ここで使用されるコンテキスト変数は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー２のコンテキスト変数（ｃｔｘＩｄｘ＝１３４乃至１４８または３０６乃至３２０）および「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー２のコンテキスト変数（ｃｔｘＩｄｘ＝１９５乃至２０９または３６７乃至３８１）である。
【０１３２】
ステップＳ８３６において終了が検知された後は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が復号される（ステップＳ８３７）。このとき使用されるコンテキスト変数は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のブロックカテゴリー２のコンテキスト変数（ｃｔｘＩｄｘ＝２４７乃至２５６）である。また、「ｃｏｅｆｆ＿ｓｉｇｎ＿ｆｌａｇ」が復号される（ステップＳ８３８）。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
【０１３３】
図２８は、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ３」（ステップＳ８４０）の復号手順を示す図である。
【０１３４】
「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が復号され（ステップＳ８４１）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が「１」でなければ「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ３」の復号は終了する（ステップＳ８４２）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」のブロックカテゴリー３のコンテキスト変数（ｃｔｘＩｄｘ＝９７乃至１００）である。
【０１３５】
「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号され（ステップＳ８４３）、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が「１」であれば（ステップＳ８４４）、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号される（ステップＳ８４５）。終了が検知されるまでステップＳ８４３以降の処理が繰り返される（ステップＳ８４６）。なお、ここで使用されるコンテキスト変数は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー３のコンテキスト変数（ｃｔｘＩｄｘ＝１４９乃至１５１または３２１乃至３２３）および「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー３のコンテキスト変数（ｃｔｘＩｄｘ＝２１０乃至２１２または３８２乃至３８４）である。
【０１３６】
ステップＳ８４６において終了が検知された後は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が復号される（ステップＳ８４７）。このとき使用されるコンテキスト変数は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のブロックカテゴリー３のコンテキスト変数（ｃｔｘＩｄｘ＝２５７乃至２６５）である。また、「ｃｏｅｆｆ＿ｓｉｇｎ＿ｆｌａｇ」が復号される（ステップＳ８４８）。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
【０１３７】
図２９は、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ４」（ステップＳ８５０）の復号手順を示す図である。
【０１３８】
「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が復号され（ステップＳ８５１）、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」が「１」でなければ「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ４」の復号は終了する（ステップＳ８５２）。このとき使用されるコンテキスト変数は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」のブロックカテゴリー４のコンテキスト変数（ｃｔｘＩｄｘ＝１０１乃至１０４）である。
【０１３９】
「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号され（ステップＳ８５３）、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が「１」であれば（ステップＳ８５４）、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号される（ステップＳ８５５）。終了が検知されるまでステップＳ８５３以降の処理が繰り返される（ステップＳ８５６）。なお、ここで使用されるコンテキスト変数は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー４のコンテキスト変数（ｃｔｘＩｄｘ＝１５２乃至１６５または３２４乃至３３７）および「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー４のコンテキスト変数（ｃｔｘＩｄｘ＝２１３乃至２２６または３８５乃至３９８）である。
【０１４０】
ステップＳ８５６において終了が検知された後は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が復号される（ステップＳ８５７）。このとき使用されるコンテキスト変数は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のブロックカテゴリー４のコンテキスト変数（ｃｔｘＩｄｘ＝２６６乃至２７５）である。また、「ｃｏｅｆｆ＿ｓｉｇｎ＿ｆｌａｇ」が復号される（ステップＳ８５８）。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
【０１４１】
図３０は、「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ５」（ステップＳ８６０）の復号手順を示す図である。
【０１４２】
「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号され（ステップＳ８６３）、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が「１」であれば（ステップＳ８６４）、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」が復号される（ステップＳ８６５）。終了が検知されるまでステップＳ８６３以降の処理が繰り返される（ステップＳ８６６）。なお、ここで使用されるコンテキスト変数は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー５のコンテキスト変数（ｃｔｘＩｄｘ＝４０２乃至４１６または４３６乃至４５０）および「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のブロックカテゴリー５のコンテキスト変数（ｃｔｘＩｄｘ＝４１７乃至４２５または４５１乃至４５９）である。
【０１４３】
ステップＳ８６６において終了が検知された後は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」が復号される（ステップＳ８６７）。このとき使用されるコンテキスト変数は、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のブロックカテゴリー５のコンテキスト変数（ｃｔｘＩｄｘ＝４２６乃至４３５）である。また、「ｃｏｅｆｆ＿ｓｉｇｎ＿ｆｌａｇ」が復号される（ステップＳ８６８）。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
【０１４４】
以上の復号手順から分かるように、前半において復号されるシンタックス要素について３本の演算レジスタが必要であり、また、後半において復号されるシンタックス要素について３本の演算レジスタが必要であることから、少なくとも３本の演算レジスタがあれば余分な転送を減らすことができる。しかし、「ｒｅｓｉｄｕａｌ」の復号後には、「ｍｂ＿ｔｙｐｅ」や「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」といった前半において復号されるシンタックス要素の復号が再び必要になる。そのため、「ｒｅｓｉｄｕａｌ」の復号後には、１２８ビットレジスタのメインメモリ３００へのストアによる待ちの影響によって、処理の効率が落ちる可能性がある。ストア待ちの影響を少なくし、「ｍｂ＿ｔｙｐｅ」や「ｍｂ＿ｓｋｉｐ＿ｆｌａｇ」の復号を始められるようにするには、３本の演算レジスタとは別に１本の演算レジスタがあればよい。このように、４本の演算レジスタがＣＡＢＡＣ復号器からアクセス可能であれば、余分なレジスタ転送を減らすことができる。また、後半において復号されるシンタックス要素から前半において復号されるシンタックス要素の復号に移行する際に、メインメモリ３００へのロードストアのレイテンシによる影響を小さくすることができる。
【０１４５】
以上のことから、ＣＡＢＡＣ復号器に接続された４本の演算レジスタと、前半に復号されるシンタックス要素のための４本の退避レジスタとを合わせた計８本のレジスタを備えるレジスタファイル１２０によって効率良く復号を行うことができることがわかる。
【０１４６】
本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０は、４本の演算レジスタが接続されており、それらは命令によって使い分けられる。ここでは復号命令として、「ｃａｂａｃ＿ｄｅｃ０命令」、「ｃａｂａｃ＿ｄｅｃ１命令」、「ｃａｂａｃ＿ｄｅｃ２命令」および「ｃａｂａｃ＿ｄｅｃ３命令」の４つを想定する。
【０１４７】
「ｃａｂａｃ＿ｄｅｃ０命令」は、後半に復号されるシンタックス要素を復号する命令である。すなわち、「ｃａｂａｃ＿ｄｅｃ０命令」は、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」をレジスタＣＶ０に保持されるコンテキスト変数を使用して復号し、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」をレジスタＣＶ１に保持されるコンテキスト変数を使用して復号し、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」をレジスタＣＶ２に保持されるコンテキスト変数を使用して復号する。
【０１４８】
「ｃａｂａｃ＿ｄｅｃ１命令」は、「ｍｖｄ＿ｌ０」および「ｍｖｄ＿ｌ１」をレジスタＣＶ１に保持されるコンテキスト変数を使用して復号する。
【０１４９】
「ｃａｂａｃ＿ｄｅｃ２命令」は、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」と、「ｔｒａｎｓｆｏｒｍ＿ｓｉｚｅ＿８ｘ８＿ｆｌａｇ」と、「ｍｂ＿ｆｉｅｌｄ＿ｄｅｃｏｄｉｎｇ＿ｆｌａｇ」と、「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｐａｔｔｅｒｎ」とをレジスタＣＶ２に保持されるコンテキスト変数を使用して復号する。
【０１５０】
「ｃａｂａｃ＿ｄｅｃ３命令」は、これら以外の前半に復号されるシンタックス要素をレジスタＣＶ３に保持されるコンテキスト変数を使用して復号する。
【０１５１】
「ｃａｂａｃ＿ｄｅｃ０命令」は、逆直交変換の係数を復号するためのｃｔｘＩｄｘの算出と、復号された複数のＢｉｎからの多値化処理とを行い、ＤＭＡ制御部１５０を経由してメインメモリ３００に復号データを書き込む。その他の「ｃａｂａｃ＿ｄｅｃ１〜３命令」は、ライトバック処理部１１５を経由してＣＰＵ２００のレジスタへ復号結果を書き込むことにより、ＣＰＵ２００に処理結果を返すようになっている。ＣＰＵ２００は、その値に従って次のｃｔｘＩｄｘの算出と多値化処理を行う。
【０１５２】
また、本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０は、以下のようなレジスタ関連命令を備える。
【０１５３】
図３１は、本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０のコンテキスト初期化命令の形式例を示す図である。このコンテキスト初期化命令（ｉｎｉｔ命令）は、オペランドとして、「ｃｖ＿ｄｓｔ」、「ｉｍｍ＿ｃｉｄｘ」、「ｉｍｍ＿ｃｎｕｍ」および「ｉｍｍ＿ｃｔｘＩｄｘ」を備えている。
【０１５４】
「ｃｖ＿ｄｓｔ」は、コンテキスト変数を格納するレジスタ番号を示すものである。「ｉｍｍ＿ｃｉｄｘ」は、コンテキスト変数の格納先のｃｉｄｘを示す即値である。「ｉｍｍ＿ｃｎｕｍ」は、コンテキスト変数の数を示す即値である。「ｉｍｍ＿ｃｔｘＩｄｘ」は、Ｈ．２６４において規定されたｃｔｘＩｄｘを示す即値である。
【０１５５】
このコンテキスト初期化命令の各オペランドに従って、初期値パラメータテーブル１３３およびコンテキスト変数初期値生成部１３２により初期値を生成して転送バッファ１３１に格納することによって、レジスタに直接初期値を設定することができる。
【０１５６】
図３２は、本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０のコンテキスト交換転送命令の形式例を示す図である。このコンテキスト交換転送命令（ｓｗａｐ命令またはｓｗａｐ＿ｃｎｄ命令）は、オペランドとして、「ｃｖ＿ｄｓｔ」、「ｃｖ＿ｓｒｃ」、「ｃｎｄｅｎ」および「ｃｎｄｓｗ」を備えている。
【０１５７】
「ｃｖ＿ｄｓｔ」は、交換転送先レジスタのレジスタ番号を示すものである。「ｃｖ＿ｓｒｃ」は、交換転送元レジスタのレジスタ番号を示すものである。
【０１５８】
「ｃｎｄｅｎ」は、転送の際の交換を無条件に行うか、条件付きとするかのフラグである。この「ｃｎｄｅｎ」が「０」であれば、無条件で交換転送する命令（ｓｗａｐ命令）であることを意味する。一方、この「ｃｎｄｅｎ」が「１」であれば、条件付きで交換転送する命令（ｓｗａｐ＿ｃｎｄ命令）であることを意味する。すなわち、「ｃｎｄｓｗ」と「ｃｖ_ｓｒｃ」の交換情報ビット（Ｃ１４の余剰ビット）とが異なる場合には交換転送を行うことを意味し、「ｃｎｄｓｗ」と「ｃｖ_ｓｒｃ」の交換情報ビットとが等しい場合には交換なしの転送を行うことを意味する。「ｃｎｄｓｗ」は、ｃｎｄｅｎが「１」である場合の、転送の際の交換の有無を判断する対象である。
【０１５９】
このコンテキスト交換転送命令の各オペランドに従って、交換転送処理部１３４およびセレクタ１３５により、無条件もしくは条件付きの交換転送が行われる。
【０１６０】
図３３は、本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０の転送命令の形式例を示す図である。この転送命令（ｍｏｖ命令）は、オペランドとして、「ｃｖ＿ｄｓｔ」および「ｃｖ＿ｓｒｃ」を備えている。
【０１６１】
「ｃｖ＿ｄｓｔ」は、交換転送先レジスタのレジスタ番号を示すものである。「ｃｖ＿ｓｒｃ」は、交換転送元レジスタのレジスタ番号を示すものである。
【０１６２】
この転送命令が実行された場合には、セレクタ１３５は転送バッファ１３１からのデータを選択して出力する。
【０１６３】
以下では、コンテキスト変数のシンタックス要素の変化に着目して、主要な命令実行の流れについて抽出して説明する。
【０１６４】
図３４は、本発明の実施の形態において前半に復号されるシンタックス要素のうちＩスライスまたはＳＩスライスに関する処理内容例を示す図である。
【０１６５】
処理７１１では、初期化処理が行われる。「ｉｎｉｔ＿ｍｅｍｏｒｙ＿ｃｔｘ（）」は、後半に復号されるシンタックス要素のためのコンテキスト変数をレジスタファイル１２０において初期化して、メインメモリ３００にストアする命令である。また、「ｉｎｉｔ」は上述のようにレジスタの初期化命令であり、ここでは対象となるレジスタ番号（ｃｖ＿ｄｓｔ）のみが記されている。すなわち、レジスタＣＶ４、ＣＶ６およびＣＶ７の初期化が行われる。
【０１６６】
処理７１２では、レジスタ間の転送処理が行われる。「ｍｏｖ」は上述のようにレジスタ間の転送命令であり、ここではＣＶ７の内容がＣＶ２に転送され、ＣＶ４の内容がＣＶ３に転送されている。
【０１６７】
処理７１３では、次のレジスタ間の転送処理が行われる。ここではＣＶ３の内容がＣＶ４に転送され、ＣＶ６の内容がＣＶ３に転送されている。
【０１６８】
処理７１４では、次のレジスタ間の転送処理が行われる。ここではＣＶ２の内容がＣＶ７に転送されている。
【０１６９】
処理７１５では、次のレジスタ間の転送処理が行われる。ここではＣＶ３の内容がＣＶ６に転送されている。
【０１７０】
図３５は、図３４の処理手順によるレジスタ間転送の態様を示す図である。この図から、前半に復号されるシンタックス要素の退避場所をＣＶ４、ＣＶ６およびＣＶ７として、使用前にＣＶ２およびＣＶ３に転送して、使用後に再びＣＶ４、ＣＶ６およびＣＶ７に退避する様子が分かる。
【０１７１】
図３６は、本発明の実施の形態において前半に復号されるシンタックス要素のうちＰスライスまたはＢスライスに関する処理内容例を示す図である。
【０１７２】
処理７２１では、初期化処理が行われる。ここでは、処理７１１と同様に「ｉｎｉｔ＿ｍｅｍｏｒｙ＿ｃｔｘ（）」によりメモリの初期化が行われる。そして、レジスタＣＶ４乃至ＣＶ７の初期化が行われる。
【０１７３】
処理７２２では、レジスタ間の転送処理が行われる。ここではＣＶ７の内容がＣＶ２に転送され、ＣＶ４の内容がＣＶ３に転送されている。
【０１７４】
処理７２３では、レジスタ間の転送処理および交換転送処理が行われる。すなわち、ＣＶ３の内容がＣＶ４に転送され、ＣＶ２の内容がＣＶ２に交換転送され、ＣＶ６の内容がＣＶ３に転送され、ＣＶ５の内容がＣＶ１に転送されている。
【０１７５】
処理７２４では、次のレジスタ間の転送処理および交換転送処理が行われる。すなわち、ＣＶ１の内容がＣＶ５に転送され、ＣＶ２の内容がＣＶ７に交換転送される。
【０１７６】
処理７２５では、次のレジスタ間の転送処理が行われる。ここではＣＶ３の内容がＣＶ６に転送されている。
【０１７７】
図３７は、図３６の処理手順によるレジスタ間転送の態様を示す図である。この図から、前半に復号されるシンタックス要素の退避場所をＣＶ４乃至ＣＶ７として、使用前にＣＶ１乃至ＣＶ３に転送して、使用後に再びＣＶ４乃至ＣＶ７に退避する様子が分かる。
【０１７８】
図３８は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー０に関する処理内容例を示す図である。
【０１７９】
処理７４１では、メインメモリ３００からレジスタファイル１２０へのロードが行われる。すなわち、ブロックカテゴリー０の「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｓｉｇ０）からＣＶ０へのロードが行われる。また、ブロックカテゴリー０の「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｌａｓｔ０）からＣＶ１へのロードが行われる。また、ブロックカテゴリー０の「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のコンテキスト変数の格納アドレス（ａｂｓ０）からＣＶ２へのロードが行われる。
【０１８０】
処理７４２では、メインメモリ３００へのストアが行われる。すなわち、ＣＶ０の内容がｓｉｇ０へストアされ、ＣＶ１の内容がｌａｓｔ０へストアされる。
【０１８１】
処理７４３では、メインメモリ３００への次のストアが行われる。すなわち、ＣＶ２の内容がａｂｓ０へストアされる。
【０１８２】
図３９は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー１に関する処理内容例を示す図である。
【０１８３】
処理７５１では、メインメモリ３００からレジスタファイル１２０へのロードが行われる。すなわち、ブロックカテゴリー１の「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｓｉｇ１）からＣＶ０へのロードが行われる。また、ブロックカテゴリー１の「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｌａｓｔ１）からＣＶ１へのロードが行われる。また、ブロックカテゴリー１の「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のコンテキスト変数の格納アドレス（ａｂｓ１）からＣＶ２へのロードが行われる。
【０１８４】
処理７５２では、メインメモリ３００へのストアが行われる。すなわち、ＣＶ０の内容がｓｉｇ１へストアされ、ＣＶ１の内容がｌａｓｔ１へストアされる。
【０１８５】
処理７５３では、メインメモリ３００への次のストアが行われる。すなわち、ＣＶ２の内容がａｂｓ１へストアされる。
【０１８６】
図４０は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー２に関する処理内容例を示す図である。
【０１８７】
処理７６１では、メインメモリ３００からレジスタファイル１２０へのロードが行われる。すなわち、ブロックカテゴリー２の「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｓｉｇ２）からＣＶ０へのロードが行われる。また、ブロックカテゴリー２の「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｌａｓｔ２）からＣＶ１へのロードが行われる。また、ブロックカテゴリー２の「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のコンテキスト変数の格納アドレス（ａｂｓ２）からＣＶ２へのロードが行われる。
【０１８８】
処理７６２では、メインメモリ３００へのストアが行われる。すなわち、ＣＶ０の内容がｓｉｇ２へストアされ、ＣＶ１の内容がｌａｓｔ２へストアされる。
【０１８９】
処理７６３では、メインメモリ３００への次のストアが行われる。すなわち、ＣＶ２の内容がａｂｓ２へストアされる。
【０１９０】
図４１は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー３に関する処理内容例を示す図である。
【０１９１】
処理７７１では、メインメモリ３００からレジスタファイル１２０へのロードが行われる。すなわち、ブロックカテゴリー３の「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｓｉｇ３）からＣＶ０へのロードが行われる。また、ブロックカテゴリー３の「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｌａｓｔ３）からＣＶ１へのロードが行われる。また、ブロックカテゴリー３の「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のコンテキスト変数の格納アドレス（ａｂｓ３）からＣＶ２へのロードが行われる。
【０１９２】
処理７７２では、メインメモリ３００へのストアが行われる。すなわち、ＣＶ０の内容がｓｉｇ３へストアされ、ＣＶ１の内容がｌａｓｔ３へストアされる。
【０１９３】
処理７７３では、メインメモリ３００への次のストアが行われる。すなわち、ＣＶ２の内容がａｂｓ３へストアされる。
【０１９４】
図４２は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー４に関する処理内容例を示す図である。
【０１９５】
処理７８１では、メインメモリ３００からレジスタファイル１２０へのロードが行われる。すなわち、ブロックカテゴリー４の「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｓｉｇ４）からＣＶ０へのロードが行われる。また、ブロックカテゴリー４の「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｌａｓｔ４）からＣＶ１へのロードが行われる。また、ブロックカテゴリー４の「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のコンテキスト変数の格納アドレス（ａｂｓ４）からＣＶ２へのロードが行われる。
【０１９６】
処理７８２では、メインメモリ３００へのストアが行われる。すなわち、ＣＶ０の内容がｓｉｇ４へストアされ、ＣＶ１の内容がｌａｓｔ４へストアされる。
【０１９７】
処理７８３では、メインメモリ３００への次のストアが行われる。すなわち、ＣＶ２の内容がａｂｓ４へストアされる。
【０１９８】
図４３は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー５に関する処理内容例を示す図である。
【０１９９】
処理７９１では、メインメモリ３００からレジスタファイル１２０へのロードが行われる。すなわち、ブロックカテゴリー５の「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｓｉｇ５）からＣＶ０へのロードが行われる。また、ブロックカテゴリー５の「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」のコンテキスト変数の格納アドレス（ｌａｓｔ５）からＣＶ１へのロードが行われる。また、ブロックカテゴリー５の「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」のコンテキスト変数の格納アドレス（ａｂｓ５）からＣＶ２へのロードが行われる。
【０２００】
処理７９２では、メインメモリ３００へのストアが行われる。すなわち、ＣＶ０の内容がｓｉｇ５へストアされ、ＣＶ１の内容がｌａｓｔ５へストアされる。
【０２０１】
処理７９３では、メインメモリ３００への次のストアが行われる。すなわち、ＣＶ２の内容がａｂｓ５へストアされる。
【０２０２】
なお、上述の処理７５１乃至７５３、処理７６１乃至７６３、処理７７１乃至７７３、処理７８１乃至７８３、および、処理７９１乃至７９３については、ループ内の処理であるため、同じコンテキスト変数を連続して何回か使用する場合には、ストアとロードは省略することができる。
【０２０３】
図４４は、図３８乃至図４３の処理手順によるレジスタ間転送の態様を示す図である。この図から、後半に復号されるシンタックス要素をブロックカテゴリー毎に、ＣＶ０乃至ＣＶ２にロードして、ＣＡＢＡＣ復号後にストアする様子が分かる。
【０２０４】
前半に復号されるシンタックス要素に関する処理は、複雑であるが、処理量は少ない。具体的には、コンテキストインデックスの算出が複雑であり、Ｂｉｎ数の割合が１０乃至２０％程度と少ない。したがって、メインメモリ３００にコンテキスト変数を格納しておくとレイテンシの影響が大きいため、ＣＶ４乃至ＣＶ７に退避して復号する。
【０２０５】
一方、後半に復号されるシンタックス要素に関する処理は、単純であるが処理量が多いため、同じコンテキスト変数を連続して使い続けることができる。具体的には、コンテキストインデックスの算出が単純であり、Ｂｉｎ数の割合が８０乃至９０％程度と多い。したがって、ロードまたはストアのレイテンシを隠蔽し易いため、コンテキスト変数をメインメモリ３００に格納して、ブロックカテゴリーの境目でＣＶ０乃至ＣＶ２のコンテキスト変数を入れ替えながら復号する。
【０２０６】
図４５は、本発明の実施の形態における復号処理の概要を示す図である。この図は、データ操作に着目したものである。最初に必要なコンテキスト変数の初期値生成を行い（６１１）、前半に復号されるシンタックス要素はレジスタＣＶ４〜７に退避したままで、後半に復号されるシンタックス要素の初期値がメインメモリ３００にストアされる（６１２）。
【０２０７】
前半処理６２０では、ＣＶ４乃至ＣＶ７に退避されていたコンテキスト変数をＣＶ０乃至ＣＶ３に転送して（６２１）、復号処理を行う（６２２）。そして、更新されたものをＣＶ４乃至ＣＶ７の元のレジスタに書き戻す処理（６２３）を繰り返すことにより、前半に復号されるべきシンタックス要素を全て復号する。
【０２０８】
後半処理６３０では、ブロックカテゴリー毎に必要なコンテキスト変数をメインメモリ３００からＣＶ０乃至ＣＶ２にロードし（６３１）、復号処理を行う（６３２）。そして、更新されたものをメインメモリ３００にストアする処理（６３３）を繰り返すことにより、後半に復号されるべきシンタックス要素を全て復号する。
【０２０９】
図４６は、本発明の実施の形態においてロードおよびストアのレイテンシが隠蔽される例を示す図である。ここでは、ブロックカテゴリー３を２回復号した後に、ブロックカテゴリー４を実行するまでの様子を示している。
【０２１０】
「Ｂｒａｎｃｈ」は、「ｃａｂａｃ＿ｄｅｃ２」において復号された「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」の結果によって、「ｃａｂａｃ＿ｄｅｃ０」において係数の復号をするか否かの分岐を行う命令である。この場合、全ての係数を復号することを仮定している。「ｃｏｄｅｄ＿ｂｌｏｃｋ＿ｆｌａｇ」のコンテキストインデックスの算出を行う命令があることを想定し、それを「ｃｔｘｉｄｘ＿ｃｂｆ」とした。ここでは、基本的に４段のパイプラインを想定している。すなわち、命令フェッチおよび命令デコードを行うデコードステージ（ＩＤ）、レジスタからオペランドフェッチを行うレジスタフェッチステージ（ＲＦ）、演算処理などを実行する実行ステージ（ＥＸ）、および、レジスタへの書戻しを行うライトバックステージ（ＷＢ）の４段である。また、メモリへのストア処理を行うメモリステージ（ＭＥＭ）も設けられる。ロードストアはデータキャッシュにヒットしていることを想定した。レジスタはフォワーディング（バイパス）されており、一つ前の命令の実行ステージ（ＥＸ）における演算結果は、ライトバックステージ（ＷＢ）の完了を待たずに、次の命令のレジスタフェッチステージ（ＲＦ）で参照できるものとする。
【０２１１】
「ｃａｂａｃ＿ｄｅｃ０命令」は、レジスタフェッチステージ（ＲＦ）でＣＶ０乃至ＣＶ２の使用権を復号制御部１９０から取得する。そして、「ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」を復号する「ＥＸｓｉｇ」と、「ｌａｓｔ＿ｓｉｇｎｉｆｉｃａｎｔ＿ｃｏｅｆｆ＿ｆｌａｇ」を復号する「ＥＸｌａｓｔ」とを交互に繰り返す。その結果、１ブロック分の処理が終了すると、「ＷＢｓｉｇ」および「ＷＢｌａｓｔ」において、ＣＶ０およびＣＶ１のレジスタの使用権を復号制御部１９０に返す。これにより、復号された係数の数だけ「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」を復号する。ただし、「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」は複数のＢｉｎであるため、１つの係数毎に「ＥＸａｂｓ」を複数回繰り返し、その後に、コンテキスト変数を必要としないデコードバイパスで正負の符号などを復号する「ＥＸｓｉｇｎ」を行う。そして、最後の係数の「ＥＸａｂｓ」が終了すると、「ＷＢａｂｓ」においてＣＶ２の使用権を復号制御部１９０へ返して、復号された係数が「ＭＥＭ」においてメインメモリ３００に書き込まれる。ＣＶ０およびＣＶ１は、早期に使用権が返されるため、ストア処理と次のロード処理とが「ｃｏｅｆｆ＿ａｂｓ＿ｌｅｖｅｌ＿ｍｉｎｕｓ１」の復号中に実行することができる。
【０２１２】
このように、本発明の実施の形態によれば、ＣＡＢＡＣ復号演算器１１０にコンテキスト変数を供給する複数本の演算レジスタをレジスタファイル１２０に設けるとともに、前半に復号されるシンタックス要素のコンテキスト変数を退避する複数本の退避レジスタをレジスタファイル１２０に設けることにより、効率良く復号を行うことができる。特に、前半に復号されるシンタックス要素のコンテキスト変数は退避レジスタに退避されるため、メインメモリ３００へのアクセスを抑制することができる。
【０２１３】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【図面の簡単な説明】
【０２１４】
【図１】本発明の実施の形態における算術復号装置の一例としてのＣＡＢＡＣ復号器２０の一構成例を示す図である。
【図２】本発明の実施の形態における算術復号装置をＣＡＢＡＣ復号コプロセッサ１００として実現した場合の一構成例を示す図である。
【図３】本発明の実施の形態におけるシンタックス要素のコンテキストグループの一例を示す図である。
【図４】本発明の実施の形態におけるマクロブロックタイプコンテキストグループのコンテキスト変数の割当例を示す図である。
【図５】本発明の実施の形態におけるＭＶＤコンテキストグループのコンテキスト変数の割当例を示す図である。
【図６】本発明の実施の形態における予測コンテキストグループのコンテキスト変数の割当例を示す図である。
【図７】本発明の実施の形態におけるブロック情報コンテキストグループのコンテキスト変数の割当例を示す図である。
【図８】本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー０のコンテキスト変数の割当例を示す図である。
【図９】本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー１のコンテキスト変数の割当例を示す図である。
【図１０】本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー２のコンテキスト変数の割当例を示す図である。
【図１１】本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー３のコンテキスト変数の割当例を示す図である。
【図１２】本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー４のコンテキスト変数の割当例を示す図である。
【図１３】本発明の実施の形態におけるｒｅｓｉｄｕａｌコンテキストグループのブロックカテゴリー５のコンテキスト変数の割当例を示す図である。
【図１４】本発明の実施の形態におけるレジスタファイル１２０の各レジスタとコンテキスト変数との関係例を示す図である。
【図１５】本発明の実施の形態におけるレジスタファイル１２０のレジスタ間の交換転送の態様例を示す図である。
【図１６】本発明の実施の形態におけるレジスタ転送処理部１３０の一構成例を示す図である。
【図１７】Ｈ．２６４におけるｓｌｉｃｅ＿ｄａｔａのシンタックス要素の構文解析（ｐａｒｓｅ）処理を抽出したフローチャートを示す図である。
【図１８】マクロブロック層（ステップＳ９１０）の復号手順を示す図である。
【図１９】「ｍｂ＿ｐｒｅｄ」（ステップＳ９３０）の復号手順の前半を示す図である。
【図２０】「ｍｂ＿ｐｒｅｄ」（ステップＳ９３０）の復号手順の後半を示す図である。
【図２１】「ｓｕｂ＿ｍｂ＿ｐｒｅｄ」（ステップＳ９６０）の復号手順の前半を示す図である。
【図２２】「ｓｕｂ＿ｍｂ＿ｐｒｅｄ」（ステップＳ９６０）の復号手順の後半を示す図である。
【図２３】「ｒｅｓｉｄｕａｌ」（ステップＳ９８０）の復号手順の前半を示す図である。
【図２４】「ｒｅｓｉｄｕａｌ」（ステップＳ９８０）の復号手順の後半を示す図である。
【図２５】「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ０」（ステップＳ８１０）の復号手順を示す図である。
【図２６】「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ１」（ステップＳ８２０）の復号手順を示す図である。
【図２７】「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ２」（ステップＳ８３０）の復号手順を示す図である。
【図２８】「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ３」（ステップＳ８４０）の復号手順を示す図である。
【図２９】「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ４」（ステップＳ８５０）の復号手順を示す図である。
【図３０】「ｒｅｓｉｄｕａｌ＿ｂｌｏｃｋ＿ｃａｔ５」（ステップＳ８６０）の復号手順を示す図である。
【図３１】本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０のコンテキスト初期化命令の形式例を示す図である。
【図３２】本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０のコンテキスト交換転送命令の形式例を示す図である。
【図３３】本発明の実施の形態におけるＣＡＢＡＣ復号演算器１１０の転送命令の形式例を示す図である。
【図３４】本発明の実施の形態において前半に復号されるシンタックス要素のうちＩスライスまたはＳＩスライスに関する処理内容例を示す図である。
【図３５】図３４の処理手順によるレジスタ間転送の態様を示す図である。
【図３６】本発明の実施の形態において前半に復号されるシンタックス要素のうちＰスライスまたはＢスライスに関する処理内容例を示す図である。
【図３７】図３６の処理手順によるレジスタ間転送の態様を示す図である。
【図３８】本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー０に関する処理内容例を示す図である。
【図３９】本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー１に関する処理内容例を示す図である。
【図４０】本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー２に関する処理内容例を示す図である。
【図４１】本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー３に関する処理内容例を示す図である。
【図４２】本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー４に関する処理内容例を示す図である。
【図４３】本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー５に関する処理内容例を示す図である。
【図４４】図３８乃至図４３の処理手順によるレジスタ間転送の態様を示す図である。
【図４５】本発明の実施の形態における復号処理の概要を示す図である。
【図４６】本発明の実施の形態においてロードおよびストアのレイテンシが隠蔽される例を示す図である。
【図４７】Ｈ．２６４のＣＡＢＡＣ復号に必要なコンテキスト変数とコンテキストインデックスとの関係を示す第１の図である。
【図４８】Ｈ．２６４のＣＡＢＡＣ復号に必要なコンテキスト変数とコンテキストインデックスとの関係を示す第２の図である。
【図４９】Ｈ．２６４のＣＡＢＡＣ復号に必要なコンテキスト変数とコンテキストインデックスとの関係を示す第３の図である。
【図５０】スライスタイプがＢスライスである場合の、「ｍｂ＿ｔｙｐｅ」の復号フローを示す図である。
【符号の説明】
【０２１５】
１０  符号列入力部
２０  ＣＡＢＡＣ復号器
２１  二値算術符号復号処理部
２２  コンテキストインデックス計算処理部
２３  コンテキスト変数テーブル保持部
２４  多値化処理部
１００  復号コプロセッサ
１１０  復号演算器
１１５  ライトバック処理部
１２０  レジスタファイル
１３０  レジスタ転送処理部
１３１  転送バッファ
１３２  コンテキスト変数初期値生成部
１３３  初期値パラメータテーブル
１３４  交換転送処理部
１３５  セレクタ
１４０  ロードストア処理部
１５０  ＤＭＡ制御部
１６０  ＩＮＩＴＩＤＣ制御レジスタ
１７０  ＳＬＩＣＥＱＰＹ制御レジスタ
１８０  命令デコード処理部
１９０  復号制御部
３００  メインメモリ
３１０  命令キャッシュ
３２０  データキャッシュ
【図１】
0004962400.tif 000002
【図２】
0004962400.tif 000003
【図３】
0004962400.tif 000004
【図４】
0004962400.tif 000005
【図５】
0004962400.tif 000006
【図６】
0004962400.tif 000007
【図７】
0004962400.tif 000008
【図８】
0004962400.tif 000009
【図９】
0004962400.tif 000010
【図１０】
0004962400.tif 000011
【図１１】
0004962400.tif 000012
【図１２】
0004962400.tif 000013
【図１３】
0004962400.tif 000014
【図１４】
0004962400.tif 000015
【図１５】
0004962400.tif 000016
【図１６】
0004962400.tif 000017
【図１７】
0004962400.tif 000018
【図１８】
0004962400.tif 000019
【図１９】
0004962400.tif 000020
【図２０】
0004962400.tif 000021
【図２１】
0004962400.tif 000022
【図２２】
0004962400.tif 000023
【図２３】
0004962400.tif 000024
【図２４】
0004962400.tif 000025
【図２５】
0004962400.tif 000026
【図２６】
0004962400.tif 000027
【図２７】
0004962400.tif 000028
【図２８】
0004962400.tif 000029
【図２９】
0004962400.tif 000030
【図３０】
0004962400.tif 000031
【図３１】
0004962400.tif 000032
【図３２】
0004962400.tif 000033
【図３３】
0004962400.tif 000034
【図３４】
0004962400.tif 000035
【図３５】
0004962400.tif 000036
【図３６】
0004962400.tif 000037
【図３７】
0004962400.tif 000038
【図３８】
0004962400.tif 000039
【図３９】
0004962400.tif 000040
【図４０】
0004962400.tif 000041
【図４１】
0004962400.tif 000042
【図４２】
0004962400.tif 000043
【図４３】
0004962400.tif 000044
【図４４】
0004962400.tif 000045
【図４５】
0004962400.tif 000046
【図４６】
0004962400.tif 000047
【図４７】
0004962400.tif 000048
【図４８】
0004962400.tif 000049
【図４９】
0004962400.tif 000050
【図５０】
0004962400.tif 000051