summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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" => {},
);