Nikolay Sivov : mf: Pass start and flush messages to transform nodes.

Alexandre Julliard julliard at winehq.org
Fri Mar 13 15:24:44 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Mar 13 15:34:35 2020 +0300

mf: Pass start and flush messages to transform nodes.

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

---

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

diff --git a/dlls/mf/session.c b/dlls/mf/session.c
index e1e7753a1c..64988579f4 100644
--- a/dlls/mf/session.c
+++ b/dlls/mf/session.c
@@ -1827,6 +1827,12 @@ static HRESULT session_start_clock(struct media_session *session)
     struct topo_node *node;
     HRESULT hr;
 
+    LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry)
+    {
+        if (node->type == MF_TOPOLOGY_TRANSFORM_NODE)
+            IMFTransform_ProcessMessage(node->object.transform, MFT_MESSAGE_NOTIFY_START_OF_STREAM, 0);
+    }
+
     if (!(session->presentation.flags & SESSION_FLAG_SINKS_SUBSCRIBED))
     {
         LIST_FOR_EACH_ENTRY(sink, &session->presentation.sinks, struct media_sink, entry)
@@ -1968,8 +1974,17 @@ static void session_set_source_object_state(struct media_session *session, IUnkn
 
             LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry)
             {
-                if (node->type == MF_TOPOLOGY_OUTPUT_NODE)
-                    IMFStreamSink_Flush(node->object.sink_stream);
+                switch (node->type)
+                {
+                    case MF_TOPOLOGY_OUTPUT_NODE:
+                        IMFStreamSink_Flush(node->object.sink_stream);
+                        break;
+                    case MF_TOPOLOGY_TRANSFORM_NODE:
+                        IMFTransform_ProcessMessage(node->object.transform, MFT_MESSAGE_COMMAND_FLUSH, 0);
+                        break;
+                    default:
+                        ;
+                }
             }
 
             session_set_caps(session, session->caps & ~MFSESSIONCAP_PAUSE);




More information about the wine-cvs mailing list