HIDL Ses HAL'si

Android 13 ve önceki sürümlerde ses HAL arayüzü HIDL HAL dosyalarında HIDL kullanılarak tanımlanır ( uzantı .hal) ve Şunun için XSD şemaları: yapılandırma dosyalarını aşağıdaki şekilde görebilirsiniz.

ses_hali

Şekil 1. Ses HAL arayüzü.

Yapılandırma dosyaları

Ses politikası ve ses efektleri XML yapılandırma dosyaları, Audio HIDL HAL arayüzünün resmi. Bu dosyalar şemalarına uygun olmalı ve Uygunluk, VTS testleriyle doğrulanır.

Ses HIDL HAL'yi uygulamanın bir parçası olarak ses politikası yapılandırma dosyası ses topolojisini açıklamaktadır. Ses HAL özellikleri aşağıdaki dilde tanımlanmalıdır: audio_policy_configuration.xml dosyasını çalıştırın.

Ses HIDL HAL API'sı

Bu bölümde, HIDL için Temel, Efektler ve Yaygın HAL API'leri açıklanmaktadır.

Temel HAL

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

  • IDeviceFactory.hal, API'ye giriş noktasıdır.
  • IDevice.hal ve IPrimaryDevice.hal, aşağıdakilere benzer yöntemler içerir setMasterVolume veya openInputStream.
  • Akışlar tek yönlüdür ve AudioFlinger tarafından gönderip almak için kullanılır HAL ile IStream.hal, IStreamOut.hal ve HAL arasında ses IStreamIn.hal.

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

Çekirdek HAL bileşeni Konum
API'nin 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

Temel HAL API'sinin (/hardware/interfaces/audio/core/all-versions/default/) varsayılan uygulaması kullanılan bir sarmalayıcıdır eski paylaşılan kitaplıklar. Aşağıdaki durumlarda, varsayılan uygulama da referans olarak çekirdek sürücüleriyle etkileşime giren yeni Ses HAL sürümlerini uygulamak doğrudan ekleyebilirsiniz.

Efekt HAL'si

Aşağıdaki tabloda, HIDL:

Efekt HAL bileşeni Konum
API'nin 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 Efekt HAL API'sine ve Ses Efektleri bölümüne bakın.

Ortak HAL

HIDL kullanan Common HAL API şunları içerir:

  • tarafından paylaşılan tanımlar (/hardware/interfaces/audio/common/6.0/types.hal) Core and Effect API'leri.
  • Yardım için kullanılan yardımcı programlar (/hardware/interfaces/audio/common/all-versions) Uygulamalar, istemciler ve testler için HIDL API'leriyle kodlama.

Audio HAL V7 güncellemeleri

Ses HAL'nin 7. sürümünde önemli değişiklikler var. Android 12. Ses HAL V7 şunları yapar:

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

Özellikle, Ses HAL V7'nin aşağıdaki kısımlarında değişiklik yapılır:

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

Numaralandırmalar

Ses HAL V7 sürümünden itibaren, Ses Politikası Yapılandırmasında kullanılan numaralandırılmış türler dosyası yalnızca XSD şemasında tanımlanır, HIDL'de tanımlanmaz.

Ses HAL V6'da, types.hal öğesindeki numaralandırma türlerinin (ör. AudioFormat) değerleri: ses politikası yapılandırma dosyası XSD şemasında da tanımlanır ve yineleme. V7'de bunu önlemek için sıralama türleri string olarak değiştirilir ve Tüm olası numaralandırma değerleri bunun yerine XSD şemasında listelenir.

Şekil 2'de, V7'de AudioFormat sıralama türünde yapılan değişikliklerden bazıları karşılaştırılmıştır:

ses-biçimi-degisik

Şekil 2. AudioFormat sıralamasında yapılan bazı değişikliklerin karşılaştırması.

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

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

Dize numaralandırma değerlerini iletme

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

ses-geçirme-değerleri

Şekil 3. Dize numaralandırma değerlerini iletme.

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

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

XML şeması değişiklikleri

XML şeması tanımında (XSD) enum değerlerinin tam listelerine sahip olmak, VTS tarafından daha iyi ses politikası yapılandırması XML dosyası doğrulaması için. Yıllar içinde HAL V7 ile kullanılan ses politikası yapılandırma dosyasında yapılan değişiklikler, XSD.

V7'de, bir içindeki değer listelerini sınırlandırmak için standart bir (boşluk) karakteri özellikleri (ör. örnekleme oranları, kanal maskeleri ve işaretler), , (virgül) ve | (dikey çubuk) simgelerinin kullanılması. Şurada görüldüğü gibi: aşağıdaki örnekte, bir alanın değer listesini sınırlandırmak için channelMasks:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Sembol değişiklikleri yapmak için, otomatik bir dönüştürme işleminde update_audio_policy_config.sh Bir V6'yı dönüştürmek için aşağıdaki komuta bakın: Pixel 5 (Redfin) cihaz için ses politikası yapılandırma dosyasını V7 sürümüne indirin:

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

Veri türleri

Yinelemeleri en aza indirmek için V7'deki bazı veri yapılarını yeniden tanımladık tanımlar. Tekrarlanan veri öğeleri, yeniden kullanılabilir öğeler altında gruplanır. birlikte çalışır. Bu veri yapıları, güvenli birleştirme gibi en yeni HIDL özelliklerini kullanır.

Örneğin, V6 ve önceki sürümlerde <format, sampling rate, channel mask> değerinin üç katı genellikle HIDL arayüzlerinde ve türlerinde kullanılır. Bu fazlalığı kaldırmak için V7, AudioConfigBaseveri türü ve diğer veri türleri aşağıdaki şekilde tanımlanmıştır:

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

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

    kullanan: AudioConfig, AudioOffloadInfo, AudioPortConfig

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

    AudioPort/PortConfig kitlesindeki sabit olmayan koleksiyonların yerini alır

  • AudioPortExtendedInfo := device | mix | session

    AudioPort/PortConfig bölgesindeki sendikaların yerini alıyor

Tedarikçi firma etiketleri

Tedarikçi firmalar, cihaz türlerine ve biçimlerine ek olarak ses için özel etiketler de ekleyebilir. Parça meta verilerini seçin.

Satıcılar, parça meta verilerini oynatmak ve kaydetmek için kendi etiketlerini Bu ekranlar, uygulamalardan HAL'ye ses G/Ç akışlarına özellik eklemek için kullanılır.

Oynatma parçası meta verileri için tedarikçi firma etiketleri aşağıda görüldüğü şekilde eklenir örnek:

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

RecordTrackMetadata yapısı, benzer bir şekilde Kayıt parçası meta verilerine özel etiketler eklemek.

Tedarikçi firma uzantıları ad aralıkları

HAL V7'den itibaren, tedarikçi firma uzantıları için ek bir {vendor} öneki gerekir olduğundan emin olun. {vendor} önekinin geçerli olması için ön ekin geçerli olması gerekir veya daha fazla alfanümerik karakter içermelidir.

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

VX_{vendor}_{letters/numbers}

Aşağıda, geçerli V7 tedarikçi firma uzantılarına ilişkin bazı örnekler verilmiştir:

  • VX_GOOGLE_VR
  • VX_QCI_AMBIENT_MIC

Sürüm bilgileri

Aşağıdaki tabloda, her Android sürümü için HAL sürüm numarası listelenmektedir:

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