mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
cbs_av1: Use table-based alloc/free
This commit is contained in:
parent
f643f9bd6d
commit
ae7686a64f
@ -809,50 +809,6 @@ fail:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cbs_av1_free_tile_data(AV1RawTileData *td)
|
|
||||||
{
|
|
||||||
av_buffer_unref(&td->data_ref);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cbs_av1_free_padding(AV1RawPadding *pd)
|
|
||||||
{
|
|
||||||
av_buffer_unref(&pd->payload_ref);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cbs_av1_free_metadata(AV1RawMetadata *md)
|
|
||||||
{
|
|
||||||
switch (md->metadata_type) {
|
|
||||||
case AV1_METADATA_TYPE_ITUT_T35:
|
|
||||||
av_buffer_unref(&md->metadata.itut_t35.payload_ref);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cbs_av1_free_obu(void *opaque, uint8_t *content)
|
|
||||||
{
|
|
||||||
AV1RawOBU *obu = (AV1RawOBU*)content;
|
|
||||||
|
|
||||||
switch (obu->header.obu_type) {
|
|
||||||
case AV1_OBU_TILE_GROUP:
|
|
||||||
cbs_av1_free_tile_data(&obu->obu.tile_group.tile_data);
|
|
||||||
break;
|
|
||||||
case AV1_OBU_FRAME:
|
|
||||||
cbs_av1_free_tile_data(&obu->obu.frame.tile_group.tile_data);
|
|
||||||
break;
|
|
||||||
case AV1_OBU_TILE_LIST:
|
|
||||||
cbs_av1_free_tile_data(&obu->obu.tile_list.tile_data);
|
|
||||||
break;
|
|
||||||
case AV1_OBU_METADATA:
|
|
||||||
cbs_av1_free_metadata(&obu->obu.metadata);
|
|
||||||
break;
|
|
||||||
case AV1_OBU_PADDING:
|
|
||||||
cbs_av1_free_padding(&obu->obu.padding);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
av_freep(&obu);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cbs_av1_ref_tile_data(CodedBitstreamContext *ctx,
|
static int cbs_av1_ref_tile_data(CodedBitstreamContext *ctx,
|
||||||
CodedBitstreamUnit *unit,
|
CodedBitstreamUnit *unit,
|
||||||
GetBitContext *gbc,
|
GetBitContext *gbc,
|
||||||
@ -887,8 +843,7 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
|
|||||||
GetBitContext gbc;
|
GetBitContext gbc;
|
||||||
int err, start_pos, end_pos;
|
int err, start_pos, end_pos;
|
||||||
|
|
||||||
err = ff_cbs_alloc_unit_content(unit, sizeof(*obu),
|
err = ff_cbs_alloc_unit_content2(ctx, unit);
|
||||||
&cbs_av1_free_obu);
|
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
obu = unit->content;
|
obu = unit->content;
|
||||||
@ -1247,11 +1202,49 @@ static void cbs_av1_close(CodedBitstreamContext *ctx)
|
|||||||
av_buffer_unref(&priv->frame_header_ref);
|
av_buffer_unref(&priv->frame_header_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cbs_av1_free_metadata(void *unit, uint8_t *content)
|
||||||
|
{
|
||||||
|
AV1RawOBU *obu = (AV1RawOBU*)content;
|
||||||
|
AV1RawMetadata *md;
|
||||||
|
|
||||||
|
av_assert0(obu->header.obu_type == AV1_OBU_METADATA);
|
||||||
|
md = &obu->obu.metadata;
|
||||||
|
|
||||||
|
switch (md->metadata_type) {
|
||||||
|
case AV1_METADATA_TYPE_ITUT_T35:
|
||||||
|
av_buffer_unref(&md->metadata.itut_t35.payload_ref);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static const CodedBitstreamUnitTypeDescriptor cbs_av1_unit_types[] = {
|
||||||
|
CBS_UNIT_TYPE_POD(AV1_OBU_SEQUENCE_HEADER, AV1RawOBU),
|
||||||
|
CBS_UNIT_TYPE_POD(AV1_OBU_TEMPORAL_DELIMITER, AV1RawOBU),
|
||||||
|
CBS_UNIT_TYPE_POD(AV1_OBU_FRAME_HEADER, AV1RawOBU),
|
||||||
|
CBS_UNIT_TYPE_POD(AV1_OBU_REDUNDANT_FRAME_HEADER, AV1RawOBU),
|
||||||
|
|
||||||
|
CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_GROUP, AV1RawOBU,
|
||||||
|
obu.tile_group.tile_data.data),
|
||||||
|
CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_FRAME, AV1RawOBU,
|
||||||
|
obu.frame.tile_group.tile_data.data),
|
||||||
|
CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_TILE_LIST, AV1RawOBU,
|
||||||
|
obu.tile_list.tile_data.data),
|
||||||
|
CBS_UNIT_TYPE_INTERNAL_REF(AV1_OBU_PADDING, AV1RawOBU,
|
||||||
|
obu.padding.payload),
|
||||||
|
|
||||||
|
CBS_UNIT_TYPE_COMPLEX(AV1_OBU_METADATA, AV1RawOBU,
|
||||||
|
&cbs_av1_free_metadata),
|
||||||
|
|
||||||
|
CBS_UNIT_TYPE_END_OF_LIST
|
||||||
|
};
|
||||||
|
|
||||||
const CodedBitstreamType ff_cbs_type_av1 = {
|
const CodedBitstreamType ff_cbs_type_av1 = {
|
||||||
.codec_id = AV_CODEC_ID_AV1,
|
.codec_id = AV_CODEC_ID_AV1,
|
||||||
|
|
||||||
.priv_data_size = sizeof(CodedBitstreamAV1Context),
|
.priv_data_size = sizeof(CodedBitstreamAV1Context),
|
||||||
|
|
||||||
|
.unit_types = cbs_av1_unit_types,
|
||||||
|
|
||||||
.split_fragment = &cbs_av1_split_fragment,
|
.split_fragment = &cbs_av1_split_fragment,
|
||||||
.read_unit = &cbs_av1_read_unit,
|
.read_unit = &cbs_av1_read_unit,
|
||||||
.write_unit = &cbs_av1_write_obu,
|
.write_unit = &cbs_av1_write_obu,
|
||||||
|
Loading…
Reference in New Issue
Block a user