Split packed data when it contains multiple show frames in some non-standard bitstream. This can benefit downstream decoder which can decode continuously instead of interrupt with unexpected error.
Signed-off-by: Fei Wang <fei.w.w...@intel.com> --- libavcodec/av1_parser.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/libavcodec/av1_parser.c b/libavcodec/av1_parser.c index d2dfdb3580..d6f5cace4b 100644 --- a/libavcodec/av1_parser.c +++ b/libavcodec/av1_parser.c @@ -59,11 +59,10 @@ static int av1_parser_parse(AVCodecParserContext *ctx, const CodedBitstreamAV1Context *av1 = s->cbc->priv_data; const AV1RawSequenceHeader *seq; const AV1RawColorConfig *color; + int pic_found = 0; + int next = 0; int ret; - *out_data = data; - *out_size = size; - ctx->key_frame = -1; ctx->pict_type = AV_PICTURE_TYPE_NONE; ctx->picture_structure = AV_PICTURE_STRUCTURE_UNKNOWN; @@ -100,6 +99,8 @@ static int av1_parser_parse(AVCodecParserContext *ctx, const AV1RawOBU *obu = unit->content; const AV1RawFrameHeader *frame; + next += unit->data_size; + if (unit->type == AV1_OBU_FRAME) frame = &obu->obu.frame.header; else if (unit->type == AV1_OBU_FRAME_HEADER) @@ -113,6 +114,12 @@ static int av1_parser_parse(AVCodecParserContext *ctx, if (!frame->show_frame && !frame->show_existing_frame) continue; + /* split data if it contains multi show frames */ + if (pic_found) { + next -= unit->data_size; + break; + } + ctx->width = frame->frame_width_minus_1 + 1; ctx->height = frame->frame_height_minus_1 + 1; @@ -131,8 +138,12 @@ static int av1_parser_parse(AVCodecParserContext *ctx, break; } ctx->picture_structure = AV_PICTURE_STRUCTURE_FRAME; + pic_found = 1; } + *out_size = next; + *out_data = data; + switch (av1->bit_depth) { case 8: ctx->format = color->mono_chrome ? AV_PIX_FMT_GRAY8 @@ -171,7 +182,7 @@ end: s->cbc->log_ctx = NULL; - return size; + return next; } static const CodedBitstreamUnitType decompose_unit_types[] = { -- 2.25.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".