diff --git a/dlls/mf/samplegrabber.c b/dlls/mf/samplegrabber.c index 5e5b6ad6d0e..332b1a6e71d 100644 --- a/dlls/mf/samplegrabber.c +++ b/dlls/mf/samplegrabber.c @@ -1054,7 +1054,11 @@ static HRESULT WINAPI sample_grabber_sink_SetPresentationClock(IMFMediaSink *ifa EnterCriticalSection(&grabber->cs); - if (SUCCEEDED(hr = IMFSampleGrabberSinkCallback_OnSetPresentationClock(sample_grabber_get_callback(grabber), + if (grabber->is_shut_down) + { + hr = MF_E_SHUTDOWN; + } + else if (SUCCEEDED(hr = IMFSampleGrabberSinkCallback_OnSetPresentationClock(sample_grabber_get_callback(grabber), clock))) { sample_grabber_set_presentation_clock(grabber, clock); diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c index 8ec379be991..84f5e69ac25 100644 --- a/dlls/mf/tests/mf.c +++ b/dlls/mf/tests/mf.c @@ -4649,9 +4649,16 @@ static void test_sample_grabber(void) EXPECT_REF(clock, 3); hr = IMFMediaSink_Shutdown(sink); ok(hr == S_OK, "Failed to shut down, hr %#lx.\n", hr); + EXPECT_REF(clock, 1); + + hr = IMFMediaSink_SetPresentationClock(sink, NULL); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); + + hr = IMFMediaSink_SetPresentationClock(sink, clock); + ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); ref = IMFPresentationClock_Release(clock); - ok(ref == 0, "Release returned %ld\n", ref); + ok(!ref, "Unexpected refcount %ld.\n", ref); hr = IMFMediaEventGenerator_GetEvent(eg, MF_EVENT_FLAG_NO_WAIT, &event); ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#lx.\n", hr); @@ -4730,9 +4737,9 @@ static void test_sample_grabber(void) IMFStreamSink_Release(stream); ref = IMFActivate_Release(activate); - ok(ref == 0, "Release returned %ld\n", ref); + ok(!ref, "Unexpected refcount %ld.\n", ref); ref = IMFMediaSink_Release(sink); - ok(ref == 0, "Release returned %ld\n", ref); + ok(!ref, "Unexpected refcount %ld.\n", ref); /* Rateless mode with MF_SAMPLEGRABBERSINK_IGNORE_CLOCK. */ hr = MFCreateMediaType(&media_type);