static HRESULT WINAPI TransformFilter_InputPin_EndFlush(IPin * iface) { BaseInputPin* This = impl_BaseInputPin_from_IPin(iface); TransformFilter* pTransform; HRESULT hr = S_OK; TRACE("(%p)->()\n", iface); pTransform = impl_from_IBaseFilter(This->pin.pinInfo.pFilter); EnterCriticalSection(&pTransform->filter.csFilter); if (pTransform->pFuncsTable->pfnEndFlush) hr = pTransform->pFuncsTable->pfnEndFlush(pTransform); if (SUCCEEDED(hr)) hr = BaseInputPinImpl_EndFlush(iface); LeaveCriticalSection(&pTransform->filter.csFilter); return hr; }
static HRESULT WINAPI DSoundRender_InputPin_EndFlush(IPin * iface) { BaseInputPin *This = (BaseInputPin *)iface; DSoundRenderImpl *pFilter = (DSoundRenderImpl *)This->pin.pinInfo.pFilter; HRESULT hr; TRACE("\n"); EnterCriticalSection(This->pin.pCritSec); if (pFilter->in_loop) { ResetEvent(pFilter->state_change); LeaveCriticalSection(This->pin.pCritSec); WaitForSingleObject(pFilter->state_change, -1); EnterCriticalSection(This->pin.pCritSec); } if (pFilter->filter.state != State_Stopped) ResetEvent(pFilter->blocked); if (pFilter->dsbuffer) { LPBYTE buffer; DWORD size; IDirectSoundBuffer_Stop(pFilter->dsbuffer); /* Force a reset */ IDirectSoundBuffer_SetCurrentPosition(pFilter->dsbuffer, 0); pFilter->write_pos = pFilter->last_play_pos = 0; ++pFilter->play_loops; pFilter->write_loops = pFilter->play_loops; IDirectSoundBuffer_Lock(pFilter->dsbuffer, 0, 0, (LPVOID *)&buffer, &size, NULL, NULL, DSBLOCK_ENTIREBUFFER); memset(buffer, 0, size); IDirectSoundBuffer_Unlock(pFilter->dsbuffer, buffer, size, NULL, 0); } hr = BaseInputPinImpl_EndFlush(iface); LeaveCriticalSection(This->pin.pCritSec); MediaSeekingPassThru_ResetMediaTime(pFilter->seekthru_unk); return hr; }
static HRESULT WINAPI BaseRenderer_InputPin_EndFlush(IPin * iface) { BaseInputPin* This = impl_BaseInputPin_from_IPin(iface); BaseRenderer *pFilter = impl_from_IBaseFilter(This->pin.pinInfo.pFilter); HRESULT hr = S_OK; TRACE("(%p/%p)->()\n", This, pFilter); EnterCriticalSection(&pFilter->filter.csFilter); EnterCriticalSection(&pFilter->csRenderLock); EnterCriticalSection(This->pin.pCritSec); hr = BaseInputPinImpl_EndFlush(iface); if (SUCCEEDED(hr)) { if (pFilter->pFuncsTable->pfnEndFlush) hr = pFilter->pFuncsTable->pfnEndFlush(pFilter); else hr = BaseRendererImpl_EndFlush(pFilter); } LeaveCriticalSection(This->pin.pCritSec); LeaveCriticalSection(&pFilter->csRenderLock); LeaveCriticalSection(&pFilter->filter.csFilter); return hr; }