Commit e9a226a3 authored by Laurent Aimar's avatar Laurent Aimar

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

It seems that some avcodec decoders release frames even after being flushed.
parent 957409b2
......@@ -795,7 +795,10 @@ void EndVideoDec( decoder_t *p_dec )
if( p_sys->p_ff_pic ) av_free( p_sys->p_ff_pic );
if( p_sys->p_va )
{
vlc_va_Delete( p_sys->p_va );
p_sys->p_va = NULL;
}
vlc_sem_destroy( &p_sys->sem_mt );
}
......@@ -1120,25 +1123,24 @@ static void ffmpeg_ReleaseFrameBuf( struct AVCodecContext *p_context,
if( p_sys->p_va )
{
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 )
{
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
{
picture_t *p_pic = (picture_t*)p_ff_pic->opaque;
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;
}
#ifdef HAVE_AVCODEC_VA
......
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