Skip to contentSkip to conversation

v4l: Bring back array_size parameter to v4l2_find_nearest_size

PATCH Superseded Sakari Ailus 2 participants 5 messages Mar 23, 2018

Subsystems (4)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Sakari Ailus

author maintainer
#0 lore raw

PATCH 1/1 v4l: Bring back array_size parameter to v4l2_find_nearest_size

An older version of the driver patches were merged accidentally which resulted in missing the array_size parameter that tells the length of the array that contains the different supported sizes.

Bring it back to v4l2_find_nearest size and make the corresponding change for the drivers using it as well.

---
Hi Mauro,

Here's the patch I mentioned. It restores the intended state of the v4l2_find_nearest_size() API as it was reviewed and acked (by Hans).

This time the exact patch is tested for vivid.

 drivers/media/i2c/ov13858.c                  | 5 +++--
 drivers/media/i2c/ov5670.c                   | 5 +++--
 drivers/media/platform/vivid/vivid-vid-cap.c | 5 +++--
 include/media/v4l2-common.h                  | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/media/i2c/ov13858.c +3 -2
index 30ee9f71bf0d..420af1e32d4e 100644
@@ -1375,8 +1375,9 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
 	if (fmt->format.code != MEDIA_BUS_FMT_SGRBG10_1X10)
 		fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);
 	ov13858_update_pad_format(mode, fmt);
 	if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
 		framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
drivers/media/i2c/ov5670.c +3 -2
index 556a95c30781..028abc860387 100644
@@ -2229,8 +2229,9 @@ static int ov5670_set_pad_format(struct v4l2_subdev *sd,
 
 	fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);
 	ov5670_update_pad_format(mode, fmt);
 	if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
 		*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
drivers/media/platform/vivid/vivid-vid-cap.c +3 -2
index 01c703683657..1599159f2574 100644
@@ -561,8 +561,9 @@ int vivid_try_fmt_vid_cap(struct file *file, void *priv,
 	mp->field = vivid_field_cap(dev, mp->field);
 	if (vivid_is_webcam(dev)) {
 		const struct v4l2_frmsize_discrete *sz =
-			v4l2_find_nearest_size(webcam_sizes, width, height,
-					       mp->width, mp->height);
+			v4l2_find_nearest_size(webcam_sizes,
+					       VIVID_WEBCAM_SIZES, width,
+					       height, mp->width, mp->height);
 
 		w = sz->width;
 		h = sz->height;
include/media/v4l2-common.h +3 -2
index 54b689247937..160bca96d524 100644
@@ -320,6 +320,7 @@ void v4l_bound_align_image(unsigned int *width, unsigned int wmin,
  *	set of resolutions contained in an array of a driver specific struct.
  *
  * @array: a driver specific array of image sizes
+ * @array_size: the length of the driver specific array of image sizes
  * @width_field: the name of the width field in the driver specific struct
  * @height_field: the name of the height field in the driver specific struct
  * @width: desired width.
@@ -332,13 +333,13 @@ void v4l_bound_align_image(unsigned int *width, unsigned int wmin,
  *
  * Returns the best match or NULL if the length of the array is zero.
  */
-#define v4l2_find_nearest_size(array, width_field, height_field, \
+#define v4l2_find_nearest_size(array, array_size, width_field, height_field, \
 			       width, height)				\
 	({								\
 		BUILD_BUG_ON(sizeof((array)->width_field) != sizeof(u32) || \
 			     sizeof((array)->height_field) != sizeof(u32)); \
 		(typeof(&(*(array))))__v4l2_find_nearest_size(		\
-			(array), ARRAY_SIZE(array), sizeof(*(array)),	\
+			(array), array_size, sizeof(*(array)),		\
 			offsetof(typeof(*(array)), width_field),	\
 			offsetof(typeof(*(array)), height_field),	\
 			width, height);					\
Signature · 1 line
2.11.0
#1 lore raw

Em Fri, 23 Mar 2018 15:48:41 +0200
Sakari Ailus <[email protected]> escreveu:

Quoted 27 lines

An older version of the driver patches were merged accidentally which resulted in missing the array_size parameter that tells the length of the array that contains the different supported sizes.

Bring it back to v4l2_find_nearest size and make the corresponding change for the drivers using it as well.

---
Hi Mauro,

Here's the patch I mentioned. It restores the intended state of the v4l2_find_nearest_size() API as it was reviewed and acked (by Hans).

This time the exact patch is tested for vivid.

 drivers/media/i2c/ov13858.c                  | 5 +++--
 drivers/media/i2c/ov5670.c                   | 5 +++--
 drivers/media/platform/vivid/vivid-vid-cap.c | 5 +++--
 include/media/v4l2-common.h                  | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/media/i2c/ov13858.c +0 -0
index 30ee9f71bf0d..420af1e32d4e 100644

drivers/media/i2c/ov13858.c ov13858_set_pad_format(struct v4l2_subdev *sd, · line 1380

Quoted 8 lines
drivers/media/i2c/ov13858.c +3 -2
@@ -1375,8 +1375,9 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
 	if (fmt->format.code != MEDIA_BUS_FMT_SGRBG10_1X10)
 		fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);

Nitpick... I find ugly and arder to mentally parse things like the above, where all arguments are on the next line. Also, it doesn't follow the coding style, as the parameters should be aligned with the parenthesis.

It would be better coded as:

	mode = v4l2_find_nearest_size(supported_modes, 
				      ARRAY_SIZE(supported_modes),
				      width, height,
				      fmt->format.width, fmt->format.height);

Same applies to the other occurrences of it.

Quoted 53 lines
drivers/media/i2c/ov13858.c +0 -0
 	ov13858_update_pad_format(mode, fmt);
 	if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
 		framefmt = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
drivers/media/i2c/ov5670.c +3 -2
index 556a95c30781..028abc860387 100644
@@ -2229,8 +2229,9 @@ static int ov5670_set_pad_format(struct v4l2_subdev *sd,
 
 	fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);
 	ov5670_update_pad_format(mode, fmt);
 	if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
 		*v4l2_subdev_get_try_format(sd, cfg, fmt->pad) = fmt->format;
drivers/media/platform/vivid/vivid-vid-cap.c +3 -2
index 01c703683657..1599159f2574 100644
@@ -561,8 +561,9 @@ int vivid_try_fmt_vid_cap(struct file *file, void *priv,
 	mp->field = vivid_field_cap(dev, mp->field);
 	if (vivid_is_webcam(dev)) {
 		const struct v4l2_frmsize_discrete *sz =
-			v4l2_find_nearest_size(webcam_sizes, width, height,
-					       mp->width, mp->height);
+			v4l2_find_nearest_size(webcam_sizes,
+					       VIVID_WEBCAM_SIZES, width,
+					       height, mp->width, mp->height);
 
 		w = sz->width;
 		h = sz->height;
include/media/v4l2-common.h +2 -1
index 54b689247937..160bca96d524 100644
@@ -320,6 +320,7 @@ void v4l_bound_align_image(unsigned int *width, unsigned int wmin,
  *	set of resolutions contained in an array of a driver specific struct.
  *
  * @array: a driver specific array of image sizes
+ * @array_size: the length of the driver specific array of image sizes
  * @width_field: the name of the width field in the driver specific struct
  * @height_field: the name of the height field in the driver specific struct
  * @width: desired width.
@@ -332,13 +333,13 @@ void v4l_bound_align_image(unsigned int *width, unsigned int wmin,
  *
  * Returns the best match or NULL if the length of the array is zero.
  */
-#define v4l2_find_nearest_size(array, width_field, height_field, \
+#define v4l2_find_nearest_size(array, array_size, width_field, height_field, \

include/media/v4l2-common.h void v4l_bound_align_image(unsigned int *width, unsigned int wmin, · line 345

Quoted 10 lines
include/media/v4l2-common.h +1 -1
 			       width, height)				\
 	({								\
 		BUILD_BUG_ON(sizeof((array)->width_field) != sizeof(u32) || \
 			     sizeof((array)->height_field) != sizeof(u32)); \
 		(typeof(&(*(array))))__v4l2_find_nearest_size(		\
-			(array), ARRAY_SIZE(array), sizeof(*(array)),	\
+			(array), array_size, sizeof(*(array)),		\
 			offsetof(typeof(*(array)), width_field),	\
 			offsetof(typeof(*(array)), height_field),	\
 			width, height);					\

Thanks,
Mauro

#2 lore raw

Em Fri, 23 Mar 2018 11:07:42 -0300
Mauro Carvalho Chehab <[email protected]> escreveu:

Quoted 33 lines

Em Fri, 23 Mar 2018 15:48:41 +0200
Sakari Ailus <[email protected]> escreveu:

Quoted 30 lines

An older version of the driver patches were merged accidentally which resulted in missing the array_size parameter that tells the length of the array that contains the different supported sizes.

Bring it back to v4l2_find_nearest size and make the corresponding change for the drivers using it as well.

---
Hi Mauro,

Here's the patch I mentioned. It restores the intended state of the v4l2_find_nearest_size() API as it was reviewed and acked (by Hans).

This time the exact patch is tested for vivid.

 drivers/media/i2c/ov13858.c                  | 5 +++--
 drivers/media/i2c/ov5670.c                   | 5 +++--
 drivers/media/platform/vivid/vivid-vid-cap.c | 5 +++--
 include/media/v4l2-common.h                  | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/media/i2c/ov13858.c +0 -0
index 30ee9f71bf0d..420af1e32d4e 100644
@@ -1375,8 +1375,9 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
 	if (fmt->format.code != MEDIA_BUS_FMT_SGRBG10_1X10)
 		fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
Quoted 8 lines

drivers/media/i2c/ov13858.c ov13858_set_pad_format(struct v4l2_subdev *sd, · line 1380

Quoted 5 lines
drivers/media/i2c/ov13858.c +3 -2
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);  

Nitpick... I find ugly and arder to mentally parse things like the above,

	"arder" -> "harder"

My keyboard sometimes is losing keystrokes. It seems it is approaching the time to replace it again.

Thanks,
Mauro

author maintainer
#3 lore raw
Quoted 44 lines · Mauro Carvalho Chehab

Em Fri, 23 Mar 2018 11:07:42 -0300
Mauro Carvalho Chehab <[email protected]> escreveu:

Quoted 41 lines

Em Fri, 23 Mar 2018 15:48:41 +0200
Sakari Ailus <[email protected]> escreveu:

Quoted 27 lines

An older version of the driver patches were merged accidentally which resulted in missing the array_size parameter that tells the length of the array that contains the different supported sizes.

Bring it back to v4l2_find_nearest size and make the corresponding change for the drivers using it as well.

---
Hi Mauro,

Here's the patch I mentioned. It restores the intended state of the v4l2_find_nearest_size() API as it was reviewed and acked (by Hans).

This time the exact patch is tested for vivid.

 drivers/media/i2c/ov13858.c                  | 5 +++--
 drivers/media/i2c/ov5670.c                   | 5 +++--
 drivers/media/platform/vivid/vivid-vid-cap.c | 5 +++--
 include/media/v4l2-common.h                  | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/media/i2c/ov13858.c +0 -0
index 30ee9f71bf0d..420af1e32d4e 100644

drivers/media/i2c/ov13858.c ov13858_set_pad_format(struct v4l2_subdev *sd, · line 1380

Quoted 8 lines
drivers/media/i2c/ov13858.c +3 -2
@@ -1375,8 +1375,9 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
 	if (fmt->format.code != MEDIA_BUS_FMT_SGRBG10_1X10)
 		fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);  

Nitpick... I find ugly and arder to mentally parse things like the above,

Ok, I'll send v2.

Quoted 5 lines
	"arder" -> "harder"

My keyboard sometimes is losing keystrokes. It seems it is approaching the time to replace it again.

Perhaps an IBM model M? I once tried one but my fingers started to ache. :-9 So I'm still using my Keytronic keyboard from 1994. :-D

Signature · 4 lines
Cheers,

Sakari Ailus
[email protected]
#4 lore raw

Em Fri, 23 Mar 2018 17:31:53 +0200
Sakari Ailus <[email protected]> escreveu:

Quoted 46 lines · Mauro Carvalho Chehab
Quoted 44 lines

Em Fri, 23 Mar 2018 11:07:42 -0300
Mauro Carvalho Chehab <[email protected]> escreveu:

Quoted 41 lines

Em Fri, 23 Mar 2018 15:48:41 +0200
Sakari Ailus <[email protected]> escreveu:

Quoted 27 lines

An older version of the driver patches were merged accidentally which resulted in missing the array_size parameter that tells the length of the array that contains the different supported sizes.

Bring it back to v4l2_find_nearest size and make the corresponding change for the drivers using it as well.

---
Hi Mauro,

Here's the patch I mentioned. It restores the intended state of the v4l2_find_nearest_size() API as it was reviewed and acked (by Hans).

This time the exact patch is tested for vivid.

 drivers/media/i2c/ov13858.c                  | 5 +++--
 drivers/media/i2c/ov5670.c                   | 5 +++--
 drivers/media/platform/vivid/vivid-vid-cap.c | 5 +++--
 include/media/v4l2-common.h                  | 5 +++--
 4 files changed, 12 insertions(+), 8 deletions(-)
drivers/media/i2c/ov13858.c +0 -0
index 30ee9f71bf0d..420af1e32d4e 100644

drivers/media/i2c/ov13858.c ov13858_set_pad_format(struct v4l2_subdev *sd, · line 1380

Quoted 8 lines
drivers/media/i2c/ov13858.c +3 -2
@@ -1375,8 +1375,9 @@ ov13858_set_pad_format(struct v4l2_subdev *sd,
 	if (fmt->format.code != MEDIA_BUS_FMT_SGRBG10_1X10)
 		fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
 
-	mode = v4l2_find_nearest_size(supported_modes, width, height,
-				      fmt->format.width, fmt->format.height);
+	mode = v4l2_find_nearest_size(
+		supported_modes, ARRAY_SIZE(supported_modes), width, height,
+		fmt->format.width, fmt->format.height);    

Nitpick... I find ugly and arder to mentally parse things like the above,

Quoted 1 line

Ok, I'll send v2.

Thanks!

Quoted 8 lines
Quoted 6 lines

	"arder" -> "harder"

My keyboard sometimes is losing keystrokes. It seems it is approaching the time to replace it again.

Perhaps an IBM model M? I once tried one but my fingers started to ache.

I used one for a while... Works fine, but yeah, keys are havier.

Quoted 1 line

:-9 So I'm still using my Keytronic keyboard from 1994. :-D

Good for you!

I'm using a Logitech K520 wireless keyboard here. That's my second one. It works great when it is new, but after too much usage, keys start to glue on its back :-(

Yet, I loved the idea of having a wireless one, and use the same mini-stick for both mouse and kbd. Makes easy when I need to plug on some other device.

Anyway, I can't buy keyboards in BR, as it will come with a "weird" layout.

Thanks,
Mauro