From 2ab79820a19e3342202d5c315eff92c795636153 Mon Sep 17 00:00:00 2001 From: josh4trunks Date: Sun, 22 May 2016 08:08:12 -0700 Subject: [PATCH 01/27] Add back changes --- src/zm_db.cpp | 28 ++++++++++++++++++++-------- src/zm_logger.cpp | 27 +++++++++++++++++++-------- web/includes/database.php | 14 +++++++++++++- 3 files changed, 52 insertions(+), 17 deletions(-) diff --git a/src/zm_db.cpp b/src/zm_db.cpp index 8f2527fc2..430f4553b 100644 --- a/src/zm_db.cpp +++ b/src/zm_db.cpp @@ -37,12 +37,10 @@ void zmDbConnect() my_bool reconnect = 1; if ( mysql_options( &dbconn, MYSQL_OPT_RECONNECT, &reconnect ) ) Fatal( "Can't set database auto reconnect option: %s", mysql_error( &dbconn ) ); - std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":/" ); - if ( colonIndex != std::string::npos ) + std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":" ); + if ( colonIndex == std::string::npos ) { - std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex ); - std::string dbPort = staticConfig.DB_HOST.substr( colonIndex+1 ); - if ( !mysql_real_connect( &dbconn, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, atoi(dbPort.c_str()), 0, 0 ) ) + if ( !mysql_real_connect( &dbconn, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, NULL, 0 ) ) { Error( "Can't connect to server: %s", mysql_error( &dbconn ) ); exit( mysql_errno( &dbconn ) ); @@ -50,10 +48,24 @@ void zmDbConnect() } else { - if ( !mysql_real_connect( &dbconn, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, 0, 0, 0 ) ) + std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex ); + std::string dbPortOrSocket = staticConfig.DB_HOST.substr( colonIndex+1 ); + if ( dbPortOrSocket[0] == '/' ) { - Error( "Can't connect to server: %s", mysql_error( &dbconn ) ); - exit( mysql_errno( &dbconn ) ); + if ( !mysql_real_connect( &dbconn, NULL, staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, dbPortOrSocket.c_str(), 0 ) ) + { + Error( "Can't connect to server: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } + + } + else + { + if ( !mysql_real_connect( &dbconn, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, atoi(dbPortOrSocket.c_str()), NULL, 0 ) ) + { + Error( "Can't connect to server: %s", mysql_error( &dbconn ) ); + exit( mysql_errno( &dbconn ) ); + } } } if ( mysql_select_db( &dbconn, staticConfig.DB_NAME.c_str() ) ) diff --git a/src/zm_logger.cpp b/src/zm_logger.cpp index 4d66deee2..9e28135ba 100644 --- a/src/zm_logger.cpp +++ b/src/zm_logger.cpp @@ -367,12 +367,10 @@ Logger::Level Logger::databaseLevel( Logger::Level databaseLevel ) my_bool reconnect = 1; if ( mysql_options( &mDbConnection, MYSQL_OPT_RECONNECT, &reconnect ) ) Fatal( "Can't set database auto reconnect option: %s", mysql_error( &mDbConnection ) ); - std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":/" ); - if ( colonIndex != std::string::npos ) + std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":" ); + if ( colonIndex == std::string::npos ) { - std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex ); - std::string dbPort = staticConfig.DB_HOST.substr( colonIndex+1 ); - if ( !mysql_real_connect( &mDbConnection, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, atoi(dbPort.c_str()), 0, 0 ) ) + if ( !mysql_real_connect( &mDbConnection, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, NULL, 0 ) ) { Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) ); exit( mysql_errno( &mDbConnection ) ); @@ -380,10 +378,23 @@ Logger::Level Logger::databaseLevel( Logger::Level databaseLevel ) } else { - if ( !mysql_real_connect( &mDbConnection, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), 0, 0, 0, 0 ) ) + std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex ); + std::string dbPortOrSocket = staticConfig.DB_HOST.substr( colonIndex+1 ); + if ( dbPortOrSocket[0] == '/' ) { - Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) ); - exit( mysql_errno( &mDbConnection ) ); + if ( !mysql_real_connect( &mDbConnection, NULL, staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, dbPortOrSocket.c_str(), 0 ) ) + { + Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) ); + exit( mysql_errno( &mDbConnection ) ); + } + } + else + { + if ( !mysql_real_connect( &mDbConnection, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, atoi(dbPortOrSocket.c_str()), NULL, 0 ) ) + { + Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) ); + exit( mysql_errno( &mDbConnection ) ); + } } } unsigned long mysqlVersion = mysql_get_server_version( &mDbConnection ); diff --git a/web/includes/database.php b/web/includes/database.php index 809145032..f9071026e 100644 --- a/web/includes/database.php +++ b/web/includes/database.php @@ -30,8 +30,20 @@ function dbConnect() { global $dbConn; + if (strpos(ZM_DB_HOST, ':')) { + // Host variable may carry a port or socket. + list($host, $portOrSocket) = explode(':', ZM_DB_HOST, 2); + if (is_numeric($portOrSocket)) { + $socket = ':host='.$host . ';port='.$portOrSocket; + } else { + $socket = ':unix_socket='.$portOrSocket; + } + } else { + $socket = ':host='.ZM_DB_HOST; + } + try { - $dbConn = new PDO( ZM_DB_TYPE . ':host=' . ZM_DB_HOST . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS ); + $dbConn = new PDO( ZM_DB_TYPE . $socket . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS ); $dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $ex ) { echo "Unable to connect to ZM db." . $ex->getMessage(); From 38e1cc909cb16ca38ce2b406481265643bfb45da Mon Sep 17 00:00:00 2001 From: josh4trunks Date: Sun, 22 May 2016 08:19:18 -0700 Subject: [PATCH 02/27] Reapply changes to Database.pm --- scripts/ZoneMinder/lib/ZoneMinder/Database.pm | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Database.pm b/scripts/ZoneMinder/lib/ZoneMinder/Database.pm index 7dfe0654b..fbbe0a027 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Database.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Database.pm @@ -79,25 +79,29 @@ sub zmDbConnect } if ( !defined( $dbh ) ) { - my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); + my $socket; + my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); - if ( defined($port) ) + if ( defined($portOrSocket) ) { - $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} - .";host=".$host - .";port=".$port - , $Config{ZM_DB_USER} - , $Config{ZM_DB_PASS} - ); + if ( $portOrSocket =~ /^\// ) + { + $socket = ";mysql_socket=".$portOrSocket; + } + else + { + $socket = ";host=".$host.";port=".$portOrSocket; + } } else { - $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} - .";host=".$Config{ZM_DB_HOST} - , $Config{ZM_DB_USER} - , $Config{ZM_DB_PASS} - ); + $socket = ";host=".$Config{ZM_DB_HOST}; } + $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .$socket + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ); $dbh->trace( 0 ); } return( $dbh ); From a3fe6ea1819113fe9696a43e4eb9f28cf943b38e Mon Sep 17 00:00:00 2001 From: josh4trunks Date: Sun, 22 May 2016 08:28:23 -0700 Subject: [PATCH 03/27] Apply changes to Logger.pm --- scripts/ZoneMinder/lib/ZoneMinder/Logger.pm | 30 ++++++++++++--------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm index a6a82db87..d17f9683a 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm @@ -460,25 +460,29 @@ sub databaseLevel { if ( !$this->{dbh} ) { - my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); + my $socket; + my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); - if ( defined($port) ) + if ( defined($portOrSocket) ) { - $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} - .";host=".$host - .";port=".$port - , $Config{ZM_DB_USER} - , $Config{ZM_DB_PASS} - ); + if ( $portOrSocket =~ /^\// ) + { + $socket = ";mysql_socket=".$portOrSocket; + } + else + { + $socket = ";host=".$host.";port=".$portOrSocket; + } } else { - $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} - .";host=".$Config{ZM_DB_HOST} - , $Config{ZM_DB_USER} - , $Config{ZM_DB_PASS} - ); + $socket = ";host=".$Config{ZM_DB_HOST}; } + $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .$socket + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ); if ( !$this->{dbh} ) { $databaseLevel = NOLOG; From 57a25373fab44ba0e9630bbbfc8fed054a5c06cc Mon Sep 17 00:00:00 2001 From: josh4trunks Date: Sun, 22 May 2016 08:53:30 -0700 Subject: [PATCH 04/27] Add logic to Config.pm --- .../ZoneMinder/lib/ZoneMinder/Config.pm.in | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in index 0cc8081d2..251d6c1ba 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in @@ -89,8 +89,26 @@ BEGIN close( $CONFIG ); use DBI; + my $socket; + my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); + + if ( defined($portOrSocket) ) + { + if ( $portOrSocket =~ /^\// ) + { + $socket = ";mysql_socket=".$portOrSocket; + } + else + { + $socket = ";host=".$host.";port=".$portOrSocket; + } + } + else + { + $socket = ";host=".$Config{ZM_DB_HOST}; + } my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} - .";host=".$Config{ZM_DB_HOST} + .$socket , $Config{ZM_DB_USER} , $Config{ZM_DB_PASS} ) or croak( "Can't connect to db" ); From f969186abb2ba4197004eaef91a50802b1734ea7 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 26 May 2016 11:15:13 -0400 Subject: [PATCH 05/27] add the ZM_WEB_ID_ON_CONSOLE option and use it to show the ID column on the console --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in | 10 ++++++++++ web/skins/classic/views/console.php | 11 ++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 610d2432d..16a618827 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -1564,6 +1564,16 @@ our @options = type => $types{boolean}, category => "web", }, + { + name => "ZM_WEB_ID_ON_CONSOLE", + default => "no", + description => "Should the console list the monitor id", + help => qqq("Some find it useful to have the id always visible + on the console. This option will add a column listing it. + "), + type => $types{boolean}, + category => "web", + }, { name => "ZM_WEB_POPUP_ON_ALARM", default => "yes", diff --git a/web/skins/classic/views/console.php b/web/skins/classic/views/console.php index dbf0ea2f4..1aa2c101d 100644 --- a/web/skins/classic/views/console.php +++ b/web/skins/classic/views/console.php @@ -182,6 +182,9 @@ $seqDownFile = getSkinFile( 'graphics/seq-d.gif' ); $versionClass = (ZM_DYN_DB_VERSION&&(ZM_DYN_DB_VERSION!=ZM_VERSION))?'errorText':''; +$left_columns = 3; +if ( count($servers) ) $left_columns += 1; +if ( ZM_WEB_ID_ON_CONSOLE ) ) $left_columns += 1; xhtmlHeaders( __FILE__, translate('Console') ); ?> @@ -241,6 +244,9 @@ else + + + @@ -269,7 +275,7 @@ if ( canEdit('Monitors') ) - + From f461bc1e80b6441058961792a1c2564120e5b5ae Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 26 May 2016 12:18:58 -0400 Subject: [PATCH 06/27] get rid of extra ) --- web/skins/classic/views/console.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/skins/classic/views/console.php b/web/skins/classic/views/console.php index 1aa2c101d..b1f437c56 100644 --- a/web/skins/classic/views/console.php +++ b/web/skins/classic/views/console.php @@ -184,7 +184,7 @@ $versionClass = (ZM_DYN_DB_VERSION&&(ZM_DYN_DB_VERSION!=ZM_VERSION))?'errorText' $left_columns = 3; if ( count($servers) ) $left_columns += 1; -if ( ZM_WEB_ID_ON_CONSOLE ) ) $left_columns += 1; +if ( ZM_WEB_ID_ON_CONSOLE ) $left_columns += 1; xhtmlHeaders( __FILE__, translate('Console') ); ?> From d2e83d197d7b47168b4a39849cb5f56e7f901c96 Mon Sep 17 00:00:00 2001 From: Toby Date: Thu, 2 Jun 2016 10:51:41 +1000 Subject: [PATCH 07/27] Improve Docker build; reduce image size & layer count Reducing layer count improves Docker performance, and is best-practice. Avoid packing & sending .git tree into Docker build system. Clean up apt archives to reduce image size. --- .dockerignore | 1 + Dockerfile | 23 +++++++---------------- utils/docker/start.sh | 0 3 files changed, 8 insertions(+), 16 deletions(-) create mode 100644 .dockerignore mode change 100644 => 100755 utils/docker/start.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..6b8710a71 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.git diff --git a/Dockerfile b/Dockerfile index 26df17d2b..558e0404f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,11 +3,9 @@ FROM ubuntu:trusty MAINTAINER Kyle Johnson -# Let the container know that there is no tty -ENV DEBIAN_FRONTEND noninteractive - # Resynchronize the package index files -RUN apt-get update && apt-get install -y \ +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ libpolkit-gobject-1-dev build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev \ libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 \ libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm cmake libjpeg-turbo8-dev \ @@ -16,7 +14,8 @@ RUN apt-get update && apt-get install -y \ mysql-server libvlc-dev libvlc5 libvlccore-dev libvlccore7 vlc-data libcurl4-openssl-dev \ libavformat-dev libswscale-dev libavutil-dev libavcodec-dev libavfilter-dev \ libavresample-dev libavdevice-dev libpostproc-dev libv4l-dev libtool libnetpbm10-dev \ - libmime-lite-perl dh-autoreconf dpatch + libmime-lite-perl dh-autoreconf dpatch \ + && apt-get clean # Copy local code into our container ADD . /ZoneMinder @@ -31,11 +30,8 @@ WORKDIR /ZoneMinder #RUN ./configure --with-libarch=lib/$DEB_HOST_GNU_TYPE --disable-debug --host=$DEB_HOST_GNU_TYPE --build=$DEB_BUILD_GNU_TYPE --with-mysql=/usr --with-webdir=/var/www/zm --with-ffmpeg=/usr --with-cgidir=/usr/lib/cgi-bin --with-webuser=www-data --with-webgroup=www-data --enable-mmap=yes --enable-onvif ZM_SSL_LIB=openssl ZM_DB_USER=zm ZM_DB_PASS=zm RUN cmake . -# Build ZoneMinder -RUN make - -# Install ZoneMinder -RUN make install +# Build & install ZoneMinder +RUN make && make install # ensure writable folders RUN ./zmlinkcontent.sh @@ -43,10 +39,6 @@ RUN ./zmlinkcontent.sh # Adding the start script ADD utils/docker/start.sh /tmp/start.sh -# Ensure we can run this -# TODO - Files ADD'ed have 755 already...why do we need this? -RUN chmod 755 /tmp/start.sh - # give files in /usr/local/share/zoneminder/ RUN chown -R www-data:www-data /usr/local/share/zoneminder/ @@ -65,7 +57,6 @@ RUN useradd -m -s /bin/bash -G sudo zoneminder RUN echo 'zoneminder:zoneminder' | chpasswd # Expose ssh and http ports -EXPOSE 80 -EXPOSE 22 +EXPOSE 22 80 CMD "/tmp/start.sh" diff --git a/utils/docker/start.sh b/utils/docker/start.sh old mode 100644 new mode 100755 From 6a097393baa03df28b35fd784eb9717e611a2f3d Mon Sep 17 00:00:00 2001 From: Toby Date: Thu, 2 Jun 2016 12:06:21 +1000 Subject: [PATCH 08/27] Run Docker db/apache setup once, not on every startup; kill mysql cleanly --- Dockerfile | 6 +++++- utils/docker/setup.sh | 40 ++++++++++++++++++++++++++++++++++++++++ utils/docker/start.sh | 27 ++++++++++++++------------- 3 files changed, 59 insertions(+), 14 deletions(-) create mode 100755 utils/docker/setup.sh diff --git a/Dockerfile b/Dockerfile index 558e0404f..837a6d4ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -59,4 +59,8 @@ RUN echo 'zoneminder:zoneminder' | chpasswd # Expose ssh and http ports EXPOSE 22 80 -CMD "/tmp/start.sh" +# Initial database and apache setup: +RUN "/ZoneMinder/utils/docker/setup.sh" + +CMD ["/ZoneMinder/utils/docker/start.sh"] + diff --git a/utils/docker/setup.sh b/utils/docker/setup.sh new file mode 100755 index 000000000..fbd3592f0 --- /dev/null +++ b/utils/docker/setup.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Start MySQL +/usr/bin/mysqld_safe & + +# Give MySQL time to wake up +SECONDS_LEFT=120 +while true; do + sleep 1 + mysqladmin ping + if [ $? -eq 0 ];then + break; # Success + fi + let SECONDS_LEFT=SECONDS_LEFT-1 + + # If we have waited >120 seconds, give up + # ZM should never have a database that large! + # if $COUNTER -lt 120 + if [ $SECONDS_LEFT -eq 0 ];then + return -1; + fi +done + +# Create the ZoneMinder database +mysql -u root < db/zm_create.sql + +# Add the ZoneMinder DB user +mysql -u root -e "grant insert,select,update,delete,lock tables,alter on zm.* to 'zmuser'@'localhost' identified by 'zmpass';" + +# Activate CGI +a2enmod cgi + +# Activate modrewrite +a2enmod rewrite + +# Shut down mysql cleanly: +kill $(cat /var/run/mysqld/mysqld.pid) +sleep 5 + +exit 0 diff --git a/utils/docker/start.sh b/utils/docker/start.sh index 0772f7b9b..c32f09783 100755 --- a/utils/docker/start.sh +++ b/utils/docker/start.sh @@ -9,6 +9,9 @@ mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm # Start MySQL /usr/bin/mysqld_safe & +# Ensure we shut down mysql cleanly later: +trap close_mysql SIGTERM + # Give MySQL time to wake up SECONDS_LEFT=120 while true; do @@ -27,18 +30,6 @@ while true; do fi done -# Create the ZoneMinder database -mysql -u root < db/zm_create.sql - -# Add the ZoneMinder DB user -mysql -u root -e "grant insert,select,update,delete,lock tables,alter on zm.* to 'zmuser'@'localhost' identified by 'zmpass';" - -# Activate CGI -a2enmod cgi - -# Activate modrewrite -a2enmod rewrite - # Restart apache service apache2 restart @@ -46,4 +37,14 @@ service apache2 restart /usr/local/bin/zmpkg.pl start # Start SSHD -/usr/sbin/sshd -D +/usr/sbin/sshd + +while : +do + sleep 3600 +done + +function close_mysql { + kill $(cat /var/run/mysqld/mysqld.pid) + sleep 5 +} From 1f53377d8ae3c8e45ce8de5c012b1398f107457d Mon Sep 17 00:00:00 2001 From: Steve Gilvarry Date: Tue, 5 Jul 2016 07:28:52 +1000 Subject: [PATCH 09/27] Implement suggested wait for MySQL start --- distros/ubuntu1204/zoneminder.init | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/distros/ubuntu1204/zoneminder.init b/distros/ubuntu1204/zoneminder.init index 5cdf62165..0474672b2 100644 --- a/distros/ubuntu1204/zoneminder.init +++ b/distros/ubuntu1204/zoneminder.init @@ -23,6 +23,13 @@ command="$ZM_PATH_BIN/zmpkg.pl" start() { echo -n "Starting $prog: " + # ATB - wait for mysqld to start. Continue if it takes too long. + count=0 + while [ ! -e /var/run/mysqld/mysqld.sock ] && [ $count -lt 60 ] + do + sleep 1 + count=$((count+1)) + done export TZ=:/etc/localtime mkdir -p "$RUNDIR" && chown www-data:www-data "$RUNDIR" mkdir -p "$TMPDIR" && chown www-data:www-data "$TMPDIR" From 1f060f193883fc4bd932b109d974cd86b0ed6faa Mon Sep 17 00:00:00 2001 From: Andrew Bauer Date: Tue, 5 Jul 2016 11:35:08 -0500 Subject: [PATCH 10/27] Update zoneminder.init Remove my initials --- distros/ubuntu1204/zoneminder.init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distros/ubuntu1204/zoneminder.init b/distros/ubuntu1204/zoneminder.init index 0474672b2..de552848b 100644 --- a/distros/ubuntu1204/zoneminder.init +++ b/distros/ubuntu1204/zoneminder.init @@ -23,7 +23,7 @@ command="$ZM_PATH_BIN/zmpkg.pl" start() { echo -n "Starting $prog: " - # ATB - wait for mysqld to start. Continue if it takes too long. + # Wait for mysqld to start. Continue if it takes too long. count=0 while [ ! -e /var/run/mysqld/mysqld.sock ] && [ $count -lt 60 ] do From 19265b631abe64306507982234769dbc14d41366 Mon Sep 17 00:00:00 2001 From: Andy Bauer Date: Sat, 9 Jul 2016 13:11:30 -0500 Subject: [PATCH 11/27] custom banner text on web console --- scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in | 14 ++++++++++++++ web/skins/classic/views/console.php | 1 + 2 files changed, 15 insertions(+) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 610d2432d..d23186c23 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -1548,6 +1548,20 @@ our @options = type => $types{string}, category => "web", }, + { + name => "ZM_WEB_CONSOLE_BANNER", + default => "", + description => "Arbitrary text message near the top of the console", + help => qqq(" + Allows the administrator to place an arbitrary text message + near the top of the web console. This is useful for the developers + to display a message which indicates the running instance of + ZoneMinder is a development snapshot, but it can also be used for + any other purpose as well. + "), + type => $types{string}, + category => "web", + }, { name => "ZM_WEB_RESIZE_CONSOLE", default => "yes", diff --git a/web/skins/classic/views/console.php b/web/skins/classic/views/console.php index 8f0f3c198..e6f3ccf6a 100644 --- a/web/skins/classic/views/console.php +++ b/web/skins/classic/views/console.php @@ -195,6 +195,7 @@ xhtmlHeaders( __FILE__, translate('Console') );

: / : %

ZoneMinder - - v'.ZM_VERSION.'', canEdit( 'System' ) ) ?>

+

Date: Mon, 11 Jul 2016 08:01:43 -0400 Subject: [PATCH 12/27] restore the behaviour where the generated file names are printed to stdout. --- scripts/zmvideo.pl.in | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/zmvideo.pl.in b/scripts/zmvideo.pl.in index 754213af6..a47685033 100644 --- a/scripts/zmvideo.pl.in +++ b/scripts/zmvideo.pl.in @@ -222,6 +222,7 @@ foreach my $event_id ( @event_ids ) { my $video_file = $Event->GenerateVideo( $rate, $fps, $scale, $size, $overwrite, $format ); if ( $video_file ) { push @video_files, $video_file; + print( STDOUT $video_file."\n" ); } } # end foreach event_id @@ -253,9 +254,6 @@ if ( $concat_name ) { Error( "Unable to generate video, check /ffmpeg.log for details"); exit(-1); } - + print( STDOUT $video_file."\n" ); } -#unlink $input_file_list; -#print( STDOUT $event->{MonitorId}.'/'.$event->{Id}.'/'.$video_file."\n" ); -#print( STDOUT $video_file."\n" ); exit( 0 ); From 85c03772801285e0a52fb2fb5a862133c79d0b20 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 12 Jul 2016 14:21:54 -0400 Subject: [PATCH 13/27] When generating video, zmvideo.pl now returns the file path to the video file so don't append eventPath to it --- scripts/zmfilter.pl.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/zmfilter.pl.in b/scripts/zmfilter.pl.in index a101edf3a..d8569e63b 100755 --- a/scripts/zmfilter.pl.in +++ b/scripts/zmfilter.pl.in @@ -414,7 +414,7 @@ sub generateVideo or Fatal( "Can't execute '$sql': ".$sth->errstr() ); if ( wantarray() ) { - return( $format, sprintf( "%s/%s", getEventPath( $event ), $output ) ); + return( $format, $output ); } } return( 1 ); From f1acc52913f0b70f3e2dd1a649d61fb23dbbf836 Mon Sep 17 00:00:00 2001 From: Dmitry Smirnov Date: Thu, 14 Jul 2016 00:30:39 +1000 Subject: [PATCH 14/27] spellcheck/codespell --- docs/faq.rst | 2 +- docs/installationguide/redhat.rst | 2 +- onvif/proxy/lib/ONVIF/Analytics/Elements/MetadataStream.pm | 6 +++--- .../Analytics/Interfaces/Analytics/AnalyticsEnginePort.pm | 2 +- .../ONVIF/Analytics/Interfaces/Analytics/RuleEnginePort.pm | 2 +- onvif/proxy/lib/ONVIF/Analytics/Types/ColorOptions.pm | 2 +- .../proxy/lib/ONVIF/Analytics/Types/ConfigurationEntity.pm | 2 +- onvif/proxy/lib/ONVIF/Analytics/Types/MetadataStream.pm | 6 +++--- onvif/proxy/lib/ONVIF/Analytics/Types/OSDColorOptions.pm | 2 +- .../lib/ONVIF/Analytics/Types/OSDConfigurationOptions.pm | 4 ++-- onvif/proxy/lib/ONVIF/Analytics/Types/OSDTextOptions.pm | 4 ++-- .../lib/ONVIF/Analytics/Types/PTZPresetTourPresetDetail.pm | 2 +- onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourSpot.pm | 2 +- .../proxy/lib/ONVIF/Analytics/Types/PTZPresetTourStatus.pm | 2 +- onvif/proxy/lib/ONVIF/Analytics/Types/PTZStream.pm | 2 +- onvif/proxy/lib/ONVIF/Analytics/Types/PresetTour.pm | 4 ++-- .../proxy/lib/ONVIF/Analytics/Types/VideoAnalyticsStream.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm | 6 +++--- .../proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm | 6 +++--- onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm | 6 +++--- onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm | 2 +- .../proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm | 4 ++-- onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm | 4 ++-- .../lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm | 2 +- onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm | 4 ++-- onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm | 2 +- .../proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm | 4 ++-- onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm | 6 +++--- onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm | 6 +++--- onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm | 2 +- .../proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm | 4 ++-- onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm | 4 ++-- .../lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm | 2 +- onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm | 4 ++-- onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm | 4 ++-- .../proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm | 4 ++-- onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm | 6 +++--- onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm | 4 ++-- onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm | 6 +++--- onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm | 6 +++--- onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm | 4 ++-- onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm | 4 ++-- .../proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm | 2 +- onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm | 4 ++-- onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm | 2 +- .../WSDiscovery10/Interfaces/WSDiscovery/WSDiscoveryPort.pm | 2 +- .../WSBaseNotificationSender/NotificationProducerPort.pm | 2 +- .../WSBaseNotificationSender/SubscriptionManagerPort.pm | 2 +- src/zm_image.cpp | 2 +- 67 files changed, 103 insertions(+), 103 deletions(-) diff --git a/docs/faq.rst b/docs/faq.rst index 1c5c36d09..29f026be2 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -698,7 +698,7 @@ Now go to http://zoneminder_IP/ and stop the ZM service. Continue to http://zon I upgraded by distribution and ZM stopped working ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Some possibilties (Incomplete list and subject to correction) +Some possibilities (Incomplete list and subject to correction) ``[[/usr/local/bin/zmfix: /usr/lib/libmysqlclient.so.15: version `MYSQL_5.0' not found (required by /usr/local/bin/zmfix)]]`` :: Solution: Recompile and reinstall Zoneminder. Any time you update a major version that ZoneMinder depends on, you need to recompile ZoneMinder. diff --git a/docs/installationguide/redhat.rst b/docs/installationguide/redhat.rst index e15d58aa7..e6b506ac5 100644 --- a/docs/installationguide/redhat.rst +++ b/docs/installationguide/redhat.rst @@ -32,7 +32,7 @@ Zmrepo supports the two most recent, major releases of each Redhat based distro. The following notes are based on real problems which have occurred: -- Zmrepo assumes you have installed the underlying distrubution **using the official installation media for that distro**. Third party "Spins" are not supported and may not work correctly. +- Zmrepo assumes you have installed the underlying distribution **using the official installation media for that distro**. Third party "Spins" are not supported and may not work correctly. - ZoneMinder is intended to be installed in an environment dedicated to ZoneMinder. While ZoneMinder will play well with many applications, some invariably will not. Asterisk is one such example. diff --git a/onvif/proxy/lib/ONVIF/Analytics/Elements/MetadataStream.pm b/onvif/proxy/lib/ONVIF/Analytics/Elements/MetadataStream.pm index eb0831001..43d49bfa0 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Elements/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Elements/MetadataStream.pm @@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::Analytics::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Analytics::Types::Frame PTZStatus => { # ONVIF::Analytics::Types::PTZStatus Position => { # ONVIF::Analytics::Types::PTZVector @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::Analytics::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Analytics::Types::PTZStatus Position => { # ONVIF::Analytics::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/AnalyticsEnginePort.pm b/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/AnalyticsEnginePort.pm index 481d254ce..8baac1067 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/AnalyticsEnginePort.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/AnalyticsEnginePort.pm @@ -235,7 +235,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. diff --git a/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/RuleEnginePort.pm b/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/RuleEnginePort.pm index 835e119ff..79a1b8b85 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/RuleEnginePort.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Interfaces/Analytics/RuleEnginePort.pm @@ -208,7 +208,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/ColorOptions.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/ColorOptions.pm index eaf6fea9f..d586d80ed 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/ColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/ColorOptions.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange X => { # ONVIF::Analytics::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/ConfigurationEntity.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/ConfigurationEntity.pm index 8e544d6a6..5bcc84214 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/ConfigurationEntity.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/ConfigurationEntity.pm @@ -139,7 +139,7 @@ get_/set_ methods: =item * token - Token that uniquely refernces this configuration. Length up to 64 characters. + Token that uniquely references this configuration. Length up to 64 characters. diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/MetadataStream.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/MetadataStream.pm index d8000cf7b..edfc77e61 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/MetadataStream.pm @@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::Analytics::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Analytics::Types::Frame PTZStatus => { # ONVIF::Analytics::Types::PTZStatus Position => { # ONVIF::Analytics::Types::PTZVector @@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::Analytics::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Analytics::Types::PTZStatus Position => { # ONVIF::Analytics::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/OSDColorOptions.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/OSDColorOptions.pm index f39a8d84c..409bcde78 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/OSDColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/OSDColorOptions.pm @@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::OSDColorOptions Color => { # ONVIF::Analytics::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange X => { # ONVIF::Analytics::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/OSDConfigurationOptions.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/OSDConfigurationOptions.pm index 105d52097..b75c1ce12 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/OSDConfigurationOptions.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/OSDConfigurationOptions.pm @@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Analytics::Types::OSDColorOptions Color => { # ONVIF::Analytics::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange X => { # ONVIF::Analytics::Types::FloatRange @@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Analytics::Types::OSDColorOptions Color => { # ONVIF::Analytics::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange X => { # ONVIF::Analytics::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/OSDTextOptions.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/OSDTextOptions.pm index 533602ffe..d2d129bf5 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/OSDTextOptions.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/OSDTextOptions.pm @@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Analytics::Types::OSDColorOptions Color => { # ONVIF::Analytics::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange X => { # ONVIF::Analytics::Types::FloatRange @@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Analytics::Types::OSDColorOptions Color => { # ONVIF::Analytics::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Analytics::Types::ColorspaceRange X => { # ONVIF::Analytics::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourPresetDetail.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourPresetDetail.pm index f8e0c4128..a513a522c 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourPresetDetail.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourPresetDetail.pm @@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Analytics::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourSpot.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourSpot.pm index d7cdb6d61..558a9ee7f 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourSpot.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourSpot.pm @@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Analytics::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourStatus.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourStatus.pm index 2058e86f7..246191893 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourStatus.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZPresetTourStatus.pm @@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::Analytics::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Analytics::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZStream.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZStream.pm index a717d6a1c..218ae3b8d 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/PTZStream.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/PTZStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Analytics::Types::PTZStatus Position => { # ONVIF::Analytics::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/PresetTour.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/PresetTour.pm index e084452c2..868f814db 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/PresetTour.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/PresetTour.pm @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::Analytics::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Analytics::Types::PTZVector @@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::Analytics::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Analytics::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Analytics::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Analytics/Types/VideoAnalyticsStream.pm b/onvif/proxy/lib/ONVIF/Analytics/Types/VideoAnalyticsStream.pm index d5cadba4f..4a3904992 100644 --- a/onvif/proxy/lib/ONVIF/Analytics/Types/VideoAnalyticsStream.pm +++ b/onvif/proxy/lib/ONVIF/Analytics/Types/VideoAnalyticsStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Analytics::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Analytics::Types::Frame PTZStatus => { # ONVIF::Analytics::Types::PTZStatus Position => { # ONVIF::Analytics::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm b/onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm index e3266ba63..86a5d42f8 100644 --- a/onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm @@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::Device::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Device::Types::Frame PTZStatus => { # ONVIF::Device::Types::PTZStatus Position => { # ONVIF::Device::Types::PTZVector @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::Device::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Device::Types::PTZStatus Position => { # ONVIF::Device::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm b/onvif/proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm index 4e158d590..35f259f31 100644 --- a/onvif/proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm +++ b/onvif/proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm @@ -2205,7 +2205,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. @@ -2358,7 +2358,7 @@ Returns a L object. @@ -2602,7 +2602,7 @@ Returns a L object. diff --git a/onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm b/onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm index 6e99583d0..6c12db1e8 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange X => { # ONVIF::Device::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm b/onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm index 240e5800c..b79d6791a 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm @@ -139,7 +139,7 @@ get_/set_ methods: =item * token - Token that uniquely refernces this configuration. Length up to 64 characters. + Token that uniquely references this configuration. Length up to 64 characters. diff --git a/onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm b/onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm index a52bd1097..e5140786c 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm @@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::Device::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Device::Types::Frame PTZStatus => { # ONVIF::Device::Types::PTZStatus Position => { # ONVIF::Device::Types::PTZVector @@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::Device::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Device::Types::PTZStatus Position => { # ONVIF::Device::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm b/onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm index 453eee12b..6b71ec3c8 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm @@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::OSDColorOptions Color => { # ONVIF::Device::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange X => { # ONVIF::Device::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm b/onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm index ebad78c4d..d40c0f4ab 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm @@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Device::Types::OSDColorOptions Color => { # ONVIF::Device::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange X => { # ONVIF::Device::Types::FloatRange @@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Device::Types::OSDColorOptions Color => { # ONVIF::Device::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange X => { # ONVIF::Device::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm b/onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm index 2247a07c3..69b276cd5 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm @@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Device::Types::OSDColorOptions Color => { # ONVIF::Device::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange X => { # ONVIF::Device::Types::FloatRange @@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Device::Types::OSDColorOptions Color => { # ONVIF::Device::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Device::Types::ColorspaceRange X => { # ONVIF::Device::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm b/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm index bcbd21e7a..5e48bc31d 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm @@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Device::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm b/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm index 9c97d1759..2b3aaacaa 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm @@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Device::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm b/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm index 778a94475..9ac897ad4 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm @@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::Device::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Device::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm b/onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm index cf05d13b2..7e2d61529 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Device::Types::PTZStatus Position => { # ONVIF::Device::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm b/onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm index 68d6b55a5..ca997cabb 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::Device::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Device::Types::PTZVector @@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::Device::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Device::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Device::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm b/onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm index dc5ccb55a..e19d3822b 100644 --- a/onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm +++ b/onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Device::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Device::Types::Frame PTZStatus => { # ONVIF::Device::Types::PTZStatus Position => { # ONVIF::Device::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm b/onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm index 0a2be2bfa..fa3b7ca9d 100644 --- a/onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm +++ b/onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm @@ -125,7 +125,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange @@ -153,7 +153,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm b/onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm index d44f6fe89..26a53e88a 100644 --- a/onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm @@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::Media::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Media::Types::Frame PTZStatus => { # ONVIF::Media::Types::PTZStatus Position => { # ONVIF::Media::Types::PTZVector @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::Media::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Media::Types::PTZStatus Position => { # ONVIF::Media::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm b/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm index e7351e5f1..ecb985b30 100644 --- a/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm +++ b/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm @@ -2127,7 +2127,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. diff --git a/onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm b/onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm index 138cffec9..da35e97e4 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm b/onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm index 937f568c5..594a0913b 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm @@ -139,7 +139,7 @@ get_/set_ methods: =item * token - Token that uniquely refernces this configuration. Length up to 64 characters. + Token that uniquely references this configuration. Length up to 64 characters. diff --git a/onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm b/onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm index 8cea2dd99..983f5f72e 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm @@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::Media::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Media::Types::Frame PTZStatus => { # ONVIF::Media::Types::PTZStatus Position => { # ONVIF::Media::Types::PTZVector @@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::Media::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Media::Types::PTZStatus Position => { # ONVIF::Media::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm b/onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm index d356f24cc..7f459a809 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm @@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm b/onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm index 53a2b24a9..30056dcda 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm @@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange @@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm b/onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm index a66451874..829999055 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm @@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange @@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::Media::Types::OSDColorOptions Color => { # ONVIF::Media::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::Media::Types::ColorspaceRange X => { # ONVIF::Media::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm b/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm index 91763bb36..db9fa8d66 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm @@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Media::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm b/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm index ce2176c8a..63e7da894 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm @@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Media::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm b/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm index f25a5ec1a..8b36c2f84 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm @@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::Media::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Media::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm b/onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm index bbbc55652..2386d28cb 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::Media::Types::PTZStatus Position => { # ONVIF::Media::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm b/onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm index 6cb9d4a7f..ed66ee1fa 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::Media::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Media::Types::PTZVector @@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::Media::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::Media::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::Media::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm b/onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm index c037814ad..20a488c86 100644 --- a/onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm +++ b/onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::Media::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::Media::Types::Frame PTZStatus => { # ONVIF::Media::Types::PTZStatus Position => { # ONVIF::Media::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm b/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm index 65395f766..7b5bc8dc8 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm @@ -117,7 +117,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector @@ -149,7 +149,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm b/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm index 5c16a06cb..d8f8ce639 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm @@ -117,7 +117,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector @@ -149,7 +149,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm b/onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm index f355909a6..c09224497 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm @@ -49,10 +49,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::PTZ::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::PTZ::Types::Frame PTZStatus => { # ONVIF::PTZ::Types::PTZStatus Position => { # ONVIF::PTZ::Types::PTZVector @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::PTZ::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::PTZ::Types::PTZStatus Position => { # ONVIF::PTZ::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm b/onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm index 666c61a12..19eb96195 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm @@ -131,7 +131,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector @@ -163,7 +163,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm b/onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm index 71915f701..8d42d439e 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm @@ -775,7 +775,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. @@ -1136,7 +1136,7 @@ Returns a L { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector @@ -1168,7 +1168,7 @@ Returns a L { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm index a1c6097c4..5a3354adb 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange X => { # ONVIF::PTZ::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm index c23095ead..d619e80a3 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm @@ -139,7 +139,7 @@ get_/set_ methods: =item * token - Token that uniquely refernces this configuration. Length up to 64 characters. + Token that uniquely references this configuration. Length up to 64 characters. diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm index cdc6fa421..50f88d36b 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm @@ -114,10 +114,10 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::MetadataStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... VideoAnalytics => { # ONVIF::PTZ::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::PTZ::Types::Frame PTZStatus => { # ONVIF::PTZ::Types::PTZStatus Position => { # ONVIF::PTZ::Types::PTZVector @@ -220,7 +220,7 @@ Constructor. The following data structure may be passed to new(): }, PTZ => { # ONVIF::PTZ::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::PTZ::Types::PTZStatus Position => { # ONVIF::PTZ::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm index d73700380..eedf14f1a 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm @@ -107,7 +107,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::OSDColorOptions Color => { # ONVIF::PTZ::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange X => { # ONVIF::PTZ::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm index 80d57ab5c..a0627a1bd 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm @@ -143,7 +143,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::PTZ::Types::OSDColorOptions Color => { # ONVIF::PTZ::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange X => { # ONVIF::PTZ::Types::FloatRange @@ -171,7 +171,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::PTZ::Types::OSDColorOptions Color => { # ONVIF::PTZ::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange X => { # ONVIF::PTZ::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm index 82660279c..3f8a7c66f 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm @@ -147,7 +147,7 @@ Constructor. The following data structure may be passed to new(): FontColor => { # ONVIF::PTZ::Types::OSDColorOptions Color => { # ONVIF::PTZ::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange X => { # ONVIF::PTZ::Types::FloatRange @@ -175,7 +175,7 @@ Constructor. The following data structure may be passed to new(): BackgroundColor => { # ONVIF::PTZ::Types::OSDColorOptions Color => { # ONVIF::PTZ::Types::ColorOptions # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... ColorList => , ColorspaceRange => { # ONVIF::PTZ::Types::ColorspaceRange X => { # ONVIF::PTZ::Types::FloatRange diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm index a29609cbc..052575b16 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm @@ -114,7 +114,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm index 5e5c8d01e..c88c3f660 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm @@ -115,7 +115,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm index 99e347247..d4292efa9 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm @@ -109,7 +109,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm index 0296e95b3..eca3b5557 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::PTZStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PTZStatus => { # ONVIF::PTZ::Types::PTZStatus Position => { # ONVIF::PTZ::Types::PTZVector PanTilt => , diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm index 8b61618b2..a7db2aaed 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm @@ -155,7 +155,7 @@ Constructor. The following data structure may be passed to new(): CurrentTourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector @@ -187,7 +187,7 @@ Constructor. The following data structure may be passed to new(): TourSpot => { # ONVIF::PTZ::Types::PTZPresetTourSpot PresetDetail => { # ONVIF::PTZ::Types::PTZPresetTourPresetDetail # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... PresetToken => $some_value, # ReferenceToken Home => $some_value, # boolean PTZPosition => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm b/onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm index d17e60a45..ff66bcf6e 100644 --- a/onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm +++ b/onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm @@ -98,7 +98,7 @@ Constructor. The following data structure may be passed to new(): { # ONVIF::PTZ::Types::VideoAnalyticsStream # One of the following elements. - # No occurance checks yet, so be sure to pass just one... + # No occurrence checks yet, so be sure to pass just one... Frame => { # ONVIF::PTZ::Types::Frame PTZStatus => { # ONVIF::PTZ::Types::PTZStatus Position => { # ONVIF::PTZ::Types::PTZVector diff --git a/onvif/proxy/lib/WSDiscovery10/Interfaces/WSDiscovery/WSDiscoveryPort.pm b/onvif/proxy/lib/WSDiscovery10/Interfaces/WSDiscovery/WSDiscoveryPort.pm index f1b6446a5..b8b6a735e 100644 --- a/onvif/proxy/lib/WSDiscovery10/Interfaces/WSDiscovery/WSDiscoveryPort.pm +++ b/onvif/proxy/lib/WSDiscovery10/Interfaces/WSDiscovery/WSDiscoveryPort.pm @@ -104,7 +104,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. diff --git a/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/NotificationProducerPort.pm b/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/NotificationProducerPort.pm index c86b26f9f..ee55035ca 100644 --- a/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/NotificationProducerPort.pm +++ b/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/NotificationProducerPort.pm @@ -127,7 +127,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. diff --git a/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/SubscriptionManagerPort.pm b/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/SubscriptionManagerPort.pm index a10978083..807c2ace2 100644 --- a/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/SubscriptionManagerPort.pm +++ b/onvif/proxy/lib/WSNotification/Interfaces/WSBaseNotificationSender/SubscriptionManagerPort.pm @@ -127,7 +127,7 @@ of the corresponding class can be passed instead of the marked hash ref. You may pass any combination of objects, hash and list refs to these methods, as long as you meet the structure. -List items (i.e. multiple occurences) are not displayed in the synopsis. +List items (i.e. multiple occurrences) are not displayed in the synopsis. You may generally pass a list ref of hash refs (or objects) instead of a hash ref - this may result in invalid XML if used improperly, though. Note that SOAP::WSDL always expects list references at maximum depth position. diff --git a/src/zm_image.cpp b/src/zm_image.cpp index a1f629979..8e5abe8cf 100644 --- a/src/zm_image.cpp +++ b/src/zm_image.cpp @@ -324,7 +324,7 @@ uint8_t* Image::WriteBuffer(const unsigned int p_width, const unsigned int p_hei } if(!p_height || !p_width) { - Error("WriteBuffer called with invaid width or height: %d %d",p_width,p_height); + Error("WriteBuffer called with invalid width or height: %d %d",p_width,p_height); return NULL; } From aed3c3d29a79f6bc428fbd6c9e6e7007ca48deac Mon Sep 17 00:00:00 2001 From: Dmitry Smirnov Date: Thu, 14 Jul 2016 00:42:07 +1000 Subject: [PATCH 15/27] reduce noise on "zmupdate.pl" invocation --- scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in index 1f21b7407..d3b41afdf 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in @@ -136,7 +136,7 @@ sub loadConfigFromDB { #print( "Name = '$name'\n" ); my $option = $options_hash{$name}; if ( !$option ) { - warn( "No option '$name' found, removing" ); + warn( "No option '$name' found, removing.\n" ); next; } #next if ( $option->{category} eq 'hidden' ); From 45a62dc8d89933c856f16a76ea8496eabd40b7bf Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 23 Jul 2016 08:03:15 -0400 Subject: [PATCH 16/27] Added example of configs API edit --- docs/api.rst | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/api.rst b/docs/api.rst index 9546a279a..dc60c9203 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -272,7 +272,17 @@ This returns the full list of configuration parameters: Each configuration parameter has an Id, Name, Value and other fields. Chances are you are likely only going to focus on these 3. -(Example of changing config TBD) +The edit function of the Configs API is a little quirky at the Moment. Its format deviates from the usual edit flow of other APIs. This will be fixed, eventually. For now, to change the "Value" of ZM_X10_HOUSE_CODE from A to B: + +:: + + curl -XPUT http://server/zm/api/configs/edit/ZM_X10_HOUSE_CODE.json -d "Config[Value]=B" + +To validate changes have been made: + +:: + + curl -XGET http://server/zm/api/configs/view/ZM_X10_HOUSE_CODE.json Run State Apis ^^^^^^^^^^^^^^^ From dc916bba2ca87c3ee36c0c3c72c5d3e7134d5797 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 23 Jul 2016 08:04:46 -0400 Subject: [PATCH 17/27] case typo --- docs/api.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api.rst b/docs/api.rst index dc60c9203..6d5396372 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -272,7 +272,7 @@ This returns the full list of configuration parameters: Each configuration parameter has an Id, Name, Value and other fields. Chances are you are likely only going to focus on these 3. -The edit function of the Configs API is a little quirky at the Moment. Its format deviates from the usual edit flow of other APIs. This will be fixed, eventually. For now, to change the "Value" of ZM_X10_HOUSE_CODE from A to B: +The edit function of the Configs API is a little quirky at the moment. Its format deviates from the usual edit flow of other APIs. This will be fixed, eventually. For now, to change the "Value" of ZM_X10_HOUSE_CODE from A to B: :: From 0234e8239625179e415b246cd57fc0773d456c76 Mon Sep 17 00:00:00 2001 From: Steve Gilvarry Date: Sun, 24 Jul 2016 09:26:10 +1000 Subject: [PATCH 18/27] Enable local and travis ccache --- .travis.yml | 1 + CMakeLists.txt | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index 183d22e57..bb6536526 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ notifications: branches: except: - modern +cache: ccache addons: sauce_connect: username: "zoneminder" diff --git a/CMakeLists.txt b/CMakeLists.txt index 1fb59b720..8ff812106 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -742,3 +742,9 @@ configure_file( add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) +# Configure CCache if available +find_program(CCACHE_FOUND ccache) +if(CCACHE_FOUND) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) +endif(CCACHE_FOUND) From ee720c4561cadb9ad1265fd510694636f2e76ebd Mon Sep 17 00:00:00 2001 From: Jon Gerdes Date: Mon, 25 Jul 2016 11:20:49 +0100 Subject: [PATCH 19/27] Control script for Keekoon cameras. Tested with KK002. --- db/zm_create.sql.in | 1 + .../lib/ZoneMinder/Control/Keekoon.pm | 297 ++++++++++++++++++ 2 files changed, 298 insertions(+) create mode 100644 scripts/ZoneMinder/lib/ZoneMinder/Control/Keekoon.pm diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index 029f20989..0d6c853c9 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -594,6 +594,7 @@ INSERT INTO `Controls` VALUES (NULL,'Wanscam HW0025','Libvlc','WanscamHW0025', 1 INSERT INTO `Controls` VALUES (NULL,'IPCC 7210W','Libvlc','IPCC7210W', 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 350, 0, 0, 1, 0, 10, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0, 0); INSERT INTO `Controls` VALUES (NULL,'Vivotek ePTZ','Remote','Vivotek_ePTZ',0,0,1,1,0,0,0,1,0,0,0,0,1,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,1,0,5,0,0,1,0,0,0,0,1,0,5,0,0,0,0); INSERT INTO `Controls` VALUES (NULL,'Netcat ONVIF','Ffmpeg','Netcat',0,0,1,1,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,100,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,100,5,5,0,0,0,1,255,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `Controls` VALUES (NULL,'Keekoon','Remote','Keekoon', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -- -- Add some monitor preset values diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/Keekoon.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/Keekoon.pm new file mode 100644 index 000000000..09edb7d47 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/Keekoon.pm @@ -0,0 +1,297 @@ +# ========================================================================== +# +# ZoneMinder Keekoon Control Protocol Module +# This code was mostly derived from other ZM Control modules +# +# ========================================================================== +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# ========================================================================== +# +# Tested: KK002 (22 July 2016) +# +# Usage: +# ====== +# +# Copy this file to say /usr/share/perl5/ZoneMinder/Control (Debian/Ubuntu) +# +# Create a new Control Capabilities: +# Main: Name Keekoon, Type = Remote, Protocol = Keekoon +# Move: Can Move, Can Move Diagonally, Can Move Continous +# Pan: Can Pan +# Tilt: Can Tilt +# Presets: Has Presets, Num Presets = 6, Can Set Presets +# +# Set the ControlAddress in the camera definition, use the format: +# http(s)://username:password@address:port +# +# eg : http://admin:adminpass@10.10.10.1:80 +# or : https://admin:password@mycamera.example.co.uk:80 +# +# Return Location to Preset 1 +# Auto Stop Timeout = 0.5 is a good starting point +# +# =========================================================================== +# Problems: Enable debug and watch /tmp/zm_debug.log. The +# correct debug log can be found by date stamp. +# Enable/disable the Source for the camera in the web GUI +# each time you edit this script. If the pid doesn't +# change then you have not restarted it. +# Errors like this: +# [Error in response to Request:'400 URL must be absolute'] +# means that you have not specified all the parts in ControlAddress or the +# Regex has failed to parse it correctly +# +# ========================================================================= +# Notes: +# Example command from docs, at http://www.keekoonvision.com/for-developers-a: +# Up: http://camera_ip:web_port/decoder_control.cgi?command=0&user=username&pwd=password +# However the camera actually uses basic auth and not user= etc +# +# Test URLs with something like this +# curl -XGET -u user:pass "http://cam.example.co.uk:80/decoder_control.cgi?command=1 +# +# These cameras have a default admin user but can have six more defined +# with membership of three groups +# https is not directly supported but could be via say HA Proxy, so that +# is included rather than hardstrapping http:// +# ========================================================================== + +package ZoneMinder::Control::Keekoon; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Config qw(:all); +use Time::HiRes qw( usleep ); + +sub new +{ + + my $class = shift; + my $id = shift; + my $self = ZoneMinder::Control->new( $id ); + my $logindetails = ""; + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref( ) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + Fatal( "Can't access $name member of object of class $class" ); +} + +sub open +{ + my $self = shift; + + $self->loadMonitor(); + + use LWP::UserAgent; + + $self->{ua} = LWP::UserAgent->new; + $self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION ); + + $self->{state} = 'open'; + + Info( "Open" ); + +} + +sub close +{ + my $self = shift; + $self->{state} = 'closed'; +} + +sub printMsg +{ + my $self = shift; + my $msg = shift; + my $msg_len = length($msg); + + Debug( $msg."[".$msg_len."]" ); +} + +sub sendCmd +{ + my $self = shift; + my $cmd = shift; + my $result = undef; + + my ( $PROTOCOL, $USER, $PASS, $ADDR, $PORT ) + = $self->{Monitor}->{ControlAddress} =~ /^(https?):\/\/(.*):(.*)@(.*):(\d+)$/; + my $URL = $PROTOCOL."://".$ADDR.":".$PORT."/decoder_control.cgi?command=".$cmd; + + Debug( "ControlAddress from camera Control setting:".$self->{Monitor}->{ControlAddress} ); + Debug( "URL parsed from ControlAddress:".$URL); + + my $req = HTTP::Request->new( GET=>$URL ); + + # Do Basic Auth + $req->authorization_basic($USER, $PASS); + + my $res = $self->{ua}->request($req); + + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error in response to Request:'".$res->status_line()."'" ); + } + + return( $result ); +} + +# Set autoStop timeout on the Control tab for the camera +sub autoStop +{ + my $self = shift; + my $stop_command = shift; + my $autostop = shift; + + if( $stop_command && $autostop) + { + Debug( "Auto Stop" ); + usleep( $autostop ); + my $cmd = $stop_command; + $self->sendCmd( $cmd ); + } +} + +sub moveConUp +{ + my $self = shift; + my $cmd = "0"; + my $stop_command = "1"; + Debug( "Move Up" ); + $self->sendCmd( $cmd ); + $self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConDown +{ + my $self = shift; + my $cmd = "2"; + my $stop_command = "3"; + Debug( "Move Down" ); + $self->sendCmd( $cmd ); + $self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConLeft +{ + my $self = shift; + my $cmd = "4"; + my $stop_command = "5"; + Debug( "Move Left" ); + $self->sendCmd( $cmd ); + $self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConRight +{ + my $self = shift; + my $cmd = "6"; + my $stop_command = "7"; + Debug( "Move Right" ); + $self->sendCmd( $cmd ); + $self->autoStop( $stop_command, $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConUpRight +{ + my $self = shift; + Debug( "Move Diagonally Up Right" ); + $self->moveConUp( ); + $self->moveConRight( ); +} + +sub moveConDownRight +{ + my $self = shift; + Debug( "Move Diagonally Down Right" ); + $self->moveConDown( ); + $self->moveConRight( ); +} + +sub moveConUpLeft +{ + my $self = shift; + Debug( "Move Diagonally Up Left" ); + $self->moveConUp( ); + $self->moveConLeft( ); +} + +sub moveConDownLeft +{ + my $self = shift; + Debug( "Move Diagonally Down Left" ); + $self->moveConDown( ); + $self->moveConLeft( ); +} + +# SET: 30,32,34,36,38,40 for presets 1-6 +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + + Debug( "Set Preset No: " . $preset ); + + if (( $preset >= 1 ) && ( $preset <= 6 )) { + my $cmd = (($preset*2) + 28); + $self->sendCmd( $cmd ); + Debug( "Set preset cmd: " . $cmd ); + } + +} + +# GOTO: 31,33,35,37,39,41 for presets 1-6 +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + Debug( "Goto Preset No: " . $preset ); + + if (( $preset >= 1 ) && ( $preset <= 6 )) { + my $cmd = (($preset*2) + 29); + $self->sendCmd( $cmd ); + Debug( "Goto Preset cmd: " . $cmd ); + } + +} + +1; From 71e3789bd0af68465474fa6f5a8e4321d6662ace Mon Sep 17 00:00:00 2001 From: Steve Gilvarry Date: Thu, 28 Jul 2016 23:15:01 +1000 Subject: [PATCH 20/27] Use av_dict_parse_string to split ffmpeg options, and remove creating strings to split them in next step for rtsp_transport --- src/zm_ffmpeg_camera.cpp | 51 +++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 12456a560..3b1adaa02 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -226,9 +226,12 @@ int FfmpegCamera::OpenFfmpeg() { Debug ( 2, "OpenFfmpeg called." ); + int ret; + mOpenStart = time(NULL); mIsOpening = true; + // Open the input, not necessarily a file #if !LIBAVFORMAT_VERSION_CHECK(53, 2, 0, 4, 0) Debug ( 1, "Calling av_open_input_file" ); @@ -236,37 +239,25 @@ int FfmpegCamera::OpenFfmpeg() { #else // Handle options AVDictionary *opts = 0; - StringVector opVect = split(Options(), ","); - + ret = av_dict_parse_string(&opts, Options().c_str(), "=", ",", 0); + if (ret < 0) { + Warning("Could not parse format options list '%s'\n", Options().c_str()); + } + + // Set transport method as specified by method field, rtpUni is default - if ( Method() == "rtpMulti" ) - opVect.push_back("rtsp_transport=udp_multicast"); - else if ( Method() == "rtpRtsp" ) - opVect.push_back("rtsp_transport=tcp"); - else if ( Method() == "rtpRtspHttp" ) - opVect.push_back("rtsp_transport=http"); - - Debug(2, "Number of Options: %d",opVect.size()); - for (size_t i=0; i 1) { - parts[0] = trimSpaces(parts[0]); - parts[1] = trimSpaces(parts[1]); - if ( av_dict_set(&opts, parts[0].c_str(), parts[1].c_str(), 0) == 0 ) { - Debug(2, "set option %d '%s' to '%s'", i, parts[0].c_str(), parts[1].c_str()); - } - else - { - Warning( "Error trying to set option %d '%s' to '%s'", i, parts[0].c_str(), parts[1].c_str() ); - } - - } - else - { - Warning( "Unable to parse ffmpeg option %d '%s', expecting key=value", i, opVect[i].c_str() ); - } - } + if (Method() == "rtpMulti") { + ret = av_dict_set(&opts, "rtsp_transport", "udp_multicast", 0); + } else if (Method() == "rtpRtsp") { + ret = av_dict_set(&opts, "rtsp_transport", "tcp", 0); + } else if (Method() == "rtpRtspHttp") { + ret = av_dict_set(&opts, "rtsp_transport", "http", 0); + } + + if (ret < 0) { + Warning("Could not set rtsp_transport method '%s'\n", Method().c_str()); + } + Debug ( 1, "Calling avformat_open_input" ); mFormatContext = avformat_alloc_context( ); From 1a684b7709e8afc4ca438b934e4d2bd28cd8029e Mon Sep 17 00:00:00 2001 From: Steve Gilvarry Date: Thu, 28 Jul 2016 23:22:34 +1000 Subject: [PATCH 21/27] Remove whitespace --- src/zm_ffmpeg_camera.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 3b1adaa02..533b69b2c 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -231,7 +231,6 @@ int FfmpegCamera::OpenFfmpeg() { mOpenStart = time(NULL); mIsOpening = true; - // Open the input, not necessarily a file #if !LIBAVFORMAT_VERSION_CHECK(53, 2, 0, 4, 0) Debug ( 1, "Calling av_open_input_file" ); @@ -241,10 +240,9 @@ int FfmpegCamera::OpenFfmpeg() { AVDictionary *opts = 0; ret = av_dict_parse_string(&opts, Options().c_str(), "=", ",", 0); if (ret < 0) { - Warning("Could not parse format options list '%s'\n", Options().c_str()); + Warning("Could not parse ffmpeg input options list '%s'\n", Options().c_str()); } - // Set transport method as specified by method field, rtpUni is default if (Method() == "rtpMulti") { ret = av_dict_set(&opts, "rtsp_transport", "udp_multicast", 0); From 3c6692d0d5e4ba8a05b7d13817f3310323bc81bb Mon Sep 17 00:00:00 2001 From: Andrew Bauer Date: Sun, 31 Jul 2016 07:29:37 -0500 Subject: [PATCH 22/27] RPM specfile config change fix logrotate script --- distros/redhat/zoneminder.el6.logrotate.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distros/redhat/zoneminder.el6.logrotate.in b/distros/redhat/zoneminder.el6.logrotate.in index 5b852cba7..6b8ccf5d7 100644 --- a/distros/redhat/zoneminder.el6.logrotate.in +++ b/distros/redhat/zoneminder.el6.logrotate.in @@ -3,5 +3,5 @@ weekly notifempty missingok - create 660 http http + create 660 apache apache } From 004b651d61842a7f95fa2d9815c7595c1ae876db Mon Sep 17 00:00:00 2001 From: Andrew Bauer Date: Sun, 31 Jul 2016 15:06:39 -0500 Subject: [PATCH 23/27] RPM specfile config change use make macros, rather than hard coded values --- distros/redhat/zoneminder.el6.logrotate.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distros/redhat/zoneminder.el6.logrotate.in b/distros/redhat/zoneminder.el6.logrotate.in index 6b8ccf5d7..daf0b908f 100644 --- a/distros/redhat/zoneminder.el6.logrotate.in +++ b/distros/redhat/zoneminder.el6.logrotate.in @@ -3,5 +3,5 @@ weekly notifempty missingok - create 660 apache apache + create 660 @WEB_USER@ @WEB_GROUP@ } From 25d58f51923735764f6cb1a72314105a44fd2ee0 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Tue, 2 Aug 2016 13:22:44 -0400 Subject: [PATCH 24/27] quote the password --- scripts/zmupdate.pl.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index c0dcd3868..462cb1d18 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -460,7 +460,7 @@ if ( $version ) $command .= " -u".$dbUser; if ( $dbPass ) { - $command .= " -p".$dbPass; + $command .= ' -p"'.$dbPass.'"'; } } $command .= " ".$Config{ZM_DB_NAME}." < "; From 3a804a0d0c4ae4e5b63f1769336431528593317e Mon Sep 17 00:00:00 2001 From: Andrew Bauer Date: Sat, 6 Aug 2016 16:34:00 -0500 Subject: [PATCH 25/27] Update definemonitor.rst --- docs/userguide/definemonitor.rst | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/docs/userguide/definemonitor.rst b/docs/userguide/definemonitor.rst index d69b44425..c7c13d5a3 100644 --- a/docs/userguide/definemonitor.rst +++ b/docs/userguide/definemonitor.rst @@ -46,10 +46,19 @@ Linked Monitors This field allows you to select other monitors on your system that act as triggers for this monitor. So if you have a camera covering one aspect of your property you can force all cameras to record while that camera detects motion or other events. You can either directly enter a comma separated list of monitor ids or click on ‘Select’ to choose a selection. Be very careful not to create circular dependencies with this feature however you will have infinitely persisting alarms which is almost certainly not what you want! To unlink monitors you can ctrl-click. Maximum FPS - On some occasions you may have one or more cameras capable of high capture rates but find that you generally do not require this performance at all times and would prefer to lighten the load on your server. This option permits you to limit the maximum capture rate to a specified value. This may allow you to have more cameras supported on your system by reducing the CPU load or to allocate video bandwidth unevenly between cameras sharing the same video device. This value is only a rough guide and the lower the value you set the less close the actual FPS may approach it especially on shared devices where it can be difficult to synchronise two or more different capture rates precisely. This option controls the maximum FPS in the circumstance where no alarm is occurring only. (Note for IP cameras: ZoneMinder has no way to set or limit the mjpeg stream the camera passes, some cams you can set this through the url string, others do not. So if you're using mjpeg feeds you must NOT throttle here at the server end, only the cam end. If you want to use this feature, the server to throttle, then you MUST use jpeg instead of mjpeg method to get picture from the camera) - + On some occasions you may have one or more cameras capable of high capture rates but find that you generally do not require this performance at all times and would prefer to lighten the load on your server. This option permits you to limit the maximum capture rate to a specified value. This may allow you to have more cameras supported on your system by reducing the CPU load or to allocate video bandwidth unevenly between cameras sharing the same video device. This value is only a rough guide and the lower the value you set the less close the actual FPS may approach it especially on shared devices where it can be difficult to synchronise two or more different capture rates precisely. This option controls the maximum FPS in the circumstance where no alarm is occurring only. + + This feature is limited and will only work under the following conditions: + + #. Local cameras + #. Remote (IP) cameras in snapshot or jpeg mode **only** + + Using this field for video streams from IP cameras will cause undesirable results when the value is equal to or less than the frame rate from the camera. Note that placing a value higher than the camera's frame rate is allowed and can help prevent cpu spikes when communication from the camera is lost. + Alarm Maximum FPS If you have specified a Maximum FPS it may be that you don’t want this limitation to apply when your monitor is recording motion or other event. This setting allows you to override the Maximum FPS value if this circumstance occurs. As with the Maximum FPS setting leaving this blank implies no limit so if you have set a maximum fps in the previous option then when an alarm occurs this limit would be ignored and ZoneMinder would capture as fast as possible for the duration of the alarm, returning to the limited value after the alarm has concluded. Equally you could set this to the same, or higher (or even lower) value than Maximum FPS for more precise control over the capture rate in the event of an alarm. + + **IMPORTANT:** This field is subject to the same limitations as the Maxium FPS field. Ignoring these limitations will produce undesriable results. Reference Image Blend %ge Each analysed image in ZoneMinder is a composite of previous images and is formed by applying the current image as a certain percentage of the previous reference image. Thus, if we entered the value of 10 here, each image’s part in the reference image will diminish by a factor of 0.9 each time round. So a typical reference image will be 10% the previous image, 9% the one before that and then 8.1%, 7.2%, 6.5% and so on of the rest of the way. An image will effectively vanish around 25 images later than when it was added. This blend value is what is specified here and if higher will make slower progressing events less detectable as the reference image would change more quickly. Similarly events will be deemed to be over much sooner as the reference image adapts to the new images more quickly. In signal processing terms the higher this value the steeper the event attack and decay of the signal. It depends on your particular requirements what the appropriate value would be for you but start with 10 here and adjust it (usually down) later if necessary. From fbc0086fcceb3c2a955a74a6efcaae388b6334eb Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Mon, 8 Aug 2016 16:52:09 -0400 Subject: [PATCH 26/27] get the other dbPass use and quote it. Slight visual code style cleanup. --- scripts/zmupdate.pl.in | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index 462cb1d18..7497309c3 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -412,15 +412,12 @@ if ( $version ) { my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); my $command = "mysqldump"; - $command .= " -h".$host if defined($host); + $command .= " -h".$host if defined($host); $command .= " -P".$port if defined($port); if ( $dbUser ) { - $command .= " -u".$dbUser; - if ( $dbPass ) - { - $command .= " -p".$dbPass; - } + $command .= ' -u'.$dbUser; + $command .= ' -p"'.$dbPass.'"' if $dbPass; } my $backup = "@ZM_TMPDIR@/".$Config{ZM_DB_NAME}."-".$version.".dump"; $command .= " --add-drop-table --databases ".$Config{ZM_DB_NAME}." > ".$backup; @@ -458,10 +455,7 @@ if ( $version ) if ( $dbUser ) { $command .= " -u".$dbUser; - if ( $dbPass ) - { - $command .= ' -p"'.$dbPass.'"'; - } + $command .= ' -p"'.$dbPass.'"' if $dbPass; } $command .= " ".$Config{ZM_DB_NAME}." < "; if ( $updateDir ) From 6b70ff964b67a6415485e2b4845352d371e46415 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 10 Aug 2016 09:06:15 -0400 Subject: [PATCH 27/27] fix path in cake api cleanup rules --- distros/debian/rules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/distros/debian/rules b/distros/debian/rules index 4bdc7cb0c..473871a49 100755 --- a/distros/debian/rules +++ b/distros/debian/rules @@ -27,9 +27,9 @@ override_dh_auto_configure: override_dh_auto_install: dh_auto_install --buildsystem=cmake install -D -m 0644 debian/apache.conf $(INSTDIR)/etc/zm/apache.conf - rm $(INSTDIR)/usr/share/zoneminder/api/lib/Cake/LICENSE.txt - rm $(INSTDIR)/usr/share/zoneminder/api/.gitignore - rm -r $(INSTDIR)/usr/share/zoneminder/api/lib/Cake/Test + rm $(INSTDIR)/usr/share/zoneminder/www/api/lib/Cake/LICENSE.txt + rm $(INSTDIR)/usr/share/zoneminder/www/api/.gitignore + rm -r $(INSTDIR)/usr/share/zoneminder/www/api/lib/Cake/Test override_dh_auto_test: # do not run tests...
+ @@ -315,6 +321,9 @@ foreach( $displayMonitors as $monitor ) $fclass .= " disabledText"; $scale = max( reScale( SCALE_BASE, $monitor['DefaultScale'], ZM_WEB_DEFAULT_SCALE ), SCALE_BASE ); ?> + + '.translate('Fn'.$monitor['Function']).( empty($monitor['Enabled']) ? ', disabled' : '' ) .'', canEdit( 'Monitors' ) ) ?>