diff options
author | Robert Swain <robert.swain@collabora.co.uk> | 2011-03-18 15:49:12 +0100 |
---|---|---|
committer | Thiago Santos <thiago.sousa.santos@collabora.co.uk> | 2011-03-23 16:48:11 -0300 |
commit | 6a686316d5194dcdbf66fe7746d1187b0013e3c1 (patch) | |
tree | 43c9e457fb1967e769f61730b23b39f7e02976c5 /gst-libs | |
parent | aa7b9628916784ade338bd96ce0f9119a3b88f83 (diff) | |
download | gstreamer-plugins-bad-6a686316d5194dcdbf66fe7746d1187b0013e3c1.tar.gz |
basecamerasrc: camerabin2: wrappercamerabinsrc: Add read-only max-zoom prop
This is not implemented in any of our real sources to which wrappercamerabinsrc
might connect but this is optional and can be implemented at any time. A
limit on the software zoom level using video{crop,scale} would be arbitrary.
Diffstat (limited to 'gst-libs')
-rw-r--r-- | gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c | 19 | ||||
-rw-r--r-- | gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h | 2 |
2 files changed, 19 insertions, 2 deletions
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c index 0138c8231..b2ae99298 100644 --- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c +++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c @@ -61,6 +61,7 @@ enum PROP_0, PROP_MODE, PROP_ZOOM, + PROP_MAX_ZOOM, PROP_READY_FOR_CAPTURE, PROP_POST_PREVIEW, PROP_PREVIEW_CAPS, @@ -338,6 +339,12 @@ gst_base_camera_src_set_property (GObject * object, break; case PROP_ZOOM:{ self->zoom = g_value_get_float (value); + /* limit to max-zoom */ + if (self->zoom > self->max_zoom) { + GST_DEBUG_OBJECT (self, "Clipping zoom %f to max-zoom %f", self->zoom, + self->max_zoom); + self->zoom = self->max_zoom; + } /* does not set it if in NULL, the src is not created yet */ if (GST_STATE (self) != GST_STATE_NULL) gst_base_camera_src_setup_zoom (self); @@ -385,6 +392,9 @@ gst_base_camera_src_get_property (GObject * object, case PROP_ZOOM: g_value_set_float (value, self->zoom); break; + case PROP_MAX_ZOOM: + g_value_set_float (value, self->max_zoom); + break; case PROP_POST_PREVIEW: g_value_set_boolean (value, self->post_preview); break; @@ -530,9 +540,15 @@ gst_base_camera_src_class_init (GstBaseCameraSrcClass * klass) g_object_class_install_property (gobject_class, PROP_ZOOM, g_param_spec_float ("zoom", "Zoom", - "Digital zoom factor (e.g. 1.5 means 1.5x)", MIN_ZOOM, MAX_ZOOM, + "Digital zoom factor (e.g. 1.5 means 1.5x)", MIN_ZOOM, G_MAXFLOAT, DEFAULT_ZOOM, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_MAX_ZOOM, + g_param_spec_float ("max-zoom", "Maximum zoom level (note: may change " + "depending on resolution/implementation)", + "Digital zoom factor (e.g. 1.5 means 1.5x)", MIN_ZOOM, G_MAXFLOAT, + MAX_ZOOM, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + /** * GstBaseCameraSrc:post-previews: * @@ -603,6 +619,7 @@ gst_base_camera_src_init (GstBaseCameraSrc * self, self->width = DEFAULT_WIDTH; self->height = DEFAULT_HEIGHT; self->zoom = DEFAULT_ZOOM; + self->max_zoom = MAX_ZOOM; self->mode = MODE_IMAGE; self->capturing = FALSE; diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h index b48628f05..c433b6694 100644 --- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h +++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h @@ -78,8 +78,8 @@ struct _GstBaseCameraSrc gint width; gint height; - /* The digital zoom (from 100% to 1000%) */ gfloat zoom; + gfloat max_zoom; gpointer _gst_reserved[GST_PADDING_LARGE]; }; |