[libcamera-devel] [PATCH v3 10/10] apps: cam: Add option to set stream orientation

David Plowman david.plowman at raspberrypi.com
Thu Jul 20 12:16:40 CEST 2023


Hi Jacopo

Thanks for the patch.

On Tue, 18 Jul 2023 at 11:52, Jacopo Mondi
<jacopo.mondi at ideasonboard.com> wrote:
>
> 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

I guess it offends my mathematical sense of symmetry and completeness
ever so slightly not to have an explicit parameter for the fourth and
final supported orientation... namely "identity" (or "rot0" or
something)!! But as a non-cam user, please feel free to ignore me.

>
> 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 066e397b5f47..1cf7a245aaa7 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") {

Do we care about case in option parameters? I guess not. In which case
it all LGTM.

Reviewed-by: David Plowman <david.plowman at raspberrypi.com>

Thanks!
David

> +                       config->orientation =
> +                               libcamera::Orientation::rotate180;
> +               } else if (orient == "mirror") {
> +                       config->orientation =
> +                               libcamera::Orientation::rotate0Flip;
> +               } else if (orient == "flip") {
> +                       config->orientation =
> +                               libcamera::Orientation::rotate180Flip;
> +               } 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