summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/gstreamer')
-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
10 files changed, 38 insertions, 50 deletions
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