decoder/ffmpeg: use AVStream::duration

Use the duration of the stream we're actually decoding - not the
"global" attribute AVFormatContext::duration which may differ.
This commit is contained in:
Max Kellermann
2014-12-19 10:12:01 +01:00
parent 8c3be4a5f0
commit 2e22ff2e36
2 changed files with 31 additions and 10 deletions

View File

@@ -59,6 +59,31 @@ RatioToAVRational()
return { Ratio::num, Ratio::den };
}
/**
* Convert a FFmpeg time stamp to a #SongTime.
*/
gcc_const
static inline SongTime
FromFfmpegTime(int64_t t, const AVRational time_base)
{
assert(t != (int64_t)AV_NOPTS_VALUE);
return SongTime::FromMS(av_rescale_q(t, time_base,
(AVRational){1, 1000}));
}
/**
* Convert a FFmpeg time stamp to a #SignedSongTime.
*/
gcc_const
static inline SignedSongTime
FromFfmpegTimeChecked(int64_t t, const AVRational time_base)
{
return t != (int64_t)AV_NOPTS_VALUE
? SignedSongTime(FromFfmpegTime(t, time_base))
: SignedSongTime::Negative();
}
/**
* Convert a #SongTime to a FFmpeg time stamp with the given base.
*/