[FFmpeg-devel] [PATCH v1 03/13] lavc/hevc_ps: Add SPS/PPS parse support for HEVC extension syntax
James Almer
jamrial at gmail.com
Fri Dec 2 03:52:15 EET 2022
On 12/1/2022 5:13 AM, Fei Wang wrote:
> +static void colour_mapping_octants(GetBitContext *gb, HEVCPPS *pps, int inp_depth,
> + int idx_y, int idx_cb, int idx_cr, int inp_length)
> +{
> + uint8_t split_octant_flag, coded_res_flag;
> + uint16_t part_num_y, res_coeff_q, res_coeff_r;
Use int or unsigned for scalar values in stack.
> + int bit_depth_cm_input_y, bit_depth_cm_output_y, cm_res_bits;
> + int k, m, n, c, i, j;
You can reduce the scope of almost all the above variables.
> +
> + part_num_y = 1 << pps->cm_y_part_num_log2;
> +
> + if (inp_depth < pps->cm_octant_depth)
> + split_octant_flag = get_bits1(gb);
> +
> + if (split_octant_flag)
split_octant_flag may be undefined here. It should be initialized to 0.
This is probably the source of the issue Michael reported.
> + for (k = 0; k < 2; k++)
for (int k = 0...)
Same for the rest.
> + for (m = 0; m < 2; m++)
> + for (n = 0; n < 2; n++)
> + colour_mapping_octants(gb, pps, inp_depth + 1,
> + idx_y + part_num_y * k * inp_length / 2,
> + idx_cb + m * inp_length / 2,
> + idx_cr + n * inp_length / 2,
> + inp_length / 2);
> + else
> + for (i = 0; i < part_num_y; i++) {
> + for (j = 0; j < 4; j++) {
> + coded_res_flag = get_bits1(gb);
> + if (coded_res_flag)
> + for (c = 0; c < 3; c++) {
> + res_coeff_q = get_ue_golomb_long(gb);
> + bit_depth_cm_input_y = 8 + pps->luma_bit_depth_cm_input_minus8;
> + bit_depth_cm_output_y = 8 + pps->luma_bit_depth_cm_output_minus8;
> + cm_res_bits = FFMAX(0, 10 + bit_depth_cm_input_y - bit_depth_cm_output_y -
> + pps->cm_res_quant_bits - (pps->cm_delta_flc_bits_minus1 + 1));
> + res_coeff_r = get_bits(gb, cm_res_bits);
> + if (res_coeff_q || res_coeff_r)
> + skip_bits1(gb);
> + }
> + }
> + }
> +}
More information about the ffmpeg-devel
mailing list