-- v2: winegstreamer: Return S_FALSE from DMO when there is not enough data.
From: Yuxuan Shui yshui@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);
From: Yuxuan Shui yshui@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; }
This merge request was approved by Rémi Bernon.
This merge request was approved by Nikolay Sivov.