From b4e29f45b5c5aadb92ab1d42758ed471f833b1a0 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 14 May 2024 10:03:20 -0400 Subject: [PATCH] When editing buffer settings, ensure that MaxImageBuffers > PreEventCount. --- web/lang/en_gb.php | 1 + web/skins/classic/views/js/monitor.js | 30 +++++++++++++++++------ web/skins/classic/views/js/monitor.js.php | 3 +++ web/skins/classic/views/monitor.php | 4 +-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/web/lang/en_gb.php b/web/lang/en_gb.php index b12454251..ecbfb7a84 100644 --- a/web/lang/en_gb.php +++ b/web/lang/en_gb.php @@ -165,6 +165,7 @@ $SLANG = array( 'BadPort' => 'Port must be set to a valid number', 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', + 'BadPreEventCountMaxImageBufferCount' => 'Max Image Buffer Count should be greater than Pre event image count or else it cannot be satisfied', 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', 'BadNoSaveJPEGsOrVideoWriter' => 'SaveJPEGs and VideoWriter are both set to disabled. Nothing will be recorded!', 'BadSectionLength' => 'Section length must be an integer of 30 or more', diff --git a/web/skins/classic/views/js/monitor.js b/web/skins/classic/views/js/monitor.js index 62bf903b4..460d2c45d 100644 --- a/web/skins/classic/views/js/monitor.js +++ b/web/skins/classic/views/js/monitor.js @@ -141,7 +141,7 @@ function initPage() { }; }); document.querySelectorAll('input[name="newMonitor[ImageBufferCount]"],input[name="newMonitor[MaxImageBufferCount]"],input[name="newMonitor[Width]"],input[name="newMonitor[Height]"],input[name="newMonitor[PreEventCount]"]').forEach(function(el) { - el.oninput = window['update_estimated_ram_use'].bind(el); + el.oninput = window['buffer_setting_oninput'].bind(el); }); update_estimated_ram_use(); @@ -311,17 +311,31 @@ function random_WebColour() { ); } +function buffer_setting_oninput(e) { + const max_image_buffer_count = document.getElementById('newMonitor[MaxImageBufferCount]'); + const pre_event_count = document.getElementById('newMonitor[PreEventCount]'); + console.log(pre_event_count.value ,'>', max_image_buffer_count.value, this); + if (parseInt(pre_event_count.value) > parseInt(max_image_buffer_count.value)) { + if (this.id=='newMonitor[PreEventCount]') { + max_image_buffer_count.value=pre_event_count.value; + } else { + pre_event_count.value = max_image_buffer_count.value; + } + } + + update_estimated_ram_use(); +} function update_estimated_ram_use() { - var width = document.querySelectorAll('input[name="newMonitor[Width]"]')[0].value; - var height = document.querySelectorAll('input[name="newMonitor[Height]"]')[0].value; - var colours = document.querySelectorAll('select[name="newMonitor[Colours]"]')[0].value; + const width = document.querySelectorAll('input[name="newMonitor[Width]"]')[0].value; + const height = document.querySelectorAll('input[name="newMonitor[Height]"]')[0].value; + const colours = document.querySelectorAll('select[name="newMonitor[Colours]"]')[0].value; - var min_buffer_count = parseInt(document.querySelectorAll('input[name="newMonitor[ImageBufferCount]"]')[0].value); - min_buffer_count += parseInt(document.querySelectorAll('input[name="newMonitor[PreEventCount]"]')[0].value); - var min_buffer_size = min_buffer_count * width * height * colours; + let min_buffer_count = parseInt(document.querySelectorAll('input[name="newMonitor[ImageBufferCount]"]')[0].value); + min_buffer_count += parseInt(document.getElementById('newMonitor[PreEventCount]').value); + const min_buffer_size = min_buffer_count * width * height * colours; document.getElementById('estimated_ram_use').innerHTML = 'Min: ' + human_filesize(min_buffer_size); - var max_buffer_count = parseInt(document.querySelectorAll('input[name="newMonitor[MaxImageBufferCount]"]')[0].value); + const max_buffer_count = parseInt(document.getElementById('newMonitor[MaxImageBufferCount]').value); if (max_buffer_count) { var max_buffer_size = (min_buffer_count + max_buffer_count) * width * height * colours; document.getElementById('estimated_ram_use').innerHTML += ' Max: ' + human_filesize(max_buffer_size); diff --git a/web/skins/classic/views/js/monitor.js.php b/web/skins/classic/views/js/monitor.js.php index e29819f6f..85c36aee3 100644 --- a/web/skins/classic/views/js/monitor.js.php +++ b/web/skins/classic/views/js/monitor.js.php @@ -142,6 +142,9 @@ function validateForm( form ) { errors[errors.length] = ""; if ( !form.elements['newMonitor[StreamReplayBuffer]'].value || !(parseInt(form.elements['newMonitor[StreamReplayBuffer]'].value) >= 0 ) ) errors[errors.length] = ""; + if (form.elements['newMonitor[PreEventCount]'].value > form.elements['newMonitor[MaxImageBufferCount]'].value) + errors[errors.length] = ""; + if ( !form.elements['newMonitor[AlarmFrameCount]'].value || !(parseInt(form.elements['newMonitor[AlarmFrameCount]'].value) > 0 ) ) errors[errors.length] = ""; if ( !form.elements['newMonitor[SectionLength]'].value || !(parseInt(form.elements['newMonitor[SectionLength]'].value) >= 30 ) ) diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 38dd02fcd..c61200c05 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -1071,7 +1071,7 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor - + @@ -1079,7 +1079,7 @@ echo htmlSelect('newMonitor[OutputContainer]', $videowriter_containers, $monitor - +