説明

マルチフォーマットビデオ処理のためのコンフィギュレーションバッファ割当

【課題】異なるビデオコーデックフォーマットに関連する少なくとも2つのビデオリードストリームの処理をサポートするよう共有バッファを動的に構成することを含むシステム及び方法が開示される。
【解決手段】本方法は、一方のリードストリームに関連するメモリリクエストに応答して、共有バッファ内のバッファライトアドレスを決定するステップと、他方のリードストリームに関連するメモリリクエストに応答して、共有バッファ内の異なるバッファライトアドレスを決定するステップとを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、マルチフォーマットビデオ処理に関する。
【背景技術】
【0002】
ビデオ画像を圧縮とするための各種ビデオコーデックが利用可能である。一般に、ビデオコーデックは、画像データを圧縮又は伸長する際にメモリリソースを頻繁に利用する。AVC(Advanced Video Coding)コーデック又はSMPTE(Society of Motion Picture and Television Engineers)コーデックスなどの異なるビデオコーデックは、ビットストリーム、ビットプレーンサーファス、バイトストリームデコーダ(BSD)ローストア、ピクセルデータリクエストなどの異なる及び/又は特有のタイプのメモリリード又はライトリクエストをしばしば有する。従来のビデオデコーダの設計は、複数の固定サイズのバッファメモリを利用して、特定のタイプのビデオコーデックにより生成されるビデオコーデックリードストリームの処理をサポートする。例えば、AVCデコーダの設計は、リードストリーム処理のため3つの別々の同様のサイズのローストアバッファを必要とし、他方、SMTPE VC−1デコーダの設計は、1つの最小サイズのローストアバッファ、1つの大きなDMV(Differential Motion Vector)バッファ及び1つの小さなビットプレーンバッファを必要とする。
【発明の概要】
【発明が解決しようとする課題】
【0003】
従来のビデオデコーダの設計は、典型的には、大きな内部キャッシュ及び/又はリードストリーム毎に別々の所定の固定サイズのバッファを利用する。しかしながら、このようなアプローチは、極めてエリアコスト高であり、及び/又は高い電力消費となりうる。さらに、大部分の従来のビデオハードウェアアクセラレーションデコーダの設計は、一時的なデータを格納するため大きな内部キャッシュを有するのに十分なエリアを有していない。従って、大部分の設計は、プリフェッチロジックと複数の小さなバッファとを利用して、外部メモリからのリードリクエストの長いメモリ遅延を隠蔽している。
【0004】
上記問題点に鑑み、本発明の一課題は、効果的なマルチフォーマットビデオ処理のためのコンフィギュレーションバッファ割当のための技術を提供することである。
【課題を解決するための手段】
【0005】
上記課題を解決するため、本発明の一特徴は、コンピュータにより実現される方法であって、第1ビデオコーデックフォーマットに関連する第1リードストリームと、前記第1ビデオコーデックフォーマットと異なる第2ビデオコーデックフォーマットに関連する第2リードストリームとの処理をサポートするよう共有バッファを構成するステップと、前記第1リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第1バッファライトアドレスを決定するステップと、前記第2リードストリームに関連するメモリリクエストに応答して前記共有バッファ内の前記第1バッファライトアドレスと異なる第2バッファライトアドレスを決定するステップとを有する方法に関する。
【0006】
本発明の他の特徴は、第1ビデオコーデックフォーマットに関連する第1リードストリームの処理をサポートするよう共有バッファを構成するステップと、前記第1リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第1バッファライトアドレスを決定するステップと、第2ビデオコーデックフォーマットに関連する第2リードストリームの処理をサポートするよう前記共有バッファを再構成するステップと、前記第2リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第2バッファライトアドレスを決定するステップとをプロセッサが実行する方法に関する。
【0007】
本発明の他の特徴は、プロセッサと、前記プロセッサに接続されるメモリとを有するシステムであって、前記プロセッサは、内部メモリを有し、前記メモリの命令は、第1ビデオコーデックフォーマットに関連する第1リードストリームの処理をサポートするよう前記内部メモリ内の共有バッファを構成し、前記第1リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第1バッファライトアドレスを決定し、第2ビデオコーデックフォーマットに関連する第2リードストリームの処理をサポートするよう前記共有バッファを再構成し、前記第2リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第2バッファライトアドレスを決定するよう前記プロセッサを設定するシステムに関する。
【発明の効果】
【0008】
本発明によると、効果的なマルチフォーマットビデオ処理のためのコンフィギュレーションバッファ割当のための技術を提供することができる。
【図面の簡単な説明】
【0009】
【図1】図1は、一例となるシステムを示す図である。
【図2】図2は、一例となる処理を示す。
【図3】図3は、一例となる共有バッファコンフィギュレーションを示す。
【図4】図4は、メモリリクエストに関する図1の一例となるシステムを示す。
【図5】図5は、メモリからのデータリターンに関する図1の一例となるシステムを示す。
【図6】図6は、データリードに関する図1の一例となるシステムを示す。
【図7】図7は、図2の一例となる処理の追加的な部分を示す。
【図8】図8は、追加的な一例となる共有バッファコンフィギュレーションを示す。
【図9】図9は、一例となるシステムを示す。
【図10】図10は、本開示の少なくともいくつかの実施例により構成される一例となるシステムを示す。
【発明を実施するための形態】
【0010】
添付した図面を参照して、1以上の実施例が開示される。特定のコンフィギュレーション及び構成が開示されるが、これは単なる例示のためにすぎないことが理解されるべきである。当業者は、本開示の趣旨及び範囲から逸脱することなく他のコンフィギュレーション及び構成が利用されてもよいことを当業者は認識するであろう。ここに開示される技術及び/又は構成はまたここに開示される以外の他の各種システム及びアプリケーションにおいて利用されてもよいことは、当業者に明らかであろう。
【0011】
以下の説明は、SoC(System−on−a−Chip)アーキテクチャなどのアーキテクチャに明らかにされるような各種実現形態を提供するが、ここに開示される技術及び/又は構成の実現形態は、特定のアーキテクチャ及び/又は計算システムに限定されず、同様の目的のため何れかのアーキテクチャ及び/又は計算システムにより実現されてもよい。例えば、複数の集積回路(IC)チップ及び/又はパッケージなどを利用した各種アーキテクチャ、及び/又はセットトップボックス、スマートフォンなどの各種計算装置及び/又は家電機器(CE)は、ここに開示された技術及び/又は構成を実現してもよい。さらに、以下の説明はロジック実現形態、システムコンポーネントのタイプ及び相関関係、ロジック分割/統合選択などの多数の特定の詳細を提供するが、請求される主題は、このような具体的詳細なしに実現されてもよい。他の例では、制御構造やフルソフトウェア命令シーケンスなどのいくつかの題材は、ここに開示される題材を不明瞭にしないように詳細には示されない。
【0012】
ここに開示される題材は、ハードウェア、ファームウェア、ソフトウェア又はこれらの何れかの組み合わせにより実現されてもよい。ここに開示される題材はまた、1以上のプロセッサにより読み及び実行されてもよいマシーン可読媒体に格納されている命令として実現されてもよい。マシーン可読媒体は、マシーン(計算装置など)により可読な形態で情報を格納又は送信するための何れかの媒体及び/又は機構を含むものであってもよい。例えば、マシーン可読媒体は、ROM(Read Only Memory)、RAM(Random Access Memory)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ装置、電子、光、音響若しくは他の形態の伝搬信号(搬送波、赤外線信号、デジタル信号など)を含むものであってもよい。
【0013】
“一実現形態”、“ある実現形態”、“一例となる実現形態”などの明細書の表現は、開示された実現形態が特定の特徴、構成又は特性を含むことを示すが、すべての実現形態が必ずしも当該特徴、構成又は特性を含む必要はないことを示す。さらに、このような表現は、同一の実現形態を必ずしも参照しているとは限らない。さらに、特定の特徴、構成又は特性が実現形態に関して開示されるが、ここに明示的に開示されるか否かに関係なく、他の実現形態に関して当該特徴、構成又は特性を実行することは当業者の知識の範囲内であることが主張される。
【0014】
図1は、本開示による一例となるシステム100を示す。一例となるシステム100などの本開示による装置及び/又はシステムは、異なるビデオコーデック処理ニーズを満たすため、メディアパイプラインにおけるプリフェッチバッファリソース割当を動的に変更してもよい。システム100は、ドライバレジスタ102、対応するマルチプレクサ104、制御レジスタ106、対応するマルチプレクサ108、ハードウェアリード/ライト(R/W)インタフェース110、加算ロジック112,114,イネーブルロジック116,118、共有バッファメモリ120、関連するマルチプレクサ122、及びメモリリクエスト遅延FIFO(First−In−First−Out)124を有する。R/Wインタフェース110は、システム100の外部のハードウェアから各種信号126を受信し、以下で詳細に説明されるように、システム100の各種コンポーネントにこれらの信号を提供する。さらに、システム100は、以下に詳細に説明されるように、システム100の外部のメモリ(図示せず)に接続されるメモリインタフェース(図示せず)との間で提供及び/又は受信される各種信号128を有してもよい。さらに、システム100は、以下に詳細に説明されるように、システム100の外部のハードウェアに提供される各種信号130を有してもよい。
【0015】
本開示によると、共有バッファ120は、ビデオデコーダリソース割当をサポートするため、ダイナミックベースにより複数のバッファ領域132に論理分割可能なプリフェッチバッファであってもよい。バッファ120の分割を指定するため、ドライバレジスタ102は、共有バッファ120内の各領域132のスタート位置を含むコンフィギュレーションデータを格納する。何れか特定のバッファ領域132のサイズ又は程度は、現在のバッファ領域から次のバッファ領域のスタート位置を差し引くことによって決定されてもよい。レジスタ102に格納されるコンフィギュレーションデータは、領域132のダイナミック再割当を提供するのに必要とされるように更新又は変更される。この結果、同様の相対サイズの7つの領域132を有するものとして図1に示されるが、領域132の個数及び/又は相対サイズは、以下に詳細に説明されるように、本開示により動的に設定される。
【0016】
各種実現形態では、低レベルオンチップキャッシュメモリの少なくとも一部は、共有バッファ120を実現する。例えば、共有バッファ120は、キャッシュメモリのトータルのメモリアドレス又は位置などに関して表現されるバッファ120の全体のサイズが、必要に応じて、またレジスタ102のコンテンツにより指定されるように動的に変更可能な低レベルキャッシュメモリの一部により提供されてもよい。一般に共有バッファ120は、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)、フラッシュメモリなどを含む何れかのタイプのメモリにより実現されてもよい。
【0017】
制御レジスタ106は、システム100の内部レジスタすべてを格納する。各種実施例では、制御レジスタ106は、各バッファ領域132のスタート位置に関するリード及びライトオフセットを保持する。リード及び/又はライトオフセットは、ゼロの値からスタートし、リードリクエスト又はライトリクエストに応答してインクリメントされてもよい。共有バッファ120は、循環的なストレージとして扱われてもよく、リード及び/又はライトオフセットは、それらが対応する領域132のエンドに到達すると、ゼロにラップバック(wrap back)する(図1に図示されないラップアラウンドロジックを用いて)。共有バッファ120は、ビデオ処理に用いられるメモリデータのためのメインプリフェッチストレージとして機能するようにしてもよい。FIFO124は、システム100の外部のメモリに発行されたリクエストを格納するのに利用されてもよい。
【0018】
本開示によると、ビデオデコーダアーキテクチャは、システム100などの単一の制御機構を用いて、共有バッファメモリとの間でビデオデータを読み及び/又は書き込む。さらに、ドライバレジスタ102を介しシステム100とインタフェースをとるソフトウェアドライバは、使用モデルに従ってバッファ120のサイズ及び/又は領域132の個数及びサイズを調整することが可能とされてもよい。さらに、共有バッファ120は、ストリーム毎の異なるメモリ遅延を補償するよう再構成されてもよい。
【0019】
本開示によると、ソフトウェアドライバは、バッファ領域132の個数及び/又はサイズを初期的にプログラムするのに利用されてもよい。共有バッファ120のプログラムされたコンフィギュレーションは、発行されたすべてのメモリリクエストが処理されるまで維持されてもよい。さらに、ハードウェアは、メモリリクエストを実行し、各バッファ領域132からデータを独立に読むことが可能とされてもよい。
【0020】
システム100の各種コンポーネントは、ソフトウェア、ファームウェア、ハードウェア及び/又はこれらの何れかの組み合わせにより実現されてもよい。例えば、システム100の各種コンポーネントは、少なくとも家電(CE)システムにあるようなコンピューティングSoC(System−on−a−Chip)のハードウェアにより提供されてもよい。例えば、非限定的な一例では、システム100は、セットトップボックスなどのCE装置により実現されてもよい。
【0021】
図2は、本開示の各種実現形態によるメモリリクエスト処理のための一例となる処理200のフロー図を示す。処理200は、図2のブロック202,204,206,208,210,212,214,216の1以上により示されるような1以上の処理、機能又はアクションを含む物であってもよい。非限定的な一例によると、処理200は、図1の一例となるシステム100を参照して説明される。処理200は、ブロック202から開始される。
【0022】
ブロック202において、共有バッファが設定される。各種実現形態では、例えば、共有バッファ120は、コンフィギュレーションデータが異なるデコーダ処理に関するドライバにより提供されるレジスタ102に保持されるコンフィギュレーションデータに応答して、バッファ120をバッファ領域132に論理分割することによって構成されてもよい。本開示によると、ブロック202は、マルチフォーマットビデオ処理を可能にするため、共有バッファを異なる領域に分割することを含む。
【0023】
図3は、ブロック202において6つのバッファ領域302〜312に構成される共有バッファ120の一例となる構成300を示す。上述されるように、共有バッファ120の全体のサイズは、ドライバレジスタ102に保持されるコンフィギュレーションデータにより指定されるような領域132の個数及びサイズに依存して動的に決定される。
【0024】
一例となる構成300では、レジスタ102に保持されるコンフィギュレーションデータは、バッファ領域が1つのビデオフォーマット又は規格に従ってビデオ処理に利用可能となるようにバッファ領域302,304,306のサイズを指定する一方、これらの領域が他のビデオフォーマット又は規格に従ってビデオ処理に利用されるようにバッファ領域308,310,312のサイズを指定する。例えば、一例となる構成300は、ローストア(rowstore)演算を実行するときにAVCデコーダによる利用のためにこれら別々のバッファ302,304,306を備える一方、構成300はまた、VC−1デコーダ処理による利用のためにローストアバッファ308、DMV(Differential Motion Vector)バッファ310及びビットプレーンバッファ312を備えるようにしてもよい。
【0025】
ここに開示される構成300は、異なる2つのビデオ処理規格に整合する処理により利用される異なるバッファ領域を備えるが、本開示による共有バッファは、何れかの個数のビデオ処理フォーマット又は規格により利用される何れかの個数及び/又は相対的なサイズのバッファ領域を備えるよう構成されてもよい。さらに、構成300ほぼ等しいサイズのバッファ領域302〜312を示すが、構成300は単なる一例であり、領域132の相対的なサイズ及び個数は各種実現形態では異なって構成されてもよいことを当業者は認識するであろう。例えば、ローストア処理中にAVCデコーダにより利用されるよう構成されるバッファ302,304,306はほぼ等しいサイズを有してもよいが、DMVバッファ310は、バッファ302,304又は306の何れかより大きく、ビットプレーンバッファ312は、バッファ302,304又は306の何れかより小さくてもよい。
【0026】
さらに、各種実現形態では、ブロック202は、1以上のビデオピクチャ又はフレームに対応するビットストリームデータを処理するため、又はビデオピクチャスライスなどのビデオフレームの一部のために共有バッファを構成することに関する。例えば、ブロック202は、外部メモリに格納されるビデオのフレームのスライスなどの少なくとも一部に対応するリードデータストリームを処理するために共有バッファ120を構成することに関し、後述されるように、処理200がフレームデータの異なる部分をバッファ120に書き込むための外部メモリへのアクセスを要求する連続的なインスタンスに関する。ブロック204において、第1リードストリームに対するメモリリクエストが受信される。
【0027】
図4は、本開示の各種実現形態によりブロック204のメモリリクエスト処理に関する一例となるシステム100を示す。図4に示されるように、R/Wインタフェース110は、メモリからピクセル値などのデータを読むため、外部メモリへのアクセスを求めるメモリリクエスト400を受信する。例えば、AVCデコーダは、ブロック202においてメモリリクエストを提供し、メモリリクエスト400は、外部メモリからピクセルデータを読むことを求めるリードストリーム処理の一部であってもよい。例えば、ブロック204は、AVCデコーダ処理により実行されるローストア処理中に実行されてもよい。ここで用いられるピクセルデータとは、限定することなく、マクロブロック、ブロック及び/又はサブブロックデータ値(ピクセルYUV値など)、動きベクトルデータ値(X及びYオフセットなど)、イントラブロック及び/又はインターブロックデータ値(量子化されたAC及び/又は量子化されたDC係数など)など、ビデオデコーダ処理に用いられる何れかの形態のデータを表す。
【0028】
図1及び4に示されるような一例となるシステム100を再び参照して、ブロック204において受信されるメモリリクエスト400は、Memory Request(Mem_Req)、Memory Buffer Identification(Mem_Buffer_ID)、及びMemory Address(Mem_Addr)の各信号を含む。インタフェース110は、Mem_Req信号をFIFO124とイネーブルロジック116との双方に提供する。Mem_Addr信号は、メモリリクエストが送付先である外部メモリのアドレスを指定し、FIFO124に提供される。Mem_Buffer_ID信号は、メモリリクエストに応答して何れのバッファ領域132が使用されるべきか指定し、ドライバレジスタ102及び制御レジスタ106のそれぞれに関連するマルチプレクサ104,108にR/Wインタフェース110によって提供される。各種実現形態では、ブロック204においてメモリリクエスト400を発行したハードウェアはまず、信号130の1つとして提供されるRead_Done信号を確認する。
【0029】
ブロック206において、バッファライトアドレスが決定される。図4に示されるように、ブロック204においてマルチプレクサ104,108に提供されるMem_Buffer_ID信号は、各自のレジスタ102,106に格納されるデータと共に、Write Buffer Offset(WBO)信号とBuffer Base Address(BBA)信号とを選択するのに利用される。WBO及びBBA信号は、Storage Write Address(SWA)信号を構成するためWBO及びBBA信号を論理合成する加算ロジック112に提供される。SWA信号とMem_Req信号との双方に応答して、イネーブルロジック116は、共有バッファ120にライトイネーブル(WE)信号を提供する。
【0030】
WE信号は、ブロック204において受信したメモリリクエストにより求められるピクセルデータを一時的に格納するため指定されたバッファ120の特定の領域132内の位置又はアドレスを指定する。例えば、デコーダがブロック204においてリードリクエストの第1インスタンスを実行するとき、SWA信号は、領域132内の開始又はスタートアドレスを示す。従って、WBO信号は、ゼロ(0)の初期値を有してもよい。例えば、図3を参照して、AVCデコーダは、メモリリクエストのターゲットバッファとしてローストアバッファ302などを指定するMem_Buffer_IDと共に、ブロック204においてリードリクエストを提供するようにしてもよい。SWA信号は、バッファ302の正確な位置がWBO信号の値に依存するローストアバッファ302内の位置又はアドレスを指定する。
【0031】
WE信号の受信に応答して、共有バッファ120は、システム100がメモリリクエストwp受信し、応答を開始したことを示すWRP(Write Request in Progress)信号をアサートする。さらに、ブロック204においてメモリリクエストを受信することに応答して、システム100は、後述されるように、データがメモリから返されるとき、SWA信号により示される領域132内のライト位置又はアドレスを決定するのに利用可能なMem_Tag信号を構成するため、WBO及びBBA信号を合成する。Mem_Tag,Mem_Req及びMem_Addrの各信号は、FIFO124に格納され、以降にメモリインタフェースに提供される。ブロック208において、第1リードストリームのピクセルデータは、共有バッファに書き込まれてもよい。
【0032】
図5は、本開示の各種実現形態によるブロック208におけるデータリターン処理に関してシステム100を示す。図2及び5を参照して、各種実現形態では、ブロック208は、外部メモリがMem_Addr信号を用いて読み込み対象のピクセルデータを決定することに関する。例えば、Mem_Addr信号は、外部メモリに格納されるピクセル値のローを示す。
【0033】
外部メモリは、その後にシステム100のメモリインタフェースを介し、Mem_Data信号としてピクセルデータを共有バッファ120に提供する。外部メモリにより提供されるMem_Tag信号のBBA及びWBOコンポーネントが、イネーブルロジック116にSWA信号を提供するため、ロジック112により加えられる。ロジック116は、その後に、Memory Request Return(Mem_Req_Return)に応答して、SWA信号により示される部分132内の特定のアドレスにピクセルデータ(Mem_Data信号などに対応する)をバッファ120に格納させるWE信号をバッファ120に提供する。上述した例に続いて、SWA信号はローストアバッファ302内のアドレスを指定する場合、ブロック208は、AVCデコーダ処理によるローストア処理中にピクセルデータを当該位置に格納する。例えば、ピクセルデータのローは、SWA信号により指定される位置から始まって格納される。
【0034】
ピクセルデータが共有バッファに書き込まれると、システム100は、要求されたピクセルデータがバッファ120から読み出されるのに利用可能であることをハードウェアに示すData Available(Data_Avail)信号をアサートする。さらに、ブロック208においてリードデータを書き込むとき、システム100はまた、以降のメモリリクエストがバッファ120の特定の領域132内の次の位置にデータを書き込むように、WBO値をインクリメントする。処理200は、ブロック210において共有バッファから第1リードストリームピクセルデータを読み続ける。
【0035】
図6は、本開示の各種実現形態によるブロック210におけるリードリクエスト処理に関する一例となるシステム100を示す。図6に示されるように、ブロック210は、ブロック208の結果として共有バッファに格納されているピクセルデータにアクセスするため、R/Wインタフェース110がリードリクエスト600を受信することを含む。例えば、AVC復号化処理は、ローストア処理の実行中にブロック210においてリードリクエスト600を提供する。
【0036】
リードリクエスト600は、Read Buffer Identification(Read_Buffer_ID)信号、Read Request(Read_Req)信号及びRead_Buffer_Evict信号を含む。Read_Buffer_ID信号は、対応するBBA信号を提供するためマルチプレクサ104と、Read Buffer Offset(RBO)信号を提供するためマルチプレクサ108に提供される。ロジック114は、その後にブロック210において読み出されるピクセルデータを格納するバッファ120の特定の領域132内の特定の位置を示すStorage Read Address(SRA)信号を生成するため、RBO信号をBBA信号に加える。上述した例に続いて、SRA信号が、ブロック208においてピクセルデータが書き込まれたローストアバッファ302内のアドレスを指定する場合、ブロック210において、当該ピクセルデータがAVCデコーダによるローストア処理中に当該位置から読まれる。例えば、ブロック210は、ピクセル値のローが共有バッファ120から読まれることに関する。
【0037】
いくつかの実現形態では、ブロック210は、ハードウェアがSRA信号により示される位置の状態を確認できるように、Read_Req信号を設定している間にはRead_Buffer_Evict信号を設定しないことに関する。その実行中に、ハードウェアが、当該位置においてデータが読み出しに利用可能であることを示すRead_Data信号が設定されていることを検出する場合、ハードウェアは、Read_Data信号にアクセスすることによって、共有バッファ120からデータを読むため、Read_Req信号とRead_Buffer_Evictとの双方を設定することによって、ブロック210の実現を継続してもよい。
【0038】
イネーブルロジック118は、Read Enable(RE)信号をバッファ120に提供することによって、SRA信号、Read_Req信号及びRead_Buffer_Evict信号に応答する。RE信号に関連して、SRAはマルチプレクサ122に提供され、格納されているデータはRead_Data信号として現れる。さらに、ブロック210においてリードデータを提供するとき、システム100は、データがさらに利用されないことを示すRead_Done信号を設定し、以降のリードリクエストがバッファ120の特定の領域132内の次の位置にあるように、レジスタ106に格納されているRBO値をインクリメントしてもよい。
【0039】
図2に戻って、処理200は、ブロック212に続き、第1リードストリームの処理が続けられるべきか判断される。例えば、各種実現形態では、ビデオデコーダは、リードストリーム処理のためピクセルデータを取得する初期的な処理として、ブロック204〜210の最初の繰り返しを実行する。ビデオデコーダは、その後に、リードストリーム処理のピクセルデータの追加的な部分を取得するため、ブロック204〜210の1以上のさらなる繰り返しを実行する。従って、ブロック212において、第1リードストリームのさらなる処理が続けられるべきであると判断された場合、デコーダは、ブロック204〜212のもう1回の繰り返しを実行する前に、ブロック214においてメモリアドレスを修正するよう動作する(例えば、Mem_Addr信号値をインクリメントすることによって)。各種実現形態では、ビデオデコーダの処理は、ブロック212の最後のインスタンスにおいて、第1リードストリームの処理が終了したとデコーダが判断するまで、ブロック204〜214のロープ処理を継続する。例えば、処理200を実行するAVCデコーダは、ブロック212の最後のインスタンスにおいて、例えば、第1リードストリームの処理に対応するローストア処理が外部メモリから所望量のピクセルデータを取得したとき、第1リードストリームの処理が終了したと判断してもよい。他方、ブロック212において、第1リードストリームの処理が継続されるべきでないと判断された場合、処理200は、さらなる処理、機能又はアクションによりブロック216において続けられる。
【0040】
図7は、本開示の各種実現形態により示されるメモリリクエスト処理のための一例となる処理200のさらなる部分を示す。処理200は、ブロック218,220,222,224,226,228,230,232の1以上により示されるような1以上のさらなる処理、機能又はアクションを含む。非限定的な例により、図7に示されるような処理200は、図1の一例となるシステム100を参照して再び開示される。処理200は、ブロック218において続けられる。
【0041】
ブロック218において、共有バッファが再構成されるべきか判断される。各種実現形態では、ブロック218は、共有バッファ120が他のビデオ処理リードストリームなどの新たな又は第2のリードストリームの処理を実行するよう再構成される必要があるか判断することに関する。例えば、AVCデコーダにより生成されるリードストリームなどの第1ビデオフォーマット又は規格に準拠する第1リードストリームのリードストリーム処理が、図2のブロック204〜214において実行される間、ブロック218は、VC−1デコーダなどにより実行可能な他のビデオフォーマット又は規格に関する第2リードストリームの処理を実行するため共有バッファ120が再構成される必要があるか判断することに関する。
【0042】
ブロック218において、共有バッファが再構成されるべきでないと判断された場合、処理200は、第2リードストリームに対するメモリリクエストの受信(ブロック222)、当該メモリリクエストのバッファライトアドレスの決定(ブロック224)、当該第2リードストリームのピクセルデータの共有バッファへの書き込み(ブロック226)、及びブロック228における共有バッファからの当該ピクセルデータの読み込みに続く。ブロック222,224,226,228はそれぞれ、図2のブロック204,206,208,210について上述したのと同様に実行される。
【0043】
各種実現形態では、図7のブロック222〜228において第2リードストリームの処理を可能にする方法により共有バッファがブロック202(図2)において構成されたとき、再構成がブロック218において実行されるべきでないと判断される。例えば、図3の一例となる構成300を参照すると、第2リードストリームがVC−1デコーダのリードストリームである場合、ブロック202におけるVC−1デコーダの処理に適するよう構成された領域308,310,312を含む共有バッファ120は、再構成することなく図7のブロック222〜228において第2リードストリームの処理を実行するのに適するよう構成される。
【0044】
他方、ブロック218において再構成が実行されるべきであると判断された場合、処理200は、共有バッファを再構成することによってブロック220に続く。例えば、ブロック218において、共有バッファ120が第2リードストリームの処理を実現する方法により構成されていないと判断される可能性がある。各種実現形態では、ブロック220は、1以上のビデオデコーダの処理に関するソフトウェアドライバによってコンフィギュレーションデータがレジスタ102に配置されることに応答して実行される。例えば、第2リードストリームの処理を実行するVC−1デコーダの処理に関するソフトウェアドライバは、コンフィギュレーションデータをレジスタ102に提供する。その後、システム100は、第2リードストリームに関するコンフィギュレーションデータを利用して、共有バッファ120を再構成する。例えば、共有バッファ120は、図2のブロック204〜214において処理されたビデオビットストリームのフォーマットと異なるフォーマットに従って符号化されたビデオビットストリームを復号化するためシステム100が呼び出されることに応答して、ブロック220において動的に再構成されてもよい。
【0045】
図8は、図2のブロック202において実行された共有バッファ120の一例となる初期的な構成800と、図7のブロック220において実行される共有バッファ120の一例となる再構成810とを示す。図8の例では、ブロック202(図2)において、共有バッファ120は、ローストア処理を実現するAVCデコーダに準拠するよう構成される3つの同様のサイズのローストアバッファ802,804,806を有するよう構成されてもよい。この非限定的な例では、バッファ802,804,806を備えるよう構成されるとき、共有バッファ120がブロック202において具体的にフォーマット化又は設定されなかったさらなる領域を含むように、共有バッファ120は所定の全体サイズを有する。
【0046】
図8の例では、ブロック220は、もはやバッファ802,804,806を含まず、対応するリードストリーム処理を実現するVC−1デコーダに適したローストアバッファ812、DMVバッファ814及びビットプレーンバッファ816に適した領域に対応する新たに構成された領域を含むよう共有バッファ120を動的に再構成することに関する。ブロック220における再構成後、具体的にフォーマット化されなかった領域808が以前として存在するが、新たに構成されたバッファ812,814,816のサイズに依存して構成800にあるものと異なるサイズを有してもよい。
【0047】
図7に戻って、ブロック220における再構成後、処理200は、第2リードストリームに対するメモリリクエストの受信(ブロック222)、当該メモリリクエストのバッファライトアドレスの決定(ブロック224)、第2リードストリームのピクセルデータの共有バッファへの書き込み(ブロック226)、及びブロック228における共有バッファからピクセルデータの読み出しに続く。ブロック222,224,226,228はそれぞれ、図2のブロック204,206,208,210について上述したのと同様の方法により実行されてもよい。
【0048】
処理200は、ブロック230に続き、第2リードストリームの処理が継続されるべきか決定される。例えば、各種実現形態では、ビデオデコーダは、リードストリーム処理のピクセルデータを取得する最初の部分としてブロック222〜228の最初の繰り返しを実行した。その後、ビデオデコーダは、リードストリームの処理のためピクセルデータのさらなる部分を取得するために、ブロック222〜228の1以上のさらなる繰り返しを実行する。従って、ブロック230において、第1リードストリームの処理が継続されるべきであるとデコーダが判断した場合、デコーダは、ブロック222〜230のもう1回の繰り返しを実行する前に、ブロック232においてメモリアドレスを修正するよう動作する(例えば、Mem_Addr信号値をインクリメントすることによって)。各種実現形態では、ビデオデコーダの処理は、ブロック230の最後のインスタンスにおいて、第2リードストリームの処理が終了したとデコーダが判断するまで、ブロック222〜232のループを継続する。例えば、図7に示されるような処理200を実行するVC−1デコーダは、ブロック230の最後のインスタンスにおいて、第2リードストリームの処理が継続されるべきでなく、処理200が終了されるべきであると判断する。
【0049】
図2及び7に示されるように、一例となる処理300の実現は図示された順序によりブロック202〜232のすべてを実行することを含むが、請求される主題はこれに限定されず、各種具体例では、処理200の実現は、図示された以外の順序により及び/又はブロック202〜232の一部のみを実行することを含むものであってもよい。
【0050】
図2及び7の処理及び/又はブロックの何れか1以上は、1以上のコンピュータプログラムにより提供される命令に応答して実行されてもよい。このようなプログラムは、例えば、1以上のプロセッサコアにより実行されると、図1〜8に関して上述された機能を提供する命令を提供する媒体を担持する信号を含むものであってもよい。コンピュータプログラムは、何れかの形態のコンピュータ可読記憶媒体により提供されてもよい。例えば、1以上のプロセッサコアを含むプロセッサは、コンピュータ可読記憶媒体によりプロセッサに搬送される命令に応答して、図2及び7に示されるブロックの1以上を実行してもよい。
【0051】
図9は、本開示による一例となるシステム900を示す。システム900は、ここに開示される各種機能の一部又はすべてを実行するのに利用され、本開示の各種実現形態に従ってマルチフォーマットビデオ処理のための設定可能なバッファ割当てを提供可能な何れかの装置又は装置群を含むものであってもよい。システム900は、VLSI(Very Large Scale Integration) SoC IC(Integrated Circuit)902と、IC902に通信及び/又は動作接続する外部メモリ904とを有する。IC902は、1以上のプロセッサコア(図示せず)を有し、限定することなく、CISC(Complex Instruction Set Computer)、RISC(Reduced Instruction Set Computing)マイクロプロセッサコア、VLIW(Very Long Instruction Word)マイクロプロセッサコア、何れかの命令セットの組み合わせを実現する1以上のプロセッサコア、又はデジタル信号プロセッサ若しくはマイクロコントローラなどの他の何れかのプロセッサ装置など、1以上のプロセッサコアを含む何れかのタイプのプロセッサベースシステムであってもよい。例えば、IC902は、複数のプロセッサコアを有し、モバイルコンピューティング装置(スマートフォン、タブレットコンピュータなど)などの家電(CE)装置により実現されてもよい。メモリ904は、限定することなく、DRAMメモリ、SRAMメモリ、フラッシュメモリなどを含む何れかのタイプのメモリであってもよい。
【0052】
IC902は、キャッシュメモリなどの内部メモリ906を有し、ここに開示される各種構成、処理、機能及び/又はアクションを備える及び/又は実行するよう構成されるロジックを有するビデオハードウェアアクセラレーションエンジン(HAE)908を備える及び/又はサポートするものであってもよい。ビデオHAE908は、ここに開示されるような動的に構成可能な共有バッファ910と共にこれを実行する。上述され、図9に示されるように、バッファ910は、内部メモリ906の少なくとも一部から構成されてもよい。各種実現形態では、図1のシステム100は、少なくとも部分的にビデオHAE908及び共有バッファ910により提供される。さらに、共有バッファ910と共にビデオHAE908は、IC902に提供されるビデオデータの異なってフォーマット化されたストリームA及びBに応答して、ここに開示される図2及び7のブロックの何れかを実行するようにしてもよい。ビデオHAE908は、コーデックモードの処理及び/又はあるタイプのビデオストリームが現在処理されていることに応答して、プリフェッチバッファサイズを調整してもよい。
【0053】
図10は、本開示による一例となるシステム1000を示す。システム1000は、ここに開示される各種機能の一部又はすべてを実行するのに利用され、本開示の各種実現形態によるマルチフォーマットビデオ処理のための設定可能なバッファ割当てを実行可能な何れかの装置又は装置群を含む。例えば、システム1000は、本開示がこれに限定されるものでないが、デスクトップ、モバイル若しくはタブレットコンピュータ、スマートフォン、セットトップボックスなどの計算プラットフォーム又は装置の選択されたコンポーネントを有してもよい。いくつかの実現形態では、システム1000は、CE装置のためのIntel(登録商標)アーキテクチャ(IA)に基づき計算プラットフォーム又はSoCであってもよい。ここに開示される実現形態は本開示の範囲から逸脱することなく他の処理システムと共に利用可能であることは、当業者に容易に理解されるであろう。
【0054】
システム1000は、1以上のプロセッサコア1004を有するプロセッサ1002を有する。プロセッサコア1004は、少なくとも部分的にソフトウェアを実行し、及び/又はデータ信号を処理可能な何れかのタイプのプロセッサロジックであってもよい。各種具体例では、プロセッサコア1004は、CISCプロセッサコア、RISCマイクロプロセッサコア、VLIWマイクロプロセッサコア及び/又は何れかの命令セットの組み合わせを実現する任意数のプロセッサコア又はデジタル信号プロセッサやマイクロコントローラなどの他の何れかのプロセッサ装置を有してもよい。
【0055】
プロセッサ1002はまた、ディスプレイプロセッサ1008及び/又はグラフィックプロセッサ1010などにより受信される命令を制御信号及び/又はマイクロコードエントリポイントに復号化するのに利用可能なデコーダ1006を有する。コア1004と別々のコンポーネントとしてシステム1000に示されるが、当業者は、1以上のコア1004がデコーダ1006、ディスプレイプロセッサ1008及び/又はグラフィックプロセッサ1010を実現可能であることを理解するであろう。いくつかの実現形態では、デコーダ1006は、図1〜9に関して説明される一例となる処理を含む、ここに開示される処理の何れかを実行するよう構成されるビデオデコーダであってもよい。さらに、制御信号及び/又はマイクロコードエントリポイントに応答して、ディスプレイプロセッサ1008及び/又はグラフィックプロセッサ1010は、対応する処理を実行する。
【0056】
プロセッサコア1004、デコーダ1006、ディスプレイプロセッサ1008及び/又はグラフィックプロセッサ1010は、限定することなく、例えば、メモリコントローラ1014、オーディオコントローラ1018及び/又は周辺装置1020を含む他の各種システム装置と、及び/又は互いにシステムインターコネクト1016を介し通信及び/又は動作接続される。周辺装置1020は、例えば、USB(Unified Serial Bus)ホストポート、PCI(Peripheral Component Interconnect)Expressポート、SPI(Serial Peripheral Interface)インタフェース、拡張バス及び/又は他の周辺装置などを含む。図10はインターコネクト1016によりデコーダ1006及びプロセッサ1008,1010に接続されるものとしてメモリコントローラ1016を示しているが、各種実現形態では、メモリコントローラ1014は、デコーダ1006、ディスプレイプロセッサ1008及び/又はグラフィックプロセッサ1010に直接接続されてもよい。
【0057】
いくつかの実現形態では、システム1000は、I/Oバス(図示せず)を介し図10に図示されない各種I/O装置と通信する。このようなI/O装置は、限定することなく、例えば、UART(Universal Asynchronous Receiver/Transmitter)装置、USB装置、I/O拡張インタフェース又は他のI/O装置を含む。各種実現形態では、システム1000は、モバイル、ネットワーク及び/又は無線通信を実行するためのシステムの少なくとも一部を表す。
【0058】
システム1000はさらに、メモリ1012を有する。メモリ1012は、DRAM装置、SRAM装置、フラッシュメモリ装置、又は他のメモリ装置などの1以上のメモリコンポーネントであってもよい。図10は、プロセッサ1002の外部のものとしてメモリ1012を示しているが、各種実現形態では、メモリ1012はプロセッサ1002の内部にあってもよい。メモリ1012は、プロセッサ1002により実行可能なデータ信号により表される命令及び/又はデータを格納する。いくつかの実現形態では、メモリ1012は、システムメモリ部とディスプレイメモリ部とを含むものであってもよい。
【0059】
上述されたシステムと、それにより実行されるここに開示された処理とは、ハードウェア、ファームウェア、ソフトウェア又はこれらの何れかの組み合わせにより実現されてもよい。さらに、ここに開示される1以上の特徴は、個別及び一体化された回路ロジック、ASIC(Application Specific Integrated Circuit)ロジック及びマイクロコントローラを含む、ハードウェア、ソフトウェア、ファームウェア及びこれらの組み合わせにより実現されてもよく、ドメイン固有のICパッケージ又はICパッケージの組み合わせの一部として実現されてもよい。ここに用いられるソフトウェアという用語は、コンピュータシステムにここに開示される1以上の機能及び/又はその組み合わせを実行させるよう格納されたコンピュータプログラムロジックを有するコンピュータ可読媒体を含むコンピュータプログラムを表す。
【0060】
ここに提供される特徴が各種実現形態を参照して説明されたが、本開示は限定的な意味で解釈されるべきでない。ここに開示される実現形態の各種変更は、本開示が属する当業者に明らかな他の実現形態と共に、本開示の趣旨及び範囲内にあるとみなされる。
【符号の説明】
【0061】
1000 システム
1002 プロセッサ
1012 メモリ

【特許請求の範囲】
【請求項1】
コンピュータにより実現される方法であって、
第1ビデオコーデックフォーマットに関連する第1リードストリームと、前記第1ビデオコーデックフォーマットと異なる第2ビデオコーデックフォーマットに関連する第2リードストリームとの処理をサポートするよう共有バッファを構成するステップと、
前記第1リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第1バッファライトアドレスを決定するステップと、
前記第2リードストリームに関連するメモリリクエストに応答して前記共有バッファ内の前記第1バッファライトアドレスと異なる第2バッファライトアドレスを決定するステップと、
を有する方法。
【請求項2】
前記第1バッファライトアドレスにピクセルデータを書き込むステップと、
前記共有バッファから前記ピクセルデータを読むステップと、
をさらに有する、請求項1記載の方法。
【請求項3】
前記第2バッファライトアドレスに第2ピクセルデータを書き込むステップと、
前記共有バッファから前記第2ピクセルデータを読むステップと、
をさらに有する、請求項2記載の方法。
【請求項4】
前記共有バッファは、プリフェッチバッファを有する、請求項1記載の方法。
【請求項5】
前記共有バッファは、キャッシュメモリを有する、請求項1記載の方法。
【請求項6】
前記共有バッファを構成するステップは、コンフィギュレーションデータに応答して前記共有バッファを構成することを有し、
前記コンフィギュレーションデータは、前記第1リードストリームに関連する第1ソフトウェアドライバと、前記第2リードストリームに関連する第2ソフトウェアドライバとにより提供されたものである、請求項1記載の方法。
【請求項7】
前記コンフィギュレーションデータは、前記第1バッファライトアドレスと前記第2バッファライトアドレストとを指定する、請求項6記載の方法。
【請求項8】
第1ビデオコーデックフォーマットに関連する第1リードストリームの処理をサポートするよう共有バッファを構成するステップと、
前記第1リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第1バッファライトアドレスを決定するステップと、
第2ビデオコーデックフォーマットに関連する第2リードストリームの処理をサポートするよう前記共有バッファを再構成するステップと、
前記第2リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第2バッファライトアドレスを決定するステップと、
をプロセッサが実行する方法。
【請求項9】
前記共有バッファを再構成するステップの前に、
前記第1バッファライトアドレスにピクセルデータを書き込むステップと、
前記共有バッファから前記ピクセルデータを読むステップと、
をさらに有する、請求項8記載の方法。
【請求項10】
前記共有バッファを再構成するステップの後に、
前記第2バッファライトアドレスに第2ピクセルデータを書き込むステップと、
前記共有バッファから前記第2ピクセルデータを読むステップと、
をさらに有する、請求項9記載の方法。
【請求項11】
前記共有バッファは、プリフェッチバッファを有する、請求項8記載の方法。
【請求項12】
前記共有バッファは、キャッシュメモリを有する、請求項8記載の方法。
【請求項13】
前記共有バッファを構成するステップは、前記第1リードストリームに関連するソフトウェアドライバにより提供される第1コンフィギュレーションデータに応答して、前記共有バッファを構成することを有し、
前記共有バッファを再構成するステップは、前記第2リードストリームに関連するソフトウェアドライバにより提供される第2コンフィギュレーションデータに応答して、前記共有バッファを構成することを有する、請求項8記載の方法。
【請求項14】
前記第1コンフィギュレーションデータは、前記第1バッファライトアドレスを指定し、
前記第2コンフィギュレーションデータは、前記第2バッファライトアドレスを指定する、請求項13記載の方法。
【請求項15】
プロセッサと、
前記プロセッサに接続されるメモリと、
を有するシステムであって、
前記プロセッサは、内部メモリを有し、
前記メモリの命令は、
第1ビデオコーデックフォーマットに関連する第1リードストリームの処理をサポートするよう前記内部メモリ内の共有バッファを構成し、
前記第1リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第1バッファライトアドレスを決定し、
第2ビデオコーデックフォーマットに関連する第2リードストリームの処理をサポートするよう前記共有バッファを再構成し、
前記第2リードストリームに関連するメモリリクエストに応答して、前記共有バッファ内の第2バッファライトアドレスを決定する、
よう前記プロセッサを設定するシステム。
【請求項16】
ICに接続される外部メモリをさらに有し、
前記外部メモリは、第1ピクセルデータと第2ピクセルデータとを格納し、
前記第1ピクセルデータは前記第1リードストリームであり、前記第2ピクセルデータは前記第2リードストリームに関連する、請求項15記載のシステム。
【請求項17】
ロジックはさらに、
前記第1バッファライトアドレスに前記第1ピクセルデータを書き込み、
前記第2バッファライトアドレスに前記第2ピクセルデータを書き込む、
よう構成される、請求項16記載のシステム。
【請求項18】
前記ICはさらに、前記第1リードストリームに関連する第1コンフィギュレーションデータを格納し、前記第2リードストリームに関連する第2コンフィギュレーションデータを格納するための1以上のレジスタを有する、請求項15記載のシステム。
【請求項19】
前記ロジックはさらに、
前記第1コンフィギュレーションデータに応答して、前記共有バッファを構成し、
前記第2コンフィギュレーションデータに応答して、前記共有バッファを再構成する、
よう構成される、請求項18記載のシステム。
【請求項20】
前記共有バッファは、プリフェッチバッファを有する、請求項15記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate