--- a/libpurple/media/backend-fs2.c Thu Jul 18 18:28:29 2019 +0000
+++ b/libpurple/media/backend-fs2.c Tue Jul 16 16:23:48 2019 +0200
@@ -2127,16 +2127,11 @@
if (codec->media_type == FS_MEDIA_TYPE_AUDIO) {
double output_volume = purple_prefs_get_int(
"/purple/media/audio/volume/output")/10.0;
- * Should this instead be:
- * audioconvert ! audioresample ! liveadder !
- * audioresample ! audioconvert ! realsink
stream->queue = gst_element_factory_make("queue", NULL);
stream->volume = gst_element_factory_make("volume", NULL);
g_object_set(stream->volume, "volume", output_volume, NULL);
stream->level = gst_element_factory_make("level", NULL);
- stream->src = gst_element_factory_make("liveadder", NULL);
+ stream->src = gst_element_factory_make("audiomixer", NULL); g_object_set(stream->src, "start-time-selection", 1, NULL);
sink = purple_media_manager_get_element(
purple_media_get_manager(priv->media),
@@ -2188,6 +2183,36 @@
gst_element_set_state(stream->tee, GST_STATE_PLAYING);
gst_element_set_state(stream->src, GST_STATE_PLAYING);
gst_element_link_many(stream->src, stream->tee, sink, NULL);
+ if (codec->media_type == FS_MEDIA_TYPE_AUDIO) { + GstElement *convert, *resample, *capsfilter; + /* The audiomixer element requires that all input + * streams have the same rate, so resample if + sinkpad = gst_element_get_static_pad (stream->src, "src"); + caps = gst_pad_get_current_caps (sinkpad); + convert = gst_element_factory_make("audioconvert", NULL); + resample = gst_element_factory_make("audioresample", NULL); + capsfilter = gst_element_factory_make("capsfilter", NULL); + gst_bin_add_many(GST_BIN(priv->confbin), convert, + resample, capsfilter, NULL); + gst_element_link_many(gst_pad_get_parent_element (srcpad), + convert, resample, capsfilter, NULL); + g_object_set (capsfilter, "caps", caps, NULL); + gst_element_set_state (convert, GST_STATE_PLAYING); + gst_element_set_state (resample, GST_STATE_PLAYING); + gst_element_set_state (capsfilter, GST_STATE_PLAYING); + srcpad = gst_element_get_static_pad (capsfilter, "src"); + gst_object_unref (sinkpad); + gst_object_unref (caps); #if GST_CHECK_VERSION(1,0,0)