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
qffmpegrenderer_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
QFFMPEGRENDERER_P_H
4
#
define
QFFMPEGRENDERER_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
/
qffmpegplaybackengineobject_p
.
h
>
18
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegtimecontroller_p
.
h
>
19
#
include
<
QtFFmpegMediaPluginImpl
/
private
/
qffmpegframe_p
.
h
>
20
21
#
include
<
QtCore
/
qpointer
.
h
>
22
#
include
<
QtCore
/
qqueue
.
h
>
23
24
#
include
<
chrono
>
25
26
QT_BEGIN_NAMESPACE
27
28
namespace
QFFmpeg
{
29
30
class
Renderer
:
public
PlaybackEngineObject
31
{
32
Q_OBJECT
33
public
:
34
using
TimePoint
=
SteadyClock
::
time_point
;
35
36
Renderer
(
const
PlaybackEngineObjectID &id,
const
TimeController &tc);
37
38
TrackPosition
seekPosition
()
const
;
39
40
TrackPosition
lastPosition
()
const
;
41
42
void
setPlaybackRate
(
float
rate);
43
44
void
doForceStep
();
45
46
bool
isStepForced
()
const
;
47
48
void
setTimeController
(
const
TimeController &tc);
49
50
void
seek
(quint64 sessionId,
const
TimeController &tc,
const
LoopOffset &offset);
51
52
public
Q_SLOTS
:
53
54
void
onFinalFrameReceived
(
PlaybackEngineObjectID
sourceID
);
55
56
void
render
(
Frame
);
57
58
Q_SIGNALS
:
59
void
frameProcessed
(
Frame
);
60
61
void
synchronized
(PlaybackEngineObjectID id, TimePoint tp, TrackPosition pos);
62
63
void
forceStepDone
();
64
65
void
loopChanged
(PlaybackEngineObjectID id, TrackPosition offset,
int
index);
66
67
protected
:
68
bool
setForceStepDone
();
69
70
void
onPauseChanged
()
override
;
71
72
bool
canDoNextStep
()
const
override
;
73
74
TimePoint
nextTimePoint
()
const
override
;
75
76
virtual
void
seekInternal
() { }
77
78
virtual
void
onPlaybackRateChanged
() { }
79
80
struct
RenderingResult
81
{
82
bool
done
=
true
;
83
std
::chrono::microseconds
recheckInterval
=
std
::
chrono
::
microseconds
(0);
84
};
85
86
virtual
RenderingResult
renderInternal
(Frame frame) = 0;
87
88
float
playbackRate
()
const
;
89
90
std
::chrono::microseconds
frameDelay
(
const
Frame &frame,
91
TimePoint timePoint =
SteadyClock
::
now
())
const
;
92
93
void
changeRendererTime
(
std
::chrono::microseconds offset);
94
95
template
<
typename
Output,
typename
ChangeHandler>
96
void
setOutputInternal
(QPointer<Output> &actual, Output *desired, ChangeHandler &&changeHandler)
97
{
98
const
auto
connectionType =
99
thread()->isCurrentThread() ? Qt::AutoConnection : Qt::BlockingQueuedConnection;
100
auto
doer = [desired, changeHandler, &actual]() {
101
const
auto
prev = std::exchange(actual, desired);
102
if
(prev != desired)
103
changeHandler(prev);
104
};
105
QMetaObject::invokeMethod(
this
, doer, connectionType);
106
}
107
108
private
:
109
void
doNextStep
()
override
;
110
111
private
:
112
struct
SessionContext
113
{
114
TimeController timeController;
115
int
loopIndex = 0;
116
TrackPosition lastFrameEnd = timeController.currentPosition();
117
QAtomicInteger<qint64> lastPosition = lastFrameEnd.get();
118
QAtomicInteger<qint64> seekPos = lastFrameEnd.get();
119
QQueue<Frame> frames = {};
120
std::optional<TimePoint> explicitNextFrameTime = {};
121
};
122
123
SessionContext m_sessionCtx;
124
QAtomicInteger<
bool
> m_isStepForced =
false
;
125
};
126
127
}
// namespace QFFmpeg
128
129
QT_END_NAMESPACE
130
131
#
endif
// QFFMPEGRENDERER_P_H
QFFmpeg::Renderer
Definition
qffmpegrenderer_p.h:31
QFFmpeg::Renderer::render
void render(Frame)
Definition
qffmpegrenderer.cpp:84
QFFmpeg::Renderer::onPauseChanged
void onPauseChanged() override
Definition
qffmpegrenderer.cpp:108
QFFmpeg::Renderer::frameDelay
std::chrono::microseconds frameDelay(const Frame &frame, TimePoint timePoint=SteadyClock::now()) const
Definition
qffmpegrenderer.cpp:208
QFFmpeg::Renderer::Renderer
Renderer(const PlaybackEngineObjectID &id, const TimeController &tc)
Definition
qffmpegrenderer.cpp:14
QFFmpeg::Renderer::doNextStep
void doNextStep() override
Definition
qffmpegrenderer.cpp:162
QFFmpeg::Renderer::loopChanged
void loopChanged(PlaybackEngineObjectID id, TrackPosition offset, int index)
QFFmpeg::Renderer::renderInternal
virtual RenderingResult renderInternal(Frame frame)=0
QFFmpeg::Renderer::setForceStepDone
bool setForceStepDone()
Definition
qffmpegrenderer.cpp:152
QFFmpeg::Renderer::canDoNextStep
bool canDoNextStep() const override
Definition
qffmpegrenderer.cpp:114
QFFmpeg::Renderer::doForceStep
void doForceStep()
Definition
qffmpegrenderer.cpp:38
QFFmpeg::Renderer::setTimeController
void setTimeController(const TimeController &tc)
Definition
qffmpegrenderer.cpp:59
QFFmpeg::Renderer::setPlaybackRate
void setPlaybackRate(float rate)
Definition
qffmpegrenderer.cpp:29
QFFmpeg::Renderer::seek
void seek(quint64 sessionId, const TimeController &tc, const LoopOffset &offset)
Definition
qffmpegrenderer.cpp:68
QFFmpeg::Renderer::playbackRate
float playbackRate() const
Definition
qffmpegrenderer.cpp:127
QFFmpeg::Renderer::nextTimePoint
TimePoint nextTimePoint() const override
Definition
qffmpegrenderer.cpp:132
QFFmpeg::Renderer::seekInternal
virtual void seekInternal()
Definition
qffmpegrenderer_p.h:76
QFFmpeg::Renderer::lastPosition
TrackPosition lastPosition() const
Definition
qffmpegrenderer.cpp:24
QFFmpeg::Renderer::onPlaybackRateChanged
virtual void onPlaybackRateChanged()
Definition
qffmpegrenderer_p.h:78
QFFmpeg::Renderer::setOutputInternal
void setOutputInternal(QPointer< Output > &actual, Output *desired, ChangeHandler &&changeHandler)
Definition
qffmpegrenderer_p.h:96
QFFmpeg::Renderer::synchronized
void synchronized(PlaybackEngineObjectID id, TimePoint tp, TrackPosition pos)
QFFmpeg::Renderer::changeRendererTime
void changeRendererTime(std::chrono::microseconds offset)
Definition
qffmpegrenderer.cpp:214
QFFmpeg::Renderer::forceStepDone
void forceStepDone()
QFFmpeg::Renderer::isStepForced
bool isStepForced() const
Definition
qffmpegrenderer.cpp:54
QFFmpeg::Renderer::seekPosition
TrackPosition seekPosition() const
Definition
qffmpegrenderer.cpp:19
QFFmpeg
Definition
qandroidcacertificates.cpp:26
QFFmpeg::Q_STATIC_LOGGING_CATEGORY
Q_STATIC_LOGGING_CATEGORY(qLCAndroidCaCertificates, "qt.multimedia.ffmpeg.android.caCertificates")
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::Renderer::RenderingResult
Definition
qffmpegrenderer_p.h:81
QFFmpeg::Renderer::RenderingResult::recheckInterval
std::chrono::microseconds recheckInterval
Definition
qffmpegrenderer_p.h:83
QFFmpeg::Renderer::RenderingResult::done
bool done
Definition
qffmpegrenderer_p.h:82
qtmultimedia
src
plugins
multimedia
ffmpeg
playbackengine
qffmpegrenderer_p.h
Generated on
for Qt by
1.18.0