[libcamera-devel] [PATCH v2] qcam: viewfinder_gl: Fix maybe-uninitialized warnings

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sat Sep 3 15:55:48 CEST 2022


Hi Paul,

On Fri, Sep 02, 2022 at 09:08:25PM -0400, paul.elder at ideasonboard.com wrote:
> On Sat, Sep 03, 2022 at 03:35:13AM +0300, Laurent Pinchart via libcamera-devel wrote:
> > From: Marco Felsch <m.felsch at pengutronix.de>
> > 
> > Commit 251f0534b74b ("qcam: viewfinder_gl: Take color space into account
> > for YUV rendering") introduced maybe-uninitialized warnings with gcc 11
> > and 12 when compiling with -O3. Both compilers warn that
> > 
> > ../../src/qcam/viewfinder_gl.cpp: In member function ‘void ViewFinderGL::selectColorSpace(const libcamera::ColorSpace&)’:
> > ../../src/qcam/viewfinder_gl.cpp:392:21: error: ‘offset’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
> >   391 |         fragmentShaderDefines_.append(QString("#define YUV2RGB_Y_OFFSET %1")
> >       |                                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >   392 |                 .arg(offset, 0, 'f', 1));
> >       |                 ~~~~^~~~~~~~~~~~~~~~~~~
> > 
> > Additionally, gcc 12 warns that
> > 
> > ../../src/qcam/viewfinder_gl.cpp: In member function ‘void ViewFinderGL::selectColorSpace(const libcamera::ColorSpace&)’:
> > ../../src/qcam/viewfinder_gl.cpp:379:36: error: ‘yuv2rgb’ may be used uninitialized [-Werror=maybe-uninitialized]
> >   379 |                         yuv2rgb[i] *= 255.0 / 219.0;
> > ../../src/qcam/viewfinder_gl.cpp:330:31: note: ‘yuv2rgb’ declared here
> >   330 |         std::array<double, 9> yuv2rgb;
> >       |
> > 
> > While this should never happen here, the compiler isn't necessarily
> > wrong, as C++17 allows initializing a scoped enum from an integer using
> > direct-list-initialization, even if the integer value doesn't match any
> > of the enumerators for the scoped enum ([1]). Whether this is valid or
> > borderline paranoia from gcc may be debatable, but in any case it can't
> > be classified as blatantly wrong. Fix the warnings by adding default
> > cases to the switch statements in ViewFinderGL::selectColorSpace().
> > Which case is selected as the default doesn't matter, as this is not
> > meant to happen.
> 
> If it's not meant to happen then maybe we should Fatal :D

Within libcamera I would have been tempted to do so, but in qcam, I
think I don't care that much (especially given that we have no LOG()
there).

> jk imo indeed the "sensible defaults" that you chose below are
> sufficient.
> 
> Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> 
> > [1] https://en.cppreference.com/w/cpp/language/enum#enum_relaxed_init_cpp17
> > 
> > Fixes: 251f0534b74b ("qcam: viewfinder_gl: Take color space into account for YUV rendering")
> > Signed-off-by: Marco Felsch <m.felsch at pengutronix.de>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > 
> > Rewrote commit message, added a default case for the encoding switch.
> > 
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/qcam/viewfinder_gl.cpp | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/src/qcam/viewfinder_gl.cpp b/src/qcam/viewfinder_gl.cpp
> > index e2aa24703ff0..38ddad58e09e 100644
> > --- a/src/qcam/viewfinder_gl.cpp
> > +++ b/src/qcam/viewfinder_gl.cpp
> > @@ -332,6 +332,7 @@ void ViewFinderGL::selectColorSpace(const libcamera::ColorSpace &colorSpace)
> >  	/* OpenGL stores arrays in column-major order. */
> >  	switch (colorSpace.ycbcrEncoding) {
> >  	case libcamera::ColorSpace::YcbcrEncoding::None:
> > +	default:
> >  		yuv2rgb = {
> >  			1.0000,  0.0000,  0.0000,
> >  			0.0000,  1.0000,  0.0000,
> > @@ -368,6 +369,7 @@ void ViewFinderGL::selectColorSpace(const libcamera::ColorSpace &colorSpace)
> >  
> >  	switch (colorSpace.range) {
> >  	case libcamera::ColorSpace::Range::Full:
> > +	default:
> >  		offset = 0.0;
> >  		break;
> >  
> > 
> > base-commit: 251f0534b74bcb46c777aa0df34b1b4142b664f5

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list