Bing Song [Wed, 13 Jan 2021 17:12:06 +0000 (01:12 +0800)]
v4l2h265codec: fix HEVC profile string issue.
Keep HEVC profile compatible with other module.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/850>
Bing Song [Tue, 15 Dec 2020 02:41:40 +0000 (10:41 +0800)]
v4l2object: Need keep same transfer as input caps.
GST_VIDEO_TRANSFER_BT2020_12 and GST_VIDEO_TRANSFER_BT2020_10 will
be mapped to V4L2_XFER_FUNC_709. Need check input caps when map
V4L2_XFER_FUNC_709 back to GST_VIDEO_TRANSFER_BT2020_12 and
GST_VIDEO_TRANSFER_BT2020_10
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/816
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/841>
Tobias Ronge [Mon, 7 Dec 2020 09:01:53 +0000 (10:01 +0100)]
rtspsrc: Do not wait for response while flushing
Due to the may_cancel flag in GstRTSPConnection, receiving might not get
cancelled when supposed to. In this case, gst_rtsp_src_receive_response
will have to wait until timeout instead but if busy receiving RTP
data, this timeout will never occur.
With this patch, gst_rtsp_src_receive_response returns GST_RTSP_EINTR
if flushing is set to TRUE instead of continuing to receive.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/831>
Tim-Philipp Müller [Thu, 14 Jan 2021 19:13:03 +0000 (19:13 +0000)]
meson: allow libdv subproject fallback
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/854>
Xabier Rodriguez Calvar [Mon, 21 Dec 2020 12:55:58 +0000 (13:55 +0100)]
qtdemux: Allow streams with no specified protection system ID
This is necessary in cases like CMAF where there won't be any events
passing thru.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/852>
Hou Qi [Thu, 7 Jan 2021 08:57:27 +0000 (16:57 +0800)]
v4l2object: Map correct video format for RGBA
Map V4L2_PIX_FMT_RGBA32 pixel format to GST_VIDEO_FORMAT_RGBA instead of
GST_VIDEO_FORMAT_RGB video format to support RGBA.
Fixes #823
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/848>
Sanchayan Maity [Sat, 2 Jan 2021 07:36:16 +0000 (13:06 +0530)]
udpsrc: Fix marker links
These should be with a single ':'. The double '::' results in a CI with
build failure message like below.
ERROR: [links]: (mandatory-link-not-found): Mandatory link Link GstSocketTimestamp -> None (GstSocketTimestamp) could not be resolved
ERROR: [check-missing-since-markers]: (missing-since-marker): Missing since marker for udpsrc:socket-timestamp
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/828>
Sanchayan Maity [Thu, 17 Dec 2020 05:54:07 +0000 (11:24 +0530)]
udpsrc: Allow use of socket control message timestamps for DTS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/828>
Matthew Waters [Wed, 9 Dec 2020 09:20:18 +0000 (20:20 +1100)]
videoflip: fix possible crash when setting the video-direction while running
A classic case of not enough locking.
One interesting thing with this is the interaction between the
rotation value and caps negotiation. i.e. the width/height of the caps
can be swapped depending on the video-direction property. We can't lock
the entirety of the caps negotiation for obvious reasons so we need to
do something else. This takes the approach of trying to use a single
rotation value throughout the entirety of the negotiation and then
subsequent output frame in a kind of latching sequence.
Fixes: https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/792
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/836>
Matthew Waters [Wed, 9 Dec 2020 08:49:47 +0000 (19:49 +1100)]
tests: add tests for videoflip
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/836>
Ignacio Casal Quinteiro [Wed, 30 Dec 2020 12:38:46 +0000 (13:38 +0100)]
deinterlace: force -DPREFIX on macos
This is due to a bug in meson where it will not detect properly
the compiler if the symbols need an undercore.
https://github.com/mesonbuild/meson/issues/5482
Fixes #821
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/845>
Sebastian Dröge [Tue, 15 Dec 2020 09:36:27 +0000 (11:36 +0200)]
rtspsrc: Use proper types instead of G_TYPE_POINTER for the RTSP messages in the "handle-request" signal
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/842>
Vivia Nikolaidou [Thu, 10 Dec 2020 12:27:49 +0000 (14:27 +0200)]
splitmuxsink: Avoid deadlock when releasing a pad from a running muxer
Might not drain correctly
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/838>
Hou Qi [Fri, 11 Dec 2020 03:24:14 +0000 (11:24 +0800)]
v4l2object: Use active resolution during fallback colorspace probe
For legacy drivers that don't implement ENUM_FRAMESIZE, use active
resolution to probe colorspace. This can improve the accuracy of the
result when the colorspace depends on the resolution. This fixes a
wrong colorspace issue on board with vendor bsp at resolution 2560x1440.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/830>
Mathieu Duponchelle [Sat, 12 Dec 2020 03:02:37 +0000 (04:02 +0100)]
rtpst2022-1-fecdec: don't xor out of bounds
When reconstituting packets from a stream with variable packet
sizes, don't xor larger packets past the length of the protected
packet
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/839>
Mathieu Duponchelle [Sat, 12 Dec 2020 03:00:41 +0000 (04:00 +0100)]
rtpst2022-1-fecenc: memset when reallocating xored payload
When protecting packets with a variable payload length, we
reallocate the xored payload when needed. It is a good idea
to memset the extended memory to 0 so that we don't xor
data with garbage!
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/839>
Mathieu Duponchelle [Sat, 12 Dec 2020 02:56:11 +0000 (03:56 +0100)]
rtpst2022-1-fec-*: protect additional RTP header fields
While the standard is a bit vague about whether the padding,
extension and marker bits should be protected:
> The usage, by senders and receivers, of the following bits shall
> be defined by the associated video/audio transport standards:
It is obviously necessary and useful for some formats (eg VP8)
that those indeed be protected.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/839>
Jan Schmidt [Fri, 11 Dec 2020 16:28:56 +0000 (03:28 +1100)]
splitmuxsink: Unit test - check format/opened/closed sequence
Check the sequence of format-location/fragment-opened/fragment-closed
events is respected. There should be 1 format-location call for each
fragment-opened message, and 1 fragment-closed for each.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/833>
Jan Schmidt [Tue, 8 Dec 2020 13:40:52 +0000 (00:40 +1100)]
splitmuxsink: Fix for 'reference bytes muxed' check.
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798
introduced a check in the need-new-fragment logic to avoid starting a
new fragment unless there has been some data on the reference stream,
but the check is done against the number of bytes that have been
received on the input, not the number that were released for output
into the current fragment.
Fix the check to remember and test against bytes that have been sent
for output.
This also fixes a problem where starting a new fragment fails to
request a new filename from the format-location signal.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/833>
Jan Schmidt [Mon, 14 Sep 2020 14:27:24 +0000 (00:27 +1000)]
splitmuxsink: Add debug for fragment opened/closed msgs
When posting fragment-opened and fragment-closed messages,
put a debug statement in the logs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/833>
Jan Schmidt [Tue, 18 Aug 2020 06:06:14 +0000 (16:06 +1000)]
splitmuxsink: Convert asserts into element errors.
Change some g_assert into element errors so that they can be
caught and the pipeline shut down.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/833>
Matthew Waters [Fri, 10 Jul 2020 05:36:54 +0000 (15:36 +1000)]
rtpmanager: update for rtp header extensions
Provide an implementation of the transport-wide-cc header extension and
use it in rtpfunnel.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/808>
Jose Quaresma [Sun, 15 Nov 2020 11:30:07 +0000 (11:30 +0000)]
rpicamsrc: add vchostif library as it is required to build successful
fix: undefined reference to `vc_gencmd'
/usr/src/debug/gstreamer1.0-plugins-good/1.18.1-r0/build/../gst-plugins-good-1.18.1/sys/rpicamsrc/RaspiCamControl.c:1440: undefined reference to `vc_gencmd'
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/818>
Marijn Suijten [Wed, 25 Nov 2020 16:51:24 +0000 (17:51 +0100)]
tests/rtp-payloading: Use new AudioFormatInfo::fill_silence function
The function is renamed to be properly associated with AudioFormatInfo
(its instance) instead of AudioFormat (an unrelated enum), see [1] for
the rename itself.
[1]: https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/940
Nirbheek Chauhan [Tue, 24 Nov 2020 16:41:50 +0000 (22:11 +0530)]
deinterlace: Enable x86 assembly with nasm on MSVC
We need to remove x86inc.asm from the list of compiled assembly files
because it is not supposed to be compiled separately. It is directly
included by yadif.asm, and it exports no symbols.
The object file was getting ignored on all platforms except on msvc
where it was causing a linker hang when building with debugging
enabled because the object file had no debug symbols (or similar).
We've seen this before in FFmpeg too, which uses nasm:
https://gitlab.freedesktop.org/gstreamer/meson-ports/ffmpeg/-/merge_requests/46
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/825>
Matthew Waters [Thu, 19 Nov 2020 06:47:21 +0000 (17:47 +1100)]
qml: add some docs on display and contexts
Especially considering some dynamic pipeline scenarios.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/822>
Tim Schneider [Wed, 18 Nov 2020 19:09:24 +0000 (20:09 +0100)]
rpicamsrc: Added "src->started = FALSE;" to gst_rpi_cam_src_stop
Makes the element reusable multiple times after a state change back to READY.
Fixes #105
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/823>
Bing Song [Thu, 12 Nov 2020 01:32:30 +0000 (09:32 +0800)]
v4l2: caps negotiate wrong as interlace feature
gst_caps_simplify() will move interlace format before normal video
format. It will cause caps negotiate prefer interlaced caps which
isn't expected. Seperate normal caps and interlaced caps and then
merge it will keep prefer progress video format.
Add ARGB/BGRA for interlaced caps.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/802
Part-of <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/813>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/813>
Havard Graff [Fri, 13 Nov 2020 20:25:42 +0000 (21:25 +0100)]
rtpsession: never send on a non-internal source
This will end up as a "received" packet, due to the code in
source_push_rtp, which will think this is a packet being received.
Instead drop the packet and hope that either:
1. Something upstream responds to the GstRTPCollision event and changes
SSRC used for sending.
2. That the application responds to the "on-ssrc-collision" signal, and
forces the sender (payloader) to change its SSRC.
3. That the BYE sent to the existing user of this SSRC will respond to
the BYE, and that we timeout this source, so we can continue sending
using the chosen SSRC.
The test reproduces a scenario where we previously would have sent
on a non-internal source.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/817>
Havard Graff [Fri, 13 Nov 2020 11:39:53 +0000 (12:39 +0100)]
rtpsource: rewrite timeout-check to avoid underflow
If current_time is < collision_timeout, we get an uint64 underflow, and
the check will trigger prematurely.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/817>
Vivia Nikolaidou [Fri, 13 Nov 2020 12:58:44 +0000 (14:58 +0200)]
aacparse: Fix caps change handling
In baseparse we set the fixed caps flag on all src pads, therefore the
source pad caps query in get_allowed_caps will return the current caps.
Current caps won't necessarily intersect with the new caps (e.g. sample
rate change). Replace get_allowed_caps with peer_query_caps.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/816>
Tim-Philipp Müller [Thu, 12 Nov 2020 23:39:21 +0000 (23:39 +0000)]
tests: qtdemux: fix typo in caps field
timesacle -> timescale
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/815>
Tim-Philipp Müller [Thu, 12 Nov 2020 23:38:21 +0000 (23:38 +0000)]
tests: qtdemux: fix crash on 32-bit architectures
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/803
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/815>
Sanchayan Maity [Mon, 14 Sep 2020 07:42:50 +0000 (13:12 +0530)]
rtp: ldacpay: Add LDAC RTP payloader
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/757>
Sebastian Dröge [Tue, 3 Nov 2020 13:58:30 +0000 (15:58 +0200)]
qmlglsink: Keep old buffers around a bit longer if they were bound by QML
We don't know exactly when QML will stop using them but it should be
safe to unref them after at least 2 more buffers were bound.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/810>
ChrisDuncanAnyvision [Tue, 10 Nov 2020 18:18:12 +0000 (18:18 +0000)]
rtspsrc: Ensure same group-id used for both TCP/UDP stream-start events
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/811>
ChrisDuncanAnyvision [Tue, 10 Nov 2020 16:17:23 +0000 (16:17 +0000)]
rtspsrc: Use consistent URI hashed stream-id for UDP and TCP/Interleaved streams
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/811>
Nirbheek Chauhan [Wed, 4 Nov 2020 13:13:04 +0000 (18:43 +0530)]
meson: Enable some MSVC warnings for parity with GCC/Clang
This makes it easier to do development with MSVC by making it warn
on common issues that GCC/Clang error out for in our CI configuration.
Continuation from https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/223
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/809>
Olivier Crête [Fri, 16 Oct 2020 01:42:40 +0000 (21:42 -0400)]
rtpsource: Report for which local SSRC is a remote RB reporting on
This is useful in the Bundle case because there may be multiple local
and remote SSRCs in the same session.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/776>
Guillaume Desmottes [Thu, 29 Oct 2020 14:58:38 +0000 (15:58 +0100)]
docs: update plugins cache
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/530>
Guillaume Desmottes [Fri, 20 Mar 2020 12:15:33 +0000 (13:15 +0100)]
rtp: add rtpisacdepay
Depayload for the iSAC audio codec.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/530>
Guillaume Desmottes [Fri, 20 Mar 2020 12:15:33 +0000 (13:15 +0100)]
rtp: add rtpisacpay
Payload for the iSAC audio codec.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/530>
Dinesh Manajipet [Sun, 1 Nov 2020 18:36:49 +0000 (18:36 +0000)]
qmlglsink: Set qtitem's implicit width/height
This can be useful to let the layouts automatically resize qtitem
and also easily query a video's width/height from QML
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/802>
Sebastian Dröge [Sun, 1 Nov 2020 08:30:27 +0000 (10:30 +0200)]
flvmux: Release pads via GstAggregator
See https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/797
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/801>
Matthew Waters [Mon, 26 Oct 2020 01:40:49 +0000 (12:40 +1100)]
qtmux: support muxing multiple codec_data for h264/h265
Each codec_data is put into its own SampleTableEntry inside the stsd.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/787>
Stéphane Cerveau [Thu, 29 Oct 2020 13:54:16 +0000 (14:54 +0100)]
navseek: add hold_eos property
This property will tell the element to hold
the EOS event and keep it until the next
keystroke.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/792>
Jan Schmidt [Sat, 31 Oct 2020 01:52:04 +0000 (12:52 +1100)]
splitmuxsrc: Fix comment in a test
Fix a comment in the splitmuxsrc robust muxing test so it
describes the test properly.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Sat, 31 Oct 2020 01:49:08 +0000 (12:49 +1100)]
splitmuxsink: Change EOS catching logic.
Add a new state for ending the overall stream, and use it to decide
whether to pass the final EOS message up the bus instead of dropping
it. Fixes a small race that makes the testsuite sometimes not generate
the last fragment(s) sometimes because the wrong EOS gets
allowed through too early.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Fri, 30 Oct 2020 15:19:07 +0000 (02:19 +1100)]
splitmuxsink: Don't use the element state lock
Using the element state lock to avoid splitmuxsink shutting
down while doing element manipulations can lead to a deadlock on
shutdown if a fragment switch happens at exactly the wrong moment.
Use a private mutex and a shutdown boolean instead.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Thu, 29 Oct 2020 16:38:15 +0000 (03:38 +1100)]
splitmuxsink: Don't busy loop on a non-ready pad.
If a pad gets into the check_completed_gop method and then
the underlying conditions change on the reference context,
things could get stuck in a busy loop when the context should
instead jump back out and wait for more data.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Thu, 29 Oct 2020 16:36:51 +0000 (03:36 +1100)]
splitmuxsrc: Mark running=false on shutdown.
Make sure that any late gst_element_call_async() callbacks
know that the elements is shutting down and bail out instead
of operating on the element we're trying to stop.
Fixes a spurious test failure in elements_splitmuxsrc
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Wed, 28 Oct 2020 15:36:35 +0000 (02:36 +1100)]
splitmuxsink: Forward EOS messages from async fragments.
Re-enable forwarding EOS messages from fragments that are completing
asynchronously, so that splitmuxsink itself won't go EOS until they
are complete. This was disabled to work around a bug in core that
is fixed in
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/683
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Thu, 17 Sep 2020 12:56:01 +0000 (22:56 +1000)]
splitmuxsink: Never start a new fragment with no reference buffers
If there has been no bytes from the reference stream muxed into
the current fragment, then time can't have advanced, there's no
GOP... this fragment would be broken or empty, so wait for some
data on the reference buffer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/798>
Jan Schmidt [Wed, 28 Oct 2020 15:38:16 +0000 (02:38 +1100)]
qtmux: Chain up when releasing pad, and fix some locking.
Release pads by calling up into aggregator so it can do the right
things. Don't clean up the pad until after that.
Add some missing locks around some accesses to shared pad state.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/797>
Stian Selnes [Mon, 13 Aug 2018 13:35:11 +0000 (15:35 +0200)]
rtpvp9depay: Improve SVC parsing, aggregate all layers
- Fix start and end of picture to support multiple layers. Start of
picture is the first packet of the base layer, while end of picture
is when the marker bit is set (last packet of the enhancement
layers).
- All "layers" (aka "frames") of a picture are pushed downstream in a
single buffer when picture is complete.
- Forgive SID=0 for enhancement layers (invalid, but Chrome and
Firefox sends it)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/773>
Stian Selnes [Fri, 30 Oct 2020 02:09:48 +0000 (03:09 +0100)]
rtpvp8depay: Send lost events when marker bit is missing
This means the previous frame was incomplete.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/796>
Knut Saastad [Wed, 14 Oct 2020 21:17:53 +0000 (23:17 +0200)]
rtpvp9depay: detect incomplete frames and bail out
If a packet with the B bit set arrives but we haven't received
a packet with the marker or E bits set to end the previous frame,
we know the current frame was incomplete.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/795>
Knut Saastad [Wed, 14 Oct 2020 21:17:53 +0000 (23:17 +0200)]
rtpvp9depay: detect incomplete frames and bail out
If a packet with the B bit set arrives but we haven't received
a packet with the marker or E bits set to end the previous frame,
we know the current frame was incomplete.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/769>
Mikhail Fludkov [Tue, 13 Oct 2020 23:28:50 +0000 (01:28 +0200)]
rtpvp*depay: possibly forward might-have-been-fec PacketLost events
This is ad adaptation of a Pexip patch for dealing with spurious
GstRTPPacketLost events caused by lost ulpfec packets: as FEC packets
under that scheme are spliced in the same sequence domain as the media
packets, it is not generally possible to determine whether a lost packet
was a FEC packet or a media packet.
When upstreaming pexip's ulpfec patches, we decided to drop all lost
events at the base depayloader level, and where the original patch
from pexip was making use of picture ids and marker bits to determine
whether a packet should be forwarded, this patch makes use of those
to determine whether they should be dropped instead (by removing their
might-have-been-fec field).
Spurious lost events coming out of the depayloader can cause the
decoder to stop decoding until the next keyframe and / or request a new
keyframe, and while this is not desirable it makes sense to forward
that information when we have other means to determine whether a lost
packet was indeed a FEC packet, as is the case with VP8 / VP9 payloads
when they carry a picture id.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/769>
Jan Schmidt [Tue, 20 Oct 2020 12:22:36 +0000 (23:22 +1100)]
rtph264depay: Preserve SPS/PPS arrival order.
Even if SPS/PPS haven't changed, make sure to move them to the
end of the tracking array if needed, so we always know what the
most recent entries are, in case we need to discard the oldest
when generating codec_data.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/775>
Jan Schmidt [Fri, 16 Oct 2020 13:05:15 +0000 (00:05 +1100)]
rtph264depay: Warn when max SPS/PPS are collected in AVC mode.
The AVC codec_data has a flaw that it can only accomodate
31 SPS headers, even though H.264 can have 32, and 255 PPS,
when there can be 256 in H.264. When streaming RTP some
clients like to cycle through SPS/PPS ids when changing
configuration and can eventually accumulate a full set.
In that case, we have no choice but to discard one (oldest)
entry, or else the count written into the codec_data is wrong
and downstream decoding failures ensue.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/775>
Havard Graff [Tue, 27 Oct 2020 23:29:05 +0000 (00:29 +0100)]
rtpjitterbuffer: don't send multiple instant RTX for the same packet
Due to us not properly acknowleding the time when the last RTX was sent
when scheduling a new one, it can easily happen that due to the packet
you are requesting have a PTS that is slightly old (but not too old when
adding the latency of the jitterbuffer), both its calculated second and
third (etc.) timeout could already have passed. This would lead to a burst
of RTX requests, which acts completely against its purpose, potentially
spending a lot more bandwidth than needed.
This has been properly reproduced in the test:
test_rtx_not_bursting_requests
The good news is that slightly re-thinking the logic concerning
re-requesting RTX, made it a lot simpler to understand, and allows us
to remove two members of the RtpTimer which no longer serves any purpose
due to the refactoring. If desirable the whole "delay" concept can actually
be removed completely from the timers, and simply just added to the timeout
by the caller of the API. But that can be a change for a another time.
The only external change (other than the improved behavior around bursting
RTX) is that the "delay" field now stricly represents the delay between
the PTS of the RTX-requested packet and the time it is requested on,
whereas before this calculation was more about the theoretical calculated
delay. This is visible in three other RTX-tests where the delay had
to be adjusted slightly. I am confident however that this change is
correct.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/789>
Jan Schmidt [Tue, 27 Oct 2020 12:43:49 +0000 (23:43 +1100)]
matroska-mux: Fix sparse stream crash
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/656
introduced an invalid memory access when debug is enabled, by casting
the wrong pointer to a GstCollectPad. Fixing that showed the original
change was incorrect and leads to an infinite loop in the
testsuite. This patch fixes both problems.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/788>
Thibault Saunier [Thu, 22 Oct 2020 18:29:01 +0000 (15:29 -0300)]
vpx: Fix the check to unfixed/unknown framerate to set bitrate
0/1 means unknown framerate not X/0 (which is illegal).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/782>
Arun Raghavan [Thu, 22 Oct 2020 13:17:26 +0000 (09:17 -0400)]
rtputils: Count metas with an empty tag list for copying/keeping
The GstMetaInfos registered in core do not set their tags to NULL, but
instead use an empty list (non-NULL list with a single NULL value).
Let's check explicitly for that so as to not miss some metas.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/779>
Bastien Reboulet [Fri, 16 Oct 2020 23:05:45 +0000 (16:05 -0700)]
qmlglsink: fix crash when created/destroyed in quick succession
The crash is caused by a race condition where the render thread
calls a method on the QtGLVideoItem instance that was
previously destroyed by the main thread.
Also, less frequently, QtGLVideoItem::onSceneGraphInitialized
is called when QQuickItem::window is null, also causing a crash.
Fixes #798
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/777>
Sebastian Dröge [Mon, 19 Oct 2020 15:23:25 +0000 (18:23 +0300)]
v4l2codec: Garbage collect old frames if they accumulate because of codec bugs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/778>
Sebastian Dröge [Mon, 19 Oct 2020 14:56:04 +0000 (17:56 +0300)]
v4l2codec: Pass system frame number as timestamp and use it to retrieve back frames reliably
System frame numbers are supposed to be unique and correct drivers are
passing through timestamps without modification from the output/sink to the
capture/src side.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/778>
Nicolas Dufresne [Thu, 24 Sep 2020 17:13:00 +0000 (13:13 -0400)]
rtpbin: Add clear-ssrc action
This action signal will delegate to clear-ssrc onto the rtpssrcdemux element
associated with the session. This allow rtpbin users to clear pads and
elements for a specific ssrc that is known to no longer be in use. This
happens when a pad is reused in rtpsrc or ristsrc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/736>
John-Mark Bell [Fri, 8 Sep 2017 19:02:13 +0000 (20:02 +0100)]
rtpvp8pay: payload temporally scaled bitstreams.
Co-Authored-By: Vincent Sanders <vince@pexip.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/728>
Stian Selnes [Fri, 17 Nov 2017 14:11:41 +0000 (15:11 +0100)]
rtpvp8pay: Add picture-id-offset property
Add property to set the initial value for picture-id. RFC7741 says
that picture-id MAY be initialized to a random value, thus it's also
valid to simply set it to a fixed initial value. A fixed value is very
useful for testing.
Default behavior is not changed.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/728>
Mikhail Fludkov [Thu, 16 Mar 2017 14:23:28 +0000 (15:23 +0100)]
rtpvp8pay: move duplicate code to separate functions
Two new functions to modify picture id:
gst_rtp_vp8_pay_picture_id_reset - picks random picture id of
appropriate bitsize
gst_rtp_vp8_pay_picture_id_increment - increments picture id taking
care of wrapping
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/728>
John-Mark Bell [Fri, 8 Sep 2017 07:13:05 +0000 (08:13 +0100)]
vp8enc: expect bps for temporal-scalability-target-bitrate.
Consistency with target-bitrate is less surprising and with
modern libvpx additional configuration is required to make
temporal scaling work.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/728>
John-Mark Bell [Fri, 8 Sep 2017 07:19:20 +0000 (08:19 +0100)]
vp8enc: finish support for temporally scaled encoding
- introduce two new properties:
* temporal-scalability-layer-flags:
Provide fine-grained control of layer encoding to the
outside world. The flags sequence should be a multiple of
the periodicity and is indexed by a running count of encoded
frames modulo the sequence length.
* temporal-scalability-layer-sync-flags:
Specify the pattern of inter-layer synchronisation (i.e.
which of the frames generated by the layer encoding
specification represent an inter-layer synchronisation).
There must be one entry per entry in
temporal-scalability-layer-flags.
- apply temporal scalability settings and expose as buffer
metadata.
This allows the codec to allocate a given frame to the correct
internal bitrate allocator. Additionally, all the
non-bitstream metadata needed to payload a temporally scaled
stream is now attached to each output buffer as a
GstVideoVP8Meta.
- add unit test for temporally scaled encoding.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/728>
Stéphane Cerveau [Thu, 15 Oct 2020 16:21:54 +0000 (18:21 +0200)]
meson: update glib minimum version to 2.56
In order to support the symbol g_enum_to_string in various
project using GStreamer ( gst-validate etc.), the glib minimum
version should be 2.56.0.
Remove compat code as glib requirement
is now > 2.56
Version used by Ubuntu 18.04 LTS
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/774>
Mathieu Duponchelle [Wed, 14 Oct 2020 12:30:34 +0000 (14:30 +0200)]
rtpst2022-1-fecenc: fix input seqnum check
We need to cast the incremented last seqnum to guint16 for
consistent checks on wraparound
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/770>
Jan Alexander Steffens (heftig) [Sat, 12 Sep 2020 07:02:30 +0000 (09:02 +0200)]
flvmux: Correct time types
- last_dts is in milliseconds, not nanoseconds as expected for
GstClockTime. Make it a generic guint64.
- Use GstClockTime for the fields that actually contain nanoseconds.
None of them should become negative.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/766>
Sebastian Dröge [Fri, 9 Oct 2020 06:31:27 +0000 (09:31 +0300)]
rtpst2022-1-fecenc: Don't unconditionally use GLib 2.60 APIs
g_queue_clear_full() in this case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/768>
Mathieu Duponchelle [Thu, 8 Oct 2020 16:54:55 +0000 (18:54 +0200)]
rtpulpfec: fix potential alignment issue in xor function
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/753#note_646453
for context
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/753>
Mathieu Duponchelle [Tue, 6 Oct 2020 01:03:13 +0000 (03:03 +0200)]
rtpmanager: implement SMPTE 2022-1 FEC encoder
+ improve integration of FEC encoders in rtpbin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/753>
Mathieu Duponchelle [Tue, 6 Oct 2020 01:13:30 +0000 (03:13 +0200)]
rtpmanager: implement SMPTE 2022-1 FEC decoder
+ improve integration of FEC decoders in rtpbin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/753>
Olivier Crête [Wed, 8 Jul 2020 21:28:31 +0000 (17:28 -0400)]
rtpfunnel: Also forward custom sticky event
This is useful to track metadata about each group of packets
Also include a unit test
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/666>
Thibault Saunier [Tue, 29 Sep 2020 12:44:54 +0000 (09:44 -0300)]
isomp4: Rename GstQTMux to GstBaseQTMux to avoid breaking API
Since
52b63de19ada283c1180c8fc00cacb1465fdf10f the qtmux GType was
renamed GstQTMuxElement which breaks presets, revert that change.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/755>
Sebastian Dröge [Mon, 28 Sep 2020 15:25:21 +0000 (18:25 +0300)]
rtp: Fix allocations to support source-info property
Use gst_rtp_base_payload_allocate_output_buffer() instead of
gst_rtp_buffer_new_allocate() in order to allocate RTP buffer with
correct number of CSRCs according to the meta.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/612>
Stian Selnes [Fri, 23 Oct 2015 09:08:56 +0000 (11:08 +0200)]
rtpvp8pay: Fix allocation to support source-info property
Use gst_rtp_base_payload_allocate_output_buffer() in order to allocate
RTP buffer with correct number of CSRCs according to the meta.
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/314
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/612>
Matthew Waters [Mon, 28 Sep 2020 05:36:00 +0000 (15:36 +1000)]
qtmux: output the correct limits in error messages
Having the current bytes being less than the limit was confusing!
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/732>
Matthew Waters [Fri, 31 Jul 2020 06:47:37 +0000 (16:47 +1000)]
qtmux: properly support initial caps nego failure
Scenario:
- gap event causes h264parse to push made up caps that may fail checks
inside qtmux (e.g missing codec_data).
- the caps event has already been marked as received and is sticky on
the sink pad
- gst_qt_mux_pad_can_renegotiate() will retrieve the failed caps event
using gst_pad_get_current_caps() and reject the correct updated caps
with codec_data.
- Failure!
Keep track of the configured caps ourselves instead of relying on the
sticky event on the pad.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/732>
Matthew Waters [Wed, 22 Jul 2020 05:34:44 +0000 (15:34 +1000)]
qtmux: support non-seekable downstream mode
Write an mdat per buffer in that case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/732>
Nicolas Dufresne [Wed, 23 Sep 2020 19:25:36 +0000 (15:25 -0400)]
rtpbin: Remove the rtpjitterbuffer with the stream
Since !348, the jitterbuffer was only removed with the session. This restores
the original behaviour and removes the jitterbuffer when the stream is
removed. This avoid accumulating jitterbuffer objects into the bin when a
session is reused.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/735>
Nicolas Dufresne [Wed, 23 Sep 2020 17:26:51 +0000 (13:26 -0400)]
rtpbin: Cleanup dead code
The rtpjitterbuffer is now part of the session elements, we no longer need
to do the ref_sink dance when signalling it. It is already owned by the bin
when signalled. Also, the code that handles generic session elements already
handle the ref_sink() calls since:
03dc22951bacb6fdc3868c8f801e6a52c33a745f
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/735>
Matthew Waters [Fri, 18 Sep 2020 06:09:20 +0000 (16:09 +1000)]
rtph26*depay: drop FU's without a corresponding start bit
If we have not received a FU with a start bit set, any subsequent FU
data is not useful at all and would result in an invalid stream.
This case is constructed from multiple requirements in
RFC 3984 Section 5.8 and RFC 7798 Section 4.4.3. Following are excerpts
from RFC 3984 but RFC 7798 contains similar language.
The FU in a single FU case is forbidden:
A fragmented NAL unit MUST NOT be transmitted in one FU; i.e., the
Start bit and End bit MUST NOT both be set to one in the same FU
header.
and dropping is possible:
If a fragmentation unit is lost, the receiver SHOULD discard all
following fragmentation units in transmission order corresponding to
the same fragmented NAL unit.
The jump in seqnum case is supported by this from the specification
instead of implementing the forbidden_zero_bit mangling:
If a fragmentation unit is lost, the receiver SHOULD discard all
following fragmentation units in transmission order corresponding to
the same fragmented NAL unit.
A receiver in an endpoint or in a MANE MAY aggregate the first n-1
fragments of a NAL unit to an (incomplete) NAL unit, even if fragment
n of that NAL unit is not received. In this case, the
forbidden_zero_bit of the NAL unit MUST be set to one to indicate a
syntax violation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/730>
Seungha Yang [Sun, 20 Sep 2020 12:06:19 +0000 (21:06 +0900)]
imagefreeze: Response caps query from srcpad
... and chain up to default query handler for unhandled query types.
Unhandled query shouldn't be returned with FALSE if there's no special needs.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/731>
Matthew Waters [Wed, 16 Sep 2020 02:15:09 +0000 (12:15 +1000)]
qtmux: make documentation happy
introduce a base qtmux class that we can install documentation snippets
on instead of duplicating across alll the isomp4 elements
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>
Matthew Waters [Thu, 28 May 2020 09:40:24 +0000 (19:40 +1000)]
isomp4/mux: add a fragment mode for initial moov with data
Used by some proprietary software for their fragmented files.
Adds some support for multi-stream fragmented files
Flow is as follows.
1. The first 'fragment' is written as a self-contained fragmented
mdat+moov complete with an edit list and durations, tags, etc.
2. Subsequent fragments are written with a mdat+moof and each stream is
interleaved as data arrives (currently ignoring the interleave-*
properties). data-offsets in both the traf and the trun ensure
data is read from the correct place on demuxing. Data/chunk offsets
are also kept for writing out the final moov.
3. On finalisation, the initial moov is invalidated to a hoov and the
size of the first mdat is extended to cover the entire file contents.
Then a moov is written as regularly would in moov-at-end mode (the
default).
This results in a file that is playable throughout while leaving a
finalised file on completion for players that do not understand
fragmented mp4.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>
Matthew Waters [Thu, 25 Jun 2020 06:37:56 +0000 (16:37 +1000)]
qtdemux: increase some logging on streams and sample parsing
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>
Matthew Waters [Thu, 25 Jun 2020 06:35:45 +0000 (16:35 +1000)]
qtdemux: bail out when encountering an atom with a size of 0
A size 0 atom means the atom extends to the end of the file. No further
valid atoms will ever follow. Avoids a subsequent scan for an atom from
one byte earlier after encountering a size 0 atom.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>
Matthew Waters [Thu, 25 Jun 2020 06:33:04 +0000 (16:33 +1000)]
qtdemux: fix subsequent moof parsing after moov with valid samples
reset the moof_offset back to its original value like is done in the
error case just before.
Fixes subsequent parsing of a moof following a moov that contains valid
samples in a non-streaming fragmented mp4.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>
Matthew Waters [Thu, 25 Jun 2020 06:30:28 +0000 (16:30 +1000)]
qtdemux: extend edit list when fragmented
When we are fragmented, the edit list may only refer to the portion of
the media that is in the moov. Extend the edit list stop time when we
if there is only one qt segment and we are reading a fragmented file.
Fixes playback of some fragmented mp4 files generated by proprietary
programs.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/643>
Nicolas Dufresne [Tue, 15 Sep 2020 18:22:13 +0000 (14:22 -0400)]
meson: Allow overriding qt5 feature
This will allow controlling that feature from gst-build
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/729>
Olivier Crête [Wed, 18 Nov 2015 00:14:01 +0000 (19:14 -0500)]
splitmuxsrc: Implement segment query
Fixes #239
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/713>