unpackCommands function

List<AtemCommand> unpackCommands(
  1. Uint8List data
)

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;
}