Re: [PATCH v1 17/19] uvcvideo: Add UVC 1.5 Encoding Unit controls.
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.
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, +