<html><body bgcolor="#FFFFFF"><div><br><br>Kind regards,<div>Ronald</div></div><div><br>Begin forwarded message:<br><br></div><blockquote type="cite"><div><b>From:</b> renardier philippe &lt;<a href="mailto:philipperenardier@yahoo.fr">philipperenardier@yahoo.fr</a>><br><b>Date:</b> August 1, 2009 1:19:01 PM EDT<br><b>To:</b> <a href="mailto:rsbultje@gmail.com"><a href="mailto:rsbultje@gmail.com">rsbultje@gmail.com</a></a><br><b>Subject:</b> <b>pb avimux fixed</b><br><br></div></blockquote><div></div><blockquote type="cite"><div><span></span><br><span>Hi</span><br><span></span><br><span>I have fixed the issue.</span><br><span>I had a bug in the setting of the timestamps so in gstavimux.c the fonction</span><br><span>----------------------------------------</span><br><span>gst_avi_mux_do_one_buffer (GstAviMux * avimux)</span><br><span>{</span><br><span> &nbsp;GstAviPad *avipad, *best_pad;</span><br><span> &nbsp;GstClockTime time, best_time;</span><br><span> &nbsp;GSList *node;</span><br><span> &nbsp;GstBuffer *buffer;</span><br><span></span><br><span> &nbsp;node = avimux->sinkpads;</span><br><span> &nbsp;best_pad = NULL;</span><br><span> &nbsp;best_time = GST_CLOCK_TIME_NONE;</span><br><span> &nbsp;for (; node; node = node->next) {</span><br><span> &nbsp;&nbsp;&nbsp;avipad = (GstAviPad *) node->data;</span><br><span></span><br><span> &nbsp;&nbsp;&nbsp;if (!avipad->collect)</span><br><span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;</span><br><span></span><br><span> &nbsp;&nbsp;&nbsp;buffer = gst_collect_pads_peek (avimux->collect, avipad->collect);</span><br><span> &nbsp;&nbsp;&nbsp;if (!buffer)</span><br><span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;</span><br><span> &nbsp;&nbsp;&nbsp;time = GST_BUFFER_TIMESTAMP (buffer);</span><br><span> &nbsp;&nbsp;&nbsp;gst_buffer_unref (buffer);</span><br><span></span><br><span> &nbsp;&nbsp;&nbsp;// invalid timestamp buffers pass first, these are probably initialization buffers</span><br><span>if (best_pad == NULL || !GST_CLOCK_TIME_IS_VALID (time) || (GST_CLOCK_TIME_IS_VALID (best_time) &amp;&amp; time &lt; best_time)) </span><br><span> &nbsp; &nbsp;{best_pad = avipad; best_time = time;}</span><br><span> &nbsp;}</span><br><span></span><br><span> &nbsp;if (best_pad) {</span><br><span> &nbsp;&nbsp;&nbsp;GST_LOG_OBJECT (avimux, "selected pad %s with time %" GST_TIME_FORMAT,</span><br><span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GST_PAD_NAME (best_pad->collect->pad), GST_TIME_ARGS (best_time));</span><br><span></span><br><span> &nbsp;&nbsp;&nbsp;return gst_avi_mux_do_buffer (avimux, best_pad);</span><br><span> &nbsp;} else {</span><br><span> &nbsp;&nbsp;&nbsp;// simply finish off the file and send EOS</span><br><span> &nbsp;&nbsp;&nbsp;gst_avi_mux_stop_file (avimux);</span><br><span> &nbsp;&nbsp;&nbsp;gst_pad_push_event (avimux->srcpad, gst_event_new_eos ());</span><br><span> &nbsp;&nbsp;&nbsp;return GST_FLOW_UNEXPECTED;</span><br><span> &nbsp;}</span><br><span>}</span><br><span>----------------------------------------------------</span><br><span>finded always time > best_time for pad 2 and only one stream was recorded (the first of course).</span><br><span>This bug was not apparent when i recorded only video or only audio.</span><br><span>Now it's OK. GSreamer is a powerful tool and i think its use can be extended far beyond the scope of multimedia. Ten years ago i worked in the steel industry and we used a GSreamer-like custom framework to manage the process of rolling mills. We had plugins for locked loops, filters, IO and so on. Any kind of stream, physical or virtual can be managed with GStreamer.</span><br><span>I am sorry for the disturbance i made for nothing.</span><br><span></span><br><span><a href="mailto:philipperenardier@yahoo.fr">philipperenardier@yahoo.fr</a></span><br><span></span><br><span></span><br><span></span><br><span></span><br></div></blockquote></body></html>