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/ffmpeg/AUD_FFMPEGReader.cpp
parent8ff0c2e10720bd6e583a6b133b75e7bdff27a5f8 (diff)
3D Audio GSoC:
Changed Readers to top-down architecture instead of bottom-up.
Diffstat (limited to 'intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp')
-rw-r--r--intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
index ed6ca5d142f..bacbbf2a725 100644
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
+++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
@@ -341,14 +341,14 @@ void AUD_FFMPEGReader::seek(int position)
{
// read until we're at the right position
int length = AUD_DEFAULT_BUFFER_SIZE;
- sample_t* buffer;
+ AUD_Buffer buffer(length * AUD_SAMPLE_SIZE(m_specs));
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);
+ read(length, buffer.getBuffer());
}
}
}
@@ -381,7 +381,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, sample_t* buffer)
{
// read packages and decode them
AVPacket packet;
@@ -390,11 +390,7 @@ void AUD_FFMPEGReader::read(int & length, sample_t* & buffer)
int left = length;
int sample_size = AUD_DEVICE_SAMPLE_SIZE(m_specs);
- // resize output buffer if necessary
- if(m_buffer.getSize() < length * AUD_SAMPLE_SIZE(m_specs))
- m_buffer.resize(length * AUD_SAMPLE_SIZE(m_specs));
-
- buffer = m_buffer.getBuffer();
+ sample_t* buf = buffer;
pkgbuf_pos = m_pkgbuf_left;
m_pkgbuf_left = 0;
@@ -402,9 +398,9 @@ void AUD_FFMPEGReader::read(int & length, sample_t* & buffer)
if(pkgbuf_pos > 0)
{
data_size = AUD_MIN(pkgbuf_pos, left * sample_size);
- m_convert((data_t*) buffer, (data_t*) m_pkgbuf.getBuffer(),
+ m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(),
data_size / AUD_FORMAT_SIZE(m_specs.format));
- buffer += data_size / AUD_FORMAT_SIZE(m_specs.format);
+ buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
left -= data_size/sample_size;
}
@@ -419,9 +415,9 @@ void AUD_FFMPEGReader::read(int & length, sample_t* & buffer)
// copy to output buffer
data_size = AUD_MIN(pkgbuf_pos, left * sample_size);
- m_convert((data_t*) buffer, (data_t*) m_pkgbuf.getBuffer(),
+ m_convert((data_t*) buf, (data_t*) m_pkgbuf.getBuffer(),
data_size / AUD_FORMAT_SIZE(m_specs.format));
- buffer += data_size / AUD_FORMAT_SIZE(m_specs.format);
+ buf += data_size / AUD_FORMAT_SIZE(m_specs.format);
left -= data_size/sample_size;
}
av_free_packet(&packet);
@@ -435,8 +431,6 @@ void AUD_FFMPEGReader::read(int & length, sample_t* & buffer)
pkgbuf_pos-data_size);
}
- buffer = m_buffer.getBuffer();
-
if(left > 0)
length -= left;
m_position += length;