Skip to content

Conversation

Dari-K
Copy link

@Dari-K Dari-K commented Feb 13, 2025

No description provided.

havardgraff and others added 30 commits October 10, 2024 21:23
Basically, don't set a DISCONT flag when detecting a seqnum jump.
This is useful for ULPFEC, as a FEC packet might be hiding inside the
original stream, and this stream is actually completely valid, even if
the FEC packet is removed.
Don't send a segment event if we haven't produced data and set the
output caps yet. Doing so causes a g_warning about sticky event
misordering.

https://bugzilla.gnome.org/show_bug.cgi?id=773510
Allows it to be configured differently for different use-cases,
specifically the live scenario would probably never want this enabled.

https://bugzilla.gnome.org/show_bug.cgi?id=773511
This is a Pexip specific change since we are only interested in using
gstflvdemux live.
This happens all the time for us, so no point warning about it.
Multiple SIMD-ified vpx plugins will be built if available. These
plugins will be put in a separate plugin directory which can be
linked to if configuring with --enable-simd-symlink=avx etc.
Hard code limit to 1500 ms between each generated key frame. This
should ideally be a property and set to a value derived from RTT.

This avoids generating bursts of keyframes when receiving many
PLIs/NACKs in close succession.

1500ms is quite large, but with 500ms and lots of packetloss, the
frequent keyframe generation will more then double the bitrate from
the libvpx encoder (configured at 1mbps, producing over 2mbps),
potentially making an already bad situation much worse. By adding
another second we only see about 1,4mbps, which is more acceptable.
Adds property that can be used to disable direct rendering.
When buffer is pushed downstream, we should not hold the buffer mapped
with write access. Doing so would often lead to unneccesary memcpy
later.

For instance, gst_buffer_make_writable() in
gst_video_decoder_finish_frame() will cause a memcpy because of
_memory_get_exclusive_reference().
Change so that if the intersection of upstream and template caps does
not contain a specific annex it will be not added to the caps. Previous
behavior was that it was set explictily to false.

This fixes an issue if an encoder (avenc_h263p) is linked late with the
payloader it could end up as not negotiated.
These can spam a lot if it actually happens.
The caps for Opus is generated via a utility function that creates a new
GstCaps instance after validating the codec arguments. There are possible ways
to solve this, we chose the one requiring the least number of modifications.

It would be also possible to simply set the caps with the
specified arguments; however, this will required to move all the validation
to qtdemux or require a change to gstreamer codec-utils.
sdroege and others added 10 commits January 5, 2025 23:52
The size does not include the 8 bytes tag and length, so an additional 8 bytes
must be removed here. 8 bytes are always available at this point because
otherwise the parsing of the tag and length right above would've failed.

Thanks to Antonio Morales for finding and reporting the issue.

Fixes GHSL-2024-260
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3888

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8042>
Incorrect parsing of these bits meant that we were incorrectly parsing
the VP9 uncompressed bitstream header for some profiles, as the header
is of variable length and format depending on the profile. Amongst
various unintended effects, this caused the width and height from the SS
to be incorrectly parsed and set in the caps.
This does not work on windows and is undefined on other platforms.
Use g_ascii_strtoll instead.

Add test for this scenario. (fails on windows without fix!)

Co-authored-by: Misha Baranov <[email protected]>
When you unplug a device you might not get it reported in device_removed()
but on device_state_changed() with a new state.
That is why we need to validate the state individually even after
passing DEVICE_STATE_ACTIVE to IMMDeviceEnumerator_EnumAudioEndpoints()
Turns out that both can happen if you push on a pad that is being
ripped away, so ignore them both.

Also fixup test to compare a flow-return using int compare, since they
are mostly negative!
prevent rtxsend to refer to the buffer
after it was pushed without increfing it
…lock()

by calling Flush() on the reader

This change allows us to unblock the source thread that could be locked
for a long time waiting for ReadSample() to finish.
tbeloqui added 2 commits March 4, 2025 09:00
Found out that ReadSample() could block until we release the samples
we have buffered, so clearing the queue will force this when we want
to flush effectively unblocking the pushing thread.
@Dari-K Dari-K force-pushed the dari/clear-ssrc branch 3 times, most recently from f6f18a8 to 251d332 Compare March 5, 2025 16:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.