g_return_val_if_fail (bclass->set_mode, FALSE);
- return bclass->set_mode (self, mode);
+ if (bclass->set_mode (self, mode)) {
+ self->mode = mode;
+ return TRUE;
+ }
+ return FALSE;
}
/**
GstBaseCameraSrc *self = GST_BASE_CAMERA_SRC (object);
switch (prop_id) {
+ case ARG_MODE:
+ gst_base_camera_src_set_mode (GST_BASE_CAMERA_SRC (self),
+ g_value_get_enum (value));
+ break;
case ARG_ZOOM:{
g_atomic_int_set (&self->zoom, g_value_get_int (value));
/* does not set it if in NULL, the src is not created yet */
GstBaseCameraSrc *self = GST_BASE_CAMERA_SRC (object);
switch (prop_id) {
+ case ARG_MODE:
+ g_value_set_enum (value, self->mode);
+ break;
case ARG_ZOOM:
g_value_set_int (value, g_atomic_int_get (&self->zoom));
break;
gobject_class->get_property = gst_base_camera_src_get_property;
// g_object_class_install_property ....
+ g_object_class_install_property (gobject_class, ARG_MODE,
+ g_param_spec_enum ("mode", "Mode",
+ "The capture mode (still image capture or video recording)",
+ GST_TYPE_CAMERABIN_MODE, MODE_IMAGE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gstelement_class->change_state = gst_base_camera_src_change_state;
self->zoom = DEFAULT_ZOOM;
self->image_capture_width = 0;
self->image_capture_height = 0;
+ self->mode = MODE_IMAGE;
self->night_mode = FALSE;
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_BASE_CAMERA_SRC))
#define GST_IS_BASE_CAMERA_SRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_BASE_CAMERA_SRC))
- GType gst_base_camera_src_get_type (void);
+#define GST_BASE_CAMERA_SRC_CAST(obj) \
+ ((GstBaseCameraSrc *) (obj))
+GType gst_base_camera_src_get_type (void);
typedef struct _GstBaseCameraSrc GstBaseCameraSrc;
typedef struct _GstBaseCameraSrcClass GstBaseCameraSrcClass;
GstPad *imgsrc;
GstPad *vidsrc;
+ gint mode;
+
/* XXX preview pads? */
/* Resolution of the buffers configured to camerabin */
GstV4l2CameraSrc *self = GST_V4L2_CAMERA_SRC (object);
switch (prop_id) {
- case ARG_MODE:
- gst_base_camera_src_set_mode (GST_BASE_CAMERA_SRC (self),
- g_value_get_enum (value));
- break;
case ARG_FILTER_CAPS:
GST_OBJECT_LOCK (self);
gst_caps_replace (&self->view_finder_caps,
GstV4l2CameraSrc *self = GST_V4L2_CAMERA_SRC (object);
switch (prop_id) {
- case ARG_MODE:
- g_value_set_enum (value, self->mode);
- break;
case ARG_READY_FOR_CAPTURE:
g_value_set_boolean (value, !self->capturing);
break;
static gboolean
gst_v4l2_camera_src_set_mode (GstBaseCameraSrc * bcamsrc, GstCameraBinMode mode)
{
- GstV4l2CameraSrc *self = GST_V4L2_CAMERA_SRC (bcamsrc);
GstPhotography *photography = gst_base_camera_src_get_photography (bcamsrc);
if (photography) {
g_object_set (G_OBJECT (photography), "capture-mode", mode, NULL);
}
}
-
- self->mode = mode;
return TRUE;
}
static void
gst_v4l2_camera_src_start_capture (GstV4l2CameraSrc * src)
{
+ GstBaseCameraSrc *camerasrc = GST_BASE_CAMERA_SRC_CAST (src);
g_mutex_lock (src->capturing_mutex);
if (src->capturing) {
GST_WARNING_OBJECT (src, "Capturing already ongoing");
}
src->capturing = TRUE;
- if (src->mode == MODE_IMAGE) {
+ /* TODO should we use a macro? */
+ if (camerasrc->mode == MODE_IMAGE) {
src->image_capture_count = 1;
start_image_capture (src);
- } else if (src->mode == MODE_VIDEO) {
+ } else if (camerasrc->mode == MODE_VIDEO) {
if (src->video_rec_status == GST_VIDEO_RECORDING_STATUS_DONE) {
src->video_rec_status = GST_VIDEO_RECORDING_STATUS_STARTING;
}
static void
gst_v4l2_camera_src_stop_capture (GstV4l2CameraSrc * src)
{
+ GstBaseCameraSrc *camerasrc = GST_BASE_CAMERA_SRC_CAST (src);
g_mutex_lock (src->capturing_mutex);
if (!src->capturing) {
GST_DEBUG_OBJECT (src, "No ongoing capture");
g_mutex_unlock (src->capturing_mutex);
return;
}
- if (src->mode == MODE_VIDEO) {
+ if (camerasrc->mode == MODE_VIDEO) {
if (src->video_rec_status == GST_VIDEO_RECORDING_STATUS_STARTING) {
GST_DEBUG_OBJECT (src, "Aborting, had not started recording");
src->video_rec_status = GST_VIDEO_RECORDING_STATUS_DONE;
gobject_class->get_property = gst_v4l2_camera_src_get_property;
/* g_object_class_install_property .... */
- g_object_class_install_property (gobject_class, ARG_MODE,
- g_param_spec_enum ("mode", "Mode",
- "The capture mode (still image capture or video recording)",
- GST_TYPE_CAMERABIN_MODE, MODE_IMAGE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
* GstV4l2CameraSrc:ready-for-capture:
GstV4l2CameraSrcClass * klass)
{
/* TODO where are variables reset? */
- self->mode = MODE_IMAGE;
self->image_capture_count = 0;
self->video_rec_status = GST_VIDEO_RECORDING_STATUS_DONE;
self->capturing_mutex = g_mutex_new ();