3D Audio GSoC:
Buffer.assureSize - a function that should long have been there.
This commit is contained in:
parent
f2ceca4eb0
commit
3d932ba496
@ -87,8 +87,7 @@ 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);
|
||||
m_buffer.assureSize(length * samplesize);
|
||||
|
||||
int len1 = length;
|
||||
m_reader1->read(len1, buffer);
|
||||
|
@ -160,8 +160,7 @@ void AUD_OpenALDevice::updateStreams()
|
||||
if(info)
|
||||
{
|
||||
specs.specs = sound->reader->getSpecs();
|
||||
if(m_buffer.getSize() < m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs))
|
||||
m_buffer.resize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
|
||||
m_buffer.assureSize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
|
||||
|
||||
// for all empty buffers
|
||||
while(info--)
|
||||
@ -582,8 +581,7 @@ AUD_Handle* AUD_OpenALDevice::play(AUD_Reference<AUD_IReader> reader, bool keep)
|
||||
|
||||
try
|
||||
{
|
||||
if(m_buffer.getSize() < m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs))
|
||||
m_buffer.resize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
|
||||
m_buffer.assureSize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
|
||||
int length;
|
||||
|
||||
for(int i = 0; i < AUD_OPENAL_CYCLE_BUFFERS; i++)
|
||||
@ -884,8 +882,7 @@ bool AUD_OpenALDevice::seek(AUD_Handle* handle, float position)
|
||||
int length;
|
||||
AUD_DeviceSpecs specs = m_specs;
|
||||
specs.specs = alhandle->reader->getSpecs();
|
||||
if(m_buffer.getSize() < m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs))
|
||||
m_buffer.resize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
|
||||
m_buffer.assureSize(m_buffersize * AUD_DEVICE_SAMPLE_SIZE(specs));
|
||||
|
||||
for(int i = 0; i < AUD_OPENAL_CYCLE_BUFFERS; i++)
|
||||
{
|
||||
|
@ -108,8 +108,7 @@ void AUD_SRCResampleReader::read(int & length, sample_t* buffer)
|
||||
{
|
||||
int size = length * AUD_SAMPLE_SIZE(m_tspecs);
|
||||
|
||||
if(m_buffer.getSize() < size)
|
||||
m_buffer.resize(size);
|
||||
m_buffer.assureSize(size);
|
||||
|
||||
length = src_callback_read(m_src, m_factor, length, buffer);
|
||||
|
||||
|
@ -71,8 +71,7 @@ void AUD_BandPassReader::read(int & length, sample_t* & buffer)
|
||||
|
||||
if(length > 0)
|
||||
{
|
||||
if(length * AUD_SAMPLE_SIZE(specs) > m_buffer->getSize())
|
||||
m_buffer->resize(length * AUD_SAMPLE_SIZE(specs));
|
||||
m_buffer->assureSize(length * AUD_SAMPLE_SIZE(specs));
|
||||
|
||||
if(length != m_length)
|
||||
{
|
||||
|
@ -74,3 +74,9 @@ void AUD_Buffer::resize(int size, bool keep)
|
||||
|
||||
m_size = size;
|
||||
}
|
||||
|
||||
void AUD_Buffer::assureSize(int size, bool keep)
|
||||
{
|
||||
if(m_size < size)
|
||||
resize(size, keep);
|
||||
}
|
||||
|
@ -80,6 +80,16 @@ public:
|
||||
* the data at the end will be lost.
|
||||
*/
|
||||
void resize(int size, bool keep = false);
|
||||
|
||||
/**
|
||||
* Makes sure the buffer has a minimum size.
|
||||
* If size is >= current size, nothing will happen.
|
||||
* Otherwise the buffer is resized with keep as parameter.
|
||||
* \param size The new minimum size of the buffer, measured in bytes.
|
||||
* \param keep Whether to keep the old data. If the new buffer is smaller,
|
||||
* the data at the end will be lost.
|
||||
*/
|
||||
void assureSize(int size, bool keep = false);
|
||||
};
|
||||
|
||||
#endif //AUD_BUFFER
|
||||
|
@ -78,8 +78,7 @@ AUD_Specs AUD_ChannelMapperReader::getSpecs() const
|
||||
|
||||
void AUD_ChannelMapperReader::read(int & length, sample_t* buffer)
|
||||
{
|
||||
if(m_buffer.getSize() < length * m_rch * sizeof(sample_t))
|
||||
m_buffer.resize(length * m_rch * sizeof(sample_t));
|
||||
m_buffer.assureSize(length * m_rch * sizeof(sample_t));
|
||||
|
||||
sample_t* in = m_buffer.getBuffer();
|
||||
|
||||
|
@ -79,8 +79,7 @@ void AUD_ConverterReader::read(int & length, sample_t* buffer)
|
||||
{
|
||||
int samplesize = AUD_SAMPLE_SIZE(m_reader->getSpecs());
|
||||
|
||||
if(m_buffer.getSize() < length * samplesize)
|
||||
m_buffer.resize(length * samplesize);
|
||||
m_buffer.assureSize(length * samplesize);
|
||||
|
||||
m_reader->read(length, m_buffer.getBuffer());
|
||||
|
||||
|
@ -76,8 +76,7 @@ void AUD_LinearResampleReader::read(int & length, sample_t* buffer)
|
||||
int samplesize = AUD_SAMPLE_SIZE(m_tspecs);
|
||||
int size = length * AUD_SAMPLE_SIZE(m_sspecs);
|
||||
|
||||
if(m_buffer.getSize() < size)
|
||||
m_buffer.resize(size);
|
||||
m_buffer.assureSize(size);
|
||||
|
||||
int need = ceil((m_position + length) / m_factor) + 1 - m_sposition;
|
||||
int len = need;
|
||||
|
@ -75,8 +75,7 @@ AUD_DeviceSpecs AUD_Mixer::getSpecs() const
|
||||
|
||||
void AUD_Mixer::clear(int length)
|
||||
{
|
||||
if(m_buffer.getSize() < length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs))
|
||||
m_buffer.resize(length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs));
|
||||
m_buffer.assureSize(length * m_specs.channels * AUD_SAMPLE_SIZE(m_specs));
|
||||
|
||||
m_length = length;
|
||||
|
||||
|
@ -120,8 +120,7 @@ void AUD_SequencerReader::read(int & length, sample_t* buffer)
|
||||
|
||||
int start, end, current, skip, len;
|
||||
AUD_Reference<AUD_SequencerStrip> strip;
|
||||
if(m_buffer.getSize() < length * AUD_SAMPLE_SIZE(specs))
|
||||
m_buffer.resize(length * AUD_SAMPLE_SIZE(specs));
|
||||
m_buffer.assureSize(length * AUD_SAMPLE_SIZE(specs));
|
||||
|
||||
m_mixer->clear(length);
|
||||
|
||||
|
@ -104,8 +104,7 @@ void AUD_SoftwareDevice::destroy()
|
||||
|
||||
void AUD_SoftwareDevice::mix(data_t* buffer, int length)
|
||||
{
|
||||
if(m_buffer.getSize() < length * AUD_SAMPLE_SIZE(m_specs))
|
||||
m_buffer.resize(length * AUD_SAMPLE_SIZE(m_specs));
|
||||
m_buffer.assureSize(length * AUD_SAMPLE_SIZE(m_specs));
|
||||
|
||||
lock();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user