Skip to content

Commit

Permalink
Fix warnings: zeroing non-trivial type
Browse files Browse the repository at this point in the history
Fix several warnings of the following form:

Warnung: »void* memset(void*, int, size_t)« Säubern eines Objekts von nichttrivialem Typ »class lmms::sampleFrame«; use assignment or value-initialization instead [-Wclass-memaccess]
  • Loading branch information
michaelgregorius committed Apr 1, 2024
1 parent a433fd3 commit 896d70c
Show file tree
Hide file tree
Showing 10 changed files with 28 additions and 19 deletions.
3 changes: 1 addition & 2 deletions include/DummyInstrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ class DummyInstrument : public Instrument

void playNote( NotePlayHandle *, sampleFrame * buffer ) override
{
memset( buffer, 0, sizeof( sampleFrame ) *
Engine::audioEngine()->framesPerPeriod() );
zeroSampleFrames(buffer, Engine::audioEngine()->framesPerPeriod());
}

void saveSettings( QDomDocument &, QDomElement & ) override
Expand Down
10 changes: 10 additions & 0 deletions include/lmms_basics.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,16 @@ class sampleFrame
std::array<sample_t, DEFAULT_CHANNELS> m_samples;
};

inline void zeroSampleFrames(sampleFrame* buffer, fpp_t frames)
{
//memset(buffer, 0, sizeof( sampleFrame ) * frames);

for (fpp_t i = 0; i < frames; ++i)
{
buffer[i] = sampleFrame();
}
}

constexpr std::size_t LMMS_ALIGN_SIZE = 16;


Expand Down
2 changes: 1 addition & 1 deletion plugins/AudioFileProcessor/AudioFileProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ void AudioFileProcessor::playNote( NotePlayHandle * _n,
}
else
{
memset( _working_buffer, 0, ( frames + offset ) * sizeof( sampleFrame ) );
zeroSampleFrames(_working_buffer, frames + offset);
emit isPlaying( 0 );
}
}
Expand Down
2 changes: 1 addition & 1 deletion plugins/CarlaBase/Carla.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ void CarlaInstrument::play(sampleFrame* workingBuffer)
{
const uint bufsize = Engine::audioEngine()->framesPerPeriod();

std::memset(workingBuffer, 0, sizeof(sample_t)*bufsize*DEFAULT_CHANNELS);
zeroSampleFrames(workingBuffer, bufsize);

if (fHandle == nullptr)
{
Expand Down
2 changes: 1 addition & 1 deletion plugins/CrossoverEQ/CrossoverEQ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ bool CrossoverEQEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames

m_needsUpdate = false;

memset( m_work, 0, sizeof( sampleFrame ) * frames );
zeroSampleFrames(m_work, frames);

// run temp bands
for( int f = 0; f < frames; ++f )
Expand Down
2 changes: 1 addition & 1 deletion plugins/Patman/Patman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ void PatmanInstrument::playNote( NotePlayHandle * _n,
}
else
{
memset( _working_buffer, 0, ( frames + offset ) * sizeof( sampleFrame ) );
zeroSampleFrames(_working_buffer, frames + offset);
}
}

Expand Down
2 changes: 1 addition & 1 deletion plugins/Sfxr/Sfxr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ void SfxrInstrument::playNote( NotePlayHandle * _n, sampleFrame * _working_buffe
}
else if( static_cast<SfxrSynth*>(_n->m_pluginData)->isPlaying() == false )
{
memset(_working_buffer + offset, 0, sizeof(sampleFrame) * frameNum);
zeroSampleFrames(_working_buffer + offset, frameNum);
_n->noteOff();
return;
}
Expand Down
2 changes: 1 addition & 1 deletion src/core/BufferManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ sampleFrame * BufferManager::acquire()

void BufferManager::clear( sampleFrame *ab, const f_cnt_t frames, const f_cnt_t offset )
{
memset( ab + offset, 0, sizeof( *ab ) * frames );
zeroSampleFrames(ab + offset, frames);
}


Expand Down
16 changes: 8 additions & 8 deletions src/core/RingBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ RingBuffer::RingBuffer( f_cnt_t size ) :
m_size( size + m_fpp )
{
m_buffer = new sampleFrame[ m_size ];
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
zeroSampleFrames(m_buffer, m_size);
m_position = 0;
}

Expand All @@ -49,7 +49,7 @@ RingBuffer::RingBuffer( float size ) :
{
m_size = msToFrames( size ) + m_fpp;
m_buffer = new sampleFrame[ m_size ];
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
zeroSampleFrames(m_buffer, m_size);
m_position = 0;
setSamplerateAware( true );
//qDebug( "m_size %d, m_position %d", m_size, m_position );
Expand All @@ -64,7 +64,7 @@ RingBuffer::~RingBuffer()

void RingBuffer::reset()
{
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
zeroSampleFrames(m_buffer, m_size);
m_position = 0;
}

Expand All @@ -75,7 +75,7 @@ void RingBuffer::changeSize( f_cnt_t size )
sampleFrame * tmp = m_buffer;
m_size = size;
m_buffer = new sampleFrame[ m_size ];
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
zeroSampleFrames(m_buffer, m_size);
m_position = 0;
delete[] tmp;
}
Expand Down Expand Up @@ -123,18 +123,18 @@ void RingBuffer::pop( sampleFrame * dst )
if( m_position + m_fpp <= m_size ) // we won't go over the edge so we can just memcpy here
{
memcpy( dst, & m_buffer [ m_position ], m_fpp * sizeof( sampleFrame ) );
memset( & m_buffer[m_position], 0, m_fpp * sizeof( sampleFrame ) );
zeroSampleFrames(&m_buffer[m_position], m_fpp);
}
else
{
f_cnt_t first = m_size - m_position;
f_cnt_t second = m_fpp - first;

memcpy( dst, & m_buffer [ m_position ], first * sizeof( sampleFrame ) );
memset( & m_buffer [m_position], 0, first * sizeof( sampleFrame ) );
zeroSampleFrames(&m_buffer[m_position], first);

memcpy( & dst [first], m_buffer, second * sizeof( sampleFrame ) );
memset( m_buffer, 0, second * sizeof( sampleFrame ) );
zeroSampleFrames(m_buffer, second);
}

m_position = ( m_position + m_fpp ) % m_size;
Expand Down Expand Up @@ -312,7 +312,7 @@ void RingBuffer::updateSamplerate()
m_samplerate = Engine::audioEngine()->processingSampleRate();
delete[] m_buffer;
m_buffer = new sampleFrame[ m_size ];
memset( m_buffer, 0, m_size * sizeof( sampleFrame ) );
zeroSampleFrames(m_buffer, m_size);
m_position = 0;
}

Expand Down
6 changes: 3 additions & 3 deletions src/core/SamplePlayHandle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ void SamplePlayHandle::play( sampleFrame * buffer )
//play( 0, _try_parallelizing );
if( framesDone() >= totalFrames() )
{
memset( buffer, 0, sizeof( sampleFrame ) * fpp );
zeroSampleFrames(buffer, fpp);
return;
}

Expand All @@ -101,7 +101,7 @@ void SamplePlayHandle::play( sampleFrame * buffer )
// apply offset for the first period
if( framesDone() == 0 )
{
memset( buffer, 0, sizeof( sampleFrame ) * offset() );
zeroSampleFrames(buffer, offset());
workingBuffer += offset();
frames -= offset();
}
Expand All @@ -116,7 +116,7 @@ void SamplePlayHandle::play( sampleFrame * buffer )
// it is used only for previews, SampleTracks and the metronome.
if (!m_sample->play(workingBuffer, &m_state, frames, DefaultBaseFreq))
{
memset(workingBuffer, 0, frames * sizeof(sampleFrame));
zeroSampleFrames(workingBuffer, frames);
}
}

Expand Down

0 comments on commit 896d70c

Please sign in to comment.