Commit graph

1241 commits

Author SHA1 Message Date
Tim-Philipp Müller
7b74816f07 rtp: fix another debug log printf format warning on 32-bit systems
rtpulpfeccommon.c:432:27: error: format ‘%lx’ expects argument of type
‘long unsigned int’, but argument 10 has type ‘guint64 {aka long long unsigned int}’

https://bugzilla.gnome.org/show_bug.cgi?id=793732
2018-02-27 13:13:49 +00:00
Mathieu Duponchelle
3a754d51e0 FEC elements: document, remove irrelevant properties
The ulpfecenc "mux-seq" and "ssrc" properties were initially added
because the element did more than implement ULPFEC. As it was
decided that FLEXFEC would be implemented in a separate element,
both properties are now unneeded and confusing.

Change the default for the ulpfecenc multi-packet property,
as it is expected that most users of this element will be protecting video
streams.

Change the default property for the rtpredenc allow-no-red-blocks
property, as it should also be its default mode of operation.

https://bugzilla.gnome.org/show_bug.cgi?id=793843
2018-02-26 16:41:12 +01:00
Mathieu Duponchelle
efb4ee1919 rtpgstdepay: do not warn when caps were not yet received
It is expected that when connecting to a stream that has
already started, the caps will only arrive at the interval
specified on rtpgstpay, we shouldn't be warning as this is
a normal mode of operation.

https://bugzilla.gnome.org/show_bug.cgi?id=793798
2018-02-24 20:06:54 +01:00
Arnaud Bonatti
e3a3d4fb76 rtpulpfec: fix debug log printf format warning on 32-bit platforms
https://bugzilla.gnome.org/show_bug.cgi?id=793732
2018-02-23 10:02:23 +00:00
Tim-Philipp Müller
427033591c docs: hook up new RTP FEC elements
https://bugzilla.gnome.org/show_bug.cgi?id=792696
2018-02-22 15:56:49 +00:00
Tim-Philipp Müller
51177004d3 rtp: dist new header files
Fixes make distcheck
2018-02-21 20:45:31 +00:00
Tim-Philipp Müller
3789afd491 rtp: fec: fix build with gstreamer debug log system disabled 2018-02-21 19:01:15 +00:00
Mikhail Fludkov
d5ad50bd61 rtp: Implement ULPFEC (RFC 5109)
We expose a set of new elements:

* ULPFEC encoder / decoder
* A storage element, which should be placed before jitterbuffers,
  and is used to store packets in order to attempt reconstruction
  after the jitterbuffer has sent PacketLost events
* RED encoder / decoder (RFC 2198), these are necessary to
  use FEC in webrtc, as browsers will propose and expect ulpfec
  packets to be wrapped in red packets

With contributions from:

Mathieu Duponchelle <mathieu@centricular.com>
Sebastian Dröge <sebastian@centricular.com>

https://bugzilla.gnome.org/show_bug.cgi?id=792696
2018-02-21 14:15:22 +01:00
Alban Bedel
4e7ce28623 rtpvorbisdepay: fix unbounded memory usage
All received configurations are parsed and added to a list, this lead
to an unbounded memory usage. As the configuration is resent every
second this quickly lead to a large memory usage.

Add a check to only add the config if it is not already available in
the list. This fix only handle the typical case of a well behaved
stream, a malicious server could still send many useless
configurations to raise the client memory usage.
2018-02-14 18:04:56 +00:00
Justin Kim
dabeed52a9 rtph264depay: update output caps regardless format
`codec_data` should be transfered if any information of
SPS/PPS is changed.

https://bugzilla.gnome.org/show_bug.cgi?id=790000
2018-02-01 10:09:20 +00:00
Tim Allen
db07fc7e85 rtp: add L8 audio support 2017-12-24 13:19:56 +01:00
Tim-Philipp Müller
c8ff205089 rtph265depay: don't insert SPS/PPS inline for hvc1 output
Only for byte-stream or hev1. For hvc1 the SPS/PPS are in the
caps as codec_data field and in this case they shouldn't be in
the stream data as well. The output caps should be updated with
the new codec_data if needed, for hvc1.
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
8da79ca824 rtph265depay: store negotiated output format as enum
We keep the boolean byte_stream around since it's nicer for
readability and most of the code just cares about byte_stream
or not. This is useful for future-proofing the code for when
we add support for hev1 output as well.
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
46861027b9 rtph265depay: add support for hvc1 as output format 2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
b84201bf81 rtph265pay: don't add trailing zeros to VPS/PPS/SPS
This would happen if input is byte-stream with four-byte
sync markers instead of three-byte ones. The code that
scans for sync markers will place the start of the NALU
on the third-last byte of the NALU sync marker, which
means that any additional zeros may be counted as belonging
to the previous NALU instead of being part of the next sync
marker. Fix that so we don't send VPS/SPS/PPS with trailing
zeros in this case.

See https://bugzilla.gnome.org/show_bug.cgi?id=732758
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
311b9895ba rtph265depay: assemble AUs into downstream-allocated memory
When merging NALs into AUs, use downstream-provided allocator
to allocate memory and copy NALs directly into that memory when
assembling them.
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
2d0ea4d381 rtph265depay: try to negotiate an allocator with downstream 2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
528b7e01f1 rtph265depay: simplify buffer accumulation control flow
There is no difference between pushing out a buffer directly
with gst_rtp_base_depayload_push() and returning it from the
process function. The base class will just call _depayload_push()
on the returned buffer as well.

So instead of marshalling buffers through three layers and back,
just push them from one place in handle_nal() and always return
NULL from the process vfunc. This simplifies the code a little.

Also rename _push_fragmentation_unit() to _finish_fragmentation_unit()
for clarity. Push sounds like it means being pushed out, whereas
it might just be pushed into an adapter.

This change has the side-effect that multiple NALs in a single STAP
(such as SPS/PPS) may no longer be pushed out as a single buffer if
we output NALs in byte-stream format (i.e. not aggregate AUs), but
that shouldn't really make any difference to anyone.
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
289882497a rtph265depay: fix crash with empty sprops-parameters
https://bugzilla.gnome.org/show_bug.cgi?id=780040
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
0580efc6a6 rtph265depay: minor clean-up
Declutter caps update code a bit.
2017-11-23 09:36:15 +01:00
Philip Craig
ec11b228a4 rtph264pay: don't add trailing zeros to PPS/SPS
This would happen if input is byte-stream with four-byte
sync markers instead of three-byte ones. The code that
scans for sync markers will place the start of the NALU
on the third-last byte of the NALU sync marker, which
means that any additional zeros may be counted as belonging
to the previous NALU instead of being part of the next sync
marker. Fix that so we don't send SPS/PPS with trailing
zeros in this case.

https://bugzilla.gnome.org/show_bug.cgi?id=732758
2017-11-23 09:36:15 +01:00
Tim-Philipp Müller
f3e4df72a1 rtph264depay: assemble AUs into downstream-allocated memory
When merging NALs into AUs, use downstream-provided allocator
to allocate memory and copy NALs directly into that memory when
assembling them.
2017-11-23 09:35:59 +01:00
Tim-Philipp Müller
b6f13ce4e9 rtph264depay: try to negotiate an allocator with downstream 2017-11-23 09:35:59 +01:00
Tim-Philipp Müller
44f70445b6 rtph264depay: minor clean-up
Declutter caps update code a bit.
2017-11-23 09:27:22 +01:00
Edward Hervey
50c3733a89 rtpmpvpay: Don't create empty buffer list
If there's nothing to send, just return
2017-11-10 15:51:05 +01:00
Youness Alaoui
593615de46 rtpg722pay: Add encoding-params to the src caps template
The G722 payload only accepts G722 audio with channels=1, so it must
specify the encoding-params=1 in its src caps, otherwise it causes issues
with farstream which thinks it supports 2 channels G722 and when
confronted with a remote that has G722/8000/2, it will negotiate it
and error out with a not-negotiated when the caps don't intersect
at runtime.

https://bugzilla.gnome.org/show_bug.cgi?id=789878
2017-11-03 17:20:31 -04:00
Sebastian Dröge
263494f9c7 rtpsbcdepay: Fix potential NULL pointer dereference
CID 1418864
2017-10-07 14:06:38 +03:00
Sebastian Dröge
58f0eabd61 sbcdepay: Add property to ignore input timestamps
This then just counts samples and calculates the output timestamps based
on that and the very first observed timestamp. The timestamps on the
buffers are continued to be used to detect discontinuities that are too
big and reset the counter at that point.

When receiving data via Bluetooth, many devices put completely wrong
values into the RTP timestamp field. For example iOS seems to put a
timestamp in milliseconds in there, instead of something based on the
current sample offset (RTP clock-rate == sample rate).

https://bugzilla.gnome.org/show_bug.cgi?id=787297
2017-09-28 14:15:12 +03:00
Ponnam Srinivas
c0622addf6 rtph265depay: Fix Memory leak in error case
https://bugzilla.gnome.org/show_bug.cgi?id=787937
2017-09-26 11:09:53 +03:00
Tim-Philipp Müller
6f9cb1716a rtph265depay: fix keyunit detection
https://bugzilla.gnome.org/show_bug.cgi?id=787254
2017-09-05 13:56:18 +01:00
Arun Raghavan
301e8d558e rtpsbcpay: Fix some tabs that crept in somehow 2017-08-29 22:12:35 +05:30
Arun Raghavan
e6b6583a5e rtpsbcpay: Fix compile error 2017-08-14 17:39:15 +05:30
Jochen Henneberg
f641ac60e3 rtpsbcpay: fix if buffer size exceeds MTU
The plugin queued buffer data if not all buffer data fit
into a single RTP packet. Now RTP packets are pushed as long
as enough data is available.
2017-08-14 16:56:17 +05:30
Yasushi SHOJI
c7f42cc3bc rtpgsmpay: fix accidental garbage data before actual payload
Do not allocate payload size outbuf if appending payload buffer.

The commit 137672ff18 attached payload
to the output buffer but forgot to remove payload allocation.  That
effectively doubled payload size and add zero'ed or random bytes.

Makes the following pipeline work again:

gst-launch-1.0 -v audiotestsrc wave=2 ! gsmenc ! rtpgsmpay ! rtpgsmdepay ! gsmdec ! autoaudiosink

https://bugzilla.gnome.org/show_bug.cgi?id=784616
2017-07-09 13:21:23 +01:00
Tim-Philipp Müller
18b53c2236 rtph265depay: fix caps leak 2017-06-02 11:30:15 +01:00
Tim-Philipp Müller
a68a7fb65d rtph264depay: simplify buffer accumulation control flow
There is no difference between pushing out a buffer directly
with gst_rtp_base_depayload_push() and returning it from the
process function. The base class will just call _depayload_push()
on the returned buffer as well.

So instead of marshalling buffers through three layers and back,
just push them from one place in handle_nal() and always return
NULL from the process vfunc. This simplifies the code a little.

Also rename _push_fragmentation_unit() to _finish_fragmentation_unit()
for clarity. Push sounds like it means being pushed out, whereas
it might just be pushed into an adapter.

This change has the side-effect that multiple NALs in a single STAP
(such as SPS/PPS) may no longer be pushed out as a single buffer if
we output NALs in byte-stream format (i.e. not aggregate AUs), but
that shouldn't really make any difference to anyone.
2017-06-01 17:32:17 +01:00
Tim-Philipp Müller
a9f9166004 rtpopusdepay: minor perf improvements
Use the ::process_rtp_packet() vfunc to avoid mapping the
RTP buffer twice.

gst_rtp_buffer_get_payload_buffer() returns a new sub-buffer
which will always be writable, so no need to make it writable.
2017-05-24 16:41:45 +01:00
Tim-Philipp Müller
f9a740b319 rtp: opus: use existing utility funcs for copying/dropping metas
We had our own copies of those while the code was in -bad, but now
we can use the existing utility functions instead of re-implementing
them.
2017-05-24 16:18:01 +01:00
Tim-Philipp Müller
4a28e649c3 rtp: cache meta tag quarks and add more utility functions for metas
Every g_quark_from_static_string() is a hash table lookup serialised
on the global quark lock in GLib. Let's just look up the two quarks
we need once and cache them locally for future use. While we're at it,
add new utility functions for the two most commonly used tags
(audio + video). Make first argument a gpointer so we don't have to
cast and make the code ugly. These are used for logging purposes
only anyway.
2017-05-24 13:32:10 +01:00
Nicolas Dufresne
b68d936ae0 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:41:19 -04:00
Tim-Philipp Müller
e7e7f26200 rtph264depay: don't insert SPS/PPS inline for AVC output
SPS/PPS are in the caps in this case and shouldn't be in
the stream data.
2017-04-24 17:29:37 +01:00
Tim-Philipp Müller
c8f094cf7d rtph264depay: fix crash with empty sprops-parameters
https://bugzilla.gnome.org/show_bug.cgi?id=780040
2017-03-16 00:41:44 +00:00
Michael Dutka
cef5411193 rtph264depay, rtph265depay: remove stray g_debug()
https://bugzilla.gnome.org/show_bug.cgi?id=779858
2017-03-10 18:14:52 +00:00
Sebastian Dröge
f2e17f5791 rtph263pay: Free mac on errors
CID 1212149
2017-02-28 12:57:02 +02:00
Sebastian Dröge
bc14107742 rtpvorbispay: Add missing break to for loop 2017-02-28 12:45:24 +02:00
Sebastian Dröge
e693d29728 rtpvorbispay: When getting new headers, replace the old version of them
This prevents storing an infinite amount of e.g. comment headers if they
come without a new initialization header in front of them. There can
only be one header of each type.
2017-02-27 19:32:40 +02:00
Sebastian Dröge
f44314c029 vorbispay: Only replace headers when receiving a new config header
If we also replace all headers when receiving any possibly following
comments header, we would throw away the config header before being able
to make use of it.
2017-02-27 19:24:07 +02:00
Edgard Lima
8635258046 Update Edgard Lima's email
https://bugzilla.gnome.org/show_bug.cgi?id=779230
2017-02-27 00:34:19 +00:00
Jochen Henneberg
29f9062016 rtpvorbispay: Update and send out headers when new headers are received
The payloader needs to reset and update the vorbis config data which is
pushed on the network if it receives new headers, or at least, it may
have to do so.

Without this, the stream configuration could change without the
payloader sending the new configuration to the other side.
2017-02-20 14:21:13 +02:00
Jonas Holmberg
494246f75c rtph265pay: Fix handling of config-interval
Insert VPS/SPS/PPS before the first NAL unit containing an I-frame in an
access unit only. If an access unit consists of several such NAL units
(tiles) VPS/SPS/PPS should only be inserted before the first of them so
that parameters are only updated between frames.

Do not insert VPS/SPS/PPS before P-frames when config-interval is -1.

https://bugzilla.gnome.org/show_bug.cgi?id=775817
2017-01-23 12:59:15 +02:00
Tim-Philipp Müller
d7b2820b73 Fix indentation 2017-01-09 19:05:10 +00:00
Tim-Philipp Müller
8ad0baccc2 rtpklvdepay: add the SPARSE flag to the outgoing stream-start event 2016-12-18 12:00:38 +00:00
Sebastian Dröge
63938ef730 gst: Don't declare variables inside the for loop header
This is a C99 feature.
2016-12-13 22:32:46 +02:00
Garima Gaur
50e7096a86 rtp: Fix some memory leaks in usage of gst_pad_get_current_caps()
https://bugzilla.gnome.org/show_bug.cgi?id=775071
2016-12-01 13:04:03 +02:00
Sebastian Dröge
d0f608f60b vrawpay: Error out cleanly if mapping the video frame fails
Instead of later dereferencing NULL and crashing.
2016-11-28 09:30:25 +02:00
Stian Selnes
cbd13883a8 rtph263depay: Don't drop mode b packets with picture start code
Some buggy payloaders, e.g. rtph263pay, may use mode B for packets
that starts with a picture (or GOB) start code although it's not
allowed. Let's be nice and not drop these packets/frames.

https://bugzilla.gnome.org/show_bug.cgi?id=773516
2016-11-01 20:21:40 +02:00
Havard Graff
78ab8cbdcd rtph263ppay: Fix caps leak
Fix leaking caps when downstream has not-fixed caps.

https://bugzilla.gnome.org/show_bug.cgi?id=773515
2016-11-01 20:20:47 +02:00
Stian Selnes
fca2d2f9f0 rtph263pay: Fix indentation
https://bugzilla.gnome.org/show_bug.cgi?id=773514
2016-11-01 20:19:43 +02:00
Stian Selnes
087ae64123 rtph263pay: Use GST_TRACE_OBJECT for logging bitstream parsing
Bump the bitstream parsing to TRACE log level so it doesn't flood the
output when trying to read the more useful DEBUG and LOG messages.

Also use GST_DEBUG_OBJECT instead of GST_DEBUG in various places

https://bugzilla.gnome.org/show_bug.cgi?id=773514
2016-11-01 20:19:15 +02:00
Stian Selnes
bcff182fd9 rtph263pay: Fix leak for B-fragments
Altough commits 6a16be7, 64f9d08 and 0c7e3a8 fixed some issues they
introduced others. This patch fixes the leak of one macroblock for every
B fragment.

Macroblock structures must not be freed immediately after finding the
boundaries as they are stored and used later. However the inital dummy
structure (used for finding the first boundary) must be freed.

CID #1212156

https://bugzilla.gnome.org/show_bug.cgi?id=773512
2016-11-01 20:18:14 +02:00
Olivier Crête
7025d014bb rtph26[45]depay: Don't handle NALs inside STAP units twice
They've already been handled before pushing them into the adapter.
2016-09-27 15:30:01 -04:00
Arun Raghavan
10a16a6321 rtpsbcpay: Fix timestamping
We were just picking the timestamp of the last buffer pushed into our
adapter before we had enough data to push out.

This fixes things to figure out how large each frame is and what
duration it covers, so we can set both the timestamp and duration
correctly.

Also adds some DISCONT handling.
2016-09-25 01:20:14 +05:30
Tim-Philipp Müller
cae9ec0ad8 ext, gst: fix indentation 2016-09-15 09:53:07 +01:00
Olivier Crête
0c7e3a860c rtph263pay: Fix double free from coverity
CID #1372887
2016-09-14 11:18:44 -04:00
Olivier Crête
b369e386ad rtph263pay: Indent as per gst-indent 2016-09-14 11:18:44 -04:00
Olivier Crête
092465e94d rtpmp4adepay: Only declare a stream to be framed once a marker bit has been seen
This may cause a few packets to be processed by the parser, but it's
better than never pushing out buffers from a slightly broken stream
where no marker bits are set.
2016-09-06 15:09:21 +01:00
Stian Selnes
8bf77e34f2 rtpvp9depay: Support flexible mode 2016-08-26 11:57:15 -04:00
Stian Selnes
5f3b570d53 rtph263pdepay: Don't try to push empty frame
If the result of depayloading is an empty frame, just drop it. This is
likely the result of a buggy payloader.
2016-08-26 11:57:15 -04:00
Stian Selnes
11b7575cff rtph263pdepay: Fix picture header for non-writable payload
Under certain conditions gst_rtp_buffer_get_payload() returns a copy of
the payload. In this case the payload modifications will not affect the
rtp buffer. So instead of modifying the payload buffer directly we
should modify the buffer that actually gets pushed on the adapter.
2016-08-26 11:53:22 -04:00
Stian Selnes
793327cce2 rtph261depay: Fix check of valid payload length
Packets with no H.261 payload should be dropped to avoid invalid
write/reads.
2016-08-26 11:53:22 -04:00
Stian Selnes
64f9d08d3d rtph263pay: Fix double free, invalid reads and leak 2016-08-26 11:53:22 -04:00
Stian Selnes
898d240faa rtph263pay: change log level on bitstream parsing messages 2016-08-25 18:28:44 -04:00
Jonas Holmberg
e43dcd9996 rtph265pay: Set RTP marker bit
Set the RTP marker bit on the last RTP packet of an H.265 access unit.

https://bugzilla.gnome.org/show_bug.cgi?id=770394
2016-08-25 17:22:58 +03:00
Nirbheek Chauhan
b09f478e80 Add support for Meson as alternative/parallel build system
https://github.com/mesonbuild/meson

With contributions from:

Tim-Philipp Müller <tim@centricular.com>
Jussi Pakkanen <jpakkane@gmail.com> (original port)

Highlights of the features provided are:
* Faster builds on Linux (~40-50% faster)
* The ability to build with MSVC on Windows
* Generate Visual Studio project files
* Generate XCode project files
* Much faster builds on Windows (on-par with Linux)
* Seriously fast configure and building on embedded

... and many more. For more details see:

http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html

Building with Meson should work on both Linux and Windows, but may
need a few more tweaks on other operating systems.
2016-08-20 11:21:12 +01:00
Sebastian Dröge
3010d1ec2d rtp: Filter with the filter caps in the payloader's getcaps 2016-07-25 13:35:18 +03:00
Jan Schmidt
a1838927f7 rtph264pay: Intersect with filter caps in getcaps function.
Always intersect with the filter caps in the getcaps function
to make sure we return a subset of what was requested.

Other payloaders also have this problem and need fixing
in future commits.
2016-07-20 00:31:59 +10:00
Jonas Holmberg
833c530553 rtph265pay: Accept array_completeness=1
When parsing NAL unit type in codec_data, check the 6bits of
NAL_unit_type only and do not require the array_completeness bit to be
0, since the default and mandatory value of array_completeness is 1 for
hvc1.

https://bugzilla.gnome.org/show_bug.cgi?id=768653
2016-07-11 11:49:41 +03:00
Jonas Holmberg
a06152c40a rtph265pay/depay: Sync against RFC 7798
Handle sprop-vps, sprop-sps and sprop-pps in caps instead of
sprop-parameter-sets.

rtph265pay works with byte-stream and hvc1 formats but not hev1 yet. It
handles profile-id, tier-flag and level-id in caps query.

https://bugzilla.gnome.org/show_bug.cgi?id=753760
2016-07-07 14:59:50 +03:00
Jonas Holmberg
850a8bc077 rtph265depay: fix invalid memory access
10 bytes was allocated for stream_format but size of "byte-stream" is
more. Use g_strdup() instead.

https://bugzilla.gnome.org/show_bug.cgi?id=753760
2016-06-30 16:56:24 +01:00
Aaron Boxer
f07c704b49 gstrtpj2kpay: use tile bit and tile number to determine if there are multiple tiles in packet
Now we don't have to rely on a special value for the tile number.

https://bugzilla.gnome.org/show_bug.cgi?id=767817
2016-06-21 13:03:09 +01:00
Tim-Philipp Müller
323244bc04 rtpj2kpay: fix compiler warning on OS/X
gstrtpj2kpay.c:364:21: error: implicit truncation from 'int' to bitfield changes value from -1 to 65535

https://bugzilla.gnome.org/show_bug.cgi?id=767817
2016-06-21 09:34:56 +01:00
Sebastian Dröge
5f2b32e642 rtph264pay: Deprecated sprop-parameter-set property
This is supposed to be either in the codec_data (avc stream format) or inside
the stream, and we extract it from there. It should not be set from a
property as it's stream specific.

https://bugzilla.gnome.org/show_bug.cgi?id=767789
2016-06-21 10:03:04 +03:00
Jonas Holmberg
83ec89abdd rtph265pay: Remove sprop-parameter-sets property
There is no valid use case when this property is needed since the values
must be in either codec_data or buffer data.

https://bugzilla.gnome.org/show_bug.cgi?id=753760
2016-06-17 15:25:57 +03:00
Jonas Holmberg
2039e0d881 rtph265pay: Read NALU type the same way everywhere
Cosmetic change to read NALU type in gst_rtp_h265_pay_decode_nal() the
same way as in other places.

https://bugzilla.gnome.org/show_bug.cgi?id=753760
2016-06-17 15:25:57 +03:00
Jürgen Slowack
98b62e397b rtph265: fix NAL unit type parsing and SPS/PPS/VPS detection
Fixes sps/pps/vps insertion via the config-interval property.

https://bugzilla.gnome.org//show_bug.cgi?id=767680
2016-06-15 13:10:50 +01:00
Aaron Boxer
b4a4fa19a1 gstrtpj2k: set sampling field required by RFC
This field is now required in the sink caps.

https://bugzilla.gnome.org/show_bug.cgi?id=766236
2016-06-10 13:14:44 +03:00
Olivier Crête
91a2a790e9 rtpvp9depay: Don't assert on flexible mode packets
Instead just post a warning on the bus for now.
2016-06-02 16:17:19 -04:00
Pierre Lamot
3c50fd7669 rtpj2kpay: Fix buffer memory leak
Input buffer memory was not unmapped

https://bugzilla.gnome.org/show_bug.cgi?id=766870
2016-05-27 12:46:23 +01:00
Olivier Crête
e21cf3bc1c rtpmp4gpay: Don't produce timestamps based on byte count
The GST_BUFFER_OFFSET of output buffers returned to GstRtpBasePayload
should reflect the number of "samples" in the unit of the RTP clock in this
buffer. If this is not true, then it shouldn't be set.

https://bugzilla.gnome.org/show_bug.cgi?id=761943
2016-05-15 12:28:55 +02:00
Sebastian Dröge
bb1ae083c6 rtp: Ship gstrtpj2kcommon.h file to fix distcheck 2016-05-13 16:43:21 +03:00
Aaron Boxer
f89c4f9f4b rtpj2kpay: manage T tile invalidation bit correctly, update tile id in header correctly.
1. according to RFC, T bit is only set when either the RTP packet only contains the J2K main header, or the packet contains tile parts from multiple tiles. This is now being managed correctly in the code. The second scenario cannot happen with our payloader, since tile headers are always placed in their own RTP packet, and so a packet cannot contain tile parts from multiple tiles.
However, I have added code to track if multiple tile parts are included in a single RTP packet, in case in the future we want to put header and data in same packet.

2. Old code would set the tile id to zero for all J2K packets. This is now set correctly to the appropriate tile id.

https://bugzilla.gnome.org/show_bug.cgi?id=745187
2016-05-13 11:01:25 +03:00
Aaron Boxer
84ff5511de rtpj2kpay: manage fragmented headers correctly
J2K main header framentation across multiple RTP packets is now handled correctly

https://bugzilla.gnome.org/show_bug.cgi?id=745187
2016-05-13 11:01:19 +03:00
Aaron Boxer
d2765be120 rtpj2k: move common code to shared header, code clean up
https://bugzilla.gnome.org/show_bug.cgi?id=745187
2016-05-13 11:01:15 +03:00
Aaron Boxer
82c2a5cbf8 rtpj2k: update documentation
https://bugzilla.gnome.org/show_bug.cgi?id=745187
2016-05-13 11:01:09 +03:00
Nirbheek Chauhan
e20a687737 rtpjpegdepay: Don't send invalid frames downstream after packet loss or a DISCONT
After clearing the adapter due to a DISCONT, as might happen when some packet(s)
have been lost, the depayloader was pushing data into the adapter (which had no
header due to the clear), creating a headerless frame out of it, and sending it
downstream. The downstream decoder would then usually ignore it; unless there
were lots of DISCONTs from the jitterbuffer in which case the decoder would reach
its max_errors limit and throw an element error. Now we just discard that data.

It is probaby not worth trying to salvage this data because non-progressive
jpeg does not degrade gracefully and makes the video unwatchable even with
low packet loss such as 3-5%.
2016-04-04 17:40:11 +01:00
Luis de Bethencourt
4b7e377d25 rtpvorbisdepay: remove dead code
payload_buffer hasn't been assigned a value before the jumps to
switch_failed or packet_short. So the value must be NULL. No need
to unmap and unref.

CID #1316476
2016-04-01 12:15:58 +01:00
Luis de Bethencourt
6a16be75bf rtph263pay: fix leak
Free memory of current macroblock once it isn't needed so it isn't leaked
by the call of the gst_rtp_h263_pay_B_mbfinder function.
if (!(mac = gst_rtp_h263_pay_B_mbfinder (context, gob, mac, mb))) {

CID 1212156
2016-03-31 15:25:17 +01:00
Sebastian Dröge
3549aa7924 rtpjpegpay: Allow different quantization tables for components 2 and 3
RFC 2435 mentions in section 4.1 that U/V use table number 1, but this seems
just like an example. Some encoders are not following that and there seems to
be no reason to reject their streams.

https://bugzilla.gnome.org/show_bug.cgi?id=761345
2016-03-25 12:52:56 +02:00
Vineeth TM
1071309870 good: use new gst_element_class_add_static_pad_template()
https://bugzilla.gnome.org/show_bug.cgi?id=763076
2016-03-24 14:32:20 +02:00
Nirbheek Chauhan
bbde949e8e win32: Don't use __attribute__ on MSVC
Use MSVC-equivalents for alignment and packing compiler directives when building
on MSVC
2016-03-10 10:01:19 +00:00
Tim-Philipp Müller
fb0bc126c9 rtp: opus: move Opus RTP payloader/depayloader from -bad to -good
https://bugzilla.gnome.org/show_bug.cgi?id=756282
2016-02-25 22:45:16 +00:00
Tim-Philipp Müller
3b970e9b5e Merge branch 'plugin-move-rtp-opus'
Move Opus RTP depayloader/payloader from -bad to -good.

https://bugzilla.gnome.org/show_bug.cgi?id=756282
2016-02-25 22:45:15 +00:00
Dave Craig
9b2e1f9f36 rtph265depay: Don't assume that get_current_caps() returns non-NULL caps after has_current_caps()
Remove calls to gst_pad_has_current_caps() which then go on to call
gst_pad_get_current_caps() as the caps can go to NULL in between. Instead just
use gst_pad_get_current_caps() and check for NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=759539
2016-02-23 18:12:54 +02:00
Dave Craig
211c8492b3 gst: Don't assume that get_current_caps() returns non-NULL caps after has_current_caps()
Remove calls to gst_pad_has_current_caps() which then go on to call
gst_pad_get_current_caps() as the caps can go to NULL in between. Instead just
use gst_pad_get_current_caps() and check for NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=759539
2016-02-23 18:11:42 +02:00
Luis de Bethencourt
93cd4be8d5 rtpvp9pay: add missing break
VP9_PAY_PICTURE_ID_7BITS and VP9_PAY_PICTURE_ID_15BITS are mutually
exclusive options of the picture-id-mode. We can break after the
first case.

1 or 2 bytes need to be added to the header length depending on the
PictureID size.
https://tools.ietf.org/html/draft-uberti-payload-vp9-00#section-4.2

CID 1353479
2016-02-22 14:06:02 +00:00
Tim-Philipp Müller
13a9a7543d win32: remove outdated build cruft
This hasn't been touched for generations, doesn't work,
and is just causing confusion. We also don't want to
maintain these files manually.
2016-02-21 09:47:43 +00:00
Tim-Philipp Müller
df341f41dc flvmux, rtpvp9depay: fix indentation 2016-02-19 15:04:15 +00:00
Tim-Philipp Müller
d6685b247a rtp: sprinkle some G_GNUC_INTERNAL for internal utils functions 2016-02-17 15:07:37 +00:00
Sebastian Dröge
01342378b5 opus: Add proper support for multichannel audio
https://bugzilla.gnome.org/show_bug.cgi?id=757152
2016-02-17 14:58:01 +00:00
Sebastian Dröge
0472d9f8b2 opus: Copy metadata in the (de)payloader, but only the relevant ones
The payloader didn't copy anything so far, the depayloader copied every
possible meta. Let's make it consistent and just copy all metas without tags or
with only the audio tag.

https://bugzilla.gnome.org/show_bug.cgi?id=751774
2016-02-17 14:58:01 +00:00
Sebastian Dröge
ff51629c9a opusdepay: Set multistream=FALSE on the Opus caps
The RTP Opus mapping only allows mono/stereo, and not multistream Opus
streams.
2016-02-17 14:58:01 +00:00
Olivier Crête
89b172b3ed rtpopuspay: Forward stereo preferences from caps upstream
https://bugzilla.gnome.org/show_bug.cgi?id=746617
2016-02-17 14:58:01 +00:00
Olivier Crête
4df223f325 rtpopuspay: Set the number of channels to 2 as per RFC draft
https://bugzilla.gnome.org/show_bug.cgi?id=746617
2016-02-17 14:58:01 +00:00
Sebastian Dröge
bbb1143ca3 opus: Handle sprop-stereo and sprop-maxcapturerate RTP caps fields
https://bugzilla.gnome.org/show_bug.cgi?id=746617
2016-02-17 14:58:01 +00:00
Vincent Penquerc'h
4b5ad70924 rtpopuspay: default encoding name to OPUS
https://bugzilla.gnome.org/show_bug.cgi?id=737810
2016-02-17 14:58:01 +00:00
Vincent Penquerc'h
755289ed0c rtpopuspay: make caps writable before truncating them
https://bugzilla.gnome.org/show_bug.cgi?id=737810
2016-02-17 14:58:01 +00:00
Vincent Penquerc'h
e427369840 rtpopuspay: negotiate the encoding name
Chrome uses a different encoding name that gstreamer.

https://bugzilla.gnome.org/show_bug.cgi?id=737810
2016-02-17 14:58:01 +00:00
Nicolas Dufresne
9e4511edf4 rtpopus: Use OPUS encoding name
Both Firefox and Chrome uses OPUS as the encoding in their SDP.
Adding this now defacto standard name remove the need for special
case in SDP parsing code.

https://bugzilla.gnome.org/show_bug.cgi?id=737810
2016-02-17 14:58:01 +00:00
Wim Taymans
b310393916 opuspay: fix timestamps
Copy timestamps to payloaded buffer.
Avoid input buffer memory leak.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=692929
2016-02-17 14:58:00 +00:00
Tim-Philipp Müller
117e30c47e Fix FSF address
https://bugzilla.gnome.org/show_bug.cgi?id=687520
2016-02-17 14:58:00 +00:00
Wim Taymans
5d893c7ea2 opuspay: remove pointless caps serialization
Remove the caps serialization in the rtp caps. the spec nor the receiver
does anything with it.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686547
2016-02-17 14:58:00 +00:00
Tim-Philipp Müller
17742d2347 Use gst_element_class_set_static_metadata()
where possible. Avoids some string copies. Also re-indent
some stuff. Also some indent fixes here and there.
2016-02-17 14:58:00 +00:00
Olivier Crête
18638c9c4e rtpopuspay: Allocate the rtp buffer correctly
Use the right functions to allocate the rtp buffer
2016-02-17 14:58:00 +00:00
Mark Nauwelaerts
ad261f64c3 replace gst_element_class_set_details_simple with gst_element_class_set_metadata 2016-02-17 14:58:00 +00:00
Mark Nauwelaerts
d196562755 opus: port to updated 0.11 2016-02-17 14:58:00 +00:00
Edward Hervey
77ea437507 Merge remote-tracking branch 'origin/master' into 0.11-premerge
Conflicts:
	docs/libs/Makefile.am
	ext/kate/gstkatetiger.c
	ext/opus/gstopusdec.c
	ext/xvid/gstxvidenc.c
	gst-libs/gst/basecamerabinsrc/Makefile.am
	gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
	gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
	gst-libs/gst/video/gstbasevideocodec.c
	gst-libs/gst/video/gstbasevideocodec.h
	gst-libs/gst/video/gstbasevideodecoder.c
	gst-libs/gst/video/gstbasevideoencoder.c
	gst/asfmux/gstasfmux.c
	gst/audiovisualizers/gstwavescope.c
	gst/camerabin2/gstcamerabin2.c
	gst/debugutils/gstcompare.c
	gst/frei0r/gstfrei0rmixer.c
	gst/mpegpsmux/mpegpsmux.c
	gst/mpegtsmux/mpegtsmux.c
	gst/mxf/mxfmux.c
	gst/videomeasure/gstvideomeasure_ssim.c
	gst/videoparsers/gsth264parse.c
	gst/videoparsers/gstmpeg4videoparse.c
2016-02-17 14:58:00 +00:00
Vincent Penquerc'h
8df374108a opusenc: add upstream negotiation for multistream ability
This will help elements that cannot deal with multistream,
such as the RTP payloader.

The caps now do not include a "streams" field anymore, but
a "multistream" boolean, since we have no real use for knowing
the exact amount of streams.

https://bugzilla.gnome.org/show_bug.cgi?id=665078
2016-02-17 14:58:00 +00:00
Danilo Cesar Lemes de Paula
c207bdf1e7 Adding opus RTP payloader/depayloader element
Adding OPUS RTP module based on the current draft:
http://tools.ietf.org/id/draft-spittka-payload-rtp-opus-00.txt

https://bugzilla.gnome.org/show_bug.cgi?id=664817
2016-02-17 14:58:00 +00:00
Luis de Bethencourt
f2f31ec50f rtp: h264/h265: avoid duplication of read_golomb()
There is no need to have two identical implementations of the read_golomb
function.

https://bugzilla.gnome.org/show_bug.cgi?id=761606
2016-02-17 14:18:16 +00:00
Stian Selnes
5faa9c11a6 rtpvp9pay: rtpvp9depay: Initial implementation of draft 01
Quick and dirty implementation of an RTP payloader and depayloader
for VP9. In particalur it assumes no spatial or temporal layering,
non-flexible mode, and some other bits and pieces.

https://bugzilla.gnome.org/show_bug.cgi?id=754773
2016-02-16 15:54:06 +02:00
Tim-Philipp Müller
9d0f127703 rtp: h265: hook up move RTP H.265 payloader/depayloader to build
https://bugzilla.gnome.org/show_bug.cgi?id=761606
2016-02-16 00:25:50 +00:00
Tim-Philipp Müller
7f9f3d38b2 rtp: h265: use common meta utility functions
https://bugzilla.gnome.org/show_bug.cgi?id=761606
2016-02-16 00:25:46 +00:00
Tim-Philipp Müller
714d31ce30 rtp: h265: remove codecparser dependency from h265 payloader/depayloader
Looks like it just uses the NAL enums and nothing else from
the codecparsers, and that's the only reason it had to be
moved from -good to -bad when it was originally added. We
can probably keep those NAL enums up to date enough, so let's
remove the codecparser dependency so it can be moved back into
-good.

https://bugzilla.gnome.org/show_bug.cgi?id=761606
2016-02-16 00:25:41 +00:00
Tim-Philipp Müller
a70c75782b Merge branch 'plugin-move-rtp-h265'
Move RTP H.265 payloader/depayloader from -bad to -good.

https://bugzilla.gnome.org/show_bug.cgi?id=761606
2016-02-16 00:24:58 +00:00
Luis de Bethencourt
139108c83a gstrtph265depay: keep consistency with rtph264depay
Use gst_rtp_drop_meta() and the same function prototype for
gst_rtp_copy_meta() to keep consistency with the RTP elements in
gst-plugins-good
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
403ac009fa rtph265depay: fix termination of access unit
Only consider the access unit complete when the next-occurring VCL NAL unit
has the first bit after its NAL unit header equal to 1.
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
983e30f658 rtph265depay: fix unneeded sub-buffer creation
We create a sub-buffer just to copy over its metas and then throw it
away immediately, just use the original input buffer directly.
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
4ee6c17edb rtph265pay: add "send VPS/SPS/PPS with every key frame" mode
It's not enough to have timeout or event based VPS/SPS/PPS information
sent in RTP packets. There are some scenarios when key frames may appear
more frequently than once a second, in which case the minimum timeout
for "config-interval" of 1 second for sending VPS/SPS/PPS isn't enough.
It might also be desirable in general to make sure the VPS/SPS/PPS is
available with every keyframe (packet loss aside), so receivers can
actually pick up decoding immediately from the first keyframe if
VPS/SPS/PPS is not signaled out of band.

This commit adds the possibility to send VPS/SPS/PPS with every key frame.
This mode can be enabled by setting "config-interval" property to -1. In
this case the payloader will add VPS, SPS and PPS before every key (IDR)
frame.

https://bugzilla.gnome.org/show_bug.cgi?id=757892
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
64ca3b26d9 rtph265pay: change config-interval property type from uint to int
This way we can use -1 as special value, which is nicer than MAXUINT.

https://bugzilla.gnome.org/show_bug.cgi?id=757892
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
698e5bbfb5 rtph265depay: make sure we call handle_nal for each NAL
Call handle_nal for each NAL in the STAP-A RTP packet. This makes sure
we correctly extract the SPS and PPS.

https://bugzilla.gnome.org/show_bug.cgi?id=730999
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
1e55d0d725 rtph265pay: Copy metadata in the payloader, but only the relevant ones
The payloader didn't copy anything so far, the depayloader copied every
possible meta. Let's make it consistent and just copy all metas without
tags or with only the video tag.

https://bugzilla.gnome.org/show_bug.cgi?id=751774
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
8611645af6 rtph265pay: Use GST_WARNING_OBJECT() instead of GST_WARNING()
https://bugzilla.gnome.org/show_bug.cgi?id=753228
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
df724c410b rtph265pay: fix potential crash when shutting down
A race condition in the state change function may cause buffers to be
unreffed while they are still used by the streaming thread in
gst_rtp_h265_pay_send_vps_sps_pps() resulting in a crash. Chain up to the
parent class first in the state change function to make sure streaming
has stopped and only then free those buffers.

https://bugzilla.gnome.org/show_bug.cgi?id=741381
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
f2bae3ab59 rtph265pay: fix buffer leak when using SPS/PPS
Fixes a buffer leak that would occur if the pipeline was shutdown while a
SPS/PPS header was being created.

https://bugzilla.gnome.org/show_bug.cgi?id=741271
2016-02-16 00:24:41 +00:00
Luis de Bethencourt
f1e2849438 rtph265depay: copy metadata in the depayloader, but only the relevant ones
The payloader didn't copy anything so far, the depayloader copied every
possible meta. Let's make it consistent and just copy all metas without
tags or with only the video tag.

https://bugzilla.gnome.org/show_bug.cgi?id=751774
2016-02-16 00:24:40 +00:00
Luis de Bethencourt
3bede1c95b rtph265depay: checking if depay has sps/pps nals before insertion
Related to: https://bugzilla.gnome.org/show_bug.cgi?id=753430

https://bugzilla.gnome.org/show_bug.cgi?id=753228
2016-02-16 00:24:40 +00:00
Luis de Bethencourt
18b628824b rtph265depay: only update the srcpad caps if something else than the codec_data changed
h264parse and gstrtph264depay do the same, let's keep the behaviour
consistent. As we now include the codec_data inside the stream, this causes
less caps renegotiation.

https://bugzilla.gnome.org/show_bug.cgi?id=753228
2016-02-16 00:24:40 +00:00
Luis de Bethencourt
3979ffa6a3 rtph265depay: PPS replaces old PPS if it has the same id
https://bugzilla.gnome.org/show_bug.cgi?id=753228
2016-02-16 00:24:40 +00:00
Luis de Bethencourt
d10b6f1e3a rtph265depay: Insert SPS/PPS NALs into the stream
rtph264depay does the same and this fixes decoding of some streams with 32
SPS (or 256 PPS). It is allowed to have SPS ID 0 to 31 (or PPS ID 0 to 255),
but the field in the codec_data for the number of SPS or PPS is only 5
(or 8) bit. As such, 32 SPS (or 256 PPS) are interpreted as 0 everywhere.

This looks like a mistake in the part of the spect about the codec_data.
2016-02-16 00:24:40 +00:00
Luis de Bethencourt
0bfa97b047 rtph265depay: implement process_rtp_packet() vfunc
For more optimised RTP packet handling: means we don't need to map the
input buffer again but can just re-use the mapping the base class has
already done.

Based on: https://bugzilla.gnome.org/show_bug.cgi?id=750235

https://bugzilla.gnome.org/show_bug.cgi?id=753228
2016-02-16 00:24:40 +00:00