Hotplug kullanımı

Görüntüleme özellikleri (görüntü modları ve desteklenen HDR türleri gibi), Android TV set üstü kutuları (STB'ler) ve üst düzey (OTT) gibi harici olarak bağlı ekranlara (HDMI veya DisplayPort ile) sahip cihazlarda dinamik olarak değişebilir. cihazlar. Bu değişiklik, kullanıcının bir ekrandan diğerine geçmesi veya bağlı bir ekran olmadan cihazı başlatması gibi, HDMI çalışırken takılabilir sinyalinin bir sonucu olarak gerçekleşebilir. Android 12 ve üzeri, çalışırken takma ve dinamik görüntüleme yeteneklerini yönetmek için çerçevede değişiklikler içerir.

Bu sayfada, Composer HAL uygulamasında ekran çalışırken takılabilir durumlarının ele alınması ve ekran özelliklerindeki değişiklikler açıklanmaktadır. Ek olarak ilgili çerçeve arabelleğinin nasıl yönetileceği ve bu durumlarda yarış koşullarının nasıl önleneceği anlatılmaktadır.

Görüntüleme yeteneklerini güncelleyin

Bu bölümde Android çerçevesinin Composer HAL tarafından başlatılan görüntüleme yeteneklerindeki değişiklikleri nasıl ele aldığı açıklanmaktadır.

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

  1. Görüntüleme yeteneklerinde bir değişiklik tespit edildiğinde çerçeve, onHotplug(display, connection=CONNECTED) bildirimini alır.
  2. Bildirimi aldıktan sonra çerçeve, görüntü durumunu bırakır ve getActiveConfig , getDisplayConfigs , getDisplayAttribute , getColorModes , getHdrCapabilities ve getDisplayCapabilities yöntemlerini kullanarak HAL'in yeni yetenekleriyle yeniden oluşturur.
  3. Çerçeve yeni bir görüntü durumunu yeniden oluşturduktan sonra, bu tür olayları dinleyen uygulamalara onDisplayChanged geri çağrısını gönderir.

Çerçeve, sonraki onHotplug(display, connection=CONNECTED) olaylarında çerçeve arabelleklerini yeniden tahsis eder. Yeni çerçeve arabelleklerinin tahsisi sırasındaki hataları önlemek amacıyla çerçeve arabellek belleğinin nasıl düzgün şekilde yönetileceği hakkında daha fazla bilgi için bkz . İstemci çerçeve arabellek yönetimi .

Yaygın bağlantı senaryolarını yönetin

Bu bölüm, birincil ekran bağlandığında ve bağlantısı kesildiğinde uygulamalarınızdaki çeşitli bağlantı senaryolarının nasıl düzgün şekilde ele alınacağını kapsar.

Mobil cihazlar için oluşturulmuş olan Android çerçevesi, bağlantısı kesilmiş bir birincil ekran için yerleşik desteğe sahip değildir. Bunun yerine HAL, birincil ekranın fiziksel olarak bağlantısının kesildiği durumda çerçeveyle olan etkileşimlerinde birincil ekranı bir yer tutucu ekranla değiştirmelidir.

Harici olarak bağlanan ve bağlantısı kesilebilen ekranlara sahip STB'lerde ve TV donanım kilitlerinde aşağıdaki senaryolar meydana gelebilir. Bu senaryolara yönelik desteği uygulamak için aşağıdaki tabloda yer alan bilgileri kullanın:

Senaryo Taşıma
Önyükleme sırasında bağlı ekran yok
  • Composer HAL'den çerçeveye bir onHotplug(display, connection=CONNECTED) sinyali gönderin.
  • Composer HAL içindeki fiziksel görüntü durumunu yer tutucu görüntü durumuyla değiştirin.
Birincil ekran fiziksel olarak bağlı
Birincil ekranın fiziksel bağlantısı kesilmiş
  • Composer HAL'den çerçeveye başka bir onHotplug(display, connection=CONNECTED) olayı gönderin.
  • Composer HAL içindeki fiziksel görüntü durumunu yer tutucu görüntü durumuyla değiştirin. Çerçevenin uygulamalara onDisplayChanged geri çağrısını göndermesi için yer tutucu ekranın tek bir görüntüleme moduna sahip olması gerekir (çünkü desteklenen modlar kümesi değişmiştir). Uygulamaların yapılandırma değişikliği olaylarını almaması için bu tek ekran modunun, bağlantı kesilmeden önce fiziksel ekranın son etkin moduyla eşleşmesi gerekir.

Yarış koşullarını önlemek için sıralı yapılandırma kimliklerini kullanın

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'i uygulamaktır.

Bu bölümde yarış koşullarının nasıl oluşabileceği açıklanmakta ve ardından Composer HAL'in bu tür koşulları önlemek için sıralı kimlikleri kullanacak şekilde nasıl uygulanacağına ilişkin ayrıntılar verilmektedir.

Yeni ekran yapılandırmalarına yeni, sıralı kimlikler ATANMADIĞINDA, bir yarış durumuna neden olduğunda aşağıdaki olay dizisini göz önünde bulundurun:

  1. Desteklenen ekran yapılandırma kimlikleri şunlardır:

    • kimlik=1 , 1080x1920 60Hz
    • kimlik=2 , 1080x1920 50Hz
  2. Çerçeve setActiveConfig(display, config=1) öğesini çağırır.

  3. Eş zamanlı olarak Composer HAL, ekran yapılandırmalarındaki bir değişikliği işler ve dahili durumunu aşağıda gösterildiği gibi yeni bir ekran yapılandırmaları kümesiyle günceller:

    • kimlik=1 , 2160x3840 60Hz
    • kimlik=2 , 2160x3840 50Hz
    • kimlik=3 , 1080x1920 60Hz
    • kimlik=4 , 1080x1920 50Hz
  4. Besteci HAL, desteklenen mod grubunun değiştiğini bildirmek için çerçeveye bir onHotplug olayı gönderir.

  5. Besteci HAL setActiveConfig(display, config=1) (adım 2'den itibaren) alır.

  6. HAL, gerçekte 1080x1920 60 Hz istenmesine rağmen çerçevenin 2160x3840 60 Hz olarak bir yapılandırma değişikliği talep ettiğini yorumluyor.

Sırasız kimlik atamalarının kullanıldığı süreç, istenen yapılandırma değişikliğinin yanlış yorumlanmasıyla burada sona ermektedir.

Composer HAL'yi sıralı kimlikleri kullanacak şekilde yapılandırma

Bu tür yarış koşullarından kaçınmak için OEM'in Composer HAL'yi aşağıdaki şekilde uygulaması gerekir:

  • Composer HAL, desteklenen ekran yapılandırmalarını güncellediğinde, yeni ekran yapılandırmalarına yeni, sıralı kimlikler atar.
  • Çerçeve setActiveConfig veya setActiveConfigWithConstraints geçersiz bir yapılandırma kimliğiyle çağırdığında, Besteci HAL çağrıyı yok sayar.

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 olay sırasını göz önünde bulundurun:

  1. Desteklenen ekran yapılandırma kimlikleri şunlardır:

    • kimlik=1 , 1080x1920 60Hz
    • kimlik=2 , 1080x1920 50Hz
  2. Çerçeve setActiveConfig(display, config=1) öğesini çağırır.

  3. Ekran yapılandırmalarında bir değişiklik işlendiğinde, aşağıdaki şekilde gösterilen bir sonraki kullanılmayan tamsayıdan başlayarak sonraki yapılandırma kimlikleri kümesi atanır:

    • kimlik=3 , 2160x3840 60Hz

    • kimlik=4 , 2160x3840 50Hz

    • kimlik=5 , 1080x1920 60Hz

    • kimlik=6 , 1080x1920 50Hz

  4. Composer HAL, desteklenen modların değiştiğini bildirmek için çerçeveye bir onHotplug olayı gönderir.

  5. Besteci HAL setActiveConfig(display, config=1) (adım 2'den itibaren) alır.

  6. Kimlik artık geçerli olmadığından Besteci HAL çağrıyı yok sayar.

  7. Çerçeve, 4. adımdan itibaren onHotplug olayını 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 1080x1920 ve 60 Hz yenileme hızı için yeni kimliği (5) tanımlar.

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

  9. Besteci HAL, 5. adımdan itibaren setActiveConfig(display, config=5) alır.

  10. HAL, çerçevenin 1080x1920 60 Hz olarak bir yapılandırma değişikliği istediğini doğru şekilde yorumluyor.

Yukarıdaki örnekte gösterildiği gibi sıralı ID atamalarını kullanan süreç, yarış durumunun engellenmesini ve doğru ekran konfigürasyon değişikliğinin güncellenmesini sağlar.