CSharpRTMP.Core.Streaming.VideoAvc.ReadPPS C# (CSharp) Method

ReadPPS() private method

private ReadPPS ( BitReader ppsReader, Variant ppsInfo ) : bool
ppsReader BitReader
ppsInfo Variant
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;
        }