Trang này trình bày chi tiết sự khác biệt về phiên bản trong Camera HAL, API và các thử nghiệm Bộ kiểm tra khả năng tương thích (CTS) có liên quan. Nó cũng bao gồm một số thay đổi về kiến trúc được thực hiện để củng cố và bảo mật khung máy ảnh trong Android 7.0, việc chuyển sang Treble trong Android 8.0 và các bản cập nhật mà nhà cung cấp phải thực hiện để hỗ trợ những thay đổi này trong quá trình triển khai máy ảnh của họ.
Thuật ngữ
Các điều khoản sau đây đượ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 trở xuống, được hiển thị thông qua lớp
android.hardware.Camera
. - API máy ảnh2
- Khung máy ảnh 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 máy ảnh do các nhà cung cấp SoC triển khai. Các khung công khai cấp ứng dụng được xây dựng trên HAL của máy ảnh.
- 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 cùng với Android 5.0.
- Máy ảnh API1 CTS
- Tập hợp các thử nghiệm CTS máy ảnh chạy trên Camera API1.
- Máy ảnh API2 CTS
- Bộ kiểm tra CTS máy ảnh bổ sung chạy trên Camera API2.
- âm bổng
- Tách biệt việc triển khai của nhà cung cấp (phần mềm cấp thấp, dành riêng cho thiết bị do các 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 camera sau.
API máy ảnh1
Android 5.0 không dùng nữa Camera API1, tiếp tục bị loại bỏ khi quá trình phát triển nền tảng mới tập trung vào Camera API2. 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 Camera API1 cho các ứng dụng. Các ứ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 Android thấp hơn.
- Các phiên bản máy ảnh HAL. Bao gồm hỗ trợ Camera HAL1.0.
API máy ảnh2
Khung API2 của Máy ảnh hiển thị 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à kiểm soát độ phơi sáng, mức tăng, mức cân bằng trắng, chuyển đổi màu, khử nhiễu, làm sắc nét, v.v. trên mỗi khung hình. Để 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 của Camera API2. Thuộc tính android.info.supportedHardwareLevel
mà ứ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:
-
LEGACY
: Các thiết bị này cung cấp khả năng cho các ứng dụng thông qua các giao diện Camera API2 có khả năng gần giống như các khả năng được hiển thị cho các ứng dụng thông qua các giao diện Camera API1. Về mặt khái niệm, mã khung kế thừa chuyển các lệnh gọi Camera API2 thành các lệnh gọi Camera API1; các thiết bị cũ không hỗ trợ các tính năng Camera API2, chẳng hạn như các điều khiển trên mỗi khung hình. -
LIMITED
: Các thiết bị này hỗ trợ một số khả năng API2 của Camera (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 chức 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 camera 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 các 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 của các khả năng này, kể cả không có khả năng nào trong số chú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 chức năng Camera API2 cụ thể mà thiết bị 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 Camera API1 CTS, Camera API2 CTS và CTS Verifier.
Các thiết bị không có tính năng triển khai Camera HAL3.2 và không có khả năng hỗ trợ các 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ế độ Camera API2 LEGACY
(trong đó các lệnh gọi API2 của Camera được ánh xạ theo khái niệm tới các lệnh gọi API của Camera1), vì vậy mọi thử nghiệm Camera API2 CTS liên quan đến các tính năng hoặc khả năng ngoài API1 của Camera sẽ tự động bị bỏ qua.
Trên các thiết bị cũ, các thử nghiệm Camera API2 CTS đang chạy sẽ sử dụng các khả năng và giao diện Camera API1 công khai 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 thuộc loại nà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 VTS
Các thiết bị chạy Android 8.0 trở lên có triển khai HAL liên kết phải vượt qua các bài kiểm tra Camera VTS .
Làm cứng khung máy ảnh
Để tăng cường bảo mật khung phương tiện và máy ảnh, Android 7.0 chuyển dịch vụ máy ảnh ra khỏi máy chủ phương tiện. Bắt đầu với Android 8.0, mỗi Camera HAL được liên kết 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 nêu 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
Quay video API1 có thể cho rằng máy ảnh và bộ mã hóa video hoạt động trong cùng một quy 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. Ngăn xếp phương tiện và máy ảnh Android 7.0 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 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ụ camera 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
Các thay đổi về kiến trúc được thực hiện để tăng cường bảo mật cho phương tiện và khung máy ảnh bao gồm các yêu cầu thiết bị bổ sung sau đây.
- Tổng quan. 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 máy ảnh nhạy cảm với thời gian, chẳng hạn 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
trong bộ đệm video. (kMetadataBufferTypeCameraSource
không còn được hỗ trợ trên Android 7.0.) VớiVideoNativeHandleMetadata
, khung máy ảnh và phương tiện có thể chuyển bộ đệm video giữa các quy trình bằng cách tuần tự hóa và giải tuần tự hóa các bộ điều khiển 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 bộ xử lý 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 bộ 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 tay cầm bộ đệm để xác định bộ đệm. Ví dụ: HAL nhận địa chỉ tay cầm bộ đệm A, lưu trữ tay cầm bộ đệm A. Sau khi HAL trả về tay cầm bộ đệm A, địa chỉ tay cầm bộ đệm A có thể lưu trữ tay cầm bộ đệm B vào lần tiếp theo HAL nhận được nó.
- Cập nhật chính sách SELinux cho cameraserver. Nếu các chính sách SELinux dành riêng cho thiết bị cấp quyền cho máy chủ phương tiện để chạy máy ảnh, bạn phải cập nhật các chính sách SELinux để cấp cho máy chủ 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ủ phương tiện cho máy chủ (vì máy chủ phương tiện và máy chủ máy ảnh thường yêu cầu các tài nguyên khác nhau trong hệ thống). Máy chủ máy ảnh 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 máy chủ phương tiện phải bị xóa.
- Tách biệt giữa Camera HAL và cameraserver. Android 8.0 trở lên cũng tách Camera HAL được kết dính trong một quy trình khác với máy chủ camera. 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ó máy ảnh 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 thử nghiệm CTS mới để xác minh các thay đổi của dịch vụ máy ảnh, nhưng các thử nghiệm CTS hiện có sẽ không thành công nếu bạn chưa thực hiện các cập nhật nêu 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 máy ảnh HAL
Để biết danh sách các kiểm tra có sẵn để đánh giá Android Camera HAL, hãy xem Danh sách kiểm tra kiểm tra HAL của 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 sử dụng camera vật lý riêng lẻ hoặc thông qua 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í hoạt động khi tạo phiên mới hay không. Xem
CameraDevice
. - Khả năng truy xuất các cấu hình luồng được đề xuất cho một trường hợp sử dụng nhất định để giúp máy khách hoạt động hiệu quả và tiết kiệm năng lượng 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ư. Một số 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 xem cấu hình phiên có được hỗ trợ hay không. Xem API để truy vấn kết hợp luồng .
ICameraDeviceSession
-
isReconfigurationNeeded
: Phương thức cho khung máy ảnh biết liệu có cần phải cấu hình lại toàn bộ luồng cho các giá trị tham số phiên mới có thể hay không. Đ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 . - API quản lý bộ đệm HAL : Các API này cho phép camera HAL chỉ yêu cầu bộ đệm từ khung camera khi được yêu cầu thay vì ghép từng yêu cầu chụp với các bộ đệm liên quan của nó trong toàn bộ đường dẫn camera, giúp 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ả 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 tình trạng cạnh tranh giữa các cuộc 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 camera HAL để trả lại bộ đệm đầu ra cho máy chủ camera. 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
-
- khả năng
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- Các 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ấ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ấ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 thức
notifyDeviceStateChange
để thiết bị thông báo cho camera HAL khi các thay đổi vật lý, chẳng hạn như gập, ảnh hưởng đến camera 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
.
android9
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 API2 và HAL của máy ảnh.
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 hướng về cùng một hướng, cho phép các tính năng như hiệu ứng xóa phông 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ị dưới dạng 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 quanh bởi một camera logic. Xem Hỗ trợ nhiều camera .
- Giới thiệu các tham 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 độ trễ xử lý nghiêm trọng khi sửa đổi. Những chi phí này có thể được giảm thiểu 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 Tham số phiên .
- Thêm các phím dữ liệu ổn định quang học (OIS) để ổn định và hiệu ứng cấp ứng dụ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
. - Ngừng sử dụng
LENS_RADIAL_DISTORTION
và thêmLENS_DISTORTION
vào vị trí của nó. - Thêm các chế độ sửa méo trong
CaptureRequest
. XemDISTORTION_CORRECTION_MODE
. - Thêm hỗ trợ cho camera 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à logic camera. -
processCaptureRequest_3_4
: Thêm hỗ trợ bao gồm ID máy ảnh 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ý trong 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.
- khả năng
-
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 liên kết hóa . Android 8.0 cũng bao gồm những cải tiến quan trọng sau đối với dịch vụ Máy ảnh:
- Các 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.
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ụ điện năng và bộ nhớ. Để 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 máy ảnh và gralloc HAL của họ 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 soạn thảo 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ổ đúng loại bộ đệm hoặc HAL của máy ảnh cần trả về lỗi rằng 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 thông thường và bị hạn chế. Chúng có ngữ nghĩa khá khác nhau; ví dụ: chế độ tốc độ cao được giới hạn ở tối đa 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. Về cơ bản, chế độ chỉ là một số nguyên được chuyển đến 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, các 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 đó để ứ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
.
onCaptureQueueRỗng
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 bên khung. Các ứng dụng muốn tận dụng lợi thế của nó cần thêm một trình 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.
Camera HIDL giao diện
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 camera đượ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 (đối với mô-đun camera) cũng là một phần của định nghĩa HIDL.
3.4
Các bổ sung nhỏ cho 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 siêu dữ liệu tĩnh
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
là bắt buộc nếu bất kỳ định dạng RAW nào được hỗ trợ. - Chuyển trường
camera3_stream_t data_space
sang định nghĩa linh hoạt hơn, sử dụng định nghĩa mã hóa không gian dữ liệu phiên bản 0. - 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
Sửa đổi nhỏ về khả năng mở rộng HAL:
- 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 quay vào
camera3_stream_t
. - Bổ sung chế độ vận hành cấu hình luồng camera3 cho
camera3_stream_configuration_t
.
3.2
Sửa đổi nhỏ về khả năng mở rộng HAL:
- Không dùng nữa
get_metadata_vendor_tag_ops
. Thay vào đó, hãy sử dụngget_vendor_tag_ops
trongcamera_common.h
. - Không dùng nữa
register_stream_buffers
. Tất cả bộ đệm gralloc do khung cung cấp cho HAL trongprocess_capture_request
có thể mới bất cứ lúc nào. - Thêm hỗ trợ một phần kết quả.
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 trực tiếp cài đặt chụp. - Làm lại thông số kỹ thuật luồng hai chiều và luồng đầu vào.
- 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
Sửa đổi nhỏ về khả năng mở rộng HAL:
-
configure_streams
chuyển các cờ sử dụng của người tiêu dùng sang HAL. - cuộc gọi tuôn ra để 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:
- Phiên bản chính thay đổi vì ABI hoàn toàn khác. Không có thay đổi đối với khả năng phần cứng cần thiết hoặc mô hình hoạt động từ 2.0.
- Đã làm lại giao diện yêu cầu đầu vào và hàng đợi luồng: Khung gọi vào HAL với yêu cầu tiếp theo và bộ đệm luồng đã bị loại bỏ. Hỗ trợ khung đồng bộ hóa được bao gồm, cần thiết để triển khai hiệu quả.
- Đã chuyển trình kích hoạt thành yêu cầu, hầu hết 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 thành 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ế độ giới hạn cho các thiết bị phần cứng cũ/hạn chế.
2.0
Bản phát hành đầu tiên của HAL có khả năng mở rộng (Android 4.2) [camera2.h]:
- Đủ để triển khai API
android.hardware.Camera
hiện có. - Cho phép xếp hàng ZSL trong lớp dịch vụ máy ảnh.
- Chưa thử nghiệm bất kỳ tính năng mới nào như điều khiển chụp thủ công, chụp RAW của Bayer, 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 về 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 quan trọng 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 thêm các thay đổi API sau:
- Hỗ trợ chế độ đèn pin. Hệ thống 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ó mức độ ưu tiên truy cập vào bộ đè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 camera chỉ khả dụng khi camera được kết nối và sẵn sàng sử dụng cho camera cắm nóng bên ngoài. Các lệnh gọi để nhận thông tin tĩnh là các lệnh 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. - Camera gợi ý trọng tài. Thêm hỗ trợ để chỉ rõ số lượng thiết bị máy ảnh có thể được mở và sử dụng đồng thời. Để chỉ định các tổ hợp thiết bị hợp lệ, các trường
resource_cost
conflicting_devices
phải luôn được đặt trong cấu trúccamera_info
do lệnh gọiget_camera_info
trả về. - Phương pháp khởi tạo mô-đun. Được gọi bởi dịch vụ camera sau khi mô-đun HAL được tải để cho phép khởi tạo 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 cũ 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 của 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ị camera với phiên bản được hỗ trợ mới nhất, đây 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à loại bỏ vendor_tag_query_ops
cũ mà trước đây chỉ có thể truy cập được khi mở thiết bị.
2.1
Phiên bản mô-đun máy ảnh này bổ sung hỗ trợ gọi lại không đồng bộ cho khung từ mô-đun HAL của máy ảnh, được sử dụng để thông báo cho khung về những thay đổi đối với trạng thái mô-đun máy ảnh. Các 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
Các 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 HAL của mô-đun máy ảnh. Các thiết bị máy ảnh có thể mở 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
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ở 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 trường device_version
và static_camera_characteristics
của camera_info
không hợp lệ. Chỉ có API android.hardware.Camera
có thể được hỗ trợ bởi mô-đun này và các thiết bị của nó.