Implemented x265 detection. Also improved x264 and Avs2YUV verification.

This commit is contained in:
LoRd_MuldeR 2014-02-21 17:52:16 +01:00
parent 2bafd5f5f6
commit f35b9d2969
6 changed files with 176 additions and 45 deletions

View File

@ -25,36 +25,38 @@
#include "model_preferences.h" #include "model_preferences.h"
#include "model_options.h" #include "model_options.h"
QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options) /* --- Encooders --- */
QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel::EncType &encType, const OptionsModel::EncArch &encArch, const OptionsModel::EncVariant &encVariant)
{ {
QString baseName, arch, variant; QString baseName, arch, variant;
//Encoder Type //Encoder Type
switch(options->encType()) switch(encType)
{ {
case OptionsModel::EncType_X264: baseName = "x264"; break; case OptionsModel::EncType_X264: baseName = "x264"; break;
case OptionsModel::EncType_X265: baseName = "x265"; break; case OptionsModel::EncType_X265: baseName = "x265"; break;
} }
//Architecture //Architecture
switch(options->encArch()) switch(encArch)
{ {
case OptionsModel::EncArch_x32: arch = "x86"; break; case OptionsModel::EncArch_x32: arch = "x86"; break;
case OptionsModel::EncArch_x64: arch = "x64"; break; case OptionsModel::EncArch_x64: arch = "x64"; break;
} }
//Encoder Variant //Encoder Variant
switch(options->encVariant()) switch(encVariant)
{ {
case OptionsModel::EncVariant_LoBit: case OptionsModel::EncVariant_LoBit:
switch(options->encType()) switch(encType)
{ {
case OptionsModel::EncType_X264: case OptionsModel::EncType_X264:
case OptionsModel::EncType_X265: variant = "8bit"; break; case OptionsModel::EncType_X265: variant = "8bit"; break;
} }
break; break;
case OptionsModel::EncVariant_HiBit: case OptionsModel::EncVariant_HiBit:
switch(options->encType()) switch(encType)
{ {
case OptionsModel::EncType_X264: variant = "10bit"; break; case OptionsModel::EncType_X264: variant = "10bit"; break;
case OptionsModel::EncType_X265: variant = "16bit"; break; case OptionsModel::EncType_X265: variant = "16bit"; break;
@ -72,13 +74,31 @@ QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options)
return QString("%1/toolset/%2/%3_%4_%2.exe").arg(sysinfo->getAppPath(), arch, baseName, variant); return QString("%1/toolset/%2/%3_%4_%2.exe").arg(sysinfo->getAppPath(), arch, baseName, variant);
} }
QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options)
{
return ENC_BINARY(sysinfo, options->encType(), options->encArch(), options->encVariant());
}
/* --- Avisynth --- */
QString AVS_BINARY(const SysinfoModel *sysinfo, const bool& x64)
{
return QString("%1/toolset/%2/avs2yuv_%2.exe").arg(sysinfo->getAppPath(), (x64 ? "x64": "x86"));
}
QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences) QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences)
{ {
const bool x64 = preferences->getUseAvisyth64Bit() && sysinfo->hasX64Support(); return AVS_BINARY(sysinfo, preferences->getUseAvisyth64Bit() && sysinfo->hasX64Support());
return QString("%1/toolset/%2/avs2yuv_%2.exe").arg(sysinfo->getAppPath(), x64 ? "x64": "x86"); }
/* --- VapurSynth --- */
QString VPS_BINARY(const SysinfoModel *sysinfo, const bool& x64)
{
return QString("%1/vspipe.exe").arg(sysinfo->getVPSPath());
} }
QString VPS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences) QString VPS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences)
{ {
return QString("%1/vspipe.exe").arg(sysinfo->getVPSPath()); return VPS_BINARY(sysinfo, sysinfo->hasX64Support());
} }

View File

@ -19,12 +19,16 @@
// http://www.gnu.org/licenses/gpl-2.0.txt // http://www.gnu.org/licenses/gpl-2.0.txt
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#include <QString> #include "model_options.h"
class SysinfoModel; class SysinfoModel;
class PreferencesModel; class PreferencesModel;
class OptionsModel;
QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options); QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel *options);
QString ENC_BINARY(const SysinfoModel *sysinfo, const OptionsModel::EncType &encType, const OptionsModel::EncArch &encArch, const OptionsModel::EncVariant &encVariant);
QString AVS_BINARY(const SysinfoModel *sysinfo, const bool &x64);
QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences); QString AVS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences);
QString VPS_BINARY(const SysinfoModel *sysinfo, const bool& x64);
QString VPS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences); QString VPS_BINARY(const SysinfoModel *sysinfo, const PreferencesModel *preferences);

View File

@ -43,7 +43,7 @@ public:
enum EncArch enum EncArch
{ {
EncArch_x32 = 0, EncArch_x32 = 0,
EncArch_x64 = 1, EncArch_x64 = 1
}; };
enum EncVariant enum EncVariant

View File

@ -26,7 +26,7 @@
#define VER_X264_MAJOR 2 #define VER_X264_MAJOR 2
#define VER_X264_MINOR 3 #define VER_X264_MINOR 3
#define VER_X264_PATCH 1 #define VER_X264_PATCH 1
#define VER_X264_BUILD 772 #define VER_X264_BUILD 775
#define VER_X264_MINIMUM_REV 2380 #define VER_X264_MINIMUM_REV 2380
#define VER_X264_CURRENT_API 142 #define VER_X264_CURRENT_API 142

View File

@ -460,10 +460,10 @@ void AddJobDialog::modeIndexChanged(int index)
void AddJobDialog::accept(void) void AddJobDialog::accept(void)
{ {
//FIXME //Check x265 support
if(ui->cbxEncoderType->currentIndex() == OptionsModel::EncType_X265) if((ui->cbxEncoderType->currentIndex() == OptionsModel::EncType_X265) && (!m_sysinfo->has256Support()))
{ {
QMessageBox::warning(this, tr("x265"), tr("Sorry, x265 support not implemented yet!")); QMessageBox::warning(this, tr("x265 unsupported"), tr("<nobr>Sorry, the x265 encoder is <b>not</b> currently available on this computer!<br>Please see the Readme file on how to obtain and install x265...</nobr>"));
ui->cbxEncoderType->setCurrentIndex(OptionsModel::EncType_X264); ui->cbxEncoderType->setCurrentIndex(OptionsModel::EncType_X264);
return; return;
} }
@ -471,7 +471,7 @@ void AddJobDialog::accept(void)
//Check 64-Bit support //Check 64-Bit support
if((ui->cbxEncoderArch->currentIndex() == OptionsModel::EncArch_x64) && (!m_sysinfo->hasX64Support())) if((ui->cbxEncoderArch->currentIndex() == OptionsModel::EncArch_x64) && (!m_sysinfo->hasX64Support()))
{ {
QMessageBox::warning(this, tr("64-Bit unsupported!"), tr("Sorry, this computer does <b>not</b> support 64-Bit encoders!")); QMessageBox::warning(this, tr("64-Bit unsupported!"), tr("<nobr>Sorry, this computer does <b>not</b> support 64-Bit encoders!</nobr>"));
ui->cbxEncoderArch->setCurrentIndex(OptionsModel::EncArch_x32); ui->cbxEncoderArch->setCurrentIndex(OptionsModel::EncArch_x32);
return; return;
} }
@ -479,7 +479,7 @@ void AddJobDialog::accept(void)
//Selection complete? //Selection complete?
if(ui->editSource->text().trimmed().isEmpty()) if(ui->editSource->text().trimmed().isEmpty())
{ {
QMessageBox::warning(this, tr("Not Found!"), tr("Please select a valid source file first!")); QMessageBox::warning(this, tr("Not Found!"), tr("<nobr>Please select a valid source file first!<(nobr>"));
return; return;
} }
if(ui->editOutput->text().trimmed().isEmpty()) if(ui->editOutput->text().trimmed().isEmpty())
@ -496,6 +496,22 @@ void AddJobDialog::accept(void)
return; return;
} }
//Is the type of source supported? (as far as we can tell)
if((sourceFile.suffix().compare("AVS", Qt::CaseInsensitive) == 0) && (!m_sysinfo->hasAVSSupport()))
{
if(QMessageBox::warning(this, tr("Avisynth unsupported!"), tr("<nobr>An Avisynth script was selected as input, although Avisynth is <b>not</b> available!</nobr>"), tr("Abort"), tr("Ingnore (at your own risk!)")) != 1)
{
return;
}
}
if(((sourceFile.suffix().compare("VPY", Qt::CaseInsensitive) == 0) || (sourceFile.suffix().compare("PY", Qt::CaseInsensitive) == 0)) && (!m_sysinfo->hasVPSSupport()))
{
if(QMessageBox::warning(this, tr("VapurSynth unsupported!"), tr("<nobr>A VapourSynth script was selected as input, although VapourSynth is <b>not/<b> available!</nobr>"), tr("Abort"), tr("Ingnore (at your own risk!)")) != 1)
{
return;
}
}
//Does output file already exist? //Does output file already exist?
QFileInfo outputFile = QFileInfo(this->outputFile()); QFileInfo outputFile = QFileInfo(this->outputFile());
if(outputFile.exists() && outputFile.isFile()) if(outputFile.exists() && outputFile.isFile())

View File

@ -38,6 +38,7 @@
#include "win_addJob.h" #include "win_addJob.h"
#include "win_preferences.h" #include "win_preferences.h"
#include "win_updater.h" #include "win_updater.h"
#include "binaries.h"
#include "resource.h" #include "resource.h"
#include <QDate> #include <QDate>
@ -66,6 +67,7 @@ const char *tpl_last = "<LAST_USED>";
#define LINK(URL) "<a href=\"" URL "\">" URL "</a>" #define LINK(URL) "<a href=\"" URL "\">" URL "</a>"
#define INIT_ERROR_EXIT() do { m_status = STATUS_EXITTING; close(); qApp->exit(-1); return; } while(0) #define INIT_ERROR_EXIT() do { m_status = STATUS_EXITTING; close(); qApp->exit(-1); return; } while(0)
#define ENSURE_APP_IS_IDLE() do { if(m_status != STATUS_IDLE) { x264_beep(x264_beep_warning); qWarning("Cannot perfrom this action at this time!"); return; } } while(0) #define ENSURE_APP_IS_IDLE() do { if(m_status != STATUS_IDLE) { x264_beep(x264_beep_warning); qWarning("Cannot perfrom this action at this time!"); return; } } while(0)
#define NEXT(X) ((*reinterpret_cast<int*>(&(X)))++)
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Constructor & Destructor // Constructor & Destructor
@ -99,8 +101,8 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc)
m_sysinfo = new SysinfoModel(); m_sysinfo = new SysinfoModel();
m_sysinfo->setAppPath(QApplication::applicationDirPath()); m_sysinfo->setAppPath(QApplication::applicationDirPath());
m_sysinfo->setMMXSupport(cpuFeatures->mmx && cpuFeatures->mmx2); m_sysinfo->setMMXSupport(cpuFeatures->mmx && cpuFeatures->mmx2);
m_sysinfo->setSSESupport(cpuFeatures->sse); m_sysinfo->setSSESupport(cpuFeatures->sse && cpuFeatures->mmx2); //SSE implies MMX2
m_sysinfo->setX64Support(cpuFeatures->x64); m_sysinfo->setX64Support(cpuFeatures->x64 && cpuFeatures->sse2); //X64 implies SSE2
//Load preferences //Load preferences
m_preferences = new PreferencesModel(); m_preferences = new PreferencesModel();
@ -121,7 +123,7 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc)
//Update title //Update title
ui->labelBuildDate->setText(tr("Built on %1 at %2").arg(x264_version_date().toString(Qt::ISODate), QString::fromLatin1(x264_version_time()))); ui->labelBuildDate->setText(tr("Built on %1 at %2").arg(x264_version_date().toString(Qt::ISODate), QString::fromLatin1(x264_version_time())));
ui->labelBuildDate->installEventFilter(this); ui->labelBuildDate->installEventFilter(this);
setWindowTitle(QString("%1 (%2 Mode)").arg(windowTitle(), m_sysinfo->hasX64Support() ? "64-Bit" : "32-Bit"));
if(X264_DEBUG) if(X264_DEBUG)
{ {
setWindowTitle(QString("%1 | !!! DEBUG VERSION !!!").arg(windowTitle())); setWindowTitle(QString("%1 | !!! DEBUG VERSION !!!").arg(windowTitle()));
@ -762,45 +764,103 @@ void MainWindow::init(void)
return; return;
} }
const QStringList arguments = x264_arguments();
static const char *binFiles = "x86/x264_8bit_x86.exe:x64/x264_8bit_x64.exe:x86/x264_10bit_x86.exe:x64/x264_10bit_x64.exe:x86/avs2yuv_x86.exe:x64/avs2yuv_x64.exe";
QStringList binaries = QString::fromLatin1(binFiles).split(":", QString::SkipEmptyParts);
updateLabelPos(); updateLabelPos();
//Create the IPC listener thread //---------------------------------------
// Create the IPC listener thread
//---------------------------------------
if(m_ipc->isInitialized()) if(m_ipc->isInitialized())
{ {
connect(m_ipc, SIGNAL(receivedCommand(int,QStringList,quint32)), this, SLOT(handleCommand(int,QStringList,quint32)), Qt::QueuedConnection); connect(m_ipc, SIGNAL(receivedCommand(int,QStringList,quint32)), this, SLOT(handleCommand(int,QStringList,quint32)), Qt::QueuedConnection);
m_ipc->startListening(); m_ipc->startListening();
} }
//Check all binaries //---------------------------------------
while(!binaries.isEmpty()) // Check required binaries
//---------------------------------------
QStringList binFiles;
for(OptionsModel::EncArch arch = OptionsModel::EncArch_x32; arch <= OptionsModel::EncArch_x64; NEXT(arch))
{
for(OptionsModel::EncVariant varnt = OptionsModel::EncVariant_LoBit; varnt <= OptionsModel::EncVariant_HiBit; NEXT(varnt))
{
binFiles << ENC_BINARY(m_sysinfo, OptionsModel::EncType_X264, arch, varnt);
}
binFiles << AVS_BINARY(m_sysinfo, arch == OptionsModel::EncArch_x64);
}
qDebug("[Validating binaries]");
for(QStringList::ConstIterator iter = binFiles.constBegin(); iter != binFiles.constEnd(); iter++)
{ {
qApp->processEvents(QEventLoop::ExcludeUserInputEvents); qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
QString current = binaries.takeFirst(); QFile *file = new QFile(*iter);
QFile *file = new QFile(QString("%1/toolset/%2").arg(m_sysinfo->getAppPath(), current)); qDebug("%s", file->fileName().toLatin1().constData());
if(file->open(QIODevice::ReadOnly)) if(file->open(QIODevice::ReadOnly))
{ {
if(!x264_is_executable(file->fileName())) if(!x264_is_executable(file->fileName()))
{ {
QMessageBox::critical(this, tr("Invalid File!"), tr("<nobr>At least on required tool is not a valid Win32 or Win64 binary:<br><tt style=\"whitespace:nowrap\">%1</tt><br><br>Please re-install the program in order to fix the problem!</nobr>").arg(QDir::toNativeSeparators(QString("%1/toolset/%2").arg(m_sysinfo->getAppPath(), current))).replace("-", "&minus;")); QMessageBox::critical(this, tr("Invalid File!"), tr("<nobr>At least on required tool is not a valid Win32 or Win64 binary:<br><tt style=\"whitespace:nowrap\">%1</tt><br><br>Please re-install the program in order to fix the problem!</nobr>").arg(QDir::toNativeSeparators(file->fileName())).replace("-", "&minus;"));
qFatal(QString("Binary is invalid: %1/toolset/%2").arg(m_sysinfo->getAppPath(), current).toLatin1().constData()); qFatal(QString("Binary is invalid: %1").arg(file->fileName()).toLatin1().constData());
X264_DELETE(file);
INIT_ERROR_EXIT(); INIT_ERROR_EXIT();
} }
m_toolsList << file; m_toolsList << file;
} }
else else
{ {
QMessageBox::critical(this, tr("File Not Found!"), tr("<nobr>At least on required tool could not be found:<br><tt style=\"whitespace:nowrap\">%1</tt><br><br>Please re-install the program in order to fix the problem!</nobr>").arg(QDir::toNativeSeparators(file->fileName())).replace("-", "&minus;"));
qFatal(QString("Binary not found: %1/toolset/%2").arg(m_sysinfo->getAppPath(), file->fileName()).toLatin1().constData());
X264_DELETE(file); X264_DELETE(file);
QMessageBox::critical(this, tr("File Not Found!"), tr("<nobr>At least on required tool could not be found:<br><tt style=\"whitespace:nowrap\">%1</tt><br><br>Please re-install the program in order to fix the problem!</nobr>").arg(QDir::toNativeSeparators(QString("%1/toolset/%2").arg(m_sysinfo->getAppPath(), current))).replace("-", "&minus;"));
qFatal(QString("Binary not found: %1/toolset/%2").arg(m_sysinfo->getAppPath(), current).toLatin1().constData());
INIT_ERROR_EXIT(); INIT_ERROR_EXIT();
} }
} }
qDebug(" ");
//---------------------------------------
// Check x265 binaries
//---------------------------------------
binFiles.clear();
for(OptionsModel::EncArch arch = OptionsModel::EncArch_x32; arch <= OptionsModel::EncArch_x64; NEXT(arch))
{
for(OptionsModel::EncVariant varnt = OptionsModel::EncVariant_LoBit; varnt <= OptionsModel::EncVariant_HiBit; NEXT(varnt))
{
binFiles << ENC_BINARY(m_sysinfo, OptionsModel::EncType_X265, arch, varnt);
}
}
qDebug("[Checking for x265 support]");
bool bHaveX265 = true;
for(QStringList::ConstIterator iter = binFiles.constBegin(); iter != binFiles.constEnd(); iter++)
{
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
QFile *file = new QFile(*iter);
qDebug("%s", file->fileName().toLatin1().constData());
if(file->open(QIODevice::ReadOnly))
{
if(x264_is_executable(file->fileName()))
{
m_toolsList << file;
continue;
}
X264_DELETE(file);
}
bHaveX265 = false;
qWarning("x265 binaries not found or incomplete -> disable x265 support!");
break;
}
if(bHaveX265)
{
qDebug("x265 support is officially enabled now!");
m_sysinfo->set256Support(true);
}
qDebug(" ");
//---------------------------------------
// Check for portable mode
//---------------------------------------
//Check for portable mode
if(x264_portable()) if(x264_portable())
{ {
bool ok = false; bool ok = false;
@ -826,6 +886,12 @@ void MainWindow::init(void)
if(rnd != val) INIT_ERROR_EXIT(); if(rnd != val) INIT_ERROR_EXIT();
} }
//---------------------------------------
// Check CPU capabilities
//---------------------------------------
const QStringList arguments = x264_arguments();
//Make sure this CPU can run x264 (requires MMX + MMXEXT/iSSE to run x264 with ASM enabled, additionally requires SSE1 for most x264 builds) //Make sure this CPU can run x264 (requires MMX + MMXEXT/iSSE to run x264 with ASM enabled, additionally requires SSE1 for most x264 builds)
if(!m_sysinfo->hasMMXSupport()) if(!m_sysinfo->hasMMXSupport())
{ {
@ -854,7 +920,10 @@ void MainWindow::init(void)
m_preferences->setAbortOnTimeout(false); m_preferences->setAbortOnTimeout(false);
} }
//Check for Avisynth support //---------------------------------------
// Check Avisynth support
//---------------------------------------
if(!CLIParser::checkFlag(CLI_PARAM_SKIP_AVS_CHECK, arguments)) if(!CLIParser::checkFlag(CLI_PARAM_SKIP_AVS_CHECK, arguments))
{ {
qDebug("[Check for Avisynth support]"); qDebug("[Check for Avisynth support]");
@ -879,14 +948,22 @@ void MainWindow::init(void)
{ {
QString text = tr("It appears that Avisynth is <b>not</b> currently installed on your computer.<br>Therefore Avisynth (.avs) input will <b>not</b> be working at all!").append("<br><br>"); QString text = tr("It appears that Avisynth is <b>not</b> currently installed on your computer.<br>Therefore Avisynth (.avs) input will <b>not</b> be working at all!").append("<br><br>");
text += tr("Please download and install Avisynth:").append("<br>").append(LINK("http://sourceforge.net/projects/avisynth2/files/AviSynth%202.5/")); text += tr("Please download and install Avisynth:").append("<br>").append(LINK("http://sourceforge.net/projects/avisynth2/files/AviSynth%202.5/"));
int val = QMessageBox::warning(this, tr("Avisynth Missing"), QString("<nobr>%1</nobr>").arg(text).replace("-", "&minus;"), tr("Quit"), tr("Ignore")); int val = QMessageBox::warning(this, tr("Avisynth Missing"), QString("<nobr>%1</nobr>").arg(text).replace("-", "&minus;"), tr("Close"), tr("Disable this Warning"));
if(val != 1) INIT_ERROR_EXIT(); if(val == 1)
{
m_preferences->setDisableWarnings(true);
PreferencesModel::savePreferences(m_preferences);
}
} }
} }
qDebug(" "); qDebug(" ");
} }
//Check for VapourSynth support //---------------------------------------
// Check VapurSynth support
//---------------------------------------
if(!CLIParser::checkFlag(CLI_PARAM_SKIP_VPS_CHECK, arguments)) if(!CLIParser::checkFlag(CLI_PARAM_SKIP_VPS_CHECK, arguments))
{ {
qDebug("[Check for VapourSynth support]"); qDebug("[Check for VapourSynth support]");
@ -897,7 +974,7 @@ void MainWindow::init(void)
QString text = tr("A critical error was encountered while checking your VapourSynth installation.").append("<br>"); QString text = tr("A critical error was encountered while checking your VapourSynth installation.").append("<br>");
text += tr("This is most likely caused by an erroneous VapourSynth Plugin, please try to clean your Filters folder!").append("<br>"); text += tr("This is most likely caused by an erroneous VapourSynth Plugin, please try to clean your Filters folder!").append("<br>");
text += tr("We suggest to move all .dll files out of your VapourSynth Filters folder and try again."); text += tr("We suggest to move all .dll files out of your VapourSynth Filters folder and try again.");
int val = QMessageBox::critical(this, tr("VapourSynth Error"), QString("<nobr>%1</nobr>").arg(text).replace("-", "&minus;"), tr("Quit"), tr("Ignore")); const int val = QMessageBox::critical(this, tr("VapourSynth Error"), QString("<nobr>%1</nobr>").arg(text).replace("-", "&minus;"), tr("Quit"), tr("Ignore"));
if(val != 1) INIT_ERROR_EXIT(); if(val != 1) INIT_ERROR_EXIT();
} }
if(result && (!vapoursynthPath.isEmpty())) if(result && (!vapoursynthPath.isEmpty()))
@ -913,17 +990,21 @@ void MainWindow::init(void)
QString text = tr("It appears that VapourSynth is <b>not</b> currently installed on your computer.<br>Therefore VapourSynth (.vpy) input will <b>not</b> be working at all!").append("<br><br>"); QString text = tr("It appears that VapourSynth is <b>not</b> currently installed on your computer.<br>Therefore VapourSynth (.vpy) input will <b>not</b> be working at all!").append("<br><br>");
text += tr("Please download and install VapourSynth for Windows (R19 or later):").append("<br>").append(LINK("http://www.vapoursynth.com/")).append("<br><br>"); text += tr("Please download and install VapourSynth for Windows (R19 or later):").append("<br>").append(LINK("http://www.vapoursynth.com/")).append("<br><br>");
text += tr("Note that Python 3.3 (x86) is a prerequisite for installing VapourSynth:").append("<br>").append(LINK("http://www.python.org/getit/")).append("<br>"); text += tr("Note that Python 3.3 (x86) is a prerequisite for installing VapourSynth:").append("<br>").append(LINK("http://www.python.org/getit/")).append("<br>");
int val = QMessageBox::warning(this, tr("VapourSynth Missing"), QString("<nobr>%1</nobr>").arg(text).replace("-", "&minus;"), tr("Quit"), tr("Ignore")); const int val = QMessageBox::warning(this, tr("VapourSynth Missing"), QString("<nobr>%1</nobr>").arg(text).replace("-", "&minus;"), tr("Close"), tr("Disable this Warning"));
if(val != 1) INIT_ERROR_EXIT(); if(val == 1)
{
m_preferences->setDisableWarnings(true);
PreferencesModel::savePreferences(m_preferences);
}
} }
} }
qDebug(" "); qDebug(" ");
} }
//Enable drag&drop support for this window, required for Qt v4.8.4+ //---------------------------------------
setAcceptDrops(true); // Check for Expiration
//---------------------------------------
//Check for expiration
if(x264_version_date().addMonths(6) < x264_current_date_safe()) if(x264_version_date().addMonths(6) < x264_current_date_safe())
{ {
QString text; QString text;
@ -950,6 +1031,16 @@ void MainWindow::init(void)
} }
} }
//---------------------------------------
// Finish initialization
//---------------------------------------
//Set Window title
setWindowTitle(QString("%1 [%2]").arg(tr("Simple %1 Launcher").arg(m_sysinfo->has256Support() ? "x264/x265" : "x264"), m_sysinfo->hasX64Support() ? "x64" : "x86"));
//Enable drag&drop support for this window, required for Qt v4.8.4+
setAcceptDrops(true);
//Update app staus //Update app staus
m_status = STATUS_IDLE; m_status = STATUS_IDLE;