説明

グラフィックフィルタドライバを用いてグラフィックデバイスインターフェイスコールを取得する方法

【課題】ローカルパソコンのビデオや3D加速をサポートするための、グラフィックフィルタドライバを採用してグラフィックデバイスインターフェイスコールを取得する方法を提供する。
【解決手段】グラフィックデバイスインターフェイスエンジン100と実ディスプレイドライバ200に対して透明であるグラフィックフィルタドライバ150を採用して、グラフィックデバイスインターフェイスコールを取得する方法であって、実ディスプレイドライバから回送されたDDI関数テーブルをコピーするステップと、スクリーン更新をキャプチャーすべき実ディスプレイドライバのDDI関数を補正するステップと、補助バッファーを作成し、キャプチャーしたスクリーン更新の更新バッファーとするステップと、更新バッファーに対して後続処理400を行うステップとを含む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータグラフィックス及び画像処理の分野に関し、具体的には、グラフィックフィルタドライバによりコンピュータディスプレイデバイスのグラフィックデータを取得する方法に関する。
【背景技術】
【0002】
PCの演算能力の増強及びハードウエアとしてセットとなるグラフィックプロセッサーによって、PCにおけるグラフィック画像処理能力が逐次増強され、早期の2Dビットマップ、ベクトルの応用から、3Dやビデオのサポートに進んできた。豊富な内容は、より優れた体験をユーザに与えると共に、表示内容を同期的に取得する必要がある応用、例えば、リモートコントロール、リモートプロジェクション、マルチユーザの共用、及びスクリーンスタティックキャプチャー等に大きな挑戦を与える、特に、スクリーン内容をリアルタイムに取得する必要がある応用である。
【0003】
スクリーン内容をリアルタイムに取得する技術には、ソフトウェア実現方式及びハードウェア実現方式がある。ハードウェアによりスクリーン内容をリアルタイムに取得する技術は、表示アダプタのビデオ出力信号を直接にキャプチャーし、これを入力源としてビデオ圧縮カードに入力し、圧縮カードにより圧縮してストリームの形で記録している。このようなハードウェアで実現する方法は簡単であり、ハードウェア圧縮カードによりビデオ信号を処理するので、パソコンの処理能力に特別な要求がない。しかしながら、この方法の欠点は、ビデオ圧縮カードのようなハードウェアの増加を必要とし、デバイス配置が複雑でユーザの使用上の不便を招いてしまうことにある。さらに、ハードウェアで実現する方法では、信号が二回のデジタルアナログ変換を介してある程度の精度損失があり、大きな歪みがあるので、高品質の画面をユーザに提供することができない。
【0004】
以下に、ソフトウェアによりスクリーン内容をリアルタイムに取得する技術を簡単に紹介する。Windows操作システムでは、アプリケーションプログラムはGDI(グラフィック・デバイス・インターフェイス)を介してスクリーンの描画を完成し、GDIはプリミティブ操作及びドットマトリックスインターフェイスをサポートしている。プリミティブレベルのインターフェイスは、相対的に高級なものであり、必要とされる記述データは少ないが直接表示できず、Windows表示体系とディスプレイカードによるハードウェア協力によってドットマトリックスに転換して出力しなければならない。ドットマトリックスレベルのインターフェイスは、相対的に低級なものであり、データ量は多いがキャプチャーしたデータを直接表示することができる。そこで、ソフトウェアで実現する方法において、GDIデータをキャプチャーすることは、ドットマトリックスのレベルにて行っても、プリミティブコールのレベルにて行ってもよく、或いは、両方を結合して行ってもよい。
【0005】
第1のソフトウェアで実現する方法は、ユーザアプリケーションプログラムを採用してFrame Buffer(フレームバッファー)を定時に取得し、取得したフレーム画像に対して後続の処理を行うことである。第2のソフトウェアで実現する方法は、マイクロソフト社が定義している表示Mirror体系を採用して、マップディスプレイドライバプログラム(mirror)をロードし、目前のディスプレイの各更新をリアルタイムにコピーして、マッピングしたデータを圧縮しストリームの形で記録することである。
【0006】
第1のソフトウェアで実現する方法では、区域が更新されたか否かに拘わらず、毎回取得するものはスクリーン全体である。さらに、当該方法はドットマトリックスインターフェイスしか採用できないので、データ量が多く、処理が遅く、帯域幅の要求が高いので、スタティック単一スクリーンのキャプチャー処理に対する応用に適している。第2のソフトウェアで実現する方法では、スクリーンの変化部分だけを取得するので、画像データを取得する速度が速く、画像表示と同時にコピー可能であり(リアルタイム性が高い)、広汎に採用されている。しかしながら、ビデオや3D処理のソースデータ量が多く、複雑なローカル計算を必要とするので、一般的には、ディスプレイカードハードウェアのGPU(グラフィック処理ユニット)により加速処理される。そこで、マイクロソフト社は、Mirror体系を定義する際に、ローカルパソコンのビデオや3D加速に対するサポートを自動的に禁止し、3Dやビデオ加速に依存しているアプリケーションプログラムの運用ができなくなり、Mirrorを採用するアプリケーションプログラムの運用効果が大きな制限を受けている。
【0007】
したがって、Mirrorと類似した、ビデオや3D加速をサポートしているGDIコールを早くキャプチャーする方法が必要である。
【発明の開示】
【発明が解決しようとする課題】
【0008】
本発明は、上記の課題に鑑みてなされたものである。本発明は、ローカルパソコンのビデオや3D加速をサポートするための、グラフィックフィルタドライバを採用してグラフィックデバイスインターフェイスコールを取得する方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明の一側面では、グラフィックデバイスインターフェイスエンジンと実ディスプレイドライバに対して透明であるグラフィックフィルタドライバを採用して、グラフィックデバイスインターフェイスコールを取得する方法であって、実ディスプレイドライバから回送されたDDI関数テーブルをコピーするステップと、スクリーン更新をキャプチャーすべき実ディスプレイドライバのDDI関数を補正するステップと、補助バッファーを作成し、キャプチャーしたスクリーン更新の更新バッファーとするステップと、更新バッファーに対して後続処理を行うステップとを含む方法を提起している。
【発明の効果】
【0010】
本発明の方法によれば、ソフトウェアによってローカルパソコンのビデオや3D加速に対するサポートを実現して、高い品質の画面と表示効果をユーザに提供することができる。従来技術であるMirror体系と比べ、本発明はMirror体系を採用していないので、システムのグラフィックデバイスインターフェイスエンジンがグラフィックフィルタドライバの存在を知らず、ディスプレイカードのビデオや3D加速の機能が依然として存在しており、これらの機能が依然としてシステムにてサポートされ、ビデオや3D加速を採用するアプリケーションプログラムは正常に動作できる。
【0011】
本発明の上記並びにその他の目的と新規な特徴は、添付図面を参照しつつ、以下に示す実施形態の説明を読むと、より完全に明らかとなるであろう。
【発明を実施するための最良の形態】
【0012】
以下、本発明の具体的な実施態様について図面を参照して説明する。以下の説明において、当該分野における公知の技術の細部については一部省略している。これは、これらの公知の技術に対する詳しい記述は本発明のいくつかの特徴及び利点を曖昧にするからである。
【0013】
Windows操作システムにおいて、ディスプレイドライバには、一系列のグラフィックデバイスドライバインターフェイスDDIのサポートが要求され、これらのインターフェイスは、ドライバを管理するデバイス対象、Surface、マウス、デバイスビットマップ、DirectX及び描画DDIに大きく分けられる。プログラムは、DDIインターフェイスを実現できれば、ディスプレイドライバとしてシステムにロードされ得る。
【0014】
図1は、本発明の実施例に基づく方法に使用するグラフィックフィルタドライバ150、GDIエンジン100、及び実ディスプレイドライバ200間の論理関係を示している。
【0015】
図1に示すように、本発明では、GDIエンジン100と実ディスプレイドライバ200との間に一つのフィルタ層を加入している。それはグラフィックフィルタドライバ150と称される。当該グラフィックフィルタドライバ150を組み込んでシステムを初期化することで、当該フィルタ層は、WindowsGDIエンジン100に対して実ディスプレイドライバ200として表されるが、実ディスプレイドライバ200はWindowsGDIエンジン100として表される。即ち、ここでのグラフィックフィルタドライバ150は、GDIエンジン100と実ディスプレイドライバ200に対して透明なものである。
【0016】
各表示更新と対応する描画DDIに対して、グラフィックフィルタドライバ150のDDIは真っ先にコールされ、実行に際して、まず実ディスプレイドライバの対応DDIをコールしてローカル表示更新を完成させ、そして、当該コールパラメータを更新コールテーブル300に記憶したり、GDIエンジン100をコールしてドットマトリックスに転換すると共に、表示画面中に変化している区域を記録したりする。
【0017】
図2は、本発明の実施例に基づく方法を説明するためのフローチャートである。図2に示すように、ステップS210において、前記のグラフィックフィルタドライバ150を目前のディスプレイカードの仮想ドライバとして実装する。
【0018】
実装過程において、実装プログラムは、目前のシステムの主要表示デバイスのPND DeviceID(即ち、プラグアンドプレイデバイスの標識)を取得し、ディスプレイカードのレジストエントリ{4d36e968-e325-11ce-bfc1-08002be10318}での各レジストエントリのDeviceIDを列挙してマッチングする。マッチングしたレジストエントリに対して、そのSettings(設置)キーでのInstalledDisplayDriversのレジストエントリを補正し、当該Keyの値を本発明のグラフィックフィルタドライバ150の名前に補正する。
【0019】
ステップS220において、操作システムは、グラフィックフィルタドライバの名前に基づいてディスプレイドライバのモジュール名称を取得し、システムにロードして、グラフィックフィルタドライバ150をシステムにロードする。
【0020】
システムがグラフィックフィルタドライバをロードする期間において、ドライバ入口関数DrvEnableDriver中に、グラフィックフィルタドライバ150が実ディスプレイドライバ200をロードし、実ディスプレイドライバ200が回送したDDI関数テーブルを1部コピーして、スクリーン更新に対するキャプチャーを必要とするDDI関数に対して、それの関数テーブルにおける値をフィルタドライバ対応関数を指向してなるポインターに補正し、同時に原始関数ポインターを記憶する。一方、処理が必要とされない関数、例えばビデオや3D加速インターフェイスに対して、実ディスプレイドライバの関数ポインターとして保留したまま、コピーした関数テーブルをGDIに回送する。このようにして、グラフィックフィルタドライバ150は、実ディスプレイドライバ200のコールに対するフィルタ機能を実現する。
【0021】
図3は、グラフィックフィルタドライバをロードする際にコピー及び処理を必要とするインターフェイスの名前を示したDDIリストである。
【0022】
これらのインターフェイスDDIにおいて、グラフィックフィルタドライバ150は、すべてのドライバ管理DDIを実現することで、GDIが要求するドライバロード、ドライバ禁止などの機能をキャプチャーし、内部の管理データを作成し、コールを実ディスプレイドライバの相応関数に転送する。
【0023】
なお、描画DDIはキャプチャー内容の重点であり、すべてのスクリーン更新は、共に描画DDIによって完成されるものである。これらの関数中に、グラフィックフィルタドライバ150は、更新DDIのパラメータと更新のソースデータとを記録し、更新コールテーブル300に記憶し、実ディスプレイドライバ200の相応DDIをコールしてローカル描画を完成させる。必要であれば、グラフィックフィルタドライバ150は、更新DDIのコールをドットマトリックスに変換し、更新フレームバッファーに記憶してもよい。
【0024】
また、マウス制御DDIは、マウス位置と形状の更新を実現し、グラフィックフィルタドライバ150は、これらの情報を記録して後続する処理400に供給する。
【0025】
ステップS230において、グラフィックフィルタドライバ200のDrvEnableSurface DDIがコールされ、当該DDIは、主要Surfaceを作成し、後続するすべての描画DDIの出力結果は、当該主要Surfaceに記憶される。フィルタドライバが更新バッファーを記憶しようとすれば、グラフィックフィルタドライバ150は、補助Surfaceを作成し、キャプチャーしたスクリーン更新の更新バッファーとし、後続の描画DDIがコールされるとき、描画したドットマトリックスをこの補助Surfaceに記憶する。
【0026】
ステップS240において、スクリーン更新をキャプチャーすべき描画DDIがコールされ、グラフィックフィルタドライバ150は、コールパラメータと更新データソースを更新コールテーブル300に記憶し、まず記憶した原始関数ポインターにより実ディスプレイドライバのDDIをコールし、実ディスプレイカードの表示更新を完成させ、フレームバッファーを記憶しようとすれば、グラフィックフィルタドライバ150自身、又はGDIエンジン100を介して、補助Surfaceに描画を完成させる。このようにして、補助バッファーにおける内容は、表示スクリーンと同期して更新されている。
【0027】
図4は、更新ドットマトリックスを記録するTextOutを例として前記方法のステップS240における処理フローを示している。
【0028】
図4に示すように、ステップS410において、システムは、真っ先に実ディスプレイドライバ200が当該DDIをサポートしているか否かを判断し、サポートしていれば、ステップS420において、実ディスプレイドライバ200の関数をコールしてローカル表示を更新し、そうでなければ、ローカル更新をスキップする。
【0029】
そして、ステップS430において、システムは、グラフィックフィルタドライバ150が動作状態にあるか否かを判断し、動作していなければ終了する。グラフィックフィルタドライバが動作状態にあれば、ステップS440において、DrvEnablePDEV段階で作成されたフィルタドライバの構造をサーチする。ステップS450において、見出されたか否かを判断する。見出されたならば、当該構造は確かにフィルタドライバで作成されたものであることを証明するものであり、ステップS460において、補助Surfaceをロックし、ステップS470において、ドットマトリックスを当該補助Surfaceに描画し、ステップS480にて当該補助Surfaceをアンロックする。ステップS490において、取得したドットマトリックスに対して後続する処理を行う。
【0030】
本発明に係るフィルタドライバを採用してGDIデータをキャプチャーする方法は、ビデオや3D応用をサポートの無線投影方法に適用することができ、当該方法には、キャプチャーした描画DDIに対し、GDI Engineの対応関数をコールして描画処理を完成させ、そして、更新バッファーに記憶しているドットマトリックスを他のモジュールにより圧縮符号化して、ネットワークを介してプロジェクタの遠隔地に送信する。或いは、キャプチャーした描画プリミティブを分類し、ドットマトリックス操作に関するDDIのドットマトリックスデータを圧縮処理する一方、非ドットマトリックスデータを直接処理してバッファーにおける描画プリミティブを更新し、両データを一緒にプロジェクタ側に送信して解凍及びプリミティブ描画を行うことで、マスタ側の画面をコピーする。
【0031】
以上述べた内容は、本発明における具体的実施態様に過ぎず、本発明の保護範囲はこれに限定されるものではなく、当該発明の属する技術分野における通常の知識を有する者が本発明に掲げている技術範囲内にて容易に想到できる変更や交換であれば、本発明の保護範囲内に含まれるべきである。そこで、本発明の保護範囲は、請求の範囲によって限定されるものである。
【図面の簡単な説明】
【0032】
【図1】本発明の実施例に基づく方法に使用するグラフィックフィルタドライバ、GDIエンジン、及び実ディスプレイドライバ間の論理関係を示している。
【図2】本発明の実施例に基づく方法を説明するためのフローチャートである。
【図3】グラフィックフィルタドライバをロードする際にコピーと処理を必要とするインターフェイスの名前を示したDDIリストである。
【図4】更新ドットマトリックスを記録するTextOutを例として上記方法のステップにおける処理フローを示している。
【符号の説明】
【0033】
100 グラフィックデバイスインターフェイス(GDI)エンジン
150 グラフィックフィルタドライバ
200 実ディスプレイドライバ
300 更新コールテーブル
400 後続処理

【特許請求の範囲】
【請求項1】
グラフィックデバイスインターフェイスエンジンと実ディスプレイドライバとに対して透明であるグラフィックフィルタドライバを採用して、グラフィックデバイスインターフェイスコールを取得する方法であって、
実ディスプレイドライバから回送したDDI関数テーブルをコピーするステップと、
スクリーン更新をキャプチャーすべき実ディスプレイドライバのDDI関数を補正するステップと、
補助バッファーを作成し、キャプチャーしたスクリーン更新の更新バッファーとするステップと、
更新バッファーに対する後続処理を行うステップとを含む方法。
【請求項2】
請求項1に記載の方法であって、
前記スクリーン更新をキャプチャーすべきDDI関数を補正するステップは、
スクリーン更新をキャプチャーすべきDDI関数の関数テーブルにおける値を、フィルタドライバ対応関数に指向するポインターに補正すると共に、原始関数ポインターを記憶するステップをさらに含むことを特徴とする方法。
【請求項3】
請求項1に記載の方法であって、
前記更新バッファーに対する後続処理を行うステップは、
需要に応じて、更新バッファーをドットマトリックスに描画したり、キャプチャーしたプリミティブを直接に処理したりするステップをさらに含むことを特徴とする方法。
【請求項4】
請求項1に記載の方法であって、
実ディスプレイドライバの描画DDIをコールして、ローカルの表示更新を完成するステップをさらに含むことを特徴とする方法。
【請求項5】
請求項4に記載の方法であって、
前記実ディスプレイドライバの描画DDIをコールして、ローカルの表示更新を完成するステップは、
記憶している原始関数ポインターによって実ディスプレイドライバの描画DDIをコールして、実ディスプレイカードの表示更新を完成するステップをさらに含むことを特徴とする方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2008−46616(P2008−46616A)
【公開日】平成20年2月28日(2008.2.28)
【国際特許分類】
【出願番号】特願2007−184289(P2007−184289)
【出願日】平成19年7月13日(2007.7.13)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.WINDOWS
【出願人】(504425196)聯想(北京)有限公司 (38)
【氏名又は名称原語表記】LENOVO(BEIJING) LIMITED
【Fターム(参考)】