aboutsummaryrefslogtreecommitdiff
path: root/plugins/rtp
AgeCommit message (Collapse)Author
2025-11-15rtp: device: Ensure even heights for rescaled streamsRobert Mader
Odd heights, while generally handled by Gstreamer, can cause issues in various places - most importantly hardware video en-/decoders and GL/VK drivers - as in most cases 2x0 or 2x2 subsampled intermediate pixel formats are used (such as I420, YUYV, NV12 etc.). Thus ensure we always end up with an even height.
2025-11-15rtp: device: Tweak common_widths for 16:9 ratioRobert Mader
Most used widths can be devided by 4*3 as well as 16*9, resulting in heights being multiples of two. There are two exceptions, though: 360 (/16*9=202.5) and 400 (/16*9=225). Odd heights, while generally handled by Gstreamer, can cause issues in various places - most importantly hardware video en-/decoders and GL/VK drivers - as in most cases 2x0 or 2x2 subsampled intermediate pixel formats are used (such as I420, YUYV, NV12 etc.). Thus tweak the widths in question so they can be cleanly devided 16*9 and 4*3 with even results, as these are the most common ratios for cameras.
2025-10-06device: Request 30 fps in absence of framerate negotiationRobert Mader
Sources not capable of negotiating framerates, most notably the libcamera Pipewire plugin, might still be able to honor a value requested and otherwise usually just ignore it. Thus setting a value that we can reasonably assume to be supported has several benefits: 1. It potentially prevents the source from producing much higher fps than useful for the usecase, causing resource waste. 2. It decreases the chances of running into fallback code paths which are often badly optimized performance-wise. One example is that currently the implicitly set framerate values cause regular renegotiations (including buffer re-allocations) in pipewiresrc. Another is the internal get_target_bitrate(), currently returning uint.MAX. 3. If the source can only produce e.g. 15 fps, that's usually handled without major issues. Thus follow the example of Snapshot, which has been doing this for a while and gets more testing with libcamera, and set framerate to 30/1.
2025-10-06device: Target resolution of 720p on libcamera devicesRobert Mader
Most cameras needing the fallback path are provided by libcamera, which does not yet provide framerates. At the same time many such cameras support very high resolutions - often in the 4K category - and are paired with rather weak CPUs. Examples for this are popular mobile phones such as the PinePhone Pro or the OnePlus6. In order to archive a somewhat stable FPS count in such scenarios, target a resolution of 720p as a compromise of quality and performance.
2025-10-06Only support SystemMemory caps for videoRobert Mader
An increasing number of video device providers, such as `pipewiresrc` (in the upcoming 1.6 release) and `v4l2src` (since Gst 1.26), support `memory:DMABuf` caps using the special `DMA_DRM` caps. This is not expected and handled properly, thus filter out any non-default features.
2025-07-20Meson: Improve plugin buildingMarvin W
Make relevant plugins enabled by default (instead of auto-enabling them if dependencies are met). Also make disabled plugins explicit in the summary.
2025-05-23Voice processor: add back call to set stream delayJacques Comeaux
2025-04-09RTP: Tear down most of GStreamer while not in a call.Marvin W
This includes #1679 and works around an upstream bug in pipewire causing #1685
2025-04-08Show call button regardless of contact online statusfiaxh
2025-04-06Drop CMake supportMarvin W
2025-04-04Meson: Add option to set rpath on installed binariesMarvin W
2025-04-04Meson: Make plugindir relative to libdirMarvin W
2025-02-24Voice processor: merge init and setup methodsMarvin W
This ensures we are never in an uninitialized state when processing audio data
2025-02-23Fix build with webrtc-audio-processing 2.xMarvin W
2025-02-22Voice processor: add support for webrtc-audio-processing 1.x and 2.xMarvin W
2025-01-18Meson: Add build option summaryMarvin W
2025-01-18Meson: Add all defines to handle dependency versionsMarvin W
2025-01-12RTP: gtksink no longer neededMarvin W
2023-11-13rtp plugin doesn't depend on GnuTLShrxi
2023-10-07Fix some compiler warningsfiaxh
2023-10-06meson: Add version detection for some dependencieshrxi
2023-10-06meson: Add RTP options that are also present in the CMakeLists.txthrxi
2023-10-06meson: Add rtp pluginhrxi
2023-07-09Fix potential crash in video callsMarvin W
2023-04-22Fix video for cameras with rotated imageMarvin W
2023-03-20Fix C binding for gst_video_frame_get_dataMarvin W
Fixes #1267
2022-08-21RTP: Use gstreamers new VideoFrame.mapMarvin W
2022-08-21RTP: Use latest gstreamer vapi if vala version older than 0.56.1Marvin W
2022-08-21CMake: Fix version checksMarvin W
2022-07-27Gtk4 bug fixes and improvementsMarvin W
2022-07-27Improve Gtk4 portfiaxh
2022-07-27Video for GTK4Marvin W
2022-07-27Port from GTK3 to GTK4fiaxh
2022-05-17Support devices with multiple framerate options in get_max_fps (#1224)Matthew Egeler
2022-05-17Fix calculation of best camera frameratefoucault
When the algorithm iterates over all the available v4l2 capabilities it tries to determine the best framerate for each one of YUYV (video/x-raw) modes presented by the hardware (best_fraction, line 357 in device.vala). Regardless of what's determined to be the "best" YUYV mode from within the conditional right after (line 385) the best fractional framerate will always point to the last iterated framerate, which might be an extremely low one, like 7 or 5 FPS. When the framerate is then stored in the Gst.Structure (line 394) the fractional framerate will always be that last value which might be different than the correct one as calculated by best_fps (line 386). This workaround solves this issue by only updating best_fraction when the conditional in line 385 is satisfied. from issue #1195
2022-02-13RTP: clarify codec support warningmjk
2022-02-12Calls: Fix device selector for multi-party calls, allow picking device ↵Marvin W
before call started
2022-02-11RTP: Only display SSRC mismatch warning for GLib versions supporting ↵Marvin W
warning_once
2022-02-11RTP: Make codec and hardware support compile-time configurableMarvin W
2022-02-10Various call fixesfiaxh
- Don't create incoming CIM calls twice - Fix is_color check for video devices w/ multiple formats - Tolerate mismatching content creator on jingle responses - Change MUJI namespace to urn:xmpp:jingle:muji:0
2022-02-09DTLS: Handle DTLS fingerprint in transport-info before session-acceptMarvin W
2022-02-08Calls: Device pickerMarvin W
2022-02-07Various call UI/UX improvementsfiaxh
2022-02-06RTP: Use two channels for OpusMarvin W
Fixes: #1189
2022-02-06RTP: Add support for G.722Marvin W
2022-02-06RTP: Restrict number of recaps to save resourcesMarvin W
2022-01-27RTP: Workaround drawing issues on resolution changeMarvin W
2022-01-23Small cleanupfiaxh
2022-01-21RTP: VAAPI seems to not support VBR and low-power mode at the same timeMarvin W
2022-01-21RTP: Use VP8 wait-for-keyframe only for GStreamer 1.18+Marvin W