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
qffmpegvideoencoder_p.h
Go to the documentation of this file.
1
// Copyright (C) 2024 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
QFFMPEGVIDEOENCODER_P_H
4
#
define
QFFMPEGVIDEOENCODER_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
/
qffmpegencoderthread_p
.
h
>
18
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpeg_p
.
h
>
19
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegvideoframeencoder_p
.
h
>
20
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegframerateadapter_p
.
h
>
21
#
include
<
qvideoframe
.
h
>
22
#
include
<
queue
>
23
24
QT_BEGIN_NAMESPACE
25
26
class
QVideoFrameFormat;
27
class
QMediaEncoderSettings;
28
29
namespace
QFFmpeg
{
30
class
VideoFrameEncoder
;
31
32
class
VideoEncoder
:
public
EncoderThread
33
{
34
public
:
35
VideoEncoder(
RecordingEngine
&recordingEngine,
const
QMediaEncoderSettings &settings,
36
const
QVideoFrameFormat &format, std::optional<AVPixelFormat> hwFormat);
37
~
VideoEncoder
()
override
;
38
39
void
addFrame(
const
QVideoFrame &frame);
40
41
protected
:
42
bool
checkIfCanPushFrame
()
const
override
;
43
44
private
:
45
FrameInfo
dequeueAdaptedFrame();
46
void
retrievePackets();
47
48
[[nodiscard]]
bool
tryPushToInputQueue(
const
QVideoFrame &frame);
49
void
saturateEncoderQueue();
50
void
flushAdapter();
51
52
bool
init
()
override
;
53
void
cleanup
()
override
;
54
bool
hasData
()
const
override
;
55
void
processOne
()
override
;
56
void
handlePausedChanged
(
bool
paused)
override
;
57
58
std::pair<qint64, qint64> frameTimeStamps(
const
QVideoFrame &frame)
const
;
59
60
QMediaEncoderSettings m_settings;
61
VideoFrameEncoder::SourceParams m_sourceParams;
62
63
struct
InputFrame
64
{
65
QVideoFrame frame;
66
bool
restartTimeBase =
false
;
67
};
68
std::queue<InputFrame> m_inputQueue;
69
// Max queue size arbitrarily chosen to limit memory usage (332 MB @ 4K when including one
70
// adapted frame in encoder queue)
71
const
size_t m_maxQueueSize = 9;
72
std::queue<FrameInfo> m_encoderQueue;
73
74
VideoFrameEncoderUPtr m_frameEncoder;
75
qint64 m_baseTime = 0;
76
bool
m_shouldAdjustTimeBaseForNextFrame =
true
;
77
qint64 m_lastFrameTime = 0;
78
79
std::optional<qreal> m_fixedSourceFrameRate;
// nullopt = variable-rate source
80
FrameRateAdapter m_frameRateAdapter;
81
};
82
83
}
// namespace QFFmpeg
84
85
QT_END_NAMESPACE
86
87
#
endif
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
QFFmpegAudioInput
Definition
qffmpegaudioinput_p.h:31
QFFmpeg::AudioEncoder
Definition
qffmpegaudioencoder_p.h:31
QFFmpeg::EncoderThread
Definition
qffmpegencoderthread_p.h:33
QFFmpeg::RecordingEngine
Definition
qffmpegrecordingengine_p.h:46
QFFmpeg::RecordingEngine::isEndOfSourceStreams
bool isEndOfSourceStreams() const
Definition
qffmpegrecordingengine.cpp:306
QFFmpeg::RecordingEngine::initialize
bool initialize(const std::vector< QAudioBufferSource * > &audioSources, const std::vector< QPlatformVideoSource * > &videoSources)
Definition
qffmpegrecordingengine.cpp:211
QFFmpeg::RecordingEngine::~RecordingEngine
~RecordingEngine() override
Definition
qffmpegrecordingengine.cpp:76
QFFmpeg::RecordingEngine::waitForEncodingStart
bool waitForEncodingStart() const
Definition
qffmpegrecordingengine_p.h:74
QFFmpeg::RecordingEngine::finalize
void finalize()
Definition
qffmpegrecordingengine.cpp:258
QFFmpeg::RecordingEngine::setAutoStop
void setAutoStop(bool autoStop)
Definition
qffmpegrecordingengine.cpp:285
QFFmpeg::RecordingEngine::setPaused
void setPaused(bool p)
Definition
qffmpegrecordingengine.cpp:280
QFFmpeg::VideoEncoder
Definition
qffmpegvideoencoder_p.h:33
QFFmpeg::VideoEncoder::init
bool init() override
Called on this thread when thread starts.
Definition
qffmpegvideoencoder.cpp:145
QFFmpeg::VideoEncoder::checkIfCanPushFrame
bool checkIfCanPushFrame() const override
Definition
qffmpegvideoencoder.cpp:285
QFFmpeg::VideoEncoder::~VideoEncoder
~VideoEncoder() override
QFFmpeg::VideoEncoder::processOne
void processOne() override
Process one work item.
Definition
qffmpegvideoencoder.cpp:196
QFFmpeg::VideoEncoder::cleanup
void cleanup() override
Called on this thread before thread exits.
Definition
qffmpegvideoencoder.cpp:167
QFFmpeg::VideoEncoder::handlePausedChanged
void handlePausedChanged(bool paused) override
Definition
qffmpegvideoencoder.cpp:139
QFFmpeg::VideoEncoder::hasData
bool hasData() const override
Must return true when data is available for processing.
Definition
qffmpegvideoencoder.cpp:179
QFFmpeg::VideoFrameEncoder
Definition
qffmpegvideoframeencoder_p.h:34
QFFmpeg
Definition
qandroidcacertificates.cpp:26
QFFmpeg::disconnectEncoderFromSource
void disconnectEncoderFromSource(EncoderThread *encoder)
Definition
qffmpegrecordingengineutils.cpp:47
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qCWarning
#define qCWarning(category,...)
Definition
qloggingcategory.h:164
qCDebug
#define qCDebug(category,...)
Definition
qloggingcategory.h:162
Q_STATIC_LOGGING_CATEGORY
#define Q_STATIC_LOGGING_CATEGORY(name,...)
Definition
qloggingcategory.h:154
QFFmpeg::FrameInfo
Definition
qmacscreencapturekit.mm:111
qtmultimedia
src
plugins
multimedia
ffmpeg
recordingengine
qffmpegvideoencoder_p.h
Generated on
for Qt by
1.18.0