Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qffmpegmediaplayer_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 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//
5// W A R N I N G
6// -------------
7//
8// This file is not part of the Qt API. It exists purely as an
9// implementation detail. This header file may change from version to
10// version without notice, or even be removed.
11//
12// We mean it.
13//
14
15#ifndef QFFMPEGMEDIAPLAYER_H
16#define QFFMPEGMEDIAPLAYER_H
17
18#include <QtMultimedia/private/qplatformmediaplayer_p.h>
19#include <qmediametadata.h>
20#include <qtimer.h>
21#include <qpointer.h>
22#include <qfuture.h>
23#include <QtFFmpegMediaPluginImpl/private/qffmpeg_p.h>
24#include <QtFFmpegMediaPluginImpl/private/qffmpegmediadataholder_p.h>
25
26QT_BEGIN_NAMESPACE
27
28namespace QFFmpeg {
29class CancelToken;
30
31class PlaybackEngine;
32} // namespace QFFmpeg
33
34class QPlatformAudioOutput;
35
37{
39public:
42
43 qint64 duration() const override;
44
45 void setPosition(qint64 position) override;
46
47 float bufferProgress() const override;
48
50
51 qreal playbackRate() const override;
52 void setPlaybackRate(qreal rate) override;
53
54 QUrl media() const override;
55 const QIODevice *mediaStream() const override;
56 void setMedia(const QUrl &media, QIODevice *stream) override;
57
58 void play() override;
59 void pause() override;
60 void stop() override;
61
62 void setAudioOutput(QPlatformAudioOutput *) override;
63
64 void setAudioBufferOutput(QAudioBufferOutput *) override;
65
66 QMediaMetaData metaData() const override;
67
68 void setVideoSink(QVideoSink *sink) override;
69 QVideoSink *videoSink() const;
70
71 int trackCount(TrackType) override;
72 QMediaMetaData trackMetaData(TrackType type, int streamNumber) override;
73 int activeTrack(TrackType) override;
74 void setActiveTrack(TrackType, int streamNumber) override;
75 void setLoops(int loops) override;
76
78 void setPitchCompensation(bool enabled) override;
79 bool pitchCompensation() const override;
80
81private:
82 void runPlayback();
83 void handleIncorrectMedia(QMediaPlayer::MediaStatus status);
84 void setMediaAsync(QFFmpeg::MediaDataHolder::Maybe mediaDataHolder,
85 const std::shared_ptr<QFFmpeg::CancelToken> &cancelToken);
86
87 void mediaStatusChanged(QMediaPlayer::MediaStatus);
88
89private slots:
90 void updatePosition();
91 void endOfStream();
92 void error(QMediaPlayer::Error error, const QString &errorString)
93 {
94 QPlatformMediaPlayer::error(error, errorString);
95 }
96 void onLoopChanged();
97 void onBuffered();
98
99private:
100 QTimer m_positionUpdateTimer;
101 QMediaPlayer::PlaybackState m_requestedStatus = QMediaPlayer::StoppedState;
102
103 using PlaybackEngine = QFFmpeg::PlaybackEngine;
104
105 std::unique_ptr<PlaybackEngine> m_playbackEngine;
106 QPlatformAudioOutput *m_audioOutput = nullptr;
107 QPointer<QAudioBufferOutput> m_audioBufferOutput;
108 QPointer<QVideoSink> m_videoSink;
109
110 QUrl m_url;
111 QPointer<QIODevice> m_device;
112 float m_playbackRate = 1.;
113 float m_bufferProgress = 0.f;
114 QFuture<void> m_loadMedia;
115 std::shared_ptr<QFFmpeg::CancelToken> m_cancelToken; // For interrupting ongoing
116 // network connection attempt
117
118 bool m_pitchCompensation = true;
119};
120
121QT_END_NAMESPACE
122
123
124#endif // QMEDIAPLAYERCONTROL_H
void setActiveTrack(TrackType, int streamNumber) override
void setVideoSink(QVideoSink *sink) override
QMediaMetaData trackMetaData(TrackType type, int streamNumber) override
void setLoops(int loops) override
QVideoSink * videoSink() const
bool pitchCompensation() const override
void setAudioOutput(QPlatformAudioOutput *) override
qint64 duration() const override
float bufferProgress() const override
const QIODevice * mediaStream() const override
void setPitchCompensation(bool enabled) override
void setPosition(qint64 position) override
void setPlaybackRate(qreal rate) override
int activeTrack(TrackType) override
QUrl media() const override
QMediaTimeRange availablePlaybackRanges() const override
qreal playbackRate() const override
PitchCompensationAvailability pitchCompensationAvailability() const override
QMediaMetaData metaData() const override
void setAudioBufferOutput(QAudioBufferOutput *) override
void setMedia(const QUrl &media, QIODevice *stream) override
int trackCount(TrackType) override
bool isCancelled() const override
typename QtPrivate::ResultTypeHelper< Function, T >::ResultType ResultType
Definition qfuture.h:130
std::conditional_t< QT_FFMPEG_AVIO_WRITE_CONST, const uint8_t *, uint8_t * > AvioWriteBufferType