From 4abc651416b499ac099f9f3d9ef299a5449538ce Mon Sep 17 00:00:00 2001 From: Annemarie Porter Date: Fri, 1 May 2026 11:17:07 -0700 Subject: [PATCH] modules: Remove modules included as binaries Remove modules included as binaries as we are moving away from distributing module in binary form. Also remove other modules that are dependent on binary modules. Signed-off-by: Annemarie Porter --- arch/arm64/qcom/canoe_defconfig | 10 - arch/arm64/qcom/defconfig | 9 - arch/arm64/qcom/shikra_defconfig | 8 - arch/linux/configs/defconfig | 13 +- modules/CMakeLists.txt | 27 +- modules/Kconfig | 27 - modules/cmn/pcm_mf_cnv/build/CMakeLists.txt | 111 -- modules/cmn/pcm_mf_cnv/capi/mfc/api/mfc_api.h | 352 ------- .../cmn/pcm_mf_cnv/capi/mfc/inc/capi_mfc.h | 33 - .../capi/pcm_cnv/api/pcm_converter_api.h | 101 -- .../capi/pcm_cnv/inc/capi_pcm_cnv.h | 35 - .../capi/pcm_cnv/src/capi_pcm_mf_cnv_i.h | 72 -- .../pcm_cnv/src/capi_pcm_mf_cnv_island.cpp | 281 ----- .../capi/pcm_cnv/src/capi_pcm_mf_cnv_utils.h | 266 ----- .../src/capi_pcm_mf_cnv_utils_island.cpp | 35 - .../pcm_cnv/stub_src/capi_pcm_cnv_stub.cpp | 44 - modules/cmn/pcm_mf_cnv/lib/inc/pc_converter.h | 437 -------- .../cmn/pcm_mf_cnv/lib/src/pc_converter.cpp | 75 -- .../lib/src/pc_converter_island.cpp | 982 ------------------ .../pcm_mf_cnv/lib/src/pc_float/pc_float.cpp | 278 ----- modules/cmn/pcm_mf_cnv/lib/src/pc_process.cpp | 101 -- .../pcm_mf_cnv/lib/src/pc_process_island.cpp | 697 ------------- .../lib/stub_src/pc_float/pc_float_stub.cpp | 41 - modules/cmn/pcm_mf_cnv/lib/tst/main.cpp | 239 ----- .../Virtualizer/api/Virtualizer_api.h | 207 ---- .../Virtualizer/bin/arm/libvirtualizer.a | Bin 528228 -> 0 bytes .../Virtualizer/build/CMakeLists.txt | 37 - .../Virtualizer/inc/capi_virtualizer.h | 51 - .../inc/virtualizer_calibration_api.h | 59 -- .../Virtualizer/inc/virtualizer_lib_api.h | 114 -- .../processing/bassboost/api/api_bassboost.h | 136 --- .../processing/bassboost/build/CMakeLists.txt | 46 - .../bassboost/capi/inc/capi_bassboost.h | 41 - .../bassboost/capi/src/capi_bassboost.cpp | 543 ---------- .../capi/src/capi_bassboost_kpps.cpp | 91 -- .../capi/src/capi_bassboost_utils.cpp | 775 -------------- .../bassboost/capi/src/capi_bassboost_utils.h | 139 --- .../capi/stub_src/capi_bassboost_stub.cpp | 31 - .../bassboost/lib/inc/bassboost_api.h | 93 -- .../lib/inc/bassboost_calibration_api.h | 52 - .../processing/bassboost/lib/src/bassboost.c | 956 ----------------- .../processing/bassboost/lib/src/bassboost.h | 96 -- .../processing/gain_control/drc/api/api_drc.h | 289 ------ .../gain_control/drc/bin/arm/libdrc.a | Bin 177140 -> 0 bytes .../gain_control/drc/build/CMakeLists.txt | 35 - .../processing/gain_control/drc/inc/CDrcLib.h | 289 ------ .../gain_control/drc/inc/capi_drc.h | 37 - .../gain_control/drc/inc/capi_drc_utils.h | 77 -- .../processing/gain_control/drc/inc/drc_api.h | 126 --- .../gain_control/drc/inc/drc_calib_api.h | 134 --- .../processing/gain_control/drc/inc/drc_lib.h | 191 ---- .../gain_control/iir_mbdrc/api/mbdrc_api.h | 754 -------------- .../iir_mbdrc/bin/arm/libiir_mbdrc.a | Bin 499152 -> 0 bytes .../iir_mbdrc/build/CMakeLists.txt | 35 - .../iir_mbdrc/inc/capi_iir_mbdrc.h | 43 - .../iir_mbdrc/inc/capi_iir_mbdrc_utils.h | 369 ------- .../gain_control/iir_mbdrc/inc/iir_mbdrc.h | 149 --- .../iir_mbdrc/inc/iir_mbdrc_api.h | 108 -- .../iir_mbdrc/inc/iir_mbdrc_calibration_api.h | 195 ---- .../inc/iir_mbdrc_function_defines.h | 16 - .../api/dynamic_resampler_api.h | 162 --- .../bin/arm/libdynamic_resampler.a | Bin 662306 -> 0 bytes .../dynamic_resampler/build/CMakeLists.txt | 33 - .../dynamic_resampler/inc/hw_rs_lib.h | 40 - .../dynamic_resampler/inc/hwsw_rs_lib.h | 263 ----- .../dynamic_resampler/inc/hwsw_rs_lib_hw.h | 173 --- .../inc/multi_def_resampler.h | 31 - .../dynamic_resampler/inc/resampler_32b_ext.h | 143 --- .../dynamic_resampler/inc/rs_common.h | 96 -- .../dynamic_resampler/inc/rs_driver.h | 460 -------- .../dynamic_resampler/inc/rs_driver_ext.h | 410 -------- .../iir_resampler/api/iir_resampler_api.h | 176 ---- .../iir_resampler/bin/arm/libiir_resampler.a | Bin 248210 -> 0 bytes .../iir_resampler/build/CMakeLists.txt | 30 - .../iir_resampler/inc/iir_resampler.h | 429 -------- .../resamplers/iir_resampler/inc/iir_rs_lib.h | 100 -- .../shoebox_reverb/api/api_reverb.h | 656 ------------ .../shoebox_reverb/api/shoebox_api.h | 552 ---------- .../bin/arm/libshoebox_reverb.a | Bin 536248 -> 0 bytes .../shoebox_reverb/build/CMakeLists.txt | 49 - .../inc/ShoeBox_calibration_api.h | 297 ------ .../shoebox_reverb/inc/capi_shoebox.h | 55 - .../shoebox_reverb/inc/reverb_api.h | 170 --- .../inc/reverb_calibration_api.h | 151 --- .../shoebox_reverb/inc/reverbglobal.h | 339 ------ .../shoebox_reverb/inc/shoebox_lib_api.h | 382 ------- 86 files changed, 3 insertions(+), 15782 deletions(-) delete mode 100644 modules/cmn/pcm_mf_cnv/build/CMakeLists.txt delete mode 100644 modules/cmn/pcm_mf_cnv/capi/mfc/api/mfc_api.h delete mode 100644 modules/cmn/pcm_mf_cnv/capi/mfc/inc/capi_mfc.h delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/api/pcm_converter_api.h delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/inc/capi_pcm_cnv.h delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_i.h delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_island.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils.h delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils_island.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/capi/pcm_cnv/stub_src/capi_pcm_cnv_stub.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/inc/pc_converter.h delete mode 100644 modules/cmn/pcm_mf_cnv/lib/src/pc_converter.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/src/pc_converter_island.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/src/pc_float/pc_float.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/src/pc_process.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/src/pc_process_island.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/stub_src/pc_float/pc_float_stub.cpp delete mode 100644 modules/cmn/pcm_mf_cnv/lib/tst/main.cpp delete mode 100644 modules/processing/Virtualizer/api/Virtualizer_api.h delete mode 100644 modules/processing/Virtualizer/bin/arm/libvirtualizer.a delete mode 100644 modules/processing/Virtualizer/build/CMakeLists.txt delete mode 100644 modules/processing/Virtualizer/inc/capi_virtualizer.h delete mode 100644 modules/processing/Virtualizer/inc/virtualizer_calibration_api.h delete mode 100644 modules/processing/Virtualizer/inc/virtualizer_lib_api.h delete mode 100644 modules/processing/bassboost/api/api_bassboost.h delete mode 100644 modules/processing/bassboost/build/CMakeLists.txt delete mode 100644 modules/processing/bassboost/capi/inc/capi_bassboost.h delete mode 100644 modules/processing/bassboost/capi/src/capi_bassboost.cpp delete mode 100644 modules/processing/bassboost/capi/src/capi_bassboost_kpps.cpp delete mode 100644 modules/processing/bassboost/capi/src/capi_bassboost_utils.cpp delete mode 100644 modules/processing/bassboost/capi/src/capi_bassboost_utils.h delete mode 100644 modules/processing/bassboost/capi/stub_src/capi_bassboost_stub.cpp delete mode 100644 modules/processing/bassboost/lib/inc/bassboost_api.h delete mode 100644 modules/processing/bassboost/lib/inc/bassboost_calibration_api.h delete mode 100644 modules/processing/bassboost/lib/src/bassboost.c delete mode 100644 modules/processing/bassboost/lib/src/bassboost.h delete mode 100644 modules/processing/gain_control/drc/api/api_drc.h delete mode 100644 modules/processing/gain_control/drc/bin/arm/libdrc.a delete mode 100644 modules/processing/gain_control/drc/build/CMakeLists.txt delete mode 100644 modules/processing/gain_control/drc/inc/CDrcLib.h delete mode 100644 modules/processing/gain_control/drc/inc/capi_drc.h delete mode 100644 modules/processing/gain_control/drc/inc/capi_drc_utils.h delete mode 100644 modules/processing/gain_control/drc/inc/drc_api.h delete mode 100644 modules/processing/gain_control/drc/inc/drc_calib_api.h delete mode 100644 modules/processing/gain_control/drc/inc/drc_lib.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/api/mbdrc_api.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/bin/arm/libiir_mbdrc.a delete mode 100644 modules/processing/gain_control/iir_mbdrc/build/CMakeLists.txt delete mode 100644 modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc_utils.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_api.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_calibration_api.h delete mode 100644 modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_function_defines.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/api/dynamic_resampler_api.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/bin/arm/libdynamic_resampler.a delete mode 100644 modules/processing/resamplers/dynamic_resampler/build/CMakeLists.txt delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/hw_rs_lib.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib_hw.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/multi_def_resampler.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/resampler_32b_ext.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/rs_common.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/rs_driver.h delete mode 100644 modules/processing/resamplers/dynamic_resampler/inc/rs_driver_ext.h delete mode 100644 modules/processing/resamplers/iir_resampler/api/iir_resampler_api.h delete mode 100644 modules/processing/resamplers/iir_resampler/bin/arm/libiir_resampler.a delete mode 100644 modules/processing/resamplers/iir_resampler/build/CMakeLists.txt delete mode 100644 modules/processing/resamplers/iir_resampler/inc/iir_resampler.h delete mode 100644 modules/processing/resamplers/iir_resampler/inc/iir_rs_lib.h delete mode 100644 modules/processing/shoebox_reverb/api/api_reverb.h delete mode 100644 modules/processing/shoebox_reverb/api/shoebox_api.h delete mode 100644 modules/processing/shoebox_reverb/bin/arm/libshoebox_reverb.a delete mode 100644 modules/processing/shoebox_reverb/build/CMakeLists.txt delete mode 100644 modules/processing/shoebox_reverb/inc/ShoeBox_calibration_api.h delete mode 100644 modules/processing/shoebox_reverb/inc/capi_shoebox.h delete mode 100644 modules/processing/shoebox_reverb/inc/reverb_api.h delete mode 100644 modules/processing/shoebox_reverb/inc/reverb_calibration_api.h delete mode 100644 modules/processing/shoebox_reverb/inc/reverbglobal.h delete mode 100644 modules/processing/shoebox_reverb/inc/shoebox_lib_api.h diff --git a/arch/arm64/qcom/canoe_defconfig b/arch/arm64/qcom/canoe_defconfig index 453d46b6..bdd2c3d6 100644 --- a/arch/arm64/qcom/canoe_defconfig +++ b/arch/arm64/qcom/canoe_defconfig @@ -17,21 +17,11 @@ CONFIG_ECHO_CANCELLATION=n CONFIG_EXAMPLE_GAIN=n CONFIG_MSIIR=n CONFIG_CHMIXER=y -CONFIG_PCM_CNV=y -CONFIG_MFC=y -CONFIG_PCM_DECODER=y -CONFIG_PCM_ENCODER=y -CONFIG_DRC=n -CONFIG_IIR_MBDRC=n CONFIG_GAIN=y CONFIG_SOFT_VOL=n CONFIG_FIR_FILTER=n CONFIG_POPLESS_EQUALIZER=n CONFIG_SAL=n -CONFIG_SHOEBOX=n -CONFIG_REVERB=n -CONFIG_VIRTUALIZER=n -CONFIG_BASS_BOOST=n CONFIG_PLACEHOLDER_ENC_DEC=y # diff --git a/arch/arm64/qcom/defconfig b/arch/arm64/qcom/defconfig index 38f4ca72..6bda9ac2 100644 --- a/arch/arm64/qcom/defconfig +++ b/arch/arm64/qcom/defconfig @@ -17,20 +17,11 @@ CONFIG_ECHO_CANCELLATION=n CONFIG_EXAMPLE_GAIN=n CONFIG_MSIIR=y CONFIG_CHMIXER=y -CONFIG_PCM_CNV=y -CONFIG_MFC=y -CONFIG_PCM_DECODER=y -CONFIG_PCM_ENCODER=y -CONFIG_IIR_MBDRC=y CONFIG_GAIN=n CONFIG_SOFT_VOL=n CONFIG_FIR_FILTER=n CONFIG_POPLESS_EQUALIZER=n CONFIG_SAL=n -CONFIG_SHOEBOX=n -CONFIG_REVERB=n -CONFIG_VIRTUALIZER=n -CONFIG_BASS_BOOST=n # # Signal Processing Framework diff --git a/arch/arm64/qcom/shikra_defconfig b/arch/arm64/qcom/shikra_defconfig index 7d765375..cf9a1191 100644 --- a/arch/arm64/qcom/shikra_defconfig +++ b/arch/arm64/qcom/shikra_defconfig @@ -17,19 +17,11 @@ CONFIG_ECHO_CANCELLATION=n CONFIG_EXAMPLE_GAIN=n CONFIG_MSIIR=y CONFIG_CHMIXER=y -CONFIG_PCM_CNV=y -CONFIG_MFC=y -CONFIG_PCM_DECODER=y -CONFIG_PCM_ENCODER=y CONFIG_GAIN=y CONFIG_SOFT_VOL=n CONFIG_FIR_FILTER=y CONFIG_POPLESS_EQUALIZER=n CONFIG_SAL=y -CONFIG_SHOEBOX=n -CONFIG_REVERB=n -CONFIG_VIRTUALIZER=n -CONFIG_BASS_BOOST=n CONFIG_PLACEHOLDER_ENC_DEC=y # diff --git a/arch/linux/configs/defconfig b/arch/linux/configs/defconfig index 96cdca57..a06ba51d 100644 --- a/arch/linux/configs/defconfig +++ b/arch/linux/configs/defconfig @@ -15,22 +15,13 @@ CONFIG_MODULES=y CONFIG_ENCODER=n CONFIG_ECHO_CANCELLATION=n CONFIG_EXAMPLE_GAIN=n -CONFIG_MSIIR=y -CONFIG_CHMIXER=y -CONFIG_PCM_CNV=y -CONFIG_MFC=y -CONFIG_PCM_DECODER=y -CONFIG_PCM_ENCODER=y -CONFIG_IIR_MBDRC=y +CONFIG_MSIIR=n +CONFIG_CHMIXER=n CONFIG_GAIN=n CONFIG_SOFT_VOL=n CONFIG_FIR_FILTER=n CONFIG_POPLESS_EQUALIZER=n CONFIG_SAL=n -CONFIG_SHOEBOX=n -CONFIG_REVERB=n -CONFIG_VIRTUALIZER=n -CONFIG_BASS_BOOST=n # # Signal Processing Framework diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index c43b52c4..be06b486 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -31,14 +31,6 @@ endif() if(CONFIG_MSIIR) add_subdirectory(processing/filters/multi_stage_iir/build) endif() -if(CONFIG_PCM_CNV) - add_subdirectory(cmn/pcm_mf_cnv/build) - add_subdirectory(processing/resamplers/dynamic_resampler/build) - add_subdirectory(processing/resamplers/iir_resampler/build) -endif() -if(CONFIG_IIR_MBDRC) - add_subdirectory(processing/gain_control/iir_mbdrc/build) -endif() if(CONFIG_GAIN) add_subdirectory(processing/volume_control/capi/gain/build) endif() @@ -53,22 +45,5 @@ if(CONFIG_POPLESS_EQUALIZER) endif() if(CONFIG_SAL) add_subdirectory(cmn/simple_accumulator_limiter/build) -endif() -if(CONFIG_SHOEBOX OR CONFIG_REVERB) - add_subdirectory(processing/shoebox_reverb/build) -endif() -if(CONFIG_VIRTUALIZER) - add_subdirectory(processing/Virtualizer/build) -endif() -if(CONFIG_BASS_BOOST) - add_subdirectory(processing/bassboost/build) -endif() - -# The below modules are not standalone, so they should only be built if -# another module that is dependent on it is built. -if(CONFIG_SAL OR CONFIG_IIR_MBDRC OR CONFIG_VIRTUALIZER OR CONFIG_BASS_BOOST) - add_subdirectory(processing/gain_control/limiter/build) -endif() -if(CONFIG_IIR_MBDRC OR CONFIG_BASS_BOOST) - add_subdirectory(processing/gain_control/drc/build) + add_subdirectory(processing/gain_control/limiter/build) endif() diff --git a/modules/Kconfig b/modules/Kconfig index 23bda373..a2a04c18 100644 --- a/modules/Kconfig +++ b/modules/Kconfig @@ -30,16 +30,6 @@ config MSIIR tristate "Enable MSIIR Library" default y -config PCM_CNV - tristate "Enable PCM_CNV Library" - select CH_MIXER - select MSIIR - default y - -config IIR_MBDRC - tristate "Enable IIR_MBDRC Library" - default y - config GAIN tristate "Enable GAIN Library" default n @@ -60,21 +50,4 @@ config SAL tristate "Enable SAL library" default n -config SHOEBOX - tristate "Enable SHOEBOX library" - default n - -config REVERB - tristate "Enable REVERB library" - default n - -config VIRTUALIZER - tristate "Enable VIRTUALIZER library" - select MSIIR - default n - -config BASS_BOOST - tristate "Enable BASS_BOOST Library" - select MSIIR - default n endmenu diff --git a/modules/cmn/pcm_mf_cnv/build/CMakeLists.txt b/modules/cmn/pcm_mf_cnv/build/CMakeLists.txt deleted file mode 100644 index 65511e54..00000000 --- a/modules/cmn/pcm_mf_cnv/build/CMakeLists.txt +++ /dev/null @@ -1,111 +0,0 @@ -#[[ - @file CMakeLists.txt - - @brief - - @copyright - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -]] -cmake_minimum_required(VERSION 3.10) - -set(pcm_cnv_sources - ${LIB_ROOT}/capi/pcm_cnv/src/capi_pcm_mf_cnv.cpp - ${LIB_ROOT}/capi/pcm_cnv/src/capi_pcm_mf_cnv_island.cpp - ${LIB_ROOT}/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils.cpp - ${LIB_ROOT}/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils_island.cpp - ${LIB_ROOT}/lib/src/pc_converter.cpp - ${LIB_ROOT}/lib/src/pc_converter_island.cpp - ${LIB_ROOT}/lib/src/pc_init.cpp - ${LIB_ROOT}/lib/src/pc_process.cpp - ${LIB_ROOT}/lib/src/pc_process_island.cpp - ${LIB_ROOT}/lib/src/pc_float/pc_float.cpp -) - -set(pcm_cnv_includes - ${LIB_ROOT}/capi/pcm_cnv/api - ${LIB_ROOT}/capi/pcm_cnv/inc - ${LIB_ROOT}/capi/pcm_cnv/src - ${LIB_ROOT}/capi/mfc/api - ${LIB_ROOT}/capi/mfc/inc - ${LIB_ROOT}/lib/inc - ${PROJECT_SOURCE_DIR}/modules/audio/pcm_encoder/api - ${PROJECT_SOURCE_DIR}/modules/audio/pcm_encoder/inc - ${PROJECT_SOURCE_DIR}/modules/audio/pcm_decoder/api - ${PROJECT_SOURCE_DIR}/modules/audio/pcm_decoder/inc - ${PROJECT_SOURCE_DIR}/modules/processing/channel_mixer/lib/inc - ${PROJECT_SOURCE_DIR}/modules/processing/channel_mixer/api/ - ${PROJECT_SOURCE_DIR}/modules/processing/resamplers/dynamic_resampler/inc - ${PROJECT_SOURCE_DIR}/modules/processing/resamplers/iir_resampler/inc - ${PROJECT_SOURCE_DIR}/fwk/spf/utils/cmn/inc - ${PROJECT_SOURCE_DIR}/fwk/spf/utils/interleaver/inc - ${PROJECT_SOURCE_DIR}/fwk/spf/utils/lpi_pool/inc - ${PROJECT_SOURCE_DIR}/fwk/spf/interfaces/fwk/api - ${PROJECT_SOURCE_DIR}/fwk/spf/containers/cmn/graph_utils/inc - ) - -spf_module_sources( - KCONFIG CONFIG_PCM_CNV - NAME pcm_cnv - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "PP" - AMDB_MID "0x07001003" - AMDB_TAG "capi_pcm_cnv" - AMDB_MOD_NAME "MODULE_ID_PCM_CNV" - SRCS ${pcm_cnv_sources} - INCLUDES ${pcm_cnv_includes} - H2XML_HEADERS "${LIB_ROOT}/capi/pcm_cnv/api/pcm_converter_api.h" - CFLAGS "" -) - -spf_module_sources( - KCONFIG CONFIG_PCM_DECODER - NAME pcm_decoder - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "decoder" - AMDB_MID "0x07001005" - AMDB_TAG "capi_pcm_dec" - AMDB_MOD_NAME "MODULE_ID_PCM_DEC" - AMDB_FMT_ID1 "MEDIA_FMT_ID_PCM" - SRCS ${pcm_cnv_sources} - INCLUDES ${pcm_cnv_includes} - H2XML_HEADERS "${PROJECT_SOURCE_DIR}/modules/audio/pcm_decoder/api/pcm_decoder_api.h" - CFLAGS "" -) - -spf_module_sources( - KCONFIG CONFIG_PCM_ENCODER - NAME pcm_encoder - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "encoder" - AMDB_MID "0x07001004" - AMDB_TAG "capi_pcm_enc" - AMDB_MOD_NAME "MODULE_ID_PCM_ENC" - AMDB_FMT_ID1 "MEDIA_FMT_ID_PCM" - SRCS ${pcm_cnv_sources} - INCLUDES ${pcm_cnv_includes} - H2XML_HEADERS "${PROJECT_SOURCE_DIR}/modules/audio/pcm_encoder/api/pcm_encoder_api.h" - CFLAGS "" -) - -spf_module_sources( - KCONFIG CONFIG_MFC - NAME mfc - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "PP" - AMDB_MID "0x07001015" - AMDB_TAG "capi_mfc" - AMDB_MOD_NAME "MODULE_ID_MFC" - SRCS ${pcm_cnv_sources} - INCLUDES ${pcm_cnv_includes} - H2XML_HEADERS "${LIB_ROOT}/capi/mfc/api/mfc_api.h" - CFLAGS "" -) diff --git a/modules/cmn/pcm_mf_cnv/capi/mfc/api/mfc_api.h b/modules/cmn/pcm_mf_cnv/capi/mfc/api/mfc_api.h deleted file mode 100644 index ef23c4df..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/mfc/api/mfc_api.h +++ /dev/null @@ -1,352 +0,0 @@ -#ifndef MFC_API_H -#define MFC_API_H - -/*============================================================================== - @file mfc_api.h - @brief This file contains MFC API -==============================================================================*/ - -/*=========================================================================== - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -======================================================================== */ - -/*------------------------------------------------------------------------------ - Includes -------------------------------------------------------------------------------*/ -#include "chmixer_common_api.h" -#include "module_cmn_api.h" - -/*# @h2xml_title1 {Media Format Converter (MFC) Module API} - @h2xml_title_agile_rev {Media Format Converter (MFC) Module API} - @h2xml_title_date {December 11, 2018} */ - -/*------------------------------------------------------------------------------ - Defines -------------------------------------------------------------------------------*/ - -/** @ingroup ar_spf_mod_mfc_mod - Identifier for the input port of the MFC module (#MODULE_ID_MFC). */ -#define MFC_DATA_INPUT_PORT 0x2 - -/** @ingroup ar_spf_mod_mfc_mod - Identifier for the output port of the MFC module. */ -#define MFC_DATA_OUTPUT_PORT 0x1 - -/*------------------------------------------------------------------------------ - API's -------------------------------------------------------------------------------*/ - -/** @ingroup ar_spf_mod_mfc_mod - Identifier for the parameter that configures the resampler in the MFC - module to be either an IIR resampler or FIR resampler. - - For an FIR resampler, clients can set additional FIR resampler - configuration fields. - - @msgpayload - param_id_mfc_resampler_cfg_t -*/ -#define PARAM_ID_MFC_RESAMPLER_CFG 0x0800104D - -/*# @h2xmlp_parameter {"PARAM_ID_MFC_RESAMPLER_CFG", - PARAM_ID_MFC_RESAMPLER_CFG} - @h2xmlp_description {ID for the parameter that configures the resampler in - the MFC module (MODULE_ID_MFC)to be either an IIR - resampler, FIR resampler or IIR preferred resampler.} - @h2xmlp_toolPolicy {Calibration; RTC} */ - -/** @ingroup ar_spf_mod_mfc_mod - Payload for #PARAM_ID_MFC_RESAMPLER_CFG in the Media Format Converter - Module. -*/ -#include "spf_begin_pack.h" -struct param_id_mfc_resampler_cfg_t -{ - uint32_t resampler_type; - /**< Specifies the type of resampler to use. - - @valuesbul - - 0 -- FIR resampler (Default) - - 1 -- IIR resampler - - 2 -- IIR resampler preferred: Uses IIR when possible, if not will fallback on FIR - */ - - /*#< @h2xmle_description {Specifies the resampler type to be used in MFC. \n - If IIR is selected, the use_hw_rs, dynamic_mode, and delay_type fields - are not applicable and are ignored.\n - - If FIR resampler or IIR preferred is selected, the use_hw_rs field is applicable, - it is cached and used.\n - - If FIR resampler is selected dynamic_mode, and delay_type fields are also applicable - and they are cached and used.\n - - If the input or output sampling rates are fractional: - - IIR Preferred Resampler will fallback on FIR - - IIR Resampler will NOT fallback on FIR, module will disable itself \n - } - @h2xmle_rangeList {"FIR resampler"=0; - "IIR Resampler"=1; - "IIR Resampler Preferred"=2} - @h2xmle_default {0} */ - - uint32_t use_hw_rs; - /**< Specifies whether to use the hardware or software resampler for the - FIR resampler. - - @valuesbul - - 0 -- Software Resampler (Default) - - 1 -- Hardware Resampler - - @contcell - If the hardware resampler is selected, the dynamic_mode and delay_type - values are saved but they are ignored. - - The hardware resampler can be created only if the chip supports it. - - If hardware resampler creation fails for any reason, the software - resampler is created with a saved dynamic mode, and the client sets - the delay type. - - If the software resampler is selected, the dynamic_mode and delay_type - fields are saved and used. - - A Get parameter query on this API will return the actual resampler - being used. It is not simply what the client set. */ - - /*#< @h2xmle_description {Specifies whether to use the hardware or software - resampler for the FIR resampler or IIR preferred resampler. \n - If the hardware resampler is selected, the - dynamic_mode and delay_type values are saved but - they are ignored. \n - If the software resampler is selected, these - fields are saved and used. \n - For more details, see AudioReach Signal Processing Framework (SPF) API Reference.} - @h2xmle_rangeList {"Software Resampler"=0, - "Hardware Resampler"=1} - @h2xmle_default {0} */ - - uint16_t dynamic_mode; - /**< Specifies the operation mode for the FIR resampler. - - @valuesbul - - 0 -- Generic resampling (Default) - - 1 -- Dynamic resampling - - This dynamic_mode value is considered only if the software resampler - is used. */ - - /*#< @h2xmle_description {Specifies the operation mode for the FIR - resampler. This dynamic_mode value is - considered only if the software resampler is - used.} - @h2xmle_rangeList {"Generic resampling"=0; - "Dynamic resampling"=1} - @h2xmle_default {0} */ - - uint16_t delay_type; - /**< Specifies the delay type for the FIR resampler. - - @valuesbul - - 0 -- High delay with smooth transition (Default) - - 1 -- Low delay with visible transitional phase distortion - - This value is considered only if the software resampler is used and - the dynamic_mode value is set to 1. */ - - /*#< @h2xmle_description {Specifies the delay type for the FIR resampler. - This value is considered only if the software - resampler is used and the dynamic_mode value is - set to 1.} - @h2xmle_rangeList {"High delay with smooth transition"=0; - "Low delay with visible transitional phase - distortion"=1} - @h2xmle_default {0} */ -} -#include "spf_end_pack.h" -; -typedef struct param_id_mfc_resampler_cfg_t param_id_mfc_resampler_cfg_t; - - -/** @ingroup ar_spf_mod_mfc_mod - Identifier for the output media format parameter used by #MODULE_ID_MFC. - - @msgpayload - param_id_mfc_output_media_fmt_t @newpage -*/ -#define PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT 0x08001024 - -/*# @h2xmlp_parameter {"PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT", - PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT} - @h2xmlp_description {ID for the output media format parameter used by the - MFC module (MODULE_ID_MFC).} - @h2xmlp_toolPolicy {Calibration; RTC} - @h2xmlp_maxSize {72} */ - -/** @ingroup ar_spf_mod_mfc_mod - Payload of the #PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT parameter in the Media - Format Converter Module. Following this structure is the variable payload - for channel_map. - */ -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" -struct param_id_mfc_output_media_fmt_t -{ - int32_t sampling_rate; - /**< Sampling rate in samples per second. - - @valuesbul - - If the IIR resampler type is used: - - #PARAM_VAL_NATIVE (Default) - - #PARAM_VAL_UNSET - - 8, 16, 24, 32, 48 kHz - - - If the FIR resampler type is used, all values are allowed: - - #PARAM_VAL_NATIVE (Default) - - #PARAM_VAL_UNSET - - 8, 11.025, 12 kHz, 16, 22.05, 24, 32, 44.1, 48, 88.2, 96, 176.4, - 192, 352.8 kHz, 384 kHz @tablebulletend */ - - /*#< @h2xmle_description {Sampling rate in samples per second. \n - If the IIR resampler type is used, only the - following sample rates are allowed: - PARAM_VAL_NATIVE and PARAM_VAL_UNSET; and 8, 16, - 24, 32, and 48 kHz. \n - If the FIR resampler type is used, all values are - allowed.} - @h2xmle_rangeList {"PARAM_VAL_UNSET"= -2; - "PARAM_VAL_NATIVE"= -1; - "8 kHz"=8000; - "11.025 kHz"=11025; - "12 kHz"=12000; - "16 kHz"=16000; - "22.05 kHz"=22050; - "24 kHz"=24000; - "32 kHz"=32000; - "44.1 kHz"=44100; - "48 kHz"=48000; - "88.2 kHz"=88200; - "96 kHz"=96000; - "176.4 kHz"=176400; - "192 kHz"=192000; - "352.8 kHz"=352800; - "384 kHz"=384000} - @h2xmle_default {-1} */ - - int16_t bit_width; - /**< Bit width of the audio samples. - - @valuesbul - - #PARAM_VAL_NATIVE - - #PARAM_VAL_UNSET - - #BIT_WIDTH_16 - - #BIT_WIDTH_24 - - #BIT_WIDTH_32 - - Samples with a bit width of 16 (Q15 format) are stored in 16-bit - words. Samples with a bit width 24 bits (Q27 format) or 32 bits (Q31 - format) are stored in 32-bit words. */ - - /*#< @h2xmle_description {Bit width of the audio samples. \n - Samples with a bit width of 16 (Q15 format) are - stored in 16-bit words. \n - Samples with a bit width 24 bits (Q27 format) or - 32 bits (Q31 format) are stored in 32-bit words.} - @h2xmle_rangeList {"PARAM_VAL_NATIVE"= -1; - "PARAM_VAL_UNSET"= -2; - "BIT_WIDTH_16"=16; - "BIT_WIDTH_24"=24; - "BIT_WIDTH_32"=32} - @h2xmle_default {-1} */ - - int16_t num_channels; - /**< Number of channels in the array. - - @values -2 through 32 */ - - /*#< @h2xmle_description {Number of channels.} - @h2xmle_range {-2..MODULE_CMN_MAX_CHANNEL} - @h2xmle_default {-1} */ - - uint16_t channel_type[0]; - /**< Array of channel mappings. - - Specify a channel mapping for each output channel. If the number of - channels is not a multiple of four, zero padding must be added to the - array to align the packet to a multiple of 32 bits. - - If num_channels is set to PARAM_VAL_NATIVE (-1) or PARAM_VAL_UNSET(-2), - this field is ignored. */ - - /*#< @h2xmle_description {Array of channel mappings. Specify a channel - mapping for each output channel. \n - If the number of channels is not a multiple - of four, zero padding must be added to array - to align the packet to a multiple of 32 - bits . \n - If num_channels is set to PARAM_VAL_NATIVE - (-1) or PARAM_VAL_UNSET(-2), this field is - ignored.} - @h2xmle_variableArraySize {num_channels} - @h2xmle_rangeEnum {pcm_channel_map} - @h2xmle_default {1} */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; -typedef struct param_id_mfc_output_media_fmt_t param_id_mfc_output_media_fmt_t; - - -/*------------------------------------------------------------------------------ - Module -------------------------------------------------------------------------------*/ - -/** @ingroup ar_spf_mod_mfc_mod - Identifier for the Media Format Converter (MFC) module. - - @subhead4{Supported parameter IDs} - - #PARAM_ID_MFC_OUTPUT_MEDIA_FORMAT @lstsp1 - - #PARAM_ID_MFC_RESAMPLER_CFG @lstsp1 - - #PARAM_ID_CHMIXER_COEFF - - Resampling is supported only for an integer sampling rate ratio, for - example, 48 kHz and 8 kHz. - - @subhead4{Supported input media format ID} - - Data Format : #DATA_FORMAT_FIXED_POINT @lstsp1 - - fmt_id : Don't care @lstsp1 - - Sample Rates : >0 to 384 kHz @lstsp1 - - Number of channels : 1 to 128 (for certain products this module supports only 32 channels) @lstsp1 - - Channel type : 0..128 @lstsp1 - - Bits per sample : 16, 32 @lstsp1 - - Q format : 15, 27, 31 @lstsp1 - - Interleaving : De-interleaved unpacked @lstsp1 - - Signed/unsigned : Don't care -*/ -#define MODULE_ID_MFC 0x07001015 - -/*# @h2xmlm_module {"MODULE_ID_MFC", MODULE_ID_MFC} - @h2xmlm_displayName {"MFC"} - @h2xmlm_modSearchKeys {resampler, channel mixer, byte converter, Audio, Voice} - @h2xmlm_description {ID for the Media Format Converter (MFC) module. - For more details, see AudioReach Signal Processing Framework (SPF) API Reference.} - @h2xmlm_dataMaxInputPorts {1} - @h2xmlm_dataInputPorts {IN=MFC_DATA_INPUT_PORT} - @h2xmlm_dataOutputPorts {OUT=MFC_DATA_OUTPUT_PORT} - @h2xmlm_dataMaxOutputPorts {1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC, APM_CONTAINER_TYPE_GC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {4096} - - @{ <-- Start of the Module --> - @h2xml_Select {param_id_mfc_resampler_cfg_t} - @h2xmlm_InsertParameter - @h2xml_Select {param_id_mfc_output_media_fmt_t} - @h2xmlm_InsertParameter - @h2xml_Select {param_id_chmixer_coeff_t} - @h2xmlm_InsertParameter - @h2xml_Select {chmixer_coeff_t} - @h2xmlm_InsertStructure - @} <-- End of the Module --> */ - - -#endif // MFC_API_H diff --git a/modules/cmn/pcm_mf_cnv/capi/mfc/inc/capi_mfc.h b/modules/cmn/pcm_mf_cnv/capi/mfc/inc/capi_mfc.h deleted file mode 100644 index 7f223cbd..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/mfc/inc/capi_mfc.h +++ /dev/null @@ -1,33 +0,0 @@ -/* ======================================================================== */ -/** -@file capi_mfc.h - - Header file to implement the media format convertor block*/ - -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#ifndef CAPI_MFC_H -#define CAPI_MFC_H - -#include "capi.h" -#include "ar_defs.h" - -#ifdef __cplusplus -extern "C" { -#endif /*__cplusplus*/ - -capi_err_t capi_mfc_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); -capi_err_t capi_mfc_init(capi_t *_pif, capi_proplist_t *init_set_properties); - -#ifdef __cplusplus -} -#endif /*__cplusplus*/ - -#endif // CAPI_MFC_H diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/api/pcm_converter_api.h b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/api/pcm_converter_api.h deleted file mode 100644 index 2bbf8e0b..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/api/pcm_converter_api.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef PCM_CONVERTER_API_H_ -#define PCM_CONVERTER_API_H_ -/*============================================================================== - @file pcm_converter_api.h - @brief This file contains PCM converter APIs - -================================================================================ - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -==============================================================================*/ - -/*------------------------------------------------------------------------ - Include files - -----------------------------------------------------------------------*/ -#include "chmixer_common_api.h" -#include "module_cmn_api.h" -#include "common_enc_dec_api.h" - -/*# @h2xml_title1 {PCM Converter Module API} - @h2xml_title_agile_rev {PCM Converter Module API} - @h2xml_title_date {March 26, 2019} */ - -/*------------------------------------------------------------------------------ - Defines -------------------------------------------------------------------------------*/ - -/** @ingroup ar_spf_mod_pcm_conv_mod - Enumerates the input port ID for the MFC module (#MODULE_ID_MFC). */ -#define PCM_CNV_DATA_INPUT_PORT 0x2 - -/** @ingroup ar_spf_mod_pcm_conv_mod - Enumerates the output port ID for the MFC module. */ -#define PCM_CNV_DATA_OUTPUT_PORT 0x1 - -/*------------------------------------------------------------------------------ - Module -------------------------------------------------------------------------------*/ - -/** @ingroup ar_spf_mod_pcm_conv_mod - Identifier for the PCM Converter module, which is used to convert the - properties of a PCM stream: endianness, interleaving, bit width, - number of channels, and so on. It cannot be used to convert the sampling - rate. This module has only one input port and one output port. - - @subhead4{Supported parameter IDs} - - #PARAM_ID_PCM_OUTPUT_FORMAT_CFG @lstsp1 - - #PARAM_ID_REMOVE_INITIAL_SILENCE @lstsp1 - - #PARAM_ID_REMOVE_TRAILING_SILENCE - - @subhead4{Supported input media format ID} - - Data format : #DATA_FORMAT_FIXED_POINT and #DATA_FORMAT_FLOATING_POINT @lstsp1 - - fmt_id : Don't care @lstsp1 - - Sample rates : 1..384 kHz @lstsp1 - - Number of channels: 1 to 128 (for certain products this module supports only 32 channels) @lstsp1 - - Bit width: @lstsep - - 16 (bits per sample 16 and Q15) @lstsp2 - - 24 (bits per sample 24 and Q23, bits per sample 32 and Q23, Q27, or - Q31) @lstsp2 - - 32 (bits per sample 32 and Q31) @lstsp1 - - 64 (only for floating point data) - - Interleaving: @lstsep - - Interleaved @lstsp2 - - De-interleaved unpacked @lstsp2 - - De-interleaved packed @lstsp1 - - Endianness: little, big - */ -#define MODULE_ID_PCM_CNV 0x07001003 - -/*# @h2xmlm_module {"MODULE_ID_PCM_CNV", MODULE_ID_PCM_CNV} - @h2xmlm_displayName {"PCM Converter"} - @h2xmlm_modSearchKeys {channel mixer, byte converter, endianness, Audio} - @h2xmlm_description {ID for the module used to convert the - properties of a PCM stream: endianness, - interleaving, bit width, number of channels,data format converter, - and so on. It cannot be used to convert the - sampling rate. \n - The module has only one input port and one - output port. For more details, see AudioReach Signal Processing Framework (SPF) API Reference.} - @h2xmlm_dataMaxInputPorts {1} - @h2xmlm_dataMaxOutputPorts {1} - @h2xmlm_dataInputPorts {IN = PCM_CNV_DATA_INPUT_PORT} - @h2xmlm_dataOutputPorts {OUT = PCM_CNV_DATA_OUTPUT_PORT} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_GC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {4096} - - @{ <-- Start of the Module --> - @h2xml_Select {"param_id_pcm_output_format_cfg_t"} - @h2xmlm_InsertParameter - @h2xml_Select {"payload_pcm_output_format_cfg_t"} - @h2xmlm_InsertParameter - @h2xml_Select {param_id_pcm_output_format_cfg_t::data_format} - @h2xmle_rangeEnum {pcm_data_format} - @h2xml_Select {param_id_chmixer_coeff_t} - @h2xmlm_InsertParameter - @h2xml_Select {chmixer_coeff_t} - @h2xmlm_InsertStructure - @} <-- End of the Module --> */ - - -#endif // PCM_CONVERTER_API_H_ diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/inc/capi_pcm_cnv.h b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/inc/capi_pcm_cnv.h deleted file mode 100644 index 6fc7c278..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/inc/capi_pcm_cnv.h +++ /dev/null @@ -1,35 +0,0 @@ -/* ======================================================================== */ -/** -@file capi_pcm_cnv.h - - Header file to implement the Common Audio Post Processor Interface - for Tx/Rx Tuning PCM_CNV block -*/ - -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#ifndef CAPI_PCM_CNV_H -#define CAPI_PCM_CNV_H - -#include "capi.h" -#include "ar_defs.h" - -#ifdef __cplusplus -extern "C" { -#endif /*__cplusplus*/ - -capi_err_t capi_pcm_cnv_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); -capi_err_t capi_pcm_cnv_init(capi_t *_pif, capi_proplist_t *init_set_properties); - -#ifdef __cplusplus -} -#endif /*__cplusplus*/ - -#endif // CAPI_PCM_CNV_H diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_i.h b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_i.h deleted file mode 100644 index 16de3a45..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_i.h +++ /dev/null @@ -1,72 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_pcm_mf_cnv_i.h - */ - -#include "capi_pcm_mf_cnv_utils.h" - -capi_vtbl_t *capi_pcm_mf_cnv_get_vtable(); - -capi_err_t capi_pcm_mf_cnv_process(capi_t *_pif, capi_stream_data_t *input[], capi_stream_data_t *output[]); - -capi_err_t capi_pcm_mf_cnv_end(capi_t *_pif); - -capi_err_t capi_pcm_mf_cnv_set_param(capi_t * _pif, - uint32_t param_id, - const capi_port_info_t *port_info_ptr, - capi_buf_t * params_ptr); - -capi_err_t capi_pcm_mf_cnv_get_param(capi_t * _pif, - uint32_t param_id, - const capi_port_info_t *port_info_ptr, - capi_buf_t * params_ptr); - -capi_err_t capi_pcm_mf_cnv_set_properties(capi_t *me_ptr, capi_proplist_t *props_ptr); - -capi_err_t capi_pcm_mf_cnv_get_properties(capi_t *me_ptr, capi_proplist_t *props_ptr); - -capi_err_t capi_pcm_mf_cnv_check_buffers(capi_pcm_mf_cnv_t *me_ptr, - capi_buf_t * src_buf_ptr, - capi_buf_t * dest_buf_ptr, - uint32_t port, - uint32_t eos_flag); - -capi_err_t capi_pcm_mf_cnv_check_scratch_buffer(capi_pcm_mf_cnv_t *me_ptr, - capi_buf_t * src_buf_ptr, - capi_buf_t * dest_buf_ptr, - uint32_t port); - -static inline void pcm_to_capi_interleaved_with_native(capi_interleaving_t *capi_value, - int16_t cfg_value, - capi_interleaving_t inp_value) -{ - switch (cfg_value) - { - case PCM_INTERLEAVED: - { - *capi_value = CAPI_INTERLEAVED; - break; - } - case PCM_DEINTERLEAVED_PACKED: - { - *capi_value = CAPI_DEINTERLEAVED_PACKED; - break; - } - case PCM_DEINTERLEAVED_UNPACKED: - { - *capi_value = CAPI_DEINTERLEAVED_UNPACKED_V2; - break; - } - case PARAM_VAL_NATIVE: - { - *capi_value = inp_value; - break; - } - default: - break; - } -} diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_island.cpp b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_island.cpp deleted file mode 100644 index 5d24ff89..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_island.cpp +++ /dev/null @@ -1,281 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_pcm_mf_cnv_island.cpp - * - * Cpp source file to implement the Common Audio Post Processor Interface - * PCM_CNV block - */ - -#include "capi_pcm_mf_cnv_i.h" -#include "capi_pcm_mf_cnv_utils.h" -#define ALIGN4(o) (((o)+3)&(~3)) - -static capi_vtbl_t vtbl = { capi_pcm_mf_cnv_process, capi_pcm_mf_cnv_end, - capi_pcm_mf_cnv_set_param, capi_pcm_mf_cnv_get_param, - capi_pcm_mf_cnv_set_properties, capi_pcm_mf_cnv_get_properties }; - -capi_vtbl_t *capi_pcm_mf_cnv_get_vtable() -{ - return &vtbl; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - Check if the scratch buffer allocated had enough size to handle incoming data. - LOGIC: - max_data_len_per_ch will be set to 0 during init or library init (even if scratch buffer is allocated for enc/dec) - At process time, src_buf_max_len_per_ch is calculated from input buffer - If this is more than the stored value, scratch buffer allocation logic is called. - - Since scratch buffer allocation depends on the factors like ordering or the modules, calculation is a little complex. - So we don't want it to be called at every process. To achieve this, we use the variable me_ptr->max_data_len_per_ch - Module reordering can only happen at capi_pcm_mf_cnv_lib_init, so this variable is reset to 0 there. - In other situations, if local_max_data_len_per_ch lesser than stored, we don't have to realloc the scratch buffers -______________________________________________________________________________________________________________________*/ -capi_err_t capi_pcm_mf_cnv_check_scratch_buffer(capi_pcm_mf_cnv_t *me_ptr, - capi_buf_t * src_buf_ptr, - capi_buf_t * dest_buf_ptr, - uint32_t port) -{ - capi_err_t capi_result = CAPI_EOK; - uint32_t src_buf_max_len_per_ch = 0; - - if (CAPI_DEINTERLEAVED_UNPACKED_V2 == me_ptr->in_media_fmt[port].format.data_interleaving) - { - src_buf_max_len_per_ch = src_buf_ptr[port].max_data_len; - } - else - { - src_buf_max_len_per_ch = src_buf_ptr[port].max_data_len / me_ptr->in_media_fmt[port].format.num_channels; - } - - src_buf_max_len_per_ch = ALIGN4(src_buf_max_len_per_ch); - if (me_ptr->max_data_len_per_ch < src_buf_max_len_per_ch) - { - me_ptr->max_data_len_per_ch = src_buf_max_len_per_ch; - capi_result = capi_pcm_mf_cnv_allocate_scratch_buffer(me_ptr, src_buf_max_len_per_ch); - if (CAPI_EOK != capi_result) - { - CNV_MSG(me_ptr->miid, DBG_ERROR_PRIO, "[%u] Error in pcm convert process - %d", me_ptr->type, capi_result); - capi_pcm_mf_cnv_reset_buffer_len(me_ptr, src_buf_ptr, dest_buf_ptr, port); - // Resetting the value of max_data_len_per_ch = 0 when scratch buffer allocation failed - me_ptr->max_data_len_per_ch = 0; - } - } - return capi_result; -} - -/*_____________________________________________________________________________________________________________________ - DESCRIPTION: - PCM_CNV module Data Process function to process an input buffer and generates an output buffer. - 1. Checks for the buffer size vs threshold value in case of CAPI_PCM_ENCODER and CAPI_PCM_DECODER - 2. If there is EOS marker, partial data is handled even for threshold modules - 3. For non-threshold modules, buffer sizes are assumed to be correct, so no checking is done to save mips - 4. Scratch buffer sizes are checked against stored value in case an alloc or realloc is needed - ____________________________________________________________________________________________________________________*/ -capi_err_t capi_pcm_mf_cnv_process(capi_t *_pif, capi_stream_data_t *input[], capi_stream_data_t *output[]) -{ - capi_err_t capi_result = CAPI_EOK; - uint32_t actual_input_bytes = 0; - bool_t all_input_consumed = FALSE; - uint32_t port = 0; - - bool_t is_output_present = - ((output) && (output[port]) && (output[port]->buf_ptr) && (output[port]->buf_ptr->data_ptr)); - bool_t is_input_present = ((input) && (input[port]) && (input[port]->buf_ptr) && (input[port]->buf_ptr->data_ptr)); - - if (is_input_present && (!is_output_present)) - { - // mark input is unconsumed - input[0]->buf_ptr->actual_data_len = 0; - } - - if (!(is_output_present && is_input_present)) - { - CNV_MSG(MIID_UNKNOWN, DBG_LOW_PRIO, "[%u] Cannot process: Output or input is NULL"); - return AR_EOK; - } - - actual_input_bytes = input[0]->buf_ptr->actual_data_len; - capi_pcm_mf_cnv_t *me_ptr = (capi_pcm_mf_cnv_t *)_pif; - - capi_buf_t *src_buf_ptr = input[port]->buf_ptr; - capi_buf_t *dest_buf_ptr = output[port]->buf_ptr; - - /*We will call process for pcm decoder and pcm enc eventhough lib is disabled and no memory is allocated - This is because pcm dec and enc need to raise threshold and cannot be disabled - In this case, memcpy and return without accessing lib memory */ - if (me_ptr->lib_enable == FALSE) - { - bool_t is_inplace = (input[0]->buf_ptr[0].data_ptr == output[0]->buf_ptr[0].data_ptr); - // even if processing is not done, input data needs to be copied to output & output actual len be set. - uint32_t out_max_data_len = output[0]->buf_ptr[0].max_data_len; - uint32_t num_bytes_to_cpy = MIN(input[0]->buf_ptr[0].actual_data_len, out_max_data_len); - for (uint32_t i = 0; i < input[0]->bufs_num; i++) - { - if (!is_inplace) - { - memscpy(output[0]->buf_ptr[i].data_ptr, out_max_data_len, input[0]->buf_ptr[i].data_ptr, num_bytes_to_cpy); - } - } - - // first update only first ch len's since module only supports CAPI_DEINTERLEAVED_UNPACKED_V2 - output[0]->buf_ptr[0].actual_data_len = num_bytes_to_cpy; - input[0]->buf_ptr[0].actual_data_len = num_bytes_to_cpy; - - /** return here if library is not enabled*/ - return CAPI_EOK; - } - - capi_result = capi_pcm_mf_cnv_check_scratch_buffer(me_ptr, src_buf_ptr, dest_buf_ptr, port); - - if (CAPI_EOK != capi_result) - { - return capi_result; - } - - // if configured for fixed output, but input samples differ from expected number, reset values - // if input actual len is more than expected module needs to consume only whats expected. - // if input is less than expected, module operates in fixed input mode. - if ((CAPI_MFC == me_ptr->type) && (FIR_RESAMPLER == me_ptr->pc[0].resampler_type) && - capi_pcm_mf_cnv_is_dm_enabled(me_ptr) && (FWK_EXTN_DM_FIXED_OUTPUT_MODE == me_ptr->dm_info.dm_mode)) - { - uint32_t in_samples = src_buf_ptr->actual_data_len / (me_ptr->in_media_fmt[0].format.bits_per_sample >> 3); - - if (in_samples < me_ptr->dm_info.expected_in_samples) - { - // process with available input samples if EOS/EOF is set, else return need more - // Also consume available input if got set_param for consume_partial_data. - if (input[port]->flags.end_of_frame || input[port]->flags.marker_eos || - me_ptr->dm_info.should_consume_partial_input) - { - me_ptr->dm_info.expected_in_samples = 0; - } - else // return need more - { - CNV_MSG(me_ptr->miid, - DBG_LOW_PRIO, - "[%u] Need more inp samples! expected %lu, received %lu", - me_ptr->type, - me_ptr->dm_info.expected_in_samples, - in_samples); - - // mark input unconsumed, need to update only 1st ch. - input[port]->buf_ptr[0].actual_data_len = 0; - return CAPI_ENEEDMORE; - } - } - else if (in_samples > me_ptr->dm_info.expected_in_samples) - { - CNV_MSG(me_ptr->miid, - DBG_LOW_PRIO, - "[%u] Got more samples! expected %lu, received %lu", - me_ptr->type, - me_ptr->dm_info.expected_in_samples, - in_samples); - - //resampler will not consume more than expected samples, so update input buffer actual data len before. - //test case: gen_cntr_two_priority_sync_parallel_paths_2, test passed but glitch was observed because samples were lost. - src_buf_ptr->actual_data_len = - me_ptr->dm_info.expected_in_samples * (me_ptr->in_media_fmt[0].format.bits_per_sample >> 3); //todo: check dynamic resampler - } - } - - // PC library updates only reads/writes into first ch capi_buf_t[0] lengths, capi is expected to update rest of the - // channel buffers if the interleaving format is not unpacked V2 - me_ptr->pc[port].heap_id = (uint32_t)me_ptr->heap_info.heap_id; - capi_result = ar_result_to_capi_err(pc_process(&me_ptr->pc[port], - src_buf_ptr, - dest_buf_ptr, - &me_ptr->scratch_buf_1[port], - &me_ptr->scratch_buf_2[port])); - if (CAPI_ENEEDMORE == capi_result) - { - #ifdef PCM_CNV_DEBUG - CNV_MSG(me_ptr->miid, - DBG_HIGH_PRIO, - "[%u] needs more input, input actual_data_len per ch = %ld ", - me_ptr->type, - (input[port]->buf_ptr ? input[port]->buf_ptr[0].actual_data_len : 0)); -#endif - // Drop data for eof case. Mark data as unconsumed for non-eof case. - if (!input[port]->flags.end_of_frame) - { - input[port]->buf_ptr[0].actual_data_len = 0; - } - return capi_result; - } - - if (0 != capi_result) - { - CNV_MSG(me_ptr->miid, - DBG_ERROR_PRIO, - "[%u] Error while pcm converter process, inp and out media fmts are ", - me_ptr->type); - capi_pcm_mf_cnv_print_media_fmt(me_ptr, &me_ptr->pc[port].core_lib.input_media_fmt, port); - capi_pcm_mf_cnv_print_media_fmt(me_ptr, &me_ptr->pc[port].core_lib.output_media_fmt, port); - } - - uint32_t is_gapless_case = FALSE; - - if ((me_ptr->initial_silence_in_samples > 0) || (me_ptr->trailing_silence_in_samples > 0)) - { - capi_media_fmt_v2_t *out_mf = NULL; - out_mf = me_ptr->out_media_fmt; - bool_t is_initial = TRUE; - uint32_t num_bytes_removed = 0; - uint32_t bytes_per_sample = (out_mf->format.bits_per_sample) / 8; - capi_stream_data_v2_t *in_stream_ptr = (capi_stream_data_v2_t *)input[0]; - module_cmn_md_list_t * metadata_list_ptr = in_stream_ptr->metadata_list_ptr; - - if (actual_input_bytes == input[0]->buf_ptr->actual_data_len) - { - all_input_consumed = TRUE; - } - // Detect last frame based on EOS. - if (in_stream_ptr->flags.marker_eos && all_input_consumed && me_ptr->trailing_silence_in_samples) - { - - is_initial = FALSE; - - uint32_t bytes_to_remove_per_channel = me_ptr->trailing_silence_in_samples * bytes_per_sample; - capi_cmn_gapless_remove_zeroes(&bytes_to_remove_per_channel, - out_mf, - &output[0], - is_initial, - metadata_list_ptr); - me_ptr->trailing_silence_in_samples = 0; - } - - if ((me_ptr->initial_silence_in_samples > 0) && (output[0]->buf_ptr->actual_data_len > 0)) - { - uint32_t bytes_to_remove_per_channel = me_ptr->initial_silence_in_samples * bytes_per_sample; - num_bytes_removed = bytes_to_remove_per_channel; - capi_cmn_gapless_remove_zeroes(&bytes_to_remove_per_channel, - out_mf, - &output[0], - is_initial, - metadata_list_ptr); - num_bytes_removed -= bytes_to_remove_per_channel; - if (output[0]->flags.is_timestamp_valid && num_bytes_removed) - { - is_gapless_case = TRUE; - output[0]->timestamp = - output[0]->timestamp + ((num_bytes_removed / bytes_per_sample) / out_mf->format.sampling_rate) * 1000000; - } - me_ptr->initial_silence_in_samples = bytes_to_remove_per_channel / bytes_per_sample; - } - } - - if (input[port]->flags.is_timestamp_valid && (FALSE == is_gapless_case)) - { - output[port]->timestamp = input[port]->timestamp - me_ptr->events_config.delay_in_us; - output[port]->flags.is_timestamp_valid = TRUE; - } - - return capi_result; -} diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils.h b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils.h deleted file mode 100644 index a0a7e353..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils.h +++ /dev/null @@ -1,266 +0,0 @@ -/* ======================================================================== */ -/** -@file capiv2_pcm_mf_cnv_utils.h - - Header file to implement the Common Audio Post Processor Interface - for Tx/Rx Tuning PCM_CONV block -*/ - -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ - -#ifndef CAPI_PCM_CNV_UTILS_H -#define CAPI_PCM_CNV_UTILS_H - -#ifndef CAPI_UNIT_TEST -/* For shared libraries. */ -#include "shared_lib_api.h" -#include "topo_utils.h" -#else -#include "capi_fwk_extns_pcm.h" -#include "capi_fwk_extns_frame_duration.h" -#endif -#include "capi_cmn.h" -#include "audpp_util.h" -#include "capi.h" -#include "audio_basic_op_ext.h" -#include "common_enc_dec_api.h" -#include "pcm_converter_api.h" -#include "pcm_encoder_api.h" -#include "pcm_decoder_api.h" -#include "mfc_api.h" -#include "capi_pcm_cnv.h" -#include "capi_pcm_dec.h" -#include "capi_pcm_enc.h" -#include "capi_mfc.h" -#include "pc_converter.h" - -#define CAPI_PCM_CNV_MAX_IN_PORTS 1 -#define CAPI_PCM_CNV_MAX_OUT_PORTS 1 -#define PCM_TRAILING_DELAY 0 -#define PCM_DECODER_DELAY 0 -#define PRI_IN_PORT_INDEX 0 -#define PRI_OUT_PORT_INDEX 0 -#define PCM_ENCODER_CONFIG_MAX_FRAME_SIZE_IN_SAMPLES 38400 -#define PCM_ENCODER_CONFIG_MAX_FRAME_SIZE_IN_MICROSECOND 100000 -#define PCM_ENCODER_CONFIG_FRAME_SIZE_IN_SAMPLES 1 -#define PCM_ENCODER_CONFIG_FRAME_SIZE_IN_MICROSECONDS 2 -#ifdef CAPI_UNIT_TEST -static inline uint32_t tu_get_unit_frame_size(uint32_t sample_rate) -{ - // Returns 1 sample as a minimum value - if (sample_rate < 1000) - { - return 1; - } - return (sample_rate / 1000); -} -#define PCM_CNV_DEBUG -#endif - -//#define PCM_CNV_DEBUG - - -#define ALIGN_4_BYTES(a) ((a + 3) & (0xFFFFFFFC)) - -static const uint32_t PCM_CNV_STACK_SIZE = 4096; -const uint32_t PCM_CNV_BW = 1 * 1024 * 1024; -const uint32_t PCM_CNV_CAPI_KPPS = 50; - -typedef enum capi_pcm_mf_cnv_result_t { CAPI_PCM_INVALID = 0, CAPI_PCM_VALID, CAPI_PCM_ERROR } capi_pcm_mf_cnv_result_t; - -typedef enum capi_pcm_mf_cnv_type_t { - CAPI_PCM_CONVERTER = 0, - CAPI_PCM_ENCODER, - CAPI_PCM_DECODER, - CAPI_MFC -} capi_pcm_mf_cnv_type_t; - -typedef enum capi_pcm_mf_cnv_perf_mode_t { - CAPI_PCM_PERF_MODE_INVALID = 0, - CAPI_PCM_PERF_MODE_LOW_POWER = 1, // should be same as #define APM_SG_PERF_MODE_LOW_POWER 0x1 - CAPI_PCM_PERF_MODE_LOW_LATENCY = 2 // should be same as #define APM_SG_PERF_MODE_LOW_LATENCY 0x2 -} capi_pcm_mf_cnv_perf_mode_t; - -typedef struct capi_pcm_mf_cnv_events_config_t -{ - uint32_t kpps; - uint32_t delay_in_us; - uint32_t code_bw; - uint32_t data_bw; -} capi_pcm_mf_cnv_events_config_t; - -typedef struct capi_pcm_mf_cnv_chmixer_coef_set_t -{ - uint16_t num_in_ch; - uint16_t *in_ch_map; - uint16_t num_out_ch; - uint16_t *out_ch_map; - int16_t * coef_ptr; -} capi_pcm_mf_cnv_chmixer_coef_set_t; - -typedef struct capi_pc_configured_mf_t -{ - data_format_t data_format; - uint32_t sampling_rate; - payload_pcm_output_format_cfg_t fmt; - uint16_t channel_type[CAPI_MAX_CHANNELS_V2]; -} capi_pc_configured_mf_t; - -typedef struct capi_pcm_mf_cnv_chmixer_config -{ - uint32_t num_coef_sets; - capi_pcm_mf_cnv_chmixer_coef_set_t *coef_sets_ptr; -} capi_pcm_mf_cnv_chmixer_config; - -typedef struct capi_pcm_mf_cnv_dm_info_t -{ - // mode - uint16_t dm_mode; - // flag to indicate if dm is enabled - uint16_t is_dm_disabled; - // for fixed output mode - uint32_t req_out_samples; - uint32_t expected_in_samples; - // for fixed input mode - uint32_t req_in_samples; - uint32_t expected_out_samples; - - uint32_t should_consume_partial_input; -} capi_pcm_mf_cnv_dm_info_t; - -typedef struct capi_pcm_mf_cnv_t -{ - capi_t vtbl; - capi_event_callback_info_t cb_info; - capi_heap_id_t heap_info; - capi_media_fmt_v2_t in_media_fmt[CAPI_PCM_CNV_MAX_IN_PORTS]; - capi_media_fmt_v2_t out_media_fmt[CAPI_PCM_CNV_MAX_OUT_PORTS]; - fwk_extn_pcm_param_id_media_fmt_extn_t extn_in_media_fmt[CAPI_PCM_CNV_MAX_IN_PORTS]; - fwk_extn_pcm_param_id_media_fmt_extn_t extn_out_media_fmt[CAPI_PCM_CNV_MAX_OUT_PORTS]; - capi_buf_t scratch_buf_1[CAPI_PCM_CNV_MAX_OUT_PORTS]; - capi_buf_t scratch_buf_2[CAPI_PCM_CNV_MAX_OUT_PORTS]; - capi_pc_configured_mf_t configured_media_fmt[CAPI_PCM_CNV_MAX_OUT_PORTS]; - capi_pcm_mf_cnv_chmixer_config config; - uint32_t coef_payload_size; - uint32_t inp_buf_size_per_ch; - uint32_t out_buf_size_per_ch; - uint32_t max_data_len_per_ch; - capi_pcm_mf_cnv_events_config_t events_config; - capi_pcm_mf_cnv_type_t type; - capi_pcm_mf_cnv_perf_mode_t perf_mode; - - // This variable will hold container based duration for MFC and SG perf mode based thresh for PCM decoders and - // encoders - uint32_t frame_size_us; - pc_lib_t pc[CAPI_PCM_CNV_MAX_IN_PORTS]; - bool_t lib_enable; - bool_t input_media_fmt_received; // indicates ip mf is received, lib init done and out mf is raised - uint32_t initial_silence_in_samples; - uint32_t trailing_silence_in_samples; - uint32_t miid; - param_id_pcm_encoder_frame_size_t frame_size; - - // port states - intf_extn_data_port_state_t in_port_state; - intf_extn_data_port_state_t out_port_state; - - // fixed input or output mode (if configured) and related data - capi_pcm_mf_cnv_dm_info_t dm_info; -} capi_pcm_mf_cnv_t; - -bool_t pcm_mf_cnv_is_supported_media_type(const capi_media_fmt_v2_t *format_ptr); - -bool_t pcm_mf_cnv_mfc_is_supported_media_type(const capi_media_fmt_v2_t *format_ptr); - -void capi_pcm_mf_cnv_mfc_set_output_bps_qf(capi_pc_configured_mf_t *media_fmt_ptr); - -uint32_t capi_pcm_mf_cnv_mfc_set_extn_inp_mf_bitwidth(uint32_t q_factor); -void capi_pcm_mf_cnv_mfc_deinit(capi_pcm_mf_cnv_t *me_ptr); -capi_err_t capi_pcm_mf_cnv_check_ch_type(capi_pcm_mf_cnv_t *me_ptr, - const uint16_t * channel_type, - const uint32_t array_size); - -capi_err_t capi_pcm_mf_cnv_handle_input_media_fmt(capi_pcm_mf_cnv_t * me_ptr, - capi_media_fmt_v2_t *temp_media_fmt_ptr, - uint32_t port); -capi_err_t capi_pcm_mf_cnv_check_and_raise_output_media_format_event(capi_pcm_mf_cnv_t *me_ptr); - -void capi_pcm_mf_cnv_print_media_fmt(capi_pcm_mf_cnv_t *me_ptr, pc_media_fmt_t *fmt_ptr, uint32_t port); -capi_err_t capi_pcm_mf_cnv_get_fixed_out_samples(capi_pcm_mf_cnv_t *me_ptr); -capi_err_t capi_pcm_mf_cnv_get_max_in_samples(capi_pcm_mf_cnv_t *me_ptr, uint32_t max_out_samples); - -ar_result_t capi_pcm_mf_cnv_lib_init(capi_pcm_mf_cnv_t *me_ptr, bool_t fir_iir_rs_switch); -capi_err_t capi_pcm_mf_cnv_allocate_scratch_buffer(capi_pcm_mf_cnv_t *me_ptr, uint32_t max_data_len_per_ch); -bool_t pcm_mf_cnv_is_supported_out_media_type(const payload_pcm_output_format_cfg_t *format_ptr, uint32 data_format); -capi_pcm_mf_cnv_result_t pcm_mf_cnv_is_supported_extn_media_type( - const fwk_extn_pcm_param_id_media_fmt_extn_t *format_ptr); -capi_err_t capi_pcm_mf_cnv_process_set_properties(capi_pcm_mf_cnv_t *me_ptr, capi_proplist_t *proplist_ptr); -capi_err_t capi_pcm_mf_cnv_process_get_properties(capi_pcm_mf_cnv_t * me_ptr, - capi_proplist_t * proplist_ptr, - capi_pcm_mf_cnv_type_t type); -void capi_pcm_mf_cnv_init_config(capi_pcm_mf_cnv_t *me_ptr); -capi_err_t capi_pcm_mf_cnv_update_and_raise_events(capi_pcm_mf_cnv_t *me_ptr); -capi_err_t capi_pcm_mf_cnv_raise_process_check_event(capi_pcm_mf_cnv_t *me_ptr); -capi_err_t capi_pcm_mf_cnv_raise_process_event(capi_pcm_mf_cnv_t *me_ptr); - -capi_err_t capi_pcm_mf_cnv_handle_data_port_op(capi_pcm_mf_cnv_t *me_ptr, capi_buf_t *params_ptr); - -capi_err_t capi_pcm_mf_cnv_realloc_scratch_buf(capi_pcm_mf_cnv_t *me_ptr, capi_buf_t *sb_ptr, uint32_t max_data_len); - -capi_err_t capi_pcm_mf_cnv_allocate_scratch_buffer(capi_pcm_mf_cnv_t *me_ptr, uint32_t max_data_len_per_ch); - -capi_err_t capi_pcm_encoder_update_frame_size(capi_pcm_mf_cnv_t *me_ptr); - - -void capi_pcm_mf_cnv_reset_buffer_len(capi_pcm_mf_cnv_t *me_ptr, - capi_buf_t * src_buf_ptr, - capi_buf_t * dest_buf_ptr, - uint32_t port); - -void capi_pcm_mf_cnv_update_dm_disable(capi_pcm_mf_cnv_t *me_ptr); - -static inline bool_t capi_pcm_mf_cnv_is_dm_enabled(capi_pcm_mf_cnv_t *me_ptr) -{ - return !me_ptr->dm_info.is_dm_disabled; -} - -static inline pc_interleaving_t capi_interleaved_to_pc(capi_interleaving_t capi_value) -{ - pc_interleaving_t pc_interleaved = PC_UNKNOWN_INTERLEAVING; - if (CAPI_INTERLEAVED == capi_value) - { - pc_interleaved = PC_INTERLEAVED; - } - else if (CAPI_DEINTERLEAVED_PACKED == capi_value) - { - pc_interleaved = PC_DEINTERLEAVED_PACKED; - } - else if(CAPI_DEINTERLEAVED_UNPACKED_V2 == capi_value) - { - // input media format will only be set with V2, hence no need to V1. - pc_interleaved = PC_DEINTERLEAVED_UNPACKED_V2; - } - return pc_interleaved; -} - -static inline pc_data_format_t capi_dataformat_to_pc(data_format_t capi_value) -{ - if (CAPI_FIXED_POINT == capi_value) - { - return PC_FIXED_FORMAT; - } - else if (CAPI_FLOATING_POINT == capi_value) - { - return PC_FLOATING_FORMAT; - } - return PC_INVALID_FORMAT; -} - -#endif // CAPI_PCM_CNV_UTILS_H diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils_island.cpp b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils_island.cpp deleted file mode 100644 index 4383466d..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/src/capi_pcm_mf_cnv_utils_island.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_pcm_mf_cnv_utils_island.cpp - * - * C source file to implement the Audio Post Processor Interface for - * PCM_CNV Module - */ - -#include "capi_pcm_mf_cnv_utils.h" - -/*_____________________________________________________________________________________________________________________ - DESCRIPTION: - Prints media fmt - ____________________________________________________________________________________________________________________*/ -void capi_pcm_mf_cnv_print_media_fmt(capi_pcm_mf_cnv_t *me_ptr, pc_media_fmt_t *fmt_ptr, uint32_t port) -{ - CNV_MSG(me_ptr->miid, - DBG_HIGH_PRIO, - "bit_width : %u , word_size : %u, q_factor : %u, interleaving : %u, endianness : %u, " - "alignment : %u, num_channels : %u sampling rate %d", - fmt_ptr->bit_width, - fmt_ptr->word_size, - fmt_ptr->q_factor, - fmt_ptr->interleaving, - fmt_ptr->endianness, - fmt_ptr->alignment, - fmt_ptr->num_channels, - fmt_ptr->sampling_rate); -} - - diff --git a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/stub_src/capi_pcm_cnv_stub.cpp b/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/stub_src/capi_pcm_cnv_stub.cpp deleted file mode 100644 index 4e2afdb7..00000000 --- a/modules/cmn/pcm_mf_cnv/capi/pcm_cnv/stub_src/capi_pcm_cnv_stub.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_pcm_cnv_stub.cpp - * - * Stub Interface for pcm_cnv. - */ - -#include "capi_pcm_cnv.h" - -capi_err_t capi_pcm_cnv_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties) -{ - return CAPI_EUNSUPPORTED; -} - -capi_err_t capi_pcm_cnv_init(capi_t *_pif, capi_proplist_t *init_set_properties) -{ - return CAPI_EUNSUPPORTED; -} - -capi_err_t capi_pcm_enc_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties) -{ - return CAPI_EUNSUPPORTED; -} -capi_err_t capi_pcm_enc_init(capi_t *_pif, capi_proplist_t *init_set_properties) -{ - return CAPI_EUNSUPPORTED; -} - -capi_err_t capi_pcm_dec_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties) -{ - return CAPI_EUNSUPPORTED; -} - -capi_err_t capi_pcm_dec_init(capi_t *_pif, capi_proplist_t *init_set_properties) -{ - return CAPI_EUNSUPPORTED; -} diff --git a/modules/cmn/pcm_mf_cnv/lib/inc/pc_converter.h b/modules/cmn/pcm_mf_cnv/lib/inc/pc_converter.h deleted file mode 100644 index 32832a11..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/inc/pc_converter.h +++ /dev/null @@ -1,437 +0,0 @@ -/*======================================================================== - -file pcm_converter.h -This file contains functions for compression-decompression container - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -======================================================================*/ - -/* ======================================================================= -INCLUDE FILES FOR MODULE -========================================================================== */ -#ifndef PCM_CONVERTER_H -#define PCM_CONVERTER_H -#include "audio_basic_op_ext.h" -#include "ar_error_codes.h" -#include "capi.h" -#include "capi_cmn.h" -#include "shared_lib_api.h" -#include "shared_aud_cmn_lib.h" -#include "common_enc_dec_api.h" -#include "pcm_converter_api.h" -#include "pcm_encoder_api.h" -#include "pcm_decoder_api.h" -#include "ChannelMixerLib.h" -#include "hwsw_rs_lib.h" -#include "iir_rs_lib.h" -#include "spf_interleaver.h" - -#ifdef __cplusplus -extern "C" { -#endif /*__cplusplus*/ - -/*--------------------------------------------------------------*/ -/* Macro definitions */ -/* -------------------------------------------------------------*/ -//#define USE_Q6_SPECIFIC_CODE -//#define PCM_CNV_LIB_DEBUG 1 -#define MIID_UNKNOWN 0 - -#define CNV_MSG_PREFIX "MFC_PCM_CNV:[%lX] " -#define CNV_MSG(ID, xx_ss_mask, xx_fmt, ...) AR_MSG(xx_ss_mask, CNV_MSG_PREFIX xx_fmt, ID, ##__VA_ARGS__) - -#define CNV_IIR_RS_MIN_FRAME_SIZE_US 1000 -#define MEM_ALIGN_EIGHT_BYTE 8 - -/*---------------------------------------------------------------------------- - * Global Data Definitions - * -------------------------------------------------------------------------*/ -static const uint32_t MAX_Q23 = ((1 << PCM_Q_FACTOR_23) - 1); -static const uint32_t MIN_Q23 = (-(1 << PCM_Q_FACTOR_23)); -static const uint32_t MAX_Q27 = ((1 << PCM_Q_FACTOR_27) - 1); -static const uint32_t MIN_Q27 = (-(1 << PCM_Q_FACTOR_27)); -static const uint32_t MAX_Q31 = 0x7FFFFFFF; -static const uint32_t MIN_Q31 = 0x80000000; -static const uint32_t NUMBER_OF_PROCESS = 11; -static const uint32_t MAX_NUMBER_OF_BUFFERING_PROCESS = 7; -static const uint32_t NUMBER_OF_CHANNEL_MAPS = 2; -static const uint32_t NUMBER_OF_REMAP_BUFFERS = 4; -static const uint32_t MAX_BW_IDX = 3; -// All the kpps values are scaled based on sample word size -// Indices to WS map is as follows, -// 0 - > 16 bit -// 1 - > 24 bit -// 2 - > 32 bit -static const uint32_t endianness_kpps_per_ch[MAX_BW_IDX] = { 230, 180, 130 }; -static const uint32_t intl_dintl_kpps_per_ch[MAX_BW_IDX] = { 110, 640, 110 }; -static const uint32_t byte_cnv_kpps_per_ch[MAX_BW_IDX] = { 100, 300, 120 }; -static const uint32_t ch_mixer_kpps_per_ch[MAX_BW_IDX] = { 450, 500, 500 }; -static const uint32_t memcpy_kpps_per_ch[MAX_BW_IDX] = { 100, 100, 100 }; -static const uint32_t fw_kpps = 100; // just a little extra kpps for logic - -static const uint32_t base_sample_rate = 48000; - -#define PC_CEIL(x, y) (((x) + (y)-1) / (y)) - -// Enlists possible combinations of media_fmt for a given buf -// BW- bit width, W - word size, Q - q-factor -typedef enum pc_mf_combo_t { - PC_INVALID_CMBO = 0, - PC_BW16_W16_Q15, - PC_BW24_W24_Q23, - PC_BW24_W32_Q23, - PC_BW24_W32_Q27, - PC_BW24_W32_Q31, - PC_BW32_W32_Q31, - PC_BW32_W32_FLOAT, - PC_BW64_W64_DOUBLE, -} pc_mf_combo_t; - -typedef enum pc_endian_t { - PC_UNKNOWN_ENDIAN = PARAM_VAL_INVALID, - PC_LITTLE_ENDIAN = PCM_LITTLE_ENDIAN, - PC_BIG_ENDIAN = PCM_BIG_ENDIAN -} pc_endian_t; - -typedef enum pc_alignment_t { - PC_UNKNOWN_ALIGNMENT = PARAM_VAL_INVALID, - PC_LSB_ALIGNED = PCM_LSB_ALIGNED, - PC_MSB_ALIGNED = PCM_MSB_ALIGNED -} pc_alignment_t; - -/* PC handles unpacked data, in the CAPI_DEINTERLEVED_UNPACKED_V2 format, - i.e it reads/updates only first chs lengths */ -typedef enum pc_interleaving_t -{ - PC_UNKNOWN_INTERLEAVING = PARAM_VAL_INVALID, - PC_INTERLEAVED = PCM_INTERLEAVED, - PC_DEINTERLEAVED_PACKED = PCM_DEINTERLEAVED_PACKED, - PC_DEINTERLEAVED_UNPACKED_V2 = PCM_DEINTERLEAVED_UNPACKED -} pc_interleaving_t; - -// Enlisting data format to the pc module -typedef enum pc_data_format_t { - PC_FIXED_FORMAT = 0, - PC_FLOATING_FORMAT, - PC_INVALID_FORMAT, -} pc_data_format_t; - -// Media Format used for -typedef struct pc_media_fmt_t -{ - uint32_t sampling_rate; - pc_endian_t endianness; - pc_interleaving_t interleaving; - pc_mf_combo_t byte_combo; - pc_alignment_t alignment; - pc_data_format_t data_format; - uint16_t bit_width; - uint16_t word_size; - uint16_t q_factor; - uint16_t num_channels; - uint16_t * channel_type; -} pc_media_fmt_t; - -// Process modules which can be present in the PCM pipeline -// UP - comes before channel map module -// Down - comes after channel map module -typedef union pc_process_flags_t -{ - struct - { - uint32_t ENDIANNESS_PRE : 1; - uint32_t DATA_CNV_FLOAT_TO_FIXED : 1; - uint32_t INT_DEINT_PRE : 1; - uint32_t BYTE_CNV_PRE : 1; - uint32_t RESAMPLER_PRE : 1; - uint32_t CHANNEL_MIXER : 1; - uint32_t RESAMPLER_POST : 1; - uint32_t BYTE_CNV_POST : 1; - uint32_t INT_DEINT_POST : 1; - uint32_t DATA_CNV_FIXED_TO_FLOAT : 1; - uint32_t ENDIANNESS_POST : 1; - }; - uint32_t word; -} pc_process_flags_t; - -typedef enum pc_proc_flags_t { - ENDIANNESS_PRE = 0, - DATA_CNV_FLOAT_TO_FIXED, - INT_DEINT_PRE, - BYTE_CNV_PRE, - RESAMPLER_PRE, - CHANNEL_MIXER, - RESAMPLER_POST, - BYTE_CNV_POST, - INT_DEINT_POST, - DATA_CNV_FIXED_TO_FLOAT, - ENDIANNESS_POST, -} pc_proc_flags_t; - -typedef enum pc_resampler_type_t { FIR_RESAMPLER = 0, IIR_RESAMPLER = 1, IIR_PREFERRED } pc_resampler_type_t; - -typedef enum pc_rs_position_flag_t { RESAMPLER_POSITION_PRE, RESAMPLER_POSITION_POST } pc_rs_position_flag_t; - -typedef enum pcm_mf_cnv_type_t { PCM_CNV = 0, PCM_ENC, PCM_DEC, MFC } pcm_mf_cnv_type_t; -// This structure is used as a v-table for process calls for modules in the pcm pipeline -typedef struct pc_proc_info_t -{ - // Pointer to the process function - ar_result_t (*process)(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - - // Pointer to the output buffer. - // We point this to the de-interleaved-unpacked buffers part of the pc_lib_t struct, because - // 1.Actual buffers are not available in the init phase - // 2.Actual buffer ptr values may change - // 3.We might have to re-map the buffers run time since most of the process functions take deint-unpacked fmt - capi_buf_t *output_buffer_ptr; - - // Output media format for the module. Input media fmt is obtained form the previous process's output media fmt - pc_media_fmt_t output_media_fmt; - -} pc_proc_info_t; - -typedef struct pc_core_lib_t -{ - // Memory pointer to the memory required for channel maps and remap buffers - void *pc_mem_ptr; - - // Max of input and output number of channels - uint16_t max_num_channels; - - // Input Media format - pc_media_fmt_t input_media_fmt; - - // Output media format - pc_media_fmt_t output_media_fmt; - - // Flags to hold information on which module is enabled in the pipeline - pc_process_flags_t flags; - - // Number of modules with cannot do processing in-place - uint32_t no_of_buffering_stages; - - // Process info v-table required to call process of each module - pc_proc_info_t pc_proc_info[NUMBER_OF_PROCESS]; - - // Temporary de-interleaved-unpacked buffer ptr holder for fwk input - capi_buf_t *remap_input_buf_ptr; - - // Temporary de-interleaved-unpacked buffer ptr holder for scratch buffer 1 - capi_buf_t *remap_scratch_buf1_ptr; - - // Temporary de-interleaved-unpacked buffer ptr holder for scratch buffer 2 - capi_buf_t *remap_scratch_buf2_ptr; - - // Temporary de-interleaved-unpacked buffer ptr holder for fwk output buffer - capi_buf_t *remap_output_buf_ptr; -} pc_core_lib_t; - -// Main library structure for pcm converter -typedef struct pc_lib_t -{ - pc_core_lib_t core_lib; - - // log id used for printing - uint32_t miid; - - // Channel mixer library structure - ChMixerStateStruct *ch_lib_ptr; - - // either fir or iir resampler - pc_resampler_type_t resampler_type; - - // fir resampler config - uint32_t use_hw_rs; - - // fir resampler dyn mode - uint16_t dynamic_mode; - - // for resampler delay type - uint16_t delay_type; - - // hw-sw (fir) resampler lib - hwsw_resampler_lib_t *hwsw_rs_lib_ptr; - - // previous resampler position - pc_rs_position_flag_t resampler_used; - - // iir resampler lib - iir_rs_lib_t *iir_rs_lib_ptr; - - // For IIR_RS use cases, this is used to send the library the fixed frame size. It is also - // used to ensure we only consume one frame_size worth of data per process call. Capi client - // will send aggregated frame size (ex 20ms, or 1ms when threshold is disabed). - uint32_t cntr_frame_size_us; - uint32_t frame_size_us; - uint32_t in_frame_samples_per_ch; // To avoid process call divisions. - uint32_t out_frame_samples_per_ch; - uint32_t heap_id; - bool_t consume_partial_input; - bool_t iir_pref_set; -} pc_lib_t; - -// Process function - -ar_result_t pc_endianness_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_interleaving_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_byte_morph_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_channel_mix_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_dyn_resampler_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_iir_resampler_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_float_to_fixed_conv_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_fixed_to_float_conv_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_intlv_16_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t word_size_in, - uint16_t q_factor_in); - -ar_result_t pc_intlv_24_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t word_size_in, - uint16_t q_factor_in); - -ar_result_t pc_intlv_32_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out); - -/** Generates DEINTERLEAVED UNPACKED V1 output i.e updates all the chs data len's*/ -ar_result_t pc_deintlv_16_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in); - -/** Generates DEINTERLEAVED UNPACKED V1 output i.e updates all the chs data len's*/ -ar_result_t pc_deintlv_24_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in); - -/** Generates DEINTERLEAVED UNPACKED V1 output i.e updates all the chs data len's*/ -ar_result_t pc_deintlv_32_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out); - -/** Generates DEINTERLEAVED UNPACKED V2 output i.e updates only first chs data len's*/ -ar_result_t pc_deintlv_unpacked_v2_16_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in); - -/** Generates DEINTERLEAVED UNPACKED V2 output i.e updates only first chs data len's*/ -ar_result_t pc_deintlv_unpacked_v2_24_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in); - -/** Generates DEINTERLEAVED UNPACKED V2 output i.e updates only first chs data len's*/ -ar_result_t pc_deintlv_unpacked_v2_32_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out); - -ar_result_t pc_change_endianness(int8_t *src_ptr, - int8_t *dest_ptr, - uint32_t src_actual_len, - uint32_t *dest_actual_len, - uint32_t word_size); -/* ----------------------------------------------------------------------- - ** API Func - ** ----------------------------------------------------------------------- */ -bool_t pc_is_floating_point_data_format_supported(); -bool_t pc_is_ch_mixer_needed(pc_lib_t * pc_ptr, - int16_t * coef_set_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr); - -ar_result_t pc_init(pc_lib_t * pc_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr, - void * coef_set_ptr, - uint32_t heap_id, - bool_t * lib_enable, - bool_t fir_iir_rs_switch, - uint32_t miid, - uint8_t type); - -void pc_deinit(pc_lib_t *pc_ptr); - -void pc_get_kpps_and_bw(pc_lib_t *pc_ptr, uint32_t *kpps, uint32_t *bw); - -uint32_t pc_get_algo_delay(pc_lib_t *pc_ptr); - -pc_mf_combo_t pc_classify_mf(pc_media_fmt_t *mf_ptr); - -ar_result_t pc_process(pc_lib_t * me_ptr, - capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - capi_buf_t *scratch_buf_ptr_1, - capi_buf_t *scratch_buf_ptr_2); - -uint32_t pc_get_fixed_out_samples(pc_lib_t *pc_ptr, uint32_t req_out_samples); - -void pc_set_frame_size(pc_lib_t *pc_ptr, uint32_t frame_size_us); - -void pc_set_cntr_frame_size(pc_lib_t *pc_ptr, uint32_t cntr_frame_size_us); -void pc_set_consume_partial_input(pc_lib_t *pc_ptr, bool_t consume_partial_input); - -#ifdef __cplusplus -} -#endif /*__cplusplus*/ -#endif // PCM_CONVERTER_H diff --git a/modules/cmn/pcm_mf_cnv/lib/src/pc_converter.cpp b/modules/cmn/pcm_mf_cnv/lib/src/pc_converter.cpp deleted file mode 100644 index 31314257..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/src/pc_converter.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/*======================================================================== - - file pcm_converter.cpp -This file contains functions for compression-decompression container - -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -======================================================================*/ - -/* ======================================================================= -INCLUDE FILES FOR MODULE -========================================================================== */ - -#include "pc_converter.h" - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ - -/** changes endianess as it moves data into destination buffer, and returns the actual data length of the destination.*/ -ar_result_t pc_change_endianness(int8_t *in_ptr, - int8_t *out_ptr, - uint32_t src_actual_len, - uint32_t *dest_actual_len_ptr, - uint32_t word_size) -{ - uint32_t total_num_samples = src_actual_len / (word_size >> 3); - uint32_t i; - - if (16 == word_size) - { - int16_t *src_ptr_16 = (int16_t *)in_ptr; - int16_t *dst_ptr_16 = (int16_t *)out_ptr; - uint16_t val; - for (i = 0; i < total_num_samples; i++) - { - val = *src_ptr_16++; - *dst_ptr_16++ = (int16_t)(((val & 0xFF00) >> 8) | ((val & 0x00FF) << 8)); - } - } - else if (24 == word_size) - { - int8_t *src_ptr = in_ptr; - int8_t *dst_ptr = out_ptr; - uint8_t val1, val2, val3; - for (i = 0; i < total_num_samples; i++) - { - val1 = *src_ptr++; - val2 = *src_ptr++; - val3 = *src_ptr++; - *dst_ptr++ = val3; - *dst_ptr++ = val2; - *dst_ptr++ = val1; - } - } - else if (32 == word_size) - { - int32_t *dst_ptr = (int32_t *)out_ptr; - int32_t *src_ptr = (int32_t *)in_ptr; - uint32_t val; - for (i = 0; i < total_num_samples; i++) - { - val = *src_ptr++; -#if ((defined __hexagon__) || (defined __qdsp6__)) - *dst_ptr++ = Q6_R_swiz_R(val); -#else - *dst_ptr++ = (int32_t)((val & 0x000000FF) << 24 | (val & 0x0000FF00) << 8 | (val & 0x00FF0000) >> 8 | - (val & 0xFF000000) >> 24); -#endif - } - } - *dest_actual_len_ptr = src_actual_len; - return AR_EOK; -} diff --git a/modules/cmn/pcm_mf_cnv/lib/src/pc_converter_island.cpp b/modules/cmn/pcm_mf_cnv/lib/src/pc_converter_island.cpp deleted file mode 100644 index ebbe925a..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/src/pc_converter_island.cpp +++ /dev/null @@ -1,982 +0,0 @@ -/*======================================================================== - - file pcm_converter.cpp -This file contains functions for compression-decompression container - -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -======================================================================*/ - -#include "pc_converter.h" - -/* ======================================================================= -INCLUDE FILES FOR MODULE -========================================================================== */ - -#if ((defined __hexagon__) || (defined __qdsp6__)) -#define USE_Q6_SPECIFIC_CODE -#endif -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_intlv_16_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t word_size_in, - uint16_t q_factor_in) -{ - - int32_t samp; - int32_t *buf_ptr_32; - int16_t *buf_ptr_16; -#ifdef USE_Q6_SPECIFIC_CODE - int64_t *buf_ptr_64; -#endif - uint32_t total_num_samples = input_buf_ptr->actual_data_len / (word_size_in >> 3); - // AR_MSG(DBG_ERROR_PRIO, "PCM_MF_CNV_LIB: ws - %d total_sample %d ", word_size_in, total_num_samples); - const uint32_t shift = (q_factor_in - 15); // (Qn - Q15) - - if (32 == word_size_in) - { -#ifdef USE_Q6_SPECIFIC_CODE - buf_ptr_64 = (int64_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - buf_ptr_32 = (int32_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - /* If input buf addr is 8 byte aligned and out buf addr is 4 byte aligned - then only perform the vector operation - */ - if ((0 == ((uint32_t)buf_ptr_64 & 0x7)) && (0 == ((uint32_t)buf_ptr_32 & 0x3))) - { - for (samp = total_num_samples; samp >= 2; samp -= 2) - { - int64_t temp64 = *buf_ptr_64++; - /* Convert from Q31 to Q15*/ - - /* Right shift each of the 32 bit words into 16 bits and - store the two lower halfwords into destination - */ - *buf_ptr_32++ = Q6_R_vasrw_PR(temp64, shift); - } - - /* If the number of samples are odd, following loop will handle. */ - total_num_samples = samp; - } - /* if either of buf addr is not byte aligned as required for vectorization - * or for the remaining samples in case it's odd*/ - else - { - int32_t temp32; - - int16_t *buf_ptr_src_16 = (int16_t *)buf_ptr_32; - int32_t *buf_ptr_src2_32 = (int32_t *)buf_ptr_64; - - for (samp = 0; samp < total_num_samples; samp++) - { - temp32 = *buf_ptr_src2_32++; - /* Q28 to Q15 */ - /* First right shift followed by rounding operation */ - *buf_ptr_src_16++ = Q6_R_asr_RR(temp32, shift); - } - } - -#else - /*----------- Non Q6 Version ---------------*/ - buf_ptr_16 = (int16_t *)output_buf_ptr->data_ptr; - buf_ptr_32 = (int32_t *)input_buf_ptr->data_ptr; - - /* Qn to Q15 */ - // shift is 31-15 = 16 if q_factor_in is 31. - for (samp = 0; samp < total_num_samples; samp++) - { - int32_t temp32 = *buf_ptr_32++; - *buf_ptr_16++ = (int16_t)(temp32 >> shift); - } -#endif /* USE_Q6_SPECIFIC_CODE */ - } - else if (24 == word_size_in) - { - buf_ptr_16 = (int16_t *)output_buf_ptr->data_ptr; - uint8_t *src_ptr = (uint8_t *)input_buf_ptr->data_ptr; - /* Qn to Q15 */ - for (samp = 0; samp < total_num_samples; samp++) - { - int32_t num32; - uint32_t tem32; - - num32 = 0; - tem32 = *src_ptr++; - num32 = num32 | (tem32); - tem32 = *src_ptr++; - num32 = num32 | (tem32 << 8); - tem32 = *src_ptr++; - num32 = num32 | (tem32 << 16); - *buf_ptr_16++ = (int16_t)(num32 >> shift); - } - } - else - { - return AR_EUNSUPPORTED; - } - output_buf_ptr->actual_data_len = input_buf_ptr->actual_data_len * 2 / (word_size_in >> 3); - return AR_EOK; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_intlv_24_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t word_size_in, - uint16_t q_factor_in) -{ - int32_t samp; - int32_t *buf_ptr_32; - int8_t * buf_ptr_8; - uint32_t total_num_samples = input_buf_ptr->actual_data_len / (word_size_in >> 3); - uint32_t shift; - - if (16 == word_size_in) - { - /*----------- Non Q6 Version ---------------*/ - - buf_ptr_8 = (int8_t *)output_buf_ptr->data_ptr; - uint8_t *src = (uint8_t *)input_buf_ptr->data_ptr; - - /* Q16 -> Q23 conversion */ - for (samp = 0; samp < total_num_samples; samp++) - { - *buf_ptr_8++ = 0x00; - *buf_ptr_8++ = *src++; - *buf_ptr_8++ = *src++; - } - } - else if (32 == word_size_in) - { - - shift = (q_factor_in - 23); // (Qn - Q23) - - uint8_t *dst = (uint8_t *)output_buf_ptr->data_ptr; - buf_ptr_32 = (int32_t *)input_buf_ptr->data_ptr; - int32_t num32 = 0; - uint8_t temp8 = 0; - - /* Q27/31 -> Q23 conversion */ - for (samp = 0; samp < total_num_samples; samp++) - { - num32 = *buf_ptr_32++ >> shift; - temp8 = (uint8_t)num32; - *dst++ = temp8; - - num32 = num32 >> 8; - temp8 = (uint8_t)num32; - *dst++ = temp8; - - num32 = num32 >> 8; - temp8 = (uint8_t)num32; - *dst++ = temp8; - } - } - else - { - return AR_EUNSUPPORTED; - } - - output_buf_ptr->actual_data_len = input_buf_ptr->actual_data_len * 3 / (word_size_in >> 3); - return AR_EOK; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_intlv_32_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out) -{ - - int32_t samp; - int32_t *buf_ptr_32; - int16_t *buf_ptr_16; - uint32_t total_num_samples = input_buf_ptr->actual_data_len / (word_size_in >> 3); -#ifdef USE_Q6_SPECIFIC_CODE - int64_t *buf_ptr_64; -#endif - uint32_t shift; - uint32_t min_value = 0; - uint32_t max_value = 0; - if (PCM_Q_FACTOR_23 == q_factor_in) - { - min_value = MIN_Q23; - max_value = MAX_Q23; - } - else if (PCM_Q_FACTOR_27 == q_factor_in) - { - min_value = MIN_Q27; - max_value = MAX_Q27; - } - else // when q_factor_in is other than 23 and 27 - { - min_value = (-(1 << q_factor_in)); - max_value = ((1 << q_factor_in) - 1); - } - if (16 == word_size_in) - { - // no in-place - if (input_buf_ptr == output_buf_ptr) - { - return AR_EBADPARAM; - } - - shift = (q_factor_out - q_factor_in); - -#ifdef USE_Q6_SPECIFIC_CODE - - buf_ptr_32 = (int32_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - buf_ptr_64 = (int64_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - /* Convert from Q15 to Q31/27, conversion output in scratch buffer - */ - - /* If Output buf addr is 8 byte aligned and input buf addr is 4 byte aligned - then only perform the vector operation - */ - if ((0 == ((uint32_t)buf_ptr_64 & 0x7)) && (0 == ((uint32_t)buf_ptr_32 & 0x3))) - { - for (samp = total_num_samples; samp >= 2; samp -= 2) - { - /* Sign extend two 16-bit words in to two 32-bit words */ - *buf_ptr_64 = Q6_P_vsxthw_R(*buf_ptr_32++); - - /* Shift left the result to convert it to Q31/27 - */ - *buf_ptr_64 = Q6_P_vaslw_PR(*buf_ptr_64, shift); - buf_ptr_64++; - } - - /* If the number of samples per channel is odd */ - total_num_samples = samp; - } - /* if either of buf addr is not byte aligned as required for vectorization - * or for odd samples */ - else - { - buf_ptr_16 = (int16_t *)buf_ptr_32; - buf_ptr_32 = (int32_t *)buf_ptr_64; - - /* Q15 -> Q31/27 conversion */ - for (samp = 0; samp < total_num_samples; samp++) - { - (*buf_ptr_32++) = (int32_t)((*buf_ptr_16++) << shift); - } - } -#else - /*----------- Non Q6 Version ---------------*/ - - buf_ptr_16 = (int16_t *)input_buf_ptr->data_ptr; - buf_ptr_32 = (int32_t *)output_buf_ptr->data_ptr; - - /* Q15 -> Q31/27 conversion */ - for (samp = 0; samp < total_num_samples; samp++) - { - int32_t temp = *buf_ptr_16++; - (*buf_ptr_32++) = (int32_t)((temp) << shift); - } - -#endif /* USE_Q6_SPECIFIC_CODE */ - } - else if (24 == word_size_in) - { - /*----------- Non Q6 Version ---------------*/ - shift = (31 - q_factor_out); - buf_ptr_32 = (int32_t *)output_buf_ptr->data_ptr; - uint8_t *src = (uint8_t *)input_buf_ptr->data_ptr; - // POSAL_ASSERT(shift <= 8); - - /* Q23 -> Q27 conversion */ - for (samp = 0; samp < total_num_samples; samp++) - { - int32_t num32; - uint32_t tem32; - num32 = 0; - tem32 = *src++; - num32 = num32 | (tem32 << 8); - tem32 = *src++; - num32 = num32 | (tem32 << 16); - tem32 = *src++; - num32 = num32 | (tem32 << 24); - (*buf_ptr_32++) = (int32_t)((num32) >> (shift)); - } - } - else if (32 == word_size_in) - { -#ifdef USE_Q6_SPECIFIC_CODE - int64_t *in_buf_ptr_64 = (int64_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - buf_ptr_64 = (int64_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - /* Convert from Q15 to Q27, conversion output in scratch buffer - */ - - /* If Output buf addr is 8 byte aligned and input buf addr is 8 byte aligned - then only perform the vector operation - */ - if ((q_factor_out < q_factor_in) && (0 == ((uint32_t)buf_ptr_64 & 0x7)) && (0 == ((uint32_t)in_buf_ptr_64 & 0x7))) - { - shift = q_factor_in - q_factor_out; - for (samp = total_num_samples; samp >= 2; samp -= 2) - { - /* Shift left the result to convert it to Q27 - */ - *buf_ptr_64 = Q6_P_vasrw_PR(*in_buf_ptr_64++, shift); - buf_ptr_64++; - } - - /* If the number of samples per channel is odd */ - total_num_samples = samp; - } - /* if either of buf addr is not byte aligned as required for vectorization - * or for odd samples */ - else - { - int32_t *in_buf_ptr_32 = (int32_t *)input_buf_ptr->data_ptr; - buf_ptr_32 = (int32_t *)output_buf_ptr->data_ptr; - if (q_factor_out >= q_factor_in) - { - shift = q_factor_out - q_factor_in; - } - else - { - shift = q_factor_in - q_factor_out; - } - - - if (q_factor_out >= q_factor_in) - { - for (samp = 0; samp < total_num_samples; samp++) - { - int32_t temp32 = (int32_t)(*in_buf_ptr_32++); - temp32 = (temp32 < (int32_t)min_value) ? (int32_t)min_value : temp32; - temp32 = (temp32 > (int32_t)max_value) ? (int32_t)max_value : temp32; - (*buf_ptr_32++) = temp32 << shift; - } - } - else - { - for (samp = 0; samp < total_num_samples; samp++) - { - (*buf_ptr_32++) = (int32_t)((*in_buf_ptr_32++) >> shift); - } - } - } -#else // USE_Q6_SPECIFIC_CODE - /*----------- Non Q6 Version ---------------*/ - int32_t *in_buf_ptr_32 = (int32_t *)input_buf_ptr->data_ptr; - buf_ptr_32 = (int32_t *)output_buf_ptr->data_ptr; - if (q_factor_out >= q_factor_in) - { - shift = q_factor_out - q_factor_in; - } - else - { - shift = q_factor_in - q_factor_out; - } - - if (q_factor_out >= q_factor_in) - { - for (samp = 0; samp < total_num_samples; samp++) - { - int32_t temp32 = (int32_t)(*in_buf_ptr_32++); - temp32 = (temp32 < (int32_t)min_value) ? (int32_t)min_value : temp32; - temp32 = (temp32 > (int32_t)max_value) ? (int32_t)max_value : temp32; - (*buf_ptr_32++) = temp32 << shift; - } - } - else - { - for (samp = 0; samp < total_num_samples; samp++) - { - (*buf_ptr_32++) = (int32_t)((*in_buf_ptr_32++) >> shift); - } - } -#endif - } - else - { - return AR_EUNSUPPORTED; - } - - output_buf_ptr->actual_data_len = input_buf_ptr->actual_data_len * 4 / (word_size_in >> 3); - return AR_EOK; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -static ar_result_t pc_deintlv_16_out_util_(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - bool_t updates_only_first_ch_len) -{ - ar_result_t result = AR_EOK; - int32_t samp, i; - int32_t *buf_ptr_32; - int16_t *buf_ptr_16; - uint32_t shift_factor = 0; -#ifdef USE_Q6_SPECIFIC_CODE - int64_t *buf_ptr_64; -#endif - uint32_t num_samp_per_ch = input_buf_ptr->actual_data_len / (word_size_in >> 3); - - if (32 == word_size_in) - { - int64_t dw_MAX = 0; - int64_t dw_MIN = 0; - int32_t max_value = 0; - int32_t min_value = 0; - - if (PCM_Q_FACTOR_23 == q_factor_in) - { - dw_MAX = ((int64_t)MAX_Q23 << 32) | (int64_t)MAX_Q23; - dw_MIN = ((int64_t)MIN_Q23 << 32) | (int64_t)MIN_Q23; - shift_factor = PCM_Q_FACTOR_23 - PCM_Q_FACTOR_15; // q23 - q15 - max_value = (int32_t)MAX_Q23; - min_value = (int32_t)MIN_Q23; - } - else if (PCM_Q_FACTOR_27 == q_factor_in) - { - dw_MAX = ((int64_t)MAX_Q27 << 32) | (int64_t)MAX_Q27; - dw_MIN = ((int64_t)MIN_Q27 << 32) | (int64_t)MIN_Q27; - shift_factor = BYTE_UPDOWN_CONV_SHIFT_FACT; // q27 - q15 - max_value = (int32_t)MAX_Q27; - min_value = (int32_t)MIN_Q27; - } - // q31 to q15 - else if (PCM_Q_FACTOR_31 == q_factor_in) - { - dw_MAX = ((int64_t)MAX_Q31 << 32) | (int64_t)MAX_Q31; - dw_MIN = ((int64_t)MIN_Q31 << 32) | (int64_t)MIN_Q31; - shift_factor = PCM_Q_FACTOR_31 - PCM_Q_FACTOR_15; // q31 - q15 - max_value = (int32_t)MAX_Q31; - min_value = (int32_t)MIN_Q31; - } - -#ifdef USE_Q6_SPECIFIC_CODE - - for (i = 0; i < num_channels; i++) - { - buf_ptr_64 = (int64_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - buf_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - /* Convert from (Q27 or Q31) to Q15 */ - - /* If input buf addr is 8 byte aligned and out buf addr is 4 byte aligned - then only perform the vector operation */ - if ((0 == ((uint32_t)buf_ptr_64 & 0x7)) && (0 == ((uint32_t)buf_ptr_32 & 0x3))) - { - for (samp = num_samp_per_ch; samp >= 2; samp -= 2) - { - int64_t temp64; - - /* Saturate to 27 or 31 bits based on input q format */ - temp64 = Q6_P_vminw_PP(*buf_ptr_64++, dw_MAX); - temp64 = Q6_P_vmaxw_PP(temp64, dw_MIN); - - /* Right shift each of the 32 bit words into 16 bits and - store the two lower halfwords into destination */ - *buf_ptr_32++ = Q6_R_vasrw_PR(temp64, shift_factor); - } - - /* If the number of samples are odd */ - if (samp) - { - int32_t temp32; - - int16_t *buf_ptr_src_16 = (int16_t *)buf_ptr_32; - int32_t *buf_ptr_src2_32 = (int32_t *)buf_ptr_64; - - /* Saturate to 27 or 31 bits based on the input q format */ - temp32 = Q6_R_max_RR(*buf_ptr_src2_32, (int32_t)min_value); - temp32 = Q6_R_min_RR(temp32, (int32_t)max_value); - - /* Q27->Q15 or Q31->Q15 with rounding */ - *buf_ptr_src_16 = Q6_R_asr_RR(temp32, shift_factor); - } - } - else /* if either of buf addr is not byte aligned as required for vectorization */ - { - int32_t temp32; - - int16_t *buf_ptr_src_16 = (int16_t *)buf_ptr_32; - int32_t *buf_ptr_src2_32 = (int32_t *)buf_ptr_64; - - if (PCM_Q_FACTOR_27 == q_factor_in) - { - for (samp = 0; samp < num_samp_per_ch; samp++) - { - /* Saturate to 27 bits */ - temp32 = Q6_R_max_RR(*buf_ptr_src2_32++, (int32_t)min_value); - temp32 = Q6_R_min_RR(temp32, (int32_t)max_value); - - /* Q27 to Q15 */ - *buf_ptr_src_16++ = Q6_R_asr_RR(temp32, shift_factor); - } - } - else if (PCM_Q_FACTOR_31 == q_factor_in) - { - for (samp = 0; samp < num_samp_per_ch; samp++) - { - /* Saturate to 31 bits */ - temp32 = Q6_R_max_RR(*buf_ptr_src2_32++, (int32_t)min_value); - temp32 = Q6_R_min_RR(temp32, (int32_t)max_value); - - /* Q31 to Q15 */ - *buf_ptr_src_16++ = Q6_R_asr_RR(temp32, shift_factor); - } - } - } - } -#else - /*----------- Non Q6 Version ---------------*/ - for (i = 0; i < num_channels; i++) - { - buf_ptr_32 = (int32_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - buf_ptr_16 = (int16_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - /* Convert from Q27 (or Q31) to Q15 , inplace conversion */ - for (samp = 0; samp < num_samp_per_ch; samp++) - { - int32_t temp32 = *buf_ptr_32++; - - /* Saturate to 27 or 31 bits */ - temp32 = (temp32 < (int32_t)min_value) ? (int32_t)min_value : temp32; - temp32 = (temp32 > (int32_t)max_value) ? (int32_t)max_value : temp32; - - /*shift to Q15 */ - *buf_ptr_16++ = (int16_t)(temp32 >> shift_factor); - } - } -#endif /* __q6_specific_code__ */ - } - else if (24 == word_size_in) - { - shift_factor = 23 - 15; - - for (i = 0; i < num_channels; i++) - { - uint8_t *src_ptr = (uint8_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - buf_ptr_16 = (int16_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - /* Convert from Q27 (or Q31) to Q15 , inplace conversion */ - for (samp = 0; samp < num_samp_per_ch; samp++) - { - int32_t num32; - uint32_t tem32; - - num32 = 0; - tem32 = *src_ptr++; - num32 = num32 | (tem32); - tem32 = *src_ptr++; - num32 = num32 | (tem32 << 8); - tem32 = *src_ptr++; - num32 = num32 | (tem32 << 16); - /*Right shift to Q15*/ - *buf_ptr_16++ = (int16_t)(num32 >> shift_factor); - } - } - } - else - { - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - output_buf_ptr[0].actual_data_len = 0; - result = AR_EUNSUPPORTED; - goto bailout_; - } - - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - output_buf_ptr[0].actual_data_len = num_samp_per_ch * 2; - -bailout_: - // update rest of the channels as well - if (FALSE == updates_only_first_ch_len) - { - for (uint32_t i = 1; i < num_channels; i++) - { - output_buf_ptr[i].actual_data_len = output_buf_ptr[0].actual_data_len; - } - } - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -static ar_result_t pc_deintlv_24_out_util_(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - bool_t updates_only_first_ch_len) -{ - ar_result_t result = AR_EOK; - int32_t samp, i; - int32_t *buf_ptr_32; - int8_t * buf_ptr_8; - uint32_t shift; - uint32_t num_samp_per_ch = input_buf_ptr->actual_data_len / (word_size_in >> 3); - - if (16 == word_size_in) - { - /*----------- Non Q6 Version ---------------*/ - - /* Q16 -> Q23 conversion */ - uint8_t *src; - for (i = 0; i < num_channels; i++) - { - buf_ptr_8 = (output_buf_ptr[i].data_ptr); /* Input buffer */ - src = (uint8_t *)(input_buf_ptr[i].data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samp_per_ch; samp++) - { - *buf_ptr_8++ = 0x00; - *buf_ptr_8++ = *src++; - *buf_ptr_8++ = *src++; - } - } - } - else if (32 == word_size_in) - { - - shift = (q_factor_in - 23); // (Qn - Q23) - - int32_t num32 = 0; - uint8_t temp8 = 0; - uint8_t *dst; - /* Q27/31 -> Q23 conversion */ - for (i = 0; i < num_channels; i++) - { - buf_ptr_32 = (int32_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - dst = (uint8_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samp_per_ch; samp++) - { - num32 = *buf_ptr_32++ >> shift; - temp8 = (uint8_t)num32; - *dst++ = temp8; - - num32 = num32 >> 8; - temp8 = (uint8_t)num32; - *dst++ = temp8; - - num32 = num32 >> 8; - temp8 = (uint8_t)num32; - *dst++ = temp8; - } - } - } - else - { - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - output_buf_ptr[0].actual_data_len = 0; - result = AR_EUNSUPPORTED; - goto bailout_; - } - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - output_buf_ptr[0].actual_data_len = num_samp_per_ch * 3; - -bailout_: - // update rest of the channels as well - if (FALSE == updates_only_first_ch_len) - { - for (uint32_t i = 1; i < num_channels; i++) - { - output_buf_ptr[i].actual_data_len = output_buf_ptr[0].actual_data_len; - } - } - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -static ar_result_t pc_deintlv_32_out_util_(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out, - bool_t updates_only_first_ch_len) -{ - ar_result_t result = AR_EOK; - int32_t samp, i; - int32_t *buf_ptr_32; - uint8_t *buf_ptr_8; - uint32_t shift_factor = 0; - uint32_t num_samp_per_ch = input_buf_ptr->actual_data_len / (word_size_in >> 3); - uint32_t min_value = 0; - uint32_t max_value = 0; - if (PCM_Q_FACTOR_23 == q_factor_in) - { - min_value = MIN_Q23; - max_value = MAX_Q23; - } - else if (PCM_Q_FACTOR_27 == q_factor_in) - { - min_value = MIN_Q27; - max_value = MAX_Q27; - } - else // when q_factor_in is other than 23 and 27 - { - min_value = (-(1 << q_factor_in)); - max_value = ((1 << q_factor_in) - 1); - } - - if (16 == word_size_in) - { - shift_factor = q_factor_out - q_factor_in; -#ifdef USE_Q6_SPECIFIC_CODE - for (i = 0; i < num_channels; i++) - { - int32_t *buf_ptr_32 = (int32_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - int64_t *buf_ptr_64 = (int64_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - - /* Convert from Q15 to Q28, conversion output in scratch buffer */ - - /* If Output buf addr is 8 byte aligned and input buf addr is 4 byte aligned - then only perform the vector operation */ - if ((0 == ((uint32_t)buf_ptr_64 & 0x7)) && (0 == ((uint32_t)buf_ptr_32 & 0x3))) - { - for (samp = num_samp_per_ch; samp >= 2; samp -= 2) - { - - /* Sign extend two 16-bit words in to two 32-bit words */ - *buf_ptr_64 = Q6_P_vsxthw_R(*buf_ptr_32++); - - - /* Shift left the result to convert it to Q27 or Q31 */ - *buf_ptr_64 = Q6_P_vaslw_PR(*buf_ptr_64, shift_factor); - buf_ptr_64++; - } - - /* If the number of samples per channel is odd */ - if (samp) - { - int16_t *buf_ptr_src_16 = (int16_t *)buf_ptr_32; - int32_t *buf_ptr_src2_32 = (int32_t *)buf_ptr_64; - *buf_ptr_src2_32 = (int32_t)(*buf_ptr_src_16 << shift_factor); - } - } - else /* if either of buf addr is not byte aligned as required for vectorization */ - { - int16_t *buf_ptr_src_16 = (int16_t *)buf_ptr_32; - int32_t *buf_ptr_src2_32 = (int32_t *)buf_ptr_64; - - /* Q15 -> Q27(Q31) conversion */ - for (samp = 0; samp < num_samp_per_ch; samp++) - { - (*buf_ptr_src2_32++) = (int32_t)((*buf_ptr_src_16++) << shift_factor); - } - } - } -#else - /*----------- Non Q6 Version ---------------*/ - for (i = 0; i < num_channels; i++) - { - int16_t *buf_ptr_16 = (int16_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - buf_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - /* Convert from Q15 to Q27(or Q31), conversion output in scratch buffer */ - for (samp = 0; samp < num_samp_per_ch; samp++) - { - *buf_ptr_32++ = ((int32_t)(*buf_ptr_16++)) << shift_factor; - } - } -#endif /* __qdsp6__ */ - } - else if (24 == word_size_in) - { - shift_factor = (31 - q_factor_out); - -#ifdef USE_Q6_SPECIFIC_CODE - for (i = 0; i < num_channels; i++) - { - buf_ptr_8 = (uint8_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - buf_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - int32_t num32 = 0; - int32_t tem32 = 0, tem32_1 = 0, tem32_2 = 0; - - /* Q23 -> Q27 conversion */ - for (samp = 0; samp < num_samp_per_ch; samp++) - { - num32 = 0; - tem32 = buf_ptr_8[0]; // load the 1st byte of a sample - tem32_1 = buf_ptr_8[1]; // load the 2nd byte of a sample - tem32_2 = buf_ptr_8[2]; // load the 3rd byte of a sample - - tem32 = Q6_R_aslor_RI(tem32, - tem32_1, - 8); // left shift 2nd byte by 8 and or with first byte -- later left shift total by 8 - num32 = Q6_R_aslor_RI(num32, tem32_2, 24); // left shift 3rd byte by 24 - buf_ptr_8 += 3; // increment the input buf ptr - - num32 = - Q6_R_aslor_RI(num32, tem32, 8); // effective shifts will be (1st - 8, 2nd - 16, 3rd - 24) for each byte - (*buf_ptr_32++) = (int32_t)((num32) >> (shift_factor)); - } - } -#else - for (i = 0; i < num_channels; i++) - { - buf_ptr_8 = (uint8_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - buf_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - /* Q23 -> Q27 conversion */ - for (samp = 0; samp < num_samp_per_ch; samp++) - { - int32_t num32; - uint32_t tem32; - num32 = 0; - - tem32 = *buf_ptr_8++; - num32 = num32 | (tem32 << 8); - tem32 = *buf_ptr_8++; - num32 = num32 | (tem32 << 16); - tem32 = *buf_ptr_8++; - num32 = num32 | (tem32 << 24); - - (*buf_ptr_32++) = (int32_t)((num32) >> (shift_factor)); - } - } -#endif - } - else - { - shift_factor = (q_factor_out - q_factor_in); // (Q31/27 - Qn) - - if (q_factor_out >= q_factor_in) - { - shift_factor = q_factor_out - q_factor_in; - } - else - { - shift_factor = q_factor_in - q_factor_out; - } - for (i = 0; i < num_channels; i++) - { - int32_t *in_buf_ptr_32 = (int32_t *)(input_buf_ptr[i].data_ptr); - buf_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); - - if (q_factor_out >= q_factor_in) - { - for (samp = 0; samp < num_samp_per_ch; samp++) - { - int32_t temp32 = (int32_t)(*in_buf_ptr_32++); - temp32 = (temp32 < (int32_t)min_value) ? (int32_t)min_value : temp32; - temp32 = (temp32 > (int32_t)max_value) ? (int32_t)max_value : temp32; - (*buf_ptr_32++) = temp32 << shift_factor; - } - } - else - { - for (samp = 0; samp < num_samp_per_ch; samp++) - { - (*buf_ptr_32++) = (int32_t)((*in_buf_ptr_32++) >> shift_factor); - } - } - } - } - - - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - output_buf_ptr[0].actual_data_len = num_samp_per_ch * 4; - - // update rest of the channels as well - if (FALSE == updates_only_first_ch_len) - { - for (uint32_t i = 1; i < num_channels; i++) - { - output_buf_ptr[i].actual_data_len = output_buf_ptr[0].actual_data_len; - } - } - - - return result; -} - -ar_result_t pc_deintlv_16_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in) -{ - return pc_deintlv_16_out_util_(input_buf_ptr, output_buf_ptr, num_channels, word_size_in, q_factor_in, FALSE); -} - -ar_result_t pc_deintlv_24_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in) -{ - return pc_deintlv_24_out_util_(input_buf_ptr, output_buf_ptr, num_channels, word_size_in, q_factor_in, FALSE); -} - -ar_result_t pc_deintlv_32_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out) -{ - return pc_deintlv_32_out_util_(input_buf_ptr, - output_buf_ptr, - num_channels, - word_size_in, - q_factor_in, - q_factor_out, - FALSE); -} - -ar_result_t pc_deintlv_unpacked_v2_16_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in) -{ - return pc_deintlv_16_out_util_(input_buf_ptr, output_buf_ptr, num_channels, word_size_in, q_factor_in, TRUE); -} - -ar_result_t pc_deintlv_unpacked_v2_24_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in) -{ - return pc_deintlv_24_out_util_(input_buf_ptr, output_buf_ptr, num_channels, word_size_in, q_factor_in, TRUE); -} - -ar_result_t pc_deintlv_unpacked_v2_32_out(capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - uint16_t num_channels, - uint16_t word_size_in, - uint16_t q_factor_in, - uint16_t q_factor_out) -{ - return pc_deintlv_32_out_util_(input_buf_ptr, - output_buf_ptr, - num_channels, - word_size_in, - q_factor_in, - q_factor_out, - TRUE); -} diff --git a/modules/cmn/pcm_mf_cnv/lib/src/pc_float/pc_float.cpp b/modules/cmn/pcm_mf_cnv/lib/src/pc_float/pc_float.cpp deleted file mode 100644 index d49cc45d..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/src/pc_float/pc_float.cpp +++ /dev/null @@ -1,278 +0,0 @@ -/*======================================================================== - - file pc_float.cpp -This file contains functions for data format conversions. - -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -======================================================================*/ - -/* ======================================================================= -INCLUDE FILES FOR MODULE -========================================================================== */ - -#include "pc_converter.h" - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: -Convert floating point input data to 32 bit (Q31) fixed point data, conversion to other bit widths is subsequently taken -care by byte morph process. -______________________________________________________________________________________________________________________*/ - -ar_result_t pc_float_to_fixed_conv_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EOK; - uint16_t bit_width_in = input_media_fmt_ptr->bit_width; - uint16_t word_size_in = input_media_fmt_ptr->word_size; - uint16_t word_size_out = output_media_fmt_ptr->word_size; - uint32_t samp = 0; - - // num_samples_in represents total samples for interleaved data, and samples per ch for deint data - uint32_t num_samples_in = - input_buf_ptr->actual_data_len / (word_size_in >> 3); // Calculate number of samples of input data - -#ifdef PCM_CNV_LIB_DEBUG - pc_lib_t *pc_ptr = (pc_lib_t *)me_ptr; - CNV_MSG(pc_ptr->miid, - DBG_HIGH_PRIO, - "Float to fixed: Word_size_in %d num_samples_in %d word_size_out %d, interleaving " - "%d", - word_size_in, - num_samples_in, - word_size_out, - input_media_fmt_ptr->interleaving); -#endif - - const uint32_t iq31 = (1 << PCM_Q_FACTOR_31); - const uint64_t iq31_1 = (1ll << PCM_Q_FACTOR_31); - - if (BIT_WIDTH_32 == bit_width_in) - { - int32_t num32 = 0; - float32_t * buf_ptr_32 = NULL; // Type cast input buffer to float data format - int32_t * dst_ptr_32 = NULL; - const float32_t fq31 = (float32_t)(iq31); - - if (PC_INTERLEAVED == input_media_fmt_ptr->interleaving) - { - buf_ptr_32 = (float32_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - dst_ptr_32 = (int32_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Operate on each input sample and converting to fixed point Q31 format - num32 = (int32_t)(*buf_ptr_32++ * fq31); - // Write converted sample to output buffer - *dst_ptr_32++ = num32; - } - output_buf_ptr->actual_data_len = num_samples_in * (word_size_out >> 3); - } - else - { - for (uint32_t i = 0; i < input_media_fmt_ptr->num_channels; i++) - { - buf_ptr_32 = (float32_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - dst_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Operate on each input sample and converting to fixed point Q31 format - num32 = (int32_t)(*buf_ptr_32++ * fq31); - // Write converted sample to output buffer - *dst_ptr_32++ = num32; - } - } - - // optimization: write/read only first ch lens, and assume same lens for rest of the chs in the PC library. - output_buf_ptr[0].actual_data_len = num_samples_in * (word_size_out >> 3); - } - } - else if (BIT_WIDTH_64 == bit_width_in) - { - int32_t num32 = 0; - float64_t * buf_ptr_64 = NULL; - int32_t * dst_ptr_32 = NULL; - const float64_t dq31 = (float64_t)(iq31_1); - - if (PC_INTERLEAVED == input_media_fmt_ptr->interleaving) - { - buf_ptr_64 = (float64_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - dst_ptr_32 = (int32_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Operate on each input sample and converting to fixed point Q31 format - num32 = (int32_t)(*buf_ptr_64++ * dq31); - // Write converted sample to output buffer - *dst_ptr_32++ = num32; - } - output_buf_ptr->actual_data_len = num_samples_in * (word_size_out >> 3); - } - else - { - for (uint32_t i = 0; i < input_media_fmt_ptr->num_channels; i++) - { - buf_ptr_64 = (float64_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - dst_ptr_32 = (int32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Operate on each input sample and converting to fixed point Q31 format - num32 = (int32_t)(*buf_ptr_64++ * dq31); - // Write converted sample to output buffer - *dst_ptr_32++ = num32; - } - } - // optimization: write/read only first ch lens, and assume same lens for rest of the chs in the PC library. - output_buf_ptr[0].actual_data_len = num_samples_in * (word_size_out >> 3); - } - } - else - { - result = AR_EUNSUPPORTED; - return result; - } - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: -Convert 32 bit (Q31) Fixed point input data to Floating point, conversion from any other bit width to 32 bit fixed point -data is done by byte morph process before this function is called. -______________________________________________________________________________________________________________________*/ - -ar_result_t pc_fixed_to_float_conv_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EOK; - - uint16_t word_size_in = input_media_fmt_ptr->word_size; - uint16_t word_size_out = output_media_fmt_ptr->word_size; - uint16_t bit_width_out = output_media_fmt_ptr->bit_width; - uint32_t samp = 0; - int32_t *buf_ptr_32 = NULL; - - // num_samples_in represents total samples for interleaved data, and samples per ch for deint data - uint32_t num_samples_in = input_buf_ptr->actual_data_len / (word_size_in >> 3); - -#ifdef PCM_CNV_LIB_DEBUG - pc_lib_t *pc_ptr = (pc_lib_t *)me_ptr; - CNV_MSG(pc_ptr->miid, - DBG_HIGH_PRIO, - "Fixed to float: Word_size_in %d num_samples_in %d word_size_out %d, interleaving " - "%d", - word_size_in, - num_samples_in, - word_size_out, - input_media_fmt_ptr->interleaving); -#endif - - const uint32_t iq31 = (1 << PCM_Q_FACTOR_31); - const uint64_t iq31_1 = (1ll << PCM_Q_FACTOR_31); - - if (BIT_WIDTH_32 == bit_width_out) - { - float32_t num32 = 0; - float32_t * dst_ptr_32 = NULL; - const float32_t fq31 = (float32_t)(iq31); - - if (PC_INTERLEAVED == input_media_fmt_ptr->interleaving) - { - buf_ptr_32 = (int32_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - dst_ptr_32 = (float32_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Convert fixed point input sample of data to floating point - num32 = ((float32_t)*buf_ptr_32++) / fq31; - // Writing to output buffer - *dst_ptr_32++ = num32; - } - output_buf_ptr->actual_data_len = num_samples_in * (word_size_out >> 3); - } - else - { - for (uint32_t i = 0; i < input_media_fmt_ptr->num_channels; i++) - { - buf_ptr_32 = (int32_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - dst_ptr_32 = (float32_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Convert fixed point input sample of data to floating point - num32 = ((float32_t)*buf_ptr_32++) / fq31; - // Writing to output buffer - *dst_ptr_32++ = num32; - } - } - - // optimization: write/read only first ch lens, and assume same lens for rest of the chs in the PC library. - output_buf_ptr[0].actual_data_len = num_samples_in * (word_size_out >> 3); - } - } - else if (BIT_WIDTH_64 == bit_width_out) - { - float64_t num64 = 0; - float64_t * dst_ptr_64 = NULL; - const float64_t dq31 = (float64_t)(iq31_1); - - if (PC_INTERLEAVED == input_media_fmt_ptr->interleaving) - { - buf_ptr_32 = (int32_t *)(input_buf_ptr->data_ptr); /* Input buffer */ - dst_ptr_64 = (float64_t *)(output_buf_ptr->data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Convert fixed point input sample of data to floating point - num64 = ((float64_t)*buf_ptr_32++) / dq31; - // Writing to output buffer - *dst_ptr_64++ = num64; - } - output_buf_ptr->actual_data_len = num_samples_in * (word_size_out >> 3); - } - else - { - for (uint32_t i = 0; i < input_media_fmt_ptr->num_channels; i++) - { - buf_ptr_32 = (int32_t *)(input_buf_ptr[i].data_ptr); /* Input buffer */ - dst_ptr_64 = (float64_t *)(output_buf_ptr[i].data_ptr); /* Output buffer */ - - for (samp = 0; samp < num_samples_in; samp++) - { - // Convert fixed point input sample of data to floating point - num64 = ((float64_t)*buf_ptr_32++) / dq31; - // Writing to output buffer - *dst_ptr_64++ = num64; - } - } - - // optimization: write/read only first ch lens, and assume same lens for rest of the chs in the PC library. - output_buf_ptr[0].actual_data_len = num_samples_in * (word_size_out >> 3); - } - } - else - { - result = AR_EUNSUPPORTED; - return result; - } - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: -Function to check if floating point data format is supported by platform -______________________________________________________________________________________________________________________*/ - -bool_t pc_is_floating_point_data_format_supported() -{ - return TRUE; -} diff --git a/modules/cmn/pcm_mf_cnv/lib/src/pc_process.cpp b/modules/cmn/pcm_mf_cnv/lib/src/pc_process.cpp deleted file mode 100644 index 664d23fe..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/src/pc_process.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/*______________________________________________________________________________________________________________________ - - file pc_process.cpp -This file contains functions for compression-decompression container - -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -______________________________________________________________________________________________________________________*/ - -/*______________________________________________________________________________________________________________________ -INCLUDE FILES FOR MODULE -______________________________________________________________________________________________________________________*/ - -#include "pc_converter.h" - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_endianness_process(void *me_ptr, - capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EOK; - // No need to check for the same endianness, since it is done in the init phase - if (PC_INTERLEAVED != input_media_fmt_ptr->interleaving) - { - - - uint32_t num_bytes_to_process = input_buf_ptr[0].actual_data_len; - uint32_t num_bytes_processed = 0; - for (uint16_t ch = 0; ch < input_media_fmt_ptr->num_channels; ch++) - { - // Buffer length remains the same since we use the same buffer - pc_change_endianness(input_buf_ptr[ch].data_ptr, - output_buf_ptr[ch].data_ptr, - num_bytes_to_process, - &num_bytes_processed, - input_media_fmt_ptr->word_size); - } - output_buf_ptr[0].actual_data_len = num_bytes_processed; - } - else - { - // Buffer length remains the same since we use the same buffer - pc_change_endianness(input_buf_ptr->data_ptr, - output_buf_ptr->data_ptr, - input_buf_ptr->actual_data_len, - &output_buf_ptr->actual_data_len, - input_media_fmt_ptr->word_size); - } - - return result; -} - - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_dyn_resampler_process(void *_pif, - capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - - ar_result_t result = AR_EOK; - pc_lib_t *me_ptr = (pc_lib_t *)_pif; - uint32_t heap_id = me_ptr->heap_id; - - // TODO: Currently resampler doesnt support unpacked V2, need changes in multiple places in dyn resampler module, - // mp2_dec, resampler library, hwrs driver. - for (uint32_t i = 1; i < input_media_fmt_ptr->num_channels; i++) - { - input_buf_ptr[i].actual_data_len = input_buf_ptr[0].actual_data_len; - input_buf_ptr[i].max_data_len = input_buf_ptr[0].max_data_len; - } - - for (uint32_t i = 1; i < output_media_fmt_ptr->num_channels; i++) - { - output_buf_ptr[i].actual_data_len = output_buf_ptr[0].actual_data_len; - output_buf_ptr[i].max_data_len = output_buf_ptr[0].max_data_len; - } - - result = hwsw_rs_lib_process(me_ptr->hwsw_rs_lib_ptr, - input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->num_channels, - output_media_fmt_ptr->num_channels, - heap_id); - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ - diff --git a/modules/cmn/pcm_mf_cnv/lib/src/pc_process_island.cpp b/modules/cmn/pcm_mf_cnv/lib/src/pc_process_island.cpp deleted file mode 100644 index a826fd11..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/src/pc_process_island.cpp +++ /dev/null @@ -1,697 +0,0 @@ -/*______________________________________________________________________________________________________________________ - -file pc_process.cpp -This file contains functions for compression-decompression container - -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -______________________________________________________________________________________________________________________*/ - -/*______________________________________________________________________________________________________________________ -INCLUDE FILES FOR MODULE -______________________________________________________________________________________________________________________*/ - -#include "pc_converter.h" - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - Re-mapps the main buffer data pointer to the remap-buffer by using proper media fmt - Also, calculated the proper length and separation while remapping output buffer if there is any byte-scale involved -______________________________________________________________________________________________________________________*/ -void pc_remap_from_main_buf(capi_buf_t * main_buf_ptr, - capi_buf_t * remapped_buf_ptr, - capi_buf_t * remapped_input_ref_buf_ptr, - pc_media_fmt_t *media_fmt_ptr, - pc_media_fmt_t *ref_input_media_fmt_ptr, - bool_t is_input_side, - bool_t is_in_or_out_buf) -{ - uint32_t ch_spacing = 0; - uint32_t alignement_offset = 0; - - if (PC_INTERLEAVED == media_fmt_ptr->interleaving) - { - remapped_buf_ptr->data_ptr = main_buf_ptr->data_ptr; - remapped_buf_ptr->actual_data_len = main_buf_ptr->actual_data_len; - remapped_buf_ptr->max_data_len = main_buf_ptr->max_data_len; - } - else if (PC_DEINTERLEAVED_PACKED == media_fmt_ptr->interleaving) - { - if (is_input_side) - { - ch_spacing = main_buf_ptr->actual_data_len / media_fmt_ptr->num_channels; - } - else - { - if (PC_INTERLEAVED == ref_input_media_fmt_ptr->interleaving) - { - ch_spacing = (remapped_input_ref_buf_ptr->actual_data_len * (media_fmt_ptr->word_size >> 3) * - (media_fmt_ptr->num_channels)) / - ((ref_input_media_fmt_ptr->word_size >> 3) * (ref_input_media_fmt_ptr->num_channels)); - } - else - { - ch_spacing = remapped_input_ref_buf_ptr->actual_data_len * (media_fmt_ptr->word_size >> 3) / - (ref_input_media_fmt_ptr->word_size >> 3); - } - } - alignement_offset = ch_spacing % 4; - ch_spacing = ch_spacing - alignement_offset; - - for (uint32_t ch = 0; ch < media_fmt_ptr->num_channels; ch++) - { - remapped_buf_ptr[ch].data_ptr = main_buf_ptr->data_ptr + (ch_spacing * ch); - } - remapped_buf_ptr[0].actual_data_len = is_input_side ? ch_spacing : 0; - remapped_buf_ptr[0].max_data_len = ch_spacing; - } - else if (PC_DEINTERLEAVED_UNPACKED_V2 == media_fmt_ptr->interleaving) - { - if (is_in_or_out_buf) - { - for (uint32_t ch = 0; ch < media_fmt_ptr->num_channels; ch++) - { - remapped_buf_ptr[ch].data_ptr = main_buf_ptr[ch].data_ptr; - } - remapped_buf_ptr[0].actual_data_len = main_buf_ptr[0].actual_data_len; - remapped_buf_ptr[0].max_data_len = main_buf_ptr[0].max_data_len; - } - else - { - ch_spacing = is_input_side ? main_buf_ptr->actual_data_len / media_fmt_ptr->num_channels - : main_buf_ptr->max_data_len / media_fmt_ptr->num_channels; - - alignement_offset = ch_spacing % 4; - ch_spacing = ch_spacing - alignement_offset; - for (uint32_t ch = 0; ch < media_fmt_ptr->num_channels; ch++) - { - remapped_buf_ptr[ch].data_ptr = main_buf_ptr->data_ptr + (ch_spacing * ch); - } - remapped_buf_ptr[0].actual_data_len = is_input_side ? ch_spacing : 0; - remapped_buf_ptr[0].max_data_len = ch_spacing; - } - } -} -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - 1. Finds out which actual buffer (process input, scratch buffer 1, scratch buffer 2 or output) - to use to remap from the remapped buffer pointer - 2. Similarly updated needed media fmt and a flag to indicate if the main buffer is from framework or if it scratch -______________________________________________________________________________________________________________________*/ -void pc_remap_buffer(pc_lib_t * pc_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - capi_buf_t * scratch_buf_ptr_1, - capi_buf_t * scratch_buf_ptr_2, - capi_buf_t * remapped_ib_ptr, - capi_buf_t * remapped_ob_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr, - bool_t is_input) -{ - capi_buf_t * main_buf_ptr = NULL; - bool_t is_in_out_buf = FALSE; - capi_buf_t * remapped_buf_ptr = NULL; - pc_media_fmt_t *media_fmt_ptr = NULL; - if (is_input) - { - remapped_buf_ptr = remapped_ib_ptr; - media_fmt_ptr = input_media_fmt_ptr; - } - else - { - remapped_buf_ptr = remapped_ob_ptr; - media_fmt_ptr = output_media_fmt_ptr; - } - - if (pc_ptr->core_lib.remap_input_buf_ptr == remapped_buf_ptr) - { - is_in_out_buf = TRUE; - main_buf_ptr = input_buf_ptr; - } - else if (pc_ptr->core_lib.remap_scratch_buf1_ptr == remapped_buf_ptr) - { - main_buf_ptr = scratch_buf_ptr_1; - } - else if (pc_ptr->core_lib.remap_scratch_buf2_ptr == remapped_buf_ptr) - { - main_buf_ptr = scratch_buf_ptr_2; - } - else if (pc_ptr->core_lib.remap_output_buf_ptr == remapped_buf_ptr) - { - is_in_out_buf = TRUE; - main_buf_ptr = output_buf_ptr; - } - else - { - CNV_MSG(pc_ptr->miid, DBG_ERROR_PRIO, "WARNING! BUFFER NOT MATCHED"); - return; - } - - pc_remap_from_main_buf(main_buf_ptr, - remapped_buf_ptr, - remapped_ib_ptr, - media_fmt_ptr, - input_media_fmt_ptr, - is_input, - is_in_out_buf); -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_interleaving_process(void *me_ptr, - capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EOK; - - if (PC_INTERLEAVED == input_media_fmt_ptr->interleaving) - { - uint32_t num_samp_per_ch = - input_buf_ptr->actual_data_len / (input_media_fmt_ptr->num_channels * input_media_fmt_ptr->word_size >> 3); - uint32_t bytes_per_samp = input_media_fmt_ptr->word_size >> 3; - - result = spf_intlv_to_deintlv_unpacked_v2(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->num_channels, - bytes_per_samp, - num_samp_per_ch); - } - else - { - result = spf_deintlv_to_intlv(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->num_channels, - input_media_fmt_ptr->word_size); - } - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_byte_morph_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EOK; - pc_lib_t * pc_ptr = (pc_lib_t *)me_ptr; - if (PC_INTERLEAVED == input_media_fmt_ptr->interleaving) - { - if (PC_BW16_W16_Q15 == output_media_fmt_ptr->byte_combo) - { - result = pc_intlv_16_out(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->word_size, - input_media_fmt_ptr->q_factor); - } - else if (PC_BW24_W24_Q23 == output_media_fmt_ptr->byte_combo) - { - result = pc_intlv_24_out(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->word_size, - input_media_fmt_ptr->q_factor); - } - else if ((PC_BW24_W32_Q23 == output_media_fmt_ptr->byte_combo) || - (PC_BW24_W32_Q27 == output_media_fmt_ptr->byte_combo) || - (PC_BW24_W32_Q31 == output_media_fmt_ptr->byte_combo) || - (PC_BW32_W32_Q31 == output_media_fmt_ptr->byte_combo) || - (PC_BW32_W32_FLOAT == output_media_fmt_ptr->byte_combo) || - (PC_BW64_W64_DOUBLE == output_media_fmt_ptr->byte_combo)) - { - result = pc_intlv_32_out(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->word_size, - input_media_fmt_ptr->q_factor, - output_media_fmt_ptr->q_factor); - } - else - { - CNV_MSG(pc_ptr->miid, DBG_ERROR_PRIO, "Unsupported byte combo "); - } - } - else - { - if (PC_BW16_W16_Q15 == output_media_fmt_ptr->byte_combo) - { - result = pc_deintlv_unpacked_v2_16_out(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->num_channels, - input_media_fmt_ptr->word_size, - input_media_fmt_ptr->q_factor); - } - else if (PC_BW24_W24_Q23 == output_media_fmt_ptr->byte_combo) - { - result = pc_deintlv_unpacked_v2_24_out(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->num_channels, - input_media_fmt_ptr->word_size, - input_media_fmt_ptr->q_factor); - } - else if ((PC_BW24_W32_Q23 == output_media_fmt_ptr->byte_combo) || - (PC_BW24_W32_Q27 == output_media_fmt_ptr->byte_combo) || - (PC_BW24_W32_Q31 == output_media_fmt_ptr->byte_combo) || - (PC_BW32_W32_Q31 == output_media_fmt_ptr->byte_combo) || - (PC_BW32_W32_FLOAT == output_media_fmt_ptr->byte_combo) || - (PC_BW64_W64_DOUBLE == output_media_fmt_ptr->byte_combo)) - { - result = pc_deintlv_unpacked_v2_32_out(input_buf_ptr, - output_buf_ptr, - input_media_fmt_ptr->num_channels, - input_media_fmt_ptr->word_size, - input_media_fmt_ptr->q_factor, - output_media_fmt_ptr->q_factor); - } - else - { - CNV_MSG(pc_ptr->miid, DBG_ERROR_PRIO, "Unsupported byte combo "); - } - } - - return result; -} -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_channel_mix_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EOK; - pc_lib_t * pc_ptr = (pc_lib_t *)me_ptr; - void * local_input_buf_ptr[CAPI_MAX_CHANNELS_V2] = { NULL }; - void * local_output_buf_ptr[CAPI_MAX_CHANNELS_V2] = { NULL }; - uint32_t bytes_to_process = 0; - uint32_t samples_to_process = 0; - uint32_t byte_sample_convert = 0; - for (uint32_t i = 0; i < input_media_fmt_ptr->num_channels; i++) - { - local_input_buf_ptr[i] = (void *)input_buf_ptr[i].data_ptr; - } - - for (uint32_t ch = 0; ch < output_media_fmt_ptr->num_channels; ch++) - { - local_output_buf_ptr[ch] = (void *)output_buf_ptr[ch].data_ptr; - } - - bytes_to_process = input_buf_ptr[0].actual_data_len; - byte_sample_convert = (input_media_fmt_ptr->word_size == 16) ? 1 : 2; - samples_to_process = bytes_to_process >> (byte_sample_convert); - - ChMixerProcess(pc_ptr->ch_lib_ptr, local_output_buf_ptr, local_input_buf_ptr, samples_to_process); - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - input_buf_ptr[0].actual_data_len = samples_to_process << byte_sample_convert; - output_buf_ptr[0].actual_data_len = samples_to_process << byte_sample_convert; - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_iir_resampler_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - - capi_err_t result = CAPI_EOK; - pc_lib_t * pc_ptr = (pc_lib_t *)me_ptr; - uint32_t num_input_samples, ch; - uint32_t processed_input_samples, generated_output_samples; - - iir_rs_lib_instance_t *port_instance_ptr = &pc_ptr->iir_rs_lib_ptr->lib_instance_per_port_ptr[0]; - num_input_samples = input_buf_ptr->actual_data_len >> 1; - // num_output_samples = (num_input_samples * output_media_fmt_ptr->sampling_rate) / - // input_media_fmt_ptr->sampling_rate; - - int8_t *input_ptr[CAPI_MAX_CHANNELS_V2] = { 0 }; - int8_t *output_ptr[CAPI_MAX_CHANNELS_V2] = { 0 }; - - processed_input_samples = generated_output_samples = 0; - while (num_input_samples > processed_input_samples) - { - for (ch = 0; ch < port_instance_ptr->lib_io_config.in_channels; ch++) - { - input_ptr[ch] = input_buf_ptr[ch].data_ptr + (processed_input_samples << 1); - output_ptr[ch] = output_buf_ptr[ch].data_ptr + (generated_output_samples << 1); - } - - // resampler process takes case of memscpy in passthrough case with different input and output pointers. - result = iir_rs_process(pc_ptr->iir_rs_lib_ptr, - input_ptr, - output_ptr, - pc_ptr->in_frame_samples_per_ch, - pc_ptr->out_frame_samples_per_ch); - - if (AR_EOK != result) - { - result = CAPI_EFAILED; - } - - processed_input_samples += pc_ptr->in_frame_samples_per_ch; - generated_output_samples += pc_ptr->out_frame_samples_per_ch; // amith - For now. - } - - // optimization: write/read only first ch lens, and assume same lens for rest of the chs - output_buf_ptr[0].actual_data_len = generated_output_samples << 1; - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_calc_and_update_max_in_len(pc_lib_t * pc_ptr, - capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - capi_buf_t *remapped_ib_ptr) -{ - ar_result_t result = AR_EOK; - uint32_t in_len_per_ch = 0; - uint32_t out_len_per_ch = 0; - uint32_t max_in_len_to_consume_per_ch = 0; - pc_media_fmt_t *imf_ptr = &pc_ptr->core_lib.input_media_fmt; - pc_media_fmt_t *omf_ptr = &pc_ptr->core_lib.output_media_fmt; - - if ((PC_INTERLEAVED == imf_ptr->interleaving) || (PC_DEINTERLEAVED_PACKED == imf_ptr->interleaving)) - { - in_len_per_ch = input_buf_ptr->actual_data_len / imf_ptr->num_channels; - } - else - { - in_len_per_ch = input_buf_ptr->actual_data_len; - } - - if ((PC_INTERLEAVED == omf_ptr->interleaving) || (PC_DEINTERLEAVED_PACKED == omf_ptr->interleaving)) - { - out_len_per_ch = output_buf_ptr->max_data_len / omf_ptr->num_channels; - } - else - { - out_len_per_ch = output_buf_ptr->max_data_len; - } - - // get output samples based on output buffer - uint32_t output_samples_per_ch = out_len_per_ch / (omf_ptr->word_size >> 3); - - // scale max required input samples to fill output max buffer length. - uint32_t max_req_in_per_ch = in_len_per_ch; - if ((pc_ptr->core_lib.flags.RESAMPLER_PRE || pc_ptr->core_lib.flags.RESAMPLER_POST)) - { - uint32_t req_in_samples_per_ch = 0; - // If IIR resampler is used, fixed input frame size is required. The following checks are needed: - // 1. Input length meets frame size. - // 2. Enough output was provided to fit the input. - if (NULL != pc_ptr->iir_rs_lib_ptr) - { - - if ((0 == pc_ptr->in_frame_samples_per_ch) || (0 == pc_ptr->out_frame_samples_per_ch)) - { - CNV_MSG(pc_ptr->miid, DBG_ERROR_PRIO, "pc_process: Error: Frame size not set."); - return AR_EFAILED; - } - - uint32_t in_frame_size_bpc = pc_ptr->in_frame_samples_per_ch * (imf_ptr->word_size >> 3); - - // Check if input length meets frame size. - if ((in_len_per_ch < in_frame_size_bpc) || (output_samples_per_ch < pc_ptr->out_frame_samples_per_ch)) - { -#ifdef PCM_CNV_DEBUG - CNV_MSG(pc_ptr->miid, - DBG_ERROR_PRIO, - "pc_process: Input given: bytes per ch: %ld, output samples per ch %ld, frame size bytes per ch: " - "%ld", - in_len_per_ch, - output_samples_per_ch, - in_frame_size_bpc); -#endif - return AR_ENEEDMORE; - } - req_in_samples_per_ch = pc_ptr->in_frame_samples_per_ch; - - // If more input was given, allow loops over iir resampler. IIR resampler pc process function allows for - // looping. - if (in_len_per_ch > in_frame_size_bpc) - { - - uint32_t in_proc_multiplier = in_len_per_ch / in_frame_size_bpc; - uint32_t out_proc_multiplier = output_samples_per_ch / pc_ptr->out_frame_samples_per_ch; - uint32_t proc_multiplier = MIN(in_proc_multiplier, out_proc_multiplier); - req_in_samples_per_ch *= proc_multiplier; -#ifdef PCM_CNV_DEBUG - CNV_MSG(pc_ptr->miid, - DBG_HIGH_PRIO, - "pc_process: Input given: bytes per ch: %ld, output bytes per ch %ld, consuming frame size bytes " - "per ch: %ld, in proc mult %ld, out proc mult %ld", - in_len_per_ch, - out_len_per_ch, - req_in_samples_per_ch * (imf_ptr->word_size >> 3), - in_proc_multiplier, - out_proc_multiplier); -#endif - - // Revert lib frame size back to cntr frame size when no longer in consume_partial_input mode, and - // we are able to process a full cntr frame size worth of data. - if ((!pc_ptr->consume_partial_input) && (pc_ptr->frame_size_us != pc_ptr->cntr_frame_size_us)) - { - uint64_t *FRACT_TIME_PTR_NULL = NULL; - - // To convert samples per ch to us, we can use bits_per_sample = 8, num_channels = 1. - uint32_t input_size_us = - capi_cmn_bytes_to_us(req_in_samples_per_ch, imf_ptr->sampling_rate, 8, 1, FRACT_TIME_PTR_NULL); - - if (input_size_us == pc_ptr->cntr_frame_size_us) - { - pc_set_frame_size(pc_ptr, pc_ptr->cntr_frame_size_us); - } - } - } - } - else if (NULL != pc_ptr->hwsw_rs_lib_ptr) // either hw or sw resampler is used. - { - // For software resampler, use the function to get in samples from out - if ((NULL != pc_ptr->hwsw_rs_lib_ptr->sw_rs_mem_ptr[STAGE_ZERO]) && - (pc_ptr->hwsw_rs_lib_ptr->sw_rs_mem_ptr[STAGE_ZERO]->drs_mem_ptr.pStructMem)) - { - req_in_samples_per_ch = pc_get_fixed_out_samples(pc_ptr, output_samples_per_ch); - } - else // For hardware resampler use differnt function to get in samples to be consumed - { - uint32_t local_out_sample = output_samples_per_ch; - hwsw_rs_lib_process_get_hw_process_info(pc_ptr->hwsw_rs_lib_ptr, - in_len_per_ch / (imf_ptr->word_size >> 3), - output_samples_per_ch, - &req_in_samples_per_ch, - &local_out_sample); - } - } - else - { - CNV_MSG(pc_ptr->miid, DBG_ERROR_PRIO, "pc_process: WARNING: Neither IIR not hwsw resamplers were enabled"); - req_in_samples_per_ch = (output_samples_per_ch * imf_ptr->sampling_rate) / omf_ptr->sampling_rate; - } - max_req_in_per_ch = req_in_samples_per_ch * (imf_ptr->word_size >> 3); - } - else // for case where resampler is not present calculate max input length from max samples output can hold - { - max_req_in_per_ch = output_samples_per_ch * (imf_ptr->word_size >> 3); - } - - // Update input buffer actual data legnth based on the len thats consumed by pc process, - // 1. If INPUT actual data length is greater than required, update actual data length - // based one expected input samples. - // 2. If INPUT actual data length is lesser than expected, this is an error case. Library - // will operate in fixed input mode and consume all the input, so no need to update - // input actual data length. - // 3. If OUTPUT max length is not enough to hold the converted data from input, - // calculate the corresponding input length which should be consumed - max_in_len_to_consume_per_ch = MIN(max_req_in_per_ch, in_len_per_ch); - -#ifdef PCM_CNV_LIB_DEBUG - CNV_MSG(pc_ptr->miid, - DBG_HIGH_PRIO, - "pc_process: max_in_len_to_consume_per_ch %lu in_len_per_ch %lu output_samples_per_ch %lu " - "max_req_in_per_ch %lu", - max_in_len_to_consume_per_ch, - in_len_per_ch, - output_samples_per_ch, - max_req_in_per_ch); -#endif - - if (PC_INTERLEAVED == imf_ptr->interleaving || PC_DEINTERLEAVED_PACKED == imf_ptr->interleaving) - { - input_buf_ptr->actual_data_len = max_in_len_to_consume_per_ch * imf_ptr->num_channels; - } - else - { - input_buf_ptr[0].actual_data_len = max_in_len_to_consume_per_ch; - } - - if (PC_INTERLEAVED == imf_ptr->interleaving) - { - remapped_ib_ptr->actual_data_len = input_buf_ptr->actual_data_len; - } - else - { - remapped_ib_ptr[0].actual_data_len = max_in_len_to_consume_per_ch; - } - - return result; -} - -/*______________________________________________________________________________________________________________________ - DESCRIPTION: - -______________________________________________________________________________________________________________________*/ -ar_result_t pc_process(pc_lib_t * pc_ptr, - capi_buf_t *input_buf_ptr, - capi_buf_t *output_buf_ptr, - capi_buf_t *scratch_buf_ptr_1, - capi_buf_t *scratch_buf_ptr_2) -{ - ar_result_t result = AR_EOK; - capi_buf_t * next_input_buf_ptr = pc_ptr->core_lib.remap_input_buf_ptr; - pc_media_fmt_t *next_input_media_fmt_ptr = &pc_ptr->core_lib.input_media_fmt; - bool_t any_process_done = FALSE; - - - - pc_remap_buffer(pc_ptr, - input_buf_ptr, - output_buf_ptr, - scratch_buf_ptr_1, - scratch_buf_ptr_2, - next_input_buf_ptr, - NULL, - next_input_media_fmt_ptr, - NULL, - TRUE); - - if (AR_ENEEDMORE == pc_calc_and_update_max_in_len(pc_ptr, input_buf_ptr, output_buf_ptr, next_input_buf_ptr)) - { - return AR_ENEEDMORE; - } - - for (uint32_t i = 0; i < NUMBER_OF_PROCESS; i++) - { if (NULL != pc_ptr->core_lib.pc_proc_info[i].process) - { - any_process_done = TRUE; - capi_buf_t * current_input_buf_ptr = next_input_buf_ptr; - capi_buf_t * current_output_buf_ptr = pc_ptr->core_lib.pc_proc_info[i].output_buffer_ptr; - pc_media_fmt_t *output_media_fmt_ptr = &pc_ptr->core_lib.pc_proc_info[i].output_media_fmt; - pc_remap_buffer(pc_ptr, - input_buf_ptr, - output_buf_ptr, - scratch_buf_ptr_1, - scratch_buf_ptr_2, - current_input_buf_ptr, - current_output_buf_ptr, - next_input_media_fmt_ptr, - output_media_fmt_ptr, - FALSE); - - result = pc_ptr->core_lib.pc_proc_info[i].process((void *)pc_ptr, - current_input_buf_ptr, - current_output_buf_ptr, - next_input_media_fmt_ptr, - output_media_fmt_ptr); - - if (current_output_buf_ptr == pc_ptr->core_lib.remap_output_buf_ptr) - { - output_buf_ptr->actual_data_len = current_output_buf_ptr->actual_data_len; - } - - next_input_media_fmt_ptr = &pc_ptr->core_lib.pc_proc_info[i].output_media_fmt; - next_input_buf_ptr = current_output_buf_ptr; - } - } - if (FALSE == any_process_done) - { - - if (pc_ptr->core_lib.input_media_fmt.interleaving == pc_ptr->core_lib.output_media_fmt.interleaving) - { - - if ((PC_INTERLEAVED == pc_ptr->core_lib.input_media_fmt.interleaving) || - (PC_DEINTERLEAVED_PACKED == pc_ptr->core_lib.input_media_fmt.interleaving)) - { - - if (input_buf_ptr->data_ptr != output_buf_ptr->data_ptr) - { - output_buf_ptr->actual_data_len = memscpy(output_buf_ptr->data_ptr, - output_buf_ptr->max_data_len, - input_buf_ptr->data_ptr, - input_buf_ptr->actual_data_len); - } - } - else - { - - uint32_t num_bytes_to_copy = MIN(output_buf_ptr[0].max_data_len, input_buf_ptr[0].actual_data_len); - for (int32_t ch = 0; ch < pc_ptr->core_lib.input_media_fmt.num_channels; ch++) - { - memscpy(output_buf_ptr[ch].data_ptr, num_bytes_to_copy, input_buf_ptr[ch].data_ptr, num_bytes_to_copy); - } - output_buf_ptr[0].actual_data_len = num_bytes_to_copy; - } - - } - else - { - - uint32_t bytes_per_ch = 0; - - // Enters here only for DEINTERLEAVED_PACKED <-> DEINTERLEAVED_UNPACKED conversion - // Note: Interleaved <-> deinterleaved packed/deinterleaved unpacked case doesn't happen - // since the interleaver process will be triggered if that happens - if (PCM_DEINTERLEAVED_PACKED == pc_ptr->core_lib.input_media_fmt.interleaving) - { - - bytes_per_ch = (input_buf_ptr->actual_data_len) / (pc_ptr->core_lib.input_media_fmt.num_channels); - uint32_t num_bytes_to_copy = MIN(bytes_per_ch, output_buf_ptr[0].max_data_len); - for (int32_t ch = 0; ch < pc_ptr->core_lib.input_media_fmt.num_channels; ch++) - { - memscpy(output_buf_ptr[ch].data_ptr, - num_bytes_to_copy, - input_buf_ptr->data_ptr + (bytes_per_ch * ch), - num_bytes_to_copy); - } - output_buf_ptr[0].actual_data_len = num_bytes_to_copy; - } - else - { - - // We can't use output buffer lengths because, actual length will be 0 and if we use max len, it will not be - // packed - // Since input is unpacked, first channels length will suffice for the bytes per ch - bytes_per_ch = (input_buf_ptr[0].actual_data_len); - output_buf_ptr->actual_data_len = 0; - for (int32_t ch = 0; ch < pc_ptr->core_lib.input_media_fmt.num_channels; ch++) - { - output_buf_ptr->actual_data_len += memscpy(output_buf_ptr->data_ptr + (bytes_per_ch * ch), - output_buf_ptr->max_data_len, - input_buf_ptr[ch].data_ptr, - bytes_per_ch); - } - } - - } - - } - - - return result; -} diff --git a/modules/cmn/pcm_mf_cnv/lib/stub_src/pc_float/pc_float_stub.cpp b/modules/cmn/pcm_mf_cnv/lib/stub_src/pc_float/pc_float_stub.cpp deleted file mode 100644 index 041ee374..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/stub_src/pc_float/pc_float_stub.cpp +++ /dev/null @@ -1,41 +0,0 @@ - -/*======================================================================== - - file pc_float_stub.cpp -This file contains stub functions for data format conversions - -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -======================================================================*/ - -/* ======================================================================= -INCLUDE FILES FOR MODULE -========================================================================== */ - -#include "pc_converter.h" - -ar_result_t pc_float_to_fixed_conv_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) -{ - ar_result_t result = AR_EUNSUPPORTED; - return result; -} - -ar_result_t pc_fixed_to_float_conv_process(void * me_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - pc_media_fmt_t *input_media_fmt_ptr, - pc_media_fmt_t *output_media_fmt_ptr) - -{ - ar_result_t result = AR_EUNSUPPORTED; - return result; -} - -bool_t pc_is_floating_point_data_format_supported() -{ - return FALSE; -} diff --git a/modules/cmn/pcm_mf_cnv/lib/tst/main.cpp b/modules/cmn/pcm_mf_cnv/lib/tst/main.cpp deleted file mode 100644 index a2baa5c8..00000000 --- a/modules/cmn/pcm_mf_cnv/lib/tst/main.cpp +++ /dev/null @@ -1,239 +0,0 @@ -/*============================================================================== - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ==============================================================================*/ - -/*============================================================================ - FILE: main.c - - OVERVIEW: Entry point for PCM_converter unit test - - DEPENDENCIES: None - - ============================================================================*/ -#include -#include -#include -#include -#include -#include - -#include "wavefile.h" -#include "pcm_converter.h" -using namespace std; -uint8_t posal_debugmsg_lowest_prio = 4; - -/* ----------------------------------------------------------------------- -** Global Data -** ----------------------------------------------------------------------- */ -extern WavHeader wh; -extern WavHeader wh_write; -void get_interleaved_info(pc_main_mf_t *media_fmt_ptr, int in_value) -{ - switch (in_value) - { - case 0: - media_fmt_ptr->interleaving = CAPI_DEINTERLEAVED_PACKED; - break; - case 1: - media_fmt_ptr->interleaving = CAPI_INTERLEAVED; - break; - default: - media_fmt_ptr->interleaving = CAPI_INVALID_INTERLEAVING; - break; - } -} - -void get_endian_info(pc_main_mf_t *media_fmt_ptr, int in_value) -{ - switch (in_value) - { - case 0: - media_fmt_ptr->endianness = PCM_CNV_LITTLE_ENDIAN; - break; - case 1: - media_fmt_ptr->endianness = PCM_CNV_BIG_ENDIAN; - break; - default: - media_fmt_ptr->endianness = PCM_CNV_UNKNOWN_ENDIAN; - break; - } -} - -void print_media_format(pc_main_mf_t *media_fmt_ptr) -{ - cout << endl; - cout << "Media format is" << endl; - cout << "Bit width :" << media_fmt_ptr->bit_width << endl; - cout << "Word size :" << media_fmt_ptr->word_size << endl; - cout << "Q format :" << media_fmt_ptr->q_factor << endl; - cout << "Interleaving :" << media_fmt_ptr->interleaving << endl; - cout << "Endianness :" << media_fmt_ptr->endianness << endl << endl; -} - -int main(int argc, char *argv[]) -{ - ar_result_t result = AR_EOK; - unsigned long long cycles = 0; - int sample_count = 0; - int bytes_to_read = 0; - int bytes_to_write = 0; - int bytes_read = 0; - int bytes_written = 0; - int frame_size_bytes = 0; - int frame_size_bytes_out = 0; - int frame_size_samples = 0; - pc_main_mf_t inp_media_fmt = { 0 }; - pc_main_mf_t out_media_fmt = { 0 }; - int8_t * input_buf_ptr = NULL; - int8_t * output_buf_ptr = NULL; - int8_t * scratch_buf_ptr = NULL; - pc_lib_t me; - pc_lib_t * me_ptr = &me; - - // Check the number of arguments - if (argc < 11) - { - fprintf(stderr, "Qualcomm's new PCM converter:\n"); - fprintf(stderr, - "Usage: tst_pcm_cnv " - " \n\n"); - fprintf(stderr, "Input Multi-channel Audio wave file. \n"); - fprintf(stderr, "Output Multi-channel Audio output from PCM converter. \n"); - fprintf(stderr, "Q_format of input file - 15, 23, 27 or 31 \n"); - fprintf(stderr, "Whether input file is to be interleaved - set 1 to interleave\n"); - fprintf(stderr, "Endianness of input file - 0 or 1, 0 for little\n"); - fprintf(stderr, "Bitwidth of output file - 16, 24 or 32 \n"); - fprintf(stderr, "Word size of output file - 16, 24 or 32 \n"); - fprintf(stderr, "Q_format of output file - 15, 23, 27 or 31 \n"); - fprintf(stderr, "Whether output file is to be interleaved - set 1 to interleave\n"); - fprintf(stderr, "Endianness of output file - 0 or 1, 0 for little\n"); - fprintf(stderr, "The input multi-channel audio file can be in interleaved/deinterleaved format. \n"); - return -1; - } - - if (0 != WaveFileReadInit(argv[1], 1)) - return -1; - - inp_media_fmt.bit_width = wh.bitsPerSample; - inp_media_fmt.word_size = wh.bytesPerSample * 8 / wh.numChannels; - inp_media_fmt.q_factor = atoi(argv[3]); - get_interleaved_info(&inp_media_fmt, atoi(argv[4])); - get_endian_info(&inp_media_fmt, atoi(argv[5])); - - out_media_fmt.bit_width = atoi(argv[6]); - out_media_fmt.word_size = atoi(argv[7]); - out_media_fmt.q_factor = atoi(argv[8]); - get_interleaved_info(&out_media_fmt, atoi(argv[9])); - get_endian_info(&out_media_fmt, atoi(argv[10])); - - memcpy(&wh_write, &wh, sizeof(WavHeader)); - wh_write.bitsPerSample = out_media_fmt.bit_width; - wh_write.bytesPerSample = out_media_fmt.word_size * wh_write.numChannels / 8; - wh_write.bytesPerSecond = wh_write.bytesPerSample * wh_write.sampleRate; - wh_write.dataLength = wh.dataLength * wh_write.bytesPerSample / wh.bytesPerSample; - print_media_format(&inp_media_fmt); - print_media_format(&out_media_fmt); - - if (0 != WaveFileWriteInit(argv[2])) - { - WaveFileIOEnd(); - return -1; - } - - frame_size_samples = (wh.sampleRate / wh.sampleRate * 2) * wh.numChannels; // 2 samples per channel - frame_size_bytes = frame_size_samples * inp_media_fmt.word_size >> 3; - frame_size_bytes_out = frame_size_samples * out_media_fmt.word_size >> 3; - - - input_buf_ptr = (int8_t *)calloc(frame_size_bytes, sizeof(int8_t)); - output_buf_ptr = (int8_t *)calloc(frame_size_bytes_out, sizeof(int8_t)); - scratch_buf_ptr = (int8_t *)calloc(frame_size_bytes_out, sizeof(int8_t)); - - sample_count = wh.dataLength / wh.bytesPerSample; - - me.input_media_fmt = inp_media_fmt; - me.output_media_fmt = out_media_fmt; - me.inp_media_fmt_combo = pc_classify_mf(&inp_media_fmt); - me.out_media_fmt_combo = pc_classify_mf(&out_media_fmt); - - cout << "frame_size_samples :" << frame_size_samples << endl; - cout << "frame_size_bytes :" << frame_size_bytes << endl; - cout << "frame_size_bytes_out :" << frame_size_bytes_out << endl; - do - { - if (frame_size_bytes > wh.dataLength) - { - bytes_to_read = wh.dataLength; - bytes_to_write = wh_write.dataLength; - } - else - { - bytes_to_read = frame_size_bytes; - bytes_to_write = frame_size_bytes_out; - } - - // Read data from the input wave file - if (WaveFileRead((char *)input_buf_ptr, bytes_to_read) < 0) - { - break; - } - bytes_read += bytes_to_read; - sample_count -= bytes_to_read / wh.bytesPerSample; - - capi_buf_t inp_buffer = { 0 }; - capi_buf_t out_buffer = { 0 }; - capi_buf_t scratch_buffer = { 0 }; - inp_buffer.data_ptr = (int8_t *)input_buf_ptr; - inp_buffer.actual_data_len = bytes_to_read; - inp_buffer.max_data_len = frame_size_bytes * sizeof(int8_t); - out_buffer.data_ptr = (int8_t *)output_buf_ptr; - out_buffer.actual_data_len = 0; - out_buffer.max_data_len = frame_size_bytes_out * sizeof(int8_t); - scratch_buffer.data_ptr = (int8_t *)scratch_buf_ptr; - scratch_buffer.actual_data_len = 0; - scratch_buffer.max_data_len = frame_size_bytes_out * sizeof(int8_t); - pc_ch_info_t temp = { 0 }; - temp.num_samp_per_ch = bytes_to_read / ((inp_media_fmt.word_size >> 3) * wh.numChannels); - temp.num_channels = wh.numChannels; - temp.chan_spacing_in = bytes_to_read / wh.numChannels; - temp.chan_spacing_out = bytes_to_write / wh_write.numChannels; - - static int flag = 0; - if (0 == flag) - { - cout << "num_samp_per_ch :" << temp.num_samp_per_ch << endl; - cout << "num_channels :" << temp.num_channels << endl; - cout << "chan_spacing_in :" << temp.chan_spacing_in << endl; - cout << "chan_spacing_out :" << temp.chan_spacing_out << endl; - flag = 1; - } - result = pc_process(me_ptr, - &inp_buffer, - &out_buffer, - &scratch_buffer); - if (AR_EOK != result) - { - AR_MSG(DBG_ERROR_PRIO, "Failed to PCM convert, lol"); - break; - } - //printf("%x %x %x\n", output_buf_ptr, input_buf_ptr, scratch_buf_ptr); - WaveFileWrite((char *)output_buf_ptr, bytes_to_write); - - bytes_written += bytes_to_write; - - } while (sample_count > 0); // End main processing loop - - printf("cycles %llu\t", cycles); - /* printf("MIPS %f\n", */ - /* (((float)cycles * fparams[SAMPLE_RATE] * (float)numChannels)) / ((float)samplesWritten * 1000000)); */ - - free(input_buf_ptr); - free(output_buf_ptr); - free(scratch_buf_ptr); - printf("Bytes read from input file: %d\n", bytes_read); - printf("Bytes written to output file: %d\n", bytes_written); - - return 0; -} diff --git a/modules/processing/Virtualizer/api/Virtualizer_api.h b/modules/processing/Virtualizer/api/Virtualizer_api.h deleted file mode 100644 index 07f6e55b..00000000 --- a/modules/processing/Virtualizer/api/Virtualizer_api.h +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef VIRTUALIZER_CALIB_H -#define VIRTUALIZER_CALIB_H -/*============================================================================== - @file Virtualizer_calib.h - @brief This file contains VIRTUALIZER API -==============================================================================*/ - -#include "module_cmn_api.h" - -/** @h2xml_title1 {Virtualizer Module} - @h2xml_title_agile_rev {Virtualizer Module} - @h2xml_title_date {May 31,2019} */ - -/*------------------------------------------------------------------------------ - Module -------------------------------------------------------------------------------*/ -/*============================================================================== - Constants -==============================================================================*/ - - -/* ID of the Virtualizer Strength parameter used by MODULE_ID_VIRTUALIZER. */ -#define PARAM_ID_VIRTUALIZER_STRENGTH 0x08001136 - -/* Structure for the strength parameter of VIRTUALIZER module. */ -typedef struct param_id_virtualizer_strength_t param_id_virtualizer_strength_t; -/** @h2xmlp_parameter {"PARAM_ID_VIRTUALIZER_STRENGTH", PARAM_ID_VIRTUALIZER_STRENGTH} - @h2xmlp_description {Specifies the virtualizer strength } - @h2xmlp_toolPolicy {Calibration}*/ - -#include "spf_begin_pack.h" - -/* Payload of the PARAM_ID_VIRTUALIZER_STRENGTH parameter used by the Virtualizer module. */ -struct param_id_virtualizer_strength_t -{ - uint32_t strength; - /**< @h2xmle_description {Specifies the virtualizer strength.\n } - @h2xmle_range {0..1000} - @h2xmle_default {1000}*/ - -} -#include "spf_end_pack.h" -; - - -/* ID of the Virtualizer Out Type parameter used by MODULE_ID_VIRTUALIZER.*/ -#define PARAM_ID_VIRTUALIZER_OUT_TYPE 0x08001137 - -/* Structure for the out type parameter of VIRTUALIZER module. */ -typedef struct param_id_virtualizer_out_type_t param_id_virtualizer_out_type_t; -/** @h2xmlp_parameter {"PARAM_ID_VIRTUALIZER_OUT_TYPE", PARAM_ID_VIRTUALIZER_OUT_TYPE} - @h2xmlp_description {Specifies the output device type of the virtualizer.} - @h2xmlp_toolPolicy {Calibration} */ - -/* Payload of the PARAM_ID_VIRTUALIZER_OUT_TYPE parameter used by the Virtualizer module. */ -#include "spf_begin_pack.h" - -struct param_id_virtualizer_out_type_t -{ - uint32_t out_type; - /**< @h2xmle_description { Specifies the output device type of the virtualizer.\n} - @h2xmle_rangeList {"Headphone"= 0; - "Desktop speakers"=1} - @h2xmle_default {0} */ - -} -#include "spf_end_pack.h" -; - - -/* ID of the Virtualizer Gain Adjust parameter used by MODULE_ID_VIRTUALIZER. */ -#define PARAM_ID_VIRTUALIZER_GAIN_ADJUST 0x08001138 - - -/* Structure for the strength parameter of VIRTUALIZER module. */ -typedef struct param_id_virtualizer_gain_adjust_t param_id_virtualizer_gain_adjust_t; -/** @h2xmlp_parameter {"PARAM_ID_VIRTUALIZER_GAIN_ADJUST", PARAM_ID_VIRTUALIZER_GAIN_ADJUST} - @h2xmlp_description {Specifies the overall gain adjustment of virtualizer outputs.} - @h2xmlp_toolPolicy {Calibration} */ - -#include "spf_begin_pack.h" - -/* Payload of the PARAM_ID_VIRTUALIZER_GAIN_ADJUST parameter used by the Virtualizer module. */ - -struct param_id_virtualizer_gain_adjust_t -{ - int32_t gain_adjust; - /**< @h2xmle_description { Specifies the overall gain adjustment of virtualizer outputs, in the unit 'millibels'.\n} - @h2xmle_default {0} - @h2xmle_range {-600..600} - @@h2xmle_default {0} */ - -} -#include "spf_end_pack.h" -; - -#define PARAM_ID_VIRTUALIZER_OUT_CH_CFG 0x08001139 - -typedef struct param_id_virtualizer_out_ch_cfg_t param_id_virtualizer_out_ch_cfg_t; -/** @h2xmlp_parameter {"PARAM_ID_VIRTUALIZER_OUT_CH_CFG", PARAM_ID_VIRTUALIZER_OUT_CH_CFG} - @h2xmlp_description {Specifies the output channel configuration of the module.} - @h2xmlp_toolPolicy {Calibration} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -struct param_id_virtualizer_out_ch_cfg_t -{ - int16_t num_channels; - /**< @h2xmle_description { Specifies number of channels \n - - Sender will have to pad accordingly to make sure it is 4 byte aligned} - @h2xmle_range {1..2} - @h2xmle_default {2} */ - uint16_t channel_map[0]; - /**< @h2xmle_description { Payload consisting of channel mapping information for all the channels. \n - The channel mapping is specific for specific number of channels \n - for 1 : [PCM_CHANNEL_C] \n - for 2 : [PCM_CHANNEL_L, PCM_CHANNEL_R] \n } - @h2xmle_range {1..3} - @h2xmle_defaultList {1,2} - @h2xmle_variableArraySize {num_channels}*/ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - -/* Global unique Module ID definition - Module library is independent of this number, it defined here for static - loading purpose only */ - -#define MODULE_ID_VIRTUALIZER 0x07001064 -/** - @h2xmlm_module {"MODULE_ID_VIRTUALIZER", - MODULE_ID_VIRTUALIZER} - @h2xmlm_displayName {"Virtualizer"} - @h2xmlm_modSearchKeys{effects, Audio} - @h2xmlm_description {ID of the VIRTUALIZER module.\n - - . This module supports the following parameter IDs:\n - . 1. PARAM_ID_MODULE_ENABLE \n - . 2. PARAM_ID_VIRTUALIZER_STRENGTH \n - . 3. PARAM_ID_VIRTUALIZER_OUT_TYPE \n - . 4. PARAM_ID_VIRTUALIZER_GAIN_ADJUST \n - . 5. PARAM_ID_VIRTUALIZER_OUT_CH_CFG \n - \n - . Supported Containers: \n - . 1. APM_CONTAINER_TYPE_ID_GC (or) \n - . 2. APM_CONTAINER_TYPE_ID_SC - \n - . Supported Input Media Format: \n - . Data Format : FIXED_POINT \n - . fmt_id : MEDIA_FMT_ID_PCM \n - . Sample Rates : Standard sample rates between 8kHz and 192kHz \n - . Number of channels : 1,2,6,8 \n - . Channel type : Supported channel mapping based on number of channels is given below. \n - . Bits per sample : 16,32 \n - . Q format : Q15 for bps = 16, Q27 for bps = 32 \n - . Interleaving : Deinterleaved Unpacked \n - . Signed/unsigned : Signed \n - \n - . Supported Input Channel Mapping based on number of input channels: \n - . 1: mono [C] \n - . 2: stereo [L, R] \n - . 6: 5.1 channel [L, R, C, LFE, LS, RS] or [L, R, C, LFE, LB, RB] \n - . 8: 7.1 channel [L, R, C, LFE, LS, RS, LB, RB] \n - \n - . Supported Output Channel Mapping based on number of output channels: \n - . 1: mono [C] \n - . 2: stereo [L, R] \n - \n - } - @h2xmlm_toolPolicy {Calibration} - @h2xmlm_dataMaxInputPorts { 1 } - @h2xmlm_dataInputPorts { IN=2} - @h2xmlm_dataOutputPorts { OUT=1} - @h2xmlm_dataMaxOutputPorts { 1 } - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_GC, APM_CONTAINER_TYPE_SC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {4096} - @h2xmlm_toolPolicy {Calibration} - - @{ <-- Start of the Module --> - @h2xml_Select {"param_id_module_enable_t"} - @h2xmlm_InsertParameter - @h2xml_Select {"param_id_virtualizer_strength_t"} - @h2xmlm_InsertParameter - @h2xmlp_toolPolicy {Calibration} - @h2xml_Select {"param_id_virtualizer_out_type_t"} - @h2xmlm_InsertParameter - @h2xmlp_toolPolicy {Calibration} - @h2xml_Select {"param_id_virtualizer_gain_adjust_t"} - @h2xmlm_InsertParameter - @h2xmlp_toolPolicy {Calibration} - @h2xml_Select {"param_id_virtualizer_out_ch_cfg_t"} - @h2xmlm_InsertParameter - @h2xmlp_toolPolicy {Calibration} - @} <-- End of the Module -->*/ - - -#endif - diff --git a/modules/processing/Virtualizer/bin/arm/libvirtualizer.a b/modules/processing/Virtualizer/bin/arm/libvirtualizer.a deleted file mode 100644 index 4c861fb81294226a4236796327caeac3f8e9491b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528228 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

(C^lH} z9VWQ73+snl;h=s@_xm6iySY2whw3X4Njp0dX1@C4@lrC38^3uUmmtE2nRfdru~;<& z+I-qYu%q>>z0&=!fc0ZM+nMcg6+V6+1Y=9#?*<06`Lx?$`!JJ^9E|gZdn&*Av|k}2 zTJGXVxwyp$%AJca_hCD7yZ6WVA4`Ehrr(24G~clE_l`k27WtwZeQ^5=K0Zu)Jn~)3 zfHvR%{tP>M94m1g)re#J@wE8%dlq4w&M6SvHo)IW-hleDsF)^#t!zvzb}=HbtZ9`& cI(Z!41LvI}uMe^gk!}=w74_Q~cn|aaAC&{*vj6}9 diff --git a/modules/processing/Virtualizer/build/CMakeLists.txt b/modules/processing/Virtualizer/build/CMakeLists.txt deleted file mode 100644 index 50912ede..00000000 --- a/modules/processing/Virtualizer/build/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -#[[ - @file CMakeLists.txt - - @brief - - @copyright - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -]] -cmake_minimum_required(VERSION 3.10) - -set(virtualizer_includes - ${LIB_ROOT}/api - ${LIB_ROOT}/capi/inc - ${LIB_ROOT}/capi/src - ${LIB_ROOT}/lib/inc - ${LIB_ROOT}/lib/src - ${PROJECT_SOURCE_DIR}/modules/processing/gain_control/limiter/lib/inc - ${PROJECT_SOURCE_DIR}/modules/processing/filters/multi_stage_iir/lib/inc - ${PROJECT_SOURCE_DIR}/modules/cmn/common/utils/inc -) - -spf_module_sources( - KCONFIG CONFIG_VIRTUALIZER - NAME virtualizer - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "pp" - AMDB_MID "0x07001064" - AMDB_TAG "capi_virtualizer" - AMDB_MOD_NAME "MODULE_ID_VIRTUALIZER" - INCLUDES ${virtualizer_includes} - H2XML_HEADERS "${LIB_ROOT}/api/Virtualizer_api.h" - CFLAGS "" - STATIC_LIB_PATH "${LIB_ROOT}/bin/arm/libvirtualizer.a" -) diff --git a/modules/processing/Virtualizer/inc/capi_virtualizer.h b/modules/processing/Virtualizer/inc/capi_virtualizer.h deleted file mode 100644 index 69fe5574..00000000 --- a/modules/processing/Virtualizer/inc/capi_virtualizer.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -/** - * @file capi_virtualizer.h - * - * Header file to implement the Audio Post Processor Interface for - * virtualization - */ - -#ifndef CAPI_VIRTUALIZER_H -#define CAPI_VIRTUALIZER_H - -#include "capi.h" -#include "ar_defs.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -//#define PARAM_ID_VIRTUALIZER_DIPOLE_SPACING 0x0000DEF0 -//#define PARAM_ID_VIRTUALIZER_VOLUME_RAMP 0x0000DEF2 -//#define PARAM_ID_VIRTUALIZER_DELAY 0x0000DEF3 - - -/** - * Get static properties of virtualizer module such as - * memory, stack requirements etc. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_virtualizer_get_static_properties( - capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); - - -/** - * Instantiates(and allocates) the module memory. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_virtualizer_init( - capi_t *_pif, - capi_proplist_t *init_set_properties); - -#ifdef __cplusplus -} -#endif - -#endif // CAPI_VIRTUALIZER_H diff --git a/modules/processing/Virtualizer/inc/virtualizer_calibration_api.h b/modules/processing/Virtualizer/inc/virtualizer_calibration_api.h deleted file mode 100644 index 2c1ec901..00000000 --- a/modules/processing/Virtualizer/inc/virtualizer_calibration_api.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef VIRTUALIZER_CALIBRATION_API_H -#define VIRTUALIZER_CALIBRATION_API_H - -#include "AudioComdef.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Parameters with IDs -----------------------------------------------------------------------------*/ -#define VIRTUALIZER_PARAM_LIB_VER (0) // ** param: library version -typedef int32 virtualizer_version_t; // access: get only - -#define VIRTUALIZER_PARAM_ENABLE (1) // ** param: on/off switch -typedef int32 virtualizer_enable_t; // access: get & set, runtime - // range: [0 (OFF) or 1 (ON)] - -#define VIRTUALIZER_PARAM_STRENGTH (2) // ** param: effect strength -typedef int32 virtualizer_strength_t; // access: get & set, runtime - // range: [0, 1000] - -#define VIRTUALIZER_PARAM_OUT_TYPE (3) // ** param: output type -typedef enum virtualizer_output_t { // access: get & set - OUTPUT_HEADPHONES = 0, // stereo headphone - OUTPUT_DESKTOP_SPKS, // speaker with large distance - OUTPUT_DIPOLE_SPKS // closely-spaced speakers -} virtualizer_output_t; - -#define VIRTUALIZER_PARAM_DIPOLE_SPACING (4) // ** param: output type -typedef int32 virtualizer_dipole_spacing_t; // access: get & set -// currently only 2 spacing tuned: // range: [1, 500] (millimeter) -// 50 mm and 100 mm - -#define VIRTUALIZER_PARAM_GAIN_ADJUST (5) // ** param: overall gain adjust -typedef int32 virtualizer_gain_adjust_t; // access: get & set - // range: [-600, 600] (mB) - -#define VIRTUALIZER_PARAM_RESET (6) // ** param: reset library - // access: set only - -#define VIRTUALIZER_PARAM_ALG_DELAY (7) // ** param: alg delay (samples) -typedef int32 virtualizer_alg_delay_t; // access: get only - -#define VIRTUALIZER_PARAM_CROSSFADE_FLAG (8) // ** param: whether in transition state -typedef int32 virtualizer_crossfade_t; // access: get only - // range: [0 (N) or 1 (YES)] - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* VIRTUALIZER_CALIBRATION_API_H */ diff --git a/modules/processing/Virtualizer/inc/virtualizer_lib_api.h b/modules/processing/Virtualizer/inc/virtualizer_lib_api.h deleted file mode 100644 index 8021c818..00000000 --- a/modules/processing/Virtualizer/inc/virtualizer_lib_api.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef VIRTUALIZER_API_H -#define VIRTUALIZER_API_H - -/* - * This file was renamed by fw team from virtualizer_api.h to avoid - * compilation issues on windows - */ -/*---------------------------------------------------------------------------- - * Include Files - * -------------------------------------------------------------------------*/ -#include "virtualizer_calibration_api.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Library Version -----------------------------------------------------------------------------*/ -#define VIRTUALIZER_LIB_VER (0x01000300) // lib version : 1.3.0 - // (major.minor.bug) (8.16.8 bits) - -/*---------------------------------------------------------------------------- - Error code -----------------------------------------------------------------------------*/ -typedef enum VIRTUALIZER_RESULT { - VIRTUALIZER_SUCCESS = 0, - VIRTUALIZER_FAILURE, - VIRTUALIZER_MEMERROR, -} VIRTUALIZER_RESULT; - -/*---------------------------------------------------------------------------- - Channel Numbers: - - Virtualizer only works with input/output channels with specific orders - defined below: - 1: mono [C] - 2: stereo [L, R] - 6: 5.1 channel [L, R, C, LFE, Ls, Rs] - other non-standard channel numbers or channel orders should be properly - converted by wrapper before using virtualizer library. -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - Type Declarations -----------------------------------------------------------------------------*/ - -typedef struct _virtualizer_static_vars_t { // ** static params - int32 data_width; // 16 (Q15 PCM) or 32 (Q27 PCM) - int32 sample_rate; // sampling rate [22, 32, 44, 48] - int32 max_block_size; // max processing block size - int32 out_chs; // # of output chs [1, 2] - int32 in_chs; // # of input chs [1, 2, 6] - int32 limiter_delay_ms; // limiter delay in ms [0, 20] -} virtualizer_static_vars_t; - -typedef struct _virtualizer_mem_req_t { // ** memory requirements - uint32 mem_size; // lib mem size (lib_mem_ptr ->) - uint32 stack_size; // max stack mem size -} virtualizer_mem_req_t; - -typedef struct _virtualizer_lib_t { // ** library struct - void* mem_ptr; // mem pointer -} virtualizer_lib_t; - -/*----------------------------------------------------------------------------- - Function Declarations ------------------------------------------------------------------------------*/ - -// ** Process one block of samples (multi channel) -// lib_ptr: [in] pointer to library structure -// out_ptr: [out] pointer to output sample block (multi channel double ptr) -// in_ptr: [in] pointer to input sample block (multi channel double ptr) -// samples: [in] number of samples to be processed per channel -VIRTUALIZER_RESULT virtualizer_process(virtualizer_lib_t *lib_ptr, void **out_ptr, void **in_ptr, uint32 samples); - -// ** Get library memory requirements -// mem_req_ptr: [out] pointer to mem requirements structure -// static_vars_ptr: [in] pointer to static variable structure -VIRTUALIZER_RESULT virtualizer_get_mem_req(virtualizer_mem_req_t *mem_req_ptr, virtualizer_static_vars_t* static_vars_ptr); - -// ** Partition, initialize memory, and set default values -// lib_ptr: [in, out] pointer to library structure -// static_vars_ptr: [in] pointer to static variable structure -// mem_ptr: [in] pointer to allocated memory -// mem_size: [in] size of memory allocated -VIRTUALIZER_RESULT virtualizer_init_mem(virtualizer_lib_t *lib_ptr, virtualizer_static_vars_t* static_vars_ptr, void* mem_ptr, uint32 mem_size); - -// ** Set parameters to library -// lib_ptr: [in, out] pointer to lib structure -// param_id: [in] parameter id -// param_ptr: [in] pointer to the memory where the new values are stored -// param_size:[in] size of the memory pointed by param_ptr -VIRTUALIZER_RESULT virtualizer_set_param(virtualizer_lib_t* lib_ptr, uint32 param_id, void* param_ptr, uint32 param_size); - -// ** Get parameters from library -// lib_ptr: [in] pointer to library structure -// param_id: [in] parameter id -// param_ptr: [out] pointer to the memory where the retrieved value is going to be stored -// param_size:[in] size of the memory pointed by param_ptr -// param_actual_size_ptr: [out] pointer to memory that will hold the actual size of the parameter -VIRTUALIZER_RESULT virtualizer_get_param(virtualizer_lib_t* lib_ptr, uint32 param_id, void* param_ptr, uint32 param_size, uint32 *param_actual_size_ptr); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* VIRTUALIZER_API_H */ diff --git a/modules/processing/bassboost/api/api_bassboost.h b/modules/processing/bassboost/api/api_bassboost.h deleted file mode 100644 index 4d847f4d..00000000 --- a/modules/processing/bassboost/api/api_bassboost.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef BASS_BOOST_CALIB_H -#define BASS_BOOST_CALIB_H -/*============================================================================== - @file bass_boost_calib.h - @brief This file contains BASS_BOOST API -==============================================================================*/ - -/*======================================================================= -* Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -* SPDX-License-Identifier: BSD-3-Clause-Clear -=========================================================================*/ - -#include "module_cmn_api.h" - -/** @h2xml_title1 {BASS_BOOST Module API} - @h2xml_title_agile_rev {BASS_BOOST Module API} - @h2xml_title_date {May 30, 2019} */ -/*------------------------------------------------------------------------------ - Module -------------------------------------------------------------------------------*/ -/*============================================================================== - Constants -==============================================================================*/ -#define CAPI_BASSBOOST_MAX_IN_PORTS 1 -#define CAPI_BASS_BOOST_MAX_OUT_PORTS 1 -#define CAPI_BASSBOOST_DEFAULT_PORT 0 -#define BASS_BOOST_STACK_SIZE 4096 - - -/* Global unique Module ID definition - Module library is independent of this number, it defined here for static - loading purpose only */ - -#define MODULE_ID_BASS_BOOST 0x07001062 -/** - @h2xmlm_module {"MODULE_ID_BASS_BOOST", - MODULE_ID_BASS_BOOST} - @h2xmlm_displayName {"Bass Boost"} - @h2xmlm_modSearchKeys{effects, Audio} - @h2xmlm_description {ID of the Bass Boost module.\n - - This module supports the following parameter IDs:\n - - #PARAM_ID_MODULE_ENABLE \n - - #PARAM_ID_BASS_BOOST_MODE\n - - #PARAM_ID_BASS_BOOST_STRENGTH\n - - All parameter IDs are device independent.\n - - Supported Input Media Format:\n -* - Data Format : FIXED_POINT\n -* - fmt_id : Don't care\n -* - Sample Rates : Any (>0)\n -* - Number of channels : 1 to 8\n -* - Channel type : 1 to 63\n -* - Bits per sample : 16, 32\n -* - Q format : 15 for bits per sample = 16 and 27 for bps = 32\n -* - Interleaving : de-interleaved unpacked\n -* - Signed/unsigned : Signed } - - @h2xmlm_toolPolicy {Calibration} - - @h2xmlm_dataMaxInputPorts {CAPI_BASSBOOST_MAX_IN_PORTS} - @h2xmlm_dataInputPorts {IN=2} - @h2xmlm_dataMaxOutputPorts {CAPI_BASS_BOOST_MAX_OUT_PORTS} - @h2xmlm_dataOutputPorts {OUT=1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {BASS_BOOST_STACK_SIZE} - @h2xmlm_ToolPolicy {Calibration} - - @{ <-- Start of the Module --> - @h2xml_Select {"param_id_module_enable_t"} - @h2xmlm_InsertParameter -*/ - -/* ID of the Bass Boost Mode parameter used by MODULE_ID_BASS_BOOST. */ -#define PARAM_ID_BASS_BOOST_MODE 0x0800112C - -/* Structure for the mode parameter of Bass Boost module. */ -typedef struct bass_boost_mode_t bass_boost_mode_t; -/** @h2xmlp_parameter {"PARAM_ID_BASS_BOOST_MODE", PARAM_ID_BASS_BOOST_MODE} - @h2xmlp_description {Configures the bass boost mode} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_BASS_BOOST_MODE parameter used by the Bass Boost module. */ -struct bass_boost_mode_t -{ - uint32_t bass_boost_mode; - /**< @h2xmle_description {Specifies the bass boost mode. This parameter is device dependent.\n - Physical boost enhances the low frequency contents.\n - Currently, only Physical Boost mode is supported.\n} - - @h2xmle_rangeList {"Physical boost (used by the headphone)"= 0} - @h2xmle_default {0} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - - -/* ID of the Bass Boost Strength parameter used by MODULE_ID_BASS_BOOST. */ -#define PARAM_ID_BASS_BOOST_STRENGTH 0x0800112D - - -/* Structure for the strength parameter of Bass Boost module. */ -typedef struct bass_boost_strength_t bass_boost_strength_t; -/** @h2xmlp_parameter {"PARAM_ID_BASS_BOOST_STRENGTH", PARAM_ID_BASS_BOOST_STRENGTH} - @h2xmlp_description {Specifies the effects of bass boost.} */ - - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - - -/* Payload of the PARAM_ID_BASS_BOOST_STRENGTH parameter used by the Bass Boost module. */ -struct bass_boost_strength_t -{ - uint32_t strength; - /**< @h2xmle_description {Specifies the effects of bass boost. This parameter affects the audio - stream and is device independent.\n} - - @h2xmle_range {0..1000} - @h2xmle_default {1000} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/** @} <-- End of the Module -->*/ - -#endif diff --git a/modules/processing/bassboost/build/CMakeLists.txt b/modules/processing/bassboost/build/CMakeLists.txt deleted file mode 100644 index d8406e5b..00000000 --- a/modules/processing/bassboost/build/CMakeLists.txt +++ /dev/null @@ -1,46 +0,0 @@ -#[[ - @file CMakeLists.txt - - @brief - - @copyright - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -]] -cmake_minimum_required(VERSION 3.10) - -set(bass_boost_sources - ${LIB_ROOT}/capi/src/capi_bassboost.cpp - ${LIB_ROOT}/capi/src/capi_bassboost_kpps.cpp - ${LIB_ROOT}/capi/src/capi_bassboost_utils.cpp - ${LIB_ROOT}/lib/src/bassboost.c -) - -set(bass_boost_includes - ${LIB_ROOT}/api - ${LIB_ROOT}/capi/inc - ${LIB_ROOT}/capi/src - ${LIB_ROOT}/lib/inc - ${LIB_ROOT}/lib/src - ${PROJECT_SOURCE_DIR}/modules/cmn/common/utils/inc - ${PROJECT_SOURCE_DIR}/modules/processing/filters/multi_stage_iir/lib/inc - ${PROJECT_SOURCE_DIR}/modules/processing/gain_control/limiter/lib/inc - ${PROJECT_SOURCE_DIR}/modules/processing/gain_control/drc/lib/inc - ${PROJECT_SOURCE_DIR}/fwk/spf/interfaces/module/shared_lib_api/inc/generic -) - -spf_module_sources( - KCONFIG CONFIG_BASS_BOOST - NAME bass_boost - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "PP" - AMDB_MID "0x07001062" - AMDB_TAG "capi_bassboost" - AMDB_MOD_NAME "MODULE_ID_BASS_BOOST" - SRCS ${bass_boost_sources} - INCLUDES ${bass_boost_includes} - H2XML_HEADERS "${LIB_ROOT}/api/api_bassboost.h" - CFLAGS "" -) diff --git a/modules/processing/bassboost/capi/inc/capi_bassboost.h b/modules/processing/bassboost/capi/inc/capi_bassboost.h deleted file mode 100644 index cae2af33..00000000 --- a/modules/processing/bassboost/capi/inc/capi_bassboost.h +++ /dev/null @@ -1,41 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_bassboost.h - * - * Header file to implement the Audio Post Processor Interface for - * acoustic bass enhancement - */ - -#ifndef CAPI_BASSBOOST_H -#define CAPI_BASSBOOST_H - -#include "capi.h" -#include "ar_defs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get static properties of bassboost module such as - * memory, stack requirements etc. - * See capi.h for more details. - */ -capi_err_t capi_bassboost_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); - -/** - * Instantiates(and allocates) the module memory. - * See capi.h for more details. - */ -capi_err_t capi_bassboost_init(capi_t *_pif, capi_proplist_t *init_set_properties); - -#ifdef __cplusplus -} -#endif - -#endif /* CAPI_BASSBOOST_H */ diff --git a/modules/processing/bassboost/capi/src/capi_bassboost.cpp b/modules/processing/bassboost/capi/src/capi_bassboost.cpp deleted file mode 100644 index 6516cb0a..00000000 --- a/modules/processing/bassboost/capi/src/capi_bassboost.cpp +++ /dev/null @@ -1,543 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_bassboost.cpp - * - * C source file to implement the Audio Post Processor Interface for - * Acoustic Bass Enhancement - * (library version: - * AUDIO_SYSTEM_BASSBOOST_UNIT_TEST_RELEASE_1.2_3.1.0_08.05.2016) - */ - -#define BASSBOOST_MAX_STRENGTH 1000 -#define BASSBOOST_MIN_STRENGTH 0 -#include "capi_bassboost_utils.h" - -static capi_err_t capi_bassboost_process(capi_t * _pif, - capi_stream_data_t *input[], - capi_stream_data_t *output[]); - -static capi_err_t capi_bassboost_end(capi_t *_pif); - -static capi_err_t capi_bassboost_set_param(capi_t * _pif, - uint32_t param_id, - const capi_port_info_t *port_info_ptr, - capi_buf_t * params_ptr); - -static capi_err_t capi_bassboost_get_param(capi_t * _pif, - uint32_t param_id, - const capi_port_info_t *port_info_ptr, - capi_buf_t * params_ptr); - -static capi_err_t capi_bassboost_set_properties(capi_t *_pif, capi_proplist_t *props_ptr); - -static capi_err_t capi_bassboost_get_properties(capi_t *_pif, capi_proplist_t *props_ptr); - -static capi_vtbl_t vtbl = { capi_bassboost_process, capi_bassboost_end, - capi_bassboost_set_param, capi_bassboost_get_param, - capi_bassboost_set_properties, capi_bassboost_get_properties }; - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_get_static_properties - * Capi_v2 BassBoost function to get the static properties - * -------------------------------------------------------------------------*/ -capi_err_t capi_bassboost_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties) -{ - capi_err_t capi_result = CAPI_EOK; - - if (NULL != static_properties) - { - capi_result = capi_bassboost_process_get_properties((capi_bassboost_t *)NULL, static_properties); - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_HIGH_PRIO, "CAPI BassBoost: get static properties failed!"); - return capi_result; - } - } - else - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: Get static properties received bad pointer, 0x%p", static_properties); - } - - return capi_result; -} - -/*------------------------------------------------------------------------ - Function name: capi_bassboost_init - Initialize the CAPIv2 BassBosst library. This function can allocate memory. - * -----------------------------------------------------------------------*/ - -capi_err_t capi_bassboost_init(capi_t *_pif, capi_proplist_t *init_set_properties) -{ - capi_err_t capi_result = CAPI_EOK; - - if (NULL == _pif || NULL == init_set_properties) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: Init received bad pointer, 0x%p, 0x%p", _pif, init_set_properties); - - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - return capi_result; - } - - capi_bassboost_t *me_ptr = (capi_bassboost_t *)_pif; - - memset(me_ptr, 0, sizeof(capi_bassboost_t)); - - me_ptr->lib_instance.mem_ptr = NULL; - me_ptr->vtbl.vtbl_ptr = &vtbl; - capi_bassboost_init_media_fmt(me_ptr); - me_ptr->events_config.kpps = 0; - me_ptr->events_config.code_bw = 0; - me_ptr->events_config.data_bw = BASS_BOOST_BY_PASS_BW; - me_ptr->events_config.delay_in_us = 0; - me_ptr->events_config.enable = TRUE; - - if (NULL != init_set_properties) - { - capi_result |= capi_bassboost_process_set_properties(me_ptr, init_set_properties); - capi_result ^= (capi_result & CAPI_EUNSUPPORTED); - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: Init Set Property Failed"); - return capi_result; - } - } - // capi_bassboost_raise_event(me_ptr); - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Initialization completed !!"); - return capi_result; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_process - * BassBoost Data Process function to process an input buffer - * and generates an output buffer. - * -------------------------------------------------------------------------*/ -static capi_err_t capi_bassboost_process(capi_t * _pif, - capi_stream_data_t *input[], - capi_stream_data_t *output[]) -{ - BASSBOOST_RESULT lib_result = BASSBOOST_SUCCESS; - capi_err_t capi_result = CAPI_EOK; - - capi_bassboost_t *me_ptr = (capi_bassboost_t *)_pif; - - POSAL_ASSERT(me_ptr); - POSAL_ASSERT(input[0]); - POSAL_ASSERT(output[0]); - POSAL_ASSERT(me_ptr->lib_static_vars.num_chs <= (int32)(input[0]->bufs_num)); - POSAL_ASSERT(me_ptr->lib_static_vars.num_chs <= (int32)(output[0]->bufs_num)); - - void *inp_ptrs[BASS_BOOST_MAX_CHANNELS]; - void *out_ptrs[BASS_BOOST_MAX_CHANNELS]; - - int32 byte_sample_convert = (16 == me_ptr->lib_static_vars.data_width) ? 1 : 2; - // one port only, one input and one output - uint32_t port = 0; - - if (me_ptr->is_disabled == TRUE) - { - me_ptr->is_disabled = FALSE; - for(uint32_t inch = 0; inch < input[0]->bufs_num; inch++) - { - input[0]->buf_ptr[inch].actual_data_len = 0; - } - for(uint32_t outch = 0; outch < output[0]->bufs_num; outch++) - { - output[0]->buf_ptr[outch].actual_data_len = 0; - } - capi_bassboost_update_raise_event(me_ptr); - return CAPI_EOK; - } - -#ifdef DO_BASSBOOST_PROFILING - me_ptr->kpps_profile_data.start_cycles = q6sim_read_cycles(); -#endif - - int32_t input_num_samples = input[port]->buf_ptr[0].actual_data_len >> (byte_sample_convert); - int32_t output_num_samples = output[port]->buf_ptr[0].max_data_len >> (byte_sample_convert); - int32_t num_samples_to_process = s32_min_s32_s32(input_num_samples, output_num_samples); - int32_t samples_to_process = num_samples_to_process; - int32_t samples_processed = 0; - while (samples_to_process > 0) - { - int32_t samples = s32_min_s32_s32(samples_to_process, me_ptr->lib_static_vars.max_block_size); - - for (int32_t ch = 0; ch < me_ptr->lib_static_vars.num_chs; ch++) - { - inp_ptrs[ch] = (void *)(input[port]->buf_ptr[ch].data_ptr + (samples_processed << byte_sample_convert)); - out_ptrs[ch] = (void *)(output[port]->buf_ptr[ch].data_ptr + (samples_processed << byte_sample_convert)); - } - - lib_result = bassboost_process(&(me_ptr->lib_instance), out_ptrs, inp_ptrs, samples); - if (BASSBOOST_SUCCESS != lib_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: library process failed"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - return capi_result; - } - samples_processed += samples; - samples_to_process -= samples; - } - - for (int32_t ch = 0; ch < me_ptr->lib_static_vars.num_chs; ch++) - { - output[port]->buf_ptr[ch].actual_data_len = (num_samples_to_process << byte_sample_convert); - input[port]->buf_ptr[ch].actual_data_len = (num_samples_to_process << byte_sample_convert); - } - /* check if x-fading is done to update the KPPS when BB is disabled. */ - if (0 == me_ptr->lib_config.enable) - { - bassboost_crossfade_t x_fade_flag = 0; - uint32_t lib_actual_size = 0; - - lib_result = bassboost_get_param(&(me_ptr->lib_instance), - BASSBOOST_PARAM_CROSSFADE_FLAG, - (void *)&x_fade_flag, - (uint32)sizeof(x_fade_flag), - (uint32 *)&lib_actual_size); - - if ((BASSBOOST_SUCCESS != lib_result) || (0 == lib_actual_size)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: Get of xfade_flag failed"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - return capi_result; - } - if (0 == x_fade_flag) - { - me_ptr->events_config.code_bw = 0; - if ((me_ptr->lib_static_vars.sample_rate > 48000) || (me_ptr->lib_static_vars.num_chs > 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BY_PASS_BW; - } - else - { - me_ptr->events_config.data_bw = BASS_BOOST_BY_PASS_BW_HIGH; - } - me_ptr->is_disabled = TRUE; - - // capi_bassboost_update_raise_event(me_ptr); - } - } - - output[0]->flags = input[0]->flags; - if (input[0]->flags.is_timestamp_valid) - { - output[0]->timestamp = input[0]->timestamp - me_ptr->events_config.delay_in_us; - } - -#ifdef DO_BASSBOOST_PROFILING - me_ptr->kpps_profile_data.end_cycles = q6sim_read_cycles(); - capi_bassboost_profiling(me_ptr, num_samples_to_process); -#endif - return capi_result; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_end - * Bass-boost close functions, returns the library to the uninitialized - * state and frees all the memory that was allocated. This function also - * frees the virtual function table. - * -------------------------------------------------------------------------*/ -static capi_err_t capi_bassboost_end(capi_t *_pif) -{ - capi_err_t capi_result = CAPI_EOK; - if (NULL == _pif) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: End received bad pointer, 0x%p", _pif); - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - return capi_result; - } - - capi_bassboost_t *me_ptr = (capi_bassboost_t *)_pif; - uint32_t temp_miid = me_ptr->miid; -#ifdef DO_BASSBOOST_PROFILING - capi_bassboost_print_kpps(me_ptr); -#endif - if (NULL != me_ptr->lib_instance.mem_ptr) - { - posal_memory_free(me_ptr->lib_instance.mem_ptr); - me_ptr->lib_instance.mem_ptr = NULL; - } - - me_ptr->lib_mem_req.mem_size = 0; - me_ptr->vtbl.vtbl_ptr = NULL; - - BASSBOOST_MSG(temp_miid, DBG_HIGH_PRIO, "CAPI BassBoost: End done"); - return capi_result; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_set_param - * Sets either a parameter value or a parameter structure containing - * multiple parameters. In the event of a failure, the appropriate error - * code is returned. - * -------------------------------------------------------------------------*/ -static capi_err_t capi_bassboost_set_param(capi_t * _pif, - uint32_t param_id, - const capi_port_info_t *port_info_ptr, - capi_buf_t * params_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - if (NULL == _pif || NULL == params_ptr) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: set param received bad pointer, 0x%p, 0x%p", _pif, params_ptr); - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - return capi_result; - } - capi_bassboost_t *me_ptr = (capi_bassboost_t *)(_pif); - int8_t * param_payload_ptr = (int8_t *)(params_ptr->data_ptr); - uint32_t param_size = params_ptr->actual_data_len; - - switch (param_id) - { - case PARAM_ID_MODULE_ENABLE: - { - if (param_size >= sizeof(param_id_module_enable_t)) - { - param_id_module_enable_t *enable_ptr = (param_id_module_enable_t *)param_payload_ptr; - me_ptr->lib_config.enable = (0 == enable_ptr->enable) ? 0 : 1; - me_ptr->lib_config.is_enable_set = TRUE; - - capi_result = capi_bassboost_check_set_param(me_ptr, - BASSBOOST_PARAM_ENABLE, - (void *)&(me_ptr->lib_config.enable), - (uint32_t)sizeof(me_ptr->lib_config.enable), - (uint32_t)sizeof(bassboost_enable_t)); - if (CAPI_SUCCEEDED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Set enable: %ld", me_ptr->lib_config.enable); - if (me_ptr->lib_config.enable && me_ptr->lib_instance.mem_ptr != NULL) - { - capi_bassboost_update_raise_event(me_ptr); - } - } - } - } - break; - - case PARAM_ID_BASS_BOOST_MODE: - { - bass_boost_mode_t *mode_ptr = (bass_boost_mode_t *)param_payload_ptr; - me_ptr->lib_config.mode = mode_ptr->bass_boost_mode; - me_ptr->lib_config.is_mode_set = TRUE; - bassboost_mode_t mode = (bassboost_mode_t)(mode_ptr->bass_boost_mode); - capi_result = capi_bassboost_check_set_param(me_ptr, - BASSBOOST_PARAM_MODE, - (void *)&(mode), - (uint32_t)sizeof(mode), - (uint32_t)sizeof(bassboost_mode_t)); - if (CAPI_SUCCEEDED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: set mode %lu", me_ptr->lib_config.mode); - } - } - break; - - case PARAM_ID_BASS_BOOST_STRENGTH: - { - - bass_boost_strength_t *strength_ptr = (bass_boost_strength_t *)param_payload_ptr; - me_ptr->lib_config.strength = strength_ptr->strength; - me_ptr->lib_config.is_strength_set = TRUE; - bassboost_strength_t strength = (bassboost_strength_t)(strength_ptr->strength); - - if (strength >= BASSBOOST_MIN_STRENGTH && strength <= BASSBOOST_MAX_STRENGTH) - { - capi_result = capi_bassboost_check_set_param(me_ptr, - BASSBOOST_PARAM_STRENGTH, - (void *)&(strength), - (uint32_t)sizeof(strength), - (uint32_t)sizeof(bassboost_strength_t)); - if (CAPI_SUCCEEDED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: set strength %ld", me_ptr->lib_config.strength); - } - } - else - { - - return CAPI_EBADPARAM; - } - } - break; - - default: - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: Set unsupported parameter ID %#x", (int)param_id); - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - } - } - return capi_result; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_get_param - * Gets either a parameter value or a parameter structure containing - * multiple parameters. In the event of a failure, the appropriate error - * code is returned. - * -------------------------------------------------------------------------*/ -static capi_err_t capi_bassboost_get_param(capi_t * _pif, - uint32_t param_id, - const capi_port_info_t *port_info_ptr, - capi_buf_t * params_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - if (NULL == _pif || NULL == params_ptr) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: Get param received bad pointer, 0x%p, 0x%p", _pif, params_ptr); - return CAPI_EBADPARAM; - } - - capi_bassboost_t *me_ptr = (capi_bassboost_t *)_pif; - switch (param_id) - { - case PARAM_ID_MODULE_ENABLE: - { - if (params_ptr->max_data_len >= sizeof(param_id_module_enable_t)) - { - param_id_module_enable_t *enable_ptr = (param_id_module_enable_t *)(params_ptr->data_ptr); - - bassboost_enable_t enable_flag = 0; - uint32_t lib_actual_size = 0; - - capi_result = capi_bassboost_check_get_param(me_ptr, - BASSBOOST_PARAM_ENABLE, - (void *)&enable_flag, - (uint32_t)sizeof(enable_flag), - (uint32_t)sizeof(bassboost_enable_t), - &lib_actual_size); - if ((CAPI_FAILED(capi_result)) || (0 == lib_actual_size)) - { - params_ptr->actual_data_len = lib_actual_size; - return capi_result; - } - enable_ptr->enable = (uint32_t)enable_flag; - params_ptr->actual_data_len = (uint32_t)sizeof(enable_ptr->enable); - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: get enable need more memory"); - CAPI_SET_ERROR(capi_result, CAPI_ENEEDMORE); - } - } - break; - - case PARAM_ID_BASS_BOOST_MODE: - { - if (params_ptr->max_data_len >= sizeof(bass_boost_mode_t)) - { - bass_boost_mode_t *mode_ptr = (bass_boost_mode_t *)(params_ptr->data_ptr); - - /* currently the library only supports PHYSICAL_BOOST */ - bassboost_mode_t mode = PHYSICAL_BOOST; - uint32_t lib_actual_size = 0; - - capi_result = capi_bassboost_check_get_param(me_ptr, - BASSBOOST_PARAM_MODE, - (void *)&mode, - (uint32_t)sizeof(mode), - (uint32_t)sizeof(bassboost_mode_t), - &lib_actual_size); - if ((CAPI_FAILED(capi_result)) || (0 == lib_actual_size)) - { - params_ptr->actual_data_len = lib_actual_size; - return capi_result; - } - mode_ptr->bass_boost_mode = (uint32_t)mode; - params_ptr->actual_data_len = (uint32_t)sizeof(mode_ptr->bass_boost_mode); - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: get mode need more memory"); - CAPI_SET_ERROR(capi_result, CAPI_ENEEDMORE); - } - } - break; - - case PARAM_ID_BASS_BOOST_STRENGTH: - { - if (params_ptr->max_data_len >= sizeof(bass_boost_strength_t)) - { - - bass_boost_strength_t *strength_ptr = (bass_boost_strength_t *)(params_ptr->data_ptr); - - bassboost_strength_t strength = 1000; // default strength - uint32_t lib_actual_size = 0; - - capi_result = capi_bassboost_check_get_param(me_ptr, - BASSBOOST_PARAM_STRENGTH, - (void *)&strength, - (uint32_t)sizeof(strength), - (uint32_t)sizeof(bassboost_strength_t), - &lib_actual_size); - if ((CAPI_FAILED(capi_result)) || (0 == lib_actual_size)) - { - params_ptr->actual_data_len = lib_actual_size; - return capi_result; - } - - strength_ptr->strength = (uint32_t)strength; - params_ptr->actual_data_len = (uint32_t)sizeof(strength_ptr->strength); - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: get strength needs more memory"); - CAPI_SET_ERROR(capi_result, CAPI_ENEEDMORE); - } - } - break; - - default: - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: Get unsupported param ID %#x", (int)param_id); - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - } - } - return capi_result; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_set_properties - * Function to set the properties of Bassboost module - * -------------------------------------------------------------------------*/ -static capi_err_t capi_bassboost_set_properties(capi_t *_pif, capi_proplist_t *props_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - if (NULL == _pif) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: Set properties received bad pointer, 0x%p", _pif); - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - return capi_result; - } - - capi_bassboost_t *me_ptr = (capi_bassboost_t *)_pif; - - capi_result |= capi_bassboost_process_set_properties(me_ptr, props_ptr); - - return capi_result; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_get_properties - * Function to get the properties of Bass-boost module - * -------------------------------------------------------------------------*/ -static capi_err_t capi_bassboost_get_properties(capi_t *_pif, capi_proplist_t *props_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - if (NULL == _pif) - { - BASSBOOST_MSG(MIID_UNKNOWN, DBG_ERROR_PRIO, "CAPI BassBoost: Get properties received bad pointer, 0x%p", _pif); - CAPI_SET_ERROR(capi_result, CAPI_EBADPARAM); - return capi_result; - } - - capi_bassboost_t *me_ptr = (capi_bassboost_t *)_pif; - - capi_result |= capi_bassboost_process_get_properties(me_ptr, props_ptr); - - return capi_result; -} diff --git a/modules/processing/bassboost/capi/src/capi_bassboost_kpps.cpp b/modules/processing/bassboost/capi/src/capi_bassboost_kpps.cpp deleted file mode 100644 index f88f6925..00000000 --- a/modules/processing/bassboost/capi/src/capi_bassboost_kpps.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -#include "capi_bassboost_utils.h" - -#define NUM_GENERAL_FREQUENCIES 12 - -static const uint32_t freq_array[] = { 8000, 11025, 16000, 22050, 32000, 44100, - 48000, 64000, 88200, 96000, 176400, 192000 }; - -static const uint32_t bassboost_kpps_table_enable[2][BASS_BOOST_MAX_CHANNELS][NUM_GENERAL_FREQUENCIES] = - { { { 478, 637, 896, 1213, 1786, 2422, 2627, 3519, 4846, 5258, 9730, 10574 }, - { 955, 1279, 1808, 2455, 3610, 4907, 5324, 7129, 9824, 10662, 19731, 21437 }, - { 1392, 1868, 2646, 3594, 5285, 7190, 7801, 10453, 14415, 15648, 29080, 31610 }, - { 1799, 2409, 3404, 4621, 6796, 9239, 10024, 13421, 18490, 20064, 37082, 40265 }, - { 2233, 2995, 4235, 5753, 8461, 11509, 12487, 16718, 23042, 25007, 46256, 50226 }, - { 2655, 3560, 5038, 6846, 10068, 13694, 14859, 19901, 27432, 29773, 55122, 59884 }, - { 3074, 4124, 5833, 7926, 11657, 15858, 17205, 23038, 31757, 34465, 63769, 69248 }, - { 3477, 4667, 6601, 8973, 13195, 17953, 19476, 26085, 35965, 39028, 72270, 78496 } }, - { { 484, 650, 927, 1267, 1863, 2533, 2749, 3679, 5062, 5495, 10129, 10999 }, - { 984, 1328, 1900, 2605, 3825, 5214, 5662, 7570, 10425, 11322, 20866, 22667 }, - { 1452, 1971, 2844, 3876, 5678, 7744, 8411, 11248, 15491, 16825, 31042, 33732 }, - { 1844, 2487, 3550, 4851, 7145, 9763, 10601, 14174, 19519, 21197, 39072, 42434 }, - { 2296, 3104, 4437, 6078, 8953, 12215, 13265, 17732, 24428, 26530, 48910, 53113 }, - { 2739, 3706, 5310, 7291, 10706, 14604, 15860, 21207, 29210, 31725, 58514, 63554 }, - { 3168, 4281, 6127, 8395, 12364, 16864, 18314, 24488, 33726, 36629, 67528, 73359 }, - { 3593, 4862, 6968, 9567, 14051, 19167, 20815, 27834, 38337, 41640, 76794, 83424 } } }; - -static const uint32_t bassboost_kpps_table_disable[2][BASS_BOOST_MAX_CHANNELS][NUM_GENERAL_FREQUENCIES] = - { { { 23, 24, 25, 31, 35, 37, 43, 52, 55, 67, 85, 91 }, - { 31, 34, 37, 48, 58, 61, 72, 90, 96, 120, 156, 168 }, - { 40, 44, 49, 67, 80, 85, 102, 130, 139, 174, 229, 247 }, - { 49, 54, 61, 84, 103, 108, 132, 169, 180, 228, 301, 324 }, - { 56, 63, 71, 102, 125, 132, 162, 207, 221, 281, 372, 402 }, - { 66, 73, 84, 120, 148, 156, 191, 246, 264, 335, 444, 480 }, - { 75, 83, 95, 137, 170, 179, 221, 285, 305, 389, 516, 557 }, - { 83, 93, 107, 155, 192, 203, 251, 324, 347, 443, 587, 635 } }, - { { 23, 26, 31, 47, 59, 63, 79, 103, 111, 143, 191, 207 }, - { 33, 39, 49, 81, 105, 113, 145, 193, 209, 273, 370, 401 }, - { 42, 52, 66, 114, 151, 162, 210, 283, 306, 402, 548, 594 }, - { 52, 64, 84, 148, 196, 212, 276, 373, 404, 532, 725, 788 }, - { 61, 77, 101, 181, 242, 261, 341, 462, 501, 661, 903, 981 }, - { 71, 89, 119, 215, 287, 311, 406, 552, 599, 790, 1081, 1175 }, - { 80, 101, 136, 248, 333, 360, 472, 641, 696, 920, 1259, 1368 }, - { 89, 114, 153, 281, 378, 409, 537, 731, 793, 1049, 1437, 1561 } } - - }; - -static inline int32_t get_frequency_index(uint32_t freq) -{ - int16 i = 0; - for (i = 0; i < NUM_GENERAL_FREQUENCIES; i++) - { - if (freq == freq_array[i]) - return i; - } - return -1; -} - -static inline int32_t get_channel_index(uint32_t num_ch) -{ - return (num_ch - 1); -} - -uint32_t capi_bassboost_get_kpps(capi_bassboost_t *me_ptr) -{ - const uint32_t numChan = me_ptr->input_media_fmt[0].format.num_channels; - const uint32_t Freq = me_ptr->input_media_fmt[0].format.sampling_rate; - uint32_t bits_per_sample = me_ptr->input_media_fmt[0].format.bits_per_sample; - - int32_t ch_index = get_channel_index(numChan); - int32_t freq_index = get_frequency_index(Freq); - int32_t bps_index = (bits_per_sample == 16) ? 0 : 1; - uint32_t kpps = 0; - - if ((freq_index >= 0) && (ch_index >= 0)) - { - if ((me_ptr->lib_config.enable) && (me_ptr->lib_instance.mem_ptr != NULL)) - { - kpps = bassboost_kpps_table_enable[bps_index][ch_index][freq_index]; - } - else - { - kpps = bassboost_kpps_table_disable[bps_index][ch_index][freq_index]; - } - } - - return kpps; -} diff --git a/modules/processing/bassboost/capi/src/capi_bassboost_utils.cpp b/modules/processing/bassboost/capi/src/capi_bassboost_utils.cpp deleted file mode 100644 index 998419ea..00000000 --- a/modules/processing/bassboost/capi/src/capi_bassboost_utils.cpp +++ /dev/null @@ -1,775 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_bassboost_utils.cpp - * - * C source file to implement the Audio Post Processor Interface for - * Acoustic Bass Enhancement - */ - -#include "capi_bassboost_utils.h" - -static void capi_bassboost_update_event_states(capi_bassboost_t *me_ptr); -void capi_bassboost_init_media_fmt(capi_bassboost_t *me_ptr); - -static bool_t bassboost_is_supported_media_type(const capi_media_fmt_v2_t *format_ptr) -{ - if (CAPI_FIXED_POINT != format_ptr->header.format_header.data_format) - { - AR_MSG(DBG_ERROR_PRIO, - "CAPI BassBoost: unsupported data format %lu", - (uint32_t)format_ptr->header.format_header.data_format); - return FALSE; - } - - if ((16 != format_ptr->format.bits_per_sample) && (32 != format_ptr->format.bits_per_sample)) - { - AR_MSG(DBG_ERROR_PRIO, - "CAPI BassBoost: only supports 16 and 32 bit data. Received %lu.", - format_ptr->format.bits_per_sample); - return FALSE; - } - - if (CAPI_INTERLEAVED == format_ptr->format.data_interleaving) - { - AR_MSG(DBG_ERROR_PRIO, "CAPI BassBoost: Interleaved data not supported."); - return FALSE; - } - - if (!format_ptr->format.data_is_signed) - { - AR_MSG(DBG_ERROR_PRIO, "CAPI BassBoost: Unsigned data not supported."); - return FALSE; - } - - if ((0 >= format_ptr->format.sampling_rate) - || (BASSBOOST_MAX_SAMPLE_RATE < format_ptr->format.sampling_rate)) - { - AR_MSG(DBG_ERROR_PRIO, "CAPI BassBoost: Sampling rate not supported"); - return FALSE; - } - - switch (format_ptr->format.num_channels) - { - case 0: - AR_MSG(DBG_ERROR_PRIO, "CAPI BassBoost: Zero channels passed."); - return FALSE; - - case 1: - if (PCM_CHANNEL_C != format_ptr->format.channel_type[0]) - { - AR_MSG(DBG_ERROR_PRIO, "CAPI BassBoost:: Unsupported Mono channel mapping."); - return FALSE; - } - break; - - case 2: - if ((PCM_CHANNEL_L != format_ptr->format.channel_type[0]) || - (PCM_CHANNEL_R != format_ptr->format.channel_type[1])) - { - AR_MSG(DBG_ERROR_PRIO, "CAPI BassBoost: Unsupported Stereo channel mapping."); - return FALSE; - } - break; - - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - break; - - default: - AR_MSG(DBG_ERROR_PRIO, - "CAPI BassBoost: Only upto 8 channels supported. Received %lu.", - format_ptr->format.num_channels); - return FALSE; - } - - return TRUE; -} - -void capi_bassboost_init_media_fmt(capi_bassboost_t *me_ptr) -{ - capi_media_fmt_v2_t *media_fmt_ptr = &(me_ptr->input_media_fmt[0]); - - media_fmt_ptr->header.format_header.data_format = CAPI_FIXED_POINT; - media_fmt_ptr->format.bits_per_sample = 16; - media_fmt_ptr->format.minor_version = 16; - media_fmt_ptr->format.bitstream_format = CAPI_DATA_FORMAT_INVALID_VAL; - media_fmt_ptr->format.data_interleaving = CAPI_DEINTERLEAVED_UNPACKED; - media_fmt_ptr->format.data_is_signed = 1; - media_fmt_ptr->format.num_channels = CAPI_DATA_FORMAT_INVALID_VAL; - media_fmt_ptr->format.q_factor = PCM_Q_FACTOR_15; - media_fmt_ptr->format.sampling_rate = CAPI_DATA_FORMAT_INVALID_VAL; - - for (uint32_t j = 0; j < CAPI_MAX_CHANNELS_V2; j++) - { - media_fmt_ptr->format.channel_type[j] = (uint16_t)CAPI_DATA_FORMAT_INVALID_VAL; - } -} -/* ========================================================================= - * FUNCTION : capi_bassboost_update_event_states - * DESCRIPTION: Function to update the event states to update using the - * callback function - * =========================================================================*/ -static void capi_bassboost_update_event_states(capi_bassboost_t *me_ptr) -{ - me_ptr->events_config.enable = me_ptr->lib_config.enable; - me_ptr->events_config.kpps = capi_bassboost_get_kpps(me_ptr); - me_ptr->events_config.code_bw = 0; - /*Honest B/W votes based on sampling rate and channels independently*/ - me_ptr->events_config.data_bw = BASS_BOOST_BW_LOW; - - if ((me_ptr->lib_static_vars.sample_rate <= 48000) && (me_ptr->lib_static_vars.num_chs > 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BW_CH_GREATER_THAN_2; - } - else if ((me_ptr->lib_static_vars.sample_rate > 48000) && (me_ptr->lib_static_vars.num_chs <= 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BW_FS_GREATER_THAN_48K; - } - else if ((me_ptr->lib_static_vars.sample_rate > 48000) && (me_ptr->lib_static_vars.num_chs > 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BW_HIGHEST; - } - bassboost_delay_t delay = 0; - uint32_t actual_size_ptr = 0; - BASSBOOST_RESULT lib_result = BASSBOOST_SUCCESS; - if (me_ptr->lib_instance.mem_ptr) - { - lib_result = bassboost_get_param(&(me_ptr->lib_instance), - BASSBOOST_PARAM_DELAY, - &delay, - sizeof(bassboost_delay_t), - &actual_size_ptr); - if (BASSBOOST_SUCCESS != lib_result) - { - delay = 0; - } - } - me_ptr->events_config.delay_in_us = 0; - if (me_ptr->lib_static_vars.sample_rate) - { - me_ptr->events_config.delay_in_us = - (uint32_t)(((uint64_t)delay * 1000000) / (me_ptr->lib_static_vars.sample_rate)); - } -} - -/* ========================================================================= - * FUNCTION : capi_bassboost_raise_event - * DESCRIPTION: Function to raise various events of the bass boost module - * =========================================================================*/ -capi_err_t capi_bassboost_update_raise_event(capi_bassboost_t *me_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - if (NULL == me_ptr->cb_info.event_cb) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, - "CAPI BassBoost: Event callback is not set. Unable to raise " - "events!"); - CAPI_SET_ERROR(capi_result, CAPI_EUNSUPPORTED); - return capi_result; - } - capi_bassboost_update_event_states(me_ptr); - capi_result |= capi_cmn_update_process_check_event(&me_ptr->cb_info, me_ptr->events_config.enable); - capi_result |= capi_cmn_update_kpps_event(&me_ptr->cb_info, me_ptr->events_config.kpps); - capi_result |= - capi_cmn_update_bandwidth_event(&me_ptr->cb_info, me_ptr->events_config.code_bw, me_ptr->events_config.data_bw); - capi_result |= capi_cmn_update_algo_delay_event(&me_ptr->cb_info, me_ptr->events_config.delay_in_us); - - return capi_result; -} - -/* ========================================================================= - * FUNCTION : capi_bassboost_check_get_cached_param - * DESCRIPTION: Function to get the cached configuration parameters from - * the Bassboost config - * =========================================================================*/ -static capi_err_t capi_bassboost_check_get_cached_param(capi_bassboost_t *me_ptr, - uint32_t param_id, - void * param_ptr, - uint32_t max_data_len, - uint32_t required_size, - uint32_t * actual_size_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - - if (max_data_len >= required_size) - { - switch (param_id) - { - case BASSBOOST_PARAM_MODE: - { - bass_boost_mode_t *mode_ptr = (bass_boost_mode_t *)(param_ptr); - mode_ptr->bass_boost_mode = me_ptr->lib_config.mode; - *actual_size_ptr = (uint32_t)sizeof(mode_ptr->bass_boost_mode); - break; - } - - case BASSBOOST_PARAM_STRENGTH: - { - bass_boost_strength_t *strength_ptr = (bass_boost_strength_t *)(param_ptr); - strength_ptr->strength = me_ptr->lib_config.strength; - *actual_size_ptr = (uint32_t)sizeof(strength_ptr->strength); - break; - } - } - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: Get param needs more memory"); - CAPI_SET_ERROR(capi_result, CAPI_ENEEDMORE); - } - - return capi_result; -} - -/* ========================================================================= - * FUNCTION : capi_bassboost_check_get_param - * DESCRIPTION: Function to get the configuration parameters from the - * Bassbosst library - * =========================================================================*/ -capi_err_t capi_bassboost_check_get_param(capi_bassboost_t *me_ptr, - uint32_t param_id, - void * param_ptr, - uint32_t max_data_len, - uint32_t required_size, - uint32_t * actual_size_ptr) -{ - BASSBOOST_RESULT lib_result = BASSBOOST_SUCCESS; - capi_err_t capi_result = CAPI_EOK; - - if (me_ptr->lib_instance.mem_ptr == NULL) - { - capi_result |= capi_bassboost_check_get_cached_param(me_ptr, - param_id, - param_ptr, - max_data_len, - required_size, - actual_size_ptr); - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: Get parameter failed from the cached params"); - return capi_result; - } - } - else - { - if (max_data_len >= required_size) - { - lib_result = bassboost_get_param(&(me_ptr->lib_instance), param_id, param_ptr, max_data_len, actual_size_ptr); - if (BASSBOOST_SUCCESS != lib_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: get parameter failed"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - } - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: get parameter needs more memory"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - } - } - return capi_result; -} - -/* ========================================================================= - * FUNCTION : capi_bassboost_check_set_param - * DESCRIPTION: Function to set the configuration parameters to the - * Bassboost library - * =========================================================================*/ -capi_err_t capi_bassboost_check_set_param(capi_bassboost_t *me_ptr, - uint32_t param_id, - void * param_ptr, - uint32_t param_size, - uint32_t required_size) -{ - BASSBOOST_RESULT lib_result = BASSBOOST_SUCCESS; - capi_err_t capi_result = CAPI_EOK; - - if (me_ptr->lib_instance.mem_ptr == NULL) - { - return capi_result; - } - else - { - if (param_size >= required_size) - { - lib_result = bassboost_set_param(&(me_ptr->lib_instance), param_id, param_ptr, param_size); - if (BASSBOOST_SUCCESS != lib_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: set parameter failed %d", lib_result); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - } - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: set parameter needs more memory"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - } - } - return capi_result; -} - -/* ========================================================================= - * FUNCTION : capi_bassboost_set_cached_lib_config - * DESCRIPTION: Sets either a parameter value or a parameter structure - * containing multiple parameters. In the event of a failure, - * the appropriate error code is returned. - * =========================================================================*/ -static capi_err_t capi_bassboost_set_cached_lib_config(capi_bassboost_t *me_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - - if (me_ptr->lib_config.is_enable_set) - { - bassboost_enable_t enable_flag = me_ptr->lib_config.enable; - capi_result |= capi_bassboost_check_set_param(me_ptr, - BASSBOOST_PARAM_ENABLE, - (void *)&(enable_flag), - (uint32_t)sizeof(enable_flag), - (uint32_t)sizeof(bassboost_enable_t)); - if (1 == me_ptr->lib_config.enable) - { - me_ptr->events_config.code_bw = 0; - me_ptr->events_config.kpps = capi_bassboost_get_kpps(me_ptr); - /*Honest B/W votes based on sampling rate and channels independently*/ - me_ptr->events_config.data_bw = BASS_BOOST_BW_LOW; - if ((me_ptr->lib_static_vars.sample_rate > 48000) && (me_ptr->lib_static_vars.num_chs <= 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BW_FS_GREATER_THAN_48K; - } - else if ((me_ptr->lib_static_vars.sample_rate <= 48000) && (me_ptr->lib_static_vars.num_chs > 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BW_CH_GREATER_THAN_2; - } - else if ((me_ptr->lib_static_vars.sample_rate > 48000) && (me_ptr->lib_static_vars.num_chs > 2)) - { - me_ptr->events_config.data_bw = BASS_BOOST_BW_HIGHEST; - } - } - - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPIv2 BassBoost: Set Cached Enabled failed %lu", capi_result); - return capi_result; - } - else - { - capi_bassboost_update_raise_event(me_ptr); - } - } - - if (me_ptr->lib_config.is_mode_set) - { - bassboost_mode_t mode = (bassboost_mode_t)(me_ptr->lib_config.mode); - capi_result |= capi_bassboost_check_set_param(me_ptr, - BASSBOOST_PARAM_MODE, - (void *)&(mode), - (uint32_t)sizeof(mode), - (uint32_t)sizeof(bassboost_mode_t)); - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPIv2 BassBoost: Set cached mode failed %lu", capi_result); - return capi_result; - } - } - - if (me_ptr->lib_config.is_strength_set) - { - bassboost_strength_t strength = (bassboost_strength_t)(me_ptr->lib_config.strength); - capi_result |= capi_bassboost_check_set_param(me_ptr, - BASSBOOST_PARAM_STRENGTH, - (void *)&(strength), - (uint32_t)sizeof(strength), - (uint32_t)sizeof(bassboost_strength_t)); - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPIv2 BassBoost: Set Cached strength failed %lu", capi_result); - return capi_result; - } - } - return capi_result; -} - -static capi_err_t capi_bassboost_check_create_lib_instance(capi_bassboost_t *me_ptr) -{ - bassboost_mem_req_t lib_mem_req; - capi_err_t capi_result = CAPI_EOK; - BASSBOOST_RESULT lib_result = BASSBOOST_SUCCESS; - void * ptr = NULL; - - int32_t framesize_10ms = align_to_8_byte(me_ptr->input_media_fmt[0].format.sampling_rate / 100); - me_ptr->lib_static_vars.data_width = me_ptr->input_media_fmt[0].format.bits_per_sample; - me_ptr->lib_static_vars.num_chs = me_ptr->input_media_fmt[0].format.num_channels; - me_ptr->lib_static_vars.sample_rate = me_ptr->input_media_fmt[0].format.sampling_rate; - me_ptr->lib_static_vars.limiter_delay = LIMITER_DEFAULT_DELAY_MS; - me_ptr->lib_static_vars.max_block_size = - framesize_10ms < BASS_BOOST_MAX_FRAME_SIZE ? framesize_10ms : BASS_BOOST_MAX_FRAME_SIZE; - - lib_result = bassboost_get_mem_req(&lib_mem_req, &(me_ptr->lib_static_vars)); - if (BASSBOOST_SUCCESS != lib_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: error getting library memory requirements %d", lib_result); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - return capi_result; - } - - lib_mem_req.mem_size = align_to_8_byte(lib_mem_req.mem_size); - - /* create the new library as needed */ - if ((0 == me_ptr->lib_mem_req.mem_size) || - (lib_mem_req.mem_size > me_ptr->lib_mem_req.mem_size) || // Make lib mem req =0 after 430. - (NULL == me_ptr->lib_instance.mem_ptr)) - { - if (NULL != me_ptr->lib_instance.mem_ptr) - { - posal_memory_free(me_ptr->lib_instance.mem_ptr); - me_ptr->lib_instance.mem_ptr = NULL; - } - ptr = posal_memory_malloc(lib_mem_req.mem_size, POSAL_HEAP_DEFAULT); - if (NULL == ptr) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: failed allocating memory for bassboost library"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - return capi_result; - } - me_ptr->lib_mem_req.mem_size = lib_mem_req.mem_size; - } - else - { - ptr = me_ptr->lib_instance.mem_ptr; - } - - lib_result = - bassboost_init_mem(&(me_ptr->lib_instance), &(me_ptr->lib_static_vars), ptr, me_ptr->lib_mem_req.mem_size); - if (BASSBOOST_SUCCESS != lib_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: library initialization failed"); - return CAPI_EFAILED; - } - - capi_result |= capi_bassboost_set_cached_lib_config(me_ptr); - - /* Library reset */ - lib_result = bassboost_set_param(&(me_ptr->lib_instance), BASSBOOST_PARAM_RESET, NULL, 0); - if (BASSBOOST_SUCCESS != lib_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI BassBoost: library Reset failed"); - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - return capi_result; - } - - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: library created successfully"); - return capi_result; -} - -#ifdef DO_BASSBOOST_PROFILING -void capi_bassboost_print_kpps(capi_bassboost_t *me_ptr) -{ - me_ptr->kpps_profile_data.average_kpps = - ((me_ptr->kpps_profile_data.total_cycles / me_ptr->kpps_profile_data.sample_count) * - me_ptr->kpps_profile_data.sample_rate) / - (1000); - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Total cycles :%llu", me_ptr->kpps_profile_data.total_cycles); - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Total Sample processed: %llu", me_ptr->kpps_profile_data.sample_count); - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Average KPPS: %llu", me_ptr->kpps_profile_data.average_kpps); - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Peak KPPS : %llu", me_ptr->kpps_profile_data.peak_kpps); - me_ptr->kpps_profile_data.total_cycles = 0; - me_ptr->kpps_profile_data.peak_kpps = 0; - me_ptr->kpps_profile_data.sample_count = 0; - me_ptr->kpps_profile_data.average_kpps = 0; -} - -void capi_bassboost_profiling(capi_bassboost_t *me_ptr, uint32_t num_samples) -{ - me_ptr->kpps_profile_data.sample_rate = me_ptr->media_fmt[0].format.sampling_rate; - me_ptr->kpps_profile_data.total_cycles = - me_ptr->kpps_profile_data.total_cycles + - (me_ptr->kpps_profile_data.end_cycles - me_ptr->kpps_profile_data.start_cycles); - me_ptr->kpps_profile_data.sample_count += num_samples; - uint64_t frame_kpps = - (((me_ptr->kpps_profile_data.end_cycles - me_ptr->kpps_profile_data.start_cycles) / num_samples) * - me_ptr->kpps_profile_data.sample_rate) / - (1000); - if ((frame_kpps > me_ptr->kpps_profile_data.peak_kpps) && - (num_samples > (me_ptr->kpps_profile_data.sample_rate / 1000))) - { - me_ptr->kpps_profile_data.peak_kpps = frame_kpps; - } -} -#endif /* DO_BASSBOOST_PROFILING */ - -capi_err_t capi_bassboost_process_set_properties(capi_bassboost_t *me_ptr, capi_proplist_t *proplist_ptr) -{ - capi_err_t capi_result = CAPI_EOK; - capi_prop_t *prop_array = proplist_ptr->prop_ptr; - - if (NULL == prop_array) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI Bassboost: Set property received null property array."); - - return CAPI_EBADPARAM; - } - - capi_result = capi_cmn_set_basic_properties(proplist_ptr, &me_ptr->heap, &me_ptr->cb_info, TRUE); - if (CAPI_EOK != capi_result) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI Bassboost: Get basic properties failed with result %lu", capi_result); - - return capi_result; - } - - for (uint32_t i = 0; i < proplist_ptr->props_num; i++) - { - const capi_buf_t *const payload_ptr = &(prop_array[i].payload); - capi_result = CAPI_EOK; - - switch (prop_array[i].id) - { - case CAPI_PORT_NUM_INFO: - case CAPI_HEAP_ID: - case CAPI_EVENT_CALLBACK_INFO: - { - break; - } - - case CAPI_ALGORITHMIC_RESET: - { - if (NULL != me_ptr->lib_instance.mem_ptr) - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Reset"); - BASSBOOST_RESULT lib_result = BASSBOOST_SUCCESS; - lib_result = bassboost_set_param(&(me_ptr->lib_instance), BASSBOOST_PARAM_RESET, NULL, 0); - if (BASSBOOST_SUCCESS != lib_result) - { - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - } - } - break; - } - - case CAPI_INPUT_MEDIA_FORMAT_V2: - { - if (payload_ptr->actual_data_len >= sizeof(capi_media_fmt_v2_t)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Received Input media format"); - - capi_media_fmt_v2_t *data_ptr = (capi_media_fmt_v2_t *)(payload_ptr->data_ptr); - if (!bassboost_is_supported_media_type(data_ptr)) - { - CAPI_SET_ERROR(capi_result, CAPI_EFAILED); - break; - } - // copy and save the input media fmt - memscpy(me_ptr->input_media_fmt, - sizeof(capi_media_fmt_v2_t), - data_ptr, - sizeof(capi_media_fmt_v2_t)); // CH Mapping - capi_result = capi_bassboost_check_create_lib_instance(me_ptr); - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, "CAPI Bassboost: Library creation failed"); - break; // this is catastrophic error, return - } - // raise event for output media format - capi_result |= capi_bassboost_update_raise_event(me_ptr); - capi_result |= - capi_cmn_output_media_fmt_event_v2(&me_ptr->cb_info, - &me_ptr->input_media_fmt[CAPI_BASSBOOST_DEFAULT_PORT], - FALSE, - CAPI_BASSBOOST_DEFAULT_PORT); // raise event for output media - // format - } - else - { - BASSBOOST_MSG(me_ptr->miid, DBG_ERROR_PRIO, - "CAPI BassBoost: Set property id 0x%lx Bad param size %lu", - (uint32_t)prop_array[i].id, - payload_ptr->actual_data_len); - CAPI_SET_ERROR(capi_result, CAPI_ENEEDMORE); - } - break; - } - case CAPI_MODULE_INSTANCE_ID: - { - if (payload_ptr->actual_data_len >= sizeof(capi_module_instance_id_t)) - { - capi_module_instance_id_t *data_ptr = (capi_module_instance_id_t *)payload_ptr->data_ptr; - me_ptr->miid = data_ptr->module_instance_id; - #if 0 - AR_MSG(DBG_LOW_PRIO, - "CAPI BassBoost: This module-id 0x%08lX, instance-id 0x%08lX", - data_ptr->module_id, - me_ptr->miid); - #endif - } - else - { - AR_MSG(DBG_ERROR_PRIO, - "CAPI BassBoost: Set, Param id 0x%lx Bad param size %lu", - (uint32_t)prop_array[i].id, - payload_ptr->actual_data_len); - CAPI_SET_ERROR(capi_result, CAPI_ENEEDMORE); - } - break; - } - - default: - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, "CAPI BassBoost: Set property id %#x. Not supported.", prop_array[i].id); - CAPI_SET_ERROR(capi_result, CAPI_EUNSUPPORTED); - break; - } - } /* switch (prop_array[i].id) */ - - if (CAPI_FAILED(capi_result)) - { - BASSBOOST_MSG(me_ptr->miid, DBG_HIGH_PRIO, - "CAPI Bassboost: Set property for %#x failed with opcode %lu", - prop_array[i].id, - capi_result); - } - } - - return capi_result; -} - -capi_err_t capi_bassboost_process_get_properties(capi_bassboost_t *me_ptr, capi_proplist_t *proplist_ptr) -{ - uint32_t i; - - capi_err_t result = CAPI_EOK; - capi_err_t result_2 = CAPI_EOK; - - capi_prop_t *prop_array = proplist_ptr->prop_ptr; - uint32_t miid = MIID_UNKNOWN; - if(me_ptr) - { - miid = me_ptr->miid; - } - if (NULL == prop_array) - { - BASSBOOST_MSG(miid, DBG_ERROR_PRIO, "CAPI Bassboost: Get property received null property array."); - - return CAPI_EBADPARAM; - } - - capi_basic_prop_t mod_prop; - mod_prop.init_memory_req = sizeof(capi_bassboost_t); - mod_prop.stack_size = BASSBOOST_STACK_SIZE; - mod_prop.num_fwk_extns = 0; // NA - mod_prop.fwk_extn_ids_arr = NULL; // NA - mod_prop.is_inplace = FALSE; // not capable of in-place processing of data - mod_prop.req_data_buffering = FALSE; - mod_prop.max_metadata_size = 0; // NA - - result = capi_cmn_get_basic_properties(proplist_ptr, &mod_prop); - if (CAPI_EOK != result) - { - BASSBOOST_MSG(miid, DBG_ERROR_PRIO, "CAPI Bassboost: Get common basic properties failed with result %lu", result); - - return result; - } - - for (i = 0; i < proplist_ptr->props_num; i++) - { - capi_buf_t *const payload_ptr = &(prop_array[i].payload); - const uint32_t param_id = prop_array[i].id; - - if (NULL == payload_ptr->data_ptr) - { - BASSBOOST_MSG(miid, DBG_ERROR_PRIO, "CAPI Bassboost: Get property id 0x%lx, received null buffer.", param_id); - CAPI_SET_ERROR(result, CAPI_EBADPARAM); - continue; - } - - result = CAPI_EOK; - - switch (prop_array[i].id) - { - case CAPI_INIT_MEMORY_REQUIREMENT: - case CAPI_IS_INPLACE: - case CAPI_REQUIRES_DATA_BUFFERING: - case CAPI_STACK_SIZE: - case CAPI_PORT_DATA_THRESHOLD: - case CAPI_MAX_METADATA_SIZE: - { - break; - } - - case CAPI_OUTPUT_MEDIA_FORMAT_SIZE: - { - if (payload_ptr->max_data_len >= sizeof(capi_output_media_format_size_t)) - { - capi_output_media_format_size_t *data_ptr = (capi_output_media_format_size_t *)payload_ptr->data_ptr; - data_ptr->size_in_bytes = sizeof(capi_standard_data_format_t); - payload_ptr->actual_data_len = sizeof(capi_output_media_format_size_t); - } - else - { - BASSBOOST_MSG(miid, DBG_ERROR_PRIO, - "CAPI Bassboost: Get Property id 0x%lx Bad param size %lu", - (uint32_t)prop_array[i].id, - payload_ptr->max_data_len); - CAPI_SET_ERROR(result, CAPI_ENEEDMORE); - } - - break; - } - - case CAPI_OUTPUT_MEDIA_FORMAT_V2: - { - if (payload_ptr->max_data_len >= sizeof(capi_media_fmt_v2_t)) - { - capi_media_fmt_v2_t *data_ptr = (capi_media_fmt_v2_t *)payload_ptr->data_ptr; - - if (NULL == me_ptr || NULL == me_ptr->lib_instance.mem_ptr || - (prop_array[i].port_info.is_valid && prop_array[i].port_info.port_index != 0)) - { - BASSBOOST_MSG(miid, DBG_ERROR_PRIO, - "CAPI Bassboost: Get Property id 0x%lx failed due to " - "invalid/unexpected values", - (uint32_t)prop_array[i].id); - CAPI_SET_ERROR(result, CAPI_EFAILED); - - break; - } - - *data_ptr = me_ptr->input_media_fmt[0]; - payload_ptr->actual_data_len = sizeof(capi_media_fmt_v2_t); - } - else - { - BASSBOOST_MSG(miid, DBG_ERROR_PRIO, - "CAPI Bassboost: Get Property id 0x%lx Bad param size %lu", - (uint32_t)prop_array[i].id, - payload_ptr->max_data_len); - CAPI_SET_ERROR(result, CAPI_ENEEDMORE); - } - - break; - } - - default: - { - CAPI_SET_ERROR(result, CAPI_EUNSUPPORTED); - break; - } - } /* switch (prop_array[i].id) */ - - CAPI_SET_ERROR(result_2, result); - - if (CAPI_FAILED(result)) - { - BASSBOOST_MSG(miid, DBG_HIGH_PRIO, "CAPI Bassboost: Get property for %#x failed with opcode %lu", prop_array[i].id, result); - } - } - - return result_2; -} diff --git a/modules/processing/bassboost/capi/src/capi_bassboost_utils.h b/modules/processing/bassboost/capi/src/capi_bassboost_utils.h deleted file mode 100644 index c7f05204..00000000 --- a/modules/processing/bassboost/capi/src/capi_bassboost_utils.h +++ /dev/null @@ -1,139 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ -/** - * @file capi_bassboost_utils.h - * - * Header file for utilities implement the Audio Post Processor Interface for - * Acoustic Bass Enhancement - */ - -#ifndef CAPI_BASSBOOST_UTILS_H -#define CAPI_BASSBOOST_UTILS_H - -#ifndef CAPI_STANDALONE -/* For shared libraries. */ -#include "shared_lib_api.h" -#else -#include "capi_util.h" -#endif - -#ifndef POSAL_ASSERT -#define POSAL_ASSERT(...) \ - { \ - ; \ - } -#endif - -#include "capi.h" -#include "capi_cmn.h" -#include "audio_basic_op_ext.h" - -#include "api_bassboost.h" -#include "capi_bassboost.h" - -#include "audpp_util.h" -#include "bassboost_api.h" -#include "bassboost_calibration_api.h" - -#ifdef DO_BASSBOOST_PROFILING -#include -#endif - -#define MIID_UNKNOWN 0 - -#define BASSBOOST_MSG_PREFIX "BASSBOOST:[%lX] " -#define BASSBOOST_MSG(ID, xx_ss_mask, xx_fmt, ...) AR_MSG(xx_ss_mask, BASSBOOST_MSG_PREFIX xx_fmt, ID, ##__VA_ARGS__) - -const uint32_t BASS_BOOST_MAX_CHANNELS = 8; -const int32_t LIMITER_DEFAULT_DELAY_MS = 10; -const int32_t BASS_BOOST_MAX_FRAME_SIZE = 240; -static const uint32_t BASSBOOST_STACK_SIZE = 4096; -const uint32_t BASS_BOOST_BY_PASS_BW = 0; -const uint32_t BASS_BOOST_BY_PASS_BW_HIGH = 1 * 1024 * 1024; -const uint32_t BASS_BOOST_BW_LOW = 2 * 1024 * 1024; -const uint32_t BASS_BOOST_BW_CH_GREATER_THAN_2 = 2 * 1024 * 1024; -const uint32_t BASS_BOOST_BW_FS_GREATER_THAN_48K = 2 * 1024 * 1024; -const uint32_t BASS_BOOST_BW_HIGHEST = 45 * 1024 * 1024; -const uint32_t BASSBOOST_MAX_SAMPLE_RATE = 192000; -/*------------------------------------------------------------------------ - * Function declarations - * -----------------------------------------------------------------------*/ -typedef struct capi_bassboost_profiler -{ - uint64_t start_cycles; - uint64_t end_cycles; - uint64_t total_cycles; - uint64_t sample_count; - uint64_t average_kpps; - uint64_t peak_kpps; - uint32_t sample_rate; -} capi_bassboost_profiler_t; - -typedef struct capi_bassboost_events_config -{ - uint32_t enable; - uint32_t kpps; - uint32_t delay_in_us; - uint32_t code_bw; - uint32_t data_bw; -} capi_bassboost_events_config_t; - -typedef struct capi_bassboost_lib_config -{ - bool_t is_enable_set; - bool_t is_mode_set; - bool_t is_strength_set; - bassboost_enable_t enable; - bassboost_strength_t strength; - uint32_t mode; -} capi_bassboost_lib_config_t; - -typedef struct capi_bassboost_t -{ - capi_t vtbl; - capi_heap_id_t heap; // added here - bassboost_lib_t lib_instance; - bassboost_static_vars_t lib_static_vars; - bassboost_mem_req_t lib_mem_req; - - capi_event_callback_info_t cb_info; - capi_media_fmt_v2_t input_media_fmt[CAPI_BASSBOOST_MAX_IN_PORTS]; - capi_bassboost_events_config_t events_config; - capi_bassboost_lib_config_t lib_config; - bool_t is_disabled; - uint32_t miid; -#ifdef DO_BASSBOOST_PROFILING - capi_bassboost_profiler_t kpps_profile_data; -#endif -} capi_bassboost_t; - -capi_err_t capi_bassboost_process_set_properties(capi_bassboost_t *me_ptr, capi_proplist_t *proplist_ptr); - -capi_err_t capi_bassboost_process_get_properties(capi_bassboost_t *me_ptr, capi_proplist_t *proplist_ptr); - -capi_err_t capi_bassboost_update_raise_event(capi_bassboost_t *me_ptr); - -void capi_bassboost_init_media_fmt(capi_bassboost_t *me_ptr); - -capi_err_t capi_bassboost_check_set_param(capi_bassboost_t *me_ptr, - uint32_t param_id, - void * param_ptr, - uint32_t param_size, - uint32_t required_size); - -capi_err_t capi_bassboost_check_get_param(capi_bassboost_t *me_ptr, - uint32_t param_id, - void * param_ptr, - uint32_t max_data_len, - uint32_t required_size, - uint32_t * actual_size_ptr); - -void capi_bassboost_profiling(capi_bassboost_t *me_ptr, uint32_t num_samples); - -void capi_bassboost_print_kpps(capi_bassboost_t *me_ptr); - -uint32_t capi_bassboost_get_kpps(capi_bassboost_t *me_ptr); - -#endif /* CAPI_BASSBOOST_UTILS_H */ diff --git a/modules/processing/bassboost/capi/stub_src/capi_bassboost_stub.cpp b/modules/processing/bassboost/capi/stub_src/capi_bassboost_stub.cpp deleted file mode 100644 index 5122e850..00000000 --- a/modules/processing/bassboost/capi/stub_src/capi_bassboost_stub.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* ========================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - * =========================================================================*/ - -/** - * @file capi_bassboost_stub.cpp - * - * Stubbed Interface for Acoustic Bass Enhancement - */ - -#include "capi_bassboost.h" - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_get_static_properties - * Capi_v2 BassBoost stub function to get the static properties - * -------------------------------------------------------------------------*/ -capi_err_t capi_bassboost_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties) -{ - return CAPI_EUNSUPPORTED; -} - -/* ------------------------------------------------------------------------- - * Function name: capi_bassboost_init - * Stub function for the Bass-boost Initialization - * -------------------------------------------------------------------------*/ -capi_err_t capi_bassboost_init(capi_t *_pif, capi_proplist_t *init_set_properties) -{ - return CAPI_EUNSUPPORTED; -} diff --git a/modules/processing/bassboost/lib/inc/bassboost_api.h b/modules/processing/bassboost/lib/inc/bassboost_api.h deleted file mode 100644 index 81b69d0a..00000000 --- a/modules/processing/bassboost/lib/inc/bassboost_api.h +++ /dev/null @@ -1,93 +0,0 @@ -#ifndef BASSBOOST_API_H -#define BASSBOOST_API_H -/*============================================================================ - @file bassboost_api.h - - Public API for Bass Boost Effect - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ -#include "bassboost_calibration_api.h" -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Library Version -----------------------------------------------------------------------------*/ -#define BASSBOOST_LIB_VER (0x01000203) // lib version : rel/1.2/3.1.0 - // (major.minor.bug) (8.16.8 bits) - -/*---------------------------------------------------------------------------- - Error code -----------------------------------------------------------------------------*/ -typedef enum BASSBOOST_RESULT { - BASSBOOST_SUCCESS = 0, - BASSBOOST_FAILURE, - BASSBOOST_MEMERROR -} BASSBOOST_RESULT; - -/*---------------------------------------------------------------------------- - Type Declarations -----------------------------------------------------------------------------*/ -typedef struct bassboost_static_vars_t {//** static params - int32 data_width; // 16 (Q15 PCM) or 32 (Q27 PCM) - int32 sample_rate; // sampling rate - int32 max_block_size; // max block size - int32 num_chs; // num of channels - int32 limiter_delay; // internal limiter delay (ms) -} bassboost_static_vars_t; - -typedef struct bassboost_mem_req_t { // ** memory requirements - uint32 mem_size; // lib mem size (lib_mem_ptr ->) - uint32 stack_size; // stack mem size -} bassboost_mem_req_t; - -typedef struct bassboost_lib_t { // ** library struct - void* mem_ptr; // mem pointer -} bassboost_lib_t; - -/*----------------------------------------------------------------------------- - Function Declarations ------------------------------------------------------------------------------*/ - -// ** Process one block of samples (multi channel) -// lib_ptr: [in] pointer to library structure -// out_ptr: [out] pointer to output sample block (multi channel double ptr) -// in_ptr: [in] pointer to input sample block (multi channel double ptr) -// samples: [in] number of samples to be processed per channel -BASSBOOST_RESULT bassboost_process(bassboost_lib_t *lib_ptr, void **out_ptr, void **in_ptr, uint32 samples); - -// ** Get library memory requirements -// mem_req_ptr: [out] pointer to mem requirements structure -// static_vars_ptr: [in] pointer to static variable structure -BASSBOOST_RESULT bassboost_get_mem_req(bassboost_mem_req_t *mem_req_ptr, bassboost_static_vars_t* static_vars_ptr); - -// ** Partition, initialize memory, and set default values -// lib_ptr: [in, out] pointer to library structure -// static_vars_ptr: [in] pointer to static variable structure -// mem_ptr: [in] pointer to allocated memory -// mem_size: [in] size of memory allocated -BASSBOOST_RESULT bassboost_init_mem(bassboost_lib_t *lib_ptr, bassboost_static_vars_t* static_vars_ptr, void* mem_ptr, uint32 mem_size); - -// ** Set parameters to library -// lib_ptr: [in, out] pointer to lib structure -// param_id: [in] parameter id -// param_ptr: [in] pointer to the memory where the new values are stored -// param_size:[in] size of the memory pointed by param_ptr -BASSBOOST_RESULT bassboost_set_param(bassboost_lib_t* lib_ptr, uint32 param_id, void* param_ptr, uint32 param_size); - -// ** Get parameters from library -// lib_ptr: [in] pointer to library structure -// param_id: [in] parameter id -// param_ptr: [out] pointer to the memory where the retrieved value is going to be stored -// param_size:[in] size of the memory pointed by param_ptr -// param_actual_size_ptr: [out] pointer to memory that will hold the actual size of the parameter -BASSBOOST_RESULT bassboost_get_param(bassboost_lib_t* lib_ptr, uint32 param_id, void* param_ptr, uint32 param_size, uint32 *param_actual_size_ptr); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* BASSBOOST_API_H */ diff --git a/modules/processing/bassboost/lib/inc/bassboost_calibration_api.h b/modules/processing/bassboost/lib/inc/bassboost_calibration_api.h deleted file mode 100644 index 69b5a913..00000000 --- a/modules/processing/bassboost/lib/inc/bassboost_calibration_api.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef BASSBOOST_CALIBRATION_API_H -#define BASSBOOST_CALIBRATION_API_H -/*============================================================================ - @file bassboost_calibration_api.h - - Calibration (Public) API for Bass Boost Effect - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ -#include "AudioComdef.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Parameters with IDs -----------------------------------------------------------------------------*/ -#define BASSBOOST_PARAM_LIB_VER (0) // ** param: library version -typedef int32 bassboost_version_t; // access: get only - -#define BASSBOOST_PARAM_ENABLE (1) // ** param: on/off switch -typedef int32 bassboost_enable_t; // access: get & set, runtime - // range: [0 (OFF) or 1 (ON)] - -#define BASSBOOST_PARAM_MODE (2) // ** param: processing mode -typedef enum bassboost_mode_t { // access: get & set - PHYSICAL_BOOST = 0, // 0: physical boost (headphone) - VIRTUAL_BOOST, // 1: virtual boost (small speaker) - INVALID_BOOST = 0x7FFFFFFF -} bassboost_mode_t; // (mode 1 is now placeholder) - -#define BASSBOOST_PARAM_STRENGTH (3) // ** param: effect strength -typedef int32 bassboost_strength_t; // access: get & set, runtime - // range: [0, 1000] (per millie) - -#define BASSBOOST_PARAM_RESET (4) // ** param: reset internal memories - // access: set only - -#define BASSBOOST_PARAM_DELAY (5) // ** param: report alg delay (samples) -typedef int32 bassboost_delay_t; // access: get only - -#define BASSBOOST_PARAM_CROSSFADE_FLAG (6)//**param: whether in transition state -typedef int32 bassboost_crossfade_t; // access: get only - // range: [0 (NO) or 1 (YES)] - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* BASSBOOST_CALIBRATION_API_H */ diff --git a/modules/processing/bassboost/lib/src/bassboost.c b/modules/processing/bassboost/lib/src/bassboost.c deleted file mode 100644 index 0a63ba10..00000000 --- a/modules/processing/bassboost/lib/src/bassboost.c +++ /dev/null @@ -1,956 +0,0 @@ -/*============================================================================ - FILE: bassboost.c - - OVERVIEW: BassBoost Implementations - - DEPENDENCIES: None - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ -#include "bassboost.h" -#include "simple_mm.h" -#include "filter_design.h" -#include "audio_clips.h" -#include "drc_calib_api.h" - -void buffer32_copy -( - int32 *destBuf, /* output buffer */ - int32 *srcBuf, /* input buffer */ - uint32 samples /* number of samples to process */ -); - -/* configure the internal safeguard limiter */ -static BASSBOOST_RESULT config_limiter(bassboost_private_t *obj_ptr) -{ - int32 ch, status = 0; - limiter_tuning_t tuning; - - limiter_mode_t mode = NORMAL_PROC; - limiter_bypass_t bypass = 0; - tuning.makeup_gain = 256; // unity Q8 - tuning.gc = 32113; // GC = 0.98 - tuning.max_wait = 82; // (this value doens't matter) - - if (16 == obj_ptr->static_vars.data_width) { - tuning.threshold = 32022; // -0.2 dB, Q27 - } else { - tuning.threshold = 131162560; // -0.2 dB, Q15 - } - - // set mode - status += limiter_set_param(&obj_ptr->limiter_lib, LIMITER_PARAM_MODE, - &mode, sizeof(limiter_mode_t)); - - // set bypass - status += limiter_set_param(&obj_ptr->limiter_lib, LIMITER_PARAM_BYPASS, - &bypass, sizeof(limiter_bypass_t)); - - // set per channel tuning - for (ch = 0; ch < obj_ptr->static_vars.num_chs; ++ch) { - tuning.ch_idx = ch; - status += limiter_set_param(&obj_ptr->limiter_lib, LIMITER_PARAM_TUNING, - &tuning, sizeof(limiter_tuning_t)); - } - - return (status == 0 ? BASSBOOST_SUCCESS: BASSBOOST_FAILURE); -} - -/* configure the internal drc */ -static BASSBOOST_RESULT config_drc(bassboost_private_t *obj_ptr) -{ - drc_feature_mode_t drc_mode; - drc_config_t tuning; - int16 index; - int32 atrt, status = 0; - - // set drc mode to enable - drc_mode = DRC_ENABLED; - status += drc_set_param(&obj_ptr->drc_lib, DRC_PARAM_FEATURE_MODE, - (void*)&drc_mode, sizeof(drc_feature_mode_t)); - - // set drc config - // totally 10 dB boost, 4dB from drc makeup, another 6dB before limiter - tuning.channelLinked = CHANNEL_LINKED; - tuning.downSampleLevel = 8; // downsample 8 - tuning.rmsTavUL16Q16 = 310; // ~ 10ms 44/48k - - tuning.dnExpaThresholdL16Q7 = 4520; // -55 dBfs - tuning.dnExpaSlopeL16Q8 = -256; // 1:2 - tuning.dnExpaHysterisisUL16Q14 = 18855; - tuning.dnExpaMinGainDBL32Q23 = -167772160; - - tuning.upCompThresholdL16Q7 = 5416; // - 48 dBfs - tuning.upCompSlopeUL16Q16 = 43691; // 3:1 - tuning.upCompHysterisisUL16Q14 = 18855; - - tuning.dnCompThresholdL16Q7 = 9000; // -20 dBfs thresh - tuning.dnCompSlopeUL16Q16 = 49152; // 4:1 comp ratio - tuning.dnCompHysterisisUL16Q14 = 18855; - - tuning.makeupGainUL16Q12 = 6492; // makeup: 4dB - - // get 15 ms attack/release time. we support all sample rates but only - // 4 typicals are pre-calculated. we'll use them for nearby rates - index = find_freq(obj_ptr->static_vars.sample_rate, - bassboost_rates_const, BASSBOOST_NUM_RATES); - atrt = bassboost_atrt_const[index]; - tuning.dnCompAttackUL32Q31 = atrt; - tuning.dnCompReleaseUL32Q31 = atrt; - tuning.upCompAttackUL32Q31 = atrt; - tuning.upCompReleaseUL32Q31 = atrt; - tuning.dnExpaAttackUL32Q31 = atrt; - tuning.dnExpaReleaseUL32Q31 = atrt; - - status += drc_set_param(&obj_ptr->drc_lib, DRC_PARAM_CONFIG, - (void*)&tuning, sizeof(drc_config_t)); - - return (status == 0 ? BASSBOOST_SUCCESS: BASSBOOST_FAILURE); -} - -/* convert biquad coeffs designed by QSound code to be used by msiir library */ -static void convert_iir_coeffs(int32 *out_coeffs, int32 *in_coeffs) -{ - // filter coeffs designed by QSound code are Q23 with such order: - // b0, -a2, -a1, b2, b1, - // MSIIR filter coeff order: - // b0, b1, b2, a1, a2 - // we'll do proper adjustment and for simplcity, make each coeff Q30 - - // b0, Q23 to Q30 - out_coeffs[0] = s32_shl_s32_rnd_sat(in_coeffs[0], 7); - // b1, Q23 to Q30 - out_coeffs[1] = s32_shl_s32_rnd_sat(in_coeffs[4], 7); - // b2, Q23 to Q30 - out_coeffs[2] = s32_shl_s32_rnd_sat(in_coeffs[3], 7); - // a1, negate, then Q23 to Q30 - out_coeffs[3] = s32_shl_s32_rnd_sat(s32_neg_s32_sat(in_coeffs[2]), 7); - // a2, negate, then Q23 to Q30 - out_coeffs[4] = s32_shl_s32_rnd_sat(s32_neg_s32_sat(in_coeffs[1]), 7); -} - -/* configure internal iir filters */ -static BASSBOOST_RESULT config_iir_filters(bassboost_private_t *obj_ptr) -{ - typedef struct combined_struct { - int32 num_stages; - msiir_coeffs_t coeffs_struct[BASSBOOST_IIR_STAGES]; - } combined_struct; - - int32 ch, status = 0; - int32 coeffsL32Q23[5]; - int32 sample_rate = obj_ptr->static_vars.sample_rate; - int32 num_chs = obj_ptr->static_vars.num_chs; - - combined_struct config; - config.num_stages = BASSBOOST_IIR_STAGES; - config.coeffs_struct[0].shift_factor = c_iir_shift_factor; - - // design low-pass filter - designBiquadLowpassCoeffs(coeffsL32Q23, -602, c_bass_freq_hz, sample_rate, TRUE); - convert_iir_coeffs(config.coeffs_struct[0].iir_coeffs, coeffsL32Q23); - - for (ch = 0; ch < num_chs; ++ch) { - status += msiir_set_param(&obj_ptr->bass_fltrs[ch], MSIIR_PARAM_CONFIG, - &config, sizeof(combined_struct)); - } - - // design band-pass filter - designBiquadBandpassCoeffs(coeffsL32Q23, -602, c_band_freq_hz, sample_rate, TRUE); - convert_iir_coeffs(config.coeffs_struct[0].iir_coeffs, coeffsL32Q23); - - for (ch = 0; ch < num_chs; ++ch) { - status += msiir_set_param(&obj_ptr->band_fltrs[ch], MSIIR_PARAM_CONFIG, - &config, sizeof(combined_struct)); - } - - return (status == 0 ? BASSBOOST_SUCCESS: BASSBOOST_FAILURE); -} - -/* clean buffers and memories */ -static void reset(bassboost_private_t *obj_ptr) -{ - int32 ch, dummy; - - limiter_set_param(&obj_ptr->limiter_lib, LIMITER_PARAM_RESET, &dummy, sizeof(dummy)); - drc_set_param(&obj_ptr->drc_lib, DRC_PARAM_SET_RESET, (int8*)NULL, 0); - - for (ch = 0; ch < obj_ptr->static_vars.num_chs; ++ch) { - // clear delay line - delayline32_reset(&obj_ptr->delaylines[ch]); - // reset iir filters - msiir_set_param(&obj_ptr->bass_fltrs[ch], MSIIR_PARAM_RESET, &dummy, sizeof(dummy)); - msiir_set_param(&obj_ptr->band_fltrs[ch], MSIIR_PARAM_RESET, &dummy, sizeof(dummy)); - } -} - -/* set library with default value after init */ -static BASSBOOST_RESULT set_default(bassboost_private_t *obj_ptr) -{ - int32 ch, status = 0; - - // set default params - obj_ptr->enable = 0; - obj_ptr->mode = PHYSICAL_BOOST; - obj_ptr->strength = 1000; - - // set strength fader - obj_ptr->ramp_smps = ms_to_sample(c_fader_smooth_ms, obj_ptr->static_vars.sample_rate); - obj_ptr->onset_smps = ms_to_sample(c_onset_smooth_ms, obj_ptr->static_vars.sample_rate); - panner_setup(&obj_ptr->strenghth_fader, Q15_ONE, 0, 0); // set to max - - // set onoff fader - for (ch = 0; ch < obj_ptr->static_vars.num_chs; ++ch) { - panner_setup(&obj_ptr->onoff_fader[ch], Q15_ONE, 0, 0); // disable (reverse logic) - } - - // config sub modules - status += config_limiter(obj_ptr); - status += config_drc(obj_ptr); - status += config_iir_filters(obj_ptr); - - // reset lib - reset(obj_ptr); - - return (status == 0 ? BASSBOOST_SUCCESS: BASSBOOST_FAILURE); -} - -/* mix bass with delayed direct sound with smooth gain */ -// gain values are squared to be closer to how we perceive volume -static void smooth_bass_mix16(int32 **mix_buf, int16 **bass_buf, - pannerStruct *x_fader, int32 num_chs, int32 samples) -{ - int16 bass_gain_q15, bassGainSqL16Q15; - int32 i, ch, ramped_samples, tmp_sample, bass_gain_q31; - int32 deltaL32Q31 = x_fader->deltaL32Q31; - - bass_gain_q15 = panner_get_current(*x_fader); - bass_gain_q31 = s32_shl_s32_sat((int32)bass_gain_q15, 16); - bassGainSqL16Q15 = s16_extract_s32_h( - s32_mult_s16_s16_shift_sat(bass_gain_q15, bass_gain_q15)); - ramped_samples = s32_min_s32_s32(samples, x_fader->sampleCounter); - - // additional 6 dB gain applied during mix. notice that this is done - // by 1 extract upshift in ramped samples and setting Q14 for a Q15 - // gain when mixing with not ramped samples - - for (i = 0; i < ramped_samples; ++i) { - // obtain gain and square it - bass_gain_q15 = s16_extract_s32_h(bass_gain_q31); - bassGainSqL16Q15 = s16_extract_s32_h( - s32_mult_s16_s16_shift_sat(bass_gain_q15, bass_gain_q15)); - - // apply gain squre to samples and mix into 32 bit mix buffers - for (ch = 0; ch < num_chs; ++ch) { - tmp_sample = s16_extract_s64_h_rnd(s40_mult_s16_s16_shift( - *(bass_buf[ch]+i), bassGainSqL16Q15, 2)); - mix_buf[ch][i] = s32_add_s32_s32(mix_buf[ch][i], tmp_sample); - } - // add delta increment to Q31 gain - bass_gain_q31 = s32_add_s32_s32_sat(bass_gain_q31, deltaL32Q31); - } // end of for loop - - // decrease sample count for ramped samples - samples -= ramped_samples; - x_fader->sampleCounter -= ramped_samples; - - // mix the rest - for (ch = 0; ch < num_chs; ++ch) { - buffer32_mix16src(mix_buf[ch]+i, bass_buf[ch]+i, bassGainSqL16Q15, 14, samples); - } - } - -static void smooth_bass_mix32(int32 **mix_buf, int32 **bass_buf, - pannerStruct *x_fader, int32 num_chs, int32 samples) -{ - // bass gain uses the squared value of linear gain to be one step closer - // to how we perceive volume, but still stay simple on computation - - int16 bass_gain_q15, bassGainSqL16Q15; - int32 i, ch, ramped_samples, tmp_sample, bass_gain_q31; - int32 deltaL32Q31 = x_fader->deltaL32Q31; - - bass_gain_q15 = panner_get_current(*x_fader); - bass_gain_q31 = s32_shl_s32_sat((int32)bass_gain_q15, 16); - bassGainSqL16Q15 = s16_extract_s32_h( - s32_mult_s16_s16_shift_sat(bass_gain_q15, bass_gain_q15)); - ramped_samples = s32_min_s32_s32(samples, x_fader->sampleCounter); - - for (i = 0; i < ramped_samples; ++i) { - // obtain gain and squre it - bass_gain_q15 = s16_extract_s32_h(bass_gain_q31); - bassGainSqL16Q15 = s16_extract_s32_h( - s32_mult_s16_s16_shift_sat(bass_gain_q15, bass_gain_q15)); - - // apply gain squre to samples and mix into 32 bit mix buffers - for (ch = 0; ch < num_chs; ++ch) { - tmp_sample = s32_saturate_s64(s64_mult_s32_s16_shift( - *(bass_buf[ch]+i), bassGainSqL16Q15,2)); - mix_buf[ch][i] = s32_add_s32_s32(mix_buf[ch][i], tmp_sample); - } - // add delta increment to Q31 gain - bass_gain_q31 = s32_add_s32_s32_sat(bass_gain_q31, deltaL32Q31); - } // end of for loop - - // decrease sample count for ramped samples - samples -= ramped_samples; - x_fader->sampleCounter -= ramped_samples; - - // mix the rest - for (ch = 0; ch < num_chs; ++ch) { - buffer32_mix32(mix_buf[ch]+i, bass_buf[ch]+i, bassGainSqL16Q15, 14, samples); - } -} - -// smoothly crossfade between src1 and src2 with Q15 smooth panner, unity panner = all src2 -// should check these two functions in common lib when possible -// 16 bit version -static void bb_crossmix_panner(int16 *dest, int16 *src1, int16 *src2, pannerStruct *panner, int32 samples) -{ - int16 target_q15 = panner->targetGainL16Q15; - int32 pan_samples = panner->sampleCounter; - int32 delta_q31 = panner->deltaL32Q31; - int16 gain_q15, tmp16; - int32 gain_q31, ramp_samples, i; - - // current implementation totally ignores delay of panner - // src1 gets applied gain, and src2 is applied 1-gain - gain_q15 = panner_get_current(*panner); - gain_q31 = s32_shl_s32_sat((int32)gain_q15, 16); - - ramp_samples = s32_min_s32_s32(pan_samples, samples); - - // process samples with dynamic gains - for (i = 0; i < ramp_samples; ++i) { - // get q15 gain - gain_q15 = s16_extract_s32_h(gain_q31); - // apply gain to src 2 and save - *dest = s16_extract_s40_h(s40_mult_s16_s16_shift(*src2++, gain_q15, 1)); - // get 1-gain and apply to src 1 and mix - gain_q15 = s16_sub_s16_s16_sat(Q15_ONE, gain_q15); - tmp16 = s16_extract_s40_h(s40_mult_s16_s16_shift(*src1++, gain_q15, 1)); - *dest = s16_add_s16_s16_sat(*dest, tmp16); - dest++; - // add delta to q31 gain - gain_q31 = s32_add_s32_s32_sat(gain_q31, delta_q31); - } - pan_samples -= ramp_samples; - - // process samples with no gain change - samples -= ramp_samples; - if (samples > 0) { - if (Q15_ONE == target_q15) { - buffer_copy(dest, src2, samples); - } - else if (0 == target_q15) { - buffer_copy(dest, src1, samples); - } - else { - gain_q15 = s16_sub_s16_s16_sat(Q15_ONE, target_q15); - buffer_fill(dest, src2, target_q15, samples); - buffer_mix(dest, src1, gain_q15, samples); - } - } - panner->sampleCounter = pan_samples; -} - -// 32 bit version (different than common lib, with bug fix) -void bb32_crossmix_panner(int32 *dest, int32 *src1, int32 *src2, pannerStruct *panner, int32 samples) -{ - int16 target_q15 = panner->targetGainL16Q15; - int32 pan_samples = panner->sampleCounter; - int32 delta_q31 = panner->deltaL32Q31; - int16 gain_q15; - int32 gain_q31, ramp_samples, i, tmp32; - - // current implementation totally ignores delay of panner - // src1 gets applied gain, and src2 is applied 1-gain - gain_q15 = panner_get_current(*panner); - gain_q31 = s32_shl_s32_sat((int32)gain_q15, 16); - - ramp_samples = s32_min_s32_s32(pan_samples, samples); - - // process samples with dynamic gains - for (i = 0; i < ramp_samples; ++i) { - // get q15 gain - gain_q15 = s16_extract_s32_h(gain_q31); - // apply gain to src 2 and save - *dest = s32_mult_s32_s16_rnd_sat(*src2++, gain_q15); - // get 1-gain and apply to src 1 and mix - gain_q15 = s16_sub_s16_s16_sat(Q15_ONE, gain_q15); - tmp32 = s32_mult_s32_s16_rnd_sat(*src1++, gain_q15); - *dest = s32_add_s32_s32_sat(*dest, tmp32); - dest++; - // add delta to q31 gain - gain_q31 = s32_add_s32_s32_sat(gain_q31, delta_q31); - } - pan_samples -= ramp_samples; - - // process samples with no gain change - samples -= ramp_samples; - if (samples > 0) { - if (Q15_ONE == target_q15) { - buffer32_copy(dest, src2, samples); - } - else if (0 == target_q15) { - buffer32_copy(dest, src1, samples); - } - else { - gain_q15 = s16_sub_s16_s16_sat(Q15_ONE, target_q15); - buffer32_fill16(dest, src2, target_q15, samples); - buffer32_mix16(dest, src1, gain_q15, samples); - } - } - - panner->sampleCounter = pan_samples; -} - - -static BASSBOOST_RESULT bassboost_proc16(bassboost_private_t *obj_ptr, int16 **out_ptr, int16 **in_ptr, int32 samples) -{ - int32 num_chs = obj_ptr->static_vars.num_chs; - int16 **bass_buf = (int16 **)obj_ptr->bass_buf; - int16 **onset_buf = (int16 **)obj_ptr->onset_buf; - int32 **mix_buf = obj_ptr->mix_buf; - pannerStruct *strength = &obj_ptr->strenghth_fader; - pannerStruct *onset = obj_ptr->onset_fader; - pannerStruct *onoff = obj_ptr->onoff_fader; - int32 ch; - - // bypass mode (low MIPS) - if (0 >= obj_ptr->onoff_fader->sampleCounter && 0 == obj_ptr->enable) { - if (out_ptr != in_ptr) { - for (ch = 0; ch < num_chs; ++ch) { - buffer_copy(out_ptr[ch], in_ptr[ch], samples); - } - } - return BASSBOOST_SUCCESS; - } - - for (ch = 0; ch < num_chs; ++ch) { - // fade in or copy input samples - buffer_fill_with_panner(onset_buf[ch], in_ptr[ch], &onset[ch], samples); - // filter input, put bass part in bass buf - msiir_process_v2(&obj_ptr->bass_fltrs[ch], bass_buf[ch], onset_buf[ch], samples); - // filter input, put band pass portion in out buf as scratch - msiir_process_v2(&obj_ptr->band_fltrs[ch], out_ptr[ch], onset_buf[ch], samples); - // copy input to mix buf - buffer32_copy16(mix_buf[ch], onset_buf[ch], samples); - // mix band pass signal into bass buf: bass+0.5*band - buffer_mix(bass_buf[ch], out_ptr[ch], Q15_HALF, samples); - // inplace delay mixing buf contents - delayline32_inplace_delay(mix_buf[ch], &obj_ptr->delaylines[ch], samples); - } - - // apply drc on bass - drc_process(&obj_ptr->drc_lib, (int8 **)bass_buf, (int8 **)bass_buf, samples); - // mix bass and direct sound - smooth_bass_mix16(mix_buf, bass_buf, strength, num_chs, samples); - // use bass_buf as scratch for processed samples - limiter_process(&obj_ptr->limiter_lib, (void **)bass_buf, mix_buf, samples); - // cross fade at the output when needed - for (ch = 0; ch < num_chs; ++ch) { - bb_crossmix_panner(out_ptr[ch], bass_buf[ch], in_ptr[ch], &onoff[ch], samples); - } - - return BASSBOOST_SUCCESS; -} - -static BASSBOOST_RESULT bassboost_proc32(bassboost_private_t *obj_ptr, int32 **out_ptr, int32 **in_ptr, int32 samples) -{ - int32 num_chs = obj_ptr->static_vars.num_chs; - int32 **bass_buf = (int32 **)obj_ptr->bass_buf; - int32 **onset_buf = (int32 **)obj_ptr->onset_buf; - int32 **mix_buf = obj_ptr->mix_buf; - pannerStruct *strength = &obj_ptr->strenghth_fader; - pannerStruct *onset = obj_ptr->onset_fader; - pannerStruct *onoff = obj_ptr->onoff_fader; - int32 ch; - - // bypass mode (low MIPS) - if (0 >= obj_ptr->onoff_fader->sampleCounter && 0 == obj_ptr->enable) { - if (out_ptr != in_ptr) { - for (ch = 0; ch < num_chs; ++ch) { - buffer32_copy(out_ptr[ch], in_ptr[ch], samples); - } - } - return BASSBOOST_SUCCESS; - } - - for (ch = 0; ch < num_chs; ++ch) { - // fade in or copy input samples - buffer32_fill_panner(onset_buf[ch], in_ptr[ch], &onset[ch], samples); - // filter input, put bass part in bass buf - msiir_process_v2(&obj_ptr->bass_fltrs[ch], bass_buf[ch], onset_buf[ch], samples); - // filter input, put band pass portion in out buf as scratch - msiir_process_v2(&obj_ptr->band_fltrs[ch], out_ptr[ch], onset_buf[ch], samples); - // copy input to mix buf - buffer32_copy(mix_buf[ch], onset_buf[ch], samples); - // mix band pass signal into bass buf: bass+0.5*band - buffer32_mix16(bass_buf[ch], out_ptr[ch], Q15_HALF, samples); - // inplace delay mixing buf contents - delayline32_inplace_delay(mix_buf[ch], &obj_ptr->delaylines[ch], samples); - } - - // apply drc on bass - drc_process(&obj_ptr->drc_lib, (int8 **)bass_buf, (int8 **)bass_buf, samples); - // mix bass and direct sound - smooth_bass_mix32(mix_buf, bass_buf, strength, num_chs, samples); - // use bass_buf as scratch for processed samples - limiter_process(&obj_ptr->limiter_lib, (void **)bass_buf, mix_buf, samples); - // cross fade at the output when needed - for (ch = 0; ch < num_chs; ++ch) { - bb32_crossmix_panner(out_ptr[ch], bass_buf[ch], in_ptr[ch], &onoff[ch], samples); - } - - return BASSBOOST_SUCCESS; - } - -/*---------------------------------------------------------------------------- - API Functions -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -// ** Processing one block of samples -// lib_ptr: [in] pointer to library structure -// out_ptr: [out] pointer to output sample block (multi channel double ptr) -// in_ptr: [in] pointer to input sample block (multi channel double ptr) -// samples: [in] number of samples to be processed per channel -----------------------------------------------------------------------------*/ -BASSBOOST_RESULT bassboost_process(bassboost_lib_t *lib_ptr, void **out_ptr, void **in_ptr, uint32 api_samples) -{ - bassboost_private_t *obj_ptr = (bassboost_private_t *)lib_ptr->mem_ptr; - int32 samples = (int32)api_samples; - - // sanity check block size - if (samples > obj_ptr->static_vars.max_block_size) { - return BASSBOOST_FAILURE; - } - - // process for 16/32 bit respectively - if (16 == obj_ptr->static_vars.data_width) { - return bassboost_proc16(obj_ptr, (int16 **)out_ptr, (int16 **)in_ptr, samples); - } else { - return bassboost_proc32(obj_ptr, (int32 **)out_ptr, (int32 **)in_ptr, samples); - } -} - -/*---------------------------------------------------------------------------- -// ** Get library memory requirements -// mem_req_ptr: [out] pointer to mem requirements structure -// static_vars_ptr: [in] pointer to static variable structure -----------------------------------------------------------------------------*/ -BASSBOOST_RESULT bassboost_get_mem_req(bassboost_mem_req_t *mem_req_ptr, bassboost_static_vars_t* static_vars_ptr) -{ - uint32 reqsize; - int32 data_width = static_vars_ptr->data_width; - int32 sample_rate = static_vars_ptr->sample_rate; - int32 max_block_size = static_vars_ptr->max_block_size; - int32 num_chs = static_vars_ptr->num_chs; - int32 limiter_delay_ms = static_vars_ptr->limiter_delay; - - msiir_static_vars_t msiir_static; - msiir_mem_req_t msiir_mem_req; - drc_static_struct_t drc_static; - drc_lib_mem_requirements_t drc_mem_req; - limiter_static_vars_t limiter_static; - limiter_mem_req_t limiter_mem_req; - - int32 direct_delay, bytes_per_sample, delay_samples, limiter_delay_q15_sec, ch; - - /* first, sanity check data width */ - if (16 == data_width) { - bytes_per_sample = 2; - } else if (32 == data_width) { - bytes_per_sample = 4; - } else { - return BASSBOOST_FAILURE; - } - - /* start with fixed structure */ - reqsize = smm_malloc_size(sizeof(bassboost_private_t)); - - /*------------------------ calculate limiter mems ------------------------*/ - clip_32(&limiter_delay_ms, 0, c_limiter_max_delay_ms); - limiter_delay_q15_sec = s32_mult_s16_s16((int16)limiter_delay_ms, 33); - - limiter_static.data_width = data_width; - limiter_static.sample_rate = sample_rate; - limiter_static.max_block_size = max_block_size; - limiter_static.num_chs = num_chs; - limiter_static.delay = limiter_delay_q15_sec; - - if (LIMITER_SUCCESS != limiter_get_mem_req(&limiter_mem_req, &limiter_static)) { - return BASSBOOST_FAILURE; - } - reqsize += smm_malloc_size(limiter_mem_req.mem_size); - - /*-------------------------- calculate drc mems --------------------------*/ - delay_samples = ms_to_sample(c_drc_delay_ms, sample_rate); - - drc_static.data_width = (16 == data_width)? BITS_16: BITS_32; - drc_static.sample_rate = sample_rate; - drc_static.num_channel = num_chs; - drc_static.delay = delay_samples; - - if ((int)MSIIR_SUCCESS != (int)drc_get_mem_req(&drc_mem_req, &drc_static)) { - return BASSBOOST_FAILURE; - } - reqsize += smm_malloc_size(drc_mem_req.lib_mem_size); - - /*------------------------- calculate delay line -------------------------*/ - direct_delay = ms_to_sample(c_drc_delay_ms, sample_rate); - reqsize += smm_calloc_size(num_chs, sizeof(delayline32_t)); - for (ch = 0; ch < num_chs; ++ch) { - reqsize += smm_calloc_size(direct_delay, sizeof(int32)); - } - - /*--------------------- calculate onoff/onset faders ---------------------*/ - reqsize += smm_calloc_size(num_chs, sizeof(pannerStruct)); - reqsize += smm_calloc_size(num_chs, sizeof(pannerStruct)); - - /*------------------------- calculate msiir mems -------------------------*/ - reqsize += smm_calloc_size(num_chs, sizeof (msiir_lib_t)); // bass - reqsize += smm_calloc_size(num_chs, sizeof (msiir_lib_t)); // band - - msiir_static.data_width = data_width; - msiir_static.max_stages = 1; - if (MSIIR_SUCCESS != msiir_get_mem_req(&msiir_mem_req, &msiir_static)) { - return BASSBOOST_FAILURE; - } - - for (ch = 0; ch < num_chs; ++ch) { - reqsize += smm_malloc_size(msiir_mem_req.mem_size); // bass - reqsize += smm_malloc_size(msiir_mem_req.mem_size); // band - } - - /*--------------------------- scratch buffers ----------------------------*/ - reqsize += smm_calloc_size(num_chs, sizeof (void *)); // bass scratch - reqsize += smm_calloc_size(num_chs, sizeof (void *)); // onset scratch - reqsize += smm_calloc_size(num_chs, sizeof (int32 *)); // mix buf - - for (ch = 0; ch < num_chs; ++ch) { - reqsize += smm_calloc_size(max_block_size, bytes_per_sample); // bass - reqsize += smm_calloc_size(max_block_size, bytes_per_sample); // onset - reqsize += smm_calloc_size(max_block_size, sizeof(int32)); // 32bit mix - } - - /*------------------------- store requirements ---------------------------*/ - mem_req_ptr->mem_size = reqsize; - mem_req_ptr->stack_size = c_bassboost_max_stack_size; - - return BASSBOOST_SUCCESS; -} - -/*---------------------------------------------------------------------------- -// ** Partition, initialize memory, and set default values -// lib_ptr: [in, out] pointer to library structure -// static_vars_ptr: [in] pointer to static variable structure -// mem_ptr: [in] pointer to allocated memory -// mem_size: [in] size of memory allocated -----------------------------------------------------------------------------*/ -BASSBOOST_RESULT bassboost_init_mem(bassboost_lib_t *lib_ptr, bassboost_static_vars_t* static_vars_ptr, void* mem_ptr, uint32 mem_size) -{ - SimpleMemMgr MemMgr; - SimpleMemMgr *smm = &MemMgr; - bassboost_mem_req_t mem_req; - bassboost_private_t *obj_ptr; - int32 num_chs = static_vars_ptr->num_chs; - int32 sample_rate = static_vars_ptr->sample_rate; - int32 data_width = static_vars_ptr->data_width; - int32 max_block_size = static_vars_ptr->max_block_size; - int32 limiter_delay_ms = static_vars_ptr->limiter_delay; - - msiir_static_vars_t msiir_static; - msiir_mem_req_t msiir_mem_req; - drc_static_struct_t drc_static; - drc_lib_mem_requirements_t drc_mem_req; - limiter_static_vars_t limiter_static; - limiter_mem_req_t limiter_mem_req; - - int32 bytes_per_sample, delay_samples, direct_delay, limiter_delay_q15_sec, ch; - - /* double check if allocated mem is enough */ - bassboost_get_mem_req(&mem_req, static_vars_ptr); - if (mem_req.mem_size > mem_size) { - return BASSBOOST_MEMERROR; - } - - /* sanity check data width */ - if (16 == data_width) { - bytes_per_sample = 2; - } else if (32 == data_width) { - bytes_per_sample = 4; - } else { - return BASSBOOST_FAILURE; - } - - /* assign initial mem pointers and allocate current instance */ - lib_ptr->mem_ptr = mem_ptr; - smm_init(smm, lib_ptr->mem_ptr); - obj_ptr = (bassboost_private_t *)smm_malloc(smm, sizeof(bassboost_private_t)); - - /* keep a copy of static vars */ - obj_ptr->static_vars = *static_vars_ptr; - - /*-------------------- alloc & config safeguard limiter ------------------*/ - clip_32(&limiter_delay_ms, 0, c_limiter_max_delay_ms); - limiter_delay_q15_sec = s32_mult_s16_s16((int16)limiter_delay_ms, 33); - - limiter_static.data_width = data_width; - limiter_static.sample_rate = sample_rate; - limiter_static.max_block_size = max_block_size; - limiter_static.num_chs = num_chs; - limiter_static.delay = limiter_delay_q15_sec; - - limiter_get_mem_req(&limiter_mem_req, &limiter_static); - mem_size = limiter_mem_req.mem_size; - mem_ptr = smm_malloc(smm, mem_size); - if (LIMITER_SUCCESS != limiter_init_mem( - &obj_ptr->limiter_lib, &limiter_static, mem_ptr, mem_size)) { - return BASSBOOST_FAILURE; - } - - /*------------------------- alloc & config drc --------------------------*/ - delay_samples = ms_to_sample(c_drc_delay_ms, sample_rate); - - drc_static.data_width = (16 == data_width)? BITS_16: BITS_32; - drc_static.sample_rate = sample_rate; - drc_static.num_channel = num_chs; - drc_static.delay = delay_samples; - - drc_get_mem_req(&drc_mem_req, &drc_static); - mem_size = drc_mem_req.lib_mem_size; - mem_ptr = smm_malloc(smm, mem_size); - if (DRC_SUCCESS != drc_init_memory( - &obj_ptr->drc_lib, &drc_static, mem_ptr, mem_size)) { - return BASSBOOST_FAILURE; - } - - /*------------------------- alloc direct delay --------------------------*/ - direct_delay = ms_to_sample(c_drc_delay_ms, sample_rate); - obj_ptr->delaylines = (delayline32_t *)smm_calloc(smm, num_chs, sizeof(delayline32_t)); - for (ch = 0; ch < num_chs; ++ch) { - obj_ptr->delaylines[ch].buf = (int32 *)smm_calloc( smm, direct_delay, sizeof(int32)); - obj_ptr->delaylines[ch].buf_size = direct_delay; - } - - /*----------------------- alloc onoff/onset fader ------------------------*/ - obj_ptr->onoff_fader = (pannerStruct *)smm_calloc(smm, num_chs, sizeof(pannerStruct)); - obj_ptr->onset_fader = (pannerStruct *)smm_calloc(smm, num_chs, sizeof(pannerStruct)); - - /*---------------------- alloc for msiir filter --------------------------*/ - obj_ptr->bass_fltrs = (msiir_lib_t *)smm_calloc(smm, num_chs, sizeof(msiir_lib_t)); - obj_ptr->band_fltrs = (msiir_lib_t *)smm_calloc(smm, num_chs, sizeof(msiir_lib_t)); - - msiir_static.data_width = data_width; - msiir_static.max_stages = BASSBOOST_IIR_STAGES; - msiir_get_mem_req(&msiir_mem_req, &msiir_static); - mem_size = msiir_mem_req.mem_size; - - for (ch = 0; ch < num_chs; ++ch) { - mem_ptr = smm_malloc(smm, mem_size); - if (MSIIR_SUCCESS != msiir_init_mem( - &obj_ptr->bass_fltrs[ch], &msiir_static, mem_ptr, mem_size)) { - return BASSBOOST_FAILURE; - } - - mem_ptr = smm_malloc(smm, mem_size); - if (MSIIR_SUCCESS != msiir_init_mem( - &obj_ptr->band_fltrs[ch], &msiir_static, mem_ptr, mem_size)) { - return BASSBOOST_FAILURE; - } - } - - /*--------------------------- alloc scratch buffers ----------------------*/ - obj_ptr->bass_buf = (void **)smm_calloc(smm, num_chs, sizeof(void *)); - obj_ptr->onset_buf = (void **)smm_calloc(smm, num_chs, sizeof(void *)); - obj_ptr->mix_buf = (int32 **)smm_calloc(smm, num_chs, sizeof(int32 *)); - - for (ch = 0; ch < num_chs; ++ch) { - obj_ptr->bass_buf[ch] = (void *)smm_calloc(smm, max_block_size, bytes_per_sample); - obj_ptr->onset_buf[ch] = (void *)smm_calloc(smm, max_block_size, bytes_per_sample); - obj_ptr->mix_buf[ch] = (int32 *)smm_calloc(smm, max_block_size, sizeof(int32)); - } - - /*--------------------------- set default values -------------------------*/ - return set_default(obj_ptr); -} - -/*---------------------------------------------------------------------------- -// ** Set parameters to library -// lib_ptr: [in, out] pointer to lib structure -// param_id: [in] parameter id -// param_ptr: [in] pointer to the memory where the new values are stored -// param_size:[in] size of the memory pointed by param_ptr -----------------------------------------------------------------------------*/ -BASSBOOST_RESULT bassboost_set_param(bassboost_lib_t* lib_ptr, uint32 param_id, void* mem_ptr, uint32 mem_size) -{ - bassboost_private_t *obj_ptr = (bassboost_private_t *)lib_ptr->mem_ptr; - bassboost_mode_t new_mode; - int16 strength, strength_q15; - int32 enable, ch; - - switch (param_id) { - - case BASSBOOST_PARAM_ENABLE: - if (mem_size == sizeof(bassboost_enable_t)) { - enable = *((bassboost_enable_t *)mem_ptr); - if (0 != enable) { enable = 1; } - if (obj_ptr->enable != enable) { - obj_ptr->enable = enable; - // handle onset panner and buf to ramp up input - if (1 == enable && 0 == obj_ptr->onoff_fader->sampleCounter) { - reset(obj_ptr); - for (ch = 0; ch < obj_ptr->static_vars.num_chs; ++ch) { - panner_setup(&obj_ptr->onset_fader[ch], 0, 0, 0); - panner_setup(&obj_ptr->onset_fader[ch], Q15_ONE, obj_ptr->onset_smps, 0); - } - } - // onoff crossfader: has reverse logic, 0: on, Q15_ONE: off - // this design is to accommodate inplace processing - strength_q15 = enable ? 0 : Q15_ONE; - for (ch = 0; ch < obj_ptr->static_vars.num_chs; ++ch) { - panner_setup(&obj_ptr->onoff_fader[ch], strength_q15, obj_ptr->ramp_smps, 0); - } - } - } else { - return BASSBOOST_MEMERROR; // parameter size doesn't match - } - break; - - case BASSBOOST_PARAM_MODE: - if (mem_size == sizeof(bassboost_mode_t)) { - new_mode = *((bassboost_mode_t *)mem_ptr); - - if (obj_ptr->mode != new_mode) { - // current bass boost supports only physical boost, thus it's - // hard coded here. when we add virtual boost later, the following - // lines should be changed. - April, 2013 - - //obj_ptr->mode = new_mode; - obj_ptr->mode = PHYSICAL_BOOST; - reset(obj_ptr); - } - } else { - return BASSBOOST_MEMERROR; // parameter size doesn't match - } - break; - - case BASSBOOST_PARAM_STRENGTH: - if (mem_size == sizeof(bassboost_strength_t)) { - strength = s16_saturate_s32(*((bassboost_strength_t *)mem_ptr)); - if (obj_ptr->strength != strength) { - obj_ptr->strength = strength; - // convert to Q15 value: gain * 32767 / 1000 - strength_q15 = s16_saturate_s32(Q23_mult(strength, 274869518)); - panner_setup(&obj_ptr->strenghth_fader, strength_q15, obj_ptr->ramp_smps, 0); - } - } else { - return BASSBOOST_MEMERROR; // parameter size doesn't match - } - break; - - case BASSBOOST_PARAM_RESET: - reset(obj_ptr); - break; - - default: - return BASSBOOST_FAILURE; // unidentified parma ID - } - - return BASSBOOST_SUCCESS; -} - - -/*---------------------------------------------------------------------------- -// ** Get parameters from library -// lib_ptr: [in] pointer to library structure -// param_id: [in] parameter id -// param_ptr: [out] pointer to the memory where the retrieved value is going to be stored -// param_size:[in] size of the memory pointed by param_ptr -// param_actual_size_ptr: [out] pointer to memory that will hold the actual size of the parameter -----------------------------------------------------------------------------*/ -BASSBOOST_RESULT bassboost_get_param(bassboost_lib_t* lib_ptr, uint32 param_id, void* mem_ptr, uint32 mem_size, uint32 *param_size_ptr) -{ - bassboost_private_t *obj_ptr = (bassboost_private_t *)lib_ptr->mem_ptr; - - switch (param_id) { - - case BASSBOOST_PARAM_LIB_VER: - // get library version - if (mem_size >= sizeof(bassboost_version_t)) { - *((bassboost_version_t *)mem_ptr) = BASSBOOST_LIB_VER; - *param_size_ptr = sizeof(bassboost_version_t); - } else { - return BASSBOOST_MEMERROR; - } - break; - - case BASSBOOST_PARAM_ENABLE: - if (mem_size >= sizeof(bassboost_enable_t)) { - *((bassboost_enable_t *)mem_ptr) = obj_ptr->enable; - *param_size_ptr = sizeof(bassboost_enable_t); - } else { - return BASSBOOST_MEMERROR; - } - break; - - case BASSBOOST_PARAM_MODE: - if (mem_size >= sizeof(bassboost_mode_t)) { - *((bassboost_mode_t *)mem_ptr) = obj_ptr->mode; - *param_size_ptr = sizeof(bassboost_mode_t); - } else { - return BASSBOOST_MEMERROR; - } - break; - - case BASSBOOST_PARAM_STRENGTH: - // get tuning parameters for certain channel - if (mem_size >= sizeof(bassboost_strength_t)) { - *((bassboost_strength_t *)mem_ptr) = obj_ptr->strength; - *param_size_ptr = sizeof(bassboost_strength_t); - } else { - return BASSBOOST_MEMERROR; - } - break; - - case BASSBOOST_PARAM_DELAY: - // algorithmic delay = drc + limiter delay, in samples - if (mem_size >= sizeof(bassboost_delay_t)) { - if (0 >= obj_ptr->onoff_fader->sampleCounter && - 0 == obj_ptr->enable) { // if disabled steady state, no delay - *((bassboost_delay_t *)mem_ptr) = 0; - } else { - *((bassboost_delay_t *)mem_ptr) = obj_ptr->delaylines[0].buf_size + - ms_to_sample((int16)obj_ptr->static_vars.limiter_delay, - obj_ptr->static_vars.sample_rate); - } - *param_size_ptr = sizeof(bassboost_delay_t); - } else { - return BASSBOOST_MEMERROR; - } - break; - - case BASSBOOST_PARAM_CROSSFADE_FLAG: - // if onoff fader still has samples left, then it's in transition - if (mem_size >= sizeof(bassboost_crossfade_t)) { - if (0 >= obj_ptr->onoff_fader->sampleCounter) { - *((bassboost_crossfade_t *)mem_ptr) = 0; - } else { - *((bassboost_crossfade_t *)mem_ptr) = 1; - } - *param_size_ptr = sizeof(bassboost_crossfade_t); - } else { - return BASSBOOST_MEMERROR; - } - break; - default: - return BASSBOOST_FAILURE; // invalid parameter id - } - - return BASSBOOST_SUCCESS; -} - - diff --git a/modules/processing/bassboost/lib/src/bassboost.h b/modules/processing/bassboost/lib/src/bassboost.h deleted file mode 100644 index 69639a4e..00000000 --- a/modules/processing/bassboost/lib/src/bassboost.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef BASSBOOST_H -#define BASSBOOST_H -/*============================================================================ - @file bassboost.h - - Private Header for Bass Boost Effect - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ -#include "bassboost_api.h" - -/*---------------------------------------------------------------------------- - Include Files -----------------------------------------------------------------------------*/ -#include "audio_dsp32.h" -#include "limiter_api.h" -#include "msiir_api.h" -#include "drc_api.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Constants -----------------------------------------------------------------------------*/ -#define BASSBOOST_IIR_STAGES (1) // only one stage iir -#define BASSBOOST_NUM_RATES (6) // sample rate count -static const int32 c_bassboost_max_stack_size = 800; // worst stack size (552) -static const int16 c_limiter_max_delay_ms = 20; // 20ms supports down to 25 Hz signal -static const int16 c_drc_delay_ms = 4; // 4ms constant drc delay -static const int16 c_fader_smooth_ms = 100; // panner smooth time (ms) -static const int16 c_onset_smooth_ms = 30; // onset panner smooth time (ms) -static const int32 c_bass_freq_hz = 200; // bass cutoff frequency -static const int32 c_band_freq_hz = 350; // band-pass center frequency -static const int32 c_iir_shift_factor = 2; // iir filter shift factor - -/*---------------------------------------------------------------------------- - Type Declarations -----------------------------------------------------------------------------*/ -/* sampling rates having pre-calculated params for */ -static const int32 bassboost_rates_const[BASSBOOST_NUM_RATES] = { - 22050, - 32000, - 44100, - 48000, - 96000, - 192000 -}; - -/* attack / release constant for the 4 frequencies (15ms) */ -static const int32 bassboost_atrt_const[BASSBOOST_NUM_RATES] = { - 111285605, - 77314964, - 56382981, - 51857647, - 26087276, - 13083493 -}; - -/* main data struct */ -typedef struct bassboost_private_t { // ** main private structure - - /* internal copy of static vars */ - bassboost_static_vars_t static_vars; - - /* internal copy of tuning vars */ - bassboost_enable_t enable; // on/off switch [0 or 1] - bassboost_mode_t mode; // (placeholder) - bassboost_strength_t strength; // effect strength [0, 1000] - - /* other internal vars */ - limiter_lib_t limiter_lib; // safeguard limiter instance - drc_lib_t drc_lib; // drc instance - msiir_lib_t *bass_fltrs; // low-pass filter array - msiir_lib_t *band_fltrs; // band-pass filter array - delayline32_t *delaylines; // direct delays to match drc - - int32 ramp_smps; // smooth panner ramp samples - int32 onset_smps; // smooth samples for onset fader - pannerStruct strenghth_fader; // fader for strength - pannerStruct *onoff_fader; // fader for enable/disable - pannerStruct *onset_fader; // fader for enable transition - - void **bass_buf; // buffer to hold bass content - void **onset_buf; // buffer to hold smoothed input samples - int32 **mix_buf; // buffer to hold samples before limiting - -} bassboost_private_t; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* BASSBOOST_H */ diff --git a/modules/processing/gain_control/drc/api/api_drc.h b/modules/processing/gain_control/drc/api/api_drc.h deleted file mode 100644 index 22e2a6a1..00000000 --- a/modules/processing/gain_control/drc/api/api_drc.h +++ /dev/null @@ -1,289 +0,0 @@ -#ifndef API_DRC_H -#define API_DRC_H -/*============================================================================== - @file drc_api.h - @brief This file contains DRC APIs -==============================================================================*/ -/*======================================================================= - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear -=========================================================================*/ - -/*============================================================================== - Include Files -==============================================================================*/ - -#include "module_cmn_api.h" -#include "imcl_spm_intent_api.h" - -/*============================================================================== - Constants -==============================================================================*/ - -/* Stack size of DRC module */ -#define DRC_STACK_SIZE 2048 - - -/*============================================================================== - Param ID -==============================================================================*/ - -#define PARAM_ID_DRC_CONFIG 0x0800113E -/** @h2xmlp_parameter {"PARAM_ID_DRC_CONFIG", PARAM_ID_DRC_CONFIG} - @h2xmlp_description {DRC config parameters.} - @h2xmlp_toolPolicy {Calibration; RTC} */ - -typedef struct param_id_drc_config_t param_id_drc_config_t; - -#include "spf_begin_pack.h" -struct param_id_drc_config_t -{ - uint16_t mode; - /**< @h2xmle_description {Enable/disables the DRC feature. In Bypass mode, only delay is applied.} - @h2xmle_rangeList {"Bypass";0, "Enable";1} - @h2xmle_default {1} - @h2xmle_policy {Basic}*/ - - uint16_t channel_linked_mode; - /**< @h2xmle_description {Specifies whether all channels have the same applied dynamics(Linked) - or if they process their dynamics independently(Unlinked).} - @h2xmle_rangeList {"CHANNEL_UNLINKED";0, "CHANNEL_LINKED";1} - @h2xmle_default {0} - @h2xmle_policy {Basic}*/ - - uint16_t rms_time_avg_const; - /**< @h2xmle_description {Time-averaging constant for computing energy} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q16} - @h2xmle_default {299} - @h2xmle_policy {Basic} */ - - uint16_t makeup_gain; - /**< @h2xmle_description {Makeup gain in dB applied after DRC.} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q12} - @h2xmle_default {4096} - @h2xmle_displayType {dbtextbox} - @h2xmle_policy {Basic} */ - - int16_t down_expdr_threshold; - /**< @h2xmle_description {Downward expander threshold in dB} - @h2xmle_range {-32768..32767} - @h2xmle_dataFormat {Q7} - @h2xmle_default {3239} - @h2xmle_policy {Basic} */ - - int16_t down_expdr_slope; - /**< @h2xmle_description {Downward expander slope.} - @h2xmle_range {-32768..32767} - @h2xmle_dataFormat {Q8} - @h2xmle_default {-383} - @h2xmle_policy {Basic} */ - - uint32_t down_expdr_attack; - /**< @h2xmle_description {Down expander attack constant.} - @h2xmle_range {0..2147483648} - @h2xmle_dataFormat {Q31} - @h2xmle_default {1604514739} - @h2xmle_policy {Basic} */ - - uint32_t down_expdr_release; - /**< @h2xmle_description {Down expander release constant.} - @h2xmle_range {0..2147483648} - @h2xmle_dataFormat {Q31} - @h2xmle_default {1604514739} - @h2xmle_policy {Basic} */ - - int32_t down_expdr_min_gain_db; - /**< @h2xmle_description {Downward expander minimum gain in dB.} - @h2xmle_range {-2147483648..2147483647} - @h2xmle_dataFormat {Q23} - @h2xmle_default {-50331648} - @h2xmle_policy {Basic} */ - - uint16_t down_expdr_hysteresis; - /**< @h2xmle_description {Down expander hysteresis constant.} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q14} - @h2xmle_default {16384} - @h2xmle_policy {Basic} */ - - int16_t up_cmpsr_threshold; - /**< @h2xmle_description {Upward compressor threshold.} - @h2xmle_range {-32768..32767} - @h2xmle_dataFormat {Q7} - @h2xmle_default {3239} - @h2xmle_policy {Basic} */ - - uint32_t up_cmpsr_attack; - /**< @h2xmle_description {Up compressor attack constant.} - @h2xmle_range {0..2147483648} - @h2xmle_dataFormat {Q31} - @h2xmle_default {5897467} - @h2xmle_policy {Basic} */ - - uint32_t up_cmpsr_release; - /**< @h2xmle_description {Up compressor release constant.} - @h2xmle_range {0..2147483648} - @h2xmle_dataFormat {Q31} - @h2xmle_default {5897467} - @h2xmle_policy {Basic} */ - - uint16_t up_cmpsr_slope; - /**< @h2xmle_description {Upward compression slope.} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q16} - @h2xmle_default {0} - @h2xmle_policy {Basic} */ - - uint16_t up_cmpsr_hysteresis; - /**< @h2xmle_description {Up compressor hysteresis constant.} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q14} - @h2xmle_default {18855} - @h2xmle_policy {Basic} */ - - int16_t down_cmpsr_threshold; - /**< @h2xmle_description {Downward compressor threshold.} - @h2xmle_range {-32768..32767} - @h2xmle_dataFormat {Q7} - @h2xmle_default {9063} - @h2xmle_policy {Basic} */ - - uint16_t down_cmpsr_slope; - /**< @h2xmle_description {Downward compression slope.} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q16} - @h2xmle_default {64879} - @h2xmle_policy {Basic} */ - - uint32_t down_cmpsr_attack; - /**< @h2xmle_description {Down compressor attack constant.} - @h2xmle_range {0..2147483648} - @h2xmle_dataFormat {Q31} - @h2xmle_default {1604514739} - @h2xmle_policy {Basic} */ - - uint32_t down_cmpsr_release; - /**< @h2xmle_description {Down compressor release constant.} - @h2xmle_range {0..2147483648} - @h2xmle_dataFormat {Q31} - @h2xmle_default {1604514739} - @h2xmle_policy {Basic} */ - - uint16_t down_cmpsr_hysteresis; - /**< @h2xmle_description {Down compressor hysteresis constant.} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q14} - @h2xmle_default {16384} - @h2xmle_policy {Basic} */ - - uint16_t down_sample_level; - /**< @h2xmle_description {DRC down sample level.} - @h2xmle_range {1..16} - @h2xmle_default {1} - @h2xmle_displayType {slider} - @h2xmle_policy {Basic} */ - - uint32_t delay_us; - /**< @h2xmle_description {DRC delay in microseconds.} - @h2xmle_range {0..100000} - @h2xmle_default {5000} - @h2xmle_policy {Basic} */ -} -#include "spf_end_pack.h" -; - -/*------------------------------------------------------------------------------ - Module -------------------------------------------------------------------------------*/ - -#define MODULE_ID_DRC 0x07001066 -/** - @h2xmlm_module {"MODULE_ID_DRC", MODULE_ID_DRC} - @h2xmlm_displayName {"Dynamic Range Control"} - @h2xmlm_modSearchKeys{drc, Audio, Voice} - @h2xmlm_description { - Dynamic Range Control Algorithm. - - This module supports the following parameter IDs:\n - - #PARAM_ID_MODULE_ENABLE\n - - #PARAM_ID_DRC_CONFIG\n - - Supported Input Media Format: \n - - Data Format : FIXED \n - - fmt_id : PCM \n - - Sample Rates : Don't care \n - - Number of channels : 1...32 \n - - Channel type : Don't care \n - - Bits per sample : 16, 32 \n - - Q format : Q15, Q27 \n - - Interleaving : De-interleaved unpacked \n - - Signed/unsigned : Signed \n} - @h2xmlm_dataMaxInputPorts {1} - @h2xmlm_dataMaxOutputPorts {1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC, APM_CONTAINER_TYPE_GC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {DRC_STACK_SIZE} - @h2xmlm_ctrlDynamicPortIntent { "DRC DOWN COMP threshold" = INTENT_ID_DRC_CONFIG, maxPorts= 1 } - @h2xmlm_toolPolicy { Calibration } - - @{ <-- Start of the Module --> - - @h2xml_Select {param_id_module_enable_t} - @h2xmlm_InsertParameter - - @h2xml_Select {param_id_drc_config_t} - @h2xmlm_InsertParameter - - @h2xml_Select {param_id_drc_config_t::rms_time_avg_const} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "598"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "299"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "1484"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "993"} - - @h2xml_Select {param_id_drc_config_t::down_expdr_attack} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "2010199605"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "1604514739"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "1067661045"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "789550996"} - - @h2xml_Select {param_id_drc_config_t::down_expdr_release} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "2010199605"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "1604514739"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "1067661045"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "789550996"} - - @h2xml_Select {param_id_drc_config_t::up_cmpsr_attack} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "5897467"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "5897467"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "2950761"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "1967625"} - - @h2xml_Select {param_id_drc_config_t::up_cmpsr_release} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "5897468"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "5897467"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "2950761"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "1967625"} - - @h2xml_Select {param_id_drc_config_t::down_cmpsr_attack} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "2010199605"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "1604514739"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "1067661045"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "789550996"} - - @h2xml_Select {param_id_drc_config_t::down_cmpsr_release} - - @h2xmle_defaultDependency { Samplerate = "8000", default = "2010199605"} - @h2xmle_defaultDependency { Samplerate = "16000", default = "1604514739"} - @h2xmle_defaultDependency { Samplerate = "32000", default = "1067661045"} - @h2xmle_defaultDependency { Samplerate = "48000", default = "789550996"} - -@} <-- End of the Module -->*/ - - - -#endif diff --git a/modules/processing/gain_control/drc/bin/arm/libdrc.a b/modules/processing/gain_control/drc/bin/arm/libdrc.a deleted file mode 100644 index 6d820bc48c4648ecec86325757c78bca30dc2171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177140 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 - -#include "AudioComdef.h" -#include "audpp_common.h" - -#ifndef __GNUC__ -#define __attribute__(arg) /* noop */ -#endif - - -static const int16 MAX_DELAY_SAMPLE = 1201; -static const uint16 ONE_OVER_TWENTY_UQ19 = 26214; -static const uint32 DRC_BLOCKSIZE = 80; /* native DRC frame size */ -static const int32 MIN_RMS_DB_L32Q23 = 0; -static const int16 MIN_RMS_DB_L16Q7 = -728; -static const int32 DB_16384_L32Q23 = 707051520; -static const int16 MAKEUPGAIN_UNITY = 4096; - - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ - -/** - @brief Data types used in the DRC library - */ -typedef enum -{ - DRC_DISABLED = 0, - DRC_ENABLED = 1 - -} DrcFeaturesType; - -typedef enum -{ - CHANNEL_NOT_LINKED = 0, - CHANNEL_LINKED = 1 - -} DrcStereoLinkedType; - -typedef enum -{ - NO_CHANGE = 0, - ATTACK = 1, - RELEASE = 2 - -} DrcStateType; - -/** - @brief Default values of tuning parameters and hardcoded parameters used in the algorithm - */ -typedef enum -{ - // Default parameters - NUM_CHANNEL_DEFAULT = 1, - STEREO_LINKED_DEFAULT = 1, - - MODE_DEFAULT = 1, - DOWNSAMPLE_LEVEL_DEFAULT = 1, - DELAY_DEFAULT = 800, - RMS_TAV_DEFAULT = 4, - MAKEUP_GAIN_DEFAULT = 4650, - - DN_EXPA_THRESHOLD_DEFAULT = 0, - DN_EXPA_SLOPE_DEFAULT = 1, - DN_EXPA_ATTACK_DEFAULT = 2, - DN_EXPA_RELEASE_DEFAULT = 3, - DN_EXPA_HYSTERISIS_DEFAULT = 10023, - DN_EXPA_MIN_GAIN_DEFAULT = 32767, - - UP_COMP_THRESHOLD_DEFAULT = 4, - UP_COMP_SLOPE_DEFAULT = 5, - UP_COMP_ATTACK_DEFAULT = 6, - UP_COMP_RELEASE_DEFAULT = 7, - UP_COMP_HYSTERISIS_DEFAULT = 10023, - - DN_COMP_THRESHOLD_DEFAULT = 8, - DN_COMP_SLOPE_DEFAULT = 9, - DN_COMP_ATTACK_DEFAULT = 10, - DN_COMP_RELEASE_DEFAULT = 11, - DN_COMP_HYSTERISIS_DEFAULT = 10023 - -} DrcParamsDefault; - - - - -/*---------------------------------------------------------------------------- - * Type Declarations for overall configuration and state data structures - * -------------------------------------------------------------------------*/ -/** - @brief DRC configuration parameter structure containing tuning parameters - this structure is used with the Initialize/ReInitial functions, it is part of the - library interface, the structure is used by external caller to this library. - */ - -typedef struct _DrcConfig -{ - // DrcMiscCfg - int16 numChannel; // Q0 Number of channels - Internally set value - int16 stereoLinked; // Q0 stereo mode -- Linked or Not-Linked - - int16 mode; // Q0 DRC mode code - DRC_DISABLED or DRC_ENABLED - int16 downSampleLevel; // Q0 Down Sample Level to save MIPS - int16 delay; // Q0 Delay in samples - uint16 rmsTavUL16Q16; // Q16 Time Constant used to compute Input RMS - uint16 makeupGainUL16Q12; // Q12 Makeup Gain Value - [258, 64918] absolute - - // DrcStaticCurveCfg - int16 dnExpaThresholdL16Q7; - int16 dnExpaSlopeL16Q8; - uint32 dnExpaAttackUL32Q31; - uint32 dnExpaReleaseUL32Q31; - uint16 dnExpaHysterisisUL16Q14; - int32 dnExpaMinGainDBL32Q23; - - int16 upCompThresholdL16Q7; - uint16 upCompSlopeUL16Q16; - uint32 upCompAttackUL32Q31; - uint32 upCompReleaseUL32Q31; - uint16 upCompHysterisisUL16Q14; - - int16 dnCompThresholdL16Q7; - uint16 dnCompSlopeUL16Q16; - uint32 dnCompAttackUL32Q31; - uint32 dnCompReleaseUL32Q31; - uint16 dnCompHysterisisUL16Q14; - -} DrcConfig; - -/** - @brief DRC configuration parameter structure containing tuning parameters - this structure is used with the ASM optimized code, for - library internal use. - */ -typedef struct _DrcConfigInternal -{ - // Don't change the order of the fields above the line which are used in ASM - uint16 rmsTavUL16Q16; // Q16 Time Constant used to compute Input RMS - uint16 negativeDrcTavUL16Q16; // for unsigned Q16, (1-TAV) equals to -TAV - uint16 makeupGainUL16Q12; // Q12 Makeup Gain Value - [258, 64918] absolute - int16 delay; // Q0 Delay in samples - int32 downSampleLevel; // Q0 Down Sample Level to save MIPS - - int32 dnCompThresholdL16Q7; - int32 dnCompThrMultSlopeL32Q23; - uint32 dnCompSlopeUL16Q16; - - int32 dnExpaSlopeL16Q8; - int32 dnExpaThresholdL16Q7; - int32 dnExpaNewTargetGainL32Q23; - int32 dnExpaMinGainDBL32Q23; - - int32 upCompThrMultSlopeL32Q23; - uint32 upCompSlopeUL16Q16; - int32 upCompThresholdL16Q7; -#if ((defined __hexagon__) || (defined __qdsp6__)) - int32 stereoLinked; -#else - DrcStereoLinkedType stereoLinked; // Q0 stereo mode -- Linked or Not-Linked -#endif - uint32 dnCompHysterisisUL16Q14Asl1; - int32 outDnCompThresholdL16Q7; - uint32 dnCompAttackUL32Q31; - uint32 dnCompReleaseUL32Q31; - - uint32 dnExpaHysterisisUL16Q14Asl1; - int32 outDnExpaThresholdL16Q7; - uint32 dnExpaAttackUL32Q31; - uint32 dnExpaReleaseUL32Q31; - - uint32 upCompHysterisisUL16Q14Asl1; - int32 outUpCompThresholdL16Q7; - uint32 upCompAttackUL32Q31; - uint32 upCompReleaseUL32Q31; - //------------------------------ - - int16 numChannel; // Q0 Number of channels - Internally set value - - DrcFeaturesType mode; // Q0 DRC mode code - DRC_DISABLED or DRC_ENABLED - - uint32 dnCompHysterisisUL16Q14; - uint32 dnExpaHysterisisUL16Q14; - uint32 upCompHysterisisUL16Q14; - -} DrcConfigInternal; - - -/** - @brief DRC processing data structure - */ -typedef struct _DrcData -{ - // Don't change the order of the fields which are used in ASM - int32 *paGainL32Q15[2]; - int16 *pDelayBufferLeftL16; - int16 *pDelayBufferRightL16; - int32 rmsStateL32[2]; - int32 *pRmsStateL32; - int32 downSampleCounter; -#if ((defined __hexagon__) || (defined __qdsp6__)) - uint32 currState[2]; -#else - DrcStateType currState[2]; -#endif - int32 gainL32Q15[2]; - uint32 timeConstantUL32Q31[2]; - int32 dwcomp_state_change[2]; - int32 uwcomp_state_change[2]; -} DrcData; - -/*---------------------------------------------------------------------------- - * Type Declarations for overall configuration and state data structures - * -------------------------------------------------------------------------*/ - -class CDrcLib { -private: - - /*---------------------------------------------------------------------------- - * Constants Definition - * -------------------------------------------------------------------------*/ - static const int16 MAX_INT16_DB_Q7 = 11559; - static const int32 ONE_Q23 = 8388608; - static const uint16 HALF_UL16_Q16 = 32768; - -private: - DrcConfigInternal m_drcCfgInt __attribute__ ((aligned (8))); - DrcData m_drcData __attribute__ ((aligned (8))); - - int32 m_aGainL32Q15[2][DRC_BLOCKSIZE] __attribute__ ((aligned (8))); - int32 m_aRmsStateL32[2*DRC_BLOCKSIZE] __attribute__ ((aligned (8))); - int16 m_delayBufferLeftL16[MAX_DELAY_SAMPLE+DRC_BLOCKSIZE] __attribute__ ((aligned (8))); - int16 m_delayBufferRightL16[MAX_DELAY_SAMPLE+DRC_BLOCKSIZE] __attribute__ ((aligned (8))); - - void (*fnpProcess)(DrcConfigInternal *pDrcCfgInt, DrcData *pDrcData, - int16 *pOutPtrL16, int16 *pOutPtrR16, - int16 *pInPtrL16, int16 *pInPtrR16, - uint32 nSampleCnt); - -public: - CDrcLib(); - - /** - @brief Process input audio data with DRC algorithm - - @param pInPtrL16: [in] Pointer to 16-bit Q15 input channel data - @param pInPtrR16: [in] Pointer to 16-bit Q15 input channel data - @param pOutPtrL16: [out] Pointer to 16-bit Q15 output channel data - @param pOutPtrR16: [out] Pointer to 16-bit Q15 output channel data - */ - void Process(int16 *pOutPtrL16, - int16 *pOutPtrR16, - int16 *pInPtrL16, - int16 *pInPtrR16, - uint32 nSampleCnt=DRC_BLOCKSIZE); - - /** - @brief Initialize DRC algorithm - - Performs initialization of data structures for the - DRC algorithm. Two pointers to two memory is passed for - configuring the DRC static configuration - structure. - - */ - PPStatus Initialize(DrcConfig &cfg); - - PPStatus ReInitialize(DrcConfig &cfg); - - void Reset(); -}; - - -#endif /* #ifndef DRCLIB_H */ diff --git a/modules/processing/gain_control/drc/inc/capi_drc.h b/modules/processing/gain_control/drc/inc/capi_drc.h deleted file mode 100644 index 09e4231c..00000000 --- a/modules/processing/gain_control/drc/inc/capi_drc.h +++ /dev/null @@ -1,37 +0,0 @@ -/** -@file capi_drc.h - -@brief CAPI V2 API wrapper for drc algorithm - -*/ - -/*----------------------------------------------------------------------- -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear ------------------------------------------------------------------------*/ - -#ifndef CAPI_DRC -#define CAPI_DRC - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -/*---------------------------------------------------------------------------- - * Include Files - * -------------------------------------------------------------------------*/ -#include "capi.h" - -/*---------------------------------------------------------------------------- - * Function Declarations - * -------------------------------------------------------------------------*/ - -capi_err_t capi_drc_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); - -capi_err_t capi_drc_init(capi_t *_pif, capi_proplist_t *init_set_properties); - -#ifdef __cplusplus -} -#endif //__cplusplus -#endif // CAPI_DRC diff --git a/modules/processing/gain_control/drc/inc/capi_drc_utils.h b/modules/processing/gain_control/drc/inc/capi_drc_utils.h deleted file mode 100644 index 752dd353..00000000 --- a/modules/processing/gain_control/drc/inc/capi_drc_utils.h +++ /dev/null @@ -1,77 +0,0 @@ -/** -@file capi_drc_utils.h - -@brief CAPI V2 utility header for DRC module. - -*/ - -/*----------------------------------------------------------------------- -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear ------------------------------------------------------------------------*/ - -#include "api_drc.h" -#include "capi_cmn.h" -#include "capi_cmn_ctrl_port_list.h" -#include "capi_drc.h" -#include "drc_api.h" //lib interface -#include "imcl_drc_info_api.h" - -/*------------------------------------------------------------------------------ - * Defines - *-----------------------------------------------------------------------------*/ - -#define MIID_UNKNOWN 0 - -#define DRC_MSG_PREFIX "DRC:[%lX] " -#define DRC_MSG(ID, xx_ss_mask, xx_fmt, ...) AR_MSG(xx_ss_mask, DRC_MSG_PREFIX xx_fmt, ID, ##__VA_ARGS__) - -#define CHECK_THROW_ERROR(ID, result, error_msg, ...) \ - { \ - if (CAPI_FAILED(result)) \ - { \ - DRC_MSG(ID, DBG_ERROR_PRIO, error_msg, ##__VA_ARGS__); \ - return result; \ - } \ - } - -/* KPPS values */ -#define DRC_NB_KPPS (500) // 0.5 mpps in kpps for nb -#define DRC_WB_KPPS (800) // 0.8 mpps in kpps for wb -#define DRC_SWB_KPPS (2000) // 2 mpps in kpps for swb - approx -#define DRC_FB_KPPS (2730) // 2.71 mpps in kpps for fb - approx. - -/*------------------------------------------------------------------------------ - * Type Definition - *-----------------------------------------------------------------------------*/ - -typedef struct capi_drc_t -{ - capi_vtbl_t * vtbl; - capi_event_callback_info_t cb_info; - POSAL_HEAP_ID heap_id; - - drc_lib_t lib_handle; // Library instance - drc_static_struct_t lib_static_cfg; // static parameters structure - drc_config_t lib_cfg; // Configuration structure - drc_feature_mode_t mode; // operation mode - drc_lib_mem_requirements_t mem_req; // memory requirements structure - int16_t b_enable; // enable/disable lib - uint32_t delay_us; // drc delay in microseconds. - uint32_t miid; // Module Instance ID - - ctrl_port_list_handle_t ctrl_port_info; - - capi_media_fmt_v2_t input_media_fmt; -} capi_drc_t; - -/*------------------------------------------------------------------------------ - * Function Declarations - *-----------------------------------------------------------------------------*/ -void drc_lib_set_default_config(capi_drc_t *me_ptr); -capi_err_t drc_lib_set_calib(capi_drc_t *me_ptr); -capi_err_t drc_lib_alloc_init(capi_drc_t *me_ptr); - -capi_err_t drc_lib_send_config_imcl(capi_drc_t *me_ptr); - -void raise_kpps_delay_process_events(capi_drc_t *me_ptr); diff --git a/modules/processing/gain_control/drc/inc/drc_api.h b/modules/processing/gain_control/drc/inc/drc_api.h deleted file mode 100644 index 42194a0f..00000000 --- a/modules/processing/gain_control/drc/inc/drc_api.h +++ /dev/null @@ -1,126 +0,0 @@ -#ifndef DRCAPI_H -#define DRCAPI_H -/*============================================================================ - @file CDrcApi.h - - Public api for DRC. - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ - -/*---------------------------------------------------------------------------- - * Include Files - * -------------------------------------------------------------------------*/ - -#include "drc_calib_api.h" - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ - - -typedef enum DRC_RESULT -{ - DRC_SUCCESS = 0, - DRC_FAILURE, - DRC_MEMERROR -}DRC_RESULT; - -typedef enum data_width_type -{ - BITS_16 = 0, // 16-bits sample - BITS_32 // 32-bits sample -} data_width_type; - - -//DRC static params structure -typedef struct drc_static_struct_t -{ - - data_width_type data_width; // 0(16-bits sample) or 1(32-bits sample) - uint32_t sample_rate; // Hz - uint32_t num_channel; // Q0 Number of channels - uint32_t delay; // Q0 Delay in samples per channel - -} drc_static_struct_t; - - - - - -// DRC lib structure -typedef struct drc_lib_t -{ - - void* lib_mem_ptr; // ptr to the total chunk of lib mem - -} drc_lib_t; - - - -// DRC lib mem requirements structure -typedef struct drc_lib_mem_requirements_t -{ - - uint32_t lib_mem_size; // size of the lib mem pointed by lib_mem_ptr - uint32_t lib_stack_size; // stack mem size -} drc_lib_mem_requirements_t; - - -/*---------------------------------------------------------------------------- - * Function Declarations and Documentation - * -------------------------------------------------------------------------*/ - -// DRC processing of de-interleaved multi-channel input audio signal sample by sample -// drc_lib_ptr: [in] Pointer to lib structure -// out_ptr: [out] Pointer to de-interleaved multi - channel output PCM samples -// in_ptr: [in] Pointer to de-interleaved multi - channel input PCM samples -// sample_per_channel: [in] Number of samples to be processed per channel -DRC_RESULT drc_process(drc_lib_t *drc_lib_ptr, int8_t **out_ptr, int8_t **in_ptr, uint32_t sample_per_channel); - - -// get DRC lib mem size -// drc_lib_mem_requirements_ptr: [out] Pointer to lib mem requirements structure -// static_struct_ptr: [in] Pointer to static structure -DRC_RESULT drc_get_mem_req(drc_lib_mem_requirements_t *drc_lib_mem_requirements_ptr, drc_static_struct_t* drc_static_struct_ptr); - -// partition and init the mem with params -// drc_lib_ptr: [in, out] Pointer to lib structure -// static_struct_ptr: [in] Pointer to static structure -// mem_ptr: [in] Pointer to the lib memory -// mem_size: [in] Size of the memory pointed by mem_ptr -DRC_RESULT drc_init_memory(drc_lib_t *drc_lib_ptr, drc_static_struct_t *drc_static_struct_ptr, int8_t *mem_ptr, uint32_t mem_size); - -// set the params in the lib mem with those pointed by mem_ptr -// drc_lib_ptr: [in, out] Pointer to lib structure -// param_id: [in] ID of the param -// mem_ptr: [in] Pointer to the memory where the values stored are used to set up the params in the lib memory -// mem_size:[in] Size of the memory pointed by mem_ptr -DRC_RESULT drc_set_param(drc_lib_t *drc_lib_ptr, uint32_t param_id, int8_t *mem_ptr, uint32_t mem_size); - -// retrieve params from lib mem -// drc_lib_ptr: [in] Pointer to lib structure -// param_id: [in] ID of the param -// mem_ptr: [out] Pointer to the memory where params are to be stored -// mem_size:[in] Size of the memory pointed by mem_ptr -// param_size_ptr: [out] Pointer to param size which indicates the size of the retrieved param(s) -DRC_RESULT drc_get_param(drc_lib_t *drc_lib_ptr, uint32_t param_id, int8_t *mem_ptr, uint32_t mem_size, uint32_t *param_size_ptr); - - - - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef DRCAPI_H */ diff --git a/modules/processing/gain_control/drc/inc/drc_calib_api.h b/modules/processing/gain_control/drc/inc/drc_calib_api.h deleted file mode 100644 index 051b5350..00000000 --- a/modules/processing/gain_control/drc/inc/drc_calib_api.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef DRC_CALIB_API_H -#define DRC_CALIB_API_H -/*============================================================================ - @file CDrcCalibApi.h - - Public api for DRC. - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ -/*============================================================================ - - $Header: //components/rel/audioreach_spm_pp.cmn/0.0/gain_control/drc/lib/inc/drc_calib_api.h#1 $ - - when who what, where, why - ---------- ------- --------------------------------------------------------- - 2012-11-12 juihuaj Initial revision. - 2012-11-28 juihuaj Added param IDs and corresponding structures -============================================================================*/ - -/*---------------------------------------------------------------------------- - * Include Files - * -------------------------------------------------------------------------*/ - - -#include "ar_defs.h" - - - - - - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - - - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ -// param ID and the corresponding payload for lib version -#define DRC_PARAM_GET_LIB_VER (0) // read only -typedef int64_t drc_lib_ver_t; // lib version(major.minor.bug); (8bits.16bits.8bits) - - - - -typedef enum drc_mode_t -{ - DRC_BYPASSED = 0, // DRC processing bypassed; no DRC processing and only delay is implemented - DRC_ENABLED // DRC processing enabled; normal DRC processing - -} drc_mode_t; - -// param ID and the corresponding payload for DRC feature mode -#define DRC_PARAM_FEATURE_MODE (1) // read/write -typedef drc_mode_t drc_feature_mode_t; // 1 is with DRC processing; 0 is no DRC processing(bypassed, only delay is implemented) - - - -typedef enum drc_channel_linking_t -{ - CHANNEL_NOT_LINKED = 0, - CHANNEL_LINKED - -} drc_channel_linking_t; - -// param ID and the corresponding payload for DRC processing -#define DRC_PARAM_CONFIG (2) // read/write -typedef struct drc_config_t -{ - - // below two should not change during Reinit - int16_t channelLinked; // Q0 channel mode -- Linked(1) or Not-Linked(0) - int16_t downSampleLevel; // Q0 Down Sample Level to save MIPS - - - uint16_t rmsTavUL16Q16; // Q16 Time Constant used to compute Input RMS - uint16_t makeupGainUL16Q12; // Q12 Makeup Gain Value - - - int16_t dnExpaThresholdL16Q7; - int16_t dnExpaSlopeL16Q8; - uint32_t dnExpaAttackUL32Q31; - uint32_t dnExpaReleaseUL32Q31; - int32_t dnExpaMinGainDBL32Q23; - uint16_t dnExpaHysterisisUL16Q14; - - int16_t upCompThresholdL16Q7; - uint32_t upCompAttackUL32Q31; - uint32_t upCompReleaseUL32Q31; - uint16_t upCompSlopeUL16Q16; - uint16_t upCompHysterisisUL16Q14; - - int16_t dnCompThresholdL16Q7; - uint16_t dnCompSlopeUL16Q16; - uint32_t dnCompAttackUL32Q31; - uint32_t dnCompReleaseUL32Q31; - uint16_t dnCompHysterisisUL16Q14; - - - - int16_t dummy; // avoid memory hole - -} drc_config_t; - - -// param ID for reset(to flush memory) -// no payload needed for this ID -#define DRC_PARAM_SET_RESET (3) // write only - - - -// param ID and the corresponding payload for delay(in samples) -#define DRC_PARAM_GET_DELAY (4) // read only -typedef uint32_t drc_delay_t; // Q0 Delay in samples per channel - - - - - - - - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef DRC_CALIB_API_H */ diff --git a/modules/processing/gain_control/drc/inc/drc_lib.h b/modules/processing/gain_control/drc/inc/drc_lib.h deleted file mode 100644 index acd684db..00000000 --- a/modules/processing/gain_control/drc/inc/drc_lib.h +++ /dev/null @@ -1,191 +0,0 @@ -#ifndef DRCLIB_H -#define DRCLIB_H -/*============================================================================ - @file CDrcLib.h - - Public header file for the Limiter algorithm. - - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -============================================================================*/ - -/*---------------------------------------------------------------------------- - * Include Files - * -------------------------------------------------------------------------*/ - - -#include "drc_api.h" - -#if ((defined __hexagon__) || (defined __qdsp6__)) -#define QDSP6_DRCLIB_ASM 1 -#elif (defined __XTENSA__) -#define DRCLIB_OPT 1 -#else -#define DRCLIB_ORIGINAL 1 -#endif - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#define DRC_LIB_VER 0X020A020102000000 // 2.10/2.1.2 external(major).external(minor)/major.minor.revision - -static const uint32_t drc_max_stack_size = 2048; -// worst case stack mem consumption in bytes; -// this number is obtained offline via stack profiling -// stack mem consumption should be no bigger than this number - -/*---------------------------------------------------------------------------- -* Constants Definition -* -------------------------------------------------------------------------*/ -#define ONE 1 -#define TWO 2 -//#define THREE 3 -#define MINUS_ONE -1 -#define MINUS_TWO -2 -#define MINUS_THREE -3 -#define MINUS_FOUR -4 -#define MINUS_FIVE -5 -#define ONE_BY_3_Q15 10923 -#define ONE_BY_5_Q15 6554 -#define ONE_BY_6_Q15 5461 -#define ONE_BY_7_Q15 4681 -#define Q15 15 // Q factor for Q15 -#define Q27 27 // Q factor for Q27 -#define MINUS_FIFTEEN -Q15 -#define ALIGN8(o) (((o)+7)&(~7)) - - - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ -// internal use only -typedef enum DrcStateType -{ - NO_CHANGE = 0, - ATTACK = 1, - RELEASE = 2 - -} DrcStateType; - - -// internal use only -typedef enum DrcConstants -{ - - ONE_OVER_TWENTY_UQ19 = 26214, - MIN_RMS_DB_L32Q23 = 0, - MIN_RMS_DB_L16Q7 = -728, - DB_16384_L32Q23 = 707051520, - MAKEUPGAIN_UNITY = 4096, -#ifdef PROD_SPECIFIC_MAX_CH - MAX_NUM_CHANNEL = 128 -#else - MAX_NUM_CHANNEL = 32 -#endif - -} DrcConstants; - -// Ying -typedef enum DrcProcessMode -{ - ProcessMultiChan16Linked = 0, - ProcessMultiChan16Unlinked = 1, - ProcessMultiChan32Linked = 2, - ProcessMultiChan32Unlinked = 3, - ProcessOneChan16 = 4, - ProcessOneChan32 = 5, - ProcessBypass16 = 6, - ProcessBypass32 = 7 -} DrcProcessMode; - - -// Default calibration parameters; internal use only -typedef enum DrcParamsDefault -{ - - MODE_DEFAULT = 0x0, // 1 is with DRC processing; 0 is no DRC processing(bypassed, only delay is implemented) - - CHANNEL_LINKED_DEFAULT = 0x0, - DOWNSAMPLE_LEVEL_DEFAULT = 0x1, - - RMS_TAV_DEFAULT = 0x0B78, - MAKEUP_GAIN_DEFAULT = 0x1000, - - DN_EXPA_THRESHOLD_DEFAULT = 0x0A28, - DN_EXPA_SLOPE_DEFAULT = 0xFF9A, - DN_EXPA_ATTACK_DEFAULT = 0x00B3BAB3, - DN_EXPA_RELEASE_DEFAULT = 0x01BF7A00, - DN_EXPA_HYSTERISIS_DEFAULT = 0x49A7, - DN_EXPA_MIN_GAIN_DEFAULT = 0xFD000000, - - UP_COMP_THRESHOLD_DEFAULT = 0x0A28, - UP_COMP_SLOPE_DEFAULT = 0x0, - UP_COMP_ATTACK_DEFAULT = 0x0059FCFC, - UP_COMP_RELEASE_DEFAULT = 0x0059FCFC, - UP_COMP_HYSTERISIS_DEFAULT = 0x49A7, - - DN_COMP_THRESHOLD_DEFAULT = 0x1BA8, - DN_COMP_SLOPE_DEFAULT = 0xF333, - DN_COMP_ATTACK_DEFAULT = 0x06D9931E, - DN_COMP_RELEASE_DEFAULT = 0x00120478, - DN_COMP_HYSTERISIS_DEFAULT = 0x49A7 - -} DrcParamsDefault; - - - -//DRC state params structure -typedef struct drc_state_struct_t -{ - - int8_t** delayBuffer; // dynamic mem allocation for int8_t* delayBuffer[ch_num]; Delay buffer used to save the channel-delayed samples - int32_t* rmsStateL32; // dynamic mem allocation for int32_t rmsStateL32[ch_num]; Current sample index - int32_t* drcRmsDBL32Q23; // dynamic mem allocation for int32_t drcRmsDBL32Q23[ch_num]; - uint32_t* targetGainUL32Q15; // dynamic mem allocation for uint32_t targetGainUL32Q15[ch_num]; - uint32_t* gainUL32Q15; // dynamic mem allocation for uint32_t gainUL32Q15[ch_num]; - DrcStateType* currState; // dynamic mem allocation for DrcStateType currState[ch_num]; - uint32_t* timeConstantUL32Q31; // dynamic mem allocation for uint32_t timeConstantUL32Q31[ch_num]; - int32_t* dwcomp_state_change; // dynamic mem allocation for int32_t* dwcomp_state_change[ch_num] - int32_t* uwcomp_state_change; // dynamic mem allocation for int32_t* uwcomp_state_change[ch_num] - int32_t* dnexpa_state_change; // dynamic mem allocation for int32_t* dnexpa_state_change[ch_num] - uint64_t* instGainUL64Q27; // dynamic mem allocation for uint64_t instGainUL64Q27[ch_num]; - - uint32_t inputIndex; // Current input data index in the delay buffer - uint32_t processIndex; // Current process data index in the delay buffer - uint32_t drcProcessMode; // drc mode for different types of process() Ying - - - int16_t downSampleCounter; - - int16_t outDnCompThresholdL16Q7; - int16_t outDnExpaThresholdL16Q7; - int16_t outUpCompThresholdL16Q7; - -} drc_state_struct_t; - - -// DRC lib mem structure -typedef struct drc_lib_mem_t -{ - drc_static_struct_t* drc_static_struct_ptr; // ptr to the static struct in mem - int32_t drc_static_struct_size; // size of the allocated mem pointed by the static struct - drc_feature_mode_t* drc_feature_mode_ptr; - int32_t drc_feature_mode_size; - drc_config_t* drc_config_ptr; - int32_t drc_config_size; - drc_state_struct_t* drc_state_struct_ptr; // ptr to the state struct in lib mem - int32_t drc_state_struct_size; // size of the allocated mem pointed by the state struct - -} drc_lib_mem_t; - - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* #ifndef DRCLIB_H */ diff --git a/modules/processing/gain_control/iir_mbdrc/api/mbdrc_api.h b/modules/processing/gain_control/iir_mbdrc/api/mbdrc_api.h deleted file mode 100644 index 77982515..00000000 --- a/modules/processing/gain_control/iir_mbdrc/api/mbdrc_api.h +++ /dev/null @@ -1,754 +0,0 @@ -#ifndef MBDRC_API_H -#define MBDRC_API_H -/*============================================================================== - @file mbdrc_api.h - @brief This file contains MBDRC parameters -==============================================================================*/ - -/*======================================================================= -* Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -* SPDX-License-Identifier: BSD-3-Clause-Clear -=========================================================================*/ -/*======================================================================== - Edit History - - when who what, where, why - -------- --- ------------------------------------------------------- - 10/10/18 akr Created File . - ========================================================================== */ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#include "module_cmn_api.h" - -/** - @h2xml_title1 {Multiband Dynamic Range Control (MBDRC) API} - @h2xml_title_agile_rev {Multiband Dynamic Range Control (MBDRC) API} - @h2xml_title_date {October 10, 2018} - */ -/** - @h2xmlx_xmlNumberFormat {int} -*/ - -/*============================================================================== - Constants -==============================================================================*/ -#define CAPI_IIR_MBDRC_MAX_PORT 1 - -#define CAPI_IIR_MBDRC_STACK_SIZE 4096 - -#define IIR_MAX_COEFFS_PER_BAND 10 - -#define IIR_MBDRC_MAX_BANDS 10 - -#define MODULE_ID_IIR_MBDRC 0x07001017 - -#ifdef PROD_SPECIFIC_MAX_CH -#define CAPI_IIR_MBDRC_MAX_CHANNELS 128 -#else -#define CAPI_IIR_MBDRC_MAX_CHANNELS 32 -#endif - -/** - @h2xmlm_module {"MODULE_ID_IIR_MBDRC", - MODULE_ID_IIR_MBDRC} - @h2xmlm_displayName {"IIR MBDRC"} - @h2xmlm_modSearchKeys{drc, Audio} - @h2xmlm_toolPolicy {Calibration} - @h2xmlm_description {Multiband Dynamic Range Control Module \n - - - This module supports the following parameter IDs: \n - - #PARAM_ID_IIR_MBDRC_CONFIG_PARAMS \n - - #PARAM_ID_IIR_MBDRC_FILTER_XOVER_FREQS \n - - #PARAM_ID_MODULE_ENABLE \n - -* Supported Input Media Format: \n -* - Data Format : FIXED_POINT \n -* - fmt_id : Don't care \n -* - Sample Rates : Any \n -* - Number of channels : 1 to 128 (for certain products this module supports only 32 channels) \n -* - Channel type : 1 to 128 \n -* - Bits per sample : 16, 32 \n -* - Q format : 15, 27 \n -* - Interleaving : de-interleaved unpacked \n -* - Signed/unsigned : Signed } - - @h2xmlm_dataMaxInputPorts {CAPI_IIR_MBDRC_MAX_PORT} - @h2xmlm_dataInputPorts {IN=2} - @h2xmlm_dataMaxOutputPorts {CAPI_IIR_MBDRC_MAX_PORT} - @h2xmlm_dataOutputPorts {OUT=1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC, APM_CONTAINER_TYPE_GC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {CAPI_IIR_MBDRC_STACK_SIZE} - @h2xmlm_ToolPolicy {Calibration} - @{ <-- Start of the Module --> -*/ - -/* ID of the MBDRC Configuration parameter used by MODULE_ID_IIR_MBDRC.*/ -#define PARAM_ID_IIR_MBDRC_CONFIG_PARAMS 0x08001028 - -#include "spf_begin_pack.h" -/** @h2xmlp_subStruct */ -struct subband_drc_config_params_t -{ - - int16_t drc_mode; - /**< @h2xmle_description {Specifies whether DRC mode is bypassed for subbands.} - @h2xmle_rangeList {"Disable"=0; "Enable"=1} - @h2xmle_default {1} */ - - int16_t drc_linked_flag; - /**< @h2xmle_description {Specifies whether all stereo channels have the same applied dynamics - or if they process their dynamics independently.} - @h2xmle_rangeList {"Not linked,channels process the dynamics independently" = 0; - "Linked,channels have the same applied dynamics" = 1} - @h2xmle_default {1} */ - - int16_t drc_down_sample_level; - /**< @h2xmle_description {DRC down sample level.} - @h2xmle_default {1} - @h2xmle_range {1..16}*/ - - uint16_t drc_rms_time_avg_const; - /**< @h2xmle_description {RMS signal energy time-averaging constant.} - @h2xmle_default {298} - @h2xmle_range {0..65535} - @h2xmle_dataFormat {Q16} */ - - uint16_t drc_makeup_gain; - /**< @h2xmle_description {DRC makeup gain in decibels.} - @h2xmle_default {4096} - @h2xmle_range {258..64917} - @h2xmle_dataFormat {Q12} */ - - /* Down expander settings */ - - int16_t down_expdr_threshold; - /**< @h2xmle_description {Down expander threshold.} - Its value must be: (*/ - -#endif diff --git a/modules/processing/gain_control/iir_mbdrc/bin/arm/libiir_mbdrc.a b/modules/processing/gain_control/iir_mbdrc/bin/arm/libiir_mbdrc.a deleted file mode 100644 index e474add6ded17e3905b1697ab950ab7f9c301943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499152 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

+R1Q~0?V&@`W1OAdx(rV+Yn9joi0$j| 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 O-%;pygaz~o^8H`DHluU^ diff --git a/modules/processing/gain_control/iir_mbdrc/build/CMakeLists.txt b/modules/processing/gain_control/iir_mbdrc/build/CMakeLists.txt deleted file mode 100644 index 9cd0444e..00000000 --- a/modules/processing/gain_control/iir_mbdrc/build/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -#[[ - @file CMakeLists.txt - - @brief - - @copyright - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -]] -cmake_minimum_required(VERSION 3.10) - -#Include directories -set(iir_mbdrc_includes - ${LIB_ROOT}/api - ${LIB_ROOT}/inc - ${PROJECT_SOURCE_DIR}/modules/cmn/common/utils/inc - ${PROJECT_SOURCE_DIR}/modules/processing/gain_control/drc/lib/inc - ${PROJECT_SOURCE_DIR}/modules/processing/gain_control/limiter/inc -) - -spf_module_sources( - KCONFIG CONFIG_IIR_MBDRC - NAME iir_mbdrc - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "pp" - AMDB_MID "0x07001017" - AMDB_TAG "capi_iir_mbdrc" - AMDB_MOD_NAME "MODULE_ID_IIR_MBDRC" - INCLUDES ${iir_mbdrc_includes} - H2XML_HEADERS "${LIB_ROOT}/api/mbdrc_api.h" - CFLAGS "" - STATIC_LIB_PATH "${LIB_ROOT}/bin/arm/libiir_mbdrc.a" -) diff --git a/modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc.h b/modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc.h deleted file mode 100644 index 904a3217..00000000 --- a/modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc.h +++ /dev/null @@ -1,43 +0,0 @@ -/* ===================================================================== - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - * =====================================================================*/ - -/** - * @file capi_iir_mbdrc.h - * - */ - -#ifndef CAPI_IIR_MBDRC_H -#define CAPI_IIR_MBDRC_H - -#include "capi.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get static properties of mbdrc module such as - * memory, stack requirements etc. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_iir_mbdrc_get_static_properties( - capi_proplist_t* init_set_properties, - capi_proplist_t* static_properties); - - -/** - * Instantiates(and allocates) the module memory. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_iir_mbdrc_init( - capi_t* _pif, - capi_proplist_t* init_set_properties); - -#ifdef __cplusplus -} -#endif - -#endif - diff --git a/modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc_utils.h b/modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc_utils.h deleted file mode 100644 index 82f918a8..00000000 --- a/modules/processing/gain_control/iir_mbdrc/inc/capi_iir_mbdrc_utils.h +++ /dev/null @@ -1,369 +0,0 @@ -/* ======================================================================== */ -/** - @file capi_iir_mbdrc_utils.h - - Header file to implement utilities for MBDRC audio Post - Processing module - */ - -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -#ifndef CAPI_IIR_MBDRC_UTILS_H -#define CAPI_IIR_MBDRC_UTILS_H - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#include "capi.h" -#include "capi_cmn.h" -#ifdef CAPI_STANDALONE -#include "capi_util.h" -#else -#include "posal.h" -#endif - -#include "capi_iir_mbdrc.h" -#include "iir_mbdrc_api.h" -#include "iir_mbdrc_calibration_api.h" -#include "mbdrc_api.h" -#include "stringl.h" -/*------------------------------------------------------------------------ - * Macros, Defines, Type declarations - * -----------------------------------------------------------------------*/ - -#define MIID_UNKNOWN 0 - -#define IIR_MBDRC_MSG_PREFIX "IIR_MBDRC:[%lX] " -#define IIR_MBDRC_MSG(ID, xx_ss_mask, xx_fmt, ...) AR_MSG(xx_ss_mask, IIR_MBDRC_MSG_PREFIX xx_fmt, ID, ##__VA_ARGS__) - -// Default values for iir_mbdrc static parameters -static const uint32 CAPI_IIR_MBDRC_DEFAULT_SAMPLING_RATE = 48000; // sampling rate -static const uint32 CAPI_IIR_MBDRC_DEFAULT_NUM_CHANNELS = 1; // Mono channel -static const uint32 CAPI_IIR_MBDRC_DEFAULT_BLOCK_SIZE = 480; // 480 = 10ms samples at 48KHz - -#define IIR_MBDRC_MAX_MSIIR_STATES_MEM (32) -// max # of even allpass stage -#define IIR_MBDRC_EVEN_AP_STAGE 3 -// max # of odd allpass stage -#define IIR_MBDRC_ODD_AP_STAGE 2 - -#define CAPI_IIR_MBDRC_ALIGN_TO_8(x) ((((uint32_t)(x) + 7) >> 3) << 3) -#define ALIGN8(o) (((o) + 7) & (~7)) -#define CAPI_IIR_MBDRC_ALIGN_4_BYTE(x) (((x) + 3) & (0xFFFFFFFC)) - -// Limiter default values -static const int32 CAPI_IIR_MBDRC_LIM_THRESH_16BIT_VAL = 93945856; -static const int32 CAPI_IIR_MBDRC_LIM_MAKEUP_GAIN_VAL = 256; -static const int32 CAPI_IIR_MBDRC_LIM_GC_VAL = 32440; -static const int32 CAPI_IIR_MBDRC_LIM_MAX_WAIT_VAL = 82; -static const int32 CAPI_IIR_MBDRC_LIM_GAIN_ATTACK_VAL = 188099735; -static const int32 CAPI_IIR_MBDRC_LIM_GAIN_RELEASE_VAL = 32559427; -static const int32 CAPI_IIR_MBDRC_LIM_RELEASE_COEF_VAL = 32768; -static const int32 CAPI_IIR_MBDRC_LIM_ATTACK_COEF_VAL = 32768; -static const int32 CAPI_IIR_MBDRC_LIM_HARD_THRESH_16BIT_VAL = 93945856; -static const int32 CAPI_IIR_MBDRC_LIM_HISTORY_WINLEN_VAL = 262; -static const int32 CAPI_IIR_MBDRC_LIM_DELAY_VAL = 262; - -static const int32 CAPI_IIR_MBDRC_KPPS_CH1_DW8_VAL = 587860; -static const int32 CAPI_IIR_MBDRC_KPPS_CH2_DW8_VAL = 607254; -static const int32 CAPI_IIR_MBDRC_KPPS_CH6_DW8_VAL = 569251; -static const int32 CAPI_IIR_MBDRC_KPPS_CH8_DW8_VAL = 539941; -static const int32 CAPI_IIR_MBDRC_KPPS_CH1_DW8_band_1_2_VAL = 503647; -static const int32 CAPI_IIR_MBDRC_KPPS_CH2_DW8_band_1_2_VAL = 508655; -static const int32 CAPI_IIR_MBDRC_KPPS_CH6_DW8_band_1_2_VAL = 455077; -static const int32 CAPI_IIR_MBDRC_KPPS_CH8_DW8_band_1_2_VAL = 445501; - -static const int32 CAPI_IIR_MBDRC_KPPS_CH1_DW1_link1_VAL = 865519; -static const int32 CAPI_IIR_MBDRC_KPPS_CH2_DW1_link1_VAL = 740111; -static const int32 CAPI_IIR_MBDRC_KPPS_CH6_DW1_link1_VAL = 609267; -static const int32 CAPI_IIR_MBDRC_KPPS_CH8_DW1_link1_VAL = 591798; -static const int32 CAPI_IIR_MBDRC_KPPS_CH1_DW1_link1_band_1_2_VAL = 781348; -static const int32 CAPI_IIR_MBDRC_KPPS_CH2_DW1_link1_band_1_2_VAL = 653223; -static const int32 CAPI_IIR_MBDRC_KPPS_CH6_DW1_link1_band_1_2_VAL = 500676; -static const int32 CAPI_IIR_MBDRC_KPPS_CH8_DW1_link1_band_1_2_VAL = 480502; - -static const int32 CAPI_IIR_MBDRC_KPPS_CH1_DW1_link0_VAL = 865519; -static const int32 CAPI_IIR_MBDRC_KPPS_CH2_DW1_link0_VAL = 854974; -static const int32 CAPI_IIR_MBDRC_KPPS_CH6_DW1_link0_VAL = 826218; -static const int32 CAPI_IIR_MBDRC_KPPS_CH8_DW1_link0_VAL = 843466; -static const int32 CAPI_IIR_MBDRC_KPPS_CH1_DW1_link0_band_1_2_VAL = 792501; -static const int32 CAPI_IIR_MBDRC_KPPS_CH2_DW1_link0_band_1_2_VAL = 792973; -static const int32 CAPI_IIR_MBDRC_KPPS_CH6_DW1_link0_band_1_2_VAL = 738497; -static const int32 CAPI_IIR_MBDRC_KPPS_CH8_DW1_link0_band_1_2_VAL = 758090; - -static const uint32 CAPI_IIR_MBDRC_limiter_threshold_min = 1; // 16-bit - -96db , 24-bit - -162db , 32-bit - -162db -static const uint32 CAPI_IIR_MBDRC_limiter_threshold_32bit_max = 2127207634; // 24-bit - 24db , 32-bit - 0db - -/*------------------------------------------------------------------------ - * Structure definitions - * -----------------------------------------------------------------------*/ -typedef struct capi_iir_mbdrc_common_config_struct_t -{ - iir_mbdrc_num_band_t iir_mbdrc_num_band; - iir_mbdrc_limiter_mode_t iir_mbdrc_limiter_mode; - iir_mbdrc_limiter_bypass_t iir_mbdrc_limiter_bypass; - uint32 version; -} capi_iir_mbdrc_common_config_struct_t; - -typedef struct capi_iir_mbdrc_crossover_freqs_t -{ - uint32 ch_idx; // channel index - uint32 crossover_freqs[IIR_MBDRC_MAX_BANDS - 1]; // cross-over frequencies; -} capi_iir_mbdrc_crossover_freqs_t; - -typedef struct capi_iir_mbdrc_per_config_crossover_freqs_struct_t -{ - uint32_t channel_mask_lsb; - uint32_t channel_mask_msb; - capi_iir_mbdrc_crossover_freqs_t iir_mbdrc_crossover_freqs; -} capi_iir_mbdrc_per_config_crossover_freqs_struct_t; - -typedef struct capi_iir_mbdrc_config_struct_t -{ - iir_mbdrc_mute_flags_t iir_mbdrc_mute_flags; - iir_mbdrc_drc_feature_mode_struct_t - * iir_mbdrc_drc_feature_mode_struct; // iir_mbdrc_drc_feature_mode_struct[num_bands] - iir_mbdrc_drc_config_struct_t *iir_mbdrc_drc_cfg; // iir_mbdrc_drc_cfg[num_bands] - iir_mbdrc_limiter_tuning_t iir_mbdrc_limiter_cfg; - iir_mbdrc_iir_config_struct_t *iir_mbdrc_iir_cfg; // iir_mbdrc_iir_cfg[num_bands-1] -} capi_iir_mbdrc_config_struct_t; - -typedef struct capi_iir_mbdrc_per_config_struct_t -{ - uint32_t channel_mask_lsb; // Contains Channel type info - // Least significant bit = 0 => per channel - // calibration disable Least significant bit = 1 => - // per channel calibration enable - uint32_t channel_mask_msb; // Contains Channel type info - capi_iir_mbdrc_config_struct_t iir_mbdrc_cfg; // Has calibration for the above mapped channels. - -} capi_iir_mbdrc_per_config_struct_t; - -typedef struct capi_iir_mbdrc_per_config_t -{ - uint32_t num_config; - uint32_t num_crossover_freqs_config; - capi_iir_mbdrc_per_config_struct_t * iir_mbdrc_per_cfg; // iir_mbdrc_per_cfg[num_config] - capi_iir_mbdrc_per_config_crossover_freqs_struct_t *iir_mbdrc_crossover_freqs_per_cfg; - // iir_mbdrc_crossover_freqs_per_cfg[num_crossover_freqs_config] -} capi_iir_mbdrc_per_config_t; - -typedef struct capi_iir_mbdrc_per_config_crossover_freqs_struct_v2_t -{ - uint32_t channel_map_mask_list[CAPI_CMN_MAX_CHANNEL_MAP_GROUPS]; - capi_iir_mbdrc_crossover_freqs_t iir_mbdrc_crossover_freqs; -} capi_iir_mbdrc_per_config_crossover_freqs_struct_v2_t; - -typedef struct capi_iir_mbdrc_per_config_struct_v2_t -{ - uint32_t channel_map_mask_list[CAPI_CMN_MAX_CHANNEL_MAP_GROUPS]; - capi_iir_mbdrc_config_struct_t iir_mbdrc_cfg; // Has calibration for the above mapped channels. -} capi_iir_mbdrc_per_config_struct_v2_t; - -typedef struct capi_iir_mbdrc_per_config_v2_t -{ - uint32_t num_config; - uint32_t num_crossover_freqs_config; - capi_iir_mbdrc_per_config_struct_v2_t * iir_mbdrc_per_cfg; // iir_mbdrc_per_cfg[num_config] - capi_iir_mbdrc_per_config_crossover_freqs_struct_v2_t *iir_mbdrc_crossover_freqs_per_cfg; - uint32_t cached_xover_freqs_v2_param_size; - uint32_t cached_mbdrc_config_v2_param_size; -} capi_iir_mbdrc_per_config_v2_t; - -typedef struct capi_iir_mbdrc_memory_struct_t -{ - iir_mbdrc_lib_mem_requirements_t mem_req; // MBDRC memory requirements structure - void * mem_ptr; // MBDRC memory pointer - capi_heap_id_t heap_mem; // Heap ID to be used for memory allocation -} iir_mbdrc_memory_struct_t; - -typedef struct capi_iir_mbdrc_event_report_t -{ - capi_event_callback_info_t cb_info; - uint32_t iir_mbdrc_bw; - uint32_t iir_mbdrc_kpps; - uint32_t iir_mbdrc_delay_in_us; - bool_t iir_mbdrc_enable; -} iir_mbdrc_event_report_t; - -typedef enum capi_iir_mbdrc_config_version_t -{ - DEFAULT = 0, - VERSION_V1 = 1, - VERSION_V2 = 2 -} capi_iir_mbdrc_config_version_t; - -#define CAPI_IIR_MBDRC_MF_V2_MIN_SIZE (sizeof(capi_standard_data_format_v2_t) + sizeof(capi_set_get_media_format_t)) - -typedef struct capi_iir_mbdrc_t -{ - capi_vtbl_t * vtbl; - capi_media_fmt_v2_t media_fmt[CAPI_IIR_MBDRC_MAX_PORT]; - capi_iir_mbdrc_event_report_t iir_mbdrc_event_report; - capi_iir_mbdrc_memory_struct_t iir_mbdrc_memory; // contains memory information - iir_mbdrc_lib_t iir_mbdrc_lib; // contains ptr to the total chunk of lib mem - iir_mbdrc_static_struct_t iir_mbdrc_static_cfg; // Stores static config information from media - // format and calibration received during Set param - iir_mbdrc_static_struct_t iir_mbdrc_static_cfg_of_defult_cfg; // Stores static config information - // from media format and default - // calibration - iir_mbdrc_feature_mode_t iir_mbdrc_feature_mode; // Stores MBDRC mode - bool_t is_iir_mbdrc_set_cfg_param_received; // This flag is set to 1 if Set - // param is received or else it is - // set to 0 - bool_t is_iir_mbdrc_media_fmt_received; // This flag is set to 1 if Media format - // is received or else it is set to 0 - bool_t is_iir_mbdrc_library_set_with_default_cfg; // This flag is set to 1 if - // library is set with default - // config, due to non - // availability of calibration - // for all the channel type - // received through Media - // format in Calibration - // received through Set Param - iir_mbdrc_per_channel_calib_mode_t iir_mbdrc_per_channel_calib_mode; // Stores information if per-channel - // calibration is enabled or disabled - capi_iir_mbdrc_common_config_struct_t iir_mbdrc_common_cfg; - capi_iir_mbdrc_per_config_t iir_mbdrc_main_cfg; // Stores the calibration received through set param - capi_iir_mbdrc_per_config_t - iir_mbdrc_default_cfg; // Stores the default calibratio capi_iir_mbdrc_per_config_t iir_mbdrc_main_cfg; // - // Stores the calibration received through set param - capi_iir_mbdrc_per_config_v2_t iir_mbdrc_main_cfg_v2; // Stores the calibration received through set param - capi_iir_mbdrc_per_config_v2_t iir_mbdrc_default_cfg_v2; // Stores the calibration received through set param - uint32_t cached_mbdrc_config_v2_param_size; - uint32_t cached_mbdrc_xover_freqs_v2_param_size; - uint32_t miid; // Module Instance ID - uint64_t input_mf_ch_mask_v1; // Input channel mask - // Input channel mask for v2 config - uint32_t input_mf_ch_mask_list_v2[CAPI_CMN_MAX_CHANNEL_MAP_GROUPS]; - // flag to detect if higher than 63 channel map received or not - bool_t higher_channel_map_present; - - capi_iir_mbdrc_config_version_t cfg_version; - -} capi_iir_mbdrc_t; - -/*------------------------------------------------------------------------ - * Function declarations - * -----------------------------------------------------------------------*/ -// Utility functions - -// Functions to be called from init function. -void capi_iir_mbdrc_init_media_fmt(capi_iir_mbdrc_t *const me_ptr); -void capi_iir_mbdrc_init_events(capi_iir_mbdrc_t *const me_ptr); -capi_err_t capi_iir_mbdrc_init_config(capi_iir_mbdrc_t *const me_ptr); - -// Set and Get property functions. -capi_err_t capi_iir_mbdrc_process_set_properties(capi_iir_mbdrc_t *me_ptr, capi_proplist_t *proplist_ptr); -capi_err_t capi_iir_mbdrc_process_get_properties(capi_iir_mbdrc_t *me_ptr, capi_proplist_t *proplist_ptr); - -// Set and Get Config params functions. -capi_err_t capi_iir_mbdrc_set_config_params(capi_iir_mbdrc_t *me_ptr, const uint32_t param_id, capi_buf_t *params_ptr); -capi_err_t capi_iir_mbdrc_get_config_params(capi_iir_mbdrc_t *me_ptr, const uint32_t param_id, capi_buf_t *params_ptr); - -// Function to raise the events -void capi_iir_mbdrc_raise_events(capi_iir_mbdrc_t *const me_ptr, bool_t media_fmt_update); -capi_err_t capi_iir_mbdrc_check_channel_map_cfg(iir_mbdrc_per_ch_filter_xover_freqs_t *cfg_ptr, uint32_t num_config); -capi_err_t capi_iir_mbdrc_init_default_xover_config(capi_iir_mbdrc_t *me_ptr); -uint64_t capi_iir_mbdrc_calculate_channel_mask(uint32_t channel_mask_lsb, uint32_t channel_mask_msb); -iir_mbdrc_per_channel_calib_mode_t capi_iir_mbdrc_configure_per_channel_calib_mode( - capi_iir_mbdrc_t *me_ptr, - uint64_t channel_map_from_set_config); - -capi_err_t capi_iir_mbdrc_allocate_lib_memory(capi_iir_mbdrc_t *me_ptr, - bool_t force_reinit, - bool_t use_default_static_cfg); - -capi_err_t capi_iir_mbdrc_set_xover_freq_v2_params(capi_iir_mbdrc_t *me_ptr, - const uint32_t param_id, - capi_buf_t * params_ptr); - -capi_err_t capi_iir_mbdrc_validate_multichannel_v2_payload(capi_iir_mbdrc_t *me_ptr, - int8_t * data_ptr, - uint32_t param_id, - uint32_t param_size, - uint32_t num_cfg, - uint32_t * req_payload_size, - uint32_t base_payload_size, - uint32_t per_cfg_base_payload_size); - -capi_err_t capi_iir_mbdrc_validate_per_channel_v2_payload(capi_iir_mbdrc_t *me_ptr, - uint32_t num_cfg, - int8_t * data_ptr, - uint32_t param_size, - uint32_t * required_size_ptr, - uint32_t param_id, - uint32_t base_payload_size, - uint32_t per_cfg_base_payload_size); - -bool_t capi_iir_mbdrc_check_multi_ch_channel_mask_v2_param(uint32_t miid, - uint32_t num_config, - uint32_t param_id, - int8_t * param_ptr, - uint32_t base_payload_size, - uint32_t per_cfg_base_payload_size); - -capi_err_t capi_iir_mbdrc_set_config_v2_params(capi_iir_mbdrc_t *me_ptr, - const uint32_t param_id, - capi_buf_t * params_ptr); - -iir_mbdrc_per_channel_calib_mode_t capi_iir_mbdrc_configure_per_channel_calib_mode_v2(capi_iir_mbdrc_t *me_ptr, - uint32_t *channel_mask_list, - uint32_t channel_group_mask); - -bool_t capi_iir_mbdrc_check_if_non_vol_cal_changed_v2( - capi_iir_mbdrc_t * me_ptr, - capi_buf_t * params_ptr, - int32_t * memory_needs_to_change, - iir_mbdrc_per_channel_calib_mode_t iir_mbdrc_per_channel_calib_mode); - -void capi_iir_mbdrc_get_channel_mask_list_v2(uint32_t temp_channel_mask_list[], - uint32_t *channel_mask_list, - uint32_t channel_group_mask); - -capi_err_t capi_iir_mbdrc_get_xover_freq_v2_params(capi_iir_mbdrc_t *me_ptr, - const uint32_t param_id, - capi_buf_t * params_ptr); - -capi_err_t capi_iir_mbdrc_init_default_xover_config_v2(capi_iir_mbdrc_t *me_ptr); - -capi_err_t capi_iir_mbdrc_init_default_config_v2(capi_iir_mbdrc_t *const me_ptr, - bool_t cache_defaults_to_iir_mbdrc_main_cfg); - -void capi_iir_mbdrc_get_calib_mode_for_v2_cfg(capi_iir_mbdrc_t *me_ptr); - -void capi_iir_mbdrc_check_allocate_and_initialize_lib_v2_cfg(capi_iir_mbdrc_t *me_ptr, - uint32_t num_cfg, - uint32_t channels_allocated, - uint32_t *matched_ptr); - -capi_err_t capi_iir_mbdrc_init_lib_v1(capi_iir_mbdrc_t *me_ptr, uint32_t matched); - -capi_err_t capi_iir_mbdrc_init_lib_v2(capi_iir_mbdrc_t *me_ptr, uint32_t matched); - -void capi_iir_mbdrc_post_process_lib_initialization_v1(capi_iir_mbdrc_t *me_ptr); - -void capi_iir_mbdrc_post_process_lib_initialization_v2(capi_iir_mbdrc_t *me_ptr); - -capi_err_t capi_iir_mbdrc_set_params_to_library_v2(capi_iir_mbdrc_t *me_ptr, bool_t use_default_static_cfg); - -void capi_iir_mbdrc_update_drc_flags_and_ch_mask_v2(capi_iir_mbdrc_t *me_ptr, - const uint32_t num_bands, - bool_t * downsample_level_flag_1, - bool_t * drc_linked_flag, - const uint32_t num_channel); - -void capi_iir_mbdrc_check_allocate_and_initialize_lib_v2_cfg(capi_iir_mbdrc_t *me_ptr, - uint32_t channels_allocated, - uint32_t * matched); - -capi_err_t capi_iir_mbdrc_get_config_params_v2(capi_iir_mbdrc_t *const me_ptr, - uint32_t param_id, - capi_buf_t *params_ptr); - -uint32_t capi_iir_mbdrc_calculate_cached_size_for_default_v2_param(uint32_t num_bands, - uint32_t num_config); -#endif diff --git a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc.h b/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc.h deleted file mode 100644 index 1a84df93..00000000 --- a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc.h +++ /dev/null @@ -1,149 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -#ifndef IIR_MBDRC_H -#define IIR_MBDRC_H - -#include "iir_mbdrc_api.h" -#include "drc_api.h" -#include "limiter_api.h" -#include "audio_dsp.h" -#include "audio_apiir_df1_opt.h" - - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - * Preprocessor Definitions and Constants - * -------------------------------------------------------------------------*/ -#define IIR_MBDRC_LIB_VER (0x0400010000000000) // lib version : 4.0_1.0.0 - // external_major.external_minor.major.minor.revision.custom_alphabet.custom_number.reserved) - // (8.8.8.8.8.8.8.8 bits) - - -static const uint32 eq_max_stack_size = 600; // worst case stack mem in bytes -#define ALIGN8(o) (((o)+7)&(~7)) - - -#define IIR_MBDRC_TIME_CONST 0x1BF7A00 // UL32Q31, same as DN_EXPA_RELEASE_DEFAULT - -/* define IIR-related constants */ -// max states required per band -#define MAX_MSIIR_STATES_MEM (32) -// max # of even allpass stage -#define EVEN_AP_STAGE 3 -// max # of odd allpass stage -#define ODD_AP_STAGE 2 -// use fixed Q27 for all coef -#define IIR_COEFFS_TARGET_Q_FACTOR 27 -// for allpass biquad iir, only b0 and b1 are needed -#define BIQUAD_APIIR_COEFF_LENGTH 2 - -#define MBDRC_NUM_BAND_DEFAULT 1 -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ - -// iir_mbdrc states struct -typedef struct iir_mbdrc_states_mem_t -{ - // dynamic mem allocation for mute_flags[num_channels][IIR_MBDRC_MAX_BANDS] - int32 **mute_flags; - - // dynamic mem allocation for iir_mbdrc_cross_over_freqs[num_channels][IIR_MBDRC_MAX_BANDS-1] - uint32 **iir_mbdrc_cross_over_freqs; - - // dynamic mem allocation for drc_enable[num_channels][IIR_MBDRC_MAX_BANDS] - uint16 **drc_enable; - - // dynamic mem allocation for iir_mbdrc_makeupgain[num_channels][IIR_MBDRC_MAX_BANDS] - uint16 **iir_mbdrc_makeupgain; - - // dynamic mem allocation for iir_mbdrc_inst_makeupgain[num_channels][IIR_MBDRC_MAX_BANDS] - uint16 **iir_mbdrc_inst_makeupgain; - - uint32 num_band; -} iir_mbdrc_states_mem_t; - - -// iir_mbdrc internal memory struct -typedef struct iir_mbdrc_misc_scratch_buf_t -{ - // LPF output; shared by all bands - // dynamic mem allocation for int32 *subBandLPBuf[IIR_MBDRC_MAX_CHANNELS] - int32 **subBandLPBuf; - - // HPF output, which is input of next LPF; shared by all bands - // dynamic mem allocation for int32 *subBandHPBuf[IIR_MBDRC_MAX_CHANNELS] - int32 **subBandHPBuf; - - // IIR filter bank output, which is used for 16-bit case; shared by all bands - // dynamic mem allocation for int16 *internalOutBuf16[IIR_MBDRC_MAX_CHANNELS] - int16 **internalOutBuf16; - - // mixer output, which is limiter input; shared by all bands - // dynamic mem allocation for *internalOutBuf32[IIR_MBDRC_MAX_CHANNELS] - int32 **internalOutBuf32; - - // shared by all bands/channels - int32 *scatch_buf; - -} iir_mbdrc_misc_scratch_buf_t; - -// iir filter structure -// array is allocated for worse case (9-order IIR design) -typedef struct iir_filter_t -{ - uint32 num_stages[2]; // num_stages[0]: even filter stages; - // num_stages[1]: odd filter stages - - /* according to allpass biquad filter's transfer function: */ - /* H_ap(z) = (b0 + b1*z^-1 + z^-2)/(1 + b1*z^-1 + b0*z^-2) */ - /* only b0 and b1 needs to be saved */ - /* Besides, the 3-rd stage of even allpass filter is 1st order IIR */ - /* H_even_3rd(z) = (b0 + z^-1)/(1 + b0*z^-1) */ - /* only b0 needs to be saved */ - /* iir_coeffs store order is: */ - /* [b0_even1 b1_even1 | b0_even2 b1_even2 | b0_even3 b1_even3 | ...*/ - /* ...b0_odd1 b1_odd1 | b0_odd2 b1_odd2] */ - int32 iir_coeffs[MSIIR_MAX_COEFFS_PER_BAND]; - - /* each biquad IIR needs 4 mem, 1st order IIR needs 2 mem */ - /* states store order is: */ - /* [4 mem for even ap1 | 4 mem for even ap2 | ... */ - /* ... 4 mem for 1st order iir | 4 mem for odd ap1 | ... */ - /* ... 4 mem for odd ap2 | ... */ - /* ... 3 * (4 mem for delay apx)] */ - int32 states[MAX_MSIIR_STATES_MEM]; -} iir_filter_t; - - -// IIR_MBDRC lib mem structure -typedef struct iir_mbdrc_lib_mem_t -{ - iir_mbdrc_static_struct_t *iir_mbdrc_static_struct_ptr; - iir_mbdrc_feature_mode_t *iir_mbdrc_feature_mode_ptr; - iir_mbdrc_per_channel_calib_mode_t *iir_mbdrc_per_channel_calib_mode_ptr; - - // dynamic mem allocation for DRC library - drc_lib_t *drc_lib_linked_mem; // DRC when per-channel mode is enabled: drc_lib_linked_mem[IIR_MBDRC_MAX_BANDS] - drc_lib_t **drc_lib_mem; // DRC when per-channel mode is disabled: drc_lib_mem[num_channel][IIR_MBDRC_MAX_BANDS] - limiter_lib_t limiter_lib_mem; // multi ch ready - iir_mbdrc_states_mem_t *iir_mbdrc_states_mem_ptr; - iir_mbdrc_misc_scratch_buf_t *iir_mbdrc_misc_scratch_buf_ptr; - - // dynamic mem allocation for iir_filter_t *iir_filter_struct_ptr_array[IIR_MBDRC_MAX_BANDS-1][IIR_MBDRC_MAX_CHANNELS] - iir_filter_t ***iir_filter_struct_ptr_array; - -} iir_mbdrc_lib_mem_t; - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif // IIR_MBDRC_H diff --git a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_api.h b/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_api.h deleted file mode 100644 index d2eab906..00000000 --- a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_api.h +++ /dev/null @@ -1,108 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -#ifndef IIR_MBDRC_API_H -#define IIR_MBDRC_API_H - -#include "iir_mbdrc_calibration_api.h" -#include "iir_mbdrc_function_defines.h" -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/*---------------------------------------------------------------------------- - * Type Declarations - * -------------------------------------------------------------------------*/ -typedef enum IIR_MBDRC_RESULT -{ - IIR_MBDRC_SUCCESS = 0, - IIR_MBDRC_FAILURE, - IIR_MBDRC_MEMERROR -}IIR_MBDRC_RESULT; - -//IIR_MBDRC static params structure -typedef struct iir_mbdrc_static_struct_t -{ - uint32_t data_width; // 16 or 32 - uint32_t sample_rate; // Hz - uint32_t num_channel; // num of channel; up to 8 - uint32_t *drc_delay_samples; // dynamic mem allocation for drc_delay_samples * max_num_band; - // samples per channel in Q0 - uint32_t max_num_band; // max num of band; 1 ~ 10 - uint32_t limiter_delay_secs; // seconds per channel in Q15, the same for all channels - uint32_t max_block_size; // for limiter - uint32_t limiter_history_winlen; // length of history window (Q15 value of sec) -} iir_mbdrc_static_struct_t; - - -// IIR_MBDRC lib structure -typedef struct iir_mbdrc_lib_t -{ - void* iir_mbdrc_lib_mem_ptr; // ptr to the total chunk of lib mem -} iir_mbdrc_lib_t; - - -// IIR_MBDRC lib mem requirements structure -typedef struct iir_mbdrc_lib_mem_requirements_t -{ - uint32_t iir_mbdrc_lib_mem_size; // size of the lib mem pointed by lib_mem_ptr - uint32_t iir_mbdrc_lib_stack_size; // stack mem size -} iir_mbdrc_lib_mem_requirements_t; - - -/*---------------------------------------------------------------------------- - * Function Declarations and Documentation - * -------------------------------------------------------------------------*/ - -// get lib mem req -// iir_mbdrc_lib_mem_requirements_ptr: [out] Pointer to lib mem requirements structure -// iir_mbdrc_static_struct_ptr: [in] Pointer to static structure -IIR_MBDRC_RESULT iir_mbdrc_get_mem_req(iir_mbdrc_lib_mem_requirements_t *iir_mbdrc_lib_mem_requirements_ptr, iir_mbdrc_static_struct_t *iir_mbdrc_static_struct_ptr); - - -// partition and init the mem with default values -// iir_mbdrc_lib_ptr: [in, out] Pointer to lib structure -// iir_mbdrc_static_struct_ptr: [in] Pointer to static structure -// mem_ptr: [in] Pointer to lib memory -// mem_size: [in] Size of the memory pointed by mem_ptr -IIR_MBDRC_RESULT iir_mbdrc_init_memory(iir_mbdrc_lib_t *iir_mbdrc_lib_ptr, iir_mbdrc_static_struct_t *iir_mbdrc_static_struct_ptr, int8_t *mem_ptr, uint32_t mem_size); - - -// retrieve params from lib mem -// iir_mbdrc_lib_ptr: [in] Pointer to lib structure -// param_id: [in] ID of the param -// mem_ptr: [in/out] Pointer to the memory where params are to be stored -// mem_size:[in] Size of the memory pointed by mem_ptr -// param_size_ptr: [out] Pointer to param size which indicates the size of the retrieved param(s) -IIR_MBDRC_RESULT iir_mbdrc_get_param(iir_mbdrc_lib_t *iir_mbdrc_lib_ptr, uint32_t param_id, int8_t *mem_ptr, uint32_t mem_size, uint32_t *param_size_ptr); - - -// set the params in the lib mem -// iir_mbdrc_lib_ptr: [in, out] Pointer to lib structure -// param_id: [in] ID of the param -// mem_ptr: [in] Pointer to the memory where the values stored are used to set up the params in the lib memory -// mem_size:[in] Size of the memory pointed by mem_ptr -IIR_MBDRC_RESULT iir_mbdrc_set_param(iir_mbdrc_lib_t *iir_mbdrc_lib_ptr, uint32_t param_id, int8_t *mem_ptr, uint32_t mem_size); - - -// IIR_MBDRC processing of de-interleaved multi-channel audio signal -// iir_mbdrc_lib_ptr: [in] Pointer to lib structure -// out_ptr: [out] Pointer to de-interleaved multi-channel output PCM samples -// in_ptr: [in] Pointer to de-interleaved multi-channel input PCM samples -// block_size: [in] Number of samples to be processed per channel -IIR_MBDRC_RESULT iir_mbdrc_process(iir_mbdrc_lib_t *iir_mbdrc_lib_ptr, int8_t *out_ptr[], int8_t *in_ptr[], uint32_t block_size); - - -#ifdef IIR_MBDRC_SPLITFILTER32_LOOP_ASM -void iir_mbdrc_SplitFilter32_loop(int32_t *tmpOddOut, - int32_t *tmpEvenOut, - uint32_t nSampleCnt); -#endif -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif // IIR_MBDRC_API_H diff --git a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_calibration_api.h b/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_calibration_api.h deleted file mode 100644 index fe0d2300..00000000 --- a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_calibration_api.h +++ /dev/null @@ -1,195 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -#ifndef IIR_MBDRC_CALIBRATION_API -#define IIR_MBDRC_CALIBRATION_API - -#include "ar_defs.h" -#include "iir_mbdrc_api.h" -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - * Preprocessor Definitions and Constants - * -------------------------------------------------------------------------*/ -#define MSIIR_MAX_COEFFS_PER_BAND (10) // # of coeffs needed per filter block - // = #of biquad coeffs * (3 even stages + 2 odd stages) - -/*---------------------------------------------------------------------------- - * Pramameter ID Definitions - * -------------------------------------------------------------------------*/ - -// param id to get lib version -#define IIR_MBDRC_PARAM_GET_LIB_VER (0) // read only -typedef int64_t iir_mbdrc_lib_ver_t; // lib version - // external_major.external_minor.major.minor.revision.custom_alphabet.custom_number.reserved) - // (8.8.8.8.8.8.8.8 bits) - -// this param id is for iir_mbdrc_feature_mode_t -#define IIR_MBDRC_PARAM_FEATURE_MODE (1) // read/write; apply to all channels -typedef enum iir_mbdrc_mode_t -{ - IIR_MBDRC_BYPASSED = 0, // IIR_MBDRC processing bypassed; no IIR_MBDRC processing - IIR_MBDRC_ENABLED // IIR_MBDRC processing enabled; normal IIR_MBDRC processing -} iir_mbdrc_mode_t; -typedef iir_mbdrc_mode_t iir_mbdrc_feature_mode_t; - -// param id to get/set actual num of band -#define IIR_MBDRC_PARAM_NUM_BAND (2) // read/write; apply to all channels; -typedef uint32_t iir_mbdrc_num_band_t; - -// param id to get/set mute flags -#define IIR_MBDRC_PARAM_MUTE_FLAGS (3) // read/write; -typedef struct iir_mbdrc_mute_flags_t -{ - uint32_t ch_idx; // channel index - int32_t *mute_flags; // total mute_flag[num_band] per channel -} iir_mbdrc_mute_flags_t; - // read/write the number of band flags - - -// this param id is for iir_mbdrc_drc_feature_mode_struct_t -#define IIR_MBDRC_PARAM_DRC_FEATURE_MODE (4) // read/write; apply to all channels -typedef enum iir_mbdrc_drc_mode_t -{ - IIR_MBDRC_DRC_BYPASSED = 0, // DRC processing bypassed; - // no DRC processing and only delay is implemented - IIR_MBDRC_DRC_ENABLED, // DRC processing enabled; normal DRC processing -} iir_mbdrc_drc_mode_t; - -typedef struct iir_mbdrc_drc_feature_mode_struct_t -{ - uint32_t ch_idx; // channel index: 0 ~ IIR_MBDRC_MAX_BANDS-1 - uint32_t band_index; // band index: 0 ~ IIR_MBDRC_MAX_CHANNELS-1 (apply same mode to entire channels) - iir_mbdrc_drc_mode_t iir_mbdrc_drc_feature_mode; // 1 is with DRC processing; - // 0 is no DRC processing - // (bypassed, only delay is implemented) -} iir_mbdrc_drc_feature_mode_struct_t; - - -// this param id is for iir_mbdrc_drc_config_struct_t -#define IIR_MBDRC_PARAM_DRC_CONFIG (5) // read/write -typedef struct iir_mbdrc_drc_config_t -{ - // below two should not change during Reinit - int16_t channel_linked; // Q0 channel mode -- Linked(1) or Not-Linked(0); - int16_t down_sample_level; // Q0 Down Sample Level to save MIPS - - uint16_t rms_tav; // Q16 Time Constant used to compute Input RMS - uint16_t make_up_gain; // Q12 Makeup Gain Value - - int16_t dn_expa_threshold; // Q7 downward expansion threshold - int16_t dn_expa_slope; // Q8 downward expansion slope - uint32_t dn_expa_attack; // Q31 downward expansion attack time - uint32_t dn_expa_release; // Q31 downward expansion release time - int32_t dn_expa_min_gain_db; // Q23 downward expansion minimum gain in dB - uint16_t dn_expa_hysterisis; // Q14 downward expansion hysterisis time - - int16_t up_comp_threshold; // Q7 upward compression threshold - uint32_t up_comp_attack; // Q31 upward compression attack time - uint32_t up_comp_release; // Q31 upward compression release time - uint16_t up_comp_slope; // Q8 upward compression slope - uint16_t up_comp_hysterisis; // Q14 upward compression hysterisis time - - int16_t dn_comp_threshold; // Q7 downward compression threshold - uint16_t dn_comp_slope; // Q8 downward compression slope - uint32_t dn_comp_attack; // Q31 downward compression attack time - uint32_t dn_comp_release; // Q31 downward compression release time - uint16_t dn_comp_hysterisis; // Q14 downward compression hysterisis time - - int16_t reserved; - -} iir_mbdrc_drc_config_t; - -typedef struct iir_mbdrc_drc_config_struct_t -{ - uint32_t ch_idx; // channel index: 0 ~ IIR_MBDRC_MAX_BANDS-1 - uint32_t band_index; // band index: 0 ~ IIR_MBDRC_MAX_CHANNELS-1 - iir_mbdrc_drc_config_t iir_mbdrc_drc_config; -} iir_mbdrc_drc_config_struct_t; - - -// param id for get/set limiter mode -#define IIR_MBDRC_PARAM_LIMITER_MODE (6) // read/write -typedef enum iir_mbdrc_limiter_mode_t -{ - LIM_MAKEUPGAIN_ONLY = 0, - LIM_NORMAL_PROC -} iir_mbdrc_limiter_mode_t; - - -// param id for get/set limiter bypass mode -// this id itself has been verified but currently IIR_MBDRC -// does not use limiter in bypass mode - -// this id is here to maintain consistency under unified -// API guideline since limiter lib has this param id - -// this id can be used for new feature support in future -#define IIR_MBDRC_PARAM_LIMITER_BYPASS (7) // read/write -typedef int32_t iir_mbdrc_limiter_bypass_t; - - -// param id for limiter cfg params -#define IIR_MBDRC_PARAM_LIMITER_CONFIG (8) // read/write -typedef struct iir_mbdrc_limiter_tuning_t -{ - int32_t ch_idx; // channel index - int32_t threshold; // threshold (16bit: Q15; 32bit:Q27) - int32_t makeup_gain; // make up gain (Q8) - int32_t gc; // recovery const (Q15) - int32_t max_wait; // max wait (Q15 value of sec) - - uint32_t gain_attack; // limiter gain attack time (Q31) - uint32_t gain_release; // limiter gain release time (Q31) - uint32_t attack_coef; // limiter gain attack time speed coef (Q15) - uint32_t release_coef; // limiter gain release time speed coef (Q15) - int32_t hard_threshold; // threshold for hard limiter (16bit: Q15; 32bit:Q27) -} iir_mbdrc_limiter_tuning_t; - -// param id for IIR coeffs -// write only, only set_param is needed since -// there is no menu to do get_param in ACDB -#define IIR_MBDRC_PARAM_MSIIR_CONFIG (9) - -typedef struct iir_mbdrc_iir_config_struct_t { - uint32_t ch_idx; // channel index - uint32_t band_index; // 0 ~ 9 - uint32_t num_stages[2]; // num_stages[0]: even filter stages; - // num_stages[1]: odd filter stages - int32_t iir_coeffs[MSIIR_MAX_COEFFS_PER_BAND]; // store order: 3-stage even, 2-stage odd. -} iir_mbdrc_iir_config_struct_t; - -// param id for get/set crossover freqs -#define IIR_MBDRC_PARAM_CROSSOVER_FREQS (10) // read/write -typedef struct iir_mbdrc_crossover_freqs_t -{ - uint32_t ch_idx; // channel index - uint32_t *crossover_freqs; // cross-over frequencies; -} iir_mbdrc_crossover_freqs_t; - // read/write num_band-1 crossover freqs - -// param id for reset -#define IIR_MBDRC_PARAM_SET_RESET (11) // write only -// clear below internal mem -// - Even IIR -// - Odd IIR -// - delay IIR -// - DRC -// - limiter - -#define IIR_MBDRC_PARAM_PER_CHANNEL_CALIBRATION_MODE (12) // read/write -typedef enum iir_mbdrc_per_channel_calib_mode_t -{ - IIR_MBDRC_PER_CHANNEL_CALIB_DISABLE = 0, // disable per-channel calibration(== old version) - IIR_MBDRC_PER_CHANNEL_CALIB_ENABLE // enable per-channel calibration -}iir_mbdrc_per_channel_calib_mode_t; - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif // IIR_MBDRC_CALIBRATION_API diff --git a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_function_defines.h b/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_function_defines.h deleted file mode 100644 index 14d1f5a7..00000000 --- a/modules/processing/gain_control/iir_mbdrc/inc/iir_mbdrc_function_defines.h +++ /dev/null @@ -1,16 +0,0 @@ -/* ========================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear - ========================================================================== */ - -#ifdef __qdsp6__ - -#define IIR_MBDRC_SPLITFILTER32_LOOP_ASM -#define IIRDF1_32_1STORDER_ASM - -#endif - - - - - diff --git a/modules/processing/resamplers/dynamic_resampler/api/dynamic_resampler_api.h b/modules/processing/resamplers/dynamic_resampler/api/dynamic_resampler_api.h deleted file mode 100644 index ee6e9b90..00000000 --- a/modules/processing/resamplers/dynamic_resampler/api/dynamic_resampler_api.h +++ /dev/null @@ -1,162 +0,0 @@ -#ifndef DYNAMIC_RESAMPLER_API_H -#define DYNAMIC_RESAMPLER_API_H - -/*============================================================================== - @file dynamic_resampler_api.h - @brief This file contains RESAMPLER API -==============================================================================*/ - -/* ======================================================================== - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -===========================================================================*/ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#include "module_cmn_api.h" - -/** @h2xml_title1 {Dynamic Resampler Module API} - @h2xml_title_agile_rev {Dynamic Resampler Module API} - @h2xml_title_date {September, 2018} */ - -/*------------------------------------------------------------------------------ - Defines -------------------------------------------------------------------------------*/ -/* Input port ID of Dynamic Resampler module */ -#define DYN_RS_DATA_INPUT_PORT 0x2 - -/* Output port ID of Dynamic Resampler module */ -#define DYN_RS_DATA_OUTPUT_PORT 0x1 - -/*------------------------------------------------------------------------------ - Module -------------------------------------------------------------------------------*/ -#define MODULE_ID_DYNAMIC_RESAMPLER 0x07001016 -/** - @h2xmlm_module {"MODULE_ID_DYNAMIC_RESAMPLER", - MODULE_ID_DYNAMIC_RESAMPLER} - @h2xmlm_displayName {"Dynamic Resampler"} - @h2xmlm_modSearchKeys{resampler, Audio} - @h2xmlm_description {- Dynamic Resampler module.\n - - This module converts audio sampling rate and uses FIR filters to do it. \n - - Therefore the SNR is higher than IIR filters but - at the cost of higher Delay.\n - -\n - - Supports following params: - - PARAM_ID_DYNAMIC_RESAMPLER_CONFIG - - PARAM_ID_DYNAMIC_RESAMPLER_OUT_CFG - - \n - - Supported Input Media Format: \n - - Data Format : FIXED_POINT \n - - fmt_id : Don't care \n - - Sample Rates : >0 to 384 kHz \n - - Number of channels : 1 to 128 (for certain products this module supports only 32 channels) \n - - Channel type : Don't care \n - - Bits per sample : 16, 32 \n - - Q format : Don't care \n - - Interleaving : de-interleaved unpacked \n - - Signed/unsigned : Don't care } - - @h2xmlm_dataMaxInputPorts { 1 } - @h2xmlm_dataInputPorts { IN = DYN_RS_DATA_INPUT_PORT} - @h2xmlm_dataOutputPorts { OUT = DYN_RS_DATA_OUTPUT_PORT} - @h2xmlm_dataMaxOutputPorts { 1 } - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize { 4096 } - @{ <-- Start of the Module --> -*/ - -/* ID of the Dynamic Resampler configuration parameter used by MODULE_ID_DYNAMIC_RESAMPLER. */ -#define PARAM_ID_DYNAMIC_RESAMPLER_CONFIG 0x08001025 - -/* Structure payload for: PARAM_ID_DYNAMIC_RESAMPLER_CONFIG*/ -/** @h2xmlp_parameter {"PARAM_ID_DYNAMIC_RESAMPLER_CONFIG", PARAM_ID_DYNAMIC_RESAMPLER_CONFIG} - @h2xmlp_description { Structure for setting the configuration for the Dynamic Resampler } - @h2xmlp_toolPolicy {Calibration; RTC} */ - -#include "spf_begin_pack.h" -struct param_id_dynamic_resampler_config_t -{ - uint32_t use_hw_rs; - /**< @h2xmle_description {Specifies whether to use the hardware or software resampler for DYNAMIC RESAMPLER \n - -> If the client wants to use hardware resampler, use_hw_rs should - be set to 1 and dynamic_mode and delay_type values will be saved but ignored. \n - -> Hardware resampler can be created only if the chip supports it \n - -> If hardware resampler creation fails for any reason, sw resampler will - be created with saved dynamic mode and delay type set by client \n - -\n - -> If use_hw_rs flag is set to 0, software resampler is to be used, - and dynamic_mode and delay_type params come into play \n - -\n - -> Get param query on this api will return the actual resampler being used. - It is not simply what the client set} - - @h2xmle_rangeList {"Use sw resampler" = 0, - "Use hw resampler" = 1} - @h2xmle_default {0} */ - - uint16_t dynamic_mode; - /**< @h2xmle_description {Specifies the mode of operation for the DYNAMIC RESAMPLER\n - -> This dynamic_mode value has significance only if sw resampler is used.} - @h2xmle_rangeList {"Generic resampling"= 0; - "Dynamic resampling"=1} - @h2xmle_default {0} */ - - - uint16_t delay_type; - /**< @h2xmle_description {Specifies the delay type for the DYNAMIC RESAMPLER mode\n - -> This delay_type value has significance only if sw resampler is used - AND the dynamic_mode value is set to 1. } - @h2xmle_rangeList {"High delay with smooth transition"= 0; - "Low delay with visible transitional phase distortion"=1} - @h2xmle_default {0} */ -} -#include "spf_end_pack.h" -; -/* Structure type def for above payload. */ -typedef struct param_id_dynamic_resampler_config_t param_id_dynamic_resampler_config_t; - - - -/* Set param for sending output sample rate */ -#define PARAM_ID_DYNAMIC_RESAMPLER_OUT_CFG 0x08001034 - -/** @h2xmlp_parameter {"PARAM_ID_DYNAMIC_RESAMPLER_OUT_CFG", PARAM_ID_DYNAMIC_RESAMPLER_OUT_CFG} - @h2xmlp_description {Specifies the output sample rate to be set.} - @h2xmlp_toolPolicy {Calibration; RTC} */ - -#include "spf_begin_pack.h" -struct param_id_dynamic_resampler_out_cfg_t -{ - int32_t sampling_rate; - /**< @h2xmle_description {Specifies the output sample rate\n - ->Ranges from -2 to 384KHz where - -2 is PARAM_VAL_UNSET and -1 is PARAM_VAL_NATIVE} - @h2xmle_rangelist {"PARAM_VAL_UNSET" = -2; - "PARAM_VAL_NATIVE" =-1; - "8 kHz"=8000; - "11.025 kHz"=11025; - "12 kHz"=12000; - "16 kHz"=16000; - "22.05 kHz"=22050; - "24 kHz"=24000; - "32 kHz"=32000; - "44.1 kHz"=44100; - "48 kHz"=48000; - "88.2 kHz"=88200; - "96 kHz"=96000; - "176.4 kHz"=176400; - "192 kHz"=192000; - "352.8 kHz"=352800; - "384 kHz"=384000} - @h2xmle_default {-1} */ -} -#include "spf_end_pack.h" -; -/* Structure type def for above payload. */ -typedef struct param_id_dynamic_resampler_out_cfg_t param_id_dynamic_resampler_out_cfg_t; - - -/** @} <-- End of the Module -->*/ -#endif //DYNAMIC_RESAMPLER_API_H diff --git a/modules/processing/resamplers/dynamic_resampler/bin/arm/libdynamic_resampler.a b/modules/processing/resamplers/dynamic_resampler/bin/arm/libdynamic_resampler.a deleted file mode 100644 index b8ca9b07515e5043ab9720df0642501776e67702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662306 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Û@{l8c5O8}psSwQf9=ZnH>SZ03G|MlsT;^^h%r1_`z}$#N7UC%${hY;Gyx zDa>L{pA(}Yk|Q1?i}PPJ8X>ue(B-rPW=j(+JU6>fZK<*_fpY^M9@#R)NOg8&`?hgnWN|Jc zj+tWQaBe1JO%x-Sb7Ble1!ClJ-UGj~%@m^q=YDM6Rw^fuW`;ZINsO&pPN2oT%tN9F z(XA)#L9tNHQFLwlhmx0EnNXBNc*NqPQUJJOmztH8oRc4C&$HJkrCR(3QpX%T&_Cv*c(opTX@ho5ef>1xnQU z3U-#M(}|5M)ES0lRq8wfVjLqZX5>`xq)q}BGE-->hjxU{MlYCC=NHHzHtL*#dWmJs z#|T)7IuAqDGIhR8p(O~#mp~^ImemMyJ&qYd#@vS;Nz_rW9ho|Rgf0~7#0()CmBoyO z)gZ>u8k|iA@=Q5}}rb-%; z1m^+ajhGyhID86FcEZOJAR%U?pabIF! zarzN{F-+nkhqHlJNS5Lfv4YEa97!vtNQ^wf-4A1u#6KRR9(^z??ZSElT`L`RR$89N z1}(>lne~_f`^js?%5{QMU$E;*yEB-TU9!O%hO(x;jS(XB# z)GJWVRU(@ze?cmD-VsA7SXKP6uJZsNn3#noIUmU%g*mZTAc9oqFD)C10cBF>uN>n0 z78XJ|-`s3xbIsrbm05Pc z30yO^yFgZ8DL#Vm`Yb%7#Q9Rsj8Zr0@r{h;c(>Fx1G#=1TS-!N1LM-?7tP z%yC=oB%wL(1|5Er{W*@`X@8SnZ?%8UueksUA z@#|goBm8=|{X>5Jq1}N*VvajtAJ4D%*=O?W{q{4D|BzpQV*eGt z{?vYoUk}@*k;Lbd!K5d1+&>4`^YIshui@9P2H(N2{~FxQuU`*7%&*@JK8fqlI3^7q zitx&+Umj%f)$4M^s#ft{Zgw2|*nlF=r0C=b(`%2|*nlG5rk~o6Pkp zA-LVd8dJUtAX)xHLU0$z!nf#H++$Yw5h>s5&=CSV`>*iJM{Tp;orL6UPhN-uhaV`O zYS%nanmWdVnQ0_;Bbh#zkV{PuLq5fng8)}elL6P5g=Tq{n1^6O!fw#3o<)-5HXH!O zek9vP$P)ViEja>zC66h+2iZ9U;`Fo7s;5C(h%@oGqw)3@umfl+4Osf)h*nRd^bXvv z5aXwTdBMP{JRpX127bxh1sa-k8u$+l8tM1MX1E6Ko+fEK!NK+tG>t(8(-tS)UO@JqscXg^HzK+B#M$;`%z9d-b}hG^a)Q3SeO zGCvOQq6xPEwU^LmIhsovl+43s3iKhMo+LDFO%f|`nyV!9%a~4(SAqXC(Qrux%^#t4 z&t}Pd6g3nLUdenaU7+s)>Oq4A)A$N^NM?1A zKpz9@H$AgC`UjFZS=Z@bfqK7Z_OglC!w)6%i*PksTaLwngBGb%PIHfBwj~OhG~jcH zCPJs%NEi2GpR%AS2Yyi>KAh$!lDX0)Xxe~Z--l22IPm$IWKKsklRUeC|3M!q77;DYE(ZFf>hh3gmyFDV+Df zQ^w2YTu*o zR$5vH=XkV!968}W+5DCw2*-hF8WHxD@c`-Zhq8IHo{wum)EJE;C%jiSuhP@%H6Xev z3dcDgfYV;YII~|03G?a0P8vu!j^w5enxr`11;tS6(1FW4bgJ?W9gw_32PyB+;m$i$ z3CtyK=`A>q2TfDn!x|sMt;}E-gQn7erSHf9wm`WBVPA-GDlpjwRxdO-gXxO-M%=y7 zq%z=Z4I1e)V#5oKK{J%t@-d8k2}mpO>!Q)jL=8Pr(A*0AKB8f8Ho-^ZYZWPRGjTsc zYdr@1QKF%NL_OwSHW(sLQ3mhDpllbC>KtX}1SAPil>2HsbambfCFavdLLN#qUY2E| z8slZzLU0e4WiMbJFU#!UYm{Z5AVq2rYa(FN&{P_P%d(p<5!zY^%#{XK*OpP1f)Hp;REy2|eW>VPp@*QrsKrNMz|g=c_2Zm`g4!e!Y+ zLGu^j|K5j>QI=6zLwq#kBNtkvZH%()Rg`5!GY0s4qKUAvQI^q-7}3lFerX>*Mp;Il zN;Ip1zq$_}qb#e|`RoOr9;QahW0YlY0Zx3L#Fd^qN6KTAWpuAfG=B#EJ)(*5IbL_6 zENe${paWGx{xYNKp3l)J%aTwT650z?8lk!8>t)#wpwFoQmJuSX4{>7aWf}SI_cIWg5On<{<0TNvvg^i+?I(k1DiLyyqm1z8>+3@BDJaX@aTiD$TLAKwFz~7|sQ&`WF9+bQ@4zU_@Y4!h91ql) zi6*oYbq9P3%CgsSLedWAfc$cr5=BovW!a<1wnW_p${Pk)prTK;Tb7q~U={KR+?bvTLZ|0AUh{GKsLS2ODMCN$iFQ z=YVKQG>%4DwooVR0MVvs9F4N<^9;f94iMcRjiXVP{XR<&(o^(Tqj5CKvKJ7_B;$u5 z`Z5|vqb$1#bubZnP!Wtq>$_`SmQi8A?B@m{8`6h84}=L75Lz8%RUOwLgAJt)9k{$h zrz-Ez0m(abkn#>4?z}^lz+B=c$}*?g30KcRu-ygb2S^ec=w(@~nuzEv#Q14oUNEqF zp}|Wfmuj{nwbP{2z<+4aNE3*SD9hs1*iP`t1w@6=v1ojiNSb&xHU@B_$-p&_XeMJI zXhd1&QRCKKBG#$|ehJag!V>lLvdpdyBen6eY^eH0TtrzW)Hxjz=F^9J1$I6tPfes6 z%{?EL(4ZQ11Yy{S5AtzJy(K&LV(=uGOZ364&*IbH^r;5qU*&kZ5&=Cv6$IX=aUKs& zbAsx9i#rb=Hwh)d>G{S=2y53P@>7nFZ z1b&I8&<7ilj1YIFseJE82uD-+dd!9c-?bx_$ zj9^BOh5OE^SUv_-r9w}N`BwXGuKC>=VDN<;L(h=Ko&uMmAazX_#;G_tiLse7JyDi$ zDBuv?mIv&bSW^Ewf^zAo$E>7;qz?%H$GE@XMvC@J&z^f|#0p8j!=dZ?)6h)Rfi<9^ z=hA&?Mm&k-T;Er?ny3ii1kC#;{4wDczKyR4N^45IM`mNzcfF9Y0hokpzSwXmNDz^} z*vc$~_t+(pT|DD{$u6FKpVG%??c$mDdv@`x`+Yk->o&)IXcy1G|8A#8-mCai=Qk9O z8^Hn>;SZ_BlWI2N83l5`t0WPEm_;B*Y`}(H|ByI{77%+%I-vsm(cori?n%fuQyp!vtr=H()=yV@v`<%hl22E9aBoh$#KGTt zBu;bi_a2D_4hl+h;&ewUzs_{jV-x1YnGSlMPgjaVb7GN$g3O#a+p&dTOC1zJ=EOM; ziWYO?T*rs}TJ9i+Hz!s&`1_B`b3I>?>O ziM0+1>sx-QAak!ALT}UT6Gj8@HX>r^>LE!4m_dM;0suA+qPJW2Y685A#5VN$gijd& zbp%)i-45L|xR5AT15in!GOSVheGs!+16f%Fb0)u@OjIiKkQ_In4MM}e z43QfxTtZ)A&?P^ccbt^9*VZ;m9;`DF zgRaqM&@30y8yjVkJS_y==&FDpjj~CD$~jG2Jq$6*DX^P1UF-UasN=<$6F~F-=NEc#4(EoQG)ABsibx1HRHT*t5he^{~h2D&*R2dY9}i5mT~NM=eMv^M&8d|*>r;DDoFNg^FMlzWN6?}yOdT*?bb8l(S^Ofq|v zG}_T0N0LMdN`M6TGiNYdi5Z5$X+B6|mLt&J=)WlMgD!RxOsu93aqTDB{srGlO-%4Z z5O@xuQim$n0h2Qt;-qEpoWf3NEO7?T)U+{t>`lDZiotk3NJuP;#UP6h_D}j8VU(6b znaGu%XopVIayiB}>3N!y7sD}=K1NKXAJSwg9*}R z=-Q&MjHS)gwMD8+D-_ydmOmofq!lScz#w+(2;x@kx|6t#$5zrxJ*#PdN(h*=Ii71U zP?d6ce%f3QKUtXNZs%9hjE78g2b6Y= z_=225-$+UO4j)KLGXgv9Mm~@gKjcrlnGY1@)ImqR6UM z=o?09hdAqyavur$Grs6LX03#kt>ojDodkbeIS9rc^0?c_a#I@ibvn6t(X#Bwe*Qx@X{OmB!G1db`HWpdHwlDXm7=%+U-Ul5PG;X

kl_~3KP8T1j$}U7n`Z^m?S(Mk|k?9*aX1g*5Nj&{pKG?xL zG_@N%m`bK2z!w~$5^v$lRa2}-?=_ma=BWOoV`7>;uzLgI=N-6F{(ytpq zTr%(#qCps4uc(+4`v|7zhZr29{oSCeff7Xeja>aAx2Esl1Cw%!6m%0Ovncds z)AXB#PMC$*rQf2IfLpQ)w%|oU`rXcB0GQ^&b(m>1WRXmEaK|A+H0gI=x}QWTazMKD zAGzWIQ$8iOKjvT5X39b0dVmj9Wdo`09vj)#q8y>E+&hTAPzECqhxGg86U1#cxV)Zz zzv~cjy9qU3`a?-11ydd)i~KZ!cC0E{i0br5Mv(V;lzmPN9v?wd5|n?%V(?_*FEQ{c zZ(A{VX4o2#W$*$l{pWnk2b7mh!2F624k~^`Q2KEmwht+jNr5jqX*-9R=UH5+aVtv9 zN`C2~CqmQ=Aeqq;3(rhHp(FvG_!dGgqlV{vHStF?F{tGOE%si-Q)9*|S00kJ@(U!{ zjMh=~wPdEeih#>#8}&Q}s)FsYjP_APH5!kJptRZO8m>f4GCGv6u~hX{pxi1^NEgnE zWz`?SnXcnQ_M1DWx#&mmGp?8T;_oSm{{`ulONNXEwUjsWF>0@(38jHeybKQtw)cgO(dbY1C84ci#LIYVPH|#qoh-=8ArQzDZd{Z z5zg0>II@(3Vkw-jqD}9D+7GY8E{@U+`e0UC(EAzXl0R~0e=?Y{q`#5Pf9-ex zOVho<7se$1ZBRD(ga?z(4T4t1;ytS+O`U<6FF3{^W6;bjqT$OW?L{al&pE!CBrsJ5 zM(|8(r-{!vuGi7@ltN6L{Bue;=WikaUx;If z8$mC&GpZ#A$@DVe_(zZ2R&taiiQMUN$8V8kh>*VD&1I1Ims_WAL3)046^x)Evk2j) zmjd>17hEba44XWR4v0UDB>+jtCjSKH9g|84UF?AOdOj$XN;GU|)}`ntjUexM!tsVn z$g$pFE##QrHjr=}XnUN+& z29RPYUpOjpbFxuRBHPSx(DQ(+W%C&b8#e(I=;we)Q%=LJ9P|ta5S~+*=WP%XEAFeQ z%uX_JAhG4Z3TAhp&w<2-1BWtu3i>sB1~Jyeg?|)7E__pj@J$iIH(yZrwn*VuMF@|+ z5FTGv7s3M~gr6Ue(jbwqj$I(#Lh<|dqgKoyB__(1q(q#23RZcF~Uvejo3B%`mRCYB9q})hVX5B zW!p=Dkw3~(jg%`(^QCNAzJ|$N3>Q@n(Z#}H4(pGVd)S17X$J}BqLIQ!Sl$bnAt{>+ zALGkUh*%zdvAj3DJV2!N39_vim&oPC!nl2$fUU+~jTwkIwhDYZ8k$xxd9s}Q8z^f& zHeHRz;!og%mVVk;8b3jE24n85=!>Nb0TDX~h?bry+dcuTXKC7W2#|QB6#ii1EifEL zKRPy7&ifsfT!!W7hjCbZH$F1ZiUH-jt&Ug{eX(R6D8!Ng(UR4&jZ#zJB}u_z*IdJr zuG7_(m`@wyD_knu!ka>0tgtD(0zk9^E**eHS)mte5q{)?Jp8=OPJYf~k{po(8=3tv z^sV&ud@Fs$e!d%L)?kUelVamI&MawPbrCc{@iAE9@$o41Q-{XmV~E7#<33PcipJw3 zLE`Z-1S!>x#^WPV;_*R0ACQF>5g*N1sCRs%N<2PRV#(!bJU-GSo~lk_d;`HKKGLO> zLTI7_g~K$o_%jfSl=&6Tey-3YsVAkOFBG~T6vAWxkwTLsn?;ROs1Y9uOxY6|B1~Mc zB37aNP=h*vFEcJ;8T7?6N5jhiM9YkmY?nhrJ$94k%WEmh5C`LcADx03+i-3Uiyev+ zU*aLK8~eHmE$%Jk{3^*q#hQF;Lp(j{qNC+ch71K#Pe7nAWH=p`0U(m0K(fuiOhbk# zNCombU4{bMtAlSZUWTA30az}?;ai*|xx%iAzF^P5QD_n%Vn0W+W%Svi$TW&=4$uqM z&cR`W^%edJ{`loy6PIC)!P|j(5c|9zjit7Mh6;c+K*`cVCA5=dqm47$FJLOF9gxaI zC?C>gebK9KgrlkS=(Zz%Rt3Eb$Da zd<1RSzhJ30X)v7-UtxS6Ej|GPj>M#POyar=M971_kf$?rYOK(bwenNdwc@fd$4 zuo>X{vcdP32%DfU_|}E_0z`aok!;uZ;cM9BmL7{=@&IV4Sc6)7jsRK}I-*tSDJb8~ z-iY0xFIL?YUKJo(b+2UGI*@kv8rtRlwg${cZ^Xwz6oA8WhcR}ylu0Qk%?>@H#Wz!~ z0l`a#2tSm1@+A5~g#BR=03s1^*@>Bv3dP2y1xnX`1x_We(f$61pdEb&_@_buzQubY zwurvqe>BV=AmV?IWE+WlPlLaHtVS@t2So9QAOZ#I7K8c25zNsS%uk1z14PUpmTadZ zgztN1Texp_Qas%WGKqg;6(&C@*f49!hM!`?2#$3JI6xmUt1pOG?ai|}F{sF|eP zlduvUz9T`vH~)(W`Op{gF$AQD9)L)`Ur4sE``A}_mB^9~Xcx@0p&w#?lfnGu2vCz*> z((TM|fP$}6YGJ{z;QVy=liG-7>9*#qz>=12YXGAe1~nUvM8jSxghJ!|CXYegQMH1|o3oYDCR|zTjRL z<_-{X$Hj$>8@?Km_qij%O)-OFY%I3I`Pw7+qA&Pv3iAbs_~P;!UprB`rPdUIxd0=2mY zs-pkdb7w=+@e*PZ2>G22ZV>6t#zFVl`VY~s`7>4@Pj@1)w1HqyskTb}0Jw*MD;GGPVwOTYN;{zC@yM%mG5~j) zBxWbq;6O412VTkS9q89q;09(H1<4+Gq00T}?NZ&3mSvM4)j_1iXcIoi$Fe!}XyE(k z-Gr7#adbJ4qYp4VjmB;NU*MoA&6vz>ug(D}Ia4!trbNWeAhgll*lTMEY)e5U*Kxx$ zZl*fj@^y+~`8sa-I@?N=NV=KG=ti{2mO5xizXyd5D6dnRFm9CMlQ7SV^U~HIk-Npl+?_rxB@B71CxAA!2 zW=n|R+RN3p!R&jXtOuZD{8T*{%K_VJ@E-gupktx4479-yV=x(=i8QzugJN_F(QJ=n z;<9qX5hyTlhk%mBhEs~A9tV~lGhGjk#%YxLTL9^K)SUuI{*!tVFnV}(C<1m0uvY;) z9)^jyW43d^(DO3xeHJXo4{z>ns0|yo{`zHX_epkg)ZSq0-wO2?A z$Ym5y+~H=Ilfx~+<`$w&m@)>ttszhshV5wF2TQpReh|F9p<+qC{-?Q~aIFi+=QX%@vi-dg)XM+yNy~@k`dx6Z&LqP^O zR$;7&p0LsH@+!nY+V{P=u*-IU?uRgUqYd7J!C7?PMq9KWgK5v=V1Qm?-w37Ft4A zOHYm7M?FQ8uwVLhWOKn$+7~Rt;w1oGj)iMTlKB|?2%S687F~hCv<>+914gf)EvD(m zF&!^&(3<2bVnA~~2KFCloLd|Y8!OsOA{s+n#t@e!+wegk+j+1svT;vUAOgGJlO{}H zm(Zf*pRoDBo4c|IMuT%~#SCd5)eVE&0iqwKoPsuO0|q4w7k;jm(gpY1#;3C<*qmAOGu#^i)+6X4P@OmSXfpJtzG zFLO@;g-QhULl#=5G&7Oow5j$sXPLVovC%DIt|VPa+ipq9ZAj9|-HJe^f( zDcfA>8fhas_B6h;$k%o>76qNADJKEtjc923IJ zVkR*{hV0Q1ZG0%-IIy(wVZCJ#?1uMO-VKtjzY&o*QY)>I6b8Z)LfZsRR-u9!cCN}E zJ$NID4Gt+TL*pY!A~IqN%s7f`HN^%Cr?|@8G4@s1z-YU)XbAC76~>`%nz0Y=3c6a- z!z*c1Q_MoH8>JLUcmf{HM3_>aGA18dg)8@REZAyXZ~m~=_+Aj?a)Vu@1et?$vt@Bn zEL;mIN{@=Nv5MlJTj+M*#>HvI&T;EfQ2aZIWG8{X9B6rY<+#ypoqS^{` zN*Pk-CWo6G)(6yS5~iDCh^;%?RGKB!Pab&*sd$T&NFgwdbffF3z%9YIQ(R;iY==xR z-H=Qnpot_S@C^DjTQkXINHim)9QOk0iCG%C`O*~mQu`9_q(zxP5UeoaDn4r#cbyco z@Ete+Hp^GR7h=e2ZUUe_D;8GpOiTH*JT+xFDRyRJZi-TnI6OsdN%W>*@e&?NP*}>J zKr^V!4Lp*ha4kSj1Da9h-Y%u6Q&Jd5&dK6hz_BqLS_Kr32*gT*XyFlJ9a==v7b(XK z3uS}~Lk%u2qEJGmD$Ou9!%ZnvHZN=OoWxl zK`HJsH}*(`^Ls-hmARmw+BKo}g?x_gTV8I7T0?x9tmr7~Wfi=X%W)4UZ7dG6Tr`C2 zs4Yq1=?Q#u++^ydnQUfaL1LSelG3GdQmWI9{4~r-a=CzCh7^lf#&;EY=E7-r`H(&d z^9t@`Tsqp|m3mBaM-`dC7sGuXB|T4Zx(nCy6bVHw*Mp10DJM6iLG;F{5)U~*iLHMS zU`^r30JJAMS8y=JCubpS*&Io`O~NLLO@Q{>BSis{*Geozr<1_3{8X zbgK^F3l29k*47IEigtu0>i{$?mmZU=#p!`xZ67uc4>LQggUtu$vT!Je!eLFacM*mn zd<}kYAuekp-6GPF)`c0v>UJY|*M}9tQ=iwK&oy$D9nM0ouz`Gn*g)=+C?qtdqIa=> zD*nPnjapi13%`N8Tdk}GsCG>xXw41@upQC^QY7>N>1hH#Exjnow>GLTN+)`uPe`v5 z`gN(h7r0y6gz7`xB=46aneCSk5%`e2Rfzy!Onz)KUYf7QmrAwzE=0+WU0ey!mF*;0 zJKu|eShGn2W|O`b1NwmU5P=`k_h5ieNGAz=Qs09C?v{4Q0Pm20AkzXr(D!1X_hS=M zEtef%yp|TI7O^Rrzk$2^f}2v=NNJ%uaxP}gF z-@u-bUL*8ty6gtHTl$*7UrR#&26(@G5O-nfL0$hk7|$leKXve2IU7QB(&w57B)XiC zwko(XJlcr*PaVviYi@)+zrAz)U+^9^VXm}Dt$aYj=LzW(x^zol(d8@XMDAoz$`+Xl zX0dyf+i?+epk7Urs8dji>$mu);PCsm{;6A)>s186^=h{Y*Xma9)FSnEr}nr8?Bm*N z8nCZvZ}!5zshuY5X|0>E-P#^gqYdQ={$kYn|@&i z(J#zr%#ke4nBO%6`>uJr1=#JD9hOM!4$CeJu)8exT7kXSdcPH;`>hXHBZ(fcK2O-^ ztzQ!MOY2v?uwPl9umSso?Rgup&)d$>=#1@pdnAkN?K|uM@30^01wLedl)#VLPxb8U6A9g(L0QPCesb1Jqj=vK4ua0ga>UO;3jF|gx8T8`BF!@du z*=r}6d~w+1Mi#kKJE8%51hxkDP3;33eW2|$VYJgEOl;8ZF+E@c_5m{SVwm_X8ogyY zL!&dgr48EmOdk>UBhxv;o-+wc8`v}E_sqb)XBH+lz&kAaECBB#6EB8|g>4P&1J-T= zck4zqz}%>dVbo`BnER~lEgLD*z`kXBhrsW^$e4S*{RTTmH^8n9kGGe5gU}d2+BRo zm1|%RJ3b)r2f8|SaL=*ugwn0jS#YOz#!S~8mh%p}o+mRb8t`bicyRQkP@m|PAO9cc z!~ef#yuMmz>Jb=NT0-_U;X-aIuV(6da7YYyP&!zm^6*~*&-&6Dae97bg$pdvT}9nN zNsdTy3M^51W>~@$O??*sQ7iQvm+BF?FCIdY|61Uf&s$!%L~uReIOqWMpyMI_XiGSx zQS0JMjhKGYLLPXMWLqRoqxtFq&=d3_N*0Uwa@fRa+63hjl2cLdG~bEC&tL{!sCy`( zF2SLN(CN3qla!B^An}NOD(XJdKAfRcCcI0*zJzO2eaU&si6iBd^DCE86u#sK!L?(>nxO(kE`fVppu3bGN!Hc3&)5?TbAUi>)1vebq(KS6wGvfSz=nashhE z^%X${*AxBL=5Tyq@f%|y!_nB|bU7aT+gNQ4GmUbo=VEuc0NLgGo=Xn8I6rB=F-@?2 zhvqK8+?VL`63tz!&)w+)WGBt-(C04bH5V(NbAI7;Ud;}sUCZ)P52g(}$nI9ZaBhlq ztyWD3(?Z#%F!WsPC$W7gKZ)&*jiuRdTjO)Q=oap+4by-UT-y zXE^6P=Y+k`+ZDSjR=1qkin_=Bm>U{@%zey*D&d&tc@IXc??g<0Cc}<|Mex4|6d@KOT3IL_eud z>m~ZJs0&kmRj|4~?>raEn5VBt_~_CJa`6fw(lC6dTjOtz$Chr6-ye@H?TRoA^_NJr#eJZp6>VZ|~(A;?_{z8h<1nx>b*W2Z)b>id3!p@Qw?uL#8O0o+R$lL-INjvnX8@gw z@0sv%$gCbRpEl!Q0ftT&hR=Nt^)BAM-EzA{z1{MbMSaV1y;a?Ay}_#PulZI4rLfLAh@?|7X0QrvIj)Dv;%G2RuwCmsel5)X|&8_y8qr#;9P_}N>8 z?P0h2FrpfH*8PQB{n~xIhrg#%*gbgAB}-r8C5nW9P#T())fMc_3U)SRHTsu#t;nkH zY7De@`s*8-C-~b|1ls&rIhonxRs=#>;!k1)v-H1_g+F$c75)or!7Thiz53QbgD(uq zYQUd%B*u)d5NK;?>1y<6Ef0i(0)jsXpH<)4I-#R|)%pqeOL<-ECah@d^4Bj9WUXju z7zmYgHjf;w92Lrv|Styvvh!Qh$2 zt@-WM6P?SyH-BI=Wz{#X`JdwDYiMoDqJ~|5d!B~*`Q-N2*7mk6ZmIu_%eRd`im(4j z%x}9u^V;BAUuV$QYoRDEH9(N_OmLw;vV`nJImFj5weUYtHXv3+L1r^$w_u3=te+3= z845H7{EdL({J`(HZ}c~zkDHFr`VN0E3`U?&Kx^v-=<0#!S;S||!XtJrqA|wnKR(7E zMQjTZTLaMZXYzW0qStSCKI|DNJjcgse)@BTz6SiIQsRdE4cVb@^zkmIK@8}ZT%hN} zFRKR}$014M3w730ss*k-)J~asd413?@B*Mu1GfoH_!GAw;Dl}nvOMUo?`&v}g!Soz zF%S5#F7Wb009yU6?VamEj&J1%h*%Ji9-6L@e_bR=FtDPnzC}Q|3Xv3i{&k_Yps%qN zV7!vy;MUd%oj@^dYy6!^&Y-{>FtHlU1*-=G4WtfwA4N_CU=!!(Ypf5|`{?g&`sgng z)`tS^WNsLWAAO`ID672#FnsX@?%mjlzbXt%tRoHK#Y(f`^cdnBl@U?kYhK$ACIDOn zgg-_Q)9|8}_7wn-4~-j#oiqh#7>{#Vl{JZJywXwjsgkC;wGpNQuO`K5>hw&LV$F2B zwGd9@_va!Hevsa_&qn@QwU z21sDMbf+8469}=8BO>_lg|f27XC-H4X~|4h)nqLtWxO_Klo*Ym72Kka#r5U5On%N^ zGI>K@%#%!8q`{igBxQm~8K&bhz24XG8x2fj`PhUZq~Ri7sZ*2}@W~HJZknt~CTNC! zPDuI3HIhjx&_-lwQgWuIrfAYM`iv>iRO|+QQ$;ULnPz30z}fQiu%^sP(3`2*lo*nG z2EP4)f2Pd4_ev=EXx0{wi;l+~jnUtyAaBU{8UQJc*y7mZZ`b~+OOe|WS`I_6yx4jbk)D3A? z9=Vpw_cFv%tOXve6nt$dUTyL;&1TBdfb+GwKmniP8h-^F); z*LPu~?I~XpOWRVdkmxeCSd%iSK%2*RPWG9hP2gL|($e5N1;qQL}5hDxfi@M6vt3&L}_Kh)EFenT;F-f74exZulFJzhsemE#_)1;AYpgNPJCaB+np^ zmPK37)Z$6!Ca-Cd=9;MGnTBX{hiNWTmNu7bCRcOK;8SU$r2yQam>c0N74Q;L&5awq z;r?dnF7&^-wjdL~coX!>97$`a0JqDu*(PbJhOb%y_yxR+RKLJ9Sc@4Btl|t2*Tnb1nUaS*a|)S#pOm|Q^O&X=@wlRMdqK6J?A{574PFN(hz z1q0Iu7venMqNHU*p`_RfT*u^S72_zmxJ>1gw+gW5TQshR})j0P?RlX-4*yAu?QuB@la5T*g&*T$GoGY{>Ea~uSgAn1^N&*Q$@tm#YqFe6Oa=qH{ zatNHref6=81zdHe@=TE%$sSWcX-4+Ic7F|5Xi=WsSU`@Lmdk@dnE-5_mO)frt(0Uf zKpL1O7U@jZqs9JSliW0U zNCBm9`l_hn=d-IXHrpHaS3aMn)0Z)oZP)Pm!W~9xQj(^QG^Kec@lldRP8+SPfqSQE zL$lFc2g55i?{SmUBa#x|9FJNz$sR!3;!tztKm{FQELK`s(7DrAkcdIJwTq9|UM@!+nxZfAx1R0^^Nx*WbGLLH}6JYpS zwuB>I(mZL}h;ie{h1^KubeyPgA;bZ$Gx#y1nr8B(t(xX}Oqr&1e%7d_E|W(awV0^6 zJJ7Pn5&jZnMf7(GZzJe=k*RF_yjZMzA&wsBbDDV=m$qCQf_X}+RDi!ZAW6PuRf`vf za`Jq>h(fZgI8ZV%7{Zf+lHvfcxuWRvwRbl9JK4OVrM{d=tf3iyY~A0&D@5j7wlI{3 z616eh^M`v)ED-bs{lOq=F<-DN*nz)E=5J(Gi{|+jE%eotEbuKXnH{EXVZB5tKxsDv z$f~G9)-QyB`18!O=a%@2D$C|n%`2&@Wx>EzsE}#ZmiC5KzNSt;2?Gw3#2(86CA0HO z*06-Zo)PQ^%To0#Lm@0Z%%nH`jMI0?+`829%`!brb3*)6ACO zgvLO93;tC2bUYLRgsSoBxRY8ld5wQuFwlxwE4&k`b46AL z8q`g%v9gn(c%xn$i6`1I%v42%vV-2ds6n)iBs?=-)C2p)RrwP zDfU%WSNST-s!EC$KTQ>N&pI)x{+Pt~RyFAAe`O+l947wPmw?H4CcYhqYxT z3t7$--Ub-pgVt%z`@y+(|>yygYuZ(2pDLUjiW? zzpbpv&5ceYZdTUNt&YF5LquIm3;jM~Uy5z1-rjG~+9%llT) zACIr^tZ!wJ`r#0`2;Hj%yITE35`t?(%noQL6uyDN!vx%U`rvoIj!-9J970dZ2LXIJ z)ZWr4?&JDvhL(llx0?uKLLuN*-?FxTePs6H zHW9mQY7P0;mJgkhhpl0IpXacjUt%wqT*Jc)?=dqMC(8^J*$_GL@E9*5XoD?3*%m zQa0&4*xrzv2bYA`c5yfBbF6Sj>F+0SqnupdLYNkhLR#_sh^)}w(!y}yaBo4br4+Iz zv>ZojIBXCzj6c%Qw}vyS36`c1>g~gr6ADrkhVZQ2FYJ%xHoHPt97>3ilOa?`2gL)h z|E3E>=QhR2?9u9msD^+Dt*sU;oa!aThAlZ^jc*>#3ge_2NDy8W41|P~Ys3kO9|{P&Ok*Hezr4jyM@6u! zgQ6aux2C?O%O8YANU!}}Ay9&{ML7E0B|f+urJv&JB~`-dd<$?SRg2vcW?o5cQE^di zkuYSVzomXXBHz~)BnN7uj{p;VN*5H(E8%1)thjse$60=Hn0K<$B^ADsrL|SQ;(2iF zrO=#_A?P60eZTn9s-k%~5*L&hF;HCXGQ0g5^bphnaNf(P^wNvlQm9DylRV zM}!iOXv*%WB=?FeZyB%9n15Xd$|=|@@*Ma1mUjhO5JYrT1^pqhoX}QHHJmAYc<3@w ztu;`>;>UV8Z8N4RofzBZE6i(9%&*grm&s*2t3Eg$*dCiAso0!|Tpc0iKYwQfp z^S3TU9o#2nwTS%`RnDniP*yuvH*^VhHIS=TMVyy-(%#^wV+Y1)*DL?lAU}BF?RrA$ ze};1v@mY8X4E;9w+WdaH1&F>VtgaVt!LH@e5{alS^b*wNUFw^+P@F#W2CzN^w?(Xy&+54XHO1@_1UO=` zrn(ZH#kdKB-stgr05^H-SSZlyM;X-G0V!%0l+@N<>MLDTH5&=8%I6C!xc}isr3ce% zM)B~RpLu-a;s`KOS7dRss0Nt{`dEx=cy_zLXk#P{pA zH++yAe&CyfsNU4$gUB7x0!h5#3)ke4x5${=Q;tCuIgH%wBa{)bgDPC)UODNL#BTvK{41<F z@shIQ+PQk&McbM^x2USBq>`6i^gfohmPfZ~NZ$O$)JOxpTqfeiHT+0Izfr5bw1z+2 z=8hQdSQQoTdJJA{CwdmWmWxd zRFT66h>r_C*)h~iDV@$Ys9&5P1DsjarKJO{!z=y>t(GmUgyDUQt7``^Ot@~LblYEv z6UF^K=Qy{dsD^4*L)=KO7$}tc9M`aWD=(%f1be5KFk2+}|Bt=zj<2dn-#_P`+j4VB zE~F3wgd36|orES;k`OMC0HLW^A)zG*AtnK-8j6Y?h!u403RbME>$>2sUGWQIfwh1Q zth<1qvGRMKnfKh>G;n{e|Ly(cxmJMYZA)7~lP9Q5wkuSZ3kI=ZY1pCDEJgr2`l zFPb~I7%Pjaf|8@z(XN@L0CX72HmWnFZQ}|{hiZLd=IjcXe98bUpHx+`V0sno(&jSQ z{J^Jci9HjN^&YH*G+lJ4mssXOz0`?QvlV6EakUQ=FTiyh&e~&wk@M=y(JO7Aku8}z$^pJLuE=e433MV$AtjTQpKpY1emWTYiGD}HtzrJ-cl|1sm`{k>ZT@uO^W7l%hfuZ z7E`lPy^!9_q6ZmeS|xc=b6uFcGs_l+>kvoD88g}E=*pmr&+ccZ=A4!@dQ494m=X1s zj`BuNqFWx8k($;45_;T)z`5MK3Qx39x$Uvpo;gLXyP`X8Iu@mkg@$cs!z{%D5e65T zt435u+Yps*UfF6RWxc9?o1U0+I(C)DVx~F?JB!UUYtET*Sh!MeiG=45_0^5#zxiM& z;~BJ>#`wZXSgW!JeQthn=akzItVm560m@T0A*By!un5tgCMznj$|$zOMvfjgQn$o; zrKNTIu#315z)G*A;H(?BVU^{r%+m;q7;A>Ak#L>^xsj`dBgTbGTt&w*Qq>iE3U5rp zN@jSBXtMe?UI4fA%~~irZCV#qMtR8v=ms#?n!kWcPg@>z!LE~sS3ugXP@u>NGpZ5N3w zR&Z&6JDpYb&QexnKcSX_vHOd0L(fB0jcP7_Jyi(r$|A`05-kmD^QVsCD54jNWi7YK z!C37TsQyF!W8a~4%Dw5VfqhPn)F$<%H}qL5P3&(V*V7l`UtNDldzm}FvgD*q;--3O zH8;T4d+9t37U+*lu{?(2;Bwd0`KVwlNICLgT!20MdBx3i_=vuDpJtYEM@-BsZG8TM zwplY7Vt$w%S<50<;w{C+g-bE1-pHU4QtP(L7Bd69{$oBfQdD&#@9U z1gDk5HtD%TjT!S7a5ar}N7v2Dy7fC5rBU9pg@caEm{(ji|AOhdr?(qm=?G`r5nozroyX z)|elkm8tp=-8G51Bla>DUDY`TEdDDVv_w6j)8zrlpfJTnv8Wa;=+!YmZ`(N8dO;@{!iF@N}UAOYeMyS&kMtKGk*o21a5;&vTGb>G;!I3_6^th?@P5BGZB+>84V%+dk zp&bl1`k>1hYTH@tkjikw9on?&)KV}uP%wkLpmau6i4ktnFvLZOz37i47)`2Q$ynG- z&e;hzcQ~lIF0gWOWtF{@AR7*|=G)r-ZFU^jf4K`8xoC0R##7W}!GuSmNQ=qtkeP!l@_Q)&Yf$5>8K$1n!nJT`%ftZZpgH6ZNTu$er#9r{<`3&}21JOYX{E zM!%+dmByP8l18%7Wl=8g)H@0>mmAKQ@(;0BK2M1>6;xB5tj865znG5* z$$U(2FI}i57{&AFt6eLedPDuf2|nyuK{i5?2w zPuOOs1zP`1lB)J~Ls!^zJiij#VTP(CGAb&I<#=0n&191k=_clMO%%U95mth@k;rPU z&+<*3T`_+_IY$w@vu?sNvJHtbh2uun9gyUqGF@M6lX~hbL-*0mFLBGZDR*9_cvYhC z=o5?yZ0Dbk(&eGXx(-C8OEd97E3^&Ou$4>XTqZniY_JW9^9nLGDzBKi5C^^Lb|)~j z3_u?Nz|lUaq!Onb;VXTlp8ZBvRWX4Y4m88Z6moh9$sw#psHK6ii`3$Py)4&hXrs{y zCk$bM8}jUxQEo3P*puJL=F3U1wreL%9WiDEPqpGG1=HQ=F(+0;9#K@wt;`&rKhl#C z+}kUvvi#Awnb+R}Q`15Oi|ni_D^vkQHfGFY^ClJ+j@6Y~)$Dq+d0kSdtg2n=bxGC2 zDY}96QiP*g&9=t>cu@Ean|}3Iqnhm}n%MNya~ySOF}&&0pwTz8ho-b_uV^;W+|cnf z+D}%+uWKZY3@k{f!>aa%T*C*l_36>@>YZ)7h%pkL&nT((dPsP}u1+9{0U?V3jjPIu zmu15n#t~+}F&1)hS{y^5TJFFZKF(z^W??f#RPuK=lm7$hWr;eS< z%?zCK1#?8jXxvrt=tHyWIqu-5PVi$z2?s{(PArJ$P6rLDcXUb}$EO=oBWF+bF{$$x z%!k#kEoaq%SHN1-ozn4-4ur?adP-npQOAn)IdL^9S6v&Ps?ULWZK!y{f5{LBl;+UK~P^W8^mM5Xr@ubS=JaoXLL!(DbRMi=Wt#vz^gf-B@ z@sVo|$~`ou5J&j18mAA8DYuCuCY(AN4NlLn^}-Y9z4a5Q_M@psWbTNxpr}LVcQr0c` z&roY4vcpnYg03rwc4^SEpNc7i^kYWkxo0^BYIkJnNY>a9V+(OoRN9DohDX&OPMRlS zE4IOQtZKS4?^K--gxL=wAe(q>DO}ULbz{G&dLWodJngQ}Y1u>Sz=?0FHmA2VzD+G>2a!BbF=e^ku`5b zDCg8Mlbe>V7RGr1y-$BB)tQ|0VZ(wa;KE}n9{5));mw+B_T&?VeF~Zn$DVrU_#%!# zUQk+90{!W8kjF6?o1Seon}Rvb&7{@Rk)HZ+)YN*g=ZWZR)Twj3`Zj(YM%`L8YmHvw zlNn#*4%D9a>E*L<6VYveF*n_{{zrDUY_Ls*J;rlqf7tOY)(7?KB2_UO*`w+;A-b2) z+XvWB(StSjBhY>ETrl^1In$iGpqVp!b+c16B-o~0yw}IFv2w;0>H5oOs<)!m74Beq z^iWf2?lr5PO_^xnc*V?Ul=%AAI-<5aiylLb>0E8ZGFmge57uAphdO9xN3LDT%5me^ zRL|4oSa;mrhsNUwkK`hjNb}af?0o^w_^9ng8Vf4jGI42qsM_9qRjH}p3Yt4ehBl)1 z0qQM%pdnPupRr&%W{=Vun%X?J+XH4F%FsF=&t+hrMyIg}Tb|~#J_KM};K(YUYvUZX zZ{MbCqMGLFXO6grEFqiiC=5ML)|)ZwdMu-ztkLpeMCe-Y1E}>{^ntT+lEJoZ!zX@F zf0}OE|7q!>dxCBI->4`wI2yD;u0~Kd>I4UDdxK9p@!?Vw4n`n3;f{@#h>+Q|!XH(<^C0CnO9O2D1EIHXi>M0RwnOR{!k0Je(EcD{}B0dZ!avGk@ME=>#n^7m{ zVU5}X_5mwrRxCs-QlX}o9Cwgst+$`dL|a)fx0$C)>rb2Q8DqrS1M;93YK(}d9aXMQ zxa%qN=%!{pFz`yTr;GEwkl%E>Lyx64s*f|Ov!}qLr?#5wFFh7c9)%rQy)7;(t6Rfm zXD*AlDlaI;l;Qa`?sXGDyDwRN%MYBM*c^SQnle@^sd{Xc?-ANS6UNm}i`*ma5XQfm#kb7BTK zF7d@ArMi{Yw^koC(@V~na13h%nMcOCaV9Z#>5*r__VfB#Fro%{KBl^ zI=M%V;r4lQyk?Zc=khyRIpfU)v$d6EwlR|(?aUNMN3*Nh-N8@HHuxdB@Xu)+Iu<5y zW68TWZ8wYWLW}s}Rk#rp`CVZhX%Cmtp&o}z=_ozy<}$kAer^Qa6Zelt(0y?Kc?3NG z_ua#Zb{Y8cvPvcEmIHTJg?V{ns`QKs^M`K~m&Ny|Mf@zhJI$^G+Sy~Q#SOm$uYWG% zI^0|tL2m&4Rs_xWqqftpAH|)^xC{T+M$q?xJ{Uo70UZph)nz;hdTs>$SI~Dw(0>R0 zc?A73=po@^a2aoaUL8Td1^V>}`k$ba(7yD~W$eSvv6W`7@jOC!S;b6<-w@UTTG`@uYqKNPZ zLEjcZQy%*VoBuobKMQ&k9Bg^D5&naro6jS{=YV#G{awaL(Ag0*<+Fd$Khqcse;4T0 zaIocKrV- z_b}pT@#TsUKZ|cxjQCmVJ&1J6*>TGYv>yrKs5oek)(8qoYQul-~APy_nx26R~idSwH8X9K!t zgvu%ZiU#zbKwpMB$!xVkiM|HU;gU{vwBP)`(#~%hbr``Yg+r`^^#%Lobd%&`ZnSmQ2jG? z=~a~5pZ`wgzXAL=kpHrDDpWGER64R$Lhubq`u0=*RlqD2GD`)`Qek_mu)TE_IB#w~ z(c#V0{~*zbzqd+DZ2jQbc#~0W~skV<&ty+>8(_0sDJI2*$srSYkKjxYTG zqpAJY;{08rPgI=0PxuLn^Y;lqL2>>*;eTXtPVM^#)|IL3kdIT#f1g@T&}scX;q3YU zu#^w@BZYH_`NL8^H485v`$Oet{lW6pvmt+=eqcZRq5A17@_(E0r4OUYFdB4S6`dvY^9(p&IZ0>s3m;W1C|0B7|iW$?Fj~a8kiHF0mJHrLm zsSC<3z@hr7)62_Y8fS+0KpJcl*;^yFbKUDAu-|9TK>mBr_WU=G8~pw=6G+W}7?DldK2bUu&xjgNCoZUMfD6juyLo>|kU<)=o(L>eKzjFUCyy5~Pe$V@I z^;To^FHysq#avvzO01g-9u!Q*nh4#q1-Z6ujllXf5eq2eiC8b>8n%UX!6`zYO$6UG z!5Ks>opB$6{By;~Fv(nnl~eGQ@C z7j$B6mHzz&R|@`(xET9gSWBh<6v1l2O@dr&rT>qDDOgJ-eVX7j;!=D+g^2hU5tkwT zz&6XV?g&i25bM)G>Vs>uRwB|#jKjVPkbKvQ|Bb{n!?;=eZxi>sh#d`Mlelv~f#J3Y z{WuW|mroH9&tC<%5mOA~c_QL_nHZ1#6!G67?r#y>7{+dKe_!195t9w$Q*r-X+`k4g z{)2)?=#HhyS|Z~AnTYrdl(mH=OeYcUULxGNpFui6#KLa8xF?BwJ7TI~1jRjF+&dGo z5ZhhcGsT_zAr?0328jC*VtdqEVi5b0M8r2r{MP_|7h#>5SZNshiPhLwK^-PNnTT@b zK8)2>?>8{~T+&^ze?aVpdP{`+B5}V9$ne~6q5I>+Oq2_;mtp)%{JDQZ|DTEdpeNLM ztFK|i0DY?rV-OK?W(aaW#2SqFh>VXo5cN#xY9jVjSBv|jK;I=OcjBdn@hWkRVeBAY zhH@sZG>or_mqY((n~ZOe;4DGzlUOqmFOl&Qha+BMHtM&yuO{ZAevA8+#2nOb@xNBw zFGPM*Rv=wO#D6v7Cp`o0HRS@sxCiYrWfAHTaS8N-Uss1lqYCv$XfCnRoon*MpkQY~ zs9d=Z5Cj;G9;k=Jp<0e3L$3ilus%(Bj+3DWVsG&;HTXFu!%@a{VU1|Iibj(#9Ei6g zah{>}fXT;ri7ZkgRHkr@;3UB*g0lqA6GWG!_|au3yj<`O!G{F@D)^k>{|UY)_@&@? zf(}#5ixcc1$nykDXO7@l!E*)Y2rd*{DR__Tb7VZ+OC(Zv#2CS3 z!A^p`1y2#o7n~|MPjHFg8o}!YxqnOfj|#ph__pACf*%PU5d22)TfrX$j|sX^PboKA zu%%#I!Onsw3l0?=E;w4SQ1A@FS%Q^hu}Mc?+bn`__^S}1dj;*C}_BJI^2SO!B&FY z?`Jww1UYV#?kbom*k5pnV6NaO!HI%X1?LJb5nLm9gWyYoy9GZK{8aEu!GnU|3H~hT zz&OZsdIe(y;{}ri(*(N<_7glsaHQaP!7~Jl1Z?yxIpki!Ak|N7Q9>V0l}9AcL;thctkLO0h#iX z1p5jO5u748P4EK2iv+J1{FC5c1phAhq2PW&M~sfoC)i1_r(nL|L_zLVGkpsMuM)gY z@BzWc1z!`~CHSS_VZj*eHB(-qU~j=ef~N_dE4V~(r6BjZ8U7x@zYD%9xL=Ta+~o7Y z5F)k`>?zn^aH8Oug69h^7F;WMz2IYlPYb>y_@UsBf)0FPlJTYpb`l&ZSSVO7xJd9$ z!TSZ@5&Tfl3B!$Y{ery(2MNv;oF{mr;BA603cewDMDS<9_HkN%hG0l=oZx)H3j}Wz zyiM>q!B+&o6g(^#2ZNO9Z!0)NFi&u%;5@;r1@9F+DEPf#4CZ2#mmruWI8g9Z!E*!` z3$75nMeuIH=LFvnd`s|<;4wkYc~v{O2L)dd+$s2t;8DSrnA0=GhYFq{SR}Yy@M6K+1vd-6Ah=!d z3&BHzUQCP_UqJ9A!5)J7g5w3}2`&&^CwP@NvPv3VtB?nV=hM5|kSw*h}za!6|~% z1Xl=NCU~FVqk_8x-xK^<(1|r4#*-mc)4JW;7x+J3T_tsv*14jUlkmiq2oD2aF$?&;Dv(g1UCrYCU}qFgMv>B zz99If;6A~x1%D9qbkgz12?hmw2o4q;DL7fMNU%)sO2JzM?-aaG@XvzJ3w|v)@FX37 zzTkMl(*(~JEEX>Por!SR;6+;NybN3+@s8T=08APiGx}qF_hCK7s=TPZ7)$ED$_h zutad4V5Q(f~(~%(9QLvZb5W&%crwL9MEEilZc)8#$f|~`O6#R$a z4#5uuzZCpl(AizePcTKWo8SP!5rPv1rwU#m_$R@a1m6<;Nbui+KM8t!h&}}S2o4h* zBY1}3EWt{_YQd`oHwfM<__*M6f^P`EC-{S)tEWy!E5Qze-312;h6E=GP7|CbxJ2+$ z!RrKX7kpIkDZ#%9z96_$@I%3`1ZxFdy>vR`1Um?J7aS-U5}YJBO>myz62VIauNAyq zaF5_;f`y)Ao!->Ucs*ge-L!{*73#( zrV92F94dIWV2NNAai(D`7WzTKM+ILLd|&Vr!Jh;Z`{;Pv3uX$QELbRbnqaBm)q>Xv zJ}9_L@SlQ*1-}<`_to)53nmM86Ff_>Sa6BpWrEiU-Y)o{;FE$|1z#83E%+I6gkgLs z^vV5nIzoaI1jdv0LhijnKOwl4=rD{ogx*7(V;CO@ek|_a2z^NK zJ8?JrYkrrYk64EJxzKF{Q^dV9(PbDtgzhhxLqxnI1oOrHRH4rhJXhRHg`Ou^K}0?- z68|d%ZzLk$w+Q_J5qyUPe-(G%$#6%yTNA4-s;n6?|3P-zGxd9>Klh|F!tn3c3bpc|IcIX+wm(5rX5y{Y=5xM8rQ==%qyP zzb*7$q5mcH4@9Kn7eU8B(1@o65$-Jo6U9AM=nTQG;@(f_fr6)q`zWFd&j|{BnqUzT z@@ERp5%&c`FBZH|+%FUQD#7(chgW~=Z5%P}-I){LU zoLC~<;{=n42%jPTS%Rk!5zla;ClbL|F1TFWFB80;2>y*i-$w-h8-n`s<=-hBHc3tONroHDE=!2uOT8G*9v_n5q#T;koS(be=PWKBKVI8 zZJna|I|=q7B3;7-#}L6kLFj2j$iGzZD#1Syk={E5Hxm*6qeRGiR@|Qxe31w_yTpI5 z;MYXNcSvYsnC43p%p^kI5W&$z@Q)Mv93ted7rasM0V2}3Mes>+e@*Z$!OsPMBqIG* zHW2Z}5D~tWU~3}cNf-Z2!J$N?Cs*hRMDQ&qLf%Sozglo35&X9a{V);y+XeqA?)wG5 zC4#?JXitvj?m3ENFH5$Q=1 zOef;%B6NQu@=+$ZRNOBSTu;PxgV1*o!T&N5@^^~+`+}bnaeX87k3{gd4QWgzB3u>` z>Fp-=%BEnY)ZWMfoh;%$E_>ACI!R>-O1^-EeoP9*d|F^h*EBLdZFVe-+Hm*ZdQS zs28URo+UU{&~3oKM9$ek{*xXZZiiRn_!y1X2)-d0&v50)FA?EjwkSGV=xc?(QRr<# zKQHt?p+6PcFm-r7>rHu`h3+o&0HKEnZS<^MJg=>E~=DlD<@@Wqjy>K&^+`NlV+ zXE9FN_r$B%K#)7DC!V~`nK-s5Uc<_OWY;8L^(BnjSp}hg#r&Rg=i_6P;ykl>!EF5s zyq+`EeNk~SUgT~F1y;U0ld&SKaNv!Pd^MVo6=kyr4^_u`y`irXYDd}RopSKb^{jI+aV1!By)&u@9JvVOjsay5WDYtEb zQMj^&o_hd%@T5D#lMhwK$Pn5B^7nd#EYjrV56hW~|3rLPK2l+@T%vxI*NzF1ALFG= zm|+T0b=2?kIJpt9;~fVY_vI_aoqXBaO}W_lMf0eaU+35QJuA#Fnn*amXW*W)?RYz* zVLW4J3hvYie=~8B&-VJXwQf7~B z-y+bF@|Hm!_fRO$kIR;~2KROt+#1u04dd_3sQhfd>p|Q1^y)YVXO;uP6ybMY#65j~ zTw)kO-pJ3EaS!Oo^u3OQuoTDi5$*Inje9!`ZjI!nSSyHduy40F;OhfL4QV2MuYfNy z-uDr2XSgw5RvkOuJ-DarOkDiUzY=pIRyO(3kJqPyHsAEuwH#qnJmmXE_-yxu;EVi` zhd&cH_C4uE;N!Cz_K)e~?-yK=`M}$`jB2RvgV)bD*LYOqZJZP7%# zF4H^d4Si<59q!q$P#)FEIPJQOTjS+-Fc+tX{A_tGK}YhfM*320Px#rlz4~MZBY%;U zzSsZz_wB3L1`h1qTf0p2T{L1$$fUyL$C9k0P|q(?l#6{EMi!&Jyh+9^$$aACEk>98 zoz7A#bl0JPk$Es+^xfHRj-z|WoqI}+E(JUGl;o#$=o+>ArqZ$B9qY60u*=F%*^oPS zw`)u0vpouW<}b}NYkCwc$#bkTLre4S2^wo}>m3Xo`~KHs&LDYC%D*Z7q|u!V7UwO= zGuMsp4gQdEts_W|Zw{p8uggdql~%9_zT3YrolEmN_cpH6z8@Y)8GS`CrJzIpVuUnO z@v5)jQt&b4jswa0w`L@dYO6w;YZpOoFl1auzrP;vYZT0-oxxg8?rs0~5i+w1&njT*q9O()9OD@@B zbT3R#;=V!WH}!D>hH1J4qjXR^dU3$oZU|!GGb5LvA1^03ZoPL z-~LFbHt)wg@6jELd`CZB61A_mp0lg<)k$qrf9{kqlhPHp<*k`Wu2DjH5+l*A^ zHf@p7ZRbwPUae&B+%tIe;tYf|&He)+*BP}Kns+#s=1mNl>l{J6giVE;Uiw(>*4?8* z?k&%Le(=&AwQI6Q27BiB8ttg*C1vS2`gjFi;g-5I&w=>-YZ+VNK}VDwrc*vb<@60^ zjJ9erP(v2yIgVag0q$$<(kwg}h+-%^L^~DYlwezgXe%LZQz1S(kW|nsH3_8(nWkCO znl*0i!QKW^yfiOW)wgX2#-N(>oo4B{*xm!U{)uwhjf>^|I4<_f?CUQVL^rR>mUt#E zyL=P#8Asp=XK2@yOSS|v+m^U$3J)3<(|hN6Z+#IRC_eA`FH-wFhzDkzht?Vo*7^eG zX0yhsajqwiH{XNsyQUUsvP`u@+ z8vesIp7N1_CsuBW&o|PH8YgOST*2Dfs{*^Gv@J1JDsFl@ZP^vM&K;>$&O=^VT7Ex!m-;|vL z5ts7MLHt`kE9x3DQZrS|l=tqAPYyg^8(*CRE~bw$y}IM81F2P-u1m|)J5WlV0XpP) z)gk6&Ksr`1>5!o4ESo>WZrquCw#c5xrlo^lqHQ`W2-#UtK$| z{Mh%se?j`D**&f+RDnMC%-u%kIXmw>kNHSFuf?HwZ}E8pLav%m<~&%N6vzpAuJ^8g zur^thc2SAWgFCe85$GV(b)C^|0m|q8+%tC$%O5Hw5G5s0wlg#2Q)OVL1w*UB&zz(! zd+d?h&dd95*CeDRP z+BGfBj&_YS)9$LBll9Vp^n!t*^nA9{5eJ}odq&48WWtA$Cxl$hALI3RI zX+K_wYwtJPqR|2hZ`!hLOwQqxtnJ?fqPKl#q+K3bmS=YS>u66Xu_p2UR_hCoR9D2+ z7->aQT%o9v*6Yxs%?E482NP<%kDyPQ5ZF9krPS!0eQ@21f7Uv)IVSAFow4nc&|lH_ zFW9j;-^kcpa6j7ftk9;>j-vxAqSoJw8nrmjI+|X&B+s|byWUgNdf!{M&b8>FQ#oQ7 z2RBqZQnwwp%qw!I@33&^#NDhNo^IWDnEjIaK9oCpPg=>o5~J5A(7$sn!(6n((GejW zHMz#Y3s+dUcj7*2>!8plJJHuyUQv*J_~NW9RGFAHm$MeHa~wSlwRoV)!#Vq`&J}z1 z)Ea^KG!y0P?6WF&`JNR8Mk+$1934UQLPt)mG-^Kh!rPnW7YG)7X+$Hh({!4i*u5}+ zp476|Qp>Urp1Wd7s157cHD;=|5i$=ttxtCBJMhDt!Y_0D{zI0#(?QFf-hWH(HuOKK z%i26rw2Xbx_0`i0tW?K(#$KFH9hfymkZ-NaK73OaQ$G!<*CUrB_|$Dd3oD?XrQ7?fu-y`YT~T@@1mD}IW%~V z=TLe~^!ib?&cT2CJl5ER>rc4W;3^75Z-_dSZe*vuQkxX?9LjSrlCuPNs3MhM$^(nc+T$`%-lvVkq^y{|W z$UM;wSb^3+D`0i zH*Z;zR~_10yQaTq9c`MEw9V1kI9RX}G3OYEyjF{v(y|vkHoy*UQ7okr*Jl$857TR{$5$#*rvqn`{|=s=B9?8&WLwv zy|<0p@x&oVhi7+Lh}VfU9FTYytoX~JG{n2Dy3ew+81rA zlfwP*%9YbXT~t53x3+sf^y-l8MK4L&4@0)yt9xzR2e#b*?Qr(kzT=exT30<(n)~h9 zTYE6wi`0D`za$U;`(mcHKKpRXj!X0W>x}j0(L0JM+enSBVJY@r*6NXpWk%NpJNMQ; z-`AVEw{}}PduNmh`t!ZDPxWPg-Ws}Q3%s|OHJ;%a_KE|0Yj5sbc%Q$)ax7nW$<{i~X`X-=&x#9G~P#kVDA8jeHh=H(-{9XtqGnMPLWn%wMzomcFx?H;%S zcWJmA5O}QgCfv7Q;Xah^@*c|bbqQ&U1M_LfSp}ZX!N*EAOgUf8mh>9KU5OG}EGMdWW(@6Vb!ITpP?Z)3R&RhXvExs9bzo z(iL%Kr=F!}8XJvn*#|$VzOnYoOxD%+RQ_K^|Av0AH+ntC87b>>jl(f3v<{5U7ae)z zA&i;+C-?syJ=(Lu=hS%goQy}`K(m-ZN-5m1|F7Wj1fNkn&j`;g^>{Ac|71bok&N;u z6wedFv!@(+k`elTK{sboA05UdkXYg zgPo?a`|rf~@KNB7(RYT&k*kZ1wK-~hK#i+r4aG>}AF+QUI4{C_gCmIbj`jWxl;K2e z{=Z`Kbl!h$fj9M9WqIjZzrMg)S9m1)d|i(p(Y35LaGPC^H|)OxW7zlSUq0%J@Yr-? zv1yNCstGj$X_JlT>Zkt>%DcC>}Gw7OHn<-&g&a(dD8e?>$t4l#C9R zsFIm2(zZcYT$9l0Ab06!jv6C%8pf$GU zS1ztoa1Fw>1Pg)7aFyfw6}HsRxN33j$Mq?$eYoDh^*XMXaXp3WNnD$7ZNO#QWf$Up zH7>qmpcvOETtjdTz?Fh49T(qQ;Kk*}<-qk%*kZeJ5pTqGz2FjH6)wI&1C3?su+thPYbcy54!ezs7f8n}Vxq zJ5PIUiZAuzl5JQ^h*jhIrjf4Dw5Q|pTcI>K4#mni)Ou&voQr(n2oQ2edEuE zHJIr~4T{M|4PNW`&g)>`V5$E317(5Hw&0KJ7__z0aRqsw-wX0HpSVKJsCU%PZE4S_ z*VYcnGP>pM*irj<=8bb$>TlI<$uvXueR#Ko>X=w zt;}4k4rJ|igz^q&2e%!LHISw_C+4cR|74ghHSz|IE~$iX$2)&=SviN``jeRjPKS}k zbh_8(9PX~t?%b^BWo`4@NNIVbv^wpKLdp~Kw`C-bPE@@h$|^v8xGT73sIAhL=>2lD z1EZn6oPf<0&yt*?N>W>%M(_=lZ?4PnHw)JoToZB8rjE23r}O(@jo&C-T8WS3mGfoN zGiP8UvK*gk(cfB9-_e2$es?99r$50PoM?Y7Xi)IfvL2J{fI)6=2K6UJS(lm%Grw%^ z;-ExV8O-V*#JB5$eR>D+%^)SBCnA_WvlJiC31-Y)(6d=Ng_Og$d&y@}!M~ua9A8k! zjY>*5OU=tTwM;&mrvhMK)K1vU8O%bnao5Xt*@Ah+Gb@7gX9eZ^bCto0dO7%wa@2RU z@U7rr1-=E?NQC`*@!#-nzGmY)D`W1IbAov+Cl+>4e}t`cepwK&Gz+Sa_jIp|xNO1P zxk3HCxZ~(T%N$*%K8y(&i|5WSngN4p$xPOThVf+RPmwiIm$V#}hM6eQ?m?(keKNT+ zh(OJkg$@_4GAeW9>t`-w?xOBN)Nx(2RnAefy6d#@?Qb(t(-xgDjs{YDp!SEW7*xrR zyANWOg`j5ISw&H4NW0W(rUkjul`%nPgD*gQIB}e096Vf3oD%-lrLsAS1#_#EwwmcDbh%QVh*;d9W`>=MDk_Q=pFp4WiTi| zE}bUz5vry>C>zX0%~v&8*MD6Xj+?*cWtE0o6yE&*Uy)ZeYbwsD1c%z0kE|JRWh*;w zT9uBmsl4-oK$htc$|!}KUvspKhcb= zu+sF0d1uW>VIDV6Cy=Ati|#1!a@CoO{y*h4RWX`rcYOV=G*kUy#i<+)PSoy7%cjq- zKyAhVhA$36osGtjaP{DxOI7*K(F?Apt{_k>TiOx=2bN% zrx`ui{SWm~*NL1+50mQppK$+BzmcN?pCIj&@mo8u-;$o@5~AO6yg2w<`Y)y_Ea!Lj zUtxVTD4hQ&FLi0KYl#|H`61U6wUNkSvvCrRUr(FS!++4eX5dqgh;{0`SyO4Q&1Ta& zew@Qgg0zE`bvJwFiEWYdG15)PN4bOe<-vKg zfpq#whz>(i*5x1__kUatLU^pnR5GY^vkxY;pYz}zXY`pRJ6l}(=+ z;dsLG4!4hqBk&4lnghqzPc!+k+l8*;(mM1I(wwcP?L)khTiJ9cidS`<)8~~12L(gg zw1Q1oiLb+;XjOE&oGK$~01I8&U8u#)^t-d0{GREF(h@3N1k;Wc%#Ku9*rjEN@qAr? z$BA!V(IT`-`$NJfiYsqy5Qz*TP&l&bMP;;)i#cs#1DS~tt6tYKzhYidm2E>K0{pgY zc2;L&O=inOuIhGJL)x;*RlOPrC*x*Co7Fs^w&j5i)r+uJwdH}RYQFbw%fm_4Q=)+g zU+yQ}xjH=_cwcPw>%`5z>e~{C-fG6vOuiRXmCmhHABQ3ne*fcx-BL0257i6H7Rz_) z+#z-D#q~eE|M7aKuK%a!|LOUE^}sf|{@8x*e|r9(o{c-E8iva-VZs>3S;@l<9B~Z4yKoH6z$;fjH=5o*<>0DHfa(Bc0z}r2M@%#Big|~1J z{`KgfRAIt1DybC%b?`bLz*9=u-XSBQ_`kr#`V1-Z4UM`TL5;o@Gv^t;QxxGeynK(g zZ&yDr-D8gU!s{|bnR_M--u^~qM}zt zGcQrmtD~91sOZbZ{i^6El>gf39SYY)f1_}Hv@?l(HPLMqUKc$=;f>Kn3O7VAQg}=B zwF>_fy+z@z(H|+iJ=)QR;qQu0S9ovq$qF||=PA4|`gDc&M_-`uf#?kiAB=uh;lt5y zDclnMgTf<;+~bXk{vq*FNyzB_-o=Og~t+K1ExhAW?}$O z#q=&Jt~C6G6QHfDkpJbVxDMWkN5NURjRN2G^x%znj2wyE{m{t6^x%zn49!Dfv$$TS zhblK6$AJ6bxEt3;^x%!rdq(L(Bl-!xB#6rA2dI^Y_6_BsQa|nsl?_IjMt515i%QGZ z6;l`(j_T!p8=f1idKk9!t^JKT#hP%GVip%Im&X`k8 z|5cdvj2tikkAowvo8USs(S_%Aa5H)s(lQ6kJ-+rK;B@n%&N%#tllgqH{03Z35=M{x zNNUUsb33YCHt0v;^Q`Ubq#&cS5-`*B`~{*Jh_9Ug$mVg}Krx*=L3+$AGqEeG#?5fy zYvx_xSFuF$%r+DGX>s!K*g+Ta+zvwXxKvzo%$Avw+FbaL4a;GE4A)c0SzCHiYd zvk_jm+ae5?O2tj4XPczrFYww{7g~AWVtRH;0`|abZ(Zn;fyl${riTylQ+O@B_|c(A zohqKYQEF(ki2|@tK+iaum-Kre_M85am1o|35d7vk2ov%+pZXAkDJ_{_i!Aqj;V*JqeIO zIY;2nm*Gd|D>WT*o-;lFl=_t9MaP9JQa_641=I5esv+eJf&WPIMCiwFLe49u=MwlY z0^cG_*@Uj(m<>8)!1fTvMo_n6BO?nXFnqDQ#SJJ=B!isdu27!UV7 z1Mk+tYJ zT;%Bv{~_dQkS3R63^+XAlQrY1VB%Z<8>Oro-DON`ho>!uTx#b+Fx?oIxP{4ML@Its zgbI@C@VtX=i$NX%`)gs@%?Ii3@LYhl&LE$H{fA~^FSsLT7vuE}i)L z5g4u*)Ww(~4o^~!=FSG^ndDYFsn0DrP(eZtPbsv+2r9vTRWlJp2ASaSY)5NjkbA)X zOf#`an$B=|?$6fTZ-MiRW+E_L)36*Dv)JM3)kPPU19U4~jY?H9Ug+>FJ4rKk1JhtK zHmq;$S*oiXo*OeX<76<+XiB1DT;uTk4JIzjc{!M_YDyws6&iCDR3?4hJz#pWDT#`4 zy~C3&RsH|Kw6`gVB}iM$4Gzygkyb`s3nnkhvQe%TV^ZUy5ZoiZfFSSh>Q;W8cm zWlix6vtkP|ERp9@_^&6=^B}Ywmx?RLYB>U3HRHM;{!fPG@Xko=3}Y~MfR#wKjp2uM zMp}1aN^%j{$4;GGF6z7)`5ef9DW~Nk4w_}@(6utl&Vcky2(8RAzPenQWhTr)+bl~! z*YOHGy1^|Amy<-;ESoS)Yil%oCfmLZ%(6|HTEaZ|FS21pK#=XEz8fCv29Dh7y>-J@EfDEQk3qT-*Dh%EBzOvS7!;h8_2QE zvSTn;7*`yy4K7{IVY6&GY7D)5!)pM&nWZ|jtT$>2y(hry^t#ZtS++$IP!6w!b)jvu z%qJ?p23{NN(4te@Ec+HUgfZ~@A%C+)2#;-+Wx)(0&%5xa`4w3snJ&o20X*g%eLmc7+W50T%){}=M;ns1wBkE3dEyiJ6C z(hird`C^vchM}Vu9EZ^(tPee6i&=&WVN8T~FFt;sHj@h*bQN2-_^Xzq1Z93hc!UqH^7Q5SV2t=!K}{rC?v%Oe}R~+1*1l z_hxYZt(gew%(7ci|0(-ja2{$#w&cJz%i5vZFo+M$i(8Y&$$<(2v+QMzkPI>u>=PM8 zX}*4@>&&v=S(=+Ye04Js)R|>(_SdC)6F4`AWrx)-j4;d27skJX>CLd%2u9m1y9*;F zoxcLpPfba*&9dznA;}mIt1BH>qk3YSWv_SAj6=aRmW&N+o^6)(6UJF!TG*6C+bru2 zTY*tu1EyP>l4zS{7xdPQPl4&>rX<>C**Vh7eFP?cd8bhtZL{op%!C=W5B+;Gu7-r-!eBVW4;5|B=n(I7Bhp zENkhEt%02H;PNBL}?f6AG-+t5F4QH;nYUf~054@~6-pqz8*I(;ac^!S>r2lnw;I^1+jJ|zV z43~MiMC)J#>L1?zjPBa!vSRkaiOaSU=Zom2d>>n}Un2-taU&Kb+a2o%zfMk-cdqQJ zASym1xO*t3Z3|4MU z*NPq4wxo#cP3IdXeLp%{a1~kSYQ}eHkG`S0cyi9hJjFN6(SobW4k*nqf@hr!r-iXB zf(p8-6!OmSQ4xb4h5x%PIlsR|9apU}~sZnu-{tFb2_pAMnxCwsNvZ%O8epaTaxXFI*e|V=O^7uKeMvFP|~6Q|H&HXJ&b zjyq6Lewq^<9D%AQh$TypTSzwF9Ifv&vseS|w7 zN0hFd-gf1kk0X_jq^~F4)JVskwJQg$uDtUt!d+BCvY#Jxi%MwgzZ~eDgUlxMip@q1 zN*&5}n?YCyAS-FCe=P0|D+7Z|(u5Wi;j}J=&XUem1h(R+=%n-0 zo&eu$-aC^n^qiT3&yhQmRyjxFrdwO2a5aOPMz`07VsfeO&2BIC$4Z*IcXWFz6;_kF zx4Nae(EF%+XSc4n|4`k#x}6IVpQ?Lzw{ab?hRS<~r`u;}nYGG2sXAG6rJv;g-}%i;OpXRNuHXOkjE-;B?cA)VUL|AZ56BqH8nVZLzrLa94GN zD&0@R#pxc9is9bPh}`Z+&@X!2cQYDy6~sriIt|0bv17+BG7>2?=~grF7~IG4(-w?j zlNn+RPoi2H?!Tc!G2H{8OozKG?yXkC(^cqWMj`_wy<`Rwz@E6BxqHp*It@e$31`xq zrgu50*h`qzx6D>dI5?l~3389w{c>`Wa3+0ddhaD?Evi-0J~L&K=Dc|T$Ye(=wz^?xr>6X|e`R6y z(^MdqpGHj@qN(^;en2Y;!yC&wDRu+0o)mH7WtEq@RP^LTb-Q z^r1MCZg!;3hm)V~DRl8B-R1CZ0u>uT153Kc5xoGCjo59d)kzO(%8Y%Qs(M_<>NL9W zE5ja2Z8I=ta4L%9JoL_ndmn}u)7=*y4)@t3SnM~TNS*FJnJo5yAvtdMnNY09-DMz) z{S;J$DEA!b#pj-a_7&~^0>b?6Jk+`t?mlpdagXVZ#JICq|J*6iSxfiNFr-_#U&nkh zu2l#8*Hwl|YBSdiFe`~KK!I)Mn;lPuxD*ocZK_OfHK^D*7^T}RG!v)*BQ_cm+blC< zS(Uv;;^_>x(M-GwoWAw=mvuTk?#GQI8|)6|)j`tmjl%!LLvU?##LRjYL<))cHnpbr zJ5aG(P@-*ql;#)PZy2awH09K>nhuGz%O#kbDQza788b8uN}7(ahWn6*+I&8W+H@pQ zo1dX}Io*jU3zz#T7)oyU(34n?lqN7jI6_W+=;OwG92c$(tE17z#Ii(Cb;eX@$%(T&u^R z7?U?&B5MxbyaYX3ys4&&AhOjQcAsEgmJsz!3Ht{MR&(Szoce9R1Ppa>G)WT(UX0>fPeZ6v!LE!hb1 zW-COP>~XZDm(%d&0}@|{mXptNbbFV9NqCc|I=l|_QL&vFxX2OD>S)AnLKl`??1;|> z;Y82JOq4r1#DX)0gfqFy;pKcG)`NDEyim76#Lx?6l)T5$eIPkWIFt7|yr+?K6_S(PWc2BKm8Nvkkq!LcMe>vM^S)nD_X86Z(p33H`-p>l3zA-TGzuSYP+@N z8z8)~ul53An2Pepu4W7!%$8rnFA)1228Fgcnu^!$dKEkz>fajP@t@&io_tr~*2nSO z$LLijz~~e+Ods3r72D0hir`QrM@j?>;@|x?-+?e6?;swP!nX^zJ~#e(W6;I5yQ-T5 zJ$nN0z3tX{yMnOT>$a=Wnzc@Y*4tgD2q?BH57g^@`ZEmg{q1&m&tsTqw5xV+w&2iY zSo0|PZACb&S5Tzwc6T6`(}?>HF)zh!Jo*m&x)h^Y+LPhZqy3F?R0rrzl!_Sa$WO@ge674bkFXDc}V)QNT6D+!C zGeZ6-fR{rq3+Tkv3YQmGOI)x;)r*gVKqOHG_D+J5J6xRA7i~X*_udYddHE$sYt&$P zTp=2x`Z}x=jdl4unvcq0hudPV1F!pi=)-g`K!P0ZClStaw?-p(y0b^1V`()T2|>Sd z%l|^G^zyNcFjw;lJs&l&Ht?-|7Aw#o%rAA*!Gj!hjt<4BU<| z-dDTeeqZKc+$ZopslylET$HZGF}K54dH}Zg1-cH0Q<+q!^&ow|(*uSo)egU?e8tB` zBefk2GlK$>jJVEVpMYCE=KDC7_v1S_g8SnqKn8oteoNsP{4#-`&}HK0K8nsG_%G#O zjo+evc_`E1VdX%L&ntxDgAOyHQbI6P4BC?sber+Tbi630EElBDOvqL|Wp6{d!5HmZ zU43E9V8+=>(>NhF1+_0#+v#0i$Gz)zNK5S#!_QF;zGN6w+7ly>;r_u*#eRs&A613e1bbl(k)BTzmnRcfBq6>eSl(R&?ebj(Ty z+K3wBzDLFMCBmDAcRR{0b(}So><^t{vrmqBgzRNQz&;rrw&8A#u@3ATAu;s~>uUHW z^ro6qUkr>zeX%Zrf9fmIoPQaX1BH_Mnj)MQ4Zqaw(Q2w@J(~mK{}kb~&L^=mg*xzC zk5Ry`*34VL+K2%p_3aK!bG)?`%_a5Sj!aRK^)wUkffCTpnu6F;_bDR9@V?~%^^wId za3(nVp%!&)9jId3o{7VjTAQRU&?;&py*egaTu1E3udt+bR&y-leHVrUaHe%pbTD~y z6o~GMNJ`#|(Lb%1B5oVBFtwz)3^)V9ZYIOSUO( z6N2%`W!m6C57;r*q!#cQD%!dL%|GoF(H0Hkv|*wxsxB>CYs>JqK($TFvA#mW6aI}( zz@L^ED5JEw_?H%n@5lUEd*PEdGCl`{(|QGQr;UnN^Jc@lCkNDMYarMs9zst$ zOH}7XYYChZE=B$7oOWv9JfIbezBO%17v3Aza%TQ4ML4ZzQD|xBD#B~UQOQM$@LNN` zoHj#EO#@aNRL!*6x(l#AL3>G?qlhG{jKn-ew6mNPU9O0r^*l9EsfcvL$8>tH915o@ z>pdp$EYz`OX%_^t(Qd4hS)$9OCo<85(pD+Lw7x-WNxMQ34(k%6KkaHoSk`>>o@v*& zVR)zYuZ|#YQjvKr7J1suome=2>nNq&+KJ_!WDQ~h@90#Hyro;SnZvu2M?kd1sXq9R>n_yQ;ZAM3a`n(j|p%OG;T#|eo> zdREMgbc}hpcfW@;81Cngd((X_T0Hs*u0W;tbDRe6IHva&+~~1U{dXJwOW`ts-xWXfQZJ6od%!TN5o{Zr5T}u_6Rp&lerDiXa9X#b9i^WwgK{P2KI!M^LD}%~ z!_(>KTCagEp%&#mIel8-Bt&A(iH1k9$|hhuzZYawIbrJ z(Xjr~FK$mMoel3JsKM!%SWyU*a08?V($@rTqJUqi%F9I!>`~IMQ0mv6ar%{ta9io9 zJ?U2|Hm}7wc>2{^Cs<^Ixb$nRe2Vr#kN)&^fqzo;AXr%Gwu$y0db{*%RT!r=rZWg_ zuX&9wcuT7`9MW%%`4s`(e?b>uxKBa`O!qDrRH%aFNx$_B%1u~@BI%rdM_>%bQL7{K zd}p+pZCF<_DR(KtX;o9#cl%f&yjD5$e@_DKR+Jniq~GiCK|sRmki0v6bAVrEwN7V| zK9Isx7#5e=(jQKunw(ZE^d0GswP%%$w|d8dc(Of%Bv~~95Kp)H1w_#D`9M6|HXm%A zts7X8o>O_g%UXfqI{gJjY_j;N==7IW=kS2V?>nZy7Q^gpG2-x&KZBPldeiW+GRL(* zB6-=4EPHQnROj>^))X)&cSMm`!1Tyjhn^AeK`_kYUYN1wrRCUf6 zDK(hYIb)O}ysA29j8=r-@D8W=d}}rYBz%KpCuI}`_!x<*4jD6~r{hQCGG^(X&dNlA zW$3=hX~m=3W$3=hYu!p=cK2hTt!7B~W1WtEKch@V3NF_G@=(Wb8nPn{R##{%i7n49#Coz0bwfu}# zDxTHW*JN9xh&5IX#AN8O;bM86kCgdFgBq0HALV`RK0s&D0 z2@oIl8A}~Y{W;VRTFWpF zV`<0wV=VR0SjPE%ziaPv?zzdmRR5#id~Wt$`?2=gYp=cb+H3D~Zn0YKzH0sGdH}mc zyzjTZk7c`fPwrq)xT`b=rcLp~#pK5Zv-FQ(cJU)2?iOG_JZ%H|xW-P0E*8Cko{e2JP@TYJ#+vJ9rL9GT9wxU4$MJ^17c(5^9O~ktIQN`#8xqn z-U!*38u@!L6RjaCubX+YA!W=+qHu=}LUUX-M^3KxGQSoLtA8wG@v$udc+{jN(ZWd7a-3+N@!! z=zU&Mh2}3q$Q!Qmz896JxtfPn*UC`^eil{02$fP1eki98|H3TcSLi7i97UHU^^cL% zF0M2mNNO^)hbo)@8w`mRQrNFzvd00V;$BEw5!Q|C-Qof28>4<5@xLoSEiC+C%t)ec z&mWH})?9^-mo@_Ahf%*Dyc$=$j|swDiADZ#T?r8EG?F?IpL#ol`5OCQU|~_t_|UwK zWOH8~)jOZ{y2h?$d>D{p{V|IA()jMjHAG$yxEkM#{7l?hvD1m+Ucg_(cVZdR+ECH4 z?nI5^|G~d)05e*FbAg@8qpC+yZZGR!hW1@(%dFv@sUW_obZ#uNucF%|u=|$Gq_=PYci73ZNE^mr(QL94prdbQ(Krp&*6l_J#P82bc z(lOgoI3!vB0gx;f?J^EW0B#}~Es1N4lrA@s9FoKkEMLT@@)sksZ2sOU2afMeI0b~} zzSn8aa_F<{I<{j&cU(r_WSEDlVJ=2m0lpd3``K#ft_3_DUm5z}0*Pa#xI_OTz`O^+ z!dZx9w3lG`jg)s0pZXij$Uj+4(-fO|7wmwr`Ks$QoBw19n{NRZZo;={DwO7B>n7&Y z>)*k&d%>~)wr=9A`v%~@!dHglf2?8--YbA##5c8SIB?s=hYL7s=A_;XKA3hfk2V6k zSIfZ61X{=10d*{Ml0VO!c@Kyhi;4~aVQQL>sfa74CVEUo5}AtNDb#eC%E=YzGt}%# zBUe*I)NkK_LWqq3cJlpN(_9W}jDly8u4I}cE8HV>!o6Z6Wg_B|NE#*a4kM)k@u{!F zJb2mq1)}WyYAi)LAjjPI$Slp$m#unAu45U-AHkNQMOa^dZhfBYy9H^r_zL@eVTscE zN5DVAR~U2M_`NF$XiyDr``}(jf7xps78>)M&7a#j-sZ21YGs@ z76{5bjZA9I*IcxJ@S#OqpkZ>L3Yf+PFy=Sbb%kJ3 z_9diVM)n8z<}jnsUIAqejV^Y2*86>Oq6K@8UcyZHY?S=q@bc_bB#JgRC2A5q%Z#7JM`Q z6avLc+TI8J2Ga^*%ciI_K2+3{hxC6UuQ~wPcj!bKqY*=<5*^)u~a=1E- zp`YR?zCNKH0<0pmL*@hhUzC9sOAfJa3Syezn|UYjQ6Sz$(<02He8P;l5{NlqxRNs@ zQ6LaJj+(IqVw5GzXfKdvCV|(5h%CjLBG|9;VMknH-{4_K60swgh?;)vYK~x)zAAz~ zZxYJ>0*sm0Vob2aN4FV$x((kPIO~jz%mUmiu!a%k8%TT#-;CeEiY~FTc!;wHBXx!m5pXG>6N!E#K6 zyx*hj#tO9i<-t@v<8v`M-$cc4;G1bdhrw>Wlp_MtmwoxOXn+pT&uk;COaBMbpt zV@({1F8vUd592Et7^0i3k<_m*Q2}$#cfuW*F(e=If+22dWa;FbDNd$kgtb& z#m35U2c~viU?X)X`Oih5mywh_9#RWDg2U^zz0nILgDf0 zOA!k5_}cZ&^UyXgNA0nSxpR0J?e1pVhk#)`+8%@g()QPU!-cqNd#l$rlGygwtc2J4 zwe7A%Uqji>PsinjuQPiV zt(f~BsMX8M>!uhpKLBmt!&jD*D8&9V_?8}XI(<3CJUKVAg!C*y(IW`-L+_5^i4e)V%^Nxb3f38L*RY+<; z6xu}C@Wb%UdWm>2dZHT8sB#t%nn4>6U0@6GrR_o#0K$v_#t0| zeosJl1bbdR>IK->_w)E06vOFY`WgE9_xNUvgE28nrCkDifob%8+!`3kxtj<4x%g(j zgf!~!`bC;2#ercL0E@E%aYf=S9*IaIiN%40cl!yNE5^kU5;J>H280-Y>tdhi!;ZMZ zzQe3EYQzY-!-^y}QWZ$(L(Ryr zicD3x_<`6)Hifm*MSN2r*W(T13h`JEF_MV*ra;2jD8vy*&P_h-`%s3Q|D}t)&qp@m z3VW@G9ZAIA7f5))hg}N?mXzLCQos|~8GVsP#_X%bvI)rs45UI$?9zHoQ$bd=o(JikSYSooNRl`pU<#JzlClaa6p1?aa$roH=%MnFjxpD(zl-2}NGSSKMoEUIGW( zl{DXw?WOC%2qYdueN4!^!2)gyA4Z#8v-^-X7R1nY__0pg1pDEJK%(@f&!&Bu7&3CF z>r%hgrDU}aB+g-vh#|7Yr>YQF(zwZ! zMkG-hw*(USRI9IR%avNZq=j*dD~z6wHl~x4C2l)Ad^#9$)z0HyJ4j+XcxS?!sO4+N zbB^xl*Mg@Qj7&aEzzIBcsqWOCK>7v1qTCQyjh*lsLlPU?gT_!Z(wI!EJ^k8&65Wq= z>N~(K*6F^$#D{BP#(>OU;hXb)WC|xA4P<(aBCZ;};5CXQHu`8Fp&ClsZ4@Kt_3%-* zWsshE7Pu!Pl2W75f7^#1afLnyc9~klkVN#~4kV;Ox?J@BHRanbdT)sG=)LK48+ba9 z>d}w5YG97n0Fv0i(}9E#NOK$TR!MvJo19|Ulbv>#$fw-~!9xBvQ#IHo*1}JeweTOn z^Y8d(c4esX`-4l$kA1>|xFThPM+%Zi%8vsHdr;FQWeVq*mGon`)krtn(D=VCL*uj- z{zX{}$>34~zInTm*@a9Q!;`+*fVgUSm)9_o*zn0f!i&B!^d`E!`>fmdlP(opUodmV zU?^X8TRH7(1##8N5w8^_v6a(UU!vxmbnmo_*y~=xT6AM2JdfT4&p^UtG$>vAy^oiO ztH#cHjUkDR{XUQ|8?_?5jELp$`?ZLM)rxE+jK%2jFb^$Tn|1+>k$VufABC zoB)rgxq>^x$+U!yn5%gSF_}KC=geHD7xRSYbEqi0h)zVhxi$$Ke(E!<5m#(D3>BZu z!x^NI3vk@>Am^m%TmT^I194UMv|AP_Qdarq*qm&m#u_Q4SsZq3S`u4~lv@z*xoSRa zxb0?25W_^f%zP55(!K5G5_T_{-ne_z*2q}1VKl5)Gj$e-fOKvGW#+y`P~mb0QfJO% z4L)U`hi}FP==T+Bqx1maolKj7Gmw=k?K!}Fql9d|5hwAL5E77eJWOK1d=@5YSqUNRf!_n#hhsR(Wb2)8KzL z@p<#w|BF^+mEVTxd^f&&mEXE0mmW;6@+VP*@-0s5Ku^eB^dqmHS!uyf(cYuC`Z{Z^VevZgL5!era z%g}2Co&jKF0wn;fN}& zk};O$W~#}76;$Qs&4Ox532YlP=dLnvZqs5+fIzMpOamj$%oVz5uDNn9 z3|kkRjk#eZL=Y8BIa;>O;=eMSl^XvIU~L?)G+?9x}lSl2TZf?g{lg?o+a9fJy7UgUn}USt$roG9pf){ zf$xEzrkXUVRiU3&krg9e2fuzM*S?I|YfvF@RAKuC3%-N%pTN=8)Ec6;{{@MnlP)5% zdIZ(*G4bPE#pCp2TI1xvPdI`K`|hGIH2M9?pg&xNaR-{M1DmR ziELxI9Ql7msQgO8b4ZCOMR#cpBz^@Lw;>OH72}+Xad!mcZjF)KUWIYDVBDQR$7KW~ z)GYO$>u=7av=C?6YE9+WA~?UMan^b`za}`pmar8m(KvgMl6jN`@!jGgdn|(NF^y~! z%Se|W6J(DiyoMBwOrM;9LSUPNe)C<5Kt=rko;_rZ+{R{_AsEA&k3$v*0YG>1BLp@p+$d%{=wF4h!~G_*QZjO^{ji zHvpf;SLANcO_aN%oEf~M!qdM>`o*s)PD9Sih#ki_^AP3&eTO4&1h*)Pfl^_BAv2~_ zbKn9>C|;Hd2TBw8^QVzv#)>J2zu28(eq`Q^Ob+%6AQh&TN0?f!QSxM4p)41a>Y+Z%yQB`J3mDve9`cYv{M(cdJ1ZDk?E~!zH{(5gbEYG?G7HO2&1l}88<_x74Tv+TDv zC*%+89+r6Q{MD?7lOhXZ@g(ZG|IwfN>>?!c-A0q}!8`zs_EH*%rnGP)0{kc!3J_Ylg633WYiUyZL=Pl4T?xi6y( zji=jDLRKi)DeoYS#?yT&O&d@k-YB?;ELps6q|<`NF@IC#K6J(0$J7a|?_jv2cWTMraAjh}#~oo2;7pU0S8gVY=*6jma}hfuzc?^aox4oc~NMrPpG zi+WI6+&$-z&u5BrnDGTExGqSvzh*)0?BO#ie_$adZZmnKim`;9DCv$mcY)do4@VCM zCo#~6GW;a$L(_El=tUdkv%kE*1@jGG>lOK z%9Bmf+8ZgGtCK`!6)8OU4Z<^Qr16%kVQtt!y9c+Oa zh3_NfF+g9(x6nlAo$%dzuJpd*MGUZNT(VGKt!QSR=1)ts@BV?xGkM9a71n?u#-G3Fr3 zk})@X4HyZhkrusE2kkgYB!)xb`rs_AB521j ztBgR--8mrMF{&U8R;pp8U7LJe@-@j-SurO zRf1ztB_Bl-7MXXMTabb~eGw#JL875B<{&RA-AFF5*;H~lOBDpJ13tnjV}yd#sAN7X zo+c^Ds$4z>C0!FK6-i`9be-%U@fAv$$!4ZGI7ku)3yEM%mT6WA(L)N*SShLw%`&aD zWS=gh2d|)7diyS{!HQ~ikjeH;LQ2^X(#CMu{(8t-Je0H)7WrTO*Gu*+QAVXA; z13@atsLD!Bz75Qo7$JlBC;9LfB&Y_yViuT6tV*PZC{`LJk{EvY459?5Y^Wa8DS|Lj z=qa!iLUMJgZb)RUAcYx}j5#@X$f%T~0aZ!M{4`;Oo&@<2o9RlFum(xfItOp9bP=b4 z{p^A}C$5<$vV5(ZpTr3jA?P}h$AT?5X7idV$gawwaL;mkC&R7>aCQmUt@vD(6_W9~ zzQnjbcV=#T8ii#}mI)ayU^DDEJ6)mM7RgZ3GuIn=cAsOPyb8lI4>Tlt6H&J~e?VC+ zCzV1mSm~#4!8I}@sbmB6%R*HKuhaN-;F^MbcKrI>DFxQd-24K&H8)fM?Y2nfSpmxY z3T1{?Wg#D1aV0lMJ&V+_RaraC0vm5ykxV?XL@~w+kq`Fr{VPVbYAKx!k5KKf5mPs^ z6g3iAqekSlAVCQ%{j6tu$*O(&nTJP}kuhHPq?9F#l zvR0BgL4+x)FOB}P_nHty7RAq&N7e``J>2X=LzGtd1_krdL>z}56yX;!}6}DG00J+H$@{+iJP^O5u&Lm z@9;_q)BHm47ZJsvD&HANh}Lpo zP@(Ao8N48^NEuMsYva#UCY`hY9GzFjAzc8=j!ihpp?hZH$%zO~PW(R;d6QlG7b8v5 zUmkaH9LioCcWFF^_0sqc#{>Fs{NoeMdNn$4k2^b_qjPEe_6ZyvskMFl{Vca_!gjQ$ zl0F=_l}TI2e{sAC>l+{Y$+2g~BI(T7m&XB{`XKR#V<8DY9Q&KGf!&Mj-yoBM%gZ#VOG%V_zK`=r-(EQQq2pOVFzjP`no+HR`v=o*zq6&yRhF?Y=Yio^j?1`<`+4 zvxoPO0~IS=^j>J69=0``bZ76%1_O3wKS=1o>^<2&@wWG5?`87d>_>7qCvpzt06LI! zA;(w9L+M6<`it4<>K8RKcP{M7-pAy9*^g&iJ=;zDabWea0O+5~LH=_&KgkK~Znb}+ zn{hd$riZVQ?b+<~_UxS`aVPt+0tCM*si(8wWa^vQdvcKa2vBhh@sgwC*{`6#kba5j z#Cvj3OcEJmV)Vz}p7u%_(7lqjH{D!i?@hlv#K!>p@{lKnBKe7-JBRs`cMf}M7?PhF zcG{mDjoAR|C)3dDCyDw-54FoPL4Bi#+D#VJH+raD7E!J6W&_TPERcncFhS*UZ-h+&=igU?v|N{8|>n(^*@GFuXkE zk)bH|$k4}zTD!Mz0j1lAAzdporDQ-3A|PO|w756@%?$H%_6Hg7W+M17^UPobX9ge6 zvUVTZVjs@BJOnU1PW;3NkR2x4D}LC>%V`(WFyfD=A5G^hN`FLm>I<0wcV-@8a3u4W znbz*DTkJP7-;~ZB&UzsW=`Upc5;P$Fbk^?(|1Rr)6fC2#0<`QOisb!6Umt31++o>o zslEzvdWzX+IF9uy$({R}Xv;q5ao|`wh2iO{VK5*h*i31QH zAg;4tO8O2et$;Qa{W>fgcLjP~mjeIl||JYa$8fj&dTY zDw|Wx_A*Mg6A@RrkM3X#)pJI1d{?iDd5txoCj}Yo@cOq@B@Pp zJTUk>gM~>42OlSVT$qz$lQ}`5Fa-oYpM|XFg*`jSo;L`;k@Z#<@jfy1DEN>9ww&h# zIxlQV5vJIWVlJ9%!1BXc<{CAXEI{W5Tbt4IbAvArw)()B%Yz@vviep(rq*)&1c;R3 ztT{LM{lVsH`+XMJwB<4Tp)6op4Vwqd+?g3DdkhAU`#}#M$+QxSpaL-0&6R2ft^|Q+ zhXOh~^exbtXkcp)^+B~=GI@4o?#VQ7viD@}%?$P#gDww$%-#!(s7icR-%Wa~7$Htc zA=ZSR#9(4kKGiZm_Ty}R4fq5Fum(ln8j8-lANxYi{#@{Bf9}CT^z2~a;X*)%3!fZ| zez_kMdLkFf^a&KQaO(oao+$+U42lufEqPkWt=B({Dq!EAdoY(wJ(zo#6ug)F%5Z}3 z4u3I^;kNvP`I4RgR6eHhv-yWc5PWLHn-ZQKasNodyGA}Q;jxh)O8DW(y`z9_@2KZS zq1Jn$Jq0ZFP{9!ipDTD%!ZQVz3sCBE!57e><9FNJ3l9`ZV}&OrJXQFfgcl1hlOLB0 z_m2j)mqwo&4d~S9_X(XSI$4A|S|vyK6`gxeI`>}g**t6aD|e$i?}Q}sUg%7LM9vg! zmo~N+lB+0ku<(>_eE(=k*gyKE(WL67(H|BwLE4C3e=xp#b5G<#HNKbo#&C@9yTi}s zAz*U|*cbvfg(7ST&?)w2jZN%GByzt%JPV4kyl%@!%~h((DpWzCRl1Kp1!LIHc^!Rq zIIx`>{%RhA*Ybd*UQq$kNQG`5McBM5Fm@x?-{Gk#|IupVV+s2tuNxnq<>c8t1z zR6@5=Rx}!^_m6sH6eidsqYg*X4v+fBQHgyiK~;k2rQXHDOPq_B3b&7rSAqi|pGsp3Gn)~E(*>zUN@s-fo5Z2AhMcaxIY%Bgcrr0qx#Req8 zz}-9i&~R)-bmbj+kWLQYu90t#l!%BRQlx}^V&ut@VAaWyr$z?)`frIj4EENgQ-hHF)S&MVvN|_CW`BRsGg0}^3_6^I{KHAlCjrUxNtcp* zwMl|WLhVNq-%8|2yfNs3B!&+p?M;G&K9TeqK~Hn}$~`3I9!h$Ic>9;56|6q?Yrvc` z`LPFW_iMj}o(x+3puOrrd&Psc%^vtb_9XE^yEEfK8=21xdc&Xj)}YISqLE!5v@I#Q z)`xu?C{G4L);^y28d?0tpts1o(J$w$0qh zyRtjY$D@)TH=i_t_et|;RPs^tI7=Tlj|F^4Vp3-x3*2u3#r@Vn8!N*>`>+k@uziNm z8T)NQZ`->ZK)am14xqixAwq|oBZQ7P`-0vY65WDAeS@GT8SZ}Up#7|kY4j}6`;*Vu z=b3yS?f8>-IgdC%X!E_ z@DMNuZpVCb_BsA1*;y1b&3+f0A)5QGtv0mOR(qdq^}#;eXFma$r3~afVPWnavpzt8 znPfj{JqdP7rWDwha5MpII+}0}qGF#*I8W$&!d8m16u6XhUow*JOWvMFSqkXM$ls`g zo=iTROcD+!A7`QC$ro@gWj~N|I0eDmDLYe{xij@pD!`MeZzG@<6%>|Z?@c}^wGRRd zYQLTGZVG~TQ!cXh&eWYO4vhk9nFUq~LUzpZVnQP5csBX{WRU+r%DEH-hf+_bB6u_P zJOW+B4eYl_W37FGHCCd=Lu~UQR$Qqnu0+MNsYpD_`YS;#(7yrnGTYJE+p4icsYiUR zfX;yZXbPTXskfg?eNHzFelrOh5+(`T1NI>%!8O7pPq#C12pxlTl1<7xU?3dXX_P#M za>r9+=NwP{Y3i_^8NujENGNf&th6Ga2o6d;CYA0G_Q zBkcX7sRtRHOns9*&PR@tkI3rtB+i1}&)-34TxYF)$=>SN+npT_&tVmo+S{z{ zmc7HepU9=oHru{ODn1uH78E53RSCr{YFm`HVP6{b!5}E&tx5Jas9tnD`MzXG?%`w+ zLc@MM`9QJ=DBuez_C*N2l1Iqa+bJSaB8f_F06&+iVM>cgf#RmUFZIb(dp{T|>@?tD zct6d)l=eZIeL3x7x_vQS{yma`P3}_}_EXqV%LWj8w?mosA$ULRH#4^n#;$f-mc0#o zMC|>}WZ7r11C#w1Hm7e56*mXWpS1VV?2A79$I|T+3V**wPW>+%(e&SwZtqCnnQq^o zz9-$K|K*Gbt(qh${b3qP-=DrK-F|?jpThpx01G}$Qz&+&Kah^SvF_x6oWp~U47QJA zCvTr0d|@yc@lX~7!{eQ1)*G2o+`%0M>{x}3$T{uf8*}JI^K(xacTf6`bbDv|{pt3e z^u6g|{qHjEcQZfCguc#sGRNMZb3Dhek7hrgExt*^{xExMj!lmwcP~4J+dGEu8gB0z zzJIvAfB4osdu!glJbNEDFfjJF<>TM8`LOq2$hTj}{~+J~ApfZm*o2-P0powyNZ5bx zgs`J{r~q5c=L+oS3eFVB1^~wOsY2NU*cY+ifswtv$lhLbpa@pzsUrJS(Y|6B#UB0=f0bZ?M6R}UKwt`;Unvn&yuWHa$n1}Pv@S=wSPz2w&g#bZ-Ca9 zbM4o1Pv_caNVR6yi+T2&)JeY|1s8ozJ6y>I+kiSA|e7@|Cn!D-B^6ODhxIjd#- zC5|@(=AY71VT6dmPs6{ox4WyfyQ{IZsd;Vh`qGBprk0Mb=7z=%lbYMtx3o8xmX%DN zu)d|Iw5_A5x3#&uw6m+DvAMgurG0&AS95nmTW4!?S9fXC=JtlRmd3D`RNC0k*+Rs| zM{Z%=#@kA}JJ*%AwD&Z3t!qFlx>3OuZft8W<+r6><7{nNTiVdoHmS4Yw#}1TTiSa! zO=3-LQIAKDmqBfe!NczVlm~D5qHuS9P=xQtN6xz{nsj%+j^~bN*kK`J~}Q}xJAY~+S)qWOJ#H-!uDxQ5ehH{;Nz3|QRm=>joll=UESf2-O!aJ zrL?=J3$wpfk?l?$pHRk`lQOvss)g_XZK38uNn>XxZS{{_2E$ddfre{$Pg7I#I>fO_ z>Dk=b+>IzKStLW5Ov0DtA_={b6g`QzPNNVot>gWnLb~FhlY}bJaOav0>&_)H& zphhg*u$HY2QVoZDx*DiNkk`=DL5;Y!p}Se-s{~yQ*e0!O?P%!n2xH3H?&gNB#tr_o zesLg{nd=dZ3r8wJp+|8qrLDK8c@q+Fy+;-4Zdu>n(5g~|$!@Q4YhK{yzUKBGcE?SC zq;)oT^|S~dbfPaCauROd)YIM_ZfZj^uFD9Twl*IJ!N&GJ;Arkb35=B@1tS0{>TYRd zYoJ)_A#t7H3pX|NG=w`lx_ZKFzoDn4gCht6WPu`6!P<^aq~UTKB)qAs1#Pe{l5kIJ zgDdv{GYEPUA-rMZfHajLB*YWV4HQgobqi0OvNqC~nh-z&;n0%?kA$j-~U*EAhF%Q1ta9J@4F?pzfFT;j~Y_S7tK?BM*lbDaXD zm4_TV6to7FIAd5MRN_oScE~ZUq!K3~Xmyrwc{hV0Rt&yo4t3IkR-=jh@ge5pW|rhH zmi$M}EaaP#vr#h4pqs;*(K#hj=a8=sF3kF{?NT{xCOsq>tZ+_f00lwxbq@GwUAmin z9fFi}C;xiK9O2lbgB8vY=}>Uq5a;?}mNNz2niRB>76)fKdD3tW5LY;Z$2qB1NytgJ zp4oyPTg4&3tXC8R+VD|70DrfoSB zg4VAMa2TXuaO$mZZZVyN+3?DFy}_Fha-F0h!`R6?Of;1=(<#UYGzASM1@VU6EGJd5 zC5Rrd9cy`skX$gyrDXXb)ii!e3WGEggEI~71g(XOrJdkR#p!cq7Fd$T-k8=ahK%pC zTXdPlp>0+Yb2l$`5~c~F5^x$n&2qiqdfqKKGZYGK3tG3UJ_JkD`07zqqr%4st(PG+ zrZck7F-Jn)mSj02IUd2u&Riy2)uGAGcxx({6D&h_<{@v0Tc*?*7R+`=j(3JlaYp8$ zM1h-Aps^I91mxJXCYsiukhL*{|GR=;rpS*84lQ*G#yew*MmYr&P!bGnL{75=AtXBR97Ye!Ij73IzR=SYY?NLRctyz>+c{GkdPrx zDvM5@s>uQR>&+p~@E}qrLvTwf=5jP{nhEKIY>JEqzs{r^P3J1>D$dz8A!nR5hO`!N z#`iepWap}DN&4mzQ31@5i5~nMBz)syr%?I}h9R_r)ku71%VIwlgwB~BA;2}+nT*0& z*80`XWGh!SmT85h*IAf`6tWU4uLMP!F@;8;#Asq6mqE#JeyC83CfRLjO+qr3%O1ni-*AJ5M(uIeGh0-$ST`PGcl4s&^Sgye+(;z(B6TuALERi z=nN}_U=~oYOOX{E=8PPnp&?2#F}QGUJF|oyuyry9`U_D5UFZ!oI`D7s{*Dh>D??hX zwjaX4o6fibXZR>Et<)I@C;>Ai-8wErO?6TQb%8Sl#HB)>K?$^6Fr&mNU*b%eSYw`sE24=C@Ei)f-6AzBsX;*c zj}+-p#Yu`4GgVkcDQjF{k<ZFERk~IW>@&U$7q)bLgQ7fbjkyk7x zGXv5CQJ)#ibuy&{;@*NYLAa{djhRk{HEyOemt7Jh zuv%E)mc@XtW~_>7U|yD$9mxe8%5Vm=fr;SG( zOR<(NpX8*1vS67ix42|m7R&u7e)Ouuqvzi-e6kQL(?b4pP{O8l%nVt_?#35fMZJSt zo?`9PM&x6_+6ggF3Kr?!&McTDEp7vTjA=&D8Y($3juw|3f)SO5 z_3|nffp&z+G7}2pb`Dy4$zn#4I@uYys0RX?1-U5)g;`c=iPf!UUSK5irT#=Gt1xJ# z&J^@S_^8Qo;{3#jv_aiVEBqHcK|)>^Ck$kM=Hik^K}joULL+!-0zSc#(9A=D*@HP} zF5_iVl6DUB9~Hj>T1$gNCYF|t1X#+Y2h;?YK#^uSrK6ne0;lvk$)RS=2-a{Rlew8i zyd0gwitQ1pD48jQ!FofLH0xS24*!xm*W zECy|-9QN5-qwt`&Yn+5ppxQ$kP59UI4euJ z&~gHcKFRj!li`9X2jXn~7y}0K@1{Ce5P#UFJ7<&16h+v({auTp$Ct1&%yD;B}h@p}i z3eF$mWZdA+SV(oXY8*dL_k%6yFhuYJgI2FHj{kTUHAz7JL8OElQxjt?C2Uj!4k$=v%-chV-V<04oBzFN<25d@eO>!i$yNEu9PkUD7b5Lg@42f&d)QD;?fh9z9eFg#Svrg6+gwOO7S(qZRu*Rkvx2J~C)h%YgEQZA^0Tn~ z2Cc17DGP#T!6*Pr7(+M<)0<(94mU#}Qx?-UBbwC?d5PU=R&a{->YbdUSXE)ELHdC3 z`xeHH)mc__%S>Glruu`9zMw#` z8%i0Y`(-zOrpO5PyP~Q%cGfrCvgbmi>U-`;m6R+_6x}*k6(E%n9fy+BReEssYtC>h z+nhPmS%@+LSb7Ywy~HBxs~Uo|rCP7uMK)x~zQKmY=I$S8=!prBU0Tq30j$ZgUdD_b z$7Y4cN(9kkq52PCr#A4ET0S9a8T~ngy2G$o%14OievcO7!UAU;N3WCvBvSu##TO?( zm{`g=^IQPh>#`Ym5Q8ut(qPhP9uG5NJoZ-B=8!YKxX?=sS$9BR=QBSvuE;5#f}Cy? zu~MkUdrF*Q3)TYCC}r3~MLr_G=r86m%reuz7yG)9O(6+hbdo`|SrB}k)D}-i*-ccM zOTaz{imN!7HM492B(;!H*hw}t8ib=A?OB6qP84FXn^1*_(rdzukeQ8DX?k$T1fUH>R_+k9W@7q)S~K_tDO!RK=cCc;A%rE*$#4~}#y=eHntN?UVVN7v?XM^{sGm$9^Bb+~N0(YT?Zy}h|r zT#82c#=4%V@M$)Av1Tu}PPyseb`AG-!bR5{ZfITK5pHU3ZP*+Z-=Wdc9q#7wP)B>X zySKX&KVRJ3WYnx!8eUNsuB}`iuB)8qp=&jwXq^f7-)v;o#Oy^w9eQB2w1?MqH8dLC zEq64BdyLM8&G4bZ2iw@w3qPB94O^SrNkwZ%<83J0OzMGgx?)OIOXa-s%05GT(8G-z znj3F3>J}|qUcYMD^7-LK71aw2{32#|xV^W{xV2+#Sous1I3c@xyP6F@|IqC1y)8&w zK}JrUVxSJag3a)2cC>dJJsaRK+|be56b9LAH}^Dm8}lk^tHM>4^QKR}X4;H!ZN
lWuT&GaL~bE-seKxqg=Z+A1CyEyMa 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

HR1 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

QXC#K+RSHW7LTp_*KXMR3GiR@X_As zRBp77_FVXASIqgS+jR(bXRJj04hOv!aRxgb(eSYwu{RLxw1bFS9r0iB(az1deWW6i ziNGPkp36aKgU|t?0HGT~F9iGeS7e9S!oc~MR@Wiei@Tk~wU;07*^Iz7*gp88KQB9* zBa|ZWV#D5v-iP=m1YUF42lthY@&5w;-w+NWaO+_o_LhnJDQ=PMgZyfQ8U${i?Bh7% zClL5#2on*eBh(-)M_7Zf7J=K5?FfHB*o|NxD*`-m^5Nyb zeX0Nd$d~$mz+)grJ2}h$ALB&5q2bDndbGcEsifsfU325(%a{Y03(MSi zxGv7qz5jyq^d$J04ZwMNl5(CNNO!|=IGv}rMHrY*r|EQe?xWju%W3&pPSaDAE8RF` z%cl2W+huwtU8XN{xJ#D=r@M5or(f7vy4PdCS$aFTxr+-z*Xw!oNE&vPE}4gcvoY)_ z9jZ`OI{DQ*!*?nvrX{+)-QY|Q?hrEy@n&Kt%Q2$~pL~{Aydv{CYD)^3v z?>=`2dI0s(kd{WxFy!m(&Qk9CI;TQGQ<~L*E;o??L+KYDM#1kdi-kWz`1hutdoMir zb_C|Na(844WJ5C5-LaEIvysW@-`70_3Ojd!YfHG-?A(?(%$;9=MED|P21MNXo;Vtr z(Fs&5W*6UaaW52#qc{5~vvN2quk(D5y2shIN zeVp5icQp-I&{`oXrLeQxRM^7ew{~|Cl5X7LHPT8|9+>G%UU&No+;G-zdd^3;!WXLX zBs!@*`vjvUcV%PEG(?&SU7}i!?Pp3N`PATVJ>(g%@Hk{r2V>v8X#^9gPXKZf^^B$IB=N zzrOSkj@IwE!0m1B?l>Nz@Br&I-~%$(NEiqC79=lN>275duEf-Fx4IN5Q=z!IJ9j*7 zdrVnp>}jhG82qei-MOpB>i zbEq$D)eGEh+4M;8qNR!H?n8_+AdZq#z}!@H@9nV!~`D_*uxDGbx;x?V>ombwS@&PQ#p>I=u8 zKGqwn21-LTUloQmf|&+WKIo27c`18Ap)I$5%u zMNP==ZnZjGsb1UHn!KrGtK!s8rd5b>1Z~=rNgkzqvz_nOYd4=GpDLCO!(7He7hJ(A zmaz#A*jp-9;KEHWqap@z_|?Ukhz%0E(p_o<;Dx=T$Eelaom3)|^5OKA-KV>!qs=c9 zmDVPVyW#R0Gph;o4>RgqG55I>jFo7XRJi{|k_o5n9^*T-gWp(j?S1*w`2(mF*o@3M z304e3x*HCDFKp{hr4!&dtT{=TdBs6@4O{|KH$4BQ_H`F`g8-s99f1{er{-gQ??@%F zaQ>SFEv3kr=g#Qt9*VPjmOCSx5qKrGeq*stz>{w+%=r~Acax2!1_z}b=TQCi8oDrE ziXnj-9|u84yP3)pZ4%gfP=zk=j{GYoSfu_5wBIwtsxsp6r2QqTiSq(myrXAHR8OG0 zu z=yA2qcu&+EM*XabV5~F7H5^v{?ruFB9=D%gJPZ^4H9XqI^xwI7m?z&eoT~@!sOY-w z1t{#fOZl0xoYXYf(J6m3jr%5~qZ+tWiuiqk0y@>T9adrEH*b>VXD8x&_pGm$^K0S} zA63dt8qEqjrKz1&TT$(FN@Te;Qob4^?(w2r6Gb^6qIb9ko~}@&?U)B&w}7)k)WUYo z81})|upJz(C;#mh^&EayZ7-%_|5XmJxys8HT3dPdYuLE_Zo7Dh;(KtBe&wHtoNlTj z!^iP4`o?_ODer+1Y5AT#KT_YY>;|KjQvo)N0-*3hxJZJhEBZ41Px8rVx10;(H7DC4 zl;yC=b~{QJd1on#a?OfQ+FNd|qn!DLebgyeYgDhM>=es&v&Adl5Z*s~Dn$uk;wOYP2**0Ofwe}c9S2p6t3{6RAV9_org-JCS18^RC zwoh0V7IAcGdl6TT?`(%%mfzF{-ulGrbE7>##~)VbN1J22TBF~wup7;Ddi+w$GEG0L zGp%u^22QxC)R?gx`?5-`09HdrVWRTM2d`t61M7&}G|Sg?#D$-7P1dkD+jWD}D{++T zL)#DdS+kU`D3q5~H34~wvAvgLuBzENmoDX$4?Ei#cf{c&CNI}~H5$U66{Sa`-Q`(c z${h`9H4qfoj_<5l7VXJXwM)ciS%+xzS*}?caVyh^)0IZNwKU>~r4a`%Jd0R<*j-`_T<3!qH6IC9>^xPCSCDWk41Lc)+#X z&|#QGyfJrHpPuSGV`gpVt7g?)Id^u&q{_|D&t9OG6VV!T>87<6$ zFcp{)4pOEn_0$)#W=;P3q=X1nZ$fQ#k z2VV`~KMe-QCoVH@G?qJk9rBu;|9UEk&pF%I;lTLW#&XNm;XupP;r~^B3h~w@p6po< zt6Ye+Mm%!p>Jbxtmsp3D&bF~>J4Q6{(oh>G19W?#bAY&Ytn~r5L*Qd9(qn;q48=!R zq;WG{TY?ZoAiWs4384sqG#|(vM6mNej5rd)`L~1QUjXg&*Fp0igtmT)+XwynMceDq zK9NMrUXOMhG~+hyg)Z7_)6GHCW}EH;nhy?bIt2Pz2Yngn0}gr?=${?*4WNSvc77y< zkN*jN>+Xi_U&3O}HTsqNJ?MWR&bdZ6_Mjzokepm!jh z^NZyr@C`);Tlc&ztMG@=)rh&KeP3GtKH(+62Y8G9?sttEG!IJlU6%u0#C(Xi%_7uvBoe;55M% zg0~577ThAZS8%`J3Bh{7bj&A~$90L=SFlKs^U@Wx{vGJb75`H}e$9b2{$qjfd}vxW zF~?e~$?q)b{REZ$;13s??}kv0|BWM73QiZ~%N67=6}(-LZjfVXd`9qn!7l}m3!V`Sm{P7_8^J(0s3* z^tVF)B=i}f<6^AzWFpE73Y{x-q0s!ZEz?6n4;T6pBIIuM2;_ z&<6xR6Z}%JjtD&`iO}Q0-^*xMtYC^@nqW2&avg-u7v$g4sHeZAj}o-~cU>-WQv|0A z&LbkxPBdGj&A^%IHf&7~^@f|_>oF;u-&>OJy`2|x2(*?5y za|M+@FXRuA1`a2p{+A0*5xMDta|N#wq(4;VyF>7AMD)M%#|8cop_M-_)bmHuz+Z*0 z{BePf$A4+bPaz_|^2Y_bweY(N_7LQMdnq?q=;4B+gs=Q`A^!y7EB{=e=Lvls5%%3c zM19u?f32YM(*=3urwjO$@ShQUo{0SW1m7b<&li$@SnylnpA`B>K^Oko%ldi*UnIN`Fnk&n?mq7h$e+!(-^D_`z z70uPwy3a?tKo4hgkCB1zx_I(AiZ&2wykdqj4gG@+4blJ8D~9aqaGY5tOwh`t_SalI=iM~ijSK5QK`z;Kp(5Py761drun z8xSsc3F3AhM74GKnigb44m<4{&`y1I4t+RXh4uXwaXSxH?0~){4u&1QzkytDbmVPl z7yGc~?ghhHt~NeW57x(Szb6rA9;i{rE9mf}=o9;38pC!$Tkh$>yk{9XY`K?2&Q5s= za?XQtJl;jH(ZWkkR*yCy+XlFeVQI84Wu|IfU$F9fch@;zQ1Jto>$iL>-VHe~Q zk&*X?Iv`LV+lOU3hLN^+IKHM}PZp%vwqps8lA8_tj)P|(wp{1ly@Sr9z(H7X>(}<{ z(7kK-!mdi@Klkgfe~&6H?AM_=JUb-9ufwkC>09|_bFK9k6BFSFq2Re2x9pl87t&T6 zIWhMngya{ns-Gc4Q1oZ(v7j zWk>4p_k*d!vXvbvkkD4v!H$?9a|J_R98MViMNYynwnO`nzB(Qfu=3=yHLg2tOZO>D zmy4YffEZHhgEgf))B*h%^fj}?S8Nd z-$@@kTuP~{ajmp0IXGRl2KwRb?mE)at7_hFo{LPTn*TeUodo{7Z*BVRE%W;C;~jXkXq($aReS(iL43AS)Ndu2SQ?(<!{7 zbWp~0E$rdJ@xe8R9Q1ZJkCmEP2k>2$zWqb% zN<7DO?}>f*lH)6;Hr-b~arPJQ2$9H64 zx3Q(}1wZWDKHINGnZ7y}_Gz&1h_a9M)Pj`KcG9*YgjNVagysnJ*|2MRAT)CtB_FS1 zIp%5o1a;3w9*AgLwmh~ZmH4>1WU@lfl7oW0zr5usV+p?@x#jVgCC?I{a4q5UhAmru zx1_47ro3iux&0(V8#;7M`IxbNf{I^hJ^in-lY>(#@Xp)hPC-0epI2QQ%$=-Bem+f^ z4JThbg-7d{Th27RX;D7EvSx18teK4{K_1aVxk=TP6*c7*)l+B58>3F01Mw>9tlFTG z2~sAAhcA7C$j1nt?+2M&QO$QoYAYuP7gpAG3Qnt-JF^x>PpYh%51x8uB{*Y>Q*U&A z`OxP-wbL#nY-QtZ$LiNq&gm26YZ7<|B{*qbO$|JoIc)9}BTHc z*IdVm2Tm8E(Hz(}qr9Xwr{y))S z*M++NzdDcZ!9@$39KZTK=nr$Z8yAwiio`M9O3_?=JVoGWtg1$1L=+Jk3{uqRbw?PY^eKL5P_> z6%ph685+%AiU|0wZ4IKgA`*Si;U0zAM-iz$ejMC9PZ8<98&IOzR}sy9+04^V5kcR@ zcwf{kQbdlg8w)K~L_6OCc0h?DI{5~70#Vv@B}^>v@zcy^DD^H7-Fzcx;SgnYFW+G_ zhB;IbeSK?44D;`VK#{Ks?PHEeW+RvS{=z;RnZSMt`7Xw!H_Ku+K-*y7rI>-{=mdVR zXoxSChF%i)HpE8x?xh8nr9F?7alX{1AjW6B3}U?RpS1dNWzGa&7nXB{k5|8wedl)s zQ67t@3vd*36}3%JwpIH|!7?Yt?16&Wc$|O{<@RROff>u^mL?p|FD*!efd{}XYq$$pQ2 zCkW0hiW8rRM)%xm#UC$(NM?ZJA@B(VbI>*k@MDhQ>TQlb+1`$*!-n5zk1O$oLH=;+6xY#0gN~%79*9M(R8!o`(f?zt9;iTrV0 ziHQ`Om&Mn7U5hZL{OQT$8!_e~$R|z4XK9l0=DgNc`wcFeQWS~C4N{`QK6axc_^FPxxbl z)U(-Nps=p#eag<0O%I`lO#(kO9j^HGO{XgSvFVEne`JzAl= zOVHi%ee*gap3%Ms;{B8E#(23Ma?c=aN60)6iCRWpYorcr&X2Y+buR+FJ6NgB$}hlH z7IMwY%jc^I1{jTqxw(l|GT)UtXUY8jI!bnN=t8a&0zVm)S?nyCPi>jXx3K8*!Ad>5 zWcbMWCrWPdE9B!}@Wr+G5X(xuKQ^xAvCf!Xz2fG_;L*%2T%Qug`lo^LJq9A-!Z@xd zT97FT7bmXksA(6X{2eH2H;W^YrbMzIh=a%_fmnzfKoZ~cQps9&HCid*(!je|C-}Bk zeK;lKyC71=$N5nnl_a9!n<8Xh#yYlAg--U4z&VKJC=WJ#9n4Z|B~S5w)IpL*BIy!4 zIjth1qRKl8gi^teB+(&`W%wGDE5*$4^1Dt-<}Re)AC{S_^i*Q;Nm%54$cGmNX$n88 z^h#L9Doe>+=Pf`JE16G_&M&=NWm$T*V^K=D(c2$w#R}^#Sim>QluRa+=P%xO6!u1 zk(QjKd%3!(?ztano9%R~d%7wm$-4K0ww97tkiOTJNqdEgx^gJs)9p?Bq9tDk=LphI zG$xa(H>Fn}%J7APOT4Y)y zov)5r_Bdqv=w2UWsb?_K$28ER?CGz2M~FRFB7KgnN6anJz4uBnw;*YytwJkQR)lo# z#ghCulAey_R>{M3?{G0-50d^C$$dXYM)FAATLYwhhmpkB%A9SgWX9;;1K8|PhOe15 zMR2z19=63rx_6k!bVhm~$~gK)$y};?2SNw+j79nt4fIrC5+z@ud-uo?;45cK8|YCo z6Ls$+*jZ7}JxG6~fu1Cs3zMhl-s?MAGCPs}SIRi-Q8LqY@0S=9)bj<>zoU#A)#PY} zy|7#)&(yt}FsjM%#(_p~>QOQ^y0?|oy(7~3%9>Np#oU9<*S(b(`CJLhkbWU$tdXyh zuhYE+SOu6o6G^p9RwKXLCe$=}x$f1mWN^t{$E0vg(zrNjme4BQ`!FUl-&}i76Ol zz^XzexI_0&fDi?TKxiBV8(LP4({}PM-8;6U)dX`ObZc1S7c`IgRrz9s%JMhe`+1C& z<6I{6l^#1N1L}T}UST}xy@uhh>!NNrTcy5GX-j^`cO!?LocqJLD z4kJA2stC`lD#DYbif|mO2v6`T!reemYSX$T!|0S_F7GTX5l1jo^zWhnM;b#)>+&s@ z#+2hO?*~EIaqu<3mIx|cb{tB{_b%_uE|!v>NH4Kv(*8+BYR8ds!j-TAqw6F%mmz&h zV=^aQ37au~D6<&pw@~IZ2un|)D(jRh>18OTi4P+Esjwc#w6?#++)nw<)s$_gE;X!1 z{4J`L$e+CBm>6n{*1Flbw`e1wJ+ejn7Mi2BXsD}>Ij`rWU>k{$Nh-2MyBb}jwrHhD zE3?z3!R#&CCk2+0X-J=I%cOa!D7;0R&1AY^8#WP6Kt zI~FG<_drrHli4C^RtfeN?J7(TaxO)BC1sSQmW;hcn~HRDu0#6GVLhr3!&|g}qT?v@ z0Meff>#=0)E!w-d!l2AwkiM^h9wmb<+PgRbQRXPpPd3nFZ_$<^oig!F@TL)h)zg+K z*rGMclPD^H_+f zCll$plyTUjWUxj19wUb`{gFPjfgXE{_8#^tl$nV184dK8l#(vA1Y% zNc;Q_>CZLLV{g%T|Au=0hV=Iv=&`qGo8zog<#D9fQ^p$k_7-iq*Gf*pemf1p8u{TZ z+A%CRoxtwPq;QK^=kD+p?M1A^qajd1q42Pm6TH1eE6cNNT?C;UDM&kY zWQ)dc$Sgjb{97aZ2Q^Sxutm$k!p|&pqBfdYRLe(KI5yD}jshZEwEM8mv$5Ag^0Bb)aPx~GwrE*6%aQ#Og!YBiIt1-4+6q}0jzZ|C z#x&YnH2z(e`BQLB(;DHdabj=L?lLUFz7RT}f(=KWy+!*R1Bx0eAvCWsjrJDpWY7}4 z9YXgtrqSM_ZN)65#^)jQYGWGhE!qUJ@gRii8q;WR(Xfy!jXs=iG7uWpT5Zv|QP4bZ zq2NURc-lcQ?@=r|X37gjU>Y`C+3C(L+HS);p^c^F1Ehax%cOOoB5RBG zijlAs`}>~Y{EBoRtXJhYW&UC${D6^2nN~>8qf9>#mW;JU+hZiXg_%GTLr5PT*29== z(RLcm*mi1*W;J406q(4Mwih8|%2!4P_iJsR#j2QMm@Sy1^{T*7Ow82%yd`fv*J#e? z8u(cc-Aw{}{MK`U1ODMb(qH(eDm>)3o&$X8x1IwW_P?n3U;Ez&_EvY}-!+~o#3+Mi zb@$%7g^wF|=4h-0c($@1yRkkosplCt;Y7&CC%$8-Woloa+IpOa&q!&h{S<+3RXzxr z)c)>xh#}8F<8nlJquRZI=JOPD7yb%e14A~eU!GcsjsBu|+l z@LAcDIAN!ba?giY+j&?(Q`;E{&x622FZ}kUY5NdK3;!VH?_l)n&p&~sj&-RARsW<2 ze~@|-Fra8QHUz2TT**W#;o~4nqWA*?EsGr^OB)|>HOw-w8TP!X{f#(2^-|9w8rH9r|G7(@ z<%;9;FsoXFf?dISMOQWsyc7J?SM@kPA5+iQwc>S{$f@%Z*a1(Ht4w4Jy~m~~{+I$= zk~qfr7%d`T6;Qkt>t5=!nM07y$7>DK`+tUAMrxu}t=OOlXvJS)e5S2b?bCr=mX)Sr zY%&y{24%%nSc%ids&T+MXi2fPwEq2Y-I;o+(UOCj^U^WT`X_S0&C_)b^6QwUhE?%R zY@R($$-U3!rm0$U9B9Q4;Y^bHX4ZDZUu-P>Pi%^-r(mL??iM` zlk~O$^*l7aW4wAEnw}r8o?E6D1~?9zq<0H&a5YKq5!jC%IFZi~iQI7#`FxPb`}HM! z-k3VXYS7EjxK=+fxfE2B^qv9rxHY|3Ks|0v?;TK&Thsdl)Z^Clz5(@^6L^tQ+c%&d zzoz#OsK>AAMFI8rHGN<}J$_9u4XDSj>4O65@oW0vfO`CzJ|w_l)+BvcKs|O%A0FVa zYLb3_V4K1b0gjg@=_3Oi7fsSf1=#&f(nkjhfbsh=K{7Iu)HCR5*r8|Erm6T{JdfU; zJ_Idk=&svwGV*X^<2CvC(rfZjqTx#Pp{ootaWQJ_Rldf(CLiX7)bC)$2?_rZ@VzFV z(hRYl$TXX*d!hYNXzkPiEw6RjormW!L%+rRf^WSunv35rYBs}I42k$G{4|^0l+s?4 zH#tl?(=G_yx`VC8Lk27gT+Rdn) z*R`n&uC80AFu^q+joLD+?J~4^4CCo72gdvZgl~68Bn*mU%WJ;ZbPz)oVfvm#3%5K! zZVpmnd?w~$%d)@)AYy%;Tp-3Nv4HP4)I44hiN2+{DbupNc`Q!+saoJ0==>FhB&fF} zvb16SSuEZA$(7O%-}cHM}1m6emz3fW>9pPhAC%uW!#<|sDn@{EzWv~D$qLe`|F zB_M*n*7(hu(!3hk3w#sMURl#yjD^N-zC=HW8H(uTtA{~Zvs>`NY+v6=oRPEUw!8va zi+suG@~rtSSn&zI1RAiQ#qA&_`}SZHm34Jf64QLQ$AP%czZyif=DHQ*BCBot*J&u@ zfh>Hz0_uE!!8R*vMOH21nlBk=@~m64Sg7fH0_Tsc+f!Li49>(^eG=Pae6SL}`yiZk zUWV27A&jrA0g5nv`*AAB8mNdE-&~yivqFl%XV^pN;;fMdOASy9Yopp%*Zx;;=K@|w zRj>V-?Cjm7X+uhSg#zg%rNAUj(xhp6Z_|{vG;NxsrIf;ME<0@?Hx6V6#z(Ib3pE(seIbT7}D6z{t@?JtT@@7q%@*tke z=Ntc7#YJ2u=j2DAGi!3uwLq>Dy9t;;OONA}2eEJC{){IPpIK8P)L(_?%z=#L@I+2A zCmn=G=FfE~hz<&e`9s=xummTZFb|)01A=Bt>6}wzI}lgzX++=kUc@!WyA#)l$DKoR zy(x%L)O#KIH|G5ekB{^2GFR>|lIO)>n(zG>Wn;X@j|>%f{j+%e2|_i&dmf#ziCz=3 zO`-SLbmUO)AWVzAixA#P9{*{7tTzeQV($R-CwmFFJlXpq?x%P!K$=s$!!VudJ&Gba z&HEXy)4daLo#8D*c#iWviTmTd&y}HMdavQB6TCNZf1>vg!gi9k7hx;$W?;ZP%i}tX z+1?)@k2&51glDcd57$!fv$)RlzJcq>-qX0w_g=;I6fYkc?No0LuBUm+arL~fAVtf( z1n$ed%W+-cRUrdccxT{R>2=~-*2l$w_yzRK|^agM}+q(|e zUEb$#J;$rVnDkt)1=qOOi|cOh-;q*n-ZyaH?mdlbhxaP3onAgFw1mf@X_vPg*FE0j zxbF4-8`o|xf|Nba;~rz@d#tQ`ywh>*_1bXl^Df4<-+LZuJ>Y#F_ZN5*QAH1WC*wNg zEky23dP&?5d)MPS;(Za1jvFI&2{|gAT^uG#i zwbh6?mHx^oa`QcST>6qxJi)qr6*@(B8Z=ik@NcO3>)c zYn;uXI{7`Q*ynAYO({&z|26W@ye+e7Yd)&1e*$y(=)9)L=Ww5wUxiXQueGQc_VS;E z&b;k2t<37t49+`qCJl0(2`|8C4sK1I3OD%Nyd9C3>BcssSDsr^bSB-1peVSrO?o-` zHzOAA9HYQs?*L@&&W$X9wY(oxqZGRHiayL|W){F;eu?#WJmTV>QbGgxOE+)Dsk%Ie z&$*{YI-nJ!{)9Vl`DWTe>~7pQPJ@KpvQwxZjm(dt(BAIiB|C1M%}WcgGbZlbEt5)d zz1$s7fBAnnWLU>N^dU&OsSec@j83HjCgx}|!MxmEN&EAm#U$GL4g}$Tz&-wBu(<;o zt<>atP4`Ooc-p)K8W-VgZr|s)S6RJJLj5sX9LB}H+G;+J`=8@%;T~k?EXE!BTZqB9 zTnc~7Jb3AzX+z6@@g3x&hn|B>ZD`MQJ%%=di2emeHneBDs~HBaXy*=fO(u2DbkC+H zK9k~Hj&tj=bKufhu1TivL*qNt{2+yMmTS5mzlFw2)I4(nG2qBE_Wtn^(koFh_iJg>d2Q7i)ds5>~1@C76Ol4zr6@j zD8c=i_oE7N2e38+ws%}S+bX8ON;I+_h3~99Bq+_&`47A ze-Ib9&Yj2^yf5SYJT;9JmslzO3K}os-0@T9j-~EwRw6k!cJ6o+m4Lg#I+t_fUL)nJ z5X@-gVT8*_`5=_L2JkRM>a2yrN_uTj(ok4Q-;0n~Nkfa0UhD3>2?$C$C+SesIn31O zu#y@AGm)o zdWWIDm3lWI7rL(-z3)Q(E$Ur^8qj^i=)Dg0tJGtq?*7r}O+zJ8j5A(_n$~^O=q-i1 z7U#xFKKrMcrjNSYB;#8%nTiP*o{e+2NyR^#qHqt?pT}tusRJ>IMk)|1lSuoa+{)$- zUurt(QYglwoA?eaZ(W5 z+GvW+J0>mP+4*DW_({1qRcK5~w!=AR0PflBajcu0E{IUr?6Cux%4QE}F?$^A?yQ2I z@8&A&rrR9Z_w!ujft>v&t3<{h3y<4N;KR>TK1>Z}Kq#yaPo#W+7JZoN?z}(XgNizR zcp@6~VXBMlmd9m9y9Qt%ZJ)Cem6MIl32t6GHc(i8?#sE%sP5yYtRI0Z_v3UAy^St_E$fdjW?6p<8UKekZJGOt9T(a%_oVrI!5p*_ z$K!1LIuhUg=@fQ`Q2p2<__S%cJJ^umG(~U%s^Vzm06a5Aa2AxixX%GPz0O{EZVT2k zfr9mn#Qhp<*n;(pk@hn?xnEC4wox6K_Y53e55p2X^1YO!F9sZaQI76~E$iru#?cpd zQpb0c`JQ=^RjP42&y?D83SsA;kt%-I4nt)O&HpM+#}% z^hUU+=hM_HF?uaUb5W&1%{@KiD~+o?Y#Zm~VH}FnChXUO3Hx=^ByyScTAXdBGJVig zrj4fM`=;s4_zmBs2vjt(3IQ|;dJ~kpZi9*)zB(vuf<6+E{Ueh7e%P?Gf5gcCk)01g zC%f!XbgqRV8@&!V3UNp9<#kpP_zpJ24YZ^L{wQpw1M3iE#z?}&iHP&e7DS}`In)-gL>Qe$gM{21*o~{ zXq>|#_t1O}I3}TSE5I4&sL1`a(OV1k3Y@k;eb&f*1nL3m8M)tX#RAs?9%bQjDvnx^S4BXGyIO?OG+e8@`tE+g@~b~2tpiQ5icPTpOpXV52e z9)jyu*pPCwsh3+KH##xOS~Ab|i$)Um$L0PCK|tRcF*br`XpNu?o!HB`H<}Ey(cIv~ z_@c3+9J$5iHoA6x$UVd^y3Ohb=CL07F=GG2lvJ)W^~!5dzk-wNfKBb{bnZao&9n4Q zcYGorRT0k_rLoR`fg3zaZ*`}3orR>~ndm=>k;3B(C%MPQil(9Jo9aXgmlP~5s4Lh| zj2`J+r=Va3Y@mmF3~rHf(t-D}c@FK2qXBR7irq+IL4keRg+~6wfMbjC@c6Xr$V|mB z<X(@~$={h%(N8k8tah-i6T37HP z7xpJFabN`1bQn&-yrqc~6;sRIl{4&vbp?He8;Y0BpabZ!F%r{*VW!tTaBPNoL~^l@ zbea$!$A_w6u;f@&} zb_?j%sp+JpAZ_BFmJ4aDC}1{9=N@l9oTD7eQuzuV(cf~Vk@0us3`TEe0n=$gFhEs! zv?6HpfLpM*fV!2b@WBO}oF;U1yK1c2b*?17aIBe4q3TQnKN)I}DG*0YQ=0q-&zS#e zXClwAG%Qw@P^{{VBPK)pp~6IFvFn$pzCwl%d%*g6*SfN7ib~J&c_<+(f+6v<_R1+R zSrs%%XZzJDZByiJ!mddL#faEy)~9Sj(`u~^YNfJ8L%D+j#>}p#F^^iLI^y&-x>=v= z1{2&yZi7j3RHGZyxnx5z^S~Jy8sjlo3#Kfk*%-8uGaZvT)lOgG>E`Jz!EkOUW@Wc( z`ai8PnYbyMsyH?j=S=(8HK+x*$}JOq=`}--i4)Xo`OuZFGs&$)y0r2U)&)H?==rv^ z64Mn0sA-Qyw9X8=i<&;DnNTR^qHjQp~1l`VXxs&O=Y(`(9pXO+pGPK}4rlQkY z$c;QW-fqU}I!y%sJnuT}g#-@T;ip?%XDiWZZd(aj&vnp=IvlX>@DmwyEaD909`;?0 zIK#OCTO8|K&$j!Ix-R;-4h_s6|4zkWlHN>ohNs6yoD-AIi384whpDv}XQ8y=ztQ&{ z!q8@nGqjI5`c`~$o-WTC5uDOue3}mPZmKmPC<1HXKk1V$ynz$KA$%9M8W)Z;E^H-y z7cxafSLnhYj0??#??SV2VY+dlnebg`PKlB7;(wg$B8Hq49M6dq@@#$rLBZ-DI=9k zJgj>a#%eRM!`yBo25{2p=EJ-ju?B?iTt<>1)z-p{4^nibb*qU_-z;rECd|w{_z0&x z_z2mA6EWi>AF;Q@jW~0h8+X`eC?r0|U}Te!wZ%!gLpb3Yu@^qNPAkFb7%MW~{m2>+ zl-gKXrk%UrIJcEpY@XUq+>Db?Z9UApZ(0MwcP>NfX7cbp<4`j}ORjU4AG5S)Uom!C zh?sG62jRQflFGAuf^lVBAR|NC;(hQ4*vX|`*+G^|9|1dg0XyiB+XK$(pv^+#W5r>z z2qy~_U?shc&);iww^106*<1hlG;e`ROdyl-{gjH}11N|6wDQxKE;5;np`Tv9q3($Nzp`@Nnv&FK<|1W*+8EzVT%%Azx;Wip$Kyfw;^(oEevy z8A)rsIRfOtX^5DZXuKP|zs{mf>5?!~4tj^bIH4+PfF*>F5YEsw=N4uUOFC*U>ZF znXnE?v7o&>IW$&hLGr=@>>X;nOg;AZemxg^u=WqN^(<%`=>Ge6;_BLWJ{>>|Tlhk4a&y ztN)mLLjzsN8p*_97k0fIT429*yrAPBPOWfv;~l+y3wS~z|5(_WBlL0Rf6SrmfgQrv zz!RNz&s_NQ4+ZyKzaecuKwVyLJ|_LYeEx8429Qu}B>Hm>=h3@gz3cMYRUA#Qu)NKoXlp zbN^p!0|mdse1{!M%nkJ=_R(TnvcI>x1K++LN?2=FL+*2sD7>=^` zA?!8Xu{WqU>Ykq1nlRqezXyhhnW-33QAHzTHS9LVu!6~ct7Ah0owS|dWMY5NihZcJ zZ6K(*r>DQYtp__hCmAg`$8w$WaH7<`y#WD3%6-^j8x;bcz|6S~01{{rTSRwvP|gTM zZ=$oiE#B3ejMG7gt-AvT#~?K_$_(_1l&$`cG`BeF#wL|Sb7OO&$Hky7iH^hVbli@MEr^zaZe>XfkFXaKnE)G;iznlmiBWH1 z)IC1xl}6oKT+89aD(Ih#=T2cG?#4b7+gKbeqziM)=|U%5fFI@2`D>zX-K}OWybCDs5>q8O3Ymr zoiZotp1|v@xp?eCM(HfLJ9%F86!^Ij%2md}em63sB(kRjS2{Q#2g_p*%0X!68&BNW z#*`*}i4^87gS?6?#U26I8wi%pNtrG74C?!hYTd2^z3DV$l+xkeld;EKn)%JQfO|0|>32{4`` zk7IeqPCl8EE05;I;zska;%EaNn8&!!VPI##C^E2dl;PEGiIK#9qwgZcz7ZXFQmmZu zj7()dXs~{Cl}8JQX=FtYV`d8!)W}3EazV02@{t^oeMs0v;QkWoKygx90iR%jdF86f z#l=&K{iL49kS>c(rb!L`-Qz}%D~WWK;L21=DwUSqolf^ifg5|pBnU%V7@dAD9xjh= zfQX!&+?-|64Fo1@b8})4K{-s@JAGy$t zZh<3(#;HgV#5M~dfRwr-6H1T;ObCm?$OUk8vK7vg6(Qw9WN}z2Cak+vvhqbJ8EMctj{CFuUfcW&O^lB`@9j|VEw4Qsm_>berij=k~y{eul_ zyJ4fsR!i~z!Op~>6A!cqPJFm;cqq|X<;1)2F@U~)r++v(FpRC&+mdapuAQd(#(4eu z)tfgrY>IE%zTO!gh}-W7#L-nr_76JzurpfdIBNO5ZGC$ZaWqT)eS4g~;oi92>wPH0 zk@_`GZBGyW6&FuBh(Swokq!NZ?uPp6hVD$eEwqv)lHCpc&9G~p&mw@Tg(0D8XkObr zRwOM|aR(dQ?;Y&l$3PA3?H^3G4|h57IQsSRj{W;XLXj5r&~STJQ8Rv(wWzlfdj{Kj zSgUh`|Kx`DP3;v84K>(temK$KG$wkR`ulq_qTbjN=m=!_ib60+@kIiBWnn0x2Gn6o zUbzTSN#z3vP0|21`H!Oqlt8<|Z!6gB5O3=+Ujsk}=xN(C|wVzG1Buo8QpcP5zT@?L7&Thz!}N z0@K}4S=Ehwtou98kMpYz2%J%b=B{@sUM9^)`H{{k_{2iCoRW$>W65;v;srUpG2YF) zo{V0J3f9p@UD?oJMV+;jbT_oM_@!-IOY4?&DQ|=rYZo5fZDih#9taAlw6F>pBG_d@ zRzrU6#%C2^FgmL-t2&wKmA!;RVgs8XDfZWr{c+P}LI)I1>Vp)>qV~fjCSAuSD;!8{ zp#vE~fcI_t6P?-9w!2|%H6z8ZsH8FwKSVJ+kXh$hiPpqf>7~22l?yYJsLi&tRK!&% zm!WtJQdTR}l{Ovezkk5=u0xr?uwrPiV?kPJMit?CqWKI4Iy6z5Mx1?U=z7~x$@TQ0NkkSzp0s%n_motYS_Ro}Y_*cLErZR)wxZ77UU&ETEw1?@ z2}a3rGfd@od{AX3FSLPR7~UmEE<$aB?92)-M994xDC9UrhuW}XFKR@5Bq&4bo7QA1 zO%t89_^F-@X&Zwnx#>(BBEKsDk)ZULU}kOnt18E|@B0#M=QlKWkI7GL+be5R^^?sM zkeKO$n8X_!_U;DA!SpV&`o7rj>SW2iUHEEJB95Nap5)$mub=zgC0$Sx+fp~GuIm}L z*(+NJ1Hv5>=irzhiRt$Sm{X796kDdTPWcVfayXRgSA@CrKGG#b^hkNt3}d@#Cf_x# z-jV8$vZdNyiv}B3N6t?@sdeiiM&|U25Z%f)9AZKK(3{xY4?1_#9J4y({dfVCEGJO(T5`wkE zx=r=YWi|yECR-b_Gi&O@pv~sYx~aLv*)!OW5sUedlxoqT`2Na@iV9VM?@}^Ne;~t$ zGu77#OzJp8``QK^bRn%C%3C)EQ2l*K(#CjOXD8Yy`u5%%iT6;I+n!x8WG$OA>gASZ z$9%#qJ(9~VbEaQdZJI6h(rytQT_1R-98avM61YkyJTI0rHq#tkV(5W( z#ux^tK99w$kn!TV@t?UYmE5LmSnAlcJD34QCv;0O$ioSMVRjIz~;n$I~p2Q zEm^<(<}8q}dx!SKlWluoj+oRAChVXy)o}L z-t@a0jRnpIE6!s_Bk!}!qK>s+aI>?vq0XA}!i<(Bvv)UCqkidZKom14B>1^JKXrYP zAyv@>K*ecuz%sO9E0A0IlMegin)$|*1wLSCK9t9Ki%}IrXnt4IiINEq#)QV?!?7cx z%1WD|vzSzcnk)=8sSY)%2{l<1YEm0&vN+VFE-kXe*qU@*b3NMAp*>suwsLG1GCgPr z84}EDI1=V{RYj;tsF15dg31SA`0>YLOX847H6U%zKE?kcJAj3WCj;$;fPk znUOQv-vRVm8rudo;r+~JPR?Y{wi>QyH$-7++iW`SVXaKZ2<(I=NVwF)q8}>rP?3j9 ze33KUGSabapar9~VNDf|Eo7nMt_uxfXsi~7=B0(9@md%fv4u691<9P>3(i%AhA*_x zE)0$A!a6%{L2cQKdcV(~txflHy-Hq77Z(9(x5HHB1u)u9rr4wYDSsKly6 z^FnoK6;~Z9t?E!|Ro7*2r!c(hHN(4>YPfttGq19!2O65H_@ry#mzbI7vi}2XQHErz4`f?{5oaKRBs;|EhHl5!xDq| z9y2S$#lcq>sWeR55yNoLs0mhfEmLor#@76`p{Y_Enkuy_6nbyf>W_`GxE?C;+E9tt zhDy9v68HUGQy*5N)}ki2@4$k&zjaOKAg*;yGbSG~Q`*}eR->R@HyIH^3;W9?z+$#zb-Tt>Z*f9vJ+n}=TJOkKJX}G!z?pS zncZ7XZ`rpTS*u0l)}xQUvWJNsTz`(#+6asjQzm$Ch&M!IDyRXxQH%FsT9$PbK2VrZWm~FB%DT+dei_~! zBw@XOu*|-$Kbk?JryFl-F@IBL7YmeiCfbMhl$ph0cy6S7sJp$pr#pEeRt|A4cBpJ` zHx{h*9nH<`q2Mwy4CHOa*^gpt7r6ITGwUP;LR9EXFk~MT$Y;dF*z;sbz?W)b()oN$Y@xok;JCV$ady! ze$bsY@W-rEC`rvM!$1E0MkutCG+s+HT#^(Zp&{VRobTg|AgnLEk1NIfJS$AOiiu)*amBGP8Tc;hQ zb6LVrLQ~h~Wq%xNIZQ#tIu7$f&>xe}KLtZ4w5VuSGpFH)5*NhL)M~Vd@KDH|5t13he3lrl#BbhJVn(?YLGoNr8Y%p;Fy3rl` z+XC;Q&D1OF$fGnydKb)2R}YrzlrXN@E8dLidTck=RFZx<4OY^rDOXgLsEp3XvLlo4 z#&*D}YQtoQDUI&Xp>-D)R3=u~m6Ti-z*VWiCXV947Hxek-MzzD0iNh=Z0kX+S2}tc@Sy@V;ilnPg_gjLmc%Sf>G*Q1tIojH)WKCEU^8%-SJq_SrU!XGfg&hCWUP zZ{5_tXAjc=+jes#*2W-Aj&aZQfdckmdmSx+BA!D^wI;r&N&VBhskcfFf+R|=_POoj6Z{(Z3-fl05+(2v2Ge6 zIX-$8R?{5mg&%zPZzY3f7Oyo^!8`3}E{rI%&`vs}{tJ5K1lF*o4&>~9%F(hiJb(!n zEDC2%uy?E{?H%8U*}Ib} z_1$WZ%8GP*gpzL?4YpjI%L=R5%*@l#gOq&0C;M*KYm2Z3)I zK_AX^(bO#)+dM8>n0ob=nj`U7c)iHvn` zA#DTFDmCD;K8|~7uxBuLwaUn%eL0|mUZ#w)tgUm2y5$VHOrwaux1@|ZmKOe3v^7ge!&n*k#ku_ zM|+g$?V5;`=-yMVL7okp1Go8ti^sB8dPiF{<*%m-i*+StNz!uKuz5S`__bjkX?`Jl z{S(rKSj*6Z4ij~NnV^nT(U!|Y-A z4EJ&^lwEok@9GQd5Fsw16=v2YC4tpQ@M+KrIBVqK^r%XIRP6%`>715rCV(9ltZl@i zpzv{<^#wT{mQ4pj)x)UnkL?U|z=a~%)$a^+q~8Bv&@byKPFUJQ*_;=%>tWxx4;A%yD&D?Z!-k3%cD$5&zjdvrzEsK3(etUy98!A zrb!X_QtW&r#F-6hM-+8$(!zP<#Oh57m=NBw7wol?p8YfYeHG1DiQNMWZ6 zeJ*@sqrQGg$$U(7pJL~@`Ik}rx7B>j2!Ex!q;SGSvmXWZd2o-3)rEOi=Unfay*a4I ze~NOOt<{ASu8v#-lhuVKjpGX^tS)FOq+2C8dGP#b zyJe>W`aHOI%N01+6qa0_cg?tKV;_tjzy{aX!RPwIikv;;3rp4%bee0*Z~krZHar{f zyW)JgJD-l?xF2>7f~yNBUmd+B_u9w@;o{oDlD*>#C$BDOE@V8X(;^Q3*NZK2>w5fo#p}u zcM3@#5&U&K(>%|anl{E=o`X-81pKu2cckpNCLLC#)aKJi=Cce|E6+U3{9zB*`1hEv zM0~LytJz@2YUMfDSk?Jr$~@0(#F7?^b?->Z+`7jNmF?j=b-1ZWsq-BES9()GT@Ura zfO9BvevJ|d$^S0tkbrhC(!i%mRieS9op^iin&gK2qql==av=}Qw% z+W-D2bAB1aKlnVi>`8#EuWA4FQRa3hY5N52Pfg`5TMu}n)GMI=PuOGKPWR3pW!?w% zCy|C%;G{YC#rF>rpHb?sLOliNZLmc9+z;_za2}NUdE7T5{aHuT{C80M2i^1gYv_NP zf6~oOI&(Xn@=f&>yj1d1#mhoos(Gp5Wf3p6ye#IWju(t;c{R^enujXQQOlkyaVsD1~Ky6)2{~o@3R}{|0s4= z`98BxKB}WI%H8*5^ZmFQ=Q5V}7=kz#YrR*y3*U#`YGbz|AYb<8O+PRr{+p_73i^Yo z%zr2EtgIX50z1P22Lh&A!jWZ8I&S(A_+S6NZoKvF7#P5aslv~+{@}^DlnRBft9fL3 zlOB*{+J-(lzN7vj7(ac}mNobj_Lg<)S{hp8t*h5;YQQieU~SJZmO1$0U`82}1xJkp z%!ErI%A+#YDBBDz--l*M#O^;3^fZ+&qcth&(Rz4+I40_2{tKLkDq;Lu?2}ENj<%3Q zqrU@;pcA``#Fp>7No?A3B{+Vg<2*>h-Xr80*vb){frozt9@mIAOzNk=2=;XOISF^3 zC(&$-M}0Sbi{q>!;ZCR6L&81wS?FF8qSYZ;<{E zLAw70iFleV-L_&|I@IeXp5kt@85{daeZAE8O8pCweV52|$N3Ej|6d`oh4X9T8`A$1 zi7mq4CTB9z_@T3yOJZ-kJQClgW8a1D6p?U;U1G}jdJ^I09;uWE`#hA#Z6M|GIjO%0 zMrJwA-6Y((mn^}Sk7xt&dxx6XEgP$q&b=2(vjF*u%AIwjI<* z)D26-`C^5*SY%H+2c69cBs!Vcug8#WG1U-_!!7m@bSGyy_I#IqwFoU^Z>f;yL1Z;(qaJ@gw3_ z#fLW$C*Tsj$*Tlby`N-h(cZxVuTqrIP&l88lOGJLWgU^3byj{Fg z{J!`j@dfcE@h#CoU!Lwv6HgQuiOa>EVw-rGc#U|wc>N`0wIx#ovpCs2EKA#d5Jm zY!q9?%SC88^UA$ZTy7;j8toWbeZ^gI8oP6tEo>(YO7LOBWiDlwaaih3H+$-{v zG7RSd@dokB;=hPL5uXwNDE?KPfgu&$nI$e48^m2=r+Be=m3UaZL;SAzZ{n}TS4Dm^ zh5i+b{JaU(wPK5Swm2wWB;F`~O1xM6n)tZ*AL8rcU&Lvs@af-4;!?3*jEj53tHckB zcZm0h|0e!ad{z7(u^2;A`ggooE3Oo`i|2~N;-%s(;_c$M#UF?-iZ6@f(08GK$A}f; zV(~1oP5g-X3Gv(F55)f`{!u(0eI>d-N8BuK7e63=NW4ei4~QQU?-K75e=0sFzAfgWfu}#EVwt#Ew&3go`^2A$&xvn~x#%F%zXf8g*e;$Y-XIpQ7Vi)r6Q2-&FTN!nhp`X+ zStwpAUL$^5WS>7lTp{ij zhr}zykBj$HP6Td7zEzX{2?Ny6Q z#8u)tag*3A?hwxvJH_+F0dYjUM7&ZwAYLziLcB%1P5gp*w|JlUHSr&&6Me|0Vubd`)~)d|S+!Z{?aN z7K)R_lPv0dCN_K8XHBJm3GTJa;|P2xfEGvepO zyTp6N2gGlRkBE+e-Qs9z9Z(IV&ybmEE1=RGsW2={!nD(S}s#k<9?iQgBW6kiZu5&ta4PPO4I7E8o3afx`k*ebS* zec~nJhsA^9=f(TPZ;L+?kBF~`Z;7$fY`Er%72w$q`%_Z? zLi~;R2APAoThID`47mj3esQ|==Sn?aER%kn)XT*+(%&p~v)C?niRY6jhx??ySiFKn zcy5;Y?Na}<)ZZczzVC>SO8-fzeCcn; zRB?gymrA`-Tr2%1sawUfq@R$wTkMnmelp*2E|vOP5_0&M)Q7~oNTlaIQa?n(-tpxi z!hbRe^&+X)kci(p@eJvoDfQXnZt3?(Js=KC{{vEABVH%{o29-*evG7-eeN-o+0&o680Lz^Tf}{{7$LACiQno$l(X#kEH(} zQa>jik^ak4zbd{V{l7^asj%+lk%(`x)YC+KPuHf0)TfEqa?j{5m3pPPR{C4TUDDqz zCZsPM*6=IUzh&>h;K_jRtZiqLrT;6b|6BZ>^xu;DuVPNE4bMap z?oSe@N`IErrQ)g5$96=Uq<%{3H>CcP)Fpghy9)DdB*Nj84_(-cCDb7Pc5JxUzr$bl%kl4vq*HEo zL@RH{-wDcBH#e3;k2Yy;mEE2Dq3owMx>H$>C0JHzZJEDJ*uQy{+xxcm_QAvmT;^sN z+%YL=u?_#d*n_{A$<$ZTKiS7V8NMm}bIP&6-24Tn9Dkiplw(;nHs-+pRDzD0y`^pV z+miSaP&@uvG6Vs6`VX;zkoaeIb*uhJWqRh zI5F*E)De)!ZN39mY0P+wZnm-iZuXd87(ON`k1+RE!VLBXt~9o+y;WAv==i}{3RN&3 zonN${Ph>nO13w-caZi8IyqV(&44VDGLWlNfewOHmuNp#l7-hmge18+N=j*?54A%6Z zT=@sx;?agP7{0p^zJU|1oKdt=;ky9${xi6B9$xP_7yF4AFuOc(PkT$ZU~ZQV>G0jS z9%}!dMvaJA32$`xX4gR-4ByNj*t&u8E5zx`@6)*VpTVuu3-_9Mqr*452WtPGM&E+H zNd>YLF#8hjgZ_H(cRuv!?G zaoO`t&Vjw)L3=!2#OdEty&Lux2Q>VA@B++&@n}Unu7DonF%_pDkJoUI>^1;}+y4)I Cq10{w diff --git a/modules/processing/resamplers/iir_resampler/build/CMakeLists.txt b/modules/processing/resamplers/iir_resampler/build/CMakeLists.txt deleted file mode 100644 index 47a97666..00000000 --- a/modules/processing/resamplers/iir_resampler/build/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -#[[ - @file CMakeLists.txt - - @brief - - @copyright - Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -]] -cmake_minimum_required(VERSION 3.10) - -set(iir_resampler_includes - ${LIB_ROOT}/inc -) - -spf_module_sources( - KCONFIG CONFIG_IIR_RESAMPLER - NAME iir_resampler - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "pp" - AMDB_MID "0x07001018" - AMDB_TAG "capi_iir_resampler" - AMDB_MOD_NAME "MODULE_ID_IIR_RESAMPLER" - INCLUDES ${iir_resampler_includes} - H2XML_HEADERS "${LIB_ROOT}/api/iir_resampler_api.h" - CFLAGS "" - STATIC_LIB_PATH "${LIB_ROOT}/bin/arm/libiir_resampler.a" -) \ No newline at end of file diff --git a/modules/processing/resamplers/iir_resampler/inc/iir_resampler.h b/modules/processing/resamplers/iir_resampler/inc/iir_resampler.h deleted file mode 100644 index 2dc23945..00000000 --- a/modules/processing/resamplers/iir_resampler/inc/iir_resampler.h +++ /dev/null @@ -1,429 +0,0 @@ -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ -#ifndef __IIR_RESAMPER_H__ -#define __IIR_RESAMPER_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "AudioComdef.h" - -#if defined(__XTENSA__) -#include "NatureDSP_types_hifi5.h" -#include "NatureDSP_Signal_hifi5.h" -#endif - -/* KPPS numbers for various modes. These are required for evaluating the offsets in various modules */ -//DC: TBD KPI numbers to be added -#define IIR_RESAMPER_KPPS_8K_TO_16K (329 ) -#define IIR_RESAMPER_KPPS_8K_TO_24K (329 ) -#define IIR_RESAMPER_KPPS_8K_TO_32K (748 ) -#define IIR_RESAMPER_KPPS_8K_TO_48K (945 ) -#define IIR_RESAMPER_KPPS_8K_TO_96K (945 ) -#define IIR_RESAMPER_KPPS_8K_TO_192K (945 ) -#define IIR_RESAMPER_KPPS_8K_TO_384K (945 ) -#define IIR_RESAMPER_KPPS_8K_MAX (945 ) - -#define IIR_RESAMPER_KPPS_16K_TO_8K (325 ) -#define IIR_RESAMPER_KPPS_16K_TO_24K (325 ) -#define IIR_RESAMPER_KPPS_16K_TO_32K (756 ) -#define IIR_RESAMPER_KPPS_16K_TO_48K (1074) -#define IIR_RESAMPER_KPPS_16K_TO_96K (1074) -#define IIR_RESAMPER_KPPS_16K_TO_192K (1074) -#define IIR_RESAMPER_KPPS_16K_TO_384K (1074) -#define IIR_RESAMPER_KPPS_16K_MAX (1074) - -#define IIR_RESAMPER_KPPS_24K_TO_8K (325 ) -#define IIR_RESAMPER_KPPS_24K_TO_16K (325 ) -#define IIR_RESAMPER_KPPS_24K_TO_32K (756 ) -#define IIR_RESAMPER_KPPS_24K_TO_48K (1074) -#define IIR_RESAMPER_KPPS_24K_TO_96K (1074) -#define IIR_RESAMPER_KPPS_24K_TO_192K (1074) -#define IIR_RESAMPER_KPPS_24K_TO_384K (1074) -#define IIR_RESAMPER_KPPS_24K_MAX (1074) - - -#define IIR_RESAMPER_KPPS_32K_TO_8K (736 ) -#define IIR_RESAMPER_KPPS_32K_TO_16K (748 ) -#define IIR_RESAMPER_KPPS_32K_TO_24K (748 ) -#define IIR_RESAMPER_KPPS_32K_TO_48K (2445) -#define IIR_RESAMPER_KPPS_32K_TO_96K (2445) -#define IIR_RESAMPER_KPPS_32K_TO_192K (2445) -#define IIR_RESAMPER_KPPS_32K_TO_384K (2445) -#define IIR_RESAMPER_KPPS_32K_MAX (2445) - -#define IIR_RESAMPER_KPPS_48K_TO_8K (927 ) -#define IIR_RESAMPER_KPPS_48K_TO_16K (1058) -#define IIR_RESAMPER_KPPS_48K_TO_24K (1058) -#define IIR_RESAMPER_KPPS_48K_TO_32K (2437) -#define IIR_RESAMPER_KPPS_48K_TO_96K (2437) -#define IIR_RESAMPER_KPPS_48K_TO_192K (2437) -#define IIR_RESAMPER_KPPS_48K_TO_384K (2437) -#define IIR_RESAMPER_KPPS_48K_MAX (2437) - -#define IIR_RESAMPER_KPPS_96K_TO_8K (927 ) -#define IIR_RESAMPER_KPPS_96K_TO_16K (1058) -#define IIR_RESAMPER_KPPS_96K_TO_24K (1058) -#define IIR_RESAMPER_KPPS_96K_TO_32K (2437) -#define IIR_RESAMPER_KPPS_96K_TO_48K (2437) -#define IIR_RESAMPER_KPPS_96K_TO_192K (2437) -#define IIR_RESAMPER_KPPS_96K_TO_384K (2437) -#define IIR_RESAMPER_KPPS_96K_MAX (2437) - -#define IIR_RESAMPER_KPPS_192K_TO_8K (927 ) -#define IIR_RESAMPER_KPPS_192K_TO_16K (1058) -#define IIR_RESAMPER_KPPS_192K_TO_24K (1058) -#define IIR_RESAMPER_KPPS_192K_TO_32K (2437) -#define IIR_RESAMPER_KPPS_192K_TO_48K (2437) -#define IIR_RESAMPER_KPPS_192K_TO_96K (2437) -#define IIR_RESAMPER_KPPS_192K_TO_384K (2437) -#define IIR_RESAMPER_KPPS_192K_MAX (2437) - -#define IIR_RESAMPER_KPPS_384K_TO_8K (927 ) -#define IIR_RESAMPER_KPPS_384K_TO_16K (1058) -#define IIR_RESAMPER_KPPS_384K_TO_24K (1058) -#define IIR_RESAMPER_KPPS_384K_TO_32K (2437) -#define IIR_RESAMPER_KPPS_384K_TO_48K (2437) -#define IIR_RESAMPER_KPPS_384K_TO_96K (2437) -#define IIR_RESAMPER_KPPS_384K_TO_192K (2437) -#define IIR_RESAMPER_KPPS_384K_MAX (2437) - -#define RS_MAX_STAGES (10) - -#ifdef PROD_SPECIFIC_MAX_CH -#define MAX_CHANNELS PROD_SPECIFIC_MAX_CH -#else -#define MAX_CHANNELS 32 -#endif - -#define RS_PRECISION_COEFF 16 -#define IIR_RESAMPLER_MAX_STACK_SIZE 8192 - -#define IIR_RESAMPLER_RELEASE_VERSION_MSB (0x02000101) -#define IIR_RESAMPLER_RELEASE_VERSION_LSB (0x00000000) - -#define IIR_RESAMPLER_IO_CONFIG (1) // refers to iir_resampler_io_config_t in iir_resampler_api.h -#define IIR_RESAMPLER_MEM_CONFIG (2) // refers to iir_resampler_memory_config_t in iir_resampler_api.h -#define IIR_RESAMPLER_BUF_PTR_ARRAY_PTR (3) // refers to pointer to input/output data buffer pointer array -#define PARAM_ID_IIR_RESAMPLER_DELAY (4) // refers to iir_resampler_delay_config_t - - -#define IIR_RESAMPLER_MAX_INPUT_CHANNELS (1) // maximum input TX channels -#define IIR_RESAMPLER_MAX_OUTPUT_CHANNELS (1) // maximum output channels -#define IIR_RESAMPLER_MIN_INPUT_CHANNELS (1) // minimum input TX channels -#define IIR_RESAMPLER_MIN_OUTPUT_CHANNELS (1) // minimum output channels - -#ifdef PROD_SPECIFIC_MAX_CH -#define IIR_RESAMPLER_MAX_NUM_CHAN PROD_SPECIFIC_MAX_CH -#else -#define IIR_RESAMPLER_MAX_NUM_CHAN 32 -#endif - -#define IIR_RESAMPLER_SUCCESS (0) // successful result -#define IIR_RESAMPLER_FAIL (1) // failed result - -typedef uint32_t IIR_RESAMPLER_STRUCT_IDS; -typedef uint32_t IIR_RESAMPLER_RESULT; - - -typedef struct iir_resampler_config_struct_t { - uint32 input_sampling_rate; - uint32 output_sampling_rate; - uint32 input_dynamic_range; - uint32 input_frame_samples; - uint32 output_frame_samples; - uint32 filter_sampling_rate; - uint32 filter_cut_off_freq; - int32 up_sample_flag; - int32 dn_sample_flag; - uint32 up_sample_factor; - uint32 dn_sample_factor; - uint32 stages; -#if (RS_PRECISION_COEFF==32) - const int32 *f_x[RS_MAX_STAGES]; - const int32 *f_y[RS_MAX_STAGES]; -#else - const int16 *f_x[RS_MAX_STAGES]; - const int16 *f_y[RS_MAX_STAGES]; -#endif - int32 gain; - int32 q_in; - int32 q_out; - int32 q_coeff; - int32 q_g; - int32 q_x; - int32 q_y; - int32 q_accu; - uint32 single_channel_mem_size; //Memoryfor single channel - uint32 num_channels; - uint32 filter_scratch_size; // used for determining the scratch buffer size - uint32 filter_frame_samples; // number of filtering samples per frame - uint32 group_delay_samples_x1000; - int32 reserved; // used for alignment -} iir_resampler_config_struct_t; - -typedef struct iir_resampler_channel_memory_struct_t { - int32 *x_delay_ptr[RS_MAX_STAGES]; - int32 *y_delay_ptr[RS_MAX_STAGES]; - int32* filter_scratch_buf_ptr; // used for intermediate filtering stage data - int32 reserved; // used for alignment - /* Memory for the above pointers*/ -} iir_resampler_channel_memory_struct_t; - -#if defined(__XTENSA__) -typedef struct biquad_t{ - bqriir32x16_df1_handle_t bq_handle; - void *scratchmem; - int32 *y_32_out; - void *objmem; -}biquad_t; - -typedef struct iir_resampler_lib_t { - iir_resampler_config_struct_t iir_resampler_config_structure; - iir_resampler_channel_memory_struct_t *iir_resampler_channel_memory_ptr[MAX_CHANNELS]; - biquad_t biquad_instance; -}iir_resampler_lib_t; -#else -typedef struct iir_resampler_lib_t { - iir_resampler_config_struct_t iir_resampler_config_structure; - iir_resampler_channel_memory_struct_t *iir_resampler_channel_memory_ptr[MAX_CHANNELS]; -}iir_resampler_lib_t; -#endif - -/* Supported sample rates -*/ -typedef enum IIR_RESAMPLER_SAMPLE_RATE -{ - EIGHT_K = 8000, // sample rate: 8k NB - SIXTEEN_K = 16000, // sample rate: 16k WB - TWENTY_FOUR_K = 24000, // sample rate: 24k - THIRTY_TWO_K = 32000, // sample rate: 32k SWB - FOURTY_EIGHT_K = 48000, // sample rate: 48k FB - NINETY_SIX_K = 96000, // sample rate: 96k - ONE_NINETY_TWO_K = 192000, // sample rate: 192k - THREE_EIGHTY_FOUR_K = 384000 // sample rate: 384k -}IIR_RESAMPLER_SAMPLE_RATE; -//Make sure that variables are of size greater than or equal to uint_32 - - -/************************************ Structures ****************************/ -/* -iir_resampler_memory_config_t - -iir_resampler_memory_config_t is associated with IIR_RESAMPLER_MEM_CONFIG id. -This is the library structure encapsulating memory details of the library -required for creating the instance. Caller allocates this structure for -callee to fill. - -Supported for iir_resampler_get_req(...) function - -lib_instance_mem_size: [OUT]: callee fills size of library instance memory required in bytes -lib_stack_mem_size: [OUT]: callee fills size of the stack memory required by library -*/ -typedef struct iir_resampler_memory_config_t { - uint32_t lib_instance_mem_size; - uint32_t lib_stack_mem_size; - uint32_t num_in_samples; - uint32_t num_out_samples; -} iir_resampler_memory_config_t; - - - -/* -iir_resampler_io_config_t - -iir_resampler_io_config_t is the library structure encapsulating library I/O configuration - -in_channels: [IN]: input tx channels -out_channels: [IN]: output channels -in_sample_rate: [IN]: input sampling frequency -out_sample_rate: [IN]: output sampling frequency -frame_length_ms: [IN]: frame length (ms) - -*/ -typedef struct iir_resampler_io_config_t { - uint32_t in_channels; - uint32_t out_channels; - uint32_t in_sample_rate; - uint32_t out_sample_rate; - uint32_t frame_length_ms; - uint32_t bytes_per_sample; -} iir_resampler_io_config_t; - - -/* -iir_resampler_delay_config_t - -iir_resampler_delay_config_t is the library structure encapsulating group_delay_samples - -group_delay_samples: [OUT]: number of samples by which the group is delayed by - -*/ -typedef struct iir_resampler_delay_config_t { - uint32 group_delay_samples_x1000; -} iir_resampler_delay_config_t; - - -/* -iir_resampler_t - -iir_resampler_t is the library instance definition. - -IN: Memory for iir_resampler_t is used in iir_resampler_set(...),iir_resampler_get(...),iir_resampler_process(...) -OUT: Library provides pointer to iir_resampler_t in iir_resampler_init(...) -*/ -typedef int8_t iir_resampler_t; - -/************************************ Functions *****************************/ - -/* -iir_resampler_get_req - -iir_resampler_get_req, signature of the structure is fixed as shown. This api provides -the memory and other requirements (if any) of the library based on the -configuration provided. - -This function is expected to be called before init is invoked. - -req_config_id: [IN]: configuration structure ID for querying requirements, defines the payload pointed by iir_resampler_instance_memory_config_t - Supports: IIR_RESAMPLER_INSTANCE_MEM - -req_config_ptr: [IN/OUT]: requirements structure pointer in which the memory requirement that is calculated is updated and returned - -req_config_size: [IN]: size of structure pointed by req_config_ptr in which the requirements are updated - -config_id: [IN]: requirements structure ID for querying requirements, defines the payload pointed by config_ptr - Supports: IIR_RESAMPLER_IO_CONFIG - -config_ptr: [IN]: req configuration structure pointer for iir_resampler to be used by library to calculate the requirement - -config_size: [IN]: size of structure pointed by config_ptr which has the configuration details for which the memory is calculated - -Return: -result - IIR_RESAMPLER_RESULT -*/ -IIR_RESAMPLER_RESULT iir_resampler_get_req( - uint32_t req_config_id, - int8_t* req_config_ptr, - uint32_t req_config_size, - uint32_t config_id, - int8_t* config_ptr, - uint32_t config_size -); - - -/* -iir_resampler_init - -iir_resampler_init signature of the structure is fixed as shown. -This api -- Allocates static memory only to library instance -- Outputs iir_resampler's instance pointer iir_resampler_lib_ptr - -This function is expected to be called before iir_resampler_process is invoked. - -iir_resampler_lib_ptr : [OUT]: pointer to the pointer pointing to the iir_resampler library instance -req_config_id : [IN]: structure ID that defines the payload pointed by req_config_ptr -req_config_ptr : [IN]: pointer to static config for initializing the iir_resampler -req_config_size: [IN]: size of the structure pointed by config_ptr -static_mem_ptr : [IN]: pointer to the iir_resampler instance memory -static_mem_size: [IN]: size of instance memory that has been allocated for the iir_resampler - -Return: -result - IIR_RESAMPLER_RESULT -*/ -IIR_RESAMPLER_RESULT iir_resampler_init( - iir_resampler_t** iir_resampler_lib_ptr, - uint32_t req_config_id, - int8_t* req_config_ptr, - uint32_t req_config_size, - int8_t* static_mem_ptr, - uint32_t static_mem_size -); - -/* -iir_resampler_process - -iir_resampler_lib_ptr: [IN]: pointer to the iir_resampler public library structure -output_data_ptr: [OUT]: caller provides the address of output_data that needs to be filled by the library(callee) -input_data_ptr: [IN]: caller provides the address of input_data that contains the data of input channels -output_data_size: [IN]: output data structure size -input_data_size: [IN]: input data structure size -output_data_id: [IN]: structure ID associated with the output data - Supports: IIR_RESAMPLER_BUF_PTR -input_data_id: [IN]: structure ID associated with the input data - Supports: IIR_RESAMPLER_BUF_PTR -Return: -result - IIR_RESAMPLER_RESULT -*/ -IIR_RESAMPLER_RESULT iir_resampler_process( - iir_resampler_t* iir_resampler_lib_ptr, - int8_t** output_data_ptr, - int8_t** input_data_ptr, - uint32_t output_data_size, - uint32_t input_data_size, - uint32_t output_data_id, - uint32_t input_data_id -); - -/* -iir_resampler_set - -- This api sets data to the library - -iir_resampler_lib_ptr: [IN]: pointer to the iir_resampler public library structure -set_struct_id: [IN]: this structure ID defines the structure in set_struct_ptr -set_struct_ptr: [IN]: data pointer of the parameter buffer that is to be set to internal library -set_struct_size [IN]: caller fills; size of the structure pointed by set_struct_ptr; It also indicates memory in bytes that will be filled by the caller -Return: -result - IIR_RESAMPLER_RESULT -*/ -IIR_RESAMPLER_RESULT iir_resampler_set( - iir_resampler_t* iir_resampler_lib_ptr, - IIR_RESAMPLER_STRUCT_IDS set_struct_id, - int8_t* set_struct_ptr, - uint32_t set_struct_size -); - -/* -iir_resampler_get - -- This api gets data from library -- Returns data identified with get_struct_id which is filled by caller -- Callee fills data at the address pointed by get_struct_ptr -- Callee updates get_struct_filled_size - -iir_resampler_lib_ptr: [IN]: pointer to the iir_resampler public library structure -get_struct_id: [IN]: this structre ID defines the structure in get_struct_ptr - Supports: PARAM_ID_IIR_RESAMPELR_VERSION - PARAM_ID_IIR_RESAMPLER_DELAY -get_struct_ptr: [IN/OUT]: data pointer of the parameter buffer in which the values read from internal library will be stored -get_struct_size: [IN]: caller fills; get_struct_size i.e. memory in bytes available for callee to fill(note has to be properly type casted for the size) -*get_struct_filled_size:[IN/OUT]: Caller passes address; callee fills with memory in bytes read from internal library - -Return: -result - IIR_RESAMPLER_RESULT -*/ -IIR_RESAMPLER_RESULT iir_resampler_get( - iir_resampler_t* iir_resampler_lib_ptr, - IIR_RESAMPLER_STRUCT_IDS get_struct_id, - int8_t* get_struct_ptr, - uint32_t get_struct_size, - uint32_t* get_struct_filled_size -); - -/* -iir_resampler_get_upsample_factor --this api is used to get up sample factor from lib which is used to calculate bandwidth. -iir_resampler_lib_ptr: [IN]: pointer to the iir_resampler public library structure -up_sample_factor: [OUT]: uint32_t variable returns up_sample_factor -*/ -uint32_t iir_resampler_get_upsample_factor(iir_resampler_t* iir_resampler_lib_ptr); -#ifdef __cplusplus -} -#endif - -#endif//#ifndef __IIR_RESAMPER_H__ diff --git a/modules/processing/resamplers/iir_resampler/inc/iir_rs_lib.h b/modules/processing/resamplers/iir_resampler/inc/iir_rs_lib.h deleted file mode 100644 index 42b13276..00000000 --- a/modules/processing/resamplers/iir_resampler/inc/iir_rs_lib.h +++ /dev/null @@ -1,100 +0,0 @@ -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef IIR_RS_LIB_H -#define IIR_RS_LIB_H - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ - -#ifndef CAPI_UNIT_TEST -#include "shared_lib_api.h" -#else -#include "Elite_intf_extns_change_media_fmt.h" -#include "capi.h" -#endif - -#include "posal.h" -#include "iir_resampler.h" -#include "module_cmn_api.h" - - - -#ifdef __cplusplus -extern "C" { -#endif /*__cplusplus*/ - -/*------------------------------------------------------------------------ - * Macros, Defines, Type declarations - * -----------------------------------------------------------------------*/ -//#define IIR_RS_DBG_TAP - -#define IIR_RS_8K_SAMPLING_RATE (8000) -#define IIR_RS_16K_SAMPLING_RATE (16000) -#define IIR_RS_24K_SAMPLING_RATE (24000) -#define IIR_RS_32K_SAMPLING_RATE (32000) -#define IIR_RS_48K_SAMPLING_RATE (48000) -#define IIR_RS_96K_SAMPLING_RATE (96000) -#define IIR_RS_192K_SAMPLING_RATE (192000) -#define IIR_RS_384K_SAMPLING_RATE (384000) - - -#define IIR_RS_FRAME_LEN_10_MS (10) -#define IIR_RS_FRAME_LEN_20_MS (20) -#define IIR_RS_FRAME_LEN_1_MS (1) -#define IIR_RS_FRAME_LEN_MAX_MS (IIR_RS_FRAME_LEN_20_MS + IIR_RS_FRAME_LEN_1_MS) - -#define IIR_RESAMPLER_ROUNDTO8(x) ((((uint32_t)(x) + 7) >> 3) << 3) - -// To print all lib status messages -//#define IIR_RESAMPLER_DEBUG_MSG 1 - -// Max number of ports supported by one instance of resampler CAPI -#define MAX_NUM_PORTS (1) -/*------------------------------------------------------------------------ - * Structure definitions - * -----------------------------------------------------------------------*/ -typedef struct iir_rs_lib_instance_t -{ - iir_resampler_io_config_t lib_io_config; // resampler io config - iir_resampler_memory_config_t lib_mem_config; // resampler mem config - iir_resampler_t * lib_mem_ptr; // resampler mem instance -} iir_rs_lib_instance_t; - - - -typedef struct iir_rs_lib_t -{ - uint32_t num_ports; // active port numbers - iir_rs_lib_instance_t lib_instance_per_port_ptr[MAX_NUM_PORTS]; // pointer to lib instance per port -} iir_rs_lib_t; - -/*------------------------------------------------------------------------ - * Function definitions - * -----------------------------------------------------------------------*/ -void iir_rs_lib_deinit(iir_rs_lib_t *iir_rs_ptr); - -ar_result_t iir_rs_process(iir_rs_lib_t *iir_rs_ptr, int8** input_data_ptr, int8** output_data_ptr,uint32 num_in_samples, uint32 num_out_samples); - -ar_result_t iir_rs_get_param(iir_rs_lib_t *iir_rs_ptr, uint32_t param_id, int8_t *param_data_ptr, uint32_t param_size); - -ar_result_t iir_rs_lib_clear_algo_memory(iir_rs_lib_t *iir_rs_ptr); - -ar_result_t iir_rs_lib_allocate_memory(iir_rs_lib_t * iir_rs_ptr, uint32_t inp_sampling_rate, uint32_t out_sampling_rate, - uint32_t num_channels, uint32_t bits_per_sample, uint32_t frame_length_ms, uint32_t heap_id); - -uint32_t iir_rs_lib_get_kpps(iir_rs_lib_t *iir_rs_ptr, uint32_t input_samp_rate, uint32_t output_samp_rate); - -uint32_t iir_rs_lib_get_delay(iir_rs_lib_t *iir_rs_ptr, uint32_t input_samp_rate, uint32_t output_samp_rate); - -uint32_t iir_rs_lib_get_bw(iir_rs_lib_t *iir_rs_ptr, uint32_t input_samp_rate); - - -#ifdef __cplusplus -} -#endif /*__cplusplus*/ - -#endif // iir_rs_lib_H diff --git a/modules/processing/shoebox_reverb/api/api_reverb.h b/modules/processing/shoebox_reverb/api/api_reverb.h deleted file mode 100644 index b3fdca36..00000000 --- a/modules/processing/shoebox_reverb/api/api_reverb.h +++ /dev/null @@ -1,656 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef API_REVERB_H -#define API_REVERB_H -/*============================================================================== - @file api_reverb.h - @brief This file contains REVERB API -==============================================================================*/ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#include "module_cmn_api.h" -/*============================================================================== - Constants -==============================================================================*/ -#define REVERB_MAX_IN_PORTS 1 -#define REVERB_MAX_OUT_PORTS 1 -#define REVERB_STACK_SIZE 2000 - - - -#define MODULE_ID_REVERB 0x07001059 -/** - @h2xmlm_module {"MODULE_ID_REVERB", - MODULE_ID_REVERB} - @h2xmlm_displayName {"Reverb"} - @h2xmlm_modSearchKeys{effects, Audio} - @h2xmlm_description {ID of the Reverberation module.\n - - This module supports the following parameter IDs:\n - - #PARAM_ID_MODULE_ENABLE \n - - #PARAM_ID_REVERB_MODE\n - - #PARAM_ID_REVERB_PRESET\n - - #PARAM_ID_REVERB_WET_MIX\n - - #PARAM_ID_REVERB_GAIN_ADJUST\n - - #PARAM_ID_REVERB_ROOM_LEVEL\n - - #PARAM_ID_REVERB_ROOM_HF_LEVEL\n - - #PARAM_ID_REVERB_DECAY_TIME\n - - #PARAM_ID_REVERB_DECAY_HF_RATIO\n - - #PARAM_ID_REVERB_REFLECTIONS_LEVEL\n - - #PARAM_ID_REVERB_REFLECTIONS_DELAY\n - - #PARAM_ID_REVERB_LEVEL\n - - #PARAM_ID_REVERB_DELAY\n - - #PARAM_ID_REVERB_DIFFUSION\n - - #PARAM_ID_REVERB_DENSITY\n - All parameter IDs are device independent.\n - - Supported Input Media Format:\n -* - Data Format : FIXED_POINT\n -* - fmt_id : Don't care\n -* - Sample Rates : {8000,11025,16000,22050,32000,44100,48000}\n -* - Number of channels : {1 ,2 ,6 ,8}\n -* - Channel type : 1 to 63\n -* - Bits per sample : 16, 32\n -* - Q format : 15, 27\n -* - Interleaving : de-interleaved unpacked\n -* - Signed/unsigned : Signed } - - - @h2xmlm_toolPolicy {Calibration} - - - - @h2xmlm_dataMaxInputPorts {REVERB_MAX_IN_PORTS} - @h2xmlm_dataInputPorts {IN=2} - @h2xmlm_dataMaxOutputPorts {REVERB_MAX_OUT_PORTS} - @h2xmlm_dataOutputPorts {OUT=1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {REVERB_STACK_SIZE} - @h2xmlm_ToolPolicy {Calibration} - @{ <-- Start of the Module --> - - @h2xml_Select {"param_id_module_enable_t"} - @h2xmlm_InsertParameter -*/ -/* ID of the Reverberation Mode parameter used by MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_MODE 0x080010FD - -/* Structure for the mode parameter of Reverb module. */ -typedef struct capi_reverb_mode_t capi_reverb_mode_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_MODE", PARAM_ID_REVERB_MODE} - @h2xmlp_description { Used only for Get Parameter calls.\n - This parameter must be initialized once when the library is created.\n - The mode cannot be changed after initialization. Hence, this parameter - ID is used only for Get Parameter calls.\n - Insert effects\n - One source is in and one source is out. The input/output channels match so - the reverberation output is a mixture of original (dry) sound and - reverberation (wet) sound. For example, applying reverberation to a music - stream.\n - Auxiliary effects\n - Multiple input sources and one global reverberation engine. Each input source makes a copy of itself - with its own (Q15) reverberation send gain applied. The copies are mixed internally inside the - reverberation library.\n - The sound sources can have different numbers of channels, and they do not need to match the - reverberation output numbers of channels.\n - After mixing all inputs, reverberation generates dense echoes (wet sound). The reverberation (wet) - output must be mixed somewhere outside the reverberation library with the direct (dry) sound. For - example, applying one global reverberation for gaming or multi-track MIDI.\n } */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_MODE parameter used by the - Reverb module. - */ -struct capi_reverb_mode_t -{ - uint32_t reverb_mode; - /**< @h2xmle_description { Specifies the reverberation topology mode.\n - The COPP_TOPOLOGY_ID_AUDIO_PLUS_HEADPHONE and - COPP_TOPOLOGY_ID_AUDIO_PLUS_SPEAKER topologies support only - Insert Effects mode.\n - For Auxiliary Effect mode, a custom topology must be defined.\n } - - @h2xmle_rangeList {"Insert Effects mode"=0; - "Auxiliary Effects mode"=1} - @h2xmle_default {0} */ - -} - -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/* ID of the Reverberation Preset parameter used by MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_PRESET 0x080010FE - -/** User-customized preset (with environmental reverberation parameters specified individually). */ -#define REVERB_PRESET_CUSTOM 0 - -/** Simulates an environment in a room. */ -#define REVERB_PRESET_ROOM 1 - -/** Simulates an environment in a bathroom. */ -#define REVERB_PRESET_BATHROOM 2 - -/** Simulates an environment in a concert hall. */ -#define REVERB_PRESET_CONCERTHALL 3 - -/** Simulates an environment in a cave. */ -#define REVERB_PRESET_CAVE 4 - -/** Simulates an environment in an arena. */ -#define REVERB_PRESET_ARENA 5 - -/** Simulates an environment in a forest. */ -#define REVERB_PRESET_FOREST 6 - -/** Simulates an environment in a city. */ -#define REVERB_PRESET_CITY 7 - -/** Simulates an environment in the mountains (open air). */ -#define REVERB_PRESET_MOUNTAINS 8 - -/** Simulates an environment under the water. */ -#define REVERB_PRESET_UNDERWATER 9 - -/** Simulates an environment in an auditorium. */ -#define REVERB_PRESET_AUDITORIUM 10 - -/** Simulates an environment in an alley. */ -#define REVERB_PRESET_ALLEY 11 - -/** Simulates an environment in a hallway. */ -#define REVERB_PRESET_HALLWAY 12 - -/** Simulates an environment in a hangar. */ -#define REVERB_PRESET_HANGAR 13 - -/** Simulates an environment in a living room. */ -#define REVERB_PRESET_LIVINGROOM 14 - -/** Simulates an environment in a small room. */ -#define REVERB_PRESET_SMALLROOM 15 - -/** Simulates an environment in a medium-sized room. */ -#define REVERB_PRESET_MEDIUMROOM 16 - -/** Simulates an environment in a large room. */ -#define REVERB_PRESET_LARGEROOM 17 - -/** Simulates an environment in a medium-sized hall. */ -#define REVERB_PRESET_MEDIUMHALL 18 - -/** Simulates an environment in a large hall. */ -#define REVERB_PRESET_LARGEHALL 19 - -/** Simulates sound being sent to a metal plate, which vibrates back and forth. - These vibrations are transformed into an audio signal. - */ - #define REVERB_PRESET_PLATE 20 - -/** Simulates a generic reverberation effect. */ -#define REVERB_PRESET_GENERIC 21 - -/** Simulates an environment in a padded cell. */ -#define REVERB_PRESET_PADDEDCELL 22 - -/** Simulates an environment in a stone room. */ -#define REVERB_PRESET_STONEROOM 23 - -/** Simulates an environment in a carpeted hallway. */ -#define REVERB_PRESET_CARPETEDHALLWAY 24 - -/** Simulates an environment in a stone corridor. */ -#define REVERB_PRESET_STONECORRIDOR 25 - -/** Simulates an environment in a quarry. */ -#define REVERB_PRESET_QUARRY 26 - -/** Simulates an environment on an open plain. */ -#define REVERB_PRESET_PLAIN 27 - -/** Simulates an environment in a parking lot. */ -#define REVERB_PRESET_PARKINGLOT 28 - -/** Simulates an environment in a sewer pipe. */ -#define REVERB_PRESET_SEWERPIPE 29 - -/** Synthetic environment preset: drugged. */ -#define REVERB_PRESET_DRUGGED 30 - -/** Synthetic environment preset: dizzy. */ -#define REVERB_PRESET_DIZZY 31 - -/** Synthetic environment preset: psychotic. */ -#define REVERB_PRESET_PSYCHOTIC 32 - - - -/* Structure for the preset parameter of Reverb module. */ -typedef struct capi_reverb_preset_t capi_reverb_preset_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_PRESET", PARAM_ID_REVERB_PRESET} - @h2xmlp_description { Used to preset parameters for Reverb module.\n\n -User-customized preset (with environmental reverberation parameters specified individually) - REVERB_PRESET_CUSTOM\n\n -To simulates an environment in a room - REVERB_PRESET_ROOM\n\n -To simulates an environment in a bathroom - REVERB_PRESET_BATHROOM\n \n -To Simulates an environment in a concert hall -REVERB_PRESET_CONCERTHALL\n \n -To Simulates an environment in a cave - REVERB_PRESET_CAVE\n \n -To Simulates an environment in an arena - REVERB_PRESET_ARENA\n \n -To Simulates an environment in a forest - REVERB_PRESET_FOREST\n \n -To Simulates an environment in a city - REVERB_PRESET_CITY\n \n -To Simulates an environment in the mountains (open air) - REVERB_PRESET_MOUNTAINS\n \n -To Simulates an environment under the water - REVERB_PRESET_UNDERWATER\n \n -To Simulates an environment in an auditorium - REVERB_PRESET_AUDITORIUM\n\n -To Simulates an environment in an alley - REVERB_PRESET_ALLEY\n\n -To Simulates an environment in a hallway - REVERB_PRESET_HALLWAY\n\n -To Simulates an environment in a hangar - REVERB_PRESET_HANGAR\n\n -To Simulates an environment in a living room - REVERB_PRESET_LIVINGROOM\n \n -To Simulates an environment in a small room - REVERB_PRESET_SMALLROOM\n\n -To Simulates an environment in a medium-sized room - REVERB_PRESET_MEDIUMROOM\n\n -To Simulates an environment in a large room - REVERB_PRESET_LARGEROOM\n\n -To Simulates an environment in a medium-sized hall - REVERB_PRESET_MEDIUMHALL\n\n -To Simulates an environment in a large hall - REVERB_PRESET_LARGEHALL\n\n -To Simulates sound being sent to a metal plate, which vibrates back and forth(These vibrations are transformed into an audio signal) - REVERB_PRESET_PLATE\n\n -To Simulates a generic reverberation effect - REVERB_PRESET_GENERIC\n\n -To Simulates an environment in a padded cell - REVERB_PRESET_PADDEDCELL\n\n -ToSimulates an environment in a stone room - REVERB_PRESET_STONEROOM\n\n -To Simulates an environment in a carpeted hallway - REVERB_PRESET_CARPETEDHALLWAY\n\n -To Simulates an environment in a stone corridor - REVERB_PRESET_STONECORRIDOR\n\n -To Simulates an environment in a quarry - REVERB_PRESET_QUARRY\n\n -To Simulates an environment on an open plain - REVERB_PRESET_PLAIN\n\n -To Simulates an environment in a parking lot - REVERB_PRESET_PARKINGLOT\n\n -To Simulates an environment in a sewer pipe - REVERB_PRESET_SEWERPIPE \n\n -To Synthetic environment preset: drugged - REVERB_PRESET_DRUGGED \n\n -To Synthetic environment preset: dizzy - REVERB_PRESET_DIZZY\n\n -To Synthetic environment preset: psychotic - REVERB_PRESET_PSYCHOTIC\n } */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_PRESET parameter used by the - Reverb module. - */ -struct capi_reverb_preset_t -{ - uint32_t reverb_preset; - /**< @h2xmle_description {Specifies one of the reverberation presets that create special - environmental audio effects.} - @h2xmle_range {0..32} - @h2xmle_default {REVERB_PRESET_CUSTOM} - - @h2xmle_rangeList {"CAPI_REVERB_PRESET_CUSTOM"=0; - " CAPI_REVERB_PRESET_ROOM"=1; - "CAPI_REVERB_PRESET_BATHROOM"=2; - "CAPI_REVERB_PRESET_CONCERTHALL"=3; - "CAPI_REVERB_PRESET_CAVE"=4; - "CAPI_REVERB_PRESET_ARENA"=5; - "CAPI_REVERB_PRESET_FOREST"=6; - "CAPI_REVERB_PRESET_CITY"=7; - "CAPI_REVERB_PRESET_MOUNTAINS "=8; - "CAPI_REVERB_PRESET_UNDERWATER"=9; - "CAPI_REVERB_PRESET_AUDITORIUM"=10; - "CAPI_REVERB_PRESET_ALLEY"=11; - "CAPI_REVERB_PRESET_HALLWAY"=12; - " CAPI_REVERB_PRESET_HANGAR"=13; - "CAPI_REVERB_PRESET_LIVINGROOM"=14; - "CAPI_REVERB_PRESET_SMALLROOM "=15; - "CAPI_REVERB_PRESET_MEDIUMROOM"=16; - "CAPI_REVERB_PRESET_LARGEROOM "=17; - "CAPI_REVERB_PRESET_MEDIUMHALL"=18; - " CAPI_REVERB_PRESET_LARGEHALL "=19; - "CAPI_REVERB_PRESET_PLATE"=20; - " CAPI_REVERB_PRESET_GENERIC"=21; - "CAPI_REVERB_PRESET_PADDEDCELL "=22; - "CAPI_REVERB_PRESET_STONEROOM"=23; - "CAPI_REVERB_PRESET_CARPETEDHALLWAY"=24; - "CAPI_REVERB_PRESET_STONECORRIDOR"=25; - "CAPI_REVERB_PRESET_QUARRY"=26; - "CAPI_REVERB_PRESET_PLAIN"=27; - "CAPI_REVERB_PRESET_PARKINGLOT"=28; - "CAPI_REVERB_PRESET_SEWERPIPE"=29; - "CAPI_REVERB_PRESET_DRUGGED"=30; - "CAPI_REVERB_PRESET_DIZZY"=31; - "CAPI_REVERB_PRESET_PSYCHOTIC"=32 } */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - -/* ID of the Reverberation Wet Mix parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_WET_MIX 0x080010FF - -/* Structure for the wet mix parameter of Reverb module. */ -typedef struct capi_reverb_wet_mix_t capi_reverb_wet_mix_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_WET_MIX", PARAM_ID_REVERB_WET_MIX} - @h2xmlp_description { Specifies the reverberation wet/dry mix ratio for Insert Effects mode} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_WET_MIX parameter used by the - Reverb module. - */ -struct capi_reverb_wet_mix_t -{ - uint32_t reverb_wet_mix; - /**< @h2xmle_description {Specifies the reverberation wet/dry mix ratio for Insert Effects mode.} - @h2xmle_range {0..1000} - @h2xmle_default {618} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/* ID of the Reverberation Gain Adjust parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_GAIN_ADJUST 0x08001100 - -/* Structure for the gain adjust parameter of Reverb module. */ -typedef struct capi_reverb_gain_adjust_t capi_reverb_gain_adjust_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_GAIN_ADJUST", PARAM_ID_REVERB_GAIN_ADJUST} - @h2xmlp_description { Specifies the overall gain adjustment of reverberation outputs} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_GAIN_ADJUST parameter used by the - Reverb module. - */ -struct capi_reverb_gain_adjust_t -{ - int32_t gain_adjust; - /**< @h2xmle_description {Specifies the overall gain adjustment of - reverberation outputs,in the units of 'millibels'.} - @h2xmle_range {-600..600} - @h2xmle_default {0} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/* ID of the Reverberation Room Level parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_ROOM_LEVEL 0x08001101 - -/* Structure for the room level parameter of Reverb module. */ -typedef struct capi_reverb_room_level_t capi_reverb_room_level_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_ROOM_LEVEL", PARAM_ID_REVERB_ROOM_LEVEL} - @h2xmlp_description { Specifies the master volume level of the environment reverberation effect} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_ROOM_LEVEL parameter used by the - Reverb module. - */ -struct capi_reverb_room_level_t -{ - int32_t room_level; - /**< @h2xmle_description {Specifies the master volume level of the environment reverberation - effect,in the units of 'millibels'.} - @h2xmle_range {-9600..0} - @h2xmle_default {-9600} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/* ID of the Reverberation Room High Frequency Level parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_ROOM_HF_LEVEL 0x08001102 - -/* Structure for the room hf level parameter of Reverb module. */ -typedef struct capi_reverb_room_hf_level_t capi_reverb_room_hf_level_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_ROOM_HF_LEVEL", PARAM_ID_REVERB_ROOM_HF_LEVEL} - @h2xmlp_description { Specifies the relative volume level} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_ROOM_HF_LEVEL parameter used by the - Reverb module. - */ -struct capi_reverb_room_hf_level_t -{ - int32_t room_hf_level; - /**< @h2xmle_description { Specifies the volume level at 5 kHz relative to the volume level at - low frequencies of the overall reverberation effect, - in the units of 'millibels'.} - @h2xmle_range {-9600..0} - @h2xmle_default {0} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/* ID of the Reverberation Decay Time parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_DECAY_TIME 0x08001103 - -/* Structure for the decay time parameter of Reverb module. */ -typedef struct capi_reverb_decay_time_t capi_reverb_decay_time_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_DECAY_TIME", PARAM_ID_REVERB_DECAY_TIME} - @h2xmlp_description { Specifies the Specifies the time for the level of reverberation} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_DECAY_TIME parameter used by the - Reverb module. - */ -struct capi_reverb_decay_time_t -{ - uint32_t decay_time; - /**< @h2xmle_description {Specifies the time for the level of reverberation to decay - by 60 dB,in the units of 'milliseconds'.} - @h2xmle_default {1000} - @h2xmle_range {100..20000} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/* ID of the Reverberation Decay High Frequency Ratio parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_DECAY_HF_RATIO 0x08001104 - -/* Structure for the decay hf ratio parameter of Reverb module. */ -typedef struct capi_reverb_decay_hf_ratio_t capi_reverb_decay_hf_ratio_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_DECAY_HF_RATIO", PARAM_ID_REVERB_DECAY_HF_RATIO} - @h2xmlp_description { Specifies the ratio of high frequency decay time} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_DECAY_HF_RATIO parameter used by the - Reverb module. - */ -struct capi_reverb_decay_hf_ratio_t -{ - uint32_t decay_hf_ratio; - /**< @h2xmle_description {Specifies the ratio of high frequency decay time (at 5 kHz) relative - to the decay time at low frequencies,in the units of 'milliseconds'.} - @h2xmle_default {500} - @h2xmle_range {150..2000} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/*ID of the Reverberation Reflections Level parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_REFLECTIONS_LEVEL 0x08001105 - -/* Structure for the reverb reflections level parameter of Reverb module. */ -typedef struct capi_reverb_reflections_level_t capi_reverb_reflections_level_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_REFLECTIONS_LEVEL",PARAM_ID_REVERB_REFLECTIONS_LEVEL} - @h2xmlp_description { Specifies the volume level of the early reflections} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_REFLECTIONS_LEVEL parameter used by the - Reverb module. - */ -struct capi_reverb_reflections_level_t -{ - int32_t reflections_level; - /**< @h2xmle_description {Specifies the volume level of the early reflections,in the units of 'millibels'.} - @h2xmle_range {-9600..1000} - @h2xmle_default {-9600} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - -/*ID of the Reverberation Reflections Delay parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_REFLECTIONS_DELAY 0x08001106 - -/* Structure for the reverb reflections delay parameter of Reverb module. */ -typedef struct capi_reverb_reflections_delay_t capi_reverb_reflections_delay_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_REFLECTIONS_DELAY",PARAM_ID_REVERB_REFLECTIONS_DELAY} - @h2xmlp_description { Specifies the time between the first reflection and the late reverberation} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_REFLECTIONS_DELAY parameter used by the - Reverb module. - */ -struct capi_reverb_reflections_delay_t -{ - uint32_t reflections_delay; - /**< @h2xmle_description { Specifies the time between the first reflection and - the late reverberation,in the units of 'milliseconds'.} - @h2xmle_range {0..300} - @h2xmle_default {20} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - -/* ID of the Reverberation Level parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_LEVEL 0x08001107 - -/* Structure for the reverb level parameter of Reverb module. */ -typedef struct capi_reverb_level_t capi_reverb_level_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_LEVEL",PARAM_ID_REVERB_LEVEL} - @h2xmlp_description { Specifies the volume level of the late reverberation} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_LEVEL parameter used by the - Reverb module. - */ -struct capi_reverb_level_t -{ - int32_t reverb_level; - /**< @h2xmle_description {Specifies the volume level of the late reverberation.} - @h2xmle_range {-9600..2000} - @h2xmle_default {-9600} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - -/*ID of the Reverberation Delay parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_DELAY 0x08001108 - -/* Structure for the reverb delay parameter of Reverb module. */ -typedef struct capi_reverb_delay_t capi_reverb_delay_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_DELAY",PARAM_ID_REVERB_DELAY} - @h2xmlp_description { Specifies the time between the first reflection and the late reverberation} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_DELAY parameter used by the - Reverb module. - */ -struct capi_reverb_delay_t -{ - uint32_t reverb_delay; - /**< @h2xmle_description {Specifies the time between the first reflection and - the late reverberation,in the units of ' milliseconds'.} - @h2xmle_range {0..100} - @h2xmle_default {40} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - - -/* ID of the Reverberation Diffusion parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_DIFFUSION 0x08001109 - -/* Structure for the reverb diffusion parameter of Reverb module. */ -typedef struct capi_reverb_diffusion_t capi_reverb_diffusion_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_DIFFUSION",PARAM_ID_REVERB_DIFFUSION} - @h2xmlp_description { Specifies the echo density in the late reverberation decay} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_DIFFUSION parameter used by the - Reverb module. - */ -struct capi_reverb_diffusion_t -{ - uint32_t diffusion; - /**< @h2xmle_description {Specifies the echo density in the late reverberation decay.} - @h2xmle_range {0..1000} - @h2xmle_default {1000} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/** ID of the Reverberation Density parameter used by CAPI_MODULE_ID_REVERB. */ -#define PARAM_ID_REVERB_DENSITY 0x0800110A - -/* Structure for the reverb density parameter of Reverb module. */ -typedef struct capi_reverb_density_t capi_reverb_density_t; -/** @h2xmlp_parameter {"PARAM_ID_REVERB_DENSITY",PARAM_ID_REVERB_DENSITY} - @h2xmlp_description { Specifies the modal density of the late reverberation decay} */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_REVERB_DENSITY parameter used by the - Reverb module. - */ -struct capi_reverb_density_t -{ - uint32_t density; - /**< @h2xmle_description {Specifies the modal density of the late reverberation decay} - @h2xmle_range {0..1000} - - @h2xmle_default {1000} */ - -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; -/** @} <-- End of the Module -->*/ - -#endif - diff --git a/modules/processing/shoebox_reverb/api/shoebox_api.h b/modules/processing/shoebox_reverb/api/shoebox_api.h deleted file mode 100644 index 040bfd54..00000000 --- a/modules/processing/shoebox_reverb/api/shoebox_api.h +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef API_SHOEBOX_H -#define API_SHOEBOX_H -/*============================================================================== - @file api_shoebox.h - @brief This file contains SHOEBOX API -==============================================================================*/ - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#include "module_cmn_api.h" -/*============================================================================== - Constants -==============================================================================*/ - -#define SHOEBOX_MAX_IN_PORTS 1 -#define SHOEBOX_MAX_OUT_PORTS 1 -#define SHOEBOX_STACK_SIZE 2000 - - -#define MODULE_ID_SHOEBOX 0x07001058 -/** - @h2xmlm_module {"MODULE_ID_SHOEBOX", - MODULE_ID_SHOEBOX} - @h2xmlm_displayName {"Shoebox"} - @h2xmlm_modSearchKeys{effects, Audio} - - @h2xmlm_toolPolicy {Calibration} - @h2xmlm_description {Shoebox Module which reduces reverberation effects in a cubical room.\n - - This module supports the following parameter IDs: \n - - #PARAM_ID_MODULE_ENABLE \n -* - #PARAM_ID_SHOEBOX_BRIGHTNESS_ADJUST \n -* - #PARAM_ID_SHOEBOX_DECAY_TIME_ADJUST \n -* - #PARAM_ID_SHOEBOX_ROOM_MATERIAL_TIME_ADJUST \n -* - #PARAM_ID_SHOEBOX_ROOM_SIZE_TIME_ADJUST \n -* - #PARAM_ID_SHOEBOX_WET_MIX \n -* - #PARAM_ID_SHOEBOX_GAIN \n -* -* Supported Input Media Format:\n -* - Data Format : FIXED_POINT\n -* - fmt_id : Don't care\n -* - Sample Rates : {8000,16000,32000,44100,48000,96000,192000}\n -* - Number of channels : {1 ,2}\n -* - Channel type : 1 to 63\n -* - Bits per sample : 16, 32\n -* - Q format : 15, 27\n -* - Interleaving : de-interleaved unpacked\n -* - Signed/unsigned : Signed } - - @h2xmlm_dataMaxInputPorts {SHOEBOX_MAX_IN_PORTS} - @h2xmlm_dataInputPorts {IN=2} - @h2xmlm_dataMaxOutputPorts {SHOEBOX_MAX_OUT_PORTS} - @h2xmlm_dataOutputPorts {OUT=1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC, APM_CONTAINER_TYPE_GC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {SHOEBOX_STACK_SIZE} - @h2xmlm_ToolPolicy {Calibration} - @{ <-- Start of the Module --> - @h2xml_Select {"param_id_module_enable_t"} - @h2xmlm_InsertParameter - */ - -#define PARAM_ID_SHOEBOX_WET_MIX 0x0800111D - -/* Structure for the wet mix parameter of Shoebox module. */ -typedef struct shoebox_wet_mix_t shoebox_wet_mix_t; -/** @h2xmlp_parameter {"PARAM_ID_SHOEBOX_WET_MIX", PARAM_ID_SHOEBOX_WET_MIX} - @h2xmlp_description {Payload of the PARAM_ID_SHOEBOX_WET_MIX parameter used by the Shoebox module} - */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_SHOEBOX_WET_MIX parameter used by the - Shoebox module. - */ -struct shoebox_wet_mix_t -{ - uint32_t wet_mix; - /**< @h2xmle_description {Specifies the mix ratio between dry and wet sound} - @h2xmle_default {600} - @h2xmle_range {0..1000} */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -#define PARAM_ID_SHOEBOX_ROOM_SIZE 0x0800111E - -/* Structure for the room size parameter of Shoebox module. */ -typedef struct shoebox_room_size_t shoebox_room_size_t; -/** @h2xmlp_parameter {"PARAM_ID_SHOEBOX_ROOM_SIZE", PARAM_ID_SHOEBOX_ROOM_SIZE} - @h2xmlp_description {Payload of the PARAM_ID_SHOEBOX_ROOM_SIZE parameter used by the Shoebox module} - */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_SHOEBOX_ROOM_SIZE parameter used by the - Shoebox module. - */ -struct shoebox_room_size_t -{ - uint32_t length; - /**< @h2xmle_description {Specifies length of the room, in the units of 'meter'} - @h2xmle_default {524288} - @h2xmle_range {0..13107200} - @h2xmle_dataFormat {Q16} */ - - uint32_t width; - /**< @h2xmle_description { Specifies width of the room, in the units of 'meter'} - @h2xmle_default {327680} - @h2xmle_range {0..6553600} - @h2xmle_dataFormat {Q16} */ - - uint32_t height; - /**< @h2xmle_description { Specifies height of the room, in the units of 'meter'} - @h2xmle_default {196608} - @h2xmle_range {0..655360} - @h2xmle_dataFormat {Q16} */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -#define PARAM_ID_SHOEBOX_ROOM_MATERIAL 0x0800111F - -/** supported material IDs forPARAM_ID_SHOEBOX_ROOM_MATERIAL - */ - -/** To simulate the case when there is no reflection. */ -#define SHOEBOX_MATERIAL_TRANSPARENT 0 - -/** To simulate the reflection from acoustic ceiling tiles. */ -#define SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES 1 - -/** To simulate the reflection from bare brick surface. */ -#define SHOEBOX_MATERIAL_BRICK_BARE 2 - -/** To simulate the reflection from painted brick surface. */ -#define SHOEBOX_MATERIAL_BRICK_PAINTED 3 - -/** To simulate the reflection from coarse concrete block. */ -#define SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE 4 - -/** To simulate the reflection from painted concrete block. */ -#define SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED 5 - -/** To simulate the reflection from heavy curtain. */ -#define SHOEBOX_MATERIAL_CURTAIN_HEAVY 6 - -/** To simulate the reflection from fiber glass insulation. */ -#define SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION 7 - -/** To simulate the reflection from thick glass */ -#define SHOEBOX_MATERIAL_GLASS_THICK 8 - -/** To simulate the reflection from thin glass. */ -#define SHOEBOX_MATERIAL_GLASS_THIN 9 - -/** To simulate the reflection from grass. */ -#define SHOEBOX_MATERIAL_GRASS 10 - -/** To simulate the reflection from linoleum on concrete. */ -#define SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE 11 - -/** To simulate the reflection from marble. */ -#define SHOEBOX_MATERIAL_MARBLE 12 - -/** To simulate the reflection from metal. */ -#define SHOEBOX_MATERIAL_METAL 13 - -/** To simulate the reflection from parquet on concrete. */ -#define SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE 14 - -/** To simulate the reflection from rough plaster. */ -#define SHOEBOX_MATERIAL_PLASTER_ROUGH 15 - -/** To simulate the reflection from smooth plaster. */ -#define SHOEBOX_MATERIAL_PLASTER_SMOOTH 16 - -/** To simulate the reflection from plywood panel. */ -#define SHOEBOX_MATERIAL_PLYWOOD_PANEL 17 - -/** To simulate the reflection from polished concrete or tile. */ -#define SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE 18 - -/** To simulate the reflection from sheet rock. */ -#define SHOEBOX_MATERIAL_SHEET_ROCK 19 - -/** To simulate the reflection from water or ice surface. */ -#define SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE 20 - -/** To simulate the reflection from wood on ceiling. */ -#define SHOEBOX_MATERIAL_WOOD_ON_CEILING 21 - -/** To simulate the reflection from wood panel. */ -#define SHOEBOX_MATERIAL_WOOD_PANEL 22 - -/* Structure for the room material parameter of Shoebox module. */ -typedef struct shoebox_room_material_t shoebox_room_material_t; -/** @h2xmlp_parameter {"PARAM_ID_SHOEBOX_ROOM_MATERIAL", PARAM_ID_SHOEBOX_ROOM_MATERIAL} - @h2xmlp_description {Payload of the PARAM_ID_SHOEBOX_ROOM_MATERIAL parameter used by the - Shoebox module.\n -To simulate the case when there is no reflection - SHOEBOX_MATERIAL_TRANSPARENT\n -To simulate the reflection from acoustic ceiling tiles - SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES\n -To simulate the reflection from bare brick surface - SHOEBOX_MATERIAL_BRICK_BARE\n -To simulate the reflection from painted brick surface - -SHOEBOX_MATERIAL_BRICK_PAINTED\n -To simulate the reflection from coarse concrete block - -SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE\n -To simulate the reflection from painted concrete block - -SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED\n -To simulate the reflection from heavy curtain - -SHOEBOX_MATERIAL_CURTAIN_HEAVY\n -To simulate the reflection from fiber glass insulation - -SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION\n -To simulate the reflection from thick glass - -SHOEBOX_MATERIAL_GLASS_THICK\n -To simulate the reflection from thin glass - -SHOEBOX_MATERIAL_GLASS_THIN\n -To simulate the reflection from grass - -SHOEBOX_MATERIAL_GRASS\n -To simulate the reflection from linoleum on concrete - -SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE\n -To simulate the reflection from marble - -SHOEBOX_MATERIAL_MARBLE\n -To simulate the reflection from metal - -SHOEBOX_MATERIAL_METAL\n -To simulate the reflection from parquet on concrete - -SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE\n -To simulate the reflection from rough plaster - -SHOEBOX_MATERIAL_PLASTER_ROUGH\n -To simulate the reflection from smooth plaster - -SHOEBOX_MATERIAL_PLASTER_SMOOTH\n -To simulate the reflection from plywood panel - -SHOEBOX_MATERIAL_PLYWOOD_PANEL\n -To simulate the reflection from polished concrete or tile - -SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE\n -To simulate the reflection from sheet rock - -SHOEBOX_MATERIAL_SHEET_ROCK\n -To simulate the reflection from water or ice surface - -SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE\n -To simulate the reflection from wood on ceiling - -SHOEBOX_MATERIAL_WOOD_ON_CEILING\n -To simulate the reflection from wood panel - -SHOEBOX_MATERIAL_WOOD_PANEL } - - */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_SHOEBOX_ROOM_MATERIAL parameter used by the - Shoebox module. - - This parameter supports the following material IDs: - - - #SHOEBOX_MATERIAL_TRANSPARENT - - #SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES - - #SHOEBOX_MATERIAL_BRICK_BARE - - #SHOEBOX_MATERIAL_BRICK_PAINTED - - #SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE - - #SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED - - #SHOEBOX_MATERIAL_CURTAIN_HEAVY - - #SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION - - #SHOEBOX_MATERIAL_GLASS_THICK - - #SHOEBOX_MATERIAL_GLASS_THIN - - #SHOEBOX_MATERIAL_GRASS - - #SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE - - #SHOEBOX_MATERIAL_MARBLE - - #SHOEBOX_MATERIAL_METAL - - #SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE - - #SHOEBOX_MATERIAL_PLASTER_ROUGH - - #SHOEBOX_MATERIAL_PLASTER_SMOOTH - - #SHOEBOX_MATERIAL_PLYWOOD_PANEL - - #SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE - - #SHOEBOX_MATERIAL_SHEET_ROCK - - #SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE - - #SHOEBOX_MATERIAL_WOOD_ON_CEILING - - #SHOEBOX_MATERIAL_WOOD_PANEL - */ -struct shoebox_room_material_t -{ - uint32_t front_wall; - /**< @h2xmle_description {Specifies the material of front wall} - @h2xmle_default {SHOEBOX_MATERIAL_TRANSPARENT} - @h2xmle_rangeList {"SHOEBOX_MATERIAL_TRANSPARENT"=0; - "SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES"=1; - "SHOEBOX_MATERIAL_BRICK_BARE"=2; - "SHOEBOX_MATERIAL_BRICK_PAINTED"=3; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE"=4; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED"=5; - "SHOEBOX_MATERIAL_CURTAIN_HEAVY"=6; - "SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION"=7; - "SHOEBOX_MATERIAL_GLASS_THICK"=8; - "SHOEBOX_MATERIAL_GLASS_THIN"=9; - "SHOEBOX_MATERIAL_GRASS"=10; - "SHOEBOX_MATERIAL_GRASS"=11; - "SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE"=12; - "SHOEBOX_MATERIAL_MARBLE"=13; - "SHOEBOX_MATERIAL_METAL"=14; - "SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE"=15; - "SHOEBOX_MATERIAL_PLASTER_ROUGH"=16; - "SHOEBOX_MATERIAL_PLASTER_SMOOTH"=17; - "SHOEBOX_MATERIAL_PLYWOOD_PANEL"=18; - "SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE"=19; - "SHOEBOX_MATERIAL_SHEET_ROCK"=20; - "SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE"=21; - "SHOEBOX_MATERIAL_WOOD_ON_CEILING"=22; - "SHOEBOX_MATERIAL_WOOD_PANEL"=23 } */ - - uint32_t back_wall; - - /**< @h2xmle_description {Specifies the material of back wall} - @h2xmle_default {SHOEBOX_MATERIAL_TRANSPARENT} - @h2xmle_rangeList {"SHOEBOX_MATERIAL_TRANSPARENT"=0; - "SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES"=1; - "SHOEBOX_MATERIAL_BRICK_BARE"=2; - "SHOEBOX_MATERIAL_BRICK_PAINTED"=3; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE"=4; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED"=5; - "SHOEBOX_MATERIAL_CURTAIN_HEAVY"=6; - "SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION"=7; - "SHOEBOX_MATERIAL_GLASS_THICK"=8; - "SHOEBOX_MATERIAL_GLASS_THIN"=9; - "SHOEBOX_MATERIAL_GRASS"=10; - "SHOEBOX_MATERIAL_GRASS"=11; - "SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE"=12; - "SHOEBOX_MATERIAL_MARBLE"=13; - "SHOEBOX_MATERIAL_METAL"=14; - "SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE"=15; - "SHOEBOX_MATERIAL_PLASTER_ROUGH"=16; - "SHOEBOX_MATERIAL_PLASTER_SMOOTH"=17; - "SHOEBOX_MATERIAL_PLYWOOD_PANEL"=18; - "SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE"=19; - "SHOEBOX_MATERIAL_SHEET_ROCK"=20; - "SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE"=21; - "SHOEBOX_MATERIAL_WOOD_ON_CEILING"=22; - "SHOEBOX_MATERIAL_WOOD_PANEL"=23 }*/ - - uint32_t left_wall; - - /**< @h2xmle_description {Specifies the material of left wall} - @h2xmle_default {SHOEBOX_MATERIAL_TRANSPARENT} - @h2xmle_rangeList {"SHOEBOX_MATERIAL_TRANSPARENT"=0; - "SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES"=1; - "SHOEBOX_MATERIAL_BRICK_BARE"=2; - "SHOEBOX_MATERIAL_BRICK_PAINTED"=3; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE"=4; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED"=5; - "SHOEBOX_MATERIAL_CURTAIN_HEAVY"=6; - "SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION"=7; - "SHOEBOX_MATERIAL_GLASS_THICK"=8; - "SHOEBOX_MATERIAL_GLASS_THIN"=9; - "SHOEBOX_MATERIAL_GRASS"=10; - "SHOEBOX_MATERIAL_GRASS"=11; - "SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE"=12; - "SHOEBOX_MATERIAL_MARBLE"=13; - "SHOEBOX_MATERIAL_METAL"=14; - "SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE"=15; - "SHOEBOX_MATERIAL_PLASTER_ROUGH"=16; - "SHOEBOX_MATERIAL_PLASTER_SMOOTH"=17; - "SHOEBOX_MATERIAL_PLYWOOD_PANEL"=18; - "SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE"=19; - "SHOEBOX_MATERIAL_SHEET_ROCK"=20; - "SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE"=21; - "SHOEBOX_MATERIAL_WOOD_ON_CEILING"=22; - "SHOEBOX_MATERIAL_WOOD_PANEL"=23 }*/ - - uint32_t right_wall; - - /**< @h2xmle_description {Specifies the material of right wall} - @h2xmle_default {SHOEBOX_MATERIAL_TRANSPARENT} - @h2xmle_rangeList {"SHOEBOX_MATERIAL_TRANSPARENT"=0; - "SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES"=1; - "SHOEBOX_MATERIAL_BRICK_BARE"=2; - "SHOEBOX_MATERIAL_BRICK_PAINTED"=3; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE"=4; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED"=5; - "SHOEBOX_MATERIAL_CURTAIN_HEAVY"=6; - "SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION"=7; - "SHOEBOX_MATERIAL_GLASS_THICK"=8; - "SHOEBOX_MATERIAL_GLASS_THIN"=9; - "SHOEBOX_MATERIAL_GRASS"=10; - "SHOEBOX_MATERIAL_GRASS"=11; - "SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE"=12; - "SHOEBOX_MATERIAL_MARBLE"=13; - "SHOEBOX_MATERIAL_METAL"=14; - "SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE"=15; - "SHOEBOX_MATERIAL_PLASTER_ROUGH"=16; - "SHOEBOX_MATERIAL_PLASTER_SMOOTH"=17; - "SHOEBOX_MATERIAL_PLYWOOD_PANEL"=18; - "SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE"=19; - "SHOEBOX_MATERIAL_SHEET_ROCK"=20; - "SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE"=21; - "SHOEBOX_MATERIAL_WOOD_ON_CEILING"=22; - "SHOEBOX_MATERIAL_WOOD_PANEL"=23 }*/ - - uint32_t ceiling; - - /**< @h2xmle_description {Specifies the material of ceiling} - @h2xmle_default {SHOEBOX_MATERIAL_TRANSPARENT} - @h2xmle_rangeList {"SHOEBOX_MATERIAL_TRANSPARENT"=0; - "SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES"=1; - "SHOEBOX_MATERIAL_BRICK_BARE"=2; - "SHOEBOX_MATERIAL_BRICK_PAINTED"=3; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE"=4; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED"=5; - "SHOEBOX_MATERIAL_CURTAIN_HEAVY"=6; - "SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION"=7; - "SHOEBOX_MATERIAL_GLASS_THICK"=8; - "SHOEBOX_MATERIAL_GLASS_THIN"=9; - "SHOEBOX_MATERIAL_GRASS"=10; - "SHOEBOX_MATERIAL_GRASS"=11; - "SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE"=12; - "SHOEBOX_MATERIAL_MARBLE"=13; - "SHOEBOX_MATERIAL_METAL"=14; - "SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE"=15; - "SHOEBOX_MATERIAL_PLASTER_ROUGH"=16; - "SHOEBOX_MATERIAL_PLASTER_SMOOTH"=17; - "SHOEBOX_MATERIAL_PLYWOOD_PANEL"=18; - "SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE"=19; - "SHOEBOX_MATERIAL_SHEET_ROCK"=20; - "SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE"=21; - "SHOEBOX_MATERIAL_WOOD_ON_CEILING"=22; - "SHOEBOX_MATERIAL_WOOD_PANEL"=23 }*/ - - uint32_t floor; - - /**< @h2xmle_description {Specifies the material of floor} - @h2xmle_default {SHOEBOX_MATERIAL_TRANSPARENT} - @h2xmle_rangeList {"SHOEBOX_MATERIAL_TRANSPARENT"=0; - "SHOEBOX_MATERIAL_ACOUSTIC_CEILING_TILES"=1; - "SHOEBOX_MATERIAL_BRICK_BARE"=2; - "SHOEBOX_MATERIAL_BRICK_PAINTED"=3; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_COARSE"=4; - "SHOEBOX_MATERIAL_CONCRETE_BLOCK_PAINTED"=5; - "SHOEBOX_MATERIAL_CURTAIN_HEAVY"=6; - "SHOEBOX_MATERIAL_FIBER_GLASS_INSULATION"=7; - "SHOEBOX_MATERIAL_GLASS_THICK"=8; - "SHOEBOX_MATERIAL_GLASS_THIN"=9; - "SHOEBOX_MATERIAL_GRASS"=10; - "SHOEBOX_MATERIAL_GRASS"=11; - "SHOEBOX_MATERIAL_LINOLEUM_ON_CONCRETE"=12; - "SHOEBOX_MATERIAL_MARBLE"=13; - "SHOEBOX_MATERIAL_METAL"=14; - "SHOEBOX_MATERIAL_PARQUET_ON_CONCRETE"=15; - "SHOEBOX_MATERIAL_PLASTER_ROUGH"=16; - "SHOEBOX_MATERIAL_PLASTER_SMOOTH"=17; - "SHOEBOX_MATERIAL_PLYWOOD_PANEL"=18; - "SHOEBOX_MATERIAL_POLISHED_CONCRETE_OR_TILE"=19; - "SHOEBOX_MATERIAL_SHEET_ROCK"=20; - "SHOEBOX_MATERIAL_WATER_OR_ICE_SURFACE"=21; - "SHOEBOX_MATERIAL_WOOD_ON_CEILING"=22; - "SHOEBOX_MATERIAL_WOOD_PANEL"=23 } */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -#define PARAM_ID_SHOEBOX_GAIN 0x08001120 - -/* Structure for the gain parameter of Shoebox module. */ -typedef struct shoebox_gain_t shoebox_gain_t; -/** @h2xmlp_parameter {"PARAM_ID_SHOEBOX_GAIN", PARAM_ID_SHOEBOX_GAIN} - @h2xmlp_description {Payload of the PARAM_ID_SHOEBOX_GAIN parameter used by the - Shoebox module.} - */ - -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_SHOEBOX_GAIN parameter used by the - Shoebox module. - */ -struct shoebox_gain_t -{ - uint32_t reverb_gain; - /**< @h2xmle_description {Specifies Gain adjustment to the environment reverb effect} - @h2xmle_default {65536} - @h2xmle_range {0..4294967295} - @h2xmle_dataFormat {Q16} */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -#define PARAM_ID_SHOEBOX_DECAY_TIME_ADJUST 0x080010FB - -/* Structure for the decay time adjust parameter of Shoebox module. */ -typedef struct shoebox_decay_time_adjust_t shoebox_decay_time_adjust_t; -/** @h2xmlp_parameter {"PARAM_ID_SHOEBOX_DECAY_TIME_ADJUST", PARAM_ID_SHOEBOX_DECAY_TIME_ADJUST} - @h2xmlp_description {Payload of the PARAM_ID_SHOEBOX_DECAY_TIME_ADJUST parameter used by the Shoebox module.} - */ -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_SHOEBOX_DECAY_TIME_ADJUST parameter used by the - Shoebox module. - */ -struct shoebox_decay_time_adjust_t -{ - uint32_t decay_time_adjust; - /**< @h2xmle_description {Specifies Adjustment to RT60 time.} - @h2xmle_default {65536} - @h2xmle_range {0..4294967295} - @h2xmle_dataFormat {Q16} */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -#define PARAM_ID_SHOEBOX_BRIGHTNESS_ADJUST 0x080010FC - -/* Structure for the brightness adjust parameter of Shoebox module. */ -typedef struct shoebox_brightness_adjust_t shoebox_brightness_adjust_t; -/** @h2xmlp_parameter {"PARAM_ID_SHOEBOX_BRIGHTNESS_ADJUST", PARAM_ID_SHOEBOX_BRIGHTNESS_ADJUST} - @h2xmlp_description {Payload of the PARAM_ID_SHOEBOX_BRIGHTNESS_ADJUST parameter used by the - Shoebox module.} - */ -#include "spf_begin_pack.h" -#include "spf_begin_pragma.h" - -/* Payload of the PARAM_ID_SHOEBOX_BRIGHTNESS_ADJUST parameter used by the - Shoebox module. - */ -struct shoebox_brightness_adjust_t -{ - uint32_t brightness_adjust; - /**< @h2xmle_description {Specifies The balance between the low and high frequency components of the Shoebox - reverberation.} - @h2xmle_default {65536} - @h2xmle_range {0..4294967295} - @h2xmle_dataFormat {Q16} */ -} -#include "spf_end_pragma.h" -#include "spf_end_pack.h" -; - -/** - @h2xml_Select {lib_version_t} - @h2xmlm_InsertParameter -*/ - -/** @} <-- End of the Module -->*/ -#endif diff --git a/modules/processing/shoebox_reverb/bin/arm/libshoebox_reverb.a b/modules/processing/shoebox_reverb/bin/arm/libshoebox_reverb.a deleted file mode 100644 index c2f5e01e10487e0b5590c450a0f8c78c8564ff4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536248 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≻BlY0=$c{*W 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 z%0D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%0Dc!>b{u;^|Q*F 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%0A~!LG9y`A9e>d8m+{B-f)wQ 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 wQ-ih3v7PB5>}facx1HUz&ww8fXZox5x6FVQ-R - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Reverb Environment Enum -----------------------------------------------------------------------------*/ -typedef enum room_material_type { - /* Q3D_AUDIO_MATERIAL list starts */ - TRANSPARENT = 0, - ACOUSTIC_CEILING_TILES, - BRICK_BARE, - BRICK_PAINTED, - CONCRETE_BLOCK_COARSE, - CONCRETE_BLOCK_PAINTED, - CURTAIN_HEAVY, - FIBER_GLASS_INSULATION, - GLASS_THICK, - GLASS_THIN, - GRASS, - LINOLEUM_ON_CONCRETE, - MARBLE, - METAL, - PARQUET_ON_CONCRETE, - PLASTER_ROUGH, - PLASTER_SMOOTH, - PLYWOOD_PANEL, - POLISHED_CONCRETE_OR_TILE, - SHEET_ROCK, - WATER_OR_ICE_SURFACE, - WOOD_ON_CEILING, - WOOD_PANEL, - /* Q3D_AUDIO_MATERIAL list ends */ - - MATERIAL_RESERVE1, - MATERIAL_RESERVE2, -} room_material_type; - - - -/*---------------------------------------------------------------------------- - Parameters with IDs -----------------------------------------------------------------------------*/ -/* shoebox_ver_param_t - -This structure defines the parameters associated with SHOEBOX_VER_PARAM in enum algo_struct_id_t, which is in algo_api.h - -This is a Mandatory Param Structure - -Supported only for get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure, expects size >= sizeof(shoebox_ver_param_t) - --OUT: Callee fills the appropriate size of the buffer filled which is sizeof(shoebox_ver_param_t) -ver: [OUT] returned version number -*/ -typedef struct shoebox_ver_param_t { - uint32_t struct_size; - uint32_t reserved; - int64_t ver; -} shoebox_ver_param_t; - - -/* shoebox_enable_param_t - -This structure defines the parameters associated with SHOEBOX_ENABLE_PARAM in enum algo_struct_id_t, which is in algo_api.h - -This is a Mandatory Param Structure - -Supported only for get/set_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure, expects size >= sizeof(shoebox_enable_param_t) - --OUT: Callee fills the appropriate size of the buffer filled which is sizeof(shoebox_enable_param_t) -enable: [IN/OUT] enable or disable status, range: [1:on or 0:off] - range: [0(off), 1(on) ]; - default value: 0 (off) -*/ -typedef struct shoebox_enable_param_t { - uint32_t struct_size; - uint32_t enable; -} shoebox_enable_param_t; - - -/* shoebox_wet_mix_param_t - -This structure defines the mix ratio between dry and wet sound, which is associated with SHOEBOX_WET_MIX_PARAM defined in shoebox_api.h - -Supported for set/get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) & get_param(...). expects size >= sizeof(shoebox_wet_mix_param_t) - --OUT: Callee fills the appropriate size of the buffer filled in api get_param(...),sizeof(shoebox_wet_mix_param_t) -wet_mix: [IN/OUT]: overall gain adjustment, range: [0, 1000] per millie -*/ -typedef struct shoebox_wet_mix_param_t -{ - uint32_t struct_size; - int32_t wet_mix; -} shoebox_wet_mix_param_t; - - -/* shoebox_room_size_param_t - -This structure defines the room dimension parameters, which is associated with SHOEBOX_ROOM_SIZE_PARAM defined in shoebox_api.h - -Supported for set/get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) & get_param(...). expects size >= sizeof(shoebox_room_size_param_t) - --OUT: Callee fills the appropriate size of the buffer filled in api get_param(...),sizeof(shoebox_room_size_param_t) -length: [IN/OUT]: stores the length of the room, in the unit of meter in uint32Q16 format, - range: [1 2^32-1] (equivalent range in meter is [2^-16 m, 65535m]) - default value: 524288 (equivalent value in meter is 8m) -width: [IN/OUT]: stores the width of the room, in the unit of meter in uint32Q16 format, - range: [1 2^32-1] (equivalent range in meter is [2^-16 m, 65535m]) - default value: 327680 (equivalent value in meter is 5m) -height: [IN/OUT]: stores the height of the room, in the unit of meter in uint32Q16 format, - range: [1 2^32-1] (equivalent range in meter is [2^-16 m, 65535m]) - default value: 196608 (equivalent value in meter is 3m) -*/ -typedef struct shoebox_room_size_param_t -{ - uint32_t struct_size; - uint32_t length; - uint32_t width; - uint32_t height; - -} shoebox_room_size_param_t; - - -/* shoebox_room_material_param_t - -This structure defines the room walls material parameters, which is associated with SHOEBOX_ROOM_MATERIAL_PARAM defined in shoebox_api.h - -Supported for set/get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) & get_param(...). expects size >= sizeof(shoebox_room_material_param_t) - --OUT: Callee fills the appropriate size of the buffer filled in api get_param(...),sizeof(shoebox_room_material_param_t) -front_wall: [IN/OUT]: stores the material of front wall (defined in enum room_material_type) - range: [0 25] - default value: 16 (PLASTER_SMOOTH) -back_wall: [IN/OUT]: stores the material of back wall (defined in enum room_material_type) - range: [0 25] - default value: 16 (PLASTER_SMOOTH) -left_wall: [IN/OUT]: stores the material of left wall (defined in enum room_material_type) - range: [0 25] - default value: 16 (PLASTER_SMOOTH) -right_wall: [IN/OUT]: stores the material of right wall (defined in enum room_material_type) - range: [0 25] - default value: 16 (PLASTER_SMOOTH) -ceiling: [IN/OUT]: stores the material of ceiling (defined in enum room_material_type) - range: [0 25] - default value: 15 (PLASTER_ROUGH) -floor: [IN/OUT]: stores the material of floor wall (defined in enum room_material_type) - range: [0 25] - default value: 14 (PARQUET_ON_CONCRETE) -*/ -typedef struct shoebox_room_material_param_t -{ - uint32_t struct_size; - int32_t front_wall; - int32_t back_wall; - int32_t left_wall; - int32_t right_wall; - int32_t ceiling; - int32_t floor; - -} shoebox_room_material_param_t; - - -/* shoebox_reverb_gain_param_t - -This structure defines the adjustment gain to environment reverb effect, which is associated with SHOEBOX_REVERB_GAIN_PARAM defined in shoebox_api.h -This is suppose to be mapped to DayDream's reverb gain parameter. - -Supported for set/get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) & get_param(...). expects size >= sizeof(shoebox_reverb_gain_param_t) - --OUT: Callee fills the appropriate size of the buffer filled in api get_param(...),sizeof(shoebox_reverb_gain_param_t) -room_level: [IN/OUT]: gain adjustment to the environment reverb effect, format in uint32Q16 - range: [0, 2^32-1], (equivalent floating point range is: 0.0 to (2^16-2^-16) ) - default value: 20724 (equivaluent to -10dB) -*/ -typedef struct shoebox_reverb_gain_param_t -{ - uint32_t struct_size; - uint32_t reverb_gain; -} shoebox_reverb_gain_param_t; - - -/* shoebox_decay_time_adjust_param_t - -This structure defines the adjust factor for decay time RT60 , which is associated with SHOEBOX_DECAY_TIME_ADJUST_PARAM defined in shoebox_api.h -This is supposed to be mapped to DayDream's time adjust - -Supported for set/get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) & get_param(...). expects size >= sizeof(shoebox_decay_time_adjust_param_t) - --OUT: Callee fills the appropriate size of the buffer filled in api get_param(...),sizeof(shoebox_decay_time_adjust_param_t) -decay_time_adjust: [IN/OUT]: adjustment to RT60 time, format in uint32Q16 - range: [0, 2^32-1], (equivalent floating point range is: 0.0 to (2^16-2^-16) ) - default value: 65536 (equivalent to floating point value 1.0 ) -*/ -typedef struct shoebox_decay_time_adjust_param_t -{ - uint32_t struct_size; - uint32_t decay_time_adjust; -} shoebox_decay_time_adjust_param_t; - - -/* shoebox_brightness_adjust_param_t - -This structure defines the balance between the low and high frequency components of the reverb, which is associated -with SHOEBOX_BRIGHTNESS_ADJUST_PARAM defined in shoebox_api.h. -Internally, this is mapped to tuning of shoebox_decay_hf_ratio_param_t and shoebox_room_hf_level_param_t to match with DayDream's brightness_adjust - -Supported for set/get_param(...) api - -struct_size: [IN/OUT]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) & get_param(...). expects size >= sizeof(shoebox_brightness_adjust_param_t) - --OUT: Callee fills the appropriate size of the buffer filled in api get_param(...),sizeof(shoebox_brightness_adjust_param_t) -brightness_adjust: [IN/OUT]: the balance between the low and high frequency components of the reverb, format in uint32Q16 - range: [0, 2^32-1], (equivalent floating point range is: 0.0 to (2^16-2^-16) ) - default value: 65536 (equivalent to floating point value 1.0 ) -*/ -typedef struct shoebox_brightness_param_t -{ - uint32_t struct_size; - uint32_t brightness_adjust; -} shoebox_brightness_adjust_param_t; - - -/* shoebox_reset_param_t - -This structure defines the parameters associated with SHOEBOX_RESET_PARAM, in enum algo_struct_id_t, which is in algo_api.h - -algo_set can be used to reinit the library while retaining the current set of calibration parameters -Supports set_param(...) only - -struct_size: [IN]: --IN : Caller fills size for the size of the payload structure in apis set_param(...) . expects size >= sizeof(shoebox_reset_param_t) - -This parameter has no payload other than size -*/ -typedef struct shoebox_reset_param_t { - uint32_t struct_size; -} shoebox_reset_param_t; - - -/* shoebox_alg_delay_param_t - -This structure defines the algorithm delay associated with SHOEBOX_ALG_DELAY_PARAM, in enum algo_struct_id_t, which is in algo_api.h - -algo_get can be used to return the algorithm delay in Shoebox -Supports get_param(...) only - -struct_size: [IN]: IN : Caller fills size for the size of the payload structure in apis set_param(...) . expects size >= sizeof(shoebox_alg_delay_param_t) -alg_delay: [OUT]: the algorithm delay of shoebox. For v1, it always return 0 for there's no algorithm delay in dry path -*/ -typedef struct shoebox_alg_delay_param_t -{ - uint32_t struct_size; - uint32_t alg_delay; -} shoebox_alg_delay_param_t; - - -/* shoebox_crossfade_param_t - -This structure defines the crossfading flag associated with SHOEBOX_CROSSFADE_PARAM, in enum algo_struct_id_t, which is in algo_api.h -crossfading(gain panning) is executed when shoebox/reverb is enabled or disabled or cfg changed on the fly. - -algo_get can be used to return the crossfading flag in Shoebox -Supports get_param(...) only - -struct_size: [IN]: IN : Caller fills size for the size of the payload structure in apis set_param(...) . expects size >= sizeof(shoebox_crossfade_param_t) -crossfade: [OUT]: the crossfading flag returned from the library, - range: [0(no), 1(yes)] - crossfading/transition time is fixed to 100ms inside Reverb. No configurable through API. - -*/ -typedef struct shoebox_crossfade_param_t -{ - uint32_t struct_size; - uint32_t crossfade; -} shoebox_crossfade_param_t; - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* SHOEBOX_CALIBRATION_API_H */ diff --git a/modules/processing/shoebox_reverb/inc/capi_shoebox.h b/modules/processing/shoebox_reverb/inc/capi_shoebox.h deleted file mode 100644 index 7b3c8590..00000000 --- a/modules/processing/shoebox_reverb/inc/capi_shoebox.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -/** - * @file capi_shoebox.h - * - * Header file to implement the Audio Post Processor Interface for - * Shoebox module - */ - -#ifndef CAPI_SHOEBOX_H -#define CAPI_SHOEBOX_H - -#include "capi.h" -#include "ar_defs.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Get static properties of shoebox module such as - * memory, stack requirements etc. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_shoebox_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); - -/** - * Instantiates(and allocates) the module memory. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_shoebox_init(capi_t *_pif, capi_proplist_t *init_set_properties); - -/** - * Get static properties of reverb module such as - * memory, stack requirements etc. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_reverb_get_static_properties(capi_proplist_t *init_set_properties, - capi_proplist_t *static_properties); - -/** - * Instantiates(and allocates) the module memory. - * See Elite_CAPI.h for more details. - */ -capi_err_t capi_reverb_init(capi_t *_pif, capi_proplist_t *init_set_properties); - -#ifdef __cplusplus -} -#endif - -#endif /* CAPI_SHOEBOX_H */ diff --git a/modules/processing/shoebox_reverb/inc/reverb_api.h b/modules/processing/shoebox_reverb/inc/reverb_api.h deleted file mode 100644 index a97be569..00000000 --- a/modules/processing/shoebox_reverb/inc/reverb_api.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef REVERB_API_H -#define REVERB_API_H - -#include "reverb_calibration_api.h" -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Library Version -----------------------------------------------------------------------------*/ -#define REVERB_LIB_VER (0x02000004) // lib version : 2.0.4 - // (major.minor.bug) (8.16.8 bits) - -/*---------------------------------------------------------------------------- - Error Code and Types -----------------------------------------------------------------------------*/ -typedef enum REVERB_RESULT { - REVERB_SUCCESS = 0, - REVERB_FAILURE, - REVERB_MEMERROR, - REVERB_UNSUPPORTED_PARAM, -} REVERB_RESULT; - -typedef enum reverb_mode_t { // ** reverb topology mode - INSERT_EFFECT = 0, // insert: cascaded with others - AUX_EFFECT // aux: parallel with others -} reverb_mode_t; - -/*---------------------------------------------------------------------------- - Topology: Reverb operates in two modes - - 1. INSERT_EFFECT: One source in and one out, input/output channels match - so that reverb output is a mixture of original (dry) sound and reverb - (wet) sound. e.g. applying reverb to a music stream. - - |--------| - source (dry) --> | reverb | --> mixed output (dry + wet) - |--------| - - in this mode, reverb is applied by calling reverb_process function. - - 2. AUX_EFFECT: Multiple input sources and one global reverb engine. Each - input source makes a copy of itself, with its own (Q15) reverb send gain - applied, then mixed internally inside the reverb lib. The sound sources - can have different channel numbers, and don't need to match the reverb - output channel number. After mixing all inputs, reverb generates dense - echos (wet sound), and the reverb (wet) output needs to be mixed - somewhere outside the reverb library with the direct (dry) sound. - e.g. applying one global reverb for gaming or multi-track MIDI. - - source1 -.----------->|------------| |-------| - source2 -|-.--------->| dry path |---->| mixer |--> mixed output - ... | | | processing | |-------| - sourceN -|-|-.------->|------------| ^ - | | | | - | | \-gainN->|------------| | - | \---gain2->| reverb |---------/ - \-----gain1->|------------| (wet sound only) - - in this mode, reverb is applied by calling reverb_process_aux_input - multiple times when mixing each input source, then - reverb_process_aux_output is called one time after all the - sources are done with mixing for the current block of samples. -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - Channel Numbers: - - Reverb only works with input/output channels with specific orders defined - below: - 1: mono [C] - 2: stereo [L, R] - 6: 5.1 channel [L, R, C, LFE, Ls, Rs] - 8: 7.1 channel [L, R, C, LFE, Ls, Rs, Lbk, Rbk] - other non-standard channel numbers or channel orders should be properly - converted by wrapper before using reverb library. -----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- - Static Types and Lib Mems -----------------------------------------------------------------------------*/ - -typedef struct reverb_static_vars_t { // ** static params - int32 data_width; // 16 (Q15 PCM) or 32 (Q27 PCM) - int32 sample_rate; // sampling rate - int32 max_block_size; // max block size - int32 num_chs; // num of output channels - reverb_mode_t mode; // insert or aux effect -} reverb_static_vars_t; - -typedef struct reverb_mem_req_t { // ** memory requirements - uint32 mem_size; // lib mem size (lib_mem_ptr ->) - uint32 stack_size; // stack mem size -} reverb_mem_req_t; - -typedef struct reverb_lib_t { // ** library struct - void* mem_ptr; // mem pointer -} reverb_lib_t; - -/*----------------------------------------------------------------------------- - Function Declarations -----------------------------------------------------------------------------*/ - -// ** Mix one input source into aux mode reverb's internal buffers -// Description: The caller should supply input source channel number and -// reverb send gain (Q15) that comes with this input source. This function -// can be called one time for each input source and one frame -// lib_ptr: [out] pointer to library structure -// in_ptr: [in] pointer to input sample block (multi channel double ptr) -// in_chs: [in] input source channel number [1, 2, 6, 8] -// send_gain: [in] reverb send gain for this audio source (Q15) -// samples: [in] number of samples to be processed per channel -REVERB_RESULT reverb_process_aux_input(reverb_lib_t *lib_ptr, void **in_ptr, int32 in_chs, int16 send_gain, uint32 samples); - -// ** Processing one block of aux mode reverb output -// Description: before calling this function, the internal input mix buffer -// should have accumulated samples from all the input sources who wants to -// have themselves reverberated. This function will process from this buffer -// and produce output. This function is only called once per frame. -// lib_ptr: [in] pointer to library structure -// out_ptr: [out] pointer to output sample block (multi channel double ptr) -// samples: [in] number of samples to be processed per channel -REVERB_RESULT reverb_process_aux_output(reverb_lib_t *lib_ptr, void **out_ptr, uint32 samples); - -// ** Processing one block of insert type reverb -// lib_ptr: [in] pointer to library structure -// out_ptr: [out] pointer to output sample block (multi channel double ptr) -// in_ptr: [in] pointer to input sample block (multi channel double ptr) -// samples: [in] number of samples to be processed per channel -REVERB_RESULT reverb_process(reverb_lib_t *lib_ptr, void **out_ptr, void **in_ptr, uint32 samples); - - -// ** Get library memory requirements -// mem_req_ptr: [out] pointer to mem requirements structure -// static_vars_ptr: [in] pointer to static variable structure -REVERB_RESULT reverb_get_mem_req(reverb_mem_req_t *mem_req_ptr, reverb_static_vars_t* static_vars_ptr); - -// ** Partition, initialize memory, and set default values -// lib_ptr: [in, out] pointer to library structure -// static_vars_ptr: [in] pointer to static variable structure -// mem_ptr: [in] pointer to allocated memory -// mem_size: [in] size of memory allocated -REVERB_RESULT reverb_init_mem(reverb_lib_t *lib_ptr, reverb_static_vars_t* static_vars_ptr, void* mem_ptr, uint32 mem_size); - -// ** Set parameters to library -// lib_ptr: [in, out] pointer to lib structure -// param_id: [in] parameter id -// param_ptr: [in] pointer to the memory where the new values are stored -// param_size:[in] size of the memory pointed by param_ptr -REVERB_RESULT reverb_set_param(reverb_lib_t* lib_ptr, uint32 param_id, void* param_ptr, uint32 param_size); - -// ** Get parameters from library -// lib_ptr: [in] pointer to library structure -// param_id: [in] parameter id -// param_ptr: [out] pointer to the memory where the retrieved value is going to be stored -// param_size:[in] size of the memory pointed by param_ptr -// param_actual_size_ptr: [out] pointer to memory that will hold the actual size of the parameter -REVERB_RESULT reverb_get_param(reverb_lib_t* lib_ptr, uint32 param_id, void* param_ptr, uint32 param_size, uint32 *param_actual_size_ptr); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* REVERB_API_H */ diff --git a/modules/processing/shoebox_reverb/inc/reverb_calibration_api.h b/modules/processing/shoebox_reverb/inc/reverb_calibration_api.h deleted file mode 100644 index 74973f3d..00000000 --- a/modules/processing/shoebox_reverb/inc/reverb_calibration_api.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef REVERB_CALIBRATION_API_H -#define REVERB_CALIBRATION_API_H - -#include "AudioComdef.h" - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -/*---------------------------------------------------------------------------- - Reverb Environment Enum -----------------------------------------------------------------------------*/ - -typedef enum environment_t { - environment_Custom = 0, // custom preset - environment_Room = 1, // 01 - environment_Bathroom, // 02 - environment_ConcertHall, // 03 - environment_Cave, // 04 - environment_Arena, // 05 - environment_Forest, // 06 - environment_City, // 07 - environment_Mountains, // 08 - environment_Underwater, // 09 - environment_Auditorium, // 10 - environment_Alley, // 11 - environment_Hallway, // 12 - environment_Hangar, // 13 - environment_Livingroom, // 14 - environment_Smallroom, // 15 - environment_Mediumroom, // 16 - environment_Largeroom, // 17 - environment_Mediumhall, // 18 - environment_Largehall, // 19 - environment_Plate, // 20 - environment_Generic, // 21 - environment_PaddedCell, // 22 - environment_Stoneroom, // 23 - environment_CarpetedHallway, // 24 - environment_StoneCorridor, // 25 - environment_Quarry, // 26 - environment_Plain, // 27 - environment_ParkingLot, // 28 - environment_SewerPipe, // 29 - environment_Drugged, // 30 - environment_Dizzy, // 31 - environment_Psychotic, // 32 - environment_Count -} environment_t; - -/*---------------------------------------------------------------------------- - Parameters with IDs -----------------------------------------------------------------------------*/ -#define REVERB_PARAM_LIB_VER (0) // ** param: library version -typedef int32 reverb_version_t; // access: get only - -/*------------------ begin OpenSL ES compatible parameters ------------------*/ -// Description: The master volume level of the environment reverb effect -#define REVERB_PARAM_ROOM_LEVEL (1) // ** param: room level -typedef int32 reverb_room_level_t; // access: get & set - // range: [-9600, 0] (mb) - -// Description: The volume level at 5kHz relative to the volume level at low -// frequencies of the overall reverb effect -#define REVERB_PARAM_ROOM_HF_LEVEL (2) // ** param: room HF level -typedef int32 reverb_room_hf_level_t; // access: get & set - // range: [-9600, 0] (mb) - -// Description: The time taken for the level of reverberation to decay by 60 dB -#define REVERB_PARAM_DECAY_TIME (3) // ** param: decay time RT60 -typedef int32 reverb_decay_time_t; // access: get & set - // range: [100, 20000] (ms) - -// Description: The ratio of high frequency decay time (at 5kHz) relative to -// the decay time at low frequencies -#define REVERB_PARAM_DECAY_HF_RATIO (4) // ** param: decay HF ratio -typedef int32 reverb_decay_hf_ratio_t; // access: get & set - // range: [100, 2000] (per millie) - -// Description: The volume level of the early reflections -#define REVERB_PARAM_REFLECTIONS_LEVEL (5) // ** param: reflections level -typedef int32 reverb_reflections_level_t; // access: get & set - // range: [-9600, 1000] (mb) - -// Description: The delay time for the early reflection (relative to direct sound) -#define REVERB_PARAM_REFLECTIONS_DELAY (6) // ** param: reflections delay -typedef int32 reverb_reflections_delay_t; // access: get & set - // range: [0, 300] (ms) - -// Description: The volume level of the late reverberation -#define REVERB_PARAM_REVERB_LEVEL (7) // ** param: reverb level -typedef int32 reverb_reverb_level_t; // access: get & set - // range: [-9600, 2000] (mb) - -// Description: The time between the first reflection and the late reverberation -#define REVERB_PARAM_REVERB_DELAY (8) // ** param: reverb delay -typedef int32 reverb_reverb_delay_t; // access: get & set - // range: [0, 100] (ms) - -// Description: The echo density in the late reverberation decay -#define REVERB_PARAM_DIFFUSION (9) // ** param: diffusion -typedef int32 reverb_diffusion_t; // access: get & set - // range: [0, 1000] (per millie) - -// Description: The modal density of the late reverberation decay -#define REVERB_PARAM_DENSITY (10) // ** param: density -typedef int32 reverb_density_t; // access: get & set - // range: [0, 1000] (per millie) - -/*------------------- end OpenSL ES compatible parameters -------------------*/ - -#define REVERB_PARAM_ENABLE (11) // ** param: enable switch -typedef int32 reverb_enable_t; // access: get & set - // range: [1:on or 0:off] - -#define REVERB_PARAM_MODE (12) // ** param: topology mode -// typedef enum reverb_mode_t; // access: get only - -#define REVERB_PARAM_PRESET (13) // ** param: reverb preset -typedef int32 reverb_preset_t; // access: get & set - // range: [0, 32] - -// Description: reverb dry/wet mix for insert mode only. no effect on aux mode -#define REVERB_PARAM_WET_MIX (14) // ** param: wet mix ratio -typedef int32 reverb_wet_mix_t; // access: get & set - // range: [0, 1000] (per millie) - -#define REVERB_PARAM_GAIN_ADJUST (15) // ** param: overall gain adjustment -typedef int32 reverb_gain_adjust_t; // access: get & set -// (may cause saturation) // range : [-600, 600] (mB) - -#define REVERB_PARAM_RESET (16) // ** param: reset - // access: set only - -#define REVERB_PARAM_ALG_DELAY (17) // ** param: algorithm delay -typedef int32 reverb_alg_delay_t; // access: get only - -#define REVERB_PARAM_CROSSFADE_FLAG (18) // ** param: transition/crossfade flag -typedef int32 reverb_crossfade_t; // access: get only - // range: [0(no), 1(yes)] - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* REVERB_CALIBRATION_API_H */ diff --git a/modules/processing/shoebox_reverb/inc/reverbglobal.h b/modules/processing/shoebox_reverb/inc/reverbglobal.h deleted file mode 100644 index a569e7be..00000000 --- a/modules/processing/shoebox_reverb/inc/reverbglobal.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef _REVERBGLOBAL_H_ -#define _REVERBGLOBAL_H_ - - -#include "audio_dsp.h" - -#define BIT_EXACT_WITH_QSOUND 0 // to match QSound or not -#define REVERB_HARDCODE_DELAYS 0 // load comb and all-pass delays from table -#define REVERB_LP_POST_BIQUAD 0 // low-power reverb post filter - -typedef struct _reverbConfig -{ - uint16 uinChannels; - uint16 uiSampleRate; - uint16 uOutChannels; - int enable; - int lowpowerFlag; - int envPreset; - int envReverbLevelMB; - int envReverbTimeMs; - int envDecayHFRatioQ16; - int envPreDelayMs; - int reverbSendGainMB; -} reverbConfig; - -class CReverbLib { - typedef struct _combFilter - { /* comb filter with a delay line and a damping(decayHFratio) filter */ - /* first-order IIR damping filter: */ - /* c0+c1*z**-1 */ - /* ----------- */ - /* 1-c2*z**-1 */ - int16 dampCoeffsL16Q14[3]; /* filter coeffs: c0, c1, and c2-1 */ - int16 dampStateXL16; /* state: x(n-1) L16 */ - int32 dampStateYL32; /* state: y(n-1) L32 */ - int16 delayIndex; /* delayline index */ - int16 delayLength; /* delayline length */ - int16 *delayBuf; /* pointer to delayline buffer */ - } combFilter; - - typedef struct _allpassFilter - { /* all-pass filter with a delay line */ - int16 gainL16Q15; /* all-pass gain, L16Q15 */ - int16 delayIndex; /* delayline index */ - int16 delayLength; /* delayline length */ - int16 *delayBuf; /* pointer to delayline buffer */ - } allpassFilter; - - typedef struct _revWrap - { /* parameters wrapped to pass to the main processing block */ - /*-------------------- local copy of main config params -----------------*/ - boolean enable; /* enable or bypass reverb process */ - boolean lowpowerFlag; /* use or not the low-power version */ - int16 envPreset; /* environment preset number */ - int16 envReverbLevelMB; /* reverb level ("reverb" in preset) */ - int16 envReverbTimeMs; /* reverb decay time */ - int32 envDecayHFRatioQ16; /* reverb decay HF ratio */ - int16 envPreDelayMs; /* reverb pre delay */ - int16 reverbSendGainMB; /* reverb send amount from one source*/ - - /*------------------------------- others --------------------------------*/ - int16 inChannels; /* input channel number */ - int16 outChannels; /* output channel number */ - uint16 sampleRate; /* sampling rate */ - int16 reverbSendGainL16Q15;/* reverb send amount in L16Q15 */ - int16 reverbVolumeL16Q15; /* late reverb level + normalization */ - delaylineStruct *preDelayline; /* reverb delay struct of wet signal */ - combFilter *combs; /* comb filter struct array */ - allpassFilter *allpass; /* all-pass filter struct array */ - } revWrap; -#ifdef LP_REVERB - typedef struct _revLpWrap - { /* parameters wrapped to pass to the low-power processing block */ - int16 inChannels; /* input channel number */ - int16 outChannels; /* output channel number */ - uint16 sampleRate; /* sampling Rate */ - int16 reverbSendGainMB; /* reverb send amount in mb */ - int16 reverbSendGainL16Q15; /* reverb send amount in L16Q15 */ - int16 reverbVolumeL16Q15; /* late reverb level + normalization */ - delaylineStruct *preDelayline; /* reverb delay struct of wet signal */ - combFilter *combs; /* comb filter struct array */ - allpassFilter *allpass; /* all-pass filter struct array */ - } revLpWrap; -#endif - typedef enum - { /* environment types */ - environment_Room = 1, // 01 - environment_Bathroom, // 02 - environment_ConcertHall, // 03 - environment_Cave, // 04 - environment_Arena, // 05 - environment_Forest, // 06 - environment_City, // 07 - environment_Mountains, // 08 - environment_Underwater, // 09 - environment_Auditorium, // 10 - environment_Alley, // 11 - environment_Hallway, // 12 - environment_Hangar, // 13 - environment_Livingroom, // 14 - environment_Smallroom, // 15 - environment_Mediumroom, // 16 - environment_Largeroom, // 17 - environment_Mediumhall, // 18 - environment_Largehall, // 19 - environment_Plate, // 20 - environment_Generic, // 21 - environment_PaddedCell, // 22 - environment_Stoneroom, // 23 - environment_CarpetedHallway, // 24 - environment_StoneCorridor, // 25 - environment_Quarry, // 26 - environment_Plain, // 27 - environment_ParkingLot, // 28 - environment_SewerPipe, // 29 - /*----- the last three are not fully implemented yet -----*/ - environment_Drugged, // 30 - environment_Dizzy, // 31 - environment_Psychotic, // 32 - environment_Count - } environment; - - typedef struct _eaxListenerProperties - { /* selected elements following standard of EAX 2.0 listener properties */ - int16 room; // room input attenuation (mB) - int16 decayTime; // reverb time RT60 (ms) - int32 decayHFRatio; // high/low freq decay time ratio, L32Q23 - int16 reflections; // early echo level (mB),(not implemented) - int16 reflectionsDelay; // early echo delay (ms) - int16 reverb; // late reverb level (mB) - int16 reverbDelay; // late reverb delay (ms) - } eaxListenerProperties; -#ifdef LP_REVERB - typedef struct _reverbLpPreloadParams - { - int16 comb0CoeffsL16Q14[2]; /* damp coeffs c0 and c2-1 (c1==0) */ - int16 comb1CoeffsL16Q14[2]; /* damp coeffs c0 and c2-1 (c1==0) */ - int16 comb2CoeffsL16Q14[2]; /* damp coeffs c0 and c2-1 (c1==0) */ - int16 combDelays[3]; /* comb delayline lengths */ - int16 allpassDelays[2]; /* allpass delayline lengths */ - int16 preDelay; /* initial reverb delay */ - } reverbLpPreloadParams; -#endif -private: - static const uint16 REVERB_BLOCKSIZE = 480; // blocksize - static const uint16 COMBS = 6; /* number of comb filters per channel */ - static const uint16 ALLPASS = 2; /* number of all-pass filters per channel */ - /* reverb time is defined as RT60 - the time that reverb sound drops 60 dB */ - static const int16 DECAY_CENTS = -6000; - /* cutoff frequencies for designing filters */ - static const uint16 LowpassDesignFrequency = 5000; - static const uint16 HighpassDesignFrequency = 100; - static const uint16 COMBS_LP = 3; /* 3 comb filters for low-power QReverb */ - static const uint16 ALLPASS_LP = 2; /* 2 all pass filters for low-power QReverb */ - - /* comb filter and allpass filter delay lines in milliseconds */ - static const int16 combDelays[COMBS]; // ms - static const int16 allpassDelays[ALLPASS]; // ms - - /* Following standard of EAX 2.0 listener property sets */ - /* I3DL2 and MIDI compatible reverb types, merged into one list */ - static const eaxListenerProperties reverbPresets[environment_Count - 1]; - - static const int32 sampleRates[7]; - static const int16 storedDelays[7][COMBS+ALLPASS]; -#ifdef LP_REVERB - static const reverbLpPreloadParams storedLpParams[7]; -#endif -private: - /* various delayline buffers */ - int16 revInputDlyBufL[2352]; // 400ms, 48kHz - int16 revInputDlyBufR[5424]; // 464ms, 48kHz - int16 revCombDlyBuf0[2*2401]; // 50ms, 48kHz - int16 revCombDlyBuf1[2*2689]; // 56ms, 48kHz - int16 revCombDlyBuf2[2*2929]; // 61ms, 48kHz - int16 revCombDlyBuf3[2*3265]; // 68ms, 48kHz - int16 revCombDlyBuf4[2*3457]; // 72ms, 48kHz - int16 revCombDlyBuf5[2*3747]; // 78ms, 48kHz - int16 revAllpassDlyBuf0[2*289]; // 6ms, 48kHz - int16 revAllpassDlyBuf1[2*529]; // 11ms, 48kHz - - /* filter and delayline structs */ - combFilter revCombs[2*COMBS]; /* comb filter struct array */ - allpassFilter revAllpass[2*ALLPASS]; /* all-pass filter struct array */ - delaylineStruct revPreDelayline[2]; /* reverb input delayline */ - revWrap revShared; /* parameter wrapper struct */ -#ifdef LP_REVERB - /* various delayline buffers */ - int16 revInputDlyBufLp[240]; /* 5 ms, 48kHz */ - int16 revCombDlyBuf0Lp[1467]; /* 30.555 6ms, 48kHz */ - int16 revCombDlyBuf1Lp[1595]; /* 33.1774 ms, 48kHz */ - int16 revCombDlyBuf2Lp[1699]; /* 35.3810 ms, 48kHz */ - int16 revAllpassDlyBuf0Lp[289]; /* 6 ms, 48kHz */ - int16 revAllpassDlyBuf1Lp[529]; /* 11 ms, 48kHz */ - - /* others */ - combFilter revLpCombs[COMBS_LP]; /* comb filters */ - allpassFilter revLpAllpass[ALLPASS_LP]; /* all-pass filters */ - delaylineStruct revLpPreDelayline; /* reverb input delayline */ - revLpWrap revLpShared; -#endif -private: - void reverb_init(); - - void reverb_preload_delays - ( - int16 *delays, /* comb and allpass filter delays */ - uint16 sampleRate /* sampling rate */ - ); - - void apply_allpass_filter - ( - int16 *destBuf, /* input(output) buffer */ - allpassFilter *allpass, /* all-pass filter struct */ - int16 samples /* number of sampels to process */ - ); - - void apply_comb_filter - ( - int16 *destBuf, /* output buffer to mix into */ - int16 *srcBuf, /* input buffer of comb filter */ - combFilter *comb, /* comb filter struct */ - int16 n, /* number of samples */ - int16 reverbVolumeL16Q15 /* reverb volume */ -#if BIT_EXACT_WITH_QSOUND - ,boolean firstCombFlag /* The firstCombFlag is a flag to match */ - /* QSound code. QSound does something different for the first comb filter*/ - /* in the parallel structure. This is only to match bit-exact. A working */ - /* algorithm does not need this. */ -#endif - ); - - void mix_parallel_combs - ( - int16 channel, /* channel index, 0:left or 1:right */ - int16 *destBuf, /* output buffer */ - int16 *srcBuf, /* input buffer */ - combFilter *combs, /* comb filter struct array */ - int16 n, /* number of samples to be processed */ - int16 reverbVolumeL16Q15,/* reverb volume */ - int16 num_combs /* number of comb filters in parallel */ - ); - - void reverb_delay_then_combs - ( - int16 channel, /* channel index, 0:left or 1:right */ - int16 *combMixBuf, /* output buffer of mixed comb outputs */ - int16 *srcBuf, /* reverb input buffer */ - delaylineStruct *preDelayline, /* late reverb delayline struct */ - combFilter *combs, /* comb filter struct array */ - int16 reverbVolumeL16Q15,/* reverb volume */ - int16 num_combs, /* number of comb filters */ - int16 samples /* number of sampels to process */ - ); - - void reverb_preproc_mix - ( - int16 *revInBufL, /* reverb input buffer (left ) */ - int16 *revInBufR, /* reverb input buffer (right) */ - int16 *srcBufL, /* direct sound input buffer (left ) */ - int16 *srcBufR, /* direct sound input buffer (right) */ - revWrap revShared, /* parameter wrapper struct */ - int16 samples /* number of sampels to process */ - ); - - void reverb_process_mono_out - ( - int16 *mixBuf, /* direct sound and final mix */ - int16 *revInBuf, /* reverb input buffer */ - revWrap revShared, /* parameter wrapper struct */ - int16 samples /* number of sampels to process */ - ); - - void reverb_process_stereo_out - ( - int16 *mixBufL, /* direct sound and reverb mix */ - int16 *mixBufR, /* direct sound and reverb mix */ - int16 *revInBufL, /* reverb input buffer */ - int16 *revInBufR, /* reverb input buffer */ - revWrap revShared, /* parameter wrapper struct */ - int16 samples /* number of sampels to process */ - ); - - void reverb_update_filter_delays - ( - uint16 sampleRate /* sampling rate */ - ); - void reverb_update_predelay - ( - uint16 sampleRate /* sampling rate */ - ); - void reverb_update_room_filters - ( - uint16 sampleRate /* sampling rate */ - ); -#ifdef LP_REVERB - boolean reverb_setup_lp - ( - const reverbConfig &cfg - ); - - boolean reverb_reset_lp(void); - - reverbLpPreloadParams reverb_lp_preload - ( - uint16 sampleRate - ); - - void process_lp - ( - int16 *srcBufL, /* reverb input buffer */ - int16 *srcBufR, /* reverb input buffer */ - int16 *mixBufL, /* direct sound and reverb mix */ - int16 *mixBufR, /* direct sound and reverb mix */ - uint32 samples /* number of sampels to process */ - ); -#endif -public: - CReverbLib(); - - boolean initialize (const reverbConfig &cfg); - - void Reset(); - - void process - ( - int16 *outBufL, /* output buffer L */ - int16 *outBufR, /* output buffer R */ - int16 *srcBufL, /* input buffer L */ - int16 *srcBufR, /* input buffer R */ - uint32 nSampleCnt=REVERB_BLOCKSIZE - ); -}; -#endif /* _REVERBGLOBAL_H_ */ diff --git a/modules/processing/shoebox_reverb/inc/shoebox_lib_api.h b/modules/processing/shoebox_reverb/inc/shoebox_lib_api.h deleted file mode 100644 index f4d72152..00000000 --- a/modules/processing/shoebox_reverb/inc/shoebox_lib_api.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - * SPDX-License-Identifier: BSD-3-Clause-Clear - */ - -#ifndef SHOEBOX_API_H -#define SHOEBOX_API_H - -#include "ShoeBox_calibration_api.h" -#include "AudioComdef.h" -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -/*---------------------------------------------------------------------------- - Error Code and Types -----------------------------------------------------------------------------*/ -typedef enum SHOEBOX_RESULT { - SHOEBOX_SUCCESS = 0, - SHOEBOX_FAILURE, - SHOEBOX_MEMERROR, - SHOEBOX_UNSUPPORTED_PARAM, - SHOEBOX_UNSUPPORTED_PARAM_VALUE, //new return value added for the cases when input size/parameter value is out of algorithm supported boundary. - //Inside algorithm, the values will be bounded to the max that the algorithm supports -} SHOEBOX_RESULT; - - -/* -shoebox_struct_id_t - -shoebox_struct_id_t is Mandatory. Some of the struct_ids are mandatory as mentioned. - -shoebox_struct_id_t enum typedef refers to structures that can be used to communicate with library functions. -Along with refering to structures in algo_api.h. This enum also refers to the calibration structures in algo_calibration_api.h - -Note: enum numbers doesn't have to be sequential. -*/ -typedef enum shoebox_struct_id_t { - SHOEBOX_CONFIG = 0, // mapped to struct: shoebox_config_t - SHOEBOX_MEMORY, // mapped to struct: shoebox_memory_config_t - SHOEBOX_VERSION_PARAM, // mapped to struct: shoebox_ver_param_t - SHOEBOX_ENABLE_PARAM, // mapped to struct: shoebox_enable_param_t - SHOEBOX_WET_MIX_PARAM, // mapped to struct: shoebox_wet_mix_param_t - - /* tuning parameters that are mapped to DayDream's */ - SHOEBOX_ROOM_SIZE_PARAM, // mapped to struct: shoebox_room_size_param_t - SHOEBOX_ROOM_MATERIAL_PARAM, // mapped to struct: shoebox_room_material_param_t - SHOEBOX_REVERB_GAIN_PARAM, // mapped to struct: shoebox_reverb_gain_param_t - SHOEBOX_DECAY_TIME_ADJUST_PARAM,// mapped to struct: shoebox_decay_time_adjust_param_t - SHOEBOX_BRIGHTNESS_ADJUST_PARAM,// mapped to struct: shoebox_brightness_adjust_param_t - - SHOEBOX_RESET_PARAM, // mapped to struct: shoebox_reset_param_t - SHOEBOX_ALG_DELAY_PARAM, // mapped to struct: shoebox_alg_delay_param_t - SHOEBOX_CROSSFADE_FLAG_PARAM // mapped to struct: shoebox_crossflag_param_t -} shoebox_struct_id_t; - - -/* -shoebox_memory_t - -shoebox_memory_config_t is the library structure encapsulating memory details of the library. -Memory for this structure has to be allocated by Caller before calling any of the library apis - -Note: each structure definition should have a specific id in shoebox_struct_id_t (SHOEBOX_MEMORY in this case) - -struct_size: [IN]: Filled by the caller, shows the size of the structure -lib_static_mem_size: [IN/OUT]: Size of library static memory required in bytes, this memory - --[OUT]: Callee fills for api shoebox_get_req, --[IN]: Caller fills for api shoebox_init -lib_stack_size: [OUT]: Size of the stack needed by library. [out]: for api shoebox_get_req, Don't care for api ashoebox_init - -*/ -typedef struct shoebox_memory_t { - uint32_t struct_size; - uint32_t lib_static_mem_size; - uint32_t lib_scratch_mem_size; - uint32_t lib_stack_mem_size; -} shoebox_memory_t; - - -/* -shoebox_config_t - -shoebox__config_t is the library structure encapsulating library configurations -which donot change with calibration or without memory reallocation - -shoebox_config_t is a Mandatory Structure Definition. Members of this structure are not mandatory -but recommended for every algorithm; however not limited by the following fields,i.e. algorithms can add new parameters as needed. - -Moreoever, more than one static config can be defined to differentate the evolution of parameters or fit the specific needs of the algorithm. -Note: each structure definition should have a specific id in shoebox_struct_id_t - -struct_size:[IN]: Mandatory : Filled by the caller, shows the size of the structure -sample_rate:[IN]: Input/outputs operating sampling rate. -q_format:[IN]: Q-factor for input/output data: 15 for 16bit input and 27 for 32bit input -bytes_per_sample:[IN] : Number of bytes for input and output bytes. 16 (Q15 PCM) or 32 (Q27 PCM) -num_chs:[IN] : Number of input/output channels, -max_frame_size:[IN]: : max frame size -*/ -typedef struct shoebox_config_t { // ** static params - uint32_t struct_size; - uint32_t sample_rate; // supporting 8k/16k/32k/44.1k/48k/96k/192kHz - uint32_t q_format; // 15 (16bit path) or 27 (32bit processing with 24bit path) supported currently - uint32_t bytes_per_sample; // 2 or 4 (for 24bit path, shoebox always takes L32Q27 format input) - uint32_t num_chs; // In first release v1, only stereo in/stereo out supported - uint32_t max_frame_size; -} shoebox_config_t; - - -/* -shoebox_t - -shoebox_t is the library instance definition. -shoebox_t is Mandatory Definition -*/ -typedef int8_t shoebox_t; - - -/*----------------------------------------------------------------------------- - Function Declarations -----------------------------------------------------------------------------*/ - -/* shoebox_get_req -This api provides the memory and other requirements of the library based on the configuration provided - -This function is expected to be called before shoebox_init is invoked. -req_config_id: [IN] : Requirements Structure ID for querying memory requirements, defines the payload pointed by req_config_ptr - Supports : SHOEBOX_MEMORY, (algorithms can add more shoebox_struct_id_t as the needs grow), -req_config_ptr: [OUT] : Requirements Structure pointer for engine to be filled by library -config_id: [IN] : Configuration Structure ID for querying engine requirements, defines the payload pointed by engine_config_ptr - Currently only supports : SHOEBOX_CONFIG (static structure) -config_ptr: [IN] : Configuration Structure pointer for engine to be used by library to calculate requirements - For SHOEBOX_CONFIG, this pointer points to the structure containing the static structure for memory size estimate - -Return: -result - SHOEBOX_RESULT -*/ -SHOEBOX_RESULT shoebox_get_req( - uint32_t req_config_id, - int8_t *req_config_ptr, - uint32_t config_id, - int8_t *config_ptr -); - - -/* shoebox_init - -shoebox_init signature of the structure is fixed as shown. -This api -- Allocates static memory only to library & -- partition the memory properly -- Initializes calibration to default values - -This function is expected to be called before shoebox_process is invoked. -**shoebox_lib_ptr: [OUT] : pointer to the algo public library structure -config_id: [IN] : Configuration Structure ID for querying engine requirements, defines the payload pointed by engine_config_ptr - Supports : SHOEBOX_CONFIG -config_ptr: [IN] : Configuration Structure pointer for engine to be used by library to calculate requirements -static_memory_ptr: [IN] : Pointer to static memory for initializing the engine -static_memory_size: [IN] : size of the static memory pointer by pointer engine_static_memory_ptr - -Return: -result - SHOEBOX_RESULT -*/ -SHOEBOX_RESULT shoebox_init( - shoebox_t **shoebox_lib_ptr, - uint32_t config_id, - int8_t *config_ptr, - int8_t *static_memory_ptr, - uint32_t static_memory_size -); - - -/* -shoebox_set -- Sets data to the library - -shoebox_lib_ptr: [IN] : pointer to the algo public library structure -set_struct_id: [IN] : this strucutre ID defines the structure in set_struct_ptr -set_struct_ptr: [IN] : data pointer & struct_size of the memory or parameter buffer - -Return: -result - SHOEBOX_RESULT - */ -SHOEBOX_RESULT shoebox_set( - shoebox_t *shoebox_lib_ptr, - uint32_t set_struct_id, - int8_t *set_struct_ptr -); - - -/* -shoebox_get -- This api gets data from library -- Returns data identified with get_data.struct_id which is filled by Callee -- Callee fills data at the address pointed by get_data.io_ptr -- Callee updates get_data.io_ptr.struct_size (note io_ptr has to be properly type casted for the struct_size) -example structures/data queried by Caller - - Calibration data - - RTM - - Algorithm Version - -*shoebox_lib_ptr: [IN] : pointer to the algo public library structure -index: [IN] : index value, ranges from 0 to max_inputs-1, defines the input from which the data has to be "get" -get_struct_id: [IN] : this strucutre ID defines the structure in get_struct_ptr -get_struct_ptr: [IN/OUT] : data pointer & struct_size of the parameter buffer - Caller fills: [IN] : get_struct_ptr->struct_size i.e. memory in bytes available for callee to fill(note has to be properly type casted for the size) - Callee fills: [OUT] : get_struct_ptr->struct_size i.e. memory in bytes filled by callee and the rest of the fields of the structure as needed - -Return: -result - SHOEBOX_RESULT -*/ -SHOEBOX_RESULT shoebox_get( - shoebox_t *shoebox_lib_ptr, - uint32_t get_struct_id, - int8_t *get_struct_ptr -); - -/* -Reads input data and processes it according to the calibration data set using shoebox_set -This function can only be invoked after successful call to shoebox_init & after setting scratch memory as required - -*shoebox_lib_ptr: [IN] : pointer to the algo public library structure -**output_data_ptr: [OUT] : This pointer points to the output data address that the library needs to fill. -output_data_size: [IN] : This parameter gives the per-channel output data frame's size in terms of number of samples. Set by the caller. -**input_data_ptr: [IN] : This pointer points to the actual input data address that the caller provides, assuming they are de-interleaved. -input_data_size: [IN] : This parameter gives the per-channel input data frame's size in terms of number of samples. Set by the caller. - -Return: -result - SHOEBOX_RESULT -*/ -SHOEBOX_RESULT shoebox_process( - shoebox_t *shoebox_lib_ptr, - int8_t **output_data_ptr, // always assuming de-interleaved output - uint32_t output_data_size, - int8_t **input_data_ptr, // always assuming de-interleaved input - uint32_t input_data_size -); - - -int8_t* get_reverb_lib_ptr( shoebox_t* lib_ptr ); - - -/*---------------------------------------------------------------------------- - Reverb Environment Enum ----------------------------------------------------------------------------- -typedef enum environment_t { - environment_Custom = 0, // custom preset - environment_Room = 1, // 01 - environment_Bathroom, // 02 - environment_ConcertHall, // 03 - environment_Cave, // 04 - environment_Arena, // 05 - environment_Forest, // 06 - environment_City, // 07 - environment_Mountains, // 08 - environment_Underwater, // 09 - environment_Auditorium, // 10 - environment_Alley, // 11 - environment_Hallway, // 12 - environment_Hangar, // 13 - environment_Livingroom, // 14 - environment_Smallroom, // 15 - environment_Mediumroom, // 16 - environment_Largeroom, // 17 - environment_Mediumhall, // 18 - environment_Largehall, // 19 - environment_Plate, // 20 - environment_Generic, // 21 - environment_PaddedCell, // 22 - environment_Stoneroom, // 23 - environment_CarpetedHallway, // 24 - environment_StoneCorridor, // 25 - environment_Quarry, // 26 - environment_Plain, // 27 - environment_ParkingLot, // 28 - environment_SewerPipe, // 29 - environment_Drugged, // 30 - environment_Dizzy, // 31 - environment_Psychotic, // 32 - environment_Count -} environment_t; -*/ -/*---------------------------------------------------------------------------- - Parameters with IDs -----------------------------------------------------------------------------*/ -#define REVERB_PARAM_LIB_VER (0) // ** param: library version -typedef int32 reverb_version_t; // access: get only - -/*------------------ begin OpenSL ES compatible parameters ------------------*/ -// Description: The master volume level of the environment reverb effect -#define REVERB_PARAM_ROOM_LEVEL (1) // ** param: room level -typedef int32 reverb_room_level_t; // access: get & set - // range: [-9600, 0] (mb) - -// Description: The volume level at 5kHz relative to the volume level at low -// frequencies of the overall reverb effect -#define REVERB_PARAM_ROOM_HF_LEVEL (2) // ** param: room HF level -typedef int32 reverb_room_hf_level_t; // access: get & set - // range: [-9600, 0] (mb) - -// Description: The time taken for the level of reverberation to decay by 60 dB -#define REVERB_PARAM_DECAY_TIME (3) // ** param: decay time RT60 -typedef int32 reverb_decay_time_t; // access: get & set - // range: [100, 20000] (ms) - -// Description: The ratio of high frequency decay time (at 5kHz) relative to -// the decay time at low frequencies -#define REVERB_PARAM_DECAY_HF_RATIO (4) // ** param: decay HF ratio -typedef int32 reverb_decay_hf_ratio_t; // access: get & set - // range: [100, 2000] (per millie) - -// Description: The volume level of the early reflections -#define REVERB_PARAM_REFLECTIONS_LEVEL (5) // ** param: reflections level -typedef int32 reverb_reflections_level_t; // access: get & set - // range: [-9600, 1000] (mb) - -// Description: The delay time for the early reflection (relative to direct sound) -#define REVERB_PARAM_REFLECTIONS_DELAY (6) // ** param: reflections delay -typedef int32 reverb_reflections_delay_t; // access: get & set - // range: [0, 300] (ms) - -// Description: The volume level of the late reverberation -#define REVERB_PARAM_REVERB_LEVEL (7) // ** param: reverb level -typedef int32 reverb_reverb_level_t; // access: get & set - // range: [-9600, 2000] (mb) - -// Description: The time between the first reflection and the late reverberation -#define REVERB_PARAM_REVERB_DELAY (8) // ** param: reverb delay -typedef int32 reverb_reverb_delay_t; // access: get & set - // range: [0, 100] (ms) - -// Description: The echo density in the late reverberation decay -#define REVERB_PARAM_DIFFUSION (9) // ** param: diffusion -typedef int32 reverb_diffusion_t; // access: get & set - // range: [0, 1000] (per millie) - -// Description: The modal density of the late reverberation decay -#define REVERB_PARAM_DENSITY (10) // ** param: density -typedef int32 reverb_density_t; // access: get & set - // range: [0, 1000] (per millie) - -/*------------------- end OpenSL ES compatible parameters -------------------*/ - -#define REVERB_PARAM_ENABLE (11) // ** param: enable switch -typedef int32 reverb_enable_t; // access: get & set - // range: [1:on or 0:off] - -#define REVERB_PARAM_MODE (12) // ** param: topology mode -// typedef enum reverb_mode_t; // access: get only - -#define REVERB_PARAM_PRESET (13) // ** param: reverb preset -typedef int32 reverb_preset_t; // access: get & set - // range: [0, 32] - -// Description: reverb dry/wet mix for insert mode only. no effect on aux mode -#define REVERB_PARAM_WET_MIX (14) // ** param: wet mix ratio -typedef int32 reverb_wet_mix_t; // access: get & set - // range: [0, 1000] (per millie) - -#define REVERB_PARAM_GAIN_ADJUST (15) // ** param: overall gain adjustment -typedef int32 reverb_gain_adjust_t; // access: get & set -// (may cause saturation) // range : [-600, 600] (mB) - -#define REVERB_PARAM_RESET (16) // ** param: reset - // access: set only - -#define REVERB_PARAM_ALG_DELAY (17) // ** param: algorithm delay -typedef int32 reverb_alg_delay_t; // access: get only - -#define REVERB_PARAM_CROSSFADE_FLAG (18) // ** param: transition/crossfade flag -typedef int32 reverb_crossfade_t; // access: get only - // range: [0(no), 1(yes)] - - - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - -#endif /* SHOEBOX_API_H */

qh6Z;C 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¨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 diff --git a/modules/processing/resamplers/dynamic_resampler/build/CMakeLists.txt b/modules/processing/resamplers/dynamic_resampler/build/CMakeLists.txt deleted file mode 100644 index 1b783827..00000000 --- a/modules/processing/resamplers/dynamic_resampler/build/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -#[[ - @file CMakeLists.txt - - @brief - - @copyright - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -]] -cmake_minimum_required(VERSION 3.10) - -#Include directories -set(dynamic_resampler_includes - ${LIB_ROOT}/inc -) - -spf_module_sources( - KCONFIG CONFIG_DYNAMIC_RESAMPLER - NAME dynamic_resampler - MAJOR_VER 1 - MINOR_VER 0 - AMDB_ITYPE "capi" - AMDB_MTYPE "pp" - AMDB_MID "0x07001016" - AMDB_TAG "capi_dynamic_resampler" - AMDB_MOD_NAME "MODULE_ID_DYNAMIC_RESAMPLER" - INCLUDES ${dynamic_resampler_includes} - H2XML_HEADERS "${LIB_ROOT}/api/dynamic_resampler_api.h" - CFLAGS "" - STATIC_LIB_PATH "${LIB_ROOT}/bin/arm/libdynamic_resampler.a" -) - - diff --git a/modules/processing/resamplers/dynamic_resampler/inc/hw_rs_lib.h b/modules/processing/resamplers/dynamic_resampler/inc/hw_rs_lib.h deleted file mode 100644 index 3570710e..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/hw_rs_lib.h +++ /dev/null @@ -1,40 +0,0 @@ -/**======================================================================== - @file hw_rs_lib.h - - @brief This file contains API's for allocating static variables needed for hw resampler - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef _HW_RS_LIB_H_ -#define _HW_RS_LIB_H_ - -#include "ar_error_codes.h" -#include "posal.h" - - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -// Mutex Info Structure -typedef struct hw_resampler_mutex_t -{ - posal_mutex_t mutex_lock; // Mutex lock for Hw Resampler api call. -} hw_resampler_mutex_t; - -ar_result_t hw_rs_lib_static_init(); - -void hw_rs_lib_init(posal_atomic_word_t **phwrs_resource_state, - posal_atomic_word_t **estimated_time_of_all_suspended_session, - hw_resampler_mutex_t **mutex_info); - -ar_result_t hw_rs_lib_static_deinit(); - -#ifdef __cplusplus -} -#endif //__cplusplus - -#endif /* _HW_RS_LIB_H_ */ diff --git a/modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib.h b/modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib.h deleted file mode 100644 index 551b5351..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib.h +++ /dev/null @@ -1,263 +0,0 @@ -/* ======================================================================== */ -/** - @file hwsw_rs_lib.h - Header file for combo hw- sw resampler lib -*/ - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef HWSW_RS_LIB_H -#define HWSW_RS_LIB_H - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ - -#ifndef CAPI_UNIT_TEST -#include "shared_lib_api.h" -#else -#include "Elite_intf_extns_change_media_fmt.h" -#include "capi.h" -#endif - -#include "audpp_util.h" -#include "audio_dsp32.h" -#include "resampler_32b_ext.h" -#include "hwsw_rs_lib_hw.h" -#include "hw_rs_lib.h" - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplu -/*------------------------------------------------------------------------ - * Macros, Defines, Type declarations - * -----------------------------------------------------------------------*/ -#define INTM_GUARD_BITS 32 -// Enum to list the number of stages supported -typedef enum { - STAGE_ZERO, - STAGE_ONE, - MAX_MULTI_STAGES_SUPPORTED -}stage_t; - -//Enum: column indices for sampling rates in table -typedef enum{ - MS_IP_SR = 1, - MS_INT_SR = 2, - MS_OP_SR = 3, - MS_UNIT_IP_SMPLS = 4, // unit frame size input sample index - MS_UNIT_INTM_SMPLS = 5, - MS_UNIT_OP_SMPLS = 6 -}tbl_fs_idx; - -typedef enum{ - FIXED_IN = 0, - FIXED_OUT -}process_mode; - -#define TEN_MS 10 // duration in ms - -// Enum : Supported multi-stage list -typedef enum{ - DYRS_384_44_1, - MAX_MULTI_STAGE_SUPPORTED_LIST -}ms_lst_fs_t; - -const uint32_t multi_stage_sr_info[][7] = { - {DYRS_384_44_1, 384000, 192000, 44100, 384, 192, 44 }, -}; - -// To print all lib status messages -//#define HWSW_RESAMPLER_DEBUG_MSG 1 - -// To print each frame status -//#define HWSW_RESAMPLER_PRINT_FRAME_STATS 1 -/*------------------------------------------------------------------------ - * Structure definitions - * -----------------------------------------------------------------------*/ -typedef struct hwsw_rs_sw_mode_config -{ - uint16_t dynamic_mode; // 0: non-dynamic mode, 1: dynamic mode - uint16_t delay_type; // 0: High delay, 1: Low delay (relevant if dynamic mode is set) -} hwsw_rs_sw_mode_config_t; - -typedef struct hwsw_rs_sw_lib_config -{ - uint32_t first_frame; - int32_t config_params[20]; -} hwsw_rs_sw_lib_config_t; - -typedef struct hwsw_rs_sw_lib_mem_req -{ - uint32_t drsStructSize; - uint32_t drsGenCoeffSize; - uint32_t drsPerChannelDataMemSize; - uint32_t drsMemSize; - uint32_t drsFiltCoeffMxSize; -} hwsw_rs_sw_lib_mem_req_t; - -typedef struct hwsw_rs_sw_lib_mem_ptr -{ - // Library State structure memory - void *pStructMem; - - // Generated polyphase filter coefficients - void *pGenCoeff; - - // Per channel filter memory - void *pChannelData[CAPI_MAX_CHANNELS_V2]; - - // Coefficient matrix - void *pCoefMatrix; - - // Filter selected based on inp/out freq - void *pResampCoef; -} hwsw_rs_sw_lib_mem_ptr_t; - -typedef struct hwsw_rs_sw_memory -{ - hwsw_rs_sw_lib_mem_req_t drs_mem_req; - hwsw_rs_sw_lib_mem_req_t prev_drs_mem_req; - hwsw_rs_sw_lib_mem_ptr_t drs_mem_ptr; -} hwsw_rs_sw_memory_t; - -typedef struct hwsw_rs_media_fmt_t -{ - uint32_t inp_sample_rate; - uint16_t bits_per_sample; - uint16_t num_channels; - uint32_t output_sample_rate; - uint32_t q_factor; -} hwsw_rs_media_fmt_t; - -typedef struct hwsw_rs_events_config -{ - uint32_t KPPS; - uint32_t delay_in_us; - uint32_t bandwidth; -} hwsw_rs_events_config_t; - -typedef struct hwsw_rs_resampler_config -{ - uint32_t use_hw_rs; - uint16_t dynamic_mode; - uint16_t delay_type; -} hwsw_rs_resampler_config_t; - -typedef enum hwsw_rs_using_resampler_t { SW_RESAMPLER = 0, HW_RESAMPLER, NO_RESAMPLER } hwsw_rs_using_resampler_t; - -// Information required for multi-stage -typedef struct ms_info_t{ - uint32_t intm_max_smpls_ms; - uint32_t num_stages; - int32_t tbl_idx; // index in the Multi stage sampling rate conversion table - capi_stream_data_t intm_buf_ptr; // intermediate stage stream buffer -}ms_info_t; - -typedef struct hwsw_resampler_lib -{ - // Flag which tells us which resampler is being used - hwsw_rs_using_resampler_t this_resampler_instance_using; - - // Copy of Input Media format in lib - hwsw_rs_media_fmt_t media_fmt; - - /* sw related structs */ - // Resampling mode (dynamic or non-dynamic) (High Delay or Low Delay) - hwsw_rs_sw_mode_config_t sw_rs_config_param; - - // Sw resampler Library config structure. - hwsw_rs_sw_lib_config_t* sw_lib_config_ptr[MAX_MULTI_STAGES_SUPPORTED]; - - // info about allocated memory for sw resampler. - hwsw_rs_sw_memory_t* sw_rs_mem_ptr[MAX_MULTI_STAGES_SUPPORTED]; - - /* hw related structs */ - // hw resampler structure - hwsw_rs_hw_resampler_t hw_resampler; - - /* dm related params set to the lib through set param handling when receiving dm mode and num samples - * dm_mode decides if lib should operate in fixed out or fall back to default operation*/ - uint32_t dm_mode; - /* output num of samples are provided to lib to be used when dm mode is set to fixed out mode - * Lib by default only has info of output buffers max data length - * For lib default behavior this variable wont be used */ - uint32_t output_fixed_samples; - - //flag to check if it is a multi_stage_process - bool_t is_multi_stage_process; - - //multi stage information structure - ms_info_t ms_info; -#ifdef HWSW_RESAMPLER_DEBUG_MSG - FILE *fp_intm; - FILE *fp_out; -#endif -} hwsw_resampler_lib_t; - -/*------------------------------------------------------------------------ - * Function definitions - * -----------------------------------------------------------------------*/ -void hwsw_rs_lib_init(hwsw_resampler_lib_t *hwsw_rs_lib); - -ar_result_t hwsw_rs_lib_deinit(hwsw_resampler_lib_t *hwsw_rs_ptr); - -void hwsw_rs_hw_resampler_get_process_info(hwsw_rs_hw_resampler_t *hwrs_ptr, - uint32_t input_actual_samples, - uint32_t output_max_samples, - uint32_t * input_samples_to_consume_ptr, - uint32_t * output_samples_to_generate_ptr); - -void hwsw_rs_lib_process_get_hw_process_info(hwsw_resampler_lib_t *hwsw_rs_ptr, - uint32_t input_actual_samples, - uint32_t output_max_samples, - uint32_t * input_samples_to_consume_ptr, - uint32_t * output_samples_to_generate_ptr); - -ar_result_t hwsw_rs_lib_process(hwsw_resampler_lib_t *hwsw_rs_ptr, - capi_buf_t * input_buf_ptr, - capi_buf_t * output_buf_ptr, - uint32_t input_num_bufs, - uint32_t output_num_bufs, - uint32_t heap_id); - -ar_result_t hwsw_rs_lib_check_create_resampler_instance(hwsw_resampler_lib_t *hwsw_rs_ptr, uint32_t heap_id); - -void hwsw_rs_set_lib_mf(hwsw_resampler_lib_t *hwsw_rs_ptr, hwsw_rs_media_fmt_t *inp_mf); - -void hwsw_rs_lib_set_dm_config(hwsw_resampler_lib_t *hwsw_rs_ptr, uint32_t dm_mode, uint32_t fixed_out_samples); - -void hwsw_rs_lib_set_config(uint32_t use_hwrs, - uint16_t dyn_mode, - uint16_t delay, - hwsw_resampler_lib_t *hwsw_rs_ptr, - bool_t * update_rs); - -ar_result_t hwsw_rs_lib_set_hwrs_suspend_resume(bool_t is_suspend, hwsw_resampler_lib_t *hwsw_rs_ptr, uint32_t *create_rs); - -uint32_t hwsw_rs_lib_get_kpps(hwsw_resampler_lib_t *hwsw_rs_ptr); - -uint32_t hwsw_rs_lib_get_bw(hwsw_resampler_lib_t *hwsw_rs_ptr); - -uint32_t hwsw_rs_lib_get_alg_delay(hwsw_resampler_lib_t *hwsw_rs_ptr); - -void hwsw_rs_lib_get_process_check(hwsw_resampler_lib_t *hwsw_rs_ptr, uint32_t *process_check); - -ar_result_t hwsw_rs_lib_algo_reset(hwsw_resampler_lib_t *hwsw_rs_ptr); - -bool_t hwsw_rs_lib_is_multi_stage_supported (hwsw_resampler_lib_t *hwsw_rs_ptr); - -void hwsw_rs_lib_init_sw_rs_mem_inst(hwsw_resampler_lib_t *hwsw_rs_ptr, uint32_t stage_idx); - -ar_result_t hwsw_rs_lib_create_lib_inst(hwsw_resampler_lib_t *hwsw_rs_ptr, uint32_t stage_idx, uint32_t req_size_per_instance, - uint32_t heap_id); - - -#ifdef __cplusplus -} -#endif //__cplusplus - -#endif // HWSW_RS_LIB_H diff --git a/modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib_hw.h b/modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib_hw.h deleted file mode 100644 index f75c5fa6..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/hwsw_rs_lib_hw.h +++ /dev/null @@ -1,173 +0,0 @@ -/* ======================================================================== */ -/** - @file hwsw_rs_lib_hw.h - Header file for combo hw-sw resampler lib with hw defines -*/ - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef HWSW_RS_LIB_HW_H -#define HWSW_RS_LIB_HW_H - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ - -#include "posal.h" -#if ((defined __hexagon__) || (defined __qdsp6__)) -#include "hwd_devcfg.h" -#endif -#include "hw_rs_lib.h" - - -/*------------------------------------------------------------------------ - * Macros, Defines, Type declarations - * -----------------------------------------------------------------------*/ -static const uint32_t HW_RS_MAX_FREQ = 384000; -static const uint32_t HW_RS_MAX_CHANNELS = 32; - -// OSR for Down-sampling is 24. -static const uint32_t HW_RS_MAX_DOWNSAMPLE_RATIO = 24; - -// Highest OSR for Up-sampling is 160. -static const uint32_t HW_RS_MAX_UPSAMPLE_RATIO = 160; - -static const uint32_t HW_RS_BUFFER_DELAY_US = 10000; // 10 MS -static const uint32_t HW_RS_BUFFER_DELAY_MS = HW_RS_BUFFER_DELAY_US / 1000; // 10 MS -static const int32_t HW_RS_FRAME_SIZE_US = HW_RS_BUFFER_DELAY_US; // 10 MS -static const uint32_t HW_RS_PROCESS_TIME_THRESHOLD = 7000; - -/*------------------------------------------------------------------------ - * Structure definitions - * -----------------------------------------------------------------------*/ - -// Hw Resampler Input-Output Media info Structure. -typedef struct hwsw_rs_hw_resampler_media_info -{ - int32 in_sampling_rate; - int32 out_sampling_rate; - uint16 bits_per_sample; - uint16 num_channels; -} hwsw_rs_hw_resampler_media_info_t; - -// Hw Resampler job signal Structure -typedef struct hwsw_rs_hw_resampler_job_signal -{ - posal_signal_t sig_job_ptr; // signal for the job submitted - posal_channel_t channel_job_ptr; // channel used to embed the signal - uint32 sig_mask; -} hwsw_rs_hw_resampler_job_signal_t; - -// Hw Resampler Internal Buffer Structure -typedef struct hwsw_rs_hw_resampler_internal_buf -{ - capi_buf_t buf[HW_RS_MAX_CHANNELS]; - uint32_t start_byte_index; // read byte index in each buffer - uint32_t valid_bytes; // valid bytes in each buffer - uint32_t frame_size_in_bytes; // bytes allocated per buffer -} hwsw_rs_hw_resampler_internal_buf_t; - -// Hw Resampler Buffer Manager. -typedef struct hwsw_rs_hw_resampler_buffer_mgr -{ - // Buffer where data is copied from ext input buffer - hwsw_rs_hw_resampler_internal_buf_t *data_input_buffer_ptr; - - // Input Buffer which is used to call the Hw resampler process - hwsw_rs_hw_resampler_internal_buf_t *process_input_buffer_ptr; - - // Buffer from data is copied to ext output buffer - hwsw_rs_hw_resampler_internal_buf_t *data_output_buffer_ptr; - - // Output Buffer which is used to call the Hw resampler process - hwsw_rs_hw_resampler_internal_buf_t *process_output_buffer_ptr; - - // Pointer to the memory allocated for buffers. - int8_t *mem_ptr; - - // size of allocated memory. - uint32_t mem_size; - - // Total normalized input samples consumed by the module - uint32_t input_samples_consumed; - - // Total normalized output samples produced by the module - uint32_t output_samples_produced; - - // number of samples to consume precalculated before process - uint32_t input_samples_to_consume; - - // number of samples to produce precalculated before process - uint32_t output_samples_to_generate; -} hwsw_rs_hw_resampler_buffer_mgr_t; - -// Hw Resampler Structure -typedef struct hwsw_rs_hw_resampler -{ - /* - * This flag is used to identify if Hw resampler is supported by Chip. - * It can also be false if client want to force-disable the Hw resampler. - */ - bool_t hw_resampler_supported; - - /* - * This is in an internal flag which is set only when both hw resampler can be used - * AND client has asked to use it through the set param api - */ - bool_t use_hw_rs; - - /* - * This flag is used to identify if a job is completed or not. - * If it is true then it doesn't always mean that job is pending at Hw resampler. - * It is possible that Hw resampler has completed the job and raised the signal through - * callback function. But caller hasnt cleared that signal yet. - */ - bool_t is_job_pending; - - // Flag to identify if session is suspended or not. - bool_t is_session_suspended; - - /* - * It accumulates the minimum estimated time(at max clock) of all those jobs - * which are closed because of the session suspend. - * We intend to reopen these jobs once session is resumed. - * This variable is used to correct the Time threshold. - */ - posal_atomic_word_t *estimated_time_of_all_suspended_session; - - // Minimum estimated time(at max clock) to complete the current job only - uint32_t minimum_estimated_time_of_this_session; - - // Signal, used to identify if a job is completed by Hw resampler. - hwsw_rs_hw_resampler_job_signal_t job_signal; - - // Media info for which Hw resampler job is need to be opened. - hwsw_rs_hw_resampler_media_info_t media_info; - - // Buffer manager which keeps the pointer to all the process and data buffers. - hwsw_rs_hw_resampler_buffer_mgr_t buf_mgr; - - // Mutex, to avoid simultaneous access of Hw resampler api. - hw_resampler_mutex_t *mutex_info; - - // Hw resampler handle. - //rs_drv_handle_t rs_handle; - - // Hw resampler job config structure. - //rs_drv_job_cfg_t rs_job_cfg; - - // heap id, to allocate the memory for buffers. - uint32_t heap_id; - - // keeps record of number of Hw jobs currently opened. - posal_atomic_word_t *phwrs_resource_state; - -#if HW_RS_JOB_COMPLETION_TIME - uint64_t job_complete_time; -#endif -} hwsw_rs_hw_resampler_t; - -#endif // HWSW_RS_LIB_HW_H diff --git a/modules/processing/resamplers/dynamic_resampler/inc/multi_def_resampler.h b/modules/processing/resamplers/dynamic_resampler/inc/multi_def_resampler.h deleted file mode 100644 index dadf964a..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/multi_def_resampler.h +++ /dev/null @@ -1,31 +0,0 @@ -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef MULTI_DEF_RESAMPLER_H -#define MULTI_DEF_RESAMPLER_H - -#define resamp_output_latency resamp_output_latency_dynamic_resampler -#define resamp_input_latency resamp_input_latency_dynamic_resampler -#define resamp_size resamp_size_dynamic_resampler -#define select_filter select_filter_dynamic_resampler -#define init_upsamp init_upsamp_dynamic_resampler -#define straight_copy straight_copy_dynamic_resampler -#define gen_rs_filt_coefs_lin32 gen_rs_filt_coefs_lin32_dynamic_resampler -#define rsphase_update_frac rsphase_update_frac_dynamic_resampler -#define conv_32 conv_32_dynamic_resampler -#define init_dnsamp init_dnsamp_dynamic_resampler -#define conv_16X32 conv_16X32_dynamic_resampler -#define int_div_16 int_div_16_dynamic_resampler -#define int_div_32 int_div_32_dynamic_resampler -#define int_div_64 int_div_64_dynamic_resampler -#define frac_div_32 frac_div_32_dynamic_resampler -#define halfQ15 halfQ15_dynamic_resampler -#define oneQ15 oneQ15_dynamic_resampler -#define resampFiltQFac resampFiltQFac_dynamic_resampler -#define resampTotalPhGrp resampTotalPhGrp_dynamic_resampler -#define resampFiltLenGrp resampFiltLenGrp_dynamic_resampler - - -#endif /* MULTI_DEF_RESAMPLER_H */ diff --git a/modules/processing/resamplers/dynamic_resampler/inc/resampler_32b_ext.h b/modules/processing/resamplers/dynamic_resampler/inc/resampler_32b_ext.h deleted file mode 100644 index 26c42691..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/resampler_32b_ext.h +++ /dev/null @@ -1,143 +0,0 @@ -#include "multi_def_resampler.h" - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef _RESAMPLER_32B_EXT_H_ -#define _RESAMPLER_32B_EXT_H_ - -#ifdef __cplusplus -extern "C" { -#endif -/*===========================================================================* - * INCLUDE HEADER FILES * - *===========================================================================*/ -#include "audio_basic_op.h" - -/*===========================================================================* - * Constants. * - *===========================================================================*/ - -/* For windows SPF builds we use the original resampler and - * not the qdsp or xtensa optimised versions */ -#if !((defined __hexagon__) || (defined __qdsp6__)) && !defined(__XTENSA__) -#define RESAMPLER_ORIGINAL -#endif - -#if defined(__XTENSA__) -#define RESAMPLER_C_OPT -#endif - -#ifndef RESAMPLER_ORIGINAL - #ifndef RESAMPLER_C_OPT - #define RESAMPLER_ASM_OPT - #endif -#endif - -#ifdef RESAMPLER_ORIGINAL - #undef RESAMPLER_C_OPT -#endif - - -/* Comprehensive analysis report covers the conversion cases from 8 to 384 kHz. - * It is safe to claim that the maximum supported frequency and down-conversion ratio - * are 384 kHz and 48, respectively. To claim higher frequency or conversion ratio, - * the comprehensive analysis must be conducted before claiming - */ -#define MAX_FREQ 1536000 -#define MAX_DOWN_RATIO 192 -#define ASYNC_RANGE 20 -#define MASK_QUALITY 0xF -#define MASK_INTERP 0x1 -#define MASK_ASYNC 0x1 -#define MASK_CHANNEL 0xF -#define MASK_INPUT 0x1 -#define MASK_BITS 0x1 -#define MASK_COEF 0x2 -#define MASK_DYNAMIC 0x1 -#define MASK_DELAY 0x1 -#define MASK_FILT_SEL 0x1 -#define MASK_DATA_QFACT 0x1 -#define SHIFT_QUALITY 6 -#define SHIFT_INTERP 10 -#define SHIFT_ASYNC 11 -#define SHIFT_CHANNEL 2 -#define SHIFT_INPUT 1 -#define SHIFT_BITS 0 -#define SHIFT_DYNAMIC 12 -#define SHIFT_DELAY 13 -#define SHIFT_FILTER_SELECT 14 -#define SHIFT_DATA_Q_FACTOR 15 - - -typedef enum -{ - MODE, /* SRC mode word */ - IN_FREQ, /* input frequency */ - OUT_FREQ, /* output frequency */ - RS_OSR, /* up-sampler OSR */ - RS_FLEN, /* up-sampler filter length */ - RS_MEM_LEN, /* up-sampler memory length */ - RS_QFAC, /* up-sampler filter coefficient q-factor */ - RS_SYMMETRIC, /* up-sampler filter symmetry indicator */ - MODE_COEF_BIT, /* coefficient bit width indicator, 16 bit input */ - /* 0 -- 16 bit filter coefficients */ - /* 1 -- 32 bit filter coefficients */ - MODE_INTERP, /* interpolation mode indicator */ - /* 0 -- linear interpolation */ - /* 1 -- quadratic interpolation */ - MODE_ASYNC, /* asynchronous indicator */ - NUM_CHAN, /* number of channels */ - MODE_DYNAMIC, /* dynamic resampler indicator */ - MODE_DYNAMIC_DELAY, /* delay mode for dyanmic resampler */ - /* 0 -- low delay with visible transitional phase distortion */ - /* 1 -- high delay with smooth transition */ - MODE_FILT_SEL_FLAG, - /* 0 -- disable new filter selection */ - /* 1 -- enable new filter selection */ - DATA_Q27_FLAG, - /* 0 -- not Q27 for 32bit data */ - /* 1 -- Q27 only when data width is 32 bits */ - - -} PARAM; - -/*===========================================================================* - * FUNCTION DECLARATIONS FOR BOTH UP-SAMPLER AND DOWN-SAMPLER * - *===========================================================================*/ -void resamp_size(int32 *par, int16 *pRsSize, int16 *pRsMemSize); -void* select_filter(int32 minFreq, int32 maxFreq, int32 async, int32* param); -int16 dynamic_resamp_output_latency(void *pRS); -int16 dynamic_resamp_input_latency(void *pRS); -int32 resamp_fixedin(void*, void**, void**, int32); -int32 resamp_fixedout(void*, void**, void**, int32); -int32 resamp_calc_fixedin(void*, int32); -int32 resamp_calc_fixedout(void*, int32); -void resamp_overshoot_protection_q27(void**, int32, int32); - -uint32 resamp_memreq_opt_coef_table(void*); -int32 resamp_gen_opt_coef_table(void*,void*,uint32); - -/*===========================================================================* - * FUNCTION DECLARATIONS FOR UP-SAMPLER * - *===========================================================================*/ -int32 init_upsamp(void*, int32*, void*, void*, void**); - -/*===========================================================================* - * FUNCTION DECLARATIONS FOR DOWN_SAMPLER * - *===========================================================================*/ -int32 init_dnsamp(void*, int32*, void*, void*, void**); - -/*===========================================================================* - * FUNCTION DECLARATIONS FOR DYNAMIC_RESAMPLER * - *===========================================================================*/ -int32 init_dynamic_resamp(void*, int32*, void*, void*, void**); -int32 reinit_dynamic_resamp(void* pStruct, int32 inFreq); - -#ifdef __cplusplus -} -#endif - -#endif /* _RESAMPLER_32B_EXT_H_ */ diff --git a/modules/processing/resamplers/dynamic_resampler/inc/rs_common.h b/modules/processing/resamplers/dynamic_resampler/inc/rs_common.h deleted file mode 100644 index 1fb6185f..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/rs_common.h +++ /dev/null @@ -1,96 +0,0 @@ -#include "multi_def_resampler.h" - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifndef _RS_COMMON_H_ -#define _RS_COMMON_H_ - -#include "audio_basic_op.h" - -/*===========================================================================* - * TYPE DEFINITIONS * - *===========================================================================*/ - - -/*===========================================================================* - * constants * - *===========================================================================*/ -#define Q15_SHIFT 15 -#define Q20_SHIFT 20 -#define Q23_SHIFT 23 -#define MAX_Q15 32767 -#define MIN_Q15 -32768 - - -/*===========================================================================* - * EXTERNAL VARIABLES * - *===========================================================================*/ -extern const int16 oneQ15, halfQ15; -extern const int32 oneQ23, halfQ23; - -/*===========================================================================* - * STRUCTURES * - *===========================================================================*/ -typedef struct -{ - int64 totalPhStepCoef;/* Phase update step size for filter coefficient*/ - int32 fracPhMask; - int32 fracPhStepCoef; /* Phase update step size for filter coefficient*/ - int32 inFreq; /* input sampling rate */ - int32 outFreq; /* output sampling rate */ - int32 maxFreq; - int32 totalPhCap; /* cap of total phase */ - int32 totalPhStep; /* phase update step size for starting point */ - int32 curTotalPh; /* total phase for starting point */ - int32 fracPhStep; - int32 curFracPh; /* fractional phase for starting point, no init */ - int32 invMaxFreq; /* inverse of input frequency */ - int16 intPhStepCoef; /* Phase update step size for filter coefficient*/ - int16 sampStep; /* phase update step size for starting point */ - int16 intPhStep; - int16 curIntPh; /* integer phase for starting point, no init */ - int16 invMaxFreqShift;/* shifting factor of invInFreq */ - int16 totalIntPh; /* filter over sampling ratio */ - int16 convIndex; /* filter index for convolution */ - int16 loadIndex; /* filter index for loading filter memory */ - int16 async; /* Asynchronous mode indicator */ - int16 intRatio; /* Integer resampling ratio indicator */ -} RSPhase; - -typedef struct -{ - void *pMem; /* point to filter memory */ - void *pCoef; /* point to filter coefficient */ - void *pCoef2; - void *pGenCoef; /* pointer to generated filter coefficients */ - int32 halfQfac; /* one half for a given Q factor */ - int32 coefLen; /* length of filter coefficient */ - int32 coefLen2; /* half length of filter coefficient if filter */ - /* coefficients is symmetric. */ - int32 coefLen3; /* length of filter coefficient */ - int32 coefLen4; /* half length of filter coefficient if filter */ - /* coefficients is symmetric. */ - int16 coefStep; /* convolution step size of filter coefficient */ - int16 coefStep2; - int16 coefStart; - int16 qFac; /* Qfactor of the filter coefficients */ - int16 memLen; /* length of filter memory */ - int16 memStep; /* convolution step size of filter memmory */ -} Filters; - -/*===========================================================================* - * FUNCTION DECLARATIONS * - *===========================================================================*/ -int16 int_div_16(int16 num16, int16 den16, int16* rem16); -int32 int_div_32(int32 num32, int32 den32, int32* rem32); -int64 int_div_64(int64 num64, int64 den64, int64* rem64); -int32 frac_div_32(int32 num, int32 den, int16 Qfac); -int32 fxp_inv_32(int32 num, int16 qFac, int16 *shift); - -#endif /* _RS_COMMON_H_ */ -/*===========================================================================* - * End of rs_common.h * - *===========================================================================*/ diff --git a/modules/processing/resamplers/dynamic_resampler/inc/rs_driver.h b/modules/processing/resamplers/dynamic_resampler/inc/rs_driver.h deleted file mode 100644 index 73118619..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/rs_driver.h +++ /dev/null @@ -1,460 +0,0 @@ -/* -============================================================================ - -FILE: rs_driver.h - -DESCRIPTION: Resampler HW driver header file. - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#include - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -#ifndef RS_DRIVER_H -#define RS_DRIVER_H - -#include "typedef_drivers.h" -#include "posal.h" -#include "ar_defs.h" -#include "qurt.h" -#include "hwd_devcfg.h" - -//#define DRIVER_DEBUG 1 - -#define MAX_MULTI_RESAMP_CHANNELS 32 - -/** - * The following define is for HW Interrupt triger event type - */ - -typedef enum _rs_job_event_type -{ - RS_JOB_EVEN_INVALID = -1, - RS_JOB_EVEN_JOB_DONE = 1, - RS_JOB_EVEN_JOB_ERROR = 2, -} rs_job_event_type; - -/** -* The following define is for HW resampler job status -*/ -typedef enum _rs_job_status_type -{ - RS_JOB_STATUS_INVALID = -1, - RS_JOB_STATUS_ONGOING = 0, //job not finish yet - RS_JOB_STATUS_DONE, //job done - RS_JOB_STATUS_AHB_ERROR, //job error - RS_JOB_STATUS_SAMPLE_COUNT_ERROR, //job error -} rs_job_status_type; - -/** -* The following define is for HW resampler operation mode. -*/ -typedef enum _rs_operation_type -{ - RS_OPERATION_INVALID = -1, - RS_OPERATION_UPSAMPLING = 1, //up sampling only - RS_OPERATION_DNSAMPLING, //down sampling only - RS_OPERATION_RESAMPLING, //up sampling first then down sampling = Both, - //for example of 48 KHz to 44.1 KHz: upsampling 48 K to 88.2 K first then divide it by 2 -} rs_operation_type; - -/** -* The following define is for HW resampler operation priority. -*/ -typedef enum _rs_priority_type -{ - RS_PRIORITY_INVALID = -1, - RS_PRIORITY_LOW = 0, - RS_PRIORITY_HIGH, -} rs_priority_type; - -/** -* The following define is for HW resampler job submit type. -*/ -typedef enum _rs_job_submit_type -{ - RS_JOB_INVALID = -1, - RS_JOB_CANCEL = 0, - RS_JOB_SUBMIT, -} rs_job_submit_type; - -/** -* The following define is for HW resampler coeffcient source type. -*/ -typedef enum _rs_coeff_src_type -{ - RS_COEFF_SRC_INVALID = -1, - RS_COEFF_SRC_ROM = 0, - RS_COEFF_SRC_CUSTOMER, //coeff array is put in RAM -} rs_coeff_src_type; - -/** -* The following define is for HW resampler coeffcient type. It is valid only when coeff source is ROM. -*/ -typedef enum _rs_coeff_quality_type -{ - RS_COEFF_QUALITY_INVALID = -1, - RS_COEFF_QUALITY_HQ = 0, //coeff bit width = 16 - RS_COEFF_QUALITY_SHQ, //coeff bit width = 20 -} rs_coeff_quality_type; - -/** -* The following define is for HW resampler coeffcient type. It is valid only when coeff source is ROM. -*/ -typedef enum _rs_sample_width_type -{ - RS_SAMPLE_WIDTH_INVALID = -1, - RS_SAMPLE_WIDTH_16 = 0, - RS_SAMPLE_WIDTH_32, -} rs_sample_width_type; - -/** -* The following define is for HW upsampler filter type. -*/ -typedef enum _rs_upsamp_filter_type -{ - RS_UPSAMPLER_FILTER_ID_INVALID = -1, - RS_UPSAMPLER_FILTER_ID_1344 = 0, - RS_UPSAMPLER_FILTER_ID_8960, - RS_UPSAMPLER_FILTER_ID_MAX, -} rs_upsamp_filter_type; - -/** -* The following define is for HW downsampler filter type. -*/ -typedef enum _rs_dnsamp_filter_type -{ - RS_DNSAMPLER_FILTER_ID_INVALID = -1, - RS_DNSAMPLER_FILTER_ID_1344 = 0, - RS_DNSAMPLER_FILTER_ID_8960, //not supported - RS_DNSAMPLER_FILTER_ID_MAX, -} rs_dnsamp_filter_type; - -/** -* The following define is for HW resampler interpolation type. -*/ -typedef enum _rs_interp_type -{ - RS_INTERP_MODE_INVALID = -1, - RS_INTERP_MODE_LINEAR = 0, - RS_INTERP_MODE_QUAD, - RS_INTERP_MODE_MAX, -} rs_interp_type; - -/** -* The following define is for HW resampler force interpolation type. -*/ -typedef enum _rs_force_interpol_type -{ - RS_FORCE_INTERPOL_INVALID = -1, - RS_FORCE_INTERPOL_OFF = 0, //normal operation - RS_FORCE_INTERPOL_ON, //force fractional operation, used in streaming case -} rs_force_interpol_type; - - -/** -* The following define is for HW resampler dynamic resampler mode. -*/ -typedef enum _rs_dynamic_resampler_type -{ - RS_DYNAMIC_RESAMPLER_INVALID = -1, - RS_DYNAMIC_RESAMPLER_OFF = 0, //normal operation - RS_DYNAMIC_RESAMPLER_ON, //dynamic resampler mode -} rs_dynamic_resampler_type; - - -/** \brief resampler driver upsampler parameter struct */ -typedef struct _struct_rs_upsampler -{ - /** integer phase step size */ - uint16_t int_phase_step_size; // = samp_inc; - /** current integer phase */ - uint16_t cur_int_phase; // = samp; - /** fraction phase step size */ - uint32_t frac_phase_step_size; // = sub_samp_inc; - /** current fraction phase */ - uint32_t cur_frac_phase; // = sub_samp; - /** upsampler out freq */ - uint32_t out_freq; - /** fraction const */ - uint32_t frac_const; - /** shift const */ - uint16_t shift_const; - /** up sampler filter memory size */ - int16_t up_filt_mem_size; -} struct_rs_upsampler; - -/** \brief resampler driver downsampler parameter struct */ -typedef struct _struct_rs_dnsampler -{ - /** upsampler structure */ - struct_rs_upsampler up_samp_struct; - /** down sampler filter memory size */ - int16_t dn_filt_mem_size; - /** down sampler ratio. input stream is divided by this factor */ - int16_t ds_factor; - /** down sampler step size - number of coefficeints that needs to be skipped*/ - int16_t ds_step; - /** location of the end of the UpSampler filter = ptrDnSampStruct->filtMemOffset */ - int16_t up_sampler_flt_fptr; //UPSAMPLER ONLY up_sampler_flt_fptr = upsamp.filtMemOffset //DOWN SAMPLER ONLY up_sampler_flt_fptr = 0 //RESAMPLER up_sampler_flt_fptr = upsamp.filtMemOffset - /** location of next sample generated by UPsampler */ - int16_t up_sampler_flt_optr; //UPSAMPLER ONLY up_sampler_flt_optr = upsamp.outputOffset //DOWN SAMPLER ONLY up_sampler_flt_optr = 0 //RESAMPLER up_sampler_flt_optr = dnsamp.inputOffset - /** location of next input sample read from memory = ptrDnSampStruct->inputOffset */ - int16_t resampler_flt_iptr; //UPSAMPLER ONLY resampler_flt_iptr = upsamp.inputOffset //DOWN SAMPLER ONLY resampler_flt_iptr = dnsamp.inputOffset //RESAMPLER resampler_flt_iptr = upsamp.inputOffset - /** location of the end of the DnSampler Filter */ - int16_t dn_sampler_flt_fptr; //UPSAMPLER ONLY dn_sampler_flt_fptr = 0 //DOWN SAMPLER ONLY dn_sampler_flt_fptr = dnsamp.filtMemOffset //RESAMPLER dn_sampler_flt_fptr = dnsamp.filtMemOffset -}struct_rs_dnsampler; - -/** \brief resampler driver customer coeff parameter struct */ -typedef struct _struct_rs_cust_coeff -{ - /** Starting address of custom coefficients */ - uint32_t cust_coeff_base_addr; - /** customer coeff length */ - uint32_t cust_coeff_length; - /** up sampler customer coeff offset */ - uint16_t us_cust_coeff_cfg_offset; //in 16 bit word unit - /** up sampler customer coeff filter taps */ - uint16_t us_cust_coeff_cfg_filter_taps; - /** up sampler customer coeff polyphase */ - uint16_t us_cust_coeff_cfg_plyphase; - /** down sampler customer coeff offset */ - uint16_t ds_cust_coeff_cfg_offset; //in 16 bit word unit - /** down sampler customer coeff filter taps */ - uint16_t ds_cust_coeff_cfg_filter_taps; - /** need driver to allocate internal buffer for customer coeffcients. 1 - need 0 - not needed */ - uint16_t internal_coeff_buf_needed; -}struct_rs_cust_coeff; - - -/** \brief resampler driver hw resampler job parameter struct */ -typedef struct _struct_rs_job_config -{ - /** pointer to down sampler structure */ - struct_rs_dnsampler *ptr_dn_samp_struct; - /** pointer to customer coeff structure */ - struct_rs_cust_coeff *ptr_cust_coeff; - /** operation type: Up/Down/Both */ - rs_operation_type operation; - /** priority: High/Low */ - rs_priority_type prio; - /** number of channels, 1-8 */ - uint16_t num_channels; - /** sampler bit width: 16bit/24bit */ - rs_sample_width_type data_width; - /** coeff quality: 16bit/17bit/18bit */ - rs_coeff_quality_type coeff_width; - /** submit this job or not: 1:submit 0:cancel */ - rs_job_submit_type submit_job; - /** upsampler filter ID */ - rs_upsamp_filter_type upsamp_filt_id; - /** dnsampler filter ID */ - rs_dnsamp_filter_type dnsamp_filt_id; - /** hw resampler interpolation mode*/ - rs_interp_type interp_mode; - /** hw resampler sync mode*/ - rs_force_interpol_type force_interpol; - /** hw resampler dynamic resampler mode*/ - rs_dynamic_resampler_type dynamic_rs; - /** coeff source: ROM and RAM */ - rs_coeff_src_type coeff_src; - /** for internal input/output buffer 0: don't need, 1: need */ - uint16_t internal_buf_needed; - /** the max num of input samples per channel, valid if internal_buf_needed = 1, 4096 is maxium */ - /** if this field is set as zero, driver will set it as 4096 */ - uint16_t input_num_sample_max; -} struct_rs_job_config; - -/** \brief resampler driver buffer parameter struct */ -typedef struct _struct_rs_buf -{ - /** buffer pointer. all samples in filt memory are uint32_t format */ - uint32_t buf_ptr; - /** buffer length in bytes */ - uint16_t buf_length; -} struct_rs_buf; - -/** \brief HW Resampler driver for stream structure data updating */ -typedef struct _struct_rs_stream_data -{ - /** integer phase step size */ - uint16_t int_phase_step_size; // = samp_inc; - /** fraction phase step size */ - uint32_t frac_phase_step_size; // = sub_samp_inc; - /** current fraction phase */ - uint32_t cur_frac_phase; // = sub_samp; - /** fraction const */ - uint32_t frac_const; - /** shift const */ - uint16_t shift_const; - /** upsampler out freq */ - uint32_t med_freq; -} struct_rs_stream_data; - -/** \brief HW Resampler driver callback data type */ -typedef struct _struct_rs_cb_data -{ - /** Resampler driver return result */ - /** AR_EOK SUCCESS others FAILURE */ - ar_result_t result; - /** job ID */ - uint16_t job_id; - /** Error type */ - rs_job_status_type hw_error_type; -} struct_rs_cb_data; - -/** \brief HW Resampler driver callback function type */ -typedef void (*rs_job_event_callback_func) -( - /** A void pointer to user defined context */ - void *user_ctx_ptr, - /** Callback event type */ - rs_job_event_type event, - /** Callback data type */ - void *cb_data_ptr -); - - -/** \brief resampler driver hw resampler job timing info struct */ -typedef struct _struct_rs_job_timing_info -{ - int32_t num_input_sample_per_frame; - int32_t num_output_sample_per_frame; - /** frame size in microsecond unit. the frame szie should be matched with the num input sample sent via rs_send_job() */ - /** for example, for 48000 Hz to 44100 Hz resampling case, if frame_size = 10000 ns, then the num_input_sample for every frame is 48. */ - int32_t frame_size; - /** the time in microsecond unit client requires hw resampler done the job for this frame */ - int32_t budget_time_to_done; - /** the time in microsecond unit that hw resampler can finish the job. it is returned back from hw rs driver*/ - int32_t estimated_time_to_done; -} struct_rs_job_timing_info; - -/** -* This resampler driver init function and it is only called once. -* -* @return Success/failure of resampler init. -*/ -ar_result_t rs_init(void); - -/** -* This resampler driver deinit function and it is only called once. -* -* @return Success/failure of resampler deinit. -*/ -ar_result_t rs_deinit(void); - -/** -* This function is for resampler job init. -* -* @param[in] px - processor ID: 0 QDSP 1 APPLICATION PROCESSOR. -* @param[in] job_struct - point to job configure struct. -* @param[in] cb_func - callback function when job is done -* @param[in] user_ctx - user defined ctx used in callback function -* @return job ID, valid job ID is 0 to 15. -*/ -int16_t rs_init_job(uint16_t px, struct_rs_job_config* job_struct, rs_job_event_callback_func cb_func, void* user_ctx); - -/** -* This function is for sending the input samplers to driver -* -* @param[in] px - processor ID: 0 QDSP 1 APPLICATION PROCESSOR. -* @param[in] job_id - job ID. -* @param[in] in_samples - the num of input samples -* @param[in] out_samples - the expected num of output samples. -* @param[in] in_buf_ptr - pointer to an array which specific the input buffer pointer for every channel. -* @param[in] out_buf_ptr - pointer to an array which specific the output buffer pointer for every channel. -* @return Success/failure of sending this frame job. -*/ -ar_result_t rs_send_job(uint16_t px, int16_t job_id, uint16_t in_samples, uint16_t out_samples, int32_t** in_buf_ptr, int32_t** out_buf_ptr); - -/** -* This function is for reset hw resampler -* It is used in fast farward/rewind cases -* The frame sent via rs_send_job() is treated as the first frame after rs_reset_job() called -* -* @param[in] px - processor ID: 0 QDSP 1 APPLICATION PROCESSOR. -* @param[in] job_id - job ID. -* @param[in] job_struct - point to job configure struct. Some parameters are updated -* @return Success/failure of sending this frame job. -*/ -ar_result_t rs_reset_job(uint16_t px, int16_t job_id, struct_rs_job_config* job_struct); - -/** -* This function is for confirming the job. It is called after client getting the callback function. -* The output samples will be in output buffer after this function call -* -* @param[in] px - processor ID: 0 QDSP 1 APPLICATION PROCESSOR. -* @param[in] job_id - job ID. -* @param[in/out] samples_processed - num of samples has been processed -* @return job status. -*/ -rs_job_status_type rs_confirm_job(uint16_t px, int16_t job_id, uint32_t *samples_processed); - -/** -* This function is for uninit this job -* -* @param[in] px - processor ID: 0 QDSP 1 APPLICATION PROCESSOR. -* @param[in] job_id - job ID. -* @return void -*/ -void rs_uninit_job(uint16_t px, int16_t job_id); - -/** -* This function is for querying the stream configuration -* -* @param[in] job_id - job ID. -* @param[in] ptr_rs_dnsamp - point to struct_rs_dnsampler struct. -* @return Success/failure of query. -*/ -ar_result_t rs_get_stream_config(int16_t job_id, struct_rs_dnsampler *ptr_rs_dnsamp); - -/** -* This function is for setting the stream configuration -* -* @param[in] job_id - job ID. -* @param[in] ptr_rs_dnsamp - point to struct_rs_dnsampler struct. -* @return Success/failure of query. -*/ -ar_result_t rs_set_stream_config(int16_t job_id, struct_rs_dnsampler *ptr_rs_dnsamp); - -/** -* This function is for updaing the stream configuration -* -* @param[in] job_id - job ID. -* @param[in] ptr_rs_str_data - point to struct_rs_stream_data struct. -* @param[in] flag - for internal use only, 6 - update all parameters in struct_rs_stream_data; others: only int_phase_step_size and frac_phase_step_size -* @return Success/failure of query. -*/ -ar_result_t rs_set_stream_data(int16_t job_id, struct_rs_stream_data *ptr_rs_str_data, uint16_t flag); - -/** - * This function is for estimating the core clk - * - * @param[in] job_id the job_id of the stream - * @param[in] ptr_job_timing_info pointer to struct struct_rs_job_timing_info - * @return AR_EOK if succesful, else failure - */ -ar_result_t rs_estimate_core_clks(int16_t job_id, struct_rs_job_timing_info* ptr_job_timing_info); - - -/** - * This function is for querying hw resampler version - * - * @return hw resampler version - */ -uint32_t rs_query_hw_version(void); - -bool_t HwdDevCfg_HWSupport(HwdModuleType moduleType); -#endif - -#ifdef __cplusplus -} -#endif //__cplusplus - - diff --git a/modules/processing/resamplers/dynamic_resampler/inc/rs_driver_ext.h b/modules/processing/resamplers/dynamic_resampler/inc/rs_driver_ext.h deleted file mode 100644 index 462b112a..00000000 --- a/modules/processing/resamplers/dynamic_resampler/inc/rs_driver_ext.h +++ /dev/null @@ -1,410 +0,0 @@ -/* -============================================================================ - -FILE: rs_driver_ext.h - -DESCRIPTION: Resampler HW driver extension header file. - -/*========================================================================= -Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. -SPDX-License-Identifier: BSD-3-Clause-Clear -========================================================================= */ - -#ifdef __cplusplus -extern "C" { -#endif //__cplusplus - -#ifndef RS_DRIVER_EXT_H -#define RS_DRIVER_EXT_H - -#include "posal.h" - -//The max number of jobs in queue is 8. -//The max number of jobs that resampler can process is 8. -//The number of IDs that can be used is 16 IDs. (valid ID is 0 to 15) - -#define MAX_NUM_OF_HW_RESAMPLER_JOB 8 -#define MAX_HW_RS_FREQ_SUPPORTED 192000 - -typedef void* rs_drv_handle_t; - -/** - * HW Resampler driver extension IOCtrl call property - */ -typedef enum _rs_drv_property_type -{ - RS_DRV_PROPERTY_UNDEFINED, - RS_DRV_PROPERTY_FORCE_INTERPOL_CONFIG = 0x1, - RS_DRV_PROPERTY_REGISTER_JOB_EVENT_CALLBACK = 0x2, //this is used only for async call - RS_DRV_PROPERTY_GET_REQUIRED_NUM_SAMPLES = 0x3, - RS_DRV_PROPERTY_ESTIMATE_CORE_CLK = 0x4, - RS_DRV_PROPERTY_DYNAMIC_RESAMPLER_CONFIG = 0x5, - - RS_DRV_PROPERTY_GLOBAL = 0x20000000, - RS_DRV_PROPERTY_HW_VERSION_QUERY, - RS_DRV_PROPERTY_MAX -}rs_drv_property_type; - -/** -* HW resampler driver extension upsampler filter type define. -*/ -typedef enum _rs_drv_upsamp_filter_type -{ - RS_DRV_UPSAMPLER_FILTER_ID_INVALID = -1, - RS_DRV_UPSAMPLER_FILTER_ID_1344 = 0, - RS_DRV_UPSAMPLER_FILTER_ID_8960, - RS_DRV_UPSAMPLER_FILTER_ID_MAX, -} rs_drv_upsamp_filter_type; - -/** -* HW resampler driver extension interpolation type define. -*/ -typedef enum _rs_drv_interp_type -{ - RS_DRV_INTERP_MODE_INVALID = -1, - RS_DRV_INTERP_MODE_LINEAR = 0, - RS_DRV_INTERP_MODE_QUAD, - RS_DRV_INTERP_MODE_MAX, -} rs_drv_interp_type; - -/** -* HW resampler driver extension force interpolation type.define -*/ -typedef enum _rs_drv_force_interpol_type -{ - RS_DRV_FORCE_INTERPOL_INVALID = -1, - RS_DRV_FORCE_INTERPOL_OFF = 0, //normal operation - RS_DRV_FORCE_INTERPOL_ON, //force fractional operation, used in streaming case -} rs_drv_force_interpol_type; - - -/** -* HW resampler driver extension dynamic resampler enable type.define -*/ -typedef enum _rs_drv_dynamic_resampler_type -{ - RS_DRV_DYNAMIC_RESAMPLER_INVALID = -1, - RS_DRV_DYNAMIC_RESAMPLER_OFF = 0, //normal operation - RS_DRV_DYNAMIC_RESAMPLER_ON, //dynamic resampler is enabled. used for fast/slow playabck -} rs_drv_dynamic_resampler_type; - -/** -* The following define is to inform HW resampler driver extension which clock mismatch detect mode used by client. -* This is used only in force fraction operation mode -* -* HW Resampler is running on local system clcok. The input stream maybe from network which is running in remote clock domain -* The output stream maybe driven from audio render device which maybe in another clock domain -* For example, for no drift case, the input freq is 48000 Hz and output freq is 48000 Hz. -* If there is the drift between remote clock domain and local system clock, when we use the local system clock to count the incoming -* audio samples, we can get for example 48005 smaple in one sec -* If there is the drift between device render clock domain and local system clock, when we use the local system clock to count the output -* audio samples, we can get for example 47995 smaple in one sec -* So we have the below user cases: -* 1) The drift is happened in INPUT path only --> RS_DRV_SAMPLE_RATE_DRIFT_MODE_INPUT -* 2) The drift is happened in OUTPUT path only --> RS_DRV_SAMPLE_RATE_DRIFT_MODE_OUTPUT -* 3) The drift is happened in both --> RS_DRV_SAMPLE_RATE_DRIFT_MODE_BOTH -* -* Call sequence for FORCE_FRACTION_OPERATION mode -* 1. Configure job as FORCE_FRACTION_OPERATION mode and start job as normal -* 2. Client detect the input or/and output sample rate period -* 3. If drift is detected, -* 3-1 Use RS_DRV_PROPERTY_FORCE_INTERPOL_CONFIG to configure FORCE_FRACTION_OPERATION mode -* 3-2 Calculate the num of input/output smaples -* 3-3 Send the job -* -* for case like 8 Khz -> 6.1 KHz, the resampler should be set as -* 8 -> 24.4 -> 6.1 -* 8 -> 24.4 -> force fraction mode -* 24.4 -> 6.1 -> normal down sampleing -*/ -typedef enum _rs_drv_sample_rate_drift_mode -{ - RS_DRV_SAMPLE_RATE_DRIFT_MODE_INVALID = -1, - RS_DRV_SAMPLE_RATE_DRIFT_MODE_INPUT = 0, - RS_DRV_SAMPLE_RATE_DRIFT_MODE_OUTPUT, - RS_DRV_SAMPLE_RATE_DRIFT_MODE_BOTH, -} rs_drv_sample_rate_drift_mode; - -/** -* HW resampler driver extension prediction mode define for calculate num of input/output samples -*/ -typedef enum _rs_drv_num_sample_predict_mode -{ - RS_DRV_NUM_SAMPLE_PREDICT_MODE_INVALID = -1, - RS_DRV_NUM_SAMPLE_PREDICT_MODE_FIXED_INPUT = 0, //Baseing on num of input samples to calculate the num of output samples - RS_DRV_NUM_SAMPLE_PREDICT_MODE_FIXED_OUTPUT, //Baseing on num of output samples to calculate the needed num of input samples -} rs_drv_num_sample_predict_mode; - -/** -* HW Resampler driver extension IOCtl call property info struct.define -*/ -typedef struct -{ - /** Property call type*/ - rs_drv_property_type prop; - /** Data size of property call*/ - int32 data_size; - /** Data pointer of property call*/ - void *data_ptr; - /** Reserved*/ - int32 flags; -} rs_drv_ioctl_prop_info_t; - - -/** -* The structure define for a buffer that is passed into resampler driver extension functions -*/ -typedef struct -{ - int8* data_ptr; /**< Data pointer to the raw data. */ - - uint32 actual_data_len; /**< Length of the valid data (in bytes). This - field has multiple uses, depending on the - context:\n - - When this buffer is an input to a function, the caller specifies - the number of valid bytes using this field. The callee overwrites this - field with the number of bytes that were consumed. - - - When this buffer is the output of a function, the caller does not - use this field. The callee fills this field with the number of generated - valid bytes in the output buffer. - */ - uint32 max_data_len; /**< Total allocated size of the buffer (in - bytes). When a pointer of type rs_drv_buf_t - is passed as an input argument of a - function, this parameter specifies the - allocated size of the buffer and is - untouched by the callee. */ -} rs_drv_buf_t; - -/** -* The structure is for a list of rs_drv_buf buffers. It can be used for functions -* that require multiple input or output buffers. -* -* This structure consists of a pointer to an array of type rs_drv_buf. For -* multichannel de-interleaved data, each buffer contains data from all -* the channels in sequence. -*/ -typedef struct -{ - rs_drv_buf_t* buf_ptr; /**< Array of rs_drv_buf buffer elements. */ - uint32 bufs_num; /**< Number of elements in the array. */ -} rs_drv_buflist_t; - - -/** -* HW Resampler driver extension job open parameter struct.define -*/ -typedef struct _rs_drv_job_cfg -{ - /** input sample rate */ - int32 in_freq; - /** output sample rate */ - int32 out_freq; - /** number of channels, 1-8 */ - uint16 num_channels; - /** sampler bit width: 16bit/32bit */ - uint16 samp_bit_width; - /** hw resampler upsampler filter type*/ - rs_drv_upsamp_filter_type upsamp_filt_id; - /** hw resampler interpolation mode*/ - rs_drv_interp_type interp_mode; - /** hw resampler force interpol mode*/ - rs_drv_force_interpol_type force_interpol; - /** hw resampler dynamic resampler mode*/ - rs_drv_dynamic_resampler_type dynamic_resampler; - /** for internal input/output buffer 0: don't need, 1: need */ - /** if this is set as 0, client should guarantee that both buffer pointer and buffer max length for each channel */ - /** of input/output are 32 byte aligned. The memory for each channel is physical continus */ - /** if force_interpol is set as ON, set internal_buf_needed to 0 to avoid any internal buffer overwriten as the internal */ - /** input/output buffer sizes are calculated basing on the in_freq and out_freq which are not drifted */ - uint16 internal_buf_needed; - /** the max num of input samples per channel, valid if internal_buf_needed = 1, 4096 is maxium */ - /** if this field is set as zero, driver will set it as 4096 */ - uint16 input_num_sample_max; -} rs_drv_job_cfg_t; - -/** -* HW Resampler driver extension IOCtl property call - async mode configure struct.define -*/ -typedef struct -{ - rs_drv_sample_rate_drift_mode mode; - /** input sample rate */ - int32 in_freq; - /** output sample rate */ - int32 out_freq; -} rs_drv_ioctl_prop_force_interpol_cfg_t; - - -/** -* HW Resampler driver extension IOCtl property call - get the num of required samples -* For "Fixed Input Mode" -- mode = RS_DRV_NUM_SAMPLE_PREDICT_MODE_FIXED_INPUT -* num_sample_in : specific the num of input sample by client -* num_sample_out: the num of output sample returned by resampler driver -* For "Fixed Output Mode" -- mode = RS_DRV_NUM_SAMPLE_PREDICT_MODE_FIXED_OUTPUT -* num_sample_in : the num of input sample returned by resampler driver -* num_sample_out: specific the num of output sample by client -*/ -typedef struct -{ - rs_drv_num_sample_predict_mode mode; - /** num of input samples */ - uint32 num_sample_in; - /** num of output samples */ - uint32 num_sample_out; -} rs_drv_ioctl_prop_get_num_sample_t; - -/** -* HW Resampler driver extension IOCtl property call - estimate hw resampler core clk -*/ -typedef struct -{ - /** frame size in microsecond unit. the frame szie should be matched with the num input sample sent via rs_drv_job_process() */ - /** for example, for 48000 Hz to 44100 Hz resampling case, if frame_size = 10000 us, then the num_input_sample for every frame is 480. */ - int32 frame_size; - /** the time in microsecond unit client requires hw resampler done the job for this frame */ - int32 budget_time_to_done; - /** the time in microsecond unit that hw resampler can finish the job. it is returned back from hw rs driver*/ - int32 estimated_time_to_done; -} rs_drv_ioctl_prop_estimate_core_clk_t; - - -/** -* HW Resampler driver extension IOCtl property call - dynamic resampler mode configure struct.define -*/ -typedef struct -{ - /** input sample rate */ - int32 in_freq; - /** output sample rate */ - int32 out_freq; -} rs_drv_ioctl_prop_dynamic_resampler_cfg_t; - -/** -* This resampler driver driver extension init function and it is only called once. -* -* @return Success/failure of resampler init. -*/ -ar_result_t rs_drv_init(void); - -/** -* This resampler driver driver extension deinit function and it is only called once. -* -* @return Success/failure of resampler deinit. -*/ -ar_result_t rs_drv_deinit(void); - -/** -* This function is for resampler driver extension job init. -* @param[in/out] rs_drv_h - this will be the service entry handle returned to the caller. -* @param[in] job_cfg_ptr - point to job configure struct. -* @return Success/failure of sending this frame job. -*/ -ar_result_t rs_drv_job_open(rs_drv_handle_t *rs_drv_h, rs_drv_job_cfg_t* job_cfg_ptr); - -/** -* This function is for processing the input/output data -* -* @param[in] rs_drv_h - input handle. -* @param[in] in_buflist_ptr - pointer to rs_drv_buflist. -* @param[in] out_buflist_ptr - pointer to rs_drv_buflist. -* @return Success/failure of sending this frame job. -* Note: -* 1. Client should use RS_DRV_PROPERTY_GET_REQUIRED_NUM_SAMPLES property call to get the num of input samples (for fixed output mode) -* OR num of output samples (for fixed input mode) before calling this function -* 2. Supposing: -* the num of input samples = num_input_samples -* the num of output samples = num_output_samples -* 3. Then set the input and output buffer as below: -* in_buflist_ptr->buf_ptr->actual_data_len = num_input_samples * sample_size_in_bytes -* out_buflist_ptr->buf_ptr->actual_data_len = num_output_samples * sample_size_in_bytes -* -*/ -ar_result_t rs_drv_job_process(rs_drv_handle_t rs_drv_h, rs_drv_buflist_t* in_buflist_ptr, rs_drv_buflist_t* out_buflist_ptr); - -/** -* This function is for processing the input/output data -* -* @param[in] rs_drv_h - input handle. -* @return Success/failure of sending this frame job. -* Note: -* This function is used for fast farward/rewind cases -* The frame sent via rs_drv_job_process() is treated as the first frame after rs_drv_job_reset() called. -*/ -ar_result_t rs_drv_job_reset(rs_drv_handle_t rs_drv_h); - -/** -* This function is for uninit this job -* -* @param[in] rs_drv_h - input handle -* @return void -*/ -ar_result_t rs_drv_job_close(rs_drv_handle_t rs_drv_h); - -/** -* HW Resampler driver extension IOCtl function -* -* @param[in] rs_drv_h - input handle -* @param[in] prop_info_ptr point to property info structure -* @return Success/failure IOCtl call. -*/ -ar_result_t rs_drv_ioctl(rs_drv_handle_t rs_drv_h, rs_drv_ioctl_prop_info_t *prop_info_ptr); - -// -//async call APIs -// -/** - * The following define is for HW Interrupt triger event type - */ - -typedef enum _rs_drv_job_event_type -{ - RS_DRV_JOB_EVEN_INVALID = -1, - RS_DRV_JOB_EVEN_JOB_DONE = 1, - RS_DRV_JOB_EVEN_JOB_ERROR = 2, -} rs_drv_job_event_type; - -/** \brief HW Resampler driver callback function type */ -typedef void (*rs_drv_job_callback_func) -( - rs_drv_handle_t rs_drv_h, - /** Callback event type */ - rs_drv_job_event_type event, - /** Callback data type */ - void *cb_data_ptr -); - - -/** -* HW Resampler driver extension IOCtl property call - job event notification struct.define -*/ -typedef struct -{ - /** Event type, not used now*/ - rs_drv_job_event_type event; - /** Callback function */ - rs_drv_job_callback_func job_event_callback_func; - /** User defined context */ - void *user_ctx_ptr; -} rs_drv_ioctl_prop_job_event_notification_t; - - -/** -* This function is for getting the output data and how many input data consumed -* This API is just used for async call case -* -* @param[in] rs_drv_h - input handle. -* @param[in] in_buflist_ptr - pointer to rs_drv_buflist. -* @param[in] out_buflist_ptr - pointer to rs_drv_buflist. -* @return Success/failure of sending this frame job. -*/ -ar_result_t rs_drv_job_process_done(rs_drv_handle_t rs_drv_h, rs_drv_buflist_t* in_buflist_ptr, rs_drv_buflist_t* out_buflist_ptr); - -#endif - -#ifdef __cplusplus -} -#endif //__cplusplus - - diff --git a/modules/processing/resamplers/iir_resampler/api/iir_resampler_api.h b/modules/processing/resamplers/iir_resampler/api/iir_resampler_api.h deleted file mode 100644 index e1460e78..00000000 --- a/modules/processing/resamplers/iir_resampler/api/iir_resampler_api.h +++ /dev/null @@ -1,176 +0,0 @@ -/*========================================================================*/ -/** -@file iir_resampler_api.h - -@brief iir_resampler_api.h: This file contains the Module Id, Param IDs and configuration - structures exposed by the IIR Resampler Module. -*/ -/*======================================================================= - Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. - SPDX-License-Identifier: BSD-3-Clause-Clear -=========================================================================*/ - -#ifndef IIR_RESAMPLER_API_H -#define IIR_RESAMPLER_API_H - -/*------------------------------------------------------------------------ - * Include files - * -----------------------------------------------------------------------*/ -#include "module_cmn_api.h" - - /** - @h2xml_title1 {IIR RESAMPLER API} - @h2xml_title_agile_rev {IIR RESAMPLER API} - @h2xml_title_date {July 31, 2018} - */ - -/*============================================================================== - Constants -==============================================================================*/ -/** @ingroup ar_spf_mod_iir_resam_macros - Size of the stack for the IIR Resampler module. */ -#define IIR_RS_STACK_SIZE 1024 - -/** @ingroup ar_spf_mod_iir_resam_macros - Maximum ports for the IIR Resampler module. */ -#define IIR_RS_MAX_PORTS 1 - -/** @ingroup ar_spf_mod_iir_resam_macros - ID of the IIR RESAMPLER module. - - This module converts audio sampling rate. Uses IIR filters to do it. - Therefore it renders output with a lower Delay compared to FIR. - - @subhead4{Supported input sample rates} - - 8000 Hz - - 16000 Hz - - 24000 Hz - - 32000 Hz - - 48000 Hz - - @subhead4{Supported parameter IDs} - - #PARAM_ID_IIR_RESAMPLER_OUT_CFG @lstsp1 - - #PARAM_ID_IIR_RESAMPELR_VERSION - - @subhead4{Supported input media format ID} - - Data Format : FIXED_POINT @lstsp1 - - fmt_id : Don't care @lstsp1 - - Sample Rates : 8000, 16000, 24000, 32000, 48000 (Hz) @lstsp1 - - Number of channels : 1 to 128 (for certain products this module supports only 32 channels) @lstsp1 - - Channel type : 0 to 128 @lstsp1 - - Bits per sample : 16 @lstsp1 - - Q format : 15, 27, 31 @lstsp1 - - Interleaving : de-interleaved unpacked @lstsp1 - - Signed/unsigned : Don't care - */ -#define MODULE_ID_IIR_RESAMPLER 0x07001018 -/** - @h2xmlm_module {"MODULE_ID_IIR_RESAMPLER", - MODULE_ID_IIR_RESAMPLER} - @h2xmlm_displayName {"IIR Resampler"} - @h2xmlm_modSearchKeys{resampler, Audio, Voice} - @h2xmlm_description {ID of the IIR RESAMPLER module.\n - - -This module converts audio sampling rate. Uses IIR filters to do it. - Therefore it renders output with a lower Delay compared to FIR.\n - - Input Sample Rates Supported: 8000, 16000, 24000, 32000, 48000 (Hz) \n - - This module supports the following parameter IDs\n - - #PARAM_ID_IIR_RESAMPLER_OUT_CFG\n - - #PARAM_ID_IIR_RESAMPELR_VERSION\n - - * - Supported Input Media Format: \n - * - Data Format : FIXED_POINT \n - * - fmt_id : Don't care\n - * - Sample Rates : 8000, 16000, 24000, 32000, 48000 (Hz)\n - * - Number of channels : 1 to 128 (for certain products this module supports only 32 channels)\n - * - Channel type : 0 to 128\n - * - Bits per sample : 16\n - * - Q format : 15, 27, 31\n - * - Interleaving : de-interleaved unpacked\n - * - Signed/unsigned : Don't care} - - @h2xmlm_dataMaxInputPorts {IIR_RS_MAX_PORTS} - @h2xmlm_dataInputPorts {IN=2} - @h2xmlm_dataMaxOutputPorts {IIR_RS_MAX_PORTS} - @h2xmlm_dataOutputPorts {OUT=1} - @h2xmlm_supportedContTypes {APM_CONTAINER_TYPE_SC, APM_CONTAINER_TYPE_GC} - @h2xmlm_isOffloadable {true} - @h2xmlm_stackSize {IIR_RS_STACK_SIZE} - @h2xmlm_ToolPolicy {Calibration} - - @{ <-- Start of the Module --> -*/ -/*------------------------------------------------------------------------ - * Macros, Defines, Type declarations - * -----------------------------------------------------------------------*/ - -/** @ingroup ar_spf_mod_iir_resam_macros - Set param for sending output sample rate. - IIR Resampler will allocate channel memory and configure the algorithm - with this.*/ -#define PARAM_ID_IIR_RESAMPLER_OUT_CFG 0x08001033 -typedef struct param_id_iir_resampler_out_cfg_t param_id_iir_resampler_out_cfg_t; - -/** @h2xmlp_parameter {"PARAM_ID_IIR_RESAMPLER_OUT_CFG", PARAM_ID_IIR_RESAMPLER_OUT_CFG} - @h2xmlp_description {Specifies the output sample rate.IIR Resampler will allocate channel memory and - configure the algorithm with this.} - @h2xmlp_toolPolicy {Calibration; RTC } */ - -/** @ingroup ar_spf_mod_iir_resam_macros - Specifies the output sample rate.IIR Resampler will allocate channel memory and - configure the algorithm with this. */ - -#include "spf_begin_pack.h" -struct param_id_iir_resampler_out_cfg_t -{ - int32_t sampling_rate; - /**< Specifies the output sample rate; 0 is invalid. */ - - /**< @h2xmle_description {Specifies the output sample rate; 0 is invalid} - @h2xmle_rangeList {"PARAM_VAL_NATIVE"=-1; - "PARAM_VAL_UNSET"=-2; - "8 kHz"= 8000; - "16 kHz"=16000; - "24 kHz"=24000; - "32 kHz"=32000; - "48 kHz"=48000; - "96 kHz"=96000; - "192 kHz"=192000; - "384 kHz"=384000} - @h2xmle_default {-1} */ -} -#include "spf_end_pack.h" -; - - -/** @ingroup ar_spf_mod_iir_resam_macros - IIR Resampler module version. */ -#define PARAM_ID_IIR_RESAMPELR_VERSION 0x08001319 -typedef struct iir_resampler_lib_version_param_t iir_resampler_lib_version_param_t; - -/** @h2xmlp_parameter {"PARAM_ID_IIR_RESAMPELR_VERSION", PARAM_ID_IIR_RESAMPELR_VERSION} - @h2xmlp_description {The current version of the library is returned} - @h2xmlp_toolPolicy {RTC_READONLY} */ - -/** @ingroup ar_spf_mod_iir_resam_macros - The current version of the library is returned. */ - -#include "spf_begin_pack.h" -struct iir_resampler_lib_version_param_t -{ - uint32_t lib_version_lsb; - /**< Lower 32 bits of the 64-bit library version number. */ - - /**< @h2xmle_description {Lower 32 bits of the 64-bit library version number} */ - - uint32_t lib_version_msb; - /**< Higher 32 bits of the 64-bit library version number. */ - - /**< @h2xmle_description {Higher 32 bits of the 64-bit library version number} */ -} - -#include "spf_end_pack.h" -; - -/** @} <-- End of the Module -->*/ -#endif /* IIR_RESAMPLER_API_H */ diff --git a/modules/processing/resamplers/iir_resampler/bin/arm/libiir_resampler.a b/modules/processing/resamplers/iir_resampler/bin/arm/libiir_resampler.a deleted file mode 100644 index 84c93cddffae3cbeb659912b9a275e4f88d21f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248210 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