[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