diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2015-07-17 13:05:05 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2015-07-17 15:40:22 -0400 |
commit | d0fd6a0b0ba2925e7d1a228a3f67fae6a5073cad (patch) | |
tree | c28dcca7fb520f5890b485b7064d44d9fe7da3f9 /ext/gtk | |
parent | 785b7bd8e457a29c3c8caf74b63b382165247c37 (diff) | |
download | gstreamer-plugins-bad-d0fd6a0b0ba2925e7d1a228a3f67fae6a5073cad.tar.gz |
gtkgstbasewidget: Pass already parsed VideoInfo
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
Diffstat (limited to 'ext/gtk')
-rw-r--r-- | ext/gtk/gstgtkbasesink.c | 2 | ||||
-rw-r--r-- | ext/gtk/gtkgstbasewidget.c | 19 | ||||
-rw-r--r-- | ext/gtk/gtkgstbasewidget.h | 3 |
3 files changed, 10 insertions, 14 deletions
diff --git a/ext/gtk/gstgtkbasesink.c b/ext/gtk/gstgtkbasesink.c index f6aa195cd..6fd70b022 100644 --- a/ext/gtk/gstgtkbasesink.c +++ b/ext/gtk/gstgtkbasesink.c @@ -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, >k_sink->v_info)) return FALSE; GST_OBJECT_UNLOCK (gtk_sink); diff --git a/ext/gtk/gtkgstbasewidget.c b/ext/gtk/gtkgstbasewidget.c index 972541ff7..1fd76b3c4 100644 --- a/ext/gtk/gtkgstbasewidget.c +++ b/ext/gtk/gtkgstbasewidget.c @@ -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; diff --git a/ext/gtk/gtkgstbasewidget.h b/ext/gtk/gtkgstbasewidget.h index e4242f192..e39f25b7a 100644 --- a/ext/gtk/gtkgstbasewidget.h +++ b/ext/gtk/gtkgstbasewidget.h @@ -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 |