mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-23 16:45:07 +03:00
libcamera: controls: Add support for float controls
Add support for float values in Control<> and ControlValue classes. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
abd96336ed
commit
8b12a161e0
3 changed files with 29 additions and 3 deletions
|
@ -24,6 +24,7 @@ enum ControlType {
|
|||
ControlTypeBool,
|
||||
ControlTypeInteger32,
|
||||
ControlTypeInteger64,
|
||||
ControlTypeFloat,
|
||||
};
|
||||
|
||||
namespace details {
|
||||
|
@ -52,6 +53,11 @@ struct control_type<int64_t> {
|
|||
static constexpr ControlType value = ControlTypeInteger64;
|
||||
};
|
||||
|
||||
template<>
|
||||
struct control_type<float> {
|
||||
static constexpr ControlType value = ControlTypeFloat;
|
||||
};
|
||||
|
||||
template<typename T, std::size_t N>
|
||||
struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
|
||||
};
|
||||
|
|
|
@ -165,6 +165,12 @@ void ControlSerializer::store(const ControlValue &value,
|
|||
break;
|
||||
}
|
||||
|
||||
case ControlTypeFloat: {
|
||||
float data = value.get<float>();
|
||||
buffer.write(&data);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -337,6 +343,12 @@ ControlValue ControlSerializer::load<ControlValue>(ControlType type,
|
|||
return ControlValue(value);
|
||||
}
|
||||
|
||||
case ControlTypeFloat: {
|
||||
float value;
|
||||
b.read(&value);
|
||||
return ControlValue(value);
|
||||
}
|
||||
|
||||
default:
|
||||
return ControlValue();
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ static constexpr size_t ControlValueSize[] = {
|
|||
[ControlTypeBool] = sizeof(bool),
|
||||
[ControlTypeInteger32] = sizeof(int32_t),
|
||||
[ControlTypeInteger64] = sizeof(int64_t),
|
||||
[ControlTypeFloat] = sizeof(float),
|
||||
};
|
||||
|
||||
} /* namespace */
|
||||
|
@ -70,6 +71,8 @@ static constexpr size_t ControlValueSize[] = {
|
|||
* The control stores a 32-bit integer value
|
||||
* \var ControlTypeInteger64
|
||||
* The control stores a 64-bit integer value
|
||||
* \var ControlTypeFloat
|
||||
* The control stores a 32-bit floating point value
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -205,6 +208,11 @@ std::string ControlValue::toString() const
|
|||
str += std::to_string(*value);
|
||||
break;
|
||||
}
|
||||
case ControlTypeFloat: {
|
||||
const float *value = reinterpret_cast<const float *>(data);
|
||||
str += std::to_string(*value);
|
||||
break;
|
||||
}
|
||||
case ControlTypeNone:
|
||||
break;
|
||||
}
|
||||
|
@ -374,9 +382,9 @@ void ControlValue::set(ControlType type, bool isArray, const void *data,
|
|||
* instead of Control.
|
||||
*
|
||||
* Controls of any type can be defined through template specialisation, but
|
||||
* libcamera only supports the bool, int32_t and int64_t types natively (this
|
||||
* includes types that are equivalent to the supported types, such as int and
|
||||
* long int).
|
||||
* libcamera only supports the bool, int32_t, int64_t and float types natively
|
||||
* (this includes types that are equivalent to the supported types, such as int
|
||||
* and long int).
|
||||
*
|
||||
* Controls IDs shall be unique. While nothing prevents multiple instances of
|
||||
* the Control class to be created with the same ID for the same object, doing
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue