diff mbox

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

Message ID 20180316223941.1668-1-jamrial@gmail.com
State Accepted
Commit e4eaaf7bf6930cd0c9a15631dfee0e235f327ba9
Headers show

Commit Message

James Almer March 16, 2018, 10:39 p.m. UTC
There's no need to allocate a new packet for it.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/vp9_superframe_split_bsf.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

Comments

James Almer March 19, 2018, 7:22 p.m. UTC | #1
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@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.
James Almer March 20, 2018, 2:01 a.m. UTC | #2
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@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.
diff mbox

Patch

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 = {