[PATCH 3/4] quartz/tests: Add some tests for IEnumMediaTypes().
Zebediah Figura
z.figura12 at gmail.com
Thu Jun 27 20:22:26 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/tests/avidec.c | 76 ++++++++++++
dlls/quartz/tests/avisplit.c | 119 +++++++++++++++++++
dlls/quartz/tests/dsoundrender.c | 82 +++++++++++++
dlls/quartz/tests/filesource.c | 107 +++++++++++++++++
dlls/quartz/tests/mpegsplit.c | 188 ++++++++++++++++++++++++++++++
dlls/quartz/tests/videorenderer.c | 45 +++++++
dlls/quartz/tests/vmr7.c | 46 ++++++++
dlls/quartz/tests/vmr9.c | 46 ++++++++
dlls/quartz/tests/waveparser.c | 119 +++++++++++++++++++
9 files changed, 828 insertions(+)
diff --git a/dlls/quartz/tests/avidec.c b/dlls/quartz/tests/avidec.c
index 3f92876c84c..6635e2ec753 100644
--- a/dlls/quartz/tests/avidec.c
+++ b/dlls/quartz/tests/avidec.c
@@ -543,6 +543,81 @@ static void test_media_types(void)
ok(!ref, "Got outstanding refcount %d.\n", ref);
}
+static void test_enum_media_types(void)
+{
+ IBaseFilter *filter = create_avi_dec();
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[1];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+
+ IBaseFilter_FindPin(filter, sink_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IBaseFilter_FindPin(filter, source_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
START_TEST(avidec)
{
BOOL ret;
@@ -558,6 +633,7 @@ START_TEST(avidec)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
CoUninitialize();
diff --git a/dlls/quartz/tests/avisplit.c b/dlls/quartz/tests/avisplit.c
index fb4278329b6..7dc8b14c5e4 100644
--- a/dlls/quartz/tests/avisplit.c
+++ b/dlls/quartz/tests/avisplit.c
@@ -654,6 +654,124 @@ static void test_media_types(void)
ok(ret, "Failed to delete file, error %u.\n", GetLastError());
}
+static void test_enum_media_types(void)
+{
+ const WCHAR *filename = load_resource(avifile);
+ IBaseFilter *filter = create_avi_splitter();
+ IFilterGraph2 *graph = connect_input(filter, filename);
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[2];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+ BOOL ret;
+
+ IBaseFilter_FindPin(filter, sink_name, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IBaseFilter_FindPin(filter, source0_name, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 2);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IFilterGraph2_Release(graph);
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+ ret = DeleteFileW(filename);
+ ok(ret, "Failed to delete file, error %u.\n", GetLastError());
+}
+
static void test_filter_graph(void)
{
IFileSourceFilter *pfile = NULL;
@@ -906,6 +1024,7 @@ START_TEST(avisplit)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
test_filter_graph();
CoUninitialize();
diff --git a/dlls/quartz/tests/dsoundrender.c b/dlls/quartz/tests/dsoundrender.c
index cf7b0e32b41..925a49c5da7 100644
--- a/dlls/quartz/tests/dsoundrender.c
+++ b/dlls/quartz/tests/dsoundrender.c
@@ -494,6 +494,87 @@ static void test_basic_audio(void)
ok(!ref, "Got outstanding refcount %d.\n", ref);
}
+static void test_enum_media_types(void)
+{
+ IBaseFilter *filter = create_dsound_render();
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[2];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+
+ IBaseFilter_FindPin(filter, sink_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ if (hr == S_OK) CoTaskMemFree(mts[0]->pbFormat);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 1, "Got count %u.\n", count);
+ if (hr == S_OK) CoTaskMemFree(mts[0]->pbFormat);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 1, "Got count %u.\n", count);
+ if (count > 0) CoTaskMemFree(mts[0]->pbFormat);
+ if (count > 0) CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 2);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ if (hr == S_OK) CoTaskMemFree(mts[0]->pbFormat);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
static void test_pin(IPin *pin)
{
IMemInputPin *mpin = NULL;
@@ -575,6 +656,7 @@ START_TEST(dsoundrender)
test_find_pin();
test_pin_info();
test_basic_audio();
+ test_enum_media_types();
test_basefilter();
CoUninitialize();
diff --git a/dlls/quartz/tests/filesource.c b/dlls/quartz/tests/filesource.c
index c38811aeba0..8d1d977b95e 100644
--- a/dlls/quartz/tests/filesource.c
+++ b/dlls/quartz/tests/filesource.c
@@ -1081,6 +1081,112 @@ static void test_async_reader(void)
ok(ret, "Failed to delete file, error %u.\n", GetLastError());
}
+static void test_enum_media_types(void)
+{
+ const WCHAR *filename = load_resource(avifile);
+ IBaseFilter *filter = create_file_source();
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[3];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+ BOOL ret;
+
+ load_file(filter, filename);
+
+ IBaseFilter_FindPin(filter, source_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(count == 2, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]);
+ CoTaskMemFree(mts[1]);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 3, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(count == 2, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]);
+ CoTaskMemFree(mts[1]);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 3);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+ ret = DeleteFileW(filename);
+ ok(ret, "Failed to delete file, error %u.\n", GetLastError());
+}
+
START_TEST(filesource)
{
CoInitialize(NULL);
@@ -1093,6 +1199,7 @@ START_TEST(filesource)
test_filter_state();
test_file_source_filter();
test_async_reader();
+ test_enum_media_types();
CoUninitialize();
}
diff --git a/dlls/quartz/tests/mpegsplit.c b/dlls/quartz/tests/mpegsplit.c
index 9853a199083..25c49438d06 100644
--- a/dlls/quartz/tests/mpegsplit.c
+++ b/dlls/quartz/tests/mpegsplit.c
@@ -810,6 +810,193 @@ done:
ok(ret, "Failed to delete file, error %u.\n", GetLastError());
}
+static void test_enum_media_types(void)
+{
+ const WCHAR *filename = load_resource(mp3file);
+ IBaseFilter *filter = create_mpeg_splitter();
+ IFilterGraph2 *graph = connect_input(filter, filename);
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[5];
+ ULONG ref, count;
+ unsigned int i;
+ HRESULT hr;
+ IPin *pin;
+ BOOL ret;
+
+ IBaseFilter_FindPin(filter, inputW, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ for (i = 0; i < 4; ++i)
+ {
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+ }
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ for (i = 0; i < 4; ++i)
+ {
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 1, "Got count %u.\n", count);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+ }
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 2, "Got count %u.\n", count);
+ if (count > 0) CoTaskMemFree(mts[0]);
+ if (count > 1) CoTaskMemFree(mts[1]);
+
+ hr = IEnumMediaTypes_Next(enum1, 3, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 2, "Got count %u.\n", count);
+ if (count > 0) CoTaskMemFree(mts[0]);
+ if (count > 1) CoTaskMemFree(mts[1]);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 5);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 4);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IBaseFilter_FindPin(filter, audioW, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ for (i = 0; i < 3; ++i)
+ {
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine_if(i) ok(hr == S_OK, "Got hr %#x.\n", hr);
+ if (hr == S_OK) CoTaskMemFree(mts[0]->pbFormat);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+ }
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ for (i = 0; i < 3; ++i)
+ {
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ todo_wine_if(i) ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine_if(i) ok(count == 1, "Got count %u.\n", count);
+ if (hr == S_OK) CoTaskMemFree(mts[0]->pbFormat);
+ if (hr == S_OK) CoTaskMemFree(mts[0]);
+ }
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 2, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+ if (count > 1) CoTaskMemFree(mts[1]->pbFormat);
+ if (count > 1) CoTaskMemFree(mts[1]);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ todo_wine ok(count == 1, "Got count %u.\n", count);
+ if (count) CoTaskMemFree(mts[0]->pbFormat);
+ if (count) CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 4);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 3);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IFilterGraph2_Release(graph);
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+ ret = DeleteFileW(filename);
+ ok(ret, "Failed to delete file, error %u.\n", GetLastError());
+}
+
START_TEST(mpegsplit)
{
CoInitialize(NULL);
@@ -820,6 +1007,7 @@ START_TEST(mpegsplit)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
CoUninitialize();
}
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c
index 0b9ea3ff873..5b03a04e4e6 100644
--- a/dlls/quartz/tests/videorenderer.c
+++ b/dlls/quartz/tests/videorenderer.c
@@ -428,6 +428,50 @@ static void test_media_types(void)
ok(!ref, "Got outstanding refcount %d.\n", ref);
}
+static void test_enum_media_types(void)
+{
+ IBaseFilter *filter = create_video_renderer();
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[2];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+
+ IBaseFilter_FindPin(filter, sink_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
static void test_pin(IPin *pin)
{
IMemInputPin *mpin = NULL;
@@ -494,6 +538,7 @@ START_TEST(videorenderer)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
test_basefilter();
CoUninitialize();
diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c
index 9574a2971d2..cb35590df2f 100644
--- a/dlls/quartz/tests/vmr7.c
+++ b/dlls/quartz/tests/vmr7.c
@@ -730,6 +730,51 @@ static void test_media_types(void)
ok(!ref, "Got outstanding refcount %d.\n", ref);
}
+static void test_enum_media_types(void)
+{
+ WCHAR sink_id[] = {'V','M','R',' ','I','n','p','u','t','0',0};
+ IBaseFilter *filter = create_vmr7(0);
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[2];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+
+ IBaseFilter_FindPin(filter, sink_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
START_TEST(vmr7)
{
CoInitialize(NULL);
@@ -741,6 +786,7 @@ START_TEST(vmr7)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
CoUninitialize();
}
diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c
index aeea4142a8b..0a55201f6ad 100644
--- a/dlls/quartz/tests/vmr9.c
+++ b/dlls/quartz/tests/vmr9.c
@@ -734,6 +734,51 @@ static void test_media_types(void)
ok(!ref, "Got outstanding refcount %d.\n", ref);
}
+static void test_enum_media_types(void)
+{
+ WCHAR sink_id[] = {'V','M','R',' ','I','n','p','u','t','0',0};
+ IBaseFilter *filter = create_vmr9(0);
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[2];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+
+ IBaseFilter_FindPin(filter, sink_id, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+}
+
START_TEST(vmr9)
{
IBaseFilter *filter;
@@ -756,6 +801,7 @@ START_TEST(vmr9)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
CoUninitialize();
}
diff --git a/dlls/quartz/tests/waveparser.c b/dlls/quartz/tests/waveparser.c
index 84288c41df5..a0df5ccc9b3 100644
--- a/dlls/quartz/tests/waveparser.c
+++ b/dlls/quartz/tests/waveparser.c
@@ -642,6 +642,124 @@ static void test_media_types(void)
ok(ret, "Failed to delete file, error %u.\n", GetLastError());
}
+static void test_enum_media_types(void)
+{
+ const WCHAR *filename = load_resource(wavefile);
+ IBaseFilter *filter = create_wave_parser();
+ IFilterGraph2 *graph = connect_input(filter, filename);
+ IEnumMediaTypes *enum1, *enum2;
+ AM_MEDIA_TYPE *mts[2];
+ ULONG ref, count;
+ HRESULT hr;
+ IPin *pin;
+ BOOL ret;
+
+ IBaseFilter_FindPin(filter, sink_name, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IBaseFilter_FindPin(filter, source_name, &pin);
+
+ hr = IPin_EnumMediaTypes(pin, &enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(!count, "Got count %u.\n", count);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 2, mts, &count);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+ ok(count == 1, "Got count %u.\n", count);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Clone(enum1, &enum2);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 2);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Reset(enum1);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Skip(enum1, 1);
+ ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum1, 1, mts, NULL);
+ todo_wine ok(hr == S_FALSE, "Got hr %#x.\n", hr);
+
+ hr = IEnumMediaTypes_Next(enum2, 1, mts, NULL);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ CoTaskMemFree(mts[0]->pbFormat);
+ CoTaskMemFree(mts[0]);
+
+ IEnumMediaTypes_Release(enum1);
+ IEnumMediaTypes_Release(enum2);
+ IPin_Release(pin);
+
+ IFilterGraph2_Release(graph);
+ ref = IBaseFilter_Release(filter);
+ ok(!ref, "Got outstanding refcount %d.\n", ref);
+ ret = DeleteFileW(filename);
+ ok(ret, "Failed to delete file, error %u.\n", GetLastError());
+}
+
START_TEST(waveparser)
{
CoInitialize(NULL);
@@ -652,6 +770,7 @@ START_TEST(waveparser)
test_find_pin();
test_pin_info();
test_media_types();
+ test_enum_media_types();
CoUninitialize();
}
--
2.22.0
More information about the wine-devel
mailing list