Daha az gecikme süresi için tasarım

Android 4.1 sürümü, daha düşük gecikmeli ses çıkış yolu için dahili çerçeve değişiklikleri getirdi. Minimal düzeyde genel istemci API'si veya HAL API değişikliği oldu. Bu belge, zaman içinde gelişmeye devam eden ilk tasarımı açıklamaktadır. Bu tasarımın iyi anlaşılması, cihaz OEM ve SoC satıcılarının tasarımı kendi cihazlarında ve yonga setlerinde doğru şekilde uygulamalarına yardımcı olacaktır. Bu makale uygulama geliştiricilerine yönelik değildir.

Oluşturmayı izle

İstemci isteğe bağlı olarak AudioTrack C++ yapıcısının veya AudioTrack::set() öğesinin audio_output_flags_t parametresinde AUDIO_OUTPUT_FLAG_FAST bitini ayarlayabilir. Şu anda bunu yapan tek müşteriler şunlardır:

AudioTrack C++ uygulaması, AUDIO_OUTPUT_FLAG_FAST isteğini inceler ve isteğe bağlı olarak isteği istemci düzeyinde reddedebilir. İsteği iletmeye karar verirse, bunu IAudioTrack fabrika yöntemi IAudioFlinger::createTrack() ın 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 şunlardır:

  • Bu çıkış için hızlı karıştırıcı dişinin varlığı (aşağıya bakın)
  • Örnekleme hızını takip edin
  • Bu parça için geri arama işleyicilerini yürütmek üzere bir istemci iş parçacığının varlığı
  • Tampon boyutunu izle
  • Mevcut hızlı izleme yuvaları (aşağıya bakın)

Müşterinin talebi kabul edilirse buna "hızlı yol" denir. Aksi takdirde buna "normal yol" denir.

Mikser konuları

AudioFlinger normal bir mikser iş parçacığı oluşturduğunda, hızlı bir mikser iş parçacığı da oluşturup oluşturmayacağına karar verir. Hem normal mikser hem de hızlı mikser belirli bir parçayla değil, bir dizi parçayla ilişkilidir. Her zaman normal bir karıştırıcı ipliği vardır. Hızlı karıştırıcı iplik varsa normal karıştırıcı dişe tabidir ve onun kontrolü altında hareket eder.

Hızlı karıştırıcı

Özellikler

Hızlı karıştırıcı ipliği şu özellikleri sağlar:

  • Normal mikserin alt miksajının ve 7'ye kadar istemci hızlı kanalının mikslenmesi
  • Parça zayıflaması başına

İhmal edilen özellikler:

  • Parça başına örnekleme oranı dönüşümü
  • Parça başına efektler
  • Karışım başına efektler

Dönem

Hızlı karıştırıcı, önerilen iki ila üç milisaniyelik (ms) bir süre veya zamanlama kararlılığı için gerekiyorsa beş ms'lik biraz daha yüksek bir süre ile periyodik olarak çalışır. Bu sayı, arabellek hattının tamamı dikkate alındığında toplam gecikmenin 10 ms civarında olacağı şekilde seçilmiştir. Daha küçük değerler mümkündür ancak CPU zamanlama öngörülebilirliğine bağlı olarak artan güç tüketimine ve aksaklık 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 zamanına ihtiyaç duyar, ancak sık sık ve düşük planlama seğirmesiyle çalışması gerekir. Titreşim 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 olacaktır. Çok erken koşmak, parkur veri sağlamadan önce hızlı parkurdan çekilme nedeniyle aksaklıklara neden olacaktır.

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ıdaki diğer engelleme olayları hata olarak kabul edilir. Özellikle mutekslerden kaçınılır. Bunun yerine engellemeyen algoritmalar (kilitlenmeyen algoritmalar olarak da bilinir) kullanılır. Bu konu hakkında daha fazla bilgi için Önceliğin tersine çevrilmesinden 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 bağlayıcı düzeyindeki işlemleri görmez ancak istemcinin paylaşılan bellek kontrol bloğuna erişir.

Hızlı karıştırıcı, normal karıştırıcıdan komutları bir durum kuyruğu aracılığıyla alır.

Parça verilerini çekmenin dışında, istemcilerle etkileşim normal mikser aracılığıyla gerçekleştirilir.

Hızlı mikserin birincil havuzu ses HAL'dir.

Normal karıştırıcı

Özellikler

Tüm özellikler etkinleştirildi:

  • 32 parçaya kadar
  • Parça zayıflaması başına
  • Parça başına örnekleme oranı dönüşümü
  • Efekt işleme

Dönem

Periyot, >= 20 ms olan hızlı karıştırıcı periyodunun birinci tamsayı 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 ayrıca alt karışımını yazmak için bir engelleme borusunda yapar.

Diğer bileşenlerle ilişki

Normal mikser, bağlayıcı iş parçacıkları, ses politikası yöneticisi, hızlı mikser iş parçacığı ve istemci parçaları dahil olmak üzere dış dünyayla kapsamlı bir şekilde etkileşime girer.

Normal karıştırıcının lavabosu, hızlı karıştırıcının 0 numaralı yoluna giden bloke edici bir borudur.

Bayraklar

AUDIO_OUTPUT_FLAG_FAST biti bir ipucudur. İsteğin yerine getirileceğinin garantisi yoktur.

AUDIO_OUTPUT_FLAG_FAST , istemci düzeyinde bir kavramdır. Sunucuda görünmüyor.

TRACK_FAST bir istemci -> sunucu konseptidir.