static ULONG WINAPI MediaDet_Release(IMediaDet* iface) { MediaDetImpl *This = impl_from_IMediaDet(iface); ULONG refCount = InterlockedDecrement(&This->refCount); TRACE("(%p)->() Release from %d\n", This, refCount + 1); if (refCount == 0) { MD_cleanup(This); CoTaskMemFree(This); return 0; } return refCount; }
static ULONG WINAPI MediaDet_inner_Release(IUnknown *iface) { MediaDetImpl *This = impl_from_IUnknown(iface); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) new ref = %u\n", This, ref); if (ref == 0) { MD_cleanup(This); CoTaskMemFree(This); return 0; } return ref; }
static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal) { static const WCHAR reader[] = {'R','e','a','d','e','r',0}; MediaDetImpl *This = impl_from_IMediaDet(iface); IGraphBuilder *gb; IBaseFilter *bf; HRESULT hr; TRACE("(%p)->(%s)\n", This, debugstr_w(newVal)); if (This->graph) { WARN("MSDN says not to call this method twice\n"); MD_cleanup(This); } hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (void **) &gb); if (FAILED(hr)) return hr; hr = IGraphBuilder_AddSourceFilter(gb, newVal, reader, &bf); if (FAILED(hr)) { IGraphBuilder_Release(gb); return hr; } This->graph = gb; This->source = bf; hr = GetSplitter(This); if (FAILED(hr)) return hr; return MediaDet_put_CurrentStream(iface, 0); }