parseProfileLevelId static method
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;
}