various improvements

This commit is contained in:
itsmattkc
2019-02-08 11:22:04 -08:00
parent 11f9465eae
commit 0ad58a6930
11 changed files with 435 additions and 228 deletions
+70
View File
@@ -0,0 +1,70 @@
#include "advancedvideodialog.h"
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QLabel>
#include <QComboBox>
#include <QDebug>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavutil/pixdesc.h>
}
AdvancedVideoDialog::AdvancedVideoDialog(QWidget *parent,
int encoding_codec,
VideoCodecParams &iparams) :
QDialog(parent),
params(iparams)
{
setWindowTitle(tr("Advanced Video Settings"));
// use variable for row to assist adding new fields to this dialog
int row = 0;
// get encoder information for this codec
AVCodec* codec_info = avcodec_find_encoder(static_cast<AVCodecID>(encoding_codec));
// set up grid layout for dialog
QGridLayout* layout = new QGridLayout(this);
// codec pixel formats
layout->addWidget(new QLabel(tr("Pixel Format:")), row, 0);
pix_fmt_combo = new QComboBox();
// load possible pixel formats for this codec into the combobox
int pix_fmt_index = 0;
// AVCodec->pix_fmts is terminated by "-1"
while (codec_info->pix_fmts[pix_fmt_index] != -1) {
pix_fmt_combo->addItem(av_get_pix_fmt_name(codec_info->pix_fmts[pix_fmt_index]),
codec_info->pix_fmts[pix_fmt_index]);
if (codec_info->pix_fmts[pix_fmt_index] == params.pix_fmt) {
pix_fmt_combo->setCurrentIndex(pix_fmt_combo->count()-1);
}
pix_fmt_index++;
}
layout->addWidget(pix_fmt_combo, row, 1);
row++;
// buttons
QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
buttons->setCenterButtons(true);
connect(buttons, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttons, SIGNAL(rejected()), this, SLOT(reject()));
layout->addWidget(buttons, row, 0, 1, 2);
}
void AdvancedVideoDialog::accept() {
// store settings back into struct
params.pix_fmt = pix_fmt_combo->currentData().toInt();
QDialog::accept();
}
+24
View File
@@ -0,0 +1,24 @@
#ifndef ADVANCEDVIDEODIALOG_H
#define ADVANCEDVIDEODIALOG_H
#include <QDialog>
#include "io/exportthread.h"
class QComboBox;
class AdvancedVideoDialog : public QDialog {
Q_OBJECT
public:
AdvancedVideoDialog(QWidget* parent,
int encoding_codec,
VideoCodecParams& iparams);
void accept();
private:
VideoCodecParams& params;
QComboBox* pix_fmt_combo;
};
#endif // ADVANCEDVIDEODIALOG_H
+176 -154
View File
@@ -16,6 +16,7 @@
#include <QProgressBar>
#include "debug.h"
#include "dialogs/advancedvideodialog.h"
#include "panels/panels.h"
#include "panels/viewer.h"
#include "panels/timeline.h"
@@ -103,10 +104,21 @@ ExportDialog::ExportDialog(QWidget *parent) :
ExportDialog::~ExportDialog()
{}
void ExportDialog::format_changed(int index)
{
format_vcodecs.clear();
format_acodecs.clear();
void ExportDialog::add_codec_to_combobox(QComboBox* box, enum AVCodecID codec) {
QString codec_name;
AVCodec* codec_info = avcodec_find_encoder(codec);
if (codec_info == nullptr) {
codec_name = tr("Unknown codec name %1").arg(static_cast<int>(codec));
} else {
codec_name = codec_info->long_name;
}
box->addItem(codec_name, codec);
}
void ExportDialog::format_changed(int index) {
vcodecCombobox->clear();
acodecCombobox->clear();
@@ -114,204 +126,186 @@ void ExportDialog::format_changed(int index)
int default_acodec = 0;
switch (index) {
case FORMAT_3GPP:
format_vcodecs.append(AV_CODEC_ID_MPEG4);
format_vcodecs.append(AV_CODEC_ID_H264);
case FORMAT_3GPP:
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MPEG4);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_H264);
format_acodecs.append(AV_CODEC_ID_AAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AAC);
default_vcodec = 1;
break;
case FORMAT_AIFF:
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
break;
case FORMAT_APNG:
format_vcodecs.append(AV_CODEC_ID_APNG);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_H264);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MPEG4);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MJPEG);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MSVIDEO1);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_RAWVIDEO);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_HUFFYUV);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_FLAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
default_vcodec = 3;
default_acodec = 5;
break;
case FORMAT_DNXHD:
format_vcodecs.append(AV_CODEC_ID_DNXHD);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_DNXHD);
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
break;
case FORMAT_AC3:
format_acodecs.append(AV_CODEC_ID_AC3);
format_acodecs.append(AV_CODEC_ID_EAC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_EAC3);
break;
case FORMAT_FLV:
format_vcodecs.append(AV_CODEC_ID_FLV1);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_FLV1);
format_acodecs.append(AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
break;
case FORMAT_GIF:
format_vcodecs.append(AV_CODEC_ID_GIF);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_BMP);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MJPEG);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_JPEG2000);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_PSD);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_PNG);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_TIFF);
default_vcodec = 4;
break;
case FORMAT_MP2:
format_acodecs.append(AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
break;
case FORMAT_MP3:
format_acodecs.append(AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
break;
case FORMAT_MPEG1:
format_vcodecs.append(AV_CODEC_ID_MPEG1VIDEO);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
default_acodec = 1;
break;
case FORMAT_MPEG2:
format_vcodecs.append(AV_CODEC_ID_MPEG2VIDEO);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, 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);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MPEG4);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
default_vcodec = 1;
break;
case FORMAT_MPEGTS:
format_vcodecs.append(AV_CODEC_ID_MPEG2VIDEO);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, 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);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MPEG4);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_EAC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_FLAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_OPUS);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_VORBIS);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_WAVPACK);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_WMAV1);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_WMAV2);
default_vcodec = 1;
break;
case FORMAT_OGG:
format_vcodecs.append(AV_CODEC_ID_THEORA);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_THEORA);
format_acodecs.append(AV_CODEC_ID_OPUS);
format_acodecs.append(AV_CODEC_ID_VORBIS);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_OPUS);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_VORBIS);
default_acodec = 1;
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);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_QTRLE);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MPEG4);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_H264);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_MJPEG);
add_codec_to_combobox(vcodecCombobox, 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);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AAC);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_AC3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_MP3);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
default_vcodec = 2;
break;
case FORMAT_WAV:
format_acodecs.append(AV_CODEC_ID_PCM_S16LE);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_PCM_S16LE);
break;
case FORMAT_WEBM:
format_vcodecs.append(AV_CODEC_ID_VP8);
format_vcodecs.append(AV_CODEC_ID_VP9);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_VP8);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_VP9);
format_acodecs.append(AV_CODEC_ID_OPUS);
format_acodecs.append(AV_CODEC_ID_VORBIS);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_OPUS);
add_codec_to_combobox(acodecCombobox, 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);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_WMV1);
add_codec_to_combobox(vcodecCombobox, AV_CODEC_ID_WMV2);
format_acodecs.append(AV_CODEC_ID_WMAV1);
format_acodecs.append(AV_CODEC_ID_WMAV2);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_WMAV1);
add_codec_to_combobox(acodecCombobox, AV_CODEC_ID_WMAV2);
default_vcodec = 1;
default_acodec = 1;
break;
default:
qCritical() << "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 == nullptr) {
vcodecCombobox->addItem("nullptr");
} else {
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 == nullptr) {
acodecCombobox->addItem("nullptr");
} else {
acodecCombobox->addItem(codec_info->long_name);
}
}
}
vcodecCombobox->setCurrentIndex(default_vcodec);
acodecCombobox->setCurrentIndex(default_acodec);
bool video_enabled = format_vcodecs.size() != 0;
bool audio_enabled = format_acodecs.size() != 0;
bool video_enabled = vcodecCombobox->count() != 0;
bool audio_enabled = acodecCombobox->count() != 0;
videoGroupbox->setChecked(video_enabled);
audioGroupbox->setChecked(audio_enabled);
videoGroupbox->setEnabled(video_enabled);
@@ -378,7 +372,7 @@ void ExportDialog::export_action() {
ext = "gif";
break;
case FORMAT_IMG:
switch (format_vcodecs.at(vcodecCombobox->currentIndex())) {
switch (vcodecCombobox->currentData().toInt()) {
case AV_CODEC_ID_BMP:
ext = "bmp";
break;
@@ -498,7 +492,32 @@ void ExportDialog::export_action() {
}
}
et = new ExportThread(this);
ExportParams params;
params.filename = filename;
params.video_enabled = videoGroupbox->isChecked();
if (params.video_enabled) {
params.video_codec = vcodecCombobox->currentData().toInt();
params.video_width = widthSpinbox->value();
params.video_height = heightSpinbox->value();
params.video_frame_rate = framerateSpinbox->value();
params.video_compression_type = compressionTypeCombobox->currentData().toInt();
params.video_bitrate = videobitrateSpinbox->value();
}
params.audio_enabled = audioGroupbox->isChecked();
if (params.audio_enabled) {
params.audio_codec = acodecCombobox->currentData().toInt();
params.audio_sampling_rate = samplingRateSpinbox->value();
params.audio_bitrate = audiobitrateSpinbox->value();
}
params.start_frame = 0;
params.end_frame = sequence->getEndFrame(); // entire sequence
if (rangeCombobox->currentIndex() == 1) {
params.start_frame = qMax(sequence->workarea_in, params.start_frame);
params.end_frame = qMin(sequence->workarea_out, params.end_frame);
}
et = new ExportThread(params, vcodec_params, this);
connect(et, SIGNAL(finished()), et, SLOT(deleteLater()));
connect(et, SIGNAL(finished()), this, SLOT(render_thread_finished()));
@@ -510,31 +529,7 @@ void ExportDialog::export_action() {
mainWindow->autorecover_interval();
prep_ui_for_render(true);
et->filename = filename;
et->video_enabled = videoGroupbox->isChecked();
if (et->video_enabled) {
et->video_codec = format_vcodecs.at(vcodecCombobox->currentIndex());
et->video_width = widthSpinbox->value();
et->video_height = heightSpinbox->value();
et->video_frame_rate = framerateSpinbox->value();
et->video_compression_type = compressionTypeCombobox->currentData().toInt();
et->video_bitrate = videobitrateSpinbox->value();
}
et->audio_enabled = audioGroupbox->isChecked();
if (et->audio_enabled) {
et->audio_codec = format_acodecs.at(acodecCombobox->currentIndex());
et->audio_sampling_rate = samplingRateSpinbox->value();
et->audio_bitrate = audiobitrateSpinbox->value();
}
et->start_frame = 0;
et->end_frame = sequence->getEndFrame(); // entire sequence
if (rangeCombobox->currentIndex() == 1) {
et->start_frame = qMax(sequence->workarea_in, et->start_frame);
et->end_frame = qMin(sequence->workarea_out, et->end_frame);
}
prep_ui_for_render(true);
et->ed = this;
cancelled = false;
@@ -561,16 +556,34 @@ void ExportDialog::cancel_render() {
void ExportDialog::vcodec_changed(int index) {
compressionTypeCombobox->clear();
if ((format_vcodecs.size() > 0 && format_vcodecs.at(index) == AV_CODEC_ID_H264)) {
compressionTypeCombobox->setEnabled(true);
compressionTypeCombobox->addItem(tr("Quality-based (Constant Rate Factor)"), COMPRESSION_TYPE_CFR);
// compressionTypeCombobox->addItem("File size-based (Two-Pass)", COMPRESSION_TYPE_TARGETSIZE);
// compressionTypeCombobox->addItem("Average bitrate (Two-Pass)", COMPRESSION_TYPE_TARGETBR);
} else {
compressionTypeCombobox->addItem(tr("Constant Bitrate"), COMPRESSION_TYPE_CBR);
compressionTypeCombobox->setCurrentIndex(0);
compressionTypeCombobox->setEnabled(false);
}
if (vcodecCombobox->count() > 0) {
if (vcodecCombobox->itemData(index) == AV_CODEC_ID_H264) {
compressionTypeCombobox->setEnabled(true);
compressionTypeCombobox->addItem(tr("Quality-based (Constant Rate Factor)"), COMPRESSION_TYPE_CFR);
// compressionTypeCombobox->addItem("File size-based (Two-Pass)", COMPRESSION_TYPE_TARGETSIZE);
// compressionTypeCombobox->addItem("Average bitrate (Two-Pass)", COMPRESSION_TYPE_TARGETBR);
} else {
compressionTypeCombobox->addItem(tr("Constant Bitrate"), COMPRESSION_TYPE_CBR);
compressionTypeCombobox->setCurrentIndex(0);
compressionTypeCombobox->setEnabled(false);
}
// set default pix_fmt for this codec
AVCodec* codec_info = avcodec_find_encoder(static_cast<AVCodecID>(vcodecCombobox->itemData(index).toInt()));
if (codec_info == nullptr) {
QMessageBox::critical(this,
tr("Invalid Codec"),
tr("Failed to find a suitable encoder for this codec. Export will likely fail."));
} else {
vcodec_params.pix_fmt = codec_info->pix_fmts[0];
if (vcodec_params.pix_fmt == -1) {
QMessageBox::critical(this,
tr("Invalid Codec"),
tr("Failed to find pixel format for this encoder. Export will likely fail."));
}
}
}
}
void ExportDialog::comp_type_changed(int) {
@@ -593,7 +606,12 @@ void ExportDialog::comp_type_changed(int) {
videoBitrateLabel->setText(tr("Target File Size (MB):"));
videobitrateSpinbox->setValue(100);
break;
}
}
}
void ExportDialog::open_advanced_video_dialog() {
AdvancedVideoDialog avd(this, vcodecCombobox->currentData().toInt(), vcodec_params);
avd.exec();
}
void ExportDialog::setup_ui() {
@@ -658,6 +676,10 @@ void ExportDialog::setup_ui() {
videobitrateSpinbox->setValue(2);
videoGridLayout->addWidget(videobitrateSpinbox, 5, 1, 1, 1);
QPushButton* advanced_video_button = new QPushButton(tr("Advanced"));
connect(advanced_video_button, SIGNAL(clicked(bool)), this, SLOT(open_advanced_video_dialog()));
videoGridLayout->addWidget(advanced_video_button, 6, 1);
verticalLayout->addWidget(videoGroupbox);
audioGroupbox = new QGroupBox(this);
+8 -3
View File
@@ -12,6 +12,8 @@ class QLabel;
class QProgressBar;
class QGroupBox;
#include "io/exportthread.h"
class ExportDialog : public QDialog
{
Q_OBJECT
@@ -28,17 +30,20 @@ private slots:
void render_thread_finished();
void vcodec_changed(int index);
void comp_type_changed(int index);
void open_advanced_video_dialog();
private:
QVector<QString> format_strings;
QVector<int> format_vcodecs;
QVector<int> format_acodecs;
QVector<QString> format_strings;
void setup_ui();
ExportThread* et;
void prep_ui_for_render(bool r);
bool cancelled;
void add_codec_to_combobox(QComboBox* box, enum AVCodecID codec);
VideoCodecParams vcodec_params;
QComboBox* rangeCombobox;
QSpinBox* widthSpinbox;
QDoubleSpinBox* videobitrateSpinbox;
+1 -1
View File
@@ -28,7 +28,7 @@ LoadDialog::LoadDialog(QWidget *parent, bool autorecovery) : QDialog(parent) {
cancel_button = new QPushButton(tr("Cancel"), this);
connect(cancel_button, SIGNAL(clicked(bool)), this, SLOT(cancel()));
hboxLayout = new QHBoxLayout(this);
hboxLayout = new QHBoxLayout();
hboxLayout->addStretch();
hboxLayout->addWidget(cancel_button);
hboxLayout->addStretch();
+1 -1
View File
@@ -39,7 +39,7 @@ ReplaceClipMediaDialog::ReplaceClipMediaDialog(QWidget *parent, Media *old_media
use_same_media_in_points->setChecked(true);
layout->addWidget(use_same_media_in_points);
QHBoxLayout* buttons = new QHBoxLayout(this);
QHBoxLayout* buttons = new QHBoxLayout();
buttons->addStretch();
+1 -1
View File
@@ -23,7 +23,7 @@ SpeedDialog::SpeedDialog(QWidget *parent) : QDialog(parent) {
QVBoxLayout* main_layout = new QVBoxLayout(this);
QGridLayout* grid = new QGridLayout(this);
QGridLayout* grid = new QGridLayout();
grid->setSpacing(6);
grid->addWidget(new QLabel(tr("Speed:"), this), 0, 0);