vlc | branch: master | Steve Lhomme <[email protected]> | Mon Sep 2 09:33:58 2019 +0200| [5eabbd753a6c47bf6e914b33162b3227b2f5203c] | committer: Steve Lhomme
dxva: move the decoder instance in each implementation The helper functions never use it anyway. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5eabbd753a6c47bf6e914b33162b3227b2f5203c --- modules/codec/avcodec/d3d11va.c | 15 ++++++--------- modules/codec/avcodec/directx_va.c | 1 - modules/codec/avcodec/directx_va.h | 3 --- modules/codec/avcodec/dxva2.c | 25 ++++++++++--------------- modules/codec/avcodec/dxva_blacklist.c | 2 -- 5 files changed, 16 insertions(+), 30 deletions(-) diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c index 8bf6c7da03..f204226c29 100644 --- a/modules/codec/avcodec/d3d11va.c +++ b/modules/codec/avcodec/d3d11va.c @@ -53,7 +53,6 @@ typedef picture_sys_d3d11_t VA_PICSYS; #include "va_surface.h" -#define D3D_DecoderType ID3D11VideoDecoder #include "directx_va.h" static int Open(vlc_va_t *, AVCodecContext *, enum PixelFormat, @@ -116,6 +115,7 @@ struct vlc_va_sys_t /* Video decoder */ D3D11_VIDEO_DECODER_CONFIG cfg; ID3D11VideoDevice *d3ddec; + ID3D11VideoDecoder *dxdecoder; /* avcodec internals */ struct AVD3D11VAContext hw; @@ -142,7 +142,7 @@ static void SetupAVCodecContext(vlc_va_sys_t *sys) directx_sys_t *dx_sys = &sys->dx_sys; sys->hw.video_context = sys->d3dvidctx; - sys->hw.decoder = dx_sys->decoder; + sys->hw.decoder = sys->dxdecoder; sys->hw.cfg = &sys->cfg; sys->hw.surface_count = dx_sys->va_pool.surface_count; sys->hw.surface = sys->hw_surface; @@ -910,10 +910,10 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id, hr = ID3D11VideoDevice_CreateVideoDecoder( sys->d3ddec, &decoderDesc, &sys->cfg, &decoder ); if (FAILED(hr)) { msg_Err(va, "ID3D11VideoDevice_CreateVideoDecoder failed. (hr=0x%lX)", hr); - dx_sys->decoder = NULL; + sys->dxdecoder = NULL; return VLC_EGENERIC; } - dx_sys->decoder = decoder; + sys->dxdecoder = decoder; msg_Dbg(va, "DxCreateDecoderSurfaces succeed"); return VLC_SUCCESS; @@ -937,9 +937,6 @@ static void DxDestroySurfaces(vlc_va_sys_t *sys) ID3D11ShaderResourceView_Release(sys->renderSrc[i*D3D11_MAX_SHADER_VIEW + j]); } } - if (dx_sys->decoder) - { - ID3D11VideoDecoder_Release(dx_sys->decoder); - dx_sys->decoder = NULL; - } + if (sys->dxdecoder) + ID3D11VideoDecoder_Release(sys->dxdecoder); } diff --git a/modules/codec/avcodec/directx_va.c b/modules/codec/avcodec/directx_va.c index 028f2431e7..49a4d2f513 100644 --- a/modules/codec/avcodec/directx_va.c +++ b/modules/codec/avcodec/directx_va.c @@ -35,7 +35,6 @@ #define COBJMACROS -#define D3D_DecoderType IUnknown #include "directx_va.h" #include "avcodec.h" diff --git a/modules/codec/avcodec/directx_va.h b/modules/codec/avcodec/directx_va.h index 2f6a92fe0b..3e8e957d6c 100644 --- a/modules/codec/avcodec/directx_va.h +++ b/modules/codec/avcodec/directx_va.h @@ -58,9 +58,6 @@ typedef struct /* Video service */ GUID input; - /* Video decoder */ - D3D_DecoderType *decoder; - /** * Read the list of possible input GUIDs */ diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c index 134a9c9b13..b353066699 100644 --- a/modules/codec/avcodec/dxva2.c +++ b/modules/codec/avcodec/dxva2.c @@ -40,7 +40,6 @@ typedef picture_sys_d3d9_t VA_PICSYS; #include "va_surface.h" -#define D3D_DecoderType IDirectXVideoDecoder #include "directx_va.h" static int Open(vlc_va_t *, AVCodecContext *, enum PixelFormat, @@ -126,6 +125,7 @@ struct vlc_va_sys_t /* Video decoder */ DXVA2_ConfigPictureDecode cfg; IDirectXVideoDecoderService *d3ddec; + IDirectXVideoDecoder *dxdecoder; /* pool */ IDirect3DSurface9 *hw_surface[MAX_SURFACE_COUNT]; @@ -150,7 +150,7 @@ static void SetupAVCodecContext(vlc_va_sys_t *sys) { directx_sys_t *dx_sys = &sys->dx_sys; - sys->hw.decoder = dx_sys->decoder; + sys->hw.decoder = sys->dxdecoder; sys->hw.cfg = &sys->cfg; sys->hw.surface_count = dx_sys->va_pool.surface_count; sys->hw.surface = sys->hw_surface; @@ -198,8 +198,8 @@ static struct va_pic_context *CreatePicContext(IDirect3DSurface9 *surface, IDire static struct va_pic_context* NewSurfacePicContext(vlc_va_t *va, int surface_index) { - directx_sys_t *dx_sys = &va->sys->dx_sys; - struct va_pic_context *pic_ctx = CreatePicContext(va->sys->hw_surface[surface_index], dx_sys->decoder); + vlc_va_sys_t *sys = va->sys; + struct va_pic_context *pic_ctx = CreatePicContext(sys->hw_surface[surface_index], sys->dxdecoder); if (unlikely(pic_ctx==NULL)) return NULL; /* all the resources are acquired during surfaces init, and a second time in @@ -635,7 +635,6 @@ static int DxCreateVideoDecoder(vlc_va_t *va, int codec_id, } /* Create the decoder */ - IDirectXVideoDecoder *decoder; /* adds a reference on each decoder surface */ if (FAILED(IDirectXVideoDecoderService_CreateVideoDecoder(p_sys->d3ddec, &sys->input, @@ -643,11 +642,10 @@ static int DxCreateVideoDecoder(vlc_va_t *va, int codec_id, &p_sys->cfg, p_sys->hw_surface, surface_count, - &decoder))) { + &p_sys->dxdecoder))) { msg_Err(va, "IDirectXVideoDecoderService_CreateVideoDecoder failed"); goto error; } - sys->decoder = decoder; msg_Dbg(va, "IDirectXVideoDecoderService_CreateVideoDecoder succeed"); return VLC_SUCCESS; @@ -660,12 +658,9 @@ error: static void DxDestroyVideoDecoder(vlc_va_sys_t *sys) { directx_sys_t *dx_sys = &sys->dx_sys; - if (dx_sys->decoder) - { - /* releases a reference on each decoder surface */ - IDirectXVideoDecoder_Release(dx_sys->decoder); - dx_sys->decoder = NULL; - for (unsigned i = 0; i < dx_sys->va_pool.surface_count; i++) - IDirect3DSurface9_Release(sys->hw_surface[i]); - } + /* releases a reference on each decoder surface */ + if (sys->dxdecoder) + IDirectXVideoDecoder_Release(sys->dxdecoder); + for (unsigned i = 0; i < dx_sys->va_pool.surface_count; i++) + IDirect3DSurface9_Release(sys->hw_surface[i]); } diff --git a/modules/codec/avcodec/dxva_blacklist.c b/modules/codec/avcodec/dxva_blacklist.c index 9f34481c49..ef86d1479f 100644 --- a/modules/codec/avcodec/dxva_blacklist.c +++ b/modules/codec/avcodec/dxva_blacklist.c @@ -29,8 +29,6 @@ #include "../../video_chroma/dxgi_fmt.h" -#define D3D_DecoderType IUnknown - #include "directx_va.h" extern const GUID DXVA2_ModeMPEG2_VLD; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
