映像の符号化を高速に行う方法として、複数のピクチャの符号化処理を並列に行う方法がある。図4は、各ピクチャについてその復号時に参照される他のピクチャとの関係(以下、「参照構造」という。)を表示順に示した図である。ピクチャとは、符号化対象映像の1フレーム(または1画面)である。この図は、片方向予測ピクチャ(以下、「Pピクチャ」という。)1枚に対し、双方向予測ピクチャ(以下、「Bピクチャ」という。)が2枚あるM=3と呼ばれる参照構造を示したものである。各ピクチャの上もしくは下に描かれた矢印は各ピクチャが参照する先のピクチャを表している。
この図において、符号化順は各ピクチャの下に数字で示した通り、I1→P1→B1→B2→P2→B3→B4という順番である。しかし参照構造によれば、P1の符号化が終了すると、B1のみではなくB2及びP2も符号化可能である。従って、符号化処理を並列に行えるシステムにおいては、これら3ピクチャを同時に符号化処理することができる。
次に、HEVCやH.264をはじめとする一般的な映像符号化規格における符号化部の装置構成を説明する。図5は、一般的な映像符号化規格における符号化部の装置構成を示すブロック図である。図5に示す装置は、原画像バッファ1、復号画像バッファ10及び符号化部12を備える。
符号化部12は、減算器2、加算器3、DCT(離散コサイン変換)計算器(図中「DCT」)4、量子化器(図中「Q」)5、逆量子化器(図中「IQ」)6、IDCT(逆離散コサイン変換)計算器(図中「IDCT」)7、予測モード選択部8、ループフィルタ9及びエントロピー符号化部11を備える。
原画像バッファ1は、表示順に入力された原画像を保持し、符号化順に並べ替えて順に出力する。減算器2は、原画像バッファ1から送られた原画と予測モード選択部8から送られた予測画像の差分を取って予測残差信号を計算し、DCT計算器4に出力する。
加算器3は、予測モード選択部8から出力された予測画像と、IDCT計算器7から送られる量子化後の予測残差信号の和を計算し、フィルタ前の復号画像としてループフィルタ9に送る。DCT計算器4は、予測残差信号に離散コサイン変換を施し、算出されたDCT係数を量子化器5へ送る。
量子化器5は、DCT計算器4から送られたDCT係数を、外部から与えられた量子化パラメータQPを用いて量子化し、DCT係数の量子化値としてエントロピー符号化部11と逆量子化器6へ送る。逆量子化器6は、量子化器5で求まった量子化後のDCT係数を、外部から与えられた量子化パラメータQPを用いて逆量子化し、量子化後のDCT係数としてIDCT計算器7に送る。
IDCT計算器7では、逆量子化器6から送られた量子化後のDCT係数に逆離散コサイン変換を施し、量子化後の予測残差信号を求める。予測モード選択部8は、入力された原画像に最も近い予測画像を、同じく入力された参照画像から作成して出力すると共に、その予測モードの情報をエントロピー符号化器11へ送る。
ループフィルタ9は、加算器3から送られたフィルタ前の復号画像にフィルタ処理を施し、復号画像として復号画像バッファ10に送る。復号画像バッファ10は、ループフィルタ9から出力された復号画像を保存し、予測モード選択部8に対して参照画像として出力する。
エントロピー符号化部11は、量子化器5から送られるDCT係数の量子化値と予測モード選択部8から送られる予測モード情報を可変長符号化し、符号化ストリームとして出力する。
次に、図6を参照して、図5に示す装置の処理動作を説明する。図6は、図5に示すHEVCやH.264をはじめとする一般的な映像符号化規格における符号化装置の動作を示すフローチャートである。処理が始まると、まず原画像バッファ1は、入力された各ピクチャを符号化順に並べ替える(ステップS21)。
以降、符号化部12は各ピクチャを符号化順に処理する。各ピクチャは矩形のブロックに分割される。予測モード選択部8は、ブロックごとに予測モードを決定する(ステップS22)。減算器2は、予測モードに対応する予測画像と原画像との差分を取得する。減算器2は、取得された差分に基づいて予測残差信号を出力する(ステップS23)。
次に、DCT計算器4は、出力された予測残差信号にDCT(ステップS24)を施す。量子化器5は、DCT係数に対して量子化(ステップS25)を施す。逆量子化器6は、逆量子化を行う(ステップS26)。IDCT計算器7は、IDCTを計算する(ステップS27)。
次に、加算器3は、予測画像と量子化後の予測残差信号とを加算し復号画像を生成する(ステップS28)。ループフィルタ9は、生成された復号画像にループフィルタを掛けて(ステップS29)、復号画像バッファ1に復号画像として保存する(ステップS30)。保存された復号画像は、以降の予測画像生成に利用される。
一方、エントロピー符号化部11は、DCTと量子化を施した量子化済みのDCT係数と、対応する予測モード情報とに対して可変長符号化を施し、符号化ストリームとして出力する(ステップS31)。
図6に示す処理(ステップS22〜S31)が行われる際には、各ピクチャに対して量子化パラメータQPが与えられる必要がある。量子化パラメータQPは、量子化の粗さを表す。量子化パラメータQPが大きいほど粗く量子化され、符号化ノイズが多くなる。一方、量子化パラメータQPが大きいほど、圧縮率が高くなるため発生する符号量は少なくなる。量子化パラメータQPは、予め定められたビットレート及びバッファサイズを元に、デコーダのバッファモデルを順守するように算出される。
ここで、デコーダのバッファモデルについて説明する。映像デコーダには符号化ストリームを保存する受信バッファがあり、この受信バッファには外部から受信した符号化ストリームが蓄積される。また、復号の際には1フレーム分ずつ符号化ストリームを受信バッファから引き抜いて復号する。
この受信バッファのサイズは有限のため、受信した符号化ストリームを受信バッファに蓄積する速度と、受信バッファに蓄積された符号化ストリームをバッファから引き抜く速度は釣り合っている必要がある。
例えば、前者の速度が速い場合は受信バッファがフルになって符号化ストリームを受信できなくなる「バッファオーバーフロー」(以下、「オーバーフロー」という。)が発生し、逆に後者の速度が速い場合は受信バッファが空になってピクチャの復号が停止してしまう「バッファアンダーフロー」(以下、「アンダーフロー」という。)が発生する。
そこで一般的な映像符号化器では、上記のよう受信バッファのオーバーフローやアンダーフローが起こらないよう、各ピクチャの発生符号量、ひいては量子化パラメータQPを適切に制御するレート制御部と呼ばれる機構が組み込まれている。
ここで復号順でn枚目ピクチャの復号時刻をt(n)、n枚目ピクチャを復号した直後の受信バッファのデータ蓄積量をBt_after(t(n))と表記する。次のn+1枚目ピクチャを復号する時刻t(n+1)は、フレームレートFPS[フレーム/秒]を用いて、t(n+1)=t(n)+1/FPSと表記できる。
このことから、一般的なCBRモデル(ビットレート一定モデル)の場合、n+1枚目ピクチャを復号する直前の受信バッファのデータ蓄積量Bt_before(t(n+1))は、ビットレートb[bit/秒]を用いて
Bt_before(t(n+1))=Bt_after(t(n))+b/FPS
と表せる。
ここでn+1枚目ピクチャの発生符号量がG(n+1)だったとすれば、n+1枚目ピクチャを復号した直後の受信バッファにおけるデータ蓄積量Bt_after(t(n+1))は
Bt_after(t(n+1))=Bt_before(t(n+1))−G(n+1)
と表せる。
ここで、もし、G(n+1)>Bt_before(t(n+1))であった場合、Bt_after(t(n+1))<0となり、バッファアンダーフローが発生する。一方、受信バッファサイズをSと置いたとき、G(n+1)<Bt_before(t(n+1))+b/FPS−Sであった場合、Bt_after(t(n+1))>Sとなり、バッファオーバーフローが発生する。
そのため前述のレート制御部では、このようにバッファアンダーフローやオーバーフローが起こらないよう各ピクチャの発生符号量Gの適切な値を算出し、またそのような発生符号量となるようにQPを決定する機構となる。
この発生符号量Gと量子化パラメータQPの関係であるが、ある量子化パラメータQPに対応する量子化幅をQstep(QP)と表すと、量子化幅Qstep(QP)と、その時の発生符号量Gの間にはおおよそ反比例の関係がある。この両者の積を取ったものをこのピクチャの複雑さ指数X=G×Qstep(QP)と呼ぶ。この複雑さ指数Xは、直前に符号化したピクチャのものとおよそ近い値となることから、直前に符号化した結果の積からXを求め、次ピクチャのGとQPの算出に用いられることが多い。
また、各ピクチャの適切な発生符号量Gの計算方法としては、MPEG−2のTM5モデルがよく用いられる。これは、Iから始まる一連のピクチャ群であるGOP(Group of Pictures)に対して使用可能な符号量を設定し、各ピクチャタイプI・P・Bに対する複雑さ指数Xi、Xp、Xbに応じて、GOP内の各ピクチャに符号量を分配する、というものである。
1ピクチャずつ符号化する毎に割り当て符号量と実際の発生符号量の間の誤差をフィードバックし、バッファアンダーフローやオーバーフローを抑止しつつ、目的のビットレートbとなるよう各ピクチャの符号量配分を決定する。
ここで、レート制御部の処理例を示す。レート制御部の処理は前処理と後処理の2パートに大別される。まず前処理について説明する。処理が始まると、まずバッファ位置Bt_beforeを予め定められた初期値にて初期化する。また、各ピクチャタイプに対する複雑さ指数Xi、Xp、Xbを予め定められた定数で初期化する。
次に1GOPに割り当てる符号量Rの初期値を設定する。例えば、1GOPに含まれるピクチャ枚数をNとすれば、Rの初期値は、R=b×N/FPSなどと計算される。また、1GOPに含まれる各タイプ毎のピクチャ枚数をそれぞれNi(=Iピクチャの枚数=1)、Np(=Pピクチャの枚数)、Nb(=Bピクチャの枚数)に代入する。
次に、符号化対象のピクチャ毎に以下のような処理により割り当て符号量Tを算出する。符号化対象ピクチャがIピクチャの場合、TはT=(Xi×R)/(Xi×Ni+Xp×Np+Xb×Nb)として算出する。その後、Niの値を1デクリメントする。同様に符号化対象ピクチャがPピクチャの場合はT=(Xp×R)/(Xi×Ni+Xp×Np+Xb×Nb)として算出後、Npの値を1デクリメントする。Bピクチャの場合はT=(Xb×R)/(Xi×Ni+Xp×Np+Xb×Nb)として算出後、Nbの値を1デクリメントする。
上記で求めた符号量Tについて、符号化のバッファ位置推定値Bt_afterを
Bt_after=Bt_before−T
として算出する。この時Bt_after <0(バッファアンダーフロー)、もしくはバッファサイズをSとした時にBt_after+b/FPS>S(バッファオーバーフロー)とならないよう、TをBt_before+b/FPS−S≦T≦Bt_beforeの範囲にクリップする。
次に、この割り当て符号量Tに相当する量子化パラメータQPを算出する。この量子化パラメータQPをターゲットQPと名付ける。前述の通り、複雑さ指数Xと発生符号量Gとの間にはおよそ以下の関係が成立する。
X=G×Qstep(QP)
そのため、例えばIピクチャの場合は符号量TとQstep(QP)の積がXiに最も近くなるQPをターゲットQPとすればよい。同様に、Pピクチャの場合は積がXpに最も近くなるQP、Bピクチャの場合はXbに最も近くなるQPをターゲットQPとすればよい。
ここまでが前処理となる。このようにして求めたターゲットQPを用いて実際に符号化を行った後、レート制御部では後処理を行う。この処理は具体的には以下の通りである。まず、符号化結果から複雑さ指数の値を更新する。符号化したピクチャの発生符号量をG、その時のターゲットQPに対応する量子化幅をQstep(ターゲットQP)とすれば、複雑さ指数は両者の積で求められる。
そこで符号化したピクチャのピクチャタイプがIピクチャであればXi、PピクチャであればXp、BピクチャであればXbをG×Qstep(ターゲットQP)の値に更新する。また、符号量Rの値も更新する。具体的にはRから発生符号量Gを引いたものを新たに符号量Rとする。
次に、発生符号量Gを用いてバッファ位置Bt_beforeの値を更新する。これは、
Bt_before=Bt_before−G+b/FPS
として計算される。以上がレート制御部の後処理となる。
その後、またレート制御部の前処理に戻って次の符号化ピクチャに関するターゲットQPを算出する処理を行うことを繰り返す。1GOP分の符号化が終わったら、Rの値を更新し、次のGOPに対してまた同様の処理を繰り返す。具体的には、Rの値について、その時点で保持している値に対し、b×N/FPSを加算する。また、Ni、Np、Nbの値を1GOPに含まれる各ピクチャタイプの枚数に戻す。
このような処理を行うことで、バッファを破綻させないようにしつつも目的のビットレートに沿ったビットストリームを生成できる(例えば、非特許文献1参照)。
次に、前述したような複数ピクチャを同時に符号化するための装置の装置構成を説明する。図7は、前述したような複数ピクチャを同時に符号化するための装置の装置構成を示すブロック図である。この装置は、原画像バッファ1、復号画像バッファ10、N(Nは自然数)個の符号化部12−1〜N、ストリームバッファ13、並列処理割り当て部14、バッファ計算部15、割り当て符号量算出部16、QP計算部17、複雑さ計算部18から構成される。バッファ計算部15、割り当て符号量算出部16、QP計算部17及び複雑さ計算部18によってレート制御部19が構成されている。
原画像バッファ1は前述のものと同様、原画像を符号化順に並べ替え、符号化部12−1〜Nに送る。ただし、本構成では符号化部12−1〜Nが複数あるため、並列処理割り当て部14から送られる原画割り当て情報を元に、符号化順でN枚分のピクチャをN個ある符号化部12−1〜Nへそれぞれ送信する。
復号画像バッファ10は前述のものと同様、符号化部12−1〜Nから送られる復号画像を保存し、また必要に応じて参照画像として符号化部12−1〜Nへ送る。但し、本構成では符号化部12−1〜Nが複数あるため、このバッファも複数の復号画像の同時保存、及び複数の参照画像の同時送出に対応している。
符号化部12−1〜Nは図5の点線で囲まれた符号化部12と同等の機能を有し、本構成例ではそれがN個並列に備わっている。ストリームバッファ13は、各符号化部12−1〜Nから送られる符号化ストリームを保存すると共に、そのデータサイズを発生符号量としてバッファ計算部15、割り当て符号量算出部16、複雑さ計算部8に送る。
並列処理割り当て部14は、入力された並列処理数を元に、原画像バッファのどのピクチャをN個あるどの符号化部(符号化部12−1〜Nのいずれか)へ送るかを求め、原画像バッファ1へ割り当て情報として送信する。
バッファ計算部15は、処理が始まるとレート制御設定情報を元にバッファ位置の初期値Bt_before(0)を計算して保持する。また、ストリームバッファ13から各ピクチャの発生符号量が求まるたびにBt_beforeの値を計算し、割り当て符号量算出部16へ送る。
割り当て符号量算出部16は、外部から与えられるレート制御設定と並列数、バッファ位置、各ピクチャの発生符号量を元に、向こうNピクチャ分の各ピクチャの割り当て符号量T(1)〜T(N)を求め、QP計算部17へ送る。QP計算部17は、複雑さ計算部18から送られる各ピクチャタイプの複雑さ指数と各ピクチャの割り当て符号量を元に、Nピクチャ分のターゲットQPを計算して対応するN個の符号化部12−1〜Nへ送る。
複雑さ計算部18は、QP計算部17から送られる各ピクチャの量子化パラメータQPと、ストリームバッファ13から送られる対象ピクチャの発生符号量からピクチャタイプ毎の複雑さ指数を計算し、割り当て符号量算出部16とQP計算部17へ送る。
次に、図8を参照して、図7に示す装置の処理動作を説明する。図8は、前述したような複数ピクチャを同時に符号化する装置が行う処理動作を示すフローチャートである。符号化を開始すると、まず図6のフローと同様、原画像バッファ1は、ピクチャを符号化順に並べ替える(ステップS41)。
次に、前述のレート制御部19の処理を元に、割り当て符号量算出部16は、向こうN枚分のピクチャに対する割り当て符号量を算出する(ステップS42)。この時、N枚分のピクチャのうち、1枚目ピクチャの割り当て符号量算出は前述の通りに行えばよい。しかし2枚目以降のピクチャに関しては前述の式のままでは割り当て符号量算出ができない。
これは、例えば2枚目ピクチャの計算を行うには1枚目ピクチャの符号化結果から求まる発生符号量を使い、バッファ位置Bt_before、符号量R、及び対応するピクチャタイプの複雑さ指数を更新する必要があるためである。
同様に3枚目ピクチャは1枚目と2枚目ピクチャの符号化結果、4枚目ピクチャは1〜3枚目ピクチャの発生符号量が必要となる。しかしこの時点ではこれらピクチャの発生符号量が無いことから、割り当て符号量を発生符号量の代用に用いる。
従って2枚目ピクチャに関して言えば、複雑さ指数は1枚目と共通とし、バッファ位置Bt_before(2)は、1枚目ピクチャに関するバッファ位置Bt_before(1)と1枚目ピクチャの割り当て符号量T(1)から
Bt_before’(2)=Bt_before(1)−T(1)+b/FPS
となる。
また符号量R(2)は1枚目ピクチャ計算時の符号量R(1)から符号量T(1)を引いた
R(2)=R(1)−T(1)
を用いるとする。これらの値を用い、2枚目ピクチャに対する割り当て符号量T(2)を計算すればよい。同様に3枚目ピクチャに関しても複雑さ指数は1枚目計算時と共通で、バッファ位置Bt_before(3)は
Bt_before(3)=Bt_before(2)−T(2)+b/FPS
=Bt_before(1)−(T(1)+T(2))+2×b/FPS
また、符号量R(3)は
R(3)=R(2)−T(2)=R(1)−(T(1)+T(2))
と表せ、これらから割り当て符号量T(3)を算出すればよい。
上記の計算によりNピクチャ分の割り当て符号量T(1)〜T(N)を算出したら、QP計算部17は、これらの割り当て符号量に対応する各ピクチャの量子化パラメータQPを算出する(ステップS43)。これは、各ピクチャのピクチャタイプに対する複雑さ指数XiもしくはXpもしくはXbを各ピクチャの割り当て符号量で除した値に最も近い量子化幅となるQPを求めればよい。例えば、1枚目ピクチャのピクチャタイプがIピクチャであれば量子化幅はXi/T(1)で算出でき、この量子化幅に最も近い量子化パラメータQPが1枚目ピクチャのターゲットQPとなる。
同様にNピクチャ分全てのターゲットQPを算出したら、符号化部12−1〜Nは、これらNピクチャを同時並列に符号化する(ステップS44)。この処理は、具体的には図6に示すフローチャート中の破線で囲まれた「符号化処理のコアフロー」に従って各ピクチャを同時に符号化することに相当する。
Nピクチャ分の符号化が終わったら、各ピクチャに対応する発生符号量G(1)〜G(N)が求まるので、複雑さ計算部18は、この結果を元に複雑さ指数の更新(ステップS45)し、バッファ計算部15は、バッファ位置の更新を行う(ステップS46)。複雑さ指数の更新に関しては、発生符号量とターゲットQPに対応するQstepの積で当該ピクチャの複雑さ指数が求まるので、ピクチャタイプ毎に分類し、平均値を求めて当該ピクチャタイプの新たな複雑さ指数とするなどすればよい。
一方バッファ位置の更新については、Nピクチャ分の発生符号量G(1)〜G(N)を元にバッファ位置Bt_before(N+1)を以下の通り求める。
Bt_before(N+1)=Bt_before(1)−(T(1)+T(2)+…T(N))+N×b/FPS
以上の処理を全てのピクチャに対して行う(ステップS47)ことで、複数ピクチャ並列に符号化処理を行うことができる。
以下、図面を参照して、本発明の一実施形態による映像符号化装置を説明する。図1は同実施形態の構成を示すブロック図である。この図に示す装置が図7に示す従来の装置と異なる点は、並列数算出部20が新たに設けられている点である。
なお、並列処理割り当て部14の入力に関して、図7に示す構成では外部から与えられた並列数が固定値として与えられていたが、図1に示す構成では並列数算出部20から出力される並列処理数mが入力となっている。
図1に示す装置は、図7に示す装置と同様に、原画像バッファ1、復号画像バッファ10、N(Nは自然数)個の符号化部12−1〜N、ストリームバッファ13、並列処理割り当て部14、バッファ計算部15、割り当て符号量算出部16、QP計算部17、複雑さ計算部18から構成される。バッファ計算部15、割り当て符号量算出部16、QP計算部17及び複雑さ計算部18によってレート制御部19が構成されている。そして、新たに設けられた並列数算出部20が備えられている。図1に示す装置は、並列数算出部20を除く構成は、図7に示す構成と同様であるため、ここでは、説明を簡単に行う。
原画像バッファ1は、原画像を符号化順に並べ替え、符号化部12−1〜Nに送る。ただし、本構成では符号化部12−1〜Nが複数あるため、並列処理割り当て部14から送られる原画割り当て情報を元に、符号化順でm枚分のピクチャを、N個ある符号化部12−1〜Nのなかの任意のm個に対してそれぞれ送信する。
復号画像バッファ10は、符号化部12−1〜Nから送られる復号画像を保存し、また必要に応じて参照画像として符号化部12−1〜Nへ送る。ただし、本構成では符号化部12−1〜Nが複数あるため、この復号画像バッファ10も複数の復号画像の同時保存、及び複数の参照画像の同時送出に対応している。
符号化部12−1〜Nは図5に示す符号化部12と同等の機能を有し、本構成例では符号化部12それがN個並列に備わっている。ストリームバッファ13は、各符号化部12−1〜Nから送られる符号化ストリームを保存すると共に、そのデータサイズを発生符号量としてバッファ計算部15、割り当て符号量算出部16、複雑さ計算部8に送る。
並列処理割り当て部14は、入力された並列処理数mを元に、原画像バッファ1のどのピクチャをN個あるどの符号化部(符号化部12−1〜Nのいずれか)へ送るかを求め、原画像バッファ1へ割り当て情報として送信する。原画像バッファ1のピクチャの符号化部12−1〜Nへの割り当て方法としては、例えば、m枚を前詰めで割り当てればよい。
バッファ計算部15は、処理が始まるとレート制御設定情報を元にバッファ位置の初期値Bt_before(0)を計算して保持する。また、ストリームバッファ13から各ピクチャの発生符号量が求まるたびにBt_beforeの値を計算し、割り当て符号量算出部16及び並列数算出部20へ送る。
割り当て符号量算出部16は、外部から与えられるレート制御設定と並列数、バッファ位置、各ピクチャの発生符号量を元に、向こうNピクチャ分の各ピクチャの割り当て符号量T(1)〜T(N)を求め、QP計算部17及び並列数算出部20へ送る。QP計算部17は、複雑さ計算部18から送られる各ピクチャタイプの複雑さ指数と各ピクチャの割り当て符号量を元に、Nピクチャ分のターゲットQPを計算して対応するN個の符号化部12−1〜Nへ送る。
複雑さ計算部18は、QP計算部17から送られる各ピクチャの量子化パラメータQPと、ストリームバッファ13から送られる対象ピクチャの発生符号量からピクチャタイプ毎の複雑さ指数を計算し、割り当て符号量算出部16とQP計算部17へ送る。
並列数算出部20は、割り当て符号量算出部16が出力する各ピクチャの割り当て符号量と、バッファ計算部15が出力するバッファ位置と、外部から指定される並列数とから符号化部12−1〜Nにおける並列処理数mを出力する。ここで、出力される並列処理数mは、N≧mを満たすことが条件である。
次に、図2を参照して、図1に示す並列数算出部20の構成を説明する。図2は、図1に示す並列数算出部20の構成を示すブロック図である。並列数算出部20は、誤差考慮済み符号量計算部21、バッファ推移推定部22、閾値判定部23、並列処理数決定部24から構成される。並列数算出部20には、各ピクチャの割り当て符号量と、並列数と、バッファ位置とが入力される。
誤差考慮済み符号量計算部21は、入力された並列数で指定されるピクチャ数分の割り当て符号量を入力とし、それらにあらかじめ定められた誤差係数k=1.2を乗じた値を各ピクチャの誤差考慮済み符号量としてバッファ推移推定部22に送る。ここで、誤差係数kとして、1.2を乗じているが、この値に限るものではなく、任意の値を用いることが可能である。
バッファ推移推定部22は、バッファ位置として入力された初期バッファ位置を起点として並列数によって規定されるピクチャ枚数分の符号化後バッファ位置(n枚目ピクチャを復号した直後の受信バッファのデータ蓄積量Bt_after)を各ピクチャに関する誤差考慮済み割り当て符号量から計算して閾値判定部23に送る。
閾値判定部23は、並列数によって規定されたピクチャ数分の符号化後バッファ位置(各ピクチャのBt_after)に関して、予め定められた閾値Thとの間で大小比較を施し、その結果を並列処理数決定部24に送る。
並列処理数決定部24は、閾値判定部23の出力を入力し、並列数で規定された値以下の範囲で、閾値判定結果が常に閾値Th以上となる最大のピクチャ番号を求め、それを並列処理数mとして出力する。
次に、図3を参照して、図2に示す並列数算出部20を含む図1に示す映像符号化装置の動作を説明する。図3は、図1に示す映像符号化装置の動作を示すフローチャートである。
まず、符号化が始まると、従来法と同様、原画像バッファ1は、入力画像を符号化順に並べ替える(ステップS1)。続いて、割り当て符号量算出部16は、向こうN(Nは自然数)枚分のピクチャに関して割り当て符号量を算出する(ステップS2)。算出方法は前述した通りである。
次に、誤差考慮済み符号量計算部21は、算出した各ピクチャの割り当て符号量T(1)〜T(N)に対して誤差を加味する(ステップS3)。具体的にはT(1)〜T(N)に誤差係数k=1.2を掛け、誤差考慮済み符号量T’(1)〜T’(N)を算出する。
次に、バッファ推移推定部22は、バッファ推移の推定を行う(ステップS4)。具体的には各ピクチャの符号化終了時点の推定バッファ位置Bt_after(1)〜Bt_after(N)を以下のように求める。
Bt_after(1)=Bt_before(1)−T’(1)
Bt_after(2)=Bt_before(2)−T’(2)
=Bt_before(1)−(T’(1)+T’(2))+b/FPS
…
Bt_after(N)= Bt_before(N) −T’(N)
=Bt_before(1)−(T’(1)+T’(2)+…T’(N))+(N−1)×b/FPS
そして、閾値判定部23は、Bt_after(1)〜Bt_after(N)を予め定めた閾値Thと比較する(ステップS5)。この比較結果に基づき、並列処理数決定部24は、符号化順に見て最も早く閾値Thを下回るピクチャ番号を見つけ、その直前のピクチャ番号を並列処理数mとして出力する(ステップS6)。例えばBt_after(1)、Bt_after(2)は閾値Thを上回り、Bt_after(3)が閾値Thを下回っていた場合、並列処理数mは2とする。
その後、QP計算部17は、向こうm(並列処理数)枚分のピクチャに対して量子化パラメータQPを算出する(ステップS7)。この時の量子化パラメータQPの計算では、誤差係数k(例えば、1.2)を掛ける前の符号量T(1)〜T(m)の値を元に量子化パラメータQPを算出する。
次に、向こうm枚分のピクチャに対するターゲットQPが求まったら、以降は従来法と同様、符号化部12−1〜Nは、m(並列処理数)枚分のピクチャを並列処理して符号化を行う(ステップS8)。m枚の符号化に必ずしも符号化部12−1〜Nの全てが使われる訳ではなく、m個の符号化部のみが使われることになる。そして、複雑さ計算部18は、求まった発生符号量を元に、複雑さ指数を更新する(ステップS9)。
また、バッファ計算部15は、求まった発生符号量を元に、バッファ位置を更新する(ステップS10)。そして、符号化フレームが残っていたら向こうN枚分のピクチャに対する割り当て符号量算出処理に戻って符号化処理を最後まで繰り返す(ステップS11)。
なお、前述した説明では割り当て符号量に誤差を加味する方法として誤差係数k=1.2を乗算する例を説明したが、誤差係数kを乗算することに限るものではない。例えば、固定値を加算してもよい。また、乗算や加算に限らず、各ピクチャの割り当て符号量を予め定めた誤差係数kを算出するための四則演算による方程式に代入して得られた値に基づいた割り当て符号量としてもよい。
また、誤差係数kを乗算する際の誤差係数kは、割り当て符号量に対して、予め定めた1以上の係数を掛けて安全側に設定することを目的とするため、1以上の係数であればよい。特に、本実施形態では、割り当て符号量T(N)と、実際の発生符号量G(N)の間に乖離が生じるため、その分を補償する際に、安全側に設定するため、1以上の誤差係数を乗算するようにしている。そのため、例えば並列化を行わない状態で予め符号化を行って割り当て符号量T(N)と実際の発生符号量G(N)を算出し、その比を以って「1以上の係数」を定めれるようにしてもよい。
例えば、大量のあらゆる映像を予めエンコードして割り当て符号量T(N)と実際の発生符号量G(N)の平均値をそれぞれ求め、その比を「1以上の係数」とすると手法を用いて誤差係数kを設定することができる。
また、誤差係数kは必ずしも固定値である必要はない。実際にエンコードを行っていくと各フレームの割り当て符号量T(N)と実際の発生符号量G(N)の値が順次求まるので、その最新Mフレーム分の平均値を以って順次更新したり、先頭からずっと積算し続けた値の平均値を使ったりすることも可能である。
以上説明したように、実施形態における映像符号化装置は、複数のピクチャを同時に符号化を行う際に、割り当て符号量に誤差を加味したうえでバッファ推移の推定を行う。そして、映像符号化装置は、同時に符号化を行う適切なピクチャ数を設定する。この構成によれば、復号時においてバッファオーバーフロー及びバッファアンダーフローの発生を低く抑えることができるとともに、符号化速度の高速化を実現することができる。
特に、バッファ位置が下がっている場合は、並列数算出部20が並列処理数を少なくすることで処理速度が遅くなる代わりにバッファアンダーフローのリスクを下げることが可能になる。逆に、バッファ位置が上がっている場合などバッファアンダーフローの危険性が低い場合は、並列数算出部20が並列数を多くすることで処理速度を高めることが可能になる。この結果、バッファアンダーフローのリスクを低く抑えつつ、可能な限り並列処理数を高めることにより高速にエンコードすることができる。
前述した実施形態における映像符号化装置の全部または一部をコンピュータで実現するようにしてもよい。その場合、この機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよく、PLD(Programmable Logic Device)やFPGA(Field Programmable Gate Array)等のハードウェアを用いて実現されるものであってもよい。
以上、図面を参照して本発明の実施の形態を説明してきたが、上記実施の形態は本発明の例示に過ぎず、本発明が上記実施の形態に限定されるものではないことは明らかである。したがって、本発明の技術思想及び範囲を逸脱しない範囲で構成要素の追加、省略、置換、その他の変更を行ってもよい。