return err;
}
+g_print("audio_open_input: format=%d\n",record_audio_format);
+
switch(record_audio_format) {
case SND_PCM_FORMAT_S16_LE:
g_print("audio_open_input: mic_buffer: size=%d channels=%d sample=%ld bytes\n",mic_buffer_size,channels,sizeof(gint16));
break;
}
-g_print("audio_open_input: starting mic_read_thread\n");
- mic_read_thread_id = g_thread_new("local mic",mic_read_thread,NULL);
- if(!mic_read_thread_id )
- {
- g_print("g_thread_new failed on mic_read_thread\n");
+g_print("audio_open_input: creating mic_read_thread\n");
+ GError *error;
+ mic_read_thread_id = g_thread_try_new("local mic",mic_read_thread,NULL,&error);
+ if(!mic_read_thread_id ) {
+ g_print("g_thread_new failed on mic_read_thread: %s\n",error->message);
}
-
return 0;
}
}
void audio_close_input() {
- g_print("audio_close_input\n");
+g_print("audio_close_input\n");
running=FALSE;
if(mic_read_thread_id!=NULL) {
+g_print("audio_close_input: wait for thread to complete\n");
g_thread_join(mic_read_thread_id);
mic_read_thread_id=NULL;
}
if(record_handle!=NULL) {
+g_print("audio_close_input: snd_pcm_close\n");
snd_pcm_close (record_handle);
record_handle=NULL;
}
if(mic_buffer!=NULL) {
+g_print("audio_close_input: free mic buffer\n");
g_free(mic_buffer);
mic_buffer=NULL;
}
gfloat sample;
int i;
-g_print("mic_read_thread: snd_pcm_prepare\n");
- if ((rc = snd_pcm_prepare (record_handle)) < 0) {
- g_print("mic_read_thread: cannot prepare audio interface for use (%s)\n",
+g_print("mic_read_thread: mic_buffer_size=%d\n",mic_buffer_size);
+g_print("mic_read_thread: snd_pcm_start\n");
+ if ((rc = snd_pcm_start (record_handle)) < 0) {
+ g_print("mic_read_thread: cannot start audio interface for use (%s)\n",
snd_strerror (rc));
return NULL;
}
-g_print("mic_read_thread: mic_buffer_size=%d\n",mic_buffer_size);
running=TRUE;
while(running) {
if ((rc = snd_pcm_readi (record_handle, mic_buffer, mic_buffer_size)) != mic_buffer_size) {
g_print("output_device: name=%s descr=%s\n",name,descr);
//}
}
+#ifdef INCLUDE_SNOOP
} else if(strncmp("dsnoop:", name, 6)==0) {
if(n_input_devices<MAX_AUDIO_DEVICES) {
//if(strncmp("dmix:CARD=ALSA",name,14)!=0) {
n_input_devices++;
g_print("input_device: name=%s descr=%s\n",name,descr);
//}
+#endif
}
}
// call audo_close_output with old device, audio_open_output with new one
//
static void local_output_changed_cb(GtkWidget *widget, gpointer data) {
- int i = GPOINTER_TO_INT(data);
+ int i = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
fprintf(stderr,"local_output_changed rx=%d %s\n",active_receiver->id,output_devices[i].name);
if(active_receiver->local_audio) {
audio_close_output(active_receiver); // audio_close with OLD device
if(active_receiver->audio_device==-1) active_receiver->audio_device=0;
- output=NULL;
+ output=gtk_combo_box_text_new();
for(i=0;i<n_output_devices;i++) {
- output=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(output),output_devices[i].name);
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(output),NULL,output_devices[i].name);
if(active_receiver->audio_name!=NULL) {
if(strcmp(active_receiver->audio_name,output_devices[i].name)==0) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(output),i);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(output),i);
}
}
- gtk_widget_show(output);
- gtk_grid_attach(GTK_GRID(grid),output,x,++row,1,1);
- g_signal_connect(output,"pressed",G_CALLBACK(local_output_changed_cb),GINT_TO_POINTER(i));
}
+ gtk_grid_attach(GTK_GRID(grid),output,x,++row,1,1);
+ g_signal_connect(output,"changed",G_CALLBACK(local_output_changed_cb),NULL);
row=0;
x++;
}
static void local_input_changed_cb(GtkWidget *widget, gpointer data) {
- int i=GPOINTER_TO_INT(data);
-g_print("local_input_changed_cp: %d\n",i);
-g_print("local_input_changed_cp: %s\n",input_devices[i].name);
+ int i = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+g_print("local_input_changed_cp: %d %s\n",i,input_devices[i].name);
if(transmitter->local_microphone) {
audio_close_input();
}
gtk_grid_attach(GTK_GRID(grid),local_microphone_b,col,row++,2,1);
g_signal_connect(local_microphone_b,"toggled",G_CALLBACK(local_microphone_cb),NULL);
- input=NULL;
+ input=gtk_combo_box_text_new();
for(i=0;i<n_input_devices;i++) {
- input=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(input),input_devices[i].name);
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(input),NULL,input_devices[i].name);
if(transmitter->microphone_name!=NULL) {
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(input),strcmp(transmitter->microphone_name,input_devices[i].name)==0);
+ if(strcmp(transmitter->microphone_name,input_devices[i].name)==0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(input),i);
+ }
}
- gtk_widget_show(input);
- gtk_grid_attach(GTK_GRID(grid),input,col,row++,2,1);
- g_signal_connect(input,"pressed",G_CALLBACK(local_input_changed_cb),(gpointer)(long)i);
}
+
+ gtk_grid_attach(GTK_GRID(grid),input,col,row++,1,1);
+ g_signal_connect(input,"changed",G_CALLBACK(local_input_changed_cb),NULL);
+
+
}
row=saved_row;