HDR di screenshot Android

Sejak diperkenalkannya video rentang dinamis tinggi (HDR), layanan streaming telah mulai menstreaming video HDR, dengan berfokus pada pengalaman layar penuh. Baru-baru ini, aplikasi media sosial telah meluncurkan dukungan untuk video HDR dan Ultra HDR, yang menunjukkan minat yang meningkat terhadap adopsi HDR di berbagai aplikasi.

Dukungan Android untuk HDR

Berikut adalah pencapaian dukungan Android untuk teknologi HDR selama beberapa tahun:

Android 7

  • Dukungan awal untuk decoding dan tampilan video HDR.
  • Peningkatan berkelanjutan dalam kemampuan HDR.

Android 13

  • Dukungan menyeluruh untuk perekaman, encoding, dan tampilan video HDR.
  • Pengenalan Komposisi SDR dan HDR campuran, yang menentukan rentang luminans yang dapat ditampilkan berbeda antara SDR dan HDR.

Android 14

  • Dukungan untuk gambar HDR dengan Ultra HDR.

Dukungan screenshot dengan HDR juga telah berkembang dan mengalami sejumlah perubahan selama bertahun-tahun.

Peningkatan kemampuan screenshot HDR

Bagian ini melacak perkembangan kemampuan screenshot HDR dalam update Android terbaru.

Android 9

SurfaceFlinger, compositor grafis Android, memperkenalkan dukungan video HDR. Rendering video dan screenshot HDR dengan GPU didukung dengan pemeta nada polinomial kompleks. Kurva pemetaan warna ini tidak selalu setara dengan pemeta warna layar, sehingga screenshot berbeda dengan konten di layar.

Android 13

Plugin tone mapping ditambahkan ke blok rendering GPU SurfaceFlinger, sehingga OEM dapat menyediakan shader GPU untuk mencocokkan kurva tone mapping layar mereka. Screenshot hampir sama dengan yang ada di layar, tetapi dengan perbedaan berikut:

  • Screenshot tetap dalam format SDR. Akibatnya, saat dilihat bersama adegan HDR, area HDR dalam screenshot akan tampak lebih redup.
  • Luminans SDR tidak dikelola, sehingga konten SDR dalam screenshot tampak sama cerahnya dengan konten HDR.

Dengan kata lain, semua video HDR yang diambil dalam screenshot akan dikonversi menjadi video SDR.

Android 14

Ultra HDR menimbulkan tantangan yang signifikan untuk mengambil screenshot. Tidak seperti video, gambar biasanya dirender dalam framebuffer UI, yang memiliki dua implikasi utama:

  • Gambar tidak boleh memiliki pemrosesan gambar, termasuk pemetaan warna, yang berbeda dari UI di sekitarnya.
  • Aplikasi bertanggung jawab untuk pemetaan tone berbasis sumber saat merender UI-nya.

Untuk mengatasi tantangan ini, ada tiga potensi penerapan pengambilan screenshot:

  • Mempertahankan detail HDR gambar Ultra HDR, sehingga menghasilkan UI aplikasi yang lebih gelap dalam screenshot.
  • Mempertahankan detail UI aplikasi, sehingga menyebabkan kliping gambar Ultra HDR.
  • Mengkompromikan dengan mencerahkan UI aplikasi sambil memangkas sorotan HDR.

Android 14 menerapkan pendekatan ketiga untuk mencerahkan UI aplikasi dan memangkas sorotan HDR.

Android 15-QPR1

SurfaceFlinger menyertakan algoritma pemetaan warna lokal untuk screenshot. Proses ini melibatkan:

  • Membagi gambar input menjadi gambar yang lebih kecil.
  • Menghitung luminans maksimum di setiap gambar, dan menghapus nilai luminans rendah dalam setiap bagian.
  • Menginterpolasi luminans yang dihitung melalui proses blurring dan pengambilan sampel ulang.
  • Menerapkan pemetaan nada Reinhard yang diparameterkan ke gambar input, berdasarkan nilai luminans yang diinterpolasi.

Algoritma ini menunjukkan peningkatan screenshot yang signifikan antara Android 14 dan Android 15-QPR1, seperti yang ditunjukkan dalam contoh berikut:

  • Contoh 1 adalah screenshot video HDR yang ditumpuk di atas halaman Chrome yang berisi Ultra HDR. Warna UI sebagian besar dipertahankan dalam penerapan baru, dan gambar tidak lagi terpotong.

    Android 14 Android 15-QPR1
    Contoh 1 di Android 14 Contoh 1 di Android 15qpr

    Gambar 1. Perbandingan Android 14 dan Android 15-QPR1 untuk Contoh 1.

  • Contoh 2 adalah screenshot video HDR yang ditumpuk di atas Setelan dengan screenshot berikutnya. Di Android 14, warna screenshot semakin gelap. Di Android 15-QPR1, tonemapper mereplikasi dan mempertahankan warna UI dengan benar.

    Android 14 Android 15-QPR1
    Contoh 2 di Android 14 Contoh 2 di Android 15qpr

    Gambar 2. Perbandingan Android 14 dan Android 15-QPR1 untuk Contoh 2.

Android 16

Mirip dengan Ultra HDR, screenshot HDR menyimpan peta gain dalam file screenshot untuk memulihkan representasi HDR selama rendering. Namun, tidak seperti Ultra HDR, screenshot tetap dalam format PNG untuk kompatibilitas mundur dengan sistem yang menggunakan screenshot PNG.

Detail pembuatan screenshot adalah sebagai berikut:

  • Saat konten HDR ditampilkan di perangkat, screenshot dibuat menggunakan piksel FP16.
  • Pemeta nada lokal yang dijelaskan dalam Android 15-QPR1 menghasilkan rendering SDR dasar 8-bit.
  • Peta perolehan 8-bit dihasilkan dengan menggabungkan rendering dasar SDR dengan rendering HDR.
  • Rendering dasar SDR dan peta gain dienkode ke dalam satu file PNG.

Detail encoding PNG adalah sebagai berikut:

  • Peta gain dienkode sebagai gambar PNG, yang mencakup chunk gmAP, yang berisi metadata ISO 21496-1 untuk peta gain.
  • Render dasar SDR dienkode sebagai gambar PNG, yang mencakup chunk gmAP, yang berisi metadata versi ISO 21496-1. Gambar PNG ini juga menyertakan chunk gdAT, yang berisi keseluruhan PNG gainmap yang dienkode.

Gambar berikut menunjukkan tata letak potongan PNG:

Tata letak potongan PNG

Gambar 3. Tata letak potongan PNG.

Dengan Android 16, codec PNG mendukung encoding dan decoding PNG ini. Aplikasi dapat menampilkan PNG dengan peta gain dengan cara yang sama seperti Ultra HDR.