Sebastian Dröge
474eb62d85
matroskademux: Put a copy of the codec data into the A_MS/ACM caps
...
The original codec data buffer is owned by matroskademux and does not
necessarily live as long as the caps.
Thanks to Antonio Morales for finding and reporting the issue.
Fixes GHSL-2024-280
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3894
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:52 +00:00
Sebastian Dröge
b84a0f3263
matroskademux: Skip over zero-sized Xiph stream headers
...
Thanks to Antonio Morales for finding and reporting the issue.
Fixes GHSL-2024-251
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3867
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:52 +00:00
Sebastian Dröge
c20eff779d
matroskademux: Skip over laces directly when postprocessing the frame fails
...
Otherwise NULL buffers might be handled afterwards.
Thanks to Antonio Morales for finding and reporting the issue.
Fixes GHSL-2024-249
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3865
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:52 +00:00
Sebastian Dröge
395f2b3ffd
matroskademux: Don't take data out of an empty adapter when processing WavPack frames
...
Thanks to Antonio Morales for finding and reporting the issue.
Fixes GHSL-2024-249
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3865
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:52 +00:00
Sebastian Dröge
8aa1c185cf
matroskademux: Check for big enough WavPack codec private data before accessing it
...
Thanks to Antonio Morales for finding and reporting the issue.
Fixes GHSL-2024-250
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3866
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:52 +00:00
Sebastian Dröge
b7ad9a2c5d
matroskademux: Fix off-by-one when parsing multi-channel WavPack
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:52 +00:00
Sebastian Dröge
c0dceda8e9
matroskademux: Only unmap GstMapInfo in WavPack header extraction error paths if previously mapped
...
Thanks to Antonio Morales for finding and reporting the issue.
Fixes GHSL-2024-197
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3863
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8057 >
2024-12-03 20:02:51 +00:00
Sebastian Dröge
2bbf095e5b
matroskamux: Simplify timestamp comparison logic in find_best_pad()
...
If a buffer has no timestamp it is immediately muxed so we can directly break
the loop and simplify comparisons in the other cases.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7872 >
2024-11-15 22:33:53 +00:00
Sebastian Dröge
a391728ad4
matroskamux: Don't time out in live mode if no timestamped next buffer is available
...
The muxer can only advance the time if it has a timestamped buffer that can be
output, otherwise it will just busy-wait and use up a lot of CPU.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7872 >
2024-11-15 22:33:53 +00:00
Philippe Normand
701f563996
matroskamux: Delay stream-header until all sink pads have caps
...
If we don't wait, an incomplete header might be generated due to a race between
the _aggregate thread and the sink pad setcaps.
Fixes #3929
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7872 >
2024-11-15 22:33:53 +00:00
Sebastian Dröge
12b434ae9d
matroskamux: Add support for latency timeouts in live pipelines
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7510 >
2024-10-01 13:20:18 +00:00
Sebastian Dröge
945a7bdfc4
matroskamux: Port to GstAggregator
...
Co-authored-by: Tim-Philipp Müller <tim@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7510 >
2024-10-01 13:20:18 +00:00
Sebastian Dröge
6233eb0ff3
common: Stop using GQuark-based GstStructure field name API
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7432 >
2024-09-26 19:21:29 +03:00
Sebastian Dröge
762a281b0c
matroskamux: Include end padding in the block duration for Opus streams
...
It has to be included in the block duration but in GStreamer we're not
including it in the buffer duration, so it has to be added again here.
Not including it in the block duration can lead to fatal errors when playing
back with Firefox if there are more padding samples than actual samples, e.g.
> D/MediaDemuxer WebMDemuxer[7f6a0808b900] ::GetNextPacket: Padding frames larger
> than packet size, flagging the packet for error (padding: {13500000,1000000000},
> duration: {6000,1000000}, already processed: false)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7502 >
2024-09-13 20:38:51 +00:00
Philippe Normand
e9ecde83a7
matroska-demux: Basic support for container-specific-track-id tag
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6041 >
2024-02-12 10:37:29 +00:00
Thibault Saunier
e1a8ce16b4
matroskademux: Lower verbosity of some often happenning warnings
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6011 >
2024-01-30 09:09:22 +00:00
David Craven
c79d16ae80
matroska: demux: Strip signal byte from encrypted blocks
...
Removes the signal byte when the frame is unencrypted to
be consistent with when the frame is encrypted.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4997 >
2023-07-11 10:26:36 +00:00
Edward Hervey
2f95cbd551
matroska-demux: Properly handle early time-based segments
...
Refusing an incoming segment in < GST_MATROSKA_READ_STATE_DATA should only be
done if the incoming segment is not in GST_FORMAT_TIME.
In GST_FORMAT_TIME, we are just storing the values and returning, so we can
invert the order of the checks.
Fixes proper segment propagation in matroska/webm DASH use-cases
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3914 >
2023-06-22 06:56:33 +00:00
Mark Hymers
1ae8af4909
matroska: Add support for more pixel formats
...
- Add support for GRAY16_LE (using ffmpeg fourcc mapping)
- Update documentation
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4824 >
2023-06-14 13:40:58 +00:00
Daniel Morin
00178cbd89
matroska: Add new pixels format support
...
- Add support for GRAY10_BE32
- Add support for RGBA64_LE and BGRA64_LE
Sponsored by Living Optics
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4824 >
2023-06-14 13:40:57 +00:00
Tim-Philipp Müller
f3c126d07c
matroska-demux: fix accumulated base offset in segment seeks
...
When doing a segment seek, the base offset in the new segment
would be increased by segment.position which is basically the
timestamp of the last packet. This does not include the duration
of the last packet though, so might be slightly shorter than the
actual duration of the clip or the requested segment.
Increase the base offset by the segment duration instead when
accumulating segments, which is more correct as it doesn't cut
off the last frame and makes the effective loop segment duration
consistent with the actual duration returned from a duration
query.
In case a segment stop was specified it's also possible that
some data was sent beyond the stop that's necessary for decoding
so the base offset increment should be based on that then and
not on the timestamp of the last buffer pushed out.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4604 >
2023-06-13 18:19:48 +00:00
Sebastian Dröge
621ec7b6e8
matroskademux: Make gst_byte_reader_get_data() usage less confusing
...
This is effectively the same behaviour but retrieving 0 bytes of data is
confusing to read.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4210 >
2023-03-18 16:34:19 +02:00
Tim-Philipp Müller
0fc568c6b1
gst-plugins-good: re-indent with GNU indent 2.2.12
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4182 >
2023-03-17 03:18:54 +00:00
Arun Raghavan
82b892ba3e
matroskamux: Set rate/channels in Opus template caps
...
For some reason these were missed, and if caps didn't have them, we would emit
an invalid Matroska file with a 0 value for Sampling Frequency or channels.
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2354
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4151 >
2023-03-14 11:09:08 -04:00
Shengqi Yu
83576690b6
matroskademux: Consider TrackUID==0 a warning and not handle it as error
...
some special files whose trackUID is 0 can be played on the other
player. But it cannot be played in GStreamer, because trackUID 0 will be
treated as an error in matroskademux.
So, it makes sense to only consider trackUID==0 a warning and not handle
it as error
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1821
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4036 >
2023-03-01 07:38:24 +00:00
Tim-Philipp Müller
e256472ca6
matroska: drop use of GSlice
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3695 >
2023-01-24 15:25:06 +00:00
Sebastian Dröge
067b5d92b4
matroska: Add stream-format = (string) obu-stream
to AV1 caps
...
Anything else is not allowed in Matroska/WebM.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3740 >
2023-01-19 12:10:40 +02:00
Víctor Manuel Jáquez Leal
64cb38685b
matroskademux: Handle element's duration query.
...
This is small regression from commit f7abd81a
.
When calling `gst_element_query()` no pad is associated with that query, but the
current code always forwards the query to the associated pad, which is NULL in
previous case. This patch checks for the pad before forwarding the query.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3404 >
2022-11-14 15:10:44 +00:00
Thibault Saunier
f7abd81a45
matroskademux: Let upstream handle seeking/duration query in time if possible
...
So proper response are given for dash streams
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3159 >
2022-10-27 19:45:44 +00:00
Thibault Saunier
8c7579e129
matroskademux: Start support for upstream segments in TIME format
...
So we can use matroskademux for dash webm dash streams.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3159 >
2022-10-27 19:45:44 +00:00
Thibault Saunier
6a4425e46a
meson: Call pkgconfig.generate in the loop where we declare plugins dependencies
...
Removing some copy pasted code
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2970 >
2022-09-01 21:17:35 +00:00
Sebastian Dröge
cf887f1b8e
matroskademux: Avoid integer-overflow resulting in heap corruption in WavPack header handling code
...
blocksize + WAVPACK4_HEADER_SIZE might overflow gsize, which then
results in allocating a very small buffer. Into that buffer blocksize
data is memcpy'd later which then causes out of bound writes and can
potentially lead to anything from crashes to remote code execution.
Thanks to Adam Doupe for analyzing and reporting the issue.
CVE: CVE-2022-1920
https://gstreamer.freedesktop.org/security/sa-2022-0004.html
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1226
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2612 >
2022-06-15 18:35:12 +00:00
Sebastian Dröge
ad6012159a
matroskademux: Fix integer overflows in zlib/bz2/etc decompression code
...
Various variables were of smaller types than needed and there were no
checks for any overflows when doing additions on the sizes. This is all
checked now.
In addition the size of the decompressed data is limited to 120MB now as
any larger sizes are likely pathological and we can avoid out of memory
situations in many cases like this.
Also fix a bug where the available output size on the next iteration in
the zlib/bz2 decompression code was provided too large and could
potentially lead to out of bound writes.
Thanks to Adam Doupe for analyzing and reporting the issue.
CVE: CVE-2022-1922, CVE-2022-1923, CVE-2022-1924, CVE-2022-1925
https://gstreamer.freedesktop.org/security/sa-2022-0002.html
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1225
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2610 >
2022-06-15 17:50:55 +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
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
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
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
Rafał Dzięgiel
41385ab6f7
matroska: Ref index table when updating track info
...
Track index table array was being lost during track info update.
Ref it over to updated info, so it can be used for finding
nearest seek points.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1203 >
2021-11-12 12:28:40 +00:00
Rafał Dzięgiel
478f94edc7
matroska: Use g_array_unref everywhere
...
Instead of using g_array_free which is not thread safe use g_array_unref instead
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1203 >
2021-11-12 12:28:40 +00:00
Rafał Dzięgiel
b57a7c3de7
matroska: Set image/attachment structure mimetype
...
Set structure mimetype to fix data detection by mimetype in other plugins.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1205 >
2021-10-21 21:42:00 +00:00
Rafał Dzięgiel
0ba65a00c9
matroska: Treat non-image structure as attachment
...
Otherwise each structure is named as GstTagImageInfo even if
it does not contain any images which is misleading.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1205 >
2021-10-21 21:42:00 +00:00
Thibault Saunier
32a88fe16f
matroskamux: Ignore some fields when renegotiating
...
Those values are never used in the muxer so we should not fail the
negotiation if those are changing.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1062 >
2021-10-18 10:10:24 -03:00
Thibault Saunier
5ff769d731
Move files from gst-plugins-good into the "subprojects/gst-plugins-good/" subdir
2021-09-24 16:13:50 -03:00