[PATCH v2 2/4] mf/tests: Check that the sample grabber generates stream sink events.

Giovanni Mascellani gmascellani at codeweavers.com
Fri May 28 02:50:47 CDT 2021


Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
 dlls/mf/tests/mf.c | 53 +++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 50 insertions(+), 3 deletions(-)

diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index c8c7e0569cc..da7e40c67fa 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -2725,17 +2725,17 @@ static ULONG WINAPI grabber_callback_Release(IMFSampleGrabberSinkCallback *iface
 
 static HRESULT WINAPI grabber_callback_OnClockStart(IMFSampleGrabberSinkCallback *iface, MFTIME time, LONGLONG offset)
 {
-    return E_NOTIMPL;
+    return S_OK;
 }
 
 static HRESULT WINAPI grabber_callback_OnClockStop(IMFSampleGrabberSinkCallback *iface, MFTIME time)
 {
-    return E_NOTIMPL;
+    return S_OK;
 }
 
 static HRESULT WINAPI grabber_callback_OnClockPause(IMFSampleGrabberSinkCallback *iface, MFTIME time)
 {
-    return E_NOTIMPL;
+    return S_OK;
 }
 
 static HRESULT WINAPI grabber_callback_OnClockRestart(IMFSampleGrabberSinkCallback *iface, MFTIME time)
@@ -2782,6 +2782,28 @@ static const IMFSampleGrabberSinkCallbackVtbl grabber_callback_vtbl =
 
 static IMFSampleGrabberSinkCallback grabber_callback = { &grabber_callback_vtbl };
 
+#define expect_event(s, m) expect_event_(__LINE__, s, m)
+static void expect_event_(int line, IMFStreamSink *stream, MediaEventType met)
+{
+    HRESULT hr, hr2;
+    IMFMediaEvent *event;
+    MediaEventType got_met;
+
+    hr = IMFStreamSink_GetEvent(stream, 0, &event);
+    ok_(__FILE__, line)(hr == S_OK, "Cannot get event, hr %#x.\n", hr);
+    ok_(__FILE__, line)(event != NULL, "Got NULL event.\n");
+
+    hr = IMFMediaEvent_GetStatus(event, &hr2);
+    ok_(__FILE__, line)(hr == S_OK, "Cannot get status, hr %#x.\n", hr);
+    ok_(__FILE__, line)(hr2 == S_OK, "Unexpected status, hr %#x.\n", hr2);
+
+    hr = IMFMediaEvent_GetType(event, &got_met);
+    ok_(__FILE__, line)(hr == S_OK, "Cannot get type, hr %#x.\n", hr);
+    ok_(__FILE__, line)(got_met == met, "Unexpected event type %d instead of %d.\n", got_met, met);
+
+    IMFMediaEvent_Release(event);
+}
+
 static void test_sample_grabber(void)
 {
     IMFMediaType *media_type, *media_type2, *media_type3;
@@ -2791,6 +2813,7 @@ static void test_sample_grabber(void)
     IMFStreamSink *stream, *stream2;
     IMFRateSupport *rate_support;
     IMFMediaEventGenerator *eg;
+    IMFClockStateSink *css;
     IMFMediaSink *sink, *sink2;
     DWORD flags, count, id;
     IMFActivate *activate;
@@ -2800,6 +2823,7 @@ static void test_sample_grabber(void)
     float rate;
     HRESULT hr;
     GUID guid;
+    int i;
 
     hr = MFStartup(MF_VERSION, MFSTARTUP_FULL);
     ok(hr == S_OK, "Failed to start up, hr %#x.\n", hr);
@@ -3080,6 +3104,29 @@ static void test_sample_grabber(void)
     hr = IMFStreamSink_GetEvent(stream, MF_EVENT_FLAG_NO_WAIT, &event);
     ok(hr == MF_E_NO_EVENTS_AVAILABLE, "Unexpected hr %#x.\n", hr);
 
+    hr = IMFMediaSink_QueryInterface(sink, &IID_IMFClockStateSink, (void **)&css);
+    ok(hr == S_OK, "Failed to get interface, hr %#x.\n", hr);
+
+    hr = IMFClockStateSink_OnClockStart(css, MFGetSystemTime(), 0);
+    ok(hr == S_OK, "Failed to start clock, hr %#x.\n", hr);
+
+    for (i = 0; i < 4; i++)
+        expect_event(stream, MEStreamSinkRequestSample);
+    expect_event(stream, MEStreamSinkStarted);
+
+    hr = IMFClockStateSink_OnClockPause(css, MFGetSystemTime());
+    ok(hr == S_OK, "Failed to pause clock, hr %#x.\n", hr);
+    if (strcmp(winetest_platform, "wine") != 0)
+        expect_event(stream, MEStreamSinkPaused);
+    else
+        todo_wine ok(0, "MEStreamSinkPaused event was not sent.\n");
+
+    hr = IMFClockStateSink_OnClockStop(css, MFGetSystemTime());
+    ok(hr == S_OK, "Failed to stop clock, hr %#x.\n", hr);
+    expect_event(stream, MEStreamSinkStopped);
+
+    IMFClockStateSink_Release(css);
+
     EXPECT_REF(clock, 3);
     hr = IMFMediaSink_Shutdown(sink);
     ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
-- 
2.32.0.rc0




More information about the wine-devel mailing list