X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fcodec%2Favcodec%2Favcodec.c;h=73e7ca425260360656a2f217de592c42087adc0b;hb=e623f83cf2da21c58bd4488747d15c39fbf77ce9;hp=fb83b5e382c1d0c80f5c4e09228447cb891cdf20;hpb=f8fa5d7361e1fee44212b28a3f084fa7164f8c9e;p=vlc diff --git a/modules/codec/avcodec/avcodec.c b/modules/codec/avcodec/avcodec.c index fb83b5e382..73e7ca4252 100644 --- a/modules/codec/avcodec/avcodec.c +++ b/modules/codec/avcodec/avcodec.c @@ -255,7 +255,8 @@ static int OpenDecoder( vlc_object_t *p_this ) /* *** determine codec type *** */ if( !GetFfmpegCodec( p_dec->fmt_in.i_codec, &i_cat, &i_codec_id, - &psz_namecodec ) ) + &psz_namecodec ) + || i_cat == UNKNOWN_ES ) { return VLC_EGENERIC; } @@ -333,24 +334,14 @@ static int OpenDecoder( vlc_object_t *p_this ) static void CloseDecoder( vlc_object_t *p_this ) { decoder_t *p_dec = (decoder_t *)p_this; - decoder_sys_t *p_sys = p_dec->p_sys; - switch( p_dec->fmt_out.i_cat ) - { - case VIDEO_ES: - EndVideoDec ( p_dec ); - break; - } + if( p_dec->fmt_out.i_cat == VIDEO_ES ) + EndVideoDec( p_dec ); + else + ffmpeg_CloseCodec( p_dec ); - if( !p_sys->b_delayed_open ) - { - vlc_avcodec_lock(); - avcodec_close( p_sys->p_context ); - vlc_avcodec_unlock(); - msg_Dbg( p_dec, "ffmpeg codec (%s) stopped", p_sys->p_codec->name ); - } + decoder_sys_t *p_sys = p_dec->p_sys; - av_freep( &p_sys->p_context->extradata ); avcodec_free_context( &p_sys->p_context ); free( p_sys ); } @@ -389,3 +380,16 @@ int ffmpeg_OpenCodec( decoder_t *p_dec ) p_sys->b_delayed_open = false; return VLC_SUCCESS; } + +void ffmpeg_CloseCodec( decoder_t *p_dec ) +{ + decoder_sys_t *p_sys = p_dec->p_sys; + + if( p_sys->b_delayed_open ) + return; + + vlc_avcodec_lock(); + avcodec_close( p_sys->p_context ); + vlc_avcodec_unlock(); + msg_Dbg( p_dec, "ffmpeg codec (%s) stopped", p_sys->p_codec->name ); +}