evr/sample: Implement SetDirectXManager().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2020-10-22 14:29:02 +03:00 committed by Alexandre Julliard
parent 529eb28488
commit a6512b32ef
1 changed files with 25 additions and 2 deletions

View File

@ -21,6 +21,8 @@
#include "evr.h"
#include "mfapi.h"
#include "mferror.h"
#include "d3d9.h"
#include "dxva2api.h"
#include "wine/debug.h"
#include "wine/heap.h"
@ -108,6 +110,7 @@ struct sample_allocator
IMFVideoSampleAllocatorNotify *callback;
unsigned int free_samples;
IDirect3DDeviceManager9 *device_manager;
CRITICAL_SECTION cs;
};
@ -168,6 +171,8 @@ static ULONG WINAPI sample_allocator_Release(IMFVideoSampleAllocator *iface)
{
if (allocator->callback)
IMFVideoSampleAllocatorNotify_Release(allocator->callback);
if (allocator->device_manager)
IDirect3DDeviceManager9_Release(allocator->device_manager);
DeleteCriticalSection(&allocator->cs);
heap_free(allocator);
}
@ -178,9 +183,27 @@ static ULONG WINAPI sample_allocator_Release(IMFVideoSampleAllocator *iface)
static HRESULT WINAPI sample_allocator_SetDirectXManager(IMFVideoSampleAllocator *iface,
IUnknown *manager)
{
FIXME("%p, %p.\n", iface, manager);
struct sample_allocator *allocator = impl_from_IMFVideoSampleAllocator(iface);
IDirect3DDeviceManager9 *device_manager = NULL;
HRESULT hr;
return E_NOTIMPL;
TRACE("%p, %p.\n", iface, manager);
if (manager && FAILED(hr = IUnknown_QueryInterface(manager, &IID_IDirect3DDeviceManager9,
(void **)&device_manager)))
{
return hr;
}
EnterCriticalSection(&allocator->cs);
if (allocator->device_manager)
IDirect3DDeviceManager9_Release(allocator->device_manager);
allocator->device_manager = device_manager;
LeaveCriticalSection(&allocator->cs);
return S_OK;
}
static HRESULT WINAPI sample_allocator_UninitializeSampleAllocator(IMFVideoSampleAllocator *iface)