Message ID | 20211008131015.3303915-2-festevam@denx.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v4,1/2] media: imx-pxp: Initialize the spinlock prior to using it | expand |
On Fri, 2021-10-08 at 10:10 -0300, Fabio Estevam wrote: > PXP allows clockwise rotation of 0°, 90°, 180° and 270°. > > Add support for it. > > Tested on a imx6ull-evk. > > For example, to rotate 90° the following Gstreamer pipeline can > be used: > > gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 ! \ > v4l2convert extra-controls=cid,rotate=90 ! \ > video/x-raw,width=120,height=160 ! fbdevsink > > Signed-off-by: Fabio Estevam <festevam@denx.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> regards Philipp
Hi Hans, On 08/10/2021 11:17, Philipp Zabel wrote: > On Fri, 2021-10-08 at 10:10 -0300, Fabio Estevam wrote: >> PXP allows clockwise rotation of 0°, 90°, 180° and 270°. >> >> Add support for it. >> >> Tested on a imx6ull-evk. >> >> For example, to rotate 90° the following Gstreamer pipeline can >> be used: >> >> gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 ! \ >> v4l2convert extra-controls=cid,rotate=90 ! \ >> video/x-raw,width=120,height=160 ! fbdevsink >> >> Signed-off-by: Fabio Estevam <festevam@denx.de> > > Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> > > regards > Philipp A gentle ping on this series.
On 25/11/2021 04:44, Fabio Estevam wrote: > Hi Hans, > > On 08/10/2021 11:17, Philipp Zabel wrote: >> On Fri, 2021-10-08 at 10:10 -0300, Fabio Estevam wrote: >>> PXP allows clockwise rotation of 0°, 90°, 180° and 270°. >>> >>> Add support for it. >>> >>> Tested on a imx6ull-evk. >>> >>> For example, to rotate 90° the following Gstreamer pipeline can >>> be used: >>> >>> gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 ! \ >>> v4l2convert extra-controls=cid,rotate=90 ! \ >>> video/x-raw,width=120,height=160 ! fbdevsink >>> >>> Signed-off-by: Fabio Estevam <festevam@denx.de> >> >> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> >> >> regards >> Philipp > > A gentle ping on this series. > I hope to post the PR containing this series today. Regards, Hans
diff --git a/drivers/media/platform/imx-pxp.c b/drivers/media/platform/imx-pxp.c index b7174778db53..689ae5e6ac62 100644 --- a/drivers/media/platform/imx-pxp.c +++ b/drivers/media/platform/imx-pxp.c @@ -211,6 +211,7 @@ struct pxp_ctx { /* Processing mode */ int mode; u8 alpha_component; + u8 rotation; enum v4l2_colorspace colorspace; enum v4l2_xfer_func xfer_func; @@ -767,14 +768,20 @@ static int pxp_start(struct pxp_ctx *ctx, struct vb2_v4l2_buffer *in_vb, V4L2_BUF_FLAG_BFRAME | V4L2_BUF_FLAG_TSTAMP_SRC_MASK); - /* Rotation disabled, 8x8 block size */ + /* 8x8 block size */ ctrl = BF_PXP_CTRL_VFLIP0(!!(ctx->mode & MEM2MEM_VFLIP)) | - BF_PXP_CTRL_HFLIP0(!!(ctx->mode & MEM2MEM_HFLIP)); + BF_PXP_CTRL_HFLIP0(!!(ctx->mode & MEM2MEM_HFLIP)) | + BF_PXP_CTRL_ROTATE0(ctx->rotation); /* Always write alpha value as V4L2_CID_ALPHA_COMPONENT */ out_ctrl = BF_PXP_OUT_CTRL_ALPHA(ctx->alpha_component) | BF_PXP_OUT_CTRL_ALPHA_OUTPUT(1) | pxp_v4l2_pix_fmt_to_out_format(dst_fourcc); out_buf = p_out; + + if (ctx->rotation == BV_PXP_CTRL_ROTATE0__ROT_90 || + ctx->rotation == BV_PXP_CTRL_ROTATE0__ROT_270) + swap(dst_width, dst_height); + switch (dst_fourcc) { case V4L2_PIX_FMT_NV12: case V4L2_PIX_FMT_NV21: @@ -1297,6 +1304,21 @@ static int pxp_s_fmt_vid_out(struct file *file, void *priv, return 0; } +static u8 pxp_degrees_to_rot_mode(u32 degrees) +{ + switch (degrees) { + case 90: + return BV_PXP_CTRL_ROTATE0__ROT_90; + case 180: + return BV_PXP_CTRL_ROTATE0__ROT_180; + case 270: + return BV_PXP_CTRL_ROTATE0__ROT_270; + case 0: + default: + return BV_PXP_CTRL_ROTATE0__ROT_0; + } +} + static int pxp_s_ctrl(struct v4l2_ctrl *ctrl) { struct pxp_ctx *ctx = @@ -1317,6 +1339,10 @@ static int pxp_s_ctrl(struct v4l2_ctrl *ctrl) ctx->mode &= ~MEM2MEM_VFLIP; break; + case V4L2_CID_ROTATE: + ctx->rotation = pxp_degrees_to_rot_mode(ctrl->val); + break; + case V4L2_CID_ALPHA_COMPONENT: ctx->alpha_component = ctrl->val; break; @@ -1524,6 +1550,7 @@ static int pxp_open(struct file *file) v4l2_ctrl_handler_init(hdl, 4); v4l2_ctrl_new_std(hdl, &pxp_ctrl_ops, V4L2_CID_HFLIP, 0, 1, 1, 0); v4l2_ctrl_new_std(hdl, &pxp_ctrl_ops, V4L2_CID_VFLIP, 0, 1, 1, 0); + v4l2_ctrl_new_std(hdl, &pxp_ctrl_ops, V4L2_CID_ROTATE, 0, 270, 90, 0); v4l2_ctrl_new_std(hdl, &pxp_ctrl_ops, V4L2_CID_ALPHA_COMPONENT, 0, 255, 1, 255); if (hdl->error) {
PXP allows clockwise rotation of 0°, 90°, 180° and 270°. Add support for it. Tested on a imx6ull-evk. For example, to rotate 90° the following Gstreamer pipeline can be used: gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480 ! \ v4l2convert extra-controls=cid,rotate=90 ! \ video/x-raw,width=120,height=160 ! fbdevsink Signed-off-by: Fabio Estevam <festevam@denx.de> --- Changes since v3: - Use existing definitions for the rotation modes (Philipp) - Combine the 0 and default cases (Philipp) drivers/media/platform/imx-pxp.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-)