Trang này trình bày chi tiết về sự khác biệt của phiên bản trong các bài kiểm tra Camera HAL, API và các bài kiểm tra Bộ kiểm tra khả năng tương thích (CTS) được liên kết. Nó cũng bao gồm một số thay đổi về kiến trúc được thực hiện để làm cứng và bảo mật khung máy ảnh trong Android 7.0, chuyển sang Treble trong Android 8.0 và các nhà cung cấp bản cập nhật phải thực hiện để hỗ trợ những thay đổi này trong việc triển khai máy ảnh của họ.
Thuật ngữ
Các thuật ngữ sau được sử dụng trên trang này:
- API máy ảnh1
- Khung máy ảnh cấp ứng dụng trên Android 4.4 và các thiết bị thấp hơn, được hiển thị thông qua lớp
android.hardware.Camera
. - API máy ảnh2
- Khung camera cấp ứng dụng trên các thiết bị Android 5.0 trở lên, được hiển thị thông qua gói
android.hardware.camera2
. - Máy ảnh HAL
- Lớp mô-đun camera do các nhà cung cấp SoC triển khai. Khung công khai cấp ứng dụng được xây dựng trên đầu máy ảnh HAL.
- Máy ảnh HAL3.1
- Phiên bản của thiết bị máy ảnh HAL được phát hành với Android 4.4.
- Máy ảnh HAL3.2
- Phiên bản của thiết bị máy ảnh HAL được phát hành với Android 5.0.
- API máy ảnh1 CTS
- Tập hợp các bài kiểm tra CTS máy ảnh chạy trên Camera API1.
- Camera API2 CTS
- Bộ kiểm tra CTS camera bổ sung chạy trên Camera API2.
- Treble
- Tách phần triển khai của nhà cung cấp (phần mềm cấp thấp hơn, dành riêng cho thiết bị do nhà sản xuất silicon viết) khỏi khung hệ điều hành Android thông qua giao diện nhà cung cấp mới.
- HIDL
- Ngôn ngữ định nghĩa giao diện HAL được giới thiệu với Treble và được sử dụng để chỉ định giao diện giữa HAL và người dùng của nó.
- VTS
- Bộ thử nghiệm của nhà cung cấp được giới thiệu cùng với Treble.
API máy ảnh
Android bao gồm các API máy ảnh sau.
API máy ảnh1
Android 5.0 không dùng nữa API máy ảnh1, tiếp tục bị loại bỏ khi phát triển nền tảng mới tập trung vào API máy ảnh2. Tuy nhiên, giai đoạn loại bỏ sẽ kéo dài và các bản phát hành Android sẽ tiếp tục hỗ trợ các ứng dụng Camera API1 trong một thời gian. Cụ thể, hỗ trợ tiếp tục cho:
- Giao diện API1 máy ảnh cho ứng dụng. Ứng dụng máy ảnh được xây dựng trên Camera API1 sẽ hoạt động như trên các thiết bị chạy phiên bản phát hành Android thấp hơn.
- Các phiên bản camera HAL. Bao gồm hỗ trợ cho Camera HAL1.0.
API máy ảnh2
Khung API2 của Máy ảnh cho thấy khả năng kiểm soát máy ảnh cấp thấp hơn cho ứng dụng, bao gồm các luồng liên tục / phát trực tuyến không sao chép hiệu quả và các điều khiển trên mỗi khung hình về độ phơi sáng, độ lợi, độ tăng cân bằng trắng, chuyển đổi màu sắc, làm mờ, làm sắc nét và hơn thế nữa. Để biết chi tiết, hãy xem video tổng quan về Google I / O.
Android 5.0 trở lên bao gồm Camera API2; tuy nhiên, các thiết bị chạy Android 5.0 trở lên có thể không hỗ trợ tất cả các tính năng Camera API2. Thuộc tính android.info.supportedHardwareLevel
mà các ứng dụng có thể truy vấn thông qua giao diện Camera API2 báo cáo một trong các mức hỗ trợ sau:
- PHÁP
LEGACY
: Các thiết bị này hiển thị các khả năng với ứng dụng thông qua giao diện Camera API2 gần giống với các khả năng hiển thị với ứng dụng thông qua giao diện Camera API1. Mã khung kế thừa chuyển các lệnh gọi Camera API2 thành lệnh gọi Camera API1; các thiết bị cũ không hỗ trợ các tính năng API2 của Máy ảnh, chẳng hạn như điều khiển trên mỗi khung hình. -
LIMITED
: Các thiết bị này hỗ trợ một số tính năng của Camera API2 (nhưng không phải tất cả) và phải sử dụng Camera HAL 3.2 trở lên. -
FULL
: Các thiết bị này hỗ trợ tất cả các tính năng chính của Camera API2 và phải sử dụng Camera HAL 3.2 trở lên và Android 5.0 trở lên. -
LEVEL_3
: Các thiết bị này hỗ trợ xử lý lại YUV và chụp ảnh RAW, cùng với các cấu hình luồng đầu ra bổ sung. -
EXTERNAL
: Các thiết bị này tương tự như các thiết bịLIMITED
với một số ngoại lệ; ví dụ: một số thông tin về cảm biến hoặc ống kính có thể không được báo cáo hoặc có tốc độ khung hình kém ổn định hơn. Mức này được sử dụng cho các máy ảnh bên ngoài như webcam USB.
Các khả năng riêng lẻ được hiển thị thông qua thuộc tính android.request.availableCapabilities
trong giao diện Camera API2. Các thiết bị FULL
yêu cầu khả năng MANUAL_SENSOR
và MANUAL_POST_PROCESSING
, trong số các khả năng khác. Khả năng RAW
là tùy chọn ngay cả đối với các thiết bị FULL
. LIMITED
thiết bị có thể quảng cáo bất kỳ tập hợp con nào trong số các khả năng này, bao gồm cả các khả năng không. Tuy nhiên, khả năng BACKWARD_COMPATIBLE
phải luôn được xác định.
Cấp phần cứng được hỗ trợ của thiết bị, cũng như các khả năng Camera API2 cụ thể mà nó hỗ trợ, có sẵn dưới dạng các cờ tính năng sau để cho phép Google Play lọc các ứng dụng máy ảnh Camera API2.
-
android.hardware.camera.hardware_level.full
-
android.hardware.camera.capability.raw
-
android.hardware.camera.capability.manual_sensor
-
android.hardware.camera.capability.manual_post_processing
Yêu cầu CTS
Các thiết bị chạy Android 5.0 trở lên phải vượt qua các bài kiểm tra camera API1 CTS, Camera API2 CTS và CTS Verifier.
Các thiết bị không có triển khai Camera HAL3.2 và không có khả năng hỗ trợ giao diện Camera API2 đầy đủ vẫn phải vượt qua các bài kiểm tra Camera API2 CTS. Tuy nhiên, thiết bị chạy ở chế độ HỢP PHÁP LEGACY
Camera (trong đó các lệnh gọi Camera API2 được ánh xạ theo khái niệm đến các lệnh gọi Camera API1) nên mọi bài kiểm tra CTS của Camera API2 liên quan đến các tính năng hoặc khả năng ngoài Camera API1 sẽ tự động bị bỏ qua.
Trên các thiết bị cũ, các bài kiểm tra CTS của Camera API2 đang chạy sử dụng các giao diện và khả năng của Camera API1 công cộng hiện có mà không có yêu cầu mới. Các lỗi bị lộ (và gây ra lỗi Camera API2 CTS) là các lỗi đã có trong Camera HAL hiện có của thiết bị và do đó sẽ được tìm thấy bởi các ứng dụng Camera API1 hiện có. Chúng tôi không mong đợi có nhiều lỗi như vậy (tuy nhiên, bất kỳ lỗi nào như vậy phải được sửa để vượt qua các bài kiểm tra Camera API2 CTS).
Yêu cầu của VTS
Các thiết bị chạy Android 8.0 trở lên có triển khai HAL được ràng buộc hóa phải vượt qua bài kiểm tra Camera VTS .
Làm cứng khung máy ảnh
Để tăng cường bảo mật khung máy ảnh và phương tiện, Android 7.0 chuyển dịch vụ máy ảnh ra khỏi máy chủ trung gian. Bắt đầu với Android 8.0, mỗi Camera HAL liên kết sẽ chạy trong một quy trình tách biệt với dịch vụ camera. Các nhà cung cấp có thể cần thực hiện các thay đổi trong HAL của máy ảnh tùy thuộc vào phiên bản API và HAL đang sử dụng. Các phần sau trình bày chi tiết các thay đổi về kiến trúc trong AP1 và AP2 cho HAL1 và HAL3, cũng như các yêu cầu chung.
Thay đổi kiến trúc cho API1
Tính năng quay video API1 có thể giả sử máy ảnh và bộ mã hóa video hoạt động trong cùng một quá trình. Khi sử dụng API1 trên:
- HAL3, trong đó dịch vụ camera sử dụng BufferQueue để chuyển bộ đệm giữa các quy trình, không cần cập nhật nhà cung cấp .
Hình 1. Ngăn xếp phương tiện và máy ảnh Android 7.0 trong API1 trên HAL3
- HAL1, hỗ trợ truyền siêu dữ liệu trong bộ đệm video, nhà cung cấp phải cập nhật HAL để sử dụng
kMetadataBufferTypeNativeHandleSource
. (kMetadataBufferTypeCameraSource
không còn được hỗ trợ trong Android 7.0.)Hình 2. Máy ảnh Android 7.0 và ngăn xếp phương tiện trong API1 trên HAL1
Thay đổi kiến trúc cho API2
Đối với API2 trên HAL1 hoặc HAL3, BufferQueue chuyển các bộ đệm để các đường dẫn đó tiếp tục hoạt động. Kiến trúc Android 7.0 cho API2 trên:
- HAL1 không bị ảnh hưởng bởi việc di chuyển dịch vụ máy ảnh và không cần cập nhật nhà cung cấp .
- HAL3 bị ảnh hưởng, nhưng không cần cập nhật nhà cung cấp :
Hình 3. Ngăn xếp phương tiện và máy ảnh Android 7.0 trong API2 trên HAL3
Các yêu cầu bổ sung
Những thay đổi về kiến trúc được thực hiện để tăng cường bảo mật cho khung máy ảnh và phương tiện bao gồm các yêu cầu bổ sung về thiết bị sau đây.
- Chung. Các thiết bị yêu cầu băng thông bổ sung do IPC, điều này có thể ảnh hưởng đến các trường hợp sử dụng camera nhạy cảm với thời gian như quay video tốc độ cao. Các nhà cung cấp có thể đo lường tác động thực tế bằng cách chạy
android.hardware.camera2.cts.PerformanceTest
và ứng dụng Google Máy ảnh để quay video tốc độ cao 120/240 FPS. Các thiết bị cũng yêu cầu một lượng nhỏ RAM bổ sung để tạo quy trình mới. - Chuyển siêu dữ liệu vào bộ đệm video ( chỉ HAL1 ). Nếu HAL1 lưu trữ siêu dữ liệu thay vì dữ liệu khung YUV thực trong bộ đệm video, thì HAL phải sử dụng
kMetadataBufferTypeNativeHandleSource
làm loại bộ đệm siêu dữ liệu và chuyểnVideoNativeHandleMetadata
vào bộ đệm video. (kMetadataBufferTypeCameraSource
không còn được hỗ trợ trên Android 7.0.) VớiVideoNativeHandleMetadata
, các khuôn khổ máy ảnh và phương tiện có thể truyền bộ đệm video giữa các quy trình bằng cách tuần tự hóa và giải mã hóa các xử lý gốc đúng cách. - Địa chỉ xử lý bộ đệm không phải lúc nào cũng lưu trữ cùng một bộ đệm ( chỉ HAL3 ). Đối với mỗi yêu cầu chụp, HAL3 nhận địa chỉ của các chốt điều khiển bộ đệm. HAL không thể sử dụng các địa chỉ để xác định bộ đệm vì các địa chỉ có thể lưu trữ một xử lý bộ đệm khác sau khi HAL trả về bộ đệm. Bạn phải cập nhật HAL để sử dụng các chốt điều khiển bộ đệm để xác định các bộ đệm. Ví dụ, HAL nhận địa chỉ xử lý bộ đệm A, địa chỉ này lưu trữ xử lý bộ đệm A. Sau khi HAL trả về xử lý bộ đệm A, địa chỉ xử lý bộ đệm A có thể lưu trữ xử lý bộ đệm B vào lần tiếp theo HAL nhận được.
- Cập nhật chính sách SELinux cho cameraerver. Nếu các chính sách SELinux dành riêng cho thiết bị cung cấp quyền cho máy chủ trung gian để chạy máy ảnh, thì bạn phải cập nhật các chính sách SELinux để cấp cho máy chủ máy ảnh quyền thích hợp. Chúng tôi không khuyến khích sao chép các chính sách SELinux của máy chủ trung gian cho máy chủ quay phim (vì máy chủ trung gian và máy chủ quay phim thường yêu cầu các tài nguyên khác nhau trong hệ thống). Máy chủ camera chỉ nên có các quyền cần thiết để thực hiện các chức năng của máy ảnh và mọi quyền không cần thiết liên quan đến máy ảnh trong trình trung gian sẽ bị xóa.
- Ngăn cách giữa Camera HAL và cameraerver. Android 8.0 trở lên cũng tách biệt Camera HAL liên kết trong một quy trình khác với cameraerver. IPC đi qua các giao diện do HIDL xác định .
Thẩm định
Đối với tất cả các thiết bị có camera và chạy Android 7.0, hãy xác minh việc triển khai bằng cách chạy Android 7.0 CTS. Mặc dù Android 7.0 không bao gồm các bài kiểm tra CTS mới để xác minh các thay đổi của dịch vụ máy ảnh, các bài kiểm tra CTS hiện có không thành công nếu bạn chưa thực hiện các bản cập nhật được chỉ ra ở trên.
Đối với tất cả các thiết bị có camera và chạy Android 8.0 trở lên, hãy xác minh việc triển khai của nhà cung cấp bằng cách chạy VTS.
Lịch sử phiên bản HAL của máy ảnh
Để biết danh sách các bài kiểm tra có sẵn để đánh giá HAL Máy ảnh Android, hãy xem Danh sách kiểm tra Kiểm tra HAL Máy ảnh .
Android 10
Android 10 giới thiệu các bản cập nhật sau.
API máy ảnh
- Cải tiến nhiều camera cho phép các camera vật lý được sử dụng riêng lẻ hoặc thông qua các camera logic tương ứng bằng cách ẩn ID camera vật lý. Xem Hỗ trợ nhiều camera .
- Khả năng kiểm tra xem một cấu hình phiên cụ thể có được hỗ trợ mà không có chi phí hiệu suất khi tạo một phiên mới hay không. Xem
CameraDevice
. - Khả năng truy xuất cấu hình luồng được đề xuất cho một trường hợp sử dụng nhất định để làm cho máy khách hoạt động hiệu quả và hiệu quả hơn. Xem
getRecommendedStreamConfigurationMap
. - Hỗ trợ định dạng ảnh JPEG độ sâu . Để biết thêm chi tiết, hãy xem thông số kỹ thuật Độ sâu động .
- Hỗ trợ định dạng Hình ảnh HEIC . Xem Hình ảnh HEIF .
- Cải tiến quyền riêng tư. Các khóa nhất định được yêu cầu để khách hàng có quyền
CAMERA
trước khi có thể truy xuất chúng từCameraCharacteristics
. XemgetKeysNeedingPermission
.
Máy ảnh HAL
Các phiên bản Camera HAL sau được cập nhật trong Android 10.
3.5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Thông tin camera tĩnh cho ID camera vật lý hỗ trợ thiết bị camera logic. Xem Hỗ trợ nhiều camera . -
isStreamCombinationSupported
: Phương pháp này hỗ trợ API công khai giúp khách hàng truy vấn nếu cấu hình phiên được hỗ trợ. Xem API để truy vấn các kết hợp luồng .
ICameraDeviceSession
-
isReconfigurationNeeded
: Phương thức cho khung camera biết liệu có cần cấu hình lại luồng hoàn chỉnh cho các giá trị tham số phiên mới có thể có. Điều này giúp tránh sự chậm trễ cấu hình lại máy ảnh không cần thiết. Xem Truy vấn cấu hình lại phiên . - Các API quản lý bộ đệm HAL : Các API này cho phép máy ảnh HAL chỉ yêu cầu bộ đệm từ khung máy ảnh thay vì kết hợp từng yêu cầu chụp với bộ đệm liên quan của nó trong suốt đường dẫn máy ảnh, dẫn đến khả năng tiết kiệm bộ nhớ đáng kể.
-
signalStreamFlush
: Báo hiệu cho HAL rằng dịch vụ camera sắp thực hiệnconfigureStreams_3_5
và HAL phải trả về tất cả các bộ đệm của các luồng được chỉ định. -
configureStreams_3_5
: Tương tự nhưICameraDevice3.4.configureStreams
, nhưng ngoài ra, bộ đếmstreamConfigCounter
được cung cấp để kiểm tra điều kiện đua giữa các lệnh gọiconfigureStreams_3_5
vàsignalStreamFlush
.
-
Cập nhật cho ICameraDeviceCallback
:
-
requestStreamBuffers
: Gọi lại đồng bộ mà camera HAL gọi để yêu cầu máy chủ camera cung cấp bộ đệm. XemrequestStreamBuffers
. -
returnStreamBuffers
: Gọi lại đồng bộ cho máy ảnh HAL để trả lại bộ đệm đầu ra cho máy chủ máy ảnh. XemreturnStreamBuffers
.
3,4
Các phím sau được thêm vào siêu dữ liệu máy ảnh trong Android 10.
- Định dạng hình ảnh
-
ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
-
ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
-
ANDROID_SCALER_AVAILABLE_FORMATS_Y8
-
- Thẻ siêu dữ liệu máy ảnh
-
ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
-
ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
-
ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
-
ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
-
ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
-
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
-
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
-
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
-
ANDROID_HEIC_INFO_SUPPORTED
-
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
-
- Năng lực
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- Giá trị cho khóa
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
-
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
-
- Các cấu hình luồng độ sâu động có sẵn
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
-
ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
-
- Các cấu hình luồng HEIC có sẵn
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
Mô-đun máy ảnh
Các phiên bản mô-đun máy ảnh sau được cập nhật trong Android 10.
2,5
- Thêm phương
notifyDeviceStateChange
cho các thiết bị để thông báo cho máy ảnh HAL khi các thay đổi vật lý, chẳng hạn như gấp, ảnh hưởng đến máy ảnh và định tuyến.
2,4
- Các thiết bị khởi chạy với API cấp 29 trở lên PHẢI báo cáo
true
choisTorchModeSupported
.
Android 9
Bản phát hành Android 9 giới thiệu các bản cập nhật sau cho giao diện camera API2 và HAL.
API máy ảnh
- Giới thiệu API nhiều camera để hỗ trợ tốt hơn cho các thiết bị có nhiều camera quay theo cùng một hướng, cho phép các tính năng như bokeh và thu phóng liền mạch. Điều này cho phép các ứng dụng xem nhiều camera trên một thiết bị như một đơn vị logic (camera logic). Yêu cầu chụp cũng có thể được gửi đến các thiết bị camera riêng lẻ được bao bọc bởi một camera logic. Xem Hỗ trợ nhiều camera .
- Giới thiệu các thông số phiên. Tham số phiên là một tập hợp con của các tham số chụp có sẵn có thể gây ra sự chậm trễ xử lý nghiêm trọng khi được sửa đổi. Các chi phí này có thể được giảm nhẹ nếu khách hàng chuyển các giá trị ban đầu của họ trong quá trình khởi tạo phiên chụp. Xem Thông số phiên .
- Thêm các phím dữ liệu ổn định quang học (OIS) để ổn định cấp ứng dụng và hiệu ứng. Xem
STATISTICS_OIS_SAMPLES
. - Thêm hỗ trợ đèn flash bên ngoài. Xem
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Thêm mục đích theo dõi chuyển động trong
CAPTURE_INTENT
. XemCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - Không
LENS_RADIAL_DISTORTION
và thêmLENS_DISTORTION
vào vị trí của nó. - Thêm các chế độ sửa biến dạng trong
CaptureRequest
. XemDISTORTION_CORRECTION_MODE
. - Thêm hỗ trợ cho máy ảnh USB / UVC bên ngoài trên các thiết bị được hỗ trợ. Xem
INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL
.
Máy ảnh HAL
3,4
Cập nhật cho ICameraDeviceSession
-
configureStreams_3_4
: Thêm hỗ trợ chosessionParameters
và camera logic. -
processCaptureRequest_3_4
: Thêm hỗ trợ để bao gồm ID camera vật lý trong cấu trúc luồng.
Cập nhật cho ICameraDeviceCallback
-
processCaptureResult_3_4
: Thêm siêu dữ liệu máy ảnh vật lý vào kết quả chụp.
3,3
Các phím sau được thêm vào siêu dữ liệu máy ảnh trong Android 9.
- Năng lực
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
-
- Thẻ siêu dữ liệu máy ảnh
-
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
-
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
-
ANDROID_LENS_POSE_REFERENCE
-
ANDROID_LENS_DISTORTION
-
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
-
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
-
ANDROID_STATISTICS_OIS_DATA_MODE
-
ANDROID_STATISTICS_OIS_TIMESTAMPS
-
ANDROID_STATISTICS_OIS_X_SHIFTS
-
ANDROID_STATISTICS_OIS_Y_SHIFTS
-
Android 8.0
Bản phát hành Android 8.0 giới thiệu Treble. Với Treble, việc triển khai Camera HAL của nhà cung cấp phải được ràng buộc . Android 8.0 cũng có những cải tiến quan trọng đối với dịch vụ Máy ảnh:
- Bề mặt được chia sẻ: Cho phép nhiều bề mặt chia sẻ cùng một
OutputConfiguration
- API hệ thống cho các chế độ máy ảnh tùy chỉnh
-
onCaptureQueueEmpty
Xem các phần bên dưới để biết thêm thông tin về các tính năng này.
Các bề mặt được chia sẻ
Tính năng này chỉ cho phép một bộ đệm để điều khiển hai đầu ra, chẳng hạn như xem trước và mã hóa video, giúp giảm mức tiêu thụ bộ nhớ và điện năng. Để hỗ trợ tính năng này, các nhà sản xuất thiết bị cần đảm bảo việc triển khai HAL của máy ảnh và gralloc HAL có thể tạo bộ đệm gralloc được sử dụng bởi nhiều người tiêu dùng khác nhau (chẳng hạn như trình tổng hợp phần cứng / GPU và bộ mã hóa video), thay vì chỉ một người tiêu dùng. Dịch vụ camera chuyển các cờ sử dụng của người tiêu dùng tới camera HAL và gralloc HAL; họ cần phân bổ các loại bộ đệm phù hợp hoặc máy ảnh HAL cần trả về lỗi mà tổ hợp người tiêu dùng này không được hỗ trợ.
Xem tài liệu dành cho nhà phát triển enableSurfaceSharing
để biết thêm chi tiết.
API hệ thống cho các chế độ máy ảnh tùy chỉnh
API camera công cộng xác định hai chế độ hoạt động: ghi tốc độ cao bình thường và hạn chế. Chúng có ngữ nghĩa khá khác nhau; ví dụ, chế độ tốc độ cao được giới hạn cho nhiều nhất hai đầu ra cụ thể cùng một lúc. Nhiều OEM đã bày tỏ sự quan tâm đến việc xác định các chế độ tùy chỉnh khác cho các khả năng dành riêng cho phần cứng. Bên dưới, chế độ này chỉ là một số nguyên được truyền vào configure_streams
. Xem: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Tính năng này bao gồm lệnh gọi API hệ thống mà các ứng dụng máy ảnh OEM có thể sử dụng để bật chế độ tùy chỉnh. Các chế độ này phải bắt đầu ở giá trị số nguyên 0x8000 để tránh xung đột với các chế độ trong tương lai được thêm vào API công khai.
Để hỗ trợ tính năng này, OEM chỉ cần thêm chế độ mới vào HAL của họ, được kích hoạt bởi số nguyên này được chuyển đến HAL trên configure_streams, sau đó yêu cầu ứng dụng máy ảnh tùy chỉnh của họ sử dụng API hệ thống.
Tên phương thức là android.hardware.camera2.CameraDevice#createCustomCaptureSession
. Xem: frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty
Mục đích của API này là giảm độ trễ của các thay đổi kiểm soát như thu phóng bằng cách giữ cho hàng đợi yêu cầu càng trống càng tốt. onCaptureQueueEmpty
không yêu cầu công việc HAL; nó hoàn toàn là một bổ sung phía khung. Các ứng dụng muốn tận dụng lợi thế của nó cần phải thêm một người nghe vào cuộc gọi lại đó và phản hồi một cách thích hợp. Nói chung, đó là bằng cách gửi một yêu cầu chụp khác đến thiết bị máy ảnh.
Giao diện HIDL của máy ảnh
Giao diện Camera HIDL là một bản đại tu hoàn chỉnh của giao diện Camera HAL sử dụng các API ổn định do HIDL xác định. Tất cả các tính năng và khả năng của máy ảnh được giới thiệu trong các phiên bản kế thừa gần đây nhất 3.4 và 2.4 (dành cho mô-đun máy ảnh) cũng là một phần của định nghĩa HIDL.
3,4
Các bổ sung nhỏ đối với siêu dữ liệu được hỗ trợ và các thay đổi đối với hỗ trợ data_space:
- Thêm siêu dữ liệu tĩnh
ANDROID_SENSOR_OPAQUE_RAW_SIZE
là bắt buộc nếu định dạngRAW_OPAQUE
được hỗ trợ. - Thêm
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
siêu dữ liệu tĩnh là bắt buộc nếu bất kỳ định dạng RAW nào được hỗ trợ. - Chuyển
camera3_stream_t data_space
sang định nghĩa linh hoạt hơn, sử dụng định nghĩa phiên bản 0 của mã hóa vùng dữ liệu. - Các bổ sung siêu dữ liệu chung có sẵn để sử dụng cho HALv3.2 hoặc mới hơn:
-
ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
-
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
-
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
-
ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
-
ANDROID_SENSOR_OPAQUE_RAW_SIZE
-
ANDROID_SENSOR_OPTICAL_BLACK_REGIONS
-
3,3
Bản sửa đổi nhỏ của HAL khả năng mở rộng:
- Các bản cập nhật API xử lý lại OPAQUE và YUV.
- Hỗ trợ cơ bản cho bộ đệm đầu ra độ sâu.
- Thêm trường
data_space
vàocamera3_stream_t
. - Thêm trường xoay vào
camera3_stream_t
. - Bổ sung chế độ hoạt động cấu hình luồng camera3 vào
camera3_stream_configuration_t
.
3.2
Bản sửa đổi nhỏ của HAL khả năng mở rộng:
- Không
get_metadata_vendor_tag_ops
. Thay vào đó, hãy sử dụngget_vendor_tag_ops
trongcamera_common.h
. - Không dùng
register_stream_buffers
. Tất cả các bộ đệm gralloc do khung công tác cung cấp cho HAL trongprocess_capture_request
có thể mới bất kỳ lúc nào. - Thêm hỗ trợ kết quả một phần.
process_capture_result
có thể được gọi nhiều lần với một tập hợp con các kết quả có sẵn trước khi có kết quả đầy đủ. - Thêm mẫu thủ công vào
camera3_request_template
. Các ứng dụng có thể sử dụng mẫu này để kiểm soát cài đặt chụp trực tiếp. - Làm lại các thông số kỹ thuật luồng đầu vào và hai chiều.
- Thay đổi đường dẫn trả về bộ đệm đầu vào. Bộ đệm được trả về trong
process_capture_result
thay vìprocess_capture_request
.
3.1
Bản sửa đổi nhỏ của HAL khả năng mở rộng:
-
configure_streams
chuyển cờ sử dụng của người tiêu dùng đến HAL. - tuôn ra cuộc gọi để loại bỏ tất cả các yêu cầu / bộ đệm trên chuyến bay nhanh nhất có thể.
3.0
Bản sửa đổi đầu tiên của HAL khả năng mở rộng:
- Thay đổi phiên bản chính kể từ ABI là hoàn toàn khác nhau. Không có thay đổi đối với các khả năng phần cứng được yêu cầu hoặc mô hình hoạt động từ 2.0.
- Yêu cầu đầu vào được làm lại và giao diện hàng đợi luồng: Framework gọi vào HAL với yêu cầu tiếp theo và bộ đệm luồng đã được xếp lại hàng. Hỗ trợ khung đồng bộ hóa được bao gồm, cần thiết để triển khai hiệu quả.
- Đã chuyển kích hoạt thành các yêu cầu, hầu hết các thông báo thành kết quả.
- Hợp nhất tất cả các lệnh gọi lại vào khung thành một cấu trúc và tất cả các phương thức thiết lập vào một lệnh gọi
initialize()
duy nhất. - Đã tạo cấu hình luồng thành một cuộc gọi duy nhất để đơn giản hóa việc quản lý luồng. Luồng hai chiều thay thế cấu trúc
STREAM_FROM_STREAM
. - Ngữ nghĩa chế độ hạn chế cho các thiết bị phần cứng cũ hơn / hạn chế.
2.0
Bản phát hành đầu tiên của HAL khả năng mở rộng (Android 4.2) [camera2.h]:
- Đủ để triển khai API
android.hardware.Camera
hiện có. - Cho phép hàng đợi ZSL trong lớp dịch vụ máy ảnh.
- Không được thử nghiệm cho bất kỳ tính năng mới nào như điều khiển chụp thủ công, chụp Bayer RAW, xử lý lại dữ liệu RAW, v.v.
1,0
Máy ảnh Android ban đầu HAL (Android 4.0) [camera.h]:
- Được chuyển đổi từ lớp trừu tượng CameraHardwareInterface của C ++.
- Hỗ trợ API
android.hardware.Camera
.
Lịch sử phiên bản mô-đun máy ảnh
Phần này chứa thông tin lập phiên bản mô-đun cho mô-đun phần cứng Máy ảnh, dựa trên camera_module_t.common.module_api_version
. Hai chữ số hex có ý nghĩa nhất đại diện cho phiên bản chính và hai chữ số ít quan trọng nhất đại diện cho phiên bản phụ.
2,4
Phiên bản mô-đun máy ảnh này bổ sung các thay đổi API sau:
- Hỗ trợ chế độ đèn pin. Khung có thể bật chế độ đèn pin cho bất kỳ thiết bị máy ảnh nào có đèn flash mà không cần mở thiết bị máy ảnh. Thiết bị máy ảnh có quyền ưu tiên truy cập đơn vị đèn flash cao hơn so với mô-đun máy ảnh; mở thiết bị camera sẽ tắt đèn pin nếu nó đã được bật thông qua giao diện mô-đun. Khi có bất kỳ xung đột tài nguyên nào, chẳng hạn như
open()
được gọi để mở thiết bị máy ảnh, mô-đun HAL của máy ảnh phải thông báo cho khung thông qua lệnh gọi lại trạng thái chế độ đèn pin rằng chế độ đèn pin đã bị tắt. - Hỗ trợ máy ảnh bên ngoài (ví dụ: máy ảnh cắm nóng USB). Các bản cập nhật API chỉ định thông tin tĩnh của máy ảnh chỉ khả dụng khi máy ảnh được kết nối và sẵn sàng sử dụng cho máy ảnh cắm nóng bên ngoài. Cuộc gọi để nhận thông tin tĩnh là cuộc gọi không hợp lệ khi trạng thái máy ảnh không phải là
CAMERA_DEVICE_STATUS_PRESENT
. Khung chỉ dựa vào các cuộc gọi lại thay đổi trạng thái thiết bị để quản lý danh sách camera bên ngoài có sẵn. - Gợi ý trọng tài camera. Thêm hỗ trợ cho biết rõ ràng số lượng thiết bị camera có thể được mở và sử dụng đồng thời. Để chỉ định các kết hợp hợp lệ của các thiết bị, trường
resource_cost
vàconflicting_devices
đột_devices phải luôn được đặt trong cấu trúccamera_info
do cuộc gọiget_camera_info
trả về. - Phương thức khởi tạo mô-đun. Dịch vụ camera gọi sau khi mô-đun HAL được tải để cho phép khởi chạy HAL một lần. Nó được gọi trước khi bất kỳ phương thức mô-đun nào khác được gọi.
2.3
Phiên bản mô-đun máy ảnh này bổ sung hỗ trợ thiết bị HAL máy ảnh kế thừa mở. Khung có thể sử dụng nó để mở thiết bị camera dưới dạng thiết bị HAL phiên bản HAL thấp hơn nếu cùng một thiết bị có thể hỗ trợ nhiều phiên bản API thiết bị. Lệnh gọi mở mô-đun phần cứng tiêu chuẩn ( common.methods->open
) tiếp tục mở thiết bị máy ảnh với phiên bản được hỗ trợ mới nhất, cũng là phiên bản được liệt kê trong camera_info_t.device_version
.
2,2
Phiên bản mô-đun máy ảnh này bổ sung hỗ trợ thẻ nhà cung cấp từ mô-đun và không chấp nhận các cung cấp cũ của nhà cung vendor_tag_query_ops
mà trước đây chỉ có thể truy cập được khi thiết bị đang mở.
2.1
Phiên bản mô-đun máy ảnh này bổ sung hỗ trợ cho các lệnh gọi lại không đồng bộ đến khung từ mô-đun HAL của máy ảnh, được sử dụng để thông báo cho khung về các thay đổi đối với trạng thái mô-đun máy ảnh. Mô-đun cung cấp phương thức set_callbacks()
hợp lệ phải báo cáo ít nhất số phiên bản này.
2.0
Mô-đun máy ảnh báo cáo số phiên bản này triển khai phiên bản thứ hai của giao diện mô-đun máy ảnh HAL. Thiết bị máy ảnh có thể mở được thông qua mô-đun này có thể hỗ trợ phiên bản 1.0 hoặc phiên bản 2.0 của giao diện HAL của thiết bị máy ảnh. Trường device_version
của camera_info luôn hợp lệ; trường static_camera_characteristics
của camera_info
là hợp lệ nếu trường device_version
là 2.0 trở lên.
1,0
Các mô-đun máy ảnh báo cáo các số phiên bản này triển khai giao diện HAL của mô-đun máy ảnh ban đầu. Tất cả các thiết bị máy ảnh có thể mở được thông qua mô-đun này chỉ hỗ trợ phiên bản 1 của thiết bị máy ảnh HAL. Các device_version
và static_camera_characteristics
của camera_info
không hợp lệ. Chỉ có thể hỗ trợ API android.hardware.Camera
bởi mô-đun này và các thiết bị của nó.