Re: [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls
On Wed, Jun 25, 2014 at 2:54 AM, Laurent Pinchart 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 >> > >> > 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 -- 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] V4L: uvcvideo: Add support for relative pan/tilt controls
On Wed, Jun 25, 2014 at 2:54 AM, Laurent Pinchart laurent.pinch...@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 vpala...@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 -- 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] V4L: uvcvideo: Add support for relative pan/tilt controls
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 > > > > 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 -- 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] V4L: uvcvideo: Add support for relative pan/tilt controls
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 vpala...@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 -- 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/
[PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls
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 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 -- 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/
[PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls
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 vpala...@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 -- 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/