Android sesinde, ses cihazı türünü belirtmek için audio_devices_t
kullanılır. Bir veya daha fazla belirtilen cihazı filtrelemek ya da seçmek için ses kaynak kodunda bit alanı olarak yaygın şekilde 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 olanak tanımak için ses cihazı türlerinin sayısıyla ilgili sınırı kaldırdık.
Ses cihazı türlerinin sayısıyla ilgili sınırlamayı kaldırmak için ses cihazı türleri artık bit maskeleri yerine numaralandırılmış değerler olarak kullanılıyor.
Mevcut tüm ses cihazı türleri olduğu gibi kalır. Giriş veya çıkış cihazlarını ayırt etmek için AUDIO_DEVICE_BIT_IN
kullanılmaya devam eder. Yeni ses cihazı türleri eklenirken mevcut değerler arasındaki boşluklarda numaralandırılmış değerler kullanılır.
OEM'ler, yeni numaralandırılmış ses cihazı türleri eklendiğinde beklenmedik sonuçlara neden olabileceğinden audio_devices_t
değerini bit maskesi olarak kullanmamalıdır.
Örnekler ve kaynak
Android 11'den önce, bit maskeleri olarak iki tipik ses cihazı türü kullanımı vardı.
- Birden fazla ses cihazını temsil etmek için
audio_devices_t
değerini kullanma. audio_devices_t
değerinin, belirtilen bir kategorideki ses cihazı türlerini içerip içermediğini kontrol etme.
Birden fazla ses cihazı türünü temsil etmek için DeviceTypeSet
adlı bir sınıf kullanılır. Bu sınıf, audio_devices_t
öğesinin std::set
kapsayıcısıdır./libaudiofoundation/include/media/AudioContainers.h
Sınıf, tedarikçi tarafından sunulan
libaudiofoundation
kitaplığında tanımlanır. C kodunda birden fazla ses cihazı türünü temsil etmek için bir dizi veya audio_devices_t
listesi kullanılabilir.
Tek bir cihaz türünün belirtilen bir kategoride olup olmadığını kontrol etmek için
/system/media/audio/include/system/audio.h
içinde yardımcı işlevleri
audio_is_.*_device
kullanın.
Birden fazla ses cihazı türü için libaudiofoundation
içindeki yardımcı işlevleri kullanın. Örneğin,
AudioContainers.h
içinde areAllOfSameDeviceType (DeviceTypeSet, std::function
kullanarak
AudioContainers.h
verilen tüm ses cihazı türlerinin aynı türde olup olmadığını kontrol edin.
Uygulama
OEM'lerin, ses HAL uygulamasından ses cihazı türü bit alanı gösterimini kaldırması gerekir.
- Bit alanındaki cihazların tüm depolama alanını kaldırın.
audio_devices_t
, birden fazla ses cihazı türünü temsil etmek için kullanılmamalıdır. Bunun yerine liste veya vektör kullanın. - Cihaz türü 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ılabilir. Bu durumda, cihaz türü karşılaştırmaları için bit işlemleri kullanmak yaygındır. Yeni, numaralandırılmış ses cihazı türleri eklendiğinde bit işlemleri beklenmedik sonuçlara neden olabilir. Bunun yerine yardımcı işlevleri kullanabilirsiniz. Tek bir ses cihazı türü varsa iki değeri karşılaştırmak için doğrudan karşılaştırma kullanın. Bir ses cihazı türünün belirtilen bir kategoride olup olmadığını kontrol etmek için
/system/media/audio/include/system/audio.h
yardımcı işlevlerini kullanın. Örneğin,audio_is_output_device(audio_devices_t device)
. - Ses cihazı türü grupları için önceden tanımlanmış değerleri kullanmayı bırakın.
Ses cihazı türü grupları için önceden tanımlanmış bazı değerler vardır.
AUDIO_DEVICE_OUT_ALL
,system/media/audio/include/system/audio-base-utils.h
içinde yer alır. Bu değerlerin tümü ayrılmıştır ancak yeni numaralandırılmış ses cihazı türleri eklendiğinde doğru olmayacakları için kullanımdan kaldırılabilir.audio-base-utils.h
içinde tanımlanan yeni ses cihazı türü grupları vardır. Bunlar,AUDIO_DEVICE_OUT_ALL_ARRAY
gibi ses cihazı türlerinin dizileridir. - Yönlendirme için
set_parameters
yerinecreate_audio_patch()
verelease_audio_patch()
yöntemlerini uygulayın.set_parameters
yöntemi, ses cihazı türlerini bit alanı olarak kullandığından yeni numaralandırılmış ses cihazı türleri eklenirse beklenmedik sonuçlar oluşabilir.Şu anda iki tür ses yaması gereklidir:
- Oynatma için cihaz yamalarına karıştırma
- Yama karıştırmak için kullanılan cihaz (kayıt için)
Sonraki güncellemelerde, cihazdan cihaza ek yamalar gerekebilir.
Ses yaması oluştururken yama tutma yeri belirtilmemişse ses yaması tanımlayabilecek benzersiz bir yama tutma yeri oluşturmak için ses HAL'si gerekir. Aksi takdirde, ses HAL'i ses yamasını güncellemek için verilen ses yaması tutamacını kullanmalıdır.
Eski bir ses HAL'si ve AOSP HIDL sarmalayıcısı kullanılıyorsa eski ses HAL'si, ana HAL sürümünü 3.0 olarak 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üksek bir sürüme ayarlaması gerekir. Daha fazla bilgi için varsayılan HIDL uygulaması bölümündeki
Device::supportsAudioPatches()
konusuna bakın. Bu bilgiler Cuttlefish için ses HAL'inde de bulunabilir.
Özelleştirme
Bu özelliği devre dışı bırakmak veya ses cihazı türlerinin eklenmesini sağlayan çerçevedeki ses cihazı yeniden düzenlemesini geri almak mümkün değildir.
Eklenen tüm ses cihazı türleri, tek bir bit kümesiyle cihaz türünü temsil etmeye olanak tanır. Bu nedenle, mevcut HAL uygulamaları çalışmaya devam eder.
Yeni ses cihazı türleri eklenirse ve OEM'ler bunları kullanmak isterse ses HAL uygulamalarını yükseltip HIDL sürüm 6.0 veya sonraki bir sürüme geçmeleri gerekir. Akışı yönlendirmek için set_parameters
kullanmak, yeni ses cihazı türleri eklendiğinde beklenmedik sonuçlara neden olabileceğinden ana HAL sürümünün 3.0'a yükseltilmesi ve create_audio_patch
ile release_audio_patch
yöntemlerinin uygulanması zorunludur.
Doğrulama
OEM'lerin yapması gereken işlem, HAL uygulamalarını güncellemektir. Ses HAL'si için VTS, uygulamanın beklendiği gibi çalışıp çalışmadığını doğrulamak için kullanılabilir. Tüm testleri VTS dosyalarında bulabilirsiniz.