1From 657a83673cf21db3f6c73fe89785687f6514ef83 Mon Sep 17 00:00:00 2001 2From: Jeffy Chen <jeffy.chen@rock-chips.com> 3Date: Wed, 11 May 2022 17:24:49 +0800 4Subject: [PATCH 08/12] v4l2src: Support setting max resolution 5 6Set env "GST_V4L2SRC_MAX_RESOLUTION" to limit resolution, for example: 7export GST_V4L2SRC_MAX_RESOLUTION=1920x1080 8 9Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 10--- 11 sys/v4l2/gstv4l2object.c | 19 +++++++++++++------ 12 1 file changed, 13 insertions(+), 6 deletions(-) 13 14diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c 15index 19ae751..09fabf0 100644 16--- a/sys/v4l2/gstv4l2object.c 17+++ b/sys/v4l2/gstv4l2object.c 18@@ -2810,6 +2810,7 @@ gst_v4l2_object_probe_caps_for_format (GstV4l2Object * v4l2object, 19 gint fd = v4l2object->video_fd; 20 struct v4l2_frmsizeenum size; 21 GList *results = NULL; 22+ guint32 max_width = G_MAXINT, max_height = G_MAXINT; 23 guint32 w, h; 24 25 if (pixelformat == GST_MAKE_FOURCC ('M', 'P', 'E', 'G')) { 26@@ -2817,6 +2818,12 @@ gst_v4l2_object_probe_caps_for_format (GstV4l2Object * v4l2object, 27 return ret; 28 } 29 30+ if (!V4L2_TYPE_IS_OUTPUT (v4l2object->type)) { 31+ const gchar *buf = g_getenv ("GST_V4L2SRC_MAX_RESOLUTION"); 32+ if (buf) 33+ sscanf (buf, "%ux%u", &max_width, &max_height); 34+ } 35+ 36 memset (&size, 0, sizeof (struct v4l2_frmsizeenum)); 37 size.index = 0; 38 size.pixel_format = pixelformat; 39@@ -2833,8 +2840,8 @@ gst_v4l2_object_probe_caps_for_format (GstV4l2Object * v4l2object, 40 GST_LOG_OBJECT (v4l2object->dbg_obj, "got discrete frame size %dx%d", 41 size.discrete.width, size.discrete.height); 42 43- w = MIN (size.discrete.width, G_MAXINT); 44- h = MIN (size.discrete.height, G_MAXINT); 45+ w = MIN (size.discrete.width, max_width); 46+ h = MIN (size.discrete.height, max_height); 47 48 if (w && h) { 49 tmp = 50@@ -2868,8 +2875,8 @@ gst_v4l2_object_probe_caps_for_format (GstV4l2Object * v4l2object, 51 52 w = MAX (size.stepwise.min_width, 1); 53 h = MAX (size.stepwise.min_height, 1); 54- maxw = MIN (size.stepwise.max_width, G_MAXINT); 55- maxh = MIN (size.stepwise.max_height, G_MAXINT); 56+ maxw = MIN (size.stepwise.max_width, max_width); 57+ maxh = MIN (size.stepwise.max_height, max_height); 58 59 step_w = MAX (size.stepwise.step_width, 1); 60 step_h = MAX (size.stepwise.step_height, 1); 61@@ -2909,8 +2916,8 @@ gst_v4l2_object_probe_caps_for_format (GstV4l2Object * v4l2object, 62 63 w = MAX (size.stepwise.min_width, 1); 64 h = MAX (size.stepwise.min_height, 1); 65- maxw = MIN (size.stepwise.max_width, G_MAXINT); 66- maxh = MIN (size.stepwise.max_height, G_MAXINT); 67+ maxw = MIN (size.stepwise.max_width, max_width); 68+ maxh = MIN (size.stepwise.max_height, max_height); 69 70 tmp = 71 gst_v4l2_object_probe_caps_for_format_and_size (v4l2object, pixelformat, 72-- 732.20.1 74 75