summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--options/m_config.c2
-rw-r--r--options/m_option.c23
-rw-r--r--options/m_option.h14
-rw-r--r--video/decode/vd_lavc.c8
4 files changed, 19 insertions, 28 deletions
diff --git a/options/m_config.c b/options/m_config.c
index f3b73784a5..ebb24ad098 100644
--- a/options/m_config.c
+++ b/options/m_config.c
@@ -302,7 +302,7 @@ static void add_negation_option(struct m_config *config,
const struct m_option *opt = orig->opt;
int value;
if (opt->type == CONF_TYPE_FLAG) {
- value = opt->min;
+ value = 0;
} else if (opt->type == CONF_TYPE_CHOICE) {
// Find out whether there's a "no" choice.
// m_option_parse() should be used for this, but it prints
diff --git a/options/m_option.c b/options/m_option.c
index 77e610f08c..b76fe072f4 100644
--- a/options/m_option.c
+++ b/options/m_option.c
@@ -114,9 +114,9 @@ static void copy_opt(const m_option_t *opt, void *dst, const void *src)
static int clamp_flag(const m_option_t *opt, void *val)
{
- if (VAL(val) == opt->min || VAL(val) == opt->max)
+ if (VAL(val) == 0 || VAL(val) == 1)
return 0;
- VAL(val) = opt->min;
+ VAL(val) = 0;
return M_OPT_OUT_OF_RANGE;
}
@@ -126,12 +126,12 @@ static int parse_flag(struct mp_log *log, const m_option_t *opt,
if (param.len) {
if (!bstrcmp0(param, "yes")) {
if (dst)
- VAL(dst) = opt->max;
+ VAL(dst) = 1;
return 1;
}
if (!bstrcmp0(param, "no")) {
if (dst)
- VAL(dst) = opt->min;
+ VAL(dst) = 0;
return 1;
}
mp_err(log, "Invalid parameter for %.*s flag: %.*s\n",
@@ -139,33 +139,30 @@ static int parse_flag(struct mp_log *log, const m_option_t *opt,
return M_OPT_INVALID;
} else {
if (dst)
- VAL(dst) = opt->max;
+ VAL(dst) = 1;
return 0;
}
}
static char *print_flag(const m_option_t *opt, const void *val)
{
- if (VAL(val) == opt->min)
- return talloc_strdup(NULL, "no");
- else
- return talloc_strdup(NULL, "yes");
+ return talloc_strdup(NULL, VAL(val) ? "yes" : "no");
}
static void add_flag(const m_option_t *opt, void *val, double add, bool wrap)
{
if (fabs(add) < 0.5)
return;
- bool state = VAL(val) != opt->min;
+ bool state = !!VAL(val);
state = wrap ? !state : add > 0;
- VAL(val) = state ? opt->max : opt->min;
+ VAL(val) = state ? 1 : 0;
}
static int flag_set(const m_option_t *opt, void *dst, struct mpv_node *src)
{
if (src->format != MPV_FORMAT_FLAG)
return M_OPT_UNKNOWN;
- VAL(dst) = src->u.flag ? opt->max : opt->min;
+ VAL(dst) = !!src->u.flag;
return 1;
}
@@ -173,7 +170,7 @@ static int flag_get(const m_option_t *opt, void *ta_parent,
struct mpv_node *dst, void *src)
{
dst->format = MPV_FORMAT_FLAG;
- dst->u.flag = VAL(src) != opt->min;
+ dst->u.flag = !!VAL(src);
return 1;
}
diff --git a/options/m_option.h b/options/m_option.h
index b7579bd5e9..fc210b3a43 100644
--- a/options/m_option.h
+++ b/options/m_option.h
@@ -549,21 +549,15 @@ extern const char m_option_path_separator;
#define OPT_HELPER_REMOVEPAREN(...) __VA_ARGS__
-/* The OPT_FLAG_CONSTANTS->OPT_FLAG_CONSTANTS_ kind of redirection exists to
+/* The OPT_SOMETHING->OPT_SOMETHING_ kind of redirection exists to
* make the code fully standard-conforming: the C standard requires that
* __VA_ARGS__ has at least one argument (though GCC for example would accept
- * 0). Thus the first OPT_FLAG_CONSTANTS is a wrapper which just adds one
+ * 0). Thus the first OPT_SOMETHING is a wrapper which just adds one
* argument to ensure __VA_ARGS__ is not empty when calling the next macro.
*/
#define OPT_FLAG(...) \
- OPT_GENERAL(int, __VA_ARGS__, .type = &m_option_type_flag, .max = 1)
-
-#define OPT_FLAG_CONSTANTS_(optname, varname, flags, offvalue, value, ...) \
- OPT_GENERAL(int, optname, varname, flags, \
- .min = offvalue, .max = value, __VA_ARGS__)
-#define OPT_FLAG_CONSTANTS(...) \
- OPT_FLAG_CONSTANTS_(__VA_ARGS__, .type = &m_option_type_flag)
+ OPT_GENERAL(int, __VA_ARGS__, .type = &m_option_type_flag)
#define OPT_FLAG_STORE(optname, varname, flags, value) \
OPT_GENERAL(int, optname, varname, flags, .max = value, \
@@ -675,7 +669,7 @@ extern const char m_option_path_separator;
{.name = optname, \
.flags = M_OPT_FIXED | M_OPT_GLOBAL | M_OPT_NOCFG | M_OPT_PRE_PARSE, \
.type = &m_option_type_print_fn, \
- .priv = MP_EXPECT_TYPE(m_opt_print_fn, fn) }
+ .priv = MP_EXPECT_TYPE(m_opt_print_fn, fn)}
// subconf must have the type struct m_sub_options.
// All sub-options are prefixed with "name-" and are added to the current
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 399265ac50..5af70aebe5 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -97,13 +97,13 @@ static const struct m_opt_choice_alternatives discard_names[] = {
const struct m_sub_options vd_lavc_conf = {
.opts = (const m_option_t[]){
- OPT_FLAG_CONSTANTS("fast", fast, 0, 0, CODEC_FLAG2_FAST),
+ OPT_FLAG("fast", fast, 0),
OPT_FLAG("show-all", show_all, 0),
OPT_DISCARD("skiploopfilter", skip_loop_filter, 0),
OPT_DISCARD("skipidct", skip_idct, 0),
OPT_DISCARD("skipframe", skip_frame, 0),
OPT_INTRANGE("threads", threads, 0, 0, 16),
- OPT_FLAG_CONSTANTS("bitexact", bitexact, 0, 0, CODEC_FLAG_BITEXACT),
+ OPT_FLAG("bitexact", bitexact, 0),
OPT_FLAG("check-hw-profile", check_hw_profile, 0),
OPT_STRING("o", avopt, 0),
{0}
@@ -367,9 +367,9 @@ static void init_avctx(struct dec_video *vd, const char *decoder,
mp_set_avcodec_threads(avctx, lavc_param->threads);
}
- avctx->flags |= lavc_param->bitexact;
+ avctx->flags |= lavc_param->bitexact ? CODEC_FLAG_BITEXACT : 0;
+ avctx->flags2 |= lavc_param->fast ? CODEC_FLAG2_FAST : 0;
- avctx->flags2 |= lavc_param->fast;
if (lavc_param->show_all) {
#ifdef CODEC_FLAG2_SHOW_ALL
avctx->flags2 |= CODEC_FLAG2_SHOW_ALL; // ffmpeg only?