<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Je hack donc je suis &#187; gstreamer</title>
	<atom:link href="http://frederic.logier.org/category/gstreamer/feed/" rel="self" type="application/rss+xml" />
	<link>http://frederic.logier.org</link>
	<description>pour une écologie numérique</description>
	<lastBuildDate>Wed, 21 Jul 2010 19:19:13 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='frederic.logier.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/1f06d42ecd282c7191503daa4ec60e0c?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Je hack donc je suis &#187; gstreamer</title>
		<link>http://frederic.logier.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://frederic.logier.org/osd.xml" title="Je hack donc je suis" />
	<atom:link rel='hub' href='http://frederic.logier.org/?pushpress=hub'/>
		<item>
		<title>iMotion</title>
		<link>http://frederic.logier.org/2009/06/01/91/</link>
		<comments>http://frederic.logier.org/2009/06/01/91/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 12:31:00 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[MondeLibre]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[gtkmm]]></category>
		<category><![CDATA[imotion]]></category>

		<guid isPermaLink="false">http://fredix.wordpress.com/2009/06/01/91/</guid>
		<description><![CDATA[Cela faisait un moment que je n&#8217;avais plus posté sur iMotion, en août dernier apparemment ! J&#8217;ai repris le code pour y ajouter le support des fichiers vidéos. Je butais depuis un moment sur un problème de fige de la vidéo lors du changement d&#8217;un effet pendant la lecture, problème que je n&#8217;ai pas avec [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=91&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cela faisait un moment que je n&#8217;avais plus posté sur <a href="http://wiki.github.com/fredix/imotion">iMotion</a>, en <a href="http://www.blogger.com/2008/08/imotion.html">août dernier</a> apparemment !</p>
<p>J&#8217;ai repris le code pour y ajouter le support des fichiers vidéos. Je butais depuis un moment sur un problème de fige de la vidéo lors du changement d&#8217;un effet pendant la lecture, problème que je n&#8217;ai pas avec la webcam. Cette technique de changement dynamique d&#8217;un élément lors de la lecture dans le pipeline est uniquement documenté ici : <a href="http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-block.txt#n112">cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-block.txt#n112</a> mais je n&#8217;ai pas trouvé de soft qui l&#8217;implémente  &#8230;</p>
<p>Premièrement j&#8217;avais oublié l&#8217;indication 8 :</p>
<p><code> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_cool.gif' alt='8)' class='wp-smiley' /> make sure element4 is in the same state as the rest of the elements. The element should at least be PAUSED.<br />
</code></p>
<p>Mon pipeline est en statut PLAYING donc en passant l&#8217;élément effect dans ce statut le problème de fige de la vidéo a été résolu.</p>
<p>Deuxièmement le schéma de la documentation montre un pipeline de 3 éléments (plus un 4 ème qui remplace dynamiquement le 2ème). Or cela m&#8217;a induis en erreur car le mien en possède 6 :</p>
<ol>
<li>filesrc</li>
<li>decodebin2</li>
<li>ffmpegcolorspace</li>
<li>videoscale</li>
<li>effectv</li>
<li>ximagesink</li>
</ol>
<p>Lorsque la documentation indique de bloquer l&#8217;élément 1 il s&#8217;agit en fait de l&#8217;élément qui précède celui que l&#8217;on veut remplacer. Dans iMotion je souhaite changer dynamiquement d&#8217;effet donc c&#8217;est l&#8217;élément 4 qui doit être bloqué.</p>
<p>Pour ceux qui débutent avec GStreamer voici une excellente présentation : <a href="http://blog.nicolargo.com/2009/03/gstreamer-la-theorie.html">blog.nicolargo.com/2009/03/gstreamer-la-theorie.html</a></p>
<p>Voici une capture d&#8217;écran avec l&#8217;effet <a href="http://effectv.sourceforge.net/edge.html"><em>edgetv</em></a> suivie de l&#8217;implémentation  correcte du code :</p>
<p><a href="http://fredix.files.wordpress.com/2009/06/imotion2.png"><img style="cursor:pointer;width:317px;height:320px;" src="http://fredix.files.wordpress.com/2009/06/imotion21.png?w=600" border="0" alt="" /></a></p>
<pre>voidVideoManager::switch_effect (Glib::ustring a_name){   m_effect_name = a_name;   bool res = false;   GstEvent *event;

   // replay pipeline if it paused

   gst_element_get_state(m_pipeline, NULL, NULL, GST_CLOCK_TIME_NONE);   gst_element_set_state (m_pipeline, GST_STATE_PLAYING);

   // wait until pipeline playing   if (gst_element_get_state (m_pipeline, NULL, NULL, GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_FAILURE) {std::cout &lt;&lt; "Failed to go into PLAYING state" &lt;&lt; std::endl;exit(1);}

std::cout &lt;&lt; "PLAYING state" &lt;&lt; std::endl;

GstPad *videoscale_sink_pad = gst_element_get_static_pad (m_videoscale, "sink");GstPad *videoscale_src_pad = gst_element_get_static_pad (m_videoscale, "src");

if (videoscale_src_pad) {res = gst_pad_set_blocked_async (videoscale_src_pad, TRUE, (GstPadBlockCallback) block_callback, m_pipeline);std::cout &lt;&lt; "blocked pad : " &lt;&lt; res &lt;&lt; std::endl;

if (!res) {std::cout &lt;&lt; "can not block source pad : " &lt;&lt; res &lt;&lt; std::endl;exit (1);} else {std::cout &lt;&lt; "blocked source pad : " &lt;&lt; res &lt;&lt; std::endl;}

}else {std::cout &lt;&lt; "can not get source pad : " &lt;&lt; res &lt;&lt; std::endl;exit (1);}

if (m_effect){GstPad *effect_sink_pad = gst_element_get_static_pad (m_effect, "sink");GstPad *effect_src_pad = gst_element_get_static_pad (m_effect, "src");

// remove effect elementgst_element_get_state(m_effect, NULL, NULL, GST_CLOCK_TIME_NONE);gst_element_set_state (m_effect, GST_STATE_NULL);gst_element_get_state(m_effect, NULL, NULL, GST_CLOCK_TIME_NONE);

if (gst_element_get_state (m_effect, NULL, NULL, GST_CLOCK_TIME_NONE) == GST_STATE_CHANGE_FAILURE) {std::cout &lt;&lt; "Failed to state null on m_effect" &lt;&lt; std::endl;exit(1);}

gst_element_unlink_pads (m_videoscale,"src",m_effect,"sink");

std::cout &lt;&lt; "UNLINK PAD" &lt;&lt; std::endl;

/************ seems to not be usefull ************/gst_pad_add_event_probe (effect_src_pad, G_CALLBACK (source_pad_event_probe), effect_src_pad);event = gst_event_new_eos ();gst_pad_send_event (effect_sink_pad, event);gst_object_unref (effect_sink_pad);std::cout &lt;&lt; "SEND EOS" &lt;&lt; std::endl;/**************************************************/

gst_element_unlink_pads (m_effect,"src",m_sink,"sink");

std::cout &lt;&lt; "UNLINK PAD 2" &lt;&lt; std::endl;gst_element_get_state(m_effect, NULL, NULL, GST_CLOCK_TIME_NONE);

gst_bin_remove (GST_BIN (m_bin), m_effect);

std::cout &lt;&lt; "GST BIN REMOVED" &lt;&lt; std::endl;

}else{gst_element_unlink_pads (m_videoscale,"src",m_sink,"sink");}

if ( m_effect_name != "none"){m_effect = gst_element_factory_make (m_effect_name.c_str(), "effect");gst_bin_add (GST_BIN (m_bin), m_effect);gst_element_link_pads (m_videoscale,"src",m_effect,"sink");gst_element_link_pads (m_effect,"src",m_sink,"sink");

// Indication 8gst_element_set_state (m_effect, GST_STATE_PLAYING);       std::cout &lt;&lt; "new effect and linked in" &lt;&lt; std::endl;   }   else   {       gst_element_link_pads (m_videoscale,                              "src",                              m_sink,                              "sink");

       m_effect = 0;       std::cout &lt;&lt; "no effect" &lt;&lt; std::endl;

   }

   if (videoscale_src_pad) {       res = gst_pad_set_blocked_async (videoscale_src_pad, FALSE,(GstPadBlockCallback) block_callback, m_pipeline);       gst_object_unref (videoscale_src_pad);   }    std::cout &lt;&lt; "unblocked source pad : " &lt;&lt; res &lt;&lt; std::endl;    std::cout &lt;&lt; m_effect_name &lt;&lt; std::endl;}</pre>
<br />Publié dans gstreamer, gtkmm, imotion, MondeLibre  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=91&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2009/06/01/91/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>

		<media:content url="http://fredix.files.wordpress.com/2009/06/imotion21.png" medium="image" />
	</item>
		<item>
		<title>Woa</title>
		<link>http://frederic.logier.org/2006/03/28/woa/</link>
		<comments>http://frederic.logier.org/2006/03/28/woa/#comments</comments>
		<pubDate>Tue, 28 Mar 2006 14:24:00 +0000</pubDate>
		<dc:creator>fredix</dc:creator>
				<category><![CDATA[geekast]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://fredix.wordpress.com/2006/03/28/woa/</guid>
		<description><![CDATA[Geekast est sur le site de Gstreamer dans la liste des applications l’utilisant : http://gstreamer.freedesktop.org/apps/ Je suis tout intimidé du coup<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=51&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="post-body">
<p>Geekast est sur le site de Gstreamer dans la liste des applications l’utilisant : <a href="http://gstreamer.freedesktop.org/apps/">http://gstreamer.freedesktop.org/apps/</a></p>
<p>Je suis tout intimidé du coup <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/fredix.wordpress.com/51/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/fredix.wordpress.com/51/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fredix.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fredix.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fredix.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fredix.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fredix.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fredix.wordpress.com/51/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fredix.wordpress.com/51/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fredix.wordpress.com/51/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=frederic.logier.org&amp;blog=3098224&amp;post=51&amp;subd=fredix&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://frederic.logier.org/2006/03/28/woa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0fc8e5d51ed3c0726b2826e8caeb8017?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fredix</media:title>
		</media:content>
	</item>
	</channel>
</rss>