#define VER_LAMEXP_MINOR_LO 5
#define VER_LAMEXP_TYPE Beta
#define VER_LAMEXP_PATCH 4
-#define VER_LAMEXP_BUILD 1978
+#define VER_LAMEXP_BUILD 1981
#define VER_LAMEXP_CONFG 1934
///////////////////////////////////////////////////////////////////////////////
{
}
-bool AACDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool AACDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
AACDecoder(void);
~AACDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool AC3Decoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool AC3Decoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
AC3Decoder(void);
~AC3Decoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool ADPCMDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool ADPCMDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
ADPCMDecoder(void);
~ADPCMDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool ALACDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool ALACDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
ALACDecoder(void);
~ALACDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
typedef struct { const char *const name; const char *const *const exts; } supportedType_t;
//Internal decoder API
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag) = 0;
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag) = 0;
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static bool isDecoderAvailable(void);
static const supportedType_t *supportedTypes(void);
{
}
-bool AvisynthDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool AvisynthDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
AvisynthDecoder(void);
~AvisynthDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool FLACDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool FLACDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
FLACDecoder(void);
~FLACDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool MACDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool MACDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
MACDecoder(void);
~MACDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool MP3Decoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool MP3Decoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
MP3Decoder(void);
~MP3Decoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool MusepackDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool MusepackDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
MusepackDecoder(void);
~MusepackDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool OpusDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool OpusDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
OpusDecoder(void);
~OpusDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool ShortenDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool ShortenDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
ShortenDecoder(void);
~ShortenDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool SpeexDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool SpeexDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
SpeexDecoder(void);
~SpeexDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool TTADecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool TTADecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
TTADecoder(void);
~TTADecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool VorbisDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool VorbisDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
VorbisDecoder(void);
~VorbisDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool WMADecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool WMADecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
WMADecoder(void);
~WMADecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool WavPackDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool WavPackDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
WavPackDecoder(void);
~WavPackDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
#include <QDir>
//Type
-typedef struct _ProgressData
+typedef struct _callback_t
{
- WaveDecoder *const instance;
- volatile bool *const abrtFlag;
+ WaveDecoder *const pInstance;
+ QAtomicInt *const abortFlag;
}
-ProgressData;
+callback_t;
WaveDecoder::WaveDecoder(void)
{
{
}
-bool WaveDecoder::decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag)
+bool WaveDecoder::decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag)
{
emit messageLogged(QString("Copy file \"%1\" to \"%2\"").arg(QDir::toNativeSeparators(sourceFile), QDir::toNativeSeparators(outputFile)));
emit statusUpdated(0);
- ProgressData progressData = { this, abortFlag };
+ callback_t progressData = { this, &abortFlag };
const bool okay = MUtils::OS::copy_file(sourceFile, outputFile, true, progressHandler, &progressData);
emit statusUpdated(100);
return okay;
}
-bool WaveDecoder::progressHandler(const double &progress, void *const data)
+bool WaveDecoder::progressHandler(const double &progress, void *const userData)
{
- if(data)
+ if(const callback_t *const ptr = reinterpret_cast<callback_t*>(userData))
{
- //qWarning("Copy progress: %.2f", progress);
- reinterpret_cast<ProgressData*>(data)->instance->updateProgress(progress);
- return (!(*reinterpret_cast<ProgressData*>(data)->abrtFlag));
+ ptr->pInstance->updateProgress(progress);
+ return ptr->abortFlag->operator!();
}
return true;
}
WaveDecoder(void);
~WaveDecoder(void);
- virtual bool decode(const QString &sourceFile, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool decode(const QString &sourceFile, const QString &outputFile, QAtomicInt &abortFlag);
static bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
static const supportedType_t *supportedTypes(void);
{
}
-bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool AACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
AACEncoder(void);
~AACEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const bool needsTimingInfo(void);
{
}
-bool FDKAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool FDKAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
FDKAACEncoder(void);
~FDKAACEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
//Advanced options
{
}
-bool FHGAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool FHGAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
FHGAACEncoder(void);
~FHGAACEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const unsigned int *supportedChannelCount(void);
virtual const unsigned int *supportedBitdepths(void);
{
}
-bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
const QString qaac_bin = m_binary_qaac64.isEmpty() ? m_binary_qaac32 : m_binary_qaac64;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
QAACEncoder(void);
~QAACEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
//Advanced options
{
}
-bool AC3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool AC3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
AC3Encoder(void);
~AC3Encoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const unsigned int *supportedChannelCount(void);
virtual const unsigned int *supportedSamplerates(void);
virtual ~AbstractEncoder(void);
//Internal encoder API
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag) = 0;
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag) = 0;
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion) = 0;
virtual const unsigned int *supportedSamplerates(void);
virtual const unsigned int *supportedChannelCount(void);
{
}
-bool DCAEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool DCAEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
DCAEncoder(void);
~DCAEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const unsigned int *supportedChannelCount(void);
virtual const unsigned int *supportedBitdepths(void);
{
}
-bool FLACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool FLACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
FLACEncoder(void);
~FLACEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const unsigned int *supportedChannelCount(void);
virtual const unsigned int *supportedBitdepths(void);
{
}
-bool MACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool MACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
MACEncoder(void);
~MACEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
//Encoder info
{
}
-bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool MP3Encoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
MP3Encoder(void);
~MP3Encoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const unsigned int *supportedChannelCount(void);
{
}
-bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if (checkFlag(abortFlag))
{
process.kill();
bAborted = true;
OpusEncoder(void);
~OpusEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual const unsigned int *supportedChannelCount(void);
virtual const unsigned int *supportedBitdepths(void);
{
}
-bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
VorbisEncoder(void);
~VorbisEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
virtual void setBitrateLimits(int minimumBitrate, int maximumBitrate);
typedef struct _callback_t
{
- WaveEncoder *pInstance;
- volatile bool *abortFlag;
+ WaveEncoder *const pInstance;
+ QAtomicInt *const abortFlag;
}
callback_t;
{
}
-bool WaveEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag)
+bool WaveEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag)
{
emit messageLogged(QString("Copy file \"%1\" to \"%2\"\n").arg(sourceFile, outputFile));
- callback_t callbackData;
- callbackData.abortFlag = abortFlag;
- callbackData.pInstance = this;
+ callback_t callbackData = { this, &abortFlag };
emit statusUpdated(0);
const bool success = MUtils::OS::copy_file(sourceFile, outputFile, true, progressCallback, &callbackData);
}
else
{
- emit messageLogged((*abortFlag) ? L1S("Operation cancelled by user!") : L1S("Error: Failed to copy file!"));
+ emit messageLogged(checkFlag(abortFlag) ? L1S("Operation cancelled by user!") : L1S("Error: Failed to copy file!"));
}
return success;
bool WaveEncoder::progressCallback(const double &progress, void *const userData)
{
- const callback_t *const ptr = reinterpret_cast<callback_t*>(userData);
- if (*(ptr->abortFlag))
+ if (const callback_t *const ptr = reinterpret_cast<callback_t*>(userData))
{
- return false; /*user aborted*/
+ ptr->pInstance->updateProgress(progress);
+ return ptr->abortFlag->operator!();
}
- ptr->pInstance->updateProgress(progress);
return true;
}
WaveEncoder(void);
~WaveEncoder(void);
- virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, volatile bool *abortFlag);
+ virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, const unsigned int channels, const QString &outputFile, QAtomicInt &abortFlag);
virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion);
//Encoder info
};
//Internal decoder API
- virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag) = 0;
+ virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag) = 0;
};
{
}
-AbstractFilter::FilterResult DownmixFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag)
+AbstractFilter::FilterResult DownmixFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag)
{
unsigned int channels = formatInfo->audioChannels();
emit messageLogged(QString().sprintf("--> Number of channels is: %d\n", channels));
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
DownmixFilter(void);
~DownmixFilter(void);
- virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag);
+ virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag);
private:
const QString m_binary;
{
}
-AbstractFilter::FilterResult NormalizeFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag)
+AbstractFilter::FilterResult NormalizeFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
NormalizeFilter(const int &peakVolume = -50, const bool &dnyAudNorm = false, const bool &channelsCoupled = true, const int &filterSize = 31);
~NormalizeFilter(void);
- virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag);
+ virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag);
private:
const QString m_binary;
{
}
-AbstractFilter::FilterResult ResampleFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag)
+AbstractFilter::FilterResult ResampleFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
ResampleFilter(int samplingRate = 0, int bitDepth = 0);
~ResampleFilter(void);
- virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag);
+ virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag);
private:
const QString m_binary;
{
}
-AbstractFilter::FilterResult ToneAdjustFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag)
+AbstractFilter::FilterResult ToneAdjustFilter::apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
ToneAdjustFilter(int bass = 0, int treble = 0);
~ToneAdjustFilter(void);
- virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, volatile bool *abortFlag);
+ virtual FilterResult apply(const QString &sourceFile, const QString &outputFile, AudioFileModel_TechInfo *const formatInfo, QAtomicInt &abortFlag);
private:
const QString m_binary;
#include <float.h>
#include <limits>
+//Utils
+#define IS_ABORTED (!(!m_abortFlag))
+
////////////////////////////////////////////////////////////
// Constructor
////////////////////////////////////////////////////////////
{
m_bSuccess = false;
m_bAborted = false;
- m_abortFlag = false;
m_nTracksSuccess = 0;
m_nTracksSkipped = 0;
m_decompressedFiles.clear();
QString tempFile = QString("%1/~%2.wav").arg(m_outputDir, MUtils::next_rand_str());
connect(decoder, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection);
- if(decoder->decode(inputFileList.at(i), tempFile, &m_abortFlag))
+ if(decoder->decode(inputFileList.at(i), tempFile, m_abortFlag))
{
m_decompressedFiles.insert(inputFileList.at(i), tempFile);
m_tempFiles.append(tempFile);
m_decompressedFiles.insert(inputFileList.at(i), inputFileList.at(i));
}
- if(m_abortFlag)
+ if(IS_ABORTED)
{
m_bAborted = true;
qWarning("The user has requested to abort the process!");
splitFile(outputFile, trackNo, trackFile, trackOffset, trackLength, trackMetaInfo, nTracksComplete);
emit progressValChanged(nTracksComplete += 10);
- if(m_abortFlag)
+ if(IS_ABORTED)
{
m_bAborted = true;
qWarning("The user has requested to abort the process!");
while(process.state() != QProcess::NotRunning)
{
- if(m_abortFlag)
+ if(IS_ABORTED)
{
process.kill();
qWarning("Process was aborted on user request!");
void handleUpdate(int progress);
public slots:
- void abortProcess(void) { m_abortFlag = true; }
+ void abortProcess(void) { m_abortFlag.ref(); }
private:
void splitFile(const QString &output, const int trackNo, const QString &file, const double offset, const double length, const AudioFileModel_MetaInfo &metaInfo, const int baseProgress);
bool m_bAborted;
bool m_bSuccess;
- volatile bool m_abortFlag;
+ QAtomicInt m_abortFlag;
CueSheetModel *m_model;
QMap<QString,AudioFileModel> m_inputFilesInfo;
}
}
+//Utils
+#define IS_ABORTED (!(!m_bAborted))
+
////////////////////////////////////////////////////////////
// Constructor
////////////////////////////////////////////////////////////
m_templateFile(NULL),
m_pool(NULL)
{
- m_bSuccess = false;
- m_bAborted = false;
-
m_filesAccepted = 0;
m_filesRejected = 0;
m_filesDenied = 0;
void FileAnalyzer::run()
{
- m_bSuccess = false;
+ m_bSuccess.fetchAndStoreOrdered(0);
m_tasksCounterNext = 0;
m_tasksCounterDone = 0;
m_pool->waitForDone();
//Was opertaion aborted?
- if(m_bAborted)
+ if(IS_ABORTED)
{
qWarning("Operation cancelled by user!");
return;
}
qDebug("All files added.\n");
- m_bSuccess = true;
-
+ m_bSuccess.fetchAndStoreOrdered(1);
QThread::msleep(333);
}
bool FileAnalyzer::analyzeNextFile(void)
{
- if(!(m_inputFiles.isEmpty() || m_bAborted))
+ if(!(m_inputFiles.isEmpty() || IS_ABORTED))
{
const unsigned int taskId = m_tasksCounterNext++;
const QString currentFile = QDir::fromNativeSeparators(m_inputFiles.takeFirst());
m_timer->restart();
}
- AnalyzeTask *task = new AnalyzeTask(taskId, currentFile, m_templateFile->filePath(), &m_bAborted);
+ AnalyzeTask *task = new AnalyzeTask(taskId, currentFile, m_templateFile->filePath(), m_bAborted);
connect(task, SIGNAL(fileAnalyzed(const unsigned int, const int, AudioFileModel)), this, SLOT(taskFileAnalyzed(unsigned int, const int, AudioFileModel)), Qt::QueuedConnection);
connect(task, SIGNAL(taskCompleted(const unsigned int)), this, SLOT(taskThreadFinish(const unsigned int)), Qt::QueuedConnection);
m_runningTaskIds.insert(taskId); m_pool->start(task);
FileAnalyzer(const QStringList &inputFiles);
~FileAnalyzer(void);
void run();
- bool getSuccess(void) { return (!isRunning()) && (!m_bAborted) && m_bSuccess; }
+ bool getSuccess(void) { return (!isRunning()) && (!m_bAborted) && (!(!m_bSuccess)); }
unsigned int filesAccepted(void);
unsigned int filesRejected(void);
void progressMaxChanged(unsigned int);
public slots:
- void abortProcess(void) { m_bAborted = true; exit(-1); }
+ void abortProcess(void) { m_bAborted.ref(); exit(-1); }
private slots:
void initializeTasks(void);
static const char *g_tags_gen[];
static const char *g_tags_aud[];
- volatile bool m_bAborted;
- volatile bool m_bSuccess;
+ QAtomicInt m_bAborted;
+ QAtomicInt m_bSuccess;
};
#define IS_KEY(KEY) (key.compare(KEY, Qt::CaseInsensitive) == 0)
#define IS_SEC(SEC) (key.startsWith((SEC "_"), Qt::CaseInsensitive))
#define FIRST_TOK(STR) (STR.split(" ", QString::SkipEmptyParts).first())
+#define IS_ABORTED (!(!m_abortFlag))
////////////////////////////////////////////////////////////
// Constructor
////////////////////////////////////////////////////////////
-AnalyzeTask::AnalyzeTask(const int taskId, const QString &inputFile, const QString &templateFile, volatile bool *abortFlag)
+AnalyzeTask::AnalyzeTask(const int taskId, const QString &inputFile, const QString &templateFile, QAtomicInt &abortFlag)
:
m_taskId(taskId),
m_inputFile(inputFile),
AudioFileModel file = analyzeFile(currentFile, &fileType);
- if(*m_abortFlag)
+ if(IS_ABORTED)
{
qWarning("Operation cancelled by user!");
return;
while(process.state() != QProcess::NotRunning)
{
- if(*m_abortFlag)
+ if(IS_ABORTED)
{
process.kill();
qWarning("Process was aborted on user request!");
while(process.state() != QProcess::NotRunning)
{
- if(*m_abortFlag)
+ if(IS_ABORTED)
{
process.kill();
qWarning("Process was aborted on user request!");
Q_OBJECT
public:
- AnalyzeTask(const int taskId, const QString &inputFile, const QString &templateFile, volatile bool *abortFlag);
+ AnalyzeTask(const int taskId, const QString &inputFile, const QString &templateFile, QAtomicInt &abortFlag);
~AnalyzeTask(void);
enum fileType_t
const QString m_templateFile;
const QString m_inputFile;
- volatile bool *m_abortFlag;
+ QAtomicInt &m_abortFlag;
};
#define DIFF(X,Y) ((X > Y) ? (X-Y) : (Y-X))
#define IS_WAVE(X) ((X.containerType().compare("Wave", Qt::CaseInsensitive) == 0) && (X.audioType().compare("PCM", Qt::CaseInsensitive) == 0))
+#define IS_ABORTED (!(!m_aborted))
#define STRDEF(STR,DEF) ((!STR.isEmpty()) ? STR : DEF)
////////////////////////////////////////////////////////////
m_overwriteMode(OverwriteMode_KeepBoth),
m_keepDateTime(false),
m_initialized(-1),
- m_aborted(false),
m_propDetect(new WaveProperties())
{
connect(m_encoder, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection);
bool ProcessThread::init(void)
{
- if(m_initialized < 0)
+ if(m_initialized.testAndSetOrdered((-1), 0))
{
- m_initialized = 0;
-
//Initialize job status
qDebug("Process thread %s has started.", m_jobId.toString().toLatin1().constData());
emit processStateInitialized(m_jobId, QFileInfo(m_audioFile.filePath()).fileName(), tr("Starting..."), ProgressModel::JobRunning);
bool ProcessThread::start(QThreadPool *const pool)
{
//Make sure object was initialized correctly
- if(m_initialized < 0)
+ if (m_initialized < 0)
{
MUTILS_THROW("Object not initialized yet!");
}
- if(m_initialized < 1)
+ if (m_initialized.testAndSetOrdered(0, 1))
{
- m_initialized = 1;
-
m_outFileName.clear();
+ m_aborted.fetchAndStoreOrdered(0);
bool bSuccess = false;
//Generate output file name
connect(decoder, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection);
connect(decoder, SIGNAL(messageLogged(QString)), this, SLOT(handleMessage(QString)), Qt::DirectConnection);
- bSuccess = decoder->decode(sourceFile, tempFile, &m_aborted);
+ bSuccess = decoder->decode(sourceFile, tempFile, m_aborted);
MUTILS_DELETE(decoder);
if(bSuccess)
// Update audio properties after decode
//-----------------------------------------------------
- if(bSuccess && !m_aborted && IS_WAVE(m_audioFile.techInfo()))
+ if(bSuccess && (!m_aborted) && IS_WAVE(m_audioFile.techInfo()))
{
if(m_encoder->supportedSamplerates() || m_encoder->supportedBitdepths() || m_encoder->supportedChannelCount() || m_encoder->needsTimingInfo() || !m_filters.isEmpty())
{
m_currentStep = AnalyzeStep;
- bSuccess = m_propDetect->detect(sourceFile, &m_audioFile.techInfo(), &m_aborted);
+ bSuccess = m_propDetect->detect(sourceFile, &m_audioFile.techInfo(), m_aborted);
if(bSuccess)
{
connect(poFilter, SIGNAL(statusUpdated(int)), this, SLOT(handleUpdate(int)), Qt::DirectConnection);
connect(poFilter, SIGNAL(messageLogged(QString)), this, SLOT(handleMessage(QString)), Qt::DirectConnection);
- const AbstractFilter::FilterResult filterResult = poFilter->apply(sourceFile, tempFile, &m_audioFile.techInfo(), &m_aborted);
+ const AbstractFilter::FilterResult filterResult = poFilter->apply(sourceFile, tempFile, &m_audioFile.techInfo(), m_aborted);
switch (filterResult)
{
case AbstractFilter::FILTER_SUCCESS:
// Encode audio file
//-----------------------------------------------------
- if(bSuccess && !m_aborted)
+ if(bSuccess && (!m_aborted))
{
m_currentStep = EncodingStep;
- bSuccess = m_encoder->encode(sourceFile, m_audioFile.metaInfo(), m_audioFile.techInfo().duration(), m_audioFile.techInfo().audioChannels(), m_outFileName, &m_aborted);
+ bSuccess = m_encoder->encode(sourceFile, m_audioFile.metaInfo(), m_audioFile.techInfo().duration(), m_audioFile.techInfo().audioChannels(), m_outFileName, m_aborted);
}
//Clean-up
- if((!bSuccess) || m_aborted)
+ if((!bSuccess) || IS_ABORTED)
{
QFileInfo fileInfo(m_outFileName);
if(fileInfo.exists() && (fileInfo.size() < 1024))
MUtils::OS::sleep_ms(12);
//Report result
- emit processStateChanged(m_jobId, (m_aborted ? tr("Aborted!") : (bSuccess ? tr("Done.") : tr("Failed!"))), ((bSuccess && !m_aborted) ? ProgressModel::JobComplete : ProgressModel::JobFailed));
+ emit processStateChanged(m_jobId, (IS_ABORTED ? tr("Aborted!") : (bSuccess ? tr("Done.") : tr("Failed!"))), ((bSuccess && (!m_aborted)) ? ProgressModel::JobComplete : ProgressModel::JobFailed));
emit processStateFinished(m_jobId, m_outFileName, (bSuccess ? 1 : 0));
qDebug("Process thread is done.");
void addFilter(AbstractFilter *filter);
public slots:
- void abort(void) { m_aborted = true; }
+ void abort(void) { m_aborted.ref(); }
private slots:
void handleUpdate(int progress);
bool insertDownsampleFilter(const unsigned int *const supportedSamplerates, const unsigned int *const supportedBitdepths);
bool updateFileTime(const QString &originalFile, const QString &modifiedFile);
- volatile bool m_aborted;
- volatile int m_initialized;
+ QAtomicInt m_aborted;
+ QAtomicInt m_initialized;
const QUuid m_jobId;
AudioFileModel m_audioFile;
protected:
static const int m_processTimeoutInterval = 600000;
+
+ static __forceinline bool checkFlag(QAtomicInt &flag)
+ {
+ return (!(!flag));
+ }
private:
static QScopedPointer<MUtils::JobObject> s_jobObjectInstance;
{
}
-bool WaveProperties::detect(const QString &sourceFile, AudioFileModel_TechInfo *info, volatile bool *abortFlag)
+bool WaveProperties::detect(const QString &sourceFile, AudioFileModel_TechInfo *info, QAtomicInt &abortFlag)
{
QProcess process;
QStringList args;
while(process.state() != QProcess::NotRunning)
{
- if(*abortFlag)
+ if(checkFlag(abortFlag))
{
process.kill();
bAborted = true;
WaveProperties(void);
~WaveProperties(void);
- bool detect(const QString &sourceFile, AudioFileModel_TechInfo *info, volatile bool *abortFlag);
+ bool detect(const QString &sourceFile, AudioFileModel_TechInfo *info, QAtomicInt &abortFlag);
private:
const QString m_binary;