Nikolay Sivov : mfmediaengine: Duplicate configuration attributes.
Alexandre Julliard
julliard at winehq.org
Tue Jun 2 16:34:10 CDT 2020
Module: wine
Branch: master
Commit: 4bbb7b664934fff53add6141753d69c937bc2ce5
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4bbb7b664934fff53add6141753d69c937bc2ce5
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Tue Jun 2 12:35:13 2020 +0300
mfmediaengine: Duplicate configuration attributes.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfmediaengine/Makefile.in | 2 +-
dlls/mfmediaengine/main.c | 25 +++++++++++++++----------
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/dlls/mfmediaengine/Makefile.in b/dlls/mfmediaengine/Makefile.in
index 2278e87a64..cb593cb7ed 100644
--- a/dlls/mfmediaengine/Makefile.in
+++ b/dlls/mfmediaengine/Makefile.in
@@ -1,6 +1,6 @@
MODULE = mfmediaengine.dll
IMPORTLIB = mfmediaengine
-IMPORTS = mf mfuuid uuid
+IMPORTS = mfplat mf mfuuid uuid
EXTRADLLFLAGS = -mno-cygwin
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c
index 5ec179614d..d698b53c38 100644
--- a/dlls/mfmediaengine/main.c
+++ b/dlls/mfmediaengine/main.c
@@ -23,6 +23,7 @@
#include "windef.h"
#include "winbase.h"
+#include "mfapi.h"
#include "mfmediaengine.h"
#include "mferror.h"
#include "dxgi.h"
@@ -72,9 +73,7 @@ struct media_engine
IMFAsyncCallback session_events;
LONG refcount;
IMFMediaEngineNotify *callback;
- UINT64 playback_hwnd;
- DXGI_FORMAT output_format;
- IMFDXGIDeviceManager *dxgi_manager;
+ IMFAttributes *attributes;
enum media_engine_mode mode;
unsigned int flags;
double playback_rate;
@@ -192,10 +191,10 @@ static void free_media_engine(struct media_engine *engine)
{
if (engine->callback)
IMFMediaEngineNotify_Release(engine->callback);
- if (engine->dxgi_manager)
- IMFDXGIDeviceManager_Release(engine->dxgi_manager);
if (engine->session)
IMFMediaSession_Release(engine->session);
+ if (engine->attributes)
+ IMFAttributes_Release(engine->attributes);
DeleteCriticalSection(&engine->cs);
heap_free(engine);
}
@@ -750,6 +749,8 @@ static ULONG WINAPI media_engine_factory_Release(IMFMediaEngineClassFactory *ifa
static HRESULT init_media_engine(DWORD flags, IMFAttributes *attributes, struct media_engine *engine)
{
+ DXGI_FORMAT output_format;
+ UINT64 playback_hwnd;
HRESULT hr;
engine->IMFMediaEngine_iface.lpVtbl = &media_engine_vtbl;
@@ -772,11 +773,15 @@ static HRESULT init_media_engine(DWORD flags, IMFAttributes *attributes, struct
if (FAILED(hr = IMFMediaSession_BeginGetEvent(engine->session, &engine->session_events, NULL)))
return hr;
- IMFAttributes_GetUINT64(attributes, &MF_MEDIA_ENGINE_PLAYBACK_HWND, &engine->playback_hwnd);
- IMFAttributes_GetUnknown(attributes, &MF_MEDIA_ENGINE_DXGI_MANAGER, &IID_IMFDXGIDeviceManager,
- (void **)&engine->dxgi_manager);
- hr = IMFAttributes_GetUINT32(attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, &engine->output_format);
- if (engine->playback_hwnd) /* FIXME: handle MF_MEDIA_ENGINE_PLAYBACK_VISUAL */
+ if (FAILED(hr = MFCreateAttributes(&engine->attributes, 0)))
+ return hr;
+
+ if (FAILED(hr = IMFAttributes_CopyAllItems(attributes, engine->attributes)))
+ return hr;
+
+ IMFAttributes_GetUINT64(attributes, &MF_MEDIA_ENGINE_PLAYBACK_HWND, &playback_hwnd);
+ hr = IMFAttributes_GetUINT32(attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, &output_format);
+ if (playback_hwnd) /* FIXME: handle MF_MEDIA_ENGINE_PLAYBACK_VISUAL */
engine->mode = MEDIA_ENGINE_RENDERING_MODE;
else
{
More information about the wine-cvs
mailing list