From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mf/session.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index e6e3792db7e..586be71a95c 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -3251,10 +3251,12 @@ static void session_deliver_sample_to_node(struct media_session *session, IMFTop struct transform_stream *input_stream = &topo_node->u.transform.inputs[input]; transform_stream_push_sample(input_stream, sample, FALSE);
- transform_node_pull_samples(session, topo_node); - hr = transform_node_push_samples(session, topo_node); - - transform_node_pull_samples(session, topo_node); + do + { + hr = transform_node_pull_samples(session, topo_node); + if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) + hr = transform_node_push_samples(session, topo_node); + } while (SUCCEEDED(hr));
/* Remaining unprocessed input has been discarded, now queue markers for every output. */ if (hr == MF_E_END_OF_STREAM)