Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qgstreamermediaplayer_p.h
Go to the documentation of this file.
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 QGSTREAMERMEDIAPLAYER_P_H
5#define QGSTREAMERMEDIAPLAYER_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 <QtCore/qstack.h>
19#include <private/qplatformmediaplayer_p.h>
20#include <private/qtmultimediaglobal_p.h>
21#include <private/qmultimediautils_p.h>
22#include <qurl.h>
23#include <qgst_p.h>
24#include <qgstpipeline_p.h>
25
26#include <QtCore/qtimer.h>
27
28#include <array>
29
31
34class QGstAppSrc;
37
38class Q_MULTIMEDIA_EXPORT QGstreamerMediaPlayer
39 : public QObject,
43{
45
46public:
49
50 qint64 position() const override;
51 qint64 duration() const override;
52
53 float bufferProgress() const override;
54
56
57 qreal playbackRate() const override;
58 void setPlaybackRate(qreal rate) override;
59
60 QUrl media() const override;
61 const QIODevice *mediaStream() const override;
62 void setMedia(const QUrl&, QIODevice *) override;
63
64 bool streamPlaybackSupported() const override { return true; }
65
67
68 QMediaMetaData metaData() const override;
69
70 void setVideoSink(QVideoSink *sink) override;
71
72 int trackCount(TrackType) override;
73 QMediaMetaData trackMetaData(TrackType /*type*/, int /*streamNumber*/) override;
74 int activeTrack(TrackType) override;
75 void setActiveTrack(TrackType, int /*streamNumber*/) override;
76
77 void setPosition(qint64 pos) override;
78
79 void play() override;
80 void pause() override;
81 void stop() override;
82
83 bool processBusMessage(const QGstreamerMessage& message) override;
84 bool processSyncMessage(const QGstreamerMessage& message) override;
85
86public Q_SLOTS:
88
89private:
91 QGstElement videoInputSelector, QGstElement audioInputSelector,
92 QGstElement subTitleInputSelector, QMediaPlayer *parent);
93
94 struct TrackSelector {
95 TrackSelector(TrackType, QGstElement selector);
96 QGstPad createInputPad();
97 void removeInputPad(QGstPad pad);
98 void removeAllInputPads();
99 QGstPad inputPad(int index);
100 int activeInputIndex() const { return isConnected ? tracks.indexOf(activeInputPad()) : -1; }
101 QGstPad activeInputPad() const { return isConnected ? selector.getObject("active-pad") : QGstPad{}; }
102 void setActiveInputPad(QGstPad input) { selector.set("active-pad", input); }
103 int trackCount() const { return tracks.count(); }
104
106 TrackType type;
107 QList<QGstPad> tracks;
108 bool isConnected = false;
109 };
110
111 friend class QGstreamerStreamsControl;
112 void decoderPadAdded(const QGstElement &src, const QGstPad &pad);
113 void decoderPadRemoved(const QGstElement &src, const QGstPad &pad);
114 static void uridecodebinElementAddedCallback(GstElement *uridecodebin, GstElement *child, QGstreamerMediaPlayer *that);
115 static void sourceSetupCallback(GstElement *uridecodebin, GstElement *source, QGstreamerMediaPlayer *that);
116 void parseStreamsAndMetadata();
117 void connectOutput(TrackSelector &ts);
118 void removeOutput(TrackSelector &ts);
119 void removeAllOutputs();
120 void stopOrEOS(bool eos);
121
122 std::array<TrackSelector, NTrackTypes> trackSelectors;
123 TrackSelector &trackSelector(TrackType type);
124
125 QMediaMetaData m_metaData;
126
127 int m_bufferProgress = -1;
128 QUrl m_url;
129 QIODevice *m_stream = nullptr;
130
131 bool prerolling = false;
132 bool m_requiresSeekOnPlay = false;
133 qint64 m_duration = 0;
134 QTimer positionUpdateTimer;
135
136 QGstAppSrc *m_appSrc = nullptr;
137
138 GType decodebinType;
139 QGstStructure topology;
140
141 // Gst elements
142 QGstPipeline playerPipeline;
144 QGstElement decoder;
145
146 QGstreamerAudioOutput *gstAudioOutput = nullptr;
147 QGstreamerVideoOutput *gstVideoOutput = nullptr;
148
149 // QGstElement streamSynchronizer;
150
151 QHash<QByteArray, QGstPad> decoderOutputMap;
152};
153
155
156#endif
virtual bool processBusMessage(const QGstreamerMessage &message)=0
bool streamPlaybackSupported() const override
virtual bool processSyncMessage(const QGstreamerMessage &message)=0
\inmodule QtCore
Definition qhash.h:818
\inmodule QtCore \reentrant
Definition qiodevice.h:34
Definition qlist.h:74
\inmodule QtMultimedia
The QMediaPlayer class allows the playing of a media files.
The QMediaTimeRange class represents a set of zero or more disjoint time intervals.
The QNetworkAccessManager class allows the application to send network requests and receive replies.
\inmodule QtCore
Definition qobject.h:90
virtual const QIODevice * mediaStream() const =0
void positionChanged(qint64 position)
virtual void play()=0
virtual void stop()=0
virtual int trackCount(TrackType)
virtual void setActiveTrack(TrackType, int)
virtual void pause()=0
virtual QMediaMetaData metaData() const
virtual void setAudioOutput(QPlatformAudioOutput *)
virtual qint64 duration() const =0
virtual void setVideoSink(QVideoSink *)=0
virtual void setPlaybackRate(qreal rate)=0
virtual void setMedia(const QUrl &media, QIODevice *stream)=0
virtual qreal playbackRate() const =0
virtual QMediaMetaData trackMetaData(TrackType, int)
virtual int activeTrack(TrackType)
virtual QUrl media() const =0
virtual QMediaTimeRange availablePlaybackRanges() const =0
virtual float bufferProgress() const =0
\inmodule QtCore
Definition qtimer.h:20
\inmodule QtCore
Definition qurl.h:94
The QVideoSink class represents a generic sink for video data.
Definition qvideosink.h:22
Combined button and popup list for selecting options.
n void setPosition(void) \n\
GLuint index
[2]
GLenum src
GLenum type
GLuint GLsizei const GLchar * message
GLsizei GLsizei GLchar * source
GLuint GLenum * rate
GLsizei GLenum GLboolean sink
GLenum GLenum GLenum input
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_OBJECT
#define Q_SLOTS
long long qint64
Definition qtypes.h:55
double qreal
Definition qtypes.h:92
QT_BEGIN_NAMESPACE typedef uchar * output
QFileSelector selector
[1]
QLayoutItem * child
[0]
view create()
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent