<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>gtkmm &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/gtkmm/</link>
	<description>Feed of posts on WordPress.com tagged "gtkmm"</description>
	<pubDate>Tue, 08 Dec 2009 10:03:09 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[iMotion]]></title>
<link>http://frederic.logier.org/2009/06/01/91/</link>
<pubDate>Mon, 01 Jun 2009 12:31:00 +0000</pubDate>
<dc:creator>fredix</dc:creator>
<guid>http://frederic.logier.org/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]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><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" 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 &#60;&#60; "Failed to go into PLAYING state" &#60;&#60; std::endl;exit(1);}

std::cout &#60;&#60; "PLAYING state" &#60;&#60; 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 &#60;&#60; "blocked pad : " &#60;&#60; res &#60;&#60; std::endl;

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

}else {std::cout &#60;&#60; "can not get source pad : " &#60;&#60; res &#60;&#60; 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 &#60;&#60; "Failed to state null on m_effect" &#60;&#60; std::endl;exit(1);}

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

std::cout &#60;&#60; "UNLINK PAD" &#60;&#60; 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 &#60;&#60; "SEND EOS" &#60;&#60; std::endl;/**************************************************/

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

std::cout &#60;&#60; "UNLINK PAD 2" &#60;&#60; 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 &#60;&#60; "GST BIN REMOVED" &#60;&#60; 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 &#60;&#60; "new effect and linked in" &#60;&#60; std::endl;   }   else   {       gst_element_link_pads (m_videoscale,                              "src",                              m_sink,                              "sink");

       m_effect = 0;       std::cout &#60;&#60; "no effect" &#60;&#60; 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 &#60;&#60; "unblocked source pad : " &#60;&#60; res &#60;&#60; std::endl;    std::cout &#60;&#60; m_effect_name &#60;&#60; std::endl;}</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[FAQ: Odczyt praw dosępu do pliku w giomm]]></title>
<link>http://adawo.wordpress.com/2009/02/01/faq-odczyt-praw-dosepu-do-pliku-w-giomm/</link>
<pubDate>Sun, 01 Feb 2009 12:36:27 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2009/02/01/faq-odczyt-praw-dosepu-do-pliku-w-giomm/</guid>
<description><![CDATA[Odczyt praw dostępu realizujemy, analogicznie jak w przypadku innych atrybutów pliku, poprzez metode]]></description>
<content:encoded><![CDATA[Odczyt praw dostępu realizujemy, analogicznie jak w przypadku innych atrybutów pliku, poprzez metode]]></content:encoded>
</item>
<item>
<title><![CDATA[GGArchivesView v0.1]]></title>
<link>http://adawo.wordpress.com/2008/12/28/ggarchivesview-v01/</link>
<pubDate>Sun, 28 Dec 2008 15:00:01 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2008/12/28/ggarchivesview-v01/</guid>
<description><![CDATA[Program służący do przeglądania zawartości plików archives.dat czyli plików będących archiwum wiadom]]></description>
<content:encoded><![CDATA[Program służący do przeglądania zawartości plików archives.dat czyli plików będących archiwum wiadom]]></content:encoded>
</item>
<item>
<title><![CDATA[Dywan Sierpińskiego]]></title>
<link>http://adawo.wordpress.com/2008/10/13/dywan-sierpinskiego/</link>
<pubDate>Mon, 13 Oct 2008 22:16:07 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2008/10/13/dywan-sierpinskiego/</guid>
<description><![CDATA[Może przytoczę fragment Wikipedii: Dywan Sierpińskiego to fraktal otrzymany z kwadratu za pomocą pod]]></description>
<content:encoded><![CDATA[Może przytoczę fragment Wikipedii: Dywan Sierpińskiego to fraktal otrzymany z kwadratu za pomocą pod]]></content:encoded>
</item>
<item>
<title><![CDATA[FAQ: Pobieranie listy zarejestrowanych typów MIME w giomm]]></title>
<link>http://adawo.wordpress.com/2008/08/10/faq-pobieranie-listy-zarejestrowanych-typow-mime-w-giomm/</link>
<pubDate>Sun, 10 Aug 2008 12:09:40 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2008/08/10/faq-pobieranie-listy-zarejestrowanych-typow-mime-w-giomm/</guid>
<description><![CDATA[Aby pobrać listę zarejestrowanych typów MIME należy posłużyć się funckją oferowaną przez przestrzeń ]]></description>
<content:encoded><![CDATA[Aby pobrać listę zarejestrowanych typów MIME należy posłużyć się funckją oferowaną przez przestrzeń ]]></content:encoded>
</item>
<item>
<title><![CDATA[Własna zakładka strony w Gtk::Notebook]]></title>
<link>http://adawo.wordpress.com/2008/07/29/wlasna-zakladka-strony-w-gtknotebook/</link>
<pubDate>Tue, 29 Jul 2008 20:32:01 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2008/07/29/wlasna-zakladka-strony-w-gtknotebook/</guid>
<description><![CDATA[Efekt o którym mowa... Domyślnie, klasa notebook jako zakładkę strony przyjmuje zwykłą etykietę teks]]></description>
<content:encoded><![CDATA[Efekt o którym mowa... Domyślnie, klasa notebook jako zakładkę strony przyjmuje zwykłą etykietę teks]]></content:encoded>
</item>
<item>
<title><![CDATA[FAQ: Jak pobrać rozdzielczość ekranu w gtkmm?]]></title>
<link>http://adawo.wordpress.com/2008/07/24/faq-jak-pobrac-rozdzielczosc-ekranu-w-gtkmm/</link>
<pubDate>Thu, 24 Jul 2008 10:23:45 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2008/07/24/faq-jak-pobrac-rozdzielczosc-ekranu-w-gtkmm/</guid>
<description><![CDATA[Odpowiedź: Należy skorzystać z metod obiektu Gdk::Screen, get_width() oraz get_height(). Przykład: /]]></description>
<content:encoded><![CDATA[Odpowiedź: Należy skorzystać z metod obiektu Gdk::Screen, get_width() oraz get_height(). Przykład: /]]></content:encoded>
</item>
<item>
<title><![CDATA[Rozmieszczanie widgetów za pomocą klasy Gtk::Table]]></title>
<link>http://adawo.wordpress.com/2008/07/08/rozmieszczanie-widgetow-za-pomoca-klasy-gtktable/</link>
<pubDate>Tue, 08 Jul 2008 18:36:07 +0000</pubDate>
<dc:creator>adawo</dc:creator>
<guid>http://adawo.wordpress.com/2008/07/08/rozmieszczanie-widgetow-za-pomoca-klasy-gtktable/</guid>
<description><![CDATA[Gtk::Table jest klasą służącą upakowaniu większej ilości widgetów w &#8220;regularny wzór&#8221; a]]></description>
<content:encoded><![CDATA[Gtk::Table jest klasą służącą upakowaniu większej ilości widgetów w &#8220;regularny wzór&#8221; a]]></content:encoded>
</item>
<item>
<title><![CDATA[FTPSend 1.3]]></title>
<link>http://marcinw.wordpress.com/2008/03/07/ftpsend-13/</link>
<pubDate>Fri, 07 Mar 2008 13:19:18 +0000</pubDate>
<dc:creator>marcinw</dc:creator>
<guid>http://marcinw.wordpress.com/2008/03/07/ftpsend-13/</guid>
<description><![CDATA[FTPSend to mój prosty programik służący do wysyłania w prosty sposób plików na FTP. Brakowało mi tro]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>FTPSend to mój prosty programik służący do wysyłania w prosty sposób plików na FTP.<br />
Brakowało mi trochę chęci aby stworzyć .deb czy tez napisać wnikliwą instrukcję obsługi.<br />
W tym poście trochę wyjaśnię oraz załączę źródła.</p>
<p>1. Pobieramy archiwum i wypakowujemy<br />
2. Wchodzimy do ./src i jako root dajemy: make. Skrypt Makefile skopiuje graficzki do /usr/share/pixmaps oraz skompiluje co trzeba.<br />
3. Proponuje dać z tego katalogu komendę: sudo cp ./ftpsend /usr/bin/ (skopiuje binarkę do odpow. katalogu)<br />
4. Teraz trzeba tylko dodać uruchamianie programu do prawoklikowego menu kontekstowego.<br />
5. Odpalamy nautilus-actions-config, potem kolejno: &#8220;Add&#8221;, &#8220;Label&#8221;-&#62;Upload, &#8220;Icon&#8221;-&#62;gtk-sort-asceding, &#8220;Path&#8221;-&#62;/usr/bin/ftpsend, &#8220;Parameters&#8221;-&#62;%d/%f.<br />
6. Zapisujemy oraz restartujemy gnoma.<br />
7. Jeśli wszystko poszło ok, program działa.<br />
8. Teraz tylko trzeba przejść przez first-time-run assistant.<br />
9. Odnośnie ustawień, tylko 2 opcje potrzebują wytłumaczenia: <strong>FTP main directory</strong> oraz <strong>URL appereance</strong>; FTP main directory określa główny katalog naszego FTP, np. /www/; URL appereance określa poprawną ścieżkę http do hosta ftp. <em>Np: ftp.microsoft.com =&#62; http://microsoft.com/ .</em></p>
<p>Program można pobrać <strong><a href="http://angelo-hq.ovh.org/ftpsend/">stąd</a>.</strong></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Disinfestazione in corso]]></title>
<link>http://kaeso.wordpress.com/2007/12/26/disinfestazione-in-corso/</link>
<pubDate>Wed, 26 Dec 2007 14:44:29 +0000</pubDate>
<dc:creator>kaeso</dc:creator>
<guid>http://kaeso.wordpress.com/2007/12/26/disinfestazione-in-corso/</guid>
<description><![CDATA[No, non mi sono improvvisamente dato ai lavori socialmente utili, e nemmeno al giardinaggio. Volevo ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>No, non mi sono improvvisamente dato ai lavori socialmente utili, e nemmeno al giardinaggio. Volevo solo far notare che la settimana scorsa è giunto in debian unstable (e presto si spera anche in testing) il <i>famosissimo</i> debugger grafico <a href="http://home.gna.org/nemiver/">Nemiver</a>.<br />
Giunto ormai alla versione 0.4.0, esso è un ottimo strumento per tutti coloro che stanno muovendo i primi passi nella caccia ai bachi, ma che non si trovano ancora molto a proprio agio con la linea di comando di gdb (che non è propriamente definibile user-friendly e richiede una certa dose di esperienza e familiarità); Aal contrario, nemiver è molto intuitivo da usare, ed in caso di necessità è corredato anche da un chiaro e sintetico manuale.</p>
<div style="text-align:center;"><img src="http://home.gna.org/nemiver/images/nemiver.png" /></div>
<p>In realtà il progetto nasce con mire molto più ambiziose: la forte modularizzazione e la struttura focalizzata sulle perspective lo pongono come la base per un ambiente di test standalone, integrabile con strumenti per il debug (gdb per ora, il primo obiettivo reale), il profile (si parla maggiormente di oprofile e valgrind) e l&#8217;ispezione e modifica diretta della memoria (l&#8217;integrazione con un hex-editor, probabilmente ghexedit, è prevista per una versione non molto distante).</p>
<p>In attesa degli sviluppi prossimi, ed usandolo quotidianamente nel mio piccolo per minuti lavoretti in C, non posso che consigliarlo a grandi e piccini <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  con la speranza che il progetto acquisti nuovi sostenitori e contributori. Nemiver è scritto in C++ e poggia sulle gtkmm: sviluppatori per nuove e rivoluzionarie perspective sono sempre ben accetti. Per i non-sviluppatori, ci sono una marea di TO DO che non richiedono di sporcarsi le mani col codice, tra cui (giusto per fare qualche esempio) la traduzione in varie lingue (italiano compreso), la pagina di man da riga di comando, alcune sezioni del manuale e tanta tanta prova su strada.</p>
<p>Buon bug-hunting a tutti!!!</p>
<div style="text-align:center;"><img src="https://mail.gna.org/public/nemiver-list/2006-11/pngwnKPIv68kF.png" /></div>
</div>]]></content:encoded>
</item>

</channel>
</rss>
