Nikolay Sivov (@nsivov) commented about dlls/mf/session.c:
+ +static void session_request_sample(struct media_session *session, IMFStreamSink *sink_stream); + +static void session_restart_sinks(struct media_session *session) +{ + struct topo_node *node; + + LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry) + { + if (node->type == MF_TOPOLOGY_OUTPUT_NODE) + { + session_request_sample(session, node->object.sink_stream); + IMFStreamSink_Flush(node->object.sink_stream); + } + } +} This doesn't look right. Why would we pretend that sink requested anything? I don't see why this would be necessary or different comparing to a regular start sequence.
Also, helpers names are not great, restart is associated with a clock state. Those are more like flush+drop downstream requests. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7932#note_102425