[gstreamer-bugs] [Bug 311848] New: Renegotiation broken
bugzilla-daemon at bugzilla.gnome.org
bugzilla-daemon at bugzilla.gnome.org
Thu Jul 28 04:05:36 PDT 2005
Please DO NOT reply to this by email. All additional comments should be made in
the comments box of this bug report.
http://bugzilla.gnome.org/show_bug.cgi?id=311848
GStreamer | gstreamer (core) | Ver: HEAD CVS
Summary: Renegotiation broken
Product: GStreamer
Version: HEAD CVS
Platform: Other
OS/Version: Linux
Status: UNCONFIRMED
Severity: major
Priority: High
Component: gstreamer (core)
AssignedTo: gstreamer-bugs at lists.sourceforge.net
ReportedBy: rbultje at ronald.bitfreak.net
QAContact: gstreamer-bugs at lists.sourceforge.net
CC: wim at fluendo.com,all-bugs at bugzilla.gnome.org
gst-launch-0.9 videotestsrc !
video/x-raw-yuv,width=200,height=150,format=\(fourcc\)YUY2 ! ffmpegcolorspace !
videoscale ! ximagesink
Resize the ximagesink window (to emulate what Totem does), and observe
interesting behaviour, such as crashes if you decrease size and garbled output
if you increase window size.
The negotiation of the new size will fail in ffmpegcolorspace's
gst_base_transform_setcaps() in the no_transform_possible case, because it
somehow tries to set the new window's size from videoscale on ffmpegcolorspace
(all this during gst_pad_alloc_buffer()), this fails because the sizes don't
match, and after that, stuff collapses.
Here's a backtrace of the no_transform_possible in ffmpegcolorspace:
#6 0x406d9f21 in gst_base_transform_setcaps (pad=0x869d008, caps=0x86b5de0)
at gstbasetransform.c:447
#7 0x4004b5f2 in gst_pad_set_caps (pad=0x869d008, caps=0x86b5de0)
at gstpad.c:1933
#8 0x4004c0d4 in gst_pad_alloc_buffer (pad=0x869d008,
offset=18446744073709551615, size=120000, caps=0x86b5de0, buf=0x4122c258)
at gstpad.c:2021
#9 0x406da1b7 in gst_base_transform_handle_buffer (trans=0x869aa90,
inbuf=0x86b2ca0, outbuf=0x4122c258) at gstbasetransform.c:587
#10 0x406da533 in gst_base_transform_chain (pad=0x869cf38, buffer=0x86b2ca0)
at gstbasetransform.c:658
#11 0x4004d11c in gst_pad_chain (pad=0x869cf38, buffer=0x86b2ca0)
at gstpad.c:2844
#12 0x4004d62d in gst_pad_push (pad=0x86ab070, buffer=0x86b2ca0)
at gstpad.c:2930
#13 0x4081e3aa in gst_capsfilter_chain (pad=0x0, buf=0x86b2ca0)
at gstcapsfilter.c:194
---Type <return> to continue, or q <return> to quit---
#14 0x4004d11c in gst_pad_chain (pad=0x86ab240, buffer=0x86b2ca0)
at gstpad.c:2844
#15 0x4004d62d in gst_pad_push (pad=0x8687cb8, buffer=0x86b2ca0)
at gstpad.c:2930
#16 0x406d78c6 in gst_base_src_loop (pad=0x8687cb8) at gstbasesrc.c:677
#17 0x4005e4c6 in gst_task_func (task=0x86ac100, tclass=0x86b5958)
at gsttask.c:126
#18 0x40301b5a in g_thread_pool_free () from /usr/lib/libglib-2.0.so.0
#19 0x402ffe9a in g_static_private_free () from /usr/lib/libglib-2.0.so.0
#20 0x40237341 in start_thread () from /lib/tls/libpthread.so.0
#21 0x40417fee in clone () from /lib/tls/libc.so.6
(gdb) print gst_caps_to_string (caps) <- in frame 6
$1 = (
gchar *) 0x86c7dd8 "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)201, height=(int)152, framerate=(double)30,
pixel"...
Let's now look at gst-launch-0.9 videotestsrc !
video/x-raw-yuv,width=200,height=150,format=\(fourcc\)YUY2 ! queue !
ffmpegcolorspace ! videoscale ! ximagesink, and resize the window again, which
more closely resembles Totem's behaviour; it will directly quit at:
ERROR (0x8f19310 - 0:00:02.947686000) queue_dataflow(30547)
gstqueue.c(783):gst_queue_loop:<queue0> streaming stopped, reason pad not negotiated
ERROR (0x8f19310 - 0:00:02.947818000) queue_dataflow(30547)
gstqueue.c(783):gst_queue_loop:<queue0> streaming stopped, reason pad not negotiated
ERROR: from element /pipeline0/queue0: streaming stopped, reason pad not negotiated
I have the feeling that this is because of ASYNC caps. Problem is that
gst_pad_buffer_alloc() calls gst_pad_set_caps(), whereas the normal dataflow
also calls this, and those could conflict in some cases. I'd rather see
gst_pad_buffer_alloc() only check whether pads can accept the caps, and have
actual normal dataflow take care of forward renegotiation afterwards (i.e. move
responsibility of renegotiation further down the stack).
------- You are receiving this mail because: -------
You are the assignee for the bug.
You are the QA contact for the bug.
More information about the Gstreamer-bugs
mailing list