Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
164c3b7f
Commit
164c3b7f
authored
Oct 02, 2020
by
Nikolay Sivov
Committed by
Alexandre Julliard
Oct 02, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
evr/presenter: Create d3d device on presenter creation.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
e3ea5278
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
92 additions
and
12 deletions
+92
-12
Makefile.in
dlls/evr/Makefile.in
+1
-1
presenter.c
dlls/evr/presenter.c
+42
-5
evr.c
dlls/evr/tests/evr.c
+49
-6
No files found.
dlls/evr/Makefile.in
View file @
164c3b7f
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
...
...
dlls/evr/presenter.c
View file @
164c3b7f
...
...
@@ -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
;
}
dlls/evr/tests/evr.c
View file @
164c3b7f
...
...
@@ -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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment