[PATCH 0/1] MR10974: mfreadwrite: Do not return NEED_MORE_INPUT from source_reader_push_transform_samples().
MF_E_TRANSFORM_NEED_MORE_INPUT is only relevant when pulling samples. Fixes an issue where only one sample can be drained from a decoder in source_reader_pull_transform_samples() if another transform is present downstream. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10974
From: Conor McCarthy <cmccarthy@codeweavers.com> MF_E_TRANSFORM_NEED_MORE_INPUT is only relevant when pulling samples. Fixes an issue where only one sample can be drained from a decoder in source_reader_pull_transform_samples() if another transform is present downstream. --- dlls/mfreadwrite/reader.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index 68b90357928..c9959526b88 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -767,7 +767,10 @@ static HRESULT source_reader_push_transform_samples(struct source_reader *reader && hr != MF_E_TRANSFORM_NEED_MORE_INPUT) return hr; if (SUCCEEDED(hr = IMFTransform_ProcessInput(entry->transform, 0, sample, 0))) - return source_reader_pull_transform_samples(reader, stream, entry); + { + hr = source_reader_pull_transform_samples(reader, stream, entry); + return hr == MF_E_TRANSFORM_NEED_MORE_INPUT ? S_OK : hr; + } } while (hr == MF_E_NOTACCEPTING); @@ -998,8 +1001,7 @@ static HRESULT source_reader_process_sample(struct source_reader *reader, struct entry = LIST_ENTRY(ptr, struct transform_entry, entry); /* It's assumed that decoder has 1 input and 1 output, both id's are 0. */ - if (SUCCEEDED(hr = source_reader_push_transform_samples(reader, stream, entry, sample)) - || hr == MF_E_TRANSFORM_NEED_MORE_INPUT) + if (SUCCEEDED(hr = source_reader_push_transform_samples(reader, stream, entry, sample))) hr = stream->requests ? source_reader_request_sample(reader, stream) : S_OK; else WARN("Transform failed to process output, hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10974
I'm guessing this is difficult to test reliably? -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10974#note_143604
On Mon Jun 29 13:17:30 2026 +0000, Nikolay Sivov wrote:
I'm guessing this is difficult to test reliably? It very much depends on the compressed stream and decoder, yes. It will not happen unless the decoder requests enough input for multiple output samples before it outputs anything.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/10974#note_144425
It's difficult for me to tell what's happening, without digging back into it. I'll trust this was tested, and we'll watch out for possible regressions. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10974#note_148237
This merge request was approved by Nikolay Sivov. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/10974
participants (3)
-
Conor McCarthy -
Conor McCarthy (@cmccarthy) -
Nikolay Sivov (@nsivov)