[libcamera-devel] [PATCH] qcam: fix Qt5.15.0 compile

Peter Seiderer ps.report at gmx.net
Mon Jun 8 23:40:28 CEST 2020


Hello Laurent,

On Tue, 9 Jun 2020 00:32:32 +0300, Laurent Pinchart <laurent.pinchart at ideasonboard.com> wrote:

> Hi Peter,
> 
> On Mon, Jun 08, 2020 at 11:11:02PM +0200, Peter Seiderer wrote:
> > On Mon, 8 Jun 2020 04:18:56 +0300, Laurent Pinchart <laurent.pinchart at ideasonboard.com> wrote:  
> > > On Sun, Jun 07, 2020 at 11:58:26PM +0200, Peter Seiderer wrote:  
> > >> On Sun, 7 Jun 2020 20:17:29 +0300, Laurent Pinchart <laurent.pinchart at ideasonboard.com> wrote:    
> > >>> On Sun, Jun 07, 2020 at 06:56:55PM +0200, Peter Seiderer wrote:    
> > >>>> Fixes:
> > >>>> 
> > >>>>   ../src/qcam/main_window.cpp:634:16: error: ‘QTextStream& QTextStreamFunctions::fixed(QTextStream&)’ is deprecated: Use Qt::fixed [-Werror=deprecated-declarations]
> > >>>>     634 |   << "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
> > >>>>         |                ^~~~~
> > >>>> Signed-off-by: Peter Seiderer <ps.report at gmx.net>
> > >>>> ---
> > >>>>  src/qcam/main_window.cpp | 2 +-
> > >>>>  1 file changed, 1 insertion(+), 1 deletion(-)
> > >>>> 
> > >>>> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> > >>>> index 7de0895..1f3bdc1 100644
> > >>>> --- a/src/qcam/main_window.cpp
> > >>>> +++ b/src/qcam/main_window.cpp
> > >>>> @@ -631,7 +631,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
> > >>>>  		<< QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0'))
> > >>>>  		<< "bytesused:" << metadata.planes[0].bytesused
> > >>>>  		<< "timestamp:" << metadata.timestamp
> > >>>> -		<< "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
> > >>>> +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;      
> > >>> 
> > >>> Hasn't Qt::fixed been introduced in Qt v5.14, wouldn't this break
> > >>> compatibility with all older Qt versions ?    
> > >> 
> > >> Yes, you are right...
> > >>     
> > >>> One option I haven't tested would be to keep Qt::fixed here, and add, at
> > >>> the top of this file, something along those lines.
> > >>> 
> > >>> #if QT_VERSION <= QT_VERSION_CHECK(5, 14, 0)
> > >>> /*
> > >>>  * Qt::fixed was introduced in v5.14, and ::fixed deprecated in v5.15. Allow
> > >>>  * usage of Qt::fixed unconditionally.
> > >>>  */
> > >>> namespace Qt {
> > >>> using fixed = ::fixed;
> > >>> } /* namespace Qt */
> > >>> #endif
> > >>> 
> > >>> Would you be able to test this ?    
> > >> 
> > >> Did try with Qt5.10.1 (with a standalone test program), leads to:
> > >> 
> > >>   test-qt-fixed.cpp:10:17: error: ‘fixed’ in namespace ‘::’ does not name a type
> > >>      10 | using fixed = ::fixed;
> > >>         |                 ^~~~~
> > >> 
> > >> 
> > >> Alternative would be:
> > >> 
> > >> [...]
> > >> #if QT_VERSION <= QT_VERSION_CHECK(5, 14, 0)
> > >> 	<< fixed
> > >> #else
> > >> 	<< Qt::fixed
> > >> #endif
> > >> [...]    
> > > 
> > > That would require an #if for every usage of fixed, which isn't very
> > > nice (even if we use it in a single place only). I've tested the
> > > following v5.14 but can't easily test on older Qt versions. Could you
> > > test v5.10 ?  
> > 
> > Yes, can do...
> >   
> > > #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
> > > /*
> > >  * Qt::fixed was introduced in v5.14, and ::fixed deprecated in v5.15. Allow
> > >  * usage of Qt::fixed unconditionally.
> > >  */
> > > namespace Qt {
> > > constexpr auto fixed = ::fixed;
> > > } /* namespace Qt */
> > > #endif  
> > 
> > This one works with Qt5.10.1...  
> 
> Great ! Thank you for testing.
> 
> Are you fine with the following patch ? If so there's no need to send a
> new version.

Yes, fine for me...

Regards,
Peter
 
> 
> commit 3dd6902e12c73cdcb5ef1a0ce0aceee5c9008306
> Author: Peter Seiderer <ps.report at gmx.net>
> Date:   Sun Jun 7 18:56:55 2020 +0200
> 
>     qcam: Fix compilation with Qt v5.15.0
>     
>     Starting from Qt v5.15.0, the QTextStreamFunctions::fixed function
>     used to configure formatting on QTextStream is deprecated in favour of
>     Qt::fixed. This causes a compilation error:
>     
>       ../src/qcam/main_window.cpp:634:16: error: ‘QTextStream& QTextStreamFunctions::fixed(QTextStream&)’ is deprecated: Use Qt::fixed [-Werror=deprecated-declarations]
>         634 |   << "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
>             |                ^~~~~
>     
>     Fix it by using Qt::fixed, and provide backward compatibility with Qt
>     versions older than v5.14.0 that didn't provide Qt::fixed.
>     
>     Signed-off-by: Peter Seiderer <ps.report at gmx.net>
>     Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
>     Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> 
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index 7de089571234..2960259f4213 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -31,6 +31,16 @@
>  
>  using namespace libcamera;
>  
> +#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
> +/*
> + * Qt::fixed was introduced in v5.14, and ::fixed deprecated in v5.15. Allow
> + * usage of Qt::fixed unconditionally.
> + */
> +namespace Qt {
> +constexpr auto fixed = ::fixed;
> +} /* namespace Qt */
> +#endif
> +
>  /**
>   * \brief Custom QEvent to signal capture completion
>   */
> @@ -631,7 +641,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
>  		<< QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0'))
>  		<< "bytesused:" << metadata.planes[0].bytesused
>  		<< "timestamp:" << metadata.timestamp
> -		<< "fps:" << fixed << qSetRealNumberPrecision(2) << fps;
> +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
>  
>  	/* Render the frame on the viewfinder. */
>  	viewfinder_->render(buffer, &mappedBuffers_[buffer]);
> 
> 
> > >> Should I re-spin the patch?
> > >>     
> > >>>>  
> > >>>>  	/* Render the frame on the viewfinder. */
> > >>>>  	viewfinder_->render(buffer, &mappedBuffers_[buffer]);      
> 



More information about the libcamera-devel mailing list