From 95ab51105b3eae4076ea304c33b87ce38566766e Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 12 Mar 2019 09:07:45 +0300 Subject: [PATCH] mfreadwrite: Use source resolver when creating reader from bytestream. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/mfreadwrite/Makefile.in | 2 +- dlls/mfreadwrite/main.c | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/dlls/mfreadwrite/Makefile.in b/dlls/mfreadwrite/Makefile.in index afefdb5cc67..edc7ebd07dd 100644 --- a/dlls/mfreadwrite/Makefile.in +++ b/dlls/mfreadwrite/Makefile.in @@ -1,6 +1,6 @@ MODULE = mfreadwrite.dll IMPORTLIB = mfreadwrite -IMPORTS = mfuuid uuid +IMPORTS = mfuuid uuid mfplat C_SRCS = \ main.c diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/main.c index 098100df919..bcf79a8fbd9 100644 --- a/dlls/mfreadwrite/main.c +++ b/dlls/mfreadwrite/main.c @@ -254,9 +254,23 @@ static HRESULT create_source_reader_from_source(IMFMediaSource *source, IMFAttri static HRESULT create_source_reader_from_stream(IMFByteStream *stream, IMFAttributes *attributes, REFIID riid, void **out) { - /* FIXME: resolve bytestream to media source */ + IMFSourceResolver *resolver; + MF_OBJECT_TYPE obj_type; + IMFMediaSource *source; + HRESULT hr; - return create_source_reader_from_source(NULL, attributes, riid, out); + if (FAILED(hr = MFCreateSourceResolver(&resolver))) + return hr; + + hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, NULL, + &obj_type, (IUnknown **)&source); + IMFSourceResolver_Release(resolver); + if (FAILED(hr)) + return hr; + + hr = create_source_reader_from_source(source, attributes, riid, out); + IMFMediaSource_Release(source); + return hr; } static HRESULT WINAPI sink_writer_QueryInterface(IMFSinkWriter *iface, REFIID riid, void **out)