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/ffmpeg | |
parent | 7ba4362c72c3ccd4763762414bd928682a51b7ce (diff) |
3D Audio GSoC:
Streaming improved.
Diffstat (limited to 'intern/audaspace/ffmpeg')
-rw-r--r-- | intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp | 8 | ||||
-rw-r--r-- | intern/audaspace/ffmpeg/AUD_FFMPEGReader.h | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp index bacbbf2a725..852b93d24a8 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp @@ -342,13 +342,14 @@ void AUD_FFMPEGReader::seek(int position) // read until we're at the right position int length = AUD_DEFAULT_BUFFER_SIZE; AUD_Buffer buffer(length * AUD_SAMPLE_SIZE(m_specs)); + bool eos; for(int len = position - m_position; length == AUD_DEFAULT_BUFFER_SIZE; len -= AUD_DEFAULT_BUFFER_SIZE) { if(len < AUD_DEFAULT_BUFFER_SIZE) length = len; - read(length, buffer.getBuffer()); + read(length, eos, buffer.getBuffer()); } } } @@ -381,7 +382,7 @@ AUD_Specs AUD_FFMPEGReader::getSpecs() const return m_specs.specs; } -void AUD_FFMPEGReader::read(int & length, sample_t* buffer) +void AUD_FFMPEGReader::read(int& length, bool& eos, sample_t* buffer) { // read packages and decode them AVPacket packet; @@ -431,7 +432,8 @@ void AUD_FFMPEGReader::read(int & length, sample_t* buffer) pkgbuf_pos-data_size); } - if(left > 0) + if(eos = (left > 0)) length -= left; + m_position += length; } diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h index c5bfd11dcbc..06d6fe1e5f6 100644 --- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h +++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h @@ -162,7 +162,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_FFMPEGREADER |