summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUtkarsh Tiwari <utkarsh02t@gmail.com>2022-07-26 23:45:42 +0530
committerUtkarsh Tiwari <utkarsh02t@gmail.com>2022-09-05 12:19:50 +0530
commitd182a99e7bff4edd7fd4812087d240b6b9365c45 (patch)
tree3fa08885d99592f9fac0b7cebf3fba78918a131e
parentd598e77aa5500c60694f1f6aa4f95d67edc202ae (diff)
qcam: Queue requests only through MainWindow::queueRequest()
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@gmail.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/qcam/main_window.cpp14
-rw-r--r--src/qcam/main_window.h3
2 files changed, 11 insertions, 6 deletions
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index 675b4cb0..6fe36168 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
@@ -517,7 +517,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;
@@ -750,7 +750,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
viewfinder_->render(buffer, mappedBuffers_[buffer].get());
}
-void MainWindow::queueRequest(FrameBuffer *buffer)
+void MainWindow::renderComplete(FrameBuffer *buffer)
{
Request *request;
{
@@ -779,6 +779,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 3fa98b05..95b64124 100644
--- a/src/qcam/main_window.h
+++ b/src/qcam/main_window.h
@@ -68,7 +68,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();
@@ -82,6 +82,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);