Update access levels and validate crop ranges

This commit is contained in:
Lord-Grey 2021-02-17 23:26:39 +01:00
parent 1c8a637d11
commit ffc669cda7
5 changed files with 235 additions and 148 deletions

View File

@ -401,6 +401,8 @@
"edt_conf_v4l2_cropRight_title": "Crop right", "edt_conf_v4l2_cropRight_title": "Crop right",
"edt_conf_v4l2_cropTop_expl": "Count of pixels on the top side that are removed from the picture.", "edt_conf_v4l2_cropTop_expl": "Count of pixels on the top side that are removed from the picture.",
"edt_conf_v4l2_cropTop_title": "Crop top", "edt_conf_v4l2_cropTop_title": "Crop top",
"edt_conf_v4l2_cropWidthValidation_error": "Crop left + Crop right cannot be greater than Width ($1)",
"edt_conf_v4l2_cropHeightValidation_error": "Crop top + Crop bottom cannot be greater than Height ($1)",
"edt_conf_v4l2_device_expl": "The path to the USB capture interface. Set to 'Automatic' for automatic detection. Example: '/dev/video0'", "edt_conf_v4l2_device_expl": "The path to the USB capture interface. Set to 'Automatic' for automatic detection. Example: '/dev/video0'",
"edt_conf_v4l2_device_title": "Device", "edt_conf_v4l2_device_title": "Device",
"edt_conf_v4l2_framerate_expl": "The supported frames per second of the active device", "edt_conf_v4l2_framerate_expl": "The supported frames per second of the active device",

View File

@ -80,6 +80,57 @@ $(document).ready(function () {
requestWriteConfig(conf_editor_instCapt.getValue()); requestWriteConfig(conf_editor_instCapt.getValue());
}); });
JSONEditor.defaults.custom_validators.push(function (schema, value, path) {
var errors = [];
if (path === "root.grabberV4L2" || path === "root.framegrabber") {
var editor;
switch (path) {
case "root.framegrabber":
editor = conf_editor_screen;
break;
case "root.grabberV4L2":
editor = conf_editor_video;
break;
}
if (value.cropLeft || value.cropRight) {
var width = editor.getEditor(path + ".width").getValue();
if (value.cropLeft + value.cropRight > width) {
errors.push({
path: path,
property: 'maximum',
message: $.i18n('edt_conf_v4l2_cropWidthValidation_error', width)
});
}
}
if (value.cropTop || value.cropBottom) {
var height = editor.getEditor(path + ".height").getValue();
if (value.cropTop + value.cropBottom > height) {
errors.push({
path: path,
property: 'maximum',
message: $.i18n('edt_conf_v4l2_cropHeightValidation_error', height)
});
}
}
}
return errors;
});
function updateCropForWidth(editor, path) {
var width = editor.getEditor(path+".width").getValue();
updateJsonEditorRange(editor.getEditor(path), 'cropLeft', 0, width);
updateJsonEditorRange(editor.getEditor(path), 'cropRight', 0, width);
}
function updateCropForHeight(editor, path) {
var height = editor.getEditor(path + ".height").getValue();
updateJsonEditorRange(editor.getEditor(path), 'cropTop', 0, height);
updateJsonEditorRange(editor.getEditor(path), 'cropBottom', 0, height);
}
// Framegrabber // Framegrabber
conf_editor_screen = createJsonEditor('editor_container_screengrabber', { conf_editor_screen = createJsonEditor('editor_container_screengrabber', {
framegrabber: window.schema.framegrabber framegrabber: window.schema.framegrabber
@ -116,10 +167,26 @@ $(document).ready(function () {
updateJsonEditorSelection(screenGrabberOptions, "type", {}, enumVals, enumTitelVals, enumDefaultVal); updateJsonEditorSelection(screenGrabberOptions, "type", {}, enumVals, enumTitelVals, enumDefaultVal);
}); });
conf_editor_screen.on('ready', function () {
updateCropForWidth(conf_editor_screen, "root.framegrabber");
updateCropForHeight(conf_editor_screen, "root.framegrabber");
});
conf_editor_screen.on('change', function () { conf_editor_screen.on('change', function () {
conf_editor_screen.validate().length || window.readOnlyMode ? $('#btn_submit_screengrabber').attr('disabled', true) : $('#btn_submit_screengrabber').attr('disabled', false);
});
conf_editor_screen.watch('root.framegrabber.type', () => {
var selectedType = conf_editor_screen.getEditor("root.framegrabber.type").getValue(); var selectedType = conf_editor_screen.getEditor("root.framegrabber.type").getValue();
filterScreenInputOptions(selectedType); filterScreenInputOptions(selectedType);
conf_editor_screen.validate().length || window.readOnlyMode ? $('#btn_submit_screengrabber').attr('disabled', true) : $('#btn_submit_screengrabber').attr('disabled', false); });
conf_editor_screen.watch('root.framegrabber.width', () => {
updateCropForWidth(conf_editor_screen, "root.framegrabber");
});
conf_editor_screen.watch('root.framegrabber.height', () => {
updateCropForHeight(conf_editor_screen, "root.framegrabber");
}); });
function showScreenInputOptions(el, state) { function showScreenInputOptions(el, state) {
@ -188,6 +255,9 @@ $(document).ready(function () {
window.readOnlyMode ? $('#btn_submit_videograbber').attr('disabled', true) : $('#btn_submit_videograbber').attr('disabled', false); window.readOnlyMode ? $('#btn_submit_videograbber').attr('disabled', true) : $('#btn_submit_videograbber').attr('disabled', false);
} }
} }
else {
$('#btn_submit_videograbber').attr('disabled', true);
}
}); });
conf_editor_video.watch('root.grabberV4L2.available_devices', () => { conf_editor_video.watch('root.grabberV4L2.available_devices', () => {
@ -244,10 +314,8 @@ $(document).ready(function () {
var deviceProperties = getPropertiesOfDevice(deviceSelected); var deviceProperties = getPropertiesOfDevice(deviceSelected);
var formats = deviceProperties.video_inputs[videoInputSelected].formats; var formats = deviceProperties.video_inputs[videoInputSelected].formats;
//Hide, if only one record available for selection
if (formats.length <= 1) { addSchemaElements.access = "advanced";
addSchemaElements.access = "expert";
}
for (var i = 0; i < formats.length; i++) { for (var i = 0; i < formats.length; i++) {
if (formats[i].format) { if (formats[i].format) {
@ -375,6 +443,10 @@ $(document).ready(function () {
var height = parseInt(formats[formatIdx].resolutions[resolutionSelected].height); var height = parseInt(formats[formatIdx].resolutions[resolutionSelected].height);
conf_editor_video.getEditor("root.grabberV4L2.height").setValue(height); conf_editor_video.getEditor("root.grabberV4L2.height").setValue(height);
//Update crop rage depending on selected resolution
updateCropForWidth(conf_editor_video, "root.grabberV4L2");
updateCropForHeight(conf_editor_video, "root.grabberV4L2");
var fps = formats[formatIdx].resolutions[resolutionSelected].fps; var fps = formats[formatIdx].resolutions[resolutionSelected].fps;
if (!fps) { if (!fps) {
enumVals.push("NONE"); enumVals.push("NONE");
@ -415,7 +487,7 @@ $(document).ready(function () {
} }
//Show Frameskipping only when more than 2 fps //Show Frameskipping only when more than 2 fps
if (fps > 2) { if (fps > 2 && storedAccess === "expert" ) {
showVideoInputOptions(["fpsSoftwareDecimation"], true); showVideoInputOptions(["fpsSoftwareDecimation"], true);
} }
else { else {

View File

@ -213,7 +213,6 @@ function initLanguageSelection()
langText = availLangText[langIdx]; langText = availLangText[langIdx];
} }
} }
//console.log("langLocale: ", langLocale, "langText: ", langText);
$('#language-select').prop('title', langText); $('#language-select').prop('title', langText);
$("#language-select").val(langIdx); $("#language-select").val(langIdx);
@ -661,6 +660,33 @@ function updateJsonEditorMultiSelection(editor, key, addElements, newEnumVals, n
editor.addObjectProperty(key); editor.addObjectProperty(key);
} }
function updateJsonEditorRange(editor, key, minimum, maximum, defaultValue, step) {
var orginalProperties = editor.schema.properties[key];
var newSchema = [];
newSchema[key] = orginalProperties;
if (minimum) {
newSchema[key]["minimum"] = minimum;
}
if (maximum) {
newSchema[key]["maximum"] = maximum;
}
if (defaultValue) {
newSchema[key]["default"] = defaultValue;
}
if (step) {
newSchema[key]["step"] = step;
}
editor.original_schema.properties[key] = orginalProperties;
editor.schema.properties[key] = newSchema[key];
editor.removeObjectProperty(key);
delete editor.cached_editors[key];
editor.addObjectProperty(key);
}
function buildWL(link,linkt,cl) function buildWL(link,linkt,cl)
{ {
var baseLink = "https://docs.hyperion-project.org/"; var baseLink = "https://docs.hyperion-project.org/";

View File

@ -1,101 +1,90 @@
{ {
"type" : "object", "type" : "object",
"title" : "edt_conf_fg_heading_title", "title" : "edt_conf_fg_heading_title",
"properties" : "properties": {
{ "type": {
"type" : "type": "string",
{ "title": "edt_conf_fg_type_title",
"type" : "string", "enum": [ "auto", "amlogic", "dispmanx", "dx", "framebuffer", "osx", "qt", "x11", "xcb" ],
"title" : "edt_conf_fg_type_title", "options": {
"enum" : ["auto","amlogic","dispmanx","dx","framebuffer","osx","qt","x11", "xcb"], "enum_titles": [ "edt_conf_enum_automatic", "AMLogic", "DispmanX", "DirectX9", "Framebuffer", "OSX", "QT", "X11", "XCB" ]
"options":
{
"enum_titles": ["edt_conf_enum_automatic","AMLogic","DispmanX","DirectX9","Framebuffer","OSX","QT","X11","XCB"]
}, },
"default" : "auto", "default": "auto",
"propertyOrder" : 1 "propertyOrder": 1
}, },
"width" : "display": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_fg_display_title",
"title" : "edt_conf_fg_width_title", "minimum": 0,
"minimum" : 10, "default": 0,
"default" : 80, "propertyOrder": 2
"append" : "edt_append_pixel",
"propertyOrder" : 2
}, },
"height" : "width": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_fg_width_title",
"title" : "edt_conf_fg_height_title", "minimum": 10,
"minimum" : 10, "default": 80,
"default" : 45, "append": "edt_append_pixel",
"append" : "edt_append_pixel", "propertyOrder": 3
"propertyOrder" : 3
}, },
"frequency_Hz" : "height": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_fg_height_title",
"title" : "edt_conf_fg_frequency_Hz_title", "minimum": 10,
"minimum" : 1, "default": 45,
"default" : 10, "append": "edt_append_pixel",
"append" : "edt_append_hz", "propertyOrder": 4
"propertyOrder" : 4
}, },
"cropLeft" : "frequency_Hz": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_fg_frequency_Hz_title",
"title" : "edt_conf_v4l2_cropLeft_title", "minimum": 1,
"minimum" : 0, "default": 10,
"default" : 0, "append": "edt_append_hz",
"append" : "edt_append_pixel", "propertyOrder": 5
"propertyOrder" : 5
}, },
"cropRight" : "cropLeft": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_v4l2_cropLeft_title",
"title" : "edt_conf_v4l2_cropRight_title", "minimum": 0,
"minimum" : 0, "default": 0,
"default" : 0, "append": "edt_append_pixel",
"append" : "edt_append_pixel", "propertyOrder": 6
"propertyOrder" : 6
}, },
"cropTop" : "cropRight": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_v4l2_cropRight_title",
"title" : "edt_conf_v4l2_cropTop_title", "minimum": 0,
"minimum" : 0, "default": 0,
"default" : 0, "append": "edt_append_pixel",
"append" : "edt_append_pixel", "propertyOrder": 7
"propertyOrder" : 7
}, },
"cropBottom" : "cropTop": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_v4l2_cropTop_title",
"title" : "edt_conf_v4l2_cropBottom_title", "minimum": 0,
"minimum" : 0, "default": 0,
"default" : 0, "append": "edt_append_pixel",
"append" : "edt_append_pixel", "propertyOrder": 8
"propertyOrder" : 8
}, },
"pixelDecimation" : "cropBottom": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_v4l2_cropBottom_title",
"title" : "edt_conf_fg_pixelDecimation_title", "minimum": 0,
"minimum" : 1, "default": 0,
"maximum" : 30, "append": "edt_append_pixel",
"default" : 8, "propertyOrder": 9
"propertyOrder" : 9
}, },
"display" : "pixelDecimation": {
{ "type": "integer",
"type" : "integer", "title": "edt_conf_fg_pixelDecimation_title",
"title" : "edt_conf_fg_display_title", "minimum": 1,
"minimum" : 0, "maximum": 30,
"default" : 0, "default": 8,
"propertyOrder" : 10 "propertyOrder": 10
} }
}, },
"additionalProperties" : false "additionalProperties" : false
} }

View File

@ -49,6 +49,7 @@
"title": "edt_conf_v4l2_encoding_title", "title": "edt_conf_v4l2_encoding_title",
"default": "auto", "default": "auto",
"required": true, "required": true,
"access": "advanced",
"propertyOrder": 6 "propertyOrder": 6
}, },
"resolutions": { "resolutions": {
@ -109,7 +110,7 @@
"maximum": 60, "maximum": 60,
"default": 0, "default": 0,
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 12 "propertyOrder": 12
}, },
"flip": { "flip": {
@ -133,6 +134,38 @@
"required": true, "required": true,
"propertyOrder": 14 "propertyOrder": 14
}, },
"hardware_brightness": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_brightness_title",
"default": 0,
"required": true,
"access": "expert",
"propertyOrder": 15
},
"hardware_contrast": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_contrast_title",
"default": 0,
"required": true,
"access": "expert",
"propertyOrder": 16
},
"hardware_saturation": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_saturation_title",
"default": 0,
"required": true,
"access": "expert",
"propertyOrder": 17
},
"hardware_hue": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_hue_title",
"default": 0,
"required": true,
"access": "expert",
"propertyOrder": 18
},
"cropLeft": { "cropLeft": {
"type": "integer", "type": "integer",
"title": "edt_conf_v4l2_cropLeft_title", "title": "edt_conf_v4l2_cropLeft_title",
@ -140,8 +173,7 @@
"default": 0, "default": 0,
"append": "edt_append_pixel", "append": "edt_append_pixel",
"required": true, "required": true,
"access": "advanced", "propertyOrder": 19
"propertyOrder": 15
}, },
"cropRight": { "cropRight": {
"type": "integer", "type": "integer",
@ -150,8 +182,7 @@
"default": 0, "default": 0,
"append": "edt_append_pixel", "append": "edt_append_pixel",
"required": true, "required": true,
"access": "advanced", "propertyOrder": 20
"propertyOrder": 16
}, },
"cropTop": { "cropTop": {
"type": "integer", "type": "integer",
@ -160,8 +191,7 @@
"default": 0, "default": 0,
"append": "edt_append_pixel", "append": "edt_append_pixel",
"required": true, "required": true,
"access": "advanced", "propertyOrder": 21
"propertyOrder": 17
}, },
"cropBottom": { "cropBottom": {
"type": "integer", "type": "integer",
@ -170,23 +200,23 @@
"default": 0, "default": 0,
"append": "edt_append_pixel", "append": "edt_append_pixel",
"required": true, "required": true,
"access": "advanced", "propertyOrder": 22
"propertyOrder": 18
}, },
"cecDetection": { "cecDetection": {
"type": "boolean", "type": "boolean",
"title": "edt_conf_v4l2_cecDetection_title", "title": "edt_conf_v4l2_cecDetection_title",
"default": false, "default": false,
"required": true, "required": true,
"propertyOrder": 19 "access": "advanced",
"propertyOrder": 23
}, },
"signalDetection": { "signalDetection": {
"type": "boolean", "type": "boolean",
"title": "edt_conf_v4l2_signalDetection_title", "title": "edt_conf_v4l2_signalDetection_title",
"default": false, "default": false,
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 20 "propertyOrder": 24
}, },
"redSignalThreshold": { "redSignalThreshold": {
"type": "integer", "type": "integer",
@ -200,9 +230,9 @@
"signalDetection": true "signalDetection": true
} }
}, },
"access": "advanced", "access": "expert",
"required": true, "required": true,
"propertyOrder": 21 "propertyOrder": 25
}, },
"greenSignalThreshold": { "greenSignalThreshold": {
"type": "integer", "type": "integer",
@ -217,8 +247,8 @@
} }
}, },
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 22 "propertyOrder": 26
}, },
"blueSignalThreshold": { "blueSignalThreshold": {
"type": "integer", "type": "integer",
@ -233,8 +263,8 @@
} }
}, },
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 23 "propertyOrder": 27
}, },
"noSignalCounterThreshold": { "noSignalCounterThreshold": {
"type": "integer", "type": "integer",
@ -248,8 +278,8 @@
} }
}, },
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 24 "propertyOrder": 28
}, },
"sDVOffsetMin": { "sDVOffsetMin": {
"type": "number", "type": "number",
@ -264,8 +294,8 @@
} }
}, },
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 25 "propertyOrder": 29
}, },
"sDVOffsetMax": { "sDVOffsetMax": {
"type": "number", "type": "number",
@ -280,8 +310,8 @@
} }
}, },
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 26 "propertyOrder": 30
}, },
"sDHOffsetMin": { "sDHOffsetMin": {
"type": "number", "type": "number",
@ -296,8 +326,8 @@
} }
}, },
"required": true, "required": true,
"access": "advanced", "access": "expert",
"propertyOrder": 27 "propertyOrder": 31
}, },
"sDHOffsetMax": { "sDHOffsetMax": {
"type": "number", "type": "number",
@ -312,38 +342,6 @@
} }
}, },
"required": true, "required": true,
"propertyOrder": 28
},
"hardware_brightness": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_brightness_title",
"default": 0,
"required": true,
"access": "advanced",
"propertyOrder": 29
},
"hardware_contrast": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_contrast_title",
"default": 0,
"required": true,
"access": "advanced",
"propertyOrder": 30
},
"hardware_saturation": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_saturation_title",
"default": 0,
"required": true,
"access": "advanced",
"propertyOrder": 31
},
"hardware_hue": {
"type": "integer",
"title": "edt_conf_v4l2_hardware_hue_title",
"default": 0,
"required": true,
"access": "advanced",
"propertyOrder": 32 "propertyOrder": 32
} }
}, },