Mercurial > pidgin.yaz
diff pidgin/gtkmedia.c @ 26013:5a774d0817d8
Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
This will make codecs that need extra configuration, such as THEORA and
H264, work consistently.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Fri, 05 Sep 2008 02:18:15 +0000 |
parents | ba609f368dc8 |
children | bd598b606ca4 |
line wrap: on
line diff
--- a/pidgin/gtkmedia.c Tue Sep 02 08:04:04 2008 +0000 +++ b/pidgin/gtkmedia.c Fri Sep 05 02:18:15 2008 +0000 @@ -314,18 +314,18 @@ if (!audiosendbin && (type & PURPLE_MEDIA_SEND_AUDIO)) { purple_media_audio_init_src(&audiosendbin, &audiosendlevel); purple_media_set_src(media, sessions->data, audiosendbin); - gst_element_set_state(audiosendbin, GST_STATE_READY); + gst_element_set_state(audiosendbin, GST_STATE_PLAYING); } if (!audiorecvbin && (type & PURPLE_MEDIA_RECV_AUDIO)) { purple_media_audio_init_recv(&audiorecvbin, &audiorecvlevel); purple_media_set_sink(media, sessions->data, audiorecvbin); gst_element_set_state(audiorecvbin, GST_STATE_READY); } - } else if (purple_media_get_session_type(media, sessions->data) & PURPLE_MEDIA_VIDEO) { + } else if (type & PURPLE_MEDIA_VIDEO) { if (!videosendbin && (type & PURPLE_MEDIA_SEND_VIDEO)) { purple_media_video_init_src(&videosendbin); purple_media_set_src(media, sessions->data, videosendbin); - gst_element_set_state(videosendbin, GST_STATE_READY); + gst_element_set_state(videosendbin, GST_STATE_PLAYING); } if (!videorecvbin && (type & PURPLE_MEDIA_RECV_VIDEO)) { purple_media_video_init_recv(&videorecvbin); @@ -401,6 +401,7 @@ if (videosendbin) { GtkWidget *aspect; GtkWidget *local_video; + GstElement *tee, *queue; aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE); gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN); @@ -414,7 +415,11 @@ gtkmedia->priv->local_video = local_video; - gst_element_set_state(videosendbin, GST_STATE_PLAYING); + tee = gst_bin_get_by_name(GST_BIN(videosendbin), "purplevideosrctee"); + queue = gst_bin_get_by_name(GST_BIN(videosendbin), "purplelocalvideoqueue"); + gst_element_link(tee, queue); + gst_object_unref(tee); + gst_object_unref(queue); } if (audiorecvbin) { @@ -435,7 +440,6 @@ gtk_box_pack_end(GTK_BOX(send_widget), gtkmedia->priv->send_progress, FALSE, FALSE, 0); gtk_widget_show(gtkmedia->priv->send_progress); - gst_element_set_state(audiosendbin, GST_STATE_PLAYING); gtk_widget_show(gtkmedia->priv->mute); }