--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Simple x264 Launcher
+// Copyright (C) 2004-2016 LoRd_MuldeR <MuldeR2@GMX.de>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// http://www.gnu.org/licenses/gpl-2.0.txt
+///////////////////////////////////////////////////////////////////////////////
+
+#include "string_validator.h"
+
+///////////////////////////////////////////////////////////////////////////////
+// StringValidator
+///////////////////////////////////////////////////////////////////////////////
+
+StringValidator::StringValidator(QLabel *notifier, QLabel *icon)
+:
+ m_notifier(notifier), m_icon(icon)
+{
+ m_notifier->hide();
+ m_icon->hide();
+}
+
+void StringValidator::fixup(QString &input) const
+{
+ input = input.simplified();
+}
+
+
+bool StringValidator::checkParam(const QStringList &input, const char *const params[], const bool &doubleMinus) const
+{
+ for(QStringList::ConstIterator iter = input.constBegin(); iter != input.constEnd(); iter++)
+ {
+ for(size_t k = 0; params[k]; k++)
+ {
+ const QString param = QLatin1String(params[k]);
+ const QString prefix = ((param.length() > 1) && doubleMinus) ? QLatin1String("--") : QLatin1String("-");
+ if(iter->compare(QString("%1%2").arg(prefix, param), Qt::CaseInsensitive) == 0)
+ {
+ if(m_notifier)
+ {
+ m_notifier->setText(tr("Forbidden parameter: %1").arg(*iter));
+ }
+ return true;
+ }
+ }
+ if(iter->startsWith(QLatin1String("--"), Qt::CaseInsensitive))
+ {
+ for(int i = 2; i < iter->length(); i++)
+ {
+ const QChar c = iter->at(i);
+ if((c == QLatin1Char('=')) && (i > 2) && (i + 1 < iter->length()))
+ {
+ break; /*to allow "--param=value" format*/
+ }
+ if((!c.isLetter()) && ((i < 3) || ((!c.isNumber()) && ((i + 1 >= iter->length()) || (c != QLatin1Char('-'))))))
+ {
+ if(m_notifier)
+ {
+ m_notifier->setText(tr("Invalid string: %1").arg(*iter));
+ }
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+bool StringValidator::checkPrefix(const QStringList &input, const bool &doubleMinus) const
+{
+ for(QStringList::ConstIterator iter = input.constBegin(); iter != input.constEnd(); iter++)
+ {
+ static const char *const c[3] = { "--", "-", NULL };
+ for(size_t i = 0; c[i]; i++)
+ {
+ const QString prefix = QString::fromLatin1(c[i]);
+ if(iter->compare(prefix, Qt::CaseInsensitive) == 0)
+ {
+ if(m_notifier)
+ {
+ m_notifier->setText(tr("Invalid parameter: %1").arg(prefix));
+ }
+ return true;
+ }
+ }
+ if
+ (
+ ((!doubleMinus) && iter->startsWith("--", Qt::CaseInsensitive)) ||
+ (doubleMinus && iter->startsWith("-", Qt::CaseInsensitive) && (!iter->startsWith("--", Qt::CaseInsensitive)) && (iter->length() > 2) && (!iter->at(1).isDigit())) ||
+ (doubleMinus && iter->startsWith("--", Qt::CaseInsensitive) && (iter->length() < 4))
+ )
+ {
+ if(m_notifier)
+ {
+ m_notifier->setText(tr("Invalid syntax: %1").arg(*iter));
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+bool StringValidator::checkCharacters(const QStringList &input) const
+{
+ static const char c[] = {'*', '?', '<', '>', '|', NULL};
+
+ for(QStringList::ConstIterator iter = input.constBegin(); iter != input.constEnd(); iter++)
+ {
+ for(size_t i = 0; c[i]; i++)
+ {
+ if(iter->indexOf(QLatin1Char(c[i])) >= 0)
+ {
+ if(m_notifier)
+ {
+ m_notifier->setText(tr("Invalid character: '%1'").arg(QLatin1Char(c[i])));
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+const bool &StringValidator::setStatus(const bool &flag, const QString &toolName) const
+{
+ if(flag)
+ {
+ if(m_notifier)
+ {
+ if(m_notifier->isHidden()) m_notifier->show();
+ 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()), 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());
+ }
+ }
+ }
+ else
+ {
+ if(m_notifier)
+ {
+ if(m_notifier->isVisible()) m_notifier->hide();
+ if(m_icon) { if(m_icon->isVisible()) m_icon->hide(); }
+ QToolTip::hideText();
+ }
+ }
+ return flag;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// StringValidatorEncoder
+///////////////////////////////////////////////////////////////////////////////
+
+QValidator::State StringValidatorEncoder::validate(QString &input, int &pos) const
+{
+ static const char *const params[] = {"B", "o", "h", "p", "q", /*"fps", "frames",*/ "preset", "tune", "profile",
+ "stdin", "crf", "bitrate", "qp", "pass", "stats", "output", "help", "quiet", "codec", "y4m", NULL};
+
+ const QString commandLine = input.trimmed();
+ const QStringList tokens = commandLine.isEmpty() ? QStringList() : MUtils::OS::crack_command_line(commandLine);
+
+ const bool invalid = checkCharacters(tokens) || checkPrefix(tokens, true) || checkParam(tokens, params, true);
+ return setStatus(invalid, "encoder") ? QValidator::Intermediate : QValidator::Acceptable;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// StringValidatorSource
+///////////////////////////////////////////////////////////////////////////////
+
+QValidator::State StringValidatorSource::validate(QString &input, int &pos) const
+{
+ static const char *const params[] = {"o", "frames", "seek", "raw", "hfyu", "slave", NULL};
+
+ const QString commandLine = input.trimmed();
+ const QStringList tokens = commandLine.isEmpty() ? QStringList() : MUtils::OS::crack_command_line(commandLine);
+
+ const bool invalid = checkCharacters(tokens) || checkPrefix(tokens, false) || checkParam(tokens, params, false);
+ return setStatus(invalid, "Avs2YUV") ? QValidator::Intermediate : QValidator::Acceptable;
+}
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+// Simple x264 Launcher
+// Copyright (C) 2004-2016 LoRd_MuldeR <MuldeR2@GMX.de>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+//
+// http://www.gnu.org/licenses/gpl-2.0.txt
+///////////////////////////////////////////////////////////////////////////////
+
+#pragma once
+
+//MUtils
+#include <MUtils/OSSupport.h>
+
+//Qt
+#include <QValidator>
+#include <QLabel>
+#include <QToolTip>
+
+class StringValidator : public QValidator
+{
+public:
+ StringValidator(QLabel *notifier, QLabel *icon);
+ virtual State validate(QString &input, int &pos) const = 0;
+ virtual void fixup(QString &input) const;
+
+protected:
+ QLabel *const m_notifier, *const m_icon;
+
+ bool checkParam(const QStringList &input, const char *const params[], const bool &doubleMinus) const;
+ bool checkPrefix(const QStringList &input, const bool &doubleMinus) const;
+ bool checkCharacters(const QStringList &input) const;
+ const bool &setStatus(const bool &flag, const QString &toolName) const;
+};
+
+class StringValidatorEncoder : public StringValidator
+{
+public:
+ StringValidatorEncoder(QLabel *notifier, QLabel *icon) : StringValidator(notifier, icon) {}
+ virtual State validate(QString &input, int &pos) const;
+};
+
+class StringValidatorSource : public StringValidator
+{
+public:
+ StringValidatorSource(QLabel *notifier, QLabel *icon) : StringValidator(notifier, icon) {}
+ virtual State validate(QString &input, int &pos) const;
+};
\ No newline at end of file
#define VER_X264_MAJOR 2
#define VER_X264_MINOR 7
#define VER_X264_PATCH 7
-#define VER_X264_BUILD 1077
+#define VER_X264_BUILD 1079
#define VER_X264_PORTABLE_EDITION (0)
#include "model_recently.h"
#include "encoder_factory.h"
#include "mediainfo.h"
+#include "string_validator.h"
#include "win_help.h"
#include "win_editor.h"
};
///////////////////////////////////////////////////////////////////////////////
-// Validator
-///////////////////////////////////////////////////////////////////////////////
-
-class StringValidator : public QValidator
-{
-public:
- StringValidator(QLabel *notifier, QLabel *icon)
- :
- m_notifier(notifier), m_icon(icon)
- {
- m_notifier->hide();
- m_icon->hide();
- }
-
- virtual State validate(QString &input, int &pos) const = 0;
-
- virtual void fixup(QString &input) const
- {
- input = input.simplified();
- }
-
-protected:
- QLabel *const m_notifier, *const m_icon;
-
- bool checkParam(const QStringList &input, const char *const params[], const bool &doubleMinus) const
- {
- for(QStringList::ConstIterator iter = input.constBegin(); iter != input.constEnd(); iter++)
- {
- for(size_t k = 0; params[k]; k++)
- {
- const QString param = QLatin1String(params[k]);
- const QString prefix = ((param.length() > 1) && doubleMinus) ? QLatin1String("--") : QLatin1String("-");
- if(iter->compare(QString("%1%2").arg(prefix, param), Qt::CaseInsensitive) == 0)
- {
- if(m_notifier)
- {
- m_notifier->setText(tr("Forbidden parameter: %1").arg(*iter));
- }
- return true;
- }
- }
- if(iter->startsWith("--", Qt::CaseInsensitive))
- {
- for(int i = 2; i < iter->length(); i++)
- {
- if((iter->at(i) == QLatin1Char('=')) && (i > 2) && (i + 1 < iter->length()))
- {
- break; /*to allow "--param=value" format*/
- }
- if((!iter->at(i).isLetter()) && ((iter->at(i) != QLatin1Char('-')) || (i < 3)))
- {
- if(m_notifier)
- {
- m_notifier->setText(tr("Invalid string: %1").arg(*iter));
- }
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- bool checkPrefix(const QStringList &input, const bool &doubleMinus) const
- {
- for(QStringList::ConstIterator iter = input.constBegin(); iter != input.constEnd(); iter++)
- {
- static const char *const c[3] = { "--", "-", NULL };
- for(size_t i = 0; c[i]; i++)
- {
- const QString prefix = QString::fromLatin1(c[i]);
- if(iter->compare(prefix, Qt::CaseInsensitive) == 0)
- {
- if(m_notifier)
- {
- m_notifier->setText(tr("Invalid parameter: %1").arg(prefix));
- }
- return true;
- }
- }
- if
- (
- ((!doubleMinus) && iter->startsWith("--", Qt::CaseInsensitive)) ||
- (doubleMinus && iter->startsWith("-", Qt::CaseInsensitive) && (!iter->startsWith("--", Qt::CaseInsensitive)) && (iter->length() > 2) && (!iter->at(1).isDigit())) ||
- (doubleMinus && iter->startsWith("--", Qt::CaseInsensitive) && (iter->length() < 4))
- )
- {
- if(m_notifier)
- {
- m_notifier->setText(tr("Invalid syntax: %1").arg(*iter));
- }
- return true;
- }
- }
- return false;
- }
-
- bool checkCharacters(const QStringList &input) const
- {
- static const char c[] = {'*', '?', '<', '>', '|', NULL};
-
- for(QStringList::ConstIterator iter = input.constBegin(); iter != input.constEnd(); iter++)
- {
- for(size_t i = 0; c[i]; i++)
- {
- if(iter->indexOf(QLatin1Char(c[i])) >= 0)
- {
- if(m_notifier)
- {
- m_notifier->setText(tr("Invalid character: '%1'").arg(QLatin1Char(c[i])));
- }
- return true;
- }
- }
- }
- return false;
- }
-
- const bool &setStatus(const bool &flag, const QString &toolName) const
- {
- if(flag)
- {
- if(m_notifier)
- {
- if(m_notifier->isHidden()) m_notifier->show();
- 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()), 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());
- }
- }
- }
- else
- {
- if(m_notifier)
- {
- if(m_notifier->isVisible()) m_notifier->hide();
- if(m_icon) { if(m_icon->isVisible()) m_icon->hide(); }
- QToolTip::hideText();
- }
- }
- return flag;
- }
-};
-
-class StringValidatorEncoder : public StringValidator
-{
-public:
- StringValidatorEncoder(QLabel *notifier, QLabel *icon) : StringValidator(notifier, icon) {}
-
- virtual State validate(QString &input, int &pos) const
- {
- static const char *const params[] = {"B", "o", "h", "p", "q", /*"fps", "frames",*/ "preset", "tune", "profile",
- "stdin", "crf", "bitrate", "qp", "pass", "stats", "output", "help", "quiet", "codec", "y4m", NULL};
-
- const QString commandLine = input.trimmed();
- const QStringList tokens = commandLine.isEmpty() ? QStringList() : MUtils::OS::crack_command_line(commandLine);
-
- const bool invalid = checkCharacters(tokens) || checkPrefix(tokens, true) || checkParam(tokens, params, true);
- return setStatus(invalid, "encoder") ? QValidator::Intermediate : QValidator::Acceptable;
- }
-};
-
-class StringValidatorAvs2YUV : public StringValidator
-{
-public:
- StringValidatorAvs2YUV(QLabel *notifier, QLabel *icon) : StringValidator(notifier, icon) {}
-
- virtual State validate(QString &input, int &pos) const
- {
- static const char *const params[] = {"o", "frames", "seek", "raw", "hfyu", "slave", NULL};
-
- const QString commandLine = input.trimmed();
- const QStringList tokens = commandLine.isEmpty() ? QStringList() : MUtils::OS::crack_command_line(commandLine);
-
- const bool invalid = checkCharacters(tokens) || checkPrefix(tokens, false) || checkParam(tokens, params, false);
- return setStatus(invalid, "Avs2YUV") ? QValidator::Intermediate : QValidator::Acceptable;
- }
-};
-
-///////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor
///////////////////////////////////////////////////////////////////////////////
ui->editCustomX264Params->setValidator(new StringValidatorEncoder(ui->labelNotificationX264, ui->iconNotificationX264));
ui->editCustomX264Params->clear();
ui->editCustomAvs2YUVParams->installEventFilter(this);
- ui->editCustomAvs2YUVParams->setValidator(new StringValidatorAvs2YUV(ui->labelNotificationAvs2YUV, ui->iconNotificationAvs2YUV));
+ ui->editCustomAvs2YUVParams->setValidator(new StringValidatorSource(ui->labelNotificationAvs2YUV, ui->iconNotificationAvs2YUV));
ui->editCustomAvs2YUVParams->clear();
//Install event filter
copy /Y "$(SolutionDir)res\toolset\x86\*.exe" "$(TargetDir)\toolset\x86\"
copy /Y "$(SolutionDir)res\toolset\x64\*.exe" "$(TargetDir)\toolset\x64\"
+copy /Y "$(SolutionDir)res\toolset\x86\*.dll" "$(TargetDir)\toolset\x86\"
+copy /Y "$(SolutionDir)res\toolset\x64\*.dll" "$(TargetDir)\toolset\x64\"
copy /Y "$(SolutionDir)res\toolset\common\*.exe" "$(TargetDir)\toolset\common\"
copy /Y "$(SolutionDir)res\toolset\common\*.gpg" "$(TargetDir)\toolset\common\"
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)tmp\$(ProjectName)\MOC_%(Filename).cpp;%(Outputs)</Outputs>
</CustomBuild>
+ <ClInclude Include="src\encoder_nvenc.h" />
+ <ClInclude Include="src\model_clipInfo.h" />
<ClInclude Include="src\source_factory.h" />
+ <ClInclude Include="src\string_validator.h" />
<ClInclude Include="tmp\x264_launcher\UIC_win_about.h" />
<ClInclude Include="tmp\x264_launcher\UIC_win_addJob.h" />
<ClInclude Include="tmp\x264_launcher\UIC_win_editor.h" />
<ItemGroup>
<ClCompile Include="src\encoder_abstract.cpp" />
<ClCompile Include="src\encoder_factory.cpp" />
+ <ClCompile Include="src\encoder_nvenc.cpp" />
<ClCompile Include="src\encoder_x264.cpp" />
<ClCompile Include="src\encoder_x265.cpp" />
<ClCompile Include="src\job_object.cpp" />
<ClCompile Include="src\input_filter.cpp" />
<ClCompile Include="src\mediainfo.cpp" />
+ <ClCompile Include="src\model_clipInfo.cpp" />
<ClCompile Include="src\model_jobList.cpp" />
<ClCompile Include="src\model_logFile.cpp" />
<ClCompile Include="src\model_options.cpp" />
<ClCompile Include="src\source_avisynth.cpp" />
<ClCompile Include="src\source_factory.cpp" />
<ClCompile Include="src\source_vapoursynth.cpp" />
+ <ClCompile Include="src\string_validator.cpp" />
<ClCompile Include="src\thread_avisynth.cpp" />
<ClCompile Include="src\thread_binaries.cpp" />
<ClCompile Include="src\thread_encode.cpp" />
<ClInclude Include="src\source_factory.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="src\encoder_nvenc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="src\model_clipInfo.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="src\string_validator.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\main.cpp">
<ClCompile Include="src\source_factory.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\encoder_nvenc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\model_clipInfo.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="src\string_validator.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="src\win_main.h">
<ClInclude Include="src\encoder_nvenc.h" />
<ClInclude Include="src\model_clipInfo.h" />
<ClInclude Include="src\source_factory.h" />
+ <ClInclude Include="src\string_validator.h" />
<ClInclude Include="tmp\x264_launcher\UIC_win_about.h" />
<ClInclude Include="tmp\x264_launcher\UIC_win_addJob.h" />
<ClInclude Include="tmp\x264_launcher\UIC_win_editor.h" />
<ClCompile Include="src\source_avisynth.cpp" />
<ClCompile Include="src\source_factory.cpp" />
<ClCompile Include="src\source_vapoursynth.cpp" />
+ <ClCompile Include="src\string_validator.cpp" />
<ClCompile Include="src\thread_avisynth.cpp" />
<ClCompile Include="src\thread_binaries.cpp" />
<ClCompile Include="src\thread_encode.cpp" />
<ClInclude Include="src\model_clipInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="src\string_validator.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\main.cpp">
<ClCompile Include="src\model_clipInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="src\string_validator.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="src\win_main.h">