From 36649887e8ba8841b45522a772cf83b5c5130fca Mon Sep 17 00:00:00 2001 From: Fabian Bumberger Date: Fri, 21 Mar 2014 16:02:48 +0100 Subject: QNX: Remove most of the CPU overhead for video rendering This patch uses the GL_OES_EGL_image extension to create a OpenGL Texture handle for a libscreen pixmap. If the extension is not available it uses the "old" technique as fallback where the image data is copied into a QImage. This reduces the CPU load by more than 70% and allows HD videos to be played jitter-free. Task-number: QTBUG-37752 Change-Id: I4cad22c39390e4cf9eb5be5f0bfe446544a11b9e Reviewed-by: Bernd Weimer Reviewed-by: Sean Harmer --- src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp') diff --git a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp index cd03cd6b8..647732485 100644 --- a/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp +++ b/src/qtmultimediaquicktools/qdeclarativevideooutput_render.cpp @@ -201,6 +201,16 @@ QSGNode *QDeclarativeVideoRendererBackend::updatePaintNode(QSGNode *oldNode, obj->event(&ev); } } +#if defined (Q_OS_QNX) // On QNX we need to be called back again for creating the egl images + else { + // Internal mechanism to call back the surface renderer from the QtQuick render thread + QObject *obj = m_surface->property("_q_GLThreadCallback").value(); + if (obj) { + QEvent ev(static_cast(QEvent::User + 1)); + obj->event(&ev); + } + } +#endif if (m_frameChanged) { if (videoNode && videoNode->pixelFormat() != m_frame.pixelFormat()) { -- cgit v1.2.3