gtkgstbasewidget: Pass already parsed VideoInfo
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 17 Jul 2015 17:05:05 +0000 (13:05 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 17 Jul 2015 19:40:22 +0000 (15:40 -0400)
As the base sink already parse the caps into VideoInfo it
makes sense to pass in VideoInfo to the widget instead.

https://bugzilla.gnome.org/show_bug.cgi?id=752441

ext/gtk/gstgtkbasesink.c
ext/gtk/gtkgstbasewidget.c
ext/gtk/gtkgstbasewidget.h

index f6aa195..6fd70b0 100644 (file)
@@ -330,7 +330,7 @@ gst_gtk_base_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
     return FALSE;
   }
 
-  if (!gtk_gst_base_widget_set_caps (gtk_sink->widget, caps))
+  if (!gtk_gst_base_widget_set_format (gtk_sink->widget, &gtk_sink->v_info))
     return FALSE;
 
   GST_OBJECT_UNLOCK (gtk_sink);
index 972541f..1fd76b3 100644 (file)
@@ -258,22 +258,20 @@ gtk_gst_base_widget_finalize (GObject * object)
 }
 
 gboolean
-gtk_gst_base_widget_set_caps (GtkGstBaseWidget * widget, GstCaps * caps)
+gtk_gst_base_widget_set_format (GtkGstBaseWidget * widget,
+    GstVideoInfo * v_info)
 {
-  GstVideoInfo v_info;
+  GTK_GST_BASE_WIDGET_LOCK (widget);
 
-  if (widget->caps && gst_caps_is_equal_fixed (widget->caps, caps))
+  if (gst_video_info_is_equal (&widget->v_info, v_info)) {
+    GTK_GST_BASE_WIDGET_UNLOCK (widget);
     return TRUE;
-
-  if (!gst_video_info_from_caps (&v_info, caps))
-    return FALSE;
-
-  GTK_GST_BASE_WIDGET_LOCK (widget);
+  }
 
   /* FIXME this will cause black frame to be displayed, move this in the
    * _queue_resize callback passing over the video info */
 
-  if (!_calculate_par (widget, &v_info)) {
+  if (!_calculate_par (widget, v_info)) {
     GTK_GST_BASE_WIDGET_UNLOCK (widget);
     return FALSE;
   }
@@ -282,8 +280,7 @@ gtk_gst_base_widget_set_caps (GtkGstBaseWidget * widget, GstCaps * caps)
     widget->reset (widget);
 
   gst_buffer_replace (&widget->buffer, NULL);
-  gst_caps_replace (&widget->caps, caps);
-  widget->v_info = v_info;
+  widget->v_info = *v_info;
   widget->negotiated = TRUE;
   widget->new_buffer = TRUE;
 
index e4242f1..e39f25b 100644 (file)
@@ -62,7 +62,6 @@ struct _GtkGstBaseWidget
 
   /*< private >*/
   GMutex lock;
-  GstCaps *caps;
 
   /* Pending queued idles callback */
   guint draw_id;
@@ -86,7 +85,7 @@ void            gtk_gst_base_widget_init                 (GtkGstBaseWidget * wid
 void            gtk_gst_base_widget_finalize             (GObject * object);
 
 /* API */
-gboolean        gtk_gst_base_widget_set_caps             (GtkGstBaseWidget * widget, GstCaps *caps);
+gboolean        gtk_gst_base_widget_set_format           (GtkGstBaseWidget * widget, GstVideoInfo *v_info);
 void            gtk_gst_base_widget_set_buffer           (GtkGstBaseWidget * widget, GstBuffer *buffer);
 
 G_END_DECLS