summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Rabbe <jonas.rabbe@nokia.com>2011-12-09 11:45:11 +1000
committerQt by Nokia <qt-info@nokia.com>2011-12-13 01:22:28 +0100
commit4f3294930af1ea4350bc8dd5225afd17591f16cd (patch)
tree9d941147930f09cf568884030783a0a4dbaff11e
parent9d526fca670ba90c8ad433f60bd94f9b9975e18d (diff)
Fix X11 and QPA compilation problems
The X11 buffer pool was using outdated APIs, and as the 'qpa' configuration value is being removed, it caused the X11 code to be pulled in, and therefore cause compilation failures. Change-Id: I5fdaed854c6525716fccca44b5fbd0b850880cb9 Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
-rw-r--r--config.tests/xvideo/main.cpp53
-rw-r--r--config.tests/xvideo/xvideo.pro16
-rw-r--r--src/gsttools/gsttools.pro6
-rw-r--r--src/gsttools/qgstxvimagebuffer.cpp41
-rw-r--r--src/gsttools/qvideosurfacegstsink.cpp5
-rw-r--r--src/multimedia/gsttools_headers/qgstxvimagebuffer_p.h16
-rw-r--r--src/multimedia/gsttools_headers/qvideosurfacegstsink_p.h2
-rw-r--r--src/plugins/gstreamer/camerabin/camerabinservice.cpp2
-rw-r--r--src/plugins/gstreamer/gstreamer.pro4
-rw-r--r--src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp2
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp2
-rw-r--r--src/plugins/gstreamer/qgstreamervideooverlay.cpp6
-rw-r--r--src/plugins/gstreamer/qgstreamervideooverlay.h4
-rw-r--r--src/plugins/gstreamer/qgstreamervideowindow.cpp5
-rw-r--r--src/plugins/gstreamer/qgstreamervideowindow.h4
-rw-r--r--src/plugins/gstreamer/qx11videosurface.cpp51
-rw-r--r--src/plugins/gstreamer/qx11videosurface.h8
-rw-r--r--sync.profile1
18 files changed, 150 insertions, 78 deletions
diff --git a/config.tests/xvideo/main.cpp b/config.tests/xvideo/main.cpp
new file mode 100644
index 000000000..b74641a71
--- /dev/null
+++ b/config.tests/xvideo/main.cpp
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Multimedia module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <X11/Xlib.h>
+#include <X11/extensions/Xv.h>
+#include <X11/extensions/Xvlib.h>
+
+int main(int argc, char** argv)
+{
+ unsigned int count = 0;
+ XvAdaptorInfo *adaptors = 0;
+ XvQueryAdaptors(0, 0, &count, &adaptors);
+ return 0;
+}
+
diff --git a/config.tests/xvideo/xvideo.pro b/config.tests/xvideo/xvideo.pro
new file mode 100644
index 000000000..749091eba
--- /dev/null
+++ b/config.tests/xvideo/xvideo.pro
@@ -0,0 +1,16 @@
+TEMPLATE = app
+DEPENDPATH += .
+INCLUDEPATH += .
+
+requires(unix)
+
+# Input
+SOURCES += main.cpp
+
+CONFIG += link_pkgconfig
+
+PKGCONFIG += \
+ x11 \
+ xext \
+ xv
+
diff --git a/src/gsttools/gsttools.pro b/src/gsttools/gsttools.pro
index c972058ba..fef65aebf 100644
--- a/src/gsttools/gsttools.pro
+++ b/src/gsttools/gsttools.pro
@@ -43,7 +43,6 @@ PRIVATE_HEADERS += \
qgstvideobuffer_p.h \
qvideosurfacegstsink_p.h \
-
SOURCES += \
qgstbufferpoolinterface.cpp \
qgstreamerbushelper.cpp \
@@ -52,13 +51,14 @@ SOURCES += \
qgstvideobuffer.cpp \
qvideosurfacegstsink.cpp \
-!win32:!contains(QT_CONFIG,embedded):!mac:!simulator:!contains(QT_CONFIG, qpa) {
+contains(config_test_xvideo, yes) {
+ DEFINES += HAVE_XVIDEO
+
LIBS += -lXv -lX11 -lXext
PRIVATE_HEADERS += \
qgstxvimagebuffer_p.h \
-
SOURCES += \
qgstxvimagebuffer.cpp \
}
diff --git a/src/gsttools/qgstxvimagebuffer.cpp b/src/gsttools/qgstxvimagebuffer.cpp
index eb28999fc..82217d397 100644
--- a/src/gsttools/qgstxvimagebuffer.cpp
+++ b/src/gsttools/qgstxvimagebuffer.cpp
@@ -42,14 +42,14 @@
#include <QtCore/qdebug.h>
#include <QtCore/qthread.h>
#include <QtCore/qvariant.h>
-#include <QtWidgets/qx11info_x11.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qwindow.h>
+#include <QtGui/qplatformnativeinterface_qpa.h>
#include "qgstxvimagebuffer_p.h"
#include "qvideosurfacegstsink_p.h"
#include "qgstvideobuffer_p.h"
-#ifndef QT_NO_XVIDEO
-
QT_BEGIN_NAMESPACE
GstBufferClass *QGstXvImageBuffer::parent_class = NULL;
@@ -182,6 +182,11 @@ QAbstractVideoBuffer *QGstXvImageBufferPool::prepareVideoBuffer(GstBuffer *buffe
return new QGstVideoBuffer(buffer, bytesPerLine, QAbstractVideoBuffer::XvShmImageHandle, handle);
}
+QStringList QGstXvImageBufferPool::keys() const
+{
+ return QStringList() << QGstBufferPoolPluginKey;
+}
+
void QGstXvImageBufferPool::queuedAlloc()
{
QMutexLocker lock(&m_poolMutex);
@@ -194,7 +199,7 @@ void QGstXvImageBufferPool::doAlloc()
//should be always called from the main thread with m_poolMutex locked
//Q_ASSERT(QThread::currentThread() == thread());
- XSync(QX11Info::display(), false);
+ XSync(display(), false);
QGstXvImageBuffer *xvBuffer = (QGstXvImageBuffer *)gst_mini_object_new(QGstXvImageBuffer::get_type());
@@ -202,7 +207,7 @@ void QGstXvImageBufferPool::doAlloc()
int xvFormatId = m_format.property("xvFormatId").toInt();
xvBuffer->xvImage = XvShmCreateImage(
- QX11Info::display(),
+ display(),
portId,
xvFormatId,
0,
@@ -216,18 +221,18 @@ void QGstXvImageBufferPool::doAlloc()
return;
}
- XSync(QX11Info::display(), false);
+ XSync(display(), false);
xvBuffer->shmInfo.shmid = shmget(IPC_PRIVATE, xvBuffer->xvImage->data_size, IPC_CREAT | 0777);
xvBuffer->shmInfo.shmaddr = xvBuffer->xvImage->data = (char*)shmat(xvBuffer->shmInfo.shmid, 0, 0);
xvBuffer->shmInfo.readOnly = False;
- if (!XShmAttach(QX11Info::display(), &xvBuffer->shmInfo)) {
+ if (!XShmAttach(display(), &xvBuffer->shmInfo)) {
qWarning() << "QGstXvImageBufferPool: XShmAttach failed";
return;
}
- XSync(QX11Info::display(), false);
+ XSync(display(), false);
shmctl (xvBuffer->shmInfo.shmid, IPC_RMID, NULL);
@@ -240,7 +245,7 @@ void QGstXvImageBufferPool::doAlloc()
m_allBuffers.append(xvBuffer);
m_pool.append(xvBuffer);
- XSync(QX11Info::display(), false);
+ XSync(display(), false);
}
@@ -269,12 +274,12 @@ void QGstXvImageBufferPool::queuedDestroy()
{
QMutexLocker lock(&m_destroyMutex);
- XSync(QX11Info::display(), false);
+ XSync(display(), false);
foreach(XvShmImage xvImage, m_imagesToDestroy) {
if (xvImage.shmInfo.shmaddr != ((void *) -1)) {
- XShmDetach(QX11Info::display(), &xvImage.shmInfo);
- XSync(QX11Info::display(), false);
+ XShmDetach(display(), &xvImage.shmInfo);
+ XSync(display(), false);
shmdt(xvImage.shmInfo.shmaddr);
}
@@ -285,7 +290,7 @@ void QGstXvImageBufferPool::queuedDestroy()
m_imagesToDestroy.clear();
- XSync(QX11Info::display(), false);
+ XSync(display(), false);
}
void QGstXvImageBufferPool::recycleBuffer(QGstXvImageBuffer *xvBuffer)
@@ -309,7 +314,13 @@ void QGstXvImageBufferPool::destroyBuffer(QGstXvImageBuffer *xvBuffer)
QMetaObject::invokeMethod(this, "queuedDestroy", Qt::QueuedConnection);
}
-QT_END_NAMESPACE
+Display *QGstXvImageBufferPool::display() const
+{
+ QWindow *window = QGuiApplication::topLevelWindows().first();
+ Display *display = static_cast<Display *>(QGuiApplication::platformNativeInterface()->nativeResourceForWindow("Display", window));
+
+ return display;
+}
-#endif //QT_NO_XVIDEO
+QT_END_NAMESPACE
diff --git a/src/gsttools/qvideosurfacegstsink.cpp b/src/gsttools/qvideosurfacegstsink.cpp
index 545c37ead..ce69d78b3 100644
--- a/src/gsttools/qvideosurfacegstsink.cpp
+++ b/src/gsttools/qvideosurfacegstsink.cpp
@@ -49,8 +49,7 @@
#include <private/qmediapluginloader_p.h>
#include "qgstvideobuffer_p.h"
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
-#include <QtWidgets/qx11info_x11.h>
+#if defined(HAVE_XVIDEO)
#include "qgstxvimagebuffer_p.h"
#endif
@@ -77,7 +76,7 @@ QVideoSurfaceGstDelegate::QVideoSurfaceGstDelegate(
m_pools.append(plugin);
}
}
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
+#ifdef HAVE_XVIDEO
m_pools.append(new QGstXvImageBufferPool());
#endif
updateSupportedFormats();
diff --git a/src/multimedia/gsttools_headers/qgstxvimagebuffer_p.h b/src/multimedia/gsttools_headers/qgstxvimagebuffer_p.h
index 6fd7eb769..45f1953aa 100644
--- a/src/multimedia/gsttools_headers/qgstxvimagebuffer_p.h
+++ b/src/multimedia/gsttools_headers/qgstxvimagebuffer_p.h
@@ -59,8 +59,6 @@
#include <QtCore/qwaitcondition.h>
#include <QtCore/qqueue.h>
-#ifndef QT_NO_XVIDEO
-
#include <X11/Xlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
@@ -69,10 +67,11 @@
#include <X11/extensions/Xv.h>
#include <X11/extensions/Xvlib.h>
-
#include <gst/gst.h>
#include "qgstbufferpoolinterface_p.h"
+QT_BEGIN_NAMESPACE
+
class QGstXvImageBufferPool;
struct QGstXvImageBuffer {
@@ -92,8 +91,9 @@ struct QGstXvImageBuffer {
Q_DECLARE_METATYPE(XvImage*)
class QGstXvImageBufferPool : public QObject, public QGstBufferPoolInterface {
-Q_OBJECT
-friend class QGstXvImageBuffer;
+ Q_OBJECT
+ Q_INTERFACES(QGstBufferPoolInterface)
+ friend class QGstXvImageBuffer;
public:
QGstXvImageBufferPool(QObject *parent = 0);
virtual ~QGstXvImageBufferPool();
@@ -107,6 +107,8 @@ public:
QAbstractVideoBuffer::HandleType handleType() const;
QAbstractVideoBuffer *prepareVideoBuffer(GstBuffer *buffer, int bytesPerLine);
+ virtual QStringList keys() const;
+
private slots:
void queuedAlloc();
void queuedDestroy();
@@ -119,6 +121,8 @@ private slots:
private:
void doAlloc();
+ Display *display() const;
+
struct XvShmImage {
XvImage *xvImage;
XShmSegmentInfo shmInfo;
@@ -136,6 +140,6 @@ private:
Qt::HANDLE m_threadId;
};
-#endif //QT_NO_XVIDEO
+QT_END_NAMESPACE
#endif
diff --git a/src/multimedia/gsttools_headers/qvideosurfacegstsink_p.h b/src/multimedia/gsttools_headers/qvideosurfacegstsink_p.h
index 55147ef38..3aa865f7c 100644
--- a/src/multimedia/gsttools_headers/qvideosurfacegstsink_p.h
+++ b/src/multimedia/gsttools_headers/qvideosurfacegstsink_p.h
@@ -70,7 +70,7 @@ QT_BEGIN_NAMESPACE
class QAbstractVideoSurface;
QT_END_NAMESPACE
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
+#ifdef HAVE_XVIDEO
class QGstXvImageBuffer;
class QGstXvImageBufferPool;
#endif
diff --git a/src/plugins/gstreamer/camerabin/camerabinservice.cpp b/src/plugins/gstreamer/camerabin/camerabinservice.cpp
index f0aaca7b9..e230d40f9 100644
--- a/src/plugins/gstreamer/camerabin/camerabinservice.cpp
+++ b/src/plugins/gstreamer/camerabin/camerabinservice.cpp
@@ -114,7 +114,7 @@ CameraBinService::CameraBinService(const QString &service, QObject *parent):
m_videoRenderer = new QGstreamerVideoRenderer(this);
#endif
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
+#ifdef HAVE_XVIDEO
#ifdef Q_WS_MAEMO_6
m_videoWindow = new QGstreamerVideoWindow(this, "omapxvsink");
diff --git a/src/plugins/gstreamer/gstreamer.pro b/src/plugins/gstreamer/gstreamer.pro
index 28becfb5b..2cc0a0ee8 100644
--- a/src/plugins/gstreamer/gstreamer.pro
+++ b/src/plugins/gstreamer/gstreamer.pro
@@ -68,7 +68,9 @@ SOURCES += \
gstvideoconnector.c \
-!win32:!contains(QT_CONFIG,embedded):!mac:!simulator:!contains(QT_CONFIG, qpa) {
+contains(config_test_xvideo, yes) {
+ DEFINES += HAVE_XVIDEO
+
LIBS += -lXv -lX11 -lXext
HEADERS += \
diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
index f10fd58a7..f1516885a 100644
--- a/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
+++ b/src/plugins/gstreamer/mediacapture/qgstreamercaptureservice.cpp
@@ -100,7 +100,7 @@ QGstreamerCaptureService::QGstreamerCaptureService(const QString &service, QObje
m_videoRenderer = new QGstreamerVideoRenderer(this);
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
+#ifdef HAVE_XVIDEO
m_videoWindow = new QGstreamerVideoOverlay(this);
m_videoWidgetControl = new QGstreamerVideoWidgetControl(this);
#endif
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
index 7175c4da3..c5c860778 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
@@ -82,7 +82,7 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
m_videoRenderer = new QGstreamerVideoRenderer(this);
#endif
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
+#ifdef HAVE_XVIDEO
#ifdef Q_WS_MAEMO_6
m_videoWindow = new QGstreamerVideoWindow(this, "omapxvsink");
diff --git a/src/plugins/gstreamer/qgstreamervideooverlay.cpp b/src/plugins/gstreamer/qgstreamervideooverlay.cpp
index f19ef6a83..32253b4dc 100644
--- a/src/plugins/gstreamer/qgstreamervideooverlay.cpp
+++ b/src/plugins/gstreamer/qgstreamervideooverlay.cpp
@@ -44,9 +44,7 @@
#include <qvideosurfaceformat.h>
-#include <private/qx11videosurface_p.h>
-
-#ifndef QT_NO_XVIDEO
+#include <qx11videosurface.h>
QGstreamerVideoOverlay::QGstreamerVideoOverlay(QObject *parent)
: QVideoWindowControl(parent)
@@ -228,5 +226,3 @@ void QGstreamerVideoOverlay::setScaledDisplayRect()
break;
};
}
-
-#endif //QT_NO_XVIDEO
diff --git a/src/plugins/gstreamer/qgstreamervideooverlay.h b/src/plugins/gstreamer/qgstreamervideooverlay.h
index 3aebb77ad..e48ad03c3 100644
--- a/src/plugins/gstreamer/qgstreamervideooverlay.h
+++ b/src/plugins/gstreamer/qgstreamervideooverlay.h
@@ -51,8 +51,6 @@ class QAbstractVideoSurface;
QT_END_NAMESPACE
class QX11VideoSurface;
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
-
QT_BEGIN_NAMESPACE
class QGstreamerVideoOverlay : public QVideoWindowControl, public QGstreamerVideoRendererInterface
@@ -116,6 +114,4 @@ private:
QT_END_NAMESPACE
-#endif //QT_NO_XVIDEO
-
#endif
diff --git a/src/plugins/gstreamer/qgstreamervideowindow.cpp b/src/plugins/gstreamer/qgstreamervideowindow.cpp
index 1c475bd55..dad5e2860 100644
--- a/src/plugins/gstreamer/qgstreamervideowindow.cpp
+++ b/src/plugins/gstreamer/qgstreamervideowindow.cpp
@@ -48,9 +48,6 @@
#include <gst/interfaces/xoverlay.h>
#include <gst/interfaces/propertyprobe.h>
-
-#ifndef QT_NO_XVIDEO
-
/*
QGstreamerVideoWindow is similar to QGstreamerVideoOverlay,
but uses xvimagesink like gstreamer element instead of QX11VideoSurface.
@@ -347,5 +344,3 @@ GstElement *QGstreamerVideoWindow::videoSink()
{
return m_videoSink;
}
-
-#endif //QT_NO_XVIDEO
diff --git a/src/plugins/gstreamer/qgstreamervideowindow.h b/src/plugins/gstreamer/qgstreamervideowindow.h
index ba533aa91..3c940c370 100644
--- a/src/plugins/gstreamer/qgstreamervideowindow.h
+++ b/src/plugins/gstreamer/qgstreamervideowindow.h
@@ -52,8 +52,6 @@ class QAbstractVideoSurface;
QT_END_NAMESPACE
class QX11VideoSurface;
-#if defined(Q_WS_X11) && !defined(QT_NO_XVIDEO)
-
QT_BEGIN_NAMESPACE
class QGstreamerVideoWindow : public QVideoWindowControl,
@@ -131,6 +129,4 @@ private:
QT_END_NAMESPACE
-#endif //QT_NO_XVIDEO
-
#endif
diff --git a/src/plugins/gstreamer/qx11videosurface.cpp b/src/plugins/gstreamer/qx11videosurface.cpp
index f12be3e1b..fcff30a19 100644
--- a/src/plugins/gstreamer/qx11videosurface.cpp
+++ b/src/plugins/gstreamer/qx11videosurface.cpp
@@ -41,11 +41,10 @@
#include <QtCore/qvariant.h>
#include <QtCore/qdebug.h>
-#include <QtWidgets/qx11info_x11.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qplatformnativeinterface_qpa.h>
#include <qvideosurfaceformat.h>
-#ifndef QT_NO_XVIDEO
-
#include "qx11videosurface.h"
Q_DECLARE_METATYPE(XvImage*);
@@ -149,10 +148,10 @@ QX11VideoSurface::QX11VideoSurface(QObject *parent)
QX11VideoSurface::~QX11VideoSurface()
{
if (m_gc)
- XFreeGC(QX11Info::display(), m_gc);
+ XFreeGC(display(), m_gc);
if (m_portId != 0)
- XvUngrabPort(QX11Info::display(), m_portId, 0);
+ XvUngrabPort(display(), m_portId, 0);
}
WId QX11VideoSurface::winId() const
@@ -171,12 +170,12 @@ void QX11VideoSurface::setWinId(WId id)
XFree(m_image);
if (m_gc) {
- XFreeGC(QX11Info::display(), m_gc);
+ XFreeGC(display(), m_gc);
m_gc = 0;
}
if (m_portId != 0)
- XvUngrabPort(QX11Info::display(), m_portId, 0);
+ XvUngrabPort(display(), m_portId, 0);
m_supportedPixelFormats.clear();
m_formatIds.clear();
@@ -186,7 +185,7 @@ void QX11VideoSurface::setWinId(WId id)
if (m_winId && findPort()) {
querySupportedFormats();
- m_gc = XCreateGC(QX11Info::display(), m_winId, 0, 0);
+ m_gc = XCreateGC(display(), m_winId, 0, 0);
if (m_image) {
m_image = 0;
@@ -271,13 +270,13 @@ void QX11VideoSurface::setSaturation(int saturation)
int QX11VideoSurface::getAttribute(const char *attribute, int minimum, int maximum) const
{
if (m_portId != 0) {
- Display *display = QX11Info::display();
+ Display *disp = display();
- Atom atom = XInternAtom(display, attribute, True);
+ Atom atom = XInternAtom(disp, attribute, True);
int value = 0;
- XvGetPortAttribute(display, m_portId, atom, &value);
+ XvGetPortAttribute(disp, m_portId, atom, &value);
return redistribute(value, minimum, maximum, -100, 100);
} else {
@@ -288,12 +287,12 @@ int QX11VideoSurface::getAttribute(const char *attribute, int minimum, int maxim
void QX11VideoSurface::setAttribute(const char *attribute, int value, int minimum, int maximum)
{
if (m_portId != 0) {
- Display *display = QX11Info::display();
+ Display *disp = display();
- Atom atom = XInternAtom(display, attribute, True);
+ Atom atom = XInternAtom(disp, attribute, True);
XvSetPortAttribute(
- display, m_portId, atom, redistribute(value, -100, 100, minimum, maximum));
+ disp, m_portId, atom, redistribute(value, -100, 100, minimum, maximum));
}
}
@@ -330,7 +329,7 @@ bool QX11VideoSurface::start(const QVideoSurfaceFormat &format)
setError(UnsupportedFormatError);
} else {
XvImage *image = XvCreateImage(
- QX11Info::display(),
+ display(),
m_portId,
xvFormatId,
0,
@@ -403,7 +402,7 @@ bool QX11VideoSurface::present(const QVideoFrame &frame)
//qDebug() << "copy frame";
XvPutImage(
- QX11Info::display(),
+ display(),
m_portId,
m_winId,
m_gc,
@@ -424,7 +423,7 @@ bool QX11VideoSurface::present(const QVideoFrame &frame)
//qDebug() << "render directly";
if (img)
XvShmPutImage(
- QX11Info::display(),
+ display(),
m_portId,
m_winId,
m_gc,
@@ -450,19 +449,27 @@ bool QX11VideoSurface::present(const QVideoFrame &frame)
}
}
+Display *QX11VideoSurface::display() const
+{
+ QWindow *window = QGuiApplication::focusWindow();
+ Display *display = (Display *)QGuiApplication::platformNativeInterface()->nativeResourceForWindow("Display", window);
+
+ return display;
+}
+
bool QX11VideoSurface::findPort()
{
unsigned int count = 0;
XvAdaptorInfo *adaptors = 0;
bool portFound = false;
- if (XvQueryAdaptors(QX11Info::display(), m_winId, &count, &adaptors) == Success) {
+ if (XvQueryAdaptors(display(), m_winId, &count, &adaptors) == Success) {
for (unsigned int i = 0; i < count && !portFound; ++i) {
if (adaptors[i].type & XvImageMask) {
m_portId = adaptors[i].base_id;
for (unsigned int j = 0; j < adaptors[i].num_ports && !portFound; ++j, ++m_portId)
- portFound = XvGrabPort(QX11Info::display(), m_portId, 0) == Success;
+ portFound = XvGrabPort(display(), m_portId, 0) == Success;
}
}
XvFreeAdaptorInfo(adaptors);
@@ -475,7 +482,7 @@ void QX11VideoSurface::querySupportedFormats()
{
int count = 0;
if (XvImageFormatValues *imageFormats = XvListImageFormats(
- QX11Info::display(), m_portId, &count)) {
+ display(), m_portId, &count)) {
const int rgbCount = sizeof(qt_xvRgbLookup) / sizeof(XvFormatRgb);
const int yuvCount = sizeof(qt_xvYuvLookup) / sizeof(XvFormatYuv);
@@ -509,7 +516,7 @@ void QX11VideoSurface::querySupportedFormats()
m_hueRange = qMakePair(0, 0);
m_saturationRange = qMakePair(0, 0);
- if (XvAttribute *attributes = XvQueryPortAttributes(QX11Info::display(), m_portId, &count)) {
+ if (XvAttribute *attributes = XvQueryPortAttributes(display(), m_portId, &count)) {
for (int i = 0; i < count; ++i) {
if (qstrcmp(attributes[i].name, "XV_BRIGHTNESS") == 0)
m_brightnessRange = qMakePair(attributes[i].min_value, attributes[i].max_value);
@@ -525,5 +532,3 @@ void QX11VideoSurface::querySupportedFormats()
}
}
-#endif //QT_NO_XVIDEO
-
diff --git a/src/plugins/gstreamer/qx11videosurface.h b/src/plugins/gstreamer/qx11videosurface.h
index 846d5fc88..e128d7439 100644
--- a/src/plugins/gstreamer/qx11videosurface.h
+++ b/src/plugins/gstreamer/qx11videosurface.h
@@ -45,8 +45,6 @@
#include <QtWidgets/qwidget.h>
#include <qabstractvideosurface.h>
-#ifndef QT_NO_XVIDEO
-
#include <X11/Xlib.h>
#include <X11/extensions/Xv.h>
#include <X11/extensions/Xvlib.h>
@@ -89,7 +87,9 @@ public:
bool present(const QVideoFrame &frame);
-private:
+private:
+ Display *display() const;
+
WId m_winId;
XvPortID m_portId;
GC m_gc;
@@ -114,6 +114,4 @@ private:
QT_END_NAMESPACE
-#endif //QT_NO_XVIDEO
-
#endif
diff --git a/sync.profile b/sync.profile
index cd48b0b98..a7796a951 100644
--- a/sync.profile
+++ b/sync.profile
@@ -50,4 +50,5 @@
"gstreamer_appsrc" => {},
"pulseaudio" => {},
"resourcepolicy" => {},
+ "xvideo" => {},
);