[FFmpeg-devel] [PATCH] avcodec: Add AV_CODEC_FLAG2_DONT_SPLIT_SIDE_DATA

wm4 nfxjfg at googlemail.com
Wed Mar 8 08:57:00 EET 2017


On Wed,  8 Mar 2017 02:57:50 +0100
Michael Niedermayer <michael at niedermayer.cc> wrote:

> This allows to test or use  the code without av_packet_split_side_data() or
> allows applications to separate the side data handling out not
> running it automatically.
> 
> It also makes it easier to change the default behavior
> 
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  libavcodec/avcodec.h |  5 +++++
>  libavcodec/utils.c   | 12 ++++++++----
>  2 files changed, 13 insertions(+), 4 deletions(-)
> 
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index af054f3194..92e930249e 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -910,6 +910,11 @@ typedef struct RcOverride{
>   */
>  #define AV_CODEC_FLAG2_FAST           (1 <<  0)
>  /**
> + * Do not split side data.
> + * @see AVFMT_FLAG_KEEP_SIDE_DATA
> + */
> +#define AV_CODEC_FLAG2_DONT_SPLIT_SIDE_DATA (1 << 1)
> +/**
>   * Skip bitstream encoding.
>   */
>  #define AV_CODEC_FLAG2_NO_OUTPUT      (1 <<  2)
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index db3adb18d4..94278c6950 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -2250,7 +2250,8 @@ int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *pi
>  
>      if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size ||
>          (avctx->active_thread_type & FF_THREAD_FRAME)) {
> -        int did_split = av_packet_split_side_data(&tmp);
> +        int did_split = (avctx->flags2 & AV_CODEC_FLAG2_DONT_SPLIT_SIDE_DATA) ?
> +                        0 : av_packet_split_side_data(&tmp);
>          ret = apply_param_change(avctx, &tmp);
>          if (ret < 0)
>              goto fail;
> @@ -2356,7 +2357,8 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
>          uint8_t discard_reason = 0;
>          // copy to ensure we do not change avpkt
>          AVPacket tmp = *avpkt;
> -        int did_split = av_packet_split_side_data(&tmp);
> +        int did_split = (avctx->flags2 & AV_CODEC_FLAG2_DONT_SPLIT_SIDE_DATA) ?
> +                        0 : av_packet_split_side_data(&tmp);
>          ret = apply_param_change(avctx, &tmp);
>          if (ret < 0)
>              goto fail;
> @@ -2669,7 +2671,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
>      if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) {
>          AVPacket pkt_recoded;
>          AVPacket tmp = *avpkt;
> -        int did_split = av_packet_split_side_data(&tmp);
> +        int did_split = (avctx->flags2 & AV_CODEC_FLAG2_DONT_SPLIT_SIDE_DATA) ?
> +                        0 : av_packet_split_side_data(&tmp);
>          //apply_param_change(avctx, &tmp);
>  
>          if (did_split) {
> @@ -2860,7 +2863,8 @@ int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacke
>      if (avctx->codec->send_packet) {
>          if (avpkt) {
>              AVPacket tmp = *avpkt;
> -            int did_split = av_packet_split_side_data(&tmp);
> +            int did_split = (avctx->flags2 & AV_CODEC_FLAG2_DONT_SPLIT_SIDE_DATA) ?
> +                            0 : av_packet_split_side_data(&tmp);
>              ret = apply_param_change(avctx, &tmp);
>              if (ret >= 0)
>                  ret = avctx->codec->send_packet(avctx, &tmp);

I don't understand, what's the purpose?

IMO this merge/split side data is a pointless waste of resources and
should be removed.


More information about the ffmpeg-devel mailing list