avcodec/cbs_internal, cbs_h2645: Add and use new descriptor macros

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-08-04 10:49:50 +02:00
parent 715d3286bc
commit b37805ddbd
2 changed files with 35 additions and 52 deletions

View File

@ -1396,18 +1396,9 @@ static const CodedBitstreamUnitTypeDescriptor cbs_h264_unit_types[] = {
CBS_UNIT_TYPE_INTERNAL_REF(H264_NAL_PPS, H264RawPPS, slice_group_id),
{
.nb_unit_types = 3,
.unit_types = {
H264_NAL_IDR_SLICE,
H264_NAL_SLICE,
H264_NAL_AUXILIARY_SLICE,
},
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS,
.content_size = sizeof(H264RawSlice),
.nb_ref_offsets = 1,
.ref_offsets = { offsetof(H264RawSlice, data) },
},
CBS_UNIT_TYPES_INTERNAL_REF((H264_NAL_IDR_SLICE,
H264_NAL_SLICE,
H264_NAL_AUXILIARY_SLICE), H264RawSlice, data),
CBS_UNIT_TYPE_POD(H264_NAL_AUD, H264RawAUD),
CBS_UNIT_TYPE_POD(H264_NAL_FILLER_DATA, H264RawFiller),
@ -1433,40 +1424,15 @@ static const CodedBitstreamUnitTypeDescriptor cbs_h265_unit_types[] = {
CBS_UNIT_TYPE_POD(HEVC_NAL_AUD, H265RawAUD),
{
// Slices of non-IRAP pictures.
.nb_unit_types = CBS_UNIT_TYPE_RANGE,
.unit_type_range_start = HEVC_NAL_TRAIL_N,
.unit_type_range_end = HEVC_NAL_RASL_R,
// Slices of non-IRAP pictures.
CBS_UNIT_RANGE_INTERNAL_REF(HEVC_NAL_TRAIL_N, HEVC_NAL_RASL_R,
H265RawSlice, data),
// Slices of IRAP pictures.
CBS_UNIT_RANGE_INTERNAL_REF(HEVC_NAL_BLA_W_LP, HEVC_NAL_CRA_NUT,
H265RawSlice, data),
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS,
.content_size = sizeof(H265RawSlice),
.nb_ref_offsets = 1,
.ref_offsets = { offsetof(H265RawSlice, data) },
},
{
// Slices of IRAP pictures.
.nb_unit_types = CBS_UNIT_TYPE_RANGE,
.unit_type_range_start = HEVC_NAL_BLA_W_LP,
.unit_type_range_end = HEVC_NAL_CRA_NUT,
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS,
.content_size = sizeof(H265RawSlice),
.nb_ref_offsets = 1,
.ref_offsets = { offsetof(H265RawSlice, data) },
},
{
.nb_unit_types = 2,
.unit_types = {
HEVC_NAL_SEI_PREFIX,
HEVC_NAL_SEI_SUFFIX
},
.content_type = CBS_CONTENT_TYPE_COMPLEX,
.content_size = sizeof(H265RawSEI),
.content_free = &cbs_h265_free_sei,
},
CBS_UNIT_TYPES_COMPLEX((HEVC_NAL_SEI_PREFIX, HEVC_NAL_SEI_SUFFIX),
H265RawSEI, cbs_h265_free_sei),
CBS_UNIT_TYPE_END_OF_LIST
};

View File

@ -181,28 +181,45 @@ int ff_cbs_write_signed(CodedBitstreamContext *ctx, PutBitContext *pbc,
// range_min in the above functions.
#define MIN_INT_BITS(length) (-(INT64_C(1) << ((length) - 1)))
#define TYPE_LIST(...) { __VA_ARGS__ }
#define CBS_UNIT_TYPE_POD(type, structure) { \
.nb_unit_types = 1, \
.unit_types = { type }, \
.content_type = CBS_CONTENT_TYPE_POD, \
.content_size = sizeof(structure), \
}
#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field) { \
.nb_unit_types = 1, \
.unit_types = { type }, \
#define CBS_UNIT_TYPES_INTERNAL_REF(types, structure, ref_field) { \
.nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \
.unit_types = TYPE_LIST types, \
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \
.content_size = sizeof(structure), \
.nb_ref_offsets = 1, \
.ref_offsets = { offsetof(structure, ref_field) }, \
}
#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) { \
.nb_unit_types = 1, \
.unit_types = { type }, \
#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field) \
CBS_UNIT_TYPES_INTERNAL_REF((type), structure, ref_field)
#define CBS_UNIT_RANGE_INTERNAL_REF(range_start, range_end, structure, ref_field) { \
.nb_unit_types = CBS_UNIT_TYPE_RANGE, \
.unit_type_range_start = range_start, \
.unit_type_range_end = range_end, \
.content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \
.content_size = sizeof(structure), \
.nb_ref_offsets = 1, \
.ref_offsets = { offsetof(structure, ref_field) }, \
}
#define CBS_UNIT_TYPES_COMPLEX(types, structure, free_func) { \
.nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \
.unit_types = TYPE_LIST types, \
.content_type = CBS_CONTENT_TYPE_COMPLEX, \
.content_size = sizeof(structure), \
.content_free = free_func, \
}
#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) \
CBS_UNIT_TYPES_COMPLEX((type), structure, free_func)
#define CBS_UNIT_TYPE_END_OF_LIST { .nb_unit_types = 0 }