Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Audio HAL

Hardware de audio capa de abstracción de Android (HAL) conecta los de más alto nivel, APIs marco de audio específicos en android.media a los controladores y el hardware de audio subyacentes. Audio HAL define la interfaz estándar a la que llaman los servicios de audio. Debe implementarse para que el hardware de audio funcione correctamente.

Esta página ofrece una descripción general de la HAL de audio y proporciona detalles de su API y los requisitos de implementación.

Interfaz de audio HAL

La interfaz de audio HAL se define utilizando HIDL en .hal archivos y XSD esquemas para los archivos de configuración, que se muestra como sigue:

audio_hal

Figura 1: Interfaz de Audio HAL

Archivos de configuración

Los archivos de configuración XML de políticas de audio y efectos de audio se consideran parte de la interfaz Audio HAL. Estos archivos deben ajustarse a sus esquemas y la conformidad se verifica mediante pruebas de VTS.

Como parte de la aplicación de la HAL de audio, se debe crear un archivo de configuración de políticas de audio que describe la topología de audio. Capacidades de audio HAL deben ser declarados en el audio_policy_configuration.xml archivo para el marco de usarlos.

API de audio HAL

El audio HAL contiene las siguientes API:

  • Core HAL
  • Efectos HAL
  • HAL común

Cada una de estas API se describe en las siguientes secciones.

Core HAL

El Core HAL es la API principal utilizada por AudioFlinger para reproducir audio y controlar el enrutamiento de audio. Algunas de las interfaces clave son las siguientes:

  • IDeviceFactory.hal es el punto de entrada en la API.
  • IDevice.hal y IPrimaryDevice.hal contienen métodos tales como setMasterVolume o openInputStream .
  • Flujos son unidireccionales y son utilizados por AudioFlinger para enviar o recibir audio desde y hacia el HAL través IStream.hal , IStreamOut.hal y IStreamIn.hal .

La siguiente tabla enumera la ubicación de los componentes básicos de HAL útiles:

Componente principal de HAL Localización
Última versión de API /hardware/interfaces/audio/6.0
Tipos específicos de la última API Core HAL /hardware/interfaces/audio/6.0/types.hal
Esquema XSD del archivo de configuración de la política de audio /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

La implementación predeterminada de la API Core HAL ( /hardware/interfaces/audio/core/all-versions/default/ ) es una envoltura alrededor de la aplicación pre-Agudo de HAL usando bibliotecas heredadas compartida . La implementación predeterminada también se puede considerar como una referencia al implementar nuevas versiones de HAL de audio que interactúan directamente con los controladores del kernel.

Efectos HAL

El marco de efectos utiliza la API de HAL de efectos para controlar los efectos de audio. También puede configurar pre-procesamiento de efectos tales como el control automático de ganancia y la supresión del ruido a través de la API Efectos HAL.

La siguiente tabla enumera la ubicación de los componentes de efectos útiles de HAL:

Efectos componente HAL Localización
Última versión de API /hardware/interfaces/audio/effect/6.0/
Esquema XSD del archivo de configuración de efectos /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

Para obtener más información, vea un ejemplo de implementación de la API de Efectos ( /hardware/interfaces/audio/effect/all-versions/default/ ) y el de efectos de audio sección.

HAL común

Common HAL es una biblioteca de tipos de datos comunes que utilizan las API de HAL Core y Effects. No tiene interfaces ni pruebas VTS asociadas, ya que solo define estructuras de datos. La API de Common HAL contiene lo siguiente:

  • Definiciones ( /hardware/interfaces/audio/common/6.0/types.hal ) compartidos por el núcleo y las API de efectos.
  • Utilidades ( /hardware/interfaces/audio/common/all-versions ) se utiliza para la codificación de ayuda contra las API HIDL para las implementaciones, los clientes y las pruebas.

Requisitos

Además de implementar la HAL de audio y crear el archivo de configuración de la política de audio, se deben cumplir los siguientes requisitos de HAL:

  • Si la captura para Sound Trigger (captura desde el búfer DSP de palabra activa) es compatible con un perfil de entrada, la implementación debe admitir el número de transmisiones activas en este perfil correspondiente al número de sesiones simultáneas admitidas por Sound Trigger HAL.
  • Concurrencia de llamada de voz TX y captura desde el procesador de aplicaciones como se detalla en la captura simultánea página.

Actualizaciones del Audio HAL V7

Para abordar los problemas de compatibilidad con versiones anteriores, el AIDL estable es obligatorio para todos los cambios de HAL a partir de Android T.Para admitir y mejorar la adopción de AIDL en Android T y versiones posteriores, Audio HAL V7 hace lo siguiente:

  • Unifica los modelos de datos utilizados por el framework y HAL.
  • Minimiza la duplicación entre los tipos de datos HIDL (enumeraciones) y el esquema XML utilizado para la configuración de la política de audio.

Específicamente, se realizan cambios en las siguientes áreas en audio HAL V7:

Estos cambios se analizan con más detalle en sus respectivas secciones.

Enumeraciones

A partir de Audio HAL V7, los tipos enumerados que se utilizan en el archivo de configuración de la política de audio solo se definen en el esquema XSD y no en el HIDL.

En el audio HAL V6, los valores de enum tipos (como AudioFormat ) en types.hal también se definen en la configuración política de esquema de archivo XSD de audio, creando una duplicación. Para evitar esto en V7, la enum tipos se cambian de string y todos los posibles valores de la enumeración se enumeran en el esquema XSD en su lugar.

Véase la figura 1 para una comparación de algunos de los cambios en la AudioFormat enum tipo de V7:

audioformat-change

Figura 1: Comparación de algunos de los cambios en el AudioFormat enum

Consulte la siguiente lista para los enum tipos que han sido convertidos en String :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : proveedor extensible
  • AudioFormat : proveedor extensible
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

Pasando String valores de enumeración

Los valores de cadena se utilizan para transferir información como valores de enumeración a través del límite de la interfaz HAL. Tanto el marco y la HAL envoltura valores de enumeración uso de enteros para implementar la lógica de negocio y emplear el enfoque de conversión representado en la figura 2 .

audio-passing-values

Figura 2: Paso de string enum valores

Como ejemplo, para pasar un valor de tipo de formato de audio del marco al proveedor:

  1. El enum valor de AudioFormat se convierte en una string valor en libaudiohal y se pasa a la HAL.
  2. En el lado HAL, el default wrapper convierte la string a una enum de valor que se pasa a la HAL legado.

Cambios en el esquema XML

Tener listas completas de valores de enumeración en el esquema XML (XSD) permite una mejor validación del archivo XML de configuración de políticas de audio por parte de VTS. Los cambios se realizan en el archivo de configuración de la política de audio que se utiliza con HAL V7 para cumplir con XSD.

En V7, un estándar (espacio) se utiliza para delimitar las listas de valores de atributos (como velocidades de muestreo de máscaras de canales y banderas), en lugar de la , (coma) y | (barra vertical) símbolos utilizados en V6 y siguientes. Como se ve en el siguiente ejemplo, un espacio se utiliza para delimitar la lista de valores para channelMasks :

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Para realizar los cambios de símbolos, utilizar un script de conversión automática de llamada update_audio_policy_config.sh . Consulte el siguiente comando para convertir un archivo de configuración de política de audio V6 a una versión V7 para el dispositivo Pixel 5 ("Redfin"):

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

Tipos de datos

Algunas estructuras de datos se redefinen en V7 para minimizar las definiciones duplicadas. Las tuplas repetidas de elementos de datos se agrupan en estructuras reutilizables. Estas estructuras de datos utilizan las últimas funciones de HIDL, como uniones seguras.

Por ejemplo, en V6 y por debajo de, un triple de <format, sampling rate, channel mask> se utiliza a menudo en las interfaces HIDL y tipos. Para eliminar esta redundancia, en V7, la AudioConfigBase tipo de datos y otros tipos de datos se definen como sigue:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    utilizado por AudioConfig , AudioOffloadInfo , AudioPortConfig

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    reemplaza colecciones sueltas en AudioPort/PortConfig

  • AudioPortExtendedInfo := device | mix | session

    sustituye a los sindicatos en AudioPort/PortConfig

Etiquetas de proveedor

Además de los tipos y formatos de dispositivos, los proveedores pueden agregar etiquetas personalizadas para los metadatos de las pistas de audio.

Para la reproducción y grabación de metadatos de pistas, los proveedores pueden pasar sus propias etiquetas, que se utilizan para agregar atributos a las transmisiones de E / S de audio, desde las aplicaciones hasta la HAL.

Las etiquetas de proveedor para los metadatos de la pista de reproducción se agregan como se ve en el siguiente ejemplo:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

El RecordTrackMetadata estructura se implementa de manera similar mediante la adición de etiquetas específicas para los metadatos pista de grabación.

Espaciado de nombres de extensiones de proveedor

A partir de HAL V7, vendedor extensiones requieren un adicional de {vendor} de prefijo que no se requiere en V6. Para el {vendor} prefijo para que sea válida, debe ser tres o más caracteres alfanuméricos.

Utilice el siguiente formato en V7:

VX_ {} _ {vendedor letras / números / _}

A continuación, se muestran algunos ejemplos de extensiones de proveedores V7 válidas:

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

Información de versión

La siguiente tabla enumera el número de versión de HAL para cada versión de Android.

versión de Android Versión HAL
Android 12 7.0
Android 11 6.0
Android 10 5,0
Android 9 4.0
Android 8 2.0