|
|
ecdf9b |
From 7f7e1b27e05ce3ba29e409fcf5cb58241ef99067 Mon Sep 17 00:00:00 2001
|
|
|
ecdf9b |
From: Hans de Goede <hdegoede@redhat.com>
|
|
|
ecdf9b |
Date: Tue, 11 Jun 2013 09:35:14 +0200
|
|
|
ecdf9b |
Subject: [PATCH 18/35] cheese-camera: Check for the current effect being the
|
|
|
ecdf9b |
same as the one set
|
|
|
ecdf9b |
|
|
|
ecdf9b |
And if so, turn the cheese_camera_set_effect call into a nop.
|
|
|
ecdf9b |
|
|
|
ecdf9b |
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
|
ecdf9b |
---
|
|
|
ecdf9b |
libcheese/cheese-camera.c | 20 ++++++++++++++++++++
|
|
|
ecdf9b |
1 file changed, 20 insertions(+)
|
|
|
ecdf9b |
|
|
|
ecdf9b |
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
|
|
|
ecdf9b |
index 7b7fac5..9cfaf7e 100644
|
|
|
ecdf9b |
--- a/libcheese/cheese-camera.c
|
|
|
ecdf9b |
+++ b/libcheese/cheese-camera.c
|
|
|
ecdf9b |
@@ -80,6 +80,7 @@ struct _CheeseCameraPrivate
|
|
|
ecdf9b |
GstElement *video_balance;
|
|
|
ecdf9b |
GstElement *camera_tee, *effects_tee;
|
|
|
ecdf9b |
GstElement *main_valve, *effects_valve;
|
|
|
ecdf9b |
+ gchar *current_effect_desc;
|
|
|
ecdf9b |
|
|
|
ecdf9b |
gboolean is_recording;
|
|
|
ecdf9b |
gboolean pipeline_is_playing;
|
|
|
ecdf9b |
@@ -587,6 +588,7 @@ cheese_camera_create_video_filter_bin (CheeseCamera *camera, GError **error)
|
|
|
ecdf9b |
cheese_camera_set_error_element_not_found (error, "identity");
|
|
|
ecdf9b |
return FALSE;
|
|
|
ecdf9b |
}
|
|
|
ecdf9b |
+ priv->current_effect_desc = g_strdup("identity");
|
|
|
ecdf9b |
if ((priv->video_balance = gst_element_factory_make ("videobalance", "video_balance")) == NULL)
|
|
|
ecdf9b |
{
|
|
|
ecdf9b |
cheese_camera_set_error_element_not_found (error, "videobalance");
|
|
|
ecdf9b |
@@ -887,19 +889,36 @@ cheese_camera_element_from_effect (CheeseCamera *camera, CheeseEffect *effect)
|
|
|
ecdf9b |
void
|
|
|
ecdf9b |
cheese_camera_set_effect (CheeseCamera *camera, CheeseEffect *effect)
|
|
|
ecdf9b |
{
|
|
|
ecdf9b |
+ CheeseCameraPrivate *priv;
|
|
|
ecdf9b |
GstElement *effect_filter;
|
|
|
ecdf9b |
gchar *effect_desc;
|
|
|
ecdf9b |
|
|
|
ecdf9b |
g_return_if_fail (CHEESE_IS_CAMERA (camera));
|
|
|
ecdf9b |
|
|
|
ecdf9b |
+ priv = camera->priv;
|
|
|
ecdf9b |
+
|
|
|
ecdf9b |
g_object_get (G_OBJECT (effect), "pipeline-desc", &effect_desc, NULL);
|
|
|
ecdf9b |
|
|
|
ecdf9b |
+ if (strcmp(priv->current_effect_desc, effect_desc) == 0)
|
|
|
ecdf9b |
+ {
|
|
|
ecdf9b |
+ GST_INFO_OBJECT (camera, "Effect is: \"%s\", not updating", effect_desc);
|
|
|
ecdf9b |
+ g_free (effect_desc);
|
|
|
ecdf9b |
+ return;
|
|
|
ecdf9b |
+ }
|
|
|
ecdf9b |
+
|
|
|
ecdf9b |
+ GST_INFO_OBJECT (camera, "Changing effect to: \"%s\"", effect_desc);
|
|
|
ecdf9b |
+
|
|
|
ecdf9b |
if (strcmp(effect_desc, "identity") == 0)
|
|
|
ecdf9b |
effect_filter = gst_element_factory_make ("identity", "effect");
|
|
|
ecdf9b |
else
|
|
|
ecdf9b |
effect_filter = cheese_camera_element_from_effect (camera, effect);
|
|
|
ecdf9b |
if (effect_filter != NULL)
|
|
|
ecdf9b |
+ {
|
|
|
ecdf9b |
cheese_camera_change_effect_filter (camera, effect_filter);
|
|
|
ecdf9b |
+ g_free (priv->current_effect_desc);
|
|
|
ecdf9b |
+ priv->current_effect_desc = effect_desc;
|
|
|
ecdf9b |
+ return;
|
|
|
ecdf9b |
+ }
|
|
|
ecdf9b |
|
|
|
ecdf9b |
g_free (effect_desc);
|
|
|
ecdf9b |
}
|
|
|
ecdf9b |
@@ -1202,6 +1221,7 @@ cheese_camera_finalize (GObject *object)
|
|
|
ecdf9b |
|
|
|
ecdf9b |
if (priv->photo_filename)
|
|
|
ecdf9b |
g_free (priv->photo_filename);
|
|
|
ecdf9b |
+ g_free (priv->current_effect_desc);
|
|
|
ecdf9b |
g_free (priv->device_node);
|
|
|
ecdf9b |
g_boxed_free (CHEESE_TYPE_VIDEO_FORMAT, priv->current_format);
|
|
|
ecdf9b |
|
|
|
ecdf9b |
--
|
|
|
ecdf9b |
1.8.2.1
|
|
|
ecdf9b |
|