aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2016-07-12 17:05:42 -0300
committerJames Almer <jamrial@gmail.com>2016-07-25 10:01:11 -0300
commit7cab4142c541a721db7cf59d9da6b483e9196b90 (patch)
tree7c62e29d5b56fca42d1e0ff3b1b6d700599d1242
parent2e1be2271506c0589ab68583d6b524a4b5acc9be (diff)
downloadffmpeg-7cab4142c541a721db7cf59d9da6b483e9196b90.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.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/oggparsevp8.c b/libavformat/oggparsevp8.c
index d57419e9f0..6716dd2f45 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)