【実施例1】
【0012】
図1は、実施例1に係る画像符号化装置の構成を示す図である。画像符号化装置1は、画像入力部101、シンタックス要素生成部102、中間データ生成部103、符号化制御部104、第1エントロピー符号化部105、第2エントロピー符号化部106、多重化部107、メモリ108、バス109より構成され、画像入力部101から符号化対象画像データを入力し、多重化部107から符号化後のビットストリームを出力する。本実施例では符号化の並列処理を行うため、2個のエントロピー符号化部105,106を設けている。また破線200はCABAC処理を行う構成部分で、中間データ生成部103、符号化制御部104、第1エントロピー符号化部105、第2エントロピー符号化部106が相当する。
【0013】
図2は、本実施例で用いるCABAC(コンテキスト適応型2値算術符号化)処理を説明する図である。CABAC処理部200は、機能的に2値化部201、コンテキスト計算部202、及び2値算術符号化部203で構成される。
【0014】
2値化部201は、H.264で規定されているシンタックス要素(ヘッダ情報、動きベクトル、量子化後の直交変換係数等)を入力とし、規格で決められた方法で2値化処理を施し、2値化データを出力する。コンテキスト計算部202は、前記2値化データを1bit処理する毎に確率モデルを更新する。2値算術符号化部203では、コンテキスト計算部202で計算した確率モデルに基づいて、入力された2値化データを1bit毎に2値算術符号化してビットストリームを出力する。このように、CABAC処理は2値化データを1bit処理する毎に確率モデルを更新しながら符号化を行なうため、入力データを理論限界まで圧縮して符号化することが可能となる。
【0015】
符号化対象画像のピクチャ構成は、Iフレーム、Pフレーム、Bフレームからなる。Iフレームは、画像の空間方向の相関を利用し、同一フレーム内の既に符号化が終了した領域の復号画像を使用して予測符号化を行なうフレームである。P,Bフレームは画像の時間方向の相関も利用し、既に符号化が終了した時間的に過去または未来のフレームの復号画像を使用して予測符号化を行なうフレームであり、同時に参照可能なフレーム数が1つのものをPフレーム、2つのものをBフレームと呼ぶ。一般的に、IフレームよりP,Bフレームの方が符号化効率が良い。そのため、Iフレーム、Pフレーム、Bフレームを全て使用して符号化する場合には、フレームの種類によって発生する符号量にばらつきが生じる。
【0016】
図3は、メモリ108のメモリマッピングを示す図である。メモリ108には例えばSDRAMを採用する。メモリ108は複数のバッファ301〜305を有し、符号化処理に伴う各種データを記憶する。
【0017】
以下、画像符号化装置1の各部の動作を、
図1〜
図3を参照して説明する。
画像入力部101は符号化対象の画像データを入力し、バス109経由でメモリ108内の符号化対象画像用バッファ301に書き込む。
【0018】
シンタックス要素生成部102は、入力した画像データについて、16×16画素サイズのマクロブロック(以下MB)毎に予測符号化や離散コサイン変換、量子化等の処理を行なう。そして、ヘッダ情報、動きベクトル、量子化後の変換係数等のH.264で規定されたシンタックス要素を生成する。その際予測符号化処理に必要な画像データは、符号化対象画像については符号化対象画像用バッファ301、参照画像である復号画像については復号画像用バッファ302からそれぞれ読み出して使用する。また、生成したシンタックス要素に基づいて当該MBの復号画像を作成し、復号画像用バッファ302に書き込む。生成されたシンタックス要素は、中間データ生成部103へ出力される。
【0019】
中間データ生成部103は
図2の2値化部201に相当し、CABACで規定されている方法でシンタックス要素を2値化し、符号化中間データ(以下、単に中間データと呼ぶ)を生成する。生成された中間データは符号化制御部104へ出力される。
【0020】
符号化制御部104は、中間データ生成部103から出力される中間データを、フレーム単位で、第1エントロピー符号化部105または第2エントロピー符号化部106のいずれかへ出力する。その際、中間データをバス109経由でメモリ108内の中間データ用バッファ303へ一旦書き込んでおき、次のフレームの符号化処理を行うエントロピー符号化部を決定し、バッファ303から該当フレームの中間データを読み出して前記決定したエントロピー符号化部へ出力する。後述するように、本実施例では、次のフレームの符号化処理を行うエントロピー符号化部に、符号化処理が早く終了しているエントロピー符号化部を割り当てる。
【0021】
また符号化制御部104は、エントロピー符号化部105,106へ出力するフレームに関する多重化制御情報を生成して、多重化部107に通知する。この多重化制御情報には、次に出力するフレームが符号化制御部104へ何番目に入力されたフレームであるか(符号化順序情報)と、次に出力するフレームがいずれのエントロピー符号化部で処理されるか(符号化割り当て情報)が含まれる。なお、次フレームに対するエントロピー符号化部の決定手法と多重化制御情報の具体例については後述する。
【0022】
第1エントロピー符号化部105と第2エントロピー符号化部106はいずれも同一の構成であり、
図2のコンテキスト計算部202と2値算術符号化部203に相当する。ここでは、符号化制御部104から出力される中間データ(2値化データ)に対し、確率モデルに基づいてエントロピー符号化(2値算術符号化)を行い、それぞれ第1及び第2ビットストリームを生成して多重化部107へ出力する。本実施例では、各エントロピー符号化部105,106は共に最大50Mbpsの符号化処理能力を有し、両者を並列処理させることで目標とする80Mbpsのビットレートを実現する。
【0023】
多重化部107は、第1及び第2エントロピー符号化部105,106で符号化された第1及び第2ビットストリームを1つのビットストリームに多重化処理する。そのために、エントロピー符号化部105,106から出力される第1及び第2ビットストリームを、バス109を経由して、メモリ108の第1及び第2ビットストリーム用バッファ304,305に書き込む。また、バッファ304,305から第1及び第2ビットストリームを読み出して、多重化処理を行う。その際、符号化制御部104から受け取った多重化制御情報に従い、ビットストリームをフレーム単位に区別してバッファ304,305に書き込み、またフレーム単位で順番に読み出しを行う。
【0024】
図4は、符号化制御部104から多重化部107に送る多重化制御情報400の例を示す図である。多重化制御情報400は符号化順序情報401と符号化割り当て情報402からなり、それぞれ1バイト(全2バイト)で記述している。符号化順序情報401は、符号化制御部104に前記中間データが1フレーム分入力される毎にインクリメントされる値である。また、符号化割り当て情報402は、第1エントロピー符号化部105を使う場合は「0」、第2エントロピー符号化部106を使う場合は「1」を与えている。多重化部107では、多重化制御情報400を参照することで、バッファ304,305に分かれて書き込まれた第1及び第2ビットストリームをフレーム順に読み出し、元の順序のビットストリームに変換することができる。
【0025】
次に、本実施例における符号化処理を具体例で説明する。
図5は、実施例1の符号化処理動作のタイミングを示す図である。ここでは、シンタックス要素生成部102、第1及び第2エントロピー符号化部105,106、多重化部107の処理タイミングを示す。横軸は時間軸で1フレーム処理期間T
Fを単位として表示している。1フレーム処理期間T
Fとは、符号化対象画像を実時間で符号化する場合に1フレームの処理に割り当て可能な時間であり、例えばフレームレートが30fpsの画像の場合、T
F=約0.033secとなる。F0,F1・・・はフレーム番号を示し、そのピクチャ構成は、F0はIフレーム、F1,F4はPフレーム、F2,F3,F5,F6はBフレームとして符号化するものとする。
【0026】
シンタックス要素生成部102では、1フレーム処理期間T
F内に各フレームのシンタックス要素を順次生成する。シンタックス要素生成部102での処理時間は符号化対象画像の画素数に依存し、各フレームの処理時間は一定となる。なお、1フレーム当たりの符号量について、Iフレームでは5.7Mbits、Pフレームでは3.8Mbits、Bフレームでは1.9Mbitsとなるようにレート制御を行う。各フレームのシンタックス要素は中間データ生成部103へ出力され、中間データに変換される。
【0027】
第1エントロピー符号化部105と第2エントロピー符号化部106は、各フレームの中間データのエントロピー符号化(以下、単に符号化という)を行いビットストリームに変換する。その際符号化制御部104は、次のフレームの符号化を符号化処理が早く終わったエントロピー符号化部に割り当てる。
【0028】
また、第1及び第2エントロピー符号化部105,106での符号化処理時間は、各フレームの符号量の大小に依存する。エントロピー符号化部105,106の処理能力はいずれも最大50Mbpsであり、1フレーム処理期間T
Fに最大で約1.7Mbitsを処理できる。よって、各フレームの符号化に要する時間は、Iフレーム(5.7Mbits)では約3.4T
F、Pフレーム(3.8Mbits)では約2.3T
F、Bフレーム(1.9Mbits)では約1.1T
Fとなる。
【0029】
符号化処理において、割り当てられたエントロピー符号化部では、割り当てられたフレームの全ての中間データについて符号化処理を行い、他のエントロピー符号化部では当該フレームの中間データの処理は一切行わないようにする。また、それぞれのエントロピー符号化部では、割り当てられたフレームの中間データの符号化処理を完了するまでは、他のフレームの中間データの符号化処理を行わないようにする。すなわち、1つのフレームの中間データが、2つのエントロピー符号化部に渡って処理されることはなく、また、1つのフレームの中間データの処理が途中で休止し、他のフレームの処理に切り替わることはない。
【0030】
その結果、各フレームF0,F1・・・の中間データは、各エントロピー符号化部105,106にて次のように符号化処理される。
フレームF0は時間t1のタイミングで第1エントロピー符号化部105に供給され、時間t1から符号化処理が行われる。フレームF0はIフレームであるから、符号化処理時間は約3.4T
Fとなる。フレームF0の符号化後のビットストリームは、メモリ108の第1のビットストリーム用バッファ304に書き込まれる。
【0031】
フレームF1は時間t2のタイミングで符号化処理中でない第2エントロピー符号化部106に供給され、時間t2から符号化処理が行われる。フレームF1はPフレームであるから、符号化処理時間は約2.3T
Fとなる。フレームF1の符号化後のビットストリームは、メモリ108の第2ビットストリーム用バッファ305に書き込まれる。
【0032】
フレームF2は時間t3のタイミングで供給されるが、2つのエントロピー符号化部105,106はいずれも符号化処理中であり、いずれかの処理が終了するまで待機する。この例では、フレームF1を処理している第2エントロピー符号化部106が時間t4を超えたところで先に処理を終了するので、フレームF2は第2エントロピー符号化部106に供給される。その結果、第2エントロピー符号化部106ではフレームF1に引き続きフレームF2の処理を行う。フレームF2はBフレームであるから、符号化処理時間は約1.1T
Fとなる。フレームF2の符号化後のビットストリームは、メモリ108の第2のビットストリーム用バッファ305に書き込まれる。
【0033】
フレームF3は時間t4のタイミングで供給されるが、先行するフレームF2が処理待ち状態であるためF2の処理が開始するまで待機する。そしてF2の処理が開始した後、先に処理が終了する第1エントロピー符号化部105に供給される。その結果、第1エントロピー符号化部105では、フレームF0に引き続きフレームF3の処理を行う。
以後のフレームF4,F5・・・についても同様で、符号化処理が早く終わったエントロピー符号化部に供給することで、各フレームの符号化を連続して実行する。
【0034】
多重化部107では、先頭フレームF0のビットストリームが生成された後の、時間t5のタイミングから多重化処理を開始する。
図4の多重化制御情報400に基づき、メモリ108のバッファ304及びバッファ305からフレーム順にビットストリームを読み出し、多重化ビットストリームに変換して出力する。
【0035】
図6は、メモリ108へのデータ読み書きタイミングを示す図である。縦軸はメモリアドレス、横軸は時間軸であり、ここではフレームF0とF1についての中間データとビットストリームの読み書きを示している。メモリアドレスのうち、下段領域(32〜48MB)は中間データ用バッファ303、中段領域(48〜64MB)は第1ビットストリーム用バッファ304、上段領域(64MB〜)は第2ビットストリーム用バッファ305である。
【0036】
まず、中間データの書き込みから説明する。符号化制御部104は、中間データ生成部103から出力されるフレームF0,F1の中間データをバッファ303にアドレスを連続させて書き込む(実線で示す)。書き込みタイミングは、フレームF0は時間t0から、フレームF1は時間t1から開始し、それぞれ1フレーム処理時間T
Fかけて行う。中間データの量はフレームF0とF1で異なるため、書き込み速度(グラフの傾き)は異なっている。このとき符号化制御部104は、1フレームの書き込みが終わる毎に符号化順序情報と終端のアドレスを記憶している。
【0037】
中間データの読み出しでは、符号化制御部104は、バッファ303からフレームF0とF1の中間データを読み出す(破線で示す)。その際、前記書き込み時に記憶している各フレームの符号化順序情報と終端のアドレスをもとに、中間データを符号化処理順序に、かつ1フレーム単位で読み出す。読み出した中間データは、フレームF0は第1エントロピー符号化部105へ、フレームF1は第2エントロピー符号化部106へ出力する。本実施例では、エントロピー符号化部105,106における中間データのバッファ容量が少ない場合を想定し、読み出しタイミングはエントロピー符号化部105,106での符号化開始に合わせ、フレームF0は時間t1から、フレームF1は時間t2から開始する。また読み出し速度(グラフの傾き)は、エントロピー符号化部105,106の処理速度に合わせ、一定としている。そのため、フレームF0,F1の読み出し時間は、それぞれの中間データの量に応じて異なる。もし、エントロピー符号化部105,106が十分なバッファ容量を備える場合には、1フレーム分を連続で読み出してバッファに蓄えてから符号化処理を行なっても良い。
【0038】
次にビットストリームの書き込みを説明する。多重化部107は、第1エントロピー符号化部105から出力されるフレームF0のビットストリームをバッファ304に、第2エントロピー符号化部106から出力されるフレームF1のビットストリームを、バッファ305に書き込む(一点鎖線で示す)。書き込みタイミングは、それぞれのエントロピー符号化部105,106での符号化処理に同期し、フレームF0は時間t1からフレームF1は時間t2から開始する。多重化部107は符号化制御部104から受け取った多重化制御情報(符号化順序情報)に基づき、書き込むビットストリームが何番目に出力するフレームであるかを記憶し、またバッファ304,305のどこに書き込んだか(先頭アドレス情報)と各フレームのサイズ情報を記憶しておく。
【0039】
ビットストリームの読み出しでは、多重化部107は、バッファ304からフレームF0のビットストリームを、続いてバッファ305からフレームF1のビットストリームを読み出す(点線で示す)。読み出しのタイミングは、符号化制御部104から受け取った多重化制御情報(符号化順序情報)に従い、書き込み時に記憶している各フレームの先頭アドレス情報を参照し、当該フレームのサイズ分の読み出し処理を行う。図では、時間t5からフレームF0の読み出しを開始し、それが終了すると引き続きフレームF1の読み出しを開始する。これにより、符号化制御部104へ中間データが入力された順序でビットストリームを多重化して、規格に準拠したビットストリームを出力することができる。
【0040】
次に、符号化制御部104において、各フレームの中間データを第1エントロピー符号化部105と第2エントロピー符号化部106のいずれで符号化するかを決定する手法を説明する。
【0041】
図7は、中間データの符号化割り当ての決定法を示すフローチャートである。
S701において、メモリ108の中間データ用バッファ303に格納されている中間データの中で、まだエントロピー符号化部105,106でエントロピー符号化処理を開始していないフレームの中間データ(未符号化フレームデータ)の有無を判定する。ここでは、シンタックス要素生成部102での処理が1フレーム分終了した時点で、初めて未符号化フレームデータと認める。すなわち、シンタックス要素生成部102で処理中のフレームのデータが存在しても、未符号化フレームデータとは認めない。
S701の判定で未符号化フレームデータなし(No)と判定された場合は、未符号化フレームデータ有りと判定されるまで、ループ処理を繰り返す。一方、未符号化フレームデータ有り(Yes)と判定された場合はS702へ進む。
【0042】
S702では、第1エントロピー符号化部105が他のフレームデータについて符号化処理中であるか否かを判定する。処理中である(Yes)場合はS704へ、処理中でない(No)場合はS703へ進む。
S703では、未符号化フレームデータの符号化処理を第1エントロピー符号化部105で行なうことに決定する。そして、該当フレームの多重化制御情報を多重化部107へ通知した後、未符号化フレームデータをメモリ108から読み出し、第1エントロピー符号化部105へ出力する。
【0043】
S704では、第2エントロピー符号化部106が他のフレームデータについて符号化処理中であるか否かを判定する。処理中である(Yes)場合はS702に戻り、S702またはS704のいずれかの判定が処理中でない(No)となるまでループ処理する。S704の判定が処理中でない(No)場合はS705へ進む。
S705では、未符号化フレームデータの符号化処理を第2エントロピー符号化部106で行なうことに決定する。そして、該当フレームの多重化制御情報を多重化部107へ通知した後、未符号化フレームデータをメモリ108から読み出し、第2エントロピー符号化部106へ出力する。
【0044】
S706では、符号化割り当てのシーケンスを終了するか否かを判定する。終了しない場合は、S701に戻り前記処理を繰り返す。
【0045】
上記フローチャートによれば、未符号化フレームデータがある場合、符号化処理が早く終わったエントロピー符号化部を用いて次のフレームの符号化処理を連続的に実行することが可能となる。これより、第1及び第2エントロピー符号化部105,106の休止期間を最小とし、処理パフォーマンスを最大限に活かすことが可能となる。
【0046】
これを従来の手法と比較する。例えば前記特許文献1のように、1フレームをN個の領域に分割し、それぞれの領域に対して符号化装置が予め割り当てられている場合を考える。この場合、各領域で符号化難易度が異なると、符号化装置毎の発生符号量がばらついてくる。よって、実時間処理を保証するためには、各符号化装置の処理能力を目標ビットレートの1/Nより高い値に設定しておく必要がある。これに対し本実施例の方法では、各エントロピー符号化部の処理状況に応じて、次のフレームの符号化を行うエントロピー符号化部を割り当てている。よって、フレーム毎に符号量が異なっていても各エントロピー符号化部はほぼ100%の稼働率で動作するため、エントロピー符号化部に課される処理能力は最小限のビットレートの値で十分である。
【0047】
実施例1の変形例として以下が可能である。
上記例では2個のエントロピー符号化部105,106を備える構成としたが、エントロピー符号化部の数は3個以上でも同様に動作し、1個のエントロピー符号化部での処理負担をさらに軽減することができる。この場合にも符号化制御部104は、各エントロピー符号化部の処理状況に応じて、フレーム単位で次に符号化処理を行なうエントロピー符号化部を決定する。
【0048】
符号化方式としてH.264のCABACを採用したが、これに限らず、符号化する度に確率テーブルを変更するようなコンテキスト適応型エントロピー符号化方式(CAVLC)を採用することもできる。
符号化処理中のデータを記憶するメモリ108としてSDRAMを使用したが、バッファの一部をSRAMにして、バス109を経由せずにSRAMにデータをバッファリングする構成としても良い。
【0049】
ピクチャ構成はI、P、Bフレームの全てを用いるものとしたが、Iフレームのみ、IフレームとPフレームのみといったように、他のピクチャ構成でも良い。
メモリ108の中間データ用バッファ303には中間データをそのまま記録したが、各処理部とバス109の間に圧縮伸張部を設け、圧縮処理した圧縮データをメモリ108に記録し、メモリ108から読出した圧縮データを伸張処理してもよい。その場合、メモリ108の記憶容量とバス109のバンド幅を削減できる。
【0050】
実施例1によれば、目標とする符号化処理能力(ビットレート)を分担する複数のエントロピー符号化部を設け、符号化制御部は各エントロピー符号化部の処理状況に応じて、フレーム毎に次の符号化処理を行うエントロピー符号化部を決定するようにした。その際、決定したエントロピー符号化部では、該当するフレームの全ての中間データについてエントロピー符号化を行い、他のエントロピー符号化部では当該フレームの中間データのエントロピー符号化を一切行わないようにした。これより、1画面(1フレーム)を複数の領域に分割することがないので、画面内の境界部分において画質劣化が原理的に発生せず、かつ高ビットレートでの符号化処理を実現できる。
【0051】
特に符号化制御部は、複数のエントロピー符号化部のうち早く符号化処理を終了したエントロピー符号化部に対し次の符号化処理を行なわせるようにした。これより、各エントロピー符号化部の処理休止期間が最小になり、各エントロピー符号化部の処理パフォーマンスを最大限利用して効率的な符号化処理を実現できる。
【実施例2】
【0052】
実施例1では、第1及び第2エントロピー符号化部105,106は、シンタックス要素生成部102(及び中間データ生成部103)にて1フレーム分のデータ生成を終了した後に、そのフレームのエントロピー符号化を開始するものとした。すなわち
図7のS701の判定において、符号化制御部104は、シンタックス要素生成部102が1フレーム分の処理を終了した時点で未符号化フレームデータ有りと認識するものとした。
【0053】
これに対し実施例2では、シンタックス要素生成部102(及び中間データ生成部103)が1フレーム内で符号化に必要な最小限のデータを生成した時点で、第1または第2エントロピー符号化部105,106がそのフレームのエントロピー符号化を開始するようにした。具体的には、フレーム先頭の1MB(マクロブロック)分の処理が終了した時点で、そのフレームの符号化を開始する。
図7のS701の判定も、フレーム先頭の1MBが生成された時点で、未符号化フレームと認識するようにした。これにより、符号化対象画像データが入力し多重化ビットストリームを出力するまでの遅延時間を短縮することができる。
【0054】
図8は、実施例2における符号化処理動作のタイミングを示す図である。シンタックス要素生成部102における1MB分の処理時間をT
MBとする。
シンタックス要素生成部102がフレームF0の処理を開始して先頭の1MB分を終了したとき、すなわち時間t0からT
MB経過後、符号化制御部104はバッファ303に未符号化フレームF0が蓄積されたと判定して、第1エントロピー符号化部105へフレームF0の中間データの出力を開始する。これを受けて、第1エントロピー符号化部105はフレームF0について符号化を開始する。
【0055】
同様に、シンタックス要素生成部102がフレームF1について先頭の1MB分を終了したとき、すなわち時間t1からT
MB経過後、符号化制御部104は第2エントロピー符号化部106へフレームF1の中間データの出力を開始する。これを受けて、第2エントロピー符号化部106はフレームF1について符号化を開始する。
【0056】
フレームF5,F7についても、それぞれ時間t5,t7からT
MB経過後に符号化を開始するが、他のフレームF2,F3,F4,F6の場合は、先行するフレームの符号化処理が終了するのを待って第1または第2エントロピー符号化部105,106にて符号化を開始する。
【0057】
また多重化部107においては、第1エントロピー符号化部105によりフレームF0の符号化処理が開始してからT
MB経過後に、フレームF0から順に多重化ビットストリームの出力を開始する。但し、各フレームの多重化ビットストリームの出力が終了するのは、各フレームの符号化処理が終了した後になる。
【0058】
実施例2によれば、前記実施例1(
図5)と比較し、各処理部の処理タイミングを早めることで、符号化対象画像データの入力タイミングに対し多重化ビットストリームの出力タイミングの遅延時間を短縮することができる。