From 9d3a85d434892055e5a640338a002504a26eabb0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 29 Aug 2014 13:15:33 +0200 Subject: MusicChunk: use SignedSongTime for the time stamp --- src/MusicChunk.cxx | 6 +++--- src/MusicChunk.hxx | 6 ++++-- src/PlayerThread.cxx | 2 +- src/decoder/DecoderAPI.cxx | 4 ++-- src/output/MultipleOutputs.cxx | 4 ++-- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/MusicChunk.cxx b/src/MusicChunk.cxx index 91856709e..07ec1bc19 100644 --- a/src/MusicChunk.cxx +++ b/src/MusicChunk.cxx @@ -41,17 +41,17 @@ MusicChunk::CheckFormat(const AudioFormat other_format) const WritableBuffer MusicChunk::Write(const AudioFormat af, - float data_time, uint16_t _bit_rate) + SongTime data_time, uint16_t _bit_rate) { assert(CheckFormat(af)); assert(length == 0 || audio_format.IsValid()); if (length == 0) { /* if the chunk is empty, nobody has set bitRate and - times yet */ + time yet */ bit_rate = _bit_rate; - times = data_time; + time = data_time; } const size_t frame_size = af.GetFrameSize(); diff --git a/src/MusicChunk.hxx b/src/MusicChunk.hxx index 835221233..805112d02 100644 --- a/src/MusicChunk.hxx +++ b/src/MusicChunk.hxx @@ -20,6 +20,7 @@ #ifndef MPD_MUSIC_CHUNK_HXX #define MPD_MUSIC_CHUNK_HXX +#include "Chrono.hxx" #include "ReplayGainInfo.hxx" #include "util/WritableBuffer.hxx" @@ -62,7 +63,7 @@ struct MusicChunk { uint16_t bit_rate; /** the time stamp within the song */ - float times; + SignedSongTime time; /** * An optional tag associated with this chunk (and the @@ -128,7 +129,8 @@ struct MusicChunk { * @return a writable buffer, or nullptr if the chunk is full */ WritableBuffer Write(AudioFormat af, - float data_time, uint16_t bit_rate); + SongTime data_time, + uint16_t bit_rate); /** * Increases the length of the chunk after the caller has written to diff --git a/src/PlayerThread.cxx b/src/PlayerThread.cxx index 51d6ee0e8..c74fdeba6 100644 --- a/src/PlayerThread.cxx +++ b/src/PlayerThread.cxx @@ -499,7 +499,7 @@ Player::SendSilence() partial frames */ unsigned num_frames = sizeof(chunk->data) / frame_size; - chunk->times = -1.0; /* undefined time stamp */ + chunk->time = SignedSongTime::Negative(); /* undefined time stamp */ chunk->length = num_frames * frame_size; memset(chunk->data, 0, chunk->length); diff --git a/src/decoder/DecoderAPI.cxx b/src/decoder/DecoderAPI.cxx index bccd46b17..354fed9a3 100644 --- a/src/decoder/DecoderAPI.cxx +++ b/src/decoder/DecoderAPI.cxx @@ -512,8 +512,8 @@ decoder_data(Decoder &decoder, const auto dest = chunk->Write(dc.out_audio_format, - decoder.timestamp - - dc.song->GetStartTime().ToDoubleS(), + SongTime::FromS(decoder.timestamp) - + dc.song->GetStartTime(), kbit_rate); if (dest.IsNull()) { /* the chunk is full, flush it */ diff --git a/src/output/MultipleOutputs.cxx b/src/output/MultipleOutputs.cxx index be99d5aa5..33ab57894 100644 --- a/src/output/MultipleOutputs.cxx +++ b/src/output/MultipleOutputs.cxx @@ -341,10 +341,10 @@ MultipleOutputs::Check() this chunk */ return pipe->GetSize(); - if (chunk->length > 0 && chunk->times >= 0.0) + if (chunk->length > 0 && !chunk->time.IsNegative()) /* only update elapsed_time if the chunk provides a defined value */ - elapsed_time = SignedSongTime::FromS(chunk->times); + elapsed_time = chunk->time; is_tail = chunk->next == nullptr; if (is_tail) -- cgit v1.2.3