61 if (
This->cur_pin) IPin_Release(
This->cur_pin);
63 if (
This->source) IBaseFilter_Release(
This->source);
65 if (
This->splitter) IBaseFilter_Release(
This->splitter);
67 if (
This->graph) IGraphBuilder_Release(
This->graph);
71 This->num_streams = -1;
82 ERR(
"Failed to get property bag, hr %#lx.\n",
hr);
90 ERR(
"Failed to get CLSID, hr %#lx.\n",
hr);
91 IPropertyBag_Release(prop_bag);
98 ERR(
"Failed to get name, hr %#lx.\n",
hr);
100 IPropertyBag_Release(prop_bag);
110 if (
FAILED(
hr = IPin_EnumMediaTypes(pin, &enummt)))
112 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
113 IEnumMediaTypes_Release(enummt);
124 IPin *source_pin, *splitter_pin;
138 ERR(
"Failed to enumerate source pins, hr %#lx.\n",
hr);
145 ERR(
"Failed to get source pin, hr %#lx.\n",
hr);
151 ERR(
"Failed to get media type, hr %#lx.\n",
hr);
152 IPin_Release(source_pin);
156 type[0] = mt.majortype;
157 type[1] = mt.subtype;
161 CLSCTX_INPROC_SERVER, &IID_IFilterMapper2, (
void **)&mapper)))
163 IPin_Release(source_pin);
168 MERIT_UNLIKELY,
FALSE, 1,
type,
NULL,
NULL,
FALSE,
TRUE, 0,
NULL,
NULL,
NULL);
169 IFilterMapper2_Release(mapper);
172 IPin_Release(source_pin);
180 IMoniker_Release(mon);
196 IBaseFilter_Release(splitter);
209 hr = IPin_Connect(source_pin, splitter_pin,
NULL);
210 IPin_Release(splitter_pin);
218 IGraphBuilder_RemoveFilter(detector->
graph, splitter);
219 IBaseFilter_Release(splitter);
223 IPin_Release(source_pin);
254 TRACE(
"%p increasing refcount to %lu.\n", detector, refcount);
264 TRACE(
"%p decreasing refcount to %lu.\n", detector, refcount);
286 return IUnknown_QueryInterface(
This->outer_unk,
riid,
ppv);
292 return IUnknown_AddRef(
This->outer_unk);
298 return IUnknown_Release(
This->outer_unk);
305 TRACE(
"detector %p, filter %p.\n", detector,
filter);
326 TRACE(
"detector %p, unk %p.\n", detector, unk);
333 WARN(
"Object does not expose IBaseFilter.\n");
341 CLSCTX_INPROC_SERVER, &IID_IGraphBuilder, (
void **)&
graph)))
343 IBaseFilter_Release(
filter);
349 IGraphBuilder_Release(
graph);
350 IBaseFilter_Release(
filter);
359 IBaseFilter_AddRef(detector->
splitter);
377 if (
This->num_streams != -1)
379 *pVal =
This->num_streams;
385 hr = IBaseFilter_EnumPins(
This->splitter, &pins);
389 while (IEnumPins_Next(pins, 1, &pin,
NULL) ==
S_OK)
392 hr = IPin_QueryDirection(pin, &
dir);
396 IEnumPins_Release(pins);
403 IEnumPins_Release(pins);
405 This->num_streams = *pVal;
417 *pVal =
This->cur_stream;
428 assert(0 <= strm && strm < This->num_streams);
432 IPin_Release(
This->cur_pin);
436 hr = IBaseFilter_EnumPins(
This->splitter, &pins);
440 while (IEnumPins_Next(pins, 1, &pin,
NULL) ==
S_OK && !
This->cur_pin)
443 hr = IPin_QueryDirection(pin, &
dir);
447 IEnumPins_Release(pins);
456 IEnumPins_Release(pins);
467 TRACE(
"detector %p, index %ld.\n",
This, newVal);
469 if (
This->num_streams == -1)
477 if (newVal < 0 || This->num_streams <= newVal)
484 This->cur_stream = newVal;
494 TRACE(
"detector %p, majortype %p.\n", detector, majortype);
499 if (
SUCCEEDED(
hr = IMediaDet_get_StreamMediaType(iface, &mt)))
501 *majortype = mt.majortype;
514 TRACE(
"detector %p, bstr %p.\n", detector, bstr);
531 TRACE(
"detector %p, length %p.\n", detector,
length);
540 &IID_IMediaSeeking, (
void **)&seeking)))
544 if (
SUCCEEDED(
hr = IMediaSeeking_GetDuration(seeking, &duration)))
550 IMediaSeeking_Release(seeking);
589 WARN(
"MSDN says not to call this method twice\n");
594 &IID_IGraphBuilder, (
void **) &gb);
600 IGraphBuilder_Release(gb);
606 IBaseFilter_Release(bf);
607 IGraphBuilder_Release(gb);
660 FIXME(
"(%p)->(%p): not implemented!\n",
This, ppVal);
697 FIXME(
"(%p)->(%f): not implemented!\n",
This, SeekTime);
744 obj->num_streams = -1;
748 obj->outer_unk = pUnkOuter;
750 obj->outer_unk = &
obj->IUnknown_inner;
752 *
ppv = &
obj->IUnknown_inner;
#define InterlockedIncrement
#define InterlockedDecrement
enum _PinDirection PIN_DIRECTION
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
const GUID IID_IBaseFilter
_Check_return_ _In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS _Out_ UINT _Out_ UINT * Height
_Check_return_ _In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS _Out_ UINT * Width
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
static wchar_t * wcsdup(const wchar_t *str)
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
_Must_inspect_result_ _In_ ULONG _Out_writes_bytes_ pBufferSize PVOID _Inout_ PULONG pBufferSize
GLuint GLuint GLsizei GLenum type
GLuint GLsizei GLsizei * length
BSTR WINAPI SysAllocString(LPCOLESTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
const GUID IID_IPropertyBag
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
static unsigned __int64 next
void WINAPI FreeMediaType(AM_MEDIA_TYPE *pMediaType)
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
#define VFW_E_INVALIDMEDIATYPE
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out