AtemPacket.fromBytes constructor
AtemPacket.fromBytes(
- Uint8List bytes
Creates an AtemPacket from raw bytes.
Implementation
factory AtemPacket.fromBytes(Uint8List bytes) {
if (bytes.length < headerSize) {
throw ArgumentError('Packet too short for header');
}
final header = ByteData.view(bytes.buffer, bytes.offsetInBytes, headerSize);
// First 2 bytes: length (11 bits) + flags (5 bits)
final firstWord = header.getUint16(0, Endian.big);
final length = firstWord & 0x07FF;
final flags = (firstWord >> 11) & 0x1F;
if (length != bytes.length) {
throw FormatException(
'Incomplete or corrupt packet: header says $length but data length is ${bytes.length}');
}
final session = header.getUint16(2, Endian.big);
final acknowledgementNumber = header.getUint16(4, Endian.big);
final remoteSequenceNumber = header.getUint16(6, Endian.big);
final sequenceNumber = header.getUint16(8, Endian.big);
final data =
bytes.length > headerSize ? bytes.sublist(headerSize) : Uint8List(0);
return AtemPacket(
flags: flags,
length: length,
session: session,
sequenceNumber: sequenceNumber,
acknowledgementNumber: acknowledgementNumber,
remoteSequenceNumber: remoteSequenceNumber,
data: data,
);
}