summaryrefslogtreecommitdiffstats
path: root/mplayer.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-06 16:16:53 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-10-06 16:16:53 +0000
commitefe3639266f775ee804341efb5b64dc5269009d3 (patch)
treecfb197b1d313eed89d55222af4b6e2f8e4bba10e /mplayer.c
parent87a335019fb8b9707613f90ce92b79a98eae2093 (diff)
downloadmpv-efe3639266f775ee804341efb5b64dc5269009d3.tar.bz2
mpv-efe3639266f775ee804341efb5b64dc5269009d3.tar.xz
uninit cleanup again... thx to Nilmoni Deb for bugreport
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7622 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'mplayer.c')
-rw-r--r--mplayer.c112
1 files changed, 57 insertions, 55 deletions
diff --git a/mplayer.c b/mplayer.c
index c0bfa83d7c..aafba8cda2 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -244,6 +244,8 @@ float sub_last_pts = -303;
static stream_t* stream=NULL;
static demuxer_t *demuxer=NULL;
+static sh_audio_t *sh_audio=NULL;
+static sh_video_t *sh_video=NULL;
char* current_module=NULL; // for debugging
@@ -265,12 +267,13 @@ static unsigned int inited_flags=0;
#define INITED_AO 2
#define INITED_GUI 4
#define INITED_GETCH2 8
-#define INITED_LIRC 16
#define INITED_SPUDEC 32
#define INITED_STREAM 64
#define INITED_INPUT 128
#define INITED_VOBSUB 256
-#define INITED_DEMUXER 512
+#define INITED_DEMUXER 512
+#define INITED_ACODEC 1024
+#define INITED_VCODEC 2048
#define INITED_ALL 0xFFFF
static void uninit_player(unsigned int mask){
@@ -278,6 +281,27 @@ static void uninit_player(unsigned int mask){
mp_msg(MSGT_CPLAYER,MSGL_DBG2,"\n*** uninit(0x%X)\n",mask);
+ if(mask&INITED_ACODEC){
+ inited_flags&=~INITED_ACODEC;
+ current_module="uninit_acodec";
+ if(sh_audio) uninit_audio(sh_audio);
+ sh_audio=NULL;
+ }
+
+ if(mask&INITED_VCODEC){
+ inited_flags&=~INITED_VCODEC;
+ current_module="uninit_vcodec";
+ if(sh_video) uninit_video(sh_video);
+ sh_video=NULL;
+ }
+
+ if(mask&INITED_DEMUXER){
+ inited_flags&=~INITED_DEMUXER;
+ current_module="free_demuxer";
+ if(demuxer) free_demuxer(demuxer);
+ demuxer=NULL;
+ }
+
// kill the cache process:
if(mask&INITED_STREAM){
inited_flags&=~INITED_STREAM;
@@ -286,12 +310,6 @@ static void uninit_player(unsigned int mask){
stream=NULL;
}
- if(mask&INITED_DEMUXER){
- current_module="uninit_demuxer";
- if(demuxer) free_demuxer(demuxer);
- demuxer=NULL;
- }
-
if(mask&INITED_VO){
inited_flags&=~INITED_VO;
current_module="uninit_vo";
@@ -311,7 +329,7 @@ static void uninit_player(unsigned int mask){
if(mask&INITED_VOBSUB){
inited_flags&=~INITED_VOBSUB;
current_module="uninit_vobsub";
- vobsub_close(vo_vobsub);
+ if(vo_vobsub) vobsub_close(vo_vobsub);
vo_vobsub=NULL;
}
@@ -322,6 +340,18 @@ static void uninit_player(unsigned int mask){
vo_spudec=NULL;
}
+#ifdef USE_SUB
+ if ( subtitles )
+ {
+ current_module="sub_free";
+ sub_free( subtitles );
+ if ( sub_name ) free( sub_name );
+ sub_name=NULL;
+ vo_sub=NULL;
+ subtitles=NULL;
+ }
+#endif
+
if(mask&INITED_AO){
inited_flags&=~INITED_AO;
current_module="uninit_ao";
@@ -470,10 +500,6 @@ static demux_stream_t *d_audio=NULL;
static demux_stream_t *d_video=NULL;
static demux_stream_t *d_dvdsub=NULL;
-static sh_audio_t *sh_audio=NULL;
-static sh_video_t *sh_video=NULL;
-
-
// for multifile support:
play_tree_iter_t* playtree_iter = NULL;
@@ -832,8 +858,10 @@ if(!use_stdin && !slave_mode){
vo_vobsub=vobsub_open(buf,spudec_ifo,0,&vo_spudec);
free(buf);
}
- if(vo_vobsub)
+ if(vo_vobsub){
sub_auto=0; // don't do autosub for textsubs if vobsub found
+ inited_flags|=INITED_VOBSUB;
+ }
//============ Open & Sync STREAM --- fork cache2 ====================
@@ -956,7 +984,6 @@ current_module="demux_open";
demuxer=demux_open(stream,file_format,audio_id,video_id,dvdsub_id);
if(!demuxer) goto goto_next_file; // exit_player(MSGTR_Exit_error); // ERROR
-
inited_flags|=INITED_DEMUXER;
current_module="demux_open2";
@@ -1112,7 +1139,8 @@ if(sh_audio){
mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
if(!init_best_audio_codec(sh_audio,audio_codec_list,audio_fm_list)){
sh_audio=d_audio->sh=NULL; // failed to init :(
- }
+ } else
+ inited_flags|=INITED_ACODEC;
mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
}
@@ -1142,11 +1170,14 @@ init_best_video_codec(sh_video,video_codec_list,video_fm_list);
mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
if(!sh_video->inited){
+ uninit_player(INITED_VO);
if(!sh_audio) goto goto_next_file;
sh_video = d_video->sh = NULL;
goto main; // exit_player(MSGTR_Exit_error);
}
+inited_flags|=INITED_VCODEC;
+
if(auto_quality>0){
// Auto quality option enabled
output_quality=get_video_quality_max(sh_video);
@@ -1245,6 +1276,7 @@ if(sh_audio){
sh_audio->sample_format,0))){
// FAILED:
mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CannotInitAO);
+ uninit_player(INITED_ACODEC); // close codec
sh_audio=d_audio->sh=NULL; // -> nosound
} else {
// SUCCESS:
@@ -1267,8 +1299,9 @@ if(sh_audio){
ao_data.samplerate, ao_data.channels, ao_data.format,
audio_out_format_bits(ao_data.format)/8, /* ao_data.bps, */
ao_data.outburst*4, ao_data.buffersize)){
- mp_msg(MSGT_CPLAYER,MSGL_ERR,"Couldn't find matching filter / ao format, -> nosound\n");
- sh_audio=d_audio->sh=NULL; // -> nosound
+ mp_msg(MSGT_CPLAYER,MSGL_ERR,"Couldn't find matching filter / ao format!\n");
+// uninit_player(INITED_ACODEC|INITED_AO); // close codec & ao
+// sh_audio=d_audio->sh=NULL; // -> nosound
}
#endif
}
@@ -1284,14 +1317,14 @@ if(!sh_audio){
if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused audio chunks\n",d_audio->packs);
ds_free_packs(d_audio); // free buffered chunks
d_audio->id=-2; // do not read audio chunks
- uninit_player(INITED_AO); // close device
+ //uninit_player(INITED_AO); // close device
}
if(!sh_video){
mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_Video_NoVideo);
if(verbose) mp_msg(MSGT_CPLAYER,MSGL_V,"Freeing %d unused video chunks\n",d_video->packs);
ds_free_packs(d_video);
d_video->id=-2;
- uninit_player(INITED_VO);
+ //uninit_player(INITED_VO);
}
if (!sh_video && !sh_audio)
@@ -2640,7 +2673,7 @@ if(benchmark){
}
// time to uninit all, except global stuff:
-uninit_player(INITED_ALL-(INITED_GUI+INITED_LIRC+INITED_INPUT));
+uninit_player(INITED_ALL-(INITED_GUI+INITED_INPUT));
if(eof == PT_NEXT_ENTRY || eof == PT_PREV_ENTRY) {
eof = eof == PT_NEXT_ENTRY ? 1 : -1;
@@ -2687,45 +2720,14 @@ while(playtree_iter != NULL) {
if(use_gui || playtree_iter != NULL){
-#ifdef HAVE_FREETYPE
- current_module="uninit_font";
- if (vo_font) free_font_desc(vo_font);
- vo_font = NULL;
-#endif
-
- current_module="uninit_acodec";
- if(sh_audio) uninit_audio(sh_audio);
- sh_audio=NULL;
-
- current_module="uninit_vcodec";
- if(sh_video) uninit_video(sh_video);
- sh_video=NULL;
-
- current_module="free_demuxer";
- if(demuxer) free_demuxer(demuxer);
- demuxer=NULL;
-
- current_module="free_stream";
- if(stream) free_stream(stream);
- stream=NULL;
-
-#ifdef USE_SUB
- current_module="sub_free";
- if ( subtitles )
- {
- sub_free( subtitles );
- if ( sub_name ) free( sub_name );
- sub_name=NULL;
- vo_sub=NULL;
- subtitles=NULL;
- }
-#endif
-
eof = 0;
goto play_next_file;
}
#ifdef HAVE_FREETYPE
+current_module="uninit_font";
+if (vo_font) free_font_desc(vo_font);
+vo_font = NULL;
done_freetype();
#endif