comparison libpurple/media.c @ 23836:3bf9748fdef0

Preliminary video embedded in the conversation window. It's still kind of buggy.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Tue, 10 Jun 2008 05:18:29 +0000
parents b5a00ddb7077
children ddbea813862e
comparison
equal deleted inserted replaced
23835:c2231cf3be71 23836:3bf9748fdef0
674 } 674 }
675 675
676 void 676 void
677 purple_media_video_init_src(GstElement **sendbin) 677 purple_media_video_init_src(GstElement **sendbin)
678 { 678 {
679 GstElement *src; 679 GstElement *src, *tee, *queue, *local_sink;
680 GstPad *pad; 680 GstPad *pad;
681 GstPad *ghost; 681 GstPad *ghost;
682 const gchar *video_plugin = purple_prefs_get_string("/purple/media/video/plugin"); 682 const gchar *video_plugin = purple_prefs_get_string("/purple/media/video/plugin");
683 const gchar *video_device = purple_prefs_get_string("/purple/media/video/device"); 683 const gchar *video_device = purple_prefs_get_string("/purple/media/video/device");
684 684
685 purple_debug_info("media", "purple_media_video_init_src\n"); 685 purple_debug_info("media", "purple_media_video_init_src\n");
686 686
687 *sendbin = gst_bin_new("purplesendvideobin"); 687 *sendbin = gst_bin_new("purplesendvideobin");
688 src = gst_element_factory_make(video_plugin, "videosrc"); 688 src = gst_element_factory_make(video_plugin, "purplevideosource");
689 gst_bin_add(GST_BIN(*sendbin), src); 689 gst_bin_add(GST_BIN(*sendbin), src);
690
691 tee = gst_element_factory_make("tee", NULL);
692 gst_bin_add(GST_BIN(*sendbin), tee);
693 gst_element_link(src, tee);
694
695 queue = gst_element_factory_make("queue", NULL);
696 gst_bin_add(GST_BIN(*sendbin), queue);
697 gst_element_link(tee, queue);
690 698
691 if (!strcmp(video_plugin, "videotestsrc")) { 699 if (!strcmp(video_plugin, "videotestsrc")) {
692 /* unless is-live is set to true it doesn't throttle videotestsrc */ 700 /* unless is-live is set to true it doesn't throttle videotestsrc */
693 g_object_set (G_OBJECT(src), "is-live", TRUE, NULL); 701 g_object_set (G_OBJECT(src), "is-live", TRUE, NULL);
694 } 702 }
695 pad = gst_element_get_pad(src, "src"); 703
704 pad = gst_element_get_pad(queue, "src");
696 ghost = gst_ghost_pad_new("ghostsrc", pad); 705 ghost = gst_ghost_pad_new("ghostsrc", pad);
697 gst_element_add_pad(*sendbin, ghost); 706 gst_element_add_pad(*sendbin, ghost);
707
708 queue = gst_element_factory_make("queue", NULL);
709 gst_bin_add(GST_BIN(*sendbin), queue);
710 gst_element_link(tee, queue);
711
712 local_sink = gst_element_factory_make("autovideosink", "purplelocalvideosink");
713 gst_bin_add(GST_BIN(*sendbin), local_sink);
714 gst_element_link(queue, local_sink);
698 715
699 /* set current video device on "src"... */ 716 /* set current video device on "src"... */
700 if (video_device) { 717 if (video_device) {
701 GList *devices = purple_media_get_devices(src); 718 GList *devices = purple_media_get_devices(src);
702 GList *dev = devices; 719 GList *dev = devices;