From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/media_sink.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 9083dea6709..54a1c839758 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -624,9 +624,18 @@ static HRESULT WINAPI media_sink_RemoveStreamSink(IMFFinalizableMediaSink *iface
static HRESULT WINAPI media_sink_GetStreamSinkCount(IMFFinalizableMediaSink *iface, DWORD *count) { - FIXME("iface %p, count %p stub!\n", iface, count); + struct media_sink *media_sink = impl_from_IMFFinalizableMediaSink(iface);
- return E_NOTIMPL; + TRACE("iface %p, count %p.\n", iface, count); + + if (!count) + return E_POINTER; + + EnterCriticalSection(&media_sink->cs); + *count = list_count(&media_sink->stream_sinks); + LeaveCriticalSection(&media_sink->cs); + + return S_OK; }
static HRESULT WINAPI media_sink_GetStreamSinkByIndex(IMFFinalizableMediaSink *iface, DWORD index,
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/media_sink.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 54a1c839758..4418a82096c 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -641,9 +641,31 @@ static HRESULT WINAPI media_sink_GetStreamSinkCount(IMFFinalizableMediaSink *ifa static HRESULT WINAPI media_sink_GetStreamSinkByIndex(IMFFinalizableMediaSink *iface, DWORD index, IMFStreamSink **stream) { - FIXME("iface %p, index %lu, stream %p stub!\n", iface, index, stream); + struct media_sink *media_sink = impl_from_IMFFinalizableMediaSink(iface); + struct stream_sink *stream_sink; + HRESULT hr = MF_E_INVALIDINDEX; + DWORD entry_index = 0;
- return E_NOTIMPL; + TRACE("iface %p, index %lu, stream %p stub!\n", iface, index, stream); + + if (!stream) + return E_POINTER; + + EnterCriticalSection(&media_sink->cs); + + LIST_FOR_EACH_ENTRY(stream_sink, &media_sink->stream_sinks, struct stream_sink, entry) + { + if (entry_index++ == index) + { + IMFStreamSink_AddRef((*stream = &stream_sink->IMFStreamSink_iface)); + hr = S_OK; + break; + } + } + + LeaveCriticalSection(&media_sink->cs); + + return hr; }
static HRESULT WINAPI media_sink_GetStreamSinkById(IMFFinalizableMediaSink *iface, DWORD stream_sink_id,
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/media_sink.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/media_sink.c b/dlls/winegstreamer/media_sink.c index 4418a82096c..fcea67eb8f1 100644 --- a/dlls/winegstreamer/media_sink.c +++ b/dlls/winegstreamer/media_sink.c @@ -671,9 +671,27 @@ static HRESULT WINAPI media_sink_GetStreamSinkByIndex(IMFFinalizableMediaSink *i static HRESULT WINAPI media_sink_GetStreamSinkById(IMFFinalizableMediaSink *iface, DWORD stream_sink_id, IMFStreamSink **stream) { - FIXME("iface %p, stream_sink_id %#lx, stream %p stub!\n", iface, stream_sink_id, stream); + struct media_sink *media_sink = impl_from_IMFFinalizableMediaSink(iface); + struct stream_sink *stream_sink; + HRESULT hr;
- return E_NOTIMPL; + TRACE("iface %p, stream_sink_id %#lx, stream %p.\n", iface, stream_sink_id, stream); + + if (!stream) + return E_POINTER; + + EnterCriticalSection(&media_sink->cs); + + hr = MF_E_INVALIDSTREAMNUMBER; + if ((stream_sink = media_sink_get_stream_sink_by_id(media_sink, stream_sink_id))) + { + IMFStreamSink_AddRef((*stream = &stream_sink->IMFStreamSink_iface)); + hr = S_OK; + } + + LeaveCriticalSection(&media_sink->cs); + + return hr; }
static HRESULT WINAPI media_sink_SetPresentationClock(IMFFinalizableMediaSink *iface, IMFPresentationClock *clock)
This merge request was approved by Rémi Bernon.