[PATCH v2 0/6] MR608: mf: More topology resolution fixes for elements with missing downstream types.
Some transforms, such as the EVR mixer do not implement GetInputAvailableType and may not have any current media type set, though they would accept upstream media type right away. -- v2: mf: Only enumerate types for decoders / converter if down type is missing. mf: Only allow converter connection if decoder didn't accept down type. mf: Allow resolving topology with missing downstream current type. mf/tests: Add more topology loader converter and enumeration tests. mf/tests: Add some MP3 decoder transform tests. mf/tests: Add some topology loader tests with missing output type. https://gitlab.winehq.org/wine/wine/-/merge_requests/608
From: R��mi Bernon <rbernon(a)codeweavers.com> --- dlls/mf/tests/mf.c | 183 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 159 insertions(+), 24 deletions(-) diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 9dab87b928d..f6ec15678a7 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1300,6 +1300,123 @@ static void test_sequencer_source(void) ok(hr == S_OK, "Shutdown failure, hr %#lx.\n", hr); } +struct test_handler +{ + IMFMediaTypeHandler IMFMediaTypeHandler_iface; + IMFMediaType *current_type; + IMFMediaType *invalid_type; +}; + +static struct test_handler *impl_from_IMFMediaTypeHandler(IMFMediaTypeHandler *iface) +{ + return CONTAINING_RECORD(iface, struct test_handler, IMFMediaTypeHandler_iface); +} + +static HRESULT WINAPI test_handler_QueryInterface(IMFMediaTypeHandler *iface, REFIID riid, void **obj) +{ + if (IsEqualIID(riid, &IID_IMFMediaTypeHandler) + || IsEqualIID(riid, &IID_IUnknown)) + { + IMFMediaTypeHandler_AddRef((*obj = iface)); + return S_OK; + } + + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI test_handler_AddRef(IMFMediaTypeHandler *iface) +{ + return 2; +} + +static ULONG WINAPI test_handler_Release(IMFMediaTypeHandler *iface) +{ + return 1; +} + +static HRESULT WINAPI test_handler_IsMediaTypeSupported(IMFMediaTypeHandler *iface, IMFMediaType *in_type, + IMFMediaType **out_type) +{ + struct test_handler *impl = impl_from_IMFMediaTypeHandler(iface); + BOOL result; + + if (out_type) + *out_type = NULL; + + if (impl->invalid_type && IMFMediaType_Compare(impl->invalid_type, (IMFAttributes *)in_type, + MF_ATTRIBUTES_MATCH_OUR_ITEMS, &result) == S_OK && result) + return MF_E_INVALIDMEDIATYPE; + + if (!impl->current_type) + return S_OK; + + if (IMFMediaType_Compare(impl->current_type, (IMFAttributes *)in_type, + MF_ATTRIBUTES_MATCH_OUR_ITEMS, &result) == S_OK && result) + return S_OK; + + return MF_E_INVALIDMEDIATYPE; +} + +static HRESULT WINAPI test_handler_GetMediaTypeCount(IMFMediaTypeHandler *iface, DWORD *count) +{ + ok(0, "Unexpected call.\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI test_handler_GetMediaTypeByIndex(IMFMediaTypeHandler *iface, DWORD index, + IMFMediaType **type) +{ + todo_wine + ok(0, "Unexpected call.\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI test_handler_SetCurrentMediaType(IMFMediaTypeHandler *iface, IMFMediaType *media_type) +{ + ok(0, "Unexpected call.\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI test_handler_GetCurrentMediaType(IMFMediaTypeHandler *iface, IMFMediaType **media_type) +{ + struct test_handler *impl = impl_from_IMFMediaTypeHandler(iface); + HRESULT hr; + + if (!impl->current_type) + return E_NOTIMPL; + + if (FAILED(hr = MFCreateMediaType(media_type))) + return hr; + + hr = IMFMediaType_CopyAllItems(impl->current_type, (IMFAttributes *)*media_type); + if (FAILED(hr)) + IMFMediaType_Release(*media_type); + + return hr; +} + +static HRESULT WINAPI test_handler_GetMajorType(IMFMediaTypeHandler *iface, GUID *type) +{ + ok(0, "Unexpected call.\n"); + return E_NOTIMPL; +} + +static const IMFMediaTypeHandlerVtbl test_handler_vtbl = +{ + test_handler_QueryInterface, + test_handler_AddRef, + test_handler_Release, + test_handler_IsMediaTypeSupported, + test_handler_GetMediaTypeCount, + test_handler_GetMediaTypeByIndex, + test_handler_SetCurrentMediaType, + test_handler_GetCurrentMediaType, + test_handler_GetMajorType, +}; + +static const struct test_handler test_handler = {.IMFMediaTypeHandler_iface.lpVtbl = &test_handler_vtbl}; + struct test_stream_sink { IMFStreamSink IMFStreamSink_iface; @@ -2043,28 +2160,16 @@ static void init_source_node(IMFMediaSource *source, MF_CONNECT_METHOD method, I IMFStreamDescriptor_Release(sd); } -static void init_sink_node(IMFActivate *sink_activate, MF_CONNECT_METHOD method, IMFTopologyNode *node) +static void init_sink_node(IMFStreamSink *stream_sink, MF_CONNECT_METHOD method, IMFTopologyNode *node) { - IMFStreamSink *stream_sink; - IMFMediaSink *sink; HRESULT hr; hr = IMFTopologyNode_DeleteAllItems(node); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - hr = IMFActivate_ActivateObject(sink_activate, &IID_IMFMediaSink, (void **)&sink); - ok(hr == S_OK, "Failed to activate, hr %#lx.\n", hr); - - hr = IMFMediaSink_GetStreamSinkByIndex(sink, 0, &stream_sink); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - - IMFMediaSink_Release(sink); - hr = IMFTopologyNode_SetObject(node, (IUnknown *)stream_sink); ok(hr == S_OK, "Failed to set object, hr %#lx.\n", hr); - IMFStreamSink_Release(stream_sink); - if (method != -1) { hr = IMFTopologyNode_SetUINT32(node, &MF_TOPONODE_CONNECT_METHOD, method); @@ -2079,6 +2184,8 @@ enum loader_test_flags LOADER_TODO = 0x4, LOADER_NEEDS_VIDEO_PROCESSOR = 0x8, LOADER_SET_ENUMERATE_SOURCE_TYPES = 0x10, + LOADER_NO_CURRENT_OUTPUT = 0x20, + LOADER_SET_INVALID_INPUT = 0x40, }; static void test_topology_loader(void) @@ -2144,6 +2251,10 @@ static void test_topology_loader(void) ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32), }; + static const media_type_desc video_dummy = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), + }; const struct loader_test { @@ -2219,19 +2330,19 @@ static void test_topology_loader(void) /* PCM -> PCM, different enumerated bps, no current type, sink allow converter */ .input_type = &audio_pcm_44100, .output_type = &audio_pcm_48000, .sink_method = MF_CONNECT_ALLOW_CONVERTER, .source_method = MF_CONNECT_DIRECT, .expected_result = S_OK, - .flags = LOADER_NEEDS_VIDEO_PROCESSOR | LOADER_EXPECTED_CONVERTER, + .flags = LOADER_EXPECTED_CONVERTER, }, { /* PCM -> PCM, different enumerated bps, no current type, sink allow decoder */ .input_type = &audio_pcm_44100, .output_type = &audio_pcm_48000, .sink_method = MF_CONNECT_ALLOW_DECODER, .source_method = MF_CONNECT_DIRECT, .expected_result = S_OK, - .flags = LOADER_NEEDS_VIDEO_PROCESSOR | LOADER_EXPECTED_CONVERTER, + .flags = LOADER_EXPECTED_CONVERTER, }, { /* PCM -> PCM, different enumerated bps, no current type, default methods */ .input_type = &audio_pcm_44100, .output_type = &audio_pcm_48000, .sink_method = -1, .source_method = -1, .expected_result = S_OK, - .flags = LOADER_NEEDS_VIDEO_PROCESSOR | LOADER_EXPECTED_CONVERTER, + .flags = LOADER_EXPECTED_CONVERTER, }, { /* PCM -> PCM, different enumerated bps, no current type, source allow converter */ @@ -2257,7 +2368,7 @@ static void test_topology_loader(void) .input_type = &audio_mp3_44100, .output_type = &audio_pcm_44100, .sink_method = MF_CONNECT_ALLOW_CONVERTER, .source_method = -1, .current_input = &audio_mp3_44100, .expected_result = MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION, - .flags = LOADER_NEEDS_VIDEO_PROCESSOR | LOADER_TODO, + .flags = LOADER_TODO, }, { /* MP3 -> PCM */ @@ -2277,20 +2388,34 @@ static void test_topology_loader(void) /* I420 -> RGB32, Video Processor media type */ .input_type = &video_i420_1280, .output_type = &video_video_processor_1280_rgb32, .sink_method = -1, .source_method = -1, .expected_result = S_OK, - .flags = LOADER_NEEDS_VIDEO_PROCESSOR | LOADER_EXPECTED_CONVERTER, + .flags = LOADER_EXPECTED_CONVERTER, }, { /* I420 -> RGB32, Video Processor media type without frame size */ .input_type = &video_i420_1280, .output_type = &video_video_processor_rgb32, .sink_method = -1, .source_method = -1, .expected_result = S_OK, - .flags = LOADER_NEEDS_VIDEO_PROCESSOR | LOADER_EXPECTED_CONVERTER, + .flags = LOADER_EXPECTED_CONVERTER, + }, + { + /* RGB32 -> Any Video, no current output type */ + .input_type = &video_i420_1280, .output_type = &video_dummy, .sink_method = -1, .source_method = -1, + .expected_result = S_OK, + .flags = LOADER_NO_CURRENT_OUTPUT | LOADER_TODO, + }, + { + /* RGB32 -> Any Video, no current output type, refuse input type */ + .input_type = &video_i420_1280, .output_type = &video_dummy, .sink_method = -1, .source_method = -1, + .expected_result = S_OK, + .flags = LOADER_NO_CURRENT_OUTPUT | LOADER_SET_INVALID_INPUT | LOADER_EXPECTED_CONVERTER | LOADER_TODO, }, }; IMFSampleGrabberSinkCallback test_grabber_callback = { &test_grabber_callback_vtbl }; IMFTopologyNode *src_node, *sink_node, *src_node2, *sink_node2, *mft_node; - IMFTopology *topology, *topology2, *full_topology; + struct test_stream_sink stream_sink = test_stream_sink; IMFMediaType *media_type, *input_type, *output_type; + IMFTopology *topology, *topology2, *full_topology; + struct test_handler handler = test_handler; IMFPresentationDescriptor *pd; unsigned int i, count, value; IMFActivate *sink_activate; @@ -2307,6 +2432,8 @@ static void test_topology_loader(void) BOOL ret; LONG ref; + stream_sink.handler = &handler.IMFMediaTypeHandler_iface; + hr = MFStartup(MF_VERSION, MFSTARTUP_FULL); ok(hr == S_OK, "Startup failure, hr %#lx.\n", hr); @@ -2412,11 +2539,21 @@ static void test_topology_loader(void) init_media_type(input_type, *test->input_type, -1); init_media_type(output_type, *test->output_type, -1); + if (test->flags & LOADER_NO_CURRENT_OUTPUT) + handler.current_type = NULL; + else + handler.current_type = output_type; + + if (test->flags & LOADER_SET_INVALID_INPUT) + handler.invalid_type = input_type; + else + handler.invalid_type = NULL; + hr = MFCreateSampleGrabberSinkActivate(output_type, &test_grabber_callback, &sink_activate); ok(hr == S_OK, "Failed to create grabber sink, hr %#lx.\n", hr); init_source_node(source, test->source_method, src_node, 1, &input_type, test->current_input); - init_sink_node(sink_activate, test->sink_method, sink_node); + init_sink_node(&stream_sink.IMFStreamSink_iface, test->sink_method, sink_node); hr = IMFTopology_GetCount(topology, &count); ok(hr == S_OK, "Failed to get attribute count, hr %#lx.\n", hr); @@ -2597,10 +2734,8 @@ todo_wine { ref = IMFMediaType_Release(input_type); ok(ref == 0, "Release returned %ld\n", ref); - /* FIXME: is native really leaking refs here, or are we? */ ref = IMFMediaType_Release(output_type); - todo_wine - ok(ref != 0, "Release returned %ld\n", ref); + ok(ref == 0, "Release returned %ld\n", ref); hr = MFShutdown(); ok(hr == S_OK, "Shutdown failure, hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/608
From: R��mi Bernon <rbernon(a)codeweavers.com> There's some differences in the decoded data between Windows versions, the results have been taken from a Windows 10 VM. --- dlls/mf/tests/mf.c | 435 +++++++++++++++++++++++++++++++++++ dlls/mf/tests/mp3decdata.bin | Bin 0 -> 94656 bytes dlls/mf/tests/mp3encdata.bin | Bin 0 -> 6295 bytes dlls/mf/tests/resource.rc | 13 ++ 4 files changed, 448 insertions(+) create mode 100644 dlls/mf/tests/mp3decdata.bin create mode 100644 dlls/mf/tests/mp3encdata.bin diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index f6ec15678a7..f6024f95768 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -9246,6 +9246,440 @@ failed: CoUninitialize(); } +static void test_mp3_decoder(void) +{ + const GUID transform_inputs[] = + { + MFAudioFormat_MP3, + }; + const GUID transform_outputs[] = + { + MFAudioFormat_PCM, + }; + const GUID dmo_inputs[] = + { + MFAudioFormat_MP3, + }; + const GUID dmo_outputs[] = + { + MEDIASUBTYPE_PCM, + }; + + static const media_type_desc expect_available_inputs[] = + { + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_MP3), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + }; + static const media_type_desc expect_available_outputs[] = + { + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 176400), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 8), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 88200), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 4), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 8), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 44100), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 2), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 88200), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 4), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 44100), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 2), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 8), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 1), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 1), + ATTR_UINT32(MF_MT_ALL_SAMPLES_INDEPENDENT, 1), + }, + }; + + const struct attribute_desc input_type_desc[] = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_MP3), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), + {0}, + }; + static const struct attribute_desc output_type_desc[] = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_PCM), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 88200), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 16), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 22050), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 4), + {0}, + }; + + MFT_REGISTER_TYPE_INFO output_type = {MFMediaType_Audio, MFAudioFormat_PCM}; + MFT_REGISTER_TYPE_INFO input_type = {MFMediaType_Audio, MFAudioFormat_MP3}; + static const ULONG mp3dec_block_size = 0x1200; + ULONG mp3dec_data_len, mp3enc_data_len; + const BYTE *mp3dec_data, *mp3enc_data; + MFT_OUTPUT_STREAM_INFO output_info; + MFT_INPUT_STREAM_INFO input_info; + MFT_OUTPUT_DATA_BUFFER output; + WCHAR output_path[MAX_PATH]; + IMFMediaType *media_type; + IMFTransform *transform; + LONGLONG time, duration; + DWORD status, length; + HANDLE output_file; + IMFSample *sample; + HRSRC resource; + GUID class_id; + ULONG i, ret; + HRESULT hr; + + hr = CoInitialize(NULL); + ok(hr == S_OK, "Failed to initialize, hr %#lx.\n", hr); + + if (!create_transform(MFT_CATEGORY_AUDIO_DECODER, &input_type, &output_type, L"MP3 Decoder MFT", &MFMediaType_Audio, + transform_inputs, ARRAY_SIZE(transform_inputs), transform_outputs, ARRAY_SIZE(transform_outputs), + &transform, &CLSID_CMP3DecMediaObject, &class_id)) + goto failed; + + check_dmo(&class_id, L"MP3 Decoder DMO", &MEDIATYPE_Audio, dmo_inputs, ARRAY_SIZE(dmo_inputs), + dmo_outputs, ARRAY_SIZE(dmo_outputs)); + + check_interface(transform, &IID_IMFTransform, TRUE); + check_interface(transform, &IID_IMediaObject, TRUE); + todo_wine + check_interface(transform, &IID_IPropertyStore, TRUE); + check_interface(transform, &IID_IPropertyBag, FALSE); + + /* check default media types */ + + hr = IMFTransform_GetInputStreamInfo(transform, 0, &input_info); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "GetInputStreamInfo returned %#lx\n", hr); + hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "GetOutputStreamInfo returned %#lx\n", hr); + hr = IMFTransform_GetOutputAvailableType(transform, 0, 0, &media_type); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "GetOutputAvailableType returned %#lx\n", hr); + + i = -1; + while (SUCCEEDED(hr = IMFTransform_GetInputAvailableType(transform, 0, ++i, &media_type))) + { + winetest_push_context("in %lu", i); + ok(hr == S_OK, "GetInputAvailableType returned %#lx\n", hr); + check_media_type(media_type, expect_available_inputs[i], -1); + hr = IMFTransform_SetInputType(transform, 0, media_type, 0); + ok(hr == MF_E_INVALIDMEDIATYPE, "SetInputType returned %#lx.\n", hr); + ret = IMFMediaType_Release(media_type); + ok(ret == 0, "Release returned %lu\n", ret); + winetest_pop_context(); + } + todo_wine + ok(hr == MF_E_NO_MORE_TYPES, "GetInputAvailableType returned %#lx\n", hr); + todo_wine + ok(i == ARRAY_SIZE(expect_available_inputs), "%lu input media types\n", i); + + /* setting output media type first doesn't work */ + + hr = MFCreateMediaType(&media_type); + ok(hr == S_OK, "MFCreateMediaType returned %#lx\n", hr); + init_media_type(media_type, output_type_desc, -1); + hr = IMFTransform_SetOutputType(transform, 0, media_type, 0); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "SetOutputType returned %#lx.\n", hr); + ret = IMFMediaType_Release(media_type); + ok(ret == 0, "Release returned %lu\n", ret); + + /* check required input media type attributes */ + + hr = MFCreateMediaType(&media_type); + ok(hr == S_OK, "MFCreateMediaType returned %#lx\n", hr); + hr = IMFTransform_SetInputType(transform, 0, media_type, 0); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "SetInputType returned %#lx.\n", hr); + init_media_type(media_type, input_type_desc, 1); + hr = IMFTransform_SetInputType(transform, 0, media_type, 0); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "SetInputType returned %#lx.\n", hr); + init_media_type(media_type, input_type_desc, 2); + for (i = 2; i < ARRAY_SIZE(input_type_desc) - 1; ++i) + { + hr = IMFTransform_SetInputType(transform, 0, media_type, 0); + ok(hr == MF_E_INVALIDMEDIATYPE, "SetInputType returned %#lx.\n", hr); + init_media_type(media_type, input_type_desc, i + 1); + } + hr = IMFTransform_SetInputType(transform, 0, media_type, 0); + ok(hr == S_OK, "SetInputType returned %#lx.\n", hr); + ret = IMFMediaType_Release(media_type); + ok(ret == 0, "Release returned %lu\n", ret); + + hr = IMFTransform_GetInputStreamInfo(transform, 0, &input_info); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "GetInputStreamInfo returned %#lx\n", hr); + hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); + ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "GetOutputStreamInfo returned %#lx\n", hr); + + /* check new output media types */ + + i = -1; + while (SUCCEEDED(hr = IMFTransform_GetOutputAvailableType(transform, 0, ++i, &media_type))) + { + winetest_push_context("out %lu", i); + ok(hr == S_OK, "GetOutputAvailableType returned %#lx\n", hr); + check_media_type(media_type, expect_available_outputs[i], -1); + ret = IMFMediaType_Release(media_type); + ok(ret == 0, "Release returned %lu\n", ret); + winetest_pop_context(); + } + ok(hr == MF_E_NO_MORE_TYPES, "GetOutputAvailableType returned %#lx\n", hr); + ok(i == ARRAY_SIZE(expect_available_outputs), "%lu output media types\n", i); + + /* check required output media type attributes */ + + hr = MFCreateMediaType(&media_type); + ok(hr == S_OK, "MFCreateMediaType returned %#lx\n", hr); + hr = IMFTransform_SetOutputType(transform, 0, media_type, 0); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "SetOutputType returned %#lx.\n", hr); + init_media_type(media_type, output_type_desc, 1); + hr = IMFTransform_SetOutputType(transform, 0, media_type, 0); + ok(hr == MF_E_ATTRIBUTENOTFOUND, "SetOutputType returned %#lx.\n", hr); + init_media_type(media_type, output_type_desc, 2); + for (i = 2; i < ARRAY_SIZE(output_type_desc) - 1; ++i) + { + hr = IMFTransform_SetOutputType(transform, 0, media_type, 0); + ok(hr == E_INVALIDARG, "SetOutputType returned %#lx.\n", hr); + init_media_type(media_type, output_type_desc, i + 1); + } + hr = IMFTransform_SetOutputType(transform, 0, media_type, 0); + ok(hr == S_OK, "SetOutputType returned %#lx.\n", hr); + ret = IMFMediaType_Release(media_type); + ok(ret == 0, "Release returned %lu\n", ret); + + memset(&input_info, 0xcd, sizeof(input_info)); + hr = IMFTransform_GetInputStreamInfo(transform, 0, &input_info); + ok(hr == S_OK, "GetInputStreamInfo returned %#lx\n", hr); + ok(input_info.hnsMaxLatency == 0, "got hnsMaxLatency %s\n", wine_dbgstr_longlong(input_info.hnsMaxLatency)); + ok(input_info.dwFlags == 0, "got dwFlags %#lx\n", input_info.dwFlags); + ok(input_info.cbSize == 0, "got cbSize %lu\n", input_info.cbSize); + ok(input_info.cbMaxLookahead == 0, "got cbMaxLookahead %#lx\n", input_info.cbMaxLookahead); + ok(input_info.cbAlignment == 1, "got cbAlignment %#lx\n", input_info.cbAlignment); + + memset(&output_info, 0xcd, sizeof(output_info)); + hr = IMFTransform_GetOutputStreamInfo(transform, 0, &output_info); + ok(hr == S_OK, "GetOutputStreamInfo returned %#lx\n", hr); + ok(output_info.dwFlags == 0, "got dwFlags %#lx\n", output_info.dwFlags); + todo_wine + ok(output_info.cbSize == mp3dec_block_size, "got cbSize %#lx\n", output_info.cbSize); + ok(output_info.cbAlignment == 1, "got cbAlignment %#lx\n", output_info.cbAlignment); + + resource = FindResourceW(NULL, L"mp3encdata.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + mp3enc_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + mp3enc_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(mp3enc_data_len == 6295, "got length %lu\n", mp3enc_data_len); + + sample = create_sample(mp3enc_data, mp3enc_data_len); + hr = IMFTransform_ProcessInput(transform, 0, sample, 0); + ok(hr == S_OK, "ProcessInput returned %#lx\n", hr); + ret = IMFSample_Release(sample); + ok(ret == 1, "Release returned %lu\n", ret); + + sample = create_sample(mp3enc_data, mp3enc_data_len); + hr = IMFTransform_ProcessInput(transform, 0, sample, 0); + ok(hr == MF_E_NOTACCEPTING, "ProcessInput returned %#lx\n", hr); + ret = IMFSample_Release(sample); + ok(ret == 0, "Release returned %lu\n", ret); + + status = 0xdeadbeef; + sample = create_sample(NULL, mp3dec_block_size); + memset(&output, 0, sizeof(output)); + output.pSample = sample; + + resource = FindResourceW(NULL, L"mp3decdata.bin", (const WCHAR *)RT_RCDATA); + ok(resource != 0, "FindResourceW failed, error %lu\n", GetLastError()); + mp3dec_data = LockResource(LoadResource(GetModuleHandleW(NULL), resource)); + mp3dec_data_len = SizeofResource(GetModuleHandleW(NULL), resource); + ok(mp3dec_data_len == 94656, "got length %lu\n", mp3dec_data_len); + + /* and generate a new one as well in a temporary directory */ + GetTempPathW(ARRAY_SIZE(output_path), output_path); + lstrcatW(output_path, L"mp3decdata.bin"); + output_file = CreateFileW(output_path, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); + ok(output_file != INVALID_HANDLE_VALUE, "CreateFileW failed, error %lu\n", GetLastError()); + + hr = IMFTransform_ProcessMessage(transform, MFT_MESSAGE_COMMAND_DRAIN, 0); + ok(hr == S_OK, "ProcessMessage returned %#lx\n", hr); + + hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); + ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); + ok(output.pSample == sample, "got pSample %p\n", output.pSample); + ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || output.dwStatus == 0 || + broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7) || output.dwStatus == 7) /* win7 */, + "got dwStatus %#lx\n", output.dwStatus); + ok(status == 0, "got status %#lx\n", status); + + hr = IMFSample_GetSampleTime(sample, &time); + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + ok(time == 0, "got time %I64d\n", time); + hr = IMFSample_GetSampleDuration(sample, &duration); + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); + ok(duration == 282993 || broken(duration == 522449) /* win8 */ || broken(duration == 261224) /* win7 */, + "got duration %I64d\n", duration); + hr = IMFSample_GetTotalLength(sample, &length); + ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + ok(length == 0x9c0 || broken(length == mp3dec_block_size) /* win8 */ || broken(length == 0x900) /* win7 */, + "got length %lu\n", length); + ok(mp3dec_data_len > length, "got remaining length %lu\n", mp3dec_data_len); + if (length == 0x9c0) check_sample_pcm16(sample, mp3dec_data, output_file, FALSE); + mp3dec_data_len -= 0x9c0; + mp3dec_data += 0x9c0; + + i = duration; + while (SUCCEEDED(hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status))) + { + winetest_push_context("%lu", i); + ok(hr == S_OK, "ProcessOutput returned %#lx\n", hr); + ok(output.pSample == sample, "got pSample %p\n", output.pSample); + ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || output.dwStatus == 0 || + broken(output.dwStatus == (MFT_OUTPUT_DATA_BUFFER_INCOMPLETE|7) || output.dwStatus == 7) /* win7 */, + "got dwStatus %#lx\n", output.dwStatus); + ok(status == 0, "got status %#lx\n", status); + if (!(output.dwStatus & MFT_OUTPUT_DATA_BUFFER_INCOMPLETE)) + { + winetest_pop_context(); + break; + } + + hr = IMFSample_GetSampleTime(sample, &time); + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + ok(time == i, "got time %I64d\n", time); + hr = IMFSample_GetSampleDuration(sample, &duration); + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); + ok(duration == 522449 || broken(261225 - duration <= 1) /* win7 */, + "got duration %I64d\n", duration); + hr = IMFSample_GetTotalLength(sample, &length); + ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + ok(length == mp3dec_block_size || broken(length == 0x900) /* win7 */, + "got length %lu\n", length); + ok(mp3dec_data_len > length || broken(mp3dec_data_len == 2304 || mp3dec_data_len == 0) /* win7 */, + "got remaining length %lu\n", mp3dec_data_len); + if (length == mp3dec_block_size) check_sample_pcm16(sample, mp3dec_data, output_file, FALSE); + mp3dec_data += min(mp3dec_data_len, length); + mp3dec_data_len -= min(mp3dec_data_len, length); + + winetest_pop_context(); + i += duration; + } + + hr = IMFSample_GetSampleTime(sample, &time); + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + ok(time == i || broken(time == i - duration) /* win7 */, "got time %I64d\n", time); + hr = IMFSample_GetSampleDuration(sample, &duration); + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); + todo_wine + ok(duration == 522449 || broken(261225 - duration <= 1) /* win7 */, "got duration %I64d\n", duration); + hr = IMFSample_GetTotalLength(sample, &length); + ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + todo_wine + ok(length == mp3dec_block_size || broken(length == 0) /* win7 */, "got length %lu\n", length); + ok(mp3dec_data_len == mp3dec_block_size || broken(mp3dec_data_len == 0) /* win7 */, "got remaining length %lu\n", mp3dec_data_len); + check_sample_pcm16(sample, mp3dec_data, output_file, FALSE); + mp3dec_data_len -= length; + mp3dec_data += length; + + memset(&output, 0, sizeof(output)); + output.pSample = sample; + hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); + todo_wine + ok(hr == S_OK || broken(hr == MF_E_TRANSFORM_NEED_MORE_INPUT) /* win7 */, "ProcessOutput returned %#lx\n", hr); + ok(output.pSample == sample, "got pSample %p\n", output.pSample); + todo_wine + ok(output.dwStatus == MFT_OUTPUT_DATA_BUFFER_INCOMPLETE || broken(output.dwStatus == 0) /* win7 */, + "got dwStatus %#lx\n", output.dwStatus); + ok(status == 0, "got status %#lx\n", status); + + if (hr == S_OK) + { + hr = IMFSample_GetSampleTime(sample, &time); + ok(hr == S_OK, "GetSampleTime returned %#lx\n", hr); + todo_wine + ok(time == 10185486, "got time %I64d\n", time); + hr = IMFSample_GetSampleDuration(sample, &duration); + ok(hr == S_OK, "GetSampleDuration returned %#lx\n", hr); + todo_wine + ok(duration == 14286, "got duration %I64d\n", duration); + hr = IMFSample_GetTotalLength(sample, &length); + ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + todo_wine + ok(length == mp3dec_data_len, "got length %lu\n", length); + if (length == mp3dec_data_len) + check_sample_pcm16(sample, mp3dec_data, output_file, FALSE); + } + + trace("created %s\n", debugstr_w(output_path)); + CloseHandle(output_file); + + ret = IMFSample_Release(sample); + ok(ret == 0, "Release returned %lu\n", ret); + + status = 0xdeadbeef; + sample = create_sample(NULL, mp3dec_block_size); + memset(&output, 0, sizeof(output)); + output.pSample = sample; + hr = IMFTransform_ProcessOutput(transform, 0, 1, &output, &status); + ok(hr == MF_E_TRANSFORM_NEED_MORE_INPUT, "ProcessOutput returned %#lx\n", hr); + ok(output.pSample == sample, "got pSample %p\n", output.pSample); + ok(output.dwStatus == 0, "got dwStatus %#lx\n", output.dwStatus); + ok(status == 0, "got status %#lx\n", status); + hr = IMFSample_GetTotalLength(sample, &length); + ok(hr == S_OK, "GetTotalLength returned %#lx\n", hr); + ok(length == 0, "got length %lu\n", length); + ret = IMFSample_Release(sample); + ok(ret == 0, "Release returned %lu\n", ret); + + ret = IMFTransform_Release(transform); + ok(ret == 0, "Release returned %lu\n", ret); + +failed: + CoUninitialize(); +} START_TEST(mf) { @@ -9285,4 +9719,5 @@ START_TEST(mf) test_h264_decoder(); test_audio_convert(); test_color_convert(); + test_mp3_decoder(); } diff --git a/dlls/mf/tests/mp3decdata.bin b/dlls/mf/tests/mp3decdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..e70337151dda65c9d7baf0154e0dcf9af53b192c GIT binary patch literal 94656 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 A!~g&Q literal 0 HcmV?d00001 diff --git a/dlls/mf/tests/mp3encdata.bin b/dlls/mf/tests/mp3encdata.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe35864cd4c09de07cb022466043fb5f6614b6a5 GIT binary patch literal 6295 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 RKMD#U?m~gE;Jp5N<X<}y1nd9+ literal 0 HcmV?d00001 diff --git a/dlls/mf/tests/resource.rc b/dlls/mf/tests/resource.rc index e9a3cd0609c..3cc0f875452 100644 --- a/dlls/mf/tests/resource.rc +++ b/dlls/mf/tests/resource.rc @@ -32,6 +32,19 @@ wmaencdata.bin RCDATA wmaencdata.bin /* @makedep: wmadecdata.bin */ wmadecdata.bin RCDATA wmadecdata.bin +/* Generated with: + * gst-launch-1.0 filesrc location=dlls/mf/tests/audiodata.bin ! \ + * audio/x-raw,format=F32LE,rate=22050,channels=2,layout=interleaved ! \ + * audioconvert ! lamemp3enc ! \ + * audio/mpeg,mpegversion=1,layer=3,rate=22050,channels=2 ! \ + * filesink location=dlls/mf/tests/mp3encdata.bin + */ +/* @makedep: mp3encdata.bin */ +mp3encdata.bin RCDATA mp3encdata.bin + +/* @makedep: mp3decdata.bin */ +mp3decdata.bin RCDATA mp3decdata.bin + /* Generated with: * gst-launch-1.0 videotestsrc num-buffers=60 pattern=smpte100 ! \ * video/x-raw,format=I420,width=84,height=82,framerate=30000/1001 ! \ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/608
From: R��mi Bernon <rbernon(a)codeweavers.com> --- dlls/mf/tests/mf.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index f6024f95768..5d95b092002 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -2210,6 +2210,16 @@ static void test_topology_loader(void) ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 1), ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 8), }; + static const media_type_desc audio_float_48000 = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), + ATTR_GUID(MF_MT_SUBTYPE, MFAudioFormat_Float), + ATTR_UINT32(MF_MT_AUDIO_NUM_CHANNELS, 2), + ATTR_UINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, 48000), + ATTR_UINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND, 8 * 48000), + ATTR_UINT32(MF_MT_AUDIO_BLOCK_ALIGNMENT, 8), + ATTR_UINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, 32), + }; static const media_type_desc audio_mp3_44100 = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio), @@ -2332,6 +2342,13 @@ static void test_topology_loader(void) .expected_result = S_OK, .flags = LOADER_EXPECTED_CONVERTER, }, + { + /* PCM -> PCM, different enumerated bps, same current type, sink allow converter, force enumerate */ + .input_type = &audio_pcm_44100, .output_type = &audio_pcm_48000, .sink_method = MF_CONNECT_ALLOW_CONVERTER, .source_method = -1, + .current_input = &audio_pcm_48000, + .expected_result = S_OK, + .flags = LOADER_EXPECTED_CONVERTER | LOADER_SET_ENUMERATE_SOURCE_TYPES | LOADER_TODO, + }, { /* PCM -> PCM, different enumerated bps, no current type, sink allow decoder */ .input_type = &audio_pcm_44100, .output_type = &audio_pcm_48000, .sink_method = MF_CONNECT_ALLOW_DECODER, .source_method = MF_CONNECT_DIRECT, @@ -2377,6 +2394,13 @@ static void test_topology_loader(void) .expected_result = S_OK, .flags = LOADER_EXPECTED_DECODER | LOADER_TODO, }, + { + /* MP3 -> PCM, need both decoder and converter */ + .input_type = &audio_mp3_44100, .output_type = &audio_float_48000, .sink_method = MF_CONNECT_ALLOW_DECODER, .source_method = -1, + .current_input = &audio_mp3_44100, + .expected_result = S_OK, + .flags = LOADER_EXPECTED_DECODER | LOADER_EXPECTED_CONVERTER | LOADER_TODO, + }, { /* I420 -> RGB32, Color Convert media type */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/608
From: R��mi Bernon <rbernon(a)codeweavers.com> And without enumerating the downstream types either. --- dlls/mf/tests/mf.c | 6 +++-- dlls/mf/topology_loader.c | 53 +++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 5d95b092002..dd61a10fc77 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -1374,8 +1374,10 @@ static HRESULT WINAPI test_handler_GetMediaTypeByIndex(IMFMediaTypeHandler *ifac static HRESULT WINAPI test_handler_SetCurrentMediaType(IMFMediaTypeHandler *iface, IMFMediaType *media_type) { + /* FIXME: Wine sets downstream media type when resolving topology, native doesn't */ + todo_wine ok(0, "Unexpected call.\n"); - return E_NOTIMPL; + return S_OK; } static HRESULT WINAPI test_handler_GetCurrentMediaType(IMFMediaTypeHandler *iface, IMFMediaType **media_type) @@ -2424,7 +2426,7 @@ static void test_topology_loader(void) /* RGB32 -> Any Video, no current output type */ .input_type = &video_i420_1280, .output_type = &video_dummy, .sink_method = -1, .source_method = -1, .expected_result = S_OK, - .flags = LOADER_NO_CURRENT_OUTPUT | LOADER_TODO, + .flags = LOADER_NO_CURRENT_OUTPUT, }, { /* RGB32 -> Any Video, no current output type, refuse input type */ diff --git a/dlls/mf/topology_loader.c b/dlls/mf/topology_loader.c index 08ee7922094..09fb9322261 100644 --- a/dlls/mf/topology_loader.c +++ b/dlls/mf/topology_loader.c @@ -253,7 +253,6 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNEC IMFTopologyNode *node; unsigned int i, count; GUID category, guid; - DWORD flags; HRESULT hr; TRACE("topology %p, method_mask %#x, branch %s, up_type %p, down_type %p.\n", @@ -263,13 +262,15 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNEC return hr; if (FAILED(hr = IMFMediaType_GetGUID(up_type, &MF_MT_SUBTYPE, &input_info.guidSubtype))) return hr; - if (FAILED(hr = IMFMediaType_GetMajorType(down_type, &output_info.guidMajorType))) - return hr; - if (FAILED(hr = IMFMediaType_GetGUID(down_type, &MF_MT_SUBTYPE, &output_info.guidSubtype))) - return hr; - if (FAILED(hr = IMFMediaType_IsEqual(up_type, down_type, &flags)) - || !(flags & MF_MEDIATYPE_EQUAL_MAJOR_TYPES)) - return MF_E_INVALIDMEDIATYPE; + if (!down_type) + output_info = input_info; + else + { + if (FAILED(hr = IMFMediaType_GetMajorType(down_type, &output_info.guidMajorType))) + return hr; + if (FAILED(hr = IMFMediaType_GetGUID(down_type, &MF_MT_SUBTYPE, &output_info.guidSubtype))) + return hr; + } if (IsEqualGUID(&input_info.guidMajorType, &MFMediaType_Audio)) category = decoder ? MFT_CATEGORY_AUDIO_DECODER : MFT_CATEGORY_AUDIO_EFFECT; @@ -300,10 +301,13 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNEC IMFTopologyNode_SetGUID(node, &MF_TOPONODE_TRANSFORM_OBJECTID, &guid); hr = topology_branch_connect_down(topology, MF_CONNECT_DIRECT, &up_branch, up_type); - if (SUCCEEDED(hr)) - hr = topology_branch_fill_media_type(up_type, down_type); - if (SUCCEEDED(hr)) - hr = IMFTransform_SetOutputType(transform, 0, down_type, 0); + if (down_type) + { + if (SUCCEEDED(hr)) + hr = topology_branch_fill_media_type(up_type, down_type); + if (SUCCEEDED(hr)) + hr = IMFTransform_SetOutputType(transform, 0, down_type, 0); + } IMFTransform_Release(transform); if (SUCCEEDED(hr)) @@ -328,8 +332,8 @@ static HRESULT topology_branch_connect_down(IMFTopology *topology, MF_CONNECT_ME struct topology_branch *branch, IMFMediaType *up_type) { IMFMediaTypeHandler *down_handler; + IMFMediaType *down_type = NULL; MF_CONNECT_METHOD method; - IMFMediaType *down_type; DWORD flags; HRESULT hr; @@ -346,27 +350,18 @@ static HRESULT topology_branch_connect_down(IMFTopology *topology, MF_CONNECT_ME && IMFMediaType_IsEqual(up_type, down_type, &flags) == S_OK) { TRACE("Connecting branch %s with current type %p.\n", debugstr_topology_branch(branch), up_type); - IMFMediaTypeHandler_Release(down_handler); - IMFMediaType_Release(down_type); - - return IMFTopologyNode_ConnectOutput(branch->up.node, branch->up.stream, branch->down.node, branch->down.stream); + hr = IMFTopologyNode_ConnectOutput(branch->up.node, branch->up.stream, branch->down.node, branch->down.stream); + goto done; } - if (FAILED(hr) && FAILED(hr = IMFMediaTypeHandler_GetMediaTypeByIndex(down_handler, 0, &down_type))) - return hr; - if (SUCCEEDED(hr = IMFMediaTypeHandler_IsMediaTypeSupported(down_handler, up_type, NULL)) && SUCCEEDED(hr = IMFMediaTypeHandler_SetCurrentMediaType(down_handler, up_type))) { TRACE("Connected branch %s with upstream type %p.\n", debugstr_topology_branch(branch), up_type); - IMFMediaTypeHandler_Release(down_handler); - IMFMediaType_Release(down_type); - - return IMFTopologyNode_ConnectOutput(branch->up.node, branch->up.stream, branch->down.node, branch->down.stream); + hr = IMFTopologyNode_ConnectOutput(branch->up.node, branch->up.stream, branch->down.node, branch->down.stream); + goto done; } - IMFMediaTypeHandler_Release(down_handler); - if (FAILED(hr) && (method & method_mask & MF_CONNECT_ALLOW_CONVERTER) == MF_CONNECT_ALLOW_CONVERTER) hr = topology_branch_connect_indirect(topology, MF_CONNECT_ALLOW_CONVERTER, branch, up_type, down_type); @@ -375,7 +370,11 @@ static HRESULT topology_branch_connect_down(IMFTopology *topology, MF_CONNECT_ME hr = topology_branch_connect_indirect(topology, MF_CONNECT_ALLOW_DECODER, branch, up_type, down_type); - IMFMediaType_Release(down_type); +done: + if (down_type) + IMFMediaType_Release(down_type); + IMFMediaTypeHandler_Release(down_handler); + return hr; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/608
From: R��mi Bernon <rbernon(a)codeweavers.com> --- dlls/mf/topology_loader.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dlls/mf/topology_loader.c b/dlls/mf/topology_loader.c index 09fb9322261..4560e3a578d 100644 --- a/dlls/mf/topology_loader.c +++ b/dlls/mf/topology_loader.c @@ -281,8 +281,13 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNEC if (FAILED(hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &node))) return hr; - if (decoder) + if (!decoder) + method_mask = MF_CONNECT_DIRECT; + else + { IMFTopologyNode_SetUINT32(node, &MF_TOPONODE_DECODER, 1); + method_mask = MF_CONNECT_ALLOW_CONVERTER; + } if (FAILED(hr = MFTEnumEx(category, MFT_ENUM_FLAG_ALL, &input_info, decoder ? NULL : &output_info, &activates, &count))) return hr; @@ -307,11 +312,13 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNEC hr = topology_branch_fill_media_type(up_type, down_type); if (SUCCEEDED(hr)) hr = IMFTransform_SetOutputType(transform, 0, down_type, 0); + if (SUCCEEDED(hr)) + method_mask = MF_CONNECT_DIRECT; } IMFTransform_Release(transform); if (SUCCEEDED(hr)) - hr = topology_branch_connect(topology, decoder ? MF_CONNECT_ALLOW_CONVERTER : MF_CONNECT_DIRECT, &down_branch); + hr = topology_branch_connect(topology, method_mask, &down_branch); if (SUCCEEDED(hr)) hr = IMFTopology_AddNode(topology, node); if (SUCCEEDED(hr)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/608
From: R��mi Bernon <rbernon(a)codeweavers.com> --- dlls/mf/tests/mf.c | 4 ++-- dlls/mf/topology_loader.c | 23 ++++++++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index dd61a10fc77..eccf4f51e4c 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -2349,7 +2349,7 @@ static void test_topology_loader(void) .input_type = &audio_pcm_44100, .output_type = &audio_pcm_48000, .sink_method = MF_CONNECT_ALLOW_CONVERTER, .source_method = -1, .current_input = &audio_pcm_48000, .expected_result = S_OK, - .flags = LOADER_EXPECTED_CONVERTER | LOADER_SET_ENUMERATE_SOURCE_TYPES | LOADER_TODO, + .flags = LOADER_EXPECTED_CONVERTER | LOADER_SET_ENUMERATE_SOURCE_TYPES, }, { /* PCM -> PCM, different enumerated bps, no current type, sink allow decoder */ @@ -2432,7 +2432,7 @@ static void test_topology_loader(void) /* RGB32 -> Any Video, no current output type, refuse input type */ .input_type = &video_i420_1280, .output_type = &video_dummy, .sink_method = -1, .source_method = -1, .expected_result = S_OK, - .flags = LOADER_NO_CURRENT_OUTPUT | LOADER_SET_INVALID_INPUT | LOADER_EXPECTED_CONVERTER | LOADER_TODO, + .flags = LOADER_NO_CURRENT_OUTPUT | LOADER_SET_INVALID_INPUT | LOADER_EXPECTED_CONVERTER, }, }; diff --git a/dlls/mf/topology_loader.c b/dlls/mf/topology_loader.c index 4560e3a578d..eb652f526dd 100644 --- a/dlls/mf/topology_loader.c +++ b/dlls/mf/topology_loader.c @@ -240,7 +240,7 @@ static HRESULT topology_branch_fill_media_type(IMFMediaType *up_type, IMFMediaTy } static HRESULT topology_branch_connect(IMFTopology *topology, MF_CONNECT_METHOD method_mask, - struct topology_branch *branch); + struct topology_branch *branch, BOOL enumerate_source_types); static HRESULT topology_branch_connect_down(IMFTopology *topology, MF_CONNECT_METHOD method_mask, struct topology_branch *branch, IMFMediaType *up_type); static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNECT_METHOD method_mask, @@ -318,7 +318,7 @@ static HRESULT topology_branch_connect_indirect(IMFTopology *topology, MF_CONNEC IMFTransform_Release(transform); if (SUCCEEDED(hr)) - hr = topology_branch_connect(topology, method_mask, &down_branch); + hr = topology_branch_connect(topology, method_mask, &down_branch, !down_type); if (SUCCEEDED(hr)) hr = IMFTopology_AddNode(topology, node); if (SUCCEEDED(hr)) @@ -411,9 +411,8 @@ static HRESULT topology_branch_foreach_up_types(IMFTopology *topology, MF_CONNEC } static HRESULT topology_branch_connect(IMFTopology *topology, MF_CONNECT_METHOD method_mask, - struct topology_branch *branch) + struct topology_branch *branch, BOOL enumerate_source_types) { - UINT32 enumerate_source_types; MF_CONNECT_METHOD method; HRESULT hr; @@ -422,8 +421,7 @@ static HRESULT topology_branch_connect(IMFTopology *topology, MF_CONNECT_METHOD if (FAILED(IMFTopologyNode_GetUINT32(branch->up.node, &MF_TOPONODE_CONNECT_METHOD, &method))) method = MF_CONNECT_DIRECT; - if (SUCCEEDED(IMFTopology_GetUINT32(topology, &MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES, &enumerate_source_types)) - && enumerate_source_types) + if (enumerate_source_types) { if (method & MF_CONNECT_RESOLVE_INDEPENDENT_OUTPUTTYPES) hr = topology_branch_foreach_up_types(topology, method_mask & MF_CONNECT_ALLOW_DECODER, branch); @@ -456,7 +454,8 @@ static HRESULT topology_branch_connect(IMFTopology *topology, MF_CONNECT_METHOD return hr; } -static HRESULT topology_loader_resolve_branches(struct topoloader_context *context, struct list *branches) +static HRESULT topology_loader_resolve_branches(struct topoloader_context *context, struct list *branches, + BOOL enumerate_source_types) { struct list new_branches = LIST_INIT(new_branches); struct topology_branch *branch, *next; @@ -474,7 +473,8 @@ static HRESULT topology_loader_resolve_branches(struct topoloader_context *conte else if (FAILED(hr = topology_branch_clone_nodes(context, branch))) WARN("Failed to clone nodes for branch %s\n", debugstr_topology_branch(branch)); else - hr = topology_branch_connect(context->output_topology, MF_CONNECT_ALLOW_DECODER, branch); + hr = topology_branch_connect(context->output_topology, MF_CONNECT_ALLOW_DECODER, + branch, enumerate_source_types); topology_branch_destroy(branch); if (FAILED(hr)) @@ -639,6 +639,7 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in struct list branches = LIST_INIT(branches); struct topoloader_context context = { 0 }; struct topology_branch *branch, *next; + UINT32 enumerate_source_types; IMFTopology *output_topology; MF_TOPOLOGY_TYPE node_type; IMFTopologyNode *node; @@ -705,8 +706,12 @@ static HRESULT WINAPI topology_loader_Load(IMFTopoLoader *iface, IMFTopology *in if (SUCCEEDED(hr) && list_empty(&branches)) hr = MF_E_TOPO_UNSUPPORTED; + if (FAILED(IMFTopology_GetUINT32(input_topology, &MF_TOPOLOGY_ENUMERATE_SOURCE_TYPES, + &enumerate_source_types))) + enumerate_source_types = 0; + while (SUCCEEDED(hr) && !list_empty(&branches)) - hr = topology_loader_resolve_branches(&context, &branches); + hr = topology_loader_resolve_branches(&context, &branches, enumerate_source_types); LIST_FOR_EACH_ENTRY_SAFE(branch, next, &branches, struct topology_branch, entry) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/608
On Thu Aug 11 12:50:19 2022 +0000, **** wrote:
Marvin replied on the mailing list: ``` Hi, It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated. The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=121023 Your paranoid android. === w10pro64_ja (64 bit report) === mf: mf: Timeout ``` I'm not sure what happened here but it looks like a fluke.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/608#note_6285
This fixes mfplay-based player regarding resolving EVR branches. With current wine it failed with MF_E_NO_MORE_TYPES, so that's good. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/608#note_6296
This merge request was approved by Nikolay Sivov. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/608
participants (2)
-
Nikolay Sivov (@nsivov) -
Rémi Bernon