[MPlayer-cvslog] r29897 - trunk/mplayer.c

reimar subversion at mplayerhq.hu
Wed Nov 11 12:22:12 CET 2009


Author: reimar
Date: Wed Nov 11 12:22:12 2009
New Revision: 29897

Log:
Remember which subtitle was auto-selected for dvdnav due to -slang
and if it is unchanged re-apply -slang on stream reset.
This makes -slang work when used with menu navigation or in general
when the subtitle is not available for parts of the playback or the
subtitle stream ID changes during playback.

Modified:
   trunk/mplayer.c

Modified: trunk/mplayer.c
==============================================================================
--- trunk/mplayer.c	Wed Nov 11 12:19:50 2009	(r29896)
+++ trunk/mplayer.c	Wed Nov 11 12:22:12 2009	(r29897)
@@ -254,6 +254,10 @@ extern char *sub_demuxer_name; // overri
 int audio_id=-1;
 int video_id=-1;
 int dvdsub_id=-1;
+// this dvdsub_id was selected via slang
+// use this to allow dvdnav to follow -slang across stream resets,
+// in particular the subtitle ID for a language changes
+int dvdsub_lang_id;
 int vobsub_id=-1;
 char* audio_lang=NULL;
 char* dvdsub_lang=NULL;
@@ -1918,6 +1922,13 @@ static void mp_dvdnav_reset_stream (MPCo
     }
 
     audio_delay = 0.0f;
+    if (dvdsub_lang && dvdsub_id == dvdsub_lang_id) {
+        dvdsub_lang_id = mp_dvdnav_sid_from_lang(ctx->stream, dvdsub_lang);
+        if (dvdsub_lang_id != dvdsub_id) {
+            dvdsub_id = dvdsub_lang_id;
+            select_subtitle(ctx);
+        }
+    }
 
     /// clear all EOF related flags
     ctx->d_video->eof = ctx->d_audio->eof = ctx->stream->eof = 0;
@@ -3237,7 +3248,9 @@ if(mpctx->stream->type==STREAMTYPE_DVD){
 if(mpctx->stream->type==STREAMTYPE_DVDNAV){
   current_module="dvdnav lang->id";
   if(audio_id==-1) audio_id=mp_dvdnav_aid_from_lang(mpctx->stream,audio_lang);
-  if(dvdsub_lang && dvdsub_id==-1) dvdsub_id=mp_dvdnav_sid_from_lang(mpctx->stream,dvdsub_lang);
+  dvdsub_lang_id = -3;
+  if(dvdsub_lang && dvdsub_id==-1)
+    dvdsub_lang_id=dvdsub_id=mp_dvdnav_sid_from_lang(mpctx->stream,dvdsub_lang);
   // setup global sub numbering
   mpctx->global_sub_indices[SUB_SOURCE_DEMUX] = mpctx->global_sub_size; // the global # of the first demux-specific sub.
   mpctx->global_sub_size += mp_dvdnav_number_of_subs(mpctx->stream);


More information about the MPlayer-cvslog mailing list