HDR (High Dynamic Range) 동영상이 도입된 이후 스트리밍 서비스는 전체 화면 환경에 중점을 두고 HDR 동영상을 스트리밍하기 시작했습니다. 최근 소셜 미디어 앱에서 HDR 동영상과 울트라 HDR 지원을 출시하여 다양한 앱에서 HDR 채택에 대한 관심이 커지고 있음을 알 수 있습니다.
HDR에 대한 Android 지원
다음은 수년에 걸쳐 Android의 HDR 기술 지원의 주요 사항입니다.
Android 7
- HDR 동영상 디코딩 및 디스플레이 초기 지원
- HDR 기능의 지속적인 발전
Android 13
- HDR 동영상 캡처, 인코딩, 디스플레이의 엔드 투 엔드 지원
- SDR과 HDR 간에 표시 가능한 휘도 범위를 다르게 정의하는 SDR과 HDR 혼합 구성 도입
Android 14
- 울트라 HDR을 사용한 HDR 이미지 지원
HDR을 사용한 스크린샷 지원도 시간이 지나면서 발전하고 여러 변경사항을 거쳤습니다.
HDR 스크린샷 기능의 발전
이 섹션에서는 최근 Android 업데이트에서 HDR 스크린샷 기능의 진행 상황을 추적합니다.
Android 9
Android의 그래픽 컴포저인 SurfaceFlinger는 HDR 동영상 지원을 도입합니다. 복잡한 다항식 톤 매퍼를 사용하여 HDR 동영상과 스크린샷의 GPU 렌더링이 지원됩니다. 이 톤 매핑 곡선은 항상 디스플레이 톤 매퍼와 동일하지 않으므로 스크린샷이 화면 콘텐츠와 다릅니다.
Android 13
톤 매핑 플러그인이 SurfaceFlinger의 GPU 렌더링 블록에 추가되어 OEM이 디스플레이의 톤 매핑 곡선과 일치하는 GPU 셰이더를 제공할 수 있습니다. 스크린샷은 화면에 표시된 내용과 거의 일치하지만 다음과 같은 차이점이 있습니다.
- 스크린샷은 SDR 형식으로 유지됩니다. 따라서 HDR 장면과 함께 볼 때 스크린샷 내의 HDR 영역이 더 어둡게 표시됩니다.
- SDR 휘도가 관리되지 않아 스크린샷 내 SDR 콘텐츠가 HDR 콘텐츠만큼 밝게 표시됩니다.
즉, 스크린샷에서 캡처된 HDR 동영상은 SDR 동영상으로 변환됩니다.
Android 14
울트라 HDR은 스크린샷에 상당한 문제를 야기합니다. 동영상과 달리 이미지는 일반적으로 UI 프레임 버퍼 내에서 렌더링되며 이는 다음과 같은 두 가지 주요 의미를 갖습니다.
- 이미지는 주변 UI와 다른 톤 매핑을 비롯한 이미지 처리가 적용될 수 없습니다.
- 앱은 UI를 렌더링할 때 소스 기반 톤 매핑을 담당합니다.
이 문제를 완화하기 위해 다음과 같은 세 가지 스크린샷 구현이 있습니다.
- 울트라 HDR 이미지의 HDR 세부정보를 보존하여 스크린샷에서 앱 UI가 어두워집니다.
- 앱 UI 세부정보를 유지하여 울트라 HDR 이미지 클리핑이 발생합니다.
- HDR 하이라이트를 클리핑하면서 앱 UI를 밝게 하여 절충합니다.
Android 14는 앱 UI를 밝게 하고 HDR 강조 표시를 클리핑하는 세 번째 접근 방식을 구현합니다.
Android 15-QPR1
SurfaceFlinger에는 스크린샷을 위한 로컬 톤 매핑 알고리즘이 포함되어 있습니다. 이 프로세스에는 다음이 포함됩니다.
- 입력 이미지를 더 작은 이미지로 나눕니다.
- 각 이미지에서 최대 휘도를 계산하고 각 섹션 내에서 낮은 휘도 값을 삭제합니다.
- 블러링 및 리샘플링을 통해 계산된 휘도를 보간합니다.
- 보간된 휘도 값을 기반으로 입력 이미지에 파라미터화된 Reinhard 톤 매퍼를 적용합니다.
이 알고리즘은 다음 예와 같이 Android 14와 Android 15-QPR1 간에 스크린샷이 크게 개선되었음을 보여줍니다.
예 1은 울트라 HDR이 포함된 Chrome 페이지 위에 오버레이된 HDR 동영상의 스크린샷입니다. UI 색상은 새 구현에서 대부분 유지되며 이미지는 더 이상 잘리지 않습니다.
Android 14 Android 15-QPR1 그림 1. 예 1의 Android 14와 Android 15-QPR1 비교
예 2는 설정 위에 HDR 동영상이 오버레이된 스크린샷과 후속 스크린샷입니다. Android 14에서는 스크린샷 색상이 연속적으로 더 어둡습니다. Android 15-QPR1에서 톤 매퍼는 UI 색상을 올바르게 복제하고 유지합니다.
Android 14 Android 15-QPR1 그림 2. 예 2의 Android 14와 Android 15-QPR1 비교
Android 16
울트라 HDR과 마찬가지로 HDR 스크린샷은 렌더링 중에 HDR 표현을 복구하기 위해 스크린샷 파일에 게인맵을 저장합니다. 하지만 울트라 HDR과 달리 스크린샷은 PNG 스크린샷을 수집하는 시스템과의 하위 호환성을 위해 PNG 형식으로 유지됩니다.
스크린샷 생성 세부정보는 다음과 같습니다.
- HDR 콘텐츠가 기기에 표시되면 FP16 픽셀을 사용하여 스크린샷이 생성됩니다.
- Android 15-QPR1에 설명된 로컬 톤 매퍼는 8비트 기본 SDR 렌디션을 생성합니다.
- SDR 기본 렌디션을 HDR 렌디션과 결합하여 8비트 게인맵이 생성됩니다.
- SDR 기본 렌디션과 게인맵은 단일 PNG 파일로 인코딩됩니다.
PNG 인코딩 세부정보는 다음과 같습니다.
- 게인맵은 게인맵의 ISO 21496-1 메타데이터가 포함된 gmAP 청크가 포함된 PNG 이미지로 인코딩됩니다.
- SDR 기본 버전은 ISO 21496-1 메타데이터 버전을 포함하는 gmAP 청크가 포함된 PNG 이미지로 인코딩됩니다. 이 PNG 이미지에는 인코딩된 게인맵 PNG 전체가 포함된 gdAT 청크도 포함되어 있습니다.
다음 그림은 PNG 청크의 레이아웃을 보여줍니다.
그림 3. PNG 청크의 레이아웃입니다.
Android 16에서는 PNG 코덱이 이러한 PNG의 인코딩과 디코딩을 모두 지원합니다. 앱은 Ultra HDR과 동일한 방식으로 게인맵이 있는 PNG를 표시할 수 있습니다.