Merge remote-tracking branch 'origin/grabberDiscovery' into mediafoundation

This commit is contained in:
Paulchen Panther
2021-04-04 12:43:29 +02:00
committed by LordGrey
187 changed files with 3716 additions and 15430 deletions

View File

@@ -1,204 +1,246 @@
$(document).ready( function() {
performTranslation();
var oldDelList = [];
var effectName = "";
var imageData = "";
var effects_editor = null;
var effectPy = "";
var testrun;
$(document).ready(function () {
performTranslation();
var oldDelList = [];
var effectName = "";
var imageData = "";
var effects_editor = null;
var effectPyScript = "";
var testrun;
if(window.showOptHelp)
createHintH("intro", $.i18n('effectsconfigurator_label_intro'), "intro_effc");
if (window.showOptHelp)
createHintH("intro", $.i18n('effectsconfigurator_label_intro'), "intro_effc");
function updateDelEffectlist(){
var newDelList = window.serverInfo.effects;
if(newDelList.length != oldDelList.length)
{
$('#effectsdellist').html("");
var usrEffArr = [];
var sysEffArr = [];
for(var idx=0; idx<newDelList.length; idx++)
{
if(!/^\:/.test(newDelList[idx].file))
usrEffArr.push('ext_'+newDelList[idx].name+':'+newDelList[idx].name);
else
sysEffArr.push('int_'+newDelList[idx].name+':'+newDelList[idx].name);
}
$('#effectsdellist').append(createSel(usrEffArr, $.i18n('remote_optgroup_usreffets'), true)).append(createSel(sysEffArr, $.i18n('remote_optgroup_syseffets'), true)).trigger('change');
oldDelList = newDelList;
}
}
function triggerTestEffect() {
testrun = true;
var args = effects_editor.getEditor('root.args');
requestTestEffect(effectName, ":/effects/" + effectPy.slice(1), JSON.stringify(args.getValue()), imageData);
};
// Specify upload handler for image files
JSONEditor.defaults.options.upload = function(type, file, cbs) {
var fileReader = new FileReader();
//check file
if (!file.type.startsWith('image')) {
imageData = "";
cbs.failure('File upload error');
// TODO clear file dialog.
showInfoDialog('error', "", $.i18n('infoDialog_writeimage_error_text', file.name));
return;
}
fileReader.onload = function () {
imageData = this.result.split(',')[1];
cbs.success(file.name);
};
fileReader.readAsDataURL(file);
};
$("#effectslist").off().on("change", function(event) {
if(effects_editor != null)
effects_editor.destroy();
for(var idx=0; idx<effects.length; idx++){
if (effects[idx].schemaContent.script == this.value)
{
effects_editor = createJsonEditor('editor_container', {
args : effects[idx].schemaContent,
},false, true, false);
effectPy = ':';
effectPy += effects[idx].schemaContent.script;
imageData = "";
$("#name-input").trigger("change");
$("#eff_desc").html(createEffHint($.i18n(effects[idx].schemaContent.title),$.i18n(effects[idx].schemaContent.title+'_desc')));
break;
}
}
effects_editor.on('change',function() {
if ($("#btn_cont_test").hasClass("btn-success") && effects_editor.validate().length == 0 && effectName != "")
{
triggerTestEffect();
}
if( effects_editor.validate().length == 0 && effectName != "")
{
$('#btn_start_test').attr('disabled', false);
!window.readOnlyMode ? $('#btn_write').attr('disabled', false) : $('#btn_write').attr('disabled', true);
}
else
{
$('#btn_start_test, #btn_write').attr('disabled', true);
}
});
});
// disable or enable control elements
$("#name-input").on('change keyup', function(event) {
effectName = $(this).val();
if ($(this).val() == '') {
effects_editor.disable();
$("#eff_footer").children().attr('disabled',true);
} else {
effects_editor.enable();
$("#eff_footer").children().attr('disabled',false);
!window.readOnlyMode ? $('#btn_write').attr('disabled', false) : $('#btn_write').attr('disabled', true);
function updateDelEffectlist() {
var newDelList = window.serverInfo.effects;
if (newDelList.length != oldDelList.length) {
$('#effectsdellist').html("");
var usrEffArr = [];
var sysEffArr = [];
for (var idx = 0; idx < newDelList.length; idx++) {
if (newDelList[idx].file.startsWith(":")) {
sysEffArr.push(idx);
}
else {
usrEffArr.push(idx);
}
}
if (usrEffArr.length > 0) {
var usrEffGrp = createSelGroup($.i18n('remote_optgroup_usreffets'));
for (var idx = 0; idx < usrEffArr.length; idx++)
{
usrEffGrp.appendChild(createSelOpt('ext_' + newDelList[usrEffArr[idx]].name, newDelList[usrEffArr[idx]].name));
}
$('#effectsdellist').append(usrEffGrp);
}
var sysEffGrp = createSelGroup($.i18n('remote_optgroup_syseffets'));
for (var idx = 0; idx < sysEffArr.length; idx++)
{
sysEffGrp.appendChild(createSelOpt('int_' + newDelList[sysEffArr[idx]].name, newDelList[sysEffArr[idx]].name));
}
$('#effectsdellist').append(sysEffGrp);
$("#effectsdellist").trigger("change");
oldDelList = newDelList;
}
}
function triggerTestEffect() {
testrun = true;
var args = effects_editor.getEditor('root.args');
requestTestEffect(effectName, effectPyScript, JSON.stringify(args.getValue()), imageData);
};
// Specify upload handler for image files
JSONEditor.defaults.options.upload = function (type, file, cbs) {
var fileReader = new FileReader();
//check file
if (!file.type.startsWith('image')) {
imageData = "";
cbs.failure('File upload error');
// TODO clear file dialog.
showInfoDialog('error', "", $.i18n('infoDialog_writeimage_error_text', file.name));
return;
}
fileReader.onload = function () {
imageData = this.result.split(',')[1];
cbs.success(file.name);
};
fileReader.readAsDataURL(file);
};
$("#effectslist").off().on("change", function (event) {
if (effects_editor != null)
effects_editor.destroy();
for (var idx = 0; idx < effects.length; idx++) {
if (effects[idx].script == this.value) {
effects_editor = createJsonEditor('editor_container', {
args: effects[idx].schemaContent,
}, false, true, false);
effectPyScript = effects[idx].script;
imageData = "";
$("#name-input").trigger("change");
var desc = $.i18n(effects[idx].schemaContent.title + '_desc');
if (desc === effects[idx].schemaContent.title + '_desc') {
desc = ""
}
$("#eff_desc").html(createEffHint($.i18n(effects[idx].schemaContent.title), desc));
break;
}
}
effects_editor.on('change', function () {
if ($("#btn_cont_test").hasClass("btn-success") && effects_editor.validate().length == 0 && effectName != "") {
triggerTestEffect();
}
if (effects_editor.validate().length == 0 && effectName != "") {
$('#btn_start_test').attr('disabled', false);
!window.readOnlyMode ? $('#btn_write').attr('disabled', false) : $('#btn_write').attr('disabled', true);
}
else {
$('#btn_start_test, #btn_write').attr('disabled', true);
}
});
});
// disable or enable control elements
$("#name-input").on('change keyup', function (event) {
effectName = $(this).val();
if ($(this).val() == '') {
effects_editor.disable();
$("#eff_footer").children().attr('disabled', true);
} else {
effects_editor.enable();
$("#eff_footer").children().attr('disabled', false);
!window.readOnlyMode ? $('#btn_write').attr('disabled', false) : $('#btn_write').attr('disabled', true);
}
});
// Save Effect
$('#btn_write').off().on('click', function () {
requestWriteEffect(effectName, effectPyScript, JSON.stringify(effects_editor.getValue()), imageData);
$(window.hyperion).one("cmd-create-effect", function (event) {
if (event.response.success)
showInfoDialog('success', "", $.i18n('infoDialog_effconf_created_text', effectName));
});
// Save Effect
$('#btn_write').off().on('click',function() {
requestWriteEffect(effectName,effectPy,JSON.stringify(effects_editor.getValue()),imageData);
$(window.hyperion).one("cmd-create-effect", function(event) {
if (event.response.success)
showInfoDialog('success', "", $.i18n('infoDialog_effconf_created_text', effectName));
});
if (testrun)
setTimeout(requestPriorityClear, 100);
});
if (testrun)
setTimeout(requestPriorityClear,100);
// Start test
$('#btn_start_test').off().on('click', function () {
triggerTestEffect();
});
});
// Stop test
$('#btn_stop_test').off().on('click', function () {
requestPriorityClear();
testrun = false;
});
// Start test
$('#btn_start_test').off().on('click',function() {
triggerTestEffect();
});
// Continuous test
$('#btn_cont_test').off().on('click', function () {
toggleClass('#btn_cont_test', "btn-success", "btn-danger");
});
// Stop test
$('#btn_stop_test').off().on('click',function() {
requestPriorityClear();
testrun = false;
});
// Delete Effect
$('#btn_delete').off().on('click', function () {
var name = $("#effectsdellist").val().split("_")[1];
requestDeleteEffect(name);
$(window.hyperion).one("cmd-delete-effect", function (event) {
if (event.response.success)
showInfoDialog('success', "", $.i18n('infoDialog_effconf_deleted_text', name));
});
});
// Continuous test
$('#btn_cont_test').off().on('click',function() {
toggleClass('#btn_cont_test', "btn-success", "btn-danger");
});
// Disable or enable Delete Effect Button
$('#effectsdellist').off().on('change', function () {
$(this).val() == null ? $('#btn_edit, #btn_delete').prop('disabled', true) : "";
$(this).val().startsWith("int_") ? $('#btn_delete').prop('disabled', true) : $('#btn_delete').prop('disabled', false);
});
// Delete Effect
$('#btn_delete').off().on('click',function() {
var name = $("#effectsdellist").val().split("_")[1];
requestDeleteEffect(name);
$(window.hyperion).one("cmd-delete-effect", function(event) {
if (event.response.success)
showInfoDialog('success', "", $.i18n('infoDialog_effconf_deleted_text', name));
});
});
// Load Effect
$('#btn_edit').off().on('click', function () {
// disable or enable Delete Effect Button
$('#effectsdellist').off().on('change', function(){
$(this).val() == null ? $('#btn_edit, #btn_delete').prop('disabled',true) : "";
$(this).val().startsWith("int_") ? $('#btn_delete').prop('disabled',true) : $('#btn_delete').prop('disabled',false);
});
var name = $("#effectsdellist").val().replace("ext_", "");
if (name.startsWith("int_")) {
name = name.split("_").pop();
$("#name-input").val("My Modded Effect");
}
else {
name = name.split("_").pop();
$("#name-input").val(name);
}
// Load Effect
$('#btn_edit').off().on('click', function(){
var name = $("#effectsdellist").val().replace("ext_","");
var efx = window.serverInfo.effects;
for (var i = 0; i < efx.length; i++) {
if (efx[i].name == name) {
var py = efx[i].script;
$("#effectslist").val(py).trigger("change");
if(name.startsWith("int_"))
{ name = name.split("_").pop();
$("#name-input").val("My Modded Effect");
}
else
{
name = name.split("_").pop();
$("#name-input").val(name);
}
for (var key in efx[i].args) {
var ed = effects_editor.getEditor('root.args.' + [key]);
if (ed)
ed.setValue(efx[i].args[key]);
}
break;
}
}
});
var efx = window.serverInfo.effects;
for(var i = 0; i<efx.length; i++)
{
if(efx[i].name == name)
{
var py = efx[i].script.split("/").pop();
$("#effectslist").val(py).trigger("change");
//Create effect template list
var effects = window.serverSchema.properties.effectSchemas;
for(var key in efx[i].args)
{
var ed = effects_editor.getEditor('root.args.'+[key]);
if(ed)
ed.setValue(efx[i].args[key]);
}
break;
}
}
});
$('#effectslist').html("");
var custTemplatesIDs = [];
var sysTemplatesIDs = [];
//create basic effect list
var effects = window.serverSchema.properties.effectSchemas.internal;
for(var idx=0; idx<effects.length; idx++)
{
$("#effectslist").append(createSelOpt(effects[idx].schemaContent.script, $.i18n(effects[idx].schemaContent.title)));
}
$("#effectslist").trigger("change");
for (var idx = 0; idx < effects.length; idx++) {
if (effects[idx].type === "custom")
custTemplatesIDs.push(idx);
else
sysTemplatesIDs.push(idx);
}
updateDelEffectlist();
//Cannot use createSel(), as Windows filenames include colons ":"
if (custTemplatesIDs.length > 0) {
var custTmplGrp = createSelGroup($.i18n('remote_optgroup_templates_custom'));
for (var idx = 0; idx < custTemplatesIDs.length; idx++)
{
custTmplGrp.appendChild(createSelOpt(effects[custTemplatesIDs[idx]].script, $.i18n(effects[custTemplatesIDs[idx]].schemaContent.title)));
}
$('#effectslist').append(custTmplGrp);
}
//interval update
$(window.hyperion).on("cmd-effects-update", function(event){
window.serverInfo.effects = event.response.data.effects
updateDelEffectlist();
});
var sysTmplGrp = createSelGroup($.i18n('remote_optgroup_templates_system'));
for (var idx = 0; idx < sysTemplatesIDs.length; idx++)
{
sysTmplGrp.appendChild(createSelOpt(effects[sysTemplatesIDs[idx]].script, $.i18n(effects[sysTemplatesIDs[idx]].schemaContent.title)));
}
$('#effectslist').append(sysTmplGrp);
removeOverlay();
$("#effectslist").trigger("change");
updateDelEffectlist();
//interval update
$(window.hyperion).on("cmd-effects-update", function (event) {
window.serverInfo.effects = event.response.data.effects
updateDelEffectlist();
});
removeOverlay();
});

View File

@@ -11,12 +11,12 @@ $(document).ready(function () {
$('#conf_cont_instCapt').append(createOptPanel('fa-camera', $.i18n("edt_conf_instCapture_heading_title"), 'editor_container_instCapt', 'btn_submit_instCapt'));
$('#conf_cont_instCapt').append(createHelpTable(window.schema.instCapture.properties, $.i18n("edt_conf_instCapture_heading_title")));
// Framegrabber
// Screen-Grabber
$('#conf_cont').append(createRow('conf_cont_screen'));
$('#conf_cont_screen').append(createOptPanel('fa-camera', $.i18n("edt_conf_fg_heading_title"), 'editor_container_screengrabber', 'btn_submit_screengrabber'));
$('#conf_cont_screen').append(createHelpTable(window.schema.framegrabber.properties, $.i18n("edt_conf_fg_heading_title")));
// V4L2 - hide if not available
// Video-Grabber - hide if not available
if (VIDEOGRABBER_AVAIL) {
$('#conf_cont').append(createRow('conf_cont_video'));
$('#conf_cont_video').append(createOptPanel('fa-camera', $.i18n("edt_conf_v4l2_heading_title"), 'editor_container_videograbber', 'btn_submit_videograbber'));
@@ -36,7 +36,7 @@ $(document).ready(function () {
instCapture: window.schema.instCapture
}, true, true);
// Hide V4L2 elements, if not available
// Hide Video-Grabber elements, if not available
if (!VIDEOGRABBER_AVAIL) {
$('[data-schemapath*="root.instCapture.v4lEnable' + '"]').hide();
$('[data-schemapath*="root.instCapture.v4lPriority' + '"]').hide();
@@ -67,6 +67,15 @@ $(document).ready(function () {
conf_editor_instCapt.validate().length || window.readOnlyMode ? $('#btn_submit_instCapt').attr('disabled', true) : $('#btn_submit_instCapt').attr('disabled', false);
});
conf_editor_instCapt.watch('root.instCapture.systemEnable', () => {
var systemEnable = conf_editor_instCapt.getEditor("root.instCapture.systemEnable").getValue();
if (systemEnable) {
discoverInputSources("screen");
}
});
conf_editor_instCapt.watch('root.instCapture.v4lEnable', () => {
if (VIDEOGRABBER_AVAIL) {
var videoEnable = conf_editor_instCapt.getEditor("root.instCapture.v4lEnable").getValue();
@@ -131,43 +140,18 @@ $(document).ready(function () {
updateJsonEditorRange(editor.getEditor(path), 'cropBottom', 0, height);
}
// Framegrabber
// Screen-Grabber
conf_editor_screen = createJsonEditor('editor_container_screengrabber', {
framegrabber: window.schema.framegrabber
}, true, true);
conf_editor_screen.on('ready', function () {
var availableGrabbers = window.serverInfo.grabbers.available;
var screenGrabberOptions = conf_editor_screen.getEditor('root.framegrabber');
var orginalGrabberTypes = screenGrabberOptions.schema.properties.type.enum;
var orginalGrabberTitles = screenGrabberOptions.schema.properties.type.options.enum_titles;
var enumVals = [];
var enumTitelVals = [];
var enumDefaultVal = "";
for (var i = 0; i < orginalGrabberTypes.length; i++) {
var grabberType = orginalGrabberTypes[i];
if ($.inArray(grabberType, availableGrabbers) != -1) {
enumVals.push(grabberType);
enumTitelVals.push(orginalGrabberTitles[i]);
}
var screenEnable = conf_editor_instCapt.getEditor("root.instCapture.systemEnable").getValue();
if (screenEnable) {
discoverInputSources("screen");
}
var activeGrabbers = window.serverInfo.grabbers.active.map(v => v.toLowerCase());
// Select first active platform grabber
for (var i = 0; i < enumVals.length; i++) {
var grabberType = enumVals[i];
if ($.inArray(grabberType, activeGrabbers) != -1) {
enumDefaultVal = grabberType;
break;
}
}
updateJsonEditorSelection(screenGrabberOptions, "type", {}, enumVals, enumTitelVals, enumDefaultVal);
});
conf_editor_screen.on('ready', function () {
updateCropForWidth(conf_editor_screen, "root.framegrabber");
updateCropForHeight(conf_editor_screen, "root.framegrabber");
});
@@ -181,6 +165,182 @@ $(document).ready(function () {
filterScreenInputOptions(selectedType);
});
conf_editor_screen.watch('root.framegrabber.available_devices', () => {
var deviceSelected = conf_editor_screen.getEditor("root.framegrabber.available_devices").getValue();
if (deviceSelected === "NONE" || deviceSelected === "") {
$('#btn_submit_screengrabber').attr('disabled', true);
}
else {
var addSchemaElements = {};
var enumVals = [];
var enumTitelVals = [];
var enumDefaultVal = "";
var deviceProperties = getPropertiesOfDevice(deviceSelected);
//Update hidden input element
conf_editor_screen.getEditor("root.framegrabber.device").setValue(deviceProperties.device);
var video_inputs = deviceProperties.video_inputs;
if (video_inputs.length <= 1) {
addSchemaElements.access = "expert";
}
for (const video_input of video_inputs) {
enumVals.push(video_input.inputIdx);
enumTitelVals.push(video_input.name);
}
if (enumVals.length > 0) {
if (deviceSelected === configuredDevice) {
var configuredVideoInput = window.serverConfig.framegrabber.input;
if ($.inArray(configuredVideoInput, enumVals) != -1) {
enumDefaultVal = configuredVideoInput;
}
}
updateJsonEditorSelection(conf_editor_screen.getEditor('root.framegrabber'),
'device_inputs', addSchemaElements, enumVals, enumTitelVals, enumDefaultVal, false);
}
if (!window.readOnlyMode) {
$('#btn_submit_screengrabber').attr('disabled', false);
}
}
});
conf_editor_screen.watch('root.framegrabber.device_inputs', () => {
var deviceSelected = conf_editor_screen.getEditor("root.framegrabber.available_devices").getValue();
var videoInputSelected = conf_editor_screen.getEditor("root.framegrabber.device_inputs").getValue();
//Update hidden input element
conf_editor_screen.getEditor("root.framegrabber.input").setValue(parseInt(videoInputSelected));
var addSchemaElements = {};
var enumVals = [];
var enumTitelVals = [];
var enumDefaultVal = "";
var deviceProperties = getPropertiesOfDevice(deviceSelected);
var formats = deviceProperties.video_inputs[videoInputSelected].formats;
var formatIdx = 0;
/*
if (formatSelected !== "NONE") {
formatIdx = formats.findIndex(x => x.format === formatSelected);
}
*/
var resolutions = formats[formatIdx].resolutions;
if (resolutions.length <= 1) {
addSchemaElements.access = "advanced";
} else {
resolutions.sort(compareTwoValues('width', 'height', 'asc'));
}
for (var i = 0; i < resolutions.length; i++) {
enumVals.push(i);
var resolutionText = resolutions[i].width + "x" + resolutions[i].height;
enumTitelVals.push(resolutionText);
}
if (enumVals.length > 0) {
if (deviceSelected === configuredDevice) {
var configuredResolutionText = window.serverConfig.framegrabber.width + "x" + window.serverConfig.framegrabber.height;
var idx = $.inArray(configuredResolutionText, enumTitelVals)
if (idx != -1) {
enumDefaultVal = idx;
}
}
updateJsonEditorSelection(conf_editor_screen.getEditor('root.framegrabber'),
'resolutions', addSchemaElements, enumVals, enumTitelVals, enumDefaultVal, false);
}
if (!window.readOnlyMode) {
$('#btn_submit_videograbber').attr('disabled', false);
}
});
conf_editor_screen.watch('root.framegrabber.resolutions', () => {
var deviceSelected = conf_editor_screen.getEditor("root.framegrabber.available_devices").getValue();
var videoInputSelected = conf_editor_screen.getEditor("root.framegrabber.device_inputs").getValue();
var resolutionSelected = conf_editor_screen.getEditor("root.framegrabber.resolutions").getValue();
var addSchemaElements = {};
var enumVals = [];
var enumDefaultVal = "";
var deviceProperties = getPropertiesOfDevice(deviceSelected);
var formats = deviceProperties.video_inputs[videoInputSelected].formats;
var formatIdx = 0;
/*
if (formatSelected !== "NONE") {
formatIdx = formats.findIndex(x => x.format === formatSelected);
}
*/
//Update hidden resolution related elements
var width = parseInt(formats[formatIdx].resolutions[resolutionSelected].width);
conf_editor_screen.getEditor("root.framegrabber.width").setValue(width);
var height = parseInt(formats[formatIdx].resolutions[resolutionSelected].height);
conf_editor_screen.getEditor("root.framegrabber.height").setValue(height);
//Update crop rage depending on selected resolution
updateCropForWidth(conf_editor_screen, "root.framegrabber");
updateCropForHeight(conf_editor_screen, "root.framegrabber");
var fps = formats[formatIdx].resolutions[resolutionSelected].fps;
if (!fps) {
enumVals.push("NONE");
addSchemaElements.options = { "hidden": true };
} else {
fps.sort((a, b) => a - b);
for (var i = 0; i < fps.length; i++) {
enumVals.push(fps[i]);
}
}
if (enumVals.length <= 1) {
addSchemaElements.access = "expert";
}
if (enumVals.length > 0) {
if (deviceSelected === configuredDevice) {
var configuredFps = window.serverConfig.framegrabber.fps;
if ($.inArray(configuredFps, enumVals) != -1) {
enumDefaultVal = configuredFps;
}
}
updateJsonEditorSelection(conf_editor_screen.getEditor('root.framegrabber'),
'framerates', addSchemaElements, enumVals, [], enumDefaultVal, false);
}
if (!window.readOnlyMode) {
$('#btn_submit_screengrabber').attr('disabled', false);
}
});
conf_editor_screen.watch('root.framegrabber.framerates', () => {
//Update hidden fps element
var fps = 0;
var framerates = conf_editor_screen.getEditor("root.framegrabber.framerates").getValue();
if (framerates !== "NONE") {
fps = parseInt(framerates);
}
//Show Frameskipping only when more than 2 fps
if (fps > 2 && storedAccess === "expert") {
showVideoInputOptions(["fpsSoftwareDecimation"], true);
}
else {
showVideoInputOptions(["fpsSoftwareDecimation"], false);
}
conf_editor_screen.getEditor("root.framegrabber.fps").setValue(fps);
});
conf_editor_screen.watch('root.framegrabber.width', () => {
updateCropForWidth(conf_editor_screen, "root.framegrabber");
});
@@ -227,7 +387,13 @@ $(document).ready(function () {
};
$('#btn_submit_screengrabber').off().on('click', function () {
requestWriteConfig(conf_editor_screen.getValue());
var saveOptions = conf_editor_screen.getValue();
var instCaptOptions = window.serverConfig.instCapture;
instCaptOptions.systemEnable = true;
saveOptions.instCapture = instCaptOptions;
requestWriteConfig(saveOptions);
});
// External Input Sources (Video-Grabbers)
@@ -251,8 +417,16 @@ $(document).ready(function () {
conf_editor_video.on('change', function () {
var deviceSelected = conf_editor_video.getEditor("root.grabberV4L2.available_devices").getValue();
if (!conf_editor_video.validate().length) {
if (deviceSelected !== "NONE") {
window.readOnlyMode ? $('#btn_submit_videograbber').attr('disabled', true) : $('#btn_submit_videograbber').attr('disabled', false);
switch (deviceSelected) {
case "SELECT":
showAllVideoInputOptions(conf_editor_video, "grabberV4L2", false);
break;
case "NONE":
break;
default:
window.readOnlyMode ? $('#btn_submit_videograbber').attr('disabled', true) : $('#btn_submit_videograbber').attr('disabled', false);
break;
}
}
else {
@@ -262,7 +436,7 @@ $(document).ready(function () {
conf_editor_video.watch('root.grabberV4L2.available_devices', () => {
var deviceSelected = conf_editor_video.getEditor("root.grabberV4L2.available_devices").getValue();
if (deviceSelected === "NONE" || deviceSelected === "") {
if (deviceSelected === "NONE" || deviceSelected === "SELECT" || deviceSelected === "") {
$('#btn_submit_videograbber').attr('disabled', true);
}
else {
@@ -293,6 +467,7 @@ $(document).ready(function () {
enumDefaultVal = configuredVideoInput;
}
}
updateJsonEditorSelection(conf_editor_video.getEditor('root.grabberV4L2'),
'device_inputs', addSchemaElements, enumVals, enumTitelVals, enumDefaultVal, false);
}
@@ -389,7 +564,7 @@ $(document).ready(function () {
var resolutions = formats[formatIdx].resolutions;
if (resolutions.length <= 1) {
addSchemaElements.access = "expert";
addSchemaElements.access = "advanced";
} else {
resolutions.sort(compareTwoValues('width', 'height', 'asc'));
}
@@ -497,8 +672,13 @@ $(document).ready(function () {
});
$('#btn_submit_videograbber').off().on('click', function () {
var v4l2Options = conf_editor_video.getValue();
requestWriteConfig(v4l2Options);
var saveOptions = conf_editor_video.getValue();
var instCaptOptions = window.serverConfig.instCapture;
instCaptOptions.v4lEnable = true;
saveOptions.instCapture = instCaptOptions;
requestWriteConfig(saveOptions);
});
}
@@ -514,35 +694,69 @@ $(document).ready(function () {
removeOverlay();
// build dynamic enum
var updateVideoSourcesList = function (type, discoveryInfo) {
// build dynamic screen input enum
var updateScreenSourcesList = function (type, discoveryInfo) {
var enumVals = [];
var enumTitelVals = [];
var enumDefaultVal = "";
if (jQuery.isEmptyObject(discoveryInfo)) {
enumVals.push("NONE");
enumTitelVals.push($.i18n('edt_conf_grabber_discovered_none'));
conf_editor_screen.getEditor('root.framegrabber').disable();
showAllVideoInputOptions(conf_editor_screen, "framegrabber", false);
}
else {
for (const device of discoveryInfo) {
enumVals.push(device.device_name);
}
conf_editor_screen.getEditor('root.framegrabber').enable();
}
if (enumVals.length > 0) {
configuredDevice = window.serverConfig.framegrabber.available_devices;
if ($.inArray(configuredDevice, enumVals) != -1) {
enumDefaultVal = configuredDevice;
}
updateJsonEditorSelection(conf_editor_screen.getEditor('root.framegrabber'),
'available_devices', {}, enumVals, enumTitelVals, enumDefaultVal, false);
}
}
// build dynamic video input enum
var updateVideoSourcesList = function (type, discoveryInfo) {
var enumVals = [];
var enumTitelVals = [];
var enumDefaultVal = "";
var addSelect = false;
if (jQuery.isEmptyObject(discoveryInfo)) {
enumVals.push("NONE");
enumTitelVals.push($.i18n('edt_conf_grabber_discovered_none'));
conf_editor_video.getEditor('root.grabberV4L2').disable();
showAllVideoInputOptions(false);
showAllVideoInputOptions(conf_editor_video, "grabberV4L2", false);
}
else {
for (const device of discoveryInfo) {
enumVals.push(device.device_name);
}
conf_editor_video.getEditor('root.grabberV4L2').enable();
}
if (enumVals.length > 0) {
configuredDevice = window.serverConfig.grabberV4L2.available_devices;
if ($.inArray(configuredDevice, enumVals) != -1) {
enumDefaultVal = configuredDevice;
}
updateJsonEditorSelection(conf_editor_video.getEditor('root.grabberV4L2'),
'available_devices', {}, enumVals, enumTitelVals, enumDefaultVal, false);
else {
addSelect = true;
showAllVideoInputOptions(conf_editor_video, "grabberV4L2", false);
}
}
updateJsonEditorSelection(conf_editor_video.getEditor('root.grabberV4L2'),
'available_devices', {}, enumVals, enumTitelVals, enumDefaultVal, addSelect);
}
async function discoverInputSources(type, params) {
@@ -557,9 +771,18 @@ $(document).ready(function () {
"video_sources": []
}
}
//console.log("discoveryResult", discoveryResult);
discoveredInputSources = discoveryResult.video_sources;
updateVideoSourcesList(type, discoveredInputSources);
switch (type) {
case "screen":
updateScreenSourcesList(type, discoveredInputSources);
break;
case "video":
updateVideoSourcesList(type, discoveredInputSources);
break;
}
}
function getPropertiesOfDevice(deviceName) {
@@ -573,20 +796,20 @@ $(document).ready(function () {
return deviceProperties;
}
function showVideoInputOptions(elements, state) {
function showVideoInputOptions(path, elements, state) {
for (var i = 0; i < elements.length; i++) {
$('[data-schemapath*="root.grabberV4L2.' + elements[i] + '"]').toggle(state);
$('[data-schemapath*="'+ path + '.' + elements[i] + '"]').toggle(state);
}
}
function showAllVideoInputOptions(state) {
function showAllVideoInputOptions(editor, item, state) {
var elements = [];
for (var key in conf_editor_video.schema.properties.grabberV4L2.properties) {
for (var key in editor.schema.properties[item].properties) {
if (key !== "available_devices") {
elements.push(key);
}
}
showVideoInputOptions(elements, state);
showVideoInputOptions("root." + item, elements, state);
}
});

View File

@@ -53,7 +53,7 @@ function updateSessions() {
if (sess && sess.length) {
window.wSess = [];
for (var i = 0; i < sess.length; i++) {
if (sess[i].type == "_hyperiond-http._tcp.") {
if (sess[i].type == "_http._tcp." || sess[i].type == "_https._tcp." || sess[i].type == "_hyperiond-http._tcp.") {
window.wSess.push(sess[i]);
}
}
@@ -461,7 +461,7 @@ function createJsonEditor(container, schema, setconfig, usePanel, arrayre) {
return editor;
}
function updateJsonEditorSelection(editor, key, addElements, newEnumVals, newTitelVals, newDefaultVal, addCustom) {
function updateJsonEditorSelection(editor, key, addElements, newEnumVals, newTitelVals, newDefaultVal, addSelect, addCustom, addCustomAsFirst, customText) {
var orginalProperties = editor.schema.properties[key];
var newSchema = [];
@@ -494,8 +494,22 @@ function updateJsonEditorSelection(editor, key, addElements, newEnumVals, newTit
}
if (addCustom) {
newEnumVals.push("custom");
newTitelVals.push("edt_conf_enum_custom");
if (newTitelVals.length === 0) {
newTitelVals = [...newEnumVals];
}
if (!!!customText) {
customText = "edt_conf_enum_custom";
}
if (addCustomAsFirst) {
newEnumVals.unshift("CUSTOM");
newTitelVals.unshift(customText);
} else {
newEnumVals.push("CUSTOM");
newTitelVals.push(customText);
}
if (newSchema[key].options.infoText) {
var customInfoText = newSchema[key].options.infoText + "_custom";
@@ -503,6 +517,12 @@ function updateJsonEditorSelection(editor, key, addElements, newEnumVals, newTit
}
}
if (addSelect) {
newEnumVals.unshift("SELECT");
newTitelVals.unshift("edt_conf_enum_please_select");
newDefaultVal = "SELECT";
}
if (newEnumVals) {
newSchema[key]["enum"] = newEnumVals;
}