mirror of
https://github.com/LMMS/lmms.git
synced 2026-06-08 14:16:07 -04:00
Move BufferPool::clear to MixHelpers and rewrite
* Move out of BufferPool because it's not related to memory allocation * Rewrite because memset() is not portable because it sets all bytes to zero which depends on the platform's float representation of 0.0 to be all zero bytes
This commit is contained in:
@@ -34,12 +34,5 @@ class LMMS_EXPORT BufferPool
|
||||
public:
|
||||
static void init( fpp_t framesPerPeriod );
|
||||
static sampleFrame * acquire();
|
||||
// audio-buffer-mgm
|
||||
static void clear( sampleFrame * ab, const f_cnt_t frames,
|
||||
const f_cnt_t offset = 0 );
|
||||
#ifndef LMMS_DISABLE_SURROUND
|
||||
static void clear( surroundSampleFrame * ab, const f_cnt_t frames,
|
||||
const f_cnt_t offset = 0 );
|
||||
#endif
|
||||
static void release( sampleFrame * buf );
|
||||
};
|
||||
|
||||
@@ -37,6 +37,11 @@ bool useNaNHandler();
|
||||
|
||||
void setNaNHandler( bool use );
|
||||
|
||||
void clear(sampleFrame * src, int frames);
|
||||
#ifndef LMMS_DISABLE_SURROUND
|
||||
void clear(surroundSampleFrame * src, int frames);
|
||||
#endif
|
||||
|
||||
bool sanitize( sampleFrame * src, int frames );
|
||||
|
||||
/*! \brief Add samples from src to dst */
|
||||
|
||||
@@ -42,20 +42,6 @@ sampleFrame * BufferPool::acquire()
|
||||
return reinterpret_cast<sampleFrame*>(pool->allocate());
|
||||
}
|
||||
|
||||
void BufferPool::clear( sampleFrame *ab, const f_cnt_t frames, const f_cnt_t offset )
|
||||
{
|
||||
memset( ab + offset, 0, sizeof( *ab ) * frames );
|
||||
}
|
||||
|
||||
#ifndef LMMS_DISABLE_SURROUND
|
||||
void BufferPool::clear( surroundSampleFrame * ab, const f_cnt_t frames,
|
||||
const f_cnt_t offset )
|
||||
{
|
||||
memset( ab + offset, 0, sizeof( *ab ) * frames );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void BufferPool::release( sampleFrame * buf )
|
||||
{
|
||||
pool->deallocate(buf);
|
||||
|
||||
@@ -74,7 +74,7 @@ FxChannel::FxChannel( int idx, Model * _parent ) :
|
||||
m_queued( false ),
|
||||
m_dependenciesMet(0)
|
||||
{
|
||||
BufferPool::clear( m_buffer, Engine::mixer()->framesPerPeriod() );
|
||||
MixHelpers::clear( m_buffer, Engine::mixer()->framesPerPeriod() );
|
||||
}
|
||||
|
||||
|
||||
@@ -585,7 +585,7 @@ void FxMixer::mixToChannel( const sampleFrame * _buf, fx_ch_t _ch )
|
||||
|
||||
void FxMixer::prepareMasterMix()
|
||||
{
|
||||
BufferPool::clear( m_fxChannels[0]->m_buffer,
|
||||
MixHelpers::clear( m_fxChannels[0]->m_buffer,
|
||||
Engine::mixer()->framesPerPeriod() );
|
||||
}
|
||||
|
||||
@@ -658,7 +658,7 @@ void FxMixer::masterMix( sampleFrame * _buf )
|
||||
// reset channel process state
|
||||
for( int i = 0; i < numChannels(); ++i)
|
||||
{
|
||||
BufferPool::clear( m_fxChannels[i]->m_buffer,
|
||||
MixHelpers::clear( m_fxChannels[i]->m_buffer,
|
||||
Engine::mixer()->framesPerPeriod() );
|
||||
m_fxChannels[i]->reset();
|
||||
m_fxChannels[i]->m_queued = false;
|
||||
|
||||
@@ -86,6 +86,22 @@ void setNaNHandler( bool use )
|
||||
s_NaNHandler = use;
|
||||
}
|
||||
|
||||
void clear(sampleFrame * src, int frames)
|
||||
{
|
||||
for (sampleFrame* frame = src; frame < src + frames; frame++) {
|
||||
(*frame)[0] = (*frame)[1] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef LMMS_DISABLE_SURROUND
|
||||
void clear(surroundSampleFrame *src, int frames)
|
||||
{
|
||||
for (surroundSampleFrame* frame = src; frame < src + frames; frame++) {
|
||||
(*frame)[0] = (*frame)[1] = 0.0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*! \brief Function for sanitizing a buffer of infs/nans - returns true if those are found */
|
||||
bool sanitize( sampleFrame * src, int frames )
|
||||
{
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "ConfigManager.h"
|
||||
#include "SamplePlayHandle.h"
|
||||
#include "Memory.h"
|
||||
#include "MixHelpers.h"
|
||||
#include "BufferPool.h"
|
||||
|
||||
// platform-specific audio-interface-classes
|
||||
@@ -97,7 +98,7 @@ Mixer::Mixer( bool renderOnly ) :
|
||||
m_inputBufferFrames[i] = 0;
|
||||
m_inputBufferSize[i] = DEFAULT_BUFFER_SIZE * 100;
|
||||
m_inputBuffer[i] = new sampleFrame[ DEFAULT_BUFFER_SIZE * 100 ];
|
||||
BufferPool::clear( m_inputBuffer[i], m_inputBufferSize[i] );
|
||||
MixHelpers::clear( m_inputBuffer[i], m_inputBufferSize[i] );
|
||||
}
|
||||
|
||||
// determine FIFO size and number of frames per period
|
||||
@@ -140,7 +141,7 @@ Mixer::Mixer( bool renderOnly ) :
|
||||
{
|
||||
m_readBuf = alloc.allocate( m_framesPerPeriod );
|
||||
|
||||
BufferPool::clear( m_readBuf, m_framesPerPeriod );
|
||||
MixHelpers::clear( m_readBuf, m_framesPerPeriod );
|
||||
m_bufferPool.push_back( m_readBuf );
|
||||
}
|
||||
|
||||
@@ -416,7 +417,7 @@ const surroundSampleFrame * Mixer::renderNextBuffer()
|
||||
m_readBuf = m_bufferPool[m_readBuffer];
|
||||
|
||||
// clear last audio-buffer
|
||||
BufferPool::clear( m_writeBuf, m_framesPerPeriod );
|
||||
MixHelpers::clear( m_writeBuf, m_framesPerPeriod );
|
||||
|
||||
// prepare master mix (clear internal buffers etc.)
|
||||
FxMixer * fxMixer = Engine::fxMixer();
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
#include "Oscillator.h"
|
||||
|
||||
#include "BufferPool.h"
|
||||
#include "Engine.h"
|
||||
#include "MixHelpers.h"
|
||||
#include "Mixer.h"
|
||||
#include "AutomatableModel.h"
|
||||
|
||||
@@ -59,7 +59,7 @@ void Oscillator::update( sampleFrame * _ab, const fpp_t _frames,
|
||||
{
|
||||
if( m_freq >= Engine::mixer()->processingSampleRate() / 2 )
|
||||
{
|
||||
BufferPool::clear( _ab, _frames );
|
||||
MixHelpers::clear( _ab, _frames );
|
||||
return;
|
||||
}
|
||||
if( m_subOsc != NULL )
|
||||
|
||||
@@ -22,10 +22,11 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "PlayHandle.h"
|
||||
#include "BufferPool.h"
|
||||
#include "PlayHandle.h"
|
||||
#include "Engine.h"
|
||||
#include "Mixer.h"
|
||||
#include "MixHelpers.h"
|
||||
|
||||
#include <QtCore/QThread>
|
||||
#include <QDebug>
|
||||
@@ -54,7 +55,7 @@ void PlayHandle::doProcessing()
|
||||
if( m_usesBuffer )
|
||||
{
|
||||
m_bufferReleased = false;
|
||||
BufferPool::clear(m_playHandleBuffer, Engine::mixer()->framesPerPeriod());
|
||||
MixHelpers::clear(m_playHandleBuffer, Engine::mixer()->framesPerPeriod());
|
||||
play( buffer() );
|
||||
}
|
||||
else
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
#include <QDebug>
|
||||
#endif
|
||||
|
||||
#include "BufferPool.h"
|
||||
#include "RemotePlugin.h"
|
||||
#include "Mixer.h"
|
||||
#include "MixHelpers.h"
|
||||
#include "Engine.h"
|
||||
|
||||
#include <QDebug>
|
||||
@@ -287,7 +287,7 @@ bool RemotePlugin::process( const sampleFrame * _in_buf,
|
||||
{
|
||||
if( _out_buf != NULL )
|
||||
{
|
||||
BufferPool::clear( _out_buf, frames );
|
||||
MixHelpers::clear( _out_buf, frames );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -306,7 +306,7 @@ bool RemotePlugin::process( const sampleFrame * _in_buf,
|
||||
}
|
||||
if( _out_buf != NULL )
|
||||
{
|
||||
BufferPool::clear( _out_buf, frames );
|
||||
MixHelpers::clear( _out_buf, frames );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -380,7 +380,7 @@ bool RemotePlugin::process( const sampleFrame * _in_buf,
|
||||
sampleFrame * o = (sampleFrame *) ( m_shm +
|
||||
m_inputCount*frames );
|
||||
// clear buffer, if plugin didn't fill up both channels
|
||||
BufferPool::clear( _out_buf, frames );
|
||||
MixHelpers::clear( _out_buf, frames );
|
||||
|
||||
for( ch_cnt_t ch = 0; ch <
|
||||
qMin<int>( DEFAULT_CHANNELS, outputs ); ++ch )
|
||||
|
||||
@@ -111,7 +111,7 @@ void AudioPort::doProcessing()
|
||||
const fpp_t fpp = Engine::mixer()->framesPerPeriod();
|
||||
|
||||
// clear the buffer
|
||||
BufferPool::clear( m_portBuffer, fpp );
|
||||
MixHelpers::clear( m_portBuffer, fpp );
|
||||
|
||||
//qDebug( "Playhandles: %d", m_playHandles.size() );
|
||||
for( PlayHandle * ph : m_playHandles ) // now we mix all playhandle buffers into the audioport buffer
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
#include "gui_templates.h"
|
||||
#include "MainWindow.h"
|
||||
#include "Mixer.h"
|
||||
#include "MixHelpers.h"
|
||||
#include "Engine.h"
|
||||
#include "ToolTip.h"
|
||||
#include "Song.h"
|
||||
|
||||
#include "BufferPool.h"
|
||||
|
||||
|
||||
VisualizationWidget::VisualizationWidget( const QPixmap & _bg, QWidget * _p,
|
||||
@@ -55,7 +55,7 @@ VisualizationWidget::VisualizationWidget( const QPixmap & _bg, QWidget * _p,
|
||||
const fpp_t frames = Engine::mixer()->framesPerPeriod();
|
||||
m_buffer = new sampleFrame[frames];
|
||||
|
||||
BufferPool::clear( m_buffer, frames );
|
||||
MixHelpers::clear( m_buffer, frames );
|
||||
|
||||
|
||||
ToolTip::add( this, tr( "Oscilloscope" ) );
|
||||
|
||||
Reference in New Issue
Block a user