From: Tomasz Stanislawski <t.stanislaws@samsung.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org, m.szyprowski@samsung.com,
kyungmin.park@samsung.com, laurent.pinchart@ideasonboard.com,
sakari.ailus@iki.fi
Subject: Re: [PATCH 1/4] v4l: add support for selection api
Date: Thu, 29 Sep 2011 15:41:26 +0200 [thread overview]
Message-ID: <4E847586.3070701@samsung.com> (raw)
In-Reply-To: <201109271028.07596.hverkuil@xs4all.nl>
Hi Hans,
On 09/27/2011 10:28 AM, Hans Verkuil wrote:
> Here is my 'better late than never' review :-)
>
> On Wednesday, August 31, 2011 14:28:20 Tomasz Stanislawski wrote:
>> This patch introduces new api for a precise control of cropping and composing
>> features for video devices. The new ioctls are VIDIOC_S_SELECTION and
>> VIDIOC_G_SELECTION.
>>
>> Signed-off-by: Tomasz Stanislawski<t.stanislaws@samsung.com>
>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
>> ---
>> drivers/media/video/v4l2-compat-ioctl32.c | 2 +
>> drivers/media/video/v4l2-ioctl.c | 28 +++++++++++++++++
>> include/linux/videodev2.h | 46 +++++++++++++++++++++++++++++
>> include/media/v4l2-ioctl.h | 4 ++
>> 4 files changed, 80 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/media/video/v4l2-compat-ioctl32.c b/drivers/media/video/v4l2-compat-ioctl32.c
>> index 61979b7..f3b9d15 100644
>> --- a/drivers/media/video/v4l2-compat-ioctl32.c
>> +++ b/drivers/media/video/v4l2-compat-ioctl32.c
>> @@ -927,6 +927,8 @@ long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
>> case VIDIOC_CROPCAP:
>> case VIDIOC_G_CROP:
>> case VIDIOC_S_CROP:
>> + case VIDIOC_G_SELECTION:
>> + case VIDIOC_S_SELECTION:
>> case VIDIOC_G_JPEGCOMP:
>> case VIDIOC_S_JPEGCOMP:
>> case VIDIOC_QUERYSTD:
>> diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
>> index 002ce13..6e02b45 100644
>> --- a/drivers/media/video/v4l2-ioctl.c
>> +++ b/drivers/media/video/v4l2-ioctl.c
>> @@ -225,6 +225,8 @@ static const char *v4l2_ioctls[] = {
>> [_IOC_NR(VIDIOC_CROPCAP)] = "VIDIOC_CROPCAP",
>> [_IOC_NR(VIDIOC_G_CROP)] = "VIDIOC_G_CROP",
>> [_IOC_NR(VIDIOC_S_CROP)] = "VIDIOC_S_CROP",
>> + [_IOC_NR(VIDIOC_G_SELECTION)] = "VIDIOC_G_SELECTION",
>> + [_IOC_NR(VIDIOC_S_SELECTION)] = "VIDIOC_S_SELECTION",
>> [_IOC_NR(VIDIOC_G_JPEGCOMP)] = "VIDIOC_G_JPEGCOMP",
>> [_IOC_NR(VIDIOC_S_JPEGCOMP)] = "VIDIOC_S_JPEGCOMP",
>> [_IOC_NR(VIDIOC_QUERYSTD)] = "VIDIOC_QUERYSTD",
>> @@ -1714,6 +1716,32 @@ static long __video_do_ioctl(struct file *file,
>> ret = ops->vidioc_s_crop(file, fh, p);
>> break;
>> }
>> + case VIDIOC_G_SELECTION:
>> + {
>> + struct v4l2_selection *p = arg;
>> +
>> + if (!ops->vidioc_g_selection)
>> + break;
>> +
>> + dbgarg(cmd, "type=%s\n", prt_names(p->type, v4l2_type_names));
>> +
>> + ret = ops->vidioc_g_selection(file, fh, p);
>> + if (!ret)
>> + dbgrect(vfd, "",&p->r);
>> + break;
>> + }
>> + case VIDIOC_S_SELECTION:
>> + {
>> + struct v4l2_selection *p = arg;
>> +
>> + if (!ops->vidioc_s_selection)
>> + break;
>
> Here you should insert this code so that this ioctl handles the priority check
> correctly:
>
> if (ret_prio) {
> ret = ret_prio;
> break;
> }
>
OK
>> + dbgarg(cmd, "type=%s\n", prt_names(p->type, v4l2_type_names));
>> + dbgrect(vfd, "",&p->r);
>> +
>> + ret = ops->vidioc_s_selection(file, fh, p);
>> + break;
>> + }
>> case VIDIOC_CROPCAP:
>> {
>> struct v4l2_cropcap *p = arg;
>> diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
>> index fca24cc..b7471fe 100644
>> --- a/include/linux/videodev2.h
>> +++ b/include/linux/videodev2.h
>> @@ -738,6 +738,48 @@ struct v4l2_crop {
>> struct v4l2_rect c;
>> };
>>
>> +/* Hints for adjustments of selection rectangle */
>> +#define V4L2_SEL_SIZE_GE 0x00000001
>> +#define V4L2_SEL_SIZE_LE 0x00000002
>> +
>> +/* Selection targets */
>> +
>> +/* current cropping area */
>> +#define V4L2_SEL_CROP_ACTIVE 0
>> +/* default cropping area */
>> +#define V4L2_SEL_CROP_DEFAULT 1
>> +/* cropping bounds */
>> +#define V4L2_SEL_CROP_BOUNDS 2
>> +/* current composing area */
>> +#define V4L2_SEL_COMPOSE_ACTIVE 256
>> +/* default composing area */
>> +#define V4L2_SEL_COMPOSE_DEFAULT 257
>> +/* composing bounds */
>> +#define V4L2_SEL_COMPOSE_BOUNDS 258
>> +/* current composing area plus all padding pixels */
>> +#define V4L2_SEL_COMPOSE_PADDED 259
>> +
>> +/**
>> + * struct v4l2_selection - selection info
>> + * @type: buffer type (do not use *_MPLANE types)
>
> Why can't I use MPLANE types?
>
Because the selection has nothing to do with "multiplanar" stuff. The
VIDIOC_{S/G}_CROP does not use it. Therefore the selection should not
use it either. Only memory referring ioctl should use *_MPLANE types. I
would really like to avoid forcing developers to implement this
non-intuitive and confusing business logic like it happened to
VIDIOC_S_FMT, and VIDIOC_STREAM{ON/OFF} ioctls.
>> + * @target: selection target, used to choose one of possible rectangles
>> + * @flags: constraints flags
>> + * @r: coordinates of selection window
>> + * @reserved: for future use, rounds structure size to 64 bytes, set to zero
>> + *
>> + * Hardware may use multiple helper window to process a video stream.
>> + * The structure is used to exchange this selection areas between
>> + * an application and a driver.
>> + */
>> +struct v4l2_selection {
>> + __u32 type;
>> + __u32 target;
>> + __u32 flags;
>> + struct v4l2_rect r;
>> + __u32 reserved[9];
>> +};
>> +
>> +
>> /*
>> * A N A L O G V I D E O S T A N D A R D
>> */
>> @@ -2182,6 +2224,10 @@ struct v4l2_dbg_chip_ident {
>> #define VIDIOC_SUBSCRIBE_EVENT _IOW('V', 90, struct v4l2_event_subscription)
>> #define VIDIOC_UNSUBSCRIBE_EVENT _IOW('V', 91, struct v4l2_event_subscription)
>>
>> +/* Experimental crop/compose API */
>> +#define VIDIOC_G_SELECTION _IOWR('V', 92, struct v4l2_selection)
>> +#define VIDIOC_S_SELECTION _IOWR('V', 93, struct v4l2_selection)
>
> So we decided not to implement a TRY_SELECTION yet? I'm fine with that, BTW.
>
OK. This ioctl is needed for advanced cropping/composing negotiations.
I think that the constraints would be sufficient for simple use cases.
Best regards,
Tomasz Stanislawski
>> +
>> /* Reminder: when adding new ioctls please add support for them to
>> drivers/media/video/v4l2-compat-ioctl32.c as well! */
>>
>> diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h
>> index dd9f1e7..9dd6e18 100644
>> --- a/include/media/v4l2-ioctl.h
>> +++ b/include/media/v4l2-ioctl.h
>> @@ -194,6 +194,10 @@ struct v4l2_ioctl_ops {
>> struct v4l2_crop *a);
>> int (*vidioc_s_crop) (struct file *file, void *fh,
>> struct v4l2_crop *a);
>> + int (*vidioc_g_selection) (struct file *file, void *fh,
>> + struct v4l2_selection *s);
>> + int (*vidioc_s_selection) (struct file *file, void *fh,
>> + struct v4l2_selection *s);
>> /* Compression ioctls */
>> int (*vidioc_g_jpegcomp) (struct file *file, void *fh,
>> struct v4l2_jpegcompression *a);
>>
>
next prev parent reply other threads:[~2011-09-29 13:41 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-31 12:28 [PATCHv5 0/4] v4l: extended crop/compose api Tomasz Stanislawski
2011-08-31 12:28 ` [PATCH 1/4] v4l: add support for selection api Tomasz Stanislawski
2011-09-05 10:25 ` Sakari Ailus
2011-09-05 12:52 ` Laurent Pinchart
2011-09-05 12:55 ` Sakari Ailus
2011-09-23 8:33 ` Laurent Pinchart
2011-09-27 8:28 ` Hans Verkuil
2011-09-29 13:41 ` Tomasz Stanislawski [this message]
2011-10-12 11:48 ` Sakari Ailus
2011-10-12 15:08 ` Tomasz Stanislawski
2011-10-12 16:31 ` Sakari Ailus
2011-10-14 17:19 ` Sakari Ailus
2011-10-17 13:31 ` Tomasz Stanislawski
2011-10-17 16:54 ` Sakari Ailus
2011-08-31 12:28 ` [PATCH 2/4] v4l: add documentation for selection API Tomasz Stanislawski
2011-09-22 22:41 ` Laurent Pinchart
2011-09-23 12:36 ` Tomasz Stanislawski
2011-09-23 13:13 ` Laurent Pinchart
2011-09-23 15:22 ` Tomasz Stanislawski
2011-09-27 11:17 ` Laurent Pinchart
2011-09-27 14:17 ` Tomasz Stanislawski
2011-09-27 15:32 ` Kamil Debski
2011-09-27 9:20 ` Hans Verkuil
2011-09-27 11:11 ` Laurent Pinchart
2011-09-27 11:27 ` Hans Verkuil
2011-09-27 13:36 ` Tomasz Stanislawski
2011-09-27 13:52 ` Hans Verkuil
2011-08-31 12:28 ` [PATCH 3/4] v4l: emulate old crop API using extended crop/compose API Tomasz Stanislawski
2011-08-31 12:28 ` [PATCH 4/4] v4l: s5p-tv: mixer: add support for selection API Tomasz Stanislawski
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=4E847586.3070701@samsung.com \
--to=t.stanislaws@samsung.com \
--cc=hverkuil@xs4all.nl \
--cc=kyungmin.park@samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=sakari.ailus@iki.fi \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.