Cihaz türü sınırlaması

Android ses özelliğinde, ses sistemi türünü temsil etmek için audio_devices_t kullanılır. İnsanların ses kaynak kodunda bir veya daha fazla öğeyi filtrelemek veya seçmek için bit alanı olarak yaygın bir şekilde kullanılır belirtilen cihazlar. Android 11'den önce bu sınır 30'du ses giriş/çıkış cihazı türlerine sahip olabilir, yeni ses cihazı türleri eklemek için yedek yuva yoktur. Biz izin verilecek ses cihazı türü sayısı sınırlaması kaldırıldı yeni ses sistemi türü eklenecek.

Ses cihazı türlerinin sayısıyla ilgili sınırı kaldırmak için ses cihazı türleri artık numaralandırılmış değerleri kullanır.

Mevcut tüm ses sistemi türleri olduğu gibi korunur. AUDIO_DEVICE_BIT_IN giriş veya çıkış cihazlarını ayırt etmek için kullanılmaya devam eder. Yeni ses sistemi türleri eklenirken, bu türler Numaralanmış değerleri mevcut değerler arasındaki boşluklarda bulabilirsiniz.

audio_devices_t, OEM'ler tarafından bit maskesi olarak kullanılmamalıdır. yeni numaralandırılmış ses cihazı türleri eklendiğinde beklenmedik sonuçlar alınır.

Örnekler ve kaynak

Android 11'den önce ses sistemleri iki tipik kullanılıyordu olarak tanımlıyor.

  • Birden çok ses cihazını temsil etmek için audio_devices_t değeri kullanılıyor.
  • audio_devices_t değerinin ses sistemi türleri içerip içermediği kontrol ediliyor belirli bir kategoriden seçebilirsiniz.

Birden çok ses sistemi türünü temsil etmek için, DeviceTypeSet /libaudiofoundation/include/media/AudioContainers.h , audio_devices_t öğesinin std::set kapsayıcısı olan kullanılır. İlgili içeriği oluşturmak için kullanılan sınıfı, tedarikçi firma tarafından kullanılabilir durumda libaudiofoundation kitaplığı. Temsil etmek için birden çok ses C kodundaki cihaz türleri, bir dizi veya audio_devices_t listesi kullanılabilir.

Tek bir cihaz türünün belirli bir kategoride olup olmadığını kontrol etmek için yardımcı işlevleri kullanın içinde audio_is_.*_device /system/media/audio/include/system/audio.h. Birden fazla ses sistemi türü durumu için libaudiofoundation içindeki yardımcı işlevleri kullanın. Örneğin, örnek olarak, areAllOfSameDeviceType (DeviceTypeSet, std::function) içinde AudioContainers.h ile belirtilen tüm ses sistemi türlerinin aynı türdedir.

Uygulama

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

  1. Bir bit alanındaki tüm cihaz depolamalarını kaldırın.

    audio_devices_t, birden çok ses cihazını temsil etmek için kullanılmamalıdır bulunur. Bunun yerine bir liste veya vektör kullanın.

  2. Cihaz türü karşılaştırmaları için bit işlemleri kullanmayı durdurun.

    Android 11'den önceki sürümlerde ses sistemi türleri, bitfield'ı kullanır. Bu durumda, cihaz türleri için bit işlemleri yaygındır. en iyi uygulamaları görelim. Yeni, numaralandırılmış ses cihazı türleri eklendiğinde bit işlemleri, beklenmedik sonuçlar. Bunun yerine, yardımcı işlevleri kullanabilirsiniz. Tek bir ses cihazı türünü seçin, ardından iki değeri karşılaştırmak için doğrudan karşılaştırmayı kullanın. Sesin yayınlanıp yayınlanmadığını cihaz türü belirli bir kategorideyse, /system/media/audio/include/system/audio.h değerleridir. Örneğin, audio_is_output_device(audio_devices_t device)

  3. Ses sistemi türü grupları için önceden tanımlanmış değerleri kullanmayı durdurun.

    Ses sistemi türü grupları için önceden tanımlanmış değerler vardır. AUDIO_DEVICE_OUT_ALL, inç system/media/audio/include/system/audio-base-utils.h. Tüm bu değerler ayrılmış ancak yeni numaralandırma yapıldığında doğru olmayacağı için kullanımdan kaldırılabilir ses cihazı türleri eklendi. Şurada tanımlanmış yeni ses cihazı türü grupları var: audio-base-utils.h, şunlar gibi ses cihazı türleri dizisidir: AUDIO_DEVICE_OUT_ALL_ARRAY.

  4. create_audio_patch() ve release_audio_patch() uygulayın yönlendirme yöntemleri için set_parameters yöntemini kullanmalısınız.

    set_parameters yöntemi, ses cihazı türlerini bit alanı olarak kullanır. Dolayısıyla, yeni numaralandırılmış ses cihazı türleri eklenirse beklenmedik sonuçlar alınır.

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

    • Oynatmak için Mix to cihaz yamalarını kullanın
    • Yamaları karıştırarak kayıt için kullanılacak cihaz

    Sonraki güncellemelerde cihazlar arası yamalar gerekebilir.

    Ses yaması oluştururken yama herkese açık kullanıcı adı belirtildiğinde, ses HAL'sinin kullanılması gereken benzersiz bir yama tanımlamasına yardımcı olur. Aksi halde ses HAL'si, ses yamasını güncellemek için belirtilen ses yaması tutma yerini kullanmalıdır.

    Eski bir ses HAL'si ve AOSP HIDL sarmalayıcı kullanıyorsanız eski ses HAL'si ayarlanmalıdır. ana HAL sürümünü 3.0'a yükseltin.

    Ses yaması özelliğini etkinleştirmek için ses HAL'sinin ayarlanması gerekir. ana HAL sürümünü 3.0 veya daha yüksek. Device::supportsAudioPatches() bölümüne bakın varsayılan HIDL uygulaması bakın.

Özelleştirme

Özelliğin kapatılması veya olanak tanıyan temel çerçevedir.

Eklenen tüm ses sistemi türleri, tek bir bit grubu ile cihaz türünün temsil edilmesine olanak tanır. mevcut HAL uygulamaları çalışmaya devam ediyor.

Yeni ses cihazı türleri eklenirse ve OEM'ler bunları kullanmak isterse ses HAL uygulamasını yükseltmeleri ve HIDL 6.0 veya daha yeni bir sürüme geçmeleri gerekiyor. İnsanların ana HAL sürümünü 3.0'a yükseltmek ve create_audio_patch ve release_audio_patch yöntemleri, çünkü Akışı yönlendirmek için set_parameters kullanılması, şu durumlarda beklenmedik sonuçlara neden olabilir: yeni ses sistemi türü eklendiğinde.

Doğrulama

OEM'lerin yapması gereken işlem, HAL uygulamalarını güncellemektir. Şunun için VTS: ses HAL'si, uygulamanın istenen şekilde çalışıp çalışmadığını doğrulamak için kullanılabilir. Tümü tüm ayrıntıları VTS dosyaları.