diff --git a/app/configs/lnl/modules.conf b/app/configs/lnl/modules.conf index 8192000ae..2d94361b1 100644 --- a/app/configs/lnl/modules.conf +++ b/app/configs/lnl/modules.conf @@ -8,3 +8,4 @@ CONFIG_COMP_SRC=m CONFIG_COMP_ASRC=m CONFIG_COMP_RTNR=m CONFIG_COMP_VOLUME=m +CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING=m diff --git a/app/configs/mtl/modules.conf b/app/configs/mtl/modules.conf index 8192000ae..2d94361b1 100644 --- a/app/configs/mtl/modules.conf +++ b/app/configs/mtl/modules.conf @@ -8,3 +8,4 @@ CONFIG_COMP_SRC=m CONFIG_COMP_ASRC=m CONFIG_COMP_RTNR=m CONFIG_COMP_VOLUME=m +CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING=m diff --git a/src/audio/google/Kconfig b/src/audio/google/Kconfig index 336817112..c6ecccd0a 100644 --- a/src/audio/google/Kconfig +++ b/src/audio/google/Kconfig @@ -89,7 +89,7 @@ config GOOGLE_RTC_AUDIO_PROCESSING_MOCK endif # COMP_GOOGLE_RTC_AUDIO_PROCESSING config COMP_GOOGLE_CTC_AUDIO_PROCESSING - bool "Google Crosstalk Cancellation Audio processing" + tristate "Google Crosstalk Cancellation Audio processing" select COMP_BLOB select GOOGLE_CTC_AUDIO_PROCESSING_MOCK if COMP_STUBS select STATIC_INIT_GNU if ZEPHYR_SOF_MODULE diff --git a/src/audio/google/google_ctc_audio_processing.c b/src/audio/google/google_ctc_audio_processing.c index 68d384789..f02a7c2a5 100644 --- a/src/audio/google/google_ctc_audio_processing.c +++ b/src/audio/google/google_ctc_audio_processing.c @@ -348,7 +348,6 @@ static int ctc_prepare(struct processing_module *mod, struct google_ctc_audio_processing_comp_data *cd = module_get_private_data(mod); struct comp_dev *dev = mod->dev; struct comp_buffer *source; - enum sof_ipc_frame fmt; int num_channels; uint8_t *config; int config_size; @@ -459,3 +458,23 @@ DECLARE_MODULE_ADAPTER(google_ctc_audio_processing_interface, google_ctc_audio_processing_uuid, google_ctc_audio_processing_tr); SOF_MODULE_INIT(google_ctc_audio_processing, sys_comp_module_google_ctc_audio_processing_interface_init); + +#if CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING_MODULE +/* modular: llext dynamic link */ + +#include +#include +#include + +#define UUID_GOOGLE_CTC 0xBC, 0x1B, 0x0E, 0xBF, 0x6A, 0xDC, 0xFE, 0x45, 0x90, 0xBC, \ + 0x25, 0x54, 0xCB, 0x13, 0x7A, 0xB4 + +SOF_LLEXT_MOD_ENTRY(google_ctc_audio_processing, &google_ctc_audio_processing_interface); + +static const struct sof_man_module_manifest mod_manifest __section(".module") __used = + SOF_LLEXT_MODULE_MANIFEST("CTC", google_ctc_audio_processing_llext_entry, + 1, UUID_GOOGLE_CTC, 40); + +SOF_LLEXT_BUILDINFO; + +#endif diff --git a/src/audio/google/google_ctc_audio_processing.toml b/src/audio/google/google_ctc_audio_processing.toml index 849689dcc..b136273f0 100644 --- a/src/audio/google/google_ctc_audio_processing.toml +++ b/src/audio/google/google_ctc_audio_processing.toml @@ -1,3 +1,7 @@ +#ifndef LOAD_TYPE +#define LOAD_TYPE "0" +#endif + REM # CTC module config [[module.entry]] name = "CTC" @@ -5,7 +9,7 @@ affinity_mask = "0x1" instance_count = "40" domain_types = "0" - load_type = "0" + load_type = LOAD_TYPE module_type = "9" auto_start = "0" sched_caps = [1, 0x00008000] diff --git a/src/audio/google/google_ctc_audio_processing_mock.c b/src/audio/google/google_ctc_audio_processing_mock.c index 3828ce5b2..ea962aa3a 100644 --- a/src/audio/google/google_ctc_audio_processing_mock.c +++ b/src/audio/google/google_ctc_audio_processing_mock.c @@ -4,7 +4,6 @@ // // Author: Eddy Hsu #include "google_ctc_audio_processing.h" -#include "google_ctc_audio_processing_sof_message_reader.h" #include #include diff --git a/src/audio/google/llext_ctc/CMakeLists.txt b/src/audio/google/llext_ctc/CMakeLists.txt new file mode 100644 index 000000000..440e0fbe6 --- /dev/null +++ b/src/audio/google/llext_ctc/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (c) 2024 Intel Corporation. +# SPDX-License-Identifier: Apache-2.0 + +if(CONFIG_GOOGLE_CTC_AUDIO_PROCESSING_MOCK) +sof_llext_build("google_ctc_audio_processing" + SOURCES ../google_ctc_audio_processing.c + ../google_ctc_audio_processing_ipc4.c + ../google_ctc_audio_processing_mock.c +) +target_include_directories(google_ctc_audio_processing_llext_lib PRIVATE + "${sof_top_dir}/third_party/include" +) +else() +message(FATAL_ERROR "Add library linking support in src/audio/google/llext_ctc/CMakeLists.txt") +endif() diff --git a/src/audio/google/llext_ctc/llext.toml.h b/src/audio/google/llext_ctc/llext.toml.h new file mode 100644 index 000000000..242d5588e --- /dev/null +++ b/src/audio/google/llext_ctc/llext.toml.h @@ -0,0 +1,6 @@ +#include +#define LOAD_TYPE "2" +#include "../google_ctc_audio_processing.toml" + +[module] +count = __COUNTER__ diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index 715f9f0f8..5f59ee996 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -885,31 +885,30 @@ if(CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING AND NOT CONFIG_GOOGLE_RTC_AUDIO_PROCE target_link_libraries(SOF INTERFACE gcc) endif() -zephyr_library_sources_ifdef(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING - ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing.c -) +if(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING STREQUAL "m") + add_subdirectory(${SOF_AUDIO_PATH}/google/llext_ctc + ${PROJECT_BINARY_DIR}/google_ctc_audio_processing_llext) + add_dependencies(app google_ctc_audio_processing) +elseif(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING) + zephyr_library_sources( + ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing.c + ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing_${ipc_suffix}.c + ) -zephyr_library_sources_ifdef(CONFIG_GOOGLE_CTC_AUDIO_PROCESSING_MOCK - ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing_mock.c -) + zephyr_library_sources_ifdef(CONFIG_GOOGLE_CTC_AUDIO_PROCESSING_MOCK + ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing_mock.c + ) -if(CONFIG_IPC_MAJOR_3) - zephyr_library_sources_ifdef(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING - ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing_ipc3.c) -elseif(CONFIG_IPC_MAJOR_4) - zephyr_library_sources_ifdef(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING - ${SOF_AUDIO_PATH}/google/google_ctc_audio_processing_ipc4.c) -endif() - -if(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING AND NOT CONFIG_GOOGLE_CTC_AUDIO_PROCESSING_MOCK) - zephyr_include_directories(../third_party/include) - target_link_directories(SOF INTERFACE ../third_party/lib) - target_link_libraries(SOF INTERFACE google_ctc_audio_processing) - target_link_libraries(SOF INTERFACE c++) - target_link_libraries(SOF INTERFACE c++abi) - target_link_libraries(SOF INTERFACE m) - target_link_libraries(SOF INTERFACE c) - target_link_libraries(SOF INTERFACE gcc) + if(NOT CONFIG_GOOGLE_CTC_AUDIO_PROCESSING_MOCK) + zephyr_include_directories(../third_party/include) + target_link_directories(SOF INTERFACE ../third_party/lib) + target_link_libraries(SOF INTERFACE google_ctc_audio_processing) + target_link_libraries(SOF INTERFACE c++) + target_link_libraries(SOF INTERFACE c++abi) + target_link_libraries(SOF INTERFACE m) + target_link_libraries(SOF INTERFACE c) + target_link_libraries(SOF INTERFACE gcc) + endif() endif() zephyr_library_sources_ifdef(CONFIG_COMP_IGO_NR