Sıcak takma işlemi

Ekran özellikleri (ör. ekran modları ve desteklenen HDR türleri), Android TV set üstü kutuları (STB'ler) ve internetten yayın yapan (OTT) cihazlar gibi harici olarak bağlı ekranlara (HDMI veya DisplayPort ile) sahip cihazlarda dinamik olarak değişebilir. Bu değişiklik, HDMI hotplug sinyali sonucunda gerçekleşebilir. Örneğin, kullanıcı bir ekrandan diğerine geçtiğinde veya cihazı bağlı bir ekran olmadan başlattığında. Android 12 ve sonraki sürümler, sıcak takma ve dinamik ekran özelliklerini ele almak için çerçevede yapılan değişiklikleri içerir.

Bu sayfada, Composer HAL uygulamasında ekran hotplug'larının ele alınması ve ekran özelliklerindeki değişiklikler açıklanmaktadır. Ayrıca, ilişkili çerçeve arabelleğinin nasıl yönetileceği ve bu durumlarda yarış koşullarının nasıl önleneceği de ele alınmaktadır.

Görüntüleme özelliklerini güncelleme

Bu bölümde, Android çerçevesinin Composer HAL tarafından başlatılan görüntüleme özelliklerindeki değişiklikleri nasıl ele aldığı açıklanmaktadır.

Android'in ekran özelliklerindeki değişiklikleri düzgün şekilde işleyebilmesi için OEM'nin, Composer HAL'i, ekran özelliklerindeki değişiklikleri çerçeveye bildirmek için onHotplug(display, connection=CONNECTED) kullanacak şekilde uygulaması gerekir. Bu uygulandıktan sonra Android, ekran özelliklerindeki değişiklikleri aşağıdaki şekilde işler:

  1. Görüntüleme özelliklerinde bir değişiklik algılandığında çerçeve bir onHotplug(display, connection=CONNECTED) bildirimi alır.
  2. Çerçeve, bildirimi aldığında görüntüleme durumunu bırakır ve getActiveConfig, getDisplayConfigs, getDisplayAttribute, getColorModes, getHdrCapabilities ve getDisplayCapabilities yöntemlerini kullanarak HAL'deki yeni özelliklerle yeniden oluşturur.
  3. Çerçeve yeni bir görüntüleme durumu oluşturduktan sonra, bu tür etkinlikleri dinleyen uygulamalara onDisplayChanged geri çağırma işlevini gönderir.

Çerçeve, sonraki onHotplug(display, connection=CONNECTED) etkinliklerinde çerçeve ardışık düzenlerini yeniden ayarlar. Yeni çerçeve belleklerinin ayrılması sırasında hataları önlemek için çerçeve belleğinin nasıl düzgün şekilde yönetileceği hakkında daha fazla bilgi için İstemci çerçeve belleği yönetimi başlıklı makaleyi inceleyin.

Sık karşılaşılan bağlantı senaryolarını ele alma

Bu bölümde, birincil ekran bağlıyken ve bağlantısı kesildiğinde uygulamalarınızda çeşitli bağlantı senaryolarının nasıl düzgün şekilde ele alınacağı ele alınmaktadır.

Mobil cihazlar için tasarlanan Android çerçevesi, bağlantısı kesilmiş birincil ekran için yerleşik destek içermez. Bunun yerine HAL, birincil ekranın fiziksel olarak bağlantısının kesilmesi durumunda çerçeveyle etkileşimlerinde birincil ekranı yer tutucu ekranla değiştirmelidir.

Bağlantısı kaldırılabilen harici olarak bağlı ekranlara sahip STB'lerde ve TV dongle'larında aşağıdaki senaryolar ortaya çıkabilir. Bu senaryolara yönelik desteği uygulamak için aşağıdaki tablodaki bilgileri kullanın:

Senaryo Kullanım
Açılış sırasında bağlı ekran yok
  • Composer HAL'den çerçeveye bir onHotplug(display, connection=CONNECTED) sinyal gönderin.
  • Composer HAL'deki fiziksel görüntüleme durumunu bir yer tutucu görüntüleme durumuyla değiştirin.
Birincil ekran fiziksel olarak bağlı
Birincil ekranın fiziksel olarak bağlantısı kesildi
  • Composer HAL'den çerçeveye başka bir onHotplug(display, connection=CONNECTED) etkinliği gönderin.
  • Composer HAL'deki fiziksel görüntüleme durumunu bir yer tutucu görüntüleme durumuyla değiştirin. Yer tutucu ekranın tek bir görüntü modu olmalıdır. Böylece, desteklenen modlar değiştiği için çerçeve, onDisplayChanged geri çağırma işlevini uygulamalara gönderir. Uygulamaların yapılandırma değişikliği etkinlikleri almaması için bu tek ekran modu, bağlantı kesmeden önceki fiziksel ekranın son etkin moduyla eşleşmelidir.

HDMI dışındaki bağlantılarla ilgili dikkat edilmesi gereken noktalar

Android TV yalnızca aşağıdaki çözünürlükleri destekler:

  • 720x1280
  • 1080x1920
  • 2160x3840
  • 4320x7680

Bir STB veya TV dongle'ı, CVBS bağlantısı üzerinden 480i gibi desteklenmeyen bir çözünürlüğü göstermeye çalıştığında kullanıcıya bir hata mesajı gösterilir.

STB veya TV dongle'da hem HDMI hem de HDMI olmayan bağlantılar varsa HDMI bağlantısı birincil ekran olur ve HDMI olmayan bağlantı devre dışı bırakılır. Sonuç olarak, HDMI bağlantısı hâlâ bağlıyken HDMI olmayan bağlantının bağlantısı kesilirse SurfaceFlinger'a bir etkinlik gönderilir ve HDMI olmayan ekranın özellikleri getDisplayAttribute ve diğer iComposerClient API'leri (getHdrCapabilities gibi) aracılığıyla yansıtılmalıdır.

Yarışma koşullarını önlemek için sıralı yapılandırma kimlikleri kullanma

Composer HAL, desteklenen ekran yapılandırmalarını setActiveConfig veya setActiveConfigWithConstraints çağıran çerçeveyle eşzamanlı olarak güncellerse yarış koşulları ortaya çıkabilir. Çözüm, sıralı kimlikler kullanmak ve bu sorunu önlemek için Composer HAL'i uygulamaktır.

Bu bölümde, yarış koşullarının nasıl ortaya çıkabileceği açıklandıktan sonra, bu tür koşulları önlemek için Composer HAL'in nasıl uygulanacağıyla ilgili ayrıntılar verilmektedir.

Yeni, sıralı kimlikler yeni görüntüleme yapılandırmalarına ATANDIĞINDA yarış koşuluna neden olan aşağıdaki etkinlik sırasını düşünün:

  1. Desteklenen görüntü yapılandırması kimlikleri şunlardır:

    • id=1, 1080x1920 60 Hz
    • id=2, 1080x1920 50 Hz
  2. Çerçeve, setActiveConfig(display, config=1) çağrısı yapar.

  3. Aynı anda Composer HAL, ekran yapılandırmalarında bir değişiklik işler ve dahili durumunu aşağıdaki gibi gösterilen yeni bir ekran yapılandırma grubuyla günceller:

    • id=1, 2160x3840 60 Hz
    • id=2, 2160x3840 50 Hz
    • id=3, 1080x1920 60 Hz
    • id=4, 1080x1920 50 Hz
  4. Composer HAL, desteklenen modların değiştiğini bildirmek için çerçeveye bir onHotplug etkinliği gönderir.

  5. Composer HAL, setActiveConfig(display, config=1)'ı (2. adımdan) alır.

  6. HAL, çerçevenin 2160x3840 60 Hz olarak yapılandırma değişikliği istediğini yorumlar. Ancak gerçekte 1080x1920 60 Hz isteniyordur.

Sıralı olmayan kimlik atamalarının kullanıldığı işlem, istenen yapılandırma değişikliğinin yanlış yorumlanmasıyla burada sona erer.

Composer HAL'i sıralı kimlikler kullanacak şekilde yapılandırma

Bu tür yarış koşullarını önlemek için OEM'nin Composer HAL'i aşağıdaki gibi uygulaması gerekir:

  • Composer HAL, desteklenen ekran yapılandırmalarını güncellerken yeni ekran yapılandırmalarına yeni ve sıralı kimlikler atar.
  • Çerçeve, setActiveConfig veya setActiveConfigWithConstraints işlevini geçersiz bir yapılandırma kimliğiyle çağrdığında Composer HAL bu çağrıyı yoksayar.

Aşağıdaki tartışmada gösterildiği gibi, bu adımlar yarış koşullarını önlemeye yarar.

Yeni görüntüleme yapılandırmalarına yeni, sıralı kimlikler atandığında aşağıdaki etkinlik sırasını göz önünde bulundurun:

  1. Desteklenen görüntü yapılandırması kimlikleri şunlardır:

    • id=1, 1080x1920 60 Hz
    • id=2, 1080x1920 50 Hz
  2. Çerçeve, setActiveConfig(display, config=1) çağrısı yapar.

  3. Ekran yapılandırmalarında bir değişiklik işlendiğinde, bir sonraki kullanılmayan tam sayıya başlayarak bir sonraki yapılandırma kimliği grubu atanır. Bu grup aşağıdaki gibi gösterilir:

    • id=3, 2160x3840 60 Hz

    • id=4, 2160x3840 50 Hz

    • id=5, 1080x1920 60 Hz

    • id=6, 1080x1920 50 Hz

  4. Composer HAL, desteklenen modların değiştiğini bildirmek için çerçeveye bir onHotplug etkinliği gönderir.

  5. Composer HAL, setActiveConfig(display, config=1) değerini alır (2. adımdan).

  6. Kimlik artık geçerli olmadığından Composer HAL, çağrıyı yoksayar.

  7. Çerçeve, 4. adımdaki onHotplug etkinliğini alır ve işler. getDisplayConfigs ve getDisplayAttribute işlevlerini kullanarak Composer HAL'i çağırır. Bu işlevler sayesinde çerçeve, 1080x1920 ve 60 Hz çözünürlük ve yenileme hızı için yeni kimliği (5) tanımlar.

  8. Çerçeve, güncellenmiş kimliği 5 olan başka bir setActiveConfig etkinliği gönderir.

  9. Composer HAL, 5. adımdan setActiveConfig(display, config=5) alır.

  10. HAL, çerçevenin 1080x1920 60 Hz olarak yapılandırma değişikliği istediğini doğru şekilde yorumlar.

Yukarıdaki örnekte gösterildiği gibi, sıralı kimlik atamalarının kullanıldığı işlem, yarış koşulunun önlenmesini ve doğru görüntüleme yapılandırması değişikliğinin güncellenmesini sağlar.