From d4105d4b56b0b07d8994abf92db620ba1f533ab0 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 1 Nov 2011 11:47:46 -0300 Subject: [PATCH] camerabin2: On capture error, skip previews When the camera source fails to do some capture, skip the next preview and decrement processing counter. --- gst/camerabin2/gstcamerabin2.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 4c68a3f779..eebf12041d 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -933,6 +933,26 @@ gst_video_capture_bin_post_video_done (GstCameraBin2 * camera) GST_WARNING_OBJECT (camera, "Failed to post video-done message"); } +static void +gst_camera_bin_skip_next_preview (GstCameraBin2 * camerabin) +{ + gchar *location; + + g_mutex_lock (camerabin->preview_list_mutex); + if (camerabin->preview_location_list) { + location = camerabin->preview_location_list->data; + GST_DEBUG_OBJECT (camerabin, "Skipping preview for %s", location); + g_free (location); + camerabin->preview_location_list = + g_slist_delete_link (camerabin->preview_location_list, + camerabin->preview_location_list); + GST_CAMERA_BIN2_PROCESSING_DEC (camerabin); + } else { + GST_WARNING_OBJECT (camerabin, "No previews to skip"); + } + g_mutex_unlock (camerabin->preview_list_mutex); +} + static void gst_camera_bin_handle_message (GstBin * bin, GstMessage * message) { @@ -995,6 +1015,9 @@ gst_camera_bin_handle_message (GstBin * bin, GstMessage * message) GST_WARNING_OBJECT (bin, "Capture failed, reason: %s - %s", err->message, debug); GST_CAMERA_BIN2_PROCESSING_DEC (GST_CAMERA_BIN2_CAST (bin)); + if (camerabin->post_previews) { + gst_camera_bin_skip_next_preview (camerabin); + } } } break;