mirror of https://github.com/mpv-player/mpv
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.
This commit is contained in:
parent
2057209057
commit
c55d859920
|
@ -712,13 +712,14 @@ Video
|
||||||
|
|
||||||
This option has no effect if ``--video-unscaled`` option is used.
|
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
|
Override video aspect ratio, in case aspect information is incorrect or
|
||||||
missing in the file being played. See also ``--no-video-aspect``.
|
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
|
:0: disable aspect ratio handling, pretend the video has square pixels
|
||||||
|
:no: same as ``0``
|
||||||
:-1: use the video stream or container aspect (default)
|
:-1: use the video stream or container aspect (default)
|
||||||
|
|
||||||
But note that handling of these special values might change in the future.
|
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=4:3`` or ``--video-aspect=1.3333``
|
||||||
- ``--video-aspect=16:9`` or ``--video-aspect=1.7777``
|
- ``--video-aspect=16:9`` or ``--video-aspect=1.7777``
|
||||||
|
- ``--no-video-aspect`` or ``--video-aspect=no``
|
||||||
``--no-video-aspect``
|
|
||||||
Ignore aspect ratio information from video file and assume the video has
|
|
||||||
square pixels. See also ``--video-aspect``.
|
|
||||||
|
|
||||||
``--video-aspect-method=<hybrid|bitstream|container>``
|
``--video-aspect-method=<hybrid|bitstream|container>``
|
||||||
This sets the default video aspect determination method (if the aspect is
|
This sets the default video aspect determination method (if the aspect is
|
||||||
|
|
|
@ -396,20 +396,6 @@ static void m_config_add_option(struct m_config *config,
|
||||||
|
|
||||||
if (arg->name[0]) // no own name -> hidden
|
if (arg->name[0]) // no own name -> hidden
|
||||||
MP_TARRAY_APPEND(config, config->opts, config->num_opts, co);
|
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,
|
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
|
// Not all choice types have this value - if they don't, then parsing them
|
||||||
// will simply result in an error. Good enough.
|
// will simply result in an error. Good enough.
|
||||||
if (co && co->opt->type != CONF_TYPE_FLAG &&
|
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;
|
co = NULL;
|
||||||
|
|
||||||
return co;
|
return co;
|
||||||
|
|
|
@ -234,45 +234,6 @@ const m_option_type_t m_option_type_store = {
|
||||||
.set = store_set,
|
.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
|
// Integer
|
||||||
|
|
||||||
#undef VAL
|
#undef VAL
|
||||||
|
@ -1038,6 +999,30 @@ const m_option_type_t m_option_type_float = {
|
||||||
.get = float_get,
|
.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
|
///////////// String
|
||||||
|
|
||||||
#undef VAL
|
#undef VAL
|
||||||
|
|
|
@ -38,7 +38,6 @@ struct mpv_node;
|
||||||
// Simple types
|
// Simple types
|
||||||
extern const m_option_type_t m_option_type_flag;
|
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_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_int;
|
||||||
extern const m_option_type_t m_option_type_int64;
|
extern const m_option_type_t m_option_type_int64;
|
||||||
extern const m_option_type_t m_option_type_intpair;
|
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_geometry;
|
||||||
extern const m_option_type_t m_option_type_size_box;
|
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_channels;
|
||||||
|
extern const m_option_type_t m_option_type_aspect;
|
||||||
extern const m_option_type_t m_option_type_node;
|
extern const m_option_type_t m_option_type_node;
|
||||||
|
|
||||||
// Used internally by m_config.c
|
// Used internally by m_config.c
|
||||||
|
@ -207,7 +207,6 @@ struct m_sub_options {
|
||||||
union m_option_value {
|
union m_option_value {
|
||||||
int flag; // not the C type "bool"!
|
int flag; // not the C type "bool"!
|
||||||
int store;
|
int store;
|
||||||
float float_store;
|
|
||||||
int int_;
|
int int_;
|
||||||
int64_t int64;
|
int64_t int64;
|
||||||
int intpair[2];
|
int intpair[2];
|
||||||
|
@ -562,10 +561,6 @@ extern const char m_option_path_separator;
|
||||||
OPT_GENERAL(int, optname, varname, flags, .max = value, \
|
OPT_GENERAL(int, optname, varname, flags, .max = value, \
|
||||||
.type = &m_option_type_store)
|
.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(...) \
|
#define OPT_STRINGLIST(...) \
|
||||||
OPT_GENERAL(char**, __VA_ARGS__, .type = &m_option_type_string_list)
|
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) \
|
#define OPT_TRACKCHOICE(name, var) \
|
||||||
OPT_CHOICE_OR_INT(name, var, 0, 0, 8190, ({"no", -2}, {"auto", -1}))
|
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, ...) \
|
#define OPT_STRING_VALIDATE_(optname, varname, flags, validate_fn, ...) \
|
||||||
OPT_GENERAL(char*, optname, varname, flags, __VA_ARGS__, \
|
OPT_GENERAL(char*, optname, varname, flags, __VA_ARGS__, \
|
||||||
.priv = MP_EXPECT_TYPE(m_opt_string_validate_fn, validate_fn))
|
.priv = MP_EXPECT_TYPE(m_opt_string_validate_fn, validate_fn))
|
||||||
|
|
|
@ -395,8 +395,7 @@ const m_option_t mp_opts[] = {
|
||||||
|
|
||||||
// -1 means auto aspect (prefer container size until aspect change)
|
// -1 means auto aspect (prefer container size until aspect change)
|
||||||
// 0 means square pixels
|
// 0 means square pixels
|
||||||
OPT_FLOATRANGE("video-aspect", movie_aspect, 0, -1.0, 10.0),
|
OPT_ASPECT("video-aspect", movie_aspect, 0, -1.0, 10.0),
|
||||||
OPT_FLOAT_STORE("no-video-aspect", movie_aspect, 0, 0.0),
|
|
||||||
OPT_CHOICE("video-aspect-method", aspect_method, 0,
|
OPT_CHOICE("video-aspect-method", aspect_method, 0,
|
||||||
({"hybrid", 0}, {"bitstream", 1}, {"container", 2})),
|
({"hybrid", 0}, {"bitstream", 1}, {"container", 2})),
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue