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

ReadSPSVUIHRD() private method

private ReadSPSVUIHRD ( BitReader spsReader, Variant v ) : bool
spsReader BitReader
v Variant
return bool
        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;
        }