-- v2: winegstreamer: Implement stream_sink_type_handler_GetMediaTypeByIndex. winegstreamer: Implement stream_sink_type_handler_GetMediaTypeCount. winegstreamer: Implement stream_sink_type_handler_GetMajorType. winegstreamer: Assume stream type is always not NULL for media sink.
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/media_sink.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 5ee2c44dc70..9d580190105 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -240,8 +240,7 @@ static ULONG WINAPI stream_sink_Release(IMFStreamSink *iface) { IMFMediaEventQueue_Release(stream_sink->event_queue); IMFFinalizableMediaSink_Release(stream_sink->media_sink); - if (stream_sink->type) - IMFMediaType_Release(stream_sink->type); + IMFMediaType_Release(stream_sink->type); free(stream_sink); }
@@ -450,8 +449,6 @@ static HRESULT WINAPI stream_sink_type_handler_GetCurrentMediaType(IMFMediaTypeH
if (!type) return E_POINTER; - if (!stream_sink->type) - return MF_E_NOT_INITIALIZED;
IMFMediaType_AddRef((*type = stream_sink->type));
@@ -500,8 +497,7 @@ static HRESULT stream_sink_create(DWORD stream_sink_id, IMFMediaType *media_type stream_sink->IMFMediaTypeHandler_iface.lpVtbl = &stream_sink_type_handler_vtbl; stream_sink->refcount = 1; stream_sink->id = stream_sink_id; - if (media_type) - IMFMediaType_AddRef((stream_sink->type = media_type)); + IMFMediaType_AddRef((stream_sink->type = media_type)); IMFFinalizableMediaSink_AddRef((stream_sink->media_sink = &media_sink->IMFFinalizableMediaSink_iface));
TRACE("Created stream sink %p.\n", stream_sink);
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/mf.c | 5 ----- dlls/winegstreamer/media_sink.c | 9 +++++++-- 2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 73526802b63..53f22809dc4 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6019,12 +6019,9 @@ static void test_mpeg4_media_sink(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaTypeHandler_GetMajorType(type_handler, NULL); - todo_wine ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); hr = IMFMediaTypeHandler_GetMajorType(type_handler, &guid); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(IsEqualGUID(&guid, &MFMediaType_Audio), "Unexpected major type.\n");
hr = IMFMediaTypeHandler_GetMediaTypeCount(type_handler, &count); @@ -6062,10 +6059,8 @@ static void test_mpeg4_media_sink(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaTypeHandler_GetMajorType(type_handler, NULL); - todo_wine ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); hr = IMFMediaTypeHandler_GetMajorType(type_handler, &guid); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
IMFStreamSink_Release(stream_sink); diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 9d580190105..9a4c56058e2 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -457,9 +457,14 @@ static HRESULT WINAPI stream_sink_type_handler_GetCurrentMediaType(IMFMediaTypeH
static HRESULT WINAPI stream_sink_type_handler_GetMajorType(IMFMediaTypeHandler *iface, GUID *type) { - FIXME("iface %p, type %p.\n", iface, type); + struct stream_sink *stream_sink = impl_from_IMFMediaTypeHandler(iface);
- return E_NOTIMPL; + TRACE("iface %p, type %p.\n", iface, type); + + if (!type) + return E_POINTER; + + return IMFMediaType_GetMajorType(stream_sink->type, type); }
static const IMFMediaTypeHandlerVtbl stream_sink_type_handler_vtbl =
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/mf.c | 4 ++-- dlls/winegstreamer/media_sink.c | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 53f22809dc4..b9363163370 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -6024,10 +6024,10 @@ static void test_mpeg4_media_sink(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(IsEqualGUID(&guid, &MFMediaType_Audio), "Unexpected major type.\n");
+ hr = IMFMediaTypeHandler_GetMediaTypeCount(type_handler, NULL); + ok(hr == E_POINTER, "Unexpected hr %#lx.\n", hr); hr = IMFMediaTypeHandler_GetMediaTypeCount(type_handler, &count); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(count == 1, "Unexpected count %lu.\n", count);
hr = IMFMediaTypeHandler_GetCurrentMediaType(type_handler, &media_type); diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 9a4c56058e2..8841f161587 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -421,9 +421,13 @@ static HRESULT WINAPI stream_sink_type_handler_IsMediaTypeSupported(IMFMediaType
static HRESULT WINAPI stream_sink_type_handler_GetMediaTypeCount(IMFMediaTypeHandler *iface, DWORD *count) { - FIXME("iface %p, count %p.\n", iface, count); + TRACE("iface %p, count %p.\n", iface, count);
- return E_NOTIMPL; + if (!count) + return E_POINTER; + + *count = 1; + return S_OK; }
static HRESULT WINAPI stream_sink_type_handler_GetMediaTypeByIndex(IMFMediaTypeHandler *iface, DWORD index,
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 8841f161587..21e4d6f3cd3 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -433,9 +433,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)
This merge request was approved by Rémi Bernon.