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);
529 double StreamTime,
LONG Width,
533 FIXME(
"(%p)->(%f %d %d %p): not implemented!\n",
This, StreamTime, Width, Height,
Filename);
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;
const GUID IID_IBaseFilter
static const WCHAR wszFriendlyName[]
VOID WINAPI CoTaskMemFree(LPVOID ptr)
GLsizei GLenum GLenum * types
_Must_inspect_result_ _In_ ULONG _Out_writes_bytes_ pBufferSize PVOID _Inout_ PULONG pBufferSize
void WINAPI VariantInit(VARIANTARG *pVarg)
IN PVCB IN PBCB OUT PDIRENT IN USHORT IN POEM_STRING Filename
const GUID IID_IPropertyBag
BSTR WINAPI SysAllocString(LPCOLESTR str)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
static const WCHAR wszClsidName[]
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
#define VFW_E_INVALIDMEDIATYPE
#define InterlockedDecrement
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
#define InterlockedIncrement
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
enum _PinDirection PIN_DIRECTION
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
GLuint GLuint GLsizei GLenum type
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define IsEqualIID(riid1, riid2)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint GLenum GLenum GLenum GLint GLuint GLenum GLenum GLfloat GLenum GLfloat GLenum map
GLuint const GLchar * name