summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2015-11-13 12:35:59 -0500
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2015-11-25 14:31:29 -0500
commit3cdc700e3e65feb0b78be2c5201c7d3f589cf72a (patch)
tree51b912efdbaf3e2ec4ffa8a1f78de737eb5c781c
parentdd4df554d5c2d4a61d09e7ec7ab5844d126474a9 (diff)
v4l2: Track /dev/video* to triggered required probe
If something in /dev/video* get added, removed or replaced, we need to probe the devices again in order to ensure the dynamic devices are up to date. https://bugzilla.gnome.org/show_bug.cgi?id=758085
-rw-r--r--configure.ac11
-rw-r--r--sys/v4l2/gstv4l2.c17
2 files changed, 26 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index 79683a17e..9acc41a1f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -555,6 +555,17 @@ if test x$HAVE_GST_V4L2 = xyes; then
fi
fi
+dnl Allow enabling v4l2 device probing
+AC_ARG_ENABLE(
+ v4l2-probe,
+ AC_HELP_STRING(
+ [--enable-v4l2-probe],
+ [enable V4L2 plugin to probe devices @<:@default=no@:>@]))
+if test "x$enable_v4l2_probe" = xyes; then
+ AC_DEFINE(GST_V4L2_ENABLE_PROBE, 1,
+ [Define if Video4Linux probe shall be run at plugin load])
+fi
+
dnl Check for X11
translit(dnm, m, l) AM_CONDITIONAL(USE_X, true)
AG_GST_CHECK_FEATURE(X, [X libraries and plugins],
diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c
index 8333eab41..97d617b82 100644
--- a/sys/v4l2/gstv4l2.c
+++ b/sys/v4l2/gstv4l2.c
@@ -54,6 +54,7 @@
GST_DEBUG_CATEGORY (v4l2_debug);
#define GST_CAT_DEFAULT v4l2_debug
+#ifdef GST_V4L2_ENABLE_PROBE
/* This is a minimalist probe, for speed, we only enumerate formats */
static GstCaps *
gst_v4l2_probe_template_caps (const gchar * device, gint video_fd,
@@ -192,12 +193,21 @@ gst_v4l2_probe_and_register (GstPlugin * plugin)
return ret;
}
+#endif
static gboolean
plugin_init (GstPlugin * plugin)
{
+ const gchar *paths[] = { "/dev", "/dev/v4l2", NULL };
+ const gchar *names[] = { "video", NULL };
+
GST_DEBUG_CATEGORY_INIT (v4l2_debug, "v4l2", 0, "V4L2 API calls");
+ /* Add some depedency, so the dynamic features get updated upon changes in
+ * /dev/video* */
+ gst_plugin_add_dependency (plugin,
+ NULL, paths, names, GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_PREFIX);
+
if (!gst_element_register (plugin, "v4l2src", GST_RANK_PRIMARY,
GST_TYPE_V4L2SRC) ||
!gst_element_register (plugin, "v4l2sink", GST_RANK_NONE,
@@ -205,9 +215,12 @@ plugin_init (GstPlugin * plugin)
!gst_element_register (plugin, "v4l2radio", GST_RANK_NONE,
GST_TYPE_V4L2RADIO) ||
!gst_device_provider_register (plugin, "v4l2deviceprovider",
- GST_RANK_PRIMARY, GST_TYPE_V4L2_DEVICE_PROVIDER) ||
+ GST_RANK_PRIMARY, GST_TYPE_V4L2_DEVICE_PROVIDER)
/* etc. */
- !gst_v4l2_probe_and_register (plugin))
+#ifdef GST_V4L2_ENABLE_PROBE
+ || !gst_v4l2_probe_and_register (plugin)
+#endif
+ )
return FALSE;
#ifdef ENABLE_NLS