ReadBool() public method

public ReadBool ( ) : bool
return bool
        private bool ReadPPS(BitReader ppsReader, Variant ppsInfo)
        {
            //7.3.2.2 Picture parameter set RBSP syntax
            //14496-10.pdf 44/280
            ppsInfo["pic_parameter_set_id"] = ppsReader.ReadExpGolomb("pic_parameter_set_id");
            ppsInfo["seq_parameter_set_id"] = ppsReader.ReadExpGolomb("seq_parameter_set_id");
            ppsInfo["entropy_coding_mode_flag"] = ppsReader.ReadBool();
            ppsInfo["pic_order_present_flag"] = ppsReader.ReadBool();
            ppsInfo["num_slice_groups_minus1"] = ppsReader.ReadExpGolomb("num_slice_groups_minus1");
            
            if (ppsInfo["num_slice_groups_minus1"] > 0)
            {
                long sliceGroupMapType = ppsInfo["slice_group_map_type"] = ppsReader.ReadExpGolomb("slice_group_map_type");

                switch (sliceGroupMapType)
                {
                    case 0:
                        ppsInfo["run_length_minus1"] = Variant.Get();
                        for (var i = 0; i < ppsInfo["num_slice_groups_minus1"]; i++)
                        {
                            var val = ppsReader.ReadExpGolomb("run_length_minus1");
                            ppsInfo["run_length_minus1"].Add(val);
                        }
                        break;
                    case 2:
                        ppsInfo["top_left"] = Variant.Get();
                        ppsInfo["bottom_right"] = Variant.Get();
                        for (var i = 0; i < ppsInfo["num_slice_groups_minus1"]; i++)
                        {
                            ppsInfo["top_left"].Add(ppsReader.ReadExpGolomb("top_left"));
                            ppsInfo["bottom_right"].Add(ppsReader.ReadExpGolomb("bottom_right"));
                        }
                        break;
                    case 3:
                    case 4:
                    case 5:
                        ppsInfo["slice_group_change_direction_flag"] = ppsReader.ReadBool();
                        ppsInfo["slice_group_change_rate_minus1"] = ppsReader.ReadExpGolomb("slice_group_change_rate_minus1");
                        break;
                    case 6:
                        ppsInfo["pic_size_in_map_units_minus1"] = ppsReader.ReadExpGolomb("pic_size_in_map_units_minus1");
                        ppsInfo["slice_group_id"] = Variant.Get();
                        for (var i = 0; i <= ppsInfo["pic_size_in_map_units_minus1"]; i++)
                        {
                            ppsInfo["slice_group_id"].Add(ppsReader.ReadExpGolomb("slice_group_id"));
                        }
                        break;
                }
            }
            ppsInfo["num_ref_idx_l0_active_minus1"] = ppsReader.ReadExpGolomb("num_ref_idx_l0_active_minus1");
            ppsInfo["num_ref_idx_l1_active_minus1"] = ppsReader.ReadExpGolomb("num_ref_idx_l1_active_minus1");
            ppsInfo["weighted_pred_flag"] = ppsReader.ReadBool();
            ppsInfo["weighted_bipred_idc"] = ppsReader.ReadBitsToInt(2);
            ppsInfo["pic_init_qp_minus26"] = ppsReader.ReadExpGolomb("pic_init_qp_minus26");
            ppsInfo["pic_init_qs_minus26"] = ppsReader.ReadExpGolomb("pic_init_qs_minus26");
            ppsInfo["chromqp_index_offset"] = ppsReader.ReadExpGolomb("chromqp_index_offset");
            ppsInfo["deblocking_filter_control_present_flag"] = ppsReader.ReadBool();
            ppsInfo["constrained_intrpred_flag"] = ppsReader.ReadBool();
            ppsInfo["redundant_pic_cnt_present_flag"] = ppsReader.ReadBool();
            return true;
        }
 private bool ReadSPSVUI(BitReader spsReader, Variant v)
 {
     //E.1.1 VUI parameters syntax
     //14496-10.pdf 267/280
     v["aspect_ratio_info_present_flag"] = spsReader.ReadBool();
     if (v["aspect_ratio_info_present_flag"])
     {
         v["aspect_ratio_idc"] = spsReader.ReadBitsToByte();
         if ((byte)v["aspect_ratio_idc"] == 255)
         {
             v["sar_width"] = (ushort)spsReader.ReadBitsToShort();
             v["sar_height"] = (ushort)spsReader.ReadBitsToShort();
         }
     }
     v["overscan_info_present_flag"] = spsReader.ReadBool();
     if (v["overscan_info_present_flag"])
         v["overscan_appropriate_flag"] = spsReader.ReadBool();
     v["video_signal_type_present_flag"] = spsReader.ReadBool();
     if (v["video_signal_type_present_flag"])
     {
         v["video_format"] = spsReader.ReadBitsToByte(3);
         v["video_full_range_flag"] = spsReader.ReadBool();
         v["colour_description_present_flag"] = spsReader.ReadBool();
         if (v["colour_description_present_flag"])
         {
             v["colour_primaries"] = spsReader.ReadBitsToByte();
             v["transfer_characteristics"] = spsReader.ReadBitsToByte();
             v["matrix_coefficients"] = spsReader.ReadBitsToByte();
         }
     }
     v["chromloc_info_present_flag"] = spsReader.ReadBool();
     if (v["chromloc_info_present_flag"])
     {
         v["chromsample_loc_type_top_field"] = spsReader.ReadExpGolomb("chromsample_loc_type_top_field");
         v["chromsample_loc_type_bottom_field"] = spsReader.ReadExpGolomb("chromsample_loc_type_bottom_field");
     }
     v["timing_info_present_flag"] = spsReader.ReadBool();
     if (v["timing_info_present_flag"])
     {
         v["num_units_in_tick"] = spsReader.ReadBitsToInt();
         v["time_scale"] = spsReader.ReadBitsToInt();
         v["fixed_frame_rate_flag"] = spsReader.ReadBool();
     }
     v["nal_hrd_parameters_present_flag"] = spsReader.ReadBool();
     if (v["nal_hrd_parameters_present_flag"])
     {
         if (!ReadSPSVUIHRD(spsReader, v["nal_hrd"] = Variant.Get()))
         {
             Logger.FATAL("Unable to read VUIHRD");
             return false;
         }
     }
     v["vcl_hrd_parameters_present_flag"] = spsReader.ReadBool();
     if (v["vcl_hrd_parameters_present_flag"])
     {
         if (!ReadSPSVUIHRD(spsReader, v["vcl_hrd"] = Variant.Get()))
         {
             Logger.FATAL("Unable to read VUIHRD");
             return false;
         }
     }
     if (v["nal_hrd_parameters_present_flag"]
             || v["vcl_hrd_parameters_present_flag"])
         v["low_delay_hrd_flag"] = spsReader.ReadBool();
     v["pic_struct_present_flag"] = spsReader.ReadBool();
     v["bitstream_restriction_flag"] = spsReader.ReadBool();
     if (v["bitstream_restriction_flag"])
     {
         v["motion_vectors_over_pic_boundaries_flag"] = spsReader.ReadBool();
         v["max_bytes_per_pic_denom"] = spsReader.ReadExpGolomb("max_bytes_per_pic_denom");
         v["max_bits_per_mb_denom"] = spsReader.ReadExpGolomb("max_bits_per_mb_denom");
         v["log2_max_mv_length_horizontal"] = spsReader.ReadExpGolomb("log2_max_mv_length_horizontal");
         v["log2_max_mv_length_vertical"] = spsReader.ReadExpGolomb("log2_max_mv_length_vertical");
         v["num_reorder_frames"] = spsReader.ReadExpGolomb("num_reorder_frames");
         v["max_dec_frame_buffering"] = spsReader.ReadExpGolomb("max_dec_frame_buffering");
     }
     return true;
 }
 private bool ReadSPSVUIHRD(BitReader spsReader, Variant v)
 {
     //E.1.2 HRD parameters syntax
     //14496-10.pdf 268/280
     v["cpb_cnt_minus1"] = spsReader.ReadExpGolomb("cpb_cnt_minus1");
     v["bit_rate_scale"] = spsReader.ReadBitsToByte(4);
     v["cpb_size_scale"] = spsReader.ReadBitsToByte(4);
     v["bit_rate_value_minus1"] = Variant.Get();
     v["cpb_size_value_minus1"] = Variant.Get();
     v["cbr_flag"] = Variant.Get();
     for (ulong i = 0; i <= v["cpb_cnt_minus1"]; i++)
     {
         var val = spsReader.ReadExpGolomb("bit_rate_value_minus1");
         v["bit_rate_value_minus1"].Add(val);
         val = spsReader.ReadExpGolomb("cpb_size_value_minus1");
         v["cpb_size_value_minus1"].Add(val);
         if (spsReader.AvailableBits < 1)
         {
             Logger.FATAL("not enough data");
             return false;
         }
         v["cbr_flag"].Add(spsReader.ReadBool());
     }
     v["initial_cpb_removal_delay_length_minus1"] = spsReader.ReadBitsToByte(5);
     v["cpb_removal_delay_length_minus1"] = spsReader.ReadBitsToByte(5);
     v["dpb_output_delay_length_minus1"] = spsReader.ReadBitsToByte(5);
     v["time_offset_length"] = spsReader.ReadBitsToByte(5);
     return true;
 }
 private bool ReadSPS(BitReader spsReader, Variant spsInfo)
 {
     //7.3.2.1 Sequence parameter set RBSP syntax
     //14496-10.pdf 43/280
     spsInfo["profile_idc"] = spsReader.ReadBitsToByte();
     spsInfo["constraint_set0_flag"] = spsReader.ReadBool();
     spsInfo["constraint_set1_flag"] = spsReader.ReadBool();
     spsInfo["constraint_set2_flag"] = spsReader.ReadBool();
     spsInfo["reserved_zero_5bits"] = spsReader.ReadBitsToByte(5);
     spsInfo["level_idc"] = spsReader.ReadBitsToByte();
     spsInfo["seq_parameter_set_id"] = spsReader.ReadExpGolomb("seq_parameter_set_id");
     if (spsInfo["profile_idc"] >= 100)
     {
         spsInfo["chromformat_idc"] = spsReader.ReadExpGolomb("chromformat_idc");
         if (spsInfo["chromformat_idc"] == 3) spsInfo["residual_colour_transform_flag"] = spsReader.ReadBool();
         spsInfo["bit_depth_lumminus8"] = spsReader.ReadExpGolomb("bit_depth_lumminus8");
         spsInfo["bit_depth_chromminus8"] = spsReader.ReadExpGolomb("bit_depth_chromminus8");
         spsInfo["qpprime_y_zero_transform_bypass_flag"] = spsReader.ReadBool();
         spsInfo["seq_scaling_matrix_present_flag"] = spsReader.ReadBool();
         if (spsInfo["seq_scaling_matrix_present_flag"])
         {
             for (byte i = 0; i < 8; i++)
             {
                 if (spsReader.AvailableBits < 1)
                 {
                     Logger.FATAL("unable to read seq_scaling_list_present_flag not enought bits ");
                     return false;
                 }
                 if (spsReader.ReadBool())
                 {
                     if (i < 6)
                     {
                         if (scaling_list(spsReader, 16)) continue;
                         Logger.FATAL("scaling_list failed");
                         return false;
                     }
                     if (scaling_list(spsReader, 64)) continue;
                     Logger.FATAL("scaling_list failed");
                     return false;
                 }
             }
         }
     }
     spsInfo["log2_max_frame_num_minus4"] = spsReader.ReadExpGolomb("log2_max_frame_num_minus4");
     spsInfo["pic_order_cnt_type"] = spsReader.ReadExpGolomb("pic_order_cnt_type");
     if ((ulong)spsInfo["pic_order_cnt_type"] == 0)
     {
         spsInfo["log2_max_pic_order_cnt_lsb_minus4"] = spsReader.ReadExpGolomb("log2_max_pic_order_cnt_lsb_minus4");
     }
     else if ((ulong)spsInfo["pic_order_cnt_type"] == 1)
     {
         spsInfo["deltpic_order_always_zero_flag"] = spsReader.ReadBool();
         spsInfo["offset_for_non_ref_pic"] = (long)spsReader.ReadExpGolomb("offset_for_non_ref_pic");
         spsInfo["offset_for_top_to_bottom_field"] = (long)spsReader.ReadExpGolomb("offset_for_top_to_bottom_field");
         spsInfo["num_ref_frames_in_pic_order_cnt_cycle"] = spsReader.ReadExpGolomb("num_ref_frames_in_pic_order_cnt_cycle");
         for (ulong i = 0; i < (ulong)spsInfo["num_ref_frames_in_pic_order_cnt_cycle"]; i++)
         {
             var val = spsReader.ReadExpGolomb("offset_for_ref_frame value");
             spsInfo["offset_for_ref_frame"].Add((long)val);
         }
     }
     spsInfo["num_ref_frames"] = spsReader.ReadExpGolomb("num_ref_frames");
     spsInfo["gaps_in_frame_num_value_allowed_flag"] = spsReader.ReadBool();
     spsInfo["pic_width_in_mbs_minus1"] = spsReader.ReadExpGolomb("pic_width_in_mbs_minus1");
     spsInfo["pic_height_in_map_units_minus1"] = spsReader.ReadExpGolomb("pic_height_in_map_units_minus1");
     spsInfo["frame_mbs_only_flag"] = spsReader.ReadBool();
     if (!spsInfo["frame_mbs_only_flag"])
         spsInfo["mb_adaptive_frame_field_flag"] = spsReader.ReadBool();
     spsInfo["direct_8x8_inference_flag"] = spsReader.ReadBool();
     spsInfo["frame_cropping_flag"] = spsReader.ReadBool();
     if (spsInfo["frame_cropping_flag"])
     {
         spsInfo["frame_crop_left_offset"] = spsReader.ReadExpGolomb("frame_crop_left_offset");
         spsInfo["frame_crop_right_offset"] = spsReader.ReadExpGolomb("frame_crop_right_offset");
         spsInfo["frame_crop_top_offset"] = spsReader.ReadExpGolomb("frame_crop_top_offset");
         spsInfo["frame_crop_bottom_offset"] = spsReader.ReadExpGolomb("frame_crop_bottom_offset");
     }
     spsInfo["vui_parameters_present_flag"] = spsReader.ReadBool();
     if (!spsInfo["vui_parameters_present_flag"]) return true;
    
     if (ReadSPSVUI(spsReader, spsInfo["vui_parameters"]= Variant.Get())) return true;
     Logger.FATAL("Unable to read VUI");
     return false;
 }