diff options
Diffstat (limited to 'src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h')
-rw-r--r-- | src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h | 116 |
1 files changed, 49 insertions, 67 deletions
diff --git a/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h b/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h index d1f585cc2..41275587e 100644 --- a/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h +++ b/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** 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 The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef qgstpipeline_p_H #define qgstpipeline_p_H @@ -51,10 +15,10 @@ // We mean it. // -#include <private/qtmultimediaglobal_p.h> -#include <QObject> +#include <QtMultimedia/private/qtmultimediaglobal_p.h> +#include <QtCore/qobject.h> -#include <qgst_p.h> +#include "qgst_p.h" QT_BEGIN_NAMESPACE @@ -77,14 +41,18 @@ class QGstPipelinePrivate; class QGstPipeline : public QGstBin { - QGstPipelinePrivate *d = nullptr; public: constexpr QGstPipeline() = default; - QGstPipeline(const QGstPipeline &o); - QGstPipeline &operator=(const QGstPipeline &o); - QGstPipeline(const char *name); - QGstPipeline(GstPipeline *p); - ~QGstPipeline() override; + QGstPipeline(const QGstPipeline &) = default; + QGstPipeline(QGstPipeline &&) = default; + QGstPipeline &operator=(const QGstPipeline &) = default; + QGstPipeline &operator=(QGstPipeline &&) noexcept = default; + QGstPipeline(GstPipeline *, RefMode mode); + ~QGstPipeline(); + + // installs QGstPipelinePrivate as "pipeline-private" gobject property + static QGstPipeline create(const char *name); + static QGstPipeline adopt(GstPipeline *); // This is needed to help us avoid sending QVideoFrames or audio buffers to the // application while we're prerolling the pipeline. @@ -103,36 +71,50 @@ public: GstStateChangeReturn setState(GstState state); - GstPipeline *pipeline() const { return GST_PIPELINE_CAST(m_object); } + GstPipeline *pipeline() const { return GST_PIPELINE_CAST(get()); } + + void processMessages(GstMessageType = GST_MESSAGE_ANY); - void dumpGraph(const char *fileName) + void dumpGraph(const char *fileName); + + template <typename Functor> + void modifyPipelineWhileNotRunning(Functor &&fn) { - if (isNull()) - return; - -#if 1 //def QT_GST_CAPTURE_DEBUG - GST_DEBUG_BIN_TO_DOT_FILE(bin(), - GstDebugGraphDetails(GST_DEBUG_GRAPH_SHOW_ALL | - GST_DEBUG_GRAPH_SHOW_MEDIA_TYPE | GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS | GST_DEBUG_GRAPH_SHOW_STATES), - fileName); -#else - Q_UNUSED(fileName); -#endif + beginConfig(); + fn(); + endConfig(); } - void beginConfig(); - void endConfig(); + template <typename Functor> + static void modifyPipelineWhileNotRunning(QGstPipeline &&pipeline, Functor &&fn) + { + if (pipeline) + pipeline.modifyPipelineWhileNotRunning(fn); + else + fn(); + } void flush(); - bool seek(qint64 pos, double rate); - bool setPlaybackRate(double rate); + void setPlaybackRate(double rate); double playbackRate() const; + void applyPlaybackRate(bool instantRateChange); + + void setPosition(std::chrono::nanoseconds pos); + std::chrono::nanoseconds position() const; + std::chrono::milliseconds positionInMs() const; + + std::chrono::nanoseconds duration() const; + std::chrono::milliseconds durationInMs() const; - bool setPosition(qint64 pos); - qint64 position() const; +private: + void seek(std::chrono::nanoseconds pos, double rate); + void seek(std::chrono::nanoseconds pos); - qint64 duration() const; + QGstPipelinePrivate *getPrivate() const; + + void beginConfig(); + void endConfig(); }; QT_END_NAMESPACE |