[gst-devel] gstreamer, JNI and swing

Robert Scott robert.b.scott at sbcglobal.net
Tue Mar 14 23:33:01 CET 2006


I recently started working with gstreamer0.10, and I ran into a  
pretty serious hurdle up front.  To give you some background on what  
I am doing, I am writing a car computer (yeah, I know not that  
original) in Java.  I am a fairly proficient C programmer, and I am  
very comfortable using JNI to create a binding between java and C.  I  
have most of the user interface for the music player written in a  
combination of Swing and XUI, and recently found gstreamer which  
seems like the perfect library to playback music files.

I read the development manual and wrote a simple program that played  
a file, calling in from java, but after realizing that  
g_run_main_loop is blocking, i decided to put that call into another  
thread and then run the rest of the program in other threads, and  
here is where the problems began.  For some reason, the program seg  
faults at a random point relatively soon after starting the GUI,  
furthermore if I don't start the GUI the program doesn't segfault.   
If I don't initialize gstreamer, but I do start the GUI, the program  
doesn't segfault.

To investigate, I tried stripping the program all the way down to the  
core, removing all calls to the gstreamer library except for the call  
to gst_init( NULL, NULL );.  And even then, the program segfaults.  I  
am running with the latest JDK (1.5.0-06), on ubuntu dapper-drake.

the packages are:
ii  libgstreamer-plugins-base0.1 0.10.4-1ubuntu2               
GStreamer libraries from the "base" set
ii  libgstreamer0.10-0           0.10.4-1ubuntu1              Core  
GStreamer libraries and elements
ii  libgstreamer0.10-0-dbg       0.10.4-1ubuntu1              Core  
GStreamer libraries and elements
ii  libgstreamer0.10-dev         0.10.4-1ubuntu1               
GStreamer core development files
ii  gstreamer0.10-alsa           0.10.4-1ubuntu2               
GStreamer plugin for ALSA
ii  gstreamer0.10-plugins-bad    0.10.1-0ubuntu1               
GStreamer plugins from the "bad" set
ii  gstreamer0.10-plugins-base   0.10.4-1ubuntu2               
GStreamer plugins from the "base" set
ii  gstreamer0.10-plugins-good   0.10.2-2ubuntu2               
GStreamer plugins from the "good" set
ii  gstreamer0.10-plugins-ugly   0.10.2-0ubuntu2               
GStreamer plugins from the "ugly" set

This is pretty much the extent of the code:
static int _media_init( _media_t* media, gint argc, gchar* argv[] )
     int _critical_section()
         if ( media->is_initialized == _INITIALIZED ) {
             return cadvium_log_msg( ERR_CRITICAL, "Multiple media  
initializations." );

         /* I believe this can only occur once */
         gst_init( NULL, NULL );

         /* Test to see if the media loop has to run in the same  
thread */
         media->loop = NULL;

         if (( media->play = gst_element_factory_make( "playbin",  
"play" )) == NULL ) {
             return cadvium_log_msg( ERR_CRITICAL,  
"gst_element_factory_make" );

         // gst_bus_add_watch( gst_pipeline_get_bus( GST_PIPELINE 
( media->play )), _bus_callback, media );

         /* Set the callback to the empty callback */
         media->callback = _empty_callback;

         media->is_initialized = _INITIALIZED;

         media->key = _CADVIUM_KEY;

         cadvium_log_msg( 0, "gstreamer media library initialized  
successfully" );
         return 0;

     int ret;

     if ( pthread_mutex_init( &media->mutex, NULL ) < 0 ) return  
cadvium_log_perr( "pthread_mutex_init" );

     if ( pthread_mutex_lock( &media->mutex ) < 0 ) return  
cadvium_log_perr( "pthread_mutex_lock" );

     ret = _critical_section();

     pthread_mutex_unlock( &media->mutex );

     return ret;

the cores are pretty much useless, i think memory is being corrupted  
because it doesn't show any symbols in the stack trace.

any help would be immensly appreciated.  gstreamer seems to have all  
of the features that i need, and all other libraries don't really  
stack up at all.


More information about the gstreamer-devel mailing list