aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder/plugins/FfmpegDecoderPlugin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder/plugins/FfmpegDecoderPlugin.cxx')
-rw-r--r--src/decoder/plugins/FfmpegDecoderPlugin.cxx14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/decoder/plugins/FfmpegDecoderPlugin.cxx b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
index 2787d3705..e328da24b 100644
--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
@@ -210,11 +210,19 @@ time_from_ffmpeg(int64_t t, const AVRational time_base)
/ (double)1024;
}
+template<typename Ratio>
+static constexpr AVRational
+RatioToAVRational()
+{
+ return { Ratio::num, Ratio::den };
+}
+
gcc_const
static int64_t
-time_to_ffmpeg(double t_ms, const AVRational time_base)
+time_to_ffmpeg(SongTime t, const AVRational time_base)
{
- return av_rescale_q(t_ms, (AVRational){1, 1000},
+ return av_rescale_q(t.count(),
+ RatioToAVRational<SongTime::period>(),
time_base);
}
@@ -547,7 +555,7 @@ ffmpeg_decode(Decoder &decoder, InputStream &input)
if (cmd == DecoderCommand::SEEK) {
int64_t where =
- time_to_ffmpeg(decoder_seek_where_ms(decoder),
+ time_to_ffmpeg(decoder_seek_time(decoder),
av_stream->time_base) +
start_time_fallback(*av_stream);