From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sachin Kamat <sachin.kamat@linaro.org>
Cc: linux-media@vger.kernel.org, mchehab@infradead.org,
kyungmin.park@samsung.com, k.debski@samsung.com,
patches@linaro.org
Subject: Re: [PATCH][media] s5p-g2d: Add HFLIP and VFLIP support
Date: Mon, 30 Jan 2012 13:11:46 +0100 [thread overview]
Message-ID: <201201301311.48370.laurent.pinchart@ideasonboard.com> (raw)
In-Reply-To: <1327917523-29836-1-git-send-email-sachin.kamat@linaro.org>
Hi Sashin,
Thanks for the patch.
On Monday 30 January 2012 10:58:43 Sachin Kamat wrote:
> This patch adds support for flipping the image horizontally and vertically.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
> ---
> drivers/media/video/s5p-g2d/g2d-hw.c | 5 +++
> drivers/media/video/s5p-g2d/g2d.c | 47 +++++++++++++++++++++++++------
> drivers/media/video/s5p-g2d/g2d.h | 3 ++
> 3 files changed, 46 insertions(+), 9 deletions(-)
[snip]
> diff --git a/drivers/media/video/s5p-g2d/g2d.c
> b/drivers/media/video/s5p-g2d/g2d.c index febaa67..dea9701 100644
> --- a/drivers/media/video/s5p-g2d/g2d.c
> +++ b/drivers/media/video/s5p-g2d/g2d.c
> @@ -178,6 +178,7 @@ static int g2d_s_ctrl(struct v4l2_ctrl *ctrl)
> {
> struct g2d_ctx *ctx = container_of(ctrl->handler, struct g2d_ctx,
> ctrl_handler);
> +
> switch (ctrl->id) {
> case V4L2_CID_COLORFX:
> if (ctrl->val == V4L2_COLORFX_NEGATIVE)
> @@ -185,6 +186,21 @@ static int g2d_s_ctrl(struct v4l2_ctrl *ctrl)
> else
> ctx->rop = ROP4_COPY;
> break;
> +
> + case V4L2_CID_HFLIP:
> + if (ctrl->val == 1)
> + ctx->hflip = 1;
> + else
> + ctx->hflip = 0;
> + break;
> +
> + case V4L2_CID_VFLIP:
> + if (ctrl->val == 1)
> + ctx->vflip = (1 << 1);
> + else
> + ctx->vflip = 0;
> + break;
> +
> default:
> v4l2_err(&ctx->dev->v4l2_dev, "unknown control\n");
> return -EINVAL;
> @@ -200,11 +216,9 @@ int g2d_setup_ctrls(struct g2d_ctx *ctx)
> {
> struct g2d_dev *dev = ctx->dev;
>
> - v4l2_ctrl_handler_init(&ctx->ctrl_handler, 1);
> - if (ctx->ctrl_handler.error) {
> - v4l2_err(&dev->v4l2_dev, "v4l2_ctrl_handler_init failed\n");
> - return ctx->ctrl_handler.error;
> - }
> + v4l2_ctrl_handler_init(&ctx->ctrl_handler, 3);
> + if (ctx->ctrl_handler.error)
> + goto error;
There's not need to verify ctx->ctrl_handler.error after every call to
v4l2_ctrl_handler_init() or v4l2_ctrl_new_*(). You can verify it once only
after initialization all controls.
>
> v4l2_ctrl_new_std_menu(
> &ctx->ctrl_handler,
> @@ -214,12 +228,25 @@ int g2d_setup_ctrls(struct g2d_ctx *ctx)
> ~((1 << V4L2_COLORFX_NONE) | (1 << V4L2_COLORFX_NEGATIVE)),
> V4L2_COLORFX_NONE);
>
> - if (ctx->ctrl_handler.error) {
> - v4l2_err(&dev->v4l2_dev, "v4l2_ctrl_handler_init failed\n");
> - return ctx->ctrl_handler.error;
> - }
> + if (ctx->ctrl_handler.error)
> + goto error;
> +
> + v4l2_ctrl_new_std(&ctx->ctrl_handler, &g2d_ctrl_ops,
> + V4L2_CID_HFLIP, 0, 1, 1, 0);
> + if (ctx->ctrl_handler.error)
> + goto error;
> +
> + v4l2_ctrl_new_std(&ctx->ctrl_handler, &g2d_ctrl_ops,
> + V4L2_CID_VFLIP, 0, 1, 1, 0);
As a single register controls hflip and vflip, you should group the two
controls in a cluster.
> + if (ctx->ctrl_handler.error)
> + goto error;
>
> return 0;
> +
> +error:
> + v4l2_err(&dev->v4l2_dev, "v4l2_ctrl_handler_init failed\n");
> + return ctx->ctrl_handler.error;
> +
> }
>
> static int g2d_open(struct file *file)
> @@ -564,6 +591,8 @@ static void device_run(void *prv)
> g2d_set_dst_addr(dev, vb2_dma_contig_plane_dma_addr(dst, 0));
>
> g2d_set_rop4(dev, ctx->rop);
> + g2d_set_flip(dev, ctx->hflip | ctx->vflip);
> +
Is this called for every frame, or once at stream start only ? In the later
case, this means that hflip and vflip won't be changeable during streaming. Is
that on purpose ?
> if (ctx->in.c_width != ctx->out.c_width ||
> ctx->in.c_height != ctx->out.c_height)
> cmd |= g2d_cmd_stretch(1);
> diff --git a/drivers/media/video/s5p-g2d/g2d.h
> b/drivers/media/video/s5p-g2d/g2d.h index 5eae901..b3be3c8 100644
> --- a/drivers/media/video/s5p-g2d/g2d.h
> +++ b/drivers/media/video/s5p-g2d/g2d.h
> @@ -59,6 +59,8 @@ struct g2d_ctx {
> struct g2d_frame out;
> struct v4l2_ctrl_handler ctrl_handler;
> u32 rop;
> + u32 hflip;
> + u32 vflip;
> };
>
> struct g2d_fmt {
> @@ -77,6 +79,7 @@ void g2d_set_dst_addr(struct g2d_dev *d, dma_addr_t a);
> void g2d_start(struct g2d_dev *d);
> void g2d_clear_int(struct g2d_dev *d);
> void g2d_set_rop4(struct g2d_dev *d, u32 r);
> +void g2d_set_flip(struct g2d_dev *d, u32 r);
> u32 g2d_cmd_stretch(u32 e);
> void g2d_set_cmd(struct g2d_dev *d, u32 c);
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2012-01-30 12:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-30 9:58 [PATCH][media] s5p-g2d: Add HFLIP and VFLIP support Sachin Kamat
2012-01-30 12:11 ` Laurent Pinchart [this message]
2012-01-30 13:04 ` Sylwester Nawrocki
2012-01-30 13:39 ` Kamil Debski
2012-01-31 5:07 ` Sachin Kamat
2012-01-31 9:30 ` Laurent Pinchart
2012-01-31 10:09 ` Kamil Debski
2012-01-31 12:42 ` Sachin Kamat
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201201301311.48370.laurent.pinchart@ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=k.debski@samsung.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@infradead.org \
--cc=patches@linaro.org \
--cc=sachin.kamat@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox