/* Copyright 2020 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef EWMA_POWER_H_ #define EWMA_POWER_H_ #include #include #include "cras_audio_area.h" /* * The exponentially weighted moving average power module used to * calculate the energe level in audio stream. * Members: * power_set - Flag to note if the first power value has set. * enabled - Flag to enable ewma calculation. Set to false to * make all calculations no-ops. * power - The power value. * step_fr - How many frames to sample one for EWMA calculation. */ struct ewma_power { bool power_set; bool enabled; float power; unsigned int step_fr; }; /* * Disables the ewma instance. */ void ewma_power_disable(struct ewma_power *ewma); /* * Initializes the ewma_power object. * Args: * ewma - The ewma_power object to initialize. * rate - The sample rate of the audio data that the ewma object * will calculate power from. */ void ewma_power_init(struct ewma_power *ewma, unsigned int rate); /* * Feeds an audio buffer to ewma_power object to calculate the * latest power value. * Args: * ewma - The ewma_power object to calculate power. * buf - Pointer to the audio data. * channels - Number of channels of the audio data. * size - Length in frames of the audio data. */ void ewma_power_calculate(struct ewma_power *ewma, const int16_t *buf, unsigned int channels, unsigned int size); /* * Feeds non-interleaved audio data to ewma_power to calculate the * latest power value. This is similar to ewma_power_calculate but * accepts cras_audio_area. */ void ewma_power_calculate_area(struct ewma_power *ewma, const int16_t *buf, struct cras_audio_area *area, unsigned int size); #endif /* EWMA_POWER_H_ */