Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/Makefile.in | 2 +- dlls/evr/presenter.c | 47 +++++++++++++++++++++++++++++++++---- dlls/evr/tests/evr.c | 55 +++++++++++++++++++++++++++++++++++++++----- 3 files changed, 92 insertions(+), 12 deletions(-)
diff --git a/dlls/evr/Makefile.in b/dlls/evr/Makefile.in index 6d936d65b79..02cdb9b820a 100644 --- a/dlls/evr/Makefile.in +++ b/dlls/evr/Makefile.in @@ -1,6 +1,6 @@ MODULE = evr.dll IMPORTLIB = evr -IMPORTS = mfuuid strmiids strmbase uuid dxguid ole32 oleaut32 dxva2 +IMPORTS = mfuuid strmiids strmbase uuid dxguid ole32 oleaut32 user32 d3d9 dxva2 DELAYIMPORTS = mfplat
EXTRADLLFLAGS = -mno-cygwin diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index b60de4b82a1..04653ff67ad 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -643,11 +643,47 @@ HRESULT WINAPI MFCreateVideoPresenter(IUnknown *owner, REFIID riid_device, REFII return CoCreateInstance(&CLSID_MFVideoPresenter9, owner, CLSCTX_INPROC_SERVER, riid, obj); }
+static HRESULT video_presenter_init_d3d(struct video_presenter *presenter) +{ + D3DPRESENT_PARAMETERS present_params = { 0 }; + IDirect3DDevice9 *device; + IDirect3D9 *d3d; + HRESULT hr; + + d3d = Direct3DCreate9(D3D_SDK_VERSION); + + present_params.BackBufferCount = 1; + present_params.SwapEffect = D3DSWAPEFFECT_COPY; + present_params.hDeviceWindow = GetDesktopWindow(); + present_params.Windowed = TRUE; + present_params.Flags = D3DPRESENTFLAG_VIDEO; + present_params.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; + hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(), + 0, &present_params, &device); + + IDirect3D9_Release(d3d); + + if (FAILED(hr)) + { + WARN("Failed to create d3d device, hr %#x.\n", hr); + return hr; + } + + hr = IDirect3DDeviceManager9_ResetDevice(presenter->device_manager, device, presenter->reset_token); + IDirect3DDevice9_Release(device); + if (FAILED(hr)) + WARN("Failed to set new device for the manager, hr %#x.\n", hr); + + return hr; +} + HRESULT evr_presenter_create(IUnknown *outer, void **out) { struct video_presenter *object; HRESULT hr;
+ *out = NULL; + if (!(object = heap_alloc_zero(sizeof(*object)))) return E_OUTOFMEMORY;
@@ -663,12 +699,13 @@ HRESULT evr_presenter_create(IUnknown *outer, void **out) InitializeCriticalSection(&object->cs);
if (FAILED(hr = DXVA2CreateDirect3DDeviceManager9(&object->reset_token, &object->device_manager))) - { IUnknown_Release(&object->IUnknown_inner); - return hr; - }
- *out = &object->IUnknown_inner; + if (FAILED(hr = video_presenter_init_d3d(object))) + IUnknown_Release(&object->IUnknown_inner);
- return S_OK; + if (SUCCEEDED(hr)) + *out = &object->IUnknown_inner; + + return hr; } diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 0dff691b59f..c2e17595559 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -39,7 +39,7 @@ static HWND create_window(void)
AdjustWindowRect(&r, WS_OVERLAPPEDWINDOW | WS_VISIBLE, FALSE);
- return CreateWindowA("static", "d3d9_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, + return CreateWindowA("static", "evr_test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, r.right - r.left, r.bottom - r.top, NULL, NULL, NULL, NULL); }
@@ -967,12 +967,16 @@ done: static void test_default_presenter(void) { D3DDEVICE_CREATION_PARAMETERS device_params = { 0 }; + D3DPRESENT_PARAMETERS present_params = { 0 }; + IMFVideoDisplayControl *display_control; + IDirect3DSwapChain9 *swapchain; IMFVideoPresenter *presenter; IMFRateSupport *rate_support; IDirect3DDevice9 *d3d_device; IDirect3DDeviceManager9 *dm; IMFVideoDeviceID *deviceid; IMFGetService *gs; + HWND hwnd, hwnd2; HANDLE handle; IUnknown *unk; float rate; @@ -1010,33 +1014,70 @@ static void test_default_presenter(void) hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFGetService, (void **)&gs); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFGetService_GetService(gs, &MR_VIDEO_RENDER_SERVICE, &IID_IMFVideoDisplayControl, (void **)&display_control); +todo_wine + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + if (SUCCEEDED(hr)) + IMFVideoDisplayControl_Release(display_control); + hr = IMFGetService_GetService(gs, &MR_VIDEO_ACCELERATION_SERVICE, &IID_IDirect3DDeviceManager9, (void **)&dm); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFVideoPresenter_QueryInterface(presenter, &IID_IMFVideoDisplayControl, (void **)&display_control); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IDirect3DDeviceManager9_OpenDeviceHandle(dm, &handle); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IDirect3DDeviceManager9_LockDevice(dm, handle, &d3d_device, FALSE); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
-if (SUCCEEDED(hr)) -{ hr = IDirect3DDevice9_GetCreationParameters(d3d_device, &device_params); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(device_params.hFocusWindow == GetDesktopWindow(), "Unexpected window %p.\n", device_params.hFocusWindow);
+ hr = IDirect3DDevice9_GetSwapChain(d3d_device, 0, &swapchain); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IDirect3DSwapChain9_GetPresentParameters(swapchain, &present_params); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + ok(present_params.hDeviceWindow == GetDesktopWindow(), "Unexpected device window.\n"); + ok(present_params.Windowed, "Unexpected windowed mode.\n"); + ok(present_params.SwapEffect == D3DSWAPEFFECT_COPY, "Unexpected swap effect.\n"); + ok(present_params.Flags == D3DPRESENTFLAG_VIDEO, "Unexpected flags.\n"); + ok(present_params.PresentationInterval == D3DPRESENT_INTERVAL_IMMEDIATE, "Unexpected present interval.\n"); + IDirect3DDevice9_Release(d3d_device);
hr = IDirect3DDeviceManager9_UnlockDevice(dm, handle, FALSE); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IDirect3DDeviceManager9_CloseDeviceHandle(dm, handle); + hwnd = create_window(); + ok(!!hwnd, "Failed to create a test window.\n"); + + hwnd2 = hwnd; + hr = IMFVideoDisplayControl_GetVideoWindow(display_control, &hwnd2); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(hwnd2 == NULL, "Unexpected window %p.\n", hwnd2); +} + hr = IMFVideoDisplayControl_SetVideoWindow(display_control, hwnd); +todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hwnd2 = NULL; + hr = IMFVideoDisplayControl_GetVideoWindow(display_control, &hwnd2); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(hwnd2 == hwnd, "Unexpected window %p.\n", hwnd2); } + hr = IDirect3DDeviceManager9_CloseDeviceHandle(dm, handle); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + IDirect3DDeviceManager9_Release(dm);
+ IMFVideoDisplayControl_Release(display_control); IMFGetService_Release(gs);
/* Rate support. */ @@ -1066,6 +1107,8 @@ if (SUCCEEDED(hr)) IMFRateSupport_Release(rate_support);
IMFVideoPresenter_Release(presenter); + + DestroyWindow(hwnd); }
static void test_MFCreateVideoMixerAndPresenter(void)
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/presenter.c | 11 +++++++++++ dlls/evr/tests/evr.c | 4 +--- 2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index 04653ff67ad..8b5a7dd46ab 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -618,6 +618,17 @@ static HRESULT WINAPI video_presenter_getservice_GetService(IMFGetService *iface if (IsEqualGUID(&MR_VIDEO_ACCELERATION_SERVICE, service)) return IDirect3DDeviceManager9_QueryInterface(presenter->device_manager, riid, obj);
+ if (IsEqualGUID(&MR_VIDEO_RENDER_SERVICE, service)) + { + if (IsEqualIID(riid, &IID_IMFVideoDisplayControl)) + return IMFVideoPresenter_QueryInterface(&presenter->IMFVideoPresenter_iface, riid, obj); + else + { + FIXME("Unsupported interface %s.\n", debugstr_guid(riid)); + return E_NOTIMPL; + } + } + FIXME("Unimplemented service %s.\n", debugstr_guid(service));
return E_NOTIMPL; diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index c2e17595559..9665e2683dd 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -1015,10 +1015,8 @@ static void test_default_presenter(void) ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFGetService_GetService(gs, &MR_VIDEO_RENDER_SERVICE, &IID_IMFVideoDisplayControl, (void **)&display_control); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - if (SUCCEEDED(hr)) - IMFVideoDisplayControl_Release(display_control); + IMFVideoDisplayControl_Release(display_control);
hr = IMFGetService_GetService(gs, &MR_VIDEO_ACCELERATION_SERVICE, &IID_IDirect3DDeviceManager9, (void **)&dm); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/presenter.c | 19 +++++++++++++++---- dlls/evr/tests/evr.c | 7 ++----- 2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index 8b5a7dd46ab..a8e9a507924 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -58,6 +58,7 @@ struct video_presenter
IDirect3DDeviceManager9 *device_manager; UINT reset_token; + HWND video_window; unsigned int state; CRITICAL_SECTION cs; }; @@ -497,16 +498,26 @@ static HRESULT WINAPI video_presenter_control_GetAspectRatioMode(IMFVideoDisplay
static HRESULT WINAPI video_presenter_control_SetVideoWindow(IMFVideoDisplayControl *iface, HWND window) { - FIXME("%p, %p.\n", iface, window); + struct video_presenter *presenter = impl_from_IMFVideoDisplayControl(iface);
- return E_NOTIMPL; + TRACE("%p, %p.\n", iface, window); + + EnterCriticalSection(&presenter->cs); + presenter->video_window = window; + LeaveCriticalSection(&presenter->cs); + + return S_OK; }
static HRESULT WINAPI video_presenter_control_GetVideoWindow(IMFVideoDisplayControl *iface, HWND *window) { - FIXME("%p, %p.\n", iface, window); + struct video_presenter *presenter = impl_from_IMFVideoDisplayControl(iface);
- return E_NOTIMPL; + TRACE("%p, %p.\n", iface, window); + + *window = presenter->video_window; + + return S_OK; }
static HRESULT WINAPI video_presenter_control_RepaintVideo(IMFVideoDisplayControl *iface) diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 9665e2683dd..d77703b6c1f 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -1056,20 +1056,17 @@ static void test_default_presenter(void)
hwnd2 = hwnd; hr = IMFVideoDisplayControl_GetVideoWindow(display_control, &hwnd2); -todo_wine { ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hwnd2 == NULL, "Unexpected window %p.\n", hwnd2); -} + hr = IMFVideoDisplayControl_SetVideoWindow(display_control, hwnd); -todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hwnd2 = NULL; hr = IMFVideoDisplayControl_GetVideoWindow(display_control, &hwnd2); -todo_wine { ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hwnd2 == hwnd, "Unexpected window %p.\n", hwnd2); -} + hr = IDirect3DDeviceManager9_CloseDeviceHandle(dm, handle); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/presenter.c | 43 ++++++++++++++++++++++++----- dlls/evr/tests/evr.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 7 deletions(-)
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index a8e9a507924..0663383b14f 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -59,6 +59,8 @@ struct video_presenter IDirect3DDeviceManager9 *device_manager; UINT reset_token; HWND video_window; + MFVideoNormalizedRect src_rect; + RECT dst_rect; unsigned int state; CRITICAL_SECTION cs; }; @@ -467,19 +469,45 @@ static HRESULT WINAPI video_presenter_control_GetIdealVideoSize(IMFVideoDisplayC }
static HRESULT WINAPI video_presenter_control_SetVideoPosition(IMFVideoDisplayControl *iface, - const MFVideoNormalizedRect *source, const RECT *dest) + const MFVideoNormalizedRect *src_rect, const RECT *dst_rect) { - FIXME("%p, %p, %p.\n", iface, source, dest); + struct video_presenter *presenter = impl_from_IMFVideoDisplayControl(iface);
- return E_NOTIMPL; + TRACE("%p, %p, %s.\n", iface, src_rect, wine_dbgstr_rect(dst_rect)); + + if (!src_rect && !dst_rect) + return E_POINTER; + + if (src_rect && (src_rect->left < 0.0f || src_rect->top < 0.0f || + src_rect->right > 1.0f || src_rect->bottom > 1.0f)) + return E_INVALIDARG; + + EnterCriticalSection(&presenter->cs); + if (src_rect) + presenter->src_rect = *src_rect; + if (dst_rect) + presenter->dst_rect = *dst_rect; + LeaveCriticalSection(&presenter->cs); + + return S_OK; }
-static HRESULT WINAPI video_presenter_control_GetVideoPosition(IMFVideoDisplayControl *iface, MFVideoNormalizedRect *source, - RECT *dest) +static HRESULT WINAPI video_presenter_control_GetVideoPosition(IMFVideoDisplayControl *iface, MFVideoNormalizedRect *src_rect, + RECT *dst_rect) { - FIXME("%p, %p, %p.\n", iface, source, dest); + struct video_presenter *presenter = impl_from_IMFVideoDisplayControl(iface);
- return E_NOTIMPL; + TRACE("%p, %p, %p.\n", iface, src_rect, dst_rect); + + if (!src_rect || !dst_rect) + return E_POINTER; + + EnterCriticalSection(&presenter->cs); + *src_rect = presenter->src_rect; + *dst_rect = presenter->dst_rect; + LeaveCriticalSection(&presenter->cs); + + return S_OK; }
static HRESULT WINAPI video_presenter_control_SetAspectRatioMode(IMFVideoDisplayControl *iface, DWORD mode) @@ -718,6 +746,7 @@ HRESULT evr_presenter_create(IUnknown *outer, void **out) object->IUnknown_inner.lpVtbl = &video_presenter_inner_vtbl; object->outer_unk = outer ? outer : &object->IUnknown_inner; object->refcount = 1; + object->src_rect.right = object->src_rect.bottom = 1.0f; InitializeCriticalSection(&object->cs);
if (FAILED(hr = DXVA2CreateDirect3DDeviceManager9(&object->reset_token, &object->device_manager))) diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index d77703b6c1f..48bf01a2ef5 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -970,6 +970,7 @@ static void test_default_presenter(void) D3DPRESENT_PARAMETERS present_params = { 0 }; IMFVideoDisplayControl *display_control; IDirect3DSwapChain9 *swapchain; + MFVideoNormalizedRect src_rect; IMFVideoPresenter *presenter; IMFRateSupport *rate_support; IDirect3DDevice9 *d3d_device; @@ -977,6 +978,7 @@ static void test_default_presenter(void) IMFVideoDeviceID *deviceid; IMFGetService *gs; HWND hwnd, hwnd2; + RECT dst_rect; HANDLE handle; IUnknown *unk; float rate; @@ -1051,6 +1053,7 @@ static void test_default_presenter(void) hr = IDirect3DDeviceManager9_UnlockDevice(dm, handle, FALSE); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ /* Video window */ hwnd = create_window(); ok(!!hwnd, "Failed to create a test window.\n");
@@ -1067,6 +1070,69 @@ static void test_default_presenter(void) ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hwnd2 == hwnd, "Unexpected window %p.\n", hwnd2);
+ /* Video position */ + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, NULL, &dst_rect); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, &src_rect, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + SetRect(&dst_rect, 1, 2, 3, 4); + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, &src_rect, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(src_rect.left == 0.0f && src_rect.top == 0.0f && src_rect.right == 1.0f && + src_rect.bottom == 1.0f, "Unexpected source rectangle.\n"); + ok(dst_rect.left == 0 && dst_rect.right == 0 && dst_rect.top == 0 && dst_rect.bottom == 0, + "Unexpected destination rectangle %s.\n", wine_dbgstr_rect(&dst_rect)); + + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, NULL); + ok(hr == E_POINTER, "Unexpected hr %#x.\n", hr); + + SetRect(&dst_rect, 0, 0, 10, 10); + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + SetRect(&dst_rect, 1, 2, 3, 4); + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, &src_rect, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(dst_rect.left == 0 && dst_rect.right == 10 && dst_rect.top == 0 && dst_rect.bottom == 10, + "Unexpected destination rectangle %s.\n", wine_dbgstr_rect(&dst_rect)); + + src_rect.left = src_rect.top = 0.0f; + src_rect.right = 2.0f; + src_rect.bottom = 1.0f; + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, &src_rect, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + + src_rect.left = -0.1f; + src_rect.top = 0.0f; + src_rect.right = 0.9f; + src_rect.bottom = 1.0f; + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, &src_rect, NULL); + ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr); + + src_rect.left = 0.1f; + src_rect.top = 0.2f; + src_rect.right = 0.8f; + src_rect.bottom = 0.9f; + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, &src_rect, NULL); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, &src_rect, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(src_rect.left == 0.1f && src_rect.top == 0.2f && src_rect.right == 0.8f && + src_rect.bottom == 0.9f, "Unexpected source rectangle.\n"); + + SetRect(&dst_rect, 1, 2, 999, 1000); + hr = IMFVideoDisplayControl_SetVideoPosition(display_control, NULL, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + SetRect(&dst_rect, 0, 1, 3, 4); + hr = IMFVideoDisplayControl_GetVideoPosition(display_control, &src_rect, &dst_rect); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(dst_rect.left == 1 && dst_rect.right == 999 && dst_rect.top == 2 && dst_rect.bottom == 1000, + "Unexpected destination rectangle %s.\n", wine_dbgstr_rect(&dst_rect)); + hr = IDirect3DDeviceManager9_CloseDeviceHandle(dm, handle); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/presenter.c | 48 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+)
diff --git a/dlls/evr/presenter.c b/dlls/evr/presenter.c index 0663383b14f..04e9a556840 100644 --- a/dlls/evr/presenter.c +++ b/dlls/evr/presenter.c @@ -563,6 +563,48 @@ static HRESULT WINAPI video_presenter_control_GetCurrentImage(IMFVideoDisplayCon return E_NOTIMPL; }
+static HRESULT WINAPI video_presenter_control_SetBorderColor(IMFVideoDisplayControl *iface, COLORREF color) +{ + FIXME("%p, %#x.\n", iface, color); + + return E_NOTIMPL; +} + +static HRESULT WINAPI video_presenter_control_GetBorderColor(IMFVideoDisplayControl *iface, COLORREF *color) +{ + FIXME("%p, %p.\n", iface, color); + + return E_NOTIMPL; +} + +static HRESULT WINAPI video_presenter_control_SetRenderingPrefs(IMFVideoDisplayControl *iface, DWORD flags) +{ + FIXME("%p, %#x.\n", iface, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI video_presenter_control_GetRenderingPrefs(IMFVideoDisplayControl *iface, DWORD *flags) +{ + FIXME("%p, %p.\n", iface, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI video_presenter_control_SetFullscreen(IMFVideoDisplayControl *iface, BOOL fullscreen) +{ + FIXME("%p, %d.\n", iface, fullscreen); + + return E_NOTIMPL; +} + +static HRESULT WINAPI video_presenter_control_GetFullscreen(IMFVideoDisplayControl *iface, BOOL *fullscreen) +{ + FIXME("%p, %p.\n", iface, fullscreen); + + return E_NOTIMPL; +} + static const IMFVideoDisplayControlVtbl video_presenter_control_vtbl = { video_presenter_control_QueryInterface, @@ -578,6 +620,12 @@ static const IMFVideoDisplayControlVtbl video_presenter_control_vtbl = video_presenter_control_GetVideoWindow, video_presenter_control_RepaintVideo, video_presenter_control_GetCurrentImage, + video_presenter_control_SetBorderColor, + video_presenter_control_GetBorderColor, + video_presenter_control_SetRenderingPrefs, + video_presenter_control_GetRenderingPrefs, + video_presenter_control_SetFullscreen, + video_presenter_control_GetFullscreen, };
static HRESULT WINAPI video_presenter_rate_support_QueryInterface(IMFRateSupport *iface, REFIID riid, void **obj)