diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2019-02-11 18:35:24 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2019-02-11 20:21:04 +0100 |
commit | 15a8ad060653a521bcd175b495455a0e09377050 (patch) | |
tree | 03ffc76a92ba44aee55a7974de83973ec11d97c9 /video/video-widget.hpp | |
parent | 2e946e830ae52b19973745b8d67915cd0d8c767b (diff) |
cv/video-widget: make it work without opencv
Diffstat (limited to 'video/video-widget.hpp')
-rw-r--r-- | video/video-widget.hpp | 54 |
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(); +}; |