From 55a8e772698a36c176ad7c5b02559594be19458d Mon Sep 17 00:00:00 2001
|
From: Jeffy Chen <jeffy.chen@rock-chips.com>
|
Date: Wed, 11 May 2022 17:06:25 +0800
|
Subject: [PATCH 07/11] v4l2src: Filter out unavailable RK sources
|
|
Use env "GST_V4L2SRC_RK_DEVICES" to specify available RK sources.
|
|
Default is "_mainpath:_selfpath:_bypass:_scale".
|
|
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
|
---
|
sys/v4l2/gstv4l2deviceprovider.c | 38 ++++++++++++++++++++++++++++++++
|
1 file changed, 38 insertions(+)
|
|
diff --git a/sys/v4l2/gstv4l2deviceprovider.c b/sys/v4l2/gstv4l2deviceprovider.c
|
index 7c2c87fea..291495506 100644
|
--- a/sys/v4l2/gstv4l2deviceprovider.c
|
+++ b/sys/v4l2/gstv4l2deviceprovider.c
|
@@ -146,6 +146,44 @@ gst_v4l2_device_provider_probe_device (GstV4l2DeviceProvider * provider,
|
|
type = GST_V4L2_DEVICE_TYPE_SOURCE;
|
v4l2obj->skip_try_fmt_probes = TRUE;
|
+
|
+ if (!strncmp ((char *) v4l2obj->vcap.driver, "rk", strlen("rk"))) {
|
+ /* Filter out unavailable RK source devices */
|
+ const gchar *devices, *ptr;
|
+ gchar pattern[64];
|
+ gboolean found = FALSE;
|
+
|
+ devices = g_getenv ("GST_V4L2SRC_RK_DEVICES");
|
+ if (!devices)
|
+ devices = g_getenv ("GST_V4L2SRC_DEVICES");
|
+ if (!devices)
|
+ devices = "_mainpath:_selfpath:_bypass:_scale";
|
+
|
+ while (devices && devices[0]) {
|
+ while (devices[0] == ':')
|
+ devices ++;
|
+
|
+ if (!sscanf (devices, "%32[^:]", pattern))
|
+ break;
|
+
|
+ devices += strlen (pattern);
|
+
|
+ if (!(ptr = strstr (device_name, pattern)))
|
+ continue;
|
+
|
+ /* Name ends with pattern[0-9] */
|
+ ptr += strlen (pattern);
|
+ if (ptr[0] == '\0' || (ptr[0] >= '0' && ptr[0] <= '9')) {
|
+ found = TRUE;
|
+ break;
|
+ }
|
+ }
|
+
|
+ if (!found) {
|
+ GST_WARNING ("%s(%s) been ignored", device_path, device_name);
|
+ goto destroy;
|
+ }
|
+ }
|
}
|
|
if (v4l2obj->device_caps &
|
--
|
2.20.1
|