Message ID | 1232538820-20307-1-git-send-email-hardik.shah@ti.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers |
Return-path: <linux-media-owner@vger.kernel.org> Envelope-to: mchehab@infradead.org Delivery-date: Wed, 21 Jan 2009 11:54:10 +0000 Received: from vger.kernel.org ([209.132.176.167]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1LPbes-00051i-GP for mchehab@infradead.org; Wed, 21 Jan 2009 11:54:10 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756228AbZAULyJ (ORCPT <rfc822;mchehab@infradead.org>); Wed, 21 Jan 2009 06:54:09 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1757515AbZAULyJ (ORCPT <rfc822;linux-media-outgoing>); Wed, 21 Jan 2009 06:54:09 -0500 Received: from bear.ext.ti.com ([192.94.94.41]:45529 "EHLO bear.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756228AbZAULyI (ORCPT <rfc822;linux-media@vger.kernel.org>); Wed, 21 Jan 2009 06:54:08 -0500 Received: from dbdp31.itg.ti.com ([172.24.170.98]) by bear.ext.ti.com (8.13.7/8.13.7) with ESMTP id n0LBrki3028619; Wed, 21 Jan 2009 05:53:52 -0600 Received: from localhost.localdomain (localhost [127.0.0.1]) by dbdp31.itg.ti.com (8.13.8/8.13.8) with ESMTP id n0LBreC3020815; Wed, 21 Jan 2009 17:23:41 +0530 (IST) From: Hardik Shah <hardik.shah@ti.com> To: video4linux-list@redhat.com, linux-media@vger.kernel.org Cc: Hardik Shah <hardik.shah@ti.com>, Brijesh Jadav <brijesh.j@ti.com>, Hari Nagalla <hnagalla@ti.com>, Manjunath Hadli <mrh@ti.com>, R Sivaraj <sivaraj@ti.com>, Vaibhav Hiremath <hvaibhav@ti.com> Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices Date: Wed, 21 Jan 2009 17:23:40 +0530 Message-Id: <1232538820-20307-1-git-send-email-hardik.shah@ti.com> X-Mailer: git-send-email 1.5.6 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: <linux-media.vger.kernel.org> X-Mailing-List: linux-media@vger.kernel.org |
Commit Message
Hardik Shah
Jan. 21, 2009, 11:53 a.m. UTC
1. Control ID added for rotation. Same as HFLIP. 2. Control ID added for setting background color on output device. 3. New ioctl added for setting the color space conversion from YUV to RGB. Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> Signed-off-by: Hari Nagalla <hnagalla@ti.com> Signed-off-by: Hardik Shah <hardik.shah@ti.com> Signed-off-by: Manjunath Hadli <mrh@ti.com> Signed-off-by: R Sivaraj <sivaraj@ti.com> Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> --- linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- linux/include/linux/videodev2.h | 19 ++++++++++++++++++- linux/include/media/v4l2-ioctl.h | 4 ++++ 3 files changed, 40 insertions(+), 2 deletions(-) -- 1.5.6 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Comments
> -----Original Message----- > From: Shah, Hardik > Sent: Wednesday, January 21, 2009 5:24 PM > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; R, > Sivaraj; Hiremath, Vaibhav > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > 1. Control ID added for rotation. Same as HFLIP. > 2. Control ID added for setting background color on > output device. > 3. New ioctl added for setting the color space conversion from > YUV to RGB. > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > Signed-off-by: Manjunath Hadli <mrh@ti.com> > Signed-off-by: R Sivaraj <sivaraj@ti.com> > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > --- > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > linux/include/media/v4l2-ioctl.h | 4 ++++ > 3 files changed, 40 insertions(+), 2 deletions(-) > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > b/linux/drivers/media/video/v4l2-ioctl.c > index 165bc90..7599da8 100644 > --- a/linux/drivers/media/video/v4l2-ioctl.c > +++ b/linux/drivers/media/video/v4l2-ioctl.c > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > #endif > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = "VIDIOC_S_COLOR_SPACE_CONV", > + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] = "VIDIOC_G_COLOR_SPACE_CONV", > }; > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file *file, > } > break; > } > - > + case VIDIOC_S_COLOR_SPACE_CONV: > + { > + struct v4l2_color_space_conversion *p = arg; > + if (!ops->vidioc_s_color_space_conv) > + break; > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > + break; > + } > + case VIDIOC_G_COLOR_SPACE_CONV: > + { > + struct v4l2_color_space_conversion *p = arg; > + if (!ops->vidioc_g_color_space_conv) > + break; > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > + break; > + } > default: > { > if (!ops->vidioc_default) > diff --git a/linux/include/linux/videodev2.h b/linux/include/linux/videodev2.h > index b0c5010..9fbc3b0 100644 > --- a/linux/include/linux/videodev2.h > +++ b/linux/include/linux/videodev2.h > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > /* last CID + 1 */ > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > /* MPEG-class control IDs defined by V4L2 */ > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > }; > > /* > + * Color conversion > + * User needs to pass pointer to color conversion matrix > + * defined by hardware > + */ > +struct v4l2_color_space_conversion { > + __s32 coefficients[3][3]; > + __s32 const_factor; > + __s32 offsets[3]; > +}; > + > +/* > * A U D I O > */ > struct v4l2_audio { > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > #endif > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) > + > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > v4l2_color_space_conversion) > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > v4l2_color_space_conversion) > /* Reminder: when adding new ioctls please add support for them to > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > + > #ifdef __OLD_VIDIOC_ > /* for compatibility, will go away some day */ > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > diff --git a/linux/include/media/v4l2-ioctl.h b/linux/include/media/v4l2- > ioctl.h > index b01c044..0c44ecf 100644 > --- a/linux/include/media/v4l2-ioctl.h > +++ b/linux/include/media/v4l2-ioctl.h > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > /* For other private ioctls */ > long (*vidioc_default) (struct file *file, void *fh, > int cmd, void *arg); > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > + struct v4l2_color_space_conversion *a); > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > + struct v4l2_color_space_conversion *a); > }; > > > -- > 1.5.6 [Shah, Hardik] Hi, Any comments on this patch. Hans/Mauro, If possible can you integrate this onto your development branch. Regards, Hardik Shah -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > -----Original Message----- > > From: Shah, Hardik > > Sent: Wednesday, January 21, 2009 5:24 PM > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; R, > > Sivaraj; Hiremath, Vaibhav > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > 1. Control ID added for rotation. Same as HFLIP. > > 2. Control ID added for setting background color on > > output device. > > 3. New ioctl added for setting the color space conversion from > > YUV to RGB. > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > --- > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > b/linux/drivers/media/video/v4l2-ioctl.c > > index 165bc90..7599da8 100644 > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > #endif > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = "VIDIOC_S_COLOR_SPACE_CONV", > > + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] = "VIDIOC_G_COLOR_SPACE_CONV", > > }; > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file *file, > > } > > break; > > } > > - > > + case VIDIOC_S_COLOR_SPACE_CONV: > > + { > > + struct v4l2_color_space_conversion *p = arg; > > + if (!ops->vidioc_s_color_space_conv) > > + break; > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > + break; > > + } > > + case VIDIOC_G_COLOR_SPACE_CONV: > > + { > > + struct v4l2_color_space_conversion *p = arg; > > + if (!ops->vidioc_g_color_space_conv) > > + break; > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > + break; > > + } > > default: > > { > > if (!ops->vidioc_default) > > diff --git a/linux/include/linux/videodev2.h > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > --- a/linux/include/linux/videodev2.h > > +++ b/linux/include/linux/videodev2.h > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > /* last CID + 1 */ > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > /* MPEG-class control IDs defined by V4L2 */ > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > }; > > > > /* > > + * Color conversion > > + * User needs to pass pointer to color conversion matrix > > + * defined by hardware > > + */ > > +struct v4l2_color_space_conversion { > > + __s32 coefficients[3][3]; > > + __s32 const_factor; > > + __s32 offsets[3]; > > +}; > > + > > +/* > > * A U D I O > > */ > > struct v4l2_audio { > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > #endif > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) > > + > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > v4l2_color_space_conversion) > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > v4l2_color_space_conversion) > > /* Reminder: when adding new ioctls please add support for them to > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > + > > #ifdef __OLD_VIDIOC_ > > /* for compatibility, will go away some day */ > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > diff --git a/linux/include/media/v4l2-ioctl.h > > b/linux/include/media/v4l2- ioctl.h > > index b01c044..0c44ecf 100644 > > --- a/linux/include/media/v4l2-ioctl.h > > +++ b/linux/include/media/v4l2-ioctl.h > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > /* For other private ioctls */ > > long (*vidioc_default) (struct file *file, void *fh, > > int cmd, void *arg); > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > + struct v4l2_color_space_conversion *a); > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > + struct v4l2_color_space_conversion *a); > > }; > > > > > > -- > > 1.5.6 > > [Shah, Hardik] Hi, > Any comments on this patch. > Hans/Mauro, > If possible can you integrate this onto your development branch. Hi Hardik, I've one question regarding the rotation control: I assume that this is limited to 0, 90, 180 and 270 degrees? I think it might be better to implement this as an enum in that case. Regards, Hans
On Sunday 25 January 2009, Hans Verkuil wrote: > On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > > -----Original Message----- > > > From: Shah, Hardik > > > Sent: Wednesday, January 21, 2009 5:24 PM > > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; R, > > > Sivaraj; Hiremath, Vaibhav > > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > > > 1. Control ID added for rotation. Same as HFLIP. > > > 2. Control ID added for setting background color on > > > output device. > > > 3. New ioctl added for setting the color space conversion from > > > YUV to RGB. > > > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > > --- > > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > > b/linux/drivers/media/video/v4l2-ioctl.c > > > index 165bc90..7599da8 100644 > > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > > #endif > > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = "VIDIOC_S_COLOR_SPACE_CONV", > > > + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] = "VIDIOC_G_COLOR_SPACE_CONV", > > > }; > > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file *file, > > > } > > > break; > > > } > > > - > > > + case VIDIOC_S_COLOR_SPACE_CONV: > > > + { > > > + struct v4l2_color_space_conversion *p = arg; > > > + if (!ops->vidioc_s_color_space_conv) > > > + break; > > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > > + break; > > > + } > > > + case VIDIOC_G_COLOR_SPACE_CONV: > > > + { > > > + struct v4l2_color_space_conversion *p = arg; > > > + if (!ops->vidioc_g_color_space_conv) > > > + break; > > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > > + break; > > > + } > > > default: > > > { > > > if (!ops->vidioc_default) > > > diff --git a/linux/include/linux/videodev2.h > > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > > --- a/linux/include/linux/videodev2.h > > > +++ b/linux/include/linux/videodev2.h > > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > > /* last CID + 1 */ > > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > > > /* MPEG-class control IDs defined by V4L2 */ > > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > > }; > > > > > > /* > > > + * Color conversion > > > + * User needs to pass pointer to color conversion matrix > > > + * defined by hardware > > > + */ > > > +struct v4l2_color_space_conversion { > > > + __s32 coefficients[3][3]; > > > + __s32 const_factor; > > > + __s32 offsets[3]; > > > +}; > > > + > > > +/* > > > * A U D I O > > > */ > > > struct v4l2_audio { > > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > > #endif > > > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) > > > + > > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > > v4l2_color_space_conversion) > > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > > v4l2_color_space_conversion) > > > /* Reminder: when adding new ioctls please add support for them to > > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > > > + > > > #ifdef __OLD_VIDIOC_ > > > /* for compatibility, will go away some day */ > > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > > diff --git a/linux/include/media/v4l2-ioctl.h > > > b/linux/include/media/v4l2- ioctl.h > > > index b01c044..0c44ecf 100644 > > > --- a/linux/include/media/v4l2-ioctl.h > > > +++ b/linux/include/media/v4l2-ioctl.h > > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > > /* For other private ioctls */ > > > long (*vidioc_default) (struct file *file, void *fh, > > > int cmd, void *arg); > > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > > + struct v4l2_color_space_conversion *a); > > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > > + struct v4l2_color_space_conversion *a); > > > }; > > > > > > > > > -- > > > 1.5.6 > > > > [Shah, Hardik] Hi, > > Any comments on this patch. > > Hans/Mauro, > > If possible can you integrate this onto your development branch. > > Hi Hardik, > > I've one question regarding the rotation control: I assume that this is > limited to 0, 90, 180 and 270 degrees? I think it might be better to > implement this as an enum in that case. 90 and 270 degrees would modify the image size. How would that be handled in relationship with VIDIOC_S/G_FMT ? Best regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sunday 25 January 2009, Laurent Pinchart wrote: > On Sunday 25 January 2009, Hans Verkuil wrote: > > On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > > > -----Original Message----- > > > > From: Shah, Hardik > > > > Sent: Wednesday, January 21, 2009 5:24 PM > > > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; > > > > R, Sivaraj; Hiremath, Vaibhav > > > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > > > > > 1. Control ID added for rotation. Same as HFLIP. > > > > 2. Control ID added for setting background color on > > > > output device. > > > > 3. New ioctl added for setting the color space conversion from > > > > YUV to RGB. > > > > > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > > > --- > > > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > > > b/linux/drivers/media/video/v4l2-ioctl.c > > > > index 165bc90..7599da8 100644 > > > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > > > #endif > > > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = > > > > "VIDIOC_S_COLOR_SPACE_CONV", + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] > > > > = "VIDIOC_G_COLOR_SPACE_CONV", }; > > > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file > > > > *file, } > > > > break; > > > > } > > > > - > > > > + case VIDIOC_S_COLOR_SPACE_CONV: > > > > + { > > > > + struct v4l2_color_space_conversion *p = arg; > > > > + if (!ops->vidioc_s_color_space_conv) > > > > + break; > > > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > > > + break; > > > > + } > > > > + case VIDIOC_G_COLOR_SPACE_CONV: > > > > + { > > > > + struct v4l2_color_space_conversion *p = arg; > > > > + if (!ops->vidioc_g_color_space_conv) > > > > + break; > > > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > > > + break; > > > > + } > > > > default: > > > > { > > > > if (!ops->vidioc_default) > > > > diff --git a/linux/include/linux/videodev2.h > > > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > > > --- a/linux/include/linux/videodev2.h > > > > +++ b/linux/include/linux/videodev2.h > > > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > > > /* last CID + 1 */ > > > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > > > > > /* MPEG-class control IDs defined by V4L2 */ > > > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > > > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > > > }; > > > > > > > > /* > > > > + * Color conversion > > > > + * User needs to pass pointer to color conversion matrix > > > > + * defined by hardware > > > > + */ > > > > +struct v4l2_color_space_conversion { > > > > + __s32 coefficients[3][3]; > > > > + __s32 const_factor; > > > > + __s32 offsets[3]; > > > > +}; > > > > + > > > > +/* > > > > * A U D I O > > > > */ > > > > struct v4l2_audio { > > > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > > > #endif > > > > > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct > > > > v4l2_hw_freq_seek) + > > > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > > > v4l2_color_space_conversion) > > > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > > > v4l2_color_space_conversion) > > > > /* Reminder: when adding new ioctls please add support for them to > > > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > > > > > + > > > > #ifdef __OLD_VIDIOC_ > > > > /* for compatibility, will go away some day */ > > > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > > > diff --git a/linux/include/media/v4l2-ioctl.h > > > > b/linux/include/media/v4l2- ioctl.h > > > > index b01c044..0c44ecf 100644 > > > > --- a/linux/include/media/v4l2-ioctl.h > > > > +++ b/linux/include/media/v4l2-ioctl.h > > > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > > > /* For other private ioctls */ > > > > long (*vidioc_default) (struct file *file, void *fh, > > > > int cmd, void *arg); > > > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > > > + struct v4l2_color_space_conversion *a); > > > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > > > + struct v4l2_color_space_conversion *a); > > > > }; > > > > > > > > > > > > -- > > > > 1.5.6 > > > > > > [Shah, Hardik] Hi, > > > Any comments on this patch. > > > Hans/Mauro, > > > If possible can you integrate this onto your development branch. > > > > Hi Hardik, > > > > I've one question regarding the rotation control: I assume that this is > > limited to 0, 90, 180 and 270 degrees? I think it might be better to > > implement this as an enum in that case. > > 90 and 270 degrees would modify the image size. How would that be handled > in relationship with VIDIOC_S/G_FMT ? Furthermore, 180 degrees rotation is identical to HFLIP + VFLIP. Best regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sunday 25 January 2009 10:35:49 Hans Verkuil wrote: > On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > > -----Original Message----- > > > From: Shah, Hardik > > > Sent: Wednesday, January 21, 2009 5:24 PM > > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; > > > R, Sivaraj; Hiremath, Vaibhav > > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > > > 1. Control ID added for rotation. Same as HFLIP. > > > 2. Control ID added for setting background color on > > > output device. > > > 3. New ioctl added for setting the color space conversion from > > > YUV to RGB. > > > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > > --- > > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > > b/linux/drivers/media/video/v4l2-ioctl.c > > > index 165bc90..7599da8 100644 > > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > > #endif > > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = > > > "VIDIOC_S_COLOR_SPACE_CONV", + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] > > > = "VIDIOC_G_COLOR_SPACE_CONV", }; > > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file > > > *file, } > > > break; > > > } > > > - > > > + case VIDIOC_S_COLOR_SPACE_CONV: > > > + { > > > + struct v4l2_color_space_conversion *p = arg; > > > + if (!ops->vidioc_s_color_space_conv) > > > + break; > > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > > + break; > > > + } > > > + case VIDIOC_G_COLOR_SPACE_CONV: > > > + { > > > + struct v4l2_color_space_conversion *p = arg; > > > + if (!ops->vidioc_g_color_space_conv) > > > + break; > > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > > + break; > > > + } > > > default: > > > { > > > if (!ops->vidioc_default) > > > diff --git a/linux/include/linux/videodev2.h > > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > > --- a/linux/include/linux/videodev2.h > > > +++ b/linux/include/linux/videodev2.h > > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > > /* last CID + 1 */ > > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > > > /* MPEG-class control IDs defined by V4L2 */ > > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > > }; > > > > > > /* > > > + * Color conversion > > > + * User needs to pass pointer to color conversion matrix > > > + * defined by hardware > > > + */ > > > +struct v4l2_color_space_conversion { > > > + __s32 coefficients[3][3]; > > > + __s32 const_factor; > > > + __s32 offsets[3]; > > > +}; > > > + > > > +/* > > > * A U D I O > > > */ > > > struct v4l2_audio { > > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > > #endif > > > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct > > > v4l2_hw_freq_seek) + > > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > > v4l2_color_space_conversion) > > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > > v4l2_color_space_conversion) > > > /* Reminder: when adding new ioctls please add support for them to > > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > > > + > > > #ifdef __OLD_VIDIOC_ > > > /* for compatibility, will go away some day */ > > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > > diff --git a/linux/include/media/v4l2-ioctl.h > > > b/linux/include/media/v4l2- ioctl.h > > > index b01c044..0c44ecf 100644 > > > --- a/linux/include/media/v4l2-ioctl.h > > > +++ b/linux/include/media/v4l2-ioctl.h > > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > > /* For other private ioctls */ > > > long (*vidioc_default) (struct file *file, void *fh, > > > int cmd, void *arg); > > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > > + struct v4l2_color_space_conversion *a); > > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > > + struct v4l2_color_space_conversion *a); > > > }; > > > > > > > > > -- > > > 1.5.6 > > > > [Shah, Hardik] Hi, > > Any comments on this patch. > > Hans/Mauro, > > If possible can you integrate this onto your development branch. > > Hi Hardik, > > I've one question regarding the rotation control: I assume that this is > limited to 0, 90, 180 and 270 degrees? I think it might be better to > implement this as an enum in that case. I also would like to see the documentation for these ioctls and controls. I hope my www.linuxtv.org/hg/~hverkuil/v4l-dvb-spec tree will be merged soon with the master, but in the meantime you can mail a diff against the documentation in my tree. I will ensure that the documentation patches will be applied correctly once the spec is merged in the main v4l-dvb repository. Regards, Hans
On Sun, 25 Jan 2009, Hans Verkuil wrote: > I also would like to see the documentation for these ioctls and controls. I > hope my www.linuxtv.org/hg/~hverkuil/v4l-dvb-spec tree will be merged soon > with the master, but in the meantime you can mail a diff against the > documentation in my tree. I will ensure that the documentation patches will > be applied correctly once the spec is merged in the main v4l-dvb > repository. Yes, I would like to see the color conversion documentation. V4L2 has a color space field as part of the pixel format (e.g., V4L2_COLORSPACE_REC709 or V4L2_COLORSPACE_SMPTE170M), how does this new ioctl interact with that? What is the format of the parameters? These are natively real numbers not integers, so to store them in an s32 there must some conversion, i.e. scale and offset. What is the actual equation used for the colorspace conversion? -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Hans Verkuil [mailto:hverkuil@xs4all.nl] > Sent: Sunday, January 25, 2009 3:06 PM > To: Shah, Hardik > Cc: video4linux-list@redhat.com; linux-media@vger.kernel.org > Subject: Re: [PATCH] New V4L2 ioctls for OMAP class of Devices > > On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > > -----Original Message----- > > > From: Shah, Hardik > > > Sent: Wednesday, January 21, 2009 5:24 PM > > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; R, > > > Sivaraj; Hiremath, Vaibhav > > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > > > 1. Control ID added for rotation. Same as HFLIP. > > > 2. Control ID added for setting background color on > > > output device. > > > 3. New ioctl added for setting the color space conversion from > > > YUV to RGB. > > > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > > --- > > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > > b/linux/drivers/media/video/v4l2-ioctl.c > > > index 165bc90..7599da8 100644 > > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > > #endif > > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = "VIDIOC_S_COLOR_SPACE_CONV", > > > + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] = "VIDIOC_G_COLOR_SPACE_CONV", > > > }; > > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file *file, > > > } > > > break; > > > } > > > - > > > + case VIDIOC_S_COLOR_SPACE_CONV: > > > + { > > > + struct v4l2_color_space_conversion *p = arg; > > > + if (!ops->vidioc_s_color_space_conv) > > > + break; > > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > > + break; > > > + } > > > + case VIDIOC_G_COLOR_SPACE_CONV: > > > + { > > > + struct v4l2_color_space_conversion *p = arg; > > > + if (!ops->vidioc_g_color_space_conv) > > > + break; > > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > > + break; > > > + } > > > default: > > > { > > > if (!ops->vidioc_default) > > > diff --git a/linux/include/linux/videodev2.h > > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > > --- a/linux/include/linux/videodev2.h > > > +++ b/linux/include/linux/videodev2.h > > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > > /* last CID + 1 */ > > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > > > /* MPEG-class control IDs defined by V4L2 */ > > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > > }; > > > > > > /* > > > + * Color conversion > > > + * User needs to pass pointer to color conversion matrix > > > + * defined by hardware > > > + */ > > > +struct v4l2_color_space_conversion { > > > + __s32 coefficients[3][3]; > > > + __s32 const_factor; > > > + __s32 offsets[3]; > > > +}; > > > + > > > +/* > > > * A U D I O > > > */ > > > struct v4l2_audio { > > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > > #endif > > > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) > > > + > > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > > v4l2_color_space_conversion) > > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > > v4l2_color_space_conversion) > > > /* Reminder: when adding new ioctls please add support for them to > > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > > > + > > > #ifdef __OLD_VIDIOC_ > > > /* for compatibility, will go away some day */ > > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > > diff --git a/linux/include/media/v4l2-ioctl.h > > > b/linux/include/media/v4l2- ioctl.h > > > index b01c044..0c44ecf 100644 > > > --- a/linux/include/media/v4l2-ioctl.h > > > +++ b/linux/include/media/v4l2-ioctl.h > > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > > /* For other private ioctls */ > > > long (*vidioc_default) (struct file *file, void *fh, > > > int cmd, void *arg); > > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > > + struct v4l2_color_space_conversion *a); > > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > > + struct v4l2_color_space_conversion *a); > > > }; > > > > > > > > > -- > > > 1.5.6 > > > > [Shah, Hardik] Hi, > > Any comments on this patch. > > Hans/Mauro, > > If possible can you integrate this onto your development branch. > > Hi Hardik, > > I've one question regarding the rotation control: I assume that this is > limited to 0, 90, 180 and 270 degrees? I think it might be better to > implement this as an enum in that case. Hi Hans, The rotation values are 0, 90, 180 and 270 degree but to disable rotation the value passed should be -1 and this is one more value. I know 0 degree rotation corresponds to rotation disabled but DSS hardware requires 0 degree rotation to be enabled for mirroring. The difference between the 0 degree rotation and no rotation(-1) is that 0 degree rotation will use the rotation engine in OMAP and then do the mirroring while -1 degree rotation will not use rotation engine. There is more bandwidth utilization while using the rotation engine. So people may want to completely disable rotation and people may want 0 degree rotation for mirroring support. That's why I prefer not to use enum. Is that ok for I will update the documentation on the new ioctls soon. you? > > Regards, > > Hans > > -- > Hans Verkuil - video4linux developer - sponsored by TANDBERG -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Laurent Pinchart [mailto:laurent.pinchart@skynet.be] > Sent: Sunday, January 25, 2009 3:16 PM > To: video4linux-list@redhat.com > Cc: Hans Verkuil; Shah, Hardik; linux-media@vger.kernel.org > Subject: Re: [PATCH] New V4L2 ioctls for OMAP class of Devices > > On Sunday 25 January 2009, Laurent Pinchart wrote: > > On Sunday 25 January 2009, Hans Verkuil wrote: > > > On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > > > > -----Original Message----- > > > > > From: Shah, Hardik > > > > > Sent: Wednesday, January 21, 2009 5:24 PM > > > > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > > > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; > > > > > R, Sivaraj; Hiremath, Vaibhav > > > > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > > > > > > > 1. Control ID added for rotation. Same as HFLIP. > > > > > 2. Control ID added for setting background color on > > > > > output device. > > > > > 3. New ioctl added for setting the color space conversion from > > > > > YUV to RGB. > > > > > > > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > > > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > > > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > > > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > > > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > > > > --- > > > > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > > > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > > > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > > > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > > > > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > > > > b/linux/drivers/media/video/v4l2-ioctl.c > > > > > index 165bc90..7599da8 100644 > > > > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > > > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > > > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > > > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > > > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > > > > #endif > > > > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = > > > > > "VIDIOC_S_COLOR_SPACE_CONV", + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] > > > > > = "VIDIOC_G_COLOR_SPACE_CONV", }; > > > > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > > > > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file > > > > > *file, } > > > > > break; > > > > > } > > > > > - > > > > > + case VIDIOC_S_COLOR_SPACE_CONV: > > > > > + { > > > > > + struct v4l2_color_space_conversion *p = arg; > > > > > + if (!ops->vidioc_s_color_space_conv) > > > > > + break; > > > > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > > > > + break; > > > > > + } > > > > > + case VIDIOC_G_COLOR_SPACE_CONV: > > > > > + { > > > > > + struct v4l2_color_space_conversion *p = arg; > > > > > + if (!ops->vidioc_g_color_space_conv) > > > > > + break; > > > > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > > > > + break; > > > > > + } > > > > > default: > > > > > { > > > > > if (!ops->vidioc_default) > > > > > diff --git a/linux/include/linux/videodev2.h > > > > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > > > > --- a/linux/include/linux/videodev2.h > > > > > +++ b/linux/include/linux/videodev2.h > > > > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > > > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > > > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > > > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > > > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > > > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > > > > /* last CID + 1 */ > > > > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > > > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > > > > > > > /* MPEG-class control IDs defined by V4L2 */ > > > > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | > 0x900) > > > > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > > > > }; > > > > > > > > > > /* > > > > > + * Color conversion > > > > > + * User needs to pass pointer to color conversion matrix > > > > > + * defined by hardware > > > > > + */ > > > > > +struct v4l2_color_space_conversion { > > > > > + __s32 coefficients[3][3]; > > > > > + __s32 const_factor; > > > > > + __s32 offsets[3]; > > > > > +}; > > > > > + > > > > > +/* > > > > > * A U D I O > > > > > */ > > > > > struct v4l2_audio { > > > > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > > > > #endif > > > > > > > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct > > > > > v4l2_hw_freq_seek) + > > > > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > > > > v4l2_color_space_conversion) > > > > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > > > > v4l2_color_space_conversion) > > > > > /* Reminder: when adding new ioctls please add support for them to > > > > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > > > > > > > + > > > > > #ifdef __OLD_VIDIOC_ > > > > > /* for compatibility, will go away some day */ > > > > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > > > > diff --git a/linux/include/media/v4l2-ioctl.h > > > > > b/linux/include/media/v4l2- ioctl.h > > > > > index b01c044..0c44ecf 100644 > > > > > --- a/linux/include/media/v4l2-ioctl.h > > > > > +++ b/linux/include/media/v4l2-ioctl.h > > > > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > > > > /* For other private ioctls */ > > > > > long (*vidioc_default) (struct file *file, void *fh, > > > > > int cmd, void *arg); > > > > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > > > > + struct v4l2_color_space_conversion *a); > > > > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > > > > + struct v4l2_color_space_conversion *a); > > > > > }; > > > > > > > > > > > > > > > -- > > > > > 1.5.6 > > > > > > > > [Shah, Hardik] Hi, > > > > Any comments on this patch. > > > > Hans/Mauro, > > > > If possible can you integrate this onto your development branch. > > > > > > Hi Hardik, > > > > > > I've one question regarding the rotation control: I assume that this is > > > limited to 0, 90, 180 and 270 degrees? I think it might be better to > > > implement this as an enum in that case. > > > > 90 and 270 degrees would modify the image size. How would that be handled > > in relationship with VIDIOC_S/G_FMT ? > > Furthermore, 180 degrees rotation is identical to HFLIP + VFLIP. [Shah, Hardik] Hi Laurent, OMAP is also having the hardware support for mirroring. I think HFLIP is essentially same as mirroring so we will be using the HFLIP in providing mirroring support. Regards, Hardik > > Best regards, > > Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Laurent Pinchart [mailto:laurent.pinchart@skynet.be] > Sent: Sunday, January 25, 2009 3:14 PM > To: video4linux-list@redhat.com > Cc: Hans Verkuil; Shah, Hardik; linux-media@vger.kernel.org > Subject: Re: [PATCH] New V4L2 ioctls for OMAP class of Devices > > On Sunday 25 January 2009, Hans Verkuil wrote: > > On Saturday 24 January 2009 18:03:51 Shah, Hardik wrote: > > > > -----Original Message----- > > > > From: Shah, Hardik > > > > Sent: Wednesday, January 21, 2009 5:24 PM > > > > To: video4linux-list@redhat.com; linux-media@vger.kernel.org > > > > Cc: Shah, Hardik; Jadav, Brijesh R; Nagalla, Hari; Hadli, Manjunath; R, > > > > Sivaraj; Hiremath, Vaibhav > > > > Subject: [PATCH] New V4L2 ioctls for OMAP class of Devices > > > > > > > > 1. Control ID added for rotation. Same as HFLIP. > > > > 2. Control ID added for setting background color on > > > > output device. > > > > 3. New ioctl added for setting the color space conversion from > > > > YUV to RGB. > > > > > > > > Signed-off-by: Brijesh Jadav <brijesh.j@ti.com> > > > > Signed-off-by: Hari Nagalla <hnagalla@ti.com> > > > > Signed-off-by: Hardik Shah <hardik.shah@ti.com> > > > > Signed-off-by: Manjunath Hadli <mrh@ti.com> > > > > Signed-off-by: R Sivaraj <sivaraj@ti.com> > > > > Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com> > > > > --- > > > > linux/drivers/media/video/v4l2-ioctl.c | 19 ++++++++++++++++++- > > > > linux/include/linux/videodev2.h | 19 ++++++++++++++++++- > > > > linux/include/media/v4l2-ioctl.h | 4 ++++ > > > > 3 files changed, 40 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/linux/drivers/media/video/v4l2-ioctl.c > > > > b/linux/drivers/media/video/v4l2-ioctl.c > > > > index 165bc90..7599da8 100644 > > > > --- a/linux/drivers/media/video/v4l2-ioctl.c > > > > +++ b/linux/drivers/media/video/v4l2-ioctl.c > > > > @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { > > > > [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", > > > > [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", > > > > #endif > > > > + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = > "VIDIOC_S_COLOR_SPACE_CONV", > > > > + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] = > "VIDIOC_G_COLOR_SPACE_CONV", > > > > }; > > > > #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) > > > > > > > > @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file *file, > > > > } > > > > break; > > > > } > > > > - > > > > + case VIDIOC_S_COLOR_SPACE_CONV: > > > > + { > > > > + struct v4l2_color_space_conversion *p = arg; > > > > + if (!ops->vidioc_s_color_space_conv) > > > > + break; > > > > + ret = ops->vidioc_s_color_space_conv(file, fh, p); > > > > + break; > > > > + } > > > > + case VIDIOC_G_COLOR_SPACE_CONV: > > > > + { > > > > + struct v4l2_color_space_conversion *p = arg; > > > > + if (!ops->vidioc_g_color_space_conv) > > > > + break; > > > > + ret = ops->vidioc_g_color_space_conv(file, fh, p); > > > > + break; > > > > + } > > > > default: > > > > { > > > > if (!ops->vidioc_default) > > > > diff --git a/linux/include/linux/videodev2.h > > > > b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 > > > > --- a/linux/include/linux/videodev2.h > > > > +++ b/linux/include/linux/videodev2.h > > > > @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { > > > > #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) > > > > #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) > > > > #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) > > > > +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) > > > > +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) > > > > /* last CID + 1 */ > > > > -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) > > > > +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) > > > > > > > > /* MPEG-class control IDs defined by V4L2 */ > > > > #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) > > > > @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { > > > > }; > > > > > > > > /* > > > > + * Color conversion > > > > + * User needs to pass pointer to color conversion matrix > > > > + * defined by hardware > > > > + */ > > > > +struct v4l2_color_space_conversion { > > > > + __s32 coefficients[3][3]; > > > > + __s32 const_factor; > > > > + __s32 offsets[3]; > > > > +}; > > > > + > > > > +/* > > > > * A U D I O > > > > */ > > > > struct v4l2_audio { > > > > @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { > > > > #endif > > > > > > > > #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct > v4l2_hw_freq_seek) > > > > + > > > > +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct > > > > v4l2_color_space_conversion) > > > > +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct > > > > v4l2_color_space_conversion) > > > > /* Reminder: when adding new ioctls please add support for them to > > > > drivers/media/video/v4l2-compat-ioctl32.c as well! */ > > > > > > > > + > > > > #ifdef __OLD_VIDIOC_ > > > > /* for compatibility, will go away some day */ > > > > #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) > > > > diff --git a/linux/include/media/v4l2-ioctl.h > > > > b/linux/include/media/v4l2- ioctl.h > > > > index b01c044..0c44ecf 100644 > > > > --- a/linux/include/media/v4l2-ioctl.h > > > > +++ b/linux/include/media/v4l2-ioctl.h > > > > @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { > > > > /* For other private ioctls */ > > > > long (*vidioc_default) (struct file *file, void *fh, > > > > int cmd, void *arg); > > > > + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, > > > > + struct v4l2_color_space_conversion *a); > > > > + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, > > > > + struct v4l2_color_space_conversion *a); > > > > }; > > > > > > > > > > > > -- > > > > 1.5.6 > > > > > > [Shah, Hardik] Hi, > > > Any comments on this patch. > > > Hans/Mauro, > > > If possible can you integrate this onto your development branch. > > > > Hi Hardik, > > > > I've one question regarding the rotation control: I assume that this is > > limited to 0, 90, 180 and 270 degrees? I think it might be better to > > implement this as an enum in that case. > > 90 and 270 degrees would modify the image size. How would that be handled in > relationship with VIDIOC_S/G_FMT ? [Shah, Hardik] Hi Laurent, After setting the rotation degree user has to once again call the S_FMT with the height and width to allow S_FMT to take care of reversing the height and width of the panel and depending on that your crop window and display window will be set if the rotaion is set to 90 or 270. While the get format will give you same height and width set earlier. Is this answer to your question? Regards, Hardik Shah > > Best regards, > > Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/linux/drivers/media/video/v4l2-ioctl.c b/linux/drivers/media/video/v4l2-ioctl.c index 165bc90..7599da8 100644 --- a/linux/drivers/media/video/v4l2-ioctl.c +++ b/linux/drivers/media/video/v4l2-ioctl.c @@ -270,6 +270,8 @@ static const char *v4l2_ioctls[] = { [_IOC_NR(VIDIOC_DBG_G_CHIP_IDENT)] = "VIDIOC_DBG_G_CHIP_IDENT", [_IOC_NR(VIDIOC_S_HW_FREQ_SEEK)] = "VIDIOC_S_HW_FREQ_SEEK", #endif + [_IOC_NR(VIDIOC_S_COLOR_SPACE_CONV)] = "VIDIOC_S_COLOR_SPACE_CONV", + [_IOC_NR(VIDIOC_G_COLOR_SPACE_CONV)] = "VIDIOC_G_COLOR_SPACE_CONV", }; #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) @@ -1838,7 +1840,22 @@ static long __video_do_ioctl(struct file *file, } break; } - + case VIDIOC_S_COLOR_SPACE_CONV: + { + struct v4l2_color_space_conversion *p = arg; + if (!ops->vidioc_s_color_space_conv) + break; + ret = ops->vidioc_s_color_space_conv(file, fh, p); + break; + } + case VIDIOC_G_COLOR_SPACE_CONV: + { + struct v4l2_color_space_conversion *p = arg; + if (!ops->vidioc_g_color_space_conv) + break; + ret = ops->vidioc_g_color_space_conv(file, fh, p); + break; + } default: { if (!ops->vidioc_default) diff --git a/linux/include/linux/videodev2.h b/linux/include/linux/videodev2.h index b0c5010..9fbc3b0 100644 --- a/linux/include/linux/videodev2.h +++ b/linux/include/linux/videodev2.h @@ -879,8 +879,10 @@ enum v4l2_power_line_frequency { #define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) +#define V4L2_CID_ROTATION (V4L2_CID_BASE+31) +#define V4L2_CID_BG_COLOR (V4L2_CID_BASE+32) /* last CID + 1 */ -#define V4L2_CID_LASTP1 (V4L2_CID_BASE+31) +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+33) /* MPEG-class control IDs defined by V4L2 */ #define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) @@ -1192,6 +1194,17 @@ struct v4l2_hw_freq_seek { }; /* + * Color conversion + * User needs to pass pointer to color conversion matrix + * defined by hardware + */ +struct v4l2_color_space_conversion { + __s32 coefficients[3][3]; + __s32 const_factor; + __s32 offsets[3]; +}; + +/* * A U D I O */ struct v4l2_audio { @@ -1493,9 +1506,13 @@ struct v4l2_chip_ident_old { #endif #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) + +#define VIDIOC_S_COLOR_SPACE_CONV _IOW('V', 83, struct v4l2_color_space_conversion) +#define VIDIOC_G_COLOR_SPACE_CONV _IOR('V', 84, struct v4l2_color_space_conversion) /* Reminder: when adding new ioctls please add support for them to drivers/media/video/v4l2-compat-ioctl32.c as well! */ + #ifdef __OLD_VIDIOC_ /* for compatibility, will go away some day */ #define VIDIOC_OVERLAY_OLD _IOWR('V', 14, int) diff --git a/linux/include/media/v4l2-ioctl.h b/linux/include/media/v4l2-ioctl.h index b01c044..0c44ecf 100644 --- a/linux/include/media/v4l2-ioctl.h +++ b/linux/include/media/v4l2-ioctl.h @@ -241,6 +241,10 @@ struct v4l2_ioctl_ops { /* For other private ioctls */ long (*vidioc_default) (struct file *file, void *fh, int cmd, void *arg); + int (*vidioc_s_color_space_conv) (struct file *file, void *fh, + struct v4l2_color_space_conversion *a); + int (*vidioc_g_color_space_conv) (struct file *file, void *fh, + struct v4l2_color_space_conversion *a); };