Trang này trình bày chi tiết về sự khác biệt về phiên bản trong HAL, API của máy ảnh và các bài kiểm thử Bộ kiểm thử tính tương thích (CTS) liên quan. Tài liệu này cũng đề cập đến một số thay đổi về cấu trúc được thực hiện để tăng 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 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.
Thuật ngữ
Các thuật ngữ sau đây được sử dụng trên trang này:
- Camera API1
- Khung máy ảnh cấp ứng dụng trên các thiết bị chạy Android 4.4 trở xuống, được hiển thị thông qua lớp
android.hardware.Camera
. - Camera API2
- 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
. - HAL máy ảnh
- Lớp mô-đun máy ảnh do nhà cung cấp SoC triển khai. Các khung công khai ở cấp ứng dụng được xây dựng dựa trên lớp trừu tượng phần cứng (HAL) cho máy ảnh.
- Máy ảnh HAL3.1
- Phiên bản HAL của thiết bị máy ảnh được phát hành cùng với Android 4.4.
- Camera HAL3.2
- Phiên bản HAL của thiết bị máy ảnh được phát hành cùng với Android 5.0.
- Camera API1 CTS
- Bộ kiểm thử CTS của máy ảnh chạy trên Camera API1.
- Camera API2 CTS
- Bộ kiểm thử CTS bổ sung cho máy ảnh chạy trên Camera API2.
- Âm bổng
- Tách biệt hoạt động 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 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 ra mắt bằng Treble và dùng để chỉ định giao diện giữa HAL và người dùng.
- VTS
- Bộ thử nghiệm của nhà cung cấp được ra mắt cùng với Treble.
API máy ảnh
Android bao gồm các API máy ảnh sau.
Camera API1
Camera API1 không được dùng nữa trên Android 5.0. API này tiếp tục bị loại bỏ khi hoạt động phát triển nền tảng mới tập trung vào Camera API2. Tuy nhiên, thời gian ngừng sử dụng 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ể, chúng tôi vẫn tiếp tục hỗ trợ:
- Giao diện Camera API1 cho ứng dụng. Các ứng dụng máy ảnh được xây dựng dựa 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 HAL cho máy ảnh. Bao gồm hỗ trợ cho Máy ảnh HAL1.0.
Camera API2
Khung Camera API2 hiển thị chức năng điều khiển máy ảnh cấp thấp hơn cho ứng dụng, bao gồm cả các luồng chụp liên tục/truyền trực tuyến không sao chép hiệu quả và các chế độ điều khiển theo khung hình về độ phơi sáng, độ lợi, độ lợi cân bằng trắng, chuyển đổi màu, loại bỏ nhiễu, làm sắc nét và nhiều chế độ khác. Để biết thông tin chi tiết, hãy xem video tổng quan về Google I/O.
Android 5.0 trở lên bao gồm API Camera 2. 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 API Máy ảnh 2. 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 cấp độ hỗ trợ sau:
LEGACY
: Các thiết bị này hiển thị các chức năng cho ứng dụng thông qua giao diện Camera API2 có chức năng gần giống với các chức năng hiển thị cho ứng dụng thông qua giao diện Camera API1. Về mặt khái niệm, mã khung cũ dịch 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 như các chế độ đ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ợ quá trình xử lý lại YUV và chụp hình ảnh ở định dạng 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ư thiết bịLIMITED
, ngoại trừ một số trường hợp; 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. Cấp này được dùng cho các camera bên ngoài, chẳng hạn như webcam USB.
Các chức 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 chức năng MANUAL_SENSOR
và MANUAL_POST_PROCESSING
, cùng với các chức năng khác. Khả năng RAW
là không bắt buộc ngay cả đối với các thiết bị FULL
.
Thiết bị LIMITED
có thể quảng cáo bất kỳ tập hợp con nào trong số các chức năng này, bao gồm cả việc không quảng cáo chức năng nào. Tuy nhiên, bạn phải luôn xác định chức năng BACKWARD_COMPATIBLE
.
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 đây để 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 về 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 thử Camera API1 CTS, Camera API2 CTS và Camera CTS Verifier.
Các thiết bị không triển khai Camera HAL3.2 và không thể hỗ trợ đầy đủ giao diện Camera API2 vẫn phải vượt qua các bài kiểm thử CTS Camera API2. Tuy nhiên, thiết bị chạy ở chế độ LEGACY
của Camera API2 (về mặt lý thuyết, các lệnh gọi API Camera API2 được ánh xạ đến các lệnh gọi API Camera API1). Do đó, mọi bài kiểm thử CTS API2 của Camera API liên quan đến các tính năng hoặc chức năng ngoài API của Máy ảnh 1 đều tự động bị bỏ qua.
Trên các thiết bị cũ, các kiểm thử CTS Camera API2 được chạy sử dụng các giao diện và chức năng Camera API1 công khai hiện có mà không có yêu cầu mới. Lỗi bị lộ (và gây ra lỗi CTS của Camera API2) là các lỗi đã có trong Lớp trừu tượng phần cứng (HAL) cho máy ảnh hiện có của thiết bị, do đó các ứng dụng API1 của Máy ảnh hiện có sẽ tìm thấy. Chúng tôi không mong đợi nhiều lỗi thuộc loại này (tuy nhiên, mọi lỗi như vậy đều phải được khắc phục để vượt qua các bài kiểm thử CTS Camera API2).
Yêu cầu về VTS
Các thiết bị chạy Android 8.0 trở lên có phương thức triển khai HAL liên kết phải vượt qua bài kiểm thử VTS cho ứng dụng Máy ảnh.
Làm cứng khung máy ảnh
Để tăng cường bảo mật khung hình ảnh và nội dung nghe nhìn, Android 7.0 sẽ di chuyển dịch vụ máy ảnh ra khỏi mediaserver. Kể từ Android 8.0, mỗi HAL máy ảnh được liên kết sẽ chạy trong một quy trình riêng biệt với dịch vụ máy ảnh. Các nhà cung cấp có thể cần thực hiện thay đổi trong HAL (Lớp trừu tượng phần cứng) của máy ảnh tuỳ thuộc vào API và phiên bản HAL đang sử dụng. Các phần sau đây trình bày chi tiết về các thay đổi về cấu trúc trong AP1 và AP2 cho HAL1 và HAL3, cũng như các yêu cầu chung.
Thay đổi về cấu trúc cho API1
Tính năng quay video API1 có thể giả định máy ảnh và bộ mã hoá video hoạt động trong cùng một quy trình. Khi sử dụng API1 trên:
- HAL3, trong đó dịch vụ máy ảnh sử dụng BufferQueue để truyền vùng đệm giữa các quy trình, không cần cập nhật nhà cung cấp.
- HAL1, hỗ trợ truyền siêu dữ liệu vào vùng đệm video, nhà cung cấp phải
cập nhật HAL để sử dụng
kMetadataBufferTypeNativeHandleSource
. (Android 7.0 không còn hỗ trợkMetadataBufferTypeCameraSource
.)
Thay đổi về cấu trúc cho API2
Đối với API2 trên HAL1 hoặc HAL3, BufferQueue sẽ truyền các vùng đệm để các đường dẫn đó tiếp tục hoạt động. Cấu trúc Android 7.0 cho API2 trên:
- HAL1 không chịu ảnh hưởng của việc di chuyển cameraservice 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:
Yêu cầu khác
Các thay đổi về cấu trúc được thực hiện để tăng cường bảo mật khung hình ảnh và nội dung nghe nhìn bao gồm các yêu cầu bổ sung sau đây đối với thiết bị.
- Chung. Các thiết bị cần thêm băng thông 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. Nhà cung cấp có thể đo lường mức tác động thực tế bằng cách chạy
android.hardware.camera2.cts.PerformanceTest
và ứng dụng Google Camera để quay video tốc độ cao 120/240 khung hình/giây. Các thiết bị cũng cần thêm một lượng nhỏ RAM để tạo quy trình mới. - Chuyển siêu dữ liệu trong vùng đệm video (chỉ HAL1). Nếu HAL1 lưu trữ siêu dữ liệu thay vì dữ liệu khung hình YUV thực trong vùng đệm video, thì HAL phải sử dụng
kMetadataBufferTypeNativeHandleSource
làm loại vùng đệm siêu dữ liệu và truyềnVideoNativeHandleMetadata
trong vùng đệm video. (kMetadataBufferTypeCameraSource
không còn được hỗ trợ trên Android 7.0.) VớiVideoNativeHandleMetadata
, máy ảnh và khung nội dung đa phương tiện có thể truyền vùng đệm video giữa các quy trình bằng cách chuyển đổi tuần tự và giải tuần tự các ô điều khiển gốc đúng cách. - Địa chỉ tay điều khiển 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 trình xử lý vùng đệm. HAL không thể sử dụng địa chỉ để xác định vùng đệm vì địa chỉ có thể lưu trữ một tay xử lý vùng đệm khác sau khi HAL trả về vùng đệm. Bạn phải cập nhật HAL để sử dụng tay điều khiển vùng đệm nhằm xác định vùng đệm. Ví dụ: HAL nhận được địa chỉ tay điều khiển vùng đệm A, địa chỉ này lưu trữ tay điều khiển vùng đệm A. Sau khi HAL trả về ô điều khiển bộ đệm A, địa chỉ của ô xử lý vùng đệm A có thể lưu trữ ô điều khiển bộ đệm B vào lần tiếp theo HAL nhận được ô đó.
- 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 cho mediaserver quyền chạy máy ảnh, bạn phải cập nhật các chính sách SELinux để cấp cho cameraserver các quyền thích hợp. Bạn không nên sao chép các chính sách SELinux của mediaserver cho cameraserver (vì mediaserver và cameraserver 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ủ nội dung nghe nhìn sẽ bị xoá.
- Phân tách giữa Camera HAL và cameraserver. Ngoài ra, Android 8.0 trở lên còn tách biệt HAL máy ảnh được liên kết trong một quy trình khác với máy chủ máy ảnh. IPC đi qua các giao diện do HIDL xác định.
Xác nhận kết quả
Đối với tất cả thiết bị có máy ảnh và chạy Android 7.0, hãy xác minh quá trình triển khai bằng cách chạy CTS Android 7.0. Mặc dù Android 7.0 không bao gồm các chương trình kiểm thử CTS mới xác minh các thay đổi về dịch vụ máy ảnh, nhưng các chương trình kiểm thử CTS hiện tại sẽ không thành công nếu bạn chưa thực hiện các bản cập nhật nêu trên.
Đối với tất cả thiết bị có máy ảnh và chạy Android 8.0 trở lên, hãy xác minh cách triển khai của nhà cung cấp bằng cách chạy VTS.
Nhật ký phiên bản HAL cho máy ảnh
Để biết danh sách các bài kiểm thử có sẵn để đánh giá HAL Máy ảnh Android, hãy xem Danh sách kiểm tra kiểm thử HAL máy ảnh.
Android 10
Android 10 ra mắt các bản cập nhật sau.
Camera API
- Các điểm cải tiến về nhiều máy ảnh cho phép sử dụng từng máy ảnh thực hoặc thông qua các máy ảnh logic tương ứng bằng cách ẩn mã nhận dạng máy ảnh thực. Hãy xem bài viết Hỗ trợ nhiều máy ảnh.
- Có thể kiểm tra xem một cấu hình phiên cụ thể có được hỗ trợ hay không mà không gây hao tổn hiệu suất khi tạo phiên mới.
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 ứng dụng hoạt động hiệu quả và tiết kiệm điện hơn. Xem
getRecommendedStreamConfigurationMap
. - Hỗ trợ định dạng hình ảnh JPEG chiều sâu. Để biết thêm thông tin, hãy xem Quy cách về Độ sâu động.
- Hỗ trợ định dạng hình ảnh HEIC. Xem phần Tạo ảnh HEIF.
- Cải tiến về quyền riêng tư. Một số khoá nhất định là bắt buộc để ứng dụng có quyền
CAMERA
trước khi có thể truy xuất các khoá đó từCameraCharacteristics
. Hãy xem phầngetKeysNeedingPermission
.
HAL máy ảnh
Các phiên bản HAL (Lớp trừu tượng phần cứng) cho máy ảnh sau đây đã được cập nhật trong Android 10.
3,5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Thông tin máy ảnh tĩnh cho mã máy ảnh thực tế sao lưu thiết bị máy ảnh logic. Xem phần Hỗ trợ nhiều camera. isStreamCombinationSupported
: Phương thức này hỗ trợ một API công khai giúp ứng dụng truy vấn nếu cấu hình phiên được hỗ trợ. Xem API để truy vấn các tổ hợp luồng.
ICameraDeviceSession
-
isReconfigurationNeeded
: Phương thức cho khung máy ảnh biết liệu có bắt buộc phải định 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ó hay không. Điều này giúp tránh tình trạng chậm trễ không cần thiết khi định cấu hình lại máy ảnh. Xem Truy vấn định cấu hình lại phiên. - API quản lý vùng đệm HAL: Các API này cho phép HAL của máy ảnh yêu cầu vùng đệm từ khung máy ảnh khi cần thay vì ghép nối từng yêu cầu chụp ảnh với các vùng đệm liên kết trong toàn bộ quy trình của máy ảnh, nhờ đó có thể tiết kiệm đáng kể bộ nhớ.
-
signalStreamFlush
: Báo hiệu cho HAL rằng dịch vụ máy ảnh 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 điều kiện tương tranh giữa các lệnh gọiconfigureStreams_3_5
vàsignalStreamFlush
.
-
Nội dung cập nhật đối với ICameraDeviceCallback
:
-
requestStreamBuffers
: Lệnh gọi lại đồng bộ mà HAL máy ảnh gọi để yêu cầu máy chủ máy ảnh cung cấp vùng đệm. Hãy xem phầnrequestStreamBuffers
. -
returnStreamBuffers
: Lệnh gọi lại đồng bộ cho HAL máy ảnh để trả về vùng đệm đầu ra cho máy chủ máy ảnh. Hãy xem phầnreturnStreamBuffers
.
3.4
Các khoá sau đây đượ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 của 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
- Chức năng
-
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
-
- Giá trị cho khoá
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 hiện có
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 hiện có
-
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT
-
Mô-đun camera
Các phiên bản mô-đun máy ảnh sau đây được cập nhật trong Android 10.
2,5
- Thêm phương thức
notifyDeviceStateChange
để các thiết bị thông báo cho HAL máy ảnh khi các thay đổi về mặt vật lý (chẳng hạn như gập lại) ảnh hưởng đến máy ảnh và định tuyến.
2.4
- Các thiết bị chạy bằng 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 nội dung cập nhật sau đây cho giao diện API2 và HAL của máy ảnh.
Camera API
- Giới thiệu API nhiều máy ảnh để hỗ trợ tốt hơn các thiết bị có nhiều máy ảnh hướng về cùng một hướng, cho phép các tính năng như hiệu ứng bokeh và thu phóng liền mạch. Điều này cho phép các ứng dụng xem nhiều máy ảnh trên một thiết bị dưới dạng một đơn vị logic (máy ảnh logic). Bạn cũng có thể gửi yêu cầu chụp đến từng thiết bị máy ảnh riêng lẻ trong một máy ảnh logic. Xem phần Hỗ trợ nhiều camera.
- Giới thiệu các thông số phiên. Thông số phiên là một tập hợp con của các thông số chụp có sẵn có thể gây ra độ trễ xử lý nghiêm trọng khi được sửa đổi. Bạn có thể giảm thiểu các chi phí này nếu ứng dụng truyền giá trị ban đầu trong quá trình khởi chạy phiên chụp. Xem phần Tham số phiên.
- Thêm các khoá dữ liệu ổn định quang học (OIS) để tạo hiệu ứng và ổn định ở cấp ứng dụng. Xem
STATISTICS_OIS_SAMPLES
. - Thêm hỗ trợ flash bên ngoài. Hãy xem phần
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Thêm ý định theo dõi chuyển động trong
CAPTURE_INTENT
. Hãy xem phầnCONTROL_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ế độ chỉnh méo hình trong
CaptureRequest
. Hãy xem phầnDISTORTION_CORRECTION_MODE
. - Bổ sung tính năng 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
.
Lớp trừu tượng phần cứng (HAL) cho máy ảnh
3.4
Nội dung cập nhật cho ICameraDeviceSession
-
configureStreams_3_4
: Thêm tính năng hỗ trợ chosessionParameters
và máy ảnh logic. -
processCaptureRequest_3_4
: Hỗ trợ thêm việc đưa mã máy ảnh thực vào cấu trúc luồng.
Nội dung cập nhật cho ICameraDeviceCallback
-
processCaptureResult_3_4
: Thêm siêu dữ liệu máy ảnh thực tế vào kết quả chụp.
3,3
Các khoá sau đây được thêm vào siêu dữ liệu máy ảnh trong Android 9.
- Tính 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 của 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, các hoạt động triển khai Camera HAL của nhà cung cấp phải được liên kết. Android 8.0 cũng chứa các tính năng nâng cao quan trọng sau đây cho dịch vụ Máy ảnh:
- Các nền tảng dùng chung: Cho phép nhiều nền tảng chia sẻ cùng một
OutputConfiguration
- API hệ thống cho các chế độ máy ảnh tuỳ chỉnh
onCaptureQueueEmpty
Xem các phần bên dưới để biết thêm thông tin về những tính năng này.
Bề mặt dùng chung
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ã hoá 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, nhà sản xuất thiết bị cần đảm bảo rằng việc triển khai HAL (Lớp trừu tượng phần cứng) cho máy ảnh và HALloc Dịch vụ máy ảnh truyền cờ sử dụng của người tiêu dùng đến HAL máy ảnh và HAL gralloc; họ cần phân bổ các loại vùng đệm phù hợp hoặc HAL của máy ảnh cần trả về một lỗi mà tổ hợp đối tượng tiêu dùng không được hỗ trợ.
Hãy xem tài liệu dành cho nhà phát triển
enableSurfaceSharing
để biết thêm thông tin chi tiết.
API hệ thống cho các chế độ máy ảnh tuỳ chỉnh
API máy ảnh công khai xác định hai chế độ hoạt động: quay video tốc độ cao bình thường và bị hạn chế. Các chế độ này có ngữ nghĩa khá khác nhau; ví dụ: chế độ tốc độ cao bị 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ế độ tuỳ chỉnh khác cho các tính năng dành riêng cho phần cứng. Về cơ bản, chế độ này chỉ là một số nguyên được truyền đến configure_streams
. Hãy xem:
hardware/camera/device/3.2/ICameraDeviceSession#configurestreams
.
Tính năng này bao gồm một lệnh gọi API hệ thống mà các ứng dụng máy ảnh của OEM có thể sử dụng để bật chế độ tuỳ 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 kích hoạt bằng số nguyên này được truyền đến HAL trên configuration_streams, sau đó để ứng dụng máy ảnh tuỳ chỉnh 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 về chế độ điều khiển như thu phóng bằng cách giữ cho hàng đợi yêu cầu trống càng nhiều càng tốt. onCaptureQueueEmpty
không yêu cầu hoạt động HAL; đây chỉ là một hoạt động bổ sung phía khung. Những ứng dụng muốn tận dụng tính năng này cần thêm trình nghe vào lệnh gọi lại đó và phản hồi một cách thích hợp. Thường thì việc này được thực hiện 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 HIDL của máy ảnh là một bản sửa đổi toàn diện của giao diện HAL của máy ảnh sử dụng các API do HIDL xác định ổn định. Tất cả tính năng và chức năng máy ảnh được giới thiệu trong các phiên bản cũ 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 điểm bổ sung nhỏ đối với siêu dữ liệu được hỗ trợ và thay đổi đối với tính năng hỗ trợ data_space:
- Thêm siêu dữ liệu tĩnh
ANDROID_SENSOR_OPAQUE_RAW_SIZE
làm phần 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àm siêu dữ liệu bắt buộc nếu đị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 bằng cách sử dụng định nghĩa phiên bản 0 của quá trình mã hoá không gian dữ liệu. - Các phần bổ sung siêu dữ liệu chung có thể sử dụng cho HALv3.2 trở lê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ỏ HAL (Lớp trừu tượng phần cứng) có khả năng mở rộng:
- Nội dung cập nhật về API xử lý lại OPAQUE và YUV.
- Hỗ trợ cơ bản cho vùng đệ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
. - Thêm 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ỏ về HAL có khả năng mở rộng:
- Ngừng sử dụng
get_metadata_vendor_tag_ops
. Thay vào đó, hãy sử dụngget_vendor_tag_ops
trongcamera_common.h
. - Ngừng sử dụng
register_stream_buffers
. Tất cả vùng đệm gralloc do khung cung cấp cho HAL trongprocess_capture_request
có thể là mới bất cứ lúc nào. - Thêm tính năng 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ủa 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ể dùng mẫu này để trực tiếp kiểm soát các chế độ cài đặt chụp. - Làm lại thông số kỹ thuật của luồng đầu vào và luồng hai chiều.
- Thay đổi đường dẫn trả về vùng đệm đầu vào. Vùng đệm được trả về trong
process_capture_result
thay vìprocess_capture_request
.
3.1
Bản sửa đổi nhỏ về HAL có khả năng mở rộng:
configure_streams
truyền cờ sử dụng của người dùng đến HAL.- xoá lệnh gọi để loại bỏ tất cả yêu cầu/bộ đệm đang diễn ra nhanh nhất có thể.
3
Bản sửa đổi đầu tiên của HAL có khả năng mở rộng:
- Thay đổi lớn về phiên bản do ABI hoàn toàn khác. Không thay đổi chức năng phần cứng hoặc mô hình hoạt động bắt buộc từ phiên bản 2.0.
- Giao diện yêu cầu đầu vào và hàng đợi luồng được làm lại: Khung gọi vào HAL với yêu cầu tiếp theo và vùng đệm luồng đã được loại bỏ khỏi hàng đợi. Tính năng hỗ trợ khung đồng bộ hoá được bao gồm, là điều cần thiết để triển khai hiệu quả.
- Đã chuyển điều kiện kích hoạt vào yêu cầu, hầu hết thông báo thành kết quả.
- Hợp nhất tất 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. - Đã chuyển cấu hình luồng thành một lệnh gọi duy nhất để đơn giản hoá 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ũ/có giới hạn.
2
Bản phát hành đầu tiên của HAL có chức 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.
- 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 Bayer RAW, xử lý lại dữ liệu RAW, v.v.
1.0
HAL máy ảnh Android ban đầu (Android 4.0) [camera.h]:
- Chuyển đổi từ lớp trừu tượng CameraHardwareInterface của C++.
- Hỗ trợ API
android.hardware.Camera
.
Nhật ký phiên bản mô-đun camera
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 có ý nghĩa nhất đại diện cho phiên bản chính và hai chữ số có ý nghĩa nhỏ nhất đại diện cho phiên bản nhỏ.
2.4
Phiên bản mô-đun máy ảnh này bổ sung các thay đổi sau đây đối với API:
- Hỗ trợ chế độ đèn pin. Khung này có thể bật chế độ đèn pin cho mọi thiết bị máy ảnh 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 cao hơn khi truy cập vào đơn vị đèn flash so với mô-đun máy ảnh; việc mở thiết bị máy ảnh sẽ tắt đèn pin nếu đèn pin đã được bật thông qua giao diện mô-đun. Khi có xung đột tài nguyên, 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 của 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ỉ có sẵn khi máy ảnh được kết nối và sẵn sàng sử dụng cho các máy ảnh bên ngoài có thể cắm nóng. Các lệnh gọi để lấy 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 này chỉ dựa vào các lệnh gọi lại thay đổi trạng thái thiết bị để quản lý danh sách máy ảnh bên ngoài có sẵn. - Gợi ý về việc phân xử máy ảnh. Thêm tính năng hỗ trợ để chỉ báo rõ ràng số lượng thiết bị máy ảnh có thể mở và sử dụng đồng thời. Để chỉ định các tổ hợp thiết bị hợp lệ, bạn phải luôn đặt trường
resource_cost
vàconflicting_devices
trong cấu trúccamera_info
do lệnh gọiget_camera_info
trả về. - Phương thức khởi tạo mô-đun. Được dịch vụ máy ảnh gọi sau khi mô-đun HAL được tải để cho phép khởi chạy HAL một lần. Phương thức này đượ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 tính năng hỗ trợ thiết bị HAL máy ảnh cũ.
Khung có thể sử dụng khung này để mở thiết bị máy ảnh dưới dạng thiết bị HAL phiên bản HAL (HAL) cho thiết bị 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 có 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 thêm tính năng hỗ trợ thẻ nhà cung cấp từ mô-đun và ngừng sử dụng vendor_tag_query_ops
cũ mà trước đây chỉ có thể truy cập khi thiết bị đang mở.
2.1
Phiên bản mô-đun máy ảnh này hỗ trợ thêm các lệnh gọi lại không đồng bộ vào khung từ mô-đun HAL (Lớp trừu tượng phần cứng) của máy ảnh. Mô-đun này 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
Các mô-đun máy ảnh báo cáo số phiên bản này sẽ triển khai phiên bản thứ hai của giao diện HAL (Lớp trừu tượng phần cứng) cho 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 sẽ triển khai giao diện HAL của mô-đun máy ảnh ban đầu. Tất cả thiết bị máy ảnh đều mở được thông qua mô-đun này chỉ hỗ trợ phiên bản 1 của HAL thiết bị máy ảnh. Các trường device_version
và static_camera_characteristics
của camera_info
không hợp lệ. Chỉ mô-đun này và các thiết bị của mô-đun này mới có thể hỗ trợ API android.hardware.Camera
.