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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoerg Mueller <nexyon@gmail.com>2011-06-14 16:13:19 +0400
committerJoerg Mueller <nexyon@gmail.com>2011-06-14 16:13:19 +0400
commitd8974a60f6811faa2872b55eda41b03387614ed1 (patch)
treea517f14ea860a1c0111fe758c293d9471dca7496 /intern/audaspace/FX
parent8ff0c2e10720bd6e583a6b133b75e7bdff27a5f8 (diff)
3D Audio GSoC:
Changed Readers to top-down architecture instead of bottom-up.
Diffstat (limited to 'intern/audaspace/FX')
-rw-r--r--intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp15
-rw-r--r--intern/audaspace/FX/AUD_BaseIIRFilterReader.h7
-rw-r--r--intern/audaspace/FX/AUD_DelayReader.cpp29
-rw-r--r--intern/audaspace/FX/AUD_DelayReader.h12
-rw-r--r--intern/audaspace/FX/AUD_DoubleReader.cpp17
-rw-r--r--intern/audaspace/FX/AUD_DoubleReader.h2
-rw-r--r--intern/audaspace/FX/AUD_EffectReader.cpp2
-rw-r--r--intern/audaspace/FX/AUD_EffectReader.h2
-rw-r--r--intern/audaspace/FX/AUD_FaderReader.cpp42
-rw-r--r--intern/audaspace/FX/AUD_FaderReader.h12
-rw-r--r--intern/audaspace/FX/AUD_LimiterReader.cpp6
-rw-r--r--intern/audaspace/FX/AUD_LimiterReader.h2
-rw-r--r--intern/audaspace/FX/AUD_LoopReader.cpp15
-rw-r--r--intern/audaspace/FX/AUD_LoopReader.h7
-rw-r--r--intern/audaspace/FX/AUD_ReverseReader.cpp32
-rw-r--r--intern/audaspace/FX/AUD_ReverseReader.h7
-rw-r--r--intern/audaspace/FX/AUD_SuperposeReader.cpp8
-rw-r--r--intern/audaspace/FX/AUD_SuperposeReader.h2
18 files changed, 49 insertions, 170 deletions
diff --git a/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp b/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
index 5ad5903141b..9ddd8af019b 100644
--- a/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
+++ b/intern/audaspace/FX/AUD_BaseIIRFilterReader.cpp
@@ -55,24 +55,15 @@ AUD_BaseIIRFilterReader::~AUD_BaseIIRFilterReader()
delete[] m_y;
}
-void AUD_BaseIIRFilterReader::read(int & length, sample_t* & buffer)
+void AUD_BaseIIRFilterReader::read(int & length, sample_t* buffer)
{
- sample_t* buf;
-
- int samplesize = AUD_SAMPLE_SIZE(m_reader->getSpecs());
-
- m_reader->read(length, buf);
-
- if(m_buffer.getSize() < length * samplesize)
- m_buffer.resize(length * samplesize);
-
- buffer = m_buffer.getBuffer();
+ m_reader->read(length, buffer);
for(m_channel = 0; m_channel < m_channels; m_channel++)
{
for(int i = 0; i < length; i++)
{
- m_x[m_xpos * CC] = buf[i * CC];
+ m_x[m_xpos * CC] = buffer[i * CC];
m_y[m_ypos * CC] = buffer[i * CC] = filter();
m_xpos = (m_xpos + 1) % m_xlen;
diff --git a/intern/audaspace/FX/AUD_BaseIIRFilterReader.h b/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
index 9f81e2d8a25..2d1f21446a0 100644
--- a/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
+++ b/intern/audaspace/FX/AUD_BaseIIRFilterReader.h
@@ -57,11 +57,6 @@ private:
const int m_ylen;
/**
- * The playback buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
* The last in samples array.
*/
sample_t* m_x;
@@ -112,7 +107,7 @@ public:
virtual ~AUD_BaseIIRFilterReader();
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
virtual sample_t filter()=0;
};
diff --git a/intern/audaspace/FX/AUD_DelayReader.cpp b/intern/audaspace/FX/AUD_DelayReader.cpp
index a2224caf288..2e93184358e 100644
--- a/intern/audaspace/FX/AUD_DelayReader.cpp
+++ b/intern/audaspace/FX/AUD_DelayReader.cpp
@@ -36,8 +36,7 @@
AUD_DelayReader::AUD_DelayReader(AUD_Reference<AUD_IReader> reader, float delay) :
AUD_EffectReader(reader),
m_delay(int(delay * reader->getSpecs().rate)),
- m_remdelay(int(delay * reader->getSpecs().rate)),
- m_empty(true)
+ m_remdelay(int(delay * reader->getSpecs().rate))
{
}
@@ -70,46 +69,28 @@ int AUD_DelayReader::getPosition() const
return m_reader->getPosition() + m_delay;
}
-void AUD_DelayReader::read(int & length, sample_t* & buffer)
+void AUD_DelayReader::read(int & length, sample_t* buffer)
{
if(m_remdelay > 0)
{
AUD_Specs specs = m_reader->getSpecs();
int samplesize = AUD_SAMPLE_SIZE(specs);
- if(m_buffer.getSize() < length * samplesize)
- {
- m_buffer.resize(length * samplesize);
- m_empty = false;
- }
-
- buffer = m_buffer.getBuffer();
-
if(length > m_remdelay)
{
- if(!m_empty)
- memset(buffer, 0, m_remdelay * samplesize);
+ memset(buffer, 0, m_remdelay * samplesize);
int len = length - m_remdelay;
- sample_t* buf;
- m_reader->read(len, buf);
-
- memcpy(buffer + m_remdelay * specs.channels,
- buf, len * samplesize);
+ m_reader->read(len, buffer + m_remdelay * specs.channels);
if(len < length-m_remdelay)
length = m_remdelay + len;
m_remdelay = 0;
- m_empty = false;
}
else
{
- if(!m_empty)
- {
- memset(buffer, 0, length * samplesize);
- m_empty = true;
- }
+ memset(buffer, 0, length * samplesize);
m_remdelay -= length;
}
}
diff --git a/intern/audaspace/FX/AUD_DelayReader.h b/intern/audaspace/FX/AUD_DelayReader.h
index 695003a8c43..cb0ec9bcd9d 100644
--- a/intern/audaspace/FX/AUD_DelayReader.h
+++ b/intern/audaspace/FX/AUD_DelayReader.h
@@ -42,11 +42,6 @@ class AUD_DelayReader : public AUD_EffectReader
{
private:
/**
- * The playback buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
* The delay level.
*/
const int m_delay;
@@ -56,11 +51,6 @@ private:
*/
int m_remdelay;
- /**
- * Whether the buffer is currently filled with zeros.
- */
- bool m_empty;
-
// hide copy constructor and operator=
AUD_DelayReader(const AUD_DelayReader&);
AUD_DelayReader& operator=(const AUD_DelayReader&);
@@ -76,7 +66,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_DELAYREADER
diff --git a/intern/audaspace/FX/AUD_DoubleReader.cpp b/intern/audaspace/FX/AUD_DoubleReader.cpp
index bf1c770a2ed..605c49066d2 100644
--- a/intern/audaspace/FX/AUD_DoubleReader.cpp
+++ b/intern/audaspace/FX/AUD_DoubleReader.cpp
@@ -89,7 +89,7 @@ AUD_Specs AUD_DoubleReader::getSpecs() const
return m_reader1->getSpecs();
}
-void AUD_DoubleReader::read(int & length, sample_t* & buffer)
+void AUD_DoubleReader::read(int & length, sample_t* buffer)
{
if(!m_finished1)
{
@@ -98,23 +98,12 @@ void AUD_DoubleReader::read(int & length, sample_t* & buffer)
if(len < length)
{
- AUD_Specs specs = m_reader1->getSpecs();
- int samplesize = AUD_SAMPLE_SIZE(specs);
-
- if(m_buffer.getSize() < length * samplesize)
- m_buffer.resize(length * samplesize);
-
- sample_t* buf = buffer;
- buffer = m_buffer.getBuffer();
-
- memcpy(buffer, buf, len * samplesize);
+ const AUD_Specs specs = m_reader1->getSpecs();
len = length - len;
length -= len;
- m_reader2->read(len, buf);
- memcpy(buffer + length * specs.channels, buf,
- len * samplesize);
+ m_reader2->read(len, buffer + length * specs.channels);
length += len;
diff --git a/intern/audaspace/FX/AUD_DoubleReader.h b/intern/audaspace/FX/AUD_DoubleReader.h
index 4f01c47d052..d68000fe81a 100644
--- a/intern/audaspace/FX/AUD_DoubleReader.h
+++ b/intern/audaspace/FX/AUD_DoubleReader.h
@@ -85,7 +85,7 @@ public:
virtual int getLength() const;
virtual int getPosition() const;
virtual AUD_Specs getSpecs() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_DOUBLEREADER
diff --git a/intern/audaspace/FX/AUD_EffectReader.cpp b/intern/audaspace/FX/AUD_EffectReader.cpp
index d7c4eeb2ee1..aa8fe7a7f35 100644
--- a/intern/audaspace/FX/AUD_EffectReader.cpp
+++ b/intern/audaspace/FX/AUD_EffectReader.cpp
@@ -65,7 +65,7 @@ AUD_Specs AUD_EffectReader::getSpecs() const
return m_reader->getSpecs();
}
-void AUD_EffectReader::read(int & length, sample_t* & buffer)
+void AUD_EffectReader::read(int & length, sample_t* buffer)
{
m_reader->read(length, buffer);
}
diff --git a/intern/audaspace/FX/AUD_EffectReader.h b/intern/audaspace/FX/AUD_EffectReader.h
index 6aa185edcd0..cfb8e5b6e77 100644
--- a/intern/audaspace/FX/AUD_EffectReader.h
+++ b/intern/audaspace/FX/AUD_EffectReader.h
@@ -69,7 +69,7 @@ public:
virtual int getLength() const;
virtual int getPosition() const;
virtual AUD_Specs getSpecs() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_EFFECTREADER
diff --git a/intern/audaspace/FX/AUD_FaderReader.cpp b/intern/audaspace/FX/AUD_FaderReader.cpp
index e319e205e5f..7fe5c503c23 100644
--- a/intern/audaspace/FX/AUD_FaderReader.cpp
+++ b/intern/audaspace/FX/AUD_FaderReader.cpp
@@ -38,12 +38,11 @@ AUD_FaderReader::AUD_FaderReader(AUD_Reference<AUD_IReader> reader, AUD_FadeType
AUD_EffectReader(reader),
m_type(type),
m_start(start),
- m_length(length),
- m_empty(true)
+ m_length(length)
{
}
-void AUD_FaderReader::read(int & length, sample_t* & buffer)
+void AUD_FaderReader::read(int & length, sample_t* buffer)
{
int position = m_reader->getPosition();
AUD_Specs specs = m_reader->getSpecs();
@@ -55,46 +54,18 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer)
{
if(m_type != AUD_FADE_OUT)
{
- if(m_buffer.getSize() < length * samplesize)
- {
- m_buffer.resize(length * samplesize);
- m_empty = false;
- }
-
- buffer = m_buffer.getBuffer();
-
- if(!m_empty)
- {
- memset(buffer, 0, length * samplesize);
- m_empty = true;
- }
+ memset(buffer, 0, length * samplesize);
}
}
else if(position / (float)specs.rate >= m_start+m_length)
{
if(m_type == AUD_FADE_OUT)
{
- if(m_buffer.getSize() < length * samplesize)
- {
- m_buffer.resize(length * samplesize);
- m_empty = false;
- }
-
- buffer = m_buffer.getBuffer();
-
- if(!m_empty)
- {
- memset(buffer, 0, length * samplesize);
- m_empty = true;
- }
+ memset(buffer, 0, length * samplesize);
}
}
else
{
- if(m_buffer.getSize() < length * samplesize)
- m_buffer.resize(length * samplesize);
-
- sample_t* buf = m_buffer.getBuffer();
float volume = 1.0f;
for(int i = 0; i < length * specs.channels; i++)
@@ -111,10 +82,7 @@ void AUD_FaderReader::read(int & length, sample_t* & buffer)
volume = 1.0f - volume;
}
- buf[i] = buffer[i] * volume;
+ buffer[i] = buffer[i] * volume;
}
-
- buffer = buf;
- m_empty = false;
}
}
diff --git a/intern/audaspace/FX/AUD_FaderReader.h b/intern/audaspace/FX/AUD_FaderReader.h
index b088477bce0..c0eb3d27d36 100644
--- a/intern/audaspace/FX/AUD_FaderReader.h
+++ b/intern/audaspace/FX/AUD_FaderReader.h
@@ -58,16 +58,6 @@ private:
*/
const float m_length;
- /**
- * The playback buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
- * Whether the buffer is empty.
- */
- bool m_empty;
-
// hide copy constructor and operator=
AUD_FaderReader(const AUD_FaderReader&);
AUD_FaderReader& operator=(const AUD_FaderReader&);
@@ -82,7 +72,7 @@ public:
AUD_FaderReader(AUD_Reference<AUD_IReader> reader, AUD_FadeType type,
float start,float length);
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_FADERREADER
diff --git a/intern/audaspace/FX/AUD_LimiterReader.cpp b/intern/audaspace/FX/AUD_LimiterReader.cpp
index d5a46568b3e..0f87679410e 100644
--- a/intern/audaspace/FX/AUD_LimiterReader.cpp
+++ b/intern/audaspace/FX/AUD_LimiterReader.cpp
@@ -48,14 +48,14 @@ AUD_LimiterReader::AUD_LimiterReader(AUD_Reference<AUD_IReader> reader,
{
// skip first m_start samples by reading them
int length = AUD_DEFAULT_BUFFER_SIZE;
- sample_t* buffer;
+ AUD_Buffer buffer(AUD_DEFAULT_BUFFER_SIZE * AUD_SAMPLE_SIZE(m_reader->getSpecs()));
for(int len = m_start;
length == AUD_DEFAULT_BUFFER_SIZE;
len -= AUD_DEFAULT_BUFFER_SIZE)
{
if(len < AUD_DEFAULT_BUFFER_SIZE)
length = len;
- m_reader->read(length, buffer);
+ m_reader->read(length, buffer.getBuffer());
}
}
}
@@ -80,7 +80,7 @@ int AUD_LimiterReader::getPosition() const
return AUD_MIN(pos, m_end) - m_start;
}
-void AUD_LimiterReader::read(int & length, sample_t* & buffer)
+void AUD_LimiterReader::read(int & length, sample_t* buffer)
{
if(m_end >= 0)
{
diff --git a/intern/audaspace/FX/AUD_LimiterReader.h b/intern/audaspace/FX/AUD_LimiterReader.h
index f4502c33ae0..660dc26b7a3 100644
--- a/intern/audaspace/FX/AUD_LimiterReader.h
+++ b/intern/audaspace/FX/AUD_LimiterReader.h
@@ -67,7 +67,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_LIMITERREADER
diff --git a/intern/audaspace/FX/AUD_LoopReader.cpp b/intern/audaspace/FX/AUD_LoopReader.cpp
index b7b8937abb8..0efee5b55c0 100644
--- a/intern/audaspace/FX/AUD_LoopReader.cpp
+++ b/intern/audaspace/FX/AUD_LoopReader.cpp
@@ -68,10 +68,9 @@ int AUD_LoopReader::getPosition() const
return m_reader->getPosition() * (m_count < 0 ? 1 : m_count);
}
-void AUD_LoopReader::read(int & length, sample_t* & buffer)
+void AUD_LoopReader::read(int & length, sample_t* buffer)
{
AUD_Specs specs = m_reader->getSpecs();
- int samplesize = AUD_SAMPLE_SIZE(specs);
int len = length;
@@ -81,13 +80,6 @@ void AUD_LoopReader::read(int & length, sample_t* & buffer)
{
int pos = 0;
- if(m_buffer.getSize() < length * samplesize)
- m_buffer.resize(length * samplesize);
-
- sample_t* buf = m_buffer.getBuffer();
-
- memcpy(buf + pos * specs.channels, buffer, len * samplesize);
-
pos += len;
while(pos < length && m_left)
@@ -98,19 +90,16 @@ void AUD_LoopReader::read(int & length, sample_t* & buffer)
m_reader->seek(0);
len = length - pos;
- m_reader->read(len, buffer);
+ m_reader->read(len, buffer + pos * specs.channels);
// prevent endless loop
if(!len)
break;
- memcpy(buf + pos * specs.channels, buffer, len * samplesize);
-
pos += len;
}
length = pos;
- buffer = buf;
}
else
length = len;
diff --git a/intern/audaspace/FX/AUD_LoopReader.h b/intern/audaspace/FX/AUD_LoopReader.h
index 866d6f7885f..d1338245df4 100644
--- a/intern/audaspace/FX/AUD_LoopReader.h
+++ b/intern/audaspace/FX/AUD_LoopReader.h
@@ -43,11 +43,6 @@ class AUD_LoopReader : public AUD_EffectReader
{
private:
/**
- * The playback buffer.
- */
- AUD_Buffer m_buffer;
-
- /**
* The loop count.
*/
const int m_count;
@@ -73,7 +68,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_LOOPREADER
diff --git a/intern/audaspace/FX/AUD_ReverseReader.cpp b/intern/audaspace/FX/AUD_ReverseReader.cpp
index 8ca9f8609bb..030896d2eae 100644
--- a/intern/audaspace/FX/AUD_ReverseReader.cpp
+++ b/intern/audaspace/FX/AUD_ReverseReader.cpp
@@ -60,7 +60,7 @@ int AUD_ReverseReader::getPosition() const
return m_position;
}
-void AUD_ReverseReader::read(int & length, sample_t* & buffer)
+void AUD_ReverseReader::read(int & length, sample_t* buffer)
{
// first correct the length
if(m_position + length > m_length)
@@ -72,36 +72,34 @@ void AUD_ReverseReader::read(int & length, sample_t* & buffer)
return;
}
- AUD_Specs specs = getSpecs();
- int samplesize = AUD_SAMPLE_SIZE(specs);
+ const AUD_Specs specs = getSpecs();
+ const int samplesize = AUD_SAMPLE_SIZE(specs);
- // resize buffer if needed
- if(m_buffer.getSize() < length * samplesize)
- m_buffer.resize(length * samplesize);
+ sample_t temp[specs.channels];
- buffer = m_buffer.getBuffer();
-
- sample_t* buf;
int len = length;
// read from reader
m_reader->seek(m_length - m_position - len);
- m_reader->read(len, buf);
+ m_reader->read(len, buffer);
// set null if reader didn't give enough data
if(len < length)
- {
memset(buffer, 0, (length - len) * samplesize);
- buffer += (length - len) * specs.channels;
- }
// copy the samples reverted
- for(int i = 0; i < len; i++)
+ for(int i = 0; i < length / 2; i++)
+ {
+ memcpy(temp,
+ buffer + (len - 1 - i) * specs.channels,
+ samplesize);
+ memcpy(buffer + (len - 1 - i) * specs.channels,
+ buffer + i * specs.channels,
+ samplesize);
memcpy(buffer + i * specs.channels,
- buf + (len - 1 - i) * specs.channels,
+ temp,
samplesize);
+ }
m_position += length;
-
- buffer = m_buffer.getBuffer();
}
diff --git a/intern/audaspace/FX/AUD_ReverseReader.h b/intern/audaspace/FX/AUD_ReverseReader.h
index d8086e08534..8525acaab36 100644
--- a/intern/audaspace/FX/AUD_ReverseReader.h
+++ b/intern/audaspace/FX/AUD_ReverseReader.h
@@ -52,11 +52,6 @@ private:
*/
int m_position;
- /**
- * The playback buffer.
- */
- AUD_Buffer m_buffer;
-
// hide copy constructor and operator=
AUD_ReverseReader(const AUD_ReverseReader&);
AUD_ReverseReader& operator=(const AUD_ReverseReader&);
@@ -73,7 +68,7 @@ public:
virtual void seek(int position);
virtual int getLength() const;
virtual int getPosition() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_REVERSEREADER
diff --git a/intern/audaspace/FX/AUD_SuperposeReader.cpp b/intern/audaspace/FX/AUD_SuperposeReader.cpp
index 6f39dcadf40..3ad2420fc91 100644
--- a/intern/audaspace/FX/AUD_SuperposeReader.cpp
+++ b/intern/audaspace/FX/AUD_SuperposeReader.cpp
@@ -82,24 +82,22 @@ AUD_Specs AUD_SuperposeReader::getSpecs() const
return m_reader1->getSpecs();
}
-void AUD_SuperposeReader::read(int & length, sample_t* & buffer)
+void AUD_SuperposeReader::read(int & length, sample_t* buffer)
{
AUD_Specs specs = m_reader1->getSpecs();
int samplesize = AUD_SAMPLE_SIZE(specs);
if(m_buffer.getSize() < length * samplesize)
m_buffer.resize(length * samplesize);
- buffer = m_buffer.getBuffer();
int len1 = length;
- sample_t* buf;
- m_reader1->read(len1, buf);
- memcpy(buffer, buf, len1 * samplesize);
+ m_reader1->read(len1, buffer);
if(len1 < length)
memset(buffer + len1 * specs.channels, 0, (length - len1) * samplesize);
int len2 = length;
+ sample_t* buf = m_buffer.getBuffer();
m_reader2->read(len2, buf);
for(int i = 0; i < len2 * specs.channels; i++)
diff --git a/intern/audaspace/FX/AUD_SuperposeReader.h b/intern/audaspace/FX/AUD_SuperposeReader.h
index 26e4b138dfa..5a2a2a1d8d1 100644
--- a/intern/audaspace/FX/AUD_SuperposeReader.h
+++ b/intern/audaspace/FX/AUD_SuperposeReader.h
@@ -80,7 +80,7 @@ public:
virtual int getLength() const;
virtual int getPosition() const;
virtual AUD_Specs getSpecs() const;
- virtual void read(int & length, sample_t* & buffer);
+ virtual void read(int & length, sample_t* buffer);
};
#endif //AUD_SUPERPOSEREADER