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

Hình 1. Mô hình hoạt động của lõi camera
Tổng quan về máy ảnh HAL1
Phiên bản 1 của hệ thống con camera được thiết kế như một hộp đen với các điều khiển cấp cao và ba chế độ hoạt động sau:
- Xem trước
- Ghi lại video
- Vẫn chụp
Mỗi chế độ có các khả năng hơi khác nhau và chồng chéo. Đ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 hai trong số các chế độ hoạt động.

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