24#include "wmcodecdsp.h"
29static const GUID test_subtype = {
mmioFOURCC(
'w',
't',
's',
't'),0x0000,0x0010,{0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71}};
45 && !
memcmp(
a->pbFormat,
b->pbFormat,
a->cbFormat);
52 return IUnknown_Release(
unknown);
63 trace(
"id %#Ix, driver %p, msg %#x, lparam1 %#Ix, lparam2 %#Ix.\n",
91 out->biSizeImage = 24 * (((29 * 12 + 31) / 8) & ~3);
121 "Input types didn't match.\n");
123 "Output types didn't match.\n");
124 ok(!in_begin,
"Got multiple ICM_DECOMPRESS_BEGIN messages.\n");
130 ok(in_begin,
"Got unmatched ICM_DECOMPRESS_END message.\n");
141 ok(in_begin,
"Got ICM_DECOMPRESS without ICM_DECOMPRESS_BEGIN.\n");
154 "Input types didn't match.\n");
156 "Output types didn't match.\n");
159 for (
i = 0;
i < 200; ++
i)
162 for (
i = 0;
i < 24 * (((29 * 12 + 31) / 8) & ~3); ++
i)
177 ok(0,
"Got unexpected message %#x.\n",
msg);
182#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
191 hr = IUnknown_QueryInterface(iface, iid, (
void **)&unk);
194 IUnknown_Release(unk);
220 IBaseFilter_FindPin(
filter,
L"In", &pin);
232 IBaseFilter_FindPin(
filter,
L"Out", &pin);
244 IBaseFilter_Release(
filter);
299 ok(unk != &
test_outer,
"Returned IUnknown should not be outer IUnknown.\n");
301 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
303 ref = IUnknown_AddRef(unk);
304 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
307 ref = IUnknown_Release(unk);
308 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
313 ok(unk2 == unk,
"Got unexpected IUnknown %p.\n", unk2);
314 IUnknown_Release(unk2);
321 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
325 ok(filter2 == (
IBaseFilter *)0xdeadbeef,
"Got unexpected IBaseFilter %p.\n", filter2);
327 hr = IUnknown_QueryInterface(unk, &
test_iid, (
void **)&unk2);
329 ok(!unk2,
"Got unexpected IUnknown %p.\n", unk2);
333 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
335 IBaseFilter_Release(
filter);
336 ref = IUnknown_Release(unk);
337 ok(!
ref,
"Got unexpected refcount %ld.\n",
ref);
350 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
355 hr = IBaseFilter_EnumPins(
filter, &enum1);
358 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
360 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
365 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
368 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
370 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
372 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
373 IPin_Release(pins[0]);
375 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
377 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
380 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
382 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
384 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
385 IPin_Release(pins[0]);
387 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
389 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
392 hr = IEnumPins_Reset(enum1);
395 hr = IEnumPins_Next(enum1, 1, pins, &
count);
398 IPin_Release(pins[0]);
400 hr = IEnumPins_Next(enum1, 1, pins, &
count);
403 IPin_Release(pins[0]);
405 hr = IEnumPins_Next(enum1, 1, pins, &
count);
409 hr = IEnumPins_Reset(enum1);
412 hr = IEnumPins_Next(enum1, 2, pins,
NULL);
415 hr = IEnumPins_Next(enum1, 2, pins, &
count);
418 IPin_Release(pins[0]);
419 IPin_Release(pins[1]);
421 hr = IEnumPins_Next(enum1, 2, pins, &
count);
425 hr = IEnumPins_Reset(enum1);
428 hr = IEnumPins_Next(enum1, 3, pins, &
count);
431 IPin_Release(pins[0]);
432 IPin_Release(pins[1]);
434 hr = IEnumPins_Reset(enum1);
437 hr = IEnumPins_Clone(enum1, &enum2);
440 hr = IEnumPins_Skip(enum1, 3);
443 hr = IEnumPins_Skip(enum1, 2);
446 hr = IEnumPins_Skip(enum1, 1);
449 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
452 hr = IEnumPins_Next(enum2, 1, pins,
NULL);
454 IPin_Release(pins[0]);
456 IEnumPins_Release(enum2);
457 IEnumPins_Release(enum1);
459 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
473 hr = IBaseFilter_FindPin(
filter,
L"In", &pin);
477 ok(pin == pin2,
"Pins didn't match.\n");
481 hr = IBaseFilter_FindPin(
filter,
L"Out", &pin);
485 ok(pin == pin2,
"Pins didn't match.\n");
489 hr = IBaseFilter_FindPin(
filter,
L"XForm In", &pin);
491 hr = IBaseFilter_FindPin(
filter,
L"XForm Out", &pin);
493 hr = IBaseFilter_FindPin(
filter,
L"input pin", &pin);
495 hr = IBaseFilter_FindPin(
filter,
L"output pin", &pin);
500 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
513 hr = IBaseFilter_FindPin(
filter,
L"In", &pin);
516 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
518 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
520 hr = IPin_QueryPinInfo(pin, &
info);
526 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
528 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
529 IBaseFilter_Release(
info.pFilter);
531 hr = IPin_QueryDirection(pin, &
dir);
535 hr = IPin_QueryId(pin, &
id);
540 hr = IPin_QueryInternalConnections(pin,
NULL,
NULL);
545 hr = IBaseFilter_FindPin(
filter,
L"Out", &pin);
551 hr = IPin_QueryPinInfo(pin, &
info);
556 IBaseFilter_Release(
info.pFilter);
558 hr = IPin_QueryDirection(pin, &
dir);
562 hr = IPin_QueryId(pin, &
id);
567 hr = IPin_QueryInternalConnections(pin,
NULL,
NULL);
573 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
586 IBaseFilter_FindPin(
filter,
L"In", &pin);
588 hr = IPin_EnumMediaTypes(pin, &enummt);
591 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
594 IEnumMediaTypes_Release(enummt);
596 mt.majortype = MEDIATYPE_Video;
598 mt.formattype = FORMAT_VideoInfo;
600 mt.pbFormat = (
BYTE *)&vih;
606 hr = IPin_QueryAccept(pin, &mt);
610 hr = IPin_QueryAccept(pin, &mt);
614 mt.bFixedSizeSamples =
TRUE;
615 mt.bTemporalCompression =
TRUE;
616 mt.lSampleSize = 123;
617 hr = IPin_QueryAccept(pin, &mt);
623 hr = IPin_QueryAccept(pin, &mt);
625 mt.subtype = MEDIASUBTYPE_RGB24;
626 hr = IPin_QueryAccept(pin, &mt);
631 hr = IPin_QueryAccept(pin, &mt);
633 mt.formattype = FORMAT_None;
634 hr = IPin_QueryAccept(pin, &mt);
636 mt.formattype = FORMAT_VideoInfo;
640 IBaseFilter_FindPin(
filter,
L"Out", &pin);
642 hr = IPin_EnumMediaTypes(pin, &enummt);
645 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
648 mt.subtype = MEDIASUBTYPE_RGB24;
652 hr = IPin_QueryAccept(pin, &mt);
655 IEnumMediaTypes_Release(enummt);
659 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
671 IBaseFilter_FindPin(
filter,
L"In", &pin);
673 hr = IPin_EnumMediaTypes(pin, &enum1);
676 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
679 hr = IEnumMediaTypes_Next(enum1, 1, mts, &
count);
683 hr = IEnumMediaTypes_Reset(enum1);
686 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
689 hr = IEnumMediaTypes_Clone(enum1, &enum2);
692 hr = IEnumMediaTypes_Skip(enum1, 1);
695 hr = IEnumMediaTypes_Next(enum2, 1, mts,
NULL);
698 IEnumMediaTypes_Release(enum1);
699 IEnumMediaTypes_Release(enum2);
702 IBaseFilter_FindPin(
filter,
L"Out", &pin);
704 hr = IPin_EnumMediaTypes(pin, &enum1);
707 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
710 hr = IEnumMediaTypes_Next(enum1, 1, mts, &
count);
714 hr = IEnumMediaTypes_Reset(enum1);
717 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
720 hr = IEnumMediaTypes_Clone(enum1, &enum2);
723 hr = IEnumMediaTypes_Skip(enum1, 1);
726 hr = IEnumMediaTypes_Next(enum2, 1, mts,
NULL);
729 IEnumMediaTypes_Release(enum1);
730 IEnumMediaTypes_Release(enum2);
734 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
791 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
812 return &
filter->source.pin;
880 Quality q = { Famine, 2000, -10000000, 10000000 };
882 IPin_QueryInterface(
filter->sink.pin.peer, &IID_IQualityControl, (
void**)&
qc);
885 IQualityControl_Release(
qc);
901 ok(
size == 24 * (((29 * 12 + 31) / 8) & ~3),
"Got size %lu.\n",
size);
902 size = IMediaSample_GetActualDataLength(
sample);
903 ok(
size == 24 * (((29 * 12 + 31) / 8) & ~3),
"Got valid size %lu.\n",
size);
930 hr = IMediaSample_IsDiscontinuity(
sample);
932 hr = IMediaSample_IsPreroll(
sample);
934 hr = IMediaSample_IsSyncPoint(
sample);
951 ++
filter->got_new_segment;
968 ++
filter->got_begin_flush;
1006 hr = IMemInputPin_GetAllocatorRequirements(
input, &
props);
1009 hr = IMemInputPin_GetAllocator(
input, &ret_allocator);
1014 hr = IMemAllocator_GetProperties(ret_allocator, &
props);
1016 ok(!
props.cBuffers,
"Got %ld buffers.\n",
props.cBuffers);
1017 ok(!
props.cbBuffer,
"Got size %ld.\n",
props.cbBuffer);
1018 ok(!
props.cbAlign,
"Got alignment %ld.\n",
props.cbAlign);
1019 ok(!
props.cbPrefix,
"Got prefix %ld.\n",
props.cbPrefix);
1021 hr = IMemInputPin_NotifyAllocator(
input, ret_allocator,
TRUE);
1023 IMemAllocator_Release(ret_allocator);
1030 &IID_IMemAllocator, (
void **)&req_allocator);
1033 props.cbBuffer = 256;
1036 hr = IMemAllocator_SetProperties(req_allocator, &
props, &ret_props);
1039 hr = IMemInputPin_NotifyAllocator(
input, req_allocator,
TRUE);
1042 hr = IMemInputPin_GetAllocator(
input, &ret_allocator);
1044 ok(ret_allocator == req_allocator,
"Allocators didn't match.\n");
1046 IMemAllocator_Release(req_allocator);
1047 IMemAllocator_Release(ret_allocator);
1059 hr = IMemInputPin_ReceiveCanBlock(
input);
1080 for (
i = 0;
i < 200; ++
i)
1082 hr = IMediaSample_SetActualDataLength(
sample, 200);
1095 ok(
sink->got_sample == 1,
"Got %u calls to Receive().\n",
sink->got_sample);
1096 sink->got_sample = 0;
1105 ok(
sink->got_sample == 1,
"Got %u calls to Receive().\n",
sink->got_sample);
1106 sink->got_sample = 0;
1115 ok(
sink->got_sample == 1,
"Got %u calls to Receive().\n",
sink->got_sample);
1116 sink->got_sample = 0;
1135 sink->got_sample = 0;
1156 sink->got_sample = 0;
1159 ok(
sink->got_sample == 1,
"Got %u calls to Receive().\n",
sink->got_sample);
1160 sink->got_sample = 0;
1168 IMediaSample_Release(
sample);
1192 for (
i = 0;
i < 200; ++
i)
1194 hr = IMediaSample_SetActualDataLength(
sample, 200);
1199 ok(!
testsink->got_new_segment,
"Got %u calls to IPin::NewSegment().\n",
testsink->got_new_segment);
1200 hr = IPin_NewSegment(
sink, 10000, 20000, 1.0);
1202 ok(
testsink->got_new_segment == 1,
"Got %u calls to IPin::NewSegment().\n",
testsink->got_new_segment);
1205 hr = IPin_EndOfStream(
sink);
1208 ok(
testsink->got_eos == 1,
"Got %u calls to IPin::EndOfStream().\n",
testsink->got_eos);
1211 hr = IPin_EndOfStream(
sink);
1213 ok(
testsink->got_eos == 1,
"Got %u calls to IPin::EndOfStream().\n",
testsink->got_eos);
1221 ok(!
testsink->got_begin_flush,
"Got %u calls to IPin::BeginFlush().\n",
testsink->got_begin_flush);
1222 hr = IPin_BeginFlush(
sink);
1224 ok(
testsink->got_begin_flush == 1,
"Got %u calls to IPin::BeginFlush().\n",
testsink->got_begin_flush);
1229 hr = IPin_EndOfStream(
sink);
1232 ok(!
testsink->got_end_flush,
"Got %u calls to IPin::EndFlush().\n",
testsink->got_end_flush);
1233 hr = IPin_EndFlush(
sink);
1235 ok(
testsink->got_end_flush == 1,
"Got %u calls to IPin::EndFlush().\n",
testsink->got_end_flush);
1244 IMediaSample_Release(
sample);
1254 .bmiHeader.biWidth = 29,
1255 .bmiHeader.biHeight = 24,
1256 .bmiHeader.biBitCount = 16,
1260 .majortype = MEDIATYPE_Video,
1262 .formattype = FORMAT_VideoInfo,
1264 .cbFormat =
sizeof(req_format),
1265 .pbFormat = (
BYTE *)&req_format,
1280 &IID_IFilterGraph2, (
void **)&
graph);
1284 IFilterGraph2_AddFilter(
graph, &testsource.
filter.IBaseFilter_iface,
L"source");
1285 IFilterGraph2_AddFilter(
graph,
filter,
L"AVI decoder");
1288 IPin_QueryInterface(
sink, &IID_IMemInputPin, (
void **)&meminput);
1289 IFilterGraph2_QueryInterface(
graph, &IID_IMediaControl, (
void **)&
control);
1293 peer = (
IPin *)0xdeadbeef;
1294 hr = IPin_ConnectedTo(
sink, &peer);
1296 ok(!peer,
"Got peer %p.\n", peer);
1298 hr = IPin_ConnectionMediaType(
sink, &
mt);
1303 hr = IFilterGraph2_ConnectDirect(
graph, &testsource.
source.pin.IPin_iface,
sink, &req_mt);
1308 req_mt.subtype = MEDIASUBTYPE_RGB24;
1309 hr = IFilterGraph2_ConnectDirect(
graph, &testsource.
source.pin.IPin_iface,
sink, &req_mt);
1313 hr = IFilterGraph2_ConnectDirect(
graph, &testsource.
source.pin.IPin_iface,
sink, &req_mt);
1316 hr = IPin_ConnectedTo(
sink, &peer);
1318 ok(peer == &testsource.
source.pin.IPin_iface,
"Got peer %p.\n", peer);
1321 hr = IPin_ConnectionMediaType(
sink, &
mt);
1336 hr = IPin_EnumMediaTypes(
source, &enummt);
1339 for (
i = 0;
i < 9; ++
i)
1349 {&MEDIASUBTYPE_CLJR,
mmioFOURCC(
'C',
'L',
'J',
'R'), 8},
1350 {&MEDIASUBTYPE_UYVY,
mmioFOURCC(
'U',
'Y',
'V',
'Y'), 16},
1351 {&MEDIASUBTYPE_YUY2,
mmioFOURCC(
'Y',
'U',
'Y',
'2'), 16},
1352 {&MEDIASUBTYPE_RGB32,
BI_RGB, 32},
1353 {&MEDIASUBTYPE_RGB24,
BI_RGB, 24},
1355 {&MEDIASUBTYPE_RGB555,
BI_RGB, 16},
1356 {&MEDIASUBTYPE_RGB8,
BI_RGB, 8},
1357 {&MEDIASUBTYPE_I420,
mmioFOURCC(
'I',
'4',
'2',
'0'), 12},
1363 .bmiHeader.biWidth = 29,
1364 .bmiHeader.biHeight = 24,
1365 .bmiHeader.biBitCount =
expect[
i].bpp,
1366 .bmiHeader.biCompression =
expect[
i].compression,
1367 .bmiHeader.biSizeImage = 24 * (((29 *
expect[
i].bpp + 31) / 8) & ~3),
1372 .majortype = MEDIATYPE_Video,
1373 .subtype = *
expect[
i].subtype,
1374 .bFixedSizeSamples =
TRUE,
1375 .lSampleSize = 24 * (((29 *
expect[
i].bpp + 31) / 8) & ~3),
1376 .formattype = FORMAT_VideoInfo,
1378 .pbFormat = (
BYTE *)&expect_format,
1381 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
1384 "%u: Media types didn't match.\n",
i);
1386 "%u: Format blocks didn't match.\n",
i);
1391 ok(pmt->cbFormat ==
offsetof(
VIDEOINFO, dwBitMasks[3]),
"Got format size %lu.\n", pmt->cbFormat);
1392 ok(
format->dwBitMasks[iRED] == 0xf800,
"Got red bit mask %#lx.\n",
format->dwBitMasks[iRED]);
1393 ok(
format->dwBitMasks[iGREEN] == 0x07e0,
"Got green bit mask %#lx.\n",
format->dwBitMasks[iGREEN]);
1394 ok(
format->dwBitMasks[iBLUE] == 0x001f,
"Got blue bit mask %#lx.\n",
format->dwBitMasks[iBLUE]);
1397 hr = IPin_QueryAccept(
source, pmt);
1406 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
1409 IEnumMediaTypes_Release(enummt);
1415 peer = (
IPin *)0xdeadbeef;
1416 hr = IPin_ConnectedTo(
source, &peer);
1418 ok(!peer,
"Got peer %p.\n", peer);
1437 hr = IPin_ConnectedTo(
source, &peer);
1439 ok(peer == &
testsink.sink.
pin.IPin_iface,
"Got peer %p.\n", peer);
1467 req_mt.lSampleSize = 999;
1468 req_mt.bTemporalCompression = req_mt.bFixedSizeSamples =
TRUE;
1475 req_mt.formattype = FORMAT_None;
1478 req_mt.formattype = FORMAT_VideoInfo;
1495 req_mt.subtype = MEDIASUBTYPE_RGB32;
1506 req_mt.formattype = FORMAT_None;
1510 req_mt.majortype = MEDIATYPE_Video;
1511 req_mt.subtype = MEDIASUBTYPE_I420;
1519 req_mt.subtype = MEDIASUBTYPE_RGB32;
1530 req_mt.majortype = MEDIATYPE_Audio;
1543 req_mt.majortype = MEDIATYPE_Video;
1544 req_mt.subtype = MEDIASUBTYPE_I420;
1545 req_mt.formattype = FORMAT_VideoInfo;
1546 req_mt.lSampleSize = 444;
1555 ok(testsource.
source.pin.peer ==
sink,
"Got peer %p.\n", testsource.
source.pin.peer);
1556 IFilterGraph2_Disconnect(
graph, &testsource.
source.pin.IPin_iface);
1560 IMemInputPin_Release(meminput);
1563 IMediaControl_Release(
control);
1564 ref = IFilterGraph2_Release(
graph);
1565 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1567 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1568 ref = IBaseFilter_Release(&testsource.
filter.IBaseFilter_iface);
1569 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1571 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1579 ok(
ret,
"Failed to install driver.\n");
1596 ok(
ret,
"Failed to remove driver.\n");
#define InterlockedIncrement
#define InterlockedDecrement
enum _PinDirection PIN_DIRECTION
_In_ fcb _In_ chunk _In_ uint64_t _In_ uint64_t _In_ bool _In_opt_ void _In_opt_ PIRP _In_ LIST_ENTRY _In_ uint8_t compression
const GUID IID_IKsPropertySet
const GUID IID_IBaseFilter
const GUID IID_IAsyncReader
static struct avi_decompressor * 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)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
_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)
struct tagVIDEOINFOHEADER VIDEOINFOHEADER
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble GLdouble q
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
GLsizei GLenum GLboolean sink
GLboolean GLboolean GLboolean GLboolean a
GLenum GLenum GLenum input
GLfloat GLfloat GLfloat GLfloat h
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
#define todo_wine_if(is_todo)
#define mmioFOURCC(c0, c1, c2, c3)
static BITMAPINFOHEADER source_bitmap_info
static HRESULT WINAPI testsource_DecideAllocator(struct strmbase_source *iface, IMemInputPin *peer, IMemAllocator **allocator)
static BOOL compare_media_types(const AM_MEDIA_TYPE *a, const AM_MEDIA_TYPE *b)
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 IBaseFilter * create_avi_dec(void)
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 BITMAPINFOHEADER sink_bitmap_info
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 DWORD WINAPI call_qc_notify(void *ptr)
static void test_pin_info(void)
static IUnknown test_outer
static const GUID test_subtype
static void test_find_pin(void)
static HRESULT testsink_eos(struct strmbase_sink *iface)
static const struct strmbase_source_ops testsource_ops
static void test_enum_media_types(void)
static void test_interfaces(void)
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 struct strmbase_pin * testfilter_get_pin(struct strmbase_filter *iface, unsigned int index)
static LRESULT CALLBACK vfw_driver_proc(DWORD_PTR id, HDRVR driver, UINT msg, LPARAM lparam1, LPARAM lparam2)
static void test_enum_pins(void)
static HRESULT WINAPI testsink_Receive(struct strmbase_sink *iface, IMediaSample *sample)
static void test_sink_allocator(IMemInputPin *input)
static const DWORD test_handler
#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 void test_unconnected_filter_state(void)
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)
BOOL VFWAPI ICInstall(DWORD type, DWORD handler, LPARAM lparam, char *desc, UINT flags)
BOOL VFWAPI ICRemove(DWORD type, DWORD handler, UINT flags)
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)
HRESULT WINAPI BaseOutputPinImpl_AttemptConnection(struct strmbase_source *pin, IPin *peer, const AM_MEDIA_TYPE *mt)
void WINAPI DeleteMediaType(AM_MEDIA_TYPE *pMediaType)
struct strmbase_filter * filter
unsigned int got_end_flush
unsigned int got_begin_flush
struct strmbase_source source
struct strmbase_filter filter
unsigned int got_new_segment
struct strmbase_filter filter
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define CONTAINING_RECORD(address, type, field)
#define MEDIASUBTYPE_NULL
#define ICM_DECOMPRESS_GET_PALETTE
#define ICM_DECOMPRESS_QUERY
#define ICERR_UNSUPPORTED
#define ICM_DECOMPRESS_GET_FORMAT
#define ICM_DECOMPRESS_END
#define ICM_DECOMPRESS_BEGIN
#define ICDECOMPRESS_NOTKEYFRAME
#define ICINSTALL_FUNCTION
#define ICDECOMPRESS_PREROLL
#define ICM_DECOMPRESS_SET_PALETTE
#define VFW_E_SAMPLE_TIME_NOT_SET
#define VFW_E_MEDIA_TIME_NOT_SET
#define VFW_E_INVALIDMEDIATYPE
#define VFW_E_TYPE_NOT_ACCEPTED
#define VFW_E_NOT_COMMITTED
#define VFW_E_NOT_STOPPED
#define VFW_S_NO_STOP_TIME
#define VFW_E_NO_ACCEPTABLE_TYPES
#define VFW_E_WRONG_STATE
#define VFW_S_NO_MORE_ITEMS
#define VFW_E_NOT_CONNECTED
static const WCHAR props[]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
static WORD const char * driver