From d1c542ce0551f6ec3408b7c6689ad17b0a14e8d2 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Fri, 3 Jun 2011 23:28:57 +0000 Subject: 3D Audio GSoC: Memory management improvements. --- intern/audaspace/FX/AUD_AccumulatorFactory.cpp | 4 +- intern/audaspace/FX/AUD_AccumulatorFactory.h | 4 +- intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp | 2 +- intern/audaspace/FX/AUD_BaseIIRFilterReader.h | 2 +- intern/audaspace/FX/AUD_ButterworthFactory.cpp | 6 +- intern/audaspace/FX/AUD_ButterworthFactory.h | 4 +- .../audaspace/FX/AUD_CallbackIIRFilterReader.cpp | 2 +- intern/audaspace/FX/AUD_CallbackIIRFilterReader.h | 2 +- intern/audaspace/FX/AUD_DelayFactory.cpp | 4 +- intern/audaspace/FX/AUD_DelayFactory.h | 4 +- intern/audaspace/FX/AUD_DelayReader.cpp | 2 +- intern/audaspace/FX/AUD_DelayReader.h | 2 +- intern/audaspace/FX/AUD_DoubleFactory.cpp | 18 +- intern/audaspace/FX/AUD_DoubleFactory.h | 8 +- intern/audaspace/FX/AUD_DoubleReader.cpp | 8 +- intern/audaspace/FX/AUD_DoubleReader.h | 7 +- intern/audaspace/FX/AUD_EffectFactory.cpp | 4 +- intern/audaspace/FX/AUD_EffectFactory.h | 8 +- intern/audaspace/FX/AUD_EffectReader.cpp | 3 +- intern/audaspace/FX/AUD_EffectReader.h | 5 +- intern/audaspace/FX/AUD_EnvelopeFactory.cpp | 6 +- intern/audaspace/FX/AUD_EnvelopeFactory.h | 4 +- intern/audaspace/FX/AUD_FaderFactory.cpp | 4 +- intern/audaspace/FX/AUD_FaderFactory.h | 4 +- intern/audaspace/FX/AUD_FaderReader.cpp | 2 +- intern/audaspace/FX/AUD_FaderReader.h | 2 +- intern/audaspace/FX/AUD_HighpassFactory.cpp | 6 +- intern/audaspace/FX/AUD_HighpassFactory.h | 4 +- intern/audaspace/FX/AUD_IIRFilterFactory.cpp | 4 +- intern/audaspace/FX/AUD_IIRFilterFactory.h | 4 +- intern/audaspace/FX/AUD_IIRFilterReader.cpp | 2 +- intern/audaspace/FX/AUD_IIRFilterReader.h | 2 +- intern/audaspace/FX/AUD_LimiterFactory.cpp | 4 +- intern/audaspace/FX/AUD_LimiterFactory.h | 4 +- intern/audaspace/FX/AUD_LimiterReader.cpp | 2 +- intern/audaspace/FX/AUD_LimiterReader.h | 2 +- intern/audaspace/FX/AUD_LoopFactory.cpp | 4 +- intern/audaspace/FX/AUD_LoopFactory.h | 4 +- intern/audaspace/FX/AUD_LoopReader.cpp | 2 +- intern/audaspace/FX/AUD_LoopReader.h | 2 +- intern/audaspace/FX/AUD_LowpassFactory.cpp | 6 +- intern/audaspace/FX/AUD_LowpassFactory.h | 4 +- intern/audaspace/FX/AUD_PingPongFactory.cpp | 18 +- intern/audaspace/FX/AUD_PingPongFactory.h | 4 +- intern/audaspace/FX/AUD_PitchFactory.cpp | 4 +- intern/audaspace/FX/AUD_PitchFactory.h | 4 +- intern/audaspace/FX/AUD_PitchReader.cpp | 2 +- intern/audaspace/FX/AUD_PitchReader.h | 2 +- intern/audaspace/FX/AUD_RectifyFactory.cpp | 4 +- intern/audaspace/FX/AUD_RectifyFactory.h | 4 +- intern/audaspace/FX/AUD_ReverseFactory.cpp | 4 +- intern/audaspace/FX/AUD_ReverseFactory.h | 4 +- intern/audaspace/FX/AUD_ReverseReader.cpp | 2 +- intern/audaspace/FX/AUD_ReverseReader.h | 2 +- intern/audaspace/FX/AUD_SquareFactory.cpp | 4 +- intern/audaspace/FX/AUD_SquareFactory.h | 4 +- intern/audaspace/FX/AUD_SumFactory.cpp | 4 +- intern/audaspace/FX/AUD_SumFactory.h | 4 +- intern/audaspace/FX/AUD_SuperposeFactory.cpp | 17 +- intern/audaspace/FX/AUD_SuperposeFactory.h | 8 +- intern/audaspace/FX/AUD_SuperposeReader.cpp | 24 +-- intern/audaspace/FX/AUD_SuperposeReader.h | 7 +- intern/audaspace/FX/AUD_VolumeFactory.cpp | 4 +- intern/audaspace/FX/AUD_VolumeFactory.h | 4 +- intern/audaspace/OpenAL/AUD_OpenALDevice.cpp | 17 +- intern/audaspace/OpenAL/AUD_OpenALDevice.h | 4 +- intern/audaspace/Python/AUD_PyAPI.cpp | 166 +++++++-------- intern/audaspace/Python/AUD_PyAPI.h | 9 +- intern/audaspace/SRC/AUD_SRCResampleFactory.cpp | 6 +- intern/audaspace/SRC/AUD_SRCResampleFactory.h | 4 +- intern/audaspace/SRC/AUD_SRCResampleReader.cpp | 2 +- intern/audaspace/SRC/AUD_SRCResampleReader.h | 2 +- intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp | 10 +- intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h | 2 +- intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp | 8 +- intern/audaspace/intern/AUD_BufferReader.cpp | 8 +- intern/audaspace/intern/AUD_C-API.cpp | 235 +++++++-------------- intern/audaspace/intern/AUD_C-API.h | 10 +- .../audaspace/intern/AUD_ChannelMapperFactory.cpp | 6 +- intern/audaspace/intern/AUD_ChannelMapperFactory.h | 4 +- .../audaspace/intern/AUD_ChannelMapperReader.cpp | 2 +- intern/audaspace/intern/AUD_ChannelMapperReader.h | 2 +- intern/audaspace/intern/AUD_ConverterFactory.cpp | 6 +- intern/audaspace/intern/AUD_ConverterFactory.h | 4 +- intern/audaspace/intern/AUD_ConverterReader.cpp | 2 +- intern/audaspace/intern/AUD_ConverterReader.h | 2 +- intern/audaspace/intern/AUD_DefaultMixer.cpp | 2 +- intern/audaspace/intern/AUD_DefaultMixer.h | 2 +- intern/audaspace/intern/AUD_FileFactory.cpp | 16 +- intern/audaspace/intern/AUD_FileFactory.h | 2 +- intern/audaspace/intern/AUD_IDevice.h | 5 +- intern/audaspace/intern/AUD_IFactory.h | 3 +- .../audaspace/intern/AUD_LinearResampleFactory.cpp | 6 +- .../audaspace/intern/AUD_LinearResampleFactory.h | 4 +- .../audaspace/intern/AUD_LinearResampleReader.cpp | 2 +- intern/audaspace/intern/AUD_LinearResampleReader.h | 2 +- intern/audaspace/intern/AUD_Mixer.h | 3 +- intern/audaspace/intern/AUD_MixerFactory.cpp | 6 +- intern/audaspace/intern/AUD_MixerFactory.h | 8 +- intern/audaspace/intern/AUD_NULLDevice.cpp | 4 +- intern/audaspace/intern/AUD_NULLDevice.h | 5 +- intern/audaspace/intern/AUD_Reference.h | 68 +++++- intern/audaspace/intern/AUD_SequencerFactory.cpp | 45 ++-- intern/audaspace/intern/AUD_SequencerFactory.h | 23 +- intern/audaspace/intern/AUD_SequencerReader.cpp | 85 ++------ intern/audaspace/intern/AUD_SequencerReader.h | 20 +- intern/audaspace/intern/AUD_SilenceFactory.cpp | 2 +- intern/audaspace/intern/AUD_SilenceFactory.h | 2 +- intern/audaspace/intern/AUD_SinusFactory.cpp | 2 +- intern/audaspace/intern/AUD_SinusFactory.h | 2 +- intern/audaspace/intern/AUD_SoftwareDevice.cpp | 16 +- intern/audaspace/intern/AUD_SoftwareDevice.h | 8 +- .../audaspace/intern/AUD_StreamBufferFactory.cpp | 15 +- intern/audaspace/intern/AUD_StreamBufferFactory.h | 4 +- intern/audaspace/sndfile/AUD_SndFileFactory.cpp | 10 +- intern/audaspace/sndfile/AUD_SndFileFactory.h | 2 +- intern/audaspace/sndfile/AUD_SndFileReader.cpp | 10 +- 117 files changed, 527 insertions(+), 679 deletions(-) (limited to 'intern') diff --git a/intern/audaspace/FX/AUD_AccumulatorFactory.cpp b/intern/audaspace/FX/AUD_AccumulatorFactory.cpp index d60924958b1..207c2ee502b 100644 --- a/intern/audaspace/FX/AUD_AccumulatorFactory.cpp +++ b/intern/audaspace/FX/AUD_AccumulatorFactory.cpp @@ -52,14 +52,14 @@ sample_t accumulatorFilter(AUD_CallbackIIRFilterReader* reader, void* useless) return out; } -AUD_AccumulatorFactory::AUD_AccumulatorFactory(AUD_IFactory* factory, +AUD_AccumulatorFactory::AUD_AccumulatorFactory(AUD_Reference factory, bool additive) : AUD_EffectFactory(factory), m_additive(additive) { } -AUD_IReader* AUD_AccumulatorFactory::createReader() const +AUD_Reference AUD_AccumulatorFactory::createReader() const { return new AUD_CallbackIIRFilterReader(getReader(), 2, 2, m_additive ? accumulatorFilterAdditive : accumulatorFilter); diff --git a/intern/audaspace/FX/AUD_AccumulatorFactory.h b/intern/audaspace/FX/AUD_AccumulatorFactory.h index 3c3b32ce071..becd5d9aaee 100644 --- a/intern/audaspace/FX/AUD_AccumulatorFactory.h +++ b/intern/audaspace/FX/AUD_AccumulatorFactory.h @@ -55,9 +55,9 @@ public: * \param factory The input factory. * \param additive Whether the accumulator is additive. */ - AUD_AccumulatorFactory(AUD_IFactory* factory, bool additive = false); + AUD_AccumulatorFactory(AUD_Reference factory, bool additive = false); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_ACCUMULATORFACTORY diff --git a/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp b/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp index 563722d9213..5ad5903141b 100644 --- a/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp +++ b/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp @@ -35,7 +35,7 @@ #define CC m_channels + m_channel -AUD_BaseIIRFilterReader::AUD_BaseIIRFilterReader(AUD_IReader* reader, int in, +AUD_BaseIIRFilterReader::AUD_BaseIIRFilterReader(AUD_Reference reader, int in, int out) : AUD_EffectReader(reader), m_channels(reader->getSpecs().channels), diff --git a/intern/audaspace/FX/AUD_BaseIIRFilterReader.h b/intern/audaspace/FX/AUD_BaseIIRFilterReader.h index 436e6469a58..9f81e2d8a25 100644 --- a/intern/audaspace/FX/AUD_BaseIIRFilterReader.h +++ b/intern/audaspace/FX/AUD_BaseIIRFilterReader.h @@ -97,7 +97,7 @@ protected: * \param in The count of past input samples needed. * \param out The count of past output samples needed. */ - AUD_BaseIIRFilterReader(AUD_IReader* reader, int in, int out); + AUD_BaseIIRFilterReader(AUD_Reference reader, int in, int out); public: inline sample_t x(int pos) diff --git a/intern/audaspace/FX/AUD_ButterworthFactory.cpp b/intern/audaspace/FX/AUD_ButterworthFactory.cpp index ea957c81ed3..1161a485fb1 100644 --- a/intern/audaspace/FX/AUD_ButterworthFactory.cpp +++ b/intern/audaspace/FX/AUD_ButterworthFactory.cpp @@ -41,16 +41,16 @@ #define BWPB41 0.76536686473 #define BWPB42 1.84775906502 -AUD_ButterworthFactory::AUD_ButterworthFactory(AUD_IFactory* factory, +AUD_ButterworthFactory::AUD_ButterworthFactory(AUD_Reference factory, float frequency) : AUD_EffectFactory(factory), m_frequency(frequency) { } -AUD_IReader* AUD_ButterworthFactory::createReader() const +AUD_Reference AUD_ButterworthFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); // calculate coefficients float omega = 2 * tan(m_frequency * M_PI / reader->getSpecs().rate); diff --git a/intern/audaspace/FX/AUD_ButterworthFactory.h b/intern/audaspace/FX/AUD_ButterworthFactory.h index c8b731449c4..c211a6df246 100644 --- a/intern/audaspace/FX/AUD_ButterworthFactory.h +++ b/intern/audaspace/FX/AUD_ButterworthFactory.h @@ -55,9 +55,9 @@ public: * \param factory The input factory. * \param frequency The cutoff frequency. */ - AUD_ButterworthFactory(AUD_IFactory* factory, float frequency); + AUD_ButterworthFactory(AUD_Reference factory, float frequency); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_BUTTERWORTHFACTORY diff --git a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp b/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp index 2f9bb7762a0..e6c83322435 100644 --- a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp +++ b/intern/audaspace/FX/AUD_CallbackIIRFilterReader.cpp @@ -31,7 +31,7 @@ #include "AUD_CallbackIIRFilterReader.h" -AUD_CallbackIIRFilterReader::AUD_CallbackIIRFilterReader(AUD_IReader* reader, +AUD_CallbackIIRFilterReader::AUD_CallbackIIRFilterReader(AUD_Reference reader, int in, int out, doFilterIIR doFilter, endFilterIIR endFilter, diff --git a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h b/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h index a969db7297e..6d53edeecc2 100644 --- a/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h +++ b/intern/audaspace/FX/AUD_CallbackIIRFilterReader.h @@ -76,7 +76,7 @@ public: * \param endFilter The finishing callback. * \param data Data pointer for the callbacks. */ - AUD_CallbackIIRFilterReader(AUD_IReader* reader, int in, int out, + AUD_CallbackIIRFilterReader(AUD_Reference reader, int in, int out, doFilterIIR doFilter, endFilterIIR endFilter = 0, void* data = 0); diff --git a/intern/audaspace/FX/AUD_DelayFactory.cpp b/intern/audaspace/FX/AUD_DelayFactory.cpp index 1d2d99adc03..ceecd7a63c9 100644 --- a/intern/audaspace/FX/AUD_DelayFactory.cpp +++ b/intern/audaspace/FX/AUD_DelayFactory.cpp @@ -33,7 +33,7 @@ #include "AUD_DelayReader.h" #include "AUD_Space.h" -AUD_DelayFactory::AUD_DelayFactory(AUD_IFactory* factory, float delay) : +AUD_DelayFactory::AUD_DelayFactory(AUD_Reference factory, float delay) : AUD_EffectFactory(factory), m_delay(delay) { @@ -44,7 +44,7 @@ float AUD_DelayFactory::getDelay() const return m_delay; } -AUD_IReader* AUD_DelayFactory::createReader() const +AUD_Reference AUD_DelayFactory::createReader() const { return new AUD_DelayReader(getReader(), m_delay); } diff --git a/intern/audaspace/FX/AUD_DelayFactory.h b/intern/audaspace/FX/AUD_DelayFactory.h index 1e67cd68990..6362bd19a70 100644 --- a/intern/audaspace/FX/AUD_DelayFactory.h +++ b/intern/audaspace/FX/AUD_DelayFactory.h @@ -55,14 +55,14 @@ public: * \param factory The input factory. * \param delay The desired delay in seconds. */ - AUD_DelayFactory(AUD_IFactory* factory, float delay = 0); + AUD_DelayFactory(AUD_Reference factory, float delay = 0); /** * Returns the delay in seconds. */ float getDelay() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_DELAYFACTORY diff --git a/intern/audaspace/FX/AUD_DelayReader.cpp b/intern/audaspace/FX/AUD_DelayReader.cpp index 374b876455d..a2224caf288 100644 --- a/intern/audaspace/FX/AUD_DelayReader.cpp +++ b/intern/audaspace/FX/AUD_DelayReader.cpp @@ -33,7 +33,7 @@ #include -AUD_DelayReader::AUD_DelayReader(AUD_IReader* reader, float delay) : +AUD_DelayReader::AUD_DelayReader(AUD_Reference reader, float delay) : AUD_EffectReader(reader), m_delay(int(delay * reader->getSpecs().rate)), m_remdelay(int(delay * reader->getSpecs().rate)), diff --git a/intern/audaspace/FX/AUD_DelayReader.h b/intern/audaspace/FX/AUD_DelayReader.h index 5f0af660bdf..695003a8c43 100644 --- a/intern/audaspace/FX/AUD_DelayReader.h +++ b/intern/audaspace/FX/AUD_DelayReader.h @@ -71,7 +71,7 @@ public: * \param reader The reader to read from. * \param delay The delay in seconds. */ - AUD_DelayReader(AUD_IReader* reader, float delay); + AUD_DelayReader(AUD_Reference reader, float delay); virtual void seek(int position); virtual int getLength() const; diff --git a/intern/audaspace/FX/AUD_DoubleFactory.cpp b/intern/audaspace/FX/AUD_DoubleFactory.cpp index 7a40f1f8c96..5b72082f520 100644 --- a/intern/audaspace/FX/AUD_DoubleFactory.cpp +++ b/intern/audaspace/FX/AUD_DoubleFactory.cpp @@ -32,25 +32,15 @@ #include "AUD_DoubleFactory.h" #include "AUD_DoubleReader.h" -AUD_DoubleFactory::AUD_DoubleFactory(AUD_IFactory* factory1, AUD_IFactory* factory2) : +AUD_DoubleFactory::AUD_DoubleFactory(AUD_Reference factory1, AUD_Reference factory2) : m_factory1(factory1), m_factory2(factory2) { } -AUD_IReader* AUD_DoubleFactory::createReader() const +AUD_Reference AUD_DoubleFactory::createReader() const { - AUD_IReader* reader1 = m_factory1->createReader(); - AUD_IReader* reader2; - - try - { - reader2 = m_factory2->createReader(); - } - catch(AUD_Exception&) - { - delete reader1; - throw; - } + AUD_Reference reader1 = m_factory1->createReader(); + AUD_Reference reader2 = m_factory2->createReader(); return new AUD_DoubleReader(reader1, reader2); } diff --git a/intern/audaspace/FX/AUD_DoubleFactory.h b/intern/audaspace/FX/AUD_DoubleFactory.h index 52a299c7157..acc9997deea 100644 --- a/intern/audaspace/FX/AUD_DoubleFactory.h +++ b/intern/audaspace/FX/AUD_DoubleFactory.h @@ -44,12 +44,12 @@ private: /** * First played factory. */ - AUD_IFactory* m_factory1; + AUD_Reference m_factory1; /** * Second played factory. */ - AUD_IFactory* m_factory2; + AUD_Reference m_factory2; // hide copy constructor and operator= AUD_DoubleFactory(const AUD_DoubleFactory&); @@ -61,9 +61,9 @@ public: * \param factory1 The first input factory. * \param factory2 The second input factory. */ - AUD_DoubleFactory(AUD_IFactory* factory1, AUD_IFactory* factory2); + AUD_DoubleFactory(AUD_Reference factory1, AUD_Reference factory2); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_DOUBLEFACTORY diff --git a/intern/audaspace/FX/AUD_DoubleReader.cpp b/intern/audaspace/FX/AUD_DoubleReader.cpp index 113bed14ce3..bf1c770a2ed 100644 --- a/intern/audaspace/FX/AUD_DoubleReader.cpp +++ b/intern/audaspace/FX/AUD_DoubleReader.cpp @@ -36,8 +36,8 @@ static const char* specs_error = "AUD_DoubleReader: Both readers have to have " "the same specs."; -AUD_DoubleReader::AUD_DoubleReader(AUD_IReader* reader1, - AUD_IReader* reader2) : +AUD_DoubleReader::AUD_DoubleReader(AUD_Reference reader1, + AUD_Reference reader2) : m_reader1(reader1), m_reader2(reader2), m_finished1(false) { AUD_Specs s1, s2; @@ -45,16 +45,12 @@ AUD_DoubleReader::AUD_DoubleReader(AUD_IReader* reader1, s2 = reader2->getSpecs(); if(memcmp(&s1, &s2, sizeof(AUD_Specs)) != 0) { - delete reader1; - delete reader2; AUD_THROW(AUD_ERROR_SPECS, specs_error); } } AUD_DoubleReader::~AUD_DoubleReader() { - delete m_reader1; - delete m_reader2; } bool AUD_DoubleReader::isSeekable() const diff --git a/intern/audaspace/FX/AUD_DoubleReader.h b/intern/audaspace/FX/AUD_DoubleReader.h index 7b3b812ef80..4f01c47d052 100644 --- a/intern/audaspace/FX/AUD_DoubleReader.h +++ b/intern/audaspace/FX/AUD_DoubleReader.h @@ -34,6 +34,7 @@ #include "AUD_IReader.h" #include "AUD_Buffer.h" +#include "AUD_Reference.h" /** * This reader plays two readers with the same specs sequently. @@ -44,12 +45,12 @@ private: /** * The first reader. */ - AUD_IReader* m_reader1; + AUD_Reference m_reader1; /** * The second reader. */ - AUD_IReader* m_reader2; + AUD_Reference m_reader2; /** * Whether we've reached the end of the first reader. @@ -72,7 +73,7 @@ public: * \param reader2 The second reader to read from. * \exception AUD_Exception Thrown if the specs from the readers differ. */ - AUD_DoubleReader(AUD_IReader* reader1, AUD_IReader* reader2); + AUD_DoubleReader(AUD_Reference reader1, AUD_Reference reader2); /** * Destroys the reader. diff --git a/intern/audaspace/FX/AUD_EffectFactory.cpp b/intern/audaspace/FX/AUD_EffectFactory.cpp index a0d9256e691..6173ffb5a97 100644 --- a/intern/audaspace/FX/AUD_EffectFactory.cpp +++ b/intern/audaspace/FX/AUD_EffectFactory.cpp @@ -32,7 +32,7 @@ #include "AUD_EffectFactory.h" #include "AUD_IReader.h" -AUD_EffectFactory::AUD_EffectFactory(AUD_IFactory* factory) +AUD_EffectFactory::AUD_EffectFactory(AUD_Reference factory) { m_factory = factory; } @@ -41,7 +41,7 @@ AUD_EffectFactory::~AUD_EffectFactory() { } -AUD_IFactory* AUD_EffectFactory::getFactory() const +AUD_Reference AUD_EffectFactory::getFactory() const { return m_factory; } diff --git a/intern/audaspace/FX/AUD_EffectFactory.h b/intern/audaspace/FX/AUD_EffectFactory.h index a6a28eea577..72fdb3f0833 100644 --- a/intern/audaspace/FX/AUD_EffectFactory.h +++ b/intern/audaspace/FX/AUD_EffectFactory.h @@ -49,7 +49,7 @@ protected: /** * If there is no reader it is created out of this factory. */ - AUD_IFactory* m_factory; + AUD_Reference m_factory; /** * Returns the reader created out of the factory. @@ -57,7 +57,7 @@ protected: * classes. * \return The reader created out of the factory. */ - inline AUD_IReader* getReader() const + inline AUD_Reference getReader() const { return m_factory->createReader(); } @@ -67,7 +67,7 @@ public: * Creates a new factory. * \param factory The input factory. */ - AUD_EffectFactory(AUD_IFactory* factory); + AUD_EffectFactory(AUD_Reference factory); /** * Destroys the factory. @@ -78,7 +78,7 @@ public: * Returns the saved factory. * \return The factory or NULL if there has no factory been saved. */ - AUD_IFactory* getFactory() const; + AUD_Reference getFactory() const; }; #endif //AUD_EFFECTFACTORY diff --git a/intern/audaspace/FX/AUD_EffectReader.cpp b/intern/audaspace/FX/AUD_EffectReader.cpp index 3ad9f67bfd6..d7c4eeb2ee1 100644 --- a/intern/audaspace/FX/AUD_EffectReader.cpp +++ b/intern/audaspace/FX/AUD_EffectReader.cpp @@ -31,14 +31,13 @@ #include "AUD_EffectReader.h" -AUD_EffectReader::AUD_EffectReader(AUD_IReader* reader) +AUD_EffectReader::AUD_EffectReader(AUD_Reference reader) { m_reader = reader; } AUD_EffectReader::~AUD_EffectReader() { - delete m_reader; } bool AUD_EffectReader::isSeekable() const diff --git a/intern/audaspace/FX/AUD_EffectReader.h b/intern/audaspace/FX/AUD_EffectReader.h index fb8066f36d8..6aa185edcd0 100644 --- a/intern/audaspace/FX/AUD_EffectReader.h +++ b/intern/audaspace/FX/AUD_EffectReader.h @@ -33,6 +33,7 @@ #define AUD_EFFECTREADER #include "AUD_IReader.h" +#include "AUD_Reference.h" /** * This reader is a base class for all effect readers that take one other reader @@ -49,14 +50,14 @@ protected: /** * The reader to read from. */ - AUD_IReader* m_reader; + AUD_Reference m_reader; public: /** * Creates a new effect reader. * \param reader The reader to read from. */ - AUD_EffectReader(AUD_IReader* reader); + AUD_EffectReader(AUD_Reference reader); /** * Destroys the reader. diff --git a/intern/audaspace/FX/AUD_EnvelopeFactory.cpp b/intern/audaspace/FX/AUD_EnvelopeFactory.cpp index 069317d1c8b..e36091950a5 100644 --- a/intern/audaspace/FX/AUD_EnvelopeFactory.cpp +++ b/intern/audaspace/FX/AUD_EnvelopeFactory.cpp @@ -56,7 +56,7 @@ void endEnvelopeFilter(EnvelopeParameters* param) delete param; } -AUD_EnvelopeFactory::AUD_EnvelopeFactory(AUD_IFactory* factory, float attack, +AUD_EnvelopeFactory::AUD_EnvelopeFactory(AUD_Reference factory, float attack, float release, float threshold, float arthreshold) : AUD_EffectFactory(factory), @@ -67,9 +67,9 @@ AUD_EnvelopeFactory::AUD_EnvelopeFactory(AUD_IFactory* factory, float attack, { } -AUD_IReader* AUD_EnvelopeFactory::createReader() const +AUD_Reference AUD_EnvelopeFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); EnvelopeParameters* param = new EnvelopeParameters(); param->arthreshold = m_arthreshold; diff --git a/intern/audaspace/FX/AUD_EnvelopeFactory.h b/intern/audaspace/FX/AUD_EnvelopeFactory.h index 45ee811b6e0..0a803f77aaf 100644 --- a/intern/audaspace/FX/AUD_EnvelopeFactory.h +++ b/intern/audaspace/FX/AUD_EnvelopeFactory.h @@ -73,10 +73,10 @@ public: * \param threshold The threshold value. * \param arthreshold The attack/release threshold value. */ - AUD_EnvelopeFactory(AUD_IFactory* factory, float attack, float release, + AUD_EnvelopeFactory(AUD_Reference factory, float attack, float release, float threshold, float arthreshold); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_ENVELOPEFACTORY diff --git a/intern/audaspace/FX/AUD_FaderFactory.cpp b/intern/audaspace/FX/AUD_FaderFactory.cpp index d887e9e68d9..e7fe5098d76 100644 --- a/intern/audaspace/FX/AUD_FaderFactory.cpp +++ b/intern/audaspace/FX/AUD_FaderFactory.cpp @@ -32,7 +32,7 @@ #include "AUD_FaderFactory.h" #include "AUD_FaderReader.h" -AUD_FaderFactory::AUD_FaderFactory(AUD_IFactory* factory, AUD_FadeType type, +AUD_FaderFactory::AUD_FaderFactory(AUD_Reference factory, AUD_FadeType type, float start, float length) : AUD_EffectFactory(factory), m_type(type), @@ -56,7 +56,7 @@ float AUD_FaderFactory::getLength() const return m_length; } -AUD_IReader* AUD_FaderFactory::createReader() const +AUD_Reference AUD_FaderFactory::createReader() const { return new AUD_FaderReader(getReader(), m_type, m_start, m_length); } diff --git a/intern/audaspace/FX/AUD_FaderFactory.h b/intern/audaspace/FX/AUD_FaderFactory.h index b85475bc534..cc20245a267 100644 --- a/intern/audaspace/FX/AUD_FaderFactory.h +++ b/intern/audaspace/FX/AUD_FaderFactory.h @@ -69,7 +69,7 @@ public: * \param start The time where fading should start in seconds. * \param length How long fading should last in seconds. */ - AUD_FaderFactory(AUD_IFactory* factory, + AUD_FaderFactory(AUD_Reference factory, AUD_FadeType type = AUD_FADE_IN, float start = 0.0f, float length = 1.0f); @@ -88,7 +88,7 @@ public: */ float getLength() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_FADERFACTORY diff --git a/intern/audaspace/FX/AUD_FaderReader.cpp b/intern/audaspace/FX/AUD_FaderReader.cpp index 6114bb486fc..e319e205e5f 100644 --- a/intern/audaspace/FX/AUD_FaderReader.cpp +++ b/intern/audaspace/FX/AUD_FaderReader.cpp @@ -33,7 +33,7 @@ #include -AUD_FaderReader::AUD_FaderReader(AUD_IReader* reader, AUD_FadeType type, +AUD_FaderReader::AUD_FaderReader(AUD_Reference reader, AUD_FadeType type, float start,float length) : AUD_EffectReader(reader), m_type(type), diff --git a/intern/audaspace/FX/AUD_FaderReader.h b/intern/audaspace/FX/AUD_FaderReader.h index fb927192b45..b088477bce0 100644 --- a/intern/audaspace/FX/AUD_FaderReader.h +++ b/intern/audaspace/FX/AUD_FaderReader.h @@ -79,7 +79,7 @@ public: * \param start The time where fading should start in seconds. * \param length How long fading should last in seconds. */ - AUD_FaderReader(AUD_IReader* reader, AUD_FadeType type, + AUD_FaderReader(AUD_Reference reader, AUD_FadeType type, float start,float length); virtual void read(int & length, sample_t* & buffer); diff --git a/intern/audaspace/FX/AUD_HighpassFactory.cpp b/intern/audaspace/FX/AUD_HighpassFactory.cpp index 61008eea44e..b8bfa6545ac 100644 --- a/intern/audaspace/FX/AUD_HighpassFactory.cpp +++ b/intern/audaspace/FX/AUD_HighpassFactory.cpp @@ -38,7 +38,7 @@ #define M_PI 3.14159265358979323846 #endif -AUD_HighpassFactory::AUD_HighpassFactory(AUD_IFactory* factory, float frequency, +AUD_HighpassFactory::AUD_HighpassFactory(AUD_Reference factory, float frequency, float Q) : AUD_EffectFactory(factory), m_frequency(frequency), @@ -46,9 +46,9 @@ AUD_HighpassFactory::AUD_HighpassFactory(AUD_IFactory* factory, float frequency, { } -AUD_IReader* AUD_HighpassFactory::createReader() const +AUD_Reference AUD_HighpassFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); // calculate coefficients float w0 = 2 * M_PI * m_frequency / reader->getSpecs().rate; diff --git a/intern/audaspace/FX/AUD_HighpassFactory.h b/intern/audaspace/FX/AUD_HighpassFactory.h index 48f4c1baefc..0089cc2c139 100644 --- a/intern/audaspace/FX/AUD_HighpassFactory.h +++ b/intern/audaspace/FX/AUD_HighpassFactory.h @@ -61,9 +61,9 @@ public: * \param frequency The cutoff frequency. * \param Q The Q factor. */ - AUD_HighpassFactory(AUD_IFactory* factory, float frequency, float Q = 1.0f); + AUD_HighpassFactory(AUD_Reference factory, float frequency, float Q = 1.0f); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_HIGHPASSFACTORY diff --git a/intern/audaspace/FX/AUD_IIRFilterFactory.cpp b/intern/audaspace/FX/AUD_IIRFilterFactory.cpp index ff90ce62739..e24a10266c9 100644 --- a/intern/audaspace/FX/AUD_IIRFilterFactory.cpp +++ b/intern/audaspace/FX/AUD_IIRFilterFactory.cpp @@ -32,14 +32,14 @@ #include "AUD_IIRFilterFactory.h" #include "AUD_IIRFilterReader.h" -AUD_IIRFilterFactory::AUD_IIRFilterFactory(AUD_IFactory* factory, +AUD_IIRFilterFactory::AUD_IIRFilterFactory(AUD_Reference factory, std::vector b, std::vector a) : AUD_EffectFactory(factory), m_a(a), m_b(b) { } -AUD_IReader* AUD_IIRFilterFactory::createReader() const +AUD_Reference AUD_IIRFilterFactory::createReader() const { return new AUD_IIRFilterReader(getReader(), m_b, m_a); } diff --git a/intern/audaspace/FX/AUD_IIRFilterFactory.h b/intern/audaspace/FX/AUD_IIRFilterFactory.h index d48ad453ee4..ffcc70a8ecb 100644 --- a/intern/audaspace/FX/AUD_IIRFilterFactory.h +++ b/intern/audaspace/FX/AUD_IIRFilterFactory.h @@ -63,10 +63,10 @@ public: * \param b The input filter coefficients. * \param a The output filter coefficients. */ - AUD_IIRFilterFactory(AUD_IFactory* factory, std::vector b, + AUD_IIRFilterFactory(AUD_Reference factory, std::vector b, std::vector a); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_IIRFILTERFACTORY diff --git a/intern/audaspace/FX/AUD_IIRFilterReader.cpp b/intern/audaspace/FX/AUD_IIRFilterReader.cpp index 0d55421d2b4..80252e68ce8 100644 --- a/intern/audaspace/FX/AUD_IIRFilterReader.cpp +++ b/intern/audaspace/FX/AUD_IIRFilterReader.cpp @@ -31,7 +31,7 @@ #include "AUD_IIRFilterReader.h" -AUD_IIRFilterReader::AUD_IIRFilterReader(AUD_IReader* reader, +AUD_IIRFilterReader::AUD_IIRFilterReader(AUD_Reference reader, std::vector b, std::vector a) : AUD_BaseIIRFilterReader(reader, b.size(), a.size()), m_a(a), m_b(b) diff --git a/intern/audaspace/FX/AUD_IIRFilterReader.h b/intern/audaspace/FX/AUD_IIRFilterReader.h index af50b6f1cdc..db813d6bab6 100644 --- a/intern/audaspace/FX/AUD_IIRFilterReader.h +++ b/intern/audaspace/FX/AUD_IIRFilterReader.h @@ -63,7 +63,7 @@ public: * \param b The input filter coefficients. * \param a The output filter coefficients. */ - AUD_IIRFilterReader(AUD_IReader* reader, std::vector b, + AUD_IIRFilterReader(AUD_Reference reader, std::vector b, std::vector a); virtual sample_t filter(); diff --git a/intern/audaspace/FX/AUD_LimiterFactory.cpp b/intern/audaspace/FX/AUD_LimiterFactory.cpp index 62ea01bb761..e52cdd75d4d 100644 --- a/intern/audaspace/FX/AUD_LimiterFactory.cpp +++ b/intern/audaspace/FX/AUD_LimiterFactory.cpp @@ -33,7 +33,7 @@ #include "AUD_LimiterReader.h" #include "AUD_Space.h" -AUD_LimiterFactory::AUD_LimiterFactory(AUD_IFactory* factory, +AUD_LimiterFactory::AUD_LimiterFactory(AUD_Reference factory, float start, float end) : AUD_EffectFactory(factory), m_start(start), @@ -51,7 +51,7 @@ float AUD_LimiterFactory::getEnd() const return m_end; } -AUD_IReader* AUD_LimiterFactory::createReader() const +AUD_Reference AUD_LimiterFactory::createReader() const { return new AUD_LimiterReader(getReader(), m_start, m_end); } diff --git a/intern/audaspace/FX/AUD_LimiterFactory.h b/intern/audaspace/FX/AUD_LimiterFactory.h index f93f4b3276c..c45b9da65fe 100644 --- a/intern/audaspace/FX/AUD_LimiterFactory.h +++ b/intern/audaspace/FX/AUD_LimiterFactory.h @@ -62,7 +62,7 @@ public: * \param end The desired end time, a negative value signals that it should * play to the end. */ - AUD_LimiterFactory(AUD_IFactory* factory, + AUD_LimiterFactory(AUD_Reference factory, float start = 0, float end = -1); /** @@ -75,7 +75,7 @@ public: */ float getEnd() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_LIMITERFACTORY diff --git a/intern/audaspace/FX/AUD_LimiterReader.cpp b/intern/audaspace/FX/AUD_LimiterReader.cpp index d67fbb4d0e5..d5a46568b3e 100644 --- a/intern/audaspace/FX/AUD_LimiterReader.cpp +++ b/intern/audaspace/FX/AUD_LimiterReader.cpp @@ -34,7 +34,7 @@ #include -AUD_LimiterReader::AUD_LimiterReader(AUD_IReader* reader, +AUD_LimiterReader::AUD_LimiterReader(AUD_Reference reader, float start, float end) : AUD_EffectReader(reader), m_start(int(start * reader->getSpecs().rate)), diff --git a/intern/audaspace/FX/AUD_LimiterReader.h b/intern/audaspace/FX/AUD_LimiterReader.h index 4375ed9e10d..f4502c33ae0 100644 --- a/intern/audaspace/FX/AUD_LimiterReader.h +++ b/intern/audaspace/FX/AUD_LimiterReader.h @@ -62,7 +62,7 @@ public: * \param end The desired end sample (exklusive), a negative value signals * that it should play to the end. */ - AUD_LimiterReader(AUD_IReader* reader, float start = 0, float end = -1); + AUD_LimiterReader(AUD_Reference reader, float start = 0, float end = -1); virtual void seek(int position); virtual int getLength() const; diff --git a/intern/audaspace/FX/AUD_LoopFactory.cpp b/intern/audaspace/FX/AUD_LoopFactory.cpp index 49d3481757f..021e69901b2 100644 --- a/intern/audaspace/FX/AUD_LoopFactory.cpp +++ b/intern/audaspace/FX/AUD_LoopFactory.cpp @@ -32,7 +32,7 @@ #include "AUD_LoopFactory.h" #include "AUD_LoopReader.h" -AUD_LoopFactory::AUD_LoopFactory(AUD_IFactory* factory, int loop) : +AUD_LoopFactory::AUD_LoopFactory(AUD_Reference factory, int loop) : AUD_EffectFactory(factory), m_loop(loop) { @@ -43,7 +43,7 @@ int AUD_LoopFactory::getLoop() const return m_loop; } -AUD_IReader* AUD_LoopFactory::createReader() const +AUD_Reference AUD_LoopFactory::createReader() const { return new AUD_LoopReader(getReader(), m_loop); } diff --git a/intern/audaspace/FX/AUD_LoopFactory.h b/intern/audaspace/FX/AUD_LoopFactory.h index dfbbbe4fd20..4d601d5a605 100644 --- a/intern/audaspace/FX/AUD_LoopFactory.h +++ b/intern/audaspace/FX/AUD_LoopFactory.h @@ -57,14 +57,14 @@ public: * \param loop The desired loop count, negative values result in endless * looping. */ - AUD_LoopFactory(AUD_IFactory* factory, int loop = -1); + AUD_LoopFactory(AUD_Reference factory, int loop = -1); /** * Returns the loop count. */ int getLoop() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_LOOPFACTORY diff --git a/intern/audaspace/FX/AUD_LoopReader.cpp b/intern/audaspace/FX/AUD_LoopReader.cpp index b2e8e97a602..b7b8937abb8 100644 --- a/intern/audaspace/FX/AUD_LoopReader.cpp +++ b/intern/audaspace/FX/AUD_LoopReader.cpp @@ -34,7 +34,7 @@ #include -AUD_LoopReader::AUD_LoopReader(AUD_IReader* reader, int loop) : +AUD_LoopReader::AUD_LoopReader(AUD_Reference reader, int loop) : AUD_EffectReader(reader), m_count(loop), m_left(loop) { } diff --git a/intern/audaspace/FX/AUD_LoopReader.h b/intern/audaspace/FX/AUD_LoopReader.h index 45017901c56..866d6f7885f 100644 --- a/intern/audaspace/FX/AUD_LoopReader.h +++ b/intern/audaspace/FX/AUD_LoopReader.h @@ -68,7 +68,7 @@ public: * \param loop The desired loop count, negative values result in endless * looping. */ - AUD_LoopReader(AUD_IReader* reader, int loop); + AUD_LoopReader(AUD_Reference reader, int loop); virtual void seek(int position); virtual int getLength() const; diff --git a/intern/audaspace/FX/AUD_LowpassFactory.cpp b/intern/audaspace/FX/AUD_LowpassFactory.cpp index d24a04b5a94..d0f33c120d9 100644 --- a/intern/audaspace/FX/AUD_LowpassFactory.cpp +++ b/intern/audaspace/FX/AUD_LowpassFactory.cpp @@ -38,7 +38,7 @@ #define M_PI 3.14159265358979323846 #endif -AUD_LowpassFactory::AUD_LowpassFactory(AUD_IFactory* factory, float frequency, +AUD_LowpassFactory::AUD_LowpassFactory(AUD_Reference factory, float frequency, float Q) : AUD_EffectFactory(factory), m_frequency(frequency), @@ -46,9 +46,9 @@ AUD_LowpassFactory::AUD_LowpassFactory(AUD_IFactory* factory, float frequency, { } -AUD_IReader* AUD_LowpassFactory::createReader() const +AUD_Reference AUD_LowpassFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); // calculate coefficients float w0 = 2 * M_PI * m_frequency / reader->getSpecs().rate; diff --git a/intern/audaspace/FX/AUD_LowpassFactory.h b/intern/audaspace/FX/AUD_LowpassFactory.h index d60c0bd22d1..efe4dafc4e1 100644 --- a/intern/audaspace/FX/AUD_LowpassFactory.h +++ b/intern/audaspace/FX/AUD_LowpassFactory.h @@ -61,9 +61,9 @@ public: * \param frequency The cutoff frequency. * \param Q The Q factor. */ - AUD_LowpassFactory(AUD_IFactory* factory, float frequency, float Q = 1.0f); + AUD_LowpassFactory(AUD_Reference factory, float frequency, float Q = 1.0f); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_LOWPASSFACTORY diff --git a/intern/audaspace/FX/AUD_PingPongFactory.cpp b/intern/audaspace/FX/AUD_PingPongFactory.cpp index fa140555943..4f0d2a207ac 100644 --- a/intern/audaspace/FX/AUD_PingPongFactory.cpp +++ b/intern/audaspace/FX/AUD_PingPongFactory.cpp @@ -33,26 +33,16 @@ #include "AUD_DoubleReader.h" #include "AUD_ReverseFactory.h" -AUD_PingPongFactory::AUD_PingPongFactory(AUD_IFactory* factory) : +AUD_PingPongFactory::AUD_PingPongFactory(AUD_Reference factory) : AUD_EffectFactory(factory) { } -AUD_IReader* AUD_PingPongFactory::createReader() const +AUD_Reference AUD_PingPongFactory::createReader() const { - AUD_IReader* reader = getReader(); - AUD_IReader* reader2; + AUD_Reference reader = getReader(); AUD_ReverseFactory factory(m_factory); - - try - { - reader2 = factory.createReader(); - } - catch(AUD_Exception&) - { - delete reader; - throw; - } + AUD_Reference reader2 = factory.createReader(); return new AUD_DoubleReader(reader, reader2); } diff --git a/intern/audaspace/FX/AUD_PingPongFactory.h b/intern/audaspace/FX/AUD_PingPongFactory.h index 4ae0c494eb7..1c88a5a7114 100644 --- a/intern/audaspace/FX/AUD_PingPongFactory.h +++ b/intern/audaspace/FX/AUD_PingPongFactory.h @@ -50,9 +50,9 @@ public: * Creates a new ping pong factory. * \param factory The input factory. */ - AUD_PingPongFactory(AUD_IFactory* factory); + AUD_PingPongFactory(AUD_Reference factory); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_PINGPONGFACTORY diff --git a/intern/audaspace/FX/AUD_PitchFactory.cpp b/intern/audaspace/FX/AUD_PitchFactory.cpp index b4ae8582caf..94a3fb8034e 100644 --- a/intern/audaspace/FX/AUD_PitchFactory.cpp +++ b/intern/audaspace/FX/AUD_PitchFactory.cpp @@ -33,13 +33,13 @@ #include "AUD_PitchReader.h" #include "AUD_Space.h" -AUD_PitchFactory::AUD_PitchFactory(AUD_IFactory* factory, float pitch) : +AUD_PitchFactory::AUD_PitchFactory(AUD_Reference factory, float pitch) : AUD_EffectFactory(factory), m_pitch(pitch) { } -AUD_IReader* AUD_PitchFactory::createReader() const +AUD_Reference AUD_PitchFactory::createReader() const { return new AUD_PitchReader(getReader(), m_pitch); } diff --git a/intern/audaspace/FX/AUD_PitchFactory.h b/intern/audaspace/FX/AUD_PitchFactory.h index 8fa5be9293f..bbf08ef5993 100644 --- a/intern/audaspace/FX/AUD_PitchFactory.h +++ b/intern/audaspace/FX/AUD_PitchFactory.h @@ -55,9 +55,9 @@ public: * \param factory The input factory. * \param pitch The desired pitch. */ - AUD_PitchFactory(AUD_IFactory* factory, float pitch); + AUD_PitchFactory(AUD_Reference factory, float pitch); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_PITCHFACTORY diff --git a/intern/audaspace/FX/AUD_PitchReader.cpp b/intern/audaspace/FX/AUD_PitchReader.cpp index e2e89e2c457..7f8b8b53105 100644 --- a/intern/audaspace/FX/AUD_PitchReader.cpp +++ b/intern/audaspace/FX/AUD_PitchReader.cpp @@ -31,7 +31,7 @@ #include "AUD_PitchReader.h" -AUD_PitchReader::AUD_PitchReader(AUD_IReader* reader, float pitch) : +AUD_PitchReader::AUD_PitchReader(AUD_Reference reader, float pitch) : AUD_EffectReader(reader), m_pitch(pitch) { } diff --git a/intern/audaspace/FX/AUD_PitchReader.h b/intern/audaspace/FX/AUD_PitchReader.h index 120cebc58be..7939027dca9 100644 --- a/intern/audaspace/FX/AUD_PitchReader.h +++ b/intern/audaspace/FX/AUD_PitchReader.h @@ -55,7 +55,7 @@ public: * \param reader The reader to read from. * \param pitch The size of the buffer. */ - AUD_PitchReader(AUD_IReader* reader, float pitch); + AUD_PitchReader(AUD_Reference reader, float pitch); virtual AUD_Specs getSpecs() const; }; diff --git a/intern/audaspace/FX/AUD_RectifyFactory.cpp b/intern/audaspace/FX/AUD_RectifyFactory.cpp index 609d827cce4..3bacd033eb3 100644 --- a/intern/audaspace/FX/AUD_RectifyFactory.cpp +++ b/intern/audaspace/FX/AUD_RectifyFactory.cpp @@ -39,12 +39,12 @@ sample_t rectifyFilter(AUD_CallbackIIRFilterReader* reader, void* useless) return fabs(reader->x(0)); } -AUD_RectifyFactory::AUD_RectifyFactory(AUD_IFactory* factory) : +AUD_RectifyFactory::AUD_RectifyFactory(AUD_Reference factory) : AUD_EffectFactory(factory) { } -AUD_IReader* AUD_RectifyFactory::createReader() const +AUD_Reference AUD_RectifyFactory::createReader() const { return new AUD_CallbackIIRFilterReader(getReader(), 1, 1, rectifyFilter); } diff --git a/intern/audaspace/FX/AUD_RectifyFactory.h b/intern/audaspace/FX/AUD_RectifyFactory.h index c3529c7beef..d8411186001 100644 --- a/intern/audaspace/FX/AUD_RectifyFactory.h +++ b/intern/audaspace/FX/AUD_RectifyFactory.h @@ -49,9 +49,9 @@ public: * Creates a new rectify factory. * \param factory The input factory. */ - AUD_RectifyFactory(AUD_IFactory* factory); + AUD_RectifyFactory(AUD_Reference factory); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_RECTIFYFACTORY diff --git a/intern/audaspace/FX/AUD_ReverseFactory.cpp b/intern/audaspace/FX/AUD_ReverseFactory.cpp index 22b12e31420..88d812d7f2a 100644 --- a/intern/audaspace/FX/AUD_ReverseFactory.cpp +++ b/intern/audaspace/FX/AUD_ReverseFactory.cpp @@ -33,12 +33,12 @@ #include "AUD_ReverseReader.h" #include "AUD_Space.h" -AUD_ReverseFactory::AUD_ReverseFactory(AUD_IFactory* factory) : +AUD_ReverseFactory::AUD_ReverseFactory(AUD_Reference factory) : AUD_EffectFactory(factory) { } -AUD_IReader* AUD_ReverseFactory::createReader() const +AUD_Reference AUD_ReverseFactory::createReader() const { return new AUD_ReverseReader(getReader()); } diff --git a/intern/audaspace/FX/AUD_ReverseFactory.h b/intern/audaspace/FX/AUD_ReverseFactory.h index 7b20546302e..ae1fdd5a233 100644 --- a/intern/audaspace/FX/AUD_ReverseFactory.h +++ b/intern/audaspace/FX/AUD_ReverseFactory.h @@ -50,9 +50,9 @@ public: * Creates a new reverse factory. * \param factory The input factory. */ - AUD_ReverseFactory(AUD_IFactory* factory); + AUD_ReverseFactory(AUD_Reference factory); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_REVERSEFACTORY diff --git a/intern/audaspace/FX/AUD_ReverseReader.cpp b/intern/audaspace/FX/AUD_ReverseReader.cpp index a4a03936c76..8ca9f8609bb 100644 --- a/intern/audaspace/FX/AUD_ReverseReader.cpp +++ b/intern/audaspace/FX/AUD_ReverseReader.cpp @@ -36,7 +36,7 @@ static const char* props_error = "AUD_ReverseReader: The reader has to be " "seekable and a finite length."; -AUD_ReverseReader::AUD_ReverseReader(AUD_IReader* reader) : +AUD_ReverseReader::AUD_ReverseReader(AUD_Reference reader) : AUD_EffectReader(reader), m_length(reader->getLength()), m_position(0) diff --git a/intern/audaspace/FX/AUD_ReverseReader.h b/intern/audaspace/FX/AUD_ReverseReader.h index e12f2b21191..d8086e08534 100644 --- a/intern/audaspace/FX/AUD_ReverseReader.h +++ b/intern/audaspace/FX/AUD_ReverseReader.h @@ -68,7 +68,7 @@ public: * \exception AUD_Exception Thrown if the reader specified has an * undeterminable/infinite length or is not seekable. */ - AUD_ReverseReader(AUD_IReader* reader); + AUD_ReverseReader(AUD_Reference reader); virtual void seek(int position); virtual int getLength() const; diff --git a/intern/audaspace/FX/AUD_SquareFactory.cpp b/intern/audaspace/FX/AUD_SquareFactory.cpp index a075773d2cb..a3ea088a258 100644 --- a/intern/audaspace/FX/AUD_SquareFactory.cpp +++ b/intern/audaspace/FX/AUD_SquareFactory.cpp @@ -48,7 +48,7 @@ void endSquareFilter(float* threshold) delete threshold; } -AUD_SquareFactory::AUD_SquareFactory(AUD_IFactory* factory, float threshold) : +AUD_SquareFactory::AUD_SquareFactory(AUD_Reference factory, float threshold) : AUD_EffectFactory(factory), m_threshold(threshold) { @@ -59,7 +59,7 @@ float AUD_SquareFactory::getThreshold() const return m_threshold; } -AUD_IReader* AUD_SquareFactory::createReader() const +AUD_Reference AUD_SquareFactory::createReader() const { return new AUD_CallbackIIRFilterReader(getReader(), 1, 1, (doFilterIIR) squareFilter, diff --git a/intern/audaspace/FX/AUD_SquareFactory.h b/intern/audaspace/FX/AUD_SquareFactory.h index 8060e98e281..60db49c48e5 100644 --- a/intern/audaspace/FX/AUD_SquareFactory.h +++ b/intern/audaspace/FX/AUD_SquareFactory.h @@ -55,14 +55,14 @@ public: * \param factory The input factory. * \param threshold The threshold. */ - AUD_SquareFactory(AUD_IFactory* factory, float threshold = 0.0f); + AUD_SquareFactory(AUD_Reference factory, float threshold = 0.0f); /** * Returns the threshold. */ float getThreshold() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SQUAREFACTORY diff --git a/intern/audaspace/FX/AUD_SumFactory.cpp b/intern/audaspace/FX/AUD_SumFactory.cpp index 6d8368d6e35..582e2d75b7f 100644 --- a/intern/audaspace/FX/AUD_SumFactory.cpp +++ b/intern/audaspace/FX/AUD_SumFactory.cpp @@ -32,12 +32,12 @@ #include "AUD_SumFactory.h" #include "AUD_IIRFilterReader.h" -AUD_SumFactory::AUD_SumFactory(AUD_IFactory* factory) : +AUD_SumFactory::AUD_SumFactory(AUD_Reference factory) : AUD_EffectFactory(factory) { } -AUD_IReader* AUD_SumFactory::createReader() const +AUD_Reference AUD_SumFactory::createReader() const { std::vector a, b; a.push_back(1); diff --git a/intern/audaspace/FX/AUD_SumFactory.h b/intern/audaspace/FX/AUD_SumFactory.h index ed19a0f258a..948355e50fd 100644 --- a/intern/audaspace/FX/AUD_SumFactory.h +++ b/intern/audaspace/FX/AUD_SumFactory.h @@ -49,9 +49,9 @@ public: * Creates a new sum factory. * \param factory The input factory. */ - AUD_SumFactory(AUD_IFactory* factory); + AUD_SumFactory(AUD_Reference factory); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SUMFACTORY diff --git a/intern/audaspace/FX/AUD_SuperposeFactory.cpp b/intern/audaspace/FX/AUD_SuperposeFactory.cpp index c13a0d0dd95..b5e816f66a8 100644 --- a/intern/audaspace/FX/AUD_SuperposeFactory.cpp +++ b/intern/audaspace/FX/AUD_SuperposeFactory.cpp @@ -32,24 +32,15 @@ #include "AUD_SuperposeFactory.h" #include "AUD_SuperposeReader.h" -AUD_SuperposeFactory::AUD_SuperposeFactory(AUD_IFactory* factory1, AUD_IFactory* factory2) : +AUD_SuperposeFactory::AUD_SuperposeFactory(AUD_Reference factory1, AUD_Reference factory2) : m_factory1(factory1), m_factory2(factory2) { } -AUD_IReader* AUD_SuperposeFactory::createReader() const +AUD_Reference AUD_SuperposeFactory::createReader() const { - AUD_IReader* reader1 = m_factory1->createReader(); - AUD_IReader* reader2; - try - { - reader2 = m_factory2->createReader(); - } - catch(AUD_Exception&) - { - delete reader1; - throw; - } + AUD_Reference reader1 = m_factory1->createReader(); + AUD_Reference reader2 = m_factory2->createReader(); return new AUD_SuperposeReader(reader1, reader2); } diff --git a/intern/audaspace/FX/AUD_SuperposeFactory.h b/intern/audaspace/FX/AUD_SuperposeFactory.h index 32232012e4e..d302658097e 100644 --- a/intern/audaspace/FX/AUD_SuperposeFactory.h +++ b/intern/audaspace/FX/AUD_SuperposeFactory.h @@ -44,12 +44,12 @@ private: /** * First played factory. */ - AUD_IFactory* m_factory1; + AUD_Reference m_factory1; /** * Second played factory. */ - AUD_IFactory* m_factory2; + AUD_Reference m_factory2; // hide copy constructor and operator= AUD_SuperposeFactory(const AUD_SuperposeFactory&); @@ -61,9 +61,9 @@ public: * \param factory1 The first input factory. * \param factory2 The second input factory. */ - AUD_SuperposeFactory(AUD_IFactory* factory1, AUD_IFactory* factory2); + AUD_SuperposeFactory(AUD_Reference factory1, AUD_Reference factory2); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SUPERPOSEFACTORY diff --git a/intern/audaspace/FX/AUD_SuperposeReader.cpp b/intern/audaspace/FX/AUD_SuperposeReader.cpp index e64cf79188e..6f39dcadf40 100644 --- a/intern/audaspace/FX/AUD_SuperposeReader.cpp +++ b/intern/audaspace/FX/AUD_SuperposeReader.cpp @@ -36,30 +36,18 @@ static const char* specs_error = "AUD_SuperposeReader: Both readers have to " "have the same specs."; -AUD_SuperposeReader::AUD_SuperposeReader(AUD_IReader* reader1, AUD_IReader* reader2) : +AUD_SuperposeReader::AUD_SuperposeReader(AUD_Reference reader1, AUD_Reference reader2) : m_reader1(reader1), m_reader2(reader2) { - try - { - AUD_Specs s1, s2; - s1 = reader1->getSpecs(); - s2 = reader2->getSpecs(); - if(memcmp(&s1, &s2, sizeof(AUD_Specs))) - AUD_THROW(AUD_ERROR_SPECS, specs_error); - } - catch(AUD_Exception&) - { - delete reader1; - delete reader2; - - throw; - } + AUD_Specs s1, s2; + s1 = reader1->getSpecs(); + s2 = reader2->getSpecs(); + if(memcmp(&s1, &s2, sizeof(AUD_Specs))) + AUD_THROW(AUD_ERROR_SPECS, specs_error); } AUD_SuperposeReader::~AUD_SuperposeReader() { - delete m_reader1; - delete m_reader2; } bool AUD_SuperposeReader::isSeekable() const diff --git a/intern/audaspace/FX/AUD_SuperposeReader.h b/intern/audaspace/FX/AUD_SuperposeReader.h index b256aade7ba..26e4b138dfa 100644 --- a/intern/audaspace/FX/AUD_SuperposeReader.h +++ b/intern/audaspace/FX/AUD_SuperposeReader.h @@ -34,6 +34,7 @@ #include "AUD_IReader.h" #include "AUD_Buffer.h" +#include "AUD_Reference.h" /** * This reader plays two readers with the same specs sequently. @@ -44,12 +45,12 @@ private: /** * The first reader. */ - AUD_IReader* m_reader1; + AUD_Reference m_reader1; /** * The second reader. */ - AUD_IReader* m_reader2; + AUD_Reference m_reader2; /** * The playback buffer for the intersecting part. @@ -67,7 +68,7 @@ public: * \param reader2 The second reader to read from. * \exception AUD_Exception Thrown if the specs from the readers differ. */ - AUD_SuperposeReader(AUD_IReader* reader1, AUD_IReader* reader2); + AUD_SuperposeReader(AUD_Reference reader1, AUD_Reference reader2); /** * Destroys the reader. diff --git a/intern/audaspace/FX/AUD_VolumeFactory.cpp b/intern/audaspace/FX/AUD_VolumeFactory.cpp index 166fbf61512..1249c4ab9bd 100644 --- a/intern/audaspace/FX/AUD_VolumeFactory.cpp +++ b/intern/audaspace/FX/AUD_VolumeFactory.cpp @@ -32,7 +32,7 @@ #include "AUD_VolumeFactory.h" #include "AUD_IIRFilterReader.h" -AUD_VolumeFactory::AUD_VolumeFactory(AUD_IFactory* factory, float volume) : +AUD_VolumeFactory::AUD_VolumeFactory(AUD_Reference factory, float volume) : AUD_EffectFactory(factory), m_volume(volume) { @@ -43,7 +43,7 @@ float AUD_VolumeFactory::getVolume() const return m_volume; } -AUD_IReader* AUD_VolumeFactory::createReader() const +AUD_Reference AUD_VolumeFactory::createReader() const { std::vector a, b; a.push_back(1); diff --git a/intern/audaspace/FX/AUD_VolumeFactory.h b/intern/audaspace/FX/AUD_VolumeFactory.h index fa40ca11082..3cb8bc1da17 100644 --- a/intern/audaspace/FX/AUD_VolumeFactory.h +++ b/intern/audaspace/FX/AUD_VolumeFactory.h @@ -57,14 +57,14 @@ public: * \param factory The input factory. * \param volume The desired volume. */ - AUD_VolumeFactory(AUD_IFactory* factory, float volume); + AUD_VolumeFactory(AUD_Reference factory, float volume); /** * Returns the volume. */ float getVolume() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_VOLUMEFACTORY diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp index b9e30bbf62a..a3b0bff316e 100644 --- a/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp +++ b/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp @@ -52,7 +52,7 @@ struct AUD_OpenALHandle : AUD_Handle bool isBuffered; /// The reader source. - AUD_IReader* reader; + AUD_Reference reader; /// Whether to keep the source if end of it is reached. bool keep; @@ -382,7 +382,6 @@ AUD_OpenALDevice::~AUD_OpenALDevice() alDeleteSources(1, &sound->source); if(!sound->isBuffered) { - delete sound->reader; alDeleteBuffers(AUD_OPENAL_CYCLE_BUFFERS, sound->buffers); } delete sound; @@ -396,7 +395,6 @@ AUD_OpenALDevice::~AUD_OpenALDevice() alDeleteSources(1, &sound->source); if(!sound->isBuffered) { - delete sound->reader; alDeleteBuffers(AUD_OPENAL_CYCLE_BUFFERS, sound->buffers); } delete sound; @@ -539,7 +537,7 @@ static const char* queue_error = "AUD_OpenALDevice: Buffer couldn't be " static const char* bufferdata_error = "AUD_OpenALDevice: Buffer couldn't be " "filled with data."; -AUD_Handle* AUD_OpenALDevice::play(AUD_IReader* reader, bool keep) +AUD_Handle* AUD_OpenALDevice::play(AUD_Reference reader, bool keep) { AUD_OpenALHandle* sound = NULL; @@ -568,7 +566,6 @@ AUD_Handle* AUD_OpenALDevice::play(AUD_IReader* reader, bool keep) if(!valid) { delete sound; - delete reader; return NULL; } @@ -624,7 +621,6 @@ AUD_Handle* AUD_OpenALDevice::play(AUD_IReader* reader, bool keep) catch(AUD_Exception&) { delete sound; - delete reader; alcProcessContext(m_context); unlock(); throw; @@ -642,8 +638,9 @@ AUD_Handle* AUD_OpenALDevice::play(AUD_IReader* reader, bool keep) return sound; } -AUD_Handle* AUD_OpenALDevice::play(AUD_IFactory* factory, bool keep) +AUD_Handle* AUD_OpenALDevice::play(AUD_Reference factory, bool keep) { + /* AUD_XXX disabled AUD_OpenALHandle* sound = NULL; lock(); @@ -713,7 +710,7 @@ AUD_Handle* AUD_OpenALDevice::play(AUD_IFactory* factory, bool keep) unlock(); if(sound) - return sound; + return sound;*/ return play(factory->createReader(), keep); } @@ -785,7 +782,6 @@ bool AUD_OpenALDevice::stop(AUD_Handle* handle) alDeleteSources(1, &sound->source); if(!sound->isBuffered) { - delete sound->reader; alDeleteBuffers(AUD_OPENAL_CYCLE_BUFFERS, sound->buffers); } delete *i; @@ -805,7 +801,6 @@ bool AUD_OpenALDevice::stop(AUD_Handle* handle) alDeleteSources(1, &sound->source); if(!sound->isBuffered) { - delete sound->reader; alDeleteBuffers(AUD_OPENAL_CYCLE_BUFFERS, sound->buffers); } delete *i; @@ -1109,7 +1104,6 @@ bool AUD_OpenALDevice::bufferFactory(void *value) if(!getFormat(format, specs.specs)) { - delete reader; return false; } @@ -1147,7 +1141,6 @@ bool AUD_OpenALDevice::bufferFactory(void *value) catch(AUD_Exception&) { delete bf; - delete reader; alcProcessContext(m_context); unlock(); return false; diff --git a/intern/audaspace/OpenAL/AUD_OpenALDevice.h b/intern/audaspace/OpenAL/AUD_OpenALDevice.h index 3bbbe85d7e6..3bca47f1805 100644 --- a/intern/audaspace/OpenAL/AUD_OpenALDevice.h +++ b/intern/audaspace/OpenAL/AUD_OpenALDevice.h @@ -147,8 +147,8 @@ public: virtual ~AUD_OpenALDevice(); virtual AUD_DeviceSpecs getSpecs() const; - virtual AUD_Handle* play(AUD_IReader* reader, bool keep = false); - virtual AUD_Handle* play(AUD_IFactory* factory, bool keep = false); + virtual AUD_Handle* play(AUD_Reference reader, bool keep = false); + virtual AUD_Handle* play(AUD_Reference factory, bool keep = false); virtual bool pause(AUD_Handle* handle); virtual bool resume(AUD_Handle* handle); virtual bool stop(AUD_Handle* handle); diff --git a/intern/audaspace/Python/AUD_PyAPI.cpp b/intern/audaspace/Python/AUD_PyAPI.cpp index 22376a2fcd1..53dfedee5eb 100644 --- a/intern/audaspace/Python/AUD_PyAPI.cpp +++ b/intern/audaspace/Python/AUD_PyAPI.cpp @@ -91,7 +91,7 @@ static void Factory_dealloc(Factory* self) { if(self->factory) - delete self->factory; + delete reinterpret_cast*>(self->factory); Py_XDECREF(self->child_list); Py_TYPE(self)->tp_free((PyObject*)self); } @@ -115,7 +115,7 @@ Factory_new(PyTypeObject *type, PyObject *args, PyObject *kwds) try { - self->factory = new AUD_FileFactory(filename); + self->factory = new AUD_Reference(new AUD_FileFactory(filename)); } catch(AUD_Exception& e) { @@ -155,7 +155,7 @@ Factory_sine(PyTypeObject* type, PyObject* args) { try { - self->factory = new AUD_SinusFactory(frequency, (AUD_SampleRate)rate); + self->factory = new AUD_Reference(new AUD_SinusFactory(frequency, (AUD_SampleRate)rate)); } catch(AUD_Exception& e) { @@ -194,7 +194,7 @@ Factory_file(PyTypeObject* type, PyObject* args) { try { - self->factory = new AUD_FileFactory(filename); + self->factory = new AUD_Reference(new AUD_FileFactory(filename)); } catch(AUD_Exception& e) { @@ -237,7 +237,7 @@ Factory_lowpass(Factory* self, PyObject* args) try { - parent->factory = new AUD_LowpassFactory(self->factory, frequency, Q); + parent->factory = new AUD_Reference(new AUD_LowpassFactory(*reinterpret_cast*>(self->factory), frequency, Q)); } catch(AUD_Exception& e) { @@ -278,7 +278,7 @@ Factory_delay(Factory* self, PyObject* args) try { - parent->factory = new AUD_DelayFactory(self->factory, delay); + parent->factory = new AUD_Reference(new AUD_DelayFactory(*reinterpret_cast*>(self->factory), delay)); } catch(AUD_Exception& e) { @@ -322,7 +322,7 @@ Factory_join(Factory* self, PyObject* object) try { - parent->factory = new AUD_DoubleFactory(self->factory, child->factory); + parent->factory = new AUD_Reference(new AUD_DoubleFactory(*reinterpret_cast*>(self->factory), *reinterpret_cast*>(child->factory))); } catch(AUD_Exception& e) { @@ -365,7 +365,7 @@ Factory_highpass(Factory* self, PyObject* args) try { - parent->factory = new AUD_HighpassFactory(self->factory, frequency, Q); + parent->factory = new AUD_Reference(new AUD_HighpassFactory(*reinterpret_cast*>(self->factory), frequency, Q)); } catch(AUD_Exception& e) { @@ -406,7 +406,7 @@ Factory_limit(Factory* self, PyObject* args) try { - parent->factory = new AUD_LimiterFactory(self->factory, start, end); + parent->factory = new AUD_Reference(new AUD_LimiterFactory(*reinterpret_cast*>(self->factory), start, end)); } catch(AUD_Exception& e) { @@ -450,7 +450,7 @@ Factory_pitch(Factory* self, PyObject* args) try { - parent->factory = new AUD_PitchFactory(self->factory, factor); + parent->factory = new AUD_Reference(new AUD_PitchFactory(*reinterpret_cast*>(self->factory), factor)); } catch(AUD_Exception& e) { @@ -492,7 +492,7 @@ Factory_volume(Factory* self, PyObject* args) try { - parent->factory = new AUD_VolumeFactory(self->factory, volume); + parent->factory = new AUD_Reference(new AUD_VolumeFactory(*reinterpret_cast*>(self->factory), volume)); } catch(AUD_Exception& e) { @@ -535,7 +535,7 @@ Factory_fadein(Factory* self, PyObject* args) try { - parent->factory = new AUD_FaderFactory(self->factory, AUD_FADE_IN, start, length); + parent->factory = new AUD_Reference(new AUD_FaderFactory(*reinterpret_cast*>(self->factory), AUD_FADE_IN, start, length)); } catch(AUD_Exception& e) { @@ -579,7 +579,7 @@ Factory_fadeout(Factory* self, PyObject* args) try { - parent->factory = new AUD_FaderFactory(self->factory, AUD_FADE_OUT, start, length); + parent->factory = new AUD_Reference(new AUD_FaderFactory(*reinterpret_cast*>(self->factory), AUD_FADE_OUT, start, length)); } catch(AUD_Exception& e) { @@ -621,7 +621,7 @@ Factory_loop(Factory* self, PyObject* args) try { - parent->factory = new AUD_LoopFactory(self->factory, loop); + parent->factory = new AUD_Reference(new AUD_LoopFactory(*reinterpret_cast*>(self->factory), loop)); } catch(AUD_Exception& e) { @@ -664,7 +664,7 @@ Factory_mix(Factory* self, PyObject* object) try { - parent->factory = new AUD_SuperposeFactory(self->factory, child->factory); + parent->factory = new AUD_Reference(new AUD_SuperposeFactory(*reinterpret_cast*>(self->factory), *reinterpret_cast*>(child->factory))); } catch(AUD_Exception& e) { @@ -697,7 +697,7 @@ Factory_pingpong(Factory* self) try { - parent->factory = new AUD_PingPongFactory(self->factory); + parent->factory = new AUD_Reference(new AUD_PingPongFactory(*reinterpret_cast*>(self->factory))); } catch(AUD_Exception& e) { @@ -736,7 +736,7 @@ Factory_reverse(Factory* self) try { - parent->factory = new AUD_ReverseFactory(self->factory); + parent->factory = new AUD_Reference(new AUD_ReverseFactory(*reinterpret_cast*>(self->factory))); } catch(AUD_Exception& e) { @@ -771,7 +771,7 @@ Factory_buffer(Factory* self) { try { - parent->factory = new AUD_StreamBufferFactory(self->factory); + parent->factory = new AUD_Reference(new AUD_StreamBufferFactory(*reinterpret_cast*>(self->factory))); } catch(AUD_Exception& e) { @@ -813,7 +813,7 @@ Factory_square(Factory* self, PyObject* args) try { - parent->factory = new AUD_SquareFactory(self->factory, threshold); + parent->factory = new AUD_Reference(new AUD_SquareFactory(*reinterpret_cast*>(self->factory), threshold)); } catch(AUD_Exception& e) { @@ -910,7 +910,7 @@ Factory_filter(Factory* self, PyObject* args) try { - parent->factory = new AUD_IIRFilterFactory(self->factory, b, a); + parent->factory = new AUD_Reference(new AUD_IIRFilterFactory(*reinterpret_cast*>(self->factory), b, a)); } catch(AUD_Exception& e) { @@ -1050,7 +1050,7 @@ Handle_pause(Handle *self) try { - return PyBool_FromLong((long)device->device->pause(self->handle)); + return PyBool_FromLong((long)(*reinterpret_cast*>(device->device))->pause(self->handle)); } catch(AUD_Exception& e) { @@ -1072,7 +1072,7 @@ Handle_resume(Handle *self) try { - return PyBool_FromLong((long)device->device->resume(self->handle)); + return PyBool_FromLong((long)(*reinterpret_cast*>(device->device))->resume(self->handle)); } catch(AUD_Exception& e) { @@ -1095,7 +1095,7 @@ Handle_stop(Handle *self) try { - return PyBool_FromLong((long)device->device->stop(self->handle)); + return PyBool_FromLong((long)(*reinterpret_cast*>(device->device))->stop(self->handle)); } catch(AUD_Exception& e) { @@ -1127,7 +1127,7 @@ Handle_get_position(Handle *self, void* nothing) try { - return Py_BuildValue("f", device->device->getPosition(self->handle)); + return Py_BuildValue("f", (*reinterpret_cast*>(device->device))->getPosition(self->handle)); } catch(AUD_Exception& e) { @@ -1148,7 +1148,7 @@ Handle_set_position(Handle *self, PyObject* args, void* nothing) try { - if(device->device->seek(self->handle, position)) + if((*reinterpret_cast*>(device->device))->seek(self->handle, position)) return 0; PyErr_SetString(AUDError, "Couldn't seek the sound!"); } @@ -1176,7 +1176,7 @@ Handle_get_keep(Handle *self, void* nothing) try { - return PyBool_FromLong((long)device->device->getKeep(self->handle)); + return PyBool_FromLong((long)(*reinterpret_cast*>(device->device))->getKeep(self->handle)); } catch(AUD_Exception& e) { @@ -1199,7 +1199,7 @@ Handle_set_keep(Handle *self, PyObject* args, void* nothing) try { - if(device->device->setKeep(self->handle, keep)) + if((*reinterpret_cast*>(device->device))->setKeep(self->handle, keep)) return 0; PyErr_SetString(AUDError, "Couldn't set keep of the sound!"); } @@ -1221,7 +1221,7 @@ Handle_get_status(Handle *self, void* nothing) try { - return PyBool_FromLong((long)device->device->getStatus(self->handle)); + return PyBool_FromLong((long)(*reinterpret_cast*>(device->device))->getStatus(self->handle)); } catch(AUD_Exception& e) { @@ -1240,7 +1240,7 @@ Handle_get_volume(Handle *self, void* nothing) try { - return Py_BuildValue("f", device->device->getVolume(self->handle)); + return Py_BuildValue("f", (*reinterpret_cast*>(device->device))->getVolume(self->handle)); } catch(AUD_Exception& e) { @@ -1261,7 +1261,7 @@ Handle_set_volume(Handle *self, PyObject* args, void* nothing) try { - if(device->device->setVolume(self->handle, volume)) + if((*reinterpret_cast*>(device->device))->setVolume(self->handle, volume)) return 0; PyErr_SetString(AUDError, "Couldn't set the sound volume!"); } @@ -1283,7 +1283,7 @@ Handle_get_pitch(Handle *self, void* nothing) try { - return Py_BuildValue("f", device->device->getPitch(self->handle)); + return Py_BuildValue("f", (*reinterpret_cast*>(device->device))->getPitch(self->handle)); } catch(AUD_Exception& e) { @@ -1304,7 +1304,7 @@ Handle_set_pitch(Handle *self, PyObject* args, void* nothing) try { - if(device->device->setPitch(self->handle, pitch)) + if((*reinterpret_cast*>(device->device))->setPitch(self->handle, pitch)) return 0; PyErr_SetString(AUDError, "Couldn't set the sound pitch!"); } @@ -1326,7 +1326,7 @@ Handle_get_loop_count(Handle *self, void* nothing) try { - return Py_BuildValue("i", device->device->getLoopCount(self->handle)); + return Py_BuildValue("i", (*reinterpret_cast*>(device->device))->getLoopCount(self->handle)); } catch(AUD_Exception& e) { @@ -1347,7 +1347,7 @@ Handle_set_loop_count(Handle *self, PyObject* args, void* nothing) try { - if(device->device->setLoopCount(self->handle, loops)) + if((*reinterpret_cast*>(device->device))->setLoopCount(self->handle, loops)) return 0; PyErr_SetString(AUDError, "Couldn't set the loop count!"); } @@ -1369,7 +1369,7 @@ Handle_get_location(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { AUD_Vector3 v = device->getSourceLocation(self->handle); @@ -1400,7 +1400,7 @@ Handle_set_location(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { AUD_Vector3 location(x, y, z); @@ -1429,7 +1429,7 @@ Handle_get_velocity(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { AUD_Vector3 v = device->getSourceVelocity(self->handle); @@ -1460,7 +1460,7 @@ Handle_set_velocity(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { AUD_Vector3 velocity(x, y, z); @@ -1489,7 +1489,7 @@ Handle_get_orientation(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { AUD_Quaternion o = device->getSourceOrientation(self->handle); @@ -1520,7 +1520,7 @@ Handle_set_orientation(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { AUD_Quaternion orientation(w, x, y, z); @@ -1549,7 +1549,7 @@ Handle_get_relative(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return PyBool_FromLong((long)device->isRelative(self->handle)); @@ -1581,7 +1581,7 @@ Handle_set_relative(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setRelative(self->handle, relative)) @@ -1610,7 +1610,7 @@ Handle_get_volume_minimum(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getVolumeMinimum(self->handle)); @@ -1640,7 +1640,7 @@ Handle_set_volume_minimum(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setVolumeMinimum(self->handle, volume)) @@ -1669,7 +1669,7 @@ Handle_get_volume_maximum(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getVolumeMaximum(self->handle)); @@ -1699,7 +1699,7 @@ Handle_set_volume_maximum(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setVolumeMaximum(self->handle, volume)) @@ -1729,7 +1729,7 @@ Handle_get_distance_reference(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getDistanceReference(self->handle)); @@ -1759,7 +1759,7 @@ Handle_set_distance_reference(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setDistanceReference(self->handle, distance)) @@ -1789,7 +1789,7 @@ Handle_get_distance_maximum(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getDistanceMaximum(self->handle)); @@ -1819,7 +1819,7 @@ Handle_set_distance_maximum(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setDistanceMaximum(self->handle, distance)) @@ -1849,7 +1849,7 @@ Handle_get_attenuation(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getAttenuation(self->handle)); @@ -1879,7 +1879,7 @@ Handle_set_attenuation(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setAttenuation(self->handle, factor)) @@ -1914,7 +1914,7 @@ Handle_get_cone_angle_inner(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getConeAngleInner(self->handle)); @@ -1944,7 +1944,7 @@ Handle_set_cone_angle_inner(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setConeAngleInner(self->handle, angle)) @@ -1973,7 +1973,7 @@ Handle_get_cone_angle_outer(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getConeAngleOuter(self->handle)); @@ -2003,7 +2003,7 @@ Handle_set_cone_angle_outer(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setConeAngleOuter(self->handle, angle)) @@ -2032,7 +2032,7 @@ Handle_get_cone_volume_outer(Handle *self, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { return Py_BuildValue("f", device->getConeVolumeOuter(self->handle)); @@ -2062,7 +2062,7 @@ Handle_set_cone_volume_outer(Handle *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(dev->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(dev->device)->get()); if(device) { if(device->setConeVolumeOuter(self->handle, volume)) @@ -2172,7 +2172,7 @@ static void Device_dealloc(Device* self) { if(self->device) - delete self->device; + delete reinterpret_cast*>(self->device); Py_TYPE(self)->tp_free((PyObject*)self); } @@ -2215,21 +2215,21 @@ Device_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { case AUD_DEVICE_NULL: (void)specs; /* quiet warning when others disabled */ - self->device = new AUD_NULLDevice(); + self->device = new AUD_Reference(new AUD_NULLDevice()); break; case AUD_DEVICE_OPENAL: #ifdef WITH_OPENAL - self->device = new AUD_OpenALDevice(specs, buffersize); + self->device = new AUD_Reference(new AUD_OpenALDevice(specs, buffersize)); #endif break; case AUD_DEVICE_SDL: #ifdef WITH_SDL - self->device = new AUD_SDLDevice(specs, buffersize); + self->device = new AUD_Reference(new AUD_SDLDevice(specs, buffersize)); #endif break; case AUD_DEVICE_JACK: #ifdef WITH_JACK - self->device = new AUD_JackDevice(name, specs, buffersize); + self->device = new AUD_Reference(new AUD_JackDevice(name, specs, buffersize)); #endif break; case AUD_DEVICE_READ: @@ -2307,7 +2307,7 @@ Device_play(Device *self, PyObject *args, PyObject *kwds) try { - handle->handle = self->device->play(sound->factory, keep); + handle->handle = (*reinterpret_cast*>(self->device))->play(*reinterpret_cast*>(sound->factory), keep); } catch(AUD_Exception& e) { @@ -2336,7 +2336,7 @@ Device_lock(Device *self) { try { - self->device->lock(); + (*reinterpret_cast*>(self->device))->lock(); Py_RETURN_NONE; } catch(AUD_Exception& e) @@ -2356,7 +2356,7 @@ Device_unlock(Device *self) { try { - self->device->unlock(); + (*reinterpret_cast*>(self->device))->unlock(); Py_RETURN_NONE; } catch(AUD_Exception& e) @@ -2387,7 +2387,7 @@ Device_get_rate(Device *self, void* nothing) { try { - AUD_DeviceSpecs specs = self->device->getSpecs(); + AUD_DeviceSpecs specs = (*reinterpret_cast*>(self->device))->getSpecs(); return Py_BuildValue("i", specs.rate); } catch(AUD_Exception& e) @@ -2405,7 +2405,7 @@ Device_get_format(Device *self, void* nothing) { try { - AUD_DeviceSpecs specs = self->device->getSpecs(); + AUD_DeviceSpecs specs = (*reinterpret_cast*>(self->device))->getSpecs(); return Py_BuildValue("i", specs.format); } catch(AUD_Exception& e) @@ -2423,7 +2423,7 @@ Device_get_channels(Device *self, void* nothing) { try { - AUD_DeviceSpecs specs = self->device->getSpecs(); + AUD_DeviceSpecs specs = (*reinterpret_cast*>(self->device))->getSpecs(); return Py_BuildValue("i", specs.channels); } catch(AUD_Exception& e) @@ -2441,7 +2441,7 @@ Device_get_volume(Device *self, void* nothing) { try { - return Py_BuildValue("f", self->device->getVolume()); + return Py_BuildValue("f", (*reinterpret_cast*>(self->device))->getVolume()); } catch(AUD_Exception& e) { @@ -2460,7 +2460,7 @@ Device_set_volume(Device *self, PyObject* args, void* nothing) try { - self->device->setVolume(volume); + (*reinterpret_cast*>(self->device))->setVolume(volume); return 0; } catch(AUD_Exception& e) @@ -2478,7 +2478,7 @@ Device_get_listener_location(Device *self, void* nothing) { try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { AUD_Vector3 v = device->getListenerLocation(); @@ -2507,7 +2507,7 @@ Device_set_listener_location(Device *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { AUD_Vector3 location(x, y, z); @@ -2533,7 +2533,7 @@ Device_get_listener_velocity(Device *self, void* nothing) { try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { AUD_Vector3 v = device->getListenerVelocity(); @@ -2562,7 +2562,7 @@ Device_set_listener_velocity(Device *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { AUD_Vector3 velocity(x, y, z); @@ -2588,7 +2588,7 @@ Device_get_listener_orientation(Device *self, void* nothing) { try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { AUD_Quaternion o = device->getListenerOrientation(); @@ -2617,7 +2617,7 @@ Device_set_listener_orientation(Device *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { AUD_Quaternion orientation(w, x, y, z); @@ -2644,7 +2644,7 @@ Device_get_speed_of_sound(Device *self, void* nothing) { try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { return Py_BuildValue("f", device->getSpeedOfSound()); @@ -2672,7 +2672,7 @@ Device_set_speed_of_sound(Device *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { device->setSpeedOfSound(speed); @@ -2700,7 +2700,7 @@ Device_get_doppler_factor(Device *self, void* nothing) { try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { return Py_BuildValue("f", device->getDopplerFactor()); @@ -2728,7 +2728,7 @@ Device_set_doppler_factor(Device *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { device->setDopplerFactor(factor); @@ -2754,7 +2754,7 @@ Device_get_distance_model(Device *self, void* nothing) { try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { return Py_BuildValue("i", int(device->getDistanceModel())); @@ -2782,7 +2782,7 @@ Device_set_distance_model(Device *self, PyObject* args, void* nothing) try { - AUD_I3DDevice* device = dynamic_cast(self->device); + AUD_I3DDevice* device = dynamic_cast(reinterpret_cast*>(self->device)->get()); if(device) { device->setDistanceModel(AUD_DistanceModel(model)); diff --git a/intern/audaspace/Python/AUD_PyAPI.h b/intern/audaspace/Python/AUD_PyAPI.h index 6e217b07213..d1a70ce892d 100644 --- a/intern/audaspace/Python/AUD_PyAPI.h +++ b/intern/audaspace/Python/AUD_PyAPI.h @@ -36,17 +36,20 @@ #ifdef __cplusplus extern "C" { -#include "AUD_IDevice.h" +struct AUD_Handle; #else typedef void AUD_IFactory; typedef void AUD_IDevice; typedef void AUD_Handle; #endif +typedef void AUD_Reference_AUD_IFactory; +typedef void AUD_Reference_AUD_IDevice; + typedef struct { PyObject_HEAD PyObject* child_list; - AUD_IFactory* factory; + AUD_Reference_AUD_IFactory* factory; } Factory; typedef struct { @@ -57,7 +60,7 @@ typedef struct { typedef struct { PyObject_HEAD - AUD_IDevice* device; + AUD_Reference_AUD_IDevice* device; } Device; PyMODINIT_FUNC diff --git a/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp b/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp index 17cf09efc1d..ca9c71e73b8 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp +++ b/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp @@ -32,15 +32,15 @@ #include "AUD_SRCResampleFactory.h" #include "AUD_SRCResampleReader.h" -AUD_SRCResampleFactory::AUD_SRCResampleFactory(AUD_IFactory* factory, +AUD_SRCResampleFactory::AUD_SRCResampleFactory(AUD_Reference factory, AUD_DeviceSpecs specs) : AUD_ResampleFactory(factory, specs) { } -AUD_IReader* AUD_SRCResampleFactory::createReader() const +AUD_Reference AUD_SRCResampleFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); if(reader->getSpecs().rate != m_specs.rate) reader = new AUD_SRCResampleReader(reader, m_specs.specs); diff --git a/intern/audaspace/SRC/AUD_SRCResampleFactory.h b/intern/audaspace/SRC/AUD_SRCResampleFactory.h index 716def960fd..5d21584b4dc 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleFactory.h +++ b/intern/audaspace/SRC/AUD_SRCResampleFactory.h @@ -46,9 +46,9 @@ private: AUD_SRCResampleFactory& operator=(const AUD_SRCResampleFactory&); public: - AUD_SRCResampleFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs); + AUD_SRCResampleFactory(AUD_Reference factory, AUD_DeviceSpecs specs); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SRCRESAMPLEFACTORY diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp index 1026514a9b8..e9a94418b60 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp +++ b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp @@ -43,7 +43,7 @@ static long src_callback(void *cb_data, float **data) static const char* state_error = "AUD_SRCResampleReader: SRC State couldn't be " "created."; -AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_IReader* reader, +AUD_SRCResampleReader::AUD_SRCResampleReader(AUD_Reference reader, AUD_Specs specs) : AUD_EffectReader(reader), m_sspecs(reader->getSpecs()), diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.h b/intern/audaspace/SRC/AUD_SRCResampleReader.h index 27019c0ed9f..21193661911 100644 --- a/intern/audaspace/SRC/AUD_SRCResampleReader.h +++ b/intern/audaspace/SRC/AUD_SRCResampleReader.h @@ -85,7 +85,7 @@ public: * \exception AUD_Exception Thrown if the source specification cannot be * resampled to the target specification. */ - AUD_SRCResampleReader(AUD_IReader* reader, AUD_Specs specs); + AUD_SRCResampleReader(AUD_Reference reader, AUD_Specs specs); /** * Destroys the reader. diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp index 38de3e8867a..4e1eedd29ee 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp @@ -46,13 +46,13 @@ AUD_FFMPEGFactory::AUD_FFMPEGFactory(std::string filename) : AUD_FFMPEGFactory::AUD_FFMPEGFactory(const data_t* buffer, int size) : m_buffer(new AUD_Buffer(size)) { - memcpy(m_buffer.get()->getBuffer(), buffer, size); + memcpy(m_buffer->getBuffer(), buffer, size); } -AUD_IReader* AUD_FFMPEGFactory::createReader() const +AUD_Reference AUD_FFMPEGFactory::createReader() const { - if(m_buffer.get()) - return new AUD_FFMPEGReader(m_buffer); - else + if(m_buffer.isNull()) return new AUD_FFMPEGReader(m_filename); + else + return new AUD_FFMPEGReader(m_buffer); } diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h b/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h index 12687402fb6..8033836e80b 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.h @@ -74,7 +74,7 @@ public: */ AUD_FFMPEGFactory(const data_t* buffer, int size); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_FFMPEGFACTORY diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp index 4597432e7d1..ed6ca5d142f 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp @@ -255,12 +255,12 @@ int AUD_FFMPEGReader::read_packet(void* opaque, uint8_t* buf, int buf_size) { AUD_FFMPEGReader* reader = reinterpret_cast(opaque); - int size = AUD_MIN(buf_size, reader->m_membuffer.get()->getSize() - reader->m_membufferpos); + int size = AUD_MIN(buf_size, reader->m_membuffer->getSize() - reader->m_membufferpos); if(size < 0) return -1; - memcpy(buf, ((data_t*)reader->m_membuffer.get()->getBuffer()) + reader->m_membufferpos, size); + memcpy(buf, ((data_t*)reader->m_membuffer->getBuffer()) + reader->m_membufferpos, size); reader->m_membufferpos += size; return size; @@ -276,10 +276,10 @@ int64_t AUD_FFMPEGReader::seek_packet(void* opaque, int64_t offset, int whence) reader->m_membufferpos = 0; break; case SEEK_END: - reader->m_membufferpos = reader->m_membuffer.get()->getSize(); + reader->m_membufferpos = reader->m_membuffer->getSize(); break; case AVSEEK_SIZE: - return reader->m_membuffer.get()->getSize(); + return reader->m_membuffer->getSize(); } return (reader->m_membufferpos += offset); diff --git a/intern/audaspace/intern/AUD_BufferReader.cpp b/intern/audaspace/intern/AUD_BufferReader.cpp index 78111ba104c..0ac967b29b0 100644 --- a/intern/audaspace/intern/AUD_BufferReader.cpp +++ b/intern/audaspace/intern/AUD_BufferReader.cpp @@ -51,7 +51,7 @@ void AUD_BufferReader::seek(int position) int AUD_BufferReader::getLength() const { - return m_buffer.get()->getSize() / AUD_SAMPLE_SIZE(m_specs); + return m_buffer->getSize() / AUD_SAMPLE_SIZE(m_specs); } int AUD_BufferReader::getPosition() const @@ -68,11 +68,11 @@ void AUD_BufferReader::read(int & length, sample_t* & buffer) { int sample_size = AUD_SAMPLE_SIZE(m_specs); - buffer = m_buffer.get()->getBuffer() + m_position * m_specs.channels; + buffer = m_buffer->getBuffer() + m_position * m_specs.channels; // in case the end of the buffer is reached - if(m_buffer.get()->getSize() < (m_position + length) * sample_size) - length = m_buffer.get()->getSize() / sample_size - m_position; + if(m_buffer->getSize() < (m_position + length) * sample_size) + length = m_buffer->getSize() / sample_size - m_position; if(length < 0) length = 0; diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp index 0119bb105d8..3d78a5945df 100644 --- a/intern/audaspace/intern/AUD_C-API.cpp +++ b/intern/audaspace/intern/AUD_C-API.cpp @@ -37,9 +37,6 @@ #ifdef WITH_PYTHON #include "AUD_PyInit.h" #include "AUD_PyAPI.h" - -Device* g_device; -bool g_pyinitialized = false; #endif #include @@ -90,9 +87,10 @@ extern "C" { #include -typedef AUD_IFactory AUD_Sound; -typedef AUD_ReadDevice AUD_Device; +typedef AUD_Reference AUD_Sound; +typedef AUD_Reference AUD_Device; typedef AUD_Handle AUD_Channel; +typedef AUD_Reference AUD_SEntry; #define AUD_CAPI_IMPLEMENTATION #include "AUD_C-API.h" @@ -101,8 +99,8 @@ typedef AUD_Handle AUD_Channel; #define NULL 0 #endif -static AUD_IDevice* AUD_device = NULL; -static AUD_I3DDevice* AUD_3ddevice = NULL; +static AUD_Reference AUD_device; +static AUD_I3DDevice* AUD_3ddevice; void AUD_initOnce() { @@ -113,9 +111,9 @@ void AUD_initOnce() int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) { - AUD_IDevice* dev = NULL; + AUD_Reference dev = NULL; - if(AUD_device) + if(!AUD_device.isNull()) AUD_exit(); try @@ -145,18 +143,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) } AUD_device = dev; - AUD_3ddevice = dynamic_cast(AUD_device); - -#ifdef WITH_PYTHON - if(g_pyinitialized) - { - g_device = (Device*)Device_empty(); - if(g_device != NULL) - { - g_device->device = dev; - } - } -#endif + AUD_3ddevice = dynamic_cast(AUD_device.get()); return true; } @@ -168,16 +155,6 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize) void AUD_exit() { -#ifdef WITH_PYTHON - if(g_device) - { - Py_XDECREF(g_device); - g_device = NULL; - } - else -#endif - if(AUD_device) - delete AUD_device; AUD_device = NULL; AUD_3ddevice = NULL; } @@ -185,11 +162,16 @@ void AUD_exit() #ifdef WITH_PYTHON static PyObject* AUD_getCDevice(PyObject* self) { - if(g_device) + if(!AUD_device.isNull()) { - Py_INCREF(g_device); - return (PyObject*)g_device; + Device* device = (Device*)Device_empty(); + if(device != NULL) + { + device->device = new AUD_Reference(AUD_device); + return (PyObject*)device; + } } + Py_RETURN_NONE; } @@ -204,15 +186,6 @@ PyObject* AUD_initPython() PyObject* module = PyInit_aud(); PyModule_AddObject(module, "device", (PyObject *)PyCFunction_New(meth_getcdevice, NULL)); PyDict_SetItemString(PyImport_GetModuleDict(), "aud", module); - if(AUD_device) - { - g_device = (Device*)Device_empty(); - if(g_device != NULL) - { - g_device->device = AUD_device; - } - } - g_pyinitialized = true; return module; } @@ -220,13 +193,11 @@ PyObject* AUD_initPython() void AUD_lock() { - assert(AUD_device); AUD_device->lock(); } void AUD_unlock() { - assert(AUD_device); AUD_device->unlock(); } @@ -241,13 +212,12 @@ AUD_SoundInfo AUD_getInfo(AUD_Sound* sound) try { - AUD_IReader* reader = sound->createReader(); + AUD_Reference reader = (*sound)->createReader(); - if(reader) + if(!reader.isNull()) { info.specs = reader->getSpecs(); info.length = reader->getLength() / (float) info.specs.rate; - delete reader; } } catch(AUD_Exception&) @@ -260,13 +230,13 @@ AUD_SoundInfo AUD_getInfo(AUD_Sound* sound) AUD_Sound* AUD_load(const char* filename) { assert(filename); - return new AUD_FileFactory(filename); + return new AUD_Sound(new AUD_FileFactory(filename)); } AUD_Sound* AUD_loadBuffer(unsigned char* buffer, int size) { assert(buffer); - return new AUD_FileFactory(buffer, size); + return new AUD_Sound(new AUD_FileFactory(buffer, size)); } AUD_Sound* AUD_bufferSound(AUD_Sound* sound) @@ -275,7 +245,7 @@ AUD_Sound* AUD_bufferSound(AUD_Sound* sound) try { - return new AUD_StreamBufferFactory(sound); + return new AUD_Sound(new AUD_StreamBufferFactory(*sound)); } catch(AUD_Exception&) { @@ -289,7 +259,7 @@ AUD_Sound* AUD_delaySound(AUD_Sound* sound, float delay) try { - return new AUD_DelayFactory(sound, delay); + return new AUD_Sound(new AUD_DelayFactory(*sound, delay)); } catch(AUD_Exception&) { @@ -303,7 +273,7 @@ AUD_Sound* AUD_limitSound(AUD_Sound* sound, float start, float end) try { - return new AUD_LimiterFactory(sound, start, end); + return new AUD_Sound(new AUD_LimiterFactory(*sound, start, end)); } catch(AUD_Exception&) { @@ -317,7 +287,7 @@ AUD_Sound* AUD_pingpongSound(AUD_Sound* sound) try { - return new AUD_PingPongFactory(sound); + return new AUD_Sound(new AUD_PingPongFactory(*sound)); } catch(AUD_Exception&) { @@ -331,7 +301,7 @@ AUD_Sound* AUD_loopSound(AUD_Sound* sound) try { - return new AUD_LoopFactory(sound); + return new AUD_Sound(new AUD_LoopFactory(*sound)); } catch(AUD_Exception&) { @@ -360,7 +330,7 @@ AUD_Sound* AUD_rectifySound(AUD_Sound* sound) try { - return new AUD_RectifyFactory(sound); + return new AUD_Sound(new AUD_RectifyFactory(*sound)); } catch(AUD_Exception&) { @@ -376,11 +346,10 @@ void AUD_unload(AUD_Sound* sound) AUD_Channel* AUD_play(AUD_Sound* sound, int keep) { - assert(AUD_device); assert(sound); try { - return AUD_device->play(sound, keep); + return AUD_device->play(*sound, keep); } catch(AUD_Exception&) { @@ -390,51 +359,43 @@ AUD_Channel* AUD_play(AUD_Sound* sound, int keep) int AUD_pause(AUD_Channel* handle) { - assert(AUD_device); return AUD_device->pause(handle); } int AUD_resume(AUD_Channel* handle) { - assert(AUD_device); return AUD_device->resume(handle); } int AUD_stop(AUD_Channel* handle) { - if(AUD_device) + if(!AUD_device.isNull()) return AUD_device->stop(handle); return false; } int AUD_setKeep(AUD_Channel* handle, int keep) { - assert(AUD_device); return AUD_device->setKeep(handle, keep); } int AUD_seek(AUD_Channel* handle, float seekTo) { - assert(AUD_device); return AUD_device->seek(handle, seekTo); } float AUD_getPosition(AUD_Channel* handle) { - assert(AUD_device); return AUD_device->getPosition(handle); } AUD_Status AUD_getStatus(AUD_Channel* handle) { - assert(AUD_device); return AUD_device->getStatus(handle); } int AUD_setListenerLocation(const float* location) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_Vector3 v(location[0], location[1], location[2]); @@ -447,8 +408,6 @@ int AUD_setListenerLocation(const float* location) int AUD_setListenerVelocity(const float* velocity) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_Vector3 v(velocity[0], velocity[1], velocity[2]); @@ -461,8 +420,6 @@ int AUD_setListenerVelocity(const float* velocity) int AUD_setListenerOrientation(const float* orientation) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_Quaternion q(orientation[3], orientation[0], orientation[1], orientation[2]); @@ -475,8 +432,6 @@ int AUD_setListenerOrientation(const float* orientation) int AUD_setSpeedOfSound(float speed) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_3ddevice->setSpeedOfSound(speed); @@ -488,8 +443,6 @@ int AUD_setSpeedOfSound(float speed) int AUD_setDopplerFactor(float factor) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_3ddevice->setDopplerFactor(factor); @@ -501,8 +454,6 @@ int AUD_setDopplerFactor(float factor) int AUD_setDistanceModel(AUD_DistanceModel model) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_3ddevice->setDistanceModel(model); @@ -514,8 +465,6 @@ int AUD_setDistanceModel(AUD_DistanceModel model) int AUD_setSourceLocation(AUD_Channel* handle, const float* location) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_Vector3 v(location[0], location[1], location[2]); @@ -527,8 +476,6 @@ int AUD_setSourceLocation(AUD_Channel* handle, const float* location) int AUD_setSourceVelocity(AUD_Channel* handle, const float* velocity) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_Vector3 v(velocity[0], velocity[1], velocity[2]); @@ -540,8 +487,6 @@ int AUD_setSourceVelocity(AUD_Channel* handle, const float* velocity) int AUD_setSourceOrientation(AUD_Channel* handle, const float* orientation) { - assert(AUD_device); - if(AUD_3ddevice) { AUD_Quaternion q(orientation[3], orientation[0], orientation[1], orientation[2]); @@ -553,8 +498,6 @@ int AUD_setSourceOrientation(AUD_Channel* handle, const float* orientation) int AUD_setRelative(AUD_Channel* handle, int relative) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setRelative(handle, relative); @@ -565,8 +508,6 @@ int AUD_setRelative(AUD_Channel* handle, int relative) int AUD_setVolumeMaximum(AUD_Channel* handle, float volume) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setVolumeMaximum(handle, volume); @@ -577,8 +518,6 @@ int AUD_setVolumeMaximum(AUD_Channel* handle, float volume) int AUD_setVolumeMinimum(AUD_Channel* handle, float volume) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setVolumeMinimum(handle, volume); @@ -589,8 +528,6 @@ int AUD_setVolumeMinimum(AUD_Channel* handle, float volume) int AUD_setDistanceMaximum(AUD_Channel* handle, float distance) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setDistanceMaximum(handle, distance); @@ -601,8 +538,6 @@ int AUD_setDistanceMaximum(AUD_Channel* handle, float distance) int AUD_setDistanceReference(AUD_Channel* handle, float distance) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setDistanceReference(handle, distance); @@ -613,8 +548,6 @@ int AUD_setDistanceReference(AUD_Channel* handle, float distance) int AUD_setAttenuation(AUD_Channel* handle, float factor) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setAttenuation(handle, factor); @@ -625,8 +558,6 @@ int AUD_setAttenuation(AUD_Channel* handle, float factor) int AUD_setConeAngleOuter(AUD_Channel* handle, float angle) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setConeAngleOuter(handle, angle); @@ -637,8 +568,6 @@ int AUD_setConeAngleOuter(AUD_Channel* handle, float angle) int AUD_setConeAngleInner(AUD_Channel* handle, float angle) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setConeAngleInner(handle, angle); @@ -649,8 +578,6 @@ int AUD_setConeAngleInner(AUD_Channel* handle, float angle) int AUD_setConeVolumeOuter(AUD_Channel* handle, float volume) { - assert(AUD_device); - if(AUD_3ddevice) { return AUD_3ddevice->setConeVolumeOuter(handle, volume); @@ -663,8 +590,6 @@ int AUD_setSoundVolume(AUD_Channel* handle, float volume) { if(handle) { - assert(AUD_device); - try { return AUD_device->setVolume(handle, volume); @@ -678,8 +603,6 @@ int AUD_setSoundPitch(AUD_Channel* handle, float pitch) { if(handle) { - assert(AUD_device); - try { return AUD_device->setPitch(handle, pitch); @@ -693,7 +616,7 @@ AUD_Device* AUD_openReadDevice(AUD_DeviceSpecs specs) { try { - return new AUD_ReadDevice(specs); + return new AUD_Device(new AUD_ReadDevice(specs)); } catch(AUD_Exception&) { @@ -708,8 +631,8 @@ AUD_Channel* AUD_playDevice(AUD_Device* device, AUD_Sound* sound, float seek) try { - AUD_Channel* handle = device->play(sound); - device->seek(handle, seek); + AUD_Channel* handle = (*device)->play(*sound); + (*device)->seek(handle, seek); return handle; } catch(AUD_Exception&) @@ -724,7 +647,7 @@ int AUD_setDeviceVolume(AUD_Device* device, float volume) try { - device->setVolume(volume); + (*device)->setVolume(volume); return true; } catch(AUD_Exception&) {} @@ -741,7 +664,7 @@ int AUD_setDeviceSoundVolume(AUD_Device* device, AUD_Channel* handle, try { - return device->setVolume(handle, volume); + return (*device)->setVolume(handle, volume); } catch(AUD_Exception&) {} } @@ -755,7 +678,7 @@ int AUD_readDevice(AUD_Device* device, data_t* buffer, int length) try { - return device->read(buffer, length); + return (*device)->read(buffer, length); } catch(AUD_Exception&) { @@ -785,38 +708,34 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, AUD_DeviceSpecs specs; specs.channels = AUD_CHANNELS_MONO; specs.rate = (AUD_SampleRate)samplerate; - AUD_Sound* sound; + AUD_Reference sound; - AUD_FileFactory file(filename); + AUD_Reference file = new AUD_FileFactory(filename); - AUD_IReader* reader = file.createReader(); + AUD_Reference reader = file->createReader(); AUD_SampleRate rate = reader->getSpecs().rate; - delete reader; - AUD_ChannelMapperFactory mapper(&file, specs); - sound = &mapper; - AUD_LowpassFactory lowpass(sound, high); + sound = new AUD_ChannelMapperFactory(file, specs); + if(high < rate) - sound = &lowpass; - AUD_HighpassFactory highpass(sound, low); + sound = new AUD_LowpassFactory(sound, high); if(low > 0) - sound = &highpass; - AUD_EnvelopeFactory envelope(sound, attack, release, threshold, 0.1f); - AUD_LinearResampleFactory resampler(&envelope, specs); - sound = &resampler; - AUD_SquareFactory squaref(sound, sthreshold); + sound = new AUD_HighpassFactory(sound, low);; + + sound = new AUD_EnvelopeFactory(sound, attack, release, threshold, 0.1f); + sound = new AUD_LinearResampleFactory(sound, specs); + if(square) - sound = &squaref; - AUD_AccumulatorFactory accumulator(sound, additive); - AUD_SumFactory sum(sound); + sound = new AUD_SquareFactory(sound, sthreshold); + if(accumulate) - sound = &accumulator; + sound = new AUD_AccumulatorFactory(sound, additive); else if(additive) - sound = ∑ + sound = new AUD_SumFactory(sound); reader = sound->createReader(); - if(reader == NULL) + if(reader.isNull()) return NULL; int len; @@ -830,7 +749,6 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, memcpy(buffer.getBuffer() + position, readbuffer, len * sizeof(float)); position += len; } while(len != 0); - delete reader; float* result = (float*)malloc(position * sizeof(float)); memcpy(result, buffer.getBuffer(), position * sizeof(float)); @@ -840,21 +758,17 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high, static void pauseSound(AUD_Channel* handle) { - assert(AUD_device); - AUD_device->pause(handle); } AUD_Channel* AUD_pauseAfter(AUD_Channel* handle, float seconds) { - assert(AUD_device); - - AUD_SilenceFactory silence; - AUD_LimiterFactory limiter(&silence, 0, seconds); + AUD_Reference silence = new AUD_SilenceFactory; + AUD_Reference limiter = new AUD_LimiterFactory(silence, 0, seconds); try { - AUD_Channel* channel = AUD_device->play(&limiter); + AUD_Channel* channel = AUD_device->play(limiter); AUD_device->setStopCallback(channel, (stopCallback)pauseSound, handle); return channel; } @@ -874,39 +788,42 @@ AUD_Sound* AUD_createSequencer(int muted, void* data, AUD_volumeFunction volume) AUD_Specs specs; specs.channels = AUD_CHANNELS_STEREO; specs.rate = AUD_RATE_44100; - return new AUD_SequencerFactory(specs, muted, data, volume); + AUD_Reference* sequencer = new AUD_Reference(new AUD_SequencerFactory(specs, muted, data, volume)); + (*sequencer)->setThis(sequencer); + return reinterpret_cast(sequencer); } void AUD_destroySequencer(AUD_Sound* sequencer) { - delete ((AUD_SequencerFactory*)sequencer); + delete sequencer; } void AUD_setSequencerMuted(AUD_Sound* sequencer, int muted) { - ((AUD_SequencerFactory*)sequencer)->mute(muted); + ((AUD_SequencerFactory*)sequencer->get())->mute(muted); } -AUD_SequencerEntry* AUD_addSequencer(AUD_Sound** sequencer, AUD_Sound* sound, +AUD_Reference* AUD_addSequencer(AUD_Sound* sequencer, AUD_Sound** sound, float begin, float end, float skip, void* data) { - return ((AUD_SequencerFactory*)sequencer)->add((AUD_IFactory**) sound, begin, end, skip, data); + return new AUD_Reference(((AUD_SequencerFactory*)sequencer->get())->add(sound, begin, end, skip, data)); } -void AUD_removeSequencer(AUD_Sound* sequencer, AUD_SequencerEntry* entry) +void AUD_removeSequencer(AUD_Sound* sequencer, AUD_Reference* entry) { - ((AUD_SequencerFactory*)sequencer)->remove(entry); + ((AUD_SequencerFactory*)sequencer->get())->remove(*entry); + delete entry; } -void AUD_moveSequencer(AUD_Sound* sequencer, AUD_SequencerEntry* entry, +void AUD_moveSequencer(AUD_Sound* sequencer, AUD_Reference* entry, float begin, float end, float skip) { - ((AUD_SequencerFactory*)sequencer)->move(entry, begin, end, skip); + ((AUD_SequencerFactory*)sequencer->get())->move(*entry, begin, end, skip); } -void AUD_muteSequencer(AUD_Sound* sequencer, AUD_SequencerEntry* entry, char mute) +void AUD_muteSequencer(AUD_Sound* sequencer, AUD_Reference* entry, char mute) { - ((AUD_SequencerFactory*)sequencer)->mute(entry, mute); + ((AUD_SequencerFactory*)sequencer->get())->mute(*entry, mute); } int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length) @@ -918,9 +835,7 @@ int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length) specs.channels = AUD_CHANNELS_MONO; specs.format = AUD_FORMAT_INVALID; - AUD_ChannelMapperFactory mapper(sound, specs); - - AUD_IReader* reader = mapper.createReader(); + AUD_Reference reader = AUD_ChannelMapperFactory(*sound, specs).createReader(); int len = reader->getLength(); float samplejump = (float)len / (float)length; @@ -949,15 +864,13 @@ int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length) } } - delete reader; - return length; } void AUD_startPlayback() { #ifdef WITH_JACK - AUD_JackDevice* device = dynamic_cast(AUD_device); + AUD_JackDevice* device = dynamic_cast(AUD_device.get()); if(device) device->startPlayback(); #endif @@ -966,7 +879,7 @@ void AUD_startPlayback() void AUD_stopPlayback() { #ifdef WITH_JACK - AUD_JackDevice* device = dynamic_cast(AUD_device); + AUD_JackDevice* device = dynamic_cast(AUD_device.get()); if(device) device->stopPlayback(); #endif @@ -975,7 +888,7 @@ void AUD_stopPlayback() void AUD_seekSequencer(AUD_Channel* handle, float time) { #ifdef WITH_JACK - AUD_JackDevice* device = dynamic_cast(AUD_device); + AUD_JackDevice* device = dynamic_cast(AUD_device.get()); if(device) device->seekPlayback(time); else @@ -988,7 +901,7 @@ void AUD_seekSequencer(AUD_Channel* handle, float time) float AUD_getSequencerPosition(AUD_Channel* handle) { #ifdef WITH_JACK - AUD_JackDevice* device = dynamic_cast(AUD_device); + AUD_JackDevice* device = dynamic_cast(AUD_device.get()); if(device) return device->getPlaybackPosition(); else @@ -1001,7 +914,7 @@ float AUD_getSequencerPosition(AUD_Channel* handle) #ifdef WITH_JACK void AUD_setSyncCallback(AUD_syncFunction function, void* data) { - AUD_JackDevice* device = dynamic_cast(AUD_device); + AUD_JackDevice* device = dynamic_cast(AUD_device.get()); if(device) device->setSyncCallback(function, data); } @@ -1010,7 +923,7 @@ void AUD_setSyncCallback(AUD_syncFunction function, void* data) int AUD_doesPlayback() { #ifdef WITH_JACK - AUD_JackDevice* device = dynamic_cast(AUD_device); + AUD_JackDevice* device = dynamic_cast(AUD_device.get()); if(device) return device->doesPlayback(); #endif diff --git a/intern/audaspace/intern/AUD_C-API.h b/intern/audaspace/intern/AUD_C-API.h index b2242f09547..47dadd05555 100644 --- a/intern/audaspace/intern/AUD_C-API.h +++ b/intern/audaspace/intern/AUD_C-API.h @@ -55,7 +55,7 @@ typedef struct typedef void AUD_Sound; typedef void AUD_Channel; typedef void AUD_Device; - typedef void AUD_SequencerEntry; + typedef void AUD_SEntry; typedef float (*AUD_volumeFunction)(void*, void*, float); typedef void (*AUD_syncFunction)(void*, int, float); #endif @@ -465,15 +465,15 @@ extern void AUD_destroySequencer(AUD_Sound* sequencer); extern void AUD_setSequencerMuted(AUD_Sound* sequencer, int muted); -extern AUD_SequencerEntry* AUD_addSequencer(AUD_Sound** sequencer, AUD_Sound* sound, +extern AUD_SEntry* AUD_addSequencer(AUD_Sound* sequencer, AUD_Sound** sound, float begin, float end, float skip, void* data); -extern void AUD_removeSequencer(AUD_Sound* sequencer, AUD_SequencerEntry* entry); +extern void AUD_removeSequencer(AUD_Sound* sequencer, AUD_SEntry* entry); -extern void AUD_moveSequencer(AUD_Sound* sequencer, AUD_SequencerEntry* entry, +extern void AUD_moveSequencer(AUD_Sound* sequencer, AUD_SEntry* entry, float begin, float end, float skip); -extern void AUD_muteSequencer(AUD_Sound* sequencer, AUD_SequencerEntry* entry, +extern void AUD_muteSequencer(AUD_Sound* sequencer, AUD_SEntry* entry, char mute); extern int AUD_readSound(AUD_Sound* sound, sample_t* buffer, int length); diff --git a/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp b/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp index b474fbad444..ea5e9519729 100644 --- a/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp +++ b/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp @@ -34,7 +34,7 @@ #include -AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(AUD_IFactory* factory, +AUD_ChannelMapperFactory::AUD_ChannelMapperFactory(AUD_Reference factory, AUD_DeviceSpecs specs) : AUD_MixerFactory(factory, specs) { @@ -102,9 +102,9 @@ void AUD_ChannelMapperFactory::deleteMapping(int ic) } } -AUD_IReader* AUD_ChannelMapperFactory::createReader() const +AUD_Reference AUD_ChannelMapperFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); int ic = reader->getSpecs().channels; return new AUD_ChannelMapperReader(reader, diff --git a/intern/audaspace/intern/AUD_ChannelMapperFactory.h b/intern/audaspace/intern/AUD_ChannelMapperFactory.h index 9d622f5e322..25b3e091d8d 100644 --- a/intern/audaspace/intern/AUD_ChannelMapperFactory.h +++ b/intern/audaspace/intern/AUD_ChannelMapperFactory.h @@ -51,7 +51,7 @@ private: AUD_ChannelMapperFactory& operator=(const AUD_ChannelMapperFactory&); public: - AUD_ChannelMapperFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs); + AUD_ChannelMapperFactory(AUD_Reference factory, AUD_DeviceSpecs specs); virtual ~AUD_ChannelMapperFactory(); @@ -67,7 +67,7 @@ public: */ void deleteMapping(int ic); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_CHANNELMAPPERFACTORY diff --git a/intern/audaspace/intern/AUD_ChannelMapperReader.cpp b/intern/audaspace/intern/AUD_ChannelMapperReader.cpp index dec70aaecf6..3079d31c9e9 100644 --- a/intern/audaspace/intern/AUD_ChannelMapperReader.cpp +++ b/intern/audaspace/intern/AUD_ChannelMapperReader.cpp @@ -31,7 +31,7 @@ #include "AUD_ChannelMapperReader.h" -AUD_ChannelMapperReader::AUD_ChannelMapperReader(AUD_IReader* reader, +AUD_ChannelMapperReader::AUD_ChannelMapperReader(AUD_Reference reader, float **mapping) : AUD_EffectReader(reader) { diff --git a/intern/audaspace/intern/AUD_ChannelMapperReader.h b/intern/audaspace/intern/AUD_ChannelMapperReader.h index 091ed06db15..1c7dba1df7c 100644 --- a/intern/audaspace/intern/AUD_ChannelMapperReader.h +++ b/intern/audaspace/intern/AUD_ChannelMapperReader.h @@ -72,7 +72,7 @@ public: * \param reader The reader to map. * \param mapping The mapping specification as two dimensional float array. */ - AUD_ChannelMapperReader(AUD_IReader* reader, float **mapping); + AUD_ChannelMapperReader(AUD_Reference reader, float **mapping); /** * Destroys the reader. diff --git a/intern/audaspace/intern/AUD_ConverterFactory.cpp b/intern/audaspace/intern/AUD_ConverterFactory.cpp index cce0f273616..78602d2cfa9 100644 --- a/intern/audaspace/intern/AUD_ConverterFactory.cpp +++ b/intern/audaspace/intern/AUD_ConverterFactory.cpp @@ -32,15 +32,15 @@ #include "AUD_ConverterFactory.h" #include "AUD_ConverterReader.h" -AUD_ConverterFactory::AUD_ConverterFactory(AUD_IFactory* factory, +AUD_ConverterFactory::AUD_ConverterFactory(AUD_Reference factory, AUD_DeviceSpecs specs) : AUD_MixerFactory(factory, specs) { } -AUD_IReader* AUD_ConverterFactory::createReader() const +AUD_Reference AUD_ConverterFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); if(m_specs.format != AUD_FORMAT_FLOAT32) reader = new AUD_ConverterReader(reader, m_specs); diff --git a/intern/audaspace/intern/AUD_ConverterFactory.h b/intern/audaspace/intern/AUD_ConverterFactory.h index b9eac94de40..cc1fedb2a10 100644 --- a/intern/audaspace/intern/AUD_ConverterFactory.h +++ b/intern/audaspace/intern/AUD_ConverterFactory.h @@ -46,9 +46,9 @@ private: AUD_ConverterFactory& operator=(const AUD_ConverterFactory&); public: - AUD_ConverterFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs); + AUD_ConverterFactory(AUD_Reference factory, AUD_DeviceSpecs specs); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_CONVERTERFACTORY diff --git a/intern/audaspace/intern/AUD_ConverterReader.cpp b/intern/audaspace/intern/AUD_ConverterReader.cpp index 70297b8f5e8..6927f3e969c 100644 --- a/intern/audaspace/intern/AUD_ConverterReader.cpp +++ b/intern/audaspace/intern/AUD_ConverterReader.cpp @@ -31,7 +31,7 @@ #include "AUD_ConverterReader.h" -AUD_ConverterReader::AUD_ConverterReader(AUD_IReader* reader, +AUD_ConverterReader::AUD_ConverterReader(AUD_Reference reader, AUD_DeviceSpecs specs) : AUD_EffectReader(reader) { diff --git a/intern/audaspace/intern/AUD_ConverterReader.h b/intern/audaspace/intern/AUD_ConverterReader.h index a7a425adc54..6f252b5f9f9 100644 --- a/intern/audaspace/intern/AUD_ConverterReader.h +++ b/intern/audaspace/intern/AUD_ConverterReader.h @@ -67,7 +67,7 @@ public: * \param reader The reader to convert. * \param specs The target specification. */ - AUD_ConverterReader(AUD_IReader* reader, AUD_DeviceSpecs specs); + AUD_ConverterReader(AUD_Reference reader, AUD_DeviceSpecs specs); virtual AUD_Specs getSpecs() const; virtual void read(int & length, sample_t* & buffer); diff --git a/intern/audaspace/intern/AUD_DefaultMixer.cpp b/intern/audaspace/intern/AUD_DefaultMixer.cpp index 20471d6e874..24fea6527ba 100644 --- a/intern/audaspace/intern/AUD_DefaultMixer.cpp +++ b/intern/audaspace/intern/AUD_DefaultMixer.cpp @@ -45,7 +45,7 @@ AUD_DefaultMixer::AUD_DefaultMixer(AUD_DeviceSpecs specs) : { } -AUD_IReader* AUD_DefaultMixer::prepare(AUD_IReader* reader) +AUD_Reference AUD_DefaultMixer::prepare(AUD_Reference reader) { // hacky for now, until a better channel mapper reader is available AUD_ChannelMapperFactory cmf(NULL, m_specs); diff --git a/intern/audaspace/intern/AUD_DefaultMixer.h b/intern/audaspace/intern/AUD_DefaultMixer.h index a347141b5e0..2600a6fc05d 100644 --- a/intern/audaspace/intern/AUD_DefaultMixer.h +++ b/intern/audaspace/intern/AUD_DefaultMixer.h @@ -53,7 +53,7 @@ public: * \param reader The reader to prepare. * \return The reader that should be used for playback. */ - virtual AUD_IReader* prepare(AUD_IReader* reader); + virtual AUD_Reference prepare(AUD_Reference reader); }; #endif //AUD_DEFAULTMIXER diff --git a/intern/audaspace/intern/AUD_FileFactory.cpp b/intern/audaspace/intern/AUD_FileFactory.cpp index 1c8bb03bc92..2f02d4a55e1 100644 --- a/intern/audaspace/intern/AUD_FileFactory.cpp +++ b/intern/audaspace/intern/AUD_FileFactory.cpp @@ -54,20 +54,20 @@ AUD_FileFactory::AUD_FileFactory(std::string filename) : AUD_FileFactory::AUD_FileFactory(const data_t* buffer, int size) : m_buffer(new AUD_Buffer(size)) { - memcpy(m_buffer.get()->getBuffer(), buffer, size); + memcpy(m_buffer->getBuffer(), buffer, size); } static const char* read_error = "AUD_FileFactory: File couldn't be read."; -AUD_IReader* AUD_FileFactory::createReader() const +AUD_Reference AUD_FileFactory::createReader() const { #ifdef WITH_SNDFILE try { - if(m_buffer.get()) - return new AUD_SndFileReader(m_buffer); - else + if(m_buffer.isNull()) return new AUD_SndFileReader(m_filename); + else + return new AUD_SndFileReader(m_buffer); } catch(AUD_Exception&) {} #endif @@ -75,10 +75,10 @@ AUD_IReader* AUD_FileFactory::createReader() const #ifdef WITH_FFMPEG try { - if(m_buffer.get()) - return new AUD_FFMPEGReader(m_buffer); - else + if(m_buffer.isNull()) return new AUD_FFMPEGReader(m_filename); + else + return new AUD_FFMPEGReader(m_buffer); } catch(AUD_Exception&) {} #endif diff --git a/intern/audaspace/intern/AUD_FileFactory.h b/intern/audaspace/intern/AUD_FileFactory.h index a2ab94ae148..c63e50b3b0d 100644 --- a/intern/audaspace/intern/AUD_FileFactory.h +++ b/intern/audaspace/intern/AUD_FileFactory.h @@ -72,7 +72,7 @@ public: */ AUD_FileFactory(const data_t* buffer, int size); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_FILEFACTORY diff --git a/intern/audaspace/intern/AUD_IDevice.h b/intern/audaspace/intern/AUD_IDevice.h index 4856b913b38..88c9aa5e8d9 100644 --- a/intern/audaspace/intern/AUD_IDevice.h +++ b/intern/audaspace/intern/AUD_IDevice.h @@ -33,6 +33,7 @@ #define AUD_IDEVICE #include "AUD_Space.h" +#include "AUD_Reference.h" class AUD_IFactory; class AUD_IReader; @@ -74,7 +75,7 @@ public: * \exception AUD_Exception Thrown if there's an unexpected (from the * device side) error during creation of the reader. */ - virtual AUD_Handle* play(AUD_IReader* reader, bool keep = false)=0; + virtual AUD_Handle* play(AUD_Reference reader, bool keep = false)=0; /** * Plays a sound source. @@ -86,7 +87,7 @@ public: * \exception AUD_Exception Thrown if there's an unexpected (from the * device side) error during creation of the reader. */ - virtual AUD_Handle* play(AUD_IFactory* factory, bool keep = false)=0; + virtual AUD_Handle* play(AUD_Reference factory, bool keep = false)=0; /** * Pauses a played back sound. diff --git a/intern/audaspace/intern/AUD_IFactory.h b/intern/audaspace/intern/AUD_IFactory.h index 40a61279a55..48f2802f871 100644 --- a/intern/audaspace/intern/AUD_IFactory.h +++ b/intern/audaspace/intern/AUD_IFactory.h @@ -33,6 +33,7 @@ #define AUD_IFACTORY #include "AUD_Space.h" +#include "AUD_Reference.h" class AUD_IReader; /** @@ -55,7 +56,7 @@ public: * \exception AUD_Exception An exception may be thrown if there has been * a more unexpected error during reader creation. */ - virtual AUD_IReader* createReader() const=0; + virtual AUD_Reference createReader() const=0; }; #endif //AUD_IFACTORY diff --git a/intern/audaspace/intern/AUD_LinearResampleFactory.cpp b/intern/audaspace/intern/AUD_LinearResampleFactory.cpp index a90dc5cb860..f7ac9e1e83e 100644 --- a/intern/audaspace/intern/AUD_LinearResampleFactory.cpp +++ b/intern/audaspace/intern/AUD_LinearResampleFactory.cpp @@ -32,15 +32,15 @@ #include "AUD_LinearResampleFactory.h" #include "AUD_LinearResampleReader.h" -AUD_LinearResampleFactory::AUD_LinearResampleFactory(AUD_IFactory* factory, +AUD_LinearResampleFactory::AUD_LinearResampleFactory(AUD_Reference factory, AUD_DeviceSpecs specs) : AUD_ResampleFactory(factory, specs) { } -AUD_IReader* AUD_LinearResampleFactory::createReader() const +AUD_Reference AUD_LinearResampleFactory::createReader() const { - AUD_IReader* reader = getReader(); + AUD_Reference reader = getReader(); if(reader->getSpecs().rate != m_specs.rate) reader = new AUD_LinearResampleReader(reader, m_specs.specs); diff --git a/intern/audaspace/intern/AUD_LinearResampleFactory.h b/intern/audaspace/intern/AUD_LinearResampleFactory.h index 678aa0b80cb..6a593b11f28 100644 --- a/intern/audaspace/intern/AUD_LinearResampleFactory.h +++ b/intern/audaspace/intern/AUD_LinearResampleFactory.h @@ -45,9 +45,9 @@ private: AUD_LinearResampleFactory& operator=(const AUD_LinearResampleFactory&); public: - AUD_LinearResampleFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs); + AUD_LinearResampleFactory(AUD_Reference factory, AUD_DeviceSpecs specs); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_LINEARRESAMPLEFACTORY diff --git a/intern/audaspace/intern/AUD_LinearResampleReader.cpp b/intern/audaspace/intern/AUD_LinearResampleReader.cpp index 05fb39b2cca..6217826eeec 100644 --- a/intern/audaspace/intern/AUD_LinearResampleReader.cpp +++ b/intern/audaspace/intern/AUD_LinearResampleReader.cpp @@ -36,7 +36,7 @@ #define CC channels + channel -AUD_LinearResampleReader::AUD_LinearResampleReader(AUD_IReader* reader, +AUD_LinearResampleReader::AUD_LinearResampleReader(AUD_Reference reader, AUD_Specs specs) : AUD_EffectReader(reader), m_sspecs(reader->getSpecs()), diff --git a/intern/audaspace/intern/AUD_LinearResampleReader.h b/intern/audaspace/intern/AUD_LinearResampleReader.h index 419c96be2fa..fdf7858f97f 100644 --- a/intern/audaspace/intern/AUD_LinearResampleReader.h +++ b/intern/audaspace/intern/AUD_LinearResampleReader.h @@ -86,7 +86,7 @@ public: * \param reader The reader to mix. * \param specs The target specification. */ - AUD_LinearResampleReader(AUD_IReader* reader, AUD_Specs specs); + AUD_LinearResampleReader(AUD_Reference reader, AUD_Specs specs); virtual void seek(int position); virtual int getLength() const; diff --git a/intern/audaspace/intern/AUD_Mixer.h b/intern/audaspace/intern/AUD_Mixer.h index 277d5bfe2bd..d8c4dde2685 100644 --- a/intern/audaspace/intern/AUD_Mixer.h +++ b/intern/audaspace/intern/AUD_Mixer.h @@ -34,6 +34,7 @@ #include "AUD_ConverterFunctions.h" #include "AUD_Buffer.h" +#include "AUD_Reference.h" class AUD_IReader; #include @@ -94,7 +95,7 @@ public: * \param reader The reader to prepare. * \return The reader that should be used for playback. */ - virtual AUD_IReader* prepare(AUD_IReader* reader)=0; + virtual AUD_Reference prepare(AUD_Reference reader)=0; /** * Adds a buffer for superposition. diff --git a/intern/audaspace/intern/AUD_MixerFactory.cpp b/intern/audaspace/intern/AUD_MixerFactory.cpp index e65b149b94c..c3bf6b4fa99 100644 --- a/intern/audaspace/intern/AUD_MixerFactory.cpp +++ b/intern/audaspace/intern/AUD_MixerFactory.cpp @@ -32,12 +32,12 @@ #include "AUD_MixerFactory.h" #include "AUD_IReader.h" -AUD_IReader* AUD_MixerFactory::getReader() const +AUD_Reference AUD_MixerFactory::getReader() const { return m_factory->createReader(); } -AUD_MixerFactory::AUD_MixerFactory(AUD_IFactory* factory, +AUD_MixerFactory::AUD_MixerFactory(AUD_Reference factory, AUD_DeviceSpecs specs) : m_specs(specs), m_factory(factory) { @@ -48,7 +48,7 @@ AUD_DeviceSpecs AUD_MixerFactory::getSpecs() const return m_specs; } -AUD_IFactory* AUD_MixerFactory::getFactory() const +AUD_Reference AUD_MixerFactory::getFactory() const { return m_factory; } diff --git a/intern/audaspace/intern/AUD_MixerFactory.h b/intern/audaspace/intern/AUD_MixerFactory.h index 2adabbd13ca..27c703b1898 100644 --- a/intern/audaspace/intern/AUD_MixerFactory.h +++ b/intern/audaspace/intern/AUD_MixerFactory.h @@ -48,7 +48,7 @@ protected: /** * If there is no reader it is created out of this factory. */ - AUD_IFactory* m_factory; + AUD_Reference m_factory; /** * Returns the reader created out of the factory. @@ -56,7 +56,7 @@ protected: * classes. * \return The reader to mix. */ - AUD_IReader* getReader() const; + AUD_Reference getReader() const; public: /** @@ -64,7 +64,7 @@ public: * \param factory The factory to create the readers to mix out of. * \param specs The target specification. */ - AUD_MixerFactory(AUD_IFactory* factory, AUD_DeviceSpecs specs); + AUD_MixerFactory(AUD_Reference factory, AUD_DeviceSpecs specs); /** * Returns the target specification for resampling. @@ -75,7 +75,7 @@ public: * Returns the saved factory. * \return The factory. */ - AUD_IFactory* getFactory() const; + AUD_Reference getFactory() const; }; #endif //AUD_MIXERFACTORY diff --git a/intern/audaspace/intern/AUD_NULLDevice.cpp b/intern/audaspace/intern/AUD_NULLDevice.cpp index ab824799d88..09fc4835978 100644 --- a/intern/audaspace/intern/AUD_NULLDevice.cpp +++ b/intern/audaspace/intern/AUD_NULLDevice.cpp @@ -48,12 +48,12 @@ AUD_DeviceSpecs AUD_NULLDevice::getSpecs() const return specs; } -AUD_Handle* AUD_NULLDevice::play(AUD_IReader* reader, bool keep) +AUD_Handle* AUD_NULLDevice::play(AUD_Reference reader, bool keep) { return 0; } -AUD_Handle* AUD_NULLDevice::play(AUD_IFactory* factory, bool keep) +AUD_Handle* AUD_NULLDevice::play(AUD_Reference factory, bool keep) { return 0; } diff --git a/intern/audaspace/intern/AUD_NULLDevice.h b/intern/audaspace/intern/AUD_NULLDevice.h index f700bea477b..6a10267bbe0 100644 --- a/intern/audaspace/intern/AUD_NULLDevice.h +++ b/intern/audaspace/intern/AUD_NULLDevice.h @@ -32,6 +32,7 @@ #ifndef AUD_NULLDEVICE #define AUD_NULLDEVICE +#include "AUD_IReader.h" #include "AUD_IDevice.h" /** @@ -46,8 +47,8 @@ public: AUD_NULLDevice(); virtual AUD_DeviceSpecs getSpecs() const; - virtual AUD_Handle* play(AUD_IReader* reader, bool keep = false); - virtual AUD_Handle* play(AUD_IFactory* factory, bool keep = false); + virtual AUD_Handle* play(AUD_Reference reader, bool keep = false); + virtual AUD_Handle* play(AUD_Reference factory, bool keep = false); virtual bool pause(AUD_Handle* handle); virtual bool resume(AUD_Handle* handle); virtual bool stop(AUD_Handle* handle); diff --git a/intern/audaspace/intern/AUD_Reference.h b/intern/audaspace/intern/AUD_Reference.h index 3232ca3b609..22abb29bdbb 100644 --- a/intern/audaspace/intern/AUD_Reference.h +++ b/intern/audaspace/intern/AUD_Reference.h @@ -75,10 +75,7 @@ public: (*m_refcount)--; if(*m_refcount == 0) { - if(m_reference) - { - delete m_reference; - } + delete m_reference; delete m_refcount; } } @@ -95,10 +92,7 @@ public: (*m_refcount)--; if(*m_refcount == 0) { - if(m_reference) - { - delete m_reference; - } + delete m_reference; delete m_refcount; } @@ -109,6 +103,14 @@ public: return *this; } + /** + * Returns whether the reference is NULL. + */ + bool isNull() const + { + return m_reference == 0; + } + /** * Returns the reference. */ @@ -116,6 +118,56 @@ public: { return m_reference; } + + /** + * Returns the reference. + */ + T& operator*() const + { + return *m_reference; + } + + /** + * Returns the reference. + */ + T* operator->() const + { + return m_reference; + } + + template + explicit AUD_Reference(U* reference, int* refcount) + { + m_reference = dynamic_cast(reference); + if(m_reference) + { + m_refcount = refcount; + (*m_refcount)++; + } + else + { + m_refcount = new int; + *m_refcount = 1; + } + } + + template + AUD_Reference convert() + { + return AUD_Reference(m_reference, m_refcount); + } }; +template +bool operator==(const AUD_Reference& a, const AUD_Reference& b) +{ + return a.get() == b.get(); +} + +template +bool operator!=(const AUD_Reference& a, const AUD_Reference& b) +{ + return a.get() == b.get(); +} + #endif // AUD_REFERENCE diff --git a/intern/audaspace/intern/AUD_SequencerFactory.cpp b/intern/audaspace/intern/AUD_SequencerFactory.cpp index f49dd94fe11..ee0af900b04 100644 --- a/intern/audaspace/intern/AUD_SequencerFactory.cpp +++ b/intern/audaspace/intern/AUD_SequencerFactory.cpp @@ -32,7 +32,7 @@ #include "AUD_SequencerFactory.h" #include "AUD_SequencerReader.h" -typedef std::list::iterator AUD_ReaderIterator; +typedef std::list >::iterator AUD_ReaderIterator; AUD_SequencerFactory::AUD_SequencerFactory(AUD_Specs specs, bool muted, void* data, @@ -46,22 +46,11 @@ AUD_SequencerFactory::AUD_SequencerFactory(AUD_Specs specs, bool muted, AUD_SequencerFactory::~AUD_SequencerFactory() { - AUD_SequencerReader* reader; - AUD_SequencerEntry* entry; - - while(!m_readers.empty()) - { - reader = m_readers.front(); - m_readers.pop_front(); - reader->destroy(); - } - - while(!m_entries.empty()) - { - entry = m_entries.front(); - m_entries.pop_front(); - delete entry; - } +} + +void AUD_SequencerFactory::setThis(AUD_Reference* self) +{ + m_this = self; } void AUD_SequencerFactory::mute(bool muted) @@ -74,19 +63,19 @@ bool AUD_SequencerFactory::getMute() const return m_muted; } -AUD_IReader* AUD_SequencerFactory::newReader() +AUD_Reference AUD_SequencerFactory::newReader() { - AUD_SequencerReader* reader = new AUD_SequencerReader(this, m_entries, + AUD_Reference reader = new AUD_SequencerReader(*m_this, m_entries, m_specs, m_data, m_volume); m_readers.push_front(reader); - return reader; + return reader.convert(); } -AUD_SequencerEntry* AUD_SequencerFactory::add(AUD_IFactory** sound, float begin, float end, float skip, void* data) +AUD_Reference AUD_SequencerFactory::add(AUD_Reference** sound, float begin, float end, float skip, void* data) { - AUD_SequencerEntry* entry = new AUD_SequencerEntry; + AUD_Reference entry = new AUD_SequencerEntry; entry->sound = sound; entry->begin = begin; entry->skip = skip; @@ -102,34 +91,32 @@ AUD_SequencerEntry* AUD_SequencerFactory::add(AUD_IFactory** sound, float begin, return entry; } -void AUD_SequencerFactory::remove(AUD_SequencerEntry* entry) +void AUD_SequencerFactory::remove(AUD_Reference entry) { for(AUD_ReaderIterator i = m_readers.begin(); i != m_readers.end(); i++) (*i)->remove(entry); m_entries.remove(entry); - - delete entry; } -void AUD_SequencerFactory::move(AUD_SequencerEntry* entry, float begin, float end, float skip) +void AUD_SequencerFactory::move(AUD_Reference entry, float begin, float end, float skip) { entry->begin = begin; entry->skip = skip; entry->end = end; } -void AUD_SequencerFactory::mute(AUD_SequencerEntry* entry, bool mute) +void AUD_SequencerFactory::mute(AUD_Reference entry, bool mute) { entry->muted = mute; } -AUD_IReader* AUD_SequencerFactory::createReader() const +AUD_Reference AUD_SequencerFactory::createReader() const { return const_cast(this)->newReader(); } -void AUD_SequencerFactory::removeReader(AUD_SequencerReader* reader) +void AUD_SequencerFactory::removeReader(AUD_Reference reader) { m_readers.remove(reader); } diff --git a/intern/audaspace/intern/AUD_SequencerFactory.h b/intern/audaspace/intern/AUD_SequencerFactory.h index 8f3466f75ce..b0393297622 100644 --- a/intern/audaspace/intern/AUD_SequencerFactory.h +++ b/intern/audaspace/intern/AUD_SequencerFactory.h @@ -40,7 +40,7 @@ typedef float (*AUD_volumeFunction)(void*, void*, float); struct AUD_SequencerEntry { - AUD_IFactory** sound; + AUD_Reference** sound; float begin; float end; float skip; @@ -61,13 +61,14 @@ private: */ AUD_Specs m_specs; - std::list m_entries; - std::list m_readers; + std::list > m_entries; + std::list > m_readers; bool m_muted; void* m_data; AUD_volumeFunction m_volume; + AUD_Reference* m_this; - AUD_IReader* newReader(); + AUD_Reference newReader(); // hide copy constructor and operator= AUD_SequencerFactory(const AUD_SequencerFactory&); @@ -77,16 +78,18 @@ public: AUD_SequencerFactory(AUD_Specs specs, bool muted, void* data, AUD_volumeFunction volume); ~AUD_SequencerFactory(); + void setThis(AUD_Reference* self); + void mute(bool muted); bool getMute() const; - AUD_SequencerEntry* add(AUD_IFactory** sound, float begin, float end, float skip, void* data); - void remove(AUD_SequencerEntry* entry); - void move(AUD_SequencerEntry* entry, float begin, float end, float skip); - void mute(AUD_SequencerEntry* entry, bool mute); + AUD_Reference add(AUD_Reference** sound, float begin, float end, float skip, void* data); + void remove(AUD_Reference entry); + void move(AUD_Reference entry, float begin, float end, float skip); + void mute(AUD_Reference entry, bool mute); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; - void removeReader(AUD_SequencerReader* reader); + void removeReader(AUD_Reference reader); }; #endif //AUD_SEQUENCERFACTORY diff --git a/intern/audaspace/intern/AUD_SequencerReader.cpp b/intern/audaspace/intern/AUD_SequencerReader.cpp index 95e0dca6323..b7cbdda544e 100644 --- a/intern/audaspace/intern/AUD_SequencerReader.cpp +++ b/intern/audaspace/intern/AUD_SequencerReader.cpp @@ -34,23 +34,21 @@ #include -typedef std::list::iterator AUD_StripIterator; -typedef std::list::iterator AUD_EntryIterator; +typedef std::list >::iterator AUD_StripIterator; +typedef std::list >::iterator AUD_EntryIterator; -AUD_SequencerReader::AUD_SequencerReader(AUD_SequencerFactory* factory, - std::list &entries, AUD_Specs specs, - void* data, AUD_volumeFunction volume) +AUD_SequencerReader::AUD_SequencerReader(AUD_Reference factory, + std::list > &entries, AUD_Specs specs, + void* data, AUD_volumeFunction volume) : + m_position(0), m_factory(factory), m_data(data), m_volume(volume) { AUD_DeviceSpecs dspecs; dspecs.specs = specs; dspecs.format = AUD_FORMAT_FLOAT32; m_mixer = new AUD_DefaultMixer(dspecs); - m_factory = factory; - m_data = data; - m_volume = volume; - AUD_SequencerStrip* strip; + AUD_Reference strip; for(AUD_EntryIterator i = entries.begin(); i != entries.end(); i++) { @@ -58,84 +56,33 @@ AUD_SequencerReader::AUD_SequencerReader(AUD_SequencerFactory* factory, strip->entry = *i; strip->old_sound = NULL; - if(strip->old_sound) - strip->reader = m_mixer->prepare(strip->old_sound->createReader()); - else - strip->reader = NULL; - m_strips.push_front(strip); } - - m_position = 0; } AUD_SequencerReader::~AUD_SequencerReader() { - if(m_factory != NULL) - m_factory->removeReader(this); - - AUD_SequencerStrip* strip; - - while(!m_strips.empty()) - { - strip = m_strips.front(); - m_strips.pop_front(); - if(strip->reader) - { - delete strip->reader; - } - delete strip; - } - - delete m_mixer; -} - -void AUD_SequencerReader::destroy() -{ - m_factory = NULL; - AUD_SequencerStrip* strip; - - while(!m_strips.empty()) - { - strip = m_strips.front(); - m_strips.pop_front(); - delete strip; - } + m_factory->removeReader(this); } -void AUD_SequencerReader::add(AUD_SequencerEntry* entry) +void AUD_SequencerReader::add(AUD_Reference entry) { - AUD_SequencerStrip* strip = new AUD_SequencerStrip; + AUD_Reference strip = new AUD_SequencerStrip; strip->entry = entry; - if(*strip->entry->sound) - { - strip->old_sound = *strip->entry->sound; - strip->reader = m_mixer->prepare(strip->old_sound->createReader()); - } - else - { - strip->reader = NULL; - strip->old_sound = NULL; - } m_strips.push_front(strip); } -void AUD_SequencerReader::remove(AUD_SequencerEntry* entry) +void AUD_SequencerReader::remove(AUD_Reference entry) { - AUD_SequencerStrip* strip; + AUD_Reference strip; for(AUD_StripIterator i = m_strips.begin(); i != m_strips.end(); i++) { strip = *i; if(strip->entry == entry) { i++; - if(strip->reader) - { - delete strip->reader; - } m_strips.remove(strip); - delete strip; return; } } @@ -175,7 +122,7 @@ void AUD_SequencerReader::read(int & length, sample_t* & buffer) int size = length * samplesize; int start, end, current, skip, len; - AUD_SequencerStrip* strip; + AUD_Reference strip; sample_t* buf; if(m_buffer.getSize() < size) @@ -192,14 +139,12 @@ void AUD_SequencerReader::read(int & length, sample_t* & buffer) if(strip->old_sound != *strip->entry->sound) { strip->old_sound = *strip->entry->sound; - if(strip->reader) - delete strip->reader; if(strip->old_sound) { try { - strip->reader = m_mixer->prepare(strip->old_sound->createReader()); + strip->reader = m_mixer->prepare((*strip->old_sound)->createReader()); } catch(AUD_Exception) { @@ -210,7 +155,7 @@ void AUD_SequencerReader::read(int & length, sample_t* & buffer) strip->reader = NULL; } - if(strip->reader) + if(!strip->reader.isNull()) { end = floor(strip->entry->end * rate); if(m_position < end) diff --git a/intern/audaspace/intern/AUD_SequencerReader.h b/intern/audaspace/intern/AUD_SequencerReader.h index 53baf521acc..2efb94aa1fb 100644 --- a/intern/audaspace/intern/AUD_SequencerReader.h +++ b/intern/audaspace/intern/AUD_SequencerReader.h @@ -39,9 +39,9 @@ class AUD_Mixer; struct AUD_SequencerStrip { - AUD_IFactory* old_sound; - AUD_IReader* reader; - AUD_SequencerEntry* entry; + AUD_Reference reader; + AUD_Reference entry; + AUD_Reference* old_sound; }; /** @@ -63,14 +63,14 @@ private: /** * The target specification. */ - AUD_Mixer* m_mixer; + AUD_Reference m_mixer; /** * Saves the SequencerFactory the reader belongs to. */ - AUD_SequencerFactory* m_factory; + AUD_Reference m_factory; - std::list m_strips; + std::list > m_strips; void* m_data; AUD_volumeFunction m_volume; @@ -85,17 +85,15 @@ public: * \param reader The reader to mix. * \param specs The target specification. */ - AUD_SequencerReader(AUD_SequencerFactory* factory, std::list &entries, const AUD_Specs specs, void* data, AUD_volumeFunction volume); + AUD_SequencerReader(AUD_Reference factory, std::list > &entries, const AUD_Specs specs, void* data, AUD_volumeFunction volume); /** * Destroys the reader. */ ~AUD_SequencerReader(); - void destroy(); - - void add(AUD_SequencerEntry* entry); - void remove(AUD_SequencerEntry* entry); + void add(AUD_Reference entry); + void remove(AUD_Reference entry); virtual bool isSeekable() const; virtual void seek(int position); diff --git a/intern/audaspace/intern/AUD_SilenceFactory.cpp b/intern/audaspace/intern/AUD_SilenceFactory.cpp index dc3f0626591..f1eae1889a2 100644 --- a/intern/audaspace/intern/AUD_SilenceFactory.cpp +++ b/intern/audaspace/intern/AUD_SilenceFactory.cpp @@ -37,7 +37,7 @@ AUD_SilenceFactory::AUD_SilenceFactory() { } -AUD_IReader* AUD_SilenceFactory::createReader() const +AUD_Reference AUD_SilenceFactory::createReader() const { return new AUD_SilenceReader(); } diff --git a/intern/audaspace/intern/AUD_SilenceFactory.h b/intern/audaspace/intern/AUD_SilenceFactory.h index fb6afc34189..0920c1267ab 100644 --- a/intern/audaspace/intern/AUD_SilenceFactory.h +++ b/intern/audaspace/intern/AUD_SilenceFactory.h @@ -50,7 +50,7 @@ public: */ AUD_SilenceFactory(); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SILENCEFACTORY diff --git a/intern/audaspace/intern/AUD_SinusFactory.cpp b/intern/audaspace/intern/AUD_SinusFactory.cpp index 9ea7a031b16..8276856b9e2 100644 --- a/intern/audaspace/intern/AUD_SinusFactory.cpp +++ b/intern/audaspace/intern/AUD_SinusFactory.cpp @@ -44,7 +44,7 @@ float AUD_SinusFactory::getFrequency() const return m_frequency; } -AUD_IReader* AUD_SinusFactory::createReader() const +AUD_Reference AUD_SinusFactory::createReader() const { return new AUD_SinusReader(m_frequency, m_sampleRate); } diff --git a/intern/audaspace/intern/AUD_SinusFactory.h b/intern/audaspace/intern/AUD_SinusFactory.h index 6d8b355784b..a440d7b7535 100644 --- a/intern/audaspace/intern/AUD_SinusFactory.h +++ b/intern/audaspace/intern/AUD_SinusFactory.h @@ -68,7 +68,7 @@ public: */ float getFrequency() const; - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SINUSFACTORY diff --git a/intern/audaspace/intern/AUD_SoftwareDevice.cpp b/intern/audaspace/intern/AUD_SoftwareDevice.cpp index b44b2f02d29..82bb5841580 100644 --- a/intern/audaspace/intern/AUD_SoftwareDevice.cpp +++ b/intern/audaspace/intern/AUD_SoftwareDevice.cpp @@ -41,7 +41,7 @@ struct AUD_SoftwareHandle : AUD_Handle { /// The reader source. - AUD_IReader* reader; + AUD_Reference reader; /// Whether to keep the source if end of it is reached. bool keep; @@ -81,8 +81,6 @@ void AUD_SoftwareDevice::destroy() if(m_playback) playing(m_playback = false); - delete m_mixer; - AUD_SoftwareHandle* handle; // delete all playing sounds @@ -90,7 +88,6 @@ void AUD_SoftwareDevice::destroy() { handle = m_playingSounds.front(); m_playingSounds.pop_front(); - delete handle->reader; delete handle; } @@ -99,7 +96,6 @@ void AUD_SoftwareDevice::destroy() { handle = m_pausedSounds.front(); m_pausedSounds.pop_front(); - delete handle->reader; delete handle; } @@ -213,11 +209,11 @@ AUD_DeviceSpecs AUD_SoftwareDevice::getSpecs() const return m_specs; } -AUD_Handle* AUD_SoftwareDevice::play(AUD_IReader* reader, bool keep) +AUD_Handle* AUD_SoftwareDevice::play(AUD_Reference reader, bool keep) { // prepare the reader reader = m_mixer->prepare(reader); - if(reader == NULL) + if(reader.isNull()) return NULL; // play sound @@ -239,7 +235,7 @@ AUD_Handle* AUD_SoftwareDevice::play(AUD_IReader* reader, bool keep) return sound; } -AUD_Handle* AUD_SoftwareDevice::play(AUD_IFactory* factory, bool keep) +AUD_Handle* AUD_SoftwareDevice::play(AUD_Reference factory, bool keep) { return play(factory->createReader(), keep); } @@ -307,7 +303,6 @@ bool AUD_SoftwareDevice::stop(AUD_Handle* handle) { if(*i == handle) { - delete (*i)->reader; delete *i; m_playingSounds.erase(i); if(m_playingSounds.empty()) @@ -323,7 +318,6 @@ bool AUD_SoftwareDevice::stop(AUD_Handle* handle) { if(*i == handle) { - delete (*i)->reader; delete *i; m_pausedSounds.erase(i); result = true; @@ -376,7 +370,7 @@ bool AUD_SoftwareDevice::seek(AUD_Handle* handle, float position) if(isValid(handle)) { - AUD_IReader* reader = ((AUD_SoftwareHandle*)handle)->reader; + AUD_Reference reader = ((AUD_SoftwareHandle*)handle)->reader; reader->seek((int)(position * reader->getSpecs().rate)); result = true; } diff --git a/intern/audaspace/intern/AUD_SoftwareDevice.h b/intern/audaspace/intern/AUD_SoftwareDevice.h index 1f6a5ead6e0..6cbc6e3ddc6 100644 --- a/intern/audaspace/intern/AUD_SoftwareDevice.h +++ b/intern/audaspace/intern/AUD_SoftwareDevice.h @@ -33,8 +33,8 @@ #define AUD_SOFTWAREDEVICE #include "AUD_IDevice.h" +#include "AUD_Mixer.h" struct AUD_SoftwareHandle; -class AUD_Mixer; class AUD_Buffer; #include @@ -59,7 +59,7 @@ protected: /** * The mixer. */ - AUD_Mixer* m_mixer; + AUD_Reference m_mixer; /** * Initializes member variables. @@ -119,8 +119,8 @@ private: public: virtual AUD_DeviceSpecs getSpecs() const; - virtual AUD_Handle* play(AUD_IReader* reader, bool keep = false); - virtual AUD_Handle* play(AUD_IFactory* factory, bool keep = false); + virtual AUD_Handle* play(AUD_Reference reader, bool keep = false); + virtual AUD_Handle* play(AUD_Reference factory, bool keep = false); virtual bool pause(AUD_Handle* handle); virtual bool resume(AUD_Handle* handle); virtual bool stop(AUD_Handle* handle); diff --git a/intern/audaspace/intern/AUD_StreamBufferFactory.cpp b/intern/audaspace/intern/AUD_StreamBufferFactory.cpp index c25442b6f26..5c4e024917b 100644 --- a/intern/audaspace/intern/AUD_StreamBufferFactory.cpp +++ b/intern/audaspace/intern/AUD_StreamBufferFactory.cpp @@ -35,10 +35,10 @@ #include -AUD_StreamBufferFactory::AUD_StreamBufferFactory(AUD_IFactory* factory) : +AUD_StreamBufferFactory::AUD_StreamBufferFactory(AUD_Reference factory) : m_buffer(new AUD_Buffer()) { - AUD_IReader* reader = factory->createReader(); + AUD_Reference reader = factory->createReader(); m_specs = reader->getSpecs(); @@ -56,26 +56,25 @@ AUD_StreamBufferFactory::AUD_StreamBufferFactory(AUD_IFactory* factory) : size += m_specs.rate; // as long as we fill our buffer to the end - while(index == m_buffer.get()->getSize() / sample_size) + while(index == m_buffer->getSize() / sample_size) { // increase - m_buffer.get()->resize(size*sample_size, true); + m_buffer->resize(size*sample_size, true); // read more length = size-index; reader->read(length, buffer); - memcpy(m_buffer.get()->getBuffer() + index * m_specs.channels, + memcpy(m_buffer->getBuffer() + index * m_specs.channels, buffer, length * sample_size); size += AUD_BUFFER_RESIZE_BYTES / sample_size; index += length; } - m_buffer.get()->resize(index * sample_size, true); - delete reader; + m_buffer->resize(index * sample_size, true); } -AUD_IReader* AUD_StreamBufferFactory::createReader() const +AUD_Reference AUD_StreamBufferFactory::createReader() const { return new AUD_BufferReader(m_buffer, m_specs); } diff --git a/intern/audaspace/intern/AUD_StreamBufferFactory.h b/intern/audaspace/intern/AUD_StreamBufferFactory.h index b6a44d95744..fc5f103d99b 100644 --- a/intern/audaspace/intern/AUD_StreamBufferFactory.h +++ b/intern/audaspace/intern/AUD_StreamBufferFactory.h @@ -64,9 +64,9 @@ public: * \param factory The factory that creates the reader for buffering. * \exception AUD_Exception Thrown if the reader cannot be created. */ - AUD_StreamBufferFactory(AUD_IFactory* factory); + AUD_StreamBufferFactory(AUD_Reference factory); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_STREAMBUFFERFACTORY diff --git a/intern/audaspace/sndfile/AUD_SndFileFactory.cpp b/intern/audaspace/sndfile/AUD_SndFileFactory.cpp index 2d1d29e50f5..7ab3308f01b 100644 --- a/intern/audaspace/sndfile/AUD_SndFileFactory.cpp +++ b/intern/audaspace/sndfile/AUD_SndFileFactory.cpp @@ -43,13 +43,13 @@ AUD_SndFileFactory::AUD_SndFileFactory(std::string filename) : AUD_SndFileFactory::AUD_SndFileFactory(const data_t* buffer, int size) : m_buffer(new AUD_Buffer(size)) { - memcpy(m_buffer.get()->getBuffer(), buffer, size); + memcpy(m_buffer->getBuffer(), buffer, size); } -AUD_IReader* AUD_SndFileFactory::createReader() const +AUD_Reference AUD_SndFileFactory::createReader() const { - if(m_buffer.get()) - return new AUD_SndFileReader(m_buffer); - else + if(m_buffer.isNull()) return new AUD_SndFileReader(m_filename); + else + return new AUD_SndFileReader(m_buffer); } diff --git a/intern/audaspace/sndfile/AUD_SndFileFactory.h b/intern/audaspace/sndfile/AUD_SndFileFactory.h index 9c747e1df01..3a1037e5587 100644 --- a/intern/audaspace/sndfile/AUD_SndFileFactory.h +++ b/intern/audaspace/sndfile/AUD_SndFileFactory.h @@ -72,7 +72,7 @@ public: */ AUD_SndFileFactory(const data_t* buffer, int size); - virtual AUD_IReader* createReader() const; + virtual AUD_Reference createReader() const; }; #endif //AUD_SNDFILEFACTORY diff --git a/intern/audaspace/sndfile/AUD_SndFileReader.cpp b/intern/audaspace/sndfile/AUD_SndFileReader.cpp index f226d2eee4d..7b5fd7b0f45 100644 --- a/intern/audaspace/sndfile/AUD_SndFileReader.cpp +++ b/intern/audaspace/sndfile/AUD_SndFileReader.cpp @@ -36,7 +36,7 @@ sf_count_t AUD_SndFileReader::vio_get_filelen(void *user_data) { AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data; - return reader->m_membuffer.get()->getSize(); + return reader->m_membuffer->getSize(); } sf_count_t AUD_SndFileReader::vio_seek(sf_count_t offset, int whence, @@ -53,7 +53,7 @@ sf_count_t AUD_SndFileReader::vio_seek(sf_count_t offset, int whence, reader->m_memoffset = reader->m_memoffset + offset; break; case SEEK_END: - reader->m_memoffset = reader->m_membuffer.get()->getSize() + offset; + reader->m_memoffset = reader->m_membuffer->getSize() + offset; break; } @@ -65,10 +65,10 @@ sf_count_t AUD_SndFileReader::vio_read(void *ptr, sf_count_t count, { AUD_SndFileReader* reader = (AUD_SndFileReader*)user_data; - if(reader->m_memoffset + count > reader->m_membuffer.get()->getSize()) - count = reader->m_membuffer.get()->getSize() - reader->m_memoffset; + if(reader->m_memoffset + count > reader->m_membuffer->getSize()) + count = reader->m_membuffer->getSize() - reader->m_memoffset; - memcpy(ptr, ((data_t*)reader->m_membuffer.get()->getBuffer()) + + memcpy(ptr, ((data_t*)reader->m_membuffer->getBuffer()) + reader->m_memoffset, count); reader->m_memoffset += count; -- cgit v1.2.3