private void InitFrameSizes()
{
if (_frameSizes != null) return;
//ver/layer/bitrate/samplerate/padding
_frameSizes = new uint[4, 4, 15, 3, 2];
for (byte ver = 0; ver < 4; ver++)
{
if (ver == 1)
continue;
for (byte layer = 0; layer < 4; layer++)
{
if (layer == 0)
continue;
for (byte bitRateIndex = 1; bitRateIndex < 15; bitRateIndex++)
{
for (byte sampleRateIndex = 0; sampleRateIndex < 3; sampleRateIndex++)
{
for (byte padding = 0; padding < 2; padding++)
{
var bitRate = _bitRates[ver, layer, bitRateIndex];
var sampleRate = _samplingRates[ver, sampleRateIndex];
int length;
if (layer == LAYER_1)
{
length = (12 * bitRate / sampleRate + padding) * 4;
}
else
{
length = 144 * bitRate / sampleRate + padding;
}
_frameSizes[ver, layer, bitRateIndex, sampleRateIndex, padding] = (uint) length;
}
}
}
}
}
}