Each encoder now can return an AbstractEncoderInfo object, which contains the supported I/O formats. Use this info the AddJob dialog.
This commit is contained in:
parent
d24ceaab78
commit
057336d162
@ -27,6 +27,13 @@ class QRegExp;
|
||||
template<class T> class QList;
|
||||
class AbstractSource;
|
||||
|
||||
class AbstractEncoderInfo
|
||||
{
|
||||
public:
|
||||
virtual QStringList supportedInputFormats (void) const = 0;
|
||||
virtual QStringList supportedOutputFormats(void) const = 0;
|
||||
};
|
||||
|
||||
class AbstractEncoder : public AbstractTool
|
||||
{
|
||||
public:
|
||||
@ -34,6 +41,7 @@ public:
|
||||
virtual ~AbstractEncoder(void);
|
||||
|
||||
virtual bool runEncodingPass(AbstractSource* pipedSource, const QString outputFile, const unsigned int &frames, const int &pass = 0, const QString &passLogFile = QString());
|
||||
static const AbstractEncoderInfo& getEncoderInfo(void);
|
||||
|
||||
protected:
|
||||
virtual void buildCommandLine(QStringList &cmdLine, const bool &usePipe, const unsigned int &frames, const QString &indexFile, const int &pass, const QString &passLogFile) = 0;
|
||||
|
@ -76,6 +76,48 @@ static QString MAKE_NAME(const char *baseName, const OptionsModel *options)
|
||||
return QString("%1, %2, %3").arg(QString::fromLatin1(baseName), arch, vari);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Encoder Info
|
||||
// ------------------------------------------------------------
|
||||
|
||||
class X264EncoderInfo : public AbstractEncoderInfo
|
||||
{
|
||||
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";
|
||||
return extLst;
|
||||
}
|
||||
|
||||
virtual QStringList supportedOutputFormats(void) const
|
||||
{
|
||||
QStringList extLst;
|
||||
extLst << "264";
|
||||
extLst << "mkv";
|
||||
extLst << "mp4";
|
||||
return extLst;
|
||||
}
|
||||
};
|
||||
|
||||
static const X264EncoderInfo s_x264EncoderInfo;
|
||||
|
||||
const AbstractEncoderInfo &X264Encoder::getEncoderInfo(void)
|
||||
{
|
||||
return s_x264EncoderInfo;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Constructor & Destructor
|
||||
// ------------------------------------------------------------
|
||||
|
@ -34,6 +34,8 @@ public:
|
||||
virtual QString printVersion(const unsigned int &revision, const bool &modified);
|
||||
virtual bool isVersionSupported(const unsigned int &revision, const bool &modified);
|
||||
|
||||
static const AbstractEncoderInfo& getEncoderInfo(void);
|
||||
|
||||
protected:
|
||||
virtual const QString &getBinaryPath() { return m_binaryFile; }
|
||||
virtual void buildCommandLine(QStringList &cmdLine, const bool &usePipe, const unsigned int &frames, const QString &indexFile, const int &pass, const QString &passLogFile);
|
||||
|
@ -77,6 +77,35 @@ static QString MAKE_NAME(const char *baseName, const OptionsModel *options)
|
||||
return QString("%1, %2, %3").arg(QString::fromLatin1(baseName), arch, vari);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Encoder Info
|
||||
// ------------------------------------------------------------
|
||||
|
||||
class X265EncoderInfo : public AbstractEncoderInfo
|
||||
{
|
||||
public:
|
||||
virtual QStringList supportedInputFormats(void) const
|
||||
{
|
||||
QStringList extLst;
|
||||
extLst << "y4m";
|
||||
return extLst;
|
||||
}
|
||||
|
||||
virtual QStringList supportedOutputFormats(void) const
|
||||
{
|
||||
QStringList extLst;
|
||||
extLst << "hevc";
|
||||
return extLst;
|
||||
}
|
||||
};
|
||||
|
||||
static const X265EncoderInfo s_x265EncoderInfo;
|
||||
|
||||
const AbstractEncoderInfo &X265Encoder::getEncoderInfo(void)
|
||||
{
|
||||
return s_x265EncoderInfo;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// Constructor & Destructor
|
||||
// ------------------------------------------------------------
|
||||
|
@ -34,6 +34,8 @@ public:
|
||||
virtual QString printVersion(const unsigned int &revision, const bool &modified);
|
||||
virtual bool isVersionSupported(const unsigned int &revision, const bool &modified);
|
||||
|
||||
static const AbstractEncoderInfo& getEncoderInfo(void);
|
||||
|
||||
protected:
|
||||
virtual const QString &getBinaryPath() { return m_binaryFile; }
|
||||
virtual void buildCommandLine(QStringList &cmdLine, const bool &usePipe, const unsigned int &frames, const QString &indexFile, const int &pass, const QString &passLogFile);
|
||||
|
@ -33,7 +33,7 @@ X264_FILE_TYPE_FILTERS[] =
|
||||
{ "mkv", "Matroska Files" },
|
||||
{ "mp4", "MPEG-4 Part 14 Container" },
|
||||
{ "264", "AVC/H.264 Elementary Stream"},
|
||||
{ "hevc", "HEVC/H.264 Elementary Stream"},
|
||||
{ "hevc", "HEVC/H.265 Elementary Stream"},
|
||||
};
|
||||
|
||||
class RecentlyUsed
|
||||
|
@ -26,7 +26,7 @@
|
||||
#define VER_X264_MAJOR 2
|
||||
#define VER_X264_MINOR 3
|
||||
#define VER_X264_PATCH 4
|
||||
#define VER_X264_BUILD 811
|
||||
#define VER_X264_BUILD 812
|
||||
|
||||
#define VER_X264_PORTABLE_EDITION (0)
|
||||
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include "model_preferences.h"
|
||||
#include "model_sysinfo.h"
|
||||
#include "model_recently.h"
|
||||
#include "encoder_x264.h"
|
||||
#include "encoder_x265.h"
|
||||
#include "win_help.h"
|
||||
#include "win_editor.h"
|
||||
|
||||
@ -496,34 +498,50 @@ void AddJobDialog::accept(void)
|
||||
return;
|
||||
}
|
||||
|
||||
//Is the type of source supported? (as far as we can tell)
|
||||
if((sourceFile.suffix().compare("AVS", Qt::CaseInsensitive) == 0) && (!m_sysinfo->hasAVSSupport()))
|
||||
//Get encoder info
|
||||
const AbstractEncoderInfo &encoderInfo = getEncoderInfo(ui->cbxEncoderType->currentIndex());
|
||||
|
||||
//Is the type of the source file supported? (as far as we can tell)
|
||||
if(sourceFile.suffix().compare("AVS", Qt::CaseInsensitive) == 0)
|
||||
{
|
||||
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)
|
||||
if(!m_sysinfo->hasAVSSupport())
|
||||
{
|
||||
return;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(((sourceFile.suffix().compare("VPY", Qt::CaseInsensitive) == 0) || (sourceFile.suffix().compare("PY", Qt::CaseInsensitive) == 0)) && (!m_sysinfo->hasVPSSupport()))
|
||||
else if((sourceFile.suffix().compare("VPY", Qt::CaseInsensitive) == 0) || (sourceFile.suffix().compare("PY", Qt::CaseInsensitive) == 0))
|
||||
{
|
||||
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)
|
||||
if(!m_sysinfo->hasVPSSupport())
|
||||
{
|
||||
return;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const QStringList inputFormats = encoderInfo.supportedInputFormats();
|
||||
if(!inputFormats.contains(sourceFile.suffix(), Qt::CaseInsensitive))
|
||||
{
|
||||
if(QMessageBox::warning(this, tr("Unsupported input format"), tr("<nobr>The selected encoder does <b>not</b> support the selected input format!</nobr>"), tr("Abort"), tr("Ingnore (at your own risk!)")) != 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Is output file extension supported by encoder?
|
||||
const QStringList outputFormats = encoderInfo.supportedOutputFormats();
|
||||
QFileInfo outputFile = QFileInfo(this->outputFile());
|
||||
if((outputFile.suffix().compare("264", Qt::CaseInsensitive) == 0) && (ui->cbxEncoderType->currentIndex() == OptionsModel::EncType_X265))
|
||||
if(!outputFormats.contains(outputFile.suffix(), Qt::CaseInsensitive))
|
||||
{
|
||||
QMessageBox::warning(this, tr("H.264 unsupported!"), tr("<nobr>Sorry, x265 cannot output H.264/AVC files!</nobr>"));
|
||||
ui->editOutput->setText(QString("%1/%2.hevc").arg(outputFile.absolutePath(), outputFile.completeBaseName()));
|
||||
return;
|
||||
}
|
||||
else if((outputFile.suffix().compare("HEVC", Qt::CaseInsensitive) == 0) && (ui->cbxEncoderType->currentIndex() == OptionsModel::EncType_X264))
|
||||
{
|
||||
QMessageBox::warning(this, tr("H.264 unsupported!"), tr("<nobr>Sorry, x264 cannot output H.265/HEVC files!</nobr>"));
|
||||
ui->editOutput->setText(QString("%1/%2.264").arg(outputFile.absolutePath(), outputFile.completeBaseName()));
|
||||
QMessageBox::warning(this, tr("Unsupported output format"), tr("<nobr>Sorry, the selected encoder does not support the selected output format!</nobr>"));
|
||||
ui->editOutput->setText(QDir::toNativeSeparators(QString("%1/%2.%3").arg(outputFile.absolutePath(), outputFile.completeBaseName(), outputFormats.first())));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1120,3 +1138,17 @@ QString AddJobDialog::getInputFilterLst(void)
|
||||
filters << QString("All files (*.*)");
|
||||
return filters.join(";;");
|
||||
}
|
||||
|
||||
const AbstractEncoderInfo& AddJobDialog::getEncoderInfo(const int &encoder)
|
||||
{
|
||||
switch(encoder)
|
||||
{
|
||||
case OptionsModel::EncType_X264:
|
||||
return X264Encoder::getEncoderInfo();
|
||||
case OptionsModel::EncType_X265:
|
||||
return X265Encoder::getEncoderInfo();
|
||||
break;
|
||||
default:
|
||||
THROW("Unsupported encoder type!");
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ class OptionsModel;
|
||||
class RecentlyUsed;
|
||||
class SysinfoModel;
|
||||
class PreferencesModel;
|
||||
class AbstractEncoderInfo;
|
||||
class QComboBox;
|
||||
|
||||
namespace Ui
|
||||
@ -59,6 +60,7 @@ public:
|
||||
static QString AddJobDialog::getFilterStr(const int filterIndex);
|
||||
static QString getFilterLst(void);
|
||||
static QString getInputFilterLst(void);
|
||||
const AbstractEncoderInfo& getEncoderInfo(const int &encoder);
|
||||
|
||||
protected:
|
||||
OptionsModel *const m_options;
|
||||
|
Loading…
Reference in New Issue
Block a user