diff options
author | wm4 <wm4@nowhere> | 2018-01-12 04:02:55 +0100 |
---|---|---|
committer | Kevin Mitchell <kevmitch@gmail.com> | 2018-01-13 03:26:45 -0800 |
commit | 6d4b4c0de3152bc2deb2df09ec3e98e032124593 (patch) | |
tree | e257216a98e0a40610dc90e6e526152ea7f63833 /audio/filter | |
parent | 23edaf4412e378dabf061b6e852f7314b38b8020 (diff) |
audio: add global options for resampler defaults
This is part of trying to get rid of --af-defaults, and the af
resample filter.
It requires a complicated mechanism to set the defaults on the resample
filter for backwards compatibility.
Diffstat (limited to 'audio/filter')
-rw-r--r-- | audio/filter/af.c | 3 | ||||
-rw-r--r-- | audio/filter/af.h | 2 | ||||
-rw-r--r-- | audio/filter/af_lavrresample.c | 26 |
3 files changed, 30 insertions, 1 deletions
diff --git a/audio/filter/af.c b/audio/filter/af.c index 5838c2e70b..35525d0774 100644 --- a/audio/filter/af.c +++ b/audio/filter/af.c @@ -63,6 +63,7 @@ static bool get_desc(struct m_obj_desc *dst, int index) .priv_size = af->priv_size, .priv_defaults = af->priv_defaults, .options = af->options, + .set_defaults = af->set_defaults, .p = af, }; return true; @@ -170,7 +171,7 @@ static struct af_instance *af_create(struct af_stream *s, char *name, .out_pool = mp_audio_pool_create(af), }; struct m_config *config = - m_config_from_obj_desc_and_args(af, s->log, NULL, &desc, + m_config_from_obj_desc_and_args(af, s->log, s->global, &desc, name, s->opts->af_defs, args); if (!config) goto error; diff --git a/audio/filter/af.h b/audio/filter/af.h index f27edee71a..3a07a5465f 100644 --- a/audio/filter/af.h +++ b/audio/filter/af.h @@ -52,6 +52,8 @@ struct af_info { int priv_size; const void *priv_defaults; const struct m_option *options; + // For m_obj_desc.set_defaults + void (*set_defaults)(struct mpv_global *global, void *p); }; // Linked list of audio filters diff --git a/audio/filter/af_lavrresample.c b/audio/filter/af_lavrresample.c index 55eb6b0f20..96387060b1 100644 --- a/audio/filter/af_lavrresample.c +++ b/audio/filter/af_lavrresample.c @@ -32,6 +32,7 @@ #include "common/av_common.h" #include "common/msg.h" +#include "options/m_config.h" #include "options/m_option.h" #include "audio/filter/af.h" #include "audio/fmt-conversion.h" @@ -42,6 +43,7 @@ struct af_resample { int allow_detach; double playback_speed; struct mp_resample_opts opts; + int global_normalize; struct mp_aconverter *converter; }; @@ -142,11 +144,34 @@ static int af_open(struct af_instance *af) af->filter_frame = filter; af->filter_out = filter_out; + if (s->opts.normalize < 0) + s->opts.normalize = s->global_normalize; + s->converter = mp_aconverter_create(af->global, af->log, &s->opts); return AF_OK; } +static void set_defaults(struct mpv_global *global, void *p) +{ + struct af_resample *s = p; + + struct mp_resample_opts *opts = &s->opts; + + struct mp_resample_opts *src_opts = + mp_get_config_group(s, global, &resample_config); + + s->global_normalize = src_opts->normalize; + + assert(!opts->avopts); // we don't set a default value, so it must be NULL + + *opts = *src_opts; + + opts->avopts = NULL; + struct m_option dummy = {.type = &m_option_type_keyvalue_list}; + m_option_copy(&dummy, &opts->avopts, &src_opts->avopts); +} + #define OPT_BASE_STRUCT struct af_resample const struct af_info af_info_lavrresample = { @@ -170,4 +195,5 @@ const struct af_info af_info_lavrresample = { OPT_KEYVALUELIST("o", opts.avopts, 0), {0} }, + .set_defaults = set_defaults, }; |