Adds the Hyperion priority option.

This commit is contained in:
kevin 2020-11-22 11:38:49 -05:00
parent 7714250646
commit 961afd2d9a
6 changed files with 27 additions and 10 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
CMakeFiles/
Hyperion_Grabber_X11_QT_autogen/
cmake_install.cmake
CMakeCache.txt
Makefile
Hyperion_Grabber_X11_QT
CMakeLists.txt.user
.cmake/

View File

@ -8,6 +8,7 @@ hgx11::hgx11(QHash<QString, QString> opts)
unsigned short port = 19444;
unsigned short scale = 8;
unsigned short frameskip = 0;
unsigned short priority = 100;
const char * filter = FilterNearest;
QString redAdjust = "", greenAdjust = "", blueAdjust = "";
QString temperature = "", threshold = "", transform = "";
@ -18,6 +19,8 @@ hgx11::hgx11(QHash<QString, QString> opts)
addr = i.value();
} else if ((i.key() == "p" || i.key() == "port") && i.value().toUShort()) {
port = i.value().toUShort();
} else if ((i.key() == "c" || i.key() == "priority") && (i.value().toUShort() && i.value().toUShort() <= 255)) {
priority = i.value().toUShort();
} else if ((i.key() == "s" || i.key() == "scale") && i.value().toUShort()) {
scale = i.value().toUShort();
} else if ((i.key() == "f" || i.key() == "frameskip") && (i.value().toUShort() && i.value().toUShort() <= 255)) {
@ -56,6 +59,8 @@ hgx11::hgx11(QHash<QString, QString> opts)
}
}
_hyperionPriority_m = QString("\"priority\":").append(QString::number(priority));
_display_p = XOpenDisplay(nullptr);
if(_display_p == nullptr){
qCritical() << "Failed to open X11 display";
@ -63,7 +68,7 @@ hgx11::hgx11(QHash<QString, QString> opts)
}
_grabber_p = new hgx11grab(_display_p, scale, filter);
_hclient_p = new hgx11net(addr, port);
_hclient_p = new hgx11net(addr, port, _hyperionPriority_m);
_damage_p = new hgx11damage(&_grabbed_m, frameskip);
if (_inactiveXss_m) {
_screensaver_p = new hgx11screensaver(_display_p);
@ -170,7 +175,7 @@ void hgx11::_activity()
void hgx11::_setImgSize()
{
_hclient_p->imgCmdBuf.clear();
_hclient_p->imgCmdBuf.append("{\"command\":\"image\",\"priority\":100,\"imageheight\":");
_hclient_p->imgCmdBuf.append("{\"command\":\"image\",").append(_hyperionPriority_m.toUtf8()).append(",\"imageheight\":");
_hclient_p->imgCmdBuf.append(QString::number(_grabber_p->getDest_height()).toUtf8());
_hclient_p->imgCmdBuf.append(",\"imagewidth\":");
_hclient_p->imgCmdBuf.append(QString::number(_grabber_p->getDest_width()).toUtf8());

View File

@ -28,6 +28,7 @@ private:
int _inactiveTime_m = 0;
unsigned long _inactiveTimeXss_m = 0;
QString _hyperionPriority_m;
bool _inactiveXss_m = false;
bool _grabActive_m;

View File

@ -2,12 +2,13 @@
// public
hgx11net::hgx11net(QString host, ushort port)
hgx11net::hgx11net(QString host, ushort port, QString priority)
{
_sock_p = new QTcpSocket(this);
_sock_p->setReadBufferSize(1);
_host_m = host;
_port_m = port;
_priority_m = priority;
_connectHost();
}
@ -24,7 +25,7 @@ hgx11net::~hgx11net()
void hgx11net::clearLeds()
{
_cmd_m.clear();
_cmd_m.append("{\"command\": \"clearall\"}\n");
_cmd_m.append("{\"command\": \"clearall\",").append(_priority_m.toUtf8()).append("}\n");
_sendCommand();
}
@ -37,7 +38,7 @@ void hgx11net::setLedColor(quint8 R, quint8 G, quint8 B)
_cmd_m.append(QString::number(G).toUtf8());
_cmd_m.append(",");
_cmd_m.append(QString::number(B).toUtf8());
_cmd_m.append("],\"command\":\"color\",\"priority\":100}\n");
_cmd_m.append("],\"command\":\"color\",").append(_priority_m.toUtf8()).append("}\n");
_sendCommand();
}
@ -126,7 +127,7 @@ void hgx11net::_colorAdjustment()
_cmd_m.append(",");
}
_cmd_m.chop(1); // remove trailing ,
_cmd_m.append("},\"command\":\"adjustment\"}\n");
_cmd_m.append("},\"command\":\"adjustment\",").append(_priority_m.toUtf8()).append("}\n");
_sendCommand();
}
@ -136,7 +137,7 @@ void hgx11net::_thresholdAdjustment()
return;
}
_cmd_m.clear();
_cmd_m.append("{\"command\":\"transform\",\"transform\":{\"threshold\":");
_cmd_m.append("{\"command\":\"transform\",").append(_priority_m.toUtf8()).append(",\"transform\":{\"threshold\":");
_cmd_m.append(_threshold_m.toUtf8());
_cmd_m.append("}}\n");
_sendCommand();
@ -149,7 +150,7 @@ void hgx11net::_transformdAdjustment()
}
QStringList values = _transform_m.split(',');
_cmd_m.clear();
_cmd_m.append("{\"command\":\"transform\",\"transform\":{\"luminanceGain\":");
_cmd_m.append("{\"command\":\"transform\",").append(_priority_m.toUtf8()).append(",\"transform\":{\"luminanceGain\":");
_cmd_m.append(values.at(0).toUtf8());
_cmd_m.append(",\"luminanceMinimum\":");
_cmd_m.append(values.at(1).toUtf8());
@ -165,7 +166,7 @@ void hgx11net::_temperatureAdjustment()
return;
}
_cmd_m.clear();
_cmd_m.append("{\"command\":\"temperature\",\"temperature\":{\"correctionValues\":");
_cmd_m.append("{\"command\":\"temperature\",").append(_priority_m.toUtf8()).append(",\"temperature\":{\"correctionValues\":");
_cmd_m.append(_temperature_m.toUtf8());
_cmd_m.append("}}\n");
_sendCommand();

View File

@ -14,7 +14,7 @@ public:
};
QByteArray imgCmdBuf;
hgx11net(QString, ushort);
hgx11net(QString, ushort, QString);
~hgx11net();
void clearLeds();
@ -26,6 +26,7 @@ private:
QByteArray _cmd_m;
QString _host_m;
quint16 _port_m;
QString _priority_m;
QString _redAdjust_m = "";
QString _greenAdjust_m = "";
QString _blueAdjust_m = "";

View File

@ -28,6 +28,7 @@ int main(int argc, char *argv[])
parser.addVersionOption();
parser.addOption({{"a", "address"}, "Address to the hyperion json server. (ex. 127.0.0.1)", "address"});
parser.addOption({{"p", "port"}, "Port for the hyperion json server. (ex. 19444)", "port"});
parser.addOption({{"c", "priority"}, "Priority to send to Hyperion, lower number means higher priority, defaults to 100. Range 0-255", "number"});
parser.addOption({{"s", "scale"}, "Divisor used to scale your screen resolution (ex. 8 ; if your screen is 1920x1080, the result image sent to hyperion is 240x135", "scale"});
parser.addOption({{"f", "frameskip"}, "How many X11 frames to skip over. (ex. 4 ; 1 frame will be scaled and sent to hyperion and 4 will be ignored)", "frames"});
parser.addOption({{"i", "inactive"}, "How many seconds after the screen is inactive to turn off the LED's. Set to 0 to disable.", "seonds"});