diff options
Diffstat (limited to 'src/multimedia/playback/qmediaplayer.cpp')
-rw-r--r-- | src/multimedia/playback/qmediaplayer.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp index 2c196a04d..5917b083e 100644 --- a/src/multimedia/playback/qmediaplayer.cpp +++ b/src/multimedia/playback/qmediaplayer.cpp @@ -714,6 +714,11 @@ void QMediaPlayer::setActiveSubtitleTrack(int index) void QMediaPlayer::setVideoOutput(QObject *output) { auto *mo = output->metaObject(); + QVideoSink *sink = nullptr; + if (!output || mo->invokeMethod(output, "videoSink", Q_RETURN_ARG(QVideoSink *, sink))) { + setVideoOutput(sink); + return; + } QAbstractVideoSurface *surface = nullptr; if (output && !mo->invokeMethod(output, "videoSurface", Q_RETURN_ARG(QAbstractVideoSurface *, surface))) { qWarning() << "QMediaPlayer::setVideoOutput: Object" << output->metaObject()->className() << "does not have a videoSurface()"; @@ -728,7 +733,6 @@ void QMediaPlayer::setVideoOutput(QObject *output) If a video output has already been set on the media player the new surface will replace it. */ - void QMediaPlayer::setVideoOutput(QAbstractVideoSurface *surface) { Q_D(QMediaPlayer); @@ -739,6 +743,16 @@ void QMediaPlayer::setVideoOutput(QAbstractVideoSurface *surface) d->control->setVideoSurface(surface); } +void QMediaPlayer::setVideoOutput(QVideoSink *sink) +{ + Q_D(QMediaPlayer); + + if (!d->control) + return; + + d->control->setVideoSink(sink); +} + /*! \since 5.15 Sets multiple video surfaces as the video output of a media player. @@ -751,7 +765,6 @@ void QMediaPlayer::setVideoOutput(QAbstractVideoSurface *surface) \sa QAbstractVideoSurface::supportedPixelFormats */ - void QMediaPlayer::setVideoOutput(const QList<QAbstractVideoSurface *> &surfaces) { setVideoOutput(!surfaces.empty() ? new QVideoSurfaces(surfaces, this) : nullptr); |