Cấu hình luồng

Android bao gồm các tính năng cho phép ứng dụng máy ảnh chọn luồng máy ảnh tối ưu cho các trường hợp sử dụng cụ thể và đảm bảo rằng thiết bị máy ảnh hỗ trợ một số tổ hợp luồng nhất định. Cấu hình luồng đề cập đến một luồng máy ảnh được định cấu hình trong thiết bị máy ảnh và kết hợp luồng đề cập đến một hoặc nhiều nhóm luồng được định cấu hình trong thiết bị máy ảnh. Để biết thêm về các tính năng này, hãy xem cấu hình luồng đề xuấtAPI để truy vấn các tổ hợp tính năng.

Triển khai tham chiếu

Có một cách triển khai tham chiếu phía nhà cung cấp của các luồng cấu hình được đề xuất và API để truy vấn các tính năng kết hợp luồng. Bạn có thể tìm thấy cách triển khai này tại QCamera3HWI.cpp

Nhà cung cấp máy ảnh có thể quảng cáo cấu hình luồng đề xuất cho các trường hợp sử dụng cụ thể cho ứng dụng máy ảnh. Các cấu hình luồng đề xuất này là một tập hợp con của StreamConfigurationMap, có thể giúp ứng dụng máy ảnh chọn cấu hình tối ưu.

Mặc dù StreamConfigurationMap cung cấp thông tin đầy đủ về cấu hình luồng cho ứng dụng máy ảnh, nhưng lớp này không cung cấp bất kỳ thông tin nào về tác động của việc chọn một luồng thay vì luồng khác đối với hiệu suất, công suất hoặc hiệu quả. Ứng dụng máy ảnh có thể tự do chọn trong số tất cả các cấu hình luồng có thể có, nhưng trong nhiều trường hợp, điều này dẫn đến việc ứng dụng sử dụng cấu hình máy ảnh không tối ưu và các ứng dụng thực hiện các lượt tìm kiếm toàn diện tốn thời gian.

Ví dụ: mặc dù một số định dạng YUV đã xử lý là bắt buộc và phải được hỗ trợ, nhưng thiết bị máy ảnh có thể không hỗ trợ các định dạng đó theo cách gốc. Điều này dẫn đến một lượt xử lý bổ sung cho quá trình chuyển đổi định dạng và làm giảm hiệu quả. Kích thước và tỷ lệ khung hình tương ứng cũng có thể có tác động tương tự, khiến các kích thước cụ thể trở nên ưu tiên hơn về mặt công suất và hiệu suất.

Bạn không bắt buộc phải cung cấp đầy đủ bản đồ cấu hình luồng đề xuất so với StreamConfigurationMap. Các bản đồ cấu hình được đề xuất phải tuân thủ các yêu cầu trong phần triển khai và có thể bao gồm bất kỳ định dạng, kích thước hoặc giá trị nào khác có trong StreamConfigurationMap. Bạn không thể đưa các định dạng, kích thước ẩn hoặc các giá trị khác không có trong StreamConfigurationMap vào bản đồ cấu hình luồng được đề xuất.

Tất cả các thử nghiệm vẫn không thay đổi và không được nới lỏng tuỳ thuộc vào cấu hình luồng đề xuất.

Bạn không bắt buộc phải sử dụng cấu hình luồng được đề xuất do quá trình triển khai máy ảnh cung cấp và ứng dụng máy ảnh có thể bỏ qua các cấu hình đó.

Triển khai

Hãy làm theo các bước sau để triển khai tính năng này.

Mục siêu dữ liệu

Để bật tính năng này, HAL máy ảnh phải điền sẵn các mục siêu dữ liệu tĩnh sau:

  • android.scaler.availableRecommendedStreamConfigurations: Tập hợp con đề xuất của cấu hình luồng cho các trường hợp sử dụng cụ thể. Nội dung khai báo sử dụng bitmap cho biết các trường hợp sử dụng được đề xuất ở dạng [1 << PREVIEW | 1 << RECORD..]. Các trường hợp sử dụng này mở rộng tupơ thông thường (định dạng, chiều rộng, chiều cao, đầu vào) bằng một mục bổ sung. Các trường hợp sử dụng công khai không tồn tại hoặc bất kỳ bit nào khác được đặt trong phạm vi [PUBLIC_END, VENDOR_START] đều bị cấm.

    Thông tin này được lưu trữ trong thẻ siêu dữ liệu availableRecommendedStreamConfigurations.

    Ví dụ sau đây cho thấy một mảng cho cấu hình luồng được đề xuất cho một thiết bị máy ảnh chỉ hỗ trợ 4K và 1080p, trong đó cả hai độ phân giải đều được ưu tiên để quay video nhưng chỉ 1080p được đề xuất để xem trước.

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (chỉ có sẵn nếu thiết bị hỗ trợ): Cấu hình luồng không gian dữ liệu chiều sâu được đề xuất cho thiết bị máy ảnh này. Tương tự như mục siêu dữ liệu ở trên, bitmap trường hợp sử dụng bổ sung cho biết các trường hợp sử dụng được đề xuất.

    Thông tin này được lưu trữ trong thẻ siêu dữ liệu availableRecommendedInputOutputFormatsMap.

  • android.scaler.availableRecommendedInputOutputFormatsMap (chỉ có sẵn nếu thiết bị hỗ trợ): Việc liên kết các định dạng hình ảnh được đề xuất được đề xuất cho thiết bị máy ảnh này cho luồng đầu vào với các định dạng đầu ra tương ứng.

    Thông tin này được lưu trữ trong thẻ siêu dữ liệu availableRecommendedDepthStreamConfigurations.

Ứng dụng máy ảnh có thể xem thông tin này thông qua API RecommendedStreamConfigurationMap.

Các trường hợp sử dụng bắt buộc

Bạn phải cung cấp cấu hình luồng được đề xuất cho các trường hợp sử dụng sau và đáp ứng các yêu cầu tương ứng:

Trường hợp sử dụng Yêu cầu
PREVIEW Bản xem trước chỉ được bao gồm các cấu hình luồng đã xử lý không bị tắc nghẽn với các định dạng đầu ra như YUV_420_888IMPLEMENTATION_DEFINED.
RECORD Bản ghi video phải bao gồm các cấu hình luồng khớp với hồ sơ nội dung nghe nhìn được hỗ trợ được quảng cáo có định dạng IMPLEMENTATION_DEFINED.
VIDEO_SNAPSHOT Ảnh chụp nhanh video phải bao gồm các cấu hình luồng có kích thước tối thiểu bằng độ phân giải RECORD tối đa và chỉ có tổ hợp định dạng/không gian dữ liệu BLOB + DATASPACE_JFIF (JPEG). Cấu hình không được gây ra lỗi xem trước và phải chạy ở tốc độ 30 khung hình/giây.
SNAPSHOT Cấu hình luồng tổng quan nhanh phải bao gồm ít nhất một cấu hình có kích thước gần bằng android.sensor.info.activeArraySize với tổ hợp định dạng/không gian dữ liệu BLOB + DATASPACE_JFIF (JPEG). Khi xem xét các hạn chế về tỷ lệ khung hình, căn chỉnh và các hạn chế khác dành riêng cho nhà cung cấp, diện tích của kích thước đề xuất tối đa không được nhỏ hơn 97% diện tích kích thước mảng cảm biến.
ZSL (nếu được hỗ trợ) Nếu thiết bị máy ảnh hỗ trợ, bạn chỉ được quảng cáo các cấu hình luồng đầu vào được đề xuất cùng với các định dạng đầu ra đã xử lý hoặc bị treo khác.
RAW (nếu được hỗ trợ) Nếu thiết bị máy ảnh hỗ trợ, cấu hình luồng thô được đề xuất chỉ được bao gồm các định dạng đầu ra dựa trên RAW.

Các trường hợp sử dụng khác

Bạn có thể cung cấp thêm các luồng cấu hình đề xuất cho các trường hợp sử dụng cụ thể cho quá trình triển khai của mình.

Xác nhận kết quả

Để kiểm thử việc triển khai luồng cấu hình được đề xuất, hãy chạy các kiểm thử CTS và VTS sau:

API để truy vấn các tổ hợp tính năng

Kể từ Android 15, nền tảng Android sẽ cung cấp một API để truy vấn các tổ hợp tính năng. API này cho phép ứng dụng máy ảnh truy vấn xem thiết bị có thể hỗ trợ một tổ hợp tính năng cụ thể hay không. API này là cần thiết vì API camera2 mô hình hoá các tính năng khác nhau như 4k, 60 khung hình/giây, video HDR, UltraHDR, thu phóng siêu rộng và ổn định dưới dạng các chế độ điều khiển vuông góc.

Yêu cầu

Để hỗ trợ API truy vấn các tổ hợp tính năng, HAL máy ảnh phải triển khai phiên bản 3 của giao diện ICameraDevice. Để biết thông tin chi tiết, hãy xem phần Triển khai.

Khi API được hỗ trợ, tính năng chống rung khi xem trước phải vuông góc với các tính năng khác. Điều này có nghĩa là đối với một thiết bị máy ảnh hỗ trợ tính năng ổn định bản xem trước, giá trị trả về của isStreamCombinationWithSettingsSupported cho một tổ hợp cụ thể phải giống nhau khi tính năng ổn định bản xem trước bật hoặc tắt. Điều này làm giảm không gian tìm kiếm cho các truy vấn kết hợp tính năng.

Ngoài ra, đối với lớp hiệu suất nội dung nghe nhìn 15, máy ảnh sau chính phải hỗ trợ tính năng ổn định bản xem trước bằng bản xem trước HLG10 10 bit cho bản xem trước 1080p và 720p cũng như tệp JPEG có kích thước tối đa. Để biết thêm thông tin chi tiết về các yêu cầu này, hãy xem phần 2.2.7.2. Camera của CDD.

Triển khai

Để hỗ trợ API truy vấn các tổ hợp tính năng, hãy triển khai các API truy vấn tổ hợp tính năng sau trong phiên bản 3 của ICameraDevice:

  • constructDefaultRequestSettings: Tạo chế độ cài đặt mặc định cho một loại CaptureRequest đã chỉ định. HAL có thể sử dụng phương thức triển khai ICameraDeviceSession::constructDefaultRequestSettings.

  • isStreamCombinationWithSettingsSupported: Kiểm tra khả năng hỗ trợ thiết bị của một tổ hợp luồng máy ảnh được chỉ định bằng các tham số phiên và các khoá CaptureRequest bổ sung. Phải trả về true cho các tổ hợp được hỗ trợ và false cho các tổ hợp tính năng không được hỗ trợ. HAL có thể sử dụng phương thức triển khai isStreamCombinationSupported và thêm tính năng hỗ trợ để kiểm tra chế độ cài đặt CaptureRequest được truyền trong sessionParams.

  • getSessionCharacteristics: Lấy một tổ hợp luồng được hỗ trợ với các tham số phiên và trả về các đặc điểm dành riêng cho phiên.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Liệt kê tất cả các cấu hình phiên thường dùng. Các cấu hình này được xác minh bằng quy trình kiểm thử tuân thủ.

Đối với các phiên bản thấp hơn phiên bản 3 của giao diện ICameraDevice, HAL phải triển khai phương thức isStreamCombinationSupported.

Để biết thêm thông tin về các tổ hợp tính năng do API truy vấn, hãy xem tài liệu về sessionConfigurationQueryVersion trong system/media/camera/docs/metadata_definitions.xml.

Để biết cách triển khai tham chiếu tính năng này, hãy xem hardware/google/camera/devices/EmulatedCamera/hwl/.

API công khai

Các ứng dụng có thể sử dụng các API công khai sau đây để truy vấn các tổ hợp tính năng được hỗ trợ cho thiết bị:

  • CameraDevice.CameraDeviceSetup: Một bản trình bày giới hạn của CameraDevice có thể được dùng để truy vấn các tổ hợp tính năng mà không cần thực thể CameraDevice.

  • getCameraDeviceSetup: Thu nạp đối tượng CameraDeviceSetup cho một mã máy ảnh nhất định nếu isCameraDeviceSetupSupported trả về true.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: hỗ trợ các truy vấn kết hợp tính năng nếu giá trị này là VANILLA_ICE_CREAM trở lên.

  • OutputConfiguration: Một lớp mô tả đầu ra của máy ảnh, có thể chứa một nền tảng bị trì hoãn cho mục đích truy vấn kết hợp tính năng có độ trễ thấp.

  • SessionConfiguration: Một lớp tiện ích mô tả cấu hình phiên, bao gồm các tổ hợp luồng và tham số phiên. Bạn có thể sử dụng các tổ hợp này cho truy vấn tổ hợp tính năng.

Xác nhận kết quả

Để xác thực việc triển khai tính năng này, hãy sử dụng các quy trình kiểm thử VTS, CTS và Camera ITS (CTS Verifier) sau:

VTS

CTS

ITS của máy ảnh