Commit graph

1195 commits

Author SHA1 Message Date
Antonio Ospite
61c1385c42 rtpvrawpay: preserve GST_BUFFER_FLAG_DISCONT on the first outputted buffer
If the incoming frame buffer has GST_BUFFER_FLAG_DISCONT set this should
be preserved and set for the first output buffer too, like other
payloaders do.

Spotted with gst-validate-1.0 when adding integration tests for
rtpsession, a minimal test to reproduce the issue is:

$ gst-validate-1.0 videotestsrc num-buffers=1 ! rtpvrawpay ! identity ! fakesink
Starting pipeline
Pipeline started
   warning : Buffer didn't have expected DISCONT flag333 speed: 1.000000 />
             Detected on <identity0:sink>
             Detected on <identity0:src>
             Detected on <fakesink0:sink>
             Description : Buffers after SEGMENT and FLUSH must have a DISCONT flag

Issues found: 1

=======> Test PASSED (Return value: 0)
2019-04-09 09:32:43 +00:00
Olivier Crête
92138dc3d6 rtpulpfec*: Replace github URIs with gitlab.fdo ones 2019-04-09 08:17:28 +00:00
Olivier Crête
1bd81d3d33 rtpred*: Add example pipelines 2019-04-09 08:17:28 +00:00
Olivier Crête
11f3018170 rtpulpfec*: Improve documentation 2019-04-09 08:17:28 +00:00
Olivier Crête
070eacdd4f rtpstorage + rtpulpfecdec: Get the storage using a query as fallback
This allows it to be used using gst-launch for easier testing.
2019-04-09 08:17:28 +00:00
Mathieu Duponchelle
74e3eb1f1d rtpgstpay: Set DELTA_UNIT flag when appropriate
When used in combination with a rtponviftimestamp element
downstream, forwarding this flag ensures it gets correctly
serialized in the ONVIF header extension.
2019-04-04 19:08:23 +02:00
Antonio Ospite
d6939c4031 docs: fix typo s/incomming/incoming/ 2019-04-03 16:38:56 +02:00
Antonio Ospite
f7c8317668 rtp: fix indentation after G_DEFINE_TYPE
A missing colon after G_DEFINE_TYPE declaration was confusing gst-indent
and causing problem in the pre-commit hook.

Add the missing colon and fix the following function declaration to
follow the normal GStreamer style.
2019-04-03 16:37:34 +02:00
Olivier Crête
915a9c99bb rtpstorage: Limit the queue size
Limit to the queue size in case there is no arrival time or in case there is
a huge flood of packets.
2019-03-29 22:51:54 +00:00
Olivier Crête
8bf074f21e rtpreddec: Add some more debug prints 2019-03-27 18:54:27 -04:00
Olivier Crête
c840328664 rtpstorage: Issue warning if request by size if 0
If the size is 0, then nothing will ever be in the storage, if a request is
received, it generally implies a misconfigured pipeline.
2019-03-26 19:41:06 -04:00
Olivier Crête
7a317ff732 rtpstorage: Add more debug messages 2019-03-26 19:41:06 -04:00
Olivier Crête
785219a317 rtpstorage: Make debug category available to sub objects 2019-03-26 19:41:06 -04:00
Olivier Crête
9b0a373eac rtpstorage: Add debug funcptr to chain function 2019-03-26 18:08:57 -04:00
Mathieu Duponchelle
0da8f111e6 rtpulpfdecdec: only put recovered packet back into storage if not recovered from there 2019-03-06 19:40:10 +00:00
Mathieu Duponchelle
f9b49aef09 rtpulpfecdec: fix buffer leak when packet is recovered from storage
Exposed by rtpulpfecdec_recovered_from_storage test.
2019-03-06 19:40:10 +00:00
Tim-Philipp Müller
c79cf179cc rtph264depay: fix caps leak
Exposed by rtp_h264depay_bytestream() unit test.
2019-03-06 18:21:20 +00:00
Nicolas Dufresne
6d3859bf70 rtph265depay; Fix handling of marker on aggregated packet
When multiple nals are aggrgated, the marker bit should be associated only
with the last NAL of the packet. Otherwise we may break rendering in with
AU alignment.
2019-01-31 19:30:14 +00:00
Nicolas Dufresne
98251f0158 rtph264depay: Fix handling or marker on STAP-A
Only forward the marker for the last NAL of the STAP-A. Otherwise each NAL
endup being assumed to be a full frame which may break rendering.

Fixes 557
2019-01-31 19:30:14 +00:00
Jan Alexander Steffens (heftig)
06b2bbd8c7 rtph265pay: Only mark the last fragment of an AU
Commit e721071dca removed the check for
the end of fragmentation. As a result, all fragments of an AU's last
NALU were marked.
2019-01-09 15:36:40 +00:00
Jan Alexander Steffens (heftig)
798f320ba7 rtph264pay: Only mark the last fragment of an AU
Commit 4add820cce removed the check for
the end of fragmentation. As a result, all fragments of an AU's last
NALU were marked.

Potential fix for https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/540
2019-01-09 15:36:40 +00:00
Nicolas Dufresne
05059ce16b rtph264pay/rtph265pay: Fix use after free
We can't assume a buffer that has been pushed in the adapter is still
valid. This fixes a use after free detect when running test on jenkins.
2018-12-19 13:54:57 -05:00
Nicolas Dufresne
d397cf6d1f rtph265pay: Don't wait for next nal when input is aligned
This is the same as what was done on rtph264pay in the patch
d5d28055c1
2018-12-18 13:39:54 -05:00
Nicolas Dufresne
0524e6f8cd rtph265depay: Drain on EOS event 2018-12-18 13:39:54 -05:00
Nicolas Dufresne
65b01d5f02 rtph265depay: Factor out the code that push
This will be needed to implement draining on EOS.
2018-12-18 13:39:53 -05:00
Nicolas Dufresne
e694e2752a rtph264depay: Drain on EOS event 2018-12-18 13:39:46 -05:00
Nicolas Dufresne
d12128f527 rtph264depay: Factor out the code that push
This will be needed to implement draining on EOS.
2018-12-18 13:39:46 -05:00
Nicolas Dufresne
5e8cab71ea rtph26xpay: Remove unused IS_ACCESS_UNIT macro
This macro is not longer used. It was secretly checking if that nal was
a slice, and confusingly name to that one may think it was checking if
the nal is an AUD.
2018-12-18 13:39:46 -05:00
Nicolas Dufresne
0a6e5e439c rtph265pay: Fix reading timestamps from adapter
The code was reading the timestamp from the adapter before pushing the
new buffer into it. As a side effect, if the adapter was empty, we'd end
up using an older timestamp. In alignment=au, it means that all
timestamp was likely one frame in the past, while in alignment=nal, with
multiple slices per frame, the first slice would have the timestamp of
the previous one.
2018-12-18 13:30:05 -05:00
Nicolas Dufresne
ff2e5b94b9 rtph265pay: Forward the marker bit as buffer flag
We have a buffer flag to represent the marker bit (when present).
Forward this bit by setting the buffer flag accordingly.
2018-12-18 13:30:05 -05:00
Nicolas Dufresne
e721071dca rtph265pay: Properly set the marker bit
The marker bit is used for efficient decoding. The assumption that
it should be set on the AUD is wrong, since the AUD is conceptually
starts the frame, while the marker is to indicate the end.

So properly set the marker bit as soon as we know we are ending an
AU and also whenever upstream have set the GST_BUFFER_FLAG_MARKER
flag.
2018-12-18 13:30:05 -05:00
Nicolas Dufresne
1f72131781 rtph264pay: Fix reading timestamps from adapter
The code was reading the timestamp from the adapter before pushing the
new buffer into it. As a side effect, if the adapter was empty, we'd end
up using an older timestamp. In alignment=au, it means that all
timestamp was likely one frame in the past, while in alignment=nal, with
multiple slices per frame, the first slice would have the timestamp of
the previous one.
2018-12-18 13:30:05 -05:00
Nicolas Dufresne
4add820cce rtph264pay: Properly set the marker bit
The marker bit is used for efficient decoding. The assumption that
it should be set on the AUD is wrong, since the AUD is conceptually
starts the frame, while the marker is to indicate the end.

So properly set the marker bit as soon as we know we are ending an
AU and also whenever upstream have set the GST_BUFFER_FLAG_MARKER
flag.
2018-12-18 13:30:05 -05:00
Nicolas Dufresne
e4f38c986e rtph264depay: Forward the marker bit as buffer flag
We have a buffer flag to represent the marker bit (when present).
Forward this bit by setting the buffer flag accordingly.
2018-12-18 13:30:05 -05:00
Nicolas Dufresne
13278fbcf5 rtph264pay: Protect against use of reserved NAL types
Don't allow external encoder to use one of the reserved NAL type
implicated in NAL aggreation. These out-of-spec NAL types, if passed
from the outside world will lead to an invalid RTP payload being
created.
2018-12-18 13:30:05 -05:00
Jochen Henneberg
9b6dcc7f1b rtpgstdepay: Update pad caps if inline caps change
If the inlined caps change while using the same CV we need to update the
source pad caps.
2018-12-14 09:22:33 +00:00
Jordan Petridis
515ada7e22
Run gst-indent through the files
This is required before we enabled an indent test in the CI.

https://gitlab.freedesktop.org/gstreamer/gstreamer-project/issues/33
2018-11-28 05:52:16 +02:00
Tim-Philipp Müller
506e080a15 rtpmp4gdepay: detect broken senders who send AAC with ADTS frames
Strip ADTS headers if we detect any, apparently some Sony cameras
send AAC with ADTS headers. We could also change the stream-format
in the output caps, but that would be unexpected to pipeline builders
and would not exactly be backwards compatible.
2018-09-26 12:25:24 +01:00
Tim-Philipp Müller
f255ea99f4 rtpmp4gdepay: factor out pushing of output buffer 2018-09-26 12:20:13 +01:00
Edward Hervey
8b4db06733 rtpmp4vpay: Increase ranking
Both rtpmp4vpay and rtpmp4gpay support MPEG4 elementary streams. But
the most supported variant is the video-specific one (rtpmp4vpay),
therefore increase the rank of that one so that auto-plugging of
payloaders for MPEG4 elementary streams ends up picking that one
and not the generic one.
2018-08-29 09:51:42 +02:00
Jan Alexander Steffens (heftig)
20758215b5 rtph26*pay: Update param set timestamp even if parameters unchanged
rtph264pay and rtph265pay skip updating the parameter set timestamp if
the units they see contain no new configuration. This can result in
them injecting duplicate parameters.

https://bugzilla.gnome.org/show_bug.cgi?id=796748
2018-08-16 16:49:16 +03:00
Nicolas Dufresne
2b11c62571 rtppayload: Fix VP8/VP9/OPUS dual encoding name handling
All these were copy pasted and would lead to assertion when chained with
rtpmux. This commit rewrite the negotiation with downstream. This also
drop the fallback to ancient names if the pad is unlinked. This was
completly arbitrary decision that made no sense.

https://bugzilla.gnome.org/show_bug.cgi?id=796809
2018-08-01 09:42:36 -04:00
Sebastian Dröge
9a80cdbb40 rtpgstpay: Add support for force-keyunit events
This triggers immediate re-sending of the configuration data in-band.

https://bugzilla.gnome.org/show_bug.cgi?id=796877
2018-07-26 16:54:28 +03:00
Sebastian Dröge
f3631e6837 rtp: Use running_time instead of PTS for config-interval calculations
PTS can start again from a different offset while the running time is
increasing. The only thing that matters here is the running time.

https://bugzilla.gnome.org/show_bug.cgi?id=796807
2018-07-24 18:14:28 +03:00
Michael Olbrich
bd05ab8358 rtpL8pay: don't try to modify a read-only structure
Just remove the code. It's not doing anything useful anyways. The modified
caps are the result of a caps query, so either not used afterwards of a
reference to some internal caps of another element that should not be
modified.

https://bugzilla.gnome.org/show_bug.cgi?id=796837
2018-07-19 14:07:03 -04:00
Tim-Philipp Müller
db688c5504 docs: fix typos 2018-05-23 13:14:27 +01:00
Tim-Philipp Müller
5b8e775d1c rtpvrawpay: don't use buffer lists if everything fits into one buffer
People might use very large mtu sizes where every payload
fits into a single output packet.

https://bugzilla.gnome.org/show_bug.cgi?id=795758
2018-05-05 16:32:59 +02:00
Xavier Claessens
edd9c8f6b8 Meson: Generate pc file for all plugins in good
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:07:06 +01:00
Mathieu Duponchelle
90f5ae8f45 ulpfecdec: output perfect seqnums
ULP FEC, as defined in RFC 5109, has the protected and protection
packets sharing the same ssrc, and a different payload type, and
implies rewriting the seqnums of the protected stream when encoding
the protection packets. This has the unfortunate drawback of not
being able to tell whether a lost packet was a protection packet.

rtpbasedepayload relies on gaps in the seqnums to set the DISCONT
flag on buffers it outputs. Before that commit, this created two
problems:

* The protection packets don't make it as far as the depayloader,
  which means it will mark buffers as DISCONT every time the previous
  packets were protected

* While we could work around the previous issue by looking at
  the protection packets ignored and dropped in rtpptdemux, we
  would still mark buffers as DISCONT when a FEC packet was lost,
  as we cannot know that it was indeed a FEC packet, even though
  this should have no impact on the decoding of the stream

With this commit, we consider that when using ULPFEC, gaps in
the seqnums are not a reliable indicator of whether buffers should
be marked as DISCONT or not, and thus rewrite the seqnums on
the decoding side as well to form a perfect sequence, this
obviously doesn't prevent the jitterbuffer from doing its job
as the ulpfec decoder is downstream from it.

https://bugzilla.gnome.org/show_bug.cgi?id=794909
2018-04-19 18:17:39 +02:00
Sebastian Dröge
ed2ccb1a60 rtp: Fix compilation with non-C99 compilers
By moving variable declarations out of loop headers.
2018-03-20 12:08:28 +02:00