Sıcak takma işlemi

Ekran özellikleri (ör. ekran modları ve desteklenen HDR türleri), harici olarak bağlanmış ekranlara (HDMI veya DisplayPort ile) sahip cihazlarda (ör. Android TV set üstü kutular ve OTT cihazları) dinamik olarak değişebilir. Bu değişiklik, kullanıcının bir ekrandan diğerine geçmesi veya cihazı bağlı bir ekran olmadan başlatması gibi bir HDMI hotplug sinyali sonucunda gerçekleşebilir. Android 12 ve sonraki sürümlerde, çalışırken takma ve dinamik ekran özelliklerini işlemek için çerçevede değişiklikler yapıldı.

Bu sayfada, Composer HAL uygulamasında ekran takma/çıkarma işlemlerinin ve ekran özelliklerindeki değişikliklerin nasıl ele alındığı 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 ekran özelliklerindeki değişiklikleri nasıl işlediği açıklanmaktadır.

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

  1. Çerçeve, ekran özelliklerinde bir değişiklik algıladığında onHotplug(display, connection=CONNECTED) bildirimi alır.
  2. Bildirim alındığında çerçeve, 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 arama işlevini gönderir.

Çerçeve, sonraki onHotplug(display, connection=CONNECTED) etkinliklerinde çerçeve arabelleklerini yeniden ayırır. Yeni çerçeve arabellekleri ayrılırken hataları önlemek için çerçeve arabellek belleğinin nasıl düzgün şekilde yönetileceği hakkında daha fazla bilgi edinmek için İstemci çerçeve arabelleği yönetimi başlıklı makaleyi inceleyin.

Sık karşılaşılan bağlantı senaryolarını yönetme

Bu bölümde, birincil ekran bağlıyken ve bağlantısı kesilmişken uygulamalarınızdaki çeşitli bağlantı senaryolarının nasıl doğru şekilde ele alınacağı açıklanmaktadır.

Android çerçevesi, mobil cihazlar için geliştirildiğinden bağlantısı kesilmiş bir birincil ekran için yerleşik destek sunmaz. Bunun yerine, birincil ekranın fiziksel olarak bağlantısı kesildiğinde HAL, çerçeveyle etkileşimlerinde birincil ekranı yer tutucu bir ekranla değiştirmelidir.

Aşağıdaki senaryolar, harici olarak bağlı ve bağlantısı kesilebilen ekranlara sahip STB'lerde ve TV dongle'larında meydana gelebilir. Bu senaryolar için destek uygulamak üzere aşağıdaki tablodaki bilgileri kullanın:

Senaryo Kullanım
Başlatma sırasında bağlı ekran yok
  • Composer HAL'den çerçeveye onHotplug(display, connection=CONNECTED) sinyal gönderin.
  • Composer HAL'deki fiziksel ekran durumunu yer tutucu ekran durumuyla değiştirin.
Birincil ekran fiziksel olarak bağlı olmalıdır.
Birincil ekranın fiziksel bağlantısı kesilmişse
  • Composer HAL'den çerçeveye başka bir onHotplug(display, connection=CONNECTED) etkinlik gönderin.
  • Composer HAL'deki fiziksel ekran durumunu yer tutucu ekran durumuyla değiştirin. Yer tutucu ekranın tek bir görüntüleme modu olmalıdır. Böylece çerçeve, onDisplayChanged geri aramasını uygulamalara gönderir (çünkü desteklenen modlar kümesi değişmiştir). Uygulamaların yapılandırma değişikliği etkinlikleri almaması için bu tek ekran modu, bağlantı kesilmeden önce fiziksel ekranın son etkin moduyla eşleşmelidir.

HDMI dışı 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 donanım anahtarı, CVBS bağlantısı üzerinden 480i gibi desteklenmeyen bir çözünürlüğü görüntülemeye çalıştığında kullanıcıya bir hata mesajı gösterilir.

STB veya TV donanım anahtarında hem HDMI hem de HDMI olmayan bağlantılar varsa HDMI bağlantısı birincil ekran, HDMI olmayan bağlantı ise devre dışı olur. Sonuç olarak, HDMI dışı bağlantı hala bağlıyken HDMI bağlantısı kesilirse SurfaceFlinger'a bir etkinlik gönderilir ve HDMI dışı ekranın özellikleri getDisplayAttribute ve diğer IComposerClient API'leri (ör. getHdrCapabilities) aracılığıyla yansıtılmalıdır.

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

Composer HAL, desteklenen ekran yapılandırmalarını setActiveConfig veya setActiveConfigWithConstraints çerçeve çağrısıyla eşzamanlı olarak güncellerse yarış durumu oluşabilir. Bu sorunu önlemek için Composer HAL'ı uygulayarak sıralı kimlikler kullanabilirsiniz.

Bu bölümde, yarış koşullarının nasıl oluşabileceği açıklanmakta ve ardından bu koşulları önlemek için sıralı kimlikler kullanacak şekilde Composer HAL'nin nasıl uygulanacağıyla ilgili ayrıntılar verilmektedir.

Yeni gösterim yapılandırmalarına yeni ve sıralı kimlikler ATANMADIĞINDA yarış durumu oluşmasına neden olan aşağıdaki etkinlik sırasını göz önünde bulundurun:

  1. Desteklenen görüntülü reklam yapılandırma kimlikleri şunlardır:

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

  3. Aynı anda Composer HAL, ekran yapılandırmalarındaki bir değişikliği işler ve dahili durumunu aşağıdaki gibi gösterilen yeni bir ekran yapılandırmaları 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 kümesinin 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) değerini alır.

  6. HAL, gerçekte 1080x1920 60 Hz seçilmiş olmasına rağmen çerçevenin 2160x3840 60 Hz için yapılandırma değişikliği istediğini yorumlar.

Sıralı olmayan kimlik atamalarının kullanıldığı süreç, seçilen yapılandırma değişikliğinin yanlış yorumlanmasıyla burada sona erer.

Composer HAL'yi sıralı kimlikleri kullanacak şekilde yapılandırma

Bu tür rekabet durumlarını önlemek için OEM, Composer HAL'yi aşağıdaki şekilde uygulamalıdır:

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

Bu adımlar, aşağıdaki tartışmada gösterildiği gibi yarış koşullarını önlemeye yardımcı olur.

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

  1. Desteklenen görüntülü reklam yapılandırma kimlikleri şunlardır:

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

  3. Görüntü yapılandırmalarında bir değişiklik işlendiğinde, bir sonraki kullanılmayan tam sayıdan başlayarak bir sonraki yapılandırma kimlikleri grubu atanır. Bu durum 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 kümesinin 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) değerini alır.

  6. Composer HAL, kimlik artık geçerli olmadığından aramayı 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şlevlerle çerçeve, 1080x1920 çözünürlük ve 60 Hz 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'lik bir yapılandırma değişikliği istediğini doğru şekilde yorumlar.

Önceki örnekte gösterildiği gibi, sıralı kimlik atamalarını kullanan işlem, yarış koşulunun önlendiğini ve doğru ekran yapılandırması değişikliğinin güncellendiğini doğrular.