Nikolay Sivov : mfplat: Give priority to local bytestream handlers.

Alexandre Julliard julliard at winehq.org
Tue Jun 11 16:54:07 CDT 2019


Module: wine
Branch: master
Commit: 1cc06fb257fb7728604c826a753239b2085845b7
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1cc06fb257fb7728604c826a753239b2085845b7

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Jun 11 15:40:03 2019 +0300

mfplat: Give priority to local bytestream handlers.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mfplat/main.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index c24407f..78ae417 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -5031,9 +5031,9 @@ static HRESULT resolver_get_bytestream_handler(IMFByteStream *stream, const WCHA
     IMFAttributes *attributes;
     const WCHAR *url_ext;
     WCHAR *mimeW = NULL;
+    HRESULT hr = E_FAIL;
     unsigned int i, j;
     UINT32 length;
-    HRESULT hr;
 
     *handler = NULL;
 
@@ -5053,7 +5053,28 @@ static HRESULT resolver_get_bytestream_handler(IMFByteStream *stream, const WCHA
         return MF_E_UNSUPPORTED_BYTESTREAM_TYPE;
     }
 
-    /* FIXME: check local handlers first */
+    if (!(flags & MF_RESOLUTION_DISABLE_LOCAL_PLUGINS))
+    {
+        struct local_handler *local_handler;
+
+        EnterCriticalSection(&local_handlers_section);
+
+        LIST_FOR_EACH_ENTRY(local_handler, &local_bytestream_handlers, struct local_handler, entry)
+        {
+            if ((mimeW && !lstrcmpiW(mimeW, local_handler->u.bytestream.mime))
+                    || (url_ext && !lstrcmpiW(url_ext, local_handler->u.bytestream.extension)))
+            {
+                if (SUCCEEDED(hr = IMFActivate_ActivateObject(local_handler->activate, &IID_IMFByteStreamHandler,
+                        (void **)handler)))
+                    break;
+            }
+        }
+
+        LeaveCriticalSection(&local_handlers_section);
+
+        if (*handler)
+            return hr;
+    }
 
     for (i = 0, hr = E_FAIL; i < ARRAY_SIZE(hkey_roots); ++i)
     {




More information about the wine-cvs mailing list