summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaluca Elena Podiuc <ralucaelena1985@gmail.com>2011-07-13 18:31:37 +0300
committerOleksij Rempel <bug-track@fisher-privat.net>2012-03-24 09:34:43 +0100
commit38b111468037974805a1acba4bad34bf78116b95 (patch)
tree28eac21d4025176d1466b451b8287b0c80a7f80c
parent88d153cbcc986daaaf6bf5099733a2718c266675 (diff)
downloadcheese-38b111468037974805a1acba4bad34bf78116b95.tar.gz
camerabin2: 'image-done' is now a bus message, not a signal
Quote from camerabin2's PORTING guide: In camerabin, image-done is a signal, in camerabin2, it is a bus message Signed-off-by: Raluca Elena Podiuc <ralucaelena1985@gmail.com>
-rw-r--r--configure.ac3
-rw-r--r--libcheese/cheese-camera.c70
2 files changed, 26 insertions, 47 deletions
diff --git a/configure.ac b/configure.ac
index f6f95f18..5c5f8d37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -66,6 +66,8 @@ GDK_PIXBUF_REQUIRED="gdk-pixbuf-2.0"
LIBGNOMEDESKTOP_REQUIRED="gnome-desktop-3.0 >= 2.91.6"
GSTREAMER_VERSION=0.10.32
GSTREAMER_REQUIRED="gstreamer-plugins-base-0.10 >= $GSTREAMER_VERSION gstreamer-0.10 >= $GSTREAMER_VERSION"
+GSTREAMER_PLUGINS_BAD_VERSION=0.10.22
+GSTREAMER_PLUGINS_BAD_REQUIRED="gstreamer-plugins-bad-0.10 >= $GSTREAMER_PLUGINS_BAD_VERSION"
CAIRO_REQUIRED="cairo >= 1.10.0"
PANGOCAIRO_REQUIRED="pangocairo >= 1.28.0"
LIBRSVG_REQUIRED="librsvg-2.0 >= 2.32.0"
@@ -109,6 +111,7 @@ PKG_CHECK_MODULES([CHEESE],
$GOBJECT_REQUIRED
$GDK_PIXBUF_REQUIRED
$GSTREAMER_REQUIRED
+ $GSTREAMER_PLUGINS_BAD_REQUIRED
$CAIRO_REQUIRED
$PANGOCAIRO_REQUIRED
$CLUTTER_REQUIRED
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
index 58a9f008..c08a8002 100644
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -91,8 +91,6 @@ struct _CheeseCameraPrivate
GstCaps *preview_caps;
- gulong photo_handler_signal_id;
-
gboolean is_recording;
gboolean pipeline_is_playing;
gchar *photo_filename;
@@ -194,6 +192,8 @@ cheese_camera_photo_data (CheeseCamera *camera, GstBuffer *buffer)
static void
cheese_camera_bus_message_cb (GstBus *bus, GstMessage *message, CheeseCamera *camera)
{
+ CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
+
switch (GST_MESSAGE_TYPE (message))
{
case GST_MESSAGE_WARNING:
@@ -263,6 +263,15 @@ cheese_camera_bus_message_cb (GstBus *bus, GstMessage *message, CheeseCamera *ca
}
}
}
+ if (strcmp (gst_structure_get_name (structure), "image-done") == 0)
+ {
+ const gchar *filename = gst_structure_get_string (structure, "filename");
+ if (priv->photo_filename != NULL && filename != NULL &&
+ (strcmp (priv->photo_filename, filename) == 0))
+ {
+ g_signal_emit (camera, camera_signals[PHOTO_SAVED], 0);
+ }
+ }
}
break;
}
@@ -1054,26 +1063,6 @@ cheese_camera_stop_video_recording (CheeseCamera *camera)
}
}
-/*
- * cheese_camera_image_done_cb:
- * @camerabin: a CameraBin #GstElement
- * @filename: (type filename): path to where the photo was saved
- * @camera: a #CheeseCamera
- *
- * Emits the ::photo-saved signal, if a filename was provided.
- */
-static void
-cheese_camera_image_done_cb (GstElement *camerabin, const gchar *filename,
- CheeseCamera *camera)
-{
- CheeseCameraPrivate *priv = camera->priv;
- g_signal_handler_disconnect (G_OBJECT (priv->camerabin),
- priv->photo_handler_signal_id);
- priv->photo_handler_signal_id = 0;
- if (priv->photo_filename != NULL)
- g_signal_emit (camera, camera_signals[PHOTO_SAVED], 0);
-}
-
/**
* cheese_camera_take_photo:
* @camera: a #CheeseCamera
@@ -1087,20 +1076,18 @@ gboolean
cheese_camera_take_photo (CheeseCamera *camera, const gchar *filename)
{
CheeseCameraPrivate *priv;
+ gboolean ready;
g_return_val_if_fail (CHEESE_IS_CAMERA (camera), FALSE);
priv = camera->priv;
- if (priv->photo_handler_signal_id != 0)
+ g_object_get (priv->camera_source, "ready-for-capture", &ready, NULL);
+ if (!ready)
{
GST_WARNING ("Still waiting for previous photo data, ignoring new request");
return FALSE;
}
- priv->photo_handler_signal_id = g_signal_connect (G_OBJECT (priv->camerabin),
- "image-done",
- G_CALLBACK (cheese_camera_image_done_cb),
- camera);
g_free (priv->photo_filename);
priv->photo_filename = g_strdup (filename);
@@ -1109,22 +1096,13 @@ cheese_camera_take_photo (CheeseCamera *camera, const gchar *filename)
/* Only copy the data if we're giving away a pixbuf,
* not if we're throwing everything away straight away */
-
- if (priv->photo_filename != NULL)
- {
- g_object_set (priv->camerabin, "location", priv->photo_filename, NULL);
- g_object_set (priv->camerabin, "mode", MODE_IMAGE, NULL);
- cheese_camera_set_tags (camera);
- g_signal_emit_by_name (priv->camerabin, "start-capture", 0);
- }
- else
- {
- g_signal_handler_disconnect (G_OBJECT (priv->camerabin),
- priv->photo_handler_signal_id);
- priv->photo_handler_signal_id = 0;
+ if (priv->photo_filename == NULL)
return FALSE;
- }
+ g_object_set (priv->camerabin, "location", priv->photo_filename, NULL);
+ g_object_set (priv->camerabin, "mode", MODE_IMAGE, NULL);
+ cheese_camera_set_tags (camera);
+ g_signal_emit_by_name (priv->camerabin, "start-capture", 0);
return TRUE;
}
@@ -1142,20 +1120,19 @@ cheese_camera_take_photo_pixbuf (CheeseCamera *camera)
{
CheeseCameraPrivate *priv;
GstCaps *caps;
+ gboolean ready;
g_return_val_if_fail (CHEESE_IS_CAMERA (camera), FALSE);
priv = camera->priv;
- if (priv->photo_handler_signal_id != 0)
+ g_object_get (priv->camera_source, "ready-for-capture", &ready, NULL);
+ if (!ready)
{
GST_WARNING ("Still waiting for previous photo data, ignoring new request");
return FALSE;
}
- priv->photo_handler_signal_id = g_signal_connect (G_OBJECT (priv->camerabin),
- "image-done",
- G_CALLBACK (cheese_camera_image_done_cb),
- camera);
+
caps = gst_caps_new_simple ("video/x-raw-rgb",
"bpp", G_TYPE_INT, 24,
"depth", G_TYPE_INT, 24,
@@ -1395,7 +1372,6 @@ cheese_camera_init (CheeseCamera *camera)
priv->photo_filename = NULL;
priv->camera_devices = NULL;
priv->device_node = NULL;
- priv->photo_handler_signal_id = 0;
priv->current_format = NULL;
priv->monitor = NULL;
priv->camera_source = NULL;