[libcamera-devel] [RFC 4/4] apps: cam: Add option to set stream orientation
Jacopo Mondi
jacopo.mondi at ideasonboard.com
Tue Jun 20 16:29:04 CEST 2023
Add a '--orientation|-o' option to the cam test application to set
an orientation to the image stream.
Supported values are the ones obtained by applying flips to the camera
sensor:
- rot180: Rotate 180 degrees
- flip: vertical flip
- mirror: horizontal flip
Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
---
src/apps/cam/camera_session.cpp | 17 +++++++++++++++++
src/apps/cam/main.cpp | 5 +++++
src/apps/cam/main.h | 1 +
3 files changed, 23 insertions(+)
diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp
index 8fcec6304d66..2d6a1440cde2 100644
--- a/src/apps/cam/camera_session.cpp
+++ b/src/apps/cam/camera_session.cpp
@@ -65,6 +65,23 @@ CameraSession::CameraSession(CameraManager *cm,
return;
}
+ if (options_.isSet(OptOrientation)) {
+ std::string orient = options_[OptOrientation].toString();
+ if (orient == "rot180") {
+ config->orientation =
+ libcamera::CameraConfiguration::rotate180;
+ } else if (orient == "mirror") {
+ config->orientation =
+ libcamera::CameraConfiguration::flipRotate0;
+ } else if (orient == "flip") {
+ config->orientation =
+ libcamera::CameraConfiguration::flipRotate180;
+ } else {
+ std::cerr << "Invalid orientation " << orient << std::endl;
+ return;
+ }
+ }
+
/* Apply configuration if explicitly requested. */
if (StreamKeyValueParser::updateConfiguration(config.get(),
options_[OptStream])) {
diff --git a/src/apps/cam/main.cpp b/src/apps/cam/main.cpp
index 5d8a57bc14e5..8698d5eedcf8 100644
--- a/src/apps/cam/main.cpp
+++ b/src/apps/cam/main.cpp
@@ -133,6 +133,11 @@ int CamApp::parseOptions(int argc, char *argv[])
"Capture until interrupted by user or until <count> frames captured",
"capture", ArgumentOptional, "count", false,
OptCamera);
+
+ parser.addOption(OptOrientation, OptionString,
+ "The camera stream image orientation (rot180, mirror, flip)",
+ "orientation", ArgumentRequired, "orientation", false,
+ OptCamera);
#ifdef HAVE_KMS
parser.addOption(OptDisplay, OptionString,
"Display viewfinder through DRM/KMS on specified connector",
diff --git a/src/apps/cam/main.h b/src/apps/cam/main.h
index 526aecece3f3..4aa959b32e13 100644
--- a/src/apps/cam/main.h
+++ b/src/apps/cam/main.h
@@ -17,6 +17,7 @@ enum {
OptList = 'l',
OptListProperties = 'p',
OptMonitor = 'm',
+ OptOrientation = 'o',
OptSDL = 'S',
OptStream = 's',
OptListControls = 256,
--
2.40.1
More information about the libcamera-devel
mailing list