QSoundEffect: fix changing the loop count while playing.

The running count was not updated with the new value.

Auto-test added and documentation updated to be more clear about this
behavior.

Task-number: QTBUG-36643

Change-Id: I29e98ca4679f950a75133b21873738bcb72d23d4
Reviewed-by: Christian Stromme <christian.stromme@digia.com>
This commit is contained in:
Yoann Lopes
2014-02-20 19:42:20 +01:00
committed by The Qt Project
parent 92323612d0
commit d964388b38
4 changed files with 96 additions and 13 deletions

View File

@@ -184,16 +184,20 @@ void QSoundEffect::setSource(const QUrl &url)
/*!
\qmlproperty int QtMultimedia::SoundEffect::loops
This property provides a way to control the number of times to repeat the sound on each play().
This property holds the number of times the sound is played. A value of 0 or 1 means
the sound will be played only once; set to SoundEffect.Infinite to enable infinite looping.
Set to SoundEffect.Infinite to enable infinite looping.
The value can be changed while the sound effect is playing, in which case it will update
the remaining loops to the new value.
*/
/*!
\property QSoundEffect::loops
This property provides a way to control the number of times to repeat the sound on each play().
This property holds the number of times the sound is played. A value of 0 or 1 means
the sound will be played only once; set to SoundEffect.Infinite to enable infinite looping.
Set to QSoundEffect::Infinite to enable infinite looping.
The value can be changed while the sound effect is playing, in which case it will update
the remaining loops to the new value.
*/
/*!
@@ -213,8 +217,14 @@ int QSoundEffect::loopCount() const
*/
/*!
Set the total number of times to repeat playing this sound effect on each play() call to \a loopCount.
Pass \c QSoundEffect::Infinite to repeat until stop() is called.
Set the total number of times to play this sound effect to \a loopCount.
Setting the loop count to 0 or 1 means the sound effect will be played only once;
pass \c QSoundEffect::Infinite to repeat indefinitely. The loop count can be changed while
the sound effect is playing, in which case it will update the remaining loops to
the new \a loopCount.
\sa loopsRemaining()
*/
void QSoundEffect::setLoopCount(int loopCount)
{

View File

@@ -516,6 +516,8 @@ void QSoundEffectPrivate::setLoopCount(int loopCount)
if (loopCount == 0)
loopCount = 1;
m_loopCount = loopCount;
if (m_playing)
setLoopsRemaining(loopCount);
}
qreal QSoundEffectPrivate::volume() const
@@ -647,7 +649,7 @@ void QSoundEffectPrivate::play()
emptyStream();
return;
}
m_runningCount = m_loopCount;
setLoopsRemaining(m_loopCount);
playSample();
}

View File

@@ -172,7 +172,8 @@ void QSoundEffectPrivate::setLoopCount(int loopCount)
if (loopCount == 0)
loopCount = 1;
d->m_loopCount = loopCount;
d->m_runningCount = loopCount;
if (d->m_playing)
setLoopsRemaining(loopCount);
}
qreal QSoundEffectPrivate::volume() const
@@ -228,7 +229,7 @@ QSoundEffect::Status QSoundEffectPrivate::status() const
void QSoundEffectPrivate::play()
{
d->m_offset = 0;
d->m_runningCount = d->m_loopCount;
setLoopsRemaining(d->m_loopCount);
#ifdef QT_QAUDIO_DEBUG
qDebug() << this << "play";
#endif
@@ -283,7 +284,7 @@ void QSoundEffectPrivate::setPlaying(bool playing)
void QSoundEffectPrivate::setLoopsRemaining(int loopsRemaining)
{
if (!d->m_runningCount && loopsRemaining)
if (d->m_runningCount == loopsRemaining)
return;
#ifdef QT_QAUDIO_DEBUG
qDebug() << this << "setLoopsRemaining " << loopsRemaining;