Commit graph

9890 commits

Author SHA1 Message Date
Seungha Yang 4146dc905d qtdemux: Use empty-array safe way to cleanup GPtrArray
Fix assertion fail
GLib-CRITICAL **: g_ptr_array_remove_range: assertion 'index_ < rarray->len' failed
2019-08-02 12:32:59 +09:00
Marc Leeman d365c4fdf9 rtpmp4vpay: config-interval -1 send at idr
adjust/port from rtph264pay and allow sending the configuration data at
every IDR

The payloader was stripping the configuration data when the
config-interval was set to 0. The code was written in such a way !(a >
0) that it stripped the config when it was set at -1 (send config_data
as soon as possible).

This resulted in some MPEG4 streams where no GOP/VOP-I was detected to
be sent out without configuration.
2019-08-01 14:28:04 +00:00
Doug Nazar 5451e4e900 matroskademux: Ignore crc32 element while peeking at cluster. 2019-07-27 14:21:34 -04:00
Mathieu Duponchelle 4830bbe6ca qtdemux: fix reverse playback EOS conditions
In reverse playback, we don't want to rely on the position of the current
keyframe to decide a stream is EOS: the last GOP we push will start with
a keyframe, which position is likely to be outside of the segment.

Instead, let the normal seek_to_previous_keyframe mechanism do its job,
it works just fine.
2019-07-26 02:42:11 +00:00
Mathieu Duponchelle 104f459258 qtdemux: fix key unit seek corner case
If a key unit seek is performed with a time position that matches
the offset of a keyframe, but not its actual PTS, we need to
adjust the segment nevertheless.

For example consider the following case:

* stream starts with a keyframe at 0 nanosecond, lasting 40 milliseconds
* user does a key unit seek at 20 milliseconds
* we don't adjust the segment as the time position is "over" a keyframe
* we push a segment that starts at 20 milliseconds
* we push a buffer with PTS == 0
* an element downstream (eg rtponviftimestamp) tries to calculate the
  stream time of the buffer, fails to do so and drops it
2019-07-26 01:50:47 +00:00
Knut Andre Tidemann dbd7234191 rtp: opuspay: fix memory leak in gst_rtp_opus_pay_setcaps.
The src caps were never dereferenced, causing a memory leak.
2019-07-22 10:33:41 +02:00
Mathieu Duponchelle 5fde140e6e qtdemux: implement support for trickmode interval
When the seek event contains a (newly-added) trickmode interval,
and TRICKMODE_KEY_UNITS was requested, only let through keyframes
separated with the required interval
2019-07-18 17:54:43 +02:00
Seungha Yang aa0544ab8f matroska: Port to color_{primaries,transfer,matrix}_to_iso
... and remove duplicated code.
2019-07-15 23:25:53 +09:00
Jan Schmidt 436d33b288 splitmuxsink: add the ability to mux auxilliary video streams
The primary video stream is used to select fragment cut points
at keyframe boundaries. Auxilliary video streams may be
broken up at any packet - so fragments may not start with a keyframe
for those streams.
2019-07-15 11:46:36 +00:00
Jan Schmidt b5d8484b0b splitmuxsrc: Add video_%d pad template.
splitmuxsrc actually supports multiple video pads. Make that clear,
especially since it was already creating pads named "video_0" etc.
2019-07-15 11:46:36 +00:00
Mathieu Duponchelle 9deb3c27ac qtdemux: fix conditions for end of segment in reverse playback
The time_position field of the stream is offset by the media_start
of its QtDemuxSegment compared to the start of the GstSegment of
the demuxer, take it into account when making comparisons.
2019-07-09 21:21:20 +00:00
Seungha Yang 67b8ce3167 matroskademux: Fix mismatched transfer characteristic
TransferCharacteristics(18) should be ARIB STD-B67 (HLG)
See https://www.webmproject.org/docs/container/#TransferCharacteristics

Also map more color primaries indexes which have been handled by matroska-mux.
2019-07-09 23:11:45 +09:00
Olivier Crête 9d9d543d5c rtpsession: Also send conflict event when sending packet
If the conflict is detected when sending a packet, then also send an
upstream event to tell the source to reconfigure itself.

Also ignore the collision if we see more than one collision from the same
remote source to avoid problems on loops.
2019-07-06 14:23:20 +00:00
Olivier Crête 061afa33ee rtph265pay: Also immediately send packet if it is a suffix NAL
Immediately send packet if it contains any suffix NAL, this is required
in case they come after the VCL nal to not have to wait until the next frame.
2019-07-03 19:05:29 +00:00
Olivier Crête 43e83695fd rtph265pay: Don't drop second byte of NAL header
At least keep 2 bytes per NAL even if the second one is 0, the
second byte of the NAL header could very well be 0.
2019-07-03 19:05:29 +00:00
Olivier Crête 6fed30c48e rtph26xpay: Avoid print when there is no bundle at end of packet 2019-07-03 19:05:29 +00:00
Olivier Crête 97f2fb4cc8 rtph26xpay: Wait until there is a VCL or suffix NAL to send
With unit tests.
2019-07-03 19:05:29 +00:00
Olivier Crête 1b32cb1eae rtph265pay: Implement Aggregation packets
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête 5a9b602c9e rtph264pay: Report latency when in maximal aggregation mode 2019-07-03 19:05:29 +00:00
Olivier Crête cede4f993d rtph264pay: Default to not adding latency when aggregating
Send the bundle as soon as there is one VCL unit in the packet at
the end of an incoming buffer.

The DELTA_UNIT flag is not reliable, so ignore it.
2019-07-03 19:05:29 +00:00
Olivier Crête 13d25583db rtph265pay: Replace fragmentation while-loop with for-loop
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête 9be70dc360 rtph265pay: Rename payload_len to max_fragment_size
Align to rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête 34c23bdc5d rtph265pay: Clean up _payload_nal
Move determining whether we need to fragment at all into the
fragmenter.

Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête f5765ccf05 rtph265pay: Extract sending fragments into _payload_nal_fragment
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête 378c422e0c rtph265pay: Extract sending a single packet into _payload_nal_single
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête b841fd4c8a rtph265pay: Define and use FU_A_TYPE_ID
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête a6d50889af rtph265pay: Use snake_case variables
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Olivier Crête d4268ab2bf rtph265pay: Clean up whitespace and syntax
Align with rtph264pay
2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) b46dab13d2 rtph264pay: Support STAP-A bundling
Add a new property "do-aggregate"* to the H.264 RTP payloader which
enables STAP-A aggregation as per [RFC-6184][1]. With aggregation enabled,
packets are bundled instead of sent immediately, up until the MTU size.
Bundles also end at access unit boundaries or when packets have to be
fragmented.

*: The property-name is kept generic since it might apply more widely,
   e.g. STAP-B or MTAP.
[1]: https://tools.ietf.org/html/rfc6184#section-5.7

Closes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/434
2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 66a3db2083 rtph264pay: Fix delta-unit/discont handling when injecting SPS/PPS
Apply the wanted delta-unit and discont to the first packet; following
packets for this frame are always delta units and not discont.
2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 2a16160b57 rtph264pay: Replace fragmentation while-loop with for-loop 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 00936a8362 rtph264pay: Calculate the right max_fragments 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) fe99982dec rtph264pay: Rename payload_len to max_fragment_size 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 5051569713 rtph264pay: Clean up _payload_nal_fragment 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) d97c3f045c rtph264pay: Clean up _payload_nal
Move determining whether we need to fragment at all into the fragmenter.
2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 166c49b800 rtph264pay: Clean up _payload_nal_single 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) b3291620ca rtph264pay: Extract sending fragments into _payload_nal_fragment 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) e493f0ba09 rtph264pay: Extract sending a single packet into _payload_nal_single 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 40c23c06b1 rtph264pay: Define and use FU_A_TYPE_ID 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) bc0018370b rtph264pay: Use snake_case variables 2019-07-03 19:05:29 +00:00
Jan Alexander Steffens (heftig) 28d6dfa51f rtph264pay: Clean up whitespace and syntax 2019-07-03 19:05:29 +00:00
Olivier Crête 37d22186ff rtpjitterbuffer: Unlock output if the queue is full 2019-07-03 18:03:42 +00:00
Thomas Bluemel 080eba64de rtpjitterbuffer: Ignore unsolicited rtx packets.
If an rtx packet arrives that hasn't been requested (it might
have been requested from prior to a reset), ignore it so that
it doesn't inadvertently trigger a clock skew.
2019-07-03 06:23:07 -06:00
Thomas Bluemel 8d955fc32b rtpjitterbuffer: Only calculate skew or reset if no gap.
In the case of reordered packets, calculating skew would cause
pts values to be off. Only calculate skew when packets come
in as expected. Also, late RTX packets should not trigger
clock skew adjustments.

Fixes #612
2019-07-03 06:23:07 -06:00
Mart Raudsepp ade531183f qtdemux: Provide a 30 frames lead-in for MP3
mpegaudioparse suggests MP3 needs 10 or 30 frames of lead-in (depending on
mpegaudioversion, which we don't know here), thus provide at least 30 frames
lead-in for such cases as a followup to commit cbfa4531ee.
2019-07-02 20:50:21 +00:00
Olivier Crête af618cb081 rtpjitterbuffer: max-dropout-time gets cast to int32
So any value over MAXINT32 gets considered as negative and is silently ignored.
2019-07-02 19:59:49 +00:00
Mathieu Duponchelle f4f11530c2 qtdemux: do_seek can never be called with a NULL event 2019-07-02 13:39:55 +02:00
Mathieu Duponchelle 83704e32e6 qtdemux: only adjust segment time when adjusting segment start
We ended up setting segment.time to segment.position when doing
reverse playback, which is obviously wrong.
2019-07-02 13:39:55 +02:00
Mathieu Duponchelle 33277da781 rtspsrc: unref the event in element seek handler 2019-07-01 13:54:13 +02:00
Mathieu Duponchelle bcd367b81d rtspsrc: handle seek event on the element
Without this, the user has to wait for rtspsrc to have sent a PLAY
request and exposed its pads before seeking it.
2019-06-29 00:25:26 +02:00