diff options
author | Joerg Mueller <nexyon@gmail.com> | 2011-06-22 00:14:53 +0400 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2011-06-22 00:14:53 +0400 |
commit | cc71dcc218d9ee4612bfe955be6f00be521be5b1 (patch) | |
tree | 5f868efc11f940b72cdf0e0c5d19f27e7d3067c7 /intern/audaspace/SRC | |
parent | 7ba4362c72c3ccd4763762414bd928682a51b7ce (diff) |
3D Audio GSoC:
Streaming improved.
Diffstat (limited to 'intern/audaspace/SRC')
-rw-r--r-- | intern/audaspace/SRC/AUD_SRCResampleReader.cpp | 12 | ||||
-rw-r--r-- | intern/audaspace/SRC/AUD_SRCResampleReader.h | 7 |
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 |