(57)【要約】  ビデオ情報をデコード及び／又はエンコードする方法、装置及び製造物が開示される。開示される例示的な方法は、ビデオフレームを選択し、処理するビデオフレームのマクロブロックを選択することを含む。例示的な方法は、第１のスレッドにより、選択されたマクロブロックの処理動作を開始することを含み、処理動作は、マクロブロックのデコード又はマクロブロックのエンコードのうち１つを含む。また、予測情報が第２のスレッドによりデコード又はエンコードされている第２のフレームから必要である場合、予測情報が利用可能になるまで、第１のスレッドによる選択されたマクロブロックの処理動作は停止する。
2010515336.tif 000002
【特許請求の範囲】
【請求項１】
ビデオフレームを選択し、
処理する前記ビデオフレームのマクロブロックを選択し、
第１のスレッドにより、前記選択されたマクロブロックの処理動作を開始し、前記処理動作は、前記マクロブロックのデコード又は前記マクロブロックのエンコードのうち１つを含み、
予測情報が第２のスレッドによりデコード又はエンコードされている第２のフレームから必要である場合、前記予測情報が利用可能になるまで、前記第１のスレッドによる前記選択されたマクロブロックの前記処理動作を停止することを有する方法。
【請求項２】
前記ビデオフレームの複数のマクロブロックを未処理としてマークすることを更に有する、請求項１に記載の方法。
【請求項３】
前記ビデオフレームの前記複数のマクロブロックは、前記ビデオフレームの全てのマクロブロックを含む、請求項２に記載の方法。
【請求項４】
前記ビデオフレームの前記複数のマクロブロックを未処理としてマークすることは、前記複数のマクロブロックが第３のビデオフレームをデコード又はエンコードするために第３のスレッドに予測情報を提供する用意ができていないことを示す、請求項２に記載の方法。
【請求項５】
前記第１のスレッドが前記選択されたマクロブロックを処理し終えたときに、前記選択されたマクロブロックを処理済としてマークすることを更に有する、請求項１に記載の方法。
【請求項６】
前記選択されたマクロブロックに対応するマクロブロック・インデックス値を設定することを更に有する、請求項１に記載の方法。
【請求項７】
前記マクロブロック・インデックス値を設定することは、前記ビデオフレーム内の前記選択されたマクロブロックの座標位置を示す列番号及び行番号を設定することを含む、請求項６に記載の方法。
【請求項８】
前記処理動作は、MPEG（Moving  Pictures  Expert  Group）アルゴリズムに関連する、請求項１に記載の方法。
【請求項９】
前記選択されたマクロブロックのマクロブロック形式を検出することを更に有する、請求項１に記載の方法。
【請求項１０】
前記マクロブロック形式がイントラマクロブロック形式でない場合、前記予測情報が必要であることを決定することを更に有する、請求項９に記載の方法。
【請求項１１】
前記予測情報の少なくともいくつかを有する前記第２のフレームの領域の座標を決定することを更に有する、請求項１に記載の方法。
【請求項１２】
前記予測情報が利用可能になるまで、前記選択されたマクロブロックの前記処理動作を停止することは、前記第２のスレッドが前記予測情報の少なくともいくつかを含む少なくとも１つの参照マクロブロックを処理するまで、前記選択されたマクロブロックの前記処理動作を停止することを有する、請求項１に記載の方法。
【請求項１３】
前記第１のスレッドは、第１のプロセッサにより実行され、
前記第２のスレッドは、第２のプロセッサにより実行される、請求項１に記載の方法。
【請求項１４】
第１のマクロブロックで処理動作を実行するために第１のスレッドを使用するように構成されたビデオ情報処理ユニットであり、前記処理動作は、デコード動作又はエンコード動作のうち１つを含むビデオ情報処理ユニットと、
予測情報が第２のスレッドによりデコード又はエンコードされている第２のフレームから必要であり、前記予測情報がまだ利用可能でない場合、前記第１のスレッドによる前記第１のマクロブロックの前記処理動作を停止するように構成された動作コントローラと
を有する装置
【請求項１５】
前記第１のマクロブロックで前記処理動作を実行する前に、前記第１のマクロブロックを未処理として指定するように構成されたマクロブロック状態指定器を更に有する、請求項１４に記載の装置。
【請求項１６】
前記マクロブロック状態指定器は、前記第１のマクロブロックで前記処理動作を実行した後に、前記第１のマクロブロックを処理済として指定するように構成される、請求項１５に記載の装置。
【請求項１７】
前記第１のマクロブロックのマクロブロック形式を決定するように構成されたマクロブロック形式検出器を更に有する、請求項１４に記載の装置。
【請求項１８】
前記動作コントローラは、前記第１のマクロブロックのマクロブロック形式がイントラマクロブロック形式でないことを前記マクロブロック形式検出器が決定した場合、前記第１のスレッドによる前記第１のマクロブロックの前記処理動作を停止するように構成される、請求項１７に記載の装置。
【請求項１９】
いつ前記第２のスレッドが前記予測情報を含む少なくとも１つの参照マクロブロックを処理したかを決定することにより、いつ前記予測情報が利用可能になるかを決定するように構成された予測情報利用可能検出器を更に有する、請求項１４に記載の装置。
【請求項２０】
前記予測情報利用可能検出器は、前記第２のスレッドによりデコード又はエンコードされている参照マクロブロックを示す前記第２のフレームに関連するマクロブロック・インデックス値に基づいて、いつ前記予測情報が利用可能になるかを決定するように構成される、請求項１９に記載の装置。
【請求項２１】
前記第１のマクロブロックに対応するマクロブロック・インデックス値を設定するように構成されたマクロブロックセレクタを更に有し、
前記マクロブロック・インデックス値は、前記第２のスレッドによりアクセス可能である、請求項１４に記載の装置。
【請求項２２】
第１のプロセッサと第２のプロセッサとの間の通信を可能にするように構成されたプロセッサ間通信インタフェースを更に有し、
前記第１のプロセッサは、前記第１のスレッドを実行し、
前記第２のプロセッサは、前記第２のスレッドを実行する、請求項１４に記載の装置。
【請求項２３】
実行されたときに、機械に、
ビデオフレームを選択させ、
処理する前記ビデオフレームのマクロブロックを選択させ、
第１のスレッドにより、前記選択されたマクロブロックの処理動作を開始させ、前記処理動作は、前記マクロブロックのデコード又は前記マクロブロックのエンコードのうち１つを含み、
予測情報が第２のスレッドによりデコード又はエンコードされている第２のフレームから必要である場合、前記予測情報が利用可能になるまで、前記第１のスレッドによる前記選択されたマクロブロックの前記処理動作を停止させる、格納された命令を有する機械アクセス可能媒体機械アクセス可能媒体。
【請求項２４】
実行されたときに、前記機械に、
前記ビデオフレームの複数のマクロブロックを未処理としてマークさせ、前記複数のマクロブロックが第３のビデオフレームをデコード又はエンコードするために第３のスレッドに予測情報を提供する用意ができていないことを示す、格納された命令を有する請求項２３に記載の機械アクセス可能媒体。
【請求項２５】
実行されたときに、前記機械に、
前記選択されたマクロブロックに対応するマクロブロック・インデックス値を設定させる、格納された命令を有する請求項２３に記載の機械アクセス可能媒体。
【請求項２６】
実行されたときに、前記機械に、
前記ビデオフレーム内の前記選択されたマクロブロックの座標位置を示す列番号及び行番号を設定することにより、前記マクロブロック・インデックス値を設定させる、格納された命令を有する請求項２５に記載の機械アクセス可能媒体。
【請求項２７】
実行されたときに、前記機械に、
前記予測情報が前記選択されたマクロブロックのマクロブロック形式に基づいて必要であることを決定させる、格納された命令を有する請求項２３に記載の機械アクセス可能媒体。
【請求項２８】
前記マクロブロック形式がインターマクロブロックである場合、前記予測情報が必要である、請求項２７に記載の機械アクセス可能媒体。
【請求項２９】
実行されたときに、前記機械に、
前記第２のスレッドが前記予測情報を含む少なくとも１つの参照マクロブロックを処理するまで、前記選択されたマクロブロックの前記処理動作を停止することにより、前記予測情報が利用可能になるまで、前記選択されたマクロブロックの前記処理動作を停止させる、格納された命令を有する請求項２３に記載の機械アクセス可能媒体。
【請求項３０】
実行されたときに、前記機械に、
前記第１のスレッドを実行する第１のプロセッサと前記第２のスレッドを実行する第２のプロセッサとの間の通信を可能にさせる、格納された命令を有する請求項２３に記載の機械アクセス可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してメディアデコーダに関し、特にビデオ情報をデコード及び／又はエンコードする方法、装置及び製造物に関する。
【背景技術】
【０００２】
一般的に、ビデオ又はビデオプログラムは、時間的に構成された複数の一連の静止画フレームを使用して、特定の速度で順次に提示されたときに動画を生成するように形成される。典型的には、ビデオ制作、ビデオ配送及びビデオ提示は、静止画フレームを含むビデオ情報（すなわち、ビデオフレーム）をエンコード及び／又はデコードすることを含む。例えば、ビデオ情報は、ビデオ提示の視覚品質を高めるように、更なる情報（例えば、テキスト、記述子、字幕、オーディオトラック、オーバーレイ・ビデオ、オーバーレイ画像等）を挿入するように、及び／又は小さい記憶空間を使用するため及び／又は視聴者への配送時間を減少させるためにビデオ情報を圧縮するように、エンコードされることがある。ビデオエンコード標準の例は、例えば、H.263、MPEG（Moving  Picture  Expert  Group）標準、H.264、VC-1等を含む。
【０００３】
ビデオは、異なるフレームレート（例えば、7フレーム／秒、15フレーム／秒、30フレーム／秒等）と異なる画素解像度とを使用して生成される。いずれの場合でも、典型的には、ビデオの処理（例えば、エンコード又はデコード）は、比較的大量のデータの処理を必要とする。例えば、30フレーム／秒のビデオのデコードは、提示されたビデオについて毎秒30静止画フレームのデコードを必要とする。各静止画フレームが標準画質解像度のフレーム（例えば、720×480画素）である場合、毎秒のビデオについて約10,000,000画素が処理及び提示される。タイムリーにこのような大量の情報を処理することは、かなりの処理能力量を必要とする可能性がある。或る場合には、ビデオ情報をエンコード及び／又はデコードするために、専用のビデオシステムが使用される。他の場合には、ビデオ情報をエンコード及び／又はデコードするために、汎用プロセッサ及び／又は拡張ビデオ処理機能（例えば、ビデオプロセッサ）を有する汎用又は多目的のコンピュータが使用される。
【図面の簡単な説明】
【０００４】
【図１】複数のスレッドを使用して処理（例えば、デコード又はエンコード）された複数のビデオフレームを表す例
【図２】複数のスレッドを使用してビデオ情報をデコード及び／又はエンコードするように構成された例示的なプロセッサ
【図３】複数のスレッドを使用してビデオ情報をデコード及び／又はエンコードするように協調的に動作するように構成された複数のプロセッサを有する例示的なマルチプロセッサシステム
【図４】複数のスレッドを使用してビデオ情報をデコード及び／又はエンコードするように構成された例示的な装置
【図５Ａ】図４の例示的な装置を実装してビデオ情報をデコード及び／又はエンコードするために使用され得る例示的な方法を表すフローチャート
【図５Ｂ】図４の例示的な装置を実装してビデオ情報をデコード及び／又はエンコードするために使用され得る例示的な方法を表すフローチャート
【図６】図５Ａ及び５Ｂにより表される方法を実行して図４の装置を実装し得る例示的なプロセッサシステムのブロック図
【発明を実施するための形態】
【０００５】
ここで説明する例示的な方法及び装置は、２つ以上のスレッドを使用してビデオ情報をデコード及び／又はエンコードするために使用されてもよい。特に、例示的な方法及び装置は、ビデオプログラムの各フレームを並列に処理（例えば、エンコード又はデコード）するために、複数のスレッドのそれぞれを使用するように構成される。このように、ここで説明する例示的な方法及び装置は、既知の方法及び装置より比較的高速且つ効率的に、ビデオデータ又は情報（例えば、圧縮ビデオデータ又は情報）をデコード及び／又はエンコードするために使用され得る。或る例示的な実装では、単一のプロセッサは複数のスレッドを実行する。他の例示的な実装では、複数のプロセッサは、相互に通信可能に結合され、各プロセッサは、複数のスレッドのうち１つ以上を実行する。例示的な実装では、ここで説明する例示的な方法及び装置は、OpenMPアプリケーション・プログラム・インタフェース（API：application  program  interface）を使用したMPEG-4デコーダと共に実装され得る。代替として、例示的な方法及び装置は、例えば、H.263、MPEG（Moving  Picture  Expert  Group）標準、H.264、VC-1等を含む他のビデオデコード及び／又はエンコード標準（例えば、ビデオ圧縮標準）と共に実装され得る。例示的な方法及び装置は、単一のプロセッサ（例えば、図３のプロセッサ202）又はマルチプロセッサシステム（例えば、図３のプロセッサシステム300）を使用して実装され得る。
【０００６】
ビデオ標準は、ビデオをデコード及び／又はエンコードする様々な方法を含む。或るビデオ標準（例えば、MJPEG（Motion  JPEG）又はMJPEG2K）は、互いに独立してデコード／エンコードされるフレーム（すなわち、イントラフレーム（Iフレーム））を指定する。Iフレームのみを使用するビデオ情報をデコード及び／又はエンコードするために使用する或る技術は、互いに独立して各フレームをデコードすることにより、複数のフレームをデコード又はエンコードすることを含む。他のビデオ標準は、イントラフレーム（Iフレーム）と予測フレーム（Pフレーム又はBフレーム）との使用を指定し、ビデオフレームがスライスされるべきかスライスされるべきではないかを指定する。以下に詳細に説明するように、予測フレームは、しばしば他のフレームから情報の依存性（例えば、予測情報）を有する。
【０００７】
スライスされたビデオフレーム（sliced  video  frame）は、スライス（例えば、ビデオフレームの一部）に分割され、各スライスは、ビデオフレームの他のスライスと独立してデコード又はエンコードされ得る。しかし、スライスされていないビデオフレーム（non-sliced  video  frame）は、スライスに分割されていない。スライスされたビデオフレームを有するビデオ情報では、ビデオフレームは、フレームの各スライスに別の処理スレッドを割り当てることによりデコード又はエンコードされ得る。スライスされていないビデオフレームを有するビデオ情報では、既知のビデオデコード又はエンコード技術は、１つのスライスされていないビデオフレームをデコード又はエンコードするために、しばしば単一処理のスレッドを使用する。ここで説明する例示的な方法及び装置は、前述の種類のビデオ標準のいずれかに関連するビデオデコーダ及び／又はエンコーダと共に実装され得るが、例示的な方法及び装置は、スライスされていないビデオフレームを有するビデオ情報をデコード及び／又はエンコードする際に特に有利である。
【０００８】
或るビデオエンコード又はビデオ圧縮標準は、ビデオフレームを複数のマクロブロックに分析し、ビデオフレームをマクロブロックの行及び列を有する格子のようなパターンに分割することを指定する。ビデオフレームのマクロブロックは、各行の左から右に順次に処理（例えば、デコード又はエンコード）され、行は、上から下に順次に処理される。更に、或るビデオエンコード又はビデオ圧縮標準は、異なる形式のビデオフレーム及び異なる形式のマクロブロックを指定する。例示的なビデオフレーム形式は、イントラフレーム（intraframe）とインターフレーム（interframe）とを含み、例示的なマクロブロック形式は、イントラマクロブロック（intramacroblock）とインターマクロブロック（intermacroblock）とを含む。
【０００９】
イントラフレーム形式のビデオフレームは、他のフレームと独立して処理（例えば、デコード又はエンコード）され得る。すなわち、イントラフレームは、そのフレームをデコード又はエンコードするために必要な全ての情報を含む。イントラマクロブロックは、他のフレームからの情報を必要とせず、そのイントラマクロブロックを含む現在のフレームの情報を使用して処理され得る。例えば、イントラマクロブロックは、イントラマクロブロック又は同じフレーム内の隣接マクロブロックの情報を使用して処理され得る。
【００１０】
これに対して、インターフレーム形式のビデオフレームは、ビデオフレームの情報及び他のビデオフレーム（例えば、参照ビデオフレーム）の情報を使用して処理される。例示的な形式のインターフレームは、予測フレーム（一般的にPフレームと呼ばれる）である。予測フレームをデコード又はエンコードすることは、１つ以上の参照フレーム（例えば、イントラフレーム間は他のインターフレーム）から予測情報を取得し、予測フレームの情報と共に予測情報を使用して予測フレームを処理することを必要とする。インターフレームは、インターマクロブロック（例えば、予測マクロブロック）を含み、しばしばイントラマクロブロックを含む。予測マクロブロックのデコードは、参照フレームの１つ以上の参照マクロブロックから予測情報を取得することを必要とする。予測フレーム及び予測マクロブロックは、片方向予測マクロブロック及び／又は双方向予測マクロブロックを含んでもよい。片方向予測マクロブロックは、前のフレームの参照マクロブロックの予測情報を使用する。双方向マクロブロックは、前のフレーム又は後のフレームの参照マクロブロックの予測情報を使用することができる。ここで説明する例示的な方法及び装置は、前述の異なるビデオフレーム形式及びマクロブロック形式のうちいずれか１つ以上と共に使用されてもよい。
【００１１】
直列にビデオフレームを処理（例えば、デコード又はエンコード）する或る既知のシステムとは異なり、ここで説明する例示的な方法及び装置は、複数のスレッドを使用して並列にビデオフレームをデコード又はエンコードするために使用され得る。例えば、（フレームの各スライスを処理するために並列で動作する複数のスレッドにより処理され得るスライスされたビデオフレームとは異なり）スライスされていないビデオフレームが複数のスレッドにより処理できない場合、ここで説明する例示的な方法及び装置は、スライスされていないビデオフレームに別の処理スレッドを割り当て、それぞれのスライスされていないビデオフレームを実質的に並列に処理することにより、複数のスライスされていないビデオフレームを処理するために使用され得る。従って、例えばここで説明する方法及び装置を使用してスライスされていないビデオフレームを処理するために、並列処理が有利に使用され得る。例示的なビデオデコードの実装では、第１のスレッドは、ビデオの第１のフレームをデコードするために使用され、第２のスレッドは、そのビデオの第２のフレームをデコードするために使用される。例示的な実装では、第１及び第２のスレッドは、第１及び第２のフレームを並列にデコードする。以下に説明するように、各スレッドは、他のスレッドに関連する進行又は状態情報にアクセスすることができる。例えば、第２のスレッドは、第１のスレッドに関連する状態情報にアクセスし、第１のフレームのうちどのくらい又は第１のフレームのどの部分を第１のスレッドがデコードしたかを決定することができる。このように、１つのフレームのデコード部分が他のフレーム（例えば、参照フレーム）のデコード部分からの情報（例えば、予測情報）の取得に依存するときに、第１及び第２のスレッドは、デコード動作を制御するために進行又は状態情報を使用することができる。
【００１２】
他の例示的なビデオデコードの実装では、ここで説明する例示的な方法及び装置は、ハイブリッド型デコード処理（又はハイブリッド型エンコード処理）を実装するために使用され得る。ハイブリッド型デコード処理では、１つ以上のスレッドは、第１の複数のフレームを順次にデコードし、１つ以上の他のスレッドは、第２の複数のフレームを並列にデコードする。例えば、ハイブリッド型デコード処理は、直列デコードサブプロセス（serial  decode  sub-process）と、並列デコードサブプロセス（parallel  decode  sub-process）とに分割されてもよい。直列デコードサブプロセスは、直列にフレームをデコードするように（例えば、次のフレームをデコードする前にフレームをデコードするように）、１つ以上のスレッドにより実行される動作を使用して実装される。並列デコードサブプロセスは、並列にフレームをデコードするように（例えば、２つ以上のフレームを並列にデコードするように）、１つ以上のスレッドにより実行される動作を使用して実装される。直列デコードサブプロセスは、１つ以上のフレームを直列にデコードするために、単一のスレッド（又は複数のスレッド）を使用するように構成されてもよい。例えば、第１のスレッドは第１のフレームをデコードし、第２のフレームは、第１のスレッドが第１のフレームのデコードを終了した後に第２のフレームをデコードすることができる。並列デコードサブプロセスは、各フレームをデコードするために複数のスレッドのそれぞれを使用することにより、２つ以上のフレームを並列にデコードするために複数のスレッドを使用するように構成されてもよい。各スレッドは、他のスレッドの処理状態に関連する進行又は状態情報にアクセスすることができる。例示的なビデオエンコード処理は、同様にビデオをエンコードするように実装され得る。
【００１３】
例示的な方法は、処理するためのビデオフレーム及びビデオフレームのマクロブロックを選択することを含む。例示的な方法はまた、第１のスレッドにより選択されたマクロブロックの処理動作（例えば、デコード動作又はエンコード動作）を開始することを含む。また、第２のスレッドによりデコード又はエンコードされている第２のフレーム（例えば、参照フレーム）から予測情報が必要な場合、予測情報が利用可能になるまで、第１のスレッドによる選択されたマクロブロックの処理動作は停止してもよい。例えば、第２のスレッドが少なくともいくつかの予測情報を含む少なくとも１つの参照マクロブロックを処理するまで、処理動作は停止してもよい。例示的な実装では、第１のスレッドは、第１のプロセッサにより実行され、第２のスレッドは、第２のプロセッサにより実行される。
【００１４】
例示的な方法の例示的な実装では、マクロブロック形式がイントラマクロブロックでない場合、予測情報が必要になる。選択されたマクロブロックのマクロブロック形式は、選択されたマクロブロックの情報に基づいて決定され得る。また、少なくともいくつかの予測情報を有する参照フレームの領域の座標は、選択されたマクロブロックの情報（例えば、動きベクトル）に基づいて決定され得る。
【００１５】
例示的な方法の例示的な実装では、選択されたマクロブロックに対応するマクロブロック・インデックス値（例えば、座標値）は、選択されたビデオフレーム内の選択されたマクロブロックの座標位置を示す列番号及び行番号に設定され得る。更に、処理動作を開始する前に、選択されたビデオフレームの複数のマクロブロック（例えば、選択されたビデオフレームの全てのマクロブロック）は、未処理としてマーク又は指定され、これらの複数のマクロブロックが第３のビデオフレームをデコード又はエンコードするために第３のスレッドに予測情報を提供する用意ができていないことを示してもよい。選択されたマクロブロックを処理した後に、選択されたマクロブロックは、処理済としてマーク又は指定されてもよい。
【００１６】
例示的な装置は、第１のマクロブロックで処理動作（例えば、デコード動作又はエンコード動作）を実行するために第１のスレッドを使用するように構成されたビデオ情報処理ユニットを含む。例示的な装置はまた、第２のスレッドによりデコード又はエンコードされている第２のフレーム（例えば、参照フレーム）から予測情報が必要であり、予測情報がまだ利用可能でない場合、第１のスレッドによる第１のマクロブロックの処理動作を停止するように構成された動作コントローラを含む。例えば、例示的な装置は、いつ第２のスレッドが予測情報を含む少なくとも１つの参照マクロブロックを処理したかを決定することにより、いつ予測情報が利用可能になるかを決定するように構成された予測情報利用可能検出器を含んでもよい。例示的な実装では、予測情報利用可能検出器は、第２のスレッドによりデコード又はエンコードされている参照マクロブロックを示す第２のフレームに関連するマクロブロック・インデックス値に基づいて、いつ予測情報が利用可能になるかを決定するように構成される。
【００１７】
例示的な実装では、例示的な装置は、第１のマクロブロックのマクロブロック形式を決定するように構成されたマクロブロック形式検出器を備える。第１のマクロブロックのマクロブロック形式がイントラマクロブロック形式でないことをマクロブロック形式検出器が決定し、例えば、予測情報が第１のマクロブロックを処理するために必要であることを示すときに、動作コントローラは、第１のマクロブロックの処理動作を停止するように構成されてもよい。
【００１８】
例示的な実装では、例示的な装置は、第１のマクロブロックに対応するマクロブロック・インデックス値を設定するように構成されたマクロブロックセレクタを備える。マクロブロック・インデックス値は、第２のスレッドによりアクセス可能でもよい。第１のマクロブロックで処理動作を実行する前に第１のマクロブロックを未処理として指定又はマークするために、例示的な装置は、マクロブロック状態指定器を備えてもよい。第１のマクロブロックを未処理として指定することは、第３のマクロブロックをデコード又はエンコードするために第１のマクロブロックの予測情報が第３のスレッドに利用可能でないことを示す。ビデオ情報処理ユニットが第１のマクロブロックを処理した後に、マクロブロック状態指定器は、第１のマクロブロックを処理済として指定又はマークする。
【００１９】
例示的な装置は、第１及び第２のスレッドを実行する単一のプロセッサを使用して実装されてもよい。更に又は代替として、例示的な装置は、複数のプロセッサを有するマルチプロセッサシステムを使用して実装されてもよい。このように、プロセッサの第１のものは、第１のスレッドを実行し、プロセッサの第２のものは、第２のスレッドを実行することができる。例示的な実装では、例示的な装置は、第１及び第２のプロセッサの間の通信を可能にするように構成されたプロセッサ間通信インタフェースを備える。
【００２０】
当業者に容易にわかるように、ここで説明する例示的な方法及び装置は、１つ以上のプロセッサ又はネットワークシステム装置に関連する１つ以上の機械アクセス可能媒体（例えば、CD-ROM、磁気記憶装置、光記憶装置、ソリッドステート記憶装置等）に格納された命令を使用して実装されてもよい。このように、機械アクセス可能媒体は、プロセッサ又はネットワークシステム装置が命令を取得して実行し、ここで説明する方法及び装置を実装することを可能にするために使用されてもよい。
【００２１】
図１を参照すると、例示的なビデオ処理動作100（デコード動作又はエンコード動作）の例が、複数のスレッド104を使用して複数のビデオフレーム102を処理するものとして示されている。図示の例では、第１のフレーム102a（フレームN）はイントラフレームであり、第２のフレーム102b（フレームN+1）及び第３のフレーム102c（フレームN+2）は予測フレーム（すなわち、インターフレーム）であり、第４のフレーム102d（フレームN+3）はイントラフレームである。しかし、他の例示的な実装では、第１及び第４のフレーム102a及び102dはインターフレーム（例えば、予測フレーム）でもよい。
【００２２】
ビデオデコードの実装では、第１のスレッド104aは第１のフレーム102aのビデオデコード動作を実行するように開始され、第２のスレッド104bは第２のフレーム102bのビデオデコード動作を実行するように開始され、第３のスレッド104cは第３のフレーム102cのビデオデコード動作を実行するように開始され、第４のスレッド104dは第４のフレーム102dのビデオデコード動作を実行するように開始される。ビデオエンコードの実装では、スレッド104a-dは、フレーム102a-dのそれぞれでエンコード動作を実行するように開始される。
【００２３】
各フレーム102a-dは、未処理マクロブロック106と、処理済マクロブロック108と、現在のイントラマクロブロック110と、現在の予測マクロブロック112及び114とを含み、複数のマクロブロックを含む。未処理マクロブロック106は、デコードの実装ではまだデコードされていないマクロブロックであり、エンコードの実装ではまだエンコードされていないマクロブロックである。処理済マクロブロック108は、デコード（又はエンコード）されているマクロブロックである。現在のイントラマクロブロック110は、デコード（又はエンコード）中であり、予測情報を必要としないマクロブロックである。現在の予測マクロブロック112は、デコード中であり、デコード（又はエンコード）される参照フレームから予測情報を必要とするマクロブロックである。
【００２４】
各スレッド104a-dは、他のスレッド104a-dに関連する情報にアクセスし、例えば、スレッド104a-dに関連するデコード又はエンコード状態を決定するように構成される。スレッド104a-dのデコード及び／又はエンコード状態を示すために、各フレーム102a-dは、各マクロブロック・インデックス値116a-dに関連付けられる。図示の例では、マクロブロック・インデックス値116a-dは、デコード（又はエンコード）中である現在のマクロブロックの位置を示すマクロブロック座標（Pfr,Pfc）として示されている。クロブロック座標（Pfr,Pfc）において、フレーム値（f）はフレーム番号（例えば、フレームN、フレームN+1等）を示し、行値（r）はフレーム内の行番号を示し、列番号（c）はフレーム内の列番号を示す。図示の例では、各スレッド104a-dは、自分のマクロブロック・インデックス値（例えば、マクロブロック・インデックス値116a-dのうち１つ）にアクセスして更新することができる。更に、各スレッド104a-dは、マクロブロック・インデックス値116a-dの他のものに少なくとも読み取りアクセスする。
【００２５】
どのマクロブロックが未処理（例えば、未処理マクロブロック106）であるか処理済（例えば、処理済マクロブロック108）であるかを示すために、スレッド104a-dは、処理済／未処理状態を示す値又は情報（例えば、処理状態指示子）で未処理マクロブロックをマークすることができる。或る例示的な実装では、未処理及び処理済のマクロブロックをマークするために、各スレッド104a-dは、未処理及び処理済状態情報を有する１つ以上の例示的なデータ構造（例えば、参照テーブル）（図示せず）を生成することができる。各スレッド104a-dは、フレーム102a-bのそれぞれに対応する自分のデータ構造を生成することができる。この場合、データ構造は複数のエントリを有し、複数のエントリのそれぞれは、フレーム102a-dのそれぞれのマクロブロックの１つに対応する。代替として、全てのスレッドは、全てのフレーム102a-bに対応する共通のデータ構造を生成してもよい。いずれの場合でも、全てのスレッド104a-dは、全てのフレーム102a-dのマクロブロック状態情報にアクセスすることができる。
【００２６】
例示的な実装では、スレッド104a-dは、現在の予測マクロブロック112及び114の１つをデコード（又はエンコード）するためにいつ予測情報が利用可能になるかを決定するために、マクロブロック・インデックス値116a-dとマクロブロック状態情報とを使用することができる。例えば、例示的なデコードの実装では、第２のフレーム102bの現在の予測マクロブロック112は、第１のフレーム102a（例えば、参照フレーム）の１つ以上のマクロブロックに含まれる予測情報を必要とする。第２のスレッド104bは、動きベクトル情報（例えば、フレーム毎に位置を移動するオブジェクトの動きベクトル）を有する第１のフレーム102a内の位置（例えば、マクロブロック）を決定し、第１のフレーム102aに関連するマクロブロック・インデックス値116a及び／又はマクロブロック状態情報を取得し、第１のフレーム102aでいつ予測情報が利用可能になるか／予測情報が利用可能であるか否かを決定することができる。このように、第１のフレーム102aが必要な予測情報を有する第１のフレーム102aのマクロブロックをデコードする前に、第２のスレッド104bが現在の予測マクロブロック112を処理し始めると、第２のスレッド104bは、現在の予測マクロブロック112のデコード動作を停止し、第１のスレッド104aが必要な予測情報を有する第１のフレーム102aのマクロブロックを処理するまで待機することができる。予測情報が第１のフレーム102aから利用可能であることを第２のスレッド104bが決定すると、第２のスレッド104bは、現在の予測マクロブロック112のデコード動作を続け、第１のフレーム102aからの予測情報を取得して使用することができる。
【００２７】
同じ例示的なデコードの実装では、第３のフレーム102cは、第２のフレーム102b（例えば、参照フレーム）からの予測情報を必要とする現在の予測マクロブロック114を含む。図示の例に示すように、第３のスレッド104cが現在の予測マクロブロック114のデコード動作を始めるときに、第２のスレッド104bは、現在の予測マクロブロック114をデコードするために必要な予測情報を含む第２のフレーム102cのマクロブロックを既に処理している。第３のスレッド104cが第２のスレッド102bに関連するマクロブロック・インデックス値116b及び／又はマクロブロック状態情報を取得し、予測情報が既に利用可能であることを決定すると、第３のスレッド104cは、デコード動作を停止する必要はなく、その代わりに、第２のフレーム102bから予測情報を直ちに取得し、現在の予測マクロブロック114をデコードすることができる。
【００２８】
例示的なエンコードの実装では、各スレッド104a-dは、どのマクロブロックが予測情報を必要としているかを決定し、これらのフレームを予測マクロブロック（例えば、現在の予測マクロブロック112及び114）としてマークすることができる。第２のスレッド104bが現在の予測マクロブロック112を処理し始めると、第２のスレッド104bは、予測情報を有する第１のフレーム102a内の位置（例えば、マクロブロック）を決定し、第１のフレーム102aの位置に関連するマクロブロック・インデックス値116a及び／又はマクロブロック状態情報を取得し、いつ予測情報が第１のフレーム102aで利用可能になるかを決定することができる。このように、第１のフレーム104aが必要な予測情報を有する第１のフレーム102aのマクロブロックをエンコードする前に第２のスレッド104bが現在の予測マクロブロック112を処理し始めると、第２のスレッド104bは、現在の予測マクロブロック112のエンコード動作を停止し、第１のスレッド104aが必要な予測情報を有する第１のフレーム102aのマクロブロックをエンコードするまで待機することができる。予測情報が第１のフレーム102aから利用可能であることを第２のスレッド104bが決定すると、第２のスレッド104bは、第１のフレーム102aからの予測情報を使用して、現在の予測マクロブロック112のエンコード動作を続けることができる。
【００２９】
スレッド104a-dは、単一のプロセッサ又は相互に通信可能に結合された複数のプロセッサを使用して実行され得る。２つのプロセッサを使用する例示的な実装では、プロセッサの第１のものは、第１及び第２のスレッド104a-bを実行し、プロセッサの第２のものは、第３及び第４のスレッド104c-dを実行することができる。図示の例では４つのスレッド（スレッド104a-d）が示されているが、少ないスレッド又は多いスレッドを使用するように他の例示的な実装が構成されてもよい。従って、４つのフレーム（フレーム102a-d）が示されているが、少ないフレーム又は多いフレームが並列に処理（例えば、デコード又はエンコード）されてもよい。
【００３０】
図２は、図１の複数のスレッド104a-dを使用してビデオ情報をデコード及び／又はエンコードするように構成された例示的なプロセッサ202である。図示のように、例示的なプロセッサ202は、エンコード済ビデオ情報206（例えば、圧縮ビデオ）及び／又はエンコード未処理（生）ビデオ情報208を受信し、前述のように、スレッド104a-dを使用して図１のフレーム102a-dを並列に処理し、デコード処理中にデコード済ビデオ212又はエンコード処理中にエンコード済ビデオ214を出力する。図１に関して前述したマクロブロック・インデックス値116a-d（図１）及び／又はマクロブロック状態情報を格納するために、例示的なプロセッサ202は、メモリ216に通信可能に結合される。メモリ216はまた、フレーム102a-dを処理する間に、マクロブロックとフレームデータとを格納するために使用されてもよい。
【００３１】
図３は、協調的に動作し、図１の複数のスレッド104a-dを使用してビデオ情報をデコード及び／又はエンコードするように構成された複数のプロセッサ302a-dを有する例示的なマルチプロセッサシステム300である。図示の例では、プロセッサ302a-dは、相互に通信可能に結合される。図１に関して前述したマクロブロック・インデックス値116a-d（図１）及び／又はマクロブロック状態情報を格納するために、例示的なプロセッサ302a-dは、共有メモリ306に通信可能に結合される。図示の例では、各プロセッサ302a-dは、複数のスレッド104a-dのそれぞれを実行し、前述のように図１の複数のフレーム102a-dのそれぞれを処理（例えば、エンコード又はデコード）する。図示のように、例示的なプロセッサ302a-dは、エンコード済ビデオ206（例えば、圧縮ビデオ）及び／又はエンコード未処理（生）ビデオ208を受信し、スレッド104a-dを実行してフレーム102a-dを並列に処理する。図示の例では、プロセッサ302dは、デコード済ビデオ314及び／又はエンコード済ビデオ316を出力するように構成される。例えば、例示的なデコードの実装では、プロセッサ302dは、プロセッサ302a-dによりデコードされたフレームを構成し、デコード済ビデオ314を出力する。例示的なエンコードの実装では、プロセッサ302dは、例えばビデオ圧縮標準に従ってプロセッサ302a-dにより生成されたエンコード済フレームを構成し、エンコード済ビデオ316を出力する。
【００３２】
各プロセッサ302a-dは、１つのスレッドを実行するものとして示されているが、他の例示的な実装では、各プロセッサ302a-dは、複数のスレッドを実行することができる。更に、他の例示的な実装では、例示的なマルチプロセッサシステム300は、少ないプロセッサ又は多いプロセッサを使用して実装され得る。
【００３３】
図４は、複数のスレッド（例えば、図１〜３の複数のスレッド104a-d）を使用してビデオ情報をデコード及び／又はエンコードするように構成された例示的な装置400である。例示的な装置400は、ハードウェア、ファームウェア及び／又はソフトウェアの如何なる所望の組み合わせを使用して実装されてもよい。例えば、１つ以上の集積回路、別々の半導体構成要素、又は受動的電気構成要素が使用されてもよい。更に又は代替として、例示的な装置400のブロックのいくつか若しくは全部、又はその一部は、例えばプロセッサシステム（例えば、図６の例示的なプロセッサシステム610）により実行されたときに、図５Ａ及び５Ｂのフローチャートに表す動作を実行する機械アクセス可能媒体に格納された命令コード及び／又は他のソフトウェア及び／又はファームウェア等を使用して実装されてもよい。例示的な装置400は、以下に説明する１つの各ブロックを有するものとして記載されているが、例示的な装置400は、以下に説明する２つ以上の何らかのブロックを備えてもよい。例えば、例示的な装置400は、２つ以上の特定のブロックを備えてもよく、そのそれぞれは、複数のスレッド（例えば、図１のスレッド104a-d）のそれぞれにより実行されるように構成される。
【００３４】
デコード（又はエンコード）するビデオを選択するために、例示的な装置400は、フレームセレクタ402を備える。図示の例では、フレームセレクタ402は、スレッド104a-d（図１〜３）毎に１つのビデオフレーム102a-d（図１〜３）を選択するように構成される。例えば、１つのスレッド104a-dが１つのフレーム102a-dをデコード（又はエンコード）し終えると、フレームセレクタ402は、デコード（又はエンコード）するその１つのスレッド104a-dの次のビデオフレーム（例えば、スレッド104a-dにより既にデコードされているフレーム102a-d以外のフレーム）を選択することができる。例示的な実装では、フレームセレクタ402は、スレッド104a-dによりデコードされているフレームのフレーム・インデックス値を格納する。このように、１つのスレッド104a-dがビデオフレームを処理し終えると、フレームセレクタ402は、ビデオプログラムの次の未処理フレーム又は利用可能なフレームを順次に（例えば、発生順に）選択することができる。代替の例示的な実装では、例示的な装置は、フレームセレクタ402と実質的に類似又は同一の複数の（例えば、４つの）フレームセレクタを備えてもよい。代替の例示的な実装では、各フレームセレクタは、スレッド104a-dのそれぞれについてビデオフレームを選択するように構成される。
【００３５】
デコード（又はエンコード）するマクロブロックを選択するために、例示的な装置400は、マクロブロックセレクタ404を備える。図示の例では、マクロブロックセレクタ404は、処理（例えば、デコード又はエンコード）するスレッド104a-dについて、１つのマクロブロック106、108、110、112及び114（図１）を選択するように構成される。例えば、スレッド104aについてどのマクロブロックを選択するかを決定するために、マクロブロックセレクタ404は、スレッド104aにより以前に処理されたマクロブロックのマクロブロック・インデックス値116a（例えば、図１のマクロブロック座標（Pfr,Pfc）をインクリメントし、例えば順次に（まずフレームの左上角からマクロブロックを選択し、フレームの右下角に向かって順に続ける）、どのマクロブロックを次に選択するかを決定することができる。或る例示的な実装では、マクロブロックセレクタ404は、全てのスレッド104a-dのマクロブロックを選択するように構成されてもよい。他の例示的な実装では、例示的な装置400は、マクロブロックセレクタ404に実質的に類似又は同一の複数のマクロブロックセレクタを備えてもよく、各マクロブロックセレクタは、スレッド104a-dのそれぞれのマクロブロックを選択するように構成されてもよい。
【００３６】
マクロブロック形式を検出するために、例示的な装置400は、マクロブロック形式検出器406を備える。図示の例では、マクロブロック形式検出器406は、マクロブロックがイントラマクロブロック（例えば、図１のイントラマクロブロック110）であるかインターマクロブロック（例えば、図１の予測マクロブロック112及び114）であるかを検出するように構成される。他の例示的な実装では、マクロブロック形式検出器406は、他のマクロブロック形式を検出するように構成されてもよい。図示の例では、マクロブロック形式検出器406は、マクロブロック形式を決定するためにマクロブロック・ヘッダ情報を使用する。マクロブロック・ヘッダ情報は、マクロブロック形式と他のマクロブロック属性とを示すマクロブロックについての記述情報を含む。
【００３７】
ビデオ情報（例えば、図１のビデオフレーム102a-d）をデコード及び／又はエンコードするために、例示的な装置は、ビデオ情報処理ユニット408を備える。図示の例では、ビデオ情報処理ユニット408は、ビデオ情報をデコードするビデオデコーダ410と、ビデオ情報をエンコードするビデオエンコーダ412とを含む。図示の例では、ビデオデコーダ410及びビデオエンコーダ412は、例えば、H.263、MPEG（Moving  Picture  Expert  Group）標準、H.264、VC-1等を含む如何なる種類のビデオ符号化標準（例えば、ビデオ圧縮標準）を使用してビデオ情報を処理するように構成されてもよい。或る例示的な実装では、ビデオ情報処理ユニット408は、ビデオデコーダ410及びビデオエンコーダ412のうちの１つのみを含むように構成されてもよい。
【００３８】
例示的なビデオデコードの実装では、ビデオ情報処理ユニット408がエンコード済ビデオ（例えば、図２及び３のエンコード済ビデオ情報206）を受信すると、ビデオ情報処理ユニット408は、ビデオデコーダ410を選択又は使用可能にし、エンコード済ビデオ情報206をビデオデコーダ410に通信する。例示的なビデオエンコードの実装では、ビデオ情報処理ユニット408がエンコード未処理ビデオ（例えば、図２及び３のエンコード未処理ビデオ情報208）を受信すると、ビデオ情報処理ユニット408は、ビデオエンコーダ412を選択又は使用可能にし、エンコード未処理ビデオ情報208をビデオエンコーダ412に通信する。
【００３９】
或る例示的な実装では、フレームセレクタ402は、図１の各スレッド102a-dによりデコード（又はエンコード）されるビデオフレームを選択し、選択されたビデオフレームを情報処理ユニット408に通信する。他の例示的な実装では、ビデオ情報処理ユニット408は、エンコード済又はエンコード未処理ビデオ情報を受信し、ビデオ情報処理ユニット408は、スレッド102a-d毎にビデオフレームを選択するためにフレームセレクタ402を使用する。
【００４０】
ビデオ情報処理ユニット408のビデオ処理動作を制御するために、例示的な装置400は、動作コントローラ414を備える。図示の例では、動作コントローラ414は、ビデオ情報処理ユニット408により実行されるビデオデコード又はエンコード動作を開始又は停止するように構成される。動作コントローラ414はまた、（ビデオデコーダ410又はビデオエンコーダ412のうちの１つを選択して）ビデオ情報処理ユニット408の他の動作を制御するように構成されてもよい。
【００４１】
例示的な装置400は、マクロブロック（例えば、図１のマクロブロック106、108、110、112及び114）が処理済（例えば、デコード済又はエンコード済）であるか未処理（例えば、デコード処理中にまだデコードされていない又はエンコード処理中にまだエンコードされていない）であるかを示すように構成されたマクロブロック状態指定器416を備える。図示の例では、マクロブロック状態指定器416は、フレーム（例えば、図１のビデオフレーム102a-d）の各マクロブロックに関連して、マクロブロックが処理済であるか未処理であるかを示すマクロブロック状態指示子（例えば、処理済／未処理タグ情報）を格納するように構成される。例えば、マクロブロック状態指定器416は、ビデオフレームのマクロブロックを特定するマクロブロック・インデックス値（例えば、図１のマクロブロック／インデックス値116a-d）に関連して、データ構造にマクロブロック状態指示子を格納してもよい。データ構造は、共有メモリ（例えば、図２のメモリ216又は図３のメモリ306）に格納されてもよい。
【００４２】
例示的な装置400は、予測マクロブロック（例えば、図１の現在の予測マクロブロック112及び114）をデコードするために必要な予測情報を含む参照フレーム（例えば、図１のフレーム102a及び102b）内のマクロブロックの位置（例えば、１つ以上のマクロブロック・インデックス又は座標値）を決定するように構成された予測情報ロケータ418を備える。図示の例では、予測情報ロケータ418は、予測情報を含むマクロブロックのマクロブロック座標（Pfr,Pfc）を決定するために、予測マクロブロックの情報（例えば、マクロブロック・ヘッダ情報）を使用するように構成される。
【００４３】
例示的な装置400は、参照フレームの予測情報が利用可能であるか否かを決定するように構成された予測情報利用可能検出器420を備える。例えば、予測情報利用可能検出器420は、参照フレームのマクロブロックのマクロブロック状態指示子を検査し、予測情報ロケータ418により特定された予測情報を含むマクロブロックが処理されているか否かを決定してもよい。
【００４４】
プロセッサ（例えば、図３のプロセッサ302a-d）がマルチプロセッサシステム（図３のマルチプロセッサシステム300）で相互に通信することを可能にするために、例示的な装置400は、プロセッサ間通信インタフェース422を備える。プロセッサ間通信インタフェース422は、何らかの適切な通信インタフェースと通信プロトコルとを使用して構成され得る。
【００４５】
図５Ａ及び５Ｂは、図４の例示的な装置400を実装してビデオ情報をデコード及び／又はエンコードするために使用され得る例示的な方法を表すフローチャートを示している。或る例示的な実装では、図５Ａ及び５Ｂの例示的な方法は、プロセッサ（例えば、図６の例示的なプロセッサシステム610に示すプロセッサ612）により実行されるプログラムを有する機械可読命令を使用して実装されてもよい。プログラムは、周知の方法で、CD-ROM、フロッピー（登録商標）ディスク、ハードドライブ、DVD（digital  versatile  disk）、又はプロセッサ612に関連するメモリのような有形媒体に格納されたソフトウェアに具現されてもよく、及び／又はファームウェア及び／又は専用ハードウェアに具現されてもよい。更に、例示的なプログラムは、図５Ａ及び５Ｂに示すフローチャートを参照して説明するが、当業者は、例示的な装置400を実装する他の多数の方法が代替として使用されてもよいことを容易に認識する。例えば、ブロックの実行順序は変更されてもよく、及び／又は記載のブロックのいくつかは変更、削除又は結合されてもよい。
【００４６】
図５Ａ及び５Ｂの例示的な方法は、図１〜３の１つのスレッド104a-bに関連する動作を実装するものとして記載される。しかし、例示的な方法の複数のインスタンスは並列に実行され、２つ以上のスレッド104a-bを使用してビデオ情報をデコード又はエンコードすることに関連する動作を実装してもよい。また、図５Ａ及び５Ｂの例示的な方法の動作は、直列に実行されるものとして記載されているが、２つ以上の動作は並列に実行されてもよい。
【００４７】
まず、例示的な装置400は、ビデオ情報をデコードするべきか否かを決定する（ブロック502）。例えば、例示的な装置400がエンコード済ビデオ情報（例えば、図２及び３のエンコード済ビデオ情報206）を受信すると、例示的な装置400は、ビデオ情報をデコードするべきであることを決定する。代替として、例示的な装置400がエンコード未処理ビデオ情報（例えば、図２及び図３のエンコード未処理ビデオ情報208）を提供されると、例示的な装置400は、ビデオ情報をエンコードするべきであり、従って、ビデオ情報をデコードするべきでないことを決定する。
【００４８】
例示的な装置400がビデオ情報をデコードするべきであることを決定すると（ブロック502）、フレームセレクタ402（図４）は、デコードするフレーム（例えば、図１〜３の１つのビデオフレーム102a-d）を選択する（ブロック504）。次に、マクロブロック状態指定器416（図４）は、選択されたフレームの全てのマクロブロックを未処理として指定する（ブロック506）。次に、マクロブロックセレクタ404は、デコードするマクロブロックを選択し（ブロック508）、選択されたマクロブロックを示すマクロブロック・インデックス値（例えば、図１の１つのマクロブロック・インデックス値116a-d）を設定する（ブロック510）。例えば、図１の図示の例では、ブロック504において、フレームセレクタ402が第１のフレーム102を選択すると、ブロック508において、マクロブロックセレクタ404は、第１スレッド104aによりデコードする現在のイントラマクロブロック110を選択する。どのマクロブロックを選択するかを決定するために、マクロブロックセレクタ404は、前に処理されたマクロブロックのマクロブロック・インデックス値をインクリメントし、どのマクロブロックを次に選択するかを決定することができる。
【００４９】
次に、ビデオデコーダ410（図４）は、選択されたマクロブロックのマクロブロック・ヘッダ情報（例えば、マクロブロック記述情報）をデコードする（ブロック512）。マクロブロック・ヘッダ情報は、マクロブロック形式と他のマクロブロック属性とを示すマクロブロックについての記述情報を含む。次に、マクロブロック形式検出器406（図４）は、例えば、ブロック512においてデコードされたヘッダ情報に基づいて、選択されたマクロブロックがイントラマクロブロックであるか否かを決定する（ブロック514）。
【００５０】
選択されたマクロブロックがイントラマクロブロックでない（例えば、選択されたマクロブロックが予測情報を必要とする予測マクロブロックである）ことをマクロブロック形式検出器406が決定すると（ブロック514）、予測情報ロケータ418は、例えば、ブロック512においてデコードされたヘッダ情報に基づいて、選択されたフレームをデコードするために必要な予測情報を含む１つ以上の参照フレーム内のマクロブロックの位置（例えば、マクロブロック座標（Pfr,Pfc）を決定する（ブロック516）。
【００５１】
次に、動作コントローラ414（図４）は、選択されたマクロブロックでビデオデコーダ410により実行されるデコード動作（例えば、処理動作）を停止し、予測情報を含むマクロブロックが処理されたことを予測情報利用可能検出器420が決定するまで待機する（ブロック518）。図１の図示の例では、第１のスレッド104aのデコード動作が、現在の予測マクロブロック112をデコードするために第２のスレッド104bにより必要な予測情報を含むマクロブロックをデコードするまで、第２のスレッド104bのビデオデコード動作は停止される必要がある。図示の例では、予測情報利用可能検出器420は、共有メモリ（例えば、図２のメモリ216又は図３のメモリ306）にアクセスし、予測情報を含むマクロブロックに対応する第１のフレーム104a（図１）に関連するマクロブロック状態指示子を取得することができる。マクロブロックが処理されたことを取得されたマクロブロック状態指示子が示すことを予測情報利用可能検出器420が決定すると、動作コントローラ414は、第１のフレーム102a（例えば、参照フレーム）から予測情報を取得して、選択されたマクロブロックをデコードするために予測情報を使用することにより、ビデオデコーダ410が第２のスレッド104を介して選択されたマクロブロックのデコード動作を続けることを再開する、可能にする、又はさせる。
【００５２】
或る例示的な実装では、動作コントローラ414は、停止して予測情報を待機する必要はない。図１の図示の例では、第３のスレッド104cのビデオデコード動作は停止される必要はない。この理由は、現在の予測マクロブロック114をデコードするために第３のスレッド104cにより必要な予測情報を有する第２のフレーム102b（例えば、参照フレーム）のマクロブロックは、既に第２のスレッド104bによりデコードされているからである。従って、第３のフレーム102cの図示の例では、動作コントローラ414は、第３のスレッド104cのデコード動作を停止し、予測情報を待機する必要はない。
【００５３】
予測情報が利用可能であることを予測情報利用可能検出器420が決定した場合、又は選択されたマクロブロックがイントラマクロブロックであることをマクロブロック形式検出器406が決定した場合（ブロック514）、動作コントローラ414は、選択されたマクロブロックでビデオデコーダ410により実行されるデコード動作を再開する又は可能にする（ブロック520）。選択されたマクロブロックがデコードされた後に、マクロブロック状態指定器416（図４）は、例えば、共有メモリ（例えば、図２のメモリ216又は図３のメモリ306）の選択されたマクロブロックに関連する状態指示子を更新することにより、選択されたマクロブロックを処理済として指定する（ブロック522）。次に、例示的な装置400は、現在のフレームの他のマクロブロックがデコードを必要とするか否かを決定する（ブロック524）。他のマクロブロックがデコードを必要とする場合（ブロック524）、制御はブロック508に戻され、マクロブロックが選択される。そうでない場合、処理は終了し、及び／又は制御は呼び出し処理又は機能に戻る。
【００５４】
例示的なビデオエンコードの実装では、例示的な装置400がエンコード未処理ビデオ情報（例えば、図２及び３のエンコード未処理ビデオ情報208）を受信すると、ブロック502において、例示的な装置400は、ビデオをデコードするべきでなく、制御が図５Ｂのブロック532に渡されることを決定する。フレームセレクタ402（図４）は、エンコードするフレーム（例えば、図１の１つのビデオフレーム102a-d）を選択する（ブロック532）。次に、マクロブロック状態指定器416（図４）は、選択されたフレームの全てのマクロブロックを未処理として指定する（ブロック534）。
【００５５】
次に、ビデオエンコーダ412は、動き推定処理を使用して、選択されたフレームの動きベクトルを生成し（ブロック536）、参照フレームの予測情報を特定し、選択されたフレームのどのマクロブロックが予測マクロブロックであるかを決定する（ブロック540）。次に、マクロブロックセレクタ404（図４）は、エンコードするマクロブロックを選択し（ブロック542）、選択されたマクロブロックを示すマクロブロック・インデックス値（例えば、図１の１つのマクロブロック・インデックス値116a-d）を設定する（ブロック544）。次に、マクロブロック形式検出器406（図４）は、例えば、ブロック540において実行された動きベクトルの分析に基づいて、選択されたマクロブロックがイントラマクロブロックであるか否かを決定する（ブロック546）。
【００５６】
選択されたマクロブロックがイントラマクロブロックでないことをマクロブロック形式検出器406が決定すると（ブロック546）、予測情報ロケータ418は、予測情報を含む１つ以上の参照フレーム内のマクロブロックの位置（例えば、マクロブロック座標（Pfr,Pfc）を決定する（ブロック548）。次に、ビデオエンコーダ412は、マクロブロック形式と予測情報位置とをエンコードする（ブロック550）。
【００５７】
次に、動作コントローラ414は、選択されたマクロブロックでビデオエンコーダ412により実行されるエンコード動作（例えば、処理動作）を停止し、予測情報を含むマクロブロックが処理されたことを予測情報利用可能検出器420が決定するまで待機する（ブロック552）。このように、ビデオエンコーダ412は、選択されたマクロブロックをエンコードするために予測情報を使用することができる。
【００５８】
予測情報を含むマクロブロックが処理されたことを予測情報利用可能検出器420が決定した後、又は選択されたマクロブロックがイントラマクロブロックであることをマクロブロック形式検出器406が決定した場合（ブロック546）、動作コントローラ414は、ビデオエンコーダ412に対して、選択されたマクロブロックをエンコード（例えば、圧縮）させる（ブロック554）。選択されたマクロブロックがエンコードされた後に、マクロブロック状態指定器416は、選択されたマクロブロックを処理済みとして指定する（ブロック556）。次に、例示的な装置400は、現在のフレームの他のマクロブロックがエンコードを必要とするか否かを決定する（ブロック558）。他のマクロブロックがエンコードを必要とする場合（ブロック558）、制御はブロック542に戻され、マクロブロックが選択される。そうでない場合、処理は終了し、及び／又は制御は呼び出し処理又は機能に戻る。
【００５９】
例示的な実装では、図５Ａ及び５Ｂの例示的な処理は、例示的なハイブリッド型ビデオデコード処理及び／又はハイブリッド型ビデオエンコード処理を実装するために使用されてもよい。例示的なハイブリッド型ビデオデコード処理及び／又はハイブリッド型ビデオエンコード処理では、１つ以上のスレッドは、第１の複数のフレームを順次に処理し、１つ以上の他のスレッドは、第２の複数のフレームを並列に処理する。例えば、ハイブリッド型デコード処理は、直列デコードサブプロセスと、並列デコードサブプロセスとに分割されてもよい。直列デコードサブプロセスは、直列にフレームをデコードするために（例えば、次のフレームをデコードする前にフレームをデコードするために）使用される動作を使用して実装される。並列デコードサブプロセスは、並列にフレームをデコードするために（例えば、２つ以上のフレームを並列にデコードするために）使用される動作を使用して実装される。直列デコードサブプロセスは、１つ以上のフレームを直列にデコードするために、単一のスレッド（又は複数のスレッド）を使用するように構成されてもよく、並列デコードサブプロセスは、各フレームをデコードするために複数のスレッドのそれぞれを使用することにより、２つ以上のフレームを並列にデコードするために複数のスレッドを使用するように構成されてもよい。
【００６０】
図６は、ここで説明した装置及び方法を実装するために使用され得る例示的なプロセッサシステム610のブロック図である。図６に示すように、プロセッサシステム610は、相互接続バス614に結合されたプロセッサ612を含む。プロセッサ612は、レジスタセット又はレジスタ空間616を含む。レジスタセット又はレジスタ空間616は、図６では完全にオンチップであるものとして示されているが、代替として完全に又は部分的にオフチップに配置されてもよく、専用電気接続及び／又は相互接続バス614を介してプロセッサ612に直接結合されてもよい。プロセッサ612は、如何なる適切なプロセッサ、処理ユニット又はマイクロプロセッサでもよい。図６に図示しないが、システム610はマルチプロセッサでもよいため、相互接続バス614に通信可能に結合されたプロセッサ612と同一又は類似の更なるプロセッサを含んでもよい。
【００６１】
図６のプロセッサ612は、チップセット618に結合される。チップセット618は、メモリコントローラ620と入出力（I/O）コントローラ622とを含む。周知のように、典型的には、チップセットは、I/O及びメモリ管理機能を提供し、チップセット618に結合された１つ以上のプロセッサによりアクセス可能又は使用可能である複数の汎用及び／又は専用レジスタ、タイマ等を提供する。メモリコントローラ620は、プロセッサ612（又は複数のプロセッサが存在する場合には複数のプロセッサ）がシステムメモリ624と大容量記憶メモリ625とにアクセスすることを可能にする機能を実行する。
【００６２】
システムメモリ624は、例えば、SRAM（static  random  access  memory）、DRAM（dynamic  random  access  memory）、フラッシュメモリ、ROM（read-only  memory）等のような如何なる所望の種類の揮発性及び／又は不揮発性メモリを含んでもよい。大容量記憶メモリ625は、ハードディスクドライブ、光ドライブ、テープ記憶装置等を含み、如何なる所望の種類の大容量記憶装置を含んでもよい。
【００６３】
I/Oコントローラ622は、プロセッサ612がI/Oバス632を介して周辺入出力（I/O）装置626及び628並びにネットワークインタフェース630と通信することを可能にする機能を実行する。I/O装置626及び628は、例えば、キーボード、ビデオディスプレイ又はモニタ、マウス等のような如何なる所望の種類のI/O装置でもよい。ネットワークインタフェース630は、例えば、プロセッサシステム610が他のプロセッサシステムと通信することを可能にするEthernet（登録商標）装置、ATM（asynchronous  transfer  mode）装置、802.11装置、DSLモデム、ケーブルモデム、セルラモデム等でもよい。
【００６４】
メモリコントローラ620及びI/Oコントローラ622は、図６ではチップセット618内の別の機能ブロックとして示されているが、これらのブロックにより実行される機能は、単一の半導体回路内に統合されてもよく、２つ以上の別の集積回路を使用して実装されてもよい。
【００６５】
特定の方法、装置及び製造物についてここで説明したが、この特許の対象範囲はこれらに限定されない。これに対して、この特許は、文言上又は均等の原理で特許請求の範囲内に公平に入る全ての方法、装置及び製造物をカバーする。
【図１】
2010515336.tif 000003
【図２】
2010515336.tif 000004
【図３】
2010515336.tif 000005
【図４】
2010515336.tif 000006
【図５Ａ】
2010515336.tif 000007
【図５Ｂ】
2010515336.tif 000008
【図６】
2010515336.tif 000009
【国際調査報告】
2010515336.tif 000010
2010515336.tif 000011