Skip to content
uupaa edited this page Sep 10, 2018 · 1 revision

TODO: add description

PPS

  • u(n) で n が数値の場合は n bit 読み進め、結果をunsignedで返す事を意味しています。 u(1) は 1 bit を読み進めます。
  • u(n) で n が v の場合は、変数名毎に特殊なルールで読み込むビット数を决定する事を意味しています。
    • slice_group_id[i] = u(v)
      • The length of the slice_group_id[ i ] syntax element is Ceil( Log2( num_slice_groups_minus1 + 1 ) ) bits.
      • slice_group_id[i] = u(v)Math.ceil( Math.log2( num_slice_groups_minus1 + 1 ) ) から求める事ができます

Ceil( Log2( num_slice_groups_minus1 + 1 ) )

pic_parameter_set_rbsp() {
    pic_parameter_set_id                                ue(v)
    seq_parameter_set_id                                ue(v)
    entropy_coding_mode_flag                            u(1)
    bottom_field_pic_order_in_frame_present_flag        u(1)
    num_slice_groups_minus1                             ue(v)
    if (num_slice_groups_minus1 > 0) {
        slice_group_map_type                            ue(v)
        if (slice_group_map_type == 0) {
            for (iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++) {
                run_length_minus1[ iGroup ]             ue(v)
            }
        } else if (slice_group_map_type == 2) {
            for (iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++) {
                top_left[ iGroup ]                      ue(v)
                bottom_right[ iGroup ]                  ue(v)
            }
        } else if (slice_group_map_type == 3 ||
                   slice_group_map_type == 4 ||
                   slice_group_map_type == 5) {
            slice_group_change_direction_flag           u(1)
            slice_group_change_rate_minus1              ue(v)
        } else if (slice_group_map_type == 6) {
            pic_size_in_map_units_minus1                ue(v)
            for (i = 0; i <= pic_size_in_map_units_minus1; i++) {
                slice_group_id[ i ]                     u(v)
            }
        }
    }
    num_ref_idx_l0_default_active_minus1                ue(v)
    num_ref_idx_l1_default_active_minus1                ue(v)
    weighted_pred_flag                                  u(1)
    weighted_bipred_idc                                 u(2)
    pic_init_qp_minus26                                 se(v) // relative to 26
    pic_init_qs_minus26                                 se(v) // relative to 26
    chroma_qp_index_offset                              se(v)
    deblocking_filter_control_present_flag              u(1)
    constrained_intra_pred_flag                         u(1)
    redundant_pic_cnt_present_flag                      u(1)

    if ( more_rbsp_data() ) {
        transform_8x8_mode_flag                         u(1)
        pic_scaling_matrix_present_flag                 u(1)
        if (pic_scaling_matrix_present_flag) {
            for (i = 0; i < 6 + ( (chroma_format_idc != 3 ) ? 2 : 6 ) * transform_8x8_mode_flag; i++) {
                pic_scaling_list_present_flag[ i ]      u(1)
                if (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                   se(v)
    }
    rbsp_trailing_bits()
}