66 return IUnknown_Release(
unknown);
79 IBaseFilter_QueryInterface(
reader, &IID_IFileSourceFilter, (
void **)&filesource);
83 &IID_IFilterGraph2, (
void **)&
graph);
85 IFilterGraph2_AddFilter(
graph, splitter,
NULL);
87 IBaseFilter_FindPin(splitter,
L"input pin", &
sink);
95 IBaseFilter_Release(
reader);
96 IFileSourceFilter_Release(filesource);
100#define check_interface(a, b, c) check_interface_(__LINE__, a, b, c)
109 hr = IUnknown_QueryInterface(iface, iid, (
void **)&unk);
112 IUnknown_Release(unk);
140 IBaseFilter_FindPin(
filter,
L"input pin", &pin);
152 IBaseFilter_FindPin(
filter,
L"output", &pin);
165 IBaseFilter_Release(
filter);
166 IFilterGraph2_Release(
graph);
222 ok(unk != &
test_outer,
"Returned IUnknown should not be outer IUnknown.\n");
224 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
226 ref = IUnknown_AddRef(unk);
227 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
230 ref = IUnknown_Release(unk);
231 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
236 ok(unk2 == unk,
"Got unexpected IUnknown %p.\n", unk2);
237 IUnknown_Release(unk2);
244 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
248 ok(filter2 == (
IBaseFilter *)0xdeadbeef,
"Got unexpected IBaseFilter %p.\n", filter2);
250 hr = IUnknown_QueryInterface(unk, &
test_iid, (
void **)&unk2);
252 ok(!unk2,
"Got unexpected IUnknown %p.\n", unk2);
256 ok(unk2 == (
IUnknown *)0xdeadbeef,
"Got unexpected IUnknown %p.\n", unk2);
258 IBaseFilter_Release(
filter);
259 ref = IUnknown_Release(unk);
260 ok(!
ref,
"Got unexpected refcount %ld.\n",
ref);
276 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
281 hr = IBaseFilter_EnumPins(
filter, &enum1);
284 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
286 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
291 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
294 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
296 ok(
ref == 3,
"Got unexpected refcount %ld.\n",
ref);
298 ok(
ref == 1,
"Got unexpected refcount %ld.\n",
ref);
299 IPin_Release(pins[0]);
301 ok(
ref == 2,
"Got unexpected refcount %ld.\n",
ref);
303 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
306 hr = IEnumPins_Reset(enum1);
309 hr = IEnumPins_Next(enum1, 1, pins, &
count);
312 IPin_Release(pins[0]);
314 hr = IEnumPins_Next(enum1, 1, pins, &
count);
318 hr = IEnumPins_Reset(enum1);
321 hr = IEnumPins_Next(enum1, 2, pins,
NULL);
324 hr = IEnumPins_Next(enum1, 2, pins, &
count);
327 IPin_Release(pins[0]);
329 hr = IEnumPins_Reset(enum1);
332 hr = IEnumPins_Clone(enum1, &enum2);
335 hr = IEnumPins_Skip(enum1, 2);
338 hr = IEnumPins_Skip(enum1, 1);
341 hr = IEnumPins_Skip(enum1, 1);
344 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
347 hr = IEnumPins_Next(enum2, 1, pins,
NULL);
349 IPin_Release(pins[0]);
351 IEnumPins_Release(enum2);
355 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
358 hr = IEnumPins_Reset(enum1);
361 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
363 IPin_Release(pins[0]);
365 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
367 IPin_Release(pins[0]);
369 hr = IEnumPins_Next(enum1, 1, pins,
NULL);
372 hr = IEnumPins_Reset(enum1);
375 hr = IEnumPins_Next(enum1, 2, pins, &
count);
378 IPin_Release(pins[0]);
379 IPin_Release(pins[1]);
381 hr = IEnumPins_Reset(enum1);
384 hr = IEnumPins_Next(enum1, 3, pins, &
count);
387 IPin_Release(pins[0]);
388 IPin_Release(pins[1]);
390 IEnumPins_Release(enum1);
391 IFilterGraph2_Release(
graph);
393 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
409 hr = IBaseFilter_FindPin(
filter,
L"input pin", &pin);
413 hr = IBaseFilter_FindPin(
filter,
L"output", &pin);
424 hr = IBaseFilter_FindPin(
filter,
L"output", &pin);
426 ok(pin == pin2,
"Expected pin %p, got %p.\n", pin2, pin);
433 hr = IBaseFilter_FindPin(
filter,
L"input pin", &pin);
435 ok(pin == pin2,
"Expected pin %p, got %p.\n", pin2, pin);
440 IFilterGraph2_Release(
graph);
442 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
462 hr = IBaseFilter_FindPin(
filter,
L"input pin", &pin);
468 hr = IPin_QueryPinInfo(pin, &
info);
477 IBaseFilter_Release(
info.pFilter);
479 hr = IPin_QueryDirection(pin, &
dir);
483 hr = IPin_QueryId(pin, &
id);
490 hr = IBaseFilter_FindPin(
filter,
L"output", &pin);
496 hr = IPin_QueryPinInfo(pin, &
info);
501 IBaseFilter_Release(
info.pFilter);
503 hr = IPin_QueryDirection(pin, &
dir);
507 hr = IPin_QueryId(pin, &
id);
514 IFilterGraph2_Release(
graph);
516 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
536 IBaseFilter_FindPin(
filter,
L"input pin", &pin);
538 hr = IPin_EnumMediaTypes(pin, &enummt);
541 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
544 IEnumMediaTypes_Release(enummt);
546 mt.majortype = MEDIATYPE_Stream;
547 mt.subtype = MEDIASUBTYPE_WAVE;
548 hr = IPin_QueryAccept(pin, &mt);
551 mt.bFixedSizeSamples =
TRUE;
552 mt.bTemporalCompression =
TRUE;
553 mt.lSampleSize = 123;
554 mt.formattype = FORMAT_VideoInfo;
555 hr = IPin_QueryAccept(pin, &mt);
559 hr = IPin_QueryAccept(pin, &mt);
561 mt.majortype = MEDIATYPE_Stream;
564 hr = IPin_QueryAccept(pin, &mt);
566 mt.subtype = MEDIASUBTYPE_WAVE;
570 hr = IPin_EnumMediaTypes(pin, &enummt);
573 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
576 IEnumMediaTypes_Release(enummt);
579 IBaseFilter_FindPin(
filter,
L"output", &pin);
581 hr = IPin_EnumMediaTypes(pin, &enummt);
584 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
586 ok(
IsEqualGUID(&pmt->majortype, &MEDIATYPE_Audio),
"Got major type %s.\n",
588 ok(
IsEqualGUID(&pmt->subtype, &MEDIASUBTYPE_PCM),
"Got subtype %s\n",
590 ok(pmt->bFixedSizeSamples ==
TRUE,
"Got fixed size %d.\n", pmt->bFixedSizeSamples);
591 ok(!pmt->bTemporalCompression,
"Got temporal compression %d.\n", pmt->bTemporalCompression);
592 ok(pmt->lSampleSize == 1,
"Got sample size %lu.\n", pmt->lSampleSize);
593 ok(
IsEqualGUID(&pmt->formattype, &FORMAT_WaveFormatEx),
"Got format type %s.\n",
595 ok(!pmt->pUnk,
"Got pUnk %p.\n", pmt->pUnk);
596 ok(pmt->cbFormat ==
sizeof(
WAVEFORMATEX),
"Got format size %lu.\n", pmt->cbFormat);
599 hr = IPin_QueryAccept(pin, pmt);
602 pmt->bFixedSizeSamples =
FALSE;
603 pmt->bTemporalCompression =
TRUE;
604 pmt->lSampleSize = 123;
605 hr = IPin_QueryAccept(pin, pmt);
609 hr = IPin_QueryAccept(pin, pmt);
611 pmt->majortype = MEDIATYPE_Audio;
614 hr = IPin_QueryAccept(pin, pmt);
616 pmt->subtype = MEDIASUBTYPE_WAVE;
619 hr = IPin_QueryAccept(pin, pmt);
621 pmt->formattype = FORMAT_None;
622 hr = IPin_QueryAccept(pin, pmt);
630 hr = IPin_QueryAccept(pin, pmt);
635 hr = IPin_QueryAccept(pin, pmt);
642 hr = IEnumMediaTypes_Next(enummt, 1, &pmt,
NULL);
645 IEnumMediaTypes_Release(enummt);
648 IFilterGraph2_Release(
graph);
650 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
667 IBaseFilter_FindPin(
filter,
L"input pin", &pin);
669 hr = IPin_EnumMediaTypes(pin, &enum1);
672 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
675 hr = IEnumMediaTypes_Next(enum1, 1, mts, &
count);
679 hr = IEnumMediaTypes_Reset(enum1);
682 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
685 hr = IEnumMediaTypes_Clone(enum1, &enum2);
688 hr = IEnumMediaTypes_Skip(enum1, 1);
691 hr = IEnumMediaTypes_Next(enum2, 1, mts,
NULL);
694 IEnumMediaTypes_Release(enum1);
695 IEnumMediaTypes_Release(enum2);
698 IBaseFilter_FindPin(
filter,
L"output", &pin);
700 hr = IPin_EnumMediaTypes(pin, &enum1);
703 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
708 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
711 hr = IEnumMediaTypes_Reset(enum1);
714 hr = IEnumMediaTypes_Next(enum1, 1, mts, &
count);
720 hr = IEnumMediaTypes_Next(enum1, 1, mts, &
count);
724 hr = IEnumMediaTypes_Reset(enum1);
727 hr = IEnumMediaTypes_Next(enum1, 2, mts, &
count);
733 hr = IEnumMediaTypes_Reset(enum1);
736 hr = IEnumMediaTypes_Clone(enum1, &enum2);
739 hr = IEnumMediaTypes_Skip(enum1, 2);
742 hr = IEnumMediaTypes_Skip(enum1, 1);
745 hr = IEnumMediaTypes_Reset(enum1);
748 hr = IEnumMediaTypes_Skip(enum1, 1);
751 hr = IEnumMediaTypes_Skip(enum1, 1);
754 hr = IEnumMediaTypes_Next(enum1, 1, mts,
NULL);
757 hr = IEnumMediaTypes_Next(enum2, 1, mts,
NULL);
762 IEnumMediaTypes_Release(enum1);
763 IEnumMediaTypes_Release(enum2);
766 IFilterGraph2_Release(
graph);
768 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
827 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
853 {&TIME_FORMAT_MEDIA_TIME,
S_OK},
854 {&TIME_FORMAT_SAMPLE,
S_OK},
863 IBaseFilter_FindPin(
filter,
L"output", &pin);
864 IPin_QueryInterface(pin, &IID_IMediaSeeking, (
void **)&seeking);
866 hr = IMediaSeeking_GetCapabilities(seeking, &caps);
873 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
878 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
883 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
885 ok(!caps,
"Got caps %#lx.\n", caps);
888 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
890 ok(!caps,
"Got caps %#lx.\n", caps);
894 hr = IMediaSeeking_IsFormatSupported(seeking, format_tests[
i].
guid);
899 hr = IMediaSeeking_QueryPreferredFormat(seeking, &
format);
903 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
907 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
909 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_SAMPLE);
912 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_FRAME);
914 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_SAMPLE);
917 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
921 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
923 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_SAMPLE);
926 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
929 duration = 0xdeadbeef;
930 hr = IMediaSeeking_GetDuration(seeking, &duration);
932 ok(duration == 1000000,
"Got duration %I64d.\n", duration);
935 hr = IMediaSeeking_GetStopPosition(seeking, &stop);
937 ok(stop == duration,
"Expected time %s, got %s.\n",
939 hr = IMediaSeeking_GetCurrentPosition(seeking, &
current);
943 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
946 ok(stop == duration,
"Expected time %s, got %s.\n",
950 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_MEDIA_TIME, 0x123456789a,
NULL);
954 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time,
NULL, 0x123456789a, &TIME_FORMAT_MEDIA_TIME);
958 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time,
NULL, 441, &TIME_FORMAT_SAMPLE);
962 earliest = latest = 0xdeadbeef;
963 hr = IMediaSeeking_GetAvailable(seeking, &earliest, &latest);
966 ok(latest == duration,
"Expected time %s, got %s.\n",
970 hr = IMediaSeeking_GetRate(seeking, &
rate);
974 hr = IMediaSeeking_SetRate(seeking, 200.0);
977 hr = IMediaSeeking_GetRate(seeking, &
rate);
981 hr = IMediaSeeking_SetRate(seeking, -1.0);
984 hr = IMediaSeeking_GetPreroll(seeking, &
time);
996 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
1023 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
1028 IMediaSeeking_Release(seeking);
1030 IFilterGraph2_Release(
graph);
1032 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
1046 skip(
"Failed to create WAVE parser.\n");
1049 IBaseFilter_Release(
filter);
#define InterlockedIncrement
#define InterlockedDecrement
@ AM_SEEKING_CanGetDuration
@ AM_SEEKING_CanGetCurrentPos
@ AM_SEEKING_CanSeekBackwards
@ AM_SEEKING_CanDoSegments
@ AM_SEEKING_CanSeekForwards
@ AM_SEEKING_CanSeekAbsolute
@ AM_SEEKING_CanGetStopPos
@ AM_SEEKING_NoPositioning
@ AM_SEEKING_AbsolutePositioning
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]
#define INVALID_HANDLE_VALUE
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
LPVOID WINAPI LockResource(HGLOBAL handle)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
_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
GLsizei GLenum GLboolean sink
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 WAVE_FORMAT_IMA_ADPCM
struct task_struct * current
#define load_resource(a, b, c)
static const WCHAR pathW[]
const GUID IID_IPersistPropertyBag
#define IsEqualGUID(rguid1, rguid2)
static __inline const char * wine_dbgstr_guid(const GUID *id)
static const IUnknownVtbl outer_vtbl
static void test_aggregation(void)
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 IUnknown test_outer
static void test_find_pin(void)
static IFilterGraph2 * connect_input(IBaseFilter *splitter, const WCHAR *filename)
static void test_enum_media_types(void)
static void test_interfaces(void)
static IBaseFilter * create_wave_parser(void)
static void test_media_types(void)
static void test_enum_pins(void)
static void test_seeking(void)
static const GUID testguid
#define check_interface(a, b, c)
static void test_unconnected_filter_state(void)
static const GUID test_iid
static ULONG WINAPI outer_Release(IUnknown *iface)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)