Implemented x265 detection. Also improved x264 and Avs2YUV verification.
This commit is contained in:
parent
2bafd5f5f6
commit
f35b9d2969
@ -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());
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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())
|
||||||
|
145
src/win_main.cpp
145
src/win_main.cpp
@ -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("-", "−"));
|
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("-", "−"));
|
||||||
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("-", "−"));
|
||||||
|
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("-", "−"));
|
|
||||||
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("-", "−"), tr("Quit"), tr("Ignore"));
|
int val = QMessageBox::warning(this, tr("Avisynth Missing"), QString("<nobr>%1</nobr>").arg(text).replace("-", "−"), 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("-", "−"), tr("Quit"), tr("Ignore"));
|
const int val = QMessageBox::critical(this, tr("VapourSynth Error"), QString("<nobr>%1</nobr>").arg(text).replace("-", "−"), 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("-", "−"), tr("Quit"), tr("Ignore"));
|
const int val = QMessageBox::warning(this, tr("VapourSynth Missing"), QString("<nobr>%1</nobr>").arg(text).replace("-", "−"), 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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user