Nikolay Sivov : mf/session: Notify quality manager when setting new topology.

Alexandre Julliard julliard at winehq.org
Wed Nov 11 15:31:43 CST 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed Nov 11 16:36:49 2020 +0300

mf/session: Notify quality manager when setting new topology.

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

---

 dlls/mf/session.c | 29 +++++++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/dlls/mf/session.c b/dlls/mf/session.c
index 0fa6b49498d..8d5ff6d5c07 100644
--- a/dlls/mf/session.c
+++ b/dlls/mf/session.c
@@ -42,7 +42,9 @@ enum session_command
     SESSION_CMD_START,
     SESSION_CMD_PAUSE,
     SESSION_CMD_STOP,
-    SESSION_CMD_END, /* Internal use only. */
+    /* Internally used commands. */
+    SESSION_CMD_END,
+    SESSION_CMD_QM_NOTIFY_TOPOLOGY,
 };
 
 struct session_op
@@ -62,6 +64,10 @@ struct session_op
             GUID time_format;
             PROPVARIANT start_position;
         } start;
+        struct
+        {
+            IMFTopology *topology;
+        } notify_topology;
     } u;
     struct list entry;
 };
@@ -492,6 +498,10 @@ static ULONG WINAPI session_op_Release(IUnknown *iface)
             case SESSION_CMD_START:
                 PropVariantClear(&op->u.start.start_position);
                 break;
+            case SESSION_CMD_QM_NOTIFY_TOPOLOGY:
+                if (op->u.notify_topology.topology)
+                    IMFTopology_Release(op->u.notify_topology.topology);
+                break;
             default:
                 ;
         }
@@ -1301,9 +1311,21 @@ static HRESULT session_set_current_topology(struct media_session *session, IMFTo
     DWORD caps, object_flags;
     struct media_sink *sink;
     struct topo_node *node;
+    struct session_op *op;
     IMFMediaEvent *event;
     HRESULT hr;
 
+    if (session->quality_manager)
+    {
+        if (SUCCEEDED(create_session_op(SESSION_CMD_QM_NOTIFY_TOPOLOGY, &op)))
+        {
+            op->u.notify_topology.topology = topology;
+            IMFTopology_AddRef(op->u.notify_topology.topology);
+            session_submit_command(session, op);
+            IUnknown_Release(&op->IUnknown_iface);
+        }
+    }
+
     if (FAILED(hr = IMFTopology_CloneFrom(session->presentation.current_topology, topology)))
     {
         WARN("Failed to clone topology, hr %#x.\n", hr);
@@ -1929,6 +1951,9 @@ static HRESULT WINAPI session_commands_callback_Invoke(IMFAsyncCallback *iface,
         case SESSION_CMD_CLOSE:
             session_close(session);
             break;
+        case SESSION_CMD_QM_NOTIFY_TOPOLOGY:
+            IMFQualityManager_NotifyTopology(session->quality_manager, op->u.notify_topology.topology);
+            break;
         default:
             ;
     }
@@ -4481,7 +4506,7 @@ static HRESULT WINAPI standard_quality_manager_NotifyTopology(IMFQualityManager
 {
     FIXME("%p, %p stub.\n", iface, topology);
 
-    return E_NOTIMPL;
+    return S_OK;
 }
 
 static HRESULT WINAPI standard_quality_manager_NotifyPresentationClock(IMFQualityManager *iface,




More information about the wine-cvs mailing list