aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/PlayerThread.cxx2
-rw-r--r--src/decoder/DecoderAPI.cxx6
-rw-r--r--src/decoder/DecoderControl.cxx5
-rw-r--r--src/decoder/DecoderControl.hxx5
-rw-r--r--src/decoder/DecoderInternal.hxx2
5 files changed, 10 insertions, 10 deletions
diff --git a/src/PlayerThread.cxx b/src/PlayerThread.cxx
index 8a39ed348..1850a1711 100644
--- a/src/PlayerThread.cxx
+++ b/src/PlayerThread.cxx
@@ -567,7 +567,7 @@ Player::SeekDecoder()
if (where < 0.0)
where = 0.0;
- if (!dc.Seek(where + start_ms / 1000.0)) {
+ if (!dc.Seek(SongTime::FromS(where) + SongTime::FromMS(start_ms))) {
/* decoder failure */
player_command_finished(pc);
return false;
diff --git a/src/decoder/DecoderAPI.cxx b/src/decoder/DecoderAPI.cxx
index c9bdb46e8..939434f83 100644
--- a/src/decoder/DecoderAPI.cxx
+++ b/src/decoder/DecoderAPI.cxx
@@ -196,7 +196,7 @@ decoder_command_finished(Decoder &decoder)
dc.pipe->Clear(*dc.buffer);
- decoder.timestamp = dc.seek_where;
+ decoder.timestamp = dc.seek_time.ToDoubleS();
}
dc.command = DecoderCommand::NONE;
@@ -218,7 +218,7 @@ decoder_seek_time(Decoder &decoder)
decoder.seeking = true;
- return SongTime::FromS(dc.seek_where);
+ return dc.seek_time;
}
uint64_t
@@ -236,7 +236,7 @@ decoder_seek_where_frame(Decoder &decoder)
decoder.seeking = true;
- return uint64_t(dc.seek_where * dc.in_audio_format.sample_rate);
+ return dc.seek_time.ToScale<uint64_t>(dc.in_audio_format.sample_rate);
}
void decoder_seek_error(Decoder & decoder)
diff --git a/src/decoder/DecoderControl.cxx b/src/decoder/DecoderControl.cxx
index d78fc66c9..c4892a659 100644
--- a/src/decoder/DecoderControl.cxx
+++ b/src/decoder/DecoderControl.cxx
@@ -105,16 +105,15 @@ DecoderControl::Stop()
}
bool
-DecoderControl::Seek(double where)
+DecoderControl::Seek(SongTime t)
{
assert(state != DecoderState::START);
- assert(where >= 0.0);
if (state == DecoderState::STOP ||
state == DecoderState::ERROR || !seekable)
return false;
- seek_where = where;
+ seek_time = t;
seek_error = false;
LockSynchronousCommand(DecoderCommand::SEEK);
diff --git a/src/decoder/DecoderControl.hxx b/src/decoder/DecoderControl.hxx
index f78ce1a31..edb7ce6da 100644
--- a/src/decoder/DecoderControl.hxx
+++ b/src/decoder/DecoderControl.hxx
@@ -26,6 +26,7 @@
#include "thread/Mutex.hxx"
#include "thread/Cond.hxx"
#include "thread/Thread.hxx"
+#include "Chrono.hxx"
#include "util/Error.hxx"
#include <assert.h>
@@ -107,7 +108,7 @@ struct DecoderControl {
bool seek_error;
bool seekable;
- double seek_where;
+ SongTime seek_time;
/** the format of the song file */
AudioFormat in_audio_format;
@@ -365,7 +366,7 @@ public:
void Stop();
- bool Seek(double where);
+ bool Seek(SongTime t);
void Quit();
diff --git a/src/decoder/DecoderInternal.hxx b/src/decoder/DecoderInternal.hxx
index e6c30d071..24b665e85 100644
--- a/src/decoder/DecoderInternal.hxx
+++ b/src/decoder/DecoderInternal.hxx
@@ -57,7 +57,7 @@ struct Decoder {
bool initial_seek_running;
/**
- * This flag is set by decoder_seek_where(), and checked by
+ * This flag is set by decoder_seek_time(), and checked by
* decoder_command_finished(). It is used to clean up after
* seeking.
*/