[PATCH v2 0/2] MR9538: winegstreamer: Return S_FALSE from DMO when there is not enough data.
-- v2: winegstreamer: Return S_FALSE from DMO when there is not enough data. https://gitlab.winehq.org/wine/wine/-/merge_requests/9538
From: Yuxuan Shui <yshui(a)codeweavers.com> --- dlls/mf/tests/transform.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index e6ff4a0836d..1ee5a8bc4ac 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -8355,6 +8355,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_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); + todo_wine ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); + hr = IMediaObject_AllocateStreamingResources(media_object); ok(hr == S_OK, "Got hr %#lx.\n", hr); hr = IMediaObject_FreeStreamingResources(media_object); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9538
From: Yuxuan Shui <yshui(a)codeweavers.com> --- dlls/mf/tests/transform.c | 3 +-- dlls/winegstreamer/video_decoder.c | 2 ++ dlls/winegstreamer/wma_decoder.c | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 1ee5a8bc4ac..e5c65ace228 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -8328,7 +8328,6 @@ 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); - todo_wine ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); ok(output_media_buffer->length == 0, "Unexpected length %#lx.\n", output_media_buffer->length); @@ -8361,7 +8360,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); - todo_wine ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); + ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); hr = IMediaObject_AllocateStreamingResources(media_object); ok(hr == S_OK, "Got hr %#lx.\n", hr); diff --git a/dlls/winegstreamer/video_decoder.c b/dlls/winegstreamer/video_decoder.c index becf148aeef..be540876aa0 100644 --- a/dlls/winegstreamer/video_decoder.c +++ b/dlls/winegstreamer/video_decoder.c @@ -1469,6 +1469,8 @@ 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) + hr = S_FALSE; return hr; } diff --git a/dlls/winegstreamer/wma_decoder.c b/dlls/winegstreamer/wma_decoder.c index ca7a5f278bf..ddb77724db5 100644 --- a/dlls/winegstreamer/wma_decoder.c +++ b/dlls/winegstreamer/wma_decoder.c @@ -964,6 +964,9 @@ static HRESULT WINAPI media_object_ProcessOutput(IMediaObject *iface, DWORD flag buffers[0].dwStatus |= DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE; wg_sample_queue_flush(decoder->wg_sample_queue, false); } + else if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) + hr = S_FALSE; + return hr; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9538
This merge request was approved by Rémi Bernon. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9538
This merge request was approved by Nikolay Sivov. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9538
participants (4)
-
Nikolay Sivov (@nsivov) -
Rémi Bernon -
Yuxuan Shui -
Yuxuan Shui (@yshui)