[libcamera-devel] [PATCH v7 5/8] qcam: Queue requests only through MainWindow::queueRequest()

Utkarsh Tiwari utkarsh02t at gmail.com
Tue Aug 9 22:55:15 CEST 2022


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>
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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20220810/5bdd6c41/attachment.htm>


More information about the libcamera-devel mailing list