Re: [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
On Thu, Sep 4, 2014 at 4:40 AM, 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 > > 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
On Thu, Sep 4, 2014 at 4:40 AM, Vincent Palatin vpala...@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 vpala...@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 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
On Wed, Jul 9, 2014 at 8:49 AM, 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 Reviewed-by: Pawel Osciak > 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls
On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin 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 Reviewed-by: Pawel Osciak > > --- > 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. > > > > + > + V4L2 in Linux 3.17 This will need a bump. > > + > + > + Added V4L2_CID_PAN_SPEED and > + V4L2_CID_TILT_SPEED camera controls. > + > + > + > + > >Relation of V4L2 to other Linux multimedia APIs > > 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. > > > > + > +spanname="id">V4L2_CID_PAN_SPEED > + integer > + 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. > + > + > + > + > +spanname="id">V4L2_CID_TILT_SPEED > + integer > + 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. > + > + > + > > > > 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 > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls
On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin vpala...@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 vpala...@chromium.org Reviewed-by: Pawel Osciak posc...@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 + titleV4L2 in Linux 3.17/title This will need a bump. + orderedlist + listitem + paraAdded constantV4L2_CID_PAN_SPEED/constant and + constantV4L2_CID_TILT_SPEED/constant camera controls./para + /listitem + /orderedlist +/section + section id=other titleRelation 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 rowentry/entry/row + row + entry spanname=idconstantV4L2_CID_PAN_SPEED/constantnbsp;/entry + entryinteger/entry + /rowrowentry spanname=descrThis 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 + rowentry/entry/row + + row + entry spanname=idconstantV4L2_CID_TILT_SPEED/constantnbsp;/entry + entryinteger/entry + /rowrowentry spanname=descrThis 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 + rowentry/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 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin vpala...@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 vpala...@chromium.org Reviewed-by: Pawel Osciak posc...@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 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin wrote: > > On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak 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 > > 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 > >> > >> --- > >> 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. > >> > >> > >> > >> + > >> + V4L2 in Linux 3.17 > >> + > >> + > >> + Added V4L2_CID_PAN_SPEED and > >> + V4L2_CID_TILT_SPEED camera controls. > >> + > >> + > >> + > >> + > >> > >>Relation of V4L2 to other Linux multimedia APIs > >> > >> 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. > >> > >> > >> > >> + > >> +>> spanname="id">V4L2_CID_PAN_SPEED > >> + integer > >> + 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. > > > > > > 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? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin vpala...@chromium.org wrote: On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak posc...@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 vpala...@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 vpala...@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 + titleV4L2 in Linux 3.17/title + orderedlist + listitem + paraAdded constantV4L2_CID_PAN_SPEED/constant and + constantV4L2_CID_TILT_SPEED/constant camera controls./para + /listitem + /orderedlist +/section + section id=other titleRelation 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 rowentry/entry/row + row + entry spanname=idconstantV4L2_CID_PAN_SPEED/constantnbsp;/entry + entryinteger/entry + /rowrowentry spanname=descrThis 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? -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/