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,
|
ControlTypeBool,
|
||||||
ControlTypeInteger32,
|
ControlTypeInteger32,
|
||||||
ControlTypeInteger64,
|
ControlTypeInteger64,
|
||||||
|
ControlTypeFloat,
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace details {
|
namespace details {
|
||||||
|
@ -52,6 +53,11 @@ struct control_type<int64_t> {
|
||||||
static constexpr ControlType value = ControlTypeInteger64;
|
static constexpr ControlType value = ControlTypeInteger64;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct control_type<float> {
|
||||||
|
static constexpr ControlType value = ControlTypeFloat;
|
||||||
|
};
|
||||||
|
|
||||||
template<typename T, std::size_t N>
|
template<typename T, std::size_t N>
|
||||||
struct control_type<Span<T, N>> : public control_type<std::remove_cv_t<T>> {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ControlTypeFloat: {
|
||||||
|
float data = value.get<float>();
|
||||||
|
buffer.write(&data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -337,6 +343,12 @@ ControlValue ControlSerializer::load<ControlValue>(ControlType type,
|
||||||
return ControlValue(value);
|
return ControlValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case ControlTypeFloat: {
|
||||||
|
float value;
|
||||||
|
b.read(&value);
|
||||||
|
return ControlValue(value);
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return ControlValue();
|
return ControlValue();
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,7 @@ static constexpr size_t ControlValueSize[] = {
|
||||||
[ControlTypeBool] = sizeof(bool),
|
[ControlTypeBool] = sizeof(bool),
|
||||||
[ControlTypeInteger32] = sizeof(int32_t),
|
[ControlTypeInteger32] = sizeof(int32_t),
|
||||||
[ControlTypeInteger64] = sizeof(int64_t),
|
[ControlTypeInteger64] = sizeof(int64_t),
|
||||||
|
[ControlTypeFloat] = sizeof(float),
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* namespace */
|
} /* namespace */
|
||||||
|
@ -70,6 +71,8 @@ static constexpr size_t ControlValueSize[] = {
|
||||||
* The control stores a 32-bit integer value
|
* The control stores a 32-bit integer value
|
||||||
* \var ControlTypeInteger64
|
* \var ControlTypeInteger64
|
||||||
* The control stores a 64-bit integer value
|
* 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);
|
str += std::to_string(*value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ControlTypeFloat: {
|
||||||
|
const float *value = reinterpret_cast<const float *>(data);
|
||||||
|
str += std::to_string(*value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ControlTypeNone:
|
case ControlTypeNone:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -374,9 +382,9 @@ void ControlValue::set(ControlType type, bool isArray, const void *data,
|
||||||
* instead of Control.
|
* instead of Control.
|
||||||
*
|
*
|
||||||
* Controls of any type can be defined through template specialisation, but
|
* Controls of any type can be defined through template specialisation, but
|
||||||
* libcamera only supports the bool, int32_t and int64_t types natively (this
|
* libcamera only supports the bool, int32_t, int64_t and float types natively
|
||||||
* includes types that are equivalent to the supported types, such as int and
|
* (this includes types that are equivalent to the supported types, such as int
|
||||||
* long int).
|
* and long int).
|
||||||
*
|
*
|
||||||
* Controls IDs shall be unique. While nothing prevents multiple instances of
|
* 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
|
* 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