Skip to content

Commit 5e9f2bd

Browse files
author
Isaac Connor
committed
Merge branch 'speed_ai' of github.com:ZoneMinder/zoneminder into speed_ai
2 parents 4951bff + b2e4053 commit 5e9f2bd

12 files changed

+66
-12
lines changed

.cirrus.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ task:
22
name: freebsd-build
33
freebsd_instance:
44
matrix:
5-
- image_family: freebsd-14-0
6-
- image_family: freebsd-13-3
5+
- image_family: freebsd-15-0
6+
- image_family: freebsd-14-2
7+
- image_family: freebsd-13-5
78

89
prepare_script:
910
- pkg install -yq git cmake pkgconf jpeg-turbo mysql80-client ffmpeg libvncserver libjwt catch2 p5-DBI p5-DBD-mysql p5-Date-Manip p5-Test-LWP-UserAgent p5-Sys-Mmap v4l_compat

src/zm_event.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,8 @@ void Event::createNotes(std::string &notes) {
343343
notes += ", ";
344344
notes += *setIter;
345345
}
346+
if (mapIter != noteSetMap.begin())
347+
notes += ", ";
346348
}
347349
} // void Event::createNotes(std::string &notes)
348350

src/zm_ffmpeg.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ static CodecData dec_codecs[] = {
4949
#endif
5050
{ AV_CODEC_ID_AV1, "av1", "libsvtav1", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
5151
{ AV_CODEC_ID_AV1, "av1", "libaom-av1", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
52+
{ AV_CODEC_ID_AV1, "av1", "av1_vaapi", AV_PIX_FMT_YUV420P, AV_PIX_FMT_VAAPI, AV_HWDEVICE_TYPE_VAAPI, nullptr },
5253
{ AV_CODEC_ID_MJPEG, "mjpeg", "mjpeg", AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ422P, AV_HWDEVICE_TYPE_NONE, nullptr },
5354
{ AV_CODEC_ID_H264, "h264", "h264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
5455
{ AV_CODEC_ID_H264, "h264", "h264_v4lm2m", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
@@ -80,6 +81,7 @@ static CodecData enc_codecs[] = {
8081
{ AV_CODEC_ID_H264, "h264", "libx264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
8182
{ AV_CODEC_ID_MJPEG, "mjpeg", "mjpeg", AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ420P, AV_HWDEVICE_TYPE_NONE, nullptr },
8283
{ AV_CODEC_ID_VP9, "vp9", "libvpx-vp9", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
84+
{ AV_CODEC_ID_AV1, "av1", "av1_vaapi", AV_PIX_FMT_YUV420P, AV_PIX_FMT_VAAPI, AV_HWDEVICE_TYPE_VAAPI, nullptr },
8385
{ AV_CODEC_ID_AV1, "av1", "libsvtav1", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
8486
{ AV_CODEC_ID_AV1, "av1", "libaom-av1", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE, nullptr },
8587
};

web/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ add_subdirectory(api)
66
configure_file(includes/config.php.in "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" @ONLY)
77

88
# Install the web files
9-
install(DIRECTORY vendor api ajax css fonts graphics includes js lang skins views DESTINATION "${ZM_WEBDIR}" PATTERN "*.in" EXCLUDE PATTERN "*Make*" EXCLUDE PATTERN "*cmake*" EXCLUDE)
9+
install(DIRECTORY vendor api ajax css fonts graphics includes js lang skins sounds views DESTINATION "${ZM_WEBDIR}" PATTERN "*.in" EXCLUDE PATTERN "*Make*" EXCLUDE PATTERN "*cmake*" EXCLUDE)
1010
install(FILES index.php robots.txt DESTINATION "${ZM_WEBDIR}")
1111
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" DESTINATION "${ZM_WEBDIR}/includes")
1212

web/includes/Monitor.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,15 @@ public static function getStateString($option) {
197197

198198
protected static $table = 'Monitors';
199199

200-
protected static $RTSP2WebStream = null;
201-
public static function getRTSP2WebStream() {
202-
if (!isset($RTSP2WebStream)) {
203-
$RTSP2WebStream = array(
200+
protected static $RTSP2WebStreamOptions = null;
201+
public static function getRTSP2WebStreamOptions() {
202+
if (!isset($RTSP2WebStreamOptions)) {
203+
$RTSP2WebStreamOptions = array(
204204
'Primary' => translate('Primary'),
205205
'Secondary' => translate('Secondary'),
206206
);
207207
}
208-
return $RTSP2WebStream;
208+
return $RTSP2WebStreamOptions;
209209
}
210210

211211
protected $defaults = array(

web/skins/classic/js/skin.js

+40
Original file line numberDiff line numberDiff line change
@@ -1253,8 +1253,28 @@ var doubleClickOnStream = function(event, touchEvent) {
12531253

12541254
if (target) {
12551255
if (document.fullscreenElement) {
1256+
if (getCookie('zmEventStats') && typeof eventStats !== "undefined") {
1257+
//Event page
1258+
eventStats.toggle(true);
1259+
wrapperEventVideo.removeClass('col-sm-12').addClass('col-sm-8');
1260+
changeScale();
1261+
} else if (getCookie('zmCycleShow') && typeof sidebarView !== "undefined") {
1262+
//Watch page
1263+
sidebarView.toggle(true);
1264+
monitorsSetScale(monitorId);
1265+
}
12561266
closeFullscreen();
12571267
} else {
1268+
if (getCookie('zmEventStats') && typeof eventStats !== "undefined") {
1269+
//Event page
1270+
eventStats.toggle(false);
1271+
wrapperEventVideo.removeClass('col-sm-8').addClass('col-sm-12');
1272+
changeScale();
1273+
} else if (getCookie('zmCycleShow') && typeof sidebarView !== "undefined") {
1274+
//Watch page
1275+
sidebarView.toggle(false);
1276+
monitorsSetScale(monitorId);
1277+
}
12581278
openFullscreen(target);
12591279
}
12601280
if (isMobile()) {
@@ -1357,3 +1377,23 @@ $j(document).on('keyup.global keydown.global', function(e) {
13571377
});
13581378

13591379
loadFontFaceObserver();
1380+
1381+
function canPlayCodec(filename) {
1382+
const re = /\.(\w+)\.(\w+)$/i;
1383+
const matches = re.exec(filename);
1384+
if (matches.length) {
1385+
const video = document.createElement('video');
1386+
if (matches[1] == 'av1') matches[1] = 'avc1';
1387+
const can = video.canPlayType('video/mp4; codecs="'+matches[1]+'"');
1388+
if (can == "probably") {
1389+
console.log("can play "+matches[1]);
1390+
return true;
1391+
} else if (can == "maybe") {
1392+
console.log("can maybe play "+matches[1]);
1393+
return true;
1394+
}
1395+
console.log("cannot play "+matches[1]);
1396+
return false;
1397+
}
1398+
return false;
1399+
}

web/skins/classic/js/skin.js.php

+1
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
if (isset($c['Type']) and $c['Type'] == 'integer' and $c['Value'] != '') {
154154
echo 'const '. $name . ' = '.$value.';'.PHP_EOL;
155155
} else {
156+
$value = html_entity_decode(validJsStr($value));
156157
echo 'const '. $name . ' = \''.$value.'\';'.PHP_EOL;
157158
}
158159
}

web/skins/classic/views/js/event.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -1346,6 +1346,7 @@ function initPage() {
13461346
getAvailableTags();
13471347
getSelectedTags();
13481348

1349+
13491350
// Load the event stats
13501351
getStat();
13511352
zmPanZoom.init();
@@ -1359,7 +1360,10 @@ function initPage() {
13591360
}
13601361

13611362
//FIXME prevent blocking...not sure what is happening or best way to unblock
1362-
if (document.getElementById('videoobj')) {
1363+
const video_element = document.getElementById('videoobj');
1364+
if (video_element) {
1365+
canPlayCodec(eventData.DefaultVideo);
1366+
13631367
vid = videojs('videoobj');
13641368
addVideoTimingTrack(vid, LabelFormat, eventData.MonitorName, eventData.Length, eventData.StartDateTime);
13651369
//$j('.vjs-progress-control').append('<div id="alarmCues" class="alarmCues"></div>');//add a place for videojs only on first load

web/skins/classic/views/js/event.js.php

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
MaxScore: '<?php echo $Event->MaxScore() ?>',
4242
DiskSpace: '<?php echo human_filesize($Event->DiskSpace(null)) ?>',
4343
Storage: '<?php echo validHtmlStr($Event->Storage()->Name()).( $Event->SecondaryStorageId() ? ', '.validHtmlStr($Event->SecondaryStorage()->Name()) : '' ) ?>',
44+
DefaultVideo: '<?php echo validHtmlStr($Event->DefaultVideo()) ?>',
4445
Archived: <?php echo $Event->Archived?'true':'false' ?>,
4546
Emailed: <?php echo $Event->Emailed?'true':'false' ?>,
4647
Path: '<?php echo $Event->Path() ?>',

web/skins/classic/views/js/montage.js

+1
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ function selectLayout(new_layout_id) {
203203
changeMonitorStatusPosition(); //!!! After loading the saved layer, you must execute.
204204
monitorsSetScale();
205205
*/
206+
on_scroll();
206207
setCookie('zmMontageLayout', layout_id);
207208
} // end function selectLayout(element)
208209

web/skins/classic/views/monitor.php

+4-2
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,7 @@ class="nav-link<?php echo $tab == $name ? ' active' : '' ?>"
866866
'av1' => 'av1',
867867
'av1_qsv' => 'av1_qsv',
868868
'av1_cuvid' => 'av1_cuvid',
869+
'av1_vaapi' => 'av1_vaapi'
869870
#'av1_ni_quadra_dec' => 'av1_ni_quadra',
870871
);
871872
echo htmlSelect('newMonitor[Decoder]', $decoders, $monitor->Decoder());
@@ -1189,7 +1190,8 @@ class="nav-link<?php echo $tab == $name ? ' active' : '' ?>"
11891190
'libsvtav1' => 'libsvtav1',
11901191
'libaom-av1' => 'libaom-av1',
11911192
'av1_qsv' => 'av1_qsv',
1192-
'av1_ni_quadra_enc' => 'av1_ni_quadra'
1193+
'av1_ni_quadra_enc' => 'av1_ni_quadra',
1194+
'av1_vaapi' => 'av1_vaapi'
11931195
);
11941196
echo htmlSelect('newMonitor[Encoder]', $videowriter_encoders, $monitor->Encoder());
11951197
?>
@@ -1271,7 +1273,7 @@ class="nav-link<?php echo $tab == $name ? ' active' : '' ?>"
12711273
</li>
12721274
<li id="RTSP2WebStream">
12731275
<label><?php echo translate('Stream source') ?> </label>
1274-
<?php echo htmlSelect('newMonitor[RTSP2WebStream]', ZM\Monitor::getRTSP2WebStream(), $monitor->RTSP2WebStream()); ?>
1276+
<?php echo htmlSelect('newMonitor[RTSP2WebStream]', ZM\Monitor::getRTSP2WebStreamOptions(), $monitor->RTSP2WebStream()); ?>
12751277
</li>
12761278
<li id="FunctionJanusEnabled">
12771279
<label><?php echo translate('Janus Live Stream') ?></label>

web/skins/classic/views/watch.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ function getStreamModeMonitor($monitor) {
309309
<span id="streamQualityControl">
310310
<label for="streamQuality"><?php echo translate('Stream quality') ?></label>
311311
<?php
312-
echo htmlSelect('streamChannel', ZM\Monitor::getRTSP2WebStream(), $monitor->RTSP2WebStream(), array('data-on-change'=>'monitorChangeStreamChannel','id'=>'streamChannel'));
312+
echo htmlSelect('streamChannel', ZM\Monitor::getRTSP2WebStreamOptions(), $monitor->RTSP2WebStream(), array('data-on-change'=>'monitorChangeStreamChannel','id'=>'streamChannel'));
313313
echo htmlSelect('streamQuality', $streamQuality, $streamQualitySelected, array('data-on-change'=>'changeStreamQuality','id'=>'streamQuality'));
314314
?>
315315
</span>

0 commit comments

Comments
 (0)