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.
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
veIPrimaryDevice.hal
,setMasterVolume
veyaopenInputStream
gibi yöntemler içerir.- Akışlar tek yönlüdür ve AudioFlinger tarafından
IStream.hal
,IStreamOut.hal
veIStreamIn.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:
Ş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şletilebilirAudioFormat
: Satıcı tarafından genişletilebilirAudioGainMode
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:
3.Şekil Dize enum değerlerini iletme.
Örneğin, ses biçimi türü değerini çerçeveden satıcıya iletmek için:
AudioFormat
enum değeri,libaudiohal
içinde dize değerine dönüştürülür ve HAL'ye iletilir.- 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 AudioConfigBase
veri 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 |