libcamera: v4l2_device: Support reading U8 array controls
Add support to retrieve the value of array controls of type V4L2_CTRL_TYPE_U8. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
0aa8e09775
commit
3786b6c84b
1 changed files with 26 additions and 1 deletions
|
@ -176,7 +176,7 @@ int V4L2Device::getControls(ControlList *ctrls)
|
||||||
memset(v4l2Ctrls, 0, sizeof(v4l2Ctrls));
|
memset(v4l2Ctrls, 0, sizeof(v4l2Ctrls));
|
||||||
|
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
for (const auto &ctrl : *ctrls) {
|
for (auto &ctrl : *ctrls) {
|
||||||
unsigned int id = ctrl.first;
|
unsigned int id = ctrl.first;
|
||||||
const auto iter = controls_.find(id);
|
const auto iter = controls_.find(id);
|
||||||
if (iter == controls_.end()) {
|
if (iter == controls_.end()) {
|
||||||
|
@ -185,6 +185,31 @@ int V4L2Device::getControls(ControlList *ctrls)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct v4l2_query_ext_ctrl &info = controlInfo_[id];
|
||||||
|
ControlValue &value = ctrl.second;
|
||||||
|
|
||||||
|
if (info.flags & V4L2_CTRL_FLAG_HAS_PAYLOAD) {
|
||||||
|
ControlType type;
|
||||||
|
|
||||||
|
switch (info.type) {
|
||||||
|
case V4L2_CTRL_TYPE_U8:
|
||||||
|
type = ControlTypeByte;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
LOG(V4L2, Error)
|
||||||
|
<< "Unsupported payload control type "
|
||||||
|
<< info.type;
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
value.reserve(type, true, info.elems);
|
||||||
|
Span<uint8_t> data = value.data();
|
||||||
|
|
||||||
|
v4l2Ctrls[i].p_u8 = data.data();
|
||||||
|
v4l2Ctrls[i].size = data.size();
|
||||||
|
}
|
||||||
|
|
||||||
v4l2Ctrls[i].id = id;
|
v4l2Ctrls[i].id = id;
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue