Browse Source

avcodec/cbs: create reference counted fragments in ff_cbs_read_extradata()

This way, every CodedBitstreamType->split_fragment() function can
safely assume the fragment passed to them will be reference counted,
potentially simplifying code.

Reviewed-by: Mark Thompson <sw@jkqxz.net>
Signed-off-by: James Almer <jamrial@gmail.com>
tags/n4.1
James Almer 7 years ago
parent
commit
dff1fb27aa
1 changed files with 20 additions and 21 deletions
  1. +20
    -21
      libavcodec/cbs.c

+ 20
- 21
libavcodec/cbs.c View File

@@ -167,27 +167,6 @@ static int cbs_read_fragment_content(CodedBitstreamContext *ctx,
return 0;
}

int ff_cbs_read_extradata(CodedBitstreamContext *ctx,
CodedBitstreamFragment *frag,
const AVCodecParameters *par)
{
int err;

memset(frag, 0, sizeof(*frag));

frag->data = par->extradata;
frag->data_size = par->extradata_size;

err = ctx->codec->split_fragment(ctx, frag, 1);
if (err < 0)
return err;

frag->data = NULL;
frag->data_size = 0;

return cbs_read_fragment_content(ctx, frag);
}

static int cbs_fill_fragment_data(CodedBitstreamContext *ctx,
CodedBitstreamFragment *frag,
const uint8_t *data, size_t size)
@@ -209,6 +188,26 @@ static int cbs_fill_fragment_data(CodedBitstreamContext *ctx,
return 0;
}

int ff_cbs_read_extradata(CodedBitstreamContext *ctx,
CodedBitstreamFragment *frag,
const AVCodecParameters *par)
{
int err;

memset(frag, 0, sizeof(*frag));

err = cbs_fill_fragment_data(ctx, frag, par->extradata,
par->extradata_size);
if (err < 0)
return err;

err = ctx->codec->split_fragment(ctx, frag, 1);
if (err < 0)
return err;

return cbs_read_fragment_content(ctx, frag);
}

int ff_cbs_read_packet(CodedBitstreamContext *ctx,
CodedBitstreamFragment *frag,
const AVPacket *pkt)


Loading…
Cancel
Save