libipa: awb: Fix non-virtual destructor warning in AwbStats
The AwbStats structure has virtual functions but a publicly accessible
non-virtual destructors. This can cause undefined behaviour if deleting
a derived class instance through a pointer to the base AwbStats class.
The problem is theoretical only as no code in libcamera is expected to
perform such deletion, but compilers can't know that and will emit a
warning if the -Wnon-virtual-dtor option is enabled.
Fixing this can be done by declaring a virtual public destructor in the
AwbStats class. A more efficient alternative is to declare a protected
non-virtual destructor, ensuring that instances can't be deleted through
a pointer to the base class. Do so, and mark the derived RkISP1AwbStats
as final to avoid the same warning.
Fixes: 6f663990a0
("libipa: Add AWB algorithm base class")
Reported-by: Milan Zamazal <mzamazal@redhat.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>
Tested-by: Milan Zamazal <mzamazal@redhat.com>
This commit is contained in:
parent
d4545edb38
commit
005d19a73f
2 changed files with 4 additions and 1 deletions
|
@ -27,6 +27,9 @@ struct AwbResult {
|
||||||
struct AwbStats {
|
struct AwbStats {
|
||||||
virtual double computeColourError(const RGB<double> &gains) const = 0;
|
virtual double computeColourError(const RGB<double> &gains) const = 0;
|
||||||
virtual RGB<double> rgbMeans() const = 0;
|
virtual RGB<double> rgbMeans() const = 0;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
~AwbStats() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AwbAlgorithm
|
class AwbAlgorithm
|
||||||
|
|
|
@ -42,7 +42,7 @@ constexpr int32_t kDefaultColourTemperature = 5000;
|
||||||
/* Minimum mean value below which AWB can't operate. */
|
/* Minimum mean value below which AWB can't operate. */
|
||||||
constexpr double kMeanMinThreshold = 2.0;
|
constexpr double kMeanMinThreshold = 2.0;
|
||||||
|
|
||||||
class RkISP1AwbStats : public AwbStats
|
class RkISP1AwbStats final : public AwbStats
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RkISP1AwbStats(const RGB<double> &rgbMeans)
|
RkISP1AwbStats(const RGB<double> &rgbMeans)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue