JP4962400B2 - 算術復号装置 - Google Patents

算術復号装置 Download PDF

Info

Publication number
JP4962400B2
JP4962400B2 JP2008118493A JP2008118493A JP4962400B2 JP 4962400 B2 JP4962400 B2 JP 4962400B2 JP 2008118493 A JP2008118493 A JP 2008118493A JP 2008118493 A JP2008118493 A JP 2008118493A JP 4962400 B2 JP4962400 B2 JP 4962400B2
Authority
JP
Japan
Prior art keywords
context
register
flag
decoding
arithmetic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008118493A
Other languages
English (en)
Other versions
JP2009268031A (ja
Inventor
浩章 坂口
洋 芳川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Priority to JP2008118493A priority Critical patent/JP4962400B2/ja
Priority to US12/431,828 priority patent/US7884743B2/en
Publication of JP2009268031A publication Critical patent/JP2009268031A/ja
Application granted granted Critical
Publication of JP4962400B2 publication Critical patent/JP4962400B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4006Conversion to or from arithmetic code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F2009/3883Two-engine architectures, i.e. stand-alone processor acting as a slave processor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Description

本発明は、算術復号方式に関し、特にコンテキスト適応型二値算術符号化方式(CABAC:Context-Adaptive Binary Arithmetic Coding)により符号化されたデータを復号する算術復号装置に関する。
コンテキスト適応型二値算術符号化方式(CABAC)は、ITU−T(International Telecommunication Union - Telecommunication standardization sector:国際電気通信連合の電気通信標準化部門)において標準化されたH.264における、エントロピー符号化方式の一つである。このCABACでは、符号化前に各種多値データを「0」か「1」のシンボルで表現することにより二値化する。それを二値算術符号化処理によって符号化する。復号(デコード)の際にはその逆の処理を行うことになる。
二値算術符号化処理は、「0」か「1」のシンボルで表現されたデータをさらに出現確率が高いと推測される方のシンボルを優勢確率シンボル(MPS:Most Probable Symbol)とし、MPSでない方を劣勢確率シンボル(LPS:Least Probable Symbol)として、{0,1}から{LPS,MPS}に置き換える処理である。そして、LPSまたはMPSの2シンボルによって表現された二値データを算術符号で符号化する。MPSが「0」であるか「1」であるかは、処理済みのデータに基づいて1シンボルごとに予測されて決定される。すなわち、符号化(エンコード)の際は符号化済みのデータのみから次に符号化するシンボルのMPS値が決まり、復号の際には復号済みのデータのみから次に復号するシンボルのMPS値が決まる。
また、二値算術符号化処理では、予め用意された複数の確率モデル(コンテキスト)の中から現在の状態に適合するものに順次切り替えながら処理が行われる。CABACでは、それぞれのコンテキストに対応したコンテキスト変数をコンテキスト変数テーブルに格納しておいて、コンテキストインデックス(ctxIdx)によってコンテキスト変数context[ctxIdx]を特定する。H.264のCABAC復号に必要なコンテキスト変数は、全部で460個存在する。すなわち、コンテキストインデックス(ctxIdx)は、「0」から「459」の値を示す。各コンテキスト変数とコンテキストインデックスとの関係は、図47乃至図49に示す通りである。
各コンテキスト変数は、出現確率を示す6ビットの確率状態インデックスpStateIdxと、出現確率の高い優勢確率シンボル(MPS)を示す1ビットのvalMPSから成る7ビットの値により構成される。pStateIdxは、そのコンテキストにおけるLPSの出現確率の推定値を、予め定義された「0」から「63」までの確率状態によって表す。valMPSは、MPSに該当するシンボルが「0」または「1」の何れであるかを表す。
CABAC復号器では、コンテキスト変数が1つ選択され、そのコンテキスト変数に基づいて1つのBin(2値データの1ビット)が復号される。そして、その復号されたBinによってコンテキスト変数が更新される。CABAC復号器では、マクロブロックを構成するパラメータ毎に復号の方法が定義されている。このパラメータは、シンタックス要素(SE:Syntax Element)と呼ばれる。1つのシンタックス要素の復号は、複数のコンテキスト変数を使用して復号した複数のBinに対して、シンタックス要素毎に決められている多値化の方法に従って、シンタックス要素の多値データを求めることによって行われる。
1つのBinを復号する場合、1つ前に復号されたBinの値によってそのコンテキストインデックスが決まるようになっているものは、コンテキストインデックスの昇順において各シンタックス要素の先頭や中間に存在することが多い。各シンタックス要素のBinの長さも直前のBinを復号するまで確定しないものが多い。そのため、1つのシンタックス要素の復号が終わり、別のシンタックス要素を復号する際においても、コンテキストインデックスは直前のBinを復号するまで決まらないことになる。さらに、1つのシンタックス要素の復号において、同じコンテキストインデックスのコンテキスト変数を連続して使用する場合もあれば、毎回異なるコンテキストインデックスのコンテキスト変数を使用する場合もある。
例えば、図50は、スライスタイプがBスライスである場合の、「mb_type」の復号フローを示す図である。最初のコンテキストインデックスが「27」、「28」、「29」の何れから始まるかを決める処理があり、その後も直前の復号結果によって分岐先が変わる。「0」または「1」のラベルは直前の復号結果のBinを示しており、そのラベルに従って各枝の処理が行われる。枝のラベルのないものは直前のBinに関係なく実行される。円内の数字がコンテキストインデックスである。
また、各シンタックス要素に割り当てられたコンテキスト変数の数も様々である。そして、同じシンタックス要素のコンテキスト変数のコンテキストインデックスは近い値であり、先に使用されるものから昇順に並んでいる。ただし、コンテキストインデックスが近い値のシンタックス要素同士は、必ずしも復号される順番通りには並んでいない。
ここで、メモリ上にコンテキストインデックスの順番に並べた配列としてコンテキスト変数を管理して、それをプロセッサから読み出して処理することを考える。32ビット単位などで複数のコンテキスト変数をまとめてアクセスする場合、同じシンタックス要素であれば近くに並んでいるため、メモリアクセス回数が減って比較的効率が良い。アクセス回数をさらに減らすために、128ビットのような大きな単位で複数のシンタックス要素のコンテキスト変数を同時にアクセスすると、同時に取り込んだ別のシンタックス要素が必ずしもすぐに復号されず、効率が悪くなる。
メモリの占有量を少なくするために、コンテキスト変数をコンテキストインデックスの順番通りに隙間なく8ビット単位で配置することを想定する。コンテキスト変数の最も多いシンタックス要素は15個であるため、128ビットあれば1つのシンタックス要素を収めることができる(8ビット×15個=120ビット)。一方、各シンタックス要素が128ビット単位のアラインメント境界を跨いで配置されてしまうと、128ビット単位でアクセスしても同じシンタックス要素を1度のメモリアクセスで済ませることができないという問題もある。
CABAC復号器をより効率良く動作させるためには、コンテキスト変数へのアクセスレイテンシが短いことが望ましく、また、CABAC復号処理以外の要因でアクセスレイテンシが変化することは復号処理速度性能を保証することを困難にするため好ましくない。そのため、専用の記憶領域にコンテキスト変数を格納しておくことが理想的である。しかし、460個のコンテキスト変数を記憶するために専用の記憶領域の全てをフリップフロップのレジスタとして実装するのは回路規模が大き過ぎて現実的ではなく、SRAM(Static Random Access Memory)などで実現することになる。SRAMを使用すると、コンテキスト変数へのアクセスレイテンシが増えるため、CABACの復号処理速度が低下する。これを解決するための技術として、例えば、出現頻度の高いシンタックス要素をアクセスレイテンシの小さなメモリに保持したコンテキスト変数によって処理する動画像処理装置が提案されている(例えば、特許文献1参照。)。
特開2007−300517号公報(図1)
上述の従来技術によれば、出現頻度の高いシンタックス要素を処理する際にアクセスレイテンシの小さなメモリを利用することができるため、処理速度を高速化することができる。
しかしながら、上述の従来技術は、アクセスレイテンシの短い格納場所に一時的に保存するものとして、出願頻度が高いシンタックス要素である「coeff_abs_level_minus1」を想定しており、復号処理全体を高速化するには必ずしも十分ではない。
本発明はこのような状況に鑑みてなされたものであり、コンテキスト適応型二値算術復号処理のために、シンタックス要素の処理態様に合致したレジスタ構成を備える算術復号装置を提供することを目的とする。
本発明は、上記課題を解決するためになされたものであり、その第1の側面は、算術符号化された符号化データを確率状態および優勢確率シンボルを表すコンテキスト変数に基づいて復号する算術復号演算器と、上記算術復号演算器に上記コンテキスト変数を供給して上記算術復号演算器による演算結果を保持する複数本の演算レジスタと、上記演算レジスタの保持内容を退避するための複数本の退避レジスタとを具備する算術復号装置である。これにより、複数本の演算レジスタから算術復号演算器にコンテキスト変数を供給して復号を行い、復号処理の進行状況に応じて演算レジスタの保持内容を複数本の退避レジスタに退避させるという作用をもたらす。
また、この第1の側面において、上記複数本の退避レジスタは、上記コンテキスト変数のうち所定のシンタックス要素に係るもののみを退避するようにしてもよい。これにより、退避されたコンテキスト変数はメモリにストアされることなく、次に使用されるまでその内容が保持されるという作用をもたらす。例えば、実施の形態における第1乃至第4のコンテキストグループのシンタックス要素に係るコンテキスト変数は、退避レジスタに退避することにより、メモリへのアクセスが回避される。
また、この場合、上記所定のシンタックス要素は、複数のグループに分類され、上記複数本の退避レジスタの各々は、上記分類されたグループに対応してそれぞれコンテキスト変数を退避するようにしてもよい。これにより、グループ毎にコンテキスト変数を退避させるという作用をもたらす。実施の形態における第1乃至第4のコンテキストグループでは、コンテキストグループ毎にコンテキスト変数が退避される。
例えば、上記複数のグループは、マクロブロックに関するシンタックス要素のグループと、動きベクトル情報に関するシンタックス要素のグループと、画素予測に関するシンタックス要素のグループと、ブロック情報に関するシンタックス要素のグループとを含んでもよい。
より具体的には、上記マクロブロックに関するシンタックス要素のグループは、「mb_type」と、「mb_skip_flag」と、「sub_mb_type」とを含み、上記動きベクトル情報に関するシンタックス要素のグループは、「mvd_l0[][][0]」と、「mvd_l1[][][0]」と、「mvd_l0[][][1]」と、「mvd_l1[][][1]」とを含み、上記画素予測に関するシンタックス要素のグループは、「ref_idx_l0」と、「ref_idx_l1」と、「mb_qp_delta」と、「intra_chroma_pred_mode」と、「prev_intra4x4_pred_mode_flag」と、「prev_intra8x8_pred_mode_flag」と、「rem_intra4x4_pred_mode」と、「rem_intra8x8_pred_mode」とを含み、上記ブロック情報に関するシンタックス要素のグループは、「mb_field_decoding_flag」と、「coded_block_pattern」と、「transform_size_8x8_flag」とを含んでもよい。また、復号対象のスライスタイプがIまたはSIの場合には「transform_size_8x8_flag」を上記画素予測に関するシンタックス要素のグループに含ませて管理してもよい。
また、この第1の側面において、上記複数本の演算レジスタおよび上記複数本の退避レジスタの各々は、128ビット幅のレジスタであり、8ビット毎に7ビットのコンテキスト変数を1個ずつ割り当てて、16個のコンテキスト変数を格納し、8ビット毎に余っている1ビットを集めた16ビットを余剰レジスタとして1個または2個のコンテキスト変数を格納してもよい。これにより、8ビット毎にアラインしてコンテキスト変数を割り当てながら、余剰領域にさらにコンテキスト変数を割り当てるという作用をもたらす。
また、この場合において、上記複数本の演算レジスタおよび上記複数本の退避レジスタの何れか1本を転送元レジスタとして当該転送元レジスタに格納された16個のコンテキスト変数のうちの2個における7ビットを交換するとともに、それ以外の2個のコンテキスト変数の14ビットの値と上記余剰レジスタのうちの14ビットの値とを交換して、上記複数本の演算レジスタおよび上記複数本の退避レジスタの何れか1本を転送先レジスタとして転送する交換転送処理部をさらに具備してもよい。これにより、余剰領域に割り当てたコンテキスト変数を、8ビット毎にアラインした領域に交換転送して使用させるという作用をもたらす。
また、この場合において、上記交換が行われたことを示す交換状態情報を上記余剰レジスタに割り当て、上記交換転送処理部は、指定された1ビットの値と上記交換状態情報とが等しい場合には上記交換を行うことなく上記転送元レジスタの格納内容を上記転送先レジスタに転送し、上記指定された1ビットの値と上記交換状態情報とが異なる場合には上記交換を行うとともに上記交換状態情報を反転して上記転送元レジスタの格納内容を上記転送先レジスタに転送してもよい。これにより、交換状態情報に応じて交換転送させるか否かを変化させるという作用をもたらす。
また、この場合において、上記複数本の演算レジスタおよび上記複数本の退避レジスタの何れかの格納内容を保持する転送バッファと、上記転送バッファに保持されるコンテキスト変数のうち指定されたものの初期値を生成するコンテキスト変数初期値生成部とをさらに具備し、上記転送バッファは、上記コンテキスト変数初期値生成部により生成された上記初期値によってその格納内容を変更した上で上記転送先レジスタに転送してもよい。これにより、演算レジスタまたは退避レジスタに初期値を設定させるという作用をもたらす。
本発明によれば、コンテキスト適応型二値算術復号処理のために、シンタックス要素の処理態様に合致したレジスタ構成を備える算術復号装置を提供することができるという優れた効果を奏し得る。
次に本発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の実施の形態における算術復号装置の一例としてのCABAC復号器20の一構成例を示す図である。このCABAC復号器20は、符号列入力部10から符号化データを受け取り、二値信号に復号(デコード)した後に、多値信号に多値化するものである。このCABAC復号器20は、二値算術符号復号処理部21と、コンテキストインデックス計算処理部22と、コンテキスト変数テーブル保持部23と、多値化処理部24とを備えている。
コンテキストインデックス計算処理部22は、コンテキストインデックス(ctxIdx)を計算して、その計算されたctxIdxを二値算術符号復号処理部21に供給するものである。
コンテキスト変数テーブル保持部23は、各コンテキストに対応したコンテキスト変数をコンテキスト変数テーブルとして保持するものである。各コンテキスト変数は、出現確率を示す確率状態インデックスpStateIdxと、出現確率の高い優勢確率シンボル(MPS)を示すvalMPSとから構成される。コンテキスト変数テーブル保持部23に保持されるコンテキスト変数は、ctxIdxによって特定され、context[ctxIdx]と表される。
二値算術符号復号処理部21は、符号列入力部10から入力された符号化データを二値信号に復号するものである。この二値算術符号復号処理部21は、シンボルを1つ復号する際、コンテキストインデックス計算処理部22からctxIdxを受け取り、このctxIdxに基づいてコンテキスト変数テーブル保持部23からコンテキスト変数context[ctxIdx]を取得する。そして、このコンテキスト変数に基づいてシンボルを復号して、二値信号を多値化処理部24に出力する。
多値化処理部24は、二値算術符号復号処理部21から出力された二値信号を元の多値信号に多値化するものである。二値算術符号化の際にはシンタックス要素(SE:Syntax Element)に応じて多値信号から二値信号への変換が行われており、この多値化処理部24ではそのような二値信号を元の多値信号に戻す処理が行われる。ここで、シンタックス要素とは、H.264においてシンタックスで伝送することが規定されている情報である。
図2は、本発明の実施の形態における算術復号装置をCABAC復号コプロセッサ100として実現した場合の一構成例を示す図である。このCABAC復号コプロセッサ100は、CPU(Central Processing Unit)200に接続されるコプロセッサとして動作する。すなわち、CABAC復号コプロセッサ100は、CPU200から発行された命令に従って処理を行う。CPU200は、その作業領域としてメインメモリ300を使用する。メインメモリ300とCPU200との間には、命令を保持する命令キャッシュ310と、データを保持するデータキャッシュ320とが接続される。
CABAC復号コプロセッサ100は、CABAC復号演算器110と、ライトバック処理部115と、レジスタファイル120と、レジスタ転送処理部130と、ロードストア処理部140と、DMA制御部150と、INITIDC制御レジスタ160と、SLICEQPY制御レジスタ170と、命令デコード処理部180と、復号制御部190とを備える。
CABAC復号演算器110は、CABAC符号化方式により符号化されたデータを復号するための処理を行うものである。このCABAC復号演算器110は、復号制御部190からの指示に従って、復号に必要な処理を行う。ライトバック処理部115は、CABAC復号演算器110による処理結果をCPU200のレジスタ(図示しない)へ書き込むものである。なお、CABAC復号演算器110は、特許請求の範囲に記載の算術復号演算器の一例である。
レジスタファイル120は、コンテキスト変数を保持するためのレジスタである。このレジスタファイル120は、128ビット幅のレジスタを8本備えている。これら8本のレジスタをCV0乃至CV7と呼称する。8本のレジスタのうち4本(CV0乃至CV3)は、CABAC復号演算器110に直結された演算レジスタであり、CABAC復号演算器110にコンテキスト変数を供給して、CABAC復号演算器110による演算結果を保持するものである。また、残りの4本(CV4乃至CV7)は、演算レジスタの保持内容を退避するための退避レジスタである。この退避レジスタを利用することにより、特定のシンタックス要素のコンテキスト変数については、演算レジスタの保持内容をメインメモリ300等にストアすることなくレジスタファイル120において管理することができるようになる。なお、レジスタファイル120は、特許請求の範囲に記載の演算レジスタおよび退避レジスタの一例である。
レジスタ転送処理部130は、レジスタファイル120におけるレジスタ間の転送処理を行うものである。このレジスタ転送処理部130は、レジスタ間の転送の際に、後述するように、一部のビットを交換する機能を有する。また、このレジスタ転送処理部130は、後述するように、内部で生成した初期値をレジスタに設定する機能を有する。
ロードストア処理部140は、メインメモリ300からレジスタファイル120に対するロード処理、または、レジスタファイル120からメインメモリ300に対するストア処理を行うものである。なお、メインメモリ300へのアクセスはCPU200およびデータキャッシュ320を介して行われ、メインメモリ300にアクセスすることなくデータキャッシュ320上で処理が行われる場合もある。
DMA制御部150は、CABAC復号演算器110とメインメモリ300との間のDMA(Direct Memory Access)制御を行うものである。このDMA制御部150は、メインメモリ300から読み出したストリームをCABAC復号演算器110へ供給するストリーム入力処理、および、CABAC復号演算器110で復号された逆直交変換係数をメインメモリ300へ書き込む係数出力処理を行う。
INITIDC制御レジスタ160およびSLICEQPY制御レジスタ170は、コンテキスト変数の初期値を生成するための制御レジスタである。INITIDC制御レジスタ160は、初期化テーブルを決定するためのインデックスcabac_init_idcまたはスライスタイプを保持する。SLICEQPY制御レジスタ170は、スライスの量子化パラメータ(SliceQP:Slice Quantisation Parameter Y)を保持する。なお、INITIDCとSLICEQPYはコンテキスト変数毎に変更する値ではないため、命令のオペランドとしてではなく、制御レジスタにより供給される。
命令デコード処理部180は、CPU200からCABAC復号コプロセッサ100に対して発行されたコプロセッサ命令を解読(命令デコード)するデコーダである。この命令デコード結果は復号制御部190に供給される。
復号制御部190は、命令デコード処理部180から供給された命令デコード結果に従って各部を制御するものである。この復号制御部190の出力は、信号線199を介して各部に供給される。
CABAC復号コプロセッサ100は、CPU200に接続されており、CPU200にはデータキャッシュ320と命令キャッシュ310が接続される。メインメモリ300上のデータはいずれかのキャッシュ経由でCPU200に読み出され、データキャッシュ320から追い出されたデータはメインメモリ300に書き込まれる。メインメモリ300は、例えば2次キャッシュなどを介して接続される場合も想定される。メインメモリ300上のプログラムは、命令キャッシュ310を介してCPU200に読み出されて、CABAC復号コプロセッサ100にも供給される。ここでは図示しないが、CPU200にもレジスタファイルとロードストア処理部が備えられており、ロードストア処理が行われる。データキャッシュ320はCPU200およびCABAC復号コプロセッサ100に共有されているため、CPU200とCABAC復号コプロセッサ100との間でキャッシュアクセスが競合しないように調停する機構がCPU200内に設けられる。CABAC復号コプロセッサ100のロードストア処理部140はCPU200を介してデータキャッシュ320へ接続されている。
各処理部は、接続されている処理部が処理中であって次サイクルで新しい処理が受け付けられなければ、受け付けられるまで待機するようになっている。例えば、CPU200は、命令デコード処理部180が命令を受け取ることができるときにのみ命令を出力し、または、命令が受け取られるまで同じ命令を出力し続ける。命令デコード処理部180は、復号制御部190が次サイクルで新しい処理の制御が可能であれば、復号制御部190に対する制御信号を生成する。復号制御部190は各処理部が次サイクルで新しい制御が可能であれば、命令実行のための制御を各処理部へ指示する。
図3は、本発明の実施の形態におけるシンタックス要素のコンテキストグループの一例を示す図である。本発明の実施の形態では、スライスタイプ毎に使用されるコンテキスト変数が限定されることを考慮するとともに、シンタックス要素が復号される順番を考慮して、コンテキスト変数を5つのコンテキストグループにグループ分けする。
第1のコンテキストグループは、マクロブロック(MB)タイプコンテキストグループである。このマクロブロックタイプコンテキストグループは、マクロブロックに関するシンタックス要素のグループであり、マクロブロック内のスライスのスライスタイプに応じてさらに3つに分類されるが、1つのスライスにおいては対応する1つの分類のみが使用される。
マクロブロックタイプコンテキストグループにおいて、Iスライス用のシンタックス要素としては、「mb_type(SI slices only)」および「mb_type(I slices only)」が分類される。「mb_type」は、マクロブロックタイプを示すシンタックス要素である。
マクロブロックタイプコンテキストグループにおいて、Pスライス用のシンタックス要素としては、「mb_skip_flag(P,SP slices only)」、「mb_type(P,SP slices only)」、および、「sub_mb_type(P,SP slices only)」が分類される。「mb_skip_flag」は、マクロブロックスキップフラグを示すシンタックス要素である。「sub_mb_type」は、サブマクロブロックタイプを示すシンタックス要素である。
マクロブロックタイプコンテキストグループにおいて、Bスライス用のシンタックス要素としては、「mb_skip_flag(B slices only)」、「mb_type(B slices only)」、および、「sub_mb_type(B slices only)」が分類される。
第2のコンテキストグループは、MVD(Motion Vector Difference)コンテキストグループである。このMVDコンテキストグループは、動きベクトル情報に関するシンタックス要素のグループである。このMVDコンテキストグループには、「mvd_l0[][][0]」、「mvd_l1[][][0]」、「mvd_l0[][][1]」、および、「mvd_l1[][][1]」が分類される。これらは、水平方向および垂直方向における動きベクトル情報を示すシンタックス要素である。
第3のコンテキストグループは、予測コンテキストグループである。この予測コンテキストグループは、画素予測に関するシンタックス要素のグループである。この予測コンテキストグループには、「ref_idx_l0」、「ref_idx_l1」、「mb_qp_delta」、「intra_chroma_pred_mode」、「prev_intra4x4_pred_mode_flag」、「prev_intra8x8_pred_mode_flag」、「rem_intra4x4_pred_mode」、および、「rem_intra8x8_pred_mode」が分類される。「ref_idx_l0」および「ref_idx_l1」は、参照インデックスを示すシンタックス要素である。「mb_qp_delta」は、マクロブロック量子化パラメータを示すシンタックス要素である。「intra_chroma_pred_mode」は、画面内色差予測モードを示すシンタックス要素である。「prev_intra4x4_pred_mode_flag」および「prev_intra8x8_pred_mode_flag」は、画面内輝度予測モードフラグを示すシンタックス要素である。「rem_intra4x4_pred_mode」および「rem_intra8x8_pred_mode」は、画面内輝度予測モードを示すシンタックス要素である。
第4のコンテキストグループは、ブロック情報コンテキストグループである。このブロック情報コンテキストグループは、ブロックの符号化方式などのブロック情報に関するシンタックス要素のグループである。このブロック情報コンテキストグループには、「mb_field_decoding_flag」、「coded_block_pattern」、および、「transform_size_8x8_flag」が分類される。「mb_field_decoding_flag」は、マクロブロックフィールド復号フラグを示すシンタックス要素である。「coded_block_pattern」は、符号化ブロックパターンを示すシンタックス要素である。「transform_size_8x8_flag」は、直交変換サイズ8×8フラグを示すシンタックス要素である。
第5のコンテキストグループは、residualコンテキストグループである。このresidualコンテキストグループには、「coded_block_flag」、「significant_coeff_flag」、「last_significant_coeff_flag」および「coeff_abs_level_minus1」が分類される。「coded_block_flag」は、符号化ブロックサイズを示すシンタックス要素である。「significant_coeff_flag」は、有意係数フラグを示すシンタックス要素である。「last_significant_coeff_flag」は、最終有意係数フラグを示すシンタックス要素である。「coeff_abs_level_minus1」は、係数絶対値情報を示すシンタックス要素である。
後述するように、第1乃至第4のコンテキストグループのシンタックス要素は復号処理の前半において復号されるものであり、第5のコンテキストグループのシンタックス要素は復号処理の後半において復号されるものである。すなわち、使用されるコンテキスト変数は、復号処理の進行状況に応じて変化する。以下では、これらコンテキストグループのシンタックス要素のコンテキスト変数とレジスタファイル120のレジスタとの関係について説明する。
図4は、本発明の実施の形態におけるマクロブロックタイプコンテキストグループのコンテキスト変数の割当例を示す図である。「cidx」は、この割当例における先頭からの相対的なコンテキストインデックスを示すものである。「ctxIdx」は、H.264において規定されたコンテキストインデックスを示すものである。以降の図においても同様である。
図4(a)は、Iスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、レジスタの先頭から3個のコンテキスト変数が「mb_type(SI slices only)」に、続く8個のコンテキスト変数が「mb_type(I slices only)」にそれぞれ割り当てられている。
図4(b)は、Iスライス用のコンテキスト変数を割り当てた場合の他の例である。ここでは、レジスタの先頭から3個のコンテキスト変数が「mb_type(SI slices only)」に、続く8個のコンテキスト変数が「mb_type(I slices only)」にそれぞれ割り当てられている点は、図4(a)の場合と同様である。この例では、さらに3個のコンテキスト変数がブロック情報コンテキストグループの「transform_size_8x8_flag」に割り当てられている。
図4(c)は、Pスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、レジスタの先頭から3個のコンテキスト変数が「mb_skip_flag(P,SP slices only)」に、続く7個のコンテキスト変数が「mb_type(P,SP slices only)」に、続く3個のコンテキスト変数が「sub_mb_type(P,SP slices only)」にそれぞれ割り当てられている。
図4(d)は、Bスライス用のコンテキスト変数を割り当てた場合の例である。ここでは、レジスタの先頭から3個のコンテキスト変数が「mb_skip_flag(B slices only)」に、続く9個のコンテキスト変数が「mb_type(B slices only)」に、続く4個のコンテキスト変数が「sub_mb_type(B slices only)」にそれぞれ割り当てられている。
これらのうち、最も多くのコンテキスト変数を含んでいるのが図4(d)である。この図4(d)には、16個のコンテキスト変数が含まれており、8ビット毎にコンテキスト変数を割り当てたとしても、8ビット×16個=128ビットとなり、レジスタファイル120の128ビット幅の1本のレジスタに保持することができることになる。
図5は、本発明の実施の形態におけるMVDコンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、レジスタの先頭から7個のコンテキスト変数が「mvd_l0[][][0]」および「mvd_l1[][][0]」に、続く7個のコンテキスト変数が「mvd_l0[][][1]」および「mvd_l1[][][1]」にそれぞれ割り当てられている。この図5には14個のコンテキスト変数が含まれており、8ビット毎にコンテキスト変数を割り当てたとしても、8ビット×14個=112ビットとなり、レジスタファイル120の128ビット幅の1本のレジスタに保持することができることになる。
図6は、本発明の実施の形態における予測コンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、レジスタの先頭から6個のコンテキスト変数が「ref_idx_l0」および「ref_idx_l1」に、続く4個のコンテキスト変数が「mb_qp_delta」に、続く4個のコンテキスト変数が「intra_chroma_pred_mode」に、続く1個のコンテキスト変数が「prev_intra4x4_pred_mode_flag」および「prev_intra8x8_pred_mode_flag」に、続く1個のコンテキスト変数が「rem_intra4x4_pred_mode」および「rem_intra8x8_pred_mode」にそれぞれ割り当てられている。この図6には16個のコンテキスト変数が含まれており、8ビット毎にコンテキスト変数を割り当てたとしても、8ビット×16個=128ビットとなり、レジスタファイル120の128ビット幅の1本のレジスタに保持することができることになる。
図7は、本発明の実施の形態におけるブロック情報コンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、レジスタの先頭から12個のコンテキスト変数が「coded_block_pattern」に、続く3個のコンテキスト変数が「mb_field_decoding_flag」にそれぞれ割り当てられている。このブロック情報コンテキストグループのシンタックス要素には、3個のコンテキスト変数を要する「transform_size_8x8_flag」が分類されるが、これを合わせると18個のコンテキスト変数が含まれることになり、8ビット毎にコンテキスト変数を割り当てたとすると、8ビット×18個=144ビットとなり、レジスタファイル120の128ビット幅の1本のレジスタに保持することができなくなる。
ただし、「transform_size_8x8_flag」の3個のコンテキスト変数は、メインプロファイル(MP:Main Profile)では使用されないため、メインプロファイルのストリームに限定したCABAC復号器であれば1本のレジスタに保持することができる。一方、ハイプロファイル(HP:High Profile)のストリームを扱うためには、後述する交換転送機能を用いることにより、18個のコンテキスト変数を1本のレジスタ上で操作することになる。
このように、前半に復号される第1乃至第4のコンテキストグループのシンタックス要素については、それぞれのコンテキストグループに1本ずつのレジスタを割り当てることが可能である。したがって、前半の処理が終了した段階で4本の退避レジスタに必要なコンテキスト変数を全て退避することができることがわかる。これにより、第1乃至第4のコンテキストグループのコンテキスト変数については、メインメモリ300へのストア処理およびメインメモリ300からのロード処理が不要になる。
図8乃至図13は、本発明の実施の形態におけるresidualコンテキストグループのコンテキスト変数の割当例を示す図である。ここでは、H.264において規定されたブロックカテゴリー(ctxBlockCat)に従って、各シンタックス要素を6種類に分類することとする。
図8は、本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー0のコンテキスト変数の割当例を示す図である。このブロックカテゴリー0では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から10個のコンテキスト変数が「coeff_abs_level_minus1」に、第13番目から第16番目(cidx=12〜15)に「coded_block_flag」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から15個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から15個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から15個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から15個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。
図9は、本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー1のコンテキスト変数の割当例を示す図である。このブロックカテゴリー1では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から10個のコンテキスト変数が「coeff_abs_level_minus1」に、第13番目から第16番目(cidx=12〜15)に「coded_block_flag」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から14個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から14個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から14個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から14個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。
図10は、本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー2のコンテキスト変数の割当例を示す図である。このブロックカテゴリー2では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から10個のコンテキスト変数が「coeff_abs_level_minus1」に、第13番目から第16番目(cidx=12〜15)に「coded_block_flag」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から15個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から15個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から15個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から15個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。
図11は、本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー3のコンテキスト変数の割当例を示す図である。このブロックカテゴリー3では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から9個のコンテキスト変数が「coeff_abs_level_minus1」に、第13番目から第16番目(cidx=12〜15)に「coded_block_flag」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から3個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から3個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から3個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から3個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。
図12は、本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー4のコンテキスト変数の割当例を示す図である。このブロックカテゴリー4では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から10個のコンテキスト変数が「coeff_abs_level_minus1」に、第13番目から第16番目(cidx=12〜15)に「coded_block_flag」にそれぞれ割り当てられている。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から14個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から14個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から14個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から14個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。
図13は、本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー5のコンテキスト変数の割当例を示す図である。このブロックカテゴリー5では、まずフレーム符号化ブロックとフィールド符号化ブロックに共通するコンテキスト変数として、レジスタの先頭から10個のコンテキスト変数が「coeff_abs_level_minus1」に割り当てられている。なお、ブロックカテゴリー5では「coded_block_flag」が存在しない。また、フレーム符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から15個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から9個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。一方、フィールド符号化ブロックのためのコンテキスト変数として、一方のレジスタの先頭から15個のコンテキスト変数が「significant_coeff_flag」に、もう一方のレジスタの先頭から9個のコンテキスト変数が「last_significant_coeff_flag」にそれぞれ割り当てられている。
このように、後半に復号される第5のコンテキストグループのシンタックス要素については、ブロックカテゴリーに従って6つに分類することにより、各ブロックカテゴリーにつき3本ずつのレジスタを割り当てることが可能である。
residualコンテキストグループのシンタックス要素は、図47乃至図49から分かるように、460個のコンテキスト変数のうちの約8割を占める。これらをレジスタに全部載せるようなサイズのレジスタファイルをフリップフロップで実装するのであれば、460個全てを載せるようにするのと回路規模上は大差がない。そのため、residualコンテキストグループのコンテキスト変数はSRAMであるメインメモリ300へ格納することを考えるのが自然である。マクロブロックは16×16画素のブロックであり、さらに4つに分割されて8×8画素のサブマクロブロック毎に復号される。Luma(輝度成分Y)とChroma(彩度成分CrおよびCb)の逆直交変換係数はそれぞれ別々に符号化されている。
Lumaについては、16×16画素を4×4画素のブロックで分割した16個のブロックの各直流成分のみを集めた4×4ブロック(ブロックカテゴリー0)の1個と、直流成分を除いた各交流成分のみの4×4ブロック(ブロックカテゴリー1)の16個とによってマクロブロックを符号化する場合と、直流成分と交流成分を含んだ4×4ブロック(ブロックカテゴリー2)の16個によって符号化する場合と、直流成分と交流成分を含んだ8×8ブロック(ブロックカテゴリー5)の4個によって符号化する場合とがある。
Chromaについては、4:2:0フォーマット(NumC8x8は「1」となる)の場合、直流成分のみを集めた2×2ブロック(ブロックカテゴリー3)の1個と、交流成分のみの4×4ブロック(ブロックカテゴリー4)の4個とを、CrとCbのそれぞれについて符号化される。128ビットのレジスタ3本分のコンテキスト変数を一度ロードすると、2×2、4×4、8×8などのサイズのブロック分の係数を復号する間は、そのコンテキスト変数のみを使い続けながら復号を行うことができる。特に、交流成分を含んだブロック(ブロックカテゴリー1、2、4、5)に関しては、さらに複数ブロックの復号の間で同じコンテキスト変数のみを使い続けながら復号を行うことができる。そのため、前半に復号される第1乃至第4のコンテキストグループのシンタックス要素のコンテキスト変数をメモリに配置して使用前にロードするようにした場合と比べると、Bin当たりのロード回数は非常に少ないものとなる。そして、ブロックカテゴリー単位で復号が行われるため、128ビットレジスタへの3回のロードと3回のストアは各ブロックカテゴリーの前後にまとめて行うだけでよい。本発明の実施の形態では、演算レジスタを4本備えるため、レジスタ間で余分な転送を行うことなく、復号処理を実行することができる。
図14は、本発明の実施の形態におけるレジスタファイル120の各レジスタとコンテキスト変数との関係例を示す図である。図14(a)は、128ビット幅の1本のレジスタに対して8ビット毎に7ビットのコンテキスト変数を1個ずつ割り当てて、16個のコンテキスト変数C0乃至C15を格納した場合の例である。図4乃至図6、および、図8乃至図13のケースでは、1本のレジスタに対して最大16個のコンテキスト変数が割り当てられるため、同図(a)のように格納することにより、必要なコンテキスト変数は全て格納することができる。
これに対し、図7のケースのように、最大18個のコンテキスト変数を1本のレジスタに割り当てようとする場合には、以下のような工夫を施す必要がある。図14(b)は、128ビット幅の1本のレジスタに対して8ビット毎に7ビットのコンテキスト変数を1個ずつ割り当てた上で、余剰となった1ビットを集めることにより、さらに2個のコンテキスト変数を格納した場合の例である。すなわち、この例では、コンテキスト変数C0乃至C6において1ビットずつ余った余剰ビットを集めて、その7ビット分の余剰ビットにコンテキスト変数C16を割り当てている。同様に、コンテキスト変数C7乃至C13において1ビットずつ余った余剰ビットを集めて、その7ビット分の余剰ビットにコンテキスト変数C17を割り当てている。また、コンテキスト変数C14の余剰ビットには、交換情報ビットが割り当てられている。この交換情報ビットについては、次図を用いて説明する。
図15は、本発明の実施の形態におけるレジスタファイル120のレジスタ間の交換転送の態様例を示す図である。同図において、上側が転送元レジスタであり、下側が転送先レジスタである。
交換転送の前後において、コンテキスト変数C0乃至C11の12個については、格納位置に変動はない。コンテキスト変数C12は、転送後にはコンテキスト変数C0乃至C6の7ビットの余剰ビットに分配される。同様に、コンテキスト変数C13は、転送後にはコンテキスト変数C7乃至C13の7ビットの余剰ビットに分配される。これに対し、コンテキスト変数C0乃至C6の余剰ビットに格納されていたコンテキスト変数C16は、転送後にはコンテキスト変数C12の位置に格納される。同様に、コンテキスト変数C7乃至C13の余剰ビットに格納されていたコンテキスト変数C17は、転送後にはコンテキスト変数C13の位置に格納される。また、コンテキスト変数C14およびC15は、転送後には互いに入れ換えて格納される。
このような交換転送が行われた場合、コンテキスト変数C14の余剰ビットに当る交換情報ビットは、転送後に反転される。すなわち、同図のように転送前に交換情報ビットが「0」であれば、「1」に設定される。逆に、転送前に交換情報ビットが「1」であれば、「0」に設定される。
このような交換転送を行うことにより、図7の例のように18個のコンテキスト変数を格納する場合、処理に必要なコンテキスト変数をその都度、レジスタ上に8ビット毎に配置することができるようになる。例えば、「mb_field_decoding_flag」を用いる場合には第13番目から第15番目のコンテキスト変数の位置(cidx=12乃至14)に「mb_field_decoding_flag」のコンテキスト変数を格納する。このとき、「transform_size_8x8_flag」のコンテキスト変数は、コンテキスト変数C0乃至C6の余剰ビットと、コンテキスト変数C7乃至C13の余剰ビットと、コンテキスト変数C15にそれぞれ格納されているものとする。
その後、「transform_size_8x8_flag」を用いる場合には、交換転送を行う。これにより、第13番目から第15番目のコンテキスト変数の位置(cidx=12乃至14)に「transform_size_8x8_flag」のコンテキスト変数が格納されるようになる。
このような仕組みを用いることにより、cidxを4ビットに抑えたままの状態で最大18個のコンテキスト変数を1本のレジスタに格納することができる。なお、この交換転送は、後述するコンテキスト交換転送命令により実行される。
図16は、本発明の実施の形態におけるレジスタ転送処理部130の一構成例を示す図である。このレジスタ転送処理部130は、転送バッファ131と、コンテキスト変数初期値生成部132と、初期値パラメータテーブル133と、交換転送処理部134と、セレクタ135とを備えている。
転送バッファ131は、レジスタファイル120の転送元のレジスタからのデータを保持する128ビットのバッファである。この転送バッファ131により、交換転送処理部134による処理をパイプライン処理することが可能となる。また、この転送バッファ131には、後述するコンテキスト初期化命令に従って、初期値が設定される。この場合の初期値は、コンテキスト変数初期値生成部132において生成され、その格納位置は復号制御部190から信号線199を介して指示される。
コンテキスト変数初期値生成部132は、コンテキスト変数の初期値を生成するものである。このコンテキスト変数初期値生成部132は、後述するコンテキスト初期化命令のオペランドによって指定されたcidx(4ビットの値imm_cidx)の位置を先頭として、オペランドで指定されたctxIdx(9ビットの値imm_ctxIdx)から順番に、オペランドで指定された個数(4ビットの値imm_cnum)のコンテキスト変数の初期値を1サイクルにつき1個ずつ生成する。そして、オペランドで指定された転送バッファ(cv_dst)の該当位置の7ビットに書き込む処理をimm_cnum回繰り返す。このコンテキスト変数初期値生成部132によって生成される初期値は、H.264により定義された値であり、初期値パラメータテーブル133から供給される初期値パラメータ(mおよびn)およびSLICEQPY制御レジスタ170から信号線179を介して供給される量子化パラメータ(SliceQP)によって決定される。
初期値パラメータテーブル133は、初期値パラメータ(mおよびn)を保持するテーブルである。この初期値パラメータテーブル133は、コンテキスト初期化命令のオペランドによって指定されたctxIdxおよびINITIDC制御レジスタ160から信号線169を介して供給される値により索引される。INITIDC制御レジスタ160の値は、「0」乃至「2」のときにはcabac_init_idcとして用いられ、「3」のときにはIスライスまたはSIスライスであることを示す。
初期値パラメータ(mおよびn)は、H.264において、slice_header()に含まれるslice_typeと、cabac_init_idcと、ctxIdxとにより特定できるように、表形式で定義されている。量子化パラメータ(SliceQP)は、slice_header()に含まれるslice_qp_deltaと、pic_parameter_set_rbsp()に含まれるpic_init_qp_minus26とによりスライス毎に算出される値である。
preCtxState = Clip3( 1, 126, ( ( m ? SliceQPY ) >> 4 ) + n )
if( preCtxState <= 63 ) {
pStateIdx = 63 - preCtxState
valMPS = 0
} else {
pStateIdx = preCtxState - 64
valMPS = 1
}
ただし、Clip3は以下のような関数である。
int Clp3(int x, int y, int x){
if(z>x)r eturn x;
if(z>y) return y;
return z;
}
このような初期化をソフトウェアで行うには、mおよびnをメモリ上に格納してスライス毎に参照する必要がある。ほとんどのコンテキスト変数のmおよびnは4種類用意されていて、slice_typeとcabac_init_idcから選択される。そのため、mおよびnを配列として格納すると数Kバイトの容量になり、4Kバイトや8Kバイトのサイズであることが多いプロセッサの一次データキャッシュの大半を占めてしまう。すなわち、一次データキャッシュにコンテキスト変数を保持しながら処理している場合には、スライス毎にコンテキスト変数がキャッシュから追い出されてしまう可能性が高い。この点、本発明の実施の形態によれば、初期値パラメータテーブル133を別途設けることにより、一次データキャッシュを占有することなく処理を行うことができる。
これら初期値パラメータテーブル133およびコンテキスト変数初期値生成部132によってレジスタに直接初期値を生成することにより、前半に復号される第1乃至第4のコンテキストグループのシンタックス要素については、コンテキスト変数をロードまたはストアする必要がなくなる。また、後半に復号される第5のコンテキストグループのシンタックス要素については、レジスタに生成した初期値をメモリにストアすることにより、コンテキスト変数の初期化を行うことができる。
交換転送処理部134は、図15により説明した交換転送処理を行うものである。すなわち、この交換転送処理部134は、コンテキスト変数C0乃至C13の余剰ビットとコンテキスト変数C12およびC13とを交換し、コンテキスト変数C14およびC15を互いに入れ換えるとともに、交換情報ビットを反転させる。
セレクタ135は、転送バッファ131に保持されているデータ、および、交換転送処理部134により交換転送処理が施されたデータの何れか一方を、選択するセレクタである。このセレクタ135により選択されたデータは、信号線139を介してレジスタファイル120の転送先のレジスタに出力される。何れのデータが選択されるかは、実行された命令により決定される。転送命令であれば。常に転送バッファ131に保持されているデータが選択される。コンテキスト交換転送命令であれば、オペランドおよび交換情報ビットの状態によって何れのデータが選択されるかが決定される。
図17は、H.264におけるslice_dataのシンタックス要素の構文解析(parse)処理を抽出したフローチャートを示す図である。
まず、スライスタイプがIスライスでもなく(slice_type!=I)、かつ、SIスライスでもない(slice_type!=SI)場合(ステップS901)、「mb_skip_flag」が復号される(ステップS902)。このとき使用されるコンテキスト変数は、「mb_skip_flag」のPまたはSPスライス用(ctxIdx=11乃至13)またはBスライス用(ctxIdx=24乃至26)である。「mb_skip_flag」が「1」を示している場合には、続くマクロブロックに関する処理(ステップS904、S905およびS910)はスキップされる(ステップS903)。
「mb_skip_flag」が「1」を示していない場合には、「mb_field_decode_flag」を復号する必要があるか否かが判断される(ステップS904)。「mb_field_decode_flag」を復号する必要がある旨判断された場合には、「mb_field_decode_flag」が復号される(ステップS905)。このとき使用されるコンテキスト変数は、「mb_field_decode_flag」のコンテキスト変数(ctxIdx=70乃至72)である。その後、マクロブロック層の復号が行われる(ステップS910)。
そして、「end_of_slice」が復号され(ステップS907)、「end_of_slice」が「1」を示していれば構文解析処理を終了する(ステップS908)。「end_of_slice」が「1」を示していなければ先頭(ステップS901)から処理を繰り返す。
図18は、マクロブロック層(ステップS910)の復号手順を示す図である。まず、「mb_type」が復号される(ステップS911)。このとき使用されるコンテキスト変数は、「mb_type」のSIスライス用(ctxIdx=0乃至2)、Iスライス用(ctxIdx=3乃至10)、PまたはSPスライス用(ctxIdx=14乃至20)またはBスライス用(ctxIdx=27乃至35)である。
「mb_type」が画面内PCM(Intra-frame Pulse Code Modulation)である(mb_type=I_PCM)場合には(ステップS912)、画面内PCMのための処理が行われる(ステップS913)。
「mb_type」がインターマクロブロックであり、かつ、パーティションが4個である場合には(ステップS914)、「sub_mb_pred」が復号される(ステップS960)。そして、マクロブロックパーティション予測モードが「Intra_16x16」でない場合には(ステップS915)、「coded_block_pattern」が復号される(ステップS916)。このとき使用されるコンテキスト変数は、「coded_block_pattern」のコンテキスト変数(ctxIdx=73乃至84)である。そして、Lumaの非ゼロの逆直交変換係数があり、かつ、8×8サイズ逆直交変換である可能性があれば(ステップS917)、「transform_size_8x8_flag」が復号される(ステップS918)。このとき使用されるコンテキスト変数は、「transform_size_8x8_flag」のコンテキスト変数(ctxIdx=399乃至401)である。
一方、ステップS914において、「mb_type」がインターマクロブロックであり、かつ、パーティションが4個である旨判断されなかった場合には、イントラ予測(「mb_type」が「I_4x4」または「I_8x8」)であり、かつ、8×8サイズ逆直交変換である可能性があれば(ステップS921)、「transform_size_8x8_flag」が復号される(ステップS922)。このとき使用されるコンテキスト変数は、「transform_size_8x8_flag」のコンテキスト変数(ctxIdx=399乃至401)である。また、「mb_pred」が復号された後(ステップS930)、マクロブロックパーティション予測モードが「Intra_16x16」でない場合には(ステップS923)、「coded_block_pattern」が復号される(ステップS924)。このとき使用されるコンテキスト変数は、「coded_block_pattern」のコンテキスト変数(ctxIdx=73乃至84)である。
そして、」residual」の復号が必要であるか否かが判断され(ステップS925)、必要であると判断された場合には、「mb_qp_delta」が復号されて(ステップS926)、「residual」の復号が行われる(ステップS980)。
このマクロブロック層の復号手順から分かるように、「transform_size_8x8_flag」は分岐する経路によって他のシンタックス要素とは復号の順番が逆転する。これに対して、メインプロファイルのように「transform_size_8x8_flag」がない場合には、分岐の経路によらず復号の順番が同じとなる。また、図17の「mb_field_decoding_flag」も、P、SPまたはBスライスのときには、ともに「mb_skip_flag」と「mb_type」との間に復号する必要がある。このような例外的なシンタックス要素である「transform_size_8x8_flag」と「mb_field_decoding_flag」を合わせて使用するために、図7のようにコンテキスト変数を管理する。
もう1つ例外的なシンタックス要素は「mb_qp_delta」である。「residual」の復号が必要ない場合には復号しなくてもよいが、「residual」がある場合には復号する必要がある。そのため、予測コンテキストグループのシンタックス要素を復号した後に、MVDコンテキストグループおよびブロック情報コンテキストグループの復号をして、さらに予測コンテキストグループのシンタックス要素を復号する必要がある。
これら例外的なシンタックス要素が存在するため、仮にCABAC復号器が1本の演算レジスタしかアクセスできない場合には、シンタックス要素のグループが変わるごとに演算レジスタへ転送して入れ替える必要が生じる。もし、「transform_size_8x8_flag」と「mb_field_decoding_flag」と「mb_qp_delta」が存在しなければ、各グループのシンタックス要素をマクロブロック毎に1回だけ演算レジスタに転送(復帰)してグループが変わるときに元のレジスタに転送(退避)するだけでよい。しかし、例外的なシンタックス要素が存在する場合には、マクロブロック毎に同じグループのシンタックス要素について、コンテキスト変数を演算レジスタに復帰および退避のために2回以上の転送をしなくてはならないグループが生じてしまう。これを回避するために、本発明の実施の形態では、演算レジスタを3本以上設けることにより、余分な転送を減らすことができる。なお、演算レジスタを2本設けた場合には、演算レジスタが1本であるよりは転送回数を減らすことができる。
図19および図20は、「mb_pred」(ステップS930)の復号手順を示す図である。
マクロブロックパーティション予測モードが「Intra_4x4」であれば(ステップS932)、以下の処理(ステップS933乃至S935)が16回繰り返し行われる。すなわち、「prev_intra4x4_pred_mode_flag」が復号される(ステップS933)。このとき使用されるコンテキスト変数は、「prev_intra4x4_pred_mode_flag」のコンテキスト変数(ctxIdx=68)である。また、「prev_intra4x4_pred_mode_flag」が「0」を示している場合には(ステップS934)、「rem_intra4x4_pred_mode」が復号される(ステップS935)。このとき使用されるコンテキスト変数は、「rem_intra4x4_pred_mode」のコンテキスト変数(ctxIdx=69)である。
マクロブロックパーティション予測モードが「Intra_8x8」であれば(ステップS936)、以下の処理(ステップS937乃至S939)が4回繰り返し行われる。すなわち、「prev_intra8x8_pred_mode_flag」が復号される(ステップS937)。このとき使用されるコンテキスト変数は、「prev_intra8x8_pred_mode_flag」のコンテキスト変数(ctxIdx=68)である。また、「prev_intra8x8_pred_mode_flag」が「0」を示している場合には(ステップS938)、「rem_intra8x8_pred_mode」が復号される(ステップS939)。このとき使用されるコンテキスト変数は、「rem_intra8x8_pred_mode」のコンテキスト変数(ctxIdx=69)である。
なお、マクロブロックパーティション予測モードがIntra_4x4またはIntra_8x8以外の場合には、以上の処理(ステップS932乃至S939)は行われない(ステップS931)。
Chromaの復号が必要でなければ(ステップS941)、「intra_chroma_pred_mode」が復号される(ステップS942)。このとき使用されるコンテキスト変数は、「intra_chroma_pred_mode」のコンテキスト変数(ctxIdx=64乃至67)である。
マクロブロックパーティション予測モードがDirectである場合には、ここで「mb_pred」の復号は終了する(ステップS943)。マクロブロックパーティション予測モードがDirectでなければ、以下の処理(ステップS944乃至S956)が行われる。各パーティションについて、「ref_idx_l0」の復号が必要であるか否かが判断され(ステップS944)、必要であれば「ref_idx_l0」の復号が行われる(ステップS945)。このとき使用されるコンテキスト変数は、「ref_idx_l0」のコンテキスト変数(ctxIdx=54乃至59)である。同様に、各パーティションについて、「ref_idx_l1」の復号が必要であるか否かが判断され(ステップS946)、必要であれば「ref_idx_l1」の復号が行われる(ステップS947)。このとき使用されるコンテキスト変数は、「ref_idx_l1」のコンテキスト変数(ctxIdx=54乃至59)である。
また、各パーティションについて、「mvd_l0」の復号が必要であるか否かが判断され(ステップS951)、必要であれば「mvd_l0[][][0]」および「mvd_l0[][][1]」の復号が行われる(ステップS952、S953)。このとき使用されるコンテキスト変数は、「mvd_l0[][][0]」および「mvd_l0[][][1]」のコンテキスト変数(ctxIdx=40乃至53)である。同様に、各パーティションについて、「mvd_l1」の復号が必要であるか否かが判断され(ステップS954)、必要であれば「mvd_l1[][][0]」および「mvd_l1[][][1]」の復号が行われる(ステップS955、S956)。このとき使用されるコンテキスト変数は、「mvd_l1[][][0]」および「mvd_l1[][][1]」のコンテキスト変数(ctxIdx=40乃至53)である。
図21および図22は、「sub_mb_pred」(ステップS960)の復号手順を示す図である。
マクロブロック内の4つのサブマクロブロックの各々について、それぞれ「sub_mb_type」が復号される(ステップS961)。このとき使用されるコンテキスト変数は、「sub_mb_type」のPまたはSPスライス用(ctxIdx=21乃至23)またはBスライス用(ctxIdx=36乃至39)である。
また、「ref_idx_l0」の復号が必要であるか否かが判断され(ステップS962)、必要であれば「ref_idx_l0」の復号が行われる(ステップS953)。このとき使用されるコンテキスト変数は、「ref_idx_l0」のコンテキスト変数(ctxIdx=54乃至59)である。同様に、「ref_idx_l1」の復号が必要であるか否かが判断され(ステップS964)、必要であれば「ref_idx_l1」の復号が行われる(ステップS955)。このとき使用されるコンテキスト変数は、「ref_idx_l1」のコンテキスト変数(ctxIdx=54乃至59)である。
また、マクロブロック内の4つのサブマクロブロックの各々について、「mvd_l0」の復号が必要であるか否かが判断され(ステップS971)、必要であればサブマクロブロックパーティションの各々について、「mvd_l0[][][0]」および「mvd_l0[][][1]」の復号が行われる(ステップS972、S973)。このとき使用されるコンテキスト変数は、「mvd_l0[][][0]」および「mvd_l0[][][1]」のコンテキスト変数(ctxIdx=40乃至53)である。同様に、マクロブロック内の4つのサブマクロブロックの各々について、「mvd_l1」の復号が必要であるか否かが判断され(ステップS974)、必要であればサブマクロブロックパーティションの各々について、「mvd_l1[][][0]」および「mvd_l1[][][1]」の復号が行われる(ステップS975、S976)。このとき使用されるコンテキスト変数は、「mvd_l1[][][0]」および「mvd_l1[][][1]」のコンテキスト変数(ctxIdx=40乃至53)である。
図23および図24は、「residual」(ステップS980)の復号手順を示す図である。
マクロブロックパーティション予測モードが「Intra_16x16」であれば(ステップS981)、「residual_block_cat0」が復号される(ステップS810)。そして、「residual_cat1」を復号する必要があるか否かが判断され(ステップS982)、必要と判断された場合には「residual_block_cat1」が4回分復号される(ステップS820)。この判断は、4回繰り返される。
ステップS981においてマクロブロックパーティション予測モードが「Intra_16x16」でないと判断された場合、「transform_size_8x8_flag」が「1」でなければ(ステップS983)、「residual_cat2」を復号する必要があるか否かが判断され(ステップS984)、必要と判断された場合には「residual_block_cat2」が4回分復号される(ステップS830)。この判断は、4回繰り返される。
ステップS983において「transform_size_8x8_flag」が「1」であると判断された場合、「residual_block_cat5」が4回分復号される(ステップS860)。
Chromaの復号が不要と判断された場合には、ここで「residual」の復号は終了する(ステップS985)。Chromaの復号が必要と判断された場合には、「residual_cat3」を復号する必要があるか否かが判断され(ステップS986)、必要と判断された場合には「residual_block_cat3」が復号される(ステップS840)。この判断は、2回繰り返される。また、「residual_cat4」を復号する必要があるか否かが判断され(ステップS987)、必要と判断された場合には「residual_block_cat4」が復号される(ステップS850)。この判断は、4×「NumC8x8」回のループと2回のループの2重ループにより繰り返される。
図25は、「residual_block_cat0」(ステップS810)の復号手順を示す図である。
「coded_block_flag」が復号され(ステップS811)、「coded_block_flag」が「1」でなければ「residual_block_cat0」の復号は終了する(ステップS812)。このとき使用されるコンテキスト変数は、「coded_block_flag」のブロックカテゴリー0のコンテキスト変数(ctxIdx=85乃至88)である。
「significant_coeff_flag」が復号され(ステップS813)、「significant_coeff_flag」が「1」であれば(ステップS814)、「last_significant_coeff_flag」が復号される(ステップS815)。終了が検知されるまでステップS813以降の処理が繰り返される(ステップS816)。なお、ここで使用されるコンテキスト変数は、「significant_coeff_flag」のブロックカテゴリー0のコンテキスト変数(ctxIdx=105乃至119または277乃至291)および「last_significant_coeff_flag」のブロックカテゴリー0のコンテキスト変数(ctxIdx=166乃至180または338乃至352)である。
ステップS816において終了が検知された後は、「coeff_abs_level_minus1」が復号される(ステップS817)。このとき使用されるコンテキスト変数は、「coeff_abs_level_minus1」のブロックカテゴリー0のコンテキスト変数(ctxIdx=227乃至236)である。また、「coeff_sign_flag」が復号される(ステップS818)。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
図26は、「residual_block_cat1」(ステップS820)の復号手順を示す図である。
「coded_block_flag」が復号され(ステップS821)、「coded_block_flag」が「1」でなければ「residual_block_cat1」の復号は終了する(ステップS822)。このとき使用されるコンテキスト変数は、「coded_block_flag」のブロックカテゴリー1のコンテキスト変数(ctxIdx=89乃至92)である。
「significant_coeff_flag」が復号され(ステップS823)、「significant_coeff_flag」が「1」であれば(ステップS824)、「last_significant_coeff_flag」が復号される(ステップS825)。終了が検知されるまでステップS823以降の処理が繰り返される(ステップS826)。なお、ここで使用されるコンテキスト変数は、「significant_coeff_flag」のブロックカテゴリー1のコンテキスト変数(ctxIdx=120乃至133または292乃至305)および「last_significant_coeff_flag」のブロックカテゴリー1のコンテキスト変数(ctxIdx=181乃至194または353乃至366)である。
ステップS826において終了が検知された後は、「coeff_abs_level_minus1」が復号される(ステップS827)。このとき使用されるコンテキスト変数は、「coeff_abs_level_minus1」のブロックカテゴリー1のコンテキスト変数(ctxIdx=237乃至246)である。また、「coeff_sign_flag」が復号される(ステップS828)。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
図27は、「residual_block_cat2」(ステップS830)の復号手順を示す図である。
「coded_block_flag」が復号され(ステップS831)、「coded_block_flag」が「1」でなければ「residual_block_cat2」の復号は終了する(ステップS832)。このとき使用されるコンテキスト変数は、「coded_block_flag」のブロックカテゴリー2のコンテキスト変数(ctxIdx=93乃至96)である。
「significant_coeff_flag」が復号され(ステップS833)、「significant_coeff_flag」が「1」であれば(ステップS834)、「last_significant_coeff_flag」が復号される(ステップS835)。終了が検知されるまでステップS833以降の処理が繰り返される(ステップS836)。なお、ここで使用されるコンテキスト変数は、「significant_coeff_flag」のブロックカテゴリー2のコンテキスト変数(ctxIdx=134乃至148または306乃至320)および「last_significant_coeff_flag」のブロックカテゴリー2のコンテキスト変数(ctxIdx=195乃至209または367乃至381)である。
ステップS836において終了が検知された後は、「coeff_abs_level_minus1」が復号される(ステップS837)。このとき使用されるコンテキスト変数は、「coeff_abs_level_minus1」のブロックカテゴリー2のコンテキスト変数(ctxIdx=247乃至256)である。また、「coeff_sign_flag」が復号される(ステップS838)。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
図28は、「residual_block_cat3」(ステップS840)の復号手順を示す図である。
「coded_block_flag」が復号され(ステップS841)、「coded_block_flag」が「1」でなければ「residual_block_cat3」の復号は終了する(ステップS842)。このとき使用されるコンテキスト変数は、「coded_block_flag」のブロックカテゴリー3のコンテキスト変数(ctxIdx=97乃至100)である。
「significant_coeff_flag」が復号され(ステップS843)、「significant_coeff_flag」が「1」であれば(ステップS844)、「last_significant_coeff_flag」が復号される(ステップS845)。終了が検知されるまでステップS843以降の処理が繰り返される(ステップS846)。なお、ここで使用されるコンテキスト変数は、「significant_coeff_flag」のブロックカテゴリー3のコンテキスト変数(ctxIdx=149乃至151または321乃至323)および「last_significant_coeff_flag」のブロックカテゴリー3のコンテキスト変数(ctxIdx=210乃至212または382乃至384)である。
ステップS846において終了が検知された後は、「coeff_abs_level_minus1」が復号される(ステップS847)。このとき使用されるコンテキスト変数は、「coeff_abs_level_minus1」のブロックカテゴリー3のコンテキスト変数(ctxIdx=257乃至265)である。また、「coeff_sign_flag」が復号される(ステップS848)。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
図29は、「residual_block_cat4」(ステップS850)の復号手順を示す図である。
「coded_block_flag」が復号され(ステップS851)、「coded_block_flag」が「1」でなければ「residual_block_cat4」の復号は終了する(ステップS852)。このとき使用されるコンテキスト変数は、「coded_block_flag」のブロックカテゴリー4のコンテキスト変数(ctxIdx=101乃至104)である。
「significant_coeff_flag」が復号され(ステップS853)、「significant_coeff_flag」が「1」であれば(ステップS854)、「last_significant_coeff_flag」が復号される(ステップS855)。終了が検知されるまでステップS853以降の処理が繰り返される(ステップS856)。なお、ここで使用されるコンテキスト変数は、「significant_coeff_flag」のブロックカテゴリー4のコンテキスト変数(ctxIdx=152乃至165または324乃至337)および「last_significant_coeff_flag」のブロックカテゴリー4のコンテキスト変数(ctxIdx=213乃至226または385乃至398)である。
ステップS856において終了が検知された後は、「coeff_abs_level_minus1」が復号される(ステップS857)。このとき使用されるコンテキスト変数は、「coeff_abs_level_minus1」のブロックカテゴリー4のコンテキスト変数(ctxIdx=266乃至275)である。また、「coeff_sign_flag」が復号される(ステップS858)。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
図30は、「residual_block_cat5」(ステップS860)の復号手順を示す図である。
「significant_coeff_flag」が復号され(ステップS863)、「significant_coeff_flag」が「1」であれば(ステップS864)、「last_significant_coeff_flag」が復号される(ステップS865)。終了が検知されるまでステップS863以降の処理が繰り返される(ステップS866)。なお、ここで使用されるコンテキスト変数は、「significant_coeff_flag」のブロックカテゴリー5のコンテキスト変数(ctxIdx=402乃至416または436乃至450)および「last_significant_coeff_flag」のブロックカテゴリー5のコンテキスト変数(ctxIdx=417乃至425または451乃至459)である。
ステップS866において終了が検知された後は、「coeff_abs_level_minus1」が復号される(ステップS867)。このとき使用されるコンテキスト変数は、「coeff_abs_level_minus1」のブロックカテゴリー5のコンテキスト変数(ctxIdx=426乃至435)である。また、「coeff_sign_flag」が復号される(ステップS868)。これら終了検知後の手順は、逆直交変換係数の数と同数回繰り返される。
以上の復号手順から分かるように、前半において復号されるシンタックス要素について3本の演算レジスタが必要であり、また、後半において復号されるシンタックス要素について3本の演算レジスタが必要であることから、少なくとも3本の演算レジスタがあれば余分な転送を減らすことができる。しかし、「residual」の復号後には、「mb_type」や「mb_skip_flag」といった前半において復号されるシンタックス要素の復号が再び必要になる。そのため、「residual」の復号後には、128ビットレジスタのメインメモリ300へのストアによる待ちの影響によって、処理の効率が落ちる可能性がある。ストア待ちの影響を少なくし、「mb_type」や「mb_skip_flag」の復号を始められるようにするには、3本の演算レジスタとは別に1本の演算レジスタがあればよい。このように、4本の演算レジスタがCABAC復号器からアクセス可能であれば、余分なレジスタ転送を減らすことができる。また、後半において復号されるシンタックス要素から前半において復号されるシンタックス要素の復号に移行する際に、メインメモリ300へのロードストアのレイテンシによる影響を小さくすることができる。
以上のことから、CABAC復号器に接続された4本の演算レジスタと、前半に復号されるシンタックス要素のための4本の退避レジスタとを合わせた計8本のレジスタを備えるレジスタファイル120によって効率良く復号を行うことができることがわかる。
本発明の実施の形態におけるCABAC復号演算器110は、4本の演算レジスタが接続されており、それらは命令によって使い分けられる。ここでは復号命令として、「cabac_dec0命令」、「cabac_dec1命令」、「cabac_dec2命令」および「cabac_dec3命令」の4つを想定する。
「cabac_dec0命令」は、後半に復号されるシンタックス要素を復号する命令である。すなわち、「cabac_dec0命令」は、「significant_coeff_flag」をレジスタCV0に保持されるコンテキスト変数を使用して復号し、「last_significant_coeff_flag」をレジスタCV1に保持されるコンテキスト変数を使用して復号し、「coeff_abs_level_minus1」をレジスタCV2に保持されるコンテキスト変数を使用して復号する。
「cabac_dec1命令」は、「mvd_l0」および「mvd_l1」をレジスタCV1に保持されるコンテキスト変数を使用して復号する。
「cabac_dec2命令」は、「coded_block_flag」と、「transform_size_8x8_flag」と、「mb_field_decoding_flag」と、「coded_block_pattern」とをレジスタCV2に保持されるコンテキスト変数を使用して復号する。
「cabac_dec3命令」は、これら以外の前半に復号されるシンタックス要素をレジスタCV3に保持されるコンテキスト変数を使用して復号する。
「cabac_dec0命令」は、逆直交変換の係数を復号するためのctxIdxの算出と、復号された複数のBinからの多値化処理とを行い、DMA制御部150を経由してメインメモリ300に復号データを書き込む。その他の「cabac_dec1〜3命令」は、ライトバック処理部115を経由してCPU200のレジスタへ復号結果を書き込むことにより、CPU200に処理結果を返すようになっている。CPU200は、その値に従って次のctxIdxの算出と多値化処理を行う。
また、本発明の実施の形態におけるCABAC復号演算器110は、以下のようなレジスタ関連命令を備える。
図31は、本発明の実施の形態におけるCABAC復号演算器110のコンテキスト初期化命令の形式例を示す図である。このコンテキスト初期化命令(init命令)は、オペランドとして、「cv_dst」、「imm_cidx」、「imm_cnum」および「imm_ctxIdx」を備えている。
「cv_dst」は、コンテキスト変数を格納するレジスタ番号を示すものである。「imm_cidx」は、コンテキスト変数の格納先のcidxを示す即値である。「imm_cnum」は、コンテキスト変数の数を示す即値である。「imm_ctxIdx」は、H.264において規定されたctxIdxを示す即値である。
このコンテキスト初期化命令の各オペランドに従って、初期値パラメータテーブル133およびコンテキスト変数初期値生成部132により初期値を生成して転送バッファ131に格納することによって、レジスタに直接初期値を設定することができる。
図32は、本発明の実施の形態におけるCABAC復号演算器110のコンテキスト交換転送命令の形式例を示す図である。このコンテキスト交換転送命令(swap命令またはswap_cnd命令)は、オペランドとして、「cv_dst」、「cv_src」、「cnden」および「cndsw」を備えている。
「cv_dst」は、交換転送先レジスタのレジスタ番号を示すものである。「cv_src」は、交換転送元レジスタのレジスタ番号を示すものである。
「cnden」は、転送の際の交換を無条件に行うか、条件付きとするかのフラグである。この「cnden」が「0」であれば、無条件で交換転送する命令(swap命令)であることを意味する。一方、この「cnden」が「1」であれば、条件付きで交換転送する命令(swap_cnd命令)であることを意味する。すなわち、「cndsw」と「cv_src」の交換情報ビット(C14の余剰ビット)とが異なる場合には交換転送を行うことを意味し、「cndsw」と「cv_src」の交換情報ビットとが等しい場合には交換なしの転送を行うことを意味する。「cndsw」は、cndenが「1」である場合の、転送の際の交換の有無を判断する対象である。
このコンテキスト交換転送命令の各オペランドに従って、交換転送処理部134およびセレクタ135により、無条件もしくは条件付きの交換転送が行われる。
図33は、本発明の実施の形態におけるCABAC復号演算器110の転送命令の形式例を示す図である。この転送命令(mov命令)は、オペランドとして、「cv_dst」および「cv_src」を備えている。
「cv_dst」は、交換転送先レジスタのレジスタ番号を示すものである。「cv_src」は、交換転送元レジスタのレジスタ番号を示すものである。
この転送命令が実行された場合には、セレクタ135は転送バッファ131からのデータを選択して出力する。
以下では、コンテキスト変数のシンタックス要素の変化に着目して、主要な命令実行の流れについて抽出して説明する。
図34は、本発明の実施の形態において前半に復号されるシンタックス要素のうちIスライスまたはSIスライスに関する処理内容例を示す図である。
処理711では、初期化処理が行われる。「init_memory_ctx()」は、後半に復号されるシンタックス要素のためのコンテキスト変数をレジスタファイル120において初期化して、メインメモリ300にストアする命令である。また、「init」は上述のようにレジスタの初期化命令であり、ここでは対象となるレジスタ番号(cv_dst)のみが記されている。すなわち、レジスタCV4、CV6およびCV7の初期化が行われる。
処理712では、レジスタ間の転送処理が行われる。「mov」は上述のようにレジスタ間の転送命令であり、ここではCV7の内容がCV2に転送され、CV4の内容がCV3に転送されている。
処理713では、次のレジスタ間の転送処理が行われる。ここではCV3の内容がCV4に転送され、CV6の内容がCV3に転送されている。
処理714では、次のレジスタ間の転送処理が行われる。ここではCV2の内容がCV7に転送されている。
処理715では、次のレジスタ間の転送処理が行われる。ここではCV3の内容がCV6に転送されている。
図35は、図34の処理手順によるレジスタ間転送の態様を示す図である。この図から、前半に復号されるシンタックス要素の退避場所をCV4、CV6およびCV7として、使用前にCV2およびCV3に転送して、使用後に再びCV4、CV6およびCV7に退避する様子が分かる。
図36は、本発明の実施の形態において前半に復号されるシンタックス要素のうちPスライスまたはBスライスに関する処理内容例を示す図である。
処理721では、初期化処理が行われる。ここでは、処理711と同様に「init_memory_ctx()」によりメモリの初期化が行われる。そして、レジスタCV4乃至CV7の初期化が行われる。
処理722では、レジスタ間の転送処理が行われる。ここではCV7の内容がCV2に転送され、CV4の内容がCV3に転送されている。
処理723では、レジスタ間の転送処理および交換転送処理が行われる。すなわち、CV3の内容がCV4に転送され、CV2の内容がCV2に交換転送され、CV6の内容がCV3に転送され、CV5の内容がCV1に転送されている。
処理724では、次のレジスタ間の転送処理および交換転送処理が行われる。すなわち、CV1の内容がCV5に転送され、CV2の内容がCV7に交換転送される。
処理725では、次のレジスタ間の転送処理が行われる。ここではCV3の内容がCV6に転送されている。
図37は、図36の処理手順によるレジスタ間転送の態様を示す図である。この図から、前半に復号されるシンタックス要素の退避場所をCV4乃至CV7として、使用前にCV1乃至CV3に転送して、使用後に再びCV4乃至CV7に退避する様子が分かる。
図38は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー0に関する処理内容例を示す図である。
処理741では、メインメモリ300からレジスタファイル120へのロードが行われる。すなわち、ブロックカテゴリー0の「significant_coeff_flag」のコンテキスト変数の格納アドレス(sig0)からCV0へのロードが行われる。また、ブロックカテゴリー0の「last_significant_coeff_flag」のコンテキスト変数の格納アドレス(last0)からCV1へのロードが行われる。また、ブロックカテゴリー0の「coeff_abs_level_minus1」のコンテキスト変数の格納アドレス(abs0)からCV2へのロードが行われる。
処理742では、メインメモリ300へのストアが行われる。すなわち、CV0の内容がsig0へストアされ、CV1の内容がlast0へストアされる。
処理743では、メインメモリ300への次のストアが行われる。すなわち、CV2の内容がabs0へストアされる。
図39は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー1に関する処理内容例を示す図である。
処理751では、メインメモリ300からレジスタファイル120へのロードが行われる。すなわち、ブロックカテゴリー1の「significant_coeff_flag」のコンテキスト変数の格納アドレス(sig1)からCV0へのロードが行われる。また、ブロックカテゴリー1の「last_significant_coeff_flag」のコンテキスト変数の格納アドレス(last1)からCV1へのロードが行われる。また、ブロックカテゴリー1の「coeff_abs_level_minus1」のコンテキスト変数の格納アドレス(abs1)からCV2へのロードが行われる。
処理752では、メインメモリ300へのストアが行われる。すなわち、CV0の内容がsig1へストアされ、CV1の内容がlast1へストアされる。
処理753では、メインメモリ300への次のストアが行われる。すなわち、CV2の内容がabs1へストアされる。
図40は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー2に関する処理内容例を示す図である。
処理761では、メインメモリ300からレジスタファイル120へのロードが行われる。すなわち、ブロックカテゴリー2の「significant_coeff_flag」のコンテキスト変数の格納アドレス(sig2)からCV0へのロードが行われる。また、ブロックカテゴリー2の「last_significant_coeff_flag」のコンテキスト変数の格納アドレス(last2)からCV1へのロードが行われる。また、ブロックカテゴリー2の「coeff_abs_level_minus1」のコンテキスト変数の格納アドレス(abs2)からCV2へのロードが行われる。
処理762では、メインメモリ300へのストアが行われる。すなわち、CV0の内容がsig2へストアされ、CV1の内容がlast2へストアされる。
処理763では、メインメモリ300への次のストアが行われる。すなわち、CV2の内容がabs2へストアされる。
図41は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー3に関する処理内容例を示す図である。
処理771では、メインメモリ300からレジスタファイル120へのロードが行われる。すなわち、ブロックカテゴリー3の「significant_coeff_flag」のコンテキスト変数の格納アドレス(sig3)からCV0へのロードが行われる。また、ブロックカテゴリー3の「last_significant_coeff_flag」のコンテキスト変数の格納アドレス(last3)からCV1へのロードが行われる。また、ブロックカテゴリー3の「coeff_abs_level_minus1」のコンテキスト変数の格納アドレス(abs3)からCV2へのロードが行われる。
処理772では、メインメモリ300へのストアが行われる。すなわち、CV0の内容がsig3へストアされ、CV1の内容がlast3へストアされる。
処理773では、メインメモリ300への次のストアが行われる。すなわち、CV2の内容がabs3へストアされる。
図42は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー4に関する処理内容例を示す図である。
処理781では、メインメモリ300からレジスタファイル120へのロードが行われる。すなわち、ブロックカテゴリー4の「significant_coeff_flag」のコンテキスト変数の格納アドレス(sig4)からCV0へのロードが行われる。また、ブロックカテゴリー4の「last_significant_coeff_flag」のコンテキスト変数の格納アドレス(last4)からCV1へのロードが行われる。また、ブロックカテゴリー4の「coeff_abs_level_minus1」のコンテキスト変数の格納アドレス(abs4)からCV2へのロードが行われる。
処理782では、メインメモリ300へのストアが行われる。すなわち、CV0の内容がsig4へストアされ、CV1の内容がlast4へストアされる。
処理783では、メインメモリ300への次のストアが行われる。すなわち、CV2の内容がabs4へストアされる。
図43は、本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー5に関する処理内容例を示す図である。
処理791では、メインメモリ300からレジスタファイル120へのロードが行われる。すなわち、ブロックカテゴリー5の「significant_coeff_flag」のコンテキスト変数の格納アドレス(sig5)からCV0へのロードが行われる。また、ブロックカテゴリー5の「last_significant_coeff_flag」のコンテキスト変数の格納アドレス(last5)からCV1へのロードが行われる。また、ブロックカテゴリー5の「coeff_abs_level_minus1」のコンテキスト変数の格納アドレス(abs5)からCV2へのロードが行われる。
処理792では、メインメモリ300へのストアが行われる。すなわち、CV0の内容がsig5へストアされ、CV1の内容がlast5へストアされる。
処理793では、メインメモリ300への次のストアが行われる。すなわち、CV2の内容がabs5へストアされる。
なお、上述の処理751乃至753、処理761乃至763、処理771乃至773、処理781乃至783、および、処理791乃至793については、ループ内の処理であるため、同じコンテキスト変数を連続して何回か使用する場合には、ストアとロードは省略することができる。
図44は、図38乃至図43の処理手順によるレジスタ間転送の態様を示す図である。この図から、後半に復号されるシンタックス要素をブロックカテゴリー毎に、CV0乃至CV2にロードして、CABAC復号後にストアする様子が分かる。
前半に復号されるシンタックス要素に関する処理は、複雑であるが、処理量は少ない。具体的には、コンテキストインデックスの算出が複雑であり、Bin数の割合が10乃至20%程度と少ない。したがって、メインメモリ300にコンテキスト変数を格納しておくとレイテンシの影響が大きいため、CV4乃至CV7に退避して復号する。
一方、後半に復号されるシンタックス要素に関する処理は、単純であるが処理量が多いため、同じコンテキスト変数を連続して使い続けることができる。具体的には、コンテキストインデックスの算出が単純であり、Bin数の割合が80乃至90%程度と多い。したがって、ロードまたはストアのレイテンシを隠蔽し易いため、コンテキスト変数をメインメモリ300に格納して、ブロックカテゴリーの境目でCV0乃至CV2のコンテキスト変数を入れ替えながら復号する。
図45は、本発明の実施の形態における復号処理の概要を示す図である。この図は、データ操作に着目したものである。最初に必要なコンテキスト変数の初期値生成を行い(611)、前半に復号されるシンタックス要素はレジスタCV4〜7に退避したままで、後半に復号されるシンタックス要素の初期値がメインメモリ300にストアされる(612)。
前半処理620では、CV4乃至CV7に退避されていたコンテキスト変数をCV0乃至CV3に転送して(621)、復号処理を行う(622)。そして、更新されたものをCV4乃至CV7の元のレジスタに書き戻す処理(623)を繰り返すことにより、前半に復号されるべきシンタックス要素を全て復号する。
後半処理630では、ブロックカテゴリー毎に必要なコンテキスト変数をメインメモリ300からCV0乃至CV2にロードし(631)、復号処理を行う(632)。そして、更新されたものをメインメモリ300にストアする処理(633)を繰り返すことにより、後半に復号されるべきシンタックス要素を全て復号する。
図46は、本発明の実施の形態においてロードおよびストアのレイテンシが隠蔽される例を示す図である。ここでは、ブロックカテゴリー3を2回復号した後に、ブロックカテゴリー4を実行するまでの様子を示している。
「Branch」は、「cabac_dec2」において復号された「coded_block_flag」の結果によって、「cabac_dec0」において係数の復号をするか否かの分岐を行う命令である。この場合、全ての係数を復号することを仮定している。「coded_block_flag」のコンテキストインデックスの算出を行う命令があることを想定し、それを「ctxidx_cbf」とした。ここでは、基本的に4段のパイプラインを想定している。すなわち、命令フェッチおよび命令デコードを行うデコードステージ(ID)、レジスタからオペランドフェッチを行うレジスタフェッチステージ(RF)、演算処理などを実行する実行ステージ(EX)、および、レジスタへの書戻しを行うライトバックステージ(WB)の4段である。また、メモリへのストア処理を行うメモリステージ(MEM)も設けられる。ロードストアはデータキャッシュにヒットしていることを想定した。レジスタはフォワーディング(バイパス)されており、一つ前の命令の実行ステージ(EX)における演算結果は、ライトバックステージ(WB)の完了を待たずに、次の命令のレジスタフェッチステージ(RF)で参照できるものとする。
「cabac_dec0命令」は、レジスタフェッチステージ(RF)でCV0乃至CV2の使用権を復号制御部190から取得する。そして、「significant_coeff_flag」を復号する「EXsig」と、「last_significant_coeff_flag」を復号する「EXlast」とを交互に繰り返す。その結果、1ブロック分の処理が終了すると、「WBsig」および「WBlast」において、CV0およびCV1のレジスタの使用権を復号制御部190に返す。これにより、復号された係数の数だけ「coeff_abs_level_minus1」を復号する。ただし、「coeff_abs_level_minus1」は複数のBinであるため、1つの係数毎に「EXabs」を複数回繰り返し、その後に、コンテキスト変数を必要としないデコードバイパスで正負の符号などを復号する「EXsign」を行う。そして、最後の係数の「EXabs」が終了すると、「WBabs」においてCV2の使用権を復号制御部190へ返して、復号された係数が「MEM」においてメインメモリ300に書き込まれる。CV0およびCV1は、早期に使用権が返されるため、ストア処理と次のロード処理とが「coeff_abs_level_minus1」の復号中に実行することができる。
このように、本発明の実施の形態によれば、CABAC復号演算器110にコンテキスト変数を供給する複数本の演算レジスタをレジスタファイル120に設けるとともに、前半に復号されるシンタックス要素のコンテキスト変数を退避する複数本の退避レジスタをレジスタファイル120に設けることにより、効率良く復号を行うことができる。特に、前半に復号されるシンタックス要素のコンテキスト変数は退避レジスタに退避されるため、メインメモリ300へのアクセスを抑制することができる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
本発明の実施の形態における算術復号装置の一例としてのCABAC復号器20の一構成例を示す図である。 本発明の実施の形態における算術復号装置をCABAC復号コプロセッサ100として実現した場合の一構成例を示す図である。 本発明の実施の形態におけるシンタックス要素のコンテキストグループの一例を示す図である。 本発明の実施の形態におけるマクロブロックタイプコンテキストグループのコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるMVDコンテキストグループのコンテキスト変数の割当例を示す図である。 本発明の実施の形態における予測コンテキストグループのコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるブロック情報コンテキストグループのコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー0のコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー1のコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー2のコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー3のコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー4のコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるresidualコンテキストグループのブロックカテゴリー5のコンテキスト変数の割当例を示す図である。 本発明の実施の形態におけるレジスタファイル120の各レジスタとコンテキスト変数との関係例を示す図である。 本発明の実施の形態におけるレジスタファイル120のレジスタ間の交換転送の態様例を示す図である。 本発明の実施の形態におけるレジスタ転送処理部130の一構成例を示す図である。 H.264におけるslice_dataのシンタックス要素の構文解析(parse)処理を抽出したフローチャートを示す図である。 マクロブロック層(ステップS910)の復号手順を示す図である。 「mb_pred」(ステップS930)の復号手順の前半を示す図である。 「mb_pred」(ステップS930)の復号手順の後半を示す図である。 「sub_mb_pred」(ステップS960)の復号手順の前半を示す図である。 「sub_mb_pred」(ステップS960)の復号手順の後半を示す図である。 「residual」(ステップS980)の復号手順の前半を示す図である。 「residual」(ステップS980)の復号手順の後半を示す図である。 「residual_block_cat0」(ステップS810)の復号手順を示す図である。 「residual_block_cat1」(ステップS820)の復号手順を示す図である。 「residual_block_cat2」(ステップS830)の復号手順を示す図である。 「residual_block_cat3」(ステップS840)の復号手順を示す図である。 「residual_block_cat4」(ステップS850)の復号手順を示す図である。 「residual_block_cat5」(ステップS860)の復号手順を示す図である。 本発明の実施の形態におけるCABAC復号演算器110のコンテキスト初期化命令の形式例を示す図である。 本発明の実施の形態におけるCABAC復号演算器110のコンテキスト交換転送命令の形式例を示す図である。 本発明の実施の形態におけるCABAC復号演算器110の転送命令の形式例を示す図である。 本発明の実施の形態において前半に復号されるシンタックス要素のうちIスライスまたはSIスライスに関する処理内容例を示す図である。 図34の処理手順によるレジスタ間転送の態様を示す図である。 本発明の実施の形態において前半に復号されるシンタックス要素のうちPスライスまたはBスライスに関する処理内容例を示す図である。 図36の処理手順によるレジスタ間転送の態様を示す図である。 本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー0に関する処理内容例を示す図である。 本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー1に関する処理内容例を示す図である。 本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー2に関する処理内容例を示す図である。 本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー3に関する処理内容例を示す図である。 本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー4に関する処理内容例を示す図である。 本発明の実施の形態において後半に復号されるシンタックス要素のうちブロックカテゴリー5に関する処理内容例を示す図である。 図38乃至図43の処理手順によるレジスタ間転送の態様を示す図である。 本発明の実施の形態における復号処理の概要を示す図である。 本発明の実施の形態においてロードおよびストアのレイテンシが隠蔽される例を示す図である。 H.264のCABAC復号に必要なコンテキスト変数とコンテキストインデックスとの関係を示す第1の図である。 H.264のCABAC復号に必要なコンテキスト変数とコンテキストインデックスとの関係を示す第2の図である。 H.264のCABAC復号に必要なコンテキスト変数とコンテキストインデックスとの関係を示す第3の図である。 スライスタイプがBスライスである場合の、「mb_type」の復号フローを示す図である。
符号の説明
10 符号列入力部
20 CABAC復号器
21 二値算術符号復号処理部
22 コンテキストインデックス計算処理部
23 コンテキスト変数テーブル保持部
24 多値化処理部
100 復号コプロセッサ
110 復号演算器
115 ライトバック処理部
120 レジスタファイル
130 レジスタ転送処理部
131 転送バッファ
132 コンテキスト変数初期値生成部
133 初期値パラメータテーブル
134 交換転送処理部
135 セレクタ
140 ロードストア処理部
150 DMA制御部
160 INITIDC制御レジスタ
170 SLICEQPY制御レジスタ
180 命令デコード処理部
190 復号制御部
300 メインメモリ
310 命令キャッシュ
320 データキャッシュ

Claims (8)

  1. 算術符号化された符号化データを確率状態および優勢確率シンボルを表すコンテキスト変数に基づいて復号する算術復号演算器と、
    前記算術復号演算器に前記コンテキスト変数を供給して前記算術復号演算器による演算結果を保持する複数本の演算レジスタと、
    前記演算レジスタの保持内容を退避するための複数本の退避レジスタと
    を具備し、
    前記複数本の退避レジスタは、前記コンテキスト変数のうち所定のシンタックス要素に係るもののみを退避し、
    前記所定のシンタックス要素は、複数のグループに分類され、
    前記複数本の退避レジスタの各々は、前記分類されたグループに対応してそれぞれコンテキスト変数を退避する
    算術復号装置。
  2. 前記複数のグループは、マクロブロックに関するシンタックス要素のグループと、動きベクトル情報に関するシンタックス要素のグループと、画素予測に関するシンタックス要素のグループと、ブロック情報に関するシンタックス要素のグループとを含む
    請求項記載の算術復号装置。
  3. 前記マクロブロックに関するシンタックス要素のグループは、「mb_type」と、「mb_skip_flag」と、「sub_mb_type」とを含み、
    前記動きベクトル情報に関するシンタックス要素のグループは、「mvd_l0[][][0]」と、「mvd_l1[][][0]」と、「mvd_l0[][][1]」と、「mvd_l1[][][1]」とを含み、
    前記画素予測に関するシンタックス要素のグループは、「ref_idx_l0」と、「ref_idx_l1」と、「mb_qp_delta」と、「intra_chroma_pred_mode」と、「prev_intra4x4_pred_mode_flag」と、「prev_intra8x8_pred_mode_flag」と、「rem_intra4x4_pred_mode」と、「rem_intra8x8_pred_mode」とを含み、
    前記ブロック情報に関するシンタックス要素のグループは、「mb_field_decoding_flag」と、「coded_block_pattern」と、「transform_size_8x8_flag」とを含む
    請求項記載の算術復号装置。
  4. 復号対象のスライスタイプがIまたはSIの場合には「transform_size_8x8_flag」を前記画素予測に関するシンタックス要素のグループに含ませて管理する
    請求項記載の算術復号装置。
  5. 前記複数本の演算レジスタおよび前記複数本の退避レジスタの各々は、128ビット幅のレジスタであり、8ビット毎に7ビットのコンテキスト変数を1個ずつ割り当てて、16個のコンテキスト変数を格納し、8ビット毎に余っている1ビットを集めた16ビットを余剰レジスタとして1個または2個のコンテキスト変数を格納する
    請求項1記載の算術復号装置。
  6. 前記複数本の演算レジスタおよび前記複数本の退避レジスタの何れか1本を転送元レジスタとして当該転送元レジスタに格納された16個のコンテキスト変数のうちの2個における7ビットを交換するとともに、それ以外の2個のコンテキスト変数の14ビットの値と前記余剰レジスタのうちの14ビットの値とを交換して、前記複数本の演算レジスタおよび前記複数本の退避レジスタの何れか1本を転送先レジスタとして転送する交換転送処理部をさらに具備する
    請求項記載の算術復号装置。
  7. 前記交換が行われたことを示す交換状態情報を前記余剰レジスタに割り当て、
    前記交換転送処理部は、指定された1ビットの値と前記交換状態情報とが等しい場合には前記交換を行うことなく前記転送元レジスタの格納内容を前記転送先レジスタに転送し、前記指定された1ビットの値と前記交換状態情報とが異なる場合には前記交換を行うとともに前記交換状態情報を反転して前記転送元レジスタの格納内容を前記転送先レジスタに転送する
    請求項記載の算術復号装置。
  8. 前記複数本の演算レジスタおよび前記複数本の退避レジスタの何れかの格納内容を保持する転送バッファと、
    前記転送バッファに保持されるコンテキスト変数のうち指定されたものの初期値を生成するコンテキスト変数初期値生成部とをさらに具備し、
    前記転送バッファは、前記コンテキスト変数初期値生成部により生成された前記初期値によってその格納内容を変更した上で前記転送先レジスタに転送する
    請求項記載の算術復号装置。
JP2008118493A 2008-04-30 2008-04-30 算術復号装置 Expired - Fee Related JP4962400B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008118493A JP4962400B2 (ja) 2008-04-30 2008-04-30 算術復号装置
US12/431,828 US7884743B2 (en) 2008-04-30 2009-04-29 Arithmetic decoding device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008118493A JP4962400B2 (ja) 2008-04-30 2008-04-30 算術復号装置

Publications (2)

Publication Number Publication Date
JP2009268031A JP2009268031A (ja) 2009-11-12
JP4962400B2 true JP4962400B2 (ja) 2012-06-27

Family

ID=41256759

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008118493A Expired - Fee Related JP4962400B2 (ja) 2008-04-30 2008-04-30 算術復号装置

Country Status (2)

Country Link
US (1) US7884743B2 (ja)
JP (1) JP4962400B2 (ja)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4962476B2 (ja) * 2008-11-28 2012-06-27 ソニー株式会社 算術復号装置
US20110125987A1 (en) * 2009-11-20 2011-05-26 Qualcomm Incorporated Dedicated Arithmetic Decoding Instruction
KR101703327B1 (ko) * 2010-01-14 2017-02-06 삼성전자 주식회사 계층적 데이터 단위의 패턴 정보를 이용하는 비디오 부호화 방법과 그 장치, 및 비디오 복호화 방법과 그 장치
US8712173B2 (en) * 2010-03-12 2014-04-29 Mediatek Singapore Pte. Ltd. Methods for processing 2Nx2N block with N being positive integer greater than four under intra-prediction mode and related processing circuits thereof
CN113556556A (zh) * 2010-04-13 2021-10-26 Ge视频压缩有限责任公司 显著性图和变换系数块的编码
KR101638300B1 (ko) 2010-07-28 2016-07-08 노키아 코포레이션 복잡도 균형 엔트로피 코딩을 제공하는 방법 및 장치
US8344917B2 (en) * 2010-09-30 2013-01-01 Sharp Laboratories Of America, Inc. Methods and systems for context initialization in video coding and decoding
US9313514B2 (en) * 2010-10-01 2016-04-12 Sharp Kabushiki Kaisha Methods and systems for entropy coder initialization
US8755620B2 (en) 2011-01-12 2014-06-17 Panasonic Corporation Image coding method, image decoding method, image coding apparatus, image decoding apparatus, and image coding and decoding apparatus for performing arithmetic coding and/or arithmetic decoding
US9319675B2 (en) * 2011-02-24 2016-04-19 Panasonic Intellectual Property Corporation Of America Arithmetic decoding method and arithmetic coding method
US9654785B2 (en) * 2011-06-09 2017-05-16 Qualcomm Incorporated Enhanced intra-prediction mode signaling for video coding using neighboring mode
LT3343781T (lt) 2011-06-16 2022-03-10 Ge Video Compression, Llc Konteksto inicijavimas entropinio kodavimo metu
USRE47366E1 (en) 2011-06-23 2019-04-23 Sun Patent Trust Image decoding method and apparatus based on a signal type of the control parameter of the current block
RU2602672C2 (ru) 2011-06-23 2016-11-20 Сан Пэтент Траст Способ декодирования изображения, способ кодирования изображения, устройство декодирования изображения, устройство кодирования изображения и устройство кодирования и декодирования изображения
WO2012176464A1 (ja) * 2011-06-24 2012-12-27 パナソニック株式会社 画像復号方法、画像符号化方法、画像復号装置、画像符号化装置及び画像符号化復号装置
RU2603552C2 (ru) 2011-06-24 2016-11-27 Сан Пэтент Траст Способ декодирования изображения, способ кодирования изображения, устройство декодирования изображения, устройство кодирования изображения и устройство кодирования и декодирования изображения
MX2013013483A (es) 2011-06-27 2014-02-27 Panasonic Corp Metodo de decodificacion de imagenes, metodo de codificacion de imagenes, aparato de decodificacion de imagenes, aparato de codificacion de imagenes y aparato de codificacion y decodificacion de imagenes.
MX2013012980A (es) 2011-06-28 2013-12-06 Panasonic Corp Metodo de decodificacion de imagenes, metodo de codificacion de imagenes, aparato de decodificacion de imagenes, aparato de codificacion de imagenes y aparato de codificacion y decodififcacion de imagenes.
WO2013001767A1 (ja) * 2011-06-29 2013-01-03 パナソニック株式会社 画像復号方法、画像符号化方法、画像復号装置、画像符号化装置及び画像符号化復号装置
US9338465B2 (en) 2011-06-30 2016-05-10 Sharp Kabushiki Kaisha Context initialization based on decoder picture buffer
AU2012277219A1 (en) 2011-06-30 2013-09-19 Sun Patent Trust Image decoding method, image encoding method, image decoding device, image encoding device, and image encoding/decoding device
WO2013001770A1 (ja) 2011-06-30 2013-01-03 パナソニック株式会社 画像復号方法、画像符号化方法、画像復号装置、画像符号化装置及び画像符号化復号装置
US11647197B2 (en) 2011-06-30 2023-05-09 Velos Media, Llc Context initialization based on slice header flag and slice type
US9060173B2 (en) * 2011-06-30 2015-06-16 Sharp Kabushiki Kaisha Context initialization based on decoder picture buffer
US20130003829A1 (en) * 2011-07-01 2013-01-03 Kiran Misra System for initializing an arithmetic coder
US20130003823A1 (en) * 2011-07-01 2013-01-03 Kiran Misra System for initializing an arithmetic coder
CN103765885B (zh) * 2011-07-11 2017-04-12 太阳专利托管公司 图像解码方法、图像编码方法、图像解码装置、图像编码装置及图像编解码装置
UA114674C2 (uk) 2011-07-15 2017-07-10 ДЖ.І. ВІДІЕУ КЕМПРЕШН, ЛЛСі Ініціалізація контексту в ентропійному кодуванні
US9237358B2 (en) 2011-11-08 2016-01-12 Qualcomm Incorporated Context reduction for context adaptive binary arithmetic coding
US10158855B2 (en) * 2012-03-08 2018-12-18 Sun Patent Trust Image decoding method, and image decoding apparatus using a selected context related to neighboring coefficients
KR102096566B1 (ko) * 2012-04-13 2020-04-02 지이 비디오 컴프레션, 엘엘씨 저지연 화상 코딩
CA3095638C (en) 2012-06-29 2023-11-14 Ge Video Compression, Llc Video data stream concept
RU2608353C1 (ru) * 2013-01-04 2017-01-18 Самсунг Электроникс Ко., Лтд. Способ энтропийного кодирования сегмента слайса и устройство для него, и способ энтропийного декодирования сегмента слайса и устройство для него
US9773536B1 (en) * 2013-07-09 2017-09-26 Ambarella, Inc. Context-adaptive binary arithmetic decoder with low latency
US10158874B2 (en) * 2015-09-30 2018-12-18 Apple Inc. Parallel bypass and regular bin coding
CN111309302B (zh) * 2020-02-06 2023-04-18 杭州电子科技大学 一种基于LaTeX的四则运算与三角函数混合运算公式转换Verilog代码的方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001309372A (ja) * 2000-04-17 2001-11-02 Mitsubishi Electric Corp 符号化装置
JP2005217871A (ja) * 2004-01-30 2005-08-11 Victor Co Of Japan Ltd 算術復号化装置および算術復号化プログラム
KR100648258B1 (ko) * 2004-08-02 2006-11-23 삼성전자주식회사 고속의 디코딩을 수행하는 파이프라인 구조의 내용 기반적응적 이진 산술 디코더
JP2007300517A (ja) * 2006-05-02 2007-11-15 Sony Corp 動画像処理方法、動画像処理方法のプログラム、動画像処理方法のプログラムを記録した記録媒体及び動画像処理装置

Also Published As

Publication number Publication date
US20090273491A1 (en) 2009-11-05
JP2009268031A (ja) 2009-11-12
US7884743B2 (en) 2011-02-08

Similar Documents

Publication Publication Date Title
JP4962400B2 (ja) 算術復号装置
US11375206B2 (en) Method and device for intra prediction
JP6298189B2 (ja) エントロピ復号方法及びそれを利用する復号装置
JP6659586B2 (ja) 画像符号化/復号化方法及び装置
EP2015581A1 (en) Dynamic image processing method, program for the dynamic image processing method, recording medium containing the program for the dynamic image processing method, dynamic image processing device
CN100502515C (zh) 一种解码数据结构的方法及视频解码器
CN108353176A (zh) 在图像编译***中的基于amvr的图像编译方法和装置
JP2014529254A (ja) インタ予測方法及びその装置
US11509890B2 (en) Methods and apparatus for entropy coding and decoding aspects of video data
US9326011B2 (en) Method and apparatus for generating bitstream based on syntax element
US20110103469A1 (en) Entropy encoding/decoding method and apparatus for accelerating video decoding
JP4930435B2 (ja) 可変長符号復号装置、可変長符号復号方法およびプログラム
US6512852B1 (en) Method and apparatus for concatenating bits of odd-length words
JP4563300B2 (ja) テーブル装置、可変長符号化/復号装置、可変長符号化装置及び可変長復号装置
JP2008199100A (ja) 可変長符号復号装置
US20180124412A1 (en) Processing apparatuses and controlling methods thereof
JP4888224B2 (ja) 画像処理装置およびその方法、並びにプログラム
JP6492847B2 (ja) 映像符号化システム、映像符号化回路および映像符号化方法
KR20110122367A (ko) 적응적 연산 장치 및 적응적 연산 장치 작동 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110302

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120117

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120228

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120312

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150406

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees