summaryrefslogtreecommitdiff
path: root/libavcodec/vp9_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/vp9_parser.c')
-rw-r--r--libavcodec/vp9_parser.c12
1 files changed, 12 insertions, 0 deletions
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,