diff options
-rw-r--r-- | cfg-common-opts.h | 10 | ||||
-rw-r--r-- | libmpdemux/demux_mpg.c | 4 | ||||
-rw-r--r-- | libmpdemux/demux_ogg.c | 5 | ||||
-rw-r--r-- | libmpdemux/demux_ts.c | 14 | ||||
-rw-r--r-- | mencoder.c | 16 | ||||
-rw-r--r-- | mplayer.c | 24 | ||||
-rw-r--r-- | options.h | 2 | ||||
-rw-r--r-- | subreader.c | 8 |
8 files changed, 41 insertions, 42 deletions
diff --git a/cfg-common-opts.h b/cfg-common-opts.h index e969acd8ee..84b4bdeaf3 100644 --- a/cfg-common-opts.h +++ b/cfg-common-opts.h @@ -60,8 +60,6 @@ #endif /* CONFIG_DVDREAD */ OPT_INTPAIR("chapter", chapterrange, 0), OPT_INTRANGE("edition", edition_id, 0, -1, 8190), - {"alang", &audio_lang, CONF_TYPE_STRING, 0, 0, 0, NULL}, - {"slang", &dvdsub_lang, CONF_TYPE_STRING, 0, 0, 0, NULL}, {"dvdauth", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, {"dvdkey", "libcss is obsolete. Try libdvdread instead.\n", CONF_TYPE_PRINT, CONF_NOCFG, 0, 0, NULL}, @@ -146,6 +144,10 @@ OPT_INTRANGE("sid", sub_id, 0, -2, 8190), OPT_FLAG_CONSTANTS("nosub", sub_id, 0, -1, -2), OPT_FLAG_CONSTANTS("novideo", video_id, 0, -1, -2), + OPT_FLAG_CONSTANTS("sound", audio_id, 0, -2, -1), + OPT_FLAG_CONSTANTS("nosound", audio_id, 0, -1, -2), + OPT_STRING("alang", audio_lang, 0), + OPT_STRING("slang", sub_lang, 0), { "hr-mp3-seek", &hr_mp3_seek, CONF_TYPE_FLAG, 0, 0, 1, NULL }, { "nohr-mp3-seek", &hr_mp3_seek, CONF_TYPE_FLAG, 0, 1, 0, NULL}, @@ -222,10 +224,6 @@ {"stereo", &fakemono, CONF_TYPE_INT, CONF_RANGE, 0, 2, NULL}, #endif - // disable audio - OPT_FLAG_CONSTANTS("sound", audio_id, 0, -2, -1), - OPT_FLAG_CONSTANTS("nosound", audio_id, 0, -1, -2), - {"af*", &af_cfg.list, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL}, {"af-adv", (void *) audio_filter_conf, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, diff --git a/libmpdemux/demux_mpg.c b/libmpdemux/demux_mpg.c index 5801e5f1fd..ddc5d218dd 100644 --- a/libmpdemux/demux_mpg.c +++ b/libmpdemux/demux_mpg.c @@ -26,6 +26,7 @@ #include "config.h" #include "mp_msg.h" +#include "options.h" #include "stream/stream.h" #include "demuxer.h" @@ -57,7 +58,6 @@ typedef struct mpg_demuxer { int a_stream_ids[MAX_A_STREAMS]; } mpg_demuxer_t; -extern char* dvdsub_lang; static int mpeg_pts_error=0; off_t ps_probe = 0; @@ -482,7 +482,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){ if(demux->sub->id > -1) demux->sub->id &= 0x1F; - if(!dvdsub_lang && demux->sub->id == -1) + if(!demux->opts->sub_lang && demux->sub->id == -1) demux->sub->id = aid; if(demux->sub->id==aid){ ds=demux->sub; diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c index e872ad5156..4234eb9498 100644 --- a/libmpdemux/demux_ogg.c +++ b/libmpdemux/demux_ogg.c @@ -163,8 +163,6 @@ typedef struct ogg_demuxer { #define PACKET_LEN_BITS2 0x02 #define PACKET_IS_SYNCPOINT 0x08 -extern char *dvdsub_lang, *audio_lang; - //-------- subtitle support - should be moved to decoder layer, and queue // - subtitles up in demuxer buffer... @@ -449,7 +447,8 @@ static void demux_ogg_check_comments(demuxer_t *d, ogg_stream_t *os, sh->lang = strdup(val); } // check for -slang if subs are uninitialized yet - if (os->text && d->sub->id < 0 && demux_ogg_check_lang(val, dvdsub_lang)) { + if (os->text && d->sub->id < 0 + && demux_ogg_check_lang(val, d->opts->sub_lang)) { d->sub->id = index; d->opts->sub_id = index; mp_msg(MSGT_DEMUX, MSGL_V, diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c index c0dd2e632d..adef44913c 100644 --- a/libmpdemux/demux_ts.c +++ b/libmpdemux/demux_ts.c @@ -28,6 +28,7 @@ #include "config.h" #include "mp_msg.h" +#include "options.h" #include "stream/stream.h" #include "demuxer.h" @@ -60,7 +61,6 @@ int ts_prog; int ts_keep_broken=0; off_t ts_probe = 0; int audio_substream_id = -1; -extern char *dvdsub_lang, *audio_lang; //for -alang typedef enum { @@ -1007,17 +1007,17 @@ static demuxer_t *demux_open_ts(demuxer_t * demuxer) params.prog = ts_prog; params.probe = ts_probe; - if(dvdsub_lang != NULL) + if(demuxer->opts->sub_lang != NULL) { - strncpy(params.slang, dvdsub_lang, 3); + strncpy(params.slang, demuxer->opts->sub_lang, 3); params.slang[3] = 0; } else memset(params.slang, 0, 4); - if(audio_lang != NULL) + if(demuxer->opts->audio_lang != NULL) { - strncpy(params.alang, audio_lang, 3); + strncpy(params.alang, demuxer->opts->audio_lang, 3); params.alang[3] = 0; } else @@ -2937,10 +2937,10 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet, int asgn = 0; uint8_t *lang; - if(dvdsub_lang) + if(demuxer->opts->sub_lang) { if ((lang = pid_lang_from_pmt(priv, pid))) - asgn = (strncmp(lang, dvdsub_lang, 3) == 0); + asgn = (strncmp(lang, demuxer->opts->sub_lang, 3) == 0); } else //no language specified with -slang asgn = 1; diff --git a/mencoder.c b/mencoder.c index dc3d8700a3..63c4e8bdd1 100644 --- a/mencoder.c +++ b/mencoder.c @@ -125,8 +125,6 @@ float stream_cache_seek_min_percent=50.0; #endif int vobsub_id=-1; -char* audio_lang=NULL; -char* dvdsub_lang=NULL; static char* spudec_ifo=NULL; static char** audio_codec_list=NULL; // override audio codec @@ -735,15 +733,15 @@ play_next_file: #ifdef CONFIG_DVDREAD if(stream->type==STREAMTYPE_DVD){ - if(audio_lang && opts.audio_id==-1) opts.audio_id=dvd_aid_from_lang(stream,audio_lang); - if(dvdsub_lang && opts.sub_id==-1) opts.sub_id=dvd_sid_from_lang(stream,dvdsub_lang); + if(opts.audio_lang && opts.audio_id==-1) opts.audio_id=dvd_aid_from_lang(stream,opts.audio_lang); + if(opts.sub_lang && opts.sub_id==-1) opts.sub_id=dvd_sid_from_lang(stream,opts.sub_lang); } #endif #ifdef CONFIG_DVDNAV if(stream->type==STREAMTYPE_DVDNAV){ - if(audio_lang && opts.audio_id==-1) opts.audio_id=mp_dvdnav_aid_from_lang(stream,audio_lang); - if(dvdsub_lang && opts.sub_id==-1) opts.sub_id=mp_dvdnav_sid_from_lang(stream,dvdsub_lang); + if(opts.audio_lang && opts.audio_id==-1) opts.audio_id=mp_dvdnav_aid_from_lang(stream,opts.audio_lang); + if(opts.sub_lang && opts.sub_id==-1) opts.sub_id=mp_dvdnav_sid_from_lang(stream,opts.sub_lang); } #endif @@ -768,10 +766,10 @@ if(stream->type==STREAMTYPE_DVDNAV){ demuxer_switch_video(demuxer, opts.video_id); } } - select_audio(demuxer, opts.audio_id, audio_lang); + select_audio(demuxer, opts.audio_id, opts.audio_lang); - if (opts.sub_id < -1 && dvdsub_lang) - opts.sub_id = demuxer_sub_track_by_lang(demuxer, dvdsub_lang); + if (opts.sub_id < -1 && opts.sub_lang) + opts.sub_id = demuxer_sub_track_by_lang(demuxer, opts.sub_lang); if (opts.sub_id < -1) opts.sub_id = demuxer_default_sub_track(demuxer); @@ -313,8 +313,6 @@ extern char *sub_demuxer_name; // override sub demuxer // 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; static char* spudec_ifo=NULL; int forced_subs_only=0; int file_filter=1; @@ -1915,8 +1913,8 @@ static void select_subtitle(MPContext *mpctx) mpctx->global_sub_pos = mpctx->global_sub_indices[SUB_SOURCE_SUBS]; } else if (opts->sub_id == -1 && mpctx->global_sub_indices[SUB_SOURCE_DEMUX] >= 0) { // finally select subs by language and container hints - if (opts->sub_id == -1 && dvdsub_lang) - opts->sub_id = demuxer_sub_track_by_lang(mpctx->demuxer, dvdsub_lang); + if (opts->sub_id == -1 && opts->sub_lang) + opts->sub_id = demuxer_sub_track_by_lang(mpctx->demuxer, opts->sub_lang); if (opts->sub_id == -1) opts->sub_id = demuxer_default_sub_track(mpctx->demuxer); if (opts->sub_id >= 0) @@ -1985,8 +1983,8 @@ static void mp_dvdnav_reset_stream (MPContext *ctx) { audio_delay = 0.0f; ctx->global_sub_size = ctx->global_sub_indices[SUB_SOURCE_DEMUX] + mp_dvdnav_number_of_subs(ctx->stream); - if (dvdsub_lang && opts->sub_id == dvdsub_lang_id) { - dvdsub_lang_id = mp_dvdnav_sid_from_lang(ctx->stream, dvdsub_lang); + if (opts->sub_lang && opts->sub_id == dvdsub_lang_id) { + dvdsub_lang_id = mp_dvdnav_sid_from_lang(ctx->stream, opts->sub_lang); if (dvdsub_lang_id != opts->sub_id) { opts->sub_id = dvdsub_lang_id; select_subtitle(ctx); @@ -3530,7 +3528,7 @@ if (edl_output_filename) { } if(vo_vobsub){ mpctx->initialized_flags|=INITIALIZED_VOBSUB; - vobsub_set_from_lang(vo_vobsub, dvdsub_lang); + vobsub_set_from_lang(vo_vobsub, opts->sub_lang); mp_property_do("sub_forced_only", M_PROPERTY_SET, &forced_subs_only, mpctx); // setup global sub numbering @@ -3622,8 +3620,8 @@ if(stream_dump_type==5){ #ifdef CONFIG_DVDREAD if(mpctx->stream->type==STREAMTYPE_DVD){ current_module="dvd lang->id"; - if(opts->audio_id==-1) opts->audio_id=dvd_aid_from_lang(mpctx->stream,audio_lang); - if(dvdsub_lang && opts->sub_id==-1) opts->sub_id=dvd_sid_from_lang(mpctx->stream,dvdsub_lang); + if(opts->audio_id==-1) opts->audio_id=dvd_aid_from_lang(mpctx->stream,opts->audio_lang); + if(opts->sub_lang && opts->sub_id==-1) opts->sub_id=dvd_sid_from_lang(mpctx->stream,opts->sub_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 += dvd_number_of_subs(mpctx->stream); @@ -3634,10 +3632,10 @@ if(mpctx->stream->type==STREAMTYPE_DVD){ #ifdef CONFIG_DVDNAV if(mpctx->stream->type==STREAMTYPE_DVDNAV){ current_module="dvdnav lang->id"; - if(opts->audio_id==-1) opts->audio_id=mp_dvdnav_aid_from_lang(mpctx->stream,audio_lang); + if(opts->audio_id==-1) opts->audio_id=mp_dvdnav_aid_from_lang(mpctx->stream,opts->audio_lang); dvdsub_lang_id = -3; - if(dvdsub_lang && opts->sub_id==-1) - dvdsub_lang_id = opts->sub_id = mp_dvdnav_sid_from_lang(mpctx->stream,dvdsub_lang); + if(opts->sub_lang && opts->sub_id==-1) + dvdsub_lang_id = opts->sub_id = mp_dvdnav_sid_from_lang(mpctx->stream,opts->sub_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); @@ -3781,7 +3779,7 @@ if (ts_prog) { mp_property_do("switch_program", M_PROPERTY_SET, &tmp, mpctx); } // select audio stream -select_audio(mpctx->demuxer, opts->audio_id, audio_lang); +select_audio(mpctx->demuxer, opts->audio_id, opts->audio_lang); // DUMP STREAMS: if((stream_dump_type)&&(stream_dump_type<4)){ @@ -39,6 +39,8 @@ typedef struct MPOpts { int audio_id; int video_id; int sub_id; + char *audio_lang; + char *sub_lang; float playback_speed; struct m_obj_settings *vf_settings; int softzoom; diff --git a/subreader.c b/subreader.c index 394cc414cf..f2b52823c2 100644 --- a/subreader.c +++ b/subreader.c @@ -53,8 +53,6 @@ int flip_hebrew = 1; ///flip subtitles using fribidi int fribidi_flip_commas = 0; ///flip comma when fribidi is used #endif -extern char* dvdsub_lang; - /* Maximal length of line of a subtitle */ #define LINE_LEN 1000 static float mpsub_position=0; @@ -1888,11 +1886,17 @@ char** sub_filenames(const char* path, char *fname) strcpy_strip_ext(f_fname_noext, f_fname); strcpy_trim(f_fname_trim, f_fname_noext); + /* The code using sub language here is broken - it assumes strict + * "videoname languagename" syntax for the subtitle file, which is + * very unlikely to match especially if language name uses "en,de" + * syntax... */ tmp_sub_id = NULL; +#if 0 if (dvdsub_lang && !whiteonly(dvdsub_lang)) { tmp_sub_id = malloc(strlen(dvdsub_lang)+1); strcpy_trim(tmp_sub_id, dvdsub_lang); } +#endif // 0 = nothing // 1 = any subtitle file |