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 );
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 );
+}
/* Initialize decoder */
int ffmpeg_OpenCodec( decoder_t *p_dec );
+void ffmpeg_CloseCodec( decoder_t *p_dec );
/*****************************************************************************
* Module descriptor help strings