Message ID | 20220703043704.296872-2-utkarsh02t@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Utkarsh, Thank you for the patch. On 7/3/22 10:07, Utkarsh Tiwari via libcamera-devel 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 requests. s/account/account for/ maybe? > > 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@gmail.com> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@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 dd0e51f5..adeb3181 100644 > --- a/src/qcam/main_window.cpp > +++ b/src/qcam/main_window.cpp > @@ -119,14 +119,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 > @@ -521,7 +521,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; > @@ -755,7 +755,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer) > viewfinder_->render(buffer, mappedBuffers_[buffer].get()); > } > > -void MainWindow::queueRequest(FrameBuffer *buffer) > +void MainWindow::renderComplete(FrameBuffer *buffer) > { > Request *request; > { > @@ -784,6 +784,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 3fbe872c..c3e4b665 100644 > --- a/src/qcam/main_window.h > +++ b/src/qcam/main_window.h > @@ -66,7 +66,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(); > @@ -80,6 +80,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);
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp index dd0e51f5..adeb3181 100644 --- a/src/qcam/main_window.cpp +++ b/src/qcam/main_window.cpp @@ -119,14 +119,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 @@ -521,7 +521,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; @@ -755,7 +755,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer) viewfinder_->render(buffer, mappedBuffers_[buffer].get()); } -void MainWindow::queueRequest(FrameBuffer *buffer) +void MainWindow::renderComplete(FrameBuffer *buffer) { Request *request; { @@ -784,6 +784,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 3fbe872c..c3e4b665 100644 --- a/src/qcam/main_window.h +++ b/src/qcam/main_window.h @@ -66,7 +66,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(); @@ -80,6 +80,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);