unpackCommands function
Unpacks a packet payload into individual commands.
Implementation
List<AtemCommand> unpackCommands(Uint8List data) {
final commands = <AtemCommand>[];
var offset = 0;
while (offset < data.length) {
if (offset + 8 > data.length) {
throw const FormatException('Incomplete ATEM command header');
}
final recordLength =
ByteData.view(data.buffer, data.offsetInBytes + offset, 2).getUint16(0);
if (recordLength < 8 || offset + recordLength > data.length) {
throw FormatException('Invalid ATEM command length: $recordLength');
}
final code = _bytesToCode(data, offset + 4);
final cmdData = data.sublist(offset + 8, offset + recordLength);
commands.add(_AtemCommandImpl(code, cmdData));
offset += recordLength;
}
return commands;
}