Priz kullanımı

Ekran özellikleri (ör. ekran modları ve desteklenen HDR türleri), Android TV set üstü kutular (STB'ler) ve baypas (OTT) cihazlar gibi harici olarak bağlı ekranlara (HDMI veya DisplayPort ile) sahip cihazlarda dinamik olarak değişebilir. Bu değişiklik, HDMI hızlı bağlantı sinyalinin bir sonucu olarak gerçekleşebilir. Örneğin, kullanıcının bir ekrandan diğerine geçme veya bağlı bir ekran olmadan cihazı başlatması gibi. Android 12 ve sonraki sürümler, çalışır durumda takma ve dinamik ekran özelliklerini yönetme ile ilgili çerçevede değişiklikler içerir.

Bu sayfada, Composer HAL uygulamasındaki ekran hotspot'larının işlenmesi ve görüntüleme ö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 işlediği açıklanmaktadır.

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

  1. Ekran özelliklerinde bir değişiklik algılandığında çerçeve bir onHotplug(display, connection=CONNECTED) bildirimi alır.
  2. Çerçeve, bildirimi aldıktan sonra görüntü 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ü durumunu yeniden 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 hatalardan kaçınmak için çerçeve arabelleği belleğinin doğru şekilde nasıl yönetileceği hakkında daha fazla bilgi için İstemci çerçeve arabelleği yönetimi bölümüne bakın.

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

Bu bölümde, birincil ekran bağlıyken ve bağlantısı kesildiğinde, uygulamalarınızda çeşitli bağlantı senaryolarını doğru şekilde nasıl ele alacağınız açıklanmaktadır.

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

Aşağıdaki senaryolar, bağlantısı kesilebilen harici olarak bağlı ekranlara sahip STB'lerde ve TV donanım anahtarlarında ortaya çıkabilir. Bu senaryolara yönelik desteği uygulamak için aşağıdaki tabloda yer alan bilgileri kullanın:

Senaryo Kullanım
Başlatma sırasında bağlı ekran yok
  • Composer HAL'sinden çerçeveye bir onHotplug(display, connection=CONNECTED) sinyali gönderin.
  • Composer HAL içindeki fiziksel görüntüleme durumunu 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'sinden çerçeveye başka bir onHotplug(display, connection=CONNECTED) etkinliği gönderin.
  • Composer HAL içindeki fiziksel görüntüleme durumunu yer tutucu görüntüleme durumuyla değiştirin. Çerçevenin uygulamalara onDisplayChanged geri çağırmasını gönderebilmesi için (desteklenen modlar değiştiğinden) yer tutucu ekranın tek bir görüntü modu olmalıdır. Uygulamaların yapılandırma değişikliği etkinlikleri almaması için bu tek ekran modu, bağlantının kesilmeden önce fiziksel ekranın son etkin moduyla eşleşmesi gerekir.

HDMI olmayan bağlantıyla ilgili dikkat edilmesi gereken noktalar

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

  • 720x1.280
  • 1.080x1.920
  • 2.160x3.840
  • 4.320x7.680

STB veya TV donanım anahtarı, CVBS bağlantısı üzerinden 480i gibi desteklenmeyen bir çözünürlük görüntülemeye çalıştığında kullanıcıya bir hata mesajı gösterilir.

STB veya TV donanım anahtarının hem HDMI hem de HDMI olmayan bağlantıları varsa HDMI bağlantısı birincil ekran olur ve HDMI olmayan bağlantı etkin değildir. 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ış koşullarını önlemek için sıralı yapılandırma kimlikleri kullanın.

Composer HAL, desteklenen ekran yapılandırmalarını setActiveConfig veya setActiveConfigWithConstraints çağrısı ile 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 oluşabileceği ve bunun ardından, bu tür durumları önlemek üzere sıralı kimlikleri kullanması için Composer HAL'nin nasıl uygulanacağına dair ayrıntılar yer almaktadır.

Yeni sıralı kimlikler, yeni ekran yapılandırmalarına ATANMAZ ve bir yarış koşuluna neden olduğunda aşağıdaki etkinlik dizisini göz önünde bulundurun:

  1. Desteklenen görüntülü reklam 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. Composer HAL, eşzamanlı olarak ekran yapılandırmalarındaki bir değişikliği işler ve dahili durumunu aşağıdaki gibi yeni bir görüntü yapılandırması 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 mod grubunun değiştiğini bildirmek için çerçeveye bir onHotplug etkinliği gönderir.

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

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

Sıralı olmayan kimlik atamaları kullanan süreç, istenen yapılandırma değişikliğinin yanlış bir şekilde yorumlanmasıyla burada sona erer.

Sıralı kimlikleri kullanmak için Composer HAL'yi yapılandırma

Bu tür yarış koşullarını önlemek için OEM, Composer HAL'yi aşağıdaki gibi uygulamalıdır:

  • Composer HAL, desteklenen ekran yapılandırmalarını güncellediğinde yeni ekran yapılandırmalarına yeni, 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ı yok sayar.

Bu adımlar, aşağıdaki tartışmada gösterildiği gibi ırk koşullarının önüne geçmeyi amaçlar.

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ülü reklam 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, 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'si setActiveConfig(display, config=1) değerini alır (2. adımdan).

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

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

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

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

  10. HAL, çerçevenin 1.080x1920 60 Hz için yapılandırma değişikliği istediğini doğru bir şekilde yorumlamıştır.

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