SampleBuffer: always sanitize start and end frame settings
An end frame variable always has to be greater than a start frame in order to prevent crashes due to negative frame counts being calculated in getSampleFragment() otherwise. Closes #629.
This commit is contained in:
@@ -154,6 +154,25 @@ SampleBuffer::~SampleBuffer()
|
||||
|
||||
|
||||
|
||||
void SampleBuffer::sanitizeSettings()
|
||||
{
|
||||
m_varLock.lock();
|
||||
|
||||
if( m_startFrame >= m_endFrame )
|
||||
{
|
||||
m_endFrame = m_startFrame+1;
|
||||
}
|
||||
|
||||
if( m_loopStartFrame >= m_loopEndFrame )
|
||||
{
|
||||
m_loopEndFrame = m_loopStartFrame+1;
|
||||
}
|
||||
|
||||
m_varLock.unlock();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void SampleBuffer::update( bool _keep_settings )
|
||||
{
|
||||
@@ -828,6 +847,27 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
|
||||
|
||||
|
||||
|
||||
void SampleBuffer::setLoopStartFrame( f_cnt_t start )
|
||||
{
|
||||
m_varLock.lock();
|
||||
m_loopStartFrame = start;
|
||||
m_varLock.unlock();
|
||||
|
||||
sanitizeSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SampleBuffer::setLoopEndFrame( f_cnt_t end )
|
||||
{
|
||||
m_varLock.lock();
|
||||
m_loopEndFrame = end;
|
||||
m_varLock.unlock();
|
||||
|
||||
sanitizeSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
QString SampleBuffer::openAudioFile() const
|
||||
{
|
||||
@@ -1240,21 +1280,25 @@ void SampleBuffer::loadFromBase64( const QString & _data )
|
||||
|
||||
|
||||
|
||||
void SampleBuffer::setStartFrame( const f_cnt_t _s )
|
||||
void SampleBuffer::setStartFrame( f_cnt_t start )
|
||||
{
|
||||
m_varLock.lock();
|
||||
m_loopStartFrame = m_startFrame = _s;
|
||||
m_loopStartFrame = m_startFrame = start;
|
||||
m_varLock.unlock();
|
||||
|
||||
sanitizeSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void SampleBuffer::setEndFrame( const f_cnt_t _e )
|
||||
void SampleBuffer::setEndFrame( f_cnt_t end )
|
||||
{
|
||||
m_varLock.lock();
|
||||
m_loopEndFrame = m_endFrame = _e;
|
||||
m_loopEndFrame = m_endFrame = end;
|
||||
m_varLock.unlock();
|
||||
|
||||
sanitizeSettings();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user