Re: [PATCH v1 17/19] uvcvideo: Add UVC 1.5 Encoding Unit controls.

2013-11-10 Thread Laurent Pinchart
Hi Pawel,

Thank you for the patch.

On Friday 30 August 2013 11:17:16 Pawel Osciak wrote:
 These controls allow modifying encoding parameters.
 
 Signed-off-by: Pawel Osciak posc...@chromium.org
 ---
  drivers/media/usb/uvc/uvc_ctrl.c | 445 
  include/uapi/linux/usb/video.h   |  23 ++
  2 files changed, 468 insertions(+)
 
 diff --git a/drivers/media/usb/uvc/uvc_ctrl.c
 b/drivers/media/usb/uvc/uvc_ctrl.c index a0493d6..cd02c99 100644
 --- a/drivers/media/usb/uvc/uvc_ctrl.c
 +++ b/drivers/media/usb/uvc/uvc_ctrl.c
 @@ -351,6 +351,167 @@ static struct uvc_control_info uvc_ctrls[] = {
 
   | UVC_CTRL_FLAG_RESTORE
   | UVC_CTRL_FLAG_AUTO_UPDATE,
 
   },
 + /*
 +  * All EU controls are marked as AUTO_UPDATE, because many are, and also
 +  * we can't cache all of them as they are stream/layer dependent, which
 +  * would be too slow/too much to cache.
 +  */
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_PROFILE_TOOLSET_CONTROL,
 + .index  = 1,
 + .size   = 6,

Doesn't UVC 1.5 document this control size as 5 bytes ?

 + .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
 + | UVC_CTRL_FLAG_GET_DEF
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_MIN_FRAME_INTERVAL_CONTROL,
 + .index  = 3,
 + .size   = 4,
 + .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
 + | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
 + | UVC_CTRL_FLAG_GET_DEF
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_SLICE_MODE_CONTROL,
 + .index  = 4,
 + .size   = 4,
 + .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
 + | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
 + | UVC_CTRL_FLAG_GET_DEF
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_RATE_CONTROL_MODE_CONTROL,
 + .index  = 5,
 + .size   = 1,
 + .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
 + | UVC_CTRL_FLAG_GET_DEF
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_AVERAGE_BITRATE_CONTROL,
 + .index  = 6,
 + .size   = 4,
 + .flags  = UVC_CTRL_FLAG_SET_CUR
 + | UVC_CTRL_FLAG_GET_RANGE
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_CPB_SIZE_CONTROL,
 + .index  = 7,
 + .size   = 4,
 + .flags  = UVC_CTRL_FLAG_SET_CUR
 + | UVC_CTRL_FLAG_GET_RANGE
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_PEAK_BIT_RATE_CONTROL,
 + .index  = 8,
 + .size   = 4,
 + .flags  = UVC_CTRL_FLAG_SET_CUR
 + | UVC_CTRL_FLAG_GET_RANGE
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_QUANTIZATION_PARAMS_CONTROL,
 + .index  = 9,
 + .size   = 6,
 + .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
 + | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
 + | UVC_CTRL_FLAG_GET_DEF
 + | UVC_CTRL_FLAG_AUTO_UPDATE,

According to the spec this one supports GET_RES as well, so you can use 
GET_RANGE.

 + },
 + {
 + .entity = UVC_GUID_UVC_ENCODING,
 + .selector   = UVC_EU_SYNC_REF_FRAME_CONTROL,
 + .index  = 10,
 + .size   = 4,
 + .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
 + | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
 + | UVC_CTRL_FLAG_AUTO_UPDATE,
 + },
 + {
 + 

[PATCH v1 17/19] uvcvideo: Add UVC 1.5 Encoding Unit controls.

2013-08-29 Thread Pawel Osciak
These controls allow modifying encoding parameters.

Signed-off-by: Pawel Osciak posc...@chromium.org
---
 drivers/media/usb/uvc/uvc_ctrl.c | 445 +++
 include/uapi/linux/usb/video.h   |  23 ++
 2 files changed, 468 insertions(+)

diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index a0493d6..cd02c99 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -351,6 +351,167 @@ static struct uvc_control_info uvc_ctrls[] = {
| UVC_CTRL_FLAG_RESTORE
| UVC_CTRL_FLAG_AUTO_UPDATE,
},
+   /*
+* All EU controls are marked as AUTO_UPDATE, because many are, and also
+* we can't cache all of them as they are stream/layer dependent, which
+* would be too slow/too much to cache.
+*/
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_PROFILE_TOOLSET_CONTROL,
+   .index  = 1,
+   .size   = 6,
+   .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
+   | UVC_CTRL_FLAG_GET_DEF
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_MIN_FRAME_INTERVAL_CONTROL,
+   .index  = 3,
+   .size   = 4,
+   .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
+   | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
+   | UVC_CTRL_FLAG_GET_DEF
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_SLICE_MODE_CONTROL,
+   .index  = 4,
+   .size   = 4,
+   .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
+   | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
+   | UVC_CTRL_FLAG_GET_DEF
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_RATE_CONTROL_MODE_CONTROL,
+   .index  = 5,
+   .size   = 1,
+   .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
+   | UVC_CTRL_FLAG_GET_DEF
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_AVERAGE_BITRATE_CONTROL,
+   .index  = 6,
+   .size   = 4,
+   .flags  = UVC_CTRL_FLAG_SET_CUR
+   | UVC_CTRL_FLAG_GET_RANGE
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_CPB_SIZE_CONTROL,
+   .index  = 7,
+   .size   = 4,
+   .flags  = UVC_CTRL_FLAG_SET_CUR
+   | UVC_CTRL_FLAG_GET_RANGE
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_PEAK_BIT_RATE_CONTROL,
+   .index  = 8,
+   .size   = 4,
+   .flags  = UVC_CTRL_FLAG_SET_CUR
+   | UVC_CTRL_FLAG_GET_RANGE
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_QUANTIZATION_PARAMS_CONTROL,
+   .index  = 9,
+   .size   = 6,
+   .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
+   | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
+   | UVC_CTRL_FLAG_GET_DEF
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_SYNC_REF_FRAME_CONTROL,
+   .index  = 10,
+   .size   = 4,
+   .flags  = UVC_CTRL_FLAG_SET_CUR | UVC_CTRL_FLAG_GET_CUR
+   | UVC_CTRL_FLAG_GET_MIN | UVC_CTRL_FLAG_GET_MAX
+   | UVC_CTRL_FLAG_AUTO_UPDATE,
+   },
+   {
+   .entity = UVC_GUID_UVC_ENCODING,
+   .selector   = UVC_EU_LTR_BUFFER_CONTROL,
+   .index  = 11,
+