aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--find_sub.c3
-rw-r--r--mplayer.c24
-rw-r--r--subreader.c13
-rw-r--r--subreader.h1
4 files changed, 34 insertions, 7 deletions
diff --git a/find_sub.c b/find_sub.c
index 1c022efc4c..06e396c6d0 100644
--- a/find_sub.c
+++ b/find_sub.c
@@ -25,6 +25,9 @@ static int nosub_range_end=-1;
void find_sub(subtitle* subtitles,int key){
int i,j;
+
+ if ( !subtitles ) return;
+
if(vo_sub){
if(key>=vo_sub->start && key<=vo_sub->end) return; // OK!
} else {
diff --git a/mplayer.c b/mplayer.c
index fb688e2d27..57b2907620 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -663,13 +663,17 @@ play_next_file:
usleep(20000);
EventHandling();
}
- if(mplShMem->FilenameChanged){
- filename=mplShMem->Filename;
- }
+
#ifdef USE_SUB
- sub_name=NULL;
- if ( mplShMem->SubtitleChanged ) sub_name=mplShMem->Subtitlename;
+ if ( mplShMem->SubtitleChanged || !mplShMem->FilenameChanged )
+ { sub_name=mplShMem->Subtitlename; mplShMem->SubtitleChanged=0; }
#endif
+
+ if ( mplShMem->FilenameChanged || !filename )
+ {
+ filename=mplShMem->Filename;
+ mplShMem->FilenameChanged=0;
+ }
}
#endif
@@ -2178,7 +2182,15 @@ if(use_gui || ++curr_filename<num_filenames){
current_module="free_stream";
if(stream) free_stream(stream);
-
+
+ current_module="sub_free";
+ if ( subtitles )
+ {
+ sub_free( subtitles );
+ sub_name=NULL;
+ vo_sub=NULL;
+ }
+
video_out=NULL;
audio_out=NULL;
diff --git a/subreader.c b/subreader.c
index 05512a5397..857bf094f9 100644
--- a/subreader.c
+++ b/subreader.c
@@ -802,7 +802,18 @@ void dump_mpsub(subtitle* subs){
printf ("Subtitles dumped in \'dump.mpsub\'.\n");
}
-
+void sub_free( subtitle * subs )
+{
+ int i;
+
+ if ( !subs ) return;
+
+ sub_num=0;
+ sub_errs=0;
+ for ( i=0;i<subs->lines;i++ ) free( subs->text[i] );
+ free( subs );
+ subs=NULL;
+}
#ifdef DUMPSUBS
int main(int argc, char **argv) { // for testing
diff --git a/subreader.h b/subreader.h
index f73ed3983f..b3c7fc8c0b 100644
--- a/subreader.h
+++ b/subreader.h
@@ -37,5 +37,6 @@ typedef struct {
subtitle* sub_read_file (char *filename);
char * sub_filename(char *path, char * fname );
void list_sub_file(subtitle* subs);
+void sub_free( subtitle * subs );
#endif