vlc | branch: master | Steve Lhomme <[email protected]> | Wed Jun 7 11:53:26 2017 +0200| [d895ea983063683e477ef5d7dd4f9e8905fd51f1] | committer: Jean-Baptiste Kempf
d3d_fmt: add a function to acquire the resources used in the picture_sys_t This is the reverse of ReleasePictureSys Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d895ea983063683e477ef5d7dd4f9e8905fd51f1 --- modules/codec/avcodec/d3d11va.c | 11 +---------- modules/codec/avcodec/dxva2.c | 2 +- modules/video_chroma/d3d11_fmt.h | 16 ++++++++++++++++ modules/video_chroma/d3d9_fmt.h | 5 +++++ 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/modules/codec/avcodec/d3d11va.c b/modules/codec/avcodec/d3d11va.c index c1d060ad88..85c6969c46 100644 --- a/modules/codec/avcodec/d3d11va.c +++ b/modules/codec/avcodec/d3d11va.c @@ -231,6 +231,7 @@ static struct va_pic_context *CreatePicContext(vlc_va_surface_t *va_surface, pic_ctx->picsys.resource[i] = p_resource; pic_ctx->picsys.resourceView[i] = resourceView[i]; } + AcquirePictureSys(&pic_ctx->picsys); pic_ctx->picsys.context = context; done: return pic_ctx; @@ -302,16 +303,6 @@ static int Get(vlc_va_t *va, picture_t *pic, uint8_t **data) directx_va_Release(va_surface); return VLC_ENOMEM; } - ID3D11VideoDecoderOutputView_AddRef(pic_ctx->picsys.decoder); - ID3D11DeviceContext_AddRef(pic_ctx->picsys.context); - for (int i=0; i<D3D11_MAX_SHADER_VIEW; i++) - { - if (pic_ctx->picsys.resource[i]) - ID3D11Resource_AddRef(pic_ctx->picsys.resource[i]); - if (pic_ctx->picsys.resourceView[i]) - ID3D11ShaderResourceView_AddRef(pic_ctx->picsys.resourceView[i]); - } - pic->context = &pic_ctx->s; } *data = (uint8_t*)((struct va_pic_context *)pic->context)->picsys.decoder; diff --git a/modules/codec/avcodec/dxva2.c b/modules/codec/avcodec/dxva2.c index e549743110..90b2919b70 100644 --- a/modules/codec/avcodec/dxva2.c +++ b/modules/codec/avcodec/dxva2.c @@ -229,7 +229,7 @@ static struct picture_context_t *CreatePicContext(vlc_va_surface_t *va_surface) pic_ctx->s.destroy = d3d9_pic_context_destroy; pic_ctx->s.copy = d3d9_pic_context_copy; pic_ctx->picsys.surface = va_surface->decoderSurface; - IDirect3DSurface9_AddRef(pic_ctx->picsys.surface); + AcquirePictureSys(&pic_ctx->picsys); return &pic_ctx->s; } diff --git a/modules/video_chroma/d3d11_fmt.h b/modules/video_chroma/d3d11_fmt.h index 6b4de23cd0..6c3f6e06ba 100644 --- a/modules/video_chroma/d3d11_fmt.h +++ b/modules/video_chroma/d3d11_fmt.h @@ -62,6 +62,22 @@ struct va_pic_context * (ie not DXGI_FORMAT_UNKNWON) */ #define KNOWN_DXGI_INDEX 0 +static inline void AcquirePictureSys(picture_sys_t *p_sys) +{ + for (int i=0; i<D3D11_MAX_SHADER_VIEW; i++) { + if (p_sys->resourceView[i]) + ID3D11ShaderResourceView_AddRef(p_sys->resourceView[i]); + if (p_sys->texture[i]) + ID3D11Texture2D_AddRef(p_sys->texture[i]); + } + if (p_sys->context) + ID3D11DeviceContext_AddRef(p_sys->context); + if (p_sys->decoder) + ID3D11VideoDecoderOutputView_AddRef(p_sys->decoder); + if (p_sys->processorInput) + ID3D11VideoProcessorInputView_AddRef(p_sys->processorInput); +} + static inline void ReleasePictureSys(picture_sys_t *p_sys) { for (int i=0; i<D3D11_MAX_SHADER_VIEW; i++) { diff --git a/modules/video_chroma/d3d9_fmt.h b/modules/video_chroma/d3d9_fmt.h index fe960992a0..2571ecf77b 100644 --- a/modules/video_chroma/d3d9_fmt.h +++ b/modules/video_chroma/d3d9_fmt.h @@ -41,6 +41,11 @@ struct va_pic_context vlc_va_surface_t *va_surface; }; +static inline void AcquirePictureSys(picture_sys_t *p_sys) +{ + IDirect3DSurface9_AddRef(p_sys->surface); +} + static inline void ReleasePictureSys(picture_sys_t *p_sys) { IDirect3DSurface9_Release(p_sys->surface); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
