in ftl_app/nalu.c [581:695]
int nalu_parse_pps(struct bitstream_elmt_t *bs, struct picture_params_set_t *pps)
{
pps->pic_parameter_set_id = bitstream_ue(bs);
pps->seq_parameter_set_id = bitstream_ue(bs);
pps->entropy_coding_mode_flag = bitstream_u(bs, 1);
pps->pic_order_present_flag = bitstream_u(bs, 1);
pps->num_slice_groups_minus1 = bitstream_ue(bs);
if( pps->num_slice_groups_minus1 > 0 )
{
pps->slice_group_map_type = bitstream_ue(bs);
if( pps->slice_group_map_type == 0 )
{
int iGroup;
pps->run_length_minus1 = malloc( (pps->num_slice_groups_minus1 + 1) * sizeof(pps->run_length_minus1[0]));
for( iGroup = 0; iGroup <= pps->num_slice_groups_minus1; iGroup++ )
{
pps->run_length_minus1[iGroup] = bitstream_ue(bs);
}
}
else if( pps->slice_group_map_type == 2 )
{
int iGroup;
pps->top_left = malloc( (pps->num_slice_groups_minus1 + 1) * sizeof(pps->top_left[0]));
pps->bottom_right = malloc( (pps->num_slice_groups_minus1 + 1) * sizeof(pps->bottom_right[0]));
for( iGroup = 0; iGroup < pps->num_slice_groups_minus1; iGroup++ )
{
pps->top_left[iGroup] = bitstream_ue(bs);
pps->bottom_right[iGroup] = bitstream_ue(bs);
}
}
else if( pps->slice_group_map_type == 3 ||
pps->slice_group_map_type == 4 ||
pps->slice_group_map_type == 5 )
{
pps->slice_group_change_direction_flag = bitstream_u(bs, 1);
pps->slice_group_change_rate_minus1 = bitstream_ue(bs);
}
else if( pps->slice_group_map_type == 6 )
{
int i;
int bits=0;
int pic_size;
pps->pic_size_in_map_units_minus1 = bitstream_ue(bs);
pps->slice_group_id = malloc( (pps->pic_size_in_map_units_minus1 + 1) * sizeof(pps->slice_group_id[0]));
pic_size = pps->pic_size_in_map_units_minus1 + 1;
while(pic_size != 0)
{
bits++;
pic_size >>= 1;
}
for( i = 0; i <= pps->pic_size_in_map_units_minus1; i++ )
{
pps->slice_group_id[i] = bitstream_u(bs, bits);
}
}
}
pps->num_ref_idx_l0_active_minus1 = bitstream_ue(bs);
pps->num_ref_idx_l1_active_minus1 = bitstream_ue(bs);
pps->weighted_pred_flag = bitstream_u(bs, 1);
pps->weighted_bipred_idc = bitstream_u(bs, 2);
pps->pic_init_qp_minus26 = bitstream_se(bs); /* relative to 26 */
pps->pic_init_qs_minus26 = bitstream_se(bs); /* relative to 26 */
pps->chroma_qp_index_offset = bitstream_se(bs);
pps->deblocking_filter_control_present_flag = bitstream_u(bs, 1);
pps->constrained_intra_pred_flag = bitstream_u(bs, 1);
pps->redundant_pic_cnt_present_flag = bitstream_u(bs, 1);
#if 0
if( more_rbsp_data( ) )
{
pps->transform_8x8_mode_flag
pps->pic_scaling_matrix_present_flag
if( pps->pic_scaling_matrix_present_flag )
{
for( i = 0; i < 6 + 2 * pps->transform_8x8_mode_flag; i++ )
{
pps->pic_scaling_list_present_flag[i]
if( pps->pic_scaling_list_present_flag[i] )
{
if( i < 6 )
{
scaling_list( ScalingList4x4[ i ], 16,
UseDefaultScalingMatrix4x4Flag[ i ] )
}
else
{
scaling_list( ScalingList8x8[ i - 6 ], 64,
UseDefaultScalingMatrix8x8Flag[ i - 6 ] )
}
}
}
}
second_chroma_qp_index_offset
}
#endif
_rbsp_trailing_bits(bs);
return 0;
}