المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : DirectShow VMR-9: renders only 50% of the time in fullscreen



C++ Programming
11-05-2009, 09:40 PM
I'm currently using the VMR-9 renderer to play a video in my game. Running when the game's in a window works perfectly fine. I create the filter graph and do all the set up right when I play the video and release the graph at the end of it. If I flip the game into fullscreen (true fullscreen, not a stretched window) before running the video, about 50% of the time the video will not render. When I press alt+enter (which the engine flips from fullscreen to windowed mode), I see the video image in fullscreen then when the game flips back to windowed, it's paused and it never hits any of my paused statements.

I've thrown in several logging statements in the WM_PAINT message handling and find that the HRESULT from the render returns S_OK every time. WM_PAINT is being called often enough that it should be painting just fine, as it does when not in fullscreen. Each update cycle of the game, I invalidate the entire window rect when the video's playing as well. The background color draws but not the video image. The renderer returns an S_OK from the repaint call, too.

I've tried with both compressed and uncompressed AVI files as well as WMV files, all with the same issue. They all run fine in a window, but fail 50% of the time in fullscreen and freeze when flipping between fullscreen and ********

Filter graph : I'm using the generic filter graph set up the default for AVI files. CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)(&m_pGraphBuilder)); I'm primarily using WMV but I've also used the Cinepak Codec with AVIs. I haven't gotten any other decompression filters to work properly either.

I pulled all the code from MSDN to set this up. I create the graph and grab references to several interfaces to track the progress of the video (IMediaControl, IMediaSeeking, and IMediaEventEx). Then I initialize the windowless VMR-9 and inject it into the graph. Then I play the video. Works fine when the game's in a window, but not fullscreen. The sound plays all the time, just the video only shows up 50% of the time. Any suggestions?

Here's the system I'm using: Windows XP, sp2. Visual Studio 2005 professional. Windows SDK 6.0. VMR9 in windowless mode. I'm using VMR9 because I need this to run on both XP and Vista without requiring redist and the game runs using D3D9