diff options
Diffstat (limited to 'src/multimedia/playback/qmediaplayer.h')
-rw-r--r-- | src/multimedia/playback/qmediaplayer.h | 233 |
1 files changed, 99 insertions, 134 deletions
diff --git a/src/multimedia/playback/qmediaplayer.h b/src/multimedia/playback/qmediaplayer.h index 66a60b508..015a30f05 100644 --- a/src/multimedia/playback/qmediaplayer.h +++ b/src/multimedia/playback/qmediaplayer.h @@ -1,95 +1,68 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QMEDIAPLAYER_H #define QMEDIAPLAYER_H +#include <QtCore/qobject.h> +#include <QtCore/qurl.h> #include <QtMultimedia/qtmultimediaglobal.h> -#include <QtMultimedia/qmediaobject.h> -#include <QtMultimedia/qmediacontent.h> #include <QtMultimedia/qmediaenumdebug.h> -#include <QtMultimedia/qaudio.h> +#include <QtMultimedia/qtaudio.h> QT_BEGIN_NAMESPACE - -class QAbstractVideoSurface; -class QMediaPlaylist; -class QVideoWidget; -class QGraphicsVideoItem; +class QVideoSink; +class QAudioOutput; +class QAudioDevice; +class QMediaMetaData; +class QMediaTimeRange; class QMediaPlayerPrivate; -class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QMediaObject +class Q_MULTIMEDIA_EXPORT QMediaPlayer : public QObject { Q_OBJECT - Q_PROPERTY(QMediaContent media READ media WRITE setMedia NOTIFY mediaChanged) - Q_PROPERTY(QMediaContent currentMedia READ currentMedia NOTIFY currentMediaChanged) - Q_PROPERTY(QMediaPlaylist* playlist READ playlist WRITE setPlaylist) + Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged) Q_PROPERTY(qint64 duration READ duration NOTIFY durationChanged) Q_PROPERTY(qint64 position READ position WRITE setPosition NOTIFY positionChanged) - Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged) - Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged) - Q_PROPERTY(int bufferStatus READ bufferStatus NOTIFY bufferStatusChanged) - Q_PROPERTY(bool audioAvailable READ isAudioAvailable NOTIFY audioAvailableChanged) - Q_PROPERTY(bool videoAvailable READ isVideoAvailable NOTIFY videoAvailableChanged) + Q_PROPERTY(float bufferProgress READ bufferProgress NOTIFY bufferProgressChanged) + Q_PROPERTY(bool hasAudio READ hasAudio NOTIFY hasAudioChanged) + Q_PROPERTY(bool hasVideo READ hasVideo NOTIFY hasVideoChanged) Q_PROPERTY(bool seekable READ isSeekable NOTIFY seekableChanged) + Q_PROPERTY(bool playing READ isPlaying NOTIFY playingChanged) Q_PROPERTY(qreal playbackRate READ playbackRate WRITE setPlaybackRate NOTIFY playbackRateChanged) - Q_PROPERTY(State state READ state NOTIFY stateChanged) + Q_PROPERTY(int loops READ loops WRITE setLoops NOTIFY loopsChanged) + Q_PROPERTY(PlaybackState playbackState READ playbackState NOTIFY playbackStateChanged) Q_PROPERTY(MediaStatus mediaStatus READ mediaStatus NOTIFY mediaStatusChanged) - Q_PROPERTY(QAudio::Role audioRole READ audioRole WRITE setAudioRole NOTIFY audioRoleChanged) - Q_PROPERTY(QString customAudioRole READ customAudioRole WRITE setCustomAudioRole NOTIFY customAudioRoleChanged) - Q_PROPERTY(QString error READ errorString) - Q_ENUMS(State) - Q_ENUMS(MediaStatus) - Q_ENUMS(Error) + Q_PROPERTY(QMediaMetaData metaData READ metaData NOTIFY metaDataChanged) + Q_PROPERTY(Error error READ error NOTIFY errorChanged) + Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged) + Q_PROPERTY(QObject *videoOutput READ videoOutput WRITE setVideoOutput NOTIFY videoOutputChanged) + Q_PROPERTY(QAudioOutput *audioOutput READ audioOutput WRITE setAudioOutput NOTIFY + audioOutputChanged) + + Q_PROPERTY(QList<QMediaMetaData> audioTracks READ audioTracks NOTIFY tracksChanged) + Q_PROPERTY(QList<QMediaMetaData> videoTracks READ videoTracks NOTIFY tracksChanged) + Q_PROPERTY(QList<QMediaMetaData> subtitleTracks READ subtitleTracks NOTIFY tracksChanged) + + Q_PROPERTY(int activeAudioTrack READ activeAudioTrack WRITE setActiveAudioTrack NOTIFY + activeTracksChanged) + Q_PROPERTY(int activeVideoTrack READ activeVideoTrack WRITE setActiveVideoTrack NOTIFY + activeTracksChanged) + Q_PROPERTY(int activeSubtitleTrack READ activeSubtitleTrack WRITE setActiveSubtitleTrack NOTIFY + activeTracksChanged) public: - enum State + enum PlaybackState { StoppedState, PlayingState, PausedState }; + Q_ENUM(PlaybackState) enum MediaStatus { - UnknownMediaStatus, NoMedia, LoadingMedia, LoadedMedia, @@ -99,14 +72,7 @@ public: EndOfMedia, InvalidMedia }; - - enum Flag - { - LowLatency = 0x01, - StreamPlayback = 0x02, - VideoSurface = 0x04 - }; - Q_DECLARE_FLAGS(Flags, Flag) + Q_ENUM(MediaStatus) enum Error { @@ -114,56 +80,69 @@ public: ResourceError, FormatError, NetworkError, - AccessDeniedError, - ServiceMissingError, - MediaIsPlaylist + AccessDeniedError }; + Q_ENUM(Error) - explicit QMediaPlayer(QObject *parent = nullptr, Flags flags = Flags()); + enum Loops + { + Infinite = -1, + Once = 1 + }; + Q_ENUM(Loops) + + explicit QMediaPlayer(QObject *parent = nullptr); ~QMediaPlayer(); - static QMultimedia::SupportEstimate hasSupport(const QString &mimeType, - const QStringList& codecs = QStringList(), - Flags flags = Flags()); - static QStringList supportedMimeTypes(Flags flags = Flags()); + QList<QMediaMetaData> audioTracks() const; + QList<QMediaMetaData> videoTracks() const; + QList<QMediaMetaData> subtitleTracks() const; + + int activeAudioTrack() const; + int activeVideoTrack() const; + int activeSubtitleTrack() const; + + void setActiveAudioTrack(int index); + void setActiveVideoTrack(int index); + void setActiveSubtitleTrack(int index); - void setVideoOutput(QVideoWidget *); - void setVideoOutput(QGraphicsVideoItem *); - void setVideoOutput(QAbstractVideoSurface *surface); - void setVideoOutput(const QList<QAbstractVideoSurface *> &surfaces); + void setAudioOutput(QAudioOutput *output); + QAudioOutput *audioOutput() const; - QMediaContent media() const; - const QIODevice *mediaStream() const; - QMediaPlaylist *playlist() const; - QMediaContent currentMedia() const; + void setVideoOutput(QObject *); + QObject *videoOutput() const; - State state() const; + void setVideoSink(QVideoSink *sink); + QVideoSink *videoSink() const; + + QUrl source() const; + const QIODevice *sourceDevice() const; + + PlaybackState playbackState() const; MediaStatus mediaStatus() const; qint64 duration() const; qint64 position() const; - int volume() const; - bool isMuted() const; - bool isAudioAvailable() const; - bool isVideoAvailable() const; + bool hasAudio() const; + bool hasVideo() const; - int bufferStatus() const; + float bufferProgress() const; + QMediaTimeRange bufferedTimeRange() const; bool isSeekable() const; qreal playbackRate() const; + bool isPlaying() const; + + int loops() const; + void setLoops(int loops); + Error error() const; QString errorString() const; - QMultimedia::AvailabilityStatus availability() const override; - - QAudio::Role audioRole() const; - void setAudioRole(QAudio::Role audioRole); - QList<QAudio::Role> supportedAudioRoles() const; - QString customAudioRole() const; - void setCustomAudioRole(const QString &audioRole); - QStringList supportedCustomAudioRoles() const; + bool isAvailable() const; + QMediaMetaData metaData() const; public Q_SLOTS: void play(); @@ -171,63 +150,49 @@ public Q_SLOTS: void stop(); void setPosition(qint64 position); - void setVolume(int volume); - void setMuted(bool muted); void setPlaybackRate(qreal rate); - void setMedia(const QMediaContent &media, QIODevice *stream = nullptr); - void setPlaylist(QMediaPlaylist *playlist); + void setSource(const QUrl &source); + void setSourceDevice(QIODevice *device, const QUrl &sourceUrl = QUrl()); Q_SIGNALS: - void mediaChanged(const QMediaContent &media); - void currentMediaChanged(const QMediaContent &media); - - void stateChanged(QMediaPlayer::State newState); + void sourceChanged(const QUrl &media); + void playbackStateChanged(QMediaPlayer::PlaybackState newState); void mediaStatusChanged(QMediaPlayer::MediaStatus status); void durationChanged(qint64 duration); void positionChanged(qint64 position); - void volumeChanged(int volume); - void mutedChanged(bool muted); - void audioAvailableChanged(bool available); - void videoAvailableChanged(bool videoAvailable); + void hasAudioChanged(bool available); + void hasVideoChanged(bool videoAvailable); - void bufferStatusChanged(int percentFilled); + void bufferProgressChanged(float progress); void seekableChanged(bool seekable); + void playingChanged(bool playing); void playbackRateChanged(qreal rate); + void loopsChanged(); - void audioRoleChanged(QAudio::Role role); - void customAudioRoleChanged(const QString &role); + void metaDataChanged(); + void videoOutputChanged(); + void audioOutputChanged(); - void error(QMediaPlayer::Error error); + void tracksChanged(); + void activeTracksChanged(); -public: - bool bind(QObject *) override; - void unbind(QObject *) override; + void errorChanged(); + void errorOccurred(QMediaPlayer::Error error, const QString &errorString); private: Q_DISABLE_COPY(QMediaPlayer) Q_DECLARE_PRIVATE(QMediaPlayer) - Q_PRIVATE_SLOT(d_func(), void _q_stateChanged(QMediaPlayer::State)) - Q_PRIVATE_SLOT(d_func(), void _q_mediaStatusChanged(QMediaPlayer::MediaStatus)) - Q_PRIVATE_SLOT(d_func(), void _q_error(int, const QString &)) - Q_PRIVATE_SLOT(d_func(), void _q_updateMedia(const QMediaContent&)) - Q_PRIVATE_SLOT(d_func(), void _q_playlistDestroyed()) - Q_PRIVATE_SLOT(d_func(), void _q_handleMediaChanged(const QMediaContent&)) - Q_PRIVATE_SLOT(d_func(), void _q_handlePlaylistLoaded()) - Q_PRIVATE_SLOT(d_func(), void _q_handlePlaylistLoadFailed()) + friend class QPlatformMediaPlayer; }; QT_END_NAMESPACE -Q_DECLARE_METATYPE(QMediaPlayer::State) -Q_DECLARE_METATYPE(QMediaPlayer::MediaStatus) -Q_DECLARE_METATYPE(QMediaPlayer::Error) - -Q_MEDIA_ENUM_DEBUG(QMediaPlayer, State) +Q_MEDIA_ENUM_DEBUG(QMediaPlayer, PlaybackState) Q_MEDIA_ENUM_DEBUG(QMediaPlayer, MediaStatus) Q_MEDIA_ENUM_DEBUG(QMediaPlayer, Error) |