static HRESULT WINAPI IMediaSeeking_fnGetStopPosition(IMediaSeeking* iface,LONGLONG* pllPos) { CFilterGraph_THIS(iface,mediaseeking); HRESULT hr = E_NOTIMPL; HRESULT hrFilter; DWORD n; TRACE("(%p)->()\n",This); EnterCriticalSection( &This->m_csFilters ); for ( n = 0; n < This->m_cActiveFilters; n++ ) { if ( This->m_pActiveFilters[n].pSeeking != NULL ) { hrFilter = IMediaSeeking_GetStopPosition( This->m_pActiveFilters[n].pSeeking, pllPos ); if ( hr == E_NOTIMPL ) { hr = hrFilter; } else if ( hrFilter != E_NOTIMPL ) { if ( SUCCEEDED(hr) ) hr = hrFilter; } } } LeaveCriticalSection( &This->m_csFilters ); return hr; }
HRESULT WINAPI SourceSeekingImpl_GetPositions(IMediaSeeking * iface, LONGLONG * pCurrent, LONGLONG * pStop) { SourceSeeking *This = (SourceSeeking *)iface; TRACE("(%p, %p)\n", pCurrent, pStop); EnterCriticalSection(This->crst); IMediaSeeking_GetCurrentPosition(iface, pCurrent); IMediaSeeking_GetStopPosition(iface, pStop); LeaveCriticalSection(This->crst); return S_OK; }
HRESULT WINAPI RendererPosPassThru_EOS(IUnknown *iface) { PassThruImpl *This = impl_from_IUnknown_inner(iface); REFERENCE_TIME time; HRESULT hr; hr = IMediaSeeking_GetStopPosition(&This->IMediaSeeking_iface, &time); EnterCriticalSection(&This->time_cs); if (SUCCEEDED(hr)) { This->timevalid = 1; This->time_earliest = time; } else This->timevalid = 0; LeaveCriticalSection(&This->time_cs); return hr; }
static HRESULT WINAPI MediaSeekingPassThru_GetStopPosition(IMediaSeeking * iface, LONGLONG * pStop) { PassThruImpl *This = impl_from_IMediaSeeking(iface); IMediaSeeking *seek; HRESULT hr; TRACE("(%p/%p)->(%p)\n", iface, This, pStop); hr = get_connected(This, &IID_IMediaSeeking, (LPVOID*)&seek); if (SUCCEEDED(hr)) { hr = IMediaSeeking_GetStopPosition(seek, pStop); IMediaSeeking_Release(seek); } else return E_NOTIMPL; return hr; }