Re: [PATCH] DocBook: fix media build error

2014-10-20 Thread Vincent Palatin
On Sun, Oct 19, 2014 at 7:39 PM, Randy Dunlap rdun...@infradead.org wrote:
 From: Randy Dunlap rdun...@infradead.org

 Fix media DocBook build errors by making the orderedlist balanced.

 DOC1/Documentation/DocBook/compat.xml:2576: parser error : Opening and ending 
 tag mismatch: orderedlist line 2560 and section
 DOC1/Documentation/DocBook/compat.xml:2726: parser error : Premature end of 
 data in tag section line 884
 DOC1/Documentation/DocBook/compat.xml:2726: parser error : chunk is not well 
 balanced

 Signed-off-by: Randy Dunlap rdun...@infradead.org
 Cc: Vincent Palatin vpala...@chromium.org
 ---
  Documentation/DocBook/media/v4l/compat.xml |1 +
  1 file changed, 1 insertion(+)

 --- lnx-318-rc1.orig/Documentation/DocBook/media/v4l/compat.xml
 +++ lnx-318-rc1/Documentation/DocBook/media/v4l/compat.xml
 @@ -2566,6 +2566,7 @@ fields changed from _s32 to _u32.
   paraAdded compound control types and VIDIOC-QUERY-EXT-CTRL;.
   /para
  /listitem
 +  /orderedlist
titleV4L2 in Linux 3.18/title
orderedlist
 listitem

Compared to the original patch, it's actually also missing the
 /section

section
which were lost in the merge.


-- 
Vincent
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] DocBook: fix media build error

2014-10-20 Thread Vincent Palatin
On Mon, Oct 20, 2014 at 10:08 AM, Randy Dunlap rdun...@infradead.org wrote:
 On 10/20/14 09:06, Vincent Palatin wrote:
 On Sun, Oct 19, 2014 at 7:39 PM, Randy Dunlap rdun...@infradead.org wrote:
 From: Randy Dunlap rdun...@infradead.org

 Fix media DocBook build errors by making the orderedlist balanced.

 DOC1/Documentation/DocBook/compat.xml:2576: parser error : Opening and 
 ending tag mismatch: orderedlist line 2560 and section
 DOC1/Documentation/DocBook/compat.xml:2726: parser error : Premature end of 
 data in tag section line 884
 DOC1/Documentation/DocBook/compat.xml:2726: parser error : chunk is not 
 well balanced

 Signed-off-by: Randy Dunlap rdun...@infradead.org
 Cc: Vincent Palatin vpala...@chromium.org
 ---
  Documentation/DocBook/media/v4l/compat.xml |1 +
  1 file changed, 1 insertion(+)

 --- lnx-318-rc1.orig/Documentation/DocBook/media/v4l/compat.xml
 +++ lnx-318-rc1/Documentation/DocBook/media/v4l/compat.xml
 @@ -2566,6 +2566,7 @@ fields changed from _s32 to _u32.
   paraAdded compound control types and VIDIOC-QUERY-EXT-CTRL;.
   /para
  /listitem
 +  /orderedlist
titleV4L2 in Linux 3.18/title
orderedlist
 listitem

 Compared to the original patch, it's actually also missing the
  /section

 section
 which were lost in the merge.



 Would you please send a complete fix for it?
 then Mauro can drop my patch.

Sure, I will send it in 5 minutes,
the docs are currently rebuilding with the patch ...

-- 
Vincent
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] [media] v4l: DocBook: fix media build error

2014-10-20 Thread Vincent Palatin
Fix media DocBook build errors by re-adding the orderedlist tag
and putting back the section tags lost during merge.

Signed-off-by: Vincent Palatin vpala...@chromium.org
---
 Documentation/DocBook/media/v4l/compat.xml | 4 
 1 file changed, 4 insertions(+)

diff --git a/Documentation/DocBook/media/v4l/compat.xml 
b/Documentation/DocBook/media/v4l/compat.xml
index 07ffc76..0a2debf 100644
--- a/Documentation/DocBook/media/v4l/compat.xml
+++ b/Documentation/DocBook/media/v4l/compat.xml
@@ -2566,6 +2566,10 @@ fields changed from _s32 to _u32.
  paraAdded compound control types and VIDIOC-QUERY-EXT-CTRL;.
  /para
 /listitem
+  /orderedlist
+/section
+
+section
   titleV4L2 in Linux 3.18/title
   orderedlist
listitem
-- 
2.1.0.rc2.206.gedb03e5

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-10-07 Thread Vincent Palatin
On Tue, Oct 7, 2014 at 9:36 AM, Laurent Pinchart
laurent.pinch...@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 vpala...@chromium.org
  Reviewed-by: Pawel Osciak posc...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-10-06 Thread Vincent Palatin
On Thu, Sep 4, 2014 at 1:29 PM, Laurent Pinchart
laurent.pinch...@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 vpala...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-10-06 Thread Vincent Palatin
On Thu, Sep 4, 2014 at 1:35 PM, Laurent Pinchart
laurent.pinch...@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 vpala...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v5 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-10-06 Thread 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 vpala...@chromium.org
Reviewed-by: Pawel Osciak posc...@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
+  titleV4L2 in Linux 3.18/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 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
  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 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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-10-06 Thread 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 vpala...@chromium.org
Reviewed-by: Pawel Osciak posc...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-09-03 Thread Vincent Palatin
On Tue, Sep 2, 2014 at 9:54 PM, Pawel Osciak posc...@chromium.org wrote:
 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.

Yes, I did not expect to miss 3.17 window.
I will send an updated v3 patch.


 +  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-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-09-03 Thread 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 vpala...@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
+  titleV4L2 in Linux 3.18/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 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
  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 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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-09-03 Thread 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 vpala...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-09-03 Thread 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 vpala...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-08-15 Thread 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 vpala...@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
+  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-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-08-08 Thread Vincent Palatin
On Wed, Aug 6, 2014 at 7:18 PM, Pawel Osciak posc...@chromium.org wrote:

 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?


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
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls

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



 + /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 does not cause or stop the motion./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.0.0.526.g5318336


--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-07-31 Thread 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 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
 + /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 does not cause or stop the motion./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.0.0.526.g5318336

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls

2014-07-08 Thread 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 vpala...@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-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls

2014-07-08 Thread 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 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
+ /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 does not cause or stop the motion./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.0.0.526.g5318336

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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

2014-06-16 Thread 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 vpala...@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

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html