comparison finch/gntmedia.c @ 26499:02c0a30d2942

Pick better devices in Finch too and have fallbacks.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Fri, 03 Apr 2009 06:46:41 +0000
parents 1147a3b1fb0b
children 28f1512b0f94
comparison
equal deleted inserted replaced
26498:1147a3b1fb0b 26499:02c0a30d2942
419 create_default_audio_src(PurpleMedia *media, 419 create_default_audio_src(PurpleMedia *media,
420 const gchar *session_id, const gchar *participant) 420 const gchar *session_id, const gchar *participant)
421 { 421 {
422 GstElement *bin, *src, *volume; 422 GstElement *bin, *src, *volume;
423 GstPad *pad, *ghost; 423 GstPad *pad, *ghost;
424 const gchar *audio_device = purple_prefs_get_string(
425 "/purple/media/audio/device");
426 double input_volume = purple_prefs_get_int( 424 double input_volume = purple_prefs_get_int(
427 "/finch/media/audio/volume/input")/10.0; 425 "/finch/media/audio/volume/input")/10.0;
428 426
427 src = gst_element_factory_make("gconfaudiosrc", NULL);
428 if (src == NULL)
429 src = gst_element_factory_make("autoaudiosrc", NULL);
430 if (src == NULL)
431 src = gst_element_factory_make("alsasrc", NULL);
432 if (src == NULL)
433 src = gst_element_factory_make("osssrc", NULL);
434 if (src == NULL)
435 src = gst_element_factory_make("dshowaudiosrc", NULL);
436 if (src == NULL) {
437 purple_debug_error("gntmedia", "Unable to find a suitable "
438 "element for the default audio source.\n");
439 return NULL;
440 }
441
429 bin = gst_bin_new("finchdefaultaudiosrc"); 442 bin = gst_bin_new("finchdefaultaudiosrc");
430 src = gst_element_factory_make("alsasrc", "asrc");
431 volume = gst_element_factory_make("volume", "purpleaudioinputvolume"); 443 volume = gst_element_factory_make("volume", "purpleaudioinputvolume");
432 g_object_set(volume, "volume", input_volume, NULL); 444 g_object_set(volume, "volume", input_volume, NULL);
433 gst_bin_add_many(GST_BIN(bin), src, volume, NULL); 445 gst_bin_add_many(GST_BIN(bin), src, volume, NULL);
434 gst_element_link(src, volume); 446 gst_element_link(src, volume);
435 pad = gst_element_get_pad(volume, "src"); 447 pad = gst_element_get_pad(volume, "src");
436 ghost = gst_ghost_pad_new("ghostsrc", pad); 448 ghost = gst_ghost_pad_new("ghostsrc", pad);
437 gst_element_add_pad(bin, ghost); 449 gst_element_add_pad(bin, ghost);
438 450
439 if (audio_device != NULL && strcmp(audio_device, ""))
440 g_object_set(G_OBJECT(src), "device", audio_device, NULL);
441
442 return bin; 451 return bin;
443 } 452 }
444 453
445 static GstElement * 454 static GstElement *
446 create_default_audio_sink(PurpleMedia *media, 455 create_default_audio_sink(PurpleMedia *media,
449 GstElement *bin, *sink, *volume, *queue; 458 GstElement *bin, *sink, *volume, *queue;
450 GstPad *pad, *ghost; 459 GstPad *pad, *ghost;
451 double output_volume = purple_prefs_get_int( 460 double output_volume = purple_prefs_get_int(
452 "/finch/media/audio/volume/output")/10.0; 461 "/finch/media/audio/volume/output")/10.0;
453 462
454 bin = gst_bin_new("pidginrecvaudiobin"); 463 sink = gst_element_factory_make("gconfaudiosink", NULL);
455 sink = gst_element_factory_make("alsasink", "asink"); 464 if (sink == NULL)
465 sink = gst_element_factory_make("autoaudiosink",NULL);
466 if (sink == NULL) {
467 purple_debug_error("gntmedia", "Unable to find a suitable "
468 "element for the default audio sink.\n");
469 return NULL;
470 }
471
472 bin = gst_bin_new("finchdefaultaudiosink");
456 volume = gst_element_factory_make("volume", "purpleaudiooutputvolume"); 473 volume = gst_element_factory_make("volume", "purpleaudiooutputvolume");
457 g_object_set(volume, "volume", output_volume, NULL); 474 g_object_set(volume, "volume", output_volume, NULL);
458 queue = gst_element_factory_make("queue", NULL); 475 queue = gst_element_factory_make("queue", NULL);
459 gst_bin_add_many(GST_BIN(bin), sink, volume, queue, NULL); 476 gst_bin_add_many(GST_BIN(bin), sink, volume, queue, NULL);
460 gst_element_link(volume, sink); 477 gst_element_link(volume, sink);