From 7296600434c49b40215ba842af73a8b1517e12eb Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Wed, 28 Jul 2010 09:36:03 +0000 Subject: 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 --- intern/audaspace/SRC/AUD_SRCResampleFactory.cpp | 24 ++++++------------- intern/audaspace/SRC/AUD_SRCResampleFactory.h | 9 ++++--- intern/audaspace/SRC/AUD_SRCResampleReader.cpp | 32 ++++++++++--------------- intern/audaspace/SRC/AUD_SRCResampleReader.h | 29 ++++++++++++---------- 4 files changed, 42 insertions(+), 52 deletions(-) (limited to 'intern/audaspace/SRC') diff --git a/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp b/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp index caafbd14327..b421bb777e1 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp +++ b/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp @@ -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_SRCResampleFactory::AUD_SRCResampleFactory(AUD_DeviceSpecs specs) : - AUD_ResampleFactory(specs) {} + AUD_ResampleFactory(factory, 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; } diff --git a/intern/audaspace/SRC/AUD_SRCResampleFactory.h b/intern/audaspace/SRC/AUD_SRCResampleFactory.h index 4b16c70169c..4edb0e76181 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleFactory.h +++ b/intern/audaspace/SRC/AUD_SRCResampleFactory.h @@ -34,12 +34,15 @@ */ class AUD_SRCResampleFactory : public AUD_ResampleFactory { +private: + // hide copy constructor and operator= + AUD_SRCResampleFactory(const AUD_SRCResampleFactory&); + AUD_SRCResampleFactory& operator=(const AUD_SRCResampleFactory&); + public: - AUD_SRCResampleFactory(AUD_IReader* reader, AUD_DeviceSpecs specs); AUD_SRCResampleFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs); - AUD_SRCResampleFactory(AUD_DeviceSpecs specs); - virtual AUD_IReader* createReader(); + virtual AUD_IReader* createReader() const; }; #endif //AUD_SRCRESAMPLEFACTORY diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp index e89857635de..553a020e76d 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp +++ b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp @@ -24,7 +24,6 @@ */ #include "AUD_SRCResampleReader.h" -#include "AUD_Buffer.h" #include #include @@ -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); diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.h b/intern/audaspace/SRC/AUD_SRCResampleReader.h index e09d1b66f13..5e3dafb359b 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleReader.h +++ b/intern/audaspace/SRC/AUD_SRCResampleReader.h @@ -27,7 +27,7 @@ #define AUD_SRCRESAMPLEREADER #include "AUD_EffectReader.h" -class AUD_Buffer; +#include "AUD_Buffer.h" #include @@ -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); }; -- cgit v1.2.3