(57)【要約】並列に動作するソフトウェアパイプライン及びハードウェアパイプラインを含むブロック処理パイプライン。ソフトウェアパイプラインは、ハードウェアパイプラインよりも少なくともブロックを１つ先行して動作する。パイプラインのステージはそれぞれ、ステージの現在のブロックに対して１つ以上の動作を実行するハードウェアパイプライン構成要素を含み得る。パイプラインの少なくとも１つのステージはまた、ハードウェア構成要素が現在のブロックを処理している間に、次のブロックを処理するために、パイプラインのステージのハードウェア構成要素の構成を決定するソフトウェアパイプライン構成要素を含み得る。ソフトウェアパイプライン構成要素は、パイプラインの上流ステージから取得された次のブロックに関係する情報に基づいて、構成を決定することができる。ソフトウェアパイプライン構成要素はまた、ステージにおいて前に処理されたブロックに関係する情報を取得し、それを使用することができる。
2016537845.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
複数のステージを含むブロック処理パイプラインであって、前記ブロック処理パイプラインの前記複数のステージのうちの１つ以上がそれぞれ、ソフトウェアパイプラインの構成要素及びハードウェアパイプラインの構成要素を含み、前記ソフトウェアパイプライン及び前記ハードウェアパイプラインは、フレームのピクセルのブロックを並行して処理するように構成される、ブロック処理パイプラインを備え、
前記１つ以上のステージのそれぞれの前記ソフトウェアパイプライン構成要素が、前記ブロックについての取得された情報に基づいて、前記ステージの前記ハードウェアパイプライン構成要素において、前記ブロックを処理するための構成を反復して決定するように構成され、
前記１つ以上のステージのそれぞれの前記ハードウェアパイプライン構成要素が、前記ステージの前記ソフトウェアパイプライン構成要素が決定した前記ブロックを処理するための前記構成に従って、前記ブロックを反復して処理するように構成され、
前記１つ以上のステージのそれぞれの前記ハードウェアパイプライン構成要素は、前記ステージの前記ハードウェアパイプライン構成要素により処理される、来るべきブロックについての構成を前記ステージの前記ソフトウェアパイプライン構成要素が決定している間に、前記ステージにおいて現在のブロックを処理する、装置。
【請求項２】
前記１つ以上のステージのそれぞれの前記ソフトウェアパイプライン構成要素は、前記ブロック処理パイプラインの上流ステージから、前記ブロックについての前記情報の少なくとも一部分を受信するように更に構成される、請求項１に記載の装置。
【請求項３】
前記ブロックについての前記情報は、前記ステージにおいて前記ハードウェアパイプライン構成要素が以前に処理したブロックからの情報を含む、請求項１又は２に記載の装置。
【請求項４】
前記ソフトウェアパイプライン構成要素のうちの少なくとも１つが、前記ブロック処理パイプラインの下流ステージに前記ブロックの情報を出力するように更に構成される、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記１つ以上のステージのそれぞれの前記ハードウェアパイプライン構成要素は、
前記ブロック処理パイプラインの前のステージから、処理される前記ブロックを受信し、
処理した前記ブロックを、前記ブロック処理パイプラインの次のステージ又は外部メモリに出力する、ように更に構成される、請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記ブロック処理パイプラインは、
前記ハードウェアパイプラインへの入力のためにブロックをバッファし、
バッファした前記ブロックのうちの１つ以上についてのブロック統計値を計算し、
前記ブロックについての情報として、前記ブロック処理パイプラインの下流ステージのソフトウェアパイプライン構成要素に前記ブロック統計値を入力する、
ように構成された最初のステージを含む、請求項１から５のいずれか一項に記載の装置。
【請求項７】
各ステージの前記ソフトウェアパイプライン構成要素は、前記ステージの前記ハードウェアパイプライン構成要素が処理する各ブロックについて、
前記ブロックについての取得された情報に基づいて、前記ステージの前記ハードウェアパイプライン構成要素において、前記ブロックを処理するための特定の構成を決定し、
前記構成を構成メモリに書き込み、
前記ステージの前記ハードウェアパイプライン構成要素に、前記構成が前記構成メモリに準備されたことをシグナリングする、
ように構成される、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記ステージの前記ハードウェアパイプライン構成要素は、
前記ステージの前記ソフトウェアパイプライン構成要素からの前記シグナリングを検出し、
前記構成メモリからの前記構成にアクセスし、
前記ソフトウェアパイプライン構成要素に、前記構成メモリが消去されていることをシグナリングし、
前記構成メモリからの前記構成に従って、前記ブロックを処理する、
ように構成される、請求項７に記載の装置。
【請求項９】
前記ステージの前記ソフトウェアパイプライン構成要素は、前記構成メモリの第２の部分からの現在のブロックについての構成に前記ハードウェアパイプライン構成要素がアクセスする間に、前記構成メモリの第１の部分に次のブロックについての構成を書き込むように更に構成される、請求項８に記載の装置。
【請求項１０】
方法であって、
ブロック処理パイプラインのステージのソフトウェアパイプライン構成要素により、前記ステージのハードウェアパイプライン構成要素が処理するブロックについての情報を取得することであって、前記ブロック処理パイプラインが、並列のソフトウェアパイプライン及びハードウェアパイプラインにおいて、あるフレームのピクセルのブロックを処理し、前記ブロック処理パイプラインの複数のステージのうちの１つ以上がそれぞれ、ソフトウェアパイプライン構成要素及びハードウェアパイプライン構成要素を含む、ことと、
前記ソフトウェアパイプライン構成要素により、前記ブロックについての前記取得された情報に基づいて、前記ハードウェアパイプライン構成要素において、前記ブロックを処理するための構成を決定することと、
前記ブロックについての前記構成が準備されていることを前記ハードウェアパイプライン構成要素にシグナリングすることと、
前記シグナリングすることに応答して、前記ブロックについての決定した前記構成に従って、前記ハードウェアパイプライン構成要素において、前記ブロックを処理することと、を含み、
前記ハードウェアパイプライン構成要素は、前記ハードウェアパイプライン構成要素により処理される来るべきブロックについての構成を前記ソフトウェアパイプライン構成要素が決定している間に、前記ブロックを処理する、方法。
【請求項１１】
前記ブロックについての前記情報が、前記ブロック処理パイプラインの上流ステージから受信したブロック情報、及び、前記ステージの前記ハードウェアパイプライン構成要素が前に処理した別のブロックからの情報を含む、請求項１０に記載の方法。
【請求項１２】
前記ソフトウェアパイプライン構成要素により、前記ブロックについての前記構成を構成メモリに書き込むことと、
前記ハードウェアパイプライン構成要素により、前記シグナリングすることに応答して、前記構成メモリから前記ブロックについての前記構成を読み込むことと、を更に含む、請求項１０又は１１に記載の方法。
【請求項１３】
デバイスであって、
メモリと、
ビデオフレームを処理し、処理した前記ビデオフレームをフレームデータとして前記メモリに記憶するように構成された装置であって、前記装置が、１つ以上のパイプラインユニットを各々が含む複数のステージを実装するブロック処理パイプラインを含み、各パイプラインユニットが、前記パイプラインを通るフレームのピクセルのブロックに対して１つ以上の動作を実行するように構成される、装置と、を備え、
前記ブロック処理パイプライン中の前記パイプラインユニットのうちの１つ以上がそれぞれ、
現在の構成に従って、前記パイプラインユニットのユニットコアにおいて現在のブロックを処理し、
次のブロックについての取得された情報に基づいて、前記ユニットコアにおいて前記次のブロックを処理するための構成を決定し、
前記ユニットコアに、前記次のブロックを処理するための前記構成が準備されたことをシグナリングし、
前記シグナリングに応答して、前記次のブロックについての前記構成に従って、前記ユニットコアにおいて前記次のブロックを処理する、ように構成され、
前記パイプラインユニットは、前記パイプラインユニットの前記ユニットコアが前記現在のブロックを処理している間に、前記ユニットコアにおいて前記次のブロックを処理するための前記構成を決定する、デバイス。
【請求項１４】
前記次のブロックについての前記情報が、前記ブロック処理パイプラインの上流処理ユニットから受信した情報、及び、前記処理ユニットが以前に処理したブロックからの情報を含む、請求項１３に記載のデバイス。
【請求項１５】
前記１つ以上のパイプラインユニットのそれぞれが、前記ユニットコアにおいて、前記次のブロックを処理するための前記構成を構成メモリに記憶するように更に構成され、前記ユニットコアは、
前記シグナリングに応答して、前記構成メモリから前記構成を読み込み、
前記パイプラインユニットに、前記構成メモリが消去されていることをシグナリングする、ように構成される、請求項１３又は１４に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は概して、ビデオ処理又は画像処理に関し、より詳細には、ブロック処理パイプラインにおいてデジタルビデオフレームを処理するための方法及び装置に関する。
【背景技術】
【０００２】
パーソナルコンピュータシステム、デスクトップコンピュータシステム、ラップトップコンピュータ及びノートブックコンピュータ、タブレットデバイス又はパッドデバイス、デジタルカメラ、デジタルビデオレコーダ、並びに携帯電話又はスマートフォンを含むがこれらに限られない種々のデバイスは、ビデオ処理方法を実行することができるソフトウェア及び／又はハードウェアを含むことができる。例えば、デバイスとして、１つ以上のビデオ処理法に従って、１つ以上のソースからデジタルビデオ入力を受信して処理し、処理したビデオフレームを出力することができる装置（例えば、システムオンチップ（ＳＯＣ）などの集積回路（ＩＣ）又はＩＣのサブシステム）を挙げることができる。別の例として、１つ以上のビデオ処理方法に従って、１つ以上のソースからデジタルビデオ入力を受信して処理し、処理したビデオフレームを出力することができるデバイス上で、ソフトウェアプログラムを実行することができる。一例として、図１に示すようなビデオエンコーダ１０は、ビデオエンコーディング方法に従って、デジタルビデオ入力（入力フレーム９０）を別のフォーマット（出力フレーム９２）に、例えば、Ｈ．２６４／高効率ビデオ圧縮方式（ＡＶＣ）フォーマット（ＭＰＥＧ４パート１０とも呼ばれる）などの圧縮ビデオフォーマットに符号化又は変換する装置あるいはソフトウェアプログラムを表す。ビデオエンコーダ１０などの装置又はソフトウェアプログラムは、複数の機能構成要素又はユニット、並びに、例えばビデオ入力ソース及び外部メモリに対する外部インターフェース、を含み得る。
【０００３】
いくつかのビデオ処理方法では、処理を実行するために、例えば図２に示すように、ピクセルのブロックの行列（例えば、１６×１６個のピクセルブロック）に各入力ビデオフレーム９０が分割され、図２は、１４４個の１６×１６ピクセルブロックに分割された例示的な１９２×１９２個のピクセルフレームを示している。入力ビデオフレーム９０の各ブロックは別々に処理され、処理が終わると、処理されたブロックが合成されて、出力ビデオフレーム９２が形成される。これは、ブロック処理法と呼ばれることがある。従来、ブロックは、ブロック処理法によって、フレームの第１行の第１のブロック（ブロック０と示される）から開始して、その行を横断してブロックを順次処理し、１つの行が完了すると次の行の第１のブロックに続く、図２に示すようなスキャン順で処理される。
【０００４】
ブロック処理法は、ビデオフレーム中の各ブロックに順次適用される複数の処理ステップ又は動作を含み得る。そのようなブロック処理法を実行するために、ビデオエンコーダ１０などの装置又はソフトウェアプログラムは、ブロック処理パイプライン４０を含むか、又は実装することができる。ブロック処理パイプライン４０は、ブロック処理法のステップ又は動作のうちの１つ以上を各ステージが実行する、２つ以上のステージを含むことができる。図１は、少なくともステージ４２Ａ〜４２Ｃを含む例示的なブロック処理パイプライン４０を実装する例示的なビデオエンコーダ１０を示す。ブロックは、パイプライン４０のステージ４２Ａに入力され、ステージ４２Ａが実行する動作（単数又は複数）に従って処理され、次のステージ４２Ｂに（又は最後のステージ４２によって最終的な出力として）結果が出力される。次のステージ４２Ｂは、次のブロックが処理のために前のステージ４２Ａに入力される間に、そのブロックを処理する。したがって、ブロックは、ステージからステージへとパイプラインを下り、各ステージは１つのブロックを一度に処理し、複数のステージが異なるブロックを並行して処理する。従来、ブロックは、図２に示すようなスキャン順で、ブロック処理パイプライン４０に入力され、それにより処理される。例えば、図１では、図２に示したフレームの第１の行の第１のブロック（ブロック０）がステージ４２Ｃにあり、第２のブロック（ブロック１）がステージ４２Ｂにあり、第３のブロック（ブロック２）がステージ４２Ａにある。ブロック処理パイプライン４０に入力される次のブロックは、第１の行の第４のブロックである。
【０００５】
Ｈ．２６４／高効率ビデオ圧縮方式（ＡＶＣ）
Ｈ．２６４／ＡＶＣ（正式には、ＩＴＵ−Ｔ勧告Ｈ．２６４と呼ばれ、ＭＰＥＧ−４パート１０とも呼ばれる）は、ＩＴＵ−Ｔ（国際電気通信連合−電気通信標準化部門）の映像符号化専門家グループ（ＶＣＥＧ）がＩＳＯ／ＩＥＣ  ＪＴＣ１動画像符号化専門家グループ（ＭＰＥＧ）と一緒に開発したブロック指向動き補償ベースのコーデック標準である。Ｈ．２６４／ＡＶＣ標準は、ＩＴＵ−Ｔにより、「ＩＴＵ−Ｔ勧告Ｈ．２６４：オーディオビジュアルサービス全般のための高度ビデオ符号化方式」と題する文書において公開されている。この文書はまた、Ｈ．２６４勧告と呼ばれることもある。
【発明の概要】
【０００６】
ブロック処理パイプラインが並列に動作するソフトウェアパイプライン及びハードウェアパイプラインを含む場合の、ブロック処理法及び装置の実施形態について説明する。ただし、ソフトウェアパイプラインは、ハードウェアパイプラインよりもブロックを１つ以上先行して動作する。パイプラインのステージはそれぞれ、ステージの現在のブロックに対して１つ以上の動作を実行するハードウェアパイプライン構成要素を含み得る。パイプラインの少なくとも１つのステージはまた、ソフトウェアパイプライン構成要素を含み得る。この構成要素は、ハードウェア構成要素が現在のブロックを処理している間に、来るべきブロック（例えば、次のブロック）を処理するために、パイプラインのステージのハードウェア構成要素の構成を決定する。少なくともいくつかの実施形態では、あるステージのソフトウェアパイプライン構成要素は、パイプラインの上流ステージから取得された次のブロックに関する情報に基づいて、そのステージの次のブロックを処理するための構成を決定し得る。少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素はまた、そのステージの以前に処理したブロックに関する情報を取得し、次のブロックを処理するための構成を決定する際にそれを使用し得る。少なくともいくつかの実施形態では、あるステージのソフトウェアパイプライン構成要素は、そのステージの１つのブロック又は複数のブロックを処理することにより情報を取得し、その情報をパイプラインの１つ以上の上流ステージに戻し、それらの上流ステージを現在のブロック又は来るべきブロックを処理するために構成することができる。更に、少なくともいくつかの実施形態では、パイプラインの末尾の又はその近くのソフトウェアパイプライン構成要素は、パイプラインの先頭の又はその近くで別のソフトウェアパイプライン構成要素が、パイプライン中の来るべきブロックを処理する際に使用するために、その構成要素にブロック処理結果又は統計値を戻すことができる。
【０００７】
少なくともいくつかの実施形態では、あるステージのソフトウェアパイプライン構成要素は、次のブロックについてのブロック情報を上流ステージから受信する。ソフトウェアパイプライン構成要素はまた、そのステージで以前に処理したフレームのブロックから情報を受信することができる。ソフトウェアパイプライン構成要素は、ブロックについての受信した情報に基づいて、ブロックについての構成を決定し、それを構成メモリに書き込み、ｇｏビットを設定するか、あるいは、そのステージのハードウェアパイプライン構成要素に、構成メモリに次のブロックについての構成が準備されていることを異なる方法でシグナリングすることができる。ソフトウェアパイプライン構成要素は、次いで、そのブロックについてのブロック情報を下流ステージにプッシュする（push）ことができる。
【０００８】
そのステージのハードウェアパイプライン構成要素は、前のステージからブロックを受信する。ハードウェアパイプライン構成要素が次のブロックを処理する準備ができており、メモリ中で次のブロックが準備されており、ソフトウェアパイプライン構成要素が、構成メモリに次のブロックについての構成が準備されたことをハードウェアパイプライン構成要素にシグナリングした場合、ハードウェアパイプライン構成要素は、次のブロックの処理を開始することができる。ハードウェアパイプライン構成要素は、コンフィギュレーション中の構成に基づいて、次のブロックを処理するための構成を設定し、ソフトウェアパイプライン構成要素に、構成メモリが利用可能であることをシグナリングする。ハードウェアパイプライン構成要素は、次いで、ブロックについての構成に従って、そのブロックを処理し、処理したブロックを次のステージに書き込む。
【０００９】
パイプライン中のあるステージのソフトウェアパイプライン構成要素及びハードウェアパイプライン構成要素の上記動作は、入力フレームの全てのブロックがそのステージにおいて処理されるまで、そのステージで反復される。
【図面の簡単な説明】
【００１０】
【図１】入力フレームのブロックをスキャン順に処理する従来のブロック処理パイプラインを含む例示的なビデオエンコーダを示す図である。
【図２】ビデオフレームのブロックの従来のスキャン順処理を示す図である。
【図３】少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプラインの上位のブロック図である。
【図４Ａ】少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプライン中のステージにおけるブロックの処理を示す。
【図４Ｂ】少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプライン中のステージにおけるブロックの処理を示す。
【図４Ｃ】少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプライン中のステージにおけるブロックの処理を示す。
【図５】少なくともいくつかの実施形態に係る、少なくとも１つのステージをソフトウェアパイプラインがスキップする、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプラインを示す図である。
【図６】少なくともいくつかの実施形態に係る、少なくとも１つのステージが複数のパイプラインユニットを含む、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプラインを示す図である。
【図７】少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装するブロック処理パイプラインのステージにおいて使用され得る例示的なパイプラインユニットの構成要素を示す図である。
【図８Ａ】少なくともいくつかの実施形態に係る、ブロック処理パイプライン中で並列に動作するソフトウェアパイプライン及びハードウェアパイプラインの動作方法のフローチャートである。
【図８Ｂ】少なくともいくつかの実施形態に係る、ブロック処理パイプライン中で並列に動作するソフトウェアパイプライン及びハードウェアパイプラインの動作方法のフローチャートである。
【図９】少なくともいくつかの実施形態に係る、フレーム中の現在のブロックの近隣ブロックを示して、更に、それらのブロックについてのナイト（knight）順処理法を示す図である。
【図１０Ａ】少なくともいくつかの実施形態に係る、次のブロックを決定するためのアルゴリズムを含むナイト順処理法を図式的に示す図である。
【図１０Ｂ】少なくともいくつかの実施形態に係る、次のブロックを決定するためのアルゴリズムを含むナイト順処理法を図式的に示す図である。
【図１１Ａ】少なくともいくつかの実施形態に係る、ブロック処理パイプラインについてのナイト順処理法の上位のフローチャートである。
【図１１Ｂ】少なくともいくつかの実施形態に係る、ブロック処理パイプラインについてのナイト順処理法の上位のフローチャートである。
【図１２】少なくともいくつかの実施形態に係る、現在のクワドロウ（quadrow）バッファ中にキャッシュされ得る、ナイト順処理法に従ってパイプラインにおいて処理されるクワドロウの一部分を示す図である。
【図１３】少なくともいくつかの実施形態に係る、ナイト順処理法に従って処理されている現在のクワドロウにおけるブロック、並びに、前のクワドロウバッファ中にキャッシュされ得る前のクワドロウの最終行中の近隣ブロックを図式的に示す図である。
【図１４】少なくともいくつかの実施形態に係る、近隣データがパイプラインのステージにおいてローカルバッファ中にキャッシュされるブロック処理パイプライン中のブロックを処理するための方法のフローチャートである。
【図１５Ａ】少なくともいくつかの実施形態に係る、本明細書で説明するようなブロック処理法及び装置のうちの１つ以上を実装するブロック処理パイプラインのステージにおいて使用され得る例示的なパイプライン処理ユニットのブロック図である。
【図１５Ｂ】少なくともいくつかの実施形態に係る、本明細書で説明するようなブロック処理法及び装置のうちの１つ以上を実装するブロック処理パイプラインのステージにおいて使用され得る例示的なパイプライン処理ユニットのブロック図である。
【図１５Ｃ】単一のプロセッサが２つ以上のパイプラインユニットのグループと関連付けられ得ることを示す図である。
【図１６】少なくともいくつかの実施形態に係る、本明細書で説明するようなブロック処理法及び装置のうちの１つ以上を実装するブロック処理パイプラインによって実行され得る一般的な動作の上位のブロック図である。
【図１７】少なくともいくつかの実施形態に係る、例示的なビデオエンコーダ装置のブロック図である。
【図１８】システムオンチップ（ＳＯＣ）の一実施形態のブロック図である。
【図１９】システムの一実施形態のブロック図である。  本発明は様々の変更及び代替的な形態を受け入れる余地があるが、その特定の実施形態が図面には例として示されており、本明細書において詳細に説明されることになる。しかし、図面及びそれらに対する詳細な説明は、本発明を、開示されている特定の形態に限定することを意図されているのではなく、逆にその意図は、添付の請求項によって定義されている通りの本発明の趣旨及び範囲内に入る全ての変更、均等物及び代替物を範囲に含むことを理解されたい。本出願を通して使用される単語「ｍａｙ」は、義務的な意味（即ち、必須を意味する）よりも、許容的な意味（即ち、可能性を含む意味）として使用される。同様に、単語「ｉｎｃｌｕｄｅ」、「ｉｎｃｌｕｄｉｎｇ」、及び「ｉｎｃｌｕｄｅｓ」は、〜を含むがこれに限定されるものではないということを意味する。  種々のユニット、回路、又は他の構成要素については、１つ以上のタスクを実行するよう「ｃｏｎｆｉｇｕｒｅｄ  ｔｏ（構成される）」ものとして述べる場合がある。このような状況では、「ｃｏｎｆｉｇｕｒｅｄ  ｔｏ（構成される）」は、動作中に１つ以上のタスクを実行する「ｈａｖｉｎｇ  ｃｉｒｃｕｉｔｒｙ（回路を備えている）」ことを広く意味する構造の広義な記述である。従って、ユニット／回路／構成要素は、このユニット／回路／構成要素が現在動作していないときであっても、タスクを実行するよう構成可能である。一般に、「ｃｏｎｆｉｇｕｒｅｄ  ｔｏ（構成される）」に対応する構造を形成する回路は、ハードウェア回路を含むことができる。同様に、説明上の便宜のために、種々のユニット／回路／構成要素がタスク又はタスク群を実行するように説明される場合がある。このような説明は、「〜するように構成される」という語句を含むと解釈されるべきである。１つ以上のタスクを実行するように構成されるユニット／回路／構成要素と表現することは、米国特許法第１１２条、第６項のユニット／回路／構成要素についての解釈を行使しないことを明示的に意図されている。
【発明を実施するための形態】
【００１１】
以下の説明では、本発明の完全な理解を提供するために数多くの具体的な詳細が記載される。しかし、本発明は、これら具体的な詳細なく実施され得ることを当業者は認識するはずである。いくつかの例では、本説明が不明瞭になること回避するために、周知の回路、構造、及び技術について、詳細には示されていない。
【００１２】
ブロック処理パイプラインにおいてデジタルビデオフレームを処理するための方法及び装置の各種実施形態について説明する。ブロック処理法及び装置の実施形態は、概して、入力ビデオフレームが要素のブロック（例えば、１６×１６個のピクセルブロック、３２×３２個のピクセルブロック、又は６４×６４個のピクセルブロック）に細分され、それに従って処理されるビデオ処理の関連で、本明細書で説明される。本明細書では、ブロック処理パイプラインを含み、ブロック処理法及び装置のうちの１つ以上を実装することができる例示的なＨ．２６４ビデオエンコーダの実施形態について説明する。Ｈ．２６４ビデオエンコーダは、入力ビデオフレームを入力フォーマットから、Ｈ．２６４／ＡＶＣ標準（Ｈ．２６４勧告）に記載されているようなＨ．２６４／高効率ビデオ圧縮方式（ＡＶＣ）フォーマットに変換する。図１６は、例示的なＨ．２６４ビデオエンコーダの例示的なブロック処理パイプラインを示し、図１７は、ブロック処理パイプラインを含む例示的なＨ．２６４ビデオエンコーダを示す。ただし、ブロック処理法及び装置の実施形態は、他のビデオエンコーディングフォーマット用のエンコーダにおいて、例えば、入力ビデオフレームを入力フォーマットから、ＨＥＶＣ（高能率映像符号化）標準に記載されているようなＨＥＶＣフォーマットに変換するＨＥＶＣビデオエンコーダのブロック処理パイプラインにおいて使用してもよい。ブロック処理法及び装置の実施形態を使用することができる他のビデオエンコーダとして、Ｈ．２６３ビデオエンコーダ、ＭＰＥＧ−２ビデオエンコーダ、ＭＰＥＧ−４ビデオエンコーダ、及びＪＰＥＧ−２０００ビデオエンコーダを挙げることができるが、これらに限定されるものではない。ただし、ブロック処理法及び装置の実施形態は、１つのフォーマットで入力されたデジタルビデオフレームが別のフォーマットに符号化又は変換される種々の他のビデオエンコーダ及び／又はデコーダ（コーデックとも呼ばれることがある）において実装されるブロック処理パイプラインを含むがこれには限定されない、任意のブロック処理パイプラインにおいて使用され得ることを留意されたい。更に、ブロック処理法及び装置は、ビデオエンコーダのソフトウェア及び／又はハードウェア実装形態において使用され得ることを留意されたい。本明細書で説明するブロック処理法及び装置は、ビデオエンコーダ／デコーダに加えて、ビデオフレーム又は静止デジタル画像からのブロックが、例えば、種々の画像処理アプリケーションにおいて静止デジタル画像を処理するパイプラインにおいて処理される種々の他のアプリケーションにおいて使用され得る。したがって、本明細書で使用される場合、用語「フレーム」又は「ビデオフレーム」は任意のデジタル画像を指すと解釈できることを理解されたい。
【００１３】
本明細書で説明するようなブロック処理法及び装置の実施形態は、２つ以上の並列ブロック処理パイプラインにおいて実行され得る。例えば、２個、４個、８個又はそれ以上のパイプラインが並列に動作するように構成することができ、各パイプラインは、例えば、ナイト順に従って入力されたブロックを有する入力ビデオフレームのクワドロウを処理する。
【００１４】
ブロック処理法及び装置の実施形態は、概して、入力フレームが、（ピクセル又はペルと呼ばれる）画素のブロックに、具体的には、例えばＨ．２６４符号化において使用されるマクロブロックと呼ばれる１６×１６個のピクセルブロックに細分され、それに従って処理されるビデオ処理の関連で、本明細書で説明される。ただし、実施形態を、他のサイズ及び形状のブロック又は他のエレメントのブロックが処理されるパイプラインに適用してもよい。例えば、ＨＥＶＣ符号化は、１６×１６ピクセルから６４×６４ピクセルの範囲内で変動し得る符号化ツリーユニット（ＣＴＵｓ）と呼ばれるブロックを使用する。Ｈ．２６４エンコーダなどのいくつかの実装形態では、パイプラインに入力されたブロックは、マクロブロックと呼ばれることがあり、各マクロブロックは、パイプラインのステージにおいて別々に処理され得る２つ以上のブロック又はパーティションを含む。例えば、ＹＵＶ（例えば、ＹＵＶ４２０フォーマット）色空間、又はＹＣｂＣｒ（例えば、ＹＣｂＣｒ  ４：２：０、４：２：２若しくは４：４：４フォーマット）色空間で符号化された入力ビデオフレームの場合、マクロブロックは、パイプライン中のステージにおいて別々に処理され得る彩度要素及び輝度要素の別個のブロックから構成され得る。エレメントのブロック（例えば、ピクセルのブロック）に従ってパイプライン中のフレームを処理する適用例に加えて、ブロック処理法及び装置は、シングルエレメント（例えば、シングルピクセル）がデジタル画像（例えば、ビデオフレーム又は静止画像）を処理する適用例に適用され得る。
【００１５】
並列ハードウェア及びソフトウェアブロック処理パイプライン
並列に動作するソフトウェアパイプライン及びハードウェアパイプラインをブロック処理パイプラインが含む、ブロック処理法及び装置の実施形態について説明する。ただし、ソフトウェアパイプラインは、ハードウェアパイプラインよりもブロックを１つ以上先行して動作する。パイプラインのステージはそれぞれ、ステージの現在のブロックに対して１つ以上の動作を実行するハードウェアパイプライン構成要素（例えば、回路）を含み得る。パイプラインの少なくとも１つのステージはまた、ハードウェア構成要素が現在のブロックを処理している間に、来るべきブロック（例えば、次のブロック）を処理するために、パイプラインのステージのハードウェア構成要素の構成を決定するソフトウェアパイプライン構成要素を含み得る。ソフトウェアパイプライン構成要素は、少なくともプロセッサを含み得る。少なくともいくつかの実施形態では、あるステージのソフトウェアパイプライン構成要素は、パイプラインの上流ステージから取得された次のブロックに関する情報に基づいて、そのステージの次のブロックを処理するための構成を決定し得る。少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素はまた、そのステージの以前に処理したブロックに関する情報を取得し、次のブロックを処理するための構成を決定する際にそれを使用し得る。少なくともいくつかの実施形態では、ソフトウェアパイプラインはまた、ステージの次のブロックを処理するための構成を決定する際に使用され得る、来るべきブロックから情報を取得するために、（上流の）１つ以上のブロックを「先読み（look ahead）」し得る。ソフトウェアパイプライン構成要素は、構成を決定する際に使用される１つ以上のブロックに関する統計値を生成し得る。少なくともいくつかの実施形態では、あるステージのソフトウェアパイプライン構成要素は、そのステージの１つ以上のブロックを処理することにより情報を取得し、その情報をパイプラインの１つ以上の上流ステージに戻し、それらの上流ステージを現在のブロック又は来るべきブロックを処理するために構成することができる。更に、少なくともいくつかの実施形態では、パイプラインの末尾の又はその近くのソフトウェアパイプライン構成要素は、パイプラインの先頭の又はその近くで別のソフトウェアパイプライン構成要素がパイプライン中の来るべきブロックを処理する際に使用するために、その構成要素にブロック処理結果又は統計値を戻すことができる。
【００１６】
あるステージにおいてソフトウェアパイプライン構成要素により取得され、次のブロックを処理するための構成を決定するためにそのステージにおいて使用されるブロック情報は、例えば、そのブロック及び／又は１つ以上の他のブロックに関する種々の統計値を含み得る。いくつかの実施形態において使用され得るブロック統計値のいくつかの例を以下に示すが、これらに限定することを意図するものではない。
●ピクセルの和（ｓ）
●ピクセルの２乗の和（ｓ２）
●ブロック分散（ｓ及びｓ２から推定され得る、例えば、ｖａｒ＝ｓ２−（ｓ）＾２）
●水平勾配及び垂直勾配（Ｇｘ及びＧｙ）
●Ｇｘ及びＧｙの勾配ヒストグラム。
【００１７】
種々のステージにおいてハードウェアパイプライン構成要素が実行する動作は変動することがあり、したがって、そのステージにおけるハードウェアパイプライン構成要素の構成は変動することがある。したがって、ステージにおけるソフトウェアパイプライン構成要素は、ステージにおける各ハードウェアパイプライン構成要素に応じて、特有の構成パラメータを決定及び設定することができる。ただし、情報の解析に基づいてあるステージにおいてソフトウェアパイプライン構成要素が決定及び設定し得る構成パラメータの一般的な例を以下に挙げるが、これらは限定することを意図するものではない。
【００１８】
パイプラインの１つ以上のステージは、所与のブロックにおいてピクセルを処理するためのベストモードを決定するための動作を実行することができる。特定のステージにおいて、ハードウェアパイプライン構成要素は、１つ以上の上流ステージから情報を（場合によっては、１つ以上の下流ステージからフィードバックを）受信することができ、この情報を使用して複数のモードのうちの特定の１つを選択することができる。ステージにおけるソフトウェアパイプライン構成要素は、ブロックに関する統計値（例えば、ブロック分散）を受信、生成及び解析することができ、例えば、ハードウェアパイプライン構成要素に、ブロック分散が大きい場合には複数のモードを試行させるために、あるいは、ブロック分散が小さい場合にはハードウェア構成要素を特定のモード（単数又は複数）にバイアスさせるために、その解析に従って１つ以上の構成パラメータを設定することができる。
【００１９】
少なくともいくつかの実施形態では、並列のソフトウェアパイプライン及びハードウェアパイプラインを実装するブロック処理パイプラインは、ナイト順処理と題するセクションで説明するようなナイト順に従ってブロックをパイプラインに入力し、そこでブロックを処理することができる。ただし、いくつかの実施形態では、他のブロック入力順及び処理順を使用してもよい。少なくともいくつかの実施形態では、並列のソフトウェアパイプライン及びハードウェアパイプラインを実行するブロック処理パイプラインの少なくとも１つのステージは、近隣データのキャッシュと題するセクションで説明するように、そのステージの近隣ブロックについてのデータをキャッシュするために１つ以上のローカルバッファを実装することができる。
【００２０】
図３は、少なくともいくつかの実施形態に係る、ソフトウェアパイプライン３０２及びハードウェアパイプライン３０４を実行する例示的なブロック処理パイプライン３００の上位ブロック図である。ソフトウェアパイプライン３０２及びハードウェアパイプライン３０４は、フレームのブロックを並列に処理し、ソフトウェアパイプライン３０２は、ハードウェアパイプライン３０４よりも少なくともブロックを１つ先行して処理する。パイプライン３００は、フレーム（例えば、ビデオフレーム）からのピクセルのブロックに対して１つ以上の動作を実行するように各ステージが構成された複数のステージ３２０を含むことができる。ステージの少なくともいくつか（図３ではステージ３２０Ａ及び３２０Ｂ）はそれぞれ、ソフトウェアパイプライン構成要素３２２とハードウェアパイプライン構成要素３２６とを含む少なくとも１つのパイプラインユニット３３０を備えることができる。各パイプラインユニット３３０のハードウェアパイプライン構成要素３２６は、ブロック処理法の１つ以上の特定の動作を、その時点でハードウェアパイプライン３０４中のステージ３２０にあるブロックに対して実行することができる。所与のパイプラインユニット３３０のハードウェアパイプライン構成要素３２６がステージ３２０の現在のブロックに対して作用している間に、ステージ３２０のパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、次のブロックであり得る来るべきブロックを処理するために、ハードウェアパイプライン構成要素３２６を事前構成することができる。したがって、ソフトウェアパイプライン３０２は、ハードウェアパイプライン３０４よりもブロックを１つ以上先行して動作する。
【００２１】
例えば、図３に示すように、ステージ３２０Ｂでは、ソフトウェアパイプライン構成要素３２６Ｂが、ブロックｉ＋１を処理するためにハードウェアパイプライン構成要素３２６Ｂを構成している間に、ハードウェアパイプライン構成要素３２６Ｂはその時点で、ブロックｉを処理しており、ステージ３２０Ａでは、ソフトウェアパイプライン構成要素３２６Ａが、ブロックｉ＋２を処理するためにハードウェアパイプライン構成要素３２６Ａを構成している間に、ハードウェアパイプライン構成要素３２６Ａはその時点で、ブロックｉ＋１を処理している。
【００２２】
ステージ３２０のパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、ブロックについての情報に基づいて、各パイプラインユニット３３０のハードウェアパイプライン構成要素３２６の来るべきブロック（例えば、次のブロック）を処理するための構成を決定することができる。ブロックについての情報は、少なくとも、上流ステージから受信したブロック情報を含み得る。少なくともいくつかの実施形態では、情報は、ステージ３２０において以前に処理した１つ以上のブロックからのフィードバック情報も含み得る。ソフトウェアパイプライン構成要素３２２は、決定した構成に従って、例えばハードウェアパイプライン構成要素３２６に結合されたレジスタのセット又は他のメモリにおける１つ以上の構成値を設定することによって、ブロックを処理するためのステージ３２０のパイプラインユニット３３０のハードウェアパイプライン構成要素３２６を事前構成することができる。パイプラインユニット３３０のハードウェアパイプライン構成要素３２６のブロックを処理するための構成が準備されると、ソフトウェアパイプライン構成要素３２２は、パイプラインユニット３３０のハードウェアパイプライン構成要素３２６にシグナリングすることができる。ハードウェアパイプライン構成要素３２６が前のブロックの処理を完了し、ハードウェアパイプライン構成要素３２６が次のブロックを利用可能である（例えば、その入力バッファから読み込む準備ができている）と仮定すると、パイプラインユニット３３０のハードウェアパイプライン構成要素３２６は次いで、パイプラインユニット３３０のソフトウェアパイプライン構成要素３２２が決定及び事前構成したブロックの構成に従って、次のブロックの処理を開始することができる。
【００２３】
少なくともいくつかの実施形態では、パイプラインの最初のステージ３１０は、ソフトウェアパイプライン３０２にブロック情報を入力し、ハードウェアパイプライン３０４にブロックを入力することができる。最初のステージ３１０は、例えば、ダイレクトメモリアクセス（ＤＭＡ）を介して外部メモリからブロック入力を取得し、ブロックバッファ構成要素３１２にブロックをバッファすることができる。ブロックバッファ構成要素３１２は、１つ、２つ又はそれ以上のブロックを保持するための容量を有し得る。例えば、いくつかの実施形態では、ブロックバッファ構成要素３１２は、１６個のブロックをバッファすることが可能であり得る。少なくともいくつかの実施形態では、ブロックバッファ構成要素３１２は、ハードウェアパイプライン３０４へのブロックの入力を最初のステージ３１０が開始する前に、ハードウェアパイプライン３０４に入力するための１つ、２つ又はそれ以上のブロックをバッファすることができる。少なくともいくつかの実施形態では、最初のステージ３１０がハードウェアパイプライン３０４へのブロックの入力を開始すると、最初のステージ３１０は、パイプラインユニット３３０Ａが次のブロックを受信する準備ができると、ステージ３２０Ａのパイプラインユニット３３０Ａのハードウェアパイプライン構成要素３２６Ａのバッファメモリに、ブロックバッファ構成要素３１２からの次のブロックを書き込むことができる。最初のステージ３１０は、フレーム中の全てのブロックが処理されるまで、フレームについてのブロック入力の取得、ブロックバッファ構成要素３１２へのブロックのバッファリング、及びハードウェアパイプライン３０４へのブロックの入力を継続することができる。
【００２４】
最初のステージ３１０のブロック解析構成要素３１４は、ハードウェアパイプライン３０４に入力される次のブロックを含む、ブロックバッファ構成要素３１２中にその時点でバッファされる１つ以上のブロックに対して１つ以上の解析機能を実行して、次のブロックについてのブロック情報を生成することができる。ブロック情報は、例えば、１つ以上のブロック統計値を含み得る。生成され得るブロック統計値のいくつかの非限定的な例については前述した。次のブロックについてブロック情報が生成されると、最初のステージ３１０は、パイプライン３００のステージ３２０Ａのパイプラインユニット３３０Ａのソフトウェアパイプライン構成要素３２２Ａにブロック情報を送信することができる。ブロック解析構成要素３１４は、フレーム中の全てのブロックが処理されるまで、ブロック情報の生成、及びソフトウェアパイプライン３０４へのブロック情報の入力を継続することができる。
【００２５】
少なくともいくつかの実施形態では、各パイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、１つ、２つ又はそれ以上の来るべきブロックについてのブロック情報をバッファするためのメモリを含み得る。少なくともいくつかの実施形態では、各パイプラインユニット３３０のハードウェアパイプライン構成要素３２６は、ステージ３２０において処理されることになる１つ以上のブロックを記憶するためのメモリを含み得る。少なくともいくつかの実施形態では、メモリは、ハードウェアパイプライン構成要素３２６がメモリから現在のブロックを読み込んでいる間に、前のステージがメモリに次のブロックを書き込むことができるようなダブルバッファであってもよい。
【００２６】
少なくともいくつかの実施形態では、パイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、下流ステージ３２０のソフトウェアパイプライン構成要素３２２がそのステージの各ハードウェアパイプライン構成要素３２６を構成することができるように、各ブロックについてのブロック情報を、下流ステージ３２０のパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２にプッシュすることができる。少なくともいくつかの実施形態では、ステージ３２０のパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、ステージ３２０においてあるブロックを処理するための事前構成の完了後まで、そのブロックについてのブロック情報を下流ステージ３２０にプッシュしない。少なくともいくつかの実施形態では、あるブロックについてのブロック情報は、そのブロック情報を下流ステージ３２０にプッシュする前に、ステージ３２０において利用可能な情報に基づいて更新され得る。
【００２７】
ステージ３２０のハードウェアパイプライン構成要素３２６がブロックの処理を完了した後、処理したブロックを次のステージ３２０のハードウェアパイプライン構成要素３２６に処理のために送信して処理することができる。次のステージ３２０のハードウェアパイプライン構成要素３２６は、ハードウェアパイプライン構成要素３２６が現在のブロックの処理を完了し、次のブロックを処理するための構成が準備されたという信号を、ステージ３２０のパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２から受信するまで、そのメモリ中に次のブロックを保持することができる。その代わりに、処理したブロックをパイプライン３００の最後のステージ３２０によりパイプライン３００の外部のメモリに書き込んでもよいことに留意されたい。
【００２８】
図４Ａ〜図４Ｃは、少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実行する例示的なブロック処理パイプライン中のステージのパイプラインユニットにおけるブロックの処理を例示する。図４Ａ〜図４Ｃは、ソフトウェアパイプライン構成要素３２２とハードウェアパイプライン構成要素３２６とを含む、ブロック処理パイプライン中のステージにおいて使用され得るパイプラインユニット３３０を示す。パイプラインユニット３３０のハードウェアパイプライン構成要素３２６は、ブロック処理法の１つ以上の特定の動作を、その時点でハードウェアパイプライン３０４中のステージにあるブロックに対して実行することができる。ハードウェアパイプライン構成要素３２６が現在のブロックに対して作用している間に、パイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、来るべきブロックを、例えば次のブロックを処理するために、ハードウェアパイプライン構成要素３２６を事前構成することができる。したがって、パイプラインユニット３３０のソフトウェアパイプライン構成要素３２２は、パイプラインユニット３３０のハードウェアパイプライン構成要素３２６よりもブロックを少なくとも１つ先行して動作する。
【００２９】
パイプラインユニット３３０はまた、構成メモリ（図４Ａ〜図４Ｃにはコンフィグメモリ３２４Ａ及び３２４Ｂとして示される）を含むことができる。構成メモリは、例えば、ハードウェアレジスタのセットであり得る。図４Ａ〜図４Ｃに示すように、少なくともいくつかの実施形態では、パイプラインユニット３３０のハードウェアパイプライン構成要素３２６が１つのメモリから読み込んでいる間に、ソフトウェアパイプライン構成要素３２２が他のメモリに書き込むことができるように、構成メモリを２つのメモリ（コンフィグメモリ３２４Ａ及びコンフィグメモリ３２４Ｂ）に分割することができる。構成メモリは、例えば、ソフトウェアパイプライン構成要素３２２が次のブロックについての構成をそこに書き込むアクティブレジスタのサブセットと、ハードウェアパイプライン構成要素３２６が現在のブロックについての構成をそこから読み込むシャドウレジスタのサブセットとに分割されるレジスタのセットであり得る。少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素３２２は、コンフィグメモリ３２４Ａ及び３２４Ｂのいずれかに書き込むことができ、ハードウェアパイプライン構成要素３２６は、コンフィグメモリ３２４Ａ及び３２４Ｂのいずれかから読み込むことができる。２つの構成要素は共に、メモリ３２４間で切り換わることができ、ハードウェアパイプライン構成要素３２６が一方から読み込んでいる間に、ソフトウェアパイプライン構成要素３２２が他方に書き込む。あるいは、いくつかの実施形態では、ソフトウェアパイプライン構成要素３２２は、コンフィグメモリ３２４のうちの一方（例えば、コンフィグメモリ３２４Ａ）にのみ書き込むことができ、ハードウェアパイプライン構成要素３２６は、他方のコンフィグメモリ３２４（例えば、コンフィグメモリ３２４Ｂ）のみから読み込むことができ、新しい構成のためにハードウェアパイプライン構成要素３２６が準備され、その構成が準備されたときには、コンフィグメモリ３２４Ａからコンフィグメモリ３２４Ｂにその構成をコピーすることができる。単一の構成メモリのみが使用されるか、又は３つ以上の構成メモリが使用される実施形態もまた実装され得ることに留意されたい。
【００３０】
図４Ａは、初期状態におけるステージのパイプラインユニット３３０を示す。ソフトウェアパイプライン構成要素３２２は、上流ステージから、そのステージにおいて処理されるフレームの第１のブロック（ブロックｉ）についてのブロック情報を受信する。ハードウェアパイプライン構成要素３２６は、ブロックをその時点で処理していない。ソフトウェアパイプライン構成要素３２２は、受信したブロック情報に基づいてブロックｉを処理するための構成を決定し、その構成をコンフィグメモリ３２４Ａに書き込む。ソフトウェアパイプライン構成要素３２２は、例えばｇｏビット又はフラグを設定することによって、パイプラインユニット３３０のハードウェアパイプライン構成要素３２６にブロックｉについての構成が準備されたことをシグナリングする。
【００３１】
図４Ｂは、次のサイクルにおけるパイプラインユニット３３０を示す。ソフトウェアパイプライン構成要素３２２は、下流ステージにブロックｉについてのブロック情報をプッシュする。ハードウェアパイプライン構成要素３２６は、ブロックｉを受信し、コンフィグメモリ３２４Ａ中の構成に従ってブロックｉを処理する。ソフトウェアパイプライン構成要素３２２は、そのステージにおいて処理される次のブロック（ブロックｉ＋１）についてのブロック情報を受信する。ソフトウェアパイプライン構成要素３２２は、受信したブロック情報に基づいてブロックｉ＋１を処理するための構成を決定し、その構成をコンフィグメモリ３２４Ｂに書き込む。ソフトウェアパイプライン構成要素３２２は、例えばｇｏビット又はフラグを設定することによって、ハードウェアパイプライン構成要素３２６に、ブロックｉ＋１についての構成が準備されたことをシグナリングする。
【００３２】
図４Ｃは、次のサイクルにおけるパイプラインユニット３３０を示している。ソフトウェアパイプライン構成要素３２２は、下流ステージにブロックｉ＋１についてのブロック情報をプッシュする。ハードウェアパイプライン構成要素３２６は、ブロックｉ＋１を受信し、コンフィグメモリ３２４Ｂ中の構成に従ってブロックｉ＋１を処理する。ソフトウェアパイプライン構成要素３２２は、そのステージにおいて処理される次のブロック（ブロックｉ＋２）についてのブロック情報を受信する。ソフトウェアパイプライン構成要素３２２は、受信したブロック情報に基づいて、ブロックｉ＋２を処理するための構成を決定し、その構成をコンフィグメモリ３２４Ａに書き込む。ソフトウェアパイプライン構成要素３２２は、例えばｇｏビット又はフラグを設定することによって、ハードウェアパイプライン構成要素３２６に、ブロックｉ＋２についての構成が準備されたことをシグナリングする。
【００３３】
図４Ｃはまた、あるステージにおける以前に処理したブロックからの情報は、そのステージのソフトウェアパイプライン構成要素３２２により取得することができ、そのステージのハードウェアパイプライン構成要素３２６により処理される次のブロックについての構成を決定する際に使用され得ることを示している。ハードウェアパイプライン構成要素３２６は、図４Ｂに示すように、前のサイクルにおいてブロックｉの処理を完了しており、今は図４Ｃにおいてブロックｉ＋１を処理している。したがって、そのステージのブロックｉの処理による情報が利用可能であり、そのステージのパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２にフィードバックされ得る。そのステージのブロックｉの処理によるこの情報を、上流ステージから受信したブロックｉ＋２についてのブロック情報と組み合わせて使用して、ブロックｉ＋２についての構成を決定することができる。したがって、あるステージにおけるブロックの処理による情報のフィードバックは、それについての構成が生成されているブロックよりも２つ前のブロックについての情報である。
【００３４】
あるいは、いくつかの実装形態では、ソフトウェアパイプライン構成要素３２２は、そのステージのハードウェアパイプライン構成要素３２６による現在のブロックの処理の完了を待ち、この情報を使用して次のブロックについての構成を決定することができる。この場合、あるステージにおけるブロックの処理による情報のフィードバックは、それについての構成が生成されているブロックよりも１つだけ前のブロックについてのフィードバックである。
【００３５】
図５は、少なくともいくつかの実施形態に係る、少なくとも１つのステージをソフトウェアパイプラインがスキップする、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプライン３００を示す図である。いくつかのパイプライン実装形態では、パイプライン３００の１つ以上のパイプラインユニット３３０は、動的構成を必要としないハードウェアパイプライン構成要素３２６を含むことができる。図５には、３つのステージ３２０Ａ、３２０Ｂ及び３２０Ｃが示されている。ステージ３２０Ａは、ソフトウェアパイプライン構成要素３２２Ａとハードウェアパイプライン構成要素３２６Ａの双方を含むパイプラインユニット３３０Ａを含み、ステージ３２０Ｃは、ソフトウェアパイプライン構成要素３２２Ｂとハードウェアパイプライン構成要素３２６Ｃの双方を含むパイプラインユニット３３０Ｃを含む。ただし、構成要素３２６がブロックに対して実行する動作（単数又は複数）は、全てのブロックについて同じであるので、ステージ３２０Ｂは、動的構成を必要としないハードウェアパイプライン構成要素３２６Ｂを含むパイプラインユニット３３０Ｂを備える。したがって、パイプラインユニット３３０Ｂは、ソフトウェアパイプライン構成要素３２２を利用しない。
【００３６】
図５に示すように、ステージ３２０Ａのソフトウェアパイプライン構成要素３２２Ａが、ステージ３２０Ａの次のブロック（ｉ＋３）を処理するための構成を決定及び設定している間に、その時点で、ステージ３２０Ａのハードウェアパイプライン構成要素３２６Ａは、ブロックｉ＋２を処理している。ステージ３２０Ｂのハードウェアパイプライン構成要素３２６Ｂはその時点で、ブロックｉ＋１を処理している。ステージ３２０Ｃのソフトウェアパイプライン構成要素３２２Ｂが、ステージ３２０Ａの次のブロック（ｉ＋１）を処理するための構成を決定及び設定している間に、ステージ３２０Ｃのハードウェアパイプライン構成要素３２６Ｃはその時点で、ブロックｉを処理している。少なくともいくつかの実施形態では、ステージ３２０Ａが、ブロックｉ＋２を処理するための構成を完了すると、ブロックｉ＋２についてのブロック情報が、ソフトウェアパイプライン構成要素３２２Ａからソフトウェアパイプライン構成要素３２２Ｂへと下流にプッシュされ、ソフトウェアパイプライン構成要素３２２Ｂが、ブロックｉ＋２を処理するためにハードウェアパイプライン構成要素３２２Ｃを構成する準備ができるまで、ソフトウェアパイプライン構成要素３２２Ｂにバッファされる。あるいは、ステージ３２０Ｂは、ブロック情報がステージ３２０Ａからプッシュされるバッファを含み、そこからブロック情報がステージ３２０Ｃにプッシュされる。別の代替として、ステージ３２０Ａは、ステージ３２０Ｃの準備ができるまで、終了したブロック情報をバッファし得る。
【００３７】
図６は、少なくともいくつかの実施形態に係る、少なくとも１つのステージが複数のパイプラインユニットを含む、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプライン３００を示す図である。図６に示すように、ステージ３２０Ａは、ソフトウェアパイプライン構成要素３２２Ａとハードウェアパイプライン構成要素３２６Ａとを含む単一のパイプラインユニット３３０Ａを含み、ステージ３２０Ｃは、ソフトウェアパイプライン構成要素３２２Ｃとハードウェアパイプライン構成要素３２６Ｄとを含む単一のパイプラインユニット３３０Ｃを含む。しかしながら、ステージ３２０Ｂは、２つのパイプラインユニット３２０Ｂ及び３２０Ｃを含む。パイプラインユニット３３０Ｂは、ソフトウェアパイプライン構成要素３２２Ｂ及びハードウェアパイプライン構成要素３２６Ｂを含む。パイプラインユニット３３０Ｃは、ハードウェアパイプライン構成要素３２６Ｃのみを含む。ハードウェアパイプライン３０４では、ステージ３２０Ａのパイプラインユニット３３０Ａからのブロック又はブロックの一部分が、ステージ３２０Ｂのハードウェアパイプライン構成要素３２６Ｂとハードウェアパイプライン構成要素３２６Ｃの双方を通過するが、それらは、処理したブロック又はブロックの一部分を、ステージ３２０Ｃ中のパイプラインユニット３３０Ｄのハードウェアパイプライン構成要素３２６Ｄに出力する。ソフトウェアパイプライン３０２では、ブロック情報は、ステージ３２０Ａのソフトウェアパイプラインユニット３２２Ａからステージ３２０Ｂのソフトウェアパイプラインユニット３２２Ｂに渡され、ステージ３２０Ｂのソフトウェアパイプラインユニット３２２Ｂからステージ３２０Ｃのソフトウェアパイプラインユニット３２２Ｃに渡される。
【００３８】
図示していないが、いくつかの実装形態では、ステージは、ソフトウェアパイプライン構成要素３２２とハードウェアパイプライン構成要素３３６の双方を含む２つ以上のパイプラインユニット３３０を備えてもよい。この場合、上流ステージは、ステージ３２０の各パイプラインユニットのソフトウェアパイプライン構成要素３２２にブロック情報を供給することができる。ただし、少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素３２２のうちの１つのみが、下流ステージ３２０のパイプラインユニット３３０のソフトウェアパイプライン構成要素３２２にブロック情報をプッシュしてもよい。
【００３９】
図７は、少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装するブロック処理パイプラインのステージにおいて使用され得る例示的なパイプラインユニットの構成要素を示している。図７に示すように、パイプラインユニット４００のハードウェアパイプライン構成要素４０４は、少なくともメモリ４３２及びユニットコア４３０を含むことができる。ユニットコア５０２０は、ブロック処理パイプラインの特定のステージにおいてブロック又はブロックの一部分に対して又はそれについて特定の動作を実行するように構成された構成要素（例えば、回路）であり得る。メモリ４３２は、例えば、次のブロックについてのデータが前のパイプラインユニットからメモリ４３２に書き込まれている間に、ユニットコア４３０がメモリ４３２からブロックについてのデータを読み込み、処理することを可能にするダブルバッファメモリであり得る。
【００４０】
図７に示すように、パイプラインユニット４００はまた、メモリ４３２とユニットコア４３０とを含むハードウェアパイプライン構成要素４０４に加えて、少なくともプロセッサ４１０とメモリ４１２とを含むソフトウェアパイプライン構成要素４０２を含むことができる。プロセッサ４１０は、例えば、モバイルプロセッサ又はＭクラスプロセッサであり得る。プロセッサ４１０は、例えば、ソフトウェアパイプライン構成要素４０２で受信したブロック情報に基づいて、ハードウェアパイプラインユニット４０４において、処理される次のブロックについての構成を決定及び設定するように構成され得る。少なくともいくつかの実施形態では、プロセッサ４１０はまた、例えば下位のファームウェアマイクロコードを用いて、種々のアプリケーションについてブロック処理パイプラインが実行するアルゴリズムにおける柔軟性を可能にするように構成可能であり得る。
【００４１】
少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素４０２は、パイプラインの前の（上流の）ステージからブロック情報を受信し、パイプラインの後続の（下流の）ステージにブロック情報を送信するように構成され得る。更に、パイプラインの最後のステージのソフトウェアパイプライン構成要素４０２は、パイプラインの上流ステージ（例えば第１のステージ）にフィードバックデータを送信するように構成され得る。少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素４０２はまた、パイプラインユニット４００のハードウェアパイプライン構成要素４０４が以前に処理したブロックについての情報を受信し得る。
【００４２】
ソフトウェアパイプライン構成要素４０２は、パイプラインの上流ステージから受信したブロック情報をメモリ４１２にバッファし、ブロック情報をメモリ４１２からパイプラインの下流ステージにプッシュすることができる。少なくともいくつかの実施形態では、メモリ４１２の、前のブロックについてのブロック情報にプロセッサ４１０がアクセスしている間に、上流ステージが次のブロックについてのブロック情報をソフトウェアパイプライン構成要素４０２にプッシュすることができるように、メモリ４１２をダブルバッファメモリとしてもよい。図５のステージ３２０Ｂによって示されるようなソフトウェアパイプライン構成要素を前のステージが含まない場合、メモリ４１２は、ブロック情報の３つ以上のセットをバッファすることが可能であり得る。
【００４３】
プロセッサ４１０は、次のブロックについてのブロック情報をメモリ４１２から読み込み、そのブロック情報に基づいて、次のブロックについての構成を決定することができる。少なくともいくつかの実施形態では、プロセッサ４１０はまた、パイプラインユニット４００のハードウェアパイプライン構成要素４０４が以前に処理したブロックについての情報を受信し、次のブロックについての構成を決定する際にその情報を使用し得る。
【００４４】
図７に示すように、パイプラインユニット４００はまた、ソフトウェアパイプライン構成要素４０２とハードウェアパイプライン構成要素４０４との間にインターフェース４０６を含むことができる。少なくともいくつかの実施形態では、インターフェース４０６は、レジスタのセットであり得る。ただし、他の方法でインターフェース４０６が実装され得ることに留意されたい。図７に示すようなパイプラインユニット４００では、インターフェース４０６は、少なくとも、コンフィグメモリ４２０Ａ、コンフィグメモリ４２０Ｂ及びｇｏ４２２を含む。少なくともいくつかの実施形態では、プロセッサ４１０は、コンフィグメモリ４２０Ａ及び４２０Ｂのいずれかに書き込むことができ、ユニットコア４３０は、コンフィグメモリ４２０Ａ及び４２０Ｂのいずれかから読み込むことができる。即ち、プロセッサ４１０及びユニットコア４３０は、２つのメモリ４２０間でトグルすることができ、ユニットコア４３０が一方から読み込んでいる間に、プロセッサ４１０が他方に書き込む。あるいは、いくつかの実施形態では、プロセッサ４１０は、コンフィグメモリ４２０のうちの１つのみ（例えば、コンフィグメモリ４２０Ａ）に書き込むことができ、ユニットコア４３０は、他のコンフィグメモリ４２０（例えば、コンフィグメモリ４２０Ｂ）のみから読み込むことができ、ユニットコア４３０が、新しい構成に対して準備が整い、その構成が準備されたときには、コンフィグメモリ４２０Ａからコンフィグメモリ４２０Ｂにその構成をコピーすることができる。単一の構成メモリのみが使用されるか、又は３つ以上の構成メモリが使用される実施形態もまた実装され得ることに留意されたい。
【００４５】
ｇｏ４２２は、例えば、レジスタ又は他のメモリ中の１つ以上のビットとして実装してもよいし、あるいは他の方法で実装してもよい。少なくともいくつかの実施形態では、プロセッサ４１０が次のブロックについて構成を完了し、その構成によってコンフィグメモリ４２０（例えば、コンフィグメモリ４２０Ａ）を設定すると、プロセッサ４１０は、次のブロックについての構成がコンフィグメモリ４２０（例えば、コンフィグメモリ４２０Ａ）に準備されたことをユニットコア４３０にシグナリングするようにｇｏ４２２を設定することができる。現在のブロックの処理が完了し、メモリ４３２に次のブロックが準備された場合、ｇｏ４２２が次のブロックのために設定されると、ユニットコア４３０は、次のブロックの処理を開始することができる。そうでない場合、ユニットコア４３０は、メモリ４３２中で現在のブロックの処理の完了及び／又は次のブロックの準備ができるまで待つことになる。プロセッサ４１０が第１のブロックのためのステージを構成するとき、最初は（パイプライン中の第１のブロックについて）そのステージで処理されているブロックはなく、したがって、第１のブロックについてｇｏ４２２が設定され、メモリ４３２に第１のブロックが準備されると、ユニットコア４３０は第１のブロックの処理を開始することができる。ユニットコア４３０が、コンフィグメモリ４２０中の構成を終えると、ユニットコア４３０は、ｇｏ４２２を消去することにより、次のブロックについての構成を受信するために、コンフィグメモリ４２０が利用可能であることをプロセッサ４１０にシグナリングすることができる。
【００４６】
図８Ａ及び図８Ｂは、少なくともいくつかの施形態に係る、フレームのブロックを処理するブロック処理パイプライン中で並列に動作するソフトウェアパイプライン及びハードウェアパイプラインの動作方法のフローチャートである。図８Ａは、ソフトウェアパイプラインに関するステージにおける動作を示し、図８Ｂは、ハードウェアパイプラインに関するステージにおける動作を示している。ソフトウェアパイプラインは、ハードウェアパイプラインよりも、ブロックを少なくとも１つ先行して動作することに留意されたい。
【００４７】
図８Ａを参照すると、５００に示すように、ステージのソフトウェアパイプライン構成要素は、ブロック情報を受信する。ブロック情報は、上流ステージから受信したブロック情報及び／又は下流ステージから受信したブロック情報を含み得る。少なくともいくつかの実施形態では、ソフトウェアパイプライン構成要素はまた、そのステージの以前に処理したフレームのブロックからの情報を受信することができる。１つ、２つ又はそれ以上のブロックについてのブロック情報が、ソフトウェアパイプライン構成要素のローカルメモリ中にバッファされ得る。要素５００に戻る矢印によって示されるように、フレーム中に処理されるブロックがある限り、要素５００が反復して実行され得る。
【００４８】
５０２に示すように、ステージにおいて次のブロックについてのブロック情報が準備されると、ソフトウェアパイプライン構成要素は、そのブロックについての受信した情報に基づいて、そのブロックについての構成を決定することができる。５０４に示すように、ソフトウェアパイプライン構成要素は、ブロックについての構成を、そのステージの構成メモリに書き込むことができる。５０６に示すように、ソフトウェアパイプライン構成要素は、ｇｏビットを設定することができるか、あるいは、別の方法で、構成メモリにおいて次のブロックについての構成が準備されたことを、そのステージのハードウェアパイプライン構成要素にシグナリングすることができる。５０６に示すように、ソフトウェアパイプライン構成要素は、次いで、ブロックについてのブロック情報を下流ステージにプッシュすることができる。５１０において、そのステージで処理されるフレームのブロックが更にある場合、ソフトウェアパイプライン方法は要素５０２に戻って、次のブロックについてのハードウェアパイプライン構成要素の構成を開始することができる。そうでない場合、このステージでのフレームの処理が終わり、本方法は完了する。
【００４９】
図８Ｂを参照すると、あるステージのハードウェアパイプライン構成要素は、処理されるブロックを前のステージから受信する。ブロック情報は、ハードウェアパイプライン構成要素のローカルメモリにバッファされ得る。少なくともいくつかの実施形態では、ローカルメモリは、ハードウェアパイプライン構成要素がメモリからの現在のブロックを処理している間に、前のステージが次のブロックをこのステージに書き込むことができるようにダブルバッファメモリであってもよい。要素５５０に戻る矢印によって示されるように、フレーム中に処理されるブロックがある限り、要素５５０が反復して実行され得る。
【００５０】
５５２において、ハードウェアパイプライン構成要素がその時点でブロックを処理しておらず、メモリに次のブロックが準備されており、ソフトウェアパイプライン構成要素が、（例えば、ｇｏビット又はフラグを設定することによって）構成メモリに次のブロックについての構成が準備されたことをハードウェアパイプライン構成要素にシグナリングした場合、ハードウェアパイプライン構成要素は、次のブロックの処理を開始することができる。少なくともいくつかの実施形態では、これらの３つの条件のいずれかが満たされない場合、ハードウェアパイプライン構成要素は、３つの全てが満たされるまで待つ。ただし、処理されるフレーム中の第１のブロックについて、ハードウェアパイプライン構成要素において、処理するために第１のブロックを受信したときに、ハードウェアパイプライン構成要素において処理されている現在のブロックはないことに留意されたい。
【００５１】
全ての必要条件を満たした場合、５５４に示すように、ハードウェアパイプライン構成要素は、構成メモリ中の構成に従って、次のブロックを処理するための構成を設定する。５５６に示すように、ハードウェアパイプライン構成要素は、ｇｏビットを消去するか、あるいは、構成メモリが利用可能であることをソフトウェアパイプライン構成要素にシグナリングする。５５８に示すように、ハードウェアパイプライン構成要素は、ブロックについての構成に従って、ブロックを処理する。５６０に示すように、ハードウェアパイプライン構成要素は、処理したブロックを次のステージに書き込む。あるいは、最後のステージにおいて、処理したブロックをメモリに、例えば、ダイレクトメモリアクセス（ＤＭＡ）を介して外部メモリに書き込むことができる。５６２において、そのステージで処理されるフレームのブロックが更にある場合、ハードウェアパイプライン方法は要素５５２に戻って、全ての条件を満たしたときに、次のブロックの処理を開始することができる。そうでない場合、このステージでのフレームの処理が終わり、本方法は完了する。
【００５２】
図８Ａの要素５０２〜５０８は、図８Ｂの要素５５４〜５６０が、あるステージのハードウェアパイプライン構成要素により実行される前に、フレーム中の最初のブロックに対して、そのステージのソフトウェアパイプライン構成要素により実行されることに留意されたい。図８Ｂの要素５５４〜５６０が、現在のブロックを処理するためにハードウェアパイプライン構成要素により実行されている間に、次のブロックに対してのハードウェアパイプライン構成要素を構成するために、図８Ａの要素５０２〜５０８が、そのステージのソフトウェアパイプライン構成要素により実行され得る。
【００５３】
ナイト順処理
従来の方法の場合のようにスキャン順に従ってパイプライン中のブロックを処理するのではなく、本明細書で「ナイト順」と呼ぶ順序に従ってパイプラインにブロックを入力し、そこで処理するブロック処理法及び装置の実施形態について説明する。ナイト順は、１行下に２列左にナイトが移動するチェスのナイトの駒の移動を参照するものである。ただし、本明細書で使用される「ナイト順」は、下に１行、左にｐ列の移動をより全般的に包含するものであり、ｐは２であってもよいが、必ずしも２でなくてもよいことに留意されたい。
【００５４】
ナイト順処理法は、パイプライン中の隣接するブロックの間に間隔（１つ以上のステージ）を提供することができ、それにより、例えば、第１のブロックを処理するパイプラインの下流ステージから第１のブロックからのデータに依存する第２のブロックを処理するパイプラインの上流ステージへのデータのフィードバックが容易になる。ブロック処理パイプラインの１つ以上のステージは、所与のブロックを処理するときに、１つ以上の他の近隣ブロックからの情報を必要とすることがある。図９は、情報が必要とされ得る現在のブロック（ｍ，ｎ）の近隣ブロック、左（ｍ−１，ｎ）、上（ｍ，ｎ−１）、左上（ｍ−１，ｎ−１）、右上（ｍ＋１，ｎ−１）、及び２つ右上（ｍ＋２，ｎ−１）を示している。近隣ブロック（単数又は複数）からのこれらの情報の必要性は、依存性と呼ぶことができる。例えば、図９を参照すると、ブロック（ｍ，ｎ）の左隣からの情報は、そのブロックに対して特定の動作を実行するために必要とされ得る。ナイト順処理法では、ブロック（ｍ，ｎ）の直後にパイプラインへブロック（ｍ＋１，ｎ）を入力するのではなく、パイプラインに入力される次のブロック入力は、ブロック（ｍ−２，ｎ＋１）である。スキャン順ではなくナイト順でパイプラインにブロックを入力することにより、パイプラインの行の隣接するブロック間に間隔（例えば、１つ以上のステージ）が提供される。
【００５５】
ナイト順処理法の少なくともいくつかの実施形態では、入力フレーム中のブロックの行を、本明細書で「クワドロウ」と呼ぶ４つの行のセットに分割することができ、ナイト順処理法は、クワドロウ境界によって制約される。図９を参照する。ナイト順と共にクワドロウ境界を使用する場合、処理しているブロック（ｍ−１，ｎ）は、ブロック（ｍ，ｎ）がパイプラインに入力されたときの４つ下流のステージとなり、ブロック（ｍ，ｎ）は、ブロック（ｍ＋１，ｎ）がパイプラインに入力されたときの４つ下流のステージとなる。したがって、ある行で隣接しているブロックは、パイプライン中で４ステージ離れていることになる。したがって、左隣の情報に依存する動作をブロックに対して実行するステージでは、左隣の情報は、スキャン順でブロックを処理する場合よりも待ち時間が少なく、すぐに利用可能になりやすい。左隣に対する依存性に加えて、ブロック処理法の１つ以上の動作は、図９に示すような直上隣のブロック、左上隣のブロック、右上隣のブロック、及び２つ右上隣のブロックなどの、前の（即ち上の）行の近隣ブロックに依存し得る。クワドロウ制約条件を用いたナイト順処理法は、比較的小さいバッファ中の各ステージでこの近隣データのローカルキャッシュを行うために活用され得る近隣情報のローカリティを提供する。
【００５６】
少なくともいくつかの実施形態では、クワドロウ制約条件を使用したナイト順処理法に従ってパイプラインに入力する次のブロックを決定するための基本アルゴリズムは、以下の通りである。
クワドロウの最下行でない場合、
次のブロックは、２列左かつ１行下（−２，＋１））である。
それ以外の、クワドロウの最下行である場合、
次のブロックは、７列右かつ３行上（＋７，−３）である。
【００５７】
ただし、ナイト順処理法は、２ブロック左かつ１ブロック下（−２，＋１）以外の間隔で実行してもよい。例えば、方法は、次のブロックを得るために、２ブロック左かつ１ブロック下ではなく、３ブロック左かつ１ブロック下に進むように実行してもよい。別の例として、本方法は、次のブロックを得るために、１ブロック左かつ１ブロック下（−１、＋１）に進むように実行してもよい。更に、ナイト順処理法は、クワドロウ（４行）制約条件以外の行制約条件で実行され得る。換言すると、ナイト順処理法を制約するための実施形態において、少なくとも２行の行グループを使用してもよい。ナイト順処理法を制約するために使用される行の数をｒと仮定すると、以下のようにアルゴリズムを一般化することができる。
行グループの最下行でない場合、
次のブロックは、ｐ列左かつ１行下（−ｐ，＋１）である。
それ以外の、行グループの最下行である場合、
次のブロックは、ｑ列右かつｒ−１行上（＋ｑ，−（ｒ−１））である。
【００５８】
ｐの値を変更すると、ｑの値に影響を与え、パイプライン中の行からの隣接するブロック間の間隔には影響を与えないが、所与のブロックとそれの他の近隣ブロック（例えば、その左上隣、上隣、及び右上隣）との間の間隔に影響を与える。特に、間隔（−１，＋１）を使用する結果、ブロック及びその対角（右上）の近隣ブロックが、パイプラインの隣接するステージにおいて同時に処理されることに留意されたい。したがって、対角的に隣接するブロックが、ブロック処理パイプラインの隣接するステージにおいて同時に処理されないように、少なくとも２ブロック左の間隔が使用され得る。ｒの値を変更すると、ｑの値に影響を与え、パイプライン中の行の隣接するブロック間の間隔に影響を与え、そのブロックとそれの他の近隣ブロック（例えば、その左上隣、上隣、及び右上隣）との間の間隔に影響を与える。
【００５９】
次のブロックを決定するための上記アルゴリズムは、最初のブロックにおいて開始することができる。別のクワドロウが後に続くクワドロウの末尾に達すると、アルゴリズムは、次のクワドロウの第１のブロックに飛び、続いて、数サイクルにわたってクワドロウと次のクワドロウとの間で交差し、その結果、クワドロウの末尾からいくつかのブロックで、次のクワドロウの先頭からいくつかのブロックをインターリーブ配置する。換言すると、ナイト順処理法は、端と端を接して配列されているかのようにクワドロウを扱う。アルゴリズムの複雑化を回避し、パイプラインにおけるブロックの一貫した間隔を維持するために、少なくともいくつかの実施形態は、第１のクワドロウの先頭及び最後のクワドロウの末尾を無効ブロックで埋めてもよい。無効ブロックは、フレームの境界の外側にあり、パイプラインに入力されるが有効フレームデータを含んでいないブロックとして定義され得、したがって、ステージでは処理されない。したがって、次のブロックを決定するためのアルゴリズムは、第１のクワドロウの最上の行の第１のブロックか又は第１のクワドロウの上の行の第１のブロックの左側の無効ブロックのいずれかであり得る最初のブロックから開始し、全てのクワドロウを進み、最後のクワドロウの終わりで、最後のクワドロウの最後のブロックがパイプラインに入力されるまで継続することができる。フレームの先頭及び末尾のパイプラインにはバブルがあるが、パイプライン中のフレームの有効ブロックの間隔は全体を通して一貫性が維持される。いくつかの実施形態では、ビデオフレームの最後のクワドロウの末尾を無効ブロックで埋める代わりに、ビデオフレームの最後のクワドロウを、ブロック処理パイプライン中で処理されることになる次のビデオフレームの第１の行と重複させてもよい。
【００６０】
図１０Ａ及び図１８Ｂは、少なくともいくつか実施形態に係る、ナイト順処理法を図式的に示している。簡潔にするために、これらの図は、１２行１２列のブロックの、１４４個の１６×１６ピクセルブロックに分割された例示的な１９２×１９２個のピクセルフレームを使用する。ただし、ナイト順処理法は任意の寸法の入力ビデオフレームに適用できることに留意されたい。図１０Ａにおいて、例示的なフレームは、ブロックの行及び列に分割されている。ブロックの行は、４つの行をそれぞれ含む３つのクワドロウに分割されている。第１のクワドロウの最後の３つの行は、無効ブロックで左に埋められ、最後の（第３の）クワドロウの最初の３つの行は、無効ブロックで右に埋められる。この例では、ブロック中の数字は、ナイト順処理法に従ってブロック処理パイプラインにブロックが入力される順序を表しており、ブロック０（第１のクワドロウの最上行の第１のブロック）から始まる。ブロック０は、パイプラインの第１のステージに入力され、別のブロックのために第１のステージが準備ができたときに、入力の次のブロック（図１０Ａのブロック１）を得るために２列左かつ１行下に進むことによって、本方法が進行する。クワドロウの一番下に達するまで、このパターンを繰り返す。クワドロウの一番下で、本方法は、次のブロックを得るために、７列右かつ３行上に進む。フレーム中のブロックの全て（並びに図１０Ａに示す無効ブロックの全て）がパイプラインに入力されるまでこれを継続する。クワドロウの末尾に達したとき、そのクワドロウの後に別のクワドロウがある場合には、入力アルゴリズムは次のクワドロウの先頭に進行する。この例では、ブロック４７が入力された後、本方法は、ブロック４８（第２のクワドロウの最上行の第１のブロック）に進行する。ブロック４７から、ブロック４４の右側の破線の矩形で示された４８への破線矢印によって示されるように、第２のクワドロウの最上行の第１のブロック（ブロック４８）は、第１のクワドロウの最上行の最後のブロック（ブロック４４）のすぐ右にあるものとして扱われ、したがって、ブロック４７から７列右かつ３行上に進むことによって到達する。換言すると、ナイト順処理法は、図１０Ｂに示すように、端と端を接して配列され、各端部が無効ブロックであるかのようにクワドロウを扱う。したがって、次のブロックを決定するためのアルゴリズムは、フレーム全体にわたって同じままである。
【００６１】
いくつかの実施形態では、第１のクワドロウの各行は、追加の無効ブロックで（例えば、２つの追加の無効ブロックで）埋められ得る。パイプラインへの入力は、図１０Ａに示すように第１のクワドロウの最上行の第１のブロックから開始する代わりに、第１のクワドロウの最上行の第１のブロックの左側の第１の無効ブロックから開始してもよい。
【００６２】
図１１Ａ及び図１１Ｂは、少なくともいくつかの実施形態に係る、ブロック処理パイプラインについてのナイト順処理法の上位のフローチャートである。図１１Ａにおいて、３１００に示すように、ナイト順処理法によって実行される次の入力ブロックを決定するためのアルゴリズムに従って次のブロックを決定する。３１０２に示すように、例えば、ダイレクトメモリアクセス（ＤＭＡ）を介してメモリから、パイプラインにブロックを入力する。３１０４が示すように、処理されるブロックがある限り、要素３１００及び３１０２の入力プロセスは継続する。３１０６に示すように、要素３１００及び３１０２によってパイプラインに入力された各ブロックをパイプライン中で処理する。最初に、各ブロックをパイプラインの第１のステージに入力に、処理し、第２のステージへの出力、処理、などを行う。ブロックがパイプラインのあるステージから次のステージに移動すると、そのステージはパイプライン中の次のブロックの処理を開始することができる。したがって、入力ブロックは、パイプラインのステージを通って移動し、各ステージは、同時にブロックを１つ処理する。３１０８に示すように、あるブロックがパイプラインの最後のステージにより処理された後、処理されたブロックは、例えば、ダイレクトメモリアクセス（ＤＭＡ）を介してメモリに出力される。
【００６３】
図１１Ｂは、ナイト順処理法によって実行され得、図１１Ａの要素３１００を詳述する、次の入力ブロックを決定するための例示的なアルゴリズムのフローチャートである。図１１Ｂは、フレームをクワドロウに分割し、次のフレームを決定するために使用されるアルゴリズムは、クワドロウの最下行上でない場合には、２列左かつ１行下（−２，＋１）であり、最下行上である場合には、７列右かつ３行上（＋７，−３）であると仮定する。ただし、他の行グループ分け及び／又は間隔アルゴリズムを使用してもよい。３１５０において、フレームの始点にある場合、本方法は、３１５２に示すように最初のブロックを得る。これがフレームの始点にない場合には、３１５４において、これがクワドロウの最後の行である場合には、３１５６に示すように、次のブロックは、７列右かつ３行上である。これがクワドロウの最後の行でない場合、次のブロックは、３１５８に示すように、２列左かつ１行下である。
【００６４】
近隣データのキャッシング
ブロック処理パイプラインのステージにおいて実行される１つ以上の動作は、図９に示すように、上隣のブロック、左上隣のブロック、右上隣のブロック、及び２つ右上隣のブロックなどの、ブロックの前の（即ち上の）行の近隣ブロックの１つ以上、並びに、左隣に依存し得る。クワドロウ制約条件を用いたナイト順処理法は、比較的小さいローカルバッファにおいて、パイプラインの各ステージで近隣データのローカルキャッシュを行うために活用され得る近隣情報のローカリティを提供する。少なくともいくつかの実施形態では、ＳＲＡＭ（スタティックランダムアクセスメモリ）技術を使用して、ローカルバッファを実装し得る。ただし、いくつかの実施形態では、他のメモリ技術を使用して、ローカルバッファを実装してもよい。
【００６５】
フレームの第１の列のブロックには左隣又は左上隣がなく、最後の列のブロックには、右上隣又は２つ右上隣がなく、最後の列の１つ前の列のブロックは、２つ右上隣がないことに留意されたい。かくして、これらの近隣の位置からの情報を使用するブロック処理法の場合、それらの列のブロックに対するこれらの近隣の位置についてのローカルバッファ中の情報は有効でなく、パイプラインのステージのそれらの列のブロックを処理する際には使用されない。更に、第１のクワドロウの最上行の上には行がなく、したがって、この行のブロックには、上隣、左上隣、右上隣、及び２つ右上隣がない。
【００６６】
ナイト順処理法を実行するブロック処理パイプラインの少なくともいくつかの実施形態では、現在のクワドロウ上のＣ個の直近に処理されたブロックをキャッシュするために十分なサイズの第１のバッファを、パイプラインの１つ以上のステージのそれぞれに実装することができる。このバッファは、現在のクワドロウバッファと呼ばれることがあり、例えば、循環ＦＩＦＯバッファとして実装され得る。少なくともいくつかの実施形態では、ナイト順法を制約するために使用される次のブロックを決定するためのアルゴリズム及び行グループサイズに従って、バッファがステージの現在のブロックの左上隣に対応するエントリを含むように、Ｃを決定することができる。バッファはまた、そのアルゴリズムに従って現在のブロックに対して２つ右上隣、左隣、右上隣及び上隣に対応するエントリを含み得る。ブロックを処理するとき、ステージは、ブロックの近隣情報が現在のクワドロウバッファにおいて有効である場合に、ブロックの近隣情報を取得するために、現在のクワドロウバッファにアクセスすることができる。いくつかのブロック処理法は、左上隣の情報を必要としないことがあり、これらの実装形態では、現在のクワドロウバッファはより小さくてもよい。
【００６７】
ステージがブロックの処理を完了したときには、そのブロックの情報が現在のクワドロウバッファ中の最後の位置に書き込まれ、そのブロックの左上隣の位置にエントリが上書きされ、したがって、そのステージにおいて処理される次のブロックのためにそのバッファを用意する。最初に、フレームの初めにおいて、フレーム中に処理されたブロックがないので、現在のクワドロウバッファには情報がなく、したがって、バッファが一杯になるまで、バッファにおいて上書きされるブロック情報はないことに留意されたい。次のブロックがそのステージにあるとき、バッファ中の前のブロックの情報は、ブロックの２つ右上の近隣情報である。
【００６８】
例えば、クワドロウの区画と、クワドロウの最下行ではない場合に２列左かつ１行下である次のブロックを決定するためのアルゴリズムと、を使用すると、現在のブロックとその左上隣との間の間隔が１３であるので、Ｃ＝１３は現在のブロックの左上隣を含むのに十分である。図１２は、少なくともいくつかの実施形態に係る、現在のクドロウバッファ中にキャッシュされ得る、ナイト順処理法に従ってパイプラインにおいて処理されるクワドロウの一部分を示している。ブロック１９は、あるステージにおける現在のブロックを表す。ステージが直近に処理した１３個のブロックを影つきブロックで表す。ブロック１９から時間的に最も離れたブロックは、その左上隣（ブロック６）であり、時間的に最も近いブロックは、その２つ右上隣（ブロック９）である。
【００６９】
クワドロウの最上行のブロックについては、その行の上の近隣についての情報は、現在のクワドロウバッファにはない。第１のクワドロウの最上行の上には行がなく、全ての他のクワドロウについて、最上行の上の行は、前のクワドロウの最下行である。したがって、現在のクワドロウバッファは、（左隣がない第１のブロックを除いて）クワドロウの最上行の全てのブロックについての左隣の情報を含むが、クワドロウの最上行のブロックについての左上隣の情報、上隣の情報、右上隣の情報、及び２つ右上隣の情報は含まない。クワドロウの最上行のブロックについてのこの近隣情報を提供するために、前のクワドロウの最後の行からの必要な近隣ブロックについての情報を保持するために十分なサイズの第２のバッファを、パイプラインの１つ以上のステージに実装し得る。このバッファは、前のクワドロウバッファと呼ばれることがあり、例えば、循環ＦＩＦＯバッファとして実装し得る。前のクワドロウバッファ中のエントリ数、並びに前のクワドロウバッファ中にキャッシュされる特定の近隣ブロックは、ブロック処理パイプラインにより実行される特定のブロック処理法の要件に依存し得る。少なくともいくつかの実施形態では、ナイト順処理法に従ってクワドロウを処理するとき、クワドロウの最下行の各ブロックについての情報を、例えば、ブロックがパイプラインの最後のステージにあるときには、外部メモリに書き込むことができる。クワドロウの最上行の各ブロックについては、近隣データ（例えば、２つ右上の近隣データ）を、例えばパイプラインの第１のステージにおいて、外部メモリから読み込むことができる。この近隣情報は、最上行からの対応するブロックとともに、パイプラインに沿って他のステージに伝達され得る。
【００７０】
図１３は、少なくともいくつか実施形態に係る、ナイト順処理法に従って処理されている現在のクワドロウにおけるブロック、並びに、前のクワドロウの最終行の近隣ブロックを図式的に示している。ブロックＡ、Ａ＋４、Ａ＋８及びＡ＋１２は、ナイト順処理法に従って、前のクワドロウで処理された。ブロックＡが最初に処理され、４サイクル後にブロックＡ＋４の処理、等が行われた。ブロックＢは、現在、パイプラインの特定のステージにある、現在のクワドロウ上のブロックを表している。ブロックＢ−１（Ｂマイナス１）〜Ｂ−１３（Ｂマイナス１３）は、現在のクワドロウのそのステージにおいて直近に処理された１３個のブロックを表す。これらのブロックからの情報は、Ｂ−１を直近のエントリとし、Ｂ−１３を最も古いエントリとして、そのステージの現在のクワドロウバッファ中に現在キャッシュすることができる。Ｂ−４は、現在のブロックＢの左隣である。たただし、ブロックＢの左上隣（ブロックＡ）、上隣（ブロックＡ＋４）、右上隣（ブロックＡ＋８）及び２つ右上隣（ブロックＡ＋１２）は、前のクワドロウの最下行にあり、ブロックＢについて現在のクワドロウバッファ中には含まれない。少なくともいくつかの実施形態では、現在のクワドロウの最上行のブロックについての近隣情報（例えば、左上隣の情報、上隣の情報、右上隣の情報及び２つ右上隣の情報）を提供するために、パイプラインの１つ以上のステージのそれぞれに、前のクワドロウバッファが実装され得る。クワドロウの処理時、クワドロウの最下行の各ブロックについての情報を、例えば、パイプラインの最後のステージにより、外部メモリの近隣データ構造に書き込む。次のクワドロウの最上行からのブロックの処理時、前のクワドロウの最下行の近隣ブロックについての情報を、例えば、パイプラインの第１のステージにより、外部メモリから読み込み、最上行ブロックと共に他のステージにパイプラインに沿って伝達される。少なくともいくつかの実施形態では、最上行のブロックの２つ右上の近隣ブロックについての情報を、外部メモリから読み込む。少なくともいくつかの実施形態では、前のクワドロウバッファは循環バッファであり、前のクワドロウバッファ中の最も古いエントリは、外部メモリから読み込んだ近隣情報に置換される。種々の実施形態では、最下行のブロックがそこに書き込まれ、近隣ブロック情報がそこから読み込まれる外部メモリは、最後のステージの外部のパイプライン構成要素のメモリ、パイプラインを実装するビデオエンコーダのメモリ、又はビデオエンコーダの外部のメモリであり得る。ただし、いくつかの実施形態では、メモリは、パイプラインの最後のステージのローカルメモリでもよい。少なくともいくつかの実施形態は、外部メモリへのデータの上書きを回避するために、外部メモリに対する読み込み及び書き込みを制御するためのインターロック機構を行の間に含み得る。
【００７１】
図１４は、少なくともいくつかの実施形態に係る、近隣データがパイプラインのステージにおいてローカルバッファ中にキャッシュされるブロック処理パイプライン中のブロックを処理する方法のフローチャートである。例えば、図１４の方法は、図１１Ａの要素３１００、３１０２及び３１０４に示したようなナイト順処理法に従ってパイプラインに入力されたブロックを処理するために、図１１Ａの要素３１０６において使用され得る。図１４において、あるブロックをパイプラインに入力する。４２００において、パイプラインの第１のステージで、そのブロックがクワドロウの最上行にある場合、４２０２に示すように、そのブロックについての近隣のデータを、外部メモリから（例えば、ＤＭＡを介して）、前のクワドロウバッファに読み込むことができる。少なくともいくつかの実施形態では、近隣のデータは、前のクワドロウの最下行の、現在のブロックの２つ右上隣に対応する。４２０４に示すように、現在のステージにおいてそのブロックを処理する。そのステージにおける動作が、ブロックを処理するために近隣情報を必要とする場合、そのステージは、現在のクワドロウバッファ及び／又は前のクワドロウバッファ中の近隣情報を使用してその動作を実行することができる。ブロックがクワドロウの最上行にある場合には、前のクワドロウバッファから近隣情報のうちの少なくともいくつかを取得し、そうでない場合には、現在のクワドロウバッファから近隣情報を取得することができる。４２０６に示すように、現在のブロックに関する情報をそのステージにおいて現在のクワドロウバッファに書き込んで、後続のブロックで使用することができる。この情報は、現在のクワドロウバッファ中の最も古いエントリを上書きしてもよい。
【００７２】
４２０８において、更にステージがある場合には、４２１０に示すように、ブロックを次のステージに送信することができる。４２１２において、前のクワドロウバッファからの近隣情報も次のステージに送信することができる。少なくともいくつかの実施形態では、現在のブロックがクワドロウの最上行にある場合、この近隣情報を次のステージのみに送信する。ブロックがパイプラインの最後のステージに達して、最後のステージにより処理されるまで、要素４２０４〜４２１２を反復することができる。４２０８において、ステージがそれ以上ない場合には、パイプラインにおけるブロックの処理は終了する。４２１４において、ブロックがクワドロウの最下行にある場合、ブロックについての情報を外部メモリ（例えば、ＤＭＡを介して）に書き込み、次のクワドロウの最上行において、ブロックについての近隣のデータとして読み込む。更に、処理された有効ブロックの全てを、図１１Ａの要素３１０８によって示すように出力する。
【００７３】
例示的なパイプラインユニット
図１５Ａ〜図１５Ｃは、少なくともいくつかの実施形態に係る、本明細書で説明するようなブロック処理法及び装置のうちの１つ以上を実装するブロック処理パイプラインのステージにおいて使用され得る例示的なパイプライン処理ユニットのブロック図である。例えば、図１６に示した例示的なブロック処理パイプラインの各ステージにおいて、図１５Ａ及び図１５Ｂに示すようなパイプラインユニット５０００Ａ及び／又は５０００Ｂのうちの１つ以上を使用することができる。図１５Ａ〜図１５Ｃは、限定することを意図するものではなく、パイプライン処理ユニットは、図に示したものよりも多くの又は少ない構成要素及び機能を含み得ることに留意されたい。
【００７４】
図１５Ａに示すように、パイプラインユニット５０００Ａは、少なくともメモリ５０１０及びユニットコア５０２０を含むことができる。ユニットコア５０２０は、ブロック処理パイプラインの特定のステージにおいてブロック又はブロックの一部分に対して又はそれについて特定の動作を実行するように構成された構成要素（例えば、回路）であり得る。メモリ５０１０は、例えば、次のブロックについてのデータが前のパイプラインユニットからメモリ５０１０に書き込まれている間に、ユニットコア５０２０がメモリ５０１０からブロックについてのデータを読み込み、処理することを可能にするダブルバッファメモリであり得る。
【００７５】
図１５Ｂに示すように、パイプラインユニット５０００Ｂは、図１５Ａに示したようなメモリ５０１０及びユニットコア５０２０に加えて、プロセッサ５０３０も含むことができる。プロセッサ５０３０は、例えば、モバイルプロセッサ又はＭクラスプロセッサであり得る。例えば、ブロック処理パイプラインのパイプラインユニット５０００Ｂ中のプロセッサ５０３０を使用して、ブロック境界においてブロック処理パイプラインを制御することができる。パイプラインユニット中のプロセッサ５０３０は、例えば下位のファームウェアマイクロコードを用いて、種々のアプリケーションについてブロック処理パイプラインが実行するアルゴリズムにおけるフレキシビリティを可能にするように構成可能であり得る。少なくともいくつかの実施形態では、パイプラインにおいてパイプラインユニット５０００Ｂのプロセッサ５０３０は、前の（上流の）パイプラインユニット５０００Ｂのプロセッサ５０３０からデータを受信し、後続の（下流の）パイプラインユニット５０００Ｂのプロセッサ５０３０にデータを送信するように構成され得る。更に、パイプラインユニット５０００Ｂのプロセッサ５０３０は、パイプラインの第１のステージにあるパイプラインユニット５０００Ｂのプロセッサ５０３０に、フィードバックデータを送信するように構成され得る。
【００７６】
図１５Ａ及び図１５Ｂに示すように、パイプラインユニット５０００Ａ又は５０００Ｂは、例えばダイレクトメモリアクセス（ＤＭＡ）によって、外部メモリにアクセスするように構成され得る。更に、パイプラインユニット５０００Ａ又は５０００Ｂは、パイプラインの１つ以上の前の（上流の）ステージに情報を戻し、及び／又は、パイプラインの１つ以上の後続の（下流の）ステージから戻された情報を受信するように構成され得る。更に、パイプラインユニット５０００Ａ又は５０００Ｂは、パイプラインの１つ以上の後続の（下流の）ステージに情報を伝達する、及び／又は、パイプラインの１つ以上の前の（上流の）ステージから伝達された情報を受信するように構成され得る。
【００７７】
図１５Ｃに示すように、図１５Ａに示したような２つ以上のユニット５０００Ａは１つにグループ化され得、パイプライン中で動作を実行するように構成され得る。単一のプロセッサ５０３０は、パイプラインユニット５０００Ａを制御及び／又は構成するために使用され得る。
【００７８】
例示的なブロック処理パイプライン
図１６は、少なくともいくつかの実施形態に係る、本明細書で説明するようなブロック処理法及び装置のうちの１つ以上を実装するブロック処理パイプラインによって、ステージにおいて実行され得る、Ｈ．２６４符号化のための例示的なブロック処理法６０００における一般的な動作の上位のブロック図である。ブロック処理法６０００を実行するブロック処理パイプラインは、例えば、入力ビデオフレームを入力フォーマットからＨ．２６４／ＡＶＣ標準に記載されているＨ．２６４／高効率ビデオ圧縮方式（ＡＶＣ）フォーマットに変換するように構成されるＨ．２６４ビデオエンコーダ装置の構成要素として実装され得る。Ｈ．２６４／ＡＶＣ標準は、Ｈ．２６４勧告とも呼ばれることもある「ＩＴＵ−Ｔ勧告Ｈ．２６４：オーディオビジュアルサービス全般のための高度ビデオ符号化方式」と題する文書において、ＩＴＵ−Ｔによって公開されている。例示的な入力ビデオフォーマットは、ＹＣｂＣｒ色空間で符号化された１０８０ｐ（１９２０×１０８０ピクセル、２．１メガピクセル）である。ただし、ビデオエンコーダ装置中のパイプラインの実施形態を使用して、他の入力ビデオフォーマットをＨ．２６４に符号化してもよい。
【００７９】
ビデオエンコーダ装置は、例えば、集積回路（ＩＣ）として、又はシステムオンチップ（ＳＯＣ）などのＩＣ上のサブシステムとして、実装され得る。少なくともいくつかの実施形態では、ビデオエンコーダ装置は、少なくとも、パイプライン構成要素と、プロセッサ構成要素（例えば、低電力マルチコアプロセッサ）と、その装置の機能的構成要素を相互接続するバスサブシステム又はファブリックとを含み得る。ビデオエンコーダ装置のプロセッサ構成要素は、例えば、レート制御などのパイプラインのフレームレベル制御を実行し、パイプライン構成を実行し、ドライバを介してアプリケーションソフトウェアとインターフェースすることができる。パイプライン構成要素は、図１６に示すような動作のうちの１つ以上の一部分又は全てを実行するように各々が構成された複数の処理ステージを実行することができ、各ステージが１つ以上の処理ユニットを含む。パイプライン中の処理ユニットのうちの少なくとも１つは、例えば、各ステージの処理ユニットのパラメータをマクロブロックレベルで構成することができるプロセッサ構成要素（例えば、Ｍクラスプロセッサ）を含み得る。ビデオエンコーダ装置は、メモリ構成要素などの他の機能構成要素又はユニット、並びに、例えば１つ以上のビデオ入力ソース及び外部メモリ、に対する外部インターフェースを含み得る。ビデオエンコーダ装置に対する例示的なビデオ入力ソースは、限定はしないが、生ビデオ入力処理のためのビデオカメラ、再符号化／トランスコーディングのためのデコーダ装置、フラッシュ若しくは他のメモリ、及びＪＰＥＧデコーダのうちの１つ以上を含み得る。例示的なビデオエンコーダ装置を図１５に示す。ビデオエンコーダ装置を含む例示的なＳＯＣを図１６に示す。ナイト順処理を用いたブロック処理法６０００を実行するブロック処理パイプラインのハードウェア実装形態に関して全般的に実施形態を説明しているが、ナイト順処理を用いたブロック処理法６０００は、ソフトウェアで実行されるブロック処理パイプラインにより実行され得る。
【００８０】
図１６に示した方法６０００を実行するパイプラインは、Ｈ．２６４標準に従って、入力ビデオフレームの１６×１６個のピクセルマクロブロックを処理することができ、各マクロブロックは、パイプラインのステージにおいて別々に処理され得る２つ以上のブロック又はパーティションを含む。入力ビデオフレームは、例えば、ＹＣｂＣｒ色空間でエンコードすることができ、各マクロブロックは、パイプラインのステージにおいて別々に処理することができる彩度要素及び輝度要素の別個のブロックから構成されうる。ブロック処理法６０００を実行するパイプラインは、入力マクロブロックをメモリから受信し、処理したマクロブロックをメモリに出力することができる。メモリは、ビデオエンコーダ装置のメモリ及び／又はビデオエンコーダ装置の外部のメモリを含み得る。少なくともいくつかの実施形態では、例えばダイレクトメモリアクセス（ＤＭＡ）を介して、必要に応じてパイプラインによりメモリにアクセスすることができる。少なくともいくつかの実施形態では、パイプラインと外部メモリとの間に実装されるキャッシュメモリを有するマルチレベルメモリとして、メモリを実装することができる。例えば、いくつかの実装形態では、１つ以上のクワドロウを外部メモリから読み込み、パイプラインによるアクセスのためにキャッシュメモリにキャッシュして、外部メモリの読み込み回数を低減することができる。
【００８１】
パイプラインによりステージにおいて実行され得る、図１６に示したような例示的なＨ．２６４ビデオエンコーダ法６０００の全般的な動作、並びに、パイプラインを通る全般的なデータフローについて、以下に簡単に説明する。方法６０００の全般的な動作のそれぞれは、パイプラインの１つ以上のステージにおいて１つ以上のパイプラインユニットにより実行され得る。図１３Ａ〜図１３Ｃに例示的なパイプラインユニットを示す。また、図１６に示したそれぞれの全般的な動作は、パイプラインの１つ、２つ又はそれ以上のステージのパイプラインユニットにより実行され得る２つ以上の動作に細分され得る。ただし、図１６に示した動作の２つ以上を、パイプラインの同じステージで実行することができる。パイプライン中の各ステージは、マクロブロックを１つ同時に処理し、したがって、動作のうちの２つ以上が、その時点で各ステージにある同じマクロブロックに対して同時に動作することができる。パイプラインは、図１６に示したそれらの及び以下で説明したよりも多くの、それよりも少ない、又は他の動作を実行することができることに留意されたい。
【００８２】
マクロブロック入力
少なくともいくつかの実施形態では、マクロブロック入力６００２は、パイプラインの最初のステージにより実行され得る。少なくともいくつかの実施形態では、マクロブロック入力６００２は、例えばＤＭＡを介して、メモリから輝度ピクセル及び彩度ピクセルを受信し、パイプラインの下流ステージのファームウェアにより使用される入力ピクセルに関する統計値を計算し、ファームウェアの先読みが可能になるように入力されたマクロブロックをバッファする。入力されたマクロブロックピクセルデータ及び対応する統計値はバッファされ、フレーム内及びフレーム間推定６０１０動作を実行するパイプラインの１つ以上の下流ステージに送信される。少なくともいくつかの実施形態では、最大で１６個のマクロブロックの入力バッファが、入力ピクセル及び統計値のために維持される。マクロブロックピクセルデータ及び対応する統計値は、図３〜図８Ｂに関して前述したように、ナイト順入力アルゴリズムに従ってパイプラインの下流ステージに入力され得る。
【００８３】
少なくともいくつかの実施形態では、マクロブロック入力６００２は、クワドロウ境界において、メモリから前のクワドロウの最下行からの近隣データを読み込み、その近隣データを少なくとも１つの下流ステージに伝達する。
【００８４】
イントラフレーム及びインターフレーム推定
イントラフレーム及びインターフレーム推定６０１０動作は、パイプラインに入力されたマクロブロックを符号化する際に使用される前に符号化されたピクセルのブロックを決定することができる。Ｈ．２６４ビデオ符号化において、現在のフレーム内の既に符号化されたピクセルのブロックを使用して、各マクロブロックを符号化することができる。これらのブロックを決定するプロセスを、イントラフレーム推定又は単にイントラ推定と呼ぶことができる。ただし、マクロブロックは、（基準フレームと呼ばれる）１つ以上の以前に符号化されたフレームのピクセルのブロックを使用して符号化してもよい。基準フレーム中の一致するピクセルブロックを発見するプロセスを、インターフレーム推定、あるいは、より一般的には動き推定と呼ぶことができる。イントラフレーム及びインターフレーム推定６０１０動作は、パイプラインの１つ、２つ又はそれ以上のステージにおいて実行され得る２つ以上のサブ動作に細分され得、各ステージの１つ以上の構成要素又はパイプラインユニットは、特定のサブ動作を実行するように構成される。
【００８５】
少なくともいくつかの実施形態では、マクロブロック入力６００２は、クワドロウ境界において、メモリから前のクワドロウの最下行からの近隣データを読み込み、その近隣データを、イントラフレーム及びインターフレーム推定６０１０に、例えば、イントラフレーム推定構成要素に伝達する。更に、動き補償及び復元６０３０、例えば、輝度復元構成要素は、近隣データをフィードバックとして、イントラフレーム及びインターフレーム推定６０１０に、例えば、イントラフレーム推定構成要素に伝達することができる。
【００８６】
動き推定
少なくともいくつかの実施形態では、動き推定を実行するために、パイプラインは、探索される各基準フレームの動き推定エンジンの１つのインスタンスを含むことができる。各動き推定エンジンは、基準フレームを１つだけ探索する少なくともいくつかの実施形態では、各動き推定エンジンは、低解像度動き推定構成要素と、フルピクセル動き推定構成要素と、サブピクセル動き推定構成要素とを含み得る。少なくともいくつかの実施形態では、動き推定エンジンのそれぞれの３つの構成要素は、パイプラインの異なるステージに実装され得る。少なくともいくつかの実施形態では、各動き推定エンジンはまた、必要に応じてメモリから基準フレームデータを読み込んで記憶するメモリ構成要素を含み得る。少なくともいくつかの実施形態では、プロセッサの単一のインスタンスが、動き推定エンジンの全てのインスタンスを管理する。少なくともいくつかの実施形態では、プロセッサは、予測動きベクトル及びコロケート動きベクトルを使用して、１つ以上の候補を決定し、動き推定エンジンのフルピクセル動き推定構成要素に候補を入力することができる。
【００８７】
少なくともいくつかの実施形態では、各動き推定エンジンの低解像度動き推定構成要素は、各基準フレームの縮小された低解像度バージョンに対して全数探索を実行して、候補を生成する。少なくともいくつかの実施形態では、フルピクセル動き推定構成要素は、低解像度動き推定構成要素からの候補を使用して、フルサイズピクセルに対して探索を実行する。少なくともいくつかの実施形態では、サブピクセル動き推定構成要素は、フルピクセル動き推定構成要素から受信した最良の候補を使用して、ハーフピクセル及びクォーターピクセルに対して探索を実行する。いくつかの実施形態では、フルピクセル動き推定及びサブピクセル動き推定は、パイプラインの上流ステージにおいて実行されたダイレクトモード推定の結果に基づいて無効にされ得る。少なくともいくつかの実施形態では、各動き推定エンジンは、モード決定６０２０に結果データを出力する。
【００８８】
少なくともいくつかの実施形態では、動き推定はまた、コロケート動きベクトルデータ及び空間動きベクトルデータを受信し、モード決定６０２０に提供するダイレクト／スキップモードコストを計算するダイレクトモード推定構成要素を含み得る。その結果に基づいて、ダイレクトモード推定構成要素は、フルピクセル動き推定及びサブピクセル動き推定を無効にすることができる。
【００８９】
イントラ推定
少なくともいくつかの実施形態では、パイプラインのイントラ推定構成要素は、イントラモード選択を実行して、現在のマクロブロックを符号化する際に使用され得る現在のフレーム内の既に符号化されたピクセルのブロックを決定する。少なくともいくつかの実施形態では、イントラ推定構成要素は、輝度のみについてイントラモード選択を実行する。これらの実施形態では、彩度イントラ推定は、パイプラインの下流ステージにおいて、彩度復元構成要素により実行される。少なくともいくつかの実施形態では、イントラ推定構成要素は、マクロブロック中の２つ以上のブロック又はパーティション（例えば、４×４、８×８、４×８、８×４、１６×８及び／又は８×１６のブロック）のそれぞれに対して別個にイントラ推定を実行することができる。各ブロックについて、近隣ブロックから予測ピクセルが最初に抽出される（近隣ブロックは、フレーム中の現在のマクロブロックの外側にあっても、又は現在のマクロブロック内にあってもよい）。現在のブロックにおける各予測モードについて、近隣ピクセルから予測ブロックを生成し、モードコストを計算し、モードコストをそのブロックについての最小コストと比較することによって、現在のモードのコストが評価される。全ての予測モードが評価され、ベストモードが決定されると、ベストモードについて復元が実行され、それにより、復元ピクセルを使用してマクロブロック内の将来のブロックを予測することができる。イントラ推定構成要素は、モード決定６０２０に最良のイントラモード情報を伝達することができる。
【００９０】
少なくともいくつかの実施形態では、マクロブロック入力６００２は、クワドロウ境界において、メモリから、前のクワドロウの最下行からの近隣データを読み込み、その近隣データをイントラ推定構成要素に伝達する。少なくともいくつかの実施形態では、少なくとも１つの下流ステージ（例えば、下流ステージの輝度復元構成要素）は、近隣データをイントラ推定構成要素に戻すことができる。
【００９１】
モード決定
少なくともいくつかの実施形態では、モード決定６０２０は、イントラフレーム及びインターフレーム推定６０１０動作を実行するステージの下流にあるパイプラインのステージのモード決定構成要素により実行され得る。ただし、いくつかの実施形態では、モード決定６０２０動作は、パイプラインの１つ、２つ又はそれ以上のステージにおいて実行され得る２つ以上のサブ動作に細分され得、各ステージの１つ以上の構成要素又はパイプラインユニットは、特定のサブ動作を実行するように構成される。少なくともいくつかの実施形態では、モード決定６０２０構成要素は、イントラ推定から最良のイントラモードを、ダイレクトモード推定からダイレクト／スキップモードコストを、動き推定エンジンから動きベクトル候補を受信する。少なくともいくつかの実施形態では、モード決定構成要素は、双方向モードのための追加コストを計算し、マクロブロックパーティション、サブパーティション、予測方向及び基準フレームインデックスを含む最良のマクロブロックタイプを決定する。少なくともいくつかの実施形態では、モード決定６０２０構成要素はまた、全ての動きベクトル予測を実行する。動きベクトル予測の結果は、モード決定中に動きベクトルレートを推定するときに使用され得る。少なくともいくつかの実施形態では、動きベクトル予測結果はまた、例えば、ダイレクトモード推定及び動きベクトルレート推定で使用するために、モード決定６０２０構成要素から動き推定にフィードバックされ得る。
【００９２】
動き補償及び復元
少なくともいくつかの実施形態では、動き補償及び復元６０３０動作は、パイプラインの１つ、２つ又はそれ以上のステージにおいて実行され得る２つ以上のサブ動作に細分され得、各ステージの１つ以上の構成要素又はパイプラインユニットは、特定のサブ動作を実行するように構成される。例えば、いくつかの実施形態では、動き補償及び復元６０３０は、輝度動き補償及び復元、並びに彩度動き補償及び復元に細分され得る。少なくともいくつかの実施形態では、動き補償及び復元６０３０のこれらのサブ動作のそれぞれは、パイプラインの１つ以上のステージの１つ以上の構成要素又はパイプラインユニットにより実行される。
【００９３】
輝度動き補償及び復元
少なくともいくつかの実施形態では、パイプラインの輝度動き補償構成要素は、モード決定６０２０から、ベストモード及び対応する動きベクトルを受信する。前述したように、各動き推定エンジンはまた、必要に応じてメモリから基準フレームデータを読み込んで記憶するメモリ構成要素を含み得る。ベストモードがインター予測される場合、輝度動き補償構成要素は、動きベクトルに対応する動き推定エンジンに、基準フレームマクロブロックを要求する。動き推定エンジンは、要求されたサイズに応じて、サブピクセル補間された４×４又は８×８のブロックを戻す。次いで、輝度動き補償構成要素は、ブロックを予測マクロブロックへと合成する。次いで、輝度動き補償構成要素は、重み付け予測を予測マクロブロックに適用して、続いて輝度復元構成要素に伝達される最終的なマクロブロック予測値を生成する。
【００９４】
少なくともいくつかの実施形態では、パイプラインの輝度復元構成要素は、イントラ予測（少なくともいくつかの実施形態では、輝度動き補償構成要素がインター予測を実行する）、順変換及び量子化（ＦＴＱ）、並びに逆変換及び量子化（ＩＴＱ）を含む、輝度に対するマクロブロック復元を実行する。
【００９５】
少なくともいくつかの実施形態では、モード決定６０２０からのベストモードに基づいて、インター予測マクロブロックを輝度動き補償構成要素から伝達するか、あるいは、輝度復元構成要素によりイントラ予測を実行して、予測ブロックを生成する。イントラモードでは、将来のブロックの予測のために近隣ブロックからの復元ピクセルが必要なので、ブロック（走査）順で予測が実行される。予測ブロックから入力ブロックを減算して、残差ブロックを生成する。この残差ピクセルデータは、輝度復元構成要素が実行するＦＴＱ技法によって変換され、量子化される。係数データを、輝度復元構成要素が実行するＩＴＱ技法に送信し、また、下流のＣＡＶＬＣエンコーディングまで送信してもよい。ＩＴＱ技法は、復元残差ピクセルブロックを生成する。残差ブロックに予測ブロックを加算して、復元ブロックを生成する。復元ピクセルは、下流のデブロッキングフィルタに伝達され得る。少なくともいくつかの実施形態では、復元ピクセルはまた、現在のマクロブロック内の将来のブロックの予測のために、イントラフレーム及びインターフレーム推定６０１０のイントラフレーム推定構成要素に戻され得る。
【００９６】
彩度動き補償及び復元
少なくともいくつかの実施形態では、２つのステージにおいて彩度復元が実行される。第１のステージでは、入力マクロブロックタイプ、動きベクトル及び基準フレームインデックスに基づいて、インター予測のために必要な彩度基準ブロックが、メモリから読み込まれる。次いで、サブピクセル補間及び重み付け予測を適用して、予測マクロブロックを生成する。第２のステージでは、彩度イントラ予測及び彩度イントラ／インターＦＴＱ／ＩＴＱが実行される。これにより、１つの追加のパイプラインステージが、彩度予測ピクセルデータをロードすることが可能になる。動き推定では彩度ピクセルが探索されないので、彩度予測データは、外部メモリから読み込まれ、大きい待ち時間を有し得る。少なくともいくつかの実施形態では、彩度動き補償構成要素が第１のステージを実行し、彩度復元構成要素が第２のステージを実行する。
【００９７】
少なくともいくつかの実施形態では、彩度動き補償構成要素は、Ｃｂ彩度ブロック及びＣｒ彩度ブロックに対するサブピクセル補間を含む予測ブロックを生成し、サイズは、パーティションサイズ及び彩度フォーマットに基づく。２フルサイズ彩度ブロックは、彩度フォーマットの４：２：０、４：２：２及び４：４：４に関して、それぞれ８×８ピクセル、８×１６ピクセル、又は１６×１６ピクセルである。少なくともいくつかの実施形態では、彩度動き補償構成要素は、外部（パイプラインに対する）メモリから彩度予測ピクセルをプリフェッチ及びキャッシュすることができる。少なくともいくつかの実施形態では、モード決定６０２０結果に基づいて基準データを読み込むことができる。彩度動き補償構成要素はサブピクセル補間を実行して、予測ブロックを生成する。モード決定６０２０は、マクロブロックタイプ及びサブタイプ、パーティションごとの基準フレームインデックス、及び対応する動きベクトルを提供する。彩度復元構成要素に予測が出力される。
【００９８】
少なくともいくつかの実施形態では、彩度復元構成要素は、彩度予測、彩度イントラ予測、及び、インターモード及びイントラモードについて、彩度復元を実行する。彩度フォーマットが４：２：０及び４：２：２の場合、イントラ彩度推定及び予測が実行される。少なくともいくつかの実施形態では、復元ピクセルを推定プロセス中に使用することができるように、イントラフレーム及びインターフレーム推定６０１０においてではなく、このステージにおいて彩度イントラ推定が実行される。少なくともいくつかの実施形態では、ベストモードがイントラである場合、最良のイントラ彩度モードに基づいてイントラ彩度推定が実行され得、４つのイントラ彩度モードのうちの１つを使用してイントラ予測が実行され得る。インターマクロブロックの場合、インター彩度予測ピクセルを彩度動き補償から受信する。彩度フォーマットが４：４：４の場合、輝度イントラ予測モードを使用して彩度ブロック予測を生成し、輝度と同様インター彩度予測が実行される。したがって、彩度復元は、４：４：４彩度フォーマットで彩度を復元するために使用される４：２：０及び４：２：２の彩度復元及び輝度復元を概念的に含んでいる。
【００９９】
ＣＡＶＬＣ符号化及びデブロッキング
少なくともいくつかの実施形態では、ＣＡＶＬＣ符号化及びデブロッキングは、パイプラインの最後のステージの１つ以上の構成要素により実行され得る。少なくともいくつかの実施形態では、パイプラインのデブロッキングフィルタ構成要素は、彩度復元構成要素から、復元された輝度ピクセル及び彩度ピクセルを受信し、Ｈ．２６４勧告に従ってデブロッキングフィルタリングを実行する。結果はメモリに出力され得る。
【０１００】
少なくともいくつかの実施形態では、パイプラインのＣＡＶＬＣ符号化構成要素は、彩度復元構成要素から、少なくとも輝度量子化係数及び彩度量子化係数、近隣データ並びに彩度復元結果を受信し、メモリへのＣＡＶＬＣ（コンテキスト適応型可変長符号化）符号化された出力ストリームを生成する。
【０１０１】
少なくともいくつかの実施形態では、デブロッキングフィルタ構成要素及びＣＡＶＬＣ符号化構成要素は、クワドロウ境界のメモリに、クワドロウの最下行についての近隣データを書き込む。次のクワドロウの最上行について、マクロブロック入力６００２は次いで、クワドロウ境界のメモリからこの近隣データを読み込み、パイプラインの少なくとも１つの下流ステージに近隣データをパスすることができる。
【０１０２】
トランスコーダ
少なくともいくつかの実施形態では、トランスコーダ６０５０によりトランスコーディング動作が実行され得る。トランスコーダは、パイプラインの機能的構成要素として、又はパイプラインの外部の機能的構成要素として実装され得る。少なくともいくつかの実施形態では、トランスコーダ６０５０は、パイプラインにより出力されたＣＡＶＬＣ（コンテキスト適応型可変長符号化）符号化ストリームの、ＣＡＢＡＣ（コンテキスト適応型２値算術符号化）符号化ストリームへのメモリ間変換を実行することができる。
【０１０３】
少なくともいくつかの実施形態では、パイプラインは、スキャン順以外の順序で、例えば、本明細書で前に説明したようなナイト順で符号化することができる。ただし、最終的に、Ｈ．２６４ビデオエンコーダのエンコードビットストリームは、従来のマクロブロックスキャン順で送信しなければならない。少なくともいくつかの実施形態では、ナイト順からスキャン順へのマクロブロック出力の並べ替えは、４つの異なる出力バッファ（各出力バッファがマクロブロック行に対応）にＣＡＶＬＣエンコード構成要素が符号化されたデータを書き込むことによって達成される。クワドロウの最後に、各行バッファは、各行についての符号化マクロブロックのスキャン順ストリームを含んでいる。トランスコーダ６０５０は、マクロブロック行境界において連続ストリームを生成するために、各行の始めと終わりとの縫合を取り扱う。少なくともいくつかの実施形態では、パイプラインは、トランスコーダ６０５０による行の縫合を容易にするために、ＣＡＶＬＣ出力ストリーム中にメタデータを埋め込むことができる。
【０１０４】
例示的なビデオエンコーダ装置
図１７は、少なくともいくつかの実施形態に係る、例示的なビデオエンコーダ装置７０００のブロック図である。ビデオエンコーダ装置７０００は、例えば、集積回路（ＩＣ）として、又はシステムオンチップ（ＳＯＣ）などのＩＣ上のサブシステムとして実装され得る。少なくともいくつかの実施形態では、ビデオエンコーダ装置７０００は、パイプライン７０４０構成要素と、プロセッサ７０１０構成要素（例えば、低電力マルチコアプロセッサ）と、メモリ管理ユニット（ＭＭＵ）７０２０と、ＤＭＡ７０３０と、その装置の機能的構成要素を相互接続するバスサブシステム又はファブリックなどの相互接続７０５０とを含み得る。例えば、ビデオエンコーダ装置７０００のプロセッサ７０１０構成要素は、レート制御など、パイプライン７０４０のフレームレベル制御を実行し、パイプライン７０４０内の個々のパイプラインユニットの構成を含むパイプライン７０４０構成を実行し、例えばビデオエンコーダ７０００構成のためのアプリケーションソフトウェアとドライバを介してインターフェースすることができる。ＭＭＵ７０２０は、例えば、ストリーミングビデオ入力及び／又は出力のための外部メモリとのインターフェースとしての機能を果たすことができる。パイプライン７０４０の構成要素は、ＭＭＵ７０２０を通じてＤＭＡ７０３０を介してメモリにアクセスすることができる。いくつかの実施形態では、ビデオエンコーダ装置７０００は、図１７には示されていない他の機能的構成要素又はユニットを含んでも、あるいは、図１７に示したものよりも少数の機能構成要素しか含んでいなくてもよい。パイプライン７０４０の構成要素により実行され得る例示的なブロック処理方法は図１６に示されている。少なくとも１つのビデオエンコーダ装置７０００を含み得る例示的なシステムオンチップ（ＳＯＣ）を図１８に示す。
【０１０５】
例示的なシステムオンチップ（ＳＯＣ）
次に図１８を参照すると、図３〜図１７に例示したようなブロック処理法及び装置のうちの１つ以上を実行することができるブロック処理パイプラインを含むビデオエンコーダ装置の少なくとも１つの事例を含むことができるシステムオンチップ（ＳＯＣ）８０００の一実施形態のブロック図。ＳＯＣ８０００は、メモリ８８００に連結されて示されている。名前により示されるように、ＳＯＣ８０００の構成要素は、集積回路の「チップ」としての単一の半導体基板の上に集積化することができる。いくつかの実施形態では、構成要素は、システムの２以上の個別のチップ上に、実装することができる。しかし、本明細書では、ＳＯＣ８０００を例として用いる。図示されている実施形態では、ＳＯＣ８０００の構成要素は、中央処理装置（ＣＰＵ）複合体８０２０、オンチップ周辺装置構成要素８０４０Ａ〜８０４０Ｂ（簡潔に「周辺装置」）、メモリコントローラ（ＭＣ）８０３０、ビデオエンコーダ７０００（それ自体が周辺装置構成要素とみなされ得る）、及び通信ファブリック８０１０を含む。構成要素８０２０、８０３０、８０４０Ａ〜８０４０Ｂ、及び７０００は全て通信ファブリック８０１０に結合され得る。メモリコントローラ８０３０は使用中、メモリ８８００に結合され得、そして、周辺装置８０４０Ｂは使用中、外部インターフェース８９００に結合され得る。例示した実施形態では、ＣＰＵ複合体８０２０には、１つ以上のプロセッサ（Ｐ）８０２４及びレベル２（Ｌ２）キャッシュ８０２２が含まれる。
【０１０６】
周辺装置８０４０Ａ〜８０４０Ｂは、ＳＯＣ８０００に含まれる更なるハードウェア機能の任意の集合とすることができる。例えば、周辺装置８０４０Ａ〜８０４０Ｂは、カメラ又は他の画像センサからの画像キャプチャデータを処理するように構成された画像信号プロセッサ、１つ以上のディスプレイデバイス上にビデオデータをディスプレイするように構成されたディスプレイコントローラ、グラフィック処理ユニット（ＧＰＵ）、ビデオエンコーダ／デコーダ、スケーラ、ローテータ、ブレンダなどの、ビデオ周辺装置を含み得る。周辺装置は、マイクロホン、スピーカ、マイクロホン及びスピーカへのインターフェース、オーディオプロセッサ、デジタル信号プロセッサ、ミキサなどの、オーディオ周辺装置を含み得る。周辺装置は、ユニバーサルシリアルバス（ＵＳＢ）、ＰＣＩエクスプレス（ＰＣＩｅ）を含む周辺構成要素相互接続（ＰＣＩ）、シリアル及びパラレルポートなどのインターフェースを含む、ＳＯＣ８０００の外部の種々のインターフェース８９００のための周辺インターフェイスコントローラ（例えば、周辺装置８０４０Ｂ）を含み得る。周辺装置は、メディアアクセス制御（ＭＡＣ）などのネットワーキング周辺装置を含み得る。ハードウェアの任意の集合を含むことができる。
【０１０７】
図１８では特に、ＳＯＣ８０００は、図１６に示したようなブロック処理法６０００を実行するブロック処理パイプライン７０４０構成要素を含むビデオエンコーダ７０００構成要素の少なくとも１つの事例、例えば、図１７に示したビデオエンコーダ７０００を含むことができる。ビデオエンコーダ７０００は、入力ビデオフレームを入力フォーマットからＨ．２６４／ＡＶＣ標準に記載されているＨ．２６４／高効率ビデオ圧縮方式（ＡＶＣ）フォーマットに変換するように構成され得るＨ．２６４ビデオエンコーダ装置であり得る。ブロック処理パイプライン７０４０は、図３〜図１６に関して本明細書で説明したブロック処理法及び装置のうちの１つ以上を実装することができる。
【０１０８】
ＣＰＵ複合体８０２０として、ＳＯＣ８０００のＣＰＵとしての機能を果たす１つ以上のＣＰＵプロセッサ８０２４を挙げることができる。システムのＣＰＵとして、オベレーティングシステムなどのシステムの主制御ソフトウェアを実行するプロセッサ（単数又は複数）が挙げられる。全般的には、使用時にＣＰＵにより実行されるソフトウェアは、システムの他の構成要素を制御して、システムの所望の機能を実現することができる。プロセッサ８０２４は、アプリケーションプログラムなどの他のソフトウェアも、更に実行することができる。アプリケーションプログラムは、ユーザ機能を提供することができ、より下位のデバイス制御に関して、オベレーティングシステムに依存してもよい。したがって、プロセッサ８０２４はまた、アプリケーションプロセッサと呼ぶことができる。ＣＰＵ複合体８０２０は、Ｌ２キャッシュ８０２２、及び／又はシステムの他の構成要素とのインターフェース（例えば、通信ファブリック８０１０とのインターフェース）などの他のハードウェアを更に含むことができる。概して、プロセッサは、そのプロセッサによって実装される命令セットアーキテクチャ内で定義された命令を実行するように構成される任意の回路及び／又はマイクロコードを含んでもよい。命令を実行したことに応答してプロセッサが行う命令及びデータは、一般的にはメモリ８８００に記憶され得るが、周辺装置へのダイレクトプロセッサアクセスについても同様に特定の命令を規定することができる。プロセッサは、システムオンチップ（ＳＯＣ８０００）又は他の一体化レベルとしての集積回路上に、他の構成要素とともに実装されるプロセッサコアを包含し得る。プロセッサは、別個のマイクロプロセッサ、マルチチップモジュール実装形態内に一体化されるプロセッサコア及び／又はマイクロプロセッサ、複数の集積回路として実装されるプロセッサなどを更に包含してもよい。
【０１０９】
メモリコントローラ８０３０は、ＳＯＣ８０００の他の構成要素からのメモリ動作を受信して、メモリ動作を完了するためにメモリ８８００にアクセスする回路を、通常、含むことができる。メモリコントローラ８０３０は、任意の種類のメモリ８８００にアクセスするように構成することができる。例えば、メモリ８８００は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、その他）ＤＲＡＭを含むシンクロナスＤＲＡＭ（ＳＤＲＡＭ）などのダイナミックラム（ＤＲＡＭ）とすることができる。ＤＤＲ  ＤＲＡＭの低消費電力／モバイルバージョンを、サポートすることができる（例えばＬＰＤＤＲ、ｍＤＤＲ、その他）。メモリコントローラ８０３０は、操作を順序付けし（及び場合によっては、再順序付けし）、メモリ８８００へ操作を提示するための、メモリ操作のための待ち行列を含んでもよい。メモリコントローラ８０３０は、メモリへの書き込みを待っている書き込みデータ、及びメモリ操作の送信元への返送を待っている読み出しデータを記憶するためのデータバッファを更に含んでもよい。いくつかの実施形態では、メモリコントローラ８０３０は、最近アクセスされたメモリデータを記憶するためのメモリキャッシュを含んでもよい。ＳＯＣ実装形態では、例えば、メモリキャッシュは、データが再びすぐにアクセスされると予想される場合には、メモリ８８００からのデータの再アクセスを回避することによって、ＳＯＣ内の電力消費を低減することができる。メモリキャッシュは、特定の構成要素だけに貢献するＬ２キャッシュ８０２２又はプロセッサ８０２４のキャッシュなどの専用のキャッシュとは対照的に、システムキャッシュと呼ぶこともできる。更に、いくつかの実施形態では、システムキャッシュはメモリコントローラ８０３０の中に配置する必要はない。
【０１１０】
一実施形態では、メモリ８８００は、チップオンチップ構成又はパッケージオンパッケージ構成においてＳＯＣ８０００と共にパッケージ化され得る。同様に、ＳＯＣ８０００とメモリ８８００とのマルチチップモジュール構成を使用してもよい。かかる構成は、システム中の他の構成要素への（例えば、エンドポイント１６Ａ〜１６Ｂへの）送信よりも、（データ可観測性に関して）比較的セキュアであり得る。そのため、保護データは、暗号化せずにメモリ８８００に常駐し得るが、ＳＯＣ８０００と外部エンドポイントとの間での交換のために保護データを暗号化してもよい。
【０１１１】
通信ファブリック８０１０は、ＳＯＣ８０００の構成要素間で通信する、任意の通信相互接続及びプロトコルとすることができる。通信ファブリック８０１０は、共有バス構成、クロスバー構成、及びブリッジを有する階層的なバス、を含むバスベースとすることができる。通信ファブリック８０１０は、パケットベースとすることもでき、ブリッジ、クロスバー、ポイントツーポイント又は他の相互接続による階層構成とすることができる。
【０１１２】
ＳＯＣ８０００の構成要素の数（及び、ＣＰＵ複合体８０２０の中などの、図１８に示されるもののサブ構成要素の数）は、実施形態ごとに異なる可能性があることに留意されたい。各構成要素／サブ構成要素について、図１８に示される数よりも多いか、又は、少ない数になる可能性がある。
【０１１３】
例示的なシステム
図１９は、システム９０００の一実施形態のブロック図である。図示の実施形態では、システム９０００は、１つ以上の周辺装置９０２０及び外部メモリ８８００に結合されるＳＯＣ８０００の少なくとも１つの事例を含む。ＳＯＣ８０００に供給電圧を供給すると共に、メモリ８８００及び／又は周辺装置９０２０に１つ以上の供給電圧を供給する電力管理ユニット９０１０が提示されている。いくつかの実施形態では、ＳＯＣ８０００の２つ以上の事例が含まれ得る（及び２つ以上のメモリ８８００も含まれ得る）。
【０１１４】
周辺装置９０２０は、システム９０００の種類に応じて、任意の所望の回路を含んでもよい。例えば、一実施形態では、システム９０００はモバイルデバイス（例えば、無線携帯情報端末（personal digital assistant、ＰＤＡ）、スマートフォン等）であってもよく、周辺装置９０２０は、ＷｉＦｉ（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、セルラ、全地球測位システムなど等の、様々な種類の無線通信用のデバイスを含んでもよい。周辺装置９０２０はまた、ＲＡＭストレージ、固体ストレージ又はディスクストレージを含む追加のストレージを含み得る。周辺装置９０２０は、タッチディスプレイスクリーン又はマルチタッチディスプレイスクリーンなどを含むディスプレイスクリーン、キーボード又は他の入力デバイス、マイクロホン、スピーカ、などのユーザーインターフェースデバイスを含み得る。他の実施形態では、システム９０００は、任意の種類のコンピューティングシステム（例えば、デスクトップパーソナルコンピュータ、ラップトップ、ワークステーション、ネットトップなど）としてもよい。
【０１１５】
外部メモリ８８００として、任意の種類のメモリを挙げることができる。例えば、外部メモリ８８００は、ＳＲＡＭ、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）などのダイナミックＲＡＭ（ＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３など）ＳＤＲＡＭ、ＲＡＭＢＵＳ  ＤＲＡＭ、ＤＤＲ  ＤＲＡＭの低消費電力バージョン（例えばＬＰＤＤＲ、ｍＤＤＲなど）などであり得る。外部メモリ８８００は、単一インラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）等などのメモリデバイスがそこに装着される１つ以上のメモリモジュールを含み得る。あるいは、外部メモリ８８００は、チップオンチップパッケージ実装又はパッケージオンパッケージ実装においてＳＯＣ８０００上に装着された１つ以上のメモリデバイスを含み得る。
【０１１６】
本明細書で説明する方法は、様々な実施形態において、ソフトウェア、ハードウェア、又はそれらの組み合わせの形態で実装されてもよい。更に、方法のブロックの順序を変更してもよく、種々の要素を追加しても、並べ替えても、組み合わせても、省略しても、修正、等してもよい。本開示の恩恵を有する当業者に明らかであるように、種々の修正及び変更を行うことができる。本明細書で説明した各種実施形態は、例示的なものであり、限定的なものではない。多くの変形、修正、追加、及び改善が可能である。したがって、複数の事例は、本明細書で説明した構成要素について、単一事例として提供され得る。種々の構成要素と動作とデータストアとの間の境界はやや任意であり、特定の例示的な構成の状況において、特定の動作が示されている。機能の他の割り付けが想定され、それは、以下の特許請求の範囲内に包含され得る。最終的には、例示的な構成における個別の構成要素として提示された構造及び機能は、組み合わせた構造又は構成要素として実行され得る。これらの及び他の、変形、修正、追加、及び改善は、以下の特許請求の範囲で定義されるような、実施形態の範囲内に包含することができる。
【図１】
2016537845.tif 000003
【図２】
2016537845.tif 000004
【図３】
2016537845.tif 000005
【図４Ａ】
2016537845.tif 000006
【図４Ｂ】
2016537845.tif 000007
【図４Ｃ】
2016537845.tif 000008
【図５】
2016537845.tif 000009
【図６】
2016537845.tif 000010
【図７】
2016537845.tif 000011
【図８Ａ】
2016537845.tif 000012
【図８Ｂ】
2016537845.tif 000013
【図９】
2016537845.tif 000014
【図１０Ａ】
2016537845.tif 000015
【図１０Ｂ】
2016537845.tif 000016
【図１１Ａ】
2016537845.tif 000017
【図１１Ｂ】
2016537845.tif 000018
【図１２】
2016537845.tif 000019
【図１３】
2016537845.tif 000020
【図１４】
2016537845.tif 000021
【図１５Ａ】
2016537845.tif 000022
【図１５Ｂ】
2016537845.tif 000023
【図１５Ｃ】
2016537845.tif 000024
【図１６】
2016537845.tif 000025
【図１７】
2016537845.tif 000026
【図１８】
2016537845.tif 000027
【図１９】
2016537845.tif 000028
【手続補正書】
【提出日】平成28年4月22日(2016.4.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００２１
【補正方法】変更
【補正の内容】
【００２１】
例えば、図３に示すように、ステージ３２０Ｂでは、ソフトウェアパイプライン構成要素３２６Ｂが、ブロックｉ＋１を処理するためにハードウェアパイプライン構成要素３２６Ｂを構成している間に、ハードウェアパイプライン構成要素３２６Ｂはその時点で、ブロックｉを処理しており、ステージ３２０Ａでは、ソフトウェアパイプライン構成要素３２２Ａが、ブロックｉ＋２を処理するためにハードウェアパイプライン構成要素３２６Ａを構成している間に、ハードウェアパイプライン構成要素３２６Ａはその時点で、ブロックｉ＋１を処理している。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００２４
【補正方法】変更
【補正の内容】
【００２４】
最初のステージ３１０のブロック解析構成要素３１４は、ハードウェアパイプライン３０４に入力される次のブロックを含む、ブロックバッファ構成要素３１２中にその時点でバッファされる１つ以上のブロックに対して１つ以上の解析機能を実行して、次のブロックについてのブロック情報を生成することができる。ブロック情報は、例えば、１つ以上のブロック統計値を含み得る。生成され得るブロック統計値のいくつかの非限定的な例については前述した。次のブロックについてブロック情報が生成されると、最初のステージ３１０は、パイプライン３００のステージ３２０Ａのパイプラインユニット３３０Ａのソフトウェアパイプライン構成要素３２２Ａにブロック情報を送信することができる。ブロック解析構成要素３１４は、フレーム中の全てのブロックが処理されるまで、ブロック情報の生成、及びソフトウェアパイプライン３０２へのブロック情報の入力を継続することができる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００３７
【補正方法】変更
【補正の内容】
【００３７】
図６は、少なくともいくつかの実施形態に係る、少なくとも１つのステージが複数のパイプラインユニットを含む、ソフトウェアパイプライン及びハードウェアパイプラインを実装する例示的なブロック処理パイプライン３００を示す図である。図６に示すように、ステージ３２０Ａは、ソフトウェアパイプライン構成要素３２２Ａとハードウェアパイプライン構成要素３２６Ａとを含む単一のパイプラインユニット３３０Ａを含み、ステージ３２０Ｃは、ソフトウェアパイプライン構成要素３２２Ｃとハードウェアパイプライン構成要素３２６Ｄとを含む単一のパイプラインユニット３３０Ｃを含む。しかしながら、ステージ３２０Ｂは、２つのパイプラインユニット３３０Ｂ及び３３０Ｃを含む。パイプラインユニット３３０Ｂは、ソフトウェアパイプライン構成要素３２２Ｂ及びハードウェアパイプライン構成要素３２６Ｂを含む。パイプラインユニット３３０Ｃは、ハードウェアパイプライン構成要素３２６Ｃのみを含む。ハードウェアパイプライン３０４では、ステージ３２０Ａのパイプラインユニット３３０Ａからのブロック又はブロックの一部分が、ステージ３２０Ｂのハードウェアパイプライン構成要素３２６Ｂとハードウェアパイプライン構成要素３２６Ｃの双方を通過するが、それらは、処理したブロック又はブロックの一部分を、ステージ３２０Ｃ中のパイプラインユニット３３０Ｄのハードウェアパイプライン構成要素３２６Ｄに出力する。ソフトウェアパイプライン３０２では、ブロック情報は、ステージ３２０Ａのソフトウェアパイプラインユニット３２２Ａからステージ３２０Ｂのソフトウェアパイプラインユニット３２２Ｂに渡され、ステージ３２０Ｂのソフトウェアパイプラインユニット３２２Ｂからステージ３２０Ｃのソフトウェアパイプラインユニット３２２Ｃに渡される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３９
【補正方法】変更
【補正の内容】
【００３９】
図７は、少なくともいくつかの実施形態に係る、ソフトウェアパイプライン及びハードウェアパイプラインを実装するブロック処理パイプラインのステージにおいて使用され得る例示的なパイプラインユニットの構成要素を示している。図７に示すように、パイプラインユニット４００のハードウェアパイプライン構成要素４０４は、少なくともメモリ４３２及びユニットコア４３０を含むことができる。ユニットコア４３０は、ブロック処理パイプラインの特定のステージにおいてブロック又はブロックの一部分に対して又はそれについて特定の動作を実行するように構成された構成要素（例えば、回路）であり得る。メモリ４３２は、例えば、次のブロックについてのデータが前のパイプラインユニットからメモリ４３２に書き込まれている間に、ユニットコア４３０がメモリ４３２からブロックについてのデータを読み込み、処理することを可能にするダブルバッファメモリであり得る。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００６０
【補正方法】変更
【補正の内容】
【００６０】
図１０Ａ及び図１０Ｂは、少なくともいくつか実施形態に係る、ナイト順処理法を図式的に示している。簡潔にするために、これらの図は、１２行１２列のブロックの、１４４個の１６×１６ピクセルブロックに分割された例示的な１９２×１９２個のピクセルフレームを使用する。ただし、ナイト順処理法は任意の寸法の入力ビデオフレームに適用できることに留意されたい。図１０Ａにおいて、例示的なフレームは、ブロックの行及び列に分割されている。ブロックの行は、４つの行をそれぞれ含む３つのクワドロウに分割されている。第１のクワドロウの最後の３つの行は、無効ブロックで左に埋められ、最後の（第３の）クワドロウの最初の３つの行は、無効ブロックで右に埋められる。この例では、ブロック中の数字は、ナイト順処理法に従ってブロック処理パイプラインにブロックが入力される順序を表しており、ブロック０（第１のクワドロウの最上行の第１のブロック）から始まる。ブロック０は、パイプラインの第１のステージに入力され、別のブロックのために第１のステージが準備ができたときに、入力の次のブロック（図１０Ａのブロック１）を得るために２列左かつ１行下に進むことによって、本方法が進行する。クワドロウの一番下に達するまで、このパターンを繰り返す。クワドロウの一番下で、本方法は、次のブロックを得るために、７列右かつ３行上に進む。フレーム中のブロックの全て（並びに図１０Ａに示す無効ブロックの全て）がパイプラインに入力されるまでこれを継続する。クワドロウの末尾に達したとき、そのクワドロウの後に別のクワドロウがある場合には、入力アルゴリズムは次のクワドロウの先頭に進行する。この例では、ブロック４７が入力された後、本方法は、ブロック４８（第２のクワドロウの最上行の第１のブロック）に進行する。ブロック４７から、ブロック４４の右側の破線の矩形で示された４８への破線矢印によって示されるように、第２のクワドロウの最上行の第１のブロック（ブロック４８）は、第１のクワドロウの最上行の最後のブロック（ブロック４４）のすぐ右にあるものとして扱われ、したがって、ブロック４７から７列右かつ３行上に進むことによって到達する。換言すると、ナイト順処理法は、図１０Ｂに示すように、端と端を接して配列され、各端部が無効ブロックであるかのようにクワドロウを扱う。したがって、次のブロックを決定するためのアルゴリズムは、フレーム全体にわたって同じままである。
【手続補正６】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
装置であって、
複数のステージを含むブロック処理パイプラインであって、前記ブロック処理パイプラインの前記複数のステージのうちの１つ以上がそれぞれ、ソフトウェアパイプラインの構成要素及びハードウェアパイプラインの構成要素を含み、前記ソフトウェアパイプライン及び前記ハードウェアパイプラインは、フレームのピクセルのブロックを並行して処理するように構成される、ブロック処理パイプラインを備え、
前記１つ以上のステージのそれぞれの前記ソフトウェアパイプライン構成要素が、前記ブロックについての取得された情報に基づいて、前記ステージのそれぞれの前記ハードウェアパイプライン構成要素において、前記ブロックを処理するための構成を反復して決定するように構成され、
前記１つ以上のステージのそれぞれの前記ハードウェアパイプライン構成要素が、前記ステージのそれぞれの前記ソフトウェアパイプライン構成要素が決定した前記ブロックを処理するための前記構成に従って、前記ブロックを反復して処理するように構成され、
前記１つ以上のステージのそれぞれの前記ハードウェアパイプライン構成要素は、来るべきブロックについて取得された情報に基づいて前記ステージのそれぞれの前記ハードウェアパイプライン構成要素により処理される前記来るべきブロックについての構成を前記ステージのそれぞれの前記ソフトウェアパイプライン構成要素が決定している間に、前記ステージにおいて現在のブロックを、前記現在のブロックについて取得された情報に基づいて前記ステージのそれぞれの前記ソフトウェアパイプライン構成要素が前に決定した前記現在のブロックを処理するための構成に従って処理する、装置。
【請求項２】
前記１つ以上のステージのそれぞれの前記ソフトウェアパイプライン構成要素は、前記ブロック処理パイプラインの上流ステージから、前記ブロックについての前記情報の少なくとも一部分を受信するように更に構成される、請求項１に記載の装置。
【請求項３】
前記ブロックについての前記情報は、前記ステージにおいて前記ハードウェアパイプライン構成要素が以前に処理したブロックからの情報を含む、請求項１に記載の装置。
【請求項４】
前記ソフトウェアパイプライン構成要素のうちの少なくとも１つが、前記ブロック処理パイプラインの下流ステージに前記ブロックの情報を出力するように更に構成される、請求項１に記載の装置。
【請求項５】
前記１つ以上のステージのそれぞれの前記ハードウェアパイプライン構成要素は、
前記ブロック処理パイプラインの前のステージから、処理される前記ブロックを受信し、
処理した前記ブロックを、前記ブロック処理パイプラインの次のステージ又は外部メモリに出力する、ように更に構成される、請求項１に記載の装置。
【請求項６】
前記ブロック処理パイプラインは、
前記ハードウェアパイプラインへの入力のためにブロックをバッファし、
バッファした前記ブロックのうちの１つ以上についてのブロック統計値を計算し、
前記ブロックについての情報として、前記ブロック処理パイプラインの下流ステージのソフトウェアパイプライン構成要素に前記ブロック統計値を入力する、
ように構成された最初のステージを含む、請求項１に記載の装置。
【請求項７】
各ステージの前記ソフトウェアパイプライン構成要素は、前記ステージの前記ハードウェアパイプライン構成要素が処理する各ブロックについて、
前記ブロックについての取得された情報に基づいて、前記ステージの前記ハードウェアパイプライン構成要素において、前記ブロックを処理するための特定の構成を決定し、
前記構成を構成メモリに書き込み、
前記ステージの前記ハードウェアパイプライン構成要素に、前記構成が前記構成メモリに準備されたことをシグナリングする、
ように構成される、請求項１に記載の装置。
【請求項８】
前記ステージの前記ハードウェアパイプライン構成要素は、
前記ステージの前記ソフトウェアパイプライン構成要素からの前記シグナリングを検出し、
前記構成メモリからの前記構成にアクセスし、
前記ソフトウェアパイプライン構成要素に、前記構成メモリが消去されていることをシグナリングし、
前記構成メモリからの前記構成に従って、前記ブロックを処理する、
ように構成される、請求項７に記載の装置。
【請求項９】
前記ソフトウェアパイプライン構成要素は、前記構成メモリの第２の部分からの現在のブロックについての構成に前記ハードウェアパイプライン構成要素がアクセスする間に、前記構成メモリの第１の部分に次のブロックについての構成を書き込むように構成される、請求項８に記載の装置。
【請求項１０】
方法であって、
ブロック処理パイプラインのステージのソフトウェアパイプライン構成要素により、前記ステージのハードウェアパイプライン構成要素が処理するピクセルのブロックについての情報を取得することであって、前記ブロック処理パイプラインが、並列のソフトウェアパイプライン及びハードウェアパイプラインにおいて、あるフレームのピクセルのブロックを処理し、前記ブロック処理パイプラインの複数のステージのうちの１つ以上がそれぞれ、ソフトウェアパイプライン構成要素及びハードウェアパイプライン構成要素を含む、ことと、
前記ソフトウェアパイプライン構成要素により、前記ブロックについての前記取得された情報に基づいて、前記ハードウェアパイプライン構成要素において、前記ブロックを処理するための構成を決定することと、
前記ブロックについての決定した前記構成に従って、前記ハードウェアパイプライン構成要素において、前記ブロックを処理することと、を含み、
前記ハードウェアパイプライン構成要素は、来るべきブロックについて取得された情報に基づいて前記ハードウェアパイプライン構成要素により処理される前記来るべきブロックについての構成を前記ソフトウェアパイプライン構成要素が決定している間に、前記ブロックを、前記ブロックについて取得された情報に基づいて前記ソフトウェアパイプライン構成要素が決定した前記ブロックのための構成に従って処理する、方法。
【請求項１１】
前記ブロックについての前記情報が、前記ブロック処理パイプラインの上流ステージから受信したブロック情報を含む、請求項１０に記載の方法。
【請求項１２】
前記ブロックについての前記情報が、前記ステージの前記ハードウェアパイプライン構成要素が前に処理した別のブロックからの情報をさらに含む、請求項１０に記載の方法。
【請求項１３】
前記ソフトウェアパイプライン構成要素により、前記ブロックについての前記構成を構成メモリに書き込むことと、
前記ハードウェアパイプライン構成要素により、前記シグナリングすることに応答して、前記構成メモリから前記ブロックについての前記構成を読み込むことと、を更に含む、請求項１０に記載の方法。
【請求項１４】
前記ソフトウェアパイプライン構成要素に、前記読み込みの後に前記構成メモリが消去されていることをシグナリングすることを更に含む、請求項１３に記載の方法。
【請求項１５】
デバイスであって、
メモリと、
ビデオフレームを処理し、処理した前記ビデオフレームをフレームデータとして前記メモリに記憶するように構成された装置であって、前記装置が、１つ以上のパイプラインユニットを各々が含む複数のステージを実装するブロック処理パイプラインを含み、各パイプラインユニットが、前記パイプラインを通るフレームのピクセルのブロックに対して１つ以上の動作を実行するように構成される、装置と、を備え、
前記ブロック処理パイプライン中の前記パイプラインユニットのうちの１つ以上がそれぞれ、
現在の構成に従って、前記パイプラインユニットのユニットコアにおいて現在のブロックを処理し、
次のブロックについての取得された情報に基づいて、前記ユニットコアにおいて前記次のブロックを処理するための構成を決定し、
前記次のブロックについての前記構成に従って、前記ユニットコアにおいて前記次のブロックを処理する、ように構成され、
前記パイプラインユニットは、前記パイプラインユニットの前記ユニットコアが前記現在の構成に従って前記現在のブロックを処理している間に、前記次のブロックについて取得された情報に基づいて、前記ユニットコアにおいて前記次のブロックを処理するための前記構成を決定する、デバイス。
【請求項１６】
前記次のブロックについての前記情報が、前記ブロック処理パイプラインの上流処理ユニットから受信した情報、及び、前記処理ユニットが以前に処理したブロックからの情報を含む、請求項１５に記載のデバイス。
【請求項１７】
前記１つ以上のパイプラインユニットの少なくとも１つが、処理された前記ブロックを、前記ブロック処理パイプラインの次のステージに出力し、処理された前記ブロックについての情報を前記ブロック処理パイプラインの下流のステージに出力するよう更に構成された、請求項１５に記載のデバイス。
【請求項１８】
前記１つ以上のパイプラインユニットのそれぞれが、前記ユニットコアにおいて、前記次のブロックを処理するための前記構成を構成メモリに記憶するように更に構成され、前記ユニットコアは、
前記シグナリングに応答して、前記構成メモリから前記構成を読み込み、
前記パイプラインユニットに、前記構成メモリが消去されていることをシグナリングする、ように構成される、請求項１５に記載のデバイス。
【請求項１９】
前記決定すること及び前記シグナリングすることは、前記パイプラインユニットのそれぞれのプロセッサにより実行される、請求項１５に記載のデバイス。
【請求項２０】
各フレームは、ピクセルのブロックの列に再分割され、前記装置は、前記ブロックを、ひとつの列上の隣接したブロックが前記パイプラインの隣接したステージで同時にならないよう、各フレームから前記ブロック処理パイプラインに入力する、請求項１５に記載のデバイス。
【国際調査報告】
2016537845.tif 000029
2016537845.tif 000030
2016537845.tif 000031
2016537845.tif 000032