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 {
