Sebastian Dröge
12e918428a
qtdemux: Use a composition time offset of 0 for "no decode samples" for the time being
...
This needs codec-specific handling, but using 0 instead of G_MININT32 at
least gives somewhat reasonable behaviour.
See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/883
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
ad412d257b
qtdemux: Always check ctts for unreasonably large offsets
...
If this happens then ignore the whole ctts. Previously we only did this
if the PTS/DTS shift was determined from the ctts instead of the cslg.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
93a10a4ba1
qtdemux: Dump composition time offsets in trun as signed integers
...
Just like we do for ctts without regard of the version of the box.
Huge offsets are interpreted as negative offsets by qtdemux so this
works.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
a6f3391c81
qtdemux: Add a comment why only positive cslg shifts are considered
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
a33e30cfc4
qtdemux: Only adjust segment.stop by cslg_shift if stop is not -1
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
bb5a5ae8a8
qtdemux: Handle negative composition offsets in the trun box the same way as for non-fragmented streams
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
767e8bf668
qtdemux: Parse ctts version
...
Negative composition time offsets are only allowed with version 1 of the
box, however we parse it as a signed value also for version 0 boxes as
unfortunately there are such files out there and it's unlikely to have
(valid) huge composition offsets.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
284dd5443f
qtdemux: Add support for version 1 cslg boxes
...
They use 64 bit fields instead of 32 bit.
Also parse offset as a signed integer (in both versions) and clamp it to
a positive value as negative values don't really interest us here.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +00:00
Sebastian Dröge
7f105a919a
qtdemux: Don't free cslg data that we don't own on corrupt files
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1294 >
2021-11-12 17:51:03 +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
Tim-Philipp Müller
972615cf22
docs: fix unnecessary ampersand, < and > escaping in code blocks
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1340 >
2021-11-12 11:39:19 +00:00
Mathieu Duponchelle
792fb05cec
st2022-1-fecdec: fix packet trimming
...
g_sequence_remove_range's end iter is exclusive, so if one
wants to remove that item as well, it should be called with
the next iter.
This could in theory fix an issue where:
* The sequence isn't entirely trimmed, with an old item lingering
* Following FEC packets are immediately discarded because they
arrived later than corresponding media packets, long enough for
seqnums to wrap around
* We now try to reconstruct a media packet with a completely obsolete
FEC packet, chaos ensues.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1341 >
2021-11-12 08:15:28 +00:00
Matthew Waters
71dd47516c
rtpbin: separate out the two fec decoder locations
...
The pipeline flow for receiving looks like this:
rtpsession ! rtpssrcdemux ! session_fec_decoder ! rtpjitterbuffer ! \
rtpptdemux ! stream_fec_decoder ! ...
There are two places where a fec decoder could be placed.
1. As requested from the 'request-fec-decoder' signal: after rtpptdemux
for each ssrc/pt produced
2. after rtpssrcdemux but before rtpjitterbuffer: added for the
rtpst2022-1-fecenc/dec elements,
However, there was some cross-contamination of the elements involved and
the request-fec-decoder signal was also being used to request the fec
decoder for the session_fec_decoder which would then be cached and
re-used for subsequent fec decoder requests. This would cause the same
element to be attempted to be linked to multiple elements in different
places in the pipeline. This would fail and cause all kinds of havoc
usually resulting in a not-linked error being returned upstream and an
error message being posted by the source.
Fix by not using the request-fec-decoder signal for requesting the
session_fec_decoder and instead solely rely on the added properties for
that case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1300 >
2021-11-10 10:38:26 +00:00
Zhao, Gang
6cad2a7150
qtdemux: Fix can not demux Opus track made by qtmux
...
Opus stream info is read from dOps box [1]. The offset of dOps box in Opus box is different in mp4a version 1 and 0 [2]. Calculate the offset of dOps box according to mp4a version.
[1] https://opus-codec.org/docs/opus_in_isobmff.html
[2] subprojects/gst-plugins-good/gst/isomp4/atoms.c:sample_entry_mp4a_copy_data:2146
Fixed: https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/918
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1329 >
2021-11-09 17:57:49 +00:00
Sanchayan Maity
3f49b21b80
imagefreeze: Only set caps if they do not match current caps
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1311 >
2021-11-05 15:34:47 +05:30
Sebastian Dröge
dac82a8932
multifilesink: Make minimum distance between keyframes in next-file=key-frame mode configurable
...
Previously this was hardcoded to 10s, which is not necessarily the
desired behaviour.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1292 >
2021-11-02 20:21:10 +00:00
Erlend Eriksen
0805ffdce9
qtmux: Fix deadlock in gst_qt_mux_prepare_moov_recovery
...
Regression from 5766731bd4
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1288 >
2021-11-02 19:26:57 +00:00
Mathieu Duponchelle
c414f9560a
rtptwcc: don't assume all PacketInfo->data are buffers
...
They can also be buffer lists
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1268 >
2021-10-29 03:46:25 +02:00
Jan Schmidt
f6ed40c93a
qtdemux: Fix text and closed-caption handling.
...
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182
broke text and and closed caption extraction when introducing WebVTT
support, by making the output buffers not have timestamps any more.
Fix that by making the process functions copy buffer metadata
when generating new output buffers.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1262 >
2021-10-28 21:45:33 +11:00
Sebastian Dröge
2853c085c7
qtdemux: Add pasp box to the list of known boxes
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1235 >
2021-10-23 11:39:36 +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
Matthew Waters
8c35850f23
rtpbin: fix leak of pad when a fec encoder and aux sender a created
...
The ghost sink pad retrieved by rtpbin from the aux sender was not freed
when there was a previous element (fec encoder) in the chain.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1222 >
2021-10-21 13:46:03 +00:00
Olivier Crête
0dbe0e21fe
rtphdrext-clientaudiolevel: Rename RFC 6464 element
...
Multiplying elements named after RFC numbers is confusing,
so let's give them meaningful names.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1125 >
2021-10-20 00:03:09 +00:00
Jan Schmidt
6cada5b064
qtdemux: Add support for wvtt (WebVTT) subtitles.
...
WebVTT in ISO MP4 is specified in ISO 14496-30,
and needed for DASH support. It's stored in an
mp4 specific format. To handle it compatibly,
the wvtt boxes are converted back into WebVTT text
and pushed as application/x-subtitle-vtt
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182 >
2021-10-19 08:56:58 +00:00
Jan Schmidt
41d6f47f2b
isomp4: Split buffer process functions.
...
Split the different handling for closed captions, VobSub subpicture
and timed text samples into separate simplified process functions.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182 >
2021-10-19 08:56:58 +00:00
Jan Schmidt
c47c6b4c2b
isomp4: Use a function pointer for buffer splitting.
...
Swap the `need_process` boolean check on qtdemux streams
for a direct function pointer to the splitting function,
so we can stop adding extra cases to the single growing
`gst_qtdemux_process_buffer()` function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1182 >
2021-10-19 08:56:58 +00:00
Thibault Saunier
20f6af7e3c
qtmux: Allow more fields changes renegotiating h264
...
And consider interlace-mode=progress as equivalent to the field not
being specified.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1062 >
2021-10-18 10:10:24 -03: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
Olivier Crête
c272d0bfcd
rtopuspay: Set marker bit inside RTP packet too
...
At the end of a talk spurt, not only set the marker flag on the
GstBuffer, but also set the bit inside the RTP header as recommended
by the RFC.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1124 >
2021-10-12 17:18:19 -04:00
Sebastian Dröge
2d4491e195
splitmuxsink: Don't assert on the input side if no GOP is available when shutting down
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1119 >
2021-10-12 19:34:16 +00:00
Sebastian Dröge
4316be6571
splitmuxsink: Keep track of the pending input GOPs in a queue
...
This cleans up input GOP handling and makes it possible to handle more
than 2 pending GOPs, which could happen before if keyframes are arriving
with too short of a distance between them.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005 >
2021-10-05 12:35:19 +00:00
Sebastian Dröge
ae8ceb801c
splitmuxsink: Handle frame reordering due to B frames better
...
Instead of assuming that the PTS of a keyframe is the lowest PTS of a
GOP, wait until the DTS has passed this PTS and take the minimum PTS up
to that point. That way the minimum PTS of a GOP can be determined, at
least for closed GOP streams. Open GOP streams still can't be handled
properly.
By knowing the minimum PTS of each GOP, keyframes can be requested at
the correct time relative to the GOP (and thus fragment) start and
fragment overflow calculations can calculate the correct durations of
the GOPs.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005 >
2021-10-05 12:35:19 +00:00
Sebastian Dröge
f83ed50c20
splitmuxsink: Reset timecodes when resetting the sink
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005 >
2021-10-05 12:35:19 +00:00
Sebastian Dröge
ed6823ad67
splitmuxsink: Use GST_CLOCK_STIME_NONE instead of 0 to initialize max out running time
...
Otherwise streams with only DTS would misbehave while it is negative.
For outputting everything immediately at EOS, use G_MAXINT64 instead
which is bigger-or-equal to any other running time.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005 >
2021-10-05 12:35:19 +00:00
Sebastian Dröge
eed843eea0
splitmuxsink: Only update max in/out running time if it's actually bigger
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005 >
2021-10-05 12:35:19 +00:00
Sebastian Dröge
68683d15c4
splitmuxsink: Only count keyframes for the reference context, consistently
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1005 >
2021-10-05 12:35:19 +00:00
Olivier Crête
5ec82c1c4e
rtphdrext: Pass just the attributes to the subclass
...
Since the base class now does the parsing, there is no need
to reproduce that code in all the subclasses, just pass the attributes
which are the only relevant bit anyway.
Also, only store the direction if the subclass accepted the caps
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906 >
2021-09-28 20:04:55 +00:00
Olivier Crête
2db9f42b36
rtphdrext-rfc6464: Use helper function to set caps field
...
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906 >
2021-09-28 20:04:55 +00:00
Olivier Crête
ba328fb98d
rtphdrext: Set caps without attributes as the default
...
Most subclasses just use the simple function, so just let the base class
do it. It makes less code in subclasses.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906 >
2021-09-28 20:04:55 +00:00
Olivier Crête
498740fe57
rtphdrext: Put simple caps generation as the base class default
...
Instead of having a helper function that gets called by almost every
subclass, just let the base class set the caps fields automatically.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/906 >
2021-09-28 20:04:55 +00: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