[libcamera-devel] [PATCH v2 1/3] apps: qcam: Port to Qt 6

Kieran Bingham kieran.bingham at ideasonboard.com
Tue Jul 23 19:11:19 CEST 2024


Quoting Laurent Pinchart (2024-07-22 16:13:57)
> On Mon, Jul 22, 2024 at 04:01:23PM +0100, Kieran Bingham wrote:
> > Quoting Kieran Bingham (2024-07-22 15:13:57)
> > > Quoting Kieran Bingham (2024-04-16 19:14:35)
> > > > Quoting Neal Gompa via libcamera-devel (2024-01-21 22:39:53)
> > > > > Open source Qt 5 has been effectively end of life since the release
> > > > > of Qt 6, and Qt 6 has current LTS releases now.
> > > > > 
> > > > > This change ports qcam to Qt 6.2 and drops some of the baggage related
> > > > > to Qt 5 that is no longer applicable.
> > > > > 
> > > > 
> > > > With Ubuntu 24.04 release 'imminent' (as well as the next libcamera-0.3
> > > > after I can merge the softISP) I believe it's time to merge this patch.
> > > > 
> > > > However ...
> > > > 
> > > > 
> > > > 
> > > > > Signed-off-by: Neal Gompa <neal at gompa.dev>
> > > > > ---
> > > > >  README.rst                |  2 +-
> > > > >  meson.build               |  2 +-
> > > > >  src/apps/qcam/meson.build | 45 +++++++++++----------------------------
> > > > >  3 files changed, 15 insertions(+), 34 deletions(-)
> > > > > 
> > > > > diff --git a/README.rst b/README.rst
> > > > > index 315738ee..6f1c9302 100644
> > > > > --- a/README.rst
> > > > > +++ b/README.rst
> > > > > @@ -88,7 +88,7 @@ for cam: [optional]
> > > > >          - libsdl2-dev: Enables the SDL sink
> > > > >  
> > > > >  for qcam: [optional]
> > > > > -        libtiff-dev qtbase5-dev qttools5-dev-tools
> > > > > +        libtiff-dev qt6-base-dev qt6-tools-dev-tools
> > 
> > On debian bullseye there's no qt6-tools-dev-tools package ...
> > 
> > Trying to identify either the correct package or when it gets added...
> > 
> > 
> > Hrm. ... it looks like it's only available in bullseye-backports:
> > 
> >  https://packages.debian.org/bullseye-backports/amd64/qt6-tools-dev-tools
> > 
> > Now ... how do we handle this on the CI ... 
> 
> See commit 239de776df95044aa8efa7d19064a9d5c679f4ca in the CI, which
> removed handling of backports :-)

This must be the hardest patch I've ever tried to land.

So ... The CI builders now have QT6 packages, provided through backports
in the case of debian-bullseye.

We have:

- Debian 11 : Bullsye  : QT 6.4.2 
- Debian 12 : Bookworm : QT 6.4.2 
- Debian 13 : Trixie   : QT 6.6.2


But this QT6 qcam patch now has a set of failures:

 - https://gitlab.freedesktop.org/camera/libcamera/-/pipelines/1230127/

Debian 11 : gcc 9 : https://gitlab.freedesktop.org/camera/libcamera/-/jobs/61356458
  - [358/622] Compiling C++ object src/ipa/rpi/controller/librpi_ipa_controller.a.p/rpi_awb.cpp.o

In file included from ../src/ipa/libipa/pwl.h:18,
                 from ../src/ipa/rpi/controller/rpi/awb.h:19,
                 from ../src/ipa/rpi/controller/rpi/awb.cpp:16:
../src/ipa/libipa/vector.h: In instantiation of ‘constexpr libcamera::ipa::Vector<T, Rows> libcamera::ipa::Vector<T, Rows, <anonymous> >::operator-(const libcamera::ipa::Vector<T, Rows>&) const [with T = double; unsigned int Rows = 2; std::enable_if_t<is_arithmetic_v<T> >* <anonymous> = 0; std::enable_if_t<is_arithmetic_v<T> > = void]’:
../src/ipa/rpi/controller/rpi/awb.cpp:506:27:   required from here

(This makes no sense to me at all)


Debian 11 : gcc 10 : 

In file included from src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:10:
src/apps/qcam/qcam.p/../../../../../src/apps/qcam/viewfinder_gl.h:15:10: fatal error: QOpenGLBuffer: No such file or directory
   15 | #include <QOpenGLBuffer>
      |          ^~~~~~~~~~~~~~~
compilation terminated.

(At least this looks related)


Debian 12 : clang ... in fact all the Debian 12's have this error:

In file included from src/apps/qcam/qcam.p/moc_viewfinder_gl.cpp:10:
src/apps/qcam/qcam.p/../../../../../src/apps/qcam/viewfinder_gl.h:15:10: fatal error: 'QOpenGLBuffer' file not found
#include <QOpenGLBuffer>
         ^~~~~~~~~~~~~~~


And Buildhistory job also fails as it's based on Debian 12.


So ... there's a crazy-how-can-it-be-related-but-consistently-repeatable
failure on Debian 11 : gcc 9, and a missing QOpenGLBuffer on all the
other failures.


Does anyone know if QOpenGLBuffer is just missing from QT 6.4.2 or is
this just some spurious build configuration corner case failure we're
hitting?

--
Kieran



> 
> > > > Having installed these packages - I still can't enable qcam. So we must
> > > > be missing some more dependencies that need to be listed here.
> > > 
> > > So following this back to the list:
> > > 
> > > 
> > > The issue above impacts Ubuntu-22.04 LTS, but has been reported to
> > > Launchpad at:
> > > 
> > > Link: https://bugs.launchpad.net/ubuntu/+source/qt6-base/+bug/2067202
> > > 
> > > And should be resolved in a timeframe based on Ubuntu's priorities.
> > > 
> > > I don't think we should withhold our development on that time frame -
> > > and I think this Qt6 enablement patch should be merged.
> > > 
> > > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > > 
> > > 
> > > The 'negative' impacts of merging this patch are:
> > >  - Developers (not users) using Ubuntu 22.04 will have to manually
> > >    install a newer version of meson
> > >    * This is I expect more than likely easy or already done by any
> > >      actual developers of libcamera
> > > 
> > >  - Developers using Ubuntu 22.04 may lose qcam by default.
> > >    - This will not break the build - but qcam may stop being enabled by
> > >      default if QT6 can not be found while the bug link referenced above
> > >      is not resolved.
> > >    - I would hope this would give more pressure for Canonical to fix the
> > >      issue - but I expect that the number of libcamera developers who
> > >      are using libcamera, ubuntu-22.04 *and* need qcam are quite
> > >      limited. (perhaps just me?) - and solutions can be provided to
> > >      support them as required - while I think there are more build
> > >      systems that are now using a qt6 build instead of an EOL qt5 so
> > >      it's time to move on.
> > >
> > > > >  for tracing with lttng: [optional]
> > > > >          liblttng-ust-dev python3-jinja2 lttng-tools
> > > > > diff --git a/meson.build b/meson.build
> > > > > index cb6b666a..4c315e2a 100644
> > > > > --- a/meson.build
> > > > > +++ b/meson.build
> > > > > @@ -1,7 +1,7 @@
> > > > >  # SPDX-License-Identifier: CC0-1.0
> > > > >  
> > > > >  project('libcamera', 'c', 'cpp',
> > > > > -    meson_version : '>= 0.60',
> > > > > +    meson_version : '>= 0.63',
> > > > >      version : '0.2.0',
> > > > >      default_options : [
> > > > >          'werror=true',
> > > > > diff --git a/src/apps/qcam/meson.build b/src/apps/qcam/meson.build
> > > > > index 6cf4c171..c7fcfbeb 100644
> > > > > --- a/src/apps/qcam/meson.build
> > > > > +++ b/src/apps/qcam/meson.build
> > > > > @@ -1,13 +1,13 @@
> > > > >  # SPDX-License-Identifier: CC0-1.0
> > > > >  
> > > > > -qt5 = import('qt5')
> > > > > -qt5_dep = dependency('qt5',
> > > > > +qt6 = import('qt6')
> > > > > +qt6_dep = dependency('qt6',
> > > > >                       method : 'pkg-config',
> > > > > -                     modules : ['Core', 'Gui', 'Widgets'],
> > > > > +                     modules : ['Core', 'Gui', 'OpenGL', 'OpenGLWidgets', 'Widgets'],
> > > > >                       required : get_option('qcam'),
> > > > > -                     version : '>=5.4')
> > > > > +                     version : '>=6.2')
> > > > >  
> > > > > -if not qt5_dep.found()
> > > > > +if not qt6_dep.found()
> > > > >      qcam_enabled = false
> > > > >      subdir_done()
> > > > >  endif
> > > > > @@ -20,46 +20,27 @@ qcam_sources = files([
> > > > >      'main.cpp',
> > > > >      'main_window.cpp',
> > > > >      'message_handler.cpp',
> > > > > +    'viewfinder_gl.cpp',
> > > > >      'viewfinder_qt.cpp',
> > > > >  ])
> > > > >  
> > > > >  qcam_moc_headers = files([
> > > > >      'cam_select_dialog.h',
> > > > >      'main_window.h',
> > > > > +    'viewfinder_gl.h',
> > > > >      'viewfinder_qt.h',
> > > > >  ])
> > > > >  
> > > > >  qcam_resources = files([
> > > > >      'assets/feathericons/feathericons.qrc',
> > > > > +    'assets/shader/shaders.qrc',
> > > > >  ])
> > > > >  
> > > > > -qt5_cpp_args = [apps_cpp_args, '-DQT_NO_KEYWORDS']
> > > > > +qt6_cpp_args = [apps_cpp_args, '-DQT_NO_KEYWORDS']
> > > > >  
> > > > > -if cxx.has_header_symbol('QOpenGLWidget', 'QOpenGLWidget',
> > > > > -                         dependencies : qt5_dep, args : '-fPIC')
> > > > > -    qcam_sources += files([
> > > > > -        'viewfinder_gl.cpp',
> > > > > -    ])
> > > > > -    qcam_moc_headers += files([
> > > > > -        'viewfinder_gl.h',
> > > > > -    ])
> > > > > -    qcam_resources += files([
> > > > > -        'assets/shader/shaders.qrc'
> > > > > -    ])
> > > > > -endif
> > > > > -
> > > > > -# gcc 9 introduced a deprecated-copy warning that is triggered by Qt until
> > > > > -# Qt 5.13. clang 10 introduced the same warning, but detects more issues
> > > > > -# that are not fixed in Qt yet. Disable the warning manually in both cases.
> > > > > -if ((cc.get_id() == 'gcc' and cc.version().version_compare('>=9.0') and
> > > > > -     qt5_dep.version().version_compare('<5.13')) or
> > > > > -    (cc.get_id() == 'clang' and cc.version().version_compare('>=10.0')))
> > > > > -    qt5_cpp_args += ['-Wno-deprecated-copy']
> > > > > -endif
> > > > > -
> > > > > -resources = qt5.preprocess(moc_headers : qcam_moc_headers,
> > > > > +resources = qt6.preprocess(moc_headers : qcam_moc_headers,
> > > > >                             qresources : qcam_resources,
> > > > > -                           dependencies : qt5_dep)
> > > > > +                           dependencies : qt6_dep)
> > > > >  
> > > > >  qcam  = executable('qcam', qcam_sources, resources,
> > > > >                     install : true,
> > > > > @@ -69,6 +50,6 @@ qcam  = executable('qcam', qcam_sources, resources,
> > > > >                         libatomic,
> > > > >                         libcamera_public,
> > > > >                         libtiff,
> > > > > -                       qt5_dep,
> > > > > +                       qt6_dep,
> > > > >                     ],
> > > > > -                   cpp_args : qt5_cpp_args)
> > > > > +                   cpp_args : qt6_cpp_args)
> 
> -- 
> Regards,
> 
> Laurent Pinchart


More information about the libcamera-devel mailing list