Commit f134a12a authored by Laurent Aimar's avatar Laurent Aimar Committed by Jean-Baptiste Kempf

Workaround a potential segfault when using VAAPI/DXVA2 (close #3606).

It seems that some avcodec decoders release frames even after being flushed.
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent 3e949628
...@@ -725,7 +725,10 @@ void EndVideoDec( decoder_t *p_dec ) ...@@ -725,7 +725,10 @@ void EndVideoDec( decoder_t *p_dec )
if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic ); if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic );
if( p_sys->p_va ) if( p_sys->p_va )
{
vlc_va_Delete( p_sys->p_va ); vlc_va_Delete( p_sys->p_va );
p_sys->p_va = NULL;
}
} }
/***************************************************************************** /*****************************************************************************
...@@ -1079,25 +1082,24 @@ static void ffmpeg_ReleaseFrameBuf( struct AVCodecContext *p_context, ...@@ -1079,25 +1082,24 @@ static void ffmpeg_ReleaseFrameBuf( struct AVCodecContext *p_context,
if( p_sys->p_va ) if( p_sys->p_va )
{ {
vlc_va_Release( p_sys->p_va, p_ff_pic ); vlc_va_Release( p_sys->p_va, p_ff_pic );
/* */
for( int i = 0; i < 4; i++ )
p_ff_pic->data[i] = NULL;
} }
else if( !p_ff_pic->opaque ) else if( !p_ff_pic->opaque )
{ {
avcodec_default_release_buffer( p_context, p_ff_pic ); /* We can end up here without the AVFrame being allocated by
* avcodec_default_get_buffer() if VA is used and the frame is
* released when the decoder is closed
*/
if( p_ff_pic->type == FF_BUFFER_TYPE_INTERNAL )
avcodec_default_release_buffer( p_context, p_ff_pic );
} }
else else
{ {
picture_t *p_pic = (picture_t*)p_ff_pic->opaque; picture_t *p_pic = (picture_t*)p_ff_pic->opaque;
decoder_UnlinkPicture( p_dec, p_pic ); decoder_UnlinkPicture( p_dec, p_pic );
/* */
for( int i = 0; i < 4; i++ )
p_ff_pic->data[i] = NULL;
} }
for( int i = 0; i < 4; i++ )
p_ff_pic->data[i] = NULL;
} }
static void ffmpeg_NextPts( decoder_t *p_dec ) static void ffmpeg_NextPts( decoder_t *p_dec )
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment