[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