summaryrefslogtreecommitdiffstats
path: root/audio/filter
diff options
context:
space:
mode:
Diffstat (limited to 'audio/filter')
-rw-r--r--audio/filter/af.c3
-rw-r--r--audio/filter/af.h2
-rw-r--r--audio/filter/af_lavrresample.c26
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,
};