mf/session: Shutdown and release presentation clock on session shutdown.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
b8e550a575
commit
b3461c4864
|
@ -1792,6 +1792,9 @@ static HRESULT WINAPI mfsession_Shutdown(IMFMediaSession *iface)
|
||||||
IMFMediaEventQueue_Shutdown(session->event_queue);
|
IMFMediaEventQueue_Shutdown(session->event_queue);
|
||||||
if (session->quality_manager)
|
if (session->quality_manager)
|
||||||
IMFQualityManager_Shutdown(session->quality_manager);
|
IMFQualityManager_Shutdown(session->quality_manager);
|
||||||
|
MFShutdownObject((IUnknown *)session->clock);
|
||||||
|
IMFPresentationClock_Release(session->clock);
|
||||||
|
session->clock = NULL;
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&session->cs);
|
LeaveCriticalSection(&session->cs);
|
||||||
|
|
||||||
|
|
|
@ -1188,13 +1188,14 @@ static void test_media_session(void)
|
||||||
IMFAttributes *attributes;
|
IMFAttributes *attributes;
|
||||||
IMFMediaSession *session;
|
IMFMediaSession *session;
|
||||||
IMFTopology *topology;
|
IMFTopology *topology;
|
||||||
|
IMFShutdown *shutdown;
|
||||||
PROPVARIANT propvar;
|
PROPVARIANT propvar;
|
||||||
|
DWORD status, caps;
|
||||||
IMFGetService *gs;
|
IMFGetService *gs;
|
||||||
IMFClock *clock;
|
IMFClock *clock;
|
||||||
IUnknown *unk;
|
IUnknown *unk;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
float rate;
|
float rate;
|
||||||
DWORD caps;
|
|
||||||
BOOL thin;
|
BOOL thin;
|
||||||
|
|
||||||
hr = MFStartup(MF_VERSION, MFSTARTUP_FULL);
|
hr = MFStartup(MF_VERSION, MFSTARTUP_FULL);
|
||||||
|
@ -1275,9 +1276,24 @@ todo_wine
|
||||||
hr = MFCreateMediaSession(NULL, &session);
|
hr = MFCreateMediaSession(NULL, &session);
|
||||||
ok(hr == S_OK, "Failed to create media session, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to create media session, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFMediaSession_GetClock(session, &clock);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFClock_QueryInterface(clock, &IID_IMFShutdown, (void **)&shutdown);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFShutdown_GetShutdownStatus(shutdown, &status);
|
||||||
|
ok(hr == MF_E_INVALIDREQUEST, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = IMFMediaSession_Shutdown(session);
|
hr = IMFMediaSession_Shutdown(session);
|
||||||
ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to shut down, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFShutdown_GetShutdownStatus(shutdown, &status);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(status == MFSHUTDOWN_COMPLETED, "Unexpected shutdown status %u.\n", status);
|
||||||
|
|
||||||
|
IMFShutdown_Release(shutdown);
|
||||||
|
|
||||||
hr = IMFMediaSession_ClearTopologies(session);
|
hr = IMFMediaSession_ClearTopologies(session);
|
||||||
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue