From patchwork Fri Jun 14 21:34:43 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 2725021 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 57FDB9F8E4 for ; Fri, 14 Jun 2013 21:51:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6C935202F9 for ; Fri, 14 Jun 2013 21:51:15 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 4994A202C6 for ; Fri, 14 Jun 2013 21:51:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 53308E610B for ; Fri, 14 Jun 2013 14:51:14 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [95.142.166.194]) by gabe.freedesktop.org (Postfix) with ESMTP id 79F08E5EF1 for ; Fri, 14 Jun 2013 14:35:16 -0700 (PDT) Received: from avalon.ideasonboard.com (unknown [91.177.128.27]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id AC94B35A6B; Fri, 14 Jun 2013 23:35:07 +0200 (CEST) From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Subject: [PATCH v6 09/23] modetest: Allow specifying plane position Date: Fri, 14 Jun 2013 23:34:43 +0200 Message-Id: <1371245697-29504-10-git-send-email-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 1.8.1.5 In-Reply-To: <1371245697-29504-1-git-send-email-laurent.pinchart@ideasonboard.com> References: <1371245697-29504-1-git-send-email-laurent.pinchart@ideasonboard.com> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Extend the -P option to allow specifying the plane x and y offsets. The position is optional, if not specified the plane will be positioned at the center of the screen as before. Signed-off-by: Laurent Pinchart --- tests/modetest/modetest.c | 67 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 858d480..897a66c 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -40,6 +40,7 @@ #include "config.h" #include +#include #include #include #include @@ -645,6 +646,8 @@ struct connector_arg { struct plane_arg { uint32_t con_id; /* the id of connector to bind to */ + bool has_position; + int32_t x, y; uint32_t w, h; unsigned int fb_id; char format_str[5]; /* need to leave room for terminating \0 */ @@ -855,11 +858,16 @@ set_plane(struct kms_driver *kms, struct connector_arg *c, struct plane_arg *p) return -1; } - /* ok, boring.. but for now put in middle of screen: */ - crtc_x = c->mode->hdisplay / 3; - crtc_y = c->mode->vdisplay / 3; - crtc_w = crtc_x; - crtc_h = crtc_y; + if (!p->has_position) { + /* Default to the middle of the screen */ + crtc_x = (c->mode->hdisplay - p->w) / 2; + crtc_y = (c->mode->vdisplay - p->h) / 2; + } else { + crtc_x = p->x; + crtc_y = p->y; + } + crtc_w = p->w; + crtc_h = p->h; /* note src coords (last 4 args) are in Q16 format */ if (drmModeSetPlane(fd, plane_id, c->crtc, p->fb_id, @@ -1065,18 +1073,47 @@ static int parse_connector(struct connector_arg *c, const char *arg) return 0; } -static int parse_plane(struct plane_arg *p, const char *arg) +static int parse_plane(struct plane_arg *plane, const char *p) { - strcpy(p->format_str, "XR24"); + char *end; - 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; + memset(plane, 0, sizeof *plane); - p->fourcc = format_fourcc(p->format_str); - if (p->fourcc == 0) { - fprintf(stderr, "unknown format %s\n", p->format_str); - return -1; + plane->con_id = strtoul(p, &end, 10); + if (*end != ':') + return -EINVAL; + + p = end + 1; + plane->w = strtoul(p, &end, 10); + if (*end != 'x') + return -EINVAL; + + p = end + 1; + plane->h = strtoul(p, &end, 10); + + if (*end == '+' || *end == '-') { + plane->x = strtol(end, &end, 10); + if (*end != '+' && *end != '-') + return -EINVAL; + plane->y = strtol(end, &end, 10); + + plane->has_position = true; + } + + if (*end == '@') { + p = end + 1; + if (strlen(p) != 4) + return -EINVAL; + + strcpy(plane->format_str, p); + } else { + strcpy(plane->format_str, "XR24"); + } + + plane->fourcc = format_fourcc(plane->format_str); + if (plane->fourcc == 0) { + fprintf(stderr, "unknown format %s\n", plane->format_str); + return -EINVAL; } return 0; @@ -1105,7 +1142,7 @@ static void usage(char *name) fprintf(stderr, "\t-p\tlist CRTCs and planes (pipes)\n"); fprintf(stderr, "\n Test options:\n\n"); - fprintf(stderr, "\t-P :x[@]\tset a plane\n"); + fprintf(stderr, "\t-P :x[++][@]\tset a plane\n"); fprintf(stderr, "\t-s [@]:[@]\tset a mode\n"); fprintf(stderr, "\t-v\ttest vsynced page flipping\n"); fprintf(stderr, "\t-w ::\tset property\n");