summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-28 00:27:33 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-04 19:33:08 +0300
commitdd37ef784e7b4a8125225177bf74eef04b8efd83 (patch)
treeb270db2787d69e3139d22787b4650c543c753dc2
parent224ef9776ac5be51f984780c761713027f2c6102 (diff)
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>
-rw-r--r--include/libcamera/controls.h6
-rw-r--r--src/libcamera/controls.cpp36
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp10
-rw-r--r--src/libcamera/pipeline/vimc.cpp6
-rw-r--r--test/controls/control_info.cpp10
-rw-r--r--test/controls/control_list.cpp16
-rw-r--r--test/controls/control_value.cpp6
7 files changed, 46 insertions, 44 deletions
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 0886370f..a3089064 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -21,7 +21,7 @@ class Camera;
enum ControlType {
ControlTypeNone,
ControlTypeBool,
- ControlTypeInteger,
+ ControlTypeInteger32,
ControlTypeInteger64,
};
@@ -30,7 +30,7 @@ class ControlValue
public:
ControlValue();
ControlValue(bool value);
- ControlValue(int value);
+ ControlValue(int32_t value);
ControlValue(int64_t value);
ControlType type() const { return type_; };
@@ -48,7 +48,7 @@ private:
union {
bool bool_;
- int integer_;
+ int32_t integer32_;
int64_t integer64_;
};
};
diff --git a/src/libcamera/controls.cpp b/src/libcamera/controls.cpp
index 88aab88d..295ccd55 100644
--- a/src/libcamera/controls.cpp
+++ b/src/libcamera/controls.cpp
@@ -31,8 +31,8 @@ LOG_DEFINE_CATEGORY(Controls)
* Invalid type, for empty values
* \var ControlTypeBool
* The control stores a boolean value
- * \var ControlTypeInteger
- * The control stores an integer value
+ * \var ControlTypeInteger32
+ * The control stores a 32-bit integer value
* \var ControlTypeInteger64
* The control stores a 64-bit integer value
*/
@@ -63,8 +63,8 @@ ControlValue::ControlValue(bool value)
* \brief Construct an integer ControlValue
* \param[in] value Integer value to store
*/
-ControlValue::ControlValue(int value)
- : type_(ControlTypeInteger), integer_(value)
+ControlValue::ControlValue(int32_t value)
+ : type_(ControlTypeInteger32), integer32_(value)
{
}
@@ -115,17 +115,17 @@ const bool &ControlValue::get<bool>() const
}
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<>
const int64_t &ControlValue::get<int64_t>() const
{
- ASSERT(type_ == ControlTypeInteger || type_ == ControlTypeInteger64);
+ ASSERT(type_ == ControlTypeInteger32 || type_ == ControlTypeInteger64);
return integer64_;
}
@@ -138,10 +138,10 @@ void ControlValue::set<bool>(const bool &value)
}
template<>
-void ControlValue::set<int>(const int &value)
+void ControlValue::set<int32_t>(const int32_t &value)
{
- type_ = ControlTypeInteger;
- integer_ = value;
+ type_ = ControlTypeInteger32;
+ integer32_ = value;
}
template<>
@@ -163,8 +163,8 @@ std::string ControlValue::toString() const
return "<None>";
case ControlTypeBool:
return bool_ ? "True" : "False";
- case ControlTypeInteger:
- return std::to_string(integer_);
+ case ControlTypeInteger32:
+ return std::to_string(integer32_);
case ControlTypeInteger64:
return std::to_string(integer64_);
}
@@ -186,35 +186,35 @@ std::string ControlValue::toString() const
/**
* \var Brightness
- * ControlType: Integer
+ * ControlType: Integer32
*
* Specify a fixed brightness parameter.
*/
/**
* \var Contrast
- * ControlType: Integer
+ * ControlType: Integer32
*
* Specify a fixed contrast parameter.
*/
/**
* \var Saturation
- * ControlType: Integer
+ * ControlType: Integer32
*
* Specify a fixed saturation parameter.
*/
/**
* \var ManualExposure
- * ControlType: Integer
+ * ControlType: Integer32
*
* Specify a fixed exposure time in milli-seconds
*/
/**
* \var ManualGain
- * ControlType: Integer
+ * ControlType: Integer32
*
* Specify a fixed gain parameter
*/
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 81c548af..0d56758e 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -235,24 +235,24 @@ int PipelineHandlerUVC::processControls(UVCCameraData *data, Request *request)
switch (ci->id()) {
case Brightness:
- controls.add(V4L2_CID_BRIGHTNESS, value.get<int>());
+ controls.add(V4L2_CID_BRIGHTNESS, value.get<int32_t>());
break;
case Contrast:
- controls.add(V4L2_CID_CONTRAST, value.get<int>());
+ controls.add(V4L2_CID_CONTRAST, value.get<int32_t>());
break;
case Saturation:
- controls.add(V4L2_CID_SATURATION, value.get<int>());
+ controls.add(V4L2_CID_SATURATION, value.get<int32_t>());
break;
case ManualExposure:
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;
case ManualGain:
- controls.add(V4L2_CID_GAIN, value.get<int>());
+ controls.add(V4L2_CID_GAIN, value.get<int32_t>());
break;
default:
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 3e34e7a0..e549dc64 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -288,15 +288,15 @@ int PipelineHandlerVimc::processControls(VimcCameraData *data, Request *request)
switch (ci->id()) {
case Brightness:
- controls.add(V4L2_CID_BRIGHTNESS, value.get<int>());
+ controls.add(V4L2_CID_BRIGHTNESS, value.get<int32_t>());
break;
case Contrast:
- controls.add(V4L2_CID_CONTRAST, value.get<int>());
+ controls.add(V4L2_CID_CONTRAST, value.get<int32_t>());
break;
case Saturation:
- controls.add(V4L2_CID_SATURATION, value.get<int>());
+ controls.add(V4L2_CID_SATURATION, value.get<int32_t>());
break;
default:
diff --git a/test/controls/control_info.cpp b/test/controls/control_info.cpp
index faefaaa4..2aba568a 100644
--- a/test/controls/control_info.cpp
+++ b/test/controls/control_info.cpp
@@ -26,13 +26,14 @@ protected:
ControlInfo info(Brightness);
if (info.id() != Brightness ||
- info.type() != ControlTypeInteger ||
+ info.type() != ControlTypeInteger32 ||
info.name() != std::string("Brightness")) {
cout << "Invalid control identification for Brightness" << endl;
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;
return TestFail;
}
@@ -44,13 +45,14 @@ protected:
info = ControlInfo(Contrast, 10, 200);
if (info.id() != Contrast ||
- info.type() != ControlTypeInteger ||
+ info.type() != ControlTypeInteger32 ||
info.name() != std::string("Contrast")) {
cout << "Invalid control identification for Contrast" << endl;
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;
return TestFail;
}
diff --git a/test/controls/control_list.cpp b/test/controls/control_list.cpp
index 0402e7c2..5215840b 100644
--- a/test/controls/control_list.cpp
+++ b/test/controls/control_list.cpp
@@ -96,7 +96,7 @@ protected:
return TestFail;
}
- if (list[Brightness].get<int>() != 255) {
+ if (list[Brightness].get<int32_t>() != 255) {
cout << "Incorrest Brightness control value" << endl;
return TestFail;
}
@@ -125,8 +125,8 @@ protected:
/*
* Test control value retrieval and update through ControlInfo.
*/
- if (list[brightness].get<int>() != 64 ||
- list[contrast].get<int>() != 128) {
+ if (list[brightness].get<int32_t>() != 64 ||
+ list[contrast].get<int32_t>() != 128) {
cout << "Failed to retrieve control value" << endl;
return TestFail;
}
@@ -134,8 +134,8 @@ protected:
list[brightness] = 10;
list[contrast] = 20;
- if (list[brightness].get<int>() != 10 ||
- list[contrast].get<int>() != 20) {
+ if (list[brightness].get<int32_t>() != 10 ||
+ list[contrast].get<int32_t>() != 20) {
cout << "Failed to update control value" << endl;
return TestFail;
}
@@ -185,9 +185,9 @@ protected:
return TestFail;
}
- if (newList[Brightness].get<int>() != 10 ||
- newList[Contrast].get<int>() != 20 ||
- newList[Saturation].get<int>() != 255) {
+ if (newList[Brightness].get<int32_t>() != 10 ||
+ newList[Contrast].get<int32_t>() != 20 ||
+ newList[Saturation].get<int32_t>() != 255) {
cout << "New list contains incorrect values" << endl;
return TestFail;
}
diff --git a/test/controls/control_value.cpp b/test/controls/control_value.cpp
index 397c43f7..a1ffa842 100644
--- a/test/controls/control_value.cpp
+++ b/test/controls/control_value.cpp
@@ -27,7 +27,7 @@ protected:
<< " Bool: " << boolean.toString()
<< endl;
- if (integer.get<int>() != 1234) {
+ if (integer.get<int32_t>() != 1234) {
cerr << "Failed to get Integer" << endl;
return TestFail;
}
@@ -56,8 +56,8 @@ protected:
return TestFail;
}
- value.set<int>(10);
- if (value.get<int>() != 10) {
+ value.set<int32_t>(10);
+ if (value.get<int32_t>() != 10) {
cerr << "Failed to get Integer" << endl;
return TestFail;
}