summaryrefslogtreecommitdiffhomepage
path: root/video/video-widget.hpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2019-02-11 18:35:24 +0100
committerStanislaw Halik <sthalik@misaki.pl>2019-02-11 20:21:04 +0100
commit15a8ad060653a521bcd175b495455a0e09377050 (patch)
tree03ffc76a92ba44aee55a7974de83973ec11d97c9 /video/video-widget.hpp
parent2e946e830ae52b19973745b8d67915cd0d8c767b (diff)
cv/video-widget: make it work without opencv
Diffstat (limited to 'video/video-widget.hpp')
-rw-r--r--video/video-widget.hpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/video/video-widget.hpp b/video/video-widget.hpp
new file mode 100644
index 00000000..2393db2e
--- /dev/null
+++ b/video/video-widget.hpp
@@ -0,0 +1,54 @@
+/* Copyright (c) 2012 Patrick Ruoff
+ * Copyright (c) 2014-2016 Stanislaw Halik <sthalik@misaki.pl>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ */
+
+#pragma once
+
+#include "compat/math.hpp"
+
+#include <vector>
+
+#ifdef OTR_HAS_OPENCV
+# include <opencv2/core.hpp>
+#endif
+
+#include <QWidget>
+#include <QTimer>
+#include <QMutex>
+
+class cv_video_widget final : public QWidget
+{
+ Q_OBJECT
+
+public:
+ cv_video_widget(QWidget *parent);
+
+#ifdef OTR_HAS_OPENCV
+ void update_image(const cv::Mat& frame);
+#endif
+ void update_image(const QImage& image);
+ void get_preview_size(int& w, int& h);
+ void resizeEvent(QResizeEvent*) override;
+private slots:
+ void paintEvent(QPaintEvent*) override;
+ void update_and_repaint();
+private:
+ QMutex mtx { QMutex::Recursive };
+ QImage texture;
+ std::vector<unsigned char> vec;
+ QTimer timer;
+
+#ifdef OTR_HAS_OPENCV
+ cv::Mat frame2, frame3;
+#endif
+ bool freshp = false;
+
+ int W = iround(QWidget::width() * devicePixelRatioF());
+ int H = iround(QWidget::height() * devicePixelRatioF());
+
+ void init_image_nolock();
+};