Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

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

Trang này chi tiết khác biệt phiên bản trong Hals Camera, API, và liên quan đến Compatibility Test Suite (CTS) kiểm tra. Nó cũng bao gồm một số thay đổi về kiến ​​trúc được thực hiện để làm 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 nhà cung cấp bản cập nhật phải thực hiện để hỗ trợ những thay đổi này trong việc triển khai máy ảnh của họ.

Thuật ngữ

Các thuật ngữ sau được sử dụng trên trang này:

API máy ảnh1
Khung máy ảnh ứng dụng cấp trên Android 4.4 trở xuống thiết bị, tiếp xúc qua android.hardware.Camera lớp.
API máy ảnh2
Khung máy ảnh ứng dụng cấp trên Android 5.0 và các thiết bị cao hơn, tiếp xúc qua android.hardware.camera2 gói.
Máy ảnh HAL
Lớp mô-đun camera do các nhà cung cấp SoC triển khai. Khung công khai cấp ứng dụng được xây dựng trên đầu máy ảnh HAL.
Máy ảnh HAL3.1
Phiên bản của thiết bị máy ảnh HAL được phát hành với Android 4.4.
Máy ảnh HAL3.2
Phiên bản của thiết bị máy ảnh HAL được phát hành với Android 5.0.
API máy ảnh1 CTS
Tập hợp các bài kiểm tra CTS máy ảnh chạy trên Camera API1.
Camera API2 CTS
Bộ kiểm tra CTS camera bổ sung chạy trên Camera API2.
Treble
Tách việc triển khai nhà cung cấp (phần mềm cấp thấp hơn, 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
HAL ngôn ngữ định nghĩa giao diện giới thiệu với Treble và dùng để xác định giao diện giữa một HAL và người sử dụng của nó.
VTS
Bộ kiểm tra nhà cung cấp 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 không dùng nữa API máy ảnh1, tiếp tục bị loại bỏ khi phát triển nền tảng mới tập trung vào API máy ảnh2. Tuy nhiên, giai đoạn loại bỏ sẽ kéo dài và các bản phát hành Android sẽ tiếp tục hỗ trợ các ứng dụng Camera API1 trong một thời gian. Cụ thể, hỗ trợ tiếp tục cho:

  • Giao diện API1 máy ảnh cho ứng dụng. Ứng dụng máy ảnh được xây dựng trên Camera API1 sẽ hoạt động như trên các thiết bị chạy phiên bản phát hành Android thấp hơn.
  • Các phiên bản camera HAL. Bao gồm hỗ trợ cho Camera HAL1.0.

API máy ảnh2

Khung API2 của Máy ảnh cho thấy khả năng kiểm soát máy ảnh cấp thấp hơn cho ứng dụng, bao gồm các luồng liên tục / phát trực tuyến không sao chép hiệu quả và các điều khiển trên mỗi khung hình về độ phơi sáng, độ lợi, độ tăng cân bằng trắng, chuyển đổi màu sắc, làm mờ, làm sắc nét và hơn thế nữa. Để biết chi tiết, xem Google I / O tổng quan qua video .

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 Camera API2. Các android.info.supportedHardwareLevel tài sản đó ứng dụng có thể truy vấn thông qua các giao diện máy ảnh API2 báo cáo một trong những mức hỗ trợ như sau:

  • LEGACY : Các thiết bị tiếp xúc với khả năng để ứng dụng thông qua các giao diện API2 Máy ảnh có xấp xỉ khả năng tương tự như những người tiếp xúc với các ứng dụng thông qua các giao diện máy ảnh API1. Mã khung kế thừa chuyển các lệnh gọi Camera API2 thành lệnh gọi Camera API1; các 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ư đ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 camera API2 (nhưng không phải tất cả) và phải sử dụng máy ảnh HAL 3.2 hoặc cao hơn.
  • FULL : Các thiết bị này hỗ trợ tất cả các khả năng chính của máy ảnh 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ợ YUV tái chế và chụp ảnh RAW, cùng với thêm cấu hình dòng đầu ra.
  • EXTERNAL : Các thiết bị này tương tự như LIMITED thiết bị với một số trường hợp 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 máy ảnh bên ngoài như webcam USB.

Khả năng cá nhân được tiếp xúc qua android.request.availableCapabilities tài sản trong giao diện máy ảnh API2. FULL các thiết bị yêu cầu MANUAL_SENSORMANUAL_POST_PROCESSING khả năng, trong số những người khác. Các RAW khả năng là không bắt buộc ngay cả đối với FULL thiết bị. LIMITED thiết bị có thể quảng cáo bất kỳ tập hợp con của những khả năng, trong đó có ai trong số họ. Tuy nhiên, BACKWARD_COMPATIBLE khả năng phải luôn 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 Camera API2 cụ thể mà nó hỗ trợ, có sẵn dưới dạng các cờ tính năng sau để cho phép Google Play lọc các ứng dụng máy ảnh Camera API2.

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

Yêu cầu CTS

Các thiết bị chạy Android 5.0 trở lên phải vượt qua các bài kiểm tra camera API1 CTS, Camera API2 CTS và CTS Verifier.

Các thiết bị không có 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, chạy thiết bị trong máy ảnh API2 LEGACY chế độ (trong đó các cuộc gọi Máy ảnh API2 được khái niệm ánh xạ tới các cuộc gọi Máy ảnh API1) vì vậy bất kỳ máy ảnh API2 CTS kiểm tra liên quan đến các tính năng hoặc khả năng vượt Máy ảnh API1 sẽ được tự động bỏ qua.

Trên các thiết bị cũ, các bài kiểm tra CTS của Camera API2 đang chạy sử dụng các giao diện và khả năng của Camera API1 công cộng hiện có mà không có yêu cầu mới. Các lỗi bị lộ (và gây ra lỗi Camera API2 CTS) là các lỗi đã có trong Camera HAL hiện có của thiết bị và do đó sẽ được tìm thấy bởi các ứng dụng Camera API1 hiện có. Chúng tôi không mong đợi có nhiều lỗi như vậy (tuy nhiên, bất kỳ lỗi nào như vậy phải được sửa để vượt qua các bài kiểm tra Camera API2 CTS).

Yêu cầu của VTS

Thiết bị chạy Android 8.0 và cao hơn với việc triển khai HAL binderized phải vượt qua Camera kiểm tra VTS .

Làm cứng khung máy ảnh

Để tăng cường bảo mật khung máy ảnh và phương tiện, Android 7.0 chuyển dịch vụ máy ảnh ra khỏi máy chủ trung gian. Bắt đầu với Android 8.0, mỗi Camera HAL liên kết sẽ chạy trong một quy trình tách biệt với dịch vụ camera. Các nhà cung cấp có thể cần thực hiện các thay đổi trong HAL của máy ảnh tùy thuộc vào phiên bản API và HAL đang sử dụng. Các phần sau trình bày chi tiết các thay đổi về kiến ​​trúc trong AP1 và AP2 đối với HAL1 và HAL3, cũng như các yêu cầu chung.

Thay đổi kiến ​​trúc cho API1

Tính năng quay video API1 có thể giả sử máy ảnh và bộ mã hóa video hoạt động trong cùng một quá trình. Khi sử dụng API1 trên:

  • HAL3, nơi dịch vụ máy ảnh sử dụng BufferQueue để vượt qua vùng đệm giữa các quá trình, không cập nhật nhà cung cấp là cần thiết.

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

    Hình 1. Android 7.0 camera và phương tiện truyền thông ngăn xếp trong API1 trên HAL3

  • HAL1, mà hỗ trợ qua siêu dữ liệu trong bộ đệm video, các 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.)

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

    Hình 2. Android 7.0 camera và phương tiện truyền thông ngăn xếp 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 các 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 động thái này cameraservice, và không cập nhật nhà cung cấp là cần thiết.
  • HAL3 bị ảnh hưởng, nhưng không có bản cập nhật nhà cung cấp là 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. Android 7.0 camera và phương tiện truyền thông ngăn xếp 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 cho 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 đây.

  • Tổng quan. Các thiết bị yêu cầu băng thông bổ sung do IPC, điều này có thể ảnh hưởng đến các trường hợp sử dụng camera nhạy cảm với thời gian 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 Camera Google cho 120/240 FPS quay video tốc độ cao. 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.
  • Vượt qua siêu dữ liệu trong bộ đệm video (chỉ HAL1). Nếu cửa hàng HAL1 siêu dữ liệu thay vì dữ liệu khung YUV thực sự trong bộ đệm video, HAL phải sử dụng kMetadataBufferTypeNativeHandleSource như các loại đệm siêu dữ liệu và vượt qua VideoNativeHandleMetadata trong bộ đệm video. ( kMetadataBufferTypeCameraSource không còn được hỗ trợ trên Android 7.0.) Với VideoNativeHandleMetadata , máy ảnh và phương tiện truyền thông các khuôn khổ có thể vượt qua các video tải giữa các quá trình bằng cách tuần tự và deserializing tay cầm có nguồn gốc đúng cách.
  • Đệm xử lý địa chỉ không phải lúc nào 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 chốt điều khiển bộ đệm. HAL không thể sử dụng các địa chỉ để xác định bộ đệm vì các địa chỉ có thể lưu trữ một xử lý bộ đệm khác sau khi HAL trả về bộ đệm. Bạn phải cập nhật HAL để sử dụng các chốt điều khiển bộ đệm để xác định các bộ đệm. Ví dụ, HAL nhận địa chỉ xử lý bộ đệm A, địa chỉ này lưu trữ xử lý bộ đệm A. Sau khi HAL trả về xử lý bộ đệm A, địa chỉ xử lý bộ đệm A có thể lưu trữ xử lý bộ đệm B vào lần tiếp theo HAL nhận được.
  • Cập nhật chính sách SELinux cho cameraerver. Nếu các chính sách SELinux dành riêng cho thiết bị cung cấp quyền cho máy chủ trung gian để chạy máy ảnh, thì bạn phải cập nhật các chính sách SELinux để cấp cho máy chủ máy ảnh quyền thích hợp. Chúng tôi không khuyến khích sao chép các chính sách SELinux của máy chủ trung gian cho máy chủ quay phim (vì máy chủ trung gian và máy chủ quay phim thường yêu cầu các tài nguyên khác nhau trong hệ thống). Máy chủ camera 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 trình trung gian sẽ bị xóa.
  • Ngăn cách giữa Camera HAL và cameraerver. Android 8.0 trở lên cũng tách biệt Camera HAL liên kết trong một quy trình khác với cameraerver. IPC đi qua HIDL định nghĩa giao diện.

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 bài kiểm tra CTS mới để xác minh các thay đổi của dịch vụ máy ảnh, các bài kiểm tra CTS hiện có không thành công nếu bạn chưa thực hiện các bản cập nhật được chỉ ra ở 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 HAL của máy ảnh

Đối với một danh sách kiểm tra có sẵn để đánh giá máy ảnh của Android HAL, xem ảnh HAL Testing Danh sách kiểm tra .

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 trong Android 10.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : Thông tin máy ảnh tĩnh cho một ID camera vật lý sao lưu một thiết bị camera logic. Xem Multi-Máy ảnh hỗ trợ .
  • isStreamCombinationSupported : Phương pháp này hỗ trợ API công cộng để giúp khách hàng truy vấn nếu một cấu hình phiên được hỗ trợ. Xem API để kết hợp dòng truy vấn .

ICameraDeviceSession

  • isReconfigurationNeeded : Phương pháp mà nói với khuôn khổ camera liệu hoàn chỉnh cấu hình lại dòng là cần thiết cho khả năng giá trị tham số phiên làm việc mới. Điều này giúp tránh sự chậm trễ cấu hình lại máy ảnh không cần thiết. Xem phiên truy vấn cấu hình lại .
  • HAL API quản lý bộ đệm : Những API cho phép HAL camera để yêu cầu bộ đệm từ khuôn khổ camera chỉ khi có yêu cầu thay vì kết hợp với nhau theo yêu cầu chụp với bộ đệm liên quan của nó trong suốt đường ống máy ảnh, kết quả là tiết kiệm bộ nhớ có khả năng đáng kể.
    • signalStreamFlush : Tín hiệu cho HAL rằng dịch vụ camera là về để thực hiện configureStreams_3_5 và rằng HAL phải trả lại toàn bộ bộ đệm của dòng được chỉ định.
    • configureStreams_3_5 : Tương tự như ICameraDevice3.4.configureStreams , nhưng ngoài ra, streamConfigCounter truy cập được cung cấp để kiểm tra một điều kiện cuộc đua giữa configureStreams_3_5signalStreamFlush cuộc gọi.

Cập nhật cho ICameraDeviceCallback :

  • requestStreamBuffers : callback Synchronous rằng camera HAL gọi để hỏi máy chủ camera cho bộ đệm. Xem requestStreamBuffers .
  • returnStreamBuffers : callback Synchronous cho HAL camera để quay trở lại bộ đệm đầu ra đến máy chủ camera. Xem returnStreamBuffers .

3,4

Các phím sau được thêm vào siêu dữ liệu máy ảnh trong Android 10.

  • Định dạng hình ảnh
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • Thẻ siêu dữ liệu máy ảnh
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • Năng lực
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • Giá trị cho các ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT chủ chốt
    • 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 có sẵn
    • 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 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 notifyDeviceStateChange phương pháp cho các thiết bị thông báo cho HAL camera khi có thay đổi về thể chất, chẳng hạn như gấp, ảnh hưởng đến máy ảnh và định tuyến.

2,4

  • Thiết bị tung ra với mức API 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 giao diện camera API2 và HAL.

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 quay theo cùng một hướng, cho phép các tính năng như bokeh 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ị như một đơn vị logic (camera logic). Yêu cầu chụp cũng có thể được gửi đến các thiết bị camera riêng lẻ được bao bọc bởi một camera logic. Xem Multi-Máy ảnh hỗ trợ .
  • Giới thiệu các thông số phiên. Tham số phiên là một tập hợp con của các tham số chụp có sẵn có thể gây ra sự chậm trễ xử lý nghiêm trọng khi được sửa đổi. Các chi phí này có thể được giảm nhẹ nếu khách hàng chuyển các giá trị ban đầu của họ trong quá trình khởi tạo phiên chụp. Xem phiên Parameters .
  • Thêm các phím dữ liệu ổn định quang học (OIS) để ổn định cấp ứng dụng và hiệu ứng. Xem STATISTICS_OIS_SAMPLES .
  • Thêm hỗ trợ đèn flash bên ngoài. Xem CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • Thêm một chuyển động theo dõi mục tiêu trong CAPTURE_INTENT . Xem CONTROL_CAPTURE_INTENT_MOTION_TRACKING .
  • Deprecates LENS_RADIAL_DISTORTION và thêm LENS_DISTORTION vào chỗ của nó.
  • Thêm chế độ chỉnh méo trong CaptureRequest . Xem DISTORTION_CORRECTION_MODE .
  • Thêm 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 .

Máy ảnh HAL

3,4

Cập nhật cho ICameraDeviceSession

Cập nhật cho ICameraDeviceCallback

3,3

Các phím sau được thêm vào siêu dữ liệu máy ảnh trong Android 9.

  • Năng lực
    • 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, nhà cung cấp máy ảnh HAL triển khai phải được binderized . Android 8.0 cũng có những cải tiến quan trọng đối với dịch vụ Máy ảnh:

  • Chia sẻ các bề mặt: Cho phép nhiều bề mặt chia sẻ cùng 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.

Các bề mặt được chia sẻ

Tính năng này chỉ cho phép một bộ đệm để điều khiển hai đầu ra, chẳng hạn như xem trước và mã hóa video, giúp giảm mức tiêu thụ bộ nhớ và điện năng. Để hỗ trợ tính năng này, các nhà sản xuất thiết bị cần đảm bảo việc triển khai HAL của máy ảnh và gralloc HAL 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 tổng hợp phần cứng / GPU và bộ mã hóa video), thay vì chỉ một người tiêu dùng. Dịch vụ camera chuyển các cờ sử dụng của người tiêu dùng tới camera HAL và gralloc HAL; họ cần phân bổ các loại bộ đệm phù hợp hoặc máy ảnh HAL cần trả về lỗi mà tổ hợp người tiêu dùng này không được hỗ trợ.

Xem enableSurfaceSharing tài liệu nhà phát triển để 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 được giới hạn cho nhiều nhất 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ế độ chỉ là một số nguyên 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ế độ 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ủ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 pháp 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 càng trống càng tốt. onCaptureQueueEmpty không yêu cầu phải làm việc HAL; nó hoàn toàn là một bổ sung bên khung. Các ứng dụng muốn tận dụng lợi thế của nó cần phải thêm một người nghe vào cuộc gọi lại đó và phản hồi một cách thích hợp. Nói chung, đó là bằng cách gửi một yêu cầu chụp khác đến thiết bị máy ảnh.

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

Giao diện Camera HIDL là một bản đại tu hoàn chỉnh của giao diện Camera HAL sử dụng các API ổn định do HIDL xác định. Tất cả các tính năng và khả năng của máy ảnh được giới thiệu trong các phiên bản kế thừa gần đây nhất 3.4 và 2.4 (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 bổ sung nhỏ đối với siêu dữ liệu được hỗ trợ và các thay đổi đối với hỗ trợ data_space:

  • Thêm ANDROID_SENSOR_OPAQUE_RAW_SIZE tĩnh siêu dữ liệu như là bắt buộc nếu RAW_OPAQUE định dạng được hỗ trợ.
  • Thêm ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE tĩnh siêu dữ liệu như là bắt buộc nếu có định dạng RAW được hỗ trợ.
  • Chuyển camera3_stream_t data_space trường để một định nghĩa linh hoạt hơn, bằng cách sử dụng định nghĩa phiên bản 0 mã hóa dataspace.
  • 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 xử lý lại OPAQUE và YUV.
  • Hỗ trợ cơ bản cho bộ đệm đầu ra độ sâu.
  • Bổ sung các data_space trường để camera3_stream_t .
  • Bổ sung các lĩnh vực luân phiên để camera3_stream_t .
  • Bổ sung các chế độ hoạt động camera3 cấu hình dòng để camera3_stream_configuration_t .

3.2

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

  • Deprecates get_metadata_vendor_tag_ops . Sử dụng get_vendor_tag_ops trong camera_common.h để thay thế.
  • Deprecates register_stream_buffers . Tất cả các bộ đệm gralloc cung cấp bởi khuôn khổ để HAL trong process_capture_request có thể mới bất cứ 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 các kết quả có sẵn trước khi kết quả đầy đủ có sẵn.
  • Thêm mẫu sổ tay để camera3_request_template . Các ứng dụng có thể sử dụng mẫu này để kiểm soát cài đặt chụp trực tiếp.
  • Làm lại các thông số kỹ thuật luồng đầu vào và hai chiều.
  • Thay đổi đường dẫn trả về bộ đệm đầu vào. Các 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 đi cờ sử dụng của người tiêu dùng với HAL.
  • tuôn ra cuộc gọi để loại bỏ tất cả các yêu cầu / bộ đệm trên chuyến bay nhanh nhất có thể.

3.0

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

  • Thay đổi phiên bản chính kể từ ABI là hoàn toàn khác nhau. Không có thay đổi đối với các khả năng phần cứng được yêu cầu hoặc mô hình hoạt động từ 2.0.
  • Yêu cầu đầu vào được làm lại và giao diện hàng đợi luồng: Framework gọi vào HAL với yêu cầu tiếp theo và bộ đệm luồng đã được xếp lại hàng. Hỗ trợ khung đồng bộ hóa được bao gồm, cần thiết để triển khai hiệu quả.
  • Đã chuyển kích hoạt thành các yêu cầu, hầu hết các thông báo thành kết quả.
  • Củng cố tất cả các callbacks vào khung thành một cấu trúc, và tất cả các phương pháp thiết lập thành một đơn initialize() gọi.
  • Đã tạo cấu hình luồng thành một cuộc gọi duy nhất để đơn giản hóa việc quản lý luồng. Suối hai chiều thay thế STREAM_FROM_STREAM xây dựng.
  • Ngữ nghĩa chế độ hạn chế cho các thiết bị phần cứng cũ hơn / hạn chế.

2.0

Bản phát hành đầu tiên của HAL khả năng mở rộng (Android 4.2) [camera2.h]:

  • Đủ để thực hiện hiện android.hardware.Camera API.
  • Cho phép hàng đợi ZSL trong lớp dịch vụ máy ảnh.
  • Không được kiểm tra 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

Máy ảnh Android ban đầu HAL (Android 4.0) [camera.h]:

  • Được chuyển đổi từ lớp trừu tượng CameraHardwareInterface của C ++.
  • Hỗ trợ android.hardware.Camera API.

Lịch sử phiên bản mô-đun máy ảnh

Phần này bao gồm thông tin phiên bản mô-đun cho các module phần cứng Camera, 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 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ó đèn flash mà không cần mở thiết bị máy ảnh. Thiết bị máy ảnh có quyền ưu tiên truy cập đơn vị đèn flash cao hơn so với mô-đun máy ảnh; mở thiết bị camera sẽ tắt đèn pin nếu nó đã được bật thông qua giao diện mô-đun. Khi có bất kỳ xung đột tài nguyên, chẳng hạn như open() được gọi để mở một thiết bị camera, mô-đun HAL camera phải thông báo cho khung thông qua chế độ ngọn đuốc tình trạng gọi lại rằng chế độ ngọn đuốc đã được tắt.
  2. 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ỉ khả dụng khi máy ảnh được kết nối và sẵn sàng sử dụng cho máy ảnh cắm nóng bên ngoài. Các cuộc gọi đến nhận được thông tin tĩnh những cuộc gọi không hợp lệ khi tình trạng máy ảnh không phải là CAMERA_DEVICE_STATUS_PRESENT . Khung chỉ dựa vào các cuộc gọi lại thay đổi trạng thái thiết bị để quản lý danh sách camera bên ngoài có sẵn.
  3. Gợi ý trọng tài camera. Thêm hỗ trợ cho biết rõ ràng số lượng thiết bị camera có thể được mở và sử dụng đồng thời. Để xác định kết hợp hợp lệ của thiết bị, resource_costconflicting_devices lĩnh vực nên luôn luôn đặt trong camera_info cấu trúc được trả về bởi các get_camera_info gọi.
  4. Phương thức khởi tạo mô-đun. Dịch vụ camera gọi sau khi mô-đun HAL được tải để cho phép khởi chạy 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 kế thừa mở. Khung có thể sử dụng nó để mở thiết bị camera dưới dạng thiết bị HAL phiên bản HAL thấp hơn nếu cùng một thiết bị có thể hỗ trợ nhiều phiên bản API thiết bị. Cuộc gọi mở module phần cứng tiêu chuẩn ( common.methods->open ) tiếp tục mở các thiết bị máy ảnh với các phiên bản hỗ trợ mới nhất, mà 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 cho biết thêm thẻ hỗ trợ nhà cung cấp từ các mô-đun, và deprecates cũ vendor_tag_query_ops mà trước đây chỉ có thể với một mở thiết bị.

2.1

Phiên bản mô-đun máy ảnh này bổ sung hỗ trợ cho các lệnh gọi lại không đồng bộ đến khung từ mô-đun HAL của máy ảnh, được sử 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. Module cung cấp một giá trị set_callbacks() phương pháp bắt buộc 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 mô-đun máy ảnh HAL. 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. Các device_version lĩnh vực camera_info luôn có hiệu lực; các static_camera_characteristics lĩnh vực camera_info là hợp lệ nếu device_version lĩnh vực là 2.0 hoặc cao hơ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 device_versionstatic_camera_characteristics lĩnh vực camera_info không hợp lệ. Chỉ android.hardware.Camera API có thể được hỗ trợ bởi mô-đun này và các thiết bị của mình.