# HG changeset patch # User Mike Ruprecht # Date 1235628531 0 # Node ID 7acca8d514212afb178032e676dd8b3e2b60e558 # Parent 20c16e29f364f7f9d3262f84a4ee570eff5df4ac Limit the size and framerate of the video source. diff -r 20c16e29f364 -r 7acca8d51421 libpurple/media.c --- a/libpurple/media.c Wed Feb 25 09:20:20 2009 +0000 +++ b/libpurple/media.c Thu Feb 26 06:08:51 2009 +0000 @@ -1606,9 +1606,10 @@ void purple_media_video_init_src(GstElement **sendbin) { - GstElement *src; + GstElement *src, *videoscale, *capsfilter; GstPad *pad; GstPad *ghost; + GstCaps *caps; const gchar *video_plugin = purple_prefs_get_string( "/purple/media/video/plugin"); const gchar *video_device = purple_prefs_get_string( @@ -1618,14 +1619,23 @@ *sendbin = gst_bin_new("purplesendvideobin"); src = gst_element_factory_make(video_plugin, "purplevideosource"); - gst_bin_add(GST_BIN(*sendbin), src); + videoscale = gst_element_factory_make("videoscale", NULL); + capsfilter = gst_element_factory_make("capsfilter", NULL); + + /* It was recommended to set the size < 352x288 and framerate < 20 */ + caps = gst_caps_from_string("video/x-raw-yuv , width=[250,350] , " + "height=[200,275] , framerate=[10/1,20/1]"); + g_object_set(G_OBJECT(capsfilter), "caps", caps, NULL); + + gst_bin_add_many(GST_BIN(*sendbin), src, videoscale, capsfilter, NULL); + gst_element_link_many(src, videoscale, capsfilter, NULL); if (!strcmp(video_plugin, "videotestsrc")) { /* unless is-live is set to true it doesn't throttle videotestsrc */ g_object_set (G_OBJECT(src), "is-live", TRUE, NULL); } - pad = gst_element_get_static_pad(src, "src"); + pad = gst_element_get_static_pad(capsfilter, "src"); ghost = gst_ghost_pad_new("ghostsrc", pad); gst_object_unref(pad); gst_element_add_pad(*sendbin, ghost);