/******************************Public*Routine******************************\ * CanMovieFrameStep * \**************************************************************************/ BOOL CMovie::CanMovieFrameStep() { IVideoFrameStep* lpFS; HRESULT hr; hr = m_Fg->QueryInterface(__uuidof(IVideoFrameStep), (LPVOID *)&lpFS); if(SUCCEEDED(hr)) { hr = lpFS->CanStep(0L, NULL); lpFS->Release(); } return SUCCEEDED(hr); }
/******************************Public*Routine******************************\ * FrameStepMovie * \**************************************************************************/ BOOL CMovie::FrameStepMovie() { IVideoFrameStep* lpFS; HRESULT hr; hr = m_Fg->QueryInterface(__uuidof(IVideoFrameStep), (LPVOID *)&lpFS); if(SUCCEEDED(hr)) { FrameStepCount++; hr = lpFS->Step(1, NULL); lpFS->Release(); } return SUCCEEDED(hr); }
// // Some hardware decoders and video renderers support stepping media // frame by frame with the IVideoFrameStep interface. See the interface // documentation for more details on frame stepping. // BOOL CMediaPlayerDlg::CanStep(void) { HRESULT hr; IVideoFrameStep* pFS; hr = pGB_MP->QueryInterface(__uuidof(IVideoFrameStep), (PVOID *)&pFS); if (FAILED(hr)) return FALSE; // Check if this decoder can step hr = pFS->CanStep(0L, NULL); pFS->Release(); if (hr == S_OK) return TRUE; else return FALSE; }
// // Some hardware decoders and video renderers support stepping media // frame by frame with the IVideoFrameStep interface. See the interface // documentation for more details on frame stepping. // BOOL CanFrameStep(IGraphBuilder *pGB) { HRESULT hr; IVideoFrameStep* pFS; hr = pGB->QueryInterface(__uuidof(IVideoFrameStep), (PVOID *)&pFS); if (FAILED(hr)) return FALSE; // Check if this decoder can step hr = pFS->CanStep(0L, NULL); pFS->Release(); if (hr == S_OK) return TRUE; else return FALSE; }
/******************************Public*Routine******************************\ * FrameStepMovie * \**************************************************************************/ BOOL CMpegMovie::FrameStepMovie() { if ( m_Vw ) { return E_FAIL; } else { IVideoFrameStep* lpFS; HRESULT hr; hr = m_Fg->QueryInterface(__uuidof(IVideoFrameStep), (LPVOID *)&lpFS); if(SUCCEEDED(hr)) { hr = lpFS->Step(1, NULL); lpFS->Release(); } return SUCCEEDED(hr); } }
// // Some video renderers support stepping media frame by frame with the // IVideoFrameStep interface. See the interface documentation for more // details on frame stepping. // BOOL GetFrameStepInterface(void) { HRESULT hr; IVideoFrameStep *pFSTest = NULL; // Get the frame step interface, if supported hr = pGB->QueryInterface(__uuidof(IVideoFrameStep), (PVOID *)&pFSTest); if (FAILED(hr)) return FALSE; // Check if this decoder can step hr = pFSTest->CanStep(0L, NULL); if (hr == S_OK) { pFS = pFSTest; // Save interface to global variable for later use return TRUE; } else { pFSTest->Release(); return FALSE; } }