GNOME Bugzilla – Bug 631774
[xvimagesink] sets non-simple caps on pad_alloced buffer
Last modified: 2010-10-10 21:22:50 UTC
Haven't looked what's happening yet, but when running gst-plugins-bad/tests/icled/output-selector-test, it fails with: GStreamer-CRITICAL **: gst_pad_set_caps: assertion `caps == NULL || gst_caps_is_fixed (caps)' failed which seems to come from videotestsrc:
+ Trace 224076
(gdb) call gst_caps_to_string(newcaps) $3 = ( gchar *) 0x7fffec001370 "video/x-raw-yuv, format=(fourcc)YV12, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2; video/x-raw-yuv, format=(fourcc)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2"
Culprit seems to be xvimagesink: xvimagesink xvimagesink.c:2671:gst_xvimagesink_buffer_alloc: intersection: video/x-raw-yuv, format=(fourcc)YV12, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2; video/x-raw-yuv, format=(fourcc)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)320, height=(int)240, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2 Not strictly a regression, but might be worth fixing before the release. Setting as blocker for the time being. Even with that fixed, the test errors out with not-negotiated, so something else might be going on too.
commit 96006aded8a6bd8790c5f4b7ab1661dd847b54bd Author: Sebastian Dröge <sebastian.droege@collabora.co.uk> Date: Sun Oct 10 18:35:54 2010 +0200 xvimagesink: Make sure that the caps for upstream negotiation are simple cap Fixes bug #631774.
Wonder if that is the right fix? Just just moved the truncate a bit down. But Imho that should not be needed. The intersection at the start of gst_xvimagesink_buffer_alloc() should return simple caps, given that the passed caps are simple and we can create a proper set of caps in the xcontext.