changeset 1654:9d85b84e367e

dec_video uninit
author arpi
date Thu, 23 Aug 2001 12:24:59 +0000
parents a90e0d8eba7c
children 1d741dfa190c
files dec_video.c mplayer.c
diffstat 2 files changed, 36 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/dec_video.c	Thu Aug 23 11:54:55 2001 +0000
+++ b/dec_video.c	Thu Aug 23 12:24:59 2001 +0000
@@ -140,6 +140,26 @@
     return 0;
 }
 
+int uninit_video(sh_video_t *sh_video){
+    if(!sh_video->inited) return;
+    printf("uninit video: %d  \n",sh_video->codec->driver);
+    switch(sh_video->codec->driver){
+    case VFM_FFMPEG:
+        if (avcodec_close(&lavc_context) < 0)
+    	    mp_msg(MSGT_DECVIDEO,MSGL_ERR, "could not close codec\n");
+	break;
+
+    case VFM_MPEG:
+	mpeg2_free_image_buffers (picture);
+	break;
+    }
+    if(sh_video->our_out_buffer){
+	free(sh_video->our_out_buffer);
+	sh_video->our_out_buffer=NULL;
+    }
+    sh_video->inited=0;
+}
+
 int init_video(sh_video_t *sh_video){
 unsigned int out_fmt=sh_video->codec->outfmt[sh_video->outfmtidx];
 
@@ -280,9 +300,13 @@
    mp_msg(MSGT_DECVIDEO,MSGL_ERR,"MPlayer was compiled WITHOUT libavcodec support!\n");
    return 0;
 #else
+   static int avcodec_inited=0;
    mp_msg(MSGT_DECVIDEO,MSGL_V,"FFmpeg's libavcodec video codec\n");
-    avcodec_init();
-    avcodec_register_all();
+    if(!avcodec_inited){
+      avcodec_init();
+      avcodec_register_all();
+      avcodec_inited=1;
+    }
     lavc_codec = (AVCodec *)avcodec_find_decoder_by_name(sh_video->codec->dll);
     if(!lavc_codec){
 	mp_msg(MSGT_DECVIDEO,MSGL_ERR,"Can't find codec '%s' in libavcodec...\n",sh_video->codec->dll);
@@ -322,7 +346,7 @@
    break;
  }
 }
-
+  sh_video->inited=1;
   return 1;
 }
 
--- a/mplayer.c	Thu Aug 23 11:54:55 2001 +0000
+++ b/mplayer.c	Thu Aug 23 12:24:59 2001 +0000
@@ -594,7 +594,12 @@
   }
 #endif
 
-    demuxer=NULL; stream=NULL;
+    stream=NULL;
+    demuxer=NULL;
+    d_audio=NULL;
+    d_video=NULL;
+    sh_audio=NULL;
+    sh_video=NULL;
     
 #ifdef USE_LIBVO2
     current_module="vo2_new";
@@ -1809,6 +1814,9 @@
     ++curr_filename;
 if(curr_filename<num_filenames){
 
+  current_module="uninit_vcodec";
+  if(sh_video) uninit_video(sh_video);
+
   current_module="free_demuxer";
   if(demuxer) free_demuxer(demuxer);