<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><DIV>Hi,</DIV>
<DIV>you can also have a look at plugin videomixer (in Good package). It is also based on N-1mixing, and does include some sort of synchronization on its pads (to make sure video frames with same timestamp will get mixed together). I used it to create my own plugin for other purpose, and it works quite fine.</DIV>
<DIV>Regards,</DIV>
<DIV>Al<BR></DIV>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: times new roman, new york, times, serif"><BR>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: times new roman, new york, times, serif">----- Message d'origine ----<BR>De : Rob Gil &lt;rob.gil@live.com&gt;<BR>À : gstreamer-devel@lists.sourceforge.net<BR>Envoyé le : Mercredi, 15 Octobre 2008, 17h09mn 28s<BR>Objet&nbsp;: [gst-devel] CollectPads synchronization with request pads<BR><BR>
<STYLE>
.hmmessage P
{
margin:0px;padding:0px;}
body.hmmessage
{
FONT-SIZE:10pt;FONT-FAMILY:Tahoma;}
</STYLE>
<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=_blank rel=nofollow>See Now</A> </DIV></DIV></div><br>



      </body></html>