various improvements
This commit is contained in:
+176
-154
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user