v4l2: Ignore register issue and keep probing
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Thu, 27 Jul 2017 14:51:07 +0000 (10:51 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Thu, 27 Jul 2017 16:12:00 +0000 (12:12 -0400)
Don't stop registering the other dynamic plugins if one registration
fails.

sys/v4l2/gstv4l2.c
sys/v4l2/gstv4l2h264enc.c
sys/v4l2/gstv4l2h264enc.h
sys/v4l2/gstv4l2transform.c
sys/v4l2/gstv4l2transform.h
sys/v4l2/gstv4l2videodec.c
sys/v4l2/gstv4l2videodec.h
sys/v4l2/gstv4l2videoenc.c
sys/v4l2/gstv4l2videoenc.h

index 9c84735..1a504c5 100644 (file)
@@ -119,7 +119,6 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
   GstV4l2Iterator *it;
   gint video_fd = -1;
   struct v4l2_capability vcap;
-  gboolean ret = TRUE;
   guint32 device_caps;
 
   it = gst_v4l2_iterator_new ();
@@ -183,23 +182,21 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
 
     basename = g_path_get_basename (it->device_path);
 
-    if (gst_v4l2_is_video_dec (sink_caps, src_caps))
-      ret = gst_v4l2_video_dec_register (plugin, basename, it->device_path,
+    if (gst_v4l2_is_video_dec (sink_caps, src_caps)) {
+      gst_v4l2_video_dec_register (plugin, basename, it->device_path,
           sink_caps, src_caps);
-    else if (gst_v4l2_is_h264_enc (sink_caps, src_caps))
-      ret = gst_v4l2_h264_enc_register (plugin, basename, it->device_path,
+    } else if (gst_v4l2_is_h264_enc (sink_caps, src_caps)) {
+      gst_v4l2_h264_enc_register (plugin, basename, it->device_path,
           sink_caps, src_caps);
-    else if (gst_v4l2_is_transform (sink_caps, src_caps))
-      ret = gst_v4l2_transform_register (plugin, basename, it->device_path,
+    } else if (gst_v4l2_is_transform (sink_caps, src_caps)) {
+      gst_v4l2_transform_register (plugin, basename, it->device_path,
           sink_caps, src_caps);
+    }
     /* else if ( ... etc. */
 
     gst_caps_unref (sink_caps);
     gst_caps_unref (src_caps);
     g_free (basename);
-
-    if (!ret)
-      break;
   }
 
   if (video_fd >= 0)
@@ -207,7 +204,7 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
 
   gst_v4l2_iterator_free (it);
 
-  return ret;
+  return TRUE;
 }
 #endif
 
index 3d5b16b..dc318e3 100644 (file)
@@ -531,11 +531,11 @@ gst_v4l2_is_h264_enc (GstCaps * sink_caps, GstCaps * src_caps)
   return ret;
 }
 
-gboolean
+void
 gst_v4l2_h264_enc_register (GstPlugin * plugin, const gchar * basename,
     const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps)
 {
-  return gst_v4l2_video_enc_register (plugin, GST_TYPE_V4L2_H264_ENC,
+  gst_v4l2_video_enc_register (plugin, GST_TYPE_V4L2_H264_ENC,
       "h264", basename, device_path, sink_caps,
       gst_static_caps_get (&src_template_caps), src_caps);
 }
index 85a1e1c..b083682 100644 (file)
@@ -55,7 +55,7 @@ GType gst_v4l2_h264_enc_get_type (void);
 
 gboolean gst_v4l2_is_h264_enc (GstCaps * sink_caps, GstCaps * src_caps);
 
-gboolean gst_v4l2_h264_enc_register (GstPlugin * plugin, const gchar * basename,
+void gst_v4l2_h264_enc_register (GstPlugin * plugin, const gchar * basename,
     const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps);
 
 G_END_DECLS
index e74d79e..feed7bf 100644 (file)
@@ -1166,7 +1166,7 @@ gst_v4l2_is_transform (GstCaps * sink_caps, GstCaps * src_caps)
   return ret;
 }
 
-gboolean
+void
 gst_v4l2_transform_register (GstPlugin * plugin, const gchar * basename,
     const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps)
 {
@@ -1193,9 +1193,8 @@ gst_v4l2_transform_register (GstPlugin * plugin, const gchar * basename,
   type_name = g_strdup_printf ("v4l2%sconvert", basename);
   subtype = g_type_register_static (type, type_name, &type_info, 0);
 
-  gst_element_register (plugin, type_name, GST_RANK_NONE, subtype);
+  if (!gst_element_register (plugin, type_name, GST_RANK_NONE, subtype))
+    GST_WARNING ("Failed to register plugin '%s'", type_name);
 
   g_free (type_name);
-
-  return TRUE;
 }
index 13d56c3..81e7454 100644 (file)
@@ -74,7 +74,7 @@ struct _GstV4l2TransformClass
 GType gst_v4l2_transform_get_type (void);
 
 gboolean gst_v4l2_is_transform       (GstCaps * sink_caps, GstCaps * src_caps);
-gboolean gst_v4l2_transform_register (GstPlugin * plugin,
+void     gst_v4l2_transform_register (GstPlugin * plugin,
                                       const gchar *basename,
                                       const gchar *device_path,
                                       GstCaps * sink_caps, GstCaps * src_caps);
index 4a65002..29fbfb9 100644 (file)
@@ -1059,7 +1059,7 @@ G_STMT_START { \
 #undef SET_META
 }
 
-gboolean
+void
 gst_v4l2_video_dec_register (GstPlugin * plugin, const gchar * basename,
     const gchar * device_path, GstCaps * sink_caps, GstCaps * src_caps)
 {
@@ -1098,10 +1098,10 @@ gst_v4l2_video_dec_register (GstPlugin * plugin, const gchar * basename,
     type_info.instance_init = gst_v4l2_video_dec_subinstance_init;
 
     subtype = g_type_register_static (type, type_name, &type_info, 0);
-    gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1, subtype);
+    if (!gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1,
+            subtype))
+      GST_WARNING ("Failed to register plugin '%s'", type_name);
 
     g_free (type_name);
   }
-
-  return TRUE;
 }
index dc7c170..aeed3b2 100644 (file)
@@ -76,7 +76,7 @@ struct _GstV4l2VideoDecClass
 GType gst_v4l2_video_dec_get_type (void);
 
 gboolean gst_v4l2_is_video_dec       (GstCaps * sink_caps, GstCaps * src_caps);
-gboolean gst_v4l2_video_dec_register (GstPlugin * plugin,
+void     gst_v4l2_video_dec_register (GstPlugin * plugin,
                                       const gchar *basename,
                                       const gchar *device_path,
                                       GstCaps * sink_caps, GstCaps * src_caps);
index 79949ba..6f0d384 100644 (file)
@@ -903,7 +903,7 @@ gst_v4l2_video_enc_subclass_init (gpointer g_class, gpointer data)
 }
 
 /* Probing functions */
-gboolean
+void
 gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
     const char *codec, const gchar * basename, const gchar * device_path,
     GstCaps * sink_caps, GstCaps * codec_caps, GstCaps * src_caps)
@@ -942,9 +942,9 @@ gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
   }
 
   subtype = g_type_register_static (type, type_name, &type_info, 0);
-  gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1, subtype);
 
-  g_free (type_name);
+  if (!gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1, subtype))
+    GST_WARNING ("Failed to register plugin '%s'", type_name);
 
-  return TRUE;
+  g_free (type_name);
 }
index 7b248bd..153b890 100644 (file)
@@ -79,7 +79,7 @@ struct _GstV4l2VideoEncClass
 GType gst_v4l2_video_enc_get_type (void);
 
 
-gboolean gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
+void gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
     const char *codec, const gchar * basename, const gchar * device_path,
     GstCaps * sink_caps, GstCaps *codec_caps, GstCaps * src_caps);