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, tak çalıştır 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 arabelleklerin nasıl yönetileceği ve bu durumlarda yarış koşullarının nasıl önleneceği de ele alınmaktadır.

Ekran ö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 gibi ele alır:

  1. Çerçeve, ekran özelliklerinde bir değişiklik algıladığında onHotplug(display, connection=CONNECTED) bildirimini 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 çağırmasını gönderir.

Çerçeve, sonraki onHotplug(display, connection=CONNECTED) etkinliklerinde çerçeve arabelleklerini yeniden ayırır. Yeni çerçeve arabelleklerinin ayrılması sırasında 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ı ele alma

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ğlanmış 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 dongle'ı, 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 dongle'ı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 bağlantısı kesildiğinde HDMI olmayan bağlantı hala bağlıysa SurfaceFlinger'a bir etkinlik gönderilir ve HDMI olmayan ekranın özellikleri getDisplayAttribute ve diğer iComposerClient API'leri (ör. getHdrCapabilities) aracılığıyla yansıtılmalıdır.

Yarış durumları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. Bu sorunu önlemek için sıralı kimlikler kullanmak üzere Composer HAL'ı uygulamanız gerekir.

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 sıralı kimlikler yeni görüntülü reklam yapılandırmalarına ATANMADIĞINDA yarış durumu oluşmasına neden olan aşağıdaki etkinlik sırasını göz önünde bulundurun:

  1. Desteklenen ekran yapılandırması 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) değerini alır (2. adım).

  6. HAL, gerçekte 1080x1920 60 Hz istenmesine 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ç, istenen yapılandırma değişikliğinin yanlış yorumlanmasıyla burada sona erer.

Composer HAL'ı 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 işlevini çağırdığında Composer HAL, çağrıyı yoksayar.

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

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

  1. Desteklenen ekran yapılandırması 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 değişiklik işlendiğinde, bir sonraki kullanılmayan tam sayıdan başlayarak aşağıdaki gibi bir sonraki yapılandırma kimlikleri grubu atanır:

    • 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) değerini alır (2. adım).

  6. ID artık geçerli olmadığından Composer HAL, 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 istenen 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.

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