Tunings are now also loaded from the EncoderInfo object. Also improved template saving code.
This commit is contained in:
parent
09e6e4fe7f
commit
0ce1fff4c6
@ -703,58 +703,8 @@
|
||||
<string>This option tweaks the encoder for a specific type of content of for a specific application scenario. Make sure you pick the Tuning that matches your type of source best!</string>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>None</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Film</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Animation</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Grain</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Stillimage</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>PSNR</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>SSIM</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Fastdecode</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Zerolatency</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Touhou</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -32,6 +32,7 @@ class AbstractEncoderInfo
|
||||
public:
|
||||
virtual QString getVariantId(const int &variant) const = 0;
|
||||
virtual QStringList getProfiles(const int &variant) const = 0;
|
||||
virtual QStringList getTunings(void) const = 0;
|
||||
virtual QStringList supportedInputFormats(void) const = 0;
|
||||
virtual QStringList supportedOutputFormats(void) const = 0;
|
||||
virtual bool isRCModeSupported(const int rcMode) const = 0;
|
||||
|
@ -97,6 +97,17 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
virtual QStringList getTunings(void) const
|
||||
{
|
||||
QStringList tunings;
|
||||
|
||||
tunings << "Film" << "Animation" << "Grain";
|
||||
tunings << "StillImage" << "PSNR" << "SSIM";
|
||||
tunings << "FastDecode" << "ZeroLatency" << "Touhou";
|
||||
|
||||
return tunings;
|
||||
}
|
||||
|
||||
virtual QStringList getProfiles(const int &variant) const
|
||||
{
|
||||
QStringList profiles;
|
||||
@ -116,27 +127,16 @@ public:
|
||||
virtual QStringList supportedInputFormats(void) const
|
||||
{
|
||||
QStringList extLst;
|
||||
extLst << "avi";
|
||||
extLst << "mp4";
|
||||
extLst << "mkv";
|
||||
extLst << "flv";
|
||||
extLst << "mpg";
|
||||
extLst << "m2v";
|
||||
extLst << "m2ts";
|
||||
extLst << "ts";
|
||||
extLst << "wmv";
|
||||
extLst << "ogm";
|
||||
extLst << "vob";
|
||||
extLst << "y4m";
|
||||
extLst << "avi" << "mp4" << "mkv" << "flv";
|
||||
extLst << "mpg" << "m2v" << "m2ts" << "ts";
|
||||
extLst << "wmv" << "ogm" << "vob" << "y4m";
|
||||
return extLst;
|
||||
}
|
||||
|
||||
virtual QStringList supportedOutputFormats(void) const
|
||||
{
|
||||
QStringList extLst;
|
||||
extLst << "264";
|
||||
extLst << "mkv";
|
||||
extLst << "mp4";
|
||||
extLst << "264" << "mkv" << "mp4";
|
||||
return extLst;
|
||||
}
|
||||
|
||||
@ -291,9 +291,12 @@ void X264Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co
|
||||
|
||||
cmdLine << "--preset" << m_options->preset().toLower();
|
||||
|
||||
if(m_options->tune().compare("none", Qt::CaseInsensitive))
|
||||
if(!m_options->tune().simplified().isEmpty())
|
||||
{
|
||||
cmdLine << "--tune" << m_options->tune().toLower();
|
||||
if(m_options->tune().simplified().compare(QString::fromLatin1(OptionsModel::TUNING_UNSPECIFIED), Qt::CaseInsensitive) != 0)
|
||||
{
|
||||
cmdLine << "--tune" << m_options->tune().simplified().toLower();
|
||||
}
|
||||
}
|
||||
|
||||
if(!m_options->profile().simplified().isEmpty())
|
||||
|
@ -97,6 +97,13 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
virtual QStringList getTunings(void) const
|
||||
{
|
||||
QStringList tunings;
|
||||
tunings << "SSIM" << "FastDecode" << "ZeroLatency";
|
||||
return tunings;
|
||||
}
|
||||
|
||||
virtual QStringList getProfiles(const int &variant) const
|
||||
{
|
||||
return QStringList();
|
||||
@ -251,9 +258,12 @@ void X265Encoder::buildCommandLine(QStringList &cmdLine, const bool &usePipe, co
|
||||
|
||||
cmdLine << "--preset" << m_options->preset().toLower();
|
||||
|
||||
if(m_options->tune().compare("none", Qt::CaseInsensitive))
|
||||
if(!m_options->tune().simplified().isEmpty())
|
||||
{
|
||||
cmdLine << "--tune" << m_options->tune().toLower();
|
||||
if(m_options->tune().simplified().compare(QString::fromLatin1(OptionsModel::TUNING_UNSPECIFIED), Qt::CaseInsensitive) != 0)
|
||||
{
|
||||
cmdLine << "--tune" << m_options->tune().simplified().toLower();
|
||||
}
|
||||
}
|
||||
|
||||
if(m_options->profile().compare("auto", Qt::CaseInsensitive) != 0)
|
||||
|
@ -46,6 +46,7 @@ static const char *KEY_PROFILE_NAME = "profile_name";
|
||||
static const char *KEY_CUSTOM_ENCODER = "custom_params_encoder";
|
||||
static const char *KEY_CUSTOM_AVS2YUV = "custom_params_avs2yuv";
|
||||
|
||||
const char *const OptionsModel::TUNING_UNSPECIFIED = "<None>";
|
||||
const char *const OptionsModel::PROFILE_UNRESTRICTED = "<Unrestricted>";
|
||||
|
||||
OptionsModel::OptionsModel(const SysinfoModel *sysinfo)
|
||||
@ -57,7 +58,7 @@ OptionsModel::OptionsModel(const SysinfoModel *sysinfo)
|
||||
m_bitrate = 1200;
|
||||
m_quantizer = 22;
|
||||
m_preset = "Medium";
|
||||
m_tune = "None";
|
||||
m_tune = QString::fromLatin1(OptionsModel::TUNING_UNSPECIFIED);
|
||||
m_profile = QString::fromLatin1(OptionsModel::PROFILE_UNRESTRICTED);
|
||||
m_custom_encoder = QString();
|
||||
m_custom_avs2yuv = QString();
|
||||
|
@ -60,6 +60,7 @@ public:
|
||||
RCMode_ABR = 3,
|
||||
};
|
||||
|
||||
static const char *const TUNING_UNSPECIFIED;
|
||||
static const char *const PROFILE_UNRESTRICTED;
|
||||
|
||||
//Getter
|
||||
|
@ -26,7 +26,7 @@
|
||||
#define VER_X264_MAJOR 2
|
||||
#define VER_X264_MINOR 3
|
||||
#define VER_X264_PATCH 5
|
||||
#define VER_X264_BUILD 820
|
||||
#define VER_X264_BUILD 821
|
||||
|
||||
#define VER_X264_PORTABLE_EDITION (0)
|
||||
|
||||
|
@ -161,7 +161,7 @@ protected:
|
||||
if(m_icon) { if(m_icon->isHidden()) m_icon->show(); }
|
||||
if(QWidget *w = m_notifier->topLevelWidget()->focusWidget())
|
||||
{
|
||||
QToolTip::showText(static_cast<QWidget*>(w->parent())->mapToGlobal(w->pos()), QString("<nobr>%1</nobr>").arg(tr("<b>Warning:</b> You entered a parameter that is incomaptible with using %1 from a GUI.<br>Please note that the GUI will automatically set <i>this</i> parameter for you (if required).").arg(toolName)), m_notifier, QRect());
|
||||
QToolTip::showText(static_cast<QWidget*>(w->parent())->mapToGlobal(w->pos()), tr("<b>Warning:</b> You entered a parameter that is forbidden. Please note that the GUI will automatically set <i>this</i> parameter for you (if required)."), m_notifier, QRect());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -195,7 +195,7 @@ public:
|
||||
invalid = invalid || checkParam(input, QString::fromLatin1(p[i]), true);
|
||||
}
|
||||
|
||||
return setStatus(invalid, "x264") ? QValidator::Intermediate : QValidator::Acceptable;
|
||||
return setStatus(invalid, "encoder") ? QValidator::Intermediate : QValidator::Acceptable;
|
||||
}
|
||||
};
|
||||
|
||||
@ -245,6 +245,7 @@ AddJobDialog::AddJobDialog(QWidget *parent, OptionsModel *const options, Recentl
|
||||
setMaximumHeight(height());
|
||||
|
||||
//Init combobox items
|
||||
ui->cbxTuning ->addItem(QString::fromLatin1(OptionsModel::TUNING_UNSPECIFIED));
|
||||
ui->cbxProfile->addItem(QString::fromLatin1(OptionsModel::PROFILE_UNRESTRICTED));
|
||||
|
||||
//Hide optional controls
|
||||
@ -444,6 +445,21 @@ void AddJobDialog::encoderIndexChanged(int index)
|
||||
ui->cbxEncoderVariant->setItemText(OptionsModel::EncVariant_LoBit, encoderInfo.getVariantId(OptionsModel::EncVariant_LoBit));
|
||||
ui->cbxEncoderVariant->setItemText(OptionsModel::EncVariant_HiBit, encoderInfo.getVariantId(OptionsModel::EncVariant_HiBit));
|
||||
|
||||
//Update tunings
|
||||
QStringList tunings = encoderInfo.getTunings();
|
||||
if(tunings.empty())
|
||||
{
|
||||
ui->cbxTuning->setEnabled(false);
|
||||
ui->cbxTuning->setCurrentIndex(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->cbxTuning->setEnabled(true);
|
||||
ui->cbxTuning->clear();
|
||||
ui->cbxTuning->addItem(QString::fromLatin1(OptionsModel::TUNING_UNSPECIFIED));
|
||||
ui->cbxTuning->addItems(tunings);
|
||||
}
|
||||
|
||||
variantIndexChanged(ui->cbxEncoderVariant->currentIndex());
|
||||
}
|
||||
|
||||
@ -724,12 +740,28 @@ void AddJobDialog::saveTemplateButtonClicked(void)
|
||||
forever
|
||||
{
|
||||
bool ok = false;
|
||||
name = QInputDialog::getText(this, tr("Save Template"), tr("Please enter the name of the template:").leftJustified(144, ' '), QLineEdit::Normal, name, &ok).simplified();
|
||||
|
||||
QStringList items;
|
||||
items << name;
|
||||
for(int i = 0; i < ui->cbxTemplate->count(); i++)
|
||||
{
|
||||
const QString tempName = ui->cbxTemplate->itemText(i);
|
||||
if(!(tempName.contains('<') || tempName.contains('>')))
|
||||
{
|
||||
items << tempName;
|
||||
}
|
||||
}
|
||||
|
||||
name = QInputDialog::getItem(this, tr("Save Template"), tr("Please enter the name of the template:").leftJustified(144, ' '), items, 0, true, &ok).simplified();
|
||||
if(!ok)
|
||||
{
|
||||
X264_DELETE(options);
|
||||
return;
|
||||
}
|
||||
if(name.isEmpty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(name.contains('<') || name.contains('>') || name.contains('\\') || name.contains('/') || name.contains('"'))
|
||||
{
|
||||
QMessageBox::warning (this, tr("Invalid Name"), tr("<nobr>Sorry, the name you have entered is invalid!</nobr>"));
|
||||
|
Loading…
Reference in New Issue
Block a user