Après l'introduction de la vidéo HDR (High Dynamic Range), les services de streaming ont commencé à diffuser des vidéos HDR, en se concentrant sur les expériences en plein écran. Les applications de réseaux sociaux sont désormais compatibles avec les vidéos HDR et Ultra HDR, ce qui indique un intérêt croissant pour l'adoption du HDR dans diverses applications.
Compatibilité Android avec le HDR
Android a pris en charge la technologie HDR en plusieurs étapes :
Android 7
- Prise en charge initiale du décodage et de l'affichage des vidéos HDR.
- Améliorations continues des fonctionnalités HDR.
Android 13
- Prise en charge de bout en bout de la capture, de l'encodage et de l'affichage des vidéos HDR.
- Introduction de la composition mixte SDR et HDR, qui définit différentes plages de luminance affichables entre le SDR et le HDR.
Android 14
- Prise en charge des images HDR avec Ultra HDR.
La prise en charge des captures d'écran HDR a également évolué.
Améliorations des fonctionnalités de capture d'écran HDR
Cette section décrit la progression de la fonctionnalité de capture d'écran HDR dans les mises à jour Android.
Android 9
SurfaceFlinger, le compositeur graphique d'Android, introduit la prise en charge des vidéos HDR. Le rendu GPU des vidéos et des captures d'écran HDR utilise un mappeur de tonalité polynomial complexe. Cette courbe de mappage de tonalité n'est pas toujours équivalente au mappeur de tonalité d'affichage. Les captures d'écran diffèrent donc du contenu à l'écran.
Android 13
Le bloc de rendu GPU de SurfaceFlinger inclut un plug-in de mappage de tonalité, qui permet à l'OEM de fournir un shader GPU correspondant à la courbe de mappage de tonalité de son écran. Les captures d'écran correspondent presque au contenu à l'écran, mais avec les différences suivantes :
- Les captures d'écran restent au format SDR. Par conséquent, lorsqu'elles sont affichées à côté d'une scène HDR, les régions HDR de la capture d'écran apparaissent plus sombres.
- La luminance SDR n'est pas gérée. Le contenu SDR de la capture d'écran apparaît donc aussi lumineux que le contenu HDR.
En d'autres termes, le système convertit toute vidéo HDR capturée dans la capture d'écran en vidéo SDR.
Android 14
Ultra HDR pose un défi important pour les captures d'écran. Contrairement aux vidéos, le système affiche généralement les images dans le framebuffer de l'UI, ce qui a deux implications principales :
- Les images ne peuvent pas faire l'objet d'un traitement d'image, y compris d'un mappage de tonalité, différent de l'UI environnante.
- Les applications sont responsables du mappage de tonalité basé sur la source lors du rendu de leur UI.
Pour atténuer ce problème, envisagez trois implémentations potentielles de capture d'écran :
- Conservez les détails HDR d'une image Ultra HDR, ce qui entraîne un assombrissement de l'UI de l'application dans la capture d'écran.
- Conservez les détails de l'UI de l'application, ce qui entraîne un écrêtage de l'image Ultra HDR.
- Faites un compromis en éclaircissant l'UI de l'application tout en écrêtant les tons clairs HDR.
Android 14 implémente la troisième approche, qui consiste à éclaircir l'UI de l'application et à écrêter les tons clairs HDR.
Android 15-QPR1
SurfaceFlinger inclut un algorithme de mappage de tonalité local pour les captures d'écran. Ce processus implique les éléments suivants :
- Division de l'image d'entrée en images plus petites.
- Calcul de la luminance maximale dans chaque image et suppression des valeurs de luminance faibles dans chaque section.
- Interpolation des luminances calculées par flou et rééchantillonnage.
- Application d'un mappeur de tonalité Reinhard paramétré à l'image d'entrée, en fonction des valeurs de luminance interpolées.
Cet algorithme améliore considérablement les captures d'écran entre Android 14 et Android 15-QPR1, comme le montrent les exemples suivants :
L'exemple 1 est une capture d'écran d'une vidéo HDR superposée à une page Chrome contenant Ultra HDR. Les couleurs de l'UI sont principalement conservées dans la nouvelle implémentation, et l'image n'est plus écrêtée.
Android 14 Android 15-QPR1
Figure 1. Comparaison d'Android 14 et d'Android 15-QPR1 pour l'exemple 1.
L'exemple 2 est une capture d'écran d'une vidéo HDR superposée à Paramètres avec des captures d'écran ultérieures. Dans Android 14, les couleurs de la capture d'écran sont successivement plus sombres. Dans Android 15-QPR1, le mappeur de tonalité réplique et conserve correctement les couleurs de l'UI.
Android 14 Android 15-QPR1
Figure 2. Comparaison d'Android 14 et d'Android 15-QPR1 pour l'exemple 2.
Android 16
Comme pour Ultra HDR, les captures d'écran HDR stockent une carte de gain dans le fichier de capture d'écran afin de récupérer la représentation HDR lors du rendu. Toutefois, contrairement à Ultra HDR, la capture d'écran reste au format PNG pour assurer la rétrocompatibilité avec les systèmes qui ingèrent des captures d'écran PNG.
La génération de captures d'écran implique les éléments suivants :
- Lorsque du contenu HDR est affiché sur l'appareil, une capture d'écran est générée à l'aide de pixels FP16.
- Le mappeur de tonalité local décrit dans Android 15-QPR1 génère un rendu SDR de base de 8 bits.
- Une carte de gain de 8 bits est produite en combinant le rendu SDR de base avec le rendu HDR.
- Le rendu SDR de base et la carte de gain sont encodés dans un seul fichier PNG.
L'encodage PNG implique les éléments suivants :
- La carte de gain est encodée en tant qu'image PNG, qui inclut un
gmAPbloc, contenant les métadonnéesISO 21496-1 pour la carte de gain. - Le rendu SDR de base est encodé en tant qu'image PNG, qui inclut un
gmAPbloc contenant la version des métadonnées ISO 21496-1. Cette image PNG inclut également un blocgdATcontenant l'intégralité du PNG de la carte de gain encodée.
La figure suivante montre la disposition des blocs PNG :
Figure 3. Disposition des blocs PNG.
Avec Android 16, le codec PNG est compatible avec l'encodage et le décodage de ces PNG. Les applications peuvent afficher un PNG avec une carte de gain de la même manière que Ultra HDR.