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 cấp độ cao hơn API khung máy ảnh trong android.hardware.camera2 với trình điều khiển và phần cứng máy ảnh cơ bản của bạn. Kể từ Android 13, giao diện lớp trừu tượng phần cứng (HAL) cho máy ảnh phát triển ứng dụng sẽ sử dụng AIDL. Android 8.0 ra mắt Treble, chuyển đổi API HAL của máy ảnh sang giao diện ổn định được xác định theo ngôn ngữ mô tả giao diện HAL (HIDL). Nếu trước đó bạn đã phát triển một mô-đun HAL cho máy ảnh và trình điều khiển cho Android 7.0 và thấp hơn, hãy lưu ý đến những thay đổi trong quy trình camera.

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

Đối với các thiết bị chạy Android 13 trở lên, camera khung có hỗ trợ lớp trừu tượng phần cứng (HAL) cho máy ảnh AIDL. Khung camera cũng hỗ trợ lớp trừu tượng phần cứng (HAL) cho máy ảnh HIDL, tuy nhiên, các tính năng của máy ảnh được thêm vào Android 13 trở lên chỉ dùng được thông qua Giao diện lớp trừu tượng phần cứng (HAL) cho máy ảnh AIDL. Để triển khai tính năng đó trên những thiết bị nâng cấp lên Nhà sản xuất thiết bị phải chạy Android 13 trở lên di chuyển quy trình HAL từ sử dụng giao diện máy ảnh HIDL sang máy ảnh AIDL giao diện.

Để tìm hiểu về các ưu điểm của AIDL, hãy xem AIDL cho HAL.

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

Để tham khảo cách triển khai lớp trừu tượng phần cứng (HAL) cho máy ảnh AIDL, hãy xem hardware/google/camera/common/hal/aidl_service/.

Thông số kỹ thuật HAL (Lớp trừu tượng phần cứng) cho máy ảnh AIDL nằm ở những vị trí sau:

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

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 lớp trừu tượng phần cứng (HAL) cho máy ảnh AIDL, hãy đảm bảo thiết bị vượt qua tất cả thử nghiệm CTS và VTS. Android 13 ra mắt AIDL VTS thử nghiệm, VtsAidlHalCameraProvider_TargetTest.cpp.

Các tính năng HAL3 cho máy ảnh

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 kiểm soát hệ thống phụ của máy ảnh trên các thiết bị Android trong khi sắp xếp lại API để làm cho API trở nên hiệu quả và dễ bảo trì hơn. Thông tin bổ sung kiểm soát giúp tạo ứng dụng máy ảnh chất lượng cao trên Android dễ dàng hơn thiết bị có thể hoạt động đáng tin cậy trên nhiều sản phẩm trong khi vẫn đang 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 chế độ xem hợp nhất duy nhất, có thể dùng để triển khai bất kỳ chế độ nào trước đây và nhiều cài đặt 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 lấy nét 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, giảm độ tương phản và tăng độ sắc nét. Ngoài ra, chế độ xem đơn giản này còn giúp sử dụng các chức năng khác nhau của camera.

API mô hình hoá hệ thống phụ camera dưới dạng một quy trình chuyển đổi dữ liệu đầu vào các yêu cầu chụp khung hình vào khung hình theo tỷ lệ 1:1. Các yêu cầu đóng gói tất cả thông tin cấu hình về việc thu thập và xử lý khung. Đ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à đèn flash kiểm soát; 3A chế độ hoạt động; RAW->Kiểm soát xử lý YUV; tạo số liệu thống kê; và cứ tiếp tục như vậy.

Nói một cách đơn giản, khung ứng dụng sẽ yêu cầu một khung hình từ máy ảnh hệ thống con và hệ thống con camera sẽ trả về kết quả cho luồng đầu ra. Ngang bằng siêu dữ liệu chứa những thông tin như hệ màu và ống kính tô bóng được tạo cho từng tập hợp kết quả. Bạn có thể nghĩ đến máy ảnh phiên bản 3 dưới dạng một quy trình dẫn đến luồng một chiều của camera phiên bản 1. Công cụ này chuyển đổi từng ảnh chụp vào một hình ảnh do cảm biến chụp, hình ảnh này được xử lý thành:

  • Một đối tượng kết quả có siêu dữ liệu về lần chụp.
  • Từ 1 đến N vùng đệm dữ liệu hình ảnh, mỗi vùng đệm vào một giao diện đích riêng.

Tập hợp các nền tảng đầu ra có thể có đã được định cấu hình sẵn:

  • Mỗi bề mặt là một đích đến cho luồng vùng đệm hình ảnh của độ phân giải.
  • Mỗi lần chỉ có thể định cấu hình một số lượng nhỏ bề mặt làm dữ liệu đầu ra (~3).

Một yêu cầu chứa mọi chế độ cài đặt chụp mong muốn và danh sách đầu ra nền tảng để đẩy vùng đệm hình ảnh vào cho yêu cầu này (trong tổng số đã định cấu hình). Bạn có thể yêu cầu 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ẫu dữ liệu của camera

Hình 1. Kiểu hoạt động của lõi 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 một hộp đen có cấp độ và 3 chế độ hoạt động sau:

  • Xem trước
  • Quay video
  • Ảnh tĩnh

Mỗi chế độ có các khả năng hơi khác nhau và trùng lặp. Nhờ vậy, khó triển khai các tính năng mới như chế độ chụp liên tục, nằm trong khoảng từ các chế độ hoạt động.

Sơ đồ khối camera

Hình 2. Các thành phần của camera

Android 7.0 tiếp tục hỗ trợ lớp trừu tượng phần cứng (HAL1) cho camera vì nhiều thiết bị vẫn cần đến nó. Ngoài ra, dịch vụ máy ảnh của Android hỗ trợ việc triển khai cả HAL (Lớp trừu tượng phần cứng) và 3), rất hữu ích khi bạn muốn hỗ trợ một giao diện người dùng máy ảnh có máy ảnh HAL1 và máy ảnh mặt sau nâng cao hơn có máy ảnh HAL3.

Có một mô-đun HAL cho máy ảnh (có mô-đun riêng) phiên bản number), cho biết nhiều thiết bị camera độc lập mà mỗi thiết bị đều có số phiên bản của riêng chúng. Cần có mô-đun máy ảnh 2 trở lên để hỗ trợ thiết bị thế hệ 2 trở lên và các mô-đun máy ảnh đó có thể sử dụng kết hợp thiết bị máy ảnh phiên bản (điều này có nghĩa là khi chúng tôi cho biết Android hỗ trợ triển khai cả HAL).