[PATCH 2/7] mfreadwrite: Support source configuration with MF_SOURCE_READER_MEDIASOURCE_CONFIG.

Nikolay Sivov nsivov at codeweavers.com
Wed Mar 20 00:35:38 CDT 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfreadwrite/main.c | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/main.c
index cbaad1619a..a6e0c10b5d 100644
--- a/dlls/mfreadwrite/main.c
+++ b/dlls/mfreadwrite/main.c
@@ -545,6 +545,7 @@ failed:
 static HRESULT create_source_reader_from_stream(IMFByteStream *stream, IMFAttributes *attributes,
         REFIID riid, void **out)
 {
+    IPropertyStore *props = NULL;
     IMFSourceResolver *resolver;
     MF_OBJECT_TYPE obj_type;
     IMFMediaSource *source;
@@ -553,9 +554,15 @@ static HRESULT create_source_reader_from_stream(IMFByteStream *stream, IMFAttrib
     if (FAILED(hr = MFCreateSourceResolver(&resolver)))
         return hr;
 
-    hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, NULL,
+    if (attributes)
+        IMFAttributes_GetUnknown(attributes, &MF_SOURCE_READER_MEDIASOURCE_CONFIG, &IID_IPropertyStore,
+                (void **)&props);
+
+    hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, props,
             &obj_type, (IUnknown **)&source);
     IMFSourceResolver_Release(resolver);
+    if (props)
+        IPropertyStore_Release(props);
     if (FAILED(hr))
         return hr;
 
@@ -566,6 +573,7 @@ static HRESULT create_source_reader_from_stream(IMFByteStream *stream, IMFAttrib
 
 static HRESULT create_source_reader_from_url(const WCHAR *url, IMFAttributes *attributes, REFIID riid, void **out)
 {
+    IPropertyStore *props = NULL;
     IMFSourceResolver *resolver;
     IUnknown *object = NULL;
     MF_OBJECT_TYPE obj_type;
@@ -575,7 +583,11 @@ static HRESULT create_source_reader_from_url(const WCHAR *url, IMFAttributes *at
     if (FAILED(hr = MFCreateSourceResolver(&resolver)))
         return hr;
 
-    hr = IMFSourceResolver_CreateObjectFromURL(resolver, url, MF_RESOLUTION_MEDIASOURCE, NULL, &obj_type,
+    if (attributes)
+        IMFAttributes_GetUnknown(attributes, &MF_SOURCE_READER_MEDIASOURCE_CONFIG, &IID_IPropertyStore,
+                (void **)&props);
+
+    hr = IMFSourceResolver_CreateObjectFromURL(resolver, url, MF_RESOLUTION_MEDIASOURCE, props, &obj_type,
             &object);
     if (SUCCEEDED(hr))
     {
@@ -583,7 +595,7 @@ static HRESULT create_source_reader_from_url(const WCHAR *url, IMFAttributes *at
         {
             case MF_OBJECT_BYTESTREAM:
                 hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, (IMFByteStream *)object, NULL,
-                        MF_RESOLUTION_MEDIASOURCE, NULL, &obj_type, (IUnknown **)&source);
+                        MF_RESOLUTION_MEDIASOURCE, props, &obj_type, (IUnknown **)&source);
                 break;
             case MF_OBJECT_MEDIASOURCE:
                 source = (IMFMediaSource *)object;
@@ -597,6 +609,8 @@ static HRESULT create_source_reader_from_url(const WCHAR *url, IMFAttributes *at
     }
 
     IMFSourceResolver_Release(resolver);
+    if (props)
+        IPropertyStore_Release(props);
     if (FAILED(hr))
         return hr;
 
-- 
2.20.1




More information about the wine-devel mailing list