v4l2: Handle v4l2_ioctl() errors even in error handling
authorSebastian Rasmussen <sebras@hotmail.com>
Tue, 31 Dec 2013 12:31:52 +0000 (13:31 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 3 Jan 2014 09:59:57 +0000 (10:59 +0100)
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=721268

sys/v4l2/gstv4l2object.c

index e762cc906658069b18bcd03cd0ca79a9f5efe51e..844a47a7b5e6dec9ca1fb6e858b38812fd7f792c 100644 (file)
@@ -2242,6 +2242,7 @@ gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object,
   int fd;
   int r;
   int prevfmt_valid;
+  gboolean ret = FALSE;
 
   g_return_val_if_fail (width != NULL, FALSE);
   g_return_val_if_fail (height != NULL, FALSE);
@@ -2330,14 +2331,21 @@ gst_v4l2_object_get_nearest_size (GstV4l2Object * v4l2object,
       goto error;
   }
 
-  if (prevfmt_valid)
-    v4l2_ioctl (fd, VIDIOC_S_FMT, &prevfmt);
-  return TRUE;
+  ret = TRUE;
 
 error:
+  if (!ret) {
+    GST_WARNING_OBJECT (v4l2object->element,
+        "Unable to try format: %s", g_strerror (errno));
+  }
   if (prevfmt_valid)
-    v4l2_ioctl (fd, VIDIOC_S_FMT, &prevfmt);
-  return FALSE;
+    if (v4l2_ioctl (fd, VIDIOC_S_FMT, &prevfmt) < 0) {
+      GST_WARNING_OBJECT (v4l2object->element,
+          "Unable to restore format after trying format: %s",
+          g_strerror (errno));
+    }
+
+  return ret;
 }
 
 static gboolean