summaryrefslogtreecommitdiff
path: root/src/qcam/viewfinder.cpp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-03-23 03:24:25 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-03-29 17:09:46 +0200
commit97e8b3a2eb321884fe1e15fb584f41a38cc33d51 (patch)
tree3ed93b2504e4fcdc3511bcf956f43ad84a558d0f /src/qcam/viewfinder.cpp
parentffef90a1c1f1990581d8fbc22193bfc766d23d3b (diff)
qcam: Add Qt-based GUI application
qcam is a sample camera GUI application based on Qt. It demonstrates integration of the Qt event loop with libcamera. The application lets the user select a camera through the GUI, and then captures a single stream from the camera and displays it in a window. Only streams in YUYV formats are supported for now. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/qcam/viewfinder.cpp')
-rw-r--r--src/qcam/viewfinder.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/qcam/viewfinder.cpp b/src/qcam/viewfinder.cpp
new file mode 100644
index 00000000..5841dc03
--- /dev/null
+++ b/src/qcam/viewfinder.cpp
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * viewfinder.cpp - qcam - Viewfinder
+ */
+
+#include <QImage>
+#include <QPixmap>
+
+#include "format_converter.h"
+#include "viewfinder.h"
+
+ViewFinder::ViewFinder(QWidget *parent)
+ : QLabel(parent), format_(0), width_(0), height_(0), image_(nullptr)
+{
+}
+
+void ViewFinder::display(const unsigned char *raw)
+{
+ converter_.convert(raw, image_->bits());
+
+ QPixmap pixmap = QPixmap::fromImage(*image_);
+ setPixmap(pixmap);
+}
+
+int ViewFinder::setFormat(unsigned int format, unsigned int width,
+ unsigned int height)
+{
+ int ret;
+
+ ret = converter_.configure(format, width, height);
+ if (ret < 0)
+ return ret;
+
+ format_ = format;
+ width_ = width;
+ height_ = height;
+
+ setFixedSize(width, height);
+
+ delete image_;
+ image_ = new QImage(width, height, QImage::Format_RGB32);
+
+ return 0;
+}