Re: [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls

2014-07-08 Thread Vincent Palatin
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

2014-07-08 Thread Vincent Palatin
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

2014-06-25 Thread Laurent Pinchart
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

2014-06-25 Thread Laurent Pinchart
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

2014-06-17 Thread 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 

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

2014-06-17 Thread 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 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/