linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls
@ 2014-06-17  0:38 Vincent Palatin
  2014-06-17  6:12 ` Hans de Goede
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-06-17  0:38 UTC (permalink / raw)
  To: Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia,
	Mauro Carvalho Chehab, Vincent Palatin

Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC
CT_PANTILT_ABSOLUTE_CONTROL terminal control request.

Tested by plugging a Logitech ConferenceCam C3000e USB camera
and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
Verified that it can pan and tilt at the same time in both directions.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
---
 drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0eb82106..af18120 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
 		.index		= 12,
 		.size		= 4,
-		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
-				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
-				| UVC_CTRL_FLAG_GET_DEF
+		.flags		= UVC_CTRL_FLAG_SET_CUR
+				| UVC_CTRL_FLAG_GET_RANGE
 				| UVC_CTRL_FLAG_AUTO_UPDATE,
 	},
 	{
@@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
 	data[2] = min((int)abs(value), 0xff);
 }
 
+static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
+	__u8 query, const __u8 *data)
+{
+	int first = mapping->offset / 8;
+	__s8 rel = (__s8)data[first];
+
+	switch (query) {
+	case UVC_GET_CUR:
+		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
+						 : -data[first+1]);
+	case UVC_GET_MIN:
+		return -data[first+1];
+	case UVC_GET_MAX:
+	case UVC_GET_RES:
+	case UVC_GET_DEF:
+	default:
+		return data[first+1];
+	}
+}
+
+static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
+	__s32 value, __u8 *data)
+{
+	int first = mapping->offset / 8;
+
+	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
+	data[first+1] = min_t(int, abs(value), 0xff);
+}
+
 static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 	{
 		.id		= V4L2_CID_BRIGHTNESS,
@@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
 	},
 	{
+		.id		= V4L2_CID_PAN_RELATIVE,
+		.name		= "Pan (Relative)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 0,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
+		.id		= V4L2_CID_TILT_RELATIVE,
+		.name		= "Tilt (Relative)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 16,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
 		.id		= V4L2_CID_PRIVACY,
 		.name		= "Privacy",
 		.entity		= UVC_GUID_UVC_CAMERA,
-- 
2.0.0.526.g5318336


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls
  2014-06-17  0:38 [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls Vincent Palatin
@ 2014-06-17  6:12 ` Hans de Goede
  2014-06-17 14:45   ` [PATCH v2] " Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Hans de Goede @ 2014-06-17  6:12 UTC (permalink / raw)
  To: Vincent Palatin, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia,
	Mauro Carvalho Chehab

Hi,

On 06/17/2014 02:38 AM, Vincent Palatin wrote:
> Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC
> CT_PANTILT_ABSOLUTE_CONTROL terminal control request.

s/ABSOLUTE/RELATIVE in the commit message here.

Otherwise looks good to me.

Regards,

Hans


> 
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
> 
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> 
> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
> ---
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
>  1 file changed, 55 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 0eb82106..af18120 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
>  		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
>  		.index		= 12,
>  		.size		= 4,
> -		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> -				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> -				| UVC_CTRL_FLAG_GET_DEF
> +		.flags		= UVC_CTRL_FLAG_SET_CUR
> +				| UVC_CTRL_FLAG_GET_RANGE
>  				| UVC_CTRL_FLAG_AUTO_UPDATE,
>  	},
>  	{
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
>  	data[2] = min((int)abs(value), 0xff);
>  }
>  
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +	__u8 query, const __u8 *data)
> +{
> +	int first = mapping->offset / 8;
> +	__s8 rel = (__s8)data[first];
> +
> +	switch (query) {
> +	case UVC_GET_CUR:
> +		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +						 : -data[first+1]);
> +	case UVC_GET_MIN:
> +		return -data[first+1];
> +	case UVC_GET_MAX:
> +	case UVC_GET_RES:
> +	case UVC_GET_DEF:
> +	default:
> +		return data[first+1];
> +	}
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +	__s32 value, __u8 *data)
> +{
> +	int first = mapping->offset / 8;
> +
> +	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +	data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>  	{
>  		.id		= V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>  		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
>  	},
>  	{
> +		.id		= V4L2_CID_PAN_RELATIVE,
> +		.name		= "Pan (Relative)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 0,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
> +		.id		= V4L2_CID_TILT_RELATIVE,
> +		.name		= "Tilt (Relative)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 16,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
>  		.id		= V4L2_CID_PRIVACY,
>  		.name		= "Privacy",
>  		.entity		= UVC_GUID_UVC_CAMERA,
> 

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls
  2014-06-17  6:12 ` Hans de Goede
@ 2014-06-17 14:45   ` Vincent Palatin
       [not found]     ` <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com>
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-06-17 14:45 UTC (permalink / raw)
  To: Hans de Goede, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia,
	Mauro Carvalho Chehab, Vincent Palatin

Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC
CT_PANTILT_RELATIVE_CONTROL terminal control request.

Tested by plugging a Logitech ConferenceCam C3000e USB camera
and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
Verified that it can pan and tilt at the same time in both directions.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
---

Changes
v2: fix control request name in description.

 drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0eb82106..af18120 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
 		.index		= 12,
 		.size		= 4,
-		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
-				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
-				| UVC_CTRL_FLAG_GET_DEF
+		.flags		= UVC_CTRL_FLAG_SET_CUR
+				| UVC_CTRL_FLAG_GET_RANGE
 				| UVC_CTRL_FLAG_AUTO_UPDATE,
 	},
 	{
@@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
 	data[2] = min((int)abs(value), 0xff);
 }
 
+static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
+	__u8 query, const __u8 *data)
+{
+	int first = mapping->offset / 8;
+	__s8 rel = (__s8)data[first];
+
+	switch (query) {
+	case UVC_GET_CUR:
+		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
+						 : -data[first+1]);
+	case UVC_GET_MIN:
+		return -data[first+1];
+	case UVC_GET_MAX:
+	case UVC_GET_RES:
+	case UVC_GET_DEF:
+	default:
+		return data[first+1];
+	}
+}
+
+static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
+	__s32 value, __u8 *data)
+{
+	int first = mapping->offset / 8;
+
+	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
+	data[first+1] = min_t(int, abs(value), 0xff);
+}
+
 static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 	{
 		.id		= V4L2_CID_BRIGHTNESS,
@@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
 	},
 	{
+		.id		= V4L2_CID_PAN_RELATIVE,
+		.name		= "Pan (Relative)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 0,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
+		.id		= V4L2_CID_TILT_RELATIVE,
+		.name		= "Tilt (Relative)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 16,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
 		.id		= V4L2_CID_PRIVACY,
 		.name		= "Privacy",
 		.entity		= UVC_GUID_UVC_CAMERA,
-- 
2.0.0.526.g5318336


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls
       [not found]     ` <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com>
@ 2014-06-25  9:54       ` Laurent Pinchart
  2014-07-08 23:28         ` Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Laurent Pinchart @ 2014-06-25  9:54 UTC (permalink / raw)
  To: Pawel Osciak
  Cc: Vincent Palatin, Hans de Goede, linux-media, linux-kernel,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

Hi Pawel,

On Wednesday 25 June 2014 11:46:24 Pawel Osciak wrote:
> On Tue, Jun 17, 2014 at 11:45 PM, Vincent Palatin wrote:
> > Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC
> > CT_PANTILT_RELATIVE_CONTROL terminal control request.
> > 
> > Tested by plugging a Logitech ConferenceCam C3000e USB camera
> > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> > Verified that it can pan and tilt at the same time in both directions.
> > 
> > Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> > 
> > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
> > ---
> > 
> > Changes
> > v2: fix control request name in description.
> 
> The patch looks good, but I have a more general comment for everyone to
> consider. This doesn't match the expected functionality of
> controls V4L2_CID_PAN/TILT_RELATIVE. This is basically an on/off switch for
> pan/tilt, which once enabled will keep going until turned off (or I'm
> guessing until the maximum pan/tilt is reached), while the controls are
> supposed to expose an ability to turn the camera by a specified amount.
> Here the amount will also be ignored...

I agree with you here, and this mismatch between the V4L and UVC controls is 
the reason why I haven't implemented relative pan/tilt support.

> Given that this is a standard UVC control, perhaps we need new V4L2
> controls for it, as I'm assuming we can't change the meaning of existing
> controls?

We could extend the meaning of the controls to cover the UVC behaviour in a 
device-specific fashion, but that would be confusing for applications, so new 
controls might be a better idea.

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2] V4L: uvcvideo: Add support for relative pan/tilt controls
  2014-06-25  9:54       ` Laurent Pinchart
@ 2014-07-08 23:28         ` Vincent Palatin
  2014-07-08 23:49           ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-07-08 23:28 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Pawel Osciak, Hans de Goede, linux-media, LKML, Olof Johansson,
	Zach Kuznia, Mauro Carvalho Chehab

On Wed, Jun 25, 2014 at 2:54 AM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> Hi Pawel,
>
> On Wednesday 25 June 2014 11:46:24 Pawel Osciak wrote:
>> On Tue, Jun 17, 2014 at 11:45 PM, Vincent Palatin wrote:
>> > Map V4L2_CID_TILT_RELATIVE and V4L2_CID_PAN_RELATIVE to the standard UVC
>> > CT_PANTILT_RELATIVE_CONTROL terminal control request.
>> >
>> > Tested by plugging a Logitech ConferenceCam C3000e USB camera
>> > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
>> > Verified that it can pan and tilt at the same time in both directions.
>> >
>> > Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
>> >
>> > Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
>> > ---
>> >
>> > Changes
>> > v2: fix control request name in description.
>>
>> The patch looks good, but I have a more general comment for everyone to
>> consider. This doesn't match the expected functionality of
>> controls V4L2_CID_PAN/TILT_RELATIVE. This is basically an on/off switch for
>> pan/tilt, which once enabled will keep going until turned off (or I'm
>> guessing until the maximum pan/tilt is reached), while the controls are
>> supposed to expose an ability to turn the camera by a specified amount.
>> Here the amount will also be ignored...
>
> I agree with you here, and this mismatch between the V4L and UVC controls is
> the reason why I haven't implemented relative pan/tilt support.
>
>> Given that this is a standard UVC control, perhaps we need new V4L2
>> controls for it, as I'm assuming we can't change the meaning of existing
>> controls?
>
> We could extend the meaning of the controls to cover the UVC behaviour in a
> device-specific fashion, but that would be confusing for applications, so new
> controls might be a better idea.

Ok, I will add another patch to create new V4L2_CID_PAN_SPEED /
V4L2_CID_TILT_SPEED controls.

-- 
Vincent

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-07-08 23:28         ` Vincent Palatin
@ 2014-07-08 23:49           ` Vincent Palatin
  2014-07-08 23:49             ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin
                               ` (2 more replies)
  0 siblings, 3 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-07-08 23:49 UTC (permalink / raw)
  To: Hans de Goede, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia,
	Mauro Carvalho Chehab, Vincent Palatin

The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
camera by setting its rotation speed around its axis.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
---
 Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
 Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
 include/uapi/linux/v4l2-controls.h           |  2 ++
 4 files changed, 35 insertions(+)

diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
index eee6f0f..21910e9 100644
--- a/Documentation/DocBook/media/v4l/compat.xml
+++ b/Documentation/DocBook/media/v4l/compat.xml
@@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
       </orderedlist>
     </section>
 
+    <section>
+      <title>V4L2 in Linux 3.17</title>
+      <orderedlist>
+	<listitem>
+	  <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
+ <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
+	</listitem>
+      </orderedlist>
+    </section>
+
     <section id="other">
       <title>Relation of V4L2 to other Linux multimedia APIs</title>
 
diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
index 47198ee..cdf97f0 100644
--- a/Documentation/DocBook/media/v4l/controls.xml
+++ b/Documentation/DocBook/media/v4l/controls.xml
@@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry>
 	  </row>
 	  <row><entry></entry></row>
 
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera horizontally at the specific speed. The unit is undefined. A
+positive value moves the camera to the right (clockwise when viewed
+from above), a negative value to the left. A value of zero does not
+cause or stop the motion.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera vertically at the specified speed. The unit is undefined. A
+positive value moves the camera up, a negative value down. A value of
+zero does not cause or stop the motion.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
 	</tbody>
       </tgroup>
     </table>
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 55c6832..57ddaf4 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_AUTO_FOCUS_STOP:		return "Auto Focus, Stop";
 	case V4L2_CID_AUTO_FOCUS_STATUS:	return "Auto Focus, Status";
 	case V4L2_CID_AUTO_FOCUS_RANGE:		return "Auto Focus, Range";
+	case V4L2_CID_PAN_SPEED:		return "Pan, Speed";
+	case V4L2_CID_TILT_SPEED:		return "Tilt, Speed";
 
 	/* FM Radio Modulator control */
 	/* Keep the order of the 'case's the same as in videodev2.h! */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 2ac5597..5576044 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
 	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3,
 };
 
+#define V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
+#define V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)
 
 /* FM Modulator class control IDs */
 
-- 
2.0.0.526.g5318336


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-07-08 23:49           ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin
@ 2014-07-08 23:49             ` Vincent Palatin
  2014-09-03  4:57               ` Pawel Osciak
  2014-07-31 17:22             ` [PATCH 1/2] [media] V4L: Add camera " Vincent Palatin
       [not found]             ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com>
  2 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-07-08 23:49 UTC (permalink / raw)
  To: Hans de Goede, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Pawel Osciak, Zach Kuznia,
	Mauro Carvalho Chehab, Vincent Palatin

Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
CT_PANTILT_RELATIVE_CONTROL terminal control request.

Tested by plugging a Logitech ConferenceCam C3000e USB camera
and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
Verified that it can pan and tilt at the same time in both directions.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
---
 drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0eb82106..d703cb0 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
 		.index		= 12,
 		.size		= 4,
-		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
-				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
-				| UVC_CTRL_FLAG_GET_DEF
+		.flags		= UVC_CTRL_FLAG_SET_CUR
+				| UVC_CTRL_FLAG_GET_RANGE
 				| UVC_CTRL_FLAG_AUTO_UPDATE,
 	},
 	{
@@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
 	data[2] = min((int)abs(value), 0xff);
 }
 
+static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
+	__u8 query, const __u8 *data)
+{
+	int first = mapping->offset / 8;
+	__s8 rel = (__s8)data[first];
+
+	switch (query) {
+	case UVC_GET_CUR:
+		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
+						 : -data[first+1]);
+	case UVC_GET_MIN:
+		return -data[first+1];
+	case UVC_GET_MAX:
+	case UVC_GET_RES:
+	case UVC_GET_DEF:
+	default:
+		return data[first+1];
+	}
+}
+
+static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
+	__s32 value, __u8 *data)
+{
+	int first = mapping->offset / 8;
+
+	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
+	data[first+1] = min_t(int, abs(value), 0xff);
+}
+
 static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 	{
 		.id		= V4L2_CID_BRIGHTNESS,
@@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
 	},
 	{
+		.id		= V4L2_CID_PAN_SPEED,
+		.name		= "Pan (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 0,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
+		.id		= V4L2_CID_TILT_SPEED,
+		.name		= "Tilt (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 16,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
 		.id		= V4L2_CID_PRIVACY,
 		.name		= "Privacy",
 		.entity		= UVC_GUID_UVC_CAMERA,
-- 
2.0.0.526.g5318336


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-07-08 23:49           ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin
  2014-07-08 23:49             ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin
@ 2014-07-31 17:22             ` Vincent Palatin
       [not found]             ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com>
  2 siblings, 0 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-07-31 17:22 UTC (permalink / raw)
  To: Hans de Goede, Laurent Pinchart, linux-media
  Cc: LKML, Olof Johansson, Pawel Osciak, Zach Kuznia,
	Mauro Carvalho Chehab, Vincent Palatin

ping ...
Any opinion on adding those new controls ? since re-using the existing
relative ones was seen as too twisted.

Thanks,
-- 
Vincent


On Tue, Jul 8, 2014 at 4:49 PM, Vincent Palatin <vpalatin@chromium.org> wrote:
> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
> camera by setting its rotation speed around its axis.
>
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> ---
>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
>  Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
>  drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
>  include/uapi/linux/v4l2-controls.h           |  2 ++
>  4 files changed, 35 insertions(+)
>
> diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
> index eee6f0f..21910e9 100644
> --- a/Documentation/DocBook/media/v4l/compat.xml
> +++ b/Documentation/DocBook/media/v4l/compat.xml
> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
>        </orderedlist>
>      </section>
>
> +    <section>
> +      <title>V4L2 in Linux 3.17</title>
> +      <orderedlist>
> +       <listitem>
> +         <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
> +       </listitem>
> +      </orderedlist>
> +    </section>
> +
>      <section id="other">
>        <title>Relation of V4L2 to other Linux multimedia APIs</title>
>
> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
> index 47198ee..cdf97f0 100644
> --- a/Documentation/DocBook/media/v4l/controls.xml
> +++ b/Documentation/DocBook/media/v4l/controls.xml
> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry>
>           </row>
>           <row><entry></entry></row>
>
> +         <row>
> +           <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
> +           <entry>integer</entry>
> +         </row><row><entry spanname="descr">This control turns the
> +camera horizontally at the specific speed. The unit is undefined. A
> +positive value moves the camera to the right (clockwise when viewed
> +from above), a negative value to the left. A value of zero does not
> +cause or stop the motion.</entry>
> +         </row>
> +         <row><entry></entry></row>
> +
> +         <row>
> +           <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
> +           <entry>integer</entry>
> +         </row><row><entry spanname="descr">This control turns the
> +camera vertically at the specified speed. The unit is undefined. A
> +positive value moves the camera up, a negative value down. A value of
> +zero does not cause or stop the motion.</entry>
> +         </row>
> +         <row><entry></entry></row>
> +
>         </tbody>
>        </tgroup>
>      </table>
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> index 55c6832..57ddaf4 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
>         case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
>         case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus, Status";
>         case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus, Range";
> +       case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
> +       case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
>
>         /* FM Radio Modulator control */
>         /* Keep the order of the 'case's the same as in videodev2.h! */
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index 2ac5597..5576044 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
>         V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
>  };
>
> +#define V4L2_CID_PAN_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+32)
> +#define V4L2_CID_TILT_SPEED                    (V4L2_CID_CAMERA_CLASS_BASE+33)
>
>  /* FM Modulator class control IDs */
>
> --
> 2.0.0.526.g5318336
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
       [not found]             ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com>
@ 2014-08-06 15:10               ` Vincent Palatin
  2014-08-07  2:18                 ` Pawel Osciak
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-08-06 15:10 UTC (permalink / raw)
  To: Pawel Osciak
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak <posciak@chromium.org> wrote:
> This looks good to me in general (with one comment below). I don't think we
> can easily implement current V4L2 pan and tilt controls that are for
> movement by a specified amount in terms of UVC pan/tilt speed controls,
> which only let us set speed and direction...
>
> On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org>
> wrote:
>>
>> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
>> camera by setting its rotation speed around its axis.
>>
>> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
>>
>> ---
>>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
>>  Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
>>  drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
>>  include/uapi/linux/v4l2-controls.h           |  2 ++
>>  4 files changed, 35 insertions(+)
>>
>> diff --git a/Documentation/DocBook/media/v4l/compat.xml
>> b/Documentation/DocBook/media/v4l/compat.xml
>> index eee6f0f..21910e9 100644
>> --- a/Documentation/DocBook/media/v4l/compat.xml
>> +++ b/Documentation/DocBook/media/v4l/compat.xml
>> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
>>        </orderedlist>
>>      </section>
>>
>> +    <section>
>> +      <title>V4L2 in Linux 3.17</title>
>> +      <orderedlist>
>> +       <listitem>
>> +         <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
>> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
>> +       </listitem>
>> +      </orderedlist>
>> +    </section>
>> +
>>      <section id="other">
>>        <title>Relation of V4L2 to other Linux multimedia APIs</title>
>>
>> diff --git a/Documentation/DocBook/media/v4l/controls.xml
>> b/Documentation/DocBook/media/v4l/controls.xml
>> index 47198ee..cdf97f0 100644
>> --- a/Documentation/DocBook/media/v4l/controls.xml
>> +++ b/Documentation/DocBook/media/v4l/controls.xml
>> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus
>> controls.</entry>
>>           </row>
>>           <row><entry></entry></row>
>>
>> +         <row>
>> +           <entry
>> spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
>> +           <entry>integer</entry>
>> +         </row><row><entry spanname="descr">This control turns the
>> +camera horizontally at the specific speed. The unit is undefined. A
>> +positive value moves the camera to the right (clockwise when viewed
>> +from above), a negative value to the left. A value of zero does not
>> +cause or stop the motion.</entry>
>
>
> How do we stop/start?

As mentioned in the last sentence of the paragraph above, setting 0
stops the movement.
setting non-zero value starts it if needed.

>
>>
>> +         </row>
>> +         <row><entry></entry></row>
>> +
>> +         <row>
>> +           <entry
>> spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
>> +           <entry>integer</entry>
>> +         </row><row><entry spanname="descr">This control turns the
>> +camera vertically at the specified speed. The unit is undefined. A
>> +positive value moves the camera up, a negative value down. A value of
>> +zero does not cause or stop the motion.</entry>
>> +         </row>
>> +         <row><entry></entry></row>
>> +
>>         </tbody>
>>        </tgroup>
>>      </table>
>> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c
>> b/drivers/media/v4l2-core/v4l2-ctrls.c
>> index 55c6832..57ddaf4 100644
>> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
>>         case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
>>         case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus,
>> Status";
>>         case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus,
>> Range";
>> +       case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
>> +       case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
>>
>>         /* FM Radio Modulator control */
>>         /* Keep the order of the 'case's the same as in videodev2.h! */
>> diff --git a/include/uapi/linux/v4l2-controls.h
>> b/include/uapi/linux/v4l2-controls.h
>> index 2ac5597..5576044 100644
>> --- a/include/uapi/linux/v4l2-controls.h
>> +++ b/include/uapi/linux/v4l2-controls.h
>> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
>>         V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
>>  };
>>
>> +#define V4L2_CID_PAN_SPEED
>> (V4L2_CID_CAMERA_CLASS_BASE+32)
>> +#define V4L2_CID_TILT_SPEED
>> (V4L2_CID_CAMERA_CLASS_BASE+33)
>>
>>  /* FM Modulator class control IDs */
>>
>> --
>> 2.0.0.526.g5318336
>>
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-08-06 15:10               ` Vincent Palatin
@ 2014-08-07  2:18                 ` Pawel Osciak
  2014-08-08 16:41                   ` Vincent Palatin
  2014-08-15 19:08                   ` [PATCH v2 " Vincent Palatin
  0 siblings, 2 replies; 27+ messages in thread
From: Pawel Osciak @ 2014-08-07  2:18 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin <vpalatin@chromium.org> wrote:
>
> On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak <posciak@chromium.org> wrote:
> > This looks good to me in general (with one comment below). I don't think we
> > can easily implement current V4L2 pan and tilt controls that are for
> > movement by a specified amount in terms of UVC pan/tilt speed controls,
> > which only let us set speed and direction...
> >
> > On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org>
> > wrote:
> >>
> >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
> >> camera by setting its rotation speed around its axis.
> >>
> >> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> >>
> >> ---
> >>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
> >>  Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
> >>  drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
> >>  include/uapi/linux/v4l2-controls.h           |  2 ++
> >>  4 files changed, 35 insertions(+)
> >>
> >> diff --git a/Documentation/DocBook/media/v4l/compat.xml
> >> b/Documentation/DocBook/media/v4l/compat.xml
> >> index eee6f0f..21910e9 100644
> >> --- a/Documentation/DocBook/media/v4l/compat.xml
> >> +++ b/Documentation/DocBook/media/v4l/compat.xml
> >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
> >>        </orderedlist>
> >>      </section>
> >>
> >> +    <section>
> >> +      <title>V4L2 in Linux 3.17</title>
> >> +      <orderedlist>
> >> +       <listitem>
> >> +         <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
> >> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
> >> +       </listitem>
> >> +      </orderedlist>
> >> +    </section>
> >> +
> >>      <section id="other">
> >>        <title>Relation of V4L2 to other Linux multimedia APIs</title>
> >>
> >> diff --git a/Documentation/DocBook/media/v4l/controls.xml
> >> b/Documentation/DocBook/media/v4l/controls.xml
> >> index 47198ee..cdf97f0 100644
> >> --- a/Documentation/DocBook/media/v4l/controls.xml
> >> +++ b/Documentation/DocBook/media/v4l/controls.xml
> >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus
> >> controls.</entry>
> >>           </row>
> >>           <row><entry></entry></row>
> >>
> >> +         <row>
> >> +           <entry
> >> spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
> >> +           <entry>integer</entry>
> >> +         </row><row><entry spanname="descr">This control turns the
> >> +camera horizontally at the specific speed. The unit is undefined. A
> >> +positive value moves the camera to the right (clockwise when viewed
> >> +from above), a negative value to the left. A value of zero does not
> >> +cause or stop the motion.</entry>
> >
> >
> > How do we stop/start?
>
> As mentioned in the last sentence of the paragraph above, setting 0
> stops the movement.
> setting non-zero value starts it if needed.
>

The sentence says "A value of zero does *not* cause or stop the
motion.". Perhaps "not" is a typo then?

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-08-07  2:18                 ` Pawel Osciak
@ 2014-08-08 16:41                   ` Vincent Palatin
  2014-08-15 19:08                   ` [PATCH v2 " Vincent Palatin
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-08-08 16:41 UTC (permalink / raw)
  To: Pawel Osciak
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Wed, Aug 6, 2014 at 7:18 PM, Pawel Osciak <posciak@chromium.org> wrote:
>
> On Thu, Aug 7, 2014 at 12:10 AM, Vincent Palatin <vpalatin@chromium.org> wrote:
> >
> > On Sun, Aug 3, 2014 at 10:52 PM, Pawel Osciak <posciak@chromium.org> wrote:
> > > This looks good to me in general (with one comment below). I don't think we
> > > can easily implement current V4L2 pan and tilt controls that are for
> > > movement by a specified amount in terms of UVC pan/tilt speed controls,
> > > which only let us set speed and direction...
> > >
> > > On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org>
> > > wrote:
> > >>
> > >> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
> > >> camera by setting its rotation speed around its axis.
> > >>
> > >> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> > >>
> > >> ---
> > >>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
> > >>  Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
> > >>  drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
> > >>  include/uapi/linux/v4l2-controls.h           |  2 ++
> > >>  4 files changed, 35 insertions(+)
> > >>
> > >> diff --git a/Documentation/DocBook/media/v4l/compat.xml
> > >> b/Documentation/DocBook/media/v4l/compat.xml
> > >> index eee6f0f..21910e9 100644
> > >> --- a/Documentation/DocBook/media/v4l/compat.xml
> > >> +++ b/Documentation/DocBook/media/v4l/compat.xml
> > >> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
> > >>        </orderedlist>
> > >>      </section>
> > >>
> > >> +    <section>
> > >> +      <title>V4L2 in Linux 3.17</title>
> > >> +      <orderedlist>
> > >> +       <listitem>
> > >> +         <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
> > >> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
> > >> +       </listitem>
> > >> +      </orderedlist>
> > >> +    </section>
> > >> +
> > >>      <section id="other">
> > >>        <title>Relation of V4L2 to other Linux multimedia APIs</title>
> > >>
> > >> diff --git a/Documentation/DocBook/media/v4l/controls.xml
> > >> b/Documentation/DocBook/media/v4l/controls.xml
> > >> index 47198ee..cdf97f0 100644
> > >> --- a/Documentation/DocBook/media/v4l/controls.xml
> > >> +++ b/Documentation/DocBook/media/v4l/controls.xml
> > >> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus
> > >> controls.</entry>
> > >>           </row>
> > >>           <row><entry></entry></row>
> > >>
> > >> +         <row>
> > >> +           <entry
> > >> spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
> > >> +           <entry>integer</entry>
> > >> +         </row><row><entry spanname="descr">This control turns the
> > >> +camera horizontally at the specific speed. The unit is undefined. A
> > >> +positive value moves the camera to the right (clockwise when viewed
> > >> +from above), a negative value to the left. A value of zero does not
> > >> +cause or stop the motion.</entry>
> > >
> > >
> > > How do we stop/start?
> >
> > As mentioned in the last sentence of the paragraph above, setting 0
> > stops the movement.
> > setting non-zero value starts it if needed.
> >
>
> The sentence says "A value of zero does *not* cause or stop the
> motion.". Perhaps "not" is a typo then?


maybe my phrasing is really bad but the "not" isn't a typo.
The developed version would be :
"A value of zero does *not* cause [any motion if the camera is already stopped]
 or stop the motion [if it is currently moving with a non-zero speed]"

-- 
Vincent

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-08-07  2:18                 ` Pawel Osciak
  2014-08-08 16:41                   ` Vincent Palatin
@ 2014-08-15 19:08                   ` Vincent Palatin
  2014-09-03  4:54                     ` Pawel Osciak
  1 sibling, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-08-15 19:08 UTC (permalink / raw)
  To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab,
	Vincent Palatin

The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
camera by setting its rotation speed around its axis.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
---
Changes from v1:
- update the documentation wording according to Pawel suggestion.

 Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
 Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
 include/uapi/linux/v4l2-controls.h           |  2 ++
 4 files changed, 35 insertions(+)

diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
index eee6f0f..21910e9 100644
--- a/Documentation/DocBook/media/v4l/compat.xml
+++ b/Documentation/DocBook/media/v4l/compat.xml
@@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
       </orderedlist>
     </section>
 
+    <section>
+      <title>V4L2 in Linux 3.17</title>
+      <orderedlist>
+	<listitem>
+	  <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
+ <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
+	</listitem>
+      </orderedlist>
+    </section>
+
     <section id="other">
       <title>Relation of V4L2 to other Linux multimedia APIs</title>
 
diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
index 47198ee..be88e64 100644
--- a/Documentation/DocBook/media/v4l/controls.xml
+++ b/Documentation/DocBook/media/v4l/controls.xml
@@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry>
 	  </row>
 	  <row><entry></entry></row>
 
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera horizontally at the specific speed. The unit is undefined. A
+positive value moves the camera to the right (clockwise when viewed
+from above), a negative value to the left. A value of zero stops the motion
+if one is in progress and has no effect otherwise.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera vertically at the specified speed. The unit is undefined. A
+positive value moves the camera up, a negative value down. A value of zero
+stops the motion if one is in progress and has no effect otherwise.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
 	</tbody>
       </tgroup>
     </table>
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 55c6832..57ddaf4 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_AUTO_FOCUS_STOP:		return "Auto Focus, Stop";
 	case V4L2_CID_AUTO_FOCUS_STATUS:	return "Auto Focus, Status";
 	case V4L2_CID_AUTO_FOCUS_RANGE:		return "Auto Focus, Range";
+	case V4L2_CID_PAN_SPEED:		return "Pan, Speed";
+	case V4L2_CID_TILT_SPEED:		return "Tilt, Speed";
 
 	/* FM Radio Modulator control */
 	/* Keep the order of the 'case's the same as in videodev2.h! */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 2ac5597..5576044 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
 	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3,
 };
 
+#define V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
+#define V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)
 
 /* FM Modulator class control IDs */
 
-- 
2.1.0.rc2.206.gedb03e5


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-08-15 19:08                   ` [PATCH v2 " Vincent Palatin
@ 2014-09-03  4:54                     ` Pawel Osciak
  2014-09-03 19:35                       ` Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Pawel Osciak @ 2014-09-03  4:54 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin <vpalatin@chromium.org> wrote:
>
> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
> camera by setting its rotation speed around its axis.
>
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Reviewed-by: Pawel Osciak <posciak@chromium.org>

>
> ---
> Changes from v1:
> - update the documentation wording according to Pawel suggestion.
>
>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
>  Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
>  drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
>  include/uapi/linux/v4l2-controls.h           |  2 ++
>  4 files changed, 35 insertions(+)
>
> diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
> index eee6f0f..21910e9 100644
> --- a/Documentation/DocBook/media/v4l/compat.xml
> +++ b/Documentation/DocBook/media/v4l/compat.xml
> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
>        </orderedlist>
>      </section>
>
> +    <section>
> +      <title>V4L2 in Linux 3.17</title>

This will need a bump.

>
> +      <orderedlist>
> +       <listitem>
> +         <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
> +       </listitem>
> +      </orderedlist>
> +    </section>
> +
>      <section id="other">
>        <title>Relation of V4L2 to other Linux multimedia APIs</title>
>
> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
> index 47198ee..be88e64 100644
> --- a/Documentation/DocBook/media/v4l/controls.xml
> +++ b/Documentation/DocBook/media/v4l/controls.xml
> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry>
>           </row>
>           <row><entry></entry></row>
>
> +         <row>
> +           <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
> +           <entry>integer</entry>
> +         </row><row><entry spanname="descr">This control turns the
> +camera horizontally at the specific speed. The unit is undefined. A
> +positive value moves the camera to the right (clockwise when viewed
> +from above), a negative value to the left. A value of zero stops the motion
> +if one is in progress and has no effect otherwise.</entry>
> +         </row>
> +         <row><entry></entry></row>
> +
> +         <row>
> +           <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
> +           <entry>integer</entry>
> +         </row><row><entry spanname="descr">This control turns the
> +camera vertically at the specified speed. The unit is undefined. A
> +positive value moves the camera up, a negative value down. A value of zero
> +stops the motion if one is in progress and has no effect otherwise.</entry>
> +         </row>
> +         <row><entry></entry></row>
> +
>         </tbody>
>        </tgroup>
>      </table>
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
> index 55c6832..57ddaf4 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
>         case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
>         case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus, Status";
>         case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus, Range";
> +       case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
> +       case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
>
>         /* FM Radio Modulator control */
>         /* Keep the order of the 'case's the same as in videodev2.h! */
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index 2ac5597..5576044 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
>         V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
>  };
>
> +#define V4L2_CID_PAN_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+32)
> +#define V4L2_CID_TILT_SPEED                    (V4L2_CID_CAMERA_CLASS_BASE+33)
>
>  /* FM Modulator class control IDs */
>
> --
> 2.1.0.rc2.206.gedb03e5
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-07-08 23:49             ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin
@ 2014-09-03  4:57               ` Pawel Osciak
  2014-09-03 19:40                 ` [PATCH v3 " Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Pawel Osciak @ 2014-09-03  4:57 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Wed, Jul 9, 2014 at 8:49 AM, Vincent Palatin <vpalatin@chromium.org> wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
>
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
>
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Reviewed-by: Pawel Osciak <posciak@chromium.org>

> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
> ---
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
>  1 file changed, 55 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 0eb82106..d703cb0 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
>                 .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
>                 .index          = 12,
>                 .size           = 4,
> -               .flags          = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> -                               | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> -                               | UVC_CTRL_FLAG_GET_DEF
> +               .flags          = UVC_CTRL_FLAG_SET_CUR
> +                               | UVC_CTRL_FLAG_GET_RANGE
>                                 | UVC_CTRL_FLAG_AUTO_UPDATE,
>         },
>         {
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
>         data[2] = min((int)abs(value), 0xff);
>  }
>
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +       __u8 query, const __u8 *data)
> +{
> +       int first = mapping->offset / 8;
> +       __s8 rel = (__s8)data[first];
> +
> +       switch (query) {
> +       case UVC_GET_CUR:
> +               return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +                                                : -data[first+1]);
> +       case UVC_GET_MIN:
> +               return -data[first+1];
> +       case UVC_GET_MAX:
> +       case UVC_GET_RES:
> +       case UVC_GET_DEF:
> +       default:
> +               return data[first+1];
> +       }
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +       __s32 value, __u8 *data)
> +{
> +       int first = mapping->offset / 8;
> +
> +       data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +       data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>         {
>                 .id             = V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>                 .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
>         },
>         {
> +               .id             = V4L2_CID_PAN_SPEED,
> +               .name           = "Pan (Speed)",
> +               .entity         = UVC_GUID_UVC_CAMERA,
> +               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +               .size           = 16,
> +               .offset         = 0,
> +               .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> +               .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> +               .get            = uvc_ctrl_get_rel_speed,
> +               .set            = uvc_ctrl_set_rel_speed,
> +       },
> +       {
> +               .id             = V4L2_CID_TILT_SPEED,
> +               .name           = "Tilt (Speed)",
> +               .entity         = UVC_GUID_UVC_CAMERA,
> +               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +               .size           = 16,
> +               .offset         = 16,
> +               .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> +               .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> +               .get            = uvc_ctrl_get_rel_speed,
> +               .set            = uvc_ctrl_set_rel_speed,
> +       },
> +       {
>                 .id             = V4L2_CID_PRIVACY,
>                 .name           = "Privacy",
>                 .entity         = UVC_GUID_UVC_CAMERA,
> --
> 2.0.0.526.g5318336
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v2 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-09-03  4:54                     ` Pawel Osciak
@ 2014-09-03 19:35                       ` Vincent Palatin
  2014-09-03 19:38                         ` [PATCH v3 " Vincent Palatin
  2014-10-06 21:04                         ` [PATCH v5 " Vincent Palatin
  0 siblings, 2 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-09-03 19:35 UTC (permalink / raw)
  To: Pawel Osciak
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Tue, Sep 2, 2014 at 9:54 PM, Pawel Osciak <posciak@chromium.org> wrote:
> On Sat, Aug 16, 2014 at 4:08 AM, Vincent Palatin <vpalatin@chromium.org> wrote:
>>
>> The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
>> camera by setting its rotation speed around its axis.
>>
>> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
>
> Reviewed-by: Pawel Osciak <posciak@chromium.org>
>
>>
>> ---
>> Changes from v1:
>> - update the documentation wording according to Pawel suggestion.
>>
>>  Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
>>  Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
>>  drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
>>  include/uapi/linux/v4l2-controls.h           |  2 ++
>>  4 files changed, 35 insertions(+)
>>
>> diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
>> index eee6f0f..21910e9 100644
>> --- a/Documentation/DocBook/media/v4l/compat.xml
>> +++ b/Documentation/DocBook/media/v4l/compat.xml
>> @@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
>>        </orderedlist>
>>      </section>
>>
>> +    <section>
>> +      <title>V4L2 in Linux 3.17</title>
>
> This will need a bump.

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

>>
>> +      <orderedlist>
>> +       <listitem>
>> +         <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
>> + <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
>> +       </listitem>
>> +      </orderedlist>
>> +    </section>
>> +
>>      <section id="other">
>>        <title>Relation of V4L2 to other Linux multimedia APIs</title>
>>
>> diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
>> index 47198ee..be88e64 100644
>> --- a/Documentation/DocBook/media/v4l/controls.xml
>> +++ b/Documentation/DocBook/media/v4l/controls.xml
>> @@ -3914,6 +3914,27 @@ by exposure, white balance or focus controls.</entry>
>>           </row>
>>           <row><entry></entry></row>
>>
>> +         <row>
>> +           <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
>> +           <entry>integer</entry>
>> +         </row><row><entry spanname="descr">This control turns the
>> +camera horizontally at the specific speed. The unit is undefined. A
>> +positive value moves the camera to the right (clockwise when viewed
>> +from above), a negative value to the left. A value of zero stops the motion
>> +if one is in progress and has no effect otherwise.</entry>
>> +         </row>
>> +         <row><entry></entry></row>
>> +
>> +         <row>
>> +           <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
>> +           <entry>integer</entry>
>> +         </row><row><entry spanname="descr">This control turns the
>> +camera vertically at the specified speed. The unit is undefined. A
>> +positive value moves the camera up, a negative value down. A value of zero
>> +stops the motion if one is in progress and has no effect otherwise.</entry>
>> +         </row>
>> +         <row><entry></entry></row>
>> +
>>         </tbody>
>>        </tgroup>
>>      </table>
>> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
>> index 55c6832..57ddaf4 100644
>> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>> @@ -787,6 +787,8 @@ const char *v4l2_ctrl_get_name(u32 id)
>>         case V4L2_CID_AUTO_FOCUS_STOP:          return "Auto Focus, Stop";
>>         case V4L2_CID_AUTO_FOCUS_STATUS:        return "Auto Focus, Status";
>>         case V4L2_CID_AUTO_FOCUS_RANGE:         return "Auto Focus, Range";
>> +       case V4L2_CID_PAN_SPEED:                return "Pan, Speed";
>> +       case V4L2_CID_TILT_SPEED:               return "Tilt, Speed";
>>
>>         /* FM Radio Modulator control */
>>         /* Keep the order of the 'case's the same as in videodev2.h! */
>> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
>> index 2ac5597..5576044 100644
>> --- a/include/uapi/linux/v4l2-controls.h
>> +++ b/include/uapi/linux/v4l2-controls.h
>> @@ -745,6 +745,8 @@ enum v4l2_auto_focus_range {
>>         V4L2_AUTO_FOCUS_RANGE_INFINITY          = 3,
>>  };
>>
>> +#define V4L2_CID_PAN_SPEED                     (V4L2_CID_CAMERA_CLASS_BASE+32)
>> +#define V4L2_CID_TILT_SPEED                    (V4L2_CID_CAMERA_CLASS_BASE+33)
>>
>>  /* FM Modulator class control IDs */
>>
>> --
>> 2.1.0.rc2.206.gedb03e5
>>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v3 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-09-03 19:35                       ` Vincent Palatin
@ 2014-09-03 19:38                         ` Vincent Palatin
  2014-10-06 21:04                         ` [PATCH v5 " Vincent Palatin
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-09-03 19:38 UTC (permalink / raw)
  To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab,
	Vincent Palatin

The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
camera by setting its rotation speed around its axis.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
---
Changes from v1:
- update the documentation wording according to Pawel suggestion.
Changes from v2:
- bump Linux kernel version for the API change.

 Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
 Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
 include/uapi/linux/v4l2-controls.h           |  2 ++
 4 files changed, 35 insertions(+)

diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
index eee6f0f..7aa7c5d 100644
--- a/Documentation/DocBook/media/v4l/compat.xml
+++ b/Documentation/DocBook/media/v4l/compat.xml
@@ -2545,6 +2545,16 @@ fields changed from _s32 to _u32.
       </orderedlist>
     </section>
 
+    <section>
+      <title>V4L2 in Linux 3.18</title>
+      <orderedlist>
+	<listitem>
+	  <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
+ <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
+	</listitem>
+      </orderedlist>
+    </section>
+
     <section id="other">
       <title>Relation of V4L2 to other Linux multimedia APIs</title>
 
diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
index 9f5ffd8..124f287 100644
--- a/Documentation/DocBook/media/v4l/controls.xml
+++ b/Documentation/DocBook/media/v4l/controls.xml
@@ -3965,6 +3965,27 @@ by exposure, white balance or focus controls.</entry>
 	  </row>
 	  <row><entry></entry></row>
 
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera horizontally at the specific speed. The unit is undefined. A
+positive value moves the camera to the right (clockwise when viewed
+from above), a negative value to the left. A value of zero stops the motion
+if one is in progress and has no effect otherwise.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera vertically at the specified speed. The unit is undefined. A
+positive value moves the camera up, a negative value down. A value of zero
+stops the motion if one is in progress and has no effect otherwise.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
 	</tbody>
       </tgroup>
     </table>
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index f030d6a..4d050f9 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -796,6 +796,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_AUTO_FOCUS_STOP:		return "Auto Focus, Stop";
 	case V4L2_CID_AUTO_FOCUS_STATUS:	return "Auto Focus, Status";
 	case V4L2_CID_AUTO_FOCUS_RANGE:		return "Auto Focus, Range";
+	case V4L2_CID_PAN_SPEED:		return "Pan, Speed";
+	case V4L2_CID_TILT_SPEED:		return "Tilt, Speed";
 
 	/* FM Radio Modulator controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index e946e43..4de238b 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -746,6 +746,8 @@ enum v4l2_auto_focus_range {
 	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3,
 };
 
+#define V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
+#define V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)
 
 /* FM Modulator class control IDs */
 
-- 
2.1.0.rc2.206.gedb03e5


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-03  4:57               ` Pawel Osciak
@ 2014-09-03 19:40                 ` Vincent Palatin
  2014-09-04  0:37                   ` Pawel Osciak
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-09-03 19:40 UTC (permalink / raw)
  To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab,
	Vincent Palatin

Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
CT_PANTILT_RELATIVE_CONTROL terminal control request.

Tested by plugging a Logitech ConferenceCam C3000e USB camera
and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
Verified that it can pan and tilt at the same time in both directions.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc
---
Changes from v1/v2:
- rebased

 drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0eb82106..d703cb0 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
 		.index		= 12,
 		.size		= 4,
-		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
-				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
-				| UVC_CTRL_FLAG_GET_DEF
+		.flags		= UVC_CTRL_FLAG_SET_CUR
+				| UVC_CTRL_FLAG_GET_RANGE
 				| UVC_CTRL_FLAG_AUTO_UPDATE,
 	},
 	{
@@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
 	data[2] = min((int)abs(value), 0xff);
 }
 
+static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
+	__u8 query, const __u8 *data)
+{
+	int first = mapping->offset / 8;
+	__s8 rel = (__s8)data[first];
+
+	switch (query) {
+	case UVC_GET_CUR:
+		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
+						 : -data[first+1]);
+	case UVC_GET_MIN:
+		return -data[first+1];
+	case UVC_GET_MAX:
+	case UVC_GET_RES:
+	case UVC_GET_DEF:
+	default:
+		return data[first+1];
+	}
+}
+
+static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
+	__s32 value, __u8 *data)
+{
+	int first = mapping->offset / 8;
+
+	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
+	data[first+1] = min_t(int, abs(value), 0xff);
+}
+
 static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 	{
 		.id		= V4L2_CID_BRIGHTNESS,
@@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
 	},
 	{
+		.id		= V4L2_CID_PAN_SPEED,
+		.name		= "Pan (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 0,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
+		.id		= V4L2_CID_TILT_SPEED,
+		.name		= "Tilt (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 16,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
 		.id		= V4L2_CID_PRIVACY,
 		.name		= "Privacy",
 		.entity		= UVC_GUID_UVC_CAMERA,
-- 
2.1.0.rc2.206.gedb03e5


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v3 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-03 19:40                 ` [PATCH v3 " Vincent Palatin
@ 2014-09-04  0:37                   ` Pawel Osciak
  2014-09-04  0:47                     ` [PATCH v4 " Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Pawel Osciak @ 2014-09-04  0:37 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Laurent Pinchart, linux-media, LKML,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

On Thu, Sep 4, 2014 at 4:40 AM, Vincent Palatin <vpalatin@chromium.org> wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
>
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
>
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
>
> Change-Id: I7b70b228e5c0126683f5f0be34ffd2807f5783dc

Sorry, forgot to mention this previously, please remove gerrit ids
from the patches.
Thanks,
P.

> ---
> Changes from v1/v2:
> - rebased
>
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
>  1 file changed, 55 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 0eb82106..d703cb0 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
>                 .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
>                 .index          = 12,
>                 .size           = 4,
> -               .flags          = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> -                               | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> -                               | UVC_CTRL_FLAG_GET_DEF
> +               .flags          = UVC_CTRL_FLAG_SET_CUR
> +                               | UVC_CTRL_FLAG_GET_RANGE
>                                 | UVC_CTRL_FLAG_AUTO_UPDATE,
>         },
>         {
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
>         data[2] = min((int)abs(value), 0xff);
>  }
>
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +       __u8 query, const __u8 *data)
> +{
> +       int first = mapping->offset / 8;
> +       __s8 rel = (__s8)data[first];
> +
> +       switch (query) {
> +       case UVC_GET_CUR:
> +               return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +                                                : -data[first+1]);
> +       case UVC_GET_MIN:
> +               return -data[first+1];
> +       case UVC_GET_MAX:
> +       case UVC_GET_RES:
> +       case UVC_GET_DEF:
> +       default:
> +               return data[first+1];
> +       }
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +       __s32 value, __u8 *data)
> +{
> +       int first = mapping->offset / 8;
> +
> +       data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +       data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>         {
>                 .id             = V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>                 .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
>         },
>         {
> +               .id             = V4L2_CID_PAN_SPEED,
> +               .name           = "Pan (Speed)",
> +               .entity         = UVC_GUID_UVC_CAMERA,
> +               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +               .size           = 16,
> +               .offset         = 0,
> +               .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> +               .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> +               .get            = uvc_ctrl_get_rel_speed,
> +               .set            = uvc_ctrl_set_rel_speed,
> +       },
> +       {
> +               .id             = V4L2_CID_TILT_SPEED,
> +               .name           = "Tilt (Speed)",
> +               .entity         = UVC_GUID_UVC_CAMERA,
> +               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> +               .size           = 16,
> +               .offset         = 16,
> +               .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> +               .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> +               .get            = uvc_ctrl_get_rel_speed,
> +               .set            = uvc_ctrl_set_rel_speed,
> +       },
> +       {
>                 .id             = V4L2_CID_PRIVACY,
>                 .name           = "Privacy",
>                 .entity         = UVC_GUID_UVC_CAMERA,
> --
> 2.1.0.rc2.206.gedb03e5
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-04  0:37                   ` Pawel Osciak
@ 2014-09-04  0:47                     ` Vincent Palatin
  2014-09-04 20:29                       ` Laurent Pinchart
  2014-09-04 20:35                       ` [PATCH v4 " Laurent Pinchart
  0 siblings, 2 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-09-04  0:47 UTC (permalink / raw)
  To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab,
	Vincent Palatin

Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
CT_PANTILT_RELATIVE_CONTROL terminal control request.

Tested by plugging a Logitech ConferenceCam C3000e USB camera
and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
Verified that it can pan and tilt at the same time in both directions.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
---
Changes from v1/v2:
- rebased
Changes from v3:
- removed gerrit-id

 drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0eb82106..d703cb0 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
 		.index		= 12,
 		.size		= 4,
-		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
-				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
-				| UVC_CTRL_FLAG_GET_DEF
+		.flags		= UVC_CTRL_FLAG_SET_CUR
+				| UVC_CTRL_FLAG_GET_RANGE
 				| UVC_CTRL_FLAG_AUTO_UPDATE,
 	},
 	{
@@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
 	data[2] = min((int)abs(value), 0xff);
 }
 
+static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
+	__u8 query, const __u8 *data)
+{
+	int first = mapping->offset / 8;
+	__s8 rel = (__s8)data[first];
+
+	switch (query) {
+	case UVC_GET_CUR:
+		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
+						 : -data[first+1]);
+	case UVC_GET_MIN:
+		return -data[first+1];
+	case UVC_GET_MAX:
+	case UVC_GET_RES:
+	case UVC_GET_DEF:
+	default:
+		return data[first+1];
+	}
+}
+
+static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
+	__s32 value, __u8 *data)
+{
+	int first = mapping->offset / 8;
+
+	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
+	data[first+1] = min_t(int, abs(value), 0xff);
+}
+
 static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 	{
 		.id		= V4L2_CID_BRIGHTNESS,
@@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
 	},
 	{
+		.id		= V4L2_CID_PAN_SPEED,
+		.name		= "Pan (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 0,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
+		.id		= V4L2_CID_TILT_SPEED,
+		.name		= "Tilt (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 16,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
 		.id		= V4L2_CID_PRIVACY,
 		.name		= "Privacy",
 		.entity		= UVC_GUID_UVC_CAMERA,
-- 
2.1.0.rc2.206.gedb03e5


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-04  0:47                     ` [PATCH v4 " Vincent Palatin
@ 2014-09-04 20:29                       ` Laurent Pinchart
  2014-10-06 20:41                         ` Vincent Palatin
  2014-09-04 20:35                       ` [PATCH v4 " Laurent Pinchart
  1 sibling, 1 reply; 27+ messages in thread
From: Laurent Pinchart @ 2014-09-04 20:29 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Pawel Osciak, linux-media, linux-kernel,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

Hi Vincent,

Thank you for the patch.

On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
> 
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
> 
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>

Small comment here, as Pawel has reviewed the previous version, you could have 
added his Reviewed-by tag to the patch.

> ---
> Changes from v1/v2:
> - rebased
> Changes from v3:
> - removed gerrit-id
> 
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++---
>  1 file changed, 55 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
> b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
>  		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
>  		.index		= 12,
>  		.size		= 4,
> -		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> -				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> -				| UVC_CTRL_FLAG_GET_DEF
> +		.flags		= UVC_CTRL_FLAG_SET_CUR
> +				| UVC_CTRL_FLAG_GET_RANGE
>  				| UVC_CTRL_FLAG_AUTO_UPDATE,
>  	},
>  	{
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct
> uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff);
>  }
> 
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +	__u8 query, const __u8 *data)
> +{
> +	int first = mapping->offset / 8;

Nitpicking, I would use unsigned int instead of int here, as the value can't 
be negative (same comment for the next function).

If you're fine with that there's no need to resubmit, I can modify this when 
applying.

> +	__s8 rel = (__s8)data[first];
> +
> +	switch (query) {
> +	case UVC_GET_CUR:
> +		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +						 : -data[first+1]);
> +	case UVC_GET_MIN:
> +		return -data[first+1];
> +	case UVC_GET_MAX:
> +	case UVC_GET_RES:
> +	case UVC_GET_DEF:
> +	default:
> +		return data[first+1];
> +	}
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +	__s32 value, __u8 *data)
> +{
> +	int first = mapping->offset / 8;
> +
> +	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +	data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>  	{
>  		.id		= V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] =
> { .data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
>  	},
>  	{
> +		.id		= V4L2_CID_PAN_SPEED,
> +		.name		= "Pan (Speed)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 0,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
> +		.id		= V4L2_CID_TILT_SPEED,
> +		.name		= "Tilt (Speed)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 16,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
>  		.id		= V4L2_CID_PRIVACY,
>  		.name		= "Privacy",
>  		.entity		= UVC_GUID_UVC_CAMERA,

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-04  0:47                     ` [PATCH v4 " Vincent Palatin
  2014-09-04 20:29                       ` Laurent Pinchart
@ 2014-09-04 20:35                       ` Laurent Pinchart
  2014-10-06 20:44                         ` Vincent Palatin
  1 sibling, 1 reply; 27+ messages in thread
From: Laurent Pinchart @ 2014-09-04 20:35 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Pawel Osciak, linux-media, linux-kernel,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

Hi Vincent,

On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
> 
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.

By the way, what is the control value reported by the device after it stops 
moving by itself due to reaching a limit position ?

> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> ---
> Changes from v1/v2:
> - rebased
> Changes from v3:
> - removed gerrit-id
> 
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++---
>  1 file changed, 55 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
> b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
>  		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
>  		.index		= 12,
>  		.size		= 4,
> -		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> -				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> -				| UVC_CTRL_FLAG_GET_DEF
> +		.flags		= UVC_CTRL_FLAG_SET_CUR
> +				| UVC_CTRL_FLAG_GET_RANGE
> 
>  				| UVC_CTRL_FLAG_AUTO_UPDATE,
> 
>  	},
>  	{
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct
> uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff);
>  }
> 
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +	__u8 query, const __u8 *data)
> +{
> +	int first = mapping->offset / 8;
> +	__s8 rel = (__s8)data[first];
> +
> +	switch (query) {
> +	case UVC_GET_CUR:
> +		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +						 : -data[first+1]);
> +	case UVC_GET_MIN:
> +		return -data[first+1];
> +	case UVC_GET_MAX:
> +	case UVC_GET_RES:
> +	case UVC_GET_DEF:
> +	default:
> +		return data[first+1];
> +	}
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +	__s32 value, __u8 *data)
> +{
> +	int first = mapping->offset / 8;
> +
> +	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +	data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>  	{
>  		.id		= V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] =
> { .data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
>  	},
>  	{
> +		.id		= V4L2_CID_PAN_SPEED,
> +		.name		= "Pan (Speed)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 0,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
> +		.id		= V4L2_CID_TILT_SPEED,
> +		.name		= "Tilt (Speed)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 16,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
>  		.id		= V4L2_CID_PRIVACY,
>  		.name		= "Privacy",
>  		.entity		= UVC_GUID_UVC_CAMERA,

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-04 20:29                       ` Laurent Pinchart
@ 2014-10-06 20:41                         ` Vincent Palatin
  2014-10-06 21:05                           ` [PATCH v5 " Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-10-06 20:41 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Hans de Goede, Pawel Osciak, linux-media, LKML, Olof Johansson,
	Zach Kuznia, Mauro Carvalho Chehab

On Thu, Sep 4, 2014 at 1:29 PM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Vincent,
>
> Thank you for the patch.
>
> On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote:
> > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> > CT_PANTILT_RELATIVE_CONTROL terminal control request.
> >
> > Tested by plugging a Logitech ConferenceCam C3000e USB camera
> > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> > Verified that it can pan and tilt at the same time in both directions.
> >
> > Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
>
> Small comment here, as Pawel has reviewed the previous version, you could have
> added his Reviewed-by tag to the patch.
>
> > ---
> > Changes from v1/v2:
> > - rebased
> > Changes from v3:
> > - removed gerrit-id
> >
> >  drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++---
> >  1 file changed, 55 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
> > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644
> > --- a/drivers/media/usb/uvc/uvc_ctrl.c
> > +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
> >               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> >               .index          = 12,
> >               .size           = 4,
> > -             .flags          = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> > -                             | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> > -                             | UVC_CTRL_FLAG_GET_DEF
> > +             .flags          = UVC_CTRL_FLAG_SET_CUR
> > +                             | UVC_CTRL_FLAG_GET_RANGE
> >                               | UVC_CTRL_FLAG_AUTO_UPDATE,
> >       },
> >       {
> > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct
> > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff);
> >  }
> >
> > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> > +     __u8 query, const __u8 *data)
> > +{
> > +     int first = mapping->offset / 8;
>
> Nitpicking, I would use unsigned int instead of int here, as the value can't
> be negative (same comment for the next function).
>
> If you're fine with that there's no need to resubmit, I can modify this when
> applying.


Yes, I'm fine with that.


>
>
> > +     __s8 rel = (__s8)data[first];
> > +
> > +     switch (query) {
> > +     case UVC_GET_CUR:
> > +             return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> > +                                              : -data[first+1]);
> > +     case UVC_GET_MIN:
> > +             return -data[first+1];
> > +     case UVC_GET_MAX:
> > +     case UVC_GET_RES:
> > +     case UVC_GET_DEF:
> > +     default:
> > +             return data[first+1];
> > +     }
> > +}
> > +
> > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> > +     __s32 value, __u8 *data)
> > +{
> > +     int first = mapping->offset / 8;
> > +
> > +     data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> > +     data[first+1] = min_t(int, abs(value), 0xff);
> > +}
> > +
> >  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> >       {
> >               .id             = V4L2_CID_BRIGHTNESS,
> > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] =
> > { .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> >       },
> >       {
> > +             .id             = V4L2_CID_PAN_SPEED,
> > +             .name           = "Pan (Speed)",
> > +             .entity         = UVC_GUID_UVC_CAMERA,
> > +             .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> > +             .size           = 16,
> > +             .offset         = 0,
> > +             .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> > +             .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> > +             .get            = uvc_ctrl_get_rel_speed,
> > +             .set            = uvc_ctrl_set_rel_speed,
> > +     },
> > +     {
> > +             .id             = V4L2_CID_TILT_SPEED,
> > +             .name           = "Tilt (Speed)",
> > +             .entity         = UVC_GUID_UVC_CAMERA,
> > +             .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> > +             .size           = 16,
> > +             .offset         = 16,
> > +             .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> > +             .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> > +             .get            = uvc_ctrl_get_rel_speed,
> > +             .set            = uvc_ctrl_set_rel_speed,
> > +     },
> > +     {
> >               .id             = V4L2_CID_PRIVACY,
> >               .name           = "Privacy",
> >               .entity         = UVC_GUID_UVC_CAMERA,
>
> --
> Regards,
>
> Laurent Pinchart
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v4 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-09-04 20:35                       ` [PATCH v4 " Laurent Pinchart
@ 2014-10-06 20:44                         ` Vincent Palatin
  0 siblings, 0 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-10-06 20:44 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Hans de Goede, Pawel Osciak, linux-media, LKML, Olof Johansson,
	Zach Kuznia, Mauro Carvalho Chehab

On Thu, Sep 4, 2014 at 1:35 PM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Vincent,
>
> On Wednesday 03 September 2014 17:47:48 Vincent Palatin wrote:
> > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> > CT_PANTILT_RELATIVE_CONTROL terminal control request.
> >
> > Tested by plugging a Logitech ConferenceCam C3000e USB camera
> > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> > Verified that it can pan and tilt at the same time in both directions.
>
> By the way, what is the control value reported by the device after it stops
> moving by itself due to reaching a limit position ?


I don't know.
I no longer have the device in hand, I will ask somebody who has one
to experiment and check.

>
>
> > Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> > ---
> > Changes from v1/v2:
> > - rebased
> > Changes from v3:
> > - removed gerrit-id
> >
> >  drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++---
> >  1 file changed, 55 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
> > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d703cb0 100644
> > --- a/drivers/media/usb/uvc/uvc_ctrl.c
> > +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
> >               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> >               .index          = 12,
> >               .size           = 4,
> > -             .flags          = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> > -                             | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> > -                             | UVC_CTRL_FLAG_GET_DEF
> > +             .flags          = UVC_CTRL_FLAG_SET_CUR
> > +                             | UVC_CTRL_FLAG_GET_RANGE
> >
> >                               | UVC_CTRL_FLAG_AUTO_UPDATE,
> >
> >       },
> >       {
> > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct
> > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff);
> >  }
> >
> > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> > +     __u8 query, const __u8 *data)
> > +{
> > +     int first = mapping->offset / 8;
> > +     __s8 rel = (__s8)data[first];
> > +
> > +     switch (query) {
> > +     case UVC_GET_CUR:
> > +             return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> > +                                              : -data[first+1]);
> > +     case UVC_GET_MIN:
> > +             return -data[first+1];
> > +     case UVC_GET_MAX:
> > +     case UVC_GET_RES:
> > +     case UVC_GET_DEF:
> > +     default:
> > +             return data[first+1];
> > +     }
> > +}
> > +
> > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> > +     __s32 value, __u8 *data)
> > +{
> > +     int first = mapping->offset / 8;
> > +
> > +     data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> > +     data[first+1] = min_t(int, abs(value), 0xff);
> > +}
> > +
> >  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> >       {
> >               .id             = V4L2_CID_BRIGHTNESS,
> > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] =
> > { .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> >       },
> >       {
> > +             .id             = V4L2_CID_PAN_SPEED,
> > +             .name           = "Pan (Speed)",
> > +             .entity         = UVC_GUID_UVC_CAMERA,
> > +             .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> > +             .size           = 16,
> > +             .offset         = 0,
> > +             .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> > +             .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> > +             .get            = uvc_ctrl_get_rel_speed,
> > +             .set            = uvc_ctrl_set_rel_speed,
> > +     },
> > +     {
> > +             .id             = V4L2_CID_TILT_SPEED,
> > +             .name           = "Tilt (Speed)",
> > +             .entity         = UVC_GUID_UVC_CAMERA,
> > +             .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> > +             .size           = 16,
> > +             .offset         = 16,
> > +             .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> > +             .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> > +             .get            = uvc_ctrl_get_rel_speed,
> > +             .set            = uvc_ctrl_set_rel_speed,
> > +     },
> > +     {
> >               .id             = V4L2_CID_PRIVACY,
> >               .name           = "Privacy",
> >               .entity         = UVC_GUID_UVC_CAMERA,
>
> --
> Regards,
>
> Laurent Pinchart
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v5 1/2] [media] V4L: Add camera pan/tilt speed controls
  2014-09-03 19:35                       ` Vincent Palatin
  2014-09-03 19:38                         ` [PATCH v3 " Vincent Palatin
@ 2014-10-06 21:04                         ` Vincent Palatin
  1 sibling, 0 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-10-06 21:04 UTC (permalink / raw)
  To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab,
	Vincent Palatin

The V4L2_CID_PAN_SPEED and V4L2_CID_TILT_SPEED controls allow to move the
camera by setting its rotation speed around its axis.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Pawel Osciak <posciak@chromium.org>
---
Changes from v1:
- update the documentation wording according to Pawel suggestion.
Changes from v2:
- bump Linux kernel version for the API change.

 Documentation/DocBook/media/v4l/compat.xml   | 10 ++++++++++
 Documentation/DocBook/media/v4l/controls.xml | 21 +++++++++++++++++++++
 drivers/media/v4l2-core/v4l2-ctrls.c         |  2 ++
 include/uapi/linux/v4l2-controls.h           |  2 ++
 4 files changed, 35 insertions(+)

diff --git a/Documentation/DocBook/media/v4l/compat.xml b/Documentation/DocBook/media/v4l/compat.xml
index 3a626d1..0a2debf 100644
--- a/Documentation/DocBook/media/v4l/compat.xml
+++ b/Documentation/DocBook/media/v4l/compat.xml
@@ -2569,6 +2569,16 @@ fields changed from _s32 to _u32.
       </orderedlist>
     </section>
 
+    <section>
+      <title>V4L2 in Linux 3.18</title>
+      <orderedlist>
+	<listitem>
+	  <para>Added <constant>V4L2_CID_PAN_SPEED</constant> and
+ <constant>V4L2_CID_TILT_SPEED</constant> camera controls.</para>
+	</listitem>
+      </orderedlist>
+    </section>
+
     <section id="other">
       <title>Relation of V4L2 to other Linux multimedia APIs</title>
 
diff --git a/Documentation/DocBook/media/v4l/controls.xml b/Documentation/DocBook/media/v4l/controls.xml
index 9f5ffd8..124f287 100644
--- a/Documentation/DocBook/media/v4l/controls.xml
+++ b/Documentation/DocBook/media/v4l/controls.xml
@@ -3965,6 +3965,27 @@ by exposure, white balance or focus controls.</entry>
 	  </row>
 	  <row><entry></entry></row>
 
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_PAN_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera horizontally at the specific speed. The unit is undefined. A
+positive value moves the camera to the right (clockwise when viewed
+from above), a negative value to the left. A value of zero stops the motion
+if one is in progress and has no effect otherwise.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
+	  <row>
+	    <entry spanname="id"><constant>V4L2_CID_TILT_SPEED</constant>&nbsp;</entry>
+	    <entry>integer</entry>
+	  </row><row><entry spanname="descr">This control turns the
+camera vertically at the specified speed. The unit is undefined. A
+positive value moves the camera up, a negative value down. A value of zero
+stops the motion if one is in progress and has no effect otherwise.</entry>
+	  </row>
+	  <row><entry></entry></row>
+
 	</tbody>
       </tgroup>
     </table>
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index f030d6a..4d050f9 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -796,6 +796,8 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_AUTO_FOCUS_STOP:		return "Auto Focus, Stop";
 	case V4L2_CID_AUTO_FOCUS_STATUS:	return "Auto Focus, Status";
 	case V4L2_CID_AUTO_FOCUS_RANGE:		return "Auto Focus, Range";
+	case V4L2_CID_PAN_SPEED:		return "Pan, Speed";
+	case V4L2_CID_TILT_SPEED:		return "Tilt, Speed";
 
 	/* FM Radio Modulator controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index e946e43..4de238b 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -746,6 +746,8 @@ enum v4l2_auto_focus_range {
 	V4L2_AUTO_FOCUS_RANGE_INFINITY		= 3,
 };
 
+#define V4L2_CID_PAN_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+32)
+#define V4L2_CID_TILT_SPEED			(V4L2_CID_CAMERA_CLASS_BASE+33)
 
 /* FM Modulator class control IDs */
 
-- 
2.1.0.rc2.206.gedb03e5


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-10-06 20:41                         ` Vincent Palatin
@ 2014-10-06 21:05                           ` Vincent Palatin
  2014-10-07 16:36                             ` Laurent Pinchart
  0 siblings, 1 reply; 27+ messages in thread
From: Vincent Palatin @ 2014-10-06 21:05 UTC (permalink / raw)
  To: Hans de Goede, Pawel Osciak, Laurent Pinchart, linux-media
  Cc: linux-kernel, Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab,
	Vincent Palatin

Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
CT_PANTILT_RELATIVE_CONTROL terminal control request.

Tested by plugging a Logitech ConferenceCam C3000e USB camera
and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
Verified that it can pan and tilt at the same time in both directions.

Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
Reviewed-by: Pawel Osciak <posciak@chromium.org>
---
Changes from v1/v2:
- rebased
Changes from v3:
- removed gerrit-id
Chnages from v4:
- switched "offset" to unsigned int

 drivers/media/usb/uvc/uvc_ctrl.c | 58 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index 0eb82106..d2d1755 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
 		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
 		.index		= 12,
 		.size		= 4,
-		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
-				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
-				| UVC_CTRL_FLAG_GET_DEF
+		.flags		= UVC_CTRL_FLAG_SET_CUR
+				| UVC_CTRL_FLAG_GET_RANGE
 				| UVC_CTRL_FLAG_AUTO_UPDATE,
 	},
 	{
@@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
 	data[2] = min((int)abs(value), 0xff);
 }
 
+static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
+	__u8 query, const __u8 *data)
+{
+	unsigned int first = mapping->offset / 8;
+	__s8 rel = (__s8)data[first];
+
+	switch (query) {
+	case UVC_GET_CUR:
+		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
+						 : -data[first+1]);
+	case UVC_GET_MIN:
+		return -data[first+1];
+	case UVC_GET_MAX:
+	case UVC_GET_RES:
+	case UVC_GET_DEF:
+	default:
+		return data[first+1];
+	}
+}
+
+static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
+	__s32 value, __u8 *data)
+{
+	unsigned int first = mapping->offset / 8;
+
+	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
+	data[first+1] = min_t(int, abs(value), 0xff);
+}
+
 static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 	{
 		.id		= V4L2_CID_BRIGHTNESS,
@@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] = {
 		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
 	},
 	{
+		.id		= V4L2_CID_PAN_SPEED,
+		.name		= "Pan (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 0,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
+		.id		= V4L2_CID_TILT_SPEED,
+		.name		= "Tilt (Speed)",
+		.entity		= UVC_GUID_UVC_CAMERA,
+		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
+		.size		= 16,
+		.offset		= 16,
+		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
+		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
+		.get		= uvc_ctrl_get_rel_speed,
+		.set		= uvc_ctrl_set_rel_speed,
+	},
+	{
 		.id		= V4L2_CID_PRIVACY,
 		.name		= "Privacy",
 		.entity		= UVC_GUID_UVC_CAMERA,
-- 
2.1.0.rc2.206.gedb03e5


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-10-06 21:05                           ` [PATCH v5 " Vincent Palatin
@ 2014-10-07 16:36                             ` Laurent Pinchart
  2014-10-07 16:41                               ` Vincent Palatin
  0 siblings, 1 reply; 27+ messages in thread
From: Laurent Pinchart @ 2014-10-07 16:36 UTC (permalink / raw)
  To: Vincent Palatin
  Cc: Hans de Goede, Pawel Osciak, linux-media, linux-kernel,
	Olof Johansson, Zach Kuznia, Mauro Carvalho Chehab

Hi Vincent,

Thank you for the patch. Mauro has already merged this in his tree, it should 
appear in v3.18-rc1.

On Monday 06 October 2014 14:05:59 Vincent Palatin wrote:
> Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> CT_PANTILT_RELATIVE_CONTROL terminal control request.
> 
> Tested by plugging a Logitech ConferenceCam C3000e USB camera
> and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> Verified that it can pan and tilt at the same time in both directions.
> 
> Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> Reviewed-by: Pawel Osciak <posciak@chromium.org>
> ---
> Changes from v1/v2:
> - rebased
> Changes from v3:
> - removed gerrit-id
> Chnages from v4:
> - switched "offset" to unsigned int
> 
>  drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++---
>  1 file changed, 55 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
> b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d2d1755 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
>  		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
>  		.index		= 12,
>  		.size		= 4,
> -		.flags		= UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> -				| UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> -				| UVC_CTRL_FLAG_GET_DEF
> +		.flags		= UVC_CTRL_FLAG_SET_CUR
> +				| UVC_CTRL_FLAG_GET_RANGE
> 
>  				| UVC_CTRL_FLAG_AUTO_UPDATE,
> 
>  	},
>  	{
> @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct
> uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff);
>  }
> 
> +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> +	__u8 query, const __u8 *data)
> +{
> +	unsigned int first = mapping->offset / 8;
> +	__s8 rel = (__s8)data[first];
> +
> +	switch (query) {
> +	case UVC_GET_CUR:
> +		return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> +						 : -data[first+1]);
> +	case UVC_GET_MIN:
> +		return -data[first+1];
> +	case UVC_GET_MAX:
> +	case UVC_GET_RES:
> +	case UVC_GET_DEF:
> +	default:
> +		return data[first+1];
> +	}
> +}
> +
> +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> +	__s32 value, __u8 *data)
> +{
> +	unsigned int first = mapping->offset / 8;
> +
> +	data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> +	data[first+1] = min_t(int, abs(value), 0xff);
> +}
> +
>  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
>  	{
>  		.id		= V4L2_CID_BRIGHTNESS,
> @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] =
> { .data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
>  	},
>  	{
> +		.id		= V4L2_CID_PAN_SPEED,
> +		.name		= "Pan (Speed)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 0,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
> +		.id		= V4L2_CID_TILT_SPEED,
> +		.name		= "Tilt (Speed)",
> +		.entity		= UVC_GUID_UVC_CAMERA,
> +		.selector	= UVC_CT_PANTILT_RELATIVE_CONTROL,
> +		.size		= 16,
> +		.offset		= 16,
> +		.v4l2_type	= V4L2_CTRL_TYPE_INTEGER,
> +		.data_type	= UVC_CTRL_DATA_TYPE_SIGNED,
> +		.get		= uvc_ctrl_get_rel_speed,
> +		.set		= uvc_ctrl_set_rel_speed,
> +	},
> +	{
>  		.id		= V4L2_CID_PRIVACY,
>  		.name		= "Privacy",
>  		.entity		= UVC_GUID_UVC_CAMERA,

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v5 2/2] V4L: uvcvideo: Add support for pan/tilt speed controls
  2014-10-07 16:36                             ` Laurent Pinchart
@ 2014-10-07 16:41                               ` Vincent Palatin
  0 siblings, 0 replies; 27+ messages in thread
From: Vincent Palatin @ 2014-10-07 16:41 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Hans de Goede, Pawel Osciak, linux-media, LKML, Olof Johansson,
	Zach Kuznia, Mauro Carvalho Chehab

On Tue, Oct 7, 2014 at 9:36 AM, Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Vincent,
>
> Thank you for the patch. Mauro has already merged this in his tree, it should
> appear in v3.18-rc1.
>

Great ! I missed the merge.

Thanks,
-- 
Vincent

>
> On Monday 06 October 2014 14:05:59 Vincent Palatin wrote:
> > Map V4L2_CID_TILT_SPEED and V4L2_CID_PAN_SPEED to the standard UVC
> > CT_PANTILT_RELATIVE_CONTROL terminal control request.
> >
> > Tested by plugging a Logitech ConferenceCam C3000e USB camera
> > and controlling pan/tilt from the userspace using the VIDIOC_S_CTRL ioctl.
> > Verified that it can pan and tilt at the same time in both directions.
> >
> > Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
> > Reviewed-by: Pawel Osciak <posciak@chromium.org>
> > ---
> > Changes from v1/v2:
> > - rebased
> > Changes from v3:
> > - removed gerrit-id
> > Chnages from v4:
> > - switched "offset" to unsigned int
> >
> >  drivers/media/usb/uvc/uvc_ctrl.c | 58 ++++++++++++++++++++++++++++++++++---
> >  1 file changed, 55 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
> > b/drivers/media/usb/uvc/uvc_ctrl.c index 0eb82106..d2d1755 100644
> > --- a/drivers/media/usb/uvc/uvc_ctrl.c
> > +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> > @@ -309,9 +309,8 @@ static struct uvc_control_info uvc_ctrls[] = {
> >               .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> >               .index          = 12,
> >               .size           = 4,
> > -             .flags          = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_MIN
> > -                             | UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES
> > -                             | UVC_CTRL_FLAG_GET_DEF
> > +             .flags          = UVC_CTRL_FLAG_SET_CUR
> > +                             | UVC_CTRL_FLAG_GET_RANGE
> >
> >                               | UVC_CTRL_FLAG_AUTO_UPDATE,
> >
> >       },
> >       {
> > @@ -391,6 +390,35 @@ static void uvc_ctrl_set_zoom(struct
> > uvc_control_mapping *mapping, data[2] = min((int)abs(value), 0xff);
> >  }
> >
> > +static __s32 uvc_ctrl_get_rel_speed(struct uvc_control_mapping *mapping,
> > +     __u8 query, const __u8 *data)
> > +{
> > +     unsigned int first = mapping->offset / 8;
> > +     __s8 rel = (__s8)data[first];
> > +
> > +     switch (query) {
> > +     case UVC_GET_CUR:
> > +             return (rel == 0) ? 0 : (rel > 0 ? data[first+1]
> > +                                              : -data[first+1]);
> > +     case UVC_GET_MIN:
> > +             return -data[first+1];
> > +     case UVC_GET_MAX:
> > +     case UVC_GET_RES:
> > +     case UVC_GET_DEF:
> > +     default:
> > +             return data[first+1];
> > +     }
> > +}
> > +
> > +static void uvc_ctrl_set_rel_speed(struct uvc_control_mapping *mapping,
> > +     __s32 value, __u8 *data)
> > +{
> > +     unsigned int first = mapping->offset / 8;
> > +
> > +     data[first] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
> > +     data[first+1] = min_t(int, abs(value), 0xff);
> > +}
> > +
> >  static struct uvc_control_mapping uvc_ctrl_mappings[] = {
> >       {
> >               .id             = V4L2_CID_BRIGHTNESS,
> > @@ -677,6 +705,30 @@ static struct uvc_control_mapping uvc_ctrl_mappings[] =
> > { .data_type  = UVC_CTRL_DATA_TYPE_SIGNED,
> >       },
> >       {
> > +             .id             = V4L2_CID_PAN_SPEED,
> > +             .name           = "Pan (Speed)",
> > +             .entity         = UVC_GUID_UVC_CAMERA,
> > +             .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> > +             .size           = 16,
> > +             .offset         = 0,
> > +             .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> > +             .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> > +             .get            = uvc_ctrl_get_rel_speed,
> > +             .set            = uvc_ctrl_set_rel_speed,
> > +     },
> > +     {
> > +             .id             = V4L2_CID_TILT_SPEED,
> > +             .name           = "Tilt (Speed)",
> > +             .entity         = UVC_GUID_UVC_CAMERA,
> > +             .selector       = UVC_CT_PANTILT_RELATIVE_CONTROL,
> > +             .size           = 16,
> > +             .offset         = 16,
> > +             .v4l2_type      = V4L2_CTRL_TYPE_INTEGER,
> > +             .data_type      = UVC_CTRL_DATA_TYPE_SIGNED,
> > +             .get            = uvc_ctrl_get_rel_speed,
> > +             .set            = uvc_ctrl_set_rel_speed,
> > +     },
> > +     {
> >               .id             = V4L2_CID_PRIVACY,
> >               .name           = "Privacy",
> >               .entity         = UVC_GUID_UVC_CAMERA,
>
> --
> Regards,
>
> Laurent Pinchart
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2014-10-07 16:41 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-17  0:38 [PATCH] V4L: uvcvideo: Add support for relative pan/tilt controls Vincent Palatin
2014-06-17  6:12 ` Hans de Goede
2014-06-17 14:45   ` [PATCH v2] " Vincent Palatin
     [not found]     ` <CACHYQ-rSk6etrX8RXF4w7aA_LJ9nzGtfJMOjhBOg49BZ4gaWgw@mail.gmail.com>
2014-06-25  9:54       ` Laurent Pinchart
2014-07-08 23:28         ` Vincent Palatin
2014-07-08 23:49           ` [PATCH 1/2] [media] V4L: Add camera pan/tilt speed controls Vincent Palatin
2014-07-08 23:49             ` [PATCH 2/2] V4L: uvcvideo: Add support for " Vincent Palatin
2014-09-03  4:57               ` Pawel Osciak
2014-09-03 19:40                 ` [PATCH v3 " Vincent Palatin
2014-09-04  0:37                   ` Pawel Osciak
2014-09-04  0:47                     ` [PATCH v4 " Vincent Palatin
2014-09-04 20:29                       ` Laurent Pinchart
2014-10-06 20:41                         ` Vincent Palatin
2014-10-06 21:05                           ` [PATCH v5 " Vincent Palatin
2014-10-07 16:36                             ` Laurent Pinchart
2014-10-07 16:41                               ` Vincent Palatin
2014-09-04 20:35                       ` [PATCH v4 " Laurent Pinchart
2014-10-06 20:44                         ` Vincent Palatin
2014-07-31 17:22             ` [PATCH 1/2] [media] V4L: Add camera " Vincent Palatin
     [not found]             ` <CACHYQ-o0FWSSHRmNhQ+id2uvHHWqVzQXQpmu31_e4OmDeVd_CQ@mail.gmail.com>
2014-08-06 15:10               ` Vincent Palatin
2014-08-07  2:18                 ` Pawel Osciak
2014-08-08 16:41                   ` Vincent Palatin
2014-08-15 19:08                   ` [PATCH v2 " Vincent Palatin
2014-09-03  4:54                     ` Pawel Osciak
2014-09-03 19:35                       ` Vincent Palatin
2014-09-03 19:38                         ` [PATCH v3 " Vincent Palatin
2014-10-06 21:04                         ` [PATCH v5 " Vincent Palatin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).