[vlc-devel] [PATCH 6/9] direct3d11: move the output chroma setup in a separate function
Steve Lhomme
robux4 at videolabs.io
Tue Nov 28 11:19:23 CET 2017
---
modules/video_output/win32/direct3d11.c | 41 ++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/modules/video_output/win32/direct3d11.c b/modules/video_output/win32/direct3d11.c
index 8e2a1ac220..da9e5b778c 100644
--- a/modules/video_output/win32/direct3d11.c
+++ b/modules/video_output/win32/direct3d11.c
@@ -215,9 +215,10 @@ static void Display(vout_display_t *, picture_t *, subpicture_t *subpicture);
static HINSTANCE Direct3D11LoadShaderLibrary(void);
static void Direct3D11Destroy(vout_display_t *);
-static int Direct3D11Open (vout_display_t *, video_format_t *);
+static int Direct3D11Open (vout_display_t *);
static void Direct3D11Close(vout_display_t *);
+static int SetupOutputFormat(vout_display_t *, video_format_t *);
static int Direct3D11CreateFormatResources (vout_display_t *, video_format_t *);
static int Direct3D11CreateGenericResources(vout_display_t *);
static void Direct3D11DestroyResources(vout_display_t *);
@@ -506,16 +507,11 @@ static int Open(vlc_object_t *object)
vd->sys->sys.pf_GetRect = GetRect;
#endif
- video_format_t fmt;
- video_format_Copy(&fmt, &vd->source);
- if (Direct3D11Open(vd, &fmt)) {
+ if (Direct3D11Open(vd)) {
msg_Err(vd, "Direct3D11 could not be opened");
goto error;
}
- video_format_Clean(&vd->fmt);
- vd->fmt = fmt;
-
#if !VLC_WINSTORE_APP
EventThreadUpdateTitle(vd->sys->sys.event, VOUT_TITLE " (Direct3D11 output)");
#endif
@@ -1418,7 +1414,7 @@ static const d3d_format_t *GetBlendableFormat(vout_display_t *vd, vlc_fourcc_t i
return FindD3D11Format( vd->sys->d3d_dev.d3ddevice, i_src_chroma, 0, false, supportFlags );
}
-static int Direct3D11Open(vout_display_t *vd, video_format_t *fmt)
+static int Direct3D11Open(vout_display_t *vd)
{
vout_display_sys_t *sys = vd->sys;
IDXGIFactory2 *dxgifactory;
@@ -1480,6 +1476,28 @@ static int Direct3D11Open(vout_display_t *vd, video_format_t *fmt)
D3D11SetColorSpace(vd);
+ video_format_t fmt;
+ video_format_Copy(&fmt, &vd->source);
+ int err = SetupOutputFormat(vd, &fmt);
+ if (err != VLC_SUCCESS)
+ return err;
+
+ if (Direct3D11CreateGenericResources(vd)) {
+ msg_Err(vd, "Failed to allocate resources");
+ Direct3D11DestroyResources(vd);
+ return VLC_EGENERIC;
+ }
+
+ video_format_Clean(&vd->fmt);
+ vd->fmt = fmt;
+
+ return VLC_SUCCESS;
+}
+
+static int SetupOutputFormat(vout_display_t *vd, video_format_t *fmt)
+{
+ vout_display_sys_t *sys = vd->sys;
+
// look for the requested pixel format first
sys->picQuadConfig = GetDirectRenderingFormat(vd, fmt->i_chroma);
@@ -1539,12 +1557,7 @@ static int Direct3D11Open(vout_display_t *vd, video_format_t *fmt)
Direct3D11DestroyResources(vd);
return VLC_EGENERIC;
}
-
- if (Direct3D11CreateGenericResources(vd)) {
- msg_Err(vd, "Failed to allocate resources");
- Direct3D11DestroyResources(vd);
- return VLC_EGENERIC;
- }
+ vd->fmt = *fmt;
return VLC_SUCCESS;
}
--
2.14.2
More information about the vlc-devel
mailing list