Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/audaspace/SRC')
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleFactory.cpp24
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleFactory.h9
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleReader.cpp36
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleReader.h29
4 files changed, 45 insertions, 53 deletions
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..91bf7002a49 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 <cmath>
#include <cstring>
@@ -35,16 +34,18 @@ static long src_callback(void *cb_data, float **data)
return ((AUD_SRCResampleReader*)cb_data)->doCallback(data);
}
+static const char* state_error = "AUD_SRCResampleReader: SRC State couldn't be "
+ "created.";
+
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 +57,18 @@ AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_IReader* reader,
if(!m_src)
{
// XXX printf("%s\n", src_strerror(error));
- delete m_reader; AUD_DELETE("reader")
- AUD_THROW(AUD_ERROR_READER);
+ AUD_THROW(AUD_ERROR_SRC, state_error);
}
-
- 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 +84,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 +103,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 <samplerate.h>
@@ -38,14 +38,19 @@ 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.
@@ -53,11 +58,6 @@ private:
AUD_Specs m_tspecs;
/**
- * The sample specification of the source.
- */
- AUD_Specs m_sspecs;
-
- /**
* The src state structure.
*/
SRC_STATE* m_src;
@@ -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);
};