mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-21 06:50:56 +00:00
cbs_h264: Move slice_group_id array out of PPS structure
It's very large, and is only used in some FMO streams.
This commit is contained in:
parent
78fa0b9033
commit
7157d95926
@ -195,7 +195,9 @@ typedef struct H264RawPPS {
|
|||||||
uint8_t slice_group_change_direction_flag;
|
uint8_t slice_group_change_direction_flag;
|
||||||
uint16_t slice_group_change_rate_minus1;
|
uint16_t slice_group_change_rate_minus1;
|
||||||
uint16_t pic_size_in_map_units_minus1;
|
uint16_t pic_size_in_map_units_minus1;
|
||||||
uint8_t slice_group_id[H264_MAX_MB_PIC_SIZE];
|
|
||||||
|
uint8_t *slice_group_id;
|
||||||
|
AVBufferRef *slice_group_id_ref;
|
||||||
|
|
||||||
uint8_t num_ref_idx_l0_default_active_minus1;
|
uint8_t num_ref_idx_l0_default_active_minus1;
|
||||||
uint8_t num_ref_idx_l1_default_active_minus1;
|
uint8_t num_ref_idx_l1_default_active_minus1;
|
||||||
|
@ -394,6 +394,13 @@ static int cbs_h2645_read_more_rbsp_data(BitstreamContext *bc)
|
|||||||
#undef allocate
|
#undef allocate
|
||||||
|
|
||||||
|
|
||||||
|
static void cbs_h264_free_pps(void *unit, uint8_t *content)
|
||||||
|
{
|
||||||
|
H264RawPPS *pps = (H264RawPPS*)content;
|
||||||
|
av_buffer_unref(&pps->slice_group_id_ref);
|
||||||
|
av_freep(&content);
|
||||||
|
}
|
||||||
|
|
||||||
static void cbs_h264_free_sei_payload(H264RawSEIPayload *payload)
|
static void cbs_h264_free_sei_payload(H264RawSEIPayload *payload)
|
||||||
{
|
{
|
||||||
switch (payload->payload_type) {
|
switch (payload->payload_type) {
|
||||||
@ -725,7 +732,8 @@ static int cbs_h264_read_nal_unit(CodedBitstreamContext *ctx,
|
|||||||
{
|
{
|
||||||
H264RawPPS *pps;
|
H264RawPPS *pps;
|
||||||
|
|
||||||
err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*pps), NULL);
|
err = ff_cbs_alloc_unit_content(ctx, unit, sizeof(*pps),
|
||||||
|
&cbs_h264_free_pps);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
pps = unit->content;
|
pps = unit->content;
|
||||||
|
@ -404,6 +404,9 @@ static int FUNC(pps)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||||||
ue(slice_group_change_rate_minus1, 0, pic_size - 1);
|
ue(slice_group_change_rate_minus1, 0, pic_size - 1);
|
||||||
} else if (current->slice_group_map_type == 6) {
|
} else if (current->slice_group_map_type == 6) {
|
||||||
ue(pic_size_in_map_units_minus1, pic_size - 1, pic_size - 1);
|
ue(pic_size_in_map_units_minus1, pic_size - 1, pic_size - 1);
|
||||||
|
|
||||||
|
allocate(current->slice_group_id,
|
||||||
|
current->pic_size_in_map_units_minus1 + 1);
|
||||||
for (i = 0; i <= current->pic_size_in_map_units_minus1; i++)
|
for (i = 0; i <= current->pic_size_in_map_units_minus1; i++)
|
||||||
u(av_log2(2 * current->num_slice_groups_minus1 + 1),
|
u(av_log2(2 * current->num_slice_groups_minus1 + 1),
|
||||||
slice_group_id[i], 0, current->num_slice_groups_minus1);
|
slice_group_id[i], 0, current->num_slice_groups_minus1);
|
||||||
|
Loading…
Reference in New Issue
Block a user