[FFmpeg-devel] [PATCH] avcodec/h264: support sps/pps AV_PKT_DATA_NEW_EXTRADATA

Olly Woodman ollywoodman at gmail.com
Wed Jun 3 00:32:24 EEST 2020


On Fri, 8 May 2020 at 03:10, Oliver Woodman <ollywoodman at gmail.com> wrote:

> https://github.com/FFmpeg/FFmpeg/commit/601c238 added support
> for AV_PKT_DATA_NEW_EXTRADATA, but only for avcC extradata.
> This commit adds support for sps/pps extradata as well. This
> makes support consistent for passing new extradata consistent
> with the types of extradata that can be passed when initializing
> the decoder.
>
> Signed-off-by: Oliver Woodman <ollywoodman at gmail.com>
> ---
>  libavcodec/h264dec.c | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c
> index 4c355feb18..c1d103a474 100644
> --- a/libavcodec/h264dec.c
> +++ b/libavcodec/h264dec.c
> @@ -829,7 +829,7 @@ static int output_frame(H264Context *h, AVFrame *dst,
> H264Picture *srcp)
>      return 0;
>  }
>
> -static int is_extra(const uint8_t *buf, int buf_size)
> +static int is_avcc_extradata(const uint8_t *buf, int buf_size)
>  {
>      int cnt= buf[5]&0x1f;
>      const uint8_t *p= buf+6;
> @@ -956,16 +956,15 @@ static int h264_decode_frame(AVCodecContext *avctx,
> void *data,
>      if (buf_size == 0)
>          return send_next_delayed_frame(h, pict, got_frame, 0);
>
> -    if (h->is_avc && av_packet_get_side_data(avpkt,
> AV_PKT_DATA_NEW_EXTRADATA, NULL)) {
> +    if (av_packet_get_side_data(avpkt, AV_PKT_DATA_NEW_EXTRADATA, NULL)) {
>          int side_size;
>          uint8_t *side = av_packet_get_side_data(avpkt,
> AV_PKT_DATA_NEW_EXTRADATA, &side_size);
> -        if (is_extra(side, side_size))
> -            ff_h264_decode_extradata(side, side_size,
> -                                     &h->ps, &h->is_avc,
> &h->nal_length_size,
> -                                     avctx->err_recognition, avctx);
> +        ff_h264_decode_extradata(side, side_size,
> +                                 &h->ps, &h->is_avc, &h->nal_length_size,
> +                                 avctx->err_recognition, avctx);
>      }
>      if (h->is_avc && buf_size >= 9 && buf[0]==1 && buf[2]==0 &&
> (buf[4]&0xFC)==0xFC) {
> -        if (is_extra(buf, buf_size))
> +        if (is_avcc_extradata(buf, buf_size))
>              return ff_h264_decode_extradata(buf, buf_size,
>                                              &h->ps, &h->is_avc,
> &h->nal_length_size,
>                                              avctx->err_recognition,
> avctx);
> --
> 2.26.0.110.g2183baf09c-goog
>
>
Would it be possible for someone to take a look at this? It would be great
to get this merged. For context, this is needed for us to add an FFmpeg
video decoder extension to the Android ExoPlayer project (without having to
make the code to do so unnecessarily complicated / inefficient). Thanks!


More information about the ffmpeg-devel mailing list