Complete Yocto mirror with license table for TQMa6UL (2038-compliance)

- 264 license table entries with exact download URLs (224/264 resolved)
- Complete sources/ directory with all BitBake recipes
- Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl)
- Full traceability for Softwarefreigabeantrag
- GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4
- License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
Siggi (OpenClaw Agent)
2026-03-01 20:58:18 +00:00
commit 16accb6b24
15086 changed files with 1292356 additions and 0 deletions

View File

@@ -0,0 +1 @@
include qt4-imx-support.inc

View File

@@ -0,0 +1,30 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/qt4:"
python __anonymous () {
families = ['mx6']
cur_families = (d.getVar('MACHINEOVERRIDES') or '').split(':')
if any(map(lambda x: x in cur_families,
families)):
d.appendVarFlag('do_configure', 'depends', ' virtual/kernel:do_shared_workdir')
}
SRC_URI:append:imxgpu2d = " \
file://0001-Add-support-for-i.MX-codecs-to-phonon.patch \
file://0002-i.MX-video-renderer-Allow-v4l-device-from-environmen.patch \
file://0003-i.MX6-force-egl-visual-ID-33.patch \
file://0001-config.tests-add-DEFINES-to-compile-egl-test-with-im.patch \
file://0002-config.tests-add-DEFINES-to-compile-egl4gles1-test-w.patch \
"
DEPENDS:append:imxgpu2d = " virtual/kernel virtual/libgles2"
QT_GLFLAGS:imxgpu2d = "-opengl es2 -openvg"
QT_CONFIG_FLAGS:append:imxgpu2d = " -I${STAGING_KERNEL_DIR}/include/uapi \
-I${STAGING_KERNEL_DIR}/include/ \
-DLINUX=1 -DEGL_API_FB=1 \
-DQT_QPA_EXPERIMENTAL_TOUCHEVENT=1"
# The QT_CONFIG_FLAGS can pollute *.la files with -Dxxx
do_compile:append:mx6-nxp-bsp () {
find lib -name "*.la" | xargs -n1 sed -i 's/-D.*=1//g'
}

View File

@@ -0,0 +1 @@
include qt4-imx-support.inc

View File

@@ -0,0 +1,469 @@
From 2ff5682e42771519757756dedbf27b7a9e8e25d9 Mon Sep 17 00:00:00 2001
From: Rogerio Pimentel <rogerio.pimentel@freescale.com>
Date: Tue, 24 Jul 2012 13:47:01 -0300
Subject: [PATCH] Add support for i.MX codecs to phonon
Add support for i.MX codecs to phonon
Upstream-Status: Pending
Signed-off-by: Daniele Dall'Acqua <daniele.d@freescale.com>
Signed-off-by: Rogerio Pimentel <rogerio.pimentel@freescale.com>
---
src/3rdparty/phonon/gstreamer/abstractrenderer.h | 1 +
src/3rdparty/phonon/gstreamer/mediaobject.cpp | 4 +
src/3rdparty/phonon/gstreamer/videowidget.cpp | 60 ++------
src/3rdparty/phonon/gstreamer/videowidget.h | 1 +
src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | 169 ++++++++++++++--------
src/3rdparty/phonon/gstreamer/widgetrenderer.h | 17 ++-
src/3rdparty/phonon/gstreamer/x11renderer.cpp | 22 +---
7 files changed, 141 insertions(+), 133 deletions(-)
diff --git a/src/3rdparty/phonon/gstreamer/abstractrenderer.h b/src/3rdparty/phonon/gstreamer/abstractrenderer.h
index 10a2822..fa0d87d 100644
--- a/src/3rdparty/phonon/gstreamer/abstractrenderer.h
+++ b/src/3rdparty/phonon/gstreamer/abstractrenderer.h
@@ -49,6 +49,7 @@ public:
virtual bool eventFilter(QEvent *) = 0;
virtual void handlePaint(QPaintEvent *) {}
virtual bool paintsOnWidget() { return true; } // Controls overlays
+ virtual void handleMove(QMoveEvent * event ) {};
protected:
VideoWidget *m_videoWidget;
diff --git a/src/3rdparty/phonon/gstreamer/mediaobject.cpp b/src/3rdparty/phonon/gstreamer/mediaobject.cpp
index 23a60c0..f806d64 100644
--- a/src/3rdparty/phonon/gstreamer/mediaobject.cpp
+++ b/src/3rdparty/phonon/gstreamer/mediaobject.cpp
@@ -515,6 +515,9 @@ void MediaObject::createPipeline()
// reduce buffer overruns as these are not gracefully handled at the moment.
m_audioPipe = gst_element_factory_make("queue", NULL);
g_object_set(G_OBJECT(m_audioPipe), "max-size-time", MAX_QUEUE_TIME, (const char*)NULL);
+ g_object_set(G_OBJECT(m_audioPipe), "max-size-time", 0, (const char*)NULL);
+ g_object_set(G_OBJECT(m_audioPipe), "max-size-buffers", 0, (const char*)NULL);
+ g_object_set(G_OBJECT(m_audioPipe), "max-size-bytes", 0, (const char*)NULL);
gst_bin_add(GST_BIN(m_audioGraph), m_audioPipe);
GstPad *audiopad = gst_element_get_pad (m_audioPipe, "sink");
gst_element_add_pad (m_audioGraph, gst_ghost_pad_new ("sink", audiopad));
@@ -527,6 +530,7 @@ void MediaObject::createPipeline()
m_videoPipe = gst_element_factory_make("queue", NULL);
g_object_set(G_OBJECT(m_videoPipe), "max-size-time", MAX_QUEUE_TIME, (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoPipe), "max-size-time", 33000, (const char*)NULL);
gst_bin_add(GST_BIN(m_videoGraph), m_videoPipe);
GstPad *videopad = gst_element_get_pad (m_videoPipe, "sink");
gst_element_add_pad (m_videoGraph, gst_ghost_pad_new ("sink", videopad));
diff --git a/src/3rdparty/phonon/gstreamer/videowidget.cpp b/src/3rdparty/phonon/gstreamer/videowidget.cpp
index a4c6f79..3682d3f 100644
--- a/src/3rdparty/phonon/gstreamer/videowidget.cpp
+++ b/src/3rdparty/phonon/gstreamer/videowidget.cpp
@@ -83,50 +83,16 @@ void VideoWidget::setupVideoBin()
Q_ASSERT(m_videoBin);
gst_object_ref (GST_OBJECT (m_videoBin)); //Take ownership
gst_object_sink (GST_OBJECT (m_videoBin));
-
- //The videoplug element is the final element before the pluggable videosink
- m_videoplug = gst_element_factory_make ("identity", NULL);
-
- //Colorspace ensures that the output of the stream matches the input format accepted by our video sink
- m_colorspace = gst_element_factory_make ("ffmpegcolorspace", NULL);
-
- //Video scale is used to prepare the correct aspect ratio and scale.
- GstElement *videoScale = gst_element_factory_make ("videoscale", NULL);
-
- //We need a queue to support the tee from parent node
- GstElement *queue = gst_element_factory_make ("queue", NULL);
-
- if (queue && m_videoBin && videoScale && m_colorspace && videoSink && m_videoplug) {
- //Ensure that the bare essentials are prepared
- gst_bin_add_many (GST_BIN (m_videoBin), queue, m_colorspace, m_videoplug, videoScale, videoSink, (const char*)NULL);
- bool success = false;
- //Video balance controls color/sat/hue in the YUV colorspace
- m_videoBalance = gst_element_factory_make ("videobalance", NULL);
- if (m_videoBalance) {
- // For video balance to work we have to first ensure that the video is in YUV colorspace,
- // then hand it off to the videobalance filter before finally converting it back to RGB.
- // Hence we nede a videoFilter to convert the colorspace before and after videobalance
- GstElement *m_colorspace2 = gst_element_factory_make ("ffmpegcolorspace", NULL);
- gst_bin_add_many(GST_BIN(m_videoBin), m_videoBalance, m_colorspace2, (const char*)NULL);
- success = gst_element_link_many(queue, m_colorspace, m_videoBalance, m_colorspace2, videoScale, m_videoplug, videoSink, (const char*)NULL);
- } else {
- //If video balance is not available, just connect to sink directly
- success = gst_element_link_many(queue, m_colorspace, videoScale, m_videoplug, videoSink, (const char*)NULL);
- }
-
- if (success) {
- GstPad *videopad = gst_element_get_pad (queue, "sink");
- gst_element_add_pad (m_videoBin, gst_ghost_pad_new ("sink", videopad));
- gst_object_unref (videopad);
-#ifndef Q_WS_QPA
- QWidget *parentWidget = qobject_cast<QWidget*>(parent());
- if (parentWidget)
- parentWidget->winId(); // Due to some existing issues with alien in 4.4,
- // we must currently force the creation of a parent widget.
-#endif
- m_isValid = true; //initialization ok, accept input
- }
- }
+ gst_bin_add_many (GST_BIN (m_videoBin), videoSink, NULL);
+ GstPad *videopad = gst_element_get_pad (videoSink,"sink");
+ gst_element_add_pad (m_videoBin, gst_ghost_pad_new ("sink", videopad));
+ gst_object_unref (videopad);
+ QWidget *parentWidget = qobject_cast<QWidget*>(parent());
+
+ if (parentWidget)
+ parentWidget->winId(); // Due to some existing issues with alien in 4.4,
+ // we must currently force the creation of a parent widget.
+ m_isValid = true; //initialization ok, accept input
}
void VideoWidget::paintEvent(QPaintEvent *event)
@@ -135,6 +101,12 @@ void VideoWidget::paintEvent(QPaintEvent *event)
m_renderer->handlePaint(event);
}
+void VideoWidget::moveEvent(QMoveEvent * event )
+{
+ Q_ASSERT(m_renderer);
+ m_renderer->handleMove(event);
+}
+
void VideoWidget::setVisible(bool val) {
Q_ASSERT(m_renderer);
diff --git a/src/3rdparty/phonon/gstreamer/videowidget.h b/src/3rdparty/phonon/gstreamer/videowidget.h
index 8603f6a..38c7b17 100644
--- a/src/3rdparty/phonon/gstreamer/videowidget.h
+++ b/src/3rdparty/phonon/gstreamer/videowidget.h
@@ -65,6 +65,7 @@ public:
qreal saturation() const;
void setSaturation(qreal);
void setMovieSize(const QSize &size);
+ void moveEvent(QMoveEvent * event );
QSize sizeHint() const;
QRect scaleToAspect(QRect srcRect, int w, int h) const;
QRect calculateDrawFrameRect() const;
diff --git a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
index 423af9d..aa4925a 100644
--- a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
+++ b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
@@ -15,7 +15,9 @@
along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <QMouseEvent>
#include <QtGui/QPainter>
+#include <QPaintEvent>
#include <gst/gst.h>
#include "common.h"
#include "message.h"
@@ -24,6 +26,18 @@
#include "widgetrenderer.h"
#include "qrgb.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
+#include <linux/mxcfb.h>
+
+#define MXCFB_GBL_ALPHA 255
+#define MXCFB_CLR_KEY 0x00000000 // ARGB8888
+
// support old OpenGL installations (1.2)
// assume that if TEXTURE0 isn't defined, none are
#ifndef GL_TEXTURE0
@@ -35,26 +49,6 @@
#ifndef QT_NO_PHONON_VIDEO
QT_BEGIN_NAMESPACE
-static void frameRendered()
-{
- static QString displayFps = qgetenv("PHONON_GST_FPS");
- if (displayFps.isEmpty())
- return;
-
- static int frames = 0;
- static QTime lastTime = QTime::currentTime();
- QTime time = QTime::currentTime();
-
- int delta = lastTime.msecsTo(time);
- if (delta > 2000) {
- printf("FPS: %f\n", 1000.0 * frames / qreal(delta));
- lastTime = time;
- frames = 0;
- }
-
- ++frames;
-}
-
namespace Phonon
{
namespace Gstreamer
@@ -62,17 +56,11 @@ namespace Gstreamer
WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget)
: AbstractRenderer(videoWidget)
- , m_width(0)
- , m_height(0)
{
- videoWidget->backend()->logMessage("Creating QWidget renderer");
- if ((m_videoSink = GST_ELEMENT(g_object_new(get_type_RGB(), NULL)))) {
- gst_object_ref (GST_OBJECT (m_videoSink)); //Take ownership
+ if ((m_videoSink = gst_element_factory_make("mfw_v4lsink", NULL)) && m_videoSink != NULL) {
+
+ gst_object_ref (GST_OBJECT (m_videoSink)); //Take ownership
gst_object_sink (GST_OBJECT (m_videoSink));
-
- QWidgetVideoSinkBase* sink = reinterpret_cast<QWidgetVideoSinkBase*>(m_videoSink);
- // Let the videosink know which widget to direct frame updates to
- sink->renderWidget = videoWidget;
}
// Clear the background with black by default
@@ -84,67 +72,124 @@ WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget)
m_videoWidget->setAttribute(Qt::WA_PaintOnScreen, false);
}
-void WidgetRenderer::setNextFrame(const QByteArray &array, int w, int h)
+WidgetRenderer::~WidgetRenderer()
{
- if (m_videoWidget->root()->state() == Phonon::LoadingState)
- return;
-
- m_frame = QImage();
- {
- m_frame = QImage((uchar *)array.constData(), w, h, QImage::Format_RGB32);
- }
+ if (m_videoSink) {
+ gst_object_unref (GST_OBJECT (m_videoSink));
+ m_videoSink = 0;
+ }
+}
- m_array = array;
- m_width = w;
- m_height = h;
+void WidgetRenderer::setVideoSize(void)
+{
- m_videoWidget->update();
+ int adj_x;
+ int adj_y;
+
+ QSize wSize = m_videoWidget->size();
+ m_drawFrameRect = m_videoWidget->calculateDrawFrameRect();
+ framePos = m_videoWidget->mapToGlobal(QPoint(0,0));
+
+ //Center the video in the widget
+
+ adj_x = (wSize.width()/2) - (m_drawFrameRect.width()/2);
+ adj_y = (wSize.height()/2) - (m_drawFrameRect.height()/2);
+ g_object_set(G_OBJECT(m_videoSink), "axis-left",adj_x + framePos.x(),(const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "axis-top", adj_y + framePos.y(), (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "disp-width", m_drawFrameRect.width(), (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "disp-height", m_drawFrameRect.height(), (const char*)NULL);
+ g_object_set(G_OBJECT(m_videoSink), "setpara", 1, (const char*)NULL);
}
void WidgetRenderer::handleMediaNodeEvent(const MediaNodeEvent *event)
{
switch (event->type()) {
- case MediaNodeEvent::SourceChanged:
- {
- clearFrame();
- break;
- }
default:
break;
}
}
-void WidgetRenderer::clearFrame()
+void WidgetRenderer::handlePaint(QPaintEvent *event)
{
- m_frame = QImage();
- m_array = QByteArray();
- m_videoWidget->update();
+ Q_UNUSED(event);
+ QPainter painter(m_videoWidget);
+ painter.fillRect(m_videoWidget->rect(), m_videoWidget->palette().background());
}
-const QImage &WidgetRenderer::currentFrame() const
+int WidgetRenderer::setOverlay(void)
{
- return m_frame;
+ struct mxcfb_color_key color_key;
+ struct mxcfb_gbl_alpha alpha;
+ int fd_fb;
+
+ if ((fd_fb = open("/dev/fb0", O_RDWR, 0)) < 0)
+ {
+ printf("Unable to open %s\n", "/dev/fb0");
+ return -1;
+
+ }
+
+ alpha.alpha = MXCFB_GBL_ALPHA;
+ alpha.enable = 1;
+
+ if (ioctl(fd_fb, MXCFB_SET_GBL_ALPHA, &alpha) < 0) {
+ printf("Error in applying Alpha\n");
+ }
+
+ color_key.color_key = MXCFB_CLR_KEY & 0x00FFFFFF;
+ color_key.enable = 1;
+ if ( ioctl(fd_fb, MXCFB_SET_CLR_KEY, &color_key) < 0) {
+
+ printf("Error in applying Color Key\n");
+ return -1;
+ }
+
+ close (fd_fb);
+
+ return 0;
}
-void WidgetRenderer::handlePaint(QPaintEvent *event)
+void WidgetRenderer::handleMove( QMoveEvent * event)
{
- Q_UNUSED(event);
- QPainter painter(m_videoWidget);
- m_drawFrameRect = m_videoWidget->calculateDrawFrameRect();
- painter.drawImage(drawFrameRect(), currentFrame());
- frameRendered();
+ Q_UNUSED(event);
+
+ if (framePos != m_videoWidget->mapToGlobal(QPoint(0,0)))
+ setVideoSize();
}
bool WidgetRenderer::eventFilter(QEvent * event)
{
- if (event->type() == QEvent::User) {
- NewFrameEvent *frameEvent= static_cast <NewFrameEvent *>(event);
- setNextFrame(frameEvent->frame, frameEvent->width, frameEvent->height);
- return true;
+ if (event->type() == QEvent::Show) {
+
+ setOverlay();
+ return true;
+
+ } else if (event->type() == QEvent::Resize) {
+
+ setVideoSize();
+ return true;
}
+ if (framePos != m_videoWidget->mapToGlobal(QPoint(0,0)))
+ setVideoSize();
return false;
}
+void WidgetRenderer::aspectRatioChanged(Phonon::VideoWidget::AspectRatio)
+{
+ setVideoSize();
+}
+
+void WidgetRenderer::scaleModeChanged(Phonon::VideoWidget::ScaleMode)
+{
+ setVideoSize();
+}
+
+void WidgetRenderer::movieSizeChanged(const QSize &movieSize)
+{
+ Q_UNUSED(movieSize);
+ setVideoSize();
+}
+
}
} //namespace Phonon::Gstreamer
diff --git a/src/3rdparty/phonon/gstreamer/widgetrenderer.h b/src/3rdparty/phonon/gstreamer/widgetrenderer.h
index 03ee9c0..6de1a03 100644
--- a/src/3rdparty/phonon/gstreamer/widgetrenderer.h
+++ b/src/3rdparty/phonon/gstreamer/widgetrenderer.h
@@ -40,20 +40,21 @@ class WidgetRenderer : public AbstractRenderer
{
public:
WidgetRenderer(VideoWidget *videoWidget);
+ ~WidgetRenderer(void);
bool eventFilter(QEvent * event);
void handlePaint(QPaintEvent *paintEvent);
void handleMediaNodeEvent(const MediaNodeEvent *event);
- const QImage& currentFrame() const;
QRect drawFrameRect() const { return m_drawFrameRect; }
- void setNextFrame(const QByteArray &array, int width, int height);
- bool frameIsSet() { return !m_array.isNull(); }
- void clearFrame();
+ void aspectRatioChanged(Phonon::VideoWidget::AspectRatio aspectRatio);
+ void scaleModeChanged(Phonon::VideoWidget::ScaleMode scaleMode);
+ void movieSizeChanged(const QSize &movieSize);
+ void setVideoSize(void);
+ int setOverlay(void);
+ void handleMove(QMoveEvent* event);
private:
- mutable QImage m_frame;
- QByteArray m_array;
- int m_width;
- int m_height;
+ void paintEvent ( QPaintEvent * event );
QRect m_drawFrameRect;
+ QPoint framePos;
};
}
diff --git a/src/3rdparty/phonon/gstreamer/x11renderer.cpp b/src/3rdparty/phonon/gstreamer/x11renderer.cpp
index 968f3a8..c4662e7 100644
--- a/src/3rdparty/phonon/gstreamer/x11renderer.cpp
+++ b/src/3rdparty/phonon/gstreamer/x11renderer.cpp
@@ -31,6 +31,8 @@
#include "mediaobject.h"
#include "message.h"
+#define FSL_GSTREAMER 1
+
QT_BEGIN_NAMESPACE
namespace Phonon
@@ -78,31 +80,16 @@ X11Renderer::~X11Renderer()
{
m_renderWidget->setAttribute(Qt::WA_PaintOnScreen, false);
m_renderWidget->setAttribute(Qt::WA_NoSystemBackground, false);
+ if (m_videoSink) {
+ gst_object_unref (GST_OBJECT (m_videoSink));
+ }
delete m_renderWidget;
}
GstElement* X11Renderer::createVideoSink()
{
- GstElement *videoSink = gst_element_factory_make ("xvimagesink", NULL);
- if (videoSink) {
- // Check if the xv sink is usable
- if (gst_element_set_state(videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) {
- gst_object_unref(GST_OBJECT(videoSink));
- videoSink = 0;
- } else {
- // Note that this should not really be necessary as these are
- // default values, though under certain conditions values are retained
- // even between application instances. (reproducible on 0.10.16/Gutsy)
- g_object_set(G_OBJECT(videoSink), "brightness", 0, (const char*)NULL);
- g_object_set(G_OBJECT(videoSink), "contrast", 0, (const char*)NULL);
- g_object_set(G_OBJECT(videoSink), "hue", 0, (const char*)NULL);
- g_object_set(G_OBJECT(videoSink), "saturation", 0, (const char*)NULL);
- }
- }
-
- if (!videoSink)
- videoSink = gst_element_factory_make ("ximagesink", NULL);
+ GstElement *videoSink = gst_element_factory_make ("mfw_v4lsink", NULL);
gst_object_ref (GST_OBJECT (videoSink)); //Take ownership
gst_object_sink (GST_OBJECT (videoSink));
--
1.7.1

View File

@@ -0,0 +1,26 @@
From 234580de9d63fd79a8b444358cdaeac111a17061 Mon Sep 17 00:00:00 2001
From: Mauro Salvini <m.salvini@koansoftware.com>
Date: Thu, 29 Sep 2022 16:06:04 +0200
Subject: [PATCH 1/2] config.tests: add DEFINES to compile egl test with
imxgpu2d (Vivante)
Upstream-Status: Pending
Signed-off-by: Mauro Salvini <m.salvini@koansoftware.com>
---
config.tests/unix/egl/egl.pro | 1 +
1 file changed, 1 insertion(+)
diff --git a/config.tests/unix/egl/egl.pro b/config.tests/unix/egl/egl.pro
index f04d0535..bc35b908 100644
--- a/config.tests/unix/egl/egl.pro
+++ b/config.tests/unix/egl/egl.pro
@@ -6,5 +6,6 @@ for(p, QMAKE_LIBDIR_EGL) {
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
!isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL
+DEFINES += LINUX=1 EGL_API_FB=1
CONFIG -= qt
--
2.17.1

View File

@@ -0,0 +1,26 @@
From adb19c68d3c92eb1a88e49e447ce827f14943486 Mon Sep 17 00:00:00 2001
From: Mauro Salvini <m.salvini@koansoftware.com>
Date: Thu, 29 Sep 2022 16:12:11 +0200
Subject: [PATCH 2/2] config.tests: add DEFINES to compile egl4gles1 test with
imxgpu2d (Vivante)
Upstream-Status: Pending
Signed-off-by: Mauro Salvini <m.salvini@koansoftware.com>
---
config.tests/unix/egl4gles1/egl4gles1.pro | 1 +
1 file changed, 1 insertion(+)
diff --git a/config.tests/unix/egl4gles1/egl4gles1.pro b/config.tests/unix/egl4gles1/egl4gles1.pro
index 667ea8e3..14cb4a76 100644
--- a/config.tests/unix/egl4gles1/egl4gles1.pro
+++ b/config.tests/unix/egl4gles1/egl4gles1.pro
@@ -6,5 +6,6 @@ for(p, QMAKE_LIBDIR_EGL) {
!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL
!isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL
+DEFINES += LINUX=1 EGL_API_FB=1
CONFIG -= qt
--
2.17.1

View File

@@ -0,0 +1,47 @@
From 023befba9aad60ef58177fd987a6aa40c357b2b2 Mon Sep 17 00:00:00 2001
From: Eric Nelson <eric.nelson@boundarydevices.com>
Date: Fri, 16 Aug 2013 11:42:23 -0700
Subject: [PATCH] i.MX video renderer: Allow v4l device from environment
The i.MX6 supports multiple IPUs and multiple V4L2 output
devices for each.
Devices are numbered starting with /dev/video16 and defined
for each configured display. In general, /dev/video16 will
correspond to the RGB (background) layer for /dev/fb0.
If a display is the first on an IPU, an additional V4L2
output will be defined that corresponds to the normally
YUV overlay (foreground) layer.
This patch allows association of the proper device for
a particular session for use in multi-headed applications.
The default is /dev/video17:
export v4lsinkdev=/dev/video17
Upstream-Status: Pending
Signed-off-by: Eric Nelson <eric.nelson@boundarydevices.com>
---
src/3rdparty/phonon/gstreamer/widgetrenderer.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
index aa4925a..a502ccd 100644
--- a/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
+++ b/src/3rdparty/phonon/gstreamer/widgetrenderer.cpp
@@ -58,9 +58,12 @@ WidgetRenderer::WidgetRenderer(VideoWidget *videoWidget)
: AbstractRenderer(videoWidget)
{
if ((m_videoSink = gst_element_factory_make("mfw_v4lsink", NULL)) && m_videoSink != NULL) {
-
+ char *videodev;
gst_object_ref (GST_OBJECT (m_videoSink)); //Take ownership
gst_object_sink (GST_OBJECT (m_videoSink));
+ videodev=getenv("v4lsinkdev");
+ if (videodev)
+ g_object_set (G_OBJECT (m_videoSink), "device", videodev, NULL);
}
// Clear the background with black by default
--
1.8.1.2

View File

@@ -0,0 +1,35 @@
From: Javier Viguera <javier.viguera@digi.com>
Date: Mon, 3 Mar 2014 17:10:41 +0100
Subject: [PATCH] i.MX6: force egl visual ID 33
Workaround mismatch between EGL binary libraries and QT for FSL MX6
based platforms.
Error:
Warning: EGL suggested using X Visual ID 33 (ARGB0888) for EGL config 28 (ARGB0444), but this is incompatable
Unable to find an X11 visual which matches EGL config 28
Patch adapted from:
http://wiki.wandboard.org/index.php/Integrate_Qt5_into_yocto_sato_image_on_Wandboard
Upstream-Status: Inappropriate [workaround]
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
src/gui/egl/qegl_x11.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/gui/egl/qegl_x11.cpp b/src/gui/egl/qegl_x11.cpp
index 196d0f77bf2d..8acf5a6c99d4 100644
--- a/src/gui/egl/qegl_x11.cpp
+++ b/src/gui/egl/qegl_x11.cpp
@@ -319,7 +319,7 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
}
qWarning("Unable to find an X11 visual which matches EGL config %d", configId);
- return (VisualID)0;
+ return (VisualID)33;
}
void qt_set_winid_on_widget(QWidget* w, Qt::HANDLE id)

View File

@@ -0,0 +1,40 @@
#
# qmake configuration for common gcc
#
QMAKE_COMPILER = gcc
QMAKE_CC = $(OE_QMAKE_CC)
QMAKE_CFLAGS += $(OE_QMAKE_CFLAGS) -DLINUX=1 -DEGL_API_FB=1
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $(OE_QMAKE_CFLAGS)
QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
QMAKE_CXX = $(OE_QMAKE_CXX)
QMAKE_CXXFLAGS += $(OE_QMAKE_CXXFLAGS) -DLINUX=1 -DEGL_API_FB=1
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
QMAKE_LINK = $(OE_QMAKE_LINK)
QMAKE_LINK_SHLIB = $(OE_QMAKE_LINK)
QMAKE_LINK_C = $(OE_QMAKE_LINK)
QMAKE_LINK_C_SHLIB = $(OE_QMAKE_LINK)
QMAKE_LFLAGS += $(OE_QMAKE_LDFLAGS)
QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
QMAKE_LFLAGS_RPATH = -Wl,-rpath-link,
QMAKE_PCH_OUTPUT_EXT = .gch
# -Bsymbolic-functions (ld) support
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
# do not depend on gdb
CONFIG -= gdb_dwarf_index
# some linking helper...
CONFIG += rpath_libdirs
# for the SDK
isEmpty(QMAKE_QT_CONFIG):QMAKE_QT_CONFIG = $(OE_QMAKE_QT_CONFIG)

View File

@@ -0,0 +1,66 @@
#
# qmake configuration for common linux
#
QMAKE_CFLAGS_THREAD += -D_REENTRANT
QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
QMAKE_INCDIR =
QMAKE_LIBDIR =
QMAKE_INCDIR_X11 =
QMAKE_LIBDIR_X11 =
QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
QMAKE_INCDIR_OPENGL =
QMAKE_LIBDIR_OPENGL =
QMAKE_INCDIR_OPENGL_ES1 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
QMAKE_INCDIR_EGL =
QMAKE_LIBDIR_EGL =
QMAKE_INCDIR_OPENVG =
QMAKE_LIBDIR_OPENVG =
QMAKE_LIBS =
QMAKE_LIBS_DYNLOAD = -ldl
QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
QMAKE_LIBS_NIS = -lnsl
QMAKE_LIBS_EGL = -lEGL -lGAL -DLINUX=1 -DEGL_API_FB=1
QMAKE_LIBS_OPENGL = -lGL
QMAKE_LIBS_OPENGL_QT = -lGL
QMAKE_LIBS_OPENGL_ES1 = -lGLES_CM
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 -lGAL -lEGL -DLINUX=1 -DEGL_API_FB=1
QMAKE_LIBS_OPENVG = -lOpenVG -lGAL -lEGL -DLINUX=1 -DEGL_API_FB=1
QMAKE_LIBS_THREAD = -lpthread
QMAKE_MOC = $(OE_QMAKE_MOC)
QMAKE_UIC = $(OE_QMAKE_UIC)
QMAKE_UIC3 = $(OE_QMAKE_UIC3)
QMAKE_RCC = $(OE_QMAKE_RCC)
QMAKE_QDBUSCPP2XML = $(OE_QMAKE_QDBUSCPP2XML)
QMAKE_QDBUSXML2CPP = $(OE_QMAKE_QDBUSXML2CPP)
QMAKE_AR = $(OE_QMAKE_AR) cqs
QMAKE_OBJCOPY = objcopy
QMAKE_RANLIB =
QMAKE_TAR = tar -cf
QMAKE_GZIP = gzip -9f
QMAKE_COPY = cp -f
QMAKE_COPY_FILE = $(COPY)
QMAKE_COPY_DIR = $(COPY) -r
QMAKE_MOVE = mv -f
QMAKE_DEL_FILE = rm -f
QMAKE_DEL_DIR = rmdir
QMAKE_STRIP = $(OE_QMAKE_STRIP)
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
QMAKE_CHK_DIR_EXISTS = test -d
QMAKE_MKDIR = mkdir -p
QMAKE_INSTALL_FILE = install -m 644 -p
QMAKE_INSTALL_PROGRAM = install -m 755 -p
include(unix.conf)