Module: wine Branch: master Commit: 9070f0d572e36645f5e5764ef40472f158513d48 URL: https://gitlab.winehq.org/wine/wine/-/commit/9070f0d572e36645f5e5764ef40472f...
Author: Paul Gofman pgofman@codeweavers.com Date: Tue Jan 24 17:52:14 2023 -0600
mf/session: Avoid dropping samples delivered from transform in session_request_sample_from_node().
session_request_sample() calls session_request_sample_from_node() and increments sink.requests only if that succeeds. But session_request_sample_from_node() calls session_deliver_sample_to_node() synchronously for MF_TOPOLOGY_TRANSFORM_NODE if there are output samples available. Then, if sink.requests is zero before this session_request_sample() call that sample is silently dropped.
---
dlls/mf/session.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index b2371763150..85baf07d05a 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -3388,8 +3388,9 @@ static void session_request_sample(struct media_session *session, IMFStreamSink return; }
- if (SUCCEEDED(session_request_sample_from_node(session, upstream_node, upstream_output))) - sink_node->u.sink.requests++; + sink_node->u.sink.requests++; + if (FAILED(session_request_sample_from_node(session, upstream_node, upstream_output))) + sink_node->u.sink.requests--; IMFTopologyNode_Release(upstream_node); }