]> git.0d.be Git - empathy.git/commitdiff
Add framerate and resolution change signal
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Wed, 6 Jul 2011 22:11:28 +0000 (18:11 -0400)
committerSjoerd Simons <sjoerd.simons@collabora.co.uk>
Mon, 7 Nov 2011 20:07:19 +0000 (20:07 +0000)
src/empathy-call-handler.c

index 99054b9def4b6f8e1fb4d58ec32fe3c55e05796e..ef07c503aa0bab49226d59234a6e00a6ee036bb0 100644 (file)
@@ -52,6 +52,8 @@ enum {
   CLOSED,
   CANDIDATES_CHANGED,
   STATE_CHANGED,
+  FRAMERATE_CHANGED,
+  RESOLUTION_CHANGED,
   LAST_SIGNAL
 };
 
@@ -511,6 +513,19 @@ empathy_call_handler_class_init (EmpathyCallHandlerClass *klass)
       G_SIGNAL_RUN_LAST, 0, NULL, NULL,
       g_cclosure_marshal_generic,
       G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING);
+
+  signals[FRAMERATE_CHANGED] =
+    g_signal_new ("framerate-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+      g_cclosure_marshal_generic,
+      G_TYPE_NONE, 1, G_TYPE_UINT);
+
+  signals[RESOLUTION_CHANGED] =
+    g_signal_new ("resolution-changed", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, 0, NULL, NULL,
+      g_cclosure_marshal_generic,
+      G_TYPE_NONE,
+      2, G_TYPE_UINT, G_TYPE_UINT);
 }
 
 EmpathyCallHandler *
@@ -760,6 +775,31 @@ on_tf_content_src_pad_added_cb (TfContent *content,
     g_idle_add (src_pad_added_error_idle, g_object_ref (content));
 }
 
+static void
+on_tf_content_framerate_changed (TfContent *content,
+  GParamSpec *spec,
+  EmpathyCallHandler *handler)
+{
+  guint framerate;
+
+  g_object_get (content, "framerate", &framerate, NULL);
+
+  if (framerate != 0)
+    g_signal_emit (G_OBJECT (handler), signals[FRAMERATE_CHANGED], 0,
+        framerate);
+}
+
+static void
+on_tf_content_resolution_changed (TfContent *content,
+   guint width,
+   guint height,
+   EmpathyCallHandler *handler)
+{
+  if (width > 0 && height > 0)
+    g_signal_emit (G_OBJECT (handler), signals[RESOLUTION_CHANGED], 0,
+        width, height);
+}
+
 static void
 on_tf_channel_content_added_cb (TfChannel *tfchannel,
   TfContent *content,
@@ -812,6 +852,33 @@ on_tf_channel_content_added_cb (TfChannel *tfchannel,
  tp_clear_object (&fs_stream);
 */
 
+ if (mtype == FS_MEDIA_TYPE_VIDEO)
+   {
+     guint framerate, width, height;
+
+     g_signal_connect (content, "notify::framerate",
+         G_CALLBACK (on_tf_content_framerate_changed),
+         handler);
+
+     g_signal_connect (content, "resolution-changed",
+         G_CALLBACK (on_tf_content_resolution_changed),
+         handler);
+
+     g_object_get (content,
+         "framerate", &framerate,
+         "width", &width,
+         "height", &height,
+         NULL);
+
+     if (framerate > 0)
+       g_signal_emit (G_OBJECT (handler), signals[FRAMERATE_CHANGED], 0,
+           framerate);
+
+     if (width > 0 && height > 0)
+       g_signal_emit (G_OBJECT (handler), signals[RESOLUTION_CHANGED], 0,
+           width, height);
+   }
+
  gst_object_unref (spad);
 }