static HRESULT WINAPI QTOutPin_QueryInterface(IPin *iface, REFIID riid, void **ppv) { QTOutPin *This = impl_QTOutPin_from_IPin(iface); TRACE("(%s, %p)\n", debugstr_guid(riid), ppv); *ppv = NULL; if (IsEqualIID(riid, &IID_IUnknown)) *ppv = iface; else if (IsEqualIID(riid, &IID_IPin)) *ppv = iface; else if (IsEqualIID(riid, &IID_IMediaSeeking)) return IBaseFilter_QueryInterface(This->pin.pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv); else if (IsEqualIID(riid, &IID_IQualityControl)) *ppv = &This->IQualityControl_iface; if (*ppv) { IUnknown_AddRef((IUnknown *)(*ppv)); return S_OK; } FIXME("No interface for %s!\n", debugstr_guid(riid)); return E_NOINTERFACE; }
static ULONG WINAPI QTOutPin_Release(IPin *iface) { QTOutPin *This = impl_QTOutPin_from_IPin(iface); ULONG refCount = InterlockedDecrement(&This->pin.pin.refCount); TRACE("(%p)->() Release from %d\n", iface, refCount + 1); if (!refCount) { DeleteMediaType(This->pmt); FreeMediaType(&This->pin.pin.mtCurrent); CoTaskMemFree(This); return 0; } return refCount; }