DecoderControl: use std::chrono::duration for start_ms and end_ms
This commit is contained in:
@@ -296,7 +296,7 @@ Player::StartDecoder(MusicPipe &_pipe)
|
|||||||
start_time += pc.seek_time;
|
start_time += pc.seek_time;
|
||||||
|
|
||||||
dc.Start(new DetachedSong(*pc.next_song),
|
dc.Start(new DetachedSong(*pc.next_song),
|
||||||
start_time.ToMS(), pc.next_song->GetEndTime().ToMS(),
|
start_time, pc.next_song->GetEndTime(),
|
||||||
buffer, _pipe);
|
buffer, _pipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -179,7 +179,7 @@ decoder_command_finished(Decoder &decoder)
|
|||||||
assert(dc.pipe->IsEmpty());
|
assert(dc.pipe->IsEmpty());
|
||||||
|
|
||||||
decoder.initial_seek_running = false;
|
decoder.initial_seek_running = false;
|
||||||
decoder.timestamp = dc.start_ms / 1000.;
|
decoder.timestamp = dc.start_time.ToDoubleS();
|
||||||
dc.Unlock();
|
dc.Unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -212,7 +212,7 @@ decoder_seek_time(Decoder &decoder)
|
|||||||
assert(dc.pipe != nullptr);
|
assert(dc.pipe != nullptr);
|
||||||
|
|
||||||
if (decoder.initial_seek_running)
|
if (decoder.initial_seek_running)
|
||||||
return SongTime(dc.start_ms);
|
return dc.start_time;
|
||||||
|
|
||||||
assert(dc.command == DecoderCommand::SEEK);
|
assert(dc.command == DecoderCommand::SEEK);
|
||||||
|
|
||||||
@@ -226,17 +226,7 @@ decoder_seek_where_frame(Decoder &decoder)
|
|||||||
{
|
{
|
||||||
const DecoderControl &dc = decoder.dc;
|
const DecoderControl &dc = decoder.dc;
|
||||||
|
|
||||||
assert(dc.pipe != nullptr);
|
return decoder_seek_time(decoder).ToScale<uint64_t>(dc.in_audio_format.sample_rate);
|
||||||
|
|
||||||
if (decoder.initial_seek_running)
|
|
||||||
return uint64_t(dc.start_ms) * dc.in_audio_format.sample_rate
|
|
||||||
/ 1000;
|
|
||||||
|
|
||||||
assert(dc.command == DecoderCommand::SEEK);
|
|
||||||
|
|
||||||
decoder.seeking = true;
|
|
||||||
|
|
||||||
return dc.seek_time.ToScale<uint64_t>(dc.in_audio_format.sample_rate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void decoder_seek_error(Decoder & decoder)
|
void decoder_seek_error(Decoder & decoder)
|
||||||
@@ -553,8 +543,8 @@ decoder_data(Decoder &decoder,
|
|||||||
decoder.timestamp += (double)nbytes /
|
decoder.timestamp += (double)nbytes /
|
||||||
dc.out_audio_format.GetTimeToSize();
|
dc.out_audio_format.GetTimeToSize();
|
||||||
|
|
||||||
if (dc.end_ms > 0 &&
|
if (dc.end_time.IsPositive() &&
|
||||||
decoder.timestamp >= dc.end_ms / 1000.0)
|
decoder.timestamp >= dc.end_time.ToDoubleS())
|
||||||
/* the end of this range has been reached:
|
/* the end of this range has been reached:
|
||||||
stop decoding */
|
stop decoding */
|
||||||
return DecoderCommand::STOP;
|
return DecoderCommand::STOP;
|
||||||
|
@@ -70,7 +70,7 @@ DecoderControl::IsCurrentSong(const DetachedSong &_song) const
|
|||||||
|
|
||||||
void
|
void
|
||||||
DecoderControl::Start(DetachedSong *_song,
|
DecoderControl::Start(DetachedSong *_song,
|
||||||
unsigned _start_ms, unsigned _end_ms,
|
SongTime _start_time, SongTime _end_time,
|
||||||
MusicBuffer &_buffer, MusicPipe &_pipe)
|
MusicBuffer &_buffer, MusicPipe &_pipe)
|
||||||
{
|
{
|
||||||
assert(_song != nullptr);
|
assert(_song != nullptr);
|
||||||
@@ -78,8 +78,8 @@ DecoderControl::Start(DetachedSong *_song,
|
|||||||
|
|
||||||
delete song;
|
delete song;
|
||||||
song = _song;
|
song = _song;
|
||||||
start_ms = _start_ms;
|
start_time = _start_time;
|
||||||
end_ms = _end_ms;
|
end_time = _end_time;
|
||||||
buffer = &_buffer;
|
buffer = &_buffer;
|
||||||
pipe = &_pipe;
|
pipe = &_pipe;
|
||||||
|
|
||||||
|
@@ -127,21 +127,20 @@ struct DecoderControl {
|
|||||||
DetachedSong *song;
|
DetachedSong *song;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The initial seek position (in milliseconds), e.g. to the
|
* The initial seek position, e.g. to the start of a sub-track
|
||||||
* start of a sub-track described by a CUE file.
|
* described by a CUE file.
|
||||||
*
|
*
|
||||||
* This attribute is set by Start().
|
* This attribute is set by Start().
|
||||||
*/
|
*/
|
||||||
unsigned start_ms;
|
SongTime start_time;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The decoder will stop when it reaches this position (in
|
* The decoder will stop when it reaches this position. 0
|
||||||
* milliseconds). 0 means don't stop before the end of the
|
* means don't stop before the end of the file.
|
||||||
* file.
|
|
||||||
*
|
*
|
||||||
* This attribute is set by Start().
|
* This attribute is set by Start().
|
||||||
*/
|
*/
|
||||||
unsigned end_ms;
|
SongTime end_time;
|
||||||
|
|
||||||
float total_time;
|
float total_time;
|
||||||
|
|
||||||
@@ -356,12 +355,12 @@ public:
|
|||||||
*
|
*
|
||||||
* @param song the song to be decoded; the given instance will be
|
* @param song the song to be decoded; the given instance will be
|
||||||
* owned and freed by the decoder
|
* owned and freed by the decoder
|
||||||
* @param start_ms see #DecoderControl
|
* @param start_time see #DecoderControl
|
||||||
* @param end_ms see #DecoderControl
|
* @param end_time see #DecoderControl
|
||||||
* @param pipe the pipe which receives the decoded chunks (owned by
|
* @param pipe the pipe which receives the decoded chunks (owned by
|
||||||
* the caller)
|
* the caller)
|
||||||
*/
|
*/
|
||||||
void Start(DetachedSong *song, unsigned start_ms, unsigned end_ms,
|
void Start(DetachedSong *song, SongTime start_time, SongTime end_time,
|
||||||
MusicBuffer &buffer, MusicPipe &pipe);
|
MusicBuffer &buffer, MusicPipe &pipe);
|
||||||
|
|
||||||
void Stop();
|
void Stop();
|
||||||
|
@@ -360,7 +360,7 @@ static void
|
|||||||
decoder_run_song(DecoderControl &dc,
|
decoder_run_song(DecoderControl &dc,
|
||||||
const DetachedSong &song, const char *uri, Path path_fs)
|
const DetachedSong &song, const char *uri, Path path_fs)
|
||||||
{
|
{
|
||||||
Decoder decoder(dc, dc.start_ms > 0,
|
Decoder decoder(dc, dc.start_time.IsPositive(),
|
||||||
new Tag(song.GetTag()));
|
new Tag(song.GetTag()));
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user