diff mbox series

[vsp-tests,06/16] gen-image: Split struct params into CSC and packing parameters

Message ID 20250409004758.11014-7-laurent.pinchart@ideasonboard.com (mailing list archive)
State New
Delegated to: Geert Uytterhoeven
Headers show
Series Add color space conversion test | expand

Commit Message

Laurent Pinchart April 9, 2025, 12:47 a.m. UTC
To prepare for improvements to the format conversion code, split the
struct params into CSC parameters and packing parameters.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/gen-image.c | 75 +++++++++++++++++++++++++------------------------
 1 file changed, 39 insertions(+), 36 deletions(-)
diff mbox series

Patch

diff --git a/src/gen-image.c b/src/gen-image.c
index 50c10109289b..40773c8ef967 100644
--- a/src/gen-image.c
+++ b/src/gen-image.c
@@ -106,10 +106,13 @@  struct image {
 	void *data;
 };
 
-struct params {
-	unsigned int alpha;
+struct csc_params {
 	enum v4l2_ycbcr_encoding encoding;
 	enum v4l2_quantization quantization;
+};
+
+struct pack_params {
+	unsigned int alpha;
 	bool no_chroma_average;
 };
 
@@ -134,7 +137,8 @@  struct options {
 	bool vflip;
 	bool rotate;
 	unsigned int compose;
-	struct params params;
+	struct csc_params csc_params;
+	struct pack_params pack_params;
 	bool crop;
 	struct image_rect inputcrop;
 	enum histogram_type histo_type;
@@ -461,7 +465,7 @@  static int image_write(const struct image *image, const char *filename)
  */
 
 static void image_format_rgb8(const struct image *input, struct image *output,
-			      const struct params *params)
+			      const struct pack_params *params)
 {
 	const uint8_t *idata = input->data;
 	uint8_t *odata = output->data;
@@ -484,7 +488,7 @@  static void image_format_rgb8(const struct image *input, struct image *output,
 }
 
 static void image_format_rgb16(const struct image *input, struct image *output,
-			       const struct params *params)
+			       const struct pack_params *params)
 {
 	const struct format_info *format = output->format;
 	const uint8_t *idata = input->data;
@@ -508,7 +512,7 @@  static void image_format_rgb16(const struct image *input, struct image *output,
 }
 
 static void image_format_rgb24(const struct image *input, struct image *output,
-			       const struct params *params)
+			       const struct pack_params *params)
 {
 	struct color_rgb24 {
 		unsigned int value:24;
@@ -540,7 +544,7 @@  static void image_format_rgb24(const struct image *input, struct image *output,
 }
 
 static void image_format_rgb32(const struct image *input, struct image *output,
-			       const struct params *params)
+			       const struct pack_params *params)
 {
 	const struct format_info *format = output->format;
 	const uint8_t *idata = input->data;
@@ -564,13 +568,13 @@  static void image_format_rgb32(const struct image *input, struct image *output,
 }
 
 static void image_format_hsv24(const struct image *input, struct image *output,
-			       const struct params *params)
+			       const struct pack_params *params)
 {
 	memcpy(output->data, input->data, input->width * input->height * 3);
 }
 
 static void image_format_hsv32(const struct image *input, struct image *output,
-			       const struct params *params)
+			       const struct pack_params *params)
 {
 	const struct format_info *format = output->format;
 	const uint8_t *idata = input->data;
@@ -598,7 +602,7 @@  static void image_format_hsv32(const struct image *input, struct image *output,
  * chroma components of the two pixels to match the hardware behaviour.
  */
 static void image_format_yuv_packed(const struct image *input, struct image *output,
-				    const struct params *params)
+				    const struct pack_params *params)
 {
 	const struct format_info *format = output->format;
 	const uint8_t *idata = input->data;
@@ -637,7 +641,7 @@  static void image_format_yuv_packed(const struct image *input, struct image *out
 }
 
 static void image_format_yuv_planar(const struct image *input, struct image *output,
-				    const struct params *params)
+				    const struct pack_params *params)
 {
 	const struct format_info *format = output->format;
 	const uint8_t *idata;
@@ -797,7 +801,7 @@  static void colorspace_rgb2ycbcr(int m[3][3],
 static void image_colorspace_rgb_to_yuv(const struct image *input,
 					struct image *output,
 					const struct format_info *format,
-					const struct params *params)
+					const struct csc_params *params)
 {
 	int matrix[3][3];
 	const uint8_t *idata = input->data;
@@ -942,7 +946,7 @@  static void hst_rgb_to_hsv(const uint8_t rgb[3], uint8_t hsv[3])
 
 static void image_rgb_to_hsv(const struct image *input,
 			     struct image *output,
-			     const struct params *params)
+			     const struct csc_params *params)
 {
 	const uint8_t *idata = input->data;
 	uint8_t *odata = output->data;
@@ -999,8 +1003,7 @@  static void image_scale_bilinear(const struct image *input, struct image *output
 #undef _C2
 }
 
-static void image_scale(const struct image *input, struct image *output,
-			const struct params *params)
+static void image_scale(const struct image *input, struct image *output)
 {
 	image_scale_bilinear(input, output);
 }
@@ -1564,7 +1567,7 @@  static int process(const struct options *options)
 		}
 
 		image_colorspace_rgb_to_yuv(input, yuv, options->input_format,
-					    &options->params);
+					    &options->csc_params);
 		image_delete(input);
 		input = yuv;
 	} else if (options->input_format->rgb.bpp < 24) {
@@ -1604,7 +1607,7 @@  static int process(const struct options *options)
 			goto done;
 		}
 
-		image_scale(input, scaled, &options->params);
+		image_scale(input, scaled);
 		image_delete(input);
 		input = scaled;
 	}
@@ -1715,9 +1718,9 @@  static int process(const struct options *options)
 
 		if (options->output_format->type == FORMAT_YUV)
 			image_colorspace_rgb_to_yuv(input, converted, format,
-						    &options->params);
+						    &options->csc_params);
 		else
-			image_rgb_to_hsv(input, converted, &options->params);
+			image_rgb_to_hsv(input, converted, &options->csc_params);
 
 		image_delete(input);
 		input = converted;
@@ -1733,16 +1736,16 @@  static int process(const struct options *options)
 	case FORMAT_RGB:
 		switch (output->format->rgb.bpp) {
 		case 8:
-			image_format_rgb8(input, output, &options->params);
+			image_format_rgb8(input, output, &options->pack_params);
 			break;
 		case 16:
-			image_format_rgb16(input, output, &options->params);
+			image_format_rgb16(input, output, &options->pack_params);
 			break;
 		case 24:
-			image_format_rgb24(input, output, &options->params);
+			image_format_rgb24(input, output, &options->pack_params);
 			break;
 		case 32:
-			image_format_rgb32(input, output, &options->params);
+			image_format_rgb32(input, output, &options->pack_params);
 			break;
 		default:
 			ret = -EINVAL;
@@ -1753,10 +1756,10 @@  static int process(const struct options *options)
 	case FORMAT_HSV:
 		switch (output->format->hsv.bpp) {
 		case 24:
-			image_format_hsv24(input, output, &options->params);
+			image_format_hsv24(input, output, &options->pack_params);
 			break;
 		case 32:
-			image_format_hsv32(input, output, &options->params);
+			image_format_hsv32(input, output, &options->pack_params);
 			break;
 		default:
 			ret = -EINVAL;
@@ -1767,11 +1770,11 @@  static int process(const struct options *options)
 	case FORMAT_YUV:
 		switch (output->format->yuv.num_planes) {
 		case 1:
-			image_format_yuv_packed(input, output, &options->params);
+			image_format_yuv_packed(input, output, &options->pack_params);
 			break;
 		case 2:
 		case 3:
-			image_format_yuv_planar(input, output, &options->params);
+			image_format_yuv_planar(input, output, &options->pack_params);
 			break;
 		default:
 			ret = -EINVAL;
@@ -2002,9 +2005,9 @@  static int parse_args(struct options *options, int argc, char *argv[])
 	memset(options, 0, sizeof(*options));
 	options->input_format = format_by_name("RGB24");
 	options->output_format = format_by_name("RGB24");
-	options->params.alpha = 255;
-	options->params.encoding = V4L2_YCBCR_ENC_601;
-	options->params.quantization = V4L2_QUANTIZATION_LIM_RANGE;
+	options->pack_params.alpha = 255;
+	options->csc_params.encoding = V4L2_YCBCR_ENC_601;
+	options->csc_params.quantization = V4L2_QUANTIZATION_LIM_RANGE;
 	options->histo_type = HISTOGRAM_HGO;
 
 	opterr = 0;
@@ -2031,7 +2034,7 @@  static int parse_args(struct options *options, int argc, char *argv[])
 				return 1;
 			}
 
-			options->params.alpha = alpha;
+			options->pack_params.alpha = alpha;
 			break;
 		}
 
@@ -2044,14 +2047,14 @@  static int parse_args(struct options *options, int argc, char *argv[])
 			  break;
 
 		case 'C':
-			  options->params.no_chroma_average = true;
+			  options->pack_params.no_chroma_average = true;
 			  break;
 
 		case 'e':
 			if (!strcmp(optarg, "BT.601")) {
-				options->params.encoding = V4L2_YCBCR_ENC_601;
+				options->csc_params.encoding = V4L2_YCBCR_ENC_601;
 			} else if (!strcmp(optarg, "REC.709")) {
-				options->params.encoding = V4L2_YCBCR_ENC_709;
+				options->csc_params.encoding = V4L2_YCBCR_ENC_709;
 			} else {
 				printf("Invalid encoding value '%s'\n", optarg);
 				return 1;
@@ -2108,9 +2111,9 @@  static int parse_args(struct options *options, int argc, char *argv[])
 
 		case 'q':
 			if (!strcmp(optarg, "limited")) {
-				options->params.quantization = V4L2_QUANTIZATION_LIM_RANGE;
+				options->csc_params.quantization = V4L2_QUANTIZATION_LIM_RANGE;
 			} else if (!strcmp(optarg, "full")) {
-				options->params.quantization = V4L2_QUANTIZATION_FULL_RANGE;
+				options->csc_params.quantization = V4L2_QUANTIZATION_FULL_RANGE;
 			} else {
 				printf("Invalid quantization value '%s'\n", optarg);
 				return 1;