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-22 00:14:53 +0400
committerJoerg Mueller <nexyon@gmail.com>2011-06-22 00:14:53 +0400
commitcc71dcc218d9ee4612bfe955be6f00be521be5b1 (patch)
tree5f868efc11f940b72cdf0e0c5d19f27e7d3067c7 /intern/audaspace/SRC
parent7ba4362c72c3ccd4763762414bd928682a51b7ce (diff)
3D Audio GSoC:
Streaming improved.
Diffstat (limited to 'intern/audaspace/SRC')
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleReader.cpp12
-rw-r--r--intern/audaspace/SRC/AUD_SRCResampleReader.h7
2 files changed, 14 insertions, 5 deletions
diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
index 85f935bab8e..59854a7a2c4 100644
--- a/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
+++ b/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
@@ -77,7 +77,7 @@ long AUD_SRCResampleReader::doCallback(float** data)
int length = m_buffer.getSize() / AUD_SAMPLE_SIZE(m_tspecs);
*data = m_buffer.getBuffer();
- m_reader->read(length, *data);
+ m_reader->read(length, m_eos, *data);
return length;
}
@@ -104,13 +104,17 @@ AUD_Specs AUD_SRCResampleReader::getSpecs() const
return m_tspecs;
}
-void AUD_SRCResampleReader::read(int & length, sample_t* buffer)
+void AUD_SRCResampleReader::read(int& length, bool& eos, sample_t* buffer)
{
- int size = length * AUD_SAMPLE_SIZE(m_tspecs);
+ int size = length;
- m_buffer.assureSize(size);
+ m_buffer.assureSize(length * AUD_SAMPLE_SIZE(m_tspecs));
+
+ m_eos = false;
length = src_callback_read(m_src, m_factor, length, buffer);
m_position += length;
+
+ eos = m_eos && (length < size);
}
diff --git a/intern/audaspace/SRC/AUD_SRCResampleReader.h b/intern/audaspace/SRC/AUD_SRCResampleReader.h
index 2d67e636bd7..5b210a61e70 100644
--- a/intern/audaspace/SRC/AUD_SRCResampleReader.h
+++ b/intern/audaspace/SRC/AUD_SRCResampleReader.h
@@ -73,6 +73,11 @@ private:
*/
int m_position;
+ /**
+ * Whether reader reached end of stream.
+ */
+ bool m_eos;
+
// hide copy constructor and operator=
AUD_SRCResampleReader(const AUD_SRCResampleReader&);
AUD_SRCResampleReader& operator=(const AUD_SRCResampleReader&);
@@ -104,7 +109,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, bool& eos, sample_t* buffer);
};
#endif //AUD_SRCRESAMPLEREADER