summaryrefslogtreecommitdiffstats
path: root/gst/camerabin
diff options
context:
space:
mode:
Diffstat (limited to 'gst/camerabin')
-rw-r--r--gst/camerabin/camerabingeneral.c74
-rw-r--r--gst/camerabin/camerabingeneral.h32
-rw-r--r--gst/camerabin/camerabinimage.c24
-rw-r--r--gst/camerabin/camerabinvideo.c31
-rw-r--r--gst/camerabin/gstcamerabin.c65
5 files changed, 92 insertions, 134 deletions
diff --git a/gst/camerabin/camerabingeneral.c b/gst/camerabin/camerabingeneral.c
index d9d9a202..ba6b82a9 100644
--- a/gst/camerabin/camerabingeneral.c
+++ b/gst/camerabin/camerabingeneral.c
@@ -32,74 +32,6 @@
GST_DEBUG_CATEGORY (gst_camerabin_debug);
-static gboolean
-camerabin_general_dbg_have_event (GstPad * pad, GstEvent * event,
- gpointer u_data)
-{
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
- {
- GstElement *elem = (GstElement *) u_data;
- gchar *elem_name = gst_element_get_name (elem);
- gchar *pad_name = gst_pad_get_name (pad);
-
- gboolean update;
- gdouble rate;
- GstFormat format;
- gint64 start, stop, pos;
- gst_event_parse_new_segment (event, &update, &rate, &format, &start,
- &stop, &pos);
-
- GST_DEBUG ("element %s, pad %s, new_seg_start =%" GST_TIME_FORMAT
- ", new_seg_stop =%" GST_TIME_FORMAT
- ", new_seg_pos =%" GST_TIME_FORMAT "\n", elem_name, pad_name,
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop), GST_TIME_ARGS (pos));
-
- g_free (pad_name);
- g_free (elem_name);
- }
- break;
- default:
- break;
- }
-
- return TRUE;
-}
-
-static gboolean
-camerabin_general_dbg_have_buffer (GstPad * pad, GstBuffer * buffer,
- gpointer u_data)
-{
- GstElement *elem = (GstElement *) u_data;
- gchar *elem_name = gst_element_get_name (elem);
- gchar *pad_name = gst_pad_get_name (pad);
-
- GST_DEBUG ("element %s, pad %s, buf_ts =%" GST_TIME_FORMAT "\n", elem_name,
- pad_name, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
-
- g_free (pad_name);
- g_free (elem_name);
-
- return TRUE;
-
-}
-
-void
-camerabin_general_dbg_set_probe (GstElement * elem, gchar * pad_name,
- gboolean buf, gboolean evt)
-{
- GstPad *pad = gst_element_get_static_pad (elem, pad_name);
-
- if (buf)
- gst_pad_add_buffer_probe (pad,
- G_CALLBACK (camerabin_general_dbg_have_buffer), elem);
- if (evt)
- gst_pad_add_event_probe (pad,
- G_CALLBACK (camerabin_general_dbg_have_event), elem);
-
- gst_object_unref (pad);
-}
-
/**
* gst_camerabin_add_element:
* @bin: add an element to this bin
@@ -151,12 +83,12 @@ gst_camerabin_try_add_element (GstBin * bin, GstElement * new_elem)
/* Get pads for linking */
bin_pad = gst_bin_find_unlinked_pad (bin, GST_PAD_SRC);
- GST_DEBUG ("adding %" GST_PTR_FORMAT " to %s:%s", new_elem,
- GST_DEBUG_PAD_NAME (bin_pad));
/* Add to bin */
gst_bin_add (GST_BIN (bin), new_elem);
/* Link, if unconnected pad was found, otherwise just add it to bin */
if (bin_pad) {
+ GST_DEBUG_OBJECT (bin, "linking %s to %s:%s", GST_OBJECT_NAME (new_elem),
+ GST_DEBUG_PAD_NAME (bin_pad));
bin_elem = gst_pad_get_parent_element (bin_pad);
gst_object_unref (bin_pad);
if (!gst_element_link (bin_elem, new_elem)) {
@@ -164,6 +96,8 @@ gst_camerabin_try_add_element (GstBin * bin, GstElement * new_elem)
ret = FALSE;
}
gst_object_unref (bin_elem);
+ } else {
+ GST_INFO_OBJECT (bin, "no unlinked source pad in bin");
}
return ret;
diff --git a/gst/camerabin/camerabingeneral.h b/gst/camerabin/camerabingeneral.h
index a84ab64b..13eea756 100644
--- a/gst/camerabin/camerabingeneral.h
+++ b/gst/camerabin/camerabingeneral.h
@@ -21,43 +21,17 @@
#ifndef __CAMERABIN_GENERAL_H_
#define __CAMERABIN_GENERAL_H_
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <time.h>
-
#include <gst/gst.h>
-
-typedef struct timeval TIME_TYPE;
-#define GET_TIME(t) do { gettimeofday(&(t), NULL); } while(0)
-#define DIFF_TIME(t2,t1,d) do { d = ((t2).tv_sec - (t1).tv_sec) * 1000000 + \
- (t2).tv_usec - (t1).tv_usec; } while(0)
-
-#define _INIT_TIMER_BLOCK TIME_TYPE t1, t2; guint32 d; do {;}while (0)
-
-#define _OPEN_TIMER_BLOCK { GET_TIME(t1); do {;}while (0)
-#define _CLOSE_TIMER_BLOCK GET_TIME(t2); DIFF_TIME(t2,t1,d); \
- GST_DEBUG("elapsed time = %u\n", d); \
- } do {;}while (0)
-
-
-extern void
-camerabin_general_dbg_set_probe (GstElement * elem, gchar * pad_name,
- gboolean buf, gboolean evt);
-
gboolean gst_camerabin_try_add_element (GstBin * bin, GstElement * new_elem);
-
gboolean gst_camerabin_add_element (GstBin * bin, GstElement * new_elem);
-
-GstElement *gst_camerabin_create_and_add_element (GstBin * bin,
- const gchar * elem_name);
+GstElement *gst_camerabin_create_and_add_element (GstBin * bin, const gchar * elem_name);
void gst_camerabin_remove_elements_from_bin (GstBin * bin);
-gboolean
-gst_camerabin_drop_eos_probe (GstPad * pad, GstEvent * event, gpointer u_data);
+gboolean gst_camerabin_drop_eos_probe (GstPad * pad, GstEvent * event, gpointer u_data);
+/* debug logging category */
GST_DEBUG_CATEGORY_EXTERN (gst_camerabin_debug);
#define GST_CAT_DEFAULT gst_camerabin_debug
diff --git a/gst/camerabin/camerabinimage.c b/gst/camerabin/camerabinimage.c
index da979f0f..8eea8d91 100644
--- a/gst/camerabin/camerabinimage.c
+++ b/gst/camerabin/camerabinimage.c
@@ -162,6 +162,8 @@ gst_camerabin_image_init (GstCameraBinImage * img,
static void
gst_camerabin_image_dispose (GstCameraBinImage * img)
{
+ GST_DEBUG_OBJECT (img, "disposing");
+
g_string_free (img->filename, TRUE);
img->filename = NULL;
@@ -184,7 +186,10 @@ gst_camerabin_image_change_state (GstElement * element,
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
GstCameraBinImage *img = GST_CAMERABIN_IMAGE (element);
- GstObject *camerabin = NULL;
+
+ GST_DEBUG_OBJECT (element, "changing state: %s -> %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
@@ -221,12 +226,10 @@ gst_camerabin_image_change_state (GstElement * element,
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- camerabin = gst_element_get_parent (img);
/* Write debug graph to file */
- GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (camerabin),
+ GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (GST_ELEMENT_PARENT (img)),
GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE |
GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS, "imagebin.playing");
- gst_object_unref (camerabin);
break;
case GST_STATE_CHANGE_READY_TO_NULL:
gst_camerabin_image_destroy_elements (img);
@@ -235,6 +238,11 @@ gst_camerabin_image_change_state (GstElement * element,
break;
}
+ GST_DEBUG_OBJECT (element, "changed state: %s -> %s = %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)),
+ gst_element_state_change_return_get_name (ret));
+
return ret;
}
@@ -308,7 +316,7 @@ gst_camerabin_image_get_property (GObject * object, guint prop_id,
* static helper functions implementation
*/
-/**
+/*
* metadata_write_probe:
* @pad: sink pad of metadata muxer
* @buffer: received buffer
@@ -375,7 +383,7 @@ done:
}
-/**
+/*
* gst_camerabin_image_create_elements:
* @img: a pointer to #GstCameraBinImage object
*
@@ -480,7 +488,7 @@ done:
}
-/**
+/*
* gst_camerabin_image_destroy_elements:
* @img: a pointer to #GstCameraBinImage object
*
@@ -491,7 +499,7 @@ done:
static void
gst_camerabin_image_destroy_elements (GstCameraBinImage * img)
{
- GST_LOG ("destroying img elements");
+ GST_LOG ("destroying image elements");
gst_ghost_pad_set_target (GST_GHOST_PAD (img->sinkpad), NULL);
diff --git a/gst/camerabin/camerabinvideo.c b/gst/camerabin/camerabinvideo.c
index fef9ac26..d3de662e 100644
--- a/gst/camerabin/camerabinvideo.c
+++ b/gst/camerabin/camerabinvideo.c
@@ -242,11 +242,12 @@ gst_camerabin_video_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_FILENAME:
g_string_assign (bin->filename, g_value_get_string (value));
+ GST_INFO_OBJECT (bin, "received filename: '%s'", bin->filename->str);
if (bin->sink) {
g_object_set (G_OBJECT (bin->sink), "location", bin->filename->str,
NULL);
} else {
- GST_INFO ("no sink, not setting name yet");
+ GST_INFO_OBJECT (bin, "no sink, not setting name yet");
}
break;
default:
@@ -290,7 +291,10 @@ gst_camerabin_video_change_state (GstElement * element,
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
GstCameraBinVideo *vid = GST_CAMERABIN_VIDEO (element);
- GstObject *camerabin = NULL;
+
+ GST_DEBUG_OBJECT (element, "changing state: %s -> %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
@@ -314,7 +318,7 @@ gst_camerabin_video_change_state (GstElement * element,
case GST_STATE_CHANGE_PAUSED_TO_READY:
/* Set sink to NULL in order to write the file _now_ */
- GST_INFO ("write vid file: %s", vid->filename->str);
+ GST_INFO ("write video file: %s", vid->filename->str);
gst_element_set_locked_state (vid->sink, TRUE);
gst_element_set_state (vid->sink, GST_STATE_NULL);
break;
@@ -326,12 +330,10 @@ gst_camerabin_video_change_state (GstElement * element,
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- camerabin = gst_element_get_parent (vid);
/* Write debug graph to file */
- GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (camerabin),
+ GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (GST_ELEMENT_PARENT (vid)),
GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE |
GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS, "videobin.playing");
- gst_object_unref (camerabin);
if (vid->pending_eos) {
/* Video bin is still paused, so push eos directly to video queue */
@@ -359,6 +361,11 @@ gst_camerabin_video_change_state (GstElement * element,
break;
}
+ GST_DEBUG_OBJECT (element, "changed state: %s -> %s = %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)),
+ gst_element_state_change_return_get_name (ret));
+
return ret;
}
@@ -366,7 +373,7 @@ gst_camerabin_video_change_state (GstElement * element,
* static helper functions implementation
*/
-/**
+/*
* camerabin_video_pad_tee_src0_have_buffer:
* @pad: tee src pad leading to video encoding
* @event: received buffer
@@ -414,7 +421,7 @@ camerabin_video_pad_tee_src0_have_buffer (GstPad * pad, GstBuffer * buffer,
return TRUE;
}
-/**
+/*
* camerabin_video_pad_aud_src_have_buffer:
* @pad: audio source src pad
* @event: received buffer
@@ -455,7 +462,7 @@ camerabin_video_pad_aud_src_have_buffer (GstPad * pad, GstBuffer * buffer,
return TRUE;
}
-/**
+/*
* camerabin_video_sink_have_event:
* @pad: video bin sink pad
* @event: received event
@@ -498,7 +505,7 @@ camerabin_video_sink_have_event (GstPad * pad, GstEvent * event,
return ret;
}
-/**
+/*
* gst_camerabin_video_create_elements:
* @vid: a pointer to #GstCameraBinVideo
*
@@ -675,7 +682,7 @@ error:
}
-/**
+/*
* gst_camerabin_video_destroy_elements:
* @vid: a pointer to #GstCameraBinVideo
*
@@ -716,8 +723,6 @@ gst_camerabin_video_destroy_elements (GstCameraBinVideo * vid)
gst_event_unref (vid->pending_eos);
vid->pending_eos = NULL;
}
-
- return;
}
/*
diff --git a/gst/camerabin/gstcamerabin.c b/gst/camerabin/gstcamerabin.c
index f1cd897a..ca2e8e18 100644
--- a/gst/camerabin/gstcamerabin.c
+++ b/gst/camerabin/gstcamerabin.c
@@ -207,7 +207,11 @@ static guint camerabin_signals[LAST_SIGNAL];
#define DEFAULT_CAPTURE_HEIGHT 600
#define DEFAULT_FPS_N 0 /* makes it use the default */
#define DEFAULT_FPS_D 1
+
#define CAMERABIN_DEFAULT_VF_CAPS "video/x-raw-yuv,format=(fourcc)I420"
+#define CAMERABIN_MAX_VF_WIDTH 848
+#define CAMERABIN_MAX_VF_HEIGHT 848
+
/* Using "bilinear" as default zoom method */
#define CAMERABIN_DEFAULT_ZOOM_METHOD 1
@@ -215,19 +219,20 @@ static guint camerabin_signals[LAST_SIGNAL];
#define MAX_ZOOM 1000
#define ZOOM_1X MIN_ZOOM
+/* FIXME: this is v4l2camsrc specific */
#define DEFAULT_V4L2CAMSRC_DRIVER_NAME "omap3cam"
-/* internal element names */
+/* pipeline configuration */
+//#define USE_VIEWFINDER_COLOR_CONVERTER 1
+//#define USE_VIEWFINDER_SCALE 1
-#define USE_COLOR_CONVERTER 1
+/* internal element names */
/* FIXME: Make sure this can work with autovideosrc and use that. */
#define DEFAULT_SRC_VID_SRC "v4l2src"
-
#define DEFAULT_VIEW_SINK "autovideosink"
-#define CAMERABIN_MAX_VF_WIDTH 848
-#define CAMERABIN_MAX_VF_HEIGHT 848
+/* message names */
#define PREVIEW_MESSAGE_NAME "preview-image"
#define IMG_CAPTURED_MESSAGE_NAME "image-captured"
@@ -579,6 +584,7 @@ camerabin_create_src_elements (GstCameraBin * camera)
goto done;
/* Set default "driver-name" for v4l2camsrc if not set */
+ /* FIXME: v4l2camsrc specific */
if (g_object_class_find_property (G_OBJECT_GET_CLASS (camera->src_vid_src),
"driver-name")) {
g_object_get (G_OBJECT (camera->src_vid_src), "driver-name",
@@ -650,6 +656,7 @@ camerabin_create_view_elements (GstCameraBin * camera)
}
camera->pad_view_src = GST_PAD (pads->data);
+#ifdef USE_VIEWFINDER_CONVERTERS
/* Add videoscale in case we need to downscale frame for view finder */
if (!(camera->view_scale =
gst_camerabin_create_and_add_element (GST_BIN (camera),
@@ -663,7 +670,8 @@ camerabin_create_view_elements (GstCameraBin * camera)
"capsfilter"))) {
goto error;
}
-#ifdef USE_COLOR_CONVERTER
+#endif
+#ifdef USE_VIEWFINDER_COLOR_CONVERTER
if (!gst_camerabin_create_and_add_element (GST_BIN (camera),
"ffmpegcolorspace")) {
goto error;
@@ -822,6 +830,7 @@ camerabin_destroy_elements (GstCameraBin * camera)
}
camera->view_sink = NULL;
+ camera->aspect_filter = NULL;
camera->view_scale = NULL;
camera->view_in_sel = NULL;
@@ -943,18 +952,24 @@ static void
gst_camerabin_change_mode (GstCameraBin * camera, gint mode)
{
if (camera->mode != mode || !camera->active_bin) {
- GST_DEBUG_OBJECT (camera, "setting mode: %d", mode);
+ GST_DEBUG_OBJECT (camera, "setting mode: %d (old_mode=%d)",
+ mode, camera->mode);
/* Interrupt ongoing capture */
gst_camerabin_do_stop (camera);
camera->mode = mode;
if (camera->active_bin) {
+ GST_DEBUG_OBJECT (camera, "stopping active bin");
gst_element_set_state (camera->active_bin, GST_STATE_NULL);
}
if (camera->mode == MODE_IMAGE) {
GstStateChangeReturn state_ret;
camera->active_bin = camera->imgbin;
+ /* we can't go to playing as filesink would error out if it does not have
+ * a filename yet, we set the filename async with the buffer flow */
state_ret = gst_element_set_state (camera->active_bin, GST_STATE_READY);
+ GST_DEBUG_OBJECT (camera, "setting imagebin to ready: %s",
+ gst_element_state_change_return_get_name (state_ret));
if (state_ret == GST_STATE_CHANGE_FAILURE) {
GST_WARNING_OBJECT (camera, "state change failed");
@@ -979,7 +994,7 @@ static void
gst_camerabin_change_filename (GstCameraBin * camera, const gchar * name)
{
if (0 != strcmp (camera->filename->str, name)) {
- GST_DEBUG_OBJECT (camera, "changing filename from %s to %s",
+ GST_DEBUG_OBJECT (camera, "changing filename from '%s' to '%s'",
camera->filename->str, name);
g_string_assign (camera->filename, name);
}
@@ -1567,6 +1582,7 @@ gst_camerabin_start_image_capture (GstCameraBin * camera)
gst_element_state_change_return_get_name (state_ret));
if (state_ret != GST_STATE_CHANGE_FAILURE) {
+ GST_INFO_OBJECT (camera, "imagebin is PAUSED");
g_mutex_lock (camera->capture_mutex);
g_object_set (G_OBJECT (camera->src_out_sel), "resend-latest", TRUE,
"active-pad", camera->pad_src_img, NULL);
@@ -1766,6 +1782,8 @@ done:
after one captured still image */
gst_camerabin_finish_image_capture (camera);
+ GST_DEBUG_OBJECT (camera, "image captured, switching to viewfinder");
+
gst_camerabin_reset_to_view_finder (camera);
GST_DEBUG_OBJECT (camera, "switched back to viewfinder");
@@ -1823,7 +1841,7 @@ gst_camerabin_have_src_buffer (GstPad * pad, GstBuffer * buffer,
/* We can't send real EOS event, since it would switch the image queue
into "draining mode". Therefore we send our own custom eos and
catch & drop it later in queue's srcpad data probe */
- GST_DEBUG_OBJECT (camera, "sending eos to image queue");
+ GST_DEBUG_OBJECT (camera, "sending img-eos to image queue");
gst_camerabin_send_img_queue_custom_event (camera,
gst_structure_new ("img-eos", NULL));
@@ -1886,13 +1904,14 @@ gst_camerabin_have_queue_data (GstPad * pad, GstMiniObject * mini_obj,
if (GST_EVENT_TYPE (event) == GST_EVENT_TAG) {
GstTagList *tlist;
+ GST_DEBUG_OBJECT (camera, "queue sending taglist to image pipeline");
gst_event_parse_tag (event, &tlist);
gst_tag_list_insert (camera->event_tags, tlist, GST_TAG_MERGE_REPLACE);
ret = FALSE;
} else if (evs && gst_structure_has_name (evs, "img-filename")) {
const gchar *fname;
- GST_LOG_OBJECT (camera, "queue setting image filename to imagebin");
+ GST_DEBUG_OBJECT (camera, "queue setting image filename to imagebin");
fname = gst_structure_get_string (evs, "filename");
g_object_set (G_OBJECT (camera->imgbin), "filename", fname, NULL);
@@ -1902,7 +1921,7 @@ gst_camerabin_have_queue_data (GstPad * pad, GstMiniObject * mini_obj,
ret = FALSE;
} else if (evs && gst_structure_has_name (evs, "img-eos")) {
- GST_LOG_OBJECT (camera, "queue sending EOS to image pipeline");
+ GST_DEBUG_OBJECT (camera, "queue sending EOS to image pipeline");
gst_pad_set_blocked_async (camera->pad_src_queue, TRUE,
(GstPadBlockCallback) image_pad_blocked, camera);
gst_element_send_event (camera->imgbin, gst_event_new_eos ());
@@ -2140,10 +2159,10 @@ gst_camerabin_find_better_framerate (GstCameraBin * camera, GstStructure * st,
gint res, comparison;
if (camera->night_mode) {
- GST_LOG_OBJECT (camera, "finding min framerate");
+ GST_LOG_OBJECT (camera, "finding min framerate in %" GST_PTR_FORMAT, st);
comparison = GST_VALUE_LESS_THAN;
} else {
- GST_LOG_OBJECT (camera, "finding max framerate");
+ GST_LOG_OBJECT (camera, "finding max framerate in %" GST_PTR_FORMAT, st);
comparison = GST_VALUE_GREATER_THAN;
}
@@ -2198,6 +2217,7 @@ gst_camerabin_find_better_framerate (GstCameraBin * camera, GstStructure * st,
static void
gst_camerabin_update_aspect_filter (GstCameraBin * camera, GstCaps * new_caps)
{
+#ifdef USE_VIEWFINDER_SCALE
GstCaps *sink_caps, *ar_caps;
GstStructure *st;
gint in_w = 0, in_h = 0, sink_w = 0, sink_h = 0, target_w = 0, target_h = 0;
@@ -2266,6 +2286,7 @@ gst_camerabin_update_aspect_filter (GstCameraBin * camera, GstCaps * new_caps)
ar_caps);
g_object_set (G_OBJECT (camera->aspect_filter), "caps", ar_caps, NULL);
gst_caps_unref (ar_caps);
+#endif
}
/*
@@ -2725,6 +2746,7 @@ gst_camerabin_init (GstCameraBin * camera, GstCameraBinClass * gclass)
/* view finder elements */
camera->view_in_sel = NULL;
camera->view_scale = NULL;
+ camera->aspect_filter = NULL;
camera->view_sink = NULL;
memset (&camera->photo_settings, 0, sizeof (GstPhotoSettings));
@@ -2971,6 +2993,10 @@ gst_camerabin_change_state (GstElement * element, GstStateChange transition)
GstCameraBin *camera = GST_CAMERABIN (element);
GstStateChangeReturn ret;
+ GST_DEBUG_OBJECT (element, "changing state: %s -> %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)));
+
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
if (!camerabin_create_elements (camera)) {
@@ -3000,9 +3026,13 @@ gst_camerabin_change_state (GstElement * element, GstStateChange transition)
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ GST_DEBUG_OBJECT (element, "after chaining up: %s -> %s = %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)),
+ gst_element_state_change_return_get_name (ret));
+
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
- GST_LOG_OBJECT (camera, "PAUSED to READY");
g_mutex_lock (camera->capture_mutex);
if (camera->capturing) {
GST_WARNING_OBJECT (camera, "was capturing when changing to READY");
@@ -3022,6 +3052,10 @@ gst_camerabin_change_state (GstElement * element, GstStateChange transition)
}
done:
+ GST_DEBUG_OBJECT (element, "changed state: %s -> %s = %s",
+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)),
+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition)),
+ gst_element_state_change_return_get_name (ret));
return ret;
}
@@ -3128,8 +3162,11 @@ gst_camerabin_user_start (GstCameraBin * camera)
if (camera->active_bin) {
if (camera->active_bin == camera->imgbin) {
+ GST_INFO_OBJECT (camera, "starting image capture");
gst_camerabin_start_image_capture (camera);
} else if (camera->active_bin == camera->vidbin) {
+ GST_INFO_OBJECT (camera,
+ "setting video filename and starting video capture");
g_object_set (G_OBJECT (camera->active_bin), "filename",
camera->filename->str, NULL);
gst_camerabin_start_video_recording (camera);