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 window.
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
C/C++ arrays are zero based.
While there's nothing wrong in liking better one-based arrays, it is wiser remaining stuck with zero-based ones, because:
You need extra work to make your arrays alive (extra work is generally bad)
Most people use the opposite convention: that means you have to adapt your data to any time you've to deal with other people code, like libraries, etc..
Neverthless, there are few examples of consistently used one-based arrays, for instance, all "Numerical Recipes" book source code uses it (the authors simply ignore array item 0).
Like all 'alien' conventions it's a bit difficult to grasp immediately, but after some experience with, becomes 'natural'.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
thanks, well i was trying to make the app more easy to follow, because 0 based arrays are not so intuitive, we starts count in one, i think that the easy way is make the array one element bigger but when you have many arrays is a waste of memo, so i would try with your seggest.