GNOME Bugzilla – Bug 489940
[gdkpixbufdec] gst_value_set_fraction: assertion 'denominator != 0' failed
Last modified: 2007-10-25 10:26:59 UTC
Please describe the problem: gdkpixbufdec does not seem to be working (on Debian/testing). Steps to reproduce: gst-launch filesrc location=/tmp/test.svg ! gdkpixbufdec ! ffmpegcolorspace ! xvimagesink Actual results: It outputs the following warning: Setting pipeline to PAUSED ... Pipeline is PREROLLING ... (gst-launch-0.10:29274): GStreamer-CRITICAL **: gst_value_set_fraction: assertion `denominator != 0' failed then freezes. Expected results: It should display the SVG file, the same pipeline with a JPG file and jpegdec instead works fine. Does this happen every time? Yes, even with other types of files (png, gif, tiff...). Other information: Here is the part of the debug log (pipeline run with GST_DEBUG="*:4", interrupted with Ctrl-C) around the warning (I tried to post the whole log, but bugzilla refuses too long messages). 0:00:00.000248000 28922 0x804e050 INFO GST_INIT gst.c:594:init_pre: Initializing GStreamer Core Library version 0.10.14 0:00:00.000358000 28922 0x804e050 INFO GST_INIT gst.c:595:init_pre: Using library installed in /usr/lib 0:00:00.000391000 28922 0x804e050 INFO GST_INIT gst.c:605:init_pre: Linux pennylane 2.6.22-2-686 #1 SMP Fri Aug 31 00:24:01 UTC 2007 i686 [...] 0:00:00.206062000 28922 0x8135170 DEBUG task gsttask.c:154:gst_task_func: Entering task 0x8137800, thread 0x8135170 0:00:00.206108000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1462:gst_base_src_update_length:<filesrc0> reading offset 0, length 4096, size 264, segment.stop -1, maxsize 264 0:00:00.206141000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1540:gst_base_src_get_range:<filesrc0> calling create offset 0 length 264, time 0 0:00:00.206187000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1432:gst_base_src_do_sync:<filesrc0> get_times returned invalid start 0:00:00.206214000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1560:gst_base_src_get_range:<filesrc0> buffer ok 0:00:00.206246000 28922 0x8135170 DEBUG GST_EVENT gstpad.c:4183:gst_pad_send_event:<gdkpixbuf0:sink> have event type newsegment 0:00:00.206283000 28922 0x8135170 INFO GST_PADS gstpad.c:2913:gst_pad_event_default_dispatch:<gdkpixbuf0:sink> Sending event 0x80622a0 (newsegment) to all internally linked pads 0:00:00.206337000 28922 0x8135170 DEBUG GST_PADS gstpad.c:2866:gst_pad_get_internal_links_default:<gdkpixbuf0:sink> adding pad gdkpixbuf0:src 0:00:00.206378000 28922 0x8135170 DEBUG GST_EVENT gstpad.c:4183:gst_pad_send_event:<ffmpegcsp0:sink> have event type newsegment 0:00:00.206419000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:1292:gst_base_transform_sink_eventfunc:<ffmpegcsp0> received NEW_SEGMENT 0 -- 264, time 0, accum 0 0:00:00.206453000 28922 0x8135170 DEBUG GST_EVENT gstpad.c:4183:gst_pad_send_event:<xvimagesink0:sink> have event type newsegment 0:00:00.206482000 28922 0x8135170 DEBUG basesink gstbasesink.c:1951:gst_base_sink_event:<xvimagesink0> event 0x80622a0 (newsegment) 0:00:00.206509000 28922 0x8135170 DEBUG basesink gstbasesink.c:1974:gst_base_sink_event:<xvimagesink0> newsegment 0x80622a0 0:00:00.206543000 28922 0x8135170 DEBUG basesink gstbasesink.c:880:gst_base_sink_configure_segment:<xvimagesink0> configured NEWSEGMENT update 0, rate 1.000000, applied rate 1.000000, format 2, 0 -- 264, time 0, accum 0 0:00:00.206583000 28922 0x8135170 DEBUG basesink gstbasesink.c:1837:gst_base_sink_queue_object_unlocked:<xvimagesink0> now 0 prerolled items 0:00:00.206609000 28922 0x8135170 DEBUG basesink gstbasesink.c:1894:gst_base_sink_queue_object_unlocked:<xvimagesink0> need more preroll data 0 <= 0 0:00:00.206640000 28922 0x8135170 DEBUG GST_PADS gstpad.c:4211:gst_pad_send_event:<xvimagesink0:sink> sent event, result 1 0:00:00.206670000 28922 0x8135170 DEBUG GST_PADS gstpad.c:4211:gst_pad_send_event:<ffmpegcsp0:sink> sent event, result 1 0:00:00.206700000 28922 0x8135170 DEBUG GST_PADS gstpad.c:4211:gst_pad_send_event:<gdkpixbuf0:sink> sent event, result 1 0:00:00.206828000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1462:gst_base_src_update_length:<filesrc0> reading offset 264, length 4096, size 264, segment.stop -1, maxsize 264 0:00:00.206862000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1605:gst_base_src_get_range:<filesrc0> unexpected length 4096 (offset=264, size=264) 0:00:00.206891000 28922 0x8135170 INFO basesrc gstbasesrc.c:1714:gst_base_src_loop:<filesrc0> pausing after gst_base_src_get_range() = unexpected 0:00:00.206918000 28922 0x8135170 DEBUG basesrc gstbasesrc.c:1797:gst_base_src_loop:<filesrc0> pausing task, reason unexpected 0:00:00.206948000 28922 0x8135170 DEBUG GST_PADS gstpad.c:4343:gst_pad_pause_task:<filesrc0:src> pause task 0:00:00.206976000 28922 0x8135170 DEBUG task gsttask.c:476:gst_task_pause:<task0> Pausing task 0x8137800 0:00:00.207013000 28922 0x8135170 DEBUG GST_EVENT gstevent.c:286:gst_event_new: creating new event 0x80628a0 eos 86 0:00:00.207045000 28922 0x8135170 DEBUG GST_EVENT gstpad.c:4183:gst_pad_send_event:<gdkpixbuf0:sink> have event type eos (gst-launch-0.10:28922): GStreamer-CRITICAL **: gst_value_set_fraction: assertion `denominator != 0' failed 0:00:00.257611000 28922 0x8135170 DEBUG gdkpixbuf gstgdkpixbuf.c:256:gst_gdk_pixbuf_flush: Set size to 800x600 0:00:00.257702000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:2373:gst_pad_set_caps:<gdkpixbuf0:src> caps video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)800, height=(int)600, framerate=(fraction)0/0 0:00:00.257844000 28922 0x8135170 DEBUG GST_PADS gstpad.c:2702:gst_pad_alloc_buffer_full:<gdkpixbuf0:src> offset 18446744073709551615, size 1920000 0:00:00.257881000 28922 0x8135170 DEBUG GST_PADS gstpad.c:2633:gst_pad_buffer_alloc_unchecked:<ffmpegcsp0:sink> calling bufferallocfunc &gst_base_transform_buffer_alloc (@0xb788ddb0) for size 1920000 offset NONE 0:00:00.257920000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:1067:gst_base_transform_buffer_alloc:<ffmpegcsp0> allocating a buffer of size 1920000 ... 0:00:00.257947000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:1069:gst_base_transform_buffer_alloc:<ffmpegcsp0> ... and offset NONE 0:00:00.257974000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:1190:gst_base_transform_buffer_alloc:<ffmpegcsp0> not configured 0:00:00.258004000 28922 0x8135170 DEBUG GST_PADS gstpad.c:2680:gst_pad_buffer_alloc_unchecked:<ffmpegcsp0:sink> fallback buffer alloc 0:00:00.261139000 28922 0x8135170 DEBUG gdkpixbuf gstgdkpixbuf.c:282:gst_gdk_pixbuf_flush: pushing... 1920000 bytes 0:00:00.261221000 28922 0x8135170 DEBUG GST_PADS gstpad.c:3437:gst_pad_chain_unchecked:<ffmpegcsp0:sink> caps changed to 0x815fb80 video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)800, height=(int)600, framerate=(fraction)0/0 0:00:00.261588000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:2257:gst_pad_accept_caps:<ffmpegcsp0:sink> accept caps of 0x815fb80 0:00:00.261619000 28922 0x8135170 DEBUG GST_PADS gstpad.c:2203:gst_pad_acceptcaps_default:<ffmpegcsp0:sink> caps video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)800, height=(int)600, framerate=(fraction)0/0 0:00:00.261715000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:2049:gst_pad_get_caps:<ffmpegcsp0:sink> get pad caps 0:00:00.261743000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:1959:gst_pad_get_caps_unlocked:<ffmpegcsp0:sink> get pad caps 0:00:00.261769000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:1963:gst_pad_get_caps_unlocked:<ffmpegcsp0:sink> dispatching to pad getcaps function 0:00:00.261803000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:2077:gst_pad_peer_get_caps:<ffmpegcsp0:src> get peer caps 0:00:00.261831000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:2049:gst_pad_get_caps:<xvimagesink0:sink> get pad caps 0:00:00.261859000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:1959:gst_pad_get_caps_unlocked:<xvimagesink0:sink> get pad caps 0:00:00.261885000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:1963:gst_pad_get_caps_unlocked:<xvimagesink0:sink> dispatching to pad getcaps function 0:00:00.261917000 28922 0x8135170 DEBUG GST_CAPS gstpad.c:1976:gst_pad_get_caps_unlocked:<xvimagesink0:sink> pad getcaps returned video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 0:00:00.262177000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:561:gst_base_transform_getcaps:<ffmpegcsp0:sink> peer caps video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 0:00:00.262318000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:565:gst_base_transform_getcaps:<ffmpegcsp0:sink> our template video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)I420; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)YV12; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)YUY2; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)24, depth=(int)24, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)24, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, endianness=(int)4321; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)Y42B; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)Y444; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)32, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)32, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)32, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)32, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)24, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)24, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)24, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, endianness=(int)4321; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)32, depth=(int)24, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, endianness=(int)4321; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)YUV9; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)YVU9; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)Y41B; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)16, depth=(int)16, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, endianness=(int)1234; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)16, depth=(int)15, red_mask=(int)31744, green_mask=(int)992, blue_mask=(int)31, endianness=(int)1234; video/x-raw-gray, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)8, depth=(int)8; video/x-raw-rgb, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)8, depth=(int)8, endianness=(int)1234; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)UYVY; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)IYU1; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)AYUV 0:00:00.263487000 28922 0x8135170 DEBUG basetransform gstbasetransform.c:567:gst_base_transform_getcaps:<ffmpegcsp0:sink> intersected video/x-raw-yuv, format=(fourcc)YV12, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)YUY2, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, format=(fourcc)UYVY, width=(int)[ 1, 2046 ], height=(int)[ 1, 2046 ], framerate=(fraction)[ 0/1, 2147483647/1 ] [...]
This has been fixed in CVS: 2007-06-28 Tim-Philipp Müller <tim at centricular dot net> * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_setcaps), (gst_gdk_pixbuf_class_init), (gst_gdk_pixbuf_flush), (gst_gdk_pixbuf_sink_event), (gst_gdk_pixbuf_change_state): Add state change function where we set 0/1 as default framerate in case our setcaps function isn't called, like it might not in a filesrc ! gdkpixbufdec scenario. Fixes assertion triggered by gdkpixbufdec trying to create caps with a 0/0 framerate. Also post an error message on the bus if gst_pad_push() fails when called from our sink event handler (+1 for flow returns for event functions in 0.11) instead of failing silently.