20 m_elapsedTimer.start();
22 const auto nsecsElapsed = m_elapsedTimer.nsecsElapsed();
24 m_wholeTime += nsecsElapsed;
26#ifdef DUMP_SCREEN_CAPTURE_PROFILING
27 qDebug() <<
"screen grabbing time:" << nsecsElapsed <<
"avg:" << avgTime()
28 <<
"number:" << m_number;
35 return m_number ? m_wholeTime / (m_number * 1000000.) : 0.;
61 if (std::exchange(m_rate,
rate) !=
rate) {
62 qCDebug(qLcScreenCaptureThread) <<
"Screen capture rate has been changed:" << m_rate;
81 qCDebug(qLcScreenCaptureThread) <<
"start screen capture thread";
83 m_timer = std::make_unique<QTimer>();
85 auto deleter =
qScopeGuard([
this]() { m_timer.reset(); });
94 GrabbingProfiler profiler;
97 auto measure = profiler.measure();
101 if (
frame.isValid()) {
102 frame.setStartTime(lastFrameTime);
104 lastFrameTime =
frame.endTime();
114 m_timer->callOnTimeout(doGrab);
119 qCDebug(qLcScreenCaptureThread)
120 <<
"end screen capture thread; avg grabbing time:" << profiler.avgTime()
121 <<
"ms, grabbings number:" << profiler.number();
127 const auto prevError = std::exchange(m_prevError,
error);
142 const int interval =
static_cast<int>(1000 /
rate);
143 if (m_timer && m_timer->interval() != interval)
144 m_timer->setInterval(interval);
149#include "moc_qffmpegsurfacecapturethread_p.cpp"
void start() noexcept
Starts this timer.
qint64 nsecsElapsed() const noexcept
virtual QVideoFrame grabFrame()=0
void frameGrabbed(const QVideoFrame &)
void errorUpdated(QPlatformSurfaceCapture::Error error, const QString &description)
QFFmpegSurfaceCaptureThread()
void setFrameRate(qreal rate)
~QFFmpegSurfaceCaptureThread() override
void updateTimerInterval()
void updateError(QPlatformSurfaceCapture::Error error, const QString &description={})
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool wait(QDeadlineTimer deadline=QDeadlineTimer(QDeadlineTimer::Forever))
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
static constexpr qreal MinScreenCaptureFrameRate
static constexpr qreal MaxScreenCaptureFrameRate
static constexpr qreal DefaultScreenCaptureFrameRate
#define Q_LOGGING_CATEGORY(name,...)
#define qCDebug(category,...)
constexpr const T & qBound(const T &min, const T &val, const T &max)
QScopeGuard< typename std::decay< F >::type > qScopeGuard(F &&f)
[qScopeGuard]