[libcamera-devel,v2,0/3] apps: qcam: Port to Qt 6
mbox series

Message ID 20240121224052.1049989-1-neal@gompa.dev
Headers show
Series
  • apps: qcam: Port to Qt 6
Related show

Message

Neal Gompa Jan. 21, 2024, 10:39 p.m. UTC
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.

Additionally, a couple of patches are included to update documentation
references from Qt 5 to Qt 6.

=== Changelog ===

v2: Bump Meson to v0.63 for Qt6 module

v1: Initial patch set

Neal Gompa (3):
  apps: qcam: Port to Qt 6
  libcamera: base: signal: Update Qt documentation link to Qt 6
  Documentation: Update Qt documentation links to Qt 6

 .../guides/application-developer.rst          |  2 +-
 Documentation/guides/pipeline-handler.rst     |  2 +-
 README.rst                                    |  2 +-
 meson.build                                   |  2 +-
 src/apps/qcam/meson.build                     | 45 ++++++-------------
 src/libcamera/base/signal.cpp                 |  2 +-
 6 files changed, 18 insertions(+), 37 deletions(-)

Comments

Laurent Pinchart Jan. 22, 2024, 7:40 a.m. UTC | #1
Hi Neal,

Thank you for the patch.

On Sun, Jan 21, 2024 at 05:39:52PM -0500, Neal Gompa via libcamera-devel wrote:
> 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.
> 
> Additionally, a couple of patches are included to update documentation
> references from Qt 5 to Qt 6.

I'll give this a try, I'm currently installing Qt 6, which is taking a
bit of time as I'm running Gentoo :-) It seems that Debian bookworm and
bullseye-backports both carry Qt 6, so we should be fine from that point
of view.

> === Changelog ===
> 
> v2: Bump Meson to v0.63 for Qt6 module
> 
> v1: Initial patch set
> 
> Neal Gompa (3):
>   apps: qcam: Port to Qt 6
>   libcamera: base: signal: Update Qt documentation link to Qt 6
>   Documentation: Update Qt documentation links to Qt 6
> 
>  .../guides/application-developer.rst          |  2 +-
>  Documentation/guides/pipeline-handler.rst     |  2 +-
>  README.rst                                    |  2 +-
>  meson.build                                   |  2 +-
>  src/apps/qcam/meson.build                     | 45 ++++++-------------
>  src/libcamera/base/signal.cpp                 |  2 +-
>  6 files changed, 18 insertions(+), 37 deletions(-)
Laurent Pinchart Jan. 22, 2024, 9:52 a.m. UTC | #2
On Mon, Jan 22, 2024 at 09:40:01AM +0200, Laurent Pinchart via libcamera-devel wrote:
> On Sun, Jan 21, 2024 at 05:39:52PM -0500, Neal Gompa via libcamera-devel wrote:
> > 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.
> > 
> > Additionally, a couple of patches are included to update documentation
> > references from Qt 5 to Qt 6.
> 
> I'll give this a try, I'm currently installing Qt 6, which is taking a
> bit of time as I'm running Gentoo :-) It seems that Debian bookworm and
> bullseye-backports both carry Qt 6, so we should be fine from that point
> of view.

I gave this a quick try on Gentoo, and qcam seems to compile and run. It
is however not displaying icons in the toolbar. Have you noticed that ?

> > === Changelog ===
> > 
> > v2: Bump Meson to v0.63 for Qt6 module
> > 
> > v1: Initial patch set
> > 
> > Neal Gompa (3):
> >   apps: qcam: Port to Qt 6
> >   libcamera: base: signal: Update Qt documentation link to Qt 6
> >   Documentation: Update Qt documentation links to Qt 6
> > 
> >  .../guides/application-developer.rst          |  2 +-
> >  Documentation/guides/pipeline-handler.rst     |  2 +-
> >  README.rst                                    |  2 +-
> >  meson.build                                   |  2 +-
> >  src/apps/qcam/meson.build                     | 45 ++++++-------------
> >  src/libcamera/base/signal.cpp                 |  2 +-
> >  6 files changed, 18 insertions(+), 37 deletions(-)
Laurent Pinchart Sept. 9, 2024, 1:07 p.m. UTC | #3
Hi Neal,

I realized today that the gles rendered in qcam is broken :-( Reverting
back to qt5 works for me, so it's related to this patch series. Could
you please test ('qcam -r gles') and investigate ?

On Sun, Jan 21, 2024 at 05:39:52PM -0500, 📷-dev wrote:
> 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.
> 
> Additionally, a couple of patches are included to update documentation
> references from Qt 5 to Qt 6.
> 
> === Changelog ===
> 
> v2: Bump Meson to v0.63 for Qt6 module
> 
> v1: Initial patch set
> 
> Neal Gompa (3):
>   apps: qcam: Port to Qt 6
>   libcamera: base: signal: Update Qt documentation link to Qt 6
>   Documentation: Update Qt documentation links to Qt 6
> 
>  .../guides/application-developer.rst          |  2 +-
>  Documentation/guides/pipeline-handler.rst     |  2 +-
>  README.rst                                    |  2 +-
>  meson.build                                   |  2 +-
>  src/apps/qcam/meson.build                     | 45 ++++++-------------
>  src/libcamera/base/signal.cpp                 |  2 +-
>  6 files changed, 18 insertions(+), 37 deletions(-)
Kieran Bingham Sept. 9, 2024, 4:13 p.m. UTC | #4
Quoting Laurent Pinchart (2024-09-09 14:07:50)
> Hi Neal,
> 
> I realized today that the gles rendered in qcam is broken :-( Reverting
> back to qt5 works for me, so it's related to this patch series. Could
> you please test ('qcam -r gles') and investigate ?

I just tested this and have the following backtrace on Fedora Rawhide...

(gdb) bt
#0  0x0000ffffce368b3c in void st_update_array_templ<(util_popcnt)2, (st_fill_tc_set_vb)0, (st_use_vao_fast_path)1, (st_allow_zero_stride_attribs)0, (st_identity_attrib_mapping)0, (st_allow_user_buffers)0, (st_update_velems)1>(st_context*, unsigned int, unsigned int, unsigned int) () at /lib64/libgallium-24.2.1.so
#1  0x0000ffffce0f9484 in st_prepare_draw () at /lib64/libgallium-24.2.1.so
#2  0x0000ffffce294384 in _mesa_draw_arrays.part.0 () at /lib64/libgallium-24.2.1.so
#3  0x0000000000454934 in QOpenGLFunctions::glDrawArrays (this=0x722d60, mode=6, first=0, count=4) at /usr/include/qt6/QtGui/qopenglfunctions.h:709
#4  0x000000000045438c in ViewFinderGL::paintGL (this=0x722d30) at ../../src/apps/qcam/viewfinder_gl.cpp:823
#5  0x0000fffff74e2f00 in QOpenGLWidgetPrivate::render() () at /lib64/libQt6OpenGLWidgets.so.6
#6  0x0000fffff5dceecc in QWidget::event(QEvent*) () at /lib64/libQt6Widgets.so.6
#7  0x0000fffff5d6ea18 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6
#8  0x0000fffff6f71d58 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt6Core.so.6
#9  0x0000fffff5dc598c in QWidgetPrivate::sendPaintEvent(QRegion const&) () at /lib64/libQt6Widgets.so.6
#10 0x0000fffff5ddba1c in QWidgetRepaintManager::paintAndFlush() () at /lib64/libQt6Widgets.so.6
#11 0x0000fffff5dcf64c in QWidget::event(QEvent*) () at /lib64/libQt6Widgets.so.6
#12 0x000000000043af30 in MainWindow::event (this=0x7c0440, e=0xffffd40042c0) at ../../src/apps/qcam/main_window.cpp:177
#13 0x0000fffff5d6ea18 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6
#14 0x0000fffff6f71d58 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt6Core.so.6
#15 0x0000fffff6f76068 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /lib64/libQt6Core.so.6
#16 0x0000fffff7272fd4 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () at /lib64/libQt6Core.so.6
#17 0x0000fffff48d0b94 in g_main_context_dispatch_unlocked.lto_priv () at /lib64/libglib-2.0.so.0
#18 0x0000fffff49341d0 in g_main_context_iterate_unlocked.isra () at /lib64/libglib-2.0.so.0
#19 0x0000fffff48d2264 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
#20 0x0000fffff7272658 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt6Core.so.6
#21 0x0000fffff6f7f694 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt6Core.so.6
#22 0x0000fffff6f7ac3c in QCoreApplication::exec() () at /lib64/libQt6Core.so.6
#23 0x0000000000439a24 in main (argc=3, argv=0xffffffffeeb8) at ../../src/apps/qcam/main.cpp:87
(gdb) quit
A debugging session is active.

--
Kieran


> 
> On Sun, Jan 21, 2024 at 05:39:52PM -0500, 📷-dev wrote:
> > 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.
> > 
> > Additionally, a couple of patches are included to update documentation
> > references from Qt 5 to Qt 6.
> > 
> > === Changelog ===
> > 
> > v2: Bump Meson to v0.63 for Qt6 module
> > 
> > v1: Initial patch set
> > 
> > Neal Gompa (3):
> >   apps: qcam: Port to Qt 6
> >   libcamera: base: signal: Update Qt documentation link to Qt 6
> >   Documentation: Update Qt documentation links to Qt 6
> > 
> >  .../guides/application-developer.rst          |  2 +-
> >  Documentation/guides/pipeline-handler.rst     |  2 +-
> >  README.rst                                    |  2 +-
> >  meson.build                                   |  2 +-
> >  src/apps/qcam/meson.build                     | 45 ++++++-------------
> >  src/libcamera/base/signal.cpp                 |  2 +-
> >  6 files changed, 18 insertions(+), 37 deletions(-)
> 
> -- 
> Regards,
> 
> Laurent Pinchart
Laurent Pinchart Sept. 9, 2024, 4:21 p.m. UTC | #5
On Mon, Sep 09, 2024 at 05:13:20PM +0100, Kieran Bingham wrote:
> Quoting Laurent Pinchart (2024-09-09 14:07:50)
> > Hi Neal,
> > 
> > I realized today that the gles rendered in qcam is broken :-( Reverting
> > back to qt5 works for me, so it's related to this patch series. Could
> > you please test ('qcam -r gles') and investigate ?
> 
> I just tested this and have the following backtrace on Fedora Rawhide...
> 
> (gdb) bt
> #0  0x0000ffffce368b3c in void st_update_array_templ<(util_popcnt)2, (st_fill_tc_set_vb)0, (st_use_vao_fast_path)1, (st_allow_zero_stride_attribs)0, (st_identity_attrib_mapping)0, (st_allow_user_buffers)0, (st_update_velems)1>(st_context*, unsigned int, unsigned int, unsigned int) () at /lib64/libgallium-24.2.1.so
> #1  0x0000ffffce0f9484 in st_prepare_draw () at /lib64/libgallium-24.2.1.so
> #2  0x0000ffffce294384 in _mesa_draw_arrays.part.0 () at /lib64/libgallium-24.2.1.so
> #3  0x0000000000454934 in QOpenGLFunctions::glDrawArrays (this=0x722d60, mode=6, first=0, count=4) at /usr/include/qt6/QtGui/qopenglfunctions.h:709
> #4  0x000000000045438c in ViewFinderGL::paintGL (this=0x722d30) at ../../src/apps/qcam/viewfinder_gl.cpp:823
> #5  0x0000fffff74e2f00 in QOpenGLWidgetPrivate::render() () at /lib64/libQt6OpenGLWidgets.so.6
> #6  0x0000fffff5dceecc in QWidget::event(QEvent*) () at /lib64/libQt6Widgets.so.6
> #7  0x0000fffff5d6ea18 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6
> #8  0x0000fffff6f71d58 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt6Core.so.6
> #9  0x0000fffff5dc598c in QWidgetPrivate::sendPaintEvent(QRegion const&) () at /lib64/libQt6Widgets.so.6
> #10 0x0000fffff5ddba1c in QWidgetRepaintManager::paintAndFlush() () at /lib64/libQt6Widgets.so.6
> #11 0x0000fffff5dcf64c in QWidget::event(QEvent*) () at /lib64/libQt6Widgets.so.6
> #12 0x000000000043af30 in MainWindow::event (this=0x7c0440, e=0xffffd40042c0) at ../../src/apps/qcam/main_window.cpp:177
> #13 0x0000fffff5d6ea18 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib64/libQt6Widgets.so.6
> #14 0x0000fffff6f71d58 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib64/libQt6Core.so.6
> #15 0x0000fffff6f76068 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /lib64/libQt6Core.so.6
> #16 0x0000fffff7272fd4 in postEventSourceDispatch(_GSource*, int (*)(void*), void*) () at /lib64/libQt6Core.so.6
> #17 0x0000fffff48d0b94 in g_main_context_dispatch_unlocked.lto_priv () at /lib64/libglib-2.0.so.0
> #18 0x0000fffff49341d0 in g_main_context_iterate_unlocked.isra () at /lib64/libglib-2.0.so.0
> #19 0x0000fffff48d2264 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
> #20 0x0000fffff7272658 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt6Core.so.6
> #21 0x0000fffff6f7f694 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib64/libQt6Core.so.6
> #22 0x0000fffff6f7ac3c in QCoreApplication::exec() () at /lib64/libQt6Core.so.6
> #23 0x0000000000439a24 in main (argc=3, argv=0xffffffffeeb8) at ../../src/apps/qcam/main.cpp:87
> (gdb) quit
> A debugging session is active.

This patch fixes the crash:

diff --git a/src/apps/qcam/viewfinder_gl.cpp b/src/apps/qcam/viewfinder_gl.cpp
index 9d2a69600db1..789a45f3e314 100644
--- a/src/apps/qcam/viewfinder_gl.cpp
+++ b/src/apps/qcam/viewfinder_gl.cpp
@@ -809,6 +809,8 @@ void ViewFinderGL::doRender()

 void ViewFinderGL::paintGL()
 {
+	vertexBuffer_.bind();
+
 	if (!fragmentShader_)
 		if (!createFragmentShader()) {
 			qWarning() << "[ViewFinderGL]:"

The display is still wrong though, but "less wrong". It appears that the
texture coordinates are not taken into account correctly.

Any OpenGL expert who could have a quick look at qcam and check where we
get binding of objects wrong ?

> > On Sun, Jan 21, 2024 at 05:39:52PM -0500, 📷-dev wrote:
> > > 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.
> > > 
> > > Additionally, a couple of patches are included to update documentation
> > > references from Qt 5 to Qt 6.
> > > 
> > > === Changelog ===
> > > 
> > > v2: Bump Meson to v0.63 for Qt6 module
> > > 
> > > v1: Initial patch set
> > > 
> > > Neal Gompa (3):
> > >   apps: qcam: Port to Qt 6
> > >   libcamera: base: signal: Update Qt documentation link to Qt 6
> > >   Documentation: Update Qt documentation links to Qt 6
> > > 
> > >  .../guides/application-developer.rst          |  2 +-
> > >  Documentation/guides/pipeline-handler.rst     |  2 +-
> > >  README.rst                                    |  2 +-
> > >  meson.build                                   |  2 +-
> > >  src/apps/qcam/meson.build                     | 45 ++++++-------------
> > >  src/libcamera/base/signal.cpp                 |  2 +-
> > >  6 files changed, 18 insertions(+), 37 deletions(-)