diff --git a/libavcodec/vp9_parser.c b/libavcodec/vp9_parser.c index b188785456..220290fbf1 100644 --- a/libavcodec/vp9_parser.c +++ b/libavcodec/vp9_parser.c @@ -24,10 +24,13 @@ typedef struct VP9ParseContext { int n_frames; // 1-8 int size[8]; + int64_t pts; } VP9ParseContext; static void parse_frame(AVCodecParserContext *ctx, const uint8_t *buf, int size) { + VP9ParseContext *s = ctx->priv_data; + if (buf[0] & 0x4) { ctx->pict_type = AV_PICTURE_TYPE_P; ctx->key_frame = 0; @@ -35,6 +38,15 @@ static void parse_frame(AVCodecParserContext *ctx, const uint8_t *buf, int size) ctx->pict_type = AV_PICTURE_TYPE_I; ctx->key_frame = 1; } + + if (buf[0] & 0x2) { + if (ctx->pts == AV_NOPTS_VALUE) + ctx->pts = s->pts; + s->pts = AV_NOPTS_VALUE; + } else { + s->pts = ctx->pts; + ctx->pts = AV_NOPTS_VALUE; + } } static int parse(AVCodecParserContext *ctx,