summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-06-13 02:08:48 +0200
committerwm4 <wm4@nowhere>2014-06-13 02:10:45 +0200
commit6a4a5595d8d2a17188cdea64dfdfceed88d1905a (patch)
tree67ae9607f27ea120c7d1299cdf0bbbb603e5789e
parent09a61ba03ab0918d045d02427ccdc775abc38f03 (diff)
downloadmpv-6a4a5595d8d2a17188cdea64dfdfceed88d1905a.tar.bz2
mpv-6a4a5595d8d2a17188cdea64dfdfceed88d1905a.tar.xz
options: remove OPT_FLAG_CONSTANTS
This means use of the min/max fields can be dropped for the flag option type, which makes some things slightly easier. I'm also not sure if the client API handled the case of flag not being 0 or 1 correctly, and this change gets rid of this concern.
-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?