[PATCH v2 0/2] MR11339: winegstreamer/wma_decoder: Implement Get{Input,Output}CurrentType.
Needed for video playback in Angelic Chaos: RE-BOOT! -- v2: winegstreamer/wma_decoder: Implement GetOutputCurrentType. winegstreamer/wma_decoder: Implement GetInputCurrentType. https://gitlab.winehq.org/wine/wine/-/merge_requests/11339
From: Nello De Gregoris <bluechxindv@gmail.com> --- dlls/mf/tests/transform.c | 2 +- dlls/winegstreamer/wma_decoder.c | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 4dcff7ef8cc..d574bff2154 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -3662,7 +3662,7 @@ static void test_wma_decoder(void) check_mft_set_input_type_required(transform, input_type_desc); check_mft_set_input_type(transform, input_type_desc, S_OK); - check_mft_get_input_current_type_(__LINE__, transform, expect_input_type_desc, TRUE, FALSE); + check_mft_get_input_current_type_(__LINE__, transform, expect_input_type_desc, FALSE, FALSE); check_mft_get_input_stream_info(transform, MF_E_TRANSFORM_TYPE_NOT_SET, NULL); check_mft_get_output_stream_info(transform, MF_E_TRANSFORM_TYPE_NOT_SET, NULL); diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index e5e6cc616d1..80b9f01df13 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -468,8 +468,18 @@ failed: static HRESULT WINAPI transform_GetInputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type) { - FIXME("iface %p, id %lu, type %p stub!\n", iface, id, type); - return E_NOTIMPL; + struct wma_decoder *decoder = impl_from_IMFTransform(iface); + + TRACE("iface %p, id %lu, type %p.\n", iface, id, type); + + if (!type) + return E_POINTER; + if (id) + return MF_E_INVALIDSTREAMNUMBER; + if (IsEqualGUID(&decoder->input_type.majortype, &GUID_NULL)) + return MF_E_TRANSFORM_TYPE_NOT_SET; + + return MFCreateMediaTypeFromRepresentation(AM_MEDIA_TYPE_REPRESENTATION, &decoder->input_type, type); } static HRESULT WINAPI transform_GetOutputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11339
From: Nello De Gregoris <bluechxindv@gmail.com> --- dlls/mf/tests/transform.c | 4 ++-- dlls/winegstreamer/wma_decoder.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index d574bff2154..7de9c431e02 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -3658,7 +3658,7 @@ static void test_wma_decoder(void) /* setting output media type first doesn't work */ check_mft_set_output_type(transform, output_type_desc, MF_E_TRANSFORM_TYPE_NOT_SET); - check_mft_get_output_current_type_(__LINE__, transform, NULL, TRUE, FALSE); + check_mft_get_output_current_type_(__LINE__, transform, NULL, FALSE, FALSE); check_mft_set_input_type_required(transform, input_type_desc); check_mft_set_input_type(transform, input_type_desc, S_OK); @@ -3684,7 +3684,7 @@ static void test_wma_decoder(void) check_mft_set_output_type_required(transform, output_type_desc); check_mft_set_output_type(transform, output_type_desc, S_OK); - check_mft_get_output_current_type_(__LINE__, transform, expect_output_type_desc, TRUE, FALSE); + check_mft_get_output_current_type_(__LINE__, transform, expect_output_type_desc, FALSE, FALSE); check_mft_get_input_stream_info(transform, S_OK, &input_info); check_mft_get_output_stream_info(transform, S_OK, &output_info); diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 80b9f01df13..8b1bce45866 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -484,8 +484,18 @@ static HRESULT WINAPI transform_GetInputCurrentType(IMFTransform *iface, DWORD i static HRESULT WINAPI transform_GetOutputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type) { - FIXME("iface %p, id %lu, type %p stub!\n", iface, id, type); - return E_NOTIMPL; + struct wma_decoder *decoder = impl_from_IMFTransform(iface); + + TRACE("iface %p, id %lu, type %p.\n", iface, id, type); + + if (!type) + return E_POINTER; + if (id) + return MF_E_INVALIDSTREAMNUMBER; + if (IsEqualGUID(&decoder->output_type.majortype, &GUID_NULL)) + return MF_E_TRANSFORM_TYPE_NOT_SET; + + return MFCreateMediaTypeFromRepresentation(AM_MEDIA_TYPE_REPRESENTATION, &decoder->output_type, type); } static HRESULT WINAPI transform_GetInputStatus(IMFTransform *iface, DWORD id, DWORD *flags) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11339
v2: Rebased and split in two commits. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11339#note_145392
participants (2)
-
Nello De Gregoris -
Nello De Gregoris (@bluechxin)