mirror of https://github.com/thesofproject/sof.git
Audio: crossover: create share header file for crossover and multiband DRC
Multiband DRC requires crossover functionality to cover crossover specific process, previously, these information defined in crossover specific directory, now, create a new shared header file for common information shared both in crossover and multiband DRC. Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
This commit is contained in:
parent
1f3cf75a1b
commit
aee89ccf87
|
@ -11,8 +11,8 @@
|
|||
#include <sof/audio/format.h>
|
||||
#include <sof/audio/pipeline.h>
|
||||
#include <sof/audio/ipc-config.h>
|
||||
#include <module/crossover/crossover_common.h>
|
||||
#include <sof/audio/crossover/crossover.h>
|
||||
#include <sof/audio/crossover/crossover_algorithm.h>
|
||||
#include <sof/common.h>
|
||||
#include <rtos/panic.h>
|
||||
#include <sof/ipc/msg.h>
|
||||
|
@ -51,32 +51,6 @@ static inline void crossover_free_config(struct sof_crossover_config **config)
|
|||
*config = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Reset the state of an LR4 filter.
|
||||
*/
|
||||
static inline void crossover_reset_state_lr4(struct iir_state_df2t *lr4)
|
||||
{
|
||||
rfree(lr4->coef);
|
||||
rfree(lr4->delay);
|
||||
|
||||
lr4->coef = NULL;
|
||||
lr4->delay = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Reset the state (coefficients and delay) of the crossover filter
|
||||
* of a single channel.
|
||||
*/
|
||||
inline void crossover_reset_state_ch(struct crossover_state *ch_state)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CROSSOVER_MAX_LR4; i++) {
|
||||
crossover_reset_state_lr4(&ch_state->lowpass[i]);
|
||||
crossover_reset_state_lr4(&ch_state->highpass[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Reset the state (coefficients and delay) of the crossover filter
|
||||
* across all channels
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
// Author: Pin-chih Lin <johnylin@google.com>
|
||||
|
||||
#include <sof/audio/module_adapter/module/generic.h>
|
||||
#include <sof/audio/crossover/crossover_algorithm.h>
|
||||
#include <sof/audio/buffer.h>
|
||||
#include <sof/audio/format.h>
|
||||
#include <sof/audio/ipc-config.h>
|
||||
|
@ -14,6 +13,7 @@
|
|||
#include <sof/lib/memory.h>
|
||||
#include <sof/lib/uuid.h>
|
||||
#include <sof/math/numbers.h>
|
||||
#include <module/crossover/crossover_common.h>
|
||||
#include <sof/trace/trace.h>
|
||||
#include <ipc/control.h>
|
||||
#include <ipc/stream.h>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#define __SOF_AUDIO_MULTIBAND_DRC_MULTIBAND_DRC_H__
|
||||
|
||||
#include <sof/audio/module_adapter/module/generic.h>
|
||||
#include <sof/audio/crossover/crossover.h>
|
||||
#include <module/crossover/crossover_common.h>
|
||||
#include <sof/math/iir_df2t.h>
|
||||
#include <sof/audio/component.h>
|
||||
#include <sof/audio/data_blob.h>
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
#define __USER_MULTIBAND_DRC_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <user/crossover.h>
|
||||
#include <user/eq.h>
|
||||
#include <module/crossover/crossover_common.h>
|
||||
|
||||
#include "../../drc/drc_user.h"
|
||||
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Copyright(c) 2023 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* Author: Sebastiano Carlucci <scarlucci@google.com>
|
||||
*/
|
||||
|
||||
#ifndef __SOF_CROSSOVER_COMMON_H__
|
||||
#define __SOF_CROSSOVER_COMMON_H__
|
||||
|
||||
#include <sof/math/iir_df2t.h>
|
||||
#include <user/eq.h>
|
||||
|
||||
/* Number of sinks for a 2 way crossover filter */
|
||||
#define CROSSOVER_2WAY_NUM_SINKS 2
|
||||
/* Number of sinks for a 3 way crossover filter */
|
||||
#define CROSSOVER_3WAY_NUM_SINKS 3
|
||||
/* Number of sinks for a 4 way crossover filter */
|
||||
#define CROSSOVER_4WAY_NUM_SINKS 4
|
||||
/* Number of delay slots allocated for LR4 Filters */
|
||||
#define CROSSOVER_NUM_DELAYS_LR4 4
|
||||
/* Maximum number of LR4 highpass OR lowpass filters */
|
||||
#define CROSSOVER_MAX_LR4 3
|
||||
/* Maximum Number of sinks allowed in config */
|
||||
#define SOF_CROSSOVER_MAX_STREAMS 4
|
||||
|
||||
/**
|
||||
* Stores the state of one channel of the Crossover filter
|
||||
*/
|
||||
struct crossover_state {
|
||||
/* Store the state for each LR4 filter. */
|
||||
struct iir_state_df2t lowpass[CROSSOVER_MAX_LR4];
|
||||
struct iir_state_df2t highpass[CROSSOVER_MAX_LR4];
|
||||
};
|
||||
|
||||
typedef void (*crossover_split)(int32_t in, int32_t out[],
|
||||
struct crossover_state *state);
|
||||
|
||||
extern const crossover_split crossover_split_fnmap[];
|
||||
|
||||
/* crossover init function */
|
||||
int crossover_init_coef_ch(struct sof_eq_iir_biquad *coef,
|
||||
struct crossover_state *ch_state,
|
||||
int32_t num_sinks);
|
||||
|
||||
/**
|
||||
* \brief Reset the state of an LR4 filter.
|
||||
*/
|
||||
static inline void crossover_reset_state_lr4(struct iir_state_df2t *lr4)
|
||||
{
|
||||
rfree(lr4->coef);
|
||||
rfree(lr4->delay);
|
||||
|
||||
lr4->coef = NULL;
|
||||
lr4->delay = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Reset the state (coefficients and delay) of the crossover filter
|
||||
* of a single channel.
|
||||
*/
|
||||
static inline void crossover_reset_state_ch(struct crossover_state *ch_state)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < CROSSOVER_MAX_LR4; i++) {
|
||||
crossover_reset_state_lr4(&ch_state->lowpass[i]);
|
||||
crossover_reset_state_lr4(&ch_state->highpass[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Returns Crossover split function.
|
||||
*/
|
||||
static inline crossover_split crossover_find_split_func(int32_t num_sinks)
|
||||
{
|
||||
if (num_sinks < CROSSOVER_2WAY_NUM_SINKS ||
|
||||
num_sinks > CROSSOVER_4WAY_NUM_SINKS)
|
||||
return NULL;
|
||||
// The functions in the map are offset by 2 indices.
|
||||
return crossover_split_fnmap[num_sinks - CROSSOVER_2WAY_NUM_SINKS];
|
||||
}
|
||||
|
||||
#endif /* __SOF_CROSSOVER_COMMON_H__ */
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <sof/audio/module_adapter/module/module_interface.h>
|
||||
#include <sof/math/iir_df2t.h>
|
||||
#include <module/crossover/crossover_common.h>
|
||||
#include <sof/platform.h>
|
||||
#include <user/crossover.h>
|
||||
#include <stdint.h>
|
||||
|
@ -16,18 +17,6 @@
|
|||
struct comp_buffer;
|
||||
struct comp_dev;
|
||||
|
||||
/* Maximum number of LR4 highpass OR lowpass filters */
|
||||
#define CROSSOVER_MAX_LR4 3
|
||||
/* Number of delay slots allocated for LR4 Filters */
|
||||
#define CROSSOVER_NUM_DELAYS_LR4 4
|
||||
|
||||
/* Number of sinks for a 2 way crossover filter */
|
||||
#define CROSSOVER_2WAY_NUM_SINKS 2
|
||||
/* Number of sinks for a 3 way crossover filter */
|
||||
#define CROSSOVER_3WAY_NUM_SINKS 3
|
||||
/* Number of sinks for a 4 way crossover filter */
|
||||
#define CROSSOVER_4WAY_NUM_SINKS 4
|
||||
|
||||
/**
|
||||
* The Crossover filter will have from 2 to 4 outputs.
|
||||
* Diagram of a 4-way Crossover filter (6 LR4 Filters).
|
||||
|
@ -58,15 +47,6 @@ struct comp_dev;
|
|||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Stores the state of one channel of the Crossover filter
|
||||
*/
|
||||
struct crossover_state {
|
||||
/* Store the state for each LR4 filter. */
|
||||
struct iir_state_df2t lowpass[CROSSOVER_MAX_LR4];
|
||||
struct iir_state_df2t highpass[CROSSOVER_MAX_LR4];
|
||||
};
|
||||
|
||||
struct comp_data;
|
||||
|
||||
typedef void (*crossover_process)(struct comp_data *cd,
|
||||
|
@ -75,9 +55,6 @@ typedef void (*crossover_process)(struct comp_data *cd,
|
|||
int32_t num_sinks,
|
||||
uint32_t frames);
|
||||
|
||||
typedef void (*crossover_split)(int32_t in, int32_t out[],
|
||||
struct crossover_state *state);
|
||||
|
||||
/* Crossover component private data */
|
||||
struct comp_data {
|
||||
/**< filter state */
|
||||
|
@ -137,18 +114,6 @@ static inline crossover_process
|
|||
extern const crossover_split crossover_split_fnmap[];
|
||||
extern const size_t crossover_split_fncount;
|
||||
|
||||
/**
|
||||
* \brief Returns Crossover split function.
|
||||
*/
|
||||
static inline crossover_split crossover_find_split_func(int32_t num_sinks)
|
||||
{
|
||||
if (num_sinks < CROSSOVER_2WAY_NUM_SINKS ||
|
||||
num_sinks > CROSSOVER_4WAY_NUM_SINKS)
|
||||
return NULL;
|
||||
// The functions in the map are offset by 2 indices.
|
||||
return crossover_split_fnmap[num_sinks - CROSSOVER_2WAY_NUM_SINKS];
|
||||
}
|
||||
|
||||
/*
|
||||
* \brief Runs input in through the LR4 filter and returns it's output.
|
||||
*/
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
/* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
* Copyright(c) 2020 Google LLC. All rights reserved.
|
||||
*
|
||||
* Author: Pin-chih Lin <johnylin@google.com>
|
||||
*/
|
||||
#ifndef __SOF_AUDIO_CROSSOVER_CROSSOVER_ALGORITHM_H__
|
||||
#define __SOF_AUDIO_CROSSOVER_CROSSOVER_ALGORITHM_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include <sof/audio/crossover/crossover.h>
|
||||
#include <sof/platform.h>
|
||||
#include <sof/math/iir_df2t.h>
|
||||
#include <user/crossover.h>
|
||||
|
||||
/* crossover reset function */
|
||||
void crossover_reset_state_ch(struct crossover_state *ch_state);
|
||||
|
||||
/* crossover init function */
|
||||
int crossover_init_coef_ch(struct sof_eq_iir_biquad *coef,
|
||||
struct crossover_state *ch_state,
|
||||
int32_t num_sinks);
|
||||
|
||||
#endif // __SOF_AUDIO_CROSSOVER_CROSSOVER_ALGORITHM_H__
|
|
@ -10,9 +10,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <user/eq.h>
|
||||
|
||||
/* Maximum Number of sinks allowed in config */
|
||||
#define SOF_CROSSOVER_MAX_STREAMS 4
|
||||
#include <module/crossover/crossover_common.h>
|
||||
|
||||
/* Maximum number allowed in configuration blob */
|
||||
#define SOF_CROSSOVER_MAX_SIZE 1024
|
||||
|
|
Loading…
Reference in New Issue