diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-23 12:24:59 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-23 12:24:59 +0000 |
commit | e0840baae9fab20f7d94814abb01f71cc7ad28e1 (patch) | |
tree | f657fb4ca97df4233e07e062d1e1494c4e4f99c9 | |
parent | 3ac8704a9fa08c91f86982210430cafbc1e091d4 (diff) |
dec_video uninit
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1655 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r-- | dec_video.c | 30 | ||||
-rw-r--r-- | mplayer.c | 10 |
2 files changed, 36 insertions, 4 deletions
diff --git a/dec_video.c b/dec_video.c index ebbbc8b09b..93506329c0 100644 --- a/dec_video.c +++ b/dec_video.c @@ -140,6 +140,26 @@ int set_video_colors(sh_video_t *sh_video,char *item,int value){ 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 @@ switch(sh_video->codec->driver){ 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 @@ switch(sh_video->codec->driver){ break; } } - + sh_video->inited=1; return 1; } @@ -594,7 +594,12 @@ play_next_file: } #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 @@ goto_next_file: // don't jump here after ao/vo/getch initialization! ++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); |