Cihaz türü sınırı

Android seste, ses cihazı türünü temsil etmek için audio_devices_t kullanılır. Belirtilen bir veya daha fazla cihazı filtrelemek veya seçmek için ses kaynak kodunda bir bit alanı olarak yaygın olarak kullanılır. Android 11'den önce, 30 ses giriş/çıkış cihazı türü sınırı vardı ve yeni ses cihazı türleri eklemek için yedek yuva yoktu. Yeni ses cihazı türlerinin eklenmesine izin vermek için ses cihazı türü sayısındaki sınırı kaldırdık.

Ses cihazı türlerinin sayısındaki sınırı kaldırmak için, ses cihazı türleri artık bit maskeleri yerine numaralandırılmış değerlerdir.

Mevcut tüm ses cihazı türleri olduğu gibi tutulur. AUDIO_DEVICE_BIT_IN hala giriş veya çıkış cihazlarını ayırt etmek için kullanılıyor. Yeni ses cihazı türleri eklenirken, bunlar mevcut değerler arasındaki boşluklarda numaralandırılır.

OEM'ler audio_devices_t bit maskesi olarak kullanmamalıdır; çünkü bu, yeni numaralandırılmış ses aygıtı türleri eklendiğinde beklenmeyen sonuçlara neden olabilir.

Örnekler ve kaynak

Android 11'den önce ses cihazı türlerinin bit maskeleri olarak iki tipik kullanımı vardı.

  • Birden fazla ses cihazını temsil etmek için audio_devices_t değerinin kullanılması.
  • audio_devices_t değerinin belirli bir kategorideki ses cihazı türlerini içerip içermediği kontrol ediliyor.

Birden çok ses cihazı türünü temsil etmek için, /libaudiofoundation/include/media/AudioContainers.h dosyasındaki DeviceTypeSet adlı bir sınıf kullanılır; bu, audio_devices_t öğesinin std::set kapsayıcısıdır. Sınıf, satıcının sunduğu libaudiofoundation kütüphanesinde bildirildi. C kodunda birden fazla ses cihazı tipini temsil etmek için audio_devices_t dizisi veya listesi kullanılabilir.

Tek bir cihaz türünün belirli bir kategoride olup olmadığını kontrol etmek için /system/media/audio/include/system/audio.h dosyasındaki audio_is_.*_device yardımcı işlevlerini kullanın. Birden fazla ses cihazı türü durumunda libaudiofoundation yardımcı işlevleri kullanın. Örneğin, areAllOfSameDeviceType (DeviceTypeSet, std::function ) kullanın areAllOfSameDeviceType (DeviceTypeSet, std::function ) verilen tüm ses cihazı türlerinin aynı türde olup olmadığını kontrol etmek için AudioContainers.h .

Uygulama

OEM'lerin ses cihazı türü bit alanı temsilini ses HAL uygulamasından kaldırması gerekir.

  1. Bir bit alanındaki tüm aygıt depolama alanlarını kaldırın.

    audio_devices_t birden fazla ses cihazı türünü temsil etmek için kullanılmamalıdır. Bunun yerine bir liste veya vektör kullanın.

  2. Cihaz türleri karşılaştırmaları için bit işlemlerini kullanmayı bırakın.

    Android 11'den önce ses cihazı türleri bit alanı olarak kullanılabiliyordu. Bu durumda, cihaz türleri karşılaştırmaları için bit işlemlerinin kullanılması yaygındır. Yeni, numaralandırılmış ses aygıtı türleri eklendiğinde bit işlemleri beklenmeyen sonuçlara neden olabilir. Bunun yerine alternatif olarak yardımcı işlevleri kullanın. Tek bir ses cihazı türü varsa iki değeri karşılaştırmak için doğrudan karşılaştırmayı kullanın. Bir ses cihazı türünün belirli bir kategoride olup olmadığını kontrol etmek için /system/media/audio/include/system/audio.h dosyasındaki yardımcı işlevleri kullanın. Örneğin, audio_is_output_device(audio_devices_t device) .

  3. Ses cihazı türleri grupları için önceden tanımlanmış değerleri kullanmayı bırakın.

    system/media/audio/include/system/audio-base-utils.h ses cihazı türleri grupları için AUDIO_DEVICE_OUT_ALL önceden tanımlanmış bazı değerler vardır. Bu değerlerin tümü ayrılmıştır ancak yeni numaralandırılmış ses aygıtı türleri eklendiğinde doğru olmayacağından kullanımdan kaldırılabilir. audio-base-utils.h dosyasında tanımlanan, AUDIO_DEVICE_OUT_ALL_ARRAY gibi ses cihazı türlerinin dizileri olan yeni ses cihazı türleri grupları vardır.

  4. Yönlendirme için set_parameters yerine create_audio_patch() release_audio_patch() yöntemlerini uygulayın.

    set_parameters yöntemi ses aygıtı türlerini bir bit alanı olarak kullanır; bu nedenle yeni numaralandırılmış ses aygıtı türleri eklenirse beklenmeyen sonuçlar ortaya çıkabilir.

    Şu anda iki tür ses yaması gereklidir:

    • Oynatma için cihaz yamalarına karıştırın
    • Kayıt için yamaları karıştırmaya yönelik cihaz

    Sonraki güncellemelerde cihazdan cihaza ek yamalar gerekebilir.

    Bir ses yaması oluştururken, yama tanıtıcısı belirtilmemişse, ses yamasını tanımlayabilecek benzersiz bir yama tanıtıcısı oluşturmak için ses HAL'i gerekir. Aksi takdirde, ses HAL'inin, ses yamasını güncellemek için verilen ses yaması tanıtıcısını kullanması gerekir.

    Eski bir ses HAL ve AOSP HIDL sarıcı kullanılıyorsa eski ses HAL, ana HAL sürümünü 3.0'a ayarlamalıdır.

    Ses yaması özelliğini etkinleştirmek için ses HAL'inin ana HAL sürümünü 3.0 veya daha yükseğe ayarlaması gerekir. Daha fazla bilgi için varsayılan HIDL uygulamasında Device::supportsAudioPatches() konusuna bakın; bu bilgilere ayrıca Mürekkepbalığı için ses HAL'sinde de ulaşılabilir.

Özelleştirme

Özelliği kapatmak veya ses cihazı türlerinin eklenmesini mümkün kılan çerçevede ses cihazının yeniden düzenlenmesini geri almak mümkün değildir.

Eklenen ses cihazı türlerinin tümü, bir cihaz türünün tek bir bit kümesiyle temsil edilmesine olanak tanır; dolayısıyla mevcut HAL uygulamaları çalışmaya devam eder.

Yeni ses cihazı türleri eklenirse ve OEM'ler bunları kullanmak isterse ses HAL uygulamalarını yükseltmeleri ve HIDL sürüm 6.0 veya üstüne geçmeleri gerekir. Ana HAL sürümünü 3.0'a yükseltmek ve create_audio_patch release_audio_patch yöntemlerini uygulamak zorunludur; çünkü akışı yönlendirmek için set_parameters kullanmak, yeni ses cihazı türleri eklendiğinde beklenmeyen sonuçlara neden olabilir.

Doğrulama

OEM'lerin yapması gereken iş HAL uygulamalarını güncellemektir. Ses HAL'si için VTS, uygulamanın amaçlandığı gibi çalışıp çalışmadığını doğrulamak için kullanılabilir. Tüm testler VTS dosyalarında bulunabilir.