5#include "private/qplatformaudiooutput_p.h"
32 return m_playbackEngine ? m_playbackEngine->duration() / 1000 : 0;
37 if (m_playbackEngine) {
38 m_playbackEngine->seek(
position * 1000);
45void QFFmpegMediaPlayer::updatePosition()
47 positionChanged(m_playbackEngine ? m_playbackEngine->currentPosition() / 1000 : 0);
50void QFFmpegMediaPlayer::endOfStream()
53 m_positionUpdateTimer.
stop();
60void QFFmpegMediaPlayer::onLoopChanged()
69 m_positionUpdateTimer.
stop();
70 m_positionUpdateTimer.
start();
85 return m_playbackRate;
90 if (m_playbackRate ==
rate)
92 m_playbackRate =
rate;
94 m_playbackEngine->setPlaybackRate(
rate);
111 m_playbackEngine =
nullptr;
129 m_playbackEngine = std::make_unique<PlaybackEngine>();
132 &QFFmpegMediaPlayer::endOfStream);
134 &QFFmpegMediaPlayer::error);
136 &QFFmpegMediaPlayer::onLoopChanged);
139 m_playbackEngine.reset();
144 m_playbackEngine->setAudioSink(m_audioOutput);
145 m_playbackEngine->setVideoSink(m_videoSink);
146 m_playbackEngine->setLoops(
loops());
147 m_playbackEngine->setPlaybackRate(m_playbackRate);
165 if (!m_playbackEngine)
169 m_playbackEngine->seek(0);
176void QFFmpegMediaPlayer::runPlayback()
178 m_playbackEngine->play();
179 m_positionUpdateTimer.
start();
186 if (!m_playbackEngine)
189 m_playbackEngine->seek(0);
192 m_playbackEngine->pause();
193 m_positionUpdateTimer.
stop();
200 if (!m_playbackEngine)
202 m_playbackEngine->stop();
203 m_positionUpdateTimer.
stop();
211 if (m_audioOutput ==
output)
215 if (m_playbackEngine)
216 m_playbackEngine->setAudioSink(
output);
221 return m_playbackEngine ? m_playbackEngine->metaData() :
QMediaMetaData{};
226 if (m_videoSink ==
sink)
230 if (m_playbackEngine)
231 m_playbackEngine->setVideoSink(
sink);
241 return m_playbackEngine ? m_playbackEngine->streamInfo(
type).count() : 0;
246 if (!m_playbackEngine || streamNumber < 0
247 || streamNumber >= m_playbackEngine->streamInfo(
type).count())
249 return m_playbackEngine->streamInfo(
type).at(streamNumber).metaData;
254 return m_playbackEngine ? m_playbackEngine->activeTrack(
type) : -1;
259 if (m_playbackEngine)
260 m_playbackEngine->setActiveTrack(
type, streamNumber);
262 qWarning() <<
"Cannot set active track without open source";
267 if (m_playbackEngine)
268 m_playbackEngine->setLoops(
loops);
275#include "moc_qffmpegmediaplayer_p.cpp"
void errorOccured(int, const QString &)
\inmodule QtCore \reentrant
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
void start(int msec)
Starts or restarts the timer with a timeout interval of msec milliseconds.
void setInterval(int msec)
void stop()
Stops the timer.
void timeout(QPrivateSignal)
This signal is emitted when the timer times out.
void setTimerType(Qt::TimerType atype)
bool isEmpty() const
Returns true if the URL has no data; otherwise returns false.
The QVideoSink class represents a generic sink for video data.
Combined button and popup list for selecting options.
GLsizei GLenum GLboolean sink
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
QT_BEGIN_NAMESPACE typedef uchar * output