X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fthread_encode.h;h=e8b53a278a602aab01ba5346f59cba9be300fb95;hb=7e7ac8c7037571693078602d4d85579e07f5024f;hp=52f474a42f9b74a73284fdfcfe657545a03d3e6a;hpb=8ebfc462402836b9e9d1fdb097c6e30963e23600;p=x264-launcher%2Fx264-launcher.git diff --git a/src/thread_encode.h b/src/thread_encode.h index 52f474a..e8b53a2 100644 --- a/src/thread_encode.h +++ b/src/thread_encode.h @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Simple x264 Launcher -// Copyright (C) 2004-2012 LoRd_MuldeR +// Copyright (C) 2004-2020 LoRd_MuldeR // // 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 @@ -21,83 +21,105 @@ #pragma once +#include "thread_abstract.h" +#include "model_status.h" + #include #include #include #include +#include +class SysinfoModel; +class PreferencesModel; class OptionsModel; class QProcess; +class JobObject; +class AbstractEncoder; +class AbstractSource; -class EncodeThread : public QThread +class EncodeThread : public AbstractThread { Q_OBJECT public: - enum JobStatus - { - JobStatus_Enqueued = 0, - JobStatus_Starting = 1, - JobStatus_Indexing = 2, - JobStatus_Running = 3, - JobStatus_Running_Pass1 = 4, - JobStatus_Running_Pass2 = 5, - JobStatus_Completed = 6, - JobStatus_Failed = 7, - JobStatus_Aborting = 8, - JobStatus_Aborted = 9 - }; - - EncodeThread(const QString &sourceFileName, const QString &outputFileName, const OptionsModel *options, const QString &binDir); + EncodeThread(const QString &sourceFileName, const QString &outputFileName, const OptionsModel *options, const SysinfoModel *const sysinfo, const PreferencesModel *const m_preferences); ~EncodeThread(void); QUuid getId(void) { return this->m_jobId; }; - const QString &sourceFileName(void) { return this->m_sourceFileName; }; - const QString &outputFileName(void) { return this->m_outputFileName; }; + const QString &sourceFileName(void) const { return this->m_sourceFileName; } + const QString &outputFileName(void) const { return this->m_outputFileName; } + const OptionsModel *options(void) const { return m_options; } + + void pauseJob(void) + { + m_pause = true; + } - void abortJob(void) { m_abort = true; } + void resumeJob(void) + { + m_pause = false; + m_semaphorePaused.release(); + } -protected: - static QMutex m_mutex_startProcess; - static void *m_handle_jobObject; + void abortJob(void) + { + m_abort = true; + m_pause = false; + m_semaphorePaused.release(); + } - static const int m_processTimeoutInterval = 60000; +protected: + //Globals + const SysinfoModel *const m_sysinfo; + const PreferencesModel *const m_preferences; //Constants const QUuid m_jobId; + const OptionsModel *m_options; const QString m_sourceFileName; const QString m_outputFileName; - const OptionsModel *m_options; - const QString m_binDir; //Flags volatile bool m_abort; + volatile bool m_pause; + //Synchronization + QSemaphore m_semaphorePaused; + + //Job Object + JobObject *m_jobObject; + //Internal status values JobStatus m_status; unsigned int m_progress; + QString m_details; + + //Encoder and Source objects + AbstractEncoder *m_encoder; + AbstractSource *m_pipedSource; //Entry point virtual void run(void); - //Encode functions - void encode(void); - bool runEncodingPass(int pass = 0, const QString &passLogFile = QString()); - QStringList buildCommandLine(int pass = 0, const QString &passLogFile = QString()); - - //Auxiallary Stuff - void log(const QString &text) { emit messageLogged(m_jobId, text); } - inline void setStatus(JobStatus newStatus); - inline void setProgress(unsigned int newProgress); - inline void setDetails(const QString &text); - bool startProcess(QProcess &process, const QString &program, const QStringList &args); - - static QString commandline2string(const QString &program, const QStringList &arguments); + //Thread main + virtual int threadMain(void); + + //Static functions + static QString getPasslogFile(const QString &outputFile); signals: - void statusChanged(const QUuid &jobId, EncodeThread::JobStatus newStatus); - void progressChanged(const QUuid &jobId, unsigned int newProgress); - void messageLogged(const QUuid &jobId, const QString &text); + void statusChanged(const QUuid &jobId, const JobStatus &newStatus); + void progressChanged(const QUuid &jobId, const unsigned int &newProgress); + void messageLogged(const QUuid &jobId, qint64, const QString &text); void detailsChanged(const QUuid &jobId, const QString &details); -}; +private slots: + void log(const QString &text); + void setStatus(const JobStatus &newStatus); + void setProgress(const unsigned int &newProgress); + void setDetails(const QString &text); + +public slots: + void start(Priority priority = InheritPriority); +};