diff options
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, }; |