users/daste/freeadsp

changeset 2:d1a6938d1434

Fixed processing chain, now everything should work as expected
author Stefano D'Angelo <zanga.mail@gmail.com>
date Wed Mar 10 02:20:45 2010 +0200 (2010-03-10)
parents a8655349100b
children 69585319c900
files src/gtk/ui.c src/process.c
line diff
     1.1 --- a/src/gtk/ui.c	Tue Mar 09 05:39:47 2010 +0200
     1.2 +++ b/src/gtk/ui.c	Wed Mar 10 02:20:45 2010 +0200
     1.3 @@ -198,26 +198,23 @@
     1.4  plugin_up_clicked(GtkButton *button, gpointer user_data)
     1.5  {
     1.6  	struct plugin_list_entry *entry;
     1.7 -	struct plugin_list_entry *tmp1, *tmp2;
     1.8  
     1.9  	entry = (struct plugin_list_entry *)user_data;
    1.10  
    1.11  	_fa_process_move_up(entry->handle);
    1.12  
    1.13 -	if (entry->prev->prev == NULL)
    1.14 -		plugin_list.head = entry;
    1.15 -	else
    1.16 -		entry->prev->prev->next = entry;
    1.17  	entry->prev->next = entry->next;
    1.18  	if (entry->next == NULL)
    1.19  		plugin_list.tail = entry->prev;
    1.20  	else
    1.21  		entry->next->prev = entry->prev;
    1.22 -	tmp1 = entry->prev->prev;
    1.23 -	tmp2 = entry->prev;
    1.24 -	entry->prev->prev = entry;
    1.25 -	entry->prev = tmp1;
    1.26 -	entry->next = tmp2;
    1.27 +	if (entry->prev->prev == NULL)
    1.28 +		plugin_list.head = entry;
    1.29 +	else
    1.30 +		entry->prev->prev->next = entry;
    1.31 +	entry->next = entry->prev;
    1.32 +	entry->prev = entry->next->prev;
    1.33 +	entry->next->prev = entry;
    1.34  
    1.35  	entry->rack_pos--;
    1.36  	entry->next->rack_pos++;
     2.1 --- a/src/process.c	Tue Mar 09 05:39:47 2010 +0200
     2.2 +++ b/src/process.c	Wed Mar 10 02:20:45 2010 +0200
     2.3 @@ -320,6 +320,33 @@
     2.4  	sem_post(&process_sem);
     2.5  }
     2.6  
     2.7 +static void
     2.8 +connect_audio_ports(struct plugin_handle *handle)
     2.9 +{
    2.10 +	unsigned char output_set;
    2.11 +	unsigned char input_set;
    2.12 +
    2.13 +	output_set = ((struct plugin_list_entry *)
    2.14 +		      handle->process_data)->output_set;
    2.15 +	input_set = (output_set + 1) % 2;
    2.16 +	
    2.17 +	_fa_lv2_plugin_connect_port(handle,
    2.18 +		handle->desc->audio_in_port_indexes[0],
    2.19 +		&internal_buffers[input_set][0]);
    2.20 +	if (handle->desc->audio_in_ports_count == 2)
    2.21 +		_fa_lv2_plugin_connect_port(handle,
    2.22 +			handle->desc->audio_in_port_indexes[1],
    2.23 +			&internal_buffers[input_set + 2][0]);
    2.24 +
    2.25 +	_fa_lv2_plugin_connect_port(handle,
    2.26 +		handle->desc->audio_out_port_indexes[0],
    2.27 +		&internal_buffers[output_set][0]);
    2.28 +	if (handle->desc->audio_out_ports_count == 2)
    2.29 +		_fa_lv2_plugin_connect_port(handle,
    2.30 +			handle->desc->audio_out_port_indexes[1],
    2.31 +			&internal_buffers[output_set + 2][0]);	
    2.32 +}
    2.33 +
    2.34  struct plugin_handle *
    2.35  _fa_process_add(struct plugin_desc *desc)
    2.36  {
    2.37 @@ -372,73 +399,17 @@
    2.38  	sem_wait(&process_sem);
    2.39  
    2.40  	if (process_list.head == NULL)
    2.41 -	  {
    2.42  		process_list.head = process_list.tail = entry;
    2.43 -
    2.44 -		_fa_lv2_plugin_connect_port(entry->handle,
    2.45 -			entry->handle->desc->audio_in_port_indexes[0],
    2.46 -			&internal_buffers[0][0]);
    2.47 -		if (entry->handle->desc->audio_in_ports_count == 2)
    2.48 -			_fa_lv2_plugin_connect_port(entry->handle,
    2.49 -				entry->handle->desc->audio_in_port_indexes[1],
    2.50 -				&internal_buffers[2][0]);
    2.51 -
    2.52 -		_fa_lv2_plugin_connect_port(entry->handle,
    2.53 -			entry->handle->desc->audio_out_port_indexes[0],
    2.54 -			&internal_buffers[1][0]);
    2.55 -		if (entry->handle->desc->audio_out_ports_count == 2)
    2.56 -			_fa_lv2_plugin_connect_port(entry->handle,
    2.57 -				entry->handle->desc->audio_out_port_indexes[1],
    2.58 -				&internal_buffers[3][0]);
    2.59 -	  }
    2.60  	else
    2.61  	  {
    2.62  		entry->prev = process_list.tail;
    2.63  		entry->prev->next = process_list.tail = entry;
    2.64 -		if (entry->prev->output_set == 0)
    2.65 -		  {
    2.66 -			entry->output_set = 1;
    2.67 -
    2.68 -			_fa_lv2_plugin_connect_port(entry->handle,
    2.69 -				entry->handle->desc->audio_in_port_indexes[0],
    2.70 -				&internal_buffers[0][0]);
    2.71 -			if (entry->handle->desc->audio_in_ports_count == 2)
    2.72 -				_fa_lv2_plugin_connect_port(entry->handle,
    2.73 -					entry->handle->desc->audio_in_port_indexes[1],
    2.74 -					&internal_buffers[2][0]);
    2.75 -
    2.76 -			_fa_lv2_plugin_connect_port(entry->handle,
    2.77 -				entry->handle->desc->audio_out_port_indexes[0],
    2.78 -				&internal_buffers[1][0]);
    2.79 -			if (entry->handle->desc->audio_out_ports_count == 2)
    2.80 -				_fa_lv2_plugin_connect_port(entry->handle,
    2.81 -					entry->handle->desc->audio_out_port_indexes[1],
    2.82 -					&internal_buffers[3][0]);
    2.83 -		  }
    2.84 -		else
    2.85 -		  {
    2.86 -			entry->output_set = 0;
    2.87 -
    2.88 -			_fa_lv2_plugin_connect_port(entry->handle,
    2.89 -				entry->handle->desc->audio_in_port_indexes[0],
    2.90 -				&internal_buffers[1][0]);
    2.91 -			if (entry->handle->desc->audio_in_ports_count == 2)
    2.92 -				_fa_lv2_plugin_connect_port(entry->handle,
    2.93 -					entry->handle->desc->audio_in_port_indexes[1],
    2.94 -					&internal_buffers[3][0]);
    2.95 -
    2.96 -			_fa_lv2_plugin_connect_port(entry->handle,
    2.97 -				entry->handle->desc->audio_out_port_indexes[0],
    2.98 -				&internal_buffers[0][0]);
    2.99 -			if (entry->handle->desc->audio_out_ports_count == 2)
   2.100 -				_fa_lv2_plugin_connect_port(entry->handle,
   2.101 -					entry->handle->desc->audio_out_port_indexes[1],
   2.102 -					&internal_buffers[2][0]);
   2.103 -		  }
   2.104 +		entry->output_set = (entry->prev->output_set == 0) ? 1 : 0;
   2.105 +		connect_audio_ports(entry->handle);
   2.106  	  }
   2.107 +	connect_audio_ports(entry->handle);
   2.108  
   2.109  	sem_post(&process_sem);
   2.110 -
   2.111  	return entry->handle;
   2.112  }
   2.113  
   2.114 @@ -446,32 +417,32 @@
   2.115  _fa_process_move_up(struct plugin_handle *handle)
   2.116  {
   2.117  	struct plugin_list_entry *entry;
   2.118 -	struct plugin_list_entry *tmp1, *tmp2;
   2.119  	unsigned char tmp;
   2.120  
   2.121  	entry = (struct plugin_list_entry *)handle->process_data;
   2.122  
   2.123  	sem_wait(&process_sem);
   2.124  
   2.125 -	if (entry->prev->prev == NULL)
   2.126 -		process_list.head = entry;
   2.127 -	else
   2.128 -		entry->prev->prev->next = entry;
   2.129  	entry->prev->next = entry->next;
   2.130  	if (entry->next == NULL)
   2.131  		process_list.tail = entry->prev;
   2.132  	else
   2.133  		entry->next->prev = entry->prev;
   2.134 -	tmp1 = entry->prev->prev;
   2.135 -	tmp2 = entry->prev;
   2.136 -	entry->prev->prev = entry;
   2.137 -	entry->prev = tmp1;
   2.138 -	entry->next = tmp2;
   2.139 +	if (entry->prev->prev == NULL)
   2.140 +		process_list.head = entry;
   2.141 +	else
   2.142 +		entry->prev->prev->next = entry;
   2.143 +	entry->next = entry->prev;
   2.144 +	entry->prev = entry->next->prev;
   2.145 +	entry->next->prev = entry;
   2.146  
   2.147  	tmp = entry->next->output_set;
   2.148  	entry->next->output_set = entry->output_set;
   2.149  	entry->output_set = tmp;
   2.150  
   2.151 +	connect_audio_ports(entry->handle);
   2.152 +	connect_audio_ports(entry->next->handle);
   2.153 +
   2.154  	sem_post(&process_sem);
   2.155  }
   2.156  
   2.157 @@ -485,8 +456,11 @@
   2.158  
   2.159  	sem_wait(&process_sem);
   2.160  
   2.161 -	for (p = entry->next; p != NULL; p = p->next)
   2.162 +	for (p = process_list.tail; p != entry; p = p->prev)
   2.163 +	  {
   2.164  		p->output_set = p->prev->output_set;
   2.165 +		connect_audio_ports(p->handle);
   2.166 +	  }
   2.167  
   2.168  	if (entry->next == NULL)
   2.169  	  {