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:
- Görüntüleme özelliklerinde bir değişiklik algılandığında çerçeve bir
onHotplug(display, connection=CONNECTED)
bildirimi alır. - Çerçeve, bildirimi aldığında görüntüleme durumunu bırakır ve
getActiveConfig
,getDisplayConfigs
,getDisplayAttribute
,getColorModes
,getHdrCapabilities
vegetDisplayCapabilities
yöntemlerini kullanarak HAL'deki yeni özelliklerle yeniden oluşturur. - Ç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 |
|
Birincil ekran fiziksel olarak bağlı |
|
Birincil ekranın fiziksel olarak bağlantısı kesildi |
|
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:
Desteklenen görüntü yapılandırması kimlikleri şunlardır:
- id=1, 1080x1920 60 Hz
- id=2, 1080x1920 50 Hz
Çerçeve,
setActiveConfig(display, config=1)
çağrısını yapar.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
Composer HAL, desteklenen modların değiştiğini bildirmek için çerçeveye bir
onHotplug
etkinliği gönderir.Composer HAL,
setActiveConfig(display, config=1)
'ı (2. adımdan) alır.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
veyasetActiveConfigWithConstraints
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:
Desteklenen görüntü yapılandırması kimlikleri şunlardır:
- id=1, 1080x1920 60 Hz
- id=2, 1080x1920 50 Hz
Çerçeve,
setActiveConfig(display, config=1)
çağrısını yapar.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
Composer HAL, desteklenen modların değiştiğini bildirmek için çerçeveye bir
onHotplug
etkinliği gönderir.Composer HAL,
setActiveConfig(display, config=1)
değerini alır (2. adımdan).Kimlik artık geçerli olmadığından Composer HAL, çağrıyı yoksayar.
Çerçeve, 4. adımdaki
onHotplug
etkinliğini alır ve işler.getDisplayConfigs
vegetDisplayAttribute
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.Çerçeve, güncellenmiş kimliği 5 olan başka bir
setActiveConfig
etkinliği gönderir.Composer HAL, 5. adımdan
setActiveConfig(display, config=5)
alır.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.