Some cleanup in the GStreamer plugin.
Removed QGstreamerVideoOverlay and related classes. It was used as 'Window' control but performs worse than QGstreamerVideoWindow which does basically the same thing using GStreamer ready-made components instead. Removed X11 dependencies and related configuration tests. It was only needed for QGstreamerVideoOverlay. Change-Id: I2ad2636ccf0060e56cd64f3d9e5b3c24dc75f5a3 Reviewed-by: Andy Nichols <andy.nichols@digia.com>
This commit is contained in:
committed by
The Qt Project
parent
ac029c65f2
commit
c3ca3a760e
@@ -1,114 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, 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, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia 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.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QGSTREAMERVIDEOOVERLAY_H
|
||||
#define QGSTREAMERVIDEOOVERLAY_H
|
||||
|
||||
#include <qvideowindowcontrol.h>
|
||||
|
||||
#include "qgstreamervideorendererinterface_p.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAbstractVideoSurface;
|
||||
class QX11VideoSurface;
|
||||
|
||||
class QGstreamerVideoOverlay : public QVideoWindowControl, public QGstreamerVideoRendererInterface
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_INTERFACES(QGstreamerVideoRendererInterface)
|
||||
public:
|
||||
QGstreamerVideoOverlay(QObject *parent = 0);
|
||||
~QGstreamerVideoOverlay();
|
||||
|
||||
WId winId() const;
|
||||
void setWinId(WId id);
|
||||
|
||||
QRect displayRect() const;
|
||||
void setDisplayRect(const QRect &rect);
|
||||
|
||||
bool isFullScreen() const;
|
||||
void setFullScreen(bool fullScreen);
|
||||
|
||||
QSize nativeSize() const;
|
||||
|
||||
Qt::AspectRatioMode aspectRatioMode() const;
|
||||
void setAspectRatioMode(Qt::AspectRatioMode mode);
|
||||
|
||||
void repaint();
|
||||
|
||||
int brightness() const;
|
||||
void setBrightness(int brightness);
|
||||
|
||||
int contrast() const;
|
||||
void setContrast(int contrast);
|
||||
|
||||
int hue() const;
|
||||
void setHue(int hue);
|
||||
|
||||
int saturation() const;
|
||||
void setSaturation(int saturation);
|
||||
|
||||
QAbstractVideoSurface *surface() const;
|
||||
|
||||
GstElement *videoSink();
|
||||
|
||||
bool isReady() const { return winId() != 0; }
|
||||
|
||||
signals:
|
||||
void sinkChanged();
|
||||
void readyChanged(bool);
|
||||
|
||||
private slots:
|
||||
void surfaceFormatChanged();
|
||||
|
||||
private:
|
||||
void setScaledDisplayRect();
|
||||
|
||||
QX11VideoSurface *m_surface;
|
||||
GstElement *m_videoSink;
|
||||
Qt::AspectRatioMode m_aspectRatioMode;
|
||||
QRect m_displayRect;
|
||||
bool m_fullScreen;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif
|
||||
@@ -50,7 +50,6 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAbstractVideoSurface;
|
||||
class QX11VideoSurface;
|
||||
|
||||
class QGstreamerVideoWindow : public QVideoWindowControl,
|
||||
public QGstreamerVideoRendererInterface,
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, 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, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia 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.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QGSTXVIMAGEBUFFER_P_H
|
||||
#define QGSTXVIMAGEBUFFER_P_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include <qabstractvideobuffer.h>
|
||||
#include <qvideosurfaceformat.h>
|
||||
#include <QtCore/qmutex.h>
|
||||
#include <QtCore/qwaitcondition.h>
|
||||
#include <QtCore/qqueue.h>
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include "qgstbufferpoolinterface_p.h"
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/shm.h>
|
||||
#include <X11/extensions/XShm.h>
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/extensions/Xv.h>
|
||||
#include <X11/extensions/Xvlib.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QGstXvImageBufferPool;
|
||||
|
||||
class QGstXvImageBuffer {
|
||||
public:
|
||||
GstBuffer buffer;
|
||||
QGstXvImageBufferPool *pool;
|
||||
XvImage *xvImage;
|
||||
XShmSegmentInfo shmInfo;
|
||||
bool markedForDeletion;
|
||||
|
||||
static GType get_type(void);
|
||||
static void class_init(gpointer g_class, gpointer class_data);
|
||||
static void buffer_init(QGstXvImageBuffer *xvimage, gpointer g_class);
|
||||
static void buffer_finalize(QGstXvImageBuffer * xvimage);
|
||||
static GstBufferClass *parent_class;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
Q_DECLARE_METATYPE(XvImage*)
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QGstXvImageBufferPool : public QObject, public QGstBufferPoolInterface {
|
||||
Q_OBJECT
|
||||
Q_INTERFACES(QGstBufferPoolInterface)
|
||||
friend class QGstXvImageBuffer;
|
||||
public:
|
||||
QGstXvImageBufferPool(QObject *parent = 0);
|
||||
virtual ~QGstXvImageBufferPool();
|
||||
|
||||
bool isFormatSupported(const QVideoSurfaceFormat &format) const;
|
||||
|
||||
GType bufferType() const;
|
||||
GstBuffer *takeBuffer(const QVideoSurfaceFormat &format, GstCaps *caps);
|
||||
void clear();
|
||||
|
||||
QAbstractVideoBuffer::HandleType handleType() const;
|
||||
QAbstractVideoBuffer *prepareVideoBuffer(GstBuffer *buffer, int bytesPerLine);
|
||||
|
||||
virtual QStringList keys() const;
|
||||
|
||||
private slots:
|
||||
void queuedAlloc();
|
||||
void queuedDestroy();
|
||||
|
||||
void doClear();
|
||||
|
||||
void recycleBuffer(QGstXvImageBuffer *);
|
||||
void destroyBuffer(QGstXvImageBuffer *);
|
||||
|
||||
private:
|
||||
void doAlloc();
|
||||
|
||||
Display *display() const;
|
||||
|
||||
struct XvShmImage {
|
||||
XvImage *xvImage;
|
||||
XShmSegmentInfo shmInfo;
|
||||
};
|
||||
|
||||
QMutex m_poolMutex;
|
||||
QMutex m_allocMutex;
|
||||
QWaitCondition m_allocWaitCondition;
|
||||
QMutex m_destroyMutex;
|
||||
QVideoSurfaceFormat m_format;
|
||||
GstCaps *m_caps;
|
||||
QList<QGstXvImageBuffer*> m_pool;
|
||||
QList<QGstXvImageBuffer*> m_allBuffers;
|
||||
QList<XvShmImage> m_imagesToDestroy;
|
||||
Qt::HANDLE m_threadId;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif
|
||||
@@ -69,11 +69,6 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QAbstractVideoSurface;
|
||||
|
||||
#ifdef HAVE_XVIDEO
|
||||
class QGstXvImageBuffer;
|
||||
class QGstXvImageBufferPool;
|
||||
#endif
|
||||
|
||||
class QVideoSurfaceGstDelegate : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, 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, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia 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.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QX11VIDEOSURFACE_H
|
||||
#define QX11VIDEOSURFACE_H
|
||||
|
||||
#include <QtWidgets/qwidget.h>
|
||||
#include <qabstractvideosurface.h>
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/extensions/Xv.h>
|
||||
#include <X11/extensions/Xvlib.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QX11VideoSurface : public QAbstractVideoSurface
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
QX11VideoSurface(QObject *parent = 0);
|
||||
~QX11VideoSurface();
|
||||
|
||||
WId winId() const;
|
||||
void setWinId(WId id);
|
||||
|
||||
QRect displayRect() const;
|
||||
void setDisplayRect(const QRect &rect);
|
||||
|
||||
QRect viewport() const;
|
||||
void setViewport(const QRect &rect);
|
||||
|
||||
int brightness() const;
|
||||
void setBrightness(int brightness);
|
||||
|
||||
int contrast() const;
|
||||
void setContrast(int contrast);
|
||||
|
||||
int hue() const;
|
||||
void setHue(int hue);
|
||||
|
||||
int saturation() const;
|
||||
void setSaturation(int saturation);
|
||||
|
||||
QList<QVideoFrame::PixelFormat> supportedPixelFormats(
|
||||
QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const;
|
||||
|
||||
bool start(const QVideoSurfaceFormat &format);
|
||||
void stop();
|
||||
|
||||
bool present(const QVideoFrame &frame);
|
||||
|
||||
private:
|
||||
Display *display() const;
|
||||
|
||||
WId m_winId;
|
||||
XvPortID m_portId;
|
||||
GC m_gc;
|
||||
XvImage *m_image;
|
||||
QList<QVideoFrame::PixelFormat> m_supportedPixelFormats;
|
||||
QVector<int> m_formatIds;
|
||||
QRect m_viewport;
|
||||
QRect m_displayRect;
|
||||
QPair<int, int> m_brightnessRange;
|
||||
QPair<int, int> m_contrastRange;
|
||||
QPair<int, int> m_hueRange;
|
||||
QPair<int, int> m_saturationRange;
|
||||
|
||||
bool findPort();
|
||||
void querySupportedFormats();
|
||||
|
||||
int getAttribute(const char *attribute, int minimum, int maximum) const;
|
||||
void setAttribute(const char *attribute, int value, int minimum, int maximum);
|
||||
|
||||
static int redistribute(int value, int fromLower, int fromUpper, int toLower, int toUpper);
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user