From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/mf.c | 10 +++++++++- dlls/winegstreamer/media_sink.c | 13 +++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index b9363163370..37c1b0be456 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -5794,8 +5794,8 @@ static void test_mpeg4_media_sink(void) { IMFMediaSink *sink = NULL, *sink2 = NULL, *sink_audio = NULL, *sink_video = NULL, *sink_empty = NULL; IMFByteStream *bytestream, *bytestream_audio, *bytestream_video, *bytestream_empty; + IMFMediaType *audio_type, *video_type, *media_type, *media_type_out; DWORD id, count, flags, width = 96, height = 96; - IMFMediaType *audio_type, *video_type, *media_type; IMFMediaTypeHandler *type_handler = NULL; IMFPresentationClock *clock; IMFStreamSink *stream_sink; @@ -6033,6 +6033,14 @@ static void test_mpeg4_media_sink(void) hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, &media_type); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+ hr = IMFMediaTypeHandler_GetMediaTypeByIndex(type_handler, 1, &media_type_out); + ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaTypeHandler_GetMediaTypeByIndex(type_handler, 0, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); + hr = IMFMediaTypeHandler_GetMediaTypeByIndex(type_handler, 0, &media_type_out); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(media_type_out == media_type, "Got different media type pointer.\n"); + hr = IMFMediaType_SetUINT32(media_type, &MF_MT_AUDIO_NUM_CHANNELS, 1); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index e8ed90951bf..391336993fe 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -434,9 +434,18 @@ static HRESULT WINAPI stream_sink_type_handler_GetMediaTypeCount(IMFMediaTypeHan static HRESULT WINAPI stream_sink_type_handler_GetMediaTypeByIndex(IMFMediaTypeHandler *iface, DWORD index, IMFMediaType **type) { - FIXME("iface %p, index %lu, type %p.\n", iface, index, type); + struct stream_sink *stream_sink = impl_from_IMFMediaTypeHandler(iface);
- return E_NOTIMPL; + TRACE("iface %p, index %lu, type %p.\n", iface, index, type); + + if (!type) + return E_POINTER; + if (index > 0) + return MF_E_NO_MORE_TYPES; + + IMFMediaType_AddRef((*type = stream_sink->type)); + + return S_OK; }
static HRESULT WINAPI stream_sink_type_handler_SetCurrentMediaType(IMFMediaTypeHandler *iface, IMFMediaType *type)