Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 46 additions & 1 deletion src/audio/up_down_mixer/up_down_mixer.c
Original file line number Diff line number Diff line change
Expand Up @@ -335,12 +335,16 @@ static int up_down_mixer_free(struct processing_module *mod)

static int up_down_mixer_init(struct processing_module *mod)
{
struct up_down_mixer_config default_config;
struct module_config *dst = &mod->priv.cfg;
const struct ipc4_up_down_mixer_module_cfg *up_down_mixer = dst->init_data;
const struct ipc4_up_down_mixer_module_cfg *up_down_mixer_init = dst->init_data;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ranj063 this may align with your kernel updates to pass module init data with stream data.

const struct up_down_mixer_config *up_down_mixer = &up_down_mixer_init->config;
struct module_data *mod_data = &mod->priv;
struct comp_dev *dev = mod->dev;
struct up_down_mixer_data *cd;
size_t min_size;
int ret;
int i;

cd = rzalloc(SOF_MEM_ZONE_RUNTIME, 0, SOF_MEM_CAPS_RAM, sizeof(*cd));
if (!cd) {
Expand All @@ -357,6 +361,47 @@ static int up_down_mixer_init(struct processing_module *mod)
goto err;
}

comp_info(dev, "nb_input_pins = %d, nb_output_pins = %d",
dst->nb_input_pins, dst->nb_output_pins);

min_size = sizeof(struct ipc4_base_module_cfg);
if (dst->nb_input_pins > 0 && dst->nb_output_pins > 0)
min_size += ipc4_calc_base_module_cfg_ext_size(dst->nb_input_pins,
dst->nb_output_pins);
comp_info(dev, "ipc_config_size = %d, min_size = %d",
dev->ipc_config.ipc_config_size, min_size);

if (dev->ipc_config.ipc_config_size > min_size) {
comp_info(dev, "init configuration found");
cd->has_init_mix_configuration = true;
comp_info(dev, "init data: %d, %d, 0x%08x", up_down_mixer->out_channel_config,
up_down_mixer->coefficients_select, up_down_mixer->channel_map);
#if UP_DOWN_MIX_COEFFS_LENGTH == 8
comp_info(dev, "coef[0..3]: %d, %d, %d, %d",
up_down_mixer->coefficients[0], up_down_mixer->coefficients[1],
up_down_mixer->coefficients[2], up_down_mixer->coefficients[3]);
comp_info(dev, "coef[4..7]: %d, %d, %d, %d",
up_down_mixer->coefficients[4], up_down_mixer->coefficients[5],
up_down_mixer->coefficients[6], up_down_mixer->coefficients[7]);
#endif
} else {
comp_info(dev, "no configuration in init, using default");
cd->has_init_mix_configuration = false;
#if FORCE_REQUEST_MONO
default_config.out_channel_config = 0;
default_config.coefficients_select = 2;
default_config.channel_map = -15;
for (i = 0; i < UP_DOWN_MIX_COEFFS_LENGTH; i++)
default_config.coefficients[i] = 0;
#else
default_config.out_channel_config = up_down_mixer_init->base_cfg.audio_fmt.ch_cfg;
default_config.coefficients_select = DEFAULT_COEFFICIENTS;
for (i = 0; i < UP_DOWN_MIX_COEFFS_LENGTH; i++)
default_config.coefficients[i] = 0;
#endif
up_down_mixer = &default_config;
}

switch (up_down_mixer->coefficients_select) {
case DEFAULT_COEFFICIENTS:
cd->out_channel_map = create_channel_map(up_down_mixer->out_channel_config);
Expand Down
3 changes: 3 additions & 0 deletions src/audio/up_down_mixer/up_down_mixer.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <ipc/stream.h>
#include <ipc4/module.h>
#include <ipc4/base-config.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

Expand Down Expand Up @@ -142,6 +143,8 @@ struct up_down_mixer_data {
/** In/out internal buffers */
int32_t *buf_in;
int32_t *buf_out;

bool has_init_mix_configuration;
};

/**
Expand Down
9 changes: 6 additions & 3 deletions src/audio/up_down_mixer/up_down_mixer_ipc4.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,7 @@ enum up_down_mix_coeff_select {
#define UP_DOWN_MIX_COEFFS_LENGTH 8
#define IPC4_UP_DOWN_MIXER_MODULE_OUTPUT_PINS_COUNT 1

struct ipc4_up_down_mixer_module_cfg {
struct ipc4_base_module_cfg base_cfg;

struct up_down_mixer_config {
/*
* Output Channel Configuration.
* Together with audio_fmt.channel_config determines module conversion ratio.
Expand Down Expand Up @@ -64,6 +62,11 @@ struct ipc4_up_down_mixer_module_cfg {
* channel decoding.
*/
channel_map channel_map;
};

struct ipc4_up_down_mixer_module_cfg {
struct ipc4_base_module_cfg base_cfg;
struct up_down_mixer_config config;
} __packed __aligned(8);

#endif /* __SOF_IPC4_UP_DOWN_MIXER_H__ */