HDR dans les captures d'écran Android

Depuis l'introduction des vidéos 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. Récemment, les applications de réseaux sociaux ont commencé à prendre en charge les vidéos HDR et Ultra HDR, ce qui indique un intérêt croissant pour l'adoption du HDR dans diverses applications.

Compatibilité HDR avec Android

Voici les étapes de la prise en charge de la technologie HDR par Android au fil des ans :

Android 7

  • Prise en charge initiale du décodage et de l'affichage des vidéos HDR.
  • Amélioration continue des fonctionnalités HDR.

Android 13

  • Prise en charge de bout en bout de la capture, de l'encodage et de l'affichage de vidéos HDR.
  • Introduction de la composition mixte SDR et HDR, qui définit différentes plages de luminance affichables entre SDR et HDR.

Android 14

La prise en charge des captures d'écran avec HDR a également évolué et subi un certain nombre de modifications au fil des ans.

Améliorations des fonctionnalités de capture d'écran HDR

Cette section suit la progression de la fonctionnalité de capture d'écran HDR dans les dernières mises à jour d'Android.

Android 9

SurfaceFlinger, le compositeur graphique d'Android, est désormais compatible avec les vidéos HDR. Le rendu GPU des vidéos et captures d'écran HDR est compatible avec un mappeur de tonalité polynomial complexe. Cette courbe de mappage de tonalités n'est pas toujours équivalente au mappeur de tonalités de l'écran. Les captures d'écran diffèrent donc du contenu affiché à l'écran.

Android 13

Un plug-in de mappage de tonalité est ajouté au bloc de rendu GPU de SurfaceFlinger, ce qui permet à l'OEM de fournir un nuanceur GPU correspondant à la courbe de mappage de tonalité de son écran. Les captures d'écran correspondent presque à ce qui s'affiche à 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, ce qui fait que le contenu SDR de la capture d'écran apparaît aussi lumineux que le contenu HDR.

En d'autres termes, toute vidéo HDR capturée dans la capture d'écran est convertie en vidéo SDR.

Android 14

L'Ultra HDR pose un défi important pour la capture d'écran. Contrairement aux vidéos, les images sont généralement rendues dans le framebuffer de l'UI, ce qui a deux implications principales :

  • Les images ne peuvent pas faire l'objet d'un traitement (y compris d'une cartographie des tons) qui diffère de l'UI environnante.
  • Les applications sont responsables du mappage de ton basé sur la source lors du rendu de leur UI.

Pour relever ce défi, trois implémentations de capture d'écran sont possibles :

  • Préservez les détails HDR d'une image Ultra HDR, ce qui assombrit l'interface utilisateur de l'application sur la capture d'écran.
  • Préserver les détails de l'UI de l'application, ce qui entraîne le rognage des images Ultra HDR.
  • Faites un compromis en augmentant la luminosité de l'interface utilisateur de l'application tout en coupant les hautes lumières HDR.

Android 14 implémente la troisième approche, qui consiste à éclaircir l'UI de l'application et à couper les zones claires HDR.

Android 15-QPR1

SurfaceFlinger inclut un algorithme de mappage de tonalités local pour les captures d'écran. Ce processus implique les actions suivantes :

  • Diviser l'image d'entrée en images plus petites.
  • Calcul de la luminance maximale dans chaque image et suppression des valeurs de faible luminance dans chaque section.
  • Interpolation des luminances calculées par floutage et rééchantillonnage.
  • Application d'un mappeur de tonalités 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 l'Ultra HDR. Les couleurs de l'UI sont en grande partie conservées dans la nouvelle implémentation, et l'image n'est plus rognée.

    Android 14 Android 15-QPR1
    Exemple 1 dans Android 14 Exemple 1 dans Android 15qpr

    Figure 1 : Comparaison entre Android 14 et 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 de plus en plus sombres. Dans Android 15-QPR1, le mappeur de tonalités réplique et préserve correctement les couleurs de l'UI.

    Android 14 Android 15-QPR1
    Exemple 2 dans Android 14 Exemple 2 dans Android 15qpr

    Figure 2. Comparaison entre Android 14 et Android 15-QPR1 pour l'exemple 2.

Android 16

Comme pour l'Ultra HDR, les captures d'écran HDR stockent une gainmap dans le fichier de capture d'écran pour 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 les captures d'écran au format PNG.

Voici les détails de la génération de captures d'écran :

  • Lorsque du contenu HDR s'affiche sur l'appareil, une capture d'écran est générée à l'aide de pixels FP16.
  • Le mappeur de tonalités local décrit dans Android 15-QPR1 génère une interprétation SDR de base de 8 bits.
  • Une gainmap de 8 bits est produite en combinant le rendu de base SDR avec le rendu HDR.
  • Le rendu de base SDR et la gainmap sont encodés dans un seul fichier PNG.

Voici les détails de l'encodage PNG :

  • La carte de gain est encodée en tant qu'image PNG, qui inclut un bloc gmAP contenant les métadonnées ISO 21496-1 pour la carte de gain.
  • La version de base SDR est encodée en tant qu'image PNG, qui inclut un bloc gmAP contenant la version des métadonnées ISO 21496-1. Cette image PNG inclut également un bloc gdAT, qui contient l'intégralité du fichier PNG de la cartographie des gains encodée.

La figure suivante montre la disposition des blocs PNG :

Mise en page des blocs PNG

Figure 3. Mise en page 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 fichier PNG avec une gainmap de la même manière que Ultra HDR.