60 if (
This->cur_pin) IPin_Release(
This->cur_pin);
62 if (
This->source) IBaseFilter_Release(
This->source);
64 if (
This->splitter) IBaseFilter_Release(
This->splitter);
66 if (
This->graph) IGraphBuilder_Release(
This->graph);
68 This->num_streams = -1;
131 return IUnknown_QueryInterface(
This->outer_unk,
riid,
ppv);
137 return IUnknown_AddRef(
This->outer_unk);
143 return IUnknown_Release(
This->outer_unk);
149 FIXME(
"(%p)->(%p): not implemented!\n",
This, pVal);
156 FIXME(
"(%p)->(%p): not implemented!\n",
This, newVal);
172 if (
This->num_streams != -1)
174 *pVal =
This->num_streams;
180 hr = IBaseFilter_EnumPins(
This->splitter, &pins);
184 while (IEnumPins_Next(pins, 1, &
pin,
NULL) ==
S_OK)
187 hr = IPin_QueryDirection(
pin, &
dir);
191 IEnumPins_Release(pins);
198 IEnumPins_Release(pins);
200 This->num_streams = *pVal;
212 *pVal =
This->cur_stream;
223 assert(0 <= strm && strm < This->num_streams);
227 IPin_Release(
This->cur_pin);
231 hr = IBaseFilter_EnumPins(
This->splitter, &pins);
238 hr = IPin_QueryDirection(
pin, &
dir);
242 IEnumPins_Release(pins);
251 IEnumPins_Release(pins);
264 if (
This->num_streams == -1)
272 if (newVal < 0 || This->num_streams <= newVal)
279 This->cur_stream = newVal;
293 FIXME(
"(%p)->(%p): not implemented!\n",
This, pVal);
322 hr = IBaseFilter_QueryInterface(
This->source, &IID_IFileSourceFilter,
328 IFileSourceFilter_Release(
file);
344 static const WCHAR wszFriendlyName[] = {
'F',
'r',
'i',
'e',
'n',
'd',
'l',
'y',
'N',
'a',
'm',
'e',0};
371 IPropertyBag_Release(pPropBagCat);
389 IPin *source_pin, *splitter_pin;
393 &IID_IFilterMapper2, (
void **) &
map);
397 hr = IBaseFilter_QueryInterface(
This->source, &IID_IFileSourceFilter,
401 IFilterMapper2_Release(
map);
405 hr = IFileSourceFilter_GetCurFile(
file, &
name, &mt);
406 IFileSourceFilter_Release(
file);
410 IFilterMapper2_Release(
map);
413 type[0] = mt.majortype;
414 type[1] = mt.subtype;
417 hr = IFilterMapper2_EnumMatchingFilters(
map, &filters, 0,
TRUE,
421 IFilterMapper2_Release(
map);
426 while (IEnumMoniker_Next(filters, 1, &mon,
NULL) ==
S_OK)
429 IMoniker_Release(mon);
443 This->splitter = splitter;
447 hr = IBaseFilter_EnumPins(
This->source, &pins);
450 IEnumPins_Next(pins, 1, &source_pin,
NULL);
451 IEnumPins_Release(pins);
453 hr = IBaseFilter_EnumPins(splitter, &pins);
456 IPin_Release(source_pin);
459 IEnumPins_Next(pins, 1, &splitter_pin,
NULL);
460 IEnumPins_Release(pins);
462 hr = IPin_Connect(source_pin, splitter_pin,
NULL);
463 IPin_Release(source_pin);
464 IPin_Release(splitter_pin);
469 IBaseFilter_Release(splitter);
473 IEnumMoniker_Release(filters);
482 static const WCHAR reader[] = {
'R',
'e',
'a',
'd',
'e',
'r',0};
492 WARN(
"MSDN says not to call this method twice\n");
497 &IID_IGraphBuilder, (
void **) &gb);
501 hr = IGraphBuilder_AddSourceFilter(gb, newVal,
reader, &bf);
504 IGraphBuilder_Release(gb);
559 IEnumMediaTypes_Release(
types);
575 FIXME(
"(%p)->(%p): not implemented!\n",
This, ppVal);
612 FIXME(
"(%p)->(%f): not implemented!\n",
This, SeekTime);
658 obj->num_streams = -1;
662 obj->outer_unk = pUnkOuter;
664 obj->outer_unk = &
obj->IUnknown_inner;
666 *
ppv = &
obj->IUnknown_inner;
#define InterlockedIncrement
#define InterlockedDecrement
enum _PinDirection PIN_DIRECTION
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR wszFriendlyName[]
const GUID IID_IBaseFilter
static const WCHAR wszClsidName[]
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
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
VOID WINAPI CoTaskMemFree(LPVOID ptr)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
BSTR WINAPI SysAllocString(LPCOLESTR str)
const GUID IID_IPropertyBag
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#define CONTAINING_RECORD(address, type, field)
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
_In_ HFONT _Out_ PUINT Height
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
#define VFW_E_INVALIDMEDIATYPE