[FFmpeg-devel] [PATCH] avcodec/vp9_superframe_split: move the reference in the bsf internal buffer

James Almer jamrial at gmail.com
Mon Mar 19 21:22:08 EET 2018


On 3/16/2018 7:39 PM, James Almer wrote:
> There's no need to allocate a new packet for it.
> 
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>  libavcodec/vp9_superframe_split_bsf.c | 21 ++++++++++-----------
>  1 file changed, 10 insertions(+), 11 deletions(-)
> 
> diff --git a/libavcodec/vp9_superframe_split_bsf.c b/libavcodec/vp9_superframe_split_bsf.c
> index 0d2523ebf7..7b6fa38554 100644
> --- a/libavcodec/vp9_superframe_split_bsf.c
> +++ b/libavcodec/vp9_superframe_split_bsf.c
> @@ -30,7 +30,7 @@
>  #include "get_bits.h"
>  
>  typedef struct VP9SFSplitContext {
> -    AVPacket *buffer_pkt;
> +    AVPacket buffer_pkt;
>  
>      int nb_frames;
>      int next_frame;
> @@ -43,13 +43,13 @@ static int vp9_superframe_split_filter(AVBSFContext *ctx, AVPacket *out)
>      VP9SFSplitContext *s = ctx->priv_data;
>      AVPacket *in;
>      int i, j, ret, marker;
> -    int is_superframe = !!s->buffer_pkt;
> +    int is_superframe = !!s->buffer_pkt.data;
>  
> -    if (!s->buffer_pkt) {
> -        ret = ff_bsf_get_packet(ctx, &s->buffer_pkt);
> +    if (!s->buffer_pkt.data) {
> +        ret = ff_bsf_get_packet_ref(ctx, &s->buffer_pkt);
>          if (ret < 0)
>              return ret;
> -        in = s->buffer_pkt;
> +        in = &s->buffer_pkt;
>  
>          marker = in->data[in->size - 1];
>          if ((marker & 0xe0) == 0xc0) {
> @@ -90,7 +90,7 @@ static int vp9_superframe_split_filter(AVBSFContext *ctx, AVPacket *out)
>          GetBitContext gb;
>          int profile, invisible = 0;
>  
> -        ret = av_packet_ref(out, s->buffer_pkt);
> +        ret = av_packet_ref(out, &s->buffer_pkt);
>          if (ret < 0)
>              goto fail;
>  
> @@ -101,7 +101,7 @@ static int vp9_superframe_split_filter(AVBSFContext *ctx, AVPacket *out)
>          s->next_frame++;
>  
>          if (s->next_frame >= s->nb_frames)
> -            av_packet_free(&s->buffer_pkt);
> +            av_packet_unref(&s->buffer_pkt);
>  
>          ret = init_get_bits8(&gb, out->data, out->size);
>          if (ret < 0)
> @@ -121,20 +121,19 @@ static int vp9_superframe_split_filter(AVBSFContext *ctx, AVPacket *out)
>              out->pts = AV_NOPTS_VALUE;
>  
>      } else {
> -        av_packet_move_ref(out, s->buffer_pkt);
> -        av_packet_free(&s->buffer_pkt);
> +        av_packet_move_ref(out, &s->buffer_pkt);
>      }
>  
>      return 0;
>  fail:
> -    av_packet_free(&s->buffer_pkt);
> +    av_packet_unref(&s->buffer_pkt);
>      return ret;
>  }
>  
>  static void vp9_superframe_split_uninit(AVBSFContext *ctx)
>  {
>      VP9SFSplitContext *s = ctx->priv_data;
> -    av_packet_free(&s->buffer_pkt);
> +    av_packet_unref(&s->buffer_pkt);
>  }
>  
>  const AVBitStreamFilter ff_vp9_superframe_split_bsf = {

Will apply later today.


More information about the ffmpeg-devel mailing list