18 return a->type() <
b->type();
22 : controller(controller)
25 controller->addClock(
this);
31 controller->removeClock(
this);
36 return controller ? controller->currentTime() : 0;
41 qCDebug(qLcClock) <<
"syncTo" <<
time << isMaster();
46 qCDebug(qLcClock) <<
"Clock::setPlaybackRate" <<
rate;
53 qCDebug(qLcClock) <<
"Clock::setPaused" << paused;
66 if (!controller || controller->m_isPaused)
79 for (
auto *
p : std::as_const(m_clocks))
80 p->setController(
nullptr);
86 if (!isMaster(clock)) {
89 return currentTimeNoLock();
94 m_elapsedTimer.restart();
99void QFFmpeg::ClockController::addClock(Clock *clock)
101 qCDebug(qLcClock) <<
"addClock" << clock;
104 if (m_clocks.contains(clock))
107 m_clocks.append(clock);
108 m_master = std::max(m_master.loadAcquire(), clock, compareClocks);
111 clock->setPaused(m_isPaused);
114void QFFmpeg::ClockController::removeClock(Clock *clock)
116 qCDebug(qLcClock) <<
"removeClock" << clock;
117 m_clocks.removeAll(clock);
118 if (m_master == clock) {
120 m_master = m_clocks.empty()
122 : *std::max_element(m_clocks.begin(), m_clocks.end(), compareClocks);
126bool QFFmpeg::ClockController::isMaster(
const Clock *clock)
const
128 return m_master.loadAcquire() == clock;
131qint64 QFFmpeg::ClockController::currentTimeNoLock()
const
133 return m_isPaused ? m_baseTime : m_baseTime + m_elapsedTimer.elapsed() / m_playbackRate;
139 return currentTimeNoLock();
146 qCDebug(qLcClock) <<
"syncTo" << usecs;
149 m_elapsedTimer.restart();
152 for (
auto *
p : std::as_const(m_clocks))
164 m_baseTime =
baseTime = currentTimeNoLock();
165 m_elapsedTimer.restart();
166 m_playbackRate =
rate;
169 for (
auto *
p : std::as_const(m_clocks))
177 if (m_isPaused == paused)
179 qCDebug(qLcClock) <<
"setPaused" << paused;
182 m_baseTime = currentTimeNoLock();
183 m_seekTime = m_baseTime;
185 m_elapsedTimer.restart();
189 for (
auto *
p : std::as_const(m_clocks))
190 p->setPaused(paused);
void setPlaybackRate(float s)
qint64 currentTime() const
void syncTo(qint64 usecs)
void setPaused(bool paused)
virtual void syncTo(qint64 usecs)
virtual void setPaused(bool paused)
virtual Type type() const
qint64 usecsTo(qint64 currentTime, qint64 displayTime)
virtual void setPlaybackRate(float rate, qint64 currentTime)
Clock(ClockController *controller)
qint64 currentTime() const
qint64 timeUpdated(qint64 currentTime)
Combined button and popup list for selecting options.
std::optional< qint64 > baseTime
qint64 qRound64(qfloat16 d) noexcept
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
static double currentTime()