[PATCH 6/9] mf: Pass start and flush messages to transform nodes.

Nikolay Sivov nsivov at codeweavers.com
Fri Mar 13 07:34:35 CDT 2020


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 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);
-- 
2.25.1




More information about the wine-devel mailing list