OSDN Git Service

Bump x264 version to API-#157 (r2917).
[x264-launcher/x264-launcher.git] / src / encoder_abstract.h
index bf38b17..c3c1f2e 100644 (file)
@@ -1,6 +1,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Simple x264 Launcher
-// Copyright (C) 2004-2014 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2018 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
 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 //
 // http://www.gnu.org/licenses/gpl-2.0.txt
-///////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
 
 #pragma once
 
 #include "tool_abstract.h"
+#include "model_options.h"
 
 class QRegExp;
 template<class T> class QList;
+template <class T1, class T2> struct QPair;
 class AbstractSource;
+class ClipInfo;
+
+class AbstractEncoderInfo
+{
+public:
+       typedef enum _RCType
+       {
+               RC_TYPE_QUANTIZER = 0,
+               RC_TYPE_RATE_KBPS = 1,
+               RC_TYPE_MULTIPASS = 2
+       }
+       RCType;
+
+       typedef enum _ArchBit
+       {
+               ARCH_TYPE_X86 = 0,
+               ARCH_TYPE_X64 = 1,
+       }
+       ArchBit;
+
+       typedef QPair<QString, RCType>  RCMode;
+       typedef QPair<QString, ArchBit> ArchId;
+
+       virtual QString       getName(void) const = 0;
+       virtual QString       getFullName(const quint32 &encArch, const quint32 &encVariant) const;
+       virtual QList<ArchId> getArchitectures(void) const = 0;
+       virtual QStringList   getVariants(void) const = 0;
+       virtual QList<RCMode> getRCModes(void) const = 0;
+       virtual QStringList   getProfiles(const quint32 &variant) const = 0;
+       virtual QStringList   getTunings(void) const = 0;
+       virtual QStringList   getPresets(void) const = 0;
+       virtual QStringList   supportedOutputFormats(void) const = 0;
+       virtual bool          isInputTypeSupported(const int format) const = 0;
+       virtual QString       getBinaryPath(const SysinfoModel *sysinfo, const quint32 &encArch, const quint32 &encVariant) const = 0;
+       virtual QStringList   getDependencies(const SysinfoModel *sysinfo, const quint32 &encArch, const quint32 &encVariant) const;
+       virtual QString       getHelpCommand(void) const = 0;
+
+       //Utilities
+       QString archToString   (const quint32 &index) const;
+       ArchBit archToType     (const quint32 &index) const;
+       QString variantToString(const quint32 &index) const;
+       QString rcModeToString (const quint32 &index) const;
+       RCType  rcModeToType   (const quint32 &index) const;
+};
 
 class AbstractEncoder : public AbstractTool
 {
@@ -33,16 +79,17 @@ public:
        AbstractEncoder(JobObject *jobObject, const OptionsModel *options, const SysinfoModel *const sysinfo, const PreferencesModel *const preferences, JobStatus &jobStatus, volatile bool *abort, volatile bool *pause, QSemaphore *semaphorePause, const QString &sourceFile, const QString &outputFile);
        virtual ~AbstractEncoder(void);
 
-       bool runEncodingPass(AbstractSource* pipedSource, const QString outputFile, const unsigned int &frames, const int &pass = 0, const QString &passLogFile = QString());
+       virtual bool runEncodingPass(AbstractSource* pipedSource, const QString outputFile, const ClipInfo &clipInfo, const int &pass = 0, const QString &passLogFile = QString());
+       
+       virtual const AbstractEncoderInfo& getEncoderInfo(void) const = 0;
 
 protected:
-       virtual void buildCommandLine(QStringList &cmdLine, const bool &usePipe, const unsigned int &frames, const QString &indexFile, const int &pass, const QString &passLogFile) = 0;
+       virtual void buildCommandLine(QStringList &cmdLine, const bool &usePipe, const ClipInfo &clipInfo, const QString &indexFile, const int &pass, const QString &passLogFile) = 0;
 
        virtual void runEncodingPass_init(QList<QRegExp*> &patterns) = 0;
-       virtual void runEncodingPass_parseLine(const QString &line, QList<QRegExp*> &patterns, const int &pass) = 0;
+       virtual void runEncodingPass_parseLine(const QString &line, const QList<QRegExp*> &patterns, const ClipInfo &clipInfo, const int &pass, double &last_progress, double &size_estimate) = 0;
 
-       static QStringList splitParams(const QString &params, const QString &sourceFile, const QString &outputFile);
-       static qint64 estimateSize(const QString &fileName, const int &progress);
+       static double estimateSize(const QString &fileName, const double &progress);
        static QString sizeToString(qint64 size);
 
        const QString &m_sourceFile;