Commit dda4a4d5 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] v4l2-ctrls/videodev2.h: add u8 and u16 types

These are needed by the upcoming patches for the motion detection
matrices.
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 04d8b04e
...@@ -1174,6 +1174,10 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx, ...@@ -1174,6 +1174,10 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx,
return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx); return !strcmp(ptr1.p_char + idx, ptr2.p_char + idx);
case V4L2_CTRL_TYPE_INTEGER64: case V4L2_CTRL_TYPE_INTEGER64:
return ptr1.p_s64[idx] == ptr2.p_s64[idx]; return ptr1.p_s64[idx] == ptr2.p_s64[idx];
case V4L2_CTRL_TYPE_U8:
return ptr1.p_u8[idx] == ptr2.p_u8[idx];
case V4L2_CTRL_TYPE_U16:
return ptr1.p_u16[idx] == ptr2.p_u16[idx];
default: default:
if (ctrl->is_int) if (ctrl->is_int)
return ptr1.p_s32[idx] == ptr2.p_s32[idx]; return ptr1.p_s32[idx] == ptr2.p_s32[idx];
...@@ -1201,6 +1205,12 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx, ...@@ -1201,6 +1205,12 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,
case V4L2_CTRL_TYPE_BOOLEAN: case V4L2_CTRL_TYPE_BOOLEAN:
ptr.p_s32[idx] = ctrl->default_value; ptr.p_s32[idx] = ctrl->default_value;
break; break;
case V4L2_CTRL_TYPE_U8:
ptr.p_u8[idx] = ctrl->default_value;
break;
case V4L2_CTRL_TYPE_U16:
ptr.p_u16[idx] = ctrl->default_value;
break;
default: default:
idx *= ctrl->elem_size; idx *= ctrl->elem_size;
memset(ptr.p + idx, 0, ctrl->elem_size); memset(ptr.p + idx, 0, ctrl->elem_size);
...@@ -1242,6 +1252,12 @@ static void std_log(const struct v4l2_ctrl *ctrl) ...@@ -1242,6 +1252,12 @@ static void std_log(const struct v4l2_ctrl *ctrl)
case V4L2_CTRL_TYPE_STRING: case V4L2_CTRL_TYPE_STRING:
pr_cont("%s", ptr.p_char); pr_cont("%s", ptr.p_char);
break; break;
case V4L2_CTRL_TYPE_U8:
pr_cont("%u", (unsigned)*ptr.p_u8);
break;
case V4L2_CTRL_TYPE_U16:
pr_cont("%u", (unsigned)*ptr.p_u16);
break;
default: default:
pr_cont("unknown type %d", ctrl->type); pr_cont("unknown type %d", ctrl->type);
break; break;
...@@ -1272,6 +1288,10 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx, ...@@ -1272,6 +1288,10 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl); return ROUND_TO_RANGE(ptr.p_s32[idx], u32, ctrl);
case V4L2_CTRL_TYPE_INTEGER64: case V4L2_CTRL_TYPE_INTEGER64:
return ROUND_TO_RANGE(ptr.p_s64[idx], u64, ctrl); return ROUND_TO_RANGE(ptr.p_s64[idx], u64, ctrl);
case V4L2_CTRL_TYPE_U8:
return ROUND_TO_RANGE(ptr.p_u8[idx], u8, ctrl);
case V4L2_CTRL_TYPE_U16:
return ROUND_TO_RANGE(ptr.p_u16[idx], u16, ctrl);
case V4L2_CTRL_TYPE_BOOLEAN: case V4L2_CTRL_TYPE_BOOLEAN:
ptr.p_s32[idx] = !!ptr.p_s32[idx]; ptr.p_s32[idx] = !!ptr.p_s32[idx];
...@@ -1502,6 +1522,8 @@ static int check_range(enum v4l2_ctrl_type type, ...@@ -1502,6 +1522,8 @@ static int check_range(enum v4l2_ctrl_type type,
if (step != 1 || max > 1 || min < 0) if (step != 1 || max > 1 || min < 0)
return -ERANGE; return -ERANGE;
/* fall through */ /* fall through */
case V4L2_CTRL_TYPE_U8:
case V4L2_CTRL_TYPE_U16:
case V4L2_CTRL_TYPE_INTEGER: case V4L2_CTRL_TYPE_INTEGER:
case V4L2_CTRL_TYPE_INTEGER64: case V4L2_CTRL_TYPE_INTEGER64:
if (step == 0 || min > max || def < min || def > max) if (step == 0 || min > max || def < min || def > max)
...@@ -1803,12 +1825,25 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl, ...@@ -1803,12 +1825,25 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
} }
is_array = nr_of_dims > 0; is_array = nr_of_dims > 0;
if (type == V4L2_CTRL_TYPE_INTEGER64) /* Prefill elem_size for all types handled by std_type_ops */
switch (type) {
case V4L2_CTRL_TYPE_INTEGER64:
elem_size = sizeof(s64); elem_size = sizeof(s64);
else if (type == V4L2_CTRL_TYPE_STRING) break;
case V4L2_CTRL_TYPE_STRING:
elem_size = max + 1; elem_size = max + 1;
else if (type < V4L2_CTRL_COMPOUND_TYPES) break;
elem_size = sizeof(s32); case V4L2_CTRL_TYPE_U8:
elem_size = sizeof(u8);
break;
case V4L2_CTRL_TYPE_U16:
elem_size = sizeof(u16);
break;
default:
if (type < V4L2_CTRL_COMPOUND_TYPES)
elem_size = sizeof(s32);
break;
}
tot_ctrl_size = elem_size * elems; tot_ctrl_size = elem_size * elems;
/* Sanity checks */ /* Sanity checks */
...@@ -3148,6 +3183,8 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl, ...@@ -3148,6 +3183,8 @@ int v4l2_ctrl_modify_range(struct v4l2_ctrl *ctrl,
case V4L2_CTRL_TYPE_MENU: case V4L2_CTRL_TYPE_MENU:
case V4L2_CTRL_TYPE_INTEGER_MENU: case V4L2_CTRL_TYPE_INTEGER_MENU:
case V4L2_CTRL_TYPE_BITMASK: case V4L2_CTRL_TYPE_BITMASK:
case V4L2_CTRL_TYPE_U8:
case V4L2_CTRL_TYPE_U16:
if (ctrl->is_array) if (ctrl->is_array)
return -EINVAL; return -EINVAL;
ret = check_range(ctrl->type, min, max, step, def); ret = check_range(ctrl->type, min, max, step, def);
......
...@@ -39,12 +39,16 @@ struct poll_table_struct; ...@@ -39,12 +39,16 @@ struct poll_table_struct;
/** union v4l2_ctrl_ptr - A pointer to a control value. /** union v4l2_ctrl_ptr - A pointer to a control value.
* @p_s32: Pointer to a 32-bit signed value. * @p_s32: Pointer to a 32-bit signed value.
* @p_s64: Pointer to a 64-bit signed value. * @p_s64: Pointer to a 64-bit signed value.
* @p_u8: Pointer to a 8-bit unsigned value.
* @p_u16: Pointer to a 16-bit unsigned value.
* @p_char: Pointer to a string. * @p_char: Pointer to a string.
* @p: Pointer to a compound value. * @p: Pointer to a compound value.
*/ */
union v4l2_ctrl_ptr { union v4l2_ctrl_ptr {
s32 *p_s32; s32 *p_s32;
s64 *p_s64; s64 *p_s64;
u8 *p_u8;
u16 *p_u16;
char *p_char; char *p_char;
void *p; void *p;
}; };
......
...@@ -1254,6 +1254,8 @@ struct v4l2_ext_control { ...@@ -1254,6 +1254,8 @@ struct v4l2_ext_control {
__s32 value; __s32 value;
__s64 value64; __s64 value64;
char *string; char *string;
__u8 *p_u8;
__u16 *p_u16;
void *ptr; void *ptr;
}; };
} __attribute__ ((packed)); } __attribute__ ((packed));
...@@ -1284,6 +1286,8 @@ enum v4l2_ctrl_type { ...@@ -1284,6 +1286,8 @@ enum v4l2_ctrl_type {
/* Compound types are >= 0x0100 */ /* Compound types are >= 0x0100 */
V4L2_CTRL_COMPOUND_TYPES = 0x0100, V4L2_CTRL_COMPOUND_TYPES = 0x0100,
V4L2_CTRL_TYPE_U8 = 0x0100,
V4L2_CTRL_TYPE_U16 = 0x0101,
}; };
/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment