]> git.sesse.net Git - vlc/blobdiff - modules/codec/avcodec/avcodec.c
vout: remove unimplemented GET_OPENGL controls
[vlc] / modules / codec / avcodec / avcodec.c
index fb83b5e382c1d0c80f5c4e09228447cb891cdf20..73e7ca425260360656a2f217de592c42087adc0b 100644 (file)
@@ -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 );
+}