d3d9.dll IDirect3DDevice9メソッドをフックすることで、Direct3D アプリケーションの挿入に成功しました。
私がやろうとしているのは、アプリケーションの出力の AVI を記録することです。
Video1、XVID などのさまざまなコーデックを使用して、すべてのフレームで適切な AVI ファイルを既に生成できますが、 フレーム レートが正しくないように見えることが問題です (元のアプリケーションの表示と比較して、ビデオがぎくしゃくしすぎたり、速すぎたりします)。
私がやっていることは基本的に次のとおりです。
ビデオの録画がオンの場合は、通話
GrabFrameの前にIDirect3DDevice9::Present通話してください。GrabFrame基本的に、フレームバッファデータを取得してビデオフレームとして追加する「正しい時間」にあるかどうかのチェックで構成されています。以下は、一般的なコード構造です。
(コードチェックとCOMptrのリリースは省略)
LARGE_INTEGER 今、min_time;
QueryPerformanceCounter(&now);
min_time.QuadPart = _lastFrameTime.QuadPart + (_videoRate * _perfFreq.QuadPart);
if ( (_lastFrameTime.QuadPart == 0) || (now.QuadPart >= min_time.QuadPart) )
{
CaptureBackBuffer(&pBackBuf);
LPD3DXBUFFER pD3DXBuf;
SaveBackBufferToMemDIB(&pD3DXBuf);
_pAVIVideo->GrabFrame(pD3DXBuf->GetBufferPointer());
_lastFrameTime.QuadPart = now.QuadPart;
}
次_perfFreqのように初期化されます。
QueryPerformanceFrequency(&_perfFreq);
_perfFreq.QuadPart = _perfFreq.QuadPart / 1000;
_lastFrameTime.QuadPart = 0;
そしてvideoRate次のとおりです。
LONGLONG _videoRate = (LONGLONG) (1000.0/((double)fps));
ビデオ ストリームを作成するときに、AVISTREAMINFO::dwRate メンバーで同じレートを設定していることに注意してください ( http://msdn.microsoft.com/en-us/library/windows/desktop/dd756832(v=vs.85 .aspx )
ビデオの再生が「速く」または「遅く」なる理由について、ヘルプやヒントはありますか? どうもありがとうございました。