diff options
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/plugins/AudiofileDecoderPlugin.cxx | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/decoder/plugins/AudiofileDecoderPlugin.cxx b/src/decoder/plugins/AudiofileDecoderPlugin.cxx index cd7021631..e78c156f9 100644 --- a/src/decoder/plugins/AudiofileDecoderPlugin.cxx +++ b/src/decoder/plugins/AudiofileDecoderPlugin.cxx @@ -54,17 +54,24 @@ struct AudioFileInputStream { }; gcc_pure +static double +audiofile_get_duration(AFfilehandle fh) +{ + double frame_count = afGetFrameCount(fh, AF_DEFAULT_TRACK); + double rate = afGetRate(fh, AF_DEFAULT_TRACK); + + return frame_count / rate; +} + +gcc_pure static int audiofile_get_duration(Path path_fs) { - int total_time; AFfilehandle af_fp = afOpenFile(path_fs.c_str(), "r", nullptr); if (af_fp == AF_NULL_FILEHANDLE) { return -1; } - total_time = (int) - ((double)afGetFrameCount(af_fp, AF_DEFAULT_TRACK) - / afGetRate(af_fp, AF_DEFAULT_TRACK)); + int total_time = int(audiofile_get_duration(af_fp)); afCloseFile(af_fp); return total_time; } |