Merge branch 'experimental' but switch back to non-RT flash thread.
authorTorben Hohn <torbenh@gmx.de>
Tue, 31 Mar 2009 17:45:11 +0000 (31 19:45 +0200)
committerTorben Hohn <torbenh@gmx.de>
Tue, 31 Mar 2009 17:45:11 +0000 (31 19:45 +0200)
1  2 
flashsupport.c

diff --cc flashsupport.c
@@@ -1159,8 -1164,7 +1164,9 @@@ static void *FPX_SoundOutput_Open(void
      int jack_rate;
      int flash_frames;
      size_t bufsize;
 +    char *connect_port_1 = getenv( "JACK_FLASH_PORT_1" );
 +    char *connect_port_2 = getenv( "JACK_FLASH_PORT_2" );
+     int i;
  
      /* Unfortunately we cannot report any useful error string back to
       * Flash. It would be highly preferable if Flash supported some
      flash_frames = jack_get_buffer_size( p->client ) * 44100 / jack_rate;
      bufsize = 2*flash_frames * sizeof( int16_t );
  
-     p->buffer = jack_ringbuffer_create( bufsize * 2 );
-     sem_init( &(p->semaphore), 0, 2 );
+     p->buffer = jack_ringbuffer_create( bufsize * 6 );
+     sem_init( &(p->semaphore), 0, 0 );
  
 -    //pthread_create( &(p->tid), NULL, jack_flash_thread, p );
 -#if 1 
 +    pthread_create( &(p->tid), NULL, jack_flash_thread, p );
++#if 0 
+ // This seems to trigger a race condition in flash.
+     jack_client_create_thread( p->client,
+                   &(p->tid),
+                   (jack_client_real_time_priority( p->client ) == -1) ? 1 : (jack_client_real_time_priority( p->client ) - 1),
+                   (jack_client_real_time_priority( p->client ) == -1) ? 0 : 1,
+                   jack_flash_thread,
+                   p );
+ #endif
  
      /* Second, initialize the connection context */
      if (!(p->port_l = jack_port_register( p->client, "out1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0)) )
      jack_activate( p->client );
  
      snprintf( namebuf, 99, "%s:out1", jack_get_client_name( p->client ) );
 -    jack_connect( p->client, namebuf, "system:playback_1" );
 +    jack_connect( p->client, namebuf, (connect_port_1 != NULL) ? connect_port_1 : "system:playback_1" );
      snprintf( namebuf, 99, "%s:out2", jack_get_client_name( p->client ) );
-     jack_connect( p->client, namebuf, (connect_port_2 != NULL) ? connect_port_2 : "system:playback_1" );
 -    jack_connect( p->client, namebuf, "system:playback_2" );
++    jack_connect( p->client, namebuf, (connect_port_2 != NULL) ? connect_port_2 : "system:playback_2" );
+     // Now start the fill thread.
+     // the semaphore represents the number of writeable buffers in
+     // the ringbuffer. we add 1 for the initial sem_wait.
+     //for(i=0; i<( 5 + 1 ); i++ )
+           sem_post( &(p->semaphore) );
  
      return p;