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. 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".