Skip to content

Commit ac6e742

Browse files
authored
Introducing configurable render interval for qml streamer (#215)
1 parent a2374b8 commit ac6e742

6 files changed

+44
-14
lines changed

deflect/qt/OffscreenQuickView.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,13 @@ void OffscreenQuickView::_requestRender()
182182
{
183183
killTimer(_stopRenderingDelayTimer);
184184
_stopRenderingDelayTimer = 0;
185-
186185
if (_renderTimer == 0)
187-
_renderTimer = startTimer(5, Qt::PreciseTimer);
186+
_renderTimer = startTimer(int(_renderInterval), Qt::PreciseTimer);
187+
}
188+
189+
void OffscreenQuickView::setRenderInterval(uint interval)
190+
{
191+
_renderInterval = interval;
188192
}
189193

190194
void OffscreenQuickView::_initRenderer()
@@ -244,5 +248,5 @@ void OffscreenQuickView::_afterRender()
244248
// The fbo can be safely assumed to be valid when this function executes.
245249
emit afterRender(_quickRenderer->fbo()->toImage());
246250
}
247-
}
248-
}
251+
} // namespace qt
252+
} // namespace deflect

deflect/qt/OffscreenQuickView.h

+9-2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@ class OffscreenQuickView : public QQuickWindow
9999
/** @return the root qml context. */
100100
QQmlContext* getRootContext() const;
101101

102+
/**
103+
* Set a value used to calculate intenal render timer.
104+
* @param interval interval to set.
105+
*/
106+
void setRenderInterval(uint interval);
107+
102108
signals:
103109
/**
104110
* Notify that the scene has just finished rendering.
@@ -123,6 +129,7 @@ class OffscreenQuickView : public QQuickWindow
123129
std::promise<bool> _loadPromise;
124130

125131
int _renderTimer = 0;
132+
uint _renderInterval = 16;
126133
int _stopRenderingDelayTimer = 0;
127134

128135
void timerEvent(QTimerEvent* e) final;
@@ -133,7 +140,7 @@ class OffscreenQuickView : public QQuickWindow
133140
void _render();
134141
void _afterRender();
135142
};
136-
}
137-
}
143+
} // namespace qt
144+
} // namespace deflect
138145

139146
#endif

deflect/qt/QmlStreamer.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,7 @@ QmlStreamer::QmlStreamer(const QString& qmlFile, const std::string& streamHost,
5353
connect(_impl.get(), &Impl::streamClosed, this, &QmlStreamer::streamClosed);
5454
}
5555

56-
QmlStreamer::~QmlStreamer()
57-
{
58-
}
56+
QmlStreamer::~QmlStreamer() {}
5957

6058
void QmlStreamer::useAsyncSend(const bool async)
6159
{
@@ -76,5 +74,11 @@ bool QmlStreamer::sendData(const QByteArray data)
7674
{
7775
return _impl->getStream()->sendData(data.constData(), data.size());
7876
}
77+
78+
void QmlStreamer::setRenderInterval(uint interval)
79+
{
80+
_impl->setRenderInterval(interval);
7981
}
80-
}
82+
83+
} // namespace qt
84+
} // namespace deflect

deflect/qt/QmlStreamer.h

+9-2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ class DEFLECT_API QmlStreamer : public QObject
108108
*/
109109
bool sendData(QByteArray data);
110110

111+
/**
112+
* Set a value used to calculate intenal render timer
113+
* needed in OffscreenQuickView
114+
* @param interval interval to set.
115+
*/
116+
void setRenderInterval(uint interval);
117+
111118
signals:
112119
/** Emitted when the stream has been closed. */
113120
void streamClosed();
@@ -118,7 +125,7 @@ class DEFLECT_API QmlStreamer : public QObject
118125
class Impl;
119126
std::unique_ptr<Impl> _impl;
120127
};
121-
}
122-
}
128+
} // namespace qt
129+
} // namespace deflect
123130

124131
#endif

deflect/qt/QmlStreamerImpl.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,11 @@ void QmlStreamer::Impl::_send(QKeyEvent& keyEvent_)
208208
}
209209
}
210210

211+
void QmlStreamer::Impl::setRenderInterval(unsigned int interval)
212+
{
213+
_quickView->setRenderInterval(interval);
214+
}
215+
211216
bool QmlStreamer::Impl::_sendToWebengineviewItems(QKeyEvent& keyEvent_)
212217
{
213218
// Special handling for WebEngineView in offscreen Qml windows.

deflect/qt/QmlStreamerImpl.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ class QmlStreamer::Impl : public QObject
7676
QQuickItem* getRootItem() { return _quickView->getRootItem(); }
7777
QQmlEngine* getQmlEngine() { return _quickView->getEngine(); }
7878
Stream* getStream() { return _stream.get(); }
79+
80+
void setRenderInterval(unsigned int interval);
81+
7982
signals:
8083
void streamClosed();
8184

@@ -134,7 +137,7 @@ private slots:
134137
AppNapSuspender _napSuspender;
135138
#endif
136139
};
137-
}
138-
}
140+
} // namespace qt
141+
} // namespace deflect
139142

140143
#endif

0 commit comments

Comments
 (0)