aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder/plugins
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-12-19 10:12:01 +0100
committerMax Kellermann <max@duempel.org>2014-12-19 10:23:05 +0100
commit2e22ff2e3692291df2a62363dd8f488b65164e70 (patch)
treeeb4a127761edfdc9cca67dd535c6c9c01d037335 /src/decoder/plugins
parent8c3be4a5f036420ef2c7f1f53e573547df3b6c9b (diff)
downloadmpd-2e22ff2e3692291df2a62363dd8f488b65164e70.tar.gz
mpd-2e22ff2e3692291df2a62363dd8f488b65164e70.tar.xz
mpd-2e22ff2e3692291df2a62363dd8f488b65164e70.zip
decoder/ffmpeg: use AVStream::duration
Use the duration of the stream we're actually decoding - not the "global" attribute AVFormatContext::duration which may differ.
Diffstat (limited to '')
-rw-r--r--src/decoder/plugins/FfmpegDecoderPlugin.cxx16
1 files changed, 6 insertions, 10 deletions
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);