[PATCH 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 -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9670
From: Yuxuan Shui <yshui(a)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 | 2 ++ dlls/winegstreamer/video_decoder.c | 4 ++++ dlls/winegstreamer/wma_decoder.c | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index e5c65ace228..1847a4fa6a9 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -8329,6 +8329,7 @@ static void test_wmv_decoder_media_object(void) 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_data_buffer.dwStatus == 0, "Unexpected dwStatus %#lx.\n", output_data_buffer.dwStatus); ok(output_media_buffer->length == 0, "Unexpected length %#lx.\n", output_media_buffer->length); /* Test ProcessOutput with setting framerate. */ @@ -8360,6 +8361,7 @@ static void test_wmv_decoder_media_object(void) 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(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 f2bef5ee959..6916b64e31f 100644 --- a/dlls/winegstreamer/video_decoder.c +++ b/dlls/winegstreamer/video_decoder.c @@ -1472,7 +1472,11 @@ 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; + IMediaBuffer_SetLength(buffers[0].pBuffer, 0); hr = S_FALSE; + } return hr; } diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index 951a50f7164..954d4865fbe 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -968,7 +968,11 @@ 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; + IMediaBuffer_SetLength(buffers[0].pBuffer, 0); hr = S_FALSE; + } return hr; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9670
Nikolay Sivov (@nsivov) commented about dlls/winegstreamer/video_decoder.c:
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; + IMediaBuffer_SetLength(buffers[0].pBuffer, 0);
Do we test the length value somewhere? -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9670#note_124861
participants (3)
-
Nikolay Sivov (@nsivov) -
Yuxuan Shui -
Yuxuan Shui (@yshui)