v4l2object: Don't assert when used by the monitor
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 11 Jul 2016 22:29:01 +0000 (18:29 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Mon, 11 Jul 2016 23:17:49 +0000 (19:17 -0400)
The monitor sets the object->element object as a GstObject. This
works for debug traces, but will assert for ELEMENT_ERROR. This
was the only case where that could happen. Add a check for that.

sys/v4l2/gstv4l2object.c

index 8dfaa305ac897c744f3ad114e07469e7aa80b08a..e7637d2f4f7a15d3c32fdbdd4a244ddb94ce608f 100644 (file)
@@ -1159,12 +1159,17 @@ gst_v4l2_object_fill_format_list (GstV4l2Object * v4l2object,
   /* ERRORS */
 failed:
   {
   /* ERRORS */
 failed:
   {
+    g_free (format);
+
+    if (!GST_IS_ELEMENT (v4l2object->element))
+      return FALSE;
+
     GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
         (_("Failed to enumerate possible video formats device '%s' can work "
                 "with"), v4l2object->videodev),
         ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)",
             n, v4l2object->videodev, errno, g_strerror (errno)));
     GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
         (_("Failed to enumerate possible video formats device '%s' can work "
                 "with"), v4l2object->videodev),
         ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)",
             n, v4l2object->videodev, errno, g_strerror (errno)));
-    g_free (format);
+
     return FALSE;
   }
 }
     return FALSE;
   }
 }