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>
This commit is contained in:
parent
3a91e37bb8
commit
568865a6c1
4 changed files with 22 additions and 0 deletions
|
@ -14,6 +14,7 @@
|
||||||
#include <libcamera/property_ids.h>
|
#include <libcamera/property_ids.h>
|
||||||
|
|
||||||
#include "camera_session.h"
|
#include "camera_session.h"
|
||||||
|
#include "capture_script.h"
|
||||||
#include "event_loop.h"
|
#include "event_loop.h"
|
||||||
#include "file_sink.h"
|
#include "file_sink.h"
|
||||||
#ifdef HAVE_KMS
|
#ifdef HAVE_KMS
|
||||||
|
@ -91,6 +92,16 @@ CameraSession::CameraSession(CameraManager *cm,
|
||||||
}
|
}
|
||||||
#endif
|
#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()) {
|
switch (config->validate()) {
|
||||||
case CameraConfiguration::Valid:
|
case CameraConfiguration::Valid:
|
||||||
break;
|
break;
|
||||||
|
@ -322,6 +333,9 @@ int CameraSession::queueRequest(Request *request)
|
||||||
if (captureLimit_ && queueCount_ >= captureLimit_)
|
if (captureLimit_ && queueCount_ >= captureLimit_)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (script_)
|
||||||
|
request->controls() = script_->frameControls(queueCount_);
|
||||||
|
|
||||||
queueCount_++;
|
queueCount_++;
|
||||||
|
|
||||||
return camera_->queueRequest(request);
|
return camera_->queueRequest(request);
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
|
||||||
|
class CaptureScript;
|
||||||
class FrameSink;
|
class FrameSink;
|
||||||
|
|
||||||
class CameraSession
|
class CameraSession
|
||||||
|
@ -60,6 +61,8 @@ private:
|
||||||
std::shared_ptr<libcamera::Camera> camera_;
|
std::shared_ptr<libcamera::Camera> camera_;
|
||||||
std::unique_ptr<libcamera::CameraConfiguration> config_;
|
std::unique_ptr<libcamera::CameraConfiguration> config_;
|
||||||
|
|
||||||
|
std::unique_ptr<CaptureScript> script_;
|
||||||
|
|
||||||
std::map<const libcamera::Stream *, std::string> streamNames_;
|
std::map<const libcamera::Stream *, std::string> streamNames_;
|
||||||
std::unique_ptr<FrameSink> sink_;
|
std::unique_ptr<FrameSink> sink_;
|
||||||
unsigned int cameraIndex_;
|
unsigned int cameraIndex_;
|
||||||
|
|
|
@ -158,6 +158,10 @@ int CamApp::parseOptions(int argc, char *argv[])
|
||||||
"Print the metadata for completed requests",
|
"Print the metadata for completed requests",
|
||||||
"metadata", ArgumentNone, nullptr, false,
|
"metadata", ArgumentNone, nullptr, false,
|
||||||
OptCamera);
|
OptCamera);
|
||||||
|
parser.addOption(OptCaptureScript, OptionString,
|
||||||
|
"Load a capture session configuration script from a file",
|
||||||
|
"script", ArgumentRequired, "script", false,
|
||||||
|
OptCamera);
|
||||||
|
|
||||||
options_ = parser.parse(argc, argv);
|
options_ = parser.parse(argc, argv);
|
||||||
if (!options_.valid())
|
if (!options_.valid())
|
||||||
|
|
|
@ -21,4 +21,5 @@ enum {
|
||||||
OptListControls = 256,
|
OptListControls = 256,
|
||||||
OptStrictFormats = 257,
|
OptStrictFormats = 257,
|
||||||
OptMetadata = 258,
|
OptMetadata = 258,
|
||||||
|
OptCaptureScript = 259,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue