Loading system/audio_hal_interface/BUILD.gn +1 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ static_library("audio_hal_interface") { sources = [ "a2dp_encoding_host.cc", "hearing_aid_software_encoding_host.cc", "le_audio_software_host.cc", ] include_dirs = [ Loading system/audio_hal_interface/audio_linux.h 0 → 100644 +107 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 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. */ #pragma once #include <stddef.h> /* maximum audio device address length */ #define AUDIO_DEVICE_MAX_ADDRESS_LEN 32 typedef enum { AUDIO_SOURCE_DEFAULT = 0, AUDIO_SOURCE_MIC = 1, AUDIO_SOURCE_VOICE_UPLINK = 2, AUDIO_SOURCE_VOICE_DOWNLINK = 3, AUDIO_SOURCE_VOICE_CALL = 4, AUDIO_SOURCE_CAMCORDER = 5, AUDIO_SOURCE_VOICE_RECOGNITION = 6, AUDIO_SOURCE_VOICE_COMMUNICATION = 7, AUDIO_SOURCE_REMOTE_SUBMIX = 8, AUDIO_SOURCE_UNPROCESSED = 9, AUDIO_SOURCE_VOICE_PERFORMANCE = 10, AUDIO_SOURCE_ECHO_REFERENCE = 1997, AUDIO_SOURCE_FM_TUNER = 1998, AUDIO_SOURCE_HOTWORD = 1999, AUDIO_SOURCE_INVALID = -1, } audio_source_t; typedef enum { AUDIO_CONTENT_TYPE_UNKNOWN = 0u, AUDIO_CONTENT_TYPE_SPEECH = 1u, AUDIO_CONTENT_TYPE_MUSIC = 2u, AUDIO_CONTENT_TYPE_MOVIE = 3u, AUDIO_CONTENT_TYPE_SONIFICATION = 4u, } audio_content_type_t; typedef enum { AUDIO_USAGE_UNKNOWN = 0, AUDIO_USAGE_MEDIA = 1, AUDIO_USAGE_VOICE_COMMUNICATION = 2, AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING = 3, AUDIO_USAGE_ALARM = 4, AUDIO_USAGE_NOTIFICATION = 5, AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6, AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7, AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8, AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9, AUDIO_USAGE_NOTIFICATION_EVENT = 10, AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11, AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12, AUDIO_USAGE_ASSISTANCE_SONIFICATION = 13, AUDIO_USAGE_GAME = 14, AUDIO_USAGE_VIRTUAL_SOURCE = 15, AUDIO_USAGE_ASSISTANT = 16, AUDIO_USAGE_CALL_ASSISTANT = 17, AUDIO_USAGE_EMERGENCY = 1000, AUDIO_USAGE_SAFETY = 1001, AUDIO_USAGE_VEHICLE_STATUS = 1002, AUDIO_USAGE_ANNOUNCEMENT = 1003, } audio_usage_t; typedef enum { AUDIO_DEVICE_DEFAULT = 0, } audio_devices_t; /** Metadata of a playback track for an in stream. */ typedef struct playback_track_metadata { audio_usage_t usage; audio_content_type_t content_type; float gain; // Normalized linear volume. 0=silence, 1=0dbfs... } playback_track_metadata_t; /** Metadata of a record track for an out stream. */ typedef struct record_track_metadata { audio_source_t source; float gain; // Normalized linear volume. 0=silence, 1=0dbfs... // For record tracks originating from a software patch, the // dest_device fields provide information about the downstream // device. audio_devices_t dest_device; char dest_device_address[AUDIO_DEVICE_MAX_ADDRESS_LEN]; } record_track_metadata_t; typedef struct source_metadata { size_t track_count; /** Array of metadata of each track connected to this source. */ struct playback_track_metadata* tracks; } source_metadata_t; typedef struct sink_metadata { size_t track_count; /** Array of metadata of each track connected to this sink. */ struct record_track_metadata* tracks; } sink_metadata_t; system/audio_hal_interface/le_audio_software.h +4 −0 Original line number Diff line number Diff line Loading @@ -16,7 +16,11 @@ #pragma once #ifdef TARGET_FLOSS #include <audio_hal_interface/audio_linux.h> #else #include <hardware/audio.h> #endif #include <functional> Loading system/audio_hal_interface/le_audio_software_host.cc +0 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ * limitations under the License. */ #include "audio_hal_interface/hal_version_manager.h" #include "audio_hal_interface/le_audio_software.h" #include "bta/le_audio/codec_manager.h" Loading system/bta/BUILD.gn +76 −6 Original line number Diff line number Diff line Loading @@ -14,6 +14,9 @@ # limitations under the License. # import("//bt/system/gd/dumpsys/bundler/bundler.gni") import("//common-mk/flatbuffer.gni") static_library("bta") { sources = [ "ag/bta_ag_act.cc", Loading Loading @@ -55,11 +58,11 @@ static_library("bta") { "gatt/database.cc", "gatt/database_builder.cc", "groups/groups.cc", # TODO(abps) - Enable with long-term effort for LE Audio #"has/has_client.cc", #"has/has_ctp.cc", #"has/has_preset.cc", #"has/has_types.cc", "has/has_client.cc", "has/has_ctp.cc", "has/has_preset.cc", "has/has_types.cc", "has/has_journal.cc", "hearing_aid/hearing_aid.cc", "hearing_aid/hearing_aid_audio_source.cc", "hf_client/bta_hf_client_act.cc", Loading @@ -82,8 +85,26 @@ static_library("bta") { "jv/bta_jv_act.cc", "jv/bta_jv_api.cc", "jv/bta_jv_cfg.cc", "le_audio/client_linux.cc", "le_audio/audio_hal_client/audio_sink_hal_client.cc", "le_audio/audio_hal_client/audio_source_hal_client.cc", "le_audio/broadcaster/broadcaster.cc", "le_audio/broadcaster/broadcaster_types.cc", "le_audio/broadcaster/state_machine.cc", "le_audio/client.cc", "le_audio/client_parser.cc", "le_audio/codec_interface.cc", "le_audio/codec_manager.cc", "le_audio/content_control_id_keeper.cc", "le_audio/devices.cc", "le_audio/hal_verifier_linux.cc", "le_audio/le_audio_health_status.cc", "le_audio/le_audio_log_history.cc", "le_audio/le_audio_set_configuration_provider_json.cc", "le_audio/le_audio_types.cc", "le_audio/le_audio_utils.cc", "le_audio/metrics_collector.cc", "le_audio/state_machine.cc", "le_audio/storage_helper.cc", "pan/bta_pan_act.cc", "pan/bta_pan_api.cc", "pan/bta_pan_ci.cc", Loading @@ -107,6 +128,7 @@ static_library("bta") { "include", "sys", "//bt/system/", "//bt/system/include", "//bt/system/linux_include", "//bt/system/bta", "//bt/system/gd", Loading @@ -129,9 +151,57 @@ static_library("bta") { ] deps = [ "//bt/system/bta:LeAudioSetScenariosSchema_bfbs", "//bt/system/bta:LeAudioSetConfigsSchema_bfbs", "//bt/system/bta:install_audio_set_scenarios_json", "//bt/system/bta:install_audio_set_configurations_json", "//bt/system/bta:install_audio_set_scenarios_bfbs", "//bt/system/bta:install_audio_set_configurations_bfbs", "//bt/system:libbt-platform-protos-lite", "//bt/system/gd/rust/shim:init_flags_bridge_header", ] libs = [ "lc3", ] } bt_flatc_binary_schema("LeAudioSetScenariosSchema_bfbs") { sources = [ "le_audio/audio_set_scenarios.fbs", ] include_dir = "system" gen_header = true } bt_flatc_binary_schema("LeAudioSetConfigsSchema_bfbs") { sources = [ "le_audio/audio_set_configurations.fbs", ] include_dir = "system" gen_header = true } install_config("install_audio_set_scenarios_bfbs") { sources = [ "$target_gen_dir/audio_set_scenarios.bfbs" ] install_path = "/etc/bluetooth/le_audio/" } install_config("install_audio_set_configurations_bfbs") { sources = [ "$target_gen_dir/audio_set_configurations.bfbs" ] install_path = "/etc/bluetooth/le_audio/" } install_config("install_audio_set_scenarios_json") { sources = [ "le_audio/audio_set_scenarios.json" ] install_path = "/etc/bluetooth/le_audio/" } install_config("install_audio_set_configurations_json") { sources = [ "le_audio/audio_set_configurations.json" ] install_path = "/etc/bluetooth/le_audio/" } if (use.test) { Loading Loading
system/audio_hal_interface/BUILD.gn +1 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ static_library("audio_hal_interface") { sources = [ "a2dp_encoding_host.cc", "hearing_aid_software_encoding_host.cc", "le_audio_software_host.cc", ] include_dirs = [ Loading
system/audio_hal_interface/audio_linux.h 0 → 100644 +107 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 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. */ #pragma once #include <stddef.h> /* maximum audio device address length */ #define AUDIO_DEVICE_MAX_ADDRESS_LEN 32 typedef enum { AUDIO_SOURCE_DEFAULT = 0, AUDIO_SOURCE_MIC = 1, AUDIO_SOURCE_VOICE_UPLINK = 2, AUDIO_SOURCE_VOICE_DOWNLINK = 3, AUDIO_SOURCE_VOICE_CALL = 4, AUDIO_SOURCE_CAMCORDER = 5, AUDIO_SOURCE_VOICE_RECOGNITION = 6, AUDIO_SOURCE_VOICE_COMMUNICATION = 7, AUDIO_SOURCE_REMOTE_SUBMIX = 8, AUDIO_SOURCE_UNPROCESSED = 9, AUDIO_SOURCE_VOICE_PERFORMANCE = 10, AUDIO_SOURCE_ECHO_REFERENCE = 1997, AUDIO_SOURCE_FM_TUNER = 1998, AUDIO_SOURCE_HOTWORD = 1999, AUDIO_SOURCE_INVALID = -1, } audio_source_t; typedef enum { AUDIO_CONTENT_TYPE_UNKNOWN = 0u, AUDIO_CONTENT_TYPE_SPEECH = 1u, AUDIO_CONTENT_TYPE_MUSIC = 2u, AUDIO_CONTENT_TYPE_MOVIE = 3u, AUDIO_CONTENT_TYPE_SONIFICATION = 4u, } audio_content_type_t; typedef enum { AUDIO_USAGE_UNKNOWN = 0, AUDIO_USAGE_MEDIA = 1, AUDIO_USAGE_VOICE_COMMUNICATION = 2, AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING = 3, AUDIO_USAGE_ALARM = 4, AUDIO_USAGE_NOTIFICATION = 5, AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6, AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7, AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8, AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9, AUDIO_USAGE_NOTIFICATION_EVENT = 10, AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11, AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12, AUDIO_USAGE_ASSISTANCE_SONIFICATION = 13, AUDIO_USAGE_GAME = 14, AUDIO_USAGE_VIRTUAL_SOURCE = 15, AUDIO_USAGE_ASSISTANT = 16, AUDIO_USAGE_CALL_ASSISTANT = 17, AUDIO_USAGE_EMERGENCY = 1000, AUDIO_USAGE_SAFETY = 1001, AUDIO_USAGE_VEHICLE_STATUS = 1002, AUDIO_USAGE_ANNOUNCEMENT = 1003, } audio_usage_t; typedef enum { AUDIO_DEVICE_DEFAULT = 0, } audio_devices_t; /** Metadata of a playback track for an in stream. */ typedef struct playback_track_metadata { audio_usage_t usage; audio_content_type_t content_type; float gain; // Normalized linear volume. 0=silence, 1=0dbfs... } playback_track_metadata_t; /** Metadata of a record track for an out stream. */ typedef struct record_track_metadata { audio_source_t source; float gain; // Normalized linear volume. 0=silence, 1=0dbfs... // For record tracks originating from a software patch, the // dest_device fields provide information about the downstream // device. audio_devices_t dest_device; char dest_device_address[AUDIO_DEVICE_MAX_ADDRESS_LEN]; } record_track_metadata_t; typedef struct source_metadata { size_t track_count; /** Array of metadata of each track connected to this source. */ struct playback_track_metadata* tracks; } source_metadata_t; typedef struct sink_metadata { size_t track_count; /** Array of metadata of each track connected to this sink. */ struct record_track_metadata* tracks; } sink_metadata_t;
system/audio_hal_interface/le_audio_software.h +4 −0 Original line number Diff line number Diff line Loading @@ -16,7 +16,11 @@ #pragma once #ifdef TARGET_FLOSS #include <audio_hal_interface/audio_linux.h> #else #include <hardware/audio.h> #endif #include <functional> Loading
system/audio_hal_interface/le_audio_software_host.cc +0 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,6 @@ * limitations under the License. */ #include "audio_hal_interface/hal_version_manager.h" #include "audio_hal_interface/le_audio_software.h" #include "bta/le_audio/codec_manager.h" Loading
system/bta/BUILD.gn +76 −6 Original line number Diff line number Diff line Loading @@ -14,6 +14,9 @@ # limitations under the License. # import("//bt/system/gd/dumpsys/bundler/bundler.gni") import("//common-mk/flatbuffer.gni") static_library("bta") { sources = [ "ag/bta_ag_act.cc", Loading Loading @@ -55,11 +58,11 @@ static_library("bta") { "gatt/database.cc", "gatt/database_builder.cc", "groups/groups.cc", # TODO(abps) - Enable with long-term effort for LE Audio #"has/has_client.cc", #"has/has_ctp.cc", #"has/has_preset.cc", #"has/has_types.cc", "has/has_client.cc", "has/has_ctp.cc", "has/has_preset.cc", "has/has_types.cc", "has/has_journal.cc", "hearing_aid/hearing_aid.cc", "hearing_aid/hearing_aid_audio_source.cc", "hf_client/bta_hf_client_act.cc", Loading @@ -82,8 +85,26 @@ static_library("bta") { "jv/bta_jv_act.cc", "jv/bta_jv_api.cc", "jv/bta_jv_cfg.cc", "le_audio/client_linux.cc", "le_audio/audio_hal_client/audio_sink_hal_client.cc", "le_audio/audio_hal_client/audio_source_hal_client.cc", "le_audio/broadcaster/broadcaster.cc", "le_audio/broadcaster/broadcaster_types.cc", "le_audio/broadcaster/state_machine.cc", "le_audio/client.cc", "le_audio/client_parser.cc", "le_audio/codec_interface.cc", "le_audio/codec_manager.cc", "le_audio/content_control_id_keeper.cc", "le_audio/devices.cc", "le_audio/hal_verifier_linux.cc", "le_audio/le_audio_health_status.cc", "le_audio/le_audio_log_history.cc", "le_audio/le_audio_set_configuration_provider_json.cc", "le_audio/le_audio_types.cc", "le_audio/le_audio_utils.cc", "le_audio/metrics_collector.cc", "le_audio/state_machine.cc", "le_audio/storage_helper.cc", "pan/bta_pan_act.cc", "pan/bta_pan_api.cc", "pan/bta_pan_ci.cc", Loading @@ -107,6 +128,7 @@ static_library("bta") { "include", "sys", "//bt/system/", "//bt/system/include", "//bt/system/linux_include", "//bt/system/bta", "//bt/system/gd", Loading @@ -129,9 +151,57 @@ static_library("bta") { ] deps = [ "//bt/system/bta:LeAudioSetScenariosSchema_bfbs", "//bt/system/bta:LeAudioSetConfigsSchema_bfbs", "//bt/system/bta:install_audio_set_scenarios_json", "//bt/system/bta:install_audio_set_configurations_json", "//bt/system/bta:install_audio_set_scenarios_bfbs", "//bt/system/bta:install_audio_set_configurations_bfbs", "//bt/system:libbt-platform-protos-lite", "//bt/system/gd/rust/shim:init_flags_bridge_header", ] libs = [ "lc3", ] } bt_flatc_binary_schema("LeAudioSetScenariosSchema_bfbs") { sources = [ "le_audio/audio_set_scenarios.fbs", ] include_dir = "system" gen_header = true } bt_flatc_binary_schema("LeAudioSetConfigsSchema_bfbs") { sources = [ "le_audio/audio_set_configurations.fbs", ] include_dir = "system" gen_header = true } install_config("install_audio_set_scenarios_bfbs") { sources = [ "$target_gen_dir/audio_set_scenarios.bfbs" ] install_path = "/etc/bluetooth/le_audio/" } install_config("install_audio_set_configurations_bfbs") { sources = [ "$target_gen_dir/audio_set_configurations.bfbs" ] install_path = "/etc/bluetooth/le_audio/" } install_config("install_audio_set_scenarios_json") { sources = [ "le_audio/audio_set_scenarios.json" ] install_path = "/etc/bluetooth/le_audio/" } install_config("install_audio_set_configurations_json") { sources = [ "le_audio/audio_set_configurations.json" ] install_path = "/etc/bluetooth/le_audio/" } if (use.test) { Loading