summaryrefslogtreecommitdiff
path: root/gst-libs/gst/basecamerabinsrc
diff options
context:
space:
mode:
authorYouness Alaoui <youness.alaoui@collabora.co.uk>2012-05-03 20:36:27 -0400
committerSjoerd Simons <sjoerd@luon.net>2013-02-11 22:04:59 +0100
commit381fcda68b079b59f6d68b4f47f24e4885d592ba (patch)
tree032f3b4064326ab9f5fdf8359136fce42ecc1dca /gst-libs/gst/basecamerabinsrc
parentd50abd6186cd79463afcd0deba573c62d3304b54 (diff)
downloadgstreamer-plugins-bad-381fcda68b079b59f6d68b4f47f24e4885d592ba.tar.gz
basecamerabinsrc: Add auto-start property to basecamerabin
Diffstat (limited to 'gst-libs/gst/basecamerabinsrc')
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c20
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h1
2 files changed, 20 insertions, 1 deletions
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
index 0acfeefe4..abc3a4443 100644
--- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
+++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
@@ -87,7 +87,8 @@ enum
PROP_READY_FOR_CAPTURE,
PROP_POST_PREVIEW,
PROP_PREVIEW_CAPS,
- PROP_PREVIEW_FILTER
+ PROP_PREVIEW_FILTER,
+ PROP_AUTO_START
};
enum
@@ -100,6 +101,7 @@ enum
};
#define DEFAULT_POST_PREVIEW TRUE
+#define DEFAULT_AUTO_START FALSE
static guint basecamerasrc_signals[LAST_SIGNAL];
@@ -319,6 +321,9 @@ gst_base_camera_src_set_property (GObject * object,
"Cannot change preview filter, is element in NULL state?");
}
break;
+ case PROP_AUTO_START:
+ self->auto_start = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
break;
@@ -355,6 +360,9 @@ gst_base_camera_src_get_property (GObject * object,
if (self->preview_filter)
g_value_set_object (value, self->preview_filter);
break;
+ case PROP_AUTO_START:
+ g_value_set_boolean (value, self->auto_start);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
break;
@@ -421,6 +429,8 @@ gst_base_camera_src_change_state (GstElement * element,
* messages on the pipeline */
gst_element_set_state (self->preview_pipeline->pipeline,
GST_STATE_PLAYING);
+ if (self->auto_start)
+ g_signal_emit_by_name (G_OBJECT (self), "start-capture", NULL);
break;
default:
break;
@@ -431,6 +441,8 @@ gst_base_camera_src_change_state (GstElement * element,
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_element_set_state (self->preview_pipeline->pipeline, GST_STATE_READY);
+ if (self->auto_start)
+ g_signal_emit_by_name (G_OBJECT (self), "stop-capture", NULL);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
gst_element_set_state (self->preview_pipeline->pipeline, GST_STATE_NULL);
@@ -497,6 +509,11 @@ gst_base_camera_src_class_init (GstBaseCameraSrcClass * klass)
"A custom preview filter to process preview image data",
GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_AUTO_START,
+ g_param_spec_boolean ("auto-start", "Auto start capture",
+ "Automatically starts capture when going to the PAUSED state",
+ DEFAULT_AUTO_START, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
/**
* GstBaseCameraSrc:ready-for-capture:
*
@@ -545,6 +562,7 @@ gst_base_camera_src_init (GstBaseCameraSrc * self)
self->max_zoom = MAX_ZOOM;
self->mode = MODE_IMAGE;
+ self->auto_start = DEFAULT_AUTO_START;
self->capturing = FALSE;
g_mutex_init (&self->capturing_mutex);
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
index 103326c42..1b936638e 100644
--- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
+++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h
@@ -68,6 +68,7 @@ struct _GstBaseCameraSrc
GstCameraBinMode mode;
+ gboolean auto_start;
gboolean capturing;
GMutex capturing_mutex;