Commit ab6edb17 authored by Mark Thompson's avatar Mark Thompson

Merge commit '7157d959'

* commit '7157d959':
  cbs_h264: Move slice_group_id array out of PPS structure
Merged-by: 's avatarMark Thompson <sw@jkqxz.net>
parents 7386b4ff 7157d959
...@@ -195,7 +195,9 @@ typedef struct H264RawPPS { ...@@ -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(GetBitContext *gbc) ...@@ -394,6 +394,13 @@ static int cbs_h2645_read_more_rbsp_data(GetBitContext *gbc)
#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, ...@@ -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, ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment