diff --git a/lib/audio_compressor.c b/lib/audio_compressor.c index 3ff49a00..a2d5c50b 100644 --- a/lib/audio_compressor.c +++ b/lib/audio_compressor.c @@ -43,6 +43,14 @@ struct audio_compressor { int dbg_counter; }; +/* Начальный gain — середина диапазона [0, max_gain] в дБ (геометрическое среднее). */ +struct audio_compressor* audio_compressor_clone_config(const struct audio_compressor* source) { + if (!source) { DEBUG_ERROR(DEBUG_CATEGORY_MEDIA, "compressor: cannot clone NULL configuration"); return NULL; } + struct audio_compressor* copy = audio_compressor_create(); + if (copy) { audio_compressor_configure(copy, &source->cfg); audio_compressor_set_enabled(copy, source->enabled); } + return copy; +} + /* Начальный gain — середина диапазона [0, max_gain] в дБ (геометрическое среднее). */ static float initial_gain(float max_gain) { return max_gain > 0.0f ? sqrtf(max_gain) : 1.0f; diff --git a/lib/audio_compressor.h b/lib/audio_compressor.h index c77900e2..cf13a479 100644 --- a/lib/audio_compressor.h +++ b/lib/audio_compressor.h @@ -23,6 +23,8 @@ typedef struct { } audio_compressor_config_t; struct audio_compressor* audio_compressor_create(void); +/* Новый пустой compressor с теми же настройками; позволяет передать запись worker без копии PCM. */ +struct audio_compressor* audio_compressor_clone_config(const struct audio_compressor* source); void audio_compressor_destroy(struct audio_compressor* ac); void audio_compressor_configure(struct audio_compressor* ac, const audio_compressor_config_t* cfg);