2011-07-11 31 views
1

私のDirectShowビデオキャプチャをDirectXテクスチャに表示するカスタムアロケータを使用してプログラムを作成しました。 私はWindows 7でプログラムを実行しているので、ビデオではなく白いフレームが表示されます。Windows 7ではカスタムアロケータが動作しません

VMR9フィルタをコントロールに表示するように設定すると、正常に動作します。

誰かがこの問題を解決する手がかりを持っていますか?

+0

これは情報が少なすぎます。あなたはデバッグDirectXの設定を試しましたか? – Christopher

+1

コードが表示される可能性はありますか? – Goz

+0

はい私はいくつかのコードを送り、後でもう一度賞金を開始します。ご関心をお寄せいただきありがとうございます! –

答えて

1

私は自分自身デバッグモードを有効にするためにDirectXのコントロールパネルを使用して解決策を見つけました。私は、アロケータを設定するときに正しい順序でそのことをやっていないことに気付きました。ここに私のコードの一部です:

filterConfig.SetRenderingMode(VMR9Mode.Renderless); 
// QueryInterface on the VMR-9 filter for the IVMRSurfaceAllocatorNotify9 interface. 
IVMRSurfaceAllocatorNotify9 san = (IVMRSurfaceAllocatorNotify9)_vmr9; 
// Call the IVMRSurfaceAllocatorNotify9::AdviseSurfaceAllocator method and pass in a pointer to your allocator-presenter's IVMRSurfaceAllocator9 method. 
san.AdviseSurfaceAllocator(IntPtr.Zero, allocator); 
// Call your allocator-presenter's IVMRSurfaceAllocator9::AdviseNotify method and pass in a pointer to the VMR-9 filter's IVMRSurfaceAllocatorNotify9 interface. 
allocator.AdviseNotify(san); 
// Change mixer prefs AFTER settings the allocator in order to support YUV mixing (best performance) 
IVMRMixerControl9 mixerControl = (IVMRMixerControl9)_vmr9; 
VMR9MixerPrefs prefs; 
mixerControl.GetMixingPrefs(out prefs); 
prefs &= ~VMR9MixerPrefs.RenderTargetMask; 
prefs |= VMR9MixerPrefs.RenderTargetYUV; 
mixerControl.SetMixingPrefs(prefs); 
+1

ミキサーの最後の設定は私を助けます。 メインレンダーループでGUIをVMR9のビデオフレームと共にレンダリングし、ちらつきが発生します。ミキサーの設定を入れた後で、もはやちらつきはありません。 –

0

DirectShowでvmr9のカスタムアロケータプレゼンタを使用すると、Windows 7でも動作します。おそらくコードに何か不具合があります。 他の色(赤など)に描画する前に、フレームを消去してみてください。赤が表示されている場合は、フレームを正しく描画しないことを意味します。あなたがしなければ、あなたが何か正しく行っていないことを意味します。

カスタムAPに同時に3〜5スレッドからアクセスするため、ロック機構を確認することをお勧めします。

関連する問題