Commit graph

19229 commits

Author SHA1 Message Date
Tim-Philipp Müller
aa4448cdd6 rtpjpegpay: fix image corruption when compiled with MSVC on Windows
On Windows with MSVC, jpeg_header_size would end up 2 bytes larger
than it should be. This then leads to the first 2 bytes of the
actual jpeg image data to be dropped, because we think those
belong to the header, which results in an undecodable image when
reconstructed in the depayloader.

What happens is that when the compiler evaluates

  jpeg_header_size = mem.offset + read_u16_and_inc_offset_by_2(&mem);

it actually uses the mem.offset value after it has been increased
by the function call on the right hand size of the equation.

From section 6.5 of the C99 spec:

  3. The grouping of operators and operands is indicated by the syntax [74].
     Except as specified later (for the function-call (), &&, ||, ?:, and
     comma operators), the order of evaluation of subexpressions and the
     order in which side effects take place are both unspecified.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/889

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/999>
2021-05-29 14:31:34 +01:00
Hou Qi
f4049fc292 v4l2videoenc: Set default latency if the frame duration is invalid
If the duration of the v4l2object is invalid, use default 25fps instead.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/996>
2021-05-28 11:54:53 +00:00
Seungha Yang
80567ca939 deinterlace: Drop "field-order" field while transforming caps
Like other basetransform subclasses are doing, drop field
which can be converted by deinterlace.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/997>
2021-05-27 12:58:30 +00:00
Seungha Yang
9a8aea4a6a deinterlace: Drop field-order field if outputting progressive
Progressive with field-order doesn't make sense

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/997>
2021-05-27 12:58:30 +00:00
Havard Graff
26c94af2ea rtpssrcdemux: fix "data flow before segment event" crash
This crash could happen at any time a RTP and RTCP buffer arrived
simultaneously in ssrcdemux.

The problem was that sticky-event arriving while the rtp and rtcp pads
were being set up could arrive just too late to be included in the initial
forwarding.

The fix checks if the stickies have been sent on the srcpad about to be
pushed on, and if not sends them. It also blocks any stickes from
being forwarded *prior* to this happening, to avoid them arriving on
the srcpad multiple times.

Since the test loops 1000 times, this will make running under valgrind
take forever, so use the RUNNING_ON_VALGRIND variable to detect we
are running under valgrind, and reduce the loop-count to 2 in that case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/992>
2021-05-25 22:04:41 +00:00
Havard Graff
de3a3882e9 rtpssrcdemux: refactor destruction of GstRtpSsrcDemuxPads
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/992>
2021-05-25 22:04:41 +00:00
Havard Graff
c721c6fe72 rtpssrcdemux: make naming consistent
Use plural for GstRtpSsrcDemuxPads, since it contains two pads, and
use the variable-name 'dpads' everywhere.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/992>
2021-05-25 22:04:41 +00:00
Tim-Philipp Müller
80966ed0a3 wavparse: use g_strndup() for copying text data
So we don't rely on NUL terminators inside the data.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/994>
2021-05-23 15:20:16 +01:00
Tim-Philipp Müller
5353ff355f wavparse: clean up adtl/note/labl chunk parsing
We were passing the size of the adtl chunk to the note/labl
sub-chunk parsing function, which means we may memdup lots of
data after the chunk string's NUL terminator that doesn't
really belong to it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/994>
2021-05-23 15:19:41 +01:00
Tim-Philipp Müller
3dd8de1d7c wavparse: guard against overflow when comparing chunk sizes
Could be rewritten as lsize > (size - 8) a well, but the
extra check seems clearer. Doesn't look like it was problematic,
lsize wasn't actually used when parsing the sub-chunks.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/994>
2021-05-23 15:17:27 +01:00
Daniel Almeida
4f2189a6e1 doc: update gst_plugins_cache.json
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/991>
2021-05-21 16:42:04 -04:00
Stéphane Cerveau
918d882021 matroskademux: fix decoder glitches with H264 content
To avoid decoder starvation causing glitches on screen,
the demuxer shall clip only when the buffer is a key frame
and the lace time is greater than the stop time.

Fixes gst-editing-services#128

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/973>
2021-05-20 15:07:07 +02:00
Matthew Waters
c75bd32539 qml: don't use buffers that have invalid contents
If the GL context is not shareable, ignore it.

A future change may also not output the relevant output either.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/983>
2021-05-12 02:55:51 +00:00
Matthew Waters
3b4673eba3 qml: also use the dummy texture when no buffer has been set
Fixes corrupted texture output when changing OpenGL display/contexts.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/983>
2021-05-12 02:55:51 +00:00
Nicolas Dufresne
13cba418f0 doc: Update cache for RGBP format addition
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/968>
2021-05-11 17:20:00 -04:00
Nicolas Dufresne
d877f7f816 matroskademux: Advertise codec-alpha in caps
This will be used to select the appropriate decoders. We also only attach the
GstVideoCodecAlphaMeta if the AlphaMode element is set, this is to stay on the
safe side and mimic what browsers (verified in Firefox and Chromium code) do.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/968>
2021-05-11 16:52:22 -04:00
Nicolas Dufresne
b2e857efc6 matroskademux: Store alpha stream in VideoCodecAlphaMeta
This generalize the feature over using mini object quark data. If
that feature was Matroska specifc, using the new CustomMeta would have
been enough and arguably cleaner then QData, though it seems that
similar technique is use with AV1 Image Format (AVIF).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/968>
2021-05-11 16:06:44 -04:00
Tim-Philipp Müller
b84bad6ac3 matroska-demux: extract VP8 alpha from BlockAdditionals
And put it on buffers as qdata (which is easier in this
case than a private custom meta because it can be picked
up easily in other modules).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/968>
2021-05-11 16:06:44 -04:00
Matthew Waters
c7181bedac qt: return a different GstGLDisplay object when the first sink requests
This allows the 'replace-gstreamer-opengl-context' context machinery to
correctly replace the OpenGL context used by the pipeline when the first
qmlglsink is added to the pipeline.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/982>
2021-05-11 06:40:38 +00:00
Jan Alexander Steffens (heftig)
0ff50d6723 udpsrc: Plug leaks of saddr in error cases
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/977>
2021-05-07 10:09:38 +00:00
Jan Alexander Steffens (heftig)
e425bcada5 udpsrc: Whitespace
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/977>
2021-05-07 10:09:38 +00:00
Jan Alexander Steffens (heftig)
fa1cc0a81f deinterlace: Plug a method subobject leak
Changing the method would leak the previous method.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/976>
2021-05-07 09:31:48 +00:00
Nicolas Dufresne
d9a0313aa0 vp9enc: Add color range support
When setting the colorspace, we now clear the range to reduced range,
the default, and then we also set the range so the VP9 encoder encodes
the right information in the bitstream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/975>
2021-05-06 16:00:47 -04:00
Nicolas Dufresne
91da1c3c08 vp9enc: Move colorspace configuration in VP9 enc
This is not supported by VP8 and was causing a warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/975>
2021-05-06 16:00:47 -04:00
Nicolas Dufresne
3e97236844 vpxdenc: Add a GstVideoCodecState to configure_encoder virtual
This will be needed to configure the VP9 specific colorimetry, which is
currently configured for VP8 casing warning.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/975>
2021-05-06 15:07:01 -04:00
Bastien Nocera
04fdfc4bf1 gtk: Remove coordinates double-translation
Remove our own translation in the mouse event capture code, as that
translation will be done through the navigation interface.

Tested by resizing the window created by:
gst-launch-1.0 -v videotestsrc ! navigationtest ! glupload ! glcolorconvert ! tee name=t  ! gtkglsink
and checking that the cursor follows the mouse as expected.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/974>
2021-05-06 01:18:18 +00:00
Bastien Nocera
9cd6d02cff gtk: Translate navigation events coordinates
If the application passed down some pointer coordinates, translate those
from display coordinates to stream coordinates, so things work as
expected even if the video is resized.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/974>
2021-05-06 01:18:18 +00:00
Bastien Nocera
604278a194 gtk: Export _display_size_to_stream_size()
Export _display_size_to_stream_size() so that GstNavigation implementors
can translate from display coordinates to stream coordinates before
pushing the events upstream to the DVD source, for example.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/974>
2021-05-06 01:18:18 +00:00
David Fernandez
056f8ce6ca matroska-mux: Change accepted caps width and height from [16, MAX] to [1, MAX]
There are cases where the video size might be less than 16x16.
This change allows the Matroska muxer to accept this cases.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/539>
2021-05-05 16:31:33 -04:00
François Laignel
39f0905a7e Use gst_element_request_pad_simple
Instead of the deprecated gst_element_get_request_pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/958>
2021-05-05 06:17:20 +00:00
Jan Schmidt
7c5f2185a9 qtmux: Make sure to write 64-bit STCO table when needed.
qtmux attempts to choose between writing a 32-bit stco chunk offset table
when it can, but switch to a 64-bit co64 table when file offsets go over
4GB.

This patch fixes a problem where the atom handling code was checking
mdat-relative offsets instead of the final file offset (computed by
adding the mdat position plus the mdat-relative offset) - leading to
problems where files with a size between 4GB and 4GB+offset-of-the-mdat
would write incorrect STCO tables with some samples having truncated
32-bit offsets.

Smaller files write STCO correctly, larger files would switch to
co64 and also output correctly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/970>
2021-04-30 08:12:47 +10:00
Hou Qi
5e932395a4 v4l2object: Add interlace-mode back to caps for camera
skip_try_fmt_probes is set to TRUE for v4l2src to skip interlace-mode and
colorimetry when probe caps. gst_v4l2_object_set_format_full() will add
colorimetry back to caps when iterating over the negotiated caps. There is
one case that v4l2src is first in preview state then starts recording.
v4l2src caps will change with an additional interlace-mode structure after
renegotiation, then v4l2src needs to reset. But this camera driver can't
orphan buffer pool, it causes require buffer failed as streaming is still
in active state.

To fix this, also need to add interlace-mode back to caps for camera to
avoid reset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/961>
2021-04-27 13:47:21 -04:00
Guillaume Desmottes
5fa3325335 rtpopuspay: set MARKER flag
Set MARKER flag on first buffer after DTX.

According to RFC 3551 section 4.1 the marker bit needs to be set on
"the first packet after a silence period during which packets have
not been transmitted contiguously".

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/967>
2021-04-26 15:25:56 +02:00
Guillaume Desmottes
41ba8c1b00 rtpopuspay: add DTX support
If enabled, the payloader won't transmit empty frames.

Can be tested using:
  opusenc dtx=true bitrate-type=vbr ! rtpopuspay dtx=true

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/967>
2021-04-26 15:25:56 +02:00
Doug Nazar
a0067316e7 taglib: Update createFrame() to non-deprecated version.
ID3v2::FrameFactory::createFrame() versions not taking a Header have
been deprecated since v1.5 (Jan 2008).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/965>
2021-04-26 08:48:58 +00:00
Havard Graff
d75c678479 rtpjitterbuffer: fix divide-by-zero
The estimated packet-duration can sometimes end up as zero, and dividing
by that is never a good idea...

The test reproduces the scenario, and the fix is easy.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/966>
2021-04-25 02:21:04 +02:00
Havard Graff
1368b4214b rtpjitterbuffer: clean up and improve missing packets handling
* Try to make variable and function names more clear.
* Add plenty of comments describing the logic step-by-step.
* Improve the logging around this, making the logs easier to read and
  understand when debugging these issues.

* Revise the logic of packets that are actually beyond saving in doing
  the following:
1. Do an optimistic estimation of which packets can still arrive.
2. Based on this, find which packets (and duration) are now hopelessly
   lost.
3. Issue an immediate lost-event for the hopelessly lost and then add
   lost/rtx timers for the ones we still hope to save, meaning that if
   they are to arrive, they will not be discarded.

* Revise the use of rtx-delay:
  Earlier the rtx-delay would vary, depending on the pts of the latest
  packet and the estimated pts of the packet it being issued a RTX for,
  but now that we aim to estimate the PTS of the missing packet accurately,
  the RTX delay should remain the same for all packets.
  Meaning: If the packet have a PTS of X, the delay in asked for a RTX
  for this packet is always a constant X + delay, not a variable one.

* Finally ensure that the chaotic "check-for-stall" tests uses timestamps
  that starts from 0 to make them easier to debug.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/952>
2021-04-24 13:53:58 +00:00
Guillaume Desmottes
309269a93b level: make properties thread-safe
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/962>
2021-04-23 15:14:44 +02:00
Guillaume Desmottes
f61bd6239a level: disable passthrough when audio-level-meta is enabled
Ensure we receive a writable buffer to add the meta.

Fix #878

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/962>
2021-04-23 11:41:36 +02:00
Sebastian Dröge
c0d68d03a6 matroskamux: Don't pass a non-GObject pointer to GST_DEBUG_OBJECT and similar
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/964>
2021-04-23 08:28:06 +03:00
Edward Hervey
4d3b8d1129 rtpjitterbuffer: Avoid generation of invalid timestamps
When updating timestamps and timer timeouts with a new offset, make sure that
the resulting value is valid (and not a negative (signed) value which ends up in
a massive (unsigned) value).

Fixes #571

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/960>
2021-04-22 15:23:13 +02:00
Philippe Normand
a2c16ec632 v4l2: Fix glib warning emitted when attribute query fails
The v4l2object is not a GstObject. Logging has to go through its dbg_obj
specially meant for this.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/959>
2021-04-21 18:48:38 +01:00
VaL Doroshchuk
36b794f9ff qmloverlay: Use first found GstGLVideoItem as widget property
GstGLVideoItem is required to render input video in the overlay's qml.
And currently qmlgloverlay requires to set this GstGLVideoItem to its widget property.

Instead of fetching GstGLVideoItem from the overlay's root object (root-item prop),
and setting it back as a widget (widget prop),
proposing to use found GstGLVideoItem in the current object hierarchy (passed in qml-scene) by default.

Also useful in Python, which solves the issue when casting gpointer <=> QQuickItem* is required.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/919>
2021-04-21 08:26:52 +00:00
Tim-Philipp Müller
c70b41b22b v4l2: fix debug category initialisation again
Would spew warnings on the rpi4 when calling into
gst_v4l2_object_get_codec_caps() from the probe_and_register()
function since the v4l2_debug category initialisation would
only be done later as part of the element/device provider
registration.

Also log things in the probe function to the v4l2 category
instead of the default category while we're at it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/956>
2021-04-20 06:35:01 +00:00
Doug Nazar
b705fb93be rtspsrc: Fix race saving seek event seqnum.
We need to save the seek seqnum before the flush stop event
since that will start the basesrc task which may send the segment
event before we're ready.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/954>
2021-04-20 06:03:22 +00:00
Marco Felsch
8e8dab7a4d qmlglsink: allow to set force-aspect-ratio property
Add the forceAspectRatio Q_PROPERTY to allow changing the aspect ratio
from QML code as well.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/937>
2021-04-19 17:46:41 +00:00
Tim-Philipp Müller
63c1e2ed60 v4l2src: fix spurious SOURCE_CHANGED error-level log messages
They're harmless, and some drivers at least return EINVAL
instead of ENOTTY for unsupported events (here: uvcvideo).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/955>
2021-04-19 11:29:44 +01:00
Doug Nazar
61d4dd0b9b rtpsbcpay: remove use of packed struct for payload
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/950>
2021-04-15 07:29:09 -04:00
Doug Nazar
850a6f5f6f dtmf: convert to bit accessors
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/949>
2021-04-14 11:13:45 -04:00
Nirbheek Chauhan
c071cbbe30 rtspsrc: Remove some dead code
stop is not used after this point, nor do we create a new segment
here since 84725d62b5

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/940>
2021-04-13 14:30:54 +00:00