Module: wine Branch: master Commit: 8e3f316cc9fb7bb9a384986b19b6978ed671b6aa URL: https://gitlab.winehq.org/wine/wine/-/commit/8e3f316cc9fb7bb9a384986b19b6978...
Author: Ziqing Hui zhui@codeweavers.com Date: Wed Jun 14 10:20:39 2023 +0800
winegstreamer: Implement Flush for WMV decoder DMO.
---
dlls/mf/tests/transform.c | 3 --- dlls/winegstreamer/wmv_decoder.c | 13 +++++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 1eb0fd2c719..9ba1dfc9660 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -6392,10 +6392,8 @@ static void test_wmv_decoder_media_object(void) hr = IMediaObject_ProcessInput(media_object, 0, &input_media_buffer->IMediaBuffer_iface, 0, 0, 0); ok(hr == S_OK, "ProcessInput returned %#lx.\n", hr); hr = IMediaObject_Flush(media_object); - todo_wine ok(hr == S_OK, "Flush returned %#lx.\n", hr); hr = IMediaObject_Flush(media_object); - todo_wine ok(hr == S_OK, "Flush returned %#lx.\n", hr); output_media_buffer->length = 0; output_data_buffer.pBuffer = &output_media_buffer->IMediaBuffer_iface; @@ -6405,7 +6403,6 @@ static void test_wmv_decoder_media_object(void) hr = IMediaObject_ProcessOutput(media_object, 0, 1, &output_data_buffer, &status); todo_wine ok(hr == S_FALSE, "ProcessOutput returned %#lx.\n", hr); - todo_wine ok(output_media_buffer->length == 0, "Unexpected length %#lx.\n", output_media_buffer->length);
/* Test ProcessOutput with setting framerate. */ diff --git a/dlls/winegstreamer/wmv_decoder.c b/dlls/winegstreamer/wmv_decoder.c index 32dbbbbe686..d6c95cbd526 100644 --- a/dlls/winegstreamer/wmv_decoder.c +++ b/dlls/winegstreamer/wmv_decoder.c @@ -657,8 +657,17 @@ static HRESULT WINAPI media_object_SetInputMaxLatency(IMediaObject *iface, DWORD
static HRESULT WINAPI media_object_Flush(IMediaObject *iface) { - FIXME("iface %p stub!\n", iface); - return E_NOTIMPL; + struct wmv_decoder *decoder = impl_from_IMediaObject(iface); + HRESULT hr; + + TRACE("iface %p.\n", iface); + + if (FAILED(hr = wg_transform_flush(decoder->wg_transform))) + return hr; + + wg_sample_queue_flush(decoder->wg_sample_queue, TRUE); + + return S_OK; }
static HRESULT WINAPI media_object_Discontinuity(IMediaObject *iface, DWORD index)