ffmpeg | branch: master | Anton Khirnov <an...@khirnov.net> | Tue Apr 19 19:37:49 2016 +0200| [f3ed484953b81856e40239d2410058a96188b2be] | committer: Anton Khirnov
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. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f3ed484953b81856e40239d2410058a96188b2be --- libavcodec/h264_mp4toannexb_bsf.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavcodec/h264_mp4toannexb_bsf.c b/libavcodec/h264_mp4toannexb_bsf.c index c1e2a28..c65aaeb 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; _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog