From: Charlotte Pabst cpabst@codeweavers.com
Before this, stopping and restarting the media session could cause MFT streams to get stuck in the "already pending" state, which would lead to no more samples getting delivered. --- dlls/mf/session.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 483ea6f904f..a9213d2cf18 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -1014,8 +1014,13 @@ static void session_flush_nodes(struct media_session *session) { if (node->type == MF_TOPOLOGY_OUTPUT_NODE) IMFStreamSink_Flush(node->object.sink_stream); - else if (node->type == MF_TOPOLOGY_TRANSFORM_NODE) + else if (node->type == MF_TOPOLOGY_TRANSFORM_NODE) { + UINT i; + for (i = 0; i < node->u.transform.output_count; i++) + node->u.transform.outputs[i].requests = 0; + IMFTransform_ProcessMessage(node->object.transform, MFT_MESSAGE_COMMAND_FLUSH, 0); + } } }