summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-08-31 18:10:11 +0200
committerwm4 <wm4@nowhere>2016-08-31 22:17:21 +0200
commitc55d85992078e465f9e0b7b6998ccdc5f5e77703 (patch)
treedb6a4939daa1c3c0b810710b5d268592a8c29262
parent2057209057555dc138422daa354fe8db816c629c (diff)
downloadmpv-c55d85992078e465f9e0b7b6998ccdc5f5e77703.tar.bz2
mpv-c55d85992078e465f9e0b7b6998ccdc5f5e77703.tar.xz
m_option: replace --no-video-aspect alias
Instead, add a hacky OPT_ASPECT option type, which only exists to accept a "no" parameter, which in combination with the "--no-..." handling code makes --no-video-aspect work again. We can also remove the code in m_config.c, which only existed to make "--no-aspect" (a deprecated alias) to work.
-rw-r--r--DOCS/man/options.rst10
-rw-r--r--options/m_config.c17
-rw-r--r--options/m_option.c63
-rw-r--r--options/m_option.h10
-rw-r--r--options/options.c3
5 files changed, 35 insertions, 68 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index f5a706940d..b4a49a75db 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -712,13 +712,14 @@ Video
This option has no effect if ``--video-unscaled`` option is used.
-``--video-aspect=<ratio>``
+``--video-aspect=<ratio|no>``
Override video aspect ratio, in case aspect information is incorrect or
missing in the file being played. See also ``--no-video-aspect``.
- Two values have special meaning:
+ These values have special meaning:
:0: disable aspect ratio handling, pretend the video has square pixels
+ :no: same as ``0``
:-1: use the video stream or container aspect (default)
But note that handling of these special values might change in the future.
@@ -727,10 +728,7 @@ Video
- ``--video-aspect=4:3`` or ``--video-aspect=1.3333``
- ``--video-aspect=16:9`` or ``--video-aspect=1.7777``
-
-``--no-video-aspect``
- Ignore aspect ratio information from video file and assume the video has
- square pixels. See also ``--video-aspect``.
+ - ``--no-video-aspect`` or ``--video-aspect=no``
``--video-aspect-method=<hybrid|bitstream|container>``
This sets the default video aspect determination method (if the aspect is
diff --git a/options/m_config.c b/options/m_config.c
index 4912b21cf6..b5cef17fd8 100644
--- a/options/m_config.c
+++ b/options/m_config.c
@@ -396,20 +396,6 @@ static void m_config_add_option(struct m_config *config,
if (arg->name[0]) // no own name -> hidden
MP_TARRAY_APPEND(config, config->opts, config->num_opts, co);
-
- if (co.opt->type == &m_option_type_alias) {
- const char *alias = (const char *)co.opt->priv;
- char no_alias[40];
- snprintf(no_alias, sizeof(no_alias), "no-%s", alias);
- if (m_config_get_co(config, bstr0(no_alias))) {
- struct m_option *new = talloc_zero(config, struct m_option);
- new->name = talloc_asprintf(config, "no-%s", co.name);
- new->priv = talloc_strdup(config, no_alias);
- new->type = &m_option_type_alias;
- new->offset = -1;
- m_config_add_option(config, NULL, NULL, NULL, new);
- }
- }
}
struct m_config_option *m_config_get_co(const struct m_config *config,
@@ -578,7 +564,8 @@ static struct m_config_option *m_config_find_negation_opt(struct m_config *confi
// Not all choice types have this value - if they don't, then parsing them
// will simply result in an error. Good enough.
if (co && co->opt->type != CONF_TYPE_FLAG &&
- co->opt->type != CONF_TYPE_CHOICE)
+ co->opt->type != CONF_TYPE_CHOICE &&
+ co->opt->type != &m_option_type_aspect)
co = NULL;
return co;
diff --git a/options/m_option.c b/options/m_option.c
index 45709b9c16..cc8d818eec 100644
--- a/options/m_option.c
+++ b/options/m_option.c
@@ -234,45 +234,6 @@ const m_option_type_t m_option_type_store = {
.set = store_set,
};
-// Same for float types
-
-#undef VAL
-#define VAL(x) (*(float *)(x))
-
-static int parse_store_float(struct mp_log *log, const m_option_t *opt,
- struct bstr name, struct bstr param, void *dst)
-{
- if (param.len == 0) {
- if (dst)
- VAL(dst) = opt->max;
- return 0;
- } else {
- mp_err(log, "Invalid parameter for %.*s flag: %.*s\n",
- BSTR_P(name), BSTR_P(param));
- return M_OPT_DISALLOW_PARAM;
- }
-}
-
-static int store_float_set(const m_option_t *opt, void *dst, struct mpv_node *src)
-{
- if (src->format != MPV_FORMAT_FLAG)
- return M_OPT_UNKNOWN;
- if (!src->u.flag)
- return M_OPT_INVALID;
- VAL(dst) = opt->max;
- return 1;
-}
-
-const m_option_type_t m_option_type_float_store = {
- // can only be activated
- .name = "Flag",
- .size = sizeof(float),
- .flags = M_OPT_TYPE_OPTIONAL_PARAM,
- .parse = parse_store_float,
- .copy = copy_opt,
- .set = store_float_set,
-};
-
// Integer
#undef VAL
@@ -1038,6 +999,30 @@ const m_option_type_t m_option_type_float = {
.get = float_get,
};
+static int parse_float_aspect(struct mp_log *log, const m_option_t *opt,
+ struct bstr name, struct bstr param, void *dst)
+{
+ if (bstr_equals0(param, "no")) {
+ if (dst)
+ VAL(dst) = 0.0f;
+ return 1;
+ }
+ return parse_float(log, opt, name, param, dst);
+}
+
+const m_option_type_t m_option_type_aspect = {
+ .name = "Aspect",
+ .size = sizeof(float),
+ .parse = parse_float_aspect,
+ .print = print_float,
+ .pretty_print = print_float_f3,
+ .copy = copy_opt,
+ .add = add_float,
+ .multiply = multiply_float,
+ .set = float_set,
+ .get = float_get,
+};
+
///////////// String
#undef VAL
diff --git a/options/m_option.h b/options/m_option.h
index c5385e4241..17c2d4e451 100644
--- a/options/m_option.h
+++ b/options/m_option.h
@@ -38,7 +38,6 @@ struct mpv_node;
// Simple types
extern const m_option_type_t m_option_type_flag;
extern const m_option_type_t m_option_type_store;
-extern const m_option_type_t m_option_type_float_store;
extern const m_option_type_t m_option_type_int;
extern const m_option_type_t m_option_type_int64;
extern const m_option_type_t m_option_type_intpair;
@@ -62,6 +61,7 @@ extern const m_option_type_t m_option_type_color;
extern const m_option_type_t m_option_type_geometry;
extern const m_option_type_t m_option_type_size_box;
extern const m_option_type_t m_option_type_channels;
+extern const m_option_type_t m_option_type_aspect;
extern const m_option_type_t m_option_type_node;
// Used internally by m_config.c
@@ -207,7 +207,6 @@ struct m_sub_options {
union m_option_value {
int flag; // not the C type "bool"!
int store;
- float float_store;
int int_;
int64_t int64;
int intpair[2];
@@ -562,10 +561,6 @@ extern const char m_option_path_separator;
OPT_GENERAL(int, optname, varname, flags, .max = value, \
.type = &m_option_type_store)
-#define OPT_FLOAT_STORE(optname, varname, flags, value) \
- OPT_GENERAL(float, optname, varname, flags, .max = value, \
- .type = &m_option_type_float_store)
-
#define OPT_STRINGLIST(...) \
OPT_GENERAL(char**, __VA_ARGS__, .type = &m_option_type_string_list)
@@ -667,6 +662,9 @@ extern const char m_option_path_separator;
#define OPT_TRACKCHOICE(name, var) \
OPT_CHOICE_OR_INT(name, var, 0, 0, 8190, ({"no", -2}, {"auto", -1}))
+#define OPT_ASPECT(...) \
+ OPT_GENERAL(float, __VA_ARGS__, .type = &m_option_type_aspect)
+
#define OPT_STRING_VALIDATE_(optname, varname, flags, validate_fn, ...) \
OPT_GENERAL(char*, optname, varname, flags, __VA_ARGS__, \
.priv = MP_EXPECT_TYPE(m_opt_string_validate_fn, validate_fn))
diff --git a/options/options.c b/options/options.c
index 92eb0fd9c5..7b0f3c43e1 100644
--- a/options/options.c
+++ b/options/options.c
@@ -395,8 +395,7 @@ const m_option_t mp_opts[] = {
// -1 means auto aspect (prefer container size until aspect change)
// 0 means square pixels
- OPT_FLOATRANGE("video-aspect", movie_aspect, 0, -1.0, 10.0),
- OPT_FLOAT_STORE("no-video-aspect", movie_aspect, 0, 0.0),
+ OPT_ASPECT("video-aspect", movie_aspect, 0, -1.0, 10.0),
OPT_CHOICE("video-aspect-method", aspect_method, 0,
({"hybrid", 0}, {"bitstream", 1}, {"container", 2})),