From 2e22ff2e3692291df2a62363dd8f488b65164e70 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Fri, 19 Dec 2014 10:12:01 +0100
Subject: decoder/ffmpeg: use AVStream::duration

Use the duration of the stream we're actually decoding - not the
"global" attribute AVFormatContext::duration which may differ.
---
 src/decoder/plugins/FfmpegDecoderPlugin.cxx | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

(limited to 'src/decoder')

diff --git a/src/decoder/plugins/FfmpegDecoderPlugin.cxx b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
index 27bd671cc..f78e67af3 100644
--- a/src/decoder/plugins/FfmpegDecoderPlugin.cxx
+++ b/src/decoder/plugins/FfmpegDecoderPlugin.cxx
@@ -583,10 +583,7 @@ FfmpegDecode(Decoder &decoder, InputStream &input,
 	}
 
 	const SignedSongTime total_time =
-		format_context.duration != (int64_t)AV_NOPTS_VALUE
-		? SignedSongTime::FromScale<uint64_t>(format_context.duration,
-						      AV_TIME_BASE)
-		: SignedSongTime::Negative();
+		FromFfmpegTimeChecked(av_stream.duration, av_stream.time_base);
 
 	decoder_initialized(decoder, audio_format,
 			    input.IsSeekable(), total_time);
@@ -696,12 +693,11 @@ FfmpegScanStream(AVFormatContext &format_context,
 	if (audio_stream < 0)
 		return false;
 
-	if (format_context.duration != (int64_t)AV_NOPTS_VALUE) {
-		const auto duration =
-			SongTime::FromScale<uint64_t>(format_context.duration,
-						      AV_TIME_BASE);
-		tag_handler_invoke_duration(&handler, handler_ctx, duration);
-	}
+	const AVStream &stream = *format_context.streams[audio_stream];
+	if (stream.duration != (int64_t)AV_NOPTS_VALUE)
+		tag_handler_invoke_duration(&handler, handler_ctx,
+					    FromFfmpegTime(stream.duration,
+							   stream.time_base));
 
 	FfmpegScanMetadata(format_context, audio_stream, handler, handler_ctx);
 
-- 
cgit v1.2.3