Browse Source

direct3d11: remove the local d3d11_handle_t instances

As long as the decoder device/d3d11_decoder_device_t is alive we hold the DLLs.
pull/102/head
Steve Lhomme 7 years ago
parent
commit
9e19c1acaf
  1. 7
      modules/codec/avcodec/d3d11va.c
  2. 9
      modules/hw/d3d11/d3d11_deinterlace.c
  3. 17
      modules/video_output/win32/direct3d11.c

7
modules/codec/avcodec/d3d11va.c

@ -96,7 +96,6 @@ DEFINE_GUID(DXVA2_NoEncrypt, 0x1b81bed0, 0xa0c7, 0x11d3,
struct vlc_va_sys_t
{
d3d11_handle_t hd3d;
d3d11_device_t *d3d_dev;
vlc_video_context *vctx;
@ -264,10 +263,6 @@ static int Open(vlc_va_t *va, AVCodecContext *ctx, enum PixelFormat hwfmt, const
if (unlikely(sys == NULL))
return VLC_ENOMEM;
err = D3D11_Create( va, &sys->hd3d );
if (err != VLC_SUCCESS)
goto error;
va->sys = sys;
sys->render_fmt = NULL;
@ -693,7 +688,5 @@ static void DxDestroySurfaces(void *opaque)
if (sys->hw.video_context)
ID3D11VideoContext_Release(sys->hw.video_context);
D3D11_Destroy( &sys->hd3d );
free(sys);
}

9
modules/hw/d3d11/d3d11_deinterlace.c

@ -41,7 +41,6 @@
typedef struct
{
d3d11_handle_t hd3d;
d3d11_device_t *d3d_dev;
d3d11_processor_t d3d_proc;
@ -256,12 +255,6 @@ int D3D11OpenDeinterlace(vlc_object_t *obj)
return VLC_ENOMEM;
memset(sys, 0, sizeof (*sys));
if ( unlikely(D3D11_Create(filter, &sys->hd3d) != VLC_SUCCESS ))
{
msg_Err(filter, "Could not access the d3d11.");
goto error;
}
d3d11_decoder_device_t *dev_sys = GetD3D11OpaqueContext( filter->vctx_in );
sys->d3d_dev = &dev_sys->d3d_dev;
if (D3D11_CreateProcessor(filter, sys->d3d_dev, D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST,
@ -403,7 +396,6 @@ error:
if (sys->outTexture)
ID3D11Texture2D_Release(sys->outTexture);
D3D11_ReleaseProcessor(&sys->d3d_proc);
D3D11_Destroy(&sys->hd3d);
free(sys);
return VLC_EGENERIC;
@ -419,7 +411,6 @@ void D3D11CloseDeinterlace(vlc_object_t *obj)
ID3D11Texture2D_Release(sys->outTexture);
D3D11_ReleaseProcessor( &sys->d3d_proc );
vlc_video_context_Release(filter->vctx_out);
D3D11_Destroy(&sys->hd3d);
free(sys);
}

17
modules/video_output/win32/direct3d11.c

@ -95,7 +95,6 @@ struct vout_display_sys_t
display_info_t display;
d3d11_handle_t hd3d;
d3d11_device_t *d3d_dev;
d3d11_decoder_device_t *local_d3d_dev; // when opened without a video context
d3d11_shaders_t shaders;
@ -131,8 +130,6 @@ struct vout_display_sys_t
static void Prepare(vout_display_t *, picture_t *, subpicture_t *subpicture, vlc_tick_t);
static void Display(vout_display_t *, picture_t *);
static void Direct3D11Destroy(vout_display_t *);
static int Direct3D11Open (vout_display_t *, video_format_t *, vlc_video_context *);
static void Direct3D11Close(vout_display_t *);
@ -295,11 +292,7 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg,
if (!sys)
return VLC_ENOMEM;
int ret = D3D11_Create(vd, &sys->hd3d);
if (ret != VLC_SUCCESS)
return ret;
ret = D3D11_InitShaders(VLC_OBJECT(vd), &sys->shaders);
int ret = D3D11_InitShaders(VLC_OBJECT(vd), &sys->shaders);
if (ret != VLC_SUCCESS)
goto error;
@ -389,7 +382,6 @@ static void Close(vout_display_t *vd)
#if !VLC_WINSTORE_APP
CommonWindowClean(VLC_OBJECT(vd), &vd->sys->sys);
#endif
Direct3D11Destroy(vd);
}
static void getZoomMatrix(float zoom, FLOAT matrix[static 16]) {
@ -718,13 +710,6 @@ static void Display(vout_display_t *vd, picture_t *picture)
d3d11_device_unlock( sys->d3d_dev );
}
static void Direct3D11Destroy(vout_display_t *vd)
{
#if !VLC_WINSTORE_APP
D3D11_Destroy( &vd->sys->hd3d );
#endif
}
static const d3d_format_t *GetDirectRenderingFormat(vout_display_t *vd, vlc_fourcc_t i_src_chroma)
{
UINT supportFlags = D3D11_FORMAT_SUPPORT_SHADER_LOAD;

Loading…
Cancel
Save