No Android 13 e versões anteriores, a interface HAL de áudio é
definidos usando HIDL em arquivos HIDL HAL (com o
extensão .hal
) e
Esquemas XSD para
os arquivos de configuração, mostrados a seguir.
Figura 1. Interface HAL de áudio.
Arquivos de configuração
Os arquivos de configuração XML de política de áudio e efeitos de áudio são considerados parte da interface HAL de áudio HIDL. Esses arquivos precisam estar em conformidade com os esquemas. a conformidade é verificada por testes VTS.
Como parte da implementação da HAL de áudio HIDL, é preciso criar uma
arquivo de configuração da política de áudio
que descreve a topologia de áudio. Os recursos de HAL de áudio precisam ser declarados em
o arquivo audio_policy_configuration.xml
para que o framework os use.
API Audio HIDL HAL
Esta seção descreve as APIs Core, Efeitos e HAL comuns para HIDL.
HAL principal
Algumas das principais interfaces do Core HAL que usam HIDL são:
IDeviceFactory.hal
é o ponto de entrada na API.IDevice.hal
eIPrimaryDevice.hal
contêm métodos comosetMasterVolume
ouopenInputStream
.- Os streams são unidirecionais e são usados pelo AudioFlinger para enviar ou receber
áudio de e para a HAL por
IStream.hal
,IStreamOut.hal
IStreamIn.hal
A tabela a seguir lista a localização dos componentes principais de HIDL da HAL:
Componente principal da HAL | Local |
---|---|
Versão mais recente da API | /hardware/interfaces/audio/6.0
|
Tipos específicos da API Core HAL mais recente | /hardware/interfaces/audio/6.0/types.hal
|
Esquema XSD do arquivo de configuração da política de áudio | /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd
|
A implementação padrão da API Core HAL (/hardware/interfaces/audio/core/all-versions/default/
)
é um wrapper ao redor da implementação da HAL pré-Treble usando
bibliotecas compartilhadas legadas.
A implementação padrão também pode ser considerada uma referência ao
implementação de novas versões de HALs de áudio que interagem com drivers de kernel
diretamente.
HAL de efeitos
A tabela a seguir lista a localização dos componentes úteis da HAL de efeitos HIDL:
Componente HAL de efeitos | Local |
---|---|
Versão mais recente da API | /hardware/interfaces/audio/effect/6.0/
|
Esquema XSD do arquivo de configuração de efeitos | /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd
|
Para mais informações, consulte um exemplo de implementação da
A API de efeitos HAL em /hardware/interfaces/audio/effect/all-versions/default/
e a seção Efeitos de áudio.
HAL comum
A API Common HAL que usa HIDL contém o seguinte:
- Definições (
/hardware/interfaces/audio/common/6.0/types.hal
) compartilhadas por as APIs Core e Effect. - Utilitários (
/hardware/interfaces/audio/common/all-versions
) usados para ajudar codificação em APIs HIDL para implementações, clientes e testes.
Atualizações para a HAL de áudio V7
Há mudanças significativas na versão 7 da HAL de áudio em Android 12, conforme descrito nesta seção. A HAL de áudio V7 faz o seguinte:
- Unifica os modelos de dados usados pelo framework e pela HAL.
- Minimiza a duplicação entre os tipos de dados HIDL (enumerações) e o esquema XML. para configuração da política de áudio.
Especificamente, as alterações são feitas nas seguintes áreas da HAL de áudio V7:
Essas mudanças são discutidas em mais detalhes nas respectivas seções.
Enumerações
A partir da HAL de áudio V7, os tipos enumerados usados na configuração da política de áudio são definidos apenas no esquema XSD, e não no HIDL.
Na HAL de áudio V6, os valores dos tipos de tipo enumerado (como AudioFormat
) em types.hal
são
também definidos no esquema XSD do arquivo de configuração da política de áudio, criando um
duplicação. Para evitar isso na V7, os tipos de enumeração foram alterados para string
e
todos os valores de enumeração possíveis são listados no esquema XSD.
A Figura 2 compara algumas das mudanças no tipo de enumeração AudioFormat
na V7:
Figura 2. Comparação de algumas das mudanças no tipo enumerado AudioFormat.
Consulte a lista a seguir para obter os tipos de enum que foram convertidos para
string
:
AudioChannelMask
AudioContentType
AudioDevice
: extensível do fornecedorAudioFormat
: extensível do fornecedorAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Transmitir valores de tipo enumerado de string
Valores de string são usados para transferir informações como valores de enumeração entre limite da interface HAL. Tanto a estrutura quanto os O wrapper da HAL usa valores de tipo enumerado inteiros para implementar a lógica de negócios e empregar a abordagem de conversão mostrada na Figura 3:
Figura 3. Transmitindo valores de tipo enumerado de string.
Por exemplo, para passar um valor do tipo de formato de áudio do framework para o fornecedor:
- O valor enum de
AudioFormat
é convertido em um valor de string emlibaudiohal
e são transmitidos para a HAL. - No lado da HAL, o wrapper padrão converte a string em um tipo enumerado. que é transmitido à HAL legada.
Mudanças no esquema XML
Ter listas completas de valores de tipo enumerado na definição de esquema XML (XSD) permite para melhorar a validação do arquivo XML de configuração da política de áudio pelo VTS. Criamos mudanças no arquivo de configuração da política de áudio usado com a HAL V7 para cumprir XSD.
Na V7, um caractere padrão ␣
(espaço) é usado para delimitar listas de valores em
atributos (como taxas de amostragem, máscaras de canal e sinalizações), em vez de ,
(vírgula) e |
(barra vertical) usados no V6 e em versões anteriores. Conforme visto no
exemplo a seguir, um espaço é usado para delimitar a lista de valores para
channelMasks
:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
Para fazer alterações de símbolo, use um script de conversão automática chamado
update_audio_policy_config.sh
: Confira o comando a seguir para converter um arquivo V6
arquivo de configuração da política de áudio para uma versão V7 do 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 dados
Redefinimos algumas estruturas de dados na V7 para minimizar duplicações e definições. Tuplas repetidas de itens de dados são agrupadas em conjuntos estruturas de trabalho. Essas estruturas de dados usam os recursos HIDL mais recentes, como uniões seguras.
Por exemplo, na V6 e anteriores, um triplo de <format, sampling rate, channel mask>
é usado com frequência nas interfaces e tipos de HIDL. Para remover essa redundância,
V7, o tipo de dados AudioConfigBase
e outros tipos de dados são definidos da seguinte maneira:
AudioConfigBase := <format, sampling rate, channel mask>
AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>
usados por
AudioConfig
,AudioOffloadInfo
eAudioPortConfig
AudioProfile := <format, {sampling rates}, {channel masks}>
substitui coleções soltas em
AudioPort/PortConfig
AudioPortExtendedInfo := device | mix | session
substitui uniões em
AudioPort/PortConfig
Tags do fornecedor
Além de tipos e formatos de dispositivos, os fornecedores podem adicionar tags personalizadas para áudio. metadados da faixa.
Para reprodução e gravação de metadados de faixas, os fornecedores podem transmitir suas próprias tags, que são usados para adicionar atributos a streams de E/S de áudio, dos apps à HAL.
As tags de fornecedores para metadados de faixa de reprodução são adicionadas conforme mostrado a seguir exemplo:
struct PlaybackTrackMetadata {
…
/** Tags from AudioTrack audio attributes */
vec<AudioTag> tags;
};
A estrutura RecordTrackMetadata
é implementada de maneira semelhante
adicionar tags específicas para os metadados da faixa de gravação.
Atribuição do namespace das extensões do fornecedor
A partir da HAL V7, as extensões de fornecedores exigem um prefixo {vendor}
adicional.
que não é exigida na V6. Para que o prefixo {vendor}
seja válido, ele precisa ser
três ou mais caracteres alfanuméricos.
Use o seguinte formato na V7:
VX_{vendor}_{letters/numbers}
Confira a seguir alguns exemplos de extensões válidas de fornecedor da V7:
VX_GOOGLE_VR
VX_QCI_AMBIENT_MIC
Informações da versão
A tabela a seguir lista o número da versão da HAL para cada versão do Android:
Versão do Android | Versão HIDL do HAL |
---|---|
Android 13 | 7.1 |
Android 12 | 7.0 |
Android 11 | 6.0 |
Android 10 | 5.0 |
Android 9 | 4.0 |
No Android 8 | 2.0 |