HDR w zrzutach ekranu z Androida

Od czasu wprowadzenia filmów High Dynamic Range (HDR) usługi strumieniowe zaczęły przesyłać strumieniowo filmy HDR, koncentrując się na wyświetlaniu obrazu na pełnym ekranie. Ostatnio aplikacje społecznościowe wprowadziły obsługę filmów HDR i Ultra HDR, co wskazuje na rosnące zainteresowanie HDR w różnych aplikacjach.

Obsługa HDR na Androidzie

Oto najważniejsze etapy rozwoju obsługi technologii HDR w Androidzie na przestrzeni ostatnich kilku lat:

Android 7

  • wstępna obsługa dekodowania i wyświetlania wideo HDR;
  • dalsze udoskonalenia funkcji HDR;

Android 13

  • Pełna obsługa rejestrowania, kodowania i wyświetlania filmów HDR.
  • Wprowadzenie kompozycji SDR i HDR, która definiuje różne zakresy luminacji wyświetlania SDR i HDR.

Android 14

Obsługa zrzutów ekranu w HDR również ewoluowała i przez lata przeszła wiele zmian.

Ulepszenia funkcji zrzutów ekranu HDR

Ta sekcja śledzi rozwój funkcji zrzutu ekranu HDR w ostatnich aktualizacjach Androida.

Android 9

SurfaceFlinger, kompozytor grafiki Androida, wprowadza obsługę filmów HDR. Obsługa renderowania GPU filmów HDR i zrzutów ekranu za pomocą złożonego wielowymiarowego przetwornika tonów. Ta krzywa mapowania tonacji nie zawsze jest odpowiednikiem wyświetlacza, więc zrzuty ekranu różnią się od treści wyświetlanych na ekranie.

Android 13

Do bloku renderowania GPU w SurfaceFlinger dodano wtyczkę mapowania tonalnego, dzięki czemu OEM może dostarczyć shader GPU dopasowany do krzywej mapowania tonalnego wyświetlacza. Zrzuty ekranu są prawie identyczne z tym, co widać na ekranie, ale różnią się w kilku aspektach:

  • Zrzuty ekranu są zapisywane w formacie SDR. W związku z tym, gdy są wyświetlane obok sceny HDR, regiony HDR na zrzucie ekranu są ciemniejsze.
  • Jasność SDR nie jest zarządzana, przez co zawartość SDR na zrzucie ekranu jest tak jasna jak zawartość HDR.

Innymi słowy, każdy film HDR, który został uchwycony na zrzucie ekranu, jest konwertowany na film SDR.

Android 14

Tryb ultra HDR stanowi duże wyzwanie dla robienia zrzutów ekranu. W przeciwieństwie do filmów obrazy są zwykle renderowane w ramce framebuffera interfejsu użytkownika, co ma 2 główne konsekwencje:

  • Przetwarzanie obrazu, w tym mapowanie tonacji, nie może różnić się od otaczającego interfejsu.
  • Aplikacje są odpowiedzialne za mapowanie tonacji na podstawie źródła podczas renderowania interfejsu.

Aby rozwiązać ten problem, możesz zastosować 3 możliwe rozwiązania:

  • Zachowanie szczegółów HDR obrazu w trybie ultra HDR, co powoduje przyciemnienie interfejsu aplikacji na zrzucie ekranu.
  • zachowanie szczegółów interfejsu aplikacji, co powoduje przycięcie obrazu w Ultra HDR;
  • Kompromis polegający na rozjaśnieniu interfejsu aplikacji przy jednoczesnym przycięciu HDR.

Android 14 wdraża trzecie podejście polegające na rozjaśnieniu interfejsu aplikacji i przycięciu HDR-owych podświetleń.

Android 15-QPR1

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

  • Dzielenie obrazu wejściowego na mniejsze obrazy.
  • Obliczanie maksymalnej luminacji w każdym obrazie i odrzucanie wartości niskiej luminacji w każdej sekcji.
  • Interpolowanie obliczonej luminescencji przez rozmycie i ponowne próbkowanie.
  • Zastosowanie do obrazu wejściowego parametryzowanego tonem mapowania Reinharda na podstawie interpolowanych wartości luminacji.

Ten algorytm pokazuje znaczne ulepszenia zrzutów ekranu między Androidem 14 a Androidem 15-QPR1, jak widać w tych przykładach:

  • Przykład 1 to zrzut ekranu filmu HDR nałożonego na stronę w Chrome zawierającą obraz w ultra HDR. Kolory interfejsu są w dużej mierze 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 przykładzie 1.

  • Przykład 2 to zrzut ekranu z filmem HDR nałożonym na Ustawienia oraz kolejne zrzuty ekranu. W Androidzie 14 kolory zrzutów ekranu są coraz ciemniejsze. W Androidzie 15-QPR1 funkcja tonemappera prawidłowo odwzorowuje i zachowuje kolory interfejsu.

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

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