- Mar 15, 2021
-
-
Tim-Philipp Müller authored
Check the right variable when checking if there's enough data left to read the frame size. Closes gstreamer/gst-plugins-base#876 Part-of: <gstreamer/gst-plugins-base!1066>
- Mar 10, 2021
-
-
The way pad->priv->input_buffer reference was managed was pretty spurious: - it was overridden without unrefing it, which could potentially lead to leaks. - we were unreffing it while keeping the pointer around, which could potentially lead to use-after-free or double-free. As priv->input_buffer is actually no longer used outside of the aggregate() method, remove it from pad->priv to simplify the code and prevent the issues desribed above. Fix a single buffer leak when shutting down the pipeline as the buffer returned from gst_aggregator_pad_drop_buffer() was never unreffed. Part-of: <gstreamer/gst-plugins-base!1062>
-
This code path is meant to convert the current buffer to the new format on update. It was using priv->input_buffer as input which is either priv->buffer or a converted version of it. Use priv->buffer instead as priv->input_buffer may no longer be a valid reference. Part-of: <gstreamer/gst-plugins-base!1062>
-
- Feb 26, 2021
-
-
This is a fallout from the conversion to support multiple threads. convert->upsample_p is never NULL now, it's always an allocated array of n_threads potentially-null pointers. Part-of: <gstreamer/gst-plugins-base!1054>
-
- Feb 25, 2021
-
-
gst_rtsp_connection_send_messages_usec in tunneled mode does base64 encode messages. When calculating data_size 1 bytes is added, which results in ending the base64 with a NULL. Part-of: <gstreamer/gst-plugins-base!1053>
-
Otherwise this can silently cause not-negotiated errors without any direct hint about what went wrong. Part-of: <gstreamer/gst-plugins-base!1052>
-
- Feb 24, 2021
-
-
Part-of: <gstreamer/gst-plugins-base!1050>
-
- Feb 19, 2021
-
-
In order to select the streams on GST_MESSAGE_STREAM_COLLECTION, the app needs to send the select-streams event to the decodebin and not to the parsebin. The message should be always owned by the decodebin. Part-of: <gstreamer/gst-plugins-base!1044>
-
- Feb 17, 2021
-
-
Tim-Philipp Müller authored
The caps set on uridecodebin3 via the "caps" property were never passed to the internal decodebin3, so did absolutely nothing. Fixes gstreamer/gst-plugins-base#837 Part-of: <gstreamer/gst-plugins-base!1038>
-
I found a rather reproducible race in a WebKit LayoutTest when a player was intantiated and a VP8/9 video was loaded, then torn down after getting the video dimensions from the caps. The crash occurs during the handling of the first frame by gstvpxdec. The following actions happen sequentially leading to a crash. (MT=Main Thread, ST=Streaming Thread) MT: Sets pipeline state to NULL, which deactivates vpxdec's srcpad, which in turn sets its FLUSHING flag. ST: gst_vpx_dec_handle_frame() -- which is still running -- calls gst_video_decoder_allocate_output_frame(); this in turn calls gst_video_decoder_negotiate_unlocked() which fails because the srcpad is FLUSHING. As a direct consequence of the negotiation failure, a pool is NOT set. gst_video_decoder_negotiate_unlocked() still assumes there is a pool, crashing in a critical in gst_buffer_pool_acquire_buffer() a couple statements later. This patch fixes the bug by returning != GST_FLOW_OK when the negotiation fails. If the srcpad is FLUSHING, GST_FLOW_FLUSHING is returned, otherwise GST_FLOW_ERROR is used. Part-of: <gstreamer/gst-plugins-base!1037>
-
In the non-interleaved case, it made `buffer` writable but then changed the meta of the non-writable buffer. Part-of: <gstreamer/gst-plugins-base!1036>
-
- Jan 30, 2021
-
-
Part-of: <gstreamer/gst-plugins-base!1026>
-
- Jan 28, 2021
-
-
This requires a slight modification to the function itself because it was overwriting a member locally. However, now this side-effect cannot be observed outside the function anymore. Part-of: <gstreamer/gst-plugins-base!1024>
-
- Jan 14, 2021
-
-
Tim-Philipp Müller authored
-
- Jan 13, 2021
-
-
See gstreamer/gst-plugins-base#845 Part-of: <gstreamer/gst-plugins-base!1007>
-
This was only taken care of previously if there was a decoder before. However if previously a decoder was not needed then the ghostpad would've been linked directly to the slot's srcpad. Reconfiguring the slot requires this to be undone so that linking can happen normally. Part-of: <gstreamer/gst-plugins-base!987>
- Jan 12, 2021
-
-
Replace hardcoded 255s with the correct max value for the given color depth. Use 64-bit integer in calculations where overflow may occur. Part-of: <gstreamer/gst-plugins-base!1006>
-
- Jan 05, 2021
-
-
Fixes: gstreamer/gst-plugins-base#854 Part-of: <gstreamer/gst-plugins-base!998>
-
- Jan 04, 2021
-
-
Tim-Philipp Müller authored
Elements operating in pull mode may optionally pass a buffer to pull_range that should be filled with the data. The only element that does that at the moment is oggdemux operating in pull mode. tagdemux currently creates a sub-buffer whenever a buffer pulled from upstream (filesrc, usually) needs to be trimmed. This creates a new buffer, however, so disregards any passed-in buffer from a downstream oggdemux. This would cause assertion failures and playback problems for ogg files that contain ID3 tags at the end. Fixes gstreamer/gst-plugins-base#848 Part-of: <gstreamer/gst-plugins-base!995>
-
- Jan 01, 2021
-
-
The correct way to determine the byte offset at a certain yoffset in a subsampled component is to shift the yoffset by the component's hsub This fixes out-of-bounds memory accesses and visible artefacts, example pipeline with the samples from #802: gst-launch-1.0 compositor name=vmixer sink_1::xpos=1910 sink_1::ypos=1080 ! \ videoconvert ! videorate ! xvimagesink \ filesrc location=VID_20200723_203606.mp4 ! decodebin name=demux1 ! \ queue ! videoflip method=vertical-flip ! vmixer. \ filesrc location=bridgeoverstubbledwater.mp4 ! decodebin name=demux2 ! \ queue ! vmixer. Part-of: <gstreamer/gst-plugins-base!989>
-
- Dec 31, 2020
-
-
Part-of: <gstreamer/gst-plugins-base!993>
-
This situation happens in the situation where an input stream has a framerate exceeding the timeout latency (Ex: 1fps with a latency of 500ms) and an input stream greater than output framerate (ex: 60fps in, 30 fps out). The problem that would happen is that we would timeout, but then buffers from the fast input stream would only be popped out one by one.... until a buffer reaches the low-framerate input stream at which point they would quickly be popped out/used. The resulting output would be "slow ... fast ... slow ... fast" of that input fast stream. In order to avoid this situation, whenever we detect a late buffer, check if there's a next one and re-check with that one. Part-of: <gstreamer/gst-plugins-base!991>
-
- Dec 15, 2020
-
-
Part-of: <gstreamer/gst-plugins-base!978>
-
- Dec 14, 2020
-
-
libvisual api expects a priv data pointer to be passed, though we know its going to be `GstDebugLevel`. ``` ../subprojects/gst-plugins-base/ext/libvisual/plugin.c:33:39: error: cast to smaller integer type 'GstDebugLevel' from 'void *' [-Werror,-Wvoid-pointer-to-enum-cast] GST_CAT_LEVEL_LOG (libvisual_debug, (GstDebugLevel) (priv), NULL, "%s - %s", ``` Part-of: <gstreamer/gst-plugins-base!976>
-
- Dec 11, 2020
-
-
We can't keep the lock otherwise this would lock other actions. In order to keep it safe, we grab a list of peer pads to send EOS to with the lock taken, then send to the peer pads with the lock released. Also make sure the selection lock is taken for another call to this function Fixes gstreamer/gst-plugins-base#847 Part-of: <gstreamer/gst-plugins-base!973>
-
- Dec 06, 2020
-
-
Tim-Philipp Müller authored
-
- Dec 05, 2020
-
-
The sink_query just uses context, other_context and display to query info. But all these objects can be changed or distroyed in state_change() func and other places. This patch is not very perfect. The condition race still exists in other places in this element. All the functions directly access these objects without protection. Most of them are executed when the data is pushing and draw context/window have already been established, so they should not have problems. But the sink_query and propose_allocation functions are the query -like functions and executed in query context, which can be called in any state of the element. So it can cause some crash issues because of destroyed context object. Part-of: <gstreamer/gst-plugins-base!962>
-
We should not return a NULL in transform_caps() function. The NULL will generate a assert of: "transform_caps returned caps which are not a real subset of the filter caps" in transform base class. Part-of: <gstreamer/gst-plugins-base!962>
-
In find_gl_context_unlocked(), the display of filter may be NULL and can cause crash if we directly access and lock it. Part-of: <gstreamer/gst-plugins-base!962>
-
Part-of: <gstreamer/gst-plugins-base!962>
-
GstBuffer is not a GstObject, so this causes a warning to be emitted. Part-of: <gstreamer/gst-plugins-base!961>
-
- Dec 04, 2020
-
-
gstreamer/gst-plugins-base!681 added a layoutSubViews, which never gets called, because it should have been called layoutSubviews (non-capital "v"). However after fixing that, it still doesn't work correctly, because window_width/height values are immediately updated and then draw_cb will never trigger the resize path, because the values are already up to date. Update the values inside the resize path again instead, so the check for entering the resize path is logically always correct. This makes the layoutSubviews unnecessary, as it only updated the internal size values prematurely, so it is deleted instead of method naming fixed. These changes were originally done to avoid accessing UIKit objects on the main thread, but no additional accesses are added here, only internal private variable assignments under the same draw_lock, so there should be no threading issues reintroduced. Part-of: <gstreamer/gst-plugins-base!960>
-
A CGSize contains CGFloat values (a typedef to double or float), which means that the values aren't equal, despite it being equal after they are cast to int by assigning them to window_height/width private members. This leads to excessive gst_gl_window_resize calls on each frame, at least if the CGFloat value has a .5 decimal value, e.g. 103.5. Fix it by storing them as CGFloat instead of gint. Part-of: <gstreamer/gst-plugins-base!960>
-
The exising hardcoded max default does not account for the possible -1 offset when retrieving lines for resampling. As a result, when another chain has the same number of cache lines (4), the resample operation would be attempting to generate 5 lines with a cache size of 4 and would overwrite the first cache line. Fixes gstreamer/gst-plugins-base#821 Part-of: <gstreamer/gst-plugins-base!959>
-
The base class' context may change, we should use the common API with lock to access it, rather than the just directly access the struct field. Part-of: <gstreamer/gst-plugins-base!921>
-
The inside upload and context may have race condition in the function of propose_allocation(). They may be destroyed while this function is stilling using it. Part-of: <gstreamer/gst-plugins-base!921>
-
- Dec 02, 2020
-
-
Part-of: <gstreamer/gst-plugins-base!955>
-