summaryrefslogtreecommitdiff
path: root/libcheese
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2013-06-21 08:44:09 +0200
committerDavid King <amigadave@amigadave.com>2013-06-24 21:41:48 +0100
commitd35cfcd7890528b9db5d1031e7e338f5f6c5b83a (patch)
treef0b02db1b27212492dc18a5cfe1a89d6a4979af4 /libcheese
parent6ab3c5248d9564ecc383b6c29cb3bcde7fa7c977 (diff)
Fix being paused when effect valves are closed
The move to autocluttersink in 3.9 causes a regression compared to 3.8, where if an effect's control valve is closed the pipeline will never transition from paused to playing since the cluttersink is stuck in paused. This regression can be triggered the following way: 1) Go the effect selector 2) Go to the next page in the effect selector, so that the now connected effects from the first page get their control valve set to closed 3) Change resolution or device, so that the pipeline gets stopped and started again After 3) the pipeline will be stuck in pause, as the cluttersinks of the effect previews are stuck in pause. The cause for this is that with the move to autocluttersink we are no longer setting the sink's "async" property, see commit 424afdaa 'Use "autocluttersink" instead of "cluttersink"'. Setting the "async" property is no longer (easily) doable, since autocluttersink is a gstbin derived object which has the actual sink embedded. Instead this patch fixes the stuck in pause problem by locking the autocluttersinks of the effect previews into the playing state. Note that no longer setting of the async property on the sink is also the root cause of the issue fixed by my patch titled: "Set all valves open on play". The opening of the main valve is still necessary, since locking the viewfinder sink's state to PLAYING does not seem a good idea, the opening of the effects-valve on play OTOH is no longer necessary. Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'libcheese')
-rw-r--r--libcheese/cheese-camera.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libcheese/cheese-camera.c b/libcheese/cheese-camera.c
index a103ba39..dbad2410 100644
--- a/libcheese/cheese-camera.c
+++ b/libcheese/cheese-camera.c
@@ -534,6 +534,7 @@ cheese_camera_create_effects_preview_bin (CheeseCamera *camera, GError **error)
cheese_camera_set_error_element_not_found (error, "effects_valve");
return FALSE;
}
+ g_object_set (G_OBJECT (priv->effects_valve), "drop", TRUE, NULL);
if ((scale = gst_element_factory_make ("videoscale", "effects_scale")) == NULL)
{
cheese_camera_set_error_element_not_found (error, "videoscale");
@@ -790,7 +791,6 @@ cheese_camera_play (CheeseCamera *camera)
cheese_camera_set_new_caps (camera);
g_object_set (priv->camera_source, "video-source", priv->video_source, NULL);
g_object_set (priv->main_valve, "drop", FALSE, NULL);
- g_object_set (priv->effects_valve, "drop", FALSE, NULL);
gst_element_set_state (priv->camerabin, GST_STATE_PLAYING);
priv->pipeline_is_playing = TRUE;
}
@@ -1029,6 +1029,7 @@ cheese_camera_connect_effect_texture (CheeseCamera *camera, CheeseEffect *effect
gst_element_set_state (effect_filter, GST_STATE_PLAYING);
gst_element_set_state (display_queue, GST_STATE_PLAYING);
gst_element_set_state (display_element, GST_STATE_PLAYING);
+ gst_element_set_locked_state (display_element, TRUE);
if (!ok)
g_warning ("Could not create effects pipeline");