[PATCH 4/6] mfreadwrite: Return source flags through MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS.

Nikolay Sivov nsivov at codeweavers.com
Wed Mar 13 01:29:35 CDT 2019


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mfreadwrite/main.c | 35 ++++++++++++++++++++++++++++++++---
 include/mfreadwrite.idl |  2 ++
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/main.c
index 6b6c5167ff..f3fd3b293d 100644
--- a/dlls/mfreadwrite/main.c
+++ b/dlls/mfreadwrite/main.c
@@ -21,6 +21,7 @@
 #include <stdarg.h>
 
 #define COBJMACROS
+#define NONAMELESSUNION
 
 #include "windef.h"
 #include "winbase.h"
@@ -211,10 +212,38 @@ static HRESULT WINAPI src_reader_GetServiceForStream(IMFSourceReader *iface, DWO
 }
 
 static HRESULT WINAPI src_reader_GetPresentationAttribute(IMFSourceReader *iface, DWORD index,
-        REFGUID guid, PROPVARIANT *attr)
+        REFGUID guid, PROPVARIANT *value)
 {
-    srcreader *This = impl_from_IMFSourceReader(iface);
-    FIXME("%p, 0x%08x, %s, %p\n", This, index, debugstr_guid(guid), attr);
+    struct source_reader *reader = impl_from_IMFSourceReader(iface);
+    HRESULT hr;
+
+    TRACE("%p, %#x, %s, %p.\n", iface, index, debugstr_guid(guid), value);
+
+    switch (index)
+    {
+        case MF_SOURCE_READER_MEDIASOURCE:
+            if (IsEqualGUID(guid, &MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS))
+            {
+                DWORD flags;
+
+                if (FAILED(hr = IMFMediaSource_GetCharacteristics(reader->source, &flags)))
+                    return hr;
+
+                value->vt = VT_UI4;
+                value->u.ulVal = flags;
+                return S_OK;
+            }
+            else
+            {
+                FIXME("Unsupported source attribute %s.\n", debugstr_guid(guid));
+                return E_NOTIMPL;
+            }
+            break;
+        default:
+            FIXME("Unsupported index %#x.\n", index);
+            return E_NOTIMPL;
+    }
+
     return E_NOTIMPL;
 }
 
diff --git a/include/mfreadwrite.idl b/include/mfreadwrite.idl
index 264712778f..9097b5a548 100644
--- a/include/mfreadwrite.idl
+++ b/include/mfreadwrite.idl
@@ -78,6 +78,8 @@ cpp_quote("EXTERN_GUID(MF_READWRITE_MMCSS_CLASS_AUDIO,          0x430847da, 0x08
 cpp_quote("EXTERN_GUID(MF_READWRITE_MMCSS_PRIORITY_AUDIO,       0x273db885, 0x2de2, 0x4db2, 0xa6, 0xa7, 0xfd, 0xb6, 0x6f, 0xb4, 0x0b, 0x61);")
 cpp_quote("EXTERN_GUID(MF_READWRITE_D3D_OPTIONAL,               0x216479d9, 0x3071, 0x42ca, 0xbb, 0x6c, 0x4c, 0x22, 0x10, 0x2e, 0x1d, 0x18);")
 
+cpp_quote("EXTERN_GUID(MF_SOURCE_READER_MEDIASOURCE_CHARACTERISTICS, 0x6d23f5c8, 0xc5d7, 0x4a9b, 0x99, 0x71, 0x5d, 0x11, 0xf8, 0xbc, 0xa8, 0x80);")
+
 interface IMFMediaSource;
 
 [
-- 
2.20.1




More information about the wine-devel mailing list