Nikolay Sivov : mfmediaengine: Keep device manager reference.
Alexandre Julliard
julliard at winehq.org
Mon May 17 15:45:30 CDT 2021
Module: wine
Branch: master
Commit: b20c478bfd1322cf658105ce5695f5447288799f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=b20c478bfd1322cf658105ce5695f5447288799f
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon May 17 12:26:49 2021 +0300
mfmediaengine: Keep device manager reference.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
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;
More information about the wine-cvs
mailing list