Cấu hình luồng

Android có các tính năng cho phép ứng dụng máy ảnh để chọn camera tối ưu cho các trường hợp sử dụng cụ thể và để đảm bảo rằng một số tổ hợp luồng nhất định được thiết bị máy ảnh hỗ trợ. Cấu hình luồng đề cập đến một luồng camera được định cấu hình trong thiết bị camera và tổ hợp luồng dữ liệu tham chiếu đến vào 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 được đề xuấtAPI để truy vấn các tổ hợp tính năng.

Cách triển khai tệp đối chiếu

Có một cách triển khai tham chiếu phía nhà cung cấp của cấu hình được đề xuất và API để truy vấn các tính năng kết hợp trong luồng. Bạn có thể tìm thấy triển khai 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. Dưới đây là các cấu hình luồng được đề xuất, tập hợp con của StreamConfigurationMap, có thể giúp khách hàng sử 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ả. Khách hàng có thể thoải mái lựa chọn máy ảnh từ 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 những máy khách đang sử dụng cấu hình máy ảnh dưới mức tối ưu và những ứng dụng khiến tốn nhiều thời gian của bạn.

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 đồ cấu hình luồng được đề xuất của bạn không bắt buộc phải đầy đủ so với StreamConfigurationMap. Sơ đồ cấu hình được đề xuất phải tuân theo các yêu cầu trong implementation (triển khai) và có thể bao gồm bất kỳ đoạn mã nào các định dạng, kích thước có sẵn hoặc các giá trị khác được tìm thấy 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 của máy ảnh phải điền giá trị tĩnh các mục siêu dữ liệu:

  • 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ể. Chiến lược phát hành đĩa đơn sử dụng bitmap cho biết các trường hợp sử dụng được đề xuất trong dưới 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 được thiết bị hỗ trợ): Không gian dữ liệu chiều sâu được đề xuất các cấu hình luồng được đề xuất cho thiết bị máy ảnh này. Tương tự như ở trên mục siêu dữ liệu, một bitmap trường hợp sử dụng bổ sung cho biết các trường hợp sử dụng.

    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ấu hình luồng phù hợp với quảng cáo hồ sơ nội dung nghe nhìn được hỗ trợ bằng đị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). Có tính đến các hạn chế về tỷ lệ khung hình, căn chỉnh và các hạn chế khác tuỳ theo nhà cung cấp, diện tích của kích thước tối đa đề xuất không được nhỏ hơn 97% cảm biến mảng kích thước.
ZSL (nếu được hỗ trợ) Nếu thiết bị máy ảnh hỗ trợ, bạn nên sử dụng cấu hình luồng đầu vào chỉ được quảng cáo cùng với đầu ra khác đã được xử lý hoặc trì hoãn .
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 được đề xuất cho các trường hợp sử dụng cụ thể cho việc triển khai của bạn.

Xác nhận kết quả

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

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à vì API camera2 mô hình 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à tính năng ổn định được dùng làm các nút điều khiển trực giao.

Yêu cầu

Để hỗ trợ API truy vấn các tổ hợp tính năng, lớp trừu tượng phần cứng (HAL) của máy ảnh phải triển khai phiên bản 3 của giao diện ICameraDevice. Để biết 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. Tức là đối với thiết bị máy ảnh có hỗ trợ tính năng xem trước ổn định, giá trị trả về là isStreamCombinationWithSettingsSupported cho một kết hợp cụ thể phải có cùng giá trị khi ổn định bản xem trước đang bật hoặc tắt. Điều này làm giảm không gian tìm kiếm cho các cụm từ tìm kiếm 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. Máy ảnh 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 (Lớp trừu tượng phần cứng) có thể sử dụng ICameraDeviceSession::constructDefaultRequestSettings trong quá trình triển khai.

  • isStreamCombinationWithSettingsSupported: Kiểm tra khả năng hỗ trợ thiết bị của một tổ hợp luồng camera được chỉ định với 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 ảnh được hỗ trợ luồng với thông số phiên và trả về đặc điểm riêng của từng phiên.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Liệt kê tất 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 nên triển khai isStreamCombinationSupported .

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

Để tham khảo cách triển khai 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: Bản trình bày hạn chế của CameraDevice có thể được dùng để truy vấn tính năng mà không cần có bản sao CameraDevice.

  • getCameraDeviceSetup: Thu nạp đối tượng CameraDeviceSetup cho một mã nhận dạng 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 trong mục đích của các 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 luồng các kết hợp và thông số phiên hoạt động, có thể được dùng cho tính năng truy vấn kết hợp.

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 máy ảnh