40 return IUnknown_Release(
unknown);
46 && !
memcmp(
a->pbFormat,
b->pbFormat,
a->cbFormat);
49#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
61 hr = IUnknown_QueryInterface(iface, iid, (
void **)&unk);
69 IUnknown_Release(unk);
102 IBaseFilter_FindPin(
filter,
L"In", &pin);
115 IBaseFilter_FindPin(
filter,
L"Out", &pin);
119 hr = IPin_QueryInterface(pin, &IID_IMediaPosition, (
void **)&unk);
121 IUnknown_Release(unk);
122 hr = IPin_QueryInterface(pin, &IID_IMediaSeeking, (
void **)&unk);
124 IUnknown_Release(unk);
136 ok(!
ref,
"Got unexpected refcount %ld.\n",
ref);
148 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
153 hr = IBaseFilter_EnumPins(
filter, &enum1);
156 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
158 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
163 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
166 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
168 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
170 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
171 IPin_Release(pins[0]);
173 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
175 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
178 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
180 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
182 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
183 IPin_Release(pins[0]);
185 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
187 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
190 hr = IEnumPins_Reset(enum1);
193 hr = IEnumPins_Next(enum1, 1, pins, &
count);
196 IPin_Release(pins[0]);
198 hr = IEnumPins_Next(enum1, 1, pins, &
count);
201 IPin_Release(pins[0]);
203 hr = IEnumPins_Next(enum1, 1, pins, &
count);
207 hr = IEnumPins_Reset(enum1);
210 hr = IEnumPins_Next(enum1, 2, pins,
NULL);
213 hr = IEnumPins_Next(enum1, 2, pins, &
count);
216 IPin_Release(pins[0]);
217 IPin_Release(pins[1]);
219 hr = IEnumPins_Next(enum1, 2, pins, &
count);
223 hr = IEnumPins_Reset(enum1);
226 hr = IEnumPins_Next(enum1, 3, pins, &
count);
229 IPin_Release(pins[0]);
230 IPin_Release(pins[1]);
232 hr = IEnumPins_Reset(enum1);
235 hr = IEnumPins_Clone(enum1, &enum2);
238 hr = IEnumPins_Skip(enum1, 3);
241 hr = IEnumPins_Skip(enum1, 2);
244 hr = IEnumPins_Skip(enum1, 1);
247 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
250 hr = IEnumPins_Next(enum2, 1, pins,
NULL);
252 IPin_Release(pins[0]);
254 IEnumPins_Release(enum2);
255 IEnumPins_Release(enum1);
257 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
268 hr = IBaseFilter_FindPin(
filter,
L"Input", &pin);
270 hr = IBaseFilter_FindPin(
filter,
L"Output", &pin);
276 hr = IBaseFilter_FindPin(
filter,
L"In", &pin);
280 ok(pin2 == pin,
"Expected pin %p, got %p.\n", pin, pin2);
284 hr = IBaseFilter_FindPin(
filter,
L"Out", &pin);
288 ok(pin2 == pin,
"Expected pin %p, got %p.\n", pin, pin2);
294 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
308 hr = IBaseFilter_FindPin(
filter,
L"In", &pin);
311 hr = IPin_QueryPinInfo(pin, &
info);
316 IBaseFilter_Release(
info.pFilter);
318 hr = IPin_QueryDirection(pin, &
dir);
322 hr = IPin_QueryId(pin, &
id);
327 hr = IPin_QueryInternalConnections(pin,
NULL, &
count);
332 hr = IBaseFilter_FindPin(
filter,
L"Out", &pin);
335 hr = IPin_QueryPinInfo(pin, &
info);
340 IBaseFilter_Release(
info.pFilter);
342 hr = IPin_QueryDirection(pin, &
dir);
346 hr = IPin_QueryId(pin, &
id);
351 hr = IPin_QueryInternalConnections(pin,
NULL, &
count);
357 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
412 ok(unk != &
test_outer,
"Returned IUnknown should not be outer IUnknown.\n");
414 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
416 ref = IUnknown_AddRef(unk);
417 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
420 ref = IUnknown_Release(unk);
421 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
426 ok(unk2 == unk,
"Got unexpected IUnknown %p.\n", unk2);
427 IUnknown_Release(unk2);
434 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
438 ok(filter2 == (
IBaseFilter *)0xdeadbeef,
"Got unexpected IBaseFilter %p.\n", filter2);
440 hr = IUnknown_QueryInterface(unk, &
test_iid, (
void **)&unk2);
442 ok(!unk2,
"Got unexpected IUnknown %p.\n", unk2);
446 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
448 IBaseFilter_Release(
filter);
449 ref = IUnknown_Release(unk);
450 ok(!
ref,
"Got unexpected refcount %ld.\n",
ref);
459 .majortype = {0x111},
461 .formattype = {0x333},
466 .bFixedSizeSamples =
TRUE,
467 .bTemporalCompression =
TRUE,
469 .formattype = {0x789},
470 .cbFormat =
sizeof(
format),
480 IBaseFilter_QueryInterface(
filter, &IID_ISampleGrabber, (
void **)&grabber);
484 hr = IPin_EnumMediaTypes(
sink, &enummt);
487 hr = IPin_EnumMediaTypes(
source, &enummt);
490 hr = IPin_QueryAccept(
sink, &mt);
495 hr = ISampleGrabber_SetMediaType(grabber, &match_mt);
498 hr = IPin_EnumMediaTypes(
sink, &enummt);
501 hr = IPin_EnumMediaTypes(
source, &enummt);
504 hr = IPin_QueryAccept(
sink, &mt);
509 match_mt.majortype = MEDIATYPE_Video;
511 hr = ISampleGrabber_SetMediaType(grabber, &match_mt);
513 hr = IPin_QueryAccept(
sink, &mt);
519 hr = IPin_QueryAccept(
sink, &mt);
523 mt.majortype = match_mt.majortype;
524 hr = IPin_QueryAccept(
sink, &mt);
529 match_mt.subtype = MEDIASUBTYPE_RGB8;
531 hr = ISampleGrabber_SetMediaType(grabber, &match_mt);
533 hr = IPin_QueryAccept(
sink, &mt);
539 hr = IPin_QueryAccept(
sink, &mt);
543 mt.subtype = match_mt.subtype;
544 hr = IPin_QueryAccept(
sink, &mt);
549 match_mt.formattype = FORMAT_None;
550 hr = ISampleGrabber_SetMediaType(grabber, &match_mt);
552 hr = IPin_QueryAccept(
sink, &mt);
558 hr = IPin_QueryAccept(
sink, &mt);
562 mt.formattype = match_mt.formattype;
563 hr = IPin_QueryAccept(
sink, &mt);
570 ISampleGrabber_Release(grabber);
572 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
594 return &
filter->source.pin;
637 IPin_QueryInterface(pin, &IID_IMemInputPin, (
void **)&
input);
642 hr = IMemInputPin_GetAllocatorRequirements(
input, &ret_props);
645 hr = IMemInputPin_GetAllocator(
input, &ret_allocator);
650 hr = IMemInputPin_NotifyAllocator(
input, ret_allocator,
TRUE);
652 IMemAllocator_Release(ret_allocator);
656 &IID_IMemAllocator, (
void **)&req_allocator);
658 hr = IMemInputPin_NotifyAllocator(
input, req_allocator,
TRUE);
661 hr = IMemInputPin_GetAllocator(
input, &ret_allocator);
663 ok(ret_allocator == req_allocator,
"Allocators didn't match.\n");
664 IMemAllocator_Release(ret_allocator);
666 hr = IMemAllocator_SetProperties(req_allocator, &req_props, &ret_props);
669 IMemAllocator_Release(req_allocator);
670 IMemInputPin_Release(
input);
678 iface->
pin.peer = peer;
682 if (
FAILED(
hr = IPin_ReceiveConnection(peer, &iface->
pin.IPin_iface,
mt)))
744 size = IMediaSample_GetActualDataLength(
sample);
745 ok(
size == 200,
"Got valid size %lu.\n",
size);
763 hr = IMediaSample_IsDiscontinuity(
sample);
765 hr = IMediaSample_IsPreroll(
sample);
767 hr = IMediaSample_IsSyncPoint(
sample);
779 ++
filter->got_new_segment;
796 ++
filter->got_begin_flush;
837 hr = IMemInputPin_ReceiveCanBlock(
input);
862 for (
i = 0;
i < 200; ++
i)
864 hr = IMediaSample_SetActualDataLength(
sample, 200);
882 ok(
sink->got_sample == 1,
"Got %u calls to Receive().\n",
sink->got_sample);
883 sink->got_sample = 0;
891 IMediaSample_Release(
sample);
914 for (
i = 0;
i < 200; ++
i)
916 hr = IMediaSample_SetActualDataLength(
sample, 200);
931 ok(!
testsink->got_new_segment,
"Got %u calls to IPin::NewSegment().\n",
testsink->got_new_segment);
932 hr = IPin_NewSegment(
sink, 10000, 20000, 1.0);
934 ok(
testsink->got_new_segment == 1,
"Got %u calls to IPin::NewSegment().\n",
testsink->got_new_segment);
937 hr = IPin_EndOfStream(
sink);
940 ok(
testsink->got_eos == 1,
"Got %u calls to IPin::EndOfStream().\n",
testsink->got_eos);
943 hr = IPin_EndOfStream(
sink);
945 ok(
testsink->got_eos == 1,
"Got %u calls to IPin::EndOfStream().\n",
testsink->got_eos);
953 ok(!
testsink->got_begin_flush,
"Got %u calls to IPin::BeginFlush().\n",
testsink->got_begin_flush);
954 hr = IPin_BeginFlush(
sink);
956 ok(
testsink->got_begin_flush == 1,
"Got %u calls to IPin::BeginFlush().\n",
testsink->got_begin_flush);
963 hr = IPin_EndOfStream(
sink);
968 ok(!
testsink->got_end_flush,
"Got %u calls to IPin::EndFlush().\n",
testsink->got_end_flush);
971 ok(
testsink->got_end_flush == 1,
"Got %u calls to IPin::EndFlush().\n",
testsink->got_end_flush);
980 IMediaSample_Release(
sample);
988 .majortype = MEDIATYPE_Stream,
989 .subtype = MEDIASUBTYPE_Avi,
990 .formattype = FORMAT_None,
1007 &IID_IFilterGraph2, (
void **)&
graph);
1008 IFilterGraph2_AddFilter(
graph, &testsource.
filter.IBaseFilter_iface,
L"source");
1010 IFilterGraph2_AddFilter(
graph,
filter,
L"sample grabber");
1011 IFilterGraph2_QueryInterface(
graph, &IID_IMediaControl, (
void **)&
control);
1013 IPin_QueryInterface(
sink, &IID_IMemInputPin, (
void **)&
input);
1015 IBaseFilter_QueryInterface(
filter, &IID_ISampleGrabber, (
void **)&grabber);
1017 testsource.
source_mt.majortype = MEDIATYPE_Video;
1018 testsource.
source_mt.subtype = MEDIASUBTYPE_RGB8;
1019 testsource.
source_mt.formattype = FORMAT_VideoInfo;
1021 hr = ISampleGrabber_GetConnectedMediaType(grabber, &
mt);
1026 peer = (
IPin *)0xdeadbeef;
1027 hr = IPin_ConnectedTo(
sink, &peer);
1029 ok(!peer,
"Got peer %p.\n", peer);
1031 hr = IPin_ConnectionMediaType(
sink, &
mt);
1036 hr = IFilterGraph2_ConnectDirect(
graph, &testsource.
source.pin.IPin_iface,
sink, &req_mt);
1041 hr = IFilterGraph2_ConnectDirect(
graph, &testsource.
source.pin.IPin_iface,
sink, &req_mt);
1044 hr = IPin_ConnectedTo(
sink, &peer);
1046 ok(peer == &testsource.
source.pin.IPin_iface,
"Got peer %p.\n", peer);
1049 hr = IPin_ConnectionMediaType(
sink, &
mt);
1060 hr = ISampleGrabber_GetConnectedMediaType(grabber,
NULL);
1063 hr = ISampleGrabber_GetConnectedMediaType(grabber, &
mt);
1067 hr = IPin_EnumMediaTypes(
sink, &enummt);
1069 hr = IPin_EnumMediaTypes(
source, &enummt);
1071 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
1074 IEnumMediaTypes_Release(enummt);
1076 req_mt.majortype = MEDIATYPE_Video;
1077 req_mt.subtype = MEDIASUBTYPE_RGB8;
1078 req_mt.formattype = FORMAT_VideoInfo;
1079 hr = IPin_QueryAccept(
sink, &req_mt);
1081 hr = IPin_QueryAccept(
source, &req_mt);
1083 req_mt.bTemporalCompression =
TRUE;
1084 hr = IPin_QueryAccept(
source, &req_mt);
1088 mt.majortype = MEDIATYPE_Midi;
1089 hr = ISampleGrabber_SetMediaType(grabber, &
mt);
1092 hr = IPin_QueryAccept(
source, &req_mt);
1095 req_mt.majortype = MEDIATYPE_Midi;
1096 req_mt.bTemporalCompression =
FALSE;
1097 hr = IPin_QueryAccept(
source, &req_mt);
1100 req_mt.bTemporalCompression =
TRUE;
1101 hr = IPin_QueryAccept(
source, &req_mt);
1105 hr = ISampleGrabber_SetMediaType(grabber, &
mt);
1110 peer = (
IPin *)0xdeadbeef;
1111 hr = IPin_ConnectedTo(
source, &peer);
1113 ok(!peer,
"Got peer %p.\n", peer);
1127 req_mt.bTemporalCompression =
FALSE;
1131 req_mt.bTemporalCompression =
TRUE;
1135 hr = IPin_ConnectedTo(
source, &peer);
1137 ok(peer == &
testsink.sink.
pin.IPin_iface,
"Got peer %p.\n", peer);
1177 req_mt.bTemporalCompression =
FALSE;
1185 req_mt.subtype = MEDIASUBTYPE_RGB32;
1197 req_mt.formattype = FORMAT_None;
1201 req_mt.majortype = MEDIATYPE_Video;
1202 req_mt.subtype = MEDIASUBTYPE_RGB8;
1211 req_mt.subtype = MEDIASUBTYPE_RGB32;
1223 req_mt.majortype = MEDIATYPE_Audio;
1228 req_mt.majortype = req_mt.subtype = req_mt.formattype =
GUID_NULL;
1236 req_mt.majortype = MEDIATYPE_Video;
1241 req_mt.subtype = MEDIASUBTYPE_RGB8;
1246 req_mt.formattype = FORMAT_None;
1254 req_mt.majortype = MEDIATYPE_Audio;
1259 req_mt.bTemporalCompression =
TRUE;
1260 req_mt.lSampleSize = 444;
1266 hr = IPin_EnumMediaTypes(
sink, &enummt);
1268 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
1271 IEnumMediaTypes_Release(enummt);
1280 ok(testsource.
source.pin.peer ==
sink,
"Got peer %p.\n", testsource.
source.pin.peer);
1281 IFilterGraph2_Disconnect(
graph, &testsource.
source.pin.IPin_iface);
1283 peer = (
IPin *)0xdeadbeef;
1284 hr = IPin_ConnectedTo(
sink, &peer);
1286 ok(!peer,
"Got peer %p.\n", peer);
1288 hr = IPin_ConnectionMediaType(
sink, &
mt);
1291 IMemInputPin_Release(
input);
1294 IMediaControl_Release(
control);
1295 ref = IFilterGraph2_Release(
graph);
1296 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1297 ISampleGrabber_Release(grabber);
1299 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1300 ref = IBaseFilter_Release(&testsource.
filter.IBaseFilter_iface);
1301 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1303 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1317 win_skip(
"Failed to create sample grabber filter, hr %#lx.\n",
hr);
1320 IBaseFilter_Release(
filter);
#define InterlockedIncrement
#define InterlockedDecrement
enum _PinDirection PIN_DIRECTION
const GUID IID_IKsPropertySet
const GUID IID_IBaseFilter
const GUID IID_IAsyncReader
static BOOL compare_media_types(const AM_MEDIA_TYPE *a, const AM_MEDIA_TYPE *b)
static struct sample_grabber * impl_from_strmbase_filter(struct strmbase_filter *iface)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void WINAPI CoTaskMemFree(void *ptr)
static WCHAR unknown[MAX_STRING_RESOURCE_LEN]
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLboolean GLboolean GLboolean b
GLsizei GLenum GLboolean sink
GLboolean GLboolean GLboolean GLboolean a
GLenum GLenum GLenum input
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 i
static HRESULT testsink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
static void testfilter_destroy(struct strmbase_filter *iface)
static const IUnknownVtbl outer_vtbl
static const struct strmbase_sink_ops testsink_ops
static HRESULT testsink_begin_flush(struct strmbase_sink *iface)
static void test_aggregation(void)
static HRESULT testsink_connect(struct strmbase_sink *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
static ULONG WINAPI outer_AddRef(IUnknown *iface)
static HRESULT WINAPI outer_QueryInterface(IUnknown *iface, REFIID iid, void **out)
static ULONG get_refcount(void *iface)
static void test_pin_info(void)
static HRESULT testsource_query_accept(struct strmbase_pin *iface, const AM_MEDIA_TYPE *mt)
static IUnknown test_outer
static void test_find_pin(void)
static HRESULT testsink_eos(struct strmbase_sink *iface)
static const struct strmbase_source_ops testsource_ops
static IBaseFilter * create_sample_grabber(void)
static void test_interfaces(void)
static HRESULT testsource_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt)
static void test_streaming_events(IMediaControl *control, IPin *sink, IMemInputPin *input, struct testfilter *testsink)
static void test_connect_pin(void)
static void test_media_types(void)
static void test_sink_allocator(IPin *pin)
static HRESULT WINAPI testsource_AttemptConnection(struct strmbase_source *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
static struct strmbase_pin * testfilter_get_pin(struct strmbase_filter *iface, unsigned int index)
static void test_enum_pins(void)
static HRESULT WINAPI testsink_Receive(struct strmbase_sink *iface, IMediaSample *sample)
#define check_interface(a, b, c)
static const struct strmbase_filter_ops testfilter_ops
static HRESULT testsink_new_segment(struct strmbase_sink *iface, REFERENCE_TIME start, REFERENCE_TIME stop, double rate)
static const GUID test_iid
static void test_sample_processing(IMediaControl *control, IMemInputPin *input, struct testfilter *sink)
static HRESULT testsink_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt)
static HRESULT testsink_end_flush(struct strmbase_sink *iface)
static void testfilter_init(struct testfilter *filter)
static ULONG WINAPI outer_Release(IUnknown *iface)
const GUID IID_IPersistPropertyBag
#define IsEqualGUID(rguid1, rguid2)
#define offsetof(TYPE, MEMBER)
static __inline const char * wine_dbgstr_guid(const GUID *id)
HRESULT WINAPI CopyMediaType(AM_MEDIA_TYPE *pDest, const AM_MEDIA_TYPE *pSrc)
void WINAPI FreeMediaType(AM_MEDIA_TYPE *pMediaType)
void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_source_ops *func_table)
void strmbase_sink_cleanup(struct strmbase_sink *pin)
void strmbase_sink_init(struct strmbase_sink *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_sink_ops *ops, IMemAllocator *allocator)
void strmbase_filter_cleanup(struct strmbase_filter *filter)
void strmbase_source_cleanup(struct strmbase_source *pin)
void strmbase_filter_init(struct strmbase_filter *filter, IUnknown *outer, const CLSID *clsid, const struct strmbase_filter_ops *func_table)
struct strmbase_filter * filter
unsigned int got_end_flush
unsigned int got_begin_flush
struct strmbase_source source
const AM_MEDIA_TYPE * sink_mt
struct strmbase_filter filter
unsigned int got_new_segment
struct strmbase_filter filter
#define CONTAINING_RECORD(address, type, field)
#define VFW_E_TYPE_NOT_ACCEPTED
#define VFW_E_NOT_COMMITTED
#define VFW_E_NOT_STOPPED
#define VFW_E_NO_ACCEPTABLE_TYPES
#define VFW_E_WRONG_STATE
#define VFW_S_NO_MORE_ITEMS
#define VFW_E_NOT_CONNECTED
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out