Trong bản phát hành Hệ thống chế độ xem mở rộng (EVS) 1.0 trước đó, các thiết bị máy ảnh được coi là thiết bị chỉ có thể đọc. Do đó, không có phương thức nào cho phép ứng dụng thay đổi các thông số điều khiển máy ảnh như thu phóng hoặc độ sáng.
Vì điều này có thể hạn chế khả năng của các ứng dụng EVS, nên EVS 1.1 mới giới thiệu các phương thức mới và cho phép ứng dụng lập trình một số tham số điều khiển máy ảnh, tất cả đều được xác định trong enum CameraParam
:
/** * EVS Camera Parameter */ enum CameraParam : uint32_t { /** * The brightness of image frames */ BRIGHTNESS, /** * The contrast of image frames */ CONTRAST, /** * Automatic gain/exposure control */ AUTOGAIN, /** * Gain control */ GAIN, /** * Automatic Whitebalance */ AUTO_WHITE_BALANCE, /** * Manual white balance setting as a color temperature in Kelvin. */ WHITE_BALANCE_TEMPERATURE, /** * Image sharpness adjustment */ SHARPNESS, /** * Auto Exposure Control modes; auto, manual, shutter priority, or * aperture priority. */ AUTO_EXPOSURE, /** * Manual exposure time of the camera */ ABSOLUTE_EXPOSURE, /** * Set the focal point of the camera to the specified position. This * parameter may not be effective when auto focus is enabled. */ ABSOLUTE_FOCUS, /** * Enables continuous automatic focus adjustments. */ AUTO_FOCUS, /** * Specify the objective lens focal length as an absolute value. */ ABSOLUTE_ZOOM, };
Phương thức được xác định là:
/** * Requests to be a master client. * * When multiple clients subscribe to a single camera hardware and one of * them adjusts a camera parameter such as the contrast, it may disturb * other clients' operations. Therefore, the client must call this method * to be a master client. When it becomes a master, it can * change camera parameters until either it dies or explicitly gives up the * role. * * @return result EvsResult::OK if a master role is granted. * EvsResult::OWNERSHIP_LOST if there is already a * master client. */ setMaster() generates (EvsResult result); /** * Sets to be a master client forcibly. * * The client, which owns the display, has a high priority and can take over * a master role from other clients without the display. * * @param display IEvsDisplay handle. If this is valid, the calling client * is considered as the high priority client and therefore * it would take over a master role. * * @return result EvsResult::OK if a master role is granted. * EvsResult::OWNERSHIP_LOST if there is already a * master client with the display. */ forceMaster(IEvsDisplay display) generates (EvsResult result); /** * Retires from a master client role. * * @return result EvsResult::OK if this call is successful. * EvsResult::INVALID_ARG if the caller client is not a * master client. */ unsetMaster() generates (EvsResult result); /** * Retrieves a list of parameters this camera supports. * * @return params A list of CameraParam that this camera supports. */ getParameterList() generates (vec<CameraParam> params); /** * Requests a valid value range of a camera parameter * * @param id The identifier of camera parameter, CameraParam enum. * * @return min The lower bound of the valid parameter value range. * @return max The upper bound of the valid parameter value range. * @return step The resolution of values in valid range. */ getIntParameterRange(CameraParam id) generates (int32_t min, int32_t max, int32_t step); /** * Requests to set a camera parameter. * * @param id The identifier of camera parameter, * CameraParam enum. * value A desired parameter value. * @return result EvsResult::OK if it succeeds to set a parameter. * EvsResult::INVALID_ARG if either a requested * parameter is not supported or a given value is out * of bounds. * effectiveValue A programmed parameter value. This may differ * from what the client gives if, for example, the * driver does not support a target parameter. */ setIntParameter(CameraParam id, int32_t value) generates (EvsResult result, int32_t effectiveValue); /** * Retrieves a value of given camera parameter. * * @param id The identifier of camera parameter, CameraParam enum. * @return result EvsResult::OK if it succeeds to read a parameter. * EvsResult::INVALID_ARG if either a requested parameter is * not supported. * value A value of requested camera parameter. */ getIntParameter(CameraParam id) generates(EvsResult result, int32_t value);
getParameterList()
trả về danh sách các tham số (CameraParam
enum) mà ứng dụng có thể đọc và ghi (nếu ứng dụng là ứng dụng chính) và getIntParameterRange()
chuyển tiếp phạm vi giá trị và độ phân giải hợp lệ.
Khi ứng dụng chính thay đổi một thông số máy ảnh, tất cả ứng dụng khác trên cùng một phần cứng máy ảnh sẽ được thông báo bằng cách nhận một sự kiện PARAMETER_CHANGED
có mã thông số và giá trị mới.
Lưu ý: Trình điều khiển cảm biến có thể xử lý các giá trị tham số không hợp lệ theo cách khác. Hàm này có thể chỉ trả về mã lỗi hoặc cắt giá trị trong phạm vi hợp lệ và áp dụng. Do đó, phương thức setIntParameter()
sẽ trả về một giá trị hiệu quả và ứng dụng có thể sử dụng giá trị này để xác nhận cách xử lý yêu cầu.
Yêu cầu dàn xếp giữa nhiều ứng dụng máy ảnh
Vì thiết kế EVS trước đây cho phép nhiều ứng dụng đồng thời đăng ký một phần cứng máy ảnh, nên một ứng dụng có thể làm gián đoạn hoạt động của các ứng dụng khác bằng cách thay đổi thông số máy ảnh. Ngoài ra, nhiều ứng dụng có thể muốn điều chỉnh cùng một tham số theo cách khác nhau, do đó gây ra hành vi không mong muốn khi chạy các dịch vụ máy ảnh.
Để tránh những vấn đề như vậy, trình quản lý EVS chỉ cho phép ứng dụng chính lập trình tham số máy ảnh. Trước khi cố gắng điều chỉnh bất kỳ thông số máy ảnh nào, ứng dụng PHẢI trở thành ứng dụng chính bằng cách gọi phương thức setMaster()
. Nếu không thành công, thì tức là đã có một ứng dụng chính đang hoạt động trên phần cứng máy ảnh đó. Cho đến khi ứng dụng chính hiện tại bị gián đoạn hoặc từ bỏ vai trò chính một cách rõ ràng thông qua unsetMaster()
, không có ứng dụng nào khác được phép thay đổi tham số máy ảnh. Khi ứng dụng chính trả về đặc quyền, tất cả ứng dụng khác sẽ được thông báo bằng sự kiện MASTER_RELEASED
.
Ứng dụng có mức độ ưu tiên cao
Trình quản lý EVS xử lý ứng dụng sở hữu màn hình có mức độ ưu tiên cao và cho phép ứng dụng đó đánh cắp vai trò chính từ một vai trò chính hiện tại. Vì quyền sở hữu màn hình EVS dựa trên tần suất gần đây, nên ứng dụng mới thậm chí có thể thay thế ứng dụng hiện tại bằng màn hình.
Ứng dụng có mức độ ưu tiên cao phải gọi IEvsCamera::forceMaster(sp<IEvsDisplay>& display)
để đạt được vai trò chính. Trình quản lý EVS kiểm tra trạng thái của một tay điều khiển màn hình nhất định và nếu (và chỉ khi) trạng thái của tay điều khiển đó hợp lệ và không phải DisplayState::NOT_OPEN
hay DisplayState::DEAD
thay thế tay điều khiển chính. Ứng dụng vừa mất vai trò chính sẽ được thông báo bằng sự kiện MASTER_RELEASED
và PHẢI xử lý sự kiện này đúng cách.