summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cfg-common-opts.h10
-rw-r--r--libmpdemux/demux_mpg.c4
-rw-r--r--libmpdemux/demux_ogg.c5
-rw-r--r--libmpdemux/demux_ts.c14
-rw-r--r--mencoder.c16
-rw-r--r--mplayer.c24
-rw-r--r--options.h2
-rw-r--r--subreader.c8
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);
diff --git a/mplayer.c b/mplayer.c
index beb1af5bc2..88e9167d88 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -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)){
diff --git a/options.h b/options.h
index 22bbff3915..adc9b11138 100644
--- a/options.h
+++ b/options.h
@@ -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