HIDL Ses HAL'si

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.

audio_hal

Ş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 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 ü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:

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:

audioformat-change

Ş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şletilebilir
  • AudioFormat: Tedarikçi firma tarafından genişletilebilir
  • AudioGainMode
  • 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:

audio-passing-values

Şekil 3. Dize enum değerlerini iletmek.

Örneğin, ses biçimi türü değerini çerçeveden tedarikçiye iletmek için:

  1. AudioFormat değerinin enum değeri, libaudiohal içinde bir dize değerine dönüştürülür ve HAL'e iletilir.
  2. 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 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ı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