vlc | branch: master | Steve Lhomme <rob...@videolabs.io> | Wed Nov 22 18:18:39 2017 +0100| [b0ab659f403db975d6a5bcbc923239b6ae7decb0] | committer: Jean-Baptiste Kempf
dxva2_deinterlace: create the texture for pictures coming from a bogus pool Fixes #18936 Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b0ab659f403db975d6a5bcbc923239b6ae7decb0 --- modules/hw/d3d9/dxva2_deinterlace.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/modules/hw/d3d9/dxva2_deinterlace.c b/modules/hw/d3d9/dxva2_deinterlace.c index 994ee997ea..8088db1a91 100644 --- a/modules/hw/d3d9/dxva2_deinterlace.c +++ b/modules/hw/d3d9/dxva2_deinterlace.c @@ -249,11 +249,40 @@ static struct picture_context_t *d3d9_pic_context_copy(struct picture_context_t static picture_t *NewOutputPicture( filter_t *p_filter ) { - picture_t *pic = p_filter->p_sys->buffer_new( p_filter ); + filter_sys_t *p_sys = p_filter->p_sys; + picture_t *pic = p_sys->buffer_new( p_filter ); if ( !pic->context ) { + bool b_local_texture = false; + + if (!pic->p_sys ) + { + D3DSURFACE_DESC dstDesc; + if ( !p_sys->hw_surface || + FAILED(IDirect3DSurface9_GetDesc( p_sys->hw_surface, &dstDesc )) ) + return NULL; + + pic->p_sys = calloc(1, sizeof(*pic->p_sys)); + if (unlikely(pic->p_sys == NULL)) + return NULL; + + HRESULT hr = IDirect3DDevice9_CreateOffscreenPlainSurface(p_sys->d3d_dev.dev, + p_filter->fmt_out.video.i_width, + p_filter->fmt_out.video.i_height, + dstDesc.Format, + D3DPOOL_DEFAULT, + &pic->p_sys->surface, + NULL); + + if (FAILED(hr)) + { + free(pic->p_sys); + pic->p_sys = NULL; + return NULL; + } + b_local_texture = true; + } /* the picture might be duplicated for snapshots so it needs a context */ - assert( pic->p_sys != NULL ); /* this opaque picture is wrong */ struct va_pic_context *pic_ctx = calloc(1, sizeof(*pic_ctx)); if (likely(pic_ctx!=NULL)) { @@ -263,6 +292,8 @@ static picture_t *NewOutputPicture( filter_t *p_filter ) AcquirePictureSys( &pic_ctx->picsys ); pic->context = &pic_ctx->s; } + if (b_local_texture) + IDirect3DSurface9_Release(pic->p_sys->surface); } return pic; } _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits