Lớp trừu tượng phần cứng (HAL) cho máy ảnh

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 trình điều khiển và phần cứng máy ảnh cơ bản. Kể từ Android 13, việc phát triển giao diện HAL (Lớp trừu tượng phần cứng) cho máy ảnh sẽ sử dụng AIDL. Android 8.0 đã ra mắt Treble, chuyển đổi API HAL của máy ảnh 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ô-đun và trình điều khiển HAL máy ảnh cho Android 7.0 trở xuống, hãy lưu ý đến những thay đổi đáng kể trong quy trình máy ảnh.

HAL máy ảnh AIDL

Đối với các thiết bị chạy Android 13 trở lên, khung máy ảnh có hỗ trợ lớp trừu tượng phần cứng (HAL) cho máy ảnh AIDL. Khung máy ảnh cũng hỗ trợ các HAL 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ỉ có sẵn thông qua giao diện HAL máy ảnh 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 chuyển quy trình HAL (Lớp trừu tượng phần cứng) từ 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 bài viết AIDL cho HAL.

Triển khai HAL máy ảnh AIDL

Để tham khảo cách triển khai HAL máy ảnh AIDL, 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 SELinux của Android (sepolicy) và các tệp RC tuỳ thuộc vào cấu trúc mã.

Xác thực lớp trừu tượng phần cứng (HAL) cho máy ảnh AIDL

Để kiểm thử việc triển khai HAL máy ảnh AIDL, hãy đảm bảo thiết bị vượt qua tất cả các bài kiểm thử CTS và VTS. Android 13 ra mắt quy trình kiểm thử AIDL VTS, VtsAidlHalCameraProvider_TargetTest.cpp.

Tính năng của Camera HAL3

Mục đích của việc thiết kế lại API Máy ảnh trên Android là tăng đáng kể khả năng các ứng dụng kiểm soát hệ thống con máy ảnh trên các thiết bị Android, đồng thời sắp xếp lại API để giúp API trở nên hiệu quả và dễ bảo trì hơn. Chế độ kiểm soát bổ sung giúp bạn 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 ổn định 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 máy ảnh cấu trúc các chế độ hoạt động thành một khung hiển thị hợp nhất duy nhất. Bạn có thể dùng khung hiển thị 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. Đ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ư có nhiều chế độ xử lý hậu kỳ hơn, chẳng hạn như giảm nhiễu, độ tương phản và làm sắc nét. Hơn nữa, chế độ xem đơn giản này giúp nhà phát triển ứng dụng dễ dàng sử dụng nhiều chức năng của máy ảnh hơn.

API mô hình hoá hệ thống con máy ảnh 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, trên cơ sở 1:1. Các yêu cầu này đóng gói tất cả thông tin cấu hình về việc chụp và xử lý khung hình. Trong đó bao gồm độ phân giải và định dạng pixel; chế độ điều khiển cảm biến, ống kính và đèn flash theo cách thủ công; 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 từ hệ thống con máy ảnh và hệ thống con máy ảnh trả về kết quả cho luồng đầu ra. Ngoài ra, siêu dữ liệu chứa các thông tin như hệ màu và tô bóng ống kính sẽ được tạo cho từng tập hợp kết quả. Bạn có thể coi máy ảnh phiên bản 3 là một quy trình cho luồng một chiều của máy ảnh phiên bản 1. Phương thứ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ề lần chụp.
  • Một đến N vùng đệm dữ liệu hình ảnh, mỗi vùng đệm vào một nền tảng đích riêng.

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

  • Mỗi nền tảng 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 nền tảng 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 vùng đệm hình ảnh vào cho yêu cầu này (trong tổng số nhóm đã định cấu hình). Yêu cầu có thể là một lần (với capture()) hoặc có thể lặp lại vô thời hạn (với setRepeatingRequest()). Các bản ghi sẽ có mức độ ưu tiên cao hơn so với 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 cốt lõi của máy ảnh

Tổng quan về HAL1 cho máy ảnh

Phiên bản 1 của hệ thống con máy ảnh được thiết kế dưới dạng 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 khả năng hơi khác nhau và chồng chéo nhau. Điều này khiến việc triển khai các tính năng mới như chế độ chụp liên tục trở nên khó khăn, vì chế độ này nằm giữa hai chế độ hoạt động.

Sơ đồ khối của máy ảnh

Hình 2. Các thành phần của máy ảnh

Android 7.0 tiếp tục hỗ trợ HAL1 của máy ảnh vì nhiều thiết bị vẫn dựa vào HAL1. Ngoài ra, dịch vụ máy ảnh Android hỗ trợ triển khai cả hai HAL (1 và 3). Điều này hữu ích khi bạn muốn hỗ trợ máy ảnh mặt trước có khả năng kém hơn bằng camera HAL1 và máy ảnh mặt sau tiên tiến hơn bằng camera HAL3.

Có một mô-đun HAL máy ảnh (có số phiên bản riêng), trong đó liệt kê nhiều thiết bị máy ảnh độc lập, mỗi thiết bị có số phiên bản riêng. Bạn cần có mô-đun máy ảnh 2 trở lên để hỗ trợ thiết bị 2 trở lên và các mô-đun máy ảnh như vậy có thể kết hợp các phiên bản thiết bị máy ảnh (đây là ý nghĩa của việc Android hỗ trợ triển khai cả hai HAL).