From patchwork Mon Nov 2 12:11:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 28763 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id B5BD5C324C for ; Mon, 2 Nov 2026 12:11:48 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6081269211; Mon, 2 Nov 2026 13:11:45 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="sC3fahqx"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id E8F99691F3 for ; Mon, 2 Nov 2026 13:11:41 +0100 (CET) Received: from ping.linuxembedded.co.uk (cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 89D492022; Mon, 2 Nov 2026 13:09:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1793621365; bh=PhVjTeqOkuP0+xFtpKqTFEW6FI4+xjj56T9zFZmL9Ew=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=sC3fahqxMo0A7+cfHXXHtALbNr2Sl7AE1QNqCy8MSBJ6txgyPTrLwyUrbXJfkJutN tlk24CIU84hdfndjB/5oefaQEm1dtGcuHSgdFmbnzmjl0Uy47Zyaa0ysSiToyyJ2WJ xaaWOpX5IG2PCjGnxHmDXd501BfQosD7UQG74gyA= From: Kieran Bingham Date: Mon, 02 Nov 2026 12:11:35 +0000 Subject: [PATCH v2 3/3] apps: cam: Support full orientation options MIME-Version: 1.0 Message-Id: <20261102-kbingham-orientation-v2-3-21b1cdd0d167@ideasonboard.com> References: <20261102-kbingham-orientation-v2-0-21b1cdd0d167@ideasonboard.com> In-Reply-To: <20261102-kbingham-orientation-v2-0-21b1cdd0d167@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Kieran Bingham , Jacopo Mondi , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1793621500; l=2689; i=kieran.bingham@ideasonboard.com; s=20260207; h=from:subject:message-id; bh=PhVjTeqOkuP0+xFtpKqTFEW6FI4+xjj56T9zFZmL9Ew=; b=h63ZcA2512wxKv5Hb05G67QK/d1XeaIADysDtHeRl6060lANyXmCswOs1/hpU1EhuBJI2JdWm 0vD1zeNIjVxCcIoCeNP2G8DmHxQhUh18B6AA/7V3BvR80CJMD2Lc+Y/ X-Developer-Key: i=kieran.bingham@ideasonboard.com; a=ed25519; pk=FVXKN7YuwHc6UtbRUeTMAmranfsQomA+vnilfglWdaY= X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The Orientation control was implemented in commit 7e5f1e1cedf5 ("apps: cam: Add option to set stream orientation") but did not fully add all of the supported Orientation types. The upcoming dewarp support on RkISP1 will provide full rotation implementation options, including previously difficult '90' degree rotations. Extend the cam application to support setting any of the valid options. The existing 'mirror' and 'flip' options are not consistent with the rest of the option definitions, but maintain them as useful aliases to their corresponding type. Reviewed-by: Jacopo Mondi Reviewed-by: Barnabás Pőcze Signed-off-by: Kieran Bingham --- v2: - drop fixes tag --- src/apps/cam/camera_session.cpp | 9 +++++++++ src/apps/cam/main.cpp | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp index 17444a217bec..5f66eca22ad5 100644 --- a/src/apps/cam/camera_session.cpp +++ b/src/apps/cam/camera_session.cpp @@ -97,7 +97,16 @@ CameraSession::CameraSession(CameraManager *cm, std::string orientOpt = options_[OptOrientation].toString(); static const std::map orientations{ { "rot0", libcamera::Orientation::Rotate0 }, + { "rot90", libcamera::Orientation::Rotate90 }, { "rot180", libcamera::Orientation::Rotate180 }, + { "rot270", libcamera::Orientation::Rotate270 }, + + { "rot0mirror", libcamera::Orientation::Rotate0Mirror }, + { "rot90mirror", libcamera::Orientation::Rotate90Mirror }, + { "rot180mirror", libcamera::Orientation::Rotate180Mirror }, + { "rot270mirror", libcamera::Orientation::Rotate270Mirror }, + + /* Helpful aliases */ { "mirror", libcamera::Orientation::Rotate0Mirror }, { "flip", libcamera::Orientation::Rotate180Mirror }, }; diff --git a/src/apps/cam/main.cpp b/src/apps/cam/main.cpp index 17b30fa0e061..54d166884f4d 100644 --- a/src/apps/cam/main.cpp +++ b/src/apps/cam/main.cpp @@ -146,7 +146,10 @@ int CamApp::parseOptions(int argc, char *argv[]) OptCamera); parser.addOption(OptOrientation, OptionString, - "Desired image orientation (rot0, rot180, mirror, flip)", + "Desired image orientation. Supported values:\n" + "- rot0, rot90, rot180, rot270,\n" + "- rot0mirror, rot90mirror, rot180mirror, rot270mirror,\n" + "- mirror (alias for rot0mirror), flip (alias for rot180mirror)", "orientation", ArgumentRequired, "orientation", false, OptCamera); #ifdef HAVE_KMS