[prev in list] [next in list] [prev in thread] [next in thread] 

List:       enlightenment-svn
Subject:    E SVN: gastal IN trunk/ecore: doc src/examples src/lib/ecore
From:       "Enlightenment SVN" <no-reply () enlightenment ! org>
Date:       2011-06-30 18:10:30
Message-ID: 20110630181031.17CA01180C4 () e2 ! enlightenment ! org
[Download RAW message or body]

Log:
Ecore: ecore_pipe documentation.
  
  

Author:       gastal
Date:         2011-06-30 11:10:30 -0700 (Thu, 30 Jun 2011)
New Revision: 60878
Trac:         http://trac.enlightenment.org/e/changeset/60878

Added:
  trunk/ecore/src/examples/ecore_pipe_gstreamer_example.c \
trunk/ecore/src/examples/ecore_pipe_simple_example.c  Modified:
  trunk/ecore/doc/examples.dox trunk/ecore/src/examples/Makefile.am \
trunk/ecore/src/lib/ecore/ecore_pipe.c 

Modified: trunk/ecore/doc/examples.dox
===================================================================
--- trunk/ecore/doc/examples.dox	2011-06-30 17:18:13 UTC (rev 60877)
+++ trunk/ecore/doc/examples.dox	2011-06-30 18:10:30 UTC (rev 60878)
@@ -508,3 +508,68 @@
  * Shows how to use fd handlers.
 */
 
+/**
+ * @page tutorial_ecore_pipe_gstreamer_example
+ *
+ * Here is an example that uses the pipe wrapper with a Gstreamer
+ * pipeline. For each decoded frame in the Gstreamer thread, a handle
+ * is called in the ecore thread.
+ *
+ * @include ecore_pipe_gstreamer_example.c
+ * @example ecore_pipe_gstreamer_example.c
+ */
+
+/**
+ * @page tutorial_ecore_pipe_simple_example
+ * @dontinclude ecore_pipe_simple_example.c
+ *
+ * This example shows some simple usage of ecore_pipe. We are going to create a
+ * pipe, fork our process, and then the child is going to comunicate to the
+ * parent the result of its processing through the pipe.
+ *
+ * As always we start with our includes, nothing especial:
+ * @skip #include
+ * @until Ecore.h
+ *
+ * The first thing we are going to define in our example is the function we are
+ * going to run on the child process, which, as mentioned, will do some
+ * processing and then will write the result to the pipe:
+ * @until }
+ * @until }
+ * @note The sleep was added so the parent process would think the child process
+ * was doing something interesting...
+ *
+ * Next up is our function for handling data arriving in the pipe. It copies the
+ * data to another buffer, adds a terminating NULL and prints it. Also if it
+ * receives a certain string it stops the main loop(efectvely ending the
+ * program):
+ * @until }
+ * @until }
+ *
+ * And now on to our main function, we start by declaring some variables and
+ * initializing ecore:
+ * @until ecore_init
+ *
+ * And since we are talking about pipes let's create one:
+ * @until pipe_add
+ *
+ * Now we are going to fork:
+ * @until fork
+ * @note duh...
+ *
+ * The child process is going to do the our fancy processing:
+ * @until }
+ * @note It's very important to call ecore_pipe_read_close() here so that the
+ * child process won't read what it is writing to the pipe itself.
+ *
+ * And the parent is going to run ecore's main loop waiting for some data:
+ * @until }
+ * @note Calling ecore_pipe_write_close() here isn't important but since we
+ * aren't going to write in the pipe it is good practice.
+ *
+ * And finally when done processing(the child) or done receiving(the parent) we
+ * delete the pipe and shutdown ecore:
+ * @until }
+ *
+ * @example ecore_pipe_simple_example.c
+ */
\ No newline at end of file

Modified: trunk/ecore/src/examples/Makefile.am
===================================================================
--- trunk/ecore/src/examples/Makefile.am	2011-06-30 17:18:13 UTC (rev 60877)
+++ trunk/ecore/src/examples/Makefile.am	2011-06-30 18:10:30 UTC (rev 60878)
@@ -24,7 +24,9 @@
 	ecore_con_client_example.c \
 	ecore_con_server_example.c \
 	ecore_fd_handler_gnutls_example.c \
-	ecore_file_download_example.c
+	ecore_file_download_example.c \
+	ecore_pipe_simple_example.c \
+	ecore_pipe_gstreamer_example.c
 
 EXTRA_DIST = $(SRCS)
 
@@ -43,6 +45,7 @@
 	ecore_idler_example \
 	ecore_job_example \
 	ecore_timer_example \
-	ecore_time_functions_example
+	ecore_time_functions_example \
+	ecore_pipe_simple_example
 endif
 

Modified: trunk/ecore/src/lib/ecore/ecore_pipe.c
===================================================================
--- trunk/ecore/src/lib/ecore/ecore_pipe.c	2011-06-30 17:18:13 UTC (rev 60877)
+++ trunk/ecore/src/lib/ecore/ecore_pipe.c	2011-06-30 18:10:30 UTC (rev 60878)
@@ -98,9 +98,8 @@
 /**
  * @addtogroup Ecore_Pipe_Group Pipe wrapper
  *
- * These functions wrap the pipe / write / read functions to
- * easily integrate a loop that is in its own thread to the ecore
- * main loop.
+ * These functions wrap the pipe / write / read functions to easily integrate
+ * its use into ecore's main loop.
  *
  * The ecore_pipe_add() function creates file descriptors (sockets on
  * Windows) and attach an handle to the ecore main loop. That handle is
@@ -108,191 +107,9 @@
  * just call ecore_pipe_write(). When you are done, just call
  * ecore_pipe_del().
  *
- * Here is an example that uses the pipe wrapper with a Gstreamer
- * pipeline. For each decoded frame in the Gstreamer thread, a handle
- * is called in the ecore thread.
- *
- * @code#include <gst/gst.h>
- * #include <Ecore.h>
- *
- * static int nbr = 0;
- *
- * static GstElement *_buid_pipeline (gchar *filename, Ecore_Pipe *pipe);
- *
- * static void new_decoded_pad_cb (GstElement *demuxer,
- *                                 GstPad     *new_pad,
- *                                 gpointer    user_data);
- *
- * static void handler(void *data, void *buf, unsigned int len)
- * {
- *   GstBuffer  *buffer = *((GstBuffer **)buf);
- *
- *   printf ("handler : %p\n", buffer);
- *   printf ("frame  : %d %p %lld %p\n", nbr++, data, (long \
                long)GST_BUFFER_DURATION(buffer), buffer);
- *   gst_buffer_unref (buffer);
- * }
- *
- *
- * static void handoff (GstElement* object,
- *                      GstBuffer* arg0,
- *                      GstPad* arg1,
- *                      gpointer user_data)
- * {
- *   Ecore_Pipe *pipe;
- *
- *   pipe = (Ecore_Pipe *)user_data;
- *   printf ("handoff : %p\n", arg0);
- *   gst_buffer_ref (arg0);
- *   ecore_pipe_write(pipe, &arg0, sizeof(arg0));
- * }
- *
- * int
- * main (int argc, char *argv[])
- * {
- *   GstElement *pipeline;
- *   char *filename;
- *   Ecore_Pipe *pipe;
- *
- *   gst_init (&argc, &argv);
- *
- *   if (!ecore_init ())
- *     {
- *       gst_deinit ();
- *       return 0;
- *     }
- *
- *   pipe = ecore_pipe_add (handler);
- *   if (!pipe)
- *     {
- *       ecore_shutdown ();
- *       gst_deinit ();
- *       return 0;
- *     }
- *
- *   if (argc < 2) {
- *     g_print ("usage: %s file.avi\n", argv[0]);
- *     ecore_pipe_del (pipe);
- *     ecore_shutdown ();
- *     gst_deinit ();
- *     return 0;
- *   }
- *   filename = argv[1];
- *
- *   pipeline = _buid_pipeline (filename, pipe);
- *   if (!pipeline) {
- *     g_print ("Error during the pipeline building\n");
- *     ecore_pipe_del (pipe);
- *     ecore_shutdown ();
- *     gst_deinit ();
- *     return -1;
- *   }
- *
- *   gst_element_set_state (pipeline, GST_STATE_PLAYING);
- *
- *   ecore_main_loop_begin();
- *
- *   ecore_pipe_del (pipe);
- *   ecore_shutdown ();
- *   gst_deinit ();
- *
- *   return 0;
- * }
- *
- * static void
- * new_decoded_pad_cb (GstElement *demuxer,
- *                     GstPad     *new_pad,
- *                     gpointer    user_data)
- * {
- *   GstElement *decoder;
- *   GstPad *pad;
- *   GstCaps *caps;
- *   gchar *str;
- *
- *   caps = gst_pad_get_caps (new_pad);
- *   str = gst_caps_to_string (caps);
- *
- *   if (g_str_has_prefix (str, "video/")) {
- *     decoder = GST_ELEMENT (user_data);
- *
- *     pad = gst_element_get_pad (decoder, "sink");
- *     if (GST_PAD_LINK_FAILED (gst_pad_link (new_pad, pad))) {
- *       g_warning ("Failed to link %s:%s to %s:%s", GST_DEBUG_PAD_NAME (new_pad),
- *                  GST_DEBUG_PAD_NAME (pad));
- *     }
- *   }
- *   g_free (str);
- *   gst_caps_unref (caps);
- * }
- *
- * static GstElement *
- * _buid_pipeline (gchar *filename, Ecore_Pipe *pipe)
- * {
- *   GstElement          *pipeline;
- *   GstElement          *filesrc;
- *   GstElement          *demuxer;
- *   GstElement          *decoder;
- *   GstElement          *sink;
-  GstStateChangeReturn res;
- *
- *   pipeline = gst_pipeline_new ("pipeline");
- *   if (!pipeline)
- *     return NULL;
- *
- *   filesrc = gst_element_factory_make ("filesrc", "filesrc");
- *   if (!filesrc) {
- *     printf ("no filesrc");
- *     goto failure;
- *   }
- *   g_object_set (G_OBJECT (filesrc), "location", filename, NULL);
- *
- *   demuxer = gst_element_factory_make ("oggdemux", "demuxer");
- *   if (!demuxer) {
- *     printf ("no demux");
- *     goto failure;
- *   }
- *
- *   decoder = gst_element_factory_make ("theoradec", "decoder");
- *   if (!decoder) {
- *     printf ("no dec");
- *     goto failure;
- *   }
- *
- *   g_signal_connect (demuxer, "pad-added",
- *                     G_CALLBACK (new_decoded_pad_cb), decoder);
- *
- *   sink = gst_element_factory_make ("fakesink", "sink");
- *   if (!sink) {
- *     printf ("no sink");
- *     goto failure;
- *   }
- *   g_object_set (G_OBJECT (sink), "sync", EINA_TRUE, NULL);
- *   g_object_set (G_OBJECT (sink), "signal-handoffs", EINA_TRUE, NULL);
- *   g_signal_connect (sink, "handoff",
- *                     G_CALLBACK (handoff), pipe);
- *
- *   gst_bin_add_many (GST_BIN (pipeline),
- *                     filesrc, demuxer, decoder, sink, NULL);
- *
- *   if (!gst_element_link (filesrc, demuxer))
- *     goto failure;
- *   if (!gst_element_link (decoder, sink))
- *     goto failure;
- *
- *   res = gst_element_set_state (pipeline, GST_STATE_PAUSED);
- *   if (res == GST_STATE_CHANGE_FAILURE)
- *     goto failure;
- *
- *   res = gst_element_get_state( pipeline, NULL, NULL, GST_CLOCK_TIME_NONE );
- *   if (res != GST_STATE_CHANGE_SUCCESS)
- *     goto failure;
- *
- *   return pipeline;
- *
- *  failure:
- *   gst_object_unref (GST_OBJECT (pipeline));
- *   return NULL;
- * }
- * @endcode
+ * For examples see here:
+ * @li @ref tutorial_ecore_pipe_gstreamer_example
+ * @li @ref tutorial_ecore_pipe_simple_example
  */
 
 


------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
enlightenment-svn mailing list
enlightenment-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-svn


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic