summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
3 daysdecodebin3: Avoid usage of parsebin even more1.24Edward Hervey1-20/+5
When dealing with push-based inputs, we are now delaying the creation of parsebin/identity until we get all pre-buffer events. We therefore can simplify the handling of new pads being linked and only have to check if upstream can handle pull-based or not. Avoids creating parsebin for parsed upstream data altogether Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6995>
4 daysdecodebin3: Ensure we get a collection for parsed inputsEdward Hervey1-0/+27
When we are dealing with parsed inputs (i.e. using identity), we need to ensure that we have a valid stream collection (and therefore DBCollection) before anything flows dowsntream. In those cases, we hold onto those events until we get such a collection. Fixes #3356 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: New mechanism for handling collection and selectionsEdward Hervey1-275/+436
This commit separates collection and selections into a new separate structure: DecodebinCollection. This provides a much cleaner/saner way of dealing with collections being updated, gapless playback, etc... There is now a list of DecodebinCollection in flight, of which two are special: * input_collection, the currently inputted/merged collection * output_collection, the currently active collection on the output of multiqueue Handling GST_EVENT_SELECT_STREAMS is split, by looking for the collection to which it applies. And the requested streams are stored in it. IIF that collection is output_collection we can do the switch, else it will be updated when it becomes active. Detecting which collection/selection is active is done by looking at the GST_EVENT_STREAM_START on the output of the multiqueue. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: minor refactoring to identify selected streamEdward Hervey1-7/+12
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Debug line cleanupsEdward Hervey1-23/+29
Use identifiable items in log lines instead of random pointers Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin: Remove unused includesEdward Hervey1-5/+0
* config.h is not used, plugin/element is registered in another file * play-enum.h is not used Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Remove un-needed variableEdward Hervey1-9/+1
We don't do anything with the unknown streams. Detecting that a list of requested streams don't apply to a given collection should be handled before-hand Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Remove un-needed variableEdward Hervey1-30/+26
pending_select_streams was only set just before releasing/taking the selection lock in a single place. That temporary lock release is not needed and therefore the variable isn't needed either Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Remove active_selection listEdward Hervey1-32/+40
It's a duplicate of the list of slots which have an output. Use that instead. Also when we fail to (re)configure an output, remove it. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Cache slot stream_id and rename more variablesEdward Hervey1-120/+126
* Move the handling of GST_EVENT_STREAM_START on a slot to a separate function * There was a lot of usage of `gst_stream_get_stream_id()` for the slot active_stream. Cache that instead of constantly querying it. * Rename the variables in `handle_stream_switch()` to be clearer Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Refactor slot/output (re)configurationEdward Hervey1-277/+253
* Re-use existing function where possible * Only set/reset keyframe probe at unique places Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Refactor linking input to slotEdward Hervey1-19/+22
The same sequence of calls was done when doing that Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: input_unblock_streams: Clarify variableEdward Hervey1-6/+6
It's a list of pads, not slots Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Rename multiqueue related functionsEdward Hervey1-22/+18
To make clear on what they apply Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Refactor/rename slot/outputEdward Hervey1-76/+186
* Centralize associating an output to a slot in one function, including properly resetting those fields * Rename functions to be more explicit * Move code to "reset" an output stream into a dedicated function (will be used later) Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Refactor removal of slot/output from streaming threadEdward Hervey1-85/+77
The code was identical in several places Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: rename/clarify eos and draining usage around multiqueueEdward Hervey1-48/+64
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Document/refactor DecodebinInput handlingEdward Hervey1-87/+179
* Rename the function names to be clearer, with prefixes * Pass the input (or stream) directly where appropriate * Document usage, inputs, ownership * Rename variables for clarity where applicable * Avoid double lock/unlock if callee can handle it directly Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Move gstdecodebin3-parse.c into gstdecodebin3.cEdward Hervey2-611/+572
Makes it easier to work with LSP Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Refactor incoming collection handlingEdward Hervey1-71/+58
Simplify its usage by having it directly create the message if the collection changed. This is what caller were always doing and avoids releasing selection locks yet-another-time Also use it in more places to avoid code repetition Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Rename variable for clarityEdward Hervey1-6/+8
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Refactor GST_EVENT_SELECT_STREAMS handlingEdward Hervey1-68/+53
* The same code is used for the event, regardless of whether it's coming from via a pad or directly on the element * The pending_select_streams list content was never used, switch it to a boolean Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysdecodebin3: Don't forward select streams if we are handling itEdward Hervey1-8/+2
Since the introduction of the "SELECTABLE" query, the usage of selection was clarified. We don't need to forward the GST_EVENT_SELECT_STREAMS at this point. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7002>
4 daysgstpromise: Don't use g_return_* for internal checksEdward Hervey2-12/+10
If assertion/checks are disabled bad things will happen and the function won't return as expected Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6998>
4 daysgstqsg6material: fix RGB format supportCorentin Damman1-0/+2
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6997>
5 daysdtlssrtpenc: Don't crash if no pad name is provided when requesting a new padSebastian Dröge1-0/+3
It is mandatory to provide a valid pad name for dtlssrtpenc. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6994>
8 daysrtspsrc: Only update from the Content-Base header in the initial OPTION / ↵Sebastian Dröge1-21/+30
DESCRIBE response Some servers send a new content base in the SETUP response, which is just the non-aggregate control URL of the individual streams. See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3563 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6982>
8 daysrtspsrc: Handle the case of `*` as session-wide control URL from the SDPSebastian Dröge1-11/+17
Just like the comment above says this is supposed to indicate that the same URL should be used as for the connection so far. If encountering this case simply do nothing. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6982>
8 daysrtspsrc: Also handle `rtsps://` and similar URLs as absolute in other placesSebastian Dröge1-2/+2
Previously a direct comparison with `rtsp://` was performed, which didn't catch cases like `rtsps://`. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3563 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6982>
8 daysrtspsrc: Don't try the SETUP workaround for broken servers with absolute ↵Sebastian Dröge1-1/+1
control URIs Previously only control URIs that started with "rtsp://" were ignored but it makes more sense to ignore all absolute URIs. gst_uri_is_valid() conveniently checks for exactly that. See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3563 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6982>
9 daysgst_debug: Add missing gst_debug_log_id_literal() dummy with gst_debug=falseMartin Nordholts1-0/+7
E.g. gst_debug_log_literal() already has a dummy variant. gst_debug_log_id_literal() is simply missing, which can cause link errors for project using gstreamer with gst_debug=false. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6979>
10 daysptp-helper: Add GNU/Hurd supportSamuel Thibault4-10/+45
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6974>
10 daysd3d12memory: Fix staging buffer alignmentSeungha Yang2-16/+16
Not all GPUs can support arbitrary offset of D3D12_PLACED_SUBRESOURCE_FOOTPRINT when copying GPU memory between texture and buffer. Instead of calculating size/offset per plane, calculate the entire size and offsets at once. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6973>
11 daysglcolorconvert: update existing sync meta if outbuf has oneJakub Adam1-4/+6
Instead of always adding a new one, which means the buffer could end up with multiple sync meta instances. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6962>
11 dayshlsdemux2: Minor refactoring of starting segment checkEdward Hervey1-28/+28
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Be more tolerant when matching segments with PDTEdward Hervey1-7/+16
Some servers might not provide 100% matching PDT when doing updates, or accross variants. This would cause the code matching segments using PDT to fail if the segment PDT was 1 microsecond (or whatever small value) before the candidate segment. And would pick the (wrong) following segment as the matching one. In order to be more tolerant when matching, we instead check whether the candidate segment is within the first segment of the segment we are trying to match. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Fix failure to find a replacement segment on resyncEdward Hervey1-1/+3
If we end up with a segment with an internal time that varies from the supposed one, this could be for two reasons: * We guess-timated the wrong segment to go to when advancing or switching variants. In that case we try to find the actual segment to go to (just before this change). * There was a complete playlist change (for whatever reason) and we can't find a replacement. In that case we want to carry on playback from this position but need to remember that we moved (by setting the stream to DISCONT, and resetting the new mapping). Fixes playback on several broken stream Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Refactor update of GstHLSTimeMap valuesEdward Hervey3-25/+35
This was also missing transferring the PDT if present Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Fix parsing of EXT-X-DISCONTINUITY-SEQUENCE:0Edward Hervey1-1/+4
Since the default value of `m3u8->discont_sequence` (before parsing of the playlist data) was 0 .. we would never properly detect the presence of that field if it was present with a value of 0. This would later on cause havoc in playlist synchronization where we would assume it didn't have a discontinuity sequence specified (whereas it did, and it was 0). Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Increase tolerance for discontinuity detectionEdward Hervey1-1/+3
A lot of streams will do a poor job of estimating proper duration of fragments in the playlist, but over several fragments have it correct. Instead of constantly trying to realign the estimated stream time, allow for a more realistic tolerance of 3-4 video frames Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Ensure a discont will be set when resetting for lost syncEdward Hervey1-0/+1
This is to ensures we inform the demuxer/parsers that what follows is not contiguous Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Fix handling of variant switching and playlist updatesEdward Hervey5-31/+65
When updating playlists, we want to know whether the updated playlist is continuous with the previous one. That is : if we advance, will the next fragment need to have the DISCONT buffer set on it or not. If that happens (because we switched variants, or the playlist all of a sudden changed) we remember that there is a pending discont for the next fragment. That will be used and resetted the next time we get the fragment information. Previously this was only partially done. And it was racy because it was set directly on `GstAdaptiveDemux2Stream->discont` when a playlist was updated, instead of when the next fragment was prepared. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 daysadaptivedemux2: Only set DISCONT on beginning of fragmentsEdward Hervey1-6/+6
This avoids accidentally setting it in the middle of a fragment, which could cause havoc in demuxer/parsers Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 dayshlsdemux2: Fix getting starting segment on live playlistsEdward Hervey1-22/+25
When dealing with live streams, the function was assuming that all segments of the playlist had valid stream_time. But that isn't TRUE, for example in the case of failing to synchronize playlists. Fixes losing sync due to not being able to match playlist on updates Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6961>
11 daysd3d12encoder: Do not print error log for not-supported featureSeungha Yang1-7/+7
gst_d3d12_result() will print message with ERROR level if failed. Use FAILED/SUCCEEDED macros instead, since not-supported feature is not a critical error Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6963>
11 daysflacparse: fix buffer overflow in gst_flac_parse_frame_is_validSergey Krivohatskiy1-10/+11
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6960>
12 daysBack to development after 1.24.4Tim-Philipp Müller23-24/+24
12 daysRelease 1.24.41.24.4Tim-Philipp Müller56-79/+1839
12 daysgstreamer: parse: Don't assume that child proxy child objects are GstObjectsSebastian Dröge1-3/+2
The name is already passed via the signal parameters so it doesn't have to be retrieved again via GstObject API, which would crash on other GObjects. Child proxy child objects can be any kind of GObject and the code here otherwise handles this correctly already. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6951>
12 daysgstreamer: ptp-helper: Use u64 instead of c_ulong for ifa_flags on ↵Sebastian Dröge1-1/+1
Solaris/Illumos See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3553#note_2429400 Patch by Marcel Telka <marcel@telka.sk>. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6950>