libcamera Control 体系解析
整体介绍
libcamera 的 control 体系是“定义(ControlId)+ 约束(ControlInfo)+ 值(ControlValue)+ 集合(ControlList)”
以key-value的形式呈现,和meta有一些区别:control更倾向于输入控制,meta更倾向于获取输出参数。
ControlValue
作用
存放control value
成员变量
- 值类型(value type)
- 值还是数组(is array)
- 元素数量(number element,如果是值则为1)
- 值,或者数组的地址(union of value and storage)
成员函数
- set():如果之前是数组,则先release();如果当前是数组,则新new
- release():如果是数组则释放
- data():以Span类型获取value信息
ControlId
作用
- 存放control id相关信息
- 有一个衍生类:class Control : public ControlId
成员变量
- id:一个整型的值,真正意义上的control id
- name
- ControlType type: bool, u32, float, string...
- DirectionFlags direction: in/out
ControlInfo
作用
描述ControlValue的约束,用于:
- 验证控制值是否合法
- 向上层告知控制项的取值范围
- 表示枚举型控制的可选值
成员变量
- ControlValue min
- ControlValue max
- ControlValue def:min/max/def用于控制数值范围
- vector
values:用于枚举控制的可选值列表
ControlIdMap
- 定义:unordered_map<unsigned int, const ControlId *>
- 描述某个整型(key)与ControlId的映射。
- id === controlId.id()
ControlInfoMap
作用
class ControlInfoMap : private std::unordered_map<const ControlId *, ControlInfo>
- 首先,它是一个unordered_map,是ControlId对ControlInfo的映射,这是它的本质作用
- 重载unordered_map的find,at等,让用户可以通过int id查询某组映射
成员变量
- ControlIdMap *idmap_
成员函数
- validate():验证 map 中的每个 ControlId 是否在 idmap 中,且类型匹配
ControlList
作用
- 用于存放所有的control value
- 它的核心成员是ControlListMap,也就是用map存储这些control
- 它提供了针对control的基本操作,比如增(set)清(clear,清空所有control list)查(get)改(set)
成员变量
- ControlIdMap *idmap
- ControlInfoMap *infoMap
- ControlListMap controls:using ControlListMap = std::unordered_map<unsigned int, ControlValue>
成员函数
- set
- get
- clear
- merge
- 其他
本文来自博客园,作者:moonのsun,转载请注明原文链接:https://www.cnblogs.com/moon-sun-blog/p/19867373

浙公网安备 33010602011771号