[vlc-devel] [PATCH 4/6] hw:d3d9:dxva2_deinterlace: use D3D9_Create/Destroy
Steve Lhomme
robux4 at videolabs.io
Fri Nov 24 16:24:46 CET 2017
CID #1462217
---
modules/hw/d3d9/dxva2_deinterlace.c | 27 +++++++++++++--------------
1 file changed, 13 insertions(+), 14 deletions(-)
diff --git a/modules/hw/d3d9/dxva2_deinterlace.c b/modules/hw/d3d9/dxva2_deinterlace.c
index 8088db1a91..47dc4502d3 100644
--- a/modules/hw/d3d9/dxva2_deinterlace.c
+++ b/modules/hw/d3d9/dxva2_deinterlace.c
@@ -44,7 +44,7 @@ struct filter_sys_t
{
HINSTANCE hdecoder_dll;
/* keep a reference in case the vout is released first */
- HINSTANCE d3d9_dll;
+ d3d9_handle_t hd3d;
d3d9_device_t d3d_dev;
IDirectXVideoProcessor *processor;
IDirect3DSurface9 *hw_surface;
@@ -301,9 +301,8 @@ static picture_t *NewOutputPicture( filter_t *p_filter )
int D3D9OpenDeinterlace(vlc_object_t *obj)
{
filter_t *filter = (filter_t *)obj;
- filter_sys_t *sys = NULL;
+ filter_sys_t *sys;
HINSTANCE hdecoder_dll = NULL;
- HINSTANCE d3d9_dll = NULL;
HRESULT hr;
GUID *processorGUIDs = NULL;
GUID *processorGUID = NULL;
@@ -315,18 +314,20 @@ int D3D9OpenDeinterlace(vlc_object_t *obj)
if (!video_format_IsSimilar(&filter->fmt_in.video, &filter->fmt_out.video))
return VLC_EGENERIC;
- d3d9_dll = LoadLibrary(TEXT("D3D9.DLL"));
- if (!d3d9_dll)
- goto error;
+ sys = calloc(1, sizeof (*sys));
+ if (unlikely(sys == NULL))
+ return VLC_ENOMEM;
+
+ if (unlikely(D3D9_Create( filter, &sys->hd3d ) != VLC_SUCCESS)) {
+ msg_Warn(filter, "cannot load d3d9.dll, aborting");
+ free(sys);
+ return VLC_EGENERIC;
+ }
hdecoder_dll = LoadLibrary(TEXT("DXVA2.DLL"));
if (!hdecoder_dll)
goto error;
- sys = calloc(1, sizeof (*sys));
- if (unlikely(sys == NULL))
- goto error;
-
D3DSURFACE_DESC dstDesc;
D3D9_FilterHoldInstance( filter, &sys->d3d_dev, &dstDesc );
if (!sys->d3d_dev.dev)
@@ -457,7 +458,6 @@ int D3D9OpenDeinterlace(vlc_object_t *obj)
sys->Saturation = Range.DefaultValue.Value;
sys->hdecoder_dll = hdecoder_dll;
- sys->d3d9_dll = d3d9_dll;
sys->decoder_caps = best_caps;
InitDeinterlacingContext( &sys->context );
@@ -500,8 +500,7 @@ error:
D3D9_FilterReleaseInstance( &sys->d3d_dev );
if (hdecoder_dll)
FreeLibrary(hdecoder_dll);
- if (d3d9_dll)
- FreeLibrary(d3d9_dll);
+ D3D9_Destroy( &sys->hd3d );
free(sys);
return VLC_EGENERIC;
@@ -516,7 +515,7 @@ void D3D9CloseDeinterlace(vlc_object_t *obj)
IDirectXVideoProcessor_Release( sys->processor );
D3D9_FilterReleaseInstance( &sys->d3d_dev );
FreeLibrary( sys->hdecoder_dll );
- FreeLibrary( sys->d3d9_dll );
+ D3D9_Destroy( &sys->hd3d );
free(sys);
}
--
2.14.2
More information about the vlc-devel
mailing list