This reverts commit 10cdc914da.
The constructors introduced by that commit are not used anywhere,
and they do not match the existing practice for boolean controls.
Specifically, every single boolean control is described by calling
the `ControlInfo(ControlValue, ControlValue, ControlValue)`
constructor. Crucially, that constructor does not set `values_`,
while the two removed constructors do. And whether or not `values_`
has any elements is currently used as an implicit sign to decide
whether or not the control is "enum-like", and those are assumed
to have type `int32_t`.
For example, any boolean control described using any of the two
removed constructors would cause an assertion in failure in
`CameraSession::listControls()` when calling `value.get<int32_t>()`.
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
86 lines
2.0 KiB
C++
86 lines
2.0 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
*
|
|
* ControlInfo tests
|
|
*/
|
|
|
|
#include <iostream>
|
|
|
|
#include <libcamera/control_ids.h>
|
|
#include <libcamera/controls.h>
|
|
|
|
#include "test.h"
|
|
|
|
using namespace std;
|
|
using namespace libcamera;
|
|
|
|
class ControlInfoTest : public Test
|
|
{
|
|
protected:
|
|
int run()
|
|
{
|
|
/*
|
|
* Test information retrieval from a range with no minimum and
|
|
* maximum.
|
|
*/
|
|
ControlInfo brightness;
|
|
|
|
if (brightness.min().type() != ControlType::ControlTypeNone ||
|
|
brightness.max().type() != ControlType::ControlTypeNone ||
|
|
brightness.def().type() != ControlType::ControlTypeNone) {
|
|
cout << "Invalid control range for Brightness" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
/*
|
|
* Test information retrieval from a control with a minimum and
|
|
* a maximum value, and an implicit default value.
|
|
*/
|
|
ControlInfo contrast(10, 200);
|
|
|
|
if (contrast.min().get<int32_t>() != 10 ||
|
|
contrast.max().get<int32_t>() != 200 ||
|
|
!contrast.def().isNone()) {
|
|
cout << "Invalid control range for Contrast" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
/*
|
|
* Test information retrieval from a control with boolean
|
|
* values.
|
|
*/
|
|
ControlInfo aeEnable(false, true, false);
|
|
|
|
if (aeEnable.min().get<bool>() != false ||
|
|
aeEnable.def().get<bool>() != false ||
|
|
aeEnable.max().get<bool>() != true) {
|
|
cout << "Invalid control range for AeEnable" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
if (!aeEnable.values().empty()) {
|
|
cout << "Invalid control values for AeEnable" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
ControlInfo awbEnable(true, true, true);
|
|
|
|
if (awbEnable.min().get<bool>() != true ||
|
|
awbEnable.def().get<bool>() != true ||
|
|
awbEnable.max().get<bool>() != true) {
|
|
cout << "Invalid control range for AwbEnable" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
if (!awbEnable.values().empty()) {
|
|
cout << "Invalid control values for AwbEnable" << endl;
|
|
return TestFail;
|
|
}
|
|
|
|
return TestPass;
|
|
}
|
|
};
|
|
|
|
TEST_REGISTER(ControlInfoTest)
|