(57)【要約】【課題】デコード処理全体の時間を短縮することができるようにする。【解決手段】デコード(1)の要求コマンドが送信されたと判定されると、デバイスドライバにデコード(1)用データが通知される。デバイスドライバは、デコード(1)用SGLを作成するとともに、デコード(1)用のコモンバッファ構造体を作成し、作成したデコード(1)用のコモンバッファ構造体をキュー７１に積む。デコード(1)用データの転送完了通知を復号ハードウエアから受け取ると、デバイスドライバは、デコード(1)用のコモンバッファ構造体をキュー７１からプッシュする。本発明は、パーソナルコンピュータが、デコード用データを、PCIeスロットで接続される復号ハードウエアに供給してデコード処理させる情報処理システムに適用することができる。【選択図】図８
2011022877.tif 000002
【特許請求の範囲】
【請求項１】
他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積む管理情報作成手段と、
前記管理情報作成手段により前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う
情報処理装置。
【請求項２】
前記管理情報作成手段は、前記他の情報処理装置が行うデコード処理に対して発行されるデコード要求コマンド毎に、前記管理リストを作成し、前記コモンバッファ構造体をキューに積む
請求項１に記載の情報処理装置。
【請求項３】
前記データ転送手段は、前記他の情報処理装置に対する前記次のデータ転送を、前記他の情報処理装置の一方のレジスタにより行い、前記他の情報処理装置からの、前記他の情報処理装置において前記所定の処理がなされた結果データの転送を、前記他の情報処理装置の他方のレジスタにより行う
請求項１に記載の情報処理装置。
【請求項４】
情報処理装置が、
他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積み、
前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う
ステップを含む情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および方法に関し、特に、デコード処理全体の時間を短縮することができるようにした情報処理装置および方法に関する。
【背景技術】
【０００２】
従来、MPEG（Moving Picture Experts Group）と呼ばれる符号化方式により動画像を符号化して得られた符号化ストリームを復号する復号装置がある。規格化されてきたMPEGシリーズの中ではMPEG2が一般的ではあるが、最近では圧縮率を高めたMPEG4や、AVC（Advanced Video Coding）といった圧縮符号化方式も規格化されている。
【０００３】
このような符号化ストリームを復号する場合、例えば、マイクロコンピュータなど一般的なＣＰＵを用いる方法がある（特許文献１参照）。
【０００４】
これに対して、パーソナルコンピュータにおいて符号化ストリームを復号する場合、例えば拡張ボード等によってパーソナルコンピュータに増設された、ハードウエアで構成される復号器（デコードハードウェア）を用いて復号する方法がある。
【０００５】
この方法においては、パーソナルコンピュータは、符号化ストリームを復号する必要が生じたときに、その符号化ストリームを復号器に供給する。復号器は、パーソナルコンピュータから符号化ストリームを取得するとそれを復号し、ベースバンドのデータをパーソナルコンピュータに返す。
【０００６】
以上のように、この方法の場合、パーソナルコンピュータと復号器の間でデータやコマンドの転送を行う必要がある。
【０００７】
図１を参照して、パーソナルコンピュータと復号器とのデータ転送の第１の方法について説明する。なお、図１の例においては、２つのデコード処理が連続で行われる例が示されている。
【０００８】
図１の上段には、パーソナルコンピュータ上で動作するアプリケーションの処理が示されている。中段には、パーソナルコンピュータ上のデバイスドライバと復号器間のデータ転送処理が示されている。下段には、復号器の処理が示されている。以下、図面の丸数字は、括弧付き数字で置き換えて説明する。
【０００９】
まず、アプリケーション上でデコード(1)要求コマンドが発行されると、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(1)用データの管理処理が行われ、復号器に対して、デコード(1)用データ転送が行われる。
【００１０】
デコード(1)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(1)用データ転送完了通知が行われ、復号器においてデコード(1)処理が開始される。
【００１１】
復号器でのデコード(1)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(1)用結果データ転送が行われる。アプリケーション上では、そのデコード(1)用結果データが取得された後で、次のデコード(2)要求コマンドが発行される。
【００１２】
その後、デコード(1)の処理と同様に、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(2)用データの管理処理が行われ、復号器に対してデコード(2)用データ転送が行われる。
【００１３】
デコード(2)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(2)用データ転送完了通知が行われ、復号器において、デコード(2)処理が開始される。
【００１４】
復号器でのデコード(2)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(2)用結果データ転送が行われる。
【００１５】
このように、第１の方法においては、復号器によるデコードの完了を待ってから、次のデコード要求が行われる。このため、第１の方法においては、データ転送処理における、デコード(1)用データ転送完了通知を行ってから、次のデコード(2)用データの管理処理を行うまでの時間Ｔ１に、タイムラグが生じていた。
【００１６】
この結果、復号器においては、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの時間Ｔ２に示されるように、高速で動作するデコード処理を実行する時間間隔が大幅に開いてしまい、全体的なデコード処理時間の短縮を行うことが困難であった。
【００１７】
次に、図２を参照して、パーソナルコンピュータと復号器とのデータ転送の第２の方法について説明する。なお、図２の例においても、図１の例と同様に、２つのデコード処理が連続で行われる例が示されている。
【００１８】
まず、アプリケーション上でデコード(1)要求コマンドが発行されると、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(1)用データの管理処理が行われ、復号器に対して、デコード(1)用データ転送が行われる。
【００１９】
このとき、アプリケーション上においては、アプリケーション上に設けられたデコード要求コマンドを複数回実行可能にする機構（コマンドキューイング）により、次のデコード(2)要求コマンドがキューイングされる。
【００２０】
デコード(1)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(1)用データ転送完了通知が行われ、復号器においてデコード(1)処理が開始される。
【００２１】
また、アプリケーションに対するデコード(1)用データ転送完了通知も行われ、アプリケーション上においては、キューイングされていた次のデコード(2)要求コマンドが、デコード(2)用結果データの取得を待たずに発行される。
【００２２】
これに対応して、デバイスドライバにおいて、パーソナルコンピュータ上の主記憶領域に置かれたデコード(2)用データの管理処理が行われる。
【００２３】
一方、復号器でのデコード(1)処理が完了すると、データ転送処理として、パーソナルコンピュータに対してデコード(1)用結果データ転送が行われ、アプリケーション上では、デコード(1)用結果データが取得される。
【００２４】
デコード(1)用結果データ転送後、デコード(2)用データの管理処理が終了すると、すぐに、復号器に対して、デコード(2)用データ転送が行われる。
【００２５】
デコード(2)用データ転送が終了すると、デバイスドライバから、復号器に対してデコード(2)用データ転送完了通知が行われ、復号器においてデコード(2)処理が開始される。復号器でのデコード(2)処理が完了すると、データ転送処理として、アプリケーションに対してデコード(2)用結果データ転送が行われる。
【００２６】
このように、第２の方法においては、アプリケーションによるデコードコマンドキューイングなどが用いられる。これにより、デコード(1)用結果データ転送の間に、次のデコード(2)要求コマンドによるデコード(2)用データ完了処理を行い、その後、すぐに、デコード(2)用データ転送を開始することが可能になる。しかしながら、先のデコード(1)処理の間には、次のデコード(2)用データ転送を行うことは困難であった。
【００２７】
この結果、第２の方法の復号器においても、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの時間Ｔ３に示されるように、デコード処理を実行する時間間隔が大幅に開いてしまい、全体的なデコード処理時間の短縮が難しかった。
【００２８】
さらに、パーソナルコンピュータと復号器とのデータ転送の第３の方法を説明する。復号器上に搭載されるDMAC(Direct Memory Access Controller)は、１つのデータ転送方向（DMA ChannelまたはDMA Adapterと称する）に対し、RxとTxといった個別の制御レジスタを有している。
【００２９】
DMA上の各制御レジスタは、１方向のデータ転送中は、その方向におけるデータ転送が不可能であるが、逆方向のデータ転送は可能である。第３の方法においては、その制御レジスタで、１回のデータ転送要求につき、１つのSGL(Scatter Gather List)が作成され、コモンバッファへのコピーが行われてから、データ転送が行われる。
【００３０】
すなわち、第３の方法においては、デバイスドライバがアプリケーションからデータ要求を受信後に、データ転送に必要となるデータ管理処理（SGLの作成とコモンバッファへのコピー）を行っていた。この結果、データ転送のための前処理に要する時間がボトルネックとなっていた。
【先行技術文献】
【特許文献】
【００３１】
【特許文献１】特開２００８−８５６１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００３２】
以上のように、従来においては、復号器のデコードがいくら高速化されても、データ転送時間がボトルネックとなり、全体的なデコード処理時間の短縮を行うことが困難であった。したがって、デコード処理全体の高速化の効果を得ることが困難であった。
【００３３】
本発明はこのような状況に鑑みてなされたものであり、デコード処理全体の時間を短縮することができるようにするものである。
【課題を解決するための手段】
【００３４】
本発明の一側面の情報処理装置は、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積む管理情報作成手段と、前記管理情報作成手段により前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行う。
【００３５】
前記管理情報作成手段は、前記他の情報処理装置が行うデコード処理に対して発行されるデコード要求コマンド毎に、前記管理リストを作成し、前記コモンバッファ構造体をキューに積むことができる。
【００３６】
前記データ転送手段は、前記他の情報処理装置に対する前記次のデータ転送を、前記他の情報処理装置の一方のレジスタにより行い、前記他の情報処理装置からの、前記他の情報処理装置において前記所定の処理がなされた結果データの転送を、前記他の情報処理装置の他方のレジスタにより行うことができる。
【００３７】
本発明の一側面の情報処理方法は、情報処理装置が、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストを作成し、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体をキューに積み、前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送を行い、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体を解放するとともに、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送を行うステップを含む。
【００３８】
本発明の一側面においては、他の情報処理装置が行う所定の処理に対して発行される要求コマンドに対応して、必要な主記憶上のデータの管理リストが作成され、前記管理リストを含む、仮想メモリ空間と物理メモリ空間の関連付けがなされたコモンバッファ構造体がキューに積まれる。そして、前記キューに積まれた前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、データ転送が行われ、それに対応して前記他の情報処理装置から送られてくる前記データ転送の完了通知を受けた場合、前記キューから、前記データ転送に対応する前記コモンバッファ構造体が解放され、前記キューに積まれた次の前記コモンバッファ構造体を用いて、前記他の情報処理装置に対して、次のデータ転送が行われる。
【発明の効果】
【００３９】
本発明によれば、デコード処理全体の時間を短縮することができる。
【図面の簡単な説明】
【００４０】
【図１】従来のデバイスドライバと復号器間のデータ転送の例を説明する図である。
【図２】従来のデバイスドライバと復号器間のデータ転送の他の例を説明する図である。
【図３】本発明を適用した情報処理システムの構成例を示すブロック図である。
【図４】図２のパーソナルコンピュータにおけるモジュール構成例を示すブロック図である。
【図５】メモリアーキテクチャを説明する図である。
【図６】SGLを用いたDMA処理を説明するフローチャートである。
【図７】SGLのキューイング処理を説明するフローチャートである。
【図８】SGLのキューイング処理を説明する図である。
【図９】図３の情報処理システムのデコード処理を説明するフローチャートである。
【図１０】図３の情報処理システムのデコード処理を説明するフローチャートである。
【図１１】図３の情報処理システムによる効果を説明する図である。
【図１２】コンピュータのハードウエアの構成例を示すブロック図である。
【発明を実施するための形態】
【００４１】
［ハードウエアの構成例］
図３は、本発明を適用した情報処理システムの一実施形態の構成例を示すブロック図である。
【００４２】
図３に示される情報処理システムは、パーソナルコンピュータ１２が、デコード用データ（圧縮ビデオデータ）を、図示せぬPCIe(PCI express)スロットに接続される復号ハードウエア１１に供給してデコード処理させ、デコード結果データ（非圧縮ビデオデータ）を取得するシステムである。
【００４３】
デコード用データは、例えば、MPEG（Moving Picture Experts Group）2、MPEG4、またはAVC（Advanced Video Coding）などの圧縮符号化方式で圧縮符号化されている。
【００４４】
復号ハードウエア１１は、PCIeボード、あるいはカセット型のPCIeハードウエアユニットなどで構成される。復号ハードウエア１１は、デコード部２１、CPU(Central Processing Unit)２２、DMA (Direct Memory Access)コントローラ２３、およびメモリ２４を含むように構成される。
【００４５】
デコード部２１は、デコードIC(Integrated Circuit)などで構成される。デコード部２１は、CPU２２上で動作するファームウエア３１の制御のもと、メモリ２４に記憶されたデコード用データを、上述した圧縮符号化方式に対応する方式でデコードし、デコード結果データをメモリ２４に記憶させる。
【００４６】
CPU２２上には、専用ソフトウエアであるファームウエア３１が動作している。ファームウエア３１は、パーソナルコンピュータ１２からのデコード要求コマンドを受信し、デコード部２１の制御を行う。
【００４７】
DMAコントローラ２３は、パーソナルコンピュータ１２と復号ハードウエア１１間のデータ転送を制御する。DMAコントローラ２３は、パーソナルコンピュータ１２から、メモリ２４へのデータ転送を行う制御レジスタであるRxレジスタ４１と、メモリ２４から、パーソナルコンピュータ１２へのデータ転送を行う制御レジスタであるTxレジスタ４２を有している。
【００４８】
Rxレジスタ４１とTxレジスタ４２は、１つずつDMAコントローラ２３に搭載されているため、１方向のデータ転送中は、逆方向へのデータ転送は可能であるが、同じ方向へのデータ転送が不可能である。例えば、パーソナルコンピュータ１２から、メモリ２４へのデータ転送中は、Rxレジスタ４１が使用中であるので、逆方向のTxレジスタ４２を使用することはできるが、Rxレジスタ４１での次のデータ転送はできない。
【００４９】
メモリ２４は、DMAコントローラ２３の制御により、パーソナルコンピュータ１２と復号ハードウエア１１の間でデータのハンドリングを行う。また、メモリ２４は、デコード部２１との間で、圧縮または非圧縮データのハンドリングが可能である。
【００５０】
パーソナルコンピュータ１２は、ユーザによる図示せぬ入力部の操作に応じて、デコード要求コマンドを発行し、ファームウエア３１に対して送信する。パーソナルコンピュータ１２は、デコード用データを、Rxレジスタ４１を介して、メモリ２４に送信し、メモリ２４のデコード結果データを、Txレジスタ４２を介して受信する。
【００５１】
なお、パーソナルコンピュータ１２はパーソナルコンピュータで構成されるが、それに限らない。
【００５２】
［パーソナルコンピュータのモジュール構成例］
図４は、パーソナルコンピュータにおけるモジュール構成例を示している。
【００５３】
図４の例においては、パーソナルコンピュータ１２の図示せぬCPU上で動作する、ユーザモードレイヤ(User Mode Layer)、カーネルモードレイヤ(Kernel Mode Layer) 、およびハードウエアレイヤ(Hardware Layer)のすべてのモジュールが示されている。なお、それらのモジュールのうち、本発明に関するモジュールは実線で示されており、それ以外については点線で示されている。したがって、図４の例においては、本発明に関するモジュールのみ符号を付して、デコード結果作成までの流れのみ説明する。
【００５４】
ユーザモードレイヤは、アプリケーションレイヤ（Application Layer）とアプリケーションインタフェースレイヤ(API Layer)で構成される。アプリケーションインタフェースレイヤは、さらに、アプリケーションインタフェース(Application Interface)と、ドライバアクセスインタフェース(Driver Access Interface)により構成されている。
【００５５】
また、カーネルモードレイヤは、ウインドウズエグザクティブサービス(Windows Executive Service)で構成される。ウインドウズエグザクティブサービスは、OSであるウインドウズシステムサービス(Windows System Services)と、OS上で動作するI/Oマネージャ(I/O Manager)５４やメモリマネージャ(Memory Manager)５７などの各モジュールで構成されている。
【００５６】
ハードウエアレイヤは、図３の復号ハードウエア１１で構成されている。
【００５７】
アプリケーションレイヤにおける編集アプリケーション(Editing Application)５１は、GUI(Graphical User Interface)機能を有している。編集アプリケーション５１は、GUI機能を介して入力されるユーザの操作に応じて、アプリケーションインタフェース（のApplicationIF.dll）５２に対してデコード要求コマンドを発行する。なお、編集アプリケーションを例に説明するが、もちろん、他のアプリケーションでもよい。
【００５８】
アプリケーションインタフェース５２は、I/Oマネージャ５４のファイルシステムドライバ(File System Driver)５６に対し、パーソナルコンピュータ１２上に搭載される、図示せぬ補助記憶装置(HDD)より、デコードを必要とする圧縮ビデオデータを取得する。アプリケーションインタフェース５２は、OS上のメモリマネージャ５７により、取得した圧縮ビデオデータを、図示せぬ主記憶装置（システムメモリ）（以下、主記憶とも称する）にコピーする。
【００５９】
アプリケーションインタフェース５２は、また、ドライバアクセスインタフェース（のDriverIF.dll）５３に、システムメモリ上にコピーされたデータのアドレスとデコード要求コマンドを発行する。ドライバアクセスインタフェース５３は、I/Oマネージャ５４を構成するモジュールの１つであるデバイスドライバ(Device Driver)５５に対し、システムメモリ上にコピーされたデータのアドレスとデコード要求コマンドを発行する。
【００６０】
デバイスドライバ５５は、OS上で動作するI/Oマネージャ５４に、主記憶上にコピーされたデータの管理リスト(Scatter Gather List:SGL)を作成する。デバイスドライバ５５は、SGLの作成後、DMAの制御が可能である合間を見て、DMAにより、データ転送処理要求をDMAコントローラ２３に対して行う。また、デバイスドライバ５５は、メモリ２４への圧縮ビデオデータの転送後、すぐに、CMD I/F Accessにより、ファームウエア３１に対してデコード要求コマンドを発行する。
【００６１】
DMAコントローラ２３は、デバイスドライバ５５から通知されたパーソナルコンピュータ１２上の主記憶のアドレス（物理アドレス）が格納されるSGLを利用し、圧縮ビデオデータを、復号ハードウエア１１のメモリ２４に転送する。
【００６２】
ファームウエア３１は、デコード部２１に対し、デコード処理を要求する。デコード部２１は、メモリ２４上から圧縮ビデオデータを読み取って、デコード処理を行い、結果として得られる非圧縮ビデオデータをメモリ２４に書き込む。
【００６３】
[メモリアーキテクチャの説明]
まず、図５を参照して、パーソナルコンピュータにおけるメモリアーキテクチャについて説明する。
【００６４】
図５の例においては、一番左に、仮想メモリ空間における仮想メモリアドレス「0x00000000」乃至「0x7FFFFFFF」のユーザ空間および仮想メモリアドレス「0x80000000」乃至「0xFFFFFFFF」のシステム空間が示されている。その右側には、仮想メモリ空間におけるシステム空間の詳細が示されている。システム空間の詳細の右側の上部には、システム空間における仮想アドレス「0x88C25EA8」から始まる領域に含まれるコモンバッファ構造体の詳細が示されている。
【００６５】
コモンバッファ構造体の詳細の下部には、システム空間における仮想アドレス「0xA1B33200」乃至「0xA1B31FF」に配置されるSGL実体の詳細が示されている。さらに、その右側には、物理メモリ空間上の、SGLが含まれるコモンバッファと、データバッファが示されており、一番右側には、コモンバッファMDLの詳細が示されている。
【００６６】
物理メモリ空間上のアドレスは、パーソナルコンピュータ１２に接続される復号ハードウエア１１からアクセス可能となっている。物理メモリ空間は、OSのカーネル内で動作するデバイスドライバ５５からアドレスを取得することは可能である。しかしながら、デバイスドライバ５５は、物理メモリ空間への直接制御を行うことはできず、デバイスドライバ５５も、編集アプリケーション５１と同様に、仮想メモリ空間上のアドレスを使用して、物理メモリ空間の制御を行う。
【００６７】
ここで、デバイスドライバ５５からの物理メモリ空間のアドレス取得とは、次のように行われる。すなわち、OS内のI/Oマネージャ５４で管理されるMemory Descriptor List(MDL)が、物理メモリ空間アドレスと仮想メモリ空間アドレスの関連付けをリスト化している。したがって、デバイスドライバ５５は、MDLの中身を見ることで、どの物理メモリ空間アドレスが仮想メモリ空間にマッピングされているのかを理解することができる。
【００６８】
[SGLを用いたDMA処理の説明]
このようなアーキテクチャを踏まえ、図６のフローチャートを参照して、本発明に関するデータ転送方法として用いられるSGLを用いた一般的なDMA処理について説明する。なお、図６の処理に沿って、図５に示されたメモリアーキテクチャも適宜参照される。
【００６９】
図６のステップＳ１において、編集アプリケーション５１は、主記憶へデータを格納するためのデータバッファを、仮想メモリ空間のユーザ空間に配置（アロケート）する。これにより、図５のＡ１に示されるように、仮想メモリ空間のユーザ空間の「0x013A0000」乃至「0x01B9FFFF」の仮想メモリアドレスに、8Mbytesのデータバッファが配置される。
【００７０】
ステップＳ２において、OS内のメモリマネージャ５７は、仮想メモリ空間のユーザ空間に配置されたデータバッファを、主記憶上の物理メモリ空間に最小４KBytes単位で分散して配置する。これにより、図５のＡ２に示されるように、主記憶の物理メモリ空間には、データバッファが、データバッファ１乃至Ｘとして分散されて配置される。
【００７１】
デバイスドライバ５５は、ステップＳ３において、I/Oマネージャ５４に対し、分散されたデータバッファの各バッファポインタ（物理メモリ空間アドレス）とバッファサイズを格納したリストであるSGLの作成を要求する。これに対応して、I/Oマネージャ５４により、図５のＡ３に示されるように、各8Bytesのデータバッファ１ポインタ、データバッファ１サイズ、…、データバッファＸポインタ、データバッファＸサイズからなるSGLが作成される。
【００７２】
ステップＳ４において、I/Oマネージャ５４は、SGLがデバイスドライバ５５からアクセス可能となるように、SGLの実体を仮想メモリ空間（のシステム空間）上に書き込む。これにより、図５のＡ４に示されるように、仮想メモリ空間のシステム空間の「0xA1B33200」乃至「0xA1B3B1FF」の仮想メモリアドレスに、最大32KbytesのSGL実体が配置される。
【００７３】
ここで、このSGLには、ハードウエアからアクセス可能な物理メモリ空間アドレスが格納されているものの、ステップＳ４において仮想メモリ空間に書き込まれていることから、SGLを復号ハードウエア１１から参照することができない。SGLを参照可能とするために、物理メモリ空間上にコモンバッファと呼ばれるパーソナルコンピュータ１２と復号ハードウエア１１との両者で参照可能なバッファを作成する必要がある。
【００７４】
ステップＳ５において、デバイスドライバ５５は、コモンバッファ作成のための構造体を用意し、仮想メモリ空間上の「0x88C25EA8」に配置する。コモンバッファ構造体は、図５のＡ５に示されるように、DMAアダプタポインタ、コモンバッファ実体の仮想アドレス(0x89F72000)、およびコモンバッファMDLアドレス(0x88C2D020)により構成される。
【００７５】
デバイスドライバ５５は、ステップＳ６において、コモンバッファを、主記憶上に連続領域として確保するように作成する。これにより、図６のＡ６に示されるように、主記憶上の物理メモリ空間の物理アドレス「0x09A00000」乃至「0x09A7FFFF」の連続領域に、SGLバッファ１乃至１２８が作成される。
【００７６】
そして、デバイスドライバ５５は、ステップＳ７において、コモンバッファにおける仮想メモリ空間と物理メモリ空間の関連付けのためのMDLを作成する。これにより、図６のＡ７に示されるように、SGLバッファ１乃至１２８を指し示すポインタまたはアドレスであるバッファ１ポインタ乃至バッファ１２８ポインタで構成されるコモンバッファMDLが作成される。このコモンバッファMDLは、コモンバッファ構造体に含まれるコモンバッファMDLアドレス「0x88C2D020」（システム空間内）に配置される。
【００７７】
このように、コモンバッファは、連続したアドレッシングであり、かつ、物理メモリ空間上に配置されることから、復号ハードウエア１１は、容易にコモンバッファ内のデータを参照することができる。
【００７８】
ステップＳ８において、デバイスドライバ５５は、ステップＳ４において仮想メモリ空間に配置されたSGLを、コモンバッファ実体にコピーを行う。ただし、デバイスドライバ５５は、仮想メモリ空間への制御しか許されていないため、コピー時のアドレスとして、仮想メモリ空間アドレスを使用する。なお、コモンバッファが仮想メモリ空間へデータコピーされることで、物理メモリ空間上のアドレスにも同様のデータが配置されることになる。
【００７９】
すなわち、SGL実体（Ａ４）が、図５のＡ８に示されるように、システム空間における仮想メモリアドレス「0x89F72000」乃至「0x8A771FFF」のコモンバッファ実体（512Kbytes）にコピーされる。コモンバッファ構造体（Ａ５）を参照することで、SGL実体（Ａ４）は、コモンバッファ実体の仮想アドレスに対応する、物理メモリ空間上のコモンバッファ（Ａ６）にも配置される。
【００８０】
そこで、ステップＳ９において、デバイスドライバ５５は、図５のＡ９に示される、物理メモリ空間上のコモンバッファの物理アドレス「0x09A00000」乃至「0x09A7FFFF」を、復号ハードウエア１１のDMAコントローラ２３に通知する。これにより、DMAコントローラ２３は、SGL内の物理メモリ空間上に置かれたアプリケーションデータバッファの中身を参照することが可能となる。
【００８１】
ステップＳ１０において、DMAコントローラ２３は、これらの物理アドレス（Ａ９）を使用して、復号ハードウエア１１内のメモリ２４へのデータ転送を行う。
【００８２】
以上が、一般的なDMAの制御処理である。これに対して、本発明においては、次に説明するように、この制御処理中のコモンバッファへのSGLの格納（ステップＳ８）を、デコード要求コマンドが発行されたタイミングで行うことを特徴としている。また、本発明においては、コマンドが連続して発行された場合には、複数のコモンバッファの作成を行い、かつ、コモンバッファ構造体をキューイングすることにより、DMAのための準備を予め行うことを特徴としている。
【００８３】
［SGLのキューイング処理の説明］
次に、図７のフローチャートを参照して、SGLのキューイング処理について説明する。この処理は、デバイスドライバ５５によりデータ（スレッド）毎に行われる処理である。なお、図７の処理に沿って、図８も適宜参照される。以下、図面の丸数字は、括弧付き数字で置き換えて説明する。
【００８４】
図８の例においては、左側から、編集アプリケーション５１の処理、デバイスドライバ５５の処理、復号ハードウエア１１の処理が示されており、デバイスドライバ５５の処理に示されるキュー７１は、例えばI/Oマネージャ５４に内蔵される。
【００８５】
デバイスドライバ５５は、スレッド１として（以下、デバイスドライバ５５（スレッド１）と称する）、ステップＳ２１において、編集アプリケーション５１から、デコード要求コマンドが送信されるまで待機している。ステップＳ２１において、編集アプリケーション５１から、デコード(1)の要求コマンドが送信されたと判定されると、図８に示されるように、デバイスドライバ５５（スレッド１）にデコード(1)用データが通知され、処理は、ステップＳ２２に進む。
【００８６】
すなわち、編集アプリケーション５１から、デコード(1)の要求コマンドが送信されると、デコードに必要とするデータのアドレスがドライバアクセスインタフェース５３からデバイスドライバ５５（スレッド１）に通知される。これにより、デバイスドライバ５５においては、SGLの作成が可能となる。
【００８７】
デバイスドライバ５５（スレッド１）は、ステップＳ２２において、図８に示されるように、デコード(1)用SGLを作成するとともに、ステップＳ２３において、SGLをコモンバッファへのコピーを行うため、デコード(1)用のコモンバッファ構造体を作成する。図６を参照して上述したように、これにより、デコード(1)用のSGL、すなわち、デコード(1)用データが格納されたデコード(1)用のコモンバッファ構造体が作成される。
【００８８】
デバイスドライバ５５（スレッド１）は、ステップＳ２４において、作成したデコード(1)用のコモンバッファ構造体をキュー７１に積む（キューイングする）。
【００８９】
デコード(2)の場合も同様である。すなわち、編集アプリケーション５１から、ステップＳ２１において、デコード要求コマンドが送信されたと判定され、図８のデコード(2)用データが通知される。これに対応して、デバイスドライバ５５は、スレッド２として、（以下、デバイスドライバ５５（スレッド２）と称する）、図８に示されるように、ステップＳ２２において、デコード(2)用SGLを作成する。そして、デバイスドライバ５５（スレッド２）は、ステップＳ２３において、デコード(2)用のコモンバッファ構造体を作成する。これにより、デコード(2)用のSGL、すなわち、デコード(2)用データが格納されたデコード(2)用のコモンバッファ構造体が作成される。
【００９０】
デバイスドライバ５５（スレッド２）は、ステップＳ２４において、作成したデコード(2)用のコモンバッファ構造体をキュー７１に積む。これにより、キュー７１には、デコード(1)用のコモンバッファ構造体の上に、デコード(2)用のコモンバッファ構造体が積まれる。
【００９１】
なお、復号ハードウエア１１がコモンバッファ内のSGLによる物理メモリ空間アドレスを参照している可能性があるので、デバイスドライバ５５（スレッド１）は、ステップＳ２５において、デコード(1)用データの転送完了通知を受け取るまで、待機している。その間、デコード(1)用のコモンバッファ構造体は、キュー７１の中に保持される。
【００９２】
ステップＳ２５において、先のデコード(1)用データの転送完了通知が復号ハードウエア１１から受け取ったと判定されると、デバイスドライバ５５（スレッド１）は、SGLの参照がないものとして、処理は、ステップＳ２６に進む。デバイスドライバ５５（スレッド１）は、ステップＳ２６において、デコード(1)用のコモンバッファ構造体を、図８のキュー７１からプッシュして（追い出して）、デコード(1)用のコモンバッファ構造体の解放（＝コモンバッファ自体の解放）を行う。
【００９３】
次に、デコード(3)の場合も同様に、編集アプリケーション５１から、ステップＳ２１において、デコード要求コマンドが送信されたと判定され、図８のデコード(3)用データが通知される。これに対応して、デバイスドライバ５５は、スレッド３として（以下、デバイスドライバ５５（スレッド３）と称する）、図８に示されるように、ステップＳ２２において、デコード(3)用SGLを作成する。そして、デバイスドライバ５５（スレッド３）は、ステップＳ２３において、デコード(3)用のコモンバッファ構造体を作成する。図６を参照して上述したように、これにより、デコード(3)用のSGL、すなわち、デコード(3)用データが格納されたデコード(2)用のコモンバッファ構造体が作成される。
【００９４】
デバイスドライバ５５（スレッド３）は、ステップＳ２４において、作成したデコード(3)用のコモンバッファ構造体をキュー７１に積む。これにより、キュー７１には、デコード(1)用のコモンバッファ構造体の上に、デコード(3)用のコモンバッファ構造体が積まれる。
【００９５】
以降、図８の例においては、図示が省略されているが、次のデコード(2)用データの転送完了通知が復号ハードウエア１１から受信され、デコード(2)用データおよびデコード(3)用データについても、デコード(1)用データの場合と同様の処理が繰り返される。
【００９６】
すなわち、デバイスドライバ５５（スレッド２または３）は、ステップＳ２５において、デコード(2)または(3)用データの転送完了通知を受け取るまで待機している。
【００９７】
ステップＳ２５において、デコード(2)または(3)用データの転送完了通知が復号ハードウエア１１から受け取ったと判定されると、デバイスドライバ５５（スレッド２または３）は、SGLの参照がないものとして、処理は、ステップＳ２６に進む。そして、ステップＳ２６において、デコード(2)または(3)用のコモンバッファ構造体が、図８のキュー７１からプッシュされて、デコード(1)用のコモンバッファ構造体の解放（＝コモンバッファ自体の解放）が行われる。
【００９８】
［デコード処理の説明］
次に、図９および図１０のフローチャートを参照して、図３の情報処理システムによるデコード処理について説明する。
【００９９】
編集アプリケーション５１は、ステップＳ５１において、デバイスドライバ５５に対して、デコード(1)用要求を行い、ステップＳ５２において、デバイスドライバ５５に対して、デコード(2)用要求を行う。すなわち、編集アプリケーション５１は、連続してデコード要求コマンドの発行を行う。
【０１００】
デコード(1)用要求に対応して、デバイスドライバ５５は、スレッド１として（以下、デバイスドライバ５５（スレッド１）と称する）、ステップＳ７１において、I/Oマネージャ５４に対して、デコード(1)用SGL作成要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９１において、デコード(1)用SGL作成を行い、その完了をデバイスドライバ５５（スレッド１）に通知する。
【０１０１】
一方、デコード(2)用要求に対応して、デバイスドライバ５５は、スレッド２として（以下、デバイスドライバ５５（スレッド２）と称する）、ステップＳ１１１において、I/Oマネージャ５４に対して、デコード(2)用SGL作成要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９２において、デコード(2)用SGL作成を行い、その完了をデバイスドライバ５５（スレッド２）に通知する。
【０１０２】
デコード(1)用SGL作成完了通知を受けると、デバイスドライバ５５（スレッド１）は、ステップＳ７２において、I/Oマネージャ５４に対して、デコード(1)用コモンバッファ作成要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９３において、デコード(1)用コモンバッファ作成を行い、その完了をデバイスドライバ５５（スレッド１）に通知する。
【０１０３】
デコード(2)用SGL作成完了通知を受けると、デバイスドライバ５５（スレッド２）は、ステップＳ１１２において、I/Oマネージャ５４に対して、デコード(2)用コモンバッファ作成要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９４において、デコード(2)用コモンバッファ作成を行い、その完了をデバイスドライバ５５（スレッド２）に通知する。
【０１０４】
デコード(1)用コモンバッファ作成完了通知を受けると、デバイスドライバ５５（スレッド１）は、ステップＳ７３において、I/Oマネージャ５４に対して、デコード(1)用SGLのコモンバッファコピー要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９５において、デコード(1)用SGLコピーを行い、その完了をデバイスドライバ５５（スレッド１）に通知する。
【０１０５】
デコード(2)用コモンバッファ作成完了通知を受けると、デバイスドライバ５５（スレッド２）は、ステップＳ１１３において、I/Oマネージャ５４に対して、デコード(2)用SGLのコモンバッファコピー要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９６において、デコード(2)用SGLコピーを行い、その完了をデバイスドライバ５５（スレッド２）に通知する。
【０１０６】
デコード(1)用SGLコピー完了通知を受けると、デバイスドライバ５５（スレッド１）は、ステップＳ７４において、I/Oマネージャ５４に対して、デコード(1)用コモンバッファ構造体キューイング要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９７において、キュー７１に、デコード(1)用キューイングを行い、その完了をデバイスドライバ５５（スレッド１）に通知する。
【０１０７】
デコード(2)用SGLコピー完了通知を受けると、デバイスドライバ（スレッド２）は、ステップＳ１１４において、I/Oマネージャ５４に対して、デコード(2)用コモンバッファ構造体キューイング要求を行う。これに対応して、I/Oマネージャ５４は、ステップＳ９８において、キュー７１に、デコード(2)用キューイングを行い、その完了をデバイスドライバ５５（スレッド２）に通知する。
【０１０８】
デコード(1)用キューイング完了通知を受けると、デバイスドライバ５５（スレッド１）は、即時に、ステップＳ７５において、DMAコントローラ２３に対して、デコード(1)用データDMAを実行する。具体的には、デバイスドライバ５５（スレッド１）は、キュー７１に積まれたコモンバッファ構造体を用い、コモンバッファ構造体を参照して、デコード(1)用データDMAの実行を、DMAコントローラ２３のRxレジスタ４１に仕掛ける。
【０１０９】
また、それとほぼ同時に、デバイスドライバ５５（スレッド１）は、ステップＳ７６において、デコード(1)実行コマンドをファームウエア３１に対して発行する。
【０１１０】
DMAコントローラ２３は、デバイスドライバ５５（スレッド１）からのDMAの実行に対して、Rxレジスタ４１を用いて、メモリ２４へのデコード(1)用データ転送を行う。デコード(1)用データ転送が完了すると、DMAコントローラ２３は、ステップＳ１３１において、Rxレジスタ４１でのデータ転送完了を、デバイスドライバ５５（スレッド１およびスレッド２）に通知する。
【０１１１】
図１０の例においては図示されないが、Rxレジスタ４１でのデータ転送完了に対応して、デバイスドライバ５５（スレッド１）は、キュー７１から、デコード(1)用のコモンバッファ構造体をプッシュする（図７のステップＳ２６）。
【０１１２】
また、Rxレジスタ４１でのデータ転送完了を受けると、Rxレジスタ４１における次のDMA実行が可能になるため、デバイスドライバ５５（スレッド２）は、ステップＳ１１５において、DMAコントローラ２３に対して、デコード(2)用データDMAを実行する。具体的には、デバイスドライバ５５（スレッド２）は、キュー７１に積まれたコモンバッファ構造体を用い、コモンバッファ構造体を参照して、デコード(2)用データDMAの実行を、DMAコントローラ２３のRxレジスタ４１に仕掛ける。
【０１１３】
DMAコントローラ２３は、デバイスドライバ５５（スレッド２）からのDMAの実行に対して、Rxレジスタ４１を用いて、メモリ２４へのデコード(2)用データ転送を行う。デコード(2)用データ転送が完了すると、DMAコントローラ２３は、ステップＳ１３２において、Rxレジスタ４１でのデータ転送完了を、デバイスドライバ５５（スレッド１およびスレッド２）に通知する。
【０１１４】
図１０の例においては図示されないが、Rxレジスタ４１でのデータ転送完了に対応して、デバイスドライバ５５（スレッド２）は、キュー７１から、デコード(2)用のコモンバッファ構造体をプッシュする（図７のステップＳ２６）。
【０１１５】
一方、ファームウエア３１は、デバイスドライバ５５（スレッド１）からのデコード(1)実行コマンドを受信すると、ステップＳ１５１において、デコード部２１にデコード(1)処理を実行させる。デコード部２１は、メモリ２４のデコード(1)用データを読み出し、デコードして、デコードしたデータを、再度メモリ２４に書き込む。デコード部２１がデコード(1)処理を完了すると、ファームウエア３１は、ステップＳ１５２において、デコード(1)処理完了を、デバイスドライバ５５（スレッド１およびスレッド２）並びに編集アプリケーション５１に通知する。
【０１１６】
デコード(1)処理完了通知を受けると、デバイスドライバ５５（スレッド２）は、ステップＳ１１６において、デコード(2)実行コマンドをファームウエア３１に対して発行する。デバイスドライバ５５（スレッド２）からのデコード(2)実行コマンドを受信すると、ファームウエア３１は、ステップＳ１５３において、デコード部２１にデコード(2)処理を実行させる。
【０１１７】
一方、デコード(1)処理完了通知を受けると、編集アプリケーション５１は、ステップＳ５３において、デバイスドライバ５５（スレッド１）に対して、デコード(1)用結果取得要求を行う。
【０１１８】
これに対応して、デバイスドライバ５５（スレッド１）は、ステップＳ７７において、DMAコントローラ２３に対して、デコード(1)用結果データ取得DMAを実行する。具体的には、デバイスドライバ５５（スレッド１）は、デコード(1)用結果データ取得DMAの実行を、DMAコントローラ２３のTxレジスタ４２に仕掛ける。
【０１１９】
なお、Txレジスタ４２の場合も、DMA実行の前（点線に示される）に、Rxレジスタ４１の場合と同様に、デバイスドライバ５５（スレッド１）およびI/Oマネージャ５４間で行われるSGL作成およびコモンバッファ構造体のキューイングを行うようにしてもよい。すなわち、ステップＳ７７の処理の前にも、ステップＳ７１乃至Ｓ７４と、それに対応するステップＳ９１,Ｓ９３，Ｓ９５，Ｓ９７と同様の処理を行うことが可能である。
【０１２０】
DMAコントローラ２３は、デバイスドライバ５５（スレッド１）からのDMAの実行に対して、Txレジスタ４２を用いて、デバイスドライバ５５（スレッド１）に対して、メモリ２４からのデコード(1)用結果データ転送を行う。デコード(1)用結果データ転送が完了すると、DMAコントローラ２３は、ステップＳ１３３において、Txレジスタ４２での結果データ転送完了を、デバイスドライバ５５（スレッド１およびスレッド２）に通知する。
【０１２１】
結果データ転送完了をDMAコントローラ２３から受けると、デバイスドライバ５５（スレッド１）は、ステップＳ７８において、編集アプリケーション５１に対して、デコード(1)用結果データを供給する。これにより、編集アプリケーション５１においては、デコード(1)用結果データが取得される。
【０１２２】
また、ステップＳ１５３において、デコード部２１は、メモリ２４のデコード(2)用データを読み出し、デコードして、デコードしたデータを、再度メモリ２４に書き込む。デコード部２１がデコード(2)処理を完了すると、ファームウエア３１は、ステップＳ１５４において、デコード(2)処理完了を、デバイスドライバ５５（スレッド１およびスレッド２）並びに編集アプリケーション５１に通知する。
【０１２３】
このデコード(2)処理完了通知を受けると、編集アプリケーション５１は、ステップＳ５４において、デバイスドライバ５５（スレッド２）に対して、デコード(2)用結果取得要求を行う。
【０１２４】
これに対応して、デバイスドライバ５５（スレッド２）は、ステップＳ１１７において、DMAコントローラ２３に対して、デコード(2)用結果データ取得DMAを実行する。具体的には、デバイスドライバ５５（スレッド２）は、デコード(2)用結果データ取得DMAの実行を、DMAコントローラ２３のTxレジスタ４２に仕掛ける。
【０１２５】
なお、Txレジスタ４２の場合も、DMA実行の前（点線に示される）に、Rxレジスタ４１の場合と同様に、デバイスドライバ５５（スレッド２）およびI/Oマネージャ５４間で行われるSGL作成およびコモンバッファ構造体のキューイングを行うようにしてもよい。すなわち、ステップＳ７７の処理の前にも、ステップＳ１１１乃至Ｓ１１４と、それに対応するステップＳ９２,Ｓ９４，Ｓ９６，Ｓ９８と同様の処理を行うことが可能である。
【０１２６】
DMAコントローラ２３は、デバイスドライバ５５（スレッド２）からのDMAの実行に対して、Txレジスタ４２を用いて、デバイスドライバ５５（スレッド２）に対して、メモリ２４からのデコード(2)用結果データ転送を行う。デコード(2)用結果データ転送が完了すると、DMAコントローラ２３は、ステップＳ１３４において、Txレジスタ４２での結果データ転送完了を、デバイスドライバ５５（スレッド１およびスレッド２）に通知する。
【０１２７】
結果データ転送完了をDMAコントローラ２３から受けると、デバイスドライバ５５（スレッド２）は、ステップＳ１１８において、編集アプリケーション５１に対して、デコード(2)用結果データを供給する。これにより、編集アプリケーション５１においては、デコード(2)用結果データが取得される。
【０１２８】
なお、図９および図１０の例においては、デコード(1)用データ転送準備と並行して、デコード(2)用データ転送準備を行う例を説明したが、処理の例はこれに限らない。例えば、デコード(1)用データ転送準備が完了され、デコード(1)用データが転送されている間に、デコード(2)用データ転送準備を行うことも可能である。
【０１２９】
以上のように、編集アプリケーション５１からのデコード要求毎に、SGLを作成し、コモンバッファ構造体自体をキューイングするようにしたので、復号ハードウエア１１がデコード処理を行っている間に次のデコード用データを、メモリに転送することができる。
【０１３０】
なお、アプリケーションでのキューイング機構の利用は、図２を参照して上述したように、主に実行コマンドをキューイングすることが一般的である。これに対して、本発明においては、DMAを実行するためのメモリ管理データ（コモンバッファ構造体）をキューイングすることを特徴としている。
【０１３１】
すなわち、予め用意されたDMA実行用データのキューイングを行い、かつ、そのデータをデバイスドライバ内で管理することにより、復号ハードウエアからの実行トリガを受けると、即時に次のコマンド実行を行わせることが可能になる。これにより、図１１に示されるような効果を得ることができる。
【０１３２】
［情報処理システムによる効果の説明］
次に、図１１を参照して、パーソナルコンピュータ１２と復号ハードウエア１１とのデータ転送による効果について説明する。なお、図１１の例においては、２つのデコード処理が連続で行われる例が示されている。
【０１３３】
また、図１１の例において、上段には、パーソナルコンピュータ１２上で動作する編集アプリケーション５１の処理が示されている。中段には、パーソナルコンピュータ１２上のデバイスドライバ５５と、復号ハードウエア１１間のデータ転送処理が示されている。下段には、復号ハードウエア１１の処理が示されている。
【０１３４】
まず、編集アプリケーション５１上でデコード(1)要求コマンドが発行されると、データ転送処理として、パーソナルコンピュータ１２上の主記憶領域に置かれたデコード(1)用データの管理処理が行われる。その後、DMAコントローラ２３のRxレジスタ４１でのデコード(1)用データ転送が行われる。このデータ転送には、上述したSGLを用いたパケットDMA処理が使用される。
【０１３５】
編集アプリケーション５１上では、デバイスドライバ５５の処理を並列化（図９におけるスレッド処理化）することにより、デコード(1)要求コマンドの発行後、すぐにデコード(2)要求コマンドが発行される。これにより、データ転送処理として、デコード(1)用データ転送と並行して、パーソナルコンピュータ１２上の主記憶領域に置かれたデコード(2)用データの管理処理を行うことができる。
【０１３６】
デコード(1)用データ転送が完了すると、デコード(1)用データ転送の完了通知がデバイスドライバ５５に通知されるとともに、復号ハードウエア１１においては、デコード(1)処理が実行される。
【０１３７】
デコード(2)用データの管理処理においては、SGL（すなわち、コモンバッファ構造体）のキューイングが行われている。これにより、デコード(1)用データ転送の完了通知がデバイスドライバ５５で受信されると、即座に、DMAコントローラ２３のRxレジスタ４１でのデコード(2)用データ転送を行うことができる。
【０１３８】
また、DMAコントローラ２３のRxレジスタ４１とTxレジスタ４２は、独立した制御が可能である。これにより、デコード(2)用データ転送中に、復号ハードウエア１１におけるデコード(1)処理が終了したとしても、DMAコントローラ２３のTxレジスタ４２でのデコード(1)用結果データを転送することができる。
【０１３９】
さらに、デコード(1)用結果データ転送中に、デコード(2)用データ転送が完了し、編集アプリケーション５１においては、デコード(1)結果が取得されるとともに、そのデコード(2)用データ転送完了が、デバイスドライバ５５に対して通知される。
【０１４０】
復号ハードウエア１１においては、デコード(2)処理が実行され、DMAコントローラ２３のTxレジスタ４２でのデコード(2)用結果データが転送され、編集アプリケーション５１においては、デコード(2)結果が取得される。
【０１４１】
図３の情報処理システムにおいては、データ転送のためのパーソナルコンピュータ１２の主記憶管理処理を行うことができるデバイスドライバ５５において、データ転送管理を行うようにしたので、このようなデータ転送のパイプライン化を図ることができる。
【０１４２】
すなわち、デコード(1)処理を行っている間にデコード(2)用データ転送を行うことができるので、デコード用データ転送の効率が上がる。これにより、時間Ｔ１１に示されるように、デコード(1)処理を終了してから、デコード(2)処理を開始するまでの復号ハードウエア１１におけるデコード処理実行間隔が、従来（図１および図２）に比して短縮される。
【０１４３】
その結果、編集アプリケーション５１側からみた全体的な復号ハードウエア１１におけるデコード処理時間を高速化することができる。
【０１４４】
また、デバイスドライバ５５内での処理となるので、編集アプリケーション５１へのデータ転送完了通知などのオーバヘッドを生じることがなくなるため、処理時間の短縮化を図ることができる。
【０１４５】
以上のように、本発明においては、アプリケーションからのデコード要求コマンドに対応して、データ転送時にパケットDMAで使用されるSGLが複数作成される。デバイスドライバにより、作成されたSGLがコモンバッファへ構築され、そのコモンバッファ構造体がキューイングされる。そして、データ転送完了が通知されると、デバイスドライバにより、作成されたコモンバッファ構造体が即座に次のデータ転送に利用される。
【０１４６】
これにより、復号ハードウエア上のメモリへ転送するデータの転送効率が向上され、デコード処理が高速化される。
【０１４７】
また、デバイスドライバにおいて、データ転送用のデータ管理処理がパイプライン処理により逐次実行することができる。これにより、処理のオーバヘッドが削減される。
【０１４８】
なお、上記説明においては、２つのデコード処理が連続で行われる例を説明したが、２つに限らず、本発明は、複数のデコード処理に適用することができる。
【０１４９】
また、上記説明においては、デコードを復号ハードウエアに行わせる例を説明したが、ハードウエアに行わせる処理は、デコードに限らず、エンコードであってもよいし、その他の処理であってもよい。例えば、パーソナルコンピュータで行うには演算能力を必要とするような重い処理を、接続されるハードウエアに行わせることにも本発明を適用することができる。
【０１５０】
また、パーソナルコンピュータとハードウエアのインタフェースは、PCIeに限らず、他のインタフェースであってもよい。
【０１５１】
上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、コンピュータにインストールされる。ここで、コンピュータには、専用のハードウエアに組み込まれているコンピュータや、各種のプログラムをインストールすることで、各種の機能を実行することが可能な汎用のパーソナルコンピュータなどが含まれる。
【０１５２】
図１２は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。すなわち、図３のパーソナルコンピュータ１２は、図１２に示すように構成される。
【０１５３】
コンピュータにおいて、CPU(Central Processing Unit)３０１、ROM(Read Only Memory)３０２、RAM(Random Access Memory)３０３は、バス３０４により相互に接続されている。
【０１５４】
バス３０４には、さらに、入出力インタフェース３０５が接続されている。入出力インタフェース３０５には、入力部３０６、出力部３０７、記憶部３０８、通信部３０９、およびドライブ３１０が接続されている。
【０１５５】
入力部３０６は、キーボード、マウス、マイクロフォンなどよりなる。出力部３０７は、ディスプレイ、スピーカなどよりなる。記憶部３０８は、ハードディスクや不揮発性のメモリなどよりなる。通信部３０９は、ネットワークインタフェースなどよりなる。ドライブ３１０は、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどのリムーバブルメディア３１１を駆動する。
【０１５６】
以上のように構成されるコンピュータでは、CPU３０１が、例えば、記憶部３０８に記憶されているプログラムを入出力インタフェース３０５およびバス３０４を介してRAM３０３にロードして実行することにより、上述した一連の処理が行われる。
【０１５７】
コンピュータ（CPU３０１）が実行するプログラムは、例えば、パッケージメディア等としてのリムーバブルメディア３１１に記録して提供することができる。また、プログラムは、ローカルエリアネットワーク、インターネット、デジタル放送といった、有線または無線の伝送媒体を介して提供することができる。
【０１５８】
コンピュータでは、プログラムは、リムーバブルメディア３１１をドライブ３１０に装着することにより、入出力インタフェース３０５を介して、記憶部３０８にインストールすることができる。また、プログラムは、有線または無線の伝送媒体を介して、通信部３０９で受信し、記憶部３０８にインストールすることができる。その他、プログラムは、ROM３０２や記憶部３０８に、あらかじめインストールしておくことができる。
【０１５９】
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
【０１６０】
本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【０１６１】
１１  復号ハードウエア，  １２  パーソナルコンピュータ，  ２２  CPU，  ２３  DMAコントローラ，  ２４  メモリ，  ３１  ファームウエア，  ４１  Rx  レジスタ，  ４２  Tx  レジスタ，  ５１  編集アプリケーション，  ５４  I/Oマネージャ，  ５５  デバイスドライバ，  ５６  ファイルシステムドライバ，  ５７  メモリマネージャ，  ７１  キュー
【図１】
2011022877.tif 000003
【図２】
2011022877.tif 000004
【図３】
2011022877.tif 000005
【図４】
2011022877.tif 000006
【図５】
2011022877.tif 000007
【図６】
2011022877.tif 000008
【図７】
2011022877.tif 000009
【図８】
2011022877.tif 000010
【図９】
2011022877.tif 000011
【図１０】
2011022877.tif 000012
【図１１】
2011022877.tif 000013
【図１２】
2011022877.tif 000014