mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
parent
6a955750d6
commit
dff1fb27aa
|
@ -167,27 +167,6 @@ static int cbs_read_fragment_content(CodedBitstreamContext *ctx,
|
||||||
return 0;
|
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,
|
static int cbs_fill_fragment_data(CodedBitstreamContext *ctx,
|
||||||
CodedBitstreamFragment *frag,
|
CodedBitstreamFragment *frag,
|
||||||
const uint8_t *data, size_t size)
|
const uint8_t *data, size_t size)
|
||||||
|
@ -209,6 +188,26 @@ static int cbs_fill_fragment_data(CodedBitstreamContext *ctx,
|
||||||
return 0;
|
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,
|
int ff_cbs_read_packet(CodedBitstreamContext *ctx,
|
||||||
CodedBitstreamFragment *frag,
|
CodedBitstreamFragment *frag,
|
||||||
const AVPacket *pkt)
|
const AVPacket *pkt)
|
||||||
|
|
Loading…
Reference in New Issue