Skip to content

avtp: crf: Extend tstamp with gst base and running time instead of CRF timestamp

Copied from https://gitlab.freedesktop.org//gstreamer/gst-plugins-bad/-/merge_requests/1982

The CRF time stamps also include the max transit time. Therefore a CRF time stamp can be greater than the AVTP presentation time stamp. This can result into an unexpected flip of the 32rd bit. To avoid such an issue the following rules have to be always true between reference time stamp used for extension and the time stamp to extend

  1. REFERENCE < TIMESTAMP
  2. REFERENCE > TIMESTAMP - 2^32ns

The following examples show what happens when those rules are not always guaranteed:

1. 0x16428124 0000 0001	REFERENCE time stamp (current_ts is used as reference without this patchset)
2. 0x16428124 0000 0000	expected 64 bit TIMESTAMP after extension (AVTP packet contains only lower 32 bits. Upper 32 bits have to be recovered correctly)
3. 0x16428124 0000 0000	after 32 bit to 64 bit extension
4. 0x16428125 0000 0000	after adding 2^32 because (TIMESTAMP[3] < REFERENCE[1])

=> NOT OK because rule 1 is violated (REFERENCE > TIMESTAMP)

1. 0x16428123 FFFF FFFF	REFERENCE time stamp
2. 0x16428124 0000 0000	expected 64 bit TIMESTAMP after extension
3. 0x16428123 0000 0000	after 32 bit to 64 bit extension
4. 0x16428124 0000 0000	after adding 2^32 because (TIMESTAMP[3] < REFERENCE[1])

=> OK (recovered timestamp [4] matches expectation[2])

1. 0x16428123 0000 0000	REFERENCE time stamp
2. 0x16428124 0000 0000	expected 64 bit TIMESTAMP after extension
3. 0x16428123 0000 0000	after 32 bit to 64 bit extension
4. 0x16428123 0000 0000	2^32 will not be added because (TIMESTAMP < REFERENCE)

=> NOT OK because rule 2 is violated ((TIMESTAMP - REFERENCE) > 2^32ns)

1. 0x16428123 0000 0000	REFERENCE time stamp
2. 0x16428123 FFFF FFFF	expected 64 bit TIMESTAMP after extension
3. 0x16428123 FFFF FFFF	after 32 bit to 64 bit extension
4. 0x16428123 FFFF FFFF	2^32 will not be added because (TIMESTAMP < REFERENCE)

=> OK because (TIMESTAMP - REFERENCE) < 2^32ns

The first commit does not change the behavior. It is only refactoring some functions.

Merge request reports

Loading