From 8628742855ba30fbc9896d3690e94e5fc0d1be34 Mon Sep 17 00:00:00 2001 From: Jared Bruni Date: Tue, 21 Sep 2021 15:00:56 -0700 Subject: [PATCH] updated --- src/chroma_window.cpp | 3 ++- src/chroma_window.h | 4 +++- src/main_window.cpp | 3 ++- src/main_window.h | 6 +++++- src/playback_thread.cpp | 11 +++++++++++ src/playback_thread.h | 3 +++ src/search_box.cpp | 2 +- 7 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/chroma_window.cpp b/src/chroma_window.cpp index 2e80518..0ae1748 100644 --- a/src/chroma_window.cpp +++ b/src/chroma_window.cpp @@ -129,11 +129,12 @@ void ChromaWindow::createControls() { void ChromaWindow::setImage() { QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".", tr("Image Files (*.png *.jpg *.bmp *.tiff)")); if(fileName != "") { - color_replace_image = cv::imread(fileName.toStdString()); + cv::Mat color_replace_image = cv::imread(fileName.toStdString()); if(color_replace_image.empty()) { QMessageBox::information(this, "Error", "Could not open image file..."); } else { select_image_path->setText(fileName); + main_window->playback->setChromaImage(color_replace_image); } } } diff --git a/src/chroma_window.h b/src/chroma_window.h index ff3cc0f..8fe4be9 100644 --- a/src/chroma_window.h +++ b/src/chroma_window.h @@ -2,7 +2,7 @@ #define __CHROMAKEY__H_ #include "qtheaders.h" - +#include "main_window.h" class ChromaWindow : public QDialog { Q_OBJECT @@ -13,6 +13,8 @@ public: void setEditFromColor(int val, QColor color); void enableKey(bool op); void showGL(); + AC_MainWindow *main_window; + public slots: void openColorSelectRange(); void openColorSelectTolerance(); diff --git a/src/main_window.cpp b/src/main_window.cpp index 11450b7..6bd80ab 100644 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -165,6 +165,7 @@ AC_MainWindow::AC_MainWindow(QWidget *parent) : QMainWindow(parent) { filters->setCurrentIndex(cindex); chroma_window = new ChromaWindow(this); chroma_window->hide(); + chroma_window->main_window = this; define_window = new DefineWindow(this); define_window->hide(); define_window->main_window = this; @@ -187,7 +188,7 @@ AC_MainWindow::AC_MainWindow(QWidget *parent) : QMainWindow(parent) { } bool AC_MainWindow::checkAdd(QString str) { - const char *ex[] = { "Zoom", "AcidShuffleMedian", "MatrixColorBlur", "AlphaBlendArrayExpand", "Zoom", "ImageXorSmooth", "SketchFilter", "SlideSub", "Histogram", "Desktop","MultiVideo","Solo", "Bars", "BilateralFilter", "BilateralFilterFade", "BoxFilter", "CurrentDesktopRect", "HorizontalTrailsInter", "IntertwineAlpha", "IntertwineAlphaBlend", "IntertwineVideo640", "RandomAlphaBlendFilter", "RandomOrigFrame", "RectangleGlitch", "SquareSwap64x32", "VideoColorMap", 0}; + const char *ex[] = { "ExpandSquareVertical", "DistortPixelate128", "Zoom", "AcidShuffleMedian", "MatrixColorBlur", "AlphaBlendArrayExpand", "Zoom", "ImageXorSmooth", "SketchFilter", "SlideSub", "Histogram", "Desktop","MultiVideo","Solo", "Bars", "BilateralFilter", "BilateralFilterFade", "BoxFilter", "CurrentDesktopRect", "HorizontalTrailsInter", "IntertwineAlpha", "IntertwineAlphaBlend", "IntertwineVideo640", "RandomAlphaBlendFilter", "RandomOrigFrame", "RectangleGlitch", "SquareSwap64x32", "VideoColorMap", 0}; std::string val = str.toStdString(); for(int i = 0; ex[i] != 0; ++i) diff --git a/src/main_window.h b/src/main_window.h index f7a8e7b..07c502d 100644 --- a/src/main_window.h +++ b/src/main_window.h @@ -24,6 +24,7 @@ #include "slitscan_win.h" class SearchWindow; +class ChromaWindow; class AC_MainWindow : public QMainWindow { Q_OBJECT @@ -79,6 +80,9 @@ public: void setOptionString(std::string op, std::string value); void setProcMode(int index); bool checkAdd(QString str); + + Playback *playback; + public slots: void showRange(); void chk_Joystick(); @@ -145,6 +149,7 @@ public slots: void next_filter(); void prev_filter(); void showSlit(); + private: void createControls(); void createMenu(); @@ -169,7 +174,6 @@ private: QString output_directory; bool take_snapshot; unsigned long file_pos, frame_index; - Playback *playback; VideoMode programMode; void buildVector(std::vector &v); bool loading; diff --git a/src/playback_thread.cpp b/src/playback_thread.cpp index d0c611f..1049106 100644 --- a/src/playback_thread.cpp +++ b/src/playback_thread.cpp @@ -407,6 +407,10 @@ void Playback::run() { blend_image = blend_image_copy.clone(); blend_image_copy_set = false; } + if(chroma_image_set) { + color_replace_image = chroma_image.clone(); + chroma_image_set = false; + } mutex.unlock(); cv::Mat temp_frame; @@ -625,6 +629,13 @@ void Playback::setImage(const cv::Mat &frame) { mutex.unlock(); } +void Playback::setChromaImage(cv::Mat &frame) { + mutex.lock(); + chroma_image = frame.clone(); + chroma_image_set = true; + mutex.unlock(); +} + void Playback::setFadeFilter(bool f) { mutex.lock(); fadefilter = f; diff --git a/src/playback_thread.h b/src/playback_thread.h index 9c53f44..19a49e9 100644 --- a/src/playback_thread.h +++ b/src/playback_thread.h @@ -22,6 +22,8 @@ private: QMutex mutex, mutex_shown, mutex_add; QWaitCondition condition; cv::Mat frame; + cv::Mat chroma_image; + std::atomic chroma_image_set; std::atomic frame_rate; std::atomic recording; cv::VideoCapture capture; @@ -105,6 +107,7 @@ public: unsigned long calcMem(); void setCustomCycle(bool b); void setCustomCycleDelay(int delay); + void setChromaImage(cv::Mat &frame); signals: void procImage(const QImage image); void stopRecording(); diff --git a/src/search_box.cpp b/src/search_box.cpp index ea6a4c6..671bd53 100644 --- a/src/search_box.cpp +++ b/src/search_box.cpp @@ -18,7 +18,7 @@ SearchWindow::SearchWindow(QWidget *parent) : QDialog(parent) { bool SearchWindow::checkAdd(QString str) { - const char *ex[] = { "Zoom", "AcidShuffleMedian", "MatrixColorBlur", "AlphaBlendArrayExpand", "Zoom", "ImageXorSmooth", "SketchFilter", "SlideSub", "Histogram", "Desktop","MultiVideo","Solo", "Bars", "BilateralFilter", "BilateralFilterFade", "BoxFilter", "CurrentDesktopRect", "HorizontalTrailsInter", "IntertwineAlpha", "IntertwineAlphaBlend", "IntertwineVideo640", "RandomAlphaBlendFilter", "RandomOrigFrame", "RectangleGlitch", "SquareSwap64x32", "VideoColorMap", 0}; + const char *ex[] = { "ExpandSquareVertical", "DistortPixelate128", "Zoom", "AcidShuffleMedian", "MatrixColorBlur", "AlphaBlendArrayExpand", "Zoom", "ImageXorSmooth", "SketchFilter", "SlideSub", "Histogram", "Desktop","MultiVideo","Solo", "Bars", "BilateralFilter", "BilateralFilterFade", "BoxFilter", "CurrentDesktopRect", "HorizontalTrailsInter", "IntertwineAlpha", "IntertwineAlphaBlend", "IntertwineVideo640", "RandomAlphaBlendFilter", "RandomOrigFrame", "RectangleGlitch", "SquareSwap64x32", "VideoColorMap", 0}; std::string val = str.toStdString(); for(int i = 0; ex[i] != 0; ++i)