From 8fbca0239c188d760f32eb2aa0d6df95862ffed4 Mon Sep 17 00:00:00 2001 From: David Lin Date: Tue, 11 Apr 2017 18:13:21 -0700 Subject: [PATCH] soundfx: add msm voice processing audio effects Bug: 36865903 Change-Id: I048c806cc676ecdb666d4d5a2d66e9ac8f60129d Signed-off-by: David Lin --- aosp_taimen.mk | 3 + audio_effects.conf | 331 ++++++++++++++++++ voice_processing/Android.mk | 32 ++ .../voice_processing_descriptors.c | 47 +++ 4 files changed, 413 insertions(+) create mode 100644 audio_effects.conf create mode 100644 voice_processing/Android.mk create mode 100644 voice_processing/voice_processing_descriptors.c diff --git a/aosp_taimen.mk b/aosp_taimen.mk index eacf83c..9a3bc45 100644 --- a/aosp_taimen.mk +++ b/aosp_taimen.mk @@ -27,6 +27,9 @@ PRODUCT_PACKAGES += \ Launcher3 \ WallpaperPicker +PRODUCT_COPY_FILES += \ + device/google/taimen/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf + PRODUCT_MANUFACTURER := Google PRODUCT_BRAND := Android PRODUCT_NAME := aosp_taimen diff --git a/audio_effects.conf b/audio_effects.conf new file mode 100644 index 0000000..ea6c1fb --- /dev/null +++ b/audio_effects.conf @@ -0,0 +1,331 @@ +# List of effect libraries to load. Each library element must contain a "path" element +# giving the full path of the library .so file. +# libraries { +# { +# path +# } +# } +libraries { + bundle { + path /system/lib/soundfx/libbundlewrapper.so + } + reverb { + path /system/lib/soundfx/libreverbwrapper.so + } + visualizer_sw { + path /system/lib/soundfx/libvisualizer.so + } + visualizer_hw { + path /vendor/lib/soundfx/libqcomvisualizer.so + } + downmix { + path /system/lib/soundfx/libdownmix.so + } + loudness_enhancer { + path /system/lib/soundfx/libldnhncr.so + } + proxy { + path /system/lib/soundfx/libeffectproxy.so + } + offload_bundle { + path /vendor/lib/soundfx/libqcompostprocbundle.so + } + audio_pre_processing { + path /vendor/lib/soundfx/libqcomvoiceprocessing.so + } + volume_listener { + path /vendor/lib/soundfx/libvolumelistener.so + } +} + +# Default pre-processing library. Add to audio_effect.conf "libraries" section if +# audio HAL implements support for default software audio pre-processing effects +# +# pre_processing { +# path /system/lib/soundfx/libaudiopreprocessing.so +# } + +# list of effects to load. Each effect element must contain a "library" and a "uuid" element. +# The value of the "library" element must correspond to the name of one library element in the +# "libraries" element. +# The name of the effect element is indicative, only the value of the "uuid" element +# designates the effect. +# The uuid is the implementation specific UUID as specified by the effect vendor. This is not the +# generic effect type UUID. +# effects { +# { +# library +# uuid +# } +# ... +# } + +effects { + +# additions for the proxy implementation +# Proxy implementation + #effectname { + #library proxy + #uuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + + # SW implemetation of the effect. Added as a node under the proxy to + # indicate this as a sub effect. + #libsw { + #library libSW + #uuid yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy + #} End of SW effect + + # HW implementation of the effect. Added as a node under the proxy to + # indicate this as a sub effect. + #libhw { + #library libHW + #uuid zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz + #}End of HW effect + #} End of effect proxy + + bassboost { + library proxy + uuid 14804144-a5ee-4d24-aa88-0002a5d5c51b + + libsw { + library bundle + uuid 8631f300-72e2-11df-b57e-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid 2c4a8c24-1581-487f-94f6-0002a5d5c51b + } + } + virtualizer { + library proxy + uuid d3467faa-acc7-4d34-acaf-0002a5d5c51b + + libsw { + library bundle + uuid 1d4033c0-8557-11df-9f2d-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid 509a4498-561a-4bea-b3b1-0002a5d5c51b + } + } + equalizer { + library proxy + uuid c8e70ecd-48ca-456e-8a4f-0002a5d5c51b + + libsw { + library bundle + uuid ce772f20-847d-11df-bb17-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid a0dac280-401c-11e3-9379-0002a5d5c51b + } + } + volume { + library bundle + uuid 119341a0-8469-11df-81f9-0002a5d5c51b + } + reverb_env_aux { + library proxy + uuid 48404ac9-d202-4ccc-bf84-0002a5d5c51b + + libsw { + library reverb + uuid 4a387fc0-8ab3-11df-8bad-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid 79a18026-18fd-4185-8233-0002a5d5c51b + } + } + reverb_env_ins { + library proxy + uuid b707403a-a1c1-4291-9573-0002a5d5c51b + + libsw { + library reverb + uuid c7a511a0-a3bb-11df-860e-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid eb64ea04-973b-43d2-8f5e-0002a5d5c51b + } + } + reverb_pre_aux { + library proxy + uuid 1b78f587-6d1c-422e-8b84-0002a5d5c51b + + libsw { + library reverb + uuid f29a1400-a3bb-11df-8ddc-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid 6987be09-b142-4b41-9056-0002a5d5c51b + } + } + reverb_pre_ins { + library proxy + uuid f3e178d2-ebcb-408e-8357-0002a5d5c51b + + libsw { + library reverb + uuid 172cdf00-a3bc-11df-a72f-0002a5d5c51b + } + + libhw { + library offload_bundle + uuid aa2bebf6-47cf-4613-9bca-0002a5d5c51b + } + } + visualizer { + library proxy + uuid 1d0a1a53-7d5d-48f2-8e71-27fbd10d842c + + libsw { + library visualizer_sw + uuid d069d9e0-8329-11df-9168-0002a5d5c51b + } + + libhw { + library visualizer_hw + uuid 7a8044a0-1a71-11e3-a184-0002a5d5c51b + } + } + downmix { + library downmix + uuid 93f04452-e4fe-41cc-91f9-e475b6d1d69f + } + loudness_enhancer { + library loudness_enhancer + uuid fa415329-2034-4bea-b5dc-5b381c8d1e2c + } + aec { + library audio_pre_processing + uuid b4398408-1fb9-11e7-93ae-92361f002671 + } + ns { + library audio_pre_processing + uuid b43988c2-1fb9-11e7-93ae-92361f002671 + } + music_helper { + library volume_listener + uuid 08b8b058-0590-11e5-ac71-0025b32654a0 + } + ring_helper { + library volume_listener + uuid 0956df94-0590-11e5-bdbe-0025b32654a0 + } + alarm_helper { + library volume_listener + uuid 09f303e2-0590-11e5-8fdb-0025b32654a0 + } + # voice_helper is called when stream type is voice_call in VoIP usecase + voice_helper { + library volume_listener + uuid 0ace5c08-0590-11e5-ae9e-0025b32654a0 + } + notification_helper { + library volume_listener + uuid 0b776dde-0590-11e5-81ba-0025b32654a0 + } +} + +# additional effect from vendor +# UUID generated using version 1 + +output_session_processing { + music { + music_helper { + } + } + ring { + ring_helper { + } + } + alarm { + alarm_helper { + } + } + # stream type voice_call is used for VoIP call + voice_call { + voice_helper { + } + } + notification { + notification_helper { + } + } +} + +pre_processing { + voice_communication { + aec { + } + ns { + } + } +} + +# Default pre-processing effects. Add to audio_effect.conf "effects" section if +# audio HAL implements support for them. +# +# agc { +# library pre_processing +# uuid aa8130e0-66fc-11e0-bad0-0002a5d5c51b +# } +# aec { +# library pre_processing +# uuid bb392ec0-8d4d-11e0-a896-0002a5d5c51b +# } +# ns { +# library pre_processing +# uuid c06c8400-8e06-11e0-9cb6-0002a5d5c51b +# } + +# Audio preprocessor configurations. +# The pre processor configuration consists in a list of elements each describing +# pre processor settings for a given input source. Valid input source names are: +# "mic", "camcorder", "voice_recognition", "voice_communication" +# Each input source element contains a list of effects elements. The name of the effect +# element must be the name of one of the effects in the "effects" list of the file. +# Each effect element may optionally contain a list of parameters and their +# default value to apply when the pre processor effect is created. +# A parameter is defined by a "param" element and a "value" element. Each of these elements +# consists in one or more elements specifying a type followed by a value. +# The types defined are: "int", "short", "float", "bool" and "string" +# When both "param" and "value" are a single int, a simple form is allowed where just +# the param and value pair is present in the parameter description +# pre_processing { +# { +# { +# { +# param { +# int|short|float|bool|string +# [ int|short|float|bool|string ] +# ... +# } +# value { +# int|short|float|bool|string +# [ int|short|float|bool|string ] +# ... +# } +# } +# { } +# ... +# } +# ... +# } +# ... +# } + +# +# TODO: add default audio pre processor configurations after debug and tuning phase +# diff --git a/voice_processing/Android.mk b/voice_processing/Android.mk new file mode 100644 index 0000000..b0d902d --- /dev/null +++ b/voice_processing/Android.mk @@ -0,0 +1,32 @@ +# Copyright 2016 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ifneq ($(filter taimen, $(TARGET_DEVICE)),) + +LOCAL_PATH:= $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := voice_processing_descriptors.c +LOCAL_C_INCLUDES += $(call include-path-for, audio-effects) +LOCAL_MULTILIB := $(AUDIOSERVER_MULTILIB) +LOCAL_MODULE := libqcomvoiceprocessingdescriptors +LOCAL_MODULE_RELATIVE_PATH := soundfx +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_OWNER := qcom +LOCAL_PROPRIETARY_MODULE := true + +include $(BUILD_SHARED_LIBRARY) + +endif diff --git a/voice_processing/voice_processing_descriptors.c b/voice_processing/voice_processing_descriptors.c new file mode 100644 index 0000000..d1bba14 --- /dev/null +++ b/voice_processing/voice_processing_descriptors.c @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +//------------------------------------------------------------------------------ +// Effect descriptors +//------------------------------------------------------------------------------ + +// UUIDs for effect types have been generated from http://www.itu.int/ITU-T/asn1/uuid.html +// as the pre processing effects are not defined by OpenSL ES + +// Acoustic Echo Cancellation b4398408-1fb9-11e7-93ae-92361f002671 +const effect_descriptor_t qcom_product_aec_descriptor = { + { 0x7b491460, 0x8d4d, 0x11e0, 0xbd61, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }, // type + { 0xb4398408, 0x1fb9, 0x11e7, 0x93ae, { 0x92, 0x36, 0x1f, 0x00, 0x26, 0x71 } }, // uuid + EFFECT_CONTROL_API_VERSION, + (EFFECT_FLAG_TYPE_PRE_PROC|EFFECT_FLAG_DEVICE_IND|EFFECT_FLAG_HW_ACC_TUNNEL), + 0, + 0, + "Acoustic Echo Canceler", + "Qualcomm Fluence for Taimen" +}; + +// Noise suppression b43988c2-1fb9-11e7-93ae-92361f002671 +const effect_descriptor_t qcom_product_ns_descriptor = { + { 0x58b4b260, 0x8e06, 0x11e0, 0xaa8e, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } }, // type + { 0xb43988c2, 0x1fb9, 0x11e7, 0x93ae, { 0x92, 0x36, 0x1f, 0x00, 0x26, 0x71 } }, // uuid + EFFECT_CONTROL_API_VERSION, + (EFFECT_FLAG_TYPE_PRE_PROC|EFFECT_FLAG_DEVICE_IND|EFFECT_FLAG_HW_ACC_TUNNEL), + 0, + 0, + "Noise Suppression", + "Qualcomm Fluence for Taimen" +};