diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2022-05-18 19:19:20 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-05-22 12:52:13 +0300 |
commit | 568865a6c14355d74349dea61fee06e09f11dfd7 (patch) | |
tree | d33c7757839e3c627f473be610062efad0af43fd /src/cam/camera_session.cpp | |
parent | 3a91e37bb82a9df0027adc4182fdb012068c7932 (diff) |
cam: Use script parser to set controls
Add a "--script" option to the cam test application to allow specify a
capture script to be used to drive the capture session. Add to the
CameraSession class a script parser instance, created conditionally to
the OptCaptureScript option.
If the script parser has been created, use it at queueRequest time to
retrieve the list of controls that has to be associated with a Request,
and populate Request::controls() with it before queueing it to the
Camera.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/cam/camera_session.cpp')
-rw-r--r-- | src/cam/camera_session.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp index 0bb95c8b..76d552d9 100644 --- a/src/cam/camera_session.cpp +++ b/src/cam/camera_session.cpp @@ -14,6 +14,7 @@ #include <libcamera/property_ids.h> #include "camera_session.h" +#include "capture_script.h" #include "event_loop.h" #include "file_sink.h" #ifdef HAVE_KMS @@ -91,6 +92,16 @@ CameraSession::CameraSession(CameraManager *cm, } #endif + if (options_.isSet(OptCaptureScript)) { + std::string scriptName = options_[OptCaptureScript].toString(); + script_ = std::make_unique<CaptureScript>(camera_, scriptName); + if (!script_->valid()) { + std::cerr << "Invalid capture script '" << scriptName + << "'" << std::endl; + return; + } + } + switch (config->validate()) { case CameraConfiguration::Valid: break; @@ -322,6 +333,9 @@ int CameraSession::queueRequest(Request *request) if (captureLimit_ && queueCount_ >= captureLimit_) return 0; + if (script_) + request->controls() = script_->frameControls(queueCount_); + queueCount_++; return camera_->queueRequest(request); |