Trang này trình bày chi tiết sự khác biệt về phiên bản trong HAL (Lớp trừu tượng phần cứng) cho máy ảnh, API và các phiên bản Các bài kiểm tra Bộ kiểm tra tính tương thích (CTS). Bài viết này cũng đề cập đến một số các thay đổi về cấu 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 nhà cung cấp cập nhật 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 được sử dụng trên trang này:
- API Máy ảnh 1
- Khung máy ảnh ở cấp ứng dụng trên các thiết bị Android 4.4 trở xuống, đã bị lộ
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, đã bị lộ
thông qua gói
android.hardware.camera2
. - Lớp trừu tượng phần cứng (HAL) cho máy ảnh
- Lớp mô-đun máy ảnh do các nhà cung cấp SoC triển khai. Công khai ở cấp ứng dụng các khung được xây dựng dựa trên lớp trừu tượng phần cứng (HAL) của 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 trên Android 4.4.
- Máy ảnh 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
- Tập hợp các thử nghiệm CTS cho máy ảnh chạy trên Máy ảnh API1.
- Máy ảnh API2 CTS
- Bộ thử nghiệm CTS khác cho máy ảnh chạy trên Camera API2.
- Âm bổng
- Tách riêng việc triển khai của nhà cung cấp (phần mềm dành riêng cho thiết bị ở cấp thấp hơn do các nhà sản xuất silicon viết) từ khung hệ điều hành Android thông qua một giao diện nhà cung cấp.
- Phóng điện cường độ cao
- Ngôn ngữ định nghĩa giao diện HAL được giới thiệu với Treble và dùng để chỉ định giao diện giữa HAL và người dùng.
- VTS
- Bộ thử nghiệm dành cho nhà cung cấp được ra mắt cùng với Âm bổng.
API Camera
Android bao gồm các API máy ảnh sau.
API Máy ảnh 1
Camera API1 không được dùng nữa trên Android 5.0 và tiếp tục bị loại bỏ dưới dạng API mới việc phát triển nền tảng tập trung vào Camera API2. Tuy nhiên, giai đoạn loại bỏ sẽ dài, đồng thời các bản phát hành Android sẽ tiếp tục hỗ trợ các ứng dụng API Máy ảnh cho vào một thời điểm nào đó. Cụ thể, chúng tôi sẽ tiếp tục hỗ trợ các sản phẩm sau:
- Giao diện API Máy ảnh 1 cho ứng dụng. Các ứng dụng Máy ảnh được xây dựng dựa trên Máy ảnh API1 sẽ hoạt động như trên các thiết bị chạy các phiên bản phát hành Android thấp hơn.
- Các phiên bản lớp trừu tượng phần cứng (HAL) cho máy ảnh. Bao gồm hỗ trợ cho Máy ảnh HAL1.0.
Camera API2
Khung Camera API2 hiển thị tính năng điều khiển camera ở cấp thấp hơn cho ứng dụng, bao gồm các luồng phát trực tuyến/loạt bản không có bản sao hiệu quả và khả năng kiểm soát theo từng khung hình phơi sáng, tăng độ sáng, tăng cân bằng trắng, chuyển đổi màu, khử nhiễu, làm sắc nét, và nhiều lợi í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 Camera API2; tuy nhiên, thiết bị chạy Android
Phiên bản 5.0 trở lên có thể không hỗ trợ tất cả các tính năng API2 của Máy ảnh. Chiến lược phát hành đĩa đơn
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 hỗ trợ sau
cấp độ:
LEGACY
: Các thiết bị này hiển thị các tính năng với các ứng dụng thông qua Giao diện API2 của Máy ảnh có chức năng gần giống như các giao diện đó hiển thị với các ứng dụng thông qua giao diện API Máy ảnh 1. Mã khung cũ về mặt lý thuyết, dịch các lệnh gọi API Máy ảnh 2 thành lệnh gọi API Máy ảnh 1; 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ư chế độ điều khiển theo từng khung hình.LIMITED
: Các thiết bị này hỗ trợ một số chức năng API2 của Máy ảnh (nhưng không phải tất cả) và phải sử dụng Máy ảnh 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 Máy ảnh 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à tạo ảnh RAW chụp 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ự vớiLIMITED
thiết bị có 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. Cấp độ này được sử dụng cho bên ngoài camera chẳng hạn như webcam USB.
Từng năng lực riêng lẻ được thể hiện thông qua
Thuộc tính android.request.availableCapabilities
trong Camera API2
giao diện. FULL
thiết bị yêu cầu MANUAL_SENSOR
và
MANUAL_POST_PROCESSING
, cùng nhiều tính năng khác. Chiến lược phát hành đĩa đơn
Chức năng RAW
là không bắt buộc ngay cả đối với các thiết bị FULL
.
LIMITED
thiết bị có thể quảng cáo bất kỳ nhóm tính năng nào trong số này,
không có tác vụ 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ư Máy ảnh cụ thể Các chức năng của API2 mà API này hỗ trợ được cung cấp dưới dạng 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ề Bộ xử lý kỹ thuật số (CTS)
Các thiết bị chạy Android 5.0 trở lên phải vượt qua Camera API1 CTS, Camera Kiểm tra máy ảnh API2 CTS và CTS Verifier.
Các thiết bị không triển khai lớp HAL3.2 cho Máy ảnh và không
có khả năng hỗ trợ các giao diện đầy đủ của Camera API2 vẫn phải vượt qua Camera
Kiểm thử API2 CTS. Tuy nhiên, thiết bị chạy trong API Máy ảnh 2
Chế độ LEGACY
(trong đó các lệnh gọi API2 của Máy ảnh được liên kết về mặt khái niệm
đối với lệnh gọi API1 của Máy ảnh), vì vậy, mọi thử nghiệm CTS API2 của Máy ảnh liên quan đến các tính năng hoặc
các tính năng ngoài API Camera1 sẽ tự động bị bỏ qua.
Trên các thiết bị cũ, các chương trình kiểm thử CTS Camera API2 được chạy sẽ sử dụng các giao diện và chức năng công khai hiện có của Camera API1 (API Máy ảnh API1) mà không có các yêu cầu liên quan. Các 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 tại của thiết bị, do đó sẽ ứng dụng Camera API1 hiện có. Chúng tôi dự kiến sẽ không có nhiều lỗi như vậy (tuy nhiên, mọi lỗi như vậy phải được khắc phục để vượt qua bài kiểm tra CTS Camera API2).
Yêu cầu về 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 đưa máy ảnh qua Thử nghiệm VTS.
Làm cứng khung máy ảnh
Để tăng cường bảo mật khung máy ảnh và nội dung nghe nhìn, Android 7.0 di chuyển máy ảnh ra khỏi mediaserver. Kể từ Android 8.0, mỗi Camera liên kết HAL chạy trong một quy trình tách biệt với dịch vụ máy ảnh. Nhà cung cấp có thể cần phải thực hiện những thay đổi trong HAL của máy ảnh tuỳ thuộc vào API và phiên bản HAL đang được sử dụng. Chiến lược phát hành đĩa đơn các phần sau đây mô tả chi tiết những 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 về cấu trúc của API1
Quay video API1 có thể giả định máy ảnh và bộ mã hoá video phát trực tiếp giống nhau của chúng tôi. 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 thì 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 không còn hỗ trợkMetadataBufferTypeCameraSource
7,0).
Thay đổi về cấu trúc của API2
Đối với API2 trên HAL1 hoặc HAL3, BufferQueue sẽ truyền các bộ đệm để các đường dẫn đó tiếp tục để làm việc. 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ó nhà cung cấp nào là cần thiết.
- HAL3 bị ảnh hưởng, nhưng không có bản cập nhật nào của nhà cung cấp cần thiết:
Yêu cầu khác
Các thay đổi về cấu trúc được thực hiện để tăng cường khung nội dung nghe nhìn và máy ảnh bao gồm các yêu cầu bổ sung sau đây về thiết bị.
- Chung. Thiết bị yêu cầu 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 camera có giới hạn thời gian, chẳng hạn như video tốc độ cao
bản ghi. 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à Google Máy ảnh để quay video tốc độ cao 120/240 khung hình/giây. Thiết bị cũng cần có một lượng nhỏ RAM bổ sung để tạo tiến trình mới. - Truyền siêu dữ liệu vào vùng đệm video (chỉ dành cho HAL1). Nếu HAL1
lưu trữ siêu dữ liệu thay vì dữ liệu khung YUV thực trong vùng đệm video, HAL phải
sử dụng
kMetadataBufferTypeNativeHandleSource
làm vùng đệm siêu dữ liệu nhập và truyềnVideoNativeHandleMetadata
vào vùng đệm video. (Android không còn hỗ trợkMetadataBufferTypeCameraSource
7,0). VớiVideoNativeHandleMetadata
, camera 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ỉ xử lý vùng đệm không phải lúc nào cũng lưu trữ cùng một vùng đệm (Chỉ dành cho HAL3). Đối với mỗi yêu cầu chụp, HAL3 nhận địa chỉ của vùng đệm tên người dùng. HAL không thể dùng địa chỉ để xác định vùng đệm vì địa chỉ có thể lưu trữ một tay cầm khác của bộ đệm sau khi HAL trả về bộ đệm. Bạn phải cập nhật HAL để sử dụng tay điều khiển bộ đệm nhằm xác định bộ đệm. Ví dụ: HAL nhận được địa chỉ xử lý vùng đệm A, địa chỉ này lưu trữ tay xử lý vùng đệm A. Sau khi HAL trở lại xử lý bộ đệm A, địa chỉ xử lý bộ đệm A có thể lưu trữ xử lý bộ đệm B trong lần tiếp theo HAL nhận được thông tin này.
- Cập nhật các chính sách SELinux cho máy chủ máy ảnh. Nếu các chính sách SELinux dành riêng cho thiết bị cấp quyền mediaserver để chạy máy ảnh, bạn phải cập nhật các chính sách SELinux để cấp quyền thích hợp cho máy chủ camera. T4 không khuyến khích sao chép chính sách SELinux của mediaserver cho cameraserver (vì máy chủ đa 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 ). Máy chủ camera chỉ nên có các quyền cần thiết để thực hiện thao tác trên máy ảnh cũng như mọi quyền không cần thiết liên quan đến camera trong máy chủ đa phương tiện cần được xóa.
- Phân tách giữa HAL của máy ảnh và máy chủ máy ảnh. của Android 8.0 trở lên cũng tách riêng lớp trừu tượng phần cứng (HAL) liên kết cho máy ảnh trong một quy trình khác với máy chủ máy ảnh. IPC có thể sử dụng 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 bằng cách chạy Android 7.0 CTS. 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, các chương trình kiểm thử CTS hiện có không thành công nếu bạn chưa cập nhật theo các bước 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 việc triển khai nhà cung cấp bằng cách chạy VTS.
Nhật ký phiên bản HAL (Lớp trừu tượng phần cứng) cho máy ảnh
Để biết danh sách các bài kiểm thử dùng để đánh giá lớp trừu tượng phần cứng (HAL) cho máy ảnh Android, hãy xem Kiểm thử lớp trừu tượng phần cứng (HAL) cho máy ảnh Danh sách kiểm tra.
Android 10
Android 10 ra mắt các bản cập nhật sau đây.
Camera API
- Các điểm cải tiến về nhiều camera cho phép camera vật lý được sử dụng riêng lẻ hoặc qua camera logic tương ứng bằng cách ẩn mã nhận dạng camera vật lý. Xem Hỗ trợ nhiều máy ảnh.
- Khả năng kiểm tra xem một cấu hình phiên cụ thể có đang
được hỗ trợ mà không mất chi phí hiệu suất khi tạo phiên mới.
Xem
CameraDevice
. - Khả năng truy xuất cấu hình luồng được đề xuất cho một mục đích sử dụng nhất định
giúp máy khách tiết kiệm điện năng và hoạt động hiệu quả hơn. Xem
getRecommendedStreamConfigurationMap
. - Hỗ trợ cho định dạng hình ảnh JPEG sâu. Để biết thêm chi tiết, hãy xem Thông số kỹ thuật về Độ sâu động.
- Hỗ trợ cho Định dạng hình ảnh HEIC. Xem Ảnh HEIF.
- Cải tiến về quyền riêng tư. Ứng dụng khách yêu cầu phải có một số khoá nhất định
để có
Các quyền
CAMERA
trước khi có thể lấy từ đóCameraCharacteristics
. XemgetKeysNeedingPermission
.
Lớp trừu tượng phần cứng (HAL) cho máy ảnh
Các phiên bản lớp trừu tượng phần cứng (HAL) cho máy ảnh sau đây được cập nhật trong Android 10.
3,5
ICameraDevice
-
getPhysicalCameraCharacteristics
: Thông tin về máy ảnh tĩnh cho mã nhận dạng máy ảnh thực tế dựa trên logic thiết bị máy ảnh. Xem Hỗ trợ nhiều máy ảnh. isStreamCombinationSupported
: Phương thức này hỗ trợ một tệp công khai API giúp ứng dụng truy vấn xem có cấu hình phiên được hỗ trợ hay không. 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 quá trình phát trực tiếp đã hoàn tất hay chưa bạn bắt buộc phải định cấu hình lại cho các giá trị thông số phiên mới có thể có. Chiến dịch này giúp tránh sự chậm trễ không cần thiết khi định cấu hình lại máy ảnh. Xem Truy vấn cấu hình lại phiên. - HAL (Lớp trừu tượng phần cứng)
API quản lý vùng đệm: Các API này cho phép lớp trừu tượng phần cứng (HAL) của máy ảnh yêu cầu
các vùng đệm từ khung máy ảnh chỉ khi được yêu cầu thay vì ghép nối từng vùng đệm
chụp yêu cầu cùng với vùng đệm liên kết trong suốt quy trình của máy ảnh,
dẫn đến khả năng tiết kiệm bộ nhớ đáng kể.
-
signalStreamFlush
: Báo hiệu cho HAL (Lớp trừu tượng phần cứng) rằng camera dịch vụ sắp thực hiệnconfigureStreams_3_5
và điều đó HAL phải trả về tất cả vùng đệm của luồng được chỉ định. -
configureStreams_3_5
: Tương tự nhưICameraDevice3.4.configureStreams
, nhưng trong Ngoài ra, bộ đếmstreamConfigCounter
được cung cấp cho kiểm tra một tình huống tương tranh giữaconfigureStreams_3_5
vàsignalStreamFlush
cuộc gọi.
-
Nội dung cập nhật đối với ICameraDeviceCallback
:
-
requestStreamBuffers
: Lệnh gọi lại đồng bộ mà HAL của máy ảnh gọi để yêu cầu máy chủ máy ảnh vùng đệm. XemrequestStreamBuffers
. -
returnStreamBuffers
: Lệnh gọi lại đồng bộ cho HAL của máy ảnh để trả về vùng đệm đầu ra về máy chủ camera. XemreturnStreamBuffers
.
3,4
Các khoá sau được thêm vào siêu dữ liệu của 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 về camera
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ị của thuộc tính
ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
khoá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 máy ảnh
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 HAL (Lớp trừu tượng phần cứng) cho máy ảnh khi những thay đổi về vật lý, chẳng hạn như gập, ảnh hưởng đến máy ảnh và định tuyến.
2,4
- 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 bản cập nhật sau cho API2 của máy ảnh và Giao diện HAL.
Camera API
- Ra mắt API nhiều máy ảnh để hỗ trợ tốt hơn cho các thiết bị có các máy ảnh hướng theo cùng một hướng để bật các tính năng như hiệu ứng bokeh và thu phóng liền mạch. Quyền 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 (máy ảnh logic). Bạn cũng có thể gửi yêu cầu chụp cho từng người thiết bị camera bao gồm một camera logic. Xem Hỗ trợ nhiều máy ảnh.
- Ra mắt các tham số phiên. Thông số phiên là một tập hợp con của các tham số thu thập có sẵn có thể gây chậm trễ nghiêm trọng cho quá trình xử lý khi sửa đổi. Các 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 khi khởi chạy phiên chụp. Xem Thông số phiên.
- Thêm các khoá dữ liệu ổn định quang học (OIS) để ổn định cấp ứng dụng và
các hiệu ứng. Xem
STATISTICS_OIS_SAMPLES
. - Thêm hỗ trợ flash bên ngoài. Xem
CONTROL_AE_MODE_ON_EXTERNAL_FLASH
. - Thêm ý định theo dõi chuyển động trong
CAPTURE_INTENT
. XemCONTROL_CAPTURE_INTENT_MOTION_TRACKING
. - Không dùng
LENS_RADIAL_DISTORTION
nữa và các tiện ích bổ sungLENS_DISTORTION
. - Thêm các chế độ chỉnh méo hình vào
CaptureRequest
. XemDISTORTION_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 đối với ICameraDeviceSession
-
configureStreams_3_4
: Thêm tính năng hỗ trợ chosessionParameters
và camera logic. -
processCaptureRequest_3_4
: Bổ sung tính năng hỗ trợ việc thêm mã nhận dạng máy ảnh vật lý vào cấu trúc luồng nội dung.
Nội dung cập nhật đối với ICameraDeviceCallback
-
processCaptureResult_3_4
: Thêm siêu dữ liệu của camera thực vào kết quả chụp.
3,3
Các khoá sau được thêm vào siêu dữ liệu của máy ảnh trong Android 9.
- Chức 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 về camera
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, lớp trừu tượng phần cứng (HAL) cho máy ảnh của nhà cung cấp các cách triển khai phải 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 nền tảng
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.
Nền tảng dùng chung
Tính năng này chỉ cho phép một tập hợp bộ đệm điều khiển hai đầu ra, chẳng hạn như bản xem trước và mã hoá video, giúp giảm mức tiêu thụ điện năng và bộ nhớ. Người nhận hỗ trợ tính năng này, nhà sản xuất thiết bị cần phải đảm bảo lớp trừu tượng phần cứng (HAL) cho máy ảnh Việc triển khai HAL gralloc có thể tạo vùng đệm gralloc được sử dụng bởi nhiều khách hàng khác nhau (chẳng hạn như nhà soạn nhạc/GPU phần cứng và video bộ mã hoá), thay vì chỉ một người tiêu dùng. Dịch vụ máy ảnh truyền tham số gắn cờ thông tin sử dụng của người tiêu dùng đến HAL (Lớp trừu tượng phần cứng) của máy ảnh và HAL (Lớp trừu tượng phần cứng) gralloc; họ cần phân bổ đúng loại vùng đệm hoặc HAL của máy ảnh cần trả về lỗi tổ hợp người tiêu dùng này không được hỗ trợ.
Xem
enableSurfaceSharing
tài liệu dành cho nhà phát triển để biết thêm 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 2 chế độ hoạt động: thông thường và hạn chế
ghi hình tốc độ cao. Chúng có ngữ nghĩa khá khác nhau; ví dụ:
chế độ tốc độ cao giới hạn tối đa hai đầu ra cụ thể cùng lúc. Nhiều người đóng góp
OEM đã thể hiện sự quan tâm đến việc xác định các chế độ tuỳ chỉnh khác cho
các khả năng dành riêng cho phần cứng. Về sau, chế độ 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 lệnh gọi API hệ thống mà các ứng dụng máy ảnh của OEM có thể 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ởi số nguyên này được truyền đến HAL trên configuration_streams, sau đó có ứng dụng máy ảnh tuỳ chỉnh của họ sử dụng API hệ thống.
Tên phương thức là
android.hardware.camera2.CameraDevice#createCustomCaptureSession
.
Hãy xem:
frameworks/base/core/java/android/hardware/camera2/CameraDevice
.
onCaptureQueueEmpty (Trống hàng đợi)
Mục đích của API này là giảm độ trễ của những thay đổi về quyền kiểm soát, chẳng hạn như thu phóng
giữ cho hàng đợi yêu cầu càng trống càng tốt. onCaptureQueueEmpty
không yêu cầu hoạt động HAL; nó chỉ đơn thuần là một yếu tố bổ sung phía khung. Ứng dụng
muốn tận dụng điều này, bạn cần thêm một trình nghe vào lệnh gọi lại đó và phản hồi
một cách phù hợp. Thông thường, đó là bằng cách gửi một yêu cầu chụp khác đến máy ảnh
thiết bị.
Giao diện HIDL của máy ảnh
Giao diện HIDL của Máy ảnh là một bản nâng cấp hoàn chỉnh giao diện HAL (Lớp trừu tượng phần cứng) cho máy ảnh sử dụng API được xác định bởi HIDL ổn định. Tất cả tính năng và chức năng của 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áy ảnh mô-đun) cũng là một phần của định nghĩa HIDL.
3.4
Bổ sung nhỏ cho siêu dữ liệu được hỗ trợ và thay đổi đối với khả năng hỗ trợ data_space:
- Thêm siêu dữ liệu tĩnh
ANDROID_SENSOR_OPAQUE_RAW_SIZE
làm siêu dữ liệu bắt buộc nếu định dạngRAW_OPAQUE
được hỗ trợ. - Thêm
ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
tĩnh là bắt buộc nếu có bất kỳ định dạng RAW nào được hỗ trợ. - Chuyển trường
camera3_stream_t data_space
thành trường linh hoạt hơn , sử dụng định nghĩa phiên bản 0 của mã hoá không gian dữ liệu. - Bổ sung siêu dữ liệu chung có sẵn để 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:
- Cập nhật API tái xử lý OPAQUE và YUV.
- Hỗ trợ cơ bản cho vùng đệm đầu ra theo độ 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 cho cấu hình luồng camera3 cho
camera3_stream_configuration_t
.
3.2
Sửa đổi nhỏ HAL (Lớp trừu tượng phần cứng) có khả năng mở rộng:
- Không dùng
get_metadata_vendor_tag_ops
nữa. Sử dụng Thay vào đó,get_vendor_tag_ops
bằngcamera_common.h
. - Không dùng
register_stream_buffers
nữa. Tất cả vùng đệm gralloc do khung cho HAL (Lớp trừu tượng phần cứng) trongprocess_capture_request
cung cấp có thể là thông tin 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ác kết quả có sẵn trước khi đầy đủ có kết quả. - Thêm mẫu thủ công vào
camera3_request_template
. Chiến dịch Quảng cáo ứng dụng có thể sử dụng mẫu này để trực tiếp kiểm soát chế độ cài đặt chụp. - Sửa lại thông số kỹ thuật của luồng đầu vào và 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
Sửa đổi nhỏ HAL (Lớp trừu tượng phần cứng) có khả năng mở rộng:
configure_streams
truyền các cờ sử dụng của người dùng đến HAL.- lệnh gọi xả nước để 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 lớp trừu tượng phần cứng (HAL) có chức năng mở rộng:
- Thay đổi lớn về phiên bản do ABI hoàn toàn khác. Không có thay đổi đối với khả năng phần cứng hoặc mô hình hoạt động cần thiết từ phiên bản 2.0.
- Giao diện hàng đợi luồng và yêu cầu đầu vào được làm lại: Các lệnh gọi khung vào HAL với yêu cầu tiếp theo và vùng đệm luồng đã được đưa vào hàng đợi. Hỗ trợ khung đồng bộ hoá đề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à toàn bộ chế độ thiết lập
vào một lệnh gọi
initialize()
duy nhất. - Đã chuyển cấu hình sự kiện phát trực tiếp thành một lệnh gọi duy nhất để đơn giản hoá việc quản lý sự kiện phát trực tiếp.
Luồng hai chiều thay thế
STREAM_FROM_STREAM
cấu trúc. - Ngữ nghĩa chế độ giới hạn dành cho các thiết bị phần cứng cũ/bị hạn chế.
2
Bản phát hành ban đầu của HAL có khả năng mở rộng (Android 4.2) [camera2.h]:
- Đủ để triển khai
android.hardware.Camera
hiện có API. - Cho phép hàng đợi ZSL trong lớp dịch vụ máy ảnh.
- Chưa 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ế độ RAW của Bayer chụp, xử lý lại dữ liệu RAW, v.v.
1.0
HAL máy ảnh Android ban đầu (Android 4.0) [camera.h]:
- Được chuyển đổi từ lớp trừu tượng C++ CameraHardwareInterface.
- Hỗ trợ API
android.hardware.Camera
.
Nhật ký phiên bản mô-đun máy ảnh
Phần này trình bày thông tin về phiên bản mô-đun cho phần cứng Máy ảnh
mô-đun, dựa trên camera_module_t.common.module_api_version
. Hai
số hex có ý nghĩa nhất đại diện cho phiên bản chính và hai số
đáng kể là phiên bản nhỏ.
2.4
Phiên bản mô-đun máy ảnh này thêm các thay đổi sau đây về API:
- Hỗ trợ chế độ đèn pin. Khung này có thể bật chế độ đèn pin cho bất kỳ
thiết bị máy ảnh có bộ đèn flash mà không cần mở thiết bị máy ảnh. Chiến lược phát hành đĩa đơn
thiết bị máy ảnh có mức độ ưu tiên truy cập vào thiết bị flash cao hơn so với máy ảnh
module; mở một thiết bị camera sẽ tắt đèn pin nếu thiết bị đó đã đượ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ở một 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 đèn pin bị tắt. - Hỗ trợ camera bên ngoài (ví dụ: camera có giắc cắm nóng qua USB). Chiến lược phát hành đĩa đơn
Các bản cập nhật API cho biết thông tin tĩnh của camera chỉ có sẵn khi camera đang bật
được kết nối và sẵn sàng sử dụng cho các camera có phích cắm nóng bên ngoài. Gọi để lấy dữ liệu tĩnh
thông tin là các cuộc gọi không hợp lệ khi trạng thái của camera không phải
CAMERA_DEVICE_STATUS_PRESENT
. Khung này chỉ dựa trên 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 hiện có. - Gợi ý về trọng tài thông qua máy ảnh. Thêm hỗ trợ cho việc 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. Người nhận
chỉ định các tổ hợp thiết bị hợp lệ,
resource_cost
và Trườngconflicting_devices
phải luôn được đặt trong phần tử Cấu trúccamera_info
doget_camera_info
trả về . - Phương thức khởi tạo mô-đun. Dịch vụ camera đã gọi sau khi tải mô-đun HAL để 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ị lớp trừu tượng phần cứng (HAL) cho máy ảnh cũ.
Khung này có thể dùng để mở thiết bị máy ảnh dưới dạng phiên bản HAL (Lớp trừu tượng phần cứng) thấp hơn của thiết bị
Thiết bị HAL 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, tức là
cả phiên bản được nêu trong camera_info_t.device_version
.
2.2
Phiên bản mô-đun máy ảnh này bổ sung 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ũ trước đây chỉ
có thể truy cập bằng 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ộ cho phương thức
khung từ mô-đun HAL của máy ảnh, 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. Các mô-đun cung cấp
Phương thức set_callbacks()
phải báo cáo ít nhất số phiên bản này.
2
Những 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ở bằng ứng dụng này
mô-đun có thể hỗ trợ phiên bản 1.0 hoặc phiên bản 2.0 của thiết bị máy ảnh
Giao diện HAL. Trường device_version
của camera_info luôn là
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 số phiên bản này sẽ triển khai ký tự đầu
giao diện HAL (Lớp trừu tượng phần cứng) cho mô-đun máy ảnh. Tất cả thiết bị máy ảnh đều có thể mở bằng tính năng này
mô-đun chỉ hỗ trợ phiên bản 1 của HAL thiết bị máy ảnh. Chiến lược phát hành đĩa đơn
device_version
và static_camera_characteristics
của camera_info
không hợp lệ. Chỉ
Mô-đun này và mô-đun này có thể hỗ trợ android.hardware.Camera
API
thiết bị.