(57)【要約】【課題】フレームよりも短い単位で適切に符号量制御を行うことができる動画像符号化装置、符号化量制御方法およびプログラムを実現する。【解決手段】動画像符号化装置１０００は、符号化部１と、量子化パラメータ決定部２と、目標符号量設定部３とを備える。目標符号量設定部は、マクロブロック数を指定することで、当該マクロブロック数のマクロブロックに割り当てる符号量を目標符号量に設定する。量子化パラメータ決定部は、マクロブロックごとに、動き推定処理で用いられたＳＡＴＤ値に基づいて、現マクロブロックを量子化処理するための量子化パラメータを算出する。動画像符号化装置１０００は、算出された量子化パラメータ値により量子化処理を行う。【選択図】図１
2014135720.tif 000002
【特許請求の範囲】
【請求項１】
複数のマクロブロックからなるフレーム画像を形成することができる動画像信号を符号化するとともに、前記動画像信号を符号化する際に発生する符号化量を制御する動画像符号化装置であって、
マクロブロック数を指定することで、当該マクロブロック数のマクロブロックに割り当てる符号量を目標符号量に設定する目標符号量設定部と、
前記動画像を符号化するときの量子化処理に用いられる量子化パラメータ値を決定する量子化パラメータ決定部と、
前記動画像信号に対して、符号化処理を行う符号化部であって、前記量子化パラメータ決定部により決定された量子化パラメータ値を用いて、前記動画像信号に対して量子化処理を行う、符号化部と、
を備え、
前記符号化部は、
過去のフレーム画像を記憶する記憶部と、
前記記憶部に記憶されている過去のフレーム画像の中から参照用フレーム画像を抽出し、処理対象のマクロブロックである現マクロブロックについて、前記参照用フレーム画像上の前記マクロブロックと同じ大きさの画像領域との差分をとることにより差分画像を取得し、取得した当該差分画像のＳＡＴＤ値を取得し、取得した当該ＳＡＴＤ値に基づいて、動きベクトルを導出する動き推定部と、
を備え、
前記量子化パラメータ決定部は、前記動き推定部により取得された現マクロブロックのＳＡＴＤ値に基づいて、前記量子化パラメータ値を決定する、
動画像符号化装置。
【請求項２】
前記目標符号量設定部は、２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量ｔａｒｇｅｔＢｉｔとして設定し、
前記量子化パラメータ決定部は、
Ｎ１個（Ｎ１：自然数）のマクロブロックのＳＡＴＤ値を記憶することができ、前記動き推定部により導出された現マクロブロックのＳＡＴＤ値を記憶するＳＡＴＤ値用ＦＩＦＯ部と、
Ｎ１個（Ｎ１：自然数）のマクロブロックごとの符号量を記憶することができ、現マクロブロックから１つ前のマクロブロックを符号化したときの発生符号量を記憶する符号量用ＦＩＦＯ部と、
前記ＳＡＴＤ値用ＦＩＦＯ部から、現マクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値とを取得し、当該過去ｋ１個のマクロブロックのＳＡＴＤ値の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出し、
前記符号量用ＦＩＦＯ部から、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を取得し、当該過去ｋ１個のマクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔと、当該過去ｋ１個のマクロブロックに割り当てられた符号量の合計値ｕｓｅｄＢｉｔを算出し、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出するカレント符号量算出部と、
前記符号量用ＦＩＦＯ部から、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得し、取得した符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、前記符号化部の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量を算出するＱＰ中央値換算符号量算出部と、
ＱＰ中央値換算符号量算出部により算出された、現マクロブロックの１つ前のマクロブロックの符号量の換算符号量と、前記カレント符号量算出部により算出された現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとに基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出するＱＰ算出部と、
を備える、
請求項１に記載の動画像符号化装置。
【請求項３】
前記量子化パラメータ決定部は、
前記ＱＰ中央値換算符号量算出部により算出された、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔのＱＰ中央値換算符号量ｂｉｔＱＰ２６に対して、ＩＩＲフィルタ処理を行ったＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６を取得するＩＩＲフィルタ部をさらに備え、
前記ＱＰ算出部は、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する、
請求項２に記載の動画像符号化装置。
【請求項４】
前記ＱＰ中央値換算符号量算出部は、
現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、前記符号化部の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量に換算する符号量換算部と、
Ｎ３個（Ｎ３：自然数）のイントラマクロブロックのＱＰ中央値換算符号量を記憶することができ、現マクロブロックの１つ前のマクロブロックがイントラマクロブロックである場合、前記符号量換算部により換算された換算符号量を記憶するイントラＭＢ用ＦＩＦＯ部と、
Ｎ４個（Ｎ４：自然数）のインターマクロブロックのＱＰ中央値換算符号量を記憶することができ、現マクロブロックの１つ前のマクロブロックがインターマクロブロックである場合、前記符号量換算部により換算された換算符号量を記憶するインターＭＢ用ＦＩＦＯ部と、
前記イントラＭＢ用ＦＩＦＯ部に記憶されているＮ３個のイントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）を算出する第１平均値算出部と、
前記インターＭＢ用ＦＩＦＯ部に記憶されているＮ４個のインターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）を算出する第２平均値算出部と、
を備え、
前記ＱＰ算出部は、
（１）現マクロブロックがイントラマクロブロックである場合、前記イントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）に基づいて、前記現マクロブロックを符号化する際の前記量子化パラメータ値を算出し、
（２）現マクロブロックがインターマクロブロックである場合、前記インターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）に基づいて、前記現マクロブロックを符号化する際の前記量子化パラメータ値を算出する、
請求項２に記載の動画像符号化装置。
【請求項５】
前記ＱＰ算出部は、
（１）現マクロブロックがイントラマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６（１））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、前記現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出し、
（２）現マクロブロックがインターマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６（０））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、前記現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する、
請求項４に記載の動画像符号化装置。
【請求項６】
前記量子化パラメータ決定部は、
前記目標符号量ｔａｒｇｅｔＢｉｔから、１マクロブロックあたりの目標符号量ＩｄｅａｌＭＢＢｉｔを取得するデータ変換部と、
前記現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、前記目標符号量ＩｄｅａｌＭＢＢｉｔから、
ｓｕｍ＿ｄｉｆｆ＝ｓｕｍ＿ｄｉｆｆ＋（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）
に相当する処理により、実際に発生した符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆを取得する積分処理部と、
前記積算値ｓｕｍ＿ｄｉｆｆに基づいて、前記カレント符号量算出部により算出された前記現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを補正するカレント符号量補正部と、
をさらに備え、
前記ＱＰ算出部は、
前記カレント符号量補正部により補正された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔに基づいて、前記現マクロブロックを符号化する際の量子化パラメータ値を算出する、
請求項４又は５に記載の動画像符号化装置。
【請求項７】
前記カレント符号量補正部は、
前記カレント符号量算出部により算出された前記現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０としたとき、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０＋｛ｓｕｍ＿ｄｉｆｆ／（ｋ１×２）｝
に相当する処理により、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１を取得し、
前記ＱＰ算出部は、
前記カレント符号量補正部により取得された補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１に基づいて、
（１）現マクロブロックがイントラマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１／ｐｒｅｄＢｉｔＱＰ２６（１））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、前記現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出し、
（２）現マクロブロックがインターマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１／ｐｒｅｄＢｉｔＱＰ２６（０））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、前記現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する、
請求項６に記載の動画像符号化装置。
【請求項８】
前記ＱＰ中央値換算符号量算出部は、過去の所定期間内におけるイントラマクロブロックの出現数ｉｎｔｒａＮｕｍを取得し、
前記カレント符号量補正部は、現マクロブロックがイントラマクロブロックであり、かつ、前記過去の所定期間内におけるイントラマクロブロックの出現数ｉｎｔｒａＮｕｍが所定の閾値以下である場合、加算する符号量をａｄｄ１（＞０）として、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１＋ａｄｄ１
に相当する処理により、前記符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを補正し、
前記ＱＰ算出部は、前記カレント符号量補正部により補正された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔに基づいて、前記現マクロブロックを符号化する際の量子化パラメータ値を算出する、
請求項６又は７に記載の動画像符号化装置。
【請求項９】
複数のマクロブロックからなるフレーム画像を形成することができる動画像信号を符号化する際に発生する符号化量を制御するための符号化量制御方法であって、
２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量ｔａｒｇｅｔＢｉｔとして設定する目標符号量設定ステップと、
動き推定処理において、現マクロブロックと参照フレーム画像との対応画像領域との差分画像から算出されたＳＡＴＤ値を取得するＳＡＴＤ値取得ステップと、
現マクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値とを取得し、当該過去ｋ１個のマクロブロックのＳＡＴＤ値の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出し、
過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を取得し、当該過去ｋ１個のマクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔと、当該過去ｋ１個のマクロブロックに割り当てられた符号量の合計値ｕｓｅｄＢｉｔを算出し、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出するカレント符号量算出ステップと、
現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得し、取得した符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、前記動画像信号を符号化する際の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量ｂｉｔＱＰ２６を算出するＱＰ中央値換算符号量算出ステップと、
前記ＱＰ中央値換算符号量算出ステップにより算出された、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔのＱＰ中央値換算符号量ｂｉｔＱＰ２６に対して、ＩＩＲフィルタ処理を行ったＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６を取得するＩＩＲフィルタステップと、
現マクロブロックを符号化する際の量子化パラメータ値ＱＰを、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、算出する量子化パラメータ決定ステップと、
を備える符号化量制御方法。
【請求項１０】
複数のマクロブロックからなるフレーム画像を形成することができる動画像信号を符号化する際に発生する符号化量を制御するための符号化量制御方法であって、
２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量ｔａｒｇｅｔＢｉｔとして設定する目標符号量設定ステップと、
動き推定処理において、現マクロブロックと参照フレーム画像との対応画像領域との差分画像から算出されたＳＡＴＤ値を取得するＳＡＴＤ値取得ステップと、
現マクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値とを取得し、当該過去ｋ１個のマクロブロックのＳＡＴＤ値の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出し、
過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を取得し、当該過去ｋ１個のマクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔと、当該過去ｋ１個のマクロブロックに割り当てられた符号量の合計値ｕｓｅｄＢｉｔを算出し、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出するカレント符号量算出ステップと、
現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、前記動画像信号を符号化する際の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量に換算する符号量換算ステップと、
現マクロブロックの１つ前のマクロブロックがイントラマクロブロックである場合、前記符号量換算ステップにより換算された換算符号量を記憶するイントラＭＢ用記憶ステップと、
現マクロブロックの１つ前のマクロブロックがインターマクロブロックである場合、前記符号量換算ステップにより換算された換算符号量を記憶するインターＭＢ用記憶ステップと、
前記イントラＭＢ用記憶ステップで記憶されたイントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）を算出する第１平均値算出ステップと、
前記インターＭＢ用記憶ステップで記憶されたインターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）を算出する第２平均値算出ステップと、
（１）現マクロブロックがイントラマクロブロックである場合、前記イントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）に基づいて、前記現マクロブロックを符号化する際の量子化パラメータ値を算出し、
（２）現マクロブロックがインターマクロブロックである場合、前記インターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）に基づいて、前記現マクロブロックを符号化する際の量子化パラメータ値を算出する、ＱＰ算出ステップと、
を備える符号化量制御方法。
【請求項１１】
請求項９または１０に記載の符号化量制御方法を、コンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動画像（映像）を符号化し、動画像（映像）圧縮処理を行う技術に関する。特に、動画像（映像）圧縮処理を行う場合の符号量を制御する技術に関する。
【背景技術】
【０００２】
動画像（映像）圧縮処理を行う場合の符号量の制御は、ある程度長い期間において実行されるのが一般的であり、例えば、ＧＯＰ（Ｇｒｏｕｐ  Ｏｆ  Ｐｉｃｔｕｒｅ）単位またはフレーム単位で符号量制御が実行される。例えば、フレーム単位の符号量制御では、フレームごとに割り当てられる符号量が設定され、各フレーム内において、設定された符号量を超えないように発生符号量が制御される。例えば、フレーム内の各マクロブロックの量子化パラメータを調整することで、設定された符号量を超えないように発生符号量が制御される。
【０００３】
ＧＯＰ単位またはフレーム単位で符号量制御が実行される場合、符号量調整期間が長いため、符号量のピーク値として比較的大きな値が許容されるため、画質の向上を図ることができる。しかしながら、動画像（映像）圧縮処理では、符号量調整期間を長くする程、遅延時間が長くなるので、動画像をリアルタイム伝送する場合等の遅延制限が厳しい状況下では、できる限り、短い符号量調整期間により符号量制御が実行されることが要請される。
【０００４】
そこで、特許文献１には、フレーム単位より短い単位、すなわち、１フレーム内に含まれるマクロブロックの総数未満の所定数のマクロブロックあたりの目標符号量を設定し、符号量制御する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−１４６８８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の技術では、現マクロブロック（処理対象中のマクロブロック）の動き探索処理によって得られた予測誤差のＳＡＤ値（Ｓｕｍ  ｏｆ  Ｄｉｆｆｅｒｅｎｃｅ）に基づいて、閾値処理により量子化パラメータ値を調整するため、適切に符号量制御ができない場合がある。現マクロブロックの動き探索処理によって得られた予測誤差のＳＡＤ値は、現マクロブロックと比較対象マクロブロックとの間の差分値を単純に合計したものであるため、当該差分値のばらつきや周波数成分のばらつきを考慮した値とならず、発生符号量との相関が低い。このため、現マクロブロック（処理対象中のマクロブロック）の動き探索処理によって得られた予測誤差のＳＡＤ値（Ｓｕｍ  ｏｆ  Ａｂｓｏｌｕｔｅ  Ｄｉｆｆｅｒｅｎｃｅ）に基づいて、量子化パラメータ値を調整すると、実際の発生符号量とのずれが大きくなり、適切に符号量制御を行うことができない場合が発生する。また、特許文献１の技術では、閾値処理により量子化パラメータ値を調整するため、設定された閾値によって、適切に符号量制御ができない場合がある。
【０００７】
そこで、本発明は、フレームよりも短い単位で適切に符号量制御を行うことができる動画像符号化装置、符号化量制御方法およびプログラムを実現することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、第１の発明は、複数のマクロブロックからなるフレーム画像を形成することができる動画像信号を符号化するとともに、動画像信号を符号化する際に発生する符号化量を制御する動画像符号化装置であって、目標符号量設定部と、量子化パラメータ決定部と、符号化部と、記憶部と、動き推定部と、を備える。
【０００９】
目標符号量設定部は、マクロブロック数を指定することで、当該マクロブロック数のマクロブロックに割り当てる符号量を目標符号量に設定する。
【００１０】
量子化パラメータ決定部は、動画像を符号化するときの量子化処理に用いられる量子化パラメータ値を決定する。
【００１１】
符号化部は、動画像信号に対して、符号化処理を行う。また、符号化部は、量子化パラメータ決定部により決定された量子化パラメータ値を用いて、動画像信号に対して量子化処理を行う。
【００１２】
符号化部は、記憶部と、動き推定部とを備える。
【００１３】
記憶部は、過去のフレーム画像を記憶する。
【００１４】
動き推定部は、記憶部に記憶されている過去のフレーム画像の中から参照用フレーム画像を抽出し、処理対象のマクロブロックである現マクロブロックについて、参照用フレーム画像上のマクロブロックと同じ大きさの画像領域との差分をとることにより差分画像を取得し、取得した当該差分画像のＳＡＴＤ値を取得し、取得した当該ＳＡＴＤ値に基づいて、動きベクトルを導出する。
【００１５】
量子化パラメータ決定部は、動き推定部により取得された現マクロブロックのＳＡＴＤ値に基づいて、量子化パラメータ値を決定する。
【００１６】
この動画像符号化装置では、現マクロブロックに対して、動き推定処理で取得されたＳＡＴＤ値を用いて、量子化パラメータ値を決定する。現マクロブロックの動き推定処理で取得されたＳＡＴＤ値は、現マクロブロックを実際に符号化処理したときの発生符号量と高い相関があるため、当該ＳＡＴＤ値を用いて量子化パラメータを決定すると、適切に符号量制御を行うことができる。つまり、この動画像符号化装置では、マクロブロック数を指定することで、当該マクロブロック数のマクロブロックに割り当てる符号量を目標符号量に設定し、マクロブロックごとに、発生符号量と相関の高いＳＡＴＤ値に基づいて、量子化パラメータ値を決定する。したがって、この動画像符号化装置では、フレームよりも短い単位で適切に符号量制御を行うことができる。また、この動画像符号化装置では、算出により量子化パラメータ値を決定するので、閾値処理等を行う必要もない。
【００１７】
第２の発明は、第１の発明であって、目標符号量設定部は、２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量ｔａｒｇｅｔＢｉｔとして設定する。
【００１８】
量子化パラメータ決定部は、ＳＡＴＤ値用ＦＩＦＯ部と、符号量用ＦＩＦＯ部と、カレント符号量算出部と、ＱＰ中央値換算符号量算出部と、ＱＰ算出部と、を備える。
【００１９】
ＳＡＴＤ値用ＦＩＦＯ部は、Ｎ１個（Ｎ１：自然数）のマクロブロックのＳＡＴＤ値を記憶することができ、動き推定部により導出された現マクロブロックのＳＡＴＤ値を記憶する。
【００２０】
符号量用ＦＩＦＯ部は、Ｎ１個（Ｎ１：自然数）のマクロブロックごとの符号量を記憶することができ、現マクロブロックから１つ前のマクロブロックを符号化したときの発生符号量を記憶する。
【００２１】
カレント符号量算出部は、
（１）ＳＡＴＤ値用ＦＩＦＯ部から、現マクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値とを取得し、当該過去ｋ１個のマクロブロックのＳＡＴＤ値の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出し、
（２）符号量用ＦＩＦＯ部から、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を取得し、当該過去ｋ１個のマクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔと、当該過去ｋ１個のマクロブロックに割り当てられた符号量の合計値ｕｓｅｄＢｉｔを算出し、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する。
【００２２】
ＱＰ中央値換算符号量算出部は、符号量用ＦＩＦＯ部から、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得し、取得した符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、符号化部１の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量を算出する。
【００２３】
ＱＰ算出部は、ＱＰ中央値換算符号量算出部により算出された、現マクロブロックの１つ前のマクロブロックの符号量の換算符号量と、カレント符号量算出部により算出された現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとに基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出する。
【００２４】
この動画像符号化装置では、２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量と設定し、過去ｋ１個のマクロブロックの符号量およびＳＡＴＤ値を用いて、現マクロブロックへの割り当て符号量を精度良く算出することができる。また、この動画像符号化装置では、現マクロブロックから１つ前のマクロブロックの発生符号量を、量子化パラメータ値のとりうる範囲の略中央値で量子化した場合の換算符号量を算出し、算出した当該換算符号量と、過去ｋ１個のマクロブロックの符号量およびＳＡＴＤ値を用いて算出した現マクロブロックへの割り当て符号量との関係に基づいて、現マクロブロックを量子化する際の量子化パラメータ値を算出する。
【００２５】
したがって、この動画像符号化装置では、フレームよりも短い単位で適切に符号量制御を行うことができる。また、この動画像符号化装置では、算出により量子化パラメータ値を決定するので、閾値処理等を行う必要もない。
【００２６】
第３の発明は、第１または第２の発明であって、量子化パラメータ決定部は、ＱＰ中央値換算符号量算出部により算出された、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔのＱＰ中央値換算符号量ｂｉｔＱＰ２６に対して、ＩＩＲフィルタ処理を行ったＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６を取得するＩＩＲフィルタ部をさらに備える。
【００２７】
そして、ＱＰ算出部は、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する。
【００２８】
この動画像符号化装置では、所定のマクロブロック数を単位として目標符号量（例えば、２×ｋ１個のマクロブロックに割り当てる符号量）ｔａｒｇｅｔＢｉｔを設定し、過去ｋ１個のマクロブロックに割り当てられた符号量と、発生符号量と相関の高いＳＡＴＤ値の変化の状況に応じて、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
により算出する。
【００２９】
さらに、この動画像符号化装置では、現マクロブロックの１つ前のマクロブロックに割り当てられた符号量をＱＰ値の中央値で符号化した場合の換算符号量（ＩＩＲフィルタ処理を行った後の換算符号量）ｐｒｅｄＢｉｔＱＰ２６と現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比（大小関係）に応じて、現マクロブロックに対して量子化処理を実行する際の量子化パラメータ値ＱＰを、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の中央値（例えば、ＱＰ値が０〜５１をとる場合、「２６」に設定される。）
により決定する。つまり、この動画像符号化装置では、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、発生符号量と相関の高いＳＡＴＤ値を用いて決定（推測）しているので、現マクロブロックを符号化するときに実際に発生する符号量と現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの誤差を小さくすることができる。そして、この動画像符号化装置では、予測精度の高い、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、現マクロブロックの１つ前のマクロブロックに割り当てられた符号量をＱＰ値の中央値で符号化した場合の換算符号量（ＩＩＲフィルタ処理を行った後の換算符号量）ｐｒｅｄＢｉｔＱＰ２６と現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比（大小関係）に応じて、現マクロブロックに対して量子化処理を実行する際の量子化パラメータ値ＱＰを決定する。したがって、この動画像符号化装置では、精度の高いＱＰ値の算出を行うことができる。その結果、この動画像符号化装置で符号化される信号の発生符号量は、目標符号量と近い値となるので、この動画像符号化装置において、固定ビットレート（ＣＢＲ（Ｃｏｎｓｔａｎｔ  Ｂｉｔ  Ｒａｔｅ））による符号量制御を、容易に、かつ、高精度で行うことができる。
【００３０】
第４の発明は、第２の発明であって、ＱＰ中央値換算符号量算出部は、符号量換算部と、イントラＭＢ用ＦＩＦＯ部と、インターＭＢ用ＦＩＦＯ部と、第１平均値算出部と、第２平均値算出部と、を備える。
【００３１】
符号量換算部は、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、符号化部の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量に換算する。
【００３２】
イントラＭＢ用ＦＩＦＯ部は、Ｎ３個（Ｎ３：自然数）のイントラマクロブロックのＱＰ中央値換算符号量を記憶することができ、現マクロブロックの１つ前のマクロブロックがイントラマクロブロックである場合、符号量換算部により換算された換算符号量を記憶する。
【００３３】
インターＭＢ用ＦＩＦＯ部は、Ｎ４個（Ｎ４：自然数）のインターマクロブロックのＱＰ中央値換算符号量を記憶することができ、現マクロブロックの１つ前のマクロブロックがインターマクロブロックである場合、符号量換算部により換算された換算符号量を記憶する。
【００３４】
第１平均値算出部は、イントラＭＢ用ＦＩＦＯ部に記憶されているＮ３個のイントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）を算出する。
【００３５】
第２平均値算出部は、インターＭＢ用ＦＩＦＯ部に記憶されているＮ４個のインターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）を算出する。
【００３６】
そして、ＱＰ算出部は、
（１）現マクロブロックがイントラマクロブロックである場合、イントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）に基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出し、
（２）現マクロブロックがインターマクロブロックである場合、インターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）に基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出する。
【００３７】
この動画像符号化装置では、ＱＰ中央値換算符号量算出部は、イントラマクロブロックのＱＰ中央値換算符号量のみを記憶するイントラＭＢ用ＦＩＦＯ部と、インターマクロブロックのＱＰ中央値換算符号量のみを記憶するインターＭＢ用ＦＩＦＯ部と、を備える。そして、この動画像符号化装置では、（１）現マクロブロックがイントラマクロブロックである場合、イントラマクロブロックのＱＰ中央値換算符号量のみの平均値を用いて、ＱＰ算出処理を行い、（２）現マクロブロックがインターマクロブロックである場合、インターマクロブロックのＱＰ中央値換算符号量のみの平均値を用いて、ＱＰ算出処理を行う。したがって、この動画像符号化装置では、より適切に、イントラマクロブロックおよびインターマクロブロックに符号量を割り当てることができる。イントラマクロブロックとインターマクロブロックとを区別することなく符号量の平均値を算出し、当該平均値により、ＱＰ算出処理を行うと、イントラマクロブロックが多く存在していると平均の符号量が大きくなってしまい、例えば、インターマクロブロックに多くの符号量を割り当てることができる場合であっても、少ない符号量しか割り当てられず、適切な符号量割り当て処理が実行できない場合がある。この動画像符号化装置では、上記のとおり、イントラマクロブロックとインターマクロブロックとを区別してＱＰ算出処理を実行するので、現マクロブロックが、イントラマクロブロックであっても、インターマクロブロックであっても、適切に符号量割り当て処理を実行することができる。
【００３８】
第５の発明は、第４の発明であって、ＱＰ算出部は、
（１）現マクロブロックがイントラマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６（１））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出し、
（２）現マクロブロックがインターマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６（０））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する。
【００３９】
これにより、この動画像符号化装置では、上記に相当する処理を実行することで、イントラマクロブロックとインターマクロブロックとを区別してＱＰ算出処理を実行することができる。したがって、この動画像符号化装置では、現マクロブロックが、イントラマクロブロックであっても、インターマクロブロックであっても、適切に符号量割り当て処理を実行することができる。
【００４０】
第６の発明は、第４または第５の発明であって、量子化パラメータ決定部は、データ変換部と、積分処理部と、カレント符号量補正部と、さらに備える。
【００４１】
データ変換部は、目標符号量ｔａｒｇｅｔＢｉｔから、１マクロブロックあたりの目標符号量ＩｄｅａｌＭＢＢｉｔを取得する。
【００４２】
積分処理部は、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、目標符号量ＩｄｅａｌＭＢＢｉｔから、
ｓｕｍ＿ｄｉｆｆ＝ｓｕｍ＿ｄｉｆｆ＋（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）
に相当する処理により、実際に発生した符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆを取得する。
【００４３】
カレント符号量補正部は、積算値ｓｕｍ＿ｄｉｆｆに基づいて、カレント符号量算出部により算出された現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを補正する。
【００４４】
そして、  ＱＰ算出部は、カレント符号量補正部により補正された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔに基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出する。
【００４５】
この動画像符号化装置では、カレント符号量補正部により、発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆに基づいて、符号量の補正処理を行うため、本来使用できる符号量を余らせている場合、現マクロブロックに対する割り当て符号量を多くし、逆に、符号量を使い過ぎている場合、現マクロブロックに対する割り当て符号量を少なくすることができる。したがって、この動画像符号化装置では、適切に符号量割り当て処理を実現することができる。
【００４６】
第７の発明は、第６の発明であって、カレント符号量補正部は、カレント符号量算出部により算出された現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０としたとき、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０＋｛ｓｕｍ＿ｄｉｆｆ／（ｋ１×２）｝
に相当する処理により、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１を取得する。
【００４７】
ＱＰ算出部は、カレント符号量補正部により取得された補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１に基づいて、
（１）現マクロブロックがイントラマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１／ｐｒｅｄＢｉｔＱＰ２６（１））
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出し、
（２）現マクロブロックがインターマクロブロックである場合、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１／ｐｒｅｄＢｉｔＱＰ２６（０））。
【００４８】
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する。
【００４９】
この動画像符号化装置では、カレント符号量補正部により、発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆに基づいて、上記処理を実行することで、本来使用できる符号量を余らせている場合であっても、符号量を使い過ぎている場合であっても、割り当て符号量を適切に補正することができる。その結果、この動画像符号化装置では、適切に符号量割り当て処理を実現することができる。
【００５０】
第８の発明は、第６または第７の発明であって、ＱＰ中央値換算符号量算出部は、過去の所定期間内におけるイントラマクロブロックの出現数ｉｎｔｒａＮｕｍを取得する。
【００５１】
カレント符号量補正部は、現マクロブロックがイントラマクロブロックであり、かつ、過去の所定期間内におけるイントラマクロブロックの出現数ｉｎｔｒａＮｕｍが所定の閾値以下である場合、加算する符号量をａｄｄ１（＞０）として、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１＋ａｄｄ１
に相当する処理により、符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを補正する。
【００５２】
ＱＰ算出部は、カレント符号量補正部により補正された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔに基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出する。
【００５３】
これにより、この動画像符号化装置では、カレント符号量補正部により、一定期間内において、イントラマクロブロック数が少ないとき、イントラマクロブロックの割り当て符号量を多くすることができる。これにより、この動画像符号化装置では、イントラマクロブロックに対する割り当て符号量が多くなり、より高品質な動画像符号化処理を実現することができる。
【００５４】
第９の発明は、複数のマクロブロックからなるフレーム画像を形成することができる動画像信号を符号化する際に発生する符号化量を制御するための符号化量制御方法であって、目標符号量設定ステップと、ＳＡＴＤ値取得ステップと、カレント符号量算出ステップと、ＱＰ中央値換算符号量算出ステップと、ＩＩＲフィルタステップと、量子化パラメータ決定ステップと、を備える。
【００５５】
目標符号量設定ステップは、２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量ｔａｒｇｅｔＢｉｔとして設定する。
【００５６】
ＳＡＴＤ値取得ステップは、動き推定処理において、現マクロブロックと参照フレーム画像との対応画像領域との差分画像から算出されたＳＡＴＤ値を取得する。
【００５７】
カレント符号量算出ステップは、現マクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値とを取得し、当該過去ｋ１個のマクロブロックのＳＡＴＤ値の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出し、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を取得し、当該過去ｋ１個のマクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔと、当該過去ｋ１個のマクロブロックに割り当てられた符号量の合計値ｕｓｅｄＢｉｔを算出し、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する。
【００５８】
ＱＰ中央値換算符号量算出ステップは、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得し、取得した符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、動画像信号を符号化する際の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量ｂｉｔＱＰ２６を算出する。
【００５９】
ＩＩＲフィルタステップは、ＱＰ中央値換算符号量算出ステップにより算出された、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔのＱＰ中央値換算符号量ｂｉｔＱＰ２６に対して、ＩＩＲフィルタ処理を行ったＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６を取得する。
【００６０】
量子化パラメータ決定ステップは、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の取り得る範囲の中央値
ｌｏｇ２（）：底を「２」とする対数をとる関数
により、算出する。
【００６１】
この符号化量制御方法では、所定のマクロブロック数を単位として目標符号量（例えば、２×ｋ１個のマクロブロックに割り当てる符号量）ｔａｒｇｅｔＢｉｔを設定し、過去ｋ１個のマクロブロックに割り当てられた符号量と、発生符号量と相関の高いＳＡＴＤ値の変化の状況に応じて、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
により算出する。
【００６２】
さらに、この符号化量制御方法では、現マクロブロックの１つ前のマクロブロックに割り当てられた符号量をＱＰ値の中央値で符号化した場合の換算符号量（ＩＩＲフィルタ処理を行った後の換算符号量）ｐｒｅｄＢｉｔＱＰ２６と現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比（大小関係）に応じて、現マクロブロックに対して量子化処理を実行する際の量子化パラメータ値ＱＰを、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の中央値（例えば、ＱＰ値が０〜５１をとる場合、「２６」に設定される。）
により決定する。つまり、この符号化量制御方法では、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、発生符号量と相関の高いＳＡＴＤ値を用いて決定（推測）しているので、現マクロブロックを符号化するときに実際に発生する符号量と現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの誤差を小さくすることができる。そして、この符号化量制御方法では、予測精度の高い、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、現マクロブロックの１つ前のマクロブロックに割り当てられた符号量をＱＰ値の中央値で符号化した場合の換算符号量（ＩＩＲフィルタ処理を行った後の換算符号量）ｐｒｅｄＢｉｔＱＰ２６と現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比（大小関係）に応じて、現マクロブロックに対して量子化処理を実行する際の量子化パラメータ値ＱＰを決定する。したがって、この符号化量制御方法では、精度の高いＱＰ値の算出を行うことができる。その結果、この符号化量制御方法により、符号化される信号の発生符号量は、目標符号量と近い値となるので、この符号化量制御方法を用いることで、固定ビットレート（ＣＢＲ（Ｃｏｎｓｔａｎｔ  Ｂｉｔ  Ｒａｔｅ））による符号量制御を、容易に、かつ、高精度で行うことができる。
【００６３】
第１０の発明は、複数のマクロブロックからなるフレーム画像を形成することができる動画像信号を符号化する際に発生する符号化量を制御するための符号化量制御方法であって、目標符号量設定ステップと、ＳＡＴＤ値取得ステップと、カレント符号量算出ステップと、符号量換算ステップと、イントラＭＢ用記憶ステップと、インターＭＢ用記憶ステップと、第１平均値算出ステップと、第２平均値算出ステップと、ＱＰ算出ステップと、を備える。
【００６４】
目標符号量設定ステップは、２×ｋ１（ｋ１：自然数）個のマクロブロックに割り当てる符号量を目標符号量ｔａｒｇｅｔＢｉｔとして設定する。
【００６５】
ＳＡＴＤ値取得ステップは、動き推定処理において、現マクロブロックと参照フレーム画像との対応画像領域との差分画像から算出されたＳＡＴＤ値を取得する。
【００６６】
カレント符号量算出ステップは、現マクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値とを取得し、当該過去ｋ１個のマクロブロックのＳＡＴＤ値の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する。また、カレント符号量算出ステップは、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を取得し、当該過去ｋ１個のマクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔと、当該過去ｋ１個のマクロブロックに割り当てられた符号量の合計値ｕｓｅｄＢｉｔを算出し、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する。
【００６７】
符号量換算ステップは、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、動画像信号を符号化する際の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合の換算符号量に換算する。
【００６８】
イントラＭＢ用記憶ステップは、現マクロブロックの１つ前のマクロブロックがイントラマクロブロックである場合、符号量換算ステップにより換算された換算符号量を記憶する。
【００６９】
インターＭＢ用記憶ステップは、現マクロブロックの１つ前のマクロブロックがインターマクロブロックである場合、符号量換算ステップにより換算された換算符号量を記憶する。
【００７０】
第１平均値算出ステップは、イントラＭＢ用記憶ステップで記憶されたイントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）を算出する。
【００７１】
第２平均値算出ステップは、インターＭＢ用記憶ステップで記憶されたインターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）を算出する。
【００７２】
ＱＰ算出ステップは、
（１）現マクロブロックがイントラマクロブロックである場合、イントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）に基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出し、
（２）現マクロブロックがインターマクロブロックである場合、インターマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）に基づいて、現マクロブロックを符号化する際の量子化パラメータ値を算出する。
【００７３】
この符号化量制御方法では、（１）現マクロブロックがイントラマクロブロックである場合、イントラマクロブロックのＱＰ中央値換算符号量のみの平均値を用いて、ＱＰ算出処理が実行され、（２）現マクロブロックがインターマクロブロックである場合、インターマクロブロックのＱＰ中央値換算符号量のみの平均値を用いて、ＱＰ算出処理が実行される。したがって、この符号化量制御方法では、より適切に、イントラマクロブロックおよびインターマクロブロックに符号量を割り当てることができる。イントラマクロブロックとインターマクロブロックとを区別することなく符号量の平均値を算出し、当該平均値により、ＱＰ算出処理を行うと、イントラマクロブロックが多く存在していると平均の符号量が大きくなってしまい、例えば、インターマクロブロックに多くの符号量を割り当てることができる場合であっても、少ない符号量しか割り当てられず、適切な符号量割り当て処理が実行できない場合がある。この符号化量制御方法では、上記のとおり、イントラマクロブロックとインターマクロブロックとを区別してＱＰ算出処理を実行するので、現マクロブロックが、イントラマクロブロックであっても、インターマクロブロックであっても、適切に符号量割り当て処理を実行することができる。
【００７４】
第１１の発明は、第９または第１０の発明である符号化量制御方法を、コンピュータに実行させるためのプログラムである。
【００７５】
これにより、第９または第１０の発明と同様の効果を奏する符号化量制御方法を、コンピュータに実行させるためのプログラムを実現することができる。
【発明の効果】
【００７６】
本発明によれば、フレームよりも短い単位で適切に符号量制御を行うことができる動画像符号化装置、符号化量制御方法およびプログラムを実現することができる。
【図面の簡単な説明】
【００７７】
【図１】第１実施形態に係る動画像符号化装置１０００の概略構成図。
【図２】第１実施形態に係る動画像符号化装置１０００の量子化パラメータ決定部２の概略構成図。
【図３】第１実施形態に係る動画像符号化装置１０００のＩＩＲフィルタ部２６の概略構成図。
【図４】動画像符号化装置１０００に入力される動画像信号Ｄｉｎの一例を示す図。
【図５】第２実施形態に係る動画像符号化装置２０００の概略構成図。
【図６】第２実施形態に係る動画像符号化装置２０００の量子化パラメータ決定部２Ａの概略構成図。
【図７】第２実施形態に係る動画像符号化装置１０００のＱＰ中央値換算符号量算出部２５Ａの概略構成図。
【図８】第２実施形態に係る動画像符号化装置１０００のカレント符号量補正部３０の概略構成図。
【発明を実施するための形態】
【００７８】
［第１実施形態］
第１実施形態について、図面を参照しながら、以下、説明する。
【００７９】
＜１．１：動画像符号化装置の構成＞
図１は、第１実施形態に係る動画像符号化装置１０００の概略構成図である。
【００８０】
図２は、第１実施形態に係る動画像符号化装置１０００の量子化パラメータ決定部２の概略構成図である。
【００８１】
図３は、第１実施形態に係る動画像符号化装置１０００のＩＩＲフィルタ部２６の概略構成図である。
【００８２】
動画像符号化装置１０００は、図１に示すように、入力動画像信号Ｄｉｎに対して動画像符号化を行う符号化部１と、符号化部１における動画像符号化処理の量子化処理において用いられる量子化パラメータ値を決定する量子化パラメータ決定部２と、目標符号量を設定する目標符号量設定部３と、を備える。
【００８３】
符号化部１は、図１に示すように、減算器１０１と、セレクタＳＥＬ１と、直交変換部１０２と、量子化部１０３と、逆量子化部１０４と、逆直交変換部１０５と、加算器１０６と、記憶部１０７と、動き推定部１０８と、動き補償部１０９と、セレクタＳＥＬ２と、可変長符号化部１１０と、を備える。
【００８４】
減算器１０１は、入力動画像信号Ｄｉｎと、動き補償部１０９から出力される動き補償処理を実行した後の動画像信号（参照フレームの動画像信号（例えば、１フレーム前の動画像信号）を用いて動き補償処理を行った後の動画像信号）とを入力とし、両者の差分信号（予測差分信号）を取得する。例えば、現フレームの動画像信号をＤｉｎとし、参照フレームの動画像信号に対して動き補償処理を実行した後の動画像信号Ｄｒｅｆ＿ＭＣとし、予測誤差信号をｄｉｆｆとすると、減算器１０１は、
ｄｉｆｆ＝Ｄｉｎ−Ｄｒｅｆ＿ＭＣ
により、予測誤差信号ｄｉｆｆを取得する。そして、減算器１０１は、取得した予測誤差信号ｄｉｆｆをセレクタＳＥＬ１に出力する。
【００８５】
セレクタＳＥＬ１は、現フレームの動画像信号Ｄｉｎと、減算器１０１から出力される予測誤差信号ｄｉｆｆとを入力とする。セレクタＳＥＬ１は、制御部（不図示）からの制御信号ＳＷにより、現フレームの動画像信号Ｄｉｎおよび予測誤差信号ｄｉｆｆのいずれか一方を選択して、直交変換部１０２および量子化パラメータ決定部２に出力する。具体的には、現フレームの動画像信号に対して、イントラ符号化が実行される場合、セレクタＳＥＬ１は、ａ端子に入力されている現フレームの動画像信号Ｄｉｎを直交変換部１０２に出力する。一方、現フレームの動画像信号に対して、インター符号化が実行される場合、セレクタＳＥＬ１は、ｂ端子に入力されている予測誤差信号ｄｉｆｆを直交変換部１０２に出力する。
【００８６】
直交変換部１０２は、セレクタＳＥＬ１から出力された信号に対して、マクロブロック単位で直交変換（例えば、整数変換や離散コサイン変換（ＤＣＴ））を行う。そして、直交変換部１０２は、直交変換後の信号を量子化部に出力する。
【００８７】
量子化部１０３は、直交変換部１０２から出力される信号と、量子化パラメータ決定部２から出力される量子化パラメータ値ＱＰに関する情報とを入力とする。量子化部１０３は、直交変換部１０２から出力される直交変換後の信号に対して、量子化パラメータ決定部２により決定された量子化パラメータ値ＱＰを用いて、量子化処理を行う。そして、量子化部１０３は、量子化処理後の信号を逆量子化部１０４および可変長符号化部１１０に出力する。
【００８８】
逆量子化部１０４は、量子化部１０３により量子化された信号を入力とする。逆量子化部１０４は、量子化部１０３で行った量子化処理と逆の処理（逆量子化処理）を行うことで、量子化部１０３に入力された信号と同様の信号を取得する。そして、逆量子化部１０４は、取得した信号を逆直交変換部１０５に出力する。
【００８９】
逆直交変換部１０５は、逆量子化部１０４から出力された信号を入力とする。逆直交変換部１０５は、逆量子化部１０４から出力された信号に対して、直交変換部１０２で行った直交変換と逆の処理（逆直交変換）を行うことで、直交変換部１０２に入力された信号と同様の信号（予測誤差信号ｄｉｆｆ’または動画像信号Ｄｉｎ’）を取得する。そして、逆直交変換部１０５は、取得した信号を加算器１０６に出力する。なお、予測誤差信号ｄｉｆｆ’は、予測誤差信号ｄｉｆｆを、直交変換、量子化処理、逆量子化処理、および、逆直交変換処理を行うことで取得される信号であり、直交変換、量子化処理等に伴う誤差を含む信号である。また、動画像信号Ｄｉｎ’は、入力動画像信号Ｄｉｎを、直交変換、量子化処理、逆量子化処理、および、逆直交変換処理を行うことで取得される信号であり、直交変換、量子化処理等に伴う誤差を含む信号である。
【００９０】
加算器１０６は、逆直交変換部１０５から出力される信号と、セレクタＳＥＬ２から出力される信号とを入力とし、両者を加算する。なお、イントラ符号化処理が実行される場合、セレクタＳＥＬ２において、ａ端子が選択され、セレクタＳＥＬ２からは何も出力されないので、加算器１０６は、逆直交変換部１０５から出力される信号を、そのまま、記憶部１０７に出力する。一方、インター符号化処理が実行される場合、加算器１０６は、動き補償部１０９から出力される参照フレームの動き補償後の動画像信号Ｄｒｅｆ＿ＭＣ（参照フレームの動画像信号に対して動き補償処理を実行した後の動画像信号）と、逆直交変換部１０５から出力される信号（予測誤差信号ｄｉｆｆ’）とを加算し、加算した信号を記憶部１０７に出力する。
【００９１】
つまり、加算器１０６は、
（１）イントラ符号化処理が実行される場合、
Ｄｉｎ’＝Ｄｉｎ’
として、動画像信号Ｄｉｎ’を記憶部１０７に出力し、
（２）インター符号化処理が実行される場合、
Ｄｉｎ’＝ｄｉｆｆ’＋Ｄｒｅｆ＿ＭＣ
として、動画像信号Ｄｉｎ’を記憶部１０７に出力する。
【００９２】
記憶部１０７は、例えば、複数フレーム分の動画像信号（データ）を記憶することができるフレームメモリである。記憶部１０７は、加算器１０６から出力される動画像信号を記憶する。また、記憶部１０７は、参照フレーム（例えば、現フレームの１フレーム前のフレーム）の動画像信号Ｄｒｅｆを動き推定部１０８および動き補償部１０９に出力する。
【００９３】
動き推定部１０８は、現フレームの動画像信号Ｄｉｎと、記憶部１０７から出力される参照フレームの動画像信号Ｄｒｅｆとを入力とする。動き推定部１０８は、現フレーム画像と参照フレーム画像とを用いて、動き探索処理を行い、例えば、マクロブロックごとに、動きベクトルを決定する。具体的には、動き推定部１０８は、動き探索処理を行う場合に、現フレームのマクロブロックと参照フレームの所定の画像領域（処理対象マクロブロックを動きベクトルに基づいて移動させた後の参照フレーム画像上の画像領域）との差分画像のＳＡＴＤ値（Ｓｕｍ  ｏｆ  ａｂｓｏｌｕｔｅ  ｔｒａｎｓｆｏｒｍｅｄ  ｄｉｆｆｅｒｅｎｃｅｓ）を算出し、算出したＳＡＴＤ値が最小となるように、動きベクトルを決定する。そして、動き推定部１０８は、決定した動きベクトルに関する情報と参照フレームに関する情報とを動き補償部１０９に出力する。また、動き推定部１０８は、（最適な）動きベクトルを決定したときのＳＡＴＤ値に関する情報を量子化パラメータ決定部２に出力する。
【００９４】
なお、ＳＡＴＤ値は、例えば、アダマール変換により取得される。現フレームのマクロブロックと参照フレームの所定の画像領域（処理対象マクロブロックを動きベクトルにより移動させた後の参照フレーム画像上の画像領域）との差分画像ｆ（ｘ，ｙ）（０≦ｘ≦ｎ−１、０≦ｙ≦ｎ−１、ｎ：自然数）に対して、ｎ×ｎのアダマール行列Ｈを、水平方向および垂直方向に施す。つまり、
Ｆ（ｕ，ｖ）＝Ｈ・ｆ（ｘ，ｙ）・ＨＴ
（ＨＴ：アダマール行列Ｈの転置行列）
により、アダマール変換後のデータＦ（ｕ，ｖ）を取得し、Ｆ（ｕ，ｖ）の各成分の絶対値和を取得することで、ＳＡＴＤ値が取得される。
【００９５】
動き補償部１０９は、動き推定部１０８から出力される動きベクトルおよび参照フレームに関する情報と、記憶部１０７から出力される参照フレームの動画像信号とを入力とする。動き補償部１０９は、参照フレーム画像の各画像領域を、動き推定部１０８に決定された動きベクトルに基づいて、シフトさせることで、動き補償後のフレーム画像を取得する。そして、動き補償部１０９は、動き補償後のフレーム画像を形成することができる動画像信号（動き補償後の動画像信号）Ｄｒｅｆ＿ＭＣを、減算器１０１およびセレクタＳＥＬ２に出力する。
【００９６】
セレクタＳＥＬ２は、動き補償部１０９から出力される動き補償後の動画像信号Ｄｒｅｆ＿ＭＣを入力とする。セレクタＳＥＬ２は、イントラ符号化処理が実行される場合、図１に示すａ端子（無入力の端子）を選択し、その出力を加算器１０６に入力する。つまり、この場合、加算器１０６には、何も入力されない。一方、インター符号化処理が実行される場合、セレクタＳＥＬ２は、ｂ端子を選択し、動き補償後の動画像信号Ｄｒｅｆ＿ＭＣを加算器１０６に出力する。
【００９７】
可変長符号化部１１０は、量子化部１０３から出力される信号を入力とし、入力され信号（量子化信号）に対して可変長符号化処理（エントロピー符号化処理（例えば、ハフマン符号化処理や算術符号化処理））を行う。そして、可変長符号化部１１０は、処理後の信号Ｄｏｕｔを出力する。
【００９８】
量子化パラメータ決定部２は、図２に示すように、符号量取得部２１と、符号量用ＦＩＦＯ部２２と、ＳＡＴＤ用ＦＩＦＯ部２３と、カレント符号量算出部２４と、ＱＰ中央値換算符号量算出部２５と、ＩＩＲフィルタ部２６と、ＱＰ算出部２７と、を備える。
【００９９】
符号量取得部２１は、可変長符号化部１１０から出力される符号化信号Ｄｏｕｔを入力とする。符号量取得部２１は、符号化信号Ｄｏｕｔから、現マクロブロック（処理対象となっているマクロブロック）の符号量を取得し、取得した符号量を符号量用ＦＩＦＯ部２２に出力する。なお、符号量取得部２１は、例えば、可変長符号化部１１０の後段に設置されるビデオバッファ（不図示）、あるいは、符号化部１内に設置されるものであってもよい。この場合、量子化パラメータ決定部２の符号量取得部２１は省略可能である。
【０１００】
符号量用ＦＩＦＯ部２２は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｓｔ  Ｏｕｔ）メモリであり、符号量取得部２１から出力される符号量のデータを記憶する。なお、符号量用ＦＩＦＯ部２２は、Ｎ１個（Ｎ１：自然数）のマクロブロックの符号量を記憶することができる。また、符号量用ＦＩＦＯ部２２に記憶されている最新のマクロブロックの符号量（つまり、最後に符号量用ＦＩＦＯ部２２に入力されたマクロブロックの符号量）をｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとする。符号量用ＦＩＦＯ部２２は、他の機能部（例えば、カレント符号量算出部２４、ＱＰ中央値換算符号量算出部等）からの要求に従い、符号量用ＦＩＦＯ部２２に記憶保持されている任意のデータを読み出すことができる。
【０１０１】
ＳＡＴＤ用ＦＩＦＯ部２３は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｓｔ  Ｏｕｔ）メモリであり、動き推定部１０８から出力されるＳＡＴＤ値に関する情報を入力とする。なお、ＳＡＴＤ用ＦＩＦＯ部２３は、Ｎ１個（Ｎ１：自然数）のマクロブロックのＳＡＴＤ値を記憶することができる。また、ＳＡＴＤ用ＦＩＦＯ部２３に記憶されている最新のマクロブロックのＳＡＴＤ値（つまり、最後にＳＡＴＤ用ＦＩＦＯ部２３に入力されたマクロブロックのＳＡＴＤ値）をｒｅｃｅｎｔ＿ＳＡＴＤとする。ＳＡＴＤ用ＦＩＦＯ部２３は、他の機能部（例えば、カレント符号量算出部２４等）からの要求に従い、ＳＡＴＤ用ＦＩＦＯ部２３に記憶保持されている任意のデータを読み出すことができる。
【０１０２】
カレント符号量算出部２４は、符号量用ＦＩＦＯ部２２に記憶されている、最新のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを含むｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックの符号量を、符号量用ＦＩＦＯ部２２から読み出す。なお、読み出すｋ１個のマクロブロックの符号量は、符号量用ＦＩＦＯ部２２に記憶されているデータのうち、最新のデータから過去へ向かって（時系列に）連続するｋ１個のマクロブロックの符号量（のデータ）である。また、カレント符号量算出部２４は、ＳＡＴＤ用ＦＩＦＯ部２３に記憶されている、最新のマクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、過去ｋ１個（ｋ１：自然数、ｋ１≦Ｎ１）のマクロブロックのＳＡＴＤ値を、ＳＡＴＤ用ＦＩＦＯ部２３から読み出す。なお、読み出すｋ１個のマクロブロックのＳＡＴＤ値は、ＳＡＴＤ用ＦＩＦＯ部２３に記憶されているデータのうち、現マクロブロックの１つ前のデータから過去へ向かって（時系列に）連続するｋ１個のマクロブロックのＳＡＴＤ値（のデータ）である。
【０１０３】
また、カレント符号量算出部２４には、目標符号量設定部により設定された目標符号量が入力される。カレント符号量算出部２４は、目標符号量と、符号量用ＦＩＦＯ部２２から読み出した複数のマクロブロックの符号量と、最新のマクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、ＳＡＴＤ用ＦＩＦＯ部２３から読み出した複数のＳＡＴＤ値とに基づいて、現マクロブロック（処理対象マクロブロック）に割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する（詳細については後述）。そして、カレント符号量算出部２４は、算出した、現マクロブロック（処理対象マクロブロック）に割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔをＱＰ算出部２７に出力する。
【０１０４】
ＱＰ中央値換算符号量算出部２５は、最新のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、符号量用ＦＩＦＯ部２２から読み出し、読み出した符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、ＱＰ値の中央値（ＱＰ値の取り得る範囲の略中央値）で量子化した場合の符号量を算出する。そして、算出したＱＰ中央値換算符号量をＩＩＲフィルタ部２６に出力する。
【０１０５】
ＩＩＲフィルタ部２６は、図３に示すように、更新判定部２６１と、第１ゲイン調整部２６２と、セレクタ２６３と、加算器２６４と、ＩＩＲ用記憶部２６５と、第２ゲイン調整部２６６と、セレクタ２６７と、を備える。
【０１０６】
更新判定部２６１は、セレクタＳＥＬ１からの出力を入力とする。更新判定部２６１は、動画像符号化装置１０００においてインター符号化処理が実行されている場合であって、セレクタＳＥＬ１から出力される予測誤差信号ｄｉｆｆが「０」である場合、つまり、現マクロブロックの予測誤差信号ｄｉｆｆが「０」である場合（現マクロブロックの予測誤差成分値が、現マクロブロック内の全ての画素において「０」である場合）、更新判定フラグを「０」に設定する。一方、上記以外の場合、更新判定部２６１は、更新判定フラグを「１」に設定する。更新判定部２６１は、更新判定フラグをセレクタ２６３およびセレクタ２６７に出力する。
【０１０７】
第１ゲイン調整部２６２は、ＱＰ中央値換算符号量算出部から出力されるＱＰ中央値換算符号量ｂｉｔＱＰ２６に対して、係数ａ（０≦ａ≦１）による乗算処理を行い、乗算後の符号量をセレクタ２６３に出力する。
【０１０８】
セレクタ２６３は、更新判定部２６１から入力される更新判定フラグが「１」である場合、第１ゲイン調整部２６２からの出力を加算器２６４に出力する。一方、セレクタ２６３は、更新判定部２６１から入力される更新判定フラグが「０」である場合、加算器２６４には、何にも出力しない。
【０１０９】
加算器２６４は、セレクタ２６３の出力およびセレクタ２６７の出力を入力とし、両者を加算し、加算結果をＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６として、ＱＰ算出部２７に出力する。
【０１１０】
ＩＩＲ用記憶部２６５は、加算器２６４から出力されるＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６を入力とし、１ＭＢに相当する時間遅延させて、第２ゲイン調整部２６６およびセレクタ２６７に出力する。
【０１１１】
第２ゲイン調整部２６６は、ＩＩＲ用記憶部２６５からの出力に対して、係数１−ａ（０≦ａ≦１）による乗算処理を行い、乗算後の符号量をセレクタ２６７に出力する。
【０１１２】
セレクタ２６７は、更新判定部２６１から入力される更新判定フラグが「１」である場合、第２ゲイン調整部２６６からの出力を加算器２６４に出力する。一方、セレクタ２６７は、更新判定部２６１から入力される更新判定フラグが「０」である場合、ＩＩＲ用記憶部２６５からの出力を加算器２６４に出力する。
【０１１３】
ＱＰ算出部２７は、ＩＩＲフィルタ部２６の加算器２６４から出力されるＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６と、カレント符号量算出部２４から出力される現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとを入力とする。ＱＰ算出部２７は、ＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６と、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとに基づいて、現マクロブロックの量子化処理に使用する量子化パラメータ値ＱＰを算出する。そして、ＱＰ算出部２７は、算出した量子化パラメータ値ＱＰを量子化部１０３に出力する。
【０１１４】
目標符号量設定部３は、マクロブロック数を指定することにより、目標符号量を設定する。例えば、ｋ１×２個のマクロブロックに割り当てる符号量が目標符号量に設定される。なお、目標符号量は、外部ＩＦを介して設定されるものであってもよいし、予め設定されているものであってもよい。
【０１１５】
＜１．２：動画像符号化装置の動作＞
以上のように構成された動画像符号化装置１０００の動作について、以下、説明する。
【０１１６】
図４は、動画像符号化装置１０００に入力される動画像信号Ｄｉｎの一例を示す図である。図４に示す動画像信号Ｄｉｎは、３０ｆｐｓの信号であり、例えば、固定ビットレート（ＣＢＲ（Ｃｏｎｓｔａｎｔ  Ｂｉｔ  Ｒａｔｅ））制御を行うために、Ｂピクチャを用いない動画像信号であるものとする。具体的には、動画像信号Ｄｉｎは、最初のフレーム（ピクチャ）のみＩピクチャであり、それ以降のフレーム（ピクチャ）は、全てＰピクチャから構成されている。つまり、動画像信号Ｄｉｎは、最初の３０フレームのみ、図４（ａ）に示すピクチャ構成となっており、それ以降は、３０フレームごとに、図４（ｂ）に示すピクチャ構成となっている。ピクチャ番号を単位時間（図４の場合、単位時間は１秒であり、単位時間あたりのフレーム（ピクチャ）数は、「３０」である。）において、時系列に順番に振るものとすると、最初の３０フレームにおいて、ピクチャ番号０のピクチャのみがＩピクチャであり、ピクチャ番号１〜２９のピクチャはＰピクチャである。さらに、それ以降については、３０フレームごとに、ピクチャ番号０〜２９のピクチャ（全てのピクチャ）はＰピクチャである。
【０１１７】
なお、以下では、動画像信号Ｄｉｎは、フレームレートが３０ｆｐｓであり、最初のフレームのみがＩピクチャであり、それ以降のフレームは全てＰピクチャであるものとして、説明する。また、動画像符号化装置１０００において、動画像信号ＤｉｎのＰピクチャの所定のマクロブロックに対してイントラ符号化処理（マクロブロック単位のイントラ符号化処理）が実行されるものであってもよい。
【０１１８】
動画像信号Ｄｉｎは、符号化部１の減算器１０１と、セレクタＳＥＬ１と、動き推定部１０８とに入力される。
【０１１９】
現マクロブロック（処理対象マクロブロック）がイントラ符号化処理される場合、セレクタＳＥＬ１では、制御信号ＳＷにより、図１のａ端子側が選択され、動画像信号Ｄｉｎは、直交変換部１０２に入力される。一方、現マクロブロックがインター符号化処理される場合、セレクタＳＥＬ１では、制御信号ＳＷにより、図１のｂ端子側が選択される。この場合、減算器１０１では、動画像信号Ｄｉｎから、動き補償部１０９から出力される動き補償後の動画像信号Ｄｒｅｆ＿ＭＣを減算することで、予測誤差信号ｄｉｆｆが取得される。すなわち、減算器１０１では、
ｄｉｆｆ＝Ｄｉｎ−Ｄｒｅｆ＿ＭＣ
に相当する処理が実行される。
【０１２０】
直交変換部１０２では、セレクタＳＥＬ１から出力される動画像信号Ｄｉｎまたは予測誤差信号ｄｉｆｆに対して、直交変換（例えば、整数変換やＤＣＴ）が実行される。そして、直交変換後の信号が量子化部１０３に出力される。
【０１２１】
量子化部１０３では、直交変換後の信号に対して、量子化パラメータ決定部２から出力される量子化パラメータ値ＱＰによる量子化処理が実行される。
【０１２２】
量子化部１０３により量子化された信号は、可変長符号化部１１０にて、可変長符号化処理（例えば、ハフマン符号化処理や算術符号化処理）が実行され、符号化部１から符号化信号Ｄｏｕｔとして出力される。
【０１２３】
また、量子化部１０３により量子化された信号は、逆量子化部１０４により逆量子化され、さらに、逆直交変換部１０５により逆直交変換が実行される。
【０１２４】
逆直交変換された信号は、加算器１０６に入力され、加算器１０６にて、以下の加算処理が実行される。
（１）イントラ符号化処理が実行される場合、
Ｄｉｎ’＝Ｄｉｎ’
として、動画像信号Ｄｉｎ’が、加算器１０６から記憶部１０７に出力される。
（２）インター符号化処理が実行される場合、
Ｄｉｎ’＝ｄｉｆｆ’＋Ｄｒｅｆ＿ＭＣ
により取得された動画像信号Ｄｉｎ’が、加算器１０６から記憶部１０７に出力される。
【０１２５】
記憶部１０７では、加算器１０６から出力される動画像信号Ｄｉｎ’が記憶される。
【０１２６】
動き推定部１０８では、現フレーム画像と記憶部１０７から読み出された参照フレーム画像とを用いて、動き探索処理が実行され、例えば、マクロブロックごとに、動きベクトルが決定される。具体的には、動き推定部１０８では、動き探索処理を行う場合に、現フレームのマクロブロックと参照フレームの所定の画像領域（処理対象マクロブロックを動きベクトルにより移動させた後の参照フレーム画像上の画像領域）との差分画像のＳＡＴＤ値（Ｓｕｍ  ｏｆ  ａｂｓｏｌｕｔｅ  ｔｒａｎｓｆｏｒｍｅｄ  ｄｉｆｆｅｒｅｎｃｅｓ）が算出され、算出されたＳＡＴＤ値が最小となるように、動きベクトルが決定される。そして、動き推定部１０８により決定された動きベクトルに関する情報と参照フレームに関する情報とが動き補償部１０９に出力される。また、動き推定部１０８により（最適な）動きベクトルが決定されたときのＳＡＴＤ値に関する情報が量子化パラメータ決定部２に出力される。
【０１２７】
動き補償部１０９では、参照フレーム画像の各画像領域を、動き推定部１０８に決定された動きベクトルに基づいて、シフトさせることで、動き補償後のフレーム画像が取得される。そして、動き補償部１０９により取得された動画像信号、すなわち、動き補償後のフレーム画像を形成することができる動画像信号（動き補償後の動画像信号）Ｄｒｅｆ＿ＭＣが、減算器１０１およびセレクタＳＥＬ２に出力される。
【０１２８】
（１．２．１：量子化パラメータ決定部の動作）
次に、量子化パラメータ決定部２の動作について、説明する。
【０１２９】
可変長符号化部１１０から出力された符号化信号Ｄｏｕｔが、量子化パラメータ決定部２の符号量取得部２１に入力される。
【０１３０】
符号量取得部２１では、符号化信号Ｄｏｕｔからマクロブロックごとの符号量が取得され、取得された符号量が符号量用ＦＩＦＯ部２２に入力される。
【０１３１】
符号量用ＦＩＦＯ部２２では、マクロブロックごとの符号量（符号量に関するデータ）が記憶される。具体的には、符号量用ＦＩＦＯ部２２では、Ｎ１個のマクロブロックの符号量が記憶保持されており、最後に符号量用ＦＩＦＯ部２２に入力された符号量、つまり、最新のマクロブロックの符号量がｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔであり、最新のマクロブロックの符号量が符号量用ＦＩＦＯ部２２に入力される度に、一番古いマクロブロックの符号量（符号量に関するデータ）が符号量用ＦＩＦＯ部２２から排出（破棄）される。つまり、符号量用ＦＩＦＯ部２２は、Ｎ１個のマクロブロックの符号量（符号量データ）をキュー・メモリ形式（ＦＩＦＯメモリ形式）で記憶保持する。
【０１３２】
また、動き推定部１０８により取得された現マクロブロックのＳＡＴＤ値が量子化パラメータ決定部２のＳＡＴＤ用ＦＩＦＯ部２３に入力される。
【０１３３】
ＳＡＴＤ用ＦＩＦＯ部２３では、マクロブロックごとのＳＡＴＤ値が記憶される。具体的には、ＳＡＴＤ用ＦＩＦＯ部２３では、Ｎ１個のマクロブロックのＳＡＴＤ値が記憶保持されており、最後にＳＡＴＤ用ＦＩＦＯ部２３に入力されたＳＡＴＤ値、つまり、最新のマクロブロックのＳＡＴＤ値がｒｅｃｅｎｔ＿ＳＡＴＤであり、最新のマクロブロックのＳＡＴＤ値がＳＡＴＤ用ＦＩＦＯ部２３に入力される度に、一番古いマクロブロックのＳＡＴＤ値（ＳＡＴＤ値に関するデータ）がＳＡＴＤ用ＦＩＦＯ部２３から排出（破棄）される。つまり、ＳＡＴＤ用ＦＩＦＯ部２３は、Ｎ２個のマクロブロックのＳＡＴＤ値（ＳＡＴＤ値に関するデータ）をキュー・メモリ形式（ＦＩＦＯメモリ形式）で記憶保持する。
【０１３４】
カレント符号量算出部２４は、符号量用ＦＩＦＯ部２２に記憶されている、最新のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを含むｋ１個（ｋ１：自然数）のマクロブロックの符号量（符号量データ）を、符号量用ＦＩＦＯ部２２から読み出す。また、カレント符号量算出部２４は、ＳＡＴＤ用ＦＩＦＯ部２３に記憶されている、最新のマクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤを含むｋ１個（ｋ１：自然数）のマクロブロックのＳＡＴＤ値を、ＳＡＴＤ用ＦＩＦＯ部２３から読み出す。
【０１３５】
また、目標符号量設定部３により、目標符号量が設定される。目標符号量は、ｋ１×２個のマクロブロックの理想符号量（ｋ１×２個のマクロブロックに割り当てられる符号量）である。
【０１３６】
カレント符号量算出部２４では、目標符号量と、符号量用ＦＩＦＯ部２２から読み出したｋ１個のマクロブロックの符号量と、最新のマクロブロックのＳＡＴＤ値ｒｅｃｅｎｔ＿ＳＡＴＤと、ＳＡＴＤ用ＦＩＦＯ部２３から読み出したｋ１個のＳＡＴＤ値とに基づいて、現マクロブロック（処理対象マクロブロック）に割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔが算出される。具体的には、カレント符号量算出部２４は、以下の（１）〜（３）の処理により、符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する。
（１）ＳＡＴＤ値の平均値の算出
カレント符号量算出部２４は、ＳＡＴＤ用ＦＩＦＯ部２３から読み出したｋ１個のＳＡＴＤ値の平均値を算出し、算出した平均値をａｖｒｇ＿ＳＡＴＤとする。
（２）割り当て符号量の平均値の算出
カレント符号量算出部２４は、符号量用ＦＩＦＯ部２２から読み出したｋ１個のマクロブロックの符号量の合計値ｕｓｅｄＢｉｔを算出する。そして、未来のｋ１個のマクロブロックに割り当てる符号量ａｌｌｏｃａｔｅｄＢｉｔを、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ｔａｒｇｅｔＢｉｔ：目標符号量（２×ｋ１個のマクロブロックに割り当てる符号量）
ｕｓｅｄＢｉｔ：過去ｋ１個のマクロブロックに割り当てられた符号量
により算出する。これにより、現マクロブロックを含む未来のｋ１個のマクロブロックに割り当てる符号量ａｌｌｏｃａｔｅｄＢｉｔが算出される。
【０１３７】
そして、カレント符号量算出部２４は、
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
により、未来のｋ１個のマクロブロックの各マクロブロックの符号量の平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔを算出する。
（３）現マクロブロックに割り当てる符号量の算出
カレント符号量算出部２４は、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
ｒｅｃｅｎｔ＿ＳＡＴＤ：ＳＡＴＤ用ＦＩＦＯ部２３に記憶されている最新のマクロブロックのＳＡＴＤ値
ｃｏｅ：係数
により、現マクロブロックに割り当てる符号量を算出する。つまり、ｒｅｃｅｎｔ＿ＳＡＴＤは、動き推定部１０８により、算出された現マクロブロックのＳＡＴＤ値であり、当該ＳＡＴＤ値と現マクロブロックを含む過去ｋ１個のＳＡＴＤ値の平均値ａｖｒｇ＿ＳＡＴＤとの差分（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）は、現マクロブロックに割り当てる符号量の増減と相関する。したがって、（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）に基づいて、現マクロブロックの割り当て符号量を決定（推定）することで、現マクロブロックに実際に割り当てられる符号量に近い値の符号量を算出することができる。なお、係数ｃｏｅは、ＳＡＴＤ値と符号量との調整用の係数である。なお、ＳＡＴＤ値と符号量とが１：１の比例関係にある場合、係数ｃｏｅは「１」に設定されるので、この場合、係数ｃｏｅによる乗算処理は省略可能である。
【０１３８】
また、符号量用ＦＩＦＯ部２２およびＳＡＴＤ用ＦＩＦＯ部２３に記憶保持されているデータがｋ１個未満の場合、平均値ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ、ａｖｒｇ＿ＳＡＴＤ等を所定の値（記憶保持されているデータ数による平均値や、平均値の近似値や、平均値の推定値等）に設定するようにしてもよい。
【０１３９】
以上のように、カレント符号量算出部２４により算出された、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔは、ＱＰ算出部２７に出力される。
【０１４０】
ＱＰ中央値換算符号量算出部２５は、符号量用ＦＩＦＯ部２２に記憶されている最新のマクロブロック（現マクロブロックの１つ前のマクロブロック）の符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、符号量用ＦＩＦＯ部２２から読み出す。そして、ＱＰ中央値換算符号量算出部２５では、最新のマクロブロック（現マクロブロックの１つ前のマクロブロック）の符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔが、ＱＰ値の中央値（ＱＰ値の取り得る範囲の略中央値）で量子化した場合の符号量ｂｉｔＱＰ２６を算出する。具体的には、ＱＰ中央値換算符号量算出部２５は、
ｂｉｔＱＰ２６＝ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／２＾（（Ｃ０―ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）／６）
Ｃ０：ＱＰ値の中央値
により、最新のマクロブロック（現マクロブロックの１つ前のマクロブロック）の符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、ＱＰ値の中央値で量子化した場合の換算符号量ｂｉｔＱＰ２６を算出する。
【０１４１】
なお、Ｃ０は、例えば、ＱＰ値が０〜５１をとる場合、「２６」に設定される。また、上記数式では、量子化パラメータ値が６増えると、符号量は２倍になるものとしている。
【０１４２】
以上により、ＱＰ中央値換算符号量算出部２５で算出された、最新のマクロブロック（現マクロブロックの１つ前のマクロブロック）のＱＰ値の中央値での換算符号量ｂｉｔＱＰ２６は、ＩＩＲフィルタ部２６に出力される。
【０１４３】
ＩＩＲフィルタ部２６では、更新判定部２６１により、現マクロブロックの予測誤差信号ｄｉｆｆが「０」であるか否かが判定される。現マクロブロックの予測誤差信号ｄｉｆｆが「０」である場合（現マクロブロックの予測誤差成分値が、現マクロブロック内の全ての画素において「０」である場合）、更新判定フラグは「０」に設定される。一方、上記以外の場合、更新判定部２６１により、更新判定フラグは「１」に設定される。
【０１４４】
そして、ＩＩＲフィルタ部２６では、以下の処理が実行される。
（１）更新判定フラグが「１」である場合
ＩＩＲフィルタ部２６は、
ｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ））＝（１−ａ）×ｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ−１））＋ａ×ｂｉｔＱＰ（ＭＢ（Ｎ））
ｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ））：Ｎ番目のマクロブロックのＱＰ値の中央値換算符号量（ＩＩＲフィルタ部２６に入力されているデータ）のフィルタ処理後ＱＰ値の中央値換算符号量
ｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ−１））：Ｎ−１番目のマクロブロック（Ｎ番目のマクロブロックの１つ前のマクロブロック）のＱＰ値の中央値換算符号量のフィルタ処理後の値
ａ：内分比（０≦ａ≦１）
により、ＩＩＲフィルタ処理後のＱＰ値の中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６を算出する。比例係数ａは、例えば、「１／３２」であり、この場合、ｂｉｔＱＰ（ＭＢ（Ｎ））とｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ−１））（入力データの１つ前のマクロブロックについてのデータ）との重み付けは、１：３１となる。ＩＩＲフィルタ部２６では、このように過去のデータに対する重み付けを大きくすることで、ＩＩＲフィルタ処理後のＱＰ値の中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６の変化を緩やかなものにする。つまり、ＱＰ値を急激に変化させると、符号化される動画像の画質が急激に変化する場合があるため、これを適切に防止するために、ＩＩＲフィルタ部２６では、上記のように、ＩＩＲフィルタ処理後のＱＰ値の中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６が急激に変化しないようにしている。
（２）更新判定フラグが「０」である場合
ＩＩＲフィルタ部２６は、
ｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ））＝ｐｒｅｄＢｉｔＱＰ２６（ＭＢ（Ｎ−１））
とする。つまり、予測誤差信号が「０」である場合、現在設定されているＱＰ値を使用する方が適切な符号化処理が実行できると推測できるため、ＩＩＲフィルタ部２６は、更新処理を実行しない。
【０１４５】
上記処理により、ＩＩＲフィルタ部２６で処理されたＩＩＲフィルタ処理後のＱＰ値の中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６は、ＱＰ算出部２７に出力される。
【０１４６】
ＱＰ算出部２７では、ＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６と、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとに基づいて、現マクロブロックの量子化処理に使用する量子化パラメータ値ＱＰを算出する。具体的には、ＱＰ算出部２７は、量子化パラメータ値ＱＰを、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の中央値（例えば、ＱＰ値が０〜５１をとる場合、「２６」に設定される。）
ｌｏｇ２（ｘ）：底を「２」とする対数をとる関数
により算出する。
【０１４７】
なお、上記数式では、量子化パラメータ値が６増えると、符号量は２倍になるものとしている。また、ＱＰ算出部２７では、上記数式を
ＱＰ＝Ｃ０−６×（ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）―ｌｏｇ２（ｐｒｅｄＢｉｔＱＰ２６））
と変形し、この数式に相当する処理により、量子化パラメータ値ＱＰを決定するようにしてもよい。
【０１４８】
さらに、対数をとる関数ｌｏｇ２（ｘ）に相当する処理を、ＬＵＴ（ルック・アップ・テーブル）等により処理するようにしてもよい。
【０１４９】
このように、ＱＰ算出部２７では、１つ前のマクロブロックのＱＰ値の中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６（ＩＩＲフィルタ処理後のデータ）と、符号量との相関の高いＳＡＴＤ値に基づいて算出した現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比を算出し、その算出結果に基づいて、現マクロブロックのデータに対する量子化処理に使用する量子化パラメータ値ＱＰを上記数式により決定する。
【０１５０】
そして、決定された量子化パラメータ値ＱＰは、量子化部１０３に出力され、量子化部１０３では、決定された量子化パラメータ値ＱＰにより、現マクロブロックに対して量子化処理が実行される。
【０１５１】
以上のように、動画像符号化装置１０００では、所定のマクロブロック数を単位として目標符号量（例えば、２×ｋ１個のマクロブロックに割り当てる符号量）ｔａｒｇｅｔＢｉｔを設定し、過去ｋ１個のマクロブロックに割り当てられた符号量と、発生符号量と相関の高いＳＡＴＤ値の変化の状況に応じて、現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、
ａｌｌｏｃａｔｅｄＢｉｔ＝ｔａｒｇｅｔＢｉｔ−ｕｓｅｄＢｉｔ
ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｌｌｏｃａｔｅｄＢｉｔ／ｋ１
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ＝ａｖｒｇ＿ＡｌｌｏｃａｔｅｄＢｉｔ＋ｃｏｅ×（ｒｅｃｅｎｔ＿ＳＡＴＤ−ａｖｒｇ＿ＳＡＴＤ）
により算出する。
【０１５２】
さらに、動画像符号化装置１０００では、現マクロブロックの１つ前のマクロブロックに割り当てられた符号量をＱＰ値の中央値で符号化した場合の換算符号量（ＩＩＲフィルタ処理を行った後の換算符号量）ｐｒｅｄＢｉｔＱＰ２６と現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比（大小関係）に応じて、現マクロブロックに対して量子化処理を実行する際の量子化パラメータ値ＱＰを、
ＱＰ＝Ｃ０−６×ｌｏｇ２（ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ／ｐｒｅｄＢｉｔＱＰ２６）
Ｃ０：ＱＰ値の中央値（例えば、ＱＰ値が０〜５１をとる場合、「２６」に設定される。）
により決定する。つまり、動画像符号化装置１０００では、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、発生符号量と相関の高いＳＡＴＤ値を用いて決定（推測）しているので、現マクロブロックを符号化するときに実際に発生する符号量と現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの誤差を小さくすることができる。そして、動画像符号化装置１０００では、予測精度の高い、現マクロブロックの割り当て符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、現マクロブロックの１つ前のマクロブロックに割り当てられた符号量をＱＰ値の中央値で符号化した場合の換算符号量（ＩＩＲフィルタ処理を行った後の換算符号量）ｐｒｅｄＢｉｔＱＰ２６と現マクロブロックに割り当てる符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとの比（大小関係）に応じて、現マクロブロックに対して量子化処理を実行する際の量子化パラメータ値ＱＰを決定する。したがって、動画像符号化装置１０００では、精度の高いＱＰ値の算出を行うことができる。その結果、動画像符号化装置１０００で符号化される信号の発生符号量は、目標符号量と近い値となるので、動画像符号化装置１０００において、固定ビットレート（ＣＢＲ（Ｃｏｎｓｔａｎｔ  Ｂｉｔ  Ｒａｔｅ））による符号量制御を、容易に、かつ、高精度で行うことができる。
【０１５３】
また、動画像符号化装置１０００では、目標符号量をマクロブロック数により設定することができる。したがって、動画像符号化装置１０００では、フレームよりも短い単位で適切に符号量制御を行うことができる。
【０１５４】
［第２実施形態］
次に、第２実施形態について、説明する。
【０１５５】
なお、本実施形態において、上記実施形態と同様の部分については、同一符号を付し、詳細な説明を省略する。
【０１５６】
＜２．１：動画像符号化装置の構成＞
図５は、第２実施形態に係る動画像符号化装置２０００の概略構成図である。
【０１５７】
図６は、第２実施形態に係る動画像符号化装置２０００の量子化パラメータ決定部２Ａの概略構成図である。
【０１５８】
図７は、第２実施形態に係る動画像符号化装置１０００のＱＰ中央値換算符号量算出部２５Ａの概略構成図である。
【０１５９】
図８は、第２実施形態に係る動画像符号化装置１０００のカレント符号量補正部３０の概略構成図である。
【０１６０】
本実施形態の動画像符号化装置２０００は、第１実施形態の動画像符号化装置１０００において、量子化パラメータ決定部２を、量子化パラメータ決定部２Ａに置換した構成を有している。
【０１６１】
本実施形態の量子化パラメータ決定部２Ａは、図６に示すように、第２実施形態の量子化パラメータ決定部２において、ＱＰ中央値換算符号量算出部２５を、ＱＰ中央値換算符号量算出部２５Ａに置換し、ＩＩＲフィルタ部２６を削除し、データ変換部２８と、積分処理部２９と、カレント符号量補正部３０とを追加した構成を有している。
【０１６２】
ＱＰ中央値換算符号量算出部２５Ａは、図７に示すように、最新のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、現マクロブロック（処理対象マクロブロック）が、イントラマクロブロックか、インターマクロブロックのいずれであるかを示すフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇとを入力する。フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇは、動画像符号化装置２０００を制御する制御部（不図示）により取得され、量子化パラメータ決定部２Ａに入力されるものであってもよい。また、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇは、符号化部１により取得され、量子化パラメータ決定部２Ａに入力されるものであってもよい。
【０１６３】
ＱＰ中央値換算符号量算出部２５Ａは、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇに基づいて、イントラマクロブロック用のＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６（１）と、インターマクロブロック用のＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６（０）と、切り替えて、ＱＰ中央値換算符号量ｐｒｅｄＢｉｔＱＰ２６として、ＱＰ算出部２７に出力する。
【０１６４】
また、ＱＰ中央値換算符号量算出部２５Ａは、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを記憶し、所定期間内におけるイントラマクロブロック数を、イントラマクロブロック数ｉｎｔｒａＮｕｍとして、カレント符号量補正部３０に出力する。
【０１６５】
ＱＰ中央値換算符号量算出部２５Ａは、図７に示すように、符号量換算部２５１と、セレクタ２５２と、イントラＭＢ用ＦＩＦＯ部２５３と、インターＭＢ用ＦＩＦＯ部２５４と、第１平均値算出部２５５と、第２平均値算出部２５６と、セレクタ２５７、遅延器２５８とを備える。また、ＱＰ中央値換算符号量算出部２５Ａは、図７に示すように、フラグ用ＦＩＦＯ部２５９と、カウンタ部２６０とを備える。
【０１６６】
符号量換算部２５１は、符号量用ＦＩＦＯ部から、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得し、取得した符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを、符号化部１の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合のＱＰ中央値換算符号量を算出する。符号量換算部２５１は、算出したＱＰ中央値換算符号量をセレクタ２５２に出力する。
【０１６７】
セレクタ２５２は、符号量換算部２５１からの出力を入力する。
【０１６８】
セレクタ２５２は、
（１）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがイントラマクロブロックであることを示す値である場合、つまり、現マクロブロックの１つ前のマクロブロックがイントラマクロブロックである場合、符号量換算部２５１からの出力を、イントラＭＢ用ＦＩＦＯ部２５３に出力し、
（２）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがインターマクロブロックであることを示す値である場合、つまり、現マクロブロックの１つ前のマクロブロックがインターマクロブロックである場合、符号量換算部２５１からの出力を、インターＭＢ用ＦＩＦＯ部２５４に出力する。
【０１６９】
イントラＭＢ用ＦＩＦＯ部２５３は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｓｔ  Ｏｕｔ）メモリであり、Ｎ３個（Ｎ３：自然数）のマクロブロックごとの換算符号量を記憶することができる。イントラＭＢ用ＦＩＦＯ部２５３は、現マクロブロックから１つ前のマクロブロックがイントラマクロブロックである場合、セレクタ２５２から出力される、符号量換算部２５１により取得されたＱＰ中央値換算符号量を記憶する。なお、イントラＭＢ用ＦＩＦＯ部２５３のＮ３個のデータの初期値は、例えば、入力される画像サイズや、ピクチャサイズに基づいて、設定されることが好ましい。
【０１７０】
インターＭＢ用ＦＩＦＯ部２５４は、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｓｔ  Ｏｕｔ）メモリであり、Ｎ４個（Ｎ４：自然数）のマクロブロックごとの符号量を記憶することができる。インターＭＢ用ＦＩＦＯ部２５４は、現マクロブロックから１つ前のマクロブロックがイントラマクロブロックである場合、セレクタ２５２から出力される、符号量換算部２５１により取得されたＱＰ中央値換算符号量を記憶する。なお、イントラＭＢ用ＦＩＦＯ部２５３のＮ３個のデータの初期値は、例えば、入力される画像サイズや、ピクチャサイズに基づいて、設定されることが好ましい。また、Ｎ４は、Ｎ３と同じ値であってもよい。
【０１７１】
第１平均値算出部２５５は、イントラＭＢ用ＦＩＦＯ部２５３に記憶されているＮ３個のＱＰ中央値換算符号量の平均値を算出し、算出した平均値を、ｐｒｅｄＢｉｔＱＰ２６（１）として、セレクタ２５７に出力する。
【０１７２】
第２平均値算出部２５６は、インターＭＢ用ＦＩＦＯ部２５４に記憶されているＮ４個のＱＰ中央値換算符号量の平均値を算出し、算出した平均値を、ｐｒｅｄＢｉｔＱＰ２６（０）として、セレクタ２５７に出力する。
【０１７３】
セレクタ２５７は、第１平均値算出部２５５の出力と、第２平均値算出部２５６の出力とを入力とする。また、セレクタ２５７は、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを入力する。
【０１７４】
セレクタ２５７は、
（１）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがイントラマクロブロックであることを示す値である場合、つまり、現マクロブロックがイントラマクロブロックである場合、第１平均値算出部２５５からの出力ｐｒｅｄＢｉｔＱＰ２６（１）を、ｐｒｅｄＢｉｔＱＰ２６として、ＱＰ算出部２７に出力し、
（２）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがインターマクロブロックであることを示す値である場合、つまり、現マクロブロックがインターマクロブロックである場合、第２平均値算出部２５６からの出力ｐｒｅｄＢｉｔＱＰ２６（０）を、ｐｒｅｄＢｉｔＱＰ２６として、ＱＰ算出部２７に出力する。
【０１７５】
遅延器２５８は、現マクロブロックについてのフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを入力し、入力したフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを１マクロブロックに相当する時間だけ遅延させてセレクタ２５２に出力する。つまり、遅延器２５８から出力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇは、現マクロブロックの１つ前のマクロブロックが、イントラマクロであるか、それとも、インターマクロブロックであるかを示すフラグである。なお、遅延器２５８を省略し、フラグ用ＦＩＦＯ部２５９から、現マクロブロックの１つ前のマクロブロックのフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを取得し、取得した当該フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇをセレクタ２５２に入力するようにしてもよい。
【０１７６】
フラグ用ＦＩＦＯ部２５９は、Ｎ５個（Ｎ５：自然数）のフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを記憶することができ、現マクロブロックについてのフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇを記憶する。なお、以下では、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇが「１」である場合、イントラマクロブロックであることを示し、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇが「０」である場合、インターマクロブロックであることを示すものとして、説明する。最初にＩフレームの画像（画像信号）が入力される場合、フラグ用ＦＩＦＯ部２５９のＮ５個のデータは、すべてイントラマクロブロックであることを示す値「１」に初期化される。
【０１７７】
カウンタ部２６０は、フラグ用ＦＩＦＯ部２５９に記憶されているＮ５個のフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇのうち、イントラマクロブロックであることを示す（値が「１」である）フラグの数をカウントし、カウントした値をｉｎｔｒａＮｕｍとして、カレント符号量補正部３０に出力する。
【０１７８】
データ変換部２８は、目標符号量を入力し、目標符号量から１ブロックあたりの目標符号量を算出する。そして、データ変換部２８は、算出した、１ブロックあたりの目標符号量を、ＩｄｅａｌＭＢＢｉｔとして積分処理部２９に出力する。
【０１７９】
積分処理部２９は、符号量用ＦＩＦＯ部から、現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得する。また、積分処理部２９は、データ変換部２８から出力される、１ブロックあたりの目標符号量ＩｄｅａｌＭＢＢｉｔを入力する。そして、積分処理部２９は、
ｓｕｍ＿ｄｉｆｆ＝ｓｕｍ＿ｄｉｆｆ＋（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）
に相当する処理を実行し、実際に発生した符号量と目標符号量との差を積算する。なお、発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆの初期値は、「０」とすることが好ましい。
【０１８０】
積分処理部２９は、上記処理により取得した、発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆをカレント符号量補正部３０に出力する。
【０１８１】
カレント符号量補正部３０は、図８に示すように、符号量補正部３０１と、イントラＭＢ用符号量補正部３０２とを備える。
【０１８２】
符号量補正部３０１は、カレント符号量算出部２４からの出力と、積分処理部２９から出力される発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆと、を入力する。なお、本実施形態では、カレント符号量算出部２４からの出力をｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０とする。符号量補正部３０１は、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０＋｛ｓｕｍ＿ｄｉｆｆ／（ｋ１×２）｝
に相当する処理を実行し、補正（調整）した符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１を取得する。そして、符号量補正部３０１は、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１をイントラＭＢ用符号量補正部３０２に出力する。
【０１８３】
イントラＭＢ用符号量補正部３０２は、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇと、ＱＰ中央値換算符号量算出部２５Ａから出力される、所定期間におけるイントラマクロブロック数ｉｎｔｒａＮｕｍと、符号量補正部３０１から出力される補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１を入力する。
【０１８４】
イントラＭＢ用符号量補正部３０２は、現マクロブロックがイントラマクロブロックである場合であって、所定期間におけるイントラマクロブロック数ｉｎｔｒａＮｕｍが閾値Ｔｈ１以下である場合、現マクロブロックに割り当てる符号量が増加するように補正する。そして、イントラＭＢ用符号量補正部３０２は、補正後の符号量を、ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとして、ＱＰ算出部２７に出力する。
【０１８５】
一方、上記以外の場合、イントラＭＢ用符号量補正部３０２は、符号量補正部３０１から出力された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１を、符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとして、ＱＰ算出部２７に出力する。
【０１８６】
なお、カレント符号量補正部３０において、符号量補正部３０１またはイントラＭＢ用符号量補正部３０２を省略してもよい。
【０１８７】
＜２．２：動画像符号化装置の動作＞
以上のように構成された動画像符号化装置２０００の動作について、説明する。
【０１８８】
なお、第１実施形態と同様の部分については、詳細な説明を省略する。
【０１８９】
ＱＰ中央値換算符号量算出部２５Ａの符号量換算部２５１では、入力された現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔは、符号化部１の量子化処理においてとりうるＱＰ値範囲の中央値で量子化した場合のＱＰ中央値換算符号量に換算される。そして、換算されたＱＰ中央値換算符号量は、セレクタ２５２に出力される。
【０１９０】
セレクタ２５２では、以下の選択処理が実行される。
（１）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがイントラマクロブロックであることを示す値である場合、つまり、現マクロブロックの１つ前のマクロブロックがイントラマクロブロックである場合、符号量換算部２５１からの出力は、イントラＭＢ用ＦＩＦＯ部２５３に出力される。
（２）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがインターマクロブロックであることを示す値である場合、つまり、現マクロブロックの１つ前のマクロブロックがインターマクロブロックである場合、符号量換算部２５１からの出力は、インターＭＢ用ＦＩＦＯ部２５４に出力される。
【０１９１】
イントラＭＢ用ＦＩＦＯ部２５３では、現マクロブロックから１つ前のマクロブロックがイントラマクロブロックである場合、セレクタ２５２から出力される、符号量換算部２５１により取得されたＱＰ中央値換算符号量が記憶される。
【０１９２】
インターＭＢ用ＦＩＦＯ部２５４では、現マクロブロックから１つ前のマクロブロックがイントラマクロブロックである場合、セレクタ２５２から出力される、符号量換算部２５１により取得されたＱＰ中央値換算符号量が記憶される。
【０１９３】
第１平均値算出部２５５では、イントラＭＢ用ＦＩＦＯ部２５３に記憶されているＮ３個のＱＰ中央値換算符号量の平均値が算出され、算出された平均値が、ｐｒｅｄＢｉｔＱＰ２６（１）として、セレクタ２５７に出力される。
【０１９４】
第２平均値算出部２５６では、インターＭＢ用ＦＩＦＯ部２５４に記憶されているＮ４個のＱＰ中央値換算符号量の平均値が算出され、算出された平均値が、ｐｒｅｄＢｉｔＱＰ２６（０）として、セレクタ２５７に出力される。
【０１９５】
セレクタ２５７では、以下の選択処理が実行される。
（１）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがイントラマクロブロックであることを示す値である場合、つまり、現マクロブロックがイントラマクロブロックである場合、第１平均値算出部２５５からの出力ｐｒｅｄＢｉｔＱＰ２６（１）が、ｐｒｅｄＢｉｔＱＰ２６として、ＱＰ算出部２７に出力される。
（２）入力されるフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇがインターマクロブロックであることを示す値である場合、つまり、現マクロブロックがインターマクロブロックである場合、第２平均値算出部２５６からの出力ｐｒｅｄＢｉｔＱＰ２６（０）が、ｐｒｅｄＢｉｔＱＰ２６として、ＱＰ算出部２７に出力される。
【０１９６】
フラグ用ＦＩＦＯ部２５９では、現マクロブロックについてのフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇが記憶される。
【０１９７】
カウンタ部２６０では、フラグ用ＦＩＦＯ部２５９に記憶されているＮ５個のフラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇのうち、イントラマクロブロックであることを示す（値が「１」である）フラグの数をカウントし、カウントした値がｉｎｔｒａＮｕｍとして、カレント符号量補正部３０に出力される。
【０１９８】
データ変換部２８では、入力された目標符号量からから１ブロックあたりの目標符号量ＩｄｅａｌＭＢＢｉｔが算出される。そして、算出された、１ブロックあたりの目標符号量ＩｄｅａｌＭＢＢｉｔは、積分処理部２９に出力される。
【０１９９】
積分処理部２９では、符号量用ＦＩＦＯ部から取得した現マクロブロックの１つ前のマクロブロックの符号量ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔと、データ変換部２８から出力される、１ブロックあたりの目標符号量ＩｄｅａｌＭＢＢｉｔとに対して、
ｓｕｍ＿ｄｉｆｆ＝ｓｕｍ＿ｄｉｆｆ＋（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）
に相当する処理が実行され、実際に発生した符号量と目標符号量との差が積算される。
【０２００】
積分処理部２９において、上記処理により取得された、発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆは、カレント符号量補正部３０に出力される。
【０２０１】
なお、積分処理部２９において、（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）の値が所定の範囲を超えないように下限値Ａ１、上限値Ａ２を設けて、
Ａ１≦（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）≦Ａ２
となるように、クリップ処理を行うようにしてもよい。また、上限値、下限値のいずれか一方のみでのクリップ処理を行うようにしてもよい。
【０２０２】
カレント符号量補正部３０の符号量補正部３０１では、カレント符号量算出部２４からの出力ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０と、積分処理部２９から出力される発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆと、に対して、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０＋｛ｓｕｍ＿ｄｉｆｆ／（ｋ１×２）｝
に相当する処理が実行され、補正（調整）した符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１が取得される。
【０２０３】
ｓｕｍ＿ｄｉｆｆは、発生符号量と目標符号量との差の積算値であるので、過去において使用した符号量のマクロブロック単位での積算値が、目標符号量のマクロブロック単位での積算値よりも多い場合、ｓｕｍ＿ｄｉｆｆは、マイナスの値をとる。したがって、上記処理を実行することで、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１は、補正前の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０よりも小さい値となる。つまり、この場合、符号量を過剰に使い過ぎている状態であるため、現マクロブロックに対する割り当て符号量を少なくする補正を行うことで、適切な符号量割り当てを行うことができる。なお、ｓｕｍ＿ｄｉｆｆを、目標符号量の設定対象としているマクロブロック数である（ｋ１×２）で除算することで、１マクロブロック当たりの割り当て符号量を算出することができる。
【０２０４】
一方、過去において使用した符号量のマクロブロック単位での積算値が、目標符号量のマクロブロック単位での積算値よりも少ない場合、ｓｕｍ＿ｄｉｆｆは、プラスの値をとる。したがって、上記処理を実行することで、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１は、補正前の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ０よりも大きな値となる。つまり、この場合、使用できる符号量を余らせている状態であるため、現マクロブロックに対する割り当て符号量を多くする補正を行うことで、適切な符号量割り当てを行うことができる。
【０２０５】
さらに、ｓｕｍ＿ｄｉｆｆは、発生符号量と目標符号量との差の積算値であるため、例えば、一定期間における発生符号量と目標符号量との差により、符号量割り当て制御を行う場合に比べて精度を向上させることができる。例えば、ピクチャ間を跨ぐ場合であっても、上記処理により、適切な符号量割り当て制御を行うことができる。
【０２０６】
符号量補正部３０１において、上記のように補正された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１は、イントラＭＢ用符号量補正部３０２に出力される。
【０２０７】
なお、符号量補正部３０１において、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１が所定の範囲を超えないように下限値Ｂ１、上限値Ｂ２を設けて、
Ｂ１≦（ＩｄｅａｌＭＢＢｉｔ−ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）≦Ｂ２
となるように、クリップ処理を行うようにしてもよい。また、上限値、下限値のいずれか一方のみでのクリップ処理を行うようにしてもよい。
【０２０８】
イントラＭＢ用符号量補正部３０２は、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇにより、現マクロブロックがイントラマクロブロックであるか否かを判定する。また、イントラＭＢ用符号量補正部３０２は、所定期間におけるイントラマクロブロック数ｉｎｔｒａＮｕｍが閾値Ｔｈ１以下であるか否かを判定する。
【０２０９】
現マクロブロックがイントラマクロブロックであると判定された場合であって、所定期間におけるイントラマクロブロック数ｉｎｔｒａＮｕｍが閾値Ｔｈ１以下であると判定された場合、イントラＭＢ用符号量補正部３０２では、現マクロブロックに割り当てる符号量が増加するように補正処理が実行される。この場合、イントラＭＢ用符号量補正部３０２は、例えば、加算する符号量をａｄｄ１（＞０）として、
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１＋ａｄｄ１
に相当する処理により、割り当て符号量を補正するようにしてもよい。
【０２１０】
また、イントラＭＢ用符号量補正部３０２において、ＱＰ中央値換算符号量算出部２５Ａの第１平均値算出部２５５で取得されるイントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（１）と、ＱＰ中央値換算符号量算出部２５Ａの第２平均値算出部２５６で取得されるイントラマクロブロックのＱＰ中央値換算符号量の平均値ｐｒｅｄＢｉｔＱＰ２６（０）と、を用いて、以下のように処理するようにしてもよい。
（１）変数ｉｎｔｒａＰｒｅｄ、ｉｎｔｅｒＰｒｅｄ、および、ａｄｄｂｉｔに、以下の値を代入する。
【０２１１】
ｉｎｔｒａＰｒｅｄ＝ｐｒｅｄＢｉｔＱＰ２６（１）
ｉｎｔｅｒＰｒｅｄ＝ｐｒｅｄＢｉｔＱＰ２６（０）
ａｄｄｂｉｔ＝ｉｎｔｅｒＰｒｅｄ／２
（２）（ｉｎｔｒａＰｒｅｄ＋ａｄｄｂｉｔ）と、ｉｎｔｅｒＰｒｅｄとの大小関係を判定し、
（ｉｎｔｒａＰｒｅｄ＋ａｄｄｂｉｔ）≧ｉｎｔｅｒＰｒｅｄである場合、
ｉｎｔｒａＰｒｅｄ＝ｉｎｔｒａＰｒｅｄ−ａｄｄｂｉｔ
を実行し、（ｉｎｔｒａＰｒｅｄ＋ａｄｄｂｉｔ）＜ｉｎｔｅｒＰｒｅｄとなるまで、上記減算処理を繰り返す。そして、上記減算処理を実行した回数をＮＡとする。
（３）以下の処理により、補正した符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを取得する。
【０２１２】
ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ
＝ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１
＋ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１×０．５×ＮＡ
イントラＭＢ用符号量補正部３０２は、上記処理により、割り当て符号量を補正するようにしてもよい。
【０２１３】
なお、イントラＭＢ用符号量補正部３０２において、フラグＩｎｔｒａ／Ｉｎｔｅｒ＿ｆｌａｇにより、現マクロブロックがイントラマクロブロックではない場合、あるいは、現マクロブロックがイントラマクロブロックであるが、所定期間におけるイントラマクロブロック数ｉｎｔｒａＮｕｍが閾値Ｔｈ１以下ではない場合、イントラＭＢ用符号量補正部３０２は、入力された符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ１を、符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔとして、ＱＰ算出部２７に出力する。
【０２１４】
上記のように、所定期間内において、イントラマクロブロック数が少ない場合、イントラマクロブロックに対する割り当て符号量が少なすぎる場合が多い。したがって、上記のように処理することで、イントラマクロブロックに対して、より多くの符号量を割り当てることができ、使い切れていない符号量（余っている符号量）を適切に使用することができる。
【０２１５】
なお、イントラＭＢ用符号量補正部３０２により、上記のように、イントラマクロブロックに対する割り当て符号量を増加させるように補正する場合、符号量補正部３０１では、符号量を抑制する方向にのみ制御するようにしてもよい。
【０２１６】
また、イントラＭＢ用符号量補正部３０２において、補正後の符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔが所定の範囲を超えないように下限値Ｃ１、上限値Ｃ２を設けて、
Ｃ１≦ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ≦Ｃ２
となるように、クリップ処理を行うようにしてもよい。また、上限値、下限値のいずれか一方のみでのクリップ処理を行うようにしてもよい。
【０２１７】
ＱＰ算出部２７では、カレント符号量補正部３０から出力される符号量ｃｕｒｒｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔを用いて、第１実施形態と同様に、現マクロブロックを符号化する際の量子化パラメータ値ＱＰを算出する。なお、ＱＰ値が急激変化することを抑制するために、ＱＰ値が所定の値以上変化しないように、クリップ処理を行うようにしてもよい。つまり、現マクロブロックのＱＰ値と１つ前のマクロブロックのＱＰ値の差をｄｉｆｆ＿ＱＰとすると、
ａｂｓ（ｄｉｆｆ＿ＱＰ）＜Ｄ１
Ｄ１：正の定数
とするようにしてもよい。
【０２１８】
以上のように、動画像符号化装置２０００では、カレント符号量補正部３０により、発生符号量と目標符号量との差の積算値ｓｕｍ＿ｄｉｆｆに基づいて、符号量の補正処理を行うため、本来使用できる符号量を余らせている場合、現マクロブロックに対する割り当て符号量を多くし、逆に、符号量を使い過ぎている場合、現マクロブロックに対する割り当て符号量を少なくすることができる。したがって、第１実施形態よりもさらに適切に符号量割り当て処理を実現することができる。
【０２１９】
また、動画像符号化装置２０００では、カレント符号量補正部３０により、一定期間内において、イントラマクロブロック数が少ないとき、イントラマクロブロックの割り当て符号量を多くすることができる。これにより、イントラマクロブロックに対する割り当て符号量が多くなり、より高品質な動画像符号化処理を実現することができる。
【０２２０】
また、動画像符号化装置２０００では、ＱＰ中央値換算符号量算出部２５Ａにおいて、イントラマクロブロックのＱＰ中央値換算符号量のみを記憶するイントラＭＢ用ＦＩＦＯ部２５３と、インターマクロブロックのＱＰ中央値換算符号量のみを記憶するインターＭＢ用ＦＩＦＯ部２５４と、を設けた。そして、動画像符号化装置２０００では、（１）現マクロブロックがイントラマクロブロックである場合、イントラマクロブロックのＱＰ中央値換算符号量のみの平均値を用いて、ＱＰ算出処理を行い、（２）現マクロブロックがインターマクロブロックである場合、インターマクロブロックのＱＰ中央値換算符号量のみの平均値を用いて、ＱＰ算出処理を行う。したがって、動画像符号化装置２０００では、より適切に、イントラマクロブロックおよびインターマクロブロックに符号量を割り当てることができる。イントラマクロブロックとインターマクロブロックとを区別することなく符号量の平均値を算出し、当該平均値により、ＱＰ算出処理を行うと、イントラマクロブロックが多く存在していると平均の符号量が大きくなってしまい、例えば、インターマクロブロックに多くの符号量を割り当てることができる場合であっても、少ない符号量しか割り当てられず、適切な符号量割り当て処理が実行できない場合がある。動画像符号化装置２０００では、上記のとおり、イントラマクロブロックとインターマクロブロックとを区別してＱＰ算出処理を実行するので、現マクロブロックが、イントラマクロブロックであっても、インターマクロブロックであっても、適切に符号量割り当て処理を実行することができる。
【０２２１】
［他の実施形態］
上記実施形態では、実数演算処理（浮動小数演算）により各処理を実行する場合を例に説明を行っているが、これに限定されることはなく、所望の精度に応じて、上記各処理を整数演算処理により実行するようにしてもよい。この場合、必要な精度に応じて、適宜丸め処理等を行うようにしてもよい。また、上記実施形態において、非線形処理や非線形関数による処理を行う部分（例えば、ｌｏｇ２（ｘ）関数による処理や、２＾（（Ｃ０―ｒｅｃｅｎｔ＿ＡｌｌｏｃａｔｅｄＢｉｔ）／６）による除算処理）については、ＬＵＴ（ルック・アップ・テーブル）等を用いて処理を行うようにしてもよい。
【０２２２】
また、上記実施形態では、動き推定部１０８において、動き探索処理により、現マクロブロックのＳＡＴＤ値を取得する機能を有する場合について説明した。しかし、これに限定されることはなく、動き推定部１０８が、ＳＡＴＤ値を取得する機能を有しない場合、別途、ＳＡＴＤ値を取得する機能部を設けるようにしてもよい。
【０２２３】
また、上記実施形態の動画像符号化装置の一部または全部は、集積回路（例えば、ＬＳＩ、システムＬＳＩ等）として実現されるものであってもよい。
【０２２４】
上記実施形態の各機能ブロックの処理の一部または全部は、プログラムにより実現されるものであってもよい。そして、上記実施形態の各機能ブロックの処理の一部または全部は、コンピュータにおいて、中央演算装置（ＣＰＵ）により行われる。また、それぞれの処理を行うためのプログラムは、ハードディスク、ＲＯＭなどの記憶装置に格納されており、ＲＯＭにおいて、あるいはＲＡＭに読み出されて実行される。
【０２２５】
また、上記実施形態の各処理をハードウェアにより実現してもよいし、ソフトウェア（ＯＳ（オペレーティングシステム）、ミドルウェア、あるいは、所定のライブラリとともに実現される場合を含む。）により実現してもよい。さらに、ソフトウェアおよびハードウェアの混在処理により実現しても良い。なお、上記実施形態に係る動画像符号化装置をハードウェアにより実現する場合、各処理を行うためのタイミング調整を行う必要があるのは言うまでもない。上記実施形態においては、説明便宜のため、実際のハードウェア設計で生じる各種信号のタイミング調整の詳細については省略している。
【０２２６】
また、上記実施形態における処理方法の実行順序は、必ずしも、上記実施形態の記載に制限されるものではなく、発明の要旨を逸脱しない範囲で、実行順序を入れ替えることができるものである。
【０２２７】
前述した方法をコンピュータに実行させるコンピュータプログラム及びそのプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の範囲に含まれる。ここで、コンピュータ読み取り可能な記録媒体としては、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、大容量ＤＶＤ、次世代ＤＶＤ、半導体メモリを挙げることができる。
【０２２８】
上記コンピュータプログラムは、上記記録媒体に記録されたものに限られず、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送されるものであってもよい。
【０２２９】
なお、本発明の具体的な構成は、前述の実施形態に限られるものではなく、発明の要旨を逸脱しない範囲で種々の変更および修正が可能である。
【符号の説明】
【０２３０】
１０００、２０００  動画像符号化装置
１  符号化部
２、２Ａ  量子化パラメータ決定部
３  目標符号量設定部
１０７  記憶部
１０８  動き推定部
２２  符号量用ＦＩＦＯ部
２３  ＳＡＴＤ用ＦＩＦＯ部
２４  カレント符号量算出部
２５、２５Ａ  ＱＰ中央値換算符号量算出部
２５１  符号量換算部
２５３  イントラＭＢ用ＦＩＦＯ部
２５４  インターＭＢ用ＦＩＦＯ部
２５５  第１平均値算出部
２５６  第２平均値算出部
２５９  フラグ用ＦＩＦＯ部
２６０  カウンタ部
２６  ＩＩＲフィルタ部
２７  ＱＰ算出部
２８  データ変換部
２９  積分処理部
３０  カレント符号量補正部
３０１  符号量補正部
３０２  イントラＭＢ用符号量補正部
【図１】
2014135720.tif 000003
【図２】
2014135720.tif 000004
【図３】
2014135720.tif 000005
【図４】
2014135720.tif 000006
【図５】
2014135720.tif 000007
【図６】
2014135720.tif 000008
【図７】
2014135720.tif 000009
【図８】
2014135720.tif 000010