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
qffmpegplaybackengineobject.cpp
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
4
#
include
"playbackengine/qffmpegplaybackengineobject_p.h"
5
6
#
include
"qtimer.h"
7
#
include
"qdebug.h"
8
9
QT_BEGIN_NAMESPACE
10
11
namespace
QFFmpeg
{
12
13
static
QAtomicInteger
<
PlaybackEngineObject
::
Id
>
PersistentId
= 0;
14
15
PlaybackEngineObject
::
PlaybackEngineObject
() :
m_id
(
PersistentId
.
fetchAndAddRelaxed
(1)) { }
16
17
PlaybackEngineObject
::~
PlaybackEngineObject
()
18
{
19
if
(!thread()->isCurrentThread())
20
qWarning() <<
"The playback engine object is being removed in an unexpected thread"
;
21
}
22
23
bool
PlaybackEngineObject
::
isPaused
()
const
24
{
25
return
m_paused;
26
}
27
28
void
PlaybackEngineObject
::
setAtEnd
(
bool
isAtEnd)
29
{
30
if
(m_atEnd.testAndSetRelease(!isAtEnd, isAtEnd) && isAtEnd)
31
emit atEnd();
32
}
33
34
bool
PlaybackEngineObject
::
isAtEnd
()
const
35
{
36
return
m_atEnd;
37
}
38
39
PlaybackEngineObject
::
Id
PlaybackEngineObject
::
id
()
const
40
{
41
return
m_id;
42
}
43
44
void
PlaybackEngineObject
::
setPaused
(
bool
isPaused)
45
{
46
if
(m_paused.testAndSetRelease(!isPaused, isPaused))
47
QMetaObject::invokeMethod(
this
, &PlaybackEngineObject::onPauseChanged);
48
}
49
50
void
PlaybackEngineObject
::
kill
()
51
{
52
m_deleting.storeRelease(
true
);
53
54
disconnect();
55
deleteLater();
56
}
57
58
bool
PlaybackEngineObject
::
canDoNextStep
()
const
59
{
60
return
!m_paused;
61
}
62
63
QTimer &
PlaybackEngineObject
::
timer
()
64
{
65
if
(!m_timer) {
66
m_timer = std::make_unique<QTimer>();
67
m_timer->setTimerType(Qt::PreciseTimer);
68
m_timer->setSingleShot(
true
);
69
connect(m_timer.get(), &QTimer::timeout,
this
, &PlaybackEngineObject::onTimeout);
70
}
71
72
return
*m_timer;
73
}
74
75
void
PlaybackEngineObject
::onTimeout()
76
{
77
if
(!m_deleting && canDoNextStep())
78
doNextStep
(
)
;
79
}
80
81
std
::chrono::milliseconds
PlaybackEngineObject
::
timerInterval
()
const
82
{
83
using
namespace
std
::chrono_literals;
84
return
0ms;
85
}
86
87
void
PlaybackEngineObject
::
onPauseChanged
()
88
{
89
scheduleNextStep
(
)
;
90
}
91
92
void
PlaybackEngineObject
::
scheduleNextStep
(
bool
allowDoImmediatelly)
93
{
94
using
std
::chrono::milliseconds;
95
using
namespace
std
::chrono_literals;
96
97
if
(!m_deleting && canDoNextStep()) {
98
const
milliseconds interval = timerInterval();
99
if
(interval == 0ms && allowDoImmediatelly) {
100
timer
(
)
.stop();
101
doNextStep
(
)
;
102
}
else
{
103
timer
(
)
.start(
static_cast
<
int
>(interval.count()));
104
}
105
}
else
{
106
timer
(
)
.stop();
107
}
108
}
109
}
// namespace QFFmpeg
110
111
QT_END_NAMESPACE
112
113
#
include
"moc_qffmpegplaybackengineobject_p.cpp"
QFFmpeg::PlaybackEngineObject
Definition
qffmpegplaybackengineobject_p.h:31
QFFmpeg::PlaybackEngineObject::~PlaybackEngineObject
~PlaybackEngineObject() override
Definition
qffmpegplaybackengineobject.cpp:17
QFFmpeg::PlaybackEngineObject::kill
void kill()
Definition
qffmpegplaybackengineobject.cpp:50
QFFmpeg::PlaybackEngineObject::id
Id id() const
Definition
qffmpegplaybackengineobject.cpp:39
QFFmpeg::PlaybackEngineObject::isPaused
bool isPaused() const
Definition
qffmpegplaybackengineobject.cpp:23
QFFmpeg::PlaybackEngineObject::isAtEnd
bool isAtEnd() const
Definition
qffmpegplaybackengineobject.cpp:34
QFFmpeg::PlaybackEngineObject::canDoNextStep
virtual bool canDoNextStep() const
Definition
qffmpegplaybackengineobject.cpp:58
QFFmpeg::PlaybackEngineObject::doNextStep
virtual void doNextStep()
Definition
qffmpegplaybackengineobject_p.h:70
QFFmpeg::PlaybackEngineObject::PlaybackEngineObject
PlaybackEngineObject()
Definition
qffmpegplaybackengineobject.cpp:15
QFFmpeg::PlaybackEngineObject::timer
QTimer & timer()
Definition
qffmpegplaybackengineobject.cpp:63
QFFmpeg::PlaybackEngineObject::onPauseChanged
virtual void onPauseChanged()
Definition
qffmpegplaybackengineobject.cpp:87
QFFmpeg::PlaybackEngineObject::setAtEnd
void setAtEnd(bool isAtEnd)
Definition
qffmpegplaybackengineobject.cpp:28
QFFmpeg::PlaybackEngineObject::scheduleNextStep
void scheduleNextStep(bool allowDoImmediatelly=true)
Definition
qffmpegplaybackengineobject.cpp:92
QFFmpeg::PlaybackEngineObject::setPaused
void setPaused(bool isPaused)
Definition
qffmpegplaybackengineobject.cpp:44
QFFmpeg::PlaybackEngineObject::timerInterval
virtual std::chrono::milliseconds timerInterval() const
Definition
qffmpegplaybackengineobject.cpp:81
QFFmpeg::PersistentId
static QAtomicInteger< PlaybackEngineObject::Id > PersistentId
Definition
qffmpegplaybackengineobject.cpp:13
QFFmpeg::AvioWriteBufferType
std::conditional_t< QT_FFMPEG_AVIO_WRITE_CONST, const uint8_t *, uint8_t * > AvioWriteBufferType
Definition
qffmpegioutils_p.h:29
QPlatformGraphicsBufferHelper
\inmodule QtGui
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
qtmultimedia
src
plugins
multimedia
ffmpeg
playbackengine
qffmpegplaybackengineobject.cpp
Generated on
for Qt by
1.14.0