HDR di screenshot Android

Setelah diperkenalkannya video rentang dinamis tinggi (HDR), layanan streaming mulai menayangkan streaming video HDR, dengan berfokus pada pengalaman layar penuh. Aplikasi media sosial kini mendukung video HDR dan Ultra HDR, yang menunjukkan minat yang meningkat dalam adopsi HDR di berbagai aplikasi.

Dukungan Android untuk HDR

Android telah mendukung teknologi HDR melalui beberapa pencapaian:

Android 7

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

Android 13

  • Dukungan menyeluruh untuk pengambilan, encoding, dan tampilan video HDR.
  • Memperkenalkan komposisi SDR dan HDR Campuran, yang menentukan rentang luminansia yang dapat ditampilkan antara SDR dan HDR.

Android 14

  • Dukungan untuk gambar HDR dengan Ultra HDR.

Dukungan screenshot HDR juga telah berkembang dan berubah.

Kemajuan dalam kemampuan screenshot HDR

Bagian ini menjelaskan perkembangan kemampuan screenshot HDR dalam update Android.

Android 9

SurfaceFlinger, compositor grafis Android, memperkenalkan dukungan video HDR. Rendering GPU video dan screenshot HDR menggunakan tone mapper polinomial yang kompleks. Kurva tone mapping ini tidak selalu setara dengan tone mapper tampilan, sehingga screenshot berbeda dengan konten di layar.

Android 13

Blok rendering GPU SurfaceFlinger menyertakan plugin pemetaan nuansa, yang memungkinkan OEM menyediakan shader GPU untuk mencocokkan kurva pemetaan nuansa tampilan mereka. Screenshot hampir cocok dengan konten di layar, tetapi dengan perbedaan berikut:

  • Screenshot tetap dalam format SDR. Oleh karena itu, saat dilihat bersama adegan HDR, wilayah HDR dalam screenshot akan tampak lebih redup.
  • Luminansia SDR tidak dikelola, sehingga konten SDR dalam screenshot tampak secerah konten HDR.

Dengan kata lain, sistem mengonversi video HDR yang diambil dalam screenshot menjadi video SDR.

Android 14

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

  • Gambar tidak dapat memiliki pemrosesan gambar, termasuk tone mapping, yang berbeda dengan UI di sekitarnya.
  • Aplikasi bertanggung jawab untuk pemetaan nuansa berbasis sumber saat merender UI-nya.

Untuk mengurangi tantangan ini, pertimbangkan tiga potensi penerapan screenshot:

  • Mempertahankan detail HDR gambar Ultra HDR, sehingga UI aplikasi menjadi gelap dalam screenshot.
  • Mempertahankan detail UI aplikasi, sehingga kliping gambar Ultra HDR.
  • Mengorbankan dengan mencerahkan UI aplikasi sambil memotong sorotan HDR.

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

Android 15-QPR1

SurfaceFlinger menyertakan algoritma tone mapping lokal untuk screenshot. Proses ini mencakup:

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

Algoritma ini meningkatkan screenshot secara signifikan antara Android 14 dan Android 15-QPR1, seperti yang ditunjukkan contoh berikut:

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

    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 di-overlay 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 gainmap 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.

Pembuatan screenshot melibatkan hal berikut:

  • Saat konten HDR ditampilkan di perangkat, screenshot akan dibuat menggunakan piksel FP16.
  • Tone mapper lokal yang dijelaskan di Android 15-QPR1 menghasilkan rendering SDR dasar 8-bit.
  • Gainmap 8-bit dihasilkan dengan menggabungkan rendering dasar SDR dengan rendering HDR.
  • Rendering dasar SDR dan gainmap dienkode ke dalam satu file PNG.

Encoding PNG melibatkan hal berikut:

  • Gainmap dienkode sebagai gambar PNG, yang menyertakan potongan gmAP, yang berisi metadata ISO 21496-1 untuk gainmap.
  • Rendering dasar SDR dienkode sebagai gambar PNG, yang menyertakan gmAP potongan, yang berisi versi metadata ISO 21496-1. Gambar PNG ini juga menyertakan potongan 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 gainmap dengan cara yang sama seperti Ultra HDR.