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, các hoạt động triển khai HAL sẽ nhận được các tham số ứng dụng khách trong giai đoạn cấu hình luồng thay vì yêu cầu thu thập đầu tiên. Tuỳ thuộc vào giá trị của các tham số đó, các hoạt động triển khai có thể chuẩn bị và xây dựng quy trình nội bộ một cách 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 bài viết Truy vấn 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 liên kết triển khai API HIDL của máy ảnh phải sử dụng mục nhập sessionParams tương ứng của HIDL để truy cập vào mọi thông số mới của phiê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.

Các ví dụ điển hình bao gồm các tham số đòi hỏi việc đị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 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 thông 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 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, giúp kiểm soát chi tiết logic 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ợ truy vấn 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ó 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 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, khung sẽ định cấu hình lại các luồng và truyền các giá trị tham số phiên mới theo đó.

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ó khả năng 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 xảy ra sự cố hoặc độ trễ trong quá trình truyền trực tuyến thông thường của camera.

Việc triển khai thiết bị và HAL (Lớp trừu tượng phần cứng) phải đáp ứng các yêu cầu sau đây về hiệu suất:

  • Không được thay đổi các chế độ cài đặt của máy ảnh bằng 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ả lại hàng 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 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ộ.

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.