gstreamer/ext
Vedang Patel 12ad2a4bcd avtp: Introduce the CRF Sync Element
This commit introduces the AVTP Clock Reference Format (CRF) Synchronizer
element. This element implements the AVTP CRF Listener as described in IEEE
1722-2016 Section 10.

CRF is useful in synchronizing events within different systems by
distributing a common clock. This is useful in a scenario where there are
multiple talkers who are sending data to a single listener which is
processing that data. E.g.  CCTV cameras on a network sending AVTP video
streams to a base station to display on the same screen.

It is assumed that all the systems are already time-synchronized with each
other. So, the AVTP Talker essentially adjusts the AVTP Presentation Time
so it's phase-locked with the reference clock provided by the CRF stream.

There are 2 different roles of systems which participate in CRF data
exchange.  A system can either be a CRF Talker, which samples it's own
clock and generates a stream of timestamps to transmit over the network, or
a CRF Listener, the system which receives the generated timestamps and
recovers the media clock from the timestamps. It then adjusts it's own
clock to align with recovered media clock. The timestamps generated by the
talker may not be continuous and the listener might have to interpolate
some timestamps to recover the media clock. The number of timestamps to
interpolate is mentioned in the CRF stream AVTPDU (Refer IEEE 1722-2016
Section 10.4 for AVTPDU structure). Only CRF Listener has been implemented
in this commit.

The CRF Sync element will create a separate thread to listen for the CRF
stream. This thread will calculate and store the average period of the
recovered media clock. The pipeline thread will use this stored period
along with the first timestamp of the latest CRF AVTPDU received to
calculate adjustment for timestamps in the audio/video streams. In case of
CRF AVTPDUs with single timestamp, two consecutive CRF AVTPDUs will be used
to figure out the average period of the recovered media clock.

In case of H264 streams, both AVTP timestamp and H264 timestamp will be
adjusted.

In the future commits, another "CRF Checker" element will be introduced
which will validate the timestamps on the AVTP Listener side. Which is why
a lot of code has been implemented as part of the gstcrfbase class.
2020-04-30 23:31:25 +00:00
..
aom documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
assrender documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
avtp avtp: Introduce the CRF Sync Element 2020-04-30 23:31:25 +00:00
bs2b Remove autotools build system 2019-10-14 13:54:27 +01:00
bz2 Remove autotools build system 2019-10-14 13:54:27 +01:00
chromaprint Remove autotools build system 2019-10-14 13:54:27 +01:00
closedcaption cccombiner: don't drop buffers on video timestamp discontinuities 2020-04-24 08:47:50 +00:00
colormanagement documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
curl gstcurlhttpsink: Update HTTP header for curl 7.66 2020-02-07 13:24:53 +00:00
dash dash: fix VARARGS coverity error 2020-04-08 20:02:57 +00:00
dc1394 Remove autotools build system 2019-10-14 13:54:27 +01:00
directfb documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
dtls dtls/connection: fix EOF handling with openssl 1.1.1e 2020-03-27 11:43:53 +11:00
dts Remove autotools build system 2019-10-14 13:54:27 +01:00
faac Remove autotools build system 2019-10-14 13:54:27 +01:00
faad Remove autotools build system 2019-10-14 13:54:27 +01:00
fdkaac fdkaacdec: add support for mpegversion=2 2020-02-04 07:52:22 +00:00
flite Remove autotools build system 2019-10-14 13:54:27 +01:00
fluidsynth fluiddec: Move logging init into plugin_init 2020-02-11 12:10:50 +00:00
gme Remove autotools build system 2019-10-14 13:54:27 +01:00
gsm Remove autotools build system 2019-10-14 13:54:27 +01:00
hls hls: Check nettle version to ensure AES128 support 2020-01-10 16:03:48 +09:00
iqa Remove autotools build system 2019-10-14 13:54:27 +01:00
kate remove various useless linefeed in logs 2019-12-11 10:51:29 +01:00
ladspa ladspa: only multiply bounded rate properties by sample rate 2020-02-06 10:15:12 +00:00
libde265 Remove autotools build system 2019-10-14 13:54:27 +01:00
libmms documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
lv2 lv2: Namespace global variables and explicitly make them private 2020-04-29 19:49:45 +00:00
mdns ext: add libmicrodns-based mdns device provider 2019-10-08 12:28:01 +00:00
modplug Remove autotools build system 2019-10-14 13:54:27 +01:00
mpeg2enc documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
mplex Remove autotools build system 2019-10-14 13:54:27 +01:00
musepack Remove autotools build system 2019-10-14 13:54:27 +01:00
neon meson: build with neon 0.31 2020-04-03 18:50:16 -04:00
ofa Remove autotools build system 2019-10-14 13:54:27 +01:00
openal Remove autotools build system 2019-10-14 13:54:27 +01:00
opencv opencv: allow compilation against 4.2.x 2019-12-26 22:43:35 +01:00
openexr openexr: Fix check for when to pass -std=c++98 2019-12-02 08:53:59 +00:00
openh264 openh264: memcmp return value 0 means match 2020-04-27 15:40:10 +00:00
openjpeg openjpegenc: add support for sub-frame encoding 2019-12-22 02:54:00 +00:00
openmpt Remove autotools build system 2019-10-14 13:54:27 +01:00
openni2 openni2: Remove spurious gtk-doc markers 2020-03-15 10:47:02 +00:00
opus Remove autotools build system 2019-10-14 13:54:27 +01:00
resindvd remove various useless linefeed in logs 2019-12-11 10:51:29 +01:00
rsvg Remove autotools build system 2019-10-14 13:54:27 +01:00
rtmp documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
sbc Remove autotools build system 2019-10-14 13:54:27 +01:00
sctp sctp: Take some socket configurations from Firefox's datachannel code 2020-02-12 16:11:15 +00:00
smoothstreaming smoothstreaming: fix H264 CodecPrivateData parsing 2020-03-10 12:55:05 +00:00
sndfile Remove autotools build system 2019-10-14 13:54:27 +01:00
soundtouch remove various useless linefeed in logs 2019-12-11 10:51:29 +01:00
spandsp spanplc: add 'stats' property 2020-04-23 23:15:29 +00:00
srt Update gstsrtobject.c 2020-04-30 18:57:13 +00:00
srtp srtp: Added support for BYE packet 2020-04-09 15:11:19 +00:00
svthevcenc svthevcenc: Add new SVT-HEVC encoder element 2019-12-20 15:43:55 +00:00
teletextdec remove various useless linefeed in logs 2019-12-11 10:51:29 +01:00
ttml ttmlparse: Collect buffers until detecting complete xml document 2019-11-22 18:31:10 +09:00
voaacenc Remove autotools build system 2019-10-14 13:54:27 +01:00
voamrwbenc Remove autotools build system 2019-10-14 13:54:27 +01:00
vulkan meson: Don't use get_option('buildtype') 2020-04-03 17:07:47 +05:30
wayland waylandsink: Clear window when pipeline is stopped 2020-01-28 13:22:36 +01:00
webp documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
webrtc webrtcbin: only start gathering on local descriptions 2020-04-30 14:47:55 +00:00
webrtcdsp webrtcdsp: Fix documentation markup 2020-03-15 12:44:31 +00:00
wildmidi documentation: fixed a heap o' typos 2019-11-05 09:11:25 -05:00
wpe wpe: Add support for SHM without requiring EGLDisplay 2020-04-13 11:53:16 +00:00
x265 x265enc: Update for video-hdr struct change 2020-04-01 05:18:11 +00:00
zbar zbar: remove useless conditional on passthrough 2020-01-07 17:24:50 +00:00
zxing zxing: initial plugin revision 2020-01-07 17:24:50 +00:00
meson.build zxing: initial plugin revision 2020-01-07 17:24:50 +00:00