diff options
author | Matthew Waters <matthew@centricular.com> | 2015-06-15 18:28:37 +1000 |
---|---|---|
committer | Matthew Waters <matthew@centricular.com> | 2015-06-15 22:39:07 +1000 |
commit | 64f3446907e0f50badd4afc6f077fea247d73b87 (patch) | |
tree | 4eb7d8277848452fb99ea21893e3c01c1150a7d7 /ext/gtk/gstgtkglsink.c | |
parent | f2617ee0ee9fd529ab4f7a72cf0fe54c92e4366c (diff) | |
download | gstreamer-plugins-bad-64f3446907e0f50badd4afc6f077fea247d73b87.tar.gz |
gtk: implement pixel and display aspect ratio handling
Diffstat (limited to 'ext/gtk/gstgtkglsink.c')
-rw-r--r-- | ext/gtk/gstgtkglsink.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/ext/gtk/gstgtkglsink.c b/ext/gtk/gstgtkglsink.c index 372846f0e..660bf0359 100644 --- a/ext/gtk/gstgtkglsink.c +++ b/ext/gtk/gstgtkglsink.c @@ -33,6 +33,8 @@ GST_DEBUG_CATEGORY (gst_debug_gtk_gl_sink); #define GST_CAT_DEFAULT gst_debug_gtk_gl_sink #define DEFAULT_FORCE_ASPECT_RATIO TRUE +#define DEFAULT_PAR_N 0 +#define DEFAULT_PAR_D 1 static void gst_gtk_gl_sink_finalize (GObject * object); static void gst_gtk_gl_sink_set_property (GObject * object, guint prop_id, @@ -67,6 +69,7 @@ enum PROP_0, PROP_WIDGET, PROP_FORCE_ASPECT_RATIO, + PROP_PIXEL_ASPECT_RATIO, }; enum @@ -112,6 +115,11 @@ gst_gtk_gl_sink_class_init (GstGtkGLSinkClass * klass) DEFAULT_FORCE_ASPECT_RATIO, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_PIXEL_ASPECT_RATIO, + gst_param_spec_fraction ("pixel-aspect-ratio", "Pixel Aspect Ratio", + "The pixel aspect ratio of the device", DEFAULT_PAR_N, DEFAULT_PAR_D, + G_MAXINT, 1, 1, 1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&gst_gtk_gl_sink_template)); @@ -131,6 +139,8 @@ static void gst_gtk_gl_sink_init (GstGtkGLSink * gtk_sink) { gtk_sink->force_aspect_ratio = DEFAULT_FORCE_ASPECT_RATIO; + gtk_sink->par_n = DEFAULT_PAR_N; + gtk_sink->par_d = DEFAULT_PAR_D; } static void @@ -157,9 +167,12 @@ gst_gtk_gl_sink_get_widget (GstGtkGLSink * gtk_sink) } gtk_sink->widget = (GtkGstGLWidget *) gtk_gst_gl_widget_new (); - gtk_sink->bind_aspect_ratio = + gtk_sink->bind_force_aspect_ratio = g_object_bind_property (gtk_sink, "force-aspect-ratio", gtk_sink->widget, "force-aspect-ratio", G_BINDING_BIDIRECTIONAL); + gtk_sink->bind_pixel_aspect_ratio = + g_object_bind_property (gtk_sink, "pixel-aspect-ratio", gtk_sink->widget, + "pixel-aspect-ratio", G_BINDING_BIDIRECTIONAL); /* Take the floating ref, otherwise the destruction of the container will * make this widget disapear possibly before we are done. */ @@ -183,6 +196,9 @@ gst_gtk_gl_sink_get_property (GObject * object, guint prop_id, case PROP_FORCE_ASPECT_RATIO: g_value_set_boolean (value, gtk_sink->force_aspect_ratio); break; + case PROP_PIXEL_ASPECT_RATIO: + gst_value_set_fraction (value, gtk_sink->par_n, gtk_sink->par_d); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -199,6 +215,10 @@ gst_gtk_gl_sink_set_property (GObject * object, guint prop_id, case PROP_FORCE_ASPECT_RATIO: gtk_sink->force_aspect_ratio = g_value_get_boolean (value); break; + case PROP_PIXEL_ASPECT_RATIO: + gtk_sink->par_n = gst_value_get_fraction_numerator (value); + gtk_sink->par_d = gst_value_get_fraction_denominator (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; |