Commit graph

103 commits

Author SHA1 Message Date
Carlos Rafael Giani
671c89c392 mpg123: Add gapless playback support
Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1028>
2022-03-14 10:32:15 +02:00
Carlos Rafael Giani
0431a0845c mpegaudioparse: Support gapless playback
Gapless playback is handled by adjusting buffer timestamps & durations
and by adding GstAudioClippingMeta.

Support for "Frankenstein" streams (= poorly stitched together streams)
is also added, so that gapless playback support doesn't prevent those
from being properly played.

Co-authored-by: Sebastian Dröge <sebastian@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1028>
2022-03-14 10:32:15 +02:00
Jan Alexander Steffens (heftig)
2db283499e deinterlace: scalerbob: Reduce latency to 0
We only need the current field, just like `linear`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1926>
2022-03-12 22:48:39 +00:00
Vivia Nikolaidou
8c648384f2 yadif: Fix CHECK macro for YUY2 format
Used to make comb artifacts for videotestsrc pattern=ball for YUY2
format only (not AYUV).

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1938>
2022-03-12 17:18:47 +00:00
Sangchul Lee
67df5815a9 rtpvp8depay: Fix crash when making 'GstRTPPacketLost' custom event
This patch fixes a seg.fault in gst_structure_new() with warnings as below.

GLib-GObject-WARNING **:
 ../gobject/gtype.c:4330: type id '0' is invalid
GLib-GObject-WARNING **:
 can't peek value table for type '<invalid>' which is not currently referenced

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1918>
2022-03-10 19:37:49 +00:00
Tomasz Andrzejak
e74435008f rtpbin: allow FEC elements with Always pads
This patch enable picking up FEC decoder or enocder that have
static repair packets pad.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1860>
2022-03-10 08:33:27 +00:00
Edward Hervey
568b918971 qtdemux: Propagate stick events downstream when creating pads
If upstream provided a stream collection event before any pads were created,
make sure it's propagated downstream when pads are created.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1891>
2022-03-09 16:09:31 +00:00
Havard Graff
a2c25ccd09 rtprtxsend: if no rtx is present, don't expose a rtx-ssrc in caps
The point here is that rtpsession will create a new rtpsource when
the field "rtx-ssrc" is present, and when not doing rtx, that means
a random ssrc will create a new rtpsource that will be included in RTCP
messages for the current session.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1882>
2022-03-09 15:30:37 +00:00
Havard Graff
2a8fa45ba8 rtprtxsend: don't process or warn if no map is set
This makes it more gentle when doing "pass-through"

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1879>
2022-03-09 12:01:22 +05:30
Mikhail Fludkov
815d279f2e rtprtxreceive: fix crash when RTX payload has zero length
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1875>
2022-03-08 09:07:41 +00:00
Havard Graff
86c7231dae rtprtxreceive: allow passthrough and non-rtp buffers
To avoid mapping rtp buffers when RTX is not in use, and to not
do a full error on receiving a non-rtp buffer, since you have no control
of what a rouge sender might send you.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1874>
2022-03-07 23:43:49 +00:00
Havard Graff
a475c93346 rtprtx: don't access type-system per buffer
When doing only a single stream of audio/video this hardly matters,
but when doing many at the same time, the fact that you have to get
a hold of the glib global type-system lock every time you process a buffer,
means that there is a limit to how many streams you can process in
parallel.

Luckily the fix is very simple, by doing a cast rather than a full
type-check.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1873>
2022-03-07 22:01:03 +00:00
Hou Qi
b11084f729 flvmux: Add protection when unref GstFlvMuxPad
This is to avoid gst_object_unref: assertion 'object != NULL' failed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1843>
2022-03-07 13:03:16 +00:00
Nicolas Dufresne
0f15580853 matroska: Fix AV1 alignment to TU
Matroska stores AV1 in temporal unit, so that all OBU sharing the same
timestamp are put together. This was previously just assumed, which isn't
safe now that we have more alignments.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1837>
2022-03-04 21:58:15 +00:00
Nicolas Dufresne
f6c070fbff isomp4: Fix AV1 default alignment
ISOMP4 store TU (temporal units) worth of AV1. Expose this in the
caps to reduce overhead in the parser, and in the muxer to avoid
storing frames split in the wrong way.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1837>
2022-03-04 21:58:15 +00:00
Tristan Matthews
9d0d001d19 matroskamux: allow width+height caps changes for VP8/9
For VP8 and VP9, width+height changes are signalled inband.

Refs https://github.com/Kurento/bugtracker/issues/535 and
https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1047/diffs?commit

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1657>
2022-03-04 14:17:20 -05:00
Tristan Matthews
c6ba57eb8e matroskamux: allow width + height changes for avc3|hev1
For avc3 and hev1, the intent was to allow more flexibility for caps changes
(see https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/1047/diffs?commit_id=9bd8d608d5bae27ec5ff09e733f76ca32b17420c)
however width and resolution were previously omitted.

avc3 and hev1 specifically support changing stream-parameters on the fly, whereas avc1/hvc1 disallow in-band SPS.

This commit allows for changes to width and height for these which is in line with matroskamux's behaviour prior to 1.14.0.

Practically speaking, one use case where this is commonly seen is when capturing a WebRTC stream, as the browser will adapt the resolution live.

Suggested-by: Mathieu Duponchelle "<mathieu@centricular.com>"
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1657>
2022-03-04 14:17:20 -05:00
Jan Alexander Steffens (heftig)
ce503d0645 deinterlace: Prevent race between _set_method and latency query
It's possible that the method is being manipulated while downstream
queries our latency, leading to crashes.

Prevent that from happening.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1854>
2022-03-04 16:14:46 +00:00
Sebastian Dröge
9f798776e5 matroska-mux: Handle pixel-aspect-ratio caps field correctly when checking caps equality
Not having this field is equivalent with it being 1/1 so consider
it like that. The generic caps functions are not aware of these
semantics and would consider the caps different, causing a negotiation
failure when caps are changing from caps with to caps without or the
other way around.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1826>
2022-03-02 10:27:47 +00:00
Sebastian Dröge
1b851ae23f matroska-mux: Handle multiview-mode/flags caps fields correctly when checking caps equality
Not having these fields is equivalent with them being mono/0 so consider
them like that. The generic caps functions are not aware of these
semantics and would consider the caps different, causing a negotiation
failure when caps are changing from caps with to caps without or the
other way around.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1826>
2022-03-02 10:27:47 +00:00
Jan Schmidt
cebf769725 matroska-mux: If a stream has a TITLE tag, use it for the name.
If a title tag is pushed to a pad, store it as the Track name.
This means that players will use it as the human readable
description of the track, instead of something generic like 'Video'
or 'Subtitle'

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1798>
2022-03-01 13:17:40 +00:00
Jan Schmidt
7efdc9c7f5 matroskademux: Don't parse Tracks element twice
If the tracks element was parsed from the SeekEntry, don't
parse it a second time and recreate tracks, as this
loses any tags that were read using the seek table.

If a genuinely new Tracks element is found, do read that
as it is needed for MSE support.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1798>
2022-03-01 13:17:40 +00:00
Vivia Nikolaidou
b699feefee yadif.asm: Fix improper usage of LOAD macro
LOAD macro relies in m7 being zero for interleaving purposes. Using LOAD
on the m7 register makes it interleave with its new content instead of
with 0.

The effect of this bug was bobbing on some static lines that appeared
over fast-moving content.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1816>
2022-03-01 07:22:10 +00:00
Vivia Nikolaidou
d499342f0d yadif.asm: Typo fixes in comments
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1816>
2022-03-01 07:22:10 +00:00
Vivia Nikolaidou
087ca88213 yadif: Fix bug in C implementation of CHECK
It was different compared to the corresponding part in both ffmpeg and
the asm implementation. Fixing this makes videotestsrc pattern=spokes
not jump at all when not using the asm optimisations.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1816>
2022-03-01 07:22:10 +00:00
Sebastian Dröge
b0afaffc5d rtp: In payloaders map the RTP marker flag to the corresponding buffer flag
This allows downstream of a payloader to know the RTP header's marker
flag without first having to map the buffer and parse the RTP header.

Especially inside RTP header extension implementations this can be
useful to decide which packet corresponds to e.g. the last packet of a
video frame.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1776>
2022-02-28 10:13:11 +00:00
Sanchayan Maity
cc3419daf6 rtp: ldac: Set frame count information in payload
The RTP payload seems to be required as it carries the frame count
information. Also, gst_rtp_base_payload_allocate_output_buffer had
the second argument incorrect.

Strangely some devices like Shanling MP4 and Sony XM3 would still
work without this while some like the Sony XM4 do not.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1797>
2022-02-26 21:09:57 +05:30
Xavier Claessens
3d8372cc50 devenv: Add some missing GStreamer specific env variables
This should make "meson devenv" closer to what "gst-env.py" sets.

- GST_VALIDATE_SCENARIOS_PATH
- GST_VALIDATE_APPS_DIR
- GST_OMX_CONFIG_DIR
- GST_ENCODING_TARGET_PATH
- GST_PRESET_PATH
- GST_PLUGIN_SCANNER
- GST_PTP_HELPER
- _GI_OVERRIDES_PATH

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1768>
2022-02-25 20:35:26 +00:00
Jan Alexander Steffens (heftig)
d6ec88c775 deinterlace: greedyh: Stop adding 2 to cur_field_idx
Just a simplification.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1790>
2022-02-25 12:06:56 +00:00
Jan Alexander Steffens (heftig)
dc1ae0aaa0 deinterlace: greedyh: Use _plane in _packed, fix planar formats
This greatly reduces code duplication. It also exposed the cause for
planar formats not being properly deinterlaced:

The planar path was missing the initial offset adjustment that the
packed path did to `L2` and `L2P` in the case of an even field, which
caused it to select the wrong weave lines every other field.

Add those offsets in `_plane`.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1047
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1790>
2022-02-25 12:06:55 +00:00
Jan Alexander Steffens (heftig)
625cbcf70a deinterlace: greedyh: Rename _planar_plane to _plane
As well as `i` to `plane`.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1790>
2022-02-25 12:06:55 +00:00
Jan Alexander Steffens (heftig)
7e16955e4d deinterlace: greedyh: Move code from _planar into _planar_plane
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1790>
2022-02-25 12:06:55 +00:00
Jan Alexander Steffens (heftig)
19ca706fe8 deinterlace: greedyh: Move _planar_plane upwards
In preparation of refactoring. No functional change.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1790>
2022-02-25 12:06:55 +00:00
Guillaume Desmottes
8bbdd9addb rtpsource: fix rtp_source_get_nack_deadlines doc
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1775>
2022-02-22 09:40:35 +00:00
Matthew Waters
b0f72ed788 ulpfecenc: slightly safer dispose impl
Technically dispose can be called more than once (even if gstelement is
not actually set up to do that) so need to protect against that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1761>
2022-02-21 09:43:33 +00:00
Matthew Waters
629b427a13 ulpfecenc: fix unmatched free() call
One must always match a g_slice_new with a g_slice_free and a g_new with
a g_free.  This was not the case for the internal ctx struct.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1761>
2022-02-21 09:43:33 +00:00
Matthew Waters
acc9024039 rtpulpfecenc: add some debug logging
Like, what configuration we are using or whether a fec packet is
generated.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1761>
2022-02-21 09:43:33 +00:00
Nirbheek Chauhan
4e22ef5bd2 matroska-demux: Emit a warning when no codec data found
It is bad if an mkv file does not have codec data for the ProRes
variant, so we should emit a warning. ffmpeg does the same thing.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1739>
2022-02-21 08:49:28 +00:00
Sebastian Wick
e61e069189 matroska: default prores fourcc apcn
If there is no codec private data for prores it should default to Apple
ProRes 422 Standard Definition (apcn). Can be tested with
strobe_scientist.mkv from
https://developers.google.com/media/vp9/hdr-encoding

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1734>
2022-02-18 08:38:31 +00:00
Seungha Yang
53ed876002 qtdemux: Do not send unnecessary GAP events
Each stream may have its own segment timeline
(i.g., different segment.start or segment.base)
depending on edit-list and composition-to-decode atom.

Make sure whether time position of a stream has been actually
far behind than that of current target stream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1352>
2022-02-17 19:39:53 +00:00
Sebastian Dröge
8bda2ef474 qtmux: Don't post an error message if pushing a sample failed with FLUSHING
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1711>
2022-02-15 13:43:41 +02:00
Robert Rosengren
265878c4ba rtpbin: Safer ts-offset-smoothing-factor calculation
Protect the ts-offset-smoothing-factor calculation from overflow. Output
warning and fallback to ts-offset if it is detected.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1409>
2022-02-08 11:11:35 +00:00
Robert Rosengren
31dd9226ce rtpbin: add ts-offset-smoothing-factor property
Add property to set the TS offset smoothing factor and set default value
to not use it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1409>
2022-02-08 11:11:35 +00:00
Danny Smith
bc964141c8 rtpbin: applied smoothing to jittery sender time-stamps
Applying a moving average filter to the timestamp offsets
for smoothing jittery and preventing aggressive skew handling.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1409>
2022-02-08 11:11:34 +00:00
Danny Smith
d5e257afd1 rtpbin: added option for setting min_ts_offset in ntp-sync mode
Constantly updating the ts_offset results in audiable glitches
when streaming audio using ntp-sync=true. By requiring a minimum
offset before updating ts_offset this can be mitigated. Added a
parameter which can be used to set min_ts_offset in ntp-sync mode.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1409>
2022-02-08 11:11:34 +00:00
Stéphane Cerveau
d191180061 autodetect: fix debug init category
Since the split of elements, the debug category
was default for autodetect.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1590>
2022-01-28 10:35:35 +00:00
Nirbheek Chauhan
980925a6a3 rtspsrc: Fix critical while serializing timeout element message
The "cause" field wasn't registered as a GEnumValue, so do that.

Fixes this critical in gst_structure_to_string():

`gst_value_serialize: assertion 'G_IS_VALUE (value)' failed`

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1573>
2022-01-26 11:07:07 +00:00
Sebastian Dröge
241a26631d splitmuxsink: Warn when calculating the next fragment time in timecode mode fails
But only if timecode mode is enabled as it will fail all the time
otherwise.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1557>
2022-01-25 12:08:20 +00:00
Aleksandar Topic
002c5ae7ef imagefreeze: Fix example launch line format issue
The currently shown example launch line will not run, because it
cannot handle png images.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1547>
2022-01-20 18:12:39 +00:00
Heinrich Kruger
6dd15acf2d rtp-hdrext-colorspace: Fix color range encoding
The color space RTP header extension encodes color range as specified in
https://www.webmproject.org/docs/container/#Range. In other words:
0: Unspecified,
1: Broadcast Range,
2: Full range,
3: Defined by matrix coefficients and transfer characteristic.

This does not match the values of GstVideoColorRange, so it is not
correct to just write the colorimetry.range value to the header
extension.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1482>
2021-12-30 16:31:33 +00:00