]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-video-widget.c
Updated Oriya Translation
[empathy.git] / libempathy-gtk / empathy-video-widget.c
index 5b76257f41a3ba6460980463df4a2446a687281b..0f62496decc915c2b6ceab0847834570ea3a6457 100644 (file)
@@ -103,13 +103,47 @@ static void
 empathy_video_widget_constructed (GObject *object)
 {
   EmpathyVideoWidgetPriv *priv = GET_PRIV (object);
+  GstElement *colorspace, *videoscale, *sink;
+  GstPad *pad;
+
+  priv->videosink = gst_bin_new (NULL);
 
-  priv->videosink = gst_element_factory_make ("gconfvideosink", NULL);
   gst_object_ref (priv->videosink);
   gst_object_sink (priv->videosink);
 
   priv->sink_pad = gst_element_get_static_pad (priv->videosink, "sink");
 
+  sink = gst_element_factory_make ("gconfvideosink", NULL);
+  g_assert (sink != NULL);
+
+  videoscale = gst_element_factory_make ("videoscale", NULL);
+  g_assert (videoscale != NULL);
+
+  g_object_set (videoscale, "qos", FALSE, NULL);
+
+  colorspace = gst_element_factory_make ("ffmpegcolorspace", NULL);
+  g_assert (colorspace != NULL);
+
+  g_object_set (colorspace, "qos", FALSE, NULL);
+
+  gst_bin_add_many (GST_BIN (priv->videosink), colorspace, videoscale,
+    sink, NULL);
+
+  if (!gst_element_link (colorspace, videoscale))
+    g_error ("Failed to link ffmpegcolorspace and videoscale");
+
+  if (!gst_element_link (videoscale, sink))
+    g_error ("Failed to link videoscale and gconfvideosink");
+
+  pad = gst_element_get_static_pad (colorspace, "sink");
+  g_assert (pad != NULL);
+
+  priv->sink_pad = gst_ghost_pad_new ("sink", pad);
+  if (!gst_element_add_pad  (priv->videosink, priv->sink_pad))
+    g_error ("Couldn't add sink ghostpad to the bin");
+
+  gst_object_unref (pad);
+
   fs_element_added_notifier_add (priv->notifier, GST_BIN (priv->videosink));
   gst_bus_enable_sync_message_emission (priv->bus);
 
@@ -229,14 +263,14 @@ empathy_video_widget_class_init (
   param_spec = g_param_spec_int ("min-width",
     "min-width",
     "Minimal width of the widget",
-    0, G_MAXINT, 320,
+    0, G_MAXINT, EMPATHY_VIDEO_WIDGET_DEFAULT_WIDTH,
     G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_MIN_WIDTH, param_spec);
 
   param_spec = g_param_spec_int ("min-height",
     "min-height",
     "Minimal height of the widget",
-    0, G_MAXINT, 240,
+    0, G_MAXINT, EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT,
     G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
   g_object_class_install_property (object_class, PROP_MIN_HEIGHT, param_spec);
 
@@ -266,6 +300,9 @@ empathy_video_widget_dispose (GObject *object)
 
   priv->dispose_has_run = TRUE;
 
+  g_signal_handlers_disconnect_by_func (priv->bus,
+    empathy_video_widget_sync_message_cb, object);
+
   if (priv->bus != NULL)
     g_object_unref (priv->bus);
 
@@ -366,7 +403,7 @@ empathy_video_widget_sync_message_cb (GstBus *bus, GstMessage *message,
     {
       g_assert (GTK_WIDGET_REALIZED (GTK_WIDGET (self)));
       gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (priv->overlay),
-        GDK_WINDOW_XID (GTK_WIDGET (self)->window));
+        GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (self))));
     }
 }
 
@@ -381,13 +418,13 @@ empathy_video_widget_expose_event (GtkWidget *widget, GdkEventExpose *event)
 
   if (priv->overlay == NULL)
     {
-      gdk_window_clear_area (widget->window, 0, 0,
+      gdk_window_clear_area (gtk_widget_get_window (widget), 0, 0,
         widget->allocation.width, widget->allocation.height);
       return TRUE;
     }
 
   gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (priv->overlay),
-    GDK_WINDOW_XID (widget->window));
+    GDK_WINDOW_XID (gtk_widget_get_window (widget)));
 
   gst_x_overlay_expose (GST_X_OVERLAY (priv->overlay));