* [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls @ 2014-06-17 0:38 Vincent Palatin 2014-06-17 6:12 ` Hans de Goede 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-06-17 0:38 UTC (permalink / raw) To: Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC CT_PANTILT_ABSOLUTE_CONTROL terminal control request. Tested by plugging a Logitech ConferenceCam C3000e USB camera and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. Verified that it can pan and tilt at the same time in both directions. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc --- drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..af18120 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, .index = 12, .size = 4, - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES - | UVC_CTRL_FLAG_GET_DEF + .flags = UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_AUTO_UPDATE, }, { @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); } +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, + __u8 query, const __u8 *data) +{ + int first = mapping->offset / 8; + __s8 rel = (__s8)data[first]; + + switch (query) { + case UVC_GET_CUR: + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] + : -data[first+1]); + case UVC_GET_MIN: + return -data[first+1]; + case UVC_GET_MAX: + case UVC_GET_RES: + case UVC_GET_DEF: + default: + return data[first+1]; + } +} + +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, + __s32 value, __u8 *data) +{ + int first = mapping->offset / 8; + + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; + data[first+1] = min_t(int, abs(value), 0xff); +} + static struct uvc_control_mapping uvc_ctrl_mappings[] = { { .id = V4L2_CID_BRIGHTNESS, @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, }, { + .id = V4L2_CID_PAN_RELATIVE, + .name = "Pan (Relative)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { + .id = V4L2_CID_TILT_RELATIVE, + .name = "Tilt (Relative)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 16, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { .id = V4L2_CID_PRIVACY, .name = "Privacy", .entity = UVC_GUID_UVC_CAMERA, -- 2.0.0.526.g5318336 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls 2014-06-17 0:38 [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls Vincent Palatin @ 2014-06-17 6:12 ` Hans de Goede 2014-06-17 14:45 ` [PATCH v2] " Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Hans de Goede @ 2014-06-17 6:12 UTC (permalink / raw) To: Vincent Palatin, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia, Mauro Carvalho Chehab Hi, On 06/17/2014 02:38 AM, Vincent Palatin wrote: > Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC > CT_PANTILT_ABSOLUTE_CONTROL terminal control request. s/ABSOLUTE/RELATIVE in the commit message here. Otherwise looks good to me. Regards, Hans > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > Verified that it can pan and tilt at the same time in both directions. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc > --- > drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- > 1 file changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 0eb82106..af18120 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > .index = 12, > .size = 4, > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > - | UVC_CTRL_FLAG_GET_DEF > + .flags = UVC_CTRL_FLAG_SET_CUR > + | UVC_CTRL_FLAG_GET_RANGE > | UVC_CTRL_FLAG_AUTO_UPDATE, > }, > { > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, > data[2] = min((int)abs(value), 0xff); > } > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > + __u8 query, const __u8 *data) > +{ > + int first = mapping->offset / 8; > + __s8 rel = (__s8)data[first]; > + > + switch (query) { > + case UVC_GET_CUR: > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > + : -data[first+1]); > + case UVC_GET_MIN: > + return -data[first+1]; > + case UVC_GET_MAX: > + case UVC_GET_RES: > + case UVC_GET_DEF: > + default: > + return data[first+1]; > + } > +} > + > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > + __s32 value, __u8 *data) > +{ > + int first = mapping->offset / 8; > + > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > + data[first+1] = min_t(int, abs(value), 0xff); > +} > + > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > { > .id = V4L2_CID_BRIGHTNESS, > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { > .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > }, > { > + .id = V4L2_CID_PAN_RELATIVE, > + .name = "Pan (Relative)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 0, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > + .id = V4L2_CID_TILT_RELATIVE, > + .name = "Tilt (Relative)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 16, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > .id = V4L2_CID_PRIVACY, > .name = "Privacy", > .entity = UVC_GUID_UVC_CAMERA, > ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls 2014-06-17 6:12 ` Hans de Goede @ 2014-06-17 14:45 ` Vincent Palatin [not found] ` <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com> 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-06-17 14:45 UTC (permalink / raw) To: Hans de Goede, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC CT_PANTILT_RELATIVE_CONTROL terminal control request. Tested by plugging a Logitech ConferenceCam C3000e USB camera and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. Verified that it can pan and tilt at the same time in both directions. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc --- Changes v2: fix control request name in description. drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..af18120 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, .index = 12, .size = 4, - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES - | UVC_CTRL_FLAG_GET_DEF + .flags = UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_AUTO_UPDATE, }, { @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); } +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, + __u8 query, const __u8 *data) +{ + int first = mapping->offset / 8; + __s8 rel = (__s8)data[first]; + + switch (query) { + case UVC_GET_CUR: + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] + : -data[first+1]); + case UVC_GET_MIN: + return -data[first+1]; + case UVC_GET_MAX: + case UVC_GET_RES: + case UVC_GET_DEF: + default: + return data[first+1]; + } +} + +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, + __s32 value, __u8 *data) +{ + int first = mapping->offset / 8; + + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; + data[first+1] = min_t(int, abs(value), 0xff); +} + static struct uvc_control_mapping uvc_ctrl_mappings[] = { { .id = V4L2_CID_BRIGHTNESS, @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, }, { + .id = V4L2_CID_PAN_RELATIVE, + .name = "Pan (Relative)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { + .id = V4L2_CID_TILT_RELATIVE, + .name = "Tilt (Relative)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 16, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { .id = V4L2_CID_PRIVACY, .name = "Privacy", .entity = UVC_GUID_UVC_CAMERA, -- 2.0.0.526.g5318336 ^ permalink raw reply related [flat|nested] 27+ messages in thread
[parent not found: <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com>]
* Re: [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls [not found] ` <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com> @ 2014-06-25 9:54 ` Laurent Pinchart 2014-07-08 23:28 ` Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Laurent Pinchart @ 2014-06-25 9:54 UTC (permalink / raw) To: Pawel Osciak Cc: Vincent Palatin, Hans de Goede, linux-media, linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab Hi Pawel, On Wednesday 25 June 2014 11:46:24 Pawel Osciak wrote: > On Tue, Jun 17, 2014 at 11:45 PM, Vincent Palatin wrote: > > Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC > > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > > Verified that it can pan and tilt at the same time in both directions. > > > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > > > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc > > --- > > > > Changes > > v2: fix control request name in description. > > The patch looks good, but I have a more general comment for everyone to > consider. This doesn't match the expected functionality of > controls V4L2_CID_PAN/TILT_RELATIVE. This is basically an on/off switch for > pan/tilt, which once enabled will keep going until turned off (or I'm > guessing until the maximum pan/tilt is reached), while the controls are > supposed to expose an ability to turn the camera by a specified amount. > Here the amount will also be ignored... I agree with you here, and this mismatch between the V4L and UVC controls is the reason why I haven't implemented relative pan/tilt support. > Given that this is a standard UVC control, perhaps we need new V4L2 > controls for it, as I'm assuming we can't change the meaning of existing > controls? We could extend the meaning of the controls to cover the UVC behaviour in a device-specific fashion, but that would be confusing for applications, so new controls might be a better idea. -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls 2014-06-25 9:54 ` Laurent Pinchart @ 2014-07-08 23:28 ` Vincent Palatin 2014-07-08 23:49 ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-07-08 23:28 UTC (permalink / raw) To: Laurent Pinchart Cc: Pawel Osciak, Hans de Goede, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Wed, Jun 25, 2014 at 2:54 AM, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > Hi Pawel, > > On Wednesday 25 June 2014 11:46:24 Pawel Osciak wrote: >> On Tue, Jun 17, 2014 at 11:45 PM, Vincent Palatin wrote: >> > Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC >> > CT_PANTILT_RELATIVE_CONTROL terminal control request. >> > >> > Tested by plugging a Logitech ConferenceCam C3000e USB camera >> > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. >> > Verified that it can pan and tilt at the same time in both directions. >> > >> > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> >> > >> > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc >> > --- >> > >> > Changes >> > v2: fix control request name in description. >> >> The patch looks good, but I have a more general comment for everyone to >> consider. This doesn't match the expected functionality of >> controls V4L2_CID_PAN/TILT_RELATIVE. This is basically an on/off switch for >> pan/tilt, which once enabled will keep going until turned off (or I'm >> guessing until the maximum pan/tilt is reached), while the controls are >> supposed to expose an ability to turn the camera by a specified amount. >> Here the amount will also be ignored... > > I agree with you here, and this mismatch between the V4L and UVC controls is > the reason why I haven't implemented relative pan/tilt support. > >> Given that this is a standard UVC control, perhaps we need new V4L2 >> controls for it, as I'm assuming we can't change the meaning of existing >> controls? > > We could extend the meaning of the controls to cover the UVC behaviour in a > device-specific fashion, but that would be confusing for applications, so new > controls might be a better idea. Ok, I will add another patch to create new V4L2_CID_PAN_SPEED / V4L2_CID_TILT_SPEED controls. -- Vincent ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-07-08 23:28 ` Vincent Palatin @ 2014-07-08 23:49 ` Vincent Palatin 2014-07-08 23:49 ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin ` (2 more replies) 0 siblings, 3 replies; 27+ messages in thread From: Vincent Palatin @ 2014-07-08 23:49 UTC (permalink / raw) To: Hans de Goede, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the camera by setting its rotation speed around its axis. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> --- Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ include/uapi/linux/v4l2-controls.h | 2 ++ 4 files changed, 35 insertions(+) diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml index eee6f0f..21910e9 100644 --- a/Documentation/DocBook/media/v4l/compat.xml +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. </orderedlist> </section> + <section> + <title>V4L2 in Linux 3.17</title> + <orderedlist> + <listitem> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> + </listitem> + </orderedlist> + </section> + <section id="other"> <title>Relation of V4L2 to other Linux multimedia APIs</title> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 47198ee..cdf97f0 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry> </row> <row><entry></entry></row> + <row> + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera horizontally at the specific speed. The unit is undefined. A +positive value moves the camera to the right (clockwise when viewed +from above), a negative value to the left. A value of zero does not +cause or stop the motion.</entry> + </row> + <row><entry></entry></row> + + <row> + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera vertically at the specified speed. The unit is undefined. A +positive value moves the camera up, a negative value down. A value of +zero does not cause or stop the motion.</entry> + </row> + <row><entry></entry></row> + </tbody> </tgroup> </table> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index 55c6832..57ddaf4 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index 2ac5597..5576044 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range { V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, }; +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) /* FM Modulator class control IDs */ -- 2.0.0.526.g5318336 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-07-08 23:49 ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin @ 2014-07-08 23:49 ` Vincent Palatin 2014-09-03 4:57 ` Pawel Osciak 2014-07-31 17:22 ` [PATCH 1/2] [media] V4L: Add camera " Vincent Palatin [not found] ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com> 2 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-07-08 23:49 UTC (permalink / raw) To: Hans de Goede, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC CT_PANTILT_RELATIVE_CONTROL terminal control request. Tested by plugging a Logitech ConferenceCam C3000e USB camera and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. Verified that it can pan and tilt at the same time in both directions. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc --- drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, .index = 12, .size = 4, - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES - | UVC_CTRL_FLAG_GET_DEF + .flags = UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_AUTO_UPDATE, }, { @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); } +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, + __u8 query, const __u8 *data) +{ + int first = mapping->offset / 8; + __s8 rel = (__s8)data[first]; + + switch (query) { + case UVC_GET_CUR: + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] + : -data[first+1]); + case UVC_GET_MIN: + return -data[first+1]; + case UVC_GET_MAX: + case UVC_GET_RES: + case UVC_GET_DEF: + default: + return data[first+1]; + } +} + +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, + __s32 value, __u8 *data) +{ + int first = mapping->offset / 8; + + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; + data[first+1] = min_t(int, abs(value), 0xff); +} + static struct uvc_control_mapping uvc_ctrl_mappings[] = { { .id = V4L2_CID_BRIGHTNESS, @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, }, { + .id = V4L2_CID_PAN_SPEED, + .name = "Pan (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { + .id = V4L2_CID_TILT_SPEED, + .name = "Tilt (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 16, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { .id = V4L2_CID_PRIVACY, .name = "Privacy", .entity = UVC_GUID_UVC_CAMERA, -- 2.0.0.526.g5318336 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-07-08 23:49 ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin @ 2014-09-03 4:57 ` Pawel Osciak 2014-09-03 19:40 ` [PATCH v3 " Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Pawel Osciak @ 2014-09-03 4:57 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org> wrote: > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > Verified that it can pan and tilt at the same time in both directions. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Pawel Osciak <posciak@chromium.org> > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc > --- > drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- > 1 file changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 0eb82106..d703cb0 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > .index = 12, > .size = 4, > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > - | UVC_CTRL_FLAG_GET_DEF > + .flags = UVC_CTRL_FLAG_SET_CUR > + | UVC_CTRL_FLAG_GET_RANGE > | UVC_CTRL_FLAG_AUTO_UPDATE, > }, > { > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, > data[2] = min((int)abs(value), 0xff); > } > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > + __u8 query, const __u8 *data) > +{ > + int first = mapping->offset / 8; > + __s8 rel = (__s8)data[first]; > + > + switch (query) { > + case UVC_GET_CUR: > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > + : -data[first+1]); > + case UVC_GET_MIN: > + return -data[first+1]; > + case UVC_GET_MAX: > + case UVC_GET_RES: > + case UVC_GET_DEF: > + default: > + return data[first+1]; > + } > +} > + > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > + __s32 value, __u8 *data) > +{ > + int first = mapping->offset / 8; > + > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > + data[first+1] = min_t(int, abs(value), 0xff); > +} > + > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > { > .id = V4L2_CID_BRIGHTNESS, > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { > .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > }, > { > + .id = V4L2_CID_PAN_SPEED, > + .name = "Pan (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 0, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > + .id = V4L2_CID_TILT_SPEED, > + .name = "Tilt (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 16, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > .id = V4L2_CID_PRIVACY, > .name = "Privacy", > .entity = UVC_GUID_UVC_CAMERA, > -- > 2.0.0.526.g5318336 > ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-03 4:57 ` Pawel Osciak @ 2014-09-03 19:40 ` Vincent Palatin 2014-09-04 0:37 ` Pawel Osciak 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-09-03 19:40 UTC (permalink / raw) To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC CT_PANTILT_RELATIVE_CONTROL terminal control request. Tested by plugging a Logitech ConferenceCam C3000e USB camera and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. Verified that it can pan and tilt at the same time in both directions. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc --- Changes from v1/v2: - rebased drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, .index = 12, .size = 4, - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES - | UVC_CTRL_FLAG_GET_DEF + .flags = UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_AUTO_UPDATE, }, { @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); } +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, + __u8 query, const __u8 *data) +{ + int first = mapping->offset / 8; + __s8 rel = (__s8)data[first]; + + switch (query) { + case UVC_GET_CUR: + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] + : -data[first+1]); + case UVC_GET_MIN: + return -data[first+1]; + case UVC_GET_MAX: + case UVC_GET_RES: + case UVC_GET_DEF: + default: + return data[first+1]; + } +} + +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, + __s32 value, __u8 *data) +{ + int first = mapping->offset / 8; + + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; + data[first+1] = min_t(int, abs(value), 0xff); +} + static struct uvc_control_mapping uvc_ctrl_mappings[] = { { .id = V4L2_CID_BRIGHTNESS, @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, }, { + .id = V4L2_CID_PAN_SPEED, + .name = "Pan (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { + .id = V4L2_CID_TILT_SPEED, + .name = "Tilt (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 16, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { .id = V4L2_CID_PRIVACY, .name = "Privacy", .entity = UVC_GUID_UVC_CAMERA, -- 2.1.0.rc2.206.gedb03e5 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-03 19:40 ` [PATCH v3 " Vincent Palatin @ 2014-09-04 0:37 ` Pawel Osciak 2014-09-04 0:47 ` [PATCH v4 " Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Pawel Osciak @ 2014-09-04 0:37 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Thu, Sep 4, 2014 at 4:40 AM, Vincent Palatin <vpalatin@chromium.org> wrote: > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > Verified that it can pan and tilt at the same time in both directions. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc Sorry, forgot to mention this previously, please remove gerrit ids from the patches. Thanks, P. > --- > Changes from v1/v2: > - rebased > > drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- > 1 file changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c > index 0eb82106..d703cb0 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > .index = 12, > .size = 4, > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > - | UVC_CTRL_FLAG_GET_DEF > + .flags = UVC_CTRL_FLAG_SET_CUR > + | UVC_CTRL_FLAG_GET_RANGE > | UVC_CTRL_FLAG_AUTO_UPDATE, > }, > { > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, > data[2] = min((int)abs(value), 0xff); > } > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > + __u8 query, const __u8 *data) > +{ > + int first = mapping->offset / 8; > + __s8 rel = (__s8)data[first]; > + > + switch (query) { > + case UVC_GET_CUR: > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > + : -data[first+1]); > + case UVC_GET_MIN: > + return -data[first+1]; > + case UVC_GET_MAX: > + case UVC_GET_RES: > + case UVC_GET_DEF: > + default: > + return data[first+1]; > + } > +} > + > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > + __s32 value, __u8 *data) > +{ > + int first = mapping->offset / 8; > + > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > + data[first+1] = min_t(int, abs(value), 0xff); > +} > + > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > { > .id = V4L2_CID_BRIGHTNESS, > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { > .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > }, > { > + .id = V4L2_CID_PAN_SPEED, > + .name = "Pan (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 0, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > + .id = V4L2_CID_TILT_SPEED, > + .name = "Tilt (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 16, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > .id = V4L2_CID_PRIVACY, > .name = "Privacy", > .entity = UVC_GUID_UVC_CAMERA, > -- > 2.1.0.rc2.206.gedb03e5 > ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-04 0:37 ` Pawel Osciak @ 2014-09-04 0:47 ` Vincent Palatin 2014-09-04 20:29 ` Laurent Pinchart 2014-09-04 20:35 ` [PATCH v4 " Laurent Pinchart 0 siblings, 2 replies; 27+ messages in thread From: Vincent Palatin @ 2014-09-04 0:47 UTC (permalink / raw) To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC CT_PANTILT_RELATIVE_CONTROL terminal control request. Tested by plugging a Logitech ConferenceCam C3000e USB camera and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. Verified that it can pan and tilt at the same time in both directions. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> --- Changes from v1/v2: - rebased Changes from v3: - removed gerrit-id drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, .index = 12, .size = 4, - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES - | UVC_CTRL_FLAG_GET_DEF + .flags = UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_AUTO_UPDATE, }, { @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); } +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, + __u8 query, const __u8 *data) +{ + int first = mapping->offset / 8; + __s8 rel = (__s8)data[first]; + + switch (query) { + case UVC_GET_CUR: + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] + : -data[first+1]); + case UVC_GET_MIN: + return -data[first+1]; + case UVC_GET_MAX: + case UVC_GET_RES: + case UVC_GET_DEF: + default: + return data[first+1]; + } +} + +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, + __s32 value, __u8 *data) +{ + int first = mapping->offset / 8; + + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; + data[first+1] = min_t(int, abs(value), 0xff); +} + static struct uvc_control_mapping uvc_ctrl_mappings[] = { { .id = V4L2_CID_BRIGHTNESS, @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, }, { + .id = V4L2_CID_PAN_SPEED, + .name = "Pan (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { + .id = V4L2_CID_TILT_SPEED, + .name = "Tilt (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 16, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { .id = V4L2_CID_PRIVACY, .name = "Privacy", .entity = UVC_GUID_UVC_CAMERA, -- 2.1.0.rc2.206.gedb03e5 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-04 0:47 ` [PATCH v4 " Vincent Palatin @ 2014-09-04 20:29 ` Laurent Pinchart 2014-10-06 20:41 ` Vincent Palatin 2014-09-04 20:35 ` [PATCH v4 " Laurent Pinchart 1 sibling, 1 reply; 27+ messages in thread From: Laurent Pinchart @ 2014-09-04 20:29 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Pawel Osciak, linux-media, linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab Hi Vincent, Thank you for the patch. On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote: > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > Verified that it can pan and tilt at the same time in both directions. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Small comment here, as Pawel has reviewed the previous version, you could have added his Reviewed-by tag to the patch. > --- > Changes from v1/v2: > - rebased > Changes from v3: > - removed gerrit-id > > drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++--- > 1 file changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > .index = 12, > .size = 4, > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > - | UVC_CTRL_FLAG_GET_DEF > + .flags = UVC_CTRL_FLAG_SET_CUR > + | UVC_CTRL_FLAG_GET_RANGE > | UVC_CTRL_FLAG_AUTO_UPDATE, > }, > { > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); > } > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > + __u8 query, const __u8 *data) > +{ > + int first = mapping->offset / 8; Nitpicking, I would use unsigned int instead of int here, as the value can't be negative (same comment for the next function). If you're fine with that there's no need to resubmit, I can modify this when applying. > + __s8 rel = (__s8)data[first]; > + > + switch (query) { > + case UVC_GET_CUR: > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > + : -data[first+1]); > + case UVC_GET_MIN: > + return -data[first+1]; > + case UVC_GET_MAX: > + case UVC_GET_RES: > + case UVC_GET_DEF: > + default: > + return data[first+1]; > + } > +} > + > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > + __s32 value, __u8 *data) > +{ > + int first = mapping->offset / 8; > + > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > + data[first+1] = min_t(int, abs(value), 0xff); > +} > + > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > { > .id = V4L2_CID_BRIGHTNESS, > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = > { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > }, > { > + .id = V4L2_CID_PAN_SPEED, > + .name = "Pan (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 0, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > + .id = V4L2_CID_TILT_SPEED, > + .name = "Tilt (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 16, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > .id = V4L2_CID_PRIVACY, > .name = "Privacy", > .entity = UVC_GUID_UVC_CAMERA, -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-04 20:29 ` Laurent Pinchart @ 2014-10-06 20:41 ` Vincent Palatin 2014-10-06 21:05 ` [PATCH v5 " Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-10-06 20:41 UTC (permalink / raw) To: Laurent Pinchart Cc: Hans de Goede, Pawel Osciak, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Thu, Sep 4, 2014 at 1:29 PM, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Hi Vincent, > > Thank you for the patch. > > On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote: > > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > > Verified that it can pan and tilt at the same time in both directions. > > > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > Small comment here, as Pawel has reviewed the previous version, you could have > added his Reviewed-by tag to the patch. > > > --- > > Changes from v1/v2: > > - rebased > > Changes from v3: > > - removed gerrit-id > > > > drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++--- > > 1 file changed, 55 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c > > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > .index = 12, > > .size = 4, > > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > > - | UVC_CTRL_FLAG_GET_DEF > > + .flags = UVC_CTRL_FLAG_SET_CUR > > + | UVC_CTRL_FLAG_GET_RANGE > > | UVC_CTRL_FLAG_AUTO_UPDATE, > > }, > > { > > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct > > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); > > } > > > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > > + __u8 query, const __u8 *data) > > +{ > > + int first = mapping->offset / 8; > > Nitpicking, I would use unsigned int instead of int here, as the value can't > be negative (same comment for the next function). > > If you're fine with that there's no need to resubmit, I can modify this when > applying. Yes, I'm fine with that. > > > > + __s8 rel = (__s8)data[first]; > > + > > + switch (query) { > > + case UVC_GET_CUR: > > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > > + : -data[first+1]); > > + case UVC_GET_MIN: > > + return -data[first+1]; > > + case UVC_GET_MAX: > > + case UVC_GET_RES: > > + case UVC_GET_DEF: > > + default: > > + return data[first+1]; > > + } > > +} > > + > > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > > + __s32 value, __u8 *data) > > +{ > > + int first = mapping->offset / 8; > > + > > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > > + data[first+1] = min_t(int, abs(value), 0xff); > > +} > > + > > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > > { > > .id = V4L2_CID_BRIGHTNESS, > > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = > > { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > }, > > { > > + .id = V4L2_CID_PAN_SPEED, > > + .name = "Pan (Speed)", > > + .entity = UVC_GUID_UVC_CAMERA, > > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > + .size = 16, > > + .offset = 0, > > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > + .get = uvc_ctrl_get_rel_speed, > > + .set = uvc_ctrl_set_rel_speed, > > + }, > > + { > > + .id = V4L2_CID_TILT_SPEED, > > + .name = "Tilt (Speed)", > > + .entity = UVC_GUID_UVC_CAMERA, > > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > + .size = 16, > > + .offset = 16, > > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > + .get = uvc_ctrl_get_rel_speed, > > + .set = uvc_ctrl_set_rel_speed, > > + }, > > + { > > .id = V4L2_CID_PRIVACY, > > .name = "Privacy", > > .entity = UVC_GUID_UVC_CAMERA, > > -- > Regards, > > Laurent Pinchart > ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-10-06 20:41 ` Vincent Palatin @ 2014-10-06 21:05 ` Vincent Palatin 2014-10-07 16:36 ` Laurent Pinchart 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-10-06 21:05 UTC (permalink / raw) To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC CT_PANTILT_RELATIVE_CONTROL terminal control request. Tested by plugging a Logitech ConferenceCam C3000e USB camera and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. Verified that it can pan and tilt at the same time in both directions. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Pawel Osciak <posciak@chromium.org> --- Changes from v1/v2: - rebased Changes from v3: - removed gerrit-id Chnages from v4: - switched "offset" to unsigned int drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d2d1755 100644 --- a/drivers/media/usb/uvc/uvc_ctrl.c +++ b/drivers/media/usb/uvc/uvc_ctrl.c @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, .index = 12, .size = 4, - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES - | UVC_CTRL_FLAG_GET_DEF + .flags = UVC_CTRL_FLAG_SET_CUR + | UVC_CTRL_FLAG_GET_RANGE | UVC_CTRL_FLAG_AUTO_UPDATE, }, { @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); } +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, + __u8 query, const __u8 *data) +{ + unsigned int first = mapping->offset / 8; + __s8 rel = (__s8)data[first]; + + switch (query) { + case UVC_GET_CUR: + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] + : -data[first+1]); + case UVC_GET_MIN: + return -data[first+1]; + case UVC_GET_MAX: + case UVC_GET_RES: + case UVC_GET_DEF: + default: + return data[first+1]; + } +} + +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, + __s32 value, __u8 *data) +{ + unsigned int first = mapping->offset / 8; + + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; + data[first+1] = min_t(int, abs(value), 0xff); +} + static struct uvc_control_mapping uvc_ctrl_mappings[] = { { .id = V4L2_CID_BRIGHTNESS, @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, }, { + .id = V4L2_CID_PAN_SPEED, + .name = "Pan (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 0, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { + .id = V4L2_CID_TILT_SPEED, + .name = "Tilt (Speed)", + .entity = UVC_GUID_UVC_CAMERA, + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, + .size = 16, + .offset = 16, + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, + .get = uvc_ctrl_get_rel_speed, + .set = uvc_ctrl_set_rel_speed, + }, + { .id = V4L2_CID_PRIVACY, .name = "Privacy", .entity = UVC_GUID_UVC_CAMERA, -- 2.1.0.rc2.206.gedb03e5 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-10-06 21:05 ` [PATCH v5 " Vincent Palatin @ 2014-10-07 16:36 ` Laurent Pinchart 2014-10-07 16:41 ` Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Laurent Pinchart @ 2014-10-07 16:36 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Pawel Osciak, linux-media, linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab Hi Vincent, Thank you for the patch. Mauro has already merged this in his tree, it should appear in v3.18-rc1. On Monday 06 October 2014 14:05:59 Vincent Palatin wrote: > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > Verified that it can pan and tilt at the same time in both directions. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > Reviewed-by: Pawel Osciak <posciak@chromium.org> > --- > Changes from v1/v2: > - rebased > Changes from v3: > - removed gerrit-id > Chnages from v4: > - switched "offset" to unsigned int > > drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++--- > 1 file changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d2d1755 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > .index = 12, > .size = 4, > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > - | UVC_CTRL_FLAG_GET_DEF > + .flags = UVC_CTRL_FLAG_SET_CUR > + | UVC_CTRL_FLAG_GET_RANGE > > | UVC_CTRL_FLAG_AUTO_UPDATE, > > }, > { > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); > } > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > + __u8 query, const __u8 *data) > +{ > + unsigned int first = mapping->offset / 8; > + __s8 rel = (__s8)data[first]; > + > + switch (query) { > + case UVC_GET_CUR: > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > + : -data[first+1]); > + case UVC_GET_MIN: > + return -data[first+1]; > + case UVC_GET_MAX: > + case UVC_GET_RES: > + case UVC_GET_DEF: > + default: > + return data[first+1]; > + } > +} > + > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > + __s32 value, __u8 *data) > +{ > + unsigned int first = mapping->offset / 8; > + > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > + data[first+1] = min_t(int, abs(value), 0xff); > +} > + > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > { > .id = V4L2_CID_BRIGHTNESS, > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = > { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > }, > { > + .id = V4L2_CID_PAN_SPEED, > + .name = "Pan (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 0, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > + .id = V4L2_CID_TILT_SPEED, > + .name = "Tilt (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 16, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > .id = V4L2_CID_PRIVACY, > .name = "Privacy", > .entity = UVC_GUID_UVC_CAMERA, -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-10-07 16:36 ` Laurent Pinchart @ 2014-10-07 16:41 ` Vincent Palatin 0 siblings, 0 replies; 27+ messages in thread From: Vincent Palatin @ 2014-10-07 16:41 UTC (permalink / raw) To: Laurent Pinchart Cc: Hans de Goede, Pawel Osciak, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Tue, Oct 7, 2014 at 9:36 AM, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Hi Vincent, > > Thank you for the patch. Mauro has already merged this in his tree, it should > appear in v3.18-rc1. > Great ! I missed the merge. Thanks, -- Vincent > > On Monday 06 October 2014 14:05:59 Vincent Palatin wrote: > > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > > Verified that it can pan and tilt at the same time in both directions. > > > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > Reviewed-by: Pawel Osciak <posciak@chromium.org> > > --- > > Changes from v1/v2: > > - rebased > > Changes from v3: > > - removed gerrit-id > > Chnages from v4: > > - switched "offset" to unsigned int > > > > drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++--- > > 1 file changed, 55 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c > > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d2d1755 100644 > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > .index = 12, > > .size = 4, > > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > > - | UVC_CTRL_FLAG_GET_DEF > > + .flags = UVC_CTRL_FLAG_SET_CUR > > + | UVC_CTRL_FLAG_GET_RANGE > > > > | UVC_CTRL_FLAG_AUTO_UPDATE, > > > > }, > > { > > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct > > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); > > } > > > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > > + __u8 query, const __u8 *data) > > +{ > > + unsigned int first = mapping->offset / 8; > > + __s8 rel = (__s8)data[first]; > > + > > + switch (query) { > > + case UVC_GET_CUR: > > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > > + : -data[first+1]); > > + case UVC_GET_MIN: > > + return -data[first+1]; > > + case UVC_GET_MAX: > > + case UVC_GET_RES: > > + case UVC_GET_DEF: > > + default: > > + return data[first+1]; > > + } > > +} > > + > > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > > + __s32 value, __u8 *data) > > +{ > > + unsigned int first = mapping->offset / 8; > > + > > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > > + data[first+1] = min_t(int, abs(value), 0xff); > > +} > > + > > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > > { > > .id = V4L2_CID_BRIGHTNESS, > > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = > > { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > }, > > { > > + .id = V4L2_CID_PAN_SPEED, > > + .name = "Pan (Speed)", > > + .entity = UVC_GUID_UVC_CAMERA, > > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > + .size = 16, > > + .offset = 0, > > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > + .get = uvc_ctrl_get_rel_speed, > > + .set = uvc_ctrl_set_rel_speed, > > + }, > > + { > > + .id = V4L2_CID_TILT_SPEED, > > + .name = "Tilt (Speed)", > > + .entity = UVC_GUID_UVC_CAMERA, > > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > + .size = 16, > > + .offset = 16, > > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > + .get = uvc_ctrl_get_rel_speed, > > + .set = uvc_ctrl_set_rel_speed, > > + }, > > + { > > .id = V4L2_CID_PRIVACY, > > .name = "Privacy", > > .entity = UVC_GUID_UVC_CAMERA, > > -- > Regards, > > Laurent Pinchart > ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-04 0:47 ` [PATCH v4 " Vincent Palatin 2014-09-04 20:29 ` Laurent Pinchart @ 2014-09-04 20:35 ` Laurent Pinchart 2014-10-06 20:44 ` Vincent Palatin 1 sibling, 1 reply; 27+ messages in thread From: Laurent Pinchart @ 2014-09-04 20:35 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Pawel Osciak, linux-media, linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab Hi Vincent, On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote: > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > Verified that it can pan and tilt at the same time in both directions. By the way, what is the control value reported by the device after it stops moving by itself due to reaching a limit position ? > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > --- > Changes from v1/v2: > - rebased > Changes from v3: > - removed gerrit-id > > drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++--- > 1 file changed, 55 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 > --- a/drivers/media/usb/uvc/uvc_ctrl.c > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > .index = 12, > .size = 4, > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > - | UVC_CTRL_FLAG_GET_DEF > + .flags = UVC_CTRL_FLAG_SET_CUR > + | UVC_CTRL_FLAG_GET_RANGE > > | UVC_CTRL_FLAG_AUTO_UPDATE, > > }, > { > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); > } > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > + __u8 query, const __u8 *data) > +{ > + int first = mapping->offset / 8; > + __s8 rel = (__s8)data[first]; > + > + switch (query) { > + case UVC_GET_CUR: > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > + : -data[first+1]); > + case UVC_GET_MIN: > + return -data[first+1]; > + case UVC_GET_MAX: > + case UVC_GET_RES: > + case UVC_GET_DEF: > + default: > + return data[first+1]; > + } > +} > + > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > + __s32 value, __u8 *data) > +{ > + int first = mapping->offset / 8; > + > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > + data[first+1] = min_t(int, abs(value), 0xff); > +} > + > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > { > .id = V4L2_CID_BRIGHTNESS, > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = > { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > }, > { > + .id = V4L2_CID_PAN_SPEED, > + .name = "Pan (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 0, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > + .id = V4L2_CID_TILT_SPEED, > + .name = "Tilt (Speed)", > + .entity = UVC_GUID_UVC_CAMERA, > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > + .size = 16, > + .offset = 16, > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > + .get = uvc_ctrl_get_rel_speed, > + .set = uvc_ctrl_set_rel_speed, > + }, > + { > .id = V4L2_CID_PRIVACY, > .name = "Privacy", > .entity = UVC_GUID_UVC_CAMERA, -- Regards, Laurent Pinchart ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls 2014-09-04 20:35 ` [PATCH v4 " Laurent Pinchart @ 2014-10-06 20:44 ` Vincent Palatin 0 siblings, 0 replies; 27+ messages in thread From: Vincent Palatin @ 2014-10-06 20:44 UTC (permalink / raw) To: Laurent Pinchart Cc: Hans de Goede, Pawel Osciak, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Thu, Sep 4, 2014 at 1:35 PM, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Hi Vincent, > > On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote: > > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC > > CT_PANTILT_RELATIVE_CONTROL terminal control request. > > > > Tested by plugging a Logitech ConferenceCam C3000e USB camera > > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl. > > Verified that it can pan and tilt at the same time in both directions. > > By the way, what is the control value reported by the device after it stops > moving by itself due to reaching a limit position ? I don't know. I no longer have the device in hand, I will ask somebody who has one to experiment and check. > > > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > --- > > Changes from v1/v2: > > - rebased > > Changes from v3: > > - removed gerrit-id > > > > drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++--- > > 1 file changed, 55 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c > > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644 > > --- a/drivers/media/usb/uvc/uvc_ctrl.c > > +++ b/drivers/media/usb/uvc/uvc_ctrl.c > > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = { > > .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > .index = 12, > > .size = 4, > > - .flags = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN > > - | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES > > - | UVC_CTRL_FLAG_GET_DEF > > + .flags = UVC_CTRL_FLAG_SET_CUR > > + | UVC_CTRL_FLAG_GET_RANGE > > > > | UVC_CTRL_FLAG_AUTO_UPDATE, > > > > }, > > { > > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct > > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff); > > } > > > > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping, > > + __u8 query, const __u8 *data) > > +{ > > + int first = mapping->offset / 8; > > + __s8 rel = (__s8)data[first]; > > + > > + switch (query) { > > + case UVC_GET_CUR: > > + return (rel == 0) ? 0 : (rel > 0 ? data[first+1] > > + : -data[first+1]); > > + case UVC_GET_MIN: > > + return -data[first+1]; > > + case UVC_GET_MAX: > > + case UVC_GET_RES: > > + case UVC_GET_DEF: > > + default: > > + return data[first+1]; > > + } > > +} > > + > > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping, > > + __s32 value, __u8 *data) > > +{ > > + int first = mapping->offset / 8; > > + > > + data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff; > > + data[first+1] = min_t(int, abs(value), 0xff); > > +} > > + > > static struct uvc_control_mapping uvc_ctrl_mappings[] = { > > { > > .id = V4L2_CID_BRIGHTNESS, > > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = > > { .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > }, > > { > > + .id = V4L2_CID_PAN_SPEED, > > + .name = "Pan (Speed)", > > + .entity = UVC_GUID_UVC_CAMERA, > > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > + .size = 16, > > + .offset = 0, > > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > + .get = uvc_ctrl_get_rel_speed, > > + .set = uvc_ctrl_set_rel_speed, > > + }, > > + { > > + .id = V4L2_CID_TILT_SPEED, > > + .name = "Tilt (Speed)", > > + .entity = UVC_GUID_UVC_CAMERA, > > + .selector = UVC_CT_PANTILT_RELATIVE_CONTROL, > > + .size = 16, > > + .offset = 16, > > + .v4l2_type = V4L2_CTRL_TYPE_INTEGER, > > + .data_type = UVC_CTRL_DATA_TYPE_SIGNED, > > + .get = uvc_ctrl_get_rel_speed, > > + .set = uvc_ctrl_set_rel_speed, > > + }, > > + { > > .id = V4L2_CID_PRIVACY, > > .name = "Privacy", > > .entity = UVC_GUID_UVC_CAMERA, > > -- > Regards, > > Laurent Pinchart > ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-07-08 23:49 ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin 2014-07-08 23:49 ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin @ 2014-07-31 17:22 ` Vincent Palatin [not found] ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com> 2 siblings, 0 replies; 27+ messages in thread From: Vincent Palatin @ 2014-07-31 17:22 UTC (permalink / raw) To: Hans de Goede, Laurent Pinchart, linux-media Cc: LKML, Olof Johansson, Pawel Osciak, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin ping ... Any opinion on adding those new controls ? since re-using the existing relative ones was seen as too twisted. Thanks, -- Vincent On Tue, Jul 8, 2014 at 4:49 PM, Vincent Palatin <vpalatin@chromium.org> wrote: > The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the > camera by setting its rotation speed around its axis. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > --- > Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ > Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ > drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ > include/uapi/linux/v4l2-controls.h | 2 ++ > 4 files changed, 35 insertions(+) > > diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml > index eee6f0f..21910e9 100644 > --- a/Documentation/DocBook/media/v4l/compat.xml > +++ b/Documentation/DocBook/media/v4l/compat.xml > @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. > </orderedlist> > </section> > > + <section> > + <title>V4L2 in Linux 3.17</title> > + <orderedlist> > + <listitem> > + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and > + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> > + </listitem> > + </orderedlist> > + </section> > + > <section id="other"> > <title>Relation of V4L2 to other Linux multimedia APIs</title> > > diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml > index 47198ee..cdf97f0 100644 > --- a/Documentation/DocBook/media/v4l/controls.xml > +++ b/Documentation/DocBook/media/v4l/controls.xml > @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry> > </row> > <row><entry></entry></row> > > + <row> > + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> > + <entry>integer</entry> > + </row><row><entry spanname="descr">This control turns the > +camera horizontally at the specific speed. The unit is undefined. A > +positive value moves the camera to the right (clockwise when viewed > +from above), a negative value to the left. A value of zero does not > +cause or stop the motion.</entry> > + </row> > + <row><entry></entry></row> > + > + <row> > + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> > + <entry>integer</entry> > + </row><row><entry spanname="descr">This control turns the > +camera vertically at the specified speed. The unit is undefined. A > +positive value moves the camera up, a negative value down. A value of > +zero does not cause or stop the motion.</entry> > + </row> > + <row><entry></entry></row> > + > </tbody> > </tgroup> > </table> > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > index 55c6832..57ddaf4 100644 > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id) > case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; > case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; > case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; > + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; > + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; > > /* FM Radio Modulator control */ > /* Keep the order of the 'case's the same as in videodev2.h! */ > diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h > index 2ac5597..5576044 100644 > --- a/include/uapi/linux/v4l2-controls.h > +++ b/include/uapi/linux/v4l2-controls.h > @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range { > V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, > }; > > +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) > +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) > > /* FM Modulator class control IDs */ > > -- > 2.0.0.526.g5318336 > ^ permalink raw reply [flat|nested] 27+ messages in thread
[parent not found: <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com>]
* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls [not found] ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com> @ 2014-08-06 15:10 ` Vincent Palatin 2014-08-07 2:18 ` Pawel Osciak 0 siblings, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-08-06 15:10 UTC (permalink / raw) To: Pawel Osciak Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak <posciak@chromium.org> wrote: > This looks good to me in general (with one comment below). I don't think we > can easily implement current V4L2 pan and tilt controls that are for > movement by a specified amount in terms of UVC pan/tilt speed controls, > which only let us set speed and direction... > > On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org> > wrote: >> >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the >> camera by setting its rotation speed around its axis. >> >> Signed-off-by: Vincent Palatin <vpalatin@chromium.org> >> >> --- >> Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ >> Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ >> drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ >> include/uapi/linux/v4l2-controls.h | 2 ++ >> 4 files changed, 35 insertions(+) >> >> diff --git a/Documentation/DocBook/media/v4l/compat.xml >> b/Documentation/DocBook/media/v4l/compat.xml >> index eee6f0f..21910e9 100644 >> --- a/Documentation/DocBook/media/v4l/compat.xml >> +++ b/Documentation/DocBook/media/v4l/compat.xml >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. >> </orderedlist> >> </section> >> >> + <section> >> + <title>V4L2 in Linux 3.17</title> >> + <orderedlist> >> + <listitem> >> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and >> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> >> + </listitem> >> + </orderedlist> >> + </section> >> + >> <section id="other"> >> <title>Relation of V4L2 to other Linux multimedia APIs</title> >> >> diff --git a/Documentation/DocBook/media/v4l/controls.xml >> b/Documentation/DocBook/media/v4l/controls.xml >> index 47198ee..cdf97f0 100644 >> --- a/Documentation/DocBook/media/v4l/controls.xml >> +++ b/Documentation/DocBook/media/v4l/controls.xml >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus >> controls.</entry> >> </row> >> <row><entry></entry></row> >> >> + <row> >> + <entry >> spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> >> + <entry>integer</entry> >> + </row><row><entry spanname="descr">This control turns the >> +camera horizontally at the specific speed. The unit is undefined. A >> +positive value moves the camera to the right (clockwise when viewed >> +from above), a negative value to the left. A value of zero does not >> +cause or stop the motion.</entry> > > > How do we stop/start? As mentioned in the last sentence of the paragraph above, setting 0 stops the movement. setting non-zero value starts it if needed. > >> >> + </row> >> + <row><entry></entry></row> >> + >> + <row> >> + <entry >> spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> >> + <entry>integer</entry> >> + </row><row><entry spanname="descr">This control turns the >> +camera vertically at the specified speed. The unit is undefined. A >> +positive value moves the camera up, a negative value down. A value of >> +zero does not cause or stop the motion.</entry> >> + </row> >> + <row><entry></entry></row> >> + >> </tbody> >> </tgroup> >> </table> >> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c >> b/drivers/media/v4l2-core/v4l2-ctrls.c >> index 55c6832..57ddaf4 100644 >> --- a/drivers/media/v4l2-core/v4l2-ctrls.c >> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c >> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id) >> case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; >> case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, >> Status"; >> case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, >> Range"; >> + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; >> + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; >> >> /* FM Radio Modulator control */ >> /* Keep the order of the 'case's the same as in videodev2.h! */ >> diff --git a/include/uapi/linux/v4l2-controls.h >> b/include/uapi/linux/v4l2-controls.h >> index 2ac5597..5576044 100644 >> --- a/include/uapi/linux/v4l2-controls.h >> +++ b/include/uapi/linux/v4l2-controls.h >> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range { >> V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, >> }; >> >> +#define V4L2_CID_PAN_SPEED >> (V4L2_CID_CAMERA_CLASS_BASE+32) >> +#define V4L2_CID_TILT_SPEED >> (V4L2_CID_CAMERA_CLASS_BASE+33) >> >> /* FM Modulator class control IDs */ >> >> -- >> 2.0.0.526.g5318336 >> > ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-08-06 15:10 ` Vincent Palatin @ 2014-08-07 2:18 ` Pawel Osciak 2014-08-08 16:41 ` Vincent Palatin 2014-08-15 19:08 ` [PATCH v2 " Vincent Palatin 0 siblings, 2 replies; 27+ messages in thread From: Pawel Osciak @ 2014-08-07 2:18 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin <vpalatin@chromium.org> wrote: > > On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak <posciak@chromium.org> wrote: > > This looks good to me in general (with one comment below). I don't think we > > can easily implement current V4L2 pan and tilt controls that are for > > movement by a specified amount in terms of UVC pan/tilt speed controls, > > which only let us set speed and direction... > > > > On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org> > > wrote: > >> > >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the > >> camera by setting its rotation speed around its axis. > >> > >> Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > >> > >> --- > >> Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ > >> Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ > >> drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ > >> include/uapi/linux/v4l2-controls.h | 2 ++ > >> 4 files changed, 35 insertions(+) > >> > >> diff --git a/Documentation/DocBook/media/v4l/compat.xml > >> b/Documentation/DocBook/media/v4l/compat.xml > >> index eee6f0f..21910e9 100644 > >> --- a/Documentation/DocBook/media/v4l/compat.xml > >> +++ b/Documentation/DocBook/media/v4l/compat.xml > >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. > >> </orderedlist> > >> </section> > >> > >> + <section> > >> + <title>V4L2 in Linux 3.17</title> > >> + <orderedlist> > >> + <listitem> > >> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and > >> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> > >> + </listitem> > >> + </orderedlist> > >> + </section> > >> + > >> <section id="other"> > >> <title>Relation of V4L2 to other Linux multimedia APIs</title> > >> > >> diff --git a/Documentation/DocBook/media/v4l/controls.xml > >> b/Documentation/DocBook/media/v4l/controls.xml > >> index 47198ee..cdf97f0 100644 > >> --- a/Documentation/DocBook/media/v4l/controls.xml > >> +++ b/Documentation/DocBook/media/v4l/controls.xml > >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus > >> controls.</entry> > >> </row> > >> <row><entry></entry></row> > >> > >> + <row> > >> + <entry > >> spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> > >> + <entry>integer</entry> > >> + </row><row><entry spanname="descr">This control turns the > >> +camera horizontally at the specific speed. The unit is undefined. A > >> +positive value moves the camera to the right (clockwise when viewed > >> +from above), a negative value to the left. A value of zero does not > >> +cause or stop the motion.</entry> > > > > > > How do we stop/start? > > As mentioned in the last sentence of the paragraph above, setting 0 > stops the movement. > setting non-zero value starts it if needed. > The sentence says "A value of zero does *not* cause or stop the motion.". Perhaps "not" is a typo then? ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-08-07 2:18 ` Pawel Osciak @ 2014-08-08 16:41 ` Vincent Palatin 2014-08-15 19:08 ` [PATCH v2 " Vincent Palatin 1 sibling, 0 replies; 27+ messages in thread From: Vincent Palatin @ 2014-08-08 16:41 UTC (permalink / raw) To: Pawel Osciak Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Wed, Aug 6, 2014 at 7:18 PM, Pawel Osciak <posciak@chromium.org> wrote: > > On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin <vpalatin@chromium.org> wrote: > > > > On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak <posciak@chromium.org> wrote: > > > This looks good to me in general (with one comment below). I don't think we > > > can easily implement current V4L2 pan and tilt controls that are for > > > movement by a specified amount in terms of UVC pan/tilt speed controls, > > > which only let us set speed and direction... > > > > > > On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org> > > > wrote: > > >> > > >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the > > >> camera by setting its rotation speed around its axis. > > >> > > >> Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > >> > > >> --- > > >> Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ > > >> Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ > > >> drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ > > >> include/uapi/linux/v4l2-controls.h | 2 ++ > > >> 4 files changed, 35 insertions(+) > > >> > > >> diff --git a/Documentation/DocBook/media/v4l/compat.xml > > >> b/Documentation/DocBook/media/v4l/compat.xml > > >> index eee6f0f..21910e9 100644 > > >> --- a/Documentation/DocBook/media/v4l/compat.xml > > >> +++ b/Documentation/DocBook/media/v4l/compat.xml > > >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. > > >> </orderedlist> > > >> </section> > > >> > > >> + <section> > > >> + <title>V4L2 in Linux 3.17</title> > > >> + <orderedlist> > > >> + <listitem> > > >> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and > > >> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> > > >> + </listitem> > > >> + </orderedlist> > > >> + </section> > > >> + > > >> <section id="other"> > > >> <title>Relation of V4L2 to other Linux multimedia APIs</title> > > >> > > >> diff --git a/Documentation/DocBook/media/v4l/controls.xml > > >> b/Documentation/DocBook/media/v4l/controls.xml > > >> index 47198ee..cdf97f0 100644 > > >> --- a/Documentation/DocBook/media/v4l/controls.xml > > >> +++ b/Documentation/DocBook/media/v4l/controls.xml > > >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus > > >> controls.</entry> > > >> </row> > > >> <row><entry></entry></row> > > >> > > >> + <row> > > >> + <entry > > >> spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> > > >> + <entry>integer</entry> > > >> + </row><row><entry spanname="descr">This control turns the > > >> +camera horizontally at the specific speed. The unit is undefined. A > > >> +positive value moves the camera to the right (clockwise when viewed > > >> +from above), a negative value to the left. A value of zero does not > > >> +cause or stop the motion.</entry> > > > > > > > > > How do we stop/start? > > > > As mentioned in the last sentence of the paragraph above, setting 0 > > stops the movement. > > setting non-zero value starts it if needed. > > > > The sentence says "A value of zero does *not* cause or stop the > motion.". Perhaps "not" is a typo then? maybe my phrasing is really bad but the "not" isn't a typo. The developed version would be : "A value of zero does *not* cause [any motion if the camera is already stopped] or stop the motion [if it is currently moving with a non-zero speed]" -- Vincent ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-08-07 2:18 ` Pawel Osciak 2014-08-08 16:41 ` Vincent Palatin @ 2014-08-15 19:08 ` Vincent Palatin 2014-09-03 4:54 ` Pawel Osciak 1 sibling, 1 reply; 27+ messages in thread From: Vincent Palatin @ 2014-08-15 19:08 UTC (permalink / raw) To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the camera by setting its rotation speed around its axis. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> --- Changes from v1: - update the documentation wording according to Pawel suggestion. Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ include/uapi/linux/v4l2-controls.h | 2 ++ 4 files changed, 35 insertions(+) diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml index eee6f0f..21910e9 100644 --- a/Documentation/DocBook/media/v4l/compat.xml +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. </orderedlist> </section> + <section> + <title>V4L2 in Linux 3.17</title> + <orderedlist> + <listitem> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> + </listitem> + </orderedlist> + </section> + <section id="other"> <title>Relation of V4L2 to other Linux multimedia APIs</title> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 47198ee..be88e64 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry> </row> <row><entry></entry></row> + <row> + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera horizontally at the specific speed. The unit is undefined. A +positive value moves the camera to the right (clockwise when viewed +from above), a negative value to the left. A value of zero stops the motion +if one is in progress and has no effect otherwise.</entry> + </row> + <row><entry></entry></row> + + <row> + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera vertically at the specified speed. The unit is undefined. A +positive value moves the camera up, a negative value down. A value of zero +stops the motion if one is in progress and has no effect otherwise.</entry> + </row> + <row><entry></entry></row> + </tbody> </tgroup> </table> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index 55c6832..57ddaf4 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; /* FM Radio Modulator control */ /* Keep the order of the 'case's the same as in videodev2.h! */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index 2ac5597..5576044 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range { V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, }; +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) /* FM Modulator class control IDs */ -- 2.1.0.rc2.206.gedb03e5 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-08-15 19:08 ` [PATCH v2 " Vincent Palatin @ 2014-09-03 4:54 ` Pawel Osciak 2014-09-03 19:35 ` Vincent Palatin 0 siblings, 1 reply; 27+ messages in thread From: Pawel Osciak @ 2014-09-03 4:54 UTC (permalink / raw) To: Vincent Palatin Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin <vpalatin@chromium.org> wrote: > > The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the > camera by setting its rotation speed around its axis. > > Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Pawel Osciak <posciak@chromium.org> > > --- > Changes from v1: > - update the documentation wording according to Pawel suggestion. > > Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ > Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ > drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ > include/uapi/linux/v4l2-controls.h | 2 ++ > 4 files changed, 35 insertions(+) > > diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml > index eee6f0f..21910e9 100644 > --- a/Documentation/DocBook/media/v4l/compat.xml > +++ b/Documentation/DocBook/media/v4l/compat.xml > @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. > </orderedlist> > </section> > > + <section> > + <title>V4L2 in Linux 3.17</title> This will need a bump. > > + <orderedlist> > + <listitem> > + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and > + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> > + </listitem> > + </orderedlist> > + </section> > + > <section id="other"> > <title>Relation of V4L2 to other Linux multimedia APIs</title> > > diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml > index 47198ee..be88e64 100644 > --- a/Documentation/DocBook/media/v4l/controls.xml > +++ b/Documentation/DocBook/media/v4l/controls.xml > @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry> > </row> > <row><entry></entry></row> > > + <row> > + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> > + <entry>integer</entry> > + </row><row><entry spanname="descr">This control turns the > +camera horizontally at the specific speed. The unit is undefined. A > +positive value moves the camera to the right (clockwise when viewed > +from above), a negative value to the left. A value of zero stops the motion > +if one is in progress and has no effect otherwise.</entry> > + </row> > + <row><entry></entry></row> > + > + <row> > + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> > + <entry>integer</entry> > + </row><row><entry spanname="descr">This control turns the > +camera vertically at the specified speed. The unit is undefined. A > +positive value moves the camera up, a negative value down. A value of zero > +stops the motion if one is in progress and has no effect otherwise.</entry> > + </row> > + <row><entry></entry></row> > + > </tbody> > </tgroup> > </table> > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > index 55c6832..57ddaf4 100644 > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id) > case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; > case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; > case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; > + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; > + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; > > /* FM Radio Modulator control */ > /* Keep the order of the 'case's the same as in videodev2.h! */ > diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h > index 2ac5597..5576044 100644 > --- a/include/uapi/linux/v4l2-controls.h > +++ b/include/uapi/linux/v4l2-controls.h > @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range { > V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, > }; > > +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) > +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) > > /* FM Modulator class control IDs */ > > -- > 2.1.0.rc2.206.gedb03e5 > ^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-09-03 4:54 ` Pawel Osciak @ 2014-09-03 19:35 ` Vincent Palatin 2014-09-03 19:38 ` [PATCH v3 " Vincent Palatin 2014-10-06 21:04 ` [PATCH v5 " Vincent Palatin 0 siblings, 2 replies; 27+ messages in thread From: Vincent Palatin @ 2014-09-03 19:35 UTC (permalink / raw) To: Pawel Osciak Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab On Tue, Sep 2, 2014 at 9:54 PM, Pawel Osciak <posciak@chromium.org> wrote: > On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin <vpalatin@chromium.org> wrote: >> >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the >> camera by setting its rotation speed around its axis. >> >> Signed-off-by: Vincent Palatin <vpalatin@chromium.org> > > Reviewed-by: Pawel Osciak <posciak@chromium.org> > >> >> --- >> Changes from v1: >> - update the documentation wording according to Pawel suggestion. >> >> Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ >> Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ >> drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ >> include/uapi/linux/v4l2-controls.h | 2 ++ >> 4 files changed, 35 insertions(+) >> >> diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml >> index eee6f0f..21910e9 100644 >> --- a/Documentation/DocBook/media/v4l/compat.xml >> +++ b/Documentation/DocBook/media/v4l/compat.xml >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. >> </orderedlist> >> </section> >> >> + <section> >> + <title>V4L2 in Linux 3.17</title> > > This will need a bump. Yes, I did not expect to miss 3.17 window. I will send an updated v3 patch. >> >> + <orderedlist> >> + <listitem> >> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and >> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> >> + </listitem> >> + </orderedlist> >> + </section> >> + >> <section id="other"> >> <title>Relation of V4L2 to other Linux multimedia APIs</title> >> >> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml >> index 47198ee..be88e64 100644 >> --- a/Documentation/DocBook/media/v4l/controls.xml >> +++ b/Documentation/DocBook/media/v4l/controls.xml >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry> >> </row> >> <row><entry></entry></row> >> >> + <row> >> + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> >> + <entry>integer</entry> >> + </row><row><entry spanname="descr">This control turns the >> +camera horizontally at the specific speed. The unit is undefined. A >> +positive value moves the camera to the right (clockwise when viewed >> +from above), a negative value to the left. A value of zero stops the motion >> +if one is in progress and has no effect otherwise.</entry> >> + </row> >> + <row><entry></entry></row> >> + >> + <row> >> + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> >> + <entry>integer</entry> >> + </row><row><entry spanname="descr">This control turns the >> +camera vertically at the specified speed. The unit is undefined. A >> +positive value moves the camera up, a negative value down. A value of zero >> +stops the motion if one is in progress and has no effect otherwise.</entry> >> + </row> >> + <row><entry></entry></row> >> + >> </tbody> >> </tgroup> >> </table> >> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c >> index 55c6832..57ddaf4 100644 >> --- a/drivers/media/v4l2-core/v4l2-ctrls.c >> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c >> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id) >> case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; >> case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; >> case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; >> + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; >> + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; >> >> /* FM Radio Modulator control */ >> /* Keep the order of the 'case's the same as in videodev2.h! */ >> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h >> index 2ac5597..5576044 100644 >> --- a/include/uapi/linux/v4l2-controls.h >> +++ b/include/uapi/linux/v4l2-controls.h >> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range { >> V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, >> }; >> >> +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) >> +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) >> >> /* FM Modulator class control IDs */ >> >> -- >> 2.1.0.rc2.206.gedb03e5 >> ^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v3 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-09-03 19:35 ` Vincent Palatin @ 2014-09-03 19:38 ` Vincent Palatin 2014-10-06 21:04 ` [PATCH v5 " Vincent Palatin 1 sibling, 0 replies; 27+ messages in thread From: Vincent Palatin @ 2014-09-03 19:38 UTC (permalink / raw) To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the camera by setting its rotation speed around its axis. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> --- Changes from v1: - update the documentation wording according to Pawel suggestion. Changes from v2: - bump Linux kernel version for the API change. Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ include/uapi/linux/v4l2-controls.h | 2 ++ 4 files changed, 35 insertions(+) diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml index eee6f0f..7aa7c5d 100644 --- a/Documentation/DocBook/media/v4l/compat.xml +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32. </orderedlist> </section> + <section> + <title>V4L2 in Linux 3.18</title> + <orderedlist> + <listitem> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> + </listitem> + </orderedlist> + </section> + <section id="other"> <title>Relation of V4L2 to other Linux multimedia APIs</title> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 9f5ffd8..124f287 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3965,6 +3965,27 @@ by exposure, white balance or focus controls.</entry> </row> <row><entry></entry></row> + <row> + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera horizontally at the specific speed. The unit is undefined. A +positive value moves the camera to the right (clockwise when viewed +from above), a negative value to the left. A value of zero stops the motion +if one is in progress and has no effect otherwise.</entry> + </row> + <row><entry></entry></row> + + <row> + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera vertically at the specified speed. The unit is undefined. A +positive value moves the camera up, a negative value down. A value of zero +stops the motion if one is in progress and has no effect otherwise.</entry> + </row> + <row><entry></entry></row> + </tbody> </tgroup> </table> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index f030d6a..4d050f9 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -796,6 +796,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; /* FM Radio Modulator controls */ /* Keep the order of the 'case's the same as in v4l2-controls.h! */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index e946e43..4de238b 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -746,6 +746,8 @@ enum v4l2_auto_focus_range { V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, }; +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) /* FM Modulator class control IDs */ -- 2.1.0.rc2.206.gedb03e5 ^ permalink raw reply related [flat|nested] 27+ messages in thread
* [PATCH v5 1/2] [media] V4L: Add camera pan/tilt speed controls 2014-09-03 19:35 ` Vincent Palatin 2014-09-03 19:38 ` [PATCH v3 " Vincent Palatin @ 2014-10-06 21:04 ` Vincent Palatin 1 sibling, 0 replies; 27+ messages in thread From: Vincent Palatin @ 2014-10-06 21:04 UTC (permalink / raw) To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab, Vincent Palatin The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the camera by setting its rotation speed around its axis. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Pawel Osciak <posciak@chromium.org> --- Changes from v1: - update the documentation wording according to Pawel suggestion. Changes from v2: - bump Linux kernel version for the API change. Documentation/DocBook/media/v4l/compat.xml | 10 ++++++++++ Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++ drivers/media/v4l2-core/v4l2-ctrls.c | 2 ++ include/uapi/linux/v4l2-controls.h | 2 ++ 4 files changed, 35 insertions(+) diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml index 3a626d1..0a2debf 100644 --- a/Documentation/DocBook/media/v4l/compat.xml +++ b/Documentation/DocBook/media/v4l/compat.xml @@ -2569,6 +2569,16 @@ fields changed from _s32 to _u32. </orderedlist> </section> + <section> + <title>V4L2 in Linux 3.18</title> + <orderedlist> + <listitem> + <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para> + </listitem> + </orderedlist> + </section> + <section id="other"> <title>Relation of V4L2 to other Linux multimedia APIs</title> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml index 9f5ffd8..124f287 100644 --- a/Documentation/DocBook/media/v4l/controls.xml +++ b/Documentation/DocBook/media/v4l/controls.xml @@ -3965,6 +3965,27 @@ by exposure, white balance or focus controls.</entry> </row> <row><entry></entry></row> + <row> + <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera horizontally at the specific speed. The unit is undefined. A +positive value moves the camera to the right (clockwise when viewed +from above), a negative value to the left. A value of zero stops the motion +if one is in progress and has no effect otherwise.</entry> + </row> + <row><entry></entry></row> + + <row> + <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant> </entry> + <entry>integer</entry> + </row><row><entry spanname="descr">This control turns the +camera vertically at the specified speed. The unit is undefined. A +positive value moves the camera up, a negative value down. A value of zero +stops the motion if one is in progress and has no effect otherwise.</entry> + </row> + <row><entry></entry></row> + </tbody> </tgroup> </table> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index f030d6a..4d050f9 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -796,6 +796,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_AUTO_FOCUS_STOP: return "Auto Focus, Stop"; case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status"; case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range"; + case V4L2_CID_PAN_SPEED: return "Pan, Speed"; + case V4L2_CID_TILT_SPEED: return "Tilt, Speed"; /* FM Radio Modulator controls */ /* Keep the order of the 'case's the same as in v4l2-controls.h! */ diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index e946e43..4de238b 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -746,6 +746,8 @@ enum v4l2_auto_focus_range { V4L2_AUTO_FOCUS_RANGE_INFINITY = 3, }; +#define V4L2_CID_PAN_SPEED (V4L2_CID_CAMERA_CLASS_BASE+32) +#define V4L2_CID_TILT_SPEED (V4L2_CID_CAMERA_CLASS_BASE+33) /* FM Modulator class control IDs */ -- 2.1.0.rc2.206.gedb03e5 ^ permalink raw reply related [flat|nested] 27+ messages in thread
end of thread, other threads:[~2014-10-07 16:41 UTC | newest] Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2014-06-17 0:38 [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls Vincent Palatin 2014-06-17 6:12 ` Hans de Goede 2014-06-17 14:45 ` [PATCH v2] " Vincent Palatin [not found] ` <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com> 2014-06-25 9:54 ` Laurent Pinchart 2014-07-08 23:28 ` Vincent Palatin 2014-07-08 23:49 ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin 2014-07-08 23:49 ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin 2014-09-03 4:57 ` Pawel Osciak 2014-09-03 19:40 ` [PATCH v3 " Vincent Palatin 2014-09-04 0:37 ` Pawel Osciak 2014-09-04 0:47 ` [PATCH v4 " Vincent Palatin 2014-09-04 20:29 ` Laurent Pinchart 2014-10-06 20:41 ` Vincent Palatin 2014-10-06 21:05 ` [PATCH v5 " Vincent Palatin 2014-10-07 16:36 ` Laurent Pinchart 2014-10-07 16:41 ` Vincent Palatin 2014-09-04 20:35 ` [PATCH v4 " Laurent Pinchart 2014-10-06 20:44 ` Vincent Palatin 2014-07-31 17:22 ` [PATCH 1/2] [media] V4L: Add camera " Vincent Palatin [not found] ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com> 2014-08-06 15:10 ` Vincent Palatin 2014-08-07 2:18 ` Pawel Osciak 2014-08-08 16:41 ` Vincent Palatin 2014-08-15 19:08 ` [PATCH v2 " Vincent Palatin 2014-09-03 4:54 ` Pawel Osciak 2014-09-03 19:35 ` Vincent Palatin 2014-09-03 19:38 ` [PATCH v3 " Vincent Palatin 2014-10-06 21:04 ` [PATCH v5 " Vincent Palatin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).