22 m_elapsedTimer.start();
24 const auto nsecsElapsed = m_elapsedTimer.nsecsElapsed();
26 m_wholeTime += nsecsElapsed;
28#ifdef DUMP_SCREEN_CAPTURE_PROFILING
29 qDebug() <<
"screen grabbing time:" << nsecsElapsed <<
"avg:" << avgTime()
30 <<
"number:" << m_number;
37 return m_number ? m_wholeTime / (m_number * 1000000.) : 0.;
89 m_thread = std::make_unique<GrabbingThread>(*
this);
105 if (std::exchange(m_rate,
rate) !=
rate) {
106 qCDebug(qLcScreenCaptureGrabber) <<
"Screen capture rate has been changed:" << m_rate;
133 const auto prevError = std::exchange(m_prevError,
error);
148 const int interval =
static_cast<int>(1000 /
rate);
149 if (m_context && m_context->timer.interval() != interval)
150 m_context->timer.setInterval(interval);
156 qCDebug(qLcScreenCaptureGrabber) <<
"screen capture started";
158 m_context = std::make_unique<GrabbingContext>();
162 m_context->elapsedTimer.start();
164 auto doGrab = [
this]() {
165 auto measure = m_context->profiler.measure();
169 if (
frame.isValid()) {
170 frame.setStartTime(m_context->lastFrameTime);
171 frame.setEndTime(m_context->elapsedTimer.nsecsElapsed() / 1000);
172 m_context->lastFrameTime =
frame.endTime();
182 m_context->timer.callOnTimeout(&m_context->timer, doGrab);
183 m_context->timer.start();
189 qCDebug(qLcScreenCaptureGrabber)
190 <<
"end screen capture thread; avg grabbing time:" << m_context->profiler.avgTime()
191 <<
"ms, grabbings number:" << m_context->profiler.number();
197 return m_context !=
nullptr;
202#include "moc_qffmpegsurfacecapturegrabber_p.cpp"
GrabbingThread(QFFmpegSurfaceCaptureGrabber &grabber)
void setFrameRate(qreal rate)
void updateTimerInterval()
bool isGrabbingContextInitialized() const
virtual void initializeGrabbingContext()
void errorUpdated(QPlatformSurfaceCapture::Error error, const QString &description)
virtual void finalizeGrabbingContext()
virtual QVideoFrame grabFrame()=0
void frameGrabbed(const QVideoFrame &)
~QFFmpegSurfaceCaptureGrabber() override
QFFmpegSurfaceCaptureGrabber(ThreadPolicy threadPolicy=CreateGrabbingThread)
void updateError(QPlatformSurfaceCapture::Error error, const QString &description={})
\macro QT_RESTRICTED_CAST_FROM_ASCII
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]
GrabbingProfiler profiler
QElapsedTimer elapsedTimer