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:
- Ekran özelliklerinde bir değişiklik algılandığında çerçeve bir
onHotplug(display, connection=CONNECTED)
bildirimi alır. - Çerçeve, bildirimi aldıktan sonra görüntü 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ü 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 |
|
Birincil ekran fiziksel olarak bağlı |
|
Birincil ekranın fiziksel olarak bağlantısı kesildi |
|
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:
Desteklenen görüntülü reklam 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ı yapar.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
Composer HAL, desteklenen mod grubunun değiştiğini bildirmek için çerçeveye bir
onHotplug
etkinliği gönderir.Composer HAL'si,
setActiveConfig(display, config=1)
değerini alır (2. adımdan).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
veyasetActiveConfigWithConstraints
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:
Desteklenen görüntülü reklam 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ı 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'si
setActiveConfig(display, config=1)
değerini alır (2. adımdan).Kimlik artık geçerli olmadığından Composer HAL çağrısını yoksayar.
Çerçeve 4. adımdaki
onHotplug
etkinliğini alır ve işler.getDisplayConfigs
vegetDisplayAttribute
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.Çerçeve, güncellenmiş kimliği 5 ile başka bir
setActiveConfig
etkinliği gönderir.Composer HAL'si, 5. adımdan
setActiveConfig(display, config=5)
alır.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.