aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0513-staging-bcm2835-codec-Add-support-for-H-V-Flips-to-I.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0513-staging-bcm2835-codec-Add-support-for-H-V-Flips-to-I.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0513-staging-bcm2835-codec-Add-support-for-H-V-Flips-to-I.patch85
1 files changed, 85 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0513-staging-bcm2835-codec-Add-support-for-H-V-Flips-to-I.patch b/target/linux/bcm27xx/patches-5.15/950-0513-staging-bcm2835-codec-Add-support-for-H-V-Flips-to-I.patch
new file mode 100644
index 0000000000..2a0380f5ed
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0513-staging-bcm2835-codec-Add-support-for-H-V-Flips-to-I.patch
@@ -0,0 +1,85 @@
+From 3df60f3d0615c011e91b7d6f39cb9123b2e96530 Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.com>
+Date: Mon, 20 Sep 2021 14:37:17 +0100
+Subject: [PATCH] staging: bcm2835-codec: Add support for H&V Flips to
+ ISP
+
+The ISP can do H & V flips whilst resizing or converting
+the image, so expose that via V4L2_CID_[H|V]FLIP.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
+---
+ .../bcm2835-codec/bcm2835-v4l2-codec.c | 48 +++++++++++++++++++
+ 1 file changed, 48 insertions(+)
+
+--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
++++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
+@@ -679,6 +679,9 @@ struct bcm2835_codec_ctx {
+ enum v4l2_xfer_func xfer_func;
+ enum v4l2_quantization quant;
+
++ int hflip;
++ int vflip;
++
+ /* Source and destination queue data */
+ struct bcm2835_codec_q_data q_data[2];
+ s32 bitrate;
+@@ -2202,6 +2205,34 @@ static int bcm2835_codec_s_ctrl(struct v
+ sizeof(mmal_bool));
+ break;
+ }
++ case V4L2_CID_HFLIP:
++ case V4L2_CID_VFLIP: {
++ u32 u32_value;
++
++ if (ctrl->id == V4L2_CID_HFLIP)
++ ctx->hflip = ctrl->val;
++ else
++ ctx->vflip = ctrl->val;
++
++ if (!ctx->component)
++ break;
++
++ if (ctx->hflip && ctx->vflip)
++ u32_value = MMAL_PARAM_MIRROR_BOTH;
++ else if (ctx->hflip)
++ u32_value = MMAL_PARAM_MIRROR_HORIZONTAL;
++ else if (ctx->vflip)
++ u32_value = MMAL_PARAM_MIRROR_VERTICAL;
++ else
++ u32_value = MMAL_PARAM_MIRROR_NONE;
++
++ ret = vchiq_mmal_port_parameter_set(ctx->dev->instance,
++ &ctx->component->input[0],
++ MMAL_PARAMETER_MIRROR,
++ &u32_value,
++ sizeof(u32_value));
++ break;
++ }
+
+ default:
+ v4l2_err(&ctx->dev->v4l2_dev, "Invalid control\n");
+@@ -3152,6 +3183,23 @@ static int bcm2835_codec_open(struct fil
+ }
+ break;
+ case ISP:
++ {
++ v4l2_ctrl_handler_init(hdl, 2);
++
++ v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
++ V4L2_CID_HFLIP,
++ 1, 0, 1, 0);
++ v4l2_ctrl_new_std(hdl, &bcm2835_codec_ctrl_ops,
++ V4L2_CID_VFLIP,
++ 1, 0, 1, 0);
++ if (hdl->error) {
++ rc = hdl->error;
++ goto free_ctrl_handler;
++ }
++ ctx->fh.ctrl_handler = hdl;
++ v4l2_ctrl_handler_setup(hdl);
++ }
++ break;
+ case DEINTERLACE:
+ {
+ v4l2_ctrl_handler_init(hdl, 0);