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
qffmpegrecordingengineutils_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
4
#
ifndef
QFFMPEGRECORDINGENGINEUTILS_P_H
5
#
define
QFFMPEGRECORDINGENGINEUTILS_P_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
"qobject.h"
19
#
include
<
QtMultimedia
/
qvideoframe
.
h
>
20
#
include
<
optional
>
21
#
include
<
queue
>
22
23
QT_BEGIN_NAMESPACE
24
25
class
QMediaInputEncoderInterface;
26
class
QPlatformVideoSource;
27
28
namespace
QFFmpeg
{
29
30
constexpr
qint64
VideoFrameTimeBase
= 1000000;
// us in sec
31
32
// Fallback frame rate used when no real rate is known (e.g. variable-rate sources
33
// with untimed frames), chosen to keep pts advancing and satisfy players/muxers
34
// that require a valid duration.
35
constexpr
int
DefaultVideoFrameRate
= 30;
36
37
class
EncoderThread
;
38
39
struct
FrameInfo
40
{
41
QVideoFrame
frame
;
42
bool
adjustTimeBase
{
false
};
43
std
::
optional
<
qint64
>
overriddenPts
;
44
};
45
46
template
<
typename
T>
47
T
dequeueIfPossible
(std::queue<T> &queue)
48
{
49
if
(queue.empty())
50
return
T{};
51
52
auto
result =
std
::move(queue.front());
53
queue.pop();
54
return
result;
55
}
56
57
void
setEncoderInterface
(QObject *source, QMediaInputEncoderInterface *);
58
59
void
setEncoderUpdateConnection
(QObject *source,
EncoderThread
*encoder);
60
61
template
<
typename
Encoder,
typename
Source>
62
void
connectEncoderToSource
(Encoder *encoder, Source *source)
63
{
64
Q_ASSERT(!encoder->source());
65
encoder->setSource(source);
66
67
if
constexpr
(
std
::is_same_v<Source, QPlatformVideoSource>) {
68
QObject::connect(source, &Source::newVideoFrame, encoder, &Encoder::addFrame,
69
Qt::DirectConnection);
70
71
QObject::connect(source, &Source::activeChanged, encoder, [=]() {
72
if
(!source->isActive())
73
encoder->setEndOfSourceStream();
74
});
75
}
else
{
76
QObject::connect(source, &Source::newAudioBuffer, encoder, &Encoder::addBuffer,
77
Qt::DirectConnection);
78
}
79
80
// TODO:
81
// QObject::connect(source, &Source::disconnectedFromSession, encoder, [=]() {
82
// encoder->setSourceEndOfStream();
83
// });
84
85
setEncoderUpdateConnection(source, encoder);
86
setEncoderInterface(source, encoder);
87
}
88
89
void
disconnectEncoderFromSource
(
EncoderThread
*encoder);
90
91
}
// namespace QFFmpeg
92
93
QT_END_NAMESPACE
94
95
#
endif
// QFFMPEGRECORDINGENGINEUTILS_P_H
QAudioFormat
The QAudioFormat class stores audio stream parameter information.
Definition
qaudioformat.h:22
QFFmpeg::AudioEncoder
Definition
qffmpegaudioencoder_p.h:31
QFFmpeg::AudioEncoder::init
bool init() override
Called on this thread when thread starts.
Definition
qffmpegaudioencoder.cpp:148
QFFmpeg::AudioEncoder::AudioEncoder
AudioEncoder(RecordingEngine &recordingEngine, const QAudioFormat &sourceFormat, const QMediaEncoderSettings &settings)
Definition
qffmpegaudioencoder.cpp:96
QFFmpeg::AudioEncoder::addBuffer
void addBuffer(const QAudioBuffer &buffer)
Definition
qffmpegaudioencoder.cpp:115
QFFmpeg::AudioEncoder::cleanup
void cleanup() override
Called on this thread before thread exits.
Definition
qffmpegaudioencoder.cpp:209
QFFmpeg::AudioEncoder::hasData
bool hasData() const override
Must return true when data is available for processing.
Definition
qffmpegaudioencoder.cpp:226
QFFmpeg::AudioEncoder::processOne
void processOne() override
Process one work item.
Definition
qffmpegaudioencoder.cpp:255
QFFmpeg::AudioEncoder::checkIfCanPushFrame
bool checkIfCanPushFrame() const override
Definition
qffmpegaudioencoder.cpp:277
QFFmpeg::EncoderThread
Definition
qffmpegencoderthread_p.h:33
QFFmpeg::RecordingEngine
Definition
qffmpegrecordingengine_p.h:46
QFFmpeg
Definition
qandroidcacertificates.cpp:26
QFFmpeg::Q_STATIC_LOGGING_CATEGORY
Q_STATIC_LOGGING_CATEGORY(qLCAndroidCaCertificates, "qt.multimedia.ffmpeg.android.caCertificates")
QFFmpeg::setEncoderInterface
void setEncoderInterface(QObject *source, QMediaInputEncoderInterface *)
Definition
qffmpegrecordingengineutils.cpp:22
QFFmpeg::setEncoderUpdateConnection
void setEncoderUpdateConnection(QObject *source, EncoderThread *encoder)
Definition
qffmpegrecordingengineutils.cpp:38
QFFmpeg::dequeueIfPossible
T dequeueIfPossible(std::queue< T > &queue)
Definition
qffmpegrecordingengineutils_p.h:47
QFFmpeg::disconnectEncoderFromSource
void disconnectEncoderFromSource(EncoderThread *encoder)
Definition
qffmpegrecordingengineutils.cpp:47
QFFmpeg::DefaultVideoFrameRate
constexpr int DefaultVideoFrameRate
Definition
qffmpegrecordingengineutils_p.h:35
QFFmpeg::connectEncoderToSource
void connectEncoderToSource(Encoder *encoder, Source *source)
Definition
qffmpegrecordingengineutils_p.h:62
QFFmpeg::VideoFrameTimeBase
constexpr qint64 VideoFrameTimeBase
Definition
qffmpegrecordingengineutils_p.h:30
QFFmpeg::audioEncoderExtendedTracing
static constexpr bool audioEncoderExtendedTracing
Definition
qffmpegaudioencoder.cpp:19
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
QFFmpeg::FrameInfo
Definition
qmacscreencapturekit.mm:111
QFFmpeg::FrameInfo::frame
QVideoFrame frame
Definition
qffmpegrecordingengineutils_p.h:41
QFFmpeg::FrameInfo::overriddenPts
std::optional< qint64 > overriddenPts
Definition
qffmpegrecordingengineutils_p.h:43
QFFmpeg::FrameInfo::adjustTimeBase
bool adjustTimeBase
Definition
qffmpegrecordingengineutils_p.h:42
qtmultimedia
src
plugins
multimedia
ffmpeg
recordingengine
qffmpegrecordingengineutils_p.h
Generated on
for Qt by
1.18.0