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, quá trình phát triển giao diện HAL của 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 của 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 của 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 sẽ hỗ trợ các HAL 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 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 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 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:
- 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 loại dữ liệu phổ biến:
hardware/interfaces/camera/common/aidl/
Đố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 HAL 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 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 máy ảnh trên thiết bị Android, đồng thời sắp xếp lại API để API hoạt động 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 sắp xếp 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ế độ xem 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 tiếp. Đ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. 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 thông tin như không gian màu và độ bóng của ống kính sẽ được tạo cho mỗi 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. API 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:
- Đối tượng kết quả có siêu dữ liệu về ảnh 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ố lượng nhỏ các 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ả 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](https://source.android.google.cn/static/docs/core/camera/images/camera_simple_model.png?hl=vi)
Hình 1. Mô hình hoạt động cốt lõi của máy ảnh
Tổng quan về Camera HAL1
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](https://source.android.google.cn/static/docs/core/camera/images/camera_block.png?hl=vi)
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) 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 nhiều 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).