Commit graph

1023 commits

Author SHA1 Message Date
Matthew Waters
b080d01b68 glwindow/cocoa: keep a window reference across an async callback
Esnures that the window is alive when the callback is fired.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters
3f29c897f8 glimagesink: avoid a possible critical on shutdown
It is possible that the close callback can be called after glimagesink
is changing state to NULL.  Protect against that by taking the glimagesink
lock and some NULL checking.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters
d9b563e9b2 glimagesink: unref the potential last ref outside of the glimagesink lock
Avoids a deadlock between the state change removing the last ref and
the destructer calling the window's on_close handler and trying to
take the glimagesink lock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters
3c5bb4bf5d glbufferpool: protect release_buffer from multiple concurrent access
If two different threads attempt to release buffers at the same time, then the
keep-alive-slightly-longer GQueue may become corrupted.  Guard against that with
some locking.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Matthew Waters
49a7424d1e gl/context/cocoa: ensure pixel format lives as long as the context
Under some circumstances, the CGLPixelFormatObj was being destroyed too
early which could lead to potential use-after-frees.

Fix by returning a reference when asked for the pixel format.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3154
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6504>
2024-04-02 23:50:41 +00:00
Xavier Claessens
74b171e745 videorate: Reset last_ts when a new segment is received
This fix all buffers being droped when a new segment is received and
average-period property is set.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6502>
2024-04-02 21:06:21 +00:00
Alexander Slobodeniuk
b18b3d00b7 navigation: add missing sanity checks
On practice a failure happened due to a race condition, the instance
already have been freed, but it could also happen if the instance
would be null.
Instead of crashing this sanity check is a more suitable option,
since with G_DEBUG=fatal-warnings it will crash too.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6475>
2024-04-02 14:17:53 +00:00
Chao Guo
69f4d98844 glcolorconvert: Ensure glcolorconvert does not miss supported RGB formats
Add RGB16 and other RGB formats to rgb_formats to ensure glcolorconvert
does not miss the RGB formats it supports

Signed-off-by: Chao Guo <chao.guo@nxp.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6497>
2024-04-02 17:14:27 +09:00
Hou Qi
1e70dea347 encodebin: Add the parser before timestamper to tosync list
Also need to sync the state of the parser before timestamper with
parent.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6481>
2024-03-29 07:59:06 +00:00
Tim-Philipp Müller
4790a44d10 Revert "audiobasesink: Don't wait on gap events"
This reverts commit 8e923a8e2d.

This caused regressions, see #3303.

Without this commit, osxaudiosrc ! osxaudiosink won't work
right, but since that hasn't really been a huge problem
for years it's probably best to revert this until a proper
solution can be figured out.



(cherry picked from commit f04f86f3ee)



(cherry picked from commit 93255efece)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6405>
2024-03-21 03:19:03 +00:00
Edward Hervey
42e24c32e5 uridecodebin3: Don't hold lock when posting messages or signals
There's a very good chance that the receiver might react on those synchronously
and call back into uridecodebin3 (ex: for setting the next URI).

Make sure we release the lock if we need to do that.

Fixes #3400

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6402>
2024-03-19 09:34:18 +01:00
Edward Hervey
c1ac015325 uridecodebin3: Handle potential double redirection errors
Some elements (like qtdemux) might post a redirection error message twice. We
only want to handle it once.

Fixes #3390

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6389>
2024-03-18 13:30:24 +00:00
Edward Hervey
b1f4dcb068 decodebin3: Post error messages if there are no streams to output
This could happen because:
* No streams were selected
* Or we end up with no stream selected

Also post a warning message if we are missing plugins but there are other
streams to output

Fixes #3360

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6323>
2024-03-14 18:15:33 +00:00
Edward Hervey
11b1f70aea decodebin3: Remove failing stream from active selection also
It gets added in get_output_slot()

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6323>
2024-03-14 18:15:33 +00:00
Thomas Klausner
4632c623bf shmallocator: fix build on Illumos
Closes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3370

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6321>
2024-03-13 18:48:27 +00:00
Michiel Westerbeek
a4aa9e197e gstcudaconvertscale, gstvavpp, videoconvertscale: downgrade 'Can't keep DAR' to debug
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5730>
2024-03-13 16:06:56 +00:00
Nicolas Dufresne
bcad005d05 glupload: Do not propose allocators with sysmem
None of the GL allocators actually offer a generic alloc() implementation. As a
side effect, they cannot be offered as they don't work with generic video
buffer pool.

Our specialized buffer pool can be dropped by tee or alphacombine as sharing the
same buffer pool over two branch is not supported by the pool API.

Fixes #3372

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6327>
2024-03-12 19:02:54 +00:00
Piotr Brzeziński
3243c5fe94 audiovisualizer: Don't wrap temporary memory in buffers
Avoids potentially ending up with the buffermemory pointing to already-freed or reused addresses.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6320>
2024-03-11 18:18:01 +00:00
Piotr Brzeziński
15e0affc98 audioencoder: Avoid wrapping temporarily mapped memory with a GstBuffer and passing that to subclass
Memory from gst_adapter_map() could live shorter than the GstMemory that the GstBuffer wraps around it, which in lucky
cases 'just' caused a re-use of the same memory for multiple (potentially still in use!) input buffers, but could easily
end up pointing to an already-freed memory.

Manifested when an AudioToolbox encoder kept getting silence inserted in seemingly random circumstances, turned out
to be the memory being re-used by GStreamer at the same time that the AT API was processing it...

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6320>
2024-03-11 18:18:01 +00:00
Edward Hervey
0f1dfc2db0 playbin3: Remove un-needed URI NULL check
This will mimic the playbin2 behaviour, which sets the "next" entry to be
NULL.

The biggest impact this has is that when going back to READY the current play
entry will be discarded (instead of being kept around for when you go back to
PAUSED/PLAYING).

Fixes #3371

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6324>
2024-03-11 17:33:04 +00:00
Edward Hervey
5f7062136d decodebin3: Handle race switching on pending streams
find_slot_for_stream_id() will return a slot which has the request stream-id as
active_stream *or* pending_stream (i.e. the slot on which that stream is
currently being outputted or will be outputted).

When figuring out which slot to use (if any) we want to consider stream-id
which *will* appear on a given slot which isn't outputting anything yet the same
way as if we didn't find a slot yet.

Fixes races when doing intensive state changes

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey
e03e2308d7 decodebin3: Clear select streams seqnum when resetting
At this point there's definitely no pending select streams

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey
344acfe4e8 decodebin3: Only post collection message on actual updates
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey
33fe063f50 decodebin3: Clear the global collection when resetting
This avoids having stray collections when re-using decodebin3

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6270>
2024-03-11 11:13:59 +00:00
Edward Hervey
73152b53ff decodebin3: Provide clear error message if no decoders present
If we don't do this we will end up with a more cryptic error message (not-linked
error from some upstream component).

Fixes #3198

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6317>
2024-03-11 09:17:09 +01:00
François Laignel
d83184cf9a sdp: accept empty attribute value represented as a NULL pointer
Some empty media attribute values are set to an empty string, others as a NULL
pointer. It seems that code is able to deal with both, except for the UTF8
validation.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6119>
2024-03-08 10:28:15 +00:00
Piotr Brzeziński
ca0d4dd6cc macos: Fix glimagesink not respecting preferred size
Cocoa version of glwindow only checks the preferred size upon window creation. glimagesink sets the size right before
calling gst_gl_window_show(), which might be way after the window is created in some cases. If the size was set too
late, glimagesink on macOS would remain 320x240 unless manually resized.

This change makes sure to resize the existing window when _show() is called.

Curiously, this has always been an issue, but went from manifesting every once in a while to being almost completely
broken once old event loop workarounds were removed and gst_macos_main() was introduced.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6185>
2024-03-06 15:48:03 +00:00
Xi Ruoyao
7e8873c100 gst-plugins-base: meson: Fix the condition to skip theoradec test
Due to operator priority "not a and b" is interpreted "(not a) and b".

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6260>
2024-03-05 20:13:39 +00:00
Tim-Philipp Müller
756064b9c3 Back to development
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6261>
2024-03-05 12:58:57 +00:00
Tim-Philipp Müller
b125253cad Release 1.24.0 2024-03-04 23:59:25 +00:00
Edward Hervey
3f7f9145d2 playback: Remove USE_PLAYBIN3 registration override
This was only introduced as a convenience for testing playbin3 instead of
playbin2.

Now that playbin3 is (explicitely) default in many cases, we should not do this
hack anymore

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6255>
2024-03-04 12:23:34 +01:00
Jurijs Satcs
23f654a943 audioconvert: set mix-matrix when user changes it to empty
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6243>
2024-03-01 11:58:57 +00:00
Marvin Schmidt
1b74f039ab allocators: drmdumb: Remove extra semicolon after G_DECLARE_FINAL_TYPE
The `G_DECLARE_FINAL_TYPE` macro does not need to be terminated with a
semicolon and the extra semicolon breaks building e.g. libcamera with
clang because `-Wextra-semi` is used which produces the following
error in conjunction with `-Werror`:
```
gstreamer-1.0/gst/allocators/gstdrmdumb.h:61:43: error: extra ';' outside
of a function is incompatible with C++98 [-Werror,-Wc++98-compat-extra-semi]
   61 |     GST, DRM_DUMB_ALLOCATOR, GstAllocator);
      |                                           ^
1 error generated.
```

Fix this by removing the extra semicolon

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6239>
2024-02-28 23:56:53 +01:00
Thibault Saunier
1baa36c14a volume: Expose the volume-full-range as another property
In https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5063
the range of volume value has changed which breaks backward compatibility
when  using a GstDirectControlBinding which is not acceptable. To avoid
breaking compatibility add the feature of allowing the full range  using
another property with the full range. When using that full range, the
value of the `volume` property might end up being out of its valid
range but we do not really have a good solution for that.

Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3257
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6222>
2024-02-27 12:33:44 +00:00
Edward Hervey
a3980f4838 docs: Use Discourse and Matrix as prefered communication channels
Part of: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6220
2024-02-27 09:35:47 +01:00
Tim-Philipp Müller
d474de8ff0 Release 1.23.90 2024-02-23 18:20:11 +00:00
Edward Hervey
489f310881 urisourcebin: Handle legacy pad replacements from parsebin
When dealing with demuxers which aren't streams-aware, we need to handle the
old-school "stream replacement" dance from `parsebin` and hide that in such a
way that output pads are re-used (if compatible).

By analyzing the collection posted by parsebin, we can:
* Identify whether some output slots are no longer used (because the stream they
  currently handle is not present in the collection)
* Decide if some upcoming streams could re-use the existing slot

This supports both buffering and non-buffering modes.

Fixes #1651

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6201>
2024-02-23 16:05:44 +00:00
Sebastian Dröge
e690b53d05 theoradec: Remove mis-leading and redundant uncropped_info
It's actually the cropped info, and equivalent to the info that is
already stored as part of the output state.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Sebastian Dröge
43fb350c42 theoradec: Don't leak input state if a second type packet is received
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Sebastian Dröge
be4388c249 theoradec: Don't overwrite width/height of the input state
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Sebastian Dröge
ee06666507 theoradec: Don't use custom allocation logic and always crop locally
All video frames have to be copied from libtheora's memory to the output
frame anyway, so we can as well do the cropping here directly instead of
copying the full frames and having downstream do the cropping.

This reduces the complexity of the code considerably, and among other
things gets rid of a bug related to buffer pool configuration.

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

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6203>
2024-02-23 15:03:35 +00:00
Edward Hervey
5422c6c6d4 uridecodebin3: Atomically switch urisourcebin
When switching urisourcebin, ensure that we first unlink *all* pads from
decodebin3 before linking them again.

This is to ensure that decodebin3 completely knows that all previous pads are no
longer needed and can prepare itself to being re-used.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6179>
2024-02-23 08:29:47 +00:00
Edward Hervey
3da09ba971 uridecodebin3: Unify urisourcebin probe handling
Instead of handling events from urisourcebin pads in different probes (a
blocking and regular one), move it all to the non-blocking one.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6179>
2024-02-23 08:29:47 +00:00
Sebastian Dröge
eb641af450 rtp: Fix constant for maximum two-byte RTP header extension length
The value is stored as an 8 bit integer, with 0 meaning that there is
not data for this extension. That means that the maximum length is 255
bytes and not 256 bytes.

On the other hand, the one-byte RTP header extensions are storing the
length as a 4 bit integer with an offset of 1 (i.e. 0 means 1 byte
extension length), so here 16 is the correct maximum length.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6180>
2024-02-23 02:18:28 +00:00
Jeongki Kim
576dbcbd88 appsrc: clear eos flag on flush stop event
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6186>
2024-02-22 19:46:50 +00:00
Edward Hervey
03f8968119 urisourcebin: Use atomic lock for detecting shutdown
This fixes lock ordering issues

Fixes #3323

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6178>
2024-02-22 18:15:12 +00:00
Edward Hervey
3ce62be851 subtitleoverlay: Also use "Decoder/Subtitle" elements
Elements that "decoded" subtitle formats to raw text were historically
classified as "Parser" and not "Decoder. This is being gradually fixed.

This commit ensures that both classification are allowed

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Edward Hervey
c1d33126aa playbin3: Inform (uri)decodebin3 of the subtitle caps from playsink
Subtitles are better handled by overlayers/renderers within playsink. By
informing (uri)decodebin3 of the formats that can be handled we can avoid those
being "decoded" too early.

Fixes #1081

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Edward Hervey
479c0c5bb4 parsebin: Use pbutils utils to identify more stream types
Handles all cases provided they are identified in the pbutils descriptions
list.

Fixes #1081

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00
Edward Hervey
34a1245905 subparsers: Give proper category to subtitle "decoders"
Some subtitle "decoders" had a wrong category of "Parser", which `parsebin`
relies on to identify elements which do not *decode* streams but *parse* them.

This would cause such subtitle decoders to be plugged in within parsebin,
preventing the original stream to be properly used by (more efficient)
downstream decoders or subtitle renderers.

Fixes #1757

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6153>
2024-02-22 14:39:54 +00:00