Added some test apps by Zeenix.
authorWim Taymans <wim.taymans@gmail.com>
Fri, 10 Aug 2001 17:45:36 +0000 (17:45 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Fri, 10 Aug 2001 17:45:36 +0000 (17:45 +0000)
Original commit message from CVS:
Added some test apps by Zeenix.

test/misc/Makefile.am [new file with mode: 0644]
test/misc/gsmdec.c [new file with mode: 0755]
test/misc/gsmenc.c [new file with mode: 0755]
test/misc/mpgPlayer.c [new file with mode: 0755]

diff --git a/test/misc/Makefile.am b/test/misc/Makefile.am
new file mode 100644 (file)
index 0000000..cef3b3d
--- /dev/null
@@ -0,0 +1,7 @@
+# FIXME FIXME
+
+noinst_PROGRAMS = gsmdec gsmenc
+
+LIBS += $(GST_LIBS)
+CFLAGS += $(GST_CFLAGS)
+
diff --git a/test/misc/gsmdec.c b/test/misc/gsmdec.c
new file mode 100755 (executable)
index 0000000..a8316b3
--- /dev/null
@@ -0,0 +1,91 @@
+#include <gst/gst.h>
+
+// Important: catch a signal( unix sig. ) to end the prog. normally
+
+int main(int argc, char *argv[] )
+{
+   // The Main Bin( Pipeline )
+   GstElement *main_pipe ;
+
+   // The thread 
+   GstElement *sinkThread ; 
+   
+   // Now the elements for our Sink Bin
+   GstElement *gsmDec, *ossSink, *udpSrc ;
+   
+   // And a queue
+   GstElement *queue ;
+   gst_init( &argc, &argv ) ; // ughh...
+
+   // Get the Boss: 
+   main_pipe = gst_pipeline_new( "main_pipe" ) ;
+   // & the lower level Bosses
+   sinkThread = gst_thread_new( "sinkThread"   ) ; 
+   
+   //register_sigs( (GstElement *)srcThread ) ; // forget this line
+
+   // NOTE: I have changed the osssink to a disksink, as i can't have the two
+   // processes( server & client ) accessing the same soundcard.
+   // Get the sound Card
+   ossSink = gst_elementfactory_make( "osssink", "audio_sink" ) ;
+
+   // Get the GSM codecs
+   gsmDec = gst_elementfactory_make( "gsmdec", "gsmDec" ) ;
+   
+   // Get a queue
+   queue = gst_elementfactory_make( "queue", "sink_queue" ) ;
+
+   // Get the UDP connection to yourself
+   udpSrc  = gst_elementfactory_make( "udpsrc", "udpSrc" ) ;
+   
+   // Asserttions:
+   g_assert( main_pipe != NULL ) ;
+   g_assert( sinkThread != NULL ) ;
+   g_assert( ossSink != NULL ) ;
+   g_assert( gsmDec != NULL ) ;
+   g_assert( queue != NULL ) ;
+   g_assert( udpSrc != NULL ) ;
+
+   // Got to set the sound card:
+   //g_object_set( G_OBJECT( ossSink ), "frequency", 1000, NULL ) ;
+   //g_object_set( G_OBJECT( ossSink ), "channels", 1, NULL ) ;
+   //g_object_set( G_OBJECT( ossSink ), "location", "recorded", NULL ) ;
+  
+   // Set the connections:
+   g_object_set( G_OBJECT( udpSrc ), "port", 9323, NULL ) ;
+   
+   // make gsm encoders & decoder the ghost pads
+   gst_element_add_ghost_pad( GST_ELEMENT( sinkThread ), 
+                             gst_element_get_pad( ossSink, "sink" ), "sink" ) ;
+   
+   // Connect the appropritate elements
+   gst_pad_connect( gst_element_get_pad( udpSrc, "src" ) ,
+                   gst_element_get_pad( gsmDec, "sink" ) ) ;
+   gst_pad_connect( gst_element_get_pad( gsmDec, "src" ) ,
+                   gst_element_get_pad( queue, "sink" ) ) ;
+   gst_pad_connect( gst_element_get_pad( queue, "src" ) ,
+                   gst_element_get_pad( GST_ELEMENT( sinkThread ), "sink" ) ) ;
+   
+   // Add all element to their appropriate bins
+   gst_bin_add( GST_BIN( sinkThread ), ossSink ) ;
+   gst_bin_add( GST_BIN( main_pipe ), gsmDec  ) ; 
+   gst_bin_add( GST_BIN( main_pipe ), queue ) ; 
+   gst_bin_add( GST_BIN( main_pipe ), udpSrc  ) ; 
+   
+   gst_bin_add( GST_BIN( main_pipe ), GST_ELEMENT( sinkThread ) ) ;
+   
+   
+   // Lets get started
+   gst_element_set_state( GST_ELEMENT( main_pipe ), GST_STATE_PLAYING ) ; 
+
+   while( gst_bin_iterate( GST_BIN( main_pipe ) ) ) ;
+
+   gst_element_set_state( GST_ELEMENT( main_pipe ), GST_STATE_NULL ) ; 
+  
+   gst_object_destroy( GST_OBJECT( main_pipe  )  ) ;  
+
+   g_print( "Normal Program Termination\n" ) ;
+   
+   exit (0) ;
+}
diff --git a/test/misc/gsmenc.c b/test/misc/gsmenc.c
new file mode 100755 (executable)
index 0000000..74b6174
--- /dev/null
@@ -0,0 +1,88 @@
+#include <gst/gst.h>
+
+// Important: catch a signal( unix sig. ) to end the prog. normally
+
+int main(int argc, char *argv[] )
+{
+   // The Main Bin( Thread )
+   GstElement *main_pipe ;
+
+   // The Two pipelines
+   GstElement *srcThread  ;
+   
+   // The elements for our Source Bin
+   GstElement *ossSrc, *gsmEnc, *udpSink ;
+  
+   // And a queue
+   GstElement *queue ;
+   gst_init( &argc, &argv ) ; // ughh...
+
+   // Get the Boss: 
+   main_pipe = gst_pipeline_new( "main_pipe" ) ;
+   // & the lower level Bosses
+   srcThread  = gst_thread_new( "sourceThread" ) ;
+   
+   //register_sigs( (GstElement *)srcThread ) ; forget about this line
+   
+   // Get the sound Card
+   ossSrc  = gst_elementfactory_make( "osssrc",  "audio_src" ) ;
+   // Get the GSM codecs
+   gsmEnc = gst_elementfactory_make( "gsmenc", "gsmEnc" ) ;
+   
+   // Get a queue
+   queue = gst_elementfactory_make( "queue", "src_queue" ) ;
+
+   // Get the UDP connection to the server 
+   udpSink = gst_elementfactory_make( "udpsink", "udpSink" ) ;
+   
+   // Asserttions:
+   g_assert( main_pipe != NULL ) ;
+   g_assert( srcThread != NULL ) ;
+   g_assert( ossSrc != NULL ) ;
+   g_assert( gsmEnc != NULL ) ;
+   g_assert( queue != NULL ) ;
+   g_assert( udpSink != NULL ) ;
+
+   // Got to set the sound card:
+   g_object_set( G_OBJECT( ossSrc ), "frequency", 8000, NULL ) ;
+   g_object_set( G_OBJECT( ossSrc ), "channels", 1, NULL ) ;
+   g_object_set( G_OBJECT( ossSrc ), "bytes_per_read", 320, NULL ) ;
+   g_object_set( G_OBJECT( ossSrc ), "format", 16, NULL ) ;
+   // Set the connections: 
+   g_object_set( G_OBJECT( udpSink ), "port", 9323, NULL ) ;
+   
+   // make gsm encoders & decoder the ghost pads
+   gst_element_add_ghost_pad( GST_ELEMENT( srcThread ), 
+                             gst_element_get_pad( udpSink, "sink" ), "sink" ) ;
+   
+   // Connect the appropritate elements
+   gst_pad_connect( gst_element_get_pad( ossSrc, "src" ) ,
+                   gst_element_get_pad( gsmEnc, "sink" ) ) ;
+   gst_pad_connect( gst_element_get_pad( gsmEnc, "src" ) ,
+                   gst_element_get_pad( queue, "sink" ) ) ;
+   gst_pad_connect( gst_element_get_pad( queue, "src" ) ,
+                   gst_element_get_pad( GST_ELEMENT( srcThread ), "sink" ) ) ;
+   
+   // Add all element to their appropriate bins
+   gst_bin_add( GST_BIN( main_pipe ), ossSrc ) ;
+   gst_bin_add( GST_BIN( main_pipe ), gsmEnc ) ;
+   gst_bin_add( GST_BIN( main_pipe ), queue ) ;
+   gst_bin_add( GST_BIN( srcThread ), udpSink ) ;
+   
+   gst_bin_add( GST_BIN( main_pipe ), GST_ELEMENT( srcThread ) ) ;
+   
+   // Lets get started
+   gst_element_set_state( GST_ELEMENT( main_pipe ), GST_STATE_PLAYING ) ; 
+
+   while( gst_bin_iterate( GST_BIN( main_pipe ) ) ) ;
+
+   gst_element_set_state( GST_ELEMENT( main_pipe ), GST_STATE_NULL ) ; 
+  
+   gst_object_destroy( GST_OBJECT( main_pipe  )  ) ;  
+
+   g_print( "Normal Program Termination\n" ) ;
+   
+   exit (0) ;
+}
diff --git a/test/misc/mpgPlayer.c b/test/misc/mpgPlayer.c
new file mode 100755 (executable)
index 0000000..32efa06
--- /dev/null
@@ -0,0 +1,125 @@
+#include "gsmtest.h"
+
+// The Main Bin( Thread )
+GstElement *main_thread ;
+
+// The primary srcs & sinks:
+GstElement *diskSrc , *ossSink, *videoSink ;
+// Parsers, filters & Decoders: 
+GstElement *mpgParser, *mpgVideoParser, *mp3Parser ;
+GstElement *mpgDecoder, *mp3Decoder ;
+GstElement *colorSpace ; // see if including this works
+
+gboolean playing ;
+
+void eos( GstElement *element, gpointer data )
+{
+  g_print( "eos reached, ending..." ) ;
+  playing = FALSE ;
+}
+
+void mpg_parser_connect( GstElement *parser, GstPad *pad )
+{
+  g_print( "new pad %s created\n", gst_pad_get_name( pad ) ) ;
+
+  gst_element_set_state( GST_ELEMENT( main_thread ), GST_STATE_PAUSED ) ;
+  
+  if( strncmp( gst_pad_get_name( pad ), "audio", 5 ) == 0 )
+  {
+    gst_pad_connect( pad, gst_element_get_pad( mp3Parser, "sink" ) ) ;
+    gst_pad_connect( gst_element_get_pad( mp3Parser, "src" ) ,
+                    gst_element_get_pad( mp3Decoder, "sink" ) ) ;
+    gst_pad_connect( gst_element_get_pad( mp3Decoder, "src" ) ,
+                    gst_element_get_pad( ossSink, "sink" ) ) ;
+    
+    gst_bin_add( GST_BIN( main_thread ), mp3Parser ) ;
+    gst_bin_add( GST_BIN( main_thread ), mp3Decoder ) ;
+    gst_bin_add( GST_BIN( main_thread ), ossSink ) ;
+  }
+  if( strncmp( gst_pad_get_name( pad ), "video", 5 ) == 0 )
+  { 
+    gst_pad_connect( pad, gst_element_get_pad( mpgVideoParser, "sink" ) ) ;
+    gst_pad_connect( gst_element_get_pad( mpgVideoParser, "src" ) ,
+                    gst_element_get_pad( mpgDecoder, "sink" ) ) ;
+    gst_pad_connect( gst_element_get_pad( mpgDecoder, "src" ) ,
+                    gst_element_get_pad( colorSpace, "sink" ) ) ;
+    gst_pad_connect( gst_element_get_pad( colorSpace, "src" ) ,
+                    gst_element_get_pad( videoSink, "sink" ) ) ;
+  
+    gst_bin_add( GST_BIN( main_thread ), mpgVideoParser ) ;
+    gst_bin_add( GST_BIN( main_thread ), mpgDecoder ) ;
+    gst_bin_add( GST_BIN( main_thread ), colorSpace ) ;
+    gst_bin_add( GST_BIN( main_thread ), videoSink ) ;
+  }  
+  
+  gst_element_set_state( GST_ELEMENT( main_thread ), GST_STATE_PLAYING ) ;
+}
+
+int main(int argc, char *argv[] )
+{
+   gst_init( &argc, &argv ) ; // ughh...
+
+   // Get the Boss: 
+   main_thread = gst_pipeline_new( "main_thread" ) ;
+   
+   // Get the main Srcs & sinks 
+   diskSrc  = gst_elementfactory_make( "disksrc",  "movie_file" ) ;
+   g_object_set( G_OBJECT( diskSrc ), "location", argv[ 1 ], NULL ) ;
+   g_signal_connectc( G_OBJECT( diskSrc ), "eos", 
+                     G_CALLBACK( eos ), main_thread, FALSE ) ;
+   
+   ossSink = gst_elementfactory_make( "osssink", "audio_sink" ) ;
+   videoSink = gst_elementfactory_make( "xvideosink", "video_sink" ) ;
+   colorSpace = gst_elementfactory_make( "colorspace", "video_filter" ) ;
+   
+   // Get the parsers
+   mp3Parser = gst_elementfactory_make( "mp3parse", "mp3parser" ) ;
+   mpgVideoParser = gst_elementfactory_make( "mp2videoparse", "mp2parser" ) ;
+   mpgParser = gst_elementfactory_make( "mpeg2parse", "mpgparser" ) ;
+   g_signal_connectc( G_OBJECT( mpgParser ), "new_pad", 
+                     G_CALLBACK( mpg_parser_connect ), NULL, FALSE ) ;
+
+   //The mpeg decoders
+   mpgDecoder = gst_elementfactory_make( "mpeg2dec", "mpegdecoder" ) ;
+   mp3Decoder = gst_elementfactory_make( "mpg123", "mp3decoder" ) ;
+   
+   // Asserttions:
+   g_assert( main_thread != NULL ) ;
+   g_assert( videoSink != NULL ) ;
+   g_assert( diskSrc != NULL ) ;
+   g_assert( ossSink != NULL ) ;
+   g_assert( mpgParser != NULL ) ;
+   g_assert( mp3Parser != NULL ) ;
+   g_assert( mp3Decoder != NULL ) ;
+   g_assert( mpgDecoder != NULL ) ;
+   g_assert( colorSpace != NULL ) ;
+   g_assert( mpgVideoParser != NULL ) ;
+
+   //g_object_set( G_OBJECT( ossSink ), "frequency", 1000, NULL ) ;
+   //g_object_set( G_OBJECT( ossSink ), "channels", 1, NULL ) ;
+   
+   // Connect the appropritate elements
+   gst_pad_connect( gst_element_get_pad( diskSrc, "src" ) ,
+                   gst_element_get_pad( mpgParser, "sink" ) ) ;
+   
+   // Add all element to their appropriate bins
+   gst_bin_add( GST_BIN( main_thread ), diskSrc ) ;
+   gst_bin_add( GST_BIN( main_thread ), mpgParser ) ;
+   
+   // Lets get started
+   gst_element_set_state( GST_ELEMENT( main_thread ), GST_STATE_PLAYING ) ;
+   playing = TRUE ;
+   
+   while( playing ) 
+   gst_bin_iterate( GST_BIN( main_thread ) ) ;
+
+   gst_element_set_state( GST_ELEMENT( main_thread ), GST_STATE_NULL ) ; 
+  
+   gst_object_destroy( GST_OBJECT( main_thread  )  ) ;  
+
+   g_print( "Normal Program Termination\n" ) ;
+   
+   exit (0) ;
+}