Added support for custom Avs2YUV parameters. Required to allow passing trough 4:2:2 (YV16) and 4:4:4 (YV24) data, as Avs2YUV converts to 4:2:0 (YV12) by default. YV16 and YV24 requires Avisynth 2.6!
This commit is contained in:
parent
5025b163a9
commit
e149f87ed8
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>640</width>
|
||||
<height>569</height>
|
||||
<height>611</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -884,7 +884,7 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelHelpScreen">
|
||||
<widget class="QLabel" name="labelHelpScreenX264">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
@ -955,6 +955,100 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string>Custom Avs2YUV Parameters:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_11">
|
||||
<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="QLabel" name="labelHelpScreenAvs2YUV">
|
||||
<property name="palette">
|
||||
<palette>
|
||||
<active>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</active>
|
||||
<inactive>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>0</red>
|
||||
<green>0</green>
|
||||
<blue>255</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</inactive>
|
||||
<disabled>
|
||||
<colorrole role="WindowText">
|
||||
<brush brushstyle="SolidPattern">
|
||||
<color alpha="255">
|
||||
<red>120</red>
|
||||
<green>120</green>
|
||||
<blue>120</blue>
|
||||
</color>
|
||||
</brush>
|
||||
</colorrole>
|
||||
</disabled>
|
||||
</palette>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<underline>true</underline>
|
||||
</font>
|
||||
</property>
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Click here to show a detailed list of all command-line options available in your build of Avs2YUV!</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show Help Screen</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="editCustomAvs2YUVParams">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Lucida Console</family>
|
||||
</font>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>All command-line parameters you enter here will be passed to Avs2YUV unmodified and unchecked. Only relevant for Avisynth input!</string>
|
||||
</property>
|
||||
<property name="placeholderText">
|
||||
<string>You can enter custom command-line options here...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -36,7 +36,7 @@ OptionsModel::OptionsModel(void)
|
||||
m_preset = "Medium";
|
||||
m_tune = "None";
|
||||
m_profile = "Auto";
|
||||
m_custom = "";
|
||||
m_custom_x264 = "";
|
||||
}
|
||||
|
||||
OptionsModel::~OptionsModel(void)
|
||||
@ -75,7 +75,8 @@ bool OptionsModel::equals(OptionsModel *model)
|
||||
if(this->m_preset.compare(model->m_preset, Qt::CaseInsensitive)) equal = false;
|
||||
if(this->m_tune.compare(model->m_tune, Qt::CaseInsensitive)) equal = false;
|
||||
if(this->m_profile.compare(model->m_profile, Qt::CaseInsensitive)) equal = false;
|
||||
if(this->m_custom.compare(model->m_custom, Qt::CaseInsensitive)) equal = false;
|
||||
if(this->m_custom_x264.compare(model->m_custom_x264, Qt::CaseInsensitive)) equal = false;
|
||||
if(this->m_custom_avs2yuv.compare(model->m_custom_avs2yuv, Qt::CaseInsensitive)) equal = false;
|
||||
|
||||
return equal;
|
||||
}
|
||||
@ -99,7 +100,8 @@ bool OptionsModel::saveTemplate(OptionsModel *model, const QString &name)
|
||||
settings.setValue("preset_name", model->m_preset);
|
||||
settings.setValue("tuning_name", model->m_tune);
|
||||
settings.setValue("profile_name", model->m_profile);
|
||||
settings.setValue("custom_params", model->m_custom);
|
||||
settings.setValue("custom_params_x264", model->m_custom_x264);
|
||||
settings.setValue("custom_params_avs2yuv", model->m_custom_avs2yuv);
|
||||
|
||||
settings.endGroup();
|
||||
settings.sync();
|
||||
@ -126,7 +128,8 @@ bool OptionsModel::loadTemplate(OptionsModel *model, const QString &name)
|
||||
if(!settings.contains("preset_name")) complete = false;
|
||||
if(!settings.contains("tuning_name")) complete = false;
|
||||
if(!settings.contains("profile_name")) complete = false;
|
||||
if(!settings.contains("custom_params")) complete = false;
|
||||
if(!settings.contains("custom_params_x264")) complete = false;
|
||||
if(!settings.contains("custom_params_avs2yuv")) complete = false;
|
||||
|
||||
if(complete)
|
||||
{
|
||||
@ -136,7 +139,8 @@ bool OptionsModel::loadTemplate(OptionsModel *model, const QString &name)
|
||||
model->setPreset(settings.value("preset_name", model->m_preset).toString());
|
||||
model->setTune(settings.value("tuning_name", model->m_tune).toString());
|
||||
model->setProfile(settings.value("profile_name", model->m_profile).toString());
|
||||
model->setCustom(settings.value("custom_params", model->m_custom).toString());
|
||||
model->setCustomX264(settings.value("custom_params_x264", model->m_custom_x264).toString());
|
||||
model->setCustomAvs2YUV(settings.value("custom_params_avs2yuv", model->m_custom_avs2yuv).toString());
|
||||
}
|
||||
|
||||
settings.endGroup();
|
||||
|
@ -46,7 +46,8 @@ public:
|
||||
QString preset(void) const { return m_preset; }
|
||||
QString tune(void) const { return m_tune; }
|
||||
QString profile(void) const { return m_profile; }
|
||||
QString custom(void) const { return m_custom; }
|
||||
QString customX264(void) const { return m_custom_x264; }
|
||||
QString customAvs2YUV(void) const { return m_custom_avs2yuv; }
|
||||
|
||||
//Setter
|
||||
void setRCMode(RCMode mode) { m_rcMode = qBound(RCMode_CRF, mode, RCMode_ABR); }
|
||||
@ -55,7 +56,8 @@ public:
|
||||
void setPreset(const QString &preset) { m_preset = preset.trimmed(); }
|
||||
void setTune(const QString &tune) { m_tune = tune.trimmed(); }
|
||||
void setProfile(const QString &profile) { m_profile = profile.trimmed(); }
|
||||
void setCustom(const QString &custom) { m_custom = custom.trimmed(); }
|
||||
void setCustomX264(const QString &custom) { m_custom_x264 = custom.trimmed(); }
|
||||
void setCustomAvs2YUV(const QString &custom) { m_custom_avs2yuv = custom.trimmed(); }
|
||||
|
||||
//Stuff
|
||||
bool equals(OptionsModel *model);
|
||||
@ -75,5 +77,6 @@ protected:
|
||||
QString m_preset;
|
||||
QString m_tune;
|
||||
QString m_profile;
|
||||
QString m_custom;
|
||||
QString m_custom_x264;
|
||||
QString m_custom_avs2yuv;
|
||||
};
|
||||
|
@ -184,7 +184,7 @@ void EncodeThread::encode(void)
|
||||
log(tr("Preset: %1").arg(m_options->preset()));
|
||||
log(tr("Tuning: %1").arg(m_options->tune()));
|
||||
log(tr("Profile: %1").arg(m_options->profile()));
|
||||
log(tr("Custom: %1").arg(m_options->custom().isEmpty() ? tr("(None)") : m_options->custom()));
|
||||
log(tr("Custom: %1").arg(m_options->customX264().isEmpty() ? tr("(None)") : m_options->customX264()));
|
||||
|
||||
bool ok = false;
|
||||
unsigned int frames = 0;
|
||||
@ -284,6 +284,10 @@ bool EncodeThread::runEncodingPass(bool x264_x64, bool avs2yuv_x64, bool usePipe
|
||||
if(usePipe)
|
||||
{
|
||||
QStringList cmdLine_Avisynth;
|
||||
if(!m_options->customAvs2YUV().isEmpty())
|
||||
{
|
||||
cmdLine_Avisynth.append(splitParams(m_options->customAvs2YUV()));
|
||||
}
|
||||
cmdLine_Avisynth << pathToLocal(QDir::toNativeSeparators(m_sourceFileName));
|
||||
cmdLine_Avisynth << "-";
|
||||
processAvisynth.setStandardOutputProcess(&processEncode);
|
||||
@ -521,9 +525,9 @@ QStringList EncodeThread::buildCommandLine(bool usePipe, unsigned int frames, co
|
||||
cmdLine << "--profile" << m_options->profile().toLower();
|
||||
}
|
||||
|
||||
if(!m_options->custom().isEmpty())
|
||||
if(!m_options->customX264().isEmpty())
|
||||
{
|
||||
cmdLine.append(splitParams(m_options->custom()));
|
||||
cmdLine.append(splitParams(m_options->customX264()));
|
||||
}
|
||||
|
||||
cmdLine << "--output" << pathToLocal(QDir::toNativeSeparators(m_outputFileName), true);
|
||||
@ -744,8 +748,14 @@ unsigned int EncodeThread::checkVersionAvs2yuv(bool x64)
|
||||
bool EncodeThread::checkProperties(bool x64, unsigned int &frames)
|
||||
{
|
||||
QProcess process;
|
||||
|
||||
QStringList cmdLine = QStringList() << "-frames" << "1";
|
||||
QStringList cmdLine;
|
||||
|
||||
if(!m_options->customAvs2YUV().isEmpty())
|
||||
{
|
||||
cmdLine.append(splitParams(m_options->customAvs2YUV()));
|
||||
}
|
||||
|
||||
cmdLine << "-frames" << "1";
|
||||
cmdLine << pathToLocal(QDir::toNativeSeparators(m_sourceFileName)) << "NUL";
|
||||
|
||||
log("Creating process:");
|
||||
@ -846,6 +856,10 @@ bool EncodeThread::checkProperties(bool x64, unsigned int &frames)
|
||||
{
|
||||
log(tr("\nWarning: It seems that %1-Bit Avisynth is not currently installed !!!").arg(x64 ? "64" : "32"));
|
||||
}
|
||||
if(text.contains(QRegExp("couldn't convert input clip to (YV16|YV24)", Qt::CaseInsensitive)))
|
||||
{
|
||||
log(tr("\nWarning: YV16 (4:2:2) and YV24 (4:4:4) color-spaces only supported in Avisynth 2.6 !!!"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
#define VER_X264_MAJOR 2
|
||||
#define VER_X264_MINOR 0
|
||||
#define VER_X264_PATCH 1
|
||||
#define VER_X264_BUILD 126
|
||||
#define VER_X264_BUILD 134
|
||||
|
||||
#define VER_X264_MINIMUM_REV 2146
|
||||
#define VER_X264_CURRENT_API 120
|
||||
|
@ -174,7 +174,8 @@ AddJobDialog::AddJobDialog(QWidget *parent, OptionsModel *options, bool x64suppo
|
||||
editCustomParams->clear();
|
||||
|
||||
//Install event filter
|
||||
labelHelpScreen->installEventFilter(this);
|
||||
labelHelpScreenX264->installEventFilter(this);
|
||||
labelHelpScreenAvs2YUV->installEventFilter(this);
|
||||
|
||||
//Monitor for options changes
|
||||
connect(cbxRateControlMode, SIGNAL(currentIndexChanged(int)), this, SLOT(configurationChanged()));
|
||||
@ -237,9 +238,15 @@ void AddJobDialog::showEvent(QShowEvent *event)
|
||||
|
||||
bool AddJobDialog::eventFilter(QObject *o, QEvent *e)
|
||||
{
|
||||
if((o == labelHelpScreen) && (e->type() == QEvent::MouseButtonPress))
|
||||
if((o == labelHelpScreenX264) && (e->type() == QEvent::MouseButtonPress))
|
||||
{
|
||||
HelpDialog *helpScreen = new HelpDialog(this, m_x64supported);
|
||||
HelpDialog *helpScreen = new HelpDialog(this, false, m_x64supported);
|
||||
helpScreen->exec();
|
||||
X264_DELETE(helpScreen);
|
||||
}
|
||||
else if((o == labelHelpScreenAvs2YUV) && (e->type() == QEvent::MouseButtonPress))
|
||||
{
|
||||
HelpDialog *helpScreen = new HelpDialog(this, true, m_x64supported);
|
||||
helpScreen->exec();
|
||||
X264_DELETE(helpScreen);
|
||||
}
|
||||
@ -247,6 +254,10 @@ bool AddJobDialog::eventFilter(QObject *o, QEvent *e)
|
||||
{
|
||||
editCustomParams->setText(editCustomParams->text().simplified());
|
||||
}
|
||||
else if((o == editCustomAvs2YUVParams) && (e->type() == QEvent::FocusOut))
|
||||
{
|
||||
editCustomAvs2YUVParams->setText(editCustomAvs2YUVParams->text().simplified());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -659,7 +670,8 @@ void AddJobDialog::restoreOptions(OptionsModel *options)
|
||||
updateComboBox(cbxPreset, options->preset());
|
||||
updateComboBox(cbxTuning, options->tune());
|
||||
updateComboBox(cbxProfile, options->profile());
|
||||
editCustomParams->setText(options->custom());
|
||||
editCustomParams->setText(options->customX264());
|
||||
editCustomAvs2YUVParams->setText(options->customAvs2YUV());
|
||||
|
||||
cbxRateControlMode->blockSignals(false);
|
||||
spinQuantizer->blockSignals(false);
|
||||
@ -678,7 +690,8 @@ void AddJobDialog::saveOptions(OptionsModel *options)
|
||||
options->setPreset(cbxPreset->model()->data(cbxPreset->model()->index(cbxPreset->currentIndex(), 0)).toString());
|
||||
options->setTune(cbxTuning->model()->data(cbxTuning->model()->index(cbxTuning->currentIndex(), 0)).toString());
|
||||
options->setProfile(cbxProfile->model()->data(cbxProfile->model()->index(cbxProfile->currentIndex(), 0)).toString());
|
||||
options->setCustom(editCustomParams->hasAcceptableInput() ? editCustomParams->text().simplified() : QString());
|
||||
options->setCustomX264(editCustomParams->hasAcceptableInput() ? editCustomParams->text().simplified() : QString());
|
||||
options->setCustomAvs2YUV(editCustomAvs2YUVParams->text().simplified());
|
||||
}
|
||||
|
||||
QString AddJobDialog::makeFileFilter(void)
|
||||
|
@ -30,10 +30,11 @@
|
||||
// Constructor & Destructor
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
HelpDialog::HelpDialog(QWidget *parent, bool x64supported)
|
||||
HelpDialog::HelpDialog(QWidget *parent, bool avs2yuv, bool x64supported)
|
||||
:
|
||||
QDialog(parent),
|
||||
m_appDir(QApplication::applicationDirPath()),
|
||||
m_avs2yuv(avs2yuv),
|
||||
m_x64supported(x64supported),
|
||||
m_process(new QProcess())
|
||||
{
|
||||
@ -67,7 +68,15 @@ void HelpDialog::showEvent(QShowEvent *event)
|
||||
QDialog::showEvent(event);
|
||||
|
||||
m_startAgain = true;
|
||||
m_process->start(QString("%1/toolset/%2.exe").arg(m_appDir, m_x64supported ? "x264_x64" : "x264"), QStringList() << "--version");
|
||||
|
||||
if(!m_avs2yuv)
|
||||
{
|
||||
m_process->start(QString("%1/toolset/%2.exe").arg(m_appDir, m_x64supported ? "x264_x64" : "x264"), QStringList() << "--version");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_process->start(QString("%1/toolset/%2.exe").arg(m_appDir, m_x64supported ? "avs2yuv_x64" : "avs2yuv"), QStringList());
|
||||
}
|
||||
|
||||
if(!m_process->waitForStarted())
|
||||
{
|
||||
@ -109,12 +118,15 @@ void HelpDialog::finished(void)
|
||||
if(m_startAgain)
|
||||
{
|
||||
m_startAgain = false;
|
||||
m_process->start(QString("%1/toolset/x264.exe").arg(m_appDir), QStringList() << "--fullhelp");
|
||||
plainTextEdit->appendPlainText("\n--------\n");
|
||||
|
||||
if(!m_process->waitForStarted())
|
||||
if(!m_avs2yuv)
|
||||
{
|
||||
plainTextEdit->appendPlainText(tr("Failed to create x264 process :-("));
|
||||
m_process->start(QString("%1/toolset/x264.exe").arg(m_appDir), QStringList() << "--fullhelp");
|
||||
plainTextEdit->appendPlainText("\n--------\n");
|
||||
|
||||
if(!m_process->waitForStarted())
|
||||
{
|
||||
plainTextEdit->appendPlainText(tr("Failed to create x264 process :-("));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -30,7 +30,7 @@ class HelpDialog : public QDialog, private Ui::HelpDialog
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
HelpDialog(QWidget *parent, bool x64supported);
|
||||
HelpDialog(QWidget *parent, bool avs2yuv, bool x64supported);
|
||||
~HelpDialog(void);
|
||||
|
||||
private slots:
|
||||
@ -44,6 +44,7 @@ private:
|
||||
bool m_startAgain;
|
||||
|
||||
protected:
|
||||
const bool m_avs2yuv;
|
||||
const bool m_x64supported;
|
||||
|
||||
virtual void showEvent(QShowEvent *event);
|
||||
|
Loading…
Reference in New Issue
Block a user