1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef qgstpipeline_p_H
5#define qgstpipeline_p_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtMultimedia/private/qtmultimediaglobal_p.h>
19#include <QtCore/qobject.h>
20
21#include "qgst_p.h"
22
23QT_BEGIN_NAMESPACE
24
25class QGstreamerMessage;
26class QGstreamerSyncMessageFilter;
27class QGstreamerBusMessageFilter;
28struct QGstPipelinePrivate;
29
30class QGstPipeline : public QGstBin
31{
32 static constexpr auto defaultQueryTimeout = std::chrono::seconds{ 5 };
33
34public:
35 constexpr QGstPipeline() = default;
36 QGstPipeline(const QGstPipeline &) = default;
37 QGstPipeline(QGstPipeline &&) = default;
38 QGstPipeline &operator=(const QGstPipeline &) = default;
39 QGstPipeline &operator=(QGstPipeline &&) noexcept = default;
40 QGstPipeline(GstPipeline *, RefMode mode);
41 ~QGstPipeline();
42
43 static QGstPipeline createFromFactory(const char *factory, const char *name);
44 static QGstPipeline create(const char *name);
45
46 void installMessageFilter(QGstreamerSyncMessageFilter *filter);
47 void removeMessageFilter(QGstreamerSyncMessageFilter *filter);
48 void installMessageFilter(QGstreamerBusMessageFilter *filter);
49 void removeMessageFilter(QGstreamerBusMessageFilter *filter);
50
51 GstStateChangeReturn setState(GstState state);
52
53 GstPipeline *pipeline() const { return GST_PIPELINE_CAST(get()); }
54
55 bool processNextPendingMessage(GstMessageType = GST_MESSAGE_ANY,
56 std::chrono::nanoseconds timeout = {});
57 bool processNextPendingMessage(std::chrono::nanoseconds timeout);
58
59 void flush();
60
61 void setPlaybackRate(double rate, bool forceFlushingSeek = false);
62 double playbackRate() const;
63 void applyPlaybackRate(bool forceFlushingSeek = false);
64
65 void setPosition(std::chrono::nanoseconds pos, bool flush = true);
66 std::chrono::nanoseconds position() const;
67 std::chrono::milliseconds positionInMs() const;
68
69 void setPositionAndRate(std::chrono::nanoseconds pos, double rate);
70
71 std::optional<std::chrono::nanoseconds>
72 queryPosition(std::chrono::nanoseconds timeout = defaultQueryTimeout) const;
73 std::optional<std::chrono::nanoseconds>
74 queryDuration(std::chrono::nanoseconds timeout = defaultQueryTimeout) const;
75 std::optional<std::pair<std::chrono::nanoseconds, std::chrono::nanoseconds>>
76 queryPositionAndDuration(std::chrono::nanoseconds timeout = defaultQueryTimeout) const;
77
78 void seekToEndWithEOS();
79
80private:
81 // installs QGstPipelinePrivate as "pipeline-private" gobject property
82 static QGstPipeline adopt(GstPipeline *);
83
84 void seek(std::chrono::nanoseconds pos, double rate, bool flush);
85 void seek(std::chrono::nanoseconds pos, bool flush);
86
87 QGstPipelinePrivate *getPrivate() const;
88};
89
90QT_END_NAMESPACE
91
92#endif
93

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtmultimedia/src/plugins/multimedia/gstreamer/common/qgstpipeline_p.h