Skip to content

Commit 4d3bd81

Browse files
pblaszkolgirdwood
authored andcommitted
aria: add generic processing functions
Add non-HIFI processing functions for non-Xtensa configurations. Signed-off-by: Przemyslaw Blaszkowski <przemyslaw.blaszkowski@intel.com>
1 parent ac1a63a commit 4d3bd81

5 files changed

Lines changed: 73 additions & 1 deletion

File tree

src/audio/aria/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# SPDX-License-Identifier: BSD-3-Clause
22

3-
add_local_sources(sof aria.c aria_hifi3.c)
3+
add_local_sources(sof aria.c aria_hifi3.c aria_generic.c)

src/audio/aria/aria_generic.c

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// SPDX-License-Identifier: BSD-3-Clause
2+
//
3+
// Copyright(c) 2023 Intel Corporation. All rights reserved.
4+
5+
#include <sof/audio/aria/aria.h>
6+
#include <ipc4/aria.h>
7+
8+
#ifdef ARIA_GENERIC
9+
10+
inline void aria_algo_calc_gain(struct comp_dev *dev, size_t gain_idx,
11+
int32_t *__restrict data, const size_t src_size)
12+
{
13+
struct aria_data *cd = comp_get_drvdata(dev);
14+
int32_t max_data = 0;
15+
int64_t gain;
16+
17+
for (size_t i = 0; i < src_size; ++i)
18+
max_data = MAX(max_data, ABS(data[i]));
19+
20+
gain = 1ULL << (cd->att + 32);
21+
if (max_data > (0x7fffffff >> cd->att) && max_data != 0)
22+
gain = (0x7fffffffULL << 32) / max_data;
23+
24+
cd->gains[gain_idx] = gain;
25+
}
26+
27+
void aria_algo_get_data(struct comp_dev *dev, int32_t *__restrict data, size_t size)
28+
{
29+
struct aria_data *cd = comp_get_drvdata(dev);
30+
size_t smpl_groups, ii;
31+
int64_t step, sample;
32+
// do linear approximation between points gain_begin and gain_end
33+
int64_t gain_begin = cd->gains[(cd->gain_state + 2) % ARIA_MAX_GAIN_STATES];
34+
int64_t gain_end = cd->gains[(cd->gain_state + 3) % ARIA_MAX_GAIN_STATES];
35+
36+
for (size_t i = 1; i < ARIA_MAX_GAIN_STATES - 1; ++i) {
37+
if (cd->gains[(cd->gain_state + i + 2) % ARIA_MAX_GAIN_STATES] < gain_begin)
38+
gain_begin = cd->gains[(cd->gain_state + i + 2) % ARIA_MAX_GAIN_STATES];
39+
if (cd->gains[(cd->gain_state + i + 3) % ARIA_MAX_GAIN_STATES] < gain_end)
40+
gain_end = cd->gains[(cd->gain_state + i + 3) % ARIA_MAX_GAIN_STATES];
41+
}
42+
smpl_groups = size / cd->chan_cnt;
43+
step = (gain_end - gain_begin) / smpl_groups;
44+
45+
for (size_t idx = 0, gain = gain_begin, offset = 0;
46+
idx < smpl_groups;
47+
++idx, gain += step, offset += cd->chan_cnt) {
48+
ii = (cd->buff_pos + offset) % cd->buff_size;
49+
for (size_t ch = 0; ch < cd->chan_cnt; ++ch) {
50+
sample = cd->data[ii + ch];
51+
data[offset + ch] = (sample * gain) >> 32;
52+
}
53+
}
54+
cd->gain_state = (cd->gain_state + 1) % ARIA_MAX_GAIN_STATES;
55+
}
56+
#endif

src/audio/aria/aria_hifi3.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// Copyright(c) 2021 Intel Corporation. All rights reserved.
44

55
#include <sof/audio/aria/aria.h>
6+
7+
#if __XCC__ && (XCHAL_HAVE_HIFI3 || XCHAL_HAVE_HIFI4)
68
#include <xtensa/config/defs.h>
79
#include <xtensa/tie/xt_hifi3.h>
810

@@ -136,3 +138,4 @@ void aria_algo_get_data(struct comp_dev *dev, int32_t *__restrict data, size_t
136138
}
137139
cd->gain_state = (cd->gain_state + 1) % ARIA_MAX_GAIN_STATES;
138140
}
141+
#endif

src/include/ipc4/aria.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,17 @@
2727
#include <sof/compiler_attributes.h>
2828
#include "base-config.h"
2929

30+
#define ARIA_GENERIC
31+
32+
#if defined(__XCC__)
33+
#include <xtensa/config/core-isa.h>
34+
35+
#if XCHAL_HAVE_HIFI3 || XCHAL_HAVE_HIFI4
36+
#undef ARIA_GENERIC
37+
#endif
38+
39+
#endif
40+
3041
struct ipc4_aria_module_cfg {
3142
struct ipc4_base_module_cfg base_cfg;
3243
uint32_t attenuation;

zephyr/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,8 @@ zephyr_library_sources_ifdef(CONFIG_MAXIM_DSM
592592

593593
zephyr_library_sources_ifdef(CONFIG_COMP_ARIA
594594
${SOF_AUDIO_PATH}/aria/aria.c
595+
${SOF_AUDIO_PATH}/aria/aria_hifi3.c
596+
${SOF_AUDIO_PATH}/aria/aria_generic.c
595597
)
596598

597599
zephyr_library_sources_ifdef(CONFIG_COMP_CROSSOVER

0 commit comments

Comments
 (0)