libcamera: controls: Use explicit 32-bit integer types
Make the control API more explicit when dealing with integer controls by specifying the size. We already do so for 64-bit integers, using int64_t and ControlTypeInteger64, do the same for 32-bit integers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
224ef9776a
commit
dd37ef784e
7 changed files with 46 additions and 44 deletions
|
@ -21,7 +21,7 @@ class Camera;
|
||||||
enum ControlType {
|
enum ControlType {
|
||||||
ControlTypeNone,
|
ControlTypeNone,
|
||||||
ControlTypeBool,
|
ControlTypeBool,
|
||||||
ControlTypeInteger,
|
ControlTypeInteger32,
|
||||||
ControlTypeInteger64,
|
ControlTypeInteger64,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ class ControlValue
|
||||||
public:
|
public:
|
||||||
ControlValue();
|
ControlValue();
|
||||||
ControlValue(bool value);
|
ControlValue(bool value);
|
||||||
ControlValue(int value);
|
ControlValue(int32_t value);
|
||||||
ControlValue(int64_t value);
|
ControlValue(int64_t value);
|
||||||
|
|
||||||
ControlType type() const { return type_; };
|
ControlType type() const { return type_; };
|
||||||
|
@ -48,7 +48,7 @@ private:
|
||||||
|
|
||||||
union {
|
union {
|
||||||
bool bool_;
|
bool bool_;
|
||||||
int integer_;
|
int32_t integer32_;
|
||||||
int64_t integer64_;
|
int64_t integer64_;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,8 +31,8 @@ LOG_DEFINE_CATEGORY(Controls)
|
||||||
* Invalid type, for empty values
|
* Invalid type, for empty values
|
||||||
* \var ControlTypeBool
|
* \var ControlTypeBool
|
||||||
* The control stores a boolean value
|
* The control stores a boolean value
|
||||||
* \var ControlTypeInteger
|
* \var ControlTypeInteger32
|
||||||
* The control stores an 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
|
||||||
*/
|
*/
|
||||||
|
@ -63,8 +63,8 @@ ControlValue::ControlValue(bool value)
|
||||||
* \brief Construct an integer ControlValue
|
* \brief Construct an integer ControlValue
|
||||||
* \param[in] value Integer value to store
|
* \param[in] value Integer value to store
|
||||||
*/
|
*/
|
||||||
ControlValue::ControlValue(int value)
|
ControlValue::ControlValue(int32_t value)
|
||||||
: type_(ControlTypeInteger), integer_(value)
|
: type_(ControlTypeInteger32), integer32_(value)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,17 +115,17 @@ const bool &ControlValue::get<bool>() const
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
const int &ControlValue::get<int>() const
|
const int32_t &ControlValue::get<int32_t>() const
|
||||||
{
|
{
|
||||||
ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
|
ASSERT(type_ == ControlTypeInteger32 || type_ == ControlTypeInteger64);
|
||||||
|
|
||||||
return integer_;
|
return integer32_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
const int64_t &ControlValue::get<int64_t>() const
|
const int64_t &ControlValue::get<int64_t>() const
|
||||||
{
|
{
|
||||||
ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
|
ASSERT(type_ == ControlTypeInteger32 || type_ == ControlTypeInteger64);
|
||||||
|
|
||||||
return integer64_;
|
return integer64_;
|
||||||
}
|
}
|
||||||
|
@ -138,10 +138,10 @@ void ControlValue::set<bool>(const bool &value)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void ControlValue::set<int>(const int &value)
|
void ControlValue::set<int32_t>(const int32_t &value)
|
||||||
{
|
{
|
||||||
type_ = ControlTypeInteger;
|
type_ = ControlTypeInteger32;
|
||||||
integer_ = value;
|
integer32_ = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
@ -163,8 +163,8 @@ std::string ControlValue::toString() const
|
||||||
return "<None>";
|
return "<None>";
|
||||||
case ControlTypeBool:
|
case ControlTypeBool:
|
||||||
return bool_ ? "True" : "False";
|
return bool_ ? "True" : "False";
|
||||||
case ControlTypeInteger:
|
case ControlTypeInteger32:
|
||||||
return std::to_string(integer_);
|
return std::to_string(integer32_);
|
||||||
case ControlTypeInteger64:
|
case ControlTypeInteger64:
|
||||||
return std::to_string(integer64_);
|
return std::to_string(integer64_);
|
||||||
}
|
}
|
||||||
|
@ -186,35 +186,35 @@ std::string ControlValue::toString() const
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \var Brightness
|
* \var Brightness
|
||||||
* ControlType: Integer
|
* ControlType: Integer32
|
||||||
*
|
*
|
||||||
* Specify a fixed brightness parameter.
|
* Specify a fixed brightness parameter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \var Contrast
|
* \var Contrast
|
||||||
* ControlType: Integer
|
* ControlType: Integer32
|
||||||
*
|
*
|
||||||
* Specify a fixed contrast parameter.
|
* Specify a fixed contrast parameter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \var Saturation
|
* \var Saturation
|
||||||
* ControlType: Integer
|
* ControlType: Integer32
|
||||||
*
|
*
|
||||||
* Specify a fixed saturation parameter.
|
* Specify a fixed saturation parameter.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \var ManualExposure
|
* \var ManualExposure
|
||||||
* ControlType: Integer
|
* ControlType: Integer32
|
||||||
*
|
*
|
||||||
* Specify a fixed exposure time in milli-seconds
|
* Specify a fixed exposure time in milli-seconds
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \var ManualGain
|
* \var ManualGain
|
||||||
* ControlType: Integer
|
* ControlType: Integer32
|
||||||
*
|
*
|
||||||
* Specify a fixed gain parameter
|
* Specify a fixed gain parameter
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -235,24 +235,24 @@ int PipelineHandlerUVC::processControls(UVCCameraData *data, Request *request)
|
||||||
|
|
||||||
switch (ci->id()) {
|
switch (ci->id()) {
|
||||||
case Brightness:
|
case Brightness:
|
||||||
controls.add(V4L2_CID_BRIGHTNESS, value.get<int>());
|
controls.add(V4L2_CID_BRIGHTNESS, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Contrast:
|
case Contrast:
|
||||||
controls.add(V4L2_CID_CONTRAST, value.get<int>());
|
controls.add(V4L2_CID_CONTRAST, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Saturation:
|
case Saturation:
|
||||||
controls.add(V4L2_CID_SATURATION, value.get<int>());
|
controls.add(V4L2_CID_SATURATION, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ManualExposure:
|
case ManualExposure:
|
||||||
controls.add(V4L2_CID_EXPOSURE_AUTO, 1);
|
controls.add(V4L2_CID_EXPOSURE_AUTO, 1);
|
||||||
controls.add(V4L2_CID_EXPOSURE_ABSOLUTE, value.get<int>());
|
controls.add(V4L2_CID_EXPOSURE_ABSOLUTE, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ManualGain:
|
case ManualGain:
|
||||||
controls.add(V4L2_CID_GAIN, value.get<int>());
|
controls.add(V4L2_CID_GAIN, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -288,15 +288,15 @@ int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
|
||||||
|
|
||||||
switch (ci->id()) {
|
switch (ci->id()) {
|
||||||
case Brightness:
|
case Brightness:
|
||||||
controls.add(V4L2_CID_BRIGHTNESS, value.get<int>());
|
controls.add(V4L2_CID_BRIGHTNESS, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Contrast:
|
case Contrast:
|
||||||
controls.add(V4L2_CID_CONTRAST, value.get<int>());
|
controls.add(V4L2_CID_CONTRAST, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Saturation:
|
case Saturation:
|
||||||
controls.add(V4L2_CID_SATURATION, value.get<int>());
|
controls.add(V4L2_CID_SATURATION, value.get<int32_t>());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -26,13 +26,14 @@ protected:
|
||||||
ControlInfo info(Brightness);
|
ControlInfo info(Brightness);
|
||||||
|
|
||||||
if (info.id() != Brightness ||
|
if (info.id() != Brightness ||
|
||||||
info.type() != ControlTypeInteger ||
|
info.type() != ControlTypeInteger32 ||
|
||||||
info.name() != std::string("Brightness")) {
|
info.name() != std::string("Brightness")) {
|
||||||
cout << "Invalid control identification for Brightness" << endl;
|
cout << "Invalid control identification for Brightness" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info.min().get<int>() != 0 || info.max().get<int>() != 0) {
|
if (info.min().get<int32_t>() != 0 ||
|
||||||
|
info.max().get<int32_t>() != 0) {
|
||||||
cout << "Invalid control range for Brightness" << endl;
|
cout << "Invalid control range for Brightness" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -44,13 +45,14 @@ protected:
|
||||||
info = ControlInfo(Contrast, 10, 200);
|
info = ControlInfo(Contrast, 10, 200);
|
||||||
|
|
||||||
if (info.id() != Contrast ||
|
if (info.id() != Contrast ||
|
||||||
info.type() != ControlTypeInteger ||
|
info.type() != ControlTypeInteger32 ||
|
||||||
info.name() != std::string("Contrast")) {
|
info.name() != std::string("Contrast")) {
|
||||||
cout << "Invalid control identification for Contrast" << endl;
|
cout << "Invalid control identification for Contrast" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info.min().get<int>() != 10 || info.max().get<int>() != 200) {
|
if (info.min().get<int32_t>() != 10 ||
|
||||||
|
info.max().get<int32_t>() != 200) {
|
||||||
cout << "Invalid control range for Contrast" << endl;
|
cout << "Invalid control range for Contrast" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ protected:
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list[Brightness].get<int>() != 255) {
|
if (list[Brightness].get<int32_t>() != 255) {
|
||||||
cout << "Incorrest Brightness control value" << endl;
|
cout << "Incorrest Brightness control value" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -125,8 +125,8 @@ protected:
|
||||||
/*
|
/*
|
||||||
* Test control value retrieval and update through ControlInfo.
|
* Test control value retrieval and update through ControlInfo.
|
||||||
*/
|
*/
|
||||||
if (list[brightness].get<int>() != 64 ||
|
if (list[brightness].get<int32_t>() != 64 ||
|
||||||
list[contrast].get<int>() != 128) {
|
list[contrast].get<int32_t>() != 128) {
|
||||||
cout << "Failed to retrieve control value" << endl;
|
cout << "Failed to retrieve control value" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -134,8 +134,8 @@ protected:
|
||||||
list[brightness] = 10;
|
list[brightness] = 10;
|
||||||
list[contrast] = 20;
|
list[contrast] = 20;
|
||||||
|
|
||||||
if (list[brightness].get<int>() != 10 ||
|
if (list[brightness].get<int32_t>() != 10 ||
|
||||||
list[contrast].get<int>() != 20) {
|
list[contrast].get<int32_t>() != 20) {
|
||||||
cout << "Failed to update control value" << endl;
|
cout << "Failed to update control value" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -185,9 +185,9 @@ protected:
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newList[Brightness].get<int>() != 10 ||
|
if (newList[Brightness].get<int32_t>() != 10 ||
|
||||||
newList[Contrast].get<int>() != 20 ||
|
newList[Contrast].get<int32_t>() != 20 ||
|
||||||
newList[Saturation].get<int>() != 255) {
|
newList[Saturation].get<int32_t>() != 255) {
|
||||||
cout << "New list contains incorrect values" << endl;
|
cout << "New list contains incorrect values" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ protected:
|
||||||
<< " Bool: " << boolean.toString()
|
<< " Bool: " << boolean.toString()
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
if (integer.get<int>() != 1234) {
|
if (integer.get<int32_t>() != 1234) {
|
||||||
cerr << "Failed to get Integer" << endl;
|
cerr << "Failed to get Integer" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
@ -56,8 +56,8 @@ protected:
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
||||||
value.set<int>(10);
|
value.set<int32_t>(10);
|
||||||
if (value.get<int>() != 10) {
|
if (value.get<int32_t>() != 10) {
|
||||||
cerr << "Failed to get Integer" << endl;
|
cerr << "Failed to get Integer" << endl;
|
||||||
return TestFail;
|
return TestFail;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue