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 tập hợp con gồm 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 của bạn sẽ nhận được các tham số của ứ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ể chuẩn bị cũng như xây dựng quy trình nội bộ một cách hiệu quả hơn, tuỳ thuộc vào các giá trị của tham số.
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 để kiểm soát tốt hơn 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
Một cách triển khai tham số phiên tham chiếu đã có trong CameraHal. HAL này sử dụng Hal API cũ. CameraHal được liên kết triển khai API HIDL của camera phải sử dụng mục sessionParams HIDL 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 các khoá của tất 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 tĩnh tương ứng của camera 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 sự chậm trễ không mong muốn khi được sửa đổi trong suốt 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ố yêu cầu cấu hình lại phần cứng tốn thời gian hoặc thay đổi quy trình nội bộ của camera. Bạn vẫn có thể kiểm soát các thông số phiên trong yêu cầu chụp nhưng các ứng dụng cần lưu ý và dự kiến sẽ có độ trễ.
Khung này giám sát 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 camera theo cách nội bộ. Cấu hình luồng mới được truyền đến CameraHal sau đó sẽ bao gồm các giá trị tham số phiên đã cập nhật. Các giá trị này được dùng để định cấu hình quy trình camera 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 hiện có được điền sẵn ở phía CameraHal. Tính năng này sẽ không hoạt động nếu CameraHal để trống danh sách tham số phiên có sẵn.
Xác nhận kết quả
CTS có các trường hợp mới sau đây để kiểm thử các tham số phiên:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
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 làm một phần của các 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ị này không được thay đổi thường xuyên (nếu có) giữa các cấu hình luồng. Các tham số thay đổi thường xuyên, chẳng hạn như ý định ghi lại, không phù hợp và việc thêm các tham số này vào danh sách tham số phiên có thể gây ra lỗi CTS do cấu hình lại nội bộ quá mức.
Truy vấn định cấu hình lại phiên
Android 10 giới thiệu một tính năng truy vấn 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 cấu hình lại luồng nội bộ do các 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 hoạt động sửa đổi tham số phiên đang chờ xử lý, cho phép nhiều loại hoạt động 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ụ camera và HAL camera. Không có API công khai. Nếu tính năng này được triển khai, các ứng dụng camera sẽ thấy hiệu suất được 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 toàn 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 được thông báo nào, khung camera 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 toàn bộ luồng hay không. Nếu HAL trả về false
, thì khung camera 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 cho phù hợp.
Khung có thể gọi phương thức isReconfigurationRequired
một lúc trước khi yêu cầu có các thông số mới được gửi đến HAL và yêu cầu có thể bị huỷ trước khi được gửi. Do đó, HAL không được dùng lệnh gọi phương thức này để thay đổi hành vi của mình 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 này phải có khả năng gọi phương thức
isReconfigurationRequired
bất cứ lúc nào sau khi định cấu hình phiên hoạt động. - Không được ảnh hưởng đến hiệu suất của các yêu cầu đang chờ xử lý đối với camera. Cụ thể, không được có lỗi hoặc độ trễ trong quá trình phát trực tiếp bằng camera thông thường.
Thiết bị và việc triển khai HAL phải đáp ứng các yêu cầu sau về hiệu suất:
- Bạn không được thay đổi chế độ cài đặt camera phần cứng và phần mềm.
- Hiệu suất của camera không được ảnh hưởng đến mức 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 tham số phiên của phiên trước. Thường là các thông số phiên hiện có.newSessionParams
: Các thông số phiên mới do máy khách đặt.
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ị camera 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ộ.
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 mặc định của dịch vụ camera, trong đó quá trình định cấu hình lại luồng được kích hoạt khi mỗi tham số phiên thay đổi.
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 trường hợp kiểm thử VTS trong CameraHidlTest#configureStreamsWithSessionParameters
.