[PATCH 6/7] modetest: Move connector and plane parsing to separate functions

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Jul 20 05:50:47 PDT 2012


This will make it easier to add additional parameters to the connector
and plane arguments.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 tests/modetest/modetest.c |   63 +++++++++++++++++++++++++-------------------
 1 files changed, 36 insertions(+), 27 deletions(-)

diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
index 2b3ffbc..3e0af17 100644
--- a/tests/modetest/modetest.c
+++ b/tests/modetest/modetest.c
@@ -503,6 +503,7 @@ struct plane {
 	uint32_t w, h;
 	unsigned int fb_id;
 	char format_str[5]; /* need to leave room for terminating \0 */
+	unsigned int fourcc;
 };
 
 static void
@@ -1602,16 +1603,10 @@ set_plane(struct kms_driver *kms, struct connector *c, struct plane *p)
 	uint32_t handles[4], pitches[4], offsets[4] = {0}; /* we only use [0] */
 	uint32_t plane_id = 0;
 	struct kms_bo *plane_bo;
-	uint32_t plane_flags = 0, format;
+	uint32_t plane_flags = 0;
 	int ret, crtc_x, crtc_y, crtc_w, crtc_h;
 	unsigned int i;
 
-	format = format_fourcc(p->format_str);
-	if (format == 0) {
-		fprintf(stderr, "Unknown format: %s\n", p->format_str);
-		return -1;
-	}
-
 	/* find an unused plane which can be connected to our crtc */
 	plane_resources = drmModeGetPlaneResources(fd);
 	if (!plane_resources) {
@@ -1642,13 +1637,13 @@ set_plane(struct kms_driver *kms, struct connector *c, struct plane *p)
 		return -1;
 	}
 
-	plane_bo = create_test_buffer(kms, format, p->w, p->h, handles,
+	plane_bo = create_test_buffer(kms, p->fourcc, p->w, p->h, handles,
 				      pitches, offsets, PATTERN_TILES);
 	if (plane_bo == NULL)
 		return -1;
 
 	/* just use single plane format for now.. */
-	if (drmModeAddFB2(fd, p->w, p->h, format,
+	if (drmModeAddFB2(fd, p->w, p->h, p->fourcc,
 			handles, pitches, offsets, &p->fb_id, plane_flags)) {
 		fprintf(stderr, "failed to add fb: %s\n", strerror(errno));
 		return -1;
@@ -1825,6 +1820,36 @@ extern char *optarg;
 extern int optind, opterr, optopt;
 static char optstr[] = "ecpmfs:P:v";
 
+static int parse_connector(struct connector *c, const char *arg)
+{
+	c->crtc = -1;
+
+	if (sscanf(arg, "%d:%64s", &c->id, &c->mode_str) == 2)
+		return 0;
+
+	if (sscanf(arg, "%d@%d:%64s", &c->id, &c->crtc, &c->mode_str) == 3)
+		return 0;
+
+	return -1;
+}
+
+static int parse_plane(struct plane *p, const char *arg)
+{
+	strcpy(p->format_str, "XR24");
+
+	if (sscanf(arg, "%d:%dx%d@%4s", &p->con_id, &p->w, &p->h, &p->format_str) != 4 &&
+	    sscanf(arg, "%d:%dx%d", &p->con_id, &p->w, &p->h) != 3)
+		return -1;
+
+	p->fourcc = format_fourcc(p->format_str);
+	if (p->fourcc == 0) {
+		fprintf(stderr, "unknown format %s\n", p->format_str);
+		return -1;
+	}
+
+	return 0;
+}
+
 void usage(char *name)
 {
 	fprintf(stderr, "usage: %s [-ecpmf]\n", name);
@@ -1899,28 +1924,12 @@ int main(int argc, char **argv)
 			test_vsync = 1;
 			break;
 		case 's':
-			con_args[count].crtc = -1;
-			if (sscanf(optarg, "%d:%64s",
-				   &con_args[count].id,
-				   con_args[count].mode_str) != 2 &&
-			    sscanf(optarg, "%d@%d:%64s",
-				   &con_args[count].id,
-				   &con_args[count].crtc,
-				   con_args[count].mode_str) != 3)
+			if (parse_connector(&con_args[count], optarg) < 0)
 				usage(argv[0]);
 			count++;				      
 			break;
 		case 'P':
-			strcpy(plane_args[plane_count].format_str, "XR24");
-			if (sscanf(optarg, "%d:%dx%d@%4s",
-					&plane_args[plane_count].con_id,
-					&plane_args[plane_count].w,
-					&plane_args[plane_count].h,
-					plane_args[plane_count].format_str) != 4 &&
-				sscanf(optarg, "%d:%dx%d",
-					&plane_args[plane_count].con_id,
-					&plane_args[plane_count].w,
-					&plane_args[plane_count].h) != 3)
+			if (parse_plane(&plane_args[plane_count], optarg) < 0)
 				usage(argv[0]);
 			plane_count++;
 			break;
-- 
1.7.8.6



More information about the dri-devel mailing list