[FFmpeg-devel] [PATCH 1/3] avcodec/cbs: add a helper to read extradata within packet side data

James Almer jamrial at gmail.com
Tue Aug 10 16:40:09 EEST 2021


On 8/5/2021 12:24 PM, James Almer wrote:
> Using ff_cbs_read() on the raw buffer will not parse it as extradata,
> resulting in parsing errors for example when handling ISOBMFF avcC.
> This helper works around that.
> 
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>   libavcodec/cbs.c | 13 +++++++++++++
>   libavcodec/cbs.h |  4 ++++
>   2 files changed, 17 insertions(+)
> 
> diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c
> index 8d50ea1432..f6e371ddef 100644
> --- a/libavcodec/cbs.c
> +++ b/libavcodec/cbs.c
> @@ -294,6 +294,19 @@ int ff_cbs_read_packet(CodedBitstreamContext *ctx,
>                            pkt->data, pkt->size, 0);
>   }
>   
> +int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx,
> +                                 CodedBitstreamFragment *frag,
> +                                 const AVPacket *pkt)
> +{
> +    size_t side_data_size;
> +    const uint8_t *side_data =
> +        av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA,
> +                                &side_data_size);
> +
> +    return cbs_read_data(ctx, frag, NULL,
> +                         side_data, side_data_size, 1);
> +}
> +
>   int ff_cbs_read(CodedBitstreamContext *ctx,
>                   CodedBitstreamFragment *frag,
>                   const uint8_t *data, size_t size)
> diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h
> index b7acf98347..bd97d163b1 100644
> --- a/libavcodec/cbs.h
> +++ b/libavcodec/cbs.h
> @@ -276,6 +276,10 @@ int ff_cbs_read_extradata_from_codec(CodedBitstreamContext *ctx,
>                                        CodedBitstreamFragment *frag,
>                                        const struct AVCodecContext *avctx);
>   
> +int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx,
> +                                 CodedBitstreamFragment *frag,
> +                                 const AVPacket *pkt);
> +
>   /**
>    * Read the data bitstream from a packet into a fragment, then
>    * split into units and decompose.

Will apply set.


More information about the ffmpeg-devel mailing list