Mercurial > pidgin.yaz
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); |