GNOME Bugzilla – Bug 499178
unexpected not negotiated and other weird beharviours
Last modified: 2007-11-29 10:35:30 UTC
1 - pngdec should negotiate with ximagesink (see first output bellow) 2 - if I dont put additional thread (fakesrc ! fakesink) it just get EOS without any message or screen (see second output bellow) 3 - if I put the additional thread (fakesrc ! fakesink) I get the message "not-negotiated" which is unexpected 4 - filesrc ! only_chain_func_element ! pngdec ! ximagesink (I think I got GST_FLOW_RESEND for gst_pad_push) and it just finish without do nothing (no msg, no screen) 5- filesrc ! only_chain_func_element ! pngdec ! ximagesink fakesrc ! fakesink (I think I got GST_FLOW_RESEND for gst_pad_push) and it just finish without do nothing (no msg, no screen) 6- by just putting ffmpegcolorspace between pngdec and ximagesink everything works fine. BUT ffmpegcolorspace shouldn't not be need in this case. edlima@feisty-laptop:~/Projects/TestFiles$ gst-launch-0.10 filesrc location=gen.png ! pngdec ! ximagesink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Got EOS from element "pipeline0". Execution ended after 281000 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... FREEING pipeline ... edlima@feisty-laptop:~/Projects/TestFiles$ gst-launch-0.10 filesrc location=gen.png ! pngdec ! ximagesink fakesrc ! fakesink Setting pipeline to PAUSED ... Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock ERROR: from element /pipeline0/pngdec0: Internal data stream error. Additional debug info: gstpngdec.c(520): gst_pngdec_task (): /pipeline0/pngdec0: stream stopped, reason not-negotiated Execution ended after 720000 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... FREEING pipeline ...
Also try this: gst-launch-0.10 -v filesrc location=test.png ! pngdec ! ximagesink Use a PNG file that differs from your X display in bpp to get this proper failure (with gst 0.10.14 from Ubuntu Gutsy): Setting pipeline to PAUSED ... Pipeline is PREROLLING ... /pipeline0/pngdec0.src: caps = video/x-raw-rgb, width=(int)320, height=(int)240, bpp=(int)32, framerate=(fraction)0/1, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255 ERROR: from element /pipeline0/pngdec0: Internal data stream error. Additional debug info: gstpngdec.c(515): gst_pngdec_task (): /pipeline0/pngdec0: stream stopped, reason not-negotiated ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... /pipeline0/pngdec0.src: caps = NULL FREEING pipeline ... With CVS gst I get this instead: Setting pipeline to PAUSED ... Pipeline is PREROLLING ... /pipeline0/pngdec0.src: caps = video/x-raw-rgb, width=(int)320, height=(int)240, bpp=(int)32, framerate=(fraction)0/1, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255 Pipeline is PREROLLED ... Setting pipeline to PLAYING ... New clock: GstSystemClock Got EOS from element "pipeline0". Execution ended after 179000 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... /pipeline0/pngdec0.src: caps = NULL Setting pipeline to NULL ... FREEING pipeline ... Note how data seems to flow up to proper EOS, however the caps on ximagesink:sink are never set. The debug log shows some more weirdness, for example the EOS message gets out _before_ pngdec errors out with not-negotiated. Even more strange: I can't reproduce this with jpegdec at all...
I suspect that with older core, there was more overhead in handling the EOS message, enough to let the ERROR message go through. This change to pngdec should fix it. * ext/libpng/gstpngdec.c: (gst_pngdec_task): Post error before sending EOS. Fixes #499178.