GNOME Bugzilla – Bug 418982
adder causes : ** WARNING **: Size 2 is not a multiple of unit size 4
Last modified: 2007-09-25 07:30:18 UTC
+ Trace 119136
as far as I see the problem is if you have n>1 sources that deliver different sized packets imagine A delivers a frames and B delivers a+1, then A delives a frames again adder would collect a frames and then 1 frame if the element after adder expects at least 2 frames this breaks
The problem seems no related to the buffersizes. I seems to re-negotiate the format several times which I don't really understand as all the sink-pads should deliver in the same format. 0:00:02.954279000 14701 0x8198d50 DEBUG adder gstadder.c:495:gst_adder_sink_event: Got newsegment event on pad adder_0x81a3830:sink1 0:00:02.954647000 14701 0x8198d50 LOG adder gstadder.c:172:gst_adder_setcaps:<adder_0x81a3830> setting caps on pad 0x8376cc0,sink1 to audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)1 0:00:02.954695000 14701 0x8198d50 DEBUG adder gstadder.c:192:gst_adder_setcaps:<adder_0x81a3830> parse_caps sets adder to format int 0:00:02.954856000 14701 0x804fe08 DEBUG adder gstadder.c:495:gst_adder_sink_event: Got flush-stop event on pad adder_0x81a3830:sink0 0:00:02.955066000 14701 0x804fe08 LOG adder gstadder.c:387:forward_event_func:<adder_0x81a3830:sink0> Sent event 0x80667b8 (seek). 0:00:02.956031000 14701 0x8189af0 DEBUG adder gstadder.c:495:gst_adder_sink_event: Got newsegment event on pad adder_0x81a3830:sink0 0:00:02.958770000 14701 0x8189af0 LOG adder gstadder.c:681:gst_adder_collected:<adder_0x81a3830> starting to cycle through channels, 11024 bytes available (bps = 2) 0:00:02.958784000 14701 0x8189af0 LOG adder gstadder.c:711:gst_adder_collected:<adder_0x81a3830> channel 0x837c830: making output buffer of 11024 bytes 0:00:02.958800000 14701 0x8189af0 LOG adder gstadder.c:724:gst_adder_collected:<adder_0x81a3830> channel 0x837c830: copying 11024 bytes from data 0x8391e00 0:00:02.958822000 14701 0x8189af0 LOG adder gstadder.c:730:gst_adder_collected:<adder_0x81a3830> channel 0x83794e8: mixing 11024 bytes from data 0xb5601400 0:00:02.958883000 14701 0x8189af0 LOG adder gstadder.c:730:gst_adder_collected:<adder_0x81a3830> channel 0x8379640: mixing 11024 bytes from data 0x83a0f00 0:00:02.959072000 14701 0x8189af0 LOG adder gstadder.c:784:gst_adder_collected:<adder_0x81a3830> pushing outbuf, timestamp 0:00:00.124988662 0:00:02.962635000 14701 0x8189af0 LOG adder gstadder.c:681:gst_adder_collected:<adder_0x81a3830> starting to cycle through channels, 11024 bytes available (bps = 2) 0:00:02.962648000 14701 0x8189af0 LOG adder gstadder.c:711:gst_adder_collected:<adder_0x81a3830> channel 0x837c830: making output buffer of 11024 bytes 0:00:02.962664000 14701 0x8189af0 LOG adder gstadder.c:724:gst_adder_collected:<adder_0x81a3830> channel 0x837c830: copying 11024 bytes from data 0x8394910 0:00:02.962702000 14701 0x8189af0 LOG adder gstadder.c:730:gst_adder_collected:<adder_0x81a3830> channel 0x83794e8: mixing 11024 bytes from data 0xb5601400 0:00:02.962742000 14701 0x8189af0 LOG adder gstadder.c:730:gst_adder_collected:<adder_0x81a3830> channel 0x8379640: mixing 11024 bytes from data 0x83a0f00 0:00:02.962784000 14701 0x8189af0 LOG adder gstadder.c:784:gst_adder_collected:<adder_0x81a3830> pushing outbuf, timestamp 0:00:00.249977324 0:00:02.968915000 14701 0x837b298 LOG adder gstadder.c:172:gst_adder_setcaps:<adder_0x81a3830> setting caps on pad 0x8382a88,sink2 to audio/x-raw-float, width=(int)32, rate=(int)44100, channels=(int)1, endianness=(int)1234 0:00:02.968966000 14701 0x837b298 DEBUG adder gstadder.c:219:gst_adder_setcaps:<adder_0x81a3830> parse_caps sets adder to format float 0:00:02.969068000 14701 0x837b298 LOG adder gstadder.c:681:gst_adder_collected:<adder_0x81a3830> starting to cycle through channels, 2 bytes available (bps = 4) 0:00:02.969081000 14701 0x837b298 LOG adder gstadder.c:711:gst_adder_collected:<adder_0x81a3830> channel 0x837c830: making output buffer of 2 bytes 0:00:02.969097000 14701 0x837b298 LOG adder gstadder.c:724:gst_adder_collected:<adder_0x81a3830> channel 0x837c830: copying 2 bytes from data 0x8391e00 0:00:02.969130000 14701 0x837b298 LOG adder gstadder.c:730:gst_adder_collected:<adder_0x81a3830> channel 0x83794e8: mixing 2 bytes from data 0xb5603f10 0:00:02.969163000 14701 0x837b298 LOG adder gstadder.c:730:gst_adder_collected:<adder_0x81a3830> channel 0x8379640: mixing 2 bytes from data 0x83a3a10 0:00:02.969191000 14701 0x837b298 LOG adder gstadder.c:784:gst_adder_collected:<adder_0x81a3830> pushing outbuf, timestamp 0:00:00.374965986 e
Created attachment 84742 [details] pipeline that is used
this works: GST_DEBUG="adder:4" gst-launch audiotestsrc freq=100 ! adder name=m ! audioconvert ! alsasink audiotestsrc freq=1000 ! audioconvert ! audio/x-raw-float,width=32 ! audioconvert ! m. this doesn't GST_DEBUG="adder:4" gst-launch audiotestsrc freq=100 ! audioconvert ! adder name=m ! audioconvert ! alsasink audiotestsrc freq=1000 ! audioconvert ! audio/x-raw-float,width=32 ! audioconvert ! m.
Created attachment 87742 [details] test application I wrote an application that shows how one could handle the problem using a caps filter. It works, but the is a glitch in the sound at start and I get: 0:00:00.397822000 1835 0x8196188 WARN basesrc gstbasesrc.c:1775:gst_base_src_loop:<src1> error: Internal data flow error. 0:00:00.397953000 1835 0x8196188 WARN basesrc gstbasesrc.c:1775:gst_base_src_loop:<src1> error: streaming task paused, reason not-negotiated (-4) Any ideas?
This was an application error. Using caps-filter works,