summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2019-01-05 17:56:22 +0100
committerDaniel Schürmann <daschuer@mixxx.org>2019-01-06 01:06:51 +0100
commitebf835c57cd2e9f1a66c2734803b5c30251283a9 (patch)
tree584a88bde232f88071c0628a4cceaf1cef6e10f1
parentde307ce9a7f339c52e4390beae9014f0ae05f13e (diff)
Added tempoTrackSeconds to VisualplayPosition
-rw-r--r--src/engine/enginebuffer.cpp16
-rw-r--r--src/waveform/visualplayposition.cpp13
-rw-r--r--src/waveform/visualplayposition.h6
3 files changed, 16 insertions, 19 deletions
diff --git a/src/engine/enginebuffer.cpp b/src/engine/enginebuffer.cpp
index d5adc98534..f5c8a68170 100644
--- a/src/engine/enginebuffer.cpp
+++ b/src/engine/enginebuffer.cpp
@@ -1199,14 +1199,6 @@ void EngineBuffer::postProcess(const int iBufferSize) {
}
void EngineBuffer::updateIndicators(double speed, int iBufferSize) {
- // * double speed
- // * int iBufferSize
- // m_trackSampleRateOld
- // m_trackSamplesOld
- // m_filepos_play
- // m_tempo_ratio_old
-
-
if (!m_trackSampleRateOld || !m_trackSamplesOld) {
// no track loaded
return;
@@ -1215,7 +1207,9 @@ void EngineBuffer::updateIndicators(double speed, int iBufferSize) {
// Increase samplesCalculated by the buffer size
m_iSamplesSinceLastIndicatorUpdate += iBufferSize;
- double fFractionalPlaypos = fractionalPlayposFromAbsolute(m_filepos_play);
+ const double fFractionalPlaypos = fractionalPlayposFromAbsolute(m_filepos_play);
+ const double tempoTrackSeconds = m_trackSamplesOld / kSamplesPerFrame
+ / m_trackSampleRateOld / m_tempo_ratio_old;
if(speed > 0 && fFractionalPlaypos == 1.0) {
// At Track end
speed = 0;
@@ -1230,7 +1224,6 @@ void EngineBuffer::updateIndicators(double speed, int iBufferSize) {
// Update indicators that are only updated after every
// sampleRate/kiUpdateRate samples processed. (e.g. playposSlider)
if (m_iSamplesSinceLastIndicatorUpdate > (kSamplesPerFrame * m_pSampleRate->get() / kiPlaypositionUpdateRate)) {
- const double tempoTrackSeconds = m_trackSamplesOld / kSamplesPerFrame / m_trackSampleRateOld / m_tempo_ratio_old;
double timeRemaining = (1.0 - fFractionalPlaypos) * tempoTrackSeconds;
m_timeRemaining->set(timeRemaining);
m_timeElapsed->set(tempoTrackSeconds - timeRemaining);
@@ -1266,7 +1259,8 @@ void EngineBuffer::updateIndicators(double speed, int iBufferSize) {
// playpos slider
m_visualPlayPos->set(fFractionalPlaypos, speed * m_baserate_old,
(double)iBufferSize / m_trackSamplesOld,
- fractionalPlayposFromAbsolute(m_dSlipPosition));
+ fractionalPlayposFromAbsolute(m_dSlipPosition),
+ tempoTrackSeconds);
}
void EngineBuffer::hintReader(const double dRate) {
diff --git a/src/waveform/visualplayposition.cpp b/src/waveform/visualplayposition.cpp
index 73cf2d1554..aae57cb5d0 100644
--- a/src/waveform/visualplayposition.cpp
+++ b/src/waveform/visualplayposition.cpp
@@ -35,15 +35,16 @@ VisualPlayPosition::~VisualPlayPosition() {
m_listVisualPlayPosition.remove(m_key);
}
-void VisualPlayPosition::set(double playPos, double rate,
- double positionStep, double pSlipPosition) {
+void VisualPlayPosition::set(double playPos, double rate, double positionStep,
+ double slipPosition, double tempoTrackSeconds) {
VisualPlayPositionData data;
data.m_referenceTime = m_timeInfoTime;
data.m_callbackEntrytoDac = m_dCallbackEntryToDacSecs * 1000000; // s to µs
data.m_enginePlayPos = playPos;
data.m_rate = rate;
data.m_positionStep = positionStep;
- data.m_pSlipPosition = pSlipPosition;
+ data.m_slipPosition = slipPosition;
+ data.m_tempoTrackSeconds = tempoTrackSeconds;
// Atomic write
m_data.setValue(data);
@@ -70,7 +71,7 @@ double VisualPlayPosition::getAtNextVSync(VSyncThread* vsyncThread) {
return -1;
}
-void VisualPlayPosition::getPlaySlipAt(int fromNowMicros, double* playPosition, double* slipPosition) {
+void VisualPlayPosition::getPlaySlipAt(int fromNowMicros, double* pPlayPosition, double* pSlipPosition) {
//static double testPos = 0;
//testPos += 0.000017759; //0.000016608; // 1.46257e-05;
//return testPos;
@@ -83,8 +84,8 @@ void VisualPlayPosition::getPlaySlipAt(int fromNowMicros, double* playPosition,
offset = math_min(offset, m_audioBufferMicros * kMaxOffsetBufferCnt);
double playPos = data.m_enginePlayPos; // load playPos for the first sample in Buffer
playPos += data.m_positionStep * offset * data.m_rate / m_audioBufferMicros;
- *playPosition = playPos;
- *slipPosition = data.m_pSlipPosition;
+ *pPlayPosition = playPos;
+ *pSlipPosition = data.m_slipPosition;
}
}
diff --git a/src/waveform/visualplayposition.h b/src/waveform/visualplayposition.h
index 62b8f35bb7..699b3ae9e8 100644
--- a/src/waveform/visualplayposition.h
+++ b/src/waveform/visualplayposition.h
@@ -33,7 +33,8 @@ class VisualPlayPositionData {
double m_enginePlayPos; // Play position of fist Sample in Buffer
double m_rate;
double m_positionStep;
- double m_pSlipPosition;
+ double m_slipPosition;
+ double m_tempoTrackSeconds; // total track time, taking the current tempo into account
};
@@ -45,7 +46,8 @@ class VisualPlayPosition : public QObject {
// WARNING: Not thread safe. This function must be called only from the
// engine thread.
- void set(double playPos, double rate, double positionStep, double pSlipPosition);
+ void set(double playPos, double rate, double positionStep,
+ double slipPosition, double tempoTrackSeconds);
double getAtNextVSync(VSyncThread* vsyncThread);
void getPlaySlipAt(int usFromNow, double* playPosition, double* slipPosition);
double getEnginePlayPos();