デジタルビデオ機能は、デジタルテレビ、デジタル直接ブロードキャストシステム、無線通信デバイス、携帯情報端末(PDA)、ラップトップコンピュータ、デスクトップコンピュータ、デジタルカメラ、デジタル録画デバイス、セル電話または衛星ラジオ電話等を含む広範囲なデバイスに組み込むことができる。デジタルビデオデバイスは、フルモーションビデオシーケンスを生成し、修正し、送信し、格納し、記録し、再生する際において、従来のアナログビデオシステムに対して顕著な改善を与えることができる。
多くの異なるビデオエンコード規格が、デジタルビデオシーケンスのエンコードのために確立された。Moving Picture Experts Group(MPEG)は、例えば、MPEG−1、MPEGー2およびMPEG−4を含む多くの規格を開発した。その他の規格は、国際電気通信連合(ITU)H.263規格、California州Cupertionのアップルコンピュータ社によって開発されたQuickTime(登録商標)技術、Washington州Redmondのマイクロソフト社によって開発されたVideo for Windows(登録商標)、インテル社によって開発されたIndeo(登録商標)、Washington州Seattleのリアルネットワークス社のRealVideo(登録商標)、SuperMac社によって開発されたCinepak(登録商標)を含む。ITU H.264規格や、多くの所有権付き規格を含む新たな規格が、出現および発展を続けている。
多くのビデオエンコード規格は、圧縮方式でデータをエンコードすることにより、ビデオシーケンスの改善された伝送レートを可能にする。圧縮は、ビデオフレームの実際の伝送のために送信される必要のあるデータの全体量を低減することができる。ほとんどのビデオエンコード規格は、例えば、圧縮無しで達成できるよりも狭い帯域幅にわたったビデオおよびイメージ送信を容易にするように設計されたグラフィックス圧縮技術およびビデオ圧縮技術を利用する。
MPEG規格およびITU H.263およびITU H.264規格は、例えば、フレーム間圧縮を提供するため、時間的相関あるいはフレーム間相関と称される連続したビデオフレーム間の類似点を利用するビデオエンコード技術をサポートする。このフレーム間圧縮技術は、ビデオフレームのピクセルベース表示を、動作表示に変換することによって、フレームにわたったデータ冗長を活用する。更に、幾つかのビデオエンコード技術は、ビデオフレームを更に圧縮するために、空間フレーム相関またはフレーム内相関と称されるフレーム内の類似性を活用することができる。
圧縮をサポートするために、デジタルビデオデバイスは、デジタルビデオシーケンスを圧縮するエンコーダと、デジタルビデオシーケンスを解凍するデコーダとを含んでいる。多くの場合、エンコーダとデコーダは、ビデオイメージのシーケンスを定義するフレーム内のピクセルのブロック上で動作する統合型エンコーダ/デコーダ(CODEC)を形成する。国際電気通信連合(ITU)H.264規格では、例えばエンコーダは、一般に、送信されるビデオフレームを、16×16のピクセルアレイを備えうる“マクロブロック”(MB)と称されるビデオブロックへ分割する。ITU H.264規格は、16×16ビデオブロック、16×8ビデオブロック、8×16ビデオブロック、8×8ビデオブロック、8×4ビデオブロック、4×8ビデオブロック、および4×4ビデオブロックをサポートする。その他の規格は、異なるサイズのビデオブロックをサポートしうる。
ビデオフレーム内の個々のビデオブロックについて、エンコーダは、1または複数の直前(または直後)のビデオフレームの類似サイズのビデオブロックを探索して、「最良予測ブロック」と称される最も類似したビデオブロックを識別する。現在のビデオブロックを、他のフレームのビデオブロックと比較する処理は、一般に、動作推定と呼ばれる。ビデオブロックについて一旦「最良予測ブロック」が識別されると、エンコーダは、現在のビデオブロックと、最良予測ブロックとの差分をエンコードすることができる。現在のビデオブロックと最良予測ブロックとの差分をエンコードするこの処理は、動作補償と称される処理を含む。動作補償は、エンコードされる現在のビデオブロックと、最良予測ブロックとの差を示す差分ブロックを生成する処理を含む。通常、動作補償とは、動作ベクトルを用いて最良予測ブロックを取得し、次に、最良予測ブロックを入力ブロックから引くことによって、差分ブロックを生成する動作を称する。
動作補償が、この差分ブロックを生成した後、一般には、一連の追加のエンコードステップが実行され、差分ブロックがエンコードされる。これら追加のエンコードステップは、使用されているエンコード規格に依存しうる。例えば、MPEG−4に準拠したエンコーダでは、追加のエンコードステップは、8×8離散コサイン変換を含む。この変換の後、スカラー量子化、ラスタ−ジグザグ(raster-to-zigzag)再整列、ランレングスエンコード、Huffmanエンコードがなされる。エンコードされた差分ブロックは、先行するフレーム(または後続するフレーム)からのどのビデオブロックがエンコードのために使用されるかを示す動作ベクトルとともに送信することができる。デコーダは、この動作ベクトルと、エンコードされた差分ブロックとを受け取り、受け取った情報をデコードして、ビデオシーケンスを再構築する。
エンコード処理を単純化および改良することは極めて望ましい。この目的のために、種々様々なエンコード技術が開発されている。動作推定は、ビデオエンコードにおいて最も計算集約的な処理のうちの1つであるので、動作推定に対する改良は、ビデオエンコード処理において顕著な改良を与えることができる。
動作ベクトルを計算する際に、より効率的で正確な方法を見つけることが望ましい。
発明の概要
本願は、その全体が参照によって本明細書に組み込まれ、本願の譲受人に譲渡された、2005年9月22日出願の米国仮出願60/719,891号の優先権を主張する。
本開示は、ビデオエンコードを改善することができる動作推定技術について記述する。特に、本開示は、フレーム内のビデオブロックを処理するための従来とは異なる方法を提案する。動作推定を改善するために技術を以下に述べる。1つの実施形態では、2次元パイプラインを用いて、現在のビデオブロックの動作推定パラメータを正確に生成する動作推定器が説明される。2次元パイプラインは、正確な動作推定パラメータを生成する前に、現在のビデオブロックと同じ行における先行するビデオブロックを含む関連近隣ビデオブロックの、以前に計算された動作推定パラメータを使用する。動作推定パラメータは、例えば、動作ベクトル、動作ベクトル予測変量、およびモード決定である。開示された動作推定技術は、ピクセルを取得するエンジン/モジュールと、整数ピクセル探索を実行するエンジン/モジュールと、ピンポン方式で少なくとも2つのビデオブロック行にわたって精細な部分(fractional)および空間探索を実行するエンジン/モジュールとをパイプライン化することによってエンコードを改善することができる。ピン部分の間、第1のブロック行からの2つのビデオブロックが処理される。その間、別のビデオブロック行において同時処理が行われている。ポン部分の間、第2のブロック行からの2つのビデオブロックが処理される。その間、第1のブロック行では、別のビデオブロックが処理されている。このピンポン方式の処理によって、整数探索エンジン/モジュールは、正確な動作ベクトル予測変量(MVP:motion vector predictor)によって、費用に関してより正確な動作ベクトルを計算し、出力することが可能となる。この動作ベクトルは、部分および空間エンジン/モジュールが、全ての近隣ビデオブロックを処理した後にのみ得られる。MVPは、所望の動作ベクトルの初期推定値であり、一般に、近隣ビデオブロックについて以前に計算された動作ベクトルに基づいて計算される。1つのビデオブロック行だけが連続して処理される技術では、MVPは、実際の値ではなく、推定値である。推定値のみしか使用しなければ、動作推定に用いられる精度は制限される。ここで開示された技術を用いる1つの利点は、動作推定を計算する際に、全ての精細な分解の実際の値を用いることである。他の長所は、2次元パイプラインを用いることによって、別の行の部分を処理する前に、1つの行全体が処理されるのを待つ必要があるという問題を解決することである。そのため、2次元パイプラインを用いるこのピンポン方式の処理は、通信バス上の帯域幅を低減する。探索領域を更新するための、外部メモリに対するリフレッシュの数も、著しく低減することができる。
本開示における実施形態は、歪み測定値の計算を提案する。本実施形態は、エンコードされる現在のビデオブロックに近接したビデオブロックについて以前に計算された動作ベクトルに基づいて動作ベクトル予測変量を計算することと、現在のビデオブロックをエンコードするために使用される予測ビデオブロックを探索する際に、動作ベクトル予測変量を用いることとを備える方法を開示する。この実施形態は、歪み測定値の計算を最小化するために、実際の全ての動作ベクトル予測変量を用いる方法を更に記載する。
本明細書で記述されたこれら技術およびその他の技術は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組み合わせによって、デジタルビデオデバイス内で実現される。ソフトウェアで実現される場合、本技術は、実行された場合に、本明細書に記載のエンコード技術のうちの1または複数を実行するプログラムコードを備えたコンピュータ読取可能媒体に向けられうる。様々な実施形態の更なる詳細が、添付図面および下記記載において述べられる。その他の特徴、他の機能、客体、および長所も、これら記載および図面、更には特許請求の範囲から明白になるだろう。
詳細な説明
本開示は、ビデオエンコードを改善するために使用することができる動作ベクトル(MV)および動作ベクトル予測変量(MVP)の両方を計算する多次元技術について記述する。この技術は、一般に、動作推定のための全体的な処理に関連して説明されるが、様々なシナリオにおいて、これら技術のうちの1または複数が、個別に使用されうることが理解される。一般にMVPは、例えば、記録されている隣接ビデオブロックの動作ベクトルのメジアンとして、近隣ビデオブロックのために以前に計算された動作ベクトルに基づいて計算される。しかしながら、MVPを計算するために、例えば動作ベクトルまたは近隣ビデオブロックの平均や、より複雑な数学的関数のようなその他の数学的関数も使用されうる。
図1Aは、ソースデバイス112aが、エンコードされたビットストリームを、通信リンク113を介して受信デバイス114aへ送信するシステム100の例を示すブロック図である。ソースデバイス112aおよび受信デバイス114aは、両方ともデジタルビデオデバイスでありうる。特に、ソースデバイス112aは、例えば、MPEG−4規格、ITU H.263規格、ITU H.264規格、あるいはビデオエンコードにおいて動作推定を活用するその他様々な規格のようなビデオ規格にしたがうビデオデータをエンコードする。システム100のデバイス112a,114aの一方または両方は、ビデオエンコード処理を改善するために、以下に詳述するようにして動作推定技術および動作補償技術を実施する。
通信リンク113は、例えばインターネット、公衆交換電話網(PSTN)、あるいはデータ伝送可能なその他任意の通信リンクのようなグローバルネットワークや、広域ネットワークや、ローカル領域ネットワークのようなネットワークベースのパケット、光ファイバ、物理的伝送路、無線リンクを備えうる。通信リンク113は、例えばCD、DVD等のような記憶媒体と接続されうる。したがって、通信リンク113は、ソースデバイス112aから受信デバイス114aへとビデオデータを送信するための任意の適切な通信媒体、または恐らくは異なるネットワークおよびリンクの集合を表す。
ソースデバイス112aは、ビデオシーケンスをキャプチャし、キャプチャしたシーケンスをメモリ116内に格納する例えばビデオカメラのようなビデオキャプチャデバイス115を含む。ビデオシーケンスは、ディスプレイ117上で見ることができる。特に、ビデオキャプチャデバイス115は、電荷結合素子(CCD)、電源投入デバイス、フォトダイオードアレイ、相補性金属酸化膜半導体(CMOS)デバイス、あるいは、ビデオイメージまたはデジタルビデオシーケンスをキャプチャすることができるその他任意の感光性デバイスを含みうる。
更なる例として、ビデオキャプチャデバイス115は、例えば、テレビ、ビデオカセットレコーダ、カムコーダ、またはその他のビデオデバイスからのアナログビデオデータをデジタルビデオデータに変換するビデオコンバータでありうる。幾つかの実施形態では、ソースデバイス112aは、通信リンク113によってリアルタイムでビデオシーケンスを送信するように構成されうる。その場合、受信デバイス114aは、リアルタイムでビデオシーケンスを受信し、そのビデオシーケンスをユーザへ表示しうる。あるいは、ソースデバイス112aは、受信デバイス114aへ送られたビデオシーケンスをキャプチャして、ビデオデータファイルとして非リアルタイムでエンコードする。従って、ソースデバイス112aおよび受信デバイス114aは、例えばモバイル無線ネットワークにおいて、例えばビデオクリッププレイバック、ビデオメール、またはビデオカンファレンスのようなアプリケーションをサポートすることができる。デバイス112a,114aは、図1に具体的に例示されていないその他の様々な要素を含むことができる。
更に、ソースデバイス112aは、ビデオデータをエンコードおよび送信することが可能な任意のデジタルビデオデバイスでありうる。ソースデバイス112aはまた、シーケンスをエンコードするビデオエンコーダ118と、エンコードされたビットストリームを、通信リンク113を介して受信デバイス114aへ送信する送信機120とを含みうる。ビデオエンコーダ118は、例えば様々なハードウェア、ソフトウェア、ファームウェア、あるいは、例えば、本明細書で記述されるようなビデオエンコード技術を制御するプログラマブルソフトウェアモジュールを実行する1または複数のデジタルシグナルプロセッサ(DSP)を含みうる。ビデオエンコード技術を制御する際にDSPを支援するために、関連するメモリおよび論理回路が提供されうる。説明するように、動作ベクトル予測変量(MVP)の正確な値が使用される場合、ビデオエンコーダ118はより良好に動作する。
受信デバイス114aは、ビデオデータの受信およびデコードが可能な任意のデジタルビデオデバイスの形態をとりうる。例えば、受信デバイス114aは、エンコードされたデジタルビデオシーケンスを、例えば中間リンク、ルータ、その他のネットワーク機器等を介して送信機120から受信する受信機122を含むことができる。受信デバイス114aはまた、ビットストリームをデコードするビデオデコーダ124と、デコードされたビットストリームのシーケンスをユーザへ表示するディスプレイデバイス126とを含むことができる。しかしながら、幾つかの実施形態では、受信デバイス114aは、統合式ディプレイデバイスを含んでいないかもしれない。そのような場合、受信デバイス114aは、例えばテレビやモニタのような離散的なディスプレイデバイスを駆動するために、受信したビデオデータをデコードする受信機として動作する。
ソースデバイス112aおよび受信デバイス114aのデバイスの例は、コンピュータネットワーク上に配置されたサーバ、ワークステーションまたはその他のデスクトップ計算デバイス、および、例えばラップトップコンピュータやパーソナルデジタルアシスタント(PDA)のようなモバイル計算デバイスを含みうる。他の例は、例えばデジタルテレビのようなデジタルテレビブロードキャスト衛星デバイスおよび受信デバイス、デジタルカメラ、デジタルビデオカメラあるいは他のデジタル記録デバイス、例えばビデオ機能を有するモバイル電話のようなデジタルビデオ電話、ビデオ機能を備えたダイレクト二方式通信デバイス、その他の無線ビデオデバイス等を含む。
幾つかの場合、ソースデバイス112bおよび受信デバイス114bはそれぞれ、デジタルビデオデータをエンコードおよびデコードするため、図1Bに示すようなエンコーダ/デコーダ(コーデック)を含む。特に、ソースデバイス112aと受信デバイス114aとの両方は、メモリおよびディスプレイの他に、送信機および受信機を含むことができる。以下に概説するエンコード技術の多くは、エンコーダを含むデジタルビデオデバイスに関して記述される。しかしながら、エンコーダが、コーデックの一部を形成しうることが理解される。その場合、コーデックは、ハードウェア、ソフトウェア、ファームウェア、DSP、マイクロプロセッサ、特定用途向けIC(ASIC)、フィールドプログラム可能なゲートアレイ(FPGA)、離散的なハードウェア要素、またはこれらの様々な組合せによって実現されうる。
ソースデバイス112aあるいはソースデバイス112b内のビデオエンコーダ118は、ビデオデータをエンコードするために、ビデオフレームのシーケンス内のピクセルのブロックについて動作する。例えば、ビデオエンコーダ118は、送信されるビデオフレームが、ピクセルのブロック(ビデオブロックと称される)へ分割される動作推定技術および動作補償技術を実行しうる。このビデオブロックは、例示目的のために、任意のサイズのブロックを備えることができ、また、与えられたビデオシーケンス内で変化しうる。例として、ITU H.264規格は、16×16のビデオブロック、16×8のビデオブロック、8×16のビデオブロック、8×8のビデオブロック、8×4のビデオブロック、4×8のビデオブロック、および4×4のビデオブロックをサポートする。ビデオエンコードにおいて、より小さなビデオブロックを用いることによって、エンコードにおけるより良い圧縮を生み出すことができ、特に、より高レベルの詳細を含むビデオフレームの位置のために使用することができる。
ビデオブロック内のピクセルはそれぞれ、例えば8ビットのように、n−ビット値によって表される。これは、例えばクロミナンスや輝度の値における色や強度のようなピクセルの視覚特性を定める。しかしながら、動作推定はしばしば、輝度成分のみについて実行される。なぜなら、人間は、クロミナンスよりも輝度の変化により敏感だからである。従って、動作推定の目的のために、n−ビット値全体が、与えられたピクセルのための輝度を定量化しうる。しかしながら、本開示の原理は、ピクセルのフォーマットに限定されず、より簡単な少ないビットピクセルフォーマットや、より複雑な多くのビットピクセルフォーマットとともに使用されるために拡張することができる。
ビデオフレーム内の個々のビデオブロックについて、ソースデバイス112aあるいはソースデバイス112bのビデオエンコーダ118は、予測ビデオブロックと称される類似のビデオブロックを識別するために、既に送信された1または複数の先行するビデオフレーム(または後続するビデオフレーム)を求めて、メモリ116に格納されたビデオブロックを探索することによって、動作推定を実行する。ある場合には、予測ビデオブロックは、先行するビデオフレームまたは後続するビデオフレームからの「最良予測ブロック」を備えうるが、本開示は、この点に限定されない。ビデオエンコーダ118は、エンコードされる現在のビデオブロックと、最良予測ブロックとの差を示す差分ブロックを生成するために動作補償を行なう。動作補償は、通常、動作ベクトルを用いて最良予測ブロックを取得し、次に、最良予測ブロックを入力ブロックから引いて、差分ブロックを生成する動作を称する。
動作補償処理が、差分ブロックを生成した後、差分ブロックをエンコードするために、一般に、一連の追加エンコードステップが行なわれる。これらの追加エンコードステップは、使用されているエンコード規格に依存しうる。
一旦エンコードされると、エンコードされた差分ブロックは、エンコードのために使用された先行フレーム(または後続フレーム)からビデオブロックを識別する動作ベクトルまたはエンコードされた動作ベクトルとともに送信される。このように、各フレームを独立したピクチャとしてエンコードするのではなく、ビデオエンコーダ118は、隣接するフレーム間の差分をエンコードする。そのような技術は、ビデオシーケンスの各フレームを正確に表わすために必要なデータの量を著しく低減することができる。
動作ベクトルは、エンコードされているビデオブロックの上部左手コーナに対するピクセル位置を定義することができる。しかしながら、動作ベクトルのためのその他のフォーマットを使用することもできる。動作ベクトルを使用してビデオブロックをエンコードすることによって、ビデオデータのストリームの送信のために必要な帯域幅を、著しく低減することができる。
ある場合には、ビデオエンコーダ118は、フレーム間エンコードに加えて、フレーム内エンコードをサポートすることができる。フレーム内エンコードは、ビデオフレームを更に圧縮するために、空間相関またはフレーム内相関と称される類似物をフレーム内で利用することができる。フレーム内圧縮は、一般に、例えば離散コサイン変換(DCT)エンコードのような、静止画像の圧縮のためのテクスチャエンコードに基づく。フレーム内圧縮は、しばしば、フレーム間圧縮と共に使用されるが、幾つかの実施では、代替として使用することができる。
受信デバイス114aの受信機122は、エンコードされているビデオブロックと、動作推定に使用される最良予測ブロックとの間のエンコード済差分を示すエンコード済差分ブロックおよび動作ベクトルの形態をしたエンコード済ビデオデータを受信することができる。しかしながら、ある場合には、動作ベクトルを送るのではなく、動作ベクトルとMVPとの差分が送信される。何れの場合も、ディスプレイデバイス126を介してユーザに表示するためのビデオシーケンスを生成するために、ビデオデコーディングを実行することができる。受信デバイス114aのデコーダ124は、図1Bに示すようにエンコーダ/デコーダ(コーデック)として実現することもできる。その場合、ソースデバイス112bと受信デバイス114bとの両方が、デジタルビデオシーケンスのエンコード、送信、受信、およびデコードを行うことができる。
図2は、図1Aまたは図1Bのデバイスにおいて使用されうる典型的なビデオエンコーダを図示する。ビデオシーケンスからのフレームまたはフレームの一部は、コーデック24の一部でありうるビデオエンコーダ118内部の入力フレームバッファ242内に入力されうる。入力フレームバッファ242からの入力フレームは、ブロックへ分解され(ビデオブロックは任意のサイズからなることができるが、標準的な平方ビデオブロックサイズは4×4、8×8、または16×16である)、ビデオブロックバッファ243へ送られる。ビデオブロックバッファ243は、一般に、減算器244にビデオブロックを送る。減算器244は、スイッチ246の出力から、ビデオブロックxを減算する。スイッチ246は、エンコードの符号内予測モードと符号間予測モードとの間を切り換えることができる。スイッチ246が、符号間予測モードをイネーブルしているのであれば、異なる(先行または後続する)フレームからのビデオブロックとxとの差分が、テクスチャエンコーダ247によって圧縮される。スイッチ246が符号内予測モードをイネーブルしているのであれば、同じフレーム内の前のビデオブロックからの予測値とxとの差分が、テクスチャエンコーダ247によって圧縮される。
テクスチャエンコーダ247は、DCTブロック248を有している。DCTブロック248は、ピクセル領域からの入力x(ビデオブロックまたは差分ブロック)を、空間周波数領域へ変換する。空間周波数領域では、データは、DCTブロック係数によって表わされる。DCTブロック係数は、ビデオブロックにおいて検出された空間周波数の数および次数(degree)を表わす。DCTが計算された後、DCTブロック係数は、「ブロック量子化」として知られる処理で、量子化器250によって量子化されうる。(ビデオブロックまたは差分ビデオブロックの何れかから得られる)DCTブロック係数を量子化することによって、空間冗長部分がブロックから取り除かれる。この「ブロック量子化」処理中に、量子化されたDCTブロック係数をしきい値と比較することによって、更なる空間冗長が取り除かれる。この比較は、量子化器250の内部、あるいは別の比較ブロック(図示せず)の内部でなされうる。量子化されたDCTブロック係数の大きさが、しきい値未満である場合、この係数は破棄されるか、またはゼロ値に設定される。
ブロック量子化の後、結果として得られた出力は、2つの個別の構成要素、すなわち、(1)テクスチャデコーダ265、および(2)エントロピエンコーダ255へ送られる。テクスチャデコーダ265は、逆量子化器266を備える。逆量子化器266は、符合化予測モードで使用される再構築ビデオブロックまたはフレームの生成を支援する。エントロピエンコーダ255は、送信または記憶のためのビットストリームを生成する。エントロピエンコーダ255は、スキャナ256を含みうる。スキャナ256は、ブロック量子化出力を受け取り、それを、可変長コーダ(VLC)258によるより効率的なエンコードのために、再配列する。VLC258は、エンコードされたビットストリームを生成するために、ランレングス技術およびHuffman符合化技術の使用を適用する。エンコードされたビットストリームは、出力バッファ260へ送られる。このビットストリームは、レートコントローラ262へ送られうる。基本品質を維持している間、レートコントローラ262は、量子化器250によって使用される量子化ビットの数をバジェット(budget)する。エントロピエンコードは、非不可逆的な(non-lossy)圧縮形式と考えられる。非不可逆的圧縮は、破壊されたエンコード済データが無くエントロピデコーダによってデコードされるのであれば、エンコードされているデータは、同一に復元されうることを意味する。エントロピエンコーダ255は、非不可逆的圧縮を実行する。
不可逆的圧縮(lossy compression)は、エンコードされた入力が破壊されていなくても、エンコードの結果として、入力xが、xの同一のコピーを生成しないことを意味する。再構築された入力は、その情報の一部を「失って」いる。テクスチャエンコーダ247は、不可逆的圧縮を行なう。一般的なビデオエンコーダ118は、通常、符号間予測モードと符号内予測モードとの両方の補償を支援するローカルテクスチャデコーダ265を有する。テクスチャエンコーダ247の出力をデコードし、テクスチャエンコーダ247へ入力された入力xを再構築するために、逆量子化器266と、逆DCT268と、加算器269に送られたスイッチ246の出力とが、ともに働く。再構築された入力yは、xに類似しているように見えるが、正確にはxではない。一般的なビデオ「デコーダ」は、逆量子化器266と、逆DCT268と、加算器269へ送られるスイッチ246の出力との機能を備える。
再構築された入力は、メモリバッファ281へ送られうる。メモリバッファ281の内部には、2つのメモリバッファ、すなわち(1)再構築された新たなフレームバッファ282と、(2)再構築された古いフレームバッファ284とが存在する。再構築された新たなフレームバッファ282は、現在処理された再構築フレーム(又は部分フレーム)を格納する。再構築された古いフレームバッファ284は、過去に処理された再構築フレームを格納する。過去に処理された再構築フレームは、(再構築された)基準フレームとして使用される。再構築された基準フレームは、入力フレームバッファ242内の現在のフレームの前あるいは後にあるフレームでありうる。現在のフレーム(または現在のフレームからのビデオブロック)、あるいは、現在のフレームと再構築された基準フレームとの間の差分(または差分ブロックからのビデオブロック)は、「現在」エンコードされているものである。現在のフレームがエンコードを終了した後で、かつ、入力フレームバッファ242からの入力における次のフレームが、エンコードされるために取得される前に、再構築された古いフレームバッファ284が、再構築された新たなフレームバッファ282の内容を備えたコピーを用いて更新される。
再構築された新たなフレームバッファ282は、空間予測器286において使用されるために受け取った、再構築されたビデオブロックを送る。再構築された古いフレームバッファ284は、過去に処理された再構築されたビデオブロックをMEC(動作推定および補償ブロック)287へ送る。MECブロックは、動作推定器288および動作補償器290を備える。動作推定器288は、動作ベクトル(MV)292および動作ベクトル予測変量(MVP)294を生成する。これらは、エンコードされているフレームではない他のフレームからの差分を補償するために、動作補償器290によって使用される。MV292はまた、エントロピエンコーダ255によって使用されうる。例えばITU H.264のような幾つかの規格では、空間予測器286の出力が、フレーム内予測モードで使用され、減算器244および加算器269の両方へ供給される。例えばMPEG−4またはJPEGのような幾つかの規格では、空間予測器286は存在しない。
図3は、任意のイメージあるいはフレームの2つの部分的なブロック行を図示する。例として、ブロック行N−1,Nを、ブロック行3,4とする。ブロック行3 330には、9つのビデオブロックがある。例示目的のために、16×16ブロックが、本開示の説明を通じて使用される。従って、マクロブロック(MB)331−339は、行3 330にあり、行4 340には、9つのMB341−349がある。MBは、ブロック行番号と、M番目のマクロブロックに対する位置との両方を示して図示されている。Mは、現在のマクロブロックを示す。一般に、ブロック行3は、ブロック行4の前に処理される。本開示では、ブロック行を処理することは、行3 330および行4 340で述べているように、マクロブロックの行を処理することを意味する。それは一般に、任意のサイズのビデオブロック行を処理することをも意味する。
例えば、H.264、MPEG−4、およびH.263のような様々な規格において、マクロブロック(MB)345に関する動作ベクトルを計算する場合、近隣のMB344、MB335、およびMB336(または、MB336が利用可能ではない場合にはMB334)を事前に知っていることが望まれうる。例えば、H.264では、PフレームのINTERモードは、INTER 16×16、INTER 16×8、INTER 8×16、INTER 8×8でありうる。もしもINTER 8×8モードであれば、INTER 8×4モード、またはINTER 4×8モード、またはINTER 4×4モードを選択するために、更なる分割がなされる。モードは、そのタイプ(INTER)のみならず、そのサイズにも依存する。また、INTERモードおよびSKIPモードもある。SKIPモードを起動する他の条件も存在するが、SKIPモードを起動することができる1つの条件は、MVがMVPに等しい場合である。
例えば動作推定は、一般に、ビデオエンコードのその他のどの処理よりも多くの計算リソースを必要とする。この理由により、計算の複雑さを低減し、また、圧縮比の改善を支援する方式で動作推定を実行することが、より強く望まれる。本明細書で記述された動作推定技術は、多くの空間分解により探索を行なう探索スキームを使用することにより、目標を達することができる。これによって、精度を落とすことなく、計算上の複雑さが低減される。更に、歪み測定としても知られているコスト関数が提案される。それは、動作ベクトルをエンコードするコストを含む。動作推定器はまた、ビデオエンコードの精度を改善するために、探索空間の多くの候補位置を使用することができる。また、多くの候補の周囲の探索領域は、プログラム可能である。これによって、この処理は、フレームレートおよびピクチャサイズでスケール可能となる。最後に、動作推定器はまた、例えば、4×8ビデオブロック、8×4ビデオブロック、8×8ビデオブロック、8×16ビデオブロック、16×8ビデオブロック、16×16ビデオブロック等のような大きな様々なブロック形状のコストを取得するために、例えば4×4ビデオブロックのような多くの小さな平方ビデオブロックのコスト関数を組み合わせる。多くの動作および計算のために、動作ベクトル予測変量(MVP)が使用され、動作ベクトル予測変量から導かれる動作ベクトルについてコスト因子が加えられる。MVPはまた、更なる初期動作ベクトルをも与える。これは、特に、マルチステージ探索の高分解ステージにおいて、探索を定義するために使用することができる。動作ベクトル予測値に少なくとも部分的に依存する歪み測定値の計算は、コスト因子の一部である。歪み測定値は、別の動作ベクトルをエンコードするために必要なビット数を定量化することを助ける。
図4は、フレームにわたって動作推定がどのようになされるかの処理を記載した典型的なフローチャートである。まず、セットアップ手順400が開始される。セットアップの一部として、基準(過去または未来の)フレームが、メモリへロードされる(402)。このメモリは、例えば、ローカルメモリまたはオフメモリ候補RAMでありうる。次に、現在のフレームがメモリへのロードされる(404)。このメモリもまた、例えば、ローカルメモリまたはオフメモリエンコードRAMの一部でありうる。その後、ブロック行において、現在のマクロブロックMが選択される。次に、現在のマクロブロックMの周囲において、探索空間が識別される(406)。基準フレームから探索空間が一旦識別されると(408)、現在のフレームにおける2つのビデオブロック行にわたった2次元ステージパイプラインを処理する動作がなされる(410)。これは、1次元ステージパイプラインによって、時間において1つのビデオブロック行を処理することのみを考慮する現在の技術に対する改良である。2次元ステージパイプライン動作が行なわれた後、判定ブロック412が、2つのブロック行の終わりに達したかを確認する。2つのブロック行の終わりに達していないのであれば(NO)、基準フレームにおける探索空間がリフレッシュされ(414)、現在のフレームにおいて、2つのブロック行にわたった2次元ステージパイプラインの処理が継続する(410)。2つのブロック行の終わりに達しているのであれば(YES)、判定ブロック416によって、別の確認がなされる。判定ブロック416は、それが、現在のフレームにおける最後の2つのブロック行の終わりであるかを確認する。それが現在のフレーム内の最後の2つのブロック行の終わりではない場合(NO)には、次の2つのブロック行にインクリメントする動作418が行なわれ、現在のフレームにおける2つのブロック行にわたった2次元ステージパイプラインの処理が継続する(410)。それが現在のフレーム内の最後の2つのブロック行の終わりであれば(YES)、現在のフレームの処理が終了する。
動作推定(ME)は、少なくとも2つのエンジンによってビデオブロックを処理することを含んでいる。第1のエンジンは、取得エンジン(FE)であり、エンコードされるビデオブロックを、メモリから取得する。第2のエンジンは、歪みを最小にする類似のマッチングブロックを見つけ出すために、歪み数的指標を用いる。第2のエンジンは、整数検索エンジン(ISE)であり、探索が進むとより精細な分解で実行される探索を備えた階層的探索を適用しうる。第3のエンジンである部分および空間探索エンジンを備える場合もある。これは、歪みを最小にする類似のマッチングブロックを見つけ出すためにより精細な分解の探索を用いる。FSEは、開始点として、第2のエンジンの結果を用いても良いし、用いなくても良い。典型的な目的のため、動作推定技術の記載は、3つのエンジン、すなわち取得エンジン(FE)、整数探索エンジン(ISE)、部分および空間探索エンジン(FSE)を用いてなされる。これらの3つのエンジンは、ビデオブロックを連続的に処理する。一般に、処理の遅れを最小にするために、3つのエンジンは、3つのステージにわたってパイプライン化される。すなわち、FE、ISEおよびFSEはすべて、3ステージパイプライン内で並行して動作する。例えば、ステージ1の間、FEは、メモリから現在のマクロブロックMを取得する。同時に、マクロブロックM−1のコーナにおいて、整数ピクセルアンカーポイントに位置するISEは、基準(過去または未来)フレームから、ベストマッチしたマクロブロックを見つけ出すことを試みる。またステージ1の間、FEエンジンおよびISEエンジンと同時に動作して、マクロブロックM−2内の部分ピクセルアンカーポイントに位置するFSEは、基準(過去または未来)フレームから、ベストマッチしたマクロブロックを見つけ出すことを試みる。動作ベクトルを生成する1つのビデオブロックの完全な処理を完了するために3ステージを要する。3ステージの終了時に、3つの取得と、実行された3つの整数探索と、実行された3つの部分および空間探索とがなされよう。一般に、1次元(1D)3ステージパイプラインは、1つのビデオブロック行に対して連続して動作する。ビデオブロック行の全体が完全に処理されるまで、第2のブロック行では処理はなされない。
図5は、1次元3ステージパイプラインの概念の実例を図示する。見て分かるように、行3 330のほとんどが処理されている。図5の左上コーナでは、3、M−3、MB パイプライン520のステージ1 501の間、3つのうちの2つのエンジンが動作している。FEは、マクロブロック3、M−3 332に対して動作し、ISEは、マクロブロック3、M−4 331に対して動作する。3、M−3 MB パイプライン520のステージ2 502と、3、M−3 MB パイプライン520のステージ3 503とは、FSEが、3、M−3 MB(マクロブロック)332について終了した後、動作ベクトルの生成を終了する。前述したように、一般に、各ステージでは、取得と、整数探索と、部分および空間探索とが実行される。図5では、3、M−4 マクロブロック331の最初の取得を除いて、図3の行3 330内の全てのマクロブロック(MB)が処理される。1次元パイプライン521−527については、次のパイプラインのステージ1は常に、前のパイプラインのステージ2である。次のパイプラインのステージ2は、前のパイプラインのステージ3である。従って、ステージ502−510は、どのパイプラインが現在動作しているかに依存して、パイプライン内のステージ1、ステージ2、またはステージ3となりうる。一般に、1次元パイプラインを使用して、N個のマクロブロック(つまり、ビデオブロック)を処理するために、N+2ステージを要する。
与えられたマクロブロックについて、1次元パイプライン技術は、前の動作ブロックのFSE結果を都合よく使用しないように、現在のISEに制約を課す。例えば、FEが、エンコードデータを取得し、MB335についてメモリを更新している場合、ISEは、MB334に対する整数探索を行っており、FSEは、MB333に対する部分探索および空間推定を行っている。1次元パイプラインに関する固有の問題は、ISEは、その左の近隣MBのモードおよび最終動作ベクトル(MV)を知らず、動作ベクトル予測変量(MVP)の正確な推定を得ることができないことである。その結果、動作ベクトル計算は、わずかに外れるかもしれない。従って、1次元パイプライン技術を用いることによって、動作推定(MVを生成すること)と、モード判定(MVPを生成すること)との間には相互依存性がある。
動作推定とモード判定との間の相互依存性を解決する動作推定技術が、図6に例示される。図6は、3ステージ2次元(2D)パイプラインと、関連する全ての近隣MBモードとMVとの事前情報をISEに教える動作推定技術とを例示する典型的な図である。図6では、2つのビデオブロック行が、ピンポン方式(ping pong fashion)で処理される。ピン部分の間、第1のビデオブロック行からの2つのビデオブロックが処理される。同時に、別のビデオブロック行に対する処理も行われる。ポン部分の間、第2のビデオブロック行からの2つのビデオブロックが処理される。同時に、第1のビデオブロック行では、別のビデオブロックが処理されている。
図6の左上コーナでは、3、M−0 MB 2次元パイプライン621のステージ1 601が図示されている。FEは、マクロブロック3、M−0 335に対して動作し、ISEは、マクロブロック4、M−3 342に対して動作する一方、FSEは、マクロブロック3、M−1 334に対して動作する。3、M−0 MB 2次元パイプライン621のステージ2 602の間、FEは、マクロブロック4、M−2 343に対して動作し、ISEは、マクロブロック3、M−0 335に対して動作する一方、FSEは、マクロブロック4、M−3 342に対して動作する。3、M−0 MB 2次元パイプライン621のステージ3 603の間、FEは、マクロブロック3、M+1 336に対して動作し、ISEは、マクロブロック4、M−2 343に対して動作する一方、FSEは、マクロブロック3、M−0 335に対して動作する。3、M−0 MB 2Dパイプライン621の終了後、FSE後の動作ベクトルの生成が、3、M−0 MB 335において完了する。ステージ602−609は、上述したように、2次元パイプライン622−627を完了するために使用される。図6に示すように、全ての「ピン/ポン」は、1行に対するFE/FSE動作を示している一方、別の行にはISEが存在する。ピンポンという用語は、行の間の役割の交換に関連付けられる。例えば、「ピン」の間、FE/FSEは行3に対して動作し、ISEは行4に対して動作する。「ポン」の間、FE/FSEは、行4に対して動作し、ISEは、行3に対して動作する。
2次元パイプラインを用いることの利点は、少なくとも2つの異なる行からであるが、近接している2つのマクロブロックが、探索領域の大部分を共有することができることである。ポンは、ピンからの探索領域を再使用することができるので、少ない取得しか必要とされないだろう。このピンポン方式による処理によって、通信バス上の帯域幅を低減する。探索領域を更新するための外部メモリに対するリフレッシュの数は、著しく低減されうる。探索領域を更新するための外部メモリに対するリフレッシュの数は、著しく低減されうる。
更に、マクロブロック345は、関連する近隣マクロブロック344,335,および334(または、334が利用可能ではない場合には336)からのモード判定を用いることができる。モード判定を用いることは、これら関連する近隣マクロブロックのそれぞれからの動作ベクトル予測変量が、動作ベクトルの正確な推定値を生成することを助けることができる。2次元ピンポンパイプライン無しでは、マクロブロック345動作ベクトル生成の計算において、近隣マクロブロック344からの正確な動作ベクトル予測変量を利用できないかもしれない。従って、2次元パイプラインは、動作推定ビデオブロックとモード判定との間の相互依存性を解決する。
多くの異なる実施形態は記述された。これら技術は、動作推定を改善することにより、ビデオエンコードを改善することができる。これら技術は、ハードウェア、ソフトウェア、ファームウェア、あるいはこれらの任意の組合せによって実現されうる。ソフトウェアで実現される場合、これら技術は、デバイス内で実行された場合、ビデオシーケンスをエンコードし、上述した方法のうちの1または複数の実行するプログラムコードを備えるコンピュータ読取可能媒体に向けられる。その場合、コンピュータ読取可能媒体は、例えばシンクロナス・ダイナミックRAM(SDRAM)のようなランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、非揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能PROM(EEPROM)、FLASHメモリ等を備えることができる。
このプログラムコードは、コンピュータ読取可能命令の形態でメモリ上に格納されうる。その場合、本明細書で記載した技術のうちの1または複数を実行するために、例えばDSPのようなプロセッサが、メモリに格納された命令を実行することができる。幾つかの場合、これらの技術は、エンコード処理を加速する例えば動作推定器のような様々なハードウェア要素を起動するDPSによって実行されうる。その他の場合、ビデオエンコーダが、マイクロプロセッサ、1又は複数の特定用途向けIC(ASIC)、1又は複数のフィールドプログラム可能ゲートアレイ(FPGA)、あるいはその他、ハードウェアとソフトウェアとの組み合わせとして実現されうる。これらおよびその他の実施形態は、特許請求の範囲のスコープ内である。