Lớp trừu tượng phần cứng (HAL) của camera Android kết nối các API khung camera cấp cao hơn trong android.hardware.camera2 với trình điều khiển và phần cứng camera cơ bản của bạn. Kể từ Android 13, quá trình phát triển giao diện HAL camera sẽ sử dụng AIDL. Android 8.0 giới thiệu Treble, chuyển API HAL Camera sang một giao diện ổn định do ngôn ngữ mô tả giao diện HAL (HIDL) xác định. Nếu trước đây bạn đã phát triển một trình điều khiển và mô-đun HAL camera cho Android 7.0 trở xuống, hãy lưu ý đến những thay đổi đáng kể trong quy trình camera.
HAL camera AIDL
Đối với các thiết bị chạy Android 13 trở lên, khung camera có hỗ trợ các HAL camera AIDL. Khung camera cũng hỗ trợ HAL camera HIDL, tuy nhiên, các tính năng camera được thêm vào Android 13 trở lên chỉ có thông qua các giao diện HAL camera AIDL. Để triển khai những tính năng như vậy trên các thiết bị nâng cấp lên Android 13 trở lên, nhà sản xuất thiết bị phải di chuyển quy trình HAL từ việc sử dụng giao diện camera HIDL sang giao diện camera AIDL.
Để tìm hiểu về các lợi thế của AIDL, hãy xem phần AIDL cho HAL.
Triển khai HAL camera AIDL
Để biết thông tin tham khảo về việc triển khai HAL camera AIDL, hãy xem
hardware/google/camera/common/hal/aidl_service/
.
Các quy cách HAL camera AIDL nằm ở những vị trí sau:
- Nhà cung cấp camera:
hardware/interfaces/camera/provider/aidl/
- Thiết bị camera:
hardware/interfaces/camera/device/aidl/
- Siêu dữ liệu của camera:
hardware/interfaces/camera/metadata/aidl/
- Các loại dữ liệu phổ biến:
hardware/interfaces/camera/common/aidl/
Đối với những thiết bị di chuyển sang AIDL, các nhà sản xuất thiết bị có thể cần sửa đổi chính sách SELinux (sepolicy) của Android và các tệp RC tuỳ thuộc vào cấu trúc mã.
Xác thực HAL camera AIDL
Để kiểm thử việc triển khai HAL camera AIDL, hãy đảm bảo rằng thiết bị vượt qua tất cả các kiểm thử CTS và VTS. Android 13 giới thiệu kiểm thử VTS AIDL,
VtsAidlHalCameraProvider_TargetTest.cpp
.
Các tính năng HAL3 của camera
Mục tiêu của việc thiết kế lại Android Camera API là tăng đáng kể khả năng kiểm soát hệ thống con camera của các ứng dụng trên thiết bị Android, đồng thời sắp xếp lại API để làm cho API này hiệu quả và dễ duy trì hơn. Nhờ chế độ kiểm soát bổ sung này, bạn có thể dễ dàng xây dựng các ứng dụng máy ảnh chất lượng cao trên thiết bị Android, có thể hoạt động một cách đáng tin cậy trên nhiều sản phẩm trong khi vẫn sử dụng các thuật toán dành riêng cho thiết bị bất cứ khi nào có thể để tối đa hoá chất lượng và hiệu suất.
Phiên bản 3 của cấu trúc hệ thống con camera sắp xếp các chế độ hoạt động thành một chế độ xem hợp nhất duy nhất. Bạn có thể dùng chế độ này để triển khai bất kỳ chế độ nào trong số các chế độ trước đó và một số chế độ khác, chẳng hạn như chế độ chụp liên tục. Điều này giúp người dùng kiểm soát tiêu điểm và độ phơi sáng tốt hơn, cũng như có nhiều lựa chọn xử lý hậu kỳ hơn, chẳng hạn như giảm nhiễu, độ tương phản và độ sắc nét. Ngoài ra, chế độ xem đơn giản này giúp các nhà phát triển ứng dụng dễ dàng sử dụng nhiều chức năng của camera.
API mô hình hoá hệ thống con camera dưới dạng một quy trình chuyển đổi các yêu cầu đến để chụp khung hình thành khung hình, theo tỷ lệ 1:1. Các yêu cầu này bao gồm tất cả thông tin cấu hình về quá trình ghi và xử lý khung hình. Trong đó bao gồm độ phân giải và định dạng pixel; chế độ điều khiển thủ công cảm biến, ống kính và đèn flash; chế độ hoạt động 3A; chế độ điều khiển xử lý RAW->YUV; tạo số liệu thống kê; v.v.
Nói một cách đơn giản, khung ứng dụng yêu cầu một khung hình từ hệ thống con camera và hệ thống con camera trả về kết quả cho một luồng đầu ra. Ngoài ra, siêu dữ liệu chứa thông tin như không gian màu và độ đổ bóng của ống kính được tạo cho mỗi bộ kết quả. Bạn có thể coi camera phiên bản 3 là một quy trình đối với luồng một chiều của camera phiên bản 1. Thao tác này chuyển đổi từng yêu cầu chụp thành một hình ảnh do cảm biến chụp, được xử lý thành:
- Một đối tượng kết quả có siêu dữ liệu về dữ liệu đã chụp.
- Từ 1 đến N vùng đệm dữ liệu hình ảnh, mỗi vùng đệm nằm trong một vùng đích riêng.
Tập hợp các bề mặt đầu ra có thể được định cấu hình trước:
- Mỗi vùng hiển thị là một đích đến cho luồng bộ đệm hình ảnh có độ phân giải cố định.
- Bạn chỉ có thể định cấu hình một số ít bề mặt làm đầu ra cùng một lúc (~3).
Một yêu cầu chứa tất cả các chế độ cài đặt chụp mong muốn và danh sách các bề mặt đầu ra để đẩy các vùng đệm hình ảnh vào yêu cầu này (trong tổng số bộ được định cấu hình). Yêu cầu có thể là một lần (với capture()
) hoặc có thể được lặp lại vô thời hạn (với setRepeatingRequest()
). Hoạt động ghi hình có mức độ ưu tiên cao hơn yêu cầu lặp lại.

Hình 1. Mô hình hoạt động cốt lõi của camera
Tổng quan về Camera HAL1
Hệ thống con camera phiên bản 1 được thiết kế dưới dạng một hộp đen có các chế độ điều khiển cấp cao và 3 chế độ hoạt động sau:
- Xem trước
- Quay video
- Chụp ảnh tĩnh
Mỗi chế độ có những khả năng hơi khác nhau và trùng lặp. Điều này gây khó khăn cho việc triển khai các tính năng mới như chế độ chụp liên tục, nằm giữa 2 chế độ hoạt động.

Hình 2. Các thành phần của camera
Android 7.0 vẫn tiếp tục hỗ trợ HAL1 của camera vì nhiều thiết bị vẫn dựa vào HAL1. Ngoài ra, dịch vụ camera Android hỗ trợ triển khai cả HAL (1 và 3), điều này hữu ích khi bạn muốn hỗ trợ camera trước có ít chức năng hơn bằng camera HAL1 và camera sau có nhiều chức năng hơn bằng camera HAL3.
Có một mô-đun HAL camera duy nhất (có số phiên bản riêng), liệt kê nhiều thiết bị camera độc lập, mỗi thiết bị có số phiên bản riêng. Bạn cần có mô-đun camera 2 trở lên để hỗ trợ các thiết bị 2 trở lên và các mô-đun camera như vậy có thể có nhiều phiên bản thiết bị camera (đây là ý chúng tôi muốn nói khi cho biết Android hỗ trợ việc triển khai cả hai HAL).