[PATCH v2 0/1] MR9670: winegstreamer: Fix buffer info when returning S_FALSE from ProcessOutput.
In commit 300079ac1a666fa526e7f53bbd096f313c221f5f I made ProcessOutput return S_FALSE instead of MF_E_TRANSFORM_NEED_MORE_INPUT. But since we are no longer returning an error, we need to make sure the DMO_OUTPUT_DATA_BUFFER structure is filled in properly, previously it was left undefined. Related to !9538 -- v2: winegstreamer: Fix buffer info when returning S_FALSE from ProcessOutput. https://gitlab.winehq.org/wine/wine/-/merge_requests/9670
From: Yuxuan Shui <yshui@codeweavers.com> In commit 300079ac1a666fa526e7f53bbd096f313c221f5f I made ProcessOutput return S_FALSE instead of MF_E_TRANSFORM_NEED_MORE_INPUT. But since we are no longer returning an error, we need to make sure the DMO_OUTPUT_DATA_BUFFER structure is filled in properly, previously it was left undefined. --- dlls/mf/tests/transform.c | 9 ++++++--- dlls/winegstreamer/video_decoder.c | 3 +++ dlls/winegstreamer/wma_decoder.c | 3 +++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index c680781cd91..591e1f99678 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -8372,14 +8372,15 @@ static void test_wmv_decoder_media_object(void) ok(hr == S_OK, "Flush returned %#lx.\n", hr); hr = IMediaObject_Flush(media_object); ok(hr == S_OK, "Flush returned %#lx.\n", hr); - output_media_buffer->length = 0; + output_media_buffer->length = 100; output_data_buffer.pBuffer = &output_media_buffer->IMediaBuffer_iface; output_data_buffer.dwStatus = 0xdeadbeef; output_data_buffer.rtTimestamp = 0xdeadbeef; output_data_buffer.rtTimelength = 0xdeadbeef; hr = IMediaObject_ProcessOutput(media_object, 0, 1, &output_data_buffer, &status); ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); - ok(output_media_buffer->length == 0, "Unexpected length %#lx.\n", output_media_buffer->length); + ok(output_data_buffer.dwStatus == 0, "Unexpected dwStatus %#lx.\n", output_data_buffer.dwStatus); + ok(output_media_buffer->length == 100, "Unexpected length %#lx.\n", output_media_buffer->length); /* Test ProcessOutput with setting framerate. */ init_dmo_media_type_video(type, &MEDIASUBTYPE_WMV1, data_width, data_height, 100000); @@ -8404,12 +8405,14 @@ static void test_wmv_decoder_media_object(void) diff = check_dmo_output_data_buffer(&output_data_buffer, &output_buffer_desc_nv12, L"nv12frame.bmp", 0, 300000); ok(diff == 0, "Got %lu%% diff.\n", diff); - output_media_buffer->length = 0; + output_media_buffer->length = 100; output_data_buffer.pBuffer = &output_media_buffer->IMediaBuffer_iface; output_data_buffer.dwStatus = 0xdeadbeef; output_data_buffer.rtTimestamp = 0xdeadbeef; output_data_buffer.rtTimelength = 0xdeadbeef; hr = IMediaObject_ProcessOutput(media_object, 0, 1, &output_data_buffer, &status); + ok(output_data_buffer.dwStatus == 0, "Unexpected dwStatus %#lx.\n", output_data_buffer.dwStatus); + ok(output_media_buffer->length == 100, "Unexpected length %#lx.\n", output_media_buffer->length); ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); hr = IMediaObject_AllocateStreamingResources(media_object); diff --git a/dlls/winegstreamer/video_decoder.c b/dlls/winegstreamer/video_decoder.c index a0b738b49d6..02eedcdad3f 100644 --- a/dlls/winegstreamer/video_decoder.c +++ b/dlls/winegstreamer/video_decoder.c @@ -1484,7 +1484,10 @@ static HRESULT WINAPI media_object_ProcessOutput(IMediaObject *iface, DWORD flag if (SUCCEEDED(hr)) wg_sample_queue_flush(decoder->wg_sample_queue, false); else if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) + { + buffers[0].dwStatus = 0; hr = S_FALSE; + } return hr; } diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 4aa90b85c6b..e653a8a13ee 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -967,7 +967,10 @@ static HRESULT WINAPI media_object_ProcessOutput(IMediaObject *iface, DWORD flag wg_sample_queue_flush(decoder->wg_sample_queue, false); } else if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) + { + buffers[0].dwStatus = 0; hr = S_FALSE; + } return hr; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9670
On Tue Dec 9 18:11:51 2025 +0000, Yuxuan Shui wrote:
changed this line in [version 2 of the diff](/wine/wine/-/merge_requests/9670/diffs?diff_id=231157&start_sha=e4e1f1a26c6008a43807fd82539a21743c74a8f4#bd62eaa50df6790a4fd6a511972092cad3bb6fa1_1477_1489) good point. they are actually unchanged. i updated the tests.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/9670#note_125300
This merge request was approved by Rémi Bernon. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9670
participants (3)
-
Rémi Bernon (@rbernon) -
Yuxuan Shui -
Yuxuan Shui (@yshui)