DMX In CHOP sACN priority not implemented (or buggy)

So sACN Priority on the DMXout CHOP works fine, but it would appear that the DMXin CHOP does not deal well with multiple sources on the network sending data to the same sACN DMX universe.

At the bare minimum, the DMXin CHOP (Formats Packet Per Sample (Timesliced) or Packet Per Channel (Latest)) should gracefully combine incoming sACN packets that have differing source values in their header in the following ways:

  • If one source’s packet has a higher priority value (range 0>200 default 100) in it’s header, that one takes full precedence (other packet ignored)
  • If they both have the same priority value in their header, then both packets’ data should be combined in a “Highest Takes Precedence” fashion - AKA similar to Maximum in the Math CHOP (NOT adding or averaging)

Obviously when deciding whether a lower priority packet should take effect because the higher source has not sent a packet recently, there should be some sort of timeout (preferably configurable) with a default value of probably 5 seconds - though a more specific value may be called out in the official spec.

Also this should not take effect when both packets have the same source values in their header - which can be a problem for the device sending data if (for example) you have multiple DMXout CHOPs (or TD processes sending) from the same machine / IP address and forget to change their source parameters.

Functionality Unique to TouchDesigner

For the 3rd DMXin CHOP Format - Packet Per Channel (All) - a more advanced functionality could be implemented where both competing sACN packets could be shown as two different CHOP channels with an added “priority” value tacked onto the end of the CHOP channel name after net subnet and universe.

This would allow more choice as to what to do with these differing priority values - though it would be more useful if the CHOP channels stuck around in the CHOP for as long as the previously mentioned timeout parameter allowed instead of quickly appearing and disappearing every other frame (as it seems to work now)

It also might be worth adding a “priority” column to the filter DAT to allow filtering to certain priority levels - though whether it has to match that value exactly or just be greater-than-or-equal-to said value is up for discussion.