gstreamer/gst
Antonio Ospite 8dd03042cc rtpsession: add support for buffer lists on the recv path
The send path in rtpsession processes the buffer list along the way,
sharing info and stats between packets in the same list, because it
assumes that all packets in a buffer list are from the same frame.

However, in the receiving path packets can arrive in all sorts of
arrangements:

  - different sources,
  - different frames (different timestamps),
  - different types (multiplexed RTP and RTCP, invalid RTP packets).

so a more general approach should be used to correctly support buffer
lists in the receive path.

It turns out that it's simpler and more robust to process buffers
individually inside the rtpsession element even if they come in a buffer
list, and then reassemble a new buffer list when pushing the buffers
downstream.

This avoids complicating the existing code to make all functions
buffer-list-aware with the risk of introducing regressions,

To support buffer lists in the receive path and reduce the "push
overhead" in the pipeline, a new private field named processed_list is
added to GstRtpSessionPrivate, it is set in the chain_list handler and
used in the process_rtp callback; this is to achieve the following:

  - iterate over the incoming buffer list;
  - process the packets one by one;
  - add the valid ones to a new buffer list;
  - push the new buffer list downstream.

The processed_list field is reset before pushing a buffer list to be on
the safe side in case a single buffer was to be pushed by upstream
at some later point.

NOTE:

The proposed modifications do not change the behavior of the send path.

The process_rtp callback is called in rtpsource.c by the push_rtp
callback (via source_push_rtp) only when the source is not internal.

So even though push_rtp is also called in the send path, it won't end up
using process_rtp in this case because the source would be internal in
the send path.

The reasoning from above may suggest a future refactoring: push_rtp
might be split to better differentiate the send and receive path.
2019-08-07 15:32:30 -04:00
..
alpha doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
apetag doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
audiofx doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
audioparsers audioparsers: add back segment clipping to parsers that have lost it 2019-06-24 14:40:58 +03:00
auparse doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
autodetect doc: remove xml from comments 2019-05-29 22:20:40 +02:00
avi doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
cutter doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
debugutils doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
deinterlace doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
dtmf doc: remove xml from comments 2019-05-29 22:20:40 +02:00
effectv doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
equalizer doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
flv flvmux: Clear new_tags if sending metadata in header 2019-06-24 17:37:51 +02:00
flx doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
goom doc: Fix some docstrings 2019-05-13 17:00:00 -04:00
goom2k1 doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
icydemux doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
id3demux doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
imagefreeze doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
interleave doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
isomp4 qtdemux: enlarge the maximal atom size 2019-08-07 02:46:20 +00:00
law doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
level doc: remove xml from comments 2019-05-29 22:20:40 +02:00
matroska matroska: Handle interlaced field order 2019-08-07 14:12:32 +00:00
monoscope doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
multifile splitmuxsink: add the ability to mux auxilliary video streams 2019-07-15 11:46:36 +00:00
multipart doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
replaygain doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
rtp rtpmp4vpay: config-interval -1 send at idr 2019-08-01 14:28:04 +00:00
rtpmanager rtpsession: add support for buffer lists on the recv path 2019-08-07 15:32:30 -04:00
rtsp rtspsrc: expose and implement is-live property 2019-08-06 22:45:37 +00:00
shapewipe doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
smpte doc: fix element section documentations 2019-05-25 16:57:31 +02:00
spectrum doc: remove xml from comments 2019-05-29 22:20:40 +02:00
udp multiudpsink: Add missing socket.h include 2019-06-26 18:03:29 -04:00
videobox doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
videocrop doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
videofilter doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
videomixer videomixer: the documentation for GstVideoMixer2Pad is not exposed 2019-05-25 17:25:02 +02:00
wavenc doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
wavparse wavparse: Fix ignoring of last chunk in push mode 2019-08-07 12:09:46 +00:00
y4m doc: Port documentation to hotdoc 2019-05-13 11:34:56 -04:00
Makefile.am build: build plugins and examples in parallel where possible 2010-03-29 11:00:57 +01:00
meson.build meson: Add feature options for all plugins 2018-07-27 18:42:54 +05:30