Android ses sisteminde, ses cihazı türünü temsil etmek için audio_devices_t
kullanılır. Ses kaynak kodunda, bir veya daha fazla belirtilen cihazı filtrelemek ya da seçmek için bit alanı olarak yaygın olarak kullanılır. Android 11'den önce, ses giriş/çıkış cihazı türleri için 30 cihaz 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ürü sayısı sınırını kaldırdık.
Ses cihazı türlerinin sayısıyla ilgili sınırı kaldırmak için ses cihazı türleri artık bit maskeleri yerine numaralandırılmış değerler olarak belirlenmiştir.
Mevcut tüm ses cihazı türleri olduğu gibi korunur. Giriş veya çıkış cihazlarını ayırt etmek için AUDIO_DEVICE_BIT_IN
hâlâ kullanılır. Yeni ses cihazı türleri eklenirken, mevcut değerler arasındaki boşluklara listelenen değerler eklenir.
OEM'ler, yeni listelenen ses cihazı türleri eklendiğinde beklenmedik sonuçlara neden olabileceği için audio_devices_t
değerini bit maskesi olarak kullanmamalıdır.
Örnekler ve kaynak
Android 11'den önce, ses cihazı türleri bit maskeleri olarak iki şekilde kullanılıyordu.
- Birden çok ses cihazını temsil etmek için
audio_devices_t
değerini kullanma audio_devices_t
değerinin, belirli bir kategorideki ses cihazı türlerini içerip içermediği kontrol edilir.
Birden fazla ses cihazı türünü temsil etmek için
/libaudiofoundation/include/media/AudioContainers.h
içinde audio_devices_t
kapsayıcı std::set
olan DeviceTypeSet
adlı bir sınıf kullanılır. Sınıf, tedarikçi firma tarafından kullanılabilen
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çindeki yardımcı işlevleriaudio_is_.*_device
kullanın.
Birden fazla ses sistemi türü durumu için libaudiofoundation
içindeki yardımcı işlevleri kullanın. Örneğin, belirtilen tüm ses cihazı türlerinin aynı türde olup olmadığını kontrol etmek için
AudioContainers.h
içinde areAllOfSameDeviceType (DeviceTypeSet, std::function
değerini kullanın.
Uygulama
OEM'lerin, ses cihazı türü bit alanı temsilini ses HAL uygulamasından kaldırması gerekir.
- Bir bit alanındaki tüm cihaz depolamaları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şlemleri kullanmayı durdurun.
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, listelenen ses cihazı türleri eklendiğinde bit işlemleri beklenmedik 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ırma kullanın. Bir ses cihazı türünün belirtilen kategoride olup olmadığını kontrol etmek için
/system/media/audio/include/system/audio.h
içindeki yardımcı işlevleri kullanın. Örneğin,audio_is_output_device(audio_devices_t device)
. - Ses sistemi türü grupları için önceden tanımlanmış değerleri kullanmayı durdurun.
system/media/audio/include/system/audio-base-utils.h
'ta ses cihazı türü grupları (AUDIO_DEVICE_OUT_ALL
) için bazı önceden tanımlanmış değerler vardır. Bu değerlerin tümü ayrılmıştır ancak yeni listelenen ses cihazı türleri eklendiğinde doğru olmayacağı için desteği sonlandırılabilir.audio-base-utils.h
içinde tanımlanmış yeni ses cihazı türü grupları bulunmaktadır. Bu gruplar,AUDIO_DEVICE_OUT_ALL_ARRAY
gibi ses cihazı türleri dizisidir. - 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 kullanır. Bu nedenle, yeni numaralandırılmış ses cihazı türleri eklenirse beklenmedik sonuçlar olabilir.Şu anda iki tür ses yaması gereklidir:
- Oynatma için cihaz yamaları ile karıştırma
- Kayıt için parçaları karıştıracak cihaz
Sonraki güncellemelerde, cihazlar arası bağlantı için ek yamalar gerekebilir.
Ses yaması oluşturulurken yama adı belirtilmezse ses HAL'inin, ses yamasını tanımlayabilecek benzersiz bir yama adı oluşturması gerekir. Aksi takdirde, ses HAL'si, ses yamasını güncellemek için belirtilen ses yaması tutma yerini kullanmalıdır.
Eski bir ses HAL'i ve AOSP HIDL sarmalayıcısı kullanılıyorsa eski ses HAL'i, ana HAL sürümünü 3.0 olarak ayarlamalıdır.
Ses yaması özelliğini etkinleştirmek için ses HAL'i, ana HAL sürümünü 3.0 veya daha yüksek bir sürüme ayarlamalıdır. Daha fazla bilgi için varsayılan HIDL uygulamasındaki
Device::supportsAudioPatches()
bölümüne bakın. Bu bölüme Cuttlefish için ses HAL'inde de ulaşabilirsiniz.
Özelleştirme
Bu özelliği devre dışı bırakmak veya ses cihazı türlerini eklemeyi mümkün kılan çerçevede ses cihazı yeniden yapılandırmasını geri almak mümkün değildir.
Eklenen tüm ses cihazı türleri, bir cihaz türünü tek bir bit kümesiyle 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ükseltmeleri ve HIDL 6.0 veya sonraki bir sürüme geçmeleri gerekir. Akış için set_parameters
kullanılması, yeni ses cihazı türleri eklendiğinde beklenmedik sonuçlara neden olabileceğinden, ana HAL sürümünü 3.0'a yükseltmek ve create_audio_patch
ile release_audio_patch
yöntemlerini uygulamak zorunludur.
Doğrulama
OEM'lerin yapması gereken iş, HAL uygulamalarını güncellemektir. Uygulamanın istenen şekilde çalışıp çalışmadığını doğrulamak için ses HAL'i için VTS kullanılabilir. Tüm testler VTS dosyalarında bulunabilir.