Pencitraan HEIF

Perangkat yang menjalankan Android 10 mendukung format gambar yang dikompresi HEIC, merek khusus encoding video efisiensi tinggi (HEVC) dari format file gambar efisiensi tinggi (HEIF) seperti yang ditentukan dalam ISO/IEC 23008-12. Gambar berenkode HEIC menawarkan kualitas gambar yang lebih baik dengan ukuran file yang lebih kecil dibandingkan dengan file JPEG.

Gambar HEIC dihasilkan oleh framework kamera yang meminta gambar yang tidak dikompresi dari HAL kamera dan mengirimkannya ke subsistem media untuk dienkode oleh encoder HEIC atau HEVC.

Persyaratan

Untuk mendukung format gambar HEIC, perangkat Anda harus memiliki encoder hardware yang mendukung MIMETYPE_IMAGE_ANDROID_HEIC atau MIMETYPE_VIDEO_HEVC dengan mode kualitas konstan.

Implementasi

Untuk mendukung format gambar HEIC di perangkat Anda, terapkan codec HEIC/HEVC dan berikan dukungan untuk konfigurasi streaming yang diperlukan, yaitu streaming IMPLEMENTATION_DEFINED/YUV dan streaming segmen aplikasi JPEG.

Media

Terapkan codec HEIC/HEVC dalam mode kualitas konstan (CQ) untuk hardware yang sesuai sebagai berikut:

  • Codec jenis HEVC menggunakan format IMPLEMENTATION_DEFINED dengan penggunaan GRALLOC_USAGE_HW_VIDEO_ENCODER atau format HAL_PIXEL_FORMAT_YCBCR_420_888, bergantung pada ukuran gambar.
  • Codec jenis HEIC menggunakan format IMPLEMENTATION_DEFINED dengan penggunaan GRALLOC_USAGE_HW_IMAGE_ENCODER.

Kamera

Dalam metadata statis, tetapkan ANDROID_HEIC_INFO_SUPPORTED ke benar, dan ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT ke nilai antara [1, 16], yang menunjukkan jumlah segmen aplikasi JPEG.

Untuk setiap kombinasi streaming wajib, perangkat kamera Anda harus mendukung penukaran streaming JPEG dengan streaming HEIC yang berukuran sama.

Untuk aliran output HEIC di API publik, layanan kamera membuat dua aliran internal HAL:

  • Streaming BLOB dengan tanda penggunaan JPEG_APPS_SEGMENT untuk menyimpan segmen aplikasi, termasuk segmen EXIF dan thumbnail
  • Streaming IMPLEMENTATION_DEFINED atau YCBCR_420_888 dengan ukuran streaming HEIC bergantung pada codec target dan ukuran streaming HEIC

Berdasarkan ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT, framework kamera mengalokasikan buffer yang cukup besar bagi HAL kamera untuk mengisi segmen aplikasi JPEG. Segmen APP1 diperlukan, tetapi segmen yang mengikuti segmen APP1 (APP2 dan yang lebih baru) bersifat opsional. Framework kamera mengganti tag EXIF di segmen APP1 yang dapat berasal dari metadata hasil pengambilan atau terkait dengan bitstream gambar utama dan mengirimkannya ke MediaMuxer.

Karena encoder media menyematkan orientasi dalam metadata gambar output, untuk memastikan orientasi yang konsisten antara gambar utama dan thumbnail, HAL kamera tidak boleh memutar gambar thumbnail berdasarkan android.jpeg.orientation. Framework menulis orientasi ke dalam metadata EXIF dan penampung HEIC.

Tag metadata statis, kontrol, dan dinamis yang terkait dengan format JPEG juga berlaku untuk format HEIC. Misalnya, tag metadata android.jpeg.orientation dan android.jpeg.quality dalam permintaan pengambilan digunakan untuk mengontrol orientasi dan kualitas gambar HEIC.

Untuk menggunakan format HEIC di aplikasi, gunakan API publik HEIC.

Untuk informasi selengkapnya, lihat sumber berikut.

HAL Kamera

Ruang data buffering grafis

Ruang penggunaan buffering grafis

Validasi

Untuk memvalidasi bahwa penerapan Anda mendukung image HEIC, gunakan aplikasi pengujian TestingCamera2 dan jalankan pengujian CTS dan VTS kamera berikut.

Pengujian CTS kamera

Pengujian VTS kamera