Hình ảnh HEIF

Các thiết bị chạy Android 10 hỗ trợ định dạng hình ảnh nén HEIC, một nhãn hiệu cụ thể về mã hóa video hiệu suất cao (HEVC) của định dạng tệp hình ảnh hiệu suất cao (HEIF) như được chỉ định trong ISO/IEC 23008-12 . Hình ảnh được mã hóa HEIC mang lại chất lượng hình ảnh tốt hơn với kích thước tệp nhỏ hơn so với tệp JPEG.

Hình ảnh HEIC được tạo bởi khung máy ảnh yêu cầu hình ảnh không nén từ máy ảnh HAL và gửi nó đến hệ thống con phương tiện để được mã hóa bằng bộ mã hóa HEIC hoặc HEVC.

Yêu cầu

Để hỗ trợ định dạng hình ảnh HEIC, thiết bị của bạn phải có bộ mã hóa phần cứng hỗ trợ MIMETYPE_IMAGE_ANDROID_HEIC hoặc MIMETYPE_VIDEO_HEVC với chế độ chất lượng không đổi .

Thực hiện

Để hỗ trợ định dạng hình ảnh HEIC trên thiết bị của bạn, hãy triển khai codec HEIC/HEVC và cung cấp hỗ trợ cho các cấu hình luồng bắt buộc, đó là luồng IMPLEMENTATION_DEFINED / YUV và luồng phân đoạn ứng dụng JPEG.

Phương tiện truyền thông

Triển khai codec HEIC/HEVC ở chế độ chất lượng không đổi (CQ) cho phần cứng tương ứng như sau:

  • Bộ giải mã loại HEVC sử dụng định dạng IMPLEMENTATION_DEFINED với mức sử dụng GRALLOC_USAGE_HW_VIDEO_ENCODER hoặc định dạng HAL_PIXEL_FORMAT_YCBCR_420_888 tùy thuộc vào kích thước hình ảnh.
  • Bộ giải mã loại HEIC sử dụng định dạng IMPLEMENTATION_DEFINED với mức sử dụng GRALLOC_USAGE_HW_IMAGE_ENCODER .

Máy ảnh

Trong siêu dữ liệu tĩnh, đặt ANDROID_HEIC_INFO_SUPPORTED thành true và ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT thành giá trị trong khoảng [1, 16] , cho biết số lượng phân đoạn ứng dụng JPEG.

Đối với mỗi kết hợp luồng bắt buộc, thiết bị máy ảnh của bạn phải hỗ trợ hoán đổi luồng JPEG với luồng HEIC có cùng kích thước.

Đối với luồng đầu ra HEIC tại API công khai, dịch vụ camera sẽ tạo hai luồng nội bộ HAL:

  • Luồng BLOB có cờ sử dụng JPEG_APPS_SEGMENT để lưu trữ các phân đoạn ứng dụng bao gồm phân đoạn EXIF ​​​​và hình thu nhỏ
  • Luồng IMPLEMENTATION_DEFINED hoặc YCBCR_420_888 có kích thước của luồng HEIC tùy thuộc vào codec đích và kích thước luồng HEIC

Dựa trên ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT , khung máy ảnh phân bổ bộ đệm đủ lớn để HAL máy ảnh điền vào các phân đoạn ứng dụng JPEG. Phân đoạn APP1 là bắt buộc nhưng các phân đoạn theo sau phân đoạn APP1 ( APP2 trở lên) là tùy chọn. Khung máy ảnh ghi đè các thẻ EXIF ​​​​trong phân đoạn APP1 có thể được lấy từ siêu dữ liệu kết quả chụp hoặc có liên quan đến dòng bit hình ảnh chính và gửi chúng đến MediaMuxer .

Vì bộ mã hóa phương tiện nhúng hướng trong siêu dữ liệu của hình ảnh đầu ra nên để đảm bảo hướng nhất quán giữa hình ảnh chính và hình thu nhỏ, HAL của máy ảnh không được xoay hình ảnh thu nhỏ dựa trên android.jpeg.orientation. Khung ghi hướng vào siêu dữ liệu EXIF ​​​​và vùng chứa HEIC.

Các thẻ siêu dữ liệu tĩnh, điều khiển và động liên quan đến định dạng JPEG cũng áp dụng cho định dạng HEIC. Ví dụ: thẻ siêu dữ liệu android.jpeg.orientationandroid.jpeg.quality trong yêu cầu chụp được sử dụng để kiểm soát hướng và chất lượng của hình ảnh HEIC.

Để sử dụng định dạng HEIC trong ứng dụng, hãy sử dụng API công khai HEIC .

Để biết thêm thông tin, hãy xem các nguồn sau.

Máy ảnh HAL

Không gian dữ liệu bộ đệm đồ họa

Không gian sử dụng bộ đệm đồ họa

Thẩm định

Để xác thực rằng việc triển khai của bạn có hỗ trợ hình ảnh HEIC hay không, hãy sử dụng ứng dụng kiểm tra TestingCamera2 và chạy các kiểm tra CTS và VTS của camera sau.

Kiểm tra CTS của máy ảnh

Kiểm tra VTS của máy ảnh