]> git.sesse.net Git - vlc/commitdiff
avcodec: close acceleration back-end after the context
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 13 Sep 2014 10:05:35 +0000 (13:05 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 13 Sep 2014 11:08:09 +0000 (14:08 +0300)
modules/codec/avcodec/avcodec.c
modules/codec/avcodec/avcodec.h
modules/codec/avcodec/video.c

index fb83b5e382c1d0c80f5c4e09228447cb891cdf20..88c21dad754d06f86ca335e2f12539b9977ff273 100644 (file)
@@ -333,22 +333,13 @@ 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 );
@@ -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 );
+}
index 43e26376d2ad8be3e8a2d1e96020bb522cfbc144..b187169657cc3c56e1aae9e2c3f6d67fed932a83 100644 (file)
@@ -55,6 +55,7 @@ int InitSubtitleDec( decoder_t *, AVCodecContext *, const AVCodec * );
 
 /* Initialize decoder */
 int ffmpeg_OpenCodec( decoder_t *p_dec );
+void ffmpeg_CloseCodec( decoder_t *p_dec );
 
 /*****************************************************************************
  * Module descriptor help strings
index 806c2dfba886d74ecbc3f8041c256f032237ffdb..a54273205bea48410f2cb708bd72befab20a7f34 100644 (file)
@@ -819,6 +819,8 @@ void EndVideoDec( decoder_t *p_dec )
 
     wait_mt( p_sys );
 
+    ffmpeg_CloseCodec( p_dec );
+
     if( p_sys->p_ff_pic )
         avcodec_free_frame( &p_sys->p_ff_pic );