thumbnail/waveform generation

This commit is contained in:
itsmattkc
2018-06-15 20:17:05 -07:00
parent f8ce6c08f8
commit dc8d4728fc
29 changed files with 849 additions and 479 deletions
+23 -18
View File
@@ -20,23 +20,7 @@ EffectControls::EffectControls(QWidget *parent) :
init_effects();
clip = NULL;
set_clip(NULL);
effects_menu = new QMenu(this);
for (int i=0;i<VIDEO_EFFECT_COUNT;i++) {
QAction* action = new QAction();
action->setText(video_effect_names.at(i));
action->setData(i);
effects_menu->addAction(action);
}
effects_menu->addSeparator();
for (int i=0;i<AUDIO_EFFECT_COUNT;i++) {
QAction* action = new QAction();
action->setText(audio_effect_names.at(i));
action->setData(i);
effects_menu->addAction(action);
}
connect(effects_menu, SIGNAL(triggered(QAction*)), this, SLOT(menu_select(QAction*)));
set_clip(NULL);
}
void EffectControls::menu_select(QAction* q) {
@@ -51,7 +35,28 @@ EffectControls::~EffectControls()
void EffectControls::on_pushButton_clicked()
{
effects_menu->exec(QCursor::pos());
int lim;
QVector<QString>* effect_names;
if (clip->track < 0) {
lim = VIDEO_EFFECT_COUNT;
effect_names = &video_effect_names;
} else {
lim = AUDIO_EFFECT_COUNT;
effect_names = &audio_effect_names;
}
QMenu effects_menu(this);
for (int i=0;i<lim;i++) {
QAction* action = new QAction(&effects_menu);
action->setText(effect_names->at(i));
action->setData(i);
effects_menu.addAction(action);
}
connect(&effects_menu, SIGNAL(triggered(QAction*)), this, SLOT(menu_select(QAction*)));
effects_menu.exec(QCursor::pos());
}
void EffectControls::set_clip(Clip* c) {
+1 -2
View File
@@ -25,8 +25,7 @@ private slots:
private:
Ui::EffectControls *ui;
Clip* clip;
QMenu* effects_menu;
Clip* clip;
};
#endif // EFFECTCONTROLS_H
+15 -5
View File
@@ -7,6 +7,10 @@
#include "panels/viewer.h"
#include "playback/playback.h"
#include "effects/effects.h"
#include "panels/timeline.h"
#include "project/sequence.h"
#include "project/effect.h"
#include "io/previewgenerator.h"
#include <QFileDialog>
#include <QString>
@@ -17,10 +21,6 @@
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include "panels/timeline.h"
#include "project/sequence.h"
#include "project/effect.h"
extern "C" {
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
@@ -76,6 +76,8 @@ void Project::new_sequence(Sequence *s) {
source_table = ui->treeWidget;
project_changed = true;
set_sequence(s);
}
Media* Project::import_file(QString file) {
@@ -110,6 +112,8 @@ Media* Project::import_file(QString file) {
qDebug() << "[ERROR] Unsupported codec in stream %d.\n";
} else {
MediaStream* ms = new MediaStream();
ms->preview_done = false;
ms->preview_lock.lock();
ms->file_index = i;
if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
qDebug() << "[WARNING] INFINITE_LENGTH calculation is inaccurate in this build\n";
@@ -143,7 +147,13 @@ Media* Project::import_file(QString file) {
project_changed = true;
}
}
avformat_close_input(&pFormatCtx);
PreviewGenerator* pg = new PreviewGenerator();
pg->fmt_ctx = pFormatCtx; // cleaned up in PG
pg->media = m;
connect(pg, SIGNAL(finished()), pg, SLOT(deleteLater()));
pg->run();
delete [] filename;
return m;
}
+2 -1
View File
@@ -14,6 +14,7 @@
#include "playback/playback.h"
#include <QTime>
#include <QtMath>
Timeline::Timeline(QWidget *parent) :
QDockWidget(parent),
@@ -120,7 +121,7 @@ void Timeline::update_sequence() {
} else {
setWindowTitle("Timeline: " + sequence->name);
redraw_all_clips();
playback_updater.setInterval(floor(1000 / sequence->frame_rate));
playback_updater.setInterval(qFloor(1000 / sequence->frame_rate));
}
}
+3
View File
@@ -340,6 +340,9 @@
<height>15</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property>
</widget>
</item>
<item>
+12 -12
View File
@@ -18,7 +18,7 @@ Viewer::Viewer(QWidget *parent) :
{
ui->setupUi(this);
ui->glViewerPane->child = ui->openGLWidget;
viewer_widget = ui->openGLWidget;
viewer_widget = ui->openGLWidget;
update_sequence();
}
@@ -31,22 +31,22 @@ Viewer::~Viewer()
void Viewer::update_sequence() {
bool null_sequence = (sequence == NULL);
ui->openGLWidget->setEnabled(!null_sequence);
ui->openGLWidget->setVisible(!null_sequence);
ui->pushButton->setEnabled(!null_sequence);
ui->pushButton_2->setEnabled(!null_sequence);
ui->pushButton_3->setEnabled(!null_sequence);
ui->pushButton_4->setEnabled(!null_sequence);
ui->pushButton_5->setEnabled(!null_sequence);
ui->openGLWidget->setEnabled(!null_sequence);
ui->openGLWidget->setVisible(!null_sequence);
ui->pushButton->setEnabled(!null_sequence);
ui->pushButton_2->setEnabled(!null_sequence);
ui->pushButton_3->setEnabled(!null_sequence);
ui->pushButton_4->setEnabled(!null_sequence);
ui->pushButton_5->setEnabled(!null_sequence);
init_audio();
if (!null_sequence) {
ui->glViewerPane->aspect_ratio = (float) sequence->width / (float) sequence->height;
if (!null_sequence) {
ui->glViewerPane->aspect_ratio = (float) sequence->width / (float) sequence->height;
ui->glViewerPane->adjust();
}
}
update();
update();
}
void Viewer::on_pushButton_clicked()
+4 -10
View File
@@ -49,18 +49,12 @@
<widget class="ViewerWidget" name="openGLWidget">
<property name="geometry">
<rect>
<x>130</x>
<y>60</y>
<width>301</width>
<height>221</height>
<x>110</x>
<y>50</y>
<width>300</width>
<height>200</height>
</rect>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
</widget>
</widget>
</item>