HIDL Audio HAL

Android 13 ve önceki sürümlerde Audio HAL arayüzü, HIDL HAL dosyalarında (.hal uzantılı) HIDL kullanılarak ve yapılandırma dosyaları için XSD şemalarıyla tanımlanır.

audio_hal

1. şekil. Ses HAL arayüzü.

Yapılandırma dosyaları

Ses politikası ve ses efektleri XML yapılandırma dosyaları, Ses HIDL HAL arayüzünün bir parçası olarak kabul edilir. Bu dosyalar şemalarına uygun olmalı ve uygunluk, VTS testleriyle doğrulanmalıdır.

Ses HIDL HAL'yi uygulama kapsamında, ses topolojisini açıklayan bir ses politikası yapılandırma dosyası oluşturmanız gerekir. Çerçevenin kullanabilmesi için ses HAL özelliklerinin audio_policy_configuration.xml dosyasında bildirilmesi gerekir.

Audio HIDL HAL API

Bu bölümde, HIDL için Core, Effects ve Common HAL API'leri açıklanmaktadır.

Temel HAL

HIDL kullanan Core HAL'in temel arayüzlerinden bazıları şunlardır:

  • IDeviceFactory.hal, API'ye giriş noktasıdır.
  • IDevice.hal ve IPrimaryDevice.hal, setMasterVolume veya openInputStream gibi yöntemler içerir.
  • Akışlar tek yönlüdür ve AudioFlinger tarafından IStream.hal, IStreamOut.hal ve IStreamIn.hal aracılığıyla HAL'ye ses göndermek veya HAL'den ses almak için kullanılır.

Aşağıdaki tabloda, faydalı Core HAL HIDL bileşenlerinin konumu listelenmiştir:

Temel HAL bileşeni Konum
API'nin en son sürümü /hardware/interfaces/audio/6.0
En yeni Core HAL API'ye özgü türler /hardware/interfaces/audio/6.0/types.hal
Ses politikası yapılandırma dosyası XSD şeması /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

Core HAL API'nin (/hardware/interfaces/audio/core/all-versions/default/) varsayılan uygulaması, eski paylaşılan kitaplıkları kullanan Treble öncesi HAL uygulamasının sarmalayıcısıdır. Varsayılan uygulama, doğrudan çekirdek sürücüleriyle etkileşim kuran yeni Audio HAL'lerinin uygulanmasında da referans olarak kullanılabilir.

Efektler Donanım Soyutlama Katmanı

Aşağıdaki tabloda, HIDL kullanılarak oluşturulan faydalı Effects HAL bileşenlerinin konumu listelenmiştir:

Efektler HAL bileşeni Konum
API'nin en son sürümü /hardware/interfaces/audio/effect/6.0/
Efekt yapılandırma dosyası XSD şeması /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

Daha fazla bilgi için /hardware/interfaces/audio/effect/all-versions/default/ adresindeki Effects HAL API'sinin örnek uygulamasına ve Ses Efektleri bölümüne bakın.

Ortak HAL

HIDL kullanan Common HAL API'de aşağıdakiler bulunur:

  • Core ve Effect API'leri tarafından paylaşılan tanımlar (/hardware/interfaces/audio/common/6.0/types.hal).
  • Uygulamalar, istemciler ve testler için HIDL API'lerine karşı kodlamaya yardımcı olmak üzere kullanılan yardımcı programlar (/hardware/interfaces/audio/common/all-versions).

Audio HAL V7'deki güncellemeler

Bu bölümde belirtildiği gibi, Android 12'deki Audio HAL'in 7. sürümünde önemli değişiklikler yapıldı. Audio HAL V7 şunları yapar:

  • Çerçeve ve HAL tarafından kullanılan veri modellerini birleştirir.
  • HIDL veri türleri (enum'lar) ile ses politikası yapılandırması için kullanılan XML şeması arasındaki tekrarları en aza indirir.

Özellikle, Ses HAL V7'de aşağıdaki alanlarda değişiklikler yapılmıştır:

Bu değişiklikler, ilgili bölümlerde daha ayrıntılı olarak ele alınmaktadır.

Numaralandırmalar

Audio HAL V7'den itibaren, Audio Policy Configuration dosyasında kullanılan numaralandırılmış türler yalnızca XSD şemasında tanımlanır ve HIDL'de tanımlanmaz.

Audio HAL V6'da, types.hal içindeki enum türlerinin (ör. AudioFormat) değerleri, ses politikası yapılandırma dosyası XSD şemasında da tanımlanarak bir kopya oluşturulur. V7'de bu durumu önlemek için enum türleri string olarak değiştirildi ve olası tüm numaralandırma değerleri bunun yerine XSD şemasında listelendi.

Şekil 2'de, V7'deki AudioFormat enum türünde yapılan bazı değişiklikler karşılaştırılmaktadır:

audioformat-change

Şekil 2. AudioFormat enum'unda yapılan bazı değişikliklerin karşılaştırması.

string olarak dönüştürülen enum türleri için aşağıdaki listeye bakın:

  • AudioChannelMask
  • AudioContentType
  • AudioDevice: Satıcı tarafından genişletilebilir
  • AudioFormat: Satıcı tarafından genişletilebilir
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

Dize enum değerlerini iletme

Dize değerleri, bilgileri HAL arayüzü sınırı boyunca numaralandırma değerleri olarak aktarmak için kullanılır. Hem çerçeve hem de HAL sarmalayıcı, işletme mantığını uygulamak için tam sayı enum değerlerini kullanır ve Şekil 3'te gösterilen dönüşüm yaklaşımını kullanır:

audio-passing-values

3.Şekil Dize enum değerlerini iletme.

Örneğin, ses biçimi türü değerini çerçeveden satıcıya iletmek için:

  1. AudioFormat enum değeri, libaudiohal içinde dize değerine dönüştürülür ve HAL'ye iletilir.
  2. HAL tarafında, varsayılan sarmalayıcı dizeyi, eski HAL'ye iletilen bir enum değerine dönüştürür.

XML şema değişiklikleri

XML şema tanımında (XSD) enum değerlerinin eksiksiz listelerinin bulunması, VTS tarafından daha iyi ses politikası yapılandırma XML dosyası doğrulamasına olanak tanır. XSD'ye uygun olması için HAL V7 ile kullanılan ses politikası yapılandırma dosyasında değişiklikler yaptık.

V7'de, özelliklerdeki (ör. örnekleme hızları, kanal maskeleri ve işaretler) değer listelerini sınırlamak için V6 ve önceki sürümlerde kullanılan , (virgül) ve | (dikey çubuk) sembolleri yerine standart bir (boşluk) karakteri kullanılır. Aşağıdaki örnekte görüldüğü gibi, channelMasks için değer listesini sınırlamak üzere boşluk kullanılmaktadır:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Sembol değişikliklerini yapmak için update_audio_policy_config.sh adlı otomatik dönüştürme komut dosyasını kullanın. Pixel 5 (Redfin) cihaz için V6 ses politikası yapılandırma dosyasını V7 sürümüne dönüştürmek üzere aşağıdaki komuta bakın:

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

Veri türleri

V7'de bazı veri yapılarını, yinelenen tanımları en aza indirecek şekilde yeniden tanımladık. Tekrarlanan veri öğesi demetleri, yeniden kullanılabilir yapılar halinde gruplandırılır. Bu veri yapıları, güvenli birleşimler gibi en yeni HIDL özelliklerini kullanır.

Örneğin, V6 ve önceki sürümlerde HIDL arayüzlerinde ve türlerinde genellikle <format, sampling rate, channel mask> üçlüsü kullanılır. Bu gereksizliği gidermek için V7'de AudioConfigBaseveri türü ve diğer veri türleri aşağıdaki gibi tanımlanır:

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

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

    AudioConfig, AudioOffloadInfo, AudioPortConfig tarafından kullanılır.

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

    AudioPort/PortConfig içindeki gevşek koleksiyonların yerini alır.

  • AudioPortExtendedInfo := device | mix | session

    AudioPort/PortConfig'daki birleşimlerin yerini alır

Tedarikçi etiketleri

Tedarikçiler, cihaz türleri ve biçimlere ek olarak ses parçası meta verileri için özel etiketler ekleyebilir.

Satıcılar, oynatma ve kayıt parçası meta verileri için kendi etiketlerini iletebilir. Bu etiketler, uygulamalardan HAL'ye ses giriş/çıkış akışlarına özellik eklemek için kullanılır.

Oynatma parçası meta verileri için satıcı etiketleri, aşağıdaki örnekte gösterildiği gibi eklenir:

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

RecordTrackMetadata yapısı, kayıt parçası meta verilerine özel etiketler eklenerek benzer şekilde uygulanır.

Tedarikçi uzantıları ad alanı

HAL V7'den itibaren, tedarikçi uzantıları için V6'da gerekli olmayan ek bir {vendor} öneki gerekir. {vendor} ön ekinin geçerli olması için üç veya daha fazla alfanümerik karakterden oluşması gerekir.

V7'de aşağıdaki biçimi kullanın:

VX_{vendor}_{letters/numbers}

Aşağıda geçerli V7 satıcı uzantılarına dair bazı örnekler verilmiştir:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

Sürüm bilgileri

Aşağıdaki tabloda her Android sürümünün HAL sürüm numarası listelenmiştir:

Android sürümü HIDL HAL sürümü
Android 13 7.1
Android 12 7,0
Android 11 6.0
Android 10 5,0
Android 9 4.0
Android 8 2,0