KDEAmbi/hgx11damage.cpp
kevin ed7ba36704 Block until image data is sent to Hyperion.
This prevents the socket buffer to overflow if the connection is too slow.
2019-06-27 07:43:15 -04:00

46 lines
1.0 KiB
C++

#include "hgx11damage.h"
// public
hgx11damage::hgx11damage(QWaitCondition * grabbed, unsigned short frameSkip)
{
_grabbed_p = grabbed;
_frameSkip_m = frameSkip;
_display_p = XOpenDisplay(nullptr);
if(_display_p == nullptr){
qCritical() << "Failed to open X11 display";
return;
}
_damage_m = XDamageCreate(_display_p, DefaultRootWindow(_display_p), XDamageReportNonEmpty);
}
hgx11damage::~hgx11damage()
{
_loop_m = false;
if (_damage_m) {
XDamageDestroy(_display_p, _damage_m);
}
}
// protected
void hgx11damage::_monitor()
{
if(_display_p == nullptr){
return;
}
while (_loop_m) {
XNextEvent(_display_p, &_event_m);
if (_frameCount_m++ < _frameSkip_m) {
XDamageSubtract(_display_p ,_damage_m, None, None);
continue;
}
_mutex_m.lock();
emit damageDetected();
_grabbed_p->wait(&_mutex_m);
_mutex_m.unlock();
XDamageSubtract(_display_p ,_damage_m, None, None);
_frameCount_m = 0;
}
}