Thông số phiên

Tính năng tham số phiên giúp giảm độ trễ bằng cách cho phép ứng dụng máy ảnh chủ động định cấu hình một tập hợp con các tham số yêu cầu tốn kém, tức là tham số phiên, trong giai đoạn khởi chạy phiên chụp. Với tính năng này, quá trình triển khai HAL sẽ nhận được các tham số ứng dụng trong giai đoạn định cấu hình luồng thay vì yêu cầu chụp đầu tiên và có thể, tuỳ thuộc vào giá trị của các tham số đó, chuẩn bị và xây dựng quy trình nội bộ hiệu quả hơn.

Trong Android 10, bạn có thể cải thiện hiệu suất bằng cách sử dụng tính năng truy vấn định cấu hình lại phiên không bắt buộc để có thêm quyền kiểm soát đối với logic định cấu hình lại tham số phiên nội bộ. Để biết thêm thông tin, hãy xem phần Truy vấn định cấu hình lại phiên.

Ví dụ và nguồn

Việc triển khai tham số phiên tham chiếu đã là một phần của CameraHal. HAL này sử dụng API Hal cũ. CameraHal được liên kết triển khai API HIDL của máy ảnh phải sử dụng mục nhập HIDL sessionParams tương ứng để truy cập vào mọi thông số phiên mới đến trong quá trình định cấu hình luồng.

Ứng dụng máy ảnh có thể truy vấn khoá của tất cả các thông số phiên được hỗ trợ bằng cách gọi getAvailableSessionKeys() và cuối cùng đặt giá trị ban đầu thông qua setSessionParameters().

Triển khai

Việc triển khai CameraHal phải điền ANDROID_REQUEST_AVAILABLE_SESSION_KEYS trong siêu dữ liệu máy ảnh tĩnh tương ứng và cung cấp một tập hợp con của ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS. Tập hợp con này chứa danh sách các khoá khó áp dụng cho mỗi khung hình và có thể dẫn đến độ trễ không mong muốn khi được sửa đổi trong thời gian hoạt động của phiên chụp.

Ví dụ điển hình bao gồm các tham số đòi hỏi phải định cấu hình lại phần cứng tốn thời gian hoặc thay đổi quy trình máy ảnh nội bộ. Bạn vẫn có thể kiểm soát các tham số phiên trong yêu cầu chụp, nhưng ứng dụng phải nhận biết và dự kiến độ trễ trong ứng dụng.

Khung này theo dõi tất cả các yêu cầu đến và nếu phát hiện thấy sự thay đổi về giá trị của một tham số phiên, thì khung này sẽ định cấu hình lại máy ảnh trong nội bộ. Sau đó, cấu hình luồng mới được truyền đến CameraHal sẽ bao gồm các giá trị tham số phiên đã cập nhật, được dùng để định cấu hình quy trình máy ảnh hiệu quả hơn.

Tuỳ chỉnh

Bạn có thể xác định các thẻ trong danh sách tham số phiên có sẵn được điền sẵn ở phía CameraHal. Tính năng này không hoạt động nếu CameraHal để trống danh sách thông số phiên có sẵn.

Xác nhận kết quả

CTS bao gồm các trường hợp mới sau đây để kiểm thử các thông số phiên:

Nhìn chung, sau khi một tham số nhất định nằm trong danh sách khoá phiên, giá trị hiện tại của tham số đó sẽ được đưa vào tham số phiên được truyền trong quá trình định cấu hình luồng ở lớp HAL.

Bạn phải chọn tham số phiên một cách cẩn thận. Các giá trị không được thay đổi thường xuyên giữa các cấu hình luồng (nếu có). Các tham số thay đổi thường xuyên, chẳng hạn như ý định chụp, không phù hợp và việc thêm các tham số đó vào danh sách tham số phiên có thể gây ra lỗi CTS do quá trình định cấu hình lại nội bộ.

Truy vấn định cấu hình lại phiên

Android 10 ra mắt tính năng truy vấn định cấu hình lại phiên không bắt buộc để cải thiện hiệu suất vì việc định cấu hình lại luồng nội bộ do sửa đổi giá trị tham số phiên có thể làm giảm hiệu suất. Để giải quyết mối lo ngại này, HIDL ICameraDeviceSession phiên bản 3.5 trở lên hỗ trợ phương thức isReconfigurationRequired. Phương thức này cung cấp khả năng kiểm soát chi tiết đối với logic định cấu hình lại tham số phiên nội bộ. Khi sử dụng phương thức này, quá trình định cấu hình lại luồng có thể diễn ra chính xác khi cần.

Các đối số cho isReconfigurationRequired cung cấp thông tin bắt buộc về mọi nội dung sửa đổi tham số phiên đang chờ xử lý, cho phép nhiều loại tuỳ chỉnh dành riêng cho thiết bị.

Tính năng này chỉ được triển khai trong dịch vụ máy ảnh và HAL máy ảnh. Không có API công khai. Nếu tính năng này được triển khai, ứng dụng máy ảnh sẽ thấy hiệu suất cải thiện khi làm việc với các tham số phiên.

Triển khai

Để hỗ trợ các truy vấn định cấu hình lại phiên, bạn phải triển khai phương thức isReconfigurationRequired để kiểm tra xem có cần định cấu hình lại luồng hoàn chỉnh cho các giá trị thông số phiên mới hay không.

Nếu ứng dụng thay đổi giá trị của bất kỳ tham số phiên nào được quảng cáo, khung máy ảnh sẽ gọi phương thức isReconfigurationRequired. Tuỳ thuộc vào các giá trị cụ thể, HAL sẽ quyết định xem có cần định cấu hình lại luồng hoàn chỉnh hay không. Nếu HAL trả về false, khung máy ảnh sẽ bỏ qua quá trình định cấu hình lại nội bộ. Nếu HAL trả về true, thì khung sẽ định cấu hình lại các luồng và truyền các giá trị thông số phiên mới cho phù hợp.

Khung có thể gọi phương thức isReconfigurationRequired một thời gian trước khi gửi yêu cầu có tham số mới đến HAL và có thể huỷ yêu cầu trước khi gửi. Do đó, HAL không được sử dụng lệnh gọi phương thức này để thay đổi hành vi của HAL theo bất kỳ cách nào.

Việc triển khai HAL phải đáp ứng các yêu cầu sau:

  • Khung phải có thể gọi phương thức isReconfigurationRequired bất cứ lúc nào sau khi cấu hình phiên đang hoạt động.
  • Không được ảnh hưởng đến hiệu suất của các yêu cầu máy ảnh đang chờ xử lý. Cụ thể, không được có bất kỳ sự cố hoặc độ trễ nào trong quá trình truyền trực tuyến máy ảnh thông thường.

Việc triển khai thiết bị và HAL phải đáp ứng các yêu cầu về hiệu suất sau:

  • Không được thay đổi chế độ cài đặt camera phần cứng và phần mềm.
  • Không được ảnh hưởng đến hiệu suất của máy ảnh mà người dùng có thể nhận thấy.

Phương thức isReconfigurationRequired nhận các đối số sau:

  • oldSessionParams: Các thông số phiên từ phiên trước. Thường là các thông số phiên hiện có.
  • newSessionParams: Các tham số phiên mới do ứng dụng đặt.

Các mã trạng thái trả về dự kiến là:

  • OK: Truy vấn bắt buộc để định cấu hình lại thành công.
  • METHOD_NOT_SUPPORTED: Thiết bị máy ảnh không hỗ trợ truy vấn định cấu hình lại.
  • INTERNAL_ERROR: Không thể hoàn tất truy vấn định cấu hình lại do lỗi nội bộ.

Các giá trị trả về là:

  • true: Bạn phải định cấu hình lại luồng.
  • false: Không cần định cấu hình lại luồng.

Để bỏ qua truy vấn định cấu hình lại phiên, HAL sẽ trả về METHOD_NOT_SUPPORTED hoặc false. Điều này dẫn đến hành vi dịch vụ máy ảnh mặc định, trong đó quá trình định cấu hình lại luồng sẽ được kích hoạt trên mỗi thay đổi về tham số phiên.

Xác nhận kết quả

Bạn có thể xác thực tính năng truy vấn định cấu hình lại phiên bằng cách sử dụng trường hợp kiểm thử VTS trong CameraHidlTest#configureStreamsWithSessionParameters.