HIDL Ses HAL'ı

Android 13 ve önceki sürümlerde, Ses HAL arayüzü, HIDL HAL dosyalarındaki ( .hal uzantılı) HIDL ve yapılandırma dosyaları için XSD şemaları kullanılarak aşağıda gösterildiği 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 Audio HIDL HAL arayüzünün bir parçası olduğu kabul edilir. Bu dosyalar şemalarına uygun olmalıdır ve uygunluk VTS testleri ile doğrulanır.

Ses HIDL HAL'i uygulamanın bir parçası olarak, ses topolojisini açıklayan bir ses ilkesi yapılandırma dosyası oluşturmalısınız. Çerçevenin bunları kullanabilmesi için ses HAL yeteneklerinin audio_policy_configuration.xml dosyasında bildirilmesi gerekir.

Ses HIDL HAL API'si

Bu bölümde HIDL için Çekirdek, Efektler ve Ortak HAL API'leri açıklanmaktadır.

Çekirdek HAL

Core HAL'in HIDL kullanan 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öntemleri 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 yararlı Çekirdek HAL HIDL bileşenlerinin konumu listelenmektedir:

Çekirdek HAL bileşeni Konum
API'nin en son sürümü /hardware/interfaces/audio/6.0
En son Core HAL API'ye özel 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

Çekirdek HAL API'sinin ( /hardware/interfaces/audio/core/all-versions/default/ ) varsayılan uygulaması, eski paylaşılan kitaplıkları kullanan Tiz öncesi HAL uygulamasını çevreleyen bir sarmalayıcıdır. Varsayılan uygulama, çekirdek sürücüleri ile doğrudan etkileşime giren Ses HAL'lerinin yeni sürümlerini uygularken de bir referans olarak kabul edilebilir.

Efektler HAL

Aşağıdaki tabloda HIDL kullanan faydalı Effects HAL bileşenlerinin konumu listelenmektedir:

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/ adresinde ve Ses Efektleri bölümünde Effects HAL API'sinin örnek uygulamasına bakın.

Ortak HAL

HIDL kullanan Ortak HAL API'si aşağıdakileri içerir:

  • Çekirdek ve Efekt 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 Güncellemeleri

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

  • Çerçeve ve HAL tarafından kullanılan veri modellerini birleştirir.
  • HIDL veri türleri (numaralandırmalar) ile ses ilkesi yapılandırması için kullanılan XML şeması arasındaki çoğaltmayı en aza indirir.

Audio HAL V7'de özellikle 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 başlayarak, Ses İlkesi Yapılandırma dosyasında kullanılan numaralandırılmış türler HIDL'de değil yalnızca XSD şemasında tanımlanır.

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

Şekil 2, V7'deki AudioFormat numaralandırma türündeki bazı değişiklikleri karşılaştırmaktadır:

audioformat-change

Şekil 2. AudioFormat numaralandırmasındaki bazı değişikliklerin karşılaştırılması.

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

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

Dize numaralandırma değerlerini iletin

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

audio-passing-values

Şekil 3. Dize numaralandırma değerlerinin aktarılması.

Örnek olarak, ses formatı türünün bir değerini çerçeveden satıcıya iletmek için:

  1. AudioFormat enum değeri libaudiohal bir dize değerine dönüştürülür ve HAL'e iletilir.
  2. HAL tarafında, varsayılan sarmalayıcı dizeyi eski HAL'e aktarılan bir numaralandırma değerine dönüştürür.

XML şeması değişiklikleri

XML şeması tanımında (XSD) enum değerlerinin tam listesine sahip olmak, VTS tarafından daha iyi ses politikası yapılandırması XML dosyası doğrulamasına olanak tanır. HAL V7 ile kullanılan ses politikası yapılandırma dosyasında XSD ile uyumlu olacak şekilde değişiklikler yaptık.

V7'de, özniteliklerdeki (örnekleme oranları, kanal maskeleri ve işaretler gibi) değer listelerini sınırlamak için , (virgül) ve | yerine standart bir (boşluk) karakteri kullanılır. V6 ve altında kullanılan (dikey çubuk) sembolleri. Aşağıdaki örnekte görüldüğü gibi, channelMasks değerlerinin listesini sınırlamak için bir boşluk kullanılı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 bir V6 ses politikası yapılandırma dosyasını V7 sürümüne dönüştürmek için 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 tipleri

Yinelenen tanımları en aza indirmek için V7'deki bazı veri yapılarını yeniden tanımladık. Tekrarlanan veri öğeleri grupları 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 altında, HIDL arayüzlerinde ve türlerinde sıklıkla <format, sampling rate, channel mask> üçlüsü kullanılır. Bu fazlalığı 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ılır

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

    AudioPort/PortConfig gevşek koleksiyonların yerini alır

  • AudioPortExtendedInfo := device | mix | session

    AudioPort/PortConfig birleşimlerin yerini alır

Satıcı etiketleri

Satıcılar, cihaz türlerine ve biçimlerine ek olarak ses parçası meta verileri için özel etiketler ekleyebilir.

Parça meta verilerini oynatmak ve kaydetmek için satıcılar, ses I/O akışlarına öznitelikler eklemek için kullanılan kendi etiketlerini uygulamalardan HAL'a aktarabilirler.

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

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

RecordTrackMetadata yapısı, kayıt kanalı meta verilerine özel etiketler eklenerek benzer bir şekilde uygulanır.

Satıcı uzantıları ad alanı

HAL V7'den itibaren satıcı uzantıları, V6'da gerekmeyen ek bir {vendor} öneki gerektirir. {vendor} önekinin geçerli olması için üç veya daha fazla alfasayısal karakterden oluşması gerekir.

V7'de aşağıdaki formatı kullanın:

VX_{ vendor }_{ letters/numbers }

Aşağıda geçerli V7 satıcı uzantılarının bazı örnekleri verilmiştir:

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

Versiyon bilgisi

Aşağıdaki tabloda her Android sürümüne ilişkin HAL sürüm numarası listelenmektedir:

Android sürümü HIDL HAL versiyonu
Android 13 7.1
Android 12 7.0
Android 11 6.0
Android 10 5.0
Android 9 4.0
Android8 2.0