static GstStateChangeReturn gst_base_camera_src_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstBaseCameraBinSrc *self = GST_BASE_CAMERA_SRC (element); GST_DEBUG_OBJECT (self, "%d -> %d", GST_STATE_TRANSITION_CURRENT (transition), GST_STATE_TRANSITION_NEXT (transition)); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: if (!construct_pipeline (self)) return GST_STATE_CHANGE_FAILURE; /* recreate the preview pipeline */ if (self->preview_pipeline && self->preview_filter_changed) { gst_camerabin_destroy_preview_pipeline (self->preview_pipeline); self->preview_pipeline = NULL; } if (self->preview_pipeline == NULL) self->preview_pipeline = gst_camerabin_create_preview_pipeline (GST_ELEMENT_CAST (self), self->preview_filter); g_assert (self->preview_pipeline != NULL); self->preview_filter_changed = FALSE; if (self->preview_caps) { GST_DEBUG_OBJECT (self, "Setting preview pipeline caps %" GST_PTR_FORMAT, self->preview_caps); gst_camerabin_preview_set_caps (self->preview_pipeline, self->preview_caps); } break; case GST_STATE_CHANGE_READY_TO_PAUSED: if (!setup_pipeline (self)) return GST_STATE_CHANGE_FAILURE; gst_element_set_state (self->preview_pipeline->pipeline, GST_STATE_PLAYING); break; default: break; } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); switch (transition) { case GST_STATE_CHANGE_READY_TO_NULL: gst_element_set_state (self->preview_pipeline->pipeline, GST_STATE_NULL); break; default: break; } return ret; }
static void 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; g_mutex_init (&self->capturing_mutex); self->post_preview = DEFAULT_POST_PREVIEW; self->preview_caps = gst_caps_new_any (); self->preview_pipeline = gst_camerabin_create_preview_pipeline (GST_ELEMENT_CAST (self), NULL); }
static void gst_base_camera_src_init (GstBaseCameraSrc * self, GstBaseCameraSrcClass * klass) { self->width = DEFAULT_WIDTH; self->height = DEFAULT_HEIGHT; self->zoom = DEFAULT_ZOOM; self->max_zoom = MAX_ZOOM; self->mode = MODE_IMAGE; self->auto_start = DEFAULT_AUTO_START; self->capturing = FALSE; self->capturing_mutex = g_mutex_new (); self->post_preview = DEFAULT_POST_PREVIEW; self->preview_pipeline = gst_camerabin_create_preview_pipeline (GST_ELEMENT_CAST (self), NULL); }