diff --git a/src/Config.h b/src/Config.h index 737e2aff..b47df68f 100644 --- a/src/Config.h +++ b/src/Config.h @@ -34,7 +34,7 @@ #define VER_LAMEXP_MINOR_LO 9 #define VER_LAMEXP_TYPE Alpha #define VER_LAMEXP_PATCH 1 -#define VER_LAMEXP_BUILD 1343 +#define VER_LAMEXP_BUILD 1345 #define VER_LAMEXP_CONFG 1338 /////////////////////////////////////////////////////////////////////////////// diff --git a/src/Dialog_MainWindow.cpp b/src/Dialog_MainWindow.cpp index 32474755..d513b8f8 100644 --- a/src/Dialog_MainWindow.cpp +++ b/src/Dialog_MainWindow.cpp @@ -180,7 +180,6 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S m_metaData(metaInfo), m_settings(settingsModel), m_fileSystemModel(NULL), - m_aacEncoder(SettingsModel::getAacEncoder()), m_accepted(false), m_firstTimeShown(true), m_outputFolderViewCentering(false), @@ -351,7 +350,8 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S m_encoderButtonGroup->addButton(ui->radioButtonEncoderDCA, SettingsModel::DCAEncoder); m_encoderButtonGroup->addButton(ui->radioButtonEncoderPCM, SettingsModel::PCMEncoder); - ui->radioButtonEncoderAAC->setEnabled(m_aacEncoder > SettingsModel::AAC_ENCODER_NONE); + const int aacEncoder = EncoderRegistry::getAacEncoder(); + ui->radioButtonEncoderAAC->setEnabled(aacEncoder > SettingsModel::AAC_ENCODER_NONE); m_modeButtonGroup = new QButtonGroup(this); m_modeButtonGroup->addButton(ui->radioButtonModeQuality, SettingsModel::VBRMode); @@ -412,7 +412,7 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S SET_CHECKBOX_STATE(ui->checkBoxRenameOutput, m_settings->renameOutputFilesEnabled()); SET_CHECKBOX_STATE(ui->checkBoxForceStereoDownmix, m_settings->forceStereoDownmix()); SET_CHECKBOX_STATE(ui->checkBoxOpusDisableResample, m_settings->opusDisableResample()); - ui->checkBoxNeroAAC2PassMode->setEnabled(m_aacEncoder == SettingsModel::AAC_ENCODER_NERO); + ui->checkBoxNeroAAC2PassMode->setEnabled(aacEncoder == SettingsModel::AAC_ENCODER_NERO); ui->lineEditCustomParamLAME->setText(m_settings->customParametersLAME()); ui->lineEditCustomParamOggEnc->setText(m_settings->customParametersOggEnc()); @@ -955,6 +955,8 @@ void MainWindow::changeEvent(QEvent *e) { if(e->type() == QEvent::LanguageChange) { + qWarning("\nMainWindow::changeEvent()\n"); + int comboBoxIndex[8]; //Backup combobox indices, as retranslateUi() resets @@ -1357,7 +1359,8 @@ void MainWindow::windowShown(void) } //Check for AAC support - if(m_aacEncoder == SettingsModel::AAC_ENCODER_NERO) + const int aacEncoder = EncoderRegistry::getAacEncoder(); + if(aacEncoder == SettingsModel::AAC_ENCODER_NERO) { if(m_settings->neroAacNotificationsEnabled()) { @@ -1375,7 +1378,7 @@ void MainWindow::windowShown(void) } else { - if(m_settings->neroAacNotificationsEnabled() && (m_aacEncoder <= SettingsModel::AAC_ENCODER_NONE)) + if(m_settings->neroAacNotificationsEnabled() && (aacEncoder <= SettingsModel::AAC_ENCODER_NONE)) { QString appPath = QDir(QCoreApplication::applicationDirPath()).canonicalPath(); if(appPath.isEmpty()) appPath = QCoreApplication::applicationDirPath(); @@ -3289,18 +3292,25 @@ void MainWindow::playlistEnabledChanged(void) */ void MainWindow::updateEncoder(int id) { + qWarning("\nupdateEncoder(%d)", id); + m_settings->compressionEncoder(id); const AbstractEncoderInfo *info = EncoderRegistry::getEncoderInfo(id); + qWarning("info->isModeSupported(SettingsModel::VBRMode) = %s", info->isModeSupported(SettingsModel::VBRMode) ? "YES" : "NO"); + qWarning("info->isModeSupported(SettingsModel::ABRMode) = %s", info->isModeSupported(SettingsModel::ABRMode) ? "YES" : "NO"); + qWarning("info->isModeSupported(SettingsModel::CBRMode) = %s", info->isModeSupported(SettingsModel::CBRMode) ? "YES" : "NO"); + //Update UI controls ui->radioButtonModeQuality->setEnabled(info->isModeSupported(SettingsModel::VBRMode)); ui->radioButtonModeAverageBitrate->setEnabled(info->isModeSupported(SettingsModel::ABRMode)); ui->radioButtonConstBitrate->setEnabled(info->isModeSupported(SettingsModel::CBRMode)); //Initialize checkbox state - if(ui->radioButtonConstBitrate->isEnabled()) ui->radioButtonConstBitrate->setChecked(true); - if(ui->radioButtonModeAverageBitrate->isEnabled()) ui->radioButtonModeAverageBitrate->setChecked(true); if(ui->radioButtonModeQuality->isEnabled()) ui->radioButtonModeQuality->setChecked(true); + else if(ui->radioButtonModeAverageBitrate->isEnabled()) ui->radioButtonModeAverageBitrate->setChecked(true); + else if(ui->radioButtonConstBitrate->isEnabled()) ui->radioButtonConstBitrate->setChecked(true); + else throw "It appears that the encoder does not support *any* RC mode!"; //Apply current RC mode const int currentRCMode = EncoderRegistry::loadEncoderMode(m_settings, id); @@ -3884,7 +3894,7 @@ void MainWindow::customParamsHelpRequested(QWidget *obj, QEvent *event) else if(obj == ui->helpCustomParamOggEnc) showCustomParamsHelpScreen("oggenc2.exe", "--help"); else if(obj == ui->helpCustomParamNeroAAC) { - switch(m_aacEncoder) + switch(EncoderRegistry::getAacEncoder()) { case SettingsModel::AAC_ENCODER_QAAC: showCustomParamsHelpScreen("qaac.exe", "--help"); break; case SettingsModel::AAC_ENCODER_FHG : showCustomParamsHelpScreen("fhgaacenc.exe", ""); break; diff --git a/src/Dialog_MainWindow.h b/src/Dialog_MainWindow.h index fdba4a0a..e6b86bc6 100644 --- a/src/Dialog_MainWindow.h +++ b/src/Dialog_MainWindow.h @@ -228,6 +228,4 @@ private: CustomEventFilter *m_evenFilterOutputFolderMouse; CustomEventFilter *m_evenFilterOutputFolderView; CustomEventFilter *m_evenFilterCompressionTab; - - const int m_aacEncoder; }; diff --git a/src/Encoder_MP3.cpp b/src/Encoder_MP3.cpp index faa762db..f818b75a 100644 --- a/src/Encoder_MP3.cpp +++ b/src/Encoder_MP3.cpp @@ -32,9 +32,11 @@ static const int g_lameAgorithmQualityLUT[5] = {9, 7, 3, 0, INT_MAX}; static const int g_mp3BitrateLUT[15] = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1}; static const int g_lameVBRQualityLUT[11] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0, INT_MAX}; +/////////////////////////////////////////////////////////////////////////////// +// Encoder Info /////////////////////////////////////////////////////////////////////////////// -class : public AbstractEncoderInfo +class MP3EncoderInfo : public AbstractEncoderInfo { virtual bool isModeSupported(int mode) const { @@ -43,8 +45,8 @@ class : public AbstractEncoderInfo case SettingsModel::VBRMode: case SettingsModel::ABRMode: case SettingsModel::CBRMode: - return true; - break; + return true; + break; default: throw "Bad RC mode specified!"; } @@ -71,11 +73,11 @@ class : public AbstractEncoderInfo switch(mode) { case SettingsModel::VBRMode: - return g_lameVBRQualityLUT[index]; + return g_lameVBRQualityLUT[qBound(0, index, 9)]; break; case SettingsModel::ABRMode: case SettingsModel::CBRMode: - return g_mp3BitrateLUT[index]; + return g_mp3BitrateLUT[qBound(0, index, 13)]; break; default: throw "Bad RC mode specified!"; @@ -105,9 +107,12 @@ class : public AbstractEncoderInfo static const char* s_description = "LAME MP3 Encoder"; return s_description; } -} -g_mp3EncoderInfo; +}; +static const MP3EncoderInfo g_mp3EncoderInfo; + +/////////////////////////////////////////////////////////////////////////////// +// Encoder implementation /////////////////////////////////////////////////////////////////////////////// MP3Encoder::MP3Encoder(void) diff --git a/src/Encoder_Opus.cpp b/src/Encoder_Opus.cpp index aa2e082b..94a44fdc 100644 --- a/src/Encoder_Opus.cpp +++ b/src/Encoder_Opus.cpp @@ -28,6 +28,83 @@ #include #include +/////////////////////////////////////////////////////////////////////////////// +// Encoder Info +/////////////////////////////////////////////////////////////////////////////// + +class OpusEncoderInfo : public AbstractEncoderInfo +{ + virtual bool isModeSupported(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return true; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueCount(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return 32; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueAt(int mode, int index) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return qBound(8, (index + 1) * 8, 256); + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueType(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + return TYPE_APPROX_BITRATE; + break; + case SettingsModel::CBRMode: + return TYPE_BITRATE; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual const char *description(void) const + { + static const char* s_description = "Opus-Tools OpusEnc (libopus)"; + return s_description; + } +}; + +static const OpusEncoderInfo g_opusEncoderInfo; + +/////////////////////////////////////////////////////////////////////////////// +// Encoder implementation +/////////////////////////////////////////////////////////////////////////////// + OpusEncoder::OpusEncoder(void) : m_binary(lamexp_lookup_tool("opusenc.exe")) @@ -69,16 +146,6 @@ bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn break; } - //switch(m_configOptimizeFor) - //{ - //case 0: - // args << "--music"; - // break; - //case 1: - // args << "--speech"; - // break; - //} - args << "--comp" << QString::number(m_configEncodeComplexity); switch(m_configFrameSize) @@ -103,7 +170,7 @@ bool OpusEncoder::encode(const QString &sourceFile, const AudioFileModel &metaIn break; } - args << QString("--bitrate") << QString::number(qMax(0, qMin(500, m_configBitrate * 8))); + args << QString("--bitrate") << QString::number(qBound(8, (m_configBitrate + 1) * 8, 256)); if(!metaInfo.fileName().isEmpty()) args << "--title" << cleanTag(metaInfo.fileName()); if(!metaInfo.fileArtist().isEmpty()) args << "--artist" << cleanTag(metaInfo.fileArtist()); @@ -234,3 +301,8 @@ const bool OpusEncoder::needsTimingInfo(void) { return true; } + +const AbstractEncoderInfo *OpusEncoder::getEncoderInfo(void) +{ + return &g_opusEncoderInfo; +} diff --git a/src/Encoder_Opus.h b/src/Encoder_Opus.h index f8f27f99..39f07dc1 100644 --- a/src/Encoder_Opus.h +++ b/src/Encoder_Opus.h @@ -45,6 +45,9 @@ public: virtual void setEncodeComplexity(int complexity); virtual void setFrameSize(int frameSize); + //Encoder info + static const AbstractEncoderInfo *getEncoderInfo(void); + private: const QString m_binary; diff --git a/src/Encoder_Vorbis.cpp b/src/Encoder_Vorbis.cpp index dcf669ff..85554478 100644 --- a/src/Encoder_Vorbis.cpp +++ b/src/Encoder_Vorbis.cpp @@ -27,6 +27,91 @@ #include #include +/////////////////////////////////////////////////////////////////////////////// +// Encoder Info +/////////////////////////////////////////////////////////////////////////////// + +class VorbisEncoderInfo : public AbstractEncoderInfo +{ + virtual bool isModeSupported(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + return true; + break; + case SettingsModel::CBRMode: + return false; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueCount(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + return 12; + break; + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return 60; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueAt(int mode, int index) const + { + switch(mode) + { + case SettingsModel::VBRMode: + return qBound(-2, index - 2, 10); + break; + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return qBound(32, (index + 4) * 8, 500); + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueType(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + return TYPE_QUALITY_LEVEL; + break; + case SettingsModel::ABRMode: + return TYPE_APPROX_BITRATE; + break; + case SettingsModel::CBRMode: + return TYPE_BITRATE; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual const char *description(void) const + { + static const char* s_description = "OggEnc2 Vorbis Encoder (aoTuV)"; + return s_description; + } +}; + +static const VorbisEncoderInfo g_vorbisEncoderInfo; + +/////////////////////////////////////////////////////////////////////////////// +// Encoder implementation +/////////////////////////////////////////////////////////////////////////////// + VorbisEncoder::VorbisEncoder(void) : m_binary(lamexp_lookup_tool("oggenc2.exe")) @@ -54,10 +139,10 @@ bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel &meta switch(m_configRCMode) { case SettingsModel::VBRMode: - args << "-q" << QString::number(qMax(-2, qMin(10, m_configBitrate))); + args << "-q" << QString::number(qBound(-2, m_configBitrate - 2, 10)); break; case SettingsModel::ABRMode: - args << "-b" << QString::number(qMax(32, qMin(500, (m_configBitrate * 8)))); + args << "-b" << QString::number(qBound(32, (m_configBitrate + 4) * 8, 500)); break; default: throw "Bad rate-control mode!"; @@ -66,8 +151,8 @@ bool VorbisEncoder::encode(const QString &sourceFile, const AudioFileModel &meta if((m_configBitrateMaximum > 0) && (m_configBitrateMinimum > 0) && (m_configBitrateMinimum <= m_configBitrateMaximum)) { - args << "--min-bitrate" << QString::number(qMin(qMax(m_configBitrateMinimum, 32), 500)); - args << "--max-bitrate" << QString::number(qMin(qMax(m_configBitrateMaximum, 32), 500)); + args << "--min-bitrate" << QString::number(qBound(32, m_configBitrateMinimum, 500)); + args << "--max-bitrate" << QString::number(qBound(32, m_configBitrateMaximum, 500)); } if(m_configSamplingRate > 0) @@ -198,3 +283,8 @@ void VorbisEncoder::setSamplingRate(int value) { m_configSamplingRate = value; } + +const AbstractEncoderInfo *VorbisEncoder::getEncoderInfo(void) +{ + return &g_vorbisEncoderInfo; +} diff --git a/src/Encoder_Vorbis.h b/src/Encoder_Vorbis.h index eb97e930..77b0cf7d 100644 --- a/src/Encoder_Vorbis.h +++ b/src/Encoder_Vorbis.h @@ -40,6 +40,9 @@ public: virtual void setSamplingRate(int value); virtual void setBitrate(int bitrate); + //Encoder info + static const AbstractEncoderInfo *getEncoderInfo(void); + private: const QString m_binary; int m_configBitrateMaximum; diff --git a/src/Encoder_Wave.cpp b/src/Encoder_Wave.cpp index f28fedb9..85531312 100644 --- a/src/Encoder_Wave.cpp +++ b/src/Encoder_Wave.cpp @@ -29,6 +29,85 @@ #define FIX_SEPARATORS(STR) for(int i = 0; STR[i]; i++) { if(STR[i] == L'/') STR[i] = L'\\'; } +/////////////////////////////////////////////////////////////////////////////// +// Encoder Info +/////////////////////////////////////////////////////////////////////////////// + +class WaveEncoderInfo : public AbstractEncoderInfo +{ +public: + virtual bool isModeSupported(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + return false; + break; + case SettingsModel::CBRMode: + return true; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueCount(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return 0; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueAt(int mode, int index) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return -1; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual int valueType(int mode) const + { + switch(mode) + { + case SettingsModel::VBRMode: + case SettingsModel::ABRMode: + case SettingsModel::CBRMode: + return TYPE_UNCOMPRESSED; + break; + default: + throw "Bad RC mode specified!"; + } + } + + virtual const char *description(void) const + { + static const char* s_description = "Wave Audio (PCM)"; + return s_description; + } +}; + +static const WaveEncoderInfo g_waveEncoderInfo; + +/////////////////////////////////////////////////////////////////////////////// +// Encoder implementation +/////////////////////////////////////////////////////////////////////////////// + + WaveEncoder::WaveEncoder(void) { } @@ -103,3 +182,8 @@ bool WaveEncoder::isFormatSupported(const QString &containerType, const QString } return false; } + +const AbstractEncoderInfo *WaveEncoder::getEncoderInfo(void) +{ + return &g_waveEncoderInfo; +} diff --git a/src/Encoder_Wave.h b/src/Encoder_Wave.h index 23220b48..3e19698d 100644 --- a/src/Encoder_Wave.h +++ b/src/Encoder_Wave.h @@ -36,4 +36,7 @@ public: virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion); virtual QString extension(void); + + //Encoder info + static const AbstractEncoderInfo *getEncoderInfo(void); }; diff --git a/src/Model_Settings.cpp b/src/Model_Settings.cpp index 784ff46e..8e33c4ee 100644 --- a/src/Model_Settings.cpp +++ b/src/Model_Settings.cpp @@ -424,30 +424,6 @@ void SettingsModel::syncNow(void) m_configCache->flushValues(); } -//////////////////////////////////////////////////////////// -// Static Functions -//////////////////////////////////////////////////////////// - -int SettingsModel::getAacEncoder(void) -{ - if(lamexp_check_tool("qaac.exe") && lamexp_check_tool("libsoxrate.dll")) - { - return AAC_ENCODER_QAAC; - } - else if(lamexp_check_tool("fhgaacenc.exe") && lamexp_check_tool("enc_fhgaac.dll") && lamexp_check_tool("nsutil.dll") && lamexp_check_tool("libmp4v2.dll")) - { - return AAC_ENCODER_FHG; - } - else if(lamexp_check_tool("neroAacEnc.exe") && lamexp_check_tool("neroAacDec.exe") && lamexp_check_tool("neroAacTag.exe")) - { - return AAC_ENCODER_NERO; - } - else - { - return AAC_ENCODER_NONE; - } -} - //////////////////////////////////////////////////////////// // Private Functions //////////////////////////////////////////////////////////// diff --git a/src/Model_Settings.h b/src/Model_Settings.h index d1fc8beb..d312d72e 100644 --- a/src/Model_Settings.h +++ b/src/Model_Settings.h @@ -180,9 +180,6 @@ public: //Misc void validate(void); void syncNow(void); - - //Static - static int getAacEncoder(void); private: SettingsCache *m_configCache; diff --git a/src/Registry_Encoder.cpp b/src/Registry_Encoder.cpp index 7f7c346e..b38989dc 100644 --- a/src/Registry_Encoder.cpp +++ b/src/Registry_Encoder.cpp @@ -21,6 +21,7 @@ #include "Registry_Encoder.h" +#include "Global.h" #include "Model_Settings.h" #include "Encoder_AAC.h" #include "Encoder_AAC_FHG.h" @@ -97,7 +98,7 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett /*-------- AACEncoder /*--------*/ case SettingsModel::AACEncoder: { - switch(SettingsModel::getAacEncoder()) + switch(getAacEncoder()) { case SettingsModel::AAC_ENCODER_QAAC: { @@ -215,57 +216,23 @@ const AbstractEncoderInfo *EncoderRegistry::getEncoderInfo(const int encoderId) switch(encoderId) { - /*-------- MP3Encoder /*--------*/ - case SettingsModel::MP3Encoder: - info = MP3Encoder::getEncoderInfo(); - break; - /*-------- VorbisEncoder /*--------*/ - case SettingsModel::VorbisEncoder: - info = VorbisEncoder::getEncoderInfo(); - break; - /*-------- AACEncoder /*--------*/ - case SettingsModel::AACEncoder: - { - switch(SettingsModel::getAacEncoder()) + case SettingsModel::MP3Encoder: info = MP3Encoder::getEncoderInfo(); break; + case SettingsModel::VorbisEncoder: info = VorbisEncoder::getEncoderInfo(); break; + case SettingsModel::AC3Encoder: info = AC3Encoder::getEncoderInfo(); break; + case SettingsModel::FLACEncoder: info = FLACEncoder::getEncoderInfo(); break; + case SettingsModel::OpusEncoder: info = OpusEncoder::getEncoderInfo(); break; + case SettingsModel::DCAEncoder: info = DCAEncoder::getEncoderInfo(); break; + case SettingsModel::PCMEncoder: info = WaveEncoder::getEncoderInfo(); break; + case SettingsModel::AACEncoder: + switch(getAacEncoder()) { - case SettingsModel::AAC_ENCODER_QAAC: - info = QAACEncoder::getEncoderInfo(); - break; - case SettingsModel::AAC_ENCODER_FHG: - info = FHGAACEncoder::getEncoderInfo(); - break; - case SettingsModel::AAC_ENCODER_NERO: - info = AACEncoder::getEncoderInfo(); - break; - default: - throw "Unknown AAC encoder specified!"; - break; + case SettingsModel::AAC_ENCODER_QAAC: info = QAACEncoder::getEncoderInfo(); break; + case SettingsModel::AAC_ENCODER_FHG: info = FHGAACEncoder::getEncoderInfo(); break; + case SettingsModel::AAC_ENCODER_NERO: info = AACEncoder::getEncoderInfo(); break; + default: throw "Unknown AAC encoder specified!"; } - } - break; - /*-------- AC3Encoder /*--------*/ - case SettingsModel::AC3Encoder: - info = AC3Encoder::getEncoderInfo(); - break; - /*-------- FLACEncoder /*--------*/ - case SettingsModel::FLACEncoder: - info = FLACEncoder::getEncoderInfo(); - break; - /*-------- OpusEncoder --------*/ - case SettingsModel::OpusEncoder: - info = OpusEncoder::getEncoderInfo(); - break; - /*-------- DCAEncoder --------*/ - case SettingsModel::DCAEncoder: - info = DCAEncoder::getEncoderInfo(); - break; - /*-------- PCMEncoder --------*/ - case SettingsModel::PCMEncoder: - info = WaveEncoder::getEncoderInfo(); - break; - /*-------- default --------*/ - default: - throw "Unsupported encoder!"; + break; + default: throw "Unsupported encoder!"; } //Sanity checking @@ -416,3 +383,27 @@ int EncoderRegistry::loadEncoderValue(const SettingsModel *settings, const int e return value; } + +//////////////////////////////////////////////////////////// +// Static Functions +//////////////////////////////////////////////////////////// + +int EncoderRegistry::getAacEncoder(void) +{ + if(lamexp_check_tool("qaac.exe") && lamexp_check_tool("libsoxrate.dll")) + { + return SettingsModel::AAC_ENCODER_QAAC; + } + else if(lamexp_check_tool("fhgaacenc.exe") && lamexp_check_tool("enc_fhgaac.dll") && lamexp_check_tool("nsutil.dll") && lamexp_check_tool("libmp4v2.dll")) + { + return SettingsModel::AAC_ENCODER_FHG; + } + else if(lamexp_check_tool("neroAacEnc.exe") && lamexp_check_tool("neroAacDec.exe") && lamexp_check_tool("neroAacTag.exe")) + { + return SettingsModel::AAC_ENCODER_NERO; + } + else + { + return SettingsModel::AAC_ENCODER_NONE; + } +} diff --git a/src/Registry_Encoder.h b/src/Registry_Encoder.h index 3405ea93..abbb1c36 100644 --- a/src/Registry_Encoder.h +++ b/src/Registry_Encoder.h @@ -40,4 +40,6 @@ public: static void saveEncoderValue(SettingsModel *settings, const int encoderId, const int rcMode, const int value); static int loadEncoderValue(const SettingsModel *settings, const int encoderId, const int rcMode); + + static int getAacEncoder(void); };