First commit of brand new rewrite

This commit is contained in:
itsmattkc
2018-05-30 03:24:12 +10:00
commit 244c092591
86 changed files with 8016 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
#include "aboutdialog.h"
#include "ui_aboutdialog.h"
AboutDialog::AboutDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AboutDialog)
{
ui->setupUi(this);
}
AboutDialog::~AboutDialog()
{
delete ui;
}
+22
View File
@@ -0,0 +1,22 @@
#ifndef ABOUTDIALOG_H
#define ABOUTDIALOG_H
#include <QDialog>
namespace Ui {
class AboutDialog;
}
class AboutDialog : public QDialog
{
Q_OBJECT
public:
explicit AboutDialog(QWidget *parent = 0);
~AboutDialog();
private:
Ui::AboutDialog *ui;
};
#endif // ABOUTDIALOG_H
+77
View File
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>AboutDialog</class>
<widget class="QDialog" name="AboutDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>320</width>
<height>180</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Olive is a professional video editor.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>AboutDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>AboutDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+437
View File
@@ -0,0 +1,437 @@
#include "exportdialog.h"
#include "ui_exportdialog.h"
#include <QOpenGLWidget>
#include <QFileDialog>
#include <QThread>
#include <QDebug>
#include "panels/panels.h"
#include "panels/viewer.h"
#include "panels/timeline.h"
#include "ui/viewerwidget.h"
#include "project/sequence.h"
#include "io/exportthread.h"
extern "C" {
#include <libavformat/avformat.h>
}
enum ExportFormats {
FORMAT_3GPP,
FORMAT_AIFF,
FORMAT_APNG,
FORMAT_AVI,
FORMAT_DNXHD,
FORMAT_AC3,
FORMAT_FLV,
FORMAT_GIF,
FORMAT_IMG,
FORMAT_MP2,
FORMAT_MP3,
FORMAT_MPEG1,
FORMAT_MPEG2,
FORMAT_MPEG4,
FORMAT_MPEGTS,
FORMAT_MKV,
FORMAT_OGG,
FORMAT_MOV,
FORMAT_WAV,
FORMAT_WEBM,
FORMAT_WMV,
FORMAT_SIZE
};
ExportDialog::ExportDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ExportDialog)
{
ui->setupUi(this);
format_strings.resize(FORMAT_SIZE);
format_strings[FORMAT_3GPP] = "3GPP";
format_strings[FORMAT_AIFF] = "AIFF";
format_strings[FORMAT_APNG] = "Animated PNG";
format_strings[FORMAT_AVI] = "AVI";
format_strings[FORMAT_DNXHD] = "DNxHD";
format_strings[FORMAT_AC3] = "Dolby Digital (AC3)";
format_strings[FORMAT_FLV] = "FLV";
format_strings[FORMAT_GIF] = "GIF";
format_strings[FORMAT_IMG] = "Image Sequence";
format_strings[FORMAT_MP2] = "MP2 Audio";
format_strings[FORMAT_MP3] = "MP3 Audio";
format_strings[FORMAT_MPEG1] = "MPEG-1 Video";
format_strings[FORMAT_MPEG2] = "MPEG-2 Video";
format_strings[FORMAT_MPEG4] = "MPEG-4 Video";
format_strings[FORMAT_MPEGTS] = "MPEG-TS";
format_strings[FORMAT_MKV] = "Matroska MKV";
format_strings[FORMAT_OGG] = "Ogg";
format_strings[FORMAT_MOV] = "QuickTime MOV";
format_strings[FORMAT_WAV] = "WAVE Audio";
format_strings[FORMAT_WEBM] = "WebM";
format_strings[FORMAT_WMV] = "Windows Media";
for (int i=0;i<FORMAT_SIZE;i++) {
ui->formatCombobox->addItem(format_strings[i]);
}
ui->formatCombobox->setCurrentIndex(FORMAT_MPEG4);
}
ExportDialog::~ExportDialog()
{
delete ui;
}
void ExportDialog::on_formatCombobox_currentIndexChanged(int index)
{
format_vcodecs.clear();
format_acodecs.clear();
ui->vcodecCombobox->clear();
ui->acodecCombobox->clear();
int default_vcodec = 0;
int default_acodec = 0;
switch (index) {
case FORMAT_3GPP:
format_vcodecs.append(AV_CODEC_ID_MPEG4);
format_vcodecs.append(AV_CODEC_ID_H264);
format_acodecs.append(AV_CODEC_ID_AAC);
default_vcodec = 1;
break;
case FORMAT_AIFF:
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
break;
case FORMAT_APNG:
format_vcodecs.append(AV_CODEC_ID_APNG);
break;
case FORMAT_AVI:
format_vcodecs.append(AV_CODEC_ID_H264);
format_vcodecs.append(AV_CODEC_ID_MPEG4);
format_vcodecs.append(AV_CODEC_ID_MJPEG);
format_vcodecs.append(AV_CODEC_ID_MSVIDEO1);
format_vcodecs.append(AV_CODEC_ID_RAWVIDEO);
format_vcodecs.append(AV_CODEC_ID_HUFFYUV);
format_vcodecs.append(AV_CODEC_ID_DVVIDEO);
format_acodecs.append(AV_CODEC_ID_AAC);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_FLAC);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
default_vcodec = 3;
default_acodec = 5;
break;
case FORMAT_DNXHD:
format_vcodecs.append(AV_CODEC_ID_DNXHD);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
break;
case FORMAT_AC3:
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_EAC3);
break;
case FORMAT_FLV:
format_vcodecs.append(AV_CODEC_ID_FLV1);
format_acodecs.append(AV_CODEC_ID_MP3);
break;
case FORMAT_GIF:
format_vcodecs.append(AV_CODEC_ID_GIF);
break;
case FORMAT_IMG:
format_vcodecs.append(AV_CODEC_ID_BMP);
format_vcodecs.append(AV_CODEC_ID_MJPEG);
format_vcodecs.append(AV_CODEC_ID_JPEG2000);
format_vcodecs.append(AV_CODEC_ID_PSD);
format_vcodecs.append(AV_CODEC_ID_PNG);
format_vcodecs.append(AV_CODEC_ID_TIFF);
default_vcodec = 4;
break;
case FORMAT_MP2:
format_acodecs.append(AV_CODEC_ID_MP2);
break;
case FORMAT_MP3:
format_acodecs.append(AV_CODEC_ID_MP3);
break;
case FORMAT_MPEG1:
format_vcodecs.append(AV_CODEC_ID_MPEG1VIDEO);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
default_acodec = 1;
break;
case FORMAT_MPEG2:
format_vcodecs.append(AV_CODEC_ID_MPEG2VIDEO);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
default_acodec = 1;
break;
case FORMAT_MPEG4:
format_vcodecs.append(AV_CODEC_ID_MPEG4);
format_vcodecs.append(AV_CODEC_ID_H264);
format_acodecs.append(AV_CODEC_ID_AAC);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
default_vcodec = 1;
break;
case FORMAT_MPEGTS:
format_vcodecs.append(AV_CODEC_ID_MPEG2VIDEO);
format_acodecs.append(AV_CODEC_ID_AAC);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
default_acodec = 2;
break;
case FORMAT_MKV:
format_vcodecs.append(AV_CODEC_ID_MPEG4);
format_vcodecs.append(AV_CODEC_ID_H264);
format_acodecs.append(AV_CODEC_ID_AAC);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_EAC3);
format_acodecs.append(AV_CODEC_ID_FLAC);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
format_acodecs.append(AV_CODEC_ID_OPUS);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
format_acodecs.append(AV_CODEC_ID_VORBIS);
format_acodecs.append(AV_CODEC_ID_WAVPACK);
format_acodecs.append(AV_CODEC_ID_WMAV1);
format_acodecs.append(AV_CODEC_ID_WMAV2);
default_vcodec = 1;
break;
case FORMAT_OGG:
format_vcodecs.append(AV_CODEC_ID_THEORA);
format_acodecs.append(AV_CODEC_ID_OPUS);
format_acodecs.append(AV_CODEC_ID_VORBIS);
default_acodec = AV_CODEC_ID_VORBIS;
break;
case FORMAT_MOV:
format_vcodecs.append(AV_CODEC_ID_QTRLE);
format_vcodecs.append(AV_CODEC_ID_MPEG4);
format_vcodecs.append(AV_CODEC_ID_H264);
format_vcodecs.append(AV_CODEC_ID_MJPEG);
format_vcodecs.append(AV_CODEC_ID_PRORES);
format_acodecs.append(AV_CODEC_ID_AAC);
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_MP2);
format_acodecs.append(AV_CODEC_ID_MP3);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
default_vcodec = 2;
break;
case FORMAT_WAV:
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
break;
case FORMAT_WEBM:
format_vcodecs.append(AV_CODEC_ID_VP8);
format_vcodecs.append(AV_CODEC_ID_VP9);
format_acodecs.append(AV_CODEC_ID_OPUS);
format_acodecs.append(AV_CODEC_ID_VORBIS);
default_vcodec = 1;
break;
case FORMAT_WMV:
format_vcodecs.append(AV_CODEC_ID_WMV1);
format_vcodecs.append(AV_CODEC_ID_WMV2);
format_acodecs.append(AV_CODEC_ID_WMAV1);
format_acodecs.append(AV_CODEC_ID_WMAV2);
default_vcodec = 1;
default_acodec = 1;
break;
default:
qDebug() << "[ERROR] Invalid format selection - this is a bug, please inform the developers";
}
AVCodec* codec_info;
for (int i=0;i<format_vcodecs.size();i++) {
codec_info = avcodec_find_encoder((enum AVCodecID) format_vcodecs.at(i));
if (codec_info == NULL) {
ui->vcodecCombobox->addItem("NULL");
} else {
ui->vcodecCombobox->addItem(codec_info->long_name);
}
}
for (int i=0;i<format_acodecs.size();i++) {
codec_info = avcodec_find_encoder((enum AVCodecID) format_acodecs.at(i));
if (codec_info == NULL) {
ui->acodecCombobox->addItem("NULL");
} else {
ui->acodecCombobox->addItem(codec_info->long_name);
}
}
ui->vcodecCombobox->setCurrentIndex(default_vcodec);
ui->acodecCombobox->setCurrentIndex(default_acodec);
bool video_enabled = format_vcodecs.size() != 0;
bool audio_enabled = format_acodecs.size() != 0;
ui->videoGroupbox->setChecked(video_enabled);
ui->audioGroupbox->setChecked(audio_enabled);
ui->videoGroupbox->setEnabled(video_enabled);
ui->audioGroupbox->setEnabled(audio_enabled);
}
void ExportDialog::on_pushButton_2_clicked()
{
close();
}
void ExportDialog::on_pushButton_clicked()
{
QString ext;
switch (ui->formatCombobox->currentIndex()) {
case FORMAT_3GPP:
ext = "3gp";
break;
case FORMAT_AIFF:
ext = "aiff";
break;
case FORMAT_APNG:
ext = "apng";
break;
case FORMAT_AVI:
ext = "avi";
break;
case FORMAT_DNXHD:
ext = "mxf";
break;
case FORMAT_AC3:
ext = "ac3";
break;
case FORMAT_FLV:
ext = "flv";
break;
case FORMAT_GIF:
ext = "gif";
break;
case FORMAT_IMG:
// ext_name = "";
// ext = "";
// ext is determined from codec, but we prevent the switch from going to 'default' here
qDebug() << "[INFO] Image export not implemented yet";
return;
break;
case FORMAT_MP3:
ext = "mp3";
break;
case FORMAT_MPEG1:
if (ui->videoGroupbox->isChecked() && !ui->audioGroupbox->isChecked()) {
ext = "m1v";
} else if (!ui->videoGroupbox->isChecked() && ui->audioGroupbox->isChecked()) {
ext = "m1a";
} else {
ext = "mpg";
}
break;
case FORMAT_MPEG2:
if (ui->videoGroupbox->isChecked() && !ui->audioGroupbox->isChecked()) {
ext = "m2v";
} else if (!ui->videoGroupbox->isChecked() && ui->audioGroupbox->isChecked()) {
ext = "m2a";
} else {
ext = "mpg";
}
break;
case FORMAT_MPEG4:
if (ui->videoGroupbox->isChecked() && !ui->audioGroupbox->isChecked()) {
ext = "m4v";
} else if (!ui->videoGroupbox->isChecked() && ui->audioGroupbox->isChecked()) {
ext = "m4a";
} else {
ext = "mp4";
}
break;
case FORMAT_MPEGTS:
ext = "ts";
break;
case FORMAT_MKV:
if (!ui->videoGroupbox->isChecked()) {
ext = "mka";
} else {
ext = "mkv";
}
break;
case FORMAT_OGG:
ext = "ogg";
break;
case FORMAT_MOV:
ext = "mov";
break;
case FORMAT_WEBM:
ext = "webm";
break;
case FORMAT_WMV:
if (ui->videoGroupbox->isChecked()) {
ext = "wmv";
} else {
ext = "wma";
}
break;
default:
qDebug() << "[ERROR] Invalid format - this is a bug, please inform the developers";
return;
}
QString filename = QFileDialog::getSaveFileName(this, "Export Media", "", format_strings[ui->formatCombobox->currentIndex()] + " (*." + ext + ")");
if (!filename.isEmpty()) {
ExportThread* et = new ExportThread();
et->surface.create();
connect(et, SIGNAL(finished()), et, SLOT(deleteLater()));
connect(et, SIGNAL(progress_changed(int)), this, SLOT(update_progress_bar(int)));
panel_viewer->viewer_widget->context()->doneCurrent();
panel_viewer->viewer_widget->context()->moveToThread(et);
et->filename = filename;
et->video_enabled = ui->videoGroupbox->isChecked();
et->video_codec = format_vcodecs.at(ui->vcodecCombobox->currentIndex());
et->video_width = ui->widthSpinbox->value();
et->video_height = ui->heightSpinbox->value();
et->video_frame_rate = ui->framerateSpinbox->value();
et->video_bitrate = ui->videobitrateSpinbox->value();
et->audio_enabled = ui->audioGroupbox->isChecked();
et->audio_codec = format_acodecs.at(ui->acodecCombobox->currentIndex());
et->audio_sampling_rate = 48000;
et->audio_bitrate = ui->audiobitrateSpinbox->value();
et->start();
}
}
void ExportDialog::set_defaults(Sequence* s) {
ui->widthSpinbox->setValue(s->width);
ui->heightSpinbox->setValue(s->height);
ui->samplingRateSpinbox->setValue(s->audio_frequency);
ui->framerateSpinbox->setValue(s->frame_rate);
}
void ExportDialog::update_progress_bar(int value) {
ui->progressBar->setValue(value);
}
+38
View File
@@ -0,0 +1,38 @@
#ifndef EXPORTDIALOG_H
#define EXPORTDIALOG_H
#include <QDialog>
namespace Ui {
class ExportDialog;
}
struct Sequence;
class ExportDialog : public QDialog
{
Q_OBJECT
public:
explicit ExportDialog(QWidget *parent = 0);
~ExportDialog();
void set_defaults(Sequence* s);
private slots:
void on_formatCombobox_currentIndexChanged(int index);
void on_pushButton_2_clicked();
void on_pushButton_clicked();
void update_progress_bar(int value);
private:
Ui::ExportDialog *ui;
QVector<QString> format_strings;
QVector<int> format_vcodecs;
QVector<int> format_acodecs;
};
#endif // EXPORTDIALOG_H
+232
View File
@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ExportDialog</class>
<widget class="QDialog" name="ExportDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>299</width>
<height>372</height>
</rect>
</property>
<property name="windowTitle">
<string>Export</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Format: </string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="formatCombobox"/>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="videoGroupbox">
<property name="title">
<string>Video</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Codec:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="vcodecCombobox"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="widthSpinbox">
<property name="maximum">
<number>16777216</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Height:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="heightSpinbox">
<property name="maximum">
<number>16777216</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Frame Rate:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QDoubleSpinBox" name="framerateSpinbox">
<property name="maximum">
<double>60.000000000000000</double>
</property>
<property name="value">
<double>0.000000000000000</double>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Bitrate (Mbps/CBR):</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QDoubleSpinBox" name="videobitrateSpinbox">
<property name="maximum">
<double>100.000000000000000</double>
</property>
<property name="value">
<double>2.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="audioGroupbox">
<property name="title">
<string>Audio</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Codec:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="acodecCombobox"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Sampling Rate:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="samplingRateSpinbox">
<property name="maximum">
<number>96000</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Bitrate (Kbps/CBR):</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="audiobitrateSpinbox">
<property name="maximum">
<number>320</number>
</property>
<property name="value">
<number>256</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QProgressBar" name="progressBar">
<property name="enabled">
<bool>false</bool>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Export</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
+110
View File
@@ -0,0 +1,110 @@
#include "newsequencedialog.h"
#include "ui_newsequencedialog.h"
#include "panels/panels.h"
#include "panels/project.h"
#include "project/sequence.h"
#include <QVariant>
#include <QDebug>
extern "C" {
#include <libavcodec/avcodec.h>
}
NewSequenceDialog::NewSequenceDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::NewSequenceDialog)
{
ui->setupUi(this);
ui->frame_rate_combobox->addItem("10 FPS", 10.0f);
ui->frame_rate_combobox->addItem("12.5 FPS", 12.5f);
ui->frame_rate_combobox->addItem("15 FPS", 15.0f);
ui->frame_rate_combobox->addItem("25 FPS", 25.0f);
ui->frame_rate_combobox->addItem("29.97 FPS", 29.97f);
ui->frame_rate_combobox->addItem("30 FPS", (float) 30.0f);
ui->frame_rate_combobox->addItem("50 FPS", (float) 50.0f);
ui->frame_rate_combobox->addItem("59.94 FPS", (float) 59.94f);
ui->frame_rate_combobox->addItem("60 FPS", (float) 60.0f);
ui->frame_rate_combobox->setCurrentIndex(4);
ui->audio_frequency_combobox->addItem("22050 Hz", 22050);
ui->audio_frequency_combobox->addItem("24000 Hz", 24000);
ui->audio_frequency_combobox->addItem("32000 Hz", 32000);
ui->audio_frequency_combobox->addItem("44100 Hz", 44100);
ui->audio_frequency_combobox->addItem("48000 Hz", 48000);
ui->audio_frequency_combobox->addItem("88200 Hz", 88200);
ui->audio_frequency_combobox->addItem("96000 Hz", 96000);
ui->audio_frequency_combobox->setCurrentIndex(4);
}
NewSequenceDialog::~NewSequenceDialog()
{
delete ui;
}
void NewSequenceDialog::set_sequence_name(const QString& s) {
ui->lineEdit->setText(s);
}
void NewSequenceDialog::on_buttonBox_accepted()
{
Sequence* s = new Sequence();
s->name = ui->lineEdit->text();
s->width = ui->width_numeric->value();
s->height = ui->height_numeric->value();
s->frame_rate = ui->frame_rate_combobox->currentData().toFloat();
s->audio_frequency = ui->audio_frequency_combobox->currentData().toInt();
s->audio_layout = AV_CH_LAYOUT_STEREO;
panel_project->new_sequence(s);
}
void NewSequenceDialog::on_comboBox_currentIndexChanged(int index)
{
switch (index) {
case 0: // FILM 4K
ui->width_numeric->setValue(4096);
ui->height_numeric->setValue(2160);
break;
case 1: // TV 4K
ui->width_numeric->setValue(3840);
ui->height_numeric->setValue(2160);
break;
case 2: // 1080p
ui->width_numeric->setValue(1920);
ui->height_numeric->setValue(1080);
break;
case 3: // 720p
ui->width_numeric->setValue(1280);
ui->height_numeric->setValue(720);
break;
case 4: // 480p
ui->width_numeric->setValue(640);
ui->height_numeric->setValue(480);
break;
case 5: // 360p
ui->width_numeric->setValue(640);
ui->height_numeric->setValue(360);
break;
case 6: // 240p
ui->width_numeric->setValue(320);
ui->height_numeric->setValue(240);
break;
case 7: // 144p
ui->width_numeric->setValue(192);
ui->height_numeric->setValue(144);
break;
case 8: // NTSC (480i)
ui->width_numeric->setValue(720);
ui->height_numeric->setValue(480);
break;
case 9: // PAL (576i)
ui->width_numeric->setValue(720);
ui->height_numeric->setValue(576);
break;
}
}
+30
View File
@@ -0,0 +1,30 @@
#ifndef NEWSEQUENCEDIALOG_H
#define NEWSEQUENCEDIALOG_H
#include <QDialog>
class Project;
namespace Ui {
class NewSequenceDialog;
}
class NewSequenceDialog : public QDialog
{
Q_OBJECT
public:
explicit NewSequenceDialog(QWidget *parent = 0);
~NewSequenceDialog();
void set_sequence_name(const QString& s);
private slots:
void on_buttonBox_accepted();
void on_comboBox_currentIndexChanged(int index);
private:
Ui::NewSequenceDialog *ui;
};
#endif // NEWSEQUENCEDIALOG_H
+360
View File
@@ -0,0 +1,360 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NewSequenceDialog</class>
<widget class="QDialog" name="NewSequenceDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>298</width>
<height>341</height>
</rect>
</property>
<property name="windowTitle">
<string>New Sequence</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Preset: </string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox">
<property name="currentIndex">
<number>2</number>
</property>
<item>
<property name="text">
<string>Film 4K</string>
</property>
</item>
<item>
<property name="text">
<string>TV 4K (Ultra HD/2160p)</string>
</property>
</item>
<item>
<property name="text">
<string>1080p</string>
</property>
</item>
<item>
<property name="text">
<string>720p</string>
</property>
</item>
<item>
<property name="text">
<string>480p</string>
</property>
</item>
<item>
<property name="text">
<string>360p</string>
</property>
</item>
<item>
<property name="text">
<string>240p</string>
</property>
</item>
<item>
<property name="text">
<string>144p</string>
</property>
</item>
<item>
<property name="text">
<string>NTSC (480i)</string>
</property>
</item>
<item>
<property name="text">
<string>PAL (576i)</string>
</property>
</item>
<item>
<property name="text">
<string>Custom</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Video</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="2" colspan="2">
<widget class="QSpinBox" name="height_numeric">
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>1080</number>
</property>
</widget>
</item>
<item row="0" column="2" colspan="2">
<widget class="QSpinBox" name="width_numeric">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>9999</number>
</property>
<property name="value">
<number>1920</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Width: </string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Pixel Aspect Ratio: </string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_7">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Interlacing:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Height: </string>
</property>
</widget>
</item>
<item row="4" column="2" colspan="2">
<widget class="QComboBox" name="par_combobox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Square Pixels (1.0)</string>
</property>
</item>
</widget>
</item>
<item row="6" column="2" colspan="2">
<widget class="QComboBox" name="interlacing_combobox">
<item>
<property name="text">
<string>None (Progressive)</string>
</property>
</item>
<item>
<property name="text">
<string>Upper Field First</string>
</property>
</item>
<item>
<property name="text">
<string>Lower Field First</string>
</property>
</item>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QComboBox" name="frame_rate_combobox"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>Frame Rate:</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Audio</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Sample Rate: </string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="audio_frequency_combobox"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>Name: </string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit">
<property name="text">
<string>Sequence 01</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
<property name="centerButtons">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>NewSequenceDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>NewSequenceDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>