Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qffmpegclock_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 QFFMPEGCLOCK_P_H
4#define QFFMPEGCLOCK_P_H
5
6#include "qffmpeg_p.h"
7
8#include <qatomic.h>
9#include <qelapsedtimer.h>
10#include <qlist.h>
11#include <qmutex.h>
12#include <qmetaobject.h>
13
15
16namespace QFFmpeg {
17
18class ClockController;
19
20// Clock runs in displayTime, ie. if playbackRate is not 1, it runs faster or slower
21// than a regular clock. All methods take displayTime
22// Exception: usecsTo() will return the real time that should pass until we will
23// hit the requested display time
24class Clock
25{
26 ClockController *controller = nullptr;
27public:
28 enum Type {
31 };
32 Clock(ClockController *controller);
33 virtual ~Clock();
34 virtual Type type() const;
35
36 float playbackRate() const;
37 bool isMaster() const;
38
39 // all times in usecs
40 qint64 currentTime() const;
41 qint64 seekTime() const;
43
44protected:
45 virtual void syncTo(qint64 usecs);
46 virtual void setPlaybackRate(float rate, qint64 currentTime);
47 virtual void setPaused(bool paused);
48
50
51private:
52 friend class ClockController;
53 void setController(ClockController *c)
54 {
55 controller = c;
56 }
57};
58
60{
61 mutable QMutex m_mutex;
62 QList<Clock *> m_clocks;
63 QAtomicPointer<Clock> m_master = nullptr;
64
65 QElapsedTimer m_elapsedTimer;
66 qint64 m_baseTime = 0;
67 qint64 m_seekTime = 0;
68 float m_playbackRate = 1.;
69 bool m_isPaused = true;
70
71 qint64 currentTimeNoLock() const;
72
73 friend class Clock;
74 qint64 timeUpdated(Clock *clock, qint64 time);
75 void addClock(Clock *provider);
76 void removeClock(Clock *provider);
77 bool isMaster(const Clock *clock) const;
78
79public:
80 ClockController() = default;
82
83
84 qint64 currentTime() const;
85
86 void syncTo(qint64 usecs);
87
88 void setPlaybackRate(float s);
89 float playbackRate() const { return m_playbackRate; }
90 void setPaused(bool paused);
91};
92
93inline float Clock::playbackRate() const
94{
95 return controller ? controller->m_playbackRate : 1.;
96}
97
98inline bool Clock::isMaster() const
99{
100 return controller && controller->isMaster(this);
101}
102
104{
105 return controller ? controller->m_seekTime : 0;
106}
107
108
109}
110
112
113#endif
\macro Q_ATOMIC_INTnn_IS_SUPPORTED
Definition qatomic.h:123
\inmodule QtCore
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)
bool isMaster() const
virtual void setPlaybackRate(float rate, qint64 currentTime)
qint64 seekTime() const
qint64 currentTime() const
float playbackRate() const
qint64 timeUpdated(qint64 currentTime)
Definition qlist.h:74
\inmodule QtCore
Definition qmutex.h:285
Combined button and popup list for selecting options.
const GLubyte * c
GLuint GLenum * rate
GLdouble s
[6]
Definition qopenglext.h:235
long long qint64
Definition qtypes.h:55
Definition moc.h:24