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. Tìm hiểu 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.

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

Các nhà cung cấp máy ảnh có thể quảng cáo các cấu hình luồng được đề xuất cho mục đích sử dụng cụ thể cho đến máy khách 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 cấu hình luồng đầy đủ cho các ứng dụng máy ảnh, không cung cấp bất kỳ thông tin nào về hiệu suất, sức mạnh hoặc hiệu suất tác động của việc chọn một luồng thay vì một luồng khác. 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à được hỗ trợ, thiết bị máy ảnh có thể không có hỗ trợ riêng cho các định dạng. Chiến dịch này dẫn đến thời gian xử lý bổ sung cho chuyển đổi định dạng và giảm sự hiệu quả. Kích thước và tỷ lệ khung hình tương ứng cũng có thể có làm cho các kích thước cụ thể trở nên phù hợp hơn về sức mạnh 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. Không tìm thấy các định dạng, kích thước hoặc giá trị khác trong StreamConfigurationMap không thể có trong sơ đồ cấu hình luồng được đề xuất.

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

Các cấu hình luồng đề xuất do việc triển khai máy ảnh cung cấp bao gồm không bắt buộc và ứng dụng máy ảnh có thể bỏ qua chúng.

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: nên sử dụng một số 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 mở rộng bộ dữ liệu thông thường (định dạng, chiều rộng, chiều cao, dữ liệu đầu vào) cùng với một mục nhập 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] bị cấm.

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

    Ví dụ sau đây minh hoạ một mảng cho luồng đề xuất cho thiết bị máy ảnh chỉ hỗ trợ 4K và 1080p, trong đó cả hai độ phân giải đều được ưu tiên khi 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 availableRecommendedInputOutputFormatsMap thẻ siêu dữ liệu.

  • android.scaler.availableRecommendedInputOutputFormatsMap (có sẵn chỉ khi thiết bị hỗ trợ): Ánh xạ các định dạng hình ảnh được đề xuất được đề xuất cho thiết bị camera này cho luồng đầu vào, định dạng đầu ra tương ứng.

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

Thông tin này có sẵn cho các ứng dụng máy ảnh thông qua RecommendedStreamConfigurationMap API.

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ý đang chờ xử lý 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 Một ảnh chụp nhanh video phải bao gồm cấu hình luồng ít nhất là lớn đến mức tối đa RECORD và chỉ dùng với BLOB + Tổ hợp định dạng/không gian dữ liệu DATASPACE_JFIF (JPEG). Cấu hình không được gây ra sự cố khi xem trước và phải có thể chạy ở tốc độ 30 khung hình/giây.
SNAPSHOT Cấu hình luồng ảnh chụp nhanh phải bao gồm ít nhất một cấu hình có kích thước gần đến android.sensor.info.activeArraySize bằng BLOB + Tổ hợp định dạng/không gian dữ liệu 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 được thiết bị máy ảnh hỗ trợ, bạn nên sử dụng 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 liệu một tổ hợp các tính năng được chỉ định có thể được thiết bị hỗ trợ. API này là vì API camera2 tạo ra 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 ổn định bản xem trước phải trực giao với các tính năng khác. Điều này có nghĩa 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 đa phương tiện 15, camera chính sau phải hỗ trợ ổn định bản xem trước với bản xem trước HLG10 10 bit cho 1080p và 720p bản xem trước và JPEG kích thước tối đa. Để biết thêm chi tiết về những yêu cầu này, hãy xem mục 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 như sau tính năng API truy vấn kết hợp 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 kiểu kết hợp được hỗ trợ và false cho các kiểu kết hợp không được hỗ trợ tổ hợp tính năng. HAL có thể sử dụng isStreamCombinationSupported triển khai và thêm hỗ trợ để kiểm tra chế độ cài đặt CaptureRequest được truyền vào 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 đều được xác minh bằng quy trình kiểm tra tính 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

Ứng dụng có thể dùng những 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, 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 VTS, CTS và Kiểm tra ITS (Trình xác minh CTS) của máy ảnh:

VTS

CTS (Bộ kiểm tra tính tương thích)

ITS máy ảnh