Commit graph

7912 commits

Author SHA1 Message Date
Nicolas Dufresne
b884bcb93e vp9parse: Manually fixate codec-alpha field
This is a newly introduced field, and we interpret it as false when missing in
the caps. Otherwise, a simple capsfilter will just add the missing field and
keep going, despite the upstream caps being a superset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
2021-05-11 16:06:56 -04:00
Nicolas Dufresne
e08c0803e1 doc: codecalpha: Add plugin documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
2021-05-11 16:06:56 -04:00
Nicolas Dufresne
ba4053a2b9 alphadecodebin: Add wrappers to decode VP8/VP9 alpha
This includes base class with wrappers bin that will create a static
pipeline capable of handling the VP8/VP9 alpha channel decoding
using two instances of vp8/vp9dec element each.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
2021-05-11 16:06:56 -04:00
Nicolas Dufresne
2cd927435c codecalpha: Implement alphacombine element
This element will merge video buffers in order to use the alpha stream
luma plane as the alpha of the video stream. The implementation is zero-copy
and currently only support merging I420 stream with an I420, NV12 or GRAY8
alpha stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
2021-05-11 16:06:56 -04:00
Nicolas Dufresne
4dbf61d1ef alphacodecdemux: Implement meta demuxing
Produce two streams from a buffer that has GstVideoCodecAlphaMeta
attached.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
2021-05-11 16:06:56 -04:00
Nicolas Dufresne
f3114d4d7e Introduce CODEC Alpha plugin
This plugin contains a set of utility elements allowing to extract,
decode and combine CODEC (typically VP8/VP9) alpha stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2199>
2021-05-11 16:06:56 -04:00
Jan Alexander Steffens (heftig)
3d02559002 rtpsrc: Plug leak of rtcp_send_addr
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2226>
2021-05-07 12:34:20 +00:00
Jan Alexander Steffens (heftig)
88d7141ba4 rtpsink: Return proper pad from _request_new_pad
Bizarrely, it returned a pad from the child rtpbin. I noticed because
our application leaked the implicitly created ghost pad. Make an
explicit ghost pad so this works properly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2227>
2021-05-07 12:07:05 +00:00
Jan Alexander Steffens (heftig)
ddac6ab91d rist: Plug leak of rtcp_send_addr
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2225>
2021-05-07 11:06:53 +00:00
Nirbheek Chauhan
4c4f031207 h265parse: don't invalidate the last PPS when parsing a new SPS
This is a port of https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2019
to h265parse.

When a SPS is received then any previous PPS remains valid. So don't clear
the PPS flag from the parser state.

This is important because there are encoders that don't generated a PPS after
every SPS.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2217>
2021-05-05 10:02:28 +00:00
François Laignel
ad3d7d34cc Use gst_element_request_pad_simple...
Instead of the deprecated gst_element_get_request_pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2180>
2021-05-05 06:17:14 +00:00
Stéphane Cerveau
eb96f50c45 mxf: check EOS cond with any segment's flag
The previous test was preventing the pad to be in EOS
when the segment position was greater than segment stop.
It ended up consuming all the data before getting in EOS.

Regarding GST_SEEK_FLAG_SEGMENT it seems to be
correctly handled later in the method.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2173>
2021-05-04 19:11:27 +00:00
Stéphane Cerveau
c32f455b7b mxfdemux: fix keyframe detection in index
An index entry should be considered as a keyframe
if the flags allow a random access only.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2173>
2021-05-04 19:11:27 +00:00
Olivier Crête
4b47b96ae1 jpegparse: Don't generate timestamp for 0/1 framerates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2194>
2021-04-23 17:54:30 +00:00
Thibault Saunier
788dfdbfa6 rtpsrc: Fix wrong/NULL URI handling
We can reset the URI to NULL and this fix a deadlock in that case or
when the URI was invalid.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2132>
2021-04-23 01:23:03 +00:00
Mathieu Duponchelle
0fb7392131 tsdemux: fix truncated output segment when seeking with a stop
In disabling the stop adjustment for negative rates in
03031037fa , two instructions
were inverted resulting in the stop always being adjusted by
0

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2182>
2021-04-21 21:40:26 +00:00
Jan Schmidt
bd9f675318 switchbin: When collecting srcpad caps, don't intersect with path caps.
The path caps describe the input caps that will select each path, don't
intersect those with the srcpad caps, which could be completely
different. Instead, when querying allowed caps for the srcpad, just
construct the union of all possible output caps from all path srcpads.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2018>
2021-04-12 14:27:00 +00:00
Jan Schmidt
1f865246c1 switchbin: Don't report sink pad caps for src pad queries.
When handling a caps query on the src pad, don't return the union
of input caps. Even when not active, a path element can be queried
for srcpad template caps, or for dropping paths the allowed downstream
caps is anything - as data will be dropped anyway.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2018>
2021-04-12 14:27:00 +00:00
Stéphane Cerveau
891be51105 gst-plugins: allow per feature registration
Split plugin into features including
dynamic types which can be indiviually
registered during a static build.

More details here:

https://gitlab.freedesktop.org/gstreamer/gst-build/-/merge_requests/199
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/661

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2110>
2021-04-11 16:16:55 +00:00
Helmut Januschka
7f60138ef6 allow NetStream.Play.PublishNotify Message
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2154>
2021-04-10 20:34:26 +02:00
Philippe Normand
933ebba435 debugutils: Add fakeaudiosink element
This element can be useful for CI purposes on machines not running any system
audio daemon. The element implements the GstStreamVolume interface.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2125>
2021-04-09 08:13:12 +00:00
Haihua Hu
e69d0151d2 jpeg2000parse: fix critical log when play one gray colorspace video
Need guess color space based on number of components when cannot
got it from sink caps

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1955>
2021-04-08 01:06:12 +00:00
Doug Nazar
81d4ccdc44 rtmp2: Use correct size of write macro for param2.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2146>
2021-04-07 07:48:57 -04:00
Jan Schmidt
3a3c80e7be mpegtsmux: Respect the start-time-selection property.
Use the start time provided by the aggregator base class for output
times.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2105>
2021-03-31 13:34:40 +00:00
Sebastian Dröge
5bcfb2dda0 avwait: Don't reset time tracking when receiving the same segment again
This causes avwait to go back into "dropping" mode until audio and video
are synced again, which is unnecessary when the segment didn't actually
change.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2121>
2021-03-30 08:38:03 +00:00
Jan Alexander Steffens (heftig)
0b916e7cec rtmp2/connection: Separate inner from outer cancelling
The connection cancels itself when it is closed. To avoid the
cancellable passed to `gst_rtmp_connection_new` from being unexpectedly
cancelled, separate inner from outer cancellation by holding two
cancellables.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1558

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2111>
2021-03-28 11:07:33 +00:00
Stéphane Cerveau
176a00985a mpegpsdemux: fix accurate seek
In an accurate seek, the segment start should be
the same as the one requested in the seek.
The start should be kept as the one from the
segment if its inferior.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2048>
2021-03-22 12:54:14 +01:00
Stéphane Cerveau
497e88ae88 mpegpsdemux: Keep seqnum events
Keep the same seqnum of the new segment events for each
of the streams.
Keep the segment to send the EOS event.
Keep the seek seqnum for segment and flush event.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2048>
2021-03-22 12:54:14 +01:00
Stéphane Cerveau
96467f581e mpegpsdemux: avoid early EOS
In a case of a scr different from 0, after a seek,
the src_segment.stop has been updated with the duration
not including the base_time (scr). The segment position
needs to be tested upon segment.stop + base_time (scr)
to check for an EOS.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2048>
2021-03-22 12:54:14 +01:00
Matthew Waters
640a65bf96 gst: don't use volatile to mean atomic
volatile is not sufficient to provide atomic guarantees and real atomics
should be used instead.  GCC 11 has started warning about using volatile
with atomic operations.

https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719

Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2098>
2021-03-22 14:34:36 +11:00
Jan Schmidt
18a095ca63 mpegtsmux: Add PMT_%d support to prog-map.
Support a PMT_%d field in the prog-map, that's optionally used
to set the PMT for each program in the mux.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2039>
2021-03-18 15:07:53 +00:00
Jan Schmidt
5e4a11bf36 mpegtsmux: Don't write PCR until PAT/PMT are output.
Make sure streams start cleanly with a PAT/PMT and defer the first PCR
output until after that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2073>
2021-03-18 13:57:27 +00:00
Mathieu Duponchelle
b7e9e606a9 tsmux: finalize PCR timing for complete accuracy
In order to always insert a PCR packet right on time, we need to
check whether one is needed when outputting any packet, not only
a packet for the PCR stream. Most of the PCR packets will remain
data-carrying packets, but as a last resort we may insert stuffing
packets on the PCR stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2073>
2021-03-18 13:57:27 +00:00
Jan Schmidt
3201575d2a mpegtsmux: Improve PCR/SI scheduling.
Change PCR / SI scheduling so that instead of checking if
the current PCR is larger than the next target time, instead
check if the PCR of the next packet would be too late, so PCR
and SI are always scheduled earlier than the target, not later.

There are still cases where PCR can be written too late though,
because we don't check before each output packet.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2073>
2021-03-18 13:57:27 +00:00
Jan Schmidt
49c61338d6 tsmuxstream: Fix comment typo
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2073>
2021-03-18 13:57:27 +00:00
Stéphane Cerveau
b0a9ba4ccf mpegvideoparse: do not clip the frame
If the current buffer is delta unit such as P or B
frame, the buffer should not be clipped and need to
let the decoder handle the segment boundary situation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2070>
2021-03-11 15:01:38 +01:00
Sebastian Dröge
80c1722cba avwait: Don't post messages with the mutex locked
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2063>
2021-03-09 13:01:45 +02:00
Vivia Nikolaidou
cde4e74eca interlace: Discard stored_frame on EOS and PAUSED_TO_READY
Would otherwise leak it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2062>
2021-03-08 21:02:01 +02:00
Vivia Nikolaidou
cb55d30b3c interlace: Specify interlace-modes in the sink pad template
Especially specify the field-order in the interleaved mode. Otherwise it
might cause the negotiation to fail, because
GST_PAD_SET_ACCEPT_INTERSECT is not set on the sinkpad, and the
field-order is missing in the sink template but can be present in the
outside caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2062>
2021-03-08 21:01:50 +02:00
Tim-Philipp Müller
766bd655fc interlace: add more formats, esp 10-bit, 12-bit and 16-bit ones
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2054>
2021-03-03 18:34:26 +00:00
Jan Alexander Steffens (heftig)
b9cc83ccf8 mpegtsparse: Fix switched DTS/PTS when set-timestamps=false
Fixes 30ee21eae3.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2047>
2021-03-01 16:29:58 +01:00
Tim-Philipp Müller
438449db69 sdpsrc: fix double free if sdp is provided as string via the property
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1532

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2025>
2021-02-19 00:05:41 +00:00
Michael Olbrich
5a03862fca h264parse: don't invalidate the last PPS when parsing a new SPS
When a SPS is received then any previous PPS remains valid. So don't clear
the PPS flag from the parser state.

This is important because there are encoders that don't generated a PPS after
every SPS.

Closes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/571

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2019>
2021-02-17 16:22:18 +00:00
Vivia Nikolaidou
66bfd0e8ae h265parse: Detect height change on field-based interlaced files
The first time update_src_caps is called, there's no frame parsed yet,
therefore we don't know whether the file has alternate-field interlacing
mode. If we run it again after we have a frame, it might be that now we
have the SEI pic_struct parsed, and therefore we know that it's
field-based interlaced, and therefore the height must be multiplied by
two. Earlier on this was not detected as a change.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2022>
2021-02-17 13:46:41 +00:00
Vivia Nikolaidou
21347e13f5 h265parse: Fix FPS/duration for interlaced files
There can be h265 files with frame-based, not field-based, interlacing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2020>
2021-02-17 13:46:03 +02:00
Mathieu Duponchelle
8ae56d60a3 h264parse: fix timestamping of interlaced fields in output
Instead of relying on GstBaseParse default behaviour of computing
the duration of a parsed buffer based on the framerate passed
to gst_base_parse_set_framerate(), we instead compute the duration
ourselves, as we have more information available.

In particular, this means we now output buffers with a duration
that matches that of raw interlaced buffers when each field is
output in a separate buffer.

This fixes DTS interpolation performed by GstBaseParse, as the
previous behaviour of outputting each field with the duration of
a full frame was messing up the base class calculations.

When not enough information is available, h264parse simply falls
back to calculating the duration based on the framerate and hope
for the best as was the case previously.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1973>
2021-02-16 17:15:27 +01:00
Vivia Nikolaidou
ae66a5772c h265parse: Support for alternate-field interlacing
Also don't set interlacing information on the caps, see #1313

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1996>
2021-02-03 16:09:45 +02:00
Jan Alexander Steffens (heftig)
0f084d4624 h264/h265parse: Add VideoTimeCodeMeta to the outgoing buffer
The parsers attempted to add the meta to the incoming buffer, which
might not be the outgoing buffer or may not have been writable yet.

To fix this, call `gst_buffer_make_writable` earlier and make sure to
use the `parse_buffer` to add the meta.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1521

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2002>
2021-02-02 18:44:49 +01:00
He Junyan
db134d27a0 av1parse: set the default alignment for input and output.
1. Set the default output alignment to frame, rather than current
   alignment of obu. This make it the same behaviour as h264/h265
   parse, which default align to AU.
2. Set the default input alignment to byte. It can handle the "not
   enough data" error while the OBU alignment can not. Also make it
   conform to the comments.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1979>
2021-01-26 12:22:31 +00:00
He Junyan
5abf4ad4dd av1parse: Reset the annex_b when meet TU inside a buffer.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1979>
2021-01-26 12:22:31 +00:00