Máy ảnh HAL

Lớp trừu tượng phần cứng máy ảnh (HAL) của Android 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 cơ bản của bạn. Bắt đầu từ Android 13, việc 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 Camera HAL sang 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 mô-đun và trình điều khiển HAL máy ảnh cho Android 7.0 trở xuống, hãy lưu ý những thay đổi đáng kể trong quy trình máy ảnh.

Camera AIDL HAL

Đối với các thiết bị chạy Android 13 trở lên, khung camera bao gồm hỗ trợ cho HAL camera AIDL. Khung máy ảnh cũng hỗ trợ HAL của máy ảnh HIDL, tuy nhiên các tính năng máy ảnh được thêm vào Android 13 trở lên chỉ khả dụng thông qua giao diện HAL của máy ảnh 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 chuyển quy trình HAL của họ từ 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 AIDL cho HAL .

Triển khai camera AIDL HAL

Để tham khảo cách triển khai máy ảnh AIDL HAL, hãy xem hardware/google/camera/common/hal/aidl_service/ .

Thông số kỹ thuật HAL của máy ảnh AIDL nằm ở các vị trí sau:

Đối với các thiết bị di chuyển sang AIDL, nhà sản xuất thiết bị có thể cần sửa đổi chính sách Android SELinux (sepolicy) và tệp RC tùy thuộc vào cấu trúc mã.

Xác thực máy ảnh 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 .

Tính năng của máy ảnh HAL3

Mục đích của việc thiết kế lại API máy ảnh Android là tăng đáng kể khả năng của ứng dụng trong việc kiểm soát hệ thống con máy ảnh trên thiết bị Android đồng thời tổ chức lại API để làm cho nó hiệu quả hơn và dễ bảo trì hơn. Khả năng 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 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 để 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. Điều này giúp người dùng kiểm soát lấy nét và phơi sáng tốt hơn 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 dưới dạng một đường dẫn chuyển đổi các yêu cầu chụp khung hình đến thành khung hình, trên cơ sở 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ý 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; Chế độ hoạt động 3A; Kiểm soát xử lý RAW->YUV; tạo số liệu thống kê; và như thế.

Nói một cách đơn giản, khung ứng dụng yêu cầu một khung từ hệ thống con camera và hệ thống con camera trả về kết quả cho 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 ống kính được tạo cho từng bộ kết quả. Bạn có thể coi máy ảnh phiên bản 3 như một đường dẫn tới luồng một chiều của máy ảnh phiên bản 1. Nó chuyển đổi mỗi yêu cầu chụp thành một hình ảnh được cảm biến chụp, sau đó được xử lý thành:

  • Đối tượng kết quả có siêu dữ liệu về quá trình chụp.
  • Từ 1 đến N bộ đệm dữ liệu hình ảnh, mỗi bộ đệm nằm trên bề mặt đích riêng của nó.

Tập hợp các bề mặt đầu ra có thể được cấu hình sẵn:

  • Mỗi bề mặt là đích đế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ộ đã được định cấu hình). Một 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() ). Ảnh chụp được ưu tiên hơn các yêu cầu lặp lại.

Mô hình dữ liệu máy ảnh

Hình 1. Mô hình hoạt động lõi camera

Tổng quan về camera HAL1

Phiên bản 1 của hệ thống con camera được thiết kế dưới dạng hộp đen với các nút đ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ó 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 chế độ vận hành.

Sơ đồ khối camera

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ụ camera của Android hỗ trợ triển khai cả HAL (1 và 3), điều này rất hữu ích khi bạn muốn hỗ trợ camera mặt trước có khả năng kém hơn với camera HAL1 và camera mặt sau cao cấp hơn với 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. Cần có mô-đun máy ảnh 2 hoặc mới hơn để hỗ trợ các thiết bị 2 trở lên và các mô-đun máy ảnh đó có thể có nhiều phiên bản thiết bị máy ảnh (đây là ý của chúng tôi khi nói rằng Android hỗ trợ triển khai cả hai HAL).