public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
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

  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