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
avfmediaplayer_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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#ifndef AVFMEDIAPLAYER_H
5#define AVFMEDIAPLAYER_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtCore/QObject>
19#include <QtCore/QByteArray>
20#include <QtCore/QSet>
21#include <QtCore/QResource>
22#include <QtCore/QUrl>
23#include <QtCore/QTimer>
24
25#include <private/qplatformmediaplayer_p.h>
26#include <QtMultimedia/QMediaPlayer>
27#include <QtMultimedia/QVideoFrame>
28
33
34QT_BEGIN_NAMESPACE
35
36class AVFMediaPlayer;
38class AVFVideoSink;
39
41{
43public:
46
47 void setVideoSink(QVideoSink *sink) override;
50
51 QMediaPlayer::PlaybackState state() const override;
52 QMediaPlayer::MediaStatus mediaStatus() const override;
53
54 QUrl media() const override;
55 QIODevice *mediaStream() const override;
56 void setMedia(const QUrl &content, QIODevice *stream) override;
57
58 qint64 position() const override;
59 qint64 duration() const override;
60
61 float bufferProgress() const override;
62
63 bool isAudioAvailable() const override;
64 bool isVideoAvailable() const override;
65
66 bool isSeekable() const override;
68
69 qreal playbackRate() const override;
70
71 void setAudioOutput(QPlatformAudioOutput *output) override;
73
74 QMediaMetaData metaData() const override;
75
76 static void videoOrientationForAssetTrack(AVAssetTrack *track,
77 QtVideo::Rotation &angle,
78 bool &mirrored);
79
81 void setPitchCompensation(bool enabled) override;
82 bool pitchCompensation() const override;
83
84public Q_SLOTS:
86 void nativeSizeChanged(QSize size);
87
88 void setPosition(qint64 pos) override;
89
90 void play() override;
91 void pause() override;
92 void stop() override;
93
94 void setVolume(float volume);
95 void setMuted(bool muted);
97
98 void processEOS();
99 void processLoadStateChange(QMediaPlayer::PlaybackState newState);
102
105
106 void processBufferStateChange(int bufferProgress);
107
108 void processDurationChange(qint64 duration);
109
110 void streamReady();
111 void streamDestroyed();
112 void updateTracks();
113 void setActiveTrack(QPlatformMediaPlayer::TrackType type, int index) override;
114 int activeTrack(QPlatformMediaPlayer::TrackType type) override;
115 int trackCount(TrackType) override;
116 QMediaMetaData trackMetaData(TrackType type, int trackNumber) override;
117
118public:
121
122private:
123 void setAudioAvailable(bool available);
124 void setVideoAvailable(bool available);
125 void setSeekable(bool seekable);
126 void resetStream(QIODevice *stream = nullptr);
127 void applyPitchCompensation(bool enabled);
128
129 void orientationChanged(QtVideo::Rotation rotation, bool mirrored);
130
131 AVFVideoRendererControl *m_videoOutput = nullptr;
132 AVFVideoSink *m_videoSink = nullptr;
133
134 QMediaPlayer::PlaybackState m_state;
135 QMediaPlayer::MediaStatus m_mediaStatus;
136 QIODevice *m_mediaStream;
137 QUrl m_resources;
138 QMediaMetaData m_metaData;
139
140 qreal m_rate;
141 qint64 m_requestedPosition;
142
143 qint64 m_duration;
144 int m_bufferProgress;
145 bool m_videoAvailable;
146 bool m_audioAvailable;
147 bool m_seekable;
148 bool m_pitchCompensationEnabled{ false };
149
150 AVFMediaPlayerObserver *m_observer;
151
152 QTimer m_playbackTimer;
153};
154
155QT_END_NAMESPACE
156
157#endif // AVFMEDIAPLAYER_H
Q_FORWARD_DECLARE_OBJC_CLASS(AVAssetTrack)
Q_FORWARD_DECLARE_OBJC_CLASS(AVPlayerItemTrack)
Q_FORWARD_DECLARE_OBJC_CLASS(AVFMediaPlayerObserver)
static AVMetadataIdentifier toIdentifier(QMediaMetaData::Key key, AVMetadataKeySpace keySpace)
static AVMutableMetadataItem * setAVMetadataItemForKey(QMediaMetaData::Key key, const QVariant &value, AVMetadataKeySpace keySpace=AVMetadataKeySpaceCommon)
static std::optional< QMediaMetaData::Key > toKey(AVMetadataItem *item)
static QMediaMetaData fromAVMetadata(NSArray *metadataItems)
const AVMetadataIDs keyToAVMetaDataID[]
QMediaMetaData trackMetaData(TrackType type, int trackNumber) override
qint64 duration() const override
void setVolume(float volume)
void processLoadStateChange()
int trackCount(TrackType) override
void setPosition(qint64 pos) override
void setVideoSink(QVideoSink *sink) override
QMediaTimeRange availablePlaybackRanges() const override
void nativeSizeChanged(QSize size)
static void videoOrientationForAssetTrack(AVAssetTrack *track, QtVideo::Rotation &angle, bool &mirrored)
bool isAudioAvailable() const override
QMediaMetaData metaData() const override
void setVideoOutput(AVFVideoRendererControl *output)
void stop() override
float bufferProgress() const override
void setMedia(const QUrl &content, QIODevice *stream) override
qint64 position() const override
int activeTrack(QPlatformMediaPlayer::TrackType type) override
void setPitchCompensation(bool enabled) override
QMediaPlayer::PlaybackState state() const override
void setMuted(bool muted)
void pause() override
QPlatformAudioOutput * m_audioOutput
void play() override
void processDurationChange(qint64 duration)
QUrl media() const override
QList< AVPlayerItemTrack * > nativeTracks[QPlatformMediaPlayer::NTrackTypes]
bool pitchCompensation() const override
void processLoadStateFailure()
void updateAudioOutputDevice()
qreal playbackRate() const override
QMediaPlayer::MediaStatus mediaStatus() const override
void processLoadStateChange(QMediaPlayer::PlaybackState newState)
QIODevice * mediaStream() const override
PitchCompensationAvailability pitchCompensationAvailability() const override
~AVFMediaPlayer() override
AVAsset * currentAssetHandle()
bool isVideoAvailable() const override
bool isSeekable() const override
void setAudioOutput(QPlatformAudioOutput *output) override
void setActiveTrack(QPlatformMediaPlayer::TrackType type, int index) override
QList< QMediaMetaData > tracks[QPlatformMediaPlayer::NTrackTypes]
void processBufferStateChange(int bufferProgress)
#define __has_include(x)
Q_FORWARD_DECLARE_OBJC_CLASS(NSObject)
AVMetadataIdentifier quickTimeUserData
AVMetadataIdentifier common
AVMetadataIdentifier ID3
AVMetadataIdentifier iTunes
AVMetadataIdentifier isoUserData
AVMetadataIdentifier quickTime