The last frame which has the smallest diff should be consider as
the first choice rather than the golden frame. Especially when only
one reference available, this way can improve the BD rate about 5
percentage.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6379>
Some extreme case such as "videotestsrc pattern=1" can generate pure
white noise videoes, for which encoder may generate too big output
for current coded buffer size. We now consider the qindex and bitrate
to avoid that.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6483>
It might happen that the key event arrives when the d3d11videosink
is stopping. In case of GstD3D11WindowWin32 it can raise a
navigation event even when the sink is already freed, because the
window object's refcount may reach 0 in the window thread. In
other words sometimes the GstD3D11WindowWin32 lives few ms more
then the GstD3D11VideoSink, because it's freed asynchronously.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6476>
In the case of multi-channels transcoding, a context with child
sesseion can be parent for others, so we need to check if the
msdkcontext has any child session in the list to avoid session
leaks. Otherwise, we will see the failure of closing a parent
session because one of its child's child session not released.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6259>
And handle the case of a NULL buffer being returned cleanly, which is
valid as long as a buffer list is returned instead. Previously this
would cause an assertion because of calling gst_buffer_unref() with
NULL.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6460>
The attempt to free the domain data is happeing twice during the ptp deinit.
Once while iterating through the list domain_data and second while iterating
through the list domain_clocks, so this is crashing the application
trying to gst_ptp_deinit
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6443>
If we can calculate timestamps for buffers, then set the duration
on outgoing buffers based on the number of samples depayloaded.
This can fix the muxing to mp4, where otherwise the last packet
in a muxed file will have 0 duration in the mp4 file.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6447>
Calling gst_pad_peer_query_caps() without a filter can give us EMPTY caps, whereas all the code below
assumes that's not the case. Replacing query+intersect with a filtered query ensures we always get a subset
of the template caps back.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6429>
There was a potential busy loop occuring because when we were taking
data from the internal ccbuffer, we were not resetting which field had
written data. This would mean that the next time data was retrieved
from ccbuffer, it was always from field 0 and never from field 1.
This only affects usage of cc_buffer_take_separated() which is only used
by cdp->raw cea608.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6423>
Fixes this error:
dav1d| Subproject dav1d finished.
gst-plugins-rs| WARNING: Subproject 'dav1d' did not override 'dav1d' dependency and no variable name specified
gst-plugins-rs| Dependency dav1d from subproject subprojects/dav1d-1.4.1 found: NO
subprojects/gst-plugins-rs/meson.build:382:14: ERROR: Dependency 'dav1d' is required but not found.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6436>
Some driver doesn't implement enum_framesize. The maximum supported
size can be got by trying format with a very large size. Also need
to set max_width/max_height for this case, otherwise default encoded
buffer size 256kB is too small.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6416>
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>
The --atleast-version implies --exists, but the implementation in
earlier commits had the version check applied any time the --exists was
checked, and the default value of the major and minor versions were set
to the GStreamer major and minor versions. The resulting behavior would
have gst-inspect return '1' if the plugin's version didn't match
gstreamer's even when --atleast-version was not specified in the command
line args. The change in this patch removes that behavior and adds
tests to verify that if --exists is specified WITHOUT --atleast-version
the version check will NOT be applied. If both arguments are specified
and the version does not match the arg-supplied version number, a new
return code of '2' is used to uniquely identify the failure.
Fixes#3246
Signed-off-by: Thomas Goodwin <thomas.goodwin@laerdal.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6191>
In an early non-linked scenario, this was causing a ton of criticals about the queue array,
because the output callback would still fire for leftover frames that were still being processed by VT
at the time the output loop stopped. This makes sure they're flushed correctly as well.
Also renames gst_vtdec_loop to gst_vtdec_output_loop for consistency with related functions.
wip
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6397>
Sometimes a call to negotiate (and thus drain) can happen from the output loop
(via finish_frame()), which will tell VT to output all internal frames, but that won't succeed
if we happen to decide to wait for the queue to empty (because the loop is waiting for draining to finish and
will not make space in the queue!). This commit adds an override for the queue size limit if we're draining/flushing.
This bug could happen for any formats, but was especially obvious for ProRes, which has dpb_size of 0.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6397>
Because ID3D12Device objects are singletons per adapter,
GstD3D12Device was following the API design, that is, keep track
of global GstD3D12Device objects and reuses it.
That means ID3D12Device object can be released at the time
when GstD3D12Device is destroyed.
But exetrnal APIs such as NVENC does not seem to be happy
with the released ID3D12Device, that could be a driver bug though.
Let's hold already opened ID3D12Device permanently without releasing
it for now.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6395>
`on_error()` can be called with a NULL details structure, so in that situation
the `gst_structure_copy()` would raise a critical warning. Create an empty
structure instead of attempting to copy a NULL one.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6385>
In order to simplify caps negotiations for clients and, notably, be more
compatible with va* decoders.
Crucially this allows clients to know ahead of time whether buffers will
actually be DMABufs.
Similar to GstVaBaseDec we only announce system memory caps if the peer
has ANY caps. Further more, and again like va decoders, we fail in
`decide_allocation()` if DMA_DRM caps are used without VideoMeta.
Apart from buggy peers this can happen e.g. when a peer with ANY caps
is used in combination with caps filters.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
Most importantly rely on video info helpers instead of manual parsing
of caps, which will allow us to use additional helpers in the future.
While on it, tighen the check for supported formats - failing that
indicates a bug in caps negotiation - and make some style changes.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
This ensures we don't create filter caps that are not supported by the
individual codec implementations, as well as that the resulting caps
have the required fields so they can be turned into a GstVideoFormat.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5890>
This is the maximum amount supported by aacenc. 8-channel output fully works.
16-channel also encodes fine, but codec-utils isn't able to parse its channel config,
so output level will not be shown in caps. For that to work, GASpecificConfig parsing
needs to be implemented. It's not a critical issue and can be worked on at a later date.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6359>
When this error gets caught the GstD3D11Device object raises the new
"device-removed" signal. This allows to handle the error from outside:
stop the playback, re-create the player, replace the catched GstContext by
the new one.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6193>
Adds the `atenc` element capable of encoding AAC-LC audio, using the AudioToolbox framework.
It's able to encode up to 7.1 channel configurations.
Comes with basic knobs for rate control (bitrate for CBR, quality for VBR).
Support for more profiles (LD, HE-AAC) should be simple, but is not included here because of bugs
with parsing of the AudioSpecificConfig.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6254>
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>
Do not chain up to parent's GstBufferPool::start() which will do
preallocation. We don't want it to be preallocated
since there are various cases where negotiated downstream buffer pool is
not used at all (e.g., zero-copy decoding, IPC elements).
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6326>
This fixes a crash in `gst_va_h264_enc_class_init` and `gst_va_h265_enc_class_init`
(and probably also in gst_va_av1_enc_class_init) when calling
`g_object_class_install_properties (object_class, n_props, properties);`
When rate_control_type is 0, the following code is executed in :
```
} else {
n_props--;
properties[PROP_RATE_CONTROL] = NULL;
}
```
n_props has initially a value of N_PROPERTIES but PROP_RATE_CONTROL
is not the last element in the array, so it's making
g_object_class_install_properties fail to iterate over the
properties array.
This applies the same fix to gstvah264enc.c, gstvah265enc.c and
gstvaav1enc.c.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6319>
On systems using UsrMerge (like openSUSE or Fedora), /lib64 is
a symlink to /usr/lib64. So dladdr is returning the path to
the gstreamer library in /lib64 in priv_gst_get_relocated_libgstreamer.
Later gst_plugin_loader_spawn tries to build the path to the
gst-plugin-scanner helper from /lib64 and ends up trying to use
/lib64/../libexec/gstreamer-1.0/gst-plugin-scanner which doesn't exist.
By canonicalizing the path with a call to realpath, gst-plugin-scanner
is found correctly under
/usr/lib64/../libexec/gstreamer-1.0/gst-plugin-scanner
Similar change applied to gstreamer/libs/gst/net/gstptpclock.c
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6322>
This matches autoplug in other places such as decodebin, otherwise we
will pick "randomly" based on the order in which plugins are
registered, which is mostly dependent on the order in which readdir()
returns items.
So let's make it predictable.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6227>
osxaudio has a few helper methods potentially useful in atdec (or future atenc), like GStreamer -> CoreAudio
channel mapping. Doesn't make sense to duplicate them in applemedia, and atdec is the only audio-oriented
element there anyway.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6223>
Cea608 (valid) padding removal is available on the input side of ccconverter
or configurable on cccombiner. cccombiner can now configure whether
valid or invalid cea608 padding is used and for valid padding, how long
after valid non-padding to keep sending valid padding.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6300>
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>
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>
Since commit 4d86f994, when setting an RTSP media both shared and
reusable, streaming cannot be restarted after the first time all the
clients disconnect. That happens because the sockets (unlike
addresses) of GstRTSPStream are not cleared in
gst_rtsp_stream_leave_bin, and on restart sockets and addresses are
not allocated in gst_rtsp_stream_allocate_udp_sockets, and then the
check in create_sender_part fails. Fix this by clearing sockets in
gst_rtsp_stream_leave_bin.
Fixesgstreamer/gst-rtsp-server#113
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6325>
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>
With the new copy_opaque system, the corresponding frame is stored in the
picture opaque ref.
This also handles the case where the "regular" opaque might be empty in the
case of "DECODE_ONLY" frames, since it that field is set in `get_buffer2()`
which might not be called for those frames
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6301>
When we're doing a state change from PLAYING to NULL, first we invoke
gst_rtspsrc_loop_send_cmd_and_wait (..., CMD_CLOSE, ...) during
PAUSED_TO_READY which will schedule a TEARDOWN to happen async on the
task thread.
The task thread will call gst_rtspsrc_close(), which will send the
TEARDOWN and once it's complete, it will call gst_rtspsrc_cleanup()
without taking any locks, which frees src->streams.
At the same time however, the state change in the app thread will
progress further and in READY_TO_NULL it will call gst_rtspsrc_stop()
which calls gst_rtspsrc_close() a second time, which accesses
src->streams (without a lock again), which leads to simultaneous
access of src->streams, and a segfault.
So the state change and the cleanup are racing, but they almost always
complete sequentially. Either the cleanup sets src->streams to NULL or
_stop() completes first. Very rarely, _stop() can start while
src->streams is being freed in a for loop. That causes the segfault.
This is unlocked access is unfixable with more locking, it just leads
to deadlocks. This pattern has been observed in rtspsrc a lot: state
changes and cleanup in the element are unfixably racy, and that
foundational issue is being addressed separately via a rewrite.
The bandage fix here is to prevent gst_rtspsrc_stop() from accessing
src->streams after it has already been freed by setting src->state to
INVALID.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6302>
The transport stream only returned the CAPS for the first matching PT entry
from the `ptmap`. Other SSRC with the same PT where not included. For a stream
which bundled multiple audio streams for instance, only the first SSRC was
knowed to the SSRC demux and downstream elements.
This commit adds all the `ssrc-` attributes from the matching PT entries.
The RTP jitter buffer can now find the CNAME corresponding its SSRC even if it
was not the first to be registered for a particular PT.
The RTP PT demux removes `ssrc-*` attributes cooresponding to other SSRCs
before pushing SSRC specific CAPS to downstream elements.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6119>
And also re-timestamp them with the current buffer's PTS.
Not doing so keeps the timestamps of event packets as
GST_CLOCK_TIME_NONE or the timestamp of the previous buffer, both of
which are bogus.
Making sure that (especially) the first packet has a valid timestamp
allows putting e.g. the NTP timestamp RTP header extension on it.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5173>
Parse the speed and scale in the server's response
*before* the range, so that the range start/stop
are swapped (or not swapped) correctly based
on the server's actual chosen values. Otherwise,
the old rate from the segment is used - what the
last seek asked for, but not necessarily what
the server chooses.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6248>
In the situation where playback starts from a keyframe before
the target playback segment, then the first buffers will be
outside the configured segment and gst_segment_to_stream_time()
will return GST_CLOCK_TIME_NONE unconditionally.
If drop-out-of-segment is false, the RTP buffers will not be
dropped, but will be sent witout ONVIF extension timestamps
and given GST_CLOCK_TIME_NONE timestamps on the receiver.
Instead, use gst_segment_to_stream_time_full() to extrapolate
stream time outside the segment so that such buffers still
get assigned their correct timestamps on the receiver.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6248>
Don't accidentally include the stuffing byte (if present)
into the bottom field size. It should only be included in the
total segment length.
Fixes problems with FFmpeg not rendering the subtitles
with a stuffing byte, giving a "Invalid object location!" error.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6250>
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>
Don't use g_return_val_if_fail() to catch the
open-ended segment or empty segment cases in
gst_segment_to_running_time_full()
g_return_val_if_fail() is for programmer errors,
and can be compiled out with a flag.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6219>
Provide a clock from the source that is a monotonic system clock with
the rate corrected based on the measured and ideal capture rate of the
frames.
If this clock is selected as pipeline clock, then provide perfect
timestamps to downstream.
Otherwise, if the pipeline clock is the monotonic system clock, use the
internal clock for converting back to the monotonic system clock.
Otherwise, use the monotonic system clock time calculated in the above
case and convert that to the pipeline clock.
In all cases this will give a smoother time than the previous code,
which simply took the difference between the driver provided capture
time and the current real-time clock time, and applied that to the
current pipeline clock time.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6208>
Otherwise there's a small window between querying the state and doing
the transfer in which a frame could be dropped, and we would then output
the frame right after the dropped one as if it was the dropped frame.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6208>
In low delay B mode, the P frame is converted as B frame with forward
references. For example, One P frame may refers to P-1, P-2 and P-3 in
list0 and refers to P-3, P-2 and P-1 in list1.
So the num in list0 and list1 does not reflect the forward_num and
backward_num. The vaapi does not provide ref num for forward or backward
so far. In this case, we just consider the backward_num to be 1 conservatively.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6249>
In b_pyramid mode, B frames can be ref and prevPicOrderCntLsb can
be the B frame POC which is smaller than the P frame. This can cause
POC diff bigger than MaxPicOrderCntLsb/2 and generate wrong POC value.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6249>
Gets being released memory back to queue even if allocator is flushing
in order to count the number of outstanding memory objects.
Also, clear queue if there's no outstanding memory object and
allocator is flushing
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6240>
Making it possible to properly handle compositors that have those
properties as doubles and handle antialiasing.
Internally we were handling those values as doubles in framepositioner,
so expose new properties so user can set values as doubles also.
This changes the GESFramePositionMeta API but we are still on time for 1.24
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6241>
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>
Syncrhonizing buffer commits to the streaming thread can lead to
dropped frames when frame callbacks are not processed before the
next frame is ready for rendering. Depending on the drift between
the wayland compositor and buffer source timings, this can lead to
periods of significant frame drop, especially when the media frame
rate is close to the display frame rate.
Cache buffers in the streaming thread and peform commits on the
display thread to eliminate the buffer commit racing.
The implementation is the same for both waylandsink and gtkwaylandsink,
so move it to the common wayland library under gst-lib.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6133>
Add synchonized versions of wl_display_sync() and wl_callback_destroy()
that will ensure that to callbacks can be managed in a thread safe way
on the display queue even when they are dispatched from a separate
thread.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6133>
Unprepare method posts WM_GST_D3D11_DESTROY_INTERNAL_WINDOW
command to the window queue, and from that moment considers
internal_hwnd to be released, and so it sets it to null.
The problem is that it's possible that right at that moment
the window thread might be already processing some other
command, or just another command might be already in the queue.
On practice we met a crash when WM_PAINT got processed in between
(unprepare already finished and WM_GST_D3D11_DESTROY_INTERNAL_WINDOW
was not handled yet)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6187>
In the case where the queue shrinks due to a property change and the queue
becomes full, we would set the waiting_del flag, which would prevent posting the
100% buffering message on the bus. Since the pipeline is not aware of the new
buffering value, in the common case where the pipeline is paused during
buffering, it would never resume.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
Remove the percent_changed check to determine whether a buffering message should
be posted. The check on the last posted buffering value is sufficient, and the
removal doesn't introduce additional complexity.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6165>
If input height and parsed one are identical, do not consider it as interlaced
Fixing below pipeline:
gst-launch-1.0 videotestsrc ! video/x-raw,format=I420,width=640,height=10 \
! jpegenc ! jpegparse ! jpegdec ! videoconvert ! autovideosink
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6181>
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>
When the conversion is only caps feature from memory:VAMemory to system memory,
it's possible to optimize by doing a pseudo pass-through since the va-backed
buffers are the same for system memory buffers.
This change will also mitigates #2940
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6174>
If the allocation query received from downstream doesn't handle GstVideoMeta but
it requests memory:DMABuf caps feature, it's incomplete, so we rather reject the
negotiation.
Both in base decoder, base transform and compositor.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6155>
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>
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>
This is a simplification of the venerable
gst_va_base_dec_get_preferred_format_and_caps_features() function, which
predates since gstreamer-vaapi. It's used to select the format and the
capsfeature to use when setting the output state. It was complex and hard to
follow. This refactor simplifies a lot the algorithm.
The first thing to remove _downstream_has_video_meta() since, most of the time
it will be called before the caps negotiation, and allocation queries make sense
only after caps negotiation. It might work during renegotiation but, in that
case, caps feature change is uncommon. Better a simple and common approach.
Also, for performance, instead of dealing with caps features as strings, GQuarks
are used.
The refactor works like this:
1. If peer pad returns any caps, the returned caps feature is system memory and
looks for a proper format in the allowed caps.
2. The allowed caps are traversed at most 3 times: one per each valid caps
feature. First VAMemory, later DMABuf, and last system memory. The first to
match in allowed caps is picked, and the first format matching with the
chroma is picked too.
Notice that, right now, using playbin videoconvert never return any.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6154>
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>
If we drop all messages with the same clock id as ours we will also
drop all messages coming from a PTP clock on our host since both clock
ids are build from the same MAC address.
At least for Linux we do not see our own messages anyway since the
network stack can well distinguish between multicast send from our
socket or from another socket on the same machine. To make sure that
this works for all supported platforms just drop delay requests since
this is the only message that is sent from the GStreamer PTP clock.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6172>
If we don't specify a path for loading, the runtime linker will search
for the library instead, which will use the usual mechanisms: RPATHs,
LD_LIBRARY_PATH, PATH (on Windows), etc.
Also try harder to load a non-devel libpython using INSTSONAME, if
available.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6159>
After a flushing seek, rtspsrc doesn't reset the last_ret value for
streams, so might immediately shut down again when it resumes pushing
buffers to pads due to a cached `GST_FLOW_FLUSHING` result
Prevent a stored flushing value from immediately stopping
playback again by resetting pad flows before (re)starting
playback.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6137>
This can be used to store informational messages, errors or
warnings which can later be shown to the user in gst-inspect-1.0,
which can be useful for plugins that expose elements dynamically
based on external libraries or hardware capabilities.
Status messages can then provide an indication as to why a
plugin doesn't have any elements listed, for example.
Plus unit test to make sure code paths are exercised a little.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3832>
This inherits from the same rule as gst_buffer_add_meta
```
gst-mpegtspesmetadatameta.h:98: Warning: GstMpegts:
gst_buffer_add_mpegts_pes_metadata_meta: return value: Invalid non-constant
return of bare structure or union; register as boxed type or (skip)
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6146>
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
Because this depayloader may build several output buffers within one
process run we push them all into a GstBufferList and push them out at
once to make sure that each buffer gets notified about each header
extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
Because this depayloader may build several output buffers within one process
run we push them all into a GstBufferList and push them out at once to
make sure that each buffer gets notified about each header extension.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5378>
This reverts questionable commit 009bc15f33
which looks completely wrong.
The GstWasapi2RingBuffer:buffer_size variable is used to
calculate available buffer size we can write
(i.e., available size = buffer_size - padding_size).
But the commit makes the size to be exactly same as buffer period.
Then, it can confuse this element as if the endpoint buffer is full on
I/O event callback (if padding size is equal to buffer period)
but it's not true.
Fixes: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2870
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6132>
- Add the missing field parameter and put the output parameter at the
end.
- Use a switch to verify valid values instead of hard-to-follow range
checks.
- Don't consider bad values a programming error, just a regular failure.
- Set all data fields at the end so we can pass a pointer to an
uninitialized structure without GCC complaining.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5450>
The global semaphore was never closed/unlinked, causing permission
denied issue if the device is later used by another user. Properly
removing the semaphore when stopping the pipeline would still leave it
open in case of a crash.
With a GStreamer specific name, it was also not preventing other apps to access
the device concurrently.
Finally, if the system has multiple cards, the lock should be per card
and not global (to be confirmed).
Fixes: #3283.
Sponsored-by: Netflix Inc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6117>
MaxDpbSize specified in A.4.2 tells upper bound of decoded picture
buffer size but does not tell actual required size.
Use max_dec_pic_buffering value as a dpb size. Some backends
such as DXVA and NVDEC might require pre-allocated DPB buffer
and unnecessary large DPB size will result in waste of GPU memory.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6101>
In rtpbin we already systematically check for all property names
except latency, correct that.
In webrtcbin we need to check before trying to use the do-retransmission
property.
This is useful for the case where an element like identity gets passed
to rtpbin's request-jitterbuffer property, when the application wants
to use webrtcbin in an SFU situation, with no reordering and no added
latency
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6112>
When allocating buffers with alignment parameters specified, it
may be necessary to overallocate memory to adjust to the requested
alignment. Previously the padding length was not included in the mmaped
buffer size, leaving unmapped bytes at the end of the buffer.
This caused intermittent SEGV faults and valgrind failures when running
the wayland_threads example.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6104>
The srt unittest test_src_listener_sink_call will sometimes fail under
valgrind with the following splat:
Memcheck, a memory error detector
Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
Parent PID: 14579
HEAP SUMMARY:
in use at exit: 799,848 bytes in 2,182 blocks
total heap usage: 64,090 allocs, 61,908 frees, 37,891,032 bytes allocated
120 bytes in 1 blocks are definitely lost in loss record 1,563 of 1,681
at 0x4842FF5: operator new(unsigned long) (vg_replace_malloc.c:422)
by 0x6031E29: srt::sync::SetThreadLocalError(CUDTException const&) (sync_posix.cpp:461)
by 0x5FCD77E: CUDT::epoll_wait(int, std::set<int, std::less<int>,
std::allocator<int> >*, std::set<int, std::less<int>,
std::allocator<int> >*, long, std::set<int, std::less<int>,
std::allocator<int> >*, std::set<int, std::less<int>, std::allocator<int> >*) [clone .cold] (api.cpp:3796)
by 0x5FE2F79: UDT::epoll_wait2(int, int*, int*, int*, int*, long, int*, int*, int*, int*) (api.cpp:4277)
by 0x5F0C626: gst_srt_object_read (gstsrtobject.c:1569)
by 0x5F0F978: gst_srt_src_fill (gstsrtsrc.c:180)
by 0x5F5A2A1: gst_base_src_default_create (gstbasesrc.c:1620)
by 0x5F5C9AE: gst_base_src_get_range (gstbasesrc.c:2630)
by 0x5F5EF5A: gst_base_src_loop (gstbasesrc.c:2959)
by 0x4918B13: gst_task_func (gsttask.c:399)
by 0x4A60B33: g_thread_pool_thread_proxy.lto_priv.0 (gthreadpool.c:354)
by 0x4A5DC41: g_thread_proxy (gthread.c:826)
by 0x4F532A4: start_thread (pthread_create.c:481)
by 0x4C71322: clone (clone.S:95)
An issue has been started against libsrt here:
https://github.com/Haivision/srt/issues/2867
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6098>
External plugin loader support for Windows is introduced
in this dev cycle. Since helper binary was not required (useless)
before this version, people may not ship the binary
with new GStreamer version, then they will observe warning message.
Instead of displaying the warning at plugin loading time,
checks helper bin earlier and disable external plugin loader
if helper binary is not installed.
Fixes: https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/448
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6083>
According to recommendation from MS, IDXGIOutputDuplication::ReleaseFrame()
needs to be called just before IDXGIOutputDuplication::AcquireNextFrame()
for performance reasons, so that driver can accumulate dirty rects
and update texture at once. But it seems to cause choppy output.
Do release acquired frame immediately once processing done,
like d3d11 implementation does.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6092>
* Bump the rank of the musepack v7/v8 FFmpeg demuxers to SECONDARY
* Bump the rank of the musepack v7/v8 FFmpeg audio decoders to SECONDARY
* Demote the rank of the musepackdec element to MARGINAL
This is for two reasons:
* The musepack library is no longer maintained, whereas the FFmpeg
implementation can/will receive fixes
* The `musepackdec` implementation was a all-in-one "parsing and decoding" blob
which doesn't play nicely with decodebin3 and others
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3033
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6074>
Sends a gap event if nothing to output for a given input buffer.
For example, an input buffer might not contain any caption data
for downstream requested field, then we need to inform downstream
of the case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6073>
WebKit commit b12e7ed2ad3a ("[WPE] Upstream the new WPE platform API
https://bugs.webkit.org/show_bug.cgi?id=265286")[1] added a `WPEView` typedef
which clashes with our `WPEView` class.
Rename the `WPEView` class to `GstWPEThreadedView` to avoid the collision.
Also prefix the `WPEContextThread` class with `Gst` and rename the
source files to reflect the new class name and use lowercase while at it
for consistency
[1] b12e7ed2ad
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6065>
Previously, the path lock was held even while issuing caps queries to
other elements. This can lead to deadlocks in more complex pipelines.
Avoid this by reworking gst_switch_bin_get_allowed_caps() to acquire
references to switchbin paths and then releasing the path lock.
Subsequent operations in that function then act on the acquired
references, thus eliminating the need for holding the path lock for
the entirety of that function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
The caps query specifies _all_ caps that the element can handle, not just
caps from the current path element. If for example a switchbin has two
paths, with one having an element that handles video/x-h264, and another
path whose element handles video/x-raw, and the second path is the
current path, then the existing code would report only video/x-raw as
supported. Fix this by report all allowed caps, even if there is a
current path defined.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
The rationale is that a passthrough path (= one with no element) behaves
as if the switchbin's sink- and srcpad were one. In particular, internal
caps queries (needed for computing the allowed caps) then go to the peers
instead to path elements. Rework gst_switch_bin_get_allowed_caps () for
a clear handling of NULL path elements and for proper dataflow passthrough
and caps & accept-caps query handling.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
The drop probe was present in early switchbin versions to implement paths
that drop dataflow. However, this feature turned out to be too problematic
and thus was removed. Some bits remained though. This commit removes those
bits and clarifies that in the current switchbin version, a NULL path
element instead means passthrough.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4632>
It was adding and subtracting the segment base here and there, but it
was also doing so incorrectly, leading to various calculation errors.
Fixed a few bugs uncovered, related to getting a new segment:
* If we reset base_ts/next_ts/out_frame_count, also reset prevbuf
* Only do so if the new segment is different than the previous one
Also replaced a few occurrences of GST_BUFFER_TIMESTAMP with
GST_BUFFER_PTS for consistency.
Integrated the tests of
https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2186
, now passing. The test_segment_update_same test had to be fixed,
because it was wrongly assuming that we would not fill the gap inside
the new-but-same segment.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6031>
If the current segment has a configured stop point, detect
when when pad timestamps proceed past that point and mark
them as EOS. Otherwise, tsdemux continues streaming
the whole input downstream (unless something downstream detects
and returns EOS for us)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6023>
Use string parsing instead of pointer arithmetic, which makes the code
easier to understand and less error-prone. This has no functional
changes, and is preparation for the next commit, which extends the
header parsing.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5997>
If the allocation function get called from multiple threads at the same time,
multiple allocators may get created but only one get saved. Leading to other
allocators to be leaked. Simply create it once in the instance initialization.
Fixes: #2456
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6052>
Fence data could hold GstD3D12Device directly or indirectly.
Then if it's holding last refcount, the device object will
be released from the device object's internal thread,
and will try join self thread.
Delegates it to other global background thread to avoid
self thread joining.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6042>
The libwebp API doesn't match very well with the GstVideoEncoder
API, as it only delivers an unframed bitstream once all pictures
have been processed, which means we can only push a single buffer
manually on our srcpad on finish().
Supporting animated webp is still valuable, and the feature is
behind an opt-in property.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5994>
The `imp` module got removed in python 3.12 and the `importlib` module should be
used instead.
This is also a good excuse to switch to the new finder module from PEP 451 :
https://www.python.org/dev/peps/pep-0451/
This only requires implement the `find_spec()` method in our custom loaders
Co-authored-by: Stefan <107316-stefan6419846@users.noreply.gitlab.freedesktop.org>
Co-authored-by: Jordan Petrids <jordan@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5633>
Timeline StreamCollection are very specific to inner working of nested
timelines and should not interfere with the usual stream selection
process and are now handled as element messages.
Stream selection inside `nleobject` need to be handled internally by the
application or GES itself so we should just drop all those as they would
interfere and fail if they are exposed to other elements.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5983>
- gst_analytics_cls_mtd_get_length() return a gsize, this type dicated index
type for gst_analytics_cls_mtd_get_quark() and
gst_analytics_cls_mtd_get_level().
- Minor cleanup/improvement on index validation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6018>
- Support HTTP redirect codes (301,302,307,308) on response to GET.
"Location" field is extracted and used for following GET and POST.
- Notify caller a redirect took place using return value
- log source and destination url on redirect
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5222>
videoconvertscale advertises `ANY` feature, but it supports it only
in passthrough. Our goal with autoconvert is to ensure that conversion
is possible with the elements that are being plugged so we avoid
plugging `videoconvertscale` if the memory type is not system memory.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/899>
Instead of letting all the elements that were added into the bin,
add them only when strictly needed and removed them when we stop using
them.
With previous refactoring we are keeping them in our own hashmap in
amy case so we can keep reusing the same elements as before.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/899>
We used to conside elements that were subclassses of another
element type as being the same (for example with videoconvertscale,
bother videoconvert and videoscale are subclasses of videoconvertscale
and that code was lost)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/899>
Removes the usage of [NSApp terminate] to avoid killing the process and thus never actually returning a value.
The new way is just to use [NSApp stop] and send an event, since stop only happens after an event is processed.
Unlike terminate, stop will only halt the event loop, not the whole process.
This uses an NSApplicationDelegate to listen for NSApp finishing the launch process, and then signals the 'main' thread
to proceed. That makes sure to never call [NSApp stop] before NSApp is actually running, which could happen if the
provided 'main' function finished quickly enough.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6005>
decodebin(3) runs a scheduling query before pads are activated which
ultimately triggers basesrc->start which will automatically call
`gst_base_src_start_complete` for any source that is not marked as
'async'. This calls will harmlessly bail out in `not_activated_yet`
so we should not warn in that case.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6011>
The output of VP9 and AV1 encoder is a little different from the H264
and H265 encoder, it may contain repeat frames and so the output frame
number may be more than the input. We need to call finish_subframe()
when some frame will be repeated later. So we need to extend the
current prepare_output() virtual function.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3015>
Converting from RGB to YUV: When comparing the info.colorimetry to
GST_VIDEO_COLORIMETRY_BT709 it does not make sense to look at the input
signal because that is of type of RGB. The plugin needs to look at the
output YUV-type and compare GST_VIDEO_COLORIMETRY_BT709 to that, because
that is the YUV-type the plugin needs to convert input-RGB into.
Converting from YUV to RGB: Comparing to the input is correct, but because
here the color encoding info BT601/BT709 is on input side of the plugin.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5998>
In the following backtrace for the deadlock, we can see that:
- In T8 `uridecodebin3` is exposing a new pad, in `pad_added_cb`,
`playbin3` is trying to get `GST_PLAY_BIN3_LOCK` in the callback. This
threads holds its `SELECTION_LOCK` in F17 `reconfigure_output_stream`,
which is looks right `decodebin3` is handling its selection state
in that code path
- In T7 `playbin3` holds the `GST_PLAY_BIN3_LOCK` when calling
`gst_element_post_message` in `gst_play_bin3_send_event` which is
not necessary in that section of the code.
``` bt
Thread 8 (Thread 0x7f0b78ee36c0 (LWP 2952467) "multiqueue0:src"):
#0 futex_wait (private=0, expected=2, futex_word=0x1fa6d60) at ../sysdeps/nptl/futex-internal.h:146
#1 __GI___lll_lock_wait (futex=futex@entry=0x1fa6d60, private=0) at lowlevellock.c:49
#2 0x00007f0b858cd46a in lll_mutex_lock_optimized (mutex=0x1fa6d60) at pthread_mutex_lock.c:48
#3 ___pthread_mutex_lock (mutex=0x1fa6d60) at pthread_mutex_lock.c:128
#4 0x00007f0b7e665720 in pad_added_cb (uridecodebin=0x1fb4050, pad=0x7f0b54022060, playbin=0x1fb00e0) at ../subprojects/gst-plugins-base/gst/playback/gstplaybin3.c:2463
#5 0x00007f0b85c00060 in g_closure_invoke (closure=0x1fa9eb0, return_value=0x0, n_param_values=2, param_values=0x7f0b78ee1dd0, invocation_hint=0x7f0b78ee1d50) at ../gobject/gclosure.c:832
#6 0x00007f0b85c2cf66 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x1c5bf30, detail=detail@entry=0, instance=instance@entry=0x1fb4050, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7f0b78ee1dd0) at ../gobject/gsignal.c:3796
#7 0x00007f0b85c1d4da in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7f0b78ee1f90) at ../gobject/gsignal.c:3549
#8 0x00007f0b85c1d6f3 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3606
#9 0x00007f0b85e20c3e in gst_element_add_pad (element=0x1fb4050, pad=0x7f0b54022060) at ../subprojects/gstreamer/gst/gstelement.c:802
#10 0x00007f0b7e632620 in add_output_pad (dec=0x1fb4050, target_pad=0x7f0b6400fda0) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:717
#11 0x00007f0b7e632788 in db_pad_added_cb (element=0x1fb8020, pad=0x7f0b6400fda0, dec=0x1fb4050) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:736
#12 0x00007f0b85c00060 in g_closure_invoke (closure=0x1fb7fc0, return_value=0x0, n_param_values=2, param_values=0x7f0b78ee2300, invocation_hint=0x7f0b78ee2280) at ../gobject/gclosure.c:832
#13 0x00007f0b85c2cf66 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x1c5bf30, detail=detail@entry=0, instance=instance@entry=0x1fb8020, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7f0b78ee2300) at ../gobject/gsignal.c:3796
#14 0x00007f0b85c1d4da in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7f0b78ee24c0) at ../gobject/gsignal.c:3549
#15 0x00007f0b85c1d6f3 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3606
#16 0x00007f0b85e20c3e in gst_element_add_pad (element=0x1fb8020, pad=0x7f0b6400fda0) at ../subprojects/gstreamer/gst/gstelement.c:802
#17 0x00007f0b7e6260b4 in reconfigure_output_stream (output=0x7f0b5400def0, slot=0x7f0b64013dd0, msg=0x7f0b78ee26b8) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c:3086
#18 0x00007f0b7e623700 in check_slot_reconfiguration (dbin=0x1fb8020, slot=0x7f0b64013dd0) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c:2455
#19 0x00007f0b7e623e62 in multiqueue_src_probe (pad=0x7f0b6001e600, info=0x7f0b78ee2930, slot=0x7f0b64013dd0) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c:2544
#20 0x00007f0b85e53aaa in probe_hook_marshal (hook=0x7f0b74040500, data=0x7f0b78ee28c0) at ../subprojects/gstreamer/gst/gstpad.c:3669
#21 0x00007f0b85c88a3e in g_hook_list_marshal (hook_list=0x7f0b6001e698, may_recurse=1, marshaller=0x7f0b85e53786 <probe_hook_marshal>, data=0x7f0b78ee28c0) at ../glib/ghook.c:674
#22 0x00007f0b85e541be in do_probe_callbacks (pad=0x7f0b6001e600, info=0x7f0b78ee2930, defaultval=GST_FLOW_OK) at ../subprojects/gstreamer/gst/gstpad.c:3853
#23 0x00007f0b85e5ac9c in gst_pad_push_event_unchecked (pad=0x7f0b6001e600, event=0x7f0b64002120, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5538
#24 0x00007f0b85e54bc2 in push_sticky (pad=0x7f0b6001e600, ev=0x7f0b78ee2a60, user_data=0x7f0b78ee2ac0) at ../subprojects/gstreamer/gst/gstpad.c:4057
#25 0x00007f0b85e4a13c in events_foreach (pad=0x7f0b6001e600, func=0x7f0b85e54a8e <push_sticky>, user_data=0x7f0b78ee2ac0) at ../subprojects/gstreamer/gst/gstpad.c:613
#26 0x00007f0b85e54f91 in check_sticky (pad=0x7f0b6001e600, event=0x7f0b64002120) at ../subprojects/gstreamer/gst/gstpad.c:4116
#27 0x00007f0b85e5b65e in gst_pad_push_event (pad=0x7f0b6001e600, event=0x7f0b64002120) at ../subprojects/gstreamer/gst/gstpad.c:5706
#28 0x00007f0b7e5888e7 in gst_single_queue_push_one (mq=0x1fbb000, sq=0x7f0b64013b70, object=0x7f0b64002120, allow_drop=0x7f0b78ee2c3c) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2068
#29 0x00007f0b7e58a1bc in gst_multi_queue_loop (pad=0x7f0b6001e600) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2347
#30 0x00007f0b85e96a36 in gst_task_func (task=0x7f0b64016050) at ../subprojects/gstreamer/gst/gsttask.c:399
#31 0x00007f0b85e97e41 in default_func (tdata=0x7f0b640138d0, pool=0x1fbe9c0) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#32 0x00007f0b85cd1ab2 in g_thread_pool_thread_proxy (data=<optimized out>) at ../glib/gthreadpool.c:352
#33 0x00007f0b85ccc982 in g_thread_proxy (data=0x7f0b6006f640) at ../glib/gthread.c:831
#34 0x00007f0b858ca12d in start_thread (arg=<optimized out>) at pthread_create.c:442
#35 0x00007f0b8594bbc0 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
Thread 7 (Thread 0x7f0b7a7646c0 (LWP 2952434) "multiqueue3:src"):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f0b85cf470c in g_mutex_lock_slowpath (mutex=0x1fb81d0) at ../glib/gthread-posix.c:1494
#2 0x00007f0b7e6281a2 in gst_decodebin3_send_event (element=0x1fb8020, event=0x7f0b6800a650) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c:3561
#3 0x00007f0b85e23ca3 in gst_element_send_event (element=0x1fb8020, event=0x7f0b6800a650) at ../subprojects/gstreamer/gst/gstelement.c:1994
#4 0x00007f0b7e63806b in gst_uri_decodebin3_send_event (element=0x1fb4050, event=0x7f0b6800a650) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:2227
#5 0x00007f0b85e23ca3 in gst_element_send_event (element=0x1fb4050, event=0x7f0b6800a650) at ../subprojects/gstreamer/gst/gstelement.c:1994
#6 0x00007f0b7e66375a in gst_play_bin3_send_event (element=0x1fb00e0, event=0x7f0b6800a650) at ../subprojects/gst-plugins-base/gst/playback/gstplaybin3.c:1863
#7 0x00007f0b85e23ca3 in gst_element_send_event (element=0x1fb00e0, event=0x7f0b6800a650) at ../subprojects/gstreamer/gst/gstelement.c:1994
#8 0x00007f0b85f61b5b in stream_selection_cb (bus=0x1dc2d80, message=0x7f0b68008b00, d=0x1d7de30) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-scenario.c:2235
#9 0x00007f0b85c00060 in g_closure_invoke (closure=0x1d2a5b0, return_value=0x0, n_param_values=2, param_values=0x7f0b7a7627b0, invocation_hint=0x7f0b7a762730) at ../gobject/gclosure.c:832
#10 0x00007f0b85c2cf66 in signal_emit_unlocked_R.isra.0 (node=node@entry=0x1c5e5f0, detail=detail@entry=235, instance=instance@entry=0x1dc2d80, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7f0b7a7627b0) at ../gobject/gsignal.c:3796
#11 0x00007f0b85c1d4da in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7f0b7a762970) at ../gobject/gsignal.c:3549
#12 0x00007f0b85c1d6f3 in g_signal_emit (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>) at ../gobject/gsignal.c:3606
#13 0x00007f0b85e05be9 in gst_bus_sync_signal_handler (bus=0x1dc2d80, message=0x7f0b68008b00, data=0x0) at ../subprojects/gstreamer/gst/gstbus.c:1307
#14 0x00007f0b85e03834 in gst_bus_post (bus=0x1dc2d80, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbus.c:364
#15 0x00007f0b85e2436c in gst_element_post_message_default (element=0x1fb00e0, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstelement.c:2127
#16 0x00007f0b85df42b1 in gst_bin_post_message (element=0x1fb00e0, msg=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbin.c:2789
#17 0x00007f0b85e24627 in gst_element_post_message (element=0x1fb00e0, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstelement.c:2170
#18 0x00007f0b85df7c12 in gst_bin_handle_message_func (bin=0x1fb00e0, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbin.c:4041
#19 0x00007f0b85e61bd3 in gst_pipeline_handle_message (bin=0x1fb00e0, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstpipeline.c:669
#20 0x00007f0b7e663fa4 in gst_play_bin3_handle_message (bin=0x1fb00e0, msg=0x7f0b68008b00) at ../subprojects/gst-plugins-base/gst/playback/gstplaybin3.c:2030
#21 0x00007f0b85df5a98 in bin_bus_handler (bus=0x1dc2cc0, message=0x7f0b68008b00, bin=0x1fb00e0) at ../subprojects/gstreamer/gst/gstbin.c:3263
#22 0x00007f0b85e037f1 in gst_bus_post (bus=0x1dc2cc0, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbus.c:357
#23 0x00007f0b85e2436c in gst_element_post_message_default (element=0x1fb4050, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstelement.c:2127
#24 0x00007f0b85df42b1 in gst_bin_post_message (element=0x1fb4050, msg=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbin.c:2789
#25 0x00007f0b85e24627 in gst_element_post_message (element=0x1fb4050, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstelement.c:2170
#26 0x00007f0b85df7c12 in gst_bin_handle_message_func (bin=0x1fb4050, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbin.c:4041
#27 0x00007f0b7e638005 in gst_uri_decode_bin3_handle_message (bin=0x1fb4050, msg=0x7f0b68008b00) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:2218
#28 0x00007f0b85df5a98 in bin_bus_handler (bus=0x1dc2e40, message=0x7f0b68008b00, bin=0x1fb4050) at ../subprojects/gstreamer/gst/gstbin.c:3263
#29 0x00007f0b85e037f1 in gst_bus_post (bus=0x1dc2e40, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbus.c:357
#30 0x00007f0b85e2436c in gst_element_post_message_default (element=0x1fb8020, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstelement.c:2127
#31 0x00007f0b85df42b1 in gst_bin_post_message (element=0x1fb8020, msg=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstbin.c:2789
#32 0x00007f0b85e24627 in gst_element_post_message (element=0x1fb8020, message=0x7f0b68008b00) at ../subprojects/gstreamer/gst/gstelement.c:2170
#33 0x00007f0b7e61ee43 in sink_event_function (sinkpad=0x7f0b6400f8c0, dbin=0x1fb8020, event=0x7f0b6c097870) at ../subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c:1450
#34 0x00007f0b85f51122 in gst_validate_pad_monitor_downstream_event_check (pad_monitor=0x7f0b6c094a80, parent=0x1fb8020, event=0x7f0b6c097870, handler=0x7f0b7e61e797 <sink_event_function>) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2101
#35 0x00007f0b85f535bf in gst_validate_pad_monitor_sink_event_full_func (pad=0x7f0b6400f8c0, parent=0x1fb8020, event=0x7f0b6c097870) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2406
#36 0x00007f0b85f537fa in gst_validate_pad_monitor_sink_event_func (pad=0x7f0b6400f8c0, parent=0x1fb8020, event=0x7f0b6c097870) at ../subprojects/gst-devtools/validate/gst/validate/gst-validate-pad-monitor.c:2418
#37 0x00007f0b85e5c523 in gst_pad_send_event_unchecked (pad=0x7f0b6400f8c0, event=0x7f0b6c097870, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5940
#38 0x00007f0b85e5ae65 in gst_pad_push_event_unchecked (pad=0x7f0b6400f650, event=0x7f0b6c097870, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5573
#39 0x00007f0b85e54bc2 in push_sticky (pad=0x7f0b6400f650, ev=0x7f0b7a763620, user_data=0x7f0b7a763680) at ../subprojects/gstreamer/gst/gstpad.c:4057
#40 0x00007f0b85e4a13c in events_foreach (pad=0x7f0b6400f650, func=0x7f0b85e54a8e <push_sticky>, user_data=0x7f0b7a763680) at ../subprojects/gstreamer/gst/gstpad.c:613
#41 0x00007f0b85e54f91 in check_sticky (pad=0x7f0b6400f650, event=0x7f0b6c097870) at ../subprojects/gstreamer/gst/gstpad.c:4116
#42 0x00007f0b85e5b65e in gst_pad_push_event (pad=0x7f0b6400f650, event=0x7f0b6c097870) at ../subprojects/gstreamer/gst/gstpad.c:5706
#43 0x00007f0b85e523e7 in event_forward_func (pad=0x7f0b6400f650, data=0x7f0b7a763820) at ../subprojects/gstreamer/gst/gstpad.c:3130
#44 0x00007f0b85e521e3 in gst_pad_forward (pad=0x7f0b6004f180, forward=0x7f0b85e522bd <event_forward_func>, user_data=0x7f0b7a763820) at ../subprojects/gstreamer/gst/gstpad.c:3084
#45 0x00007f0b85e525ab in gst_pad_event_default (pad=0x7f0b6004f180, parent=0x7f0b6400f650, event=0x7f0b6c097870) at ../subprojects/gstreamer/gst/gstpad.c:3181
#46 0x00007f0b85e5c523 in gst_pad_send_event_unchecked (pad=0x7f0b6004f180, event=0x7f0b6c097870, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5940
#47 0x00007f0b85e5ae65 in gst_pad_push_event_unchecked (pad=0x7f0b64008360, event=0x7f0b6c097870, type=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at ../subprojects/gstreamer/gst/gstpad.c:5573
#48 0x00007f0b85e54bc2 in push_sticky (pad=0x7f0b64008360, ev=0x7f0b7a763a60, user_data=0x7f0b7a763ac0) at ../subprojects/gstreamer/gst/gstpad.c:4057
#49 0x00007f0b85e4a13c in events_foreach (pad=0x7f0b64008360, func=0x7f0b85e54a8e <push_sticky>, user_data=0x7f0b7a763ac0) at ../subprojects/gstreamer/gst/gstpad.c:613
#50 0x00007f0b85e54f91 in check_sticky (pad=0x7f0b64008360, event=0x7f0b6c097870) at ../subprojects/gstreamer/gst/gstpad.c:4116
#51 0x00007f0b85e5b65e in gst_pad_push_event (pad=0x7f0b64008360, event=0x7f0b6c097870) at ../subprojects/gstreamer/gst/gstpad.c:5706
#52 0x00007f0b7e5888e7 in gst_single_queue_push_one (mq=0x7f0b60076540, sq=0x7f0b6c093300, object=0x7f0b6c097870, allow_drop=0x7f0b7a763c3c) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2068
#53 0x00007f0b7e58a1bc in gst_multi_queue_loop (pad=0x7f0b64008360) at ../subprojects/gstreamer/plugins/elements/gstmultiqueue.c:2347
#54 0x00007f0b85e96a36 in gst_task_func (task=0x7f0b6c072050) at ../subprojects/gstreamer/gst/gsttask.c:399
#55 0x00007f0b85e97e41 in default_func (tdata=0x7f0b6c093ef0, pool=0x1fbe9c0) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#56 0x00007f0b85cd1ab2 in g_thread_pool_thread_proxy (data=<optimized out>) at ../glib/gthreadpool.c:352
#57 0x00007f0b85ccc982 in g_thread_proxy (data=0x7f0b70033800) at ../glib/gthread.c:831
#58 0x00007f0b858ca12d in start_thread (arg=<optimized out>) at pthread_create.c:442
#59 0x00007f0b8594bbc0 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5982>
A client may map dmabufs without the intention to either read or write
to the memory. One example is clients wanting to use the
`gst_video_frame_map()` helper function.
Thus, in order to make buffers from `GstVaDmabufAllocator` conveniently
usable, ignore the modifier check if the client specified neither
`GST_MAP_READ` nor `GST_MAP_WRITE`.
Also skip the `va_sync_surface()` call in that case, as it's likely only
needed for CPU reads/writes.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5965>
clang does not like the array index assignment without the `=` sign in
it. This is a gnu extension I believe, and adding the sign is proper.
This fixes the following two warnings:
```
../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideo-private.c:32:40:
warning: use of GNU 'missing =' extension in designator [-Wgnu-designator]
[GST_VK_VIDEO_EXTENSION_DECODE_H264] {
^
=
../subprojects/gst-plugins-bad/gst-libs/gst/vulkan/gstvkvideo-private.c:36:40:
warning: use of GNU 'missing =' extension in designator [-Wgnu-designator]
[GST_VK_VIDEO_EXTENSION_DECODE_H265] {
^
=
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5996>
The internal elements are only created when caps on both video and subtitle pads
are known.
Prior to that, a GST_QUERY_CAPS on a video sink pad would just return ANY
instead of giving a hint of what downstream can actually handle and
prefers. This could result in upstream elements (such as decoders) deciding on
chosing (in the best cases) a non-optimal caps or (in the worst case) caps that
couldn't be handled by the elements downstream of subtitleoverlay.
In order to fix that, we assume that all subtitle "elements" handle the subtitle
overlay composition feature/meta and handle `GST_QUERY_CAPS` ourselves if the
internal elements aren't present yet.
Fixes#3176
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5834>
Remove optional sprop-stereo and sprop-maxcapture fields from Opus
remote offer caps before intersecting with local codec preferences.
According to https://datatracker.ietf.org/doc/html/rfc7587#section-7.1
those fields are sender-only informative, and don't affect
interoperability.
Fixes cases where the webrtc media will end up receive-only if the
local side wants to send stereo but the remote is sending mono, or
vice versa.
There may be other fields in other codecs, so the implementation
anticipates needing to add further fields and codecs in the future.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5993>
On fedora 38 (and it was the case in previous releases), the
quark_seq_id is optimized out so getting quarks from the
global variable always failed. This patch works around that by assuming
it is a valid quark whenever the quark_seq_id is not accessible.
This issue often manifested as Python Exception <class 'TypeError'>:
can only concatenate str (not "NoneType") to str when debugging as
other parts of the code assume that getting the quark for a GType name
will work.
Same as https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3559
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5986>
When using subtimeline serialized with the command line formatter
syntax, we had a false positive when detecting if the user had explicitly
specified tracks with the `+track` syntax. Verifying the presence of
`+track` explicitly in the `args` array ensure the `+track` is not for
a subtimeline.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5981>
Post a bus message explaining that input buffers must
have timestamps and return GST_FLOW_ERROR, instead of
a confusing NOT-NEGOTIATED
Also remove an errant buffer unref in the error handling
that would lead to crashes after.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5935>
Add a finalize method and release locks and things in there, instead
of in the dispose method. Dispose may be called multiple times,
at any time, and should just safely release references to other
memory that might reference it back.
In this case, timecodestamper would later crash in the element
dispose method trying to take the freed mutex from
gst_timecodestamper_release_pad().
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5935>
Today when using the `splitmuxsrc` on a collection of files named as:
```
item0.mkv
item1.mkv
item2.mkv
[...]
item10.mkv
item11.mkv
[...]
```
You will get a continuous stream made in the order of:
```
item0.mkv -> item1.mkv -> item10.mkv -> item11.mkv -> [...]
```
You can fix this by having smarter names of the items:
```
item000.mkv
item001.mkv
item002.mkv
[...]
item010.mkv
item011.mkv
[...]
```
Will get you:
```
item000.mkv -> item001.mkv -> item003.mkv -> item004.mkv -> [...]
```
But, we could also "fix" the former case by using natural ordering when
comparing the files in gstsplitutils.c.
Fixes#2523
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4491>
boiler.md:
Update meson command to avoid warning.
states.md:
Clarify that a sink element accepting only one buffer only happens when paused.
Link text duplicated normal text.
args.md:
A valid range is between values, not between ranges. Reword for clarity.
testapp.md:
Clarify linking refers to the pipeline, not build time compilation and linking.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5939>
We access fields that are protected by the lock and this was already
held in other places where we call the method. I have got cases where
we get the following stack/assertion:
```
#0 g_logv (log_domain=0x7fb9d84e6cd5 "GStreamer", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=args@entry=0x7fb9d4de54e0) at ../glib/gmessages.c:1433
#1 0x00007fb9d802d0f3 in g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/gmessages.c:1471
#2 0x00007fb9d845bc2c in gst_pad_send_event (pad=0x7fb98c01e050, event=0x7fb9c4105b90) at ../subprojects/gstreamer/gst/gstpad.c:6096
#3 0x00007fb9d6541c35 in gst_uri_decode_bin3_set_uri (dec=0x7fb9bc450960 [GstURIDecodeBin3], uri=0x7fb9c40f5410 "file:///var/home/thiblahute/devel/gstreamer/gstreamer/subprojects/gst-integration-testsuites/medias/defaults/mp4/mp3_h264.0.mp4") at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1918
#4 0x00007fb9d6540c40 in gst_uri_decode_bin3_set_property (object=0x7fb9bc450960 [GstURIDecodeBin3], prop_id=1, value=0x7fb9d4de57b0, pspec=0x7fb9bcee5280 [GParamString]) at ../subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c:1569
#5 0x00007fb9d7f8f73d in object_set_property (object=0x7fb9bc450960 [GstURIDecodeBin3], pspec=0x7fb9bcee5280 [GParamString], value=0x7fb9d4de57b0, nqueue=0x7fb9c40d0c40, user_specified=<optimized out>) at ../gobject/gobject.c:1794
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5968>
This protocol does what it says on the box, avoiding the need for a 1x1
wl_shm buffer.
A wayland-projects wrap has been added for users who do not have v1.26
available.
This commit was partly authored by Robert Mader.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2662>
If GST_PAD_SINK is passed in this means that we're supposed to convert
from sink caps to src caps, not the other way around. In other words, if
GST_PAD_SINK is passed we're supposed to produce the possible output
caps.
Previously this was inverted. This had the effect that glcolorconvert
pretended to be able to convert *to* I420 without glDrawBuffers, which is
not possible, and pretended not to be able to convert *from* I420
without glDrawBuffers, which it always supports.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5941>
Explicitly calls gst_vtenc_pause_output_loop when going PAUSED->READY to make sure GST_PAD_STREAM_LOCK is not taken.
Before this change, a deadlock would occur if pipeline got stopped right after one output buffer was generated by vtenc.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5933>
Instead of passing along the system frame number, we pass along a reference to
the GstVideoCodecFrame.
In order for all internal cleanup to happen properly, this also requires
switching to the proper AVPacket creation/destruction methods (av_packet_alloc()
and av_packet_unref())
Fixes#2568
Co-authored-by: Edward Hervey <edward@centricular.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5186>
Until now when doing `+test-clip blue +effect effect1 + effect effect2`
leaded to the following pseudo pipeline
videotestsrc ! effect2 ! effect1
given the `ges-launch` syntax this is quite unexpected and this needed
fixing
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5735>
This allows user to be in control of when scaling happens in the pipeline.
It can be plugged as an effect and scaling will be forced to happen in
the effect instead of in the compositor.
Without this, it would not be possible for users to, for example,
crop a video source before scaling to the target source size.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5735>
Modify the fix_output_format in vpp to directly generate caps with
negotiated src caps, and we have the correct dma caps negotiation in
fix_output_format function. And thus, we can remove the redundant
negotiation of using function pad_accept_memory in vpp.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5845>
Even in the case where we are not in passthrough but the subclasses are
going to run the allocation query, we need to ensure that we have a
GLContext ready to be used. Otherwise we might end up with assertions
with `gloverlaycompositor` like:
```
#0 __pthread_kill_implementation (no_tid=0, signo=6, threadid=140285688829504) at ./nptl/pthread_kill.c:44
#1 __pthread_kill_internal (signo=6, threadid=140285688829504) at ./nptl/pthread_kill.c:78
#2 __GI___pthread_kill (threadid=140285688829504, signo=signo@entry=6) at ./nptl/pthread_kill.c:89
#3 0x00007f985ed88476 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4 0x00007f985ed6e7f3 in __GI_abort () at ./stdlib/abort.c:79
#5 0x00007f985faedb57 in g_assertion_message (domain=<optimized out>, file=<optimized out>, line=<optimized out>, func=0x7f9856251b80 <__func__.5> "gst_gl_buffer_pool_set_config", message=<optimized out>) at ../../../glib/gtestutils.c:3253
#6 0x00007f985fb4770f in g_assertion_message_expr (domain=0x7f9856251883 "GStreamer-GL", file=0x7f9856251820 "../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbufferpool.c", line=132, func=0x7f9856251b80 <__func__.5> "gst_gl_buffer_pool_set_config", expr=<optimized out>) at ../../../glib/gtestutils.c:3279
#7 0x00007f9856200e1f in gst_gl_buffer_pool_set_config (pool=0x7f977009d7e0, config=0x7f9704549050) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbufferpool.c:132
#8 0x00007f985f99bcf7 in gst_buffer_pool_set_config (pool=0x7f977009d7e0, config=0x7f9704549050) at ../subprojects/gstreamer/gst/gstbufferpool.c:698
#9 0x00007f985620e2be in gst_gl_filter_propose_allocation (trans=0x7f9754014a80, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c:834
#10 0x00007f98562b43c5 in gst_gl_overlay_compositor_element_propose_allocation (trans=0x7f9754014a80, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/ext/gl/gstgloverlaycompositorelement.c:188
#11 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f9754014a80, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#12 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f9754014a80, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#13 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f977c07c7e0, parent=0x7f9754014a80, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#14 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f977c07c7e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#15 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f977c07c340, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#16 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f975401e2b0, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#17 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f975401e2b0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#18 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f975401e2b0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#19 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f96e420b0c0, parent=0x7f975401e2b0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#20 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f96e420b0c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#21 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a0bf0f0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#22 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a128790, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#23 0x00007f9856289017 in _gst_gl_upload_element_propose_allocation (bt=0x7f982a128790, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/ext/gl/gstgluploadelement.c:239
#24 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a128790, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#25 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f982a128790, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#26 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f96e405b630, parent=0x7f982a128790, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#27 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f96e405b630, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#28 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f9730289670, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#29 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f9730289670, data=0x7f96cea60000) at ../subprojects/gstreamer/gst/gstpad.c:3458
#30 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f98280f5d00, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60000) at ../subprojects/gstreamer/gst/gstpad.c:3084
#31 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f98280f5d00, parent=0x7f98280cc540, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#32 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f98280f5d00, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#33 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f978438b680, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#34 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f978438b680, data=0x7f96cea60290) at ../subprojects/gstreamer/gst/gstpad.c:3458
#35 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f98280f5a10, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60290) at ../subprojects/gstreamer/gst/gstpad.c:3084
#36 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f98280f5a10, parent=0x7f97ec0147f0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#37 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f98280f5a10, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#38 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f9784831a70, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#39 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f9784831a70, data=0x7f96cea60520) at ../subprojects/gstreamer/gst/gstpad.c:3458
#40 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f9770081da0, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60520) at ../subprojects/gstreamer/gst/gstpad.c:3084
#41 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f9770081da0, parent=0x7f983c14e330, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#42 0x00007f9812258e5c in ghostpad_query_function (ghostpad=0x7f9770081da0, parent=0x7f983c14e330, query=0x7f97040310a0) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:568
#43 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f9770081da0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#44 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2713e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#45 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2713e0, data=0x7f96cea60800) at ../subprojects/gstreamer/gst/gstpad.c:3458
#46 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2800c0, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60800) at ../subprojects/gstreamer/gst/gstpad.c:3084
#47 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2800c0, parent=0x7f982a2713e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#48 0x00007f9812258a94 in internalpad_query_function (internal=0x7f982a2800c0, parent=0x7f982a2713e0, query=0x7f97040310a0) at ../subprojects/gst-editing-services/plugins/nle/nleghostpad.c:460
#49 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2800c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#50 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2f4c80, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#51 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2f4c80, data=0x7f96cea60ae0) at ../subprojects/gstreamer/gst/gstpad.c:3458
#52 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2dfb00, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea60ae0) at ../subprojects/gstreamer/gst/gstpad.c:3084
#53 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2dfb00, parent=0x7f982a2f4c80, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#54 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2dfb00, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#55 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2fbc10, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#56 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a2e87d0, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#57 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a2e87d0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#58 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2fb9c0, parent=0x7f982a2e87d0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#59 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2fb9c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#60 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2fb770, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#61 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a302780, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#62 0x00007f985c008d9d in gst_video_rate_propose_allocation (trans=0x7f982a302780, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst/videorate/gstvideorate.c:1365
#63 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a302780, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#64 0x00007f985c008cc5 in gst_video_rate_query (trans=0x7f982a302780, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst/videorate/gstvideorate.c:1347
#65 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2fb520, parent=0x7f982a302780, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#66 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2fb520, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#67 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2889c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#68 0x00007f98122048e6 in gst_base_auto_convert_internal_sink_query (pad=0x7f9750046af0, parent=0x0, query=0x7f97040310a0) at ../subprojects/gst-plugins-bad/gst/autoconvert/gstbaseautoconvert.c:1381
#69 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f9750046af0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#70 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2c13e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#71 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2c13e0, data=0x7f96cea61680) at ../subprojects/gstreamer/gst/gstpad.c:3458
#72 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2de340, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea61680) at ../subprojects/gstreamer/gst/gstpad.c:3084
#73 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2de340, parent=0x7f982a2c13e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#74 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2de340, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#75 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2db760, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#76 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d8df0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#77 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2db510, parent=0x7f982a2d8df0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#78 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2db510, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#79 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2db2c0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#80 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2dc3d0, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#81 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2db070, parent=0x7f982a2dc3d0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#82 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2db070, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#83 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2dae20, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#84 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d8a60, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#85 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2dabd0, parent=0x7f982a2d8a60, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#86 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2dabd0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#87 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2c1170, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#88 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2c1170, data=0x7f96cea62060) at ../subprojects/gstreamer/gst/gstpad.c:3458
#89 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2de0e0, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea62060) at ../subprojects/gstreamer/gst/gstpad.c:3084
#90 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2de0e0, parent=0x7f982a2c1170, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:3529
#91 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2de0e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#92 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2da980, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#93 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a2c8c10, decide_query=0x0, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#94 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a2c8c10, direction=GST_PAD_SINK, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#95 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2da730, parent=0x7f982a2c8c10, query=0x7f97040310a0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#96 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2da730, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4202
#97 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2da4e0, query=0x7f97040310a0) at ../subprojects/gstreamer/gst/gstpad.c:4334
#98 0x00007f985f8e7ff9 in gst_base_transform_do_bufferpool (trans=0x7f982a2d1a50, outcaps=0x7f970407aac0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:948
#99 0x00007f985f8e963e in gst_base_transform_setcaps (trans=0x7f982a2d1a50, pad=0x7f982a2da290, incaps=0x7f970407aac0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1351
#100 0x00007f985f8e99c8 in gst_base_transform_reconfigure_unlocked (trans=0x7f982a2d1a50) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1431
#101 0x00007f985f8e9d38 in gst_base_transform_default_query (trans=0x7f982a2d1a50, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1515
#102 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f982a2d1a50, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#103 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2da290, parent=0x7f982a2d1a50, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#104 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2da290, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#105 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2da040, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#106 0x00007f985f8e9817 in gst_base_transform_default_propose_allocation (trans=0x7f982a2c88d0, decide_query=0x0, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1394
#107 0x00007f985f8e9ea8 in gst_base_transform_default_query (trans=0x7f982a2c88d0, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1537
#108 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d7d30, parent=0x7f982a2c88d0, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#109 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d7d30, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#110 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2b7d40, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#111 0x00007f985f9f0cb3 in query_forward_func (pad=0x7f982a2b7d40, data=0x7f96cea62cb0) at ../subprojects/gstreamer/gst/gstpad.c:3458
#112 0x00007f985f9ef9ac in gst_pad_forward (pad=0x7f982a2c0f00, forward=0x7f985f9f0b90 <query_forward_func>, user_data=0x7f96cea62cb0) at ../subprojects/gstreamer/gst/gstpad.c:3084
#113 0x00007f985f9f0ed1 in gst_pad_query_default (pad=0x7f982a2c0f00, parent=0x7f982a2ba620, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:3529
#114 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2c0f00, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#115 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d7ae0, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#116 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d86d0, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#117 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d7890, parent=0x7f982a2d86d0, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#118 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d7890, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#119 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d7640, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#120 0x00007f98561eebd1 in gst_gl_base_filter_query (trans=0x7f982a2d5b00, direction=GST_PAD_SINK, query=0x7f9704541620) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:285
#121 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d73f0, parent=0x7f982a2d5b00, query=0x7f9704541620) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#122 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d73f0, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4202
#123 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d71a0, query=0x7f9704541620) at ../subprojects/gstreamer/gst/gstpad.c:4334
#124 0x00007f985f8e7ff9 in gst_base_transform_do_bufferpool (trans=0x7f982a2d8340, outcaps=0x7f9704004e30) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:948
#125 0x00007f985f8e963e in gst_base_transform_setcaps (trans=0x7f982a2d8340, pad=0x7f982a2d6f50, incaps=0x7f9704002120) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1351
#126 0x00007f985f8e99c8 in gst_base_transform_reconfigure_unlocked (trans=0x7f982a2d8340) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1431
#127 0x00007f985f8e9d38 in gst_base_transform_default_query (trans=0x7f982a2d8340, direction=GST_PAD_SINK, query=0x7f97045afe90) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1515
#128 0x00007f98561eed91 in gst_gl_base_filter_query (trans=0x7f982a2d8340, direction=GST_PAD_SINK, query=0x7f97045afe90) at ../subprojects/gst-plugins-base/gst-libs/gst/gl/gstglbasefilter.c:319
#129 0x00007f985f8ea223 in gst_base_transform_query (pad=0x7f982a2d6f50, parent=0x7f982a2d8340, query=0x7f97045afe90) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1628
#130 0x00007f985f9f2f77 in gst_pad_query (pad=0x7f982a2d6f50, query=0x7f97045afe90) at ../subprojects/gstreamer/gst/gstpad.c:4202
#131 0x00007f985f9f3aa2 in gst_pad_peer_query (pad=0x7f982a2d6d00, query=0x7f97045afe90) at ../subprojects/gstreamer/gst/gstpad.c:4334
#132 0x00007f985f8e7ff9 in gst_base_transform_do_bufferpool (trans=0x7f982a2d4920, outcaps=0x7f9704071fb0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:948
#133 0x00007f985f8e963e in gst_base_transform_setcaps (trans=0x7f982a2d4920, pad=0x7f982a2d6ab0, incaps=0x7f97500020c0) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1351
#134 0x00007f985f8e99c8 in gst_base_transform_reconfigure_unlocked (trans=0x7f982a2d4920) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:1431
#135 0x00007f985f8eb797 in default_submit_input_buffer (trans=0x7f982a2d4920, is_discont=0, inbuf=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2041
#136 0x00007f985f8ecb28 in gst_base_transform_chain (pad=0x7f982a2d6ab0, parent=0x7f982a2d4920, buffer=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2348
#137 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2d6ab0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#138 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a2d6860, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#139 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a2d6860, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#140 0x00007f985f8ecd2e in gst_base_transform_chain (pad=0x7f982a2d6610, parent=0x7f982a2c8590, buffer=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2391
#141 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2d6610, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#142 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a2de5a0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#143 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a2de5a0, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#144 0x00007f985f9ce428 in gst_proxy_pad_chain_default (pad=0x7f982a2c1650, parent=0x7f982a290880, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstghostpad.c:127
#145 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2c1650, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#146 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f97500468a0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#147 0x00007f985f9f61cc in gst_pad_push (pad=0x7f97500468a0, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#148 0x00007f9812203aa4 in gst_base_auto_convert_sink_chain (pad=0x7f982a288770, parent=0x7f982a22fbd0, buffer=0x7f972c009b70) at ../subprojects/gst-plugins-bad/gst/autoconvert/gstbaseautoconvert.c:1032
#149 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a288770, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#150 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a288520, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#151 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a288520, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#152 0x00007f985f8ecd2e in gst_base_transform_chain (pad=0x7f982a2882d0, parent=0x7f982a274570, buffer=0x7f972c009b70) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2391
#153 0x00007f985f9f47c2 in gst_pad_chain_data_unchecked (pad=0x7f982a2882d0, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4463
#154 0x00007f985f9f5a15 in gst_pad_push_data (pad=0x7f982a288080, type=4112, data=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4739
#155 0x00007f985f9f61cc in gst_pad_push (pad=0x7f982a288080, buffer=0x7f972c009b70) at ../subprojects/gstreamer/gst/gstpad.c:4858
#156 0x00007f982499b9f9 in gst_queue_push_one (queue=0x7f9829d61910) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1388
#157 0x00007f982499c88d in gst_queue_loop (pad=0x7f982a288080) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1541
#158 0x00007f985fa376bb in gst_task_func (task=0x7f976002eb90) at ../subprojects/gstreamer/gst/gsttask.c:399
#159 0x00007f985fa38bf9 in default_func (tdata=0x7f975400c160, pool=0x7f984cb62380) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#160 0x00007f985fb566b4 in g_thread_pool_thread_proxy (data=<optimized out>) at ../../../glib/gthreadpool.c:350
#161 0x00007f985fb53a51 in g_thread_proxy (data=0x7f982a071580) at ../../../glib/gthread.c:827
#162 0x00007f985eddaac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#163 0x00007f985ee6ca40 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
```
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5856>
The pool currently defaults to performing a layout transition to
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, with some special exceptions for
video usages. This may not be a legal transition depending on the usage.
Provide an API to explicitly control the initial image layout.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5881>
When implementing NDK media support, it would be useful to also have JNI
implementation in the same binary as NDK media compatibility is lower.
As such, implement a rudimentary vtable system for gstamc-codec and
gstamc-format, and allow choosing the implementation at static_init()
time.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4115>
This allows the implementations to do custom logic behind the hood. For
example, when NDK implementation is added, the entrypoint can chooses to
statically initialize the NDK implementations or the JNI one.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4115>
When overlay coordinates are updated, after the initial coordinates
are set, the shader indices are applied to the wrong buffer, resulting
in the background image appearing where the overlay should.
Bind the array buffer before applying subsequent coordinate
updates.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5901>
With this patch, the caps is registered in the order of memory features
as: VAMemory, DMABuf then raw caps in linux path, and D3D11Memory then
raw caps in windows path. It helps to prioritize the video memory for all
msdk elements when doing negotiation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5898>
In `parse_chain_output_probe()` the corresponding input stream might receive EOS
and thus be removed before the actual pad is removed. So we cannot assert about
this in `parsebin_pad_removed_cb()`.
Also, driving-by, protect `find_input_stream_for_pad()` with the selection lock
similarly to other functions accessing the input streams list.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5887>
Fixing below debug layer report
ID3D12Device::CreateCommittedResource: Ignoring InitialState D3D12_RESOURCE_STATE_COPY_DEST.
Buffers are effectively created in state D3D12_RESOURCE_STATE_COMMON.
Buffer resource will be automatically promoted to D3D12_RESOURCE_STATE_COPY_DEST
at the very first COPY operation time.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5895>
When level value is greater than 127, it was being clamped but this clamped
value was not the one being actually used. For level values greater than 127
this resulted in an incorrect value being used. As an example, a level value
of 187, after and'ed with 0x7F, it would result in 0x3B being reported as the
level value.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5893>
Since DXGI desktop duplication API does not work with Direct3D12 device,
this element will use Direct3D11 device to acquire frame.
Then other rendering operations (e.g., texture copy, render pipeline) will
happen using Direct3D12 API
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5883>
- Fix skipsize on _update_backlog failure.
- Add robustness to AU completion detection by using AUD when present. If we've
received a AUD we overwrite the first VCL NAL detection when the result was
negative. VCL following AUD is the first VCL of next AU.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5862>
In case of tier 1 decoder, always use reference-only picture to avoid
fixed-size pool limitation and output decoded picture without
copy even for negative rate. Also do not use copy queue for GPU to GPU
copy. Copy queue is specialized for upload/download and may occupy
PCIE bandwidth. Use direct queue as recommended by vendors.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5877>
On flush event, baseclass will discard all pictures from DPB
but there can be still in-flight commands not finished yet.
Use our command queue, allocator and fence data helper objects
to keep resource available during command execution.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5877>
Instead of only supporting writing SPU data directly to YUV frames,
render the SPU data to an intermediate AYUV overlay buffer. The overlay
data is then blended to the video frame.
For the PGS format, the overlay buffer size is set to the size of the
Composition Window, and its position in the overlay composition is set
to the window position. The objects to render are now cropped when the
cropping flag is set.
For the Vobsub format, the overlay buffer size is set to the size of the
Display Area.
Once rendered, the overlay composition rectangle is now moved and scaled
to fit the video output size, to avoid clipping.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5827>
Shader visible descriptors occupy GPU resource and there are hardware
limits. Thus, in order to minimize the amount of shader visible heaps,
only non shader visible descriptor heap (staging) will be held by d3d12memory.
Then converter will copy the staging descriptor to shader visible
descriptor heap per draw.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875>
Zero initialization would have overhead and it's not required
most cases except for textures. Use CREATE_NOT_ZEROED flag
in case of buffer resource or if a texture will be rendered without any
prior read operation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875>
Conversion will happen when constructed command list is executed,
not by converter element. Thus this object should not map output buffer
with write flag which will result in error if multiple threads
are building commands for the same output target frame.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5875>
It's one of the projects we maintain and we should track the main branch
to make sure any regressions are caught as early as possible.
For GStreamer releases / release branches this should be pointed back to the
latest orc release tag.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5867>
Interlaced MJPEG is a big hack. Most of the streams we've found are from old
AVID tools. There are two methods to detect interlaced stream: the container
offers a height bigger (or double) than the image's height in SOF. The other
is from a APP0 marker.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5838>
Add macro which converts picture frame number to suitable timestamp in
nanoseconds for use in V4L2 VB2 buffer lookup. Since multiple codecs do
the same operation and almost all got it wrong, do it in one place so it
can be fixed in one place again, if needed.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5791>
The GstMpeg2Picture system_frame_number is guint32, constant 1000 is guint32,
GstV4l2CodecMpeg2Dec *_ref_ts multiplication result is u64 .
```
u64 result = (u32)((u32)system_frame_number * (u32)1000);
```
behaves the same as
```
u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff);
```
so in case `system_frame_number > 4294967295 / 1000`, the `result` will
wrap around. Since the `result` is really used as a cookie used to look
up V4L2 buffers related to the currently decoded frame, this wraparound
leads to visible corruption during MPEG2 decoding. At 30 FPS this occurs
after cca. 40 hours of playback .
Fix this by changing the 1000 from u32 to u64, i.e.:
```
u64 result = (u64)((u32)system_frame_number * (u64)1000ULL);
```
this way, the wraparound is prevented and the correct cookie is used.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5791>
The GstAV1Picture system_frame_number is guint32, constant 1000 is guint32,
GstV4l2CodecAV1Dec v4l2_av1_frame.*_frame_ts multiplication result is u64 .
```
u64 result = (u32)((u32)system_frame_number * (u32)1000);
```
behaves the same as
```
u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff);
```
so in case `system_frame_number > 4294967295 / 1000`, the `result` will
wrap around. Since the `result` is really used as a cookie used to look
up V4L2 buffers related to the currently decoded frame, this wraparound
leads to visible corruption during AV1 decoding. At 30 FPS this occurs
after cca. 40 hours of playback .
Fix this by changing the 1000 from u32 to u64, i.e.:
```
u64 result = (u64)((u32)system_frame_number * (u64)1000ULL);
```
this way, the wraparound is prevented and the correct cookie is used.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5791>
The GstVp9Picture system_frame_number is guint32, constant 1000 is guint32,
GstV4l2CodecVp9Dec v4l2_vp9_frame.*_frame_ts multiplication result is u64 .
```
u64 result = (u32)((u32)system_frame_number * (u32)1000);
```
behaves the same as
```
u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff);
```
so in case `system_frame_number > 4294967295 / 1000`, the `result` will
wrap around. Since the `result` is really used as a cookie used to look
up V4L2 buffers related to the currently decoded frame, this wraparound
leads to visible corruption during VP9 decoding. At 30 FPS this occurs
after cca. 40 hours of playback .
Fix this by changing the 1000 from u32 to u64, i.e.:
```
u64 result = (u64)((u32)system_frame_number * (u64)1000ULL);
```
this way, the wraparound is prevented and the correct cookie is used.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5791>
The GstVp8Picture system_frame_number is guint32, constant 1000 is guint32,
GstV4l2CodecVp8Dec v4l2_vp8_frame.*_frame_ts multiplication result is u64 .
```
u64 result = (u32)((u32)system_frame_number * (u32)1000);
```
behaves the same as
```
u64 result = (u32)(((u32)system_frame_number * (u32)1000) & 0xffffffff);
```
so in case `system_frame_number > 4294967295 / 1000`, the `result` will
wrap around. Since the `result` is really used as a cookie used to look
up V4L2 buffers related to the currently decoded frame, this wraparound
leads to visible corruption during VP8 decoding. At 30 FPS this occurs
after cca. 40 hours of playback .
Fix this by changing the 1000 from u32 to u64, i.e.:
```
u64 result = (u64)((u32)system_frame_number * (u64)1000ULL);
```
this way, the wraparound is prevented and the correct cookie is used.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5791>
When we finish a frame, we pass a size which semantic can easily be confused.
Improve the documentation to clarify that the parameter size is the amount of
input data being consumed and, if set, the output_buffer size can differ.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5754>
When reopening a v4l2 device, the v4l2object->poll will include some old fds,
which was assigned to this device before. If the pipeline opens multiple v4l2
devices, the old fd may been assigned to other v4l2 devices when reopening
devices.
This will cause the timing of the pipeline become confusing when polling devices,
leading functional abnormalities.
Therefore, when closing v4l2object, remove the old fds in poll to ensure that the
pipeline timing is normal.
Signed-off-by: Chao Guo <chao.guo@nxp.com>
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5820>