On Fri, 2021-12-03 at 09:36 -0300, James Almer wrote: > On Fri, Dec 3, 2021 at 5:12 AM Fei Wang <fei.w.w...@intel.com> wrote: > > > 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 > > > > > No, the parser must not split the packets. We used to do this with > the VP9 > parser and the result was the creation of broken output files. Any more information on failed case for vp9? I tested this patch by decoding several av1 bitstream, all looks good.
And I checked wm4's change on vp9/vp9_parser, the commit only shows it benefits on multi-thread decoding. So I guess if vp9 failed case is related to multi-thread decodeing? If yes, then insert frame_split bsf in av1 decoder will be a better choice. Even av1 decoder doesn't support multi-threading decode now, it can avoid issue if it is supported someday. > > What you could do instead is autoinsert the frame_split BSF in the > decoder, > same as we're doing for VP9. It should have the same effect. > _______________________________________________ > 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". _______________________________________________ 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".