private int GetCoefficientLevelCode(int suffixLength) { int levelPrefix = _reader.GetLeadingZeroBits(); // level_prefix int levelCode = (levelPrefix << suffixLength); if ((suffixLength == 0) && (levelPrefix < 14)) { return(levelCode); // level_suffix is (0) } int levelSuffixSize; if (levelPrefix >= 15) { // Escape-coded (high) coefficient level levelSuffixSize = (levelPrefix - 3); levelCode = 15 << Math.Max(1, suffixLength); levelCode += (1 << levelSuffixSize) - 4096; } else if ((levelPrefix == 14) && (suffixLength == 0)) { levelSuffixSize = 4; } else { levelSuffixSize = suffixLength; } var levelSuffix = (int)_reader.GetBits(levelSuffixSize); // level_suffix return(levelCode + levelSuffix); }