Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qffmpegaudiorenderer_p.h
Go to the documentation of this file.
1
// Copyright (C) 2021 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
#
ifndef
QFFMPEGAUDIORENDERER_P_H
4
#
define
QFFMPEGAUDIORENDERER_P_H
5
6
//
7
// W A R N I N G
8
// -------------
9
//
10
// This file is not part of the Qt API. It exists purely as an
11
// implementation detail. This header file may change from version to
12
// version without notice, or even be removed.
13
//
14
// We mean it.
15
//
16
17
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegrenderer_p
.
h
>
18
19
#
include
<
QtMultimedia
/
qaudiobuffer
.
h
>
20
21
QT_BEGIN_NAMESPACE
22
23
class
QAudioOutput;
24
class
QAudioBufferOutput;
25
class
QAudioSink;
26
class
QFFmpegResampler
;
27
28
namespace
QFFmpeg
{
29
30
struct
AbstractAudioFrameConverter
;
31
32
class
AudioRenderer
:
public
Renderer
33
{
34
Q_OBJECT
35
public
:
36
AudioRenderer
(
const
PlaybackEngineObjectID
&
id
,
const
TimeController
&
tc
,
QAudioOutput
*
output
,
37
QAudioBufferOutput
*
bufferOutput
,
bool
pitchCompensation
);
38
39
void
setOutput
(QAudioOutput *output);
40
41
void
setOutput
(QAudioBufferOutput *bufferOutput);
42
43
void
setPitchCompensation
(
bool
enabled);
44
45
~
AudioRenderer
()
override
;
46
47
protected
:
48
using
Microseconds
=
std
::
chrono
::
microseconds
;
49
struct
SynchronizationStamp
50
{
51
QAudio
::
State
audioSinkState
=
QAudio
::
IdleState
;
52
qsizetype
audioSinkBytesFree
= 0;
53
qsizetype
bufferBytesWritten
= 0;
54
TimePoint
timePoint
=
TimePoint
::
max
();
55
};
56
57
struct
BufferLoadingInfo
58
{
59
enum
Type
{
Low
,
Moderate
,
High
};
60
Type
type
=
Moderate
;
61
TimePoint
timePoint
=
TimePoint
::
max
();
62
Microseconds
delay
=
Microseconds
(0);
63
};
64
65
struct
AudioTimings
66
{
67
Microseconds
actualBufferDuration
=
Microseconds
(0);
68
Microseconds
maxSoundDelay
=
Microseconds
(0);
69
Microseconds
minSoundDelay
=
Microseconds
(0);
70
};
71
72
struct
BufferedDataWithOffset
73
{
74
QAudioBuffer
buffer
;
75
qsizetype
offset
= 0;
76
77
bool
isValid
()
const
{
return
buffer.isValid(); }
78
qsizetype
size
()
const
{
return
buffer.byteCount() - offset; }
79
const
char
*
data
()
const
{
return
buffer.constData<
char
>() + offset; }
80
};
81
82
void
seekInternal
()
override
;
83
84
RenderingResult
renderInternal
(Frame frame)
override
;
85
86
RenderingResult
pushFrameToOutput
(
const
Frame &frame);
87
88
void
pushFrameToBufferOutput
(
const
Frame &frame);
89
90
void
onPlaybackRateChanged
()
override
;
91
92
TimePoint
nextTimePoint
()
const
override
;
93
94
void
onPauseChanged
()
override
;
95
96
void
freeOutput
();
97
98
void
updateOutputs
(
const
Frame &frame);
99
100
void
initAudioFrameConverter
(
const
Frame &frame);
101
102
void
onDeviceChanged
();
103
104
void
updateVolume
();
105
106
void
updateSynchronization
(
const
SynchronizationStamp
&stamp,
const
Frame &frame);
107
108
Microseconds
bufferLoadingTime
(
const
SynchronizationStamp
&syncStamp)
const
;
109
110
void
onAudioSinkStateChanged
(QAudio::State state);
111
112
Microseconds
durationForBytes
(qsizetype bytes)
const
;
113
114
private
:
115
QPointer<QAudioOutput> m_output;
116
QPointer<QAudioBufferOutput> m_bufferOutput;
117
std::unique_ptr<QAudioSink> m_sink;
118
AudioTimings
m_timings;
119
BufferLoadingInfo
m_bufferLoadingInfo;
120
std::unique_ptr<QFFmpegResampler> m_bufferOutputResampler;
121
QAudioFormat m_sinkFormat;
122
123
QPointer<QIODevice> m_ioDevice;
124
125
bool
m_deviceChanged =
false
;
126
bool
m_bufferOutputChanged =
false
;
127
128
bool
m_firstFrameToSink =
true
;
129
130
// pitch compensation
131
bool
m_pitchCompensation =
false
;
132
std::unique_ptr<AbstractAudioFrameConverter> m_audioFrameConverter;
133
134
struct
SessionContext
135
{
136
// TODO: add other members after clarifying the best session cleanup strategy
137
BufferedDataWithOffset
bufferedData;
138
bool
lastFramePushDone =
true
;
139
bool
drained =
false
;
140
};
141
142
SessionContext m_sessionCtx;
143
};
144
145
}
// namespace QFFmpeg
146
147
QT_END_NAMESPACE
148
149
#
endif
// QFFMPEGAUDIORENDERER_P_H
QAudioBuffer
\inmodule QtMultimedia
Definition
qaudiobuffer.h:113
QAudioFormat
The QAudioFormat class stores audio stream parameter information.
Definition
qaudioformat.h:22
QAudioFormat::isValid
constexpr bool isValid() const noexcept
Returns true if all of the parameters are valid.
Definition
qaudioformat.h:82
QFFmpegResampler
Definition
qffmpegresampler_p.h:29
QFFmpeg::AudioRenderer
Definition
qffmpegaudiorenderer_p.h:33
QFFmpeg::AudioRenderer::pushFrameToOutput
RenderingResult pushFrameToOutput(const Frame &frame)
Definition
qffmpegaudiorenderer.cpp:144
QFFmpeg::AudioRenderer::onDeviceChanged
void onDeviceChanged()
Definition
qffmpegaudiorenderer.cpp:96
QFFmpeg::AudioRenderer::durationForBytes
Microseconds durationForBytes(qsizetype bytes) const
Definition
qffmpegaudiorenderer.cpp:416
QFFmpeg::AudioRenderer::freeOutput
void freeOutput()
Definition
qffmpegaudiorenderer.cpp:256
QFFmpeg::AudioRenderer::~AudioRenderer
~AudioRenderer() override
Definition
qffmpegaudiorenderer.cpp:85
QFFmpeg::AudioRenderer::renderInternal
RenderingResult renderInternal(Frame frame) override
Definition
qffmpegaudiorenderer.cpp:126
QFFmpeg::AudioRenderer::updateOutputs
void updateOutputs(const Frame &frame)
Definition
qffmpegaudiorenderer.cpp:275
QFFmpeg::AudioRenderer::setPitchCompensation
void setPitchCompensation(bool enabled)
Definition
qffmpegaudiorenderer.cpp:74
QFFmpeg::AudioRenderer::nextTimePoint
TimePoint nextTimePoint() const override
Definition
qffmpegaudiorenderer.cpp:218
QFFmpeg::AudioRenderer::setOutput
void setOutput(QAudioBufferOutput *bufferOutput)
Definition
qffmpegaudiorenderer.cpp:68
QFFmpeg::AudioRenderer::initAudioFrameConverter
void initAudioFrameConverter(const Frame &frame)
Definition
qffmpegaudiorenderer.cpp:245
QFFmpeg::AudioRenderer::seekInternal
void seekInternal() override
Definition
qffmpegaudiorenderer.cpp:101
QFFmpeg::AudioRenderer::updateVolume
void updateVolume()
Definition
qffmpegaudiorenderer.cpp:90
QFFmpeg::AudioRenderer::updateSynchronization
void updateSynchronization(const SynchronizationStamp &stamp, const Frame &frame)
Definition
qffmpegaudiorenderer.cpp:331
QFFmpeg::AudioRenderer::onAudioSinkStateChanged
void onAudioSinkStateChanged(QAudio::State state)
Definition
qffmpegaudiorenderer.cpp:410
QFFmpeg::AudioRenderer::onPlaybackRateChanged
void onPlaybackRateChanged() override
Definition
qffmpegaudiorenderer.cpp:213
QFFmpeg::AudioRenderer::setOutput
void setOutput(QAudioOutput *output)
Definition
qffmpegaudiorenderer.cpp:63
QFFmpeg::AudioRenderer::pushFrameToBufferOutput
void pushFrameToBufferOutput(const Frame &frame)
Definition
qffmpegaudiorenderer.cpp:197
QFFmpeg::AudioRenderer::bufferLoadingTime
Microseconds bufferLoadingTime(const SynchronizationStamp &syncStamp) const
Definition
qffmpegaudiorenderer.cpp:399
QFFmpeg::AudioRenderer::onPauseChanged
void onPauseChanged() override
Definition
qffmpegaudiorenderer.cpp:239
QFFmpeg
Definition
qandroidcacertificates.cpp:26
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QFFmpeg::AbstractAudioFrameConverter
Definition
qffmpegaudioframeconverter_p.h:32
QFFmpeg::AudioRenderer::AudioTimings
Definition
qffmpegaudiorenderer_p.h:66
QFFmpeg::AudioRenderer::AudioTimings::minSoundDelay
Microseconds minSoundDelay
Definition
qffmpegaudiorenderer_p.h:69
QFFmpeg::AudioRenderer::AudioTimings::maxSoundDelay
Microseconds maxSoundDelay
Definition
qffmpegaudiorenderer_p.h:68
QFFmpeg::AudioRenderer::AudioTimings::actualBufferDuration
Microseconds actualBufferDuration
Definition
qffmpegaudiorenderer_p.h:67
QFFmpeg::AudioRenderer::BufferLoadingInfo
Definition
qffmpegaudiorenderer_p.h:58
QFFmpeg::AudioRenderer::BufferLoadingInfo::Type
Type
Definition
qffmpegaudiorenderer_p.h:59
QFFmpeg::AudioRenderer::BufferLoadingInfo::High
@ High
Definition
qffmpegaudiorenderer_p.h:59
QFFmpeg::AudioRenderer::BufferLoadingInfo::Moderate
@ Moderate
Definition
qffmpegaudiorenderer_p.h:59
QFFmpeg::AudioRenderer::BufferLoadingInfo::Low
@ Low
Definition
qffmpegaudiorenderer_p.h:59
QFFmpeg::AudioRenderer::BufferLoadingInfo::delay
Microseconds delay
Definition
qffmpegaudiorenderer_p.h:62
QFFmpeg::AudioRenderer::BufferLoadingInfo::type
Type type
Definition
qffmpegaudiorenderer_p.h:60
QFFmpeg::AudioRenderer::BufferLoadingInfo::timePoint
TimePoint timePoint
Definition
qffmpegaudiorenderer_p.h:61
QFFmpeg::AudioRenderer::BufferedDataWithOffset
Definition
qffmpegaudiorenderer_p.h:73
QFFmpeg::AudioRenderer::BufferedDataWithOffset::size
qsizetype size() const
Definition
qffmpegaudiorenderer_p.h:78
QFFmpeg::AudioRenderer::BufferedDataWithOffset::buffer
QAudioBuffer buffer
Definition
qffmpegaudiorenderer_p.h:74
QFFmpeg::AudioRenderer::BufferedDataWithOffset::isValid
bool isValid() const
Definition
qffmpegaudiorenderer_p.h:77
QFFmpeg::AudioRenderer::BufferedDataWithOffset::data
const char * data() const
Definition
qffmpegaudiorenderer_p.h:79
QFFmpeg::AudioRenderer::BufferedDataWithOffset::offset
qsizetype offset
Definition
qffmpegaudiorenderer_p.h:75
QFFmpeg::AudioRenderer::SynchronizationStamp
Definition
qffmpegaudiorenderer_p.h:50
QFFmpeg::AudioRenderer::SynchronizationStamp::timePoint
TimePoint timePoint
Definition
qffmpegaudiorenderer_p.h:54
QFFmpeg::AudioRenderer::SynchronizationStamp::bufferBytesWritten
qsizetype bufferBytesWritten
Definition
qffmpegaudiorenderer_p.h:53
QFFmpeg::AudioRenderer::SynchronizationStamp::audioSinkBytesFree
qsizetype audioSinkBytesFree
Definition
qffmpegaudiorenderer_p.h:52
QFFmpeg::AudioRenderer::SynchronizationStamp::audioSinkState
QAudio::State audioSinkState
Definition
qffmpegaudiorenderer_p.h:51
QFFmpeg::Frame
Definition
qffmpegframe_p.h:31
qtmultimedia
src
plugins
multimedia
ffmpeg
playbackengine
qffmpegaudiorenderer_p.h
Generated on
for Qt by
1.18.0