On 2016-04-21 10:28:10 +0200, Anton Khirnov wrote:
> 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(-)
> 
> 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;

ok

although just the start code prefix alone is not valid annex b data, I 
can't see how it would cause problems

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to