HDR w zrzutach ekranu z Androida

Po wprowadzeniu filmów HDR usługi streamingowe zaczęły je przesyłać, koncentrując się na wyświetlaniu na pełnym ekranie. Aplikacje społecznościowe obsługują teraz filmy HDR i Ultra HDR, co wskazuje na rosnące zainteresowanie wdrożeniem HDR w różnych aplikacjach.

Obsługa HDR na Androidzie

Android obsługuje technologię HDR w ramach kilku etapów:

Android 7

  • Początkowa obsługa dekodowania i wyświetlania filmów HDR.
  • Dalszy rozwój funkcji HDR.

Android 13

  • Pełna obsługa nagrywania, kodowania i wyświetlania filmów HDR.
  • Wprowadzono kompozycję mieszaną SDR i HDR, która określa różne zakresy luminancji wyświetlanej między SDR a HDR.

Android 14

  • Obsługa zdjęć HDR w formacie ultra HDR.

Obsługa zrzutów ekranu HDR również się zmieniła.

Ulepszenia funkcji zrzutów ekranu w technologii HDR

W tej sekcji opisujemy rozwój funkcji zrzutów ekranu w HDR w aktualizacjach Androida.

Android 9

SurfaceFlinger, kompozytor grafiki Androida, wprowadza obsługę filmów HDR. Renderowanie filmów i zrzutów ekranu HDR przez GPU wykorzystuje złożony wielomianowy moduł mapowania tonów. Ta krzywa mapowania tonów nie zawsze jest równoważna mapowaniu tonów wyświetlacza, więc zrzuty ekranu różnią się od treści wyświetlanych na ekranie.

Android 13

Blok renderowania GPU w usłudze SurfaceFlinger zawiera wtyczkę mapowania odcieni, która umożliwia producentowi OEM dostarczenie shadera GPU dopasowanego do krzywej mapowania odcieni wyświetlacza. Zrzuty ekranu prawie w całości odpowiadają treściom wyświetlanym na ekranie, ale występują w nich te różnice:

  • Zrzuty ekranu pozostają w formacie SDR. W konsekwencji, gdy są wyświetlane obok sceny HDR, obszary HDR na zrzucie ekranu wydają się ciemniejsze.
  • Luminancja SDR nie jest zarządzana, więc treści SDR na zrzucie ekranu są tak samo jasne jak treści HDR.

Innymi słowy, system przekonwertuje każdy film HDR zarejestrowany na zrzucie ekranu na film SDR.

Android 14

Ultra HDR stanowi duże wyzwanie w przypadku robienia zrzutów ekranu. W przeciwieństwie do filmów system zwykle renderuje obrazy w buforze ramki interfejsu, co ma 2 główne konsekwencje:

  • Obrazy nie mogą mieć przetwarzania obrazu, w tym mapowania tonalnego, które różni się od otaczającego interfejsu.
  • Aplikacje odpowiadają za mapowanie tonów na podstawie źródła podczas renderowania interfejsu.

Aby złagodzić to wyzwanie, rozważ 3 potencjalne implementacje zrzutów ekranu:

  • Zachowaj szczegóły HDR obrazu w technologii ultra HDR, co spowoduje przyciemnienie interfejsu aplikacji na zrzucie ekranu.
  • Zachowaj szczegóły interfejsu aplikacji, co spowoduje przycięcie obrazu Ultra HDR.
  • Kompromis polega na rozjaśnieniu interfejsu aplikacji przy jednoczesnym obcinaniu jasnych obszarów HDR.

Android 14 stosuje trzecie podejście, czyli rozjaśnianie interfejsu aplikacji i przycinanie jasnych obszarów HDR.

Android 15 QPR1

SurfaceFlinger zawiera lokalny algorytm mapowania odcieni dla zrzutów ekranu. Ten proces obejmuje:

  • Podzielenie obrazu wejściowego na mniejsze obrazy.
  • Obliczanie maksymalnej luminancji na każdym obrazie i odrzucanie wartości o niskiej luminancji w każdej sekcji.
  • Interpolowanie obliczonych luminancji przez rozmycie i ponowne próbkowanie.
  • Zastosowanie do obrazu wejściowego parametryzowanego mapowania tonalnego Reinhard na podstawie interpolowanych wartości luminancji.

Ten algorytm znacznie poprawia jakość zrzutów ekranu w porównaniu z Androidem 14 i Androidem 15 QPR1, co pokazują poniższe przykłady:

  • Przykład 1 to zrzut ekranu filmu HDR nałożonego na stronę Chrome zawierającą ultra HDR. Kolory interfejsu są w większości zachowane w nowej implementacji, a obraz nie jest już przycinany.

    Android 14 Android 15 QPR1
    Przykład 1 w Androidzie 14 Przykład 1 w Androidzie 15qpr

    Rysunek 1. Porównanie Androida 14 i Androida 15 QPR1 w przypadku przykładu 1.

  • Przykład 2 to zrzut ekranu z filmem HDR nałożonym na Ustawienia z kolejnymi zrzutami ekranu. W Androidzie 14 kolory zrzutu ekranu są kolejno ciemniejsze. W Androidzie 15 QPR1 funkcja mapowania tonów prawidłowo odtwarza i zachowuje kolory interfejsu.

    Android 14 Android 15 QPR1
    Przykład 2 na Androidzie 14 Przykład 2 w Androidzie 15qpr

    Rysunek 2. Porównanie Androida 14 i Androida 15 QPR1 na przykładzie 2.

Android 16

Podobnie jak w przypadku ultra HDR, zrzuty ekranu w technologii HDR przechowują w pliku zrzutu ekranu mapę wzmocnienia, aby podczas renderowania odzyskać reprezentację HDR. Jednak w przeciwieństwie do ultra HDR zrzut ekranu pozostaje w formacie PNG, aby zapewnić zgodność wsteczną z systemami, które obsługują zrzuty ekranu w tym formacie.

Generowanie zrzutów ekranu obejmuje te czynności:

  • Gdy na urządzeniu wyświetlane są treści HDR, zrzut ekranu jest generowany przy użyciu pikseli FP16.
  • Lokalny moduł mapowania tonów opisany w Androidzie 15 QPR1 generuje 8-bitową podstawową wersję SDR.
  • 8-bitowa mapa wzmocnienia powstaje przez połączenie podstawowej wersji SDR z wersją HDR.
  • Wersja podstawowa SDR i mapa wzmocnienia są kodowane w jednym pliku PNG.

Kodowanie PNG obejmuje te czynności:

  • Mapa wzmocnienia jest kodowana jako obraz PNG, który zawiera fragment gmAP z metadanymi ISO 21496-1 mapy wzmocnienia.
  • Podstawowa wersja SDR jest kodowana jako obraz PNG, który zawiera fragment gmAP z wersją metadanych ISO 21496-1. Ten obraz PNG zawiera też fragment gdAT, który obejmuje cały zakodowany obraz PNG mapy wzmocnienia.

Na poniższej ilustracji przedstawiono układ fragmentów PNG:

Układ bloków PNG

Rysunek 3. Układ bloków PNG.

W Androidzie 16 kodek PNG obsługuje zarówno kodowanie, jak i dekodowanie tych plików PNG. Aplikacje mogą wyświetlać plik PNG z mapą wzmocnienia w taki sam sposób jak Ultra HDR.