Android 4.1 sürümü, daha düşük gecikmeli bir ses çıkış yolu için dahili çerçeve değişiklikleri getirdi. Minimum genel istemci API'si veya HAL API değişikliği vardı. Bu belge, zaman içinde gelişmeye devam eden ilk tasarımı açıklamaktadır. Bu tasarımın iyi bir şekilde anlaşılması, cihaz OEM ve SoC satıcılarının tasarımı kendi cihazlarına ve yonga setlerine doğru bir şekilde uygulamalarına yardımcı olacaktır. Bu makale, uygulama geliştiricileri için tasarlanmamıştır.
Parça oluşturma
İstemci isteğe bağlı olarak AudioTrack C++ yapıcısının veya
AudioTrack::set() 'in
audio_output_flags_t parametresinde
AUDIO_OUTPUT_FLAG_FAST bitini ayarlayabilir. Şu anda bunu yapan tek müşteriler:
- OpenSL ES veya AAudio tabanlı Android yerel ses
- android.media.SoundPool
- android.media.ToneGenerator
AudioTrack C++ uygulaması,
AUDIO_OUTPUT_FLAG_FAST isteğini inceler ve isteğe bağlı olarak istemci düzeyinde isteği reddedebilir. İsteği iletmeye karar verirse, bunu
IAudioTrack fabrika yöntemi
IAudioFlinger::createTrack() 'nin
track_flags_t parametresinin
TRACK_FAST bitini kullanarak yapar.
AudioFlinger ses sunucusu,
TRACK_FAST isteğini inceler ve isteğe bağlı olarak isteği sunucu düzeyinde reddedebilir. İstemciye, paylaşılan bellek kontrol bloğunun
CBLK_FAST biti aracılığıyla isteğin kabul edilip edilmediğini bildirir.
Kararı etkileyen faktörler şunları içerir:
- Bu çıktı için hızlı bir karıştırıcı iş parçacığının varlığı (aşağıya bakın)
- Örnek oranını takip et
- Bu iz için geri arama işleyicilerini yürütmek için bir istemci iş parçacığının varlığı
- Tampon boyutunu izle
- Mevcut hızlı yol yuvaları (aşağıya bakın)
Müşterinin talebi kabul edilirse buna "hızlı yol" denir. Aksi takdirde buna "normal yol" denir.
Karıştırıcı iplikler
AudioFlinger normal bir mikser dizisi oluşturduğunda, hızlı bir mikser dizisi de oluşturup oluşturmamaya karar verir. Hem normal mikser hem de hızlı mikser, belirli bir iz ile değil, bir dizi iz ile ilişkilendirilir. Her zaman normal bir karıştırıcı iplik vardır. Hızlı karıştırıcı iplik, eğer varsa, normal mikser ipliğine tabidir ve onun kontrolü altında hareket eder.
Hızlı karıştırıcı
Özellikler
Hızlı karıştırıcı iplik şu özellikleri sağlar:
- Normal mikserin alt miksajını ve 7 adede kadar istemci hızlı parçasını miksleme
- İz başına zayıflama
Atlanan özellikler:
- Parça başına örnekleme hızı dönüşümü
- Parça efektleri başına
- Karışım efektleri başına
Dönem
Hızlı karıştırıcı, önerilen iki ila üç milisaniye (ms) periyoduyla veya programlama kararlılığı için gerekirse beş ms'lik biraz daha yüksek bir periyotla periyodik olarak çalışır. Bu sayı, tam arabellek ardışık düzenini hesaba katarak, toplam gecikmenin 10 ms mertebesinde olacağı şekilde seçilmiştir. Daha küçük değerler mümkündür, ancak CPU programlama öngörülebilirliğine bağlı olarak güç tüketiminin artmasına ve hata olasılığına neden olabilir. 20 ms'ye kadar daha büyük değerler mümkündür, ancak toplam gecikmenin azalmasına neden olur ve bundan kaçınılmalıdır.
planlama
Hızlı karıştırıcı, yükseltilmiş
SCHED_FIFO önceliğinde çalışır. Çok az CPU süresine ihtiyaç duyar, ancak sık sık ve düşük zamanlama seğirmesiyle çalışması gerekir. Jitter , döngü süresindeki değişimi ifade eder: gerçek döngü süresi ile beklenen döngü süresi arasındaki farktır. Çok geç koşmak, yetersiz çalışma nedeniyle aksaklıklara neden olur. Çok erken çalıştırma, yol veri sağlamadan önce hızlı bir yoldan çekilme nedeniyle aksaklıklara neden olur.
engelleme
İdeal olarak, hızlı karıştırıcı iş parçacığı, HAL
write() dışında hiçbir zaman bloke olmaz. Hızlı karıştırıcı içindeki diğer engelleme oluşumları hata olarak kabul edilir. Özellikle, mutekslerden kaçınılır. Bunun yerine, engellemeyen algoritmalar (kilitsiz algoritmalar olarak da bilinir) kullanılır. Bu konu hakkında daha fazla bilgi için Öncelik tersine çevirmeden kaçınma konusuna bakın.
Diğer bileşenlerle ilişki
Hızlı karıştırıcının müşterilerle çok az doğrudan etkileşimi vardır. Özellikle, ciltleyici düzeyindeki işlemleri görmez, ancak istemcinin paylaşılan bellek kontrol bloğuna erişir.
Hızlı karıştırıcı, komutları normal karıştırıcıdan bir durum kuyruğu aracılığıyla alır.
İzleme verilerini çekmenin dışında, müşterilerle etkileşim normal karıştırıcı aracılığıyla gerçekleştirilir.
Hızlı karıştırıcının birincil alıcısı ses HAL'dir.
Normal karıştırıcı
Özellikler
Tüm özellikler etkinleştirildi:
- 32 parçaya kadar
- İz başına zayıflama
- Parça başına örnekleme hızı dönüşümü
- Efekt işleme
Dönem
Periyot, >= 20 ms olan hızlı karıştırıcı periyodunun birinci tam katı olarak hesaplanır.
planlama
Normal karıştırıcı, yükseltilmiş
SCHED_OTHER önceliğinde çalışır.
engelleme
Normal karıştırıcının engellemesine izin verilir ve bunu genellikle çeşitli mutekslerde ve alt karışımını yazmak için bir engelleme borusunda yapar.
Diğer bileşenlerle ilişki
Normal karıştırıcı, ciltleyici diziler, ses politikası yöneticisi, hızlı karıştırıcı iş parçacığı ve istemci izleri dahil olmak üzere dış dünyayla kapsamlı bir şekilde etkileşime girer.
Normal mikserin eviyesi, hızlı mikserin 0 numaralı rayına giden bir tıkama borusudur.
Bayraklar
AUDIO_OUTPUT_FLAG_FAST biti bir ipucudur. İsteğin yerine getirileceğinin garantisi yoktur.
AUDIO_OUTPUT_FLAG_FAST , müşteri düzeyinde bir kavramdır. Sunucuda görünmüyor.
TRACK_FAST bir istemci -> sunucu konseptidir.