summaryrefslogtreecommitdiffstats
path: root/src/track
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2020-05-22 09:56:48 +0200
committerUwe Klotz <uklotz@mixxx.org>2020-05-22 09:56:48 +0200
commit95c12fa72c19f7db030545b851bf7daa6c8fc0dc (patch)
tree21573f7130dc0cab3805c40a3f2b9c801397d3dd /src/track
parent4ab4a9271265cdf2a26c83f11879c1b1c966d612 (diff)
parent4a0daeb0ec2349150319875edf6b6b80f0322c9d (diff)
Merge branch '2.3' of git@github.com:mixxxdj/mixxx.git
Diffstat (limited to 'src/track')
-rw-r--r--src/track/cue.cpp13
-rw-r--r--src/track/cue.h1
-rw-r--r--src/track/track.cpp14
-rw-r--r--src/track/track.h2
4 files changed, 30 insertions, 0 deletions
diff --git a/src/track/cue.cpp b/src/track/cue.cpp
index b2d9233d34..96d0365f64 100644
--- a/src/track/cue.cpp
+++ b/src/track/cue.cpp
@@ -195,6 +195,19 @@ void Cue::setEndPosition(double samplePosition) {
emit updated();
}
+void Cue::shiftPositionFrames(double frameOffset) {
+ QMutexLocker lock(&m_mutex);
+ if (m_sampleStartPosition != kNoPosition) {
+ m_sampleStartPosition += frameOffset * mixxx::kEngineChannelCount;
+ }
+ if (m_sampleEndPosition != kNoPosition) {
+ m_sampleEndPosition += frameOffset * mixxx::kEngineChannelCount;
+ }
+ m_bDirty = true;
+ lock.unlock();
+ emit updated();
+}
+
double Cue::getLength() const {
QMutexLocker lock(&m_mutex);
if (m_sampleEndPosition == Cue::kNoPosition) {
diff --git a/src/track/cue.h b/src/track/cue.h
index f6fe28ae72..d7c6d36f9a 100644
--- a/src/track/cue.h
+++ b/src/track/cue.h
@@ -48,6 +48,7 @@ class Cue : public QObject {
double samplePosition = kNoPosition);
void setEndPosition(
double samplePosition = kNoPosition);
+ void shiftPositionFrames(double frameOffset);
double getLength() const;
diff --git a/src/track/track.cpp b/src/track/track.cpp
index 24781b18df..1547a42985 100644
--- a/src/track/track.cpp
+++ b/src/track/track.cpp
@@ -759,6 +759,20 @@ void Track::setCuePoint(CuePosition cue) {
emit cuesUpdated();
}
+void Track::shiftCuePositionsMillis(double milliseconds) {
+ QMutexLocker lock(&m_qMutex);
+
+ VERIFY_OR_DEBUG_ASSERT(m_streamInfo) {
+ return;
+ }
+ double frames = m_streamInfo->getSignalInfo().millis2frames(milliseconds);
+ for (const CuePointer& pCue : m_cuePoints) {
+ pCue->shiftPositionFrames(frames);
+ }
+
+ markDirtyAndUnlock(&lock);
+}
+
void Track::analysisFinished() {
emit analyzed();
}
diff --git a/src/track/track.h b/src/track/track.h
index 7d7c0c6ba7..75524ee438 100644
--- a/src/track/track.h
+++ b/src/track/track.h
@@ -252,6 +252,8 @@ class Track : public QObject {
CuePosition getCuePoint() const;
// Set the track's main cue point
void setCuePoint(CuePosition cue);
+ /// Shift all cues by a constant offset
+ void shiftCuePositionsMillis(double milliseconds);
// Call when analysis is done.
void analysisFinished();