(57)【要約】      （修正有）【課題】より正確で効果的なレート歪みモデルを提供し、より安定した知覚体験を与えるためによりスムースに量子化パラメータを遷移させる。【解決手段】１以上のビデオピクチャを符号化する際のコンピュータ実装されたレート制御が開示される。ＱＰの決定の際にピクチャタイプ、ピクチャ複雑度、およびターゲットビットカウントを考慮に入れたレート制御データを用いて１以上のビデオピクチャの一つである現在のピクチャを符号化するために使われる量子化パラメータ（ＱＰ）を決定する。ＱＰを用いて現在のピクチャを圧縮されたフォーマットに符号化し、符号化された現在のピクチャを生成する。符号化された現在のピクチャから決定された統計データにもとづいてレート制御データを更新する。【選択図】図１
2011055504.tif 000002
【特許請求の範囲】
【請求項１】
１以上のビデオピクチャを符号化する際のレート制御のためのコンピュータ実装された方法であって、
ａ）レート制御データを用いて前記１以上のビデオピクチャの一つである現在のピクチャを符号化するために使われる量子化パラメータ（ＱＰ）を決定するステップであって、前記ＱＰの決定の際にピクチャタイプ、ピクチャ複雑度、およびターゲットビットカウントを考慮に入れるステップと、
ｂ）ステップａ）で決定された前記ＱＰを用いて前記現在のピクチャを圧縮されたフォーマットに符号化し、符号化された現在のピクチャを生成するステップと、
ｃ）前記符号化された現在のピクチャから決定された統計データにもとづいてレート制御データを更新するステップとを含む方法。
【請求項２】
前記１以上のビデオピクチャの１以上の連続するピクチャに対してステップａ）からｃ）を繰り返す請求項１の方法。
【請求項３】
ステップａ）は、前記ＱＰを決定する際にピクチャ歪みを考慮に入れる請求項１の方法。
【請求項４】
ステップａ）は、１以上の以前のピクチャに対する現実のビット使用量および１以上の以前のピクチャに対する複雑度にもとづいて前記現在のピクチャに対する推定ビット使用量を決定し、前記推定ビット使用量にもとづいて前記ＱＰを計算するステップを含む請求項１の方法。
【請求項５】
ステップａ）は、１以上の以前のピクチャに対する現実のビット使用量、１以上の以前のピクチャに対する複雑度、および１以上の以前のピクチャに対する歪みにもとづいて前記現在のピクチャに対する前記推定ビット使用量を決定するステップを含む請求項４の方法。
【請求項６】
前記現在のピクチャはシーンチェンジを含み、ステップａ）は、もっとも最近のシーンチェンジのＩピクチャにまで遡って前記現在のピクチャと同じタイプのすべてのピクチャにわたる平均的な現実のビットカウントと、前記もっとも最近のシーンチェンジのＩピクチャにまで遡って前記現在のピクチャと同じタイプのすべてのピクチャにわたる平均的な複雑度とにもとづいて、前記推定ビット使用量を決定するステップを含む請求項４の方法。
【請求項７】
前記現在のピクチャはＩピクチャであり、ステップａ）は、前記現在のピクチャに先行するもっとも最近のＰピクチャに対する現実のビット使用量、複雑度および歪みと、前記現在のピクチャに先行するもっとも最近のＩピクチャに対する現実のビット使用量、複雑度および歪みとから、前記推定ビット使用量を決定するステップを含む請求項４の方法。
【請求項８】
前記現在のピクチャはＰピクチャであり、ステップａ）は、もっとも最近のＩピクチャ、ＰピクチャおよびＢピクチャに対する現実のビット使用量と複雑度から前記推定ビット使用量を決定するステップを含む請求項４の方法。
【請求項９】
前記現在のピクチャはＢピクチャであり、ステップａ）は、もっとも最近のＩピクチャ、ＰピクチャおよびＢピクチャに対する現実のビット使用量と複雑度から前記推定ビット使用量を決定するステップを含む請求項４の方法。
【請求項１０】
ステップａ）はさらに、前記符号化された現在のピクチャを格納するために使われるバッファのアンダーフローまたはオーバーフローを回避するように計算する方法で前記推定ビット使用量を調整するステップを含む請求項４の方法。
【請求項１１】
前記現在のピクチャに対して推定ビット使用量を決定するステップは、前記推定ビット使用量の計算に対する平均ビット使用量または平均複雑度の変動の影響を減らすために、１以上のスタビライザ項を用いる請求項４の方法。
【請求項１２】
ステップａ）は、所定の範囲内に前記ＱＰの値が収まるように前記ＱＰをクリッピングするステップを含む請求項１の方法。
【請求項１３】
ステップｂ）は、前記符号化された現在のピクチャからの前記現在のピクチャの歪みを計算するステップを含み、前記歪みの計算は、複数のプロセッサユニット上で並列に実行される請求項１の方法。
【請求項１４】
前記歪みを計算するステップは、セクション単位で前記現在のピクチャの全体の歪みを計算し、前記現在のピクチャの異なるセクションに対する歪み計算は、それぞれの異なるセクションに対して異なるプロセッサユニットを用いて、並列に実行される請求項１３の方法。
【請求項１５】
ＮＡＬ復号スレッドは、前記現在のピクチャの各セクションに対して計算されたセクション単位の歪みを収集し、セクション単位の歪みから前記現在のピクチャの全体的な歪みを計算する請求項１４の方法。
【請求項１６】
前記歪みを計算するステップは、前記符号化された現在のピクチャのデブロッキングの前に実行される請求項１３の方法。
【請求項１７】
前記ステップｃ）は、
前記符号化された現在のピクチャに関する統計データを収集するステップ、
レート制御データバッファにある統計データを更新するステップ、
バッファオーバーフローの可能性を判定するために前記レート制御データバッファが一杯であるかどうかをチェックするステップ、または
バッファオーバーフロー回避メカニズムを実装するステップの１以上を含む請求項１の方法。
【請求項１８】
ステップａ）に先だって、前記レート制御データを含むレート制御データバッファの初期ステータスを設定するステップをさらに含む請求項１の方法。
【請求項１９】
前記初期ステータスを設定するステップは、前記現在のピクチャの複雑度を計算することを含む請求項１８の方法。
【請求項２０】
１以上のビデオピクチャを符号化する際のレート制御のためのコンピュータ実装されたシステムであって、
プロセッサと、
前記プロセッサに結合されたメモリと、
前記プロセッサによって実行可能な命令セットとを含み、
前記命令は、
ａ）レート制御データを用いて前記１以上のビデオピクチャの一つである現在のピクチャを符号化するために使われる量子化パラメータ（ＱＰ）を決定するための命令であって、前記ＱＰの決定の際にピクチャタイプ、ピクチャ複雑度、およびターゲットビットカウントを考慮に入れる命令と、
ｂ）命令ａ）で決定された前記ＱＰを用いて前記現在のピクチャを圧縮されたフォーマットに符号化し、符号化された現在のピクチャを生成するための命令と、
ｃ）前記符号化された現在のピクチャから決定された統計データにもとづいてレート制御データを更新するための命令とを含むシステム。
【請求項２１】
コンピュータプログラム命令が格納されたコンピュータ読み取り可能な記憶媒体であって、前記コンピュータプログラム命令は、実行されたときに、
ａ）レート制御データを用いて前記１以上のビデオピクチャの一つである現在のピクチャを符号化するために使われる量子化パラメータ（ＱＰ）を決定するステップであって、前記ＱＰの決定の際にピクチャタイプ、ピクチャ複雑度、およびターゲットビットカウントを考慮に入れるステップと、
ｂ）ステップａ）で決定された前記ＱＰを用いて前記現在のピクチャを圧縮されたフォーマットに符号化し、符号化された現在のピクチャを生成するステップと、
ｃ）前記符号化された現在のピクチャから決定された統計データにもとづいてレート制御データを更新するステップとを実行するように構成される記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本願は、本願と同日に出願された「シーンチェンジ検出」と題する同一出願人による同時係属の米国特許出願第１２／５５３，０６９号（アトーニードケット番号ＳＣＥＡ０８０７４ＵＳ００）に関連し、その内容全体を参照によりここに組み入れる。
【０００２】
本願は、本願と同日に出願された「並列デジタルピクチャ符号化」と題する同一出願人による同時係属の米国特許出願第１２／５５３，０７３号（アトーニードケット番号ＳＣＥＡ０８０７７ＵＳ００）に関連し、その内容全体を参照によりここに組み入れる。
【０００３】
本願は、本願と同日に出願された「ビデオ符号化において高速動き推定を実現するための閾値および早期停止の活用」と題する同一出願人による同時係属の米国特許出願第１２／５５３，０７５号（アトーニードケット番号ＳＣＥＡ０８０７８ＵＳ００）に関連し、その内容全体を参照によりここに組み入れる。
【０００４】
［技術分野］
本発明はビデオ符号化に関し、特にいろいろなビデオ符号化環境に対する高品質レート制御器に関する。
【背景技術】
【０００５】
多くのマルチメディアアプリケーションおよびデバイスにおいてデジタル信号圧縮が幅広く利用されている。符号化器／復号器（コーデック）を用いたデジタル信号圧縮により、オーディオやビデオ信号のようなストリーミングメディアをインターネット上で転送したり、ＣＤに格納することが可能になる。Ｈ．２６１、Ｈ．２６３、ＤＶ、ＭＰＥＧ−１、ＭＰＥＧ−２、ＭＰＥＧ−４、ＶＣ１、ＡＶＣ（Ｈ．２６４）を含め、多数の異なるデジタル信号圧縮の標準の規格がこれまで登場した。これらの規格は、他のビデオ圧縮技術とともに、ピクチャ内および連続するピクチャ間の空間的および時間的冗長性を除去することにより、ビデオフレームピクチャを効率的に表現することを追求している。そのような圧縮規格を用いることにより、ビデオコンテンツを高度に圧縮されたビデオビットストリームに乗せることができ、その結果、効率良くディスクに格納したり、ネットワーク上で伝送することができる。
【０００６】
ＭＰＥＧ−４（ＡＶＣ）は、Ｈ．２６４としても知られ、それ以前の規格と比べてきわめて高い圧縮を提供するビデオ圧縮規格である。Ｈ．２６４規格は、以前のＭＰＥＧ−２規格の最大２倍の圧縮を提供することが期待される。Ｈ．２６４規格はまた知覚的な品質においても改善を提供することが期待される。その結果、ますます多くのビデオコンテンツがＡＶＣ（Ｈ．２６４）符号化ストリームの形式で伝送されている。二つの競争するＤＶＤフォーマットであるＨＤ-ＤＶＤフォーマットとブルーレイ（商標）ディスクフォーマットは、必須のプレイヤ特性としてＨ．２６４／ＡＶＣハイ（high）プロファイル復号をサポートする。ＡＶＣ（Ｈ．２６４）符号化は、"Draft of Version 4 of H.264/AVC (ITU-T Recommendation H.264 and ISO/IEC 14496-10 (MPEG-4 part 10) Advanced Video Coding)" by Gary Sullivan, Thomas Wiegand and Ajay Luthra, Joint Video Team (JVT) of ISO/IEC MPEG & ITU T VCEG (ISO/IEC JTC1/SC29/WG11 and ITU T SG16 Q.6), 14th Meeting: Hong Kong, CH 18-21 January, 2005に詳しく記載されており、その全内容をすべての目的のためにここに参照により取り込む。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ビデオ信号符号化はしばしば、所与のビットレート、所与のフレームレートおよび所与のバッファサイズでビデオを符号化すべき状況に関わる。
【０００８】
ビデオ信号を符号化する際、ソースビットレートと、圧縮後のビットストリームを伝送するために利用可能なチャネル帯域幅との間のミスマッチに起因するクライアントバッファのアンダーフローまたはオーバーフローを避けるような方法を取ることが望ましい。こういった問題を解決するためにレート制御スキームが開発されてきた。レート制御スキームは次の二つの主要なカテゴリに分類される。固定チャネル帯域幅ビデオ伝送向けの固定ビットレート（ＣＢＲ）制御と、可変チャネル帯域幅ビデオ伝送向けの可変ビットレート（ＶＢＲ）制御である。これらのレート制御スキームはさらに、レート制御演算の単位にしたがって、たとえば、マクロブロック層、スライス層、またはフレーム層のレート制御に分類することができる。レート制御スキームは、バッファステータスにしたがって各符号化ユニットに適切なビットを割り当てる方法と、割り当てられたビットで各ユニットを適切に符号化するために符号化器の量子化パラメータ（ＱＰ）を調整する方法とを決定する。
【０００９】
本発明の実施の形態はこのような文脈で考えられた。
【課題を解決するための手段】
【００１０】
マルチプロセッサアーキテクチャを含むいろいろなビデオ符号化環境に対する高品質レート制御器に関する。本発明の実施の形態は、より正確で効果的なレート歪みモデルを提供し、より安定した知覚体験を与えるためによりスムースに量子化パラメータを遷移させる。
【００１１】
本発明の実施の形態によれば、予め指定された符号化条件が与えられると、レート制御器は、目標ビットレートと目標視覚品質に合わせるために、ビデオシーケンスの各ピクチャフレームに対する適切な量子化パラメータの系列を生成することができる。提案されるレート制御アルゴリズムは、異なるターゲットビットレート、フレーム解像度、バッファ制約条件、メモリ制約、固定／可変ビットレート、プロセッサアーキテクチャなど、いろいろな符号化条件に対して適用できることを狙っている。
【００１２】
ここに記述されるレート制御アルゴリズムは、ユーザのアプリケーションの要求によって課せられるビデオビットレートとビデオ品質を制御するために提案され、開発された。上述のように、レート制御器は、完全なビデオ符号化システムの不可欠な構成要素である。予め指定された符号化条件が与えられると、レート制御器は、目標ビットレートと目標視覚品質に合わせるために、ビデオシーケンスの対応するピクチャまたはフレームに対する適切な量子化パラメータの系列を生成してもよい。提案されるレート制御アルゴリズムは、異なるターゲットビットレート、フレーム解像度、バッファ制約条件、メモリ制約、固定／可変ビットレート、プロセッサアーキテクチャなど、いろいろな符号化条件に対して適用できることを狙いとする。
【図面の簡単な説明】
【００１３】
本発明の教示内容は、添付の図面と併せて、以下の詳細な説明を考慮すれば容易に理解できる。
【図１】４つの段階で実行されるレート制御を説明するブロック図である。
【図２】本発明のレート制御を説明するブロック図である。
【図３】レート制御の段階２におけるターゲットビット推定器のブロック図である。
【図４】本発明のレート制御の段階２におけるＱＰ制御器のブロック図である。
【図５】本発明の実施の形態に係るピクチャレベルのレート制御を用いたビデオ符号化を実施するための装置を説明する図である。
【図６】本発明の実施の形態に係るピクチャレベルのレート制御を用いたビデオ符号化を実施するための別の装置の例を説明する図である。
【図７】本発明の実施の形態に係るピクチャレベルのレート制御を実施するためのコンピュータ読み取り可能な命令を格納したコンピュータ読み取り可能な媒体のブロック図である。
【発明を実施するための形態】
【００１４】
以下の詳細な説明には、説明のための多くの具体的な詳細事項が含まれるが、それらに対する多くの変更や修正も本発明の技術範囲に含まれることは、当業者であれば誰でも理解するであろう。したがって、以下に説明する本発明の例示的な実施の形態は、クレームされた発明の普遍性をなんら損なうことなく、また限定も行うことなく記載されている。
【００１５】
提案するレート制御アルゴリズム１００は、図１に示すように段階１、段階２、段階３、および段階４の４つの段階に分けて記述される。段階１は主にレート制御データバッファ１０２の初期状態を設定するために使われる。レート制御データバッファ１０２は、レート制御アルゴリズムに関連するデータを格納するように構成される。そのようなデータには統計データ１０３として、１以上の以前に符号化したピクチャに対するビット群、１以上の以前に符号化されたピクチャおよび／または現在のピクチャに関するシーケンス情報１０５から判定された複雑度、たとえば１以上の以前に符号化されたピクチャから推定された量子化パラメータ、および他の関連するデータが含まれてもよい。統計データにはまた、符号化されたピクチャの再構成を対応する元のピクチャと比較することによって計算された歪みが含まれてもよい。一例として、歪みは、元のピクチャと再構成されたピクチャの間の二乗誤差の和として測定してもよい。歪みはまた、ブロック、マクロブロック、スライスなどのようなピクチャの対応するサブユニット間で測定されてもよい。
【００１６】
シーケンス情報１０５には、たとえば、フレームレートおよび／または特定のＧＯＰ（group of pictures）に対するビットレートが含まれてもよい。初期化段階とも呼ぶ段階１において、ソースピクチャ１０７が入力され、ユーザが指定した符号化パターンおよびビデオ検出結果にもとづいて、並べ替えられる。この段階において、パラメータをリセットし、メモリおよびバッファ空間を割り当ててもよい。この段階の過程で、符号化されるべきソースピクチャ１０７の複雑度を調べてもよい。
【００１７】
段階２において、レート制御データバッファ１０２に収集されたデータおよびソースビデオフレームにもとづいて、ピクチャレベルの量子化パラメータ（ＱＰ）が導出される。ピクチャレベルＱＰは、ソースピクチャ１０７のピクチャタイプ、ソースピクチャ１０７の複雑度、推定目標（ターゲット）ビット数、および潜在的なレート歪みモデルにもとづいて導出してもよい。ピクチャ歪み、バッファフル、および以前符号化されたフレームのＱＰクリッピングスキームのような他のファクタを考慮に入れて、ソースピクチャ１０７に対する最終的なＱＰを決定してもよい。
【００１８】
段階３において、段階２で決定された最終的なＱＰが、ソースピクチャ１０７を符号化するための１以上の符号化モジュール１０４に送られる。各符号化モジュール１０４は、イントラ検索およびモード決定のような典型的なピクチャ符号化機能を実装してもよい。段階３は、たとえば、ビデオフレームを現実に符号化する呼び出し関数にＱＰを渡すことによって実装してもよい。その結果得られる符号化されたピクチャ１０９は、符号化ピクチャバッファＣＰＢに格納される。段階３を実装するに当たり、任意の適切な符号化方法を用いてもよい。
【００１９】
段階４において、統計データはレート制御バッファ１０２に収集され、更新される。符号化されたソースピクチャ１０９に対応する符号化されたビットストリームのサイズが調べられ、元のソースピクチャ１０７に対するピクセルと、符号化されたソースピクチャ１０９からの再構成から得られるピクセルとの間の歪みが計算され、記録される。
【００２０】
レート制御データバッファに格納された統計データ１０３およびレート制御器２００の機能ブロックとの相互作用が図２に示される。初期段階（段階１）において、予め指定された制約事項および変数を定義するためにシーケンスレベル情報１０５を使用してもよい。さらに、バッファ管理と、レート制御器２００を他の主要なスレッドに結合させることとがこの段階で実行されてもよい。段階２において、ターゲットビット推定器１０６は、現在のピクチャ、フレーム、またはフィールドに対するターゲットビットカウントを推定する。推定器は、ターゲットビットカウント１１５を推定するために、レート制御データバッファ１０２におけるソースピクチャ情報１１３、たとえば入力されたソースピクセル、入力されたピクチャタイプ、およびＭＥフェーズ１のオプション情報を利用する。ＣＢＲ符号化条件においては、特別なクリッピング機構を用いて、バッファオーバーフローの潜在的なリスクを低下させてもよいことに留意する。
【００２１】
ここで用いられるように、ＭＥフェーズ１という表現は、動き推定（motion estimation）の第１フェーズのことである。ある実施の形態では、動きは２つのフェーズで実装されてもよい。第１は、ＭＥフェーズ１として知られるものである。典型的にはＭＥフェーズ１は、多少正確さが劣るが、それでも適切な動き情報を比較的低い計算コストで取得する。この情報はきわめて最新のものであり（たとえば、現在のピクチャ情報）、ターゲットビットの割り当てを支援するために使われる。
【００２２】
レート制御器２００の２つの重要な構成要素は、ターゲットビット推定器１０６とＱＰ制御器１１４である。これら２つの構成要素は、図２に示すように段階２を実装するために使われてもよい。ターゲットビット推定器１０６の動作の詳細は図３に図示される。予め指定されたパラメータ１１７を用いて、初期ビット割当量（バジェット）１１９を計算する。予め指定されたパラメータの例には、たとえば、ＧＯＰの単位のスライディングウインドウのサイズの判定が含まれる。ある実装では、１以上のＧＯＰ（たとえば４ＧＯＰ）におけるビットを初期ビット割当量として設定してもよい。もしＧＯＰが１秒毎に設定され、目標ビットレートが１Ｍｂｐｓ（毎秒１００万ビット）であるとしたら、初期ビット割当量はスライディングウインドウにおいて４，０００，０００ビットである。ビット割当量更新器１０８は、１以上の以前のピクチャから訂正されたビットの数１２１にもとづいて初期ビット割当量１１９を更新する。その結果得られた更新後のビット割当量１２３はビットカウント分配器１１０に入力される。
【００２３】
ビット割当量更新器１０８は、初期ジッタ（たとえば、不充分な過去データによる）および見込まれるコンテンツジッタを緩和するためにビット割当量にもとづいてスライディングウインドウを用いてもよい。たとえば、毎秒６Ｍビットで毎秒３０フレーム、毎秒１ＧＯＰのビデオシーケンスを符号化するために、スライディングウインドウのサイズは４ＧＯＰ長に設定される。すなわち、スライディングウインドウにおいて、符号化されるべき４×３０＝１２０ピクチャフレームに対して４×６Ｍビット＝２４Ｍビットが利用可能である。選択されたスライディングウインドウのサイズは、ビットレート精度とスムースなビデオ品質の間で妥協することによって決定される。一般的に言えば、ウインドウサイズを小さくすればするほど、厳格なビットレート制御器になり、より良いビットレート収束性を得るが、その結果は、ＱＰ変動が大きくなり、不安定なビデオ品質になる。ウインドウサイズを大きくすれば、レート制御器は、より長い期間の計画にもとづいてターゲットビットカウント１１５を調整するために、ビット割当量により柔軟性をもたせるようになるから、より安定した品質が得られる傾向がある。しかし、より大きなウインドウの欠点は収束速度であり、結果的に、目標ビットレートに一致する正確さは劣ることになる。両極端の例は、１フレームサイズのスライディングウインドウ（たとえば、上記の例では１／３０秒）と、符号化されるべきピクチャフレームの総数のスライディングウインドウである。
【００２４】
ターゲットビット推定器１０６に対する次のタスクは、現在のピクチャフレーム１０７にターゲットビットカウント１１５を割り当てる方法を決定することである。上記の例で最も簡単な方法は、１２０フレーム間で２４Ｍビットを均等に分配することである。しかし、この方法は、異なる符号化ピクチャタイプ（たとえば、Ｉ（Intra）ピクチャ、Ｐ（Predictive）ピクチャ、Ｂ（Bi-predictive）ピクチャ）があるという符号化特性や、１２０フレームの異なるピクチャ間にコンテンツの変動があることを無視したために、非効率的な分配に陥ることがある。
【００２５】
本発明の実施の形態において、ターゲットビットカウントを導出する際、異なるピクチャ符号化タイプを考慮に入れる。特に、ターゲットビット推定器１０６は、現在のピクチャ１０７に対する複雑度の値１２５を計算する複雑度計算器１１２を含んでもよい。複雑度計算器は、現在のピクチャタイプ、現在の複雑度および以前に符号化されたフレームに対する１以上の過去の複雑度にもとづいて現在のピクチャ１０７に対する複雑度を計算してもよい。さらに、複雑度計算器１１２はまたコンテンツの複雑度、現実のビット使用量、および現実の歪みを考慮に入れてもよい。たとえば、これに限らないが、ピクチャフレームに対するターゲットビットカウントを決定するための３つの異なる場合を以下で議論する。
【００２６】
ピクチャ複雑度を表すには多くの方法がある。単純な分散は、ピクチャ複雑度の表現の中の一例に過ぎない。それに代わって洗練された表現が望まれることもある。一例として、これに限定しないが、ピクチャにおけるマクロブロックの平均分散を用いてもよい。
【００２７】
ケース１では、現在のピクチャ１０７はシーンチェンジのあるピクチャである。ケース２では、現在のピクチャ１０７は、正規のＩピクチャであり、ケース３では、現在のピクチャは正規のＰピクチャである。
【００２８】
ある特定の実装によれば、もし現在のピクチャ１０７がＢピクチャであるなら、レート制御器は（それの関連する参照フレームからの）ＱＰに単にある定数Ｋを足したものを割り当ててもよい。定数Ｋは、最新の符号化ピクチャバッファ（ＣＰＢ）が一杯（フル）になることにより、それだけまたは部分的に決定される。Ｂピクチャを取り扱うこの方法により、符号化器はより一層、並列実行能力をもつようになる。すなわち、任意のＢピクチャ符号化は、任意の２つの対応する参照フレーム内で並列に実行することができる。
【００２９】
以下の議論において、ＮｉはスライディングウインドウにおけるＩピクチャの数、Ｎｐは当該ウインドウにおけるＰピクチャの数、Ｎｂは当該ウインドウにおけるＢピクチャの数である。Ｒｉ、ＲｐおよびＲｂは、それぞれタイプＩ、ＰおよびＢのピクチャに対する現実のビット使用量である。さらに、ｒｉ、ｒｐおよびｒｂは、それぞれＩ、ＰおよびＢのピクチャに対する推定ビットカウントである。Ｄｉ、ＤｐおよびＤｂとＭｉ、ＭｐおよびＭｂは、それぞれＩ、ＰおよびＢピクチャに対する歪みと複雑度を表す。次の机上の例は、時間ｔからｔ＋６までのビデオシーケンスを符号化するときの現実のビット使用量の系列のサンプルシナリオである。現在のピクチャに至るまでのピクチャタイプのシーケンスはＩ、Ｐ、Ｂ、Ｂ、Ｐ、Ｂ、Ｂ、ｋである。ここでｋは現在のピクチャ１０７を表し、これはたとえば、シーンチェンジのあるピクチャ（ケース１）、正規のＩピクチャ（ケース２）、または正規のＰピクチャ（ケース３）である。
レート：Ｒｉ（ｔ），Ｒｐ（ｔ＋１），Ｒｂ（ｔ＋２），Ｒｂ（ｔ＋３），Ｒｐ（ｔ＋４），Ｒｂ（ｔ＋５），Ｒｂ（ｔ＋６），ｒｋ（ｔ＋７）．
複雑度：Ｍｉ（ｔ），Ｍｐ（ｔ＋１），Ｍｂ（ｔ＋２），Ｍｂ（ｔ＋３），Ｍｐ（ｔ＋４），Ｍｂ（ｔ＋５），Ｍｂ（ｔ＋６），Ｍｋ（ｔ＋７）．
歪み：Ｄｉ（ｔ），Ｄｐ（ｔ＋１），Ｄｂ（ｔ＋２），Ｄｂ（ｔ＋３），Ｄｐ（ｔ＋４），Ｄｂ（ｔ＋５），Ｄｂ（ｔ＋６）．
【００３０】
時間ｔで始まるスライディングウインドウにおけるビット割当量はＷＢで表される。当該ウインドウは時間ｔから現在のピクチャ１０７の前のピクチャまでのすべてのフレームを含む。一般的に、現在のピクチャに対する推定ビット使用量および複雑度をそれぞれ以下ではｒｋおよびＭｋと記す。
【００３１】
ビットカウント分配器１１０が、現在のピクチャ１０７に対するターゲットビットカウントｒｋを推定しようとしている場合を考える。一般に、当該ウインドウは、任意のタイプのピクチャを適切な枚数もつことに留意する。
【００３２】
現在のピクチャがシーンチェンジのあるピクチャであるケース１では、現在のピクチャに対するターゲットビットカウント１１５（すなわちｒｋ（ｔ＋７））は次のように計算される。
ｒｋ（ｔ＋７）＝ＷＢ（ｔ＋６）＊ＡＲｉ／（Ｎｉ＊ＡＲｉ／ＡＭｉ＋Ｎｐ＊ＡＲｐ／ＡＭｐ＋Ｎｂ＊ＡＲｂ／ＡＭｂ
ここで、ＡＲｋは、もっとも最近のシーンチェンジＩピクチャ（そのピクチャは除く）まで遡るすべてのｋピクチャにわたる平均的な現実のビットカウントである。ＡＭｋは、もっとも最近のシーンチェンジＩピクチャ（そのピクチャは除く）まで遡るすべてのｋピクチャにわたる平均複雑度である。ここでｋは現在のピクチャに対するピクチャタイプであり、たとえば、Ｉ、ＰまたはＢピクチャタイプのいずれかである。
【００３３】
現在のピクチャ１０７が正規のＩピクチャであるケース２では、目標は、もっとも最近のＰピクチャからのスムースな遷移を提供することである。そのような場合、ターゲットビットカウントは、最新のＩピクチャと最新のＰピクチャの間で歪み、現実のビット使用量およびピクチャ複雑度の比を計算することによって導出される。上述の例のピクチャタイプのシーケンスでは、現在のピクチャの前のもっとも最近のＰピクチャはｔ＋４のＰピクチャである。現在のピクチャ１０７が正規のＩピクチャである場合、現在のＩピクチャは、コンテンツ特性の観点ではもっとも最近のＩピクチャに類似していることが想定される。そのため、ビットレートをほんの微調整することだけでよい。そうでないなら、現在のフレームに対してシーンチェンジＩピクチャが記録される。現在のピクチャ１０７が正規のＩピクチャであり、シーンチェンジＩピクチャではないと仮定すると、現在のピクチャに対するターゲットビットカウント１１５（すなわちｒｋ（ｔ＋７））は次のように計算される。
ｒｋ（ｔ＋７）＝［Ｒｉ（ｔ）／Ｒｐ（ｔ＋４）］＊［Ｄｉ（ｔ）／Ｄｐ（ｔ＋４）］＊［Ｍｉ（ｔ）／Ｍｐ（ｔ＋４）］＊Ｒｐ（ｔ＋４）
【００３４】
現在のピクチャ１０７が正規のＰピクチャであるケース３では、もっとも最近のＩ、ＰおよびＢピクチャからの統計的なデータを用いて、ターゲットビットカウント１１５を計算する。たとえば、上述のピクチャシーケンスが与えられた場合、推定ビットカウントｒｋは次のように計算される。
ｒｋ（ｔ＋７）＝ＷＢ（ｔ＋６）＊［Ｒｐ（ｔ＋４）／Ｍｐ（ｔ＋４）］／［Ｎｉ＊Ｒｉ（ｔ）／Ｍｉ（ｔ）＋Ｎｉ＊Ｒｐ（ｔ＋４）／Ｍｐ（ｔ＋４）＋Ｎｂ＊Ｒｂ（ｔ＋６）／Ｍｂ（ｔ＋６））］
【００３５】
上記のターゲットビットカウント計算はピクチャ特性にだけ依存し、符号化ピクチャバッファＣＰＢがＣＰＢｓｉｚｅと記される有限のサイズである状況を考慮していない。現実のアプリケーションに対しては、ビットカウント分配器１０８は、ＣＰＢステータスとビットレート精度にしたがって最終的なターゲットビットカウント１１５を調整することで、ＣＰＢオーバーフローおよびアンダーフローのリスクを減らしてもよい。そのような調整を容易にするために、ターゲットビット推定器１０６は、バッファ調整器１１６を含み、バッファ調整器１１６が、ターゲットビットカウント１１５の調整のために関連するＣＰＢステータス情報をビットカウント分配器１０８に提供する。
【００３６】
ターゲットビットカウント１１５を調整する際にＣＰＢステータス情報を考慮に入れる方法は多数ある。たとえば、一定ビットレート（ＣＢＲ）アプリケーションでは、バッファがオーバーフローに近づいているか、あるいはアンダーフローに近づいているかによってターゲットビットカウント１１５を異なるやり方で調整してもよい。潜在的なオーバーフロー状態またはアンダーフロー状態が存在するかどうかを判定する際、符号化ピクチャバッファフルＣＰＢｆｕｌｌと呼ばれる量を定義することが有益である。これは、符号化ピクチャバッファＣＰＢの有限サイズＣＰＢｓｉｚｅに対するＣＰＢに現在格納されているデータ量の比とみなすことができる。すなわち、ＣＰＢｆｕｌｌ＝ＣＰＢｃｕｒｒ／ＣＰＢｓｉｚｅである。たとえば、潜在的なＣＰＢオーバーフローは、ＣＰＢｆｕｌｌが増えており、あらかじめ定められた上限閾値ＣＰＢｍａｘを超える場合に存在する。そのような場合、ターゲットビットカウント１１５（ｒｋ（ｔ＋７））を次のように調整してＣＰＢオーバーフローのリスクを減らす。
ｒｋ（ｔ＋７）＝ｒｋ（ｔ＋７）＊（１．０＋Ｃ＊（ＣＰＢｆｕｌｌ−ＣＰＢＴ−ＭＡＸ）
ここでＣは一定の乗数（たとえば２）である。
【００３７】
あるいは、ＣＰＢｆｕｌｌが減少しており、あらかじめ定められた下限閾値ＣＰＢｍｉｎを下回る場合、符号化ピクチャバッファＣＰＢは潜在的なＣＰＢアンダーフローに近づいている。そのような状況では、ターゲットビットカウント１１５（すなわちｒｋ）を次のように調整してＣＰＢアンダーフローのリスクを減らす。
ｒｋ（ｔ＋７）＝ｒｋ（ｔ＋７）＊（１．０＋Ｃ＊（ＣＰＢｍｉｎ−ＣＰＢｆｕｌｌ）
ここでＣは一定の乗数（たとえば２）であり、０．０＜ＣＰＢｍｉｎ＜ＣＰＢｍａｘ＜１．０である。
【００３８】
可変ビットレート（ＶＢＲ）アプリケーションでは、ＣＰＢオーバーフローは、長い初期遅延に起因することが多い（すなわち、ＣＰＢは符号化が始まる前にほとんどフルになっている）。そこで、ターゲットビットカウント１１５を次のように調整する。
もしＣＰＢｃｕｓｈｉｏｎがｓｅｃ＿ｔｈｒｅｓｈｏｌｄより小さいならば、
ｒｋ（ｔ＋７）＝ｒｋ（ｔ＋７）＊（１．０＋ｉｎｃｒ＿％）
ここで、ＣＰＢｃｕｓｈｉｏｎ＝（ＣＰＢｓｉｚｅ−ＣＰＢ＿ｃｕｒｒ）／（符号化器のターゲットビットレートｔａｒｇｅｔ＿ｂｉｔｒａｔｅ）であり、０．０＜ｉｎｃｒ＿％＜１．０である。
【００３９】
ｓｅｃ＿ｔｈｒｅｓｈｏｌｄ項は、時間の単位（たとえば秒）のＣＰＢクッションに対する閾値である。一例として、これに限定しないが、ＣＰＢｃｕｓｈｉｏｎが１秒より小さいなら、ｒｋ（ｔ＋７）の値を上記の式にしたがって増やす。
【００４０】
図２を再び参照して、ターゲットビット推定器１０６はターゲットビットカウントをＱＰ制御器１１４に送信する。ＱＰ制御器１１４は、ターゲットビットカウント１１５と、レート制御データバッファ１０２にある歪みとソースピクセル情報とを用いて、ＱＰを導出する。一例として、限定するものではないが、ＱＰ制御器１１４は図４に示すようにＱＰを導出してもよい。具体的には、ＱＰ制御器１１４は、目標複雑度、２以上の以前のフレームのウインドウにわたる平均複雑度、および複雑度スタビライザファクタにもとづいて複雑度ファクタを計算する複雑度関数を実装してもよい。さらに、ＱＰ制御器１１４は、以前のフレーム、２以上の以前のフレームのウインドウにわたって取られた平均歪み、および歪みスタビライザファクタにもとづいて歪みファクタを計算する歪み関数を実装してもよい。また、ＱＰ制御器は、現在のフレーム１０７に対するターゲットビットカウント、２以上の以前のフレームのウインドウにわたって取られた平均ビットカウント、およびビットカウントスタビライザファクタにもとづいて推定されたビットカウントを計算する関数を実装してもよい。
【００４１】
図４に示すＱＰ制御器１１４は、複雑度、歪みおよびビットカウントを計算する機能ブロック（ｆ（））を含んでもよい。各機能ブロックは、入力として１以上のスタビライザファクタを受け取ってもよい。スタビライザは、複雑度、ビットカウントおよび歪みにおける大きな変動を減らすために利用される。一例として、限定するものではないが、次のタイプの数式にしたがって推定ビットカウントＡを計算する際に、平均ビットカウントＢおよび平均複雑度Ｃにおける変動の影響を減らすために、Ｓ１、Ｓ２で示すスタビライザファクタを用いてもよい。
Ａ＝（Ｂ＋Ｓ１）／（Ｃ＋Ｓ２）、ここでＳ１およびＳ２はスタビライザである。
【００４２】
計算Ａにおける平均ビットカウントおよび平均複雑度の大きな変動の影響を減らすために、レート制御器１１４は、スタビライザ項Ｓ１およびＳ２に一定または適応的な値を割り当ててもよい。これにより、レート制御器１１４は、たとえば、Ｂ／Ｃのような単純な比で得られるよりも安定した推定ビットカウントＡの値を得ることができる。スタビライザの値を適切に選ぶなら、そのスタビライザの値は、（Ｂ＋Ｓ１）／（Ｃ＋Ｓ２）の値を安定させる傾向を示す。
【００４３】
同様のスタビライザ項を用いて、複雑度と歪みファクタの計算も同じように安定化させてもよい。
【００４４】
ＱＰ制御器１１４は、ビットカウント、歪みおよび複雑度のファクタにもとづいて生のＱＰ値を決定するＱＰ変調器を含んでもよい。ＱＰ制御器はさらに、その結果得られるＱＰ値の範囲を制限するクリッピング機構１１８を含んでもよい。
【００４５】
想定されたレート歪みモデルに単に基づくだけの従来のアプローチとは違って、提案されたレート制御器２００は、ピクチャタイプ、ピクチャ複雑度、ピクチャ歪みおよびターゲットビットカウント１１５といった、主要なファクタの相互作用を考慮することによって、ＱＰを導出する。これらのファクタとその相互作用の関係を用いて、以下のアプローチを取ることができる。
【００４６】
図４に示すように、ＱＰ制御器１１４は、ビットカウント分配器１１０から計算されたターゲットビット割当量にもとづいて最終的なＱＰ値１２７を導出する。前述のように、ＱＰ制御器１１４は、レート制御器２００における重要な構成要素の一つである。ＱＰ制御器１１４は、ビットカウントおよび視覚的品質に直接的な影響を及ぼす。最高品質を達成するために、インタラクティブなアプローチを用いて、最良のＱＰを見つけることによって歪みを最小化してもよい。しかしこれは効率が悪い。それとは対照的に、本発明の実施の形態では、より効率の良い方法で適度に良い視覚品質を得ることを目標とする。
【００４７】
安定したビデオ品質を維持するために、ＱＰ制御器１１４は、最初は現在のピクチャ１０７に対するピクチャタイプにもとづいているＱＰを導出する。ピクチャタイプが異なれば、それに対応するＱＰを導出する方法も異なる。一例として、限定するものではないが、５つの異なるケースを考えることができる。（１）ビデオシーケンスの一番最初のＩＤＲピクチャ、（２）シーンチェンジのあるＩＤＲピクチャ、（３）正規のＩＤＲおよびＩピクチャ、（４）正規のＰピクチャ、および（５）非参照Ｂピクチャ。
【００４８】
ここで、ＩＤＲピクチャ（またはＩＤＲフレーム）は、Ｉピクチャ（またはＩフレーム）の特別なタイプである。主な違いは、符号化器がＩＤＲをピクチャ／フレームに割り当てるときには、フレームバッファにあるすべての参照フレームの情報がなくなることを意味することである。その結果、これらの参照フレームはそれ以降の符号化において使うことができなくなる。
【００４９】
ビデオシーケンスにおける最初のＩＤＲピクチャの場合におけるＱＰは、複雑度、符号化条件、および一般的な前提条件にもとづいて導出される。基本的なアイデアは、ＩピクチャとＰピクチャの関係、およびＰピクチャとＢピクチャの関係を符号化ビット複雑度の観点で発見することである。スライディングウインドウにおいてＮ枚のピクチャがあり、Ｎ＝Ｎｉ＋Ｎｐ＋Ｎｂが成り立つ場合を考える。ここで、Ｎｉ，ＮｐおよびＮｂはそれぞれ、このウインドウにおいてＩ、ＰおよびＢピクチャの数である。最初のＩＤＲに対するターゲットビットカウント１１５（すなわちｒｋ）は次のように計算される。
ｒｋ＝ＷＢ／Ｎｉ＋Ｎｐ／ｒａｔｉｏｐ＋Ｎｂ／ｒａｔｉｏｂ
ｒａｔｉｏｐおよびｒａｔｉｏｂの値は次のように計算される。
ｒａｔｉｏｐ＝ＣＰ／ｂｉｔｓ＿ｐｅｒ＿ｍａｃｒｏｂｌｏｃｋ
ここでＣｐは定数であり、
ｂｉｔｓ＿ｐｅｒ＿ｍａｃｒｏｂｌｏｃｋ＝ｔａｒｇｅｔ＿ｂｉｔ＿ｒａｔｅ／（ｔａｒｇｅｔ＿ｆｒａｍｅ＿ｒａｔｅ＊ｆｒａｍｅ＿ｗｉｄｔｈ／１６＊ｆｒａｍｅ＿ｈｅｉｇｈｔ／１６）
である。
【００５０】
上記の式において、この例では、現在のピクチャはシーケンスにおける最初のピクチャであるから、ｐｉｃｔｕｒｅ＿ｃｏｍｐｌｅｘｉｔｙ項は、現在のピクチャに対する複雑度を指す。
【００５１】
ターゲットビットカウント１１５（ｒｋ）が導出された後、単純な一次ＲＤモデルを適用して、量子化値（ここでは現実のＱＰと呼ばれる）を取得する。この量子化値は最終的なＱＰ（ここではシンタックスＱＰと呼ばれ、これはシンタックスエレメントであり、ビットストリームに埋め込まれる）とはかなり異なるものである。なぜなら前者のＱＰは量子化器において現実に使われるものであるからである。現実のＱＰをシンタックスＱＰに変換するために、式ＱＰｓｙｎｔａｘ＝６．０＊ｌｏｇ１０（ＱＰａｃｔｕａｌ）／ｌｏｇ１０（２．０）が使われる。次に、ＱＰｓｙｎｔａｘの結果的な値は、最小値ＱＰｍｉｎと最大値ＱＰｍａｘの間のあらかじめ定められた範囲にクリップされて、最終的なＱＰ値１２７が生成される。
【００５２】
シーンチェンジのあるＩＤＲピクチャの場合は、新しいＱＰは、それ以前のすべてのＩピクチャからシーンチェンジのある以前の最も近いＩＤＲに至るまでの平均的な複雑度、平均的なビット使用、および平均的なＱＰを含む統計的データ１０３にもとづいて導出される。
【００５３】
ＱＰ制御器１１４はまず、過去のＩフレームに対して（平均ビット使用／平均複雑度）で定義される古いＲ／Ｍ比を判定する。ＱＰ制御器１１４は次に、新しい相対的なＲ／Ｍ比を次のように導出する。
ｎｅｗ  Ｒ／Ｍ  ｒａｔｉｏ＝（ｏｌｄ  Ｒ／Ｍ  ｒａｔｉｏ）／（ｒｋ／Ｍｋ）
ここで、ｒｋとＭｋは、現在のフレーム１０７に対するターゲットビットカウントと複雑度を指す。古いＲ／Ｍ比は、Ｒｋ−１／Ｍｋ−１から決定される。ここで、Ｒｋ−１とＭｋ−１は、現在のフレーム１０７の前のフレームに対する現実のビット利用および複雑度である。
【００５４】
次に、新しい現実のＱＰ値は、
ＱＰａｃｔｕａｌ＝（ａｖｅｒａｇｅ  ＱＰａｃｔｕａｌ）＊（ｎｅｗ  Ｒ／Ｍ  ｒａｔｉｏ）
にしたがって決定される。
【００５５】
新しい現実のＱＰ値は、上述のように新しいシンタックスＱＰ値に変換される。
【００５６】
現在のフレーム１０７がシーンチェンジフレームである場合、新しいＱＰ値は、直前のフレームに対するＱＰ値とはかなり異なることに留意する。大きなＱＰ変動を減らすために、ＱＰクリッピングメカニズム１１８は、以前のフレームとの複雑度の差を計算してもよい。次に、クリッピングメカニズム１１８は、ＱＰ変化を強制的に制限するためにＱＰ変化の範囲をきめてもよい。一例であり、限定するものではないが、次のクリッピングスキームを用いてもよい。
【００５７】
まず、範囲ＱＰｒａｎｇｅを次のように定義する。
ＱＰｒａｎｇｅ＝乗数＊（ｍａｘ（Ｍｋ，Ｍｋ−１）／ｍｉｎ（Ｍｋ，Ｍｋ−１））
ここで、Ｍｋ−１は現在のフレームの直前のフレームに対する複雑度である。
【００５８】
乗数は、経験的に決められる定数である。一例として、限定するものではないが、定数２をもつ乗数器を用いてもよい。
【００５９】
したがって、最終的なＱＰ値１２７は、次の範囲に制限される。
［ＱＰｓｙｎｔａｘ−ＱＰｒａｎｇｅ，ＱＰｓｙｎｔａｘ＋ＱＰｒａｎｇｅ］
【００６０】
現在のピクチャ１０７が正規のＩＤＲであり、Ｉピクチャである場合は、ＱＰ制御器１１４はＱＰｓｙｎｔａｘの値に直接作用する。そのピクチャフレームは正規フレームであり、それは、ビデオ特性には何ら気づきうる変化は起きていない（そうでないなら、シーンチェンジが記録されているはずである）ことを意味するから、比較的安定したＱＰｓｙｎｔａｘの値を維持するために、複雑度に対する現実のビットカウントの比にＬＯＧ演算を適用してもよい。次のＲＤ式を用いて、以前のフレームに対するＱＰｓｙｎｔａｘの値（ＱＰｋ−１で表す）から現在のフレーム１０７に対するＱＰｓｙｎｔａｘの値（ＱＰｋで表す）を導出する。
ＬＯＧ（ビットレート／複雑度）＊ＱＰｓｙｎｔａｘ＝一定
【００６１】
上記の式にもとづいて、現在のフレーム１０７に対するＱＰｓｙｎｔａｘの最終的な値が次のように計算される。
ＱＰｋ＝ＬＯＧ［（Ｒｋ−１／Ｍｋ−１）＊（ＱＰｋ−１）］／ＬＯＧ（ｒｋ／Ｍｋ）
ここで、ＱＰｋ−１は、現在のフレーム１０７の前のフレームに対するＱＰｓｙｎｔａｘの値である。
【００６２】
現在のフレーム１０７が正規のＰピクチャである場合、ＱＰ制御器１１４は、ＱＰａｃｔｕａｌの値に対して対数的に演算することにより、ＱＰｓｙｎｔａｘの安定した値を維持することができる。現在のフレームに対する新しい現実のＱＰ値（ＱＰａｃｔｕａｌ＿ｋで表す）は次のように導出される。
ＱＰａｃｔｕａｌ＿ｋ  ＝  ＬＯＧ（Ｒｋ−１）＊（ＱＰａｃｔｕａｌ＿ｋ−１）／ＬＯＧ（ｒｋ２＊Ｒｋ−１）
【００６３】
その後、ＱＰａｃｔｕａｌ＿ｋの値は上述のようにＱＰｓｙｎｔａｘ値に変換される。
【００６４】
もし現在のピクチャ１０７が正規のＢピクチャ、すなわち、非参照Ｂピクチャであるなら、誤差は決して伝搬しない。したがって、その一つ前の参照フレームのシンタックスＱＰに単純に２を足すだけで、一定のＱＰを得ることができる。この状況はまた、並列符号化に対する機会を与える。なぜなら、一般に、任意の２つの連続するＢピクチャ間には依存関係がないからである。ピクチャ間のデータ依存性がないことは、符号化プロセスを並列化するための入り口として役立つ。２つの参照ピクチャ内のＢピクチャ符号化は並列に実行できる。
【００６５】
符号化段階（段階２）において、レート制御アルゴリズムは単にＱＰをその呼び出し関数に返してもよい。最終段階において、ビデオフレーム／フィールド符号化の直後、レート制御は現実のビット使用量（テクスチャビットとオーバーヘッドビットは分離されるであろう）、現実のピクチャ歪み、および現実のバッファフル状況を収集し、レート制御データバッファ１０３においてこの情報を更新する。
【００６６】
段階２から段階４までの処理は、一連のビデオフレームのビデオ符号化の過程で繰り返し実行されてもよい。本発明の実施の形態において、レート制御器は、参照ピクチャ（すなわち、ピラミッド符号化における参照ピクチャとして用いられる場合は、Ｉピクチャ、ＰピクチャまたはＢピクチャ）に対するターゲットビットカウントを考慮することだけが必要であることに留意する。
【００６７】
図５は、上述のように３以上のプロセッサ上でのストリーミングデータの並列復号を実装するために用いられるコンピュータ装置５００のブロック図を示す。この装置５００は、一般に、複数のプロセッサモジュール５０１Ａ、５０１Ｂ、５０１Ｃとメモリ５０２を備える。複数のプロセッサモジュールを用いるプロセッシングシステムの例として、プロセッサモジュール５０１Ａ、５０１Ｂおよび５０１Ｃは、Ｃｅｌｌプロセッサの構成要素である。
【００６８】
メモリ５０２は、例えば、ＲＡＭ、ＤＲＡＭ、ＲＯＭなどの集積回路の形態を取ってもよい。メモリ５０２はまた、すべてのプロセッサモジュール５０１によってアクセス可能なメインメモリであってもよい。ある実施の形態では、プロセッサモジュール５０１Ａ、５０１Ｂ、５０１Ｃは、関連付けられたローカルメモリ５０５Ａ、５０５Ｂ、５０５Ｃをもつ。符号化プログラム５０３は、プロセッサモジュール５０１上で実行することができるプロセッサ読み取り可能なインストラクションの形態でメインメモリ５０２に格納されてもよい。符号化プログラム５０３は、たとえば、図１、図２、図３および図４を参照して上述したようなレート制御アルゴリズムを用いてビデオフレームデータを符号化するように構成される。具体的には、符号化プログラムは、ＱＰ値を決定する際、ピクチャタイプ、ピクチャ複雑度、ピクチャ歪みおよびターゲットビットカウントを考慮に入れるやり方でＱＰ値を計算する。プログラム５０３は、任意の適切なプロセッサ読み取り可能な言語、たとえば、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、アセンブリ、ＭＡＴＬＡＢ、フォートラン、および他の様々な言語で書かれる。レート制御データ５０７は、メモリ５０２、たとえば、上述のゆにレート制御バッファに格納される。そのようなレート制御データには、過去のフレームのウインドウに対するビット利用状況、複雑度、歪み、ＱＰなどに関する統計データが含まれる。ある実施の形態では、符号化プログラム５０３の実行過程で、プロセッサモジュール５０１Ａ、５０１Ｂ、５０１Ｃによって並列処理するために、プログラムコードおよび／またはデータ５０７の一部をローカルストア５０５Ａ、５０５Ｂおよび５０５Ｃにロードしてもよい。
【００６９】
装置５００はさらに、入出力（Ｉ／Ｏ）装置５１１、電源（Ｐ／Ｓ）５１２、クロック（ＣＬＫ）５１３およびキャッシュ５１４などの公知のサポート機能５１０を備えてもよい。装置５００はオプションとして、プログラムおよび／またはデータを格納するためのディスクドライブ、ＣＤ−ＲＯＭドライブ、テープドライブなどの大容量記憶装置５１５を備えてもよい。装置５００はまた、オプションとして、装置５００とユーザの相互作用を容易にするために、ディスプレイユニット５１６とユーザインタフェースユニット５１８を備えてもよい。ディスプレイユニット５１６は、テキスト、数値、グラフィカルシンボルや画像を表示する陰極線管（ＣＲＴ）、またはフラットパネルスクリーンの形態であってもよい。ユーザインタフェース５１８は、キーボード、マウス、ジョイスティック、ライトペンや他の装置を備えてもよく、これらは、グラフィカルユーザインタフェース（ＧＵＩ）と併せて使われてもよい。装置５００はまた、ネットワークインタフェース５２０を含み、これにより、当該装置がインターネットのようなネットワーク上で他の装置と通信することが可能になる。これらの構成要素はハードウェア、ソフトウェア、ファームウェアまたはこれらの２以上の組み合わせによって実装される。
【００７０】
装置５００の複数のプロセッサを用いて並列処理を効率化する付加的な方法が多数ある。たとえば、２以上のプロセッサ５０１Ａ、５０１Ｂ、５０１Ｃ上でコードを複製することによって、処理ループを「アンロール（unroll）」し、各プロセッサに異なるデータ部分を処理するためにコードを実装させることができる。そのような実装によって、ループ設定に関連するレイテンシを回避することができる。
【００７１】
上述したように、上記のレート制御のある部分（たとえば歪み計算）はマルチプロセッサシステム上で実装される。並列処理を実装することができるマルチプロセッサシステムの一つの例は、セルプロセッサとして知られる。セルプロセッサとして分類できる異なるプロセッサアーキテクチャが多数ある。例示であり、限定するものではないが、図６は、セルプロセッサ６００の一つのありうる構成を示す。セルプロセッサ６００は、メインメモリ６０２、一つのＰＰＥ（power processor element）６０４、および８個のＳＰＥ（synergistic processor element）６０６を備える。あるいは、セルプロセッサ６０１は、任意の数のＳＰＥで構成されてもよい。
【００７２】
例示として、セルプロセッサ６００は、セル・ブロードバンド・エンジン・アーキテクチャ（ＣＢＥＡ）準拠のプロセッサとして知られるアーキテクチャで特徴づけられる。ＣＢＥＡ準拠のアーキテクチャにおいて、複数のＰＰＥはＰＰＥグループに結合され、複数のＳＰＥはＳＰＥグループに結合されてもよい。例示のために、セルプロセッサ６００は、一つのＳＰＥと一つのＰＰＥをもつ一つのＳＰＥグループと一つのＰＰＥグループだけをもつとして図示している。別の構成として、セルプロセッサは、ＰＰＥの複数のグループとＳＰＥの複数のグループを含むことができる。ＣＢＥＡ準拠のプロセッサは、たとえば、「セル・ブロードバンド・エンジン・アーキテクチャ」に詳細に記述されており、これは、http://www-306.ibm.com/chips/techlib/techlib.nsf/techdocs/1AEEE1270EA2776387257060006E61BA/$file/CBEA_01_pub.pdfにおいてオンラインで利用可能であり、その内容を参照によりここに取り込む。
【００７３】
例示として、ＰＰＥ６０４は、キャッシュが関連付けられた６４ビットのパワーＰＣプロセッサユニット（ＰＰＵ）であってもよい。ＰＰＥ６０４はオプションとしてベクタマルチメディア拡張ユニットを含んでもよい。各ＳＰＥ６０６は、ＳＰＵ（synergistic processor unit）とローカルストア（ＬＳ）を含む。ある実装では、ローカルストアは、たとえば、コードとデータ用のおよそ２５６キロバイトのメモリ容量をもってもよい。ＳＰＵは、典型的にはシステム管理機能を実行しないという点で、ＰＰＵよりも単純な計算ユニットである。ＳＰＵは、ＳＩＭＤ（single instruction, multiple data）機能を有し、典型的にはデータ処理を行い、割り当てられたタスクを行うために（ＰＰＥにより設定されたアクセス特性にしたがって）要求されたデータ転送を開始する。ＳＰＵにより、システム６００は、より高い計算ユニット密度を要求するアプリケーションを実装し、提供された命令セットを効率良く利用することができるようになる。ＰＰＥ６０４によって管理されるシステム６００の相当数のＳＰＥによって、広範囲のアプリケーションにわたって費用対効果の高い処理が可能になる。
【００７４】
メモリ６０２、ＰＰＥ６０４、およびＳＰＥ６０６は、リングタイプのエレメント相互接続バス６１０を介して、互いに通信したり、Ｉ／Ｏ装置６０８と通信する。メモリ６０２には、上述のレート制御データ５０７と共通する特徴をもつレート制御データ６０３が含まれる。メモリ６０２にはまた、上述の符号化プログラム５０３と共通する特徴をもつ符号化プログラム６０９が含まれる。少なくとも一つのＳＰＥ６０６のローカルストア（ＬＳ）には、符号化命令６０５および／またはレート制御データの一部および／または以下に説明するように並列に処理される入力されたビデオフレームデータが含まれる。ＰＰＥ６０４のＬ１キャッシュには、上述の符号化プログラム５０３と共通する特徴をもつコード命令６０７が含まれる。命令６０５およびデータ６０７はまた、必要なときにＳＰＥおよびＰＰＥによってアクセスするためにメモリ６０２に格納されてもよい。
【００７５】
図１に示し、図２〜４を参照してさらに説明したレート制御アルゴリズムは、一連の関数呼び出しを通して、図５または図６を参照して説明したタイプの装置に実装することができる。たとえば、初期化段階（段階１）は、PicRateCtrlInit()と呼ばれる関数を呼び出すことにより実装される。PicRateCtrlInit()関数は、符号化の全体の進行において、符号化プログラム５０７または６０３の符号化ＳＰＵメイン制御スレッドによって一回だけ呼び出される。このように、PicRateCtrlInit()関数は、符号化プログラムのレート制御の部分に対する任意のエントリーポイントとして作用する。レート制御インスタンスのメモリが十分ではない場合、PicRateCtrlInit()関数は、エラーメッセージを返す。レート制御インスタンスのメモリは、レート制御バッファにおいて利用可能な空間の総量と同じである。PicRateCtrlInit()関数はまた、レート制御インスタンスのメモリがレート制御インスタンスによって現在使用中である場合にも、エラーメッセージを返す。エラー状態が全く存在しないなら、PicRateCtrlInit()関数は、レート制御ハンドルを生成し、入力されたパラメータにもとづいてメモリを割り当てる。ここではレート制御ハンドルという用語は、コンピュータプログラム実装においてよく使われるものであり、特定のタイプのポインタのことである。レート制御ハンドルは、特定のレート制御器のデータがアクセスされるメモリアドレスへのポインタである。Ｃｅｌｌプロセッサ実装という特定のケースでは、PicRateCtrlInit()への入力は、（１）ＳＰＵスレッドコンフィグレーションバッファ、（２）テストドライバ制御パラメータ、（３）ストリームレベルのコンフィグレーション、および（４）フレームレベルコンフィグレーションが含まれる。PicRateCtrlInit()関数の出力は、ピクチャレート制御バッファ１０２へのハンドルである。
【００７６】
準備段階（図１の段階２）はPicRateCtrlPrepare()と呼ばれる関数を呼び出すことによって実装される。この関数の主なタスクは、入力されたデータにもとづいてＱＰ値を導出することである。PicRateCtrlPrepare()関数は、各ピクチャに対して符号化の始まりにおいて呼び出され、レート制御アルゴリズムの要所である。
【００７７】
PicRateCtrlPrepare()関数への入力には、レート制御ハンドル、フレームレベルコンフィグレーション、入力フレームバッファ、およびレート制御データバッファが含まれる。PicRateCtrlPrepare()関数は次の演算を実装する。
・ＣＢＲの場合におけるバッファフルのチェック
・スライディングウインドウにおける総ビットレート割当量の調整
・たとえば上述のように、ターゲットビット推定器１０６を用いた現在のピクチャに対するターゲットビット１１１の決定
・ピクチャタイプがＩ／ＩＤＲである場合、たとえば上述のようにＱＰ制御器１１４を用いたピクチャＩのＱＰの導出
・ピクチャタイプがＰである場合、たとえば上述のようにＱＰ制御器１１４を用いたピクチャＰのＱＰの導出
・ピクチャタイプが非参照Ｂである場合、たとえば上述のようにＱＰ制御器１１４を用いた非参照ピクチャＢのＱＰの導出
・ピクチャタイプが参照Ｂである場合、たとえば上述のようにＱＰ制御器１１４を用いた参照ピクチャＢのＱＰの導出
・あらかじめ指定された範囲（PicRateControlInit()で定義されてもよい）内でＱＰをクリッピングすることによるスムースな視覚品質の遷移の保証。この演算はＱＰクリッピング機構１１８に関して上述のように実装される。
【００７８】
符号化段階（段階３）は、PicRateCtrlEncode()関数を呼び出すことによって実装される。
【００７９】
PicRateCtrlEncode()関数は、与えられたピクチャに対する最終的なＱＰを取得するために呼び出される。ある実施の形態では、PicRateCtrlEncode()関数は、ピクチャの小区分（たとえば、スライスまたはマクロブロック）に対する最終的なＱＰ値を取得するために呼び出される。このように、本発明の実施の形態は、マクロブロックレベルにおけるレート制御に拡張することができる。PicRateCtrlEncode()関数はまた、ビデオピクチャを符号化する際に従来用いられる他の関数を呼び出すことが含まれる。たとえば、ネットワーク抽象化レイヤ（ＮＡＬ）符号化、ビデオ符号化レイヤ（ＶＣＬ）符号化、およびデブロッキングの関数である。
【００８０】
上述の実施の形態にはいろいろな変形がありうる。たとえば、ある実装では、符号化段階（段階３）は、マルチプロセッサ上に分散され、並列に処理される歪み計算を含んでもよい。マルチプロセッサ実装では、ピクチャの総歪みは、セクション単位で計算され、ピクチャの異なるセクションに対する歪み計算は、各セクションに対して異なるプロセッサを用いて並列に実行される。各セクションに対する歪みは、符号化前のピクチャに対する元のピクセルと、再構築されたピクセルを比較することによって、マクロブロック単位で計算されてもよい。
【００８１】
ある実装では、歪み計算は、全体的な性能を向上させるためにデブロッキング前に行ってもよい。なぜなら、デブロッキングスレッドからメインスレッドまではデータパスを割り当てる必要はないからである。デブロックされたフレームにもとづく歪み計算とレート制御器用のデブロックされていないフレームにもとづく歪み計算の不一致は、実験的には無視できるものであることがわかっている。
【００８２】
さらに、ある実装では、ピクチャセクションの各マクロブロックにおける歪みは、既存のＭＢ情報コンテナで運び、ＤＭＡを介してサーバに転送してもよい。そして、ＮＡＬ符号化スレッドが、ピクチャの全体的な歪みを収集し、計算してもよい。このＭＢ歪みはまた、マクロブロックベースのレート制御が実装される場合、ピクチャ品質をさらに改善するために役立つ。
【００８３】
更新段階（段階４）はPicRateCtrlUpdate()関数を呼び出すことによって実装される。PicRateCtrlUpdate()関数は、次の二つの状況で呼び出される。（１）ブロードバンドエンジン（ＢＥ）のようなマルチコアプロセッサにおいてＭＢ列の符号化が完了した直後にデータを記録するために呼び出されるか、または（２）これは、最終的なビデオ符号化レイヤ（ＶＣＬ）ビットストリームが生成された直後、現在のピクチャ全体に関連づけられた統計的データを収集するために呼び出される。PicRateCtrlUpdate()関数に対する入力には、これらに限定しないが、レート制御ハンドル、画像に対する未加工の（raw）カラー空間フォーマット、以前再構成されたピクチャ、ピクチャレベル符号化情報、および以前のピクチャの符号化ビットを含んでもよい。PicRateCtrlUpdate()関数は、レート制御データバッファ１０２を内部的に更新してもよい。
【００８４】
一例として、これに限定しないが、カラー空間フォーマットはＹＵＶ４２０であってもよい。このフォーマットは、輝度成分（Ｙ）と２つの彩度成分（ＵとＶ）を含む。典型的には、ＭＰＥＧベースのエンコーダに対する入力は、ＹＵＶ４２０であり、これは、たとえば、解像度の観点から、Ｙの次元はＷ×Ｈで、ＵｔｏＶはそれぞれＷ／２×Ｈ／２の次元をもつことを意味する。
【００８５】
一例であり、これに限られないが、PicRateCtrlUpdate()関数は次の演算を実装する。
・統計的データの収集
・レート制御データバッファ１０２における統計的データの更新
・バッファフルをチェックしてバッファオーバーフローの可能性を判定
・必要なら、バッファオーバーフローの回避メカニズムを実装
【００８６】
別の実施の形態によれば、上述のピクチャレベルのレート制御を実行するための命令はコンピュータ読み取り可能な記憶媒体に格納してもよい。一例として、これに限られないが、図７は、コンピュータ読み取り可能な記憶媒体７００の例を示す。記憶媒体には、コンピュータ・プロセッシング・デバイスが読み取って解釈することのできるフォーマットで格納されたコンピュータ読み取り可能な命令が含まれる。一例として、これに限られないが、コンピュータ読み取り可能な記憶媒体７００は、ＲＡＭまたはＲＯＭのようなコンピュータ読み取り可能なメモリ、固定ディスクドライブ（たとえば、ハードディスクドライブ）に対するコンピュータ読み取り可能なストレージディスク、またはリムーバブルディスクドライブであってもよい。さらに、コンピュータ読み取り可能な記憶媒体７００は、フラッシュメモリデバイス、コンピュータ読み取り可能なテープ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ブルーレイ（商標）、ＨＤ−ＤＶＤ、ＵＭＤ、あるいは他の光記憶媒体を含む。
【００８７】
記憶媒体７００はオプションとして、上述のアルゴリズムの段階１を実装する命令を含むレート制御初期化命令７０２を含む。一例として、これに限られないが、初期化命令は、実行時に上述のPicRateCtrlInit()関数を実装するように構成される。
【００８８】
記憶媒体７００は、レート制御準備命令７０４を含む。準備命令７０４は上述のレート制御アルゴリズムの段階２を実装するように構成される。一例として、これに限られないが、準備命令は、実行時に上述のPicRateCtrlPrepare()関数を実装するように構成される。
【００８９】
記憶媒体７００は、符号化命令７０６を含む。符号化命令７０６は上述のレート制御アルゴリズムの段階３を実装するように構成される。一例として、これに限られないが、符号化命令は、実行時に上述のPicRateCtrlEncode()関数を実装するように構成される。
【００９０】
記憶媒体７００は、レート制御更新命令７０８を含む。レート制御更新命令７０８は上述のレート制御アルゴリズムの段階４を実装するように構成される。一例として、これに限られないが、レート制御更新命令は、実行時に上述のPicRateCtrlUpdate()関数を実装するように構成される。
【００９１】
上述のレート制御アルゴリズムは、実験的なＡＶＣ符号化器に主として実装されてきた。レート制御アルゴリズムの性能は、アルゴリズムがターゲットビットレートを正確に達成するだけではなく、ＨＲＤ準拠のＡＶＣビットストリームを構成するためにＣＰＢバッファを適切に制御することも証明している。もっとも大切なのでは、量子化パラメータを制御するための新しいレート制御アルゴリズムの効率性のおかげで、符号化器が高い忠実性と安定した視覚品質を示していることである。
【００９２】
本発明の好ましい実施の形態を完全な形で説明してきたが、いろいろな代替物、変形、等価物を用いることができる。したがって、本発明の範囲は、上記の説明を参照して決められるものではなく、請求項により決められるべきであり、均等物の全範囲も含まれる。ここで述べた特徴はいずれも、好ましいかどうかを問わず、他の特徴と組み合わせてもよい。請求項において、明示的に断らない限り、各項目は１またはそれ以上の数量である。請求項において「〜のための手段」のような語句を用いて明示的に記載する場合を除いて、請求項がミーンズ・プラス・ファンクションの限定を含むものと解してはならない。
【図１】
2011055504.tif 000003
【図２】
2011055504.tif 000004
【図３】
2011055504.tif 000005
【図４】
2011055504.tif 000006
【図５】
2011055504.tif 000007
【図６】
2011055504.tif 000008
【図７】
2011055504.tif 000009