parseProfileLevelId static method

ProfileLevelId? parseProfileLevelId(
  1. String? str
)

Implementation

static ProfileLevelId? parseProfileLevelId(String? str) {
  // The string should consist of 3 bytes in hexadecimal format.
  if (str == null || str.length != 6) {
    return null;
  }

  final int? profile_level_id_numeric = int.tryParse(str, radix: 16);

  if (profile_level_id_numeric == 0 || profile_level_id_numeric == null) {
    return null;
  }

  // Separate into three bytes.
  final int level_idc = profile_level_id_numeric & 0xFF;
  final int profile_iop = (profile_level_id_numeric >> 8) & 0xFF;
  final int profile_idc = (profile_level_id_numeric >> 16) & 0xFF;

  // Prase level based on level_idc and constraint set 3 flag.
  var level;

  switch (level_idc) {
    case Level1_1:
      {
        level = (profile_iop & ConstraintSet3Flag) != 0 ? Level1_b : Level1_1;
        break;
      }
    case Level1:
    case Level1_2:
    case Level1_3:
    case Level2:
    case Level2_1:
    case Level2_2:
    case Level3:
    case Level3_1:
    case Level3_2:
    case Level4:
    case Level4_1:
    case Level4_2:
    case Level5:
    case Level5_1:
    case Level5_2:
      {
        level = level_idc;
        break;
      }

    // Unrecognized level_idc.
    default:
      {
        print('parseProfileLevelId() | unrecognized level_idc:$level_idc');

        return null;
      }
  }

  // Parse profile_idc/profile_iop into a Profile enum.
  for (ProfilePattern pattern in profilePatterns) {
    if (profile_idc == pattern.profile_idc &&
        pattern.profile_iop.isMatch(profile_iop)) {
      return ProfileLevelId(profile: pattern.profile, level: level);
    }
  }

  print(
      'parseProfileLevelId() | unrecognized profile_idc/profile_iop combination');

  return null;
}