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;
}