GNOME Bugzilla – Bug 343031
v4l2src caps negotion is faulty
Last modified: 2006-08-24 06:29:32 UTC
This works: gst-launch-0.10 v4l2src ! videoscale ! video/x-raw-yuv,width=320,height=240 ! ximagesink while this creates output like that of a broken analog tv (picture moves around) gst-launch-0.10 v4l2src ! videoscale ! video/x-raw-rgb,width=320,height=240 ! ximagesink
Im not sure this is really a BUG: The following two pipelines works fine for me: gst-launch-0.10 v4l2src ! videoscale ! video/x-raw-rgb,width=320,height=240 ! ffmpegcolorspace ! ximagesink and gst-launch-0.10 v4l2src ! video/x-raw-rgb,width=320,height=240 ! ffmpegcolorspace ! ximagesink While the following one: gst-launch-0.10 --gst-debug=*:5 v4l2src ! video/x-raw-rgb ! ximagesink shows: ERROR: from element /pipeline0/v4l2src0: Could not negotiate format I suppose it is because caps are not compatible, see: caps of src: video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)32, depth=(int)32, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, endianness=(int)4321, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)32, depth=(int)32, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, endianness=(int)4321, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)24, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, endianness=(int)4321, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)16, depth=(int)16, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, endianness=(int)4321, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)16, depth=(int)16, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, endianness=(int)1234, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)16, depth=(int)15, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, endianness=(int)4321, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001; video/x-raw-rgb, bpp=(int)16, depth=(int)15, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, endianness=(int)1234, width=(int)[ 48, 640 ], height=(int)[ 32, 480 ], framerate=(fraction)30000/1001 caps of peer: video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], pixel-aspect-ratio=(fraction)1/1 so, there is no intersection: gstbasesrc.c(1586):gst_base_src_default_negotiate:<v4l2src0> intersect: EMPTY
What you have reported is not a v4l2src bug (since you are using videoscale). BTW: I have just fixed some set_caps bugs. Now the caps will be set to the width and height the driver is really working with. Stefan, please confirm what I'm just saying and Thomas, please close this bug.