ipc4: mixin/mixout: Simplify naming after remapping mode been removed

Previously we had "normal" and "channel remapping" modes. Since channel
remapping mode was removed, "normal" is the only supported mode, no need
to prepend names with "normal".

Signed-off-by: Serhiy Katsyuba <serhiy.katsyuba@intel.com>
This commit is contained in:
Serhiy Katsyuba 2023-11-21 19:00:20 +01:00 committed by Kai Vehmanen
parent e7375aacd1
commit e9ab25ba2a
4 changed files with 52 additions and 100 deletions

View File

@ -74,7 +74,7 @@ struct mixin_sink_config {
/* mixin component private data */ /* mixin component private data */
struct mixin_data { struct mixin_data {
normal_mix_func normal_mix_channel; mix_func mix;
struct mixin_sink_config sink_config[MIXIN_MAX_SINKS]; struct mixin_sink_config sink_config[MIXIN_MAX_SINKS];
}; };
@ -181,10 +181,10 @@ static int mixout_free(struct processing_module *mod)
return 0; return 0;
} }
static int mix_and_remap(struct comp_dev *dev, const struct mixin_data *mixin_data, static int mix(struct comp_dev *dev, const struct mixin_data *mixin_data,
uint16_t sink_index, struct audio_stream *sink, uint16_t sink_index, struct audio_stream *sink,
uint32_t start_frame, uint32_t mixed_frames, uint32_t start_frame, uint32_t mixed_frames,
const struct audio_stream *source, uint32_t frame_count) const struct audio_stream *source, uint32_t frame_count)
{ {
const struct mixin_sink_config *sink_config; const struct mixin_sink_config *sink_config;
@ -196,17 +196,11 @@ static int mix_and_remap(struct comp_dev *dev, const struct mixin_data *mixin_da
sink_config = &mixin_data->sink_config[sink_index]; sink_config = &mixin_data->sink_config[sink_index];
/* Mix streams. mix_channel() is reused here to mix streams, not individual mixin_data->mix(sink, start_frame * audio_stream_get_channels(sink),
* channels. To do so, (multichannel) stream is treated as single channel: mixed_frames * audio_stream_get_channels(sink),
* channel count is passed as 1, channel index is 0, frame indices (start_frame source,
* and mixed_frame) and frame count are multiplied by real stream channel count. frame_count * audio_stream_get_channels(sink),
*/ sink_config->gain);
mixin_data->normal_mix_channel(sink, start_frame * audio_stream_get_channels(sink),
mixed_frames * audio_stream_get_channels(sink),
source,
frame_count * audio_stream_get_channels(sink),
sink_config->gain);
return 0; return 0;
} }
@ -394,9 +388,9 @@ static int mixin_process(struct processing_module *mod,
* sink buffer has some data (written by another mixin) mix that data * sink buffer has some data (written by another mixin) mix that data
* with source data. * with source data.
*/ */
ret = mix_and_remap(dev, mixin_data, sinks_ids[i], &sink->stream, ret = mix(dev, mixin_data, sinks_ids[i], &sink->stream,
start_frame, mixout_data->mixed_frames, start_frame, mixout_data->mixed_frames,
input_buffers[0].data, frames_to_copy); input_buffers[0].data, frames_to_copy);
if (ret < 0) { if (ret < 0) {
return ret; return ret;
} }
@ -507,7 +501,7 @@ static int mixin_reset(struct processing_module *mod)
comp_dbg(dev, "mixin_reset()"); comp_dbg(dev, "mixin_reset()");
mixin_data->normal_mix_channel = NULL; mixin_data->mix = NULL;
return 0; return 0;
} }
@ -632,14 +626,14 @@ static int mixin_prepare(struct processing_module *mod,
case SOF_IPC_FRAME_S16_LE: case SOF_IPC_FRAME_S16_LE:
case SOF_IPC_FRAME_S24_4LE: case SOF_IPC_FRAME_S24_4LE:
case SOF_IPC_FRAME_S32_LE: case SOF_IPC_FRAME_S32_LE:
md->normal_mix_channel = normal_mix_get_processing_function(fmt); md->mix = mixin_get_processing_function(fmt);
break; break;
default: default:
comp_err(dev, "unsupported data format %d", fmt); comp_err(dev, "unsupported data format %d", fmt);
return -EINVAL; return -EINVAL;
} }
if (!md->normal_mix_channel) { if (!md->mix) {
comp_err(dev, "have not found the suitable processing function"); comp_err(dev, "have not found the suitable processing function");
return -EINVAL; return -EINVAL;
} }

View File

@ -103,35 +103,35 @@ struct ipc4_mixer_mode_config {
} __packed __aligned(4); } __packed __aligned(4);
/** /**
* \brief normal mode mixin_mixout processing function interface * \brief mixin processing function interface
*/ */
typedef void (*normal_mix_func)(struct audio_stream *sink, int32_t start_frame, typedef void (*mix_func)(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames, int32_t mixed_frames,
const struct audio_stream *source, const struct audio_stream *source,
int32_t frame_count, uint16_t gain); int32_t frame_count, uint16_t gain);
/** /**
* @brief mixin_mixout processing functions map. * @brief mixin processing functions map.
*/ */
struct mix_func_map { struct mix_func_map {
uint16_t frame_fmt; /* frame format */ uint16_t frame_fmt; /* frame format */
normal_mix_func normal_func; /* normal mode mixin_mixout processing function */ mix_func func; /* mixin processing function */
}; };
extern const struct mix_func_map mix_func_map[]; extern const struct mix_func_map mix_func_map[];
extern const size_t mix_count; extern const size_t mix_count;
/** /**
* \brief Retrievies normal mode mixer processing function. * \brief Retrievies mixin processing function.
* \param[in] fmt stream PCM frame format * \param[in] fmt stream PCM frame format
*/ */
static inline normal_mix_func normal_mix_get_processing_function(int fmt) static inline mix_func mixin_get_processing_function(int fmt)
{ {
int i; int i;
/* map the normal mode mixin_mixout function for source and sink buffers */ /* map mixin processing function for source and sink buffers */
for (i = 0; i < mix_count; i++) { for (i = 0; i < mix_count; i++) {
if (fmt == mix_func_map[i].frame_fmt) if (fmt == mix_func_map[i].frame_fmt)
return mix_func_map[i].normal_func; return mix_func_map[i].func;
} }
return NULL; return NULL;

View File

@ -12,16 +12,9 @@
#ifdef MIXIN_MIXOUT_GENERIC #ifdef MIXIN_MIXOUT_GENERIC
#if CONFIG_FORMAT_S16LE #if CONFIG_FORMAT_S16LE
/* Instead of using audio_stream_get_channels(sink) and audio_stream_get_channels(source), static void mix_s16(struct audio_stream *sink, int32_t start_frame, int32_t mixed_frames,
* sink_channel_count and source_channel_count are supplied as parameters. This is done to reuse const struct audio_stream *source,
* the function to also mix an entire stream. In this case the function is called with fake stream int32_t frame_count, uint16_t gain)
* parameters: multichannel stream is treated as single channel and so the entire stream
* contents is mixed.
*/
static void normal_mix_channel_s16(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames,
const struct audio_stream *source,
int32_t frame_count, uint16_t gain)
{ {
int32_t frames_to_mix, frames_to_copy, left_frames; int32_t frames_to_mix, frames_to_copy, left_frames;
int32_t n, nmax, i; int32_t n, nmax, i;
@ -64,16 +57,9 @@ static void normal_mix_channel_s16(struct audio_stream *sink, int32_t start_fram
#endif /* CONFIG_FORMAT_S16LE */ #endif /* CONFIG_FORMAT_S16LE */
#if CONFIG_FORMAT_S24LE #if CONFIG_FORMAT_S24LE
/* Instead of using audio_stream_get_channels(sink) and audio_stream_get_channels(source), static void mix_s24(struct audio_stream *sink, int32_t start_frame, int32_t mixed_frames,
* sink_channel_count and source_channel_count are supplied as parameters. This is done to reuse const struct audio_stream *source,
* the function to also mix an entire stream. In this case the function is called with fake stream int32_t frame_count, uint16_t gain)
* parameters: multichannel stream is treated as single channel and so the entire stream
* contents is mixed.
*/
static void normal_mix_channel_s24(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames,
const struct audio_stream *source,
int32_t frame_count, uint16_t gain)
{ {
int32_t frames_to_mix, frames_to_copy, left_frames; int32_t frames_to_mix, frames_to_copy, left_frames;
int32_t n, nmax, i; int32_t n, nmax, i;
@ -116,16 +102,9 @@ static void normal_mix_channel_s24(struct audio_stream *sink, int32_t start_fram
#endif /* CONFIG_FORMAT_S24LE */ #endif /* CONFIG_FORMAT_S24LE */
#if CONFIG_FORMAT_S32LE #if CONFIG_FORMAT_S32LE
/* Instead of using audio_stream_get_channels(sink) and audio_stream_get_channels(source), static void mix_s32(struct audio_stream *sink, int32_t start_frame, int32_t mixed_frames,
* sink_channel_count and source_channel_count are supplied as parameters. This is done to reuse const struct audio_stream *source,
* the function to also mix an entire stream. In this case the function is called with fake stream int32_t frame_count, uint16_t gain)
* parameters: multichannel stream is treated as single channel and so the entire stream
* contents is mixed.
*/
static void normal_mix_channel_s32(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames,
const struct audio_stream *source,
int32_t frame_count, uint16_t gain)
{ {
int32_t frames_to_mix, frames_to_copy, left_frames; int32_t frames_to_mix, frames_to_copy, left_frames;
int32_t n, nmax, i; int32_t n, nmax, i;
@ -168,13 +147,13 @@ static void normal_mix_channel_s32(struct audio_stream *sink, int32_t start_fram
const struct mix_func_map mix_func_map[] = { const struct mix_func_map mix_func_map[] = {
#if CONFIG_FORMAT_S16LE #if CONFIG_FORMAT_S16LE
{ SOF_IPC_FRAME_S16_LE, normal_mix_channel_s16 }, { SOF_IPC_FRAME_S16_LE, mix_s16 },
#endif #endif
#if CONFIG_FORMAT_S24LE #if CONFIG_FORMAT_S24LE
{ SOF_IPC_FRAME_S24_4LE, normal_mix_channel_s24 }, { SOF_IPC_FRAME_S24_4LE, mix_s24 },
#endif #endif
#if CONFIG_FORMAT_S32LE #if CONFIG_FORMAT_S32LE
{ SOF_IPC_FRAME_S32_LE, normal_mix_channel_s32 } { SOF_IPC_FRAME_S32_LE, mix_s32 }
#endif #endif
}; };

View File

@ -11,16 +11,9 @@
#ifdef MIXIN_MIXOUT_HIFI3 #ifdef MIXIN_MIXOUT_HIFI3
#if CONFIG_FORMAT_S16LE #if CONFIG_FORMAT_S16LE
/* Instead of using audio_stream_get_channels(sink) and audio_stream_get_channels(source), static void mix_s16(struct audio_stream *sink, int32_t start_frame, int32_t mixed_frames,
* sink_channel_count and source_channel_count are supplied as parameters. This is done to reuse const struct audio_stream *source,
* the function to also mix an entire stream. In this case the function is called with fake stream int32_t frame_count, uint16_t gain)
* parameters: multichannel stream is treated as single channel and so the entire stream
* contents is mixed.
*/
static void normal_mix_channel_s16(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames,
const struct audio_stream *source,
int32_t frame_count, uint16_t gain)
{ {
int frames_to_mix, frames_to_copy, left_frames; int frames_to_mix, frames_to_copy, left_frames;
int n, nmax, i, m, left; int n, nmax, i, m, left;
@ -107,16 +100,9 @@ static void normal_mix_channel_s16(struct audio_stream *sink, int32_t start_fram
#endif /* CONFIG_FORMAT_S16LE */ #endif /* CONFIG_FORMAT_S16LE */
#if CONFIG_FORMAT_S24LE #if CONFIG_FORMAT_S24LE
/* Instead of using audio_stream_get_channels(sink) and audio_stream_get_channels(source), static void mix_s24(struct audio_stream *sink, int32_t start_frame, int32_t mixed_frames,
* sink_channel_count and source_channel_count are supplied as parameters. This is done to reuse const struct audio_stream *source,
* the function to also mix an entire stream. In this case the function is called with fake stream int32_t frame_count, uint16_t gain)
* parameters: multichannel stream is treated as single channel and so the entire stream
* contents is mixed.
*/
static void normal_mix_channel_s24(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames,
const struct audio_stream *source,
int32_t frame_count, uint16_t gain)
{ {
int frames_to_mix, frames_to_copy, left_frames; int frames_to_mix, frames_to_copy, left_frames;
int n, nmax, i, m, left; int n, nmax, i, m, left;
@ -197,16 +183,9 @@ static void normal_mix_channel_s24(struct audio_stream *sink, int32_t start_fram
#endif /* CONFIG_FORMAT_S24LE */ #endif /* CONFIG_FORMAT_S24LE */
#if CONFIG_FORMAT_S32LE #if CONFIG_FORMAT_S32LE
/* Instead of using audio_stream_get_channels(sink) and audio_stream_get_channels(source), static void mix_s32(struct audio_stream *sink, int32_t start_frame, int32_t mixed_frames,
* sink_channel_count and source_channel_count are supplied as parameters. This is done to reuse const struct audio_stream *source,
* the function to also mix an entire stream. In this case the function is called with fake stream int32_t frame_count, uint16_t gain)
* parameters: multichannel stream is treated as single channel and so the entire stream
* contents is mixed.
*/
static void normal_mix_channel_s32(struct audio_stream *sink, int32_t start_frame,
int32_t mixed_frames,
const struct audio_stream *source,
int32_t frame_count, uint16_t gain)
{ {
int frames_to_mix, frames_to_copy, left_frames; int frames_to_mix, frames_to_copy, left_frames;
int n, nmax, i, m, left; int n, nmax, i, m, left;
@ -289,13 +268,13 @@ static void normal_mix_channel_s32(struct audio_stream *sink, int32_t start_fram
const struct mix_func_map mix_func_map[] = { const struct mix_func_map mix_func_map[] = {
#if CONFIG_FORMAT_S16LE #if CONFIG_FORMAT_S16LE
{ SOF_IPC_FRAME_S16_LE, normal_mix_channel_s16 }, { SOF_IPC_FRAME_S16_LE, mix_s16 },
#endif #endif
#if CONFIG_FORMAT_S24LE #if CONFIG_FORMAT_S24LE
{ SOF_IPC_FRAME_S24_4LE, normal_mix_channel_s24 }, { SOF_IPC_FRAME_S24_4LE, mix_s24 },
#endif #endif
#if CONFIG_FORMAT_S32LE #if CONFIG_FORMAT_S32LE
{ SOF_IPC_FRAME_S32_LE, normal_mix_channel_s32 } { SOF_IPC_FRAME_S32_LE, mix_s32 }
#endif #endif
}; };