Android 13 ve önceki sürümlerde Audio HAL arayüzü, HIDL HAL dosyalarında (.hal
uzantılı) HIDL ve yapılandırma dosyaları için XSD şemaları kullanılarak aşağıdaki gibi tanımlanır.
Şekil 1. Ses HAL arayüzü.
Yapılandırma dosyaları
Ses politikası ve ses efektleri XML yapılandırma dosyalarının Ses HIDL HAL arayüzünün bir parçası olduğu kabul edilir. Bu dosyalar şemalarına uygun olmalıdır ve uygunluk VTS testleriyle doğrulanır.
Ses HIDL HAL'ini uygulamanın bir parçası olarak, ses topolojisini açıklayan bir ses politikası yapılandırma dosyası oluşturmanız gerekir. Ses HAL özelliklerinin çerçeve tarafından kullanılabilmesi için audio_policy_configuration.xml
dosyasında tanımlanması gerekir.
Audio HIDL HAL API
Bu bölümde, HIDL için Core, Effects ve Common HAL API'leri açıklanmaktadır.
Core 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
üzerinden HAL'e ses göndermek veya HAL'den ses almak için kullanılır.
Aşağıdaki tabloda, yararlı 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 son 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 etrafında bir sarmalayıcıdır.
Varsayılan uygulama, çekirdek sürücüleriyle doğrudan etkileşime geçen Audio HAL'lerin yeni sürümlerini uygularken de referans olarak kullanılabilir.
Efektler HAL
Aşağıdaki tabloda, HIDL kullanan 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/
|
Etki 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 ortak HAL API'si şunları içerir:
- 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 göre kodlamaya yardımcı olmak amacıyla kullanılan yardımcı programlar (
/hardware/interfaces/audio/common/all-versions
).
Audio HAL V7'de yapılan güncellemeler
Android 12'deki Audio HAL'in 7. sürümünde bu bölümde belirtildiği gibi önemli değişiklikler yapılmıştır. Audio HAL V7 aşağıdakileri yapar:
- Çerçeve ve HAL tarafından kullanılan veri modellerini birleştirir.
- HIDL veri türleri (enum'ler) ile ses politikası yapılandırması için kullanılan XML şeması arasındaki kopyaları en aza indirir.
Özellikle, Audio HAL V7'de aşağıdaki alanlarda değişiklikler yapılmıştır:
- Tanımlayıcı türleri
- Veri türleri
- Tedarikçi firma etiketleri
- Tedarikçi firma uzantılarının adlandırma alanı
Bu değişiklikler ilgili bölümlerde daha ayrıntılı olarak ele alınmıştır.
Listeleme
Audio HAL V7'den itibaren, Audio Politika Yapılandırması dosyasında kullanılan listelenen türler HIDL'de değil, yalnızca XSD şemasında tanımlanır.
Audio HAL V6'da, types.hal
içindeki enum türlerinin (AudioFormat
gibi) değerleri, ses politikası yapılandırma dosyası XSD şemasında da tanımlanır ve bu da yineleme oluşturur. V7'de bu sorunu önlemek için enum türleri string
olarak değiştirilir ve olası tüm listeleme değerleri XSD şemasında listelenir.
Şekil 2'de, V7'deki AudioFormat
enum türünde yapılan değişikliklerden bazıları karşılaştırılmıştır:
Şekil 2. AudioFormat enum'unda yapılan değişikliklerden bazılarının 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
: Tedarikçi firma tarafından genişletilebilirAudioFormat
: Tedarikçi firma tarafından genişletilebilirAudioGainMode
AudioSource
AudioStreamType
AudioUsage
Dize enum değerlerini iletin
Dize değerleri, bilgileri HAL arayüzü sınırı boyunca listeleme değerleri olarak aktarmak için kullanılır. Hem çerçeve hem de HAL sarmalayıcısı, iş mantığını uygulamak için tam sayı enum değerleri kullanır ve Şekil 3'te gösterilen dönüşüm yaklaşımını kullanır:
Şekil 3. Dize enum değerlerini iletmek.
Örneğin, ses biçimi türü değerini çerçeveden tedarikçiye iletmek için:
AudioFormat
değerinin enum değeri,libaudiohal
içinde bir dize değerine dönüştürülür ve HAL'e iletilir.- HAL tarafında, varsayılan sarmalayıcı, dize değerini eski HAL'e iletilen bir enum değerine dönüştürür.
XML şeması değişiklikleri
XML şeması tanımında (XSD) enum değerlerinin tam listelerinin bulunması, VTS tarafından ses politikası yapılandırma XML dosyasının daha iyi doğrulanmasına olanak tanır. HAL V7 ile kullanılan ses politikası yapılandırma dosyasında XSD'ye uygunluk için değişiklikler yaptık.
V7'de, V6 ve önceki sürümlerde kullanılan ,
(virgül) ve |
(dikey çubuk) sembolleri yerine, özelliklerdeki değer listelerini (ör. örnekleme hızları, kanal maskeleri ve işaretler) sınırlamak için 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 amacıyla boşluk kullanılır:
<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />
Simge değişikliklerini yapmak için update_audio_policy_config.sh
adlı otomatik bir dönüşüm komut dosyası kullanın. V6 ses politikası yapılandırma dosyasını Pixel 5 (Redfin) cihaz için 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
Yinelenen tanımları en aza indirmek için V7'deki bazı veri yapılarını yeniden tanımladık. Tekrarlanan veri öğesi kümeleri, yeniden kullanılabilir yapılar halinde gruplandırılır. Bu veri yapıları, güvenli birleştirme gibi en son HIDL özelliklerini kullanır.
Örneğin, V6 ve önceki sürümlerde HIDL arayüzlerinde ve türlerinde genellikle üç <format, sampling rate, channel mask>
kullanılır. Bu gereksizliği ortadan kaldırmak 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ıldıAudioProfile := <format, {sampling rates}, {channel masks}>
AudioPort/PortConfig
'teki gevşek koleksiyonların yerini alır.AudioPortExtendedInfo := device | mix | session
AudioPort/PortConfig
içindeki birlikleri değiştirir
Tedarikçi firma etiketleri
Tedarikçi firmalar, cihaz türlerine ve biçimlerine ek olarak ses parçası meta verileri için özel etiketler ekleyebilir.
Tedarikçiler, oynatma ve kayıt parçası meta verileri için uygulamalardan HAL'e ses I/O akışlarına özellik eklemek için kullanılan kendi etiketlerini iletebilir.
Oynatma parçası meta verileri için tedarikçi firma 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 özgü etiketler ekleyerek benzer şekilde uygulanır.
Tedarikçi firma uzantılarının adlandırma alanı
HAL V7'den itibaren tedarikçi uzantıları, V6'da gerekli olmayan ek bir {vendor}
ön ek gerektirir. {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 tedarikçi uzantılarına 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 |