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

Trang này nêu chi tiết những khác biệt về phiên bản trong các thử nghiệm HAL, API của Camera và Bộ kiểm tra khả năng tương thích (CTS) liên quan. Nó cũng bao gồm một số thay đổi về kiến ​​trúc được thực hiện để tăng cường và bảo mật khung camera 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 camera của họ.

Thuật ngữ

Các thuật ngữ 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 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 dựa trên HAL của máy ảnh.
Camera HAL3.1
Phiên bản thiết bị camera HAL được phát hành cùng với Android 4.4.
Camera HAL3.2
Phiên bản thiết bị camera HAL được phát hành cùng với Android 5.0.
API máy ảnh1 CTS
Tập hợp các bài kiểm tra CTS của máy ảnh chạy trên Camera API1.
API máy ảnh2 CTS
Bộ thử nghiệm CTS máy ảnh bổ sung chạy trên Camera API2.
âm cao
Tách biệt việc triển khai của nhà cung cấp (phần mềm cấp thấp hơn, dành riêng cho thiết bị được viết bởi các nhà sản xuất silicon) khỏi khung hệ điều hành Android thông qua giao diện nhà cung cấp mới.
HIDL
Ngôn ngữ định nghĩa giao diện HAL được giới thiệu với Treble và được sử dụng để chỉ định giao diện giữa HAL và người dùng của nó.
VTS
Bộ thử nghiệm của nhà cung cấp được giới thiệu cùng với Treble.

API máy ảnh

Android bao gồm các API máy ảnh sau.

API máy ảnh1

Android 5.0 đã ngừng sử dụng Camera API1, API này 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 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ợ ứng dụng Camera API1 trong một thời gian. Cụ thể, hỗ trợ tiếp tục dành cho:

  • 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 giống như trên các thiết bị chạy phiên bản phát hành Android thấp hơn.
  • Phiên bản máy ảnh HAL. Bao gồm hỗ trợ cho Camera HAL1.0.

API máy ảnh2

Khung API2 của Camera cung cấp 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 phát/truyền phát không sao chép hiệu quả và các điều khiển trên mỗi khung hình về độ phơi sáng, mức tăng, mức tăng cân bằng trắng, chuyển đổi màu, khử nhiễu, làm sắc nét, v.v. Để 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 các khả năng cho ứng dụng thông qua giao diện Camera API2 gần giống với các khả năng được cung cấp cho ứng dụng thông qua giao diện Camera API1. Mã khung kế thừa về mặt khái niệm 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 của Camera API2 như điều khiển theo từng khung hình.
  • LIMITED : Các thiết bị này hỗ trợ một số khả 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 khả 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 thể hiện thông qua thuộc tính android.request.availableCapabilities trong giao diện Camera API2. Các thiết bị FULL yêu cầu khả năng MANUAL_SENSORMANUAL_POST_PROCESSING , cùng với 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ố đó. Tuy nhiên, khả năng BACKWARD_COMPATIBLE phải luôn được xác định.

Cấp độ phần cứng được hỗ trợ của thiết bị cũng như các khả năng cụ thể của Camera API2 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 máy ảnh Camera API1 CTS, Camera API2 CTS và CTS Verifier.

Các thiết bị không triển khai Camera HAL3.2 và không có khả năng hỗ trợ giao diện Camera API2 đầy đủ vẫn phải vượt qua các bài kiểm tra Camera API2 CTS. Tuy nhiên, thiết bị chạy ở chế độ Camera API2 LEGACY (trong đó các lệnh gọi API Camera2 được ánh xạ khái niệm tới các lệnh gọi API Camera1) nên 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 Camera API1 đều 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ử dụng các chức 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 đã lộ ra (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 các ứng dụng Camera API1 hiện có tìm thấy. Chúng tôi dự kiến ​​sẽ không có nhiều lỗi kiểu này (tuy nhiên, mọi lỗi 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 được 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 riêng 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 camera tùy 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 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 kiến ​​trúc cho API1

Việc quay video API1 có thể giả sử 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 .

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

    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 vào 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.)

    Ngăn xếp phương tiện và máy ảnh Android 7.0 trong API1 trên HAL1

    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 :

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

    Hình 3. Ngăn xếp phương tiện và máy ảnh Android 7.0 trong API2 trên HAL3

Các yêu cầu bổ sung

Những thay đổi về kiến ​​trúc được thực hiện để tăng cường bảo mật khung máy ảnh và phương tiện bao gồm các yêu cầu bổ sung về thiết bị sau.

  • 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 Camera để 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.
  • Truyề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ển VideoNativeHandleMetadata trong bộ đệm video. ( kMetadataBufferTypeCameraSource không còn được hỗ trợ trên Android 7.0.) Với VideoNativeHandleMetadata , các 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 tay cầm 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 lấy địa chỉ của các bộ điều khiển bộ đệm. HAL không thể sử dụng địa chỉ để xác định bộ đệm vì địa chỉ có thể lưu trữ một bộ điều khiển bộ đệm khác sau khi HAL trả về bộ đệm. Bạn phải cập nhật HAL để sử dụng các bộ điều khiển bộ đệm nhằm xác định bộ đệm. Ví dụ: HAL nhận được địa chỉ bộ đệm xử lý A, địa chỉ này lưu trữ bộ xử lý bộ đệm A. Sau khi HAL trả về bộ xử lý bộ đệm A, địa chỉ bộ xử lý bộ đệm A có thể lưu bộ xử lý 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 máy ảnh. Nếu các chính sách SELinux dành riêng cho thiết bị cấp cho máy chủ phương tiện 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 máy chủ máy ảnh các quyền thích hợp. Chúng tôi không khuyến khích việc 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). Cameraserver chỉ nên có các quyền cần thiết để thực hiện các chức năng của camera và mọi quyền không cần thiết liên quan đến camera trong mediaserver phải bị xóa.
  • Sự tách biệt giữa Camera HAL và cameraserver. Android 8.0 trở lên cũng tách riêng Camera HAL được liên kết theo 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ó camera và chạy Android 7.0, hãy xác minh việc triển khai bằng cách chạy Android 7.0 CTS. Mặc dù Android 7.0 không bao gồm các thử nghiệm CTS mới nhằm xác minh các thay đổi về dịch vụ camera 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 Camera HAL

Để biết danh sách các thử nghiệm có sẵn nhằm đánh giá HAL của máy ảnh Android, hãy xem Danh sách kiểm tra thử nghiệm 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

Máy ảnh HAL

Các phiên bản Camera HAL sau đây được cập nhật trên 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 thức 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 để kết hợp luồng truy vấn .

ICameraDeviceSession

  • isReconfigurationNeeded : Phương thức cho khung máy ảnh biết liệu có cần cấu hình lại luồng hoàn chỉnh cho các giá trị tham số phiên mới có thể có hay không. Điều này giúp tránh sự chậm trễ khi 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 HAL của máy ảnh chỉ yêu cầu bộ đệm từ khung máy ảnh khi được yêu cầu thay vì ghép từng yêu cầu chụp với bộ đệm liên quan trong toàn bộ quy trình máy ảnh, giúp tiết kiệm bộ nhớ đáng kể.
    • signalStreamFlush : Gửi tín hiệu tới HAL rằng dịch vụ camera sắp thực hiện configureStreams_3_5 và HAL phải trả về tất cả vùng đệ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ộ đếm streamConfigCounter được cung cấp để kiểm tra điều kiện chạy đua giữa các lệnh gọi configureStreams_3_5signalStreamFlush .

Cập nhật cho ICameraDeviceCallback :

  • requestStreamBuffers : Lệnh gọi lại đồng bộ mà HAL của camera gọi để yêu cầu máy chủ camera cung cấp bộ đệm. Xem requestStreamBuffers .
  • returnStreamBuffers : Lệnh gọi lại đồng bộ cho HAL của camera để trả về bộ đệm đầu ra cho máy chủ camera. Xem returnStreamBuffers .

3,4

Các khóa 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
  • 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 cho các thiết bị để thông báo cho máy ảnh HAL khi có những thay đổi vật lý, chẳng hạn như gập, ảnh hưởng đến máy ảnh và việc đị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 về 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 giao diện HAL và API2 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, hỗ trợ các tính năng như hiệu ứng mờ ảo 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 (máy ảnh logic). Yêu cầu chụp cũng có thể được gửi đến các thiết bị camera riêng lẻ được bao bọc bởi một camera logic. Xem Hỗ trợ nhiều camera .
  • Giới thiệu các tham số phiên. Tham số phiên là tập hợp con của các tham số chụp có sẵn có thể gây ra sự chậm trễ xử lý nghiêm trọng khi được sửa đổi. Những chi phí này có thể được giảm thiểu nếu khách hàng vượt qua 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 khóa dữ liệu chống rung quang học (OIS) để ổn định ở cấp ứng dụng và tạo 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 mục đích theo dõi chuyển động vào CAPTURE_INTENT . Xem CONTROL_CAPTURE_INTENT_MOTION_TRACKING .
  • Không dùng LENS_RADIAL_DISTORTION và thêm LENS_DISTORTION vào vị trí của nó.
  • Thêm các chế độ sửa méo trong CaptureRequest . Xem DISTORTION_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

Cập nhật cho ICameraDeviceCallback

3.3

Các khóa 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 ràng buộc chặt chẽ . Android 8.0 cũng chứa 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ộ 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, 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ụ máy ảnh chuyển cờ sử dụng của người tiêu dùng tới máy ảnh HAL và gralloc HAL; họ cần phân bổ đúng loại bộ đệm hoặc HAL máy ảnh cần trả về lỗi mà sự kết hợp của người tiêu dùng này không được hỗ trợ.

Xem tài liệu dành cho nhà phát triển enableSurfaceSharing để biết thêm chi tiết.

API hệ thống cho các chế độ máy ảnh tùy chỉnh

API camera công cộng xác định hai chế độ hoạt động: ghi tốc độ cao bình thường và hạn chế. Chúng có ngữ nghĩa khá khác nhau; ví dụ: chế độ tốc độ cao 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ế độ tùy chỉnh khác cho các khả năng dành riêng cho phần cứng. Dưới mui xe, chế độ này chỉ là một số nguyên được truyền cho 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ế độ sau này đượ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 đó yêu cầu ứng dụng máy ảnh tùy chỉnh của họ sử dụng API hệ thống.

Tên phương thức là android.hardware.camera2.CameraDevice#createCustomCaptureSession . Xem: frameworks/base/core/java/android/hardware/camera2/CameraDevice .

onCaptureQueueEmpty

Mục đích của API này là giảm độ trễ của các thay đổi kiểm soát như thu phóng bằng cách giữ cho hàng đợi yêu cầu trống nhất có thể. onCaptureQueueEmpty không yêu cầu công việc HAL; nó hoàn toàn là một sự bổ sung phía khung. Các ứng dụng muốn tận dụng lợi thế của nó cần phải thêm trình lắng 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 tới thiết bị máy ảnh.

Giao diện HIDL của máy ảnh

Giao diện Camera HIDL là bản cải tiến hoàn chỉnh của giao diện Camera HAL sử dụng các API ổn định do HIDL xác định. Tất cả các tính năng và khả năng của máy ảnh được giới thiệu trong các phiên bản cũ 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

Những bổ sung nhỏ cho siêu dữ liệu được hỗ trợ và những thay đổi đối với hỗ trợ data_space:

  • Thêm siêu dữ liệu tĩnh ANDROID_SENSOR_OPAQUE_RAW_SIZE làm bắt buộc nếu định dạng RAW_OPAQUE được hỗ trợ.
  • Thêm siêu dữ liệu tĩnh ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE làm 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.
  • Các bổ sung siêu dữ liệu chung có sẵn để sử dụng cho HALv3.2 hoặc mới hơn:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

Bản sửa đổi nhỏ của HAL khả năng mở rộng:

  • Cập nhật API tái xử lý OPAQUE và YUV.
  • Hỗ trợ cơ bản cho bộ đệm đầu ra độ sâu.
  • Bổ sung trường data_space vào camera3_stream_t .
  • Bổ sung trường xoay vào camera3_stream_t .
  • Bổ sung chế độ hoạt động cấu hình luồng camera3 vào camera3_stream_configuration_t .

3.2

Bản sửa đổi nhỏ của HAL khả năng mở rộng:

  • Không dùng nữa get_metadata_vendor_tag_ops . Thay vào đó hãy sử dụng get_vendor_tag_ops trong camera_common.h .
  • Không dùng nữa register_stream_buffers . Tất cả các bộ đệm gralloc được khung cung cấp cho HAL trong process_capture_request có thể mới bất kỳ lúc nào.
  • Thêm hỗ trợ kết quả một phần. process_capture_result có thể được gọi nhiều lần với một tập hợp con các kết quả có sẵn trước khi có kết quả đầy đủ.
  • Thêm mẫu thủ công vào camera3_request_template . Các ứng dụng có thể sử dụng mẫu này để kiểm soát trực tiếp cài đặt chụp.
  • Làm lại các thông số kỹ thuật của luồng đầu vào và hai chiều.
  • Thay đổi đường dẫn trả về bộ đệm đầu vào. Bộ đệm được trả về trong process_capture_result thay vì process_capture_request .

3.1

Bản sửa đổi nhỏ của HAL khả năng mở rộng:

  • configure_streams chuyển cờ sử dụng của người tiêu dùng tới HAL.
  • lệnh gọi tuôn ra để loại bỏ tất cả các yêu cầu/bộ đệm trong chuyến bay càng nhanh càng tốt.

3.0

Bản sửa đổi đầu tiên của HAL khả năng mở rộng:

  • Thay đổi phiên bản chính vì ABI hoàn toàn khác. Không có thay đổi nào về khả năng phần cứng hoặc mô hình hoạt động được yêu cầu từ phiên bản 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 đã được 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 lệnh 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 được 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 ảnh 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) [máy ảnh.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 có ý nghĩa nhất đại diện cho phiên bản chính và hai chữ số ít quan trọng nhất đại diện cho phiên bản phụ.

2.4

Phiên bản mô-đun máy ảnh này bổ sung thêm các thay đổi API sau:

  1. Hỗ trợ chế độ đèn pin. Khung có thể bật chế độ đèn pin cho bất kỳ thiết bị máy ảnh nào có bộ đè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 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ị camera, mô-đun HAL của camera 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.
  2. Hỗ trợ camera ngoài (ví dụ: camera 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 cuộc gọi để nhận thông tin tĩnh là các cuộc gọi không hợp lệ khi trạng thái camera không phải là CAMERA_DEVICE_STATUS_PRESENT . Khung này chỉ tính 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 camera bên ngoài có sẵn.
  3. Gợi ý trọng tài bằng camera. Thêm hỗ trợ để chỉ rõ số lượng thiết bị camera có thể được mở và sử dụng đồng thời. Để chỉ định các kết hợp thiết bị hợp lệ, các trường resource_cost conflicting_devices phải luôn được đặt trong cấu trúc camera_info được trả về bởi lệnh gọi get_camera_info .
  4. Phương pháp khởi tạo mô-đun. Được dịch vụ camera gọi sau khi tải mô-đun HAL để 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ũ. Khung có thể sử dụng nó để mở thiết bị máy ảnh dưới dạng thiết bị HAL phiên bản HAL thấp hơn nếu cùng một thiết bị có thể hỗ trợ nhiều phiên bản API thiết bị. Cuộc 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 thêm tính năng hỗ trợ thẻ nhà cung cấp từ mô-đun này và không dùng nữa vendor_tag_query_ops cũ mà trước đây chỉ có thể truy cập được khi thiết bị đang mở.

2.1

Phiên bản mô-đun máy ảnh này bổ sung hỗ trợ cho các cuộc gọi lại không đồng bộ vào 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

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 mô-đun máy ảnh. Các thiết bị máy ảnh có thể mở được thông qua mô-đun này có thể hỗ trợ phiên bản 1.0 hoặc phiên bản 2.0 của giao diện HAL của thiết bị máy ảnh. Trường device_version của camera_info luôn hợp lệ; trường static_camera_characteristics của camera_info hợp lệ nếu trường device_version là 2.0 trở lên.

1.0

Các mô-đun máy ảnh báo cáo các số phiên bản này triển khai giao diện HAL của mô-đun máy ảnh ban đầu. Tất cả các thiết bị máy ảnh có thể mở được thông qua mô-đun này chỉ hỗ trợ phiên bản 1 của thiết bị máy ảnh HAL. Các trường device_versionstatic_camera_characteristics của camera_info không hợp lệ. Chỉ API android.hardware.Camera có thể được hỗ trợ bởi mô-đun này và các thiết bị của nó.