From b20c478bfd1322cf658105ce5695f5447288799f Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 17 May 2021 12:26:49 +0300 Subject: [PATCH] mfmediaengine: Keep device manager reference. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/mfmediaengine/main.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c index 0678768cf08..489cb2cdc6a 100644 --- a/dlls/mfmediaengine/main.c +++ b/dlls/mfmediaengine/main.c @@ -93,6 +93,8 @@ struct media_engine LONG refcount; IMFMediaEngineNotify *callback; IMFAttributes *attributes; + IMFDXGIDeviceManager *device_manager; + HANDLE device_handle; enum media_engine_mode mode; unsigned int flags; double playback_rate; @@ -974,6 +976,11 @@ static void free_media_engine(struct media_engine *engine) IMFAttributes_Release(engine->attributes); if (engine->resolver) IMFSourceResolver_Release(engine->resolver); + if (engine->device_manager) + { + IMFDXGIDeviceManager_CloseDeviceHandle(engine->device_manager, engine->device_handle); + IMFDXGIDeviceManager_Release(engine->device_manager); + } SysFreeString(engine->current_source); DeleteCriticalSection(&engine->cs); free(engine->video_frame.buffer); @@ -1878,6 +1885,9 @@ static HRESULT init_media_engine(DWORD flags, IMFAttributes *attributes, struct if (FAILED(hr)) return hr; + IMFAttributes_GetUnknown(attributes, &MF_MEDIA_ENGINE_DXGI_MANAGER, &IID_IMFDXGIDeviceManager, + (void **)&engine->device_manager); + if (FAILED(hr = MFCreateMediaSession(NULL, &engine->session))) return hr; -- 2.11.4.GIT