summaryrefslogtreecommitdiff
path: root/ext/gtk/gstgtkglsink.c
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2015-06-15 18:28:37 +1000
committerMatthew Waters <matthew@centricular.com>2015-06-15 22:39:07 +1000
commit64f3446907e0f50badd4afc6f077fea247d73b87 (patch)
tree4eb7d8277848452fb99ea21893e3c01c1150a7d7 /ext/gtk/gstgtkglsink.c
parentf2617ee0ee9fd529ab4f7a72cf0fe54c92e4366c (diff)
downloadgstreamer-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.c22
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;