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

James Almer jamrial at gmail.com
Tue Mar 20 04:01:32 EET 2018


On 3/19/2018 4:22 PM, James Almer wrote:
> 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.
> 

Pushed.


More information about the ffmpeg-devel mailing list