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

Trang này trình bày chi tiết về sự khác biệt về phiên bản trong HAL, API của máy ảnh và các bài kiểm thử Bộ kiểm thử tính tương thích (CTS) liên quan. Tài liệu này cũng đề cập đến một số thay đổi về cấu trúc được thực hiện để tăng cường và bảo mật khung máy ảnh trong Android 7.0, chuyển sang Treble trong Android 8.0 và các bản cập nhật mà nhà cung cấp phải thực hiện để hỗ trợ những thay đổi này trong quá trình triển khai máy ảnh.

Thuật ngữ

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

Camera API1
Khung máy ảnh cấp ứng dụng trên các thiết bị chạy Android 4.4 trở xuống, được hiển thị thông qua lớp android.hardware.Camera.
Camera API2
Khung máy ảnh ở cấp ứng dụng trên các thiết bị Android 5.0 trở lên, được hiển thị thông qua gói android.hardware.camera2.
HAL máy ảnh
Lớp mô-đun máy ảnh do nhà cung cấp SoC triển khai. Các khung công khai ở cấp ứng dụng được xây dựng dựa trên lớp trừu tượng phần cứng (HAL) cho máy ảnh.
Máy ảnh HAL3.1
Phiên bản HAL của thiết bị máy ảnh được phát hành cùng với Android 4.4.
Camera HAL3.2
Phiên bản HAL của thiết bị máy ảnh được phát hành cùng với Android 5.0.
Camera API1 CTS
Bộ kiểm thử CTS của máy ảnh chạy trên Camera API1.
Camera API2 CTS
Bộ kiểm thử CTS bổ sung cho máy ảnh chạy trên Camera API2.
Âm bổng
Tách biệt hoạt động triển khai của nhà cung cấp (phần mềm cấp thấp, dành riêng cho thiết bị do nhà sản xuất silicon viết) khỏi khung Hệ điều hành Android thông qua giao diện nhà cung cấp mới.
HIDL
Ngôn ngữ định nghĩa giao diện HAL được ra mắt bằng Treble và dùng để chỉ định giao diện giữa HAL và người dùng.
VTS
Bộ thử nghiệm của nhà cung cấp được ra mắt cùng với Treble.

API máy ảnh

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

Camera API1

Camera API1 không được dùng nữa trên Android 5.0. API này tiếp tục bị loại bỏ khi hoạt động phát triển nền tảng mới tập trung vào Camera API2. Tuy nhiên, thời gian ngừng sử dụng sẽ kéo dài và các bản phát hành Android sẽ tiếp tục hỗ trợ các ứng dụng Camera API1 trong một thời gian. Cụ thể, chúng tôi vẫn tiếp tục hỗ trợ:

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

Camera API2

Khung Camera API2 hiển thị chức năng điều khiển máy ảnh cấp thấp hơn cho ứng dụng, bao gồm cả các luồng chụp liên tục/truyền trực tuyến không sao chép hiệu quả và các chế độ điều khiển theo khung hình về độ phơi sáng, độ lợi, độ lợi cân bằng trắng, chuyển đổi màu, loại bỏ nhiễu, làm sắc nét và nhiều chế độ khác. Để biết thông tin chi tiết, hãy xem video tổng quan về Google I/O.

Android 5.0 trở lên bao gồm API Camera 2. Tuy nhiên, các thiết bị chạy Android 5.0 trở lên có thể không hỗ trợ tất cả các tính năng API Máy ảnh 2. Thuộc tính android.info.supportedHardwareLevel mà các ứng dụng có thể truy vấn thông qua giao diện Camera API2 báo cáo một trong các cấp độ hỗ trợ sau:

  • LEGACY: Các thiết bị này hiển thị các chức năng cho ứng dụng thông qua giao diện Camera API2 có chức năng gần giống với các chức năng hiển thị cho ứng dụng thông qua giao diện Camera API1. Về mặt khái niệm, mã khung cũ dịch các lệnh gọi Camera API2 thành các lệnh gọi Camera API1; các thiết bị cũ không hỗ trợ các tính năng Camera API2 như các chế độ điều khiển trên mỗi khung hình.
  • LIMITED: Các thiết bị này hỗ trợ một số tính năng của Camera API2 (nhưng không phải tất cả) và phải sử dụng Camera HAL 3.2 trở lên.
  • FULL: Các thiết bị này hỗ trợ tất cả các tính năng chính của Camera API2 và phải sử dụng Camera HAL 3.2 trở lên và Android 5.0 trở lên.
  • LEVEL_3: Các thiết bị này hỗ trợ quá trình xử lý lại YUV và chụp hình ảnh ở định dạng RAW, cùng với các cấu hình luồng đầu ra bổ sung.
  • EXTERNAL: Các thiết bị này tương tự như thiết bị LIMITED, ngoại trừ một số trường hợp; ví dụ: một số thông tin về cảm biến hoặc ống kính có thể không được báo cáo hoặc có tốc độ khung hình kém ổn định hơn. Cấp này được dùng cho các camera bên ngoài, chẳng hạn như webcam USB.

Các chức năng riêng lẻ được hiển thị thông qua thuộc tính android.request.availableCapabilities trong giao diện Camera API2. Các thiết bị FULL yêu cầu các chức năng MANUAL_SENSORMANUAL_POST_PROCESSING, cùng với các chức năng khác. Khả năng RAW là không bắt buộc ngay cả đối với các thiết bị FULL. Thiết bị LIMITED có thể quảng cáo bất kỳ tập hợp con nào trong số các chức năng này, bao gồm cả việc không quảng cáo chức năng nào. Tuy nhiên, bạn phải luôn xác định chức năng BACKWARD_COMPATIBLE.

Cấp phần cứng được hỗ trợ của thiết bị, cũng như các chức năng Camera API2 cụ thể mà thiết bị hỗ trợ, có sẵn dưới dạng các cờ tính năng sau đây để cho phép Google Play lọc các ứng dụng máy ảnh Camera API2.

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

Yêu cầu về CTS

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

Các thiết bị không triển khai Camera HAL3.2 và không thể hỗ trợ đầy đủ giao diện Camera API2 vẫn phải vượt qua các bài kiểm thử CTS Camera API2. Tuy nhiên, thiết bị chạy ở chế độ LEGACY của Camera API2 (về mặt lý thuyết, các lệnh gọi API Camera API2 được ánh xạ đến các lệnh gọi API Camera API1). Do đó, mọi bài kiểm thử CTS API2 của Camera API liên quan đến các tính năng hoặc chức năng ngoài API của Máy ảnh 1 đều tự động bị bỏ qua.

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

Yêu cầu về VTS

Các thiết bị chạy Android 8.0 trở lên có phương thức triển khai HAL liên kết phải vượt qua bài kiểm thử VTS cho ứng dụng Máy ảnh.

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

Để tăng cường bảo mật khung hình ảnh và nội dung nghe nhìn, Android 7.0 sẽ di chuyển dịch vụ máy ảnh ra khỏi mediaserver. Kể từ Android 8.0, mỗi HAL máy ảnh được liên kết sẽ chạy trong một quy trình riêng biệt với dịch vụ máy ảnh. Các nhà cung cấp có thể cần thực hiện thay đổi trong HAL (Lớp trừu tượng phần cứng) của máy ảnh tuỳ thuộc vào API và phiên bản HAL đang sử dụng. Các phần sau đây trình bày chi tiết về các thay đổi về cấu trúc trong AP1 và AP2 cho HAL1 và HAL3, cũng như các yêu cầu chung.

Thay đổi về cấu trúc cho API1

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

  • HAL3, trong đó dịch vụ máy ảnh sử dụng BufferQueue để truyền vùng đệm giữa các quy trình, không cần cập nhật nhà cung cấp.

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

    Hình 1. Ngăn xếp máy ảnh và nội dung đa phương tiện của Android 7.0 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 7.0 không còn hỗ trợ kMetadataBufferTypeCameraSource.)

    Ngăn xếp máy ảnh và nội dung đa phương tiện của Android 7.0 trong API1 trên HAL1

    Hình 2. Ngăn xếp máy ảnh và nội dung đa phương tiện của Android 7.0 trong API1 trên HAL1

Thay đổi về cấu trúc cho API2

Đối với API2 trên HAL1 hoặc HAL3, BufferQueue sẽ truyền các vùng đệm để các đường dẫn đó tiếp tục hoạt động. Cấu trúc Android 7.0 cho API2 trên:

  • HAL1 không chịu ảnh hưởng của việc di chuyển cameraservice và không cần cập nhật nhà cung cấp.
  • HAL3 bị ảnh hưởng, nhưng không cần cập nhật nhà cung cấp:

    Ngăn xếp nội dung nghe nhìn và máy ảnh Android 7.0 trong API2 trên HAL3

    Hình 3. Ngăn xếp máy ảnh và nội dung đa phương tiện của Android 7.0 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 bảo mật khung hình ảnh và nội dung nghe nhìn bao gồm các yêu cầu bổ sung sau đây đối với thiết bị.

  • Chung. Các thiết bị cần thêm băng thông do IPC, điều này có thể ảnh hưởng đến các trường hợp sử dụng máy ảnh nhạy cảm với thời gian, chẳng hạn như quay video tốc độ cao. Nhà cung cấp có thể đo lường mức tác động thực tế bằng cách chạy android.hardware.camera2.cts.PerformanceTest và ứng dụng Google Camera để quay video tốc độ cao 120/240 khung hình/giây. Các thiết bị cũng cần thêm một lượng nhỏ RAM để tạo quy trình mới.
  • Chuyển siêu dữ liệu trong vùng đệm video (chỉ HAL1). Nếu HAL1 lưu trữ siêu dữ liệu thay vì dữ liệu khung hình YUV thực trong vùng đệm video, thì HAL phải sử dụng kMetadataBufferTypeNativeHandleSource làm loại vùng đệm siêu dữ liệu và truyền VideoNativeHandleMetadata trong vùng đệm video. (kMetadataBufferTypeCameraSource không còn được hỗ trợ trên Android 7.0.) Với VideoNativeHandleMetadata, máy ảnh và khung nội dung đa phương tiện có thể truyền vùng đệm video giữa các quy trình bằng cách chuyển đổi tuần tự và giải tuần tự các ô điều khiển gốc đúng cách.
  • Địa chỉ tay điều khiển bộ đệm không phải lúc nào cũng lưu trữ cùng một bộ đệm (chỉ HAL3). Đối với mỗi yêu cầu chụp, HAL3 nhận địa chỉ của các trình xử lý vùng đệm. HAL không thể sử dụng địa chỉ để xác định vùng đệm vì địa chỉ có thể lưu trữ một tay xử lý vùng đệm khác sau khi HAL trả về vùng đệm. Bạn phải cập nhật HAL để sử dụng tay điều khiển vùng đệm nhằm xác định vùng đệm. Ví dụ: HAL nhận được địa chỉ tay điều khiển vùng đệm A, địa chỉ này lưu trữ tay điều khiển vùng đệm A. Sau khi HAL trả về ô điều khiển bộ đệm A, địa chỉ của ô xử lý vùng đệm A có thể lưu trữ ô điều khiển bộ đệm B vào lần tiếp theo HAL nhận được ô đó.
  • Cập nhật chính sách SELinux cho cameraserver. Nếu các chính sách SELinux dành riêng cho thiết bị cấp cho mediaserver quyền chạy máy ảnh, bạn phải cập nhật các chính sách SELinux để cấp cho cameraserver các quyền thích hợp. Bạn không nên sao chép các chính sách SELinux của mediaserver cho cameraserver (vì mediaserver và cameraserver thường yêu cầu các tài nguyên khác nhau trong hệ thống). Máy chủ máy ảnh chỉ nên có các quyền cần thiết để thực hiện các chức năng của máy ảnh và mọi quyền không cần thiết liên quan đến máy ảnh trong máy chủ nội dung nghe nhìn sẽ bị xoá.
  • Phân tách giữa Camera HAL và cameraserver. Ngoài ra, Android 8.0 trở lên còn tách biệt HAL máy ảnh được liên kết trong một quy trình khác với máy chủ máy ảnh. IPC đi qua các giao diện do HIDL xác định.

Xác nhận kết quả

Đối với tất cả thiết bị có máy ảnh và chạy Android 7.0, hãy xác minh quá trình triển khai bằng cách chạy CTS Android 7.0. Mặc dù Android 7.0 không bao gồm các chương trình kiểm thử CTS mới xác minh các thay đổi về dịch vụ máy ảnh, nhưng các chương trình kiểm thử CTS hiện tại sẽ không thành công nếu bạn chưa thực hiện các bản cập nhật nêu trên.

Đối với tất cả thiết bị có máy ảnh và chạy Android 8.0 trở lên, hãy xác minh cách triển khai của nhà cung cấp bằng cách chạy VTS.

Nhật ký phiên bản HAL cho máy ảnh

Để biết danh sách các bài kiểm thử có sẵn để đánh giá HAL Máy ảnh Android, hãy xem Danh sách kiểm tra kiểm thử HAL máy ảnh.

Android 10

Android 10 ra mắt các bản cập nhật sau.

Camera API

HAL máy ảnh

Các phiên bản HAL (Lớp trừu tượng phần cứng) cho máy ảnh sau đây đã được cập nhật trong Android 10.

3,5

ICameraDevice

  • getPhysicalCameraCharacteristics: Thông tin máy ảnh tĩnh cho mã máy ảnh thực tế sao lưu thiết bị máy ảnh logic. Xem phần Hỗ trợ nhiều camera.
  • isStreamCombinationSupported: Phương thức này hỗ trợ một API công khai giúp ứng dụng truy vấn nếu cấu hình phiên được hỗ trợ. Xem API để truy vấn các tổ hợp luồng.

ICameraDeviceSession

  • isReconfigurationNeeded: Phương thức cho khung máy ảnh biết liệu có bắt buộc phải định cấu hình lại luồng hoàn chỉnh cho các giá trị tham số phiên mới có thể có hay không. Điều này giúp tránh tình trạng chậm trễ không cần thiết khi định cấu hình lại máy ảnh. Xem Truy vấn định cấu hình lại phiên.
  • API quản lý vùng đệm HAL: Các API này cho phép HAL của máy ảnh yêu cầu vùng đệm từ khung máy ảnh khi cần thay vì ghép nối từng yêu cầu chụp ảnh với các vùng đệm liên kết trong toàn bộ quy trình của máy ảnh, nhờ đó có thể tiết kiệm đáng kể bộ nhớ.
    • signalStreamFlush: Báo hiệu cho HAL rằng dịch vụ máy ảnh sắp thực hiện configureStreams_3_5 và HAL phải trả về tất cả bộ đệm của các luồng được chỉ định.
    • configureStreams_3_5: Tương tự như ICameraDevice3.4.configureStreams, nhưng ngoài ra, bộ đếm streamConfigCounter được cung cấp để kiểm tra điều kiện tương tranh giữa các lệnh gọi configureStreams_3_5signalStreamFlush.

Nội dung cập nhật đối với ICameraDeviceCallback:

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

3.4

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

  • Định dạng hình ảnh
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • Thẻ siêu dữ liệu của máy ảnh
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • Chức năng
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • Giá trị cho khoá ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • Các cấu hình luồng độ sâu động hiện có
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • Các cấu hình luồng HEIC hiện có
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

Mô-đun camera

Các phiên bản mô-đun máy ảnh sau đây được cập nhật trong Android 10.

2,5

  • Thêm phương thức notifyDeviceStateChange để các thiết bị thông báo cho HAL máy ảnh khi các thay đổi về mặt vật lý (chẳng hạn như gập lại) ảnh hưởng đến máy ảnh và định tuyến.

2.4

  • Các thiết bị chạy bằng API cấp 29 trở lên PHẢI báo cáo true cho isTorchModeSupported.

Android 9

Bản phát hành Android 9 giới thiệu các nội dung cập nhật sau đây cho giao diện API2 và HAL của máy ảnh.

Camera API

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

Nội dung cập nhật cho ICameraDeviceCallback

3,3

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

  • Tính năng
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • Thẻ siêu dữ liệu của máy ảnh
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

Android 8.0

Bản phát hành Android 8.0 giới thiệu Treble. Với Treble, các hoạt động triển khai Camera HAL của nhà cung cấp phải được liên kết. Android 8.0 cũng chứa các tính năng nâng cao quan trọng sau đây cho dịch vụ Máy ảnh:

  • Các nền tảng dùng chung: Cho phép nhiều nền tảng chia sẻ cùng một OutputConfiguration
  • API hệ thống cho các chế độ máy ảnh tuỳ chỉnh
  • onCaptureQueueEmpty

Xem các phần bên dưới để biết thêm thông tin về những tính năng này.

Bề mặt dùng chung

Tính năng này chỉ cho phép một bộ đệm điều khiển hai đầu ra, chẳng hạn như xem trước và mã hoá video, giúp giảm mức tiêu thụ điện năng và bộ nhớ. Để hỗ trợ tính năng này, nhà sản xuất thiết bị cần đảm bảo rằng việc triển khai HAL (Lớp trừu tượng phần cứng) cho máy ảnh và HALloc Dịch vụ máy ảnh truyền cờ sử dụng của người tiêu dùng đến HAL máy ảnh và HAL gralloc; họ cần phân bổ các loại vùng đệm phù hợp hoặc HAL của máy ảnh cần trả về một lỗi mà tổ hợp đối tượng tiêu dùng không được hỗ trợ.

Hãy xem tài liệu dành cho nhà phát triển enableSurfaceSharing để biết thêm thông tin chi tiết.

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

API máy ảnh công khai xác định hai chế độ hoạt động: quay video tốc độ cao bình thường và bị hạn chế. Các chế độ này có ngữ nghĩa khá khác nhau; ví dụ: chế độ tốc độ cao bị giới hạn ở tối đa hai đầu ra cụ thể cùng một lúc. Nhiều OEM bày tỏ sự quan tâm đến việc xác định các chế độ tuỳ chỉnh khác cho các tính năng dành riêng cho phần cứng. Về cơ bản, chế độ này chỉ là một số nguyên được truyền đến configure_streams. Hãy xem: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams.

Tính năng này bao gồm một lệnh gọi API hệ thống mà các ứng dụng máy ảnh của OEM có thể sử dụng để bật chế độ tuỳ chỉnh. Các chế độ này phải bắt đầu ở giá trị số nguyên 0x8000 để tránh xung đột với các chế độ trong tương lai được thêm vào API công khai.

Để hỗ trợ tính năng này, OEM chỉ cần thêm chế độ mới vào HAL, được kích hoạt bằng số nguyên này được truyền đến HAL trên configuration_streams, sau đó để ứng dụng máy ảnh tuỳ chỉnh sử dụng API hệ thống.

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

onCaptureQueueEmpty

Mục đích của API này là giảm độ trễ của các thay đổi về chế độ điều khiển như thu phóng bằng cách giữ cho hàng đợi yêu cầu trống càng nhiều càng tốt. onCaptureQueueEmpty không yêu cầu hoạt động HAL; đây chỉ là một hoạt động bổ sung phía khung. Những ứng dụng muốn tận dụng tính năng này cần thêm trình nghe vào lệnh gọi lại đó và phản hồi một cách thích hợp. Thường thì việc này được thực hiện bằng cách gửi một yêu cầu chụp khác đến thiết bị máy ảnh.

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

Giao diện HIDL của máy ảnh là một bản sửa đổi toàn diện của giao diện HAL của máy ảnh sử dụng các API do HIDL xác định ổn định. Tất cả tính năng và chức năng máy ảnh được giới thiệu trong các phiên bản cũ gần đây nhất 3.4 và 2.4 (dành cho mô-đun máy ảnh) cũng là một phần của định nghĩa HIDL.

3.4

Các điểm bổ sung nhỏ đối với siêu dữ liệu được hỗ trợ và thay đổi đối với tính năng hỗ trợ data_space:

  • Thêm siêu dữ liệu tĩnh ANDROID_SENSOR_OPAQUE_RAW_SIZE làm phần bắt buộc nếu định dạng RAW_OPAQUE được hỗ trợ.
  • Thêm siêu dữ liệu tĩnh ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE làm siêu dữ liệu bắt buộc nếu định dạng RAW nào được hỗ trợ.
  • Chuyển trường camera3_stream_t data_space sang định nghĩa linh hoạt hơn bằng cách sử dụng định nghĩa phiên bản 0 của quá trình mã hoá không gian dữ liệu.
  • Các phần bổ sung siêu dữ liệu chung có thể sử dụng cho HALv3.2 trở lên:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

Sửa đổi nhỏ HAL (Lớp trừu tượng phần cứng) có khả năng mở rộng:

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

3.2

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

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

3.1

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

  • configure_streams truyền cờ sử dụng của người dùng đến HAL.
  • xoá lệnh gọi để loại bỏ tất cả yêu cầu/bộ đệm đang diễn ra nhanh nhất có thể.

3

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

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

2

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

  • Đủ để triển khai API android.hardware.Camera hiện có.
  • Cho phép hàng đợi ZSL trong lớp dịch vụ máy ảnh.
  • Chưa thử nghiệm bất kỳ tính năng mới nào như điều khiển chụp thủ công, chụp Bayer RAW, xử lý lại dữ liệu RAW, v.v.

1.0

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

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

Nhật ký phiên bản mô-đun camera

Phần này chứa thông tin về phiên bản mô-đun cho mô-đun phần cứng Máy ảnh, dựa trên camera_module_t.common.module_api_version. Hai chữ số hex có ý nghĩa nhất đại diện cho phiên bản chính và hai chữ số có ý nghĩa nhỏ nhất đại diện cho phiên bản nhỏ.

2.4

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

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

2.3

Phiên bản mô-đun máy ảnh này bổ sung tính năng hỗ trợ thiết bị HAL máy ảnh cũ. Khung có thể sử dụng khung này để mở thiết bị máy ảnh dưới dạng thiết bị HAL phiên bản HAL (HAL) cho thiết bị nếu cùng một thiết bị có thể hỗ trợ nhiều phiên bản API thiết bị. Lệnh gọi mở mô-đun phần cứng tiêu chuẩn (common.methods->open) tiếp tục mở thiết bị máy ảnh có phiên bản được hỗ trợ mới nhất. Đây cũng là phiên bản được liệt kê trong camera_info_t.device_version.

2.2

Phiên bản mô-đun máy ảnh này thêm tính năng hỗ trợ thẻ nhà cung cấp từ mô-đun và ngừng sử dụng vendor_tag_query_ops cũ mà trước đây chỉ có thể truy cập khi thiết bị đang mở.

2.1

Phiên bản mô-đun máy ảnh này hỗ trợ thêm các lệnh gọi lại không đồng bộ vào khung từ mô-đun HAL (Lớp trừu tượng phần cứng) của máy ảnh. Mô-đun này dùng để thông báo cho khung về những thay đổi đối với trạng thái mô-đun máy ảnh. Các mô-đun cung cấp phương thức set_callbacks() hợp lệ phải báo cáo ít nhất số phiên bản này.

2

Các mô-đun máy ảnh báo cáo số phiên bản này sẽ triển khai phiên bản thứ hai của giao diện HAL (Lớp trừu tượng phần cứng) cho mô-đun máy ảnh. Các thiết bị máy ảnh có thể mở thông qua mô-đun này có thể hỗ trợ phiên bản 1.0 hoặc phiên bản 2.0 của giao diện HAL của thiết bị máy ảnh. Trường device_version của camera_info luôn hợp lệ; trường static_camera_characteristics của camera_info hợp lệ nếu trường device_version là 2.0 trở lên.

1.0

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