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