[empathy] When reset the source remove and re-insert it
- From: Sjoerd Simons <sjoerds src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy] When reset the source remove and re-insert it
- Date: Mon, 7 Nov 2011 20:08:30 +0000 (UTC)
commit 7577ba45e2046a19caac1b360901669d12e0f3d1
Author: Sjoerd Simons <sjoerd simons collabora co uk>
Date: Fri Nov 4 18:46:24 2011 +0000
When reset the source remove and re-insert it
Setting an element to NULL resets various internal values (the clock,
the base time etc). To make sure everything is reset as expected simply
yank it from the bin and re-insert it (which will reset the values)
src/empathy-video-src.c | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
---
diff --git a/src/empathy-video-src.c b/src/empathy-video-src.c
index e284211..23b4dca 100644
--- a/src/empathy-video-src.c
+++ b/src/empathy-video-src.c
@@ -444,13 +444,20 @@ empathy_video_src_set_resolution (GstElement *src,
{
EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (src);
GstCaps *caps;
- GstClock *gst_clock;
+ GstPad *srcpad, *peer;
g_return_if_fail (priv->capsfilter != NULL);
gst_element_set_locked_state (priv->src, TRUE);
gst_element_set_state (priv->src, GST_STATE_NULL);
+ srcpad = gst_element_get_static_pad (priv->src, "src");
+ peer = gst_pad_get_peer (srcpad);
+
+ /* Keep a ref as removing it from the bin will loose our reference */
+ gst_object_ref (priv->src);
+ gst_bin_remove (GST_BIN (src), priv->src);
+
g_object_get (priv->capsfilter, "caps", &caps, NULL);
caps = gst_caps_make_writable (caps);
@@ -461,13 +468,15 @@ empathy_video_src_set_resolution (GstElement *src,
g_object_set (priv->capsfilter, "caps", caps, NULL);
- /* Reset clock an base time, this is require for videotestsrc and hopefully
- * has no side effect */
- gst_clock = gst_element_get_clock (src);
- gst_element_set_clock (priv->src, gst_clock);
- gst_element_set_base_time (priv->src, gst_element_get_base_time (src));
- gst_object_unref (gst_clock);
+ gst_bin_add (GST_BIN (src), priv->src);
+ /* We as the bin own the source again, so drop the temporary ref */
+ gst_object_unref (priv->src);
+
+ gst_pad_link (srcpad, peer);
gst_element_set_locked_state (priv->src, FALSE);
gst_element_sync_state_with_parent (priv->src);
+
+ gst_object_unref (srcpad);
+ gst_object_unref (peer);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]