diff options
author | James Almer <jamrial@gmail.com> | 2016-07-12 17:05:42 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2016-07-25 09:59:45 -0300 |
commit | 470bdd397f2a8fcc4ea968dcf017d9d5f91f296a (patch) | |
tree | d8f944e8a381cad2e485c4256cb4bdf2f4633cf6 | |
parent | 0ca22536c7d780bd021b3f919cb7ffbf218aeab0 (diff) | |
download | ffmpeg-470bdd397f2a8fcc4ea968dcf017d9d5f91f296a.tar.gz |
avformat/oggparsevp8: fix pts calculation on pages ending with an invisible frame
Signed-off-by: James Almer <jamrial@gmail.com>
(cherry picked from commit 5adfbd391847fcdaea1e9b105fae2dd90af2a733)
-rw-r--r-- | libavformat/oggparsevp8.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/oggparsevp8.c b/libavformat/oggparsevp8.c index 7aed8abad3..ca13928f1e 100644 --- a/libavformat/oggparsevp8.c +++ b/libavformat/oggparsevp8.c @@ -82,7 +82,11 @@ static uint64_t vp8_gptopts(AVFormatContext *s, int idx, struct ogg *ogg = s->priv_data; struct ogg_stream *os = ogg->streams + idx; - uint64_t pts = (granule >> 32); + int invcnt = !((granule >> 30) & 3); + // If page granule is that of an invisible vp8 frame, its pts will be + // that of the end of the next visible frame. We substract 1 for those + // to prevent messing up pts calculations. + uint64_t pts = (granule >> 32) - invcnt; uint32_t dist = (granule >> 3) & 0x07ffffff; if (!dist) |