summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorRobert Swain <robert.swain@collabora.co.uk>2011-03-18 15:49:12 +0100
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>2011-03-23 16:48:11 -0300
commit6a686316d5194dcdbf66fe7746d1187b0013e3c1 (patch)
tree43c9e457fb1967e769f61730b23b39f7e02976c5 /gst-libs
parentaa7b9628916784ade338bd96ce0f9119a3b88f83 (diff)
downloadgstreamer-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.c19
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h2
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];
};