cmake_minimum_required(VERSION 3.8) project(aml_audio_hal VERSION 2.0) include(GNUInstallDirs) if (DEFINED AML_BUILD_DIR) message("AML_BUILD_DIR is defined.") else() message("AML_BUILD_DIR is not defined, set default.") set(AML_BUILD_DIR "./audio_hal") endif() execute_process(COMMAND sh version_config.sh ${AML_BUILD_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) option(DISABLE_SERVER "rm audio server" OFF) option(USE_DTV "Compile with DTV option" OFF) option(NO_USE_CAP "Don't support audio capture" OFF) option(USE_SC2 "Current platform is sc2" OFF) option(NO_USE_CAP_MUTE_HDMI "Don't support audio capture mute for HDMI INPUT" OFF) option(USE_APP_MIXING "Support appsound mixing" ON) option(USE_DIAG_LOG "Support diagnostic logging for RDK" OFF) option(USE_MEDIA_INFO "Support media info API reporting" OFF) option(USE_MSYNC "Compile with MSYNC option" ON) option(USE_DTS_VX4 "Use DTS VX4" ON) option(ANDROID_BUILD "Build for android" OFF) option(L_PROJECT "Build for L Project" OFF) option(SUPPORT_EXTERNAL_OUTPUT "support external audio output" OFF) if(ANDROID_BUILD) add_definitions(-DANDROID_BUILD) add_subdirectory("audio_client") else() #add_subdirectory("audio_codec/libvorbis") add_subdirectory("audio_codec/libdts") add_subdirectory("audio_codec/libdcv") #add_subdirectory("audio_codec/libmpegh") add_subdirectory("utils/test") endif() add_subdirectory("decoder/libms12") add_definitions(-DMS12_V24_ENABLE) #For DTS VX version selected if(USE_DTS_VX4) message("Use DTS VX4") add_definitions(-DDTS_VX_V4_ENABLE) endif() if(DISABLE_SERVER) add_definitions(-DNO_SERVER) endif() if(SUPPORT_EXTERNAL_OUTPUT) add_definitions(-DSUPPORT_EXTERNAL_OUTPUT) endif() if(USE_DTV) list(APPEND DTV_FILES input/dtv_patch.c) list(APPEND DTV_FILES input/dtv_patch_utils.c) list(APPEND DVB_AUDIO_INC ./dtv_audio_utils/dmxwrap/MultiHwDemux) list(APPEND DTV_FILES dtv_audio_utils/dmxwrap/AmDemuxWrapper.cpp) list(APPEND DTV_FILES dtv_audio_utils/dmxwrap/MultiHwDemux/AmHwMultiDemuxWrapper.cpp) list(APPEND DTV_FILES dtv_audio_utils/dmxwrap/MultiHwDemux/AmLinuxDvb.cpp) list(APPEND DTV_FILES dtv_audio_utils/dmxwrap/MultiHwDemux/AmDmx.cpp) list(APPEND DTV_FILES dtv_audio_utils/audio_data_read/dmx_audio_es.cpp) list(APPEND DTV_FILES dtv_audio_utils/audio_data_read/uio_audio_read.c) list(APPEND DVB_AUDIO_INC dtv_audio_utils) list(APPEND DVB_AUDIO_INC dtv_audio_utils/include) list(APPEND DVB_AUDIO_INC dtv_audio_utils/dmxwrap) list(APPEND DVB_AUDIO_INC dtv_audio_utils/dmxwrap/MultiHwDemux) list(APPEND DVB_AUDIO_INC dtv_audio_utils/audio_read_api) add_definitions(-DUSE_DTV) endif() if(USE_APP_MIXING) add_definitions(-DUSE_APP_MIXING) endif() if(USE_DIAG_LOG) add_definitions(-DDIAG_LOG) endif() option(USE_EQ_DRC "Compile with EQ/DRC" OFF) if(USE_EQ_DRC) list(APPEND EQ_DRC_FILES aml_aq_hw/audio_eq_drc_compensation.c aml_aq_hw/audio_eq_drc_parser.c ) add_definitions(-DUSE_EQ_DRC) endif() if(USE_MEDIA_INFO) add_definitions(-DUSE_MEDIAINFO) endif() if(USE_MSYNC) add_definitions(-DUSE_MSYNC) endif() ############################################# # libaudio_hal ############################################# list(APPEND AUDIOHAL_FILES decoder/aml_aac_dec_api.c decoder/aml_ddp_dec_api.c decoder/aml_dec_api.c decoder/aml_dtshd_dec_api.c decoder/aml_dtsx_dec_api.c decoder/aml_mpeg_dec_api.c decoder/aml_pcm_dec_api.c decoder/aml_adpcm_dec_api.c decoder/aml_flac_dec_api.c decoder/aml_vorbis_dec_api.c decoder/aml_opus_dec_api.c decoder/aml_mpegh_dec_api.c decoder/aml_iamf_dec_api.c utils/parser/ac3_parser_utils.c utils/parser/aml_ac3_parser.c utils/parser/aml_audio_mpegparser.c utils/parser/aml_audio_ac3parser.c utils/parser/aml_audio_ac4parser.c utils/parser/aml_audio_bitsparser.c utils/parser/aml_audio_matparser.c utils/parser/aml_audio_heaacparser.c utils/parser/aml_dts_audio_parser.c utils/parser/aml_audio_mpeghparser.c utils/parser/aml_audio_parser.c utils/parser/aml_mpegh_uimanager.c utils/resampler/aml_audio_resample_manager.c utils/resampler/aml_audio_resampler.c utils/resampler/aml_resample_wrap.cpp utils/resampler/audio_android_resample_api.c utils/resampler/audio_simple_resample_api.c audio_hal/alsa_config_parameters.c audio_hal/alsa_manager.c audio_hal/external_output_manager.c audio_hal/external_output_handle.c audio_hal/aml_audio_delay.c audio_hal/aml_audio_ease.c audio_hal/amlAudioMixer.c audio_hal/aml_audio_stream.c audio_hal/aml_audio_spdifout.c audio_hal/aml_audio_timer.c input/tv_patch_avsync.c input/tv_patch_format_parser.c audio_hal/audio_hw.c audio_hal/audio_hw_resource_mgr.c audio_hal/audio_hw_ms12_common.c audio_hal/audio_hw_ms12_v2.c audio_hal/aml_audio_ms12_sync.c audio_hal/audio_hw_profile.c audio_hal/audio_route.c audio_hal/audio_hwsync.c audio_hal/audio_hw_utils.c audio_hal/audio_port.c audio_hal/audio_virtual_buf.c audio_hal/dolby_lib_api.c audio_hal/hw_avsync.c audio_hal/spdif_encoder_api.c audio_hal/aml_audio_ms12_render.c audio_hal/aml_audio_nonms12_render.c audio_hal/audio_mediasync.c audio_hal/audio_mediasync_wrap.c audio_hal/aml_audio_output.c audio_hal/audio_ms12_continuous_standby.c audio_hal/audio_mpegh.c audio_hal/audio_llp.c audio_hal/aml_audio_command_worker.c audio_hal/aml_audio_command_worker_handler.c input/hdmirx_utils.c input/dtv_patch_hal_avsync.c input/tv_patch.c input/tv_patch_ctrl.c input/component_picture_mode.c input/aml_noise_gate.c input/device_patch.c input/tv_private_object.c input/dtv_private_object.c input/device_patch_mgr.c audio_hal/aml_config_parser.c audio_hal/aml_config_data.c audio_hal/earc_utils.c audio_hal/hal_clipmeta.c audio_hal/aml_audio_scaletempo.c audio_hal/karaoke_manager.c audio_hal/aml_capture_output.c audio_hal/audio_parser.c audio_hal/aml_hwmixer_handle.c audio_hal/aml_hwmixer_manager.c audio_hal/aml_audio_port.c audio_hal/aml_audio_unit.c audio_hal/deep_buffer_unit.c audio_hal/mixer_out_unit.c audio_hal/aml_audio_input.c audio_hal/aml_policy.c utils/cJSON/cJSON.c utils/aml_hw_mixer.c utils/alsa_device_parser.c utils/aml_alsa_mixer.c utils/aml_data_utils.c utils/aml_dump_debug.c utils/aml_malloc_debug.c utils/aml_ringbuffer.c utils/aml_volume_utils.c utils/aml_audio_property.c utils/aml_configs/aml_conf_loader.c utils/aml_configs/aml_conf_parser.c utils/aml_audio_mute.c utils/audio_data_process.c utils/tinyalsa/pcm.c utils/tinyalsa/mixer.c utils/tinyalsa/limits.c utils/tinyalsa/mixer_hw.c utils/tinyalsa/mixer_plugin.c utils/tinyalsa/pcm_hw.c utils/tinyalsa/pcm_plugin.c utils/tinyalsa/snd_card_plugin.c utils/channels.c utils/aml_audio_spdifdec.c utils/aml_avsync_stub.c utils/aml_reverb.c utils/format.c utils/aml_audio_uevent.c utils/dictionary.c utils/iniparser.c utils/primitives.c utils/SPDIFEncoderAD.cpp utils/spdif/AC3FrameScanner.cpp utils/spdif/BitFieldParser.cpp utils/spdif/DTSFrameScanner.cpp utils/spdif/FrameScanner.cpp utils/spdif/MatFrameScanner.cpp utils/spdif/SPDIFEncoder.cpp utils/libaudioprocessing/AudioResampler.cpp utils/libaudioprocessing/AudioResamplerSinc.cpp utils/libaudioprocessing/AudioResamplerCubic.cpp utils/libaudioprocessing/AudioResamplerDyn.cpp utils/mpegh_iec/iec61937_dec.cpp utils/mpegh_iec/iec61937_enc.cpp utils/mpegh_iec/bitbuffer.cpp utils/mpegh_iec/EarconPacketWriter_lib.cpp utils/aml_audio_limiter.c vendor_process/audio_post_process.c vendor_process/audio_effect_if.c vendor_process/aml_audio_aec.c vendor_process/AI/ai_core/src/ai_audio_core.cpp vendor_process/AI/ai_core/src/ai_audio_aiaq.cpp vendor_process/AI/ai_core/src/ai_audio_enhancement.cpp vendor_process/AI/ai_core/src/ai_audio_vocal_isolate.cpp vendor_process/AI/ai_core/src/ai_audio_loudness.cpp vendor_process/AI/ai_core/src/ai_audio_aloop_record.cpp vendor_process/AI/wrappers/audio_aiaq/aml_audio_aiaq.c vendor_process/AI/wrappers/audio_aloop_record/aml_audio_aloop_record.c vendor_process/AI/wrappers/audio_enhancement/aml_audio_enhancement.c vendor_process/AI/wrappers/audio_loudness/aml_audio_loudness.c vendor_process/AI/wrappers/audio_vocal_isolate/aml_audio_vocal_isolate.c encoder/aml_aac_enc_api.c encoder/aml_enc_api.c) if(L_PROJECT) add_definitions(-DL_PROJECT) message("build for L_PROJECT") list(APPEND AUDIOHAL_FILES projects/audio_controls.c projects/audio_controls_utils.c projects/audio_controls_proc.c ) endif() add_library(audio_hal SHARED ${AUDIOHAL_FILES} ${DTV_FILES} ${EQ_DRC_FILES} ) add_definitions(-DNDEBUG -DREPLACE_OUTPUT_BUFFER_WITH_CALLBACK -DDOLBY_MS12_ENABLE -DBUILD_LINUX) if(NO_USE_CAP) add_definitions(-DNO_AUDIO_CAP) if(NO_USE_CAP_MUTE_HDMI) add_definitions(-DNO_AUDIO_CAP_MUTE_HDMI) endif() endif() message(WARNING "Audio_hal CMAKE_SYSTEM_PROCESSOR is ${CMAKE_SYSTEM_PROCESSOR}") if (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)") set(PREBUILD_STATIC_LIBS ${CMAKE_SOURCE_DIR}/aml_aq_hw/lib_aml_ng.a ${CMAKE_SOURCE_DIR}/aml_aq_hw/Amlogic_DRC_Param_Generator.a ${CMAKE_SOURCE_DIR}/aml_aq_hw/Amlogic_EQ_Param_Generator.a) else () set(PREBUILD_STATIC_LIBS ${CMAKE_SOURCE_DIR}/aml_aq_hw/lib_aml_ng64.a ${CMAKE_SOURCE_DIR}/aml_aq_hw/Amlogic_DRC_Param_Generator64.a ${CMAKE_SOURCE_DIR}/aml_aq_hw/Amlogic_EQ_Param_Generator64.a) endif () set_target_properties(audio_hal PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 2) target_include_directories(audio_hal PRIVATE ./include ../hal_audio_service/include ./utils/resampler/include ./utils/resampler ./decoder ./utils/parser/include ./utils/parser ./utils/include ./utils/include/spdif ./utils/tinyalsa/include ./utils/cJSON ./utils/mpegh_iec/ ./utils/mpegh_iec/include ./vendor_process/include ./vendor_process/AI/ai_core/include ./vendor_process/AI/iva_alg_interface ./vendor_process/AI/wrappers/include ./input/include ./aml_aq_hw ./dtv_audio_utils/audio_read_api ./audio_hal ./encoder ${AML_BUILD_DIR}) if(L_PROJECT) target_include_directories(audio_hal PRIVATE ./projects) endif() if(USE_DTV) target_include_directories(audio_hal PRIVATE ${DTV_INC} ${DVB_AUDIO_INC}) target_link_libraries(audio_hal ${DTV_LIBS} ${DVB_AUDIO_LIBS}) endif() if(SUPPORT_EXTERNAL_OUTPUT) target_link_libraries(audio_hal ms12v2 -lasound) endif() target_include_directories(audio_hal PRIVATE ./decoder/libms12/include) if(USE_EQ_DRC) target_include_directories(audio_hal PRIVATE ./include/aml_aq_hw ./aml_aq_hw) target_link_libraries(audio_hal ${PREBUILD_STATIC_LIBS}) target_compile_options(audio_hal PRIVATE -DAML_EQ_DRC) endif() if(USE_MEDIA_INFO) target_link_libraries(audio_hal -lamlminfo) endif() if(USE_MSYNC) target_link_libraries(audio_hal -lamlavsync) else() target_link_libraries(audio_hal) endif() if(USE_SC2) add_definitions(-DDVB_AUDIO_SC2) endif() if(ANDROID_BUILD) target_compile_options(audio_hal PRIVATE -D_GNU_SOURCE -DTV_AUDIO_OUTPUT -O2 -Werror -Werror=return-type -Wno-error=gnu-variable-sized-type-not-at-end -Wno-error=incompatible-pointer-types-discards-qualifiers -Wno-error=implicit-const-int-float-conversion -Wno-deprecated-declarations -Wno-error=shift-negative-value -funwind-tables -fasynchronous-unwind-tables -fPIC -g) target_include_directories(audio_hal PRIVATE ${PROJECT_SOURCE_DIR}/../android_prebuild/usr/include/) target_link_libraries(audio_hal -L${CMAKE_INSTALL_PREFIX}/lib -L${PROJECT_SOURCE_DIR}/../android_prebuild/usr/lib -lms12v2 -lcutils -llog -lexpat -lstdc++ -ldl -Wl,-z,defs -Wl,-soname,libaudio_hal.so) install(TARGETS audio_hal LIBRARY DESTINATION "lib") install(DIRECTORY include include/hardware include/system DESTINATION include FILES_MATCHING PATTERN "*.h") else() target_compile_options(audio_hal PRIVATE -D_GNU_SOURCE -DTV_AUDIO_OUTPUT -Wall -Werror -Werror=return-type -Werror=maybe-uninitialized -Wno-error=stringop-truncation -Wno-error=enum-compare -Wno-error=unused-but-set-variable -Wno-error=class-memaccess -Wno-error=discarded-qualifiers -Wno-deprecated-declarations -funwind-tables -fasynchronous-unwind-tables -fPIC -g) target_link_libraries(audio_hal ms12v2 -lcutils -lamaudioutils -llog -lexpat -lpthread -ldl -lstdc++ -lrt -Wl,-z,defs) install(TARGETS audio_hal LIBRARY DESTINATION "lib") install(FILES audio_hal/mixer_paths.xml DESTINATION /etc) install(DIRECTORY include include/hardware include/system DESTINATION include FILES_MATCHING PATTERN "*.h") if (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)") install(PROGRAMS aml_aq_hw/Amlogic_DRC_Param_Generator aml_aq_hw/Amlogic_EQ_Param_Generator DESTINATION /usr/bin) endif() endif()