Audaspace: HUGE Refactor.

Some points of the refactor not sorted by importance:

* Fixed immutability of readers and factories (there are exceptions...)
* Fixed copy constructors and = operators
* Removed messaging system
* Removed reader types
* Added const where possible
* Using initalisers when possible
* Avoided use of pointers when possible
* Removed AUD_NEW and AUD_DELETE macros
* Removed useless NULL pointer checks
* Fixed exception catching
* Fixed some yet unknown bugs
* Lots of other stuff
This commit is contained in:
Joerg Mueller
2010-07-28 09:36:03 +00:00
parent 3e3f874a65
commit 7296600434
139 changed files with 1502 additions and 2428 deletions

View File

@@ -26,28 +26,18 @@
#include "AUD_SRCResampleFactory.h"
#include "AUD_SRCResampleReader.h"
AUD_SRCResampleFactory::AUD_SRCResampleFactory(AUD_IReader* reader,
AUD_DeviceSpecs specs) :
AUD_ResampleFactory(reader, specs) {}
AUD_SRCResampleFactory::AUD_SRCResampleFactory(AUD_IFactory* factory,
AUD_DeviceSpecs specs) :
AUD_ResampleFactory(factory, specs) {}
AUD_ResampleFactory(factory, specs)
{
}
AUD_SRCResampleFactory::AUD_SRCResampleFactory(AUD_DeviceSpecs specs) :
AUD_ResampleFactory(specs) {}
AUD_IReader* AUD_SRCResampleFactory::createReader()
AUD_IReader* AUD_SRCResampleFactory::createReader() const
{
AUD_IReader* reader = getReader();
if(reader != 0)
{
if(reader->getSpecs().rate != m_specs.rate)
{
reader = new AUD_SRCResampleReader(reader, m_specs.specs);
AUD_NEW("reader")
}
}
if(reader->getSpecs().rate != m_specs.rate)
reader = new AUD_SRCResampleReader(reader, m_specs.specs);
return reader;
}

View File

@@ -34,12 +34,15 @@
*/
class AUD_SRCResampleFactory : public AUD_ResampleFactory
{
public:
AUD_SRCResampleFactory(AUD_IReader* reader, AUD_DeviceSpecs specs);
AUD_SRCResampleFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs);
AUD_SRCResampleFactory(AUD_DeviceSpecs specs);
private:
// hide copy constructor and operator=
AUD_SRCResampleFactory(const AUD_SRCResampleFactory&);
AUD_SRCResampleFactory& operator=(const AUD_SRCResampleFactory&);
virtual AUD_IReader* createReader();
public:
AUD_SRCResampleFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs);
virtual AUD_IReader* createReader() const;
};
#endif //AUD_SRCRESAMPLEFACTORY

View File

@@ -24,7 +24,6 @@
*/
#include "AUD_SRCResampleReader.h"
#include "AUD_Buffer.h"
#include <cmath>
#include <cstring>
@@ -37,14 +36,13 @@ static long src_callback(void *cb_data, float **data)
AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_IReader* reader,
AUD_Specs specs) :
AUD_EffectReader(reader)
AUD_EffectReader(reader),
m_sspecs(reader->getSpecs()),
m_factor(double(specs.rate) / double(m_sspecs.rate)),
m_tspecs(specs),
m_position(0)
{
m_sspecs = reader->getSpecs();
m_tspecs = specs;
m_tspecs.channels = m_sspecs.channels;
m_factor = (double)m_tspecs.rate / (double)m_sspecs.rate;
m_position = 0;
int error;
m_src = src_callback_new(src_callback,
@@ -56,23 +54,19 @@ AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_IReader* reader,
if(!m_src)
{
// XXX printf("%s\n", src_strerror(error));
delete m_reader; AUD_DELETE("reader")
delete m_reader;
AUD_THROW(AUD_ERROR_READER);
}
m_buffer = new AUD_Buffer(); AUD_NEW("buffer")
}
AUD_SRCResampleReader::~AUD_SRCResampleReader()
{
src_delete(m_src);
delete m_buffer; AUD_DELETE("buffer")
}
long AUD_SRCResampleReader::doCallback(float** data)
{
int length = m_buffer->getSize() / AUD_SAMPLE_SIZE(m_tspecs);
int length = m_buffer.getSize() / AUD_SAMPLE_SIZE(m_tspecs);
sample_t* buffer;
m_reader->read(length, buffer);
@@ -88,17 +82,17 @@ void AUD_SRCResampleReader::seek(int position)
m_position = position;
}
int AUD_SRCResampleReader::getLength()
int AUD_SRCResampleReader::getLength() const
{
return m_reader->getLength() * m_factor;
}
int AUD_SRCResampleReader::getPosition()
int AUD_SRCResampleReader::getPosition() const
{
return m_position;
}
AUD_Specs AUD_SRCResampleReader::getSpecs()
AUD_Specs AUD_SRCResampleReader::getSpecs() const
{
return m_tspecs;
}
@@ -107,10 +101,10 @@ void AUD_SRCResampleReader::read(int & length, sample_t* & buffer)
{
int size = length * AUD_SAMPLE_SIZE(m_tspecs);
if(m_buffer->getSize() < size)
m_buffer->resize(size);
if(m_buffer.getSize() < size)
m_buffer.resize(size);
buffer = m_buffer->getBuffer();
buffer = m_buffer.getBuffer();
length = src_callback_read(m_src, m_factor, length, buffer);

View File

@@ -27,7 +27,7 @@
#define AUD_SRCRESAMPLEREADER
#include "AUD_EffectReader.h"
class AUD_Buffer;
#include "AUD_Buffer.h"
#include <samplerate.h>
@@ -37,26 +37,26 @@ class AUD_Buffer;
class AUD_SRCResampleReader : public AUD_EffectReader
{
private:
/**
* The sample specification of the source.
*/
const AUD_Specs m_sspecs;
/**
* The resampling factor.
*/
double m_factor;
const double m_factor;
/**
* The sound output buffer.
*/
AUD_Buffer *m_buffer;
AUD_Buffer m_buffer;
/**
* The target specification.
*/
AUD_Specs m_tspecs;
/**
* The sample specification of the source.
*/
AUD_Specs m_sspecs;
/**
* The src state structure.
*/
@@ -67,14 +67,17 @@ private:
*/
int m_position;
// hide copy constructor and operator=
AUD_SRCResampleReader(const AUD_SRCResampleReader&);
AUD_SRCResampleReader& operator=(const AUD_SRCResampleReader&);
public:
/**
* Creates a resampling reader.
* \param reader The reader to mix.
* \param specs The target specification.
* \exception AUD_Exception Thrown if the source specification cannot be
* mixed to the target specification or if the reader is
* NULL.
* resampled to the target specification.
*/
AUD_SRCResampleReader(AUD_IReader* reader, AUD_Specs specs);
@@ -92,9 +95,9 @@ public:
long doCallback(float** data);
virtual void seek(int position);
virtual int getLength();
virtual int getPosition();
virtual AUD_Specs getSpecs();
virtual int getLength() const;
virtual int getPosition() const;
virtual AUD_Specs getSpecs() const;
virtual void read(int & length, sample_t* & buffer);
};