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 của camera sử dụng AIDL. Android 8.0 đã giới thiệu Treble, chuyển API HAL của camera sang một giao diện ổn định được xác định bằng ngôn ngữ mô tả giao diện HAL (HIDL). Nếu trước đây bạn đã phát triển một mô-đun và trình điều khiển HAL của camera cho Android 7.0 và thấp hơn, 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 hỗ trợ 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 các 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ề những ưu điểm của AIDL, hãy xem bài viết AIDL cho HAL.
Triển khai HAL camera AIDL
Để biết thông tin tham khảo về cách triển khai HAL camera AIDL, hãy xem
hardware/google/camera/common/hal/aidl_service/.
Thông số kỹ thuật của HAL camera AIDL nằm ở các 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 camera:
hardware/interfaces/camera/metadata/aidl/ - Các loại dữ liệu phổ biến:
hardware/interfaces/camera/common/aidl/
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 bài kiểm thử CTS và VTS. Android 13 giới thiệu bài kiểm thử VTS AIDL
,
VtsAidlHalCameraProvider_TargetTest.cpp.
Các tính năng của HAL3 camera
Mục tiêu của việc thiết kế lại API camera Android là tăng đáng kể khả năng của các ứng dụng trong việc kiểm soát hệ thống con camera trên thiết bị Android, đồng thời sắp xếp lại API để giúp API này hiệu quả và dễ bảo trì hơn. Khả năng kiểm soát bổ sung giúp bạn dễ dàng tạo các ứng dụng camera 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, đồng thời 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 hệ thống con camera cấu trúc 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 trước đó và một số chế độ khác, chẳng hạn như chế độ chụp liên tục. Nhờ đó, người dùng có thể kiểm soát tiêu điểm và độ phơi sáng tốt hơn, cũng như có nhiều quy trình 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 hoá này giúp nhà phát triển ứng dụng dễ dàng sử dụng các chức năng khác nhau 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 gói gọn tất cả thông tin cấu hình về việc chụp và xử lý một khung hình. Điều này bao gồm độ phân giải và định dạng pixel; cảm biến thủ công, ống kính và điều khiển đèn flash; chế độ hoạt động 3A; kiểm soát quy trình 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à độ che phủ ống kính được tạo cho mỗi tập hợp 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. Quy trình này chuyển đổi từng yêu cầu chụp thành một hình ảnh được chụp bằng cảm biến, được xử lý thành:
- Một đố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 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 bề mặt là một đích đến cho một 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 bộ đệm hình ảnh vào cho yêu cầu này (trong tổng số tập hợp đã định cấu hình). Một yêu cầu có thể là một lần chụp (với capture()) hoặc có thể được lặp lại vô thời hạn (với setRepeatingRequest()). Các lần chụp có mức độ ưu tiên cao hơn các 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ề HAL1 camera
Phiên bản 1 của hệ thống con camera đượ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ó các chức năng hơi khác nhau và chồng chéo. Điều này khiến bạn khó 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 tiếp tục hỗ trợ HAL1 camera vì nhiều thiết bị vẫn dựa vào HAL1 camera. 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 HAL1 camera và camera sau tiên tiến hơn bằng HAL3 camera.
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à ý của chúng tôi khi nói rằng Android hỗ trợ triển khai cả HAL).