Skip to content

Commit

Permalink
AudioConverterX: split non-wrapper methods into new AudioConverterXX
Browse files Browse the repository at this point in the history
  • Loading branch information
nu774 committed May 4, 2017
1 parent 438cc10 commit 907d7da
Show file tree
Hide file tree
Showing 12 changed files with 88 additions and 67 deletions.
48 changes: 0 additions & 48 deletions AudioConverterX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,51 +240,3 @@ void AudioConverterX::setCodecQuality(UInt32 value)
CHECKCA(AudioConverterSetProperty(m_converter.get(),
kAudioConverterCodecQuality, sizeof value, &value));
}

// helpers
double AudioConverterX::getClosestAvailableBitRate(double value)
{
std::vector<AudioValueRange> rates;
getApplicableEncodeBitRates(&rates);
double distance = std::numeric_limits<double>::max();
double pick = 0;
for (auto it = rates.begin(); it != rates.end(); ++it) {
if (!it->mMinimum) continue;
double diff = std::abs(value - it->mMinimum);
if (distance > diff) {
distance = diff;
pick = it->mMinimum;
}
}
return pick;
}

std::string AudioConverterX::getConfigAsString()
{
std::string s;
AudioStreamBasicDescription asbd;
getOutputStreamDescription(&asbd);
UInt32 codec = asbd.mFormatID;
if (codec == 'aac ')
s = "AAC-LC Encoder";
else if (codec == 'aach')
s = "AAC-HE Encoder";
else
s = "Apple Lossless Encoder";
if (codec != 'aac ' && codec != 'aach')
return s;
UInt32 value = getBitRateControlMode();
const char * strategies[] = { "CBR", "ABR", "CVBR", "TVBR" };
s += strutil::format(", %s", strategies[value]);
if (value == kAudioCodecBitRateControlMode_Variable) {
value = getSoundQualityForVBR();
s += strutil::format(" q%d", value);
} else {
value = getEncodeBitRate();
s += strutil::format(" %gkbps", value / 1000.0);
}
value = getCodecQuality();
s += strutil::format(", Quality %d", value);
return s;
}

4 changes: 0 additions & 4 deletions AudioConverterX.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,6 @@ class AudioConverterX {
void setSoundQualityForVBR(UInt32 value);
UInt32 getCodecQuality();
void setCodecQuality(UInt32 value);

// helpers
double getClosestAvailableBitRate(double value);
std::string getConfigAsString();
};

#endif
52 changes: 52 additions & 0 deletions AudioConverterXX.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include "AudioConverterXX.h"
#include <limits>
#include <cmath>
#include "CoreAudio/AudioCodec.h"
#include "cautil.h"

double AudioConverterXX::getClosestAvailableBitRate(double value)
{
std::vector<AudioValueRange> rates;
getApplicableEncodeBitRates(&rates);
double distance = std::numeric_limits<double>::max();
double pick = 0;
for (auto it = rates.begin(); it != rates.end(); ++it) {
if (!it->mMinimum) continue;
double diff = std::abs(value - it->mMinimum);
if (distance > diff) {
distance = diff;
pick = it->mMinimum;
}
}
return pick;
}

std::string AudioConverterXX::getConfigAsString()
{
std::string s;
AudioStreamBasicDescription asbd;
getOutputStreamDescription(&asbd);
UInt32 codec = asbd.mFormatID;
if (codec == 'aac ')
s = "AAC-LC Encoder";
else if (codec == 'aach')
s = "AAC-HE Encoder";
else
s = "Apple Lossless Encoder";
if (codec != 'aac ' && codec != 'aach')
return s;
UInt32 value = getBitRateControlMode();
const char * strategies[] = { "CBR", "ABR", "CVBR", "TVBR" };
s += strutil::format(", %s", strategies[value]);
if (value == kAudioCodecBitRateControlMode_Variable) {
value = getSoundQualityForVBR();
s += strutil::format(" q%d", value);
} else {
value = getEncodeBitRate();
s += strutil::format(" %gkbps", value / 1000.0);
}
value = getCodecQuality();
s += strutil::format(", Quality %d", value);
return s;
}

20 changes: 20 additions & 0 deletions AudioConverterXX.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#ifndef AudioConverterXX_H
#define AudioConverterXX_H

#include "AudioConverterX.h"

class AudioConverterXX : public AudioConverterX {
public:
AudioConverterXX() {}
AudioConverterXX(AudioConverterRef converter, bool takeOwn)
: AudioConverterX(converter, takeOwn)
{}
AudioConverterXX(const AudioStreamBasicDescription &iasbd,
const AudioStreamBasicDescription &oasbd)
: AudioConverterX(iasbd, oasbd)
{}
double getClosestAvailableBitRate(double value);
std::string getConfigAsString();
};

#endif
2 changes: 1 addition & 1 deletion CoreAudioEncoder.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "CoreAudioEncoder.h"
#include "cautil.h"

CoreAudioEncoder::CoreAudioEncoder(AudioConverterX &converter)
CoreAudioEncoder::CoreAudioEncoder(AudioConverterXX &converter)
: m_converter(converter),
m_variable_packet_len(false)
{
Expand Down
8 changes: 4 additions & 4 deletions CoreAudioEncoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
#define CoreAudioEncoder_H

#include "CoreAudioToolbox.h"
#include "AudioConverterX.h"
#include "AudioConverterXX.h"
#include "IEncoder.h"

class CoreAudioEncoder: public IEncoder, public IEncoderStat {
AudioConverterX m_converter;
AudioConverterXX m_converter;
bool m_requires_packet_desc;
bool m_variable_packet_len;
std::shared_ptr<ISource> m_src;
Expand All @@ -17,13 +17,13 @@ class CoreAudioEncoder: public IEncoder, public IEncoderStat {
AudioStreamBasicDescription m_input_desc, m_output_desc;
EncoderStat m_stat;
public:
CoreAudioEncoder(AudioConverterX &converter);
CoreAudioEncoder(AudioConverterXX &converter);
virtual ~CoreAudioEncoder() {};
void setSource(const std::shared_ptr<ISource> &source) { m_src = source; }
void setSink(const std::shared_ptr<ISink> &sink) { m_sink = sink; }
uint32_t encodeChunk(UInt32 npackets);
virtual AudioFilePacketTableInfo getGaplessInfo();
AudioConverterX getConverter() { return m_converter; }
AudioConverterXX &getConverter() { return m_converter; }
ISource *src() { return m_src.get(); }
const AudioStreamBasicDescription &getInputDescription() const
{
Expand Down
2 changes: 1 addition & 1 deletion CoreAudioPaddedEncoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ extern "C" {
#include "lpc.h"
}

CoreAudioPaddedEncoder::CoreAudioPaddedEncoder(AudioConverterX &converter,
CoreAudioPaddedEncoder::CoreAudioPaddedEncoder(AudioConverterXX &converter,
uint32_t num_priming)
: CoreAudioEncoder(converter),
m_num_priming(num_priming),
Expand Down
2 changes: 1 addition & 1 deletion CoreAudioPaddedEncoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class CoreAudioPaddedEncoder: public CoreAudioEncoder {
size_t (CoreAudioPaddedEncoder::*m_read)(void *, size_t);
void (CoreAudioPaddedEncoder::*m_write)(const void *, size_t, size_t);
public:
CoreAudioPaddedEncoder(AudioConverterX &converter,
CoreAudioPaddedEncoder(AudioConverterXX &converter,
uint32_t num_priming=2112);
AudioFilePacketTableInfo getGaplessInfo();
protected:
Expand Down
2 changes: 1 addition & 1 deletion filters/CoreAudioResampler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ CoreAudioResampler::CoreAudioResampler(const std::shared_ptr<ISource> &src,
void CoreAudioResampler::init()
{
const AudioStreamBasicDescription &asbd = source()->getSampleFormat();
m_converter = AudioConverterX(asbd, m_asbd);
m_converter = AudioConverterXX(asbd, m_asbd);
m_converter.setSampleRateConverterQuality(m_quality);
m_converter.setSampleRateConverterComplexity(m_complexity);
m_encoder.reset(new CoreAudioEncoder(m_converter));
Expand Down
2 changes: 1 addition & 1 deletion filters/CoreAudioResampler.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class CoreAudioResampler: public FilterBase, public ISink {
int64_t m_position;
int64_t m_length;
double m_rate;
AudioConverterX m_converter;
AudioConverterXX m_converter;
std::shared_ptr<CoreAudioEncoder> m_encoder;
AudioStreamBasicDescription m_asbd;
public:
Expand Down
12 changes: 6 additions & 6 deletions main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ select_timeline(std::shared_ptr<ISeekableSource> src, const Options & opts)

#ifdef QAAC
static
void config_aac_codec(AudioConverterX &converter, const Options &opts);
void config_aac_codec(AudioConverterXX &converter, const Options &opts);

inline uint32_t bound_quality(uint32_t n)
{
Expand Down Expand Up @@ -658,7 +658,7 @@ void build_filter_chain_sub(std::shared_ptr<ISeekableSource> src,
chanmap::getChannelLayoutForCodec(*channel_layout);
AudioStreamBasicDescription iiasbd = iasbd;
iiasbd.mSampleRate = closest_rate;
AudioConverterX converter(iasbd, oasbd);
AudioConverterXX converter(iasbd, oasbd);
converter.setInputChannelLayout(acl);
converter.setOutputChannelLayout(acl);
config_aac_codec(converter, opts);
Expand Down Expand Up @@ -1062,7 +1062,7 @@ void show_available_codec_setttings(UInt32 fmt)
oasbd.mSampleRate = iasbd.mSampleRate;
oasbd.mChannelsPerFrame = iasbd.mChannelsPerFrame;

AudioConverterX converter(iasbd, oasbd);
AudioConverterXX converter(iasbd, oasbd);
converter.setInputChannelLayout(acl);
converter.setOutputChannelLayout(acl);
converter.setBitRateControlMode(
Expand Down Expand Up @@ -1186,7 +1186,7 @@ void set_dll_directories(int verbose)
}

static
void config_aac_codec(AudioConverterX &converter,
void config_aac_codec(AudioConverterXX &converter,
const Options &opts)
{
converter.setBitRateControlMode(opts.method);
Expand Down Expand Up @@ -1221,7 +1221,7 @@ void config_aac_codec(AudioConverterX &converter,
}

static
void set_encoding_params(AudioConverterX &converter, ITagStore *store)
void set_encoding_params(AudioConverterXX &converter, ITagStore *store)
{
UInt32 mode = converter.getBitRateControlMode();
UInt32 bitrate = converter.getEncodeBitRate();
Expand Down Expand Up @@ -1262,7 +1262,7 @@ void encode_file(const std::shared_ptr<ISeekableSource> &src,
decode_file(chain, ofilename, opts, oasbd, channel_layout);
return;
}
AudioConverterX converter(iasbd, oasbd);
AudioConverterXX converter(iasbd, oasbd);
AudioChannelLayout acl = { 0 };
acl.mChannelLayoutTag = chanmap::getChannelLayoutForCodec(channel_layout);
converter.setInputChannelLayout(acl);
Expand Down
1 change: 1 addition & 0 deletions vcproject/qaac/qaac.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@
<ClCompile Include="..\..\input\InputFactory.cpp" />
<ClCompile Include="..\..\filters\CoreAudioResampler.cpp" />
<ClCompile Include="..\..\AudioConverterX.cpp" />
<ClCompile Include="..\..\AudioConverterXX.cpp" />
<ClCompile Include="..\..\cautil.cpp" />
<ClCompile Include="..\..\CoreAudioEncoder.cpp" />
<ClCompile Include="..\..\CoreAudioPaddedEncoder.cpp" />
Expand Down

0 comments on commit 907d7da

Please sign in to comment.