google_rtc_aec: enable building as an llext module

Add support for LLEXT building to google_rtc_audio_processing. Only
building in a stub configuration is supported, linking with a
prebuilt library should be implemented separately.

Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
This commit is contained in:
Guennadi Liakhovetski 2024-09-06 17:03:32 +02:00 committed by Kai Vehmanen
parent 1b38612460
commit 99a35a1798
8 changed files with 82 additions and 34 deletions

View File

@ -18,3 +18,4 @@ CONFIG_COMP_DCBLOCK=m
CONFIG_COMP_CROSSOVER=m
CONFIG_COMP_MULTIBAND_DRC=m
CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING=m
CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING=m

View File

@ -18,3 +18,4 @@ CONFIG_COMP_DCBLOCK=m
CONFIG_COMP_CROSSOVER=m
CONFIG_COMP_MULTIBAND_DRC=m
CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING=m
CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING=m

View File

@ -13,7 +13,7 @@ config COMP_GOOGLE_HOTWORD_DETECT
detector.
config COMP_GOOGLE_RTC_AUDIO_PROCESSING
bool "Google Real Time Communication Audio processing"
tristate "Google Real Time Communication Audio processing"
select COMP_BLOB
default n
help
@ -26,7 +26,6 @@ config COMP_GOOGLE_RTC_AUDIO_PROCESSING
if COMP_GOOGLE_RTC_AUDIO_PROCESSING
config COMP_GOOGLE_RTC_AUDIO_PROCESSING_SAMPLE_RATE_HZ
depends on COMP_GOOGLE_RTC_AUDIO_PROCESSING
int "Sample rate for Google Real Time Communication Audio processing"
default 48000
help
@ -55,7 +54,6 @@ config COMP_GOOGLE_RTC_AUDIO_REFERENCE_CHANNEL_MAX
are ignored
config COMP_GOOGLE_RTC_AUDIO_PROCESSING_MEMORY_BUFFER_SIZE_KB
depends on COMP_GOOGLE_RTC_AUDIO_PROCESSING
int "Memory buffer size for Google Real Time Communication Audio processing"
default 200
help
@ -63,7 +61,6 @@ config COMP_GOOGLE_RTC_AUDIO_PROCESSING_MEMORY_BUFFER_SIZE_KB
communication audio processing.
config COMP_GOOGLE_RTC_AUDIO_PROCESSING_ECHO_PATH_DELAY_MS
depends on COMP_GOOGLE_RTC_AUDIO_PROCESSING
int "Echo path delay for Google Real Time Communication Audio processing"
default 44
help
@ -71,7 +68,6 @@ config COMP_GOOGLE_RTC_AUDIO_PROCESSING_ECHO_PATH_DELAY_MS
audio processing.
config COMP_GOOGLE_RTC_AUDIO_PROCESSING_MIC_HEADROOM_LINEAR
depends on COMP_GOOGLE_RTC_AUDIO_PROCESSING
int "Microphone headroom for Google Real Time Communication Audio processing"
default 4
help
@ -81,7 +77,6 @@ config COMP_GOOGLE_RTC_AUDIO_PROCESSING_MIC_HEADROOM_LINEAR
config GOOGLE_RTC_AUDIO_PROCESSING_MOCK
bool "Google Real Time Communication Audio processing mock"
default y if COMP_STUBS
depends on COMP_GOOGLE_RTC_AUDIO_PROCESSING
help
Mock Google real-time communication audio processing.
It allows for compilation check and basic audio flow checking.

View File

@ -856,3 +856,23 @@ DECLARE_MODULE_ADAPTER(google_rtc_audio_processing_interface,
google_rtc_audio_processing_uuid, google_rtc_audio_processing_tr);
SOF_MODULE_INIT(google_rtc_audio_processing,
sys_comp_module_google_rtc_audio_processing_interface_init);
#if CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING_MODULE
/* modular: llext dynamic link */
#include <module/module/api_ver.h>
#include <module/module/llext.h>
#include <rimage/sof/user/manifest.h>
#define UUID_GOOGLE_RTC_AEC 0xA6, 0xA0, 0x80, 0xB7, 0x9F, 0x26, 0x6F, 0x46, 0x77, 0xB4, \
0x23, 0xDF, 0xA0, 0x5A, 0xF7, 0x58
SOF_LLEXT_MOD_ENTRY(google_rtc_audio_processing, &google_rtc_audio_processing_interface);
static const struct sof_man_module_manifest mod_manifest __section(".module") __used =
SOF_LLEXT_MODULE_MANIFEST("RTC_AEC", google_rtc_audio_processing_llext_entry,
7, UUID_GOOGLE_RTC_AEC, 1);
SOF_LLEXT_BUILDINFO;
#endif

View File

@ -1,19 +1,23 @@
#ifndef LOAD_TYPE
#define LOAD_TYPE "1"
#endif
[[module.entry]]
name = "RTC_AEC"
uuid = "B780A0A6-269F-466F-B477-23DFA05AF758"
REM # bit #i = 1 means core #i is allowed.
affinity_mask = "0x7"
instance_count = "1"
domain_types = "1"
load_type = "1"
module_type = "10"
uuid = "B780A0A6-269F-466F-B477-23DFA05AF758"
REM # bit #i = 1 means core #i is allowed.
affinity_mask = "0x7"
instance_count = "1"
domain_types = "1"
load_type = LOAD_TYPE
module_type = "10"
init_config = "1"
auto_start = "0"
sched_caps = [1, 0x00008000]
auto_start = "0"
sched_caps = [1, 0x00008000]
REM # pin = [dir, type, sample rate, size, container, channel-cfg]
pin = [0, 0, 0x8, 0x2, 0x2, 0x1,
0, 0, 0x8, 0x2, 0x2, 0x4,
1, 0, 0x8, 0x2, 0x2, 0x1]
REM # pin = [dir, type, sample rate, size, container, channel-cfg]
pin = [0, 0, 0x8, 0x2, 0x2, 0x1,
0, 0, 0x8, 0x2, 0x2, 0x4,
1, 0, 0x8, 0x2, 0x2, 0x1]
index = __COUNTER__

View File

@ -0,0 +1,11 @@
if(CONFIG_GOOGLE_RTC_AUDIO_PROCESSING_MOCK)
sof_llext_build("google_rtc_audio_processing"
SOURCES ../google_rtc_audio_processing.c
../google_rtc_audio_processing_mock.c
)
target_include_directories(google_rtc_audio_processing_llext_lib PRIVATE
"${sof_top_dir}/third_party/include"
)
else()
message(FATAL_ERROR "Add library linking support in src/audio/google/llext/CMakeLists.txt")
endif()

View File

@ -0,0 +1,10 @@
/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright(c) 2021 Intel Corporation. All rights reserved.
*/
#include <tools/rimage/config/platform.toml>
#define LOAD_TYPE "2"
#include "../google_rtc_audio_processing.toml"
[module]
count = __COUNTER__

View File

@ -887,23 +887,29 @@ elseif(CONFIG_COMP_MULTIBAND_DRC)
)
endif()
zephyr_library_sources_ifdef(CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING
${SOF_AUDIO_PATH}/google/google_rtc_audio_processing.c
)
if(CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING STREQUAL "m")
add_subdirectory(${SOF_AUDIO_PATH}/google/llext_rtc
${PROJECT_BINARY_DIR}/google_rtc_audio_processing_llext)
add_dependencies(app google_rtc_audio_processing)
elseif(CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING)
zephyr_library_sources(
${SOF_AUDIO_PATH}/google/google_rtc_audio_processing.c
)
zephyr_library_sources_ifdef(CONFIG_GOOGLE_RTC_AUDIO_PROCESSING_MOCK
${SOF_AUDIO_PATH}/google/google_rtc_audio_processing_mock.c
)
zephyr_library_sources_ifdef(CONFIG_GOOGLE_RTC_AUDIO_PROCESSING_MOCK
${SOF_AUDIO_PATH}/google/google_rtc_audio_processing_mock.c
)
if(CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING AND NOT CONFIG_GOOGLE_RTC_AUDIO_PROCESSING_MOCK)
zephyr_include_directories(../third_party/include)
target_link_directories(SOF INTERFACE ../third_party/lib)
target_link_libraries(SOF INTERFACE google_rtc_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_RTC_AUDIO_PROCESSING_MOCK)
zephyr_include_directories(../third_party/include)
target_link_directories(SOF INTERFACE ../third_party/lib)
target_link_libraries(SOF INTERFACE google_rtc_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()
if(CONFIG_COMP_GOOGLE_CTC_AUDIO_PROCESSING STREQUAL "m")