diff options
-rw-r--r-- | audio/7.1/Android.bp | 30 | ||||
-rw-r--r-- | audio/7.1/IDevice.hal | 88 | ||||
-rw-r--r-- | audio/7.1/IDevicesFactory.hal | 73 | ||||
-rw-r--r-- | audio/7.1/IPrimaryDevice.hal | 34 | ||||
-rw-r--r-- | audio/7.1/IStreamIn.hal | 22 | ||||
-rw-r--r-- | audio/7.1/IStreamOut.hal | 22 | ||||
-rw-r--r-- | audio/7.1/config/Android.bp | 31 | ||||
-rw-r--r-- | audio/7.1/config/api/current.txt | 592 | ||||
-rw-r--r-- | audio/7.1/config/api/last_current.txt | 0 | ||||
-rw-r--r-- | audio/7.1/config/api/last_removed.txt | 0 | ||||
-rw-r--r-- | audio/7.1/config/api/removed.txt | 1 | ||||
-rw-r--r-- | audio/7.1/config/audio_policy_configuration.xsd | 815 | ||||
-rw-r--r-- | audio/common/7.1/Android.bp | 23 | ||||
-rw-r--r-- | audio/common/7.1/enums/OWNERS | 2 | ||||
-rw-r--r-- | audio/common/7.1/enums/include/android_audio_policy_configuration_V7_1-enums.h | 300 |
15 files changed, 2033 insertions, 0 deletions
diff --git a/audio/7.1/Android.bp b/audio/7.1/Android.bp new file mode 100644 index 0000000000..d0d96b6cf6 --- /dev/null +++ b/audio/7.1/Android.bp @@ -0,0 +1,30 @@ +// This file is autogenerated by hidl-gen -Landroidbp. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_interfaces_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_interfaces_license"], +} + +hidl_interface { + name: "android.hardware.audio@7.1", + root: "android.hardware", + srcs: [ + "IDevice.hal", + "IDevicesFactory.hal", + "IPrimaryDevice.hal", + "IStreamIn.hal", + "IStreamOut.hal", + ], + interfaces: [ + "android.hardware.audio@7.0", + "android.hardware.audio.common@7.0", + "android.hidl.base@1.0", + "android.hidl.safe_union@1.0", + ], + gen_java: false, + gen_java_constants: false, +} diff --git a/audio/7.1/IDevice.hal b/audio/7.1/IDevice.hal new file mode 100644 index 0000000000..373d17f4f9 --- /dev/null +++ b/audio/7.1/IDevice.hal @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2022 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. + */ + +package android.hardware.audio@7.1; + +import android.hardware.audio.common@7.0; +import @7.0::AudioInOutFlag; +import @7.0::IDevice; +import @7.0::Result; +import IStreamIn; +import IStreamOut; + +interface IDevice extends @7.0::IDevice { + /** + * This method creates and opens the audio hardware output stream. + * If the stream can not be opened with the proposed audio config, + * HAL must provide suggested values for the audio config. + * + * Note: INVALID_ARGUMENTS is returned both in the case when the + * HAL can not use the provided config and in the case when + * the value of any argument is invalid. In the latter case the + * HAL must provide a default initialized suggested config. + * + * @param ioHandle handle assigned by AudioFlinger. + * @param device device type and (if needed) address. + * @param config stream configuration. + * @param flags additional flags. + * @param sourceMetadata Description of the audio that will be played. + May be used by implementations to configure hardware effects. + * @return retval operation completion status. + * @return outStream created output stream. + * @return suggestedConfig in the case of rejection of the proposed config, + * a config suggested by the HAL. + */ + openOutputStream_7_1( + AudioIoHandle ioHandle, + DeviceAddress device, + AudioConfig config, + vec<AudioInOutFlag> flags, + SourceMetadata sourceMetadata) generates ( + Result retval, + IStreamOut outStream, + AudioConfig suggestedConfig); + + /** + * This method creates and opens the audio hardware input stream. + * If the stream can not be opened with the proposed audio config, + * HAL must provide suggested values for the audio config. + * + * Note: INVALID_ARGUMENTS is returned both in the case when the + * HAL can not use the provided config and in the case when + * the value of any argument is invalid. In the latter case the + * HAL must provide a default initialized suggested config. + * + * @param ioHandle handle assigned by AudioFlinger. + * @param device device type and (if needed) address. + * @param config stream configuration. + * @param flags additional flags. + * @param sinkMetadata Description of the audio that is suggested by the client. + * May be used by implementations to configure processing effects. + * @return retval operation completion status. + * @return inStream in case of success, created input stream. + * @return suggestedConfig in the case of rejection of the proposed config, + * a config suggested by the HAL. + */ + openInputStream_7_1( + AudioIoHandle ioHandle, + DeviceAddress device, + AudioConfig config, + vec<AudioInOutFlag> flags, + SinkMetadata sinkMetadata) generates ( + Result retval, + IStreamIn inStream, + AudioConfig suggestedConfig); +}; diff --git a/audio/7.1/IDevicesFactory.hal b/audio/7.1/IDevicesFactory.hal new file mode 100644 index 0000000000..7669614e59 --- /dev/null +++ b/audio/7.1/IDevicesFactory.hal @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2022 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. + */ + +package android.hardware.audio@7.1; + +import @7.0::IDevicesFactory; +import @7.0::Result; +import IDevice; +import IPrimaryDevice; + +/** + * This factory allows a HAL implementation to be split in multiple independent + * devices (called module in the pre-treble API). Note that this division is + * arbitrary and implementation are free to only have a Primary. The framework + * will query the devices according to audio_policy_configuration.xml + * + * Each device name is arbitrary, provided by the vendor's audio_policy_configuration.xml + * and only used to identify a device in this factory. + * The framework must not interpret the name, treating it as a vendor opaque data + * with the following exception: + * - the "r_submix" device that must be present to support policyMixes (Eg: Android projected). + * Note that this Device is included by default in a build derived from AOSP. + */ +interface IDevicesFactory extends @7.0::IDevicesFactory { + + /** + * Opens an audio device. To close the device, it is necessary to call + * 'close' method on the returned device object. + * + * Important note: due to rules of HIDL, @7.1::IPrimaryDevice extends + * @7.0::IPrimaryDevice, rather than @7.1::IDevice. Thus the returned + * IDevice interface can not be up-casted to @7.1::IPrimaryDevice for the + * primary device. The client needs to use IPrimaryDevice instead of this + * method if it needs full functionality of the IPrimaryDevice interface. + * + * @param device device name. + * @return retval operation completion status. Returns INVALID_ARGUMENTS + * if there is no corresponding hardware module found, + * NOT_INITIALIZED if an error occurred while opening the hardware + * module. + * @return result the interface for the created device. + */ + openDevice_7_1(string device) generates (Result retval, IDevice result); + + /** + * Opens the Primary audio device that must be present. + * This function is not optional and must return successfully the primary device. + * + * This device must have the name "primary". + * + * The telephony stack uses this device to control the audio during a voice call. + * + * @return retval operation completion status. Must be SUCCESS. + * For debugging, return INVALID_ARGUMENTS if there is no corresponding + * hardware module found, NOT_INITIALIZED if an error occurred + * while opening the hardware module. + * @return result the interface for the created device. + */ + openPrimaryDevice_7_1() generates (Result retval, IPrimaryDevice result); +}; diff --git a/audio/7.1/IPrimaryDevice.hal b/audio/7.1/IPrimaryDevice.hal new file mode 100644 index 0000000000..16596716f5 --- /dev/null +++ b/audio/7.1/IPrimaryDevice.hal @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2022 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. + */ + +package android.hardware.audio@7.1; + +import android.hardware.audio.common@7.0; +import @7.0::IPrimaryDevice; +import IDevice; + +interface IPrimaryDevice extends @7.0::IPrimaryDevice { + /** + * Retrieve the generic @7.1::IDevice interface. + * + * Since @7.1::IPrimaryDevice extends @7.0::IPrimaryDevice, the interface + * reference can not be downcasted to @7.1::IDevice using standard methods. + * For this reason a dedicated interface method is provided. + * + * @return result the generic part of the interface. + */ + getDevice() generates (IDevice result); +}; diff --git a/audio/7.1/IStreamIn.hal b/audio/7.1/IStreamIn.hal new file mode 100644 index 0000000000..abebe6a062 --- /dev/null +++ b/audio/7.1/IStreamIn.hal @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2022 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. + */ + +package android.hardware.audio@7.1; + +import @7.0::IStreamIn; + +interface IStreamIn extends @7.0::IStreamIn { +}; diff --git a/audio/7.1/IStreamOut.hal b/audio/7.1/IStreamOut.hal new file mode 100644 index 0000000000..092a9a0f40 --- /dev/null +++ b/audio/7.1/IStreamOut.hal @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2022 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. + */ + +package android.hardware.audio@7.1; + +import @7.0::IStreamOut; + +interface IStreamOut extends @7.0::IStreamOut { +}; diff --git a/audio/7.1/config/Android.bp b/audio/7.1/config/Android.bp new file mode 100644 index 0000000000..70c8fd4a77 --- /dev/null +++ b/audio/7.1/config/Android.bp @@ -0,0 +1,31 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_interfaces_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_interfaces_license"], +} + +xsd_config { + name: "audio_policy_configuration_V7_1", + srcs: ["audio_policy_configuration.xsd"], + package_name: "android.audio.policy.configuration.V7_1", + nullability: true, +} + +xsd_config { + name: "audio_policy_configuration_V7_1_enums", + srcs: ["audio_policy_configuration.xsd"], + package_name: "android.audio.policy.configuration.V7_1", + nullability: true, + enums_only: true, +} + +xsd_config { + name: "audio_policy_configuration_V7_1_parser", + srcs: ["audio_policy_configuration.xsd"], + package_name: "android.audio.policy.configuration.V7_1", + nullability: true, + parser_only: true, +} diff --git a/audio/7.1/config/api/current.txt b/audio/7.1/config/api/current.txt new file mode 100644 index 0000000000..01c2e4bbd5 --- /dev/null +++ b/audio/7.1/config/api/current.txt @@ -0,0 +1,592 @@ +// Signature format: 2.0 +package android.audio.policy.configuration.V7_1 { + + public class AttachedDevices { + ctor public AttachedDevices(); + method @Nullable public java.util.List<java.lang.String> getItem(); + } + + public enum AudioChannelMask { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_10; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_11; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_12; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_13; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_14; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_15; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_16; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_17; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_18; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_19; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_20; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_21; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_22; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_23; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_24; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_4; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_5; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_6; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_7; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_8; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_9; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_2POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_2POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_3POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_3POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_5POINT1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_6; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_FRONT_BACK; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_MONO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_STEREO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_VOICE_CALL_MONO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_NONE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_13POINT_360RA; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_22POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_2POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_2POINT1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_2POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_3POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_3POINT1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_3POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1POINT4; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1_BACK; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1_SIDE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_6POINT1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_7POINT1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_7POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_7POINT1POINT4; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_HAPTIC_AB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_MONO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_MONO_HAPTIC_A; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_MONO_HAPTIC_AB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_PENTA; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_QUAD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_QUAD_BACK; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_QUAD_SIDE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_STEREO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_STEREO_HAPTIC_AB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_SURROUND; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_TRI; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioChannelMask AUDIO_CHANNEL_OUT_TRI_BACK; + } + + public enum AudioContentType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioContentType AUDIO_CONTENT_TYPE_MOVIE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioContentType AUDIO_CONTENT_TYPE_MUSIC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioContentType AUDIO_CONTENT_TYPE_SONIFICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioContentType AUDIO_CONTENT_TYPE_SPEECH; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioContentType AUDIO_CONTENT_TYPE_UNKNOWN; + } + + public enum AudioDevice { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_AMBIENT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_AUX_DIGITAL; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BACK_MIC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BLE_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BLUETOOTH_A2DP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BLUETOOTH_BLE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BUILTIN_MIC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_BUS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_COMMUNICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_DEFAULT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_ECHO_REFERENCE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_FM_TUNER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_HDMI; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_HDMI_ARC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_HDMI_EARC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_IP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_LINE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_LOOPBACK; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_PROXY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_SPDIF; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_STUB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_TELEPHONY_RX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_TV_TUNER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_USB_ACCESSORY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_USB_DEVICE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_USB_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_VOICE_CALL; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_IN_WIRED_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_NONE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_AUX_DIGITAL; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_AUX_LINE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLE_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLE_SPEAKER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_A2DP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_SCO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_BUS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_DEFAULT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_EARPIECE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_ECHO_CANCELLER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_FM; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_HDMI; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_HDMI_ARC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_HDMI_EARC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_HEARING_AID; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_IP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_LINE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_PROXY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_SPDIF; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_SPEAKER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_SPEAKER_SAFE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_STUB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_TELEPHONY_TX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_USB_ACCESSORY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_USB_DEVICE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_USB_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_WIRED_HEADPHONE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioDevice AUDIO_DEVICE_OUT_WIRED_HEADSET; + } + + public enum AudioEncapsulationType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioEncapsulationType AUDIO_ENCAPSULATION_TYPE_IEC61937; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioEncapsulationType AUDIO_ENCAPSULATION_TYPE_NONE; + } + + public enum AudioFormat { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADIF; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_ELD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_ERLC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_HE_V1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_HE_V2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_LC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_LD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_LTP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_MAIN; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_SCALABLE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_SSR; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ADTS_XHE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ELD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_ERLC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_HE_V1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_HE_V2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LATM; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LATM_HE_V1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LATM_HE_V2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LATM_LC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_LTP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_MAIN; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_SCALABLE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_SSR; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AAC_XHE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AC3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AC4; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_ALAC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AMR_NB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AMR_WB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_AMR_WB_PLUS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_APE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_APTX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_APTX_ADAPTIVE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_APTX_HD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_APTX_TWSP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_CELT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DEFAULT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DOLBY_TRUEHD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DRA; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DSD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DTS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DTS_HD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_DTS_UHD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_EVRC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_EVRCB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_EVRCNW; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_EVRCWB; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_E_AC3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_E_AC3_JOC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_FLAC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_HE_AAC_V1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_HE_AAC_V2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_IEC60958; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_IEC61937; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_LC3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_LDAC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_LHDC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_LHDC_LL; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MAT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MAT_1_0; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MAT_2_0; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MAT_2_1; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MP2; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MP3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MPEGH_BL_L3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MPEGH_BL_L4; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MPEGH_LC_L3; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_MPEGH_LC_L4; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_OPUS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_PCM_16_BIT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_PCM_24_BIT_PACKED; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_PCM_32_BIT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_PCM_8_24_BIT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_PCM_8_BIT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_PCM_FLOAT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_QCELP; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_SBC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_VORBIS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_WMA; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioFormat AUDIO_FORMAT_WMA_PRO; + } + + public enum AudioGainMode { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioGainMode AUDIO_GAIN_MODE_CHANNELS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioGainMode AUDIO_GAIN_MODE_JOINT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioGainMode AUDIO_GAIN_MODE_RAMP; + } + + public enum AudioInOutFlag { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_DIRECT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_FAST; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_HW_AV_SYNC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_HW_HOTWORD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_MMAP_NOIRQ; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_RAW; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_SYNC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_INPUT_FLAG_VOIP_TX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_DEEP_BUFFER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_DIRECT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_DIRECT_PCM; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_FAST; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_HW_AV_SYNC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_INCALL_MUSIC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_MMAP_NOIRQ; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_NON_BLOCKING; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_PRIMARY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_RAW; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_SYNC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_TTS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioInOutFlag AUDIO_OUTPUT_FLAG_VOIP_RX; + } + + public class AudioPolicyConfiguration { + ctor public AudioPolicyConfiguration(); + method @Nullable public android.audio.policy.configuration.V7_1.GlobalConfiguration getGlobalConfiguration(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Modules> getModules(); + method @Nullable public android.audio.policy.configuration.V7_1.SurroundSound getSurroundSound(); + method @Nullable public android.audio.policy.configuration.V7_1.Version getVersion(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Volumes> getVolumes(); + method public void setGlobalConfiguration(@Nullable android.audio.policy.configuration.V7_1.GlobalConfiguration); + method public void setSurroundSound(@Nullable android.audio.policy.configuration.V7_1.SurroundSound); + method public void setVersion(@Nullable android.audio.policy.configuration.V7_1.Version); + } + + public enum AudioSource { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_CAMCORDER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_DEFAULT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_ECHO_REFERENCE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_FM_TUNER; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_HOTWORD; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_MIC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_UNPROCESSED; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_VOICE_CALL; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_VOICE_COMMUNICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_VOICE_DOWNLINK; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_VOICE_PERFORMANCE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_VOICE_RECOGNITION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioSource AUDIO_SOURCE_VOICE_UPLINK; + } + + public enum AudioStreamType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_ACCESSIBILITY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_ALARM; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_BLUETOOTH_SCO; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_CALL_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_DTMF; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_ENFORCED_AUDIBLE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_MUSIC; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_NOTIFICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_PATCH; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_REROUTING; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_RING; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_SYSTEM; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_TTS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioStreamType AUDIO_STREAM_VOICE_CALL; + } + + public enum AudioUsage { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_ALARM; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_ANNOUNCEMENT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_ASSISTANCE_SONIFICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_CALL_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_EMERGENCY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_GAME; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_MEDIA; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_NOTIFICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_SAFETY; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_UNKNOWN; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_VEHICLE_STATUS; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_VIRTUAL_SOURCE; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_VOICE_COMMUNICATION; + enum_constant public static final android.audio.policy.configuration.V7_1.AudioUsage AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING; + } + + public enum DeviceCategory { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.DeviceCategory DEVICE_CATEGORY_EARPIECE; + enum_constant public static final android.audio.policy.configuration.V7_1.DeviceCategory DEVICE_CATEGORY_EXT_MEDIA; + enum_constant public static final android.audio.policy.configuration.V7_1.DeviceCategory DEVICE_CATEGORY_HEADSET; + enum_constant public static final android.audio.policy.configuration.V7_1.DeviceCategory DEVICE_CATEGORY_HEARING_AID; + enum_constant public static final android.audio.policy.configuration.V7_1.DeviceCategory DEVICE_CATEGORY_SPEAKER; + } + + public class DevicePorts { + ctor public DevicePorts(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.DevicePorts.DevicePort> getDevicePort(); + } + + public static class DevicePorts.DevicePort { + ctor public DevicePorts.DevicePort(); + method @Nullable public String getAddress(); + method @Nullable public java.util.List<java.lang.String> getEncodedFormats(); + method @Nullable public android.audio.policy.configuration.V7_1.Gains getGains(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Profile> getProfile(); + method @Nullable public android.audio.policy.configuration.V7_1.Role getRole(); + method @Nullable public String getTagName(); + method @Nullable public String getType(); + method @Nullable public boolean get_default(); + method public void setAddress(@Nullable String); + method public void setEncodedFormats(@Nullable java.util.List<java.lang.String>); + method public void setGains(@Nullable android.audio.policy.configuration.V7_1.Gains); + method public void setRole(@Nullable android.audio.policy.configuration.V7_1.Role); + method public void setTagName(@Nullable String); + method public void setType(@Nullable String); + method public void set_default(@Nullable boolean); + } + + public enum EngineSuffix { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.EngineSuffix _default; + enum_constant public static final android.audio.policy.configuration.V7_1.EngineSuffix configurable; + } + + public class Gains { + ctor public Gains(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Gains.Gain> getGain(); + } + + public static class Gains.Gain { + ctor public Gains.Gain(); + method @Nullable public android.audio.policy.configuration.V7_1.AudioChannelMask getChannel_mask(); + method @Nullable public int getDefaultValueMB(); + method @Nullable public int getMaxRampMs(); + method @Nullable public int getMaxValueMB(); + method @Nullable public int getMinRampMs(); + method @Nullable public int getMinValueMB(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.AudioGainMode> getMode(); + method @Nullable public String getName(); + method @Nullable public int getStepValueMB(); + method @Nullable public boolean getUseForVolume(); + method public void setChannel_mask(@Nullable android.audio.policy.configuration.V7_1.AudioChannelMask); + method public void setDefaultValueMB(@Nullable int); + method public void setMaxRampMs(@Nullable int); + method public void setMaxValueMB(@Nullable int); + method public void setMinRampMs(@Nullable int); + method public void setMinValueMB(@Nullable int); + method public void setMode(@Nullable java.util.List<android.audio.policy.configuration.V7_1.AudioGainMode>); + method public void setName(@Nullable String); + method public void setStepValueMB(@Nullable int); + method public void setUseForVolume(@Nullable boolean); + } + + public class GlobalConfiguration { + ctor public GlobalConfiguration(); + method @Nullable public boolean getCall_screen_mode_supported(); + method @Nullable public android.audio.policy.configuration.V7_1.EngineSuffix getEngine_library(); + method @Nullable public boolean getSpeaker_drc_enabled(); + method public void setCall_screen_mode_supported(@Nullable boolean); + method public void setEngine_library(@Nullable android.audio.policy.configuration.V7_1.EngineSuffix); + method public void setSpeaker_drc_enabled(@Nullable boolean); + } + + public enum HalVersion { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.HalVersion _2_0; + enum_constant public static final android.audio.policy.configuration.V7_1.HalVersion _3_0; + } + + public class MixPorts { + ctor public MixPorts(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.MixPorts.MixPort> getMixPort(); + } + + public static class MixPorts.MixPort { + ctor public MixPorts.MixPort(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.AudioInOutFlag> getFlags(); + method @Nullable public android.audio.policy.configuration.V7_1.Gains getGains(); + method @Nullable public long getMaxActiveCount(); + method @Nullable public long getMaxOpenCount(); + method @Nullable public String getName(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.AudioUsage> getPreferredUsage(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Profile> getProfile(); + method @Nullable public android.audio.policy.configuration.V7_1.Role getRole(); + method public void setFlags(@Nullable java.util.List<android.audio.policy.configuration.V7_1.AudioInOutFlag>); + method public void setGains(@Nullable android.audio.policy.configuration.V7_1.Gains); + method public void setMaxActiveCount(@Nullable long); + method public void setMaxOpenCount(@Nullable long); + method public void setName(@Nullable String); + method public void setPreferredUsage(@Nullable java.util.List<android.audio.policy.configuration.V7_1.AudioUsage>); + method public void setRole(@Nullable android.audio.policy.configuration.V7_1.Role); + } + + public enum MixType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.MixType mix; + enum_constant public static final android.audio.policy.configuration.V7_1.MixType mux; + } + + public class Modules { + ctor public Modules(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Modules.Module> getModule(); + } + + public static class Modules.Module { + ctor public Modules.Module(); + method @Nullable public android.audio.policy.configuration.V7_1.AttachedDevices getAttachedDevices(); + method @Nullable public String getDefaultOutputDevice(); + method @Nullable public android.audio.policy.configuration.V7_1.DevicePorts getDevicePorts(); + method @Nullable public android.audio.policy.configuration.V7_1.HalVersion getHalVersion(); + method @Nullable public android.audio.policy.configuration.V7_1.MixPorts getMixPorts(); + method @Nullable public String getName(); + method @Nullable public android.audio.policy.configuration.V7_1.Routes getRoutes(); + method public void setAttachedDevices(@Nullable android.audio.policy.configuration.V7_1.AttachedDevices); + method public void setDefaultOutputDevice(@Nullable String); + method public void setDevicePorts(@Nullable android.audio.policy.configuration.V7_1.DevicePorts); + method public void setHalVersion(@Nullable android.audio.policy.configuration.V7_1.HalVersion); + method public void setMixPorts(@Nullable android.audio.policy.configuration.V7_1.MixPorts); + method public void setName(@Nullable String); + method public void setRoutes(@Nullable android.audio.policy.configuration.V7_1.Routes); + } + + public class Profile { + ctor public Profile(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.AudioChannelMask> getChannelMasks(); + method @Nullable public android.audio.policy.configuration.V7_1.AudioEncapsulationType getEncapsulationType(); + method @Nullable public String getFormat(); + method @Nullable public String getName(); + method @Nullable public java.util.List<java.math.BigInteger> getSamplingRates(); + method public void setChannelMasks(@Nullable java.util.List<android.audio.policy.configuration.V7_1.AudioChannelMask>); + method public void setEncapsulationType(@Nullable android.audio.policy.configuration.V7_1.AudioEncapsulationType); + method public void setFormat(@Nullable String); + method public void setName(@Nullable String); + method public void setSamplingRates(@Nullable java.util.List<java.math.BigInteger>); + } + + public class Reference { + ctor public Reference(); + method @Nullable public String getName(); + method @Nullable public java.util.List<java.lang.String> getPoint(); + method public void setName(@Nullable String); + } + + public enum Role { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.Role sink; + enum_constant public static final android.audio.policy.configuration.V7_1.Role source; + } + + public class Routes { + ctor public Routes(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Routes.Route> getRoute(); + } + + public static class Routes.Route { + ctor public Routes.Route(); + method @Nullable public String getSink(); + method @Nullable public String getSources(); + method @Nullable public android.audio.policy.configuration.V7_1.MixType getType(); + method public void setSink(@Nullable String); + method public void setSources(@Nullable String); + method public void setType(@Nullable android.audio.policy.configuration.V7_1.MixType); + } + + public class SurroundFormats { + ctor public SurroundFormats(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.SurroundFormats.Format> getFormat(); + } + + public static class SurroundFormats.Format { + ctor public SurroundFormats.Format(); + method @Nullable public String getName(); + method @Nullable public java.util.List<java.lang.String> getSubformats(); + method public void setName(@Nullable String); + method public void setSubformats(@Nullable java.util.List<java.lang.String>); + } + + public class SurroundSound { + ctor public SurroundSound(); + method @Nullable public android.audio.policy.configuration.V7_1.SurroundFormats getFormats(); + method public void setFormats(@Nullable android.audio.policy.configuration.V7_1.SurroundFormats); + } + + public enum Version { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.V7_1.Version _7_0; + enum_constant public static final android.audio.policy.configuration.V7_1.Version _7_1; + } + + public class Volume { + ctor public Volume(); + method @Nullable public android.audio.policy.configuration.V7_1.DeviceCategory getDeviceCategory(); + method @Nullable public java.util.List<java.lang.String> getPoint(); + method @Nullable public String getRef(); + method @Nullable public android.audio.policy.configuration.V7_1.AudioStreamType getStream(); + method public void setDeviceCategory(@Nullable android.audio.policy.configuration.V7_1.DeviceCategory); + method public void setRef(@Nullable String); + method public void setStream(@Nullable android.audio.policy.configuration.V7_1.AudioStreamType); + } + + public class Volumes { + ctor public Volumes(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Reference> getReference(); + method @Nullable public java.util.List<android.audio.policy.configuration.V7_1.Volume> getVolume(); + } + + public class XmlParser { + ctor public XmlParser(); + method @Nullable public static android.audio.policy.configuration.V7_1.AudioPolicyConfiguration read(@NonNull java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method @Nullable public static String readText(@NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static void skip(@NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + } + +} + diff --git a/audio/7.1/config/api/last_current.txt b/audio/7.1/config/api/last_current.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/audio/7.1/config/api/last_current.txt diff --git a/audio/7.1/config/api/last_removed.txt b/audio/7.1/config/api/last_removed.txt new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/audio/7.1/config/api/last_removed.txt diff --git a/audio/7.1/config/api/removed.txt b/audio/7.1/config/api/removed.txt new file mode 100644 index 0000000000..d802177e24 --- /dev/null +++ b/audio/7.1/config/api/removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/audio/7.1/config/audio_policy_configuration.xsd b/audio/7.1/config/audio_policy_configuration.xsd new file mode 100644 index 0000000000..731bb7c75f --- /dev/null +++ b/audio/7.1/config/audio_policy_configuration.xsd @@ -0,0 +1,815 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2020 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. +--> +<xs:schema version="2.0" + elementFormDefault="qualified" + attributeFormDefault="unqualified" + xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <!-- List the config versions supported by audio policy. --> + <xs:simpleType name="version"> + <xs:restriction base="xs:decimal"> + <xs:enumeration value="7.0"/> + <xs:enumeration value="7.1"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="halVersion"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Version of the interface the hal implements. Note that this + relates to legacy HAL API versions since HIDL APIs are versioned + using other mechanisms. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:decimal"> + <!-- List of HAL versions supported by the framework. --> + <xs:enumeration value="2.0"/> + <xs:enumeration value="3.0"/> + </xs:restriction> + </xs:simpleType> + <xs:element name="audioPolicyConfiguration"> + <xs:complexType> + <xs:sequence> + <xs:element name="globalConfiguration" type="globalConfiguration"/> + <xs:element name="modules" type="modules" maxOccurs="unbounded"/> + <xs:element name="volumes" type="volumes" maxOccurs="unbounded"/> + <xs:element name="surroundSound" type="surroundSound" minOccurs="0" /> + </xs:sequence> + <xs:attribute name="version" type="version"/> + </xs:complexType> + <xs:key name="moduleNameKey"> + <xs:selector xpath="modules/module"/> + <xs:field xpath="@name"/> + </xs:key> + <xs:unique name="volumeTargetUniqueness"> + <xs:selector xpath="volumes/volume"/> + <xs:field xpath="@stream"/> + <xs:field xpath="@deviceCategory"/> + </xs:unique> + <xs:key name="volumeCurveNameKey"> + <xs:selector xpath="volumes/reference"/> + <xs:field xpath="@name"/> + </xs:key> + <xs:keyref name="volumeCurveRef" refer="volumeCurveNameKey"> + <xs:selector xpath="volumes/volume"/> + <xs:field xpath="@ref"/> + </xs:keyref> + </xs:element> + <xs:complexType name="globalConfiguration"> + <xs:attribute name="speaker_drc_enabled" type="xs:boolean" use="required"/> + <xs:attribute name="call_screen_mode_supported" type="xs:boolean" use="optional"/> + <xs:attribute name="engine_library" type="engineSuffix" use="optional"/> + </xs:complexType> + <xs:complexType name="modules"> + <xs:annotation> + <xs:documentation xml:lang="en"> + There should be one section per audio HW module present on the platform. + Each <module/> contains two mandatory tags: “halVersion” and “name”. + The module "name" is the same as in previous .conf file. + Each module must contain the following sections: + - <devicePorts/>: a list of device descriptors for all + input and output devices accessible via this module. + This contains both permanently attached devices and removable devices. + - <mixPorts/>: listing all output and input streams exposed by the audio HAL + - <routes/>: list of possible connections between input + and output devices or between stream and devices. + A <route/> is defined by a set of 3 attributes: + -"type": mux|mix means all sources are mutual exclusive (mux) or can be mixed (mix) + -"sink": the sink involved in this route + -"sources": all the sources than can be connected to the sink via this route + - <attachedDevices/>: permanently attached devices. + The attachedDevices section is a list of devices names. + Their names correspond to device names defined in "devicePorts" section. + - <defaultOutputDevice/> is the device to be used when no policy rule applies + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="module" maxOccurs="unbounded"> + <xs:complexType> + <xs:sequence> + <xs:element name="attachedDevices" type="attachedDevices" minOccurs="0"> + <xs:unique name="attachedDevicesUniqueness"> + <xs:selector xpath="item"/> + <xs:field xpath="."/> + </xs:unique> + </xs:element> + <xs:element name="defaultOutputDevice" type="xs:token" minOccurs="0"/> + <xs:element name="mixPorts" type="mixPorts" minOccurs="0"/> + <xs:element name="devicePorts" type="devicePorts" minOccurs="0"/> + <xs:element name="routes" type="routes" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="name" type="xs:string" use="required"/> + <xs:attribute name="halVersion" type="halVersion" use="required"/> + </xs:complexType> + <xs:unique name="mixPortNameUniqueness"> + <xs:selector xpath="mixPorts/mixPort"/> + <xs:field xpath="@name"/> + </xs:unique> + <xs:key name="devicePortNameKey"> + <xs:selector xpath="devicePorts/devicePort"/> + <xs:field xpath="@tagName"/> + </xs:key> + <xs:unique name="devicePortUniqueness"> + <xs:selector xpath="devicePorts/devicePort"/> + <xs:field xpath="@type"/> + <xs:field xpath="@address"/> + </xs:unique> + <xs:keyref name="defaultOutputDeviceRef" refer="devicePortNameKey"> + <xs:selector xpath="defaultOutputDevice"/> + <xs:field xpath="."/> + </xs:keyref> + <xs:keyref name="attachedDeviceRef" refer="devicePortNameKey"> + <xs:selector xpath="attachedDevices/item"/> + <xs:field xpath="."/> + </xs:keyref> + <!-- The following 3 constraints try to make sure each sink port + is reference in one an only one route. --> + <xs:key name="routeSinkKey"> + <!-- predicate [@type='sink'] does not work in xsd 1.0 --> + <xs:selector xpath="devicePorts/devicePort|mixPorts/mixPort"/> + <xs:field xpath="@tagName|@name"/> + </xs:key> + <xs:keyref name="routeSinkRef" refer="routeSinkKey"> + <xs:selector xpath="routes/route"/> + <xs:field xpath="@sink"/> + </xs:keyref> + <xs:unique name="routeUniqueness"> + <xs:selector xpath="routes/route"/> + <xs:field xpath="@sink"/> + </xs:unique> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="attachedDevices"> + <xs:sequence> + <xs:element name="item" type="xs:token" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="audioInOutFlag"> + <xs:annotation> + <xs:documentation xml:lang="en"> + The flags indicate suggested stream attributes supported by the profile. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_DIRECT" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_PRIMARY" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_FAST" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_DEEP_BUFFER" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_NON_BLOCKING" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_HW_AV_SYNC" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_TTS" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_RAW" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_SYNC" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_DIRECT_PCM" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_MMAP_NOIRQ" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_VOIP_RX" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_INCALL_MUSIC" /> + <xs:enumeration value="AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_FAST" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_HW_HOTWORD" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_RAW" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_SYNC" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_MMAP_NOIRQ" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_VOIP_TX" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_HW_AV_SYNC" /> + <xs:enumeration value="AUDIO_INPUT_FLAG_DIRECT" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="audioInOutFlags"> + <xs:list itemType="audioInOutFlag" /> + </xs:simpleType> + <xs:simpleType name="role"> + <xs:restriction base="xs:string"> + <xs:enumeration value="sink"/> + <xs:enumeration value="source"/> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="mixPorts"> + <xs:sequence> + <xs:element name="mixPort" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:sequence> + <xs:element name="profile" type="profile" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="gains" type="gains" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="name" type="xs:token" use="required"/> + <xs:attribute name="role" type="role" use="required"/> + <xs:attribute name="flags" type="audioInOutFlags"/> + <xs:attribute name="maxOpenCount" type="xs:unsignedInt"/> + <xs:attribute name="maxActiveCount" type="xs:unsignedInt"/> + <xs:attribute name="preferredUsage" type="audioUsageList"> + <xs:annotation> + <xs:documentation xml:lang="en"> + When choosing the mixPort of an audio track, the audioPolicy + first considers the mixPorts with a preferredUsage including + the track AudioUsage preferred . + If non support the track format, the other mixPorts are considered. + Eg: a <mixPort preferredUsage="AUDIO_USAGE_MEDIA" /> will receive + the audio of all apps playing with a MEDIA usage. + It may receive audio from ALARM if there are no audio compatible + <mixPort preferredUsage="AUDIO_USAGE_ALARM" />. + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:complexType> + <xs:unique name="mixPortProfileUniqueness"> + <xs:selector xpath="profile"/> + <xs:field xpath="format"/> + <xs:field xpath="samplingRate"/> + <xs:field xpath="channelMasks"/> + </xs:unique> + <xs:unique name="mixPortGainUniqueness"> + <xs:selector xpath="gains/gain"/> + <xs:field xpath="@name"/> + </xs:unique> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="audioDevice"> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_DEVICE_NONE"/> + + <xs:enumeration value="AUDIO_DEVICE_OUT_EARPIECE"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_SPEAKER"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_WIRED_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_WIRED_HEADPHONE"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_SCO"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_HDMI"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_HDMI_EARC"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_AUX_DIGITAL"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_USB_ACCESSORY"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_USB_DEVICE"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_REMOTE_SUBMIX"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_TELEPHONY_TX"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_LINE"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_HDMI_ARC"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_SPDIF"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_FM"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_AUX_LINE"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_SPEAKER_SAFE"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_IP"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BUS"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_PROXY"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_USB_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_HEARING_AID"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_ECHO_CANCELLER"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLE_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_BLE_SPEAKER"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_DEFAULT"/> + <xs:enumeration value="AUDIO_DEVICE_OUT_STUB"/> + + <xs:enumeration value="AUDIO_DEVICE_IN_COMMUNICATION"/> + <xs:enumeration value="AUDIO_DEVICE_IN_AMBIENT"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BUILTIN_MIC"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_IN_WIRED_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_IN_HDMI"/> + <xs:enumeration value="AUDIO_DEVICE_IN_AUX_DIGITAL"/> + <xs:enumeration value="AUDIO_DEVICE_IN_VOICE_CALL"/> + <xs:enumeration value="AUDIO_DEVICE_IN_TELEPHONY_RX"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BACK_MIC"/> + <xs:enumeration value="AUDIO_DEVICE_IN_REMOTE_SUBMIX"/> + <xs:enumeration value="AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_IN_USB_ACCESSORY"/> + <xs:enumeration value="AUDIO_DEVICE_IN_USB_DEVICE"/> + <xs:enumeration value="AUDIO_DEVICE_IN_FM_TUNER"/> + <xs:enumeration value="AUDIO_DEVICE_IN_TV_TUNER"/> + <xs:enumeration value="AUDIO_DEVICE_IN_LINE"/> + <xs:enumeration value="AUDIO_DEVICE_IN_SPDIF"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BLUETOOTH_A2DP"/> + <xs:enumeration value="AUDIO_DEVICE_IN_LOOPBACK"/> + <xs:enumeration value="AUDIO_DEVICE_IN_IP"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BUS"/> + <xs:enumeration value="AUDIO_DEVICE_IN_PROXY"/> + <xs:enumeration value="AUDIO_DEVICE_IN_USB_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BLUETOOTH_BLE"/> + <xs:enumeration value="AUDIO_DEVICE_IN_HDMI_ARC"/> + <xs:enumeration value="AUDIO_DEVICE_IN_HDMI_EARC"/> + <xs:enumeration value="AUDIO_DEVICE_IN_ECHO_REFERENCE"/> + <xs:enumeration value="AUDIO_DEVICE_IN_BLE_HEADSET"/> + <xs:enumeration value="AUDIO_DEVICE_IN_DEFAULT"/> + <xs:enumeration value="AUDIO_DEVICE_IN_STUB"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="vendorExtension"> + <!-- Vendor extension names must be prefixed by "VX_" to distinguish them from + AOSP values. Vendors must namespace their names to avoid conflicts. The + namespace part must only use capital latin characters and decimal digits and + consist of at least 3 characters. The part of the extension name after the + namespace may in addition include underscores. Example for a hypothetical + Google virtual reality device: + + <devicePort tagName="VR" type="VX_GOOGLE_VR" role="sink" /> + --> + <xs:restriction base="xs:string"> + <xs:pattern value="VX_[A-Z0-9]{3,}_[_A-Z0-9]+"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="extendableAudioDevice"> + <xs:union memberTypes="audioDevice vendorExtension"/> + </xs:simpleType> + <xs:simpleType name="audioFormat"> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_FORMAT_DEFAULT" /> + <xs:enumeration value="AUDIO_FORMAT_PCM_16_BIT" /> + <xs:enumeration value="AUDIO_FORMAT_PCM_8_BIT"/> + <xs:enumeration value="AUDIO_FORMAT_PCM_32_BIT"/> + <xs:enumeration value="AUDIO_FORMAT_PCM_8_24_BIT"/> + <xs:enumeration value="AUDIO_FORMAT_PCM_FLOAT"/> + <xs:enumeration value="AUDIO_FORMAT_PCM_24_BIT_PACKED"/> + <xs:enumeration value="AUDIO_FORMAT_MP3"/> + <xs:enumeration value="AUDIO_FORMAT_AMR_NB"/> + <xs:enumeration value="AUDIO_FORMAT_AMR_WB"/> + <xs:enumeration value="AUDIO_FORMAT_AAC"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_MAIN"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LC"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_SSR"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LTP"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_HE_V1"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_SCALABLE"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ERLC"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LD"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_HE_V2"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ELD"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_XHE"/> + <xs:enumeration value="AUDIO_FORMAT_HE_AAC_V1"/> + <xs:enumeration value="AUDIO_FORMAT_HE_AAC_V2"/> + <xs:enumeration value="AUDIO_FORMAT_VORBIS"/> + <xs:enumeration value="AUDIO_FORMAT_OPUS"/> + <xs:enumeration value="AUDIO_FORMAT_AC3"/> + <xs:enumeration value="AUDIO_FORMAT_E_AC3"/> + <xs:enumeration value="AUDIO_FORMAT_E_AC3_JOC"/> + <xs:enumeration value="AUDIO_FORMAT_DTS"/> + <xs:enumeration value="AUDIO_FORMAT_DTS_HD"/> + <xs:enumeration value="AUDIO_FORMAT_IEC61937"/> + <xs:enumeration value="AUDIO_FORMAT_DOLBY_TRUEHD"/> + <xs:enumeration value="AUDIO_FORMAT_EVRC"/> + <xs:enumeration value="AUDIO_FORMAT_EVRCB"/> + <xs:enumeration value="AUDIO_FORMAT_EVRCWB"/> + <xs:enumeration value="AUDIO_FORMAT_EVRCNW"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADIF"/> + <xs:enumeration value="AUDIO_FORMAT_WMA"/> + <xs:enumeration value="AUDIO_FORMAT_WMA_PRO"/> + <xs:enumeration value="AUDIO_FORMAT_AMR_WB_PLUS"/> + <xs:enumeration value="AUDIO_FORMAT_MP2"/> + <xs:enumeration value="AUDIO_FORMAT_QCELP"/> + <xs:enumeration value="AUDIO_FORMAT_DSD"/> + <xs:enumeration value="AUDIO_FORMAT_FLAC"/> + <xs:enumeration value="AUDIO_FORMAT_ALAC"/> + <xs:enumeration value="AUDIO_FORMAT_APE"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_MAIN"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_LC"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_SSR"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_LTP"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_HE_V1"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_SCALABLE"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_ERLC"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_LD"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_HE_V2"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_ELD"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_ADTS_XHE"/> + <xs:enumeration value="AUDIO_FORMAT_SBC"/> + <xs:enumeration value="AUDIO_FORMAT_APTX"/> + <xs:enumeration value="AUDIO_FORMAT_APTX_HD"/> + <xs:enumeration value="AUDIO_FORMAT_AC4"/> + <xs:enumeration value="AUDIO_FORMAT_LDAC"/> + <xs:enumeration value="AUDIO_FORMAT_MAT"/> + <xs:enumeration value="AUDIO_FORMAT_MAT_1_0"/> + <xs:enumeration value="AUDIO_FORMAT_MAT_2_0"/> + <xs:enumeration value="AUDIO_FORMAT_MAT_2_1"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LATM"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LATM_LC"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LATM_HE_V1"/> + <xs:enumeration value="AUDIO_FORMAT_AAC_LATM_HE_V2"/> + <xs:enumeration value="AUDIO_FORMAT_CELT"/> + <xs:enumeration value="AUDIO_FORMAT_APTX_ADAPTIVE"/> + <xs:enumeration value="AUDIO_FORMAT_LHDC"/> + <xs:enumeration value="AUDIO_FORMAT_LHDC_LL"/> + <xs:enumeration value="AUDIO_FORMAT_APTX_TWSP"/> + <xs:enumeration value="AUDIO_FORMAT_LC3"/> + <xs:enumeration value="AUDIO_FORMAT_MPEGH_BL_L3"/> + <xs:enumeration value="AUDIO_FORMAT_MPEGH_BL_L4"/> + <xs:enumeration value="AUDIO_FORMAT_MPEGH_LC_L3"/> + <xs:enumeration value="AUDIO_FORMAT_MPEGH_LC_L4"/> + <xs:enumeration value="AUDIO_FORMAT_IEC60958"/> + <xs:enumeration value="AUDIO_FORMAT_DTS_UHD"/> + <xs:enumeration value="AUDIO_FORMAT_DRA"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="extendableAudioFormat"> + <xs:union memberTypes="audioFormat vendorExtension"/> + </xs:simpleType> + <xs:simpleType name="audioUsage"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Audio usage specifies the intended use case for the sound being played. + Please consult frameworks/base/media/java/android/media/AudioAttributes.java + for the description of each value. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_USAGE_UNKNOWN" /> + <xs:enumeration value="AUDIO_USAGE_MEDIA" /> + <xs:enumeration value="AUDIO_USAGE_VOICE_COMMUNICATION" /> + <xs:enumeration value="AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING" /> + <xs:enumeration value="AUDIO_USAGE_ALARM" /> + <xs:enumeration value="AUDIO_USAGE_NOTIFICATION" /> + <xs:enumeration value="AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE" /> + <xs:enumeration value="AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY" /> + <xs:enumeration value="AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE" /> + <xs:enumeration value="AUDIO_USAGE_ASSISTANCE_SONIFICATION" /> + <xs:enumeration value="AUDIO_USAGE_GAME" /> + <xs:enumeration value="AUDIO_USAGE_VIRTUAL_SOURCE" /> + <xs:enumeration value="AUDIO_USAGE_ASSISTANT" /> + <xs:enumeration value="AUDIO_USAGE_CALL_ASSISTANT" /> + <xs:enumeration value="AUDIO_USAGE_EMERGENCY" /> + <xs:enumeration value="AUDIO_USAGE_SAFETY" /> + <xs:enumeration value="AUDIO_USAGE_VEHICLE_STATUS" /> + <xs:enumeration value="AUDIO_USAGE_ANNOUNCEMENT" /> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="audioUsageList"> + <xs:list itemType="audioUsage"/> + </xs:simpleType> + <xs:simpleType name="audioContentType"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Audio content type expresses the general category of the content. + Please consult frameworks/base/media/java/android/media/AudioAttributes.java + for the description of each value. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_CONTENT_TYPE_UNKNOWN"/> + <xs:enumeration value="AUDIO_CONTENT_TYPE_SPEECH"/> + <xs:enumeration value="AUDIO_CONTENT_TYPE_MUSIC"/> + <xs:enumeration value="AUDIO_CONTENT_TYPE_MOVIE"/> + <xs:enumeration value="AUDIO_CONTENT_TYPE_SONIFICATION"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="samplingRates"> + <xs:list itemType="xs:nonNegativeInteger" /> + </xs:simpleType> + <xs:simpleType name="audioChannelMask"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Audio channel mask specifies presence of particular channels. + There are two representations: + - representation position (traditional discrete channel specification, + e.g. "left", "right"); + - indexed (this is similar to "tracks" in audio mixing, channels + are represented using numbers). + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_CHANNEL_NONE"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_MONO"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_STEREO"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_2POINT1"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_TRI"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_TRI_BACK"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_3POINT1"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_2POINT0POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_2POINT1POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_3POINT0POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_3POINT1POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_QUAD"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_QUAD_BACK"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_QUAD_SIDE"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_SURROUND"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_PENTA"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_5POINT1"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_5POINT1_BACK"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_5POINT1_SIDE"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_5POINT1POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_5POINT1POINT4"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_6POINT1"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_7POINT1"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_7POINT1POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_7POINT1POINT4"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_13POINT_360RA"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_22POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_MONO_HAPTIC_A"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_HAPTIC_AB"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_MONO_HAPTIC_AB"/> + <xs:enumeration value="AUDIO_CHANNEL_OUT_STEREO_HAPTIC_AB"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_MONO"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_STEREO"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_FRONT_BACK"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_6"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_2POINT0POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_2POINT1POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_3POINT0POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_3POINT1POINT2"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_5POINT1"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO"/> + <xs:enumeration value="AUDIO_CHANNEL_IN_VOICE_CALL_MONO"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_1"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_2"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_3"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_4"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_5"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_6"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_7"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_8"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_9"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_10"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_11"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_12"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_13"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_14"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_15"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_16"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_17"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_18"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_19"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_20"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_21"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_22"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_23"/> + <xs:enumeration value="AUDIO_CHANNEL_INDEX_MASK_24"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="channelMasks"> + <xs:list itemType="audioChannelMask" /> + </xs:simpleType> + <xs:simpleType name="audioEncapsulationType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_ENCAPSULATION_TYPE_NONE"/> + <xs:enumeration value="AUDIO_ENCAPSULATION_TYPE_IEC61937"/> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="profile"> + <xs:attribute name="name" type="xs:token" use="optional"/> + <xs:attribute name="format" type="extendableAudioFormat" use="optional"/> + <xs:attribute name="samplingRates" type="samplingRates" use="optional"/> + <xs:attribute name="channelMasks" type="channelMasks" use="optional"/> + <xs:attribute name="encapsulationType" type="audioEncapsulationType" use="optional"/> + </xs:complexType> + <xs:simpleType name="audioGainMode"> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_GAIN_MODE_JOINT"/> + <xs:enumeration value="AUDIO_GAIN_MODE_CHANNELS"/> + <xs:enumeration value="AUDIO_GAIN_MODE_RAMP"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="audioGainModeMaskUnrestricted"> + <xs:list itemType="audioGainMode" /> + </xs:simpleType> + <xs:simpleType name='audioGainModeMask'> + <xs:restriction base='audioGainModeMaskUnrestricted'> + <xs:minLength value='1' /> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="gains"> + <xs:sequence> + <xs:element name="gain" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:attribute name="name" type="xs:token" use="required"/> + <xs:attribute name="mode" type="audioGainModeMask" use="required"/> + <xs:attribute name="channel_mask" type="audioChannelMask" use="optional"/> + <xs:attribute name="minValueMB" type="xs:int" use="optional"/> + <xs:attribute name="maxValueMB" type="xs:int" use="optional"/> + <xs:attribute name="defaultValueMB" type="xs:int" use="optional"/> + <xs:attribute name="stepValueMB" type="xs:int" use="optional"/> + <xs:attribute name="minRampMs" type="xs:int" use="optional"/> + <xs:attribute name="maxRampMs" type="xs:int" use="optional"/> + <xs:attribute name="useForVolume" type="xs:boolean" use="optional"/> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="devicePorts"> + <xs:sequence> + <xs:element name="devicePort" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:sequence> + <xs:element name="profile" type="profile" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="gains" type="gains" minOccurs="0"/> + </xs:sequence> + <xs:attribute name="tagName" type="xs:token" use="required"/> + <xs:attribute name="type" type="extendableAudioDevice" use="required"/> + <xs:attribute name="role" type="role" use="required"/> + <xs:attribute name="address" type="xs:string" use="optional" default=""/> + <!-- Note that XSD 1.0 can not check that a type only has one default. --> + <xs:attribute name="default" type="xs:boolean" use="optional"> + <xs:annotation> + <xs:documentation xml:lang="en"> + The default device will be used if multiple have the same type + and no explicit route request exists for a specific device of + that type. + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="encodedFormats" type="audioFormatsList" use="optional" + default="" /> + </xs:complexType> + <xs:unique name="devicePortProfileUniqueness"> + <xs:selector xpath="profile"/> + <xs:field xpath="format"/> + <xs:field xpath="samplingRate"/> + <xs:field xpath="channelMasks"/> + </xs:unique> + <xs:unique name="devicePortGainUniqueness"> + <xs:selector xpath="gains/gain"/> + <xs:field xpath="@name"/> + </xs:unique> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="mixType"> + <xs:restriction base="xs:string"> + <xs:enumeration value="mix"/> + <xs:enumeration value="mux"/> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="routes"> + <xs:sequence> + <xs:element name="route" minOccurs="0" maxOccurs="unbounded"> + <xs:annotation> + <xs:documentation xml:lang="en"> + List all available sources for a given sink. + </xs:documentation> + </xs:annotation> + <xs:complexType> + <xs:attribute name="type" type="mixType" use="required"/> + <xs:attribute name="sink" type="xs:string" use="required"/> + <xs:attribute name="sources" type="xs:string" use="required"/> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:complexType name="volumes"> + <xs:sequence> + <xs:element name="volume" type="volume" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="reference" type="reference" minOccurs="0" maxOccurs="unbounded"> + </xs:element> + </xs:sequence> + </xs:complexType> + <!-- TODO: Always require a ref for better xsd validations. + Currently a volume could have no points nor ref + as it can not be forbidden by xsd 1.0.--> + <xs:simpleType name="volumePoint"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Comma separated pair of number. + The fist one is the framework level (between 0 and 100). + The second one is the volume to send to the HAL. + The framework will interpolate volumes not specified. + Their MUST be at least 2 points specified. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:pattern value="([0-9]{1,2}|100),-?[0-9]+"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="audioStreamType"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Audio stream type describing the intended use case of a stream. + Please consult frameworks/base/media/java/android/media/AudioSystem.java + for the description of each value. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_STREAM_VOICE_CALL"/> + <xs:enumeration value="AUDIO_STREAM_SYSTEM"/> + <xs:enumeration value="AUDIO_STREAM_RING"/> + <xs:enumeration value="AUDIO_STREAM_MUSIC"/> + <xs:enumeration value="AUDIO_STREAM_ALARM"/> + <xs:enumeration value="AUDIO_STREAM_NOTIFICATION"/> + <xs:enumeration value="AUDIO_STREAM_BLUETOOTH_SCO"/> + <xs:enumeration value="AUDIO_STREAM_ENFORCED_AUDIBLE"/> + <xs:enumeration value="AUDIO_STREAM_DTMF"/> + <xs:enumeration value="AUDIO_STREAM_TTS"/> + <xs:enumeration value="AUDIO_STREAM_ACCESSIBILITY"/> + <xs:enumeration value="AUDIO_STREAM_ASSISTANT"/> + <xs:enumeration value="AUDIO_STREAM_REROUTING"/> + <xs:enumeration value="AUDIO_STREAM_PATCH"/> + <xs:enumeration value="AUDIO_STREAM_CALL_ASSISTANT"/> + </xs:restriction> + </xs:simpleType> + <xs:simpleType name="audioSource"> + <xs:annotation> + <xs:documentation xml:lang="en"> + An audio source defines the intended use case for the sound being recorded. + Please consult frameworks/base/media/java/android/media/MediaRecorder.java + for the description of each value. + </xs:documentation> + </xs:annotation> + <xs:restriction base="xs:string"> + <xs:enumeration value="AUDIO_SOURCE_DEFAULT"/> + <xs:enumeration value="AUDIO_SOURCE_MIC"/> + <xs:enumeration value="AUDIO_SOURCE_VOICE_UPLINK"/> + <xs:enumeration value="AUDIO_SOURCE_VOICE_DOWNLINK"/> + <xs:enumeration value="AUDIO_SOURCE_VOICE_CALL"/> + <xs:enumeration value="AUDIO_SOURCE_CAMCORDER"/> + <xs:enumeration value="AUDIO_SOURCE_VOICE_RECOGNITION"/> + <xs:enumeration value="AUDIO_SOURCE_VOICE_COMMUNICATION"/> + <xs:enumeration value="AUDIO_SOURCE_REMOTE_SUBMIX"/> + <xs:enumeration value="AUDIO_SOURCE_UNPROCESSED"/> + <xs:enumeration value="AUDIO_SOURCE_VOICE_PERFORMANCE"/> + <xs:enumeration value="AUDIO_SOURCE_ECHO_REFERENCE"/> + <xs:enumeration value="AUDIO_SOURCE_FM_TUNER"/> + <xs:enumeration value="AUDIO_SOURCE_HOTWORD"/> + </xs:restriction> + </xs:simpleType> + <!-- Enum values of device_category from Volume.h. --> + <xs:simpleType name="deviceCategory"> + <xs:restriction base="xs:string"> + <xs:enumeration value="DEVICE_CATEGORY_HEADSET"/> + <xs:enumeration value="DEVICE_CATEGORY_SPEAKER"/> + <xs:enumeration value="DEVICE_CATEGORY_EARPIECE"/> + <xs:enumeration value="DEVICE_CATEGORY_EXT_MEDIA"/> + <xs:enumeration value="DEVICE_CATEGORY_HEARING_AID"/> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="volume"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Volume section defines a volume curve for a given use case and device category. + It contains a list of points of this curve expressing the attenuation in Millibels + for a given volume index from 0 to 100. + <volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_SPEAKER"> + <point>0,-9600</point> + <point>100,0</point> + </volume> + + It may also reference a reference/@name to avoid duplicating curves. + <volume stream="AUDIO_STREAM_MUSIC" deviceCategory="DEVICE_CATEGORY_SPEAKER" + ref="DEFAULT_MEDIA_VOLUME_CURVE"/> + <reference name="DEFAULT_MEDIA_VOLUME_CURVE"> + <point>0,-9600</point> + <point>100,0</point> + </reference> + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="point" type="volumePoint" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="stream" type="audioStreamType"/> + <xs:attribute name="deviceCategory" type="deviceCategory"/> + <xs:attribute name="ref" type="xs:token" use="optional"/> + </xs:complexType> + <xs:complexType name="reference"> + <xs:sequence> + <xs:element name="point" type="volumePoint" minOccurs="2" maxOccurs="unbounded"/> + </xs:sequence> + <xs:attribute name="name" type="xs:token" use="required"/> + </xs:complexType> + <xs:complexType name="surroundSound"> + <xs:annotation> + <xs:documentation xml:lang="en"> + Surround Sound section provides configuration related to handling of + multi-channel formats. + </xs:documentation> + </xs:annotation> + <xs:sequence> + <xs:element name="formats" type="surroundFormats"/> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="audioFormatsList"> + <xs:list itemType="extendableAudioFormat" /> + </xs:simpleType> + <xs:complexType name="surroundFormats"> + <xs:sequence> + <xs:element name="format" minOccurs="0" maxOccurs="unbounded"> + <xs:complexType> + <xs:attribute name="name" type="extendableAudioFormat" use="required"/> + <xs:attribute name="subformats" type="audioFormatsList" /> + </xs:complexType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="engineSuffix"> + <xs:restriction base="xs:string"> + <xs:enumeration value="default"/> + <xs:enumeration value="configurable"/> + </xs:restriction> + </xs:simpleType> +</xs:schema> diff --git a/audio/common/7.1/Android.bp b/audio/common/7.1/Android.bp new file mode 100644 index 0000000000..a2575104e6 --- /dev/null +++ b/audio/common/7.1/Android.bp @@ -0,0 +1,23 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_interfaces_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_interfaces_license"], +} + +cc_library { + name: "android.hardware.audio.common@7.1-enums", + vendor_available: true, + generated_headers: ["audio_policy_configuration_V7_1_enums"], + generated_sources: ["audio_policy_configuration_V7_1_enums"], + header_libs: ["libxsdc-utils"], + export_generated_headers: ["audio_policy_configuration_V7_1_enums"], + export_header_lib_headers: ["libxsdc-utils"], + export_include_dirs: ["enums/include"], + shared_libs: [ + "libbase", + "liblog", + ], +} diff --git a/audio/common/7.1/enums/OWNERS b/audio/common/7.1/enums/OWNERS new file mode 100644 index 0000000000..24071af220 --- /dev/null +++ b/audio/common/7.1/enums/OWNERS @@ -0,0 +1,2 @@ +elaurent@google.com +mnaganov@google.com diff --git a/audio/common/7.1/enums/include/android_audio_policy_configuration_V7_1-enums.h b/audio/common/7.1/enums/include/android_audio_policy_configuration_V7_1-enums.h new file mode 100644 index 0000000000..815f869e93 --- /dev/null +++ b/audio/common/7.1/enums/include/android_audio_policy_configuration_V7_1-enums.h @@ -0,0 +1,300 @@ +/* + * Copyright (C) 2022 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. + */ + +#ifndef ANDROID_AUDIO_POLICY_CONFIGURATION_V7_1__ENUMS_H +#define ANDROID_AUDIO_POLICY_CONFIGURATION_V7_1__ENUMS_H + +#include <sys/types.h> +#include <regex> +#include <string> + +#include <android_audio_policy_configuration_V7_1_enums.h> + +namespace android::audio::policy::configuration::V7_1 { + +static inline size_t getChannelCount(AudioChannelMask mask) { + switch (mask) { + case AudioChannelMask::AUDIO_CHANNEL_NONE: + return 0; + case AudioChannelMask::AUDIO_CHANNEL_OUT_MONO: + case AudioChannelMask::AUDIO_CHANNEL_IN_MONO: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_1: + return 1; + case AudioChannelMask::AUDIO_CHANNEL_OUT_STEREO: + case AudioChannelMask::AUDIO_CHANNEL_OUT_MONO_HAPTIC_A: + case AudioChannelMask::AUDIO_CHANNEL_OUT_HAPTIC_AB: + case AudioChannelMask::AUDIO_CHANNEL_IN_STEREO: + case AudioChannelMask::AUDIO_CHANNEL_IN_FRONT_BACK: + case AudioChannelMask::AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO: + case AudioChannelMask::AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO: + case AudioChannelMask::AUDIO_CHANNEL_IN_VOICE_CALL_MONO: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_2: + return 2; + case AudioChannelMask::AUDIO_CHANNEL_OUT_2POINT1: + case AudioChannelMask::AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A: + case AudioChannelMask::AUDIO_CHANNEL_OUT_MONO_HAPTIC_AB: + case AudioChannelMask::AUDIO_CHANNEL_OUT_TRI: + case AudioChannelMask::AUDIO_CHANNEL_OUT_TRI_BACK: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_3: + return 3; + case AudioChannelMask::AUDIO_CHANNEL_OUT_2POINT0POINT2: + case AudioChannelMask::AUDIO_CHANNEL_OUT_3POINT1: + case AudioChannelMask::AUDIO_CHANNEL_OUT_QUAD: + case AudioChannelMask::AUDIO_CHANNEL_OUT_QUAD_BACK: + case AudioChannelMask::AUDIO_CHANNEL_OUT_QUAD_SIDE: + case AudioChannelMask::AUDIO_CHANNEL_OUT_SURROUND: + case AudioChannelMask::AUDIO_CHANNEL_OUT_STEREO_HAPTIC_AB: + case AudioChannelMask::AUDIO_CHANNEL_IN_2POINT0POINT2: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_4: + return 4; + case AudioChannelMask::AUDIO_CHANNEL_OUT_2POINT1POINT2: + case AudioChannelMask::AUDIO_CHANNEL_OUT_3POINT0POINT2: + case AudioChannelMask::AUDIO_CHANNEL_OUT_PENTA: + case AudioChannelMask::AUDIO_CHANNEL_IN_2POINT1POINT2: + case AudioChannelMask::AUDIO_CHANNEL_IN_3POINT0POINT2: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_5: + return 5; + case AudioChannelMask::AUDIO_CHANNEL_OUT_3POINT1POINT2: + case AudioChannelMask::AUDIO_CHANNEL_OUT_5POINT1: + case AudioChannelMask::AUDIO_CHANNEL_OUT_5POINT1_BACK: + case AudioChannelMask::AUDIO_CHANNEL_OUT_5POINT1_SIDE: + case AudioChannelMask::AUDIO_CHANNEL_IN_6: + case AudioChannelMask::AUDIO_CHANNEL_IN_3POINT1POINT2: + case AudioChannelMask::AUDIO_CHANNEL_IN_5POINT1: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_6: + return 6; + case AudioChannelMask::AUDIO_CHANNEL_OUT_6POINT1: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_7: + return 7; + case AudioChannelMask::AUDIO_CHANNEL_OUT_5POINT1POINT2: + case AudioChannelMask::AUDIO_CHANNEL_OUT_7POINT1: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_8: + return 8; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_9: + return 9; + case AudioChannelMask::AUDIO_CHANNEL_OUT_5POINT1POINT4: + case AudioChannelMask::AUDIO_CHANNEL_OUT_7POINT1POINT2: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_10: + return 10; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_11: + return 11; + case AudioChannelMask::AUDIO_CHANNEL_OUT_7POINT1POINT4: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_12: + return 12; + case AudioChannelMask::AUDIO_CHANNEL_OUT_13POINT_360RA: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_13: + return 13; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_14: + return 14; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_15: + return 15; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_16: + return 16; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_17: + return 17; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_18: + return 18; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_19: + return 19; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_20: + return 20; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_21: + return 21; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_22: + return 22; + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_23: + return 23; + case AudioChannelMask::AUDIO_CHANNEL_OUT_22POINT2: + case AudioChannelMask::AUDIO_CHANNEL_INDEX_MASK_24: + return 24; + case AudioChannelMask::UNKNOWN: + return 0; + // No default to make sure all cases are covered. + } + // This is to avoid undefined behavior if 'mask' isn't a valid enum value. + return 0; +} + +static inline ssize_t getChannelCount(const std::string& mask) { + return getChannelCount(stringToAudioChannelMask(mask)); +} + +static inline bool isOutputDevice(AudioDevice device) { + switch (device) { + case AudioDevice::UNKNOWN: + case AudioDevice::AUDIO_DEVICE_NONE: + return false; + case AudioDevice::AUDIO_DEVICE_OUT_EARPIECE: + case AudioDevice::AUDIO_DEVICE_OUT_SPEAKER: + case AudioDevice::AUDIO_DEVICE_OUT_WIRED_HEADSET: + case AudioDevice::AUDIO_DEVICE_OUT_WIRED_HEADPHONE: + case AudioDevice::AUDIO_DEVICE_OUT_BLUETOOTH_SCO: + case AudioDevice::AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET: + case AudioDevice::AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT: + case AudioDevice::AUDIO_DEVICE_OUT_BLUETOOTH_A2DP: + case AudioDevice::AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES: + case AudioDevice::AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER: + case AudioDevice::AUDIO_DEVICE_OUT_AUX_DIGITAL: + case AudioDevice::AUDIO_DEVICE_OUT_HDMI: + case AudioDevice::AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET: + case AudioDevice::AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET: + case AudioDevice::AUDIO_DEVICE_OUT_USB_ACCESSORY: + case AudioDevice::AUDIO_DEVICE_OUT_USB_DEVICE: + case AudioDevice::AUDIO_DEVICE_OUT_REMOTE_SUBMIX: + case AudioDevice::AUDIO_DEVICE_OUT_TELEPHONY_TX: + case AudioDevice::AUDIO_DEVICE_OUT_LINE: + case AudioDevice::AUDIO_DEVICE_OUT_HDMI_ARC: + case AudioDevice::AUDIO_DEVICE_OUT_HDMI_EARC: + case AudioDevice::AUDIO_DEVICE_OUT_SPDIF: + case AudioDevice::AUDIO_DEVICE_OUT_FM: + case AudioDevice::AUDIO_DEVICE_OUT_AUX_LINE: + case AudioDevice::AUDIO_DEVICE_OUT_SPEAKER_SAFE: + case AudioDevice::AUDIO_DEVICE_OUT_IP: + case AudioDevice::AUDIO_DEVICE_OUT_BUS: + case AudioDevice::AUDIO_DEVICE_OUT_PROXY: + case AudioDevice::AUDIO_DEVICE_OUT_USB_HEADSET: + case AudioDevice::AUDIO_DEVICE_OUT_HEARING_AID: + case AudioDevice::AUDIO_DEVICE_OUT_ECHO_CANCELLER: + case AudioDevice::AUDIO_DEVICE_OUT_BLE_HEADSET: + case AudioDevice::AUDIO_DEVICE_OUT_BLE_SPEAKER: + case AudioDevice::AUDIO_DEVICE_OUT_DEFAULT: + case AudioDevice::AUDIO_DEVICE_OUT_STUB: + return true; + case AudioDevice::AUDIO_DEVICE_IN_COMMUNICATION: + case AudioDevice::AUDIO_DEVICE_IN_AMBIENT: + case AudioDevice::AUDIO_DEVICE_IN_BUILTIN_MIC: + case AudioDevice::AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET: + case AudioDevice::AUDIO_DEVICE_IN_WIRED_HEADSET: + case AudioDevice::AUDIO_DEVICE_IN_AUX_DIGITAL: + case AudioDevice::AUDIO_DEVICE_IN_HDMI: + case AudioDevice::AUDIO_DEVICE_IN_VOICE_CALL: + case AudioDevice::AUDIO_DEVICE_IN_TELEPHONY_RX: + case AudioDevice::AUDIO_DEVICE_IN_BACK_MIC: + case AudioDevice::AUDIO_DEVICE_IN_REMOTE_SUBMIX: + case AudioDevice::AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET: + case AudioDevice::AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET: + case AudioDevice::AUDIO_DEVICE_IN_USB_ACCESSORY: + case AudioDevice::AUDIO_DEVICE_IN_USB_DEVICE: + case AudioDevice::AUDIO_DEVICE_IN_FM_TUNER: + case AudioDevice::AUDIO_DEVICE_IN_TV_TUNER: + case AudioDevice::AUDIO_DEVICE_IN_LINE: + case AudioDevice::AUDIO_DEVICE_IN_SPDIF: + case AudioDevice::AUDIO_DEVICE_IN_BLUETOOTH_A2DP: + case AudioDevice::AUDIO_DEVICE_IN_LOOPBACK: + case AudioDevice::AUDIO_DEVICE_IN_IP: + case AudioDevice::AUDIO_DEVICE_IN_BUS: + case AudioDevice::AUDIO_DEVICE_IN_PROXY: + case AudioDevice::AUDIO_DEVICE_IN_USB_HEADSET: + case AudioDevice::AUDIO_DEVICE_IN_BLUETOOTH_BLE: + case AudioDevice::AUDIO_DEVICE_IN_HDMI_ARC: + case AudioDevice::AUDIO_DEVICE_IN_HDMI_EARC: + case AudioDevice::AUDIO_DEVICE_IN_ECHO_REFERENCE: + case AudioDevice::AUDIO_DEVICE_IN_BLE_HEADSET: + case AudioDevice::AUDIO_DEVICE_IN_DEFAULT: + case AudioDevice::AUDIO_DEVICE_IN_STUB: + return false; + // No default to make sure all cases are covered. + } + // This is to avoid undefined behavior if 'device' isn't a valid enum value. + return false; +} + +static inline bool isOutputDevice(const std::string& device) { + return isOutputDevice(stringToAudioDevice(device)); +} + +static inline bool isTelephonyDevice(AudioDevice device) { + return device == AudioDevice::AUDIO_DEVICE_OUT_TELEPHONY_TX || + device == AudioDevice::AUDIO_DEVICE_IN_TELEPHONY_RX; +} + +static inline bool isTelephonyDevice(const std::string& device) { + return isTelephonyDevice(stringToAudioDevice(device)); +} + +static inline bool maybeVendorExtension(const std::string& s) { + // Only checks whether the string starts with the "vendor prefix". + static const std::string vendorPrefix = "VX_"; + return s.size() > vendorPrefix.size() && s.substr(0, vendorPrefix.size()) == vendorPrefix; +} + +static inline bool isVendorExtension(const std::string& s) { + // Must be the same as the "vendorExtension" rule from the XSD file. + static const std::regex vendorExtension("VX_[A-Z0-9]{3,}_[_A-Z0-9]+"); + return std::regex_match(s.begin(), s.end(), vendorExtension); +} + +static inline bool isUnknownAudioChannelMask(const std::string& mask) { + return stringToAudioChannelMask(mask) == AudioChannelMask::UNKNOWN; +} + +static inline bool isUnknownAudioContentType(const std::string& contentType) { + return stringToAudioContentType(contentType) == AudioContentType::UNKNOWN; +} + +static inline bool isUnknownAudioDevice(const std::string& device) { + return stringToAudioDevice(device) == AudioDevice::UNKNOWN && !isVendorExtension(device); +} + +static inline bool isUnknownAudioFormat(const std::string& format) { + return stringToAudioFormat(format) == AudioFormat::UNKNOWN && !isVendorExtension(format); +} + +static inline bool isUnknownAudioGainMode(const std::string& mode) { + return stringToAudioGainMode(mode) == AudioGainMode::UNKNOWN; +} + +static inline bool isUnknownAudioInOutFlag(const std::string& flag) { + return stringToAudioInOutFlag(flag) == AudioInOutFlag::UNKNOWN; +} + +static inline bool isUnknownAudioSource(const std::string& source) { + return stringToAudioSource(source) == AudioSource::UNKNOWN; +} + +static inline bool isUnknownAudioStreamType(const std::string& streamType) { + return stringToAudioStreamType(streamType) == AudioStreamType::UNKNOWN; +} + +static inline bool isUnknownAudioUsage(const std::string& usage) { + return stringToAudioUsage(usage) == AudioUsage::UNKNOWN; +} + +static inline bool isLinearPcm(AudioFormat format) { + switch (format) { + case AudioFormat::AUDIO_FORMAT_PCM_16_BIT: + case AudioFormat::AUDIO_FORMAT_PCM_8_BIT: + case AudioFormat::AUDIO_FORMAT_PCM_32_BIT: + case AudioFormat::AUDIO_FORMAT_PCM_8_24_BIT: + case AudioFormat::AUDIO_FORMAT_PCM_FLOAT: + case AudioFormat::AUDIO_FORMAT_PCM_24_BIT_PACKED: + return true; + default: + return false; + } +} + +static inline bool isLinearPcm(const std::string& format) { + return isLinearPcm(stringToAudioFormat(format)); +} + +static inline bool isUnknownAudioEncapsulationType(const std::string& encapsulationType) { + return stringToAudioEncapsulationType(encapsulationType) == AudioEncapsulationType::UNKNOWN; +} + +} // namespace android::audio::policy::configuration::V7_1 + +#endif // ANDROID_AUDIO_POLICY_CONFIGURATION_V7_1__ENUMS_H |