Các thiết bị chạy Android 10 hỗ trợ HEIC ở định dạng hình ảnh nén, thương hiệu cụ thể của hình ảnh hiệu quả cao (HEVC) (HEIF) như được chỉ định trong ISO/IEC 23008-12. Ưu đãi hình ảnh được mã hoá HEIC chất lượng ả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ằng khung máy ảnh yêu cầu một tệp không nén hình ảnh từ HAL camera và gửi lớp này đến hệ thống truyền thông phụ để được mã hoá bằng bộ mã hoá 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ó một bộ mã hoá phần cứng
đang hỗ trợ
MIMETYPE_IMAGE_ANDROID_HEIC
hoặc
MIMETYPE_VIDEO_HEVC
với
chế độ chất lượng không đổi.
Triển khai
Để hỗ trợ định dạng hình ảnh HEIC trên thiết bị của bạn, hãy triển khai bộ mã hoá và giải mã HEIC/HEVC
và hỗ trợ các cấu hình luồng bắt buộc, đó là
IMPLEMENTATION_DEFINED
/YUV
luồng và luồng phân đoạn ứng dụng JPEG.
Nội dung nghe nhìn
Triển khai bộ mã hoá và giải mã HEIC/HEVC ở chế độ chất lượng không đổi (CQ) cho phần cứng tương ứng như sau:
- Bộ mã hoá và giải mã loại HEVC sử dụng
IMPLEMENTATION_DEFINED
với cách sử dụngGRALLOC_USAGE_HW_VIDEO_ENCODER
hoặc Định dạngHAL_PIXEL_FORMAT_YCBCR_420_888
tuỳ thuộc vào kích thước hình ảnh. - Bộ mã hoá và giải mã loại HEIC sử dụng định dạng
IMPLEMENTATION_DEFINED
với Mức sử dụngGRALLOC_USAGE_HW_IMAGE_ENCODER
.
Camera
Trong siêu dữ liệu tĩnh, hãy đặt ANDROID_HEIC_INFO_SUPPORTED
thành true và
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
thành một 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 tổ hợp phát trực tuyến bắt buộc, thiết bị camera của bạn phải hỗ trợ hoán đổi luồng JPEG có 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ụ máy ảnh sẽ tạo 2 HAL luồng nội bộ:
- Luồng BLOB có cờ sử dụng
JPEG_APPS_SEGMENT
để lưu trữ ứng dụng các phân đoạn bao gồm các phân đoạn EXIF và hình thu nhỏ - Luồng
IMPLEMENTATION_DEFINED
hoặcYCBCR_420_888
có kích thước của Luồng HEIC tùy thuộc vào bộ mã hoá và giải mã mục tiêu 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 cho lớp trừu tượng phần cứng (HAL) của máy ảnh để đưa vào ứng dụng JPEG
phân khúc. Bạn phải phân đoạn APP1
, nhưng các phân đoạn sau APP1
phân đoạn (APP2
trở lên) là không bắt buộc. Khung máy ảnh ghi đè EXIF
các thẻ trong phân đoạn APP1
có thể lấy từ siêu dữ liệu kết quả chụp
hoặc có liên quan đến luồng bit của ảnh chính rồi gửi đến MediaMuxer
.
Vì bộ mã hoá nội dung đa phương tiện nhúng hướng vào siêu dữ liệu của đầu ra
hình ảnh nhằm đảm bảo hướng nhất quán giữa hình ảnh chính và hình thu nhỏ,
lớp trừu tượng phần cứng (HAL) của máy ảnh không được xoay hình thu nhỏ dựa trên
android.jpeg.orientation.
Khung ghi hướng vào EXIF
siêu dữ liệu và vùng chứa HEIC.
Các thẻ siêu dữ liệu tĩnh, kiểm soát và động có liên quan đến định dạng JPEG cũng
và áp dụng cho định dạng HEIC. Ví dụ: android.jpeg.orientation
và
android.jpeg.quality
thẻ siêu dữ liệu trong yêu cầu chụp được dùng để kiểm soát
hướng và chất lượng 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.
Lớp trừu tượng phần cứng (HAL) cho máy ảnh
Không gian dữ liệu vùng đệm đồ hoạ
Dung lượng sử dụng vùng đệm đồ hoạ
Xác nhận kết quả
Để xác thực rằng cách triển khai của bạn hỗ trợ hình ảnh HEIC, hãy sử dụng
TestingCamera2
kiểm thử ứng dụng và chạy các thử nghiệm CTS và VTS của máy ảnh sau.
Kiểm thử CTS cho máy ảnh
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
Kiểm thử VTS của máy ảnh