[PD-cvs] pd/src s_audio_jack.c,1.5.4.8.2.7.2.3,1.5.4.8.2.7.2.4

Mathieu Bouchard matju at users.sourceforge.net
Thu Jun 28 11:08:38 CEST 2007


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16986

Modified Files:
      Tag: desiredata
	s_audio_jack.c 
Log Message:
more cleanup


Index: s_audio_jack.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_audio_jack.c,v
retrieving revision 1.5.4.8.2.7.2.3
retrieving revision 1.5.4.8.2.7.2.4
diff -C2 -d -r1.5.4.8.2.7.2.3 -r1.5.4.8.2.7.2.4
*** s_audio_jack.c	28 Jun 2007 09:02:32 -0000	1.5.4.8.2.7.2.3
--- s_audio_jack.c	28 Jun 2007 09:08:36 -0000	1.5.4.8.2.7.2.4
***************
*** 103,107 ****
  				sys_dacblocksize);
  		}
- 
  		/* run dsp */
  		sched_tick(sys_time + sys_time_per_dsp_tick);
--- 103,106 ----
***************
*** 109,119 ****
  		for (j = 0; j < sys_outchannels;  j++) {
  			t_sample * out = jack_port_get_buffer (output_port[j], nframes);
! 			copyblock(out + i * sys_dacblocksize,
! 						 sys_soundout + j * sys_dacblocksize,
! 						 sys_dacblocksize);
  		}
  		/* update peak meters */
! 		if (sys_meters)
! 			sys_peakmeters();
  		/* clear the output buffer */
  		zeroblock(sys_soundout, j * sys_dacblocksize);
--- 108,115 ----
  		for (j = 0; j < sys_outchannels;  j++) {
  			t_sample * out = jack_port_get_buffer (output_port[j], nframes);
! 			copyblock(out + i * sys_dacblocksize, sys_soundout + j * sys_dacblocksize, sys_dacblocksize);
  		}
  		/* update peak meters */
! 		if (sys_meters) sys_peakmeters();
  		/* clear the output buffer */
  		zeroblock(sys_soundout, j * sys_dacblocksize);
***************
*** 124,129 ****
  }
  
- 
- 
  static int jack_srate (jack_nframes_t srate, void *arg) {
      sys_dacsr = srate;
--- 120,123 ----
***************
*** 131,135 ****
  }
  
- 
  static int jack_ignore_graph_callback = 0;
  static t_int jack_shutdown_handler(t_int* none) {
--- 125,128 ----
***************
*** 138,146 ****
  	/* clean up */
  	jack_close_audio();
- 
  	/* try to reconnect to jack server */
! 	jack_open_audio(sys_inchannels, sys_outchannels,\
! 		sys_dacsr, jack_scheduler);
! 
  	/* restore last connection state */
   	jack_restore_connection_state();
--- 131,136 ----
  	/* clean up */
  	jack_close_audio();
  	/* try to reconnect to jack server */
! 	jack_open_audio(sys_inchannels, sys_outchannels, sys_dacsr, jack_scheduler);
  	/* restore last connection state */
   	jack_restore_connection_state();
***************
*** 166,172 ****
      jack_ports = jack_get_ports( jack_client, "", "", 0 );
      regcomp( &port_regex, "^[^:]*", REG_EXTENDED );
- 
      jack_client_names[0] = NULL;
- 
      /* Build a list of clients from the list of ports */
      for (i=0; jack_ports[i] != NULL; i++) {
--- 156,160 ----
***************
*** 174,200 ****
          regmatch_t match_info;
          char tmp_client_name[100];
! 
!         /* extract the client name from the port name, using a regex
!          * that parses the clientname:portname syntax */
          regexec( &port_regex, jack_ports[i], 1, &match_info, 0 );
          memcpy( tmp_client_name, &jack_ports[i][match_info.rm_so],
                  match_info.rm_eo - match_info.rm_so );
          tmp_client_name[ match_info.rm_eo - match_info.rm_so ] = '\0';
- 
          /* do we know about this port's client yet? */
          client_seen = 0;
! 
!         for( j = 0; j < num_clients; j++ )
              if( strcmp( tmp_client_name, jack_client_names[j] ) == 0 )
                  client_seen = 1;
- 
          if (!client_seen) {
              jack_client_names[num_clients] = (char*)getbytes(strlen(tmp_client_name) + 1);
- 
              /* The alsa_pcm client should go in spot 0.  If this
               * is the alsa_pcm client AND we are NOT about to put
               * it in spot 0 put it in spot 0 and move whatever
               * was already in spot 0 to the end. */
- 
              if (strcmp( "alsa_pcm", tmp_client_name ) == 0 && num_clients > 0) {
  		char* tmp;
--- 162,181 ----
          regmatch_t match_info;
          char tmp_client_name[100];
!         /* extract the client name from the port name, using a regex that parses the clientname:portname syntax */
          regexec( &port_regex, jack_ports[i], 1, &match_info, 0 );
          memcpy( tmp_client_name, &jack_ports[i][match_info.rm_so],
                  match_info.rm_eo - match_info.rm_so );
          tmp_client_name[ match_info.rm_eo - match_info.rm_so ] = '\0';
          /* do we know about this port's client yet? */
          client_seen = 0;
!         for (j = 0; j < num_clients; j++)
              if( strcmp( tmp_client_name, jack_client_names[j] ) == 0 )
                  client_seen = 1;
          if (!client_seen) {
              jack_client_names[num_clients] = (char*)getbytes(strlen(tmp_client_name) + 1);
              /* The alsa_pcm client should go in spot 0.  If this
               * is the alsa_pcm client AND we are NOT about to put
               * it in spot 0 put it in spot 0 and move whatever
               * was already in spot 0 to the end. */
              if (strcmp( "alsa_pcm", tmp_client_name ) == 0 && num_clients > 0) {
  		char* tmp;
***************
*** 209,229 ****
              }
              num_clients++;
- 
          }
      }
! 
! /* 	for (i=0;i<num_clients;i++) post("client: %s",jack_client_names[i]); */
! 
!     free( jack_ports );
      return jack_client_names;
  }
  
! /*
!  *   Wire up all the ports of one client.
!  *
!  */
! 
! static int jack_connect_ports(char* client) {
! 	char  regex_pattern[100]; /* its always the same, ... */
  	int i;
  	const char **jack_ports;
--- 190,203 ----
              }
              num_clients++;
          }
      }
! /* for (i=0;i<num_clients;i++) post("client: %s",jack_client_names[i]); */
!     free(jack_ports);
      return jack_client_names;
  }
  
! /* Wire up all the ports of one client. */
! static int jack_connect_ports(char *client) {
! 	char regex_pattern[100]; /* its always the same, ... */
  	int i;
  	const char **jack_ports;
***************
*** 295,378 ****
  	}
  	jack_get_clients();
! 		/* tell the JACK server to call `process()' whenever
! 		   there is work to be done.
! 		   tb: adapted for callback based scheduling
! 		*/
! 		if (scheduler == 1) {
! 			dspticks_per_jacktick = jack_get_buffer_size(jack_client)
! 				/ sys_schedblocksize;
! 			jack_set_process_callback (jack_client, cb_process, 0);
! 		} else jack_set_process_callback (jack_client, process, 0);
! 
! 		jack_set_error_function (jack_error);
  #ifdef JACK_XRUN
! 		jack_set_xrun_callback (jack_client, jack_xrun, NULL);
  #endif
! 		jack_set_graph_order_callback(jack_client, jack_graph_order_callback, NULL);
! 		/* tell the JACK server to call `srate()' whenever the sample rate of the system changes. */
! 		jack_set_sample_rate_callback (jack_client, jack_srate, 0);
! 		/* tell the JACK server to call `jack_shutdown()' if
! 		   it ever shuts down, either entirely, or if it just decides to stop calling us. */
! 		jack_on_shutdown (jack_client, jack_shutdown, 0);
! 		for (j=0;j<NUM_JACK_PORTS;j++) {
! 			input_port[j]=NULL;
! 			output_port[j] = NULL;
! 		}
! 		new_jack = 1;
! 	}
! 	/* display the current sample rate. once the client is activated
! 	   (see below), you should rely on your own sample rate callback (see above) for this value. */
! 	srate = jack_get_sample_rate (jack_client);
! 	sys_dacsr = srate;
! 
! 	/* create the ports */
! 	for (j = 0; j < inchans; j++) {
! 		sprintf(port_name, "input%d", j);
! 		if (!input_port[j]) input_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
! 	}
! 	for (j = 0; j < outchans; j++) {
! 		sprintf(port_name, "output%d", j);
! 		if (!output_port[j]) output_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
  	}
! 	outport_count = outchans;
! 
! 	/* tell the JACK server that we are ready to roll */
! 	if (new_jack) {
! 	    if (jack_activate (jack_client)) {
              fprintf (stderr, "cannot activate client\n");
              sys_inchannels = sys_outchannels = 0;
              ret = 1;
! 			goto bailout;
! 		}
! 		memset(jack_outbuf,0,sizeof(jack_outbuf));
! 		if (jack_client_names[0]) jack_connect_ports(jack_client_names[0]);
! 		pthread_mutex_init(&jack_mutex,NULL);
! 		pthread_cond_init(&jack_sem,NULL);
  	}
! 	/* tb: get advance from jack server */
! 	sys_schedadvance = (float)jack_port_get_total_latency(jack_client,output_port[0]) * 1000. / sys_dacsr * 1000;
! 	return 0;
   bailout:
! 	/* tb: if we can't start jack, go to traditional scheduler */
! 	sys_setscheduler(0);
! 	return ret;
  }
  
  void jack_close_audio(void) {
! 	if (jack_client) {
! 		int i;
! 		jack_deactivate(jack_client);
! 		jack_started = 0;
! 		jack_client_close(jack_client);
! 		jack_client = NULL;
! 		for (i = 0; i <NUM_JACK_PORTS; i++) {
! 			input_port[i] = NULL;
! 			output_port[i] = NULL;
! 		}
  	}
  }
  
  int jack_send_dacs(void) {
! 	float * fp;
  	int j;
  	int rtnval =  SENDDACS_YES;
--- 269,346 ----
  	}
  	jack_get_clients();
! 	/* tell the JACK server to call `process()' whenever there is work to be done.
!            tb: adapted for callback based scheduling */
! 	if (scheduler == 1) {
! 		dspticks_per_jacktick = jack_get_buffer_size(jack_client) / sys_schedblocksize;
! 		jack_set_process_callback (jack_client, cb_process, 0);
! 	} else jack_set_process_callback (jack_client, process, 0);
! 	jack_set_error_function (jack_error);
  #ifdef JACK_XRUN
! 	jack_set_xrun_callback (jack_client, jack_xrun, NULL);
  #endif
! 	jack_set_graph_order_callback(jack_client, jack_graph_order_callback, NULL);
! 	/* tell the JACK server to call `srate()' whenever the sample rate of the system changes. */
! 	jack_set_sample_rate_callback (jack_client, jack_srate, 0);
! 	/* tell the JACK server to call `jack_shutdown()' if
! 	   it ever shuts down, either entirely, or if it just decides to stop calling us. */
! 	jack_on_shutdown (jack_client, jack_shutdown, 0);
! 	for (j=0;j<NUM_JACK_PORTS;j++) {
! 		input_port[j]=NULL;
! 		output_port[j] = NULL;
  	}
! 	new_jack = 1;
!     }
!     /* display the current sample rate. once the client is activated
!        (see below), you should rely on your own sample rate callback (see above) for this value. */
!     srate = jack_get_sample_rate (jack_client);
!     sys_dacsr = srate;
!     /* create the ports */
!     for (j = 0; j < inchans; j++) {
! 	sprintf(port_name, "input%d", j);
! 	if (!input_port[j]) input_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
!     }
!     for (j = 0; j < outchans; j++) {
! 	sprintf(port_name, "output%d", j);
! 	if (!output_port[j]) output_port[j] = jack_port_register (jack_client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
!     }
!     outport_count = outchans;
!     /* tell the JACK server that we are ready to roll */
!     if (new_jack) {
! 	if (jack_activate (jack_client)) {
              fprintf (stderr, "cannot activate client\n");
              sys_inchannels = sys_outchannels = 0;
              ret = 1;
! 	    goto bailout;
  	}
! 	memset(jack_outbuf,0,sizeof(jack_outbuf));
! 	if (jack_client_names[0]) jack_connect_ports(jack_client_names[0]);
! 	pthread_mutex_init(&jack_mutex,NULL);
! 	pthread_cond_init(&jack_sem,NULL);
!     }
!     /* tb: get advance from jack server */
!     sys_schedadvance = (float)jack_port_get_total_latency(jack_client,output_port[0]) * 1000. / sys_dacsr * 1000;
!     return 0;
   bailout:
!     /* tb: if we can't start jack, go to traditional scheduler */
!     sys_setscheduler(0);
!     return ret;
  }
  
  void jack_close_audio(void) {
!     if (jack_client) {
! 	int i;
! 	jack_deactivate(jack_client);
! 	jack_started = 0;
! 	jack_client_close(jack_client);
! 	jack_client = NULL;
! 	for (i = 0; i <NUM_JACK_PORTS; i++) {
! 		input_port[i] = NULL;
! 		output_port[i] = NULL;
  	}
+     }
  }
  
  int jack_send_dacs(void) {
! 	float *fp;
  	int j;
  	int rtnval =  SENDDACS_YES;
***************
*** 423,427 ****
  }
  
- 
  /* ports connected to the inputs */
  static const char ** jack_in_connections[NUM_JACK_PORTS];
--- 391,394 ----





More information about the Pd-cvs mailing list