Hỗ trợ phiên bản máy ảnh

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ới LIMITED 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_SENSORMANUAL_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.

    Máy ảnh và nội dung nghe nhìn trên Android 7.0
ngăn xếp trong API1 trên HAL3

    Hình 1. Máy ảnh và nội dung nghe nhìn trên Android 7.0 ngăn xếp trong API1 trên HAL3

  • 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).

    Máy ảnh và nội dung nghe nhìn trên Android 7.0
ngăn xếp trong API1 trên HAL1

    Hình 2. Máy ảnh và nội dung nghe nhìn trên Android 7.0 ngăn xếp trong API1 trên HAL1

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:

    Máy ảnh Android 7.0 và
ngăn xếp phương tiện trong API2 trên HAL3

    Hình 3. Máy ảnh và nội dung nghe nhìn trên Android 7.0 ngăn xếp trong API2 trên HAL3

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ền VideoNativeHandleMetadata vào vùng đệm video. (Android không còn hỗ trợ kMetadataBufferTypeCameraSource 7,0). Với VideoNativeHandleMetadata, 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

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ện configureStreams_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ộ đếm streamConfigCounter được cung cấp cho kiểm tra một tình huống tương tranh giữa configureStreams_3_5signalStreamFlush 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. Xem requestStreamBuffers.
  • 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. Xem returnStreamBuffers.

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 cho isTorchModeSupported.

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. Xem CONTROL_CAPTURE_INTENT_MOTION_TRACKING.
  • Không dùng LENS_RADIAL_DISTORTION nữa và các tiện ích bổ sung LENS_DISTORTION.
  • Thêm các chế độ chỉnh méo hình vào CaptureRequest. Xem DISTORTION_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ợ cho sessionParameters 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

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ạng RAW_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ào camera3_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ằng camera_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) trong process_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:

  1. 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.
  2. 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ó.
  3. 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ường conflicting_devices phải luôn được đặt trong phần tử Cấu trúc camera_info do get_camera_info trả về .
  4. 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_versionstatic_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ị.