情報処理装置および方法
【課題】デコード処理全体の時間を短縮することができるようにする。
【解決手段】デコード(1)の要求コマンドが送信されたと判定されると、デバイスドライバにデコード(1)用データが通知される。デバイスドライバは、デコード(1)用SGLを作成するとともに、デコード(1)用のコモンバッファ構造体を作成し、作成したデコード(1)用のコモンバッファ構造体をキュー71に積む。デコード(1)用データの転送完了通知を復号ハードウエアから受け取ると、デバイスドライバは、デコード(1)用のコモンバッファ構造体をキュー71からプッシュする。本発明は、パーソナルコンピュータが、デコード用データを、PCIeスロットで接続される復号ハードウエアに供給してデコード処理させる情報処理システムに適用することができる。
【解決手段】デコード(1)の要求コマンドが送信されたと判定されると、デバイスドライバにデコード(1)用データが通知される。デバイスドライバは、デコード(1)用SGLを作成するとともに、デコード(1)用のコモンバッファ構造体を作成し、作成したデコード(1)用のコモンバッファ構造体をキュー71に積む。デコード(1)用データの転送完了通知を復号ハードウエアから受け取ると、デバイスドライバは、デコード(1)用のコモンバッファ構造体をキュー71からプッシュする。本発明は、パーソナルコンピュータが、デコード用データを、PCIeスロットで接続される復号ハードウエアに供給してデコード処理させる情報処理システムに適用することができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置および方法に関し、特に、デコード処理全体の時間を短縮することができるようにした情報処理装置および方法に関する。
【背景技術】
【0002】
従来、MPEG(Moving Picture Experts Group)と呼ばれる符号化方式により動画像を符号化して得られた符号化ストリームを復号する復号装置がある。規格化されてきたMPEGシリーズの中ではMPEG2が一般的ではあるが、最近では圧縮率を高めたMPEG4や、AVC(Advanced Video Coding)といった圧縮符号化方式も規格化されている。
【0003】
このような符号化ストリームを復号する場合、例えば、マイクロコンピュータなど一般的なCPUを用いる方法がある(特許文献1参照)。
【0004】
これに対して、パーソナルコンピュータにおいて符号化ストリームを復号する場合、例えば拡張ボード等によってパーソナルコンピュータに増設された、ハードウエアで構成される復号器(デコードハードウェア)を用いて復号する方法がある。
【0005】
この方法においては、パーソナルコンピュータは、符号化ストリームを復号する必要が生じたときに、その符号化ストリームを復号器に供給する。復号器は、パーソナルコンピュータから符号化ストリームを取得するとそれを復号し、ベースバンドのデータをパーソナルコンピュータに返す。
【0006】
以上のように、この方法の場合、パーソナルコンピュータと復号器の間でデータやコマンドの転送を行う必要がある。
【0007】
図1を参照して、パーソナルコンピュータと復号器とのデータ転送の第1の方法について説明する。なお、図1の例においては、2つのデコード処理が連続で行われる例が示されている。
【0008】
図1の上段には、パーソナルコンピュータ上で動作するアプリケーションの処理が示されている。中段には、パーソナルコンピュータ上のデバイスドライバと復号器間のデータ転送処理が示されている。下段には、復号器の処理が示されている。以下、図面の丸数字は、括弧付き数字で置き換えて説明する。
【0009】
まず、アプリケーション上でデコード(1)要求コマンドが発行されると、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(1)用データの管理処理が行われ、復号器に対して、デコード(1)用データ転送が行われる。
【0010】
デコード(1)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(1)用データ転送完了通知が行われ、復号器においてデコード(1)処理が開始される。
【0011】
復号器でのデコード(1)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(1)用結果データ転送が行われる。アプリケーション上では、そのデコード(1)用結果データが取得された後で、次のデコード(2)要求コマンドが発行される。
【0012】
その後、デコード(1)の処理と同様に、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(2)用データの管理処理が行われ、復号器に対してデコード(2)用データ転送が行われる。
【0013】
デコード(2)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(2)用データ転送完了通知が行われ、復号器において、デコード(2)処理が開始される。
【0014】
復号器でのデコード(2)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(2)用結果データ転送が行われる。
【0015】
このように、第1の方法においては、復号器によるデコードの完了を待ってから、次のデコード要求が行われる。このため、第1の方法においては、データ転送処理における、デコード(1)用データ転送完了通知を行ってから、次のデコード(2)用データの管理処理を行うまでの時間T1に、タイムラグが生じていた。
【0016】
この結果、復号器においては、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの時間T2に示されるように、高速で動作するデコード処理を実行する時間間隔が大幅に開いてしまい、全体的なデコード処理時間の短縮を行うことが困難であった。
【0017】
次に、図2を参照して、パーソナルコンピュータと復号器とのデータ転送の第2の方法について説明する。なお、図2の例においても、図1の例と同様に、2つのデコード処理が連続で行われる例が示されている。
【0018】
まず、アプリケーション上でデコード(1)要求コマンドが発行されると、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(1)用データの管理処理が行われ、復号器に対して、デコード(1)用データ転送が行われる。
【0019】
このとき、アプリケーション上においては、アプリケーション上に設けられたデコード要求コマンドを複数回実行可能にする機構(コマンドキューイング)により、次のデコード(2)要求コマンドがキューイングされる。
【0020】
デコード(1)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(1)用データ転送完了通知が行われ、復号器においてデコード(1)処理が開始される。
【0021】
また、アプリケーションに対するデコード(1)用データ転送完了通知も行われ、アプリケーション上においては、キューイングされていた次のデコード(2)要求コマンドが、デコード(2)用結果データの取得を待たずに発行される。
【0022】
これに対応して、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(2)用データの管理処理が行われる。
【0023】
一方、復号器でのデコード(1)処理が完了すると、データ転送処理として、パーソナルコンピュータに対してデコード(1)用結果データ転送が行われ、アプリケーション上では、デコード(1)用結果データが取得される。
【0024】
デコード(1)用結果データ転送後、デコード(2)用データの管理処理が終了すると、すぐに、復号器に対して、デコード(2)用データ転送が行われる。
【0025】
デコード(2)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(2)用データ転送完了通知が行われ、復号器においてデコード(2)処理が開始される。復号器でのデコード(2)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(2)用結果データ転送が行われる。
【0026】
このように、第2の方法においては、アプリケーションによるデコードコマンドキューイングなどが用いられる。これにより、デコード(1)用結果データ転送の間に、次のデコード(2)要求コマンドによるデコード(2)用データ完了処理を行い、その後、すぐに、デコード(2)用データ転送を開始することが可能になる。しかしながら、先のデコード(1)処理の間には、次のデコード(2)用データ転送を行うことは困難であった。
【0027】
この結果、第2の方法の復号器においても、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの時間T3に示されるように、デコード処理を実行する時間間隔が大幅に開いてしまい、全体的なデコード処理時間の短縮が難しかった。
【0028】
さらに、パーソナルコンピュータと復号器とのデータ転送の第3の方法を説明する。復号器上に搭載されるDMAC(Direct Memory Access Controller)は、1つのデータ転送方向(DMA ChannelまたはDMA Adapterと称する)に対し、RxとTxといった個別の制御レジスタを有している。
【0029】
DMA上の各制御レジスタは、1方向のデータ転送中は、その方向におけるデータ転送が不可能であるが、逆方向のデータ転送は可能である。第3の方法においては、その制御レジスタで、1回のデータ転送要求につき、1つのSGL(Scatter Gather List)が作成され、コモンバッファへのコピーが行われてから、データ転送が行われる。
【0030】
すなわち、第3の方法においては、デバイスドライバがアプリケーションからデータ要求を受信後に、データ転送に必要となるデータ管理処理(SGLの作成とコモンバッファへのコピー)を行っていた。この結果、データ転送のための前処理に要する時間がボトルネックとなっていた。
【先行技術文献】
【特許文献】
【0031】
【特許文献1】特開2008−85615号公報
【発明の概要】
【発明が解決しようとする課題】
【0032】
以上のように、従来においては、復号器のデコードがいくら高速化されても、データ転送時間がボトルネックとなり、全体的なデコード処理時間の短縮を行うことが困難であった。したがって、デコード処理全体の高速化の効果を得ることが困難であった。
【0033】
本発明はこのような状況に鑑みてなされたものであり、デコード処理全体の時間を短縮することができるようにするものである。
【課題を解決するための手段】
【0034】
本発明の一側面の情報処理装置は、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積む管理情報作成手段と、前記管理情報作成手段により前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う。
【0035】
前記管理情報作成手段は、前記他の情報処理装置が行うデコード処理に対して発行されるデコード要求コマンド毎に、前記管理リストを作成し、前記コモンバッファ構造体をキューに積むことができる。
【0036】
前記データ転送手段は、前記他の情報処理装置に対する前記次のデータ転送を、前記他の情報処理装置の一方のレジスタにより行い、前記他の情報処理装置からの、前記他の情報処理装置において前記所定の処理がなされた結果データの転送を、前記他の情報処理装置の他方のレジスタにより行うことができる。
【0037】
本発明の一側面の情報処理方法は、情報処理装置が、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積み、前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行うステップを含む。
【0038】
本発明の一側面においては、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストが作成され、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体がキューに積まれる。そして、前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送が行われ、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体が解放され、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送が行われる。
【発明の効果】
【0039】
本発明によれば、デコード処理全体の時間を短縮することができる。
【図面の簡単な説明】
【0040】
【図1】従来のデバイスドライバと復号器間のデータ転送の例を説明する図である。
【図2】従来のデバイスドライバと復号器間のデータ転送の他の例を説明する図である。
【図3】本発明を適用した情報処理システムの構成例を示すブロック図である。
【図4】図2のパーソナルコンピュータにおけるモジュール構成例を示すブロック図である。
【図5】メモリアーキテクチャを説明する図である。
【図6】SGLを用いたDMA処理を説明するフローチャートである。
【図7】SGLのキューイング処理を説明するフローチャートである。
【図8】SGLのキューイング処理を説明する図である。
【図9】図3の情報処理システムのデコード処理を説明するフローチャートである。
【図10】図3の情報処理システムのデコード処理を説明するフローチャートである。
【図11】図3の情報処理システムによる効果を説明する図である。
【図12】コンピュータのハードウエアの構成例を示すブロック図である。
【発明を実施するための形態】
【0041】
[ハードウエアの構成例]
図3は、本発明を適用した情報処理システムの一実施形態の構成例を示すブロック図である。
【0042】
図3に示される情報処理システムは、パーソナルコンピュータ12が、デコード用データ(圧縮ビデオデータ)を、図示せぬPCIe(PCI express)スロットに接続される復号ハードウエア11に供給してデコード処理させ、デコード結果データ(非圧縮ビデオデータ)を取得するシステムである。
【0043】
デコード用データは、例えば、MPEG(Moving Picture Experts Group)2、MPEG4、またはAVC(Advanced Video Coding)などの圧縮符号化方式で圧縮符号化されている。
【0044】
復号ハードウエア11は、PCIeボード、あるいはカセット型のPCIeハードウエアユニットなどで構成される。復号ハードウエア11は、デコード部21、CPU(Central Processing Unit)22、DMA (Direct Memory Access)コントローラ23、およびメモリ24を含むように構成される。
【0045】
デコード部21は、デコードIC(Integrated Circuit)などで構成される。デコード部21は、CPU22上で動作するファームウエア31の制御のもと、メモリ24に記憶されたデコード用データを、上述した圧縮符号化方式に対応する方式でデコードし、デコード結果データをメモリ24に記憶させる。
【0046】
CPU22上には、専用ソフトウエアであるファームウエア31が動作している。ファームウエア31は、パーソナルコンピュータ12からのデコード要求コマンドを受信し、デコード部21の制御を行う。
【0047】
DMAコントローラ23は、パーソナルコンピュータ12と復号ハードウエア11間のデータ転送を制御する。DMAコントローラ23は、パーソナルコンピュータ12から、メモリ24へのデータ転送を行う制御レジスタであるRxレジスタ41と、メモリ24から、パーソナルコンピュータ12へのデータ転送を行う制御レジスタであるTxレジスタ42を有している。
【0048】
Rxレジスタ41とTxレジスタ42は、1つずつDMAコントローラ23に搭載されているため、1方向のデータ転送中は、逆方向へのデータ転送は可能であるが、同じ方向へのデータ転送が不可能である。例えば、パーソナルコンピュータ12から、メモリ24へのデータ転送中は、Rxレジスタ41が使用中であるので、逆方向のTxレジスタ42を使用することはできるが、Rxレジスタ41での次のデータ転送はできない。
【0049】
メモリ24は、DMAコントローラ23の制御により、パーソナルコンピュータ12と復号ハードウエア11の間でデータのハンドリングを行う。また、メモリ24は、デコード部21との間で、圧縮または非圧縮データのハンドリングが可能である。
【0050】
パーソナルコンピュータ12は、ユーザによる図示せぬ入力部の操作に応じて、デコード要求コマンドを発行し、ファームウエア31に対して送信する。パーソナルコンピュータ12は、デコード用データを、Rxレジスタ41を介して、メモリ24に送信し、メモリ24のデコード結果データを、Txレジスタ42を介して受信する。
【0051】
なお、パーソナルコンピュータ12はパーソナルコンピュータで構成されるが、それに限らない。
【0052】
[パーソナルコンピュータのモジュール構成例]
図4は、パーソナルコンピュータにおけるモジュール構成例を示している。
【0053】
図4の例においては、パーソナルコンピュータ12の図示せぬCPU上で動作する、ユーザモードレイヤ(User Mode Layer)、カーネルモードレイヤ(Kernel Mode Layer) 、およびハードウエアレイヤ(Hardware Layer)のすべてのモジュールが示されている。なお、それらのモジュールのうち、本発明に関するモジュールは実線で示されており、それ以外については点線で示されている。したがって、図4の例においては、本発明に関するモジュールのみ符号を付して、デコード結果作成までの流れのみ説明する。
【0054】
ユーザモードレイヤは、アプリケーションレイヤ(Application Layer)とアプリケーションインタフェースレイヤ(API Layer)で構成される。アプリケーションインタフェースレイヤは、さらに、アプリケーションインタフェース(Application Interface)と、ドライバアクセスインタフェース(Driver Access Interface)により構成されている。
【0055】
また、カーネルモードレイヤは、ウインドウズエグザクティブサービス(Windows Executive Service)で構成される。ウインドウズエグザクティブサービスは、OSであるウインドウズシステムサービス(Windows System Services)と、OS上で動作するI/Oマネージャ(I/O Manager)54やメモリマネージャ(Memory Manager)57などの各モジュールで構成されている。
【0056】
ハードウエアレイヤは、図3の復号ハードウエア11で構成されている。
【0057】
アプリケーションレイヤにおける編集アプリケーション(Editing Application)51は、GUI(Graphical User Interface)機能を有している。編集アプリケーション51は、GUI機能を介して入力されるユーザの操作に応じて、アプリケーションインタフェース(のApplicationIF.dll)52に対してデコード要求コマンドを発行する。なお、編集アプリケーションを例に説明するが、もちろん、他のアプリケーションでもよい。
【0058】
アプリケーションインタフェース52は、I/Oマネージャ54のファイルシステムドライバ(File System Driver)56に対し、パーソナルコンピュータ12上に搭載される、図示せぬ補助記憶装置(HDD)より、デコードを必要とする圧縮ビデオデータを取得する。アプリケーションインタフェース52は、OS上のメモリマネージャ57により、取得した圧縮ビデオデータを、図示せぬ主記憶装置(システムメモリ)(以下、主記憶とも称する)にコピーする。
【0059】
アプリケーションインタフェース52は、また、ドライバアクセスインタフェース(のDriverIF.dll)53に、システムメモリ上にコピーされたデータのアドレスとデコード要求コマンドを発行する。ドライバアクセスインタフェース53は、I/Oマネージャ54を構成するモジュールの1つであるデバイスドライバ(Device Driver)55に対し、システムメモリ上にコピーされたデータのアドレスとデコード要求コマンドを発行する。
【0060】
デバイスドライバ55は、OS上で動作するI/Oマネージャ54に、主記憶上にコピーされたデータの管理リスト(Scatter Gather List:SGL)を作成する。デバイスドライバ55は、SGLの作成後、DMAの制御が可能である合間を見て、DMAにより、データ転送処理要求をDMAコントローラ23に対して行う。また、デバイスドライバ55は、メモリ24への圧縮ビデオデータの転送後、すぐに、CMD I/F Accessにより、ファームウエア31に対してデコード要求コマンドを発行する。
【0061】
DMAコントローラ23は、デバイスドライバ55から通知されたパーソナルコンピュータ12上の主記憶のアドレス(物理アドレス)が格納されるSGLを利用し、圧縮ビデオデータを、復号ハードウエア11のメモリ24に転送する。
【0062】
ファームウエア31は、デコード部21に対し、デコード処理を要求する。デコード部21は、メモリ24上から圧縮ビデオデータを読み取って、デコード処理を行い、結果として得られる非圧縮ビデオデータをメモリ24に書き込む。
【0063】
[メモリアーキテクチャの説明]
まず、図5を参照して、パーソナルコンピュータにおけるメモリアーキテクチャについて説明する。
【0064】
図5の例においては、一番左に、仮想メモリ空間における仮想メモリアドレス「0x00000000」乃至「0x7FFFFFFF」のユーザ空間および仮想メモリアドレス「0x80000000」乃至「0xFFFFFFFF」のシステム空間が示されている。その右側には、仮想メモリ空間におけるシステム空間の詳細が示されている。システム空間の詳細の右側の上部には、システム空間における仮想アドレス「0x88C25EA8」から始まる領域に含まれるコモンバッファ構造体の詳細が示されている。
【0065】
コモンバッファ構造体の詳細の下部には、システム空間における仮想アドレス「0xA1B33200」乃至「0xA1B31FF」に配置されるSGL実体の詳細が示されている。さらに、その右側には、物理メモリ空間上の、SGLが含まれるコモンバッファと、データバッファが示されており、一番右側には、コモンバッファMDLの詳細が示されている。
【0066】
物理メモリ空間上のアドレスは、パーソナルコンピュータ12に接続される復号ハードウエア11からアクセス可能となっている。物理メモリ空間は、OSのカーネル内で動作するデバイスドライバ55からアドレスを取得することは可能である。しかしながら、デバイスドライバ55は、物理メモリ空間への直接制御を行うことはできず、デバイスドライバ55も、編集アプリケーション51と同様に、仮想メモリ空間上のアドレスを使用して、物理メモリ空間の制御を行う。
【0067】
ここで、デバイスドライバ55からの物理メモリ空間のアドレス取得とは、次のように行われる。すなわち、OS内のI/Oマネージャ54で管理されるMemory Descriptor List(MDL)が、物理メモリ空間アドレスと仮想メモリ空間アドレスの関連付けをリスト化している。したがって、デバイスドライバ55は、MDLの中身を見ることで、どの物理メモリ空間アドレスが仮想メモリ空間にマッピングされているのかを理解することができる。
【0068】
[SGLを用いたDMA処理の説明]
このようなアーキテクチャを踏まえ、図6のフローチャートを参照して、本発明に関するデータ転送方法として用いられるSGLを用いた一般的なDMA処理について説明する。なお、図6の処理に沿って、図5に示されたメモリアーキテクチャも適宜参照される。
【0069】
図6のステップS1において、編集アプリケーション51は、主記憶へデータを格納するためのデータバッファを、仮想メモリ空間のユーザ空間に配置(アロケート)する。これにより、図5のA1に示されるように、仮想メモリ空間のユーザ空間の「0x013A0000」乃至「0x01B9FFFF」の仮想メモリアドレスに、8Mbytesのデータバッファが配置される。
【0070】
ステップS2において、OS内のメモリマネージャ57は、仮想メモリ空間のユーザ空間に配置されたデータバッファを、主記憶上の物理メモリ空間に最小4KBytes単位で分散して配置する。これにより、図5のA2に示されるように、主記憶の物理メモリ空間には、データバッファが、データバッファ1乃至Xとして分散されて配置される。
【0071】
デバイスドライバ55は、ステップS3において、I/Oマネージャ54に対し、分散されたデータバッファの各バッファポインタ(物理メモリ空間アドレス)とバッファサイズを格納したリストであるSGLの作成を要求する。これに対応して、I/Oマネージャ54により、図5のA3に示されるように、各8Bytesのデータバッファ1ポインタ、データバッファ1サイズ、…、データバッファXポインタ、データバッファXサイズからなるSGLが作成される。
【0072】
ステップS4において、I/Oマネージャ54は、SGLがデバイスドライバ55からアクセス可能となるように、SGLの実体を仮想メモリ空間(のシステム空間)上に書き込む。これにより、図5のA4に示されるように、仮想メモリ空間のシステム空間の「0xA1B33200」乃至「0xA1B3B1FF」の仮想メモリアドレスに、最大32KbytesのSGL実体が配置される。
【0073】
ここで、このSGLには、ハードウエアからアクセス可能な物理メモリ空間アドレスが格納されているものの、ステップS4において仮想メモリ空間に書き込まれていることから、SGLを復号ハードウエア11から参照することができない。SGLを参照可能とするために、物理メモリ空間上にコモンバッファと呼ばれるパーソナルコンピュータ12と復号ハードウエア11との両者で参照可能なバッファを作成する必要がある。
【0074】
ステップS5において、デバイスドライバ55は、コモンバッファ作成のための構造体を用意し、仮想メモリ空間上の「0x88C25EA8」に配置する。コモンバッファ構造体は、図5のA5に示されるように、DMAアダプタポインタ、コモンバッファ実体の仮想アドレス(0x89F72000)、およびコモンバッファMDLアドレス(0x88C2D020)により構成される。
【0075】
デバイスドライバ55は、ステップS6において、コモンバッファを、主記憶上に連続領域として確保するように作成する。これにより、図6のA6に示されるように、主記憶上の物理メモリ空間の物理アドレス「0x09A00000」乃至「0x09A7FFFF」の連続領域に、SGLバッファ1乃至128が作成される。
【0076】
そして、デバイスドライバ55は、ステップS7において、コモンバッファにおける仮想メモリ空間と物理メモリ空間の関連付けのためのMDLを作成する。これにより、図6のA7に示されるように、SGLバッファ1乃至128を指し示すポインタまたはアドレスであるバッファ1ポインタ乃至バッファ128ポインタで構成されるコモンバッファMDLが作成される。このコモンバッファMDLは、コモンバッファ構造体に含まれるコモンバッファMDLアドレス「0x88C2D020」(システム空間内)に配置される。
【0077】
このように、コモンバッファは、連続したアドレッシングであり、かつ、物理メモリ空間上に配置されることから、復号ハードウエア11は、容易にコモンバッファ内のデータを参照することができる。
【0078】
ステップS8において、デバイスドライバ55は、ステップS4において仮想メモリ空間に配置されたSGLを、コモンバッファ実体にコピーを行う。ただし、デバイスドライバ55は、仮想メモリ空間への制御しか許されていないため、コピー時のアドレスとして、仮想メモリ空間アドレスを使用する。なお、コモンバッファが仮想メモリ空間へデータコピーされることで、物理メモリ空間上のアドレスにも同様のデータが配置されることになる。
【0079】
すなわち、SGL実体(A4)が、図5のA8に示されるように、システム空間における仮想メモリアドレス「0x89F72000」乃至「0x8A771FFF」のコモンバッファ実体(512Kbytes)にコピーされる。コモンバッファ構造体(A5)を参照することで、SGL実体(A4)は、コモンバッファ実体の仮想アドレスに対応する、物理メモリ空間上のコモンバッファ(A6)にも配置される。
【0080】
そこで、ステップS9において、デバイスドライバ55は、図5のA9に示される、物理メモリ空間上のコモンバッファの物理アドレス「0x09A00000」乃至「0x09A7FFFF」を、復号ハードウエア11のDMAコントローラ23に通知する。これにより、DMAコントローラ23は、SGL内の物理メモリ空間上に置かれたアプリケーションデータバッファの中身を参照することが可能となる。
【0081】
ステップS10において、DMAコントローラ23は、これらの物理アドレス(A9)を使用して、復号ハードウエア11内のメモリ24へのデータ転送を行う。
【0082】
以上が、一般的なDMAの制御処理である。これに対して、本発明においては、次に説明するように、この制御処理中のコモンバッファへのSGLの格納(ステップS8)を、デコード要求コマンドが発行されたタイミングで行うことを特徴としている。また、本発明においては、コマンドが連続して発行された場合には、複数のコモンバッファの作成を行い、かつ、コモンバッファ構造体をキューイングすることにより、DMAのための準備を予め行うことを特徴としている。
【0083】
[SGLのキューイング処理の説明]
次に、図7のフローチャートを参照して、SGLのキューイング処理について説明する。この処理は、デバイスドライバ55によりデータ(スレッド)毎に行われる処理である。なお、図7の処理に沿って、図8も適宜参照される。以下、図面の丸数字は、括弧付き数字で置き換えて説明する。
【0084】
図8の例においては、左側から、編集アプリケーション51の処理、デバイスドライバ55の処理、復号ハードウエア11の処理が示されており、デバイスドライバ55の処理に示されるキュー71は、例えばI/Oマネージャ54に内蔵される。
【0085】
デバイスドライバ55は、スレッド1として(以下、デバイスドライバ55(スレッド1)と称する)、ステップS21において、編集アプリケーション51から、デコード要求コマンドが送信されるまで待機している。ステップS21において、編集アプリケーション51から、デコード(1)の要求コマンドが送信されたと判定されると、図8に示されるように、デバイスドライバ55(スレッド1)にデコード(1)用データが通知され、処理は、ステップS22に進む。
【0086】
すなわち、編集アプリケーション51から、デコード(1)の要求コマンドが送信されると、デコードに必要とするデータのアドレスがドライバアクセスインタフェース53からデバイスドライバ55(スレッド1)に通知される。これにより、デバイスドライバ55においては、SGLの作成が可能となる。
【0087】
デバイスドライバ55(スレッド1)は、ステップS22において、図8に示されるように、デコード(1)用SGLを作成するとともに、ステップS23において、SGLをコモンバッファへのコピーを行うため、デコード(1)用のコモンバッファ構造体を作成する。図6を参照して上述したように、これにより、デコード(1)用のSGL、すなわち、デコード(1)用データが格納されたデコード(1)用のコモンバッファ構造体が作成される。
【0088】
デバイスドライバ55(スレッド1)は、ステップS24において、作成したデコード(1)用のコモンバッファ構造体をキュー71に積む(キューイングする)。
【0089】
デコード(2)の場合も同様である。すなわち、編集アプリケーション51から、ステップS21において、デコード要求コマンドが送信されたと判定され、図8のデコード(2)用データが通知される。これに対応して、デバイスドライバ55は、スレッド2として、(以下、デバイスドライバ55(スレッド2)と称する)、図8に示されるように、ステップS22において、デコード(2)用SGLを作成する。そして、デバイスドライバ55(スレッド2)は、ステップS23において、デコード(2)用のコモンバッファ構造体を作成する。これにより、デコード(2)用のSGL、すなわち、デコード(2)用データが格納されたデコード(2)用のコモンバッファ構造体が作成される。
【0090】
デバイスドライバ55(スレッド2)は、ステップS24において、作成したデコード(2)用のコモンバッファ構造体をキュー71に積む。これにより、キュー71には、デコード(1)用のコモンバッファ構造体の上に、デコード(2)用のコモンバッファ構造体が積まれる。
【0091】
なお、復号ハードウエア11がコモンバッファ内のSGLによる物理メモリ空間アドレスを参照している可能性があるので、デバイスドライバ55(スレッド1)は、ステップS25において、デコード(1)用データの転送完了通知を受け取るまで、待機している。その間、デコード(1)用のコモンバッファ構造体は、キュー71の中に保持される。
【0092】
ステップS25において、先のデコード(1)用データの転送完了通知が復号ハードウエア11から受け取ったと判定されると、デバイスドライバ55(スレッド1)は、SGLの参照がないものとして、処理は、ステップS26に進む。デバイスドライバ55(スレッド1)は、ステップS26において、デコード(1)用のコモンバッファ構造体を、図8のキュー71からプッシュして(追い出して)、デコード(1)用のコモンバッファ構造体の解放(=コモンバッファ自体の解放)を行う。
【0093】
次に、デコード(3)の場合も同様に、編集アプリケーション51から、ステップS21において、デコード要求コマンドが送信されたと判定され、図8のデコード(3)用データが通知される。これに対応して、デバイスドライバ55は、スレッド3として(以下、デバイスドライバ55(スレッド3)と称する)、図8に示されるように、ステップS22において、デコード(3)用SGLを作成する。そして、デバイスドライバ55(スレッド3)は、ステップS23において、デコード(3)用のコモンバッファ構造体を作成する。図6を参照して上述したように、これにより、デコード(3)用のSGL、すなわち、デコード(3)用データが格納されたデコード(2)用のコモンバッファ構造体が作成される。
【0094】
デバイスドライバ55(スレッド3)は、ステップS24において、作成したデコード(3)用のコモンバッファ構造体をキュー71に積む。これにより、キュー71には、デコード(1)用のコモンバッファ構造体の上に、デコード(3)用のコモンバッファ構造体が積まれる。
【0095】
以降、図8の例においては、図示が省略されているが、次のデコード(2)用データの転送完了通知が復号ハードウエア11から受信され、デコード(2)用データおよびデコード(3)用データについても、デコード(1)用データの場合と同様の処理が繰り返される。
【0096】
すなわち、デバイスドライバ55(スレッド2または3)は、ステップS25において、デコード(2)または(3)用データの転送完了通知を受け取るまで待機している。
【0097】
ステップS25において、デコード(2)または(3)用データの転送完了通知が復号ハードウエア11から受け取ったと判定されると、デバイスドライバ55(スレッド2または3)は、SGLの参照がないものとして、処理は、ステップS26に進む。そして、ステップS26において、デコード(2)または(3)用のコモンバッファ構造体が、図8のキュー71からプッシュされて、デコード(1)用のコモンバッファ構造体の解放(=コモンバッファ自体の解放)が行われる。
【0098】
[デコード処理の説明]
次に、図9および図10のフローチャートを参照して、図3の情報処理システムによるデコード処理について説明する。
【0099】
編集アプリケーション51は、ステップS51において、デバイスドライバ55に対して、デコード(1)用要求を行い、ステップS52において、デバイスドライバ55に対して、デコード(2)用要求を行う。すなわち、編集アプリケーション51は、連続してデコード要求コマンドの発行を行う。
【0100】
デコード(1)用要求に対応して、デバイスドライバ55は、スレッド1として(以下、デバイスドライバ55(スレッド1)と称する)、ステップS71において、I/Oマネージャ54に対して、デコード(1)用SGL作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS91において、デコード(1)用SGL作成を行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0101】
一方、デコード(2)用要求に対応して、デバイスドライバ55は、スレッド2として(以下、デバイスドライバ55(スレッド2)と称する)、ステップS111において、I/Oマネージャ54に対して、デコード(2)用SGL作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS92において、デコード(2)用SGL作成を行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0102】
デコード(1)用SGL作成完了通知を受けると、デバイスドライバ55(スレッド1)は、ステップS72において、I/Oマネージャ54に対して、デコード(1)用コモンバッファ作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS93において、デコード(1)用コモンバッファ作成を行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0103】
デコード(2)用SGL作成完了通知を受けると、デバイスドライバ55(スレッド2)は、ステップS112において、I/Oマネージャ54に対して、デコード(2)用コモンバッファ作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS94において、デコード(2)用コモンバッファ作成を行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0104】
デコード(1)用コモンバッファ作成完了通知を受けると、デバイスドライバ55(スレッド1)は、ステップS73において、I/Oマネージャ54に対して、デコード(1)用SGLのコモンバッファコピー要求を行う。これに対応して、I/Oマネージャ54は、ステップS95において、デコード(1)用SGLコピーを行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0105】
デコード(2)用コモンバッファ作成完了通知を受けると、デバイスドライバ55(スレッド2)は、ステップS113において、I/Oマネージャ54に対して、デコード(2)用SGLのコモンバッファコピー要求を行う。これに対応して、I/Oマネージャ54は、ステップS96において、デコード(2)用SGLコピーを行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0106】
デコード(1)用SGLコピー完了通知を受けると、デバイスドライバ55(スレッド1)は、ステップS74において、I/Oマネージャ54に対して、デコード(1)用コモンバッファ構造体キューイング要求を行う。これに対応して、I/Oマネージャ54は、ステップS97において、キュー71に、デコード(1)用キューイングを行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0107】
デコード(2)用SGLコピー完了通知を受けると、デバイスドライバ(スレッド2)は、ステップS114において、I/Oマネージャ54に対して、デコード(2)用コモンバッファ構造体キューイング要求を行う。これに対応して、I/Oマネージャ54は、ステップS98において、キュー71に、デコード(2)用キューイングを行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0108】
デコード(1)用キューイング完了通知を受けると、デバイスドライバ55(スレッド1)は、即時に、ステップS75において、DMAコントローラ23に対して、デコード(1)用データDMAを実行する。具体的には、デバイスドライバ55(スレッド1)は、キュー71に積まれたコモンバッファ構造体を用い、コモンバッファ構造体を参照して、デコード(1)用データDMAの実行を、DMAコントローラ23のRxレジスタ41に仕掛ける。
【0109】
また、それとほぼ同時に、デバイスドライバ55(スレッド1)は、ステップS76において、デコード(1)実行コマンドをファームウエア31に対して発行する。
【0110】
DMAコントローラ23は、デバイスドライバ55(スレッド1)からのDMAの実行に対して、Rxレジスタ41を用いて、メモリ24へのデコード(1)用データ転送を行う。デコード(1)用データ転送が完了すると、DMAコントローラ23は、ステップS131において、Rxレジスタ41でのデータ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0111】
図10の例においては図示されないが、Rxレジスタ41でのデータ転送完了に対応して、デバイスドライバ55(スレッド1)は、キュー71から、デコード(1)用のコモンバッファ構造体をプッシュする(図7のステップS26)。
【0112】
また、Rxレジスタ41でのデータ転送完了を受けると、Rxレジスタ41における次のDMA実行が可能になるため、デバイスドライバ55(スレッド2)は、ステップS115において、DMAコントローラ23に対して、デコード(2)用データDMAを実行する。具体的には、デバイスドライバ55(スレッド2)は、キュー71に積まれたコモンバッファ構造体を用い、コモンバッファ構造体を参照して、デコード(2)用データDMAの実行を、DMAコントローラ23のRxレジスタ41に仕掛ける。
【0113】
DMAコントローラ23は、デバイスドライバ55(スレッド2)からのDMAの実行に対して、Rxレジスタ41を用いて、メモリ24へのデコード(2)用データ転送を行う。デコード(2)用データ転送が完了すると、DMAコントローラ23は、ステップS132において、Rxレジスタ41でのデータ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0114】
図10の例においては図示されないが、Rxレジスタ41でのデータ転送完了に対応して、デバイスドライバ55(スレッド2)は、キュー71から、デコード(2)用のコモンバッファ構造体をプッシュする(図7のステップS26)。
【0115】
一方、ファームウエア31は、デバイスドライバ55(スレッド1)からのデコード(1)実行コマンドを受信すると、ステップS151において、デコード部21にデコード(1)処理を実行させる。デコード部21は、メモリ24のデコード(1)用データを読み出し、デコードして、デコードしたデータを、再度メモリ24に書き込む。デコード部21がデコード(1)処理を完了すると、ファームウエア31は、ステップS152において、デコード(1)処理完了を、デバイスドライバ55(スレッド1およびスレッド2)並びに編集アプリケーション51に通知する。
【0116】
デコード(1)処理完了通知を受けると、デバイスドライバ55(スレッド2)は、ステップS116において、デコード(2)実行コマンドをファームウエア31に対して発行する。デバイスドライバ55(スレッド2)からのデコード(2)実行コマンドを受信すると、ファームウエア31は、ステップS153において、デコード部21にデコード(2)処理を実行させる。
【0117】
一方、デコード(1)処理完了通知を受けると、編集アプリケーション51は、ステップS53において、デバイスドライバ55(スレッド1)に対して、デコード(1)用結果取得要求を行う。
【0118】
これに対応して、デバイスドライバ55(スレッド1)は、ステップS77において、DMAコントローラ23に対して、デコード(1)用結果データ取得DMAを実行する。具体的には、デバイスドライバ55(スレッド1)は、デコード(1)用結果データ取得DMAの実行を、DMAコントローラ23のTxレジスタ42に仕掛ける。
【0119】
なお、Txレジスタ42の場合も、DMA実行の前(点線に示される)に、Rxレジスタ41の場合と同様に、デバイスドライバ55(スレッド1)およびI/Oマネージャ54間で行われるSGL作成およびコモンバッファ構造体のキューイングを行うようにしてもよい。すなわち、ステップS77の処理の前にも、ステップS71乃至S74と、それに対応するステップS91,S93,S95,S97と同様の処理を行うことが可能である。
【0120】
DMAコントローラ23は、デバイスドライバ55(スレッド1)からのDMAの実行に対して、Txレジスタ42を用いて、デバイスドライバ55(スレッド1)に対して、メモリ24からのデコード(1)用結果データ転送を行う。デコード(1)用結果データ転送が完了すると、DMAコントローラ23は、ステップS133において、Txレジスタ42での結果データ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0121】
結果データ転送完了をDMAコントローラ23から受けると、デバイスドライバ55(スレッド1)は、ステップS78において、編集アプリケーション51に対して、デコード(1)用結果データを供給する。これにより、編集アプリケーション51においては、デコード(1)用結果データが取得される。
【0122】
また、ステップS153において、デコード部21は、メモリ24のデコード(2)用データを読み出し、デコードして、デコードしたデータを、再度メモリ24に書き込む。デコード部21がデコード(2)処理を完了すると、ファームウエア31は、ステップS154において、デコード(2)処理完了を、デバイスドライバ55(スレッド1およびスレッド2)並びに編集アプリケーション51に通知する。
【0123】
このデコード(2)処理完了通知を受けると、編集アプリケーション51は、ステップS54において、デバイスドライバ55(スレッド2)に対して、デコード(2)用結果取得要求を行う。
【0124】
これに対応して、デバイスドライバ55(スレッド2)は、ステップS117において、DMAコントローラ23に対して、デコード(2)用結果データ取得DMAを実行する。具体的には、デバイスドライバ55(スレッド2)は、デコード(2)用結果データ取得DMAの実行を、DMAコントローラ23のTxレジスタ42に仕掛ける。
【0125】
なお、Txレジスタ42の場合も、DMA実行の前(点線に示される)に、Rxレジスタ41の場合と同様に、デバイスドライバ55(スレッド2)およびI/Oマネージャ54間で行われるSGL作成およびコモンバッファ構造体のキューイングを行うようにしてもよい。すなわち、ステップS77の処理の前にも、ステップS111乃至S114と、それに対応するステップS92,S94,S96,S98と同様の処理を行うことが可能である。
【0126】
DMAコントローラ23は、デバイスドライバ55(スレッド2)からのDMAの実行に対して、Txレジスタ42を用いて、デバイスドライバ55(スレッド2)に対して、メモリ24からのデコード(2)用結果データ転送を行う。デコード(2)用結果データ転送が完了すると、DMAコントローラ23は、ステップS134において、Txレジスタ42での結果データ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0127】
結果データ転送完了をDMAコントローラ23から受けると、デバイスドライバ55(スレッド2)は、ステップS118において、編集アプリケーション51に対して、デコード(2)用結果データを供給する。これにより、編集アプリケーション51においては、デコード(2)用結果データが取得される。
【0128】
なお、図9および図10の例においては、デコード(1)用データ転送準備と並行して、デコード(2)用データ転送準備を行う例を説明したが、処理の例はこれに限らない。例えば、デコード(1)用データ転送準備が完了され、デコード(1)用データが転送されている間に、デコード(2)用データ転送準備を行うことも可能である。
【0129】
以上のように、編集アプリケーション51からのデコード要求毎に、SGLを作成し、コモンバッファ構造体自体をキューイングするようにしたので、復号ハードウエア11がデコード処理を行っている間に次のデコード用データを、メモリに転送することができる。
【0130】
なお、アプリケーションでのキューイング機構の利用は、図2を参照して上述したように、主に実行コマンドをキューイングすることが一般的である。これに対して、本発明においては、DMAを実行するためのメモリ管理データ(コモンバッファ構造体)をキューイングすることを特徴としている。
【0131】
すなわち、予め用意されたDMA実行用データのキューイングを行い、かつ、そのデータをデバイスドライバ内で管理することにより、復号ハードウエアからの実行トリガを受けると、即時に次のコマンド実行を行わせることが可能になる。これにより、図11に示されるような効果を得ることができる。
【0132】
[情報処理システムによる効果の説明]
次に、図11を参照して、パーソナルコンピュータ12と復号ハードウエア11とのデータ転送による効果について説明する。なお、図11の例においては、2つのデコード処理が連続で行われる例が示されている。
【0133】
また、図11の例において、上段には、パーソナルコンピュータ12上で動作する編集アプリケーション51の処理が示されている。中段には、パーソナルコンピュータ12上のデバイスドライバ55と、復号ハードウエア11間のデータ転送処理が示されている。下段には、復号ハードウエア11の処理が示されている。
【0134】
まず、編集アプリケーション51上でデコード(1)要求コマンドが発行されると、データ転送処理として、パーソナルコンピュータ12上の主記憶領域に置かれたデコード(1)用データの管理処理が行われる。その後、DMAコントローラ23のRxレジスタ41でのデコード(1)用データ転送が行われる。このデータ転送には、上述したSGLを用いたパケットDMA処理が使用される。
【0135】
編集アプリケーション51上では、デバイスドライバ55の処理を並列化(図9におけるスレッド処理化)することにより、デコード(1)要求コマンドの発行後、すぐにデコード(2)要求コマンドが発行される。これにより、データ転送処理として、デコード(1)用データ転送と並行して、パーソナルコンピュータ12上の主記憶領域に置かれたデコード(2)用データの管理処理を行うことができる。
【0136】
デコード(1)用データ転送が完了すると、デコード(1)用データ転送の完了通知がデバイスドライバ55に通知されるとともに、復号ハードウエア11においては、デコード(1)処理が実行される。
【0137】
デコード(2)用データの管理処理においては、SGL(すなわち、コモンバッファ構造体)のキューイングが行われている。これにより、デコード(1)用データ転送の完了通知がデバイスドライバ55で受信されると、即座に、DMAコントローラ23のRxレジスタ41でのデコード(2)用データ転送を行うことができる。
【0138】
また、DMAコントローラ23のRxレジスタ41とTxレジスタ42は、独立した制御が可能である。これにより、デコード(2)用データ転送中に、復号ハードウエア11におけるデコード(1)処理が終了したとしても、DMAコントローラ23のTxレジスタ42でのデコード(1)用結果データを転送することができる。
【0139】
さらに、デコード(1)用結果データ転送中に、デコード(2)用データ転送が完了し、編集アプリケーション51においては、デコード(1)結果が取得されるとともに、そのデコード(2)用データ転送完了が、デバイスドライバ55に対して通知される。
【0140】
復号ハードウエア11においては、デコード(2)処理が実行され、DMAコントローラ23のTxレジスタ42でのデコード(2)用結果データが転送され、編集アプリケーション51においては、デコード(2)結果が取得される。
【0141】
図3の情報処理システムにおいては、データ転送のためのパーソナルコンピュータ12の主記憶管理処理を行うことができるデバイスドライバ55において、データ転送管理を行うようにしたので、このようなデータ転送のパイプライン化を図ることができる。
【0142】
すなわち、デコード(1)処理を行っている間にデコード(2)用データ転送を行うことができるので、デコード用データ転送の効率が上がる。これにより、時間T11に示されるように、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの復号ハードウエア11におけるデコード処理実行間隔が、従来(図1および図2)に比して短縮される。
【0143】
その結果、編集アプリケーション51側からみた全体的な復号ハードウエア11におけるデコード処理時間を高速化することができる。
【0144】
また、デバイスドライバ55内での処理となるので、編集アプリケーション51へのデータ転送完了通知などのオーバヘッドを生じることがなくなるため、処理時間の短縮化を図ることができる。
【0145】
以上のように、本発明においては、アプリケーションからのデコード要求コマンドに対応して、データ転送時にパケットDMAで使用されるSGLが複数作成される。デバイスドライバにより、作成されたSGLがコモンバッファへ構築され、そのコモンバッファ構造体がキューイングされる。そして、データ転送完了が通知されると、デバイスドライバにより、作成されたコモンバッファ構造体が即座に次のデータ転送に利用される。
【0146】
これにより、復号ハードウエア上のメモリへ転送するデータの転送効率が向上され、デコード処理が高速化される。
【0147】
また、デバイスドライバにおいて、データ転送用のデータ管理処理がパイプライン処理により逐次実行することができる。これにより、処理のオーバヘッドが削減される。
【0148】
なお、上記説明においては、2つのデコード処理が連続で行われる例を説明したが、2つに限らず、本発明は、複数のデコード処理に適用することができる。
【0149】
また、上記説明においては、デコードを復号ハードウエアに行わせる例を説明したが、ハードウエアに行わせる処理は、デコードに限らず、エンコードであってもよいし、その他の処理であってもよい。例えば、パーソナルコンピュータで行うには演算能力を必要とするような重い処理を、接続されるハードウエアに行わせることにも本発明を適用することができる。
【0150】
また、パーソナルコンピュータとハードウエアのインタフェースは、PCIeに限らず、他のインタフェースであってもよい。
【0151】
上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウエアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な汎用のパーソナルコンピュータなどが含まれる。
【0152】
図12は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。すなわち、図3のパーソナルコンピュータ12は、図12に示すように構成される。
【0153】
コンピュータにおいて、CPU(Central Processing Unit)301、ROM(Read Only Memory)302、RAM(Random Access Memory)303は、バス304により相互に接続されている。
【0154】
バス304には、さらに、入出力インタフェース305が接続されている。入出力インタフェース305には、入力部306、出力部307、記憶部308、通信部309、およびドライブ310が接続されている。
【0155】
入力部306は、キーボード、マウス、マイクロフォンなどよりなる。出力部307は、ディスプレイ、スピーカなどよりなる。記憶部308は、ハードディスクや不揮発性のメモリなどよりなる。通信部309は、ネットワークインタフェースなどよりなる。ドライブ310は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブルメディア311を駆動する。
【0156】
以上のように構成されるコンピュータでは、CPU301が、例えば、記憶部308に記憶されているプログラムを入出力インタフェース305およびバス304を介してRAM303にロードして実行することにより、上述した一連の処理が行われる。
【0157】
コンピュータ(CPU301)が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア311に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供することができる。
【0158】
コンピュータでは、プログラムは、リムーバブルメディア311をドライブ310に装着することにより、入出力インタフェース305を介して、記憶部308にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部309で受信し、記憶部308にインストールすることができる。その他、プログラムは、ROM302や記憶部308に、あらかじめインストールしておくことができる。
【0159】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【0160】
本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【0161】
11 復号ハードウエア, 12 パーソナルコンピュータ, 22 CPU, 23 DMAコントローラ, 24 メモリ, 31 ファームウエア, 41 Rx レジスタ, 42 Tx レジスタ, 51 編集アプリケーション, 54 I/Oマネージャ, 55 デバイスドライバ, 56 ファイルシステムドライバ, 57 メモリマネージャ, 71 キュー
【技術分野】
【0001】
本発明は、情報処理装置および方法に関し、特に、デコード処理全体の時間を短縮することができるようにした情報処理装置および方法に関する。
【背景技術】
【0002】
従来、MPEG(Moving Picture Experts Group)と呼ばれる符号化方式により動画像を符号化して得られた符号化ストリームを復号する復号装置がある。規格化されてきたMPEGシリーズの中ではMPEG2が一般的ではあるが、最近では圧縮率を高めたMPEG4や、AVC(Advanced Video Coding)といった圧縮符号化方式も規格化されている。
【0003】
このような符号化ストリームを復号する場合、例えば、マイクロコンピュータなど一般的なCPUを用いる方法がある(特許文献1参照)。
【0004】
これに対して、パーソナルコンピュータにおいて符号化ストリームを復号する場合、例えば拡張ボード等によってパーソナルコンピュータに増設された、ハードウエアで構成される復号器(デコードハードウェア)を用いて復号する方法がある。
【0005】
この方法においては、パーソナルコンピュータは、符号化ストリームを復号する必要が生じたときに、その符号化ストリームを復号器に供給する。復号器は、パーソナルコンピュータから符号化ストリームを取得するとそれを復号し、ベースバンドのデータをパーソナルコンピュータに返す。
【0006】
以上のように、この方法の場合、パーソナルコンピュータと復号器の間でデータやコマンドの転送を行う必要がある。
【0007】
図1を参照して、パーソナルコンピュータと復号器とのデータ転送の第1の方法について説明する。なお、図1の例においては、2つのデコード処理が連続で行われる例が示されている。
【0008】
図1の上段には、パーソナルコンピュータ上で動作するアプリケーションの処理が示されている。中段には、パーソナルコンピュータ上のデバイスドライバと復号器間のデータ転送処理が示されている。下段には、復号器の処理が示されている。以下、図面の丸数字は、括弧付き数字で置き換えて説明する。
【0009】
まず、アプリケーション上でデコード(1)要求コマンドが発行されると、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(1)用データの管理処理が行われ、復号器に対して、デコード(1)用データ転送が行われる。
【0010】
デコード(1)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(1)用データ転送完了通知が行われ、復号器においてデコード(1)処理が開始される。
【0011】
復号器でのデコード(1)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(1)用結果データ転送が行われる。アプリケーション上では、そのデコード(1)用結果データが取得された後で、次のデコード(2)要求コマンドが発行される。
【0012】
その後、デコード(1)の処理と同様に、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(2)用データの管理処理が行われ、復号器に対してデコード(2)用データ転送が行われる。
【0013】
デコード(2)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(2)用データ転送完了通知が行われ、復号器において、デコード(2)処理が開始される。
【0014】
復号器でのデコード(2)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(2)用結果データ転送が行われる。
【0015】
このように、第1の方法においては、復号器によるデコードの完了を待ってから、次のデコード要求が行われる。このため、第1の方法においては、データ転送処理における、デコード(1)用データ転送完了通知を行ってから、次のデコード(2)用データの管理処理を行うまでの時間T1に、タイムラグが生じていた。
【0016】
この結果、復号器においては、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの時間T2に示されるように、高速で動作するデコード処理を実行する時間間隔が大幅に開いてしまい、全体的なデコード処理時間の短縮を行うことが困難であった。
【0017】
次に、図2を参照して、パーソナルコンピュータと復号器とのデータ転送の第2の方法について説明する。なお、図2の例においても、図1の例と同様に、2つのデコード処理が連続で行われる例が示されている。
【0018】
まず、アプリケーション上でデコード(1)要求コマンドが発行されると、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(1)用データの管理処理が行われ、復号器に対して、デコード(1)用データ転送が行われる。
【0019】
このとき、アプリケーション上においては、アプリケーション上に設けられたデコード要求コマンドを複数回実行可能にする機構(コマンドキューイング)により、次のデコード(2)要求コマンドがキューイングされる。
【0020】
デコード(1)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(1)用データ転送完了通知が行われ、復号器においてデコード(1)処理が開始される。
【0021】
また、アプリケーションに対するデコード(1)用データ転送完了通知も行われ、アプリケーション上においては、キューイングされていた次のデコード(2)要求コマンドが、デコード(2)用結果データの取得を待たずに発行される。
【0022】
これに対応して、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(2)用データの管理処理が行われる。
【0023】
一方、復号器でのデコード(1)処理が完了すると、データ転送処理として、パーソナルコンピュータに対してデコード(1)用結果データ転送が行われ、アプリケーション上では、デコード(1)用結果データが取得される。
【0024】
デコード(1)用結果データ転送後、デコード(2)用データの管理処理が終了すると、すぐに、復号器に対して、デコード(2)用データ転送が行われる。
【0025】
デコード(2)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(2)用データ転送完了通知が行われ、復号器においてデコード(2)処理が開始される。復号器でのデコード(2)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(2)用結果データ転送が行われる。
【0026】
このように、第2の方法においては、アプリケーションによるデコードコマンドキューイングなどが用いられる。これにより、デコード(1)用結果データ転送の間に、次のデコード(2)要求コマンドによるデコード(2)用データ完了処理を行い、その後、すぐに、デコード(2)用データ転送を開始することが可能になる。しかしながら、先のデコード(1)処理の間には、次のデコード(2)用データ転送を行うことは困難であった。
【0027】
この結果、第2の方法の復号器においても、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの時間T3に示されるように、デコード処理を実行する時間間隔が大幅に開いてしまい、全体的なデコード処理時間の短縮が難しかった。
【0028】
さらに、パーソナルコンピュータと復号器とのデータ転送の第3の方法を説明する。復号器上に搭載されるDMAC(Direct Memory Access Controller)は、1つのデータ転送方向(DMA ChannelまたはDMA Adapterと称する)に対し、RxとTxといった個別の制御レジスタを有している。
【0029】
DMA上の各制御レジスタは、1方向のデータ転送中は、その方向におけるデータ転送が不可能であるが、逆方向のデータ転送は可能である。第3の方法においては、その制御レジスタで、1回のデータ転送要求につき、1つのSGL(Scatter Gather List)が作成され、コモンバッファへのコピーが行われてから、データ転送が行われる。
【0030】
すなわち、第3の方法においては、デバイスドライバがアプリケーションからデータ要求を受信後に、データ転送に必要となるデータ管理処理(SGLの作成とコモンバッファへのコピー)を行っていた。この結果、データ転送のための前処理に要する時間がボトルネックとなっていた。
【先行技術文献】
【特許文献】
【0031】
【特許文献1】特開2008−85615号公報
【発明の概要】
【発明が解決しようとする課題】
【0032】
以上のように、従来においては、復号器のデコードがいくら高速化されても、データ転送時間がボトルネックとなり、全体的なデコード処理時間の短縮を行うことが困難であった。したがって、デコード処理全体の高速化の効果を得ることが困難であった。
【0033】
本発明はこのような状況に鑑みてなされたものであり、デコード処理全体の時間を短縮することができるようにするものである。
【課題を解決するための手段】
【0034】
本発明の一側面の情報処理装置は、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積む管理情報作成手段と、前記管理情報作成手段により前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う。
【0035】
前記管理情報作成手段は、前記他の情報処理装置が行うデコード処理に対して発行されるデコード要求コマンド毎に、前記管理リストを作成し、前記コモンバッファ構造体をキューに積むことができる。
【0036】
前記データ転送手段は、前記他の情報処理装置に対する前記次のデータ転送を、前記他の情報処理装置の一方のレジスタにより行い、前記他の情報処理装置からの、前記他の情報処理装置において前記所定の処理がなされた結果データの転送を、前記他の情報処理装置の他方のレジスタにより行うことができる。
【0037】
本発明の一側面の情報処理方法は、情報処理装置が、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積み、前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行うステップを含む。
【0038】
本発明の一側面においては、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストが作成され、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体がキューに積まれる。そして、前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送が行われ、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体が解放され、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送が行われる。
【発明の効果】
【0039】
本発明によれば、デコード処理全体の時間を短縮することができる。
【図面の簡単な説明】
【0040】
【図1】従来のデバイスドライバと復号器間のデータ転送の例を説明する図である。
【図2】従来のデバイスドライバと復号器間のデータ転送の他の例を説明する図である。
【図3】本発明を適用した情報処理システムの構成例を示すブロック図である。
【図4】図2のパーソナルコンピュータにおけるモジュール構成例を示すブロック図である。
【図5】メモリアーキテクチャを説明する図である。
【図6】SGLを用いたDMA処理を説明するフローチャートである。
【図7】SGLのキューイング処理を説明するフローチャートである。
【図8】SGLのキューイング処理を説明する図である。
【図9】図3の情報処理システムのデコード処理を説明するフローチャートである。
【図10】図3の情報処理システムのデコード処理を説明するフローチャートである。
【図11】図3の情報処理システムによる効果を説明する図である。
【図12】コンピュータのハードウエアの構成例を示すブロック図である。
【発明を実施するための形態】
【0041】
[ハードウエアの構成例]
図3は、本発明を適用した情報処理システムの一実施形態の構成例を示すブロック図である。
【0042】
図3に示される情報処理システムは、パーソナルコンピュータ12が、デコード用データ(圧縮ビデオデータ)を、図示せぬPCIe(PCI express)スロットに接続される復号ハードウエア11に供給してデコード処理させ、デコード結果データ(非圧縮ビデオデータ)を取得するシステムである。
【0043】
デコード用データは、例えば、MPEG(Moving Picture Experts Group)2、MPEG4、またはAVC(Advanced Video Coding)などの圧縮符号化方式で圧縮符号化されている。
【0044】
復号ハードウエア11は、PCIeボード、あるいはカセット型のPCIeハードウエアユニットなどで構成される。復号ハードウエア11は、デコード部21、CPU(Central Processing Unit)22、DMA (Direct Memory Access)コントローラ23、およびメモリ24を含むように構成される。
【0045】
デコード部21は、デコードIC(Integrated Circuit)などで構成される。デコード部21は、CPU22上で動作するファームウエア31の制御のもと、メモリ24に記憶されたデコード用データを、上述した圧縮符号化方式に対応する方式でデコードし、デコード結果データをメモリ24に記憶させる。
【0046】
CPU22上には、専用ソフトウエアであるファームウエア31が動作している。ファームウエア31は、パーソナルコンピュータ12からのデコード要求コマンドを受信し、デコード部21の制御を行う。
【0047】
DMAコントローラ23は、パーソナルコンピュータ12と復号ハードウエア11間のデータ転送を制御する。DMAコントローラ23は、パーソナルコンピュータ12から、メモリ24へのデータ転送を行う制御レジスタであるRxレジスタ41と、メモリ24から、パーソナルコンピュータ12へのデータ転送を行う制御レジスタであるTxレジスタ42を有している。
【0048】
Rxレジスタ41とTxレジスタ42は、1つずつDMAコントローラ23に搭載されているため、1方向のデータ転送中は、逆方向へのデータ転送は可能であるが、同じ方向へのデータ転送が不可能である。例えば、パーソナルコンピュータ12から、メモリ24へのデータ転送中は、Rxレジスタ41が使用中であるので、逆方向のTxレジスタ42を使用することはできるが、Rxレジスタ41での次のデータ転送はできない。
【0049】
メモリ24は、DMAコントローラ23の制御により、パーソナルコンピュータ12と復号ハードウエア11の間でデータのハンドリングを行う。また、メモリ24は、デコード部21との間で、圧縮または非圧縮データのハンドリングが可能である。
【0050】
パーソナルコンピュータ12は、ユーザによる図示せぬ入力部の操作に応じて、デコード要求コマンドを発行し、ファームウエア31に対して送信する。パーソナルコンピュータ12は、デコード用データを、Rxレジスタ41を介して、メモリ24に送信し、メモリ24のデコード結果データを、Txレジスタ42を介して受信する。
【0051】
なお、パーソナルコンピュータ12はパーソナルコンピュータで構成されるが、それに限らない。
【0052】
[パーソナルコンピュータのモジュール構成例]
図4は、パーソナルコンピュータにおけるモジュール構成例を示している。
【0053】
図4の例においては、パーソナルコンピュータ12の図示せぬCPU上で動作する、ユーザモードレイヤ(User Mode Layer)、カーネルモードレイヤ(Kernel Mode Layer) 、およびハードウエアレイヤ(Hardware Layer)のすべてのモジュールが示されている。なお、それらのモジュールのうち、本発明に関するモジュールは実線で示されており、それ以外については点線で示されている。したがって、図4の例においては、本発明に関するモジュールのみ符号を付して、デコード結果作成までの流れのみ説明する。
【0054】
ユーザモードレイヤは、アプリケーションレイヤ(Application Layer)とアプリケーションインタフェースレイヤ(API Layer)で構成される。アプリケーションインタフェースレイヤは、さらに、アプリケーションインタフェース(Application Interface)と、ドライバアクセスインタフェース(Driver Access Interface)により構成されている。
【0055】
また、カーネルモードレイヤは、ウインドウズエグザクティブサービス(Windows Executive Service)で構成される。ウインドウズエグザクティブサービスは、OSであるウインドウズシステムサービス(Windows System Services)と、OS上で動作するI/Oマネージャ(I/O Manager)54やメモリマネージャ(Memory Manager)57などの各モジュールで構成されている。
【0056】
ハードウエアレイヤは、図3の復号ハードウエア11で構成されている。
【0057】
アプリケーションレイヤにおける編集アプリケーション(Editing Application)51は、GUI(Graphical User Interface)機能を有している。編集アプリケーション51は、GUI機能を介して入力されるユーザの操作に応じて、アプリケーションインタフェース(のApplicationIF.dll)52に対してデコード要求コマンドを発行する。なお、編集アプリケーションを例に説明するが、もちろん、他のアプリケーションでもよい。
【0058】
アプリケーションインタフェース52は、I/Oマネージャ54のファイルシステムドライバ(File System Driver)56に対し、パーソナルコンピュータ12上に搭載される、図示せぬ補助記憶装置(HDD)より、デコードを必要とする圧縮ビデオデータを取得する。アプリケーションインタフェース52は、OS上のメモリマネージャ57により、取得した圧縮ビデオデータを、図示せぬ主記憶装置(システムメモリ)(以下、主記憶とも称する)にコピーする。
【0059】
アプリケーションインタフェース52は、また、ドライバアクセスインタフェース(のDriverIF.dll)53に、システムメモリ上にコピーされたデータのアドレスとデコード要求コマンドを発行する。ドライバアクセスインタフェース53は、I/Oマネージャ54を構成するモジュールの1つであるデバイスドライバ(Device Driver)55に対し、システムメモリ上にコピーされたデータのアドレスとデコード要求コマンドを発行する。
【0060】
デバイスドライバ55は、OS上で動作するI/Oマネージャ54に、主記憶上にコピーされたデータの管理リスト(Scatter Gather List:SGL)を作成する。デバイスドライバ55は、SGLの作成後、DMAの制御が可能である合間を見て、DMAにより、データ転送処理要求をDMAコントローラ23に対して行う。また、デバイスドライバ55は、メモリ24への圧縮ビデオデータの転送後、すぐに、CMD I/F Accessにより、ファームウエア31に対してデコード要求コマンドを発行する。
【0061】
DMAコントローラ23は、デバイスドライバ55から通知されたパーソナルコンピュータ12上の主記憶のアドレス(物理アドレス)が格納されるSGLを利用し、圧縮ビデオデータを、復号ハードウエア11のメモリ24に転送する。
【0062】
ファームウエア31は、デコード部21に対し、デコード処理を要求する。デコード部21は、メモリ24上から圧縮ビデオデータを読み取って、デコード処理を行い、結果として得られる非圧縮ビデオデータをメモリ24に書き込む。
【0063】
[メモリアーキテクチャの説明]
まず、図5を参照して、パーソナルコンピュータにおけるメモリアーキテクチャについて説明する。
【0064】
図5の例においては、一番左に、仮想メモリ空間における仮想メモリアドレス「0x00000000」乃至「0x7FFFFFFF」のユーザ空間および仮想メモリアドレス「0x80000000」乃至「0xFFFFFFFF」のシステム空間が示されている。その右側には、仮想メモリ空間におけるシステム空間の詳細が示されている。システム空間の詳細の右側の上部には、システム空間における仮想アドレス「0x88C25EA8」から始まる領域に含まれるコモンバッファ構造体の詳細が示されている。
【0065】
コモンバッファ構造体の詳細の下部には、システム空間における仮想アドレス「0xA1B33200」乃至「0xA1B31FF」に配置されるSGL実体の詳細が示されている。さらに、その右側には、物理メモリ空間上の、SGLが含まれるコモンバッファと、データバッファが示されており、一番右側には、コモンバッファMDLの詳細が示されている。
【0066】
物理メモリ空間上のアドレスは、パーソナルコンピュータ12に接続される復号ハードウエア11からアクセス可能となっている。物理メモリ空間は、OSのカーネル内で動作するデバイスドライバ55からアドレスを取得することは可能である。しかしながら、デバイスドライバ55は、物理メモリ空間への直接制御を行うことはできず、デバイスドライバ55も、編集アプリケーション51と同様に、仮想メモリ空間上のアドレスを使用して、物理メモリ空間の制御を行う。
【0067】
ここで、デバイスドライバ55からの物理メモリ空間のアドレス取得とは、次のように行われる。すなわち、OS内のI/Oマネージャ54で管理されるMemory Descriptor List(MDL)が、物理メモリ空間アドレスと仮想メモリ空間アドレスの関連付けをリスト化している。したがって、デバイスドライバ55は、MDLの中身を見ることで、どの物理メモリ空間アドレスが仮想メモリ空間にマッピングされているのかを理解することができる。
【0068】
[SGLを用いたDMA処理の説明]
このようなアーキテクチャを踏まえ、図6のフローチャートを参照して、本発明に関するデータ転送方法として用いられるSGLを用いた一般的なDMA処理について説明する。なお、図6の処理に沿って、図5に示されたメモリアーキテクチャも適宜参照される。
【0069】
図6のステップS1において、編集アプリケーション51は、主記憶へデータを格納するためのデータバッファを、仮想メモリ空間のユーザ空間に配置(アロケート)する。これにより、図5のA1に示されるように、仮想メモリ空間のユーザ空間の「0x013A0000」乃至「0x01B9FFFF」の仮想メモリアドレスに、8Mbytesのデータバッファが配置される。
【0070】
ステップS2において、OS内のメモリマネージャ57は、仮想メモリ空間のユーザ空間に配置されたデータバッファを、主記憶上の物理メモリ空間に最小4KBytes単位で分散して配置する。これにより、図5のA2に示されるように、主記憶の物理メモリ空間には、データバッファが、データバッファ1乃至Xとして分散されて配置される。
【0071】
デバイスドライバ55は、ステップS3において、I/Oマネージャ54に対し、分散されたデータバッファの各バッファポインタ(物理メモリ空間アドレス)とバッファサイズを格納したリストであるSGLの作成を要求する。これに対応して、I/Oマネージャ54により、図5のA3に示されるように、各8Bytesのデータバッファ1ポインタ、データバッファ1サイズ、…、データバッファXポインタ、データバッファXサイズからなるSGLが作成される。
【0072】
ステップS4において、I/Oマネージャ54は、SGLがデバイスドライバ55からアクセス可能となるように、SGLの実体を仮想メモリ空間(のシステム空間)上に書き込む。これにより、図5のA4に示されるように、仮想メモリ空間のシステム空間の「0xA1B33200」乃至「0xA1B3B1FF」の仮想メモリアドレスに、最大32KbytesのSGL実体が配置される。
【0073】
ここで、このSGLには、ハードウエアからアクセス可能な物理メモリ空間アドレスが格納されているものの、ステップS4において仮想メモリ空間に書き込まれていることから、SGLを復号ハードウエア11から参照することができない。SGLを参照可能とするために、物理メモリ空間上にコモンバッファと呼ばれるパーソナルコンピュータ12と復号ハードウエア11との両者で参照可能なバッファを作成する必要がある。
【0074】
ステップS5において、デバイスドライバ55は、コモンバッファ作成のための構造体を用意し、仮想メモリ空間上の「0x88C25EA8」に配置する。コモンバッファ構造体は、図5のA5に示されるように、DMAアダプタポインタ、コモンバッファ実体の仮想アドレス(0x89F72000)、およびコモンバッファMDLアドレス(0x88C2D020)により構成される。
【0075】
デバイスドライバ55は、ステップS6において、コモンバッファを、主記憶上に連続領域として確保するように作成する。これにより、図6のA6に示されるように、主記憶上の物理メモリ空間の物理アドレス「0x09A00000」乃至「0x09A7FFFF」の連続領域に、SGLバッファ1乃至128が作成される。
【0076】
そして、デバイスドライバ55は、ステップS7において、コモンバッファにおける仮想メモリ空間と物理メモリ空間の関連付けのためのMDLを作成する。これにより、図6のA7に示されるように、SGLバッファ1乃至128を指し示すポインタまたはアドレスであるバッファ1ポインタ乃至バッファ128ポインタで構成されるコモンバッファMDLが作成される。このコモンバッファMDLは、コモンバッファ構造体に含まれるコモンバッファMDLアドレス「0x88C2D020」(システム空間内)に配置される。
【0077】
このように、コモンバッファは、連続したアドレッシングであり、かつ、物理メモリ空間上に配置されることから、復号ハードウエア11は、容易にコモンバッファ内のデータを参照することができる。
【0078】
ステップS8において、デバイスドライバ55は、ステップS4において仮想メモリ空間に配置されたSGLを、コモンバッファ実体にコピーを行う。ただし、デバイスドライバ55は、仮想メモリ空間への制御しか許されていないため、コピー時のアドレスとして、仮想メモリ空間アドレスを使用する。なお、コモンバッファが仮想メモリ空間へデータコピーされることで、物理メモリ空間上のアドレスにも同様のデータが配置されることになる。
【0079】
すなわち、SGL実体(A4)が、図5のA8に示されるように、システム空間における仮想メモリアドレス「0x89F72000」乃至「0x8A771FFF」のコモンバッファ実体(512Kbytes)にコピーされる。コモンバッファ構造体(A5)を参照することで、SGL実体(A4)は、コモンバッファ実体の仮想アドレスに対応する、物理メモリ空間上のコモンバッファ(A6)にも配置される。
【0080】
そこで、ステップS9において、デバイスドライバ55は、図5のA9に示される、物理メモリ空間上のコモンバッファの物理アドレス「0x09A00000」乃至「0x09A7FFFF」を、復号ハードウエア11のDMAコントローラ23に通知する。これにより、DMAコントローラ23は、SGL内の物理メモリ空間上に置かれたアプリケーションデータバッファの中身を参照することが可能となる。
【0081】
ステップS10において、DMAコントローラ23は、これらの物理アドレス(A9)を使用して、復号ハードウエア11内のメモリ24へのデータ転送を行う。
【0082】
以上が、一般的なDMAの制御処理である。これに対して、本発明においては、次に説明するように、この制御処理中のコモンバッファへのSGLの格納(ステップS8)を、デコード要求コマンドが発行されたタイミングで行うことを特徴としている。また、本発明においては、コマンドが連続して発行された場合には、複数のコモンバッファの作成を行い、かつ、コモンバッファ構造体をキューイングすることにより、DMAのための準備を予め行うことを特徴としている。
【0083】
[SGLのキューイング処理の説明]
次に、図7のフローチャートを参照して、SGLのキューイング処理について説明する。この処理は、デバイスドライバ55によりデータ(スレッド)毎に行われる処理である。なお、図7の処理に沿って、図8も適宜参照される。以下、図面の丸数字は、括弧付き数字で置き換えて説明する。
【0084】
図8の例においては、左側から、編集アプリケーション51の処理、デバイスドライバ55の処理、復号ハードウエア11の処理が示されており、デバイスドライバ55の処理に示されるキュー71は、例えばI/Oマネージャ54に内蔵される。
【0085】
デバイスドライバ55は、スレッド1として(以下、デバイスドライバ55(スレッド1)と称する)、ステップS21において、編集アプリケーション51から、デコード要求コマンドが送信されるまで待機している。ステップS21において、編集アプリケーション51から、デコード(1)の要求コマンドが送信されたと判定されると、図8に示されるように、デバイスドライバ55(スレッド1)にデコード(1)用データが通知され、処理は、ステップS22に進む。
【0086】
すなわち、編集アプリケーション51から、デコード(1)の要求コマンドが送信されると、デコードに必要とするデータのアドレスがドライバアクセスインタフェース53からデバイスドライバ55(スレッド1)に通知される。これにより、デバイスドライバ55においては、SGLの作成が可能となる。
【0087】
デバイスドライバ55(スレッド1)は、ステップS22において、図8に示されるように、デコード(1)用SGLを作成するとともに、ステップS23において、SGLをコモンバッファへのコピーを行うため、デコード(1)用のコモンバッファ構造体を作成する。図6を参照して上述したように、これにより、デコード(1)用のSGL、すなわち、デコード(1)用データが格納されたデコード(1)用のコモンバッファ構造体が作成される。
【0088】
デバイスドライバ55(スレッド1)は、ステップS24において、作成したデコード(1)用のコモンバッファ構造体をキュー71に積む(キューイングする)。
【0089】
デコード(2)の場合も同様である。すなわち、編集アプリケーション51から、ステップS21において、デコード要求コマンドが送信されたと判定され、図8のデコード(2)用データが通知される。これに対応して、デバイスドライバ55は、スレッド2として、(以下、デバイスドライバ55(スレッド2)と称する)、図8に示されるように、ステップS22において、デコード(2)用SGLを作成する。そして、デバイスドライバ55(スレッド2)は、ステップS23において、デコード(2)用のコモンバッファ構造体を作成する。これにより、デコード(2)用のSGL、すなわち、デコード(2)用データが格納されたデコード(2)用のコモンバッファ構造体が作成される。
【0090】
デバイスドライバ55(スレッド2)は、ステップS24において、作成したデコード(2)用のコモンバッファ構造体をキュー71に積む。これにより、キュー71には、デコード(1)用のコモンバッファ構造体の上に、デコード(2)用のコモンバッファ構造体が積まれる。
【0091】
なお、復号ハードウエア11がコモンバッファ内のSGLによる物理メモリ空間アドレスを参照している可能性があるので、デバイスドライバ55(スレッド1)は、ステップS25において、デコード(1)用データの転送完了通知を受け取るまで、待機している。その間、デコード(1)用のコモンバッファ構造体は、キュー71の中に保持される。
【0092】
ステップS25において、先のデコード(1)用データの転送完了通知が復号ハードウエア11から受け取ったと判定されると、デバイスドライバ55(スレッド1)は、SGLの参照がないものとして、処理は、ステップS26に進む。デバイスドライバ55(スレッド1)は、ステップS26において、デコード(1)用のコモンバッファ構造体を、図8のキュー71からプッシュして(追い出して)、デコード(1)用のコモンバッファ構造体の解放(=コモンバッファ自体の解放)を行う。
【0093】
次に、デコード(3)の場合も同様に、編集アプリケーション51から、ステップS21において、デコード要求コマンドが送信されたと判定され、図8のデコード(3)用データが通知される。これに対応して、デバイスドライバ55は、スレッド3として(以下、デバイスドライバ55(スレッド3)と称する)、図8に示されるように、ステップS22において、デコード(3)用SGLを作成する。そして、デバイスドライバ55(スレッド3)は、ステップS23において、デコード(3)用のコモンバッファ構造体を作成する。図6を参照して上述したように、これにより、デコード(3)用のSGL、すなわち、デコード(3)用データが格納されたデコード(2)用のコモンバッファ構造体が作成される。
【0094】
デバイスドライバ55(スレッド3)は、ステップS24において、作成したデコード(3)用のコモンバッファ構造体をキュー71に積む。これにより、キュー71には、デコード(1)用のコモンバッファ構造体の上に、デコード(3)用のコモンバッファ構造体が積まれる。
【0095】
以降、図8の例においては、図示が省略されているが、次のデコード(2)用データの転送完了通知が復号ハードウエア11から受信され、デコード(2)用データおよびデコード(3)用データについても、デコード(1)用データの場合と同様の処理が繰り返される。
【0096】
すなわち、デバイスドライバ55(スレッド2または3)は、ステップS25において、デコード(2)または(3)用データの転送完了通知を受け取るまで待機している。
【0097】
ステップS25において、デコード(2)または(3)用データの転送完了通知が復号ハードウエア11から受け取ったと判定されると、デバイスドライバ55(スレッド2または3)は、SGLの参照がないものとして、処理は、ステップS26に進む。そして、ステップS26において、デコード(2)または(3)用のコモンバッファ構造体が、図8のキュー71からプッシュされて、デコード(1)用のコモンバッファ構造体の解放(=コモンバッファ自体の解放)が行われる。
【0098】
[デコード処理の説明]
次に、図9および図10のフローチャートを参照して、図3の情報処理システムによるデコード処理について説明する。
【0099】
編集アプリケーション51は、ステップS51において、デバイスドライバ55に対して、デコード(1)用要求を行い、ステップS52において、デバイスドライバ55に対して、デコード(2)用要求を行う。すなわち、編集アプリケーション51は、連続してデコード要求コマンドの発行を行う。
【0100】
デコード(1)用要求に対応して、デバイスドライバ55は、スレッド1として(以下、デバイスドライバ55(スレッド1)と称する)、ステップS71において、I/Oマネージャ54に対して、デコード(1)用SGL作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS91において、デコード(1)用SGL作成を行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0101】
一方、デコード(2)用要求に対応して、デバイスドライバ55は、スレッド2として(以下、デバイスドライバ55(スレッド2)と称する)、ステップS111において、I/Oマネージャ54に対して、デコード(2)用SGL作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS92において、デコード(2)用SGL作成を行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0102】
デコード(1)用SGL作成完了通知を受けると、デバイスドライバ55(スレッド1)は、ステップS72において、I/Oマネージャ54に対して、デコード(1)用コモンバッファ作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS93において、デコード(1)用コモンバッファ作成を行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0103】
デコード(2)用SGL作成完了通知を受けると、デバイスドライバ55(スレッド2)は、ステップS112において、I/Oマネージャ54に対して、デコード(2)用コモンバッファ作成要求を行う。これに対応して、I/Oマネージャ54は、ステップS94において、デコード(2)用コモンバッファ作成を行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0104】
デコード(1)用コモンバッファ作成完了通知を受けると、デバイスドライバ55(スレッド1)は、ステップS73において、I/Oマネージャ54に対して、デコード(1)用SGLのコモンバッファコピー要求を行う。これに対応して、I/Oマネージャ54は、ステップS95において、デコード(1)用SGLコピーを行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0105】
デコード(2)用コモンバッファ作成完了通知を受けると、デバイスドライバ55(スレッド2)は、ステップS113において、I/Oマネージャ54に対して、デコード(2)用SGLのコモンバッファコピー要求を行う。これに対応して、I/Oマネージャ54は、ステップS96において、デコード(2)用SGLコピーを行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0106】
デコード(1)用SGLコピー完了通知を受けると、デバイスドライバ55(スレッド1)は、ステップS74において、I/Oマネージャ54に対して、デコード(1)用コモンバッファ構造体キューイング要求を行う。これに対応して、I/Oマネージャ54は、ステップS97において、キュー71に、デコード(1)用キューイングを行い、その完了をデバイスドライバ55(スレッド1)に通知する。
【0107】
デコード(2)用SGLコピー完了通知を受けると、デバイスドライバ(スレッド2)は、ステップS114において、I/Oマネージャ54に対して、デコード(2)用コモンバッファ構造体キューイング要求を行う。これに対応して、I/Oマネージャ54は、ステップS98において、キュー71に、デコード(2)用キューイングを行い、その完了をデバイスドライバ55(スレッド2)に通知する。
【0108】
デコード(1)用キューイング完了通知を受けると、デバイスドライバ55(スレッド1)は、即時に、ステップS75において、DMAコントローラ23に対して、デコード(1)用データDMAを実行する。具体的には、デバイスドライバ55(スレッド1)は、キュー71に積まれたコモンバッファ構造体を用い、コモンバッファ構造体を参照して、デコード(1)用データDMAの実行を、DMAコントローラ23のRxレジスタ41に仕掛ける。
【0109】
また、それとほぼ同時に、デバイスドライバ55(スレッド1)は、ステップS76において、デコード(1)実行コマンドをファームウエア31に対して発行する。
【0110】
DMAコントローラ23は、デバイスドライバ55(スレッド1)からのDMAの実行に対して、Rxレジスタ41を用いて、メモリ24へのデコード(1)用データ転送を行う。デコード(1)用データ転送が完了すると、DMAコントローラ23は、ステップS131において、Rxレジスタ41でのデータ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0111】
図10の例においては図示されないが、Rxレジスタ41でのデータ転送完了に対応して、デバイスドライバ55(スレッド1)は、キュー71から、デコード(1)用のコモンバッファ構造体をプッシュする(図7のステップS26)。
【0112】
また、Rxレジスタ41でのデータ転送完了を受けると、Rxレジスタ41における次のDMA実行が可能になるため、デバイスドライバ55(スレッド2)は、ステップS115において、DMAコントローラ23に対して、デコード(2)用データDMAを実行する。具体的には、デバイスドライバ55(スレッド2)は、キュー71に積まれたコモンバッファ構造体を用い、コモンバッファ構造体を参照して、デコード(2)用データDMAの実行を、DMAコントローラ23のRxレジスタ41に仕掛ける。
【0113】
DMAコントローラ23は、デバイスドライバ55(スレッド2)からのDMAの実行に対して、Rxレジスタ41を用いて、メモリ24へのデコード(2)用データ転送を行う。デコード(2)用データ転送が完了すると、DMAコントローラ23は、ステップS132において、Rxレジスタ41でのデータ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0114】
図10の例においては図示されないが、Rxレジスタ41でのデータ転送完了に対応して、デバイスドライバ55(スレッド2)は、キュー71から、デコード(2)用のコモンバッファ構造体をプッシュする(図7のステップS26)。
【0115】
一方、ファームウエア31は、デバイスドライバ55(スレッド1)からのデコード(1)実行コマンドを受信すると、ステップS151において、デコード部21にデコード(1)処理を実行させる。デコード部21は、メモリ24のデコード(1)用データを読み出し、デコードして、デコードしたデータを、再度メモリ24に書き込む。デコード部21がデコード(1)処理を完了すると、ファームウエア31は、ステップS152において、デコード(1)処理完了を、デバイスドライバ55(スレッド1およびスレッド2)並びに編集アプリケーション51に通知する。
【0116】
デコード(1)処理完了通知を受けると、デバイスドライバ55(スレッド2)は、ステップS116において、デコード(2)実行コマンドをファームウエア31に対して発行する。デバイスドライバ55(スレッド2)からのデコード(2)実行コマンドを受信すると、ファームウエア31は、ステップS153において、デコード部21にデコード(2)処理を実行させる。
【0117】
一方、デコード(1)処理完了通知を受けると、編集アプリケーション51は、ステップS53において、デバイスドライバ55(スレッド1)に対して、デコード(1)用結果取得要求を行う。
【0118】
これに対応して、デバイスドライバ55(スレッド1)は、ステップS77において、DMAコントローラ23に対して、デコード(1)用結果データ取得DMAを実行する。具体的には、デバイスドライバ55(スレッド1)は、デコード(1)用結果データ取得DMAの実行を、DMAコントローラ23のTxレジスタ42に仕掛ける。
【0119】
なお、Txレジスタ42の場合も、DMA実行の前(点線に示される)に、Rxレジスタ41の場合と同様に、デバイスドライバ55(スレッド1)およびI/Oマネージャ54間で行われるSGL作成およびコモンバッファ構造体のキューイングを行うようにしてもよい。すなわち、ステップS77の処理の前にも、ステップS71乃至S74と、それに対応するステップS91,S93,S95,S97と同様の処理を行うことが可能である。
【0120】
DMAコントローラ23は、デバイスドライバ55(スレッド1)からのDMAの実行に対して、Txレジスタ42を用いて、デバイスドライバ55(スレッド1)に対して、メモリ24からのデコード(1)用結果データ転送を行う。デコード(1)用結果データ転送が完了すると、DMAコントローラ23は、ステップS133において、Txレジスタ42での結果データ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0121】
結果データ転送完了をDMAコントローラ23から受けると、デバイスドライバ55(スレッド1)は、ステップS78において、編集アプリケーション51に対して、デコード(1)用結果データを供給する。これにより、編集アプリケーション51においては、デコード(1)用結果データが取得される。
【0122】
また、ステップS153において、デコード部21は、メモリ24のデコード(2)用データを読み出し、デコードして、デコードしたデータを、再度メモリ24に書き込む。デコード部21がデコード(2)処理を完了すると、ファームウエア31は、ステップS154において、デコード(2)処理完了を、デバイスドライバ55(スレッド1およびスレッド2)並びに編集アプリケーション51に通知する。
【0123】
このデコード(2)処理完了通知を受けると、編集アプリケーション51は、ステップS54において、デバイスドライバ55(スレッド2)に対して、デコード(2)用結果取得要求を行う。
【0124】
これに対応して、デバイスドライバ55(スレッド2)は、ステップS117において、DMAコントローラ23に対して、デコード(2)用結果データ取得DMAを実行する。具体的には、デバイスドライバ55(スレッド2)は、デコード(2)用結果データ取得DMAの実行を、DMAコントローラ23のTxレジスタ42に仕掛ける。
【0125】
なお、Txレジスタ42の場合も、DMA実行の前(点線に示される)に、Rxレジスタ41の場合と同様に、デバイスドライバ55(スレッド2)およびI/Oマネージャ54間で行われるSGL作成およびコモンバッファ構造体のキューイングを行うようにしてもよい。すなわち、ステップS77の処理の前にも、ステップS111乃至S114と、それに対応するステップS92,S94,S96,S98と同様の処理を行うことが可能である。
【0126】
DMAコントローラ23は、デバイスドライバ55(スレッド2)からのDMAの実行に対して、Txレジスタ42を用いて、デバイスドライバ55(スレッド2)に対して、メモリ24からのデコード(2)用結果データ転送を行う。デコード(2)用結果データ転送が完了すると、DMAコントローラ23は、ステップS134において、Txレジスタ42での結果データ転送完了を、デバイスドライバ55(スレッド1およびスレッド2)に通知する。
【0127】
結果データ転送完了をDMAコントローラ23から受けると、デバイスドライバ55(スレッド2)は、ステップS118において、編集アプリケーション51に対して、デコード(2)用結果データを供給する。これにより、編集アプリケーション51においては、デコード(2)用結果データが取得される。
【0128】
なお、図9および図10の例においては、デコード(1)用データ転送準備と並行して、デコード(2)用データ転送準備を行う例を説明したが、処理の例はこれに限らない。例えば、デコード(1)用データ転送準備が完了され、デコード(1)用データが転送されている間に、デコード(2)用データ転送準備を行うことも可能である。
【0129】
以上のように、編集アプリケーション51からのデコード要求毎に、SGLを作成し、コモンバッファ構造体自体をキューイングするようにしたので、復号ハードウエア11がデコード処理を行っている間に次のデコード用データを、メモリに転送することができる。
【0130】
なお、アプリケーションでのキューイング機構の利用は、図2を参照して上述したように、主に実行コマンドをキューイングすることが一般的である。これに対して、本発明においては、DMAを実行するためのメモリ管理データ(コモンバッファ構造体)をキューイングすることを特徴としている。
【0131】
すなわち、予め用意されたDMA実行用データのキューイングを行い、かつ、そのデータをデバイスドライバ内で管理することにより、復号ハードウエアからの実行トリガを受けると、即時に次のコマンド実行を行わせることが可能になる。これにより、図11に示されるような効果を得ることができる。
【0132】
[情報処理システムによる効果の説明]
次に、図11を参照して、パーソナルコンピュータ12と復号ハードウエア11とのデータ転送による効果について説明する。なお、図11の例においては、2つのデコード処理が連続で行われる例が示されている。
【0133】
また、図11の例において、上段には、パーソナルコンピュータ12上で動作する編集アプリケーション51の処理が示されている。中段には、パーソナルコンピュータ12上のデバイスドライバ55と、復号ハードウエア11間のデータ転送処理が示されている。下段には、復号ハードウエア11の処理が示されている。
【0134】
まず、編集アプリケーション51上でデコード(1)要求コマンドが発行されると、データ転送処理として、パーソナルコンピュータ12上の主記憶領域に置かれたデコード(1)用データの管理処理が行われる。その後、DMAコントローラ23のRxレジスタ41でのデコード(1)用データ転送が行われる。このデータ転送には、上述したSGLを用いたパケットDMA処理が使用される。
【0135】
編集アプリケーション51上では、デバイスドライバ55の処理を並列化(図9におけるスレッド処理化)することにより、デコード(1)要求コマンドの発行後、すぐにデコード(2)要求コマンドが発行される。これにより、データ転送処理として、デコード(1)用データ転送と並行して、パーソナルコンピュータ12上の主記憶領域に置かれたデコード(2)用データの管理処理を行うことができる。
【0136】
デコード(1)用データ転送が完了すると、デコード(1)用データ転送の完了通知がデバイスドライバ55に通知されるとともに、復号ハードウエア11においては、デコード(1)処理が実行される。
【0137】
デコード(2)用データの管理処理においては、SGL(すなわち、コモンバッファ構造体)のキューイングが行われている。これにより、デコード(1)用データ転送の完了通知がデバイスドライバ55で受信されると、即座に、DMAコントローラ23のRxレジスタ41でのデコード(2)用データ転送を行うことができる。
【0138】
また、DMAコントローラ23のRxレジスタ41とTxレジスタ42は、独立した制御が可能である。これにより、デコード(2)用データ転送中に、復号ハードウエア11におけるデコード(1)処理が終了したとしても、DMAコントローラ23のTxレジスタ42でのデコード(1)用結果データを転送することができる。
【0139】
さらに、デコード(1)用結果データ転送中に、デコード(2)用データ転送が完了し、編集アプリケーション51においては、デコード(1)結果が取得されるとともに、そのデコード(2)用データ転送完了が、デバイスドライバ55に対して通知される。
【0140】
復号ハードウエア11においては、デコード(2)処理が実行され、DMAコントローラ23のTxレジスタ42でのデコード(2)用結果データが転送され、編集アプリケーション51においては、デコード(2)結果が取得される。
【0141】
図3の情報処理システムにおいては、データ転送のためのパーソナルコンピュータ12の主記憶管理処理を行うことができるデバイスドライバ55において、データ転送管理を行うようにしたので、このようなデータ転送のパイプライン化を図ることができる。
【0142】
すなわち、デコード(1)処理を行っている間にデコード(2)用データ転送を行うことができるので、デコード用データ転送の効率が上がる。これにより、時間T11に示されるように、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの復号ハードウエア11におけるデコード処理実行間隔が、従来(図1および図2)に比して短縮される。
【0143】
その結果、編集アプリケーション51側からみた全体的な復号ハードウエア11におけるデコード処理時間を高速化することができる。
【0144】
また、デバイスドライバ55内での処理となるので、編集アプリケーション51へのデータ転送完了通知などのオーバヘッドを生じることがなくなるため、処理時間の短縮化を図ることができる。
【0145】
以上のように、本発明においては、アプリケーションからのデコード要求コマンドに対応して、データ転送時にパケットDMAで使用されるSGLが複数作成される。デバイスドライバにより、作成されたSGLがコモンバッファへ構築され、そのコモンバッファ構造体がキューイングされる。そして、データ転送完了が通知されると、デバイスドライバにより、作成されたコモンバッファ構造体が即座に次のデータ転送に利用される。
【0146】
これにより、復号ハードウエア上のメモリへ転送するデータの転送効率が向上され、デコード処理が高速化される。
【0147】
また、デバイスドライバにおいて、データ転送用のデータ管理処理がパイプライン処理により逐次実行することができる。これにより、処理のオーバヘッドが削減される。
【0148】
なお、上記説明においては、2つのデコード処理が連続で行われる例を説明したが、2つに限らず、本発明は、複数のデコード処理に適用することができる。
【0149】
また、上記説明においては、デコードを復号ハードウエアに行わせる例を説明したが、ハードウエアに行わせる処理は、デコードに限らず、エンコードであってもよいし、その他の処理であってもよい。例えば、パーソナルコンピュータで行うには演算能力を必要とするような重い処理を、接続されるハードウエアに行わせることにも本発明を適用することができる。
【0150】
また、パーソナルコンピュータとハードウエアのインタフェースは、PCIeに限らず、他のインタフェースであってもよい。
【0151】
上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウエアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な汎用のパーソナルコンピュータなどが含まれる。
【0152】
図12は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。すなわち、図3のパーソナルコンピュータ12は、図12に示すように構成される。
【0153】
コンピュータにおいて、CPU(Central Processing Unit)301、ROM(Read Only Memory)302、RAM(Random Access Memory)303は、バス304により相互に接続されている。
【0154】
バス304には、さらに、入出力インタフェース305が接続されている。入出力インタフェース305には、入力部306、出力部307、記憶部308、通信部309、およびドライブ310が接続されている。
【0155】
入力部306は、キーボード、マウス、マイクロフォンなどよりなる。出力部307は、ディスプレイ、スピーカなどよりなる。記憶部308は、ハードディスクや不揮発性のメモリなどよりなる。通信部309は、ネットワークインタフェースなどよりなる。ドライブ310は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブルメディア311を駆動する。
【0156】
以上のように構成されるコンピュータでは、CPU301が、例えば、記憶部308に記憶されているプログラムを入出力インタフェース305およびバス304を介してRAM303にロードして実行することにより、上述した一連の処理が行われる。
【0157】
コンピュータ(CPU301)が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア311に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供することができる。
【0158】
コンピュータでは、プログラムは、リムーバブルメディア311をドライブ310に装着することにより、入出力インタフェース305を介して、記憶部308にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部309で受信し、記憶部308にインストールすることができる。その他、プログラムは、ROM302や記憶部308に、あらかじめインストールしておくことができる。
【0159】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【0160】
本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【0161】
11 復号ハードウエア, 12 パーソナルコンピュータ, 22 CPU, 23 DMAコントローラ, 24 メモリ, 31 ファームウエア, 41 Rx レジスタ, 42 Tx レジスタ, 51 編集アプリケーション, 54 I/Oマネージャ, 55 デバイスドライバ, 56 ファイルシステムドライバ, 57 メモリマネージャ, 71 キュー
【特許請求の範囲】
【請求項1】
他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積む管理情報作成手段と、
前記管理情報作成手段により前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う
情報処理装置。
【請求項2】
前記管理情報作成手段は、前記他の情報処理装置が行うデコード処理に対して発行されるデコード要求コマンド毎に、前記管理リストを作成し、前記コモンバッファ構造体をキューに積む
請求項1に記載の情報処理装置。
【請求項3】
前記データ転送手段は、前記他の情報処理装置に対する前記次のデータ転送を、前記他の情報処理装置の一方のレジスタにより行い、前記他の情報処理装置からの、前記他の情報処理装置において前記所定の処理がなされた結果データの転送を、前記他の情報処理装置の他方のレジスタにより行う
請求項1に記載の情報処理装置。
【請求項4】
情報処理装置が、
他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積み、
前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う
ステップを含む情報処理方法。
【請求項1】
他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積む管理情報作成手段と、
前記管理情報作成手段により前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う
情報処理装置。
【請求項2】
前記管理情報作成手段は、前記他の情報処理装置が行うデコード処理に対して発行されるデコード要求コマンド毎に、前記管理リストを作成し、前記コモンバッファ構造体をキューに積む
請求項1に記載の情報処理装置。
【請求項3】
前記データ転送手段は、前記他の情報処理装置に対する前記次のデータ転送を、前記他の情報処理装置の一方のレジスタにより行い、前記他の情報処理装置からの、前記他の情報処理装置において前記所定の処理がなされた結果データの転送を、前記他の情報処理装置の他方のレジスタにより行う
請求項1に記載の情報処理装置。
【請求項4】
情報処理装置が、
他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積み、
前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う
ステップを含む情報処理方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2011−22877(P2011−22877A)
【公開日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願番号】特願2009−168438(P2009−168438)
【出願日】平成21年7月17日(2009.7.17)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ウィンドウズ
2.WINDOWS
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
【公開日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願日】平成21年7月17日(2009.7.17)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.ウィンドウズ
2.WINDOWS
【出願人】(000002185)ソニー株式会社 (34,172)
【Fターム(参考)】
[ Back to top ]