-- v3: mf/tests: Test SetOutputType for WMV decoder. mf/tests: Use one input type for GetOutputType tests. mf/tests: Introduce check_dmo_set_input_type. mf/tests: Shorten test messages.
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 90 +++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 45 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index a2e8d1d6e0b..63bb93d7ffa 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -1177,21 +1177,21 @@ static void check_dmo_get_input_type(IMediaObject *media_object, const DMO_MEDIA DWORD i;
hr = IMediaObject_GetInputType(media_object, 1, 0, NULL); - ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 1, 0, &media_type); - ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 1, count, &media_type); - ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 0, count, &media_type); - ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 0, count, NULL); - ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 0, 0xdeadbeef, NULL); - ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 0, count - 1, NULL); - ok(hr == S_OK, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "GetInputType returned %#lx.\n", hr); hr = IMediaObject_GetInputType(media_object, 0, count - 1, &media_type); - ok(hr == S_OK, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "GetInputType returned %#lx.\n", hr); if (hr == S_OK) MoFreeMediaType(&media_type);
@@ -1204,7 +1204,7 @@ static void check_dmo_get_input_type(IMediaObject *media_object, const DMO_MEDIA winetest_pop_context(); }
- ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS, "GetInputType returned %#lx.\n", hr); ok(i == count, "%lu types.\n", i); }
@@ -1215,21 +1215,21 @@ static void check_dmo_get_output_type(IMediaObject *media_object, const DMO_MEDI DWORD i;
hr = IMediaObject_GetOutputType(media_object, 1, 0, NULL); - ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 1, 0, &media_type); - ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 1, count, &media_type); - ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 0, count, &media_type); - ok(hr == DMO_E_NO_MORE_ITEMS, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS, "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 0, count, NULL); - ok(hr == DMO_E_NO_MORE_ITEMS || broken(hr == S_OK), "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS || broken(hr == S_OK), "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 0, 0xdeadbeef, NULL); - ok(hr == DMO_E_NO_MORE_ITEMS || broken(hr == S_OK), "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS || broken(hr == S_OK), "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 0, count - 1, NULL); - ok(hr == S_OK, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "GetOutputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 0, count - 1, &media_type); - ok(hr == S_OK, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "GetOutputType returned %#lx.\n", hr); if (hr == S_OK) MoFreeMediaType(&media_type);
@@ -1242,7 +1242,7 @@ static void check_dmo_get_output_type(IMediaObject *media_object, const DMO_MEDI winetest_pop_context(); }
- ok(hr == DMO_E_NO_MORE_ITEMS, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_NO_MORE_ITEMS, "GetOutputType returned %#lx.\n", hr); ok(i == count, "%lu types.\n", i); }
@@ -4826,9 +4826,9 @@ static void test_wmv_decoder_media_object(void) /* Test setting the type. */ init_dmo_media_type_video(input_type, subtype, 96, 96); hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); header->dwBitRate = 0xdeadbeef; header->dwBitErrorRate = 0xdeadbeef; header->AvgTimePerFrame = 0xdeadbeef; @@ -4838,102 +4838,102 @@ static void test_wmv_decoder_media_object(void) header->bmiHeader.biXPelsPerMeter = 0xdead; header->bmiHeader.biYPelsPerMeter = 0xdead; hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr);
/* Test invalid major type. */ init_dmo_media_type_video(input_type, subtype, 96, 96); input_type->majortype = MFMediaType_Default; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr);
/* Test invalid subtype. */ init_dmo_media_type_video(input_type, &MEDIASUBTYPE_None, 96, 96); hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr);
/* Test invalid format type. */ init_dmo_media_type_video(input_type, subtype, 96, 96); input_type->formattype = FORMAT_None; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr);
/* Test invalid format size. */ init_dmo_media_type_video(input_type, subtype, 96, 96); input_type->cbFormat = 1; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr);
/* Test NULL format pointer. */ init_dmo_media_type_video(input_type, subtype, 96, 96); input_type->pbFormat = NULL; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr);
/* Test video header struct size. */ init_dmo_media_type_video(input_type, subtype, 96, 96); header->bmiHeader.biSize = 0; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biSize = 1; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biSize = 0xdeadbeef; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr);
/* Test width. */ init_dmo_media_type_video(input_type, subtype, 96, 96); header->bmiHeader.biWidth = 0; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biWidth = -1; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biWidth = 4096 + 1; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biWidth = 4096; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr);
/* Test height. */ init_dmo_media_type_video(input_type, subtype, 96, 96); header->bmiHeader.biHeight = 0; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biHeight = 4096 + 1; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biHeight = 4096; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biHeight = -4096; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr);
/* Test compression. */ init_dmo_media_type_video(input_type, subtype, 96, 96); header->bmiHeader.biCompression = 0; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biCompression = 1; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biCompression = 2; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); header->bmiHeader.biCompression = 0xdeadbeef; hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr);
winetest_pop_context(); } @@ -4956,17 +4956,17 @@ static void test_wmv_decoder_media_object(void) type = NULL;
hr = IMediaObject_SetInputType(media_object, test->stream_index, type, test->flags); - ok(hr == test->hr, "SetInputType returned unexpected hr %#lx, expected %#lx.\n", hr, test->hr); + ok(hr == test->hr, "SetInputType returned %#lx, expected %#lx.\n", hr, test->hr);
winetest_pop_context(); }
/* Test GetOutputType without setting input type. */ hr = IMediaObject_SetInputType(media_object, 0, NULL, DMO_SET_TYPEF_CLEAR); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); hr = IMediaObject_GetOutputType(media_object, 0, 0, &media_type); todo_wine - ok(hr == DMO_E_TYPE_NOT_SET, "GetOutputType returned unexpected hr %#lx.\n", hr); + ok(hr == DMO_E_TYPE_NOT_SET, "GetOutputType returned %#lx.\n", hr);
/* Test GetOutputType after setting input type. */ for (i = 0; i < ARRAY_SIZE(expected_input_types); ++i) @@ -4986,7 +4986,7 @@ static void test_wmv_decoder_media_object(void)
init_dmo_media_type_video(input_type, &expected_input_types[i].subtype, 16, 16); hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); - ok(hr == S_OK, "SetInputType returned unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr);
todo_wine check_dmo_get_output_type(media_object, expected_output_types, ARRAY_SIZE(expected_output_types));
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 349 ++++++++++++++++++-------------------- 1 file changed, 168 insertions(+), 181 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 63bb93d7ffa..ccb2413faf4 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -1246,6 +1246,171 @@ static void check_dmo_get_output_type(IMediaObject *media_object, const DMO_MEDI ok(i == count, "%lu types.\n", i); }
+static void check_dmo_set_input_type(IMediaObject *media_object, const GUID *subtype) +{ + DMO_MEDIA_TYPE bad_media_type, *good_media_type; + VIDEOINFOHEADER *header; + char buffer[1024]; + DWORD i, flag; + HRESULT hr; + + const DWORD flags[] = {0, 0x4, DMO_SET_TYPEF_CLEAR, DMO_SET_TYPEF_TEST_ONLY, DMO_SET_TYPEF_TEST_ONLY | 0x4}; + + memset(&bad_media_type, 0, sizeof(bad_media_type)); + good_media_type = (DMO_MEDIA_TYPE *)buffer; + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + header = (VIDEOINFOHEADER *)(good_media_type + 1); + + /* Test invalid stream index. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = flags[i]; + hr = IMediaObject_SetInputType(media_object, 1, NULL, flag); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "SetInputType returned %#lx for flag %#lx.", hr, flag); + hr = IMediaObject_SetInputType(media_object, 1, &bad_media_type, flag); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "SetInputType returned %#lx for flag %#lx.", hr, flag); + hr = IMediaObject_SetInputType(media_object, 1, good_media_type, flag); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "SetInputType returned %#lx for flag %#lx.", hr, flag); + } + + /* Test unaccepted type. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = flags[i]; + if (!(flag & DMO_SET_TYPEF_CLEAR)) + { + hr = IMediaObject_SetInputType(media_object, 0, NULL, flag); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx for flag %#lx.", hr, flag); + } + hr = IMediaObject_SetInputType(media_object, 0, &bad_media_type, flag); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx for flag %#lx.", hr, flag); + } + + /* Test clearing the type. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = DMO_SET_TYPEF_CLEAR | flags[i]; + hr = IMediaObject_SetInputType(media_object, 0, NULL, flag); + ok(hr == S_OK, "SetInputType returned %#lx for flag %#lx.", hr, flag); + } + + /* Test accepted type. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = flags[i]; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, flag); + ok(hr == S_OK, "SetInputType returned %#lx for flag %#lx.", hr, flag); + } + + /* Test unconsidered header member.*/ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + header->dwBitRate = 0xdeadbeef; + header->dwBitErrorRate = 0xdeadbeef; + header->AvgTimePerFrame = 0xdeadbeef; + header->bmiHeader.biPlanes = 0xdead; + header->bmiHeader.biBitCount = 0xdead; + header->bmiHeader.biSizeImage = 0xdeadbeef; + header->bmiHeader.biXPelsPerMeter = 0xdead; + header->bmiHeader.biYPelsPerMeter = 0xdead; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, 0); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + + /* Test invalid major type. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + good_media_type->majortype = MFMediaType_Default; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + + /* Test invalid subtype. */ + init_dmo_media_type_video(good_media_type, &MEDIASUBTYPE_None, 16, 16); + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + + /* Test invalid format type. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + good_media_type->formattype = FORMAT_None; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + + /* Test invalid format size. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + good_media_type->cbFormat = 1; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + + /* Test NULL format pointer. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + good_media_type->pbFormat = NULL; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + + /* Test video header struct size. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + header->bmiHeader.biSize = 0; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biSize = 1; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biSize = 0xdeadbeef; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + + /* Test width. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + header->bmiHeader.biWidth = 0; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biWidth = -1; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biWidth = 4096 + 1; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biWidth = 4096; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + + /* Test height. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + header->bmiHeader.biHeight = 0; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biHeight = 4096 + 1; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biHeight = 4096; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biHeight = -4096; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + + /* Test compression. */ + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + header->bmiHeader.biCompression = 0; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + todo_wine + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biCompression = 1; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biCompression = 2; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + header->bmiHeader.biCompression = 0xdeadbeef; + hr = IMediaObject_SetInputType(media_object, 0, good_media_type, DMO_SET_TYPEF_TEST_ONLY); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); +} + static HRESULT WINAPI test_unk_QueryInterface(IUnknown *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IUnknown)) @@ -4721,51 +4886,9 @@ static void test_wmv_decoder_media_object(void) {MFMediaType_Video, MEDIASUBTYPE_RGB555, TRUE, FALSE, 512, FORMAT_VideoInfo, NULL, 88, (BYTE *)&expected_output_info[11]}, {MFMediaType_Video, MEDIASUBTYPE_RGB8, TRUE, FALSE, 256, FORMAT_VideoInfo, NULL, 1112, (BYTE *)&expected_output_info[12]}, }; - const struct set_type_arg - { - DWORD stream_index; - enum - { - MEDIA_TYPE_NULL = 0, - MEDIA_TYPE_GOOD = 1, - MEDIA_TYPE_BAD = 2, - } media_type; - DWORD flags; - HRESULT hr; - } - set_type_arg_tests[] = - { - {1, MEDIA_TYPE_NULL, 0, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_NULL, 0x4, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_NULL, DMO_SET_TYPEF_CLEAR, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_NULL, DMO_SET_TYPEF_TEST_ONLY, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_GOOD, 0, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_GOOD, 0x4, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_GOOD, DMO_SET_TYPEF_CLEAR, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_GOOD, DMO_SET_TYPEF_TEST_ONLY, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_BAD, 0, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_BAD, 0x4, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_BAD, DMO_SET_TYPEF_CLEAR, DMO_E_INVALIDSTREAMINDEX}, - {1, MEDIA_TYPE_BAD, DMO_SET_TYPEF_TEST_ONLY, DMO_E_INVALIDSTREAMINDEX}, - {0, MEDIA_TYPE_BAD, 0, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_BAD, 0x4, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_BAD, DMO_SET_TYPEF_CLEAR, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_BAD, DMO_SET_TYPEF_TEST_ONLY, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_NULL, 0, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_NULL, 0x4, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_NULL, DMO_SET_TYPEF_TEST_ONLY, DMO_E_TYPE_NOT_ACCEPTED}, - {0, MEDIA_TYPE_NULL, DMO_SET_TYPEF_CLEAR, S_OK}, - {0, MEDIA_TYPE_NULL, DMO_SET_TYPEF_CLEAR | 0x4, S_OK}, - {0, MEDIA_TYPE_NULL, DMO_SET_TYPEF_CLEAR | DMO_SET_TYPEF_TEST_ONLY, S_OK}, - {0, MEDIA_TYPE_NULL, DMO_SET_TYPEF_CLEAR | DMO_SET_TYPEF_TEST_ONLY | 0x4, S_OK}, - {0, MEDIA_TYPE_GOOD, 0x4, S_OK}, - {0, MEDIA_TYPE_GOOD, DMO_SET_TYPEF_CLEAR, S_OK}, - {0, MEDIA_TYPE_GOOD, DMO_SET_TYPEF_CLEAR | DMO_SET_TYPEF_TEST_ONLY, S_OK}, - }; DMO_MEDIA_TYPE media_type, *input_type; IMediaObject *media_object; DWORD in_count, out_count; - VIDEOINFOHEADER *header; char buffer[1024]; ULONG ret, i; HRESULT hr; @@ -4779,6 +4902,8 @@ static void test_wmv_decoder_media_object(void) return; }
+ input_type = (DMO_MEDIA_TYPE *)buffer; + hr = CoInitialize(NULL); ok(hr == S_OK, "CoInitialize failed, hr %#lx.\n", hr);
@@ -4805,12 +4930,9 @@ static void test_wmv_decoder_media_object(void) check_dmo_get_input_type(media_object, expected_input_types, ARRAY_SIZE(expected_input_types));
/* Test SetInputType. */ - input_type = (DMO_MEDIA_TYPE *)buffer; - header = (VIDEOINFOHEADER *)(input_type + 1); for (i = 0; i < ARRAY_SIZE(expected_input_types); ++i) { const GUID *subtype = &expected_input_types[i].subtype; - if (IsEqualGUID(subtype, &MEDIASUBTYPE_WMV2) || IsEqualGUID(subtype, &MEDIASUBTYPE_WMVA) || IsEqualGUID(subtype, &MEDIASUBTYPE_WVP2) @@ -4822,142 +4944,7 @@ static void test_wmv_decoder_media_object(void) }
winetest_push_context("in %lu", i); - - /* Test setting the type. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - header->dwBitRate = 0xdeadbeef; - header->dwBitErrorRate = 0xdeadbeef; - header->AvgTimePerFrame = 0xdeadbeef; - header->bmiHeader.biPlanes = 0xdead; - header->bmiHeader.biBitCount = 0xdead; - header->bmiHeader.biSizeImage = 0xdeadbeef; - header->bmiHeader.biXPelsPerMeter = 0xdead; - header->bmiHeader.biYPelsPerMeter = 0xdead; - hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - - /* Test invalid major type. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - input_type->majortype = MFMediaType_Default; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - - /* Test invalid subtype. */ - init_dmo_media_type_video(input_type, &MEDIASUBTYPE_None, 96, 96); - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - - /* Test invalid format type. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - input_type->formattype = FORMAT_None; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - - /* Test invalid format size. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - input_type->cbFormat = 1; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - - /* Test NULL format pointer. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - input_type->pbFormat = NULL; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - - /* Test video header struct size. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - header->bmiHeader.biSize = 0; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biSize = 1; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biSize = 0xdeadbeef; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - - /* Test width. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - header->bmiHeader.biWidth = 0; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biWidth = -1; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biWidth = 4096 + 1; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biWidth = 4096; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - - /* Test height. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - header->bmiHeader.biHeight = 0; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biHeight = 4096 + 1; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biHeight = 4096; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biHeight = -4096; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - - /* Test compression. */ - init_dmo_media_type_video(input_type, subtype, 96, 96); - header->bmiHeader.biCompression = 0; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - todo_wine - ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biCompression = 1; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biCompression = 2; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - header->bmiHeader.biCompression = 0xdeadbeef; - hr = IMediaObject_SetInputType(media_object, 0, input_type, DMO_SET_TYPEF_TEST_ONLY); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - - winetest_pop_context(); - } - - /* Test SetInputType arguments. */ - memset(&media_type, 0, sizeof(media_type)); - init_dmo_media_type_video(input_type, &expected_input_types[0].subtype, 96, 96); - for (i = 0; i < ARRAY_SIZE(set_type_arg_tests); ++i) - { - const struct set_type_arg *test = &set_type_arg_tests[i]; - DMO_MEDIA_TYPE *type; - - winetest_push_context("Test %lu", i); - - if (test->media_type == MEDIA_TYPE_GOOD) - type = input_type; - else if (test->media_type == MEDIA_TYPE_BAD) - type = &media_type; - else - type = NULL; - - hr = IMediaObject_SetInputType(media_object, test->stream_index, type, test->flags); - ok(hr == test->hr, "SetInputType returned %#lx, expected %#lx.\n", hr, test->hr); - + check_dmo_set_input_type(media_object, subtype); winetest_pop_context(); }
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index ccb2413faf4..35dc6aea6b8 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -4956,30 +4956,11 @@ static void test_wmv_decoder_media_object(void) ok(hr == DMO_E_TYPE_NOT_SET, "GetOutputType returned %#lx.\n", hr);
/* Test GetOutputType after setting input type. */ - for (i = 0; i < ARRAY_SIZE(expected_input_types); ++i) - { - const GUID *subtype = &expected_input_types[i].subtype; - if (IsEqualGUID(subtype, &MEDIASUBTYPE_WMV2) - || IsEqualGUID(subtype, &MEDIASUBTYPE_WMVA) - || IsEqualGUID(subtype, &MEDIASUBTYPE_WVP2) - || IsEqualGUID(subtype, &MEDIASUBTYPE_WVC1) - || IsEqualGUID(subtype, &MFVideoFormat_VC1S)) - { - skip("Skipping GetOutputType tests for input subtype %s.\n", debugstr_guid(subtype)); - continue; - } - - winetest_push_context("in %lu", i); - - init_dmo_media_type_video(input_type, &expected_input_types[i].subtype, 16, 16); - hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); - ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); - - todo_wine - check_dmo_get_output_type(media_object, expected_output_types, ARRAY_SIZE(expected_output_types)); - - winetest_pop_context(); - } + init_dmo_media_type_video(input_type, &expected_input_types[0].subtype, 16, 16); + hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + todo_wine + check_dmo_get_output_type(media_object, expected_output_types, ARRAY_SIZE(expected_output_types));
ret = IMediaObject_Release(media_object); ok(ret == 0, "Release returned %lu\n", ret);
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 130 +++++++++++++++++++++++++++++++++++++- 1 file changed, 127 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 35dc6aea6b8..3c068aae743 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -55,6 +55,58 @@ DEFINE_GUID(MFVideoFormat_WMV_Unknown,0x7ce12ca9,0xbfbf,0x43d9,0x9d,0x00,0x82,0x
DEFINE_GUID(mft_output_sample_incomplete,0xffffff,0xffff,0xffff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff);
+static BOOL is_compressed_subtype(const GUID *subtype) +{ + if (IsEqualGUID(subtype, &MEDIASUBTYPE_WMV1) + || IsEqualGUID(subtype, &MEDIASUBTYPE_WMV2) + || IsEqualGUID(subtype, &MEDIASUBTYPE_WMVA) + || IsEqualGUID(subtype, &MEDIASUBTYPE_WMVP) + || IsEqualGUID(subtype, &MEDIASUBTYPE_WVP2) + || IsEqualGUID(subtype, &MFVideoFormat_WMV_Unknown) + || IsEqualGUID(subtype, &MEDIASUBTYPE_WVC1) + || IsEqualGUID(subtype, &MEDIASUBTYPE_WMV3) + || IsEqualGUID(subtype, &MFVideoFormat_VC1S)) + return TRUE; + return FALSE; +} + +static DWORD subtype_to_compression(const GUID *subtype) +{ + if (IsEqualGUID(subtype, &MEDIASUBTYPE_RGB32) + || IsEqualGUID(subtype, &MEDIASUBTYPE_RGB24) + || IsEqualGUID(subtype, &MEDIASUBTYPE_RGB555) + || IsEqualGUID(subtype, &MEDIASUBTYPE_RGB8)) + return BI_RGB; + else if (IsEqualGUID(subtype, &MEDIASUBTYPE_RGB565)) + return BI_BITFIELDS; + else + return subtype->Data1; +} + +static DWORD subtype_to_bpp(const GUID *subtype) +{ + if (IsEqualGUID(subtype, &MEDIASUBTYPE_RGB8)) + return 8; + else if (IsEqualGUID(subtype, &MEDIASUBTYPE_NV12) + || IsEqualGUID(subtype, &MEDIASUBTYPE_YV12) + || IsEqualGUID(subtype, &MEDIASUBTYPE_IYUV) + || IsEqualGUID(subtype, &MEDIASUBTYPE_I420) + || IsEqualGUID(subtype, &MEDIASUBTYPE_NV11)) + return 12; + else if (IsEqualGUID(subtype, &MEDIASUBTYPE_YUY2) + || IsEqualGUID(subtype, &MEDIASUBTYPE_UYVY) + || IsEqualGUID(subtype, &MEDIASUBTYPE_YVYU) + || IsEqualGUID(subtype, &MEDIASUBTYPE_RGB565) + || IsEqualGUID(subtype, &MEDIASUBTYPE_RGB555)) + return 16; + else if (IsEqualGUID(subtype, &MEDIASUBTYPE_RGB24)) + return 24; + else if (IsEqualGUID(subtype, &MEDIASUBTYPE_RGB32)) + return 32; + else + return 0; +} + static void load_resource(const WCHAR *filename, const BYTE **data, DWORD *length) { HRSRC resource = FindResourceW(NULL, filename, (const WCHAR *)RT_RCDATA); @@ -274,17 +326,19 @@ static void init_dmo_media_type_video(DMO_MEDIA_TYPE *media_type, const GUID *subtype, const LONG width, const LONG height) { VIDEOINFOHEADER *header = (VIDEOINFOHEADER *)(media_type + 1); + BOOL compressed = is_compressed_subtype(subtype);
memset(header, 0, sizeof(*header)); header->bmiHeader.biSize = sizeof(header->bmiHeader); header->bmiHeader.biWidth = width; header->bmiHeader.biHeight = height; - header->bmiHeader.biCompression = subtype->Data1; + header->bmiHeader.biBitCount = subtype_to_bpp(subtype); + header->bmiHeader.biCompression = subtype_to_compression(subtype);
media_type->majortype = MEDIATYPE_Video; media_type->subtype = *subtype; - media_type->bFixedSizeSamples = FALSE; - media_type->bTemporalCompression = TRUE; + media_type->bFixedSizeSamples = !compressed; + media_type->bTemporalCompression = compressed; media_type->lSampleSize = 0; media_type->formattype = FORMAT_VideoInfo; media_type->pUnk = NULL; @@ -1411,6 +1465,62 @@ static void check_dmo_set_input_type(IMediaObject *media_object, const GUID *sub ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); }
+static void check_dmo_set_output_type(IMediaObject *media_object, const GUID *subtype) +{ + DMO_MEDIA_TYPE bad_media_type, *good_media_type; + char buffer[1024]; + DWORD i, flag; + HRESULT hr; + + const DWORD flags[] = {0, 0x4, DMO_SET_TYPEF_CLEAR, DMO_SET_TYPEF_TEST_ONLY, DMO_SET_TYPEF_TEST_ONLY | 0x4}; + + memset(&bad_media_type, 0, sizeof(bad_media_type)); + good_media_type = (DMO_MEDIA_TYPE *)buffer; + init_dmo_media_type_video(good_media_type, subtype, 16, 16); + + /* Test invalid stream index. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = flags[i]; + hr = IMediaObject_SetOutputType(media_object, 1, NULL, flag); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + hr = IMediaObject_SetOutputType(media_object, 1, &bad_media_type, flag); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + hr = IMediaObject_SetOutputType(media_object, 1, good_media_type, flag); + ok(hr == DMO_E_INVALIDSTREAMINDEX, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + } + + /* Test unaccepted type. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = flags[i]; + if (!(flag & DMO_SET_TYPEF_CLEAR)) + { + hr = IMediaObject_SetOutputType(media_object, 0, NULL, flag); + ok(hr == E_POINTER, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + } + hr = IMediaObject_SetOutputType(media_object, 0, &bad_media_type, flag); + ok(hr == DMO_E_TYPE_NOT_ACCEPTED, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + } + + /* Test clearing the type. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = DMO_SET_TYPEF_CLEAR | flags[i]; + hr = IMediaObject_SetOutputType(media_object, 0, NULL, flag); + ok(hr == S_OK, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + } + + /* Test accepted type. */ + for (i = 0; i < ARRAY_SIZE(flags); ++i) + { + flag = flags[i]; + hr = IMediaObject_SetOutputType(media_object, 0, good_media_type, flag); + ok(hr == S_OK, "SetOutputType returned %#lx for flag %#lx.\n", hr, flag); + } +} + + static HRESULT WINAPI test_unk_QueryInterface(IUnknown *iface, REFIID riid, void **obj) { if (IsEqualIID(riid, &IID_IUnknown)) @@ -4962,6 +5072,20 @@ static void test_wmv_decoder_media_object(void) todo_wine check_dmo_get_output_type(media_object, expected_output_types, ARRAY_SIZE(expected_output_types));
+ /* Test SetOutputType without setting input type. */ + hr = IMediaObject_SetInputType(media_object, 0, NULL, DMO_SET_TYPEF_CLEAR); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + hr = IMediaObject_SetOutputType(media_object, 0, &media_type, 0); + todo_wine + ok(hr == DMO_E_TYPE_NOT_SET, "SetOutputType returned %#lx.\n", hr); + + /* Test SetOutputType after setting input type. */ + init_dmo_media_type_video(input_type, &expected_input_types[0].subtype, 16, 16); + hr = IMediaObject_SetInputType(media_object, 0, input_type, 0); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + todo_wine + check_dmo_set_output_type(media_object, &MEDIASUBTYPE_RGB24); + ret = IMediaObject_Release(media_object); ok(ret == 0, "Release returned %lu\n", ret); CoUninitialize();
This merge request was approved by Rémi Bernon.