Fix the following two runtime errors with qt-5.3.2:
- QOpenGLFunctions created with non-current context
Program received signal SIGSEGV, Segmentation fault.
#0 0x00007ffff62819f0 in QOpenGLContext::shareGroup() const () at
/usr/lib64/libQt5Gui.so.5
#1 0x00007ffff64ff470 in () at /usr/lib64/libQt5Gui.so.5
#2 0x00007ffff64ff64b in QOpenGLFunctions::initializeOpenGLFunctions() ()
at /usr/lib64/libQt5Gui.so.5
#3 0x00007ffff70c2e29 in () at /usr/lib64/libQt5OpenGL.so.5
#4 0x00007ffff70c2f7c in QGLFunctions::initializeGLFunctions(QGLContext
const*) ()
at /usr/lib64/libQt5OpenGL.so.5
#5 0x000000000040fab7 in CaptureWinGLEngine::CaptureWinGLEngine()
(this=0x7494f0)
at ../qv4l2/capture-win-gl.cpp:149
#6 0x000000000040f562 in CaptureWinGL::CaptureWinGL(ApplicationWindow*)
(this=0x749420, aw=
0x8bbda0) at ../qv4l2/capture-win-gl.cpp:28
#7 0x000000000043c005 in ApplicationWindow::newCaptureWin() (this=0x8bbda0)
at ../qv4l2/qv4l2.cpp:443
#8 0x000000000043ab8e in ApplicationWindow::setDevice(QString const&, bool)
(this=0x8bbda0, device=..., rawOpen=false) at ../qv4l2/qv4l2.cpp:257
#9 0x0000000000444724 in main(int, char**) (argc=1, argv=0x7fffffffdcd8)
at ../qv4l2/qv4l2.cpp:1774
Solution: call QGLFunctions::initializeGLFunctions() later (in
CaptureWinGLEngine::initializeGL()).
- Program received signal SIGSEGV, Segmentation fault.
#0 0x00007ffff70c8cc0 in QGLShaderProgram::release() () at
/usr/lib64/libQt5OpenGL.so.5
#1 0x000000000040fe0f in CaptureWinGLEngine::clearShader() (this=0x6f0ae0)
at ../qv4l2/capture-win-gl.cpp:241
#2 0x000000000041016b in CaptureWinGLEngine::changeShader() (this=0x6f0ae0)
at ../qv4l2/capture-win-gl.cpp:353
#3 0x00000000004105db in CaptureWinGLEngine::paintGL() (this=0x6f0ae0)
at ../qv4l2/capture-win-gl.cpp:438
#4 0x00007ffff70bc2f4 in QGLWidget::glDraw() () at
/usr/lib64/libQt5OpenGL.so.5
#5 0x00007ffff70b9229 in QGLWidget::paintEvent(QPaintEvent*) ()
at /usr/lib64/libQt5OpenGL.so.5
#6 0x00007ffff69ec112 in QWidget::event(QEvent*) () at
/usr/lib64/libQt5Widgets.so.5
#7 0x00007ffff69b0cfc in QApplicationPrivate::notify_helper(QObject*,
QEvent*) ()
at /usr/lib64/libQt5Widgets.so.5
#8 0x00007ffff69b5c36 in QApplication::notify(QObject*, QEvent*) ()
at /usr/lib64/libQt5Widgets.so.5
#9 0x00007ffff5d0fb35 in QCoreApplication::notifyInternal(QObject*, QEvent*)
()
at /usr/lib64/libQt5Core.so.5
#10 0x00007ffff69e6b25 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion
const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) () at
/usr/lib64/libQt5Widgets.so.5
#11 0x00007ffff69bd3a1 in QWidgetPrivate::repaint_sys(QRegion const&) ()
at /usr/lib64/libQt5Widgets.so.5
#12 0x00007ffff6a0b873 in () at /usr/lib64/libQt5Widgets.so.5
#13 0x00007ffff69b0cfc in QApplicationPrivate::notify_helper(QObject*,
QEvent*) ()
at /usr/lib64/libQt5Widgets.so.5
#14 0x00007ffff69b5c36 in QApplication::notify(QObject*, QEvent*) ()
at /usr/lib64/libQt5Widgets.so.5
#15 0x00007ffff5d0fb35 in QCoreApplication::notifyInternal(QObject*, QEvent*)
()
at /usr/lib64/libQt5Core.so.5
#16 0x00007ffff6244fe6 in
QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent*)
() at /usr/lib64/libQt5Gui.so.5
#17 0x00007ffff6245b45 in
QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*)
() at /usr/lib64/libQt5Gui.so.5
#18 0x00007ffff622c5a8 in
QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() at /usr/lib64/libQt5Gui.so.5
#19 0x00007fffeeb75f30 in () at /usr/lib64/qt5/plugins/platforms/libqxcb.so
#20 0x00007ffff42b1a04 in g_main_context_dispatch () at
/usr/lib64/libglib-2.0.so.0
#21 0x00007ffff42b1c48 in () at /usr/lib64/libglib-2.0.so.0
#22 0x00007ffff42b1cec in g_main_context_iteration () at
/usr/lib64/libglib-2.0.so.0
#23 0x00007ffff5d6689c in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /usr/lib64/libQt5Core.so.5
#24 0x00007ffff5d0da4b in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /usr/lib64/libQt5Core.so.5
#25 0x00007ffff5d150a6 in QCoreApplication::exec() () at
/usr/lib64/libQt5Core.so.5
#26 0x000000000044476d in main(int, char**) (argc=1, argv=0x7fffffffdcd8)
at ../qv4l2/qv4l2.cpp:1777
Solution: call QGLShaderProgram::release() only in case shader program
is previously linked.
Signed-off-by: Peter Seiderer <[email protected]>
---
utils/qv4l2/capture-win-gl.cpp | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/utils/qv4l2/capture-win-gl.cpp b/utils/qv4l2/capture-win-gl.cpp
index f229866..5122d09 100644
--- a/utils/qv4l2/capture-win-gl.cpp
+++ b/utils/qv4l2/capture-win-gl.cpp
@@ -146,7 +146,7 @@ CaptureWinGLEngine::CaptureWinGLEngine() :
m_mag_filter(GL_NEAREST),
m_min_filter(GL_NEAREST)
{
- m_glfunction.initializeGLFunctions(context());
+
}
CaptureWinGLEngine::~CaptureWinGLEngine()
@@ -238,8 +238,10 @@ void CaptureWinGLEngine::setLinearFilter(bool enable)
void CaptureWinGLEngine::clearShader()
{
glDeleteTextures(m_screenTextureCount, m_screenTexture);
- m_shaderProgram.release();
- m_shaderProgram.removeAllShaders();
+ if (m_shaderProgram.isLinked()) {
+ m_shaderProgram.release();
+ m_shaderProgram.removeAllShaders();
+ }
}
void CaptureWinGLEngine::stop()
@@ -252,6 +254,8 @@ void CaptureWinGLEngine::stop()
void CaptureWinGLEngine::initializeGL()
{
+ m_glfunction.initializeGLFunctions(context());
+
glShadeModel(GL_FLAT);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
--
2.1.2
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html