-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
212 lines (176 loc) · 7.26 KB
/
Copy pathmainwindow.cpp
File metadata and controls
212 lines (176 loc) · 7.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QDateTime>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, videoProcessor(new VideoProcessor(this))
{
ui->setupUi(this);
setupConnections();
// Varsayılan çıktı dizini
ui->lineEdit_output_dir->setText("tmp/cv2output");
// Progress bar'ı başlangıçta sıfırla
ui->progressBar_status_bar->setValue(0);
ui->progressBar_status_bar->setMinimum(0);
// Timer for progress bar animation (optional)
progressTimer = new QTimer(this);
connect(progressTimer, &QTimer::timeout, this, &MainWindow::updateProgressAnimation);
}
MainWindow::~MainWindow()
{
if(progressTimer && progressTimer->isActive()) {
progressTimer->stop();
}
delete ui;
}
void MainWindow::setupConnections()
{
connect(videoProcessor, &VideoProcessor::progressUpdated, this, &MainWindow::onProgressUpdated);
connect(videoProcessor, &VideoProcessor::finished, this, &MainWindow::onFinished);
connect(videoProcessor, &VideoProcessor::errorOccurred, this, &MainWindow::onErrorOccurred);
connect(videoProcessor, &VideoProcessor::logMessage, this, &MainWindow::onLogMessage);
connect(videoProcessor, &VideoProcessor::totalFramesDetected, this, &MainWindow::onTotalFramesDetected);
}
void MainWindow::on_pushButton_select_video_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,
"Video Dosyası Seç", "",
"Video Files (*.mp4 *.avi *.mov *.mkv *.wmv *.flv *.mpeg *.mpg);;All Files (*.*)");
if(!fileName.isEmpty()) {
ui->lineEdit_input_video->setText(fileName);
// Video seçildiğinde çıktı dizinini otomatik ayarla
QFileInfo fileInfo(fileName);
QString autoOutputDir = QString("output_%1").arg(fileInfo.baseName());
ui->lineEdit_output_dir->setText(autoOutputDir);
addLogWithTimestamp("Video seçildi: " + fileName);
}
}
void MainWindow::on_pushButton_select_output_dir_clicked()
{
QString dir = QFileDialog::getExistingDirectory(this,
"Çıktı Dizinini Seç", "",
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if(!dir.isEmpty()) {
ui->lineEdit_output_dir->setText(dir);
addLogWithTimestamp("Çıktı dizini seçildi: " + dir);
}
}
void MainWindow::on_pushButton_start_clicked()
{
if(ui->lineEdit_input_video->text().isEmpty()) {
QMessageBox::warning(this, "Uyarı", "Lütfen bir video dosyası seçin!");
return;
}
if(!QFile::exists(ui->lineEdit_input_video->text())) {
QMessageBox::critical(this, "Hata", "Seçilen video dosyası bulunamadı!");
return;
}
videoProcessor->setVideoPath(ui->lineEdit_input_video->text());
videoProcessor->setOutputDir(ui->lineEdit_output_dir->text());
ui->pushButton_start->setEnabled(false);
ui->pushButton_stop->setEnabled(true);
ui->progressBar_status_bar->setValue(0);
// Clear previous logs but keep initial message
ui->textBrowser_output->clear();
addLogWithTimestamp("Video ayrıştırma işlemi başlatılıyor...");
addLogWithTimestamp(QString("Kaynak: %1").arg(ui->lineEdit_input_video->text()));
addLogWithTimestamp(QString("Hedef: %1").arg(ui->lineEdit_output_dir->text()));
// Start progress animation
if(progressTimer) {
progressTimer->start(100); // Update every 100ms
}
videoProcessor->start();
}
void MainWindow::on_pushButton_stop_clicked()
{
addLogWithTimestamp("Kullanıcı tarafından durduruluyor...");
videoProcessor->stopProcessing();
ui->pushButton_stop->setEnabled(false);
if(progressTimer && progressTimer->isActive()) {
progressTimer->stop();
}
}
void MainWindow::onProgressUpdated(int frameNumber)
{
// Progress bar'ı güncelle
if(totalFrames > 0) {
int progress = static_cast<int>((static_cast<double>(frameNumber) / totalFrames) * 100);
ui->progressBar_status_bar->setValue(progress);
} else {
// Eğer toplam frame bilinmiyorsa, sadece frame numarasını göster
ui->progressBar_status_bar->setValue(frameNumber % 100); // 0-99 arası döngü
}
// Her 100 frame'de bir detaylı log ekle
if(frameNumber % 100 == 0 && frameNumber > 0) {
QString speedInfo = "";
if(!lastFrameTime.isNull()) {
qint64 elapsed = lastFrameTime.msecsTo(QTime::currentTime());
if(elapsed > 0) {
double framesPerSecond = 100000.0 / elapsed; // 100 frame için FPS
speedInfo = QString(" | Hız: %1 fps").arg(framesPerSecond, 0, 'f', 1);
}
}
lastFrameTime = QTime::currentTime();
QString percentInfo = "";
if(totalFrames > 0) {
double percent = (static_cast<double>(frameNumber) / totalFrames) * 100.0;
percentInfo = QString(" | %%%1").arg(percent, 0, 'f', 1);
}
addLogWithTimestamp(QString("✓ %1. kare işlendi%2%3")
.arg(frameNumber)
.arg(percentInfo)
.arg(speedInfo));
}
}
void MainWindow::onFinished()
{
ui->pushButton_start->setEnabled(true);
ui->pushButton_stop->setEnabled(false);
ui->progressBar_status_bar->setValue(100);
addLogWithTimestamp("✓ Video ayrıştırma işlemi başarıyla tamamlandı!");
if(progressTimer && progressTimer->isActive()) {
progressTimer->stop();
}
}
void MainWindow::onErrorOccurred(const QString &error)
{
QMessageBox::critical(this, "Hata", error);
ui->pushButton_start->setEnabled(true);
ui->pushButton_stop->setEnabled(false);
addLogWithTimestamp("✗ HATA: " + error);
if(progressTimer && progressTimer->isActive()) {
progressTimer->stop();
}
}
void MainWindow::onLogMessage(const QString &message)
{
addLogWithTimestamp(message);
}
void MainWindow::onTotalFramesDetected(int frames)
{
totalFrames = frames;
addLogWithTimestamp(QString("Video analiz edildi: Toplam %1 kare tespit edildi").arg(frames));
ui->progressBar_status_bar->setMaximum(100); // Yüzde bazında ilerleme
}
void MainWindow::addLogWithTimestamp(const QString &message)
{
QString timestamp = QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss");
ui->textBrowser_output->append(QString("[%1] %2").arg(timestamp, message));
// Scroll to bottom automatically
QTextCursor cursor = ui->textBrowser_output->textCursor();
cursor.movePosition(QTextCursor::End);
ui->textBrowser_output->setTextCursor(cursor);
}
void MainWindow::updateProgressAnimation()
{
// Progress bar animasyonu (sadece toplam frame bilinmediğinde)
if(totalFrames == 0) {
int currentValue = ui->progressBar_status_bar->value();
currentValue = (currentValue + 1) % 100;
ui->progressBar_status_bar->setValue(currentValue);
}
}