mirror of https://github.com/thesofproject/sof.git
DRC: add simd build option to DRC
Add HIFI build option to DRC module, with this, developer are able to select HIFI version for SOF build. Signed-off-by: Baofeng Tian <baofeng.tian@intel.com>
This commit is contained in:
parent
7e3f4a2f21
commit
80dd84c333
|
@ -1,5 +1,7 @@
|
||||||
# SPDX-License-Identifier: BSD-3-Clause
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
rsource "Kconfig.simd"
|
||||||
|
|
||||||
config COMP_DRC
|
config COMP_DRC
|
||||||
bool "Dynamic Range Compressor component"
|
bool "Dynamic Range Compressor component"
|
||||||
select CORDIC_FIXED
|
select CORDIC_FIXED
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
comment "DRC optimization level select"
|
||||||
|
|
||||||
|
choice "DRC_SIMD_LEVEL_SELECT"
|
||||||
|
prompt "choose which SIMD level used for DRC module"
|
||||||
|
depends on COMP_DRC
|
||||||
|
default DRC_HIFI_MAX
|
||||||
|
|
||||||
|
config DRC_HIFI_MAX
|
||||||
|
prompt "SIMD will selected by toolchain pre-defined header"
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
When this was selected, optimization level will be determined
|
||||||
|
by toolchain pre-defined macros in core isa header file.
|
||||||
|
|
||||||
|
config DRC_HIFI_5
|
||||||
|
prompt "choose HIFI5 intrinsic optimized DRC module"
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
This option used to build HIFI5 optimized DRC code
|
||||||
|
|
||||||
|
config DRC_HIFI_4
|
||||||
|
prompt "choose HIFI4 intrinsic optimized DRC module"
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
This option used to build HIFI4 optimized DRC code
|
||||||
|
|
||||||
|
config DRC_HIFI_3
|
||||||
|
prompt "choose HIFI3 intrinsic optimized DRC module"
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
This option used to build HIFI3 intrinsic optimized DRC code
|
||||||
|
|
||||||
|
config DRC_HIFI_NONE
|
||||||
|
prompt "choose generic C DRC module, no HIFI SIMD involved"
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
This option used to build DRC generic code.
|
||||||
|
endchoice
|
|
@ -12,7 +12,6 @@
|
||||||
#include <sof/audio/buffer.h>
|
#include <sof/audio/buffer.h>
|
||||||
#include <sof/platform.h>
|
#include <sof/platform.h>
|
||||||
|
|
||||||
#include "drc_plat_conf.h"
|
|
||||||
#include "drc_user.h"
|
#include "drc_user.h"
|
||||||
|
|
||||||
struct audio_stream;
|
struct audio_stream;
|
||||||
|
|
|
@ -8,13 +8,14 @@
|
||||||
#include <sof/audio/format.h>
|
#include <sof/audio/format.h>
|
||||||
#include <sof/math/exp_fcn.h>
|
#include <sof/math/exp_fcn.h>
|
||||||
#include <sof/math/numbers.h>
|
#include <sof/math/numbers.h>
|
||||||
|
#include <sof/common.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "drc.h"
|
#include "drc.h"
|
||||||
#include "drc_algorithm.h"
|
#include "drc_algorithm.h"
|
||||||
#include "drc_math.h"
|
#include "drc_math.h"
|
||||||
|
|
||||||
#if DRC_GENERIC
|
#if SOF_USE_HIFI(NONE, DRC)
|
||||||
|
|
||||||
#define ONE_Q20 Q_CONVERT_FLOAT(1.0f, 20) /* Q12.20 */
|
#define ONE_Q20 Q_CONVERT_FLOAT(1.0f, 20) /* Q12.20 */
|
||||||
#define ONE_Q21 Q_CONVERT_FLOAT(1.0f, 21) /* Q11.21 */
|
#define ONE_Q21 Q_CONVERT_FLOAT(1.0f, 21) /* Q11.21 */
|
||||||
|
@ -450,9 +451,9 @@ void drc_compress_output(struct drc_state *state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* DRC_GENERIC */
|
#endif /* DRC_HIFI_NONE */
|
||||||
|
|
||||||
#if DRC_GENERIC || DRC_HIFI3
|
#if SOF_USE_HIFI(NONE, DRC) || SOF_USE_HIFI(3, DRC)
|
||||||
/* After one complete division of samples have been received (and one division of
|
/* After one complete division of samples have been received (and one division of
|
||||||
* samples have been output), we calculate shaped power average
|
* samples have been output), we calculate shaped power average
|
||||||
* (detector_average) from the input division, update envelope parameters from
|
* (detector_average) from the input division, update envelope parameters from
|
||||||
|
|
|
@ -8,13 +8,14 @@
|
||||||
#include <sof/audio/format.h>
|
#include <sof/audio/format.h>
|
||||||
#include <sof/math/exp_fcn.h>
|
#include <sof/math/exp_fcn.h>
|
||||||
#include <sof/math/numbers.h>
|
#include <sof/math/numbers.h>
|
||||||
|
#include <sof/common.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "drc.h"
|
#include "drc.h"
|
||||||
#include "drc_algorithm.h"
|
#include "drc_algorithm.h"
|
||||||
#include "drc_math.h"
|
#include "drc_math.h"
|
||||||
|
|
||||||
#if DRC_HIFI3
|
#if SOF_USE_HIFI(3, DRC)
|
||||||
|
|
||||||
#include <xtensa/tie/xt_hifi3.h>
|
#include <xtensa/tie/xt_hifi3.h>
|
||||||
|
|
||||||
|
@ -494,4 +495,4 @@ void drc_compress_output(struct drc_state *state,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* DRC_HIFI3 */
|
#endif /* DRC_HIFI_3 */
|
||||||
|
|
|
@ -8,13 +8,14 @@
|
||||||
#include <sof/audio/format.h>
|
#include <sof/audio/format.h>
|
||||||
#include <sof/math/exp_fcn.h>
|
#include <sof/math/exp_fcn.h>
|
||||||
#include <sof/math/numbers.h>
|
#include <sof/math/numbers.h>
|
||||||
|
#include <sof/common.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "drc.h"
|
#include "drc.h"
|
||||||
#include "drc_algorithm.h"
|
#include "drc_algorithm.h"
|
||||||
#include "drc_math.h"
|
#include "drc_math.h"
|
||||||
|
|
||||||
#if DRC_HIFI4
|
#if SOF_USE_HIFI(4, DRC)
|
||||||
|
|
||||||
#include <xtensa/tie/xt_hifi4.h>
|
#include <xtensa/tie/xt_hifi4.h>
|
||||||
|
|
||||||
|
@ -910,4 +911,4 @@ const struct drc_proc_fnmap drc_proc_fnmap[] = {
|
||||||
|
|
||||||
const size_t drc_proc_fncount = ARRAY_SIZE(drc_proc_fnmap);
|
const size_t drc_proc_fncount = ARRAY_SIZE(drc_proc_fnmap);
|
||||||
|
|
||||||
#endif /* DRC_HIFI4 */
|
#endif /* DRC_HIFI_4 */
|
||||||
|
|
|
@ -13,13 +13,12 @@
|
||||||
#include <sof/math/numbers.h>
|
#include <sof/math/numbers.h>
|
||||||
#include <sof/math/lut_trig.h>
|
#include <sof/math/lut_trig.h>
|
||||||
#include <sof/math/trig.h>
|
#include <sof/math/trig.h>
|
||||||
|
#include <sof/common.h>
|
||||||
#include "drc_plat_conf.h"
|
|
||||||
|
|
||||||
/* Unmark this define to use cordic arc sine implementation. */
|
/* Unmark this define to use cordic arc sine implementation. */
|
||||||
/* #define DRC_USE_CORDIC_ASIN */
|
/* #define DRC_USE_CORDIC_ASIN */
|
||||||
|
|
||||||
#if DRC_HIFI3 || DRC_HIFI4
|
#if SOF_USE_HIFI(4, DRC) || SOF_USE_HIFI(3, DRC)
|
||||||
|
|
||||||
#include <xtensa/tie/xt_hifi3.h>
|
#include <xtensa/tie/xt_hifi3.h>
|
||||||
|
|
||||||
|
@ -106,7 +105,7 @@ static inline int32_t drc_asin_fixed(int32_t x)
|
||||||
}
|
}
|
||||||
#endif /* DRC_USE_CORDIC_ASIN */
|
#endif /* DRC_USE_CORDIC_ASIN */
|
||||||
|
|
||||||
#endif /* DRC_HIFI3 */
|
#endif /* DRC_HIFI_3/4 */
|
||||||
|
|
||||||
int32_t drc_lin2db_fixed(int32_t linear); /* Input:Q6.26 Output:Q11.21 */
|
int32_t drc_lin2db_fixed(int32_t linear); /* Input:Q6.26 Output:Q11.21 */
|
||||||
int32_t drc_log_fixed(int32_t x); /* Input:Q6.26 Output:Q6.26 */
|
int32_t drc_log_fixed(int32_t x); /* Input:Q6.26 Output:Q6.26 */
|
||||||
|
|
|
@ -9,13 +9,14 @@
|
||||||
#include <sof/math/exp_fcn.h>
|
#include <sof/math/exp_fcn.h>
|
||||||
#include <sof/math/numbers.h>
|
#include <sof/math/numbers.h>
|
||||||
#include <sof/math/trig.h>
|
#include <sof/math/trig.h>
|
||||||
|
#include <sof/common.h>
|
||||||
|
|
||||||
#include "drc_math.h"
|
#include "drc_math.h"
|
||||||
|
|
||||||
#define q_mult(a, b, qa, qb, qy) ((int32_t)Q_MULTSR_32X32((int64_t)(a), b, qa, qb, qy))
|
#define q_mult(a, b, qa, qb, qy) ((int32_t)Q_MULTSR_32X32((int64_t)(a), b, qa, qb, qy))
|
||||||
#define q_multq(a, b, q) ((int32_t)Q_MULTSR_32X32((int64_t)(a), b, q, q, q))
|
#define q_multq(a, b, q) ((int32_t)Q_MULTSR_32X32((int64_t)(a), b, q, q, q))
|
||||||
|
|
||||||
#if DRC_GENERIC
|
#if SOF_USE_HIFI(NONE, DRC)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Input depends on precision_x
|
* Input depends on precision_x
|
||||||
|
@ -221,7 +222,7 @@ inline int32_t drc_inv_fixed(int32_t x, int32_t precision_x, int32_t precision_y
|
||||||
#undef qc
|
#undef qc
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* DRC_GENERIC */
|
#endif /* DRC_HIFI_NONE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Input x is Q6.26; valid range: (0.0, 32.0); x <= 0 is not supported
|
* Input x is Q6.26; valid range: (0.0, 32.0); x <= 0 is not supported
|
||||||
|
|
|
@ -5,9 +5,10 @@
|
||||||
// Author: Pin-chih Lin <johnylin@google.com>
|
// Author: Pin-chih Lin <johnylin@google.com>
|
||||||
|
|
||||||
#include <sof/math/numbers.h>
|
#include <sof/math/numbers.h>
|
||||||
|
#include <sof/common.h>
|
||||||
#include "drc_math.h"
|
#include "drc_math.h"
|
||||||
|
|
||||||
#if DRC_HIFI3 || DRC_HIFI4
|
#if SOF_USE_HIFI(4, DRC) || SOF_USE_HIFI(3, DRC)
|
||||||
|
|
||||||
#include <xtensa/tie/xt_hifi3.h>
|
#include <xtensa/tie/xt_hifi3.h>
|
||||||
|
|
||||||
|
@ -225,4 +226,4 @@ inline int32_t drc_inv_fixed(int32_t x, int32_t precision_x, int32_t precision_y
|
||||||
return acc;
|
return acc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* DRC_HIFI3 */
|
#endif /* DRC_HIFI_3/4 */
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
/* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*
|
|
||||||
* Copyright(c) 2021 Google LLC. All rights reserved.
|
|
||||||
*
|
|
||||||
* Author: Pin-chih Lin <johnylin@google.com>
|
|
||||||
*/
|
|
||||||
#ifndef __SOF_AUDIO_DRC_DRC_PLAT_CONF_H__
|
|
||||||
#define __SOF_AUDIO_DRC_DRC_PLAT_CONF_H__
|
|
||||||
|
|
||||||
/* Get platforms configuration */
|
|
||||||
|
|
||||||
/* If next defines are set to 1 the DRC is configured automatically. Setting
|
|
||||||
* to zero temporarily is useful is for testing needs.
|
|
||||||
*/
|
|
||||||
#define DRC_AUTOARCH 1
|
|
||||||
|
|
||||||
/* Force manually some code variant when DRC_AUTOARCH is set to zero. These
|
|
||||||
* are useful in code debugging.
|
|
||||||
*/
|
|
||||||
#if DRC_AUTOARCH == 0
|
|
||||||
#define DRC_GENERIC 1
|
|
||||||
#define DRC_HIFI3 0
|
|
||||||
#define DRC_HIFI4 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Select optimized code variant when xt-xcc compiler is used */
|
|
||||||
#if DRC_AUTOARCH == 1
|
|
||||||
#if defined __XCC__
|
|
||||||
#include <xtensa/config/core-isa.h>
|
|
||||||
#if XCHAL_HAVE_HIFI4 == 1
|
|
||||||
#define DRC_GENERIC 0
|
|
||||||
#define DRC_HIFI3 0
|
|
||||||
#define DRC_HIFI4 1
|
|
||||||
#elif XCHAL_HAVE_HIFI3 == 1
|
|
||||||
#define DRC_GENERIC 0
|
|
||||||
#define DRC_HIFI3 1
|
|
||||||
#define DRC_HIFI4 0
|
|
||||||
#else
|
|
||||||
#define DRC_GENERIC 1
|
|
||||||
#define DRC_HIFI3 0
|
|
||||||
#define DRC_HIFI4 0
|
|
||||||
#endif /* XCHAL_HAVE_HIFI3 */
|
|
||||||
#else
|
|
||||||
/* GCC */
|
|
||||||
#define DRC_GENERIC 1
|
|
||||||
#define DRC_HIFI3 0
|
|
||||||
#define DRC_HIFI4 0
|
|
||||||
#endif /* __XCC__ */
|
|
||||||
#endif /* DRC_AUTOARCH */
|
|
||||||
|
|
||||||
#endif /* __SOF_AUDIO_DRC_DRC_PLAT_CONF_H__ */
|
|
Loading…
Reference in New Issue