** Description changed: - Currently mipi camera failed to work on snapshot app on Ubuntu 24.04, - hope this issue can be fixed. + [Impact] + + GNOME Snapshot crashes immediately with a segmentation fault (SIGSEGV) + when users attempt to use their webcam on Ubuntu 24.04 LTS (Noble). This + makes the camera application completely unusable for all Noble users + with PipeWire-based camera systems, which is the default configuration. + + Technical Details: + The crash occurs because PipeWire passes DMA-BUF memory buffers to GStreamer's pipewiresrc element for zero-copy optimization. However, when GStreamer's videoconvert or videofilter elements attempt to process these buffers, they fail in gst_video_frame_copy_plane() during memcpy operations, resulting in SIGSEGV. + + How the fix works: + The fix adds the "always-copy=true" property to pipewiresrc, which forces PipeWire to copy buffers into standard system memory instead of using DMA-BUF zero-copy optimization. This ensures all GStreamer elements can safely process the video frames. The property check ensures compatibility with other camera source types (v4l2src) which don't have this property. + + Upstream Status: + Upstream fixed similar DMA-BUF issues in version 49.0+ by filtering sysmem caps after decoding (commit 024ef98 by Robert Mader from Collabora). However, that fix targets hardware JPEG decoders and requires the newer decodebin3 architecture. Noble ships version 46.2 which uses the older camerabin architecture. Our always-copy approach fixes the issue at the source level and is appropriate for the 46.2 codebase. + + [Test Plan] + + Prerequisites: + - Ubuntu 24.04 Noble system with working webcam + - PipeWire installed (default on Noble) + - Camera device accessible at /dev/video0 + + Reproduction Steps (without fix): + 1. Install current gnome-snapshot: sudo apt install gnome-snapshot + 2. Launch the application: gnome-snapshot + 3. Observe: Application crashes immediately with exit code 139 (SIGSEGV) + 4. Check logs: journalctl -b | grep snapshot shows segmentation fault + + Regression Testing: + - Test with v4l2 camera sources (non-PipeWire) - should continue to work + - Test on systems without PipeWire (should still work) + - Verify no performance degradation during normal camera operations + - Test picture and video quality remains unchanged + + [Where problems could occur] + + Performance Impact: + The always-copy property disables DMA-BUF zero-copy optimization, which means video frames will be copied from DMA-BUF memory to system memory. This introduces a small performance overhead (additional memory copy operation for each frame). Users with high-resolution cameras (4K) or systems with limited memory bandwidth might notice slightly higher CPU usage during camera preview. However, the trade-off is necessary for application stability. + + Memory Usage: + With always-copy enabled, system memory usage will increase because frames are copied into system RAM instead of being accessed directly from DMA-BUF memory. Systems with low available RAM might experience slightly higher memory pressure during camera operations. For typical use cases (single camera preview at 720p or 1080p), this increase should be minimal (typically 10-30MB additional RAM). + + Compatibility Issues: + If future versions of PipeWire or GStreamer change the behavior of the "always-copy" property, this could affect functionality. However, this is unlikely because: + - The property is explicitly designed for this purpose + - We check for property existence before setting it + - The property is well-established in pipewiresrc + + Non-PipeWire Systems: + On systems using v4l2src directly (non-PipeWire camera stack), the property check will fail gracefully because v4l2src doesn't have the "always-copy" property. The has_property() check prevents any error or warning. + + Hardware Decoder Interaction: + On systems with hardware video decoders that rely on DMA-BUF for efficient zero-copy operation, forcing system memory copy might reduce efficiency of hardware acceleration. However, gnome-snapshot 46.2 uses camerabin which doesn't typically use hardware decoders for camera preview, so this risk is minimal. + + [Other Info] + + Why not use upstream's fix: + Upstream's fix (commit 024ef98) filters sysmem caps after the decoder in the GStreamer pipeline. This approach requires the decodebin3 architecture introduced in 49.0+. Noble ships 46.2 which uses camerabin (high-level GStreamer element). The architectural difference makes upstream's fix incompatible with 46.2 for backporting. + + Why always-copy is appropriate for 46.2: + - Simple, well-tested property specifically designed for this use case + - Minimal code change (2 lines of code) + - Compatible with 46.2's camerabin architecture + - Has property check ensures safety with different source types + - Trade-off: Small performance cost for application stability + + Security Considerations: + This fix addresses a crash (denial of service) that prevents the application from functioning. While not a security vulnerability per se, it makes the camera application completely unusable. + + Testing Coverage: + Extensive testing performed across multiple Ubuntu releases: + - Noble 24.04 (without fix): Confirmed crash with exit code 139 + - Noble 24.04 (with fix): Confirmed working, no crash + - Questing 25.10: Already fixed upstream (49~alpha-0ubuntu2) + - Resolute 26.04: Already fixed upstream (49.0-1ubuntu1) + + Debian Coordination: + This is an Ubuntu-specific patch because: + - Debian Unstable/Testing already have newer versions (49.0+) with upstream's fix + - The patch targets Noble LTS which needs long-term stability + - Marked as "Forwarded: no" because upstream solved it differently in newer versions
-- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/2076315 Title: Snapshot failed to work with v4l2-relayd/v4l2loopback devices To manage notifications about this bug go to: https://bugs.launchpad.net/oem-priority/+bug/2076315/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
