[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: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
04d8b04e50
commit
dda4a4d5ea
|
@ -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,
|
||||||
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)
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
}
|
}
|
||||||
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;
|
||||||
|
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);
|
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,
|
||||||
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;
|
||||||
/** 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 {
|
||||||
__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 {
|
||||||
|
|
||||||
/* 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 */
|
||||||
|
|
Loading…
Reference in New Issue