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
29#import <AvFoundation/AVFoundation.h>
30
31@class AVFMediaPlayerObserver;
32
33QT_BEGIN_NAMESPACE
34
35class AVFMediaPlayer;
37class AVFVideoSink;
38
40{
42public:
45
46 void setVideoSink(QVideoSink *sink) override;
49
50 QMediaPlayer::PlaybackState state() const override;
51 QMediaPlayer::MediaStatus mediaStatus() const override;
52
53 QUrl media() const override;
54 QIODevice *mediaStream() const override;
55 void setMedia(const QUrl &content, QIODevice *stream) override;
56
57 qint64 position() const override;
58 qint64 duration() const override;
59
60 float bufferProgress() const override;
61
62 bool isAudioAvailable() const override;
63 bool isVideoAvailable() const override;
64
65 bool isSeekable() const override;
67
68 qreal playbackRate() const override;
69
70 void setAudioOutput(QPlatformAudioOutput *output) override;
72
73 QMediaMetaData metaData() const override;
74
75 static void videoOrientationForAssetTrack(AVAssetTrack *track,
76 QtVideo::Rotation &angle,
77 bool &mirrored);
78
80 void setPitchCompensation(bool enabled) override;
81 bool pitchCompensation() const override;
82
83public Q_SLOTS:
85 void nativeSizeChanged(QSize size);
86
87 void setPosition(qint64 pos) override;
88
89 void play() override;
90 void pause() override;
91 void stop() override;
92
93 void setVolume(float volume);
94 void setMuted(bool muted);
96
97 void processEOS();
98 void processLoadStateChange(QMediaPlayer::PlaybackState newState);
101
104
105 void processBufferStateChange(int bufferProgress);
106
107 void processDurationChange(qint64 duration);
108
109 void streamReady();
110 void streamDestroyed();
111 void updateTracks();
112 void setActiveTrack(QPlatformMediaPlayer::TrackType type, int index) override;
113 int activeTrack(QPlatformMediaPlayer::TrackType type) override;
114 int trackCount(TrackType) override;
115 QMediaMetaData trackMetaData(TrackType type, int trackNumber) override;
116
117public:
120
121private:
122 void setAudioAvailable(bool available);
123 void setVideoAvailable(bool available);
124 void setSeekable(bool seekable);
125 void resetStream(QIODevice *stream = nullptr);
126 void applyPitchCompensation(bool enabled);
127
128 void orientationChanged(QtVideo::Rotation rotation, bool mirrored);
129
130 AVFVideoRendererControl *m_videoOutput = nullptr;
131 AVFVideoSink *m_videoSink = nullptr;
132
133 QMediaPlayer::PlaybackState m_state;
134 QMediaPlayer::MediaStatus m_mediaStatus;
135 QIODevice *m_mediaStream;
136 QUrl m_resources;
137 QMediaMetaData m_metaData;
138
139 qreal m_rate;
140 qint64 m_requestedPosition;
141
142 qint64 m_duration;
143 int m_bufferProgress;
144 bool m_videoAvailable;
145 bool m_audioAvailable;
146 bool m_seekable;
147 bool m_pitchCompensationEnabled{ false };
148
149 AVFMediaPlayerObserver *m_observer;
150
151 QTimer m_playbackTimer;
152};
153
154QT_END_NAMESPACE
155
156#endif // AVFMEDIAPLAYER_H
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)
AVMetadataIdentifier quickTimeUserData
AVMetadataIdentifier common
AVMetadataIdentifier ID3
AVMetadataIdentifier iTunes
AVMetadataIdentifier isoUserData
AVMetadataIdentifier quickTime