From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index def0170e106..66236401db4 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -5546,6 +5546,27 @@ 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, 0); ok(diff == 0, "Got %lu%% diff.\n", diff);
+ /* Test GetInputStatus. */ + hr = IMediaObject_GetInputStatus(media_object, 0xdeadbeef, NULL); + todo_wine + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputStatus returned %#lx.\n", hr); + + status = 0xdeadbeef; + hr = IMediaObject_GetInputStatus(media_object, 0xdeadbeef, &status); + todo_wine + ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputStatus returned %#lx.\n", hr); + ok(status == 0xdeadbeef, "Unexpected status %#lx.\n", status); + + hr = IMediaObject_GetInputStatus(media_object, 0, NULL); + todo_wine + ok(hr == E_POINTER, "GetInputStatus returned %#lx.\n", hr); + + hr = IMediaObject_GetInputStatus(media_object, 0, &status); + todo_wine + ok(hr == S_OK, "GetInputStatus returned %#lx.\n", hr); + todo_wine + ok(status == DMO_INPUT_STATUSF_ACCEPT_DATA, "Unexpected status %#lx.\n", status); + /* Test ProcessOutput with setting framerate. */ init_dmo_media_type_video(type, &MEDIASUBTYPE_WMV1, data_width, data_height); ((VIDEOINFOHEADER *)type->pbFormat)->AvgTimePerFrame = 100000;
From: Ziqing Hui zhui@codeweavers.com
The tests show that input status is not affected by it. --- dlls/mf/tests/transform.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 66236401db4..e808a42c10e 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -5567,6 +5567,22 @@ static void test_wmv_decoder_media_object(void) todo_wine ok(status == DMO_INPUT_STATUSF_ACCEPT_DATA, "Unexpected status %#lx.\n", status);
+ /* Test Discontinuity. */ + hr = IMediaObject_Discontinuity(media_object, 0xdeadbeef); + todo_wine + ok(hr == DMO_E_INVALIDSTREAMINDEX, "Discontinuity returned %#lx.\n", hr); + hr = IMediaObject_Discontinuity(media_object, 0); + todo_wine + ok(hr == S_OK, "Discontinuity returned %#lx.\n", hr); + hr = IMediaObject_Discontinuity(media_object, 0); + todo_wine + ok(hr == S_OK, "Discontinuity returned %#lx.\n", hr); + hr = IMediaObject_GetInputStatus(media_object, 0, &status); + todo_wine + ok(hr == S_OK, "GetInputStatus returned %#lx.\n", hr); + todo_wine + ok(status == DMO_INPUT_STATUSF_ACCEPT_DATA, "Unexpected status %#lx.\n", status); + /* Test ProcessOutput with setting framerate. */ init_dmo_media_type_video(type, &MEDIASUBTYPE_WMV1, data_width, data_height); ((VIDEOINFOHEADER *)type->pbFormat)->AvgTimePerFrame = 100000;
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index e808a42c10e..fc04e673562 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -5583,6 +5583,26 @@ static void test_wmv_decoder_media_object(void) todo_wine ok(status == DMO_INPUT_STATUSF_ACCEPT_DATA, "Unexpected status %#lx.\n", status);
+ /* Test Flush. */ + 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; + 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); + todo_wine + ok(output_media_buffer->length == 0, "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); ((VIDEOINFOHEADER *)type->pbFormat)->AvgTimePerFrame = 100000;
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 7 ------- dlls/winegstreamer/wmv_decoder.c | 12 ++++++++++-- 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index fc04e673562..7ae7fe3d3ac 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -5548,23 +5548,18 @@ static void test_wmv_decoder_media_object(void)
/* Test GetInputStatus. */ hr = IMediaObject_GetInputStatus(media_object, 0xdeadbeef, NULL); - todo_wine ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputStatus returned %#lx.\n", hr);
status = 0xdeadbeef; hr = IMediaObject_GetInputStatus(media_object, 0xdeadbeef, &status); - todo_wine ok(hr == DMO_E_INVALIDSTREAMINDEX, "GetInputStatus returned %#lx.\n", hr); ok(status == 0xdeadbeef, "Unexpected status %#lx.\n", status);
hr = IMediaObject_GetInputStatus(media_object, 0, NULL); - todo_wine ok(hr == E_POINTER, "GetInputStatus returned %#lx.\n", hr);
hr = IMediaObject_GetInputStatus(media_object, 0, &status); - todo_wine ok(hr == S_OK, "GetInputStatus returned %#lx.\n", hr); - todo_wine ok(status == DMO_INPUT_STATUSF_ACCEPT_DATA, "Unexpected status %#lx.\n", status);
/* Test Discontinuity. */ @@ -5578,9 +5573,7 @@ static void test_wmv_decoder_media_object(void) todo_wine ok(hr == S_OK, "Discontinuity returned %#lx.\n", hr); hr = IMediaObject_GetInputStatus(media_object, 0, &status); - todo_wine ok(hr == S_OK, "GetInputStatus returned %#lx.\n", hr); - todo_wine ok(status == DMO_INPUT_STATUSF_ACCEPT_DATA, "Unexpected status %#lx.\n", status);
/* Test Flush. */ diff --git a/dlls/winegstreamer/wmv_decoder.c b/dlls/winegstreamer/wmv_decoder.c index 82c69776bd6..75a7068a432 100644 --- a/dlls/winegstreamer/wmv_decoder.c +++ b/dlls/winegstreamer/wmv_decoder.c @@ -680,8 +680,16 @@ static HRESULT WINAPI media_object_FreeStreamingResources(IMediaObject *iface)
static HRESULT WINAPI media_object_GetInputStatus(IMediaObject *iface, DWORD index, DWORD *flags) { - FIXME("iface %p, index %lu, flags %p stub!\n", iface, index, flags); - return E_NOTIMPL; + TRACE("iface %p, index %lu, flags %p.\n", iface, index, flags); + + if (index > 0) + return DMO_E_INVALIDSTREAMINDEX; + if (!flags) + return E_POINTER; + + *flags = DMO_INPUT_STATUSF_ACCEPT_DATA; + + return S_OK; }
static HRESULT WINAPI media_object_ProcessInput(IMediaObject *iface, DWORD index,
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/transform.c | 3 --- dlls/winegstreamer/wmv_decoder.c | 8 ++++++-- 2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 7ae7fe3d3ac..b2e0abc40fd 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -5564,13 +5564,10 @@ static void test_wmv_decoder_media_object(void)
/* Test Discontinuity. */ hr = IMediaObject_Discontinuity(media_object, 0xdeadbeef); - todo_wine ok(hr == DMO_E_INVALIDSTREAMINDEX, "Discontinuity returned %#lx.\n", hr); hr = IMediaObject_Discontinuity(media_object, 0); - todo_wine ok(hr == S_OK, "Discontinuity returned %#lx.\n", hr); hr = IMediaObject_Discontinuity(media_object, 0); - todo_wine ok(hr == S_OK, "Discontinuity returned %#lx.\n", hr); hr = IMediaObject_GetInputStatus(media_object, 0, &status); ok(hr == S_OK, "GetInputStatus returned %#lx.\n", hr); diff --git a/dlls/winegstreamer/wmv_decoder.c b/dlls/winegstreamer/wmv_decoder.c index 75a7068a432..a22de7ccb7f 100644 --- a/dlls/winegstreamer/wmv_decoder.c +++ b/dlls/winegstreamer/wmv_decoder.c @@ -662,8 +662,12 @@ static HRESULT WINAPI media_object_Flush(IMediaObject *iface)
static HRESULT WINAPI media_object_Discontinuity(IMediaObject *iface, DWORD index) { - FIXME("iface %p, index %lu stub!\n", iface, index); - return E_NOTIMPL; + TRACE("iface %p, index %lu.\n", iface, index); + + if (index > 0) + return DMO_E_INVALIDSTREAMINDEX; + + return S_OK; }
static HRESULT WINAPI media_object_AllocateStreamingResources(IMediaObject *iface)
This merge request was approved by Rémi Bernon.
Zebediah Figura (@zfigura) commented about dlls/winegstreamer/wmv_decoder.c:
static HRESULT WINAPI media_object_GetInputStatus(IMediaObject *iface, DWORD index, DWORD *flags) {
- FIXME("iface %p, index %lu, flags %p stub!\n", iface, index, flags);
- return E_NOTIMPL;
- TRACE("iface %p, index %lu, flags %p.\n", iface, index, flags);
- if (index > 0)
return DMO_E_INVALIDSTREAMINDEX;
- if (!flags)
return E_POINTER;
- *flags = DMO_INPUT_STATUSF_ACCEPT_DATA;
- return S_OK;
This isn't consistent with the actual ProcessInput() implementation, which refuses to accept more than one buffer.
(Also, not sure why I was removed as reviewer?)