aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder/plugins/AudiofileDecoderPlugin.cxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-08-29 20:52:39 +0200
committerMax Kellermann <max@duempel.org>2014-08-29 21:40:15 +0200
commitd9d97bd17bf0d9469dcf00120d3d3fdab87299bc (patch)
treed7abd9d0cbc6e417aaf4427740bf47207f47d7fa /src/decoder/plugins/AudiofileDecoderPlugin.cxx
parent94f6380d693b8bece655885d37495a3a73c78b62 (diff)
downloadmpd-d9d97bd17bf0d9469dcf00120d3d3fdab87299bc.tar.gz
mpd-d9d97bd17bf0d9469dcf00120d3d3fdab87299bc.tar.xz
mpd-d9d97bd17bf0d9469dcf00120d3d3fdab87299bc.zip
DecoderAPI: pass SignedSongTime to decoder_initialized()
Diffstat (limited to 'src/decoder/plugins/AudiofileDecoderPlugin.cxx')
-rw-r--r--src/decoder/plugins/AudiofileDecoderPlugin.cxx14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/decoder/plugins/AudiofileDecoderPlugin.cxx b/src/decoder/plugins/AudiofileDecoderPlugin.cxx
index 412cda1e3..8d04f9596 100644
--- a/src/decoder/plugins/AudiofileDecoderPlugin.cxx
+++ b/src/decoder/plugins/AudiofileDecoderPlugin.cxx
@@ -64,13 +64,11 @@ struct AudioFileInputStream {
};
gcc_pure
-static double
+static SongTime
audiofile_get_duration(AFfilehandle fh)
{
- double frame_count = afGetFrameCount(fh, AF_DEFAULT_TRACK);
- double rate = afGetRate(fh, AF_DEFAULT_TRACK);
-
- return frame_count / rate;
+ return SongTime::FromScale<uint64_t>(afGetFrameCount(fh, AF_DEFAULT_TRACK),
+ afGetRate(fh, AF_DEFAULT_TRACK));
}
static ssize_t
@@ -208,10 +206,10 @@ audiofile_stream_decode(Decoder &decoder, InputStream &is)
return;
}
- const double total_time = audiofile_get_duration(fh);
+ const auto total_time = audiofile_get_duration(fh);
const uint16_t kbit_rate = (uint16_t)
- (is.GetSize() * 8.0 / total_time / 1000.0 + 0.5);
+ (is.GetSize() * uint64_t(8000) / total_time.ToMS());
const unsigned frame_size = (unsigned)
afGetVirtualFrameSize(fh, AF_DEFAULT_TRACK, true);
@@ -258,7 +256,7 @@ audiofile_get_duration(InputStream &is)
if (fh == AF_NULL_FILEHANDLE)
return -1;
- int duration = int(audiofile_get_duration(fh));
+ int duration = audiofile_get_duration(fh).RoundS();
afCloseFile(fh);
return duration;
}