fromBytes static method

AtemPacket fromBytes(
  1. Uint8List bytes
)

Creates a packet from raw bytes.

Implementation

static AtemPacket fromBytes(Uint8List bytes) {
  if (bytes.length < headerSize) {
    throw ArgumentError('Packet too short: ${bytes.length} < $headerSize');
  }

  final packet = AtemPacket();
  final view = ByteData.view(bytes.buffer, bytes.offsetInBytes, bytes.length);

  // First 2 bytes: length (11 bits) + flags (5 bits)
  final firstWord = view.getUint16(0);
  packet.length = firstWord & 0x07FF;
  packet.flags = (firstWord >> 11) & 0x1F;

  // Validate length
  if (packet.length != bytes.length) {
    throw FormatException(
        'Packet length mismatch: header says ${packet.length}, actual ${bytes.length}');
  }

  packet.session = view.getUint16(2);
  packet.acknowledgementNumber = view.getUint16(4);
  packet.remoteSequenceNumber = view.getUint16(6);
  // Bytes 8-9 are reserved. The packet sequence number is the final
  // 16-bit field in the 12-byte ATEM UDP header.
  packet.sequenceNumber = view.getUint16(10);

  if (packet.length > headerSize) {
    packet.data = bytes.sublist(headerSize);
  }

  return packet;
}