From f3ed484953b81856e40239d2410058a96188b2be Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 19 Apr 2016 19:37:49 +0200 Subject: h264_mp4toannexb_bsf: do not fail on annex B extradata Just pass through the bitstream as is. This is the same as what is done for HEVC already. --- libavcodec/h264_mp4toannexb_bsf.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'libavcodec/h264_mp4toannexb_bsf.c') diff --git a/libavcodec/h264_mp4toannexb_bsf.c b/libavcodec/h264_mp4toannexb_bsf.c index c1e2a28adc..c65aaeb98a 100644 --- a/libavcodec/h264_mp4toannexb_bsf.c +++ b/libavcodec/h264_mp4toannexb_bsf.c @@ -131,10 +131,16 @@ static int h264_extradata_to_annexb(AVBSFContext *ctx, const int padding) static int h264_mp4toannexb_init(AVBSFContext *ctx) { H264BSFContext *s = ctx->priv_data; + int extra_size = ctx->par_in->extradata_size; int ret; /* retrieve sps and pps NAL units from extradata */ - if (ctx->par_in->extradata_size >= 6) { + if (!extra_size || + (extra_size >= 3 && AV_RB24(ctx->par_in->extradata) == 1) || + (extra_size >= 4 && AV_RB32(ctx->par_in->extradata) == 1)) { + av_log(ctx, AV_LOG_VERBOSE, + "The input looks like it is Annex B already\n"); + } else if (extra_size >= 6) { ret = h264_extradata_to_annexb(ctx, AV_INPUT_BUFFER_PADDING_SIZE); if (ret < 0) return ret; @@ -142,6 +148,9 @@ static int h264_mp4toannexb_init(AVBSFContext *ctx) s->length_size = ret; s->first_idr = 1; s->extradata_parsed = 1; + } else { + av_log(ctx, AV_LOG_ERROR, "Invalid extradata size: %d\n", extra_size); + return AVERROR_INVALIDDATA; } return 0; -- cgit v1.2.3