/* IMediaFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_Run(IBaseFilter *iface, REFERENCE_TIME tStart) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)\n", This); This->state = State_Running; return S_OK; }
/* IMediaFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_Pause(IBaseFilter *iface) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)\n", This); This->state = State_Paused; return S_OK; }
static HRESULT WINAPI QTInPin_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate) { QTInPin *pin = impl_from_IPin(iface); QTSplitter *This = impl_from_IBaseFilter(pin->pin.pinInfo.pFilter); BasePinImpl_NewSegment(iface, tStart, tStop, dRate); FIXME("Propagate message on %p\n", This); return S_OK; }
static HRESULT WINAPI QT_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout, FILTER_STATE *pState) { QTSplitter *This = impl_from_IBaseFilter(iface); TRACE("(%d, %p)\n", dwMilliSecsTimeout, pState); *pState = This->state; return S_OK; }
static HRESULT WINAPI TransformFilter_QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm) { QualityControlImpl *qc = (QualityControlImpl*)iface; TransformFilter *This = impl_from_IBaseFilter(qc->self); if (This->pFuncsTable->pfnNotify) return This->pFuncsTable->pfnNotify(This, sender, qm); else return TransformFilterImpl_Notify(This, sender, qm); }
/* IMediaFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_GetState(IBaseFilter *iface, DWORD msTout, FILTER_STATE *state) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)->(%u, %p)\n", This, msTout, state); if (!state) return E_POINTER; *state = This->state; return S_OK; }
HRESULT WINAPI Parser_GetClassID(IBaseFilter * iface, CLSID * pClsid) { ParserImpl *This = impl_from_IBaseFilter(iface); TRACE("(%p)\n", pClsid); *pClsid = This->filter.clsid; return S_OK; }
static HRESULT WINAPI BaseFilter_EnumPins( IBaseFilter *iface, IEnumPins **ppEnum) { test_filter *This = impl_from_IBaseFilter(iface); check_calls_list("BaseFilter_EnumPins", BASEFILTER_ENUMPINS, This->filter_type); *ppEnum = &This->IEnumPins_iface; This->enum_pins_pos = 0; return S_OK; }
HRESULT WINAPI BaseRendererImpl_SetSyncSource(IBaseFilter *iface, IReferenceClock *clock) { BaseRenderer *This = impl_from_IBaseFilter(iface); HRESULT hr; EnterCriticalSection(&This->filter.csFilter); QualityControlRender_SetClock(This->qcimpl, clock); hr = BaseFilterImpl_SetSyncSource(iface, clock); LeaveCriticalSection(&This->filter.csFilter); return hr; }
static HRESULT WINAPI TransformFilter_Output_GetMediaType(BasePin *This, int iPosition, AM_MEDIA_TYPE *pmt) { TransformFilter *pTransform = impl_from_IBaseFilter(This->pinInfo.pFilter); if (iPosition < 0) return E_INVALIDARG; if (iPosition > 0) return VFW_S_NO_MORE_ITEMS; CopyMediaType(pmt, &pTransform->pmt); return S_OK; }
/* IBaseFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *graph, LPCWSTR name) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)->(%p, %s)\n", This, graph, debugstr_w(name)); This->info.pGraph = graph; if (name) lstrcpynW(This->info.achName,name,MAX_FILTER_NAME); This->oneShot = OneShot_None; return S_OK; }
ULONG WINAPI Parser_Release(IBaseFilter * iface) { ParserImpl *This = impl_from_IBaseFilter(iface); ULONG refCount = BaseFilterImpl_Release(iface); TRACE("(%p)->() Release from %d\n", This, refCount + 1); if (!refCount) Parser_Destroy(This); return refCount; }
static ULONG WINAPI QT_Release(IBaseFilter *iface) { QTSplitter *This = impl_from_IBaseFilter(iface); ULONG refCount = InterlockedDecrement(&This->filter.refCount); TRACE("(%p)->() Release from %d\n", This, refCount + 1); if (!refCount) QT_Destroy(This); return refCount; }
/* IBaseFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *graph, LPCWSTR name) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)->(%p, %s)\n", This, graph, debugstr_w(name)); BaseFilterImpl_JoinFilterGraph(iface, graph, name); This->oneShot = OneShot_None; return S_OK; }
/* IBaseFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_QueryFilterInfo(IBaseFilter *iface, FILTER_INFO *info) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)->(%p)\n", This, info); if (!info) return E_POINTER; if (This->info.pGraph) IFilterGraph_AddRef(This->info.pGraph); *info = This->info; return S_OK; }
static HRESULT WINAPI TransformFilter_Output_QueryAccept(IPin *iface, const AM_MEDIA_TYPE * pmt) { BasePin *This = impl_BasePin_from_IPin(iface); TransformFilter *pTransformFilter = impl_from_IBaseFilter(This->pinInfo.pFilter); AM_MEDIA_TYPE* outpmt = &pTransformFilter->pmt; TRACE("%p\n", iface); if (IsEqualIID(&pmt->majortype, &outpmt->majortype) && (IsEqualIID(&pmt->subtype, &outpmt->subtype) || IsEqualIID(&outpmt->subtype, &GUID_NULL))) return S_OK; return S_FALSE; }
static ULONG WINAPI QT_Release(IBaseFilter *iface) { QTSplitter *This = impl_from_IBaseFilter(iface); ULONG refCount = BaseFilterImpl_Release(iface); TRACE("(%p)->() Release from %d\n", This, refCount + 1); if (!refCount) QT_Destroy(This); return refCount; }
/* IMediaFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_GetSyncSource(IBaseFilter *iface, IReferenceClock **clock) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)->(%p)\n", This, clock); if (!clock) return E_POINTER; if (This->refClock) IReferenceClock_AddRef(This->refClock); *clock = This->refClock; return S_OK; }
static HRESULT WINAPI Parser_OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt) { Parser_OutputPin *This = unsafe_impl_Parser_OutputPin_from_IPin(iface); ParserImpl *parser = impl_from_IBaseFilter(This->pin.pin.pinInfo.pFilter); /* Set the allocator to our input pin's */ EnterCriticalSection(This->pin.pin.pCritSec); This->alloc = parser->pInputPin->pAlloc; LeaveCriticalSection(This->pin.pin.pCritSec); return BaseOutputPinImpl_Connect(iface, pReceivePin, pmt); }
HRESULT WINAPI Parser_SetSyncSource(IBaseFilter * iface, IReferenceClock *pClock) { ParserImpl *This = impl_from_IBaseFilter(iface); PullPin *pin = impl_PullPin_from_IPin(This->ppPins[0]); TRACE("(%p)\n", pClock); EnterCriticalSection(&pin->thread_lock); BaseFilterImpl_SetSyncSource(iface,pClock); LeaveCriticalSection(&pin->thread_lock); return S_OK; }
static HRESULT WINAPI AVICompressor_Stop(IBaseFilter *iface) { AVICompressor *This = impl_from_IBaseFilter(iface); TRACE("(%p)\n", This); if(This->filter.state == State_Stopped) return S_OK; ICCompressEnd(This->hic); This->filter.state = State_Stopped; return S_OK; }
static HRESULT WINAPI QT_Stop(IBaseFilter *iface) { QTSplitter *This = impl_from_IBaseFilter(iface); TRACE("()\n"); EnterCriticalSection(&This->csReceive); IAsyncReader_BeginFlush(This->pInputPin.pReader); IAsyncReader_EndFlush(This->pInputPin.pReader); LeaveCriticalSection(&This->csReceive); return S_OK; }
/* IBaseFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_EnumPins(IBaseFilter *iface, IEnumPins **pins) { SG_Impl *This = impl_from_IBaseFilter(iface); IPin *pin[2]; TRACE("(%p)->(%p)\n", This, pins); if (!pins) return E_POINTER; pin[0] = &This->pin_in.IPin_iface; pin[1] = &This->pin_out.IPin_iface; *pins = pinsenum_create(iface, pin, 2); return *pins ? S_OK : E_OUTOFMEMORY; }
static HRESULT WINAPI TransformFilter_InputPin_Disconnect(IPin * iface) { BaseInputPin* This = impl_BaseInputPin_from_IPin(iface); TransformFilter* pTransform; TRACE("(%p)->()\n", iface); pTransform = impl_from_IBaseFilter(This->pin.pinInfo.pFilter); if (pTransform->pFuncsTable->pfnBreakConnect) pTransform->pFuncsTable->pfnBreakConnect(pTransform, PINDIR_INPUT); return BasePinImpl_Disconnect(iface); }
static HRESULT WINAPI BaseFilter_QueryInterface(IBaseFilter *iface, REFIID riid, void **ppv) { test_filter *This = impl_from_IBaseFilter(iface); if(IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPersist) || IsEqualIID(riid, &IID_IMediaFilter) || IsEqualIID(riid, &IID_IBaseFilter)) { *ppv = iface; return S_OK; } check_calls_list("BaseFilter_QueryInterface", BASEFILTER_QUERYINTERFACE, This->filter_type); ok(IsEqualIID(riid, &IID_IPin), "riid = %s\n", debugstr_guid(riid)); return E_NOINTERFACE; }
static HRESULT WINAPI QTOutPin_DecideAllocator(BaseOutputPin *iface, IMemInputPin *pPin, IMemAllocator **pAlloc) { HRESULT hr; QTOutPin *This = impl_QTOutPin_from_BaseOutputPin(iface); QTSplitter *QTfilter = impl_from_IBaseFilter(This->pin.pin.pinInfo.pFilter); *pAlloc = NULL; if (QTfilter->pInputPin.pAlloc) hr = IMemInputPin_NotifyAllocator(pPin, QTfilter->pInputPin.pAlloc, FALSE); else hr = VFW_E_NO_ALLOCATOR; return hr; }
static HRESULT WINAPI TransformFilter_Input_CheckMediaType(BasePin *iface, const AM_MEDIA_TYPE * pmt) { BaseInputPin* This = impl_BaseInputPin_from_BasePin(iface); TransformFilter * pTransform; TRACE("%p\n", iface); pTransform = impl_from_IBaseFilter(This->pin.pinInfo.pFilter); if (pTransform->pFuncsTable->pfnCheckInputType) return pTransform->pFuncsTable->pfnCheckInputType(pTransform, pmt); /* Assume OK if there's no query method (the connection will fail if needed) */ return S_OK; }
static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface) { HRESULT hr; PullPin *This = impl_PullPin_from_IPin(iface); TRACE("()\n"); EnterCriticalSection(&This->thread_lock); EnterCriticalSection(This->pin.pCritSec); { if (This->pin.pConnectedTo) { FILTER_STATE state; ParserImpl *Parser = impl_from_IBaseFilter(This->pin.pinInfo.pFilter); LeaveCriticalSection(This->pin.pCritSec); hr = IBaseFilter_GetState(This->pin.pinInfo.pFilter, INFINITE, &state); EnterCriticalSection(This->pin.pCritSec); if (SUCCEEDED(hr) && (state == State_Stopped) && SUCCEEDED(Parser->fnDisconnect(Parser))) { LeaveCriticalSection(This->pin.pCritSec); PullPin_Disconnect(iface); EnterCriticalSection(This->pin.pCritSec); hr = Parser_RemoveOutputPins(impl_from_IBaseFilter(This->pin.pinInfo.pFilter)); } else hr = VFW_E_NOT_STOPPED; } else hr = S_FALSE; } LeaveCriticalSection(This->pin.pCritSec); LeaveCriticalSection(&This->thread_lock); return hr; }
/* IMediaFilter */ static HRESULT WINAPI SampleGrabber_IBaseFilter_SetSyncSource(IBaseFilter *iface, IReferenceClock *clock) { SG_Impl *This = impl_from_IBaseFilter(iface); TRACE("(%p)->(%p)\n", This, clock); if (clock != This->refClock) { if (clock) IReferenceClock_AddRef(clock); if (This->refClock) IReferenceClock_Release(This->refClock); This->refClock = clock; } return S_OK; }
HRESULT WINAPI BaseRendererImpl_QueryInterface(IBaseFilter* iface, REFIID riid, LPVOID * ppv) { BaseRenderer *This = impl_from_IBaseFilter(iface); if (IsEqualIID(riid, &IID_IMediaSeeking) || IsEqualIID(riid, &IID_IMediaPosition)) return IUnknown_QueryInterface(This->pPosition, riid, ppv); else if (IsEqualIID(riid, &IID_IQualityControl)) { *ppv = &This->qcimpl->IQualityControl_iface; IUnknown_AddRef((IUnknown *)(*ppv)); return S_OK; } else return BaseFilterImpl_QueryInterface(iface, riid, ppv); }