39 && !
memcmp(
a->pbFormat,
b->pbFormat,
a->cbFormat);
55 return IUnknown_Release(
unknown);
58#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
67 hr = IUnknown_QueryInterface(iface, iid, (
void **)&unk);
70 IUnknown_Release(unk);
101 IBaseFilter_FindPin(
filter,
L"In", &pin);
116 IBaseFilter_Release(
filter);
171 ok(unk != &
test_outer,
"Returned IUnknown should not be outer IUnknown.\n");
173 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
175 ref = IUnknown_AddRef(unk);
176 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
179 ref = IUnknown_Release(unk);
180 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
185 ok(unk2 == unk,
"Got unexpected IUnknown %p.\n", unk2);
186 IUnknown_Release(unk2);
193 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
197 ok(filter2 == (
IBaseFilter *)0xdeadbeef,
"Got unexpected IBaseFilter %p.\n", filter2);
199 hr = IUnknown_QueryInterface(unk, &
test_iid, (
void **)&unk2);
201 ok(!unk2,
"Got unexpected IUnknown %p.\n", unk2);
205 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
207 IBaseFilter_Release(
filter);
208 ref = IUnknown_Release(unk);
209 ok(!
ref,
"Got unexpected refcount %ld.\n",
ref);
223 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
228 hr = IBaseFilter_EnumPins(
filter, &enum1);
231 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
233 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
238 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
241 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
243 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
245 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
246 IPin_Release(pins[0]);
248 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
250 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
253 hr = IEnumPins_Reset(enum1);
256 hr = IEnumPins_Next(enum1, 1, pins, &
count);
259 IPin_Release(pins[0]);
261 hr = IEnumPins_Next(enum1, 1, pins, &
count);
265 hr = IEnumPins_Reset(enum1);
268 hr = IEnumPins_Next(enum1, 2, pins,
NULL);
271 hr = IEnumPins_Next(enum1, 2, pins, &
count);
274 IPin_Release(pins[0]);
276 hr = IEnumPins_Reset(enum1);
279 hr = IEnumPins_Clone(enum1, &enum2);
282 hr = IEnumPins_Skip(enum1, 2);
285 hr = IEnumPins_Skip(enum1, 1);
288 hr = IEnumPins_Skip(enum1, 1);
291 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
294 hr = IEnumPins_Next(enum2, 1, pins,
NULL);
296 IPin_Release(pins[0]);
298 IEnumPins_Release(enum2);
299 IEnumPins_Release(enum1);
301 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
312 hr = IBaseFilter_FindPin(
filter,
L"input pin", &pin);
315 hr = IBaseFilter_FindPin(
filter,
L"In", &pin);
323 ok(pin == pin2,
"Expected pin %p, got %p.\n", pin2, pin);
329 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
342 hr = IBaseFilter_FindPin(
filter,
L"In", &pin);
345 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
347 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
349 hr = IPin_QueryPinInfo(pin, &
info);
355 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
357 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
358 IBaseFilter_Release(
info.pFilter);
360 hr = IPin_QueryDirection(pin, &
dir);
364 hr = IPin_QueryId(pin, &
id);
369 hr = IPin_QueryInternalConnections(pin,
NULL,
NULL);
374 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
392 static const GUID *subtype_tests[] =
395 &MEDIASUBTYPE_RGB565,
400 IBaseFilter_FindPin(
filter,
L"In", &pin);
402 hr = IPin_EnumMediaTypes(pin, &enummt);
405 hr = IEnumMediaTypes_Next(enummt, 1, &mt,
NULL);
408 IEnumMediaTypes_Release(enummt);
410 req_mt.majortype = MEDIATYPE_Video;
411 req_mt.formattype = FORMAT_VideoInfo;
413 req_mt.pbFormat = (
BYTE *)&vih;
417 req_mt.subtype = *subtype_tests[
i];
418 hr = IPin_QueryAccept(pin, &req_mt);
423 hr = IPin_QueryAccept(pin, &req_mt);
425 req_mt.subtype = MEDIASUBTYPE_RGB24;
428 hr = IPin_QueryAccept(pin, &req_mt);
430 req_mt.majortype = MEDIATYPE_Video;
432 req_mt.formattype = FORMAT_None;
433 hr = IPin_QueryAccept(pin, &req_mt);
437 hr = IPin_QueryAccept(pin, &req_mt);
442 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
454 IBaseFilter_FindPin(
filter,
L"In", &pin);
456 hr = IPin_EnumMediaTypes(pin, &enum1);
459 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
462 hr = IEnumMediaTypes_Next(enum1, 1, mts, &
count);
466 hr = IEnumMediaTypes_Reset(enum1);
469 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
472 hr = IEnumMediaTypes_Clone(enum1, &enum2);
475 hr = IEnumMediaTypes_Skip(enum1, 1);
478 hr = IEnumMediaTypes_Next(enum2, 1, mts,
NULL);
481 IEnumMediaTypes_Release(enum1);
482 IEnumMediaTypes_Release(enum2);
486 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
505 return &
filter->source.pin;
573 ok(0,
"Unexpected call.\n");
579 ok(0,
"Unexpected call.\n");
603 ok(0,
"Unexpected call.\n");
609 ok(0,
"Unexpected call.\n");
615 ok(0,
"Unexpected call.\n");
637 ok(!target_format,
"Got target format %s.\n",
debugstr_guid(target_format));
651 ok(0,
"Unexpected call.\n");
657 ok(0,
"Unexpected call.\n");
663 ok(0,
"Unexpected call.\n");
669 ok(0,
"Unexpected call.\n");
717 hr = IMemInputPin_GetAllocatorRequirements(
input, &
props);
720 hr = IMemInputPin_GetAllocator(
input, &ret_allocator);
725 hr = IMemAllocator_GetProperties(ret_allocator, &
props);
727 ok(!
props.cBuffers,
"Got %ld buffers.\n",
props.cBuffers);
729 ok(!
props.cbAlign,
"Got alignment %ld.\n",
props.cbAlign);
730 ok(!
props.cbPrefix,
"Got prefix %ld.\n",
props.cbPrefix);
732 hr = IMemInputPin_NotifyAllocator(
input, ret_allocator,
TRUE);
734 IMemAllocator_Release(ret_allocator);
741 &IID_IMemAllocator, (
void **)&req_allocator);
743 hr = IMemInputPin_NotifyAllocator(
input, req_allocator,
TRUE);
746 hr = IMemInputPin_GetAllocator(
input, &ret_allocator);
748 ok(ret_allocator == req_allocator,
"Allocators didn't match.\n");
750 IMemAllocator_Release(req_allocator);
751 IMemAllocator_Release(ret_allocator);
768 IMediaSample_Release(
params->sample);
793 hr = IMediaSample_SetActualDataLength(
sample, 32 * 16 * 2);
796 start_time *= 10000000;
797 end_time = start_time + 10000000;
798 hr = IMediaSample_SetTime(
sample, &start_time, &end_time);
825#define join_thread(a) join_thread_(__LINE__, a)
979 hr = IPin_BeginFlush(pin);
989 hr = IPin_EndFlush(pin);
1005 hr = IPin_BeginFlush(pin);
1011 hr = IPin_EndFlush(pin);
1025 OAFilterState
state;
1029 IBaseFilter_QueryInterface(
filter, &IID_IMediaSeeking, (
void **)&seeking);
1037 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
1038 ok(
hr == 0xdeadbeef,
"Got hr %#lx.\n",
hr);
1045 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
1085 hr = IPin_BeginFlush(pin);
1090 hr = IPin_EndFlush(pin);
1102 IMediaSeeking_Release(seeking);
1108 unsigned int ret = 0;
1112 while ((
hr = IMediaEvent_GetEvent(eventsrc, &
code, ¶m1, ¶m2,
timeout)) ==
S_OK)
1114 if (
code == expected_code)
1116 ok(param1 == expected1,
"Got param1 %#Ix.\n", param1);
1117 ok(param2 == expected2,
"Got param2 %#Ix.\n", param2);
1120 IMediaEvent_FreeEventParams(eventsrc,
code, param1, param2);
1135 IMediaEvent *eventsrc;
1136 OAFilterState
state;
1140 IMediaControl_QueryInterface(
control, &IID_IMediaEvent, (
void **)&eventsrc);
1145 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1147 hr = IPin_EndOfStream(pin);
1153 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1161 ok(
ret == 1,
"Expected EC_COMPLETE.\n");
1166 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1178 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1180 hr = IPin_EndOfStream(pin);
1190 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1199 hr = IPin_BeginFlush(pin);
1201 hr = IPin_EndOfStream(pin);
1203 hr = IPin_EndFlush(pin);
1220 hr = IPin_EndOfStream(pin);
1225 hr = IPin_BeginFlush(pin);
1227 hr = IPin_EndFlush(pin);
1232 hr = IPin_EndOfStream(pin);
1235 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1240 ok(!
ret,
"Got unexpected EC_COMPLETE.\n");
1242 IMediaEvent_Release(eventsrc);
1250 OAFilterState
state;
1257 IBaseFilter_QueryInterface(
filter, &IID_IBasicVideo, (
void **)&video);
1259 hr = IBasicVideo_GetCurrentImage(video,
NULL,
NULL);
1266 hr = IBasicVideo_GetCurrentImage(video, &
size,
NULL);
1271 hr = IBasicVideo_GetCurrentImage(video, &
size,
buffer);
1273 ok(
size == 0xdeadbeef,
"Got size %ld.\n",
size);
1279 hr = IBasicVideo_GetCurrentImage(video, &
size,
buffer);
1281 ok(
size == 0xdeadbeef,
"Got size %ld.\n",
size);
1288 hr = IBasicVideo_GetCurrentImage(video, &
size,
buffer);
1294 hr = IBasicVideo_GetCurrentImage(video, &
size,
buffer);
1298 for (
i = 0;
i < 32 * 16 * 2; ++
i)
1301 ok(
data[
i] == 0x55,
"Got unexpected byte %02x at %u.\n",
data[
i],
i);
1308 hr = IBasicVideo_GetCurrentImage(video, &
size,
buffer);
1314 IBasicVideo_Release(video);
1324 IMediaEvent *eventsrc;
1325 OAFilterState
state;
1332 IMediaControl_QueryInterface(
control, &IID_IMediaEvent, (
void **)&eventsrc);
1333 IPin_QueryInterface(pin, &IID_IOverlay, (
void **)&overlay);
1335 hr = IOverlay_GetWindowHandle(overlay, &
hwnd);
1337 IOverlay_Release(overlay);
1342 ok(!
ret,
"Got unexpected EC_USERABORT.\n");
1349 ok(
ret == 1,
"Expected EC_USERABORT.\n");
1367 ok(!
ret,
"Got unexpected EC_USERABORT.\n");
1372 ok(!
ret,
"Got unexpected EC_USERABORT.\n");
1383 ok(!
ret,
"Got unexpected EC_USERABORT.\n");
1388 ok(
ret == 1,
"Expected EC_USERABORT.\n");
1396 ok(!
ret,
"Got unexpected EC_USERABORT.\n");
1398 IMediaEvent_Release(eventsrc);
1406 .bmiHeader.biBitCount = 16,
1407 .bmiHeader.biWidth = 32,
1408 .bmiHeader.biHeight = 16,
1409 .bmiHeader.biPlanes = 1,
1410 .bmiHeader.biCompression =
BI_RGB,
1414 .majortype = MEDIATYPE_Video,
1415 .formattype = FORMAT_VideoInfo,
1416 .cbFormat =
sizeof(vih),
1417 .pbFormat = (
BYTE *)&vih,
1432 static const GUID *subtype_tests[] =
1435 &MEDIASUBTYPE_RGB565,
1436 &MEDIASUBTYPE_RGB24,
1437 &MEDIASUBTYPE_RGB32,
1442 IFilterGraph2_AddFilter(
graph, &
source.filter.IBaseFilter_iface,
NULL);
1444 IFilterGraph2_QueryInterface(
graph, &IID_IMediaControl, (
void **)&
control);
1446 IBaseFilter_FindPin(
filter,
L"In", &pin);
1450 req_mt.subtype = *subtype_tests[
i];
1451 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
1454 hr = IFilterGraph2_Disconnect(
graph, &
source.source.pin.IPin_iface);
1456 hr = IFilterGraph2_Disconnect(
graph, pin);
1460 req_mt.formattype = FORMAT_None;
1461 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
1463 req_mt.formattype = FORMAT_VideoInfo;
1465 peer = (
IPin *)0xdeadbeef;
1466 hr = IPin_ConnectedTo(pin, &peer);
1468 ok(!peer,
"Got peer %p.\n", peer);
1470 hr = IPin_ConnectionMediaType(pin, &
mt);
1475 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
1480 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
1483 hr = IPin_ConnectedTo(pin, &peer);
1485 ok(peer == &
source.source.pin.IPin_iface,
"Got peer %p.\n", peer);
1488 hr = IPin_ConnectionMediaType(pin, &
mt);
1494 hr = IFilterGraph2_Disconnect(
graph, pin);
1499 IPin_QueryInterface(pin, &IID_IMemInputPin, (
void **)&
input);
1504 &IID_IMemAllocator, (
void **)&
allocator);
1506 hr = IMemAllocator_SetProperties(
allocator, &req_props, &ret_props);
1508 ok(!
memcmp(&ret_props, &req_props,
sizeof(req_props)),
"Properties did not match.\n");
1514 hr = IMemInputPin_ReceiveCanBlock(
input);
1524 hr = IFilterGraph2_Disconnect(
graph, pin);
1526 hr = IFilterGraph2_Disconnect(
graph, pin);
1528 ok(
source.source.pin.peer == pin,
"Got peer %p.\n", peer);
1529 IFilterGraph2_Disconnect(
graph, &
source.source.pin.IPin_iface);
1531 peer = (
IPin *)0xdeadbeef;
1532 hr = IPin_ConnectedTo(pin, &peer);
1534 ok(!peer,
"Got peer %p.\n", peer);
1536 hr = IPin_ConnectionMediaType(pin, &
mt);
1540 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1541 IMemInputPin_Release(
input);
1543 IMediaControl_Release(
control);
1544 ref = IFilterGraph2_Release(
graph);
1545 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1547 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1548 ref = IBaseFilter_Release(&
source.filter.IBaseFilter_iface);
1549 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1606 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1618 IBaseFilter_FindPin(
filter,
L"In", &pin);
1620 hr = IPin_QueryInterface(pin, &IID_IOverlay, (
void **)&overlay);
1624 hr = IOverlay_GetWindowHandle(overlay, &
hwnd);
1628 IOverlay_Release(overlay);
1631 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1657 if (
wparam == 0xdeadbeef)
1669 hr = IVideoWindow_get_Caption(
window, &caption);
1678 hr = IVideoWindow_put_Caption(
window, caption);
1682 hr = IVideoWindow_get_Caption(
window, &caption);
1699 "Got style %#lx.\n",
style);
1703 "Got style %#lx.\n",
style);
1941 hr = IVideoWindow_put_Left(
window, 0);
1943 hr = IVideoWindow_put_Top(
window, 0);
1951 ok(
top == 0,
"Got top %ld.\n",
top);
1961 ok(
top == 0,
"Got top %ld.\n",
top);
1970 hr = IVideoWindow_put_Left(
window, 10);
1978 ok(
top == 0,
"Got top %ld.\n",
top);
1988 ok(
top == 0,
"Got top %ld.\n",
top);
1997 hr = IVideoWindow_put_Height(
window, 200);
2005 ok(
top == 0,
"Got top %ld.\n",
top);
2015 ok(
top == 0,
"Got top %ld.\n",
top);
2024 hr = IVideoWindow_SetWindowPosition(
window, 100, 200, 300, 400);
2032 ok(
top == 200,
"Got top %ld.\n",
top);
2042 ok(
top == 200,
"Got top %ld.\n",
top);
2053 ok(top_hwnd == our_hwnd,
"Got top window %p.\n", top_hwnd);
2065 hr = IVideoWindow_get_Owner(
window, &oahwnd);
2067 ok(!oahwnd,
"Got owner %#Ix.\n", oahwnd);
2074 hr = IVideoWindow_put_Owner(
window, (OAHWND)our_hwnd);
2077 hr = IVideoWindow_get_Owner(
window, &oahwnd);
2079 ok(oahwnd == (OAHWND)our_hwnd,
"Got owner %#Ix.\n", oahwnd);
2088 ok(top_hwnd == our_hwnd,
"Got top window %p.\n", top_hwnd);
2099 hr = IVideoWindow_put_Owner(
window, 0);
2102 hr = IVideoWindow_get_Owner(
window, &oahwnd);
2104 ok(!oahwnd,
"Got owner %#Ix.\n", oahwnd);
2113 ok(top_hwnd ==
hwnd,
"Got top window %p.\n", top_hwnd);
2145 static UINT drain_tests[] =
2173 hr = IVideoWindow_get_MessageDrain(
window, &oahwnd);
2175 ok(!oahwnd,
"Got window %#Ix.\n", oahwnd);
2177 hr = IVideoWindow_put_MessageDrain(
window, (OAHWND)our_hwnd);
2180 hr = IVideoWindow_get_MessageDrain(
window, &oahwnd);
2182 ok(oahwnd == (OAHWND)our_hwnd,
"Got window %#Ix.\n", oahwnd);
2188 ok(
ret,
"Expected a message.\n");
2189 ok(
msg.hwnd == our_hwnd,
"Got hwnd %p.\n",
msg.hwnd);
2190 ok(
msg.message == drain_tests[
i],
"Got message %#x.\n",
msg.message);
2191 ok(
msg.wParam == 0xdeadbeef,
"Got wparam %#Ix.\n",
msg.wParam);
2192 ok(!
msg.lParam,
"Got lparam %#Ix.\n",
msg.lParam);
2196 ok(!
ret,
"Got unexpected message %#x.\n",
msg.message);
2199 hr = IVideoWindow_put_MessageDrain(
window, 0);
2202 hr = IVideoWindow_put_Owner(
window, (OAHWND)our_hwnd);
2243 ok(!
ret,
"Wait timed out.\n");
2257 hr = IVideoWindow_put_Owner(
window, 0);
2267 IFilterGraph2_QueryInterface(
graph, &IID_IMediaControl, (
void **)&
control);
2269 hr = IVideoWindow_get_AutoShow(
window, &
l);
2279 hr = IVideoWindow_get_Visible(
window, &
l);
2286 hr = IVideoWindow_get_Visible(
window, &
l);
2299 hr = IVideoWindow_get_Visible(
window, &
l);
2306 IMediaControl_Release(
control);
2314 .bmiHeader.biBitCount = 24,
2315 .bmiHeader.biWidth = 640,
2316 .bmiHeader.biHeight = 480,
2317 .bmiHeader.biPlanes = 1,
2318 .bmiHeader.biCompression =
BI_RGB,
2322 .majortype = MEDIATYPE_Video,
2323 .subtype = MEDIASUBTYPE_RGB24,
2324 .formattype = FORMAT_VideoInfo,
2325 .cbFormat =
sizeof(vih),
2326 .pbFormat = (
BYTE *)&vih,
2357 IBaseFilter_FindPin(
filter,
L"In", &pin);
2359 hr = IPin_QueryInterface(pin, &IID_IOverlay, (
void **)&overlay);
2362 hr = IOverlay_GetWindowHandle(overlay, &
hwnd);
2371 ok(!background,
"Expected NULL brush, got %#Ix\n", background);
2373 hr = IBaseFilter_QueryInterface(
filter, &IID_IVideoWindow, (
void **)&
window);
2379 hr = IVideoWindow_get_Caption(
window, &caption);
2383 hr = IVideoWindow_put_Caption(
window, caption);
2387 hr = IVideoWindow_get_WindowStyle(
window, &
l);
2393 hr = IVideoWindow_get_AutoShow(
window, &
l);
2399 hr = IVideoWindow_put_Owner(
window, (OAHWND)our_hwnd);
2402 hr = IVideoWindow_put_MessageDrain(
window, (OAHWND)our_hwnd);
2408 hr = IVideoWindow_SetWindowPosition(
window, 100, 200, 300, 400);
2412 IFilterGraph2_AddFilter(
graph, &
source.filter.IBaseFilter_iface,
NULL);
2414 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
2431 hr = IVideoWindow_get_FullScreenMode(
window, &
l);
2444 IFilterGraph2_Release(
graph);
2445 IVideoWindow_Release(
window);
2446 IOverlay_Release(overlay);
2449 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
2450 ref = IBaseFilter_Release(&
source.filter.IBaseFilter_iface);
2451 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
2465 ok_(__FILE__,
line)(
top == expect_top,
"Got top %ld.\n",
top);
2470 hr = IBasicVideo_get_SourceLeft(video, &
l);
2475 hr = IBasicVideo_get_SourceTop(video, &
l);
2480 hr = IBasicVideo_get_SourceWidth(video, &
l);
2481 ok_(__FILE__,
line)(
hr ==
S_OK,
"Failed to get width, hr %#lx.\n",
hr);
2485 hr = IBasicVideo_get_SourceHeight(video, &
l);
2486 ok_(__FILE__,
line)(
hr ==
S_OK,
"Failed to get height, hr %#lx.\n",
hr);
2489#define check_source_position(a,b,c,d,e) check_source_position_(__LINE__,a,b,c,d,e)
2496 hr = IBasicVideo_IsUsingDefaultSource(video);
2499 hr = IBasicVideo_put_SourceLeft(video, -10);
2501 hr = IBasicVideo_put_SourceLeft(video, 10);
2504 hr = IBasicVideo_put_SourceTop(video, -10);
2506 hr = IBasicVideo_put_SourceTop(video, 10);
2509 hr = IBasicVideo_put_SourceWidth(video, -500);
2511 hr = IBasicVideo_put_SourceWidth(video, 0);
2513 hr = IBasicVideo_put_SourceWidth(video, 700);
2515 hr = IBasicVideo_put_SourceWidth(video, 500);
2518 hr = IBasicVideo_IsUsingDefaultSource(video);
2521 hr = IBasicVideo_put_SourceHeight(video, -300);
2523 hr = IBasicVideo_put_SourceHeight(video, 0);
2525 hr = IBasicVideo_put_SourceHeight(video, 600);
2527 hr = IBasicVideo_put_SourceHeight(video, 300);
2530 hr = IBasicVideo_IsUsingDefaultSource(video);
2533 hr = IBasicVideo_put_SourceLeft(video, -10);
2535 hr = IBasicVideo_put_SourceLeft(video, 10);
2538 hr = IBasicVideo_IsUsingDefaultSource(video);
2541 hr = IBasicVideo_put_SourceTop(video, -10);
2543 hr = IBasicVideo_put_SourceTop(video, 20);
2546 hr = IBasicVideo_IsUsingDefaultSource(video);
2549 hr = IBasicVideo_SetSourcePosition(video, 4, 5, 60, 40);
2552 hr = IBasicVideo_IsUsingDefaultSource(video);
2555 hr = IBasicVideo_SetSourcePosition(video, 0, 0, 600, 400);
2558 hr = IBasicVideo_IsUsingDefaultSource(video);
2561 hr = IBasicVideo_SetSourcePosition(video, 4, 5, 60, 40);
2563 hr = IBasicVideo_SetDefaultSourcePosition(video);
2566 hr = IBasicVideo_IsUsingDefaultSource(video);
2578 ok_(__FILE__,
line)(
hr ==
S_OK,
"Failed to get position, hr %#lx.\n",
hr);
2580 ok_(__FILE__,
line)(
top == expect_top,
"Got top %ld.\n",
top);
2585 hr = IBasicVideo_get_DestinationLeft(video, &
l);
2590 hr = IBasicVideo_get_DestinationTop(video, &
l);
2595 hr = IBasicVideo_get_DestinationWidth(video, &
l);
2596 ok_(__FILE__,
line)(
hr ==
S_OK,
"Failed to get width, hr %#lx.\n",
hr);
2600 hr = IBasicVideo_get_DestinationHeight(video, &
l);
2601 ok_(__FILE__,
line)(
hr ==
S_OK,
"Failed to get height, hr %#lx.\n",
hr);
2604#define check_destination_position(a,b,c,d,e) check_destination_position_(__LINE__,a,b,c,d,e)
2612 IBasicVideo_QueryInterface(video, &IID_IVideoWindow, (
void **)&
window);
2615 hr = IBasicVideo_IsUsingDefaultDestination(video);
2618 hr = IBasicVideo_put_DestinationLeft(video, -10);
2621 hr = IBasicVideo_IsUsingDefaultDestination(video);
2624 hr = IBasicVideo_put_DestinationLeft(video, 10);
2627 hr = IBasicVideo_IsUsingDefaultDestination(video);
2630 hr = IBasicVideo_put_DestinationTop(video, -20);
2633 hr = IBasicVideo_IsUsingDefaultDestination(video);
2636 hr = IBasicVideo_put_DestinationTop(video, 20);
2639 hr = IBasicVideo_IsUsingDefaultDestination(video);
2642 hr = IBasicVideo_put_DestinationWidth(video, -700);
2644 hr = IBasicVideo_put_DestinationWidth(video, 0);
2646 hr = IBasicVideo_put_DestinationWidth(video, 700);
2649 hr = IBasicVideo_IsUsingDefaultDestination(video);
2652 hr = IBasicVideo_put_DestinationWidth(video, 500);
2655 hr = IBasicVideo_IsUsingDefaultDestination(video);
2658 hr = IBasicVideo_put_DestinationHeight(video, -500);
2660 hr = IBasicVideo_put_DestinationHeight(video, 0);
2662 hr = IBasicVideo_put_DestinationHeight(video, 500);
2665 hr = IBasicVideo_IsUsingDefaultDestination(video);
2668 hr = IBasicVideo_put_DestinationHeight(video, 300);
2671 hr = IBasicVideo_IsUsingDefaultDestination(video);
2674 hr = IBasicVideo_SetDestinationPosition(video, 4, 5, 60, 40);
2677 hr = IBasicVideo_IsUsingDefaultDestination(video);
2680 hr = IBasicVideo_SetDestinationPosition(video, 0, 0, 600, 400);
2683 hr = IBasicVideo_IsUsingDefaultDestination(video);
2686 hr = IBasicVideo_SetDestinationPosition(video, 4, 5, 60, 40);
2688 hr = IBasicVideo_SetDefaultDestinationPosition(video);
2691 hr = IBasicVideo_IsUsingDefaultDestination(video);
2700 hr = IBasicVideo_IsUsingDefaultDestination(video);
2703 hr = IBasicVideo_SetDestinationPosition(video, 0, 0, 400, 300);
2706 hr = IBasicVideo_IsUsingDefaultDestination(video);
2715 hr = IBasicVideo_IsUsingDefaultDestination(video);
2718 IVideoWindow_Release(
window);
2726 .rcSource = {4, 6, 16, 12},
2727 .rcTarget = {40, 60, 120, 160},
2729 .bmiHeader.biBitCount = 32,
2730 .bmiHeader.biWidth = 600,
2731 .bmiHeader.biHeight = 400,
2732 .bmiHeader.biPlanes = 1,
2733 .bmiHeader.biCompression =
BI_RGB,
2737 .majortype = MEDIATYPE_Video,
2738 .subtype = MEDIASUBTYPE_RGB32,
2739 .formattype = FORMAT_VideoInfo,
2740 .cbFormat =
sizeof(vih),
2741 .pbFormat = (
BYTE *)&vih,
2757 IBaseFilter_QueryInterface(
filter, &IID_IBasicVideo, (
void **)&video);
2758 IBaseFilter_FindPin(
filter,
L"In", &pin);
2760 hr = IBasicVideo_GetTypeInfoCount(video, &
count);
2764 hr = IBasicVideo_GetTypeInfo(video, 0, 0, &
typeinfo);
2766 hr = ITypeInfo_GetTypeAttr(
typeinfo, &typeattr);
2768 ok(typeattr->typekind ==
TKIND_DISPATCH,
"Got kind %u.\n", typeattr->typekind);
2770 ITypeInfo_ReleaseTypeAttr(
typeinfo, typeattr);
2773 hr = IBasicVideo_get_AvgTimePerFrame(video,
NULL);
2775 hr = IBasicVideo_get_AvgTimePerFrame(video, &reftime);
2778 hr = IBasicVideo_get_BitRate(video,
NULL);
2780 hr = IBasicVideo_get_BitRate(video, &
l);
2783 hr = IBasicVideo_get_BitErrorRate(video,
NULL);
2785 hr = IBasicVideo_get_BitErrorRate(video, &
l);
2788 hr = IBasicVideo_get_VideoWidth(video,
NULL);
2790 hr = IBasicVideo_get_VideoHeight(video,
NULL);
2793 hr = IBasicVideo_get_SourceLeft(video,
NULL);
2795 hr = IBasicVideo_get_SourceWidth(video,
NULL);
2797 hr = IBasicVideo_get_SourceTop(video,
NULL);
2799 hr = IBasicVideo_get_SourceHeight(video,
NULL);
2802 hr = IBasicVideo_get_DestinationLeft(video,
NULL);
2804 hr = IBasicVideo_get_DestinationWidth(video,
NULL);
2806 hr = IBasicVideo_get_DestinationTop(video,
NULL);
2808 hr = IBasicVideo_get_DestinationHeight(video,
NULL);
2829 hr = IBasicVideo_GetVideoSize(video, &
width,
NULL);
2836 hr = IBasicVideo_GetVideoPaletteEntries(video, 0, 1,
NULL, &
l);
2838 hr = IBasicVideo_GetVideoPaletteEntries(video, 0, 1, &
l,
NULL);
2842 IFilterGraph2_AddFilter(
graph, &
source.filter.IBaseFilter_iface,
L"vmr9");
2844 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
2848 hr = IBasicVideo_get_AvgTimePerFrame(video, &reftime);
2850 ok(reftime == 0.02,
"Got frame rate %.16e.\n", reftime);
2853 hr = IBasicVideo_get_BitRate(video, &
l);
2855 ok(!
l,
"Got bit rate %ld.\n",
l);
2858 hr = IBasicVideo_get_BitErrorRate(video, &
l);
2860 ok(!
l,
"Got bit rate %ld.\n",
l);
2862 hr = IBasicVideo_GetVideoPaletteEntries(video, 0, 1, &
l,
NULL);
2874 hr = IFilterGraph2_Disconnect(
graph, &
source.source.pin.IPin_iface);
2876 hr = IFilterGraph2_Disconnect(
graph, pin);
2882 hr = IFilterGraph2_ConnectDirect(
graph, &
source.source.pin.IPin_iface, pin, &req_mt);
2892 ref = IFilterGraph2_Release(
graph);
2893 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
2894 IBasicVideo_Release(video);
2897 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
2898 ref = IBaseFilter_Release(&
source.filter.IBaseFilter_iface);
2899 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
2907 IMediaEvent *eventsrc;
2915 hr = IFilterGraph2_QueryInterface(
graph, &IID_IMediaControl, (
void **)&
control);
2918 hr = IFilterGraph2_QueryInterface(
graph, &IID_IMediaEvent, (
void **)&eventsrc);
2922 ok(!
ret,
"Got %u EC_COMPLETE events.\n",
ret);
2928 ok(!
ret,
"Got %u EC_COMPLETE events.\n",
ret);
2934 ok(
ret == 1,
"Got %u EC_COMPLETE events.\n",
ret);
2940 ok(!
ret,
"Got %u EC_COMPLETE events.\n",
ret);
2946 ok(
ret == 1,
"Got %u EC_COMPLETE events.\n",
ret);
2952 ok(!
ret,
"Got %u EC_COMPLETE events.\n",
ret);
2958 ok(
ret == 1,
"Got %u EC_COMPLETE events.\n",
ret);
2960 IMediaControl_Release(
control);
2961 IMediaEvent_Release(eventsrc);
2962 ref = IFilterGraph2_Release(
graph);
2963 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
2965 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
#define InterlockedIncrement
#define InterlockedDecrement
enum _PinDirection PIN_DIRECTION
const GUID IID_IKsPropertySet
const GUID IID_IBaseFilter
const GUID IID_IAsyncReader
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)
BOOL WINAPI GetExitCodeThread(IN HANDLE hThread, OUT LPDWORD lpExitCode)
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
_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 GLint GLsizei GLsizei height
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei width
GLdouble GLdouble GLdouble GLdouble top
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
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
struct task_struct * current
static IHTMLWindow2 * window
static void test_filter_state(void)
static void test_sample_time(void)
static void test_current_image(IBaseFilter *filter, IMemInputPin *input, IMediaControl *control, const BITMAPINFOHEADER *expect_bih)
static HRESULT WINAPI testsource_DecideAllocator(struct strmbase_source *iface, IMemInputPin *peer, IMemAllocator **allocator)
static HRESULT WINAPI testseek_CheckCapabilities(IMediaSeeking *iface, DWORD *caps)
static BOOL compare_media_types(const AM_MEDIA_TYPE *a, const AM_MEDIA_TYPE *b)
static void testfilter_destroy(struct strmbase_filter *iface)
static HRESULT join_thread_(int line, HANDLE thread)
static const IUnknownVtbl outer_vtbl
static void test_video_window_messages(IVideoWindow *window, HWND hwnd, HWND our_hwnd)
static ULONG WINAPI testseek_Release(IMediaSeeking *iface)
static ULONG WINAPI testseek_AddRef(IMediaSeeking *iface)
static void test_video_window_owner(IVideoWindow *window, HWND hwnd, HWND our_hwnd)
static HRESULT WINAPI testseek_QueryInterface(IMediaSeeking *iface, REFIID iid, void **out)
static HANDLE send_frame_time(IMemInputPin *sink, REFERENCE_TIME start_time, unsigned char color)
static HRESULT WINAPI testseek_GetStopPosition(IMediaSeeking *iface, LONGLONG *stop)
static void test_aggregation(void)
static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOOL supported)
static void test_basic_video(void)
static ULONG WINAPI outer_AddRef(IUnknown *iface)
static HRESULT WINAPI outer_QueryInterface(IUnknown *iface, REFIID iid, void **out)
static void test_video_window_caption(IVideoWindow *window, HWND hwnd)
static HRESULT WINAPI testseek_IsFormatSupported(IMediaSeeking *iface, const GUID *format)
static void test_video_window_position(IVideoWindow *window, HWND hwnd, HWND our_hwnd)
static ULONG get_refcount(void *iface)
static HRESULT WINAPI testseek_SetRate(IMediaSeeking *iface, double rate)
static void test_pin_info(void)
static const IMediaSeekingVtbl testseek_vtbl
static struct testfilter * impl_from_IMediaSeeking(IMediaSeeking *iface)
static HRESULT testsource_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
static IUnknown test_outer
static void test_find_pin(void)
static void test_basic_video_destination(IBasicVideo *video)
static void test_video_window_style(IVideoWindow *window, HWND hwnd, HWND our_hwnd)
static void test_flushing(IPin *pin, IMemInputPin *input, IMediaControl *control)
static const struct strmbase_source_ops testsource_ops
static struct testfilter * impl_from_BaseFilter(struct strmbase_filter *iface)
static void test_basic_video_source(IBasicVideo *video)
static LRESULT CALLBACK window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
static HRESULT WINAPI testseek_GetDuration(IMediaSeeking *iface, LONGLONG *duration)
static void test_enum_media_types(void)
static BOOL CALLBACK top_window_cb(HWND hwnd, LPARAM ctx)
static void test_interfaces(void)
static void test_video_window_autoshow(IVideoWindow *window, IFilterGraph2 *graph, HWND hwnd)
static void test_eos(IPin *pin, IMemInputPin *input, IMediaControl *control)
static unsigned int check_ec_userabort(IMediaEvent *eventsrc, DWORD timeout)
static void test_video_window(void)
static void test_connect_pin(void)
static DWORD WINAPI frame_thread(void *arg)
static void flush_events(void)
static void test_media_types(void)
static HRESULT WINAPI testseek_SetPositions(IMediaSeeking *iface, LONGLONG *current, DWORD current_flags, LONGLONG *stop, DWORD stop_flags)
static HRESULT WINAPI testseek_ConvertTimeFormat(IMediaSeeking *iface, LONGLONG *target, const GUID *target_format, LONGLONG source, const GUID *source_format)
static HRESULT WINAPI testseek_IsUsingTimeFormat(IMediaSeeking *iface, const GUID *format)
static struct strmbase_pin * testfilter_get_pin(struct strmbase_filter *iface, unsigned int index)
static void test_allocator(IMemInputPin *input)
static void test_enum_pins(void)
static IFilterGraph2 * create_graph(void)
static void test_overlay(void)
static HWND get_top_window(void)
static HRESULT WINAPI testseek_QueryPreferredFormat(IMediaSeeking *iface, GUID *format)
static void check_destination_position_(int line, IBasicVideo *video, LONG expect_left, LONG expect_top, LONG expect_width, LONG expect_height)
static HANDLE send_frame(IMemInputPin *sink)
#define check_destination_position(a, b, c, d, e)
static HRESULT WINAPI testseek_GetCapabilities(IMediaSeeking *iface, DWORD *caps)
static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *control)
static DWORD CALLBACK notify_message_proc(void *arg)
static HRESULT WINAPI testseek_GetAvailable(IMediaSeeking *iface, LONGLONG *earliest, LONGLONG *latest)
#define check_source_position(a, b, c, d, e)
static void test_unconnected_eos(void)
static unsigned int check_ec_complete(IMediaEvent *eventsrc, DWORD timeout)
#define check_interface(a, b, c)
static HRESULT WINAPI testseek_GetCurrentPosition(IMediaSeeking *iface, LONGLONG *current)
static HRESULT WINAPI testseek_SetTimeFormat(IMediaSeeking *iface, const GUID *format)
static HRESULT WINAPI testseek_GetTimeFormat(IMediaSeeking *iface, GUID *format)
static IBaseFilter * create_video_renderer(void)
static HRESULT WINAPI testseek_GetPreroll(IMediaSeeking *iface, LONGLONG *preroll)
static HRESULT WINAPI testseek_GetRate(IMediaSeeking *iface, double *rate)
static unsigned int check_event_code(IMediaEvent *eventsrc, DWORD timeout, LONG expected_code, LONG_PTR expected1, LONG_PTR expected2)
static const struct strmbase_filter_ops testfilter_ops
static void test_video_window_state(IVideoWindow *window, HWND hwnd, HWND our_hwnd)
static void check_source_position_(int line, IBasicVideo *video, LONG expect_left, LONG expect_top, LONG expect_width, LONG expect_height)
static void test_unconnected_filter_state(void)
static HRESULT WINAPI testseek_GetPositions(IMediaSeeking *iface, LONGLONG *current, LONGLONG *stop)
static const GUID test_iid
static void testfilter_init(struct testfilter *filter)
static ULONG WINAPI outer_Release(IUnknown *iface)
BSTR WINAPI SysAllocString(LPCOLESTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define WS_OVERLAPPEDWINDOW
#define WS_EX_TRANSPARENT
const GUID IID_IPersistPropertyBag
#define IsEqualGUID(rguid1, rguid2)
HWND WINAPI GetFocus(void)
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND WINAPI GetActiveWindow(void)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HWND WINAPI GetForegroundWindow(void)
LONG WINAPI GetWindowLongA(_In_ HWND, _In_ int)
BOOL WINAPI AdjustWindowRect(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL)
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CreateWindowA(a, b, c, d, e, f, g, h, i, j, k)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
#define WM_NCRBUTTONDBLCLK
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_SYSCOLORCHANGE
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
#define WM_NCLBUTTONDBLCLK
BOOL WINAPI IsIconic(_In_ HWND)
HWND WINAPI GetDesktopWindow(void)
BOOL WINAPI IsZoomed(_In_ HWND)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)
BOOL WINAPI PeekMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
#define WM_NCMBUTTONDBLCLK
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI DestroyWindow(_In_ HWND)
#define GCLP_HBRBACKGROUND
int WINAPI GetSystemMetrics(_In_ int)
HWND WINAPI GetAncestor(_In_ HWND, _In_ UINT)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define offsetof(TYPE, MEMBER)
static __inline const char * wine_dbgstr_guid(const GUID *id)
void strmbase_source_init(struct strmbase_source *pin, struct strmbase_filter *filter, const WCHAR *name, const struct strmbase_source_ops *func_table)
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)
IMediaSeeking IMediaSeeking_iface
struct strmbase_filter * filter
IMediaSeeking IMediaSeeking_iface
struct strmbase_source source
struct strmbase_filter filter
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
#define MEDIASUBTYPE_NULL
#define VFW_E_TYPE_NOT_ACCEPTED
#define VFW_E_NOT_COMMITTED
#define VFW_E_NOT_STOPPED
#define VFW_E_NO_PALETTE_AVAILABLE
#define VFW_S_STATE_INTERMEDIATE
#define VFW_E_NOT_CONNECTED
static const WCHAR props[]
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
DWORD WINAPI GetCurrentThreadId(void)
DWORD WINAPI GetCurrentProcessId(void)
DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid