summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-04-10 21:06:00 +0200
committerwm4 <wm4@nowhere>2013-04-10 21:32:46 +0200
commit9df2260506f825a05ecd500496260292ef2481aa (patch)
treed17e38880cf9d54272dc0de153ff8a0713598493
parent62daa08d3b9e32f6d7f81bae4407faab4347c90d (diff)
downloadmpv-9df2260506f825a05ecd500496260292ef2481aa.tar.bz2
mpv-9df2260506f825a05ecd500496260292ef2481aa.tar.xz
core: add --reset-on-next-file option
This option can be used to selectively reset settings when playing the next file in the playlist (i.e. restore mplayer and mplayer2 behavior). Might remove this option again should it turn out that nobody uses it.
-rw-r--r--DOCS/man/en/options.rst24
-rw-r--r--core/cfg-mplayer.h1
-rw-r--r--core/m_config.c16
-rw-r--r--core/m_config.h2
-rw-r--r--core/mplayer.c11
-rw-r--r--core/options.h2
6 files changed, 56 insertions, 0 deletions
diff --git a/DOCS/man/en/options.rst b/DOCS/man/en/options.rst
index b99c2428fb..fab682fdd5 100644
--- a/DOCS/man/en/options.rst
+++ b/DOCS/man/en/options.rst
@@ -1739,6 +1739,30 @@
--referrer=<string>
Specify a referrer path or URL for HTTP requests.
+--reset-on-next-file=<all|option1,option2,...>
+ Normally, mpv will try to keep all settings when playing the next file on
+ the playlist, even if they were changed by the user during playback. (This
+ behavior is the opposite of MPlayer's, which tries to reset all settings
+ when starting next file.)
+
+ This can be changed with this option. It accepts a list of options, and
+ mpv will reset the value of these options on playback start to the initial
+ value. The initial value is either the default value, or as set by the
+ config file or command line.
+
+ In some cases, this might not work as expected. For example, ``--volume``
+ will only be reset the volume if it's explicitly set in the config file
+ or the command line.
+
+ The special name ``all`` resets as many options as possible.
+
+ *EXAMPLE*:
+
+ - ``--reset-on-next-file=fullscreen,speed`` Reset fullscreen and playback
+ speed settings if they were changed during playback.
+ - ``--reset-on-next-file=all`` Try to reset all settings that were changed
+ during playback.
+
--reuse-socket
(udp:// only)
Allows a socket to be reused by other processes as soon as it is closed.
diff --git a/core/cfg-mplayer.h b/core/cfg-mplayer.h
index dd99e6c4bd..8e0563e380 100644
--- a/core/cfg-mplayer.h
+++ b/core/cfg-mplayer.h
@@ -297,6 +297,7 @@ const m_option_t common_opts[] = {
{"priority", &proc_priority, CONF_TYPE_STRING, 0, 0, 0, NULL},
#endif
OPT_FLAG("config", load_config, CONF_GLOBAL | CONF_NOCFG | CONF_PRE_PARSE),
+ OPT_STRINGLIST("reset-on-next-file", reset_options, CONF_GLOBAL),
// ------------------------- stream options --------------------
diff --git a/core/m_config.c b/core/m_config.c
index b6c15d3d9a..65d60bdab9 100644
--- a/core/m_config.c
+++ b/core/m_config.c
@@ -258,6 +258,22 @@ void m_config_leave_file_local(struct m_config *config)
}
}
+void m_config_mark_file_local(struct m_config *config, const char *opt)
+{
+ struct m_config_option *co = m_config_get_co(config, bstr0(opt));
+ if (co) {
+ ensure_backup(config, co);
+ } else {
+ mp_tmsg(MSGT_CFGPARSER, MSGL_ERR, "Option %s not found.\n", opt);
+ }
+}
+
+void m_config_mark_all_file_local(struct m_config *config)
+{
+ for (struct m_config_option *co = config->opts; co; co = co->next)
+ ensure_backup(config, co);
+}
+
// Given an option --opt, add --no-opt (if applicable).
static void add_negation_option(struct m_config *config,
struct m_config_option *parent,
diff --git a/core/m_config.h b/core/m_config.h
index 345141a72a..98b21c9bf9 100644
--- a/core/m_config.h
+++ b/core/m_config.h
@@ -97,6 +97,8 @@ void m_config_free(struct m_config *config);
void m_config_enter_file_local(struct m_config *config);
void m_config_leave_file_local(struct m_config *config);
+void m_config_mark_file_local(struct m_config *config, const char *opt);
+void m_config_mark_all_file_local(struct m_config *config);
/* Register some options to be used.
* \param config The config object.
diff --git a/core/mplayer.c b/core/mplayer.c
index 0a108cb514..7dbd4f59bb 100644
--- a/core/mplayer.c
+++ b/core/mplayer.c
@@ -3877,6 +3877,17 @@ static void play_current_file(struct MPContext *mpctx)
load_per_file_options(mpctx->mconfig, mpctx->playlist->current->params,
mpctx->playlist->current->num_params);
+ if (opts->reset_options) {
+ for (int n = 0; opts->reset_options[n]; n++) {
+ const char *opt = opts->reset_options[n];
+ if (strcmp(opt, "all") == 0) {
+ m_config_mark_all_file_local(mpctx->mconfig);
+ } else {
+ m_config_mark_file_local(mpctx->mconfig, opt);
+ }
+ }
+ }
+
// We must enable getch2 here to be able to interrupt network connection
// or cache filling
if (opts->consolecontrols && !opts->slave_mode) {
diff --git a/core/options.h b/core/options.h
index 080ca021d7..0f57381f30 100644
--- a/core/options.h
+++ b/core/options.h
@@ -43,6 +43,8 @@ typedef struct mp_vo_opts {
} mp_vo_opts;
typedef struct MPOpts {
+ char **reset_options;
+
char **audio_driver_list;
int fixed_vo;
char *mixer_device;