mirror of
https://github.com/lostjared/Acid.Cam.v2.Qt.git
synced 2025-12-19 13:19:59 +01:00
seems to be working okay needs more testing
This commit is contained in:
@@ -53,14 +53,30 @@ void Playback::setVideo(cv::VideoCapture *cap, cv::VideoWriter *wr) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Playback::setVector(std::vector<std::pair<int, int>> v) {
|
||||||
|
mutex.lock();
|
||||||
|
current = v;
|
||||||
|
mutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
void Playback::run() {
|
void Playback::run() {
|
||||||
int delay = (1000/frame_rate);
|
int delay = (1000/frame_rate);
|
||||||
while(!stop) {
|
while(!stop) {
|
||||||
if(!capture->read(frame)) {
|
if(!capture->read(frame)) {
|
||||||
stop = true;
|
stop = true;
|
||||||
}
|
}
|
||||||
/* Add code to proc the image here */
|
mutex.lock();
|
||||||
|
if(current.size()>0) {
|
||||||
|
for(unsigned int i = 0; i < current.size(); ++i) {
|
||||||
|
if(current[i].first == 0) {
|
||||||
|
ac::draw_func[current[i].second](frame);
|
||||||
|
} else {
|
||||||
|
current_filterx = current[i].second;
|
||||||
|
ac::alphaFlame(frame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mutex.unlock();
|
||||||
if(frame.channels()==3) {
|
if(frame.channels()==3) {
|
||||||
cv::cvtColor(frame, rgb_frame, CV_BGR2RGB);
|
cv::cvtColor(frame, rgb_frame, CV_BGR2RGB);
|
||||||
img = QImage((const unsigned char*)(rgb_frame.data), rgb_frame.cols, rgb_frame.rows, QImage::Format_RGB888);
|
img = QImage((const unsigned char*)(rgb_frame.data), rgb_frame.cols, rgb_frame.rows, QImage::Format_RGB888);
|
||||||
@@ -68,10 +84,10 @@ void Playback::run() {
|
|||||||
img = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, QImage::Format_Indexed8);
|
img = QImage((const unsigned char*)(frame.data), frame.cols, frame.rows, QImage::Format_Indexed8);
|
||||||
|
|
||||||
}
|
}
|
||||||
emit procImage(img);
|
|
||||||
if(writer != 0 && writer->isOpened()) {
|
if(writer != 0 && writer->isOpened()) {
|
||||||
writer->write(frame);
|
writer->write(frame);
|
||||||
}
|
}
|
||||||
|
emit procImage(img);
|
||||||
this->msleep(delay);
|
this->msleep(delay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -282,8 +298,10 @@ void AC_MainWindow::addClicked() {
|
|||||||
QTextStream stream(&qs);
|
QTextStream stream(&qs);
|
||||||
stream << "Added Filter: " << item->text() << "\n";
|
stream << "Added Filter: " << item->text() << "\n";
|
||||||
Log(qs);
|
Log(qs);
|
||||||
|
std::vector<std::pair<int, int>> v;
|
||||||
|
buildVector(v);
|
||||||
|
playback->setVector(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AC_MainWindow::rmvClicked() {
|
void AC_MainWindow::rmvClicked() {
|
||||||
@@ -294,6 +312,10 @@ void AC_MainWindow::rmvClicked() {
|
|||||||
QTextStream stream(&qs);
|
QTextStream stream(&qs);
|
||||||
stream << "Removed Filter: " << i->text() << "\n";
|
stream << "Removed Filter: " << i->text() << "\n";
|
||||||
Log(qs);
|
Log(qs);
|
||||||
|
std::vector<std::pair<int, int>> v;
|
||||||
|
buildVector(v);
|
||||||
|
playback->setVector(v);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -303,6 +325,10 @@ void AC_MainWindow::upClicked() {
|
|||||||
QListWidgetItem *i = custom_filters->takeItem(item);
|
QListWidgetItem *i = custom_filters->takeItem(item);
|
||||||
custom_filters->insertItem(item-1, i->text());
|
custom_filters->insertItem(item-1, i->text());
|
||||||
custom_filters->setCurrentRow(item-1);
|
custom_filters->setCurrentRow(item-1);
|
||||||
|
std::vector<std::pair<int, int>> v;
|
||||||
|
buildVector(v);
|
||||||
|
playback->setVector(v);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -312,6 +338,9 @@ void AC_MainWindow::downClicked() {
|
|||||||
QListWidgetItem *i = custom_filters->takeItem(item);
|
QListWidgetItem *i = custom_filters->takeItem(item);
|
||||||
custom_filters->insertItem(item+1, i->text());
|
custom_filters->insertItem(item+1, i->text());
|
||||||
custom_filters->setCurrentRow(item+1);
|
custom_filters->setCurrentRow(item+1);
|
||||||
|
std::vector<std::pair<int, int>> v;
|
||||||
|
buildVector(v);
|
||||||
|
playback->setVector(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -470,7 +499,7 @@ void AC_MainWindow::controls_Stop() {
|
|||||||
if(capture_video.isOpened()) {
|
if(capture_video.isOpened()) {
|
||||||
playback->Stop();
|
playback->Stop();
|
||||||
capture_video.release();
|
capture_video.release();
|
||||||
writer.release();
|
if(recording == true) writer.release();
|
||||||
cv::destroyWindow("Acid Cam v2");
|
cv::destroyWindow("Acid Cam v2");
|
||||||
file_new_capture->setEnabled(true);
|
file_new_capture->setEnabled(true);
|
||||||
file_new_video->setEnabled(true);
|
file_new_video->setEnabled(true);
|
||||||
@@ -486,7 +515,7 @@ void AC_MainWindow::controls_Stop() {
|
|||||||
if(capture_camera.isOpened()) {
|
if(capture_camera.isOpened()) {
|
||||||
playback->Stop();
|
playback->Stop();
|
||||||
capture_camera.release();
|
capture_camera.release();
|
||||||
writer.release();
|
if(recording = true) writer.release();
|
||||||
cv::destroyWindow("Acid Cam v2");
|
cv::destroyWindow("Acid Cam v2");
|
||||||
file_new_capture->setEnabled(true);
|
file_new_capture->setEnabled(true);
|
||||||
file_new_video->setEnabled(true);
|
file_new_video->setEnabled(true);
|
||||||
@@ -660,6 +689,18 @@ void AC_MainWindow::timer_Video() {
|
|||||||
statusBar()->showMessage(frame_string);
|
statusBar()->showMessage(frame_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AC_MainWindow::buildVector(std::vector<std::pair<int,int>> &v) {
|
||||||
|
if(!v.empty()) v.erase(v.begin(), v.end());
|
||||||
|
for(int i = 0; i < custom_filters->count(); ++i) {
|
||||||
|
if(i == custom_filters->count()-1)
|
||||||
|
ac::in_custom = false;
|
||||||
|
|
||||||
|
QListWidgetItem *val = custom_filters->item(i);
|
||||||
|
QString name = val->text();
|
||||||
|
v.push_back(filter_map[name.toStdString()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
cv::Mat QImage2Mat(QImage const& src)
|
cv::Mat QImage2Mat(QImage const& src)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ private:
|
|||||||
cv::VideoWriter *writer;
|
cv::VideoWriter *writer;
|
||||||
cv::Mat rgb_frame;
|
cv::Mat rgb_frame;
|
||||||
QImage img;
|
QImage img;
|
||||||
|
std::vector<std::pair<int, int>> current;
|
||||||
public:
|
public:
|
||||||
Playback(QObject *parent = 0);
|
Playback(QObject *parent = 0);
|
||||||
~Playback();
|
~Playback();
|
||||||
@@ -25,6 +26,7 @@ public:
|
|||||||
bool isStopped() const;
|
bool isStopped() const;
|
||||||
void run();
|
void run();
|
||||||
void msleep(int ms);
|
void msleep(int ms);
|
||||||
|
void setVector(std::vector<std::pair<int, int>> s);
|
||||||
signals:
|
signals:
|
||||||
void procImage(const QImage &image);
|
void procImage(const QImage &image);
|
||||||
void procCameraFrame(void *frame);
|
void procCameraFrame(void *frame);
|
||||||
@@ -77,7 +79,7 @@ public slots:
|
|||||||
void timer_Video();
|
void timer_Video();
|
||||||
void updateFrame(QImage img);
|
void updateFrame(QImage img);
|
||||||
void CameraFrame(void *frame);
|
void CameraFrame(void *frame);
|
||||||
|
void buildVector(std::vector<std::pair<int,int>> &v);
|
||||||
private:
|
private:
|
||||||
void createControls();
|
void createControls();
|
||||||
void createMenu();
|
void createMenu();
|
||||||
|
|||||||
Reference in New Issue
Block a user