///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2015 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2019 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
#include "Model_Settings.h"
#include "Encoder_AAC.h"
#include "Encoder_AAC_FHG.h"
+#include "Encoder_AAC_FDK.h"
#include "Encoder_AAC_QAAC.h"
#include "Encoder_AC3.h"
#include "Encoder_DCA.h"
// Create encoder instance
////////////////////////////////////////////////////////////
-AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const SettingsModel *settings, bool *nativeResampling)
+AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const SettingsModel *settings)
{
int rcMode = -1;
AbstractEncoder *encoder = NULL;
- *nativeResampling = false;
//Create new encoder instance and apply encoder-specific settings
switch(encoderId)
/*-------- MP3Encoder /*--------*/
case SettingsModel::MP3Encoder:
{
- MP3Encoder *mp3Encoder = new MP3Encoder();
+ MP3Encoder *const mp3Encoder = new MP3Encoder();
mp3Encoder->setAlgoQuality(settings->lameAlgoQuality());
if(settings->bitrateManagementEnabled())
{
mp3Encoder->setBitrateLimits(settings->bitrateManagementMinRate(), settings->bitrateManagementMaxRate());
}
- if(settings->samplingRate() > 0)
- {
- mp3Encoder->setSamplingRate(SettingsModel::samplingRates[settings->samplingRate()]);
- *nativeResampling = true;
- }
mp3Encoder->setChannelMode(settings->lameChannelMode());
encoder = mp3Encoder;
}
/*-------- VorbisEncoder /*--------*/
case SettingsModel::VorbisEncoder:
{
- VorbisEncoder *vorbisEncoder = new VorbisEncoder();
+ VorbisEncoder *const vorbisEncoder = new VorbisEncoder();
if(settings->bitrateManagementEnabled())
{
vorbisEncoder->setBitrateLimits(settings->bitrateManagementMinRate(), settings->bitrateManagementMaxRate());
}
- if(settings->samplingRate() > 0)
- {
- vorbisEncoder->setSamplingRate(SettingsModel::samplingRates[settings->samplingRate()]);
- *nativeResampling = true;
- }
encoder = vorbisEncoder;
}
break;
{
case SettingsModel::AAC_ENCODER_QAAC:
{
- QAACEncoder *aacEncoder = new QAACEncoder();
+ QAACEncoder *const aacEncoder = new QAACEncoder();
aacEncoder->setProfile(settings->aacEncProfile());
+ aacEncoder->setAlgoQuality(settings->lameAlgoQuality());
encoder = aacEncoder;
}
break;
case SettingsModel::AAC_ENCODER_FHG:
{
- FHGAACEncoder *aacEncoder = new FHGAACEncoder();
+ FHGAACEncoder *const aacEncoder = new FHGAACEncoder();
+ aacEncoder->setProfile(settings->aacEncProfile());
+ encoder = aacEncoder;
+ }
+ break;
+ case SettingsModel::AAC_ENCODER_FDK:
+ {
+ FDKAACEncoder *const aacEncoder = new FDKAACEncoder();
aacEncoder->setProfile(settings->aacEncProfile());
encoder = aacEncoder;
}
break;
case SettingsModel::AAC_ENCODER_NERO:
{
- AACEncoder *aacEncoder = new AACEncoder();
+ AACEncoder *const aacEncoder = new AACEncoder();
aacEncoder->setEnable2Pass(settings->neroAACEnable2Pass());
aacEncoder->setProfile(settings->aacEncProfile());
encoder = aacEncoder;
/*-------- AC3Encoder /*--------*/
case SettingsModel::AC3Encoder:
{
- AC3Encoder *ac3Encoder = new AC3Encoder();
+ AC3Encoder *const ac3Encoder = new AC3Encoder();
ac3Encoder->setAudioCodingMode(settings->aftenAudioCodingMode());
ac3Encoder->setDynamicRangeCompression(settings->aftenDynamicRangeCompression());
ac3Encoder->setExponentSearchSize(settings->aftenExponentSearchSize());
/*-------- FLACEncoder /*--------*/
case SettingsModel::FLACEncoder:
{
- FLACEncoder *flacEncoder = new FLACEncoder();
+ FLACEncoder *const flacEncoder = new FLACEncoder();
encoder = flacEncoder;
}
break;
/*-------- OpusEncoder --------*/
case SettingsModel::OpusEncoder:
{
- OpusEncoder *opusEncoder = new OpusEncoder();
+ OpusEncoder *const opusEncoder = new OpusEncoder();
opusEncoder->setOptimizeFor(settings->opusOptimizeFor());
opusEncoder->setEncodeComplexity(settings->opusComplexity());
opusEncoder->setFrameSize(settings->opusFramesize());
/*-------- DCAEncoder --------*/
case SettingsModel::DCAEncoder:
{
- DCAEncoder *dcaEncoder = new DCAEncoder();
+ DCAEncoder *const dcaEncoder = new DCAEncoder();
encoder = dcaEncoder;
}
break;
/*-------- MACEncoder --------*/
case SettingsModel::MACEncoder:
{
- MACEncoder *macEncoder = new MACEncoder();
+ MACEncoder *const macEncoder = new MACEncoder();
encoder = macEncoder;
}
break;
/*-------- PCMEncoder --------*/
case SettingsModel::PCMEncoder:
{
- WaveEncoder *waveEncoder = new WaveEncoder();
+ WaveEncoder *const waveEncoder = new WaveEncoder();
encoder = waveEncoder;
}
break;
switch(encoderId)
{
- case SettingsModel::MP3Encoder: info = MP3Encoder::getEncoderInfo(); break;
+ 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::MACEncoder: info = MACEncoder::getEncoderInfo(); break;
- case SettingsModel::PCMEncoder: info = WaveEncoder::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::MACEncoder: info = MACEncoder ::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_QAAC: info = QAACEncoder ::getEncoderInfo(); break;
case SettingsModel::AAC_ENCODER_FHG: info = FHGAACEncoder::getEncoderInfo(); break;
- case SettingsModel::AAC_ENCODER_NERO: info = AACEncoder::getEncoderInfo(); break;
+ case SettingsModel::AAC_ENCODER_FDK: info = FDKAACEncoder::getEncoderInfo(); break;
+ case SettingsModel::AAC_ENCODER_NERO: info = AACEncoder ::getEncoderInfo(); break;
default: MUTILS_THROW("Unknown AAC encoder specified!");
}
break;
}
////////////////////////////////////////////////////////////
+// Get File Extensions
+////////////////////////////////////////////////////////////
+
+QStringList EncoderRegistry::getOutputFileExtensions(void)
+{
+ QStringList list;
+ for(int encoderId = SettingsModel::MP3Encoder; encoderId < SettingsModel::ENCODER_COUNT; encoderId++)
+ {
+ if((encoderId == SettingsModel::AACEncoder) && (getAacEncoder() == SettingsModel::AAC_ENCODER_NONE))
+ {
+ continue;
+ }
+ list << QString::fromLatin1(getEncoderInfo(encoderId)->extension());
+ }
+ return list;
+}
+
+////////////////////////////////////////////////////////////
// Static Functions
////////////////////////////////////////////////////////////
{
return SettingsModel::AAC_ENCODER_QAAC;
}
+ else if(lamexp_tools_check("qaac64.exe") && lamexp_tools_check("libsoxr64.dll") && lamexp_tools_check("libsoxconvolver64.dll"))
+ {
+ return SettingsModel::AAC_ENCODER_QAAC;
+ }
+ else if(lamexp_tools_check("fdkaac.exe"))
+ {
+ return SettingsModel::AAC_ENCODER_FDK;
+ }
else if(lamexp_tools_check("fhgaacenc.exe") && lamexp_tools_check("enc_fhgaac.dll") && lamexp_tools_check("nsutil.dll") && lamexp_tools_check("libmp4v2.dll"))
{
return SettingsModel::AAC_ENCODER_FHG;