[libcamera-devel] [PATCH 6/6] qcam: Add command line option to test IspCrop control
David Plowman
david.plowman at raspberrypi.com
Tue Sep 22 17:25:51 CEST 2020
Hi Laurent
Thanks for the reply!
On Tue, 22 Sep 2020 at 12:31, Laurent Pinchart
<laurent.pinchart at ideasonboard.com> wrote:
>
> Hi David,
>
> Thank you for the patch.
>
> On Tue, Sep 22, 2020 at 11:04:00AM +0100, David Plowman wrote:
> > This allows the user to request digital zoom by adding, for example,
> > "-z 0.25,0.25,0.5,0.5" which would give a 2x zoom, still centred in
> > the middle of the image.
> >
> > Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
>
> A command line option would make more sense for the cam application I
> think. In qcam, I would rather like to have the zoom integrated in the
> UI. Is this something you would be interested in developing, or should I
> try to appoint a volunteer ? :-)
With my knowledge of Qt being non-existent you might have more luck
with another volunteer. However, it sounds like it might be worthwhile
converting my qcam patch into a cam patch instead. I'll wait a couple
of days and see if there's any more feedback but then I'll send a v2
with that change.
Thanks!
David
>
> > ---
> > src/qcam/main.cpp | 3 +++
> > src/qcam/main_window.cpp | 20 ++++++++++++++++++++
> > src/qcam/main_window.h | 1 +
> > 3 files changed, 24 insertions(+)
> >
> > diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> > index f60d3ce..9f8435d 100644
> > --- a/src/qcam/main.cpp
> > +++ b/src/qcam/main.cpp
> > @@ -38,6 +38,9 @@ OptionsParser::Options parseOptions(int argc, char *argv[])
> > "renderer", ArgumentRequired, "renderer");
> > parser.addOption(OptStream, &streamKeyValue,
> > "Set configuration of a camera stream", "stream", true);
> > + parser.addOption(OptZoom, OptionString,
> > + "Specify crop for digital zoom as fractions x,y,width,height e.g. 0.25,0.25,0.5,0.5",
> > + "zoom", ArgumentRequired, "zoom");
> >
> > OptionsParser::Options options = parser.parse(argc, argv);
> > if (options.isSet(OptHelp))
> > diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> > index 985743f..fb54b15 100644
> > --- a/src/qcam/main_window.cpp
> > +++ b/src/qcam/main_window.cpp
> > @@ -25,6 +25,8 @@
> > #include <QtDebug>
> >
> > #include <libcamera/camera_manager.h>
> > +#include <libcamera/control_ids.h>
> > +#include <libcamera/property_ids.h>
> > #include <libcamera/version.h>
> >
> > #include "dng_writer.h"
> > @@ -502,6 +504,24 @@ int MainWindow::startCapture()
> > requests.push_back(request);
> > }
> >
> > + /* Set up digital zoom if it was requested on the command line. */
> > + if (options_.isSet(OptZoom)) {
> > + std::string zoom = options_[OptZoom].toString();
> > + float x, y, width, height;
> > +
> > + if (sscanf(zoom.c_str(), "%f,%f,%f,%f", &x, &y, &width, &height) == 4) {
> > + Size sensorArea = camera_->properties().get(properties::SensorOutputSize);
> > + Rectangle crop(x * sensorArea.width,
> > + y * sensorArea.height,
> > + width * sensorArea.width,
> > + height * sensorArea.height);
> > +
> > + requests.front()->controls().set(controls::IspCrop, crop);
> > + } else {
> > + qWarning() << "Invalid zoom values - ignoring";
> > + }
> > + }
> > +
> > /* Start the title timer and the camera. */
> > titleTimer_.start(2000);
> > frameRateInterval_.start();
> > diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> > index 5c61a4d..e46eb70 100644
> > --- a/src/qcam/main_window.h
> > +++ b/src/qcam/main_window.h
> > @@ -39,6 +39,7 @@ enum {
> > OptHelp = 'h',
> > OptRenderer = 'r',
> > OptStream = 's',
> > + OptZoom = 'z',
> > };
> >
> > class CaptureRequest
>
> --
> Regards,
>
> Laurent Pinchart
More information about the libcamera-devel
mailing list