Priz kullanımı

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ındaki ekran hotspot'larının işlenmesi ve görüntüleme özelliklerinde yapılan 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 işlediği 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ı işleme

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. HAL, bunun yerine birincil ekranın fiziksel olarak bağlantısının kesilmesi durumunda, çerçeveyle olan etkileşimlerinde birincil ekranı bir 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. Bu tek ekran modu, uygulamaların yapılandırma değişikliği etkinlikleri almaması için bağlantı kesmeden önce 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
  • 2.160x3.840
  • 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 olmayan bağlantı hâlâ bağlıyken HDMI 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) üzerinden 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ı kimlikleri kullanmak ve bu sorunu önlemek için Composer HAL'yi 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ını 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ı kullanan süreç, istenen yapılandırma değişikliğinin yanlış bir şekilde 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 görüntüleme yapılandırmalarını güncellerken yeni görüntüleme 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.

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

Yeni ekran yapılandırmalarına yeni, sıralı kimlikler atandığında aşağıdaki etkinlik dizisini 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ını yapar.

  3. Ekran yapılandırmalarında bir değişiklik işlendiğinde, aşağıdaki şekilde gösterilen, kullanılmayan bir sonraki tamsayıdan başlayarak bir sonraki yapılandırma kimliği 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ı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, istenen çözünürlük ve yenileme hızı (1080x1920 ve 60 Hz) 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 isteğinde bulunduğunu 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.