X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fvp9_parser.c;h=9900e7ab1f796d3171ad2688c2662b081f61a6ac;hb=45f5c5573203a48acb2dd6fbf18f4b0c25b7aff0;hp=2e9235e6570ff690a4401285044d106526be6285;hpb=4890b0851c5e6b607c9b8695166f13dc770b19bc;p=ffmpeg diff --git a/libavcodec/vp9_parser.c b/libavcodec/vp9_parser.c index 2e9235e6570..9900e7ab1f7 100644 --- a/libavcodec/vp9_parser.c +++ b/libavcodec/vp9_parser.c @@ -28,6 +28,7 @@ typedef struct VP9ParseContext { int n_frames; // 1-8 int size[8]; + int marker_size; int64_t pts; } VP9ParseContext; @@ -88,6 +89,21 @@ static int parse(AVCodecParserContext *ctx, return 0; } + if (s->n_frames > 0) { + int i; + int size_sum = 0; + + for (i = 0; i < s->n_frames ;i++) + size_sum += s->size[i]; + size_sum += s->marker_size; + + if (size_sum != size) { + av_log(avctx, AV_LOG_ERROR, "Inconsistent input frame sizes %d %d\n", + size_sum, size); + s->n_frames = 0; + } + } + if (s->n_frames > 0) { *out_data = data; *out_size = s->size[--s->n_frames]; @@ -131,6 +147,7 @@ static int parse(AVCodecParserContext *ctx, data += sz; \ size -= sz; \ } \ + s->marker_size = size; \ parse_frame(ctx, *out_data, *out_size); \ return s->n_frames > 0 ? *out_size : full_size