Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audio: Aria: Fix compilation for HiFi5 #9605

Merged
merged 1 commit into from
Oct 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
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
14 changes: 13 additions & 1 deletion src/audio/aria/aria.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@ SOF_DEFINE_REG_UUID(aria);

DECLARE_TR_CTX(aria_comp_tr, SOF_UUID(aria_uuid), LOG_LEVEL_INFO);

/**
* \brief Aria gain index mapping table
*/
const int32_t sof_aria_index_tab[] = {
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 0, 1,
2, 3, 4, 5,
6, 7, 8, 9,
0, 1, 2, 3
};

static size_t get_required_emory(size_t chan_cnt, size_t smpl_group_cnt)
{
/* Current implementation is able to apply 1 ms transition */
Expand Down Expand Up @@ -84,7 +96,7 @@ static inline void aria_process_data(struct processing_module *mod,
size_t sample_size = audio_stream_get_channels(source) * frames;

if (cd->att) {
aria_algo_calc_gain(cd, INDEX_TAB[cd->gain_state + 1], source, frames);
aria_algo_calc_gain(cd, sof_aria_index_tab[cd->gain_state + 1], source, frames);
cd->aria_get_data(mod, sink, frames);
} else {
/* bypass processing gets unprocessed data from buffer */
Expand Down
2 changes: 0 additions & 2 deletions src/audio/aria/aria.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,6 @@ struct aria_data {
aria_get_data_func aria_get_data;
};

extern const uint8_t INDEX_TAB[];

struct ipc4_aria_module_cfg {
struct ipc4_base_module_cfg base_cfg;
uint32_t attenuation;
Expand Down
26 changes: 8 additions & 18 deletions src/audio/aria/aria_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,7 @@

#if SOF_USE_HIFI(NONE, ARIA)

/**
* \brief Aria gain index mapping table
*/
const uint8_t INDEX_TAB[] = {
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 0, 1,
2, 3, 4, 5,
6, 7, 8, 9,
0, 1, 2, 3
};
extern const int32_t sof_aria_index_tab[];

inline void aria_algo_calc_gain(struct aria_data *cd, size_t gain_idx,
struct audio_stream *source, int frames)
Expand Down Expand Up @@ -54,9 +44,9 @@ static void aria_algo_get_data(struct processing_module *mod,
int32_t step, in_sample;
int32_t gain_state_add_2 = cd->gain_state + 2;
int32_t gain_state_add_3 = cd->gain_state + 3;
int32_t gain_begin = cd->gains[INDEX_TAB[gain_state_add_2]];
int32_t gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2]];
/* do linear approximation between points gain_begin and gain_end */
int32_t gain_end = cd->gains[INDEX_TAB[gain_state_add_3]];
int32_t gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3]];
int32_t m, n, i, ch;
int32_t samples = frames * audio_stream_get_channels(sink);
int32_t *out = audio_stream_get_wptr(sink);
Expand All @@ -66,10 +56,10 @@ static void aria_algo_get_data(struct processing_module *mod,
const int shift = 31 - cd->att;

for (i = 1; i < ARIA_MAX_GAIN_STATES - 1; i++) {
if (cd->gains[INDEX_TAB[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[INDEX_TAB[gain_state_add_2 + i]];
if (cd->gains[INDEX_TAB[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[INDEX_TAB[gain_state_add_3 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3 + i]];
}
step = (gain_end - gain_begin) / frames;
gain = gain_begin;
Expand All @@ -91,7 +81,7 @@ static void aria_algo_get_data(struct processing_module *mod,
in = cir_buf_wrap(in, cd->data_addr, cd->data_end);
out = audio_stream_wrap(sink, out);
}
cd->gain_state = INDEX_TAB[cd->gain_state + 1];
cd->gain_state = sof_aria_index_tab[cd->gain_state + 1];
}

aria_get_data_func aria_algo_get_data_func(struct processing_module *mod)
Expand Down
40 changes: 15 additions & 25 deletions src/audio/aria/aria_hifi3.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,7 @@
#include <xtensa/config/defs.h>
#include <xtensa/tie/xt_hifi3.h>

/**
* \brief Aria gain index mapping table
*/
const uint8_t INDEX_TAB[] = {
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 0, 1,
2, 3, 4, 5,
6, 7, 8, 9,
0, 1, 2, 3
};
extern const int32_t sof_aria_index_tab[];

inline void aria_algo_calc_gain(struct aria_data *cd, size_t gain_idx,
struct audio_stream *source, int frames)
Expand Down Expand Up @@ -69,9 +59,9 @@ static void aria_algo_get_data_odd_channel(struct processing_module *mod,
ae_int32x2 step;
int32_t gain_state_add_2 = cd->gain_state + 2;
int32_t gain_state_add_3 = cd->gain_state + 3;
int32_t gain_begin = cd->gains[INDEX_TAB[gain_state_add_2]];
int32_t gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2]];
/* do linear approximation between points gain_begin and gain_end */
int32_t gain_end = cd->gains[INDEX_TAB[gain_state_add_3]];
int32_t gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3]];
size_t samples = frames * audio_stream_get_channels(sink);
ae_int32x2 *out = audio_stream_get_wptr(sink);
ae_int32x2 *in = (ae_int32x2 *)cd->data_ptr;
Expand All @@ -85,10 +75,10 @@ static void aria_algo_get_data_odd_channel(struct processing_module *mod,
ae_int64 out1;

for (i = 1; i < ARIA_MAX_GAIN_STATES - 1; i++) {
if (cd->gains[INDEX_TAB[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[INDEX_TAB[gain_state_add_2 + i]];
if (cd->gains[INDEX_TAB[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[INDEX_TAB[gain_state_add_3 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3 + i]];
}

step = (gain_end - gain_begin) / frames;
Expand All @@ -115,7 +105,7 @@ static void aria_algo_get_data_odd_channel(struct processing_module *mod,
in = cir_buf_wrap(in, cd->data_addr, cd->data_end);
out = audio_stream_wrap(sink, out);
}
cd->gain_state = INDEX_TAB[cd->gain_state + 1];
cd->gain_state = sof_aria_index_tab[cd->gain_state + 1];
}

static void aria_algo_get_data_even_channel(struct processing_module *mod,
Expand All @@ -127,9 +117,9 @@ static void aria_algo_get_data_even_channel(struct processing_module *mod,
ae_int32x2 step;
int32_t gain_state_add_2 = cd->gain_state + 2;
int32_t gain_state_add_3 = cd->gain_state + 3;
int32_t gain_begin = cd->gains[INDEX_TAB[gain_state_add_2]];
int32_t gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2]];
/* do linear approximation between points gain_begin and gain_end */
int32_t gain_end = cd->gains[INDEX_TAB[gain_state_add_3]];
int32_t gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3]];
size_t samples = frames * audio_stream_get_channels(sink);
ae_int32x2 *out = audio_stream_get_wptr(sink);
ae_int32x2 *in = (ae_int32x2 *)cd->data_ptr;
Expand All @@ -142,10 +132,10 @@ static void aria_algo_get_data_even_channel(struct processing_module *mod,
ae_int64 out1, out2;

for (i = 1; i < ARIA_MAX_GAIN_STATES - 1; i++) {
if (cd->gains[INDEX_TAB[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[INDEX_TAB[gain_state_add_2 + i]];
if (cd->gains[INDEX_TAB[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[INDEX_TAB[gain_state_add_3 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3 + i]];
}

step = (gain_end - gain_begin) / frames;
Expand Down Expand Up @@ -174,7 +164,7 @@ static void aria_algo_get_data_even_channel(struct processing_module *mod,
in = cir_buf_wrap(in, cd->data_addr, cd->data_end);
out = audio_stream_wrap(sink, out);
}
cd->gain_state = INDEX_TAB[cd->gain_state + 1];
cd->gain_state = sof_aria_index_tab[cd->gain_state + 1];
}

aria_get_data_func aria_algo_get_data_func(struct processing_module *mod)
Expand Down
47 changes: 18 additions & 29 deletions src/audio/aria/aria_hifi5.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,7 @@
#include <xtensa/config/defs.h>
#include <xtensa/tie/xt_hifi5.h>

/**
* \brief Aria gain index mapping table
*/
static const int32_t index_tab[] = {
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 0, 1,
2, 3, 4, 5,
6, 7, 8, 9,
0, 1, 2, 3
};
extern const int32_t sof_aria_index_tab[];

/* Setup circular buffer 0 */
static inline void set_circular_buf0(const void *start, const void *end)
Expand Down Expand Up @@ -47,7 +37,7 @@ inline void aria_algo_calc_gain(struct aria_data *cd, size_t gain_idx,
int32_t *max_ptr = (int32_t *)&max_data;
int32_t max;
int samples = frames * audio_stream_get_channels(source);
ae_int32x2 *in = audio_stream_get_rptr(source);
ae_int32x4 *in = audio_stream_get_rptr(source);
int i, n, left;

while (samples) {
Expand Down Expand Up @@ -81,13 +71,13 @@ static void aria_algo_get_data_odd_channel(struct processing_module *mod,
int frames)
{
struct aria_data *cd = module_get_private_data(mod);
size_t i, n, ch;
size_t i, ch;
ae_int32x2 step;
int32_t gain_state_add_2 = cd->gain_state + 2;
int32_t gain_state_add_3 = cd->gain_state + 3;
int32_t gain_begin = cd->gains[index_tab[gain_state_add_2]];
int32_t gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2]];
/* do linear approximation between points gain_begin and gain_end */
int32_t gain_end = cd->gains[index_tab[gain_state_add_3]];
int32_t gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3]];
ae_int32 *out = audio_stream_get_wptr(sink);
ae_int32 *in = (ae_int32 *)cd->data_ptr;
ae_int32x2 in_sample, out_sample;
Expand All @@ -98,10 +88,10 @@ static void aria_algo_get_data_odd_channel(struct processing_module *mod,
ae_int64 out1;

for (i = 1; i < ARIA_MAX_GAIN_STATES - 1; i++) {
if (cd->gains[index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[index_tab[gain_state_add_2 + i]];
if (cd->gains[index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[index_tab[gain_state_add_3 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3 + i]];
}

step = (gain_end - gain_begin) / frames;
Expand All @@ -122,22 +112,21 @@ static void aria_algo_get_data_odd_channel(struct processing_module *mod,
gain = AE_ADD32S(gain, step);
}

cd->gain_state = index_tab[cd->gain_state + 1];
cd->gain_state = sof_aria_index_tab[cd->gain_state + 1];
}

static void aria_algo_get_data_even_channel(struct processing_module *mod,
struct audio_stream *sink,
int frames)
{
struct aria_data *cd = module_get_private_data(mod);
size_t i, m, n, ch;
size_t i, ch;
ae_int32x2 step;
int32_t gain_state_add_2 = cd->gain_state + 2;
int32_t gain_state_add_3 = cd->gain_state + 3;
int32_t gain_begin = cd->gains[index_tab[gain_state_add_2]];
int32_t gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2]];
/* do linear approximation between points gain_begin and gain_end */
int32_t gain_end = cd->gains[index_tab[gain_state_add_3]];
size_t samples = frames * audio_stream_get_channels(sink);
int32_t gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3]];
ae_int32x2 *out = audio_stream_get_wptr(sink);
ae_int32x2 *in = (ae_int32x2 *)cd->data_ptr;
ae_int32x2 in_sample, out_sample;
Expand All @@ -148,10 +137,10 @@ static void aria_algo_get_data_even_channel(struct processing_module *mod,
ae_int64 out1, out2;

for (i = 1; i < ARIA_MAX_GAIN_STATES - 1; i++) {
if (cd->gains[index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[index_tab[gain_state_add_2 + i]];
if (cd->gains[index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[index_tab[gain_state_add_3 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_2 + i]] < gain_begin)
gain_begin = cd->gains[sof_aria_index_tab[gain_state_add_2 + i]];
if (cd->gains[sof_aria_index_tab[gain_state_add_3 + i]] < gain_end)
gain_end = cd->gains[sof_aria_index_tab[gain_state_add_3 + i]];
}

step = (gain_end - gain_begin) / frames;
Expand All @@ -173,7 +162,7 @@ static void aria_algo_get_data_even_channel(struct processing_module *mod,
}
gain = AE_ADD32S(gain, step);
}
cd->gain_state = index_tab[cd->gain_state + 1];
cd->gain_state = sof_aria_index_tab[cd->gain_state + 1];
}

aria_get_data_func aria_algo_get_data_func(struct processing_module *mod)
Expand Down
Loading