<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
<br>Hi,<br><br>I'm writing a mixer-type (N-to-1) plugin for GStreamer and using "adder" element as my example how to make one. The problem I am having currently is synchronization of input streams - adder is not even trying to synchronize anything, so if I feed it for example 5 perfectly time-synchronized streams from files it starts processing data before all the pads are negotiated. Below is a debug output of what is happening, sink2 gets negotiated just in time to make it to the mix, but sinks 3 and 4 get their requests only after _collected is already ran and first buffer pushed out. Any suggestions for an easy way to do synchronization?<br><br>Thanks,<br><br>Rob<br><br>$ gst-launch-0.10&nbsp; -v filesrc location=input1.wav ! wavparse ! adder name=add ! wavenc ! filesink location=out.wav \<br>filesrc location=input2.wav ! wavparse ! add. \<br>filesrc location=input3.wav ! wavparse ! add. \<br>filesrc location=input4.wav ! wavparse ! add. \<br>filesrc location=input5.wav ! wavparse ! add.<br><br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br><br>Setting pipeline to PAUSED ...<br>0:00:00.040771611 16675&nbsp; 0x8051410 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:789:gst_adder_request_new_pad:&lt;add&gt; request new pad sink0<br>0:00:00.040813029 16675 0xb6f005c8 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:789:gst_adder_request_new_pad:&lt;add&gt; request new pad sink1<br>0:00:00.040887694 16675 0xb6f005c8 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.040984569 16675&nbsp; 0x8051410 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.041024661 16675 0xb6f005c8 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got newsegment event on pad add:sink1<br>0:00:00.041060282 16675 0xb6f005c8 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got tag event on pad add:sink1<br>0:00:00.041114063 16675 0xb6f005c8 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.041119231 16675&nbsp; 0x8051410 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got newsegment event on pad add:sink0<br>0:00:00.041146960 16675&nbsp; 0x8051410 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got tag event on pad add:sink0<br>0:00:00.041225256 16675&nbsp; 0x8051410 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.041241181 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:241:gst_adder_setcaps:&lt;add&gt; setting caps on pad 0x813f3f8,sink1 to audio/x-raw-int, endianness=(int)1234, channels=(int)1, width=(int)16, depth=(int)16, signed=(boolean)true, rate=(int)48000<br>0:00:00.041356635 16675&nbsp; 0x8051410 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:241:gst_adder_setcaps:&lt;add&gt; setting caps on pad 0x8136d80,sink0 to audio/x-raw-int, endianness=(int)1234, channels=(int)1, width=(int)16, depth=(int)16, signed=(boolean)true, rate=(int)48000<br>0:00:00.041392117 16675&nbsp; 0x8051410 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:261:gst_adder_setcaps:&lt;add&gt; parse_caps sets adder to format int<br>/pipeline0/add.sink0: caps = audio/x-raw-int, endianness=(int)1234, channels=(int)1, width=(int)16, depth=(int)16, signed=(boolean)true, rate=(int)48000<br>0:00:00.041513368 16675 0xb6f00830 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:789:gst_adder_request_new_pad:&lt;add&gt; request new pad sink2<br>0:00:00.041574133 16675 0xb6f00830 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.041699994 16675 0xb6f00830 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got newsegment event on pad add:sink2<br>0:00:00.041725069 16675 0xb6f00830 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got tag event on pad add:sink2<br>0:00:00.041740155 16675 0xb6f005c8 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:261:gst_adder_setcaps:&lt;add&gt; parse_caps sets adder to format int<br>/pipeline0/add.sink1: caps = audio/x-raw-int, endianness=(int)1234, channels=(int)1, width=(int)16, depth=(int)16, signed=(boolean)true, rate=(int)48000<br>0:00:00.041858054 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:877:gst_adder_collected:&lt;add&gt; starting to cycle through channels, 4096 bytes available (bps = 2)<br>0:00:00.041884875 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:907:gst_adder_collected:&lt;add&gt; channel 0x811e530: making output buffer of 4096 bytes<br>0:00:00.041904222 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:921:gst_adder_collected:&lt;add&gt; channel 0x811e530: copying 4096 bytes from data 0x8145a00<br>0:00:00.041921264 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:934:gst_adder_collected:&lt;add&gt; channel 0x813d308: mixing 4096 bytes from data 0x8140c00<br>0:00:00.041946478 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:934:gst_adder_collected:&lt;add&gt; channel 0xb6f00b88: mixing 4096 bytes from data 0x813d800<br>0:00:00.041982518 16675 0xb6f005c8 LOG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:999:gst_adder_collected:&lt;add&gt; pushing outbuf, timestamp 0:00:00.000000000<br>/pipeline0/wavenc0.sink: caps = audio/x-raw-int, endianness=(int)1234, channels=(int)1, width=(int)16, depth=(int)16, signed=(boolean)true, rate=(int)48000<br>/pipeline0/filesink0.sink: caps = audio/x-wav<br>0:00:00.042310372 16675 0xb6f00930 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:789:gst_adder_request_new_pad:&lt;add&gt; request new pad sink3<br>0:00:00.042369391 16675 0xb6f00930 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.042495043 16675 0xb6f00930 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got newsegment event on pad add:sink3<br>0:00:00.042518790 16675 0xb6f00930 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got tag event on pad add:sink3<br>Pipeline is PREROLLING ...<br>0:00:00.042897491 16675 0xb6f03200 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:789:gst_adder_request_new_pad:&lt;add&gt; request new pad sink4<br>0:00:00.042961609 16675 0xb6f03200 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:209:gst_adder_sink_getcaps:&lt;add&gt; intersecting peer and template caps<br>0:00:00.043095084 16675 0xb6f03200 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got newsegment event on pad add:sink4<br>0:00:00.043120926 16675 0xb6f03200 DEBUG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; adder gstadder.c:677:gst_adder_sink_event: Got tag event on pad add:sink4<br><br><br /><hr />Stay up to date on your PC, the Web, and your mobile phone with Windows Live. <a href='http://clk.atdmt.com/MRT/go/msnnkwxp1020093185mrt/direct/01/' target='_new'>See Now</a></body>
</html>