1
0
mirror of https://github.com/Ylianst/MeshCommander synced 2025-12-06 06:03:20 +00:00

Downscaling improvements.

This commit is contained in:
Ylian Saint-Hilaire
2022-01-24 16:36:52 -08:00
parent dab2193f2f
commit 0a6559d8dd
2 changed files with 28 additions and 16 deletions

View File

@@ -47,7 +47,7 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
obj.kvmExt = {};
obj.kvmExtChanged = null;
obj.useZLib = false;
obj.decimation = false;
obj.decimationMode = 0; // 0 = Don't set, 1 = Disable, 2 = Automatic, 3 = Enabled
obj.graymode = false;
obj.lowcolor = false;
// ###END###{DesktopInband}
@@ -200,14 +200,20 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
// ###END###{DesktopFocus}
// ###BEGIN###{DesktopInband}
if (obj.kvmExtChanged != null) {
obj.sendKvmExtCmd(2, (obj.decimation === true) ? 3 : 2); // Set Decimation State (1 = Disable, 2 = Auto, 3 = Always)
if (obj.decimationMode > 0) { obj.sendKvmExtCmd(2, obj.decimationMode); } // Set Decimation Mode (0 = Do not set, 1 = Disable, 2 = Auto, 3 = Enable)
obj.sendKvmExtCmd(4, (obj.useZLib === true) ? 1 : 0); // Set ZLib state (0 = Disabled, 1 = Enabled)
}
// ###END###{DesktopInband}
_SendRefresh();
if (obj.onScreenSizeChange != null) { obj.onScreenSizeChange(obj, obj.ScreenWidth, obj.ScreenHeight); }
if (obj.parent) { obj.parent.disconnectCode = 50001; } // Everything looks good, a disconnection here would be Intel AMT initiated.
if (obj.parent) {
obj.parent.disconnectCode = 50001; // Everything looks good, a disconnection here would be Intel AMT initiated.
// Check if the screen size is larger than Intel AMT should be able to handle
//console.log('KVM Buffer Size: ' + (obj.bpp * obj.width * obj.height));
if ((obj.bpp * obj.width * obj.height) > 8388608) { obj.parent.disconnectCode = 50002; } // Display buffer too large, more than 8MB.
}
}
else if (obj.state == 4) {
switch (obj.acc[0]) {
@@ -271,9 +277,8 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
//console.log('Desktop width: ' + obj.width + ', height: ' + obj.height);
// Check if the screen size is larger than Intel AMT should be able to handle
if ((obj.parent) && ((obj.bpp * obj.width * obj.height) > 8388608)) {
obj.parent.disconnectCode = 50002; // Display buffer too large, more than 8MB.
}
//console.log('KVM Buffer Size: ' + (obj.bpp * obj.width * obj.height));
if ((obj.parent) && ((obj.bpp * obj.width * obj.height) > 8388608)) { obj.parent.disconnectCode = 50002; } // Display buffer too large, more than 8MB.
} else if (encoding == 0) {
// RAW encoding
var ptr = 12, cs = 12 + (s * obj.bpp);
@@ -817,10 +822,14 @@ var CreateAmtRemoteDesktop = function (divid, scrolldiv) {
if ((obj.onKvmDataAck == true) && (obj.onKvmDataPending.length > 0)) { obj.sendKvmData(obj.onKvmDataPending.shift()); } // Send pending data
} else if ((d.length >= 13) && (d.substring(0, 11) == '\0KvmExtCmd\0')) {
var cmd = d.charCodeAt(11), val = d.charCodeAt(12);
//console.log('Received KvmExtCmd', cmd, val);
if (cmd == 1) { obj.kvmExt.decimation = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(1, val); } }
//console.log('Received KvmExtCmd', cmd, val, d.length);
if (cmd == 1) {
obj.kvmExt.decimationMode = val;
if (d.length > 13) { obj.kvmExt.decimationState = d.charCodeAt(13); }
if (obj.kvmExtChanged != null) { obj.kvmExtChanged(1, obj.kvmExt, obj.kvmExt); }
}
if (cmd == 2) { obj.sendKvmExtCmd(1); }
if (cmd == 3) { obj.kvmExt.compression = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(3, val); } }
if (cmd == 3) { obj.kvmExt.compression = val; if (obj.kvmExtChanged != null) { obj.kvmExtChanged(3, obj.kvmExt); } }
if (cmd == 4) { obj.sendKvmExtCmd(3); }
} else {
console.log('Got KVM clipboard data:', d);

View File

@@ -1367,12 +1367,15 @@
<select id="idx_d7desktopmode" style="float:right;width:200px"></select>
<div>Image Encoding</div>
</div>
<div id="d7decimationspan" style='height:26px'>
<select id="d7decimation" style="float:right;width:200px"><option value=0>Don't set</option><option value=1>Disabled</option><option value=2>Automatic</option><option value=3>Enabled</option></select>
<div>Downscaling</div>
</div>
<div style="height:80px">
<div style="float:right;border:1px solid #666;width:200px;height:80px;overflow-y:scroll;background-color:white">
<!-- ###BEGIN###{DesktopFocus} -->
<label><input type="checkbox" id='d7showfocus'>Show Focus Tool</label><br>
<!-- ###END###{DesktopFocus} -->
<span id="d7decimationspan"><label><input type="checkbox" id='d7decimation'>Prefer Downscale</label><br></span>
<label><input type="checkbox" id='d7showcursor'>Show Local Mouse Cursor</label><br>
<label><input type="checkbox" id='d7showcad'>Show Ctrl-Alt-Del</label><br>
<label><input type="checkbox" id='d7limitFrameRate'>Limit Frame Rate</label><br>
@@ -1763,7 +1766,7 @@
// ###END###{NetworkSettings}
// ###BEGIN###{Desktop}
var desktop;
var desktopsettings = { encflags: 1, showfocus: false, showmouse: true, showcad: true, limitFrameRate: false, noMouseRotate: false, decimation: false };
var desktopsettings = { encflags: 1, showfocus: false, showmouse: true, showcad: true, limitFrameRate: false, noMouseRotate: false, decimationMode: 2 };
// ###END###{Desktop}
// ###BEGIN###{Mode-MeshCentral2}
var currentMeshNode = null;
@@ -8351,12 +8354,12 @@
desktop.m.lowcolor = amtsysstate['IPS_KVMRedirectionSettingData'].response['GrayscalePixelFormatSupported'] && ((desktopsettings.encflags & 16) != 0);
desktop.m.graymode = amtsysstate['IPS_KVMRedirectionSettingData'].response['GrayscalePixelFormatSupported'] && ((desktopsettings.encflags & 4) != 0);
desktop.m.useZLib = amtsysstate['IPS_KVMRedirectionSettingData'].response['ZlibControlSupported'] && ((desktopsettings.encflags & 8) != 0);
desktop.m.decimation = amtsysstate['IPS_KVMRedirectionSettingData'].response['InitialDecimationModeForLowRes'] && desktopsettings.decimation;
desktop.m.decimationMode = ((amtsysstate['IPS_KVMRedirectionSettingData'].response['InitialDecimationModeForLowRes'] > 0) ? desktopsettings.decimationMode : 0);
} else {
desktop.m.lowcolor = false;
desktop.m.graymode = false;
desktop.m.useZLib = false;
desktop.m.decimation = false;
desktop.m.decimationMode = 0;
}
desktop.m.showmouse = desktopsettings.showmouse;
desktop.m.onScreenSizeChange = center;
@@ -8587,7 +8590,7 @@
x = ", Soft-KVM";
} else {
if (desktop.m && desktop.m.kvmExt) {
//if (desktop.m.kvmExt.decimation == 2) { x += ", Downscaled" }
if (desktop.m.kvmExt.decimationState == 1) { x += ", Downscaled" }
if (desktop.m.kvmExt.compression == 1) { x += ", Compressed" }
}
}
@@ -8609,7 +8612,7 @@
desktopsettings.encflags = parseInt(idx_d7desktopmode.value);
// ###BEGIN###{DesktopFocus}
desktopsettings.showfocus = d7showfocus.checked;
if ((amtversion > 15) || (urlvars['kvmext'] != null)) { desktopsettings.decimation = d7decimation.checked; }
if ((amtversion > 15) && (amtsysstate['IPS_KVMRedirectionSettingData'].response['InitialDecimationModeForLowRes'] > 0)) { desktopsettings.decimationMode = parseInt(d7decimation.value); }
// ###END###{DesktopFocus}
desktopsettings.showmouse = d7showcursor.checked;
desktopsettings.showcad = d7showcad.checked;
@@ -8631,8 +8634,8 @@
function applyDesktopSettings() {
// ###BEGIN###{DesktopFocus}
d7showfocus.checked = desktopsettings.showfocus;
d7decimation.checked = desktopsettings.decimation;
// ###END###{DesktopFocus}
d7decimation.value = desktopsettings.decimationMode;
d7showcursor.checked = desktopsettings.showmouse;
d7showcad.checked = desktopsettings.showcad;
d7limitFrameRate.checked = desktopsettings.limitFrameRate;