Commit graph

657 commits

Author SHA1 Message Date
Brad Hards
ec679507f6 qtdemux: look up uncompressed component type
This fix handles the case where the order of components in the cmpd box
does not correspond to the order used for a specific track. That
is the case where the uncC component_index values are something
other than 0, 1, 2, 3.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8483>
2025-02-17 16:23:37 +00:00
Sebastian Dröge
f6cc65a6bc splitmuxsink: Be less strict about queueing negative durations
In case of temporary backwards timestamps durations can become negative. Instead
of erroring out, simply clip the durations and warn.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8390>
2025-02-17 09:36:00 +00:00
Tim-Philipp Müller
7c3a468056 qtdemux: add mappings for Hap video codec
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3596

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7717>
2025-02-15 21:25:05 +00:00
François Laignel
874a59bff2 rtpjitterbuffer: add RFC7273 active status to stats
Checking whether rtpjitterbuffer actually timestamps the buffers according to
the RFC7273 clock definition and rtpjitterbuffer configuration required looking
at the DEBUG logs.

This commit adds an entry in the rtpjitterbuffer stats to indicate if
conditions are met for RFC7273 to be active.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7829>
2025-02-14 01:12:23 +00:00
Brad Hards
49d8921232 qtdemux: fix version 1 profile handling, add diagnostics
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8456>
2025-02-14 00:03:30 +00:00
Brad Hards
c7367addb5 qtdemux: support uncompressed mono with component interleave
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8464>
2025-02-13 08:17:17 +00:00
Ognyan Tonchev
9faf555219 rtpmanager: skip RTPSources if last_rtime is not set yet
Fixes previous commit (which worked in GStreamer 1.22 but not in
1.24 and newer). Sorry for the noise, should have tested on
master before pusshing it :(

Fixes: #3918
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8455>
2025-02-12 19:56:35 +00:00
Carlos Bentzen
e2bd8809bf qtmux: add support for VVC/H.266 video
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8436>
2025-02-11 03:25:38 +00:00
Carlos Bentzen
8cfbdd7cf6 matroskamux: add support for VVC/H.266 video
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8441>
2025-02-10 22:49:35 +00:00
Carlos Bentzen
1be3d7f37b matroskademux: add support for VVC/H.266 video
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8441>
2025-02-10 22:49:35 +00:00
Carlos Bentzen
deaa9260f3 matroska: add V_MPEGI/ISO/VVC id
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8441>
2025-02-10 22:49:35 +00:00
Alexander Slobodeniuk
7ae94a4bd0 autodetect: cleanup no-op check for "constructed" implementation
It's always implemented by GObject.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8416>
2025-02-10 17:49:29 +00:00
Alexander Slobodeniuk
610a6f3aaf videoflip: fix chaining up GObject's constructed virtual method
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8416>
2025-02-10 17:49:29 +00:00
Carlos Bentzen
a5c6eea957 qtdemux: add support for VVC/H.266
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5088>
2025-02-10 09:20:22 +00:00
dukesook
54830e7c0a qtdemux: Demux Uncompressed MP4
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7985>
2025-02-08 10:15:06 +00:00
Philippe Normand
a39f465692 rtpsession: Fix heap-use-after-free of twcc_packets structure
This is a regression introduced by 90d99c7b52.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8427>
2025-02-07 12:52:06 +00:00
Robert Mader
12d2a4e2a1 matroskademux: Implement rotation tag support
Similar to qtdemux.

Tested against other Gst elements and MPV. Note that the later
apparently does not show correct results for flipped values.
In particular the Yaw value seems to get ignored by many clients.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8319>
2025-02-05 13:26:08 +01:00
Robert Mader
a7c2899990 matroskamux: Implement rotation tag support
Similar to qtmux, but for mkv and webm containers.

Tested against other Gst elements and MPV. Note that the later
apparently does not show correct results for flipped values.
In particular the Yaw value seems to get ignored by many clients.

Can be tested with:

```
gst-launch-1.0 \
videotestsrc num-buffers=90 ! \
taginject tags="image-orientation=rotate-270" ! \
capsfilter caps=video/x-raw,width=640,height=480,max-framerate=30/1 ! \
videoconvert ! \
queue ! \
vp8enc ! \
queue ! \
webmmux ! \
filesink location=./test.webm
```

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8319>
2025-02-05 12:03:26 +00:00
Robert Mader
b2702b6f10 matroska: Add projection IDs
These will allow us to support rotate methods with matroska v4 and
the corresponding webm.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8319>
2025-02-05 12:03:26 +00:00
Tomas Granath
fa9b630fc8 matroskademux: Mark streams as EOS when outside the requested segment
Ensure that streams with no (more) data are marked as EOS when
advancing past the requested segment. Without this change the
EOS would be postponed to the end of the file in that case.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8395>
2025-02-03 09:06:28 +00:00
Robert Mader
1fc6f0d349 qtmux: Implement rotation tag support
Mirroring the demux element and isomp4mux from gst-plugins-rs.

Tested against other Gst elements and MPV. Note that the later
apparently does not show correct results for flipped values.

Can be tested with:
```
gst-launch-1.0 \
videotestsrc num-buffers=90 ! \
taginject tags="image-orientation=rotate-90" ! \
capsfilter caps=video/x-raw,width=640,height=480,max-framerate=30/1 ! \
videoconvert ! \
queue ! \
openh264enc ! \
queue ! \
h264parse ! \
mp4mux ! \
filesink location=./test.mp4
```

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8371>
2025-01-29 16:24:21 +00:00
Alexander Slobodeniuk
6376849396 qtmux: fix critical warnings on negotiation error
This pipeline fails to negotiate on my PC:

gst-launch-1.0 v4l2src ! h264parse ! qtmux ! filesink location=t.mp4

When it happens some critical glib warnings are emitted:
-------------------------------
GStreamer-CRITICAL **: 15:09:03.485: gst_mini_object_copy: assertion 'mini_object != NULL' failed

GStreamer-CRITICAL **: 15:09:03.485: gst_mini_object_unref: assertion 'mini_object != NULL' failed

GStreamer-CRITICAL **: 15:09:03.485: gst_caps_get_structure: assertion 'GST_IS_CAPS (caps)' failed

GStreamer-CRITICAL **: 15:09:03.485: gst_structure_set_value: assertion 'structure != NULL' failed

GStreamer-CRITICAL **: 15:09:03.485: gst_mini_object_unref: assertion 'mini_object != NULL' failed
--------------------------------

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8374>
2025-01-29 10:46:25 +00:00
Brad Hards
154ea45111 taginject: typo fix in usage example
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8362>
2025-01-26 20:21:58 +00:00
Thibault Saunier
26e6109b44 matroskademux: Add support to seek with stop in push mode
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8340>
2025-01-24 15:30:53 +00:00
Mathieu Duponchelle
3ac589d308 scaletempo: expose alternative mode, fit-down
In fit-down mode only 1.0 rates are supported, and the element will fit
audio data in buffers to their advertised duration.

This is useful in speech synthesis cases, where elements such as
awspolly will generate audio data from text, and assign the duration of the
input text buffers to their output buffers

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8149>
2025-01-16 12:35:13 +00:00
Mathieu Duponchelle
3de86b2b97 docs: port plugins to explicit sources
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8273>
2025-01-13 19:17:13 +01:00
Edward Hervey
47b723c6e1 splitmuxsink: Fix GST_(S)TIME_{ARGS|FORMAT} usage
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
8bc17b58a2 good: Clearly specify fallthrough in switch/case
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
2a6c1bbb01 matroska: Reorder switch/case for parsing
Just makes it clearer

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
5d69f2bc36 qtmux: Fix GST_STIME_ARGS usage
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8229>
2025-01-13 12:51:45 +00:00
Edward Hervey
a0f50df7a0 splitmuxsink: Fix wrong usage of GstClockTime vs GstClockTimeDiff
This could potentially have caused issues (because of the rest of the code using
checks for signed invalid values on a unsigned value)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8286>
2025-01-13 08:08:01 +00:00
Edward Hervey
2e6b98ad89 splitmuxsrc: Add missing break
This would cause the reconfigure path to be called

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8286>
2025-01-13 08:08:00 +00:00
Edward Hervey
6d30b82054 splitmuxsrc: Ensure only a single stream-start event is pushed
Since we are simulating a single output, we want to ensure only a single
stream-start is pushed downstream. We do *not* want to send a (potentially) new
stream start event after flushing (like after seeks).

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4146

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8252>
2025-01-10 15:01:04 +00:00
Will Miller
05158769c3 rtpvp9pay: fix profile parsing
Incorrect parsing of these bits meant that we were incorrectly parsing
the VP9 uncompressed bitstream header for some profiles, as the header
is of variable length and format depending on the profile. Amongst
various unintended effects, this caused the width and height from the SS
to be incorrectly parsed and set in the caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8275>
2025-01-10 11:19:52 +00:00
Sebastian Dröge
06a0ab7b33 matroskamux: Consider audio buffers as keyframes when writing out simpleblocks
Otherwise mpv complains and considers the file broken.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4142

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8225>
2025-01-06 11:43:59 +00:00
Sebastian Dröge
32e79c1041 matroskamux: Fix audio-only stream conditions
The num_a_streams and related counters are used for pad numbers and don't give
the absolute number of streams in this run of the muxer.

Also, consider the output audio-only if there are more than 1 audio stream too.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4142

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8225>
2025-01-06 11:43:59 +00:00
Christian Meissl
422fca76ca qtdemux: fix accumulated base offset in segment seeks
analog to fix for matroska-demux
commit f3c126d07c

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8240>
2025-01-06 09:44:00 +00:00
Sebastian Dröge
0aeba9275c qtdemux: Add support for ISO/IEC 23003-5 raw PCM audio
And also support the ISO/IEC 14496-12 chnl channel layout box as required
by ISO/IEC 23003-5.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8171>
2025-01-03 10:11:31 +00:00
Jochen Henneberg
68cdeeb882 qtdemux: Undef helper macros after use
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8127>
2025-01-02 15:22:47 +00:00
Jochen Henneberg
d86f60ffdf qtdemux: Validate matrix before doing simplified multiply
The matrix multiplication makes some assumption about the element
values to simplify the math with fixpoint values. If this is allowed
for the given matrices is now checked first.

Then the debug output for matrix and a comment have been fixed.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8127>
2025-01-02 15:22:47 +00:00
Jochen Henneberg
5c005733ea qtdemux: Fixup for orientation matrix parsing
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8127>
2025-01-02 15:22:47 +00:00
Jochen Henneberg
c4d0f4bbd9 qtdemux: Use mvhd transform matrix and support for flipping
The mvhd matrix is now combined with the tkhd matrix. The combined
matrix is then checked if it matches one of the standard values for
GST_TAG_IMAGE_ORIENTATION.
This check now includes matrices with flipping.

Fixes #4064

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8127>
2025-01-02 15:22:47 +00:00
Albert Sjolund
90d99c7b52 rtpsession: send twcc struct in both directions
As there are signals around rtpsession in both directions,
send twcc data both upstream and downstream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7940>
2025-01-01 19:34:54 +00:00
Thibault Saunier
15e9573957 videoflip: Add support for Y444_16XX
Necessary code already existed, it was just a matter of advertising it.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8177>
2024-12-27 14:58:38 +00:00
Sebastian Dröge
10fc594847 splitmuxsrc: Post messages when a fragment is started
This allows the application to keep track which fragment is currently active.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8184>
2024-12-21 08:44:23 +00:00
Carlos Falgueras García
1dd4a6e832 rtph26xpay: Fix the default framerate
Use 0/1 instead of 0/0 as the default framerate for rtph26{4,5}pay.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8176>
2024-12-19 11:55:29 +00:00
Matthew Waters
c3cc8205b2 rtppassthroughpay: ensure buffer is writable before mapping writable
It is entirely possible that the incoming buffer into _chain() is not writable
and will result in a critical when trying to map().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8131>
2024-12-12 12:06:13 +11:00
Philippe Normand
eb07c4e6b3 rtpsession: Fix twcc stats structure leaks
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8073>
2024-12-09 10:02:23 +00:00
Sebastian Dröge
818f64a641 splitmuxsrc: Calculate the end offset of a fragment once known
If a new fragment is added with a valid duration but no offset then the start
offset is set later based on the end offset of the previous fragment. At that
point the end offset of this fragment can also be calculated and not doing so
would give the next fragment the same start offset.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8069>
2024-12-05 23:28:24 +00:00
Sebastian Dröge
f9845d0266 flacparse: Improve header validity checks
Allow sample rate, number of channels and bps to change and in that case update
the caps accordingly.

Also move (non-fatal) validity checks and storing of the header values outside
the actual parsing once we actually know that a valid frame is available.

And also don't warn on the last frame with fixed block size blocking strategy
that the block size has changed: the last frame is allowed to be smaller.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3281

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8075>
2024-12-05 14:14:51 +00:00