4#ifndef QGSTREAMERMEDIAPLAYER_P_H
5#define QGSTREAMERMEDIAPLAYER_P_H
18#include <QtMultimedia/private/qplatformmediaplayer_p.h>
19#include <QtMultimedia/private/qtmultimediaglobal_p.h>
20#include <QtMultimedia/private/qmultimediautils_p.h>
22#include <QtCore/qelapsedtimer.h>
23#include <QtCore/qtimer.h>
24#include <QtCore/qurl.h>
26#include <common/qgst_bus_observer_p.h>
27#include <common/qgst_discoverer_p.h>
28#include <common/qgst_p.h>
29#include <common/qgstpipeline_p.h>
31#include <gst/play/gstplay.h>
37class QGstreamerMessage;
62 void setMedia(
const QUrl &, QIODevice *)
override;
94 static void sourceSetupCallback(GstElement *uridecodebin, GstElement *source,
96 bool hasMedia()
const;
97 bool hasValidMedia()
const;
99 void updatePositionFromPipeline();
100 void updateBufferProgress(
float);
103 QIODevice *m_stream =
nullptr;
105 enum class ResourceErrorState : uint8_t {
111 ResourceErrorState m_resourceErrorState = ResourceErrorState::NoError;
112 float m_bufferProgress = 0.f;
113 std::chrono::milliseconds m_duration{};
123 void disconnectDecoderHandlers();
126 bool discover(
const QUrl &);
131 bool isCustomSource()
const {
return m_url.scheme() == QStringLiteral(u"gstreamer-pipeline"); }
132 void setMediaCustomSource(
const QUrl &content);
133 void cleanupCustomPipeline();
138 std::unique_ptr<QTimer> positionUpdateTimer;
143 QGstPlayHandle m_gstPlay;
148 QMediaMetaData m_metaData;
149 std::array<std::vector<QMediaMetaData>, 3> m_trackMetaData;
150 std::array<std::vector<QByteArray>, 3> m_trackIDs;
151 std::array<
int, 3> m_activeTrack{};
152 QList<QSize> m_nativeSize;
154 void resetStateForEmptyOrInvalidMedia();
155 void updateNativeSizeOnVideoOutput();
157 void seekToCurrentPosition();
159 std::optional<std::chrono::nanoseconds> m_pendingSeek;
161 int stateChangeToSkip = 0;
163 void updateVideoTrackEnabled();
164 void updateAudioTrackEnabled();
165 void updateSubtitleTrackEnabled();
QGstStructureView at(int index) const
bool syncStateWithParent()
static QGstElement createFromPipelineDescription(const char *)
bool link(const QGstPad &sink) const
QGstCaps queryCaps() const
QGstElement gstElement() const
QGstreamerVideoSink * gstreamerVideoSink() const
void setNativeSize(QSize)
void setVideoSink(QVideoSink *sink)
std::optional< QGstreamerMediaPlayer::TrackType > toTrackType(const QGstCaps &caps)
Q_STATIC_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core")