以下に本発明の実施の形態を説明するが、特許請求の範囲に記載の発明の各手段および各ステップと以下の実施の形態との対応関係を明らかにするために、各手段および各ステップの後の括弧内に、対応する実施の形態(但し一例)を付加して本発明の特徴を記述すると、次のようになる。但し勿論この記載は、各手段および各ステップを記載したものに限定することを意味するものではない。
請求項1に記載の符号化装置(例えば、図4に記載の符号化装置1)は、ビットレートに関する情報を取得するビットレート情報取得手段(例えば、図4のビットレート情報取得部31)と、ビデオデータを構成するピクチャを量子化する量子化手段(例えば、図4の量子化部15)と、量子化手段によるピクチャの量子化を制御する量子化制御手段(例えば、図4の目標符号量決定部33)と、量子化制御手段により制御された量子化手段により量子化された量子化データを符号化する符号化手段(例えば、図4のVLC部16)とを備え、量子化制御手段は、ビットレート情報取得手段により取得された情報を基に、ビットレートが第1のビットレートから第2のビットレートに変更されたことが検出された場合、第2のビットレートのピクチャの量子化を、第2のビットレートに応じて制御するとともに、第2のビットレートが第1のビットレートよりも高レートである場合、符号化手段により符号化されるピクチャの符号化遅延時間(例えば、τ(1)またはτ(2))をビデオデータの最大符号化遅延時間(例えば、式(1)におけるτ)以下とするように制御することを特徴とする。
請求項2に記載の符号化装置は、量子化制御手段が、符号化遅延時間を算出するために第1のビットレートおよび第2のビットレートを用いるピクチャ(例えば、図7におけるビットレート変更後の1枚目乃至3枚目のピクチャ)に対して、ピクチャの符号化遅延時間が、ビデオデータの最大符号化遅延時間以下となるように制御し、符号化遅延時間を算出するために第2のビットレートのみを用いるピクチャ(例えば、図7におけるビットレート変更後の4枚目のピクチャ)に対して、第2のビットレートに応じて量子化を制御することを特徴とする。
請求項3に記載の符号化装置は、符号化手段により符号化された符号化データをバッファリングするVBVバッファのバッファ占有量に関する情報(例えば、vbv_ocpy(1))を取得するバッファ占有量情報取得手段(例えば、図4のVBVバッファ管理部32)を更に備え、量子化制御手段は、バッファ占有量情報取得手段により取得されたバッファ占有量に関する情報を基に、符号化遅延時間が最大符号化遅延時間よりも短くなるような目標発生符号量(例えば、式(20)のTb(i))を計算し、その計算結果を基に量子化を制御することを特徴とする。
請求項4に記載の符号化装置は、バッファ占有量情報取得手段が、実際の発生符号量(例えば、gen_bit(1))を更に取得し、量子化制御手段により計算された目標発生符号量と、実際の発生符号量とを比較し、実際の発生符号量が目標発生符号量に満たない場合、符号化手段により符号化された符号化データに対するスタッフィングビットに関する情報(例えば、式(14)のstuffing(1))を更に生成することを特徴とする。
請求項5に記載の符号化方法は、ビットレートに関する情報を取得するビットレート情報取得ステップ(例えば、図8のステップS1の処理)と、ビットレート情報取得ステップの処理により取得されたビットレートに関する情報を基に、ビデオデータを構成するピクチャのビットレートが、第1のビットレートから、第1のビットレートより高レートである第2のビットレートに変更されたか否かを判断する判断ステップ(例えば、図8のステップS2の処理)と、判断ステップの処理により、ビットレートが、第1のビットレートから第2のビットレートに変更されたと判断された場合、符号化されるピクチャの符号化遅延時間をビデオデータの最大符号化遅延時間以下とするように、ピクチャの量子化を制御する制御ステップ(例えば、図8のステップS6の処理)とを含むことを特徴とする。
また、請求項6に記載のプログラムにおいても、各ステップが対応する実施の形態(但し一例)は、請求項5に記載の符号化方法と同様である。
請求項7に記載の符号化装置(例えば、図4に記載の符号化装置1)は、ビットレートに関する情報を取得するビットレート情報取得手段(例えば、図4のビットレート情報取得部31)と、ビデオデータを構成するピクチャを量子化する量子化手段(例えば、図4の量子化部15)と、量子化手段によるピクチャの量子化を制御する量子化制御手段(例えば、図4の目標符号量決定部33)と、量子化制御手段により制御された量子化手段により量子化された量子化データを符号化する符号化手段(例えば、図4のVLC部16)とを備え、量子化制御手段は、ビットレート情報取得手段により取得された情報を基に、ビットレートが第1のビットレートから第2のビットレートに変更されたことが検出された場合、第2のビットレートのピクチャの量子化を、第2のビットレートに応じて制御するとともに、第2のビットレートが第1のビットレートよりも高レートである場合、符号化手段により符号化された符号化データをバッファリングするVBVバッファの最大バッファ容量を、符号化手段により符号化されるピクチャの符号化遅延時間をビデオデータの最大符号化遅延時間以下とするVBVバッファの第1のバッファ容量(例えば、式(26)で求められるvbv_size_tmp(j))と、第2のビットレートに応じて定められるVBVバッファの第2のバッファ容量(例えば、式(27)のvbv_size_max(H))とのうちの小さいほうの値に設定して、量子化を制御することを特徴とする。
請求項8に記載の符号化装置は、量子化制御手段が、第1のバッファ容量を、第1のビットレートにおいて対応するピクチャのデコード間隔にVBVバッファに蓄積する第1の符号量(例えば、式(25)のpic_bit(1)、式(26)または式(27)のpic_bit(L))、および、第2のビットレートにおいて対応するピクチャのデコード間隔にVBVバッファに蓄積する第2の符号量(例えば、式(25)のpic_bit(2)、式(26)または式(27)のpic_bit(H))、並びに、1つ前のピクチャが取りうるVBVバッファの最大容量(例えば、式(26)または式(27)のvbv_size_tmp(j-1))を基に算出すことを特徴とする。
請求項9に記載の符号化装置は、符号化手段により符号化された符号化データをバッファリングするVBVバッファのバッファ占有量を制御するバッファ制御手段(例えば、図4のVBVバッファ管理部32)を更に備え、量子化制御手段は、第1のバッファ容量と第2のバッファ容量のうちの小さいほうの値を基に、目標発生符号量を計算して、目標発生符号量を基に量子化を制御し、バッファ制御手段は、実際の発生符号量(例えば、gen_bit(1))を更に取得し、量子化制御手段により計算された目標発生符号量と、実際の発生符号量とを比較し、実際の発生符号量が目標発生符号量に満たない場合、符号化手段により符号化された符号化データに対するスタッフィングビットに関する情報(例えば、stuffing(1))を更に生成することを特徴とする。
請求項10に記載の符号化方法は、ビットレートに関する情報を取得するビットレート情報取得ステップ(例えば、図12のステップS31)と、ビットレート情報取得ステップの処理により取得されたビットレートに関する情報を基に、ビデオデータを構成するピクチャのビットレートが、第1のビットレートから、第1のビットレートより高レートである第2のビットレートに変更されたか否かを判断する判断ステップ(例えば、図12のステップS32)と、判断ステップの処理により、ビットレートが、第1のビットレートから第2のビットレートに変更されたと判断された場合、符号化された符号化データをバッファリングするVBVバッファの最大バッファ容量を、符号化されるピクチャの符号化遅延時間をビデオデータの最大符号化遅延時間以下とするVBVバッファの第1のバッファ容量と、第2のビットレートに応じて定められるVBVバッファの第2のバッファ容量とのうちの小さいほうの値に設定する設定ステップ(例えば、図12のステップS34乃至ステップS37の処理)とを含むことを特徴とする。
また、請求項11に記載のプログラムにおいても、各ステップが対応する実施の形態(但し一例)は、請求項10に記載の符号化方法と同様である。
以下、図を参照して、本発明の実施の形態について説明する。
図4は、本発明を適用した符号化装置1の構成を示すブロック図である。
画像並べ替え部11は、順次入力されるビデオデータの各フレーム画像を、必要に応じて並べ替えたり、16画素×16ラインの輝度信号、および輝度信号に対応する色差信号によって構成されるマクロブロックに分割したマクロブロックデータを生成して、演算部12、および、動き検出部13に供給する。
動き検出部13は、マクロブロックデータの入力を受け、各マクロブロックの動きベクトルを、マクロブロックデータ、および、ビデオメモリ21に記憶されている参照画像データを基に算出し、動きベクトルデータとして、動き補償部20に送出する。
演算部12は、画像並べ替え部11から供給されたマクロブロックデータについて、各マクロブロックの画像タイプに基づいた動き補償を行う。具体的には、演算部12は、Iピクチャに対してはイントラモードで動き補償を行い、Pピクチャに対しては、順方向予測モードで動き補償を行い、Bピクチャに対しては、双方向予測モードで動き補償を行うようになされている。
ここでイントラモードとは、符号化対象となるフレーム画像をそのまま伝送データとする方法であり、順方向予測モードとは、符号化対象となるフレーム画像と過去参照画像との予測残差を伝送データとする方法であり、双方向予測モードとは、符号化対象となるフレーム画像と、過去と将来の参照画像との予測残差を伝送データとする方法である。
まず、マクロブロックデータがIピクチャであった場合、マクロブロックデータはイントラモードで処理される。すなわち、演算部12は、入力されたマクロブロックデータのマクロブロックを、そのまま演算データとしてDCT(Discrete Cosine Transform :離散コサイン変換)部14に送出する。DCT部14は、入力された演算データに対しDCT変換処理を行うことによりDCT係数化し、これをDCT係数データとして、量子化部15に送出する。
量子化部15は、量子化制御部23の目標符号量決定部33から供給される量子化値Qに基づいて、入力されたDCT係数データに対して量子化処理を行い、量子化DCT係数データとしてVLC(Variable Length Code;可変長符号化)部16および逆量子化部17に送出する。ここで、量子化部15は、目標符号量決定部33から供給される量子化値Qに応じて、量子化処理における量子化ステップサイズを調整することにより、発生する符号量を制御するようになされている。
逆量子化部17に送出された量子化DCT係数データは、量子化部15と同じ量子化ステップサイズによる逆量子化処理を受け、DCT係数データとして、IDCT(Inverse Discreet Cosine Transform;逆離散コサイン変換)部18に送出される。IDCT部18は、供給されたDCT係数データに逆DCT処理を施し、生成された演算データは、演算部19に送出され、参照画像データとしてビデオメモリ21に記憶される。
そして、演算部12は、マクロブロックデータがPピクチャであった場合、マクロブロックデータについて、順方向予測モードよる動き補償処理を行い、Bピクチャであった場合、マクロブロックデータについて、双方向予測モードによる動き補償処理を行う。
動き補償部20は、ビデオメモリ21に記憶されている参照画像データを、動きベクトルデータに応じて動き補償し、順方向予測画像データ、または、双方向予測画像データを算出する。演算部12は、マクロブロックデータについて、動き補償部20より供給される順方向予測画像データ、または、双方向予測画像データを用いて減算処理を実行する。
すなわち、順方向予測モードにおいて、動き補償部20は、ビデオメモリ21の読み出しアドレスを、動きベクトルデータに応じてずらすことによって、参照画像データを読み出し、これを順方向予測画像データとして演算部12および演算部19に供給する。演算部12は、供給されたマクロブロックデータから、順方向予測画像データを減算して、予測残差としての差分データを得る。そして、演算部12は、差分データをDCT部14に送出する。
演算部19には、動き補償部20より順方向予測画像データが供給されており、演算部19は、IDCT部18から供給された演算データに、順方向予測画像データを加算することにより、参照画像データを局部再生し、ビデオメモリ21に出力して記憶させる。
また、双方向予測モードにおいて、動き補償部20は、ビデオメモリ21の読み出しアドレスを、動きベクトルデータに応じてずらすことによって、参照画像データを読み出し、これを双方向予測画像データとして演算部12および演算部19に供給する。演算部12は、供給されたマクロブロックデータから、双方向予測画像データを減算して、予測残差としての差分データを得る。そして、演算部12は、差分データをDCT部14に送出する。
演算部19には、動き補償部20より双方向予測画像データが供給されており、演算部19は、IDCT部18から供給された演算データに、双方向予測画像データを加算することにより、参照画像データを局部再生し、ビデオメモリ21に出力して記憶させる。
かくして、符号化装置1に入力された画像データは、動き補償予測処理、DCT処理および量子化処理を受け、量子化DCT係数データとして、VLC部16に供給される。VLC部16は、量子化DCT係数データに対し、所定の変換テーブルに基づく可変長符号化処理を行い、その結果得られる可変長符号化データをバッファ22に送出する。バッファ22は、供給された可変長符号化ストリームを所定の時間バッファリングした後、出力する。
出力された可変長符号化ストリームは、例えば、必要に応じて、オーディオストリームや、他の映像ストリームと多重化されて、所定の処理により、分割されて、ヘッダなどが付加されることによりパケット化され、複数のパケットデータにより構成されるMPEGトランスポートストリームが、所定のデータ伝送路によって、伝送される。
量子化制御部23は、符号化装置1における量子化を制御するものである。ビットレート情報取得部31は、ビットレートの値を示す情報、または、ビットレートが変更されたか否かを示す情報を取得し、VBVバッファ管理部32に供給する。VBVバッファ管理部32は、バッファ22に格納される可変長符号化データの蓄積状態を常時監視しており、蓄積状態を表す占有量情報を目標符号量決定部33に供給するとともに、ビットレート情報取得部31から供給されたビットレート情報に基づいて、ビットレートが低レートから高レートに変更されたか否かを示す情報を目標符号量決定部33に供給する。
また、VBVバッファ管理部32は、実際に発生された符号量が目標符号量に満たない場合、必要に応じて、トランスポートストリームにスタッフィングコードを付加させる(ゼロスタッフィングを行わせる)ためのスタッフィング情報を出力することが可能である。
スタッフィングコードとは、スタートコードの前に配置することが可能な、バイト単位の値が0のデータを意味する。MPEGでは、スタッフィングコードは、デコード時には読み飛ばされるため、復号された画像に影響はないが、VBVバッファの管理上はビットストリームを構成するデータとしてカウントされるため、スタッフィングコードを付加することにより、VBVバッファのオーバーフローを未然に防ぐことができる。
目標符号量決定部33は、ビットレートが低レートから高レートに変更されたか否かに基づいて、VBVバッファ管理部32から供給された占有量情報に基づいて、目標符号量を決定し、目標符号量を発生するための量子化ステップサイズを決定して、量子化部15に供給するようになされている。
図2を用いて説明したように、符号化装置1においては、ビットレートがbit_rate(0)からbit_rate(1)に変更される場合、VBVバッファの最大値は、vbv_size(0)からvbv_size(1)に変更され、ビットレートがbit_rate(1)からbit_rate(0)に変更される場合、VBVバッファの最大値は、vbv_size(1)からvbv_size(0)に変更される。
目標符号量決定部33は、ビットレートが低レートから高レートに変更された場合、レート変更後の遅延時間τ(1)が、最大遅延時間τより大きくなってしまうことがないように、図8を用いて後述する処理により、目標符号量を決定し、目標符号量を発生するための量子化ステップサイズを決定して、量子化部15に供給するようになされている。
また、目標符号量決定部33は、ビットレートが低レートから高レートに変更されていない場合、ビットレートに対応するVBVバッファサイズおよびVBVバッファ管理部32から供給された占有量情報に基づいて、目標発生符号量よりも実際に発生したマクロブロックの発生符号量が多いとき、発生符号量を減らすために量子化ステップサイズを大きくし、また目標発生符号量よりも実際の発生符号量が少ないとき、発生符号量を増やすために量子化ステップサイズを小さくするようになされている。
すなわち、目標符号量決定部33は、デコーダ側に設けられたVBVバッファに格納された可変長符号化データの蓄積状態の推移を想定することにより、仮想バッファのバッファ占有量を求めて、量子化値Qを算出し、これを量子化部15に供給する。
j番目のマクロブロックにおける仮想バッファのバッファ占有量d(j)は、次の式(3)によって表され、また、j+1番目のマクロブロックにおける仮想バッファのバッファ占有量d(j+1)は、次の式(4)によって表され、(3)式から(4)式を減算することにより、j+1番目のマクロブロックにおける仮想バッファのバッファ占有量d(j+1)は、次の式(5)として表される。
d(j)=d(0)+B(j−1)−{T×(j−1)/MBcnt}・・・(3)
ここで、d(0)は初期バッファ容量、B(j)は、j番目のマクロブロックにおける符号化発生ビット数、MBcntは、ピクチャ内のマクロブロック数、そして、Tは、ピクチャ単位の目標発生符号量である。
d(j+1)=d(0)+B(j)−(T×j)/MBcnt・・・(4)
d(j+1)=d(j)+{B(j)−B(j−1)}−T/MBcnt・・・(5)
したがって、目標符号量決定部33は、バッファ占有量d(j+1)、および、式(6)に示される定数rを、式(7)に代入することにより、マクロブロック(j+1)の量子化インデックスデータQ(j+1)を算出し、これを量子化部75に供給する。
r=(2×br)/pr ・・・(6)
Q(j+1)=d(j+1)×(31/r) ・・・(7)
ここで、brは、ビットレートであり、prは、ピクチャレートである。
量子化部15は、量子化値Qに基づいて、次のマクロブロックにおける量子化ステップサイズを決定し、量子化ステップサイズによってDCT係数データを量子化する。
これにより、量子化部15は、1つ前のピクチャにおける実際の発生符号量に基づいて算出された、次のピクチャの目標発生符号量にとって最適な量子化ステップサイズによって、DCT係数データを量子化することができる。
かくして、量子化部15では、バッファ22のデータ占有量に応じて、バッファ22がオーバーフローまたはアンダーフローしないように量子化し得るとともに、デコーダ側のVBVバッファがオーバーフロー、またはアンダーフローしないように量子化した量子化DCT係数データを生成することができる。
図5を用いて、ビットレートが低レートであるbit_rate(1)から、高レートであるbit_rate(0)に変更された場合の発生符号量と遅延時間の関係について説明する。
レート変更直後の遅延時間は、レート変更前後で異なるビットレートを基に求められるので、レート変更時のVBV占有量vbv_ocpy(0)がvbv_size(1)に近く、発生符号量gen_bit(1)が小さい場合、遅延時間τ(1)が、最大遅延時間τより大きくなる場合がある。これに対して、発生符号量gen_bit´(1)を、ある程度大きな値とすることにより、遅延時間τ´(1)を、最大遅延時間τと等しいか、または、最大遅延時間τより小さい値とすることができる。
次に、図6を用いて、レート変更直後の遅延時間τ(1)を、最大遅延時間τと等しいか、または、最大遅延時間τより小さい値とすることができる目標発生符号量について説明する。
ビットレート変更時のVBV占有量をvbv_ocpy(0)、目標発生符号量をTb(1)、bit_rate(1)のときの最大VBVバッファサイズをvbv_size(1)、ビットレート変更後の最初のピクチャのデコード間隔(ビットレート変更前の最後のピクチャのデコードタイミングとビットレート変更後の最初のピクチャのデコードタイミングとの間隔であり、具体的には、2fieldまたは3field時間)をduration(1)とした場合、ビットレート変更時の次のピクチャにおける遅延時間τ(1)は次の式(8)で表すことができる。
τ(1)={(vbv_ocpy(0)−Tb(1))/bit_rate(1)}+duration(1)・・・(8)
シームレスにビットレート変換を行うためには、式(8)において、τ(1)がτ以下になればよい。したがって、次の式(9)および式(9)を変形した式(10)を満たすようにすればよい。
τ≧{(vbv_ocpy(0)−Tb(1))/bit_rate(1)}+duration(1)・・・(9)
bit_rate(1)×τ≧vbv_ocpy(0)−Tb(1)+bit_rate(1)×duration(1)・・・(10)
更に、bit_rate(1)×τはvbv_size(1)であり、デコード間隔duration(1)の間にVBVバッファに蓄積される符号量をpic_bit(1)とした場合、式(10)は式(11)に書き換えられるので、式(12)を満たす符号量を発生するようにすれば、シームレスにビットレートを変換することができる。
vbv_size(1)≧vbv_ocpy(0)−Tb(1)+pic_bit(1)・・・(11)
Tb(1)≧vbv_ocpy(0)+pic_bit(1)−vbv_size(1)・・・(12)
したがって、目標符号量決定部33は、ビットレートが低レートから高レートへ変更される場合、式(12)を満たす目標発生符号量Tb(1)を算出し、目標符号量Tb(1)を発生するための量子化ステップサイズを決定して、量子化部15に供給する
なお、式(12)を満たす目標発生符号量Tb(1)の最小値は、式(12)において、等式が成り立つ場合であるので、Tb(1)の最小値をTb(1)minとしたとき、Tb(1)minは、次の式(13)で示される。
Tb(1)min=vbv_ocpy(0)+pic_bit(1)−vbv_size(1)・・・(13)
そして、目標発生符号量Tb(1)に対して実際に発生した発生符号量をgen_bit(1)とし、発生符号量をgen_bit(1)が目標発生符号量Tb(1)に満たない場合、ゼロスタッフィングなどにより、発生符号量が補われるようにすれば良い。ゼロスタッフィングの符号量stuffing(1)は、次の式(14)で示される。
stuffing(1)=Tb(1)min−gen_bit(1)・・・(14)
更に、レート変更後2枚目のピクチャにおける遅延時間τ(2)を、最大遅延時間τと等しいか、または、最大遅延時間τより小さい値とすることができる目標発生符号量Tb(2)について、図7を用いて説明する。
レート変更直後のピクチャにおいて、実際に発生した符号量をgen_bit(1)とすると、レート変更後2枚目のピクチャにおける遅延時間τ(2)は、レート変更後2枚目のピクチャにおけるデコード間隔(ビットレート変更後の最初のピクチャのデコードタイミングと2枚目のピクチャのデコードタイミングとの間隔であり、具体的には、2fieldまたは3field時間)をduration(2)とすると、次の式(15)で示される。
τ(2)={(vbv_ocpy(0)−gen_bit(1)−Tb(2))/bit_rate(1)}
+duration(1)+duration(2) ・・・(15)
ここで、デコード間隔duration(2)の間にVBVバッファに蓄積される符号量をpic_bit(2)とすると、τ(2)をτ以下とするためには、上述した式(9)乃至式(12)と同様にして、次の式(16)乃至式(19)が導かれる。
τ≧{(vbv_ocpy(0)−gen_bit(1)−Tb(2))/bit_rate(1)}+duration(1)+duration(2) ・・・(16) bit_rate(1)×τ≧vbv_ocpy(0)−gen_bit(1)−Tb(2)
+bit_rate(1)×duration(1)+bit_rate(1)×duration(2)
・・・(17) vbv_size(1)≧vbv_ocpy(0)−gen_bit(1)−Tb(2)+pic_bit(1)+pic_bit(2)
・・・(18) Tb(2)≧vbv_ocpy(0)−gen_bit(1)+pic_bit(1)+pic_bit(2)−vbv_size(1)
・・・(19)
以降、同様にビットレート変更後i枚目のピクチャにおける目標発生符号量Tb(i)は、次の式(20)ように一般化することができる。
また、図7に示される場合、ビットレート変更後3枚目のピクチャにおける遅延時間τ(3)を、最大遅延時間τと等しいか、または、最大遅延時間τより小さい値とするために、ビットレート変換前のビットレートbit_rate(1)およびビットレート変更後のビットレートbit_rate(0)が用いられて目標発生符号量Tb(3)が算出される。これに対して、実際の発生符号量が足りない場合であってもスタッフィングなどが施されるので、実際の遅延時間τ(3)は、ビットレート変換前のビットレートbit_rate(1)の値を用いずに、ビットレート変更後のビットレートbit_rate(0)のみを用いて求めることが可能となる。
したがって、次の4枚目以降のピクチャにおける遅延時間τ(3)を、最大遅延時間τと等しいか、または、最大遅延時間τより小さい値とするための発生符号量の算出においては、ビットレート変換前のビットレートbit_rate(1)の値を用いずに、ビットレート変更後のビットレートbit_rate(0)のみを用いて、発生符号量の演算を行うことができる。ビットレート変更後の何枚目のピクチャにおいて、ビットレート変更後のビットレートのみを用いて遅延時間τ(i)の演算が行われるようになるかは、ビットレートや、ビットレート変更時のVBV占有量vbv_ocpy(0)、ビット発生量などにより異なる。ビットレート変更後のビットレートのみを用いて、遅延時間τ(i)の演算を行うことができるとき、次の式(21)が満たされる。
図8を用いて、遅延時間τ(i)を、最大遅延時間τより小さい値とするために発生符号量を調整する、発生符号量調整処理について説明する。
ステップS1において、ビットレート情報取得部31は、ビットレート情報を取得して、VBVバッファ管理部32に供給する。ビットレート情報は、ビットレートそのものの数値データあっても、ビットレートを示す対応する情報であっても、または、ビットレートが変更されたか否か、および、ビットレートの変更は低レートから高レートへの変更であるか否かを示す情報であっても良い。ビットレート情報取得部31は、外部の装置からビットレート情報を取得するようにしても良いし、ビットレート情報がビデオデータに多重化されている場合、ビデオデータからビットレート情報を抽出するようにしても良い。
ステップS2において、VBVバッファ管理部32は、供給されたビットレート情報を基に、現在のビットレートは、低レートから高レートへ変更された変更後のビットレートであるか否かを判断する。ステップS2において、ビットレートが、低レートから高レートへ変更された変更後のビットレートではないと判断された場合、VBVバッファ管理部32は、ビットレートが低レートから高レートへ変更されていないことを示す情報、および、バッファの占有量情報を、目標符号量決定部33に供給し、処理は、後述するステップS5に進む。
ステップS2において、ビットレートが、低レートから高レートへ変更された変更後のビットレートであると判断された場合、VBVバッファ管理部32は、ビットレートが低レートから高レートへ変更されたことを示す情報、および、バッファの占有量情報を、目標符号量決定部33に供給するので、ステップS3において、目標符号量決定部33は、例えば、式(8)または式(15)などを用いて説明した場合と同様にして、そのピクチャにおける遅延時間τ(i)を計算する。
ステップS4において、目標符号量決定部33は、ステップS3において計算される遅延時間τ(i)は、変更後のビットレートのみを用いて計算可能であるか否か、換言すれば、上述した式(21)が満たされるか否かを判断する。
ステップS2において、ビットレートが、低レートから高レートへ変更された変更後のビットレートではないと判断された場合、または、ステップS4において、遅延時間τ(i)は、変更後のビットレートのみを用いて計算可能であると判断された場合、ステップS5において、目標符号量決定部33は、現在のビットレートに対応するVBVバッファサイズ、ビットレート、バッファ占有量を基に、通常通りの方法で、発生符号量を調整して、処理が終了される。
ステップS4において、遅延時間τ(i)は、変更後のビットレートのみを用いて計算可能ではないと判断された場合、ステップS6において、目標符号量決定部33は、式(20)を用いて説明した目標発生符号量Tb(i)を算出して、遅延時間τ(i)が最大遅延時間τ以下となるように、発生符号量を調整し、処理が終了される。
また、VBVバッファ管理部32は、実際の発生符号量gen_bit(i)が目標発生符号量Tb(i)に満たない場合、式(14)を用いて説明した場合と同様にして、目標発生符号量Tb(i)から発生符号量gen_bit(i)を減算することにより、ゼロスタッフィングの符号量を算出し、発生符号量を補うためのスタッフィング情報を出力する。
このような処理により、ビットレートが、低レートから高レートへ変更された場合のビットレート変更直後の数ピクチャにおいても、符号化遅延時間τ(i)が最大遅延時間τ以下となるように、発生符号量を制御することが可能となる。
しかしながら、図6乃至図8を用いて説明した発生符号量調整処理に必要な演算処理は、式(8)乃至式(21)を用いて説明したように、非常に複雑なものとなる。そのため、例えば、ビットレートが徐々に高くなるようにビットレートの変更が頻繁に行われる場合などでは、図8を用いて説明した処理により発生符号量を制御することが困難となる。
そこで、目標符号量決定部33は、ビットレートが低レートから高レートに変更された場合、図6乃至図8を用いて説明した処理に代わって、レート変更後の遅延時間τ(j)が、最大遅延時間τより大きくなってしまうことがないようなVBVバッファサイズを簡単な計算により求め、求められたVBVバッファサイズをオーバーフローしないように発生符号量を調整する処理を行うようにしてもよい。
図9を用いて、レート変更後の遅延時間τ(1)が、最大遅延時間τより大きくなってしまうことがないようなVBVバッファサイズについて説明する。
変更前のビットレートbit_rate(1)でのVBVバッファ最大値がvbv_size(1)のときの最大遅延時間τよりも、ビットレート変更後の最初のピクチャにおける遅延時間τ(1)が小さくなるためには、図中t(1)で示される時間幅が、ビットレート変更後の最初のピクチャのデコード間隔duration(1)と等しいか、または、長ければよい。換言すれば、最大遅延時間τよりも遅延時間τ(1)が小さくなるための発生符号量gen_bit(1)は、変更前のビットレートbit_rate(1)で、デコード間隔duration(1)と等しい時間t(1)にデコードされる符号量と等しいか、または、多ければよいので、次の式(22)が満たされていれば良い。
bit_rate(1)×duration(1)≦gen_bit(1)・・・(22)
したがって、式(22)を満たす符号発生量gen_bit(1)であれば、シームレスにビットレートを変換することができるので、図9に示されるバッファ占有量vbv_ocpy(1)を、VBVバッファサイズの最大値vbv_size_tmp(1)として、通常行っているVBVバッファ管理処理を行えばよいことがわかる。VBVバッファ最大値として用いられるvbv_size_tmp(1)は次の式(23)で計算できる。
vbv_size_tmp(1)=vbv_size(1)−bit_rate(1)×duration(1)
+bit_rate(0)×duration(1) ・・・(23)
ただし、VBVバッファ最大値は、もちろん、レートにより決まるVBVバッファ最大値vbv_size(0)以上の値をとることはできないので、式(23)により求められるvbv_size_tmp(1)がvbv_size(0)より大きい値である場合、VBVバッファ最大値はvbv_size(0)として制御されるものとする。
そして、図10に示されるように、ビットレート変更直後の1枚目のピクチャのVBVバッファ最大値vbv_size_tmp(1)に対して、2枚目のピクチャのVBVバッファ最大値vbv_size_tmp(2)は、次の式(24)で示される。
vbv_size_tmp(2)=vbv_size_tmp(1)−bit_rate(1)×duration(2)
+bit_rate(0)×duration(2) ・・・(24)
ここで、デコード間隔duration(2)は、2枚目のピクチャにおけるデコード間隔である。ただし、VBVバッファ最大値は、もちろん、レートにより決まるVBVバッファ最大値vbv_size(0)以上の値をとることはできないので、式(24)により求められるvbv_size_tmp(2)がvbv_size(0)より大きい値である場合、VBVバッファ最大値はvbv_size(0)として制御されるものとする。
また、ビットレートが、短時間に複数回変更される場合であっても、図9および図10を用いて説明した場合と同様にして、VBVバッファの最大値を求めることが可能である。
例えば、図11に示されるように、bit_rate(1)から、bit_rate(2)、bit_rate(0)と、ピクチャ単位でビットレートが順次高くなる場合(すなわち、bit_rate(1)<bit_rate(2)<bit_rate(0)である場合)を例として説明する。
2枚目のピクチャのVBVバッファ最大値vbv_size_tmp(2)は、変更直前のビットレートであるbit_rate(2)で2枚目のピクチャにおけるデコード間隔duration(2)中にVBVバッファに蓄積される符号量をpic_bit(1)、bit_rate(0)でデコード間隔duration(2)中にVBVバッファに蓄積される符号量をpic_bit(2)とすると、次の式(25)で示される。
vbv_size_tmp(2)=vbv_size_tmp(1)−pic_bit(1)+pic_bit(2)・・・(25)
pic_bit(2)は、pic_bit(1)よりも大きく、図中t(2)で示される時間は、デコード間隔duration(2)よりも長くなることから、2枚目のピクチャにおける遅延時間τ(2)は、最大遅延時間τと等しいか短い遅延時間τ(1)よりも更に短くなるので、bit_rate(1)<bit_rate(2)<bit_rate(0)としてピクチャ単位でビットレートが順次高くなる場合であっても、式(25)が満たされる場合には、シームレスにビットレート変換が行われる。
式(25)から、j番目のピクチャにおけるVBVバッファ最大値vbv_size_tmp(j)は、次の式(26)で示される。
vbv_size_tmp(j)=vbv_size_tmp(j-1)−pic_bit(L)+pic_bit(H)・・・(26)
ただし、pic_bit(L)は、直近の変更前ビットレートで対応するピクチャのデコード間隔分の時間に蓄積される符号化ビット量であり、pic_bit(H)は、変更後のビットレートで対応するピクチャのデコード間隔分の時間に蓄積される符号化ビット量である。
τ(2)はτ(1)(≦τ)よりも更に短くなるため、VBVバッファの最大値は、必要以上に小さくなってしまうが、この演算方法によれば、高いレートへのレート変更を連続して行っても、式(26)により、現在および直前のビットレートを用いて演算することにより、シームレスビットレート変更の条件を満たすことができる。
ただし、VBVバッファ最大値は、もちろん、そのピクチャのビットレートにより決まるVBVバッファ最大値vbv_size_max(H)以上の値をとることはできない。例えば、図10を用いて説明した場合のように、vbv_size(0)がピクチャのビットレートにより決まるVBVバッファ最大値vbv_size_max(H)に対応する場合、VBVバッファ最大値は、図10において図中Cで示されるようなvbv_size(0)よりも大きな値となることはありえない。したがって、j番目のピクチャにおけるVBVバッファ最大値vbv_size_tmp(j)は、その直前のピクチャにおけるVBVバッファ最大値をvbv_size_tmp(j−1)とした場合、次の式(27)で求められる。
vbv_size_tmp(j)=
min{vbv_size_tmp(j-1)−pic_bit(L)+pic_bit(H),vbv_size_max(H)}
・・・(27)
ここで、vbv_size_max(H)は、変更後のビットレートにおいて使用可能なVBVバッファ最大値であり、min{A,B}は、AとBのうちの小さい値が選択されることを示す。
このような処理により、図6乃至図8を用いて説明した場合よりも、簡単な演算で、シームレスビットレート変更の条件を満たすための制御を行うことが可能となる。
次に、図12のフローチャートを参照して、シームレスなビットレート変更を行うためのバッファサイズ調整処理について説明する。
ステップS31において、ビットレート情報取得部31は、ビットレート情報を取得して、VBVバッファ管理部32に供給する。ビットレート情報は、ビットレートそのものの数値データあっても、ビットレートを示す対応する情報であっても、または、ビットレートが変更されたか否か、および、ビットレートの変更は低レートから高レートへの変更であるか否かを示す情報であっても良い。ビットレート情報取得部31は、外部の装置からビットレート情報を取得するようにしても良いし、ビットレート情報がビデオデータに多重化されている場合、ビデオデータからビットレート情報を抽出するようにしても良い。
ステップS32において、VBVバッファ管理部32は、供給されたビットレート情報を基に、現在のビットレートが、低レートから高レートへ変更された変更後のビットレートであるか否かを判断する。ステップS32において、ビットレートが、低レートから高レートへ変更された変更後のビットレートではないと判断された場合、VBVバッファ管理部32は、ビットレートが低レートから高レートへ変更されていないことを示す情報、および、バッファの占有量情報を、目標符号量決定部33に供給するので、ステップS33において、目標符号量決定部33は、通常通りのVBVバッファサイズの最大値を設定して、レート制御を実行して、処理が終了される。
ステップS32において、ビットレートが、低レートから高レートへ変更された変更後のビットレートであると判断された場合、VBVバッファ管理部32は、ビットレートが低レートから高レートへ変更されたことを示す情報、および、バッファの占有量情報を、目標符号量決定部33に供給するので、ステップS34において、目標符号量決定部33は、上述した式(26)により、このピクチャにおけるバッファサイズの最大値vbv_size_tmp(j)を計算する。
ステップS35において、目標符号量決定部33は、ステップS34で計算されたvbv_size_tmp(j)がビットレート変更後のVBVバッファサイズの最大値vbv_size_max(H)より大きいか否かを判断する。
ステップS35において、vbv_size_tmp(j)がビットレート変更後のVBVバッファサイズの最大値vbv_size_max(H)より大きいと判断された場合、ステップS36において、目標符号量決定部33は、ビットレート変更後のVBVバッファサイズの最大値vbv_size_max(H)をバッファサイズの最大値に設定してレート制御を行い、VBVバッファ管理部32は、目標符号発生量と、実際の符号発生量を比較して、必要に応じて、ゼロスタッフィングを行わせるためのスタッフィング情報を生成して、処理が終了される。
ステップS35において、vbv_size_tmp(j)がビットレート変更後のVBVバッファサイズの最大値vbv_size_max(H)より大きくないと判断された場合、ステップS37において、目標符号量決定部33は、vbv_size_tmp(j)をバッファサイズの最大値に設定してレート制御を行い、VBVバッファ管理部32は、目標符号発生量と、実際の符号発生量を比較して、必要に応じて、ゼロスタッフィングを行わせるためのスタッフィング情報を生成して、処理が終了される。
すなわち、ステップS34乃至ステップS37の処理は、式(27)の演算に他ならない。
このような処理により、低ビットレートから高ビットレートにビットレートが変更される場合、図6乃至図8を用いて説明した場合と同様にして、ビットレート変更直後のピクチャにおける遅延時間が最大遅延時間より大きくならないようなレート制御を行うことができる。特に、低ビットレートから高ビットレートへ頻繁にビットレートが変更される場合であっても、簡単な演算処理で、シームレスビットレート変更条件を満たすような符号化処理が行われるように、レート制御を行うことが可能となる。
また、本発明は、例えば、15フレームを、フレーム内符号化画像(Iピクチャ)、フレーム間順方向予測符号化画像(Pピクチャ)、もしくは、双方向予測符号化画像(Bピクチャ)の3つの画像タイプのうちのいずれの画像タイプとして処理するかを指定し、指定されたフレーム画像の画像タイプ(Iピクチャ、Pピクチャ、もしくは、Bピクチャ)に応じて、フレーム画像を符号化するような場合以外にも、ローディレイコーディングとして各フレーム画像を全てPピクチャとし、例えば、横45マクロブロック、縦24マクロブロックの画枠サイズの中でフレーム画像の上段から縦2マクロブロックおよび横45マクロブロック分の領域を1つのイントラスライス部分、他を全てインタースライス部分として設定するようにした場合にも適用可能である。また、ローディレイエンコードを行う場合においては、例えば、イントラスライス部分を縦1マクロブロック、横45マクロブロック分の領域とするなど、他の種々の大きさの領域で形成するようにしても良い。
更に、本発明は、マクロブロックごとに予測符号化のタイプ(イントラマクロブロック、または、インターマクロブロック)を指定して符号化処理を行うような場合や、オールイントラなどの符号化を行う場合においても、適用することが可能である。
更に、上述の実施の形態においては、本発明を、MPEG方式によって圧縮符号化する符号化装置としての符号化装置1に適用する場合について述べたが、本発明はこれに限らず、他の種々の画像圧縮方式による符号化装置に適用するようにしても良い。
また、独立した装置として構成される符号化装置1のみならず、例えば、トランスコーダや編集装置などに含まれる、同様の構成を有する符号化部おいても、本発明は適用可能である。
上述した一連の処理は、ハードウエアにより実行させることもできるが、ソフトウエアにより実行させることもできる。この場合、例えば、符号化装置1が実行する処理は、図13に示されるようなパーソナルコンピュータ101により構成される。
図13において、CPU(Central Processing Unit)111は、ROM(Read Only Memory)112に記憶されているプログラム、または記憶部118からRAM(Random Access Memory)113にロードされたプログラムに従って、各種の処理を実行する。RAM113にはまた、CPU111が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU111、ROM112、およびRAM113は、バス114を介して相互に接続されている。このバス114にはまた、入出力インタフェース115も接続されている。
入出力インタフェース115には、キーボード、マウスなどよりなる入力部116、ディスプレイやスピーカなどよりなる出力部117、ハードディスクなどより構成される記憶部118、モデム、ターミナルアダプタなどより構成される通信部119が接続されている。通信部119は、インターネットを含むネットワークを介しての通信処理を行う。
入出力インタフェース115にはまた、必要に応じてドライブ120が接続され、磁気ディスク121、光ディスク122、光磁気ディスク123、もしくは、半導体メモリ124などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部118にインストールされる。
一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、ネットワークや記録媒体からインストールされる。
この記録媒体は、図13に示されるように、装置本体とは別に、ユーザにプログラムを供給するために配布される、プログラムが記憶されている磁気ディスク121(フロッピディスクを含む)、光ディスク122(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク123(MD(Mini-Disk)(商標)を含む)、もしくは半導体メモリ124などよりなるパッケージメディアにより構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに供給される、プログラムが記憶されているROM112や、記憶部118に含まれるハードディスクなどで構成される。
なお、本明細書において、プログラムを記述するステップは、含む順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的もしくは個別に実行される処理をも含むものである。
1 符号化装置, 11 画像並べ替え部, 12 演算部, 13 動き検出部, 14 DCT部, 15 量子化部, 16 VLC部, 17 逆量子化部, 18 IDCT部, 19 演算部, 20 動き補償部, 21 ビデオメモリ, 22 バッファ, 23 量子化制御部, 31 ビットレート情報取得部, 32 VBVバッファ管理部, 33 目標符号量決定部