724 Commits

Author SHA1 Message Date
Sebastian Dröge
98d8bb9a12 qtdemux: Parse codec data for QDM2/QDMC correctly
First find the wave box then include its whole content instead of just including
everything from a random offset onwards.

Also actually do that for QDMC instead of leaving commented code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
cd6d2f16a6 qtdemux: Use already parsed damr box for AMR NB/WB streams
Instead of parsing it again and possibly getting the offset for reading
it wrong.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
18db5538a0 qtdemux: Don't parse audio sample entry a second time in mp4a fallback case
These values were all passed a few hundred lines above already and can directly
be re-used here. The offset for the sample rate was also wrong.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
d98df47e53 qtdemux: Add qtdemux_tree_get_child_by_index_full() helper function
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
2b18846e39 qtdemux: Fix endianness/alignment problems with parsing omwa sample description entries
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
f575fe763c qtdemux: Handle stsd entry offset correctly for audio in qtdemux_parse_node()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
ae4d505fe0 qtdemux: Pass stsd entry node to caps creation functions
Also fix lpcm to only read its additional fields from sound sample description v2.
Previously it would read random data if a different stsd entry was used.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
3ecb07c674 qtdemux: Don't parse invalid data from ISOBMFF AudioSampleEntryV1
The additional fields only exist in sound sample description v1, which
is only defined for MOV.

ISOBMFF has AudioSampleEntryV1 but it has the exact same layout as
AudioSampleEntry.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
fec61cc546 qtdemux: Don't retrieve video stsd entry multiple times
And remove various duplicated checks.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
af5cce9968 qtdemux: Parse uncompressed video uncC / cmpd boxes from already parsed stsd entry
Also simplifies code and error checking considerably.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
a6e58f7331 qtdemux: Don't retrieve enca/encv boxes a second time, wrongly
They need to be retrieved by index and they were already correctly retrieved
just above so let's just use that.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
bb50741b73 qtdemux: Use already parsed stsd entries instead of parsing them again
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
cf2b1909ec qtdemux: Fix typo in debug message
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8929>
2025-05-17 07:59:46 +00:00
Sebastian Dröge
faa912a31d wavparse: Error out correctly if no data tag is found until EOS in pull mode
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8956>
2025-05-15 10:24:37 +00:00
Sebastian Dröge
ba8fd35e72 wavparse: Ignore EOS when parsing the headers
The file might be truncated or contain < 8 bytes of remaining data after the
last chunk.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8956>
2025-05-15 10:24:37 +00:00
Doug Nazar
a8e11cec9a spectrum: Switch to GST_AUDIO_NE()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8984>
2025-05-14 14:45:55 -04:00
Doug Nazar
ebaf87cd17 law: Switch to GST_AUDIO_NE()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8984>
2025-05-14 14:45:55 -04:00
Doug Nazar
0c0b4ad6d0 gstrtspsrc: Free various props before being set
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8978>
2025-05-13 19:44:21 -04:00
Alexander Slobodeniuk
d437e92049 properties: add G_PARAM_STATIC_STRINGS where missing
"Hold on, I know you need to generate the registry, but let me just
create copies of all those strings first", Framework whispered

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8915>
2025-05-10 12:09:38 +00:00
Olivier Crête
14f833fdcf rtph264pay: Reject stream-format=avc without codec_data
Without the codec_data, it's impossible to know the size of the field
for the number of NALu in a buffer. And since nal_length_size is unkown
the stream can't be parsed and payloaded and we risk an infinite loop.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8954>
2025-05-10 10:23:30 +00:00
Sebastian Dröge
fff260f1aa qtdemux: Don't configure any channel-mask in fallback case with 1 channel
For mono we don't set any channel mask. Setting 0 would mean an unpositioned
layout with a single channel.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8928>
2025-05-06 13:20:29 +00:00
Sebastian Dröge
7f8b27837c qtdemux: Add channel layouts to three more raw audio fourccs
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8928>
2025-05-06 13:20:29 +00:00
Sebastian Dröge
737f653e7c qtdemux: Parse chan box
This is another variant of providing channel positions.

Also if neither chan nor chnl boxes are found, configure a default channel
layout for raw audio tracks.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8928>
2025-05-06 13:20:29 +00:00
Sebastian Dröge
5c16c8f0c1 qtdemux: Check length of JPEG2000 colr box before parsing it
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8930>
2025-05-06 11:09:55 +00:00
Sebastian Dröge
f18123ea15 qtdemux: Remove obsolete TODO comment
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8930>
2025-05-06 11:09:55 +00:00
Sebastian Dröge
b461115699 interleave: Don't hold object lock while querying caps downstream
This can easily lead to deadlocks.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8933>
2025-05-06 09:44:03 +00:00
Víctor Manuel Jáquez Leal
7a14b9020c y4m: support more color formats
These are unofficial yuv4mpegpipe formats, but used for 10bit streams.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:47 +00:00
Víctor Manuel Jáquez Leal
1b023dee2e y4m: add color mappings
Now the chroma subsampling tag will include the chroma site. Tests
where updated accordingly.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:47 +00:00
Víctor Manuel Jáquez Leal
7c8a5cd28d y4mdec: descend from GstBaseParse
This is an overhaul/simplification of the element.

Now it supports seek, while the performance remains more or less the same.

Fixes: #4373
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:47 +00:00
Víctor Manuel Jáquez Leal
8d4a6a7d64 y4mdec: handle time segments
so chaining y4menc ! y4mdec is possible.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:47 +00:00
Víctor Manuel Jáquez Leal
82e6c1c640 y4mdec: instead of memcmp, use gst_video_info_is_equal()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:47 +00:00
Víctor Manuel Jáquez Leal
4cf598bcf3 y4m: share common code among encoder and decoder
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:47 +00:00
Víctor Manuel Jáquez Leal
16d34468fb y4m: move y4mdec to good to have a single y4m plugin
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8719>
2025-05-05 11:53:46 +00:00
Alexander Slobodeniuk
14d4c249ad qtmux: fix building with -DGST_REMOVE_DEPRECATED
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8901>
2025-05-04 22:19:55 +00:00
Alexander Slobodeniuk
a03c4de48f elements: use set_static_metadata when it's allowed
Those strings are nice but CPU doesn't want to copy them

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8905>
2025-04-26 19:30:15 +02:00
Eli Mallon
068385e83f qtdemux: unref simple caps after use
Otherwise we leak a GSTCaps object every time we
use qtdemux on a file with Opus audio

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8879>
2025-04-23 12:06:48 -07:00
Stefan Andersson
1c8b01ccbc matroska-demux: Prevent corrupt cluster duplication
Make sure to always update next_cluster_offset, if next cluster offset
isn't known set it to zero. If next_cluster_offfset isn't updated it will
be the same as current and if the cluster parsing fails the same cluster
will be parsed again leading to duplication of the data in the cluster.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8855>
2025-04-16 20:37:08 +02:00
Gustav Fahlen
e649072584 gstrtspsrc: Do not emit signal 'no-more-pads' too early
Due to race condition it was previously possible that
gst_element_add_pad was not completed for each RTSP stream before
signal 'no-more-pads' was emitted.

Race condition explained:
Lets say two RTSP streams are created: Video and Audio.
1. Callback new_manager_pad is called for the Video stream =>
   stream->added=TRUE.
   all_added=FALSE because both streams are not yet added.
   Call gst_element_add_pad and emit signal 'pad-added' for Video stream.
2. Callback new_manager_pad is called for Audio stream =>
   stream->added=TRUE.
   all_added=TRUE because both streams are added.
   Call gst_element_add_pad and emit signal 'pad-added' for Audio stream.
3. Lets say gst_element_add_pad for the audio stream completes before
   the video stream. Since the audio stream already has all_added==TRUE
   this will result in the signal 'no-more-pads' to be emitted before
   gst_element_add_pad for the video stream is completed.

Solution is to move the logic that sets added=True and checks if all
streams are added to after gst_element_add_pad. This will make sure
signal 'no-more-pads' is not emitted until all code in
gst_element_add_pad is completed for all streams.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8832>
2025-04-14 12:35:06 +00:00
Jan Schmidt
7212848e41 rtspsrc: Don't error out on not-linked too early
Wait until all pads have been exposed before accepting a not-linked,
as pads are added one-by-one and downstream might not be interested
in the first ones to appear.

Follow up to
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7946

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8798>
2025-04-10 11:50:33 +00:00
Víctor Manuel Jáquez Leal
4fc8773371 y4menc: fix Y41B format
This a regression of commit fb0bea8f where output info variable was swapped with
input info variable by mistake.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8786>
2025-04-08 13:10:19 +00:00
Ognyan Tonchev
6db576f033 gstrtpsession: Do not push events while holding SESSION_LOCK
Doing so can trigger deadlocks

Fixes: #4328
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8695>
2025-04-05 08:43:06 +00:00
Ognyan Tonchev
ebb1d1a4ae gstrtpsession: protect recv_rtcp_segment_seqnum with a lock
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8695>
2025-04-05 08:43:05 +00:00
Ognyan Tonchev
961fc87168 gstrtpsession: use correct seqnum for the STREAM_START ans SEGMENT events
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8695>
2025-04-05 08:43:05 +00:00
dukesook
daa1ee84b9 qtdemux: Extend Uncompressed Lookup Table
- LUT now supports various subsampling, interleaves, and bit depths.

 - Replaces stride with GstVideoInfo pre_info to represent original data.

 - Simplifies gst_row_align_buffer() with gst_video_frame_copy().

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8598>
2025-04-05 07:59:32 +00:00
Doug Nazar
6e9667b65c matroskademux: Add support for relative position cues
Cueing data can contain the block number within a cluster and/or
a relative offset into the cluster.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5535>
2025-03-28 17:47:27 -04:00
Doug Nazar
3578b23ba2 matroskamux: Add support for chroma siting
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5534>
2025-03-28 11:44:13 -04:00
Doug Nazar
123a7a515f matroskamux: Add support for interlaced field order
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5534>
2025-03-28 11:44:13 -04:00
Doug Nazar
671dd6a61e matroskamux: Always use v4 for DocType version
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5534>
2025-03-28 11:43:50 -04:00
Doug Nazar
8e6ec1fc34 matroskademux: Handle chroma site color information
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5534>
2025-03-28 11:22:39 -04:00
Víctor Manuel Jáquez Leal
d59ce45789 y4menc: use start() vmethod rather than change_state()
Also it wil call negotiate() vmethod at set_format()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8654>
2025-03-27 14:29:40 +01:00