[FFmpeg-cvslog] avformat/oggparsevp8: fix pts calculation on pages ending with an invisible frame
James Almer
git at videolan.org
Mon Jul 25 19:52:41 EEST 2016
ffmpeg | branch: release/2.6 | James Almer <jamrial at gmail.com> | Tue Jul 12 17:05:42 2016 -0300| [ebd4d7189c2aba8689cc64530964029d91769b0d] | committer: James Almer
avformat/oggparsevp8: fix pts calculation on pages ending with an invisible frame
Signed-off-by: James Almer <jamrial at gmail.com>
(cherry picked from commit 5adfbd391847fcdaea1e9b105fae2dd90af2a733)
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ebd4d7189c2aba8689cc64530964029d91769b0d
---
libavformat/oggparsevp8.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/libavformat/oggparsevp8.c b/libavformat/oggparsevp8.c
index 7aed8ab..ca13928 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)
More information about the ffmpeg-cvslog
mailing list