summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBe <be@mixxx.org>2020-05-07 07:07:43 -0500
committerGitHub <noreply@github.com>2020-05-07 07:07:43 -0500
commitd5be6d44272763cfdc1b19c4a8e5099df11b82dc (patch)
tree3a8ccd4b96adac93303144ead7b3b497837dca02 /src
parent8f7f352fa41e696fd80b8216670be817a1187e1e (diff)
parent7541fe5f2cb07c6a39cc0e188938dddb36c70715 (diff)
Merge pull request #2678 from Holzhaus/save-most-recent-loop
Fix load/save of most recent loop
Diffstat (limited to 'src')
-rw-r--r--src/mixer/basetrackplayer.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp
index 4ce79db24c..7cf563c464 100644
--- a/src/mixer/basetrackplayer.cpp
+++ b/src/mixer/basetrackplayer.cpp
@@ -218,16 +218,29 @@ void BaseTrackPlayerImpl::loadTrack(TrackPointer pTrack) {
if (!m_pChannelToCloneFrom) {
const QList<CuePointer> trackCues(m_pLoadedTrack->getCuePoints());
QListIterator<CuePointer> it(trackCues);
+ CuePointer pLoopCue;
+ // Restore loop from the first loop cue with minimum hotcue number.
+ // For the volatile "most recent loop" the hotcue number will be -1.
+ // If no such loop exists, restore a saved loop cue.
while (it.hasNext()) {
CuePointer pCue(it.next());
- if (pCue->getType() == mixxx::CueType::Loop) {
- double loopStart = pCue->getPosition();
- double loopEnd = loopStart + pCue->getLength();
- if (loopStart != kNoTrigger && loopEnd != kNoTrigger && loopStart <= loopEnd) {
- m_pLoopInPoint->set(loopStart);
- m_pLoopOutPoint->set(loopEnd);
- break;
- }
+ if (pCue->getType() != mixxx::CueType::Loop) {
+ continue;
+ }
+
+ if (pLoopCue && pLoopCue->getHotCue() <= pCue->getHotCue()) {
+ continue;
+ }
+
+ pLoopCue = pCue;
+ }
+
+ if (pLoopCue) {
+ double loopStart = pLoopCue->getPosition();
+ double loopEnd = loopStart + pLoopCue->getLength();
+ if (loopStart != kNoTrigger && loopEnd != kNoTrigger && loopStart <= loopEnd) {
+ m_pLoopInPoint->set(loopStart);
+ m_pLoopOutPoint->set(loopEnd);
}
}
} else {
@@ -258,8 +271,9 @@ TrackPointer BaseTrackPlayerImpl::unloadTrack() {
QListIterator<CuePointer> it(cuePoints);
while (it.hasNext()) {
CuePointer pCue(it.next());
- if (pCue->getType() == mixxx::CueType::Loop) {
+ if (pCue->getType() == mixxx::CueType::Loop && pCue->getHotCue() == Cue::kNoHotCue) {
pLoopCue = pCue;
+ break;
}
}
if (!pLoopCue) {