[libcamera-devel] [PATCH v7 5/8] qcam: Queue requests only through MainWindow::queueRequest()
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Aug 9 23:46:00 CEST 2022
Quoting Utkarsh Tiwari (2022-08-09 21:55:15)
> On Wed, Aug 10, 2022 at 2:23 AM Utkarsh Tiwari <utkarsh02t at gmail.com> wrote:
>
> > Currently to request a frame, we operate the camera directly.
> > This approach is also scattered in two places,
> > MainWindow::startCapture() and MainWindow::queueRequest().
> > This makes it difficult to account for requests.
> >
> > Centralize all the queuing to a single function queueRequest()
> >
> > Rename the current queueRequest() to renderComplete().
> > This makes more sense as this slot is triggered when
> > the render is complete and we want to queue another
> > request.
> >
> > Signed-off-by: Utkarsh Tiwari <utkarsh02t at gmail.com>
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >
> Fix mail id here:
> Reviewed-by: Kieran Bingham <kieran.bingham@ ideasonboard.com>
Still not quite ;-) but it's ok, it can be handled when applying.
> Reviewed-by: Umang Jain <umang.jain at ideasonboard.com>
>
> > ---
> > src/qcam/main_window.cpp | 14 +++++++++-----
> > src/qcam/main_window.h | 3 ++-
> > 2 files changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> > index 15b150ec..3feabcff 100644
> > --- a/src/qcam/main_window.cpp
> > +++ b/src/qcam/main_window.cpp
> > @@ -120,14 +120,14 @@ MainWindow::MainWindow(CameraManager *cm, const
> > OptionsParser::Options &options)
> > if (renderType == "qt") {
> > ViewFinderQt *viewfinder = new ViewFinderQt(this);
> > connect(viewfinder, &ViewFinderQt::renderComplete,
> > - this, &MainWindow::queueRequest);
> > + this, &MainWindow::renderComplete);
> > viewfinder_ = viewfinder;
> > setCentralWidget(viewfinder);
> > #ifndef QT_NO_OPENGL
> > } else if (renderType == "gles") {
> > ViewFinderGL *viewfinder = new ViewFinderGL(this);
> > connect(viewfinder, &ViewFinderGL::renderComplete,
> > - this, &MainWindow::queueRequest);
> > + this, &MainWindow::renderComplete);
> > viewfinder_ = viewfinder;
> > setCentralWidget(viewfinder);
> > #endif
> > @@ -513,7 +513,7 @@ int MainWindow::startCapture()
> >
> > /* Queue all requests. */
> > for (std::unique_ptr<Request> &request : requests_) {
> > - ret = camera_->queueRequest(request.get());
> > + ret = queueRequest(request.get());
> > if (ret < 0) {
> > qWarning() << "Can't queue request";
> > goto error_disconnect;
> > @@ -745,7 +745,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
> > viewfinder_->render(buffer, mappedBuffers_[buffer].get());
> > }
> >
> > -void MainWindow::queueRequest(FrameBuffer *buffer)
> > +void MainWindow::renderComplete(FrameBuffer *buffer)
> > {
> > Request *request;
> > {
> > @@ -774,6 +774,10 @@ void MainWindow::queueRequest(FrameBuffer *buffer)
> > qWarning() << "No free buffer available for RAW
> > capture";
> > }
> > }
> > + queueRequest(request);
> > +}
> >
> > - camera_->queueRequest(request);
> > +int MainWindow::queueRequest(Request *request)
> > +{
> > + return camera_->queueRequest(request);
> > }
> > diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> > index bbdbb21c..bd6f0172 100644
> > --- a/src/qcam/main_window.h
> > +++ b/src/qcam/main_window.h
> > @@ -70,7 +70,7 @@ private Q_SLOTS:
> > void processRaw(libcamera::FrameBuffer *buffer,
> > const libcamera::ControlList &metadata);
> >
> > - void queueRequest(libcamera::FrameBuffer *buffer);
> > + void renderComplete(libcamera::FrameBuffer *buffer);
> >
> > private:
> > int createToolbars();
> > @@ -84,6 +84,7 @@ private:
> > void addCamera(std::shared_ptr<libcamera::Camera> camera);
> > void removeCamera(std::shared_ptr<libcamera::Camera> camera);
> >
> > + int queueRequest(libcamera::Request *request);
> > void requestComplete(libcamera::Request *request);
> > void processCapture();
> > void processHotplug(HotplugEvent *e);
> > --
> > 2.25.1
> >
> >
More information about the libcamera-devel
mailing list